@danceroutine/tango-codegen 1.0.1 → 1.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.
- package/README.md +1 -0
- package/dist/commands/index.js +2 -2
- package/dist/{commands-C2Xr9uRE.js → commands-lJSW2Kuf.js} +4 -3
- package/dist/{commands-C2Xr9uRE.js.map → commands-lJSW2Kuf.js.map} +1 -1
- package/dist/frameworks/contracts/FrameworkScaffoldStrategy.d.ts +1 -0
- package/dist/frameworks/contracts/template/TemplateBuilder.d.ts +1 -1
- package/dist/frameworks/index.d.ts +1 -0
- package/dist/frameworks/index.js +2 -2
- package/dist/frameworks/strategies/nuxt/NuxtScaffoldStrategy.d.ts +14 -0
- package/dist/frameworks/strategies/nuxt/templates/bootstrap.d.ts +6 -0
- package/dist/frameworks/strategies/nuxt/templates/healthRoute.d.ts +6 -0
- package/dist/frameworks/strategies/nuxt/templates/layout.d.ts +6 -0
- package/dist/frameworks/strategies/nuxt/templates/models.d.ts +11 -0
- package/dist/frameworks/strategies/nuxt/templates/nuxtConfig.d.ts +6 -0
- package/dist/frameworks/strategies/nuxt/templates/openapi.d.ts +6 -0
- package/dist/frameworks/strategies/nuxt/templates/openapiRoute.d.ts +6 -0
- package/dist/frameworks/strategies/nuxt/templates/packageJson.d.ts +6 -0
- package/dist/frameworks/strategies/nuxt/templates/page.d.ts +6 -0
- package/dist/frameworks/strategies/nuxt/templates/readme.d.ts +6 -0
- package/dist/frameworks/strategies/nuxt/templates/serializers.d.ts +10 -0
- package/dist/frameworks/strategies/nuxt/templates/tangoConfig.d.ts +6 -0
- package/dist/frameworks/strategies/nuxt/templates/todoRoute.d.ts +6 -0
- package/dist/frameworks/strategies/nuxt/templates/tsconfig.d.ts +6 -0
- package/dist/frameworks/strategies/nuxt/templates/viewSet.d.ts +6 -0
- package/dist/{frameworks-Dv0HsD4K.js → frameworks-DOnjbO9C.js} +572 -49
- package/dist/frameworks-DOnjbO9C.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -3
- package/package.json +2 -2
- package/dist/frameworks-Dv0HsD4K.js.map +0 -1
package/README.md
CHANGED
|
@@ -25,6 +25,7 @@ The scaffold strategies are the primary public workflow. The lower-level generat
|
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
27
|
tango new my-app --framework express --package-manager pnpm --dialect sqlite
|
|
28
|
+
tango new my-nuxt-app --framework nuxt --package-manager pnpm --dialect sqlite
|
|
28
29
|
```
|
|
29
30
|
|
|
30
31
|
Generated applications include:
|
package/dist/commands/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __export } from "./chunk-BkvOhyD0.js";
|
|
2
|
-
import { FrameworkScaffoldRegistry, PACKAGE_MANAGER, SCAFFOLD_DATABASE_DIALECT, SUPPORTED_FRAMEWORK, scaffoldProject } from "./frameworks-
|
|
2
|
+
import { FrameworkScaffoldRegistry, PACKAGE_MANAGER, SCAFFOLD_DATABASE_DIALECT, SUPPORTED_FRAMEWORK, scaffoldProject } from "./frameworks-DOnjbO9C.js";
|
|
3
3
|
import { getLogger, getLogger as getLogger$1 } from "@danceroutine/tango-core";
|
|
4
4
|
import { basename, basename as basename$1, join, resolve, resolve as resolve$1 } from "path/posix";
|
|
5
5
|
import { spawnSync } from "child_process";
|
|
@@ -133,13 +133,14 @@ async function runInitCommand({ framework, path, dialect, skipExisting, force })
|
|
|
133
133
|
logger.info(`Tango init complete: ${targetDir}`);
|
|
134
134
|
logger.info(`Install dependencies: ${strategy.getTangoInstallOneLiner(packageManager, context)}`);
|
|
135
135
|
if (framework === SUPPORTED_FRAMEWORK.EXPRESS) logger.info("Mount Tango: import { registerTango } from './src/tango.js'; await registerTango(app);");
|
|
136
|
+
if (framework === SUPPORTED_FRAMEWORK.NUXT) logger.info("Wire Tango handlers: register Nitro serverHandlers in nuxt.config.ts and export NuxtAdapter-backed handlers from server/tango/.");
|
|
136
137
|
}
|
|
137
138
|
function withInitCommand(parser) {
|
|
138
139
|
return parser.command("init", "Add Tango to an existing project (only Tango-layer files)", (builder) => builder.option("framework", {
|
|
139
140
|
type: "string",
|
|
140
141
|
choices: Object.values(SUPPORTED_FRAMEWORK),
|
|
141
142
|
demandOption: true,
|
|
142
|
-
describe: "Host framework (express or
|
|
143
|
+
describe: "Host framework (express, next, or nuxt)."
|
|
143
144
|
}).option("path", {
|
|
144
145
|
type: "string",
|
|
145
146
|
default: ".",
|
|
@@ -183,4 +184,4 @@ __export(commands_exports, { registerCodegenCommands: () => registerCodegenComma
|
|
|
183
184
|
|
|
184
185
|
//#endregion
|
|
185
186
|
export { commands_exports, registerCodegenCommands };
|
|
186
|
-
//# sourceMappingURL=commands-
|
|
187
|
+
//# sourceMappingURL=commands-lJSW2Kuf.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands-C2Xr9uRE.js","names":["packageManager: PackageManager","cwd: string","argsByPackageManager: Record<PackageManager, readonly string[]>","context: FrameworkScaffoldContext","parser: Argv","targetDir: string","context: FrameworkScaffoldContext","parser: Argv","parser: Argv"],"sources":["../src/commands/runInstall.ts","../src/commands/runNewCommand.ts","../src/commands/runInitCommand.ts","../src/commands/registerCodegenCommands.ts","../src/commands/index.ts"],"sourcesContent":["import { spawnSync } from 'child_process';\nimport type { PackageManager } from '../frameworks';\n\nexport function runInstall(packageManager: PackageManager, cwd: string): void {\n const argsByPackageManager: Record<PackageManager, readonly string[]> = {\n pnpm: ['install'],\n npm: ['install'],\n yarn: ['install'],\n bun: ['install'],\n };\n\n const result = spawnSync(packageManager, [...argsByPackageManager[packageManager]], {\n cwd,\n stdio: 'inherit',\n env: process.env,\n });\n\n if (result.status !== 0) {\n throw new Error(\n `Dependency install failed with ${packageManager}. Exit code: ${String(result.status ?? 'unknown')}.`\n );\n }\n}\n","import { getLogger } from '@danceroutine/tango-core';\nimport { basename, resolve } from 'path/posix';\nimport {\n type SupportedFramework,\n type PackageManager,\n FrameworkScaffoldRegistry,\n type FrameworkScaffoldContext,\n scaffoldProject,\n} from '../frameworks';\nimport {\n PACKAGE_MANAGER,\n SCAFFOLD_DATABASE_DIALECT,\n SUPPORTED_FRAMEWORK,\n type ScaffoldDatabaseDialect,\n} from '../frameworks/contracts/FrameworkScaffoldStrategy';\nimport { runInstall } from './runInstall';\nimport type { Argv } from 'yargs';\n\ntype NewCommandArgs = {\n name?: string;\n framework: SupportedFramework;\n path?: string;\n packageManager: PackageManager;\n dialect: ScaffoldDatabaseDialect;\n install: boolean;\n force: boolean;\n seed: boolean;\n};\nexport async function runNewCommand({\n path,\n name,\n framework,\n packageManager,\n dialect,\n install,\n force,\n seed: includeSeed,\n}: NewCommandArgs): Promise<void> {\n const registry = FrameworkScaffoldRegistry.createDefault();\n const strategy = registry.get(framework)!;\n\n const requestedPath = path ?? name ?? 'tango-app';\n const projectName = name ?? basename(requestedPath);\n const targetDir = resolve(process.cwd(), requestedPath);\n\n const context: FrameworkScaffoldContext = {\n projectName,\n targetDir,\n framework,\n packageManager,\n dialect,\n includeSeed,\n };\n\n await scaffoldProject(context, strategy, { force });\n\n if (install) {\n runInstall(packageManager, targetDir);\n }\n\n const logger = getLogger('tango.codegen');\n logger.info(`Scaffold complete: ${targetDir}`);\n logger.info(`Framework: ${strategy.name}`);\n logger.info(`Run next: cd ${targetDir} && ${packageManager} run dev`);\n}\nexport function withNewCommand(parser: Argv): Argv {\n return parser.command(\n 'new [name]',\n 'Bootstrap a new Tango project',\n (builder) =>\n builder\n .positional('name', {\n type: 'string',\n describe: 'Project name (used as directory when --path is omitted).',\n })\n .option('framework', {\n type: 'string',\n choices: Object.values(SUPPORTED_FRAMEWORK),\n demandOption: true,\n describe: 'Host framework scaffold to generate.',\n })\n .option('path', {\n type: 'string',\n describe: 'Target directory for generated project files.',\n })\n .option('package-manager', {\n type: 'string',\n choices: Object.values(PACKAGE_MANAGER),\n default: PACKAGE_MANAGER.PNPM,\n describe: 'Package manager used for follow-up instructions and optional install.',\n })\n .option('dialect', {\n type: 'string',\n choices: Object.values(SCAFFOLD_DATABASE_DIALECT),\n default: SCAFFOLD_DATABASE_DIALECT.SQLITE,\n describe: 'Database dialect default for generated config.',\n })\n .option('install', {\n type: 'boolean',\n default: false,\n describe: 'Install dependencies after scaffolding.',\n })\n .option('force', {\n type: 'boolean',\n default: false,\n describe: 'Allow writing into a non-empty target directory.',\n })\n .option('seed', {\n type: 'boolean',\n default: true,\n describe: 'Include seed/bootstrap sample artifacts when supported by the framework strategy.',\n }),\n async ({ name, framework, path, packageManager, dialect, install, force, seed }) => {\n await runNewCommand({\n name,\n framework,\n path,\n packageManager,\n dialect,\n install,\n force,\n seed,\n });\n }\n );\n}\n","import { getLogger } from '@danceroutine/tango-core';\nimport { readdir, readFile } from 'fs/promises';\nimport { resolve, basename, join } from 'path/posix';\nimport {\n type PackageManager,\n type SupportedFramework,\n FrameworkScaffoldRegistry,\n type FrameworkScaffoldContext,\n scaffoldProject,\n} from '../frameworks';\nimport {\n PACKAGE_MANAGER,\n SCAFFOLD_DATABASE_DIALECT,\n type ScaffoldDatabaseDialect,\n SUPPORTED_FRAMEWORK,\n} from '../frameworks/contracts/FrameworkScaffoldStrategy';\nimport type { Argv } from 'yargs';\n\nasync function detectPackageManager(targetDir: string): Promise<PackageManager> {\n try {\n const entries = await readdir(targetDir);\n if (entries.includes('pnpm-lock.yaml')) return PACKAGE_MANAGER.PNPM;\n if (entries.includes('package-lock.json')) return PACKAGE_MANAGER.NPM;\n if (entries.includes('yarn.lock')) return PACKAGE_MANAGER.YARN;\n if (entries.includes('bun.lockb') || entries.includes('bun.lock')) return PACKAGE_MANAGER.BUN;\n } catch {\n // ENOENT or other: fall through to default\n }\n return PACKAGE_MANAGER.PNPM;\n}\ntype InitCommandArgs = {\n framework: SupportedFramework;\n path: string;\n dialect: ScaffoldDatabaseDialect;\n skipExisting: boolean;\n force: boolean;\n};\nexport async function runInitCommand({\n framework,\n path,\n dialect,\n skipExisting,\n force,\n}: InitCommandArgs): Promise<void> {\n const registry = FrameworkScaffoldRegistry.createDefault();\n const strategy = registry.get(framework)!;\n const targetDir = resolve(process.cwd(), path);\n\n let projectName = basename(targetDir);\n try {\n const pkgPath = join(targetDir, 'package.json');\n const raw = await readFile(pkgPath, 'utf8');\n const pkg = JSON.parse(raw) as { name?: string };\n if (typeof pkg.name === 'string' && pkg.name.length > 0) {\n projectName = pkg.name;\n }\n } catch {\n // no package.json or invalid: keep basename\n }\n\n const packageManager = await detectPackageManager(targetDir);\n\n const context: FrameworkScaffoldContext = {\n projectName,\n targetDir,\n framework,\n packageManager,\n dialect,\n includeSeed: true,\n };\n\n await scaffoldProject(context, strategy, {\n mode: 'init',\n skipExisting,\n force,\n });\n\n const logger = getLogger('tango.codegen');\n logger.info(`Tango init complete: ${targetDir}`);\n logger.info(`Install dependencies: ${strategy.getTangoInstallOneLiner(packageManager, context)}`);\n if (framework === SUPPORTED_FRAMEWORK.EXPRESS) {\n logger.info(\"Mount Tango: import { registerTango } from './src/tango.js'; await registerTango(app);\");\n }\n}\nexport function withInitCommand(parser: Argv): Argv {\n return parser.command(\n 'init',\n 'Add Tango to an existing project (only Tango-layer files)',\n (builder) =>\n builder\n .option('framework', {\n type: 'string',\n choices: Object.values(SUPPORTED_FRAMEWORK),\n demandOption: true,\n describe: 'Host framework (express or next).',\n })\n .option('path', {\n type: 'string',\n default: '.',\n describe: 'Target directory (default: current directory).',\n })\n .option('dialect', {\n type: 'string',\n choices: Object.values(SCAFFOLD_DATABASE_DIALECT),\n default: SCAFFOLD_DATABASE_DIALECT.SQLITE,\n describe: 'Database dialect for generated config.',\n })\n .option('skip-existing', {\n type: 'boolean',\n default: true,\n describe: 'Do not overwrite existing files.',\n })\n .option('force', {\n type: 'boolean',\n default: false,\n describe: 'Overwrite existing files when set.',\n }),\n async ({ framework, path, dialect, skipExisting, force }) => {\n await runInitCommand({\n framework,\n path,\n dialect,\n skipExisting,\n force,\n });\n }\n );\n}\n","import type { Argv } from 'yargs';\nimport { withNewCommand } from './runNewCommand';\nimport { withInitCommand } from './runInitCommand';\n\n/**\n * Register Tango project scaffolding commands on an existing CLI parser.\n */\nexport function registerCodegenCommands(parser: Argv): Argv {\n const withTopLevelNew = withNewCommand(parser);\n const withTopLevelInit = withInitCommand(withTopLevelNew);\n return withTopLevelInit.command('codegen <command>', 'Code generation command group', (builder) =>\n withInitCommand(withNewCommand(builder))\n );\n}\n","/**\n * Domain boundary barrel: centralizes this subdomain's public contract.\n */\n\nexport { registerCodegenCommands } from './registerCodegenCommands';\n"],"mappings":";;;;;;;;AAGO,SAAS,WAAWA,gBAAgCC,KAAmB;CAC1E,MAAMC,uBAAkE;EACpE,MAAM,CAAC,SAAU;EACjB,KAAK,CAAC,SAAU;EAChB,MAAM,CAAC,SAAU;EACjB,KAAK,CAAC,SAAU;CACnB;CAED,MAAM,SAAS,UAAU,gBAAgB,CAAC,GAAG,qBAAqB,eAAgB,GAAE;EAChF;EACA,OAAO;EACP,KAAK,QAAQ;CAChB,EAAC;AAEF,KAAI,OAAO,WAAW,EAClB,OAAM,IAAI,OACL,iCAAiC,eAAe,eAAe,OAAO,OAAO,UAAU,UAAU,CAAC;AAG9G;;;;ACMM,eAAe,cAAc,EAChC,MACA,MACA,WACA,gBACA,SACA,SACA,OACA,MAAM,aACO,EAAiB;CAC9B,MAAM,WAAW,0BAA0B,eAAe;CAC1D,MAAM,WAAW,SAAS,IAAI,UAAU;CAExC,MAAM,gBAAgB,QAAQ,QAAQ;CACtC,MAAM,cAAc,QAAQ,WAAS,cAAc;CACnD,MAAM,YAAY,UAAQ,QAAQ,KAAK,EAAE,cAAc;CAEvD,MAAMC,UAAoC;EACtC;EACA;EACA;EACA;EACA;EACA;CACH;AAED,OAAM,gBAAgB,SAAS,UAAU,EAAE,MAAO,EAAC;AAEnD,KAAI,QACA,YAAW,gBAAgB,UAAU;CAGzC,MAAM,SAAS,YAAU,gBAAgB;AACzC,QAAO,MAAM,qBAAqB,UAAU,EAAE;AAC9C,QAAO,MAAM,aAAa,SAAS,KAAK,EAAE;AAC1C,QAAO,MAAM,eAAe,UAAU,MAAM,eAAe,UAAU;AACxE;AACM,SAAS,eAAeC,QAAoB;AAC/C,QAAO,OAAO,QACV,cACA,iCACA,CAAC,YACG,QACK,WAAW,QAAQ;EAChB,MAAM;EACN,UAAU;CACb,EAAC,CACD,OAAO,aAAa;EACjB,MAAM;EACN,SAAS,OAAO,OAAO,oBAAoB;EAC3C,cAAc;EACd,UAAU;CACb,EAAC,CACD,OAAO,QAAQ;EACZ,MAAM;EACN,UAAU;CACb,EAAC,CACD,OAAO,mBAAmB;EACvB,MAAM;EACN,SAAS,OAAO,OAAO,gBAAgB;EACvC,SAAS,gBAAgB;EACzB,UAAU;CACb,EAAC,CACD,OAAO,WAAW;EACf,MAAM;EACN,SAAS,OAAO,OAAO,0BAA0B;EACjD,SAAS,0BAA0B;EACnC,UAAU;CACb,EAAC,CACD,OAAO,WAAW;EACf,MAAM;EACN,SAAS;EACT,UAAU;CACb,EAAC,CACD,OAAO,SAAS;EACb,MAAM;EACN,SAAS;EACT,UAAU;CACb,EAAC,CACD,OAAO,QAAQ;EACZ,MAAM;EACN,SAAS;EACT,UAAU;CACb,EAAC,EACV,OAAO,EAAE,MAAM,WAAW,MAAM,gBAAgB,SAAS,SAAS,OAAO,MAAM,KAAK;AAChF,QAAM,cAAc;GAChB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACH,EAAC;CACL,EACJ;AACJ;;;;AC3GD,eAAe,qBAAqBC,WAA4C;AAC5E,KAAI;EACA,MAAM,UAAU,MAAM,QAAQ,UAAU;AACxC,MAAI,QAAQ,SAAS,iBAAiB,CAAE,QAAO,gBAAgB;AAC/D,MAAI,QAAQ,SAAS,oBAAoB,CAAE,QAAO,gBAAgB;AAClE,MAAI,QAAQ,SAAS,YAAY,CAAE,QAAO,gBAAgB;AAC1D,MAAI,QAAQ,SAAS,YAAY,IAAI,QAAQ,SAAS,WAAW,CAAE,QAAO,gBAAgB;CAC7F,QAAO,CAEP;AACD,QAAO,gBAAgB;AAC1B;AAQM,eAAe,eAAe,EACjC,WACA,MACA,SACA,cACA,OACc,EAAiB;CAC/B,MAAM,WAAW,0BAA0B,eAAe;CAC1D,MAAM,WAAW,SAAS,IAAI,UAAU;CACxC,MAAM,YAAY,QAAQ,QAAQ,KAAK,EAAE,KAAK;CAE9C,IAAI,cAAc,SAAS,UAAU;AACrC,KAAI;EACA,MAAM,UAAU,KAAK,WAAW,eAAe;EAC/C,MAAM,MAAM,MAAM,SAAS,SAAS,OAAO;EAC3C,MAAM,MAAM,KAAK,MAAM,IAAI;AAC3B,aAAW,IAAI,SAAS,YAAY,IAAI,KAAK,SAAS,EAClD,eAAc,IAAI;CAEzB,QAAO,CAEP;CAED,MAAM,iBAAiB,MAAM,qBAAqB,UAAU;CAE5D,MAAMC,UAAoC;EACtC;EACA;EACA;EACA;EACA;EACA,aAAa;CAChB;AAED,OAAM,gBAAgB,SAAS,UAAU;EACrC,MAAM;EACN;EACA;CACH,EAAC;CAEF,MAAM,SAAS,UAAU,gBAAgB;AACzC,QAAO,MAAM,uBAAuB,UAAU,EAAE;AAChD,QAAO,MAAM,wBAAwB,SAAS,wBAAwB,gBAAgB,QAAQ,CAAC,EAAE;AACjG,KAAI,cAAc,oBAAoB,QAClC,QAAO,KAAK,yFAAyF;AAE5G;AACM,SAAS,gBAAgBC,QAAoB;AAChD,QAAO,OAAO,QACV,QACA,6DACA,CAAC,YACG,QACK,OAAO,aAAa;EACjB,MAAM;EACN,SAAS,OAAO,OAAO,oBAAoB;EAC3C,cAAc;EACd,UAAU;CACb,EAAC,CACD,OAAO,QAAQ;EACZ,MAAM;EACN,SAAS;EACT,UAAU;CACb,EAAC,CACD,OAAO,WAAW;EACf,MAAM;EACN,SAAS,OAAO,OAAO,0BAA0B;EACjD,SAAS,0BAA0B;EACnC,UAAU;CACb,EAAC,CACD,OAAO,iBAAiB;EACrB,MAAM;EACN,SAAS;EACT,UAAU;CACb,EAAC,CACD,OAAO,SAAS;EACb,MAAM;EACN,SAAS;EACT,UAAU;CACb,EAAC,EACV,OAAO,EAAE,WAAW,MAAM,SAAS,cAAc,OAAO,KAAK;AACzD,QAAM,eAAe;GACjB;GACA;GACA;GACA;GACA;EACH,EAAC;CACL,EACJ;AACJ;;;;ACxHM,SAAS,wBAAwBC,QAAoB;CACxD,MAAM,kBAAkB,eAAe,OAAO;CAC9C,MAAM,mBAAmB,gBAAgB,gBAAgB;AACzD,QAAO,iBAAiB,QAAQ,qBAAqB,iCAAiC,CAAC,YACnF,gBAAgB,eAAe,QAAQ,CAAC,CAC3C;AACJ"}
|
|
1
|
+
{"version":3,"file":"commands-lJSW2Kuf.js","names":["packageManager: PackageManager","cwd: string","argsByPackageManager: Record<PackageManager, readonly string[]>","context: FrameworkScaffoldContext","parser: Argv","targetDir: string","context: FrameworkScaffoldContext","parser: Argv","parser: Argv"],"sources":["../src/commands/runInstall.ts","../src/commands/runNewCommand.ts","../src/commands/runInitCommand.ts","../src/commands/registerCodegenCommands.ts","../src/commands/index.ts"],"sourcesContent":["import { spawnSync } from 'child_process';\nimport type { PackageManager } from '../frameworks';\n\nexport function runInstall(packageManager: PackageManager, cwd: string): void {\n const argsByPackageManager: Record<PackageManager, readonly string[]> = {\n pnpm: ['install'],\n npm: ['install'],\n yarn: ['install'],\n bun: ['install'],\n };\n\n const result = spawnSync(packageManager, [...argsByPackageManager[packageManager]], {\n cwd,\n stdio: 'inherit',\n env: process.env,\n });\n\n if (result.status !== 0) {\n throw new Error(\n `Dependency install failed with ${packageManager}. Exit code: ${String(result.status ?? 'unknown')}.`\n );\n }\n}\n","import { getLogger } from '@danceroutine/tango-core';\nimport { basename, resolve } from 'path/posix';\nimport {\n type SupportedFramework,\n type PackageManager,\n FrameworkScaffoldRegistry,\n type FrameworkScaffoldContext,\n scaffoldProject,\n} from '../frameworks';\nimport {\n PACKAGE_MANAGER,\n SCAFFOLD_DATABASE_DIALECT,\n SUPPORTED_FRAMEWORK,\n type ScaffoldDatabaseDialect,\n} from '../frameworks/contracts/FrameworkScaffoldStrategy';\nimport { runInstall } from './runInstall';\nimport type { Argv } from 'yargs';\n\ntype NewCommandArgs = {\n name?: string;\n framework: SupportedFramework;\n path?: string;\n packageManager: PackageManager;\n dialect: ScaffoldDatabaseDialect;\n install: boolean;\n force: boolean;\n seed: boolean;\n};\nexport async function runNewCommand({\n path,\n name,\n framework,\n packageManager,\n dialect,\n install,\n force,\n seed: includeSeed,\n}: NewCommandArgs): Promise<void> {\n const registry = FrameworkScaffoldRegistry.createDefault();\n const strategy = registry.get(framework)!;\n\n const requestedPath = path ?? name ?? 'tango-app';\n const projectName = name ?? basename(requestedPath);\n const targetDir = resolve(process.cwd(), requestedPath);\n\n const context: FrameworkScaffoldContext = {\n projectName,\n targetDir,\n framework,\n packageManager,\n dialect,\n includeSeed,\n };\n\n await scaffoldProject(context, strategy, { force });\n\n if (install) {\n runInstall(packageManager, targetDir);\n }\n\n const logger = getLogger('tango.codegen');\n logger.info(`Scaffold complete: ${targetDir}`);\n logger.info(`Framework: ${strategy.name}`);\n logger.info(`Run next: cd ${targetDir} && ${packageManager} run dev`);\n}\nexport function withNewCommand(parser: Argv): Argv {\n return parser.command(\n 'new [name]',\n 'Bootstrap a new Tango project',\n (builder) =>\n builder\n .positional('name', {\n type: 'string',\n describe: 'Project name (used as directory when --path is omitted).',\n })\n .option('framework', {\n type: 'string',\n choices: Object.values(SUPPORTED_FRAMEWORK),\n demandOption: true,\n describe: 'Host framework scaffold to generate.',\n })\n .option('path', {\n type: 'string',\n describe: 'Target directory for generated project files.',\n })\n .option('package-manager', {\n type: 'string',\n choices: Object.values(PACKAGE_MANAGER),\n default: PACKAGE_MANAGER.PNPM,\n describe: 'Package manager used for follow-up instructions and optional install.',\n })\n .option('dialect', {\n type: 'string',\n choices: Object.values(SCAFFOLD_DATABASE_DIALECT),\n default: SCAFFOLD_DATABASE_DIALECT.SQLITE,\n describe: 'Database dialect default for generated config.',\n })\n .option('install', {\n type: 'boolean',\n default: false,\n describe: 'Install dependencies after scaffolding.',\n })\n .option('force', {\n type: 'boolean',\n default: false,\n describe: 'Allow writing into a non-empty target directory.',\n })\n .option('seed', {\n type: 'boolean',\n default: true,\n describe: 'Include seed/bootstrap sample artifacts when supported by the framework strategy.',\n }),\n async ({ name, framework, path, packageManager, dialect, install, force, seed }) => {\n await runNewCommand({\n name,\n framework,\n path,\n packageManager,\n dialect,\n install,\n force,\n seed,\n });\n }\n );\n}\n","import { getLogger } from '@danceroutine/tango-core';\nimport { readdir, readFile } from 'fs/promises';\nimport { resolve, basename, join } from 'path/posix';\nimport {\n type PackageManager,\n type SupportedFramework,\n FrameworkScaffoldRegistry,\n type FrameworkScaffoldContext,\n scaffoldProject,\n} from '../frameworks';\nimport {\n PACKAGE_MANAGER,\n SCAFFOLD_DATABASE_DIALECT,\n type ScaffoldDatabaseDialect,\n SUPPORTED_FRAMEWORK,\n} from '../frameworks/contracts/FrameworkScaffoldStrategy';\nimport type { Argv } from 'yargs';\n\nasync function detectPackageManager(targetDir: string): Promise<PackageManager> {\n try {\n const entries = await readdir(targetDir);\n if (entries.includes('pnpm-lock.yaml')) return PACKAGE_MANAGER.PNPM;\n if (entries.includes('package-lock.json')) return PACKAGE_MANAGER.NPM;\n if (entries.includes('yarn.lock')) return PACKAGE_MANAGER.YARN;\n if (entries.includes('bun.lockb') || entries.includes('bun.lock')) return PACKAGE_MANAGER.BUN;\n } catch {\n // ENOENT or other: fall through to default\n }\n return PACKAGE_MANAGER.PNPM;\n}\ntype InitCommandArgs = {\n framework: SupportedFramework;\n path: string;\n dialect: ScaffoldDatabaseDialect;\n skipExisting: boolean;\n force: boolean;\n};\nexport async function runInitCommand({\n framework,\n path,\n dialect,\n skipExisting,\n force,\n}: InitCommandArgs): Promise<void> {\n const registry = FrameworkScaffoldRegistry.createDefault();\n const strategy = registry.get(framework)!;\n const targetDir = resolve(process.cwd(), path);\n\n let projectName = basename(targetDir);\n try {\n const pkgPath = join(targetDir, 'package.json');\n const raw = await readFile(pkgPath, 'utf8');\n const pkg = JSON.parse(raw) as { name?: string };\n if (typeof pkg.name === 'string' && pkg.name.length > 0) {\n projectName = pkg.name;\n }\n } catch {\n // no package.json or invalid: keep basename\n }\n\n const packageManager = await detectPackageManager(targetDir);\n\n const context: FrameworkScaffoldContext = {\n projectName,\n targetDir,\n framework,\n packageManager,\n dialect,\n includeSeed: true,\n };\n\n await scaffoldProject(context, strategy, {\n mode: 'init',\n skipExisting,\n force,\n });\n\n const logger = getLogger('tango.codegen');\n logger.info(`Tango init complete: ${targetDir}`);\n logger.info(`Install dependencies: ${strategy.getTangoInstallOneLiner(packageManager, context)}`);\n if (framework === SUPPORTED_FRAMEWORK.EXPRESS) {\n logger.info(\"Mount Tango: import { registerTango } from './src/tango.js'; await registerTango(app);\");\n }\n if (framework === SUPPORTED_FRAMEWORK.NUXT) {\n logger.info(\n 'Wire Tango handlers: register Nitro serverHandlers in nuxt.config.ts and export NuxtAdapter-backed handlers from server/tango/.'\n );\n }\n}\nexport function withInitCommand(parser: Argv): Argv {\n return parser.command(\n 'init',\n 'Add Tango to an existing project (only Tango-layer files)',\n (builder) =>\n builder\n .option('framework', {\n type: 'string',\n choices: Object.values(SUPPORTED_FRAMEWORK),\n demandOption: true,\n describe: 'Host framework (express, next, or nuxt).',\n })\n .option('path', {\n type: 'string',\n default: '.',\n describe: 'Target directory (default: current directory).',\n })\n .option('dialect', {\n type: 'string',\n choices: Object.values(SCAFFOLD_DATABASE_DIALECT),\n default: SCAFFOLD_DATABASE_DIALECT.SQLITE,\n describe: 'Database dialect for generated config.',\n })\n .option('skip-existing', {\n type: 'boolean',\n default: true,\n describe: 'Do not overwrite existing files.',\n })\n .option('force', {\n type: 'boolean',\n default: false,\n describe: 'Overwrite existing files when set.',\n }),\n async ({ framework, path, dialect, skipExisting, force }) => {\n await runInitCommand({\n framework,\n path,\n dialect,\n skipExisting,\n force,\n });\n }\n );\n}\n","import type { Argv } from 'yargs';\nimport { withNewCommand } from './runNewCommand';\nimport { withInitCommand } from './runInitCommand';\n\n/**\n * Register Tango project scaffolding commands on an existing CLI parser.\n */\nexport function registerCodegenCommands(parser: Argv): Argv {\n const withTopLevelNew = withNewCommand(parser);\n const withTopLevelInit = withInitCommand(withTopLevelNew);\n return withTopLevelInit.command('codegen <command>', 'Code generation command group', (builder) =>\n withInitCommand(withNewCommand(builder))\n );\n}\n","/**\n * Domain boundary barrel: centralizes this subdomain's public contract.\n */\n\nexport { registerCodegenCommands } from './registerCodegenCommands';\n"],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { TemplateBuilder } from './template/TemplateBuilder';
|
|
|
3
3
|
export declare const SUPPORTED_FRAMEWORK: {
|
|
4
4
|
readonly EXPRESS: "express";
|
|
5
5
|
readonly NEXT: "next";
|
|
6
|
+
readonly NUXT: "nuxt";
|
|
6
7
|
};
|
|
7
8
|
export type SupportedFramework = (typeof SUPPORTED_FRAMEWORK)[keyof typeof SUPPORTED_FRAMEWORK];
|
|
8
9
|
export declare const PACKAGE_MANAGER: {
|
|
@@ -21,7 +21,7 @@ export declare abstract class TemplateBuilder implements BoundTemplate {
|
|
|
21
21
|
/**
|
|
22
22
|
* One-liner to install Tango + dialect deps and Tango CLI (for init success message).
|
|
23
23
|
*/
|
|
24
|
-
static getTangoInstallOneLiner(packageManager: string, dialect: 'sqlite' | 'postgres', framework: 'express' | 'next'): string;
|
|
24
|
+
static getTangoInstallOneLiner(packageManager: string, dialect: 'sqlite' | 'postgres', framework: 'express' | 'next' | 'nuxt'): string;
|
|
25
25
|
/**
|
|
26
26
|
* Shorthand for static content (no subclass needed). Returns a BoundTemplate that add* methods accept.
|
|
27
27
|
*/
|
|
@@ -8,4 +8,5 @@ export { ScaffoldTemplateDescriptor } from './contracts/template/implementation/
|
|
|
8
8
|
export { FrameworkScaffoldRegistry } from './registry/FrameworkScaffoldRegistry';
|
|
9
9
|
export { ExpressScaffoldStrategy } from './strategies/express/ExpressScaffoldStrategy';
|
|
10
10
|
export { NextScaffoldStrategy } from './strategies/next/NextScaffoldStrategy';
|
|
11
|
+
export { NuxtScaffoldStrategy } from './strategies/nuxt/NuxtScaffoldStrategy';
|
|
11
12
|
export { scaffoldProject, type ScaffoldProjectOptions } from './scaffold/scaffoldProject';
|
package/dist/frameworks/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { ExpressScaffoldStrategy, FrameworkScaffoldRegistry, FrameworkScaffoldStrategy, NextScaffoldStrategy, SCAFFOLD_TEMPLATE_CATEGORY, ScaffoldTemplateDescriptor, scaffoldProject } from "../frameworks-
|
|
1
|
+
import { ExpressScaffoldStrategy, FrameworkScaffoldRegistry, FrameworkScaffoldStrategy, NextScaffoldStrategy, NuxtScaffoldStrategy, SCAFFOLD_TEMPLATE_CATEGORY, ScaffoldTemplateDescriptor, scaffoldProject } from "../frameworks-DOnjbO9C.js";
|
|
2
2
|
|
|
3
|
-
export { ExpressScaffoldStrategy, FrameworkScaffoldRegistry, FrameworkScaffoldStrategy, NextScaffoldStrategy, SCAFFOLD_TEMPLATE_CATEGORY, ScaffoldTemplateDescriptor, scaffoldProject };
|
|
3
|
+
export { ExpressScaffoldStrategy, FrameworkScaffoldRegistry, FrameworkScaffoldStrategy, NextScaffoldStrategy, NuxtScaffoldStrategy, SCAFFOLD_TEMPLATE_CATEGORY, ScaffoldTemplateDescriptor, scaffoldProject };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { FrameworkScaffoldStrategy } from '../../contracts/FrameworkScaffoldStrategy';
|
|
2
|
+
import type { ScaffoldTemplate } from '../../contracts/template/ScaffoldTemplate';
|
|
3
|
+
/**
|
|
4
|
+
* Scaffold strategy for creating a Nuxt-hosted Tango project.
|
|
5
|
+
*/
|
|
6
|
+
export declare class NuxtScaffoldStrategy extends FrameworkScaffoldStrategy {
|
|
7
|
+
readonly id: "nuxt";
|
|
8
|
+
readonly name = "Nuxt";
|
|
9
|
+
readonly description = "Bootstrap a Tango application hosted by Nuxt Nitro and SSR pages.";
|
|
10
|
+
/**
|
|
11
|
+
* Return the file templates needed for the generated Nuxt project.
|
|
12
|
+
*/
|
|
13
|
+
getTemplates(): readonly ScaffoldTemplate[];
|
|
14
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TemplateBuilder } from '../../../contracts/template/TemplateBuilder';
|
|
2
|
+
import type { FrameworkScaffoldContext } from '../../../contracts/template/ScaffoldTemplate';
|
|
3
|
+
export declare class BootstrapTemplateBuilder extends TemplateBuilder {
|
|
4
|
+
constructor();
|
|
5
|
+
protected resolveTemplate(_context: FrameworkScaffoldContext): string;
|
|
6
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TemplateBuilder } from '../../../contracts/template/TemplateBuilder';
|
|
2
|
+
import type { FrameworkScaffoldContext } from '../../../contracts/template/ScaffoldTemplate';
|
|
3
|
+
export declare class HealthRouteTemplateBuilder extends TemplateBuilder {
|
|
4
|
+
constructor();
|
|
5
|
+
protected resolveTemplate(_context: FrameworkScaffoldContext): string;
|
|
6
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TemplateBuilder } from '../../../contracts/template/TemplateBuilder';
|
|
2
|
+
import type { FrameworkScaffoldContext } from '../../../contracts/template/ScaffoldTemplate';
|
|
3
|
+
export declare class AppShellTemplateBuilder extends TemplateBuilder {
|
|
4
|
+
constructor();
|
|
5
|
+
protected resolveTemplate(_context: FrameworkScaffoldContext): string;
|
|
6
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { TemplateBuilder } from '../../../contracts/template/TemplateBuilder';
|
|
2
|
+
import type { FrameworkScaffoldContext } from '../../../contracts/template/ScaffoldTemplate';
|
|
3
|
+
export declare class TodoModelTemplateBuilder extends TemplateBuilder {
|
|
4
|
+
constructor();
|
|
5
|
+
static context(context: FrameworkScaffoldContext): TodoModelTemplateBuilder;
|
|
6
|
+
protected resolveTemplate(_context: FrameworkScaffoldContext): string;
|
|
7
|
+
}
|
|
8
|
+
export declare class ModelsBarrelTemplateBuilder extends TemplateBuilder {
|
|
9
|
+
constructor();
|
|
10
|
+
protected resolveTemplate(_context: FrameworkScaffoldContext): string;
|
|
11
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TemplateBuilder } from '../../../contracts/template/TemplateBuilder';
|
|
2
|
+
import type { FrameworkScaffoldContext } from '../../../contracts/template/ScaffoldTemplate';
|
|
3
|
+
export declare class NuxtConfigTemplateBuilder extends TemplateBuilder {
|
|
4
|
+
constructor();
|
|
5
|
+
protected resolveTemplate(_context: FrameworkScaffoldContext): string;
|
|
6
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TemplateBuilder } from '../../../contracts/template/TemplateBuilder';
|
|
2
|
+
import type { FrameworkScaffoldContext } from '../../../contracts/template/ScaffoldTemplate';
|
|
3
|
+
export declare class OpenAPITemplateBuilder extends TemplateBuilder {
|
|
4
|
+
constructor();
|
|
5
|
+
protected resolveTemplate(_context: FrameworkScaffoldContext): string;
|
|
6
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TemplateBuilder } from '../../../contracts/template/TemplateBuilder';
|
|
2
|
+
import type { FrameworkScaffoldContext } from '../../../contracts/template/ScaffoldTemplate';
|
|
3
|
+
export declare class OpenAPIRouteTemplateBuilder extends TemplateBuilder {
|
|
4
|
+
constructor();
|
|
5
|
+
protected resolveTemplate(_context: FrameworkScaffoldContext): string;
|
|
6
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TemplateBuilder } from '../../../contracts/template/TemplateBuilder';
|
|
2
|
+
import type { FrameworkScaffoldContext } from '../../../contracts/template/ScaffoldTemplate';
|
|
3
|
+
export declare class PackageJsonTemplateBuilder extends TemplateBuilder {
|
|
4
|
+
constructor();
|
|
5
|
+
protected resolveTemplate(context: FrameworkScaffoldContext): string;
|
|
6
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TemplateBuilder } from '../../../contracts/template/TemplateBuilder';
|
|
2
|
+
import type { FrameworkScaffoldContext } from '../../../contracts/template/ScaffoldTemplate';
|
|
3
|
+
export declare class PageTemplateBuilder extends TemplateBuilder {
|
|
4
|
+
constructor();
|
|
5
|
+
protected resolveTemplate(_context: FrameworkScaffoldContext): string;
|
|
6
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TemplateBuilder } from '../../../contracts/template/TemplateBuilder';
|
|
2
|
+
import type { FrameworkScaffoldContext } from '../../../contracts/template/ScaffoldTemplate';
|
|
3
|
+
export declare class ReadmeTemplateBuilder extends TemplateBuilder {
|
|
4
|
+
constructor();
|
|
5
|
+
protected resolveTemplate(context: FrameworkScaffoldContext): string;
|
|
6
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { TemplateBuilder } from '../../../contracts/template/TemplateBuilder';
|
|
2
|
+
import type { FrameworkScaffoldContext } from '../../../contracts/template/ScaffoldTemplate';
|
|
3
|
+
export declare class TodoSerializerTemplateBuilder extends TemplateBuilder {
|
|
4
|
+
constructor();
|
|
5
|
+
protected resolveTemplate(_context: FrameworkScaffoldContext): string;
|
|
6
|
+
}
|
|
7
|
+
export declare class SerializersBarrelTemplateBuilder extends TemplateBuilder {
|
|
8
|
+
constructor();
|
|
9
|
+
protected resolveTemplate(_context: FrameworkScaffoldContext): string;
|
|
10
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TemplateBuilder } from '../../../contracts/template/TemplateBuilder';
|
|
2
|
+
import type { FrameworkScaffoldContext } from '../../../contracts/template/ScaffoldTemplate';
|
|
3
|
+
export declare class TangoConfigTemplateBuilder extends TemplateBuilder {
|
|
4
|
+
constructor();
|
|
5
|
+
protected resolveTemplate(context: FrameworkScaffoldContext): string;
|
|
6
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TemplateBuilder } from '../../../contracts/template/TemplateBuilder';
|
|
2
|
+
import type { FrameworkScaffoldContext } from '../../../contracts/template/ScaffoldTemplate';
|
|
3
|
+
export declare class TodoRouteTemplateBuilder extends TemplateBuilder {
|
|
4
|
+
constructor();
|
|
5
|
+
protected resolveTemplate(_context: FrameworkScaffoldContext): string;
|
|
6
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TemplateBuilder } from '../../../contracts/template/TemplateBuilder';
|
|
2
|
+
import type { FrameworkScaffoldContext } from '../../../contracts/template/ScaffoldTemplate';
|
|
3
|
+
export declare class TsConfigTemplateBuilder extends TemplateBuilder {
|
|
4
|
+
constructor();
|
|
5
|
+
protected resolveTemplate(_context: FrameworkScaffoldContext): string;
|
|
6
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TemplateBuilder } from '../../../contracts/template/TemplateBuilder';
|
|
2
|
+
import type { FrameworkScaffoldContext } from '../../../contracts/template/ScaffoldTemplate';
|
|
3
|
+
export declare class ViewSetTemplateBuilder extends TemplateBuilder {
|
|
4
|
+
constructor();
|
|
5
|
+
protected resolveTemplate(_context: FrameworkScaffoldContext): string;
|
|
6
|
+
}
|