@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,78 @@
|
|
|
1
|
+
import { lowerFirst } from '../../utils/naming.js';
|
|
2
|
+
export function resourceModuleTemplate(ctx) {
|
|
3
|
+
return `import { Module } from '@miiajs/core'
|
|
4
|
+
import { ${ctx.className}Controller } from './${ctx.fileName}.controller.js'
|
|
5
|
+
import { ${ctx.className}Service } from './${ctx.fileName}.service.js'
|
|
6
|
+
|
|
7
|
+
@Module({
|
|
8
|
+
controllers: [${ctx.className}Controller],
|
|
9
|
+
providers: [${ctx.className}Service],
|
|
10
|
+
})
|
|
11
|
+
export class ${ctx.className}Module {}
|
|
12
|
+
`;
|
|
13
|
+
}
|
|
14
|
+
export function resourceControllerTemplate(ctx) {
|
|
15
|
+
const serviceVar = `${lowerFirst(ctx.className)}Service`;
|
|
16
|
+
return `import { Controller, Delete, Get, Patch, Post, inject } from '@miiajs/core'
|
|
17
|
+
import type { RequestContext } from '@miiajs/core'
|
|
18
|
+
import { ${ctx.className}Service } from './${ctx.fileName}.service.js'
|
|
19
|
+
|
|
20
|
+
@Controller('/${ctx.fileName}')
|
|
21
|
+
export class ${ctx.className}Controller {
|
|
22
|
+
private ${serviceVar} = inject(${ctx.className}Service)
|
|
23
|
+
|
|
24
|
+
@Post()
|
|
25
|
+
create() {
|
|
26
|
+
return this.${serviceVar}.create()
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
@Get()
|
|
30
|
+
findAll() {
|
|
31
|
+
return this.${serviceVar}.findAll()
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
@Get(':id')
|
|
35
|
+
findOne(ctx: RequestContext) {
|
|
36
|
+
return this.${serviceVar}.findOne(ctx.params.id)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
@Patch(':id')
|
|
40
|
+
update(ctx: RequestContext) {
|
|
41
|
+
return this.${serviceVar}.update(ctx.params.id)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@Delete(':id')
|
|
45
|
+
remove(ctx: RequestContext) {
|
|
46
|
+
return this.${serviceVar}.remove(ctx.params.id)
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
`;
|
|
50
|
+
}
|
|
51
|
+
export function resourceServiceTemplate(ctx) {
|
|
52
|
+
return `import { Injectable } from '@miiajs/core'
|
|
53
|
+
|
|
54
|
+
@Injectable()
|
|
55
|
+
export class ${ctx.className}Service {
|
|
56
|
+
create() {
|
|
57
|
+
return 'This action adds a new ${ctx.fileName}'
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
findAll() {
|
|
61
|
+
return []
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
findOne(id: string) {
|
|
65
|
+
return \`This action returns ${ctx.fileName} #\${id}\`
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
update(id: string) {
|
|
69
|
+
return \`This action updates ${ctx.fileName} #\${id}\`
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
remove(id: string) {
|
|
73
|
+
return \`This action removes ${ctx.fileName} #\${id}\`
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
`;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=resource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource.js","sourceRoot":"","sources":["../../../src/generate/templates/resource.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAElD,MAAM,UAAU,sBAAsB,CAAC,GAAoB;IACzD,OAAO;WACE,GAAG,CAAC,SAAS,wBAAwB,GAAG,CAAC,QAAQ;WACjD,GAAG,CAAC,SAAS,qBAAqB,GAAG,CAAC,QAAQ;;;kBAGvC,GAAG,CAAC,SAAS;gBACf,GAAG,CAAC,SAAS;;eAEd,GAAG,CAAC,SAAS;CAC3B,CAAA;AACD,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,GAAoB;IAC7D,MAAM,UAAU,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAA;IACxD,OAAO;;WAEE,GAAG,CAAC,SAAS,qBAAqB,GAAG,CAAC,QAAQ;;gBAEzC,GAAG,CAAC,QAAQ;eACb,GAAG,CAAC,SAAS;YAChB,UAAU,aAAa,GAAG,CAAC,SAAS;;;;kBAI9B,UAAU;;;;;kBAKV,UAAU;;;;;kBAKV,UAAU;;;;;kBAKV,UAAU;;;;;kBAKV,UAAU;;;CAG3B,CAAA;AACD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,GAAoB;IAC1D,OAAO;;;eAGM,GAAG,CAAC,SAAS;;qCAES,GAAG,CAAC,QAAQ;;;;;;;;mCAQd,GAAG,CAAC,QAAQ;;;;mCAIZ,GAAG,CAAC,QAAQ;;;;mCAIZ,GAAG,CAAC,QAAQ;;;CAG9C,CAAA;AACD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/generate/templates/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAU5D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/generate/templates/service.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,eAAe,CAAC,GAAoB;IAClD,OAAO;;;eAGM,GAAG,CAAC,SAAS;;;;;CAK3B,CAAA;AACD,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export type SchematicName = 'module' | 'controller' | 'service' | 'middleware' | 'guard' | 'resource';
|
|
2
|
+
export type RegistrationTarget = 'imports' | 'controllers' | 'providers';
|
|
3
|
+
export interface GenerateContext {
|
|
4
|
+
/** Raw name from CLI, e.g. "user" or "auth/user" */
|
|
5
|
+
rawName: string;
|
|
6
|
+
/** PascalCase class name stem, e.g. "User" */
|
|
7
|
+
className: string;
|
|
8
|
+
/** kebab-case file stem, e.g. "user" */
|
|
9
|
+
fileName: string;
|
|
10
|
+
/** Absolute path to the target directory */
|
|
11
|
+
targetDir: string;
|
|
12
|
+
/** Resolved schematic name */
|
|
13
|
+
schematic: SchematicName;
|
|
14
|
+
/** Dry-run mode - no files written */
|
|
15
|
+
dryRun: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface GeneratedFile {
|
|
18
|
+
path: string;
|
|
19
|
+
content: string;
|
|
20
|
+
}
|
|
21
|
+
export interface SchematicDefinition {
|
|
22
|
+
name: SchematicName;
|
|
23
|
+
aliases: string[];
|
|
24
|
+
/** File suffix appended after the kebab name, e.g. ".controller" */
|
|
25
|
+
fileSuffix: string;
|
|
26
|
+
/** Template function that returns file content */
|
|
27
|
+
template: (ctx: GenerateContext) => string;
|
|
28
|
+
/** Which @Module array this artifact registers in (null = no auto-register) */
|
|
29
|
+
registrationTarget: RegistrationTarget | null;
|
|
30
|
+
}
|
|
31
|
+
export interface GenerateOptions {
|
|
32
|
+
schematic: string;
|
|
33
|
+
name: string;
|
|
34
|
+
path?: string;
|
|
35
|
+
flat?: boolean;
|
|
36
|
+
dryRun?: boolean;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/generate/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,YAAY,GAAG,SAAS,GAAG,YAAY,GAAG,OAAO,GAAG,UAAU,CAAA;AAErG,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,aAAa,GAAG,WAAW,CAAA;AAExE,MAAM,WAAW,eAAe;IAC9B,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAA;IACf,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAA;IACjB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAA;IAChB,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAA;IACjB,8BAA8B;IAC9B,SAAS,EAAE,aAAa,CAAA;IACxB,sCAAsC;IACtC,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,aAAa,CAAA;IACnB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,oEAAoE;IACpE,UAAU,EAAE,MAAM,CAAA;IAClB,kDAAkD;IAClD,QAAQ,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,MAAM,CAAA;IAC1C,+EAA+E;IAC/E,kBAAkB,EAAE,kBAAkB,GAAG,IAAI,CAAA;CAC9C;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/generate/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Runtime } from './types.js';
|
|
2
|
+
interface SpawnCommand {
|
|
3
|
+
command: string;
|
|
4
|
+
args: string[];
|
|
5
|
+
env?: Record<string, string>;
|
|
6
|
+
}
|
|
7
|
+
export declare function getDevServerCommand(runtime: Runtime, entry: string, cwd: string, envFile?: string): SpawnCommand;
|
|
8
|
+
export declare function getBuildCommand(runtime: Runtime): SpawnCommand;
|
|
9
|
+
export declare function getStartCommand(runtime: Runtime, entry: string, distEntry: string, cwd: string, envFile?: string): SpawnCommand;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/runtime/commands.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEzC,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC7B;AAOD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,CAWhH;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CAQ9D;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,MAAM,GACf,YAAY,CAmBd"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
function envFileArgs(cwd, envFile) {
|
|
4
|
+
const file = envFile ?? (existsSync(resolve(cwd, '.env')) ? '.env' : null);
|
|
5
|
+
return file ? [`--env-file=${file}`] : [];
|
|
6
|
+
}
|
|
7
|
+
export function getDevServerCommand(runtime, entry, cwd, envFile) {
|
|
8
|
+
const envArgs = envFileArgs(cwd, envFile);
|
|
9
|
+
switch (runtime) {
|
|
10
|
+
case 'bun':
|
|
11
|
+
return { command: 'bun', args: [...envArgs, '--watch', entry] };
|
|
12
|
+
case 'deno':
|
|
13
|
+
return { command: 'deno', args: ['run', ...envArgs, '--allow-all', '--sloppy-imports', '--watch', entry] };
|
|
14
|
+
case 'node':
|
|
15
|
+
return { command: 'node', args: [...envArgs, '--import', 'tsx', '--watch', entry] };
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function getBuildCommand(runtime) {
|
|
19
|
+
switch (runtime) {
|
|
20
|
+
case 'bun':
|
|
21
|
+
case 'deno':
|
|
22
|
+
return { command: 'tsc', args: ['--noEmit'] };
|
|
23
|
+
case 'node':
|
|
24
|
+
return { command: 'tsc', args: [] };
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export function getStartCommand(runtime, entry, distEntry, cwd, envFile) {
|
|
28
|
+
const envArgs = envFileArgs(cwd, envFile);
|
|
29
|
+
switch (runtime) {
|
|
30
|
+
case 'bun':
|
|
31
|
+
return {
|
|
32
|
+
command: 'bun',
|
|
33
|
+
args: [...envArgs, entry],
|
|
34
|
+
env: { NODE_ENV: 'production' },
|
|
35
|
+
};
|
|
36
|
+
case 'deno':
|
|
37
|
+
return { command: 'deno', args: ['run', ...envArgs, '--allow-all', '--sloppy-imports', entry] };
|
|
38
|
+
case 'node':
|
|
39
|
+
return {
|
|
40
|
+
command: 'node',
|
|
41
|
+
args: [...envArgs, distEntry],
|
|
42
|
+
env: { NODE_ENV: 'production' },
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/runtime/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AASnC,SAAS,WAAW,CAAC,GAAW,EAAE,OAAgB;IAChD,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAC1E,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AAC3C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAgB,EAAE,KAAa,EAAE,GAAW,EAAE,OAAgB;IAChG,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAEzC,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,KAAK;YACR,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,CAAA;QACjE,KAAK,MAAM;YACT,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,CAAA;QAC5G,KAAK,MAAM;YACT,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,CAAA;IACvF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,KAAK,CAAC;QACX,KAAK,MAAM;YACT,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,CAAA;QAC/C,KAAK,MAAM;YACT,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;IACvC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,OAAgB,EAChB,KAAa,EACb,SAAiB,EACjB,GAAW,EACX,OAAgB;IAEhB,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAEzC,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,KAAK;YACR,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC;gBACzB,GAAG,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE;aAChC,CAAA;QACH,KAAK,MAAM;YACT,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAA;QACjG,KAAK,MAAM;YACT,OAAO;gBACL,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,CAAC,GAAG,OAAO,EAAE,SAAS,CAAC;gBAC7B,GAAG,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE;aAChC,CAAA;IACL,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Runtime } from './types.js';
|
|
2
|
+
interface DetectionResult {
|
|
3
|
+
runtime: Runtime;
|
|
4
|
+
source: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function detectRuntime(cwd: string): DetectionResult;
|
|
7
|
+
export declare function resolveRuntime(cwd: string, flag?: string): DetectionResult;
|
|
8
|
+
export declare function tryResolveRuntime(cwd: string, flag?: string): DetectionResult;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=detect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/runtime/detect.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEzC,UAAU,eAAe;IACvB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;CACf;AAqCD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAQ1D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,eAAe,CAQ1E;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,eAAe,CAO7E"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { execaSync } from 'execa';
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
|
+
const VALID_RUNTIMES = ['bun', 'deno', 'node'];
|
|
6
|
+
const LOCKFILE_MAP = [
|
|
7
|
+
['bun.lock', 'bun'],
|
|
8
|
+
['bun.lockb', 'bun'],
|
|
9
|
+
['deno.lock', 'deno'],
|
|
10
|
+
['package-lock.json', 'node'],
|
|
11
|
+
['yarn.lock', 'node'],
|
|
12
|
+
['pnpm-lock.yaml', 'node'],
|
|
13
|
+
];
|
|
14
|
+
function detectFromLockfile(cwd) {
|
|
15
|
+
for (const [file, runtime] of LOCKFILE_MAP) {
|
|
16
|
+
if (existsSync(resolve(cwd, file))) {
|
|
17
|
+
return { runtime, source: file };
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
function hasExecutable(name) {
|
|
23
|
+
try {
|
|
24
|
+
execaSync('which', [name]);
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function detectFromExecutable() {
|
|
32
|
+
if (hasExecutable('bun'))
|
|
33
|
+
return { runtime: 'bun', source: 'bun in PATH' };
|
|
34
|
+
if (hasExecutable('deno'))
|
|
35
|
+
return { runtime: 'deno', source: 'deno in PATH' };
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
export function detectRuntime(cwd) {
|
|
39
|
+
const fromLockfile = detectFromLockfile(cwd);
|
|
40
|
+
if (fromLockfile)
|
|
41
|
+
return fromLockfile;
|
|
42
|
+
const fromExec = detectFromExecutable();
|
|
43
|
+
if (fromExec)
|
|
44
|
+
return fromExec;
|
|
45
|
+
return { runtime: 'node', source: 'default' };
|
|
46
|
+
}
|
|
47
|
+
export function resolveRuntime(cwd, flag) {
|
|
48
|
+
if (flag) {
|
|
49
|
+
if (!VALID_RUNTIMES.includes(flag)) {
|
|
50
|
+
throw new Error(`Invalid runtime "${flag}". Valid: ${VALID_RUNTIMES.join(', ')}`);
|
|
51
|
+
}
|
|
52
|
+
return { runtime: flag, source: '--runtime flag' };
|
|
53
|
+
}
|
|
54
|
+
return detectRuntime(cwd);
|
|
55
|
+
}
|
|
56
|
+
export function tryResolveRuntime(cwd, flag) {
|
|
57
|
+
try {
|
|
58
|
+
return resolveRuntime(cwd, flag);
|
|
59
|
+
}
|
|
60
|
+
catch (e) {
|
|
61
|
+
logger.error(e.message);
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/runtime/detect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAQ3C,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAuC,CAAA;AAEpF,MAAM,YAAY,GAAwB;IACxC,CAAC,UAAU,EAAE,KAAK,CAAC;IACnB,CAAC,WAAW,EAAE,KAAK,CAAC;IACpB,CAAC,WAAW,EAAE,MAAM,CAAC;IACrB,CAAC,mBAAmB,EAAE,MAAM,CAAC;IAC7B,CAAC,WAAW,EAAE,MAAM,CAAC;IACrB,CAAC,gBAAgB,EAAE,MAAM,CAAC;CAC3B,CAAA;AAED,SAAS,kBAAkB,CAAC,GAAW;IACrC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,YAAY,EAAE,CAAC;QAC3C,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YACnC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;QAClC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,IAAI,CAAC;QACH,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;QAC1B,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB;IAC3B,IAAI,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAA;IAC1E,IAAI,aAAa,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA;IAC7E,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,MAAM,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA;IAC5C,IAAI,YAAY;QAAE,OAAO,YAAY,CAAA;IAErC,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAA;IACvC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAE7B,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,IAAa;IACvD,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAE,cAAoC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,aAAa,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACnF,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAA;IAC/D,CAAC;IACD,OAAO,aAAa,CAAC,GAAG,CAAC,CAAA;AAC3B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAW,EAAE,IAAa;IAC1D,IAAI,CAAC;QACH,OAAO,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAClC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAE,CAAW,CAAC,OAAO,CAAC,CAAA;QAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Runtime } from '../runtime/types.js';
|
|
2
|
+
import type { Feature } from './types.js';
|
|
3
|
+
interface ComposeContext {
|
|
4
|
+
runtime: Runtime;
|
|
5
|
+
features: Feature[];
|
|
6
|
+
}
|
|
7
|
+
export declare function composeAppModule(ctx: ComposeContext): string;
|
|
8
|
+
export declare function composeMainTs(ctx: ComposeContext): string;
|
|
9
|
+
export declare function composeAppController(): string;
|
|
10
|
+
export declare function composeAppService(): string;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=app-composer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-composer.d.ts","sourceRoot":"","sources":["../../src/scaffold/app-composer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEzC,UAAU,cAAc;IACtB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAA;CACpB;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAkC5D;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAqDzD;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAc7C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAU1C"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
export function composeAppModule(ctx) {
|
|
2
|
+
const imports = [`import { Module } from '@miiajs/core'`];
|
|
3
|
+
const moduleImports = [];
|
|
4
|
+
const hasConfigService = ctx.features.some((f) => f.moduleImport?.entries.some((e) => e.includes('ConfigService')));
|
|
5
|
+
for (const feature of ctx.features) {
|
|
6
|
+
if (feature.moduleImport) {
|
|
7
|
+
imports.push(feature.moduleImport.statement);
|
|
8
|
+
for (const entry of feature.moduleImport.entries) {
|
|
9
|
+
moduleImports.push(entry);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
// Add ConfigService import if any feature uses resolve(ConfigService)
|
|
14
|
+
if (hasConfigService) {
|
|
15
|
+
imports.push(`import { ConfigService } from '@miiajs/config'`);
|
|
16
|
+
}
|
|
17
|
+
// Always include AppController + AppService (sibling files in app/)
|
|
18
|
+
imports.push(`import { AppController } from './app.controller.js'`);
|
|
19
|
+
imports.push(`import { AppService } from './app.service.js'`);
|
|
20
|
+
const moduleBlock = moduleImports.length > 0 ? ` imports: [\n ${moduleImports.join(',\n ')},\n ],\n` : '';
|
|
21
|
+
return `${imports.join('\n')}
|
|
22
|
+
|
|
23
|
+
@Module({
|
|
24
|
+
${moduleBlock} controllers: [AppController],
|
|
25
|
+
providers: [AppService],
|
|
26
|
+
})
|
|
27
|
+
export class AppModule {}
|
|
28
|
+
`;
|
|
29
|
+
}
|
|
30
|
+
export function composeMainTs(ctx) {
|
|
31
|
+
const imports = [`import { Miia } from '@miiajs/core'`];
|
|
32
|
+
const codeBeforeListen = [];
|
|
33
|
+
// Feature main.ts contributions
|
|
34
|
+
for (const feature of ctx.features) {
|
|
35
|
+
if (feature.mainSetup) {
|
|
36
|
+
imports.push(...feature.mainSetup.imports);
|
|
37
|
+
codeBeforeListen.push(...feature.mainSetup.code);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
imports.push(`import { AppModule } from './app/app.module.js'`);
|
|
41
|
+
const hasConfig = ctx.features.some((f) => f.id === 'config');
|
|
42
|
+
if (hasConfig) {
|
|
43
|
+
imports.push(`import { ConfigService } from '@miiajs/config'`);
|
|
44
|
+
imports.push(`import type { Env } from './env.schema.js'`);
|
|
45
|
+
}
|
|
46
|
+
const lines = [...imports, ''];
|
|
47
|
+
lines.push(`const app = new Miia()`);
|
|
48
|
+
lines.push(` .register(AppModule)`);
|
|
49
|
+
lines.push('');
|
|
50
|
+
// Insert feature code before listen
|
|
51
|
+
if (codeBeforeListen.length > 0) {
|
|
52
|
+
lines.push(...codeBeforeListen);
|
|
53
|
+
lines.push('');
|
|
54
|
+
}
|
|
55
|
+
let portExpr = '3000';
|
|
56
|
+
let hostExpr = `'0.0.0.0'`;
|
|
57
|
+
if (hasConfig) {
|
|
58
|
+
lines.push(`const configService = app.get(ConfigService<Env>)`);
|
|
59
|
+
lines.push(`const port = configService.get('PORT')`);
|
|
60
|
+
lines.push(`const host = configService.get('HOST')`);
|
|
61
|
+
lines.push('');
|
|
62
|
+
portExpr = 'port';
|
|
63
|
+
hostExpr = 'host';
|
|
64
|
+
}
|
|
65
|
+
// Runtime-specific listen
|
|
66
|
+
if (ctx.runtime === 'node') {
|
|
67
|
+
lines.push(`const { serve } = await import('@miiajs/node-server')`);
|
|
68
|
+
lines.push(`await app.listen(${portExpr}, ${hostExpr}, serve)`);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
lines.push(`await app.listen(${portExpr}, ${hostExpr})`);
|
|
72
|
+
}
|
|
73
|
+
lines.push('');
|
|
74
|
+
return lines.join('\n');
|
|
75
|
+
}
|
|
76
|
+
export function composeAppController() {
|
|
77
|
+
return `import { Controller, Get, inject } from '@miiajs/core'
|
|
78
|
+
import { AppService } from './app.service.js'
|
|
79
|
+
|
|
80
|
+
@Controller()
|
|
81
|
+
export class AppController {
|
|
82
|
+
private appService = inject(AppService)
|
|
83
|
+
|
|
84
|
+
@Get('/')
|
|
85
|
+
hello() {
|
|
86
|
+
return { message: this.appService.getHello() }
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
`;
|
|
90
|
+
}
|
|
91
|
+
export function composeAppService() {
|
|
92
|
+
return `import { Injectable } from '@miiajs/core'
|
|
93
|
+
|
|
94
|
+
@Injectable()
|
|
95
|
+
export class AppService {
|
|
96
|
+
getHello(): string {
|
|
97
|
+
return 'Hello, Miia!'
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
`;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=app-composer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-composer.js","sourceRoot":"","sources":["../../src/scaffold/app-composer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/scaffold/features/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,eAAO,MAAM,aAAa,EAAE,OA4C3B,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export const configFeature = {
|
|
2
|
+
id: 'config',
|
|
3
|
+
label: 'Config',
|
|
4
|
+
hint: 'typed env variables via Zod',
|
|
5
|
+
group: 'core',
|
|
6
|
+
packages: {
|
|
7
|
+
'@miiajs/config': '^0.1.0',
|
|
8
|
+
zod: '^3.24.0',
|
|
9
|
+
},
|
|
10
|
+
moduleImport: {
|
|
11
|
+
statement: `import { ConfigModule } from '@miiajs/config'
|
|
12
|
+
import { envSchema } from '../env.schema.js'`,
|
|
13
|
+
entries: [`ConfigModule.configure({ schema: envSchema })`],
|
|
14
|
+
},
|
|
15
|
+
files: (ctx) => {
|
|
16
|
+
const fields = [
|
|
17
|
+
` NODE_ENV: z.enum(['development', 'test', 'production']).default('development'),`,
|
|
18
|
+
` HOST: z.string().default('0.0.0.0'),`,
|
|
19
|
+
` PORT: z.coerce.number().int().min(1).max(65535).default(3000),`,
|
|
20
|
+
];
|
|
21
|
+
const featureIds = new Set(ctx.features.map((f) => f.id));
|
|
22
|
+
if (featureIds.has('jwt-auth')) {
|
|
23
|
+
fields.push(` JWT_SECRET: z.string(),`);
|
|
24
|
+
}
|
|
25
|
+
if (featureIds.has('drizzle-postgres') || featureIds.has('drizzle-mysql') || featureIds.has('drizzle-sqlite')) {
|
|
26
|
+
fields.push(` DATABASE_URL: z.string(),`);
|
|
27
|
+
}
|
|
28
|
+
if (featureIds.has('papr') || featureIds.has('mongoose')) {
|
|
29
|
+
fields.push(` MONGODB_URL: z.string(),`);
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
'src/env.schema.ts': `import { z } from 'zod'
|
|
33
|
+
|
|
34
|
+
export const envSchema = z.object({
|
|
35
|
+
${fields.join('\n')}
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
export type Env = z.infer<typeof envSchema>
|
|
39
|
+
`,
|
|
40
|
+
};
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/scaffold/features/config.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAY;IACpC,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,6BAA6B;IACnC,KAAK,EAAE,MAAM;IACb,QAAQ,EAAE;QACR,gBAAgB,EAAE,QAAQ;QAC1B,GAAG,EAAE,SAAS;KACf;IACD,YAAY,EAAE;QACZ,SAAS,EAAE;6CAC8B;QACzC,OAAO,EAAE,CAAC,+CAA+C,CAAC;KAC3D;IACD,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,MAAM,GAAa;YACvB,mFAAmF;YACnF,wCAAwC;YACxC,kEAAkE;SACnE,CAAA;QAED,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAEzD,IAAI,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;QAC1C,CAAC;QACD,IAAI,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC9G,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;QAC5C,CAAC;QACD,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACzD,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;QAC3C,CAAC;QAED,OAAO;YACL,mBAAmB,EAAE;;;EAGzB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;;;;CAIlB;SACI,CAAA;IACH,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../../../src/scaffold/features/cors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,eAAO,MAAM,WAAW,EAAE,OAiBzB,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const corsFeature = {
|
|
2
|
+
id: 'cors',
|
|
3
|
+
label: 'CORS',
|
|
4
|
+
hint: 'cross-origin resource sharing',
|
|
5
|
+
group: 'extras',
|
|
6
|
+
packages: {},
|
|
7
|
+
mainSetup: {
|
|
8
|
+
imports: [`import { cors } from '@miiajs/core'`],
|
|
9
|
+
code: [
|
|
10
|
+
`app.use(
|
|
11
|
+
cors({
|
|
12
|
+
origin: '*',
|
|
13
|
+
credentials: false,
|
|
14
|
+
}),
|
|
15
|
+
)`,
|
|
16
|
+
],
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=cors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cors.js","sourceRoot":"","sources":["../../../src/scaffold/features/cors.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,EAAE,EAAE,MAAM;IACV,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,+BAA+B;IACrC,KAAK,EAAE,QAAQ;IACf,QAAQ,EAAE,EAAE;IACZ,SAAS,EAAE;QACT,OAAO,EAAE,CAAC,qCAAqC,CAAC;QAChD,IAAI,EAAE;YACJ;;;;;EAKJ;SACG;KACF;CACF,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drizzle-mysql.d.ts","sourceRoot":"","sources":["../../../src/scaffold/features/drizzle-mysql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,eAAO,MAAM,mBAAmB,EAAE,OA0BjC,CAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export const drizzleMysqlFeature = {
|
|
2
|
+
id: 'drizzle-mysql',
|
|
3
|
+
label: 'Drizzle + MySQL',
|
|
4
|
+
hint: '',
|
|
5
|
+
group: 'database',
|
|
6
|
+
requires: ['config'],
|
|
7
|
+
packages: {
|
|
8
|
+
'@miiajs/drizzle': '^0.1.0',
|
|
9
|
+
'drizzle-orm': '^0.44.0',
|
|
10
|
+
mysql2: '^3.14.0',
|
|
11
|
+
},
|
|
12
|
+
devPackages: {
|
|
13
|
+
'drizzle-kit': '^0.31.0',
|
|
14
|
+
},
|
|
15
|
+
moduleImport: {
|
|
16
|
+
statement: `import { DrizzleModule } from '@miiajs/drizzle'`,
|
|
17
|
+
entries: [
|
|
18
|
+
`DrizzleModule.configure((resolve) => ({
|
|
19
|
+
dialect: 'mysql',
|
|
20
|
+
connection: { url: resolve(ConfigService).getOrThrow('DATABASE_URL') },
|
|
21
|
+
}))`,
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
envVars: {
|
|
25
|
+
DATABASE_URL: 'mysql://root:password@localhost:3306/myapp',
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=drizzle-mysql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drizzle-mysql.js","sourceRoot":"","sources":["../../../src/scaffold/features/drizzle-mysql.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAY;IAC1C,EAAE,EAAE,eAAe;IACnB,KAAK,EAAE,iBAAiB;IACxB,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,UAAU;IACjB,QAAQ,EAAE,CAAC,QAAQ,CAAC;IACpB,QAAQ,EAAE;QACR,iBAAiB,EAAE,QAAQ;QAC3B,aAAa,EAAE,SAAS;QACxB,MAAM,EAAE,SAAS;KAClB;IACD,WAAW,EAAE;QACX,aAAa,EAAE,SAAS;KACzB;IACD,YAAY,EAAE;QACZ,SAAS,EAAE,iDAAiD;QAC5D,OAAO,EAAE;YACP;;;QAGE;SACH;KACF;IACD,OAAO,EAAE;QACP,YAAY,EAAE,4CAA4C;KAC3D;CACF,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drizzle-postgres.d.ts","sourceRoot":"","sources":["../../../src/scaffold/features/drizzle-postgres.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,eAAO,MAAM,sBAAsB,EAAE,OA0BpC,CAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export const drizzlePostgresFeature = {
|
|
2
|
+
id: 'drizzle-postgres',
|
|
3
|
+
label: 'Drizzle + PostgreSQL',
|
|
4
|
+
hint: '',
|
|
5
|
+
group: 'database',
|
|
6
|
+
requires: ['config'],
|
|
7
|
+
packages: {
|
|
8
|
+
'@miiajs/drizzle': '^0.1.0',
|
|
9
|
+
'drizzle-orm': '^0.44.0',
|
|
10
|
+
postgres: '^3.4.0',
|
|
11
|
+
},
|
|
12
|
+
devPackages: {
|
|
13
|
+
'drizzle-kit': '^0.31.0',
|
|
14
|
+
},
|
|
15
|
+
moduleImport: {
|
|
16
|
+
statement: `import { DrizzleModule } from '@miiajs/drizzle'`,
|
|
17
|
+
entries: [
|
|
18
|
+
`DrizzleModule.configure((resolve) => ({
|
|
19
|
+
dialect: 'postgres',
|
|
20
|
+
connection: { url: resolve(ConfigService).getOrThrow('DATABASE_URL') },
|
|
21
|
+
}))`,
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
envVars: {
|
|
25
|
+
DATABASE_URL: 'postgres://postgres:postgres@localhost:5432/myapp',
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=drizzle-postgres.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drizzle-postgres.js","sourceRoot":"","sources":["../../../src/scaffold/features/drizzle-postgres.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAAY;IAC7C,EAAE,EAAE,kBAAkB;IACtB,KAAK,EAAE,sBAAsB;IAC7B,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,UAAU;IACjB,QAAQ,EAAE,CAAC,QAAQ,CAAC;IACpB,QAAQ,EAAE;QACR,iBAAiB,EAAE,QAAQ;QAC3B,aAAa,EAAE,SAAS;QACxB,QAAQ,EAAE,QAAQ;KACnB;IACD,WAAW,EAAE;QACX,aAAa,EAAE,SAAS;KACzB;IACD,YAAY,EAAE;QACZ,SAAS,EAAE,iDAAiD;QAC5D,OAAO,EAAE;YACP;;;QAGE;SACH;KACF;IACD,OAAO,EAAE;QACP,YAAY,EAAE,mDAAmD;KAClE;CACF,CAAA"}
|