Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/fedemartinm/search-operators
A search operators parser to filter search results
https://github.com/fedemartinm/search-operators
javascript nodejs parser search
Last synced: 13 days ago
JSON representation
A search operators parser to filter search results
- Host: GitHub
- URL: https://github.com/fedemartinm/search-operators
- Owner: fedemartinm
- License: mit
- Created: 2020-04-18T00:41:57.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2023-01-06T03:42:16.000Z (almost 2 years ago)
- Last Synced: 2024-09-30T07:17:26.238Z (about 2 months ago)
- Topics: javascript, nodejs, parser, search
- Language: JavaScript
- Size: 1.7 MB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
![npm](https://img.shields.io/npm/v/search-operators)
![npm bundle size](https://img.shields.io/bundlephobia/minzip/search-operators?color=green)# Search Operators
A search operators parser to filter search requests- Unicode support
- Case-insensitive
- Based on LR parser
- No dependencies### Installation
```shell
yarn add search-operators
```or
```shell
npm install search-operators --save
```### Basic Usage
```js
const searchOperators = require('./search-operators');
var value = searchOperators.parse('+github.com useState useEffect');
console.log(value);
//the parser will separate the text in terms and filters.
//{
// "filters": [{ "type": "exact", "value": "github.com" }],
// "terms": ["useState","useEffect"]
//}
```### Operators
Operator | Description | Parser input | Parser output |
| :--: | -- | -- | -- |
| **" "** | exact word or phrase | "bash history file" | { filters : [ { type: 'exact', value: 'bash history file' } ] }
| **+** | exact word | +github.com | { filters:[ { type: 'exact', value: 'github.com' } ] }
| **-** | exclude word | -php | { filters:[ { type: 'exclude', value: 'php' } ] }
| **:** | match | in:general | { filters:[ { type: 'match', key:'in', value: 'general' } ] }
| **not :** | inverse match | not in:random | { filters:[ { type: 'not-match', key:'in', value: 'random' } ] }### API
- Parse
```js
parser.parse(
search, //string to parse
{ keys:[] } //keys used by match operator
);
```
- Tokens
```js
//populated after parse, contains token location
//useful to highlight syntax!
parser.parse("-😊");
console.log(parser.tokens);
//{
// type: 'EXCLUDE_OP',
// value: '😊',
// startOffset: 0,
// endOffset: 3,
// startLine: 1,
// endLine: 1,
// startColumn: 0,
// endColumn: 3
//}
```### Development
This project is intended to be extended or modified. It's uses syntax to generate the parser; in case you need to modify the grammar, [syntax](https://github.com/DmitrySoshnikov/syntax) is very well documented. Any contribution is very appreciated.
1. Fork [search-operators](https://github.com/fedemartinm/search-operators/) repo.
2. Make your changes
3. Validate grammar with `npm run validate`
4. Test parser with `npm run test`Use `npm run build` to transpile and generate production build.
## Licence
[MIT](https://github.com/fedemartinm/search-operators/blob/master/LICENSE) do whatever you want to do!