strapi-typed-client 1.0.8 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/cli/commands/watch.d.ts +2 -3
  2. package/dist/cli/commands/watch.d.ts.map +1 -1
  3. package/dist/cli/commands/watch.js +50 -52
  4. package/dist/cli/commands/watch.js.map +1 -1
  5. package/dist/cli/utils/api-client.d.ts +4 -0
  6. package/dist/cli/utils/api-client.d.ts.map +1 -1
  7. package/dist/cli/utils/api-client.js +15 -6
  8. package/dist/cli/utils/api-client.js.map +1 -1
  9. package/dist/core/generator/filters-generator.d.ts +2 -2
  10. package/dist/core/generator/filters-generator.d.ts.map +1 -1
  11. package/dist/core/generator/filters-generator.js +74 -51
  12. package/dist/core/generator/filters-generator.js.map +1 -1
  13. package/dist/generator/auth-api-generator.d.ts +1 -0
  14. package/dist/generator/auth-api-generator.d.ts.map +1 -1
  15. package/dist/generator/auth-api-generator.js +215 -220
  16. package/dist/generator/auth-api-generator.js.map +1 -1
  17. package/dist/generator/client-generator.d.ts +6 -1
  18. package/dist/generator/client-generator.d.ts.map +1 -1
  19. package/dist/generator/client-generator.js +471 -361
  20. package/dist/generator/client-generator.js.map +1 -1
  21. package/dist/generator/custom-api-generator.d.ts.map +1 -1
  22. package/dist/generator/custom-api-generator.js +36 -65
  23. package/dist/generator/custom-api-generator.js.map +1 -1
  24. package/dist/generator/types-generator.d.ts +16 -16
  25. package/dist/generator/types-generator.d.ts.map +1 -1
  26. package/dist/generator/types-generator.js +298 -333
  27. package/dist/generator/types-generator.js.map +1 -1
  28. package/dist/next/index.d.ts +0 -1
  29. package/dist/next/index.d.ts.map +1 -1
  30. package/dist/next/index.js +40 -34
  31. package/dist/next/index.js.map +1 -1
  32. package/dist/plugin/server/src/controllers/schema.d.ts +13 -1
  33. package/dist/plugin/server/src/controllers/schema.d.ts.map +1 -1
  34. package/dist/plugin/server/src/controllers/schema.js +48 -1
  35. package/dist/plugin/server/src/controllers/schema.js.map +1 -1
  36. package/dist/plugin/server/src/index.d.ts +1 -0
  37. package/dist/plugin/server/src/index.d.ts.map +1 -1
  38. package/dist/plugin/server/src/routes/index.d.ts.map +1 -1
  39. package/dist/plugin/server/src/routes/index.js +8 -0
  40. package/dist/plugin/server/src/routes/index.js.map +1 -1
  41. package/dist/shared/sse-client.d.ts +40 -0
  42. package/dist/shared/sse-client.d.ts.map +1 -0
  43. package/dist/shared/sse-client.js +139 -0
  44. package/dist/shared/sse-client.js.map +1 -0
  45. package/package.json +3 -2
@@ -1,15 +1,14 @@
1
1
  /**
2
- * Watch command - polls for schema changes and regenerates types
2
+ * Watch command - connects to SSE stream and regenerates types on schema changes
3
3
  */
4
4
  export interface WatchOptions {
5
5
  url?: string;
6
6
  token?: string;
7
7
  output?: string;
8
- interval?: number;
9
8
  silent?: boolean;
10
9
  }
11
10
  /**
12
- * Watch for schema changes
11
+ * Watch for schema changes via SSE
13
12
  */
14
13
  export declare function watch(options: WatchOptions): Promise<void>;
15
14
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,MAAM,WAAW,YAAY;IACzB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAmGhE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IACxC,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;CACnC,GAAG,IAAI,CAiCP"}
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,MAAM,WAAW,YAAY;IACzB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAkGhE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IACxC,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;CACnC,GAAG,IAAI,CA2BP"}
@@ -1,15 +1,15 @@
1
1
  /**
2
- * Watch command - polls for schema changes and regenerates types
2
+ * Watch command - connects to SSE stream and regenerates types on schema changes
3
3
  */
4
4
  import { createApiClient } from '../utils/api-client.js';
5
5
  import { readLocalSchemaHash, getDefaultOutputDir, } from '../utils/file-writer.js';
6
+ import { SseConnection } from '../../shared/sse-client.js';
6
7
  import { generate } from './generate.js';
7
8
  /**
8
- * Watch for schema changes
9
+ * Watch for schema changes via SSE
9
10
  */
10
11
  export async function watch(options) {
11
12
  const outputDir = options.output || getDefaultOutputDir();
12
- const interval = options.interval || 5000;
13
13
  const client = createApiClient({
14
14
  url: options.url,
15
15
  token: options.token,
@@ -21,9 +21,7 @@ export async function watch(options) {
21
21
  console.error('Make sure the Strapi server is running and the strapi-types plugin is enabled.');
22
22
  process.exit(1);
23
23
  }
24
- console.log(`Watching for schema changes (polling every ${interval / 1000}s)...`);
25
- console.log('Press Ctrl+C to stop.\n');
26
- // Initial generation
24
+ // Initial generation if no types exist
27
25
  const initialHash = readLocalSchemaHash(outputDir);
28
26
  if (!initialHash) {
29
27
  console.log('No existing types found. Generating initial types...');
@@ -35,57 +33,59 @@ export async function watch(options) {
35
33
  });
36
34
  }
37
35
  let lastHash = readLocalSchemaHash(outputDir);
38
- // Start polling
39
- const poll = async () => {
40
- try {
41
- const { hash: remoteHash } = await client.getSchemaHash();
42
- if (lastHash !== remoteHash) {
43
- console.log(`Schema change detected (${lastHash?.substring(0, 8) || 'none'} -> ${remoteHash.substring(0, 8)}...)`);
44
- console.log('Regenerating types...');
45
- const result = await generate({
46
- url: options.url,
47
- token: options.token,
48
- output: outputDir,
49
- silent: true,
50
- });
51
- if (result.success) {
52
- console.log('Types regenerated successfully.\n');
53
- lastHash = remoteHash;
36
+ let generating = false;
37
+ console.log('Watching for schema changes (SSE)...');
38
+ console.log('Press Ctrl+C to stop.\n');
39
+ const sse = new SseConnection({
40
+ url: client.sseUrl,
41
+ headers: client.getHeaders(),
42
+ async onEvent({ event, data }) {
43
+ if (event !== 'connected' || generating)
44
+ return;
45
+ try {
46
+ const { hash: remoteHash } = JSON.parse(data);
47
+ if (lastHash !== remoteHash) {
48
+ generating = true;
49
+ console.log(`Schema change detected (${lastHash?.substring(0, 8) || 'none'} -> ${remoteHash.substring(0, 8)}...)`);
50
+ console.log('Regenerating types...');
51
+ const result = await generate({
52
+ url: options.url,
53
+ token: options.token,
54
+ output: outputDir,
55
+ silent: true,
56
+ });
57
+ if (result.success) {
58
+ console.log('Types regenerated successfully.\n');
59
+ lastHash = remoteHash;
60
+ }
61
+ else {
62
+ console.error('Failed to regenerate types:', result.error);
63
+ }
64
+ generating = false;
54
65
  }
55
- else {
56
- console.error('Failed to regenerate types:', result.error);
66
+ }
67
+ catch {
68
+ generating = false;
69
+ }
70
+ },
71
+ onError(err) {
72
+ // Silence connection errors — Strapi may be restarting
73
+ if (!options.silent) {
74
+ const msg = err instanceof Error ? err.message : String(err);
75
+ if (!msg.includes('ECONNREFUSED')) {
76
+ console.error(`SSE error: ${msg}`);
57
77
  }
58
78
  }
59
- }
60
- catch {
61
- // Silently ignore connection errors during polling
62
- // The server might be restarting
63
- }
64
- };
65
- // Poll with recursive setTimeout to avoid overlapping calls
66
- let timeoutId = null;
67
- let stopping = false;
68
- const schedulePoll = () => {
69
- if (stopping)
70
- return;
71
- timeoutId = setTimeout(async () => {
72
- await poll();
73
- schedulePoll();
74
- }, interval);
75
- };
76
- await poll();
77
- schedulePoll();
79
+ },
80
+ });
81
+ sse.connect();
78
82
  // Handle graceful shutdown
79
83
  const stop = () => {
80
- stopping = true;
81
- if (timeoutId)
82
- clearTimeout(timeoutId);
84
+ console.log('\nStopping watch...');
85
+ sse.close();
83
86
  process.exit(0);
84
87
  };
85
- process.on('SIGINT', () => {
86
- console.log('\nStopping watch...');
87
- stop();
88
- });
88
+ process.on('SIGINT', stop);
89
89
  process.on('SIGTERM', stop);
90
90
  }
91
91
  /**
@@ -98,14 +98,12 @@ export function createWatchCommand(program) {
98
98
  .option('-u, --url <url>', 'Strapi API URL (default: STRAPI_URL env or http://localhost:1337)')
99
99
  .option('-t, --token <token>', 'Strapi API token (default: STRAPI_TOKEN env)')
100
100
  .option('-o, --output <path>', 'Output directory (default: node_modules/strapi-typed-client/dist)')
101
- .option('-i, --interval <ms>', 'Polling interval in milliseconds (default: 5000)', parseInt)
102
101
  .option('-s, --silent', 'Suppress regeneration messages')
103
102
  .action(async (opts) => {
104
103
  await watch({
105
104
  url: opts.url,
106
105
  token: opts.token,
107
106
  output: opts.output,
108
- interval: opts.interval,
109
107
  silent: opts.silent,
110
108
  });
111
109
  });
@@ -1 +1 @@
1
- {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,10 @@ export declare class ApiClient {
13
13
  private token?;
14
14
  private timeout;
15
15
  constructor(options: ApiClientOptions);
16
+ /** Full URL for the SSE schema-watch endpoint */
17
+ get sseUrl(): string;
18
+ /** Build request headers (auth + content-type) */
19
+ getHeaders(): Record<string, string>;
16
20
  /**
17
21
  * Fetch the full schema from Strapi
18
22
  */
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/api-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACR,cAAc,EACd,YAAY,EACf,MAAM,qCAAqC,CAAA;AAE5C,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,CAAA;AAE5C,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,qBAAa,SAAS;IAClB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,KAAK,CAAC,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAQ;gBAEX,OAAO,EAAE,gBAAgB;IAMrC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC;IAO1C;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,YAAY,CAAC;IAO5C;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAS9B;;OAEG;YACW,OAAO;CAiCxB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACrC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB,GAAG,SAAS,CAUZ"}
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/api-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACR,cAAc,EACd,YAAY,EACf,MAAM,qCAAqC,CAAA;AAE5C,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,CAAA;AAE5C,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,qBAAa,SAAS;IAClB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,KAAK,CAAC,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAQ;gBAEX,OAAO,EAAE,gBAAgB;IAMrC,iDAAiD;IACjD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,kDAAkD;IAClD,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAUpC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC;IAO1C;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,YAAY,CAAC;IAO5C;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAS9B;;OAEG;YACW,OAAO;CA0BxB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACrC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB,GAAG,SAAS,CAUZ"}
@@ -10,6 +10,20 @@ export class ApiClient {
10
10
  this.token = options.token;
11
11
  this.timeout = options.timeout || 30000;
12
12
  }
13
+ /** Full URL for the SSE schema-watch endpoint */
14
+ get sseUrl() {
15
+ return `${this.baseUrl}/api/strapi-typed-client/schema-watch`;
16
+ }
17
+ /** Build request headers (auth + content-type) */
18
+ getHeaders() {
19
+ const headers = {
20
+ 'Content-Type': 'application/json',
21
+ };
22
+ if (this.token) {
23
+ headers['Authorization'] = `Bearer ${this.token}`;
24
+ }
25
+ return headers;
26
+ }
13
27
  /**
14
28
  * Fetch the full schema from Strapi
15
29
  */
@@ -41,12 +55,7 @@ export class ApiClient {
41
55
  */
42
56
  async request(path) {
43
57
  const url = `${this.baseUrl}${path}`;
44
- const headers = {
45
- 'Content-Type': 'application/json',
46
- };
47
- if (this.token) {
48
- headers['Authorization'] = `Bearer ${this.token}`;
49
- }
58
+ const headers = this.getHeaders();
50
59
  const controller = new AbortController();
51
60
  const timeoutId = setTimeout(() => controller.abort(), this.timeout);
52
61
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/cli/utils/api-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,MAAM,OAAO,SAAS;IACV,OAAO,CAAQ;IACf,KAAK,CAAS;IACd,OAAO,CAAQ;IAEvB,YAAY,OAAyB;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QACjD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAA;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACX,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B,iCAAiC,CACpC,CAAA;QACD,OAAO,QAAQ,CAAA;IACnB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACf,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B,sCAAsC,CACzC,CAAA;QACD,OAAO,QAAQ,CAAA;IACnB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACN,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,aAAa,EAAE,CAAA;YAC1B,OAAO,IAAI,CAAA;QACf,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAA;QAChB,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,OAAO,CAAI,IAAY;QACjC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAA;QAEpC,MAAM,OAAO,GAA2B;YACpC,cAAc,EAAE,kBAAkB;SACrC,CAAA;QAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,KAAK,EAAE,CAAA;QACrD,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;QACxC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QAEpE,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAC9B,MAAM,EAAE,KAAK;gBACb,OAAO;gBACP,MAAM,EAAE,UAAU,CAAC,MAAM;aAC5B,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;gBACnC,MAAM,IAAI,KAAK,CACX,uBAAuB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,KAAK,KAAK,EAAE,CAC5E,CAAA;YACL,CAAC;YAED,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAA;QACxC,CAAC;gBAAS,CAAC;YACP,YAAY,CAAC,SAAS,CAAC,CAAA;QAC3B,CAAC;IACL,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAI/B;IACG,MAAM,OAAO,GACT,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,uBAAuB,CAAA;IACpE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAA;IAEvD,OAAO,IAAI,SAAS,CAAC;QACjB,OAAO;QACP,KAAK;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;KAC3B,CAAC,CAAA;AACN,CAAC"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/cli/utils/api-client.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import { ParsedSchema, ContentType } from '../../schema-types.js';
6
6
  /**
7
- * Generate filter utility types
7
+ * Generate filter utility types (static block)
8
8
  */
9
9
  export declare function generateFilterUtilityTypes(): string;
10
10
  /**
@@ -16,7 +16,7 @@ export declare function generateEntityFilters(ct: ContentType): string;
16
16
  */
17
17
  export declare function generateAllFilters(schema: ParsedSchema): string;
18
18
  /**
19
- * Generate typed QueryParams interface
19
+ * Generate typed QueryParams interface (static block)
20
20
  */
21
21
  export declare function generateTypedQueryParams(): string;
22
22
  //# sourceMappingURL=filters-generator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"filters-generator.d.ts","sourceRoot":"","sources":["../../../src/core/generator/filters-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAa,MAAM,uBAAuB,CAAA;AAE5E;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CA8FnD;AA0CD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,WAAW,GAAG,MAAM,CAyC7D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CA4B/D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAkCjD"}
1
+ {"version":3,"file":"filters-generator.d.ts","sourceRoot":"","sources":["../../../src/core/generator/filters-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAa,MAAM,uBAAuB,CAAA;AAE5E;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CA8FnD;AA2ED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,WAAW,GAAG,MAAM,CAa7D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAuC/D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAkCjD"}
@@ -2,8 +2,9 @@
2
2
  * Filters Generator
3
3
  * Generates type-safe filter interfaces for Strapi entities
4
4
  */
5
+ import { Project } from 'ts-morph';
5
6
  /**
6
- * Generate filter utility types
7
+ * Generate filter utility types (static block)
7
8
  */
8
9
  export function generateFilterUtilityTypes() {
9
10
  return `// ============================================
@@ -132,71 +133,93 @@ function getFilterTypeForAttribute(attr) {
132
133
  return 'any';
133
134
  }
134
135
  }
136
+ /**
137
+ * Build filter interface properties for a content type
138
+ */
139
+ function buildFilterProperties(ct) {
140
+ return [
141
+ {
142
+ name: 'id',
143
+ type: 'number | IdFilterOperators',
144
+ hasQuestionToken: true,
145
+ },
146
+ {
147
+ name: 'documentId',
148
+ type: 'string | StringFilterOperators',
149
+ hasQuestionToken: true,
150
+ },
151
+ ...ct.attributes.map(attr => ({
152
+ name: attr.name,
153
+ type: getFilterTypeForAttribute(attr),
154
+ hasQuestionToken: true,
155
+ })),
156
+ ...ct.relations.map(rel => ({
157
+ name: rel.name,
158
+ type: '{ id?: number | IdFilterOperators; documentId?: string | StringFilterOperators; [key: string]: any }',
159
+ hasQuestionToken: true,
160
+ })),
161
+ ...ct.media.map(media => ({
162
+ name: media.name,
163
+ type: '{ id?: number | IdFilterOperators; [key: string]: any }',
164
+ hasQuestionToken: true,
165
+ })),
166
+ ];
167
+ }
135
168
  /**
136
169
  * Generate filter interface for a single content type
137
170
  */
138
171
  export function generateEntityFilters(ct) {
139
- const lines = [];
140
- const filterName = `${ct.cleanName}Filters`;
141
- lines.push(`/** Type-safe filters for ${ct.cleanName} */`);
142
- lines.push(`export interface ${filterName} extends LogicalOperators<${filterName}> {`);
143
- // Add id and documentId filters
144
- lines.push(' id?: number | IdFilterOperators');
145
- lines.push(' documentId?: string | StringFilterOperators');
146
- // Add filters for each attribute
147
- for (const attr of ct.attributes) {
148
- const filterType = getFilterTypeForAttribute(attr);
149
- const optional = '?';
150
- lines.push(` ${attr.name}${optional}: ${filterType}`);
151
- }
152
- // Add filters for relations (simplified - just id filtering)
153
- for (const rel of ct.relations) {
154
- // For relations, allow filtering by id or nested filters
155
- lines.push(` ${rel.name}?: {`);
156
- lines.push(` id?: number | IdFilterOperators`);
157
- lines.push(` documentId?: string | StringFilterOperators`);
158
- lines.push(` [key: string]: any`);
159
- lines.push(` }`);
160
- }
161
- // Add filters for media (by id)
162
- for (const media of ct.media) {
163
- lines.push(` ${media.name}?: {`);
164
- lines.push(` id?: number | IdFilterOperators`);
165
- lines.push(` [key: string]: any`);
166
- lines.push(` }`);
167
- }
168
- lines.push('}');
169
- return lines.join('\n');
172
+ const project = new Project({ useInMemoryFileSystem: true });
173
+ const sf = project.createSourceFile('filters.ts');
174
+ sf.addInterface({
175
+ name: `${ct.cleanName}Filters`,
176
+ isExported: true,
177
+ extends: [`LogicalOperators<${ct.cleanName}Filters>`],
178
+ docs: [`Type-safe filters for ${ct.cleanName}`],
179
+ properties: buildFilterProperties(ct),
180
+ });
181
+ return sf.getFullText();
170
182
  }
171
183
  /**
172
184
  * Generate all filter interfaces for the schema
173
185
  */
174
186
  export function generateAllFilters(schema) {
175
- const lines = [];
176
- // Add utility types
177
- lines.push(generateFilterUtilityTypes());
178
- lines.push('');
187
+ const project = new Project({ useInMemoryFileSystem: true });
188
+ const sf = project.createSourceFile('all-filters.ts');
189
+ // Add utility types (static block)
190
+ sf.addStatements(generateFilterUtilityTypes());
179
191
  // Generate filter interface for each content type
180
192
  for (const ct of schema.contentTypes) {
181
- lines.push(generateEntityFilters(ct));
182
- lines.push('');
193
+ sf.addInterface({
194
+ name: `${ct.cleanName}Filters`,
195
+ isExported: true,
196
+ extends: [`LogicalOperators<${ct.cleanName}Filters>`],
197
+ docs: [`Type-safe filters for ${ct.cleanName}`],
198
+ properties: buildFilterProperties(ct),
199
+ });
183
200
  }
184
- // Generate union type of all filters (useful for generic functions)
201
+ // Generate union type of all filters
185
202
  const filterNames = schema.contentTypes.map(ct => `${ct.cleanName}Filters`);
186
- lines.push(`/** Union of all entity filters */`);
187
- lines.push(`export type AnyEntityFilters = ${filterNames.join(' | ')}`);
188
- lines.push('');
189
- // Generate a mapping type from entity to its filters
190
- lines.push(`/** Map from entity type to its filter type */`);
191
- lines.push(`export type EntityFiltersMap = {`);
192
- for (const ct of schema.contentTypes) {
193
- lines.push(` ${ct.cleanName}: ${ct.cleanName}Filters`);
194
- }
195
- lines.push(`}`);
196
- return lines.join('\n');
203
+ sf.addTypeAlias({
204
+ name: 'AnyEntityFilters',
205
+ isExported: true,
206
+ type: filterNames.join(' | '),
207
+ docs: ['Union of all entity filters'],
208
+ });
209
+ // Generate mapping type
210
+ sf.addInterface({
211
+ name: 'EntityFiltersMap',
212
+ isExported: true,
213
+ docs: ['Map from entity type to its filter type'],
214
+ properties: schema.contentTypes.map(ct => ({
215
+ name: ct.cleanName,
216
+ type: `${ct.cleanName}Filters`,
217
+ })),
218
+ });
219
+ return sf.getFullText();
197
220
  }
198
221
  /**
199
- * Generate typed QueryParams interface
222
+ * Generate typed QueryParams interface (static block)
200
223
  */
201
224
  export function generateTypedQueryParams() {
202
225
  return `// ============================================
@@ -1 +1 @@
1
- {"version":3,"file":"filters-generator.js","sourceRoot":"","sources":["../../../src/core/generator/filters-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,MAAM,UAAU,0BAA0B;IACtC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4FV,CAAA;AACD,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAAC,IAAe;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;IAEtB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU,CAAC;QAChB,KAAK,OAAO;YACR,OAAO,gCAAgC,CAAA;QAE3C,KAAK,SAAS,CAAC;QACf,KAAK,YAAY,CAAC;QAClB,KAAK,OAAO,CAAC;QACb,KAAK,SAAS;YACV,OAAO,gCAAgC,CAAA;QAE3C,KAAK,SAAS;YACV,OAAO,kCAAkC,CAAA;QAE7C,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU,CAAC;QAChB,KAAK,MAAM;YACP,OAAO,8BAA8B,CAAA;QAEzC,KAAK,aAAa,CAAC,CAAC,CAAC;YACjB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC7D,OAAO,IAAI,UAAU,2BAA2B,CAAA;QACpD,CAAC;QAED,KAAK,MAAM;YACP,OAAO,KAAK,CAAA,CAAC,kCAAkC;QAEnD;YACI,OAAO,KAAK,CAAA;IACpB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,EAAe;IACjD,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,SAAS,SAAS,CAAA;IAE3C,KAAK,CAAC,IAAI,CAAC,6BAA6B,EAAE,CAAC,SAAS,KAAK,CAAC,CAAA;IAC1D,KAAK,CAAC,IAAI,CACN,oBAAoB,UAAU,6BAA6B,UAAU,KAAK,CAC7E,CAAA;IAED,gCAAgC;IAChC,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAA;IAC/C,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAA;IAE3D,iCAAiC;IACjC,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAA;QAClD,MAAM,QAAQ,GAAG,GAAG,CAAA;QACpB,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG,QAAQ,KAAK,UAAU,EAAE,CAAC,CAAA;IAC1D,CAAC;IAED,6DAA6D;IAC7D,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;QAC7B,yDAAyD;QACzD,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,MAAM,CAAC,CAAA;QAC/B,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAA;QACjD,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAA;QAC7D,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;QACpC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC;IAED,gCAAgC;IAChC,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,MAAM,CAAC,CAAA;QACjC,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAA;QACjD,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;QACpC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACnD,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,oBAAoB;IACpB,KAAK,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAA;IACxC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEd,kDAAkD;IAClD,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAA;QACrC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAClB,CAAC;IAED,oEAAoE;IACpE,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,SAAS,CAAC,CAAA;IAC3E,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;IAChD,KAAK,CAAC,IAAI,CAAC,kCAAkC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACvE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEd,qDAAqD;IACrD,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;IAC5D,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;IAC9C,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC,SAAS,SAAS,CAAC,CAAA;IAC3D,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACpC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCV,CAAA;AACD,CAAC"}
1
+ {"version":3,"file":"filters-generator.js","sourceRoot":"","sources":["../../../src/core/generator/filters-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAGlC;;GAEG;AACH,MAAM,UAAU,0BAA0B;IACtC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4FV,CAAA;AACD,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAAC,IAAe;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;IAEtB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU,CAAC;QAChB,KAAK,OAAO;YACR,OAAO,gCAAgC,CAAA;QAE3C,KAAK,SAAS,CAAC;QACf,KAAK,YAAY,CAAC;QAClB,KAAK,OAAO,CAAC;QACb,KAAK,SAAS;YACV,OAAO,gCAAgC,CAAA;QAE3C,KAAK,SAAS;YACV,OAAO,kCAAkC,CAAA;QAE7C,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU,CAAC;QAChB,KAAK,MAAM;YACP,OAAO,8BAA8B,CAAA;QAEzC,KAAK,aAAa,CAAC,CAAC,CAAC;YACjB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC7D,OAAO,IAAI,UAAU,2BAA2B,CAAA;QACpD,CAAC;QAED,KAAK,MAAM;YACP,OAAO,KAAK,CAAA,CAAC,kCAAkC;QAEnD;YACI,OAAO,KAAK,CAAA;IACpB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,EAAe;IAC1C,OAAO;QACH;YACI,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,4BAA4B;YAClC,gBAAgB,EAAE,IAAI;SACzB;QACD;YACI,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,gCAAgC;YACtC,gBAAgB,EAAE,IAAI;SACzB;QACD,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,yBAAyB,CAAC,IAAI,CAAC;YACrC,gBAAgB,EAAE,IAAI;SACzB,CAAC,CAAC;QACH,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACxB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,sGAAsG;YAC5G,gBAAgB,EAAE,IAAI;SACzB,CAAC,CAAC;QACH,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,yDAAyD;YAC/D,gBAAgB,EAAE,IAAI;SACzB,CAAC,CAAC;KACN,CAAA;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,EAAe;IACjD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5D,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAA;IAEjD,EAAE,CAAC,YAAY,CAAC;QACZ,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,SAAS;QAC9B,UAAU,EAAE,IAAI;QAChB,OAAO,EAAE,CAAC,oBAAoB,EAAE,CAAC,SAAS,UAAU,CAAC;QACrD,IAAI,EAAE,CAAC,yBAAyB,EAAE,CAAC,SAAS,EAAE,CAAC;QAC/C,UAAU,EAAE,qBAAqB,CAAC,EAAE,CAAC;KACxC,CAAC,CAAA;IAEF,OAAO,EAAE,CAAC,WAAW,EAAE,CAAA;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACnD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5D,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAA;IAErD,mCAAmC;IACnC,EAAE,CAAC,aAAa,CAAC,0BAA0B,EAAE,CAAC,CAAA;IAE9C,kDAAkD;IAClD,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACnC,EAAE,CAAC,YAAY,CAAC;YACZ,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,SAAS;YAC9B,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,CAAC,oBAAoB,EAAE,CAAC,SAAS,UAAU,CAAC;YACrD,IAAI,EAAE,CAAC,yBAAyB,EAAE,CAAC,SAAS,EAAE,CAAC;YAC/C,UAAU,EAAE,qBAAqB,CAAC,EAAE,CAAC;SACxC,CAAC,CAAA;IACN,CAAC;IAED,qCAAqC;IACrC,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,SAAS,CAAC,CAAA;IAC3E,EAAE,CAAC,YAAY,CAAC;QACZ,IAAI,EAAE,kBAAkB;QACxB,UAAU,EAAE,IAAI;QAChB,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;QAC7B,IAAI,EAAE,CAAC,6BAA6B,CAAC;KACxC,CAAC,CAAA;IAEF,wBAAwB;IACxB,EAAE,CAAC,YAAY,CAAC;QACZ,IAAI,EAAE,kBAAkB;QACxB,UAAU,EAAE,IAAI;QAChB,IAAI,EAAE,CAAC,yCAAyC,CAAC;QACjD,UAAU,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACvC,IAAI,EAAE,EAAE,CAAC,SAAS;YAClB,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,SAAS;SACjC,CAAC,CAAC;KACN,CAAC,CAAA;IAEF,OAAO,EAAE,CAAC,WAAW,EAAE,CAAA;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACpC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCV,CAAA;AACD,CAAC"}
@@ -5,6 +5,7 @@ export declare class AuthApiGenerator {
5
5
  private generateHardcodedAuthApiClass;
6
6
  private generateDynamicAuthApiClass;
7
7
  private generateDynamicAuthMethod;
8
+ private getReturnType;
8
9
  private generateMeMethod;
9
10
  private generateUpdateMeMethod;
10
11
  private generateCallbackMethod;
@@ -1 +1 @@
1
- {"version":3,"file":"auth-api-generator.d.ts","sourceRoot":"","sources":["../../src/generator/auth-api-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAGxD,qBAAa,gBAAgB;IACzB,iBAAiB,IAAI,MAAM;IA+C3B,oBAAoB,CAChB,UAAU,GAAE,WAAW,EAAO,EAC9B,UAAU,GAAE,WAAW,EAAO,GAC/B,MAAM;IAYT,OAAO,CAAC,6BAA6B;IAiMrC,OAAO,CAAC,2BAA2B;IAwCnC,OAAO,CAAC,yBAAyB;IAkHjC,OAAO,CAAC,gBAAgB;IAmExB,OAAO,CAAC,sBAAsB;IA+E9B,OAAO,CAAC,sBAAsB;IAqC9B,OAAO,CAAC,wBAAwB;IA2ChC,OAAO,CAAC,0BAA0B;CAWrC"}
1
+ {"version":3,"file":"auth-api-generator.d.ts","sourceRoot":"","sources":["../../src/generator/auth-api-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAGxD,qBAAa,gBAAgB;IACzB,iBAAiB,IAAI,MAAM;IAkF3B,oBAAoB,CAChB,UAAU,GAAE,WAAW,EAAO,EAC9B,UAAU,GAAE,WAAW,EAAO,GAC/B,MAAM;IAYT,OAAO,CAAC,6BAA6B;IAiMrC,OAAO,CAAC,2BAA2B;IAgCnC,OAAO,CAAC,yBAAyB;IAoEjC,OAAO,CAAC,aAAa;IAuBrB,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,sBAAsB;IA2C9B,OAAO,CAAC,sBAAsB;IAuB9B,OAAO,CAAC,wBAAwB;IAuChC,OAAO,CAAC,0BAA0B;CAWrC"}