@venizia/ignis-filter 0.2.0-9 → 0.2.1-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +0 -1
- package/README.md +76 -55
- package/dist/cjs/common/index.d.ts +1 -0
- package/dist/cjs/common/index.d.ts.map +1 -1
- package/dist/cjs/common/index.js +1 -0
- package/dist/cjs/common/index.js.map +1 -1
- package/dist/cjs/common/operators.d.ts +2 -0
- package/dist/cjs/common/operators.d.ts.map +1 -1
- package/dist/cjs/common/operators.js +5 -0
- package/dist/cjs/common/operators.js.map +1 -1
- package/dist/cjs/common/order.d.ts +10 -0
- package/dist/cjs/common/order.d.ts.map +1 -0
- package/dist/cjs/common/order.js +77 -0
- package/dist/cjs/common/order.js.map +1 -0
- package/dist/cjs/common/types.d.ts +38 -1
- package/dist/cjs/common/types.d.ts.map +1 -1
- package/dist/esm/common/index.d.ts +3 -2
- package/dist/esm/common/index.d.ts.map +1 -1
- package/dist/esm/common/index.js +3 -2
- package/dist/esm/common/index.js.map +1 -1
- package/dist/esm/common/operators.d.ts +2 -0
- package/dist/esm/common/operators.d.ts.map +1 -1
- package/dist/esm/common/operators.js +5 -0
- package/dist/esm/common/operators.js.map +1 -1
- package/dist/esm/common/order.d.ts +10 -0
- package/dist/esm/common/order.d.ts.map +1 -0
- package/dist/esm/common/order.js +73 -0
- package/dist/esm/common/order.js.map +1 -0
- package/dist/esm/common/types.d.ts +38 -1
- package/dist/esm/common/types.d.ts.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/package.json +4 -0
- package/dist/esm/schemas/builder.d.ts +1 -1
- package/dist/esm/schemas/common/index.d.ts +1 -1
- package/dist/esm/schemas/common/index.js +1 -1
- package/dist/esm/schemas/index.d.ts +2 -2
- package/dist/esm/schemas/index.js +3 -3
- package/package.json +4 -4
package/LICENSE.md
CHANGED
|
@@ -72,7 +72,6 @@ Ignis uses the following open-source libraries. We are grateful to the authors a
|
|
|
72
72
|
|
|
73
73
|
| Library | License | Description |
|
|
74
74
|
|---------|---------|-------------|
|
|
75
|
-
| [Lodash](https://github.com/lodash/lodash) | MIT | Utility library |
|
|
76
75
|
| [reflect-metadata](https://github.com/rbuckton/reflect-metadata) | Apache-2.0 | Metadata reflection API |
|
|
77
76
|
|
|
78
77
|
### Documentation Dependencies
|
package/README.md
CHANGED
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
# @venizia/ignis-filter
|
|
2
2
|
|
|
3
|
-
The
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
It is **isomorphic by construction**. The package resolves to no node builtin and no server-only
|
|
7
|
-
peer, so the same filter language describes a query against a Postgres repository on the server and
|
|
8
|
-
against a WASM database in a browser worker. A guard test bundles the barrel for `target: 'browser'`
|
|
9
|
-
and fails if anything outside `@venizia/ignis-inversion`, `lodash` and `reflect-metadata` enters the
|
|
10
|
-
graph.
|
|
3
|
+
The query filter language of IGNIS: the `TFilter` shape, its operators, and the zod schemas that
|
|
4
|
+
validate it. Install it directly when you want the language without the server framework, for
|
|
5
|
+
example in a browser.
|
|
11
6
|
|
|
12
7
|
## Install
|
|
13
8
|
|
|
@@ -15,72 +10,98 @@ graph.
|
|
|
15
10
|
bun add @venizia/ignis-filter
|
|
16
11
|
```
|
|
17
12
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
want the vocabulary **without** the server framework, which is the browser case.
|
|
13
|
+
An application on `@venizia/ignis` does not need it: `TFilter`, `QueryOperators`, `Sorts` and the
|
|
14
|
+
schemas are re-exported from `@venizia/ignis`.
|
|
21
15
|
|
|
22
|
-
##
|
|
16
|
+
## Use it
|
|
23
17
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
| `TFields` | Field selection - array of names, or an object keyed by name |
|
|
29
|
-
| `TInclusion` | One relation to include, with an optional nested `scope` |
|
|
30
|
-
| `TLimit`, `TOffset`, `TSkip`, `TOrderBy` | The scalar members of the shape |
|
|
31
|
-
| `QueryOperators` | Comparison, pattern, null, array and logical operators, plus `isValid` |
|
|
32
|
-
| `TQueryOperator` | The operator union, derived from the const class |
|
|
33
|
-
| `Sorts` | `ASC` / `DESC`, plus `isValid` |
|
|
34
|
-
|
|
35
|
-
```ts
|
|
18
|
+
A filter is a plain object. Type it against your entity, and an unknown field in `where` is a
|
|
19
|
+
compile error.
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
36
22
|
import { QueryOperators, Sorts, type TFilter } from '@venizia/ignis-filter';
|
|
37
23
|
|
|
38
|
-
|
|
39
|
-
|
|
24
|
+
type TUser = { id: number; status: string; createdAt: string };
|
|
25
|
+
|
|
26
|
+
const filter: TFilter<TUser> = {
|
|
27
|
+
where: {
|
|
28
|
+
status: 'active',
|
|
29
|
+
createdAt: { [QueryOperators.GTE]: '2026-01-01' },
|
|
30
|
+
or: [{ id: { [QueryOperators.IN]: [1, 2, 3] } }, { status: 'pending' }],
|
|
31
|
+
},
|
|
40
32
|
order: [`createdAt ${Sorts.DESC}`],
|
|
41
33
|
limit: 20,
|
|
42
34
|
};
|
|
43
35
|
```
|
|
44
36
|
|
|
45
|
-
|
|
37
|
+
A bare value means `eq`, and `null` means `is`. The same object works against every IGNIS
|
|
38
|
+
repository. Each connector translates it for its engine and throws on an operator the engine does
|
|
39
|
+
not support.
|
|
46
40
|
|
|
47
|
-
|
|
41
|
+
## Validate a filter from the wire
|
|
42
|
+
|
|
43
|
+
Import the schemas from the `/schemas` entry point. `FilterSchema` and `WhereSchema` accept an
|
|
44
|
+
object or a JSON string.
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
48
47
|
import { FilterSchema, WhereSchema } from '@venizia/ignis-filter/schemas';
|
|
49
48
|
|
|
50
|
-
const
|
|
51
|
-
const where = WhereSchema.
|
|
49
|
+
const filter = FilterSchema.parse('{"where":{"status":"active"},"limit":20}');
|
|
50
|
+
const where = WhereSchema.safeParse('not-json'); // success: false - a validation issue, not a throw
|
|
52
51
|
```
|
|
53
52
|
|
|
54
|
-
A
|
|
55
|
-
|
|
56
|
-
`InclusionSchema`, `LimitSchema`, `OffsetSchema`, `SkipSchema`, `OrderBySchema`.
|
|
53
|
+
A negative or fractional `limit`, `offset` or `skip` fails validation. `include[].scope` takes a
|
|
54
|
+
nested filter.
|
|
57
55
|
|
|
58
|
-
|
|
59
|
-
> OpenAPI metadata - they validate identically but document nothing, so a route built on them
|
|
60
|
-
> produces an API reference with no descriptions.
|
|
56
|
+
## What it carries
|
|
61
57
|
|
|
62
|
-
|
|
63
|
-
|
|
58
|
+
| Export | What it is |
|
|
59
|
+
| :--- | :--- |
|
|
60
|
+
| `TFilter<T>` | `{ where, fields, include, order, limit, offset, skip }` |
|
|
61
|
+
| `TWhere<T>` | Conditions keyed by the fields of `T`, with nested `and` / `or` |
|
|
62
|
+
| `TWhereOperators<V>`, `TWhereValue<V>` | The operator object and what one field accepts |
|
|
63
|
+
| `TFields<T>` | An array of field names, or `{ field: true \| false }` |
|
|
64
|
+
| `TInclusion` | `{ relation, scope? }`: a relation to load, with its own filter |
|
|
65
|
+
| `TIsoTimestamp` | A branded string for ISO timestamp columns; `where` also accepts a `Date` for it |
|
|
66
|
+
| `QueryOperators` | The operator names, plus `isValid()` |
|
|
67
|
+
| `Sorts` | `ASC` / `DESC`, plus `isValid()` |
|
|
64
68
|
|
|
65
|
-
|
|
66
|
-
|
|
69
|
+
| Operators | Names |
|
|
70
|
+
| :--- | :--- |
|
|
71
|
+
| Comparison | `eq`, `ne`, `neq`, `gt`, `gte`, `lt`, `lte` |
|
|
72
|
+
| Pattern | `like`, `nlike`, `ilike`, `nilike`, `regexp`, `iregexp` |
|
|
73
|
+
| Null | `is`, `isn` |
|
|
74
|
+
| List and range | `in`, `inq`, `nin`, `between`, `notBetween` |
|
|
75
|
+
| Array columns | `contains`, `containedBy`, `overlaps` |
|
|
76
|
+
| Other | `exists`, `notExists`, `not`, `and`, `or` |
|
|
67
77
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
78
|
+
## Entry points
|
|
79
|
+
|
|
80
|
+
| Entry point | What it gives | Extra peers |
|
|
81
|
+
| :--- | :--- | :--- |
|
|
82
|
+
| `@venizia/ignis-filter` | Types, `QueryOperators`, `Sorts`. Does not load zod | none |
|
|
83
|
+
| `@venizia/ignis-filter/schemas` | `FilterSchema`, `WhereSchema`, `FieldsSchema`, `InclusionSchema`, `LimitSchema`, `OffsetSchema`, `SkipSchema`, `OrderBySchema`, `buildQuerySchemas` | none (`zod` is a dependency) |
|
|
84
|
+
|
|
85
|
+
Both ship CommonJS and ES module builds, with no node builtin, so they load in a browser.
|
|
86
|
+
|
|
87
|
+
The schemas here carry no OpenAPI descriptions. On a server, import them from `@venizia/ignis`
|
|
88
|
+
instead: the same schemas, built through `buildQuerySchemas({ decorate })` with an OpenAPI
|
|
89
|
+
decorator, so your API reference documents them.
|
|
90
|
+
|
|
91
|
+
The schema's inferred type is looser than `TFilter<T>`. It describes what arrives over the wire,
|
|
92
|
+
so it accepts any field name in `where`.
|
|
93
|
+
|
|
94
|
+
## Where it sits
|
|
72
95
|
|
|
73
|
-
|
|
96
|
+
Depends on inversion. Used by kernel and connectors: dev-configs -> inversion -> {**filter**,
|
|
97
|
+
helpers} -> {boot, kernel} -> connectors -> {core-worker, core-server} -> atlas.
|
|
74
98
|
|
|
75
|
-
|
|
76
|
-
Postgres translator is Drizzle-coupled and lives with its connector. Operator support differs per
|
|
77
|
-
engine, and an unsupported operator throws at translation time rather than being dropped from this
|
|
78
|
-
list.
|
|
79
|
-
- **Types inferred from the schemas.** `TFilter<T>` is generic over the entity, so `TFilter<User>`
|
|
80
|
-
rejects `{ where: { notAField: 1 } }`; `z.infer<typeof FilterSchema>` accepts it, because the
|
|
81
|
-
recursive where-clause is `z.ZodType<any>`. The schema describes what arrives over the wire, the
|
|
82
|
-
type describes what application code builds, and they only overlap in the middle.
|
|
99
|
+
## Links
|
|
83
100
|
|
|
84
|
-
|
|
101
|
+
- [Filter system](https://ignis.venizia.ai/references/base/filter-system/)
|
|
102
|
+
- [Filter quick reference](https://ignis.venizia.ai/references/base/filter-system/quick-reference)
|
|
103
|
+
- [Changelog: the filter package](https://ignis.venizia.ai/changelogs/2026-07-25-ignis-filter-package)
|
|
104
|
+
- [Changelog](https://ignis.venizia.ai/changelogs/)
|
|
105
|
+
- [Source](https://github.com/VENIZIA-AI/ignis/blob/main/packages/filter)
|
|
85
106
|
|
|
86
|
-
MIT
|
|
107
|
+
MIT licensed - see [LICENSE.md](./LICENSE.md).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
|
package/dist/cjs/common/index.js
CHANGED
|
@@ -15,5 +15,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./operators"), exports);
|
|
18
|
+
__exportStar(require("./order"), exports);
|
|
18
19
|
__exportStar(require("./types"), exports);
|
|
19
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,0CAAwB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,0CAAwB;AACxB,0CAAwB"}
|
|
@@ -30,6 +30,8 @@ export declare class QueryOperators {
|
|
|
30
30
|
static readonly NOT_EXISTS = "notExists";
|
|
31
31
|
static readonly BETWEEN = "between";
|
|
32
32
|
static readonly NOT_BETWEEN = "notBetween";
|
|
33
|
+
static readonly IN_SQL = "inSql";
|
|
34
|
+
static readonly NOT_IN_SQL = "ninSql";
|
|
33
35
|
static readonly CONTAINS = "contains";
|
|
34
36
|
static readonly CONTAINED_BY = "containedBy";
|
|
35
37
|
static readonly OVERLAPS = "overlaps";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operators.d.ts","sourceRoot":"","sources":["../../../src/common/operators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAItE,qDAAqD;AACrD,qBAAa,KAAK;IAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,UAAU;IAC9B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAC5B,MAAM,CAAC,QAAQ,CAAC,UAAU,cAAoC;IAE9D,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAGvC;AAeD,iGAAiG;AACjG,qBAAa,cAAc;IACzB,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAE5B,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAE5B,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAE5B,MAAM,CAAC,QAAQ,CAAC,IAAI,UAAU;IAC9B,MAAM,CAAC,QAAQ,CAAC,QAAQ,WAAW;IACnC,MAAM,CAAC,QAAQ,CAAC,KAAK,WAAW;IAChC,MAAM,CAAC,QAAQ,CAAC,SAAS,YAAY;IAErC,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,MAAM,SAAS;IAC/B,MAAM,CAAC,QAAQ,CAAC,MAAM,YAAY;IAClC,MAAM,CAAC,QAAQ,CAAC,OAAO,aAAa;IAEpC,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAC5B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAE5B,MAAM,CAAC,QAAQ,CAAC,MAAM,YAAY;IAClC,MAAM,CAAC,QAAQ,CAAC,UAAU,eAAe;IAEzC,MAAM,CAAC,QAAQ,CAAC,OAAO,aAAa;IACpC,MAAM,CAAC,QAAQ,CAAC,WAAW,gBAAgB;IAG3C,MAAM,CAAC,QAAQ,CAAC,QAAQ,cAAc;IACtC,MAAM,CAAC,QAAQ,CAAC,YAAY,iBAAiB;IAC7C,MAAM,CAAC,QAAQ,CAAC,QAAQ,cAAc;IAEtC,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAC5B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAC5B,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAE1B,MAAM,CAAC,QAAQ,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"operators.d.ts","sourceRoot":"","sources":["../../../src/common/operators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAItE,qDAAqD;AACrD,qBAAa,KAAK;IAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,UAAU;IAC9B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAC5B,MAAM,CAAC,QAAQ,CAAC,UAAU,cAAoC;IAE9D,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAGvC;AAeD,iGAAiG;AACjG,qBAAa,cAAc;IACzB,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAE5B,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAE5B,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAE5B,MAAM,CAAC,QAAQ,CAAC,IAAI,UAAU;IAC9B,MAAM,CAAC,QAAQ,CAAC,QAAQ,WAAW;IACnC,MAAM,CAAC,QAAQ,CAAC,KAAK,WAAW;IAChC,MAAM,CAAC,QAAQ,CAAC,SAAS,YAAY;IAErC,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,MAAM,SAAS;IAC/B,MAAM,CAAC,QAAQ,CAAC,MAAM,YAAY;IAClC,MAAM,CAAC,QAAQ,CAAC,OAAO,aAAa;IAEpC,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAC5B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAE5B,MAAM,CAAC,QAAQ,CAAC,MAAM,YAAY;IAClC,MAAM,CAAC,QAAQ,CAAC,UAAU,eAAe;IAEzC,MAAM,CAAC,QAAQ,CAAC,OAAO,aAAa;IACpC,MAAM,CAAC,QAAQ,CAAC,WAAW,gBAAgB;IAG3C,MAAM,CAAC,QAAQ,CAAC,MAAM,WAAW;IACjC,MAAM,CAAC,QAAQ,CAAC,UAAU,YAAY;IAGtC,MAAM,CAAC,QAAQ,CAAC,QAAQ,cAAc;IACtC,MAAM,CAAC,QAAQ,CAAC,YAAY,iBAAiB;IAC7C,MAAM,CAAC,QAAQ,CAAC,QAAQ,cAAc;IAEtC,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAC5B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAC5B,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAE1B,MAAM,CAAC,QAAQ,CAAC,UAAU,cA+BvB;IAEH,MAAM,CAAC,QAAQ,CAAC,uBAAuB,cAAgC;IAEvE,MAAM,CAAC,QAAQ,CAAC,4BAA4B,cAOzC;IAEH,4FAA4F;IAC5F,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,GAAG,OAAO;IAyB9E,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;CAGzC;AAED,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,cAAc,CAAC,CAAC"}
|
|
@@ -47,6 +47,9 @@ class QueryOperators {
|
|
|
47
47
|
static { this.NOT_EXISTS = 'notExists'; }
|
|
48
48
|
static { this.BETWEEN = 'between'; }
|
|
49
49
|
static { this.NOT_BETWEEN = 'notBetween'; }
|
|
50
|
+
// Subquery operators: the operand is a Drizzle SQL object built in code, never a request value.
|
|
51
|
+
static { this.IN_SQL = 'inSql'; }
|
|
52
|
+
static { this.NOT_IN_SQL = 'ninSql'; }
|
|
50
53
|
// Array Column Operators (PostgreSQL specific)
|
|
51
54
|
static { this.CONTAINS = 'contains'; } // @> array contains
|
|
52
55
|
static { this.CONTAINED_BY = 'containedBy'; } // <@ array is contained by
|
|
@@ -77,6 +80,8 @@ class QueryOperators {
|
|
|
77
80
|
this.NOT_EXISTS,
|
|
78
81
|
this.BETWEEN,
|
|
79
82
|
this.NOT_BETWEEN,
|
|
83
|
+
this.IN_SQL,
|
|
84
|
+
this.NOT_IN_SQL,
|
|
80
85
|
this.CONTAINS,
|
|
81
86
|
this.CONTAINED_BY,
|
|
82
87
|
this.OVERLAPS,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operators.js","sourceRoot":"","sources":["../../../src/common/operators.ts"],"names":[],"mappings":";;;AAAA,8DAAsE;AAEtE,8KAA8K;AAE9K,qDAAqD;AACrD,MAAa,KAAK;aACA,SAAI,GAAG,MAAM,CAAC;aACd,QAAG,GAAG,KAAK,CAAC;aACZ,eAAU,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAE9D,MAAM,CAAC,OAAO,CAAC,KAAa;QAC1B,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IACnD,CAAC;;AAPH,sBAQC;AAED,0GAA0G;AAC1G,MAAM,oBAAoB,GAAG,CAAC,IAAoC,EAAW,EAAE;IAC7E,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAE3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,IAAA,0BAAQ,EAAC;YACb,OAAO,EAAE,mDAAmD,EAAE,yCAAyC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;SAC/H,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF,iGAAiG;AACjG,MAAa,cAAc;aACT,OAAE,GAAG,IAAI,CAAC;aACV,OAAE,GAAG,IAAI,CAAC;aACV,QAAG,GAAG,KAAK,CAAC;aAEZ,OAAE,GAAG,IAAI,CAAC;aACV,QAAG,GAAG,KAAK,CAAC;aAEZ,OAAE,GAAG,IAAI,CAAC;aACV,QAAG,GAAG,KAAK,CAAC;aAEZ,SAAI,GAAG,MAAM,CAAC;aACd,aAAQ,GAAG,OAAO,CAAC;aACnB,UAAK,GAAG,OAAO,CAAC;aAChB,cAAS,GAAG,QAAQ,CAAC;aAErB,OAAE,GAAG,IAAI,CAAC;aACV,WAAM,GAAG,KAAK,CAAC;aACf,WAAM,GAAG,QAAQ,CAAC;aAClB,YAAO,GAAG,SAAS,CAAC;aAEpB,OAAE,GAAG,IAAI,CAAC;aACV,QAAG,GAAG,KAAK,CAAC;aACZ,QAAG,GAAG,KAAK,CAAC;aAEZ,WAAM,GAAG,QAAQ,CAAC;aAClB,eAAU,GAAG,WAAW,CAAC;aAEzB,YAAO,GAAG,SAAS,CAAC;aACpB,gBAAW,GAAG,YAAY,CAAC;IAE3C,+CAA+C;aAC/B,aAAQ,GAAG,UAAU,CAAC,GAAC,oBAAoB;aAC3C,iBAAY,GAAG,aAAa,CAAC,GAAC,2BAA2B;aACzD,aAAQ,GAAG,UAAU,CAAC,GAAC,oBAAoB;aAE3C,QAAG,GAAG,KAAK,CAAC;aACZ,QAAG,GAAG,KAAK,CAAC;aACZ,OAAE,GAAG,IAAI,CAAC;aAEV,eAAU,GAAG,IAAI,GAAG,CAAC;QACnC,IAAI,CAAC,EAAE;QACP,IAAI,CAAC,EAAE;QACP,IAAI,CAAC,GAAG;QACR,IAAI,CAAC,EAAE;QACP,IAAI,CAAC,GAAG;QACR,IAAI,CAAC,EAAE;QACP,IAAI,CAAC,GAAG;QACR,IAAI,CAAC,IAAI;QACT,IAAI,CAAC,QAAQ;QACb,IAAI,CAAC,KAAK;QACV,IAAI,CAAC,SAAS;QACd,IAAI,CAAC,EAAE;QACP,IAAI,CAAC,MAAM;QACX,IAAI,CAAC,MAAM;QACX,IAAI,CAAC,OAAO;QACZ,IAAI,CAAC,EAAE;QACP,IAAI,CAAC,GAAG;QACR,IAAI,CAAC,GAAG;QACR,IAAI,CAAC,MAAM;QACX,IAAI,CAAC,UAAU;QACf,IAAI,CAAC,OAAO;QACZ,IAAI,CAAC,WAAW;QAChB,IAAI,CAAC,QAAQ;QACb,IAAI,CAAC,YAAY;QACjB,IAAI,CAAC,QAAQ;QACb,IAAI,CAAC,GAAG;QACR,IAAI,CAAC,GAAG;QACR,IAAI,CAAC,EAAE;KACR,CAAC,CAAC;aAEa,4BAAuB,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;aAEvD,iCAA4B,GAAG,IAAI,GAAG,CAAC;QACrD,IAAI,CAAC,EAAE;QACP,IAAI,CAAC,GAAG;QACR,IAAI,CAAC,EAAE;QACP,IAAI,CAAC,GAAG;QACR,IAAI,CAAC,OAAO;QACZ,IAAI,CAAC,WAAW;KACjB,CAAC,CAAC;IAEH,4FAA4F;IAC5F,MAAM,CAAC,oBAAoB,CAAC,IAAwC;QAClE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAC3B,IAAI,UAAU,GAAG,KAAK,CAAC;QAEvB,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC/C,SAAS;YACX,CAAC;YAED,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;YAE5B,IAAI,EAAE,KAAK,IAAI,CAAC,OAAO,IAAI,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnD,MAAM,cAAc,GAAG,oBAAoB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC3D,UAAU,GAAG,UAAU,IAAI,cAAc,CAAC;gBAC1C,SAAS;YACX,CAAC;YAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,UAAU,GAAG,IAAI,CAAC;YACpB,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,OAAe;QAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;;
|
|
1
|
+
{"version":3,"file":"operators.js","sourceRoot":"","sources":["../../../src/common/operators.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { TParsedOrderEntry } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Reads one order entry - `field` or `field direction`, tokens separated by whitespace, direction
|
|
4
|
+
* `ASC` or `DESC` in any case (default `ASC`). Throws a 400 naming the whole entry when the field is
|
|
5
|
+
* missing, the direction is unknown, or the entry has more than two tokens.
|
|
6
|
+
*/
|
|
7
|
+
export declare const parseOrderEntry: (opts: {
|
|
8
|
+
entry: string;
|
|
9
|
+
}) => TParsedOrderEntry;
|
|
10
|
+
//# sourceMappingURL=order.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"order.d.ts","sourceRoot":"","sources":["../../../src/common/order.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAkB,MAAM,SAAS,CAAC;AAmCjE;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,KAAG,iBAiDzD,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseOrderEntry = void 0;
|
|
4
|
+
const ignis_inversion_1 = require("@venizia/ignis-inversion");
|
|
5
|
+
const operators_1 = require("./operators");
|
|
6
|
+
/** Characters `JSON.stringify` leaves raw that still break a log line: DEL, C1 controls, U+2028, U+2029. */
|
|
7
|
+
const RAW_AFTER_JSON = /[\u007f-\u009f\u2028\u2029]/g;
|
|
8
|
+
/** The entry quoted for an error message: JSON-escaped, and on one line whatever it holds. */
|
|
9
|
+
const quoteEntry = (opts) => JSON.stringify(opts.entry).replace(RAW_AFTER_JSON, character => `\\u${character.charCodeAt(0).toString(16).padStart(4, '0')}`);
|
|
10
|
+
// ASCII whitespace: space, tab, line feed, vertical tab, form feed, carriage return.
|
|
11
|
+
const isSeparator = (code) => code === 32 || (code >= 9 && code <= 13);
|
|
12
|
+
const toSortDirection = (opts) => {
|
|
13
|
+
const { direction } = opts;
|
|
14
|
+
// The spellings callers write, compared without allocating; anything else is lowercased.
|
|
15
|
+
switch (direction) {
|
|
16
|
+
case 'ASC':
|
|
17
|
+
case 'asc': {
|
|
18
|
+
return operators_1.Sorts.ASC;
|
|
19
|
+
}
|
|
20
|
+
case 'DESC':
|
|
21
|
+
case 'desc': {
|
|
22
|
+
return operators_1.Sorts.DESC;
|
|
23
|
+
}
|
|
24
|
+
default: {
|
|
25
|
+
const lowered = direction.toLowerCase();
|
|
26
|
+
return lowered === operators_1.Sorts.ASC || lowered === operators_1.Sorts.DESC ? lowered : undefined;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Reads one order entry - `field` or `field direction`, tokens separated by whitespace, direction
|
|
32
|
+
* `ASC` or `DESC` in any case (default `ASC`). Throws a 400 naming the whole entry when the field is
|
|
33
|
+
* missing, the direction is unknown, or the entry has more than two tokens.
|
|
34
|
+
*/
|
|
35
|
+
const parseOrderEntry = (opts) => {
|
|
36
|
+
const { entry } = opts;
|
|
37
|
+
const trimmed = entry.trim();
|
|
38
|
+
const length = trimmed.length;
|
|
39
|
+
if (length === 0) {
|
|
40
|
+
throw (0, ignis_inversion_1.getError)({
|
|
41
|
+
statusCode: 400,
|
|
42
|
+
message: `[parseOrderEntry] Order entry has no field | entry: ${quoteEntry({ entry })}`,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
let fieldEnd = 0;
|
|
46
|
+
while (fieldEnd < length && !isSeparator(trimmed.charCodeAt(fieldEnd))) {
|
|
47
|
+
fieldEnd++;
|
|
48
|
+
}
|
|
49
|
+
if (fieldEnd === length) {
|
|
50
|
+
return { field: trimmed, direction: operators_1.Sorts.ASC };
|
|
51
|
+
}
|
|
52
|
+
// `trimmed` ends on a non-separator, so a direction token follows the gap.
|
|
53
|
+
let directionStart = fieldEnd + 1;
|
|
54
|
+
while (isSeparator(trimmed.charCodeAt(directionStart))) {
|
|
55
|
+
directionStart++;
|
|
56
|
+
}
|
|
57
|
+
let directionEnd = directionStart + 1;
|
|
58
|
+
while (directionEnd < length && !isSeparator(trimmed.charCodeAt(directionEnd))) {
|
|
59
|
+
directionEnd++;
|
|
60
|
+
}
|
|
61
|
+
if (directionEnd !== length) {
|
|
62
|
+
throw (0, ignis_inversion_1.getError)({
|
|
63
|
+
statusCode: 400,
|
|
64
|
+
message: `[parseOrderEntry] Too many tokens | entry: ${quoteEntry({ entry })} | Expected: '<field>' or '<field> ASC|DESC'`,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
const direction = toSortDirection({ direction: trimmed.slice(directionStart) });
|
|
68
|
+
if (!direction) {
|
|
69
|
+
throw (0, ignis_inversion_1.getError)({
|
|
70
|
+
statusCode: 400,
|
|
71
|
+
message: `[parseOrderEntry] Invalid direction | entry: ${quoteEntry({ entry })} | Expected: 'ASC' or 'DESC'`,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
return { field: trimmed.slice(0, fieldEnd), direction };
|
|
75
|
+
};
|
|
76
|
+
exports.parseOrderEntry = parseOrderEntry;
|
|
77
|
+
//# sourceMappingURL=order.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"order.js","sourceRoot":"","sources":["../../../src/common/order.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
/** The filter shape, free of any runtime import. The zod schemas that validate this shape over HTTP stay in `@venizia/ignis-core` - they parse query strings and pull in the OpenAPI layer, which is a server concern. Do not import a value here; the purity guard fails if this file resolves to anything. */
|
|
2
|
+
import type { TConstValue } from '@venizia/ignis-inversion';
|
|
3
|
+
import type { Sorts } from './operators';
|
|
2
4
|
/** Fields selection - an array of field names to include, or an object keyed by field name (`true` includes, `false` excludes). */
|
|
3
5
|
export type TFields<T = any> = Partial<{
|
|
4
6
|
[K in keyof T]: boolean;
|
|
@@ -14,6 +16,13 @@ export type TIsoTimestamp = string & {
|
|
|
14
16
|
};
|
|
15
17
|
/** Adds `Date` to a branded `TIsoTimestamp` value type; every other type passes through unchanged. */
|
|
16
18
|
type TWidenIsoTimestamp<V> = V extends TIsoTimestamp ? V | Date : V;
|
|
19
|
+
/**
|
|
20
|
+
* A SQL fragment built in code - a Drizzle `SQL` or `SQLWrapper` - named structurally so this
|
|
21
|
+
* package stays free of Drizzle. JSON from a request can never satisfy it.
|
|
22
|
+
*/
|
|
23
|
+
export type TSqlFragment = {
|
|
24
|
+
getSQL(): unknown;
|
|
25
|
+
};
|
|
17
26
|
/** Field-level comparison operators, mirrored 1:1 from `QueryOperators` in `common/operators.ts`. */
|
|
18
27
|
export type TWhereOperators<V> = {
|
|
19
28
|
eq?: V;
|
|
@@ -38,6 +47,8 @@ export type TWhereOperators<V> = {
|
|
|
38
47
|
notExists?: boolean;
|
|
39
48
|
between?: [V, V];
|
|
40
49
|
notBetween?: [V, V];
|
|
50
|
+
inSql?: TSqlFragment;
|
|
51
|
+
ninSql?: TSqlFragment;
|
|
41
52
|
contains?: V | V[];
|
|
42
53
|
containedBy?: V | V[];
|
|
43
54
|
overlaps?: V | V[];
|
|
@@ -49,9 +60,22 @@ export type TWhereOperators<V> = {
|
|
|
49
60
|
* bare - the column's own `toDriver` already converts one.
|
|
50
61
|
*/
|
|
51
62
|
export type TWhereValue<V> = TWidenIsoTimestamp<V> | null | TWhereOperators<TWidenIsoTimestamp<V>>;
|
|
52
|
-
/**
|
|
63
|
+
/** `true` when a column value can hold JSON: `unknown`, `any` or an object other than a `Date` or a `TIsoTimestamp`. */
|
|
64
|
+
type TIsJsonValue<V> = unknown extends V ? true : V extends Date | TIsoTimestamp ? false : V extends object ? true : false;
|
|
65
|
+
/** The columns of `T` whose value can hold JSON - the only columns a JSON-path key may start with. */
|
|
66
|
+
export type TJsonColumnKey<T> = {
|
|
67
|
+
[K in keyof T & string]: TIsJsonValue<NonNullable<T[K]>> extends true ? K : never;
|
|
68
|
+
}[keyof T & string];
|
|
69
|
+
/** A JSON-path key on a JSON column of `T`: `metadata.a.b` or `metadata[0]`. */
|
|
70
|
+
export type TJsonPathKey<T> = `${TJsonColumnKey<T>}.${string}` | `${TJsonColumnKey<T>}[${string}`;
|
|
71
|
+
/**
|
|
72
|
+
* Query conditions for selecting data - column keys, JSON-path keys on JSON columns, and nested
|
|
73
|
+
* `and` / `or`. A JSON-path value is `unknown` so a `Record<string, unknown>` still assigns.
|
|
74
|
+
*/
|
|
53
75
|
export type TWhere<T = any> = {
|
|
54
76
|
[key in keyof T]?: TWhereValue<T[key]>;
|
|
77
|
+
} & {
|
|
78
|
+
[key in TJsonPathKey<T>]?: unknown;
|
|
55
79
|
} & {
|
|
56
80
|
and?: TWhere<T>[];
|
|
57
81
|
or?: TWhere<T>[];
|
|
@@ -70,6 +94,19 @@ export type TOffset = number | undefined;
|
|
|
70
94
|
export type TSkip = number | undefined;
|
|
71
95
|
/** Sorting order for results - regular columns (`fieldName ASC`) and JSON/JSONB paths (`metadata.field DESC`). */
|
|
72
96
|
export type TOrderBy = string[] | undefined;
|
|
97
|
+
/** A sort direction, exactly the `Sorts` values. */
|
|
98
|
+
export type TSortDirection = TConstValue<typeof Sorts>;
|
|
99
|
+
/** One order entry read by `parseOrderEntry`: the field as written, the direction lower-cased. */
|
|
100
|
+
export type TParsedOrderEntry = {
|
|
101
|
+
field: string;
|
|
102
|
+
direction: TSortDirection;
|
|
103
|
+
};
|
|
104
|
+
/** An order direction in either case. */
|
|
105
|
+
type TOrderDirection = TSortDirection | Uppercase<TSortDirection>;
|
|
106
|
+
/** A column of `T` or a JSON-path key on one of its JSON columns. */
|
|
107
|
+
type TOrderKey<T> = (keyof T & string) | TJsonPathKey<T>;
|
|
108
|
+
/** One typed order entry, opt-in through `satisfies TOrderEntry<T>[]` - `TFilter.order` stays `string[]`. */
|
|
109
|
+
export type TOrderEntry<T> = TOrderKey<T> | `${TOrderKey<T>} ${TOrderDirection}`;
|
|
73
110
|
/** Comprehensive filter configuration used across all repository query methods. */
|
|
74
111
|
export type TFilter<T = any> = {
|
|
75
112
|
where?: TWhere<T>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/common/types.ts"],"names":[],"mappings":"AAAA,gTAAgT;AAEhT,mIAAmI;AACnI,MAAM,MAAM,OAAO,CAAC,CAAC,GAAG,GAAG,IAAI,OAAO,CAAC;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO;CAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAErF;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,iBAAiB,EAAE,OAAO,MAAM,CAAA;CAAE,CAAC;AAEnF,sGAAsG;AACtG,KAAK,kBAAkB,CAAC,CAAC,IAAI,CAAC,SAAS,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;AAEpE,qGAAqG;AACrG,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAC/B,EAAE,CAAC,EAAE,CAAC,CAAC;IACP,EAAE,CAAC,EAAE,CAAC,CAAC;IACP,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,EAAE,CAAC,EAAE,CAAC,CAAC;IACP,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,EAAE,CAAC,EAAE,CAAC,CAAC;IACP,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IACd,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,OAAO,CAAC,EAAE,CAAC,CAAC;IACZ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACT,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;IACV,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;IACV,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjB,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;CAC9B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnG,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/common/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
|
package/dist/esm/common/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
|
|
@@ -30,6 +30,8 @@ export declare class QueryOperators {
|
|
|
30
30
|
static readonly NOT_EXISTS = "notExists";
|
|
31
31
|
static readonly BETWEEN = "between";
|
|
32
32
|
static readonly NOT_BETWEEN = "notBetween";
|
|
33
|
+
static readonly IN_SQL = "inSql";
|
|
34
|
+
static readonly NOT_IN_SQL = "ninSql";
|
|
33
35
|
static readonly CONTAINS = "contains";
|
|
34
36
|
static readonly CONTAINED_BY = "containedBy";
|
|
35
37
|
static readonly OVERLAPS = "overlaps";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operators.d.ts","sourceRoot":"","sources":["../../../src/common/operators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAItE,qDAAqD;AACrD,qBAAa,KAAK;IAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,UAAU;IAC9B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAC5B,MAAM,CAAC,QAAQ,CAAC,UAAU,cAAoC;IAE9D,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAGvC;AAeD,iGAAiG;AACjG,qBAAa,cAAc;IACzB,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAE5B,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAE5B,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAE5B,MAAM,CAAC,QAAQ,CAAC,IAAI,UAAU;IAC9B,MAAM,CAAC,QAAQ,CAAC,QAAQ,WAAW;IACnC,MAAM,CAAC,QAAQ,CAAC,KAAK,WAAW;IAChC,MAAM,CAAC,QAAQ,CAAC,SAAS,YAAY;IAErC,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,MAAM,SAAS;IAC/B,MAAM,CAAC,QAAQ,CAAC,MAAM,YAAY;IAClC,MAAM,CAAC,QAAQ,CAAC,OAAO,aAAa;IAEpC,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAC5B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAE5B,MAAM,CAAC,QAAQ,CAAC,MAAM,YAAY;IAClC,MAAM,CAAC,QAAQ,CAAC,UAAU,eAAe;IAEzC,MAAM,CAAC,QAAQ,CAAC,OAAO,aAAa;IACpC,MAAM,CAAC,QAAQ,CAAC,WAAW,gBAAgB;IAG3C,MAAM,CAAC,QAAQ,CAAC,QAAQ,cAAc;IACtC,MAAM,CAAC,QAAQ,CAAC,YAAY,iBAAiB;IAC7C,MAAM,CAAC,QAAQ,CAAC,QAAQ,cAAc;IAEtC,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAC5B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAC5B,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAE1B,MAAM,CAAC,QAAQ,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"operators.d.ts","sourceRoot":"","sources":["../../../src/common/operators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAItE,qDAAqD;AACrD,qBAAa,KAAK;IAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,UAAU;IAC9B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAC5B,MAAM,CAAC,QAAQ,CAAC,UAAU,cAAoC;IAE9D,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAGvC;AAeD,iGAAiG;AACjG,qBAAa,cAAc;IACzB,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAE5B,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAE5B,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAE5B,MAAM,CAAC,QAAQ,CAAC,IAAI,UAAU;IAC9B,MAAM,CAAC,QAAQ,CAAC,QAAQ,WAAW;IACnC,MAAM,CAAC,QAAQ,CAAC,KAAK,WAAW;IAChC,MAAM,CAAC,QAAQ,CAAC,SAAS,YAAY;IAErC,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,MAAM,SAAS;IAC/B,MAAM,CAAC,QAAQ,CAAC,MAAM,YAAY;IAClC,MAAM,CAAC,QAAQ,CAAC,OAAO,aAAa;IAEpC,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAC1B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAC5B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAE5B,MAAM,CAAC,QAAQ,CAAC,MAAM,YAAY;IAClC,MAAM,CAAC,QAAQ,CAAC,UAAU,eAAe;IAEzC,MAAM,CAAC,QAAQ,CAAC,OAAO,aAAa;IACpC,MAAM,CAAC,QAAQ,CAAC,WAAW,gBAAgB;IAG3C,MAAM,CAAC,QAAQ,CAAC,MAAM,WAAW;IACjC,MAAM,CAAC,QAAQ,CAAC,UAAU,YAAY;IAGtC,MAAM,CAAC,QAAQ,CAAC,QAAQ,cAAc;IACtC,MAAM,CAAC,QAAQ,CAAC,YAAY,iBAAiB;IAC7C,MAAM,CAAC,QAAQ,CAAC,QAAQ,cAAc;IAEtC,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAC5B,MAAM,CAAC,QAAQ,CAAC,GAAG,SAAS;IAC5B,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAE1B,MAAM,CAAC,QAAQ,CAAC,UAAU,cA+BvB;IAEH,MAAM,CAAC,QAAQ,CAAC,uBAAuB,cAAgC;IAEvE,MAAM,CAAC,QAAQ,CAAC,4BAA4B,cAOzC;IAEH,4FAA4F;IAC5F,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,GAAG,OAAO;IAyB9E,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;CAGzC;AAED,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,cAAc,CAAC,CAAC"}
|
|
@@ -43,6 +43,9 @@ export class QueryOperators {
|
|
|
43
43
|
static { this.NOT_EXISTS = 'notExists'; }
|
|
44
44
|
static { this.BETWEEN = 'between'; }
|
|
45
45
|
static { this.NOT_BETWEEN = 'notBetween'; }
|
|
46
|
+
// Subquery operators: the operand is a Drizzle SQL object built in code, never a request value.
|
|
47
|
+
static { this.IN_SQL = 'inSql'; }
|
|
48
|
+
static { this.NOT_IN_SQL = 'ninSql'; }
|
|
46
49
|
// Array Column Operators (PostgreSQL specific)
|
|
47
50
|
static { this.CONTAINS = 'contains'; } // @> array contains
|
|
48
51
|
static { this.CONTAINED_BY = 'containedBy'; } // <@ array is contained by
|
|
@@ -73,6 +76,8 @@ export class QueryOperators {
|
|
|
73
76
|
this.NOT_EXISTS,
|
|
74
77
|
this.BETWEEN,
|
|
75
78
|
this.NOT_BETWEEN,
|
|
79
|
+
this.IN_SQL,
|
|
80
|
+
this.NOT_IN_SQL,
|
|
76
81
|
this.CONTAINS,
|
|
77
82
|
this.CONTAINED_BY,
|
|
78
83
|
this.OVERLAPS,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operators.js","sourceRoot":"","sources":["../../../src/common/operators.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"operators.js","sourceRoot":"","sources":["../../../src/common/operators.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { TParsedOrderEntry } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Reads one order entry - `field` or `field direction`, tokens separated by whitespace, direction
|
|
4
|
+
* `ASC` or `DESC` in any case (default `ASC`). Throws a 400 naming the whole entry when the field is
|
|
5
|
+
* missing, the direction is unknown, or the entry has more than two tokens.
|
|
6
|
+
*/
|
|
7
|
+
export declare const parseOrderEntry: (opts: {
|
|
8
|
+
entry: string;
|
|
9
|
+
}) => TParsedOrderEntry;
|
|
10
|
+
//# sourceMappingURL=order.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"order.d.ts","sourceRoot":"","sources":["../../../src/common/order.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAkB,MAAM,SAAS,CAAC;AAmCjE;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,KAAG,iBAiDzD,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { getError } from '@venizia/ignis-inversion';
|
|
2
|
+
import { Sorts } from './operators.js';
|
|
3
|
+
/** Characters `JSON.stringify` leaves raw that still break a log line: DEL, C1 controls, U+2028, U+2029. */
|
|
4
|
+
const RAW_AFTER_JSON = /[\u007f-\u009f\u2028\u2029]/g;
|
|
5
|
+
/** The entry quoted for an error message: JSON-escaped, and on one line whatever it holds. */
|
|
6
|
+
const quoteEntry = (opts) => JSON.stringify(opts.entry).replace(RAW_AFTER_JSON, character => `\\u${character.charCodeAt(0).toString(16).padStart(4, '0')}`);
|
|
7
|
+
// ASCII whitespace: space, tab, line feed, vertical tab, form feed, carriage return.
|
|
8
|
+
const isSeparator = (code) => code === 32 || (code >= 9 && code <= 13);
|
|
9
|
+
const toSortDirection = (opts) => {
|
|
10
|
+
const { direction } = opts;
|
|
11
|
+
// The spellings callers write, compared without allocating; anything else is lowercased.
|
|
12
|
+
switch (direction) {
|
|
13
|
+
case 'ASC':
|
|
14
|
+
case 'asc': {
|
|
15
|
+
return Sorts.ASC;
|
|
16
|
+
}
|
|
17
|
+
case 'DESC':
|
|
18
|
+
case 'desc': {
|
|
19
|
+
return Sorts.DESC;
|
|
20
|
+
}
|
|
21
|
+
default: {
|
|
22
|
+
const lowered = direction.toLowerCase();
|
|
23
|
+
return lowered === Sorts.ASC || lowered === Sorts.DESC ? lowered : undefined;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Reads one order entry - `field` or `field direction`, tokens separated by whitespace, direction
|
|
29
|
+
* `ASC` or `DESC` in any case (default `ASC`). Throws a 400 naming the whole entry when the field is
|
|
30
|
+
* missing, the direction is unknown, or the entry has more than two tokens.
|
|
31
|
+
*/
|
|
32
|
+
export const parseOrderEntry = (opts) => {
|
|
33
|
+
const { entry } = opts;
|
|
34
|
+
const trimmed = entry.trim();
|
|
35
|
+
const length = trimmed.length;
|
|
36
|
+
if (length === 0) {
|
|
37
|
+
throw getError({
|
|
38
|
+
statusCode: 400,
|
|
39
|
+
message: `[parseOrderEntry] Order entry has no field | entry: ${quoteEntry({ entry })}`,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
let fieldEnd = 0;
|
|
43
|
+
while (fieldEnd < length && !isSeparator(trimmed.charCodeAt(fieldEnd))) {
|
|
44
|
+
fieldEnd++;
|
|
45
|
+
}
|
|
46
|
+
if (fieldEnd === length) {
|
|
47
|
+
return { field: trimmed, direction: Sorts.ASC };
|
|
48
|
+
}
|
|
49
|
+
// `trimmed` ends on a non-separator, so a direction token follows the gap.
|
|
50
|
+
let directionStart = fieldEnd + 1;
|
|
51
|
+
while (isSeparator(trimmed.charCodeAt(directionStart))) {
|
|
52
|
+
directionStart++;
|
|
53
|
+
}
|
|
54
|
+
let directionEnd = directionStart + 1;
|
|
55
|
+
while (directionEnd < length && !isSeparator(trimmed.charCodeAt(directionEnd))) {
|
|
56
|
+
directionEnd++;
|
|
57
|
+
}
|
|
58
|
+
if (directionEnd !== length) {
|
|
59
|
+
throw getError({
|
|
60
|
+
statusCode: 400,
|
|
61
|
+
message: `[parseOrderEntry] Too many tokens | entry: ${quoteEntry({ entry })} | Expected: '<field>' or '<field> ASC|DESC'`,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
const direction = toSortDirection({ direction: trimmed.slice(directionStart) });
|
|
65
|
+
if (!direction) {
|
|
66
|
+
throw getError({
|
|
67
|
+
statusCode: 400,
|
|
68
|
+
message: `[parseOrderEntry] Invalid direction | entry: ${quoteEntry({ entry })} | Expected: 'ASC' or 'DESC'`,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
return { field: trimmed.slice(0, fieldEnd), direction };
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=order.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"order.js","sourceRoot":"","sources":["../../../src/common/order.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
/** The filter shape, free of any runtime import. The zod schemas that validate this shape over HTTP stay in `@venizia/ignis-core` - they parse query strings and pull in the OpenAPI layer, which is a server concern. Do not import a value here; the purity guard fails if this file resolves to anything. */
|
|
2
|
+
import type { TConstValue } from '@venizia/ignis-inversion';
|
|
3
|
+
import type { Sorts } from './operators.js';
|
|
2
4
|
/** Fields selection - an array of field names to include, or an object keyed by field name (`true` includes, `false` excludes). */
|
|
3
5
|
export type TFields<T = any> = Partial<{
|
|
4
6
|
[K in keyof T]: boolean;
|
|
@@ -14,6 +16,13 @@ export type TIsoTimestamp = string & {
|
|
|
14
16
|
};
|
|
15
17
|
/** Adds `Date` to a branded `TIsoTimestamp` value type; every other type passes through unchanged. */
|
|
16
18
|
type TWidenIsoTimestamp<V> = V extends TIsoTimestamp ? V | Date : V;
|
|
19
|
+
/**
|
|
20
|
+
* A SQL fragment built in code - a Drizzle `SQL` or `SQLWrapper` - named structurally so this
|
|
21
|
+
* package stays free of Drizzle. JSON from a request can never satisfy it.
|
|
22
|
+
*/
|
|
23
|
+
export type TSqlFragment = {
|
|
24
|
+
getSQL(): unknown;
|
|
25
|
+
};
|
|
17
26
|
/** Field-level comparison operators, mirrored 1:1 from `QueryOperators` in `common/operators.ts`. */
|
|
18
27
|
export type TWhereOperators<V> = {
|
|
19
28
|
eq?: V;
|
|
@@ -38,6 +47,8 @@ export type TWhereOperators<V> = {
|
|
|
38
47
|
notExists?: boolean;
|
|
39
48
|
between?: [V, V];
|
|
40
49
|
notBetween?: [V, V];
|
|
50
|
+
inSql?: TSqlFragment;
|
|
51
|
+
ninSql?: TSqlFragment;
|
|
41
52
|
contains?: V | V[];
|
|
42
53
|
containedBy?: V | V[];
|
|
43
54
|
overlaps?: V | V[];
|
|
@@ -49,9 +60,22 @@ export type TWhereOperators<V> = {
|
|
|
49
60
|
* bare - the column's own `toDriver` already converts one.
|
|
50
61
|
*/
|
|
51
62
|
export type TWhereValue<V> = TWidenIsoTimestamp<V> | null | TWhereOperators<TWidenIsoTimestamp<V>>;
|
|
52
|
-
/**
|
|
63
|
+
/** `true` when a column value can hold JSON: `unknown`, `any` or an object other than a `Date` or a `TIsoTimestamp`. */
|
|
64
|
+
type TIsJsonValue<V> = unknown extends V ? true : V extends Date | TIsoTimestamp ? false : V extends object ? true : false;
|
|
65
|
+
/** The columns of `T` whose value can hold JSON - the only columns a JSON-path key may start with. */
|
|
66
|
+
export type TJsonColumnKey<T> = {
|
|
67
|
+
[K in keyof T & string]: TIsJsonValue<NonNullable<T[K]>> extends true ? K : never;
|
|
68
|
+
}[keyof T & string];
|
|
69
|
+
/** A JSON-path key on a JSON column of `T`: `metadata.a.b` or `metadata[0]`. */
|
|
70
|
+
export type TJsonPathKey<T> = `${TJsonColumnKey<T>}.${string}` | `${TJsonColumnKey<T>}[${string}`;
|
|
71
|
+
/**
|
|
72
|
+
* Query conditions for selecting data - column keys, JSON-path keys on JSON columns, and nested
|
|
73
|
+
* `and` / `or`. A JSON-path value is `unknown` so a `Record<string, unknown>` still assigns.
|
|
74
|
+
*/
|
|
53
75
|
export type TWhere<T = any> = {
|
|
54
76
|
[key in keyof T]?: TWhereValue<T[key]>;
|
|
77
|
+
} & {
|
|
78
|
+
[key in TJsonPathKey<T>]?: unknown;
|
|
55
79
|
} & {
|
|
56
80
|
and?: TWhere<T>[];
|
|
57
81
|
or?: TWhere<T>[];
|
|
@@ -70,6 +94,19 @@ export type TOffset = number | undefined;
|
|
|
70
94
|
export type TSkip = number | undefined;
|
|
71
95
|
/** Sorting order for results - regular columns (`fieldName ASC`) and JSON/JSONB paths (`metadata.field DESC`). */
|
|
72
96
|
export type TOrderBy = string[] | undefined;
|
|
97
|
+
/** A sort direction, exactly the `Sorts` values. */
|
|
98
|
+
export type TSortDirection = TConstValue<typeof Sorts>;
|
|
99
|
+
/** One order entry read by `parseOrderEntry`: the field as written, the direction lower-cased. */
|
|
100
|
+
export type TParsedOrderEntry = {
|
|
101
|
+
field: string;
|
|
102
|
+
direction: TSortDirection;
|
|
103
|
+
};
|
|
104
|
+
/** An order direction in either case. */
|
|
105
|
+
type TOrderDirection = TSortDirection | Uppercase<TSortDirection>;
|
|
106
|
+
/** A column of `T` or a JSON-path key on one of its JSON columns. */
|
|
107
|
+
type TOrderKey<T> = (keyof T & string) | TJsonPathKey<T>;
|
|
108
|
+
/** One typed order entry, opt-in through `satisfies TOrderEntry<T>[]` - `TFilter.order` stays `string[]`. */
|
|
109
|
+
export type TOrderEntry<T> = TOrderKey<T> | `${TOrderKey<T>} ${TOrderDirection}`;
|
|
73
110
|
/** Comprehensive filter configuration used across all repository query methods. */
|
|
74
111
|
export type TFilter<T = any> = {
|
|
75
112
|
where?: TWhere<T>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/common/types.ts"],"names":[],"mappings":"AAAA,gTAAgT;AAEhT,mIAAmI;AACnI,MAAM,MAAM,OAAO,CAAC,CAAC,GAAG,GAAG,IAAI,OAAO,CAAC;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO;CAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAErF;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,iBAAiB,EAAE,OAAO,MAAM,CAAA;CAAE,CAAC;AAEnF,sGAAsG;AACtG,KAAK,kBAAkB,CAAC,CAAC,IAAI,CAAC,SAAS,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;AAEpE,qGAAqG;AACrG,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAC/B,EAAE,CAAC,EAAE,CAAC,CAAC;IACP,EAAE,CAAC,EAAE,CAAC,CAAC;IACP,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,EAAE,CAAC,EAAE,CAAC,CAAC;IACP,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,EAAE,CAAC,EAAE,CAAC,CAAC;IACP,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IACd,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,OAAO,CAAC,EAAE,CAAC,CAAC;IACZ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACT,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;IACV,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;IACV,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjB,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;CAC9B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnG,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/common/types.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './common';
|
|
1
|
+
export * from './common/index.js';
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/esm/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './common';
|
|
1
|
+
export * from './common/index.js';
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './types';
|
|
1
|
+
export * from './types.js';
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './types';
|
|
1
|
+
export * from './types.js';
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export * from './builder';
|
|
2
|
-
export * from './common';
|
|
1
|
+
export * from './builder.js';
|
|
2
|
+
export * from './common/index.js';
|
|
3
3
|
/** Ready-to-use schemas with no documentation metadata attached - the browser case, and the reason most consumers never touch `buildQuerySchemas` directly. */
|
|
4
4
|
export declare const FieldsSchema: import("zod").ZodOptional<import("zod").ZodUnion<[import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodBoolean>, import("zod").ZodArray<import("zod").ZodString>]>>, FilterSchema: import("zod").ZodOptional<import("zod").ZodUnion<readonly [any, import("zod").ZodPipe<import("zod").ZodPipe<import("zod").ZodString, import("zod").ZodTransform<any, string>>, any>]>>, InclusionSchema: any, LimitSchema: import("zod").ZodOptional<import("zod").ZodNumber>, OffsetSchema: import("zod").ZodOptional<import("zod").ZodNumber>, OrderBySchema: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>, SkipSchema: import("zod").ZodOptional<import("zod").ZodNumber>, WhereSchema: import("zod").ZodUnion<readonly [import("zod").ZodType<any, unknown, import("zod/v4/core").$ZodTypeInternals<any, unknown>>, import("zod").ZodPipe<import("zod").ZodPipe<import("zod").ZodString, import("zod").ZodTransform<any, string>>, import("zod").ZodType<any, unknown, import("zod/v4/core").$ZodTypeInternals<any, unknown>>>]>;
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { buildQuerySchemas } from './builder';
|
|
2
|
-
export * from './builder';
|
|
3
|
-
export * from './common';
|
|
1
|
+
import { buildQuerySchemas } from './builder.js';
|
|
2
|
+
export * from './builder.js';
|
|
3
|
+
export * from './common/index.js';
|
|
4
4
|
/** Ready-to-use schemas with no documentation metadata attached - the browser case, and the reason most consumers never touch `buildQuerySchemas` directly. */
|
|
5
5
|
export const { FieldsSchema, FilterSchema, InclusionSchema, LimitSchema, OffsetSchema, OrderBySchema, SkipSchema, WhereSchema, } = buildQuerySchemas();
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@venizia/ignis-filter",
|
|
3
|
-
"version": "0.2.0
|
|
3
|
+
"version": "0.2.1-0",
|
|
4
4
|
"description": "Engine-neutral query filter vocabulary for TypeScript: the `{ where, order, limit, offset, skip, fields, include }` shape, comparison/pattern/null/array/logical operators, and sort direction constants. Isomorphic by construction - no node builtins and no server-only peer, so the same filter language serves a server repository and a browser data layer.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"browser",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
},
|
|
35
35
|
"license": "MIT",
|
|
36
36
|
"engines": {
|
|
37
|
-
"bun": ">=1.
|
|
37
|
+
"bun": ">=1.4"
|
|
38
38
|
},
|
|
39
39
|
"main": "./dist/cjs/index.js",
|
|
40
40
|
"exports": {
|
|
@@ -79,12 +79,12 @@
|
|
|
79
79
|
"prepublishOnly": "bun run rebuild"
|
|
80
80
|
},
|
|
81
81
|
"dependencies": {
|
|
82
|
-
"@venizia/ignis-inversion": "^0.2.0
|
|
82
|
+
"@venizia/ignis-inversion": "^0.2.0",
|
|
83
83
|
"zod": "^4.5.4"
|
|
84
84
|
},
|
|
85
85
|
"devDependencies": {
|
|
86
86
|
"@types/bun": "^1.4.1",
|
|
87
|
-
"@venizia/dev-configs": "^0.2.0
|
|
87
|
+
"@venizia/dev-configs": "^0.2.0",
|
|
88
88
|
"eslint": "^10.10.0",
|
|
89
89
|
"prettier": "^3.9.6",
|
|
90
90
|
"tsc-alias": "^1.9.4",
|