@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.
- package/LICENSE +21 -0
- package/README.md +19 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +5 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +17 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/build.d.ts +9 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +39 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/check.d.ts +3 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +27 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/dev.d.ts +18 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +42 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/generate.d.ts +28 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +67 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/new.d.ts +19 -0
- package/dist/commands/new.d.ts.map +1 -0
- package/dist/commands/new.js +44 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/start.d.ts +23 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +49 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/dev/orchestrator.d.ts +9 -0
- package/dist/dev/orchestrator.d.ts.map +1 -0
- package/dist/dev/orchestrator.js +80 -0
- package/dist/dev/orchestrator.js.map +1 -0
- package/dist/dev/tsc-pipe.d.ts +3 -0
- package/dist/dev/tsc-pipe.d.ts.map +1 -0
- package/dist/dev/tsc-pipe.js +44 -0
- package/dist/dev/tsc-pipe.js.map +1 -0
- package/dist/generate/module-updater.d.ts +20 -0
- package/dist/generate/module-updater.d.ts.map +1 -0
- package/dist/generate/module-updater.js +158 -0
- package/dist/generate/module-updater.js.map +1 -0
- package/dist/generate/runner.d.ts +3 -0
- package/dist/generate/runner.d.ts.map +1 -0
- package/dist/generate/runner.js +130 -0
- package/dist/generate/runner.js.map +1 -0
- package/dist/generate/schematics.d.ts +8 -0
- package/dist/generate/schematics.d.ts.map +1 -0
- package/dist/generate/schematics.js +68 -0
- package/dist/generate/schematics.js.map +1 -0
- package/dist/generate/templates/controller.d.ts +3 -0
- package/dist/generate/templates/controller.d.ts.map +1 -0
- package/dist/generate/templates/controller.js +14 -0
- package/dist/generate/templates/controller.js.map +1 -0
- package/dist/generate/templates/guard.d.ts +3 -0
- package/dist/generate/templates/guard.d.ts.map +1 -0
- package/dist/generate/templates/guard.js +13 -0
- package/dist/generate/templates/guard.js.map +1 -0
- package/dist/generate/templates/middleware.d.ts +3 -0
- package/dist/generate/templates/middleware.d.ts.map +1 -0
- package/dist/generate/templates/middleware.js +11 -0
- package/dist/generate/templates/middleware.js.map +1 -0
- package/dist/generate/templates/module.d.ts +3 -0
- package/dist/generate/templates/module.d.ts.map +1 -0
- package/dist/generate/templates/module.js +8 -0
- package/dist/generate/templates/module.js.map +1 -0
- package/dist/generate/templates/resource.d.ts +5 -0
- package/dist/generate/templates/resource.d.ts.map +1 -0
- package/dist/generate/templates/resource.js +78 -0
- package/dist/generate/templates/resource.js.map +1 -0
- package/dist/generate/templates/service.d.ts +3 -0
- package/dist/generate/templates/service.d.ts.map +1 -0
- package/dist/generate/templates/service.js +12 -0
- package/dist/generate/templates/service.js.map +1 -0
- package/dist/generate/types.d.ts +38 -0
- package/dist/generate/types.d.ts.map +1 -0
- package/dist/generate/types.js +2 -0
- package/dist/generate/types.js.map +1 -0
- package/dist/runtime/commands.d.ts +11 -0
- package/dist/runtime/commands.d.ts.map +1 -0
- package/dist/runtime/commands.js +46 -0
- package/dist/runtime/commands.js.map +1 -0
- package/dist/runtime/detect.d.ts +10 -0
- package/dist/runtime/detect.d.ts.map +1 -0
- package/dist/runtime/detect.js +65 -0
- package/dist/runtime/detect.js.map +1 -0
- package/dist/runtime/types.d.ts +2 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +2 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/scaffold/app-composer.d.ts +12 -0
- package/dist/scaffold/app-composer.d.ts.map +1 -0
- package/dist/scaffold/app-composer.js +102 -0
- package/dist/scaffold/app-composer.js.map +1 -0
- package/dist/scaffold/features/config.d.ts +3 -0
- package/dist/scaffold/features/config.d.ts.map +1 -0
- package/dist/scaffold/features/config.js +43 -0
- package/dist/scaffold/features/config.js.map +1 -0
- package/dist/scaffold/features/cors.d.ts +3 -0
- package/dist/scaffold/features/cors.d.ts.map +1 -0
- package/dist/scaffold/features/cors.js +19 -0
- package/dist/scaffold/features/cors.js.map +1 -0
- package/dist/scaffold/features/drizzle-mysql.d.ts +3 -0
- package/dist/scaffold/features/drizzle-mysql.d.ts.map +1 -0
- package/dist/scaffold/features/drizzle-mysql.js +28 -0
- package/dist/scaffold/features/drizzle-mysql.js.map +1 -0
- package/dist/scaffold/features/drizzle-postgres.d.ts +3 -0
- package/dist/scaffold/features/drizzle-postgres.d.ts.map +1 -0
- package/dist/scaffold/features/drizzle-postgres.js +28 -0
- package/dist/scaffold/features/drizzle-postgres.js.map +1 -0
- package/dist/scaffold/features/drizzle-sqlite.d.ts +3 -0
- package/dist/scaffold/features/drizzle-sqlite.d.ts.map +1 -0
- package/dist/scaffold/features/drizzle-sqlite.js +29 -0
- package/dist/scaffold/features/drizzle-sqlite.js.map +1 -0
- package/dist/scaffold/features/jwt-auth.d.ts +3 -0
- package/dist/scaffold/features/jwt-auth.d.ts.map +1 -0
- package/dist/scaffold/features/jwt-auth.js +117 -0
- package/dist/scaffold/features/jwt-auth.js.map +1 -0
- package/dist/scaffold/features/mongoose.d.ts +3 -0
- package/dist/scaffold/features/mongoose.d.ts.map +1 -0
- package/dist/scaffold/features/mongoose.js +23 -0
- package/dist/scaffold/features/mongoose.js.map +1 -0
- package/dist/scaffold/features/papr.d.ts +3 -0
- package/dist/scaffold/features/papr.d.ts.map +1 -0
- package/dist/scaffold/features/papr.js +24 -0
- package/dist/scaffold/features/papr.js.map +1 -0
- package/dist/scaffold/features/registry.d.ts +12 -0
- package/dist/scaffold/features/registry.d.ts.map +1 -0
- package/dist/scaffold/features/registry.js +76 -0
- package/dist/scaffold/features/registry.js.map +1 -0
- package/dist/scaffold/features/serve-static.d.ts +3 -0
- package/dist/scaffold/features/serve-static.d.ts.map +1 -0
- package/dist/scaffold/features/serve-static.js +17 -0
- package/dist/scaffold/features/serve-static.js.map +1 -0
- package/dist/scaffold/features/swagger.d.ts +3 -0
- package/dist/scaffold/features/swagger.d.ts.map +1 -0
- package/dist/scaffold/features/swagger.js +20 -0
- package/dist/scaffold/features/swagger.js.map +1 -0
- package/dist/scaffold/package-install.d.ts +3 -0
- package/dist/scaffold/package-install.d.ts.map +1 -0
- package/dist/scaffold/package-install.js +17 -0
- package/dist/scaffold/package-install.js.map +1 -0
- package/dist/scaffold/project-files.d.ts +13 -0
- package/dist/scaffold/project-files.d.ts.map +1 -0
- package/dist/scaffold/project-files.js +78 -0
- package/dist/scaffold/project-files.js.map +1 -0
- package/dist/scaffold/prompts.d.ts +11 -0
- package/dist/scaffold/prompts.d.ts.map +1 -0
- package/dist/scaffold/prompts.js +79 -0
- package/dist/scaffold/prompts.js.map +1 -0
- package/dist/scaffold/scaffold.d.ts +14 -0
- package/dist/scaffold/scaffold.d.ts.map +1 -0
- package/dist/scaffold/scaffold.js +88 -0
- package/dist/scaffold/scaffold.js.map +1 -0
- package/dist/scaffold/types.d.ts +41 -0
- package/dist/scaffold/types.d.ts.map +1 -0
- package/dist/scaffold/types.js +2 -0
- package/dist/scaffold/types.js.map +1 -0
- package/dist/utils/format.d.ts +2 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +43 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/fs.d.ts +2 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +7 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +10 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/naming.d.ts +4 -0
- package/dist/utils/naming.d.ts.map +1 -0
- package/dist/utils/naming.js +18 -0
- package/dist/utils/naming.js.map +1 -0
- package/dist/utils/preflight.d.ts +3 -0
- package/dist/utils/preflight.d.ts.map +1 -0
- package/dist/utils/preflight.js +32 -0
- package/dist/utils/preflight.js.map +1 -0
- package/dist/utils/writer.d.ts +16 -0
- package/dist/utils/writer.d.ts.map +1 -0
- package/dist/utils/writer.js +42 -0
- package/dist/utils/writer.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/scaffold/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Runtime } from '../runtime/types.js';
|
|
2
|
+
import type { FeatureId } from './types.js';
|
|
3
|
+
import type { PackageManager } from './prompts.js';
|
|
4
|
+
export interface ScaffoldOptions {
|
|
5
|
+
name: string;
|
|
6
|
+
runtime: Runtime;
|
|
7
|
+
featureIds: FeatureId[];
|
|
8
|
+
packageManager: PackageManager;
|
|
9
|
+
targetDir: string;
|
|
10
|
+
dryRun?: boolean;
|
|
11
|
+
skipInstall?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function scaffoldProject(options: ScaffoldOptions): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=scaffold.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/scaffold/scaffold.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,YAAY,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAGlD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,SAAS,EAAE,CAAA;IACvB,cAAc,EAAE,cAAc,CAAA;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAmF7E"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { writeFileRecursive } from '../utils/fs.js';
|
|
4
|
+
import { installDependencies } from './package-install.js';
|
|
5
|
+
import { resolveFeatures } from './features/registry.js';
|
|
6
|
+
import { buildPackageJson, buildTsconfig, buildGitignore, buildEnvFile } from './project-files.js';
|
|
7
|
+
import { composeAppModule, composeMainTs, composeAppController, composeAppService } from './app-composer.js';
|
|
8
|
+
import { logger } from '../utils/logger.js';
|
|
9
|
+
import * as p from '@clack/prompts';
|
|
10
|
+
export async function scaffoldProject(options) {
|
|
11
|
+
const { name, runtime, featureIds, packageManager, targetDir, dryRun = false, skipInstall = false } = options;
|
|
12
|
+
const root = resolve(process.cwd(), targetDir);
|
|
13
|
+
if (existsSync(root)) {
|
|
14
|
+
logger.error(`Directory "${targetDir}" already exists`);
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
// Resolve features (auto-select requires, check conflicts)
|
|
18
|
+
const { features, error } = resolveFeatures(featureIds);
|
|
19
|
+
if (error) {
|
|
20
|
+
logger.error(error);
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
const ctx = { name, runtime, features, dryRun };
|
|
24
|
+
if (dryRun) {
|
|
25
|
+
logger.info('DRY RUN - no files will be written\n');
|
|
26
|
+
}
|
|
27
|
+
// Collect all files to write
|
|
28
|
+
const files = {
|
|
29
|
+
'package.json': buildPackageJson({ name, runtime, features }),
|
|
30
|
+
'tsconfig.json': buildTsconfig(runtime),
|
|
31
|
+
'.gitignore': buildGitignore(),
|
|
32
|
+
'src/main.ts': composeMainTs({ runtime, features }),
|
|
33
|
+
'src/app/app.module.ts': composeAppModule({ runtime, features }),
|
|
34
|
+
'src/app/app.controller.ts': composeAppController(),
|
|
35
|
+
'src/app/app.service.ts': composeAppService(),
|
|
36
|
+
};
|
|
37
|
+
// Add .env if any feature has envVars (or base env needed)
|
|
38
|
+
const hasEnvVars = features.some((f) => f.envVars);
|
|
39
|
+
if (hasEnvVars) {
|
|
40
|
+
files['.env'] = buildEnvFile(features);
|
|
41
|
+
}
|
|
42
|
+
// Add feature-specific files
|
|
43
|
+
for (const feature of features) {
|
|
44
|
+
if (feature.files) {
|
|
45
|
+
const featureFiles = feature.files(ctx);
|
|
46
|
+
Object.assign(files, featureFiles);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Write files
|
|
50
|
+
for (const [relativePath, content] of Object.entries(files)) {
|
|
51
|
+
const fullPath = resolve(root, relativePath);
|
|
52
|
+
if (dryRun) {
|
|
53
|
+
logger.info(` CREATE ${relativePath}`);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
await writeFileRecursive(fullPath, content);
|
|
57
|
+
logger.success(` CREATE ${relativePath}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Install dependencies
|
|
61
|
+
if (!dryRun && !skipInstall) {
|
|
62
|
+
console.log();
|
|
63
|
+
await installDependencies(root, packageManager);
|
|
64
|
+
}
|
|
65
|
+
else if (dryRun) {
|
|
66
|
+
console.log();
|
|
67
|
+
const allDeps = Object.assign({}, ...features.map((f) => f.packages));
|
|
68
|
+
const allDevDeps = Object.assign({}, ...features.map((f) => f.devPackages ?? {}));
|
|
69
|
+
const depList = Object.entries(allDeps)
|
|
70
|
+
.map(([k, v]) => ` ${k} ${v}`)
|
|
71
|
+
.join('\n');
|
|
72
|
+
const devDepList = Object.entries(allDevDeps)
|
|
73
|
+
.map(([k, v]) => ` ${k} ${v} (dev)`)
|
|
74
|
+
.join('\n');
|
|
75
|
+
if (depList || devDepList) {
|
|
76
|
+
logger.info(' Dependencies that would be installed:');
|
|
77
|
+
if (depList)
|
|
78
|
+
logger.info(depList);
|
|
79
|
+
if (devDepList)
|
|
80
|
+
logger.info(devDepList);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (!dryRun) {
|
|
84
|
+
console.log();
|
|
85
|
+
p.outro(`Project "${name}" created successfully!\n\n cd ${targetDir}\n miia dev`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=scaffold.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/scaffold/scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAClG,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC5G,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAI3C,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAA;AAYnC,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAwB;IAC5D,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK,EAAE,WAAW,GAAG,KAAK,EAAE,GAAG,OAAO,CAAA;IAC7G,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAA;IAE9C,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,KAAK,CAAC,cAAc,SAAS,kBAAkB,CAAC,CAAA;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,2DAA2D;IAC3D,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,eAAe,CAAC,UAAU,CAAC,CAAA;IACvD,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,GAAG,GAAoB,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;IAEhE,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAA;IACrD,CAAC;IAED,6BAA6B;IAC7B,MAAM,KAAK,GAA2B;QACpC,cAAc,EAAE,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QAC7D,eAAe,EAAE,aAAa,CAAC,OAAO,CAAC;QACvC,YAAY,EAAE,cAAc,EAAE;QAC9B,aAAa,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QACnD,uBAAuB,EAAE,gBAAgB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QAChE,2BAA2B,EAAE,oBAAoB,EAAE;QACnD,wBAAwB,EAAE,iBAAiB,EAAE;KAC9C,CAAA;IAED,2DAA2D;IAC3D,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IAClD,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;IACxC,CAAC;IAED,6BAA6B;IAC7B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACvC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;IAED,cAAc;IACd,KAAK,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;QAC5C,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,YAAY,YAAY,EAAE,CAAC,CAAA;QACzC,CAAC;aAAM,CAAC;YACN,MAAM,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAC3C,MAAM,CAAC,OAAO,CAAC,YAAY,YAAY,EAAE,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,MAAM,mBAAmB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;IACjD,CAAC;SAAM,IAAI,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,MAAM,OAAO,GAA2B,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC7F,MAAM,UAAU,GAA2B,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAA;QACzG,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;aACpC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;aAChC,IAAI,CAAC,IAAI,CAAC,CAAA;QACb,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;aAC1C,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;aACtC,IAAI,CAAC,IAAI,CAAC,CAAA;QACb,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAA;YACtD,IAAI,OAAO;gBAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACjC,IAAI,UAAU;gBAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACzC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,CAAC,CAAC,KAAK,CAAC,YAAY,IAAI,mCAAmC,SAAS,cAAc,CAAC,CAAA;IACrF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Runtime } from '../runtime/types.js';
|
|
2
|
+
export type FeatureId = 'config' | 'jwt-auth' | 'swagger' | 'drizzle-postgres' | 'drizzle-mysql' | 'drizzle-sqlite' | 'papr' | 'mongoose' | 'cors' | 'serve-static';
|
|
3
|
+
export type FeatureGroup = 'core' | 'database' | 'extras';
|
|
4
|
+
export interface Feature {
|
|
5
|
+
id: FeatureId;
|
|
6
|
+
label: string;
|
|
7
|
+
hint: string;
|
|
8
|
+
group: FeatureGroup;
|
|
9
|
+
/** Production dependencies */
|
|
10
|
+
packages: Record<string, string>;
|
|
11
|
+
/** Dev dependencies */
|
|
12
|
+
devPackages?: Record<string, string>;
|
|
13
|
+
/** Import + registration in app.module.ts */
|
|
14
|
+
moduleImport?: {
|
|
15
|
+
/** Full import statement line */
|
|
16
|
+
statement: string;
|
|
17
|
+
/** Each entry is one complete expression inserted into @Module({ imports: [...] }) */
|
|
18
|
+
entries: string[];
|
|
19
|
+
};
|
|
20
|
+
/** Setup code injected into main.ts */
|
|
21
|
+
mainSetup?: {
|
|
22
|
+
imports: string[];
|
|
23
|
+
/** Code lines inserted before app.listen() */
|
|
24
|
+
code: string[];
|
|
25
|
+
};
|
|
26
|
+
/** Extra files to generate */
|
|
27
|
+
files?: (ctx: ScaffoldContext) => Record<string, string>;
|
|
28
|
+
/** Environment variables added to .env */
|
|
29
|
+
envVars?: Record<string, string>;
|
|
30
|
+
/** Feature IDs that will be auto-selected */
|
|
31
|
+
requires?: FeatureId[];
|
|
32
|
+
/** Feature IDs that are mutually exclusive */
|
|
33
|
+
conflicts?: FeatureId[];
|
|
34
|
+
}
|
|
35
|
+
export interface ScaffoldContext {
|
|
36
|
+
name: string;
|
|
37
|
+
runtime: Runtime;
|
|
38
|
+
features: Feature[];
|
|
39
|
+
dryRun: boolean;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scaffold/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,UAAU,GACV,SAAS,GACT,kBAAkB,GAClB,eAAe,GACf,gBAAgB,GAChB,MAAM,GACN,UAAU,GACV,MAAM,GACN,cAAc,CAAA;AAElB,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAA;AAEzD,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,SAAS,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,YAAY,CAAA;IAEnB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEpC,6CAA6C;IAC7C,YAAY,CAAC,EAAE;QACb,iCAAiC;QACjC,SAAS,EAAE,MAAM,CAAA;QACjB,sFAAsF;QACtF,OAAO,EAAE,MAAM,EAAE,CAAA;KAClB,CAAA;IAED,uCAAuC;IACvC,SAAS,CAAC,EAAE;QACV,OAAO,EAAE,MAAM,EAAE,CAAA;QACjB,8CAA8C;QAC9C,IAAI,EAAE,MAAM,EAAE,CAAA;KACf,CAAA;IAED,8BAA8B;IAC9B,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAExD,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEhC,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAA;IACtB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,SAAS,EAAE,CAAA;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,MAAM,EAAE,OAAO,CAAA;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/scaffold/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAgCA,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAajF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { execa } from 'execa';
|
|
4
|
+
const BIOME_CONFIGS = ['biome.json', 'biome.jsonc'];
|
|
5
|
+
const PRETTIER_CONFIGS = [
|
|
6
|
+
'.prettierrc',
|
|
7
|
+
'.prettierrc.json',
|
|
8
|
+
'.prettierrc.yaml',
|
|
9
|
+
'.prettierrc.yml',
|
|
10
|
+
'prettier.config.js',
|
|
11
|
+
];
|
|
12
|
+
function detectFormatter(cwd) {
|
|
13
|
+
if (BIOME_CONFIGS.some((f) => existsSync(join(cwd, f)))) {
|
|
14
|
+
const bin = join(cwd, 'node_modules', '.bin', 'biome');
|
|
15
|
+
if (existsSync(bin))
|
|
16
|
+
return { bin, args: (files) => ['format', '--write', ...files] };
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
if (PRETTIER_CONFIGS.some((f) => existsSync(join(cwd, f)))) {
|
|
20
|
+
const bin = join(cwd, 'node_modules', '.bin', 'prettier');
|
|
21
|
+
if (existsSync(bin))
|
|
22
|
+
return { bin, args: (files) => ['--write', ...files] };
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
export async function formatFiles(filePaths, cwd) {
|
|
28
|
+
if (filePaths.length === 0)
|
|
29
|
+
return;
|
|
30
|
+
const formatter = detectFormatter(cwd);
|
|
31
|
+
if (!formatter)
|
|
32
|
+
return;
|
|
33
|
+
try {
|
|
34
|
+
await execa(formatter.bin, formatter.args(filePaths), {
|
|
35
|
+
cwd,
|
|
36
|
+
stdio: 'pipe',
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// formatter installed but failed - skip silently
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAE7B,MAAM,aAAa,GAAG,CAAC,YAAY,EAAE,aAAa,CAAC,CAAA;AACnD,MAAM,gBAAgB,GAAG;IACvB,aAAa;IACb,kBAAkB;IAClB,kBAAkB;IAClB,iBAAiB;IACjB,oBAAoB;CACrB,CAAA;AAOD,SAAS,eAAe,CAAC,GAAW;IAClC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;QACtD,IAAI,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,EAAE,CAAA;QACrF,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;QACzD,IAAI,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,EAAE,CAAA;QAC3E,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAmB,EAAE,GAAW;IAChE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IAClC,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;IACtC,IAAI,CAAC,SAAS;QAAE,OAAM;IAEtB,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YACpD,GAAG;YACH,KAAK,EAAE,MAAM;SACd,CAAC,CAAA;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,iDAAiD;IACnD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAGA,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGrF"}
|
package/dist/utils/fs.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { dirname } from 'node:path';
|
|
3
|
+
export async function writeFileRecursive(path, content) {
|
|
4
|
+
await mkdir(dirname(path), { recursive: true });
|
|
5
|
+
await writeFile(path, content, 'utf-8');
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAY,EAAE,OAAe;IACpE,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/C,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;AACzC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM;gBACL,MAAM;mBACH,MAAM;iBACR,MAAM;gBACP,MAAM;eACP,MAAM;CAClB,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { consola } from 'consola';
|
|
2
|
+
import { colors } from 'consola/utils';
|
|
3
|
+
export const logger = {
|
|
4
|
+
info: (msg) => consola.log(msg),
|
|
5
|
+
success: (msg) => consola.log(colors.green(msg)),
|
|
6
|
+
error: (msg) => consola.log(colors.red(msg)),
|
|
7
|
+
warn: (msg) => consola.log(colors.yellow(msg)),
|
|
8
|
+
box: (msg) => consola.box(msg),
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEtC,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;IACvC,OAAO,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxD,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpD,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACtD,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;CACvC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../src/utils/naming.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOlD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export function toKebabCase(input) {
|
|
2
|
+
return input
|
|
3
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1-$2')
|
|
4
|
+
.replace(/[_\s]+/g, '-')
|
|
5
|
+
.toLowerCase();
|
|
6
|
+
}
|
|
7
|
+
export function toPascalCase(input) {
|
|
8
|
+
return input
|
|
9
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1-$2')
|
|
10
|
+
.split(/[-_\s]+/)
|
|
11
|
+
.filter(Boolean)
|
|
12
|
+
.map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1).toLowerCase())
|
|
13
|
+
.join('');
|
|
14
|
+
}
|
|
15
|
+
export function lowerFirst(input) {
|
|
16
|
+
return input.charAt(0).toLowerCase() + input.slice(1);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=naming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming.js","sourceRoot":"","sources":["../../src/utils/naming.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,KAAK;SACT,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,WAAW,EAAE,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,KAAK;SACT,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,KAAK,CAAC,SAAS,CAAC;SAChB,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SAClF,IAAI,CAAC,EAAE,CAAC,CAAA;AACb,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AACvD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/utils/preflight.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAWlD,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAqBjG"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { execaSync } from 'execa';
|
|
2
|
+
import { logger } from './logger.js';
|
|
3
|
+
function hasCommand(cmd) {
|
|
4
|
+
try {
|
|
5
|
+
execaSync('which', [cmd]);
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function preflight(runtime, command) {
|
|
13
|
+
if (command !== 'start' && !hasCommand('tsc')) {
|
|
14
|
+
logger.error('TypeScript compiler (tsc) not found. Install typescript:\n npm install -D typescript');
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
if (runtime === 'node' && command === 'dev') {
|
|
18
|
+
try {
|
|
19
|
+
execaSync('node', ['--import', 'tsx', '-e', '""']);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
logger.error('tsx not found. Install it for Node.js dev mode:\n npm install -D tsx');
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (runtime !== 'node' && !hasCommand(runtime)) {
|
|
27
|
+
logger.error(`Runtime "${runtime}" not found in PATH`);
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=preflight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/utils/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGpC,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,CAAC;QACH,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAgB,EAAE,OAA4C;IACtF,IAAI,OAAO,KAAK,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,uFAAuF,CAAC,CAAA;QACrG,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QAC5C,IAAI,CAAC;YACH,SAAS,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAA;YACrF,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,YAAY,OAAO,qBAAqB,CAAC,CAAA;QACtD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface WriteResult {
|
|
2
|
+
created: string[];
|
|
3
|
+
modified: string[];
|
|
4
|
+
skipped: string[];
|
|
5
|
+
}
|
|
6
|
+
export interface WriteFileOptions {
|
|
7
|
+
dryRun?: boolean;
|
|
8
|
+
/** If true, allow overwriting existing files (used for module updates) */
|
|
9
|
+
allowOverwrite?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare function writeGeneratedFile(absolutePath: string, content: string, options?: WriteFileOptions): Promise<'created' | 'skipped'>;
|
|
12
|
+
export declare function writeGeneratedFiles(files: Array<{
|
|
13
|
+
path: string;
|
|
14
|
+
content: string;
|
|
15
|
+
}>, options?: WriteFileOptions): Promise<WriteResult>;
|
|
16
|
+
//# sourceMappingURL=writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/utils/writer.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,0EAA0E;IAC1E,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAiBhC;AAED,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EAC/C,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,WAAW,CAAC,CAuBtB"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { relative } from 'node:path';
|
|
3
|
+
import { writeFileRecursive } from './fs.js';
|
|
4
|
+
import { logger } from './logger.js';
|
|
5
|
+
export async function writeGeneratedFile(absolutePath, content, options = {}) {
|
|
6
|
+
const displayPath = relative(process.cwd(), absolutePath);
|
|
7
|
+
if (!options.allowOverwrite && existsSync(absolutePath)) {
|
|
8
|
+
logger.error(` File already exists: ${displayPath}`);
|
|
9
|
+
return 'skipped';
|
|
10
|
+
}
|
|
11
|
+
if (options.dryRun) {
|
|
12
|
+
const lines = content.split('\n').length;
|
|
13
|
+
logger.info(` CREATE ${displayPath} (${lines} lines)`);
|
|
14
|
+
return 'created';
|
|
15
|
+
}
|
|
16
|
+
await writeFileRecursive(absolutePath, content);
|
|
17
|
+
logger.success(` CREATE ${displayPath}`);
|
|
18
|
+
return 'created';
|
|
19
|
+
}
|
|
20
|
+
export async function writeGeneratedFiles(files, options = {}) {
|
|
21
|
+
const result = { created: [], modified: [], skipped: [] };
|
|
22
|
+
if (!options.allowOverwrite) {
|
|
23
|
+
const conflicts = files.filter((f) => existsSync(f.path));
|
|
24
|
+
if (conflicts.length > 0) {
|
|
25
|
+
for (const c of conflicts) {
|
|
26
|
+
logger.error(` File already exists: ${relative(process.cwd(), c.path)}`);
|
|
27
|
+
}
|
|
28
|
+
return { created: [], modified: [], skipped: files.map((f) => f.path) };
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
for (const file of files) {
|
|
32
|
+
const status = await writeGeneratedFile(file.path, file.content, options);
|
|
33
|
+
if (status === 'created') {
|
|
34
|
+
result.created.push(file.path);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
result.skipped.push(file.path);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/utils/writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAcpC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,YAAoB,EACpB,OAAe,EACf,UAA4B,EAAE;IAE9B,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAA;IAEzD,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACxD,MAAM,CAAC,KAAK,CAAC,0BAA0B,WAAW,EAAE,CAAC,CAAA;QACrD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;QACxC,MAAM,CAAC,IAAI,CAAC,YAAY,WAAW,KAAK,KAAK,SAAS,CAAC,CAAA;QACvD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,kBAAkB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAC/C,MAAM,CAAC,OAAO,CAAC,YAAY,WAAW,EAAE,CAAC,CAAA;IACzC,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,KAA+C,EAC/C,UAA4B,EAAE;IAE9B,MAAM,MAAM,GAAgB,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;IAEtE,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QACzD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC1B,MAAM,CAAC,KAAK,CAAC,0BAA0B,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAC3E,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAA;QACzE,CAAC;IACH,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACzE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@miiajs/cli",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"author": "Ruslan Matiushev",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"description": "CLI for MiiaJS - build, develop, and scaffold MiiaJS applications",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/miiajs/miia.git",
|
|
10
|
+
"directory": "packages/cli"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://github.com/miiajs/miia/tree/main/packages/cli#readme",
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/miiajs/miia/issues"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"miiajs",
|
|
18
|
+
"miia",
|
|
19
|
+
"cli",
|
|
20
|
+
"scaffold",
|
|
21
|
+
"dev-server",
|
|
22
|
+
"build-tool"
|
|
23
|
+
],
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"access": "public"
|
|
26
|
+
},
|
|
27
|
+
"type": "module",
|
|
28
|
+
"bin": {
|
|
29
|
+
"miia": "dist/bin.js"
|
|
30
|
+
},
|
|
31
|
+
"exports": {
|
|
32
|
+
".": {
|
|
33
|
+
"types": "./dist/cli.d.ts",
|
|
34
|
+
"import": "./dist/cli.js"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"main": "./dist/cli.js",
|
|
38
|
+
"types": "./dist/cli.d.ts",
|
|
39
|
+
"files": [
|
|
40
|
+
"dist",
|
|
41
|
+
"README.md",
|
|
42
|
+
"LICENSE"
|
|
43
|
+
],
|
|
44
|
+
"sideEffects": false,
|
|
45
|
+
"engines": {
|
|
46
|
+
"node": ">=22.22.1",
|
|
47
|
+
"bun": ">=1.3.11",
|
|
48
|
+
"deno": ">=2.6.1"
|
|
49
|
+
},
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"@clack/prompts": "^1.2.0",
|
|
52
|
+
"citty": "^0.2.2",
|
|
53
|
+
"consola": "^3.4.2",
|
|
54
|
+
"execa": "^9.5.3",
|
|
55
|
+
"magicast": "^0.5.2"
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"@babel/types": "^7.29.0"
|
|
59
|
+
},
|
|
60
|
+
"scripts": {
|
|
61
|
+
"build": "tsc --build",
|
|
62
|
+
"clean": "tsc --build --clean"
|
|
63
|
+
}
|
|
64
|
+
}
|