@miiajs/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +19 -0
  3. package/dist/bin.d.ts +3 -0
  4. package/dist/bin.d.ts.map +1 -0
  5. package/dist/bin.js +5 -0
  6. package/dist/bin.js.map +1 -0
  7. package/dist/cli.d.ts +2 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +17 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/commands/build.d.ts +9 -0
  12. package/dist/commands/build.d.ts.map +1 -0
  13. package/dist/commands/build.js +39 -0
  14. package/dist/commands/build.js.map +1 -0
  15. package/dist/commands/check.d.ts +3 -0
  16. package/dist/commands/check.d.ts.map +1 -0
  17. package/dist/commands/check.js +27 -0
  18. package/dist/commands/check.js.map +1 -0
  19. package/dist/commands/dev.d.ts +18 -0
  20. package/dist/commands/dev.d.ts.map +1 -0
  21. package/dist/commands/dev.js +42 -0
  22. package/dist/commands/dev.js.map +1 -0
  23. package/dist/commands/generate.d.ts +28 -0
  24. package/dist/commands/generate.d.ts.map +1 -0
  25. package/dist/commands/generate.js +67 -0
  26. package/dist/commands/generate.js.map +1 -0
  27. package/dist/commands/new.d.ts +19 -0
  28. package/dist/commands/new.d.ts.map +1 -0
  29. package/dist/commands/new.js +44 -0
  30. package/dist/commands/new.js.map +1 -0
  31. package/dist/commands/start.d.ts +23 -0
  32. package/dist/commands/start.d.ts.map +1 -0
  33. package/dist/commands/start.js +49 -0
  34. package/dist/commands/start.js.map +1 -0
  35. package/dist/dev/orchestrator.d.ts +9 -0
  36. package/dist/dev/orchestrator.d.ts.map +1 -0
  37. package/dist/dev/orchestrator.js +80 -0
  38. package/dist/dev/orchestrator.js.map +1 -0
  39. package/dist/dev/tsc-pipe.d.ts +3 -0
  40. package/dist/dev/tsc-pipe.d.ts.map +1 -0
  41. package/dist/dev/tsc-pipe.js +44 -0
  42. package/dist/dev/tsc-pipe.js.map +1 -0
  43. package/dist/generate/module-updater.d.ts +20 -0
  44. package/dist/generate/module-updater.d.ts.map +1 -0
  45. package/dist/generate/module-updater.js +158 -0
  46. package/dist/generate/module-updater.js.map +1 -0
  47. package/dist/generate/runner.d.ts +3 -0
  48. package/dist/generate/runner.d.ts.map +1 -0
  49. package/dist/generate/runner.js +130 -0
  50. package/dist/generate/runner.js.map +1 -0
  51. package/dist/generate/schematics.d.ts +8 -0
  52. package/dist/generate/schematics.d.ts.map +1 -0
  53. package/dist/generate/schematics.js +68 -0
  54. package/dist/generate/schematics.js.map +1 -0
  55. package/dist/generate/templates/controller.d.ts +3 -0
  56. package/dist/generate/templates/controller.d.ts.map +1 -0
  57. package/dist/generate/templates/controller.js +14 -0
  58. package/dist/generate/templates/controller.js.map +1 -0
  59. package/dist/generate/templates/guard.d.ts +3 -0
  60. package/dist/generate/templates/guard.d.ts.map +1 -0
  61. package/dist/generate/templates/guard.js +13 -0
  62. package/dist/generate/templates/guard.js.map +1 -0
  63. package/dist/generate/templates/middleware.d.ts +3 -0
  64. package/dist/generate/templates/middleware.d.ts.map +1 -0
  65. package/dist/generate/templates/middleware.js +11 -0
  66. package/dist/generate/templates/middleware.js.map +1 -0
  67. package/dist/generate/templates/module.d.ts +3 -0
  68. package/dist/generate/templates/module.d.ts.map +1 -0
  69. package/dist/generate/templates/module.js +8 -0
  70. package/dist/generate/templates/module.js.map +1 -0
  71. package/dist/generate/templates/resource.d.ts +5 -0
  72. package/dist/generate/templates/resource.d.ts.map +1 -0
  73. package/dist/generate/templates/resource.js +78 -0
  74. package/dist/generate/templates/resource.js.map +1 -0
  75. package/dist/generate/templates/service.d.ts +3 -0
  76. package/dist/generate/templates/service.d.ts.map +1 -0
  77. package/dist/generate/templates/service.js +12 -0
  78. package/dist/generate/templates/service.js.map +1 -0
  79. package/dist/generate/types.d.ts +38 -0
  80. package/dist/generate/types.d.ts.map +1 -0
  81. package/dist/generate/types.js +2 -0
  82. package/dist/generate/types.js.map +1 -0
  83. package/dist/runtime/commands.d.ts +11 -0
  84. package/dist/runtime/commands.d.ts.map +1 -0
  85. package/dist/runtime/commands.js +46 -0
  86. package/dist/runtime/commands.js.map +1 -0
  87. package/dist/runtime/detect.d.ts +10 -0
  88. package/dist/runtime/detect.d.ts.map +1 -0
  89. package/dist/runtime/detect.js +65 -0
  90. package/dist/runtime/detect.js.map +1 -0
  91. package/dist/runtime/types.d.ts +2 -0
  92. package/dist/runtime/types.d.ts.map +1 -0
  93. package/dist/runtime/types.js +2 -0
  94. package/dist/runtime/types.js.map +1 -0
  95. package/dist/scaffold/app-composer.d.ts +12 -0
  96. package/dist/scaffold/app-composer.d.ts.map +1 -0
  97. package/dist/scaffold/app-composer.js +102 -0
  98. package/dist/scaffold/app-composer.js.map +1 -0
  99. package/dist/scaffold/features/config.d.ts +3 -0
  100. package/dist/scaffold/features/config.d.ts.map +1 -0
  101. package/dist/scaffold/features/config.js +43 -0
  102. package/dist/scaffold/features/config.js.map +1 -0
  103. package/dist/scaffold/features/cors.d.ts +3 -0
  104. package/dist/scaffold/features/cors.d.ts.map +1 -0
  105. package/dist/scaffold/features/cors.js +19 -0
  106. package/dist/scaffold/features/cors.js.map +1 -0
  107. package/dist/scaffold/features/drizzle-mysql.d.ts +3 -0
  108. package/dist/scaffold/features/drizzle-mysql.d.ts.map +1 -0
  109. package/dist/scaffold/features/drizzle-mysql.js +28 -0
  110. package/dist/scaffold/features/drizzle-mysql.js.map +1 -0
  111. package/dist/scaffold/features/drizzle-postgres.d.ts +3 -0
  112. package/dist/scaffold/features/drizzle-postgres.d.ts.map +1 -0
  113. package/dist/scaffold/features/drizzle-postgres.js +28 -0
  114. package/dist/scaffold/features/drizzle-postgres.js.map +1 -0
  115. package/dist/scaffold/features/drizzle-sqlite.d.ts +3 -0
  116. package/dist/scaffold/features/drizzle-sqlite.d.ts.map +1 -0
  117. package/dist/scaffold/features/drizzle-sqlite.js +29 -0
  118. package/dist/scaffold/features/drizzle-sqlite.js.map +1 -0
  119. package/dist/scaffold/features/jwt-auth.d.ts +3 -0
  120. package/dist/scaffold/features/jwt-auth.d.ts.map +1 -0
  121. package/dist/scaffold/features/jwt-auth.js +117 -0
  122. package/dist/scaffold/features/jwt-auth.js.map +1 -0
  123. package/dist/scaffold/features/mongoose.d.ts +3 -0
  124. package/dist/scaffold/features/mongoose.d.ts.map +1 -0
  125. package/dist/scaffold/features/mongoose.js +23 -0
  126. package/dist/scaffold/features/mongoose.js.map +1 -0
  127. package/dist/scaffold/features/papr.d.ts +3 -0
  128. package/dist/scaffold/features/papr.d.ts.map +1 -0
  129. package/dist/scaffold/features/papr.js +24 -0
  130. package/dist/scaffold/features/papr.js.map +1 -0
  131. package/dist/scaffold/features/registry.d.ts +12 -0
  132. package/dist/scaffold/features/registry.d.ts.map +1 -0
  133. package/dist/scaffold/features/registry.js +76 -0
  134. package/dist/scaffold/features/registry.js.map +1 -0
  135. package/dist/scaffold/features/serve-static.d.ts +3 -0
  136. package/dist/scaffold/features/serve-static.d.ts.map +1 -0
  137. package/dist/scaffold/features/serve-static.js +17 -0
  138. package/dist/scaffold/features/serve-static.js.map +1 -0
  139. package/dist/scaffold/features/swagger.d.ts +3 -0
  140. package/dist/scaffold/features/swagger.d.ts.map +1 -0
  141. package/dist/scaffold/features/swagger.js +20 -0
  142. package/dist/scaffold/features/swagger.js.map +1 -0
  143. package/dist/scaffold/package-install.d.ts +3 -0
  144. package/dist/scaffold/package-install.d.ts.map +1 -0
  145. package/dist/scaffold/package-install.js +17 -0
  146. package/dist/scaffold/package-install.js.map +1 -0
  147. package/dist/scaffold/project-files.d.ts +13 -0
  148. package/dist/scaffold/project-files.d.ts.map +1 -0
  149. package/dist/scaffold/project-files.js +78 -0
  150. package/dist/scaffold/project-files.js.map +1 -0
  151. package/dist/scaffold/prompts.d.ts +11 -0
  152. package/dist/scaffold/prompts.d.ts.map +1 -0
  153. package/dist/scaffold/prompts.js +79 -0
  154. package/dist/scaffold/prompts.js.map +1 -0
  155. package/dist/scaffold/scaffold.d.ts +14 -0
  156. package/dist/scaffold/scaffold.d.ts.map +1 -0
  157. package/dist/scaffold/scaffold.js +88 -0
  158. package/dist/scaffold/scaffold.js.map +1 -0
  159. package/dist/scaffold/types.d.ts +41 -0
  160. package/dist/scaffold/types.d.ts.map +1 -0
  161. package/dist/scaffold/types.js +2 -0
  162. package/dist/scaffold/types.js.map +1 -0
  163. package/dist/utils/format.d.ts +2 -0
  164. package/dist/utils/format.d.ts.map +1 -0
  165. package/dist/utils/format.js +43 -0
  166. package/dist/utils/format.js.map +1 -0
  167. package/dist/utils/fs.d.ts +2 -0
  168. package/dist/utils/fs.d.ts.map +1 -0
  169. package/dist/utils/fs.js +7 -0
  170. package/dist/utils/fs.js.map +1 -0
  171. package/dist/utils/logger.d.ts +8 -0
  172. package/dist/utils/logger.d.ts.map +1 -0
  173. package/dist/utils/logger.js +10 -0
  174. package/dist/utils/logger.js.map +1 -0
  175. package/dist/utils/naming.d.ts +4 -0
  176. package/dist/utils/naming.d.ts.map +1 -0
  177. package/dist/utils/naming.js +18 -0
  178. package/dist/utils/naming.js.map +1 -0
  179. package/dist/utils/preflight.d.ts +3 -0
  180. package/dist/utils/preflight.d.ts.map +1 -0
  181. package/dist/utils/preflight.js +32 -0
  182. package/dist/utils/preflight.js.map +1 -0
  183. package/dist/utils/writer.d.ts +16 -0
  184. package/dist/utils/writer.d.ts.map +1 -0
  185. package/dist/utils/writer.js +42 -0
  186. package/dist/utils/writer.js.map +1 -0
  187. package/package.json +64 -0
@@ -0,0 +1,44 @@
1
+ const TSC_TIMESTAMP = /\[?[\d:]+\s*[AP]M\]?\s*-\s*/;
2
+ const TSC_ERROR_LINE = /^(.+?)\((\d+),(\d+)\): error (TS\d+): (.+)$/;
3
+ const cyan = (s) => `\x1b[36m${s}\x1b[0m`;
4
+ const green = (s) => `\x1b[32m${s}\x1b[0m`;
5
+ const red = (s) => `\x1b[31m${s}\x1b[0m`;
6
+ const blue = (s) => `\x1b[34m${s}\x1b[0m`;
7
+ function formatLine(line) {
8
+ if (/Starting compilation in watch mode/.test(line)) {
9
+ return cyan('Type-checking in progress...');
10
+ }
11
+ if (/File change detected/.test(line)) {
12
+ return cyan('File changed, rechecking...');
13
+ }
14
+ if (/Found 0 errors/.test(line)) {
15
+ return green('No errors found.');
16
+ }
17
+ if (/Found \d+ error/.test(line)) {
18
+ return red(line);
19
+ }
20
+ const match = TSC_ERROR_LINE.exec(line);
21
+ if (match) {
22
+ const [, file, ln, col, code, msg] = match;
23
+ return `${red('ERROR')} in ${blue(`${file}:${ln}:${col}`)}\n${code}: ${msg}`;
24
+ }
25
+ return line;
26
+ }
27
+ export function pipeTsc(proc) {
28
+ let buffer = '';
29
+ proc.stdout?.on('data', (chunk) => {
30
+ buffer += chunk.toString();
31
+ const lines = buffer.split('\n');
32
+ buffer = lines.pop() ?? '';
33
+ for (const line of lines) {
34
+ if (!line.trim())
35
+ continue;
36
+ const clean = line.replace(TSC_TIMESTAMP, '');
37
+ process.stdout.write(formatLine(clean) + '\n');
38
+ }
39
+ });
40
+ proc.stderr?.on('data', (chunk) => {
41
+ process.stderr.write(chunk);
42
+ });
43
+ }
44
+ //# sourceMappingURL=tsc-pipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsc-pipe.js","sourceRoot":"","sources":["../../src/dev/tsc-pipe.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,6BAA6B,CAAA;AACnD,MAAM,cAAc,GAAG,6CAA6C,CAAA;AAEpE,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAA;AACjD,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAA;AAClD,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAA;AAChD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAA;AAEjD,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,oCAAoC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC,8BAA8B,CAAC,CAAA;IAC7C,CAAC;IACD,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC,6BAA6B,CAAC,CAAA;IAC5C,CAAC;IACD,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC,kBAAkB,CAAC,CAAA;IAClC,CAAC;IACD,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAA;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACvC,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAA;QAC1C,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,KAAK,IAAI,KAAK,GAAG,EAAE,CAAA;IAC9E,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAmB;IACzC,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;QACxC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAA;QAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAChC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAA;QAC1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,SAAQ;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;YAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAA;QAChD,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;QACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type * as t from '@babel/types';
2
+ import type { RegistrationTarget } from './types.js';
3
+ /**
4
+ * Find the nearest *.module.ts file by walking up from targetDir toward src/.
5
+ * Prefers a module matching the directory name (e.g. user/ → user.module.ts).
6
+ * Pass `excludeFile` to skip a specific path (e.g. a module file that was just generated).
7
+ */
8
+ export declare function findParentModule(targetDir: string, excludeFile?: string): string | null;
9
+ /**
10
+ * Register a class in a parent module file:
11
+ * 1. Add an import statement
12
+ * 2. Push the class name into the appropriate @Module({}) array
13
+ */
14
+ export declare function registerInModule(modulePath: string, className: string, generatedFilePath: string, target: RegistrationTarget, dryRun: boolean): Promise<string | null>;
15
+ /**
16
+ * Walk the Babel AST to find the @Module({...}) decorator and push className
17
+ * into the specified array property (imports/controllers/providers).
18
+ */
19
+ export declare function addToModuleDecorator(ast: t.Program, target: RegistrationTarget, className: string): boolean;
20
+ //# sourceMappingURL=module-updater.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-updater.d.ts","sourceRoot":"","sources":["../../src/generate/module-updater.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAA;AAEtC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAGpD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAmBvF;AAiCD;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EACzB,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyCxB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAkB3G"}
@@ -0,0 +1,158 @@
1
+ import { existsSync, readdirSync, readFileSync } from 'node:fs';
2
+ import { dirname, join, relative } from 'node:path';
3
+ import { generateCode, parseModule } from 'magicast';
4
+ import { logger } from '../utils/logger.js';
5
+ /**
6
+ * Find the nearest *.module.ts file by walking up from targetDir toward src/.
7
+ * Prefers a module matching the directory name (e.g. user/ → user.module.ts).
8
+ * Pass `excludeFile` to skip a specific path (e.g. a module file that was just generated).
9
+ */
10
+ export function findParentModule(targetDir, excludeFile) {
11
+ const srcRoot = findSrcRoot(targetDir);
12
+ if (!srcRoot)
13
+ return null;
14
+ // Walk up from targetDir toward src/
15
+ let current = targetDir;
16
+ while (current.length >= srcRoot.length) {
17
+ const moduleFile = findModuleInDir(current, excludeFile);
18
+ if (moduleFile && moduleFile !== excludeFile)
19
+ return moduleFile;
20
+ const parent = dirname(current);
21
+ if (parent === current)
22
+ break;
23
+ current = parent;
24
+ }
25
+ // Fallback: check src/app/app.module.ts (common layout)
26
+ const appModuleFallback = join(srcRoot, 'app', 'app.module.ts');
27
+ if (existsSync(appModuleFallback) && appModuleFallback !== excludeFile)
28
+ return appModuleFallback;
29
+ return null;
30
+ }
31
+ function findSrcRoot(from) {
32
+ let current = from;
33
+ while (current !== dirname(current)) {
34
+ if (current.endsWith('/src') || current.endsWith('\\src'))
35
+ return current;
36
+ try {
37
+ if (readdirSync(current).includes('src'))
38
+ return join(current, 'src');
39
+ }
40
+ catch {
41
+ // Directory may not exist yet (dry-run or target being created)
42
+ }
43
+ current = dirname(current);
44
+ }
45
+ return null;
46
+ }
47
+ function findModuleInDir(dir, excludeFile) {
48
+ let files;
49
+ try {
50
+ files = readdirSync(dir);
51
+ }
52
+ catch {
53
+ return null;
54
+ }
55
+ const modules = files.filter((f) => f.endsWith('.module.ts') && join(dir, f) !== excludeFile);
56
+ if (modules.length === 0)
57
+ return null;
58
+ if (modules.length === 1)
59
+ return join(dir, modules[0]);
60
+ // Prefer module matching directory name
61
+ const dirName = dir.split(/[/\\]/).pop();
62
+ const preferred = modules.find((f) => f === `${dirName}.module.ts`);
63
+ return join(dir, preferred ?? modules[0]);
64
+ }
65
+ /**
66
+ * Register a class in a parent module file:
67
+ * 1. Add an import statement
68
+ * 2. Push the class name into the appropriate @Module({}) array
69
+ */
70
+ export async function registerInModule(modulePath, className, generatedFilePath, target, dryRun) {
71
+ const displayPath = relative(process.cwd(), modulePath);
72
+ try {
73
+ const source = readFileSync(modulePath, 'utf-8');
74
+ const mod = parseModule(source, { sourceFileName: modulePath });
75
+ // Compute relative import path (with .js extension)
76
+ const fromDir = dirname(modulePath);
77
+ let rel = relative(fromDir, generatedFilePath).replace(/\.ts$/, '.js');
78
+ if (!rel.startsWith('.'))
79
+ rel = `./${rel}`;
80
+ // Add import via magicast
81
+ mod.imports.$add({ from: rel, imported: className });
82
+ // Find and modify @Module decorator via AST.
83
+ // magicast types $ast as Node (the babel AST union); parseModule always
84
+ // returns a Program at runtime, so the cast is safe.
85
+ const modified = addToModuleDecorator(mod.$ast, target, className);
86
+ if (!modified) {
87
+ logger.warn(` Could not find @Module ${target} array in ${displayPath}. Register ${className} manually.`);
88
+ return null;
89
+ }
90
+ const { code } = generateCode(mod);
91
+ if (dryRun) {
92
+ logger.info(` UPDATE ${displayPath}`);
93
+ logger.info(` + import { ${className} } from '${rel}'`);
94
+ logger.info(` + ${target}: [..., ${className}]`);
95
+ return modulePath;
96
+ }
97
+ const { writeFileSync } = await import('node:fs');
98
+ writeFileSync(modulePath, code, 'utf-8');
99
+ logger.success(` UPDATE ${displayPath}`);
100
+ return modulePath;
101
+ }
102
+ catch (err) {
103
+ logger.warn(` Could not update ${displayPath}. Register ${className} manually.`);
104
+ return null;
105
+ }
106
+ }
107
+ /**
108
+ * Walk the Babel AST to find the @Module({...}) decorator and push className
109
+ * into the specified array property (imports/controllers/providers).
110
+ */
111
+ export function addToModuleDecorator(ast, target, className) {
112
+ for (const node of ast.body) {
113
+ const classNode = node.type === 'ExportNamedDeclaration' ? node.declaration : node;
114
+ if (classNode?.type !== 'ClassDeclaration')
115
+ continue;
116
+ for (const decorator of classNode.decorators ?? []) {
117
+ if (decorator.expression.type !== 'CallExpression')
118
+ continue;
119
+ const callee = decorator.expression.callee;
120
+ if (callee.type !== 'Identifier' || callee.name !== 'Module')
121
+ continue;
122
+ const arg = decorator.expression.arguments[0];
123
+ if (!arg || arg.type !== 'ObjectExpression')
124
+ continue;
125
+ return addToArrayProperty(arg, target, className);
126
+ }
127
+ }
128
+ return false;
129
+ }
130
+ /**
131
+ * Find or create the target array property in the @Module({}) ObjectExpression
132
+ * and append the className identifier.
133
+ */
134
+ function addToArrayProperty(objExpr, propertyName, className) {
135
+ const prop = objExpr.properties.find((p) => p.type === 'ObjectProperty' && p.key.type === 'Identifier' && p.key.name === propertyName);
136
+ if (prop && prop.value.type === 'ArrayExpression') {
137
+ const exists = prop.value.elements.some((el) => el?.type === 'Identifier' && el.name === className);
138
+ if (!exists) {
139
+ prop.value.elements.push({ type: 'Identifier', name: className });
140
+ }
141
+ return true;
142
+ }
143
+ if (!prop) {
144
+ objExpr.properties.push({
145
+ type: 'ObjectProperty',
146
+ key: { type: 'Identifier', name: propertyName },
147
+ value: {
148
+ type: 'ArrayExpression',
149
+ elements: [{ type: 'Identifier', name: className }],
150
+ },
151
+ computed: false,
152
+ shorthand: false,
153
+ });
154
+ return true;
155
+ }
156
+ return false;
157
+ }
158
+ //# sourceMappingURL=module-updater.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-updater.js","sourceRoot":"","sources":["../../src/generate/module-updater.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { GenerateOptions } from './types.js';
2
+ export declare function runGenerate(options: GenerateOptions): Promise<void>;
3
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/generate/runner.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAmB,eAAe,EAAiB,MAAM,YAAY,CAAA;AAEjF,wBAAsB,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAuFzE"}
@@ -0,0 +1,130 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { join, resolve } from 'node:path';
3
+ import { resolveSchematic, isResourceSchematic, listSchematics } from './schematics.js';
4
+ import { findParentModule, registerInModule } from './module-updater.js';
5
+ import { toKebabCase, toPascalCase } from '../utils/naming.js';
6
+ import { writeGeneratedFiles } from '../utils/writer.js';
7
+ import { formatFiles } from '../utils/format.js';
8
+ import { logger } from '../utils/logger.js';
9
+ import { resourceModuleTemplate, resourceControllerTemplate, resourceServiceTemplate } from './templates/resource.js';
10
+ export async function runGenerate(options) {
11
+ const { name, path, flat = false, dryRun = false } = options;
12
+ // Validate project structure
13
+ const srcDir = resolve(process.cwd(), 'src');
14
+ if (!existsSync(srcDir)) {
15
+ logger.error('Not a MiiaJS project (no src/ found). Run from project root.');
16
+ process.exit(1);
17
+ }
18
+ // Resolve schematic
19
+ const schematic = resolveSchematic(options.schematic);
20
+ if (!schematic) {
21
+ logger.error(`Unknown schematic "${options.schematic}". Available:`);
22
+ for (const s of listSchematics()) {
23
+ const aliases = s.aliases.length ? ` (${s.aliases.join(', ')})` : '';
24
+ logger.info(` ${s.name}${aliases}`);
25
+ }
26
+ process.exit(1);
27
+ }
28
+ // Parse name (supports "auth/user" → path=auth, name=user)
29
+ const parts = name.split('/');
30
+ const artifactName = parts.pop();
31
+ const extraPath = parts.join('/');
32
+ const fileName = toKebabCase(artifactName);
33
+ const className = toPascalCase(artifactName);
34
+ // Resolve target directory
35
+ let targetDir = srcDir;
36
+ if (path)
37
+ targetDir = join(targetDir, path);
38
+ if (extraPath)
39
+ targetDir = join(targetDir, extraPath);
40
+ if (dryRun) {
41
+ logger.info('DRY RUN - no files will be written\n');
42
+ }
43
+ if (isResourceSchematic(schematic)) {
44
+ await generateResource({ fileName, className, targetDir, dryRun, rawName: name });
45
+ }
46
+ else {
47
+ // Slash in name implies the user chose the directory - don't nest further
48
+ const useFlat = flat || extraPath.length > 0;
49
+ const fileDir = useFlat ? targetDir : join(targetDir, fileName);
50
+ const ctx = {
51
+ rawName: name,
52
+ className,
53
+ fileName,
54
+ targetDir: fileDir,
55
+ schematic: schematic.name,
56
+ dryRun,
57
+ };
58
+ const filePath = join(fileDir, `${fileName}${schematic.fileSuffix}.ts`);
59
+ const content = schematic.template(ctx);
60
+ const result = await writeGeneratedFiles([{ path: filePath, content }], { dryRun });
61
+ if (result.skipped.length > 0) {
62
+ process.exit(1);
63
+ }
64
+ // Auto-register in parent module
65
+ let modifiedModule = null;
66
+ if (schematic.registrationTarget && result.created.length > 0) {
67
+ const classWithSuffix = getClassNameWithSuffix(className, schematic.name);
68
+ const parentModule = findParentModule(fileDir, filePath);
69
+ if (parentModule) {
70
+ modifiedModule = await registerInModule(parentModule, classWithSuffix, filePath, schematic.registrationTarget, dryRun);
71
+ }
72
+ else {
73
+ logger.warn(` No parent module found. Register ${classWithSuffix} manually.`);
74
+ }
75
+ }
76
+ // Format generated + modified files
77
+ if (!dryRun && result.created.length > 0) {
78
+ const toFormat = [...result.created, ...(modifiedModule ? [modifiedModule] : [])];
79
+ await formatFiles(toFormat, process.cwd());
80
+ }
81
+ }
82
+ }
83
+ async function generateResource(opts) {
84
+ const { fileName, className, targetDir, dryRun, rawName } = opts;
85
+ const resourceDir = join(targetDir, fileName);
86
+ const ctx = {
87
+ rawName,
88
+ className,
89
+ fileName,
90
+ targetDir: resourceDir,
91
+ schematic: 'resource',
92
+ dryRun,
93
+ };
94
+ const files = [
95
+ { path: join(resourceDir, `${fileName}.module.ts`), content: resourceModuleTemplate(ctx) },
96
+ { path: join(resourceDir, `${fileName}.controller.ts`), content: resourceControllerTemplate(ctx) },
97
+ { path: join(resourceDir, `${fileName}.service.ts`), content: resourceServiceTemplate(ctx) },
98
+ ];
99
+ const result = await writeGeneratedFiles(files, { dryRun });
100
+ if (result.skipped.length > 0) {
101
+ process.exit(1);
102
+ }
103
+ // Register the resource module in parent module's imports
104
+ let modifiedModule = null;
105
+ if (result.created.length > 0) {
106
+ const modulePath = files[0].path;
107
+ const moduleClassName = `${className}Module`;
108
+ const parentModule = findParentModule(targetDir, modulePath);
109
+ if (parentModule) {
110
+ modifiedModule = await registerInModule(parentModule, moduleClassName, modulePath, 'imports', dryRun);
111
+ }
112
+ else {
113
+ logger.warn(` No parent module found. Register ${moduleClassName} manually.`);
114
+ }
115
+ }
116
+ if (!dryRun && result.created.length > 0) {
117
+ const toFormat = [...result.created, ...(modifiedModule ? [modifiedModule] : [])];
118
+ await formatFiles(toFormat, process.cwd());
119
+ }
120
+ }
121
+ function getClassNameWithSuffix(className, schematic) {
122
+ const suffixMap = {
123
+ module: 'Module',
124
+ controller: 'Controller',
125
+ service: 'Service',
126
+ guard: 'Guard',
127
+ };
128
+ return `${className}${suffixMap[schematic] ?? ''}`;
129
+ }
130
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/generate/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { SchematicDefinition, SchematicName } from './types.js';
2
+ export declare function resolveSchematic(nameOrAlias: string): SchematicDefinition | 'resource' | undefined;
3
+ export declare function isResourceSchematic(result: SchematicDefinition | 'resource' | undefined): result is 'resource';
4
+ export declare function listSchematics(): Array<{
5
+ name: SchematicName | 'resource';
6
+ aliases: string[];
7
+ }>;
8
+ //# sourceMappingURL=schematics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schematics.d.ts","sourceRoot":"","sources":["../../src/generate/schematics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAwDpE,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,GAAG,UAAU,GAAG,SAAS,CAGlG;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,IAAI,UAAU,CAE9G;AAED,wBAAgB,cAAc,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,aAAa,GAAG,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAO/F"}
@@ -0,0 +1,68 @@
1
+ import { moduleTemplate } from './templates/module.js';
2
+ import { controllerTemplate } from './templates/controller.js';
3
+ import { serviceTemplate } from './templates/service.js';
4
+ import { middlewareTemplate } from './templates/middleware.js';
5
+ import { guardTemplate } from './templates/guard.js';
6
+ const schematics = [
7
+ {
8
+ name: 'module',
9
+ aliases: ['m'],
10
+ fileSuffix: '.module',
11
+ template: moduleTemplate,
12
+ registrationTarget: 'imports',
13
+ },
14
+ {
15
+ name: 'controller',
16
+ aliases: ['c'],
17
+ fileSuffix: '.controller',
18
+ template: controllerTemplate,
19
+ registrationTarget: 'controllers',
20
+ },
21
+ {
22
+ name: 'service',
23
+ aliases: ['s'],
24
+ fileSuffix: '.service',
25
+ template: serviceTemplate,
26
+ registrationTarget: 'providers',
27
+ },
28
+ {
29
+ name: 'middleware',
30
+ aliases: [],
31
+ fileSuffix: '.middleware',
32
+ template: middlewareTemplate,
33
+ registrationTarget: null,
34
+ },
35
+ {
36
+ name: 'guard',
37
+ aliases: [],
38
+ fileSuffix: '.guard',
39
+ template: guardTemplate,
40
+ registrationTarget: 'providers',
41
+ },
42
+ ];
43
+ const byNameOrAlias = new Map();
44
+ for (const s of schematics) {
45
+ byNameOrAlias.set(s.name, s);
46
+ for (const alias of s.aliases) {
47
+ byNameOrAlias.set(alias, s);
48
+ }
49
+ }
50
+ /** Also recognizes "resource" / "r" - handled as composite in the runner */
51
+ const RESOURCE_ALIASES = new Set(['resource', 'r']);
52
+ export function resolveSchematic(nameOrAlias) {
53
+ if (RESOURCE_ALIASES.has(nameOrAlias))
54
+ return 'resource';
55
+ return byNameOrAlias.get(nameOrAlias);
56
+ }
57
+ export function isResourceSchematic(result) {
58
+ return result === 'resource';
59
+ }
60
+ export function listSchematics() {
61
+ const list = schematics.map((s) => ({
62
+ name: s.name,
63
+ aliases: s.aliases,
64
+ }));
65
+ list.push({ name: 'resource', aliases: ['r'] });
66
+ return list;
67
+ }
68
+ //# sourceMappingURL=schematics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schematics.js","sourceRoot":"","sources":["../../src/generate/schematics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD,MAAM,UAAU,GAA0B;IACxC;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,CAAC,GAAG,CAAC;QACd,UAAU,EAAE,SAAS;QACrB,QAAQ,EAAE,cAAc;QACxB,kBAAkB,EAAE,SAAS;KAC9B;IACD;QACE,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,CAAC,GAAG,CAAC;QACd,UAAU,EAAE,aAAa;QACzB,QAAQ,EAAE,kBAAkB;QAC5B,kBAAkB,EAAE,aAAa;KAClC;IACD;QACE,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,CAAC,GAAG,CAAC;QACd,UAAU,EAAE,UAAU;QACtB,QAAQ,EAAE,eAAe;QACzB,kBAAkB,EAAE,WAAW;KAChC;IACD;QACE,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,aAAa;QACzB,QAAQ,EAAE,kBAAkB;QAC5B,kBAAkB,EAAE,IAAI;KACzB;IACD;QACE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,QAAQ;QACpB,QAAQ,EAAE,aAAa;QACvB,kBAAkB,EAAE,WAAW;KAChC;CACF,CAAA;AAED,MAAM,aAAa,GAAG,IAAI,GAAG,EAA+B,CAAA;AAC5D,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;IAC3B,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAC5B,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9B,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IAC7B,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAS,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAA;AAE3D,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,IAAI,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC;QAAE,OAAO,UAAU,CAAA;IACxD,OAAO,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAoD;IACtF,OAAO,MAAM,KAAK,UAAU,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,IAAI,GAAmE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClG,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,OAAO,EAAE,CAAC,CAAC,OAAO;KACnB,CAAC,CAAC,CAAA;IACH,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC/C,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { GenerateContext } from '../types.js';
2
+ export declare function controllerTemplate(ctx: GenerateContext): string;
3
+ //# sourceMappingURL=controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../src/generate/templates/controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAY/D"}
@@ -0,0 +1,14 @@
1
+ export function controllerTemplate(ctx) {
2
+ return `import { Controller, Get } from '@miiajs/core'
3
+ import type { RequestContext } from '@miiajs/core'
4
+
5
+ @Controller('/${ctx.fileName}')
6
+ export class ${ctx.className}Controller {
7
+ @Get()
8
+ findAll(ctx: RequestContext) {
9
+ return []
10
+ }
11
+ }
12
+ `;
13
+ }
14
+ //# sourceMappingURL=controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../../src/generate/templates/controller.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,kBAAkB,CAAC,GAAoB;IACrD,OAAO;;;gBAGO,GAAG,CAAC,QAAQ;eACb,GAAG,CAAC,SAAS;;;;;;CAM3B,CAAA;AACD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { GenerateContext } from '../types.js';
2
+ export declare function guardTemplate(ctx: GenerateContext): string;
3
+ //# sourceMappingURL=guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../../src/generate/templates/guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD,wBAAgB,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAW1D"}
@@ -0,0 +1,13 @@
1
+ export function guardTemplate(ctx) {
2
+ return `import { Injectable } from '@miiajs/core'
3
+ import type { CanActivate, RequestContext } from '@miiajs/core'
4
+
5
+ @Injectable()
6
+ export class ${ctx.className}Guard implements CanActivate {
7
+ canActivate(ctx: RequestContext): boolean {
8
+ return true
9
+ }
10
+ }
11
+ `;
12
+ }
13
+ //# sourceMappingURL=guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.js","sourceRoot":"","sources":["../../../src/generate/templates/guard.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,aAAa,CAAC,GAAoB;IAChD,OAAO;;;;eAIM,GAAG,CAAC,SAAS;;;;;CAK3B,CAAA;AACD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { GenerateContext } from '../types.js';
2
+ export declare function middlewareTemplate(ctx: GenerateContext): string;
3
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/generate/templates/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAGlD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAQ/D"}
@@ -0,0 +1,11 @@
1
+ import { lowerFirst } from '../../utils/naming.js';
2
+ export function middlewareTemplate(ctx) {
3
+ const fnName = `${lowerFirst(ctx.className)}Middleware`;
4
+ return `import type { Middleware } from '@miiajs/core'
5
+
6
+ export const ${fnName}: Middleware = async (ctx, next) => {
7
+ await next()
8
+ }
9
+ `;
10
+ }
11
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/generate/templates/middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAElD,MAAM,UAAU,kBAAkB,CAAC,GAAoB;IACrD,MAAM,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAA;IACvD,OAAO;;eAEM,MAAM;;;CAGpB,CAAA;AACD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { GenerateContext } from '../types.js';
2
+ export declare function moduleTemplate(ctx: GenerateContext): string;
3
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/generate/templates/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAM3D"}
@@ -0,0 +1,8 @@
1
+ export function moduleTemplate(ctx) {
2
+ return `import { Module } from '@miiajs/core'
3
+
4
+ @Module({})
5
+ export class ${ctx.className}Module {}
6
+ `;
7
+ }
8
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../../src/generate/templates/module.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,cAAc,CAAC,GAAoB;IACjD,OAAO;;;eAGM,GAAG,CAAC,SAAS;CAC3B,CAAA;AACD,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { GenerateContext } from '../types.js';
2
+ export declare function resourceModuleTemplate(ctx: GenerateContext): string;
3
+ export declare function resourceControllerTemplate(ctx: GenerateContext): string;
4
+ export declare function resourceServiceTemplate(ctx: GenerateContext): string;
5
+ //# sourceMappingURL=resource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../../src/generate/templates/resource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAGlD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAWnE;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAoCvE;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA0BpE"}