@acmekit/acmekit 2.13.40 → 2.13.41

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 (69) hide show
  1. package/dist/api/admin/views/[entity]/configurations/validators.d.ts +8 -8
  2. package/dist/commands/develop.d.ts.map +1 -1
  3. package/dist/commands/develop.js +1 -0
  4. package/dist/commands/develop.js.map +1 -1
  5. package/dist/commands/generate/crud.d.ts +8 -0
  6. package/dist/commands/generate/crud.d.ts.map +1 -0
  7. package/dist/commands/generate/crud.js +223 -0
  8. package/dist/commands/generate/crud.js.map +1 -0
  9. package/dist/commands/generate/index.d.ts +2 -0
  10. package/dist/commands/generate/index.d.ts.map +1 -0
  11. package/dist/commands/generate/index.js +10 -0
  12. package/dist/commands/generate/index.js.map +1 -0
  13. package/dist/commands/generate/job.d.ts +7 -0
  14. package/dist/commands/generate/job.d.ts.map +1 -0
  15. package/dist/commands/generate/job.js +38 -0
  16. package/dist/commands/generate/job.js.map +1 -0
  17. package/dist/commands/generate/link.d.ts +7 -0
  18. package/dist/commands/generate/link.d.ts.map +1 -0
  19. package/dist/commands/generate/link.js +63 -0
  20. package/dist/commands/generate/link.js.map +1 -0
  21. package/dist/commands/generate/module.d.ts +8 -0
  22. package/dist/commands/generate/module.d.ts.map +1 -0
  23. package/dist/commands/generate/module.js +78 -0
  24. package/dist/commands/generate/module.js.map +1 -0
  25. package/dist/commands/generate/route.d.ts +7 -0
  26. package/dist/commands/generate/route.d.ts.map +1 -0
  27. package/dist/commands/generate/route.js +54 -0
  28. package/dist/commands/generate/route.js.map +1 -0
  29. package/dist/commands/generate/subscriber.d.ts +7 -0
  30. package/dist/commands/generate/subscriber.d.ts.map +1 -0
  31. package/dist/commands/generate/subscriber.js +41 -0
  32. package/dist/commands/generate/subscriber.js.map +1 -0
  33. package/dist/commands/generate/types.d.ts +7 -0
  34. package/dist/commands/generate/types.d.ts.map +1 -0
  35. package/dist/commands/generate/types.js +243 -0
  36. package/dist/commands/generate/types.js.map +1 -0
  37. package/dist/commands/generate/utils/config-updater.d.ts +12 -0
  38. package/dist/commands/generate/utils/config-updater.d.ts.map +1 -0
  39. package/dist/commands/generate/utils/config-updater.js +37 -0
  40. package/dist/commands/generate/utils/config-updater.js.map +1 -0
  41. package/dist/commands/generate/utils/file-writer.d.ts +17 -0
  42. package/dist/commands/generate/utils/file-writer.d.ts.map +1 -0
  43. package/dist/commands/generate/utils/file-writer.js +31 -0
  44. package/dist/commands/generate/utils/file-writer.js.map +1 -0
  45. package/dist/commands/generate/utils/log.d.ts +13 -0
  46. package/dist/commands/generate/utils/log.d.ts.map +1 -0
  47. package/dist/commands/generate/utils/log.js +37 -0
  48. package/dist/commands/generate/utils/log.js.map +1 -0
  49. package/dist/commands/generate/utils/model-introspector.d.ts +22 -0
  50. package/dist/commands/generate/utils/model-introspector.d.ts.map +1 -0
  51. package/dist/commands/generate/utils/model-introspector.js +93 -0
  52. package/dist/commands/generate/utils/model-introspector.js.map +1 -0
  53. package/dist/commands/generate/utils/naming.d.ts +21 -0
  54. package/dist/commands/generate/utils/naming.d.ts.map +1 -0
  55. package/dist/commands/generate/utils/naming.js +74 -0
  56. package/dist/commands/generate/utils/naming.js.map +1 -0
  57. package/dist/commands/generate/workflow.d.ts +7 -0
  58. package/dist/commands/generate/workflow.d.ts.map +1 -0
  59. package/dist/commands/generate/workflow.js +66 -0
  60. package/dist/commands/generate/workflow.js.map +1 -0
  61. package/dist/loaders/docs.d.ts +10 -0
  62. package/dist/loaders/docs.d.ts.map +1 -0
  63. package/dist/loaders/docs.js +129 -0
  64. package/dist/loaders/docs.js.map +1 -0
  65. package/dist/loaders/index.d.ts.map +1 -1
  66. package/dist/loaders/index.js +2 -0
  67. package/dist/loaders/index.js.map +1 -1
  68. package/dist/tsconfig.tsbuildinfo +1 -1
  69. package/package.json +41 -37
@@ -359,36 +359,36 @@ export declare const AdminCreateViewConfiguration: z.ZodObject<{
359
359
  }, "strip", z.ZodTypeAny, {
360
360
  visible_columns: string[];
361
361
  column_order: string[];
362
+ search?: string | undefined;
362
363
  column_widths?: Record<string, number> | undefined;
363
364
  filters?: Record<string, any> | undefined;
364
365
  sorting?: {
365
366
  id: string;
366
367
  desc: boolean;
367
368
  } | null | undefined;
368
- search?: string | undefined;
369
369
  }, {
370
370
  visible_columns: string[];
371
371
  column_order: string[];
372
+ search?: string | undefined;
372
373
  column_widths?: Record<string, number> | undefined;
373
374
  filters?: Record<string, any> | undefined;
374
375
  sorting?: {
375
376
  id: string;
376
377
  desc: boolean;
377
378
  } | null | undefined;
378
- search?: string | undefined;
379
379
  }>;
380
380
  }, "strip", z.ZodTypeAny, {
381
381
  is_system_default: boolean;
382
382
  configuration: {
383
383
  visible_columns: string[];
384
384
  column_order: string[];
385
+ search?: string | undefined;
385
386
  column_widths?: Record<string, number> | undefined;
386
387
  filters?: Record<string, any> | undefined;
387
388
  sorting?: {
388
389
  id: string;
389
390
  desc: boolean;
390
391
  } | null | undefined;
391
- search?: string | undefined;
392
392
  };
393
393
  set_active: boolean;
394
394
  name?: string | undefined;
@@ -396,13 +396,13 @@ export declare const AdminCreateViewConfiguration: z.ZodObject<{
396
396
  configuration: {
397
397
  visible_columns: string[];
398
398
  column_order: string[];
399
+ search?: string | undefined;
399
400
  column_widths?: Record<string, number> | undefined;
400
401
  filters?: Record<string, any> | undefined;
401
402
  sorting?: {
402
403
  id: string;
403
404
  desc: boolean;
404
405
  } | null | undefined;
405
- search?: string | undefined;
406
406
  };
407
407
  name?: string | undefined;
408
408
  is_system_default?: boolean | undefined;
@@ -430,6 +430,7 @@ export declare const AdminUpdateViewConfiguration: z.ZodObject<{
430
430
  }>>>;
431
431
  search: z.ZodOptional<z.ZodString>;
432
432
  }, "strip", z.ZodTypeAny, {
433
+ search?: string | undefined;
433
434
  visible_columns?: string[] | undefined;
434
435
  column_order?: string[] | undefined;
435
436
  column_widths?: Record<string, number> | undefined;
@@ -438,8 +439,8 @@ export declare const AdminUpdateViewConfiguration: z.ZodObject<{
438
439
  id: string;
439
440
  desc: boolean;
440
441
  } | null | undefined;
441
- search?: string | undefined;
442
442
  }, {
443
+ search?: string | undefined;
443
444
  visible_columns?: string[] | undefined;
444
445
  column_order?: string[] | undefined;
445
446
  column_widths?: Record<string, number> | undefined;
@@ -448,13 +449,13 @@ export declare const AdminUpdateViewConfiguration: z.ZodObject<{
448
449
  id: string;
449
450
  desc: boolean;
450
451
  } | null | undefined;
451
- search?: string | undefined;
452
452
  }>>;
453
453
  }, "strip", z.ZodTypeAny, {
454
454
  set_active: boolean;
455
455
  name?: string | undefined;
456
456
  is_system_default?: boolean | undefined;
457
457
  configuration?: {
458
+ search?: string | undefined;
458
459
  visible_columns?: string[] | undefined;
459
460
  column_order?: string[] | undefined;
460
461
  column_widths?: Record<string, number> | undefined;
@@ -463,12 +464,12 @@ export declare const AdminUpdateViewConfiguration: z.ZodObject<{
463
464
  id: string;
464
465
  desc: boolean;
465
466
  } | null | undefined;
466
- search?: string | undefined;
467
467
  } | undefined;
468
468
  }, {
469
469
  name?: string | undefined;
470
470
  is_system_default?: boolean | undefined;
471
471
  configuration?: {
472
+ search?: string | undefined;
472
473
  visible_columns?: string[] | undefined;
473
474
  column_order?: string[] | undefined;
474
475
  column_widths?: Record<string, number> | undefined;
@@ -477,7 +478,6 @@ export declare const AdminUpdateViewConfiguration: z.ZodObject<{
477
478
  id: string;
478
479
  desc: boolean;
479
480
  } | null | undefined;
480
- search?: string | undefined;
481
481
  } | undefined;
482
482
  set_active?: boolean | undefined;
483
483
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"develop.d.ts","sourceRoot":"","sources":["../../src/commands/develop.ts"],"names":[],"mappings":"AAoBA,yBAA+B,EAAE,KAAK,EAAE,SAAS,EAAE;;;CAAA,iBA0OlD"}
1
+ {"version":3,"file":"develop.d.ts","sourceRoot":"","sources":["../../src/commands/develop.ts"],"names":[],"mappings":"AAoBA,yBAA+B,EAAE,KAAK,EAAE,SAAS,EAAE;;;CAAA,iBA2OlD"}
@@ -151,6 +151,7 @@ async function default_1({ types, directory }) {
151
151
  "static",
152
152
  "private",
153
153
  "src/admin",
154
+ "src/docs",
154
155
  ".acmekit",
155
156
  ],
156
157
  });
@@ -1 +1 @@
1
- {"version":3,"file":"develop.js","sourceRoot":"","sources":["../../src/commands/develop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"develop.js","sourceRoot":"","sources":["../../src/commands/develop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ type Options = {
2
+ entity: string;
3
+ module: string;
4
+ directory: string;
5
+ };
6
+ export default function generateCrud({ entity, module, directory, }: Options): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=crud.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crud.d.ts","sourceRoot":"","sources":["../../../src/commands/generate/crud.ts"],"names":[],"mappings":"AAcA,KAAK,OAAO,GAAG;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,wBAA8B,YAAY,CAAC,EACzC,MAAM,EACN,MAAM,EACN,SAAS,GACV,EAAE,OAAO,iBA6NT"}
@@ -0,0 +1,223 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = generateCrud;
7
+ const fs_1 = require("fs");
8
+ const path_1 = require("path");
9
+ const file_writer_1 = require("./utils/file-writer");
10
+ const naming_1 = require("./utils/naming");
11
+ const log_1 = require("./utils/log");
12
+ const types_1 = __importDefault(require("./types"));
13
+ async function generateCrud({ entity, module, directory, }) {
14
+ const moduleName = (0, naming_1.toKebabCase)(module);
15
+ const moduleDir = (0, path_1.join)(directory, "src", "modules", moduleName);
16
+ if (!(0, fs_1.existsSync)(moduleDir)) {
17
+ console.error(`Module "${moduleName}" not found at src/modules/${moduleName}/`);
18
+ process.exit(1);
19
+ }
20
+ const entityName = (0, naming_1.toPascalCase)(entity);
21
+ const entityCamel = (0, naming_1.toCamelCase)(entity);
22
+ const entitySnake = (0, naming_1.toSnakeCase)(entity);
23
+ const entityPlural = (0, naming_1.pluralize)(entityName);
24
+ const entityPluralCamel = (0, naming_1.toCamelCase)(entityPlural);
25
+ const resourcePath = (0, naming_1.toResourcePath)(entity);
26
+ // Run types generator first to ensure generated types exist
27
+ await (0, types_1.default)({ module: moduleName, directory });
28
+ const routeDir = (0, path_1.join)(directory, "src", "api", "admin", resourcePath);
29
+ const typesImportPath = `../../types/generated/${moduleName}`;
30
+ const typesImportPathFromId = `../../../types/generated/${moduleName}`;
31
+ // Collection route (GET list + POST create)
32
+ const collectionRouteContent = `import {
33
+ defineRouteConfig,
34
+ type AuthenticatedAcmeKitTypedRequest,
35
+ type AcmeKitTypedResponse,
36
+ } from "@acmekit/framework/http"
37
+ import {
38
+ ContainerRegistrationKeys,
39
+ remoteQueryObjectFromString,
40
+ } from "@acmekit/framework/utils"
41
+ import {
42
+ Create${entityName}Schema,
43
+ List${entityPlural}Params,
44
+ } from "${typesImportPath}"
45
+ import * as QueryConfig from "./query-config"
46
+
47
+ export const config = defineRouteConfig({
48
+ GET: {
49
+ query: List${entityPlural}Params,
50
+ queryConfig: QueryConfig.listTransformQueryConfig,
51
+ },
52
+ POST: {
53
+ body: Create${entityName}Schema,
54
+ },
55
+ })
56
+
57
+ export const GET = async (
58
+ req: AuthenticatedAcmeKitTypedRequest<typeof config, "GET">,
59
+ res: AcmeKitTypedResponse<typeof config, "GET">
60
+ ) => {
61
+ const remoteQuery = req.scope.resolve(
62
+ ContainerRegistrationKeys.REMOTE_QUERY
63
+ )
64
+
65
+ const query = remoteQueryObjectFromString({
66
+ entryPoint: "${entitySnake}",
67
+ variables: {
68
+ filters: req.filterableFields,
69
+ ...req.queryConfig.pagination,
70
+ },
71
+ fields: req.queryConfig.fields,
72
+ })
73
+
74
+ const { rows: ${entityPluralCamel}, metadata } = await remoteQuery(query)
75
+
76
+ res.json({
77
+ ${entityPluralCamel},
78
+ count: metadata.count,
79
+ offset: metadata.skip,
80
+ limit: metadata.take,
81
+ })
82
+ }
83
+
84
+ export const POST = async (
85
+ req: AuthenticatedAcmeKitTypedRequest<typeof config, "POST">,
86
+ res: AcmeKitTypedResponse<typeof config, "POST">
87
+ ) => {
88
+ // TODO: use a workflow or module service to create
89
+ // const result = await create${entityName}Workflow(req.scope).run({
90
+ // input: req.validatedBody,
91
+ // })
92
+
93
+ res.status(201).json({ ${entityCamel}: {} })
94
+ }
95
+ `;
96
+ // Single item route (GET retrieve + POST update + DELETE)
97
+ const itemRouteContent = `import {
98
+ defineRouteConfig,
99
+ type AuthenticatedAcmeKitTypedRequest,
100
+ type AcmeKitTypedResponse,
101
+ } from "@acmekit/framework/http"
102
+ import {
103
+ Update${entityName}Schema,
104
+ Get${entityName}Params,
105
+ } from "${typesImportPathFromId}"
106
+ import * as QueryConfig from "../query-config"
107
+ import { refetch${entityName} } from "../helpers"
108
+
109
+ export const config = defineRouteConfig({
110
+ GET: {
111
+ query: Get${entityName}Params,
112
+ queryConfig: QueryConfig.retrieveTransformQueryConfig,
113
+ },
114
+ POST: {
115
+ body: Update${entityName}Schema,
116
+ query: Get${entityName}Params,
117
+ queryConfig: QueryConfig.retrieveTransformQueryConfig,
118
+ },
119
+ DELETE: {},
120
+ })
121
+
122
+ export const GET = async (
123
+ req: AuthenticatedAcmeKitTypedRequest<typeof config, "GET">,
124
+ res: AcmeKitTypedResponse<typeof config, "GET">
125
+ ) => {
126
+ const ${entityCamel} = await refetch${entityName}(
127
+ req.params.id,
128
+ req.scope,
129
+ req.queryConfig.fields
130
+ )
131
+
132
+ res.json({ ${entityCamel} })
133
+ }
134
+
135
+ export const POST = async (
136
+ req: AuthenticatedAcmeKitTypedRequest<typeof config, "POST">,
137
+ res: AcmeKitTypedResponse<typeof config, "POST">
138
+ ) => {
139
+ // TODO: use a workflow or module service to update
140
+
141
+ const ${entityCamel} = await refetch${entityName}(
142
+ req.params.id,
143
+ req.scope,
144
+ req.queryConfig.fields
145
+ )
146
+
147
+ res.json({ ${entityCamel} })
148
+ }
149
+
150
+ export const DELETE = async (
151
+ req: AuthenticatedAcmeKitTypedRequest<typeof config, "DELETE">,
152
+ res: AcmeKitTypedResponse<typeof config, "DELETE">
153
+ ) => {
154
+ const { id } = req.params
155
+
156
+ // TODO: use a workflow or module service to delete
157
+
158
+ res.status(200).json({ id, object: "${entitySnake}", deleted: true })
159
+ }
160
+ `;
161
+ // Query config
162
+ const queryConfigContent = `import { default${entityName}Fields } from "${typesImportPath}"
163
+
164
+ export const retrieveTransformQueryConfig = {
165
+ defaults: default${entityName}Fields,
166
+ isList: false,
167
+ }
168
+
169
+ export const listTransformQueryConfig = {
170
+ ...retrieveTransformQueryConfig,
171
+ isList: true,
172
+ }
173
+ `;
174
+ // Helpers
175
+ const helpersContent = `import {
176
+ ContainerRegistrationKeys,
177
+ remoteQueryObjectFromString,
178
+ } from "@acmekit/framework/utils"
179
+
180
+ export const refetch${entityName} = async (
181
+ id: string,
182
+ scope: any,
183
+ fields: string[]
184
+ ) => {
185
+ const remoteQuery = scope.resolve(
186
+ ContainerRegistrationKeys.REMOTE_QUERY
187
+ )
188
+
189
+ const query = remoteQueryObjectFromString({
190
+ entryPoint: "${entitySnake}",
191
+ variables: { filters: { id } },
192
+ fields,
193
+ })
194
+
195
+ const { rows } = await remoteQuery(query)
196
+ return rows[0]
197
+ }
198
+ `;
199
+ const result = (0, file_writer_1.writeFiles)([
200
+ { path: (0, path_1.join)(routeDir, "route.ts"), content: collectionRouteContent },
201
+ {
202
+ path: (0, path_1.join)(routeDir, "[id]", "route.ts"),
203
+ content: itemRouteContent,
204
+ },
205
+ {
206
+ path: (0, path_1.join)(routeDir, "query-config.ts"),
207
+ content: queryConfigContent,
208
+ },
209
+ { path: (0, path_1.join)(routeDir, "helpers.ts"), content: helpersContent },
210
+ ]);
211
+ (0, log_1.printSummary)({
212
+ type: "crud",
213
+ name: entityName,
214
+ ...result,
215
+ nextSteps: [
216
+ `Implement create/update/delete workflows for ${entityName}`,
217
+ `Routes available at /admin/${resourcePath} and /admin/${resourcePath}/:id`,
218
+ `Re-run \`npx acmekit generate types ${moduleName}\` after model changes`,
219
+ ],
220
+ directory,
221
+ });
222
+ }
223
+ //# sourceMappingURL=crud.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crud.js","sourceRoot":"","sources":["../../../src/commands/generate/crud.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export default function (_args: Record<string, unknown>): Promise<void>;
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/generate/index.ts"],"names":[],"mappings":"AAGA,yBAA+B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,iBAE5D"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = default_1;
4
+ // This file exists so that resolveCwd("@acmekit/acmekit/commands/generate") resolves.
5
+ // Individual generators are at generate/module, generate/workflow, etc.
6
+ // The yargs subcommand routing handles dispatch.
7
+ async function default_1(_args) {
8
+ // yargs .demandCommand(1) prevents reaching here
9
+ }
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/generate/index.ts"],"names":[],"mappings":";;AAGA,4BAEC;AALD,sFAAsF;AACtF,wEAAwE;AACxE,iDAAiD;AAClC,KAAK,oBAAW,KAA8B;IAC3D,iDAAiD;AACnD,CAAC"}
@@ -0,0 +1,7 @@
1
+ type Options = {
2
+ name: string;
3
+ directory: string;
4
+ };
5
+ export default function generateJob({ name, directory }: Options): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=job.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../../../src/commands/generate/job.ts"],"names":[],"mappings":"AAKA,KAAK,OAAO,GAAG;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,wBAA8B,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,iBAiCrE"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = generateJob;
4
+ const path_1 = require("path");
5
+ const file_writer_1 = require("./utils/file-writer");
6
+ const naming_1 = require("./utils/naming");
7
+ const log_1 = require("./utils/log");
8
+ async function generateJob({ name, directory }) {
9
+ const kebabName = (0, naming_1.toKebabCase)(name);
10
+ const camelName = (0, naming_1.toCamelCase)(name);
11
+ const filePath = (0, path_1.join)(directory, "src", "jobs", `${kebabName}.ts`);
12
+ const content = `import type { AcmeKitContainer } from "@acmekit/framework/types"
13
+
14
+ export default async function ${camelName}Handler(
15
+ container: AcmeKitContainer
16
+ ) {
17
+ // TODO: implement job logic
18
+ console.log("Running job: ${kebabName}")
19
+ }
20
+
21
+ export const config = {
22
+ name: "${kebabName}",
23
+ schedule: "0 * * * *", // Every hour
24
+ }
25
+ `;
26
+ const result = (0, file_writer_1.writeFiles)([{ path: filePath, content }]);
27
+ (0, log_1.printSummary)({
28
+ type: "job",
29
+ name: kebabName,
30
+ ...result,
31
+ nextSteps: [
32
+ `Update the cron schedule in src/jobs/${kebabName}.ts`,
33
+ "Add your job logic in the handler function",
34
+ ],
35
+ directory,
36
+ });
37
+ }
38
+ //# sourceMappingURL=job.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job.js","sourceRoot":"","sources":["../../../src/commands/generate/job.ts"],"names":[],"mappings":";;AAUA,8BAiCC;AA3CD,+BAA2B;AAC3B,qDAAgD;AAChD,2CAAyD;AACzD,qCAA0C;AAO3B,KAAK,UAAU,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAW;IACpE,MAAM,SAAS,GAAG,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAA;IACnC,MAAM,SAAS,GAAG,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAA;IAEnC,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,KAAK,CAAC,CAAA;IAElE,MAAM,OAAO,GAAG;;gCAEc,SAAS;;;;8BAIX,SAAS;;;;WAI5B,SAAS;;;CAGnB,CAAA;IAEC,MAAM,MAAM,GAAG,IAAA,wBAAU,EAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;IAExD,IAAA,kBAAY,EAAC;QACX,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,SAAS;QACf,GAAG,MAAM;QACT,SAAS,EAAE;YACT,wCAAwC,SAAS,KAAK;YACtD,4CAA4C;SAC7C;QACD,SAAS;KACV,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ type Options = {
2
+ args: string[];
3
+ directory: string;
4
+ };
5
+ export default function generateLink({ args, directory }: Options): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../src/commands/generate/link.ts"],"names":[],"mappings":"AAMA,KAAK,OAAO,GAAG;IACb,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,wBAA8B,YAAY,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,iBA0EtE"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = generateLink;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const file_writer_1 = require("./utils/file-writer");
7
+ const naming_1 = require("./utils/naming");
8
+ const log_1 = require("./utils/log");
9
+ async function generateLink({ args, directory }) {
10
+ if (!args || args.length < 2) {
11
+ console.error("Please provide two module.entity pairs (e.g., blog.post user.user)");
12
+ process.exit(1);
13
+ }
14
+ const [left, right] = args;
15
+ const leftParts = left.split(".");
16
+ const rightParts = right.split(".");
17
+ if (leftParts.length !== 2 || rightParts.length !== 2) {
18
+ console.error("Each argument must be in module.entity format (e.g., blog.post)");
19
+ process.exit(1);
20
+ }
21
+ const [leftModule, leftEntity] = leftParts;
22
+ const [rightModule, rightEntity] = rightParts;
23
+ const leftModuleName = (0, naming_1.toKebabCase)(leftModule);
24
+ const rightModuleName = (0, naming_1.toKebabCase)(rightModule);
25
+ const leftEntityName = (0, naming_1.toKebabCase)(leftEntity);
26
+ const rightEntityName = (0, naming_1.toKebabCase)(rightEntity);
27
+ const leftModulePascal = (0, naming_1.toPascalCase)(leftModule);
28
+ const rightModulePascal = (0, naming_1.toPascalCase)(rightModule);
29
+ // Validate modules exist
30
+ const leftModuleDir = (0, path_1.join)(directory, "src", "modules", leftModuleName);
31
+ const rightModuleDir = (0, path_1.join)(directory, "src", "modules", rightModuleName);
32
+ if (!(0, fs_1.existsSync)(leftModuleDir)) {
33
+ console.error(`Module "${leftModuleName}" not found at src/modules/${leftModuleName}/`);
34
+ process.exit(1);
35
+ }
36
+ if (!(0, fs_1.existsSync)(rightModuleDir)) {
37
+ console.error(`Module "${rightModuleName}" not found at src/modules/${rightModuleName}/`);
38
+ process.exit(1);
39
+ }
40
+ const linkFileName = `${leftModuleName}-${leftEntityName}-${rightModuleName}-${rightEntityName}`;
41
+ const filePath = (0, path_1.join)(directory, "src", "links", `${linkFileName}.ts`);
42
+ const content = `import ${leftModulePascal}Module from "../modules/${leftModuleName}"
43
+ import ${rightModulePascal}Module from "../modules/${rightModuleName}"
44
+ import { defineLink } from "@acmekit/framework/utils"
45
+
46
+ export default defineLink(
47
+ ${leftModulePascal}Module.linkable.${leftEntityName},
48
+ ${rightModulePascal}Module.linkable.${rightEntityName}
49
+ )
50
+ `;
51
+ const result = (0, file_writer_1.writeFiles)([{ path: filePath, content }]);
52
+ (0, log_1.printSummary)({
53
+ type: "link",
54
+ name: `${left} ↔ ${right}`,
55
+ ...result,
56
+ nextSteps: [
57
+ "Generate a migration: npx acmekit db:generate",
58
+ "Run the migration: npx acmekit db:migrate",
59
+ ],
60
+ directory,
61
+ });
62
+ }
63
+ //# sourceMappingURL=link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.js","sourceRoot":"","sources":["../../../src/commands/generate/link.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ type Options = {
2
+ name: string;
3
+ entity?: string;
4
+ directory: string;
5
+ };
6
+ export default function generateModule({ name, entity, directory, }: Options): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/commands/generate/module.ts"],"names":[],"mappings":"AAMA,KAAK,OAAO,GAAG;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,wBAA8B,cAAc,CAAC,EAC3C,IAAI,EACJ,MAAM,EACN,SAAS,GACV,EAAE,OAAO,iBA+ET"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = generateModule;
4
+ const path_1 = require("path");
5
+ const file_writer_1 = require("./utils/file-writer");
6
+ const config_updater_1 = require("./utils/config-updater");
7
+ const naming_1 = require("./utils/naming");
8
+ const log_1 = require("./utils/log");
9
+ async function generateModule({ name, entity, directory, }) {
10
+ const moduleName = (0, naming_1.toKebabCase)(name);
11
+ const moduleKey = (0, naming_1.toSnakeCase)(name);
12
+ const moduleConst = moduleKey.toUpperCase() + "_MODULE";
13
+ const pascalModule = (0, naming_1.toPascalCase)(name);
14
+ const entityName = entity ? (0, naming_1.toPascalCase)(entity) : (0, naming_1.toPascalCase)(name);
15
+ const entityFile = (0, naming_1.toKebabCase)(entityName);
16
+ const serviceName = `${pascalModule}ModuleService`;
17
+ const moduleDir = (0, path_1.join)(directory, "src", "modules", moduleName);
18
+ const modelContent = `import { model } from "@acmekit/framework/utils"
19
+
20
+ const ${entityName} = model.define("${entityName}", {
21
+ id: model.id().primaryKey(),
22
+ // TODO: add fields
23
+ // name: model.text(),
24
+ // description: model.text().nullable(),
25
+ // metadata: model.json().nullable(),
26
+ })
27
+
28
+ export default ${entityName}
29
+ `;
30
+ const modelsIndexContent = `export { default as ${entityName} } from "./${entityFile}"
31
+ `;
32
+ const serviceContent = `import { AcmeKitService } from "@acmekit/framework/utils"
33
+ import { ${entityName} } from "./models"
34
+
35
+ class ${serviceName} extends AcmeKitService({ ${entityName} }) {}
36
+
37
+ export default ${serviceName}
38
+ `;
39
+ const indexContent = `import { Module } from "@acmekit/framework/utils"
40
+ import ${serviceName} from "./service"
41
+
42
+ export const ${moduleConst} = "${moduleKey}"
43
+
44
+ export default Module(${moduleConst}, {
45
+ service: ${serviceName},
46
+ })
47
+ `;
48
+ const result = (0, file_writer_1.writeFiles)([
49
+ { path: (0, path_1.join)(moduleDir, "models", `${entityFile}.ts`), content: modelContent },
50
+ { path: (0, path_1.join)(moduleDir, "models", "index.ts"), content: modelsIndexContent },
51
+ { path: (0, path_1.join)(moduleDir, "service.ts"), content: serviceContent },
52
+ { path: (0, path_1.join)(moduleDir, "index.ts"), content: indexContent },
53
+ ]);
54
+ // Auto-update acmekit-config.ts
55
+ let configUpdated;
56
+ try {
57
+ const configResult = (0, config_updater_1.addModuleToConfig)(directory, `./src/modules/${moduleName}`);
58
+ if (configResult.updated) {
59
+ configUpdated = { path: configResult.configPath };
60
+ }
61
+ }
62
+ catch {
63
+ // Config file may not exist (e.g., in tests)
64
+ }
65
+ (0, log_1.printSummary)({
66
+ type: "module",
67
+ name: moduleName,
68
+ ...result,
69
+ configUpdated,
70
+ nextSteps: [
71
+ `Add fields to the model in src/modules/${moduleName}/models/${entityFile}.ts`,
72
+ `Generate a migration: npx acmekit db:generate ${moduleKey}`,
73
+ "Run the migration: npx acmekit db:migrate",
74
+ ],
75
+ directory,
76
+ });
77
+ }
78
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../../src/commands/generate/module.ts"],"names":[],"mappings":";;AAYA,iCAmFC;AA/FD,+BAA2B;AAC3B,qDAAgD;AAChD,2DAA0D;AAC1D,2CAAuE;AACvE,qCAA0C;AAQ3B,KAAK,UAAU,cAAc,CAAC,EAC3C,IAAI,EACJ,MAAM,EACN,SAAS,GACD;IACR,MAAM,UAAU,GAAG,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAA;IACpC,MAAM,SAAS,GAAG,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAA;IACnC,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,EAAE,GAAG,SAAS,CAAA;IACvD,MAAM,YAAY,GAAG,IAAA,qBAAY,EAAC,IAAI,CAAC,CAAA;IAEvC,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,IAAA,qBAAY,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAA,qBAAY,EAAC,IAAI,CAAC,CAAA;IACrE,MAAM,UAAU,GAAG,IAAA,oBAAW,EAAC,UAAU,CAAC,CAAA;IAC1C,MAAM,WAAW,GAAG,GAAG,YAAY,eAAe,CAAA;IAElD,MAAM,SAAS,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;IAE/D,MAAM,YAAY,GAAG;;QAEf,UAAU,oBAAoB,UAAU;;;;;;;;iBAQ/B,UAAU;CAC1B,CAAA;IAEC,MAAM,kBAAkB,GAAG,uBAAuB,UAAU,cAAc,UAAU;CACrF,CAAA;IAEC,MAAM,cAAc,GAAG;WACd,UAAU;;QAEb,WAAW,6BAA6B,UAAU;;iBAEzC,WAAW;CAC3B,CAAA;IAEC,MAAM,YAAY,GAAG;SACd,WAAW;;eAEL,WAAW,OAAO,SAAS;;wBAElB,WAAW;aACtB,WAAW;;CAEvB,CAAA;IAEC,MAAM,MAAM,GAAG,IAAA,wBAAU,EAAC;QACxB,EAAE,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,UAAU,KAAK,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE;QAC9E,EAAE,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE;QAC5E,EAAE,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,YAAY,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE;QAChE,EAAE,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE;KAC7D,CAAC,CAAA;IAEF,gCAAgC;IAChC,IAAI,aAA2C,CAAA;IAC/C,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,IAAA,kCAAiB,EACpC,SAAS,EACT,iBAAiB,UAAU,EAAE,CAC9B,CAAA;QACD,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;YACzB,aAAa,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,UAAU,EAAE,CAAA;QACnD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,6CAA6C;IAC/C,CAAC;IAED,IAAA,kBAAY,EAAC;QACX,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,UAAU;QAChB,GAAG,MAAM;QACT,aAAa;QACb,SAAS,EAAE;YACT,0CAA0C,UAAU,WAAW,UAAU,KAAK;YAC9E,iDAAiD,SAAS,EAAE;YAC5D,2CAA2C;SAC5C;QACD,SAAS;KACV,CAAC,CAAA;AACJ,CAAC"}