@venizia/ignis-filter 0.2.0-0 → 0.2.0-2
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/dist/cjs/schemas/builder.d.ts.map +1 -1
- package/dist/cjs/schemas/builder.js +37 -12
- package/dist/cjs/schemas/builder.js.map +1 -1
- package/dist/esm/schemas/builder.d.ts.map +1 -1
- package/dist/esm/schemas/builder.js +37 -12
- package/dist/esm/schemas/builder.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../src/schemas/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAOvD,eAAO,MAAM,iBAAiB,GAAI,OAAO;IAAE,QAAQ,CAAC,EAAE,gBAAgB,CAAA;CAAE;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../src/schemas/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAOvD,eAAO,MAAM,iBAAiB,GAAI,OAAO;IAAE,QAAQ,CAAC,EAAE,gBAAgB,CAAA;CAAE;;;;;;;;;CAqLvE,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|
|
@@ -7,15 +7,21 @@ const zod_1 = require("zod");
|
|
|
7
7
|
const identityDecorator = schema => schema;
|
|
8
8
|
const buildQuerySchemas = (opts) => {
|
|
9
9
|
const decorate = opts?.decorate ?? identityDecorator;
|
|
10
|
-
|
|
10
|
+
/**
|
|
11
|
+
* `int().nonnegative()`, not a bare `number()`. A NEGATIVE limit is not a smaller page - Drizzle
|
|
12
|
+
* renders the LIMIT clause only when the value is `>= 0`, so `filter={"limit":-1}` emitted a
|
|
13
|
+
* `select` with no LIMIT at all and returned the whole table. A fractional limit reaches the
|
|
14
|
+
* driver as `LIMIT 1.5` and errors there instead of here.
|
|
15
|
+
*/
|
|
16
|
+
const LimitSchema = decorate(zod_1.z.number().int().nonnegative().optional(), {
|
|
11
17
|
description: 'Maximum number of items to return. Defaults to 10 for top-level list queries.',
|
|
12
18
|
examples: [1, 2, 3],
|
|
13
19
|
});
|
|
14
|
-
const OffsetSchema = decorate(zod_1.z.number().optional(), {
|
|
20
|
+
const OffsetSchema = decorate(zod_1.z.number().int().nonnegative().optional(), {
|
|
15
21
|
description: 'Number of items to offset for pagination.',
|
|
16
22
|
examples: [1, 2, 3],
|
|
17
23
|
});
|
|
18
|
-
const SkipSchema = decorate(zod_1.z.number().optional(), {
|
|
24
|
+
const SkipSchema = decorate(zod_1.z.number().int().nonnegative().optional(), {
|
|
19
25
|
description: 'Number of items to skip for pagination.',
|
|
20
26
|
examples: [1, 2, 3],
|
|
21
27
|
});
|
|
@@ -46,11 +52,20 @@ const buildQuerySchemas = (opts) => {
|
|
|
46
52
|
RecursiveWhereSchema,
|
|
47
53
|
zod_1.z
|
|
48
54
|
.string()
|
|
49
|
-
.
|
|
50
|
-
|
|
55
|
+
// A caught parse, never a bare `JSON.parse`. zod lets a thrown SyntaxError escape
|
|
56
|
+
// `safeParse`, so the controller's validation hook never ran and `?where=not-json` surfaced
|
|
57
|
+
// as a 500 with a stack - for what is simply a malformed query string.
|
|
58
|
+
.transform((val, ctx) => {
|
|
59
|
+
if (!val) {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
51
63
|
return JSON.parse(val);
|
|
52
64
|
}
|
|
53
|
-
|
|
65
|
+
catch {
|
|
66
|
+
ctx.addIssue({ code: 'custom', message: 'where must be valid JSON' });
|
|
67
|
+
return zod_1.z.NEVER;
|
|
68
|
+
}
|
|
54
69
|
})
|
|
55
70
|
.pipe(RecursiveWhereSchema),
|
|
56
71
|
]), { type: 'object', description: 'Query conditions for selecting data.' });
|
|
@@ -61,9 +76,11 @@ const buildQuerySchemas = (opts) => {
|
|
|
61
76
|
scope: decorate(zod_1.z
|
|
62
77
|
.lazy(() => FilterSchema) // eslint-disable-line @typescript-eslint/no-use-before-define
|
|
63
78
|
.optional(), { description: 'Model relation filter' }),
|
|
64
|
-
shouldSkipDefaultFilter
|
|
65
|
-
|
|
66
|
-
|
|
79
|
+
// `shouldSkipDefaultFilter` is deliberately NOT on the wire schema. It stays on the
|
|
80
|
+
// internal `TInclusion` type, so server-side callers keep it, but a client could
|
|
81
|
+
// otherwise send `include[].shouldSkipDefaultFilter` and the relation would be emitted
|
|
82
|
+
// with no where clause at all - erasing the `@model` defaultFilter that implements
|
|
83
|
+
// soft-delete and the static visibility scopes.
|
|
67
84
|
}))
|
|
68
85
|
.optional(), {
|
|
69
86
|
description: 'Define related models to include in the response.',
|
|
@@ -88,11 +105,19 @@ const buildQuerySchemas = (opts) => {
|
|
|
88
105
|
InternalFilterSchema,
|
|
89
106
|
zod_1.z
|
|
90
107
|
.string()
|
|
91
|
-
|
|
92
|
-
|
|
108
|
+
// Same reason as `where` above: a malformed filter is the caller's mistake, so it has to
|
|
109
|
+
// become a validation issue rather than an uncaught throw.
|
|
110
|
+
.transform((val, ctx) => {
|
|
111
|
+
if (!val) {
|
|
112
|
+
return {};
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
93
115
|
return JSON.parse(val);
|
|
94
116
|
}
|
|
95
|
-
|
|
117
|
+
catch {
|
|
118
|
+
ctx.addIssue({ code: 'custom', message: 'filter must be valid JSON' });
|
|
119
|
+
return zod_1.z.NEVER;
|
|
120
|
+
}
|
|
96
121
|
})
|
|
97
122
|
.pipe(InternalFilterSchema),
|
|
98
123
|
])
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../src/schemas/builder.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAIxB,sXAAsX;AACtX,wTAAwT;AAExT,MAAM,iBAAiB,GAAqB,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC;AAEtD,MAAM,iBAAiB,GAAG,CAAC,IAAsC,EAAE,EAAE;IAC1E,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,iBAAiB,CAAC;IAErD,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../src/schemas/builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../src/schemas/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAOvD,eAAO,MAAM,iBAAiB,GAAI,OAAO;IAAE,QAAQ,CAAC,EAAE,gBAAgB,CAAA;CAAE;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../src/schemas/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAOvD,eAAO,MAAM,iBAAiB,GAAI,OAAO;IAAE,QAAQ,CAAC,EAAE,gBAAgB,CAAA;CAAE;;;;;;;;;CAqLvE,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|
|
@@ -4,15 +4,21 @@ import { z } from 'zod';
|
|
|
4
4
|
const identityDecorator = schema => schema;
|
|
5
5
|
export const buildQuerySchemas = (opts) => {
|
|
6
6
|
const decorate = opts?.decorate ?? identityDecorator;
|
|
7
|
-
|
|
7
|
+
/**
|
|
8
|
+
* `int().nonnegative()`, not a bare `number()`. A NEGATIVE limit is not a smaller page - Drizzle
|
|
9
|
+
* renders the LIMIT clause only when the value is `>= 0`, so `filter={"limit":-1}` emitted a
|
|
10
|
+
* `select` with no LIMIT at all and returned the whole table. A fractional limit reaches the
|
|
11
|
+
* driver as `LIMIT 1.5` and errors there instead of here.
|
|
12
|
+
*/
|
|
13
|
+
const LimitSchema = decorate(z.number().int().nonnegative().optional(), {
|
|
8
14
|
description: 'Maximum number of items to return. Defaults to 10 for top-level list queries.',
|
|
9
15
|
examples: [1, 2, 3],
|
|
10
16
|
});
|
|
11
|
-
const OffsetSchema = decorate(z.number().optional(), {
|
|
17
|
+
const OffsetSchema = decorate(z.number().int().nonnegative().optional(), {
|
|
12
18
|
description: 'Number of items to offset for pagination.',
|
|
13
19
|
examples: [1, 2, 3],
|
|
14
20
|
});
|
|
15
|
-
const SkipSchema = decorate(z.number().optional(), {
|
|
21
|
+
const SkipSchema = decorate(z.number().int().nonnegative().optional(), {
|
|
16
22
|
description: 'Number of items to skip for pagination.',
|
|
17
23
|
examples: [1, 2, 3],
|
|
18
24
|
});
|
|
@@ -43,11 +49,20 @@ export const buildQuerySchemas = (opts) => {
|
|
|
43
49
|
RecursiveWhereSchema,
|
|
44
50
|
z
|
|
45
51
|
.string()
|
|
46
|
-
.
|
|
47
|
-
|
|
52
|
+
// A caught parse, never a bare `JSON.parse`. zod lets a thrown SyntaxError escape
|
|
53
|
+
// `safeParse`, so the controller's validation hook never ran and `?where=not-json` surfaced
|
|
54
|
+
// as a 500 with a stack - for what is simply a malformed query string.
|
|
55
|
+
.transform((val, ctx) => {
|
|
56
|
+
if (!val) {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
48
60
|
return JSON.parse(val);
|
|
49
61
|
}
|
|
50
|
-
|
|
62
|
+
catch {
|
|
63
|
+
ctx.addIssue({ code: 'custom', message: 'where must be valid JSON' });
|
|
64
|
+
return z.NEVER;
|
|
65
|
+
}
|
|
51
66
|
})
|
|
52
67
|
.pipe(RecursiveWhereSchema),
|
|
53
68
|
]), { type: 'object', description: 'Query conditions for selecting data.' });
|
|
@@ -58,9 +73,11 @@ export const buildQuerySchemas = (opts) => {
|
|
|
58
73
|
scope: decorate(z
|
|
59
74
|
.lazy(() => FilterSchema) // eslint-disable-line @typescript-eslint/no-use-before-define
|
|
60
75
|
.optional(), { description: 'Model relation filter' }),
|
|
61
|
-
shouldSkipDefaultFilter
|
|
62
|
-
|
|
63
|
-
|
|
76
|
+
// `shouldSkipDefaultFilter` is deliberately NOT on the wire schema. It stays on the
|
|
77
|
+
// internal `TInclusion` type, so server-side callers keep it, but a client could
|
|
78
|
+
// otherwise send `include[].shouldSkipDefaultFilter` and the relation would be emitted
|
|
79
|
+
// with no where clause at all - erasing the `@model` defaultFilter that implements
|
|
80
|
+
// soft-delete and the static visibility scopes.
|
|
64
81
|
}))
|
|
65
82
|
.optional(), {
|
|
66
83
|
description: 'Define related models to include in the response.',
|
|
@@ -85,11 +102,19 @@ export const buildQuerySchemas = (opts) => {
|
|
|
85
102
|
InternalFilterSchema,
|
|
86
103
|
z
|
|
87
104
|
.string()
|
|
88
|
-
|
|
89
|
-
|
|
105
|
+
// Same reason as `where` above: a malformed filter is the caller's mistake, so it has to
|
|
106
|
+
// become a validation issue rather than an uncaught throw.
|
|
107
|
+
.transform((val, ctx) => {
|
|
108
|
+
if (!val) {
|
|
109
|
+
return {};
|
|
110
|
+
}
|
|
111
|
+
try {
|
|
90
112
|
return JSON.parse(val);
|
|
91
113
|
}
|
|
92
|
-
|
|
114
|
+
catch {
|
|
115
|
+
ctx.addIssue({ code: 'custom', message: 'filter must be valid JSON' });
|
|
116
|
+
return z.NEVER;
|
|
117
|
+
}
|
|
93
118
|
})
|
|
94
119
|
.pipe(InternalFilterSchema),
|
|
95
120
|
])
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../src/schemas/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,sXAAsX;AACtX,wTAAwT;AAExT,MAAM,iBAAiB,GAAqB,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC;AAE7D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAsC,EAAE,EAAE;IAC1E,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,iBAAiB,CAAC;IAErD,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../src/schemas/builder.ts"],"names":[],"mappings":"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"}
|
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.0-2",
|
|
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",
|
|
@@ -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-1",
|
|
83
83
|
"zod": "^4.4.3"
|
|
84
84
|
},
|
|
85
85
|
"devDependencies": {
|
|
86
86
|
"@types/bun": "^1.3.14",
|
|
87
|
-
"@venizia/dev-configs": "^0.2.0-
|
|
87
|
+
"@venizia/dev-configs": "^0.2.0-1",
|
|
88
88
|
"eslint": "^10.7.0",
|
|
89
89
|
"prettier": "^3.9.5",
|
|
90
90
|
"tsc-alias": "^1.9.1",
|