@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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Ruslan Matiushev
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,19 @@
1
+ # @miiajs/cli
2
+
3
+ > ⚠️ **Experimental** - 49 internal tests pass, but the `miia new` scaffold has not been exercised by real `miia new my-app` runs in production projects. Track promotion to `beta` on the [roadmap](https://miiajs.com/docs/roadmap).
4
+
5
+ CLI for developing, building, and scaffolding MiiaJS applications.
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ npm install -D @miiajs/cli
11
+ ```
12
+
13
+ ## Documentation
14
+
15
+ **[miiajs.com/docs/packages/cli](https://miiajs.com/docs/packages/cli)**
16
+
17
+ ## License
18
+
19
+ MIT
package/dist/bin.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":""}
package/dist/bin.js ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import { runMain } from 'citty';
3
+ import { main } from './cli.js';
4
+ runMain(main);
5
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAE/B,OAAO,CAAC,IAAI,CAAC,CAAA"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare const main: import("citty").CommandDef<import("citty").ArgsDef>;
2
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI,qDAcf,CAAA"}
package/dist/cli.js ADDED
@@ -0,0 +1,17 @@
1
+ import { defineCommand } from 'citty';
2
+ export const main = defineCommand({
3
+ meta: {
4
+ name: 'miia',
5
+ description: 'MiiaJS CLI - build, develop, and scaffold MiiaJS applications',
6
+ },
7
+ subCommands: {
8
+ dev: () => import('./commands/dev.js').then((m) => m.default),
9
+ build: () => import('./commands/build.js').then((m) => m.default),
10
+ start: () => import('./commands/start.js').then((m) => m.default),
11
+ check: () => import('./commands/check.js').then((m) => m.default),
12
+ new: () => import('./commands/new.js').then((m) => m.default),
13
+ generate: () => import('./commands/generate.js').then((m) => m.default),
14
+ g: () => import('./commands/generate.js').then((m) => m.default),
15
+ },
16
+ });
17
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAErC,MAAM,CAAC,MAAM,IAAI,GAAG,aAAa,CAAC;IAChC,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,+DAA+D;KAC7E;IACD,WAAW,EAAE;QACX,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7D,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACjE,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACjE,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACjE,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7D,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACvE,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;KACjE;CACF,CAAC,CAAA"}
@@ -0,0 +1,9 @@
1
+ declare const _default: import("citty").CommandDef<{
2
+ readonly runtime: {
3
+ readonly type: "string";
4
+ readonly description: "Runtime to use (bun, deno, node)";
5
+ readonly alias: "r";
6
+ };
7
+ }>;
8
+ export default _default;
9
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":";;;;;;;AAOA,wBAoCE"}
@@ -0,0 +1,39 @@
1
+ import { defineCommand } from 'citty';
2
+ import { execa } from 'execa';
3
+ import { tryResolveRuntime } from '../runtime/detect.js';
4
+ import { getBuildCommand } from '../runtime/commands.js';
5
+ import { preflight } from '../utils/preflight.js';
6
+ import { logger } from '../utils/logger.js';
7
+ export default defineCommand({
8
+ meta: {
9
+ name: 'build',
10
+ description: 'Build the project (type-check for Bun/Deno, compile for Node)',
11
+ },
12
+ args: {
13
+ runtime: {
14
+ type: 'string',
15
+ description: 'Runtime to use (bun, deno, node)',
16
+ alias: 'r',
17
+ },
18
+ },
19
+ async run({ args }) {
20
+ const { runtime, source } = tryResolveRuntime(process.cwd(), args.runtime);
21
+ logger.info(`Runtime: ${runtime} (${source})`);
22
+ if (!preflight(runtime, 'build')) {
23
+ process.exit(1);
24
+ }
25
+ const cmd = getBuildCommand(runtime);
26
+ logger.info(runtime === 'node' ? 'Compiling TypeScript...' : 'Type-checking...');
27
+ const result = await execa(cmd.command, cmd.args, {
28
+ cwd: process.cwd(),
29
+ stdio: 'inherit',
30
+ reject: false,
31
+ });
32
+ if (result.exitCode !== 0) {
33
+ logger.error('Build failed');
34
+ process.exit(1);
35
+ }
36
+ logger.success('Build complete');
37
+ },
38
+ });
39
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAE3C,eAAe,aAAa,CAAC;IAC3B,IAAI,EAAE;QACJ,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,+DAA+D;KAC7E;IACD,IAAI,EAAE;QACJ,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,kCAAkC;YAC/C,KAAK,EAAE,GAAG;SACX;KACF;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QAC1E,MAAM,CAAC,IAAI,CAAC,YAAY,OAAO,KAAK,MAAM,GAAG,CAAC,CAAA;QAE9C,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;QACpC,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAA;QAEhF,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE;YAChD,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,KAAK;SACd,CAAC,CAAA;QAEF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAClC,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ declare const _default: import("citty").CommandDef<import("citty").ArgsDef>;
2
+ export default _default;
3
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":";AAKA,wBAyBE"}
@@ -0,0 +1,27 @@
1
+ import { defineCommand } from 'citty';
2
+ import { execa } from 'execa';
3
+ import { preflight } from '../utils/preflight.js';
4
+ import { logger } from '../utils/logger.js';
5
+ export default defineCommand({
6
+ meta: {
7
+ name: 'check',
8
+ description: 'Type-check the project (tsc --noEmit)',
9
+ },
10
+ async run() {
11
+ if (!preflight('node', 'check')) {
12
+ process.exit(1);
13
+ }
14
+ logger.info('Type-checking...');
15
+ const result = await execa('tsc', ['--noEmit'], {
16
+ cwd: process.cwd(),
17
+ stdio: 'inherit',
18
+ reject: false,
19
+ });
20
+ if (result.exitCode !== 0) {
21
+ logger.error('Type-check failed');
22
+ process.exit(1);
23
+ }
24
+ logger.success('No type errors found');
25
+ },
26
+ });
27
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAE3C,eAAe,aAAa,CAAC;IAC3B,IAAI,EAAE;QACJ,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,uCAAuC;KACrD;IACD,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAE/B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE;YAC9C,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,KAAK;SACd,CAAC,CAAA;QAEF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;YACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAA;IACxC,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,18 @@
1
+ declare const _default: import("citty").CommandDef<{
2
+ readonly runtime: {
3
+ readonly type: "string";
4
+ readonly description: "Runtime to use (bun, deno, node)";
5
+ readonly alias: "r";
6
+ };
7
+ readonly entry: {
8
+ readonly type: "string";
9
+ readonly description: "Entry point file";
10
+ readonly default: "src/main.ts";
11
+ };
12
+ readonly 'env-file': {
13
+ readonly type: "string";
14
+ readonly description: "Path to .env file";
15
+ };
16
+ }>;
17
+ export default _default;
18
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAMA,wBAqCE"}
@@ -0,0 +1,42 @@
1
+ import { defineCommand } from 'citty';
2
+ import { tryResolveRuntime } from '../runtime/detect.js';
3
+ import { startDev } from '../dev/orchestrator.js';
4
+ import { preflight } from '../utils/preflight.js';
5
+ import { logger } from '../utils/logger.js';
6
+ export default defineCommand({
7
+ meta: {
8
+ name: 'dev',
9
+ description: 'Start development server with hot reload and type checking',
10
+ },
11
+ args: {
12
+ runtime: {
13
+ type: 'string',
14
+ description: 'Runtime to use (bun, deno, node)',
15
+ alias: 'r',
16
+ },
17
+ entry: {
18
+ type: 'string',
19
+ description: 'Entry point file',
20
+ default: 'src/main.ts',
21
+ },
22
+ 'env-file': {
23
+ type: 'string',
24
+ description: 'Path to .env file',
25
+ },
26
+ },
27
+ run({ args }) {
28
+ const cwd = process.cwd();
29
+ const { runtime, source } = tryResolveRuntime(cwd, args.runtime);
30
+ logger.info(`Detected runtime: ${runtime} (${source})`);
31
+ if (!preflight(runtime, 'dev')) {
32
+ process.exit(1);
33
+ }
34
+ return startDev({
35
+ runtime,
36
+ cwd,
37
+ entry: args.entry,
38
+ envFile: args['env-file'],
39
+ });
40
+ },
41
+ });
42
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAE3C,eAAe,aAAa,CAAC;IAC3B,IAAI,EAAE;QACJ,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,4DAA4D;KAC1E;IACD,IAAI,EAAE;QACJ,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,kCAAkC;YAC/C,KAAK,EAAE,GAAG;SACX;QACD,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,kBAAkB;YAC/B,OAAO,EAAE,aAAa;SACvB;QACD,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,mBAAmB;SACjC;KACF;IACD,GAAG,CAAC,EAAE,IAAI,EAAE;QACV,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;QACzB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QAChE,MAAM,CAAC,IAAI,CAAC,qBAAqB,OAAO,KAAK,MAAM,GAAG,CAAC,CAAA;QAEvD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,OAAO,QAAQ,CAAC;YACd,OAAO;YACP,GAAG;YACH,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;SAC1B,CAAC,CAAA;IACJ,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,28 @@
1
+ declare const _default: import("citty").CommandDef<{
2
+ readonly schematic: {
3
+ readonly type: "positional";
4
+ readonly description: "Schematic: module (m), controller (c), service (s), resource (r), middleware, guard";
5
+ readonly required: false;
6
+ };
7
+ readonly name: {
8
+ readonly type: "positional";
9
+ readonly description: "Name of the artifact (e.g. \"user\" or \"auth/user\")";
10
+ readonly required: false;
11
+ };
12
+ readonly path: {
13
+ readonly type: "string";
14
+ readonly description: "Subdirectory under src/";
15
+ };
16
+ readonly flat: {
17
+ readonly type: "boolean";
18
+ readonly description: "Do not create a subdirectory for the artifact";
19
+ readonly default: false;
20
+ };
21
+ readonly 'dry-run': {
22
+ readonly type: "boolean";
23
+ readonly description: "Preview generated files without writing";
24
+ readonly default: false;
25
+ };
26
+ }>;
27
+ export default _default;
28
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,wBA+DE"}
@@ -0,0 +1,67 @@
1
+ import { defineCommand } from 'citty';
2
+ import * as p from '@clack/prompts';
3
+ import { runGenerate } from '../generate/runner.js';
4
+ export default defineCommand({
5
+ meta: {
6
+ name: 'generate',
7
+ description: 'Generate a MiiaJS artifact (alias: g)',
8
+ },
9
+ args: {
10
+ schematic: {
11
+ type: 'positional',
12
+ description: 'Schematic: module (m), controller (c), service (s), resource (r), middleware, guard',
13
+ required: false,
14
+ },
15
+ name: {
16
+ type: 'positional',
17
+ description: 'Name of the artifact (e.g. "user" or "auth/user")',
18
+ required: false,
19
+ },
20
+ path: {
21
+ type: 'string',
22
+ description: 'Subdirectory under src/',
23
+ },
24
+ flat: {
25
+ type: 'boolean',
26
+ description: 'Do not create a subdirectory for the artifact',
27
+ default: false,
28
+ },
29
+ 'dry-run': {
30
+ type: 'boolean',
31
+ description: 'Preview generated files without writing',
32
+ default: false,
33
+ },
34
+ },
35
+ async run({ args }) {
36
+ let schematic = args.schematic;
37
+ let name = args.name;
38
+ if (!schematic) {
39
+ const answer = await p.text({
40
+ message: 'Which schematic?',
41
+ placeholder: 'module | controller | service | resource | middleware | guard',
42
+ validate: (v) => (!v?.trim() ? 'Required' : undefined),
43
+ });
44
+ if (p.isCancel(answer))
45
+ return process.exit(0);
46
+ schematic = answer.trim();
47
+ }
48
+ if (!name) {
49
+ const answer = await p.text({
50
+ message: 'Artifact name:',
51
+ placeholder: 'user',
52
+ validate: (v) => (!v?.trim() ? 'Required' : undefined),
53
+ });
54
+ if (p.isCancel(answer))
55
+ return process.exit(0);
56
+ name = answer.trim();
57
+ }
58
+ await runGenerate({
59
+ schematic,
60
+ name,
61
+ path: args.path,
62
+ flat: args.flat,
63
+ dryRun: args['dry-run'],
64
+ });
65
+ },
66
+ });
67
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAEnD,eAAe,aAAa,CAAC;IAC3B,IAAI,EAAE;QACJ,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,uCAAuC;KACrD;IACD,IAAI,EAAE;QACJ,SAAS,EAAE;YACT,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,qFAAqF;YAClG,QAAQ,EAAE,KAAK;SAChB;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,mDAAmD;YAChE,QAAQ,EAAE,KAAK;SAChB;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,yBAAyB;SACvC;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,+CAA+C;YAC5D,OAAO,EAAE,KAAK;SACf;QACD,SAAS,EAAE;YACT,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,yCAAyC;YACtD,OAAO,EAAE,KAAK;SACf;KACF;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,IAAI,SAAS,GAAG,IAAI,CAAC,SAA+B,CAAA;QACpD,IAAI,IAAI,GAAG,IAAI,CAAC,IAA0B,CAAA;QAE1C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC;gBAC1B,OAAO,EAAE,kBAAkB;gBAC3B,WAAW,EAAE,+DAA+D;gBAC5E,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;aACvD,CAAC,CAAA;YACF,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAC9C,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;QAC3B,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC;gBAC1B,OAAO,EAAE,gBAAgB;gBACzB,WAAW,EAAE,MAAM;gBACnB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;aACvD,CAAC,CAAA;YACF,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAC9C,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;QACtB,CAAC;QAED,MAAM,WAAW,CAAC;YAChB,SAAS;YACT,IAAI;YACJ,IAAI,EAAE,IAAI,CAAC,IAA0B;YACrC,IAAI,EAAE,IAAI,CAAC,IAAe;YAC1B,MAAM,EAAE,IAAI,CAAC,SAAS,CAAY;SACnC,CAAC,CAAA;IACJ,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,19 @@
1
+ declare const _default: import("citty").CommandDef<{
2
+ readonly name: {
3
+ readonly type: "positional";
4
+ readonly description: "Project name";
5
+ readonly required: false;
6
+ };
7
+ readonly 'dry-run': {
8
+ readonly type: "boolean";
9
+ readonly description: "Preview generated files without writing";
10
+ readonly default: false;
11
+ };
12
+ readonly 'skip-install': {
13
+ readonly type: "boolean";
14
+ readonly description: "Skip dependency installation";
15
+ readonly default: false;
16
+ };
17
+ }>;
18
+ export default _default;
19
+ //# sourceMappingURL=new.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAKA,wBAwCE"}
@@ -0,0 +1,44 @@
1
+ import { defineCommand } from 'citty';
2
+ import { runScaffoldPrompts } from '../scaffold/prompts.js';
3
+ import { scaffoldProject } from '../scaffold/scaffold.js';
4
+ import { logger } from '../utils/logger.js';
5
+ export default defineCommand({
6
+ meta: {
7
+ name: 'new',
8
+ description: 'Create a new MiiaJS project',
9
+ },
10
+ args: {
11
+ name: {
12
+ type: 'positional',
13
+ description: 'Project name',
14
+ required: false,
15
+ },
16
+ 'dry-run': {
17
+ type: 'boolean',
18
+ description: 'Preview generated files without writing',
19
+ default: false,
20
+ },
21
+ 'skip-install': {
22
+ type: 'boolean',
23
+ description: 'Skip dependency installation',
24
+ default: false,
25
+ },
26
+ },
27
+ async run({ args }) {
28
+ const answers = await runScaffoldPrompts(args.name);
29
+ if (!answers) {
30
+ process.exit(0);
31
+ }
32
+ console.log();
33
+ await scaffoldProject({
34
+ name: answers.name,
35
+ runtime: answers.runtime,
36
+ featureIds: answers.featureIds,
37
+ packageManager: answers.packageManager,
38
+ targetDir: answers.name,
39
+ dryRun: args['dry-run'],
40
+ skipInstall: args['skip-install'],
41
+ });
42
+ },
43
+ });
44
+ //# sourceMappingURL=new.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAE3C,eAAe,aAAa,CAAC;IAC3B,IAAI,EAAE;QACJ,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,6BAA6B;KAC3C;IACD,IAAI,EAAE;QACJ,IAAI,EAAE;YACJ,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,cAAc;YAC3B,QAAQ,EAAE,KAAK;SAChB;QACD,SAAS,EAAE;YACT,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,yCAAyC;YACtD,OAAO,EAAE,KAAK;SACf;QACD,cAAc,EAAE;YACd,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,8BAA8B;YAC3C,OAAO,EAAE,KAAK;SACf;KACF;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,IAA0B,CAAC,CAAA;QAEzE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,MAAM,eAAe,CAAC;YACpB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,SAAS,EAAE,OAAO,CAAC,IAAI;YACvB,MAAM,EAAE,IAAI,CAAC,SAAS,CAAY;YAClC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAY;SAC7C,CAAC,CAAA;IACJ,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,23 @@
1
+ declare const _default: import("citty").CommandDef<{
2
+ readonly runtime: {
3
+ readonly type: "string";
4
+ readonly description: "Runtime to use (bun, deno, node)";
5
+ readonly alias: "r";
6
+ };
7
+ readonly entry: {
8
+ readonly type: "string";
9
+ readonly description: "Entry point file (source)";
10
+ readonly default: "src/main.ts";
11
+ };
12
+ readonly dist: {
13
+ readonly type: "string";
14
+ readonly description: "Compiled entry point (for Node)";
15
+ readonly default: "dist/main.js";
16
+ };
17
+ readonly 'env-file': {
18
+ readonly type: "string";
19
+ readonly description: "Path to .env file";
20
+ };
21
+ }>;
22
+ export default _default;
23
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAOA,wBA4CE"}
@@ -0,0 +1,49 @@
1
+ import { defineCommand } from 'citty';
2
+ import { execa } from 'execa';
3
+ import { tryResolveRuntime } from '../runtime/detect.js';
4
+ import { getStartCommand } from '../runtime/commands.js';
5
+ import { preflight } from '../utils/preflight.js';
6
+ import { logger } from '../utils/logger.js';
7
+ export default defineCommand({
8
+ meta: {
9
+ name: 'start',
10
+ description: 'Start the production server',
11
+ },
12
+ args: {
13
+ runtime: {
14
+ type: 'string',
15
+ description: 'Runtime to use (bun, deno, node)',
16
+ alias: 'r',
17
+ },
18
+ entry: {
19
+ type: 'string',
20
+ description: 'Entry point file (source)',
21
+ default: 'src/main.ts',
22
+ },
23
+ dist: {
24
+ type: 'string',
25
+ description: 'Compiled entry point (for Node)',
26
+ default: 'dist/main.js',
27
+ },
28
+ 'env-file': {
29
+ type: 'string',
30
+ description: 'Path to .env file',
31
+ },
32
+ },
33
+ async run({ args }) {
34
+ const cwd = process.cwd();
35
+ const { runtime, source } = tryResolveRuntime(cwd, args.runtime);
36
+ logger.info(`Runtime: ${runtime} (${source})`);
37
+ if (!preflight(runtime, 'start')) {
38
+ process.exit(1);
39
+ }
40
+ const cmd = getStartCommand(runtime, args.entry, args.dist, cwd, args['env-file']);
41
+ logger.info('Starting production server...');
42
+ await execa(cmd.command, cmd.args, {
43
+ cwd,
44
+ stdio: 'inherit',
45
+ env: { ...process.env, ...cmd.env },
46
+ });
47
+ },
48
+ });
49
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAE3C,eAAe,aAAa,CAAC;IAC3B,IAAI,EAAE;QACJ,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,6BAA6B;KAC3C;IACD,IAAI,EAAE;QACJ,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,kCAAkC;YAC/C,KAAK,EAAE,GAAG;SACX;QACD,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,2BAA2B;YACxC,OAAO,EAAE,aAAa;SACvB;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,iCAAiC;YAC9C,OAAO,EAAE,cAAc;SACxB;QACD,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,mBAAmB;SACjC;KACF;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;QACzB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QAChE,MAAM,CAAC,IAAI,CAAC,YAAY,OAAO,KAAK,MAAM,GAAG,CAAC,CAAA;QAE9C,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAA;QAClF,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAA;QAE5C,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE;YACjC,GAAG;YACH,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE;SACpC,CAAC,CAAA;IACJ,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,9 @@
1
+ import type { Runtime } from '../runtime/types.js';
2
+ export interface DevOptions {
3
+ runtime: Runtime;
4
+ cwd: string;
5
+ entry: string;
6
+ envFile?: string;
7
+ }
8
+ export declare function startDev(options: DevOptions): Promise<void>;
9
+ //# sourceMappingURL=orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/dev/orchestrator.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAMD,wBAAsB,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAgFjE"}
@@ -0,0 +1,80 @@
1
+ import { execa } from 'execa';
2
+ import { getDevServerCommand } from '../runtime/commands.js';
3
+ import { pipeTsc } from './tsc-pipe.js';
4
+ import { logger } from '../utils/logger.js';
5
+ const CRASH_WINDOW_MS = 10_000;
6
+ const CRASH_CAP = 5;
7
+ const RESTART_DELAY_MS = 500;
8
+ export async function startDev(options) {
9
+ const { runtime, cwd, entry, envFile } = options;
10
+ let isShuttingDown = false;
11
+ const crashTimestamps = [];
12
+ let serverProcess = null;
13
+ let restartTimer = null;
14
+ const spawnServer = () => {
15
+ const serverCmd = getDevServerCommand(runtime, entry, cwd, envFile);
16
+ const proc = execa(serverCmd.command, serverCmd.args, {
17
+ cwd,
18
+ reject: false,
19
+ stdio: 'inherit',
20
+ env: { ...process.env, NODE_ENV: 'development' },
21
+ });
22
+ serverProcess = proc;
23
+ proc.on('exit', (code, signal) => {
24
+ if (isShuttingDown || signal)
25
+ return;
26
+ if (proc !== serverProcess)
27
+ return;
28
+ const now = Date.now();
29
+ crashTimestamps.push(now);
30
+ while (crashTimestamps.length > 0 && now - crashTimestamps[0] > CRASH_WINDOW_MS) {
31
+ crashTimestamps.shift();
32
+ }
33
+ if (crashTimestamps.length >= CRASH_CAP) {
34
+ logger.error(`Server crashed ${CRASH_CAP} times in ${CRASH_WINDOW_MS / 1000}s, giving up`);
35
+ cleanup();
36
+ return;
37
+ }
38
+ logger.warn(`Server exited (code ${code}), restarting...`);
39
+ restartTimer = setTimeout(() => {
40
+ restartTimer = null;
41
+ if (!isShuttingDown)
42
+ spawnServer();
43
+ }, RESTART_DELAY_MS);
44
+ });
45
+ };
46
+ const tscProcess = execa('tsc', ['--noEmit', '--watch', '--preserveWatchOutput'], {
47
+ cwd,
48
+ reject: false,
49
+ stdout: 'pipe',
50
+ stderr: 'pipe',
51
+ });
52
+ pipeTsc(tscProcess);
53
+ const cleanup = () => {
54
+ if (isShuttingDown)
55
+ return;
56
+ isShuttingDown = true;
57
+ logger.info('Shutting down...');
58
+ if (restartTimer) {
59
+ clearTimeout(restartTimer);
60
+ restartTimer = null;
61
+ }
62
+ tscProcess.kill('SIGTERM');
63
+ serverProcess?.kill('SIGTERM');
64
+ setTimeout(() => {
65
+ tscProcess.kill('SIGKILL');
66
+ serverProcess?.kill('SIGKILL');
67
+ }, 5000).unref();
68
+ };
69
+ process.on('SIGINT', cleanup);
70
+ process.on('SIGTERM', cleanup);
71
+ process.on('SIGHUP', cleanup);
72
+ process.on('exit', cleanup);
73
+ spawnServer();
74
+ const tscResult = await tscProcess;
75
+ if (!isShuttingDown && tscResult.exitCode !== 0 && !tscResult.isTerminated) {
76
+ logger.error('tsc watch exited unexpectedly');
77
+ }
78
+ cleanup();
79
+ }
80
+ //# sourceMappingURL=orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/dev/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAE7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAU3C,MAAM,eAAe,GAAG,MAAM,CAAA;AAC9B,MAAM,SAAS,GAAG,CAAC,CAAA;AACnB,MAAM,gBAAgB,GAAG,GAAG,CAAA;AAE5B,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAmB;IAChD,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IAEhD,IAAI,cAAc,GAAG,KAAK,CAAA;IAC1B,MAAM,eAAe,GAAa,EAAE,CAAA;IACpC,IAAI,aAAa,GAAyB,IAAI,CAAA;IAC9C,IAAI,YAAY,GAA0B,IAAI,CAAA;IAE9C,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;QACnE,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,EAAE;YACpD,GAAG;YACH,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE;SACjD,CAAC,CAAA;QACF,aAAa,GAAG,IAAI,CAAA;QAEpB,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAC/B,IAAI,cAAc,IAAI,MAAM;gBAAE,OAAM;YACpC,IAAI,IAAI,KAAK,aAAa;gBAAE,OAAM;YAElC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YACtB,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACzB,OAAO,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,EAAE,CAAC;gBAChF,eAAe,CAAC,KAAK,EAAE,CAAA;YACzB,CAAC;YAED,IAAI,eAAe,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;gBACxC,MAAM,CAAC,KAAK,CAAC,kBAAkB,SAAS,aAAa,eAAe,GAAG,IAAI,cAAc,CAAC,CAAA;gBAC1F,OAAO,EAAE,CAAA;gBACT,OAAM;YACR,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,uBAAuB,IAAI,kBAAkB,CAAC,CAAA;YAC1D,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC7B,YAAY,GAAG,IAAI,CAAA;gBACnB,IAAI,CAAC,cAAc;oBAAE,WAAW,EAAE,CAAA;YACpC,CAAC,EAAE,gBAAgB,CAAC,CAAA;QACtB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,uBAAuB,CAAC,EAAE;QAChF,GAAG;QACH,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,MAAM;KACf,CAAC,CAAA;IAEF,OAAO,CAAC,UAAU,CAAC,CAAA;IAEnB,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,IAAI,cAAc;YAAE,OAAM;QAC1B,cAAc,GAAG,IAAI,CAAA;QACrB,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAC/B,IAAI,YAAY,EAAE,CAAC;YACjB,YAAY,CAAC,YAAY,CAAC,CAAA;YAC1B,YAAY,GAAG,IAAI,CAAA;QACrB,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC1B,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;QAE9B,UAAU,CAAC,GAAG,EAAE;YACd,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAC1B,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;QAChC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAA;IAClB,CAAC,CAAA;IAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC7B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IAC9B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC7B,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAE3B,WAAW,EAAE,CAAA;IAEb,MAAM,SAAS,GAAG,MAAM,UAAU,CAAA;IAClC,IAAI,CAAC,cAAc,IAAI,SAAS,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;QAC3E,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAC/C,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ResultPromise } from 'execa';
2
+ export declare function pipeTsc(proc: ResultPromise): void;
3
+ //# sourceMappingURL=tsc-pipe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsc-pipe.d.ts","sourceRoot":"","sources":["../../src/dev/tsc-pipe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAiC1C,wBAAgB,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAgBjD"}