@danceroutine/tango-codegen 1.11.1 → 1.11.3

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 (100) hide show
  1. package/dist/chunk-D7D4PA-g.js +13 -0
  2. package/dist/commands/index.d.ts +2 -6
  3. package/dist/commands/index.js +2 -5
  4. package/dist/{commands-CFAq4wXC.js → commands-Bl0tiyaE.js} +49 -58
  5. package/dist/commands-Bl0tiyaE.js.map +1 -0
  6. package/dist/domain/index.d.ts +2 -4
  7. package/dist/domain/index.js +7 -1
  8. package/dist/domain/index.js.map +1 -0
  9. package/dist/frameworks/index.d.ts +2 -12
  10. package/dist/frameworks/index.js +2 -3
  11. package/dist/{frameworks-BTcP3d9Q.js → frameworks-B_un20qv.js} +116 -158
  12. package/dist/frameworks-B_un20qv.js.map +1 -0
  13. package/dist/generators/index.d.ts +2 -12
  14. package/dist/generators/index.js +3 -4
  15. package/dist/{generators-DuAuGNR2.js → generators-D7GoehXD.js} +39 -40
  16. package/dist/generators-D7GoehXD.js.map +1 -0
  17. package/dist/index-DDt-Xe7q.d.ts +201 -0
  18. package/dist/index-DM7Ade2V.d.ts +43 -0
  19. package/dist/index-XicN3qCI.d.ts +82 -0
  20. package/dist/index-sKndVpFf.d.ts +26 -0
  21. package/dist/index.d.ts +18 -13
  22. package/dist/index.js +6 -7
  23. package/dist/{relations-DqDEZ6MV.js → relations-tePbGOWl.js} +33 -31
  24. package/dist/relations-tePbGOWl.js.map +1 -0
  25. package/package.json +6 -6
  26. package/dist/chunk-BkvOhyD0.js +0 -12
  27. package/dist/commands/loadProjectModule.d.ts +0 -15
  28. package/dist/commands/registerCodegenCommands.d.ts +0 -5
  29. package/dist/commands/runGenerateRelationsCommand.d.ts +0 -11
  30. package/dist/commands/runInitCommand.d.ts +0 -13
  31. package/dist/commands/runInstall.d.ts +0 -2
  32. package/dist/commands/runNewCommand.d.ts +0 -16
  33. package/dist/commands-CFAq4wXC.js.map +0 -1
  34. package/dist/domain/CodegenModel.d.ts +0 -19
  35. package/dist/domain-Cufz6y1q.js +0 -7
  36. package/dist/domain-Cufz6y1q.js.map +0 -1
  37. package/dist/frameworks/contracts/FrameworkScaffoldStrategy.d.ts +0 -40
  38. package/dist/frameworks/contracts/template/ScaffoldTemplate.d.ts +0 -22
  39. package/dist/frameworks/contracts/template/TemplateBuilder.d.ts +0 -42
  40. package/dist/frameworks/contracts/template/implementation/ScaffoldTemplateDescriptor.d.ts +0 -10
  41. package/dist/frameworks/registry/FrameworkScaffoldRegistry.d.ts +0 -23
  42. package/dist/frameworks/scaffold/scaffoldProject.d.ts +0 -17
  43. package/dist/frameworks/strategies/express/ExpressScaffoldStrategy.d.ts +0 -14
  44. package/dist/frameworks/strategies/express/templates/appSource.d.ts +0 -6
  45. package/dist/frameworks/strategies/express/templates/bootstrap.d.ts +0 -6
  46. package/dist/frameworks/strategies/express/templates/models.d.ts +0 -10
  47. package/dist/frameworks/strategies/express/templates/openapi.d.ts +0 -6
  48. package/dist/frameworks/strategies/express/templates/packageJson.d.ts +0 -6
  49. package/dist/frameworks/strategies/express/templates/readme.d.ts +0 -6
  50. package/dist/frameworks/strategies/express/templates/serializers.d.ts +0 -10
  51. package/dist/frameworks/strategies/express/templates/tangoConfig.d.ts +0 -6
  52. package/dist/frameworks/strategies/express/templates/tangoRegister.d.ts +0 -6
  53. package/dist/frameworks/strategies/express/templates/tsconfig.d.ts +0 -6
  54. package/dist/frameworks/strategies/express/templates/tsconfigBuild.d.ts +0 -6
  55. package/dist/frameworks/strategies/express/templates/viewSet.d.ts +0 -6
  56. package/dist/frameworks/strategies/next/NextScaffoldStrategy.d.ts +0 -14
  57. package/dist/frameworks/strategies/next/templates/bootstrap.d.ts +0 -6
  58. package/dist/frameworks/strategies/next/templates/healthRoute.d.ts +0 -6
  59. package/dist/frameworks/strategies/next/templates/layout.d.ts +0 -6
  60. package/dist/frameworks/strategies/next/templates/models.d.ts +0 -11
  61. package/dist/frameworks/strategies/next/templates/openapi.d.ts +0 -6
  62. package/dist/frameworks/strategies/next/templates/openapiRoute.d.ts +0 -6
  63. package/dist/frameworks/strategies/next/templates/packageJson.d.ts +0 -6
  64. package/dist/frameworks/strategies/next/templates/page.d.ts +0 -6
  65. package/dist/frameworks/strategies/next/templates/readme.d.ts +0 -6
  66. package/dist/frameworks/strategies/next/templates/serializers.d.ts +0 -10
  67. package/dist/frameworks/strategies/next/templates/tangoConfig.d.ts +0 -6
  68. package/dist/frameworks/strategies/next/templates/todoRoute.d.ts +0 -6
  69. package/dist/frameworks/strategies/next/templates/tsconfig.d.ts +0 -6
  70. package/dist/frameworks/strategies/next/templates/viewSet.d.ts +0 -6
  71. package/dist/frameworks/strategies/nuxt/NuxtScaffoldStrategy.d.ts +0 -14
  72. package/dist/frameworks/strategies/nuxt/templates/bootstrap.d.ts +0 -6
  73. package/dist/frameworks/strategies/nuxt/templates/healthRoute.d.ts +0 -6
  74. package/dist/frameworks/strategies/nuxt/templates/layout.d.ts +0 -6
  75. package/dist/frameworks/strategies/nuxt/templates/models.d.ts +0 -11
  76. package/dist/frameworks/strategies/nuxt/templates/nuxtConfig.d.ts +0 -6
  77. package/dist/frameworks/strategies/nuxt/templates/openapi.d.ts +0 -6
  78. package/dist/frameworks/strategies/nuxt/templates/openapiRoute.d.ts +0 -6
  79. package/dist/frameworks/strategies/nuxt/templates/packageJson.d.ts +0 -6
  80. package/dist/frameworks/strategies/nuxt/templates/page.d.ts +0 -6
  81. package/dist/frameworks/strategies/nuxt/templates/readme.d.ts +0 -6
  82. package/dist/frameworks/strategies/nuxt/templates/serializers.d.ts +0 -10
  83. package/dist/frameworks/strategies/nuxt/templates/tangoConfig.d.ts +0 -6
  84. package/dist/frameworks/strategies/nuxt/templates/todoRoute.d.ts +0 -6
  85. package/dist/frameworks/strategies/nuxt/templates/tsconfig.d.ts +0 -6
  86. package/dist/frameworks/strategies/nuxt/templates/viewSet.d.ts +0 -6
  87. package/dist/frameworks-BTcP3d9Q.js.map +0 -1
  88. package/dist/generators/migration/generateMigrationFromModels.d.ts +0 -8
  89. package/dist/generators/migration/index.d.ts +0 -4
  90. package/dist/generators/model/generateModelInterface.d.ts +0 -5
  91. package/dist/generators/model/index.d.ts +0 -4
  92. package/dist/generators/relations/generateRelationRegistryArtifacts.d.ts +0 -15
  93. package/dist/generators/relations/index.d.ts +0 -5
  94. package/dist/generators/relations/writeRelationRegistryArtifacts.d.ts +0 -16
  95. package/dist/generators/viewset/generateViewSet.d.ts +0 -4
  96. package/dist/generators/viewset/index.d.ts +0 -4
  97. package/dist/generators-DuAuGNR2.js.map +0 -1
  98. package/dist/mappers/fieldType.d.ts +0 -9
  99. package/dist/mappers/index.d.ts +0 -4
  100. package/dist/relations-DqDEZ6MV.js.map +0 -1
@@ -1,17 +1,17 @@
1
- import { __export } from "./chunk-BkvOhyD0.js";
1
+ import { t as __exportAll } from "./chunk-D7D4PA-g.js";
2
2
  import { mkdir, readdir, stat, writeFile } from "node:fs/promises";
3
3
  import { dirname, isAbsolute, resolve } from "node:path";
4
-
5
4
  //#region src/frameworks/contracts/template/ScaffoldTemplate.ts
6
5
  const SCAFFOLD_TEMPLATE_CATEGORY = {
7
6
  FRAMEWORK: "framework",
8
7
  TANGO: "tango",
9
8
  INIT_ONLY: "init-only"
10
9
  };
11
-
12
10
  //#endregion
13
11
  //#region src/frameworks/contracts/template/implementation/ScaffoldTemplateDescriptor.ts
14
12
  var ScaffoldTemplateDescriptor = class {
13
+ template;
14
+ category;
15
15
  constructor(template, category) {
16
16
  this.template = template;
17
17
  this.category = category;
@@ -27,96 +27,81 @@ var ScaffoldTemplateDescriptor = class {
27
27
  return this.category === SCAFFOLD_TEMPLATE_CATEGORY.TANGO || this.category === SCAFFOLD_TEMPLATE_CATEGORY.INIT_ONLY;
28
28
  }
29
29
  };
30
-
31
30
  //#endregion
32
- //#region package.json
33
- var name = "@danceroutine/tango-codegen";
34
- var version$1 = "1.11.1";
35
- var description = "CLI for generating repositories, types, migrations, and OpenAPI specs for Tango";
36
- var type = "module";
37
- var main = "./dist/index.js";
38
- var types = "./dist/index.d.ts";
39
- var exports = {
40
- ".": {
41
- "types": "./dist/index.d.ts",
42
- "import": "./dist/index.js"
31
+ //#region src/frameworks/contracts/template/TemplateBuilder.ts
32
+ const { version } = {
33
+ name: "@danceroutine/tango-codegen",
34
+ version: "1.11.3",
35
+ description: "CLI for generating repositories, types, migrations, and OpenAPI specs for Tango",
36
+ type: "module",
37
+ main: "./dist/index.js",
38
+ types: "./dist/index.d.ts",
39
+ exports: {
40
+ ".": {
41
+ "types": "./dist/index.d.ts",
42
+ "import": "./dist/index.js"
43
+ },
44
+ "./domain": {
45
+ "types": "./dist/domain/index.d.ts",
46
+ "import": "./dist/domain/index.js"
47
+ },
48
+ "./generators": {
49
+ "types": "./dist/generators/index.d.ts",
50
+ "import": "./dist/generators/index.js"
51
+ },
52
+ "./frameworks": {
53
+ "types": "./dist/frameworks/index.d.ts",
54
+ "import": "./dist/frameworks/index.js"
55
+ },
56
+ "./commands": {
57
+ "types": "./dist/commands/index.d.ts",
58
+ "import": "./dist/commands/index.js"
59
+ }
43
60
  },
44
- "./domain": {
45
- "types": "./dist/domain/index.d.ts",
46
- "import": "./dist/domain/index.js"
61
+ files: ["dist"],
62
+ scripts: {
63
+ "build": "tsdown",
64
+ "test": "vitest run --coverage",
65
+ "test:watch": "vitest",
66
+ "typecheck": "pnpm run typecheck:prod && pnpm run typecheck:test",
67
+ "typecheck:prod": "tsc --noEmit -p tsconfig.json",
68
+ "typecheck:test": "tsc --noEmit -p tsconfig.tests.json"
47
69
  },
48
- "./generators": {
49
- "types": "./dist/generators/index.d.ts",
50
- "import": "./dist/generators/index.js"
70
+ keywords: [
71
+ "tango",
72
+ "codegen",
73
+ "cli",
74
+ "generator",
75
+ "migrations"
76
+ ],
77
+ author: "Pedro Del Moral Lopez",
78
+ license: "MIT",
79
+ repository: {
80
+ "type": "git",
81
+ "url": "https://github.com/danceroutine/tango.git",
82
+ "directory": "packages/codegen"
51
83
  },
52
- "./frameworks": {
53
- "types": "./dist/frameworks/index.d.ts",
54
- "import": "./dist/frameworks/index.js"
84
+ dependencies: {
85
+ "@danceroutine/tango-core": "workspace:*",
86
+ "@danceroutine/tango-schema": "workspace:*",
87
+ "jiti": "^2.7.0",
88
+ "yargs": "^18.0.0"
55
89
  },
56
- "./commands": {
57
- "types": "./dist/commands/index.d.ts",
58
- "import": "./dist/commands/index.js"
90
+ devDependencies: {
91
+ "@danceroutine/tango-testing": "workspace:*",
92
+ "@types/yargs": "^17.0.33",
93
+ "@types/node": "^22.9.0",
94
+ "tsdown": "^0.22.1",
95
+ "typescript": "^5.6.3",
96
+ "vitest": "^4.1.7",
97
+ "zod": "^4.0.0"
59
98
  }
60
99
  };
61
- var files = ["dist"];
62
- var scripts = {
63
- "build": "tsdown",
64
- "test": "vitest run --coverage",
65
- "test:watch": "vitest",
66
- "typecheck": "pnpm run typecheck:prod && pnpm run typecheck:test",
67
- "typecheck:prod": "tsc --noEmit -p tsconfig.json",
68
- "typecheck:test": "tsc --noEmit -p tsconfig.tests.json"
69
- };
70
- var keywords = [
71
- "tango",
72
- "codegen",
73
- "cli",
74
- "generator",
75
- "migrations"
76
- ];
77
- var author = "Pedro Del Moral Lopez";
78
- var license = "MIT";
79
- var repository = {
80
- "type": "git",
81
- "url": "https://github.com/danceroutine/tango.git",
82
- "directory": "packages/codegen"
83
- };
84
- var dependencies = {
85
- "@danceroutine/tango-core": "workspace:*",
86
- "@danceroutine/tango-schema": "workspace:*",
87
- "jiti": "^2.6.1",
88
- "yargs": "^18.0.0"
89
- };
90
- var devDependencies = {
91
- "@danceroutine/tango-testing": "workspace:*",
92
- "@types/yargs": "^17.0.33",
93
- "@types/node": "^22.9.0",
94
- "tsdown": "^0.4.0",
95
- "typescript": "^5.6.3",
96
- "vitest": "^4.1.7",
97
- "zod": "^4.0.0"
98
- };
99
- var package_default = {
100
- name,
101
- version: version$1,
102
- description,
103
- type,
104
- main,
105
- types,
106
- exports,
107
- files,
108
- scripts,
109
- keywords,
110
- author,
111
- license,
112
- repository,
113
- dependencies,
114
- devDependencies
115
- };
116
-
117
- //#endregion
118
- //#region src/frameworks/contracts/template/TemplateBuilder.ts
119
- const { version } = package_default;
100
+ /**
101
+ * Base class for scaffold template builders. Subclasses override resolveTemplate().
102
+ * Use new WhateverBuilder().setContext(context) for registration with add* methods.
103
+ * Deps logic (getTangoDependencyEntries, getTangoDevDependencyEntries) and version live here.
104
+ */
120
105
  var TemplateBuilder = class TemplateBuilder {
121
106
  name;
122
107
  _context;
@@ -131,9 +116,7 @@ var TemplateBuilder = class TemplateBuilder {
131
116
  const devDeps = TemplateBuilder.getTangoDevDependencyEntriesFor();
132
117
  const depList = Object.entries(deps).map(([pkg, ver]) => `${pkg}@${ver}`).join(" ");
133
118
  const devList = Object.entries(devDeps).map(([pkg, ver]) => `${pkg}@${ver}`).join(" ");
134
- const addCmd = packageManager === "npm" ? "npm install" : `${packageManager} add`;
135
- const addDevCmd = packageManager === "npm" ? "npm install -D" : `${packageManager} add -D`;
136
- return `${addCmd} ${depList} && ${addDevCmd} ${devList}`;
119
+ return `${packageManager === "npm" ? "npm install" : `${packageManager} add`} ${depList} && ${packageManager === "npm" ? "npm install -D" : `${packageManager} add -D`} ${devList}`;
137
120
  }
138
121
  static getRunScriptCommand(packageManager, scriptName, scriptArgs = []) {
139
122
  const serializedArgs = scriptArgs.join(" ");
@@ -173,8 +156,8 @@ var TemplateBuilder = class TemplateBuilder {
173
156
  };
174
157
  const adapter = framework === "express" ? { "@danceroutine/tango-adapters-express": v } : framework === "next" ? { "@danceroutine/tango-adapters-next": v } : { "@danceroutine/tango-adapters-nuxt": v };
175
158
  const dialectDeps = {
176
- "better-sqlite3": "^11.10.0",
177
- pg: "^8.16.3"
159
+ "better-sqlite3": "^12.10.0",
160
+ pg: "^8.20.0"
178
161
  };
179
162
  return {
180
163
  ...core,
@@ -197,7 +180,7 @@ var TemplateBuilder = class TemplateBuilder {
197
180
  return this.name;
198
181
  }
199
182
  build() {
200
- if (this._context === undefined) throw new Error("TemplateBuilder: context not bound. Call .setContext(context) before .build().");
183
+ if (this._context === void 0) throw new Error("TemplateBuilder: context not bound. Call .setContext(context) before .build().");
201
184
  return this.resolveTemplate(this._context);
202
185
  }
203
186
  getTangoDependencyEntries(context) {
@@ -207,7 +190,6 @@ var TemplateBuilder = class TemplateBuilder {
207
190
  return TemplateBuilder.getTangoDevDependencyEntriesFor();
208
191
  }
209
192
  };
210
-
211
193
  //#endregion
212
194
  //#region src/frameworks/contracts/FrameworkScaffoldStrategy.ts
213
195
  const SUPPORTED_FRAMEWORK = {
@@ -225,6 +207,12 @@ const SCAFFOLD_DATABASE_DIALECT = {
225
207
  SQLITE: "sqlite",
226
208
  POSTGRES: "postgres"
227
209
  };
210
+ /**
211
+ * Base scaffold strategy contract and helpers for Tango framework scaffolds.
212
+ *
213
+ * Concrete strategies extend this class and assemble their template lists
214
+ * through the protected helpers below.
215
+ */
228
216
  var FrameworkScaffoldStrategy = class {
229
217
  /**
230
218
  * One-liner to install Tango + dialect deps and Tango CLI, for init success message.
@@ -245,7 +233,6 @@ var FrameworkScaffoldStrategy = class {
245
233
  return new ScaffoldTemplateDescriptor(template, category);
246
234
  }
247
235
  };
248
-
249
236
  //#endregion
250
237
  //#region src/frameworks/strategies/express/templates/packageJson.ts
251
238
  var PackageJsonTemplateBuilder$2 = class extends TemplateBuilder {
@@ -283,11 +270,11 @@ var PackageJsonTemplateBuilder$2 = class extends TemplateBuilder {
283
270
  "@types/node": "^22.9.0",
284
271
  tsx: "^4.20.6",
285
272
  typescript: "^5.6.3"
286
- }
273
+ },
274
+ pnpm: { onlyBuiltDependencies: ["better-sqlite3", "esbuild"] }
287
275
  }, null, 4);
288
276
  }
289
277
  };
290
-
291
278
  //#endregion
292
279
  //#region src/frameworks/strategies/express/templates/tsconfig.ts
293
280
  var TsConfigTemplateBuilder$2 = class extends TemplateBuilder {
@@ -318,7 +305,6 @@ var TsConfigTemplateBuilder$2 = class extends TemplateBuilder {
318
305
  }, null, 4);
319
306
  }
320
307
  };
321
-
322
308
  //#endregion
323
309
  //#region src/frameworks/strategies/express/templates/tsconfigBuild.ts
324
310
  var TsConfigBuildTemplateBuilder = class extends TemplateBuilder {
@@ -345,7 +331,6 @@ var TsConfigBuildTemplateBuilder = class extends TemplateBuilder {
345
331
  }, null, 4);
346
332
  }
347
333
  };
348
-
349
334
  //#endregion
350
335
  //#region src/frameworks/strategies/express/templates/tangoConfig.ts
351
336
  var TangoConfigTemplateBuilder$2 = class extends TemplateBuilder {
@@ -425,7 +410,6 @@ export default defineConfig({
425
410
  `;
426
411
  }
427
412
  };
428
-
429
413
  //#endregion
430
414
  //#region src/frameworks/strategies/express/templates/appSource.ts
431
415
  var AppSourceTemplateBuilder = class extends TemplateBuilder {
@@ -465,7 +449,6 @@ main().catch((error: unknown) => {
465
449
  `;
466
450
  }
467
451
  };
468
-
469
452
  //#endregion
470
453
  //#region src/frameworks/strategies/express/templates/models.ts
471
454
  var TodoModelTemplateBuilder$2 = class extends TemplateBuilder {
@@ -519,7 +502,6 @@ var ModelsBarrelTemplateBuilder$2 = class extends TemplateBuilder {
519
502
  `;
520
503
  }
521
504
  };
522
-
523
505
  //#endregion
524
506
  //#region src/frameworks/strategies/express/templates/serializers.ts
525
507
  var TodoSerializerTemplateBuilder$2 = class extends TemplateBuilder {
@@ -553,7 +535,6 @@ var SerializersBarrelTemplateBuilder$2 = class extends TemplateBuilder {
553
535
  `;
554
536
  }
555
537
  };
556
-
557
538
  //#endregion
558
539
  //#region src/frameworks/strategies/express/templates/openapi.ts
559
540
  var OpenAPITemplateBuilder$2 = class extends TemplateBuilder {
@@ -575,7 +556,6 @@ export function createOpenAPISpec(): OpenAPISpec {
575
556
  `;
576
557
  }
577
558
  };
578
-
579
559
  //#endregion
580
560
  //#region src/frameworks/strategies/express/templates/viewSet.ts
581
561
  var ViewSetTemplateBuilder$2 = class extends TemplateBuilder {
@@ -607,7 +587,6 @@ export class TodoViewSet extends ModelViewSet<Todo, typeof TodoSerializer> {
607
587
  `;
608
588
  }
609
589
  };
610
-
611
590
  //#endregion
612
591
  //#region src/frameworks/strategies/express/templates/bootstrap.ts
613
592
  var BootstrapTemplateBuilder$2 = class extends TemplateBuilder {
@@ -654,7 +633,6 @@ if (import.meta.url === \`file://\${process.argv[1]}\`) {
654
633
  `;
655
634
  }
656
635
  };
657
-
658
636
  //#endregion
659
637
  //#region src/frameworks/strategies/express/templates/readme.ts
660
638
  var ReadmeTemplateBuilder$2 = class extends TemplateBuilder {
@@ -722,7 +700,6 @@ ${dev}
722
700
  `;
723
701
  }
724
702
  };
725
-
726
703
  //#endregion
727
704
  //#region src/frameworks/strategies/express/templates/tangoRegister.ts
728
705
  var TangoRegisterTemplateBuilder = class extends TemplateBuilder {
@@ -749,9 +726,11 @@ export async function registerTango(app: Application): Promise<void> {
749
726
  `;
750
727
  }
751
728
  };
752
-
753
729
  //#endregion
754
730
  //#region src/frameworks/strategies/express/ExpressScaffoldStrategy.ts
731
+ /**
732
+ * Scaffold strategy for creating an Express-hosted Tango project.
733
+ */
755
734
  var ExpressScaffoldStrategy = class extends FrameworkScaffoldStrategy {
756
735
  id = "express";
757
736
  name = "Express";
@@ -780,7 +759,6 @@ var ExpressScaffoldStrategy = class extends FrameworkScaffoldStrategy {
780
759
  ];
781
760
  }
782
761
  };
783
-
784
762
  //#endregion
785
763
  //#region src/frameworks/strategies/next/templates/packageJson.ts
786
764
  var PackageJsonTemplateBuilder$1 = class extends TemplateBuilder {
@@ -821,11 +799,11 @@ var PackageJsonTemplateBuilder$1 = class extends TemplateBuilder {
821
799
  "@types/react-dom": "^19.0.2",
822
800
  tsx: "^4.20.6",
823
801
  typescript: "^5.6.3"
824
- }
802
+ },
803
+ pnpm: { onlyBuiltDependencies: ["better-sqlite3", "esbuild"] }
825
804
  }, null, 4);
826
805
  }
827
806
  };
828
-
829
807
  //#endregion
830
808
  //#region src/frameworks/strategies/next/templates/tsconfig.ts
831
809
  var TsConfigTemplateBuilder$1 = class extends TemplateBuilder {
@@ -864,7 +842,6 @@ var TsConfigTemplateBuilder$1 = class extends TemplateBuilder {
864
842
  }, null, 4);
865
843
  }
866
844
  };
867
-
868
845
  //#endregion
869
846
  //#region src/frameworks/strategies/next/templates/tangoConfig.ts
870
847
  var TangoConfigTemplateBuilder$1 = class extends TemplateBuilder {
@@ -944,7 +921,6 @@ export default defineConfig({
944
921
  `;
945
922
  }
946
923
  };
947
-
948
924
  //#endregion
949
925
  //#region src/frameworks/strategies/next/templates/models.ts
950
926
  var TodoModelTemplateBuilder$1 = class TodoModelTemplateBuilder$1 extends TemplateBuilder {
@@ -1001,7 +977,6 @@ var ModelsBarrelTemplateBuilder$1 = class extends TemplateBuilder {
1001
977
  `;
1002
978
  }
1003
979
  };
1004
-
1005
980
  //#endregion
1006
981
  //#region src/frameworks/strategies/next/templates/serializers.ts
1007
982
  var TodoSerializerTemplateBuilder$1 = class extends TemplateBuilder {
@@ -1035,7 +1010,6 @@ var SerializersBarrelTemplateBuilder$1 = class extends TemplateBuilder {
1035
1010
  `;
1036
1011
  }
1037
1012
  };
1038
-
1039
1013
  //#endregion
1040
1014
  //#region src/frameworks/strategies/next/templates/openapi.ts
1041
1015
  var OpenAPITemplateBuilder$1 = class extends TemplateBuilder {
@@ -1057,7 +1031,6 @@ export function createOpenAPISpec(): OpenAPISpec {
1057
1031
  `;
1058
1032
  }
1059
1033
  };
1060
-
1061
1034
  //#endregion
1062
1035
  //#region src/frameworks/strategies/next/templates/viewSet.ts
1063
1036
  var ViewSetTemplateBuilder$1 = class extends TemplateBuilder {
@@ -1089,7 +1062,6 @@ export class TodoViewSet extends ModelViewSet<Todo, typeof TodoSerializer> {
1089
1062
  `;
1090
1063
  }
1091
1064
  };
1092
-
1093
1065
  //#endregion
1094
1066
  //#region src/frameworks/strategies/next/templates/page.ts
1095
1067
  var PageTemplateBuilder$1 = class extends TemplateBuilder {
@@ -1117,7 +1089,6 @@ export default async function HomePage() {
1117
1089
  `;
1118
1090
  }
1119
1091
  };
1120
-
1121
1092
  //#endregion
1122
1093
  //#region src/frameworks/strategies/next/templates/layout.ts
1123
1094
  var LayoutTemplateBuilder = class extends TemplateBuilder {
@@ -1146,7 +1117,6 @@ export default function RootLayout({
1146
1117
  `;
1147
1118
  }
1148
1119
  };
1149
-
1150
1120
  //#endregion
1151
1121
  //#region src/frameworks/strategies/next/templates/healthRoute.ts
1152
1122
  var HealthRouteTemplateBuilder$1 = class extends TemplateBuilder {
@@ -1160,7 +1130,6 @@ var HealthRouteTemplateBuilder$1 = class extends TemplateBuilder {
1160
1130
  `;
1161
1131
  }
1162
1132
  };
1163
-
1164
1133
  //#endregion
1165
1134
  //#region src/frameworks/strategies/next/templates/todoRoute.ts
1166
1135
  var TodoRouteTemplateBuilder$1 = class extends TemplateBuilder {
@@ -1176,7 +1145,6 @@ export const { GET, POST, PUT, PATCH, DELETE } = adapter.adaptViewSet(new TodoVi
1176
1145
  `;
1177
1146
  }
1178
1147
  };
1179
-
1180
1148
  //#endregion
1181
1149
  //#region src/frameworks/strategies/next/templates/openapiRoute.ts
1182
1150
  var OpenAPIRouteTemplateBuilder$1 = class extends TemplateBuilder {
@@ -1192,7 +1160,6 @@ export async function GET(): Promise<Response> {
1192
1160
  `;
1193
1161
  }
1194
1162
  };
1195
-
1196
1163
  //#endregion
1197
1164
  //#region src/frameworks/strategies/next/templates/bootstrap.ts
1198
1165
  var BootstrapTemplateBuilder$1 = class extends TemplateBuilder {
@@ -1237,7 +1204,6 @@ seedExampleData(Number.isFinite(count) ? count : 100).catch((error: unknown) =>
1237
1204
  `;
1238
1205
  }
1239
1206
  };
1240
-
1241
1207
  //#endregion
1242
1208
  //#region src/frameworks/strategies/next/templates/readme.ts
1243
1209
  var ReadmeTemplateBuilder$1 = class extends TemplateBuilder {
@@ -1306,9 +1272,11 @@ ${dev}
1306
1272
  `;
1307
1273
  }
1308
1274
  };
1309
-
1310
1275
  //#endregion
1311
1276
  //#region src/frameworks/strategies/next/NextScaffoldStrategy.ts
1277
+ /**
1278
+ * Scaffold strategy for creating a Next.js-hosted Tango project.
1279
+ */
1312
1280
  var NextScaffoldStrategy = class extends FrameworkScaffoldStrategy {
1313
1281
  id = "next";
1314
1282
  name = "Next.js";
@@ -1341,7 +1309,6 @@ var NextScaffoldStrategy = class extends FrameworkScaffoldStrategy {
1341
1309
  ];
1342
1310
  }
1343
1311
  };
1344
-
1345
1312
  //#endregion
1346
1313
  //#region src/frameworks/strategies/nuxt/templates/packageJson.ts
1347
1314
  var PackageJsonTemplateBuilder = class extends TemplateBuilder {
@@ -1380,11 +1347,11 @@ var PackageJsonTemplateBuilder = class extends TemplateBuilder {
1380
1347
  tsx: "^4.20.6",
1381
1348
  typescript: "^5.6.3",
1382
1349
  "vue-tsc": "^3.1.2"
1383
- }
1350
+ },
1351
+ pnpm: { onlyBuiltDependencies: ["better-sqlite3", "esbuild"] }
1384
1352
  }, null, 4);
1385
1353
  }
1386
1354
  };
1387
-
1388
1355
  //#endregion
1389
1356
  //#region src/frameworks/strategies/nuxt/templates/tsconfig.ts
1390
1357
  var TsConfigTemplateBuilder = class extends TemplateBuilder {
@@ -1408,7 +1375,6 @@ var TsConfigTemplateBuilder = class extends TemplateBuilder {
1408
1375
  }, null, 4);
1409
1376
  }
1410
1377
  };
1411
-
1412
1378
  //#endregion
1413
1379
  //#region src/frameworks/strategies/nuxt/templates/nuxtConfig.ts
1414
1380
  var NuxtConfigTemplateBuilder = class extends TemplateBuilder {
@@ -1430,7 +1396,6 @@ export default defineNuxtConfig({
1430
1396
  `;
1431
1397
  }
1432
1398
  };
1433
-
1434
1399
  //#endregion
1435
1400
  //#region src/frameworks/strategies/nuxt/templates/models.ts
1436
1401
  var TodoModelTemplateBuilder = class TodoModelTemplateBuilder extends TemplateBuilder {
@@ -1489,7 +1454,6 @@ var ModelsBarrelTemplateBuilder = class extends TemplateBuilder {
1489
1454
  `;
1490
1455
  }
1491
1456
  };
1492
-
1493
1457
  //#endregion
1494
1458
  //#region src/frameworks/strategies/nuxt/templates/serializers.ts
1495
1459
  var TodoSerializerTemplateBuilder = class extends TemplateBuilder {
@@ -1523,7 +1487,6 @@ var SerializersBarrelTemplateBuilder = class extends TemplateBuilder {
1523
1487
  `;
1524
1488
  }
1525
1489
  };
1526
-
1527
1490
  //#endregion
1528
1491
  //#region src/frameworks/strategies/nuxt/templates/openapi.ts
1529
1492
  var OpenAPITemplateBuilder = class extends TemplateBuilder {
@@ -1545,7 +1508,6 @@ export function createOpenAPISpec(): OpenAPISpec {
1545
1508
  `;
1546
1509
  }
1547
1510
  };
1548
-
1549
1511
  //#endregion
1550
1512
  //#region src/frameworks/strategies/nuxt/templates/viewSet.ts
1551
1513
  var ViewSetTemplateBuilder = class extends TemplateBuilder {
@@ -1577,7 +1539,6 @@ export class TodoViewSet extends ModelViewSet<Todo, typeof TodoSerializer> {
1577
1539
  `;
1578
1540
  }
1579
1541
  };
1580
-
1581
1542
  //#endregion
1582
1543
  //#region src/frameworks/strategies/nuxt/templates/page.ts
1583
1544
  var PageTemplateBuilder = class extends TemplateBuilder {
@@ -1589,7 +1550,7 @@ var PageTemplateBuilder = class extends TemplateBuilder {
1589
1550
  import { TodoModel, TodoReadSchema } from '~~/lib/models';
1590
1551
 
1591
1552
  const todos = await TodoModel.objects.query().orderBy('-createdAt').limit(10).fetch(TodoReadSchema);
1592
- </script>
1553
+ <\/script>
1593
1554
 
1594
1555
  <template>
1595
1556
  <main style="font-family: system-ui; margin: 2rem auto; max-width: 60ch;">
@@ -1603,7 +1564,6 @@ const todos = await TodoModel.objects.query().orderBy('-createdAt').limit(10).fe
1603
1564
  `;
1604
1565
  }
1605
1566
  };
1606
-
1607
1567
  //#endregion
1608
1568
  //#region src/frameworks/strategies/nuxt/templates/layout.ts
1609
1569
  var AppShellTemplateBuilder = class extends TemplateBuilder {
@@ -1617,7 +1577,6 @@ var AppShellTemplateBuilder = class extends TemplateBuilder {
1617
1577
  `;
1618
1578
  }
1619
1579
  };
1620
-
1621
1580
  //#endregion
1622
1581
  //#region src/frameworks/strategies/nuxt/templates/healthRoute.ts
1623
1582
  var HealthRouteTemplateBuilder = class extends TemplateBuilder {
@@ -1629,7 +1588,6 @@ var HealthRouteTemplateBuilder = class extends TemplateBuilder {
1629
1588
  `;
1630
1589
  }
1631
1590
  };
1632
-
1633
1591
  //#endregion
1634
1592
  //#region src/frameworks/strategies/nuxt/templates/todoRoute.ts
1635
1593
  var TodoRouteTemplateBuilder = class extends TemplateBuilder {
@@ -1645,7 +1603,6 @@ export default adapter.adaptViewSet(new TodoViewSet());
1645
1603
  `;
1646
1604
  }
1647
1605
  };
1648
-
1649
1606
  //#endregion
1650
1607
  //#region src/frameworks/strategies/nuxt/templates/openapiRoute.ts
1651
1608
  var OpenAPIRouteTemplateBuilder = class extends TemplateBuilder {
@@ -1659,7 +1616,6 @@ export default defineEventHandler(() => createOpenAPISpec());
1659
1616
  `;
1660
1617
  }
1661
1618
  };
1662
-
1663
1619
  //#endregion
1664
1620
  //#region src/frameworks/strategies/nuxt/templates/bootstrap.ts
1665
1621
  var BootstrapTemplateBuilder = class extends TemplateBuilder {
@@ -1704,7 +1660,6 @@ seedExampleData(Number.isFinite(count) ? count : 100).catch((error: unknown) =>
1704
1660
  `;
1705
1661
  }
1706
1662
  };
1707
-
1708
1663
  //#endregion
1709
1664
  //#region src/frameworks/strategies/nuxt/templates/tangoConfig.ts
1710
1665
  var TangoConfigTemplateBuilder = class extends TemplateBuilder {
@@ -1784,7 +1739,6 @@ export default defineConfig({
1784
1739
  `;
1785
1740
  }
1786
1741
  };
1787
-
1788
1742
  //#endregion
1789
1743
  //#region src/frameworks/strategies/nuxt/templates/readme.ts
1790
1744
  var ReadmeTemplateBuilder = class extends TemplateBuilder {
@@ -1857,9 +1811,11 @@ Nuxt owns the public page route at \`/\`. Tango-owned endpoints stay under \`/ap
1857
1811
  `;
1858
1812
  }
1859
1813
  };
1860
-
1861
1814
  //#endregion
1862
1815
  //#region src/frameworks/strategies/nuxt/NuxtScaffoldStrategy.ts
1816
+ /**
1817
+ * Scaffold strategy for creating a Nuxt-hosted Tango project.
1818
+ */
1863
1819
  var NuxtScaffoldStrategy = class extends FrameworkScaffoldStrategy {
1864
1820
  id = "nuxt";
1865
1821
  name = "Nuxt";
@@ -1891,11 +1847,13 @@ var NuxtScaffoldStrategy = class extends FrameworkScaffoldStrategy {
1891
1847
  ];
1892
1848
  }
1893
1849
  };
1894
-
1895
1850
  //#endregion
1896
1851
  //#region src/frameworks/registry/FrameworkScaffoldRegistry.ts
1852
+ /**
1853
+ * Registry for framework scaffolding strategies keyed by framework id.
1854
+ */
1897
1855
  var FrameworkScaffoldRegistry = class FrameworkScaffoldRegistry {
1898
- strategies = new Map();
1856
+ strategies = /* @__PURE__ */ new Map();
1899
1857
  /**
1900
1858
  * Create a registry preloaded with Tango's built-in framework scaffolds.
1901
1859
  */
@@ -1910,8 +1868,7 @@ var FrameworkScaffoldRegistry = class FrameworkScaffoldRegistry {
1910
1868
  * Register a strategy under its declared framework id.
1911
1869
  */
1912
1870
  register(strategy) {
1913
- const existing = this.strategies.get(strategy.id);
1914
- if (existing) throw new Error(`Framework scaffold strategy '${strategy.id}' is already registered.`);
1871
+ if (this.strategies.get(strategy.id)) throw new Error(`Framework scaffold strategy '${strategy.id}' is already registered.`);
1915
1872
  this.strategies.set(strategy.id, strategy);
1916
1873
  }
1917
1874
  /**
@@ -1927,7 +1884,6 @@ var FrameworkScaffoldRegistry = class FrameworkScaffoldRegistry {
1927
1884
  return [...this.strategies.values()];
1928
1885
  }
1929
1886
  };
1930
-
1931
1887
  //#endregion
1932
1888
  //#region src/frameworks/scaffold/scaffoldProject.ts
1933
1889
  function resolveTargetDir(targetDir) {
@@ -1937,11 +1893,9 @@ function resolveTargetDir(targetDir) {
1937
1893
  async function ensureWritableTargetDir(targetDir, options) {
1938
1894
  const absoluteTargetDir = resolveTargetDir(targetDir);
1939
1895
  try {
1940
- const targetStats = await stat(absoluteTargetDir);
1941
- if (!targetStats.isDirectory()) throw new Error(`Target path '${absoluteTargetDir}' exists and is not a directory.`);
1896
+ if (!(await stat(absoluteTargetDir)).isDirectory()) throw new Error(`Target path '${absoluteTargetDir}' exists and is not a directory.`);
1942
1897
  if (options.mode === "new") {
1943
- const contents = await readdir(absoluteTargetDir);
1944
- if (contents.length > 0 && !options.force) throw new Error(`Target directory '${absoluteTargetDir}' is not empty. Pass --force to allow scaffolding into a non-empty directory.`);
1898
+ if ((await readdir(absoluteTargetDir)).length > 0 && !options.force) throw new Error(`Target directory '${absoluteTargetDir}' is not empty. Pass --force to allow scaffolding into a non-empty directory.`);
1945
1899
  }
1946
1900
  } catch (error) {
1947
1901
  if (error.code === "ENOENT") {
@@ -1951,6 +1905,13 @@ async function ensureWritableTargetDir(targetDir, options) {
1951
1905
  throw error;
1952
1906
  }
1953
1907
  }
1908
+ /**
1909
+ * Write a framework scaffold into a target directory after basic safety checks.
1910
+ *
1911
+ * The selected strategy controls which files are created, while this helper
1912
+ * owns directory validation and filesystem writes. With mode 'init', only
1913
+ * Tango and init-only templates are emitted, and existing files can be skipped.
1914
+ */
1954
1915
  async function scaffoldProject(context, strategy, options = {}) {
1955
1916
  const mode = options.mode ?? "new";
1956
1917
  const skipExisting = options.skipExisting ?? mode === "init";
@@ -1960,8 +1921,7 @@ async function scaffoldProject(context, strategy, options = {}) {
1960
1921
  skipExisting
1961
1922
  };
1962
1923
  await ensureWritableTargetDir(context.targetDir, resolvedOptions);
1963
- const allTemplates = strategy.getTemplates();
1964
- const templates = allTemplates.filter((t) => t.shouldEmit(mode));
1924
+ const templates = strategy.getTemplates().filter((t) => t.shouldEmit(mode));
1965
1925
  for (const template of templates) {
1966
1926
  const absolutePath = resolveTargetDir(resolve(context.targetDir, template.path));
1967
1927
  if (skipExisting && !options.force) try {
@@ -1972,11 +1932,9 @@ async function scaffoldProject(context, strategy, options = {}) {
1972
1932
  await writeFile(absolutePath, template.render(context), "utf8");
1973
1933
  }
1974
1934
  }
1975
-
1976
1935
  //#endregion
1977
1936
  //#region src/frameworks/index.ts
1978
- var frameworks_exports = {};
1979
- __export(frameworks_exports, {
1937
+ var frameworks_exports = /* @__PURE__ */ __exportAll({
1980
1938
  ExpressScaffoldStrategy: () => ExpressScaffoldStrategy,
1981
1939
  FrameworkScaffoldRegistry: () => FrameworkScaffoldRegistry,
1982
1940
  FrameworkScaffoldStrategy: () => FrameworkScaffoldStrategy,
@@ -1986,7 +1944,7 @@ __export(frameworks_exports, {
1986
1944
  ScaffoldTemplateDescriptor: () => ScaffoldTemplateDescriptor,
1987
1945
  scaffoldProject: () => scaffoldProject
1988
1946
  });
1989
-
1990
1947
  //#endregion
1991
- export { ExpressScaffoldStrategy, FrameworkScaffoldRegistry, FrameworkScaffoldStrategy, NextScaffoldStrategy, NuxtScaffoldStrategy, PACKAGE_MANAGER, SCAFFOLD_DATABASE_DIALECT, SCAFFOLD_TEMPLATE_CATEGORY, SUPPORTED_FRAMEWORK, ScaffoldTemplateDescriptor, frameworks_exports, scaffoldProject };
1992
- //# sourceMappingURL=frameworks-BTcP3d9Q.js.map
1948
+ export { NextScaffoldStrategy as a, PACKAGE_MANAGER as c, ScaffoldTemplateDescriptor as d, SCAFFOLD_TEMPLATE_CATEGORY as f, NuxtScaffoldStrategy as i, SCAFFOLD_DATABASE_DIALECT as l, scaffoldProject as n, ExpressScaffoldStrategy as o, FrameworkScaffoldRegistry as r, FrameworkScaffoldStrategy as s, frameworks_exports as t, SUPPORTED_FRAMEWORK as u };
1949
+
1950
+ //# sourceMappingURL=frameworks-B_un20qv.js.map