@zintrust/core 0.1.0 → 0.1.1
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 +214 -0
- package/package.json +4 -34
- package/public/index.html +535 -0
- package/src/builder/BundleOptimizer.d.ts.map +1 -1
- package/src/builder/BundleOptimizer.js +20 -26
- package/src/cache/Cache.d.ts.map +1 -1
- package/src/cache/Cache.js +4 -2
- package/src/cache/drivers/KVDriver.d.ts.map +1 -1
- package/src/cache/drivers/KVDriver.js +2 -1
- package/src/cache/drivers/MemoryDriver.d.ts.map +1 -1
- package/src/cache/drivers/MemoryDriver.js +5 -0
- package/src/cli/CLI.d.ts.map +1 -1
- package/src/cli/CLI.js +11 -14
- package/src/cli/ErrorHandler.d.ts.map +1 -1
- package/src/cli/ErrorHandler.js +2 -4
- package/src/cli/commands/AddCommand.d.ts +81 -0
- package/src/cli/commands/AddCommand.d.ts.map +1 -1
- package/src/cli/commands/AddCommand.js +23 -4
- package/src/cli/commands/ConfigCommand.d.ts.map +1 -1
- package/src/cli/commands/ConfigCommand.js +27 -23
- package/src/cli/commands/D1MigrateCommand.d.ts.map +1 -1
- package/src/cli/commands/D1MigrateCommand.js +3 -2
- package/src/cli/commands/FixCommand.d.ts.map +1 -1
- package/src/cli/commands/FixCommand.js +1 -0
- package/src/cli/commands/LogsCommand.d.ts.map +1 -1
- package/src/cli/commands/LogsCommand.js +3 -5
- package/src/cli/commands/MigrateCommand.d.ts.map +1 -1
- package/src/cli/commands/MigrateCommand.js +3 -3
- package/src/cli/commands/NewCommand.d.ts.map +1 -1
- package/src/cli/commands/NewCommand.js +3 -1
- package/src/cli/commands/QACommand.d.ts.map +1 -1
- package/src/cli/commands/QACommand.js +5 -6
- package/src/cli/scaffolding/ControllerGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/ControllerGenerator.js +10 -9
- package/src/cli/scaffolding/MigrationGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/MigrationGenerator.js +10 -9
- package/src/cli/scaffolding/ModelGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/ModelGenerator.js +10 -9
- package/src/cli/scaffolding/ProjectScaffolder.js +1 -1
- package/src/cli/scaffolding/ResponseFactoryGenerator.js +1 -1
- package/src/cli/scaffolding/RouteGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/RouteGenerator.js +14 -13
- package/src/cli/scaffolding/SeederGenerator.js +1 -1
- package/src/cli/scaffolding/ServiceIntegrationTestGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/ServiceIntegrationTestGenerator.js +6 -5
- package/src/cli/scaffolding/ServiceRequestFactoryGenerator.d.ts +1 -1
- package/src/cli/scaffolding/ServiceRequestFactoryGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/ServiceRequestFactoryGenerator.js +2 -2
- package/src/cli/scaffolding/ServiceScaffolder.d.ts.map +1 -1
- package/src/cli/scaffolding/ServiceScaffolder.js +11 -10
- package/src/cli/scaffolding/TemplateEngine.d.ts +10 -3
- package/src/cli/scaffolding/TemplateEngine.d.ts.map +1 -1
- package/src/cli/scaffolding/TemplateEngine.js +15 -285
- package/src/config/SecretsManager.d.ts.map +1 -1
- package/src/config/SecretsManager.js +11 -11
- package/src/functions/lambda.d.ts.map +1 -1
- package/src/functions/lambda.js +6 -1
- package/src/http/Request.d.ts +1 -1
- package/src/http/Request.d.ts.map +1 -1
- package/src/microservices/MicroserviceBootstrap.d.ts.map +1 -1
- package/src/microservices/MicroserviceBootstrap.js +6 -5
- package/src/microservices/MicroserviceManager.d.ts.map +1 -1
- package/src/microservices/MicroserviceManager.js +9 -10
- package/src/microservices/PostgresAdapter.d.ts.map +1 -1
- package/src/microservices/PostgresAdapter.js +4 -3
- package/src/microservices/ServiceBundler.js +3 -3
- package/src/microservices/ServiceHealthMonitor.d.ts.map +1 -1
- package/src/microservices/ServiceHealthMonitor.js +6 -2
- package/src/performance/Benchmark.d.ts.map +1 -1
- package/src/performance/Benchmark.js +3 -0
- package/src/performance/Optimizer.d.ts.map +1 -1
- package/src/performance/Optimizer.js +7 -5
- package/src/runtime/RuntimeDetector.d.ts.map +1 -1
- package/src/runtime/RuntimeDetector.js +1 -0
- package/src/runtime/adapters/DenoAdapter.js +9 -7
- package/src/runtime/adapters/FargateAdapter.d.ts.map +1 -1
- package/src/runtime/adapters/FargateAdapter.js +4 -4
- package/src/runtime/adapters/NodeServerAdapter.d.ts.map +1 -1
- package/src/runtime/adapters/NodeServerAdapter.js +7 -7
- package/src/templates/project/basic/config/SecretsManager.ts.tpl +22 -14
|
@@ -43,15 +43,16 @@ export function validateOptions(options) {
|
|
|
43
43
|
/**
|
|
44
44
|
* Generate controller file
|
|
45
45
|
*/
|
|
46
|
-
|
|
46
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async
|
|
47
|
+
export function generateController(options) {
|
|
47
48
|
const validation = validateOptions(options);
|
|
48
49
|
if (validation.valid === false) {
|
|
49
|
-
return {
|
|
50
|
+
return Promise.resolve({
|
|
50
51
|
success: false,
|
|
51
52
|
controllerName: options.name,
|
|
52
53
|
controllerFile: '',
|
|
53
54
|
message: `Validation failed: ${validation.errors.join(', ')}`,
|
|
54
|
-
};
|
|
55
|
+
});
|
|
55
56
|
}
|
|
56
57
|
try {
|
|
57
58
|
const controllerType = options.type ?? 'resource';
|
|
@@ -59,29 +60,29 @@ export async function generateController(options) {
|
|
|
59
60
|
const controllerFile = path.join(options.controllerPath, `${options.name}.ts`);
|
|
60
61
|
const created = FileGenerator.writeFile(controllerFile, controllerContent);
|
|
61
62
|
if (created === false) {
|
|
62
|
-
return {
|
|
63
|
+
return Promise.resolve({
|
|
63
64
|
success: false,
|
|
64
65
|
controllerName: options.name,
|
|
65
66
|
controllerFile,
|
|
66
67
|
message: `Failed to create controller file`,
|
|
67
|
-
};
|
|
68
|
+
});
|
|
68
69
|
}
|
|
69
70
|
Logger.info(`✅ Generated controller: ${options.name}`);
|
|
70
|
-
return {
|
|
71
|
+
return Promise.resolve({
|
|
71
72
|
success: true,
|
|
72
73
|
controllerName: options.name,
|
|
73
74
|
controllerFile,
|
|
74
75
|
message: `Controller ${options.name} created successfully`,
|
|
75
|
-
};
|
|
76
|
+
});
|
|
76
77
|
}
|
|
77
78
|
catch (error) {
|
|
78
79
|
Logger.error(`Failed to generate controller: ${error.message}`);
|
|
79
|
-
return {
|
|
80
|
+
return Promise.resolve({
|
|
80
81
|
success: false,
|
|
81
82
|
controllerName: options.name,
|
|
82
83
|
controllerFile: '',
|
|
83
84
|
message: `Error: ${error.message}`,
|
|
84
|
-
};
|
|
85
|
+
});
|
|
85
86
|
}
|
|
86
87
|
}
|
|
87
88
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationGenerator.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/MigrationGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAmB/F;AAED;;GAEG;
|
|
1
|
+
{"version":3,"file":"MigrationGenerator.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/MigrationGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAmB/F;AAED;;GAEG;AAEH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAwD7F;AAqLD;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;EAG7B,CAAC"}
|
|
@@ -28,17 +28,18 @@ export function validateOptions(options) {
|
|
|
28
28
|
/**
|
|
29
29
|
* Generate migration file
|
|
30
30
|
*/
|
|
31
|
-
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async
|
|
32
|
+
export function generateMigration(options) {
|
|
32
33
|
try {
|
|
33
34
|
// Validate options
|
|
34
35
|
const validation = validateOptions(options);
|
|
35
36
|
if (!validation.valid) {
|
|
36
|
-
return {
|
|
37
|
+
return Promise.resolve({
|
|
37
38
|
success: false,
|
|
38
39
|
migrationName: options.name,
|
|
39
40
|
filePath: '',
|
|
40
41
|
message: `Validation failed: ${validation.errors.join(', ')}`,
|
|
41
|
-
};
|
|
42
|
+
});
|
|
42
43
|
}
|
|
43
44
|
// Generate migration filename with timestamp
|
|
44
45
|
const timestamp = new Date()
|
|
@@ -49,12 +50,12 @@ export async function generateMigration(options) {
|
|
|
49
50
|
const filePath = path.join(options.migrationsPath, filename);
|
|
50
51
|
// Check if migration already exists
|
|
51
52
|
if (FileGenerator.fileExists(filePath)) {
|
|
52
|
-
return {
|
|
53
|
+
return Promise.resolve({
|
|
53
54
|
success: false,
|
|
54
55
|
migrationName: options.name,
|
|
55
56
|
filePath,
|
|
56
57
|
message: `Migration file already exists: ${filePath}`,
|
|
57
|
-
};
|
|
58
|
+
});
|
|
58
59
|
}
|
|
59
60
|
// Generate migration content based on type
|
|
60
61
|
const type = options.type ?? detectType(options.name);
|
|
@@ -62,22 +63,22 @@ export async function generateMigration(options) {
|
|
|
62
63
|
// Write migration file
|
|
63
64
|
FileGenerator.writeFile(filePath, content);
|
|
64
65
|
Logger.info(`✅ Created migration: ${filename}`);
|
|
65
|
-
return {
|
|
66
|
+
return Promise.resolve({
|
|
66
67
|
success: true,
|
|
67
68
|
migrationName: options.name,
|
|
68
69
|
filePath,
|
|
69
70
|
message: `Migration '${options.name}' created successfully`,
|
|
70
|
-
};
|
|
71
|
+
});
|
|
71
72
|
}
|
|
72
73
|
catch (error) {
|
|
73
74
|
Logger.error('Migration generation error:', error);
|
|
74
75
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
75
|
-
return {
|
|
76
|
+
return Promise.resolve({
|
|
76
77
|
success: false,
|
|
77
78
|
migrationName: options.name,
|
|
78
79
|
filePath: '',
|
|
79
80
|
message: `Failed to create migration: ${errorMsg}`,
|
|
80
|
-
};
|
|
81
|
+
});
|
|
81
82
|
}
|
|
82
83
|
}
|
|
83
84
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelGenerator.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ModelGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,SAAS,GACT,OAAO,GACP,SAAS,GACT,MAAM,GACN,UAAU,GACV,MAAM,GACN,EAAE,CAAC;AAEP,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAsB3F;AAED;;GAEG;
|
|
1
|
+
{"version":3,"file":"ModelGenerator.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ModelGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,SAAS,GACT,OAAO,GACP,SAAS,GACT,MAAM,GACN,UAAU,GACV,MAAM,GACN,EAAE,CAAC;AAEP,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAsB3F;AAED;;GAEG;AAEH,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA0ClF;AA+HD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,SAAS,EAAE,CAEjD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,UAAU,EAAE,CAW5C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,UAAU,EAAE,CAU5C;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,UAAU,EAAE,CAU7C;AAED;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;EAOzB,CAAC"}
|
|
@@ -31,44 +31,45 @@ export function validateOptions(options) {
|
|
|
31
31
|
/**
|
|
32
32
|
* Generate model file
|
|
33
33
|
*/
|
|
34
|
-
|
|
34
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async
|
|
35
|
+
export function generateModel(options) {
|
|
35
36
|
const validation = validateOptions(options);
|
|
36
37
|
if (validation.valid === false) {
|
|
37
|
-
return {
|
|
38
|
+
return Promise.resolve({
|
|
38
39
|
success: false,
|
|
39
40
|
modelName: options.name,
|
|
40
41
|
modelFile: '',
|
|
41
42
|
message: `Validation failed: ${validation.errors.join(', ')}`,
|
|
42
|
-
};
|
|
43
|
+
});
|
|
43
44
|
}
|
|
44
45
|
try {
|
|
45
46
|
const modelContent = buildModelCode(options);
|
|
46
47
|
const modelFile = path.join(options.modelPath, `${options.name}.ts`);
|
|
47
48
|
const created = FileGenerator.writeFile(modelFile, modelContent);
|
|
48
49
|
if (created === false) {
|
|
49
|
-
return {
|
|
50
|
+
return Promise.resolve({
|
|
50
51
|
success: false,
|
|
51
52
|
modelName: options.name,
|
|
52
53
|
modelFile,
|
|
53
54
|
message: `Failed to create model file`,
|
|
54
|
-
};
|
|
55
|
+
});
|
|
55
56
|
}
|
|
56
57
|
Logger.info(`✅ Generated model: ${options.name}`);
|
|
57
|
-
return {
|
|
58
|
+
return Promise.resolve({
|
|
58
59
|
success: true,
|
|
59
60
|
modelName: options.name,
|
|
60
61
|
modelFile,
|
|
61
62
|
message: `Model ${options.name} created successfully`,
|
|
62
|
-
};
|
|
63
|
+
});
|
|
63
64
|
}
|
|
64
65
|
catch (error) {
|
|
65
66
|
Logger.error('Model generation failed', error);
|
|
66
|
-
return {
|
|
67
|
+
return Promise.resolve({
|
|
67
68
|
success: false,
|
|
68
69
|
modelName: options.name,
|
|
69
70
|
modelFile: '',
|
|
70
71
|
message: `Error: ${error.message}`,
|
|
71
|
-
};
|
|
72
|
+
});
|
|
72
73
|
}
|
|
73
74
|
}
|
|
74
75
|
/**
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { Logger } from '../../config/logger';
|
|
6
6
|
import fs from '../../node-singletons/fs';
|
|
7
|
+
import { fileURLToPath } from '../../node-singletons/url';
|
|
7
8
|
import * as path from 'node:path';
|
|
8
|
-
import { fileURLToPath } from 'node:url';
|
|
9
9
|
const createDirectories = (projectPath, directories) => {
|
|
10
10
|
let count = 0;
|
|
11
11
|
if (!fs.existsSync(projectPath)) {
|
|
@@ -240,7 +240,7 @@ export default ${options.responseName};
|
|
|
240
240
|
`;
|
|
241
241
|
FileGenerator.writeFile(dtoPath, dtoCode);
|
|
242
242
|
Logger.info(`✅ Generated response DTO: ${options.responseName}`);
|
|
243
|
-
return dtoPath;
|
|
243
|
+
return Promise.resolve(dtoPath);
|
|
244
244
|
}
|
|
245
245
|
/**
|
|
246
246
|
* Generate field assignments for the factory
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteGenerator.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/RouteGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEnF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAqB3F;AAED;;GAEG;
|
|
1
|
+
{"version":3,"file":"RouteGenerator.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/RouteGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEnF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAqB3F;AAED;;GAEG;AAEH,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA2CnF;AA+HD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,eAAe,EAAE,CAsCpD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,eAAe,EAAE,CA6BjD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,eAAe,EAAE,CA+BlD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,WAAW,EAAE,CAEhD;AAED;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;EAOzB,CAAC"}
|
|
@@ -29,15 +29,16 @@ export function validateOptions(options) {
|
|
|
29
29
|
/**
|
|
30
30
|
* Generate route file
|
|
31
31
|
*/
|
|
32
|
-
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async
|
|
33
|
+
export function generateRoutes(options) {
|
|
33
34
|
const validation = validateOptions(options);
|
|
34
35
|
if (!validation.valid) {
|
|
35
|
-
return {
|
|
36
|
+
return Promise.resolve({
|
|
36
37
|
success: false,
|
|
37
38
|
routeFile: '',
|
|
38
39
|
routeCount: 0,
|
|
39
40
|
message: `Validation failed: ${validation.errors.join(', ')}`,
|
|
40
|
-
};
|
|
41
|
+
});
|
|
41
42
|
}
|
|
42
43
|
try {
|
|
43
44
|
const routeContent = buildRouteWrapper(options);
|
|
@@ -45,29 +46,29 @@ export async function generateRoutes(options) {
|
|
|
45
46
|
const routeFile = path.join(options.routesPath, `${groupName}.ts`);
|
|
46
47
|
const created = FileGenerator.writeFile(routeFile, routeContent);
|
|
47
48
|
if (!created) {
|
|
48
|
-
return {
|
|
49
|
+
return Promise.resolve({
|
|
49
50
|
success: false,
|
|
50
51
|
routeFile,
|
|
51
52
|
routeCount: 0,
|
|
52
53
|
message: `Failed to create route file`,
|
|
53
|
-
};
|
|
54
|
+
});
|
|
54
55
|
}
|
|
55
56
|
Logger.info(`✅ Generated routes: ${routeFile} (${options.routes.length} routes)`);
|
|
56
|
-
return {
|
|
57
|
+
return Promise.resolve({
|
|
57
58
|
success: true,
|
|
58
59
|
routeFile,
|
|
59
60
|
routeCount: options.routes.length,
|
|
60
61
|
message: `Routes created successfully`,
|
|
61
|
-
};
|
|
62
|
+
});
|
|
62
63
|
}
|
|
63
64
|
catch (error) {
|
|
64
65
|
Logger.error('Route generation failed', error);
|
|
65
|
-
return {
|
|
66
|
+
return Promise.resolve({
|
|
66
67
|
success: false,
|
|
67
68
|
routeFile: '',
|
|
68
69
|
routeCount: 0,
|
|
69
70
|
message: `Error: ${error.message}`,
|
|
70
|
-
};
|
|
71
|
+
});
|
|
71
72
|
}
|
|
72
73
|
}
|
|
73
74
|
/**
|
|
@@ -152,7 +153,7 @@ function buildRouteCode(route, router) {
|
|
|
152
153
|
*/
|
|
153
154
|
function buildMethodRoute(route, router) {
|
|
154
155
|
const method = route.method;
|
|
155
|
-
const
|
|
156
|
+
const routePath = route.path;
|
|
156
157
|
const controller = route.controller;
|
|
157
158
|
const action = route.action ?? 'handle';
|
|
158
159
|
const middleware = route.middleware === undefined
|
|
@@ -161,13 +162,13 @@ function buildMethodRoute(route, router) {
|
|
|
161
162
|
const middlewareList = route.middleware.map((m) => `'${m}'`).join(', ');
|
|
162
163
|
return `, { middleware: [${middlewareList}] }`;
|
|
163
164
|
})();
|
|
164
|
-
return ` ${router}.${method}('${
|
|
165
|
+
return ` ${router}.${method}('${routePath}', [${controller}, '${action}']${middleware});\n`;
|
|
165
166
|
}
|
|
166
167
|
/**
|
|
167
168
|
* Build resource route (RESTful CRUD)
|
|
168
169
|
*/
|
|
169
170
|
function buildResourceRoute(route, router) {
|
|
170
|
-
const
|
|
171
|
+
const routePath = route.path;
|
|
171
172
|
const controller = route.controller;
|
|
172
173
|
const middleware = route.middleware === undefined
|
|
173
174
|
? ''
|
|
@@ -175,7 +176,7 @@ function buildResourceRoute(route, router) {
|
|
|
175
176
|
const middlewareList = route.middleware.map((m) => `'${m}'`).join(', ');
|
|
176
177
|
return `, { middleware: [${middlewareList}] }`;
|
|
177
178
|
})();
|
|
178
|
-
return ` ${router}.resource('${
|
|
179
|
+
return ` ${router}.resource('${routePath}', ${controller}${middleware});\n`;
|
|
179
180
|
}
|
|
180
181
|
/**
|
|
181
182
|
* Generate common API routes (User CRUD example)
|
|
@@ -8,7 +8,7 @@ import { CommonUtils } from '../../common/index';
|
|
|
8
8
|
import { Logger } from '../../config/logger';
|
|
9
9
|
import { ErrorFactory } from '../../exceptions/ZintrustError';
|
|
10
10
|
import { fsPromises as fs } from '../../node-singletons/fs';
|
|
11
|
-
import * as path from 'node
|
|
11
|
+
import * as path from '../../node-singletons/path';
|
|
12
12
|
/**
|
|
13
13
|
* Seeder Generator - Creates database seeders using factory classes
|
|
14
14
|
* Enables rapid database population for development and staging
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServiceIntegrationTestGenerator.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ServiceIntegrationTestGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,6BAA6B,GAAG;IACvE,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAuBA;AAED;;GAEG;
|
|
1
|
+
{"version":3,"file":"ServiceIntegrationTestGenerator.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ServiceIntegrationTestGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,6BAA6B,GAAG;IACvE,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAuBA;AAED;;GAEG;AAEH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,4BAA4B,CAAC,CAuBvC;AA4ND,eAAO,MAAM,+BAA+B;;;EAG1C,CAAC"}
|
|
@@ -34,26 +34,27 @@ export function validateOptions(options) {
|
|
|
34
34
|
/**
|
|
35
35
|
* Generate service integration tests
|
|
36
36
|
*/
|
|
37
|
-
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async
|
|
38
|
+
export function generateIntegrationTest(options) {
|
|
38
39
|
try {
|
|
39
40
|
const testCode = buildTestCode(options);
|
|
40
41
|
const fileName = `${CommonUtils.camelCase(options.name)}.test.ts`;
|
|
41
42
|
const filePath = path.join(options.testPath, fileName);
|
|
42
43
|
FileGenerator.writeFile(filePath, testCode, { overwrite: true });
|
|
43
44
|
Logger.info(`✅ Created service integration test: ${fileName}`);
|
|
44
|
-
return {
|
|
45
|
+
return Promise.resolve({
|
|
45
46
|
success: true,
|
|
46
47
|
testFile: filePath,
|
|
47
48
|
message: `Service integration test '${options.name}' created successfully`,
|
|
48
|
-
};
|
|
49
|
+
});
|
|
49
50
|
}
|
|
50
51
|
catch (error) {
|
|
51
52
|
Logger.error('Service integration test generation failed', error);
|
|
52
|
-
return {
|
|
53
|
+
return Promise.resolve({
|
|
53
54
|
success: false,
|
|
54
55
|
testFile: '',
|
|
55
56
|
message: error.message,
|
|
56
|
-
};
|
|
57
|
+
});
|
|
57
58
|
}
|
|
58
59
|
}
|
|
59
60
|
/**
|
|
@@ -37,7 +37,7 @@ export declare function validateOptions(options: ServiceRequestOptions): {
|
|
|
37
37
|
/**
|
|
38
38
|
* Generate request factory file
|
|
39
39
|
*/
|
|
40
|
-
export declare function generateRequestFactory(options: ServiceRequestOptions):
|
|
40
|
+
export declare function generateRequestFactory(options: ServiceRequestOptions): ServiceRequestFactoryResult;
|
|
41
41
|
export declare const ServiceRequestFactoryGenerator: Readonly<{
|
|
42
42
|
validateOptions: typeof validateOptions;
|
|
43
43
|
generateRequestFactory: typeof generateRequestFactory;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServiceRequestFactoryGenerator.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ServiceRequestFactoryGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IAC/F,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpD,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,qBAAqB,GAAG;IAC/D,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CA8BA;AAED;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"ServiceRequestFactoryGenerator.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ServiceRequestFactoryGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IAC/F,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpD,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,qBAAqB,GAAG;IAC/D,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CA8BA;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,qBAAqB,GAC7B,2BAA2B,CAkC7B;AA8WD,eAAO,MAAM,8BAA8B;;;EAGzC,CAAC"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { FileGenerator } from '../scaffolding/FileGenerator';
|
|
6
6
|
import { CommonUtils } from '../../common/index';
|
|
7
7
|
import { Logger } from '../../config/logger';
|
|
8
|
-
import * as path from 'node
|
|
8
|
+
import * as path from '../../node-singletons/path';
|
|
9
9
|
/**
|
|
10
10
|
* Validate options
|
|
11
11
|
*/
|
|
@@ -34,7 +34,7 @@ export function validateOptions(options) {
|
|
|
34
34
|
/**
|
|
35
35
|
* Generate request factory file
|
|
36
36
|
*/
|
|
37
|
-
export
|
|
37
|
+
export function generateRequestFactory(options) {
|
|
38
38
|
const validation = validateOptions(options);
|
|
39
39
|
if (!validation.valid) {
|
|
40
40
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServiceScaffolder.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ServiceScaffolder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IACjC,IAAI,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC7C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AAEH;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAuB7F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAGnF;AAED;;GAEG;
|
|
1
|
+
{"version":3,"file":"ServiceScaffolder.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ServiceScaffolder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IACjC,IAAI,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC7C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AAEH;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAuB7F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAGnF;AAED;;GAEG;AAEH,wBAAgB,QAAQ,CACtB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,qBAAqB,CAAC,CA+ChC;AA4SD,eAAO,MAAM,iBAAiB;;;;EAI5B,CAAC"}
|
|
@@ -40,49 +40,50 @@ export function getServicePath(projectRoot, options) {
|
|
|
40
40
|
/**
|
|
41
41
|
* Generate service structure
|
|
42
42
|
*/
|
|
43
|
-
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async
|
|
44
|
+
export function scaffold(projectRoot, options) {
|
|
44
45
|
try {
|
|
45
46
|
// Validate options
|
|
46
47
|
const validation = validateOptions(options);
|
|
47
48
|
if (!validation.valid) {
|
|
48
|
-
return {
|
|
49
|
+
return Promise.resolve({
|
|
49
50
|
success: false,
|
|
50
51
|
serviceName: options.name,
|
|
51
52
|
servicePath: '',
|
|
52
53
|
filesCreated: [],
|
|
53
54
|
message: `Validation failed: ${validation.errors.join(', ')}`,
|
|
54
|
-
};
|
|
55
|
+
});
|
|
55
56
|
}
|
|
56
57
|
const servicePath = getServicePath(projectRoot, options);
|
|
57
58
|
// Check if service already exists
|
|
58
59
|
if (FileGenerator.directoryExists(servicePath)) {
|
|
59
|
-
return {
|
|
60
|
+
return Promise.resolve({
|
|
60
61
|
success: false,
|
|
61
62
|
serviceName: options.name,
|
|
62
63
|
servicePath,
|
|
63
64
|
filesCreated: [],
|
|
64
65
|
message: `Service '${options.name}' already exists at ${servicePath}`,
|
|
65
|
-
};
|
|
66
|
+
});
|
|
66
67
|
}
|
|
67
68
|
createServiceDirectories(servicePath);
|
|
68
69
|
const filesCreated = createServiceFiles(servicePath, options);
|
|
69
|
-
return {
|
|
70
|
+
return Promise.resolve({
|
|
70
71
|
success: true,
|
|
71
72
|
serviceName: options.name,
|
|
72
73
|
servicePath,
|
|
73
74
|
filesCreated,
|
|
74
75
|
message: `Service '${options.name}' scaffolded successfully`,
|
|
75
|
-
};
|
|
76
|
+
});
|
|
76
77
|
}
|
|
77
78
|
catch (error) {
|
|
78
79
|
Logger.error('Service scaffolding failed', error);
|
|
79
|
-
return {
|
|
80
|
+
return Promise.resolve({
|
|
80
81
|
success: false,
|
|
81
82
|
serviceName: options.name,
|
|
82
83
|
servicePath: '',
|
|
83
84
|
filesCreated: [],
|
|
84
85
|
message: error.message,
|
|
85
|
-
};
|
|
86
|
+
});
|
|
86
87
|
}
|
|
87
88
|
}
|
|
88
89
|
/**
|
|
@@ -289,7 +290,7 @@ DATABASE_CONNECTION=${options.database === 'isolated' ? 'postgresql' : 'shared'}
|
|
|
289
290
|
${options.database === 'isolated' ? `${options.name?.toUpperCase()}_DB_HOST=localhost\n${options.name?.toUpperCase()}_DB_DATABASE=${options.name}\n${options.name?.toUpperCase()}_DB_USER=postgres\n${options.name?.toUpperCase()}_DB_PASSWORD=postgres` : ''}
|
|
290
291
|
|
|
291
292
|
# Authentication
|
|
292
|
-
SERVICE_AUTH_STRATEGY=${options.auth
|
|
293
|
+
SERVICE_AUTH_STRATEGY=${options.auth ?? 'api-key'}
|
|
293
294
|
SERVICE_AUTH_KEY=your-auth-key-here
|
|
294
295
|
|
|
295
296
|
# Tracing
|
|
@@ -12,9 +12,14 @@ export interface Template {
|
|
|
12
12
|
files: TemplateFile[];
|
|
13
13
|
directories: string[];
|
|
14
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* A file that will be copied from a template source into the generated project.
|
|
17
|
+
* `path` -> destination path in the generated project
|
|
18
|
+
* `source` -> template file path (relative to the template root directory)
|
|
19
|
+
*/
|
|
15
20
|
export interface TemplateFile {
|
|
16
21
|
path: string;
|
|
17
|
-
|
|
22
|
+
source: string;
|
|
18
23
|
isTemplate?: boolean;
|
|
19
24
|
}
|
|
20
25
|
/**
|
|
@@ -22,14 +27,16 @@ export interface TemplateFile {
|
|
|
22
27
|
*/
|
|
23
28
|
export declare const TemplateEngine: Readonly<{
|
|
24
29
|
render: (content: string, variables: TemplateVariables) => string;
|
|
25
|
-
renderPath: (path: string, variables: TemplateVariables) => string;
|
|
26
30
|
renderContent: (content: string, variables: TemplateVariables) => string;
|
|
31
|
+
renderPath: (content: string, variables: TemplateVariables) => string;
|
|
27
32
|
mergeVariables: (custom: TemplateVariables, defaults: TemplateVariables) => TemplateVariables;
|
|
28
33
|
hasVariables: (content: string) => boolean;
|
|
29
34
|
extractVariables: (content: string) => string[];
|
|
30
35
|
}>;
|
|
31
36
|
/**
|
|
32
|
-
* Built-in template definitions
|
|
37
|
+
* Built-in template definitions (file-based; no inline contents)
|
|
38
|
+
*
|
|
39
|
+
* `source` paths are relative to your template root directory (wherever the CLI loader reads from).
|
|
33
40
|
*/
|
|
34
41
|
export declare const BUILT_IN_TEMPLATES: Record<string, Template>;
|
|
35
42
|
//# sourceMappingURL=TemplateEngine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateEngine.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/TemplateEngine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,iBAAiB;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,
|
|
1
|
+
{"version":3,"file":"TemplateEngine.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/TemplateEngine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,iBAAiB;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAmDD;;GAEG;AACH,eAAO,MAAM,cAAc;sBAjDM,MAAM,aAAa,iBAAiB,KAAG,MAAM;6BAA7C,MAAM,aAAa,iBAAiB,KAAG,MAAM;0BAA7C,MAAM,aAAa,iBAAiB,KAAG,MAAM;6BAiBpE,iBAAiB,YACf,iBAAiB,KAC1B,iBAAiB;4BASmB,MAAM,KAAG,OAAO;gCASZ,MAAM,KAAG,MAAM,EAAE;EAmB1D,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAgDvD,CAAC"}
|