# aqs

> parse query strings with advanced features

Latest version **1.0.6** (published 2021-12-04) · MIT license · 0 weekly downloads

## Install

```sh
npm install aqs
pnpm add aqs
yarn add aqs
bun add aqs
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.6 |
| Published | 2021-12-04 |
| First published | 2021-12-04 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 30 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 3 |
| Author | AzizAhmad Noorzaie |
| Maintainers | aanoorzaie |
| Keywords | query string, querystring, parse, url, query, qs |

## Links

- npm: https://www.npmjs.com/package/aqs
- Repository: https://github.com/noorzaie/aqs
- Homepage: https://github.com/noorzaie/aqs#readme
- Issues: https://github.com/noorzaie/aqs/issues
- npm.io page: https://npm.io/package/aqs

## Alternatives

- [babylon](https://npm.io/package/babylon.md) — 5.1M weekly downloads
- [csscolorparser](https://npm.io/package/csscolorparser.md) — 3.7M weekly downloads
- [expr-eval-fork](https://npm.io/package/expr-eval-fork.md) — 1.5M weekly downloads
- [@leeoniya/ufuzzy](https://npm.io/package/@leeoniya/ufuzzy.md) — 247.7K weekly downloads
- [xml-parser](https://npm.io/package/xml-parser.md) — 78.4K weekly downloads

## Recent versions

- 1.0.6 (latest) — 2021-12-04
- 1.0.5 — 2021-12-04
- 1.0.4 — 2021-12-04
- 1.0.3 — 2021-12-04
- 1.0.2 — 2021-12-04
- 1.0.1 — 2021-12-04

## README

AQS is a query parser library that provides advanced operations comparing to typical query parser libraries.
For example, you can use different operators additional to `=`, or parse values from string to whatever you want and even define complex logic instead of just using `and` operator for parameters!

## Installation

```npm
npm install aqs
```

## Usage

### Basic
```javascript
const { parse } = require('aqs');

const parsed = parse('id=3&age=22');
```

### Use other operators
```javascript
const { parse } = require('aqs');

const parsed = parse('id=3&age{gt}22'); // Greater than
```

### Use negative operators
You can add `n` prefix to operator names or `not_` to full name of operators to make them negative.
```javascript
const { parse } = require('aqs');

const parsed = parse('id=3&age{ne}22'); // Not equal
``` 

### Use with config
```javascript
const { parse } = require('aqs');

const parsed = parse('id=3&age=22', { paramsConfigs: { age: { defaultValue: 20 } } });
```

### Use with custom logic
You can define logic of parameters in `logic` query string, using parentheses with `and` and `or` operators.

Benefit of this feature is that you can allow client side that makes more complex queries instead of simple `equal` queries.
```javascript
const { parse } = require('aqs');

const parsed = parse('skill=coding&age=30&experience=8&logic=(and,skill,(or,age,experience))');   // skill==coding and (age==30 or experience==8)
```
### Other features
There are some other features such as defining custom operators, parse values, ... that you can find them in [examples](https://github.com/noorzaie/aqs/tree/master/examples) folder.

## List of operators

| Operator        | Full-name           |
| ------------- | -------------:|
| e      | equal |
| i      | in      |
| sw | startsWith      |
| ew | endsWith      |
| gt | greaterThan      |
| lt | lessThan      |
| ge | greaterOrEqual      |
| le | lessOrEqual      |
| b | between      |
| c | contains      |
| ic | includes      |
| l | like      |
| il | ilike      |
| r | regex      |

## Configurations

<table>
<tr>
<td></td>
<th>Option</th>
<th>Description</th>
<th>Default value</th>
</tr>
<tr><td rowspan="7"><b>paramsConfigs</b><br>(Configs that can be set for each parameter)</td>
<td>defaultValue</td><td>Default value of specific param</td><td></td></tr>
<tr><td>defaultOptions</td><td>Set default operator for specific param</td><td></td></tr>
<tr><td>parser</td><td>Use a parser to parse value</td><td></td></tr>
<tr><td>allowUnParseAble</td><td>If true, throws error if value is not parsable with the parser, Otherwise unparsed value will be used</td><td>false</td></tr>
<tr><td>alias</td><td>Use another key instead of passed key</td><td></td></tr>
<tr><td>allowedOps</td><td>List of allowed operators to be used</td><td>all</td></tr>
<tr><td>mapOp</td><td>If false, short name of operator will be returned, Otherwise fullname of operator will be returned</td><td>true</td></tr>

<tr><td rowspan="7"><b>globalConfigs</b><br>(Configs that will be applied on all parameters)</td>
<td>allowedParams</td><td>List of parameters that could be passed in query string</td><td>all</td></tr>
<tr><td>excludedParams</td><td>List of parameters that could not be passed in query string</td><td></td></tr>
<tr><td>parseArrays</td><td>Parse array values or not</td><td>true</td></tr>
<tr><td>parseJsons</td><td>Parse json values or not</td><td>true</td></tr>
<tr><td>throwOnIllegalOp</td><td>If true, throws error if an unknown operator passed</td><td>false</td></tr>
<tr><td>allowLogic</td><td>Allow logic in query string or not</td><td>true</td></tr>
<tr><td>throwWrongLogic</td><td>Throw error if incorrect logic passed</td><td>false</td></tr>

<tr><td rowspan="7"><b>fixedParams</b><br>(List of parameters that always will be returned)</td>
<td>name</td><td>Name of parameter</td><td></td></tr>
<tr><td>value</td><td>Value of parameter</td><td></td></tr>
<tr><td>op</td><td>Operator of parameter</td><td></td></tr>
<tr><td>not</td><td>Negate operator or not</td><td></td></tr>

</table>

---
_Source: https://npm.io/package/aqs · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
