@dudousxd/nestjs-filter 1.11.1 → 1.14.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/CHANGELOG.md +35 -0
- package/dist/adapter/adapter.d.ts +40 -11
- package/dist/adapter/adapter.d.ts.map +1 -1
- package/dist/decorator/aliases.d.ts +19 -0
- package/dist/decorator/aliases.d.ts.map +1 -0
- package/dist/decorator/aliases.js +40 -0
- package/dist/decorator/aliases.js.map +1 -0
- package/dist/decorator/computed.decorator.d.ts +25 -0
- package/dist/decorator/computed.decorator.d.ts.map +1 -0
- package/dist/decorator/computed.decorator.js +53 -0
- package/dist/decorator/computed.decorator.js.map +1 -0
- package/dist/decorator/filterable.decorator.d.ts.map +1 -1
- package/dist/decorator/filterable.decorator.js +4 -0
- package/dist/decorator/filterable.decorator.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/runner.d.ts +58 -1
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +168 -18
- package/dist/runner.js.map +1 -1
- package/dist/tokens.d.ts +2 -0
- package/dist/tokens.d.ts.map +1 -1
- package/dist/tokens.js +2 -0
- package/dist/tokens.js.map +1 -1
- package/dist/types.d.ts +79 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Type } from '@nestjs/common';
|
|
2
|
+
import type { FilterFieldTypeHint } from './decorator/filter-for.decorator.js';
|
|
2
3
|
import type { FilterOperator } from './operators/types.js';
|
|
3
4
|
/**
|
|
4
5
|
* A single entry in a `@Filterable` `allowed` list. Either:
|
|
@@ -18,6 +19,26 @@ export interface FilterContext {
|
|
|
18
19
|
user?: unknown;
|
|
19
20
|
raw?: unknown;
|
|
20
21
|
}
|
|
22
|
+
/** Runtime handle passed to a computed function source. `em` is the adapter's
|
|
23
|
+
* ORM manager (SqlEntityManager on mikro-orm, DataSource/repo on typeorm),
|
|
24
|
+
* typed as `unknown` in core and narrowed by each adapter's re-export. */
|
|
25
|
+
export interface ComputedContext {
|
|
26
|
+
alias: string;
|
|
27
|
+
em: unknown;
|
|
28
|
+
}
|
|
29
|
+
/** What a computed function may return: a SQL string, or an adapter-specific
|
|
30
|
+
* object (a raw fragment or an ORM query builder). Opaque to core. */
|
|
31
|
+
export type ComputedReturn = string | object;
|
|
32
|
+
/** A computed field's SQL source: a static string (with `{alias}` token) or a
|
|
33
|
+
* function evaluated at query-build time. */
|
|
34
|
+
export type ComputedSource = string | ((ctx: ComputedContext) => ComputedReturn);
|
|
35
|
+
/** A computed map value: the bare source, or `{ source, type }` where `type` is
|
|
36
|
+
* a codegen-only value-type hint. */
|
|
37
|
+
export type ComputedEntry = ComputedSource | {
|
|
38
|
+
source: ComputedSource;
|
|
39
|
+
type: FilterFieldTypeHint;
|
|
40
|
+
};
|
|
41
|
+
export type ComputedMap = Record<string, ComputedEntry>;
|
|
21
42
|
export interface FilterableOptions {
|
|
22
43
|
entity: Type<unknown>;
|
|
23
44
|
/**
|
|
@@ -63,7 +84,50 @@ export interface FilterableOptions {
|
|
|
63
84
|
* never by the client. The client only references the declared alias; the
|
|
64
85
|
* value is always parameterized. Alias names must be safe identifiers.
|
|
65
86
|
*/
|
|
66
|
-
computed?:
|
|
87
|
+
computed?: ComputedMap;
|
|
88
|
+
/**
|
|
89
|
+
* Declarative field-name remapping: maps a client-supplied field name to
|
|
90
|
+
* the real entity path (a column, a relation path like `"base"`, a dotted
|
|
91
|
+
* relation field like `"unit.name"`, or a JSON sub-path) it should resolve
|
|
92
|
+
* to. Applied at every point a client field name is resolved against the
|
|
93
|
+
* entity — `where[]` column filters, structured `filter` keys, `sort`,
|
|
94
|
+
* `distinct`, and `select`.
|
|
95
|
+
*
|
|
96
|
+
* Motivating case: `@FilterFor` methods only run for structured `filter`
|
|
97
|
+
* input — the `where[]` column-filter path resolves field names straight
|
|
98
|
+
* against entity columns/JSON sub-paths, before and separately from
|
|
99
|
+
* `@FilterFor` dispatch. So a legacy client sending `where[]` filters on
|
|
100
|
+
* `baseId` when the entity relation is actually named `base` has no
|
|
101
|
+
* server-side way to remap that name — short of asking the client to
|
|
102
|
+
* rename the field. `aliases: { baseId: "base" }` closes that gap.
|
|
103
|
+
*
|
|
104
|
+
* Semantics:
|
|
105
|
+
* - Resolution happens FIRST. Validation (the `allowed`/`blocked`
|
|
106
|
+
* allowlist, the `SAFE_FIELD` path check, entity-metadata checks, the
|
|
107
|
+
* `throwOnInvalid` policy) always runs against the RESOLVED target, never
|
|
108
|
+
* the alias key.
|
|
109
|
+
* - If an alias key collides with a real column name, **the alias wins** —
|
|
110
|
+
* declaring it is an explicit consumer decision.
|
|
111
|
+
* - Aliases do **not** cascade: an alias's target is never re-run through
|
|
112
|
+
* the alias map, even if the target happens to also be a declared alias
|
|
113
|
+
* key. This makes alias cycles structurally impossible.
|
|
114
|
+
* - Declaring no `aliases` is a zero-behavior-change no-op.
|
|
115
|
+
*/
|
|
116
|
+
aliases?: Record<string, string>;
|
|
117
|
+
/**
|
|
118
|
+
* Codegen-only hints, consumed statically (via ts-morph AST, never executed)
|
|
119
|
+
* by `@dudousxd/nestjs-filter-codegen`. The core runtime ignores this field
|
|
120
|
+
* entirely.
|
|
121
|
+
*
|
|
122
|
+
* - `maxDepth` — caps relation-path recursion depth for this filter's
|
|
123
|
+
* generated `filterFields` union, overriding the codegen extension's
|
|
124
|
+
* global `maxDepth` option. `0` = only the entity's own columns; `1` =
|
|
125
|
+
* own columns + direct relation fields (`base.name`); etc.
|
|
126
|
+
* Example: `{ codegen: { maxDepth: 2 } }`.
|
|
127
|
+
*/
|
|
128
|
+
codegen?: {
|
|
129
|
+
maxDepth?: number;
|
|
130
|
+
};
|
|
67
131
|
}
|
|
68
132
|
export type InputNormalizer = 'camelCase' | 'snakeCase' | ((key: string) => string);
|
|
69
133
|
export type OnUnknownKey = 'ignore' | 'warn' | 'throw';
|
|
@@ -240,7 +304,20 @@ export interface FilterMetadata {
|
|
|
240
304
|
autoFields?: boolean | readonly string[];
|
|
241
305
|
throwOnInvalid?: boolean;
|
|
242
306
|
defaultSort?: string | SortItem[];
|
|
243
|
-
computed?:
|
|
307
|
+
computed?: ComputedMap;
|
|
308
|
+
/**
|
|
309
|
+
* Declarative field-name remapping (see {@link FilterableOptions.aliases}
|
|
310
|
+
* for full semantics and the `where[]`-column-filter motivation).
|
|
311
|
+
*/
|
|
312
|
+
aliases?: Record<string, string>;
|
|
313
|
+
/**
|
|
314
|
+
* Codegen-only hint (see {@link FilterableOptions.codegen}). Stored
|
|
315
|
+
* verbatim for parity with the decorator options; the core runtime never
|
|
316
|
+
* reads it. Statically consumed by `@dudousxd/nestjs-filter-codegen`.
|
|
317
|
+
*/
|
|
318
|
+
codegen?: {
|
|
319
|
+
maxDepth?: number;
|
|
320
|
+
};
|
|
244
321
|
}
|
|
245
322
|
/**
|
|
246
323
|
* Extracts the input shape from a filter class.
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAA;CAAE,CAAC;AAEjG,MAAM,MAAM,WAAW,GACnB,MAAM,GACN,OAAO,GACP,MAAM,GACN,CAAC,MAAM,GAAG,EAAE,CAAC,GACb,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACvC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE,CAAC;IACzC;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAC;IAClC;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|