@malyuga/aether-cli 0.1.1

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 (147) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +117 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +119 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/check.d.ts +4 -0
  8. package/dist/commands/check.d.ts.map +1 -0
  9. package/dist/commands/check.js +45 -0
  10. package/dist/commands/check.js.map +1 -0
  11. package/dist/commands/doctor.d.ts +8 -0
  12. package/dist/commands/doctor.d.ts.map +1 -0
  13. package/dist/commands/doctor.js +62 -0
  14. package/dist/commands/doctor.js.map +1 -0
  15. package/dist/commands/generate.d.ts +15 -0
  16. package/dist/commands/generate.d.ts.map +1 -0
  17. package/dist/commands/generate.js +51 -0
  18. package/dist/commands/generate.js.map +1 -0
  19. package/dist/commands/help.d.ts +6 -0
  20. package/dist/commands/help.d.ts.map +1 -0
  21. package/dist/commands/help.js +60 -0
  22. package/dist/commands/help.js.map +1 -0
  23. package/dist/commands/init.d.ts +7 -0
  24. package/dist/commands/init.d.ts.map +1 -0
  25. package/dist/commands/init.js +24 -0
  26. package/dist/commands/init.js.map +1 -0
  27. package/dist/commands/upgrade.d.ts +5 -0
  28. package/dist/commands/upgrade.d.ts.map +1 -0
  29. package/dist/commands/upgrade.js +42 -0
  30. package/dist/commands/upgrade.js.map +1 -0
  31. package/dist/core/ast.d.ts +7 -0
  32. package/dist/core/ast.d.ts.map +1 -0
  33. package/dist/core/ast.js +90 -0
  34. package/dist/core/ast.js.map +1 -0
  35. package/dist/core/constants.d.ts +133 -0
  36. package/dist/core/constants.d.ts.map +1 -0
  37. package/dist/core/constants.js +135 -0
  38. package/dist/core/constants.js.map +1 -0
  39. package/dist/core/diff.d.ts +20 -0
  40. package/dist/core/diff.d.ts.map +1 -0
  41. package/dist/core/diff.js +39 -0
  42. package/dist/core/diff.js.map +1 -0
  43. package/dist/core/errors.d.ts +19 -0
  44. package/dist/core/errors.d.ts.map +1 -0
  45. package/dist/core/errors.js +37 -0
  46. package/dist/core/errors.js.map +1 -0
  47. package/dist/core/naming.d.ts +10 -0
  48. package/dist/core/naming.d.ts.map +1 -0
  49. package/dist/core/naming.js +50 -0
  50. package/dist/core/naming.js.map +1 -0
  51. package/dist/core/paths.d.ts +10 -0
  52. package/dist/core/paths.d.ts.map +1 -0
  53. package/dist/core/paths.js +38 -0
  54. package/dist/core/paths.js.map +1 -0
  55. package/dist/core/plan.d.ts +37 -0
  56. package/dist/core/plan.d.ts.map +1 -0
  57. package/dist/core/plan.js +126 -0
  58. package/dist/core/plan.js.map +1 -0
  59. package/dist/core/project.d.ts +16 -0
  60. package/dist/core/project.d.ts.map +1 -0
  61. package/dist/core/project.js +66 -0
  62. package/dist/core/project.js.map +1 -0
  63. package/dist/core/render.d.ts +4 -0
  64. package/dist/core/render.d.ts.map +1 -0
  65. package/dist/core/render.js +44 -0
  66. package/dist/core/render.js.map +1 -0
  67. package/dist/generators/middleware.d.ts +11 -0
  68. package/dist/generators/middleware.d.ts.map +1 -0
  69. package/dist/generators/middleware.js +41 -0
  70. package/dist/generators/middleware.js.map +1 -0
  71. package/dist/generators/openapi.d.ts +9 -0
  72. package/dist/generators/openapi.d.ts.map +1 -0
  73. package/dist/generators/openapi.js +46 -0
  74. package/dist/generators/openapi.js.map +1 -0
  75. package/dist/generators/project.d.ts +9 -0
  76. package/dist/generators/project.d.ts.map +1 -0
  77. package/dist/generators/project.js +76 -0
  78. package/dist/generators/project.js.map +1 -0
  79. package/dist/generators/resource-context.d.ts +18 -0
  80. package/dist/generators/resource-context.d.ts.map +1 -0
  81. package/dist/generators/resource-context.js +21 -0
  82. package/dist/generators/resource-context.js.map +1 -0
  83. package/dist/generators/resource-file.d.ts +8 -0
  84. package/dist/generators/resource-file.d.ts.map +1 -0
  85. package/dist/generators/resource-file.js +9 -0
  86. package/dist/generators/resource-file.js.map +1 -0
  87. package/dist/generators/resource-tests.d.ts +5 -0
  88. package/dist/generators/resource-tests.d.ts.map +1 -0
  89. package/dist/generators/resource-tests.js +17 -0
  90. package/dist/generators/resource-tests.js.map +1 -0
  91. package/dist/generators/resource.d.ts +21 -0
  92. package/dist/generators/resource.d.ts.map +1 -0
  93. package/dist/generators/resource.js +64 -0
  94. package/dist/generators/resource.js.map +1 -0
  95. package/dist/generators/types.d.ts +7 -0
  96. package/dist/generators/types.d.ts.map +1 -0
  97. package/dist/generators/types.js +2 -0
  98. package/dist/generators/types.js.map +1 -0
  99. package/dist/help/guide.txt +126 -0
  100. package/dist/openapi/extract-resources.d.ts +3 -0
  101. package/dist/openapi/extract-resources.d.ts.map +1 -0
  102. package/dist/openapi/extract-resources.js +130 -0
  103. package/dist/openapi/extract-resources.js.map +1 -0
  104. package/dist/openapi/load-spec.d.ts +3 -0
  105. package/dist/openapi/load-spec.d.ts.map +1 -0
  106. package/dist/openapi/load-spec.js +19 -0
  107. package/dist/openapi/load-spec.js.map +1 -0
  108. package/dist/openapi/types.d.ts +51 -0
  109. package/dist/openapi/types.d.ts.map +1 -0
  110. package/dist/openapi/types.js +2 -0
  111. package/dist/openapi/types.js.map +1 -0
  112. package/dist/templates/init/aether.config.json.eta +5 -0
  113. package/dist/templates/init/astraeus.config.json.eta +5 -0
  114. package/dist/templates/init/chisel.config.json.eta +5 -0
  115. package/dist/templates/init/env.eta +8 -0
  116. package/dist/templates/init/env.example.eta +8 -0
  117. package/dist/templates/init/gitignore.eta +5 -0
  118. package/dist/templates/init/package.json.eta +14 -0
  119. package/dist/templates/init/src-app-composition.ts.eta +6 -0
  120. package/dist/templates/init/src-app-config.ts.eta +105 -0
  121. package/dist/templates/init/src-app-http.ts.eta +74 -0
  122. package/dist/templates/init/src-app-list.ts.eta +35 -0
  123. package/dist/templates/init/src-app-logger.ts.eta +35 -0
  124. package/dist/templates/init/src-app-middleware-bearer-auth.ts.eta +60 -0
  125. package/dist/templates/init/src-app-middleware-body-limit.ts.eta +37 -0
  126. package/dist/templates/init/src-app-middleware-cors.ts.eta +53 -0
  127. package/dist/templates/init/src-app-middleware-error-handler.ts.eta +15 -0
  128. package/dist/templates/init/src-app-middleware-request-logger.ts.eta +8 -0
  129. package/dist/templates/init/src-app-middleware-types.ts.eta +7 -0
  130. package/dist/templates/init/src-app-router.ts.eta +72 -0
  131. package/dist/templates/init/src-app-server.ts.eta +16 -0
  132. package/dist/templates/init/src-app.ts.eta +36 -0
  133. package/dist/templates/init/src-health-health.routes.ts.eta +12 -0
  134. package/dist/templates/init/src-main.ts.eta +37 -0
  135. package/dist/templates/init/tsconfig.json.eta +14 -0
  136. package/dist/templates/middleware/middleware.ts.eta +6 -0
  137. package/dist/templates/resource/controller.ts.eta +135 -0
  138. package/dist/templates/resource/module.test.ts.eta +16 -0
  139. package/dist/templates/resource/module.ts.eta +25 -0
  140. package/dist/templates/resource/repository.fake.ts.eta +33 -0
  141. package/dist/templates/resource/repository.ts.eta +14 -0
  142. package/dist/templates/resource/routes.ts.eta +18 -0
  143. package/dist/templates/resource/service.ts.eta +45 -0
  144. package/dist/templates/resource/types.ts.eta +12 -0
  145. package/dist/templates/resource/validate.ts.eta +64 -0
  146. package/llms.txt +57 -0
  147. package/package.json +67 -0
@@ -0,0 +1,42 @@
1
+ import { existsSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { loadConfig } from "../core/project.js";
4
+ import { compositionRel } from "../core/paths.js";
5
+ import { CLI_NAME, DEFAULT_APP_ENTRY, EXIT_FAIL, EXIT_OK, PACKAGE_JSON } from "../core/constants.js";
6
+ export async function runUpgrade(cwd, options) {
7
+ const suggestions = [];
8
+ if (!existsSync(join(cwd, PACKAGE_JSON))) {
9
+ suggestions.push(`Run ${CLI_NAME} init to create a project.`);
10
+ }
11
+ else {
12
+ try {
13
+ loadConfig(cwd);
14
+ }
15
+ catch (err) {
16
+ suggestions.push(err instanceof Error ? err.message : String(err));
17
+ }
18
+ const comp = compositionRel({ root: cwd, config: loadConfig(cwd), appEntryPath: "" });
19
+ if (!existsSync(join(cwd, comp))) {
20
+ suggestions.push(`Add ${comp} (restore from latest ${CLI_NAME} init template).`);
21
+ }
22
+ if (!existsSync(join(cwd, DEFAULT_APP_ENTRY))) {
23
+ suggestions.push(`Restore ${DEFAULT_APP_ENTRY} from latest ${CLI_NAME} init template.`);
24
+ }
25
+ }
26
+ const ok = suggestions.length === 0;
27
+ const payload = { ok, suggestions, dryRun: Boolean(options.dryRun) };
28
+ if (options.json) {
29
+ console.log(JSON.stringify(payload, null, 2));
30
+ }
31
+ else if (ok) {
32
+ console.log("Project matches current Aether composition contract.");
33
+ }
34
+ else {
35
+ console.log("Upgrade suggestions:");
36
+ for (const s of suggestions) {
37
+ console.log(`- ${s}`);
38
+ }
39
+ }
40
+ return ok ? EXIT_OK : EXIT_FAIL;
41
+ }
42
+ //# sourceMappingURL=upgrade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAErG,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,OAA6C;IACzF,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;QACzC,WAAW,CAAC,IAAI,CAAC,OAAO,QAAQ,4BAA4B,CAAC,CAAC;IAChE,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,UAAU,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;QACtF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YACjC,WAAW,CAAC,IAAI,CAAC,OAAO,IAAI,yBAAyB,QAAQ,kBAAkB,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC;YAC9C,WAAW,CAAC,IAAI,CAAC,WAAW,iBAAiB,gBAAgB,QAAQ,iBAAiB,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;IAED,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IAErE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;SAAM,IAAI,EAAE,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IACtE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAClC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { SourceFile } from "ts-morph";
2
+ export declare function addNamedImportIfMissing(sf: SourceFile, moduleSpecifier: string, namedImports: string[]): void;
3
+ /** Append identifier to `const <arrayName> = [...]` if not already present. */
4
+ export declare function appendToArrayLiteralIfMissing(sf: SourceFile, arrayVariableName: string, elementIdentifier: string, asSpread?: boolean): void;
5
+ /** Append `...createFooModule({}).routes` to `buildAppRoutes()` return array if missing. */
6
+ export declare function appendModuleRoutesSpreadIfMissing(sf: SourceFile, moduleFactory: string, moduleCallArgs: string): void;
7
+ //# sourceMappingURL=ast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../src/core/ast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAI3C,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,UAAU,EACd,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,EAAE,GACrB,IAAI,CAmBN;AAwCD,+EAA+E;AAC/E,wBAAgB,6BAA6B,CAC3C,EAAE,EAAE,UAAU,EACd,iBAAiB,EAAE,MAAM,EACzB,iBAAiB,EAAE,MAAM,EACzB,QAAQ,UAAQ,GACf,IAAI,CAeN;AAkBD,4FAA4F;AAC5F,wBAAgB,iCAAiC,CAC/C,EAAE,EAAE,UAAU,EACd,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACrB,IAAI,CAcN"}
@@ -0,0 +1,90 @@
1
+ import { SyntaxKind } from "ts-morph";
2
+ import { AST_SYMBOL } from "./constants.js";
3
+ export function addNamedImportIfMissing(sf, moduleSpecifier, namedImports) {
4
+ const existing = sf.getImportDeclaration((d) => d.getModuleSpecifierValue() === moduleSpecifier);
5
+ if (!existing) {
6
+ sf.addImportDeclaration({
7
+ moduleSpecifier,
8
+ namedImports: namedImports.map((name) => ({ name })),
9
+ });
10
+ return;
11
+ }
12
+ for (const name of namedImports) {
13
+ const has = existing.getNamedImports().some((ni) => ni.getName() === name);
14
+ if (!has) {
15
+ existing.addNamedImport(name);
16
+ }
17
+ }
18
+ }
19
+ function findVariableArrayLiteral(sf, variableName) {
20
+ for (const decl of sf.getVariableDeclarations()) {
21
+ if (decl.getName() !== variableName)
22
+ continue;
23
+ const init = decl.getInitializer();
24
+ if (!init || !init.isKind(SyntaxKind.ArrayLiteralExpression))
25
+ continue;
26
+ return init.asKindOrThrow(SyntaxKind.ArrayLiteralExpression);
27
+ }
28
+ return undefined;
29
+ }
30
+ function spreadContainsIdentifier(element, identifier) {
31
+ if (element.isKind(SyntaxKind.SpreadElement)) {
32
+ const expr = element.asKindOrThrow(SyntaxKind.SpreadElement).getExpression();
33
+ if (expr.isKind(SyntaxKind.Identifier) && expr.getText() === identifier) {
34
+ return true;
35
+ }
36
+ }
37
+ return false;
38
+ }
39
+ function arrayContainsIdentifier(arr, identifier) {
40
+ return arr.getElements().some((el) => {
41
+ if (el.isKind(SyntaxKind.Identifier) && el.getText() === identifier) {
42
+ return true;
43
+ }
44
+ return spreadContainsIdentifier(el, identifier);
45
+ });
46
+ }
47
+ /** Append identifier to `const <arrayName> = [...]` if not already present. */
48
+ export function appendToArrayLiteralIfMissing(sf, arrayVariableName, elementIdentifier, asSpread = false) {
49
+ const arr = findVariableArrayLiteral(sf, arrayVariableName);
50
+ if (!arr) {
51
+ throw new Error(`Could not find array variable "${arrayVariableName}" in ${sf.getFilePath()}`);
52
+ }
53
+ if (arrayContainsIdentifier(arr, elementIdentifier)) {
54
+ return;
55
+ }
56
+ if (asSpread) {
57
+ arr.addElement(`...${elementIdentifier}`);
58
+ }
59
+ else {
60
+ arr.addElement(elementIdentifier);
61
+ }
62
+ }
63
+ function findBuildAppRoutesReturnArray(sf) {
64
+ const fn = sf.getFunction(AST_SYMBOL.buildAppRoutes);
65
+ if (!fn) {
66
+ return undefined;
67
+ }
68
+ for (const ret of fn.getDescendantsOfKind(SyntaxKind.ReturnStatement)) {
69
+ const expr = ret.getExpression();
70
+ if (expr?.isKind(SyntaxKind.ArrayLiteralExpression)) {
71
+ return expr;
72
+ }
73
+ }
74
+ return undefined;
75
+ }
76
+ /** Append `...createFooModule({}).routes` to `buildAppRoutes()` return array if missing. */
77
+ export function appendModuleRoutesSpreadIfMissing(sf, moduleFactory, moduleCallArgs) {
78
+ const arr = findBuildAppRoutesReturnArray(sf);
79
+ if (!arr) {
80
+ throw new Error(`Could not find ${AST_SYMBOL.buildAppRoutes}() return array in ${sf.getFilePath()}`);
81
+ }
82
+ const marker = `${moduleFactory}(`;
83
+ for (const el of arr.getElements()) {
84
+ if (el.getText().includes(marker)) {
85
+ return;
86
+ }
87
+ }
88
+ arr.addElement(`...${moduleFactory}(${moduleCallArgs}).routes`);
89
+ }
90
+ //# sourceMappingURL=ast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast.js","sourceRoot":"","sources":["../../src/core/ast.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ /** Canonical layout and contract values. Do not scatter these literals. */
2
+ export declare const CLI_NAME = "aether";
3
+ export declare const CONFIG_FILE = "aether.config.json";
4
+ export declare const CONFIG_VERSION = 1;
5
+ export declare const PACKAGE_JSON = "package.json";
6
+ export declare const TSCONFIG_JSON = "tsconfig.json";
7
+ export declare const GITIGNORE = ".gitignore";
8
+ export declare const ENV_FILE = ".env";
9
+ export declare const ENV_EXAMPLE_FILE = ".env.example";
10
+ export declare const DEFAULT_SRC_DIR = "src";
11
+ export declare const APP_DIR = "app";
12
+ export declare const MIDDLEWARE_DIR = "middleware";
13
+ export declare const HEALTH_DIR = "health";
14
+ export declare const TESTS_DIR = "tests";
15
+ export declare const DIST_DIR = "dist";
16
+ export declare const TEMPLATES_DIRNAME = "templates";
17
+ export declare const APP_ENTRY_BASENAME = "app.ts";
18
+ export declare const MAIN_BASENAME = "main.ts";
19
+ export declare const COMPOSITION_BASENAME = "composition.ts";
20
+ export declare const DEFAULT_APP_ENTRY = "src/app.ts";
21
+ export declare const DEFAULT_MAIN = "src/main.ts";
22
+ export declare const DEFAULT_COMPOSITION = "src/app/composition.ts";
23
+ export declare const MIN_NODE_MAJOR = 20;
24
+ export declare const EXIT_OK = 0;
25
+ export declare const EXIT_FAIL = 1;
26
+ export declare const JSON_MIME: "application/json";
27
+ export declare const OPENAPI_VERSION_PREFIX = "3.";
28
+ export declare const OPENAPI_SCHEMA_REF_PREFIX = "#/components/schemas/";
29
+ export declare const OPENAPI_HTTP_METHOD: {
30
+ readonly post: "post";
31
+ readonly patch: "patch";
32
+ readonly put: "put";
33
+ };
34
+ export type OpenApiHttpMethod = (typeof OPENAPI_HTTP_METHOD)[keyof typeof OPENAPI_HTTP_METHOD];
35
+ export declare const OPENAPI_SCHEMA_TYPE: {
36
+ readonly string: "string";
37
+ readonly boolean: "boolean";
38
+ readonly number: "number";
39
+ readonly integer: "integer";
40
+ };
41
+ export declare const TS_SCALAR_TYPE: {
42
+ readonly string: "string";
43
+ readonly number: "number";
44
+ readonly boolean: "boolean";
45
+ };
46
+ export type TsScalarType = (typeof TS_SCALAR_TYPE)[keyof typeof TS_SCALAR_TYPE];
47
+ export declare const ENTITY_ID_FIELD = "id";
48
+ export declare const DEFAULT_PROJECT_NAME = "app";
49
+ export declare const AETHER_TMP_SUFFIX = ".aether.tmp";
50
+ export declare const TEMPLATE_INIT_DIR = "init";
51
+ export declare const INIT_TEMPLATE: {
52
+ readonly packageJson: "init/package.json.eta";
53
+ readonly tsconfig: "init/tsconfig.json.eta";
54
+ readonly gitignore: "init/gitignore.eta";
55
+ readonly aetherConfig: "init/aether.config.json.eta";
56
+ readonly envExample: "init/env.example.eta";
57
+ readonly env: "init/env.eta";
58
+ readonly main: "init/src-main.ts.eta";
59
+ readonly composition: "init/src-app-composition.ts.eta";
60
+ readonly app: "init/src-app.ts.eta";
61
+ readonly appConfig: "init/src-app-config.ts.eta";
62
+ readonly appServer: "init/src-app-server.ts.eta";
63
+ readonly appRouter: "init/src-app-router.ts.eta";
64
+ readonly appHttp: "init/src-app-http.ts.eta";
65
+ readonly appList: "init/src-app-list.ts.eta";
66
+ readonly appLogger: "init/src-app-logger.ts.eta";
67
+ readonly middlewareTypes: "init/src-app-middleware-types.ts.eta";
68
+ readonly middlewareRequestLogger: "init/src-app-middleware-request-logger.ts.eta";
69
+ readonly middlewareErrorHandler: "init/src-app-middleware-error-handler.ts.eta";
70
+ readonly middlewareCors: "init/src-app-middleware-cors.ts.eta";
71
+ readonly middlewareBodyLimit: "init/src-app-middleware-body-limit.ts.eta";
72
+ readonly middlewareBearerAuth: "init/src-app-middleware-bearer-auth.ts.eta";
73
+ readonly healthRoutes: "init/src-health-health.routes.ts.eta";
74
+ };
75
+ export declare const APP_SCAFFOLD: {
76
+ readonly config: "config.ts";
77
+ readonly server: "server.ts";
78
+ readonly router: "router.ts";
79
+ readonly http: "http.ts";
80
+ readonly list: "list.ts";
81
+ readonly logger: "logger.ts";
82
+ };
83
+ export declare const MIDDLEWARE_SCAFFOLD: {
84
+ readonly types: "types.ts";
85
+ readonly requestLogger: "request-logger.ts";
86
+ readonly errorHandler: "error-handler.ts";
87
+ readonly cors: "cors.ts";
88
+ readonly bodyLimit: "body-limit.ts";
89
+ readonly bearerAuth: "bearer-auth.ts";
90
+ };
91
+ export declare const HEALTH_ROUTES_BASENAME = "health.routes.ts";
92
+ export declare const RESOURCE_TEST_SUFFIX: {
93
+ readonly repositoryFake: "repository.fake";
94
+ readonly moduleTest: "module.test";
95
+ };
96
+ export declare const FILE_OP: {
97
+ readonly create: "create";
98
+ readonly modify: "modify";
99
+ };
100
+ export type FileOpKind = (typeof FILE_OP)[keyof typeof FILE_OP];
101
+ export declare const GENERATOR: {
102
+ readonly project: "project";
103
+ readonly resource: "resource";
104
+ readonly middleware: "middleware";
105
+ readonly openapi: "openapi";
106
+ };
107
+ export type GeneratorName = (typeof GENERATOR)[keyof typeof GENERATOR];
108
+ export declare const RESOURCE_LAYER: {
109
+ readonly types: "types";
110
+ readonly validate: "validate";
111
+ readonly repository: "repository";
112
+ readonly service: "service";
113
+ readonly controller: "controller";
114
+ readonly routes: "routes";
115
+ readonly module: "module";
116
+ };
117
+ export type ResourceLayer = (typeof RESOURCE_LAYER)[keyof typeof RESOURCE_LAYER];
118
+ export declare const RESOURCE_PLAN_MODE: {
119
+ readonly full: "full";
120
+ readonly schema: "schema";
121
+ };
122
+ export type ResourcePlanMode = (typeof RESOURCE_PLAN_MODE)[keyof typeof RESOURCE_PLAN_MODE];
123
+ export declare const RESOURCE_TEMPLATE: Record<ResourceLayer, string>;
124
+ export declare const TEMPLATE: {
125
+ readonly middleware: "middleware/middleware.ts.eta";
126
+ readonly resourceTestsFake: "resource/repository.fake.ts.eta";
127
+ readonly resourceTestsModule: "resource/module.test.ts.eta";
128
+ };
129
+ export declare const AST_SYMBOL: {
130
+ readonly buildAppRoutes: "buildAppRoutes";
131
+ readonly middlewareArray: "middleware";
132
+ };
133
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,135 @@
1
+ /** Canonical layout and contract values. Do not scatter these literals. */
2
+ export const CLI_NAME = "aether";
3
+ export const CONFIG_FILE = "aether.config.json";
4
+ export const CONFIG_VERSION = 1;
5
+ export const PACKAGE_JSON = "package.json";
6
+ export const TSCONFIG_JSON = "tsconfig.json";
7
+ export const GITIGNORE = ".gitignore";
8
+ export const ENV_FILE = ".env";
9
+ export const ENV_EXAMPLE_FILE = ".env.example";
10
+ export const DEFAULT_SRC_DIR = "src";
11
+ export const APP_DIR = "app";
12
+ export const MIDDLEWARE_DIR = "middleware";
13
+ export const HEALTH_DIR = "health";
14
+ export const TESTS_DIR = "tests";
15
+ export const DIST_DIR = "dist";
16
+ export const TEMPLATES_DIRNAME = "templates";
17
+ export const APP_ENTRY_BASENAME = "app.ts";
18
+ export const MAIN_BASENAME = "main.ts";
19
+ export const COMPOSITION_BASENAME = "composition.ts";
20
+ export const DEFAULT_APP_ENTRY = `${DEFAULT_SRC_DIR}/${APP_ENTRY_BASENAME}`;
21
+ export const DEFAULT_MAIN = `${DEFAULT_SRC_DIR}/${MAIN_BASENAME}`;
22
+ export const DEFAULT_COMPOSITION = `${DEFAULT_SRC_DIR}/${APP_DIR}/${COMPOSITION_BASENAME}`;
23
+ export const MIN_NODE_MAJOR = 20;
24
+ export const EXIT_OK = 0;
25
+ export const EXIT_FAIL = 1;
26
+ export const JSON_MIME = "application/json";
27
+ export const OPENAPI_VERSION_PREFIX = "3.";
28
+ export const OPENAPI_SCHEMA_REF_PREFIX = "#/components/schemas/";
29
+ export const OPENAPI_HTTP_METHOD = {
30
+ post: "post",
31
+ patch: "patch",
32
+ put: "put",
33
+ };
34
+ export const OPENAPI_SCHEMA_TYPE = {
35
+ string: "string",
36
+ boolean: "boolean",
37
+ number: "number",
38
+ integer: "integer",
39
+ };
40
+ export const TS_SCALAR_TYPE = {
41
+ string: "string",
42
+ number: "number",
43
+ boolean: "boolean",
44
+ };
45
+ export const ENTITY_ID_FIELD = "id";
46
+ export const DEFAULT_PROJECT_NAME = "app";
47
+ export const AETHER_TMP_SUFFIX = ".aether.tmp";
48
+ export const TEMPLATE_INIT_DIR = "init";
49
+ export const INIT_TEMPLATE = {
50
+ packageJson: `${TEMPLATE_INIT_DIR}/package.json.eta`,
51
+ tsconfig: `${TEMPLATE_INIT_DIR}/tsconfig.json.eta`,
52
+ gitignore: `${TEMPLATE_INIT_DIR}/gitignore.eta`,
53
+ aetherConfig: `${TEMPLATE_INIT_DIR}/aether.config.json.eta`,
54
+ envExample: `${TEMPLATE_INIT_DIR}/env.example.eta`,
55
+ env: `${TEMPLATE_INIT_DIR}/env.eta`,
56
+ main: `${TEMPLATE_INIT_DIR}/src-main.ts.eta`,
57
+ composition: `${TEMPLATE_INIT_DIR}/src-app-composition.ts.eta`,
58
+ app: `${TEMPLATE_INIT_DIR}/src-app.ts.eta`,
59
+ appConfig: `${TEMPLATE_INIT_DIR}/src-app-config.ts.eta`,
60
+ appServer: `${TEMPLATE_INIT_DIR}/src-app-server.ts.eta`,
61
+ appRouter: `${TEMPLATE_INIT_DIR}/src-app-router.ts.eta`,
62
+ appHttp: `${TEMPLATE_INIT_DIR}/src-app-http.ts.eta`,
63
+ appList: `${TEMPLATE_INIT_DIR}/src-app-list.ts.eta`,
64
+ appLogger: `${TEMPLATE_INIT_DIR}/src-app-logger.ts.eta`,
65
+ middlewareTypes: `${TEMPLATE_INIT_DIR}/src-app-middleware-types.ts.eta`,
66
+ middlewareRequestLogger: `${TEMPLATE_INIT_DIR}/src-app-middleware-request-logger.ts.eta`,
67
+ middlewareErrorHandler: `${TEMPLATE_INIT_DIR}/src-app-middleware-error-handler.ts.eta`,
68
+ middlewareCors: `${TEMPLATE_INIT_DIR}/src-app-middleware-cors.ts.eta`,
69
+ middlewareBodyLimit: `${TEMPLATE_INIT_DIR}/src-app-middleware-body-limit.ts.eta`,
70
+ middlewareBearerAuth: `${TEMPLATE_INIT_DIR}/src-app-middleware-bearer-auth.ts.eta`,
71
+ healthRoutes: `${TEMPLATE_INIT_DIR}/src-health-health.routes.ts.eta`,
72
+ };
73
+ export const APP_SCAFFOLD = {
74
+ config: "config.ts",
75
+ server: "server.ts",
76
+ router: "router.ts",
77
+ http: "http.ts",
78
+ list: "list.ts",
79
+ logger: "logger.ts",
80
+ };
81
+ export const MIDDLEWARE_SCAFFOLD = {
82
+ types: "types.ts",
83
+ requestLogger: "request-logger.ts",
84
+ errorHandler: "error-handler.ts",
85
+ cors: "cors.ts",
86
+ bodyLimit: "body-limit.ts",
87
+ bearerAuth: "bearer-auth.ts",
88
+ };
89
+ export const HEALTH_ROUTES_BASENAME = "health.routes.ts";
90
+ export const RESOURCE_TEST_SUFFIX = {
91
+ repositoryFake: "repository.fake",
92
+ moduleTest: "module.test",
93
+ };
94
+ export const FILE_OP = {
95
+ create: "create",
96
+ modify: "modify",
97
+ };
98
+ export const GENERATOR = {
99
+ project: "project",
100
+ resource: "resource",
101
+ middleware: "middleware",
102
+ openapi: "openapi",
103
+ };
104
+ export const RESOURCE_LAYER = {
105
+ types: "types",
106
+ validate: "validate",
107
+ repository: "repository",
108
+ service: "service",
109
+ controller: "controller",
110
+ routes: "routes",
111
+ module: "module",
112
+ };
113
+ export const RESOURCE_PLAN_MODE = {
114
+ full: "full",
115
+ schema: "schema",
116
+ };
117
+ export const RESOURCE_TEMPLATE = {
118
+ types: "resource/types.ts.eta",
119
+ validate: "resource/validate.ts.eta",
120
+ repository: "resource/repository.ts.eta",
121
+ service: "resource/service.ts.eta",
122
+ controller: "resource/controller.ts.eta",
123
+ routes: "resource/routes.ts.eta",
124
+ module: "resource/module.ts.eta",
125
+ };
126
+ export const TEMPLATE = {
127
+ middleware: "middleware/middleware.ts.eta",
128
+ resourceTestsFake: "resource/repository.fake.ts.eta",
129
+ resourceTestsModule: "resource/module.test.ts.eta",
130
+ };
131
+ export const AST_SYMBOL = {
132
+ buildAppRoutes: "buildAppRoutes",
133
+ middlewareArray: "middleware",
134
+ };
135
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type FileOpKind } from "./constants.js";
2
+ export interface PlanOpJson {
3
+ kind: FileOpKind;
4
+ path: string;
5
+ }
6
+ export interface PlanJson {
7
+ ops: PlanOpJson[];
8
+ }
9
+ export declare function planToJson(ops: {
10
+ kind: FileOpKind;
11
+ path: string;
12
+ }[]): PlanJson;
13
+ export declare function formatUnifiedDiff(path: string, before: string, after: string): string;
14
+ export declare function formatMaterializedDiff(materialized: Array<{
15
+ kind: string;
16
+ path: string;
17
+ contents: string;
18
+ previousContents?: string;
19
+ }>): string;
20
+ //# sourceMappingURL=diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/core/diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE1D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,UAAU,EAAE,CAAC;CACnB;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,QAAQ,CAI9E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAgBrF;AAED,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC/F,MAAM,CAUR"}
@@ -0,0 +1,39 @@
1
+ import { FILE_OP } from "./constants.js";
2
+ export function planToJson(ops) {
3
+ return {
4
+ ops: ops.map((op) => ({ kind: op.kind, path: op.path })),
5
+ };
6
+ }
7
+ export function formatUnifiedDiff(path, before, after) {
8
+ const beforeLines = before.split("\n");
9
+ const afterLines = after.split("\n");
10
+ const lines = [`--- a/${path}`, `+++ b/${path}`];
11
+ const max = Math.max(beforeLines.length, afterLines.length);
12
+ for (let i = 0; i < max; i++) {
13
+ const b = beforeLines[i];
14
+ const a = afterLines[i];
15
+ if (b === a) {
16
+ if (b !== undefined)
17
+ lines.push(` ${b}`);
18
+ continue;
19
+ }
20
+ if (b !== undefined)
21
+ lines.push(`-${b}`);
22
+ if (a !== undefined)
23
+ lines.push(`+${a}`);
24
+ }
25
+ return lines.join("\n");
26
+ }
27
+ export function formatMaterializedDiff(materialized) {
28
+ const chunks = [];
29
+ for (const op of materialized) {
30
+ if (op.kind === FILE_OP.create) {
31
+ chunks.push(formatUnifiedDiff(op.path, "", op.contents));
32
+ }
33
+ else if (op.previousContents !== undefined && op.previousContents !== op.contents) {
34
+ chunks.push(formatUnifiedDiff(op.path, op.previousContents, op.contents));
35
+ }
36
+ }
37
+ return chunks.filter(Boolean).join("\n\n");
38
+ }
39
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/core/diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAmB,MAAM,gBAAgB,CAAC;AAW1D,MAAM,UAAU,UAAU,CAAC,GAAyC;IAClE,OAAO;QACL,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;KACzD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,MAAc,EAAE,KAAa;IAC3E,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,KAAK,GAAa,CAAC,SAAS,IAAI,EAAE,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACZ,IAAI,CAAC,KAAK,SAAS;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzC,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,YAAgG;IAEhG,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;QAC9B,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3D,CAAC;aAAM,IAAI,EAAE,CAAC,gBAAgB,KAAK,SAAS,IAAI,EAAE,CAAC,gBAAgB,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC;YACpF,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,19 @@
1
+ export declare const ErrorCode: {
2
+ readonly VALIDATION: "VALIDATION";
3
+ readonly NOT_FOUND: "NOT_FOUND";
4
+ readonly ALREADY_EXISTS: "ALREADY_EXISTS";
5
+ readonly CONFIG: "CONFIG";
6
+ readonly INTERNAL: "INTERNAL";
7
+ };
8
+ export type ChiselErrorCode = (typeof ErrorCode)[keyof typeof ErrorCode];
9
+ export declare class ChiselError extends Error {
10
+ readonly code: ChiselErrorCode;
11
+ constructor(code: ChiselErrorCode, message: string);
12
+ }
13
+ export declare function isChiselError(err: unknown): err is ChiselError;
14
+ export declare function formatUserError(err: unknown): string;
15
+ export declare function errorToJson(err: unknown): {
16
+ code: string;
17
+ message: string;
18
+ };
19
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;aACpB,UAAU,EAAE,YAAY;aACxB,SAAS,EAAE,WAAW;aACtB,cAAc,EAAE,gBAAgB;aAChC,MAAM,EAAE,QAAQ;aAChB,QAAQ,EAAE,UAAU;CACZ,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAEzE,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAE/B,YAAY,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAIjD;CACF;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,WAAW,CAE9D;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAQpD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAQ3E"}
@@ -0,0 +1,37 @@
1
+ export const ErrorCode = {
2
+ VALIDATION: "VALIDATION",
3
+ NOT_FOUND: "NOT_FOUND",
4
+ ALREADY_EXISTS: "ALREADY_EXISTS",
5
+ CONFIG: "CONFIG",
6
+ INTERNAL: "INTERNAL",
7
+ };
8
+ export class ChiselError extends Error {
9
+ code;
10
+ constructor(code, message) {
11
+ super(message);
12
+ this.name = "ChiselError";
13
+ this.code = code;
14
+ }
15
+ }
16
+ export function isChiselError(err) {
17
+ return err instanceof ChiselError;
18
+ }
19
+ export function formatUserError(err) {
20
+ if (isChiselError(err)) {
21
+ return `[${err.code}] ${err.message}`;
22
+ }
23
+ if (err instanceof Error) {
24
+ return err.message;
25
+ }
26
+ return String(err);
27
+ }
28
+ export function errorToJson(err) {
29
+ if (isChiselError(err)) {
30
+ return { code: err.code, message: err.message };
31
+ }
32
+ if (err instanceof Error) {
33
+ return { code: ErrorCode.INTERNAL, message: err.message };
34
+ }
35
+ return { code: ErrorCode.INTERNAL, message: String(err) };
36
+ }
37
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,UAAU,EAAE,YAAY;IACxB,SAAS,EAAE,WAAW;IACtB,cAAc,EAAE,gBAAgB;IAChC,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;CACZ,CAAC;AAIX,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,IAAI,CAAkB;IAE/B,YAAY,IAAqB,EAAE,OAAe;QAChD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,OAAO,GAAG,YAAY,WAAW,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;IACxC,CAAC;IACD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;IAClD,CAAC;IACD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;IAC5D,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,10 @@
1
+ export declare function validateResourceName(name: string): void;
2
+ export declare function toKebab(name: string): string;
3
+ export declare function toCamel(name: string): string;
4
+ export declare function toPascal(name: string): string;
5
+ /** Naive plural → singular for type names (users → User). Override with --singular. */
6
+ export declare function naiveSingular(pluralKebab: string): string;
7
+ export declare function resolveSingularPascal(pluralKebab: string, singularOption?: string): string;
8
+ export declare function middlewareFileName(name: string): string;
9
+ export declare function middlewareExportName(name: string): string;
10
+ //# sourceMappingURL=naming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../src/core/naming.ts"],"names":[],"mappings":"AAEA,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMvD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK5C;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,uFAAuF;AACvF,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAYzD;AAED,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAO1F;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD"}
@@ -0,0 +1,50 @@
1
+ const RESOURCE_NAME_RE = /^[a-z][a-z0-9-]*$/;
2
+ export function validateResourceName(name) {
3
+ if (!RESOURCE_NAME_RE.test(name)) {
4
+ throw new Error(`Invalid name "${name}". Use kebab-case: lowercase letters, digits, hyphens; must start with a letter.`);
5
+ }
6
+ }
7
+ export function toKebab(name) {
8
+ return name.replace(/_/g, "-").toLowerCase();
9
+ }
10
+ export function toCamel(name) {
11
+ const parts = toKebab(name).split("-").filter(Boolean);
12
+ return parts
13
+ .map((p, i) => (i === 0 ? p : p[0].toUpperCase() + p.slice(1)))
14
+ .join("");
15
+ }
16
+ export function toPascal(name) {
17
+ const camel = toCamel(name);
18
+ return camel[0].toUpperCase() + camel.slice(1);
19
+ }
20
+ /** Naive plural → singular for type names (users → User). Override with --singular. */
21
+ export function naiveSingular(pluralKebab) {
22
+ const camel = toCamel(pluralKebab);
23
+ if (camel.endsWith("ies") && camel.length > 3) {
24
+ return camel.slice(0, -3) + "y";
25
+ }
26
+ if (camel.endsWith("ses") || camel.endsWith("xes") || camel.endsWith("zes")) {
27
+ return camel.slice(0, -2);
28
+ }
29
+ if (camel.endsWith("s") && !camel.endsWith("ss") && camel.length > 1) {
30
+ return camel.slice(0, -1);
31
+ }
32
+ return camel;
33
+ }
34
+ export function resolveSingularPascal(pluralKebab, singularOption) {
35
+ if (singularOption) {
36
+ const s = singularOption.trim();
37
+ if (/^[A-Z]/.test(s))
38
+ return s;
39
+ return toPascal(s);
40
+ }
41
+ return toPascal(naiveSingular(pluralKebab));
42
+ }
43
+ export function middlewareFileName(name) {
44
+ validateResourceName(toKebab(name));
45
+ return toKebab(name);
46
+ }
47
+ export function middlewareExportName(name) {
48
+ return `${toCamel(middlewareFileName(name))}Middleware`;
49
+ }
50
+ //# sourceMappingURL=naming.js.map