@adonis-agora/filter 1.0.0-rc.2 → 1.0.0-rc.4
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/dist/commands/make_filter_client.d.ts +4 -1
- package/dist/commands/make_filter_client.d.ts.map +1 -1
- package/dist/commands/make_filter_client.js +11 -7
- package/dist/commands/make_filter_client.js.map +1 -1
- package/dist/src/doctor/checks.d.ts +19 -4
- package/dist/src/doctor/checks.d.ts.map +1 -1
- package/dist/src/doctor/checks.js +176 -50
- package/dist/src/doctor/checks.js.map +1 -1
- package/dist/src/generate_client.d.ts +12 -0
- package/dist/src/generate_client.d.ts.map +1 -1
- package/dist/src/generate_client.js +35 -4
- package/dist/src/generate_client.js.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/manifest.d.ts +20 -1
- package/dist/src/manifest.d.ts.map +1 -1
- package/dist/src/manifest.js +22 -4
- package/dist/src/manifest.js.map +1 -1
- package/package.json +1 -1
- package/skills/filter-codegen/SKILL.md +8 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @adonis-agora/filter
|
|
2
2
|
|
|
3
|
+
## 1.0.0-rc.4
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#149](https://github.com/DavideCarvalho/adonis-agora-filter/pull/149) [`90b00d6`](https://github.com/DavideCarvalho/adonis-agora-filter/commit/90b00d6ef58de0b5665ebf26efdf9777fe93fc4b) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - `agora:doctor` now checks the generated clients wherever they live. Set `codegen.output` in `config/filter.ts` (`export const codegen = { output: 'inertia/generated/filters' }`): `make:filter-client` writes there by default (`--output` still overrides) and the `filter.manifest` check compares the clients there. Without `codegen.output`, clients generated elsewhere are found by their banner, checked, and the doctor asks you to set it; with no generated clients anywhere the check reports a skip naming the directory it looked in instead of passing silently.
|
|
8
|
+
|
|
9
|
+
## 1.0.0-rc.3
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [#148](https://github.com/DavideCarvalho/adonis-agora-filter/pull/148) [`7ac919c`](https://github.com/DavideCarvalho/adonis-agora-filter/commit/7ac919ceabf41976ae30e42a50c5a6f179502593) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - `agora:doctor`'s `filter.manifest` check no longer reports prettier-formatted clients as out of date. Generated clients now carry a `// Content hash: sha256:…` banner line (the hash of what the generator emitted), and the check compares that hash with a fresh generation, so any formatter is fine. Clients generated before this get a more tolerant shape comparison (quoted vs unquoted keys, quote escapes and a union's leading `|` are ignored). Run `node ace make:filter-client` once to add the hash.
|
|
14
|
+
|
|
3
15
|
## 1.0.0-rc.2
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
|
@@ -22,6 +22,9 @@ import type { CommandOptions } from '@adonisjs/core/types/ace';
|
|
|
22
22
|
* people: { spec: defineFilter({ filterable: ['name', 'age'] }), fieldTypes: { age: { kind: 'number' } } },
|
|
23
23
|
* }
|
|
24
24
|
* ```
|
|
25
|
+
*
|
|
26
|
+
* The output directory is `--output`, else `codegen.output` from the same module (or the `filter`
|
|
27
|
+
* config), else `app/generated/filters`.
|
|
25
28
|
*/
|
|
26
29
|
export default class MakeFilterClient extends BaseCommand {
|
|
27
30
|
#private;
|
|
@@ -29,7 +32,7 @@ export default class MakeFilterClient extends BaseCommand {
|
|
|
29
32
|
static description: string;
|
|
30
33
|
static options: CommandOptions;
|
|
31
34
|
entrypoint: string;
|
|
32
|
-
output
|
|
35
|
+
output?: string;
|
|
33
36
|
run(): Promise<void>;
|
|
34
37
|
}
|
|
35
38
|
//# sourceMappingURL=make_filter_client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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;AAK/D
|
|
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;AAK/D;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;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,CAAC,EAAE,MAAM,CAAC;IAET,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAiBlC;CAiBF"}
|
|
@@ -31,16 +31,21 @@ import { loadFilterManifest } from '../src/manifest.js';
|
|
|
31
31
|
* people: { spec: defineFilter({ filterable: ['name', 'age'] }), fieldTypes: { age: { kind: 'number' } } },
|
|
32
32
|
* }
|
|
33
33
|
* ```
|
|
34
|
+
*
|
|
35
|
+
* The output directory is `--output`, else `codegen.output` from the same module (or the `filter`
|
|
36
|
+
* config), else `app/generated/filters`.
|
|
34
37
|
*/
|
|
35
38
|
export default class MakeFilterClient extends BaseCommand {
|
|
36
39
|
static commandName = 'make:filter-client';
|
|
37
40
|
static description = "Generate typed filter clients from the app's declared filter specs";
|
|
38
41
|
static options = { startApp: true };
|
|
39
42
|
async run() {
|
|
40
|
-
const
|
|
41
|
-
if (!
|
|
43
|
+
const load = await this.#loadManifest();
|
|
44
|
+
if (!load)
|
|
42
45
|
return;
|
|
43
|
-
const
|
|
46
|
+
const { manifest } = load;
|
|
47
|
+
const output = this.output?.trim() || load.output.path;
|
|
48
|
+
const outDir = isAbsolute(output) ? output : this.app.makePath(output);
|
|
44
49
|
await mkdir(outDir, { recursive: true });
|
|
45
50
|
const generated = generateFilterClients(manifest);
|
|
46
51
|
for (const client of generated) {
|
|
@@ -48,13 +53,13 @@ export default class MakeFilterClient extends BaseCommand {
|
|
|
48
53
|
await writeFile(path, client.code, 'utf-8');
|
|
49
54
|
this.logger.action(`create ${path}`).succeeded();
|
|
50
55
|
}
|
|
51
|
-
this.logger.success(`Generated ${generated.length} filter client(s) into ${
|
|
56
|
+
this.logger.success(`Generated ${generated.length} filter client(s) into ${output}.`);
|
|
52
57
|
}
|
|
53
58
|
/** Load the `filters` manifest with the loader the doctor and the dev tools share. */
|
|
54
59
|
async #loadManifest() {
|
|
55
60
|
const load = await loadFilterManifest(this.app, this.entrypoint);
|
|
56
61
|
if (load.status === 'loaded')
|
|
57
|
-
return load
|
|
62
|
+
return load;
|
|
58
63
|
if (load.status === 'failed' || load.status === 'missing') {
|
|
59
64
|
const reason = load.status === 'failed' ? load.error : 'the module was not found';
|
|
60
65
|
this.logger.error(`Could not import filter manifest "${this.entrypoint}": ${reason}`);
|
|
@@ -74,8 +79,7 @@ __decorate([
|
|
|
74
79
|
], MakeFilterClient.prototype, "entrypoint", void 0);
|
|
75
80
|
__decorate([
|
|
76
81
|
flags.string({
|
|
77
|
-
description: 'Output directory for the generated clients',
|
|
78
|
-
default: 'app/generated/filters',
|
|
82
|
+
description: 'Output directory for the generated clients (default: codegen.output in config/filter.ts, else app/generated/filters)',
|
|
79
83
|
})
|
|
80
84
|
], MakeFilterClient.prototype, "output", void 0);
|
|
81
85
|
//# sourceMappingURL=make_filter_client.js.map
|
|
@@ -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,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,kBAAkB,
|
|
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,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAqB,MAAM,oBAAoB,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,WAAW;IACvD,MAAM,CAAU,WAAW,GAAG,oBAAoB,CAAC;IACnD,MAAM,CAAU,WAAW,GACzB,oEAAoE,CAAC;IACvE,MAAM,CAAU,OAAO,GAAmB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAepD,KAAK,CAAC,GAAG;QAChB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAE1B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QACvD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvE,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEzC,MAAM,SAAS,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAClD,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC5C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QACnD,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,SAAS,CAAC,MAAM,0BAA0B,MAAM,GAAG,CAAC,CAAC;IACxF,CAAC;IAED,sFAAsF;IACtF,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACjE,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC1C,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,0BAA0B,CAAC;YAClF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,IAAI,CAAC,UAAU,MAAM,MAAM,EAAE,CAAC,CAAC;YACtF,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YAClB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,0CAA0C,IAAI,CAAC,UAAU,0BAA0B,CACpF,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AA1CS;IALP,IAAI,CAAC,MAAM,CAAC;QACX,WAAW,EAAE,uCAAuC;QACpD,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,kBAAkB;KAC5B,CAAC;oDACyB;AAMnB;IAJP,KAAK,CAAC,MAAM,CAAC;QACZ,WAAW,EACT,sHAAsH;KACzH,CAAC;gDACsB"}
|
|
@@ -1,12 +1,27 @@
|
|
|
1
|
+
import { DEFAULT_CLIENT_OUTPUT } from '../manifest.js';
|
|
1
2
|
import type { AgoraDoctorCheck } from './agora_doctor.js';
|
|
2
|
-
|
|
3
|
-
|
|
3
|
+
export { DEFAULT_CLIENT_OUTPUT };
|
|
4
|
+
/**
|
|
5
|
+
* The directories under the app root (outside `exclude`) that hold `*_filter_client.ts` files
|
|
6
|
+
* carrying the generator's banner, as app-relative paths. Bounded: dot-dirs, build output and
|
|
7
|
+
* `node_modules` are skipped, and the walk stops at {@link SEARCH_DEPTH} / {@link SEARCH_DIR_BUDGET}.
|
|
8
|
+
*/
|
|
9
|
+
export declare function findClientDirs(root: string, exclude: string): Promise<string[]>;
|
|
4
10
|
/**
|
|
5
11
|
* The code with formatting erased outside string literals (whitespace, semicolons, commas, quote
|
|
6
|
-
* style
|
|
7
|
-
*
|
|
12
|
+
* style and escapes, quotes around identifier-like object keys, a union's leading `|`), so a
|
|
13
|
+
* client the app ran its formatter over still compares equal to a fresh generation, while any
|
|
14
|
+
* change inside a string literal still counts. Only the fallback for clients generated before the
|
|
15
|
+
* banner carried a content hash (see {@link clientMatches}).
|
|
8
16
|
*/
|
|
9
17
|
export declare function codeShape(code: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Whether a generated client on disk still matches a fresh generation. Clients carry the hash of
|
|
20
|
+
* what the generator emitted in their banner (a line comment no formatter touches), so the hashes
|
|
21
|
+
* are compared and any reformatting of the code is irrelevant. A client without the hash (written
|
|
22
|
+
* before it existed, or with `banner: false`) falls back to comparing {@link codeShape}s.
|
|
23
|
+
*/
|
|
24
|
+
export declare function clientMatches(onDisk: string, fresh: string): boolean;
|
|
10
25
|
/** The doctor checks of `@adonis-agora/filter` (ids frozen for 1.x). */
|
|
11
26
|
export declare function filterDoctorChecks(): AgoraDoctorCheck[];
|
|
12
27
|
//# sourceMappingURL=checks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../../src/doctor/checks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../../src/doctor/checks.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,qBAAqB,EAAsB,MAAM,gBAAgB,CAAC;AAC3E,OAAO,KAAK,EAAE,gBAAgB,EAAqB,MAAM,mBAAmB,CAAC;AAI7E,OAAO,EAAE,qBAAqB,EAAE,CAAC;AA4BjC;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA2BrF;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA+D9C;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAUpE;AAgED,wEAAwE;AACxE,wBAAgB,kBAAkB,IAAI,gBAAgB,EAAE,CAsFvD"}
|
|
@@ -1,19 +1,81 @@
|
|
|
1
1
|
import { readdir, readFile } from 'node:fs/promises';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
import { generateFilterClients } from '../generate_client.js';
|
|
4
|
-
import { loadFilterManifest } from '../manifest.js';
|
|
2
|
+
import { isAbsolute, join, relative, sep } from 'node:path';
|
|
3
|
+
import { CONTENT_HASH_PREFIX, FILTER_CLIENT_BANNER, generateFilterClients, readFilterClientContentHash, } from '../generate_client.js';
|
|
4
|
+
import { DEFAULT_CLIENT_OUTPUT, loadFilterManifest } from '../manifest.js';
|
|
5
5
|
const DOCS = 'https://davidecarvalho.github.io/agora/docs/filter';
|
|
6
|
-
|
|
7
|
-
export const DEFAULT_CLIENT_OUTPUT = 'app/generated/filters';
|
|
6
|
+
export { DEFAULT_CLIENT_OUTPUT };
|
|
8
7
|
const CLIENT_FILE = /_filter_client\.ts$/;
|
|
8
|
+
/** Directories never searched for generated clients. */
|
|
9
|
+
const SKIPPED_DIRS = new Set([
|
|
10
|
+
'node_modules',
|
|
11
|
+
'build',
|
|
12
|
+
'dist',
|
|
13
|
+
'tmp',
|
|
14
|
+
'coverage',
|
|
15
|
+
'public',
|
|
16
|
+
'storage',
|
|
17
|
+
'vendor',
|
|
18
|
+
]);
|
|
19
|
+
/** How deep, and how many directories, the search for clients outside the output goes. */
|
|
20
|
+
const SEARCH_DEPTH = 6;
|
|
21
|
+
const SEARCH_DIR_BUDGET = 2000;
|
|
22
|
+
/**
|
|
23
|
+
* Whether a file is a client `make:filter-client` wrote: its banner, anywhere in the file (like the
|
|
24
|
+
* content hash, a license header a formatter adds above it must not hide it).
|
|
25
|
+
*/
|
|
26
|
+
function hasBanner(code) {
|
|
27
|
+
return code.split('\n').some((line) => line.trim() === FILTER_CLIENT_BANNER);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The directories under the app root (outside `exclude`) that hold `*_filter_client.ts` files
|
|
31
|
+
* carrying the generator's banner, as app-relative paths. Bounded: dot-dirs, build output and
|
|
32
|
+
* `node_modules` are skipped, and the walk stops at {@link SEARCH_DEPTH} / {@link SEARCH_DIR_BUDGET}.
|
|
33
|
+
*/
|
|
34
|
+
export async function findClientDirs(root, exclude) {
|
|
35
|
+
const found = [];
|
|
36
|
+
let budget = SEARCH_DIR_BUDGET;
|
|
37
|
+
const walk = async (dir, depth) => {
|
|
38
|
+
if (budget-- <= 0 || dir === exclude)
|
|
39
|
+
return;
|
|
40
|
+
let entries;
|
|
41
|
+
try {
|
|
42
|
+
entries = await readdir(dir, { withFileTypes: true });
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
let isClientDir = false;
|
|
48
|
+
for (const entry of entries) {
|
|
49
|
+
if (isClientDir || !entry.isFile() || !CLIENT_FILE.test(entry.name))
|
|
50
|
+
continue;
|
|
51
|
+
const code = await readOrNull(join(dir, entry.name));
|
|
52
|
+
if (code !== null && hasBanner(code))
|
|
53
|
+
isClientDir = true;
|
|
54
|
+
}
|
|
55
|
+
if (isClientDir)
|
|
56
|
+
found.push(relative(root, dir).split(sep).join('/') || '.');
|
|
57
|
+
if (depth >= SEARCH_DEPTH)
|
|
58
|
+
return;
|
|
59
|
+
for (const entry of entries) {
|
|
60
|
+
if (!entry.isDirectory() || entry.name.startsWith('.') || SKIPPED_DIRS.has(entry.name))
|
|
61
|
+
continue;
|
|
62
|
+
await walk(join(dir, entry.name), depth + 1);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
await walk(root, 0);
|
|
66
|
+
return found.sort();
|
|
67
|
+
}
|
|
9
68
|
/**
|
|
10
69
|
* The code with formatting erased outside string literals (whitespace, semicolons, commas, quote
|
|
11
|
-
* style
|
|
12
|
-
*
|
|
70
|
+
* style and escapes, quotes around identifier-like object keys, a union's leading `|`), so a
|
|
71
|
+
* client the app ran its formatter over still compares equal to a fresh generation, while any
|
|
72
|
+
* change inside a string literal still counts. Only the fallback for clients generated before the
|
|
73
|
+
* banner carried a content hash (see {@link clientMatches}).
|
|
13
74
|
*/
|
|
14
75
|
export function codeShape(code) {
|
|
15
76
|
let out = '';
|
|
16
77
|
let quote = null;
|
|
78
|
+
let literalStart = 0;
|
|
17
79
|
let comment = null;
|
|
18
80
|
for (let i = 0; i < code.length; i++) {
|
|
19
81
|
const ch = code[i];
|
|
@@ -37,11 +99,21 @@ export function codeShape(code) {
|
|
|
37
99
|
}
|
|
38
100
|
if (quote !== null) {
|
|
39
101
|
if (ch === '\\') {
|
|
40
|
-
|
|
102
|
+
// `\'` and `\"` are the same character whichever quote the formatter picked.
|
|
103
|
+
out += next === "'" || next === '"' ? next : ch + (next ?? '');
|
|
41
104
|
i++;
|
|
42
105
|
}
|
|
43
106
|
else if (ch === quote) {
|
|
44
|
-
|
|
107
|
+
const content = out.slice(literalStart + 1);
|
|
108
|
+
// `{ "age": 1 }` and `{ age: 1 }` are the same object (prettier's quoteProps).
|
|
109
|
+
if (quote !== '`' &&
|
|
110
|
+
/^[A-Za-z_$][\w$]*$/.test(content) &&
|
|
111
|
+
/^\s*:/.test(code.slice(i + 1))) {
|
|
112
|
+
out = out.slice(0, literalStart) + content;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
out += quote === '`' ? '`' : "'";
|
|
116
|
+
}
|
|
45
117
|
quote = null;
|
|
46
118
|
}
|
|
47
119
|
else {
|
|
@@ -61,14 +133,35 @@ export function codeShape(code) {
|
|
|
61
133
|
}
|
|
62
134
|
else if (ch === '"' || ch === "'" || ch === '`') {
|
|
63
135
|
quote = ch;
|
|
136
|
+
literalStart = out.length;
|
|
64
137
|
out += ch === '`' ? '`' : "'";
|
|
65
138
|
}
|
|
139
|
+
else if (ch === '|' && next !== '|' && /[=(<:]$/.test(out)) {
|
|
140
|
+
// A union broken over lines gains a leading `|` (`type X =\n | 'a'\n | 'b'`).
|
|
141
|
+
}
|
|
66
142
|
else if (!/\s/.test(ch) && ch !== ';' && ch !== ',') {
|
|
67
143
|
out += ch;
|
|
68
144
|
}
|
|
69
145
|
}
|
|
70
146
|
return out;
|
|
71
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* Whether a generated client on disk still matches a fresh generation. Clients carry the hash of
|
|
150
|
+
* what the generator emitted in their banner (a line comment no formatter touches), so the hashes
|
|
151
|
+
* are compared and any reformatting of the code is irrelevant. A client without the hash (written
|
|
152
|
+
* before it existed, or with `banner: false`) falls back to comparing {@link codeShape}s.
|
|
153
|
+
*/
|
|
154
|
+
export function clientMatches(onDisk, fresh) {
|
|
155
|
+
const hash = readFilterClientContentHash(onDisk);
|
|
156
|
+
const expected = readFilterClientContentHash(fresh);
|
|
157
|
+
if (hash !== null && expected !== null)
|
|
158
|
+
return hash === expected;
|
|
159
|
+
const withoutHash = (code) => code
|
|
160
|
+
.split('\n')
|
|
161
|
+
.filter((line) => !line.trimStart().startsWith(CONTENT_HASH_PREFIX))
|
|
162
|
+
.join('\n');
|
|
163
|
+
return codeShape(withoutHash(onDisk)) === codeShape(withoutHash(fresh));
|
|
164
|
+
}
|
|
72
165
|
async function readOrNull(path) {
|
|
73
166
|
try {
|
|
74
167
|
return await readFile(path, 'utf8');
|
|
@@ -77,6 +170,56 @@ async function readOrNull(path) {
|
|
|
77
170
|
return null;
|
|
78
171
|
}
|
|
79
172
|
}
|
|
173
|
+
async function clientFilesIn(dir) {
|
|
174
|
+
try {
|
|
175
|
+
return (await readdir(dir)).filter((file) => CLIENT_FILE.test(file)).sort();
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
return [];
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Compare the clients in `dir` (shown as `label`) with a fresh generation of the manifest.
|
|
183
|
+
* `command` is the `make:filter-client` invocation that rewrites that directory.
|
|
184
|
+
*/
|
|
185
|
+
async function compareClients(manifest, dir, label, onDisk, command = 'node ace make:filter-client') {
|
|
186
|
+
let generated;
|
|
187
|
+
try {
|
|
188
|
+
generated = generateFilterClients(manifest);
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
return {
|
|
192
|
+
status: 'error',
|
|
193
|
+
message: `a spec cannot generate its client: ${error instanceof Error ? error.message : String(error)}`,
|
|
194
|
+
docs: `${DOCS}/codegen`,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
const stale = [];
|
|
198
|
+
const missing = [];
|
|
199
|
+
for (const client of generated) {
|
|
200
|
+
const current = await readOrNull(join(dir, client.filename));
|
|
201
|
+
if (current === null)
|
|
202
|
+
missing.push(client.filename);
|
|
203
|
+
else if (!clientMatches(current, client.code))
|
|
204
|
+
stale.push(client.filename);
|
|
205
|
+
}
|
|
206
|
+
const expected = new Set(generated.map((client) => client.filename));
|
|
207
|
+
const orphaned = onDisk.filter((file) => !expected.has(file));
|
|
208
|
+
const problems = [
|
|
209
|
+
...(stale.length > 0 ? [`out of date: ${stale.join(', ')}`] : []),
|
|
210
|
+
...(missing.length > 0 ? [`missing: ${missing.join(', ')}`] : []),
|
|
211
|
+
...(orphaned.length > 0 ? [`no longer in the manifest: ${orphaned.join(', ')}`] : []),
|
|
212
|
+
];
|
|
213
|
+
if (problems.length === 0) {
|
|
214
|
+
return { status: 'ok', message: `the clients in ${label} match the manifest` };
|
|
215
|
+
}
|
|
216
|
+
return {
|
|
217
|
+
status: 'warn',
|
|
218
|
+
message: `the generated clients in ${label} do not match config/filter.ts (${problems.join('; ')})`,
|
|
219
|
+
fix: `Run \`${command}\`${orphaned.length > 0 ? ' and delete the files no longer in the manifest' : ''}`,
|
|
220
|
+
docs: `${DOCS}/codegen`,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
80
223
|
/** The doctor checks of `@adonis-agora/filter` (ids frozen for 1.x). */
|
|
81
224
|
export function filterDoctorChecks() {
|
|
82
225
|
return [
|
|
@@ -113,58 +256,41 @@ export function filterDoctorChecks() {
|
|
|
113
256
|
const results = [
|
|
114
257
|
{ status: 'ok', message: `${names.length} spec(s): ${names.sort().join(', ')}` },
|
|
115
258
|
];
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
catch {
|
|
259
|
+
const output = load.output;
|
|
260
|
+
const dir = isAbsolute(output.path) ? output.path : app.makePath(output.path);
|
|
261
|
+
const inOutput = await clientFilesIn(dir);
|
|
262
|
+
if (inOutput.length > 0) {
|
|
263
|
+
results.push(await compareClients(load.manifest, dir, output.path, inOutput));
|
|
122
264
|
return results;
|
|
123
265
|
}
|
|
124
|
-
if (
|
|
125
|
-
return results;
|
|
126
|
-
let generated;
|
|
127
|
-
try {
|
|
128
|
-
generated = generateFilterClients(load.manifest);
|
|
129
|
-
}
|
|
130
|
-
catch (error) {
|
|
266
|
+
if (output.configured) {
|
|
131
267
|
results.push({
|
|
132
|
-
status: '
|
|
133
|
-
message: `
|
|
268
|
+
status: 'warn',
|
|
269
|
+
message: `codegen.output is ${output.path}, but it has no generated clients`,
|
|
270
|
+
fix: 'Run `node ace make:filter-client`',
|
|
134
271
|
docs: `${DOCS}/codegen`,
|
|
135
272
|
});
|
|
136
273
|
return results;
|
|
137
274
|
}
|
|
138
|
-
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
const current = await readOrNull(join(dir, client.filename));
|
|
142
|
-
if (current === null)
|
|
143
|
-
missing.push(client.filename);
|
|
144
|
-
else if (codeShape(current) !== codeShape(client.code))
|
|
145
|
-
stale.push(client.filename);
|
|
146
|
-
}
|
|
147
|
-
const expected = new Set(generated.map((client) => client.filename));
|
|
148
|
-
const orphaned = onDisk.filter((file) => !expected.has(file));
|
|
149
|
-
const problems = [
|
|
150
|
-
...(stale.length > 0 ? [`out of date: ${stale.join(', ')}`] : []),
|
|
151
|
-
...(missing.length > 0 ? [`missing: ${missing.join(', ')}`] : []),
|
|
152
|
-
...(orphaned.length > 0 ? [`no longer in the manifest: ${orphaned.join(', ')}`] : []),
|
|
153
|
-
];
|
|
154
|
-
if (problems.length === 0) {
|
|
275
|
+
// Generated somewhere else with `--output` and no `codegen.output` to say where.
|
|
276
|
+
const elsewhere = await findClientDirs(app.makePath(), dir);
|
|
277
|
+
if (elsewhere.length === 0) {
|
|
155
278
|
results.push({
|
|
156
|
-
status: '
|
|
157
|
-
message: `
|
|
279
|
+
status: 'skip',
|
|
280
|
+
message: `no generated clients in ${output.path} (or elsewhere in the app); set codegen.output in config/filter.ts if they live somewhere else`,
|
|
158
281
|
});
|
|
282
|
+
return results;
|
|
159
283
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
message: `the generated clients in ${DEFAULT_CLIENT_OUTPUT} do not match config/filter.ts (${problems.join('; ')})`,
|
|
164
|
-
fix: `Run \`node ace make:filter-client\`${orphaned.length > 0 ? ' and delete the files no longer in the manifest' : ''}`,
|
|
165
|
-
docs: `${DOCS}/codegen`,
|
|
166
|
-
});
|
|
284
|
+
for (const found of elsewhere) {
|
|
285
|
+
const foundDir = app.makePath(found);
|
|
286
|
+
results.push(await compareClients(load.manifest, foundDir, found, await clientFilesIn(foundDir), `node ace make:filter-client --output ${found}`));
|
|
167
287
|
}
|
|
288
|
+
results.push({
|
|
289
|
+
status: 'warn',
|
|
290
|
+
message: `generated clients are in ${elsewhere.join(', ')}, but config/filter.ts sets no codegen.output (default ${DEFAULT_CLIENT_OUTPUT})`,
|
|
291
|
+
fix: `Set \`codegen: { output: '${elsewhere[0]}' }\` in config/filter.ts`,
|
|
292
|
+
docs: `${DOCS}/codegen`,
|
|
293
|
+
});
|
|
168
294
|
return results;
|
|
169
295
|
},
|
|
170
296
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../src/doctor/checks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../src/doctor/checks.ts"],"names":[],"mappings":"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"}
|
|
@@ -72,6 +72,18 @@ export declare function sortableFieldPaths(spec: FilterSpec, maxDepth?: number):
|
|
|
72
72
|
* factory returning a type-safe builder scoped to this spec.
|
|
73
73
|
*/
|
|
74
74
|
export declare function generateFilterClient(spec: FilterSpec, options: GenerateFilterClientOptions): string;
|
|
75
|
+
/** The first banner line of a generated client; how `agora:doctor` tells clients apart from app code. */
|
|
76
|
+
export declare const FILTER_CLIENT_BANNER = "// Code generated by @adonis-agora/filter. DO NOT EDIT.";
|
|
77
|
+
/**
|
|
78
|
+
* The banner line carrying the hash of what the generator emitted. A formatter (prettier, biome,
|
|
79
|
+
* eslint --fix) rewrites the code but leaves line comments alone, so `agora:doctor` compares this
|
|
80
|
+
* hash against a fresh generation instead of comparing code that may have been reformatted.
|
|
81
|
+
*/
|
|
82
|
+
export declare const CONTENT_HASH_PREFIX = "// Content hash: ";
|
|
83
|
+
/** The hash stamped in the banner: sha256 (hex, first 16 chars) of the generated body. */
|
|
84
|
+
export declare function filterClientContentHash(body: string): string;
|
|
85
|
+
/** The content hash in a generated client's banner, or `null` (no banner, or an older client). */
|
|
86
|
+
export declare function readFilterClientContentHash(code: string): string | null;
|
|
75
87
|
/**
|
|
76
88
|
* One entry in a {@link FilterClientManifest}: a declared spec plus the optional
|
|
77
89
|
* type info / codegen overrides the emitter needs. This is what an app exports
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate_client.d.ts","sourceRoot":"","sources":["../../src/generate_client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate_client.d.ts","sourceRoot":"","sources":["../../src/generate_client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAgB,MAAM,kBAAkB,CAAC;AAEjE;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,wFAAwF;IACxF,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,kGAAkG;IAClG,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1C,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,gDAAgD;AAChD,MAAM,WAAW,2BAA2B;IAC1C;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACjD,wFAAwF;IACxF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+FAA+F;IAC/F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,SAAgB,GAAG,MAAM,EAAE,CAEzF;AAED,4FAA4F;AAC5F,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,SAAgB,GAAG,MAAM,EAAE,CAEvF;AA0FD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,2BAA2B,GACnC,MAAM,CAsFR;AAED,yGAAyG;AACzG,eAAO,MAAM,oBAAoB,4DAA4D,CAAC;AAE9F;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,sBAAsB,CAAC;AAEvD,0FAA0F;AAC1F,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,kGAAkG;AAClG,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUvE;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,IAAI,EAAE,UAAU,CAAC;IACjB,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACjD,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qFAAqF;AACrF,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAErE,8FAA8F;AAC9F,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,qBAAqB,EAAE,CAW7F"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
1
2
|
/** Enumerate the filterable field paths a spec admits, capped at `maxDepth` relation hops. */
|
|
2
3
|
export function filterableFieldPaths(spec, maxDepth = spec.maxDepth) {
|
|
3
4
|
return collectPaths(spec, 'filterable', maxDepth);
|
|
@@ -118,9 +119,6 @@ export function generateFilterClient(spec, options) {
|
|
|
118
119
|
const fieldsTypeName = `${pascal}FilterFields`;
|
|
119
120
|
const typeArgs = hasTypes ? `${fieldsTypeName}, ${typesTypeName}` : fieldsTypeName;
|
|
120
121
|
const lines = [];
|
|
121
|
-
if (options.banner ?? true) {
|
|
122
|
-
lines.push('// Code generated by @adonis-agora/filter. DO NOT EDIT.', `// Source: filter spec "${options.name}".`, '');
|
|
123
|
-
}
|
|
124
122
|
lines.push(`import { filterQueryTyped as _filterQueryTyped } from '${clientModule}';`, '', `/** Filterable field paths for \`${options.name}\` — the client's field-name allow-list. */`, `export type ${fieldsTypeName} = ${fieldsUnion};`, '');
|
|
125
123
|
if (hasTypes) {
|
|
126
124
|
lines.push(`/** Per-field value types for \`${options.name}\` (drives operator narrowing). */`);
|
|
@@ -141,7 +139,40 @@ export function generateFilterClient(spec, options) {
|
|
|
141
139
|
lines.push(`/** Runtime filter metadata for \`${options.name}\`. */`, `export const ${camel}FilterMeta = {`, ` fields: [${fields.map((f) => JSON.stringify(f)).join(', ')}],`, ` sortable: [${sortable.map((f) => JSON.stringify(f)).join(', ')}],`, ` searchable: [${spec.searchable.map((f) => JSON.stringify(f)).join(', ')}],`, ` relations: [${relations.map((r) => JSON.stringify(r)).join(', ')}],`, ` types: ${typesMeta},`, ` defaultSort: [${spec.defaultSort
|
|
142
140
|
.map((s) => `{ field: ${JSON.stringify(s.field)}, direction: ${JSON.stringify(s.direction)} }`)
|
|
143
141
|
.join(', ')}],`, ` cursorKeyset: [${cursorKeyset.map((f) => JSON.stringify(f)).join(', ')}],`, ` defaultSize: ${spec.defaultSize ?? 'undefined'},`, ` maxSize: ${spec.maxSize ?? 'undefined'},`, '} as const;', '', `/** A type-safe filter-query builder scoped to \`${options.name}\`'s filterable fields. */`, `export function ${camel}FilterQuery() {`, ` return _filterQueryTyped<${typeArgs}>();`, '}', '');
|
|
144
|
-
|
|
142
|
+
const body = lines.join('\n');
|
|
143
|
+
if (!(options.banner ?? true))
|
|
144
|
+
return body;
|
|
145
|
+
return [
|
|
146
|
+
FILTER_CLIENT_BANNER,
|
|
147
|
+
`// Source: filter spec "${options.name}".`,
|
|
148
|
+
`${CONTENT_HASH_PREFIX}${filterClientContentHash(body)}`,
|
|
149
|
+
'',
|
|
150
|
+
body,
|
|
151
|
+
].join('\n');
|
|
152
|
+
}
|
|
153
|
+
/** The first banner line of a generated client; how `agora:doctor` tells clients apart from app code. */
|
|
154
|
+
export const FILTER_CLIENT_BANNER = '// Code generated by @adonis-agora/filter. DO NOT EDIT.';
|
|
155
|
+
/**
|
|
156
|
+
* The banner line carrying the hash of what the generator emitted. A formatter (prettier, biome,
|
|
157
|
+
* eslint --fix) rewrites the code but leaves line comments alone, so `agora:doctor` compares this
|
|
158
|
+
* hash against a fresh generation instead of comparing code that may have been reformatted.
|
|
159
|
+
*/
|
|
160
|
+
export const CONTENT_HASH_PREFIX = '// Content hash: ';
|
|
161
|
+
/** The hash stamped in the banner: sha256 (hex, first 16 chars) of the generated body. */
|
|
162
|
+
export function filterClientContentHash(body) {
|
|
163
|
+
return `sha256:${createHash('sha256').update(body).digest('hex').slice(0, 16)}`;
|
|
164
|
+
}
|
|
165
|
+
/** The content hash in a generated client's banner, or `null` (no banner, or an older client). */
|
|
166
|
+
export function readFilterClientContentHash(code) {
|
|
167
|
+
// The whole file (clients are small): a license header or blank lines a formatter adds above the
|
|
168
|
+
// banner must not hide the hash.
|
|
169
|
+
for (const line of code.split('\n')) {
|
|
170
|
+
const trimmed = line.trim();
|
|
171
|
+
if (trimmed.startsWith(CONTENT_HASH_PREFIX)) {
|
|
172
|
+
return trimmed.slice(CONTENT_HASH_PREFIX.length).trim() || null;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return null;
|
|
145
176
|
}
|
|
146
177
|
/**
|
|
147
178
|
* Expand a whole {@link FilterClientManifest} into per-spec generated modules —
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate_client.js","sourceRoot":"","sources":["../../src/generate_client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate_client.js","sourceRoot":"","sources":["../../src/generate_client.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Keep in sync with this package's `version` in package.json. */
|
|
2
|
-
export declare const VERSION = "1.0.0-rc.
|
|
2
|
+
export declare const VERSION = "1.0.0-rc.4";
|
|
3
3
|
/**
|
|
4
4
|
* The hook `node ace add @adonis-agora/filter` runs: ace looks for `configure` on the package's
|
|
5
5
|
* main entry. It registers the provider and the commands barrel in `adonisrc.ts`.
|
|
@@ -37,7 +37,7 @@ export { groupByCountFromRequest } from './group_by_count.js';
|
|
|
37
37
|
export { applyColumnFilters, applyComputedField, applyComputedSort, applyDistinct, applyFullTextSearch, applyGroupByCount, applyKeyset, applySearch, applySort, applyVectorSimilarity, type FullTextSearchOptions, type QueryBuilderLike, resolveComputedExpression, type VectorDistanceMetric, type VectorSimilarityOptions, } from './lucid_adapter.js';
|
|
38
38
|
export type { MacroableQueryBuilder } from './lucid_macros.js';
|
|
39
39
|
export { registerFilterMacros } from './lucid_macros.js';
|
|
40
|
-
export { DEFAULT_MANIFEST_ENTRYPOINT, loadFilterManifest, type ManifestApp, type ManifestLoad, } from './manifest.js';
|
|
40
|
+
export { type ClientOutput, DEFAULT_CLIENT_OUTPUT, DEFAULT_MANIFEST_ENTRYPOINT, type FilterCodegenConfig, loadFilterManifest, type ManifestApp, type ManifestLoad, } from './manifest.js';
|
|
41
41
|
export type { NormalizeOptions } from './normalizer.js';
|
|
42
42
|
export { normalizeInput } from './normalizer.js';
|
|
43
43
|
export type { ColumnFilter, FilterOperator, FilterOperatorAlias, FilterOperatorInput, } from './operators.js';
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Keep in sync with this package's `version` in package.json. */
|
|
2
|
-
export const VERSION = '1.0.0-rc.
|
|
2
|
+
export const VERSION = '1.0.0-rc.4';
|
|
3
3
|
/**
|
|
4
4
|
* The hook `node ace add @adonis-agora/filter` runs: ace looks for `configure` on the package's
|
|
5
5
|
* main entry. It registers the provider and the commands barrel in `adonisrc.ts`.
|
|
@@ -24,7 +24,7 @@ export { filterableFieldPaths, generateFilterClient, generateFilterClients, sort
|
|
|
24
24
|
export { groupByCountFromRequest } from './group_by_count.js';
|
|
25
25
|
export { applyColumnFilters, applyComputedField, applyComputedSort, applyDistinct, applyFullTextSearch, applyGroupByCount, applyKeyset, applySearch, applySort, applyVectorSimilarity, resolveComputedExpression, } from './lucid_adapter.js';
|
|
26
26
|
export { registerFilterMacros } from './lucid_macros.js';
|
|
27
|
-
export { DEFAULT_MANIFEST_ENTRYPOINT, loadFilterManifest, } from './manifest.js';
|
|
27
|
+
export { DEFAULT_CLIENT_OUTPUT, DEFAULT_MANIFEST_ENTRYPOINT, loadFilterManifest, } from './manifest.js';
|
|
28
28
|
export { normalizeInput } from './normalizer.js';
|
|
29
29
|
export { FILTER_OPERATORS, OPERATOR_ALIASES } from './operators.js';
|
|
30
30
|
export { parseDistinct, parseFilterRequest, parseGroupByCount, parseSort, toColumnFilters, } from './parse_request.js';
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,MAAM,CAAC,MAAM,OAAO,GAAG,YAAY,CAAC;AAEpC;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAMzD,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EACL,eAAe,EACf,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAEL,kBAAkB,GAGnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAS3B,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AASnD,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,SAAS,EACT,qBAAqB,EAGrB,yBAAyB,GAG1B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,MAAM,CAAC,MAAM,OAAO,GAAG,YAAY,CAAC;AAEpC;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAMzD,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EACL,eAAe,EACf,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAEL,kBAAkB,GAGnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAS3B,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AASnD,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,SAAS,EACT,qBAAqB,EAGrB,yBAAyB,GAG1B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAEL,qBAAqB,EACrB,2BAA2B,EAE3B,kBAAkB,GAGnB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAOjD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACT,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACnG,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAgBxD,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/src/manifest.d.ts
CHANGED
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
import type { FilterClientManifest } from './generate_client.js';
|
|
2
2
|
/** Where the app declares its `filters` manifest by default (`config/filter.ts`). */
|
|
3
3
|
export declare const DEFAULT_MANIFEST_ENTRYPOINT = "config/filter.js";
|
|
4
|
+
/** Where `make:filter-client` writes the generated clients by default, relative to the app root. */
|
|
5
|
+
export declare const DEFAULT_CLIENT_OUTPUT = "app/generated/filters";
|
|
6
|
+
/** The `codegen` options of `config/filter.ts`. */
|
|
7
|
+
export interface FilterCodegenConfig {
|
|
8
|
+
/**
|
|
9
|
+
* The directory `make:filter-client` writes the generated clients to and `agora:doctor` checks,
|
|
10
|
+
* relative to the app root (or absolute). Default `app/generated/filters`.
|
|
11
|
+
*/
|
|
12
|
+
output?: string;
|
|
13
|
+
}
|
|
14
|
+
/** Where the generated clients live, and whether `config/filter.ts` set it. */
|
|
15
|
+
export interface ClientOutput {
|
|
16
|
+
path: string;
|
|
17
|
+
configured: boolean;
|
|
18
|
+
}
|
|
4
19
|
/** The slice of the AdonisJS application {@link loadFilterManifest} reads. */
|
|
5
20
|
export interface ManifestApp {
|
|
6
21
|
makeURL(...paths: string[]): URL;
|
|
@@ -13,6 +28,8 @@ export type ManifestLoad = {
|
|
|
13
28
|
status: 'loaded';
|
|
14
29
|
manifest: FilterClientManifest;
|
|
15
30
|
entrypoint: string;
|
|
31
|
+
/** The `codegen.output` of `config/filter.ts`, or the default. */
|
|
32
|
+
output: ClientOutput;
|
|
16
33
|
} | {
|
|
17
34
|
status: 'missing';
|
|
18
35
|
entrypoint: string;
|
|
@@ -26,7 +43,9 @@ export type ManifestLoad = {
|
|
|
26
43
|
};
|
|
27
44
|
/**
|
|
28
45
|
* Load the app's `filters` manifest: the named `filters` export of `config/filter.ts`, its default
|
|
29
|
-
* export (a manifest, or `{ filters }`), then `filters` in the `filter` config. The
|
|
46
|
+
* export (a manifest, or `{ filters }`), then `filters` in the `filter` config. The clients' output
|
|
47
|
+
* directory is read the same way: a named `codegen` export, the default export's `codegen`, then
|
|
48
|
+
* `codegen` in the `filter` config. The one loader
|
|
30
49
|
* `make:filter-client`, the doctor and the dev tools share.
|
|
31
50
|
*/
|
|
32
51
|
export declare function loadFilterManifest(app: ManifestApp, entrypoint?: string): Promise<ManifestLoad>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,qFAAqF;AACrF,eAAO,MAAM,2BAA2B,qBAAqB,CAAC;AAE9D,8EAA8E;AAC9E,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IACjC,MAAM,CAAC,EAAE;QAAE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;KAAE,CAAC;CACnD;AAED,6CAA6C;AAC7C,MAAM,MAAM,YAAY,GACpB;
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,qFAAqF;AACrF,eAAO,MAAM,2BAA2B,qBAAqB,CAAC;AAE9D,oGAAoG;AACpG,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAE7D,mDAAmD;AACnD,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,+EAA+E;AAC/E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,8EAA8E;AAC9E,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IACjC,MAAM,CAAC,EAAE;QAAE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;KAAE,CAAC;CACnD;AAED,6CAA6C;AAC7C,MAAM,MAAM,YAAY,GACpB;IACE,MAAM,EAAE,QAAQ,CAAC;IACjB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,MAAM,EAAE,YAAY,CAAC;CACtB,GACD;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAgC5D;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,WAAW,EAChB,UAAU,SAA8B,GACvC,OAAO,CAAC,YAAY,CAAC,CAqCvB"}
|
package/dist/src/manifest.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/** Where the app declares its `filters` manifest by default (`config/filter.ts`). */
|
|
2
2
|
export const DEFAULT_MANIFEST_ENTRYPOINT = 'config/filter.js';
|
|
3
|
+
/** Where `make:filter-client` writes the generated clients by default, relative to the app root. */
|
|
4
|
+
export const DEFAULT_CLIENT_OUTPUT = 'app/generated/filters';
|
|
3
5
|
function isManifest(value) {
|
|
4
6
|
if (value === null || typeof value !== 'object' || Array.isArray(value))
|
|
5
7
|
return false;
|
|
@@ -17,9 +19,19 @@ function isMissingModule(error, url) {
|
|
|
17
19
|
const file = url.replace(/^file:\/\//, '').replace(/\.js$/, '');
|
|
18
20
|
return text.includes(file) || text.includes(url);
|
|
19
21
|
}
|
|
22
|
+
function configuredOutput(...candidates) {
|
|
23
|
+
for (const candidate of candidates) {
|
|
24
|
+
const output = candidate?.output;
|
|
25
|
+
if (typeof output === 'string' && output.trim() !== '')
|
|
26
|
+
return output.trim();
|
|
27
|
+
}
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
20
30
|
/**
|
|
21
31
|
* Load the app's `filters` manifest: the named `filters` export of `config/filter.ts`, its default
|
|
22
|
-
* export (a manifest, or `{ filters }`), then `filters` in the `filter` config. The
|
|
32
|
+
* export (a manifest, or `{ filters }`), then `filters` in the `filter` config. The clients' output
|
|
33
|
+
* directory is read the same way: a named `codegen` export, the default export's `codegen`, then
|
|
34
|
+
* `codegen` in the `filter` config. The one loader
|
|
23
35
|
* `make:filter-client`, the doctor and the dev tools share.
|
|
24
36
|
*/
|
|
25
37
|
export async function loadFilterManifest(app, entrypoint = DEFAULT_MANIFEST_ENTRYPOINT) {
|
|
@@ -38,10 +50,16 @@ export async function loadFilterManifest(app, entrypoint = DEFAULT_MANIFEST_ENTR
|
|
|
38
50
|
}
|
|
39
51
|
}
|
|
40
52
|
const fromConfig = app.config?.get('filter', undefined);
|
|
41
|
-
const
|
|
53
|
+
const defaultExport = mod?.default;
|
|
54
|
+
const fromDefault = defaultExport?.filters;
|
|
42
55
|
for (const candidate of [mod?.filters, mod?.default, fromDefault, fromConfig?.filters]) {
|
|
43
|
-
if (isManifest(candidate))
|
|
44
|
-
|
|
56
|
+
if (isManifest(candidate)) {
|
|
57
|
+
const configured = configuredOutput(mod?.codegen, defaultExport?.codegen, fromConfig?.codegen);
|
|
58
|
+
const output = configured === undefined
|
|
59
|
+
? { path: DEFAULT_CLIENT_OUTPUT, configured: false }
|
|
60
|
+
: { path: configured, configured: true };
|
|
61
|
+
return { status: 'loaded', manifest: candidate, entrypoint, output };
|
|
62
|
+
}
|
|
45
63
|
}
|
|
46
64
|
if (mod === undefined && fromConfig?.filters === undefined)
|
|
47
65
|
return { status: 'missing', entrypoint };
|
package/dist/src/manifest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/manifest.ts"],"names":[],"mappings":"AAEA,qFAAqF;AACrF,MAAM,CAAC,MAAM,2BAA2B,GAAG,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/manifest.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adonis-agora/filter",
|
|
3
|
-
"version": "1.0.0-rc.
|
|
3
|
+
"version": "1.0.0-rc.4",
|
|
4
4
|
"description": "Server-side query filtering/sorting/pagination for AdonisJS — Spatie-style input, a Lucid adapter, and field allow-listing. Part of the Agora ecosystem.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -70,8 +70,14 @@ node ace make:filter-client
|
|
|
70
70
|
# create app/generated/filters/people_filter_client.ts
|
|
71
71
|
```
|
|
72
72
|
|
|
73
|
-
Defaults: entrypoint `config/filter.js`, output `
|
|
74
|
-
|
|
73
|
+
Defaults: entrypoint `config/filter.js`, output `codegen.output` from
|
|
74
|
+
`config/filter.ts` (`export const codegen = { output: 'inertia/generated/filters' }`),
|
|
75
|
+
else `app/generated/filters`. `agora:doctor` compares the clients in that output;
|
|
76
|
+
without `codegen.output` it still finds clients written elsewhere by their banner,
|
|
77
|
+
checks them, and asks you to set it, and with no generated clients anywhere it
|
|
78
|
+
reports a skip naming the directory it looked in. Set `codegen.output` rather
|
|
79
|
+
than relying on `--output` alone.
|
|
80
|
+
Pass an explicit entrypoint/dir for one run with
|
|
75
81
|
`node ace make:filter-client config/filter.js --output app/generated/filters`.
|
|
76
82
|
|
|
77
83
|
## Core patterns
|