@acmekit/acmekit 2.13.40 → 2.13.43

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 (73) 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/docs.d.ts +7 -0
  10. package/dist/commands/generate/docs.d.ts.map +1 -0
  11. package/dist/commands/generate/docs.js +236 -0
  12. package/dist/commands/generate/docs.js.map +1 -0
  13. package/dist/commands/generate/index.d.ts +2 -0
  14. package/dist/commands/generate/index.d.ts.map +1 -0
  15. package/dist/commands/generate/index.js +10 -0
  16. package/dist/commands/generate/index.js.map +1 -0
  17. package/dist/commands/generate/job.d.ts +7 -0
  18. package/dist/commands/generate/job.d.ts.map +1 -0
  19. package/dist/commands/generate/job.js +38 -0
  20. package/dist/commands/generate/job.js.map +1 -0
  21. package/dist/commands/generate/link.d.ts +7 -0
  22. package/dist/commands/generate/link.d.ts.map +1 -0
  23. package/dist/commands/generate/link.js +63 -0
  24. package/dist/commands/generate/link.js.map +1 -0
  25. package/dist/commands/generate/module.d.ts +8 -0
  26. package/dist/commands/generate/module.d.ts.map +1 -0
  27. package/dist/commands/generate/module.js +78 -0
  28. package/dist/commands/generate/module.js.map +1 -0
  29. package/dist/commands/generate/route.d.ts +7 -0
  30. package/dist/commands/generate/route.d.ts.map +1 -0
  31. package/dist/commands/generate/route.js +54 -0
  32. package/dist/commands/generate/route.js.map +1 -0
  33. package/dist/commands/generate/subscriber.d.ts +7 -0
  34. package/dist/commands/generate/subscriber.d.ts.map +1 -0
  35. package/dist/commands/generate/subscriber.js +41 -0
  36. package/dist/commands/generate/subscriber.js.map +1 -0
  37. package/dist/commands/generate/types.d.ts +7 -0
  38. package/dist/commands/generate/types.d.ts.map +1 -0
  39. package/dist/commands/generate/types.js +243 -0
  40. package/dist/commands/generate/types.js.map +1 -0
  41. package/dist/commands/generate/utils/config-updater.d.ts +12 -0
  42. package/dist/commands/generate/utils/config-updater.d.ts.map +1 -0
  43. package/dist/commands/generate/utils/config-updater.js +38 -0
  44. package/dist/commands/generate/utils/config-updater.js.map +1 -0
  45. package/dist/commands/generate/utils/file-writer.d.ts +17 -0
  46. package/dist/commands/generate/utils/file-writer.d.ts.map +1 -0
  47. package/dist/commands/generate/utils/file-writer.js +31 -0
  48. package/dist/commands/generate/utils/file-writer.js.map +1 -0
  49. package/dist/commands/generate/utils/log.d.ts +13 -0
  50. package/dist/commands/generate/utils/log.d.ts.map +1 -0
  51. package/dist/commands/generate/utils/log.js +37 -0
  52. package/dist/commands/generate/utils/log.js.map +1 -0
  53. package/dist/commands/generate/utils/model-introspector.d.ts +22 -0
  54. package/dist/commands/generate/utils/model-introspector.d.ts.map +1 -0
  55. package/dist/commands/generate/utils/model-introspector.js +93 -0
  56. package/dist/commands/generate/utils/model-introspector.js.map +1 -0
  57. package/dist/commands/generate/utils/naming.d.ts +21 -0
  58. package/dist/commands/generate/utils/naming.d.ts.map +1 -0
  59. package/dist/commands/generate/utils/naming.js +74 -0
  60. package/dist/commands/generate/utils/naming.js.map +1 -0
  61. package/dist/commands/generate/workflow.d.ts +7 -0
  62. package/dist/commands/generate/workflow.d.ts.map +1 -0
  63. package/dist/commands/generate/workflow.js +66 -0
  64. package/dist/commands/generate/workflow.js.map +1 -0
  65. package/dist/loaders/docs.d.ts +10 -0
  66. package/dist/loaders/docs.d.ts.map +1 -0
  67. package/dist/loaders/docs.js +129 -0
  68. package/dist/loaders/docs.js.map +1 -0
  69. package/dist/loaders/index.d.ts.map +1 -1
  70. package/dist/loaders/index.js +2 -0
  71. package/dist/loaders/index.js.map +1 -1
  72. package/dist/tsconfig.tsbuildinfo +1 -1
  73. package/package.json +41 -37
@@ -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"}
@@ -0,0 +1,7 @@
1
+ type Options = {
2
+ path: string;
3
+ directory: string;
4
+ };
5
+ export default function generateRoute({ path: routePath, directory }: Options): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../src/commands/generate/route.ts"],"names":[],"mappings":"AAIA,KAAK,OAAO,GAAG;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,wBAA8B,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,OAAO,iBAmDlF"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = generateRoute;
4
+ const path_1 = require("path");
5
+ const file_writer_1 = require("./utils/file-writer");
6
+ const log_1 = require("./utils/log");
7
+ async function generateRoute({ path: routePath, directory }) {
8
+ const normalizedPath = routePath.replace(/^\/|\/$/g, "");
9
+ const filePath = (0, path_1.join)(directory, "src", "api", normalizedPath, "route.ts");
10
+ const isAdmin = normalizedPath.startsWith("admin");
11
+ const requestType = isAdmin
12
+ ? "AuthenticatedAcmeKitRequest"
13
+ : "AcmeKitRequest";
14
+ const content = `import {
15
+ defineRouteConfig,
16
+ type ${requestType},
17
+ type AcmeKitResponse,
18
+ } from "@acmekit/framework/http"
19
+
20
+ export const config = defineRouteConfig({
21
+ // GET: {},
22
+ // POST: { body: z.object({...}) },
23
+ })
24
+
25
+ export const GET = async (
26
+ req: ${requestType},
27
+ res: AcmeKitResponse
28
+ ) => {
29
+ // TODO: implement GET handler
30
+ res.json({ message: "GET /${normalizedPath}" })
31
+ }
32
+
33
+ export const POST = async (
34
+ req: ${requestType},
35
+ res: AcmeKitResponse
36
+ ) => {
37
+ // TODO: implement POST handler
38
+ res.json({ message: "POST /${normalizedPath}" })
39
+ }
40
+ `;
41
+ const result = (0, file_writer_1.writeFiles)([{ path: filePath, content }]);
42
+ (0, log_1.printSummary)({
43
+ type: "route",
44
+ name: `/${normalizedPath}`,
45
+ ...result,
46
+ nextSteps: [
47
+ `Implement route handlers in src/api/${normalizedPath}/route.ts`,
48
+ "Add validators and middleware as needed",
49
+ "Remove unused HTTP method exports",
50
+ ],
51
+ directory,
52
+ });
53
+ }
54
+ //# sourceMappingURL=route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../src/commands/generate/route.ts"],"names":[],"mappings":";;AASA,gCAmDC;AA5DD,+BAA2B;AAC3B,qDAAgD;AAChD,qCAA0C;AAO3B,KAAK,UAAU,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAW;IACjF,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;IAExD,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,CAAC,CAAA;IAE1E,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;IAClD,MAAM,WAAW,GAAG,OAAO;QACzB,CAAC,CAAC,6BAA6B;QAC/B,CAAC,CAAC,gBAAgB,CAAA;IAEpB,MAAM,OAAO,GAAG;;SAET,WAAW;;;;;;;;;;SAUX,WAAW;;;;8BAIU,cAAc;;;;SAInC,WAAW;;;;+BAIW,cAAc;;CAE5C,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,OAAO;QACb,IAAI,EAAE,IAAI,cAAc,EAAE;QAC1B,GAAG,MAAM;QACT,SAAS,EAAE;YACT,uCAAuC,cAAc,WAAW;YAChE,yCAAyC;YACzC,mCAAmC;SACpC;QACD,SAAS;KACV,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ type Options = {
2
+ name: string;
3
+ directory: string;
4
+ };
5
+ export default function generateSubscriber({ name, directory }: Options): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=subscriber.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscriber.d.ts","sourceRoot":"","sources":["../../../src/commands/generate/subscriber.ts"],"names":[],"mappings":"AAKA,KAAK,OAAO,GAAG;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,wBAA8B,kBAAkB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,iBAoC5E"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = generateSubscriber;
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 generateSubscriber({ 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", "subscribers", `${kebabName}.ts`);
12
+ const content = `import type {
13
+ SubscriberArgs,
14
+ SubscriberConfig,
15
+ } from "@acmekit/framework"
16
+
17
+ export default async function ${camelName}Handler({
18
+ event,
19
+ container,
20
+ }: SubscriberArgs) {
21
+ // TODO: implement subscriber logic
22
+ console.log(\`Received event: \${event.name}\`, event.data)
23
+ }
24
+
25
+ export const config: SubscriberConfig = {
26
+ event: "${kebabName.replace(/-/g, ".")}",
27
+ }
28
+ `;
29
+ const result = (0, file_writer_1.writeFiles)([{ path: filePath, content }]);
30
+ (0, log_1.printSummary)({
31
+ type: "subscriber",
32
+ name: kebabName,
33
+ ...result,
34
+ nextSteps: [
35
+ `Update the event name in src/subscribers/${kebabName}.ts`,
36
+ "Add your subscriber logic in the handler function",
37
+ ],
38
+ directory,
39
+ });
40
+ }
41
+ //# sourceMappingURL=subscriber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscriber.js","sourceRoot":"","sources":["../../../src/commands/generate/subscriber.ts"],"names":[],"mappings":";;AAUA,qCAoCC;AA9CD,+BAA2B;AAC3B,qDAAgD;AAChD,2CAAyD;AACzD,qCAA0C;AAO3B,KAAK,UAAU,kBAAkB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAW;IAC3E,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,aAAa,EAAE,GAAG,SAAS,KAAK,CAAC,CAAA;IAEzE,MAAM,OAAO,GAAG;;;;;gCAKc,SAAS;;;;;;;;;YAS7B,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;;CAEvC,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,YAAY;QAClB,IAAI,EAAE,SAAS;QACf,GAAG,MAAM;QACT,SAAS,EAAE;YACT,4CAA4C,SAAS,KAAK;YAC1D,mDAAmD;SACpD;QACD,SAAS;KACV,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ type Options = {
2
+ module: string;
3
+ directory: string;
4
+ };
5
+ export default function generateTypes({ module, directory }: Options): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/generate/types.ts"],"names":[],"mappings":"AAaA,KAAK,OAAO,GAAG;IACb,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,wBAA8B,aAAa,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,iBAqDzE"}
@@ -0,0 +1,243 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = generateTypes;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const file_writer_1 = require("./utils/file-writer");
7
+ const model_introspector_1 = require("./utils/model-introspector");
8
+ const naming_1 = require("./utils/naming");
9
+ const log_1 = require("./utils/log");
10
+ async function generateTypes({ module, directory }) {
11
+ const moduleName = (0, naming_1.toKebabCase)(module);
12
+ const moduleDir = (0, path_1.join)(directory, "src", "modules", moduleName);
13
+ if (!(0, fs_1.existsSync)(moduleDir)) {
14
+ console.error(`Module "${moduleName}" not found at src/modules/${moduleName}/`);
15
+ process.exit(1);
16
+ }
17
+ const modelsDir = (0, path_1.join)(moduleDir, "models");
18
+ if (!(0, fs_1.existsSync)(modelsDir)) {
19
+ console.error(`No models directory found at src/modules/${moduleName}/models/`);
20
+ process.exit(1);
21
+ }
22
+ const entities = (0, model_introspector_1.introspectModule)(directory, moduleName);
23
+ if (entities.length === 0) {
24
+ console.error(`No DML models found in src/modules/${moduleName}/models/`);
25
+ process.exit(1);
26
+ }
27
+ const content = generateTypesContent(entities);
28
+ const outputPath = (0, path_1.join)(directory, "src", "types", "generated", `${moduleName}.ts`);
29
+ const result = (0, file_writer_1.writeFiles)([{ path: outputPath, content }], { overwrite: true });
30
+ (0, log_1.printSummary)({
31
+ type: "types",
32
+ name: moduleName,
33
+ ...result,
34
+ nextSteps: [
35
+ "Import generated types in your API routes and services",
36
+ `Re-run \`npx acmekit generate types ${moduleName}\` after model changes`,
37
+ ],
38
+ directory,
39
+ });
40
+ }
41
+ function generateTypesContent(entities) {
42
+ const sections = [];
43
+ sections.push(`/**
44
+ * Auto-generated types and Zod schemas.
45
+ * Re-run \`npx acmekit generate types <module>\` to update.
46
+ * DO NOT edit manually — changes will be overwritten.
47
+ */
48
+
49
+ import { z } from "@acmekit/framework/zod"
50
+ import type { BaseFilterable } from "@acmekit/framework/types"
51
+ import {
52
+ createFindParams,
53
+ createSelectParams,
54
+ } from "../../api/utils/validators"`);
55
+ for (const entity of entities) {
56
+ sections.push(generateEntitySection(entity));
57
+ }
58
+ return sections.join("\n") + "\n";
59
+ }
60
+ function generateEntitySection(entity) {
61
+ const name = entity.name;
62
+ const lines = [];
63
+ lines.push(`
64
+ // ──────────────────────────────────────────
65
+ // ${name}
66
+ // ──────────────────────────────────────────`);
67
+ lines.push(generateDTO(entity));
68
+ lines.push(generateCreateBody(entity));
69
+ lines.push(generateUpdateBody(entity));
70
+ lines.push(generateFilterableProps(entity));
71
+ lines.push(generateZodSchemas(entity));
72
+ lines.push(generateDefaultFields(entity));
73
+ return lines.join("\n");
74
+ }
75
+ function generateDTO(entity) {
76
+ const lines = [];
77
+ lines.push("");
78
+ lines.push(`export interface ${entity.name}DTO {`);
79
+ for (const field of entity.fields) {
80
+ const tsType = (0, model_introspector_1.fieldToTsType)(field);
81
+ const nullable = field.nullable ? ` | null` : "";
82
+ lines.push(` ${field.name}: ${tsType}${nullable}`);
83
+ }
84
+ // Always include timestamps
85
+ lines.push(` created_at: Date`);
86
+ lines.push(` updated_at: Date`);
87
+ lines.push(` deleted_at: Date | null`);
88
+ lines.push(`}`);
89
+ return lines.join("\n");
90
+ }
91
+ function generateCreateBody(entity) {
92
+ const lines = [];
93
+ lines.push("");
94
+ lines.push(`export interface Create${entity.name}Body {`);
95
+ for (const field of entity.fields) {
96
+ if (isExcludedFromCreate(field)) {
97
+ continue;
98
+ }
99
+ const tsType = (0, model_introspector_1.fieldToTsType)(field);
100
+ if (field.nullable) {
101
+ lines.push(` ${field.name}?: ${tsType} | null`);
102
+ }
103
+ else {
104
+ lines.push(` ${field.name}: ${tsType}`);
105
+ }
106
+ }
107
+ lines.push(`}`);
108
+ return lines.join("\n");
109
+ }
110
+ function generateUpdateBody(entity) {
111
+ const lines = [];
112
+ lines.push("");
113
+ lines.push(`export interface Update${entity.name}Body {`);
114
+ for (const field of entity.fields) {
115
+ if (isExcludedFromUpdate(field)) {
116
+ continue;
117
+ }
118
+ const tsType = (0, model_introspector_1.fieldToTsType)(field);
119
+ if (field.nullable) {
120
+ lines.push(` ${field.name}?: ${tsType} | null`);
121
+ }
122
+ else {
123
+ lines.push(` ${field.name}?: ${tsType}`);
124
+ }
125
+ }
126
+ lines.push(`}`);
127
+ return lines.join("\n");
128
+ }
129
+ function generateFilterableProps(entity) {
130
+ const lines = [];
131
+ lines.push("");
132
+ lines.push(`export interface Filterable${entity.name}Props`);
133
+ lines.push(` extends BaseFilterable<Filterable${entity.name}Props> {`);
134
+ lines.push(` q?: string`);
135
+ for (const field of entity.fields) {
136
+ if (isFilterableField(field)) {
137
+ if (field.dataType === "enum" && field.enumChoices) {
138
+ const enumType = field.enumChoices.map((c) => `"${c}"`).join(" | ");
139
+ lines.push(` ${field.name}?: ${enumType}`);
140
+ }
141
+ else {
142
+ lines.push(` ${field.name}?: string | string[]`);
143
+ }
144
+ }
145
+ }
146
+ lines.push(`}`);
147
+ return lines.join("\n");
148
+ }
149
+ function generateZodSchemas(entity) {
150
+ const name = entity.name;
151
+ const pluralName = (0, naming_1.pluralize)(name);
152
+ const lines = [];
153
+ // Create schema
154
+ lines.push("");
155
+ lines.push(`export const Create${name}Schema = z.object({`);
156
+ for (const field of entity.fields) {
157
+ if (isExcludedFromCreate(field)) {
158
+ continue;
159
+ }
160
+ const zodType = (0, model_introspector_1.fieldToZodType)(field);
161
+ if (field.nullable) {
162
+ lines.push(` ${field.name}: ${zodType}.nullish(),`);
163
+ }
164
+ else {
165
+ lines.push(` ${field.name}: ${zodType},`);
166
+ }
167
+ }
168
+ lines.push(`})`);
169
+ // Update schema
170
+ lines.push("");
171
+ lines.push(`export const Update${name}Schema = z.object({`);
172
+ for (const field of entity.fields) {
173
+ if (isExcludedFromUpdate(field)) {
174
+ continue;
175
+ }
176
+ const zodType = (0, model_introspector_1.fieldToZodType)(field);
177
+ if (field.nullable) {
178
+ lines.push(` ${field.name}: ${zodType}.nullish(),`);
179
+ }
180
+ else {
181
+ lines.push(` ${field.name}: ${zodType}.optional(),`);
182
+ }
183
+ }
184
+ lines.push(`})`);
185
+ // Get single params
186
+ lines.push("");
187
+ lines.push(`export const Get${name}Params = createSelectParams()`);
188
+ // List params
189
+ lines.push("");
190
+ lines.push(`export const List${pluralName}Params = createFindParams({`);
191
+ lines.push(` offset: 0,`);
192
+ lines.push(` limit: 50,`);
193
+ lines.push(`}).merge(`);
194
+ lines.push(` z.object({`);
195
+ lines.push(` q: z.string().optional(),`);
196
+ for (const field of entity.fields) {
197
+ if (isFilterableField(field)) {
198
+ if (field.dataType === "enum" && field.enumChoices) {
199
+ lines.push(` ${field.name}: ${(0, model_introspector_1.fieldToZodType)(field)}.optional(),`);
200
+ }
201
+ else {
202
+ lines.push(` ${field.name}: z.union([z.string(), z.array(z.string())]).optional(),`);
203
+ }
204
+ }
205
+ }
206
+ lines.push(` })`);
207
+ lines.push(`)`);
208
+ return lines.join("\n");
209
+ }
210
+ function generateDefaultFields(entity) {
211
+ const lines = [];
212
+ lines.push("");
213
+ lines.push(`export const default${entity.name}Fields = [`);
214
+ for (const field of entity.fields) {
215
+ if (!field.computed) {
216
+ lines.push(` "${field.name}",`);
217
+ }
218
+ }
219
+ lines.push(` "created_at",`);
220
+ lines.push(` "updated_at",`);
221
+ lines.push(`]`);
222
+ return lines.join("\n");
223
+ }
224
+ // Field classification helpers
225
+ function isExcludedFromCreate(field) {
226
+ return (field.primaryKey ||
227
+ field.dataType === "id" ||
228
+ field.dataType === "serial" ||
229
+ field.dataType === "dateTime" ||
230
+ field.hasDefault);
231
+ }
232
+ function isExcludedFromUpdate(field) {
233
+ return (field.primaryKey ||
234
+ field.dataType === "id" ||
235
+ field.dataType === "serial" ||
236
+ field.dataType === "dateTime");
237
+ }
238
+ function isFilterableField(field) {
239
+ return (field.dataType === "id" ||
240
+ field.dataType === "text" ||
241
+ field.dataType === "enum");
242
+ }
243
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/commands/generate/types.ts"],"names":[],"mappings":"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"}