@adonis-agora/filter 0.8.1 → 0.10.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 +12 -0
- package/README.md +15 -0
- package/dist/commands/main.d.ts.map +1 -1
- package/dist/commands/make_filter.d.ts.map +1 -1
- package/dist/commands/make_filter.js +1 -1
- package/dist/commands/make_filter.js.map +1 -1
- package/dist/commands/make_filter_client.d.ts.map +1 -1
- package/dist/commands/make_filter_client.js +1 -1
- package/dist/commands/make_filter_client.js.map +1 -1
- package/dist/providers/filter_provider.d.ts.map +1 -1
- package/dist/providers/filter_provider.js.map +1 -1
- package/dist/src/aggregate_path.js +1 -1
- package/dist/src/aggregate_path.js.map +1 -1
- package/dist/src/apply_from_request.d.ts +8 -0
- package/dist/src/apply_from_request.d.ts.map +1 -1
- package/dist/src/apply_from_request.js +1 -1
- package/dist/src/apply_from_request.js.map +1 -1
- package/dist/src/base_filter.d.ts +49 -0
- package/dist/src/base_filter.d.ts.map +1 -0
- package/dist/src/base_filter.js +33 -0
- package/dist/src/base_filter.js.map +1 -0
- package/dist/src/base_model_filter.d.ts +3 -22
- package/dist/src/base_model_filter.d.ts.map +1 -1
- package/dist/src/base_model_filter.js +2 -6
- package/dist/src/base_model_filter.js.map +1 -1
- package/dist/src/coerce_value.js.map +1 -1
- package/dist/src/custom_filter.d.ts +36 -0
- package/dist/src/custom_filter.d.ts.map +1 -0
- package/dist/src/custom_filter.js +127 -0
- package/dist/src/custom_filter.js.map +1 -0
- package/dist/src/escape-like.js +1 -1
- package/dist/src/escape-like.js.map +1 -1
- package/dist/src/filter_class.d.ts.map +1 -1
- package/dist/src/filter_class.js +7 -1
- package/dist/src/filter_class.js.map +1 -1
- package/dist/src/filter_spec.d.ts +1 -2
- package/dist/src/filter_spec.d.ts.map +1 -1
- package/dist/src/filter_spec.js.map +1 -1
- package/dist/src/filterable_mixin.d.ts.map +1 -1
- package/dist/src/filterable_mixin.js.map +1 -1
- package/dist/src/generate_client.d.ts.map +1 -1
- package/dist/src/generate_client.js.map +1 -1
- package/dist/src/group_by_count.d.ts +67 -0
- package/dist/src/group_by_count.d.ts.map +1 -0
- package/dist/src/group_by_count.js +71 -0
- package/dist/src/group_by_count.js.map +1 -0
- package/dist/src/in_memory.d.ts +268 -0
- package/dist/src/in_memory.d.ts.map +1 -0
- package/dist/src/in_memory.js +759 -0
- package/dist/src/in_memory.js.map +1 -0
- package/dist/src/index.d.ts +35 -30
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +18 -15
- package/dist/src/index.js.map +1 -1
- package/dist/src/lucid_adapter.d.ts +36 -1
- package/dist/src/lucid_adapter.d.ts.map +1 -1
- package/dist/src/lucid_adapter.js +31 -0
- package/dist/src/lucid_adapter.js.map +1 -1
- package/dist/src/lucid_macros.d.ts.map +1 -1
- package/dist/src/lucid_macros.js.map +1 -1
- package/dist/src/parse_request.d.ts +9 -1
- package/dist/src/parse_request.d.ts.map +1 -1
- package/dist/src/parse_request.js +27 -0
- package/dist/src/parse_request.js.map +1 -1
- package/dist/src/runner.d.ts +19 -0
- package/dist/src/runner.d.ts.map +1 -1
- package/dist/src/runner.js +2 -2
- package/dist/src/runner.js.map +1 -1
- package/dist/src/source_resolver.js.map +1 -1
- package/dist/src/testing.d.ts +8 -0
- package/dist/src/testing.d.ts.map +1 -1
- package/dist/src/testing.js +16 -0
- package/dist/src/testing.js.map +1 -1
- package/dist/src/types.d.ts +27 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/validate-column-filter.d.ts.map +1 -1
- package/dist/stubs/main.js.map +1 -1
- package/package.json +29 -20
- package/skills/filter-basics/SKILL.md +34 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @adonis-agora/filter
|
|
2
2
|
|
|
3
|
+
## 0.10.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#67](https://github.com/DavideCarvalho/adonis-agora-filter/pull/67) [`1dd11c3`](https://github.com/DavideCarvalho/adonis-agora-filter/commit/1dd11c3563cd015d27627808cc3e23830ed4be50) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - In-memory adapter at `@adonis-agora/filter/in-memory`: `defineCollection({ fields, primaryKey, relations })` declares a row source (field types incl. `'string[]'`-style arrays, virtual fields, to-one/to-many relations), and `collection.query(rows)` is a `QueryBuilderLike` the existing runner drives unchanged — `applyFilter`, `applyCursor`, `applyFilterFromRequest`, `applyCursorFromRequest` and `groupByCountFromRequest` all work over a plain array with the same parsing, allow-listing and coercion. Evaluation mirrors the SQL the Lucid adapter emits (ILIKE, three-valued NULL logic, NULLS LAST asc / FIRST desc, EXISTS for to-many paths). `filterInMemory` / `cursorInMemory` do it in one call; `InMemoryQueryError` is thrown for SQL-only features (`computed`, `fullText`, `vectorSimilarity`).
|
|
8
|
+
|
|
9
|
+
## 0.9.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- [#35](https://github.com/DavideCarvalho/adonis-agora-filter/pull/35) [`b6424ec`](https://github.com/DavideCarvalho/adonis-agora-filter/commit/b6424ec696dbf8b50928e03a619d0227f5436345) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - One class style that does everything: `BaseFilter<TQuery>` — the generic base behind `BaseModelFilter` (Lucid) and custom backends alike — plus `applyCustomFilter` (methods per key over a caller-created draft, same envelope, loud rejections) and `groupByCount` end to end (`FilterQueryBuilder.groupByCount()` + `groupByCount[field]` envelope + `groupByCountFromRequest` over Lucid `GROUP BY` or a `GroupByCountAdapter`, with scope, search and paging). Lucid gains the `select`/`count`/`groupBy`/`offset` aggregation seam (optional, non-breaking).
|
|
14
|
+
|
|
3
15
|
## 0.8.1
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -50,6 +50,21 @@ AND/OR composition. The `allowed`/`sortable`/`searchable` lists are the security
|
|
|
50
50
|
boundary. The Lucid binding is structural (`QueryBuilderLike`) so any Lucid query
|
|
51
51
|
builder works and the adapter is unit-testable.
|
|
52
52
|
|
|
53
|
+
### In-memory lists
|
|
54
|
+
|
|
55
|
+
`@adonis-agora/filter/in-memory` runs the same input against a plain array — an
|
|
56
|
+
in-memory `QueryBuilderLike` the runner drives exactly like a Lucid query:
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
import { defineCollection, filterInMemory } from '@adonis-agora/filter/in-memory'
|
|
60
|
+
|
|
61
|
+
const users = defineCollection<UserRow>({
|
|
62
|
+
fields: { name: 'string', age: 'number', fullName: { type: 'string', get: (u) => u.first + ' ' + u.last } },
|
|
63
|
+
})
|
|
64
|
+
const page = filterInMemory(users, rows, input, { allowed: ['name', 'age', 'fullName'] })
|
|
65
|
+
// { data, meta: { total, perPage, currentPage, lastPage, firstPage } }
|
|
66
|
+
```
|
|
67
|
+
|
|
53
68
|
See the [repository README](https://github.com/DavideCarvalho/adonis-filter).
|
|
54
69
|
|
|
55
70
|
## License
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../commands/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,gBAAgB,MAAM,yBAAyB,CAAC;AAEvD;;;;;;;;;;GAUG;AACH,QAAA,MAAM,MAAM,yDAAiD,CAAC;AAE9D,eAAO,MAAM,WAAW,qEAAkC,CAAC;AAC3D,eAAO,MAAM,UAAU,+HAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../commands/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,gBAAgB,MAAM,yBAAyB,CAAC;AAEvD;;;;;;;;;;GAUG;AACH,QAAA,MAAM,MAAM,yDAAiD,CAAC;AAE9D,eAAO,MAAM,WAAW,qEAAkC,CAAC;AAC3D,eAAO,MAAM,UAAU,+HAAiC,CAAC;eAE1C,MAAM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make_filter.d.ts","sourceRoot":"","sources":["../../commands/make_filter.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"make_filter.d.ts","sourceRoot":"","sources":["../../commands/make_filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,OAAgB,WAAW,SAAiB;IAC5C,OAAgB,WAAW,SAA+B;IAC1D,OAAgB,OAAO,EAAE,cAAc,CAA+B;IAG9D,IAAI,EAAE,MAAM,CAAC;IAEN,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAMlC;CACF"}
|
|
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import {
|
|
7
|
+
import { args, BaseCommand } from '@adonisjs/core/ace';
|
|
8
8
|
import { stubsRoot } from '../stubs/main.js';
|
|
9
9
|
/**
|
|
10
10
|
* `node ace make:filter <name>` — scaffold a filter class under `app/filters/`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make_filter.js","sourceRoot":"","sources":["../../commands/make_filter.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"make_filter.js","sourceRoot":"","sources":["../../commands/make_filter.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,MAAM,CAAU,WAAW,GAAG,aAAa,CAAC;IAC5C,MAAM,CAAU,WAAW,GAAG,2BAA2B,CAAC;IAC1D,MAAM,CAAU,OAAO,GAAmB,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;IAK7D,KAAK,CAAC,GAAG;QAChB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC7C,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,uBAAuB,EAAE;YAC/D,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;YACxB,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;SACpD,CAAC,CAAC;IACL,CAAC;CACF;AATS;IADP,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gCAAgC,EAAE,CAAC;wCAC1C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make_filter_client.d.ts","sourceRoot":"","sources":["../../commands/make_filter_client.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"make_filter_client.d.ts","sourceRoot":"","sources":["../../commands/make_filter_client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,WAAW,EAAS,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAI/D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,WAAW;;IACvD,OAAgB,WAAW,SAAwB;IACnD,OAAgB,WAAW,SAC4C;IACvE,OAAgB,OAAO,EAAE,cAAc,CAAsB;IAOrD,UAAU,EAAE,MAAM,CAAC;IAMnB,MAAM,EAAE,MAAM,CAAC;IAER,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAelC;CAuBF"}
|
|
@@ -6,7 +6,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
6
6
|
};
|
|
7
7
|
import { mkdir, writeFile } from 'node:fs/promises';
|
|
8
8
|
import { isAbsolute, join } from 'node:path';
|
|
9
|
-
import {
|
|
9
|
+
import { args, BaseCommand, flags } from '@adonisjs/core/ace';
|
|
10
10
|
import { generateFilterClients } from '../src/generate_client.js';
|
|
11
11
|
/**
|
|
12
12
|
* `node ace make:filter-client [entrypoint]` — the idiomatic AdonisJS equivalent
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make_filter_client.js","sourceRoot":"","sources":["../../commands/make_filter_client.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"make_filter_client.js","sourceRoot":"","sources":["../../commands/make_filter_client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter_provider.d.ts","sourceRoot":"","sources":["../../providers/filter_provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG/D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,OAAO,OAAO,cAAc;IACrB,SAAS,CAAC,GAAG,EAAE,kBAAkB;
|
|
1
|
+
{"version":3,"file":"filter_provider.d.ts","sourceRoot":"","sources":["../../providers/filter_provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG/D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,OAAO,OAAO,cAAc;IACrB,SAAS,CAAC,GAAG,EAAE,kBAAkB;IAA7C,YAAsB,GAAG,EAAE,kBAAkB,EAAI;IAE3C,IAAI,kBAGT;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter_provider.js","sourceRoot":"","sources":["../../providers/filter_provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,OAAO,OAAO,cAAc;IACX;
|
|
1
|
+
{"version":3,"file":"filter_provider.js","sourceRoot":"","sources":["../../providers/filter_provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,OAAO,OAAO,cAAc;IACX,GAAG;IAAzB,YAAsB,GAAuB;mBAAvB,GAAG;IAAuB,CAAC;IAEjD,KAAK,CAAC,IAAI;QACR,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAClE,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;IAC1C,CAAC;CACF"}
|
|
@@ -23,7 +23,7 @@ export function parseAggregatePath(path) {
|
|
|
23
23
|
if (parts.length < 2 || parts.length > 3)
|
|
24
24
|
return null;
|
|
25
25
|
const [relation, token, column] = parts;
|
|
26
|
-
if (!relation || !token
|
|
26
|
+
if (!relation || !token?.startsWith('$'))
|
|
27
27
|
return null;
|
|
28
28
|
const fn = token.slice(1);
|
|
29
29
|
if (fn === 'count')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate_path.js","sourceRoot":"","sources":["../../src/aggregate_path.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,MAAM,UAAU,GAAG,IAAI,GAAG,CAAc,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAEtE;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,2CAA2C;IAC3C,+CAA+C;IAC/C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IACxC,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"aggregate_path.js","sourceRoot":"","sources":["../../src/aggregate_path.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,MAAM,UAAU,GAAG,IAAI,GAAG,CAAc,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAEtE;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,2CAA2C;IAC3C,+CAA+C;IAC/C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IACxC,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAgB,CAAC;IACzC,IAAI,EAAE,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACxE,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9F,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -39,6 +39,14 @@ export interface ApplyCursorFromRequestOptions extends ApplyFromRequestOptions {
|
|
|
39
39
|
/** Primary-key column appended to the keyset as a stable tiebreaker. Default `'id'`. */
|
|
40
40
|
primaryKey?: string;
|
|
41
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Apply the server-side, non-client-tamperable scope to the query BEFORE the
|
|
44
|
+
* allow-listed request filters: the tenant constraint (when the spec declares
|
|
45
|
+
* one and a tenant id resolves from ctx) and any `defaultFilters`. These bypass
|
|
46
|
+
* the allow-list on purpose — they are trusted server policy, mirroring how the
|
|
47
|
+
* NestJS runner applied `@TenantScoped` via the adapter's auto-field path.
|
|
48
|
+
*/
|
|
49
|
+
export declare function applyServerScope(query: QueryBuilderLike, spec: FilterSpec, ctx: FilterRequestContext | undefined): void;
|
|
42
50
|
/**
|
|
43
51
|
* Apply a {@link FilterSpec} to a Lucid query from a request context, returning
|
|
44
52
|
* the resolved offset pagination — the single explicit call an AdonisJS
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply_from_request.d.ts","sourceRoot":"","sources":["../../src/apply_from_request.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EACL,KAAK,WAAW,EAIjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,UAAU,EAAsB,MAAM,kBAAkB,CAAC;AACvE,OAAO,
|
|
1
|
+
{"version":3,"file":"apply_from_request.d.ts","sourceRoot":"","sources":["../../src/apply_from_request.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EACL,KAAK,WAAW,EAIjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,UAAU,EAAsB,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG/E,OAAO,EAA+C,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACnG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAEjD,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,oDAAoD;AACpD,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,kDAAkD;AAClD,MAAM,WAAW,6BAA8B,SAAQ,uBAAuB;IAC5E,wFAAwF;IACxF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AASD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,oBAAoB,GAAG,SAAS,GACpC,IAAI,CAeN;AAUD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,oBAAoB,GAAG,SAAS,EACrC,OAAO,CAAC,EAAE,uBAAuB,GAChC,kBAAkB,CAAC;AACtB;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,oBAAoB,GAAG,SAAS,EACrC,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAyI/B;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,oBAAoB,GAAG,SAAS,EACrC,OAAO,GAAE,6BAAkC,GAC1C,cAAc,CAahB"}
|
|
@@ -17,7 +17,7 @@ function rawQs(ctx) {
|
|
|
17
17
|
* the allow-list on purpose — they are trusted server policy, mirroring how the
|
|
18
18
|
* NestJS runner applied `@TenantScoped` via the adapter's auto-field path.
|
|
19
19
|
*/
|
|
20
|
-
function applyServerScope(query, spec, ctx) {
|
|
20
|
+
export function applyServerScope(query, spec, ctx) {
|
|
21
21
|
const serverFilters = [];
|
|
22
22
|
if (spec.tenant) {
|
|
23
23
|
const tenantId = spec.tenant.resolve(ctx);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply_from_request.js","sourceRoot":"","sources":["../../src/apply_from_request.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,aAAa,EACb,YAAY,EACZ,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAmB,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,
|
|
1
|
+
{"version":3,"file":"apply_from_request.js","sourceRoot":"","sources":["../../src/apply_from_request.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { FilterInput } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* The class-authoring form of a filter over ANY backend — the generic base behind
|
|
4
|
+
* {@link import('./base_model_filter.js').BaseModelFilter} (Lucid) and custom backends
|
|
5
|
+
* (in-memory stores, engine clients, predicate bags) alike: **one style that does everything**.
|
|
6
|
+
*
|
|
7
|
+
* A method's name IS the key it owns, `setup()` runs on every call before anything the request
|
|
8
|
+
* asked for, and the class is resolved through the IoC container so an `@inject()`ed constructor
|
|
9
|
+
* works — exactly the shape AdonisJS developers know from `adonis-lucid-filter`. What differs per
|
|
10
|
+
* backend is only what `$query` IS: a Lucid builder for models, a draft the methods narrow for
|
|
11
|
+
* anything else.
|
|
12
|
+
*
|
|
13
|
+
* ```ts
|
|
14
|
+
* export class RunFilter extends BaseFilter<RunQueryDraft> {
|
|
15
|
+
* declare $query: RunQueryDraft;
|
|
16
|
+
*
|
|
17
|
+
* status(value: unknown, operator: string) {
|
|
18
|
+
* const values = (Array.isArray(value) ? value : [value]).map(String);
|
|
19
|
+
* this.$query.narrow(values.length === 1 ? { status: values[0] } : { statuses: values });
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
*
|
|
23
|
+
* const draft = new RunQueryDraft();
|
|
24
|
+
* await applyCustomFilter(draft, RunFilter, ctx);
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare abstract class BaseFilter<TQuery> {
|
|
28
|
+
/**
|
|
29
|
+
* The query being filtered — the one the caller created. Methods mutate it directly; nothing
|
|
30
|
+
* here constructs or executes a query.
|
|
31
|
+
*/
|
|
32
|
+
$query: TQuery;
|
|
33
|
+
/** The raw decoded request input the dispatch reads (query string, or the body on a POST). */
|
|
34
|
+
$input: Readonly<Record<string, unknown>>;
|
|
35
|
+
/** The parsed input — filters, sort, search, pagination — after the wire format is read. */
|
|
36
|
+
$parsed: FilterInput;
|
|
37
|
+
/** The request context handed to the call (a real `HttpContext` in an AdonisJS app). */
|
|
38
|
+
$ctx: unknown;
|
|
39
|
+
/**
|
|
40
|
+
* Runs on every filter call, before anything the request asked for — the place for defaults
|
|
41
|
+
* and for constraints the client must not be able to relax.
|
|
42
|
+
*/
|
|
43
|
+
setup?(): void | Promise<void>;
|
|
44
|
+
/** The whole raw input, one key of it, or a fallback when the key is absent. */
|
|
45
|
+
input(): Readonly<Record<string, unknown>>;
|
|
46
|
+
input(key: string): unknown;
|
|
47
|
+
input(key: string, fallback: unknown): unknown;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=base_filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base_filter.d.ts","sourceRoot":"","sources":["../../src/base_filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,8BAAsB,UAAU,CAAC,MAAM;IACrC;;;OAGG;IACK,MAAM,EAAE,MAAM,CAAC;IAEvB,8FAA8F;IACtF,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAElD,4FAA4F;IACpF,OAAO,EAAE,WAAW,CAAC;IAE7B,wFAAwF;IAChF,IAAI,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,KAAK,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/B,gFAAgF;IAChF,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3C,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC;CAKhD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The class-authoring form of a filter over ANY backend — the generic base behind
|
|
3
|
+
* {@link import('./base_model_filter.js').BaseModelFilter} (Lucid) and custom backends
|
|
4
|
+
* (in-memory stores, engine clients, predicate bags) alike: **one style that does everything**.
|
|
5
|
+
*
|
|
6
|
+
* A method's name IS the key it owns, `setup()` runs on every call before anything the request
|
|
7
|
+
* asked for, and the class is resolved through the IoC container so an `@inject()`ed constructor
|
|
8
|
+
* works — exactly the shape AdonisJS developers know from `adonis-lucid-filter`. What differs per
|
|
9
|
+
* backend is only what `$query` IS: a Lucid builder for models, a draft the methods narrow for
|
|
10
|
+
* anything else.
|
|
11
|
+
*
|
|
12
|
+
* ```ts
|
|
13
|
+
* export class RunFilter extends BaseFilter<RunQueryDraft> {
|
|
14
|
+
* declare $query: RunQueryDraft;
|
|
15
|
+
*
|
|
16
|
+
* status(value: unknown, operator: string) {
|
|
17
|
+
* const values = (Array.isArray(value) ? value : [value]).map(String);
|
|
18
|
+
* this.$query.narrow(values.length === 1 ? { status: values[0] } : { statuses: values });
|
|
19
|
+
* }
|
|
20
|
+
* }
|
|
21
|
+
*
|
|
22
|
+
* const draft = new RunQueryDraft();
|
|
23
|
+
* await applyCustomFilter(draft, RunFilter, ctx);
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export class BaseFilter {
|
|
27
|
+
input(key, fallback) {
|
|
28
|
+
if (key === undefined)
|
|
29
|
+
return this.$input;
|
|
30
|
+
return Object.hasOwn(this.$input, key) ? this.$input[key] : fallback;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=base_filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base_filter.js","sourceRoot":"","sources":["../../src/base_filter.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,OAAgB,UAAU;IA0B9B,KAAK,CAAC,GAAY,EAAE,QAAkB;QACpC,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC;QAC1C,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACvE,CAAC;CACF"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { LucidModelLike } from './aggregate.js';
|
|
2
|
+
import { BaseFilter } from './base_filter.js';
|
|
2
3
|
import type { FieldAliases } from './field_aliases.js';
|
|
3
4
|
import type { FilterableInput, RelationColumns, RelationSpec, TenantScopeSpec } from './filter_spec.js';
|
|
4
5
|
import type { FilterFieldTypeInfo } from './generate_client.js';
|
|
5
6
|
import type { QueryBuilderLike } from './lucid_adapter.js';
|
|
6
7
|
import type { ColumnFilter } from './operators.js';
|
|
7
|
-
import type { ComputedFields,
|
|
8
|
+
import type { ComputedFields, FullTextSearchConfig, SortItem, VectorSimilarityConfig } from './types.js';
|
|
8
9
|
/**
|
|
9
10
|
* The class-authoring form of a filter — the counterpart of `defineFilter`, in the shape
|
|
10
11
|
* AdonisJS developers already know from `adonis-lucid-filter`: **a method per request key**,
|
|
@@ -42,18 +43,7 @@ import type { ComputedFields, FilterInput, FullTextSearchConfig, SortItem, Vecto
|
|
|
42
43
|
* }
|
|
43
44
|
* ```
|
|
44
45
|
*/
|
|
45
|
-
export declare abstract class BaseModelFilter<Q extends QueryBuilderLike = QueryBuilderLike> {
|
|
46
|
-
/**
|
|
47
|
-
* The query builder being filtered — the one the caller created. Methods mutate it directly;
|
|
48
|
-
* nothing here constructs or executes a query.
|
|
49
|
-
*/
|
|
50
|
-
$query: Q;
|
|
51
|
-
/** The raw decoded request input the dispatch reads (query string, or the body on a POST). */
|
|
52
|
-
$input: Readonly<Record<string, unknown>>;
|
|
53
|
-
/** The parsed input — filters, sort, search, pagination — after the wire format is read. */
|
|
54
|
-
$parsed: FilterInput;
|
|
55
|
-
/** The request context handed to the call (a real `HttpContext` in an AdonisJS app). */
|
|
56
|
-
$ctx: unknown;
|
|
46
|
+
export declare abstract class BaseModelFilter<Q extends QueryBuilderLike = QueryBuilderLike> extends BaseFilter<Q> {
|
|
57
47
|
/** The owning Lucid model. Unlocks to-many aggregates and supplies the root table name. */
|
|
58
48
|
static model?: LucidModelLike;
|
|
59
49
|
/** Columns clients may filter on with the standard operators. `'*'` allows any base column. */
|
|
@@ -96,14 +86,5 @@ export declare abstract class BaseModelFilter<Q extends QueryBuilderLike = Query
|
|
|
96
86
|
static dropId?: boolean;
|
|
97
87
|
/** Match `snake_case` input keys against camelCase methods (`first_name` → `firstName`). Default true. */
|
|
98
88
|
static camelCase?: boolean;
|
|
99
|
-
/**
|
|
100
|
-
* Runs on every filter call, before the request's own filters — the place for a scope the
|
|
101
|
-
* client cannot relax (a tenant, a soft-delete guard, an ownership check).
|
|
102
|
-
*/
|
|
103
|
-
setup?(): void | Promise<void>;
|
|
104
|
-
/** The whole raw input, one key of it, or a fallback when the key is absent. */
|
|
105
|
-
input(): Readonly<Record<string, unknown>>;
|
|
106
|
-
input(key: string): unknown;
|
|
107
|
-
input(key: string, fallback: unknown): unknown;
|
|
108
89
|
}
|
|
109
90
|
//# sourceMappingURL=base_model_filter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base_model_filter.d.ts","sourceRoot":"","sources":["../../src/base_model_filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,YAAY,EACZ,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EACV,cAAc,EACd,
|
|
1
|
+
{"version":3,"file":"base_model_filter.d.ts","sourceRoot":"","sources":["../../src/base_model_filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,YAAY,EACZ,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,QAAQ,EACR,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,8BAAsB,eAAe,CACnC,CAAC,SAAS,gBAAgB,GAAG,gBAAgB,CAC7C,SAAQ,UAAU,CAAC,CAAC,CAAC;IAGrB,2FAA2F;IAC3F,MAAM,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC;IAC9B,+FAA+F;IAC/F,MAAM,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC;IACpC,6DAA6D;IAC7D,MAAM,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC;IAClC,uEAAuE;IACvE,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,oEAAoE;IACpE,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAChD,6CAA6C;IAC7C,MAAM,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAC9B,+CAA+C;IAC/C,MAAM,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;IACjC,wEAAwE;IACxE,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACxD,6DAA6D;IAC7D,MAAM,CAAC,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IACvC,qDAAqD;IACrD,MAAM,CAAC,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IACjD,6FAA6F;IAC7F,MAAM,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;IAChC,oEAAoE;IACpE,MAAM,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,CAAC;IACvC,kDAAkD;IAClD,MAAM,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC;IAChC,4DAA4D;IAC5D,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC5B,0CAA0C;IAC1C,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IACzB,mDAAmD;IACnD,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACtB,qFAAqF;IACrF,MAAM,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAIhC,4FAA4F;IAC5F,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,qGAAqG;IACrG,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IACxB,0GAA0G;IAC1G,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC5B"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { BaseFilter } from './base_filter.js';
|
|
1
2
|
/**
|
|
2
3
|
* The class-authoring form of a filter — the counterpart of `defineFilter`, in the shape
|
|
3
4
|
* AdonisJS developers already know from `adonis-lucid-filter`: **a method per request key**,
|
|
@@ -35,7 +36,7 @@
|
|
|
35
36
|
* }
|
|
36
37
|
* ```
|
|
37
38
|
*/
|
|
38
|
-
export class BaseModelFilter {
|
|
39
|
+
export class BaseModelFilter extends BaseFilter {
|
|
39
40
|
// ── the declarative half: everything a plain column needs, without writing a method ──────────
|
|
40
41
|
/** The owning Lucid model. Unlocks to-many aggregates and supplies the root table name. */
|
|
41
42
|
static model;
|
|
@@ -80,10 +81,5 @@ export class BaseModelFilter {
|
|
|
80
81
|
static dropId;
|
|
81
82
|
/** Match `snake_case` input keys against camelCase methods (`first_name` → `firstName`). Default true. */
|
|
82
83
|
static camelCase;
|
|
83
|
-
input(key, fallback) {
|
|
84
|
-
if (key === undefined)
|
|
85
|
-
return this.$input;
|
|
86
|
-
return Object.hasOwn(this.$input, key) ? this.$input[key] : fallback;
|
|
87
|
-
}
|
|
88
84
|
}
|
|
89
85
|
//# sourceMappingURL=base_model_filter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base_model_filter.js","sourceRoot":"","sources":["../../src/base_model_filter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"base_model_filter.js","sourceRoot":"","sources":["../../src/base_model_filter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAkB9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,OAAgB,eAEpB,SAAQ,UAAa;IACrB,gGAAgG;IAEhG,2FAA2F;IAC3F,MAAM,CAAC,KAAK,CAAkB;IAC9B,+FAA+F;IAC/F,MAAM,CAAC,UAAU,CAAmB;IACpC,6DAA6D;IAC7D,MAAM,CAAC,QAAQ,CAAmB;IAClC,uEAAuE;IACvE,MAAM,CAAC,UAAU,CAAY;IAC7B,oEAAoE;IACpE,MAAM,CAAC,SAAS,CAAgC;IAChD,6CAA6C;IAC7C,MAAM,CAAC,OAAO,CAAgB;IAC9B,+CAA+C;IAC/C,MAAM,CAAC,QAAQ,CAAkB;IACjC,wEAAwE;IACxE,MAAM,CAAC,UAAU,CAAuC;IACxD,6DAA6D;IAC7D,MAAM,CAAC,QAAQ,CAAwB;IACvC,qDAAqD;IACrD,MAAM,CAAC,gBAAgB,CAA0B;IACjD,6FAA6F;IAC7F,MAAM,CAAC,MAAM,CAAmB;IAChC,oEAAoE;IACpE,MAAM,CAAC,cAAc,CAAkB;IACvC,kDAAkD;IAClD,MAAM,CAAC,WAAW,CAAc;IAChC,4DAA4D;IAC5D,MAAM,CAAC,WAAW,CAAU;IAC5B,0CAA0C;IAC1C,MAAM,CAAC,OAAO,CAAU;IACxB,iFAAiF;IACjF,MAAM,CAAC,QAAQ,CAAU;IACzB,mDAAmD;IACnD,MAAM,CAAC,KAAK,CAAU;IACtB,qFAAqF;IACrF,MAAM,CAAC,cAAc,CAAW;IAEhC,gGAAgG;IAEhG,4FAA4F;IAC5F,MAAM,CAAC,SAAS,CAAY;IAC5B,qGAAqG;IACrG,MAAM,CAAC,MAAM,CAAW;IACxB,0GAA0G;IAC1G,MAAM,CAAC,SAAS,CAAW;CAC5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coerce_value.js","sourceRoot":"","sources":["../../src/coerce_value.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc,EAAE,IAAqB;IACrE,8FAA8F;IAC9F,sFAAsF;IACtF,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAErD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ,
|
|
1
|
+
{"version":3,"file":"coerce_value.js","sourceRoot":"","sources":["../../src/coerce_value.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { FilterRequestContext } from './apply_from_request.js';
|
|
2
|
+
import type { BaseFilter } from './base_filter.js';
|
|
3
|
+
import type { FilterInput } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* A filter class over a custom backend, as the container hands it back: constructible, extending
|
|
6
|
+
* {@link BaseFilter} — the model form's {@link FilterClass} for drafts.
|
|
7
|
+
*/
|
|
8
|
+
export type CustomFilterClass<D> = new (...args: any[]) => BaseFilter<D>;
|
|
9
|
+
/** Options for {@link applyCustomFilter}. */
|
|
10
|
+
export interface ApplyCustomFilterOptions {
|
|
11
|
+
/**
|
|
12
|
+
* Pre-parsed input to use instead of reading `ctx.request.qs()`. Useful for non-HTTP callers
|
|
13
|
+
* and tests; when omitted the query string is parsed via {@link parseFilterRequest}.
|
|
14
|
+
*/
|
|
15
|
+
input?: FilterInput;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Run a custom filter class against a caller-created draft from a request context: bind the
|
|
19
|
+
* per-request state onto the instance, run `setup()`, then hand each filter to its owning method
|
|
20
|
+
* as `(value, operator, field)`.
|
|
21
|
+
*
|
|
22
|
+
* The custom-backend counterpart of
|
|
23
|
+
* {@link import('./apply_from_request.js').applyFilterFromRequest}: that helper ends in SQL (a
|
|
24
|
+
* `QueryBuilderLike`), this one ends in whatever the draft accumulates — a `RunQuery`, an engine
|
|
25
|
+
* client query, an in-memory predicate. The wire format, the parsing, the method dispatch and the
|
|
26
|
+
* error shapes are shared, so a console can move between a Lucid listing and a custom-backend one
|
|
27
|
+
* without relearning the spelling.
|
|
28
|
+
*
|
|
29
|
+
* ```ts
|
|
30
|
+
* const draft = new RunQueryDraft();
|
|
31
|
+
* await applyCustomFilter(draft, RunFilter, ctx);
|
|
32
|
+
* const runs = await engine.listRuns(draft.query);
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function applyCustomFilter<D>(draft: D, cls: CustomFilterClass<D>, ctx: FilterRequestContext | undefined, options?: ApplyCustomFilterOptions): Promise<void>;
|
|
36
|
+
//# sourceMappingURL=custom_filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom_filter.d.ts","sourceRoot":"","sources":["../../src/custom_filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAInD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAO9C;;;GAGG;AAEH,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC;AAEzE,6CAA6C;AAC7C,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AA+GD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,KAAK,EAAE,CAAC,EACR,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,EACzB,GAAG,EAAE,oBAAoB,GAAG,SAAS,EACrC,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,IAAI,CAAC,CAyBf"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { methodForKey } from './filter_class.js';
|
|
2
|
+
import { FILTER_OPERATORS } from './operators.js';
|
|
3
|
+
import { parseFilterRequest } from './parse_request.js';
|
|
4
|
+
import { InvalidColumnFilterError, MAX_FILTER_DEPTH, normalizeOperator, } from './validate-column-filter.js';
|
|
5
|
+
/**
|
|
6
|
+
* Resolve a custom filter class through the request's IoC container when there is one — the same
|
|
7
|
+
* resolver a controller is constructed with, so `@inject()` on the filter behaves identically —
|
|
8
|
+
* and fall back to plain construction outside an AdonisJS request (a test, a script).
|
|
9
|
+
*/
|
|
10
|
+
async function resolveCustomFilter(cls, ctx) {
|
|
11
|
+
const resolver = ctx?.containerResolver;
|
|
12
|
+
if (resolver && typeof resolver.make === 'function') {
|
|
13
|
+
return (await resolver.make(cls));
|
|
14
|
+
}
|
|
15
|
+
return new cls();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The method owning `field`: an exact `@filterFor`/own-method match first, else the head segment
|
|
19
|
+
* (`attr.tier` reaches `attr`) so one method can own a whole dynamic subtree. The full field still
|
|
20
|
+
* rides along as the method's third argument, so the method always knows which key it was reached
|
|
21
|
+
* through.
|
|
22
|
+
*
|
|
23
|
+
* The cast is sound: method dispatch only walks the prototype chain and reads static knobs, both
|
|
24
|
+
* of which a custom filter class carries exactly like a model filter class (the walk simply ends
|
|
25
|
+
* at `Object.prototype` instead of `BaseModelFilter.prototype`, with the same result — and at
|
|
26
|
+
* `BaseFilter.prototype` for the shared members, which are never dispatchable).
|
|
27
|
+
*/
|
|
28
|
+
function resolveMethod(cls, field) {
|
|
29
|
+
const asModelFilter = cls;
|
|
30
|
+
const exact = methodForKey(asModelFilter, field);
|
|
31
|
+
if (exact !== undefined)
|
|
32
|
+
return exact;
|
|
33
|
+
const dot = field.indexOf('.');
|
|
34
|
+
if (dot > 0)
|
|
35
|
+
return methodForKey(asModelFilter, field.slice(0, dot));
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Collect the calls a parsed input dispatches to: every structured filter to its owning method
|
|
40
|
+
* (`AND` groups recurse; `OR` is rejected — a draft is an ANDed predicate bag and cannot express
|
|
41
|
+
* cross-field OR), then every bare top-level key the wire format does not own (`?tag=etl`, the
|
|
42
|
+
* legacy spelling) to its same-named method. Unknown BARE keys are ignored — they are how old
|
|
43
|
+
* callers send pagination and other endpoint mechanics — while an unknown STRUCTURED field is
|
|
44
|
+
* rejected outright: the new spelling fails loudly on typos instead of silently widening.
|
|
45
|
+
*/
|
|
46
|
+
function collectCalls(cls, raw, parsed) {
|
|
47
|
+
const calls = [];
|
|
48
|
+
const visit = (filter, depth) => {
|
|
49
|
+
if (depth > MAX_FILTER_DEPTH) {
|
|
50
|
+
throw new InvalidColumnFilterError(`Filter nesting exceeds maximum depth (${MAX_FILTER_DEPTH}).`);
|
|
51
|
+
}
|
|
52
|
+
const isGroupNode = (filter.AND !== undefined || filter.OR !== undefined) &&
|
|
53
|
+
(filter.field === undefined || filter.field === '');
|
|
54
|
+
if (isGroupNode) {
|
|
55
|
+
if (filter.OR !== undefined) {
|
|
56
|
+
throw new InvalidColumnFilterError('This filter does not support OR groups — a draft is an ANDed predicate bag.');
|
|
57
|
+
}
|
|
58
|
+
for (const sub of filter.AND ?? [])
|
|
59
|
+
visit(sub, depth + 1);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (typeof filter.field !== 'string' || filter.field === '') {
|
|
63
|
+
throw new InvalidColumnFilterError('Column filter needs a field.');
|
|
64
|
+
}
|
|
65
|
+
// SQL-symbol aliases (`=`, `!=`, …) normalize to canonical operators first, so methods only
|
|
66
|
+
// ever see the canonical spelling — the same normalization the SQL path applies.
|
|
67
|
+
const operator = normalizeOperator(String(filter.operator));
|
|
68
|
+
if (!FILTER_OPERATORS.includes(operator)) {
|
|
69
|
+
throw new InvalidColumnFilterError(`Unknown filter operator: "${String(filter.operator)}".`);
|
|
70
|
+
}
|
|
71
|
+
const method = resolveMethod(cls, filter.field);
|
|
72
|
+
if (method === undefined) {
|
|
73
|
+
throw new InvalidColumnFilterError(`Unknown filter field: "${filter.field}".`);
|
|
74
|
+
}
|
|
75
|
+
calls.push({ method, value: filter.value, operator, field: filter.field });
|
|
76
|
+
};
|
|
77
|
+
for (const filter of parsed.filters ?? [])
|
|
78
|
+
visit(filter, 0);
|
|
79
|
+
// A bare top-level key (`?tag=etl`) reaches a method of the same name too — the legacy spelling
|
|
80
|
+
// — as long as the wire format does not own the key and no structured filter already claimed it.
|
|
81
|
+
// The reserved gate inside `methodForKey` is what keeps endpoint mechanics (`limit`, `sort`, …)
|
|
82
|
+
// from ever reaching a method here.
|
|
83
|
+
for (const [key, value] of Object.entries(raw)) {
|
|
84
|
+
const method = resolveMethod(cls, key);
|
|
85
|
+
if (method !== undefined && !calls.some((call) => call.method === method)) {
|
|
86
|
+
calls.push({ method, value, operator: 'equals', field: key });
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return calls;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Run a custom filter class against a caller-created draft from a request context: bind the
|
|
93
|
+
* per-request state onto the instance, run `setup()`, then hand each filter to its owning method
|
|
94
|
+
* as `(value, operator, field)`.
|
|
95
|
+
*
|
|
96
|
+
* The custom-backend counterpart of
|
|
97
|
+
* {@link import('./apply_from_request.js').applyFilterFromRequest}: that helper ends in SQL (a
|
|
98
|
+
* `QueryBuilderLike`), this one ends in whatever the draft accumulates — a `RunQuery`, an engine
|
|
99
|
+
* client query, an in-memory predicate. The wire format, the parsing, the method dispatch and the
|
|
100
|
+
* error shapes are shared, so a console can move between a Lucid listing and a custom-backend one
|
|
101
|
+
* without relearning the spelling.
|
|
102
|
+
*
|
|
103
|
+
* ```ts
|
|
104
|
+
* const draft = new RunQueryDraft();
|
|
105
|
+
* await applyCustomFilter(draft, RunFilter, ctx);
|
|
106
|
+
* const runs = await engine.listRuns(draft.query);
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
export async function applyCustomFilter(draft, cls, ctx, options = {}) {
|
|
110
|
+
const raw = ctx?.request?.qs?.() ?? {};
|
|
111
|
+
const parsed = options.input ?? parseFilterRequest(raw);
|
|
112
|
+
const instance = await resolveCustomFilter(cls, ctx);
|
|
113
|
+
Object.assign(instance, {
|
|
114
|
+
$query: draft,
|
|
115
|
+
$input: raw,
|
|
116
|
+
$parsed: parsed,
|
|
117
|
+
$ctx: ctx,
|
|
118
|
+
});
|
|
119
|
+
await instance.setup?.();
|
|
120
|
+
for (const { method, value, operator, field } of collectCalls(cls, raw, parsed)) {
|
|
121
|
+
const fn = instance[method];
|
|
122
|
+
if (typeof fn === 'function') {
|
|
123
|
+
await fn.call(instance, value, operator, field);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=custom_filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom_filter.js","sourceRoot":"","sources":["../../src/custom_filter.ts"],"names":[],"mappings":"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"}
|
package/dist/src/escape-like.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"escape-like.js","sourceRoot":"","sources":["../../src/escape-like.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"escape-like.js","sourceRoot":"","sources":["../../src/escape-like.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,OAAO,GAAyB,UAAU;IAClF,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter_class.d.ts","sourceRoot":"","sources":["../../src/filter_class.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"filter_class.d.ts","sourceRoot":"","sources":["../../src/filter_class.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGjE;;;;;;;;GAQG;AAEH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,eAAe,CAAC;AAkDlE;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAQlE;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CA0BlE;AAkCD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,WAAW,GAAG,UAAU,CA8BhE;AAoDD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAuB9E;AAcD,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAElD"}
|