@digitaldefiance/express-suite-starter 4.19.11 → 4.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +185 -0
- package/config/presets/brightstack.json +90 -0
- package/dist/src/core/interfaces/devcontainer-config.interface.d.ts +1 -0
- package/dist/src/core/interfaces/devcontainer-config.interface.d.ts.map +1 -1
- package/dist/src/core/interfaces/generator-config.interface.d.ts +1 -0
- package/dist/src/core/interfaces/generator-config.interface.d.ts.map +1 -1
- package/dist/src/core/interfaces/validation-issue.interface.d.ts +1 -1
- package/dist/src/core/interfaces/validation-issue.interface.d.ts.map +1 -1
- package/dist/src/core/programmatic-generator.d.ts +4 -0
- package/dist/src/core/programmatic-generator.d.ts.map +1 -1
- package/dist/src/core/programmatic-generator.js +45 -12
- package/dist/src/core/programmatic-generator.js.map +1 -1
- package/dist/src/core/validators/post-generation-validator.d.ts +22 -1
- package/dist/src/core/validators/post-generation-validator.d.ts.map +1 -1
- package/dist/src/core/validators/post-generation-validator.js +127 -0
- package/dist/src/core/validators/post-generation-validator.js.map +1 -1
- package/dist/src/generate-monorepo.d.ts.map +1 -1
- package/dist/src/generate-monorepo.js +129 -45
- package/dist/src/generate-monorepo.js.map +1 -1
- package/dist/src/i18n/starter-string-key.d.ts +13 -1
- package/dist/src/i18n/starter-string-key.d.ts.map +1 -1
- package/dist/src/i18n/starter-string-key.js +17 -0
- package/dist/src/i18n/starter-string-key.js.map +1 -1
- package/dist/src/i18n/strings/de.d.ts.map +1 -1
- package/dist/src/i18n/strings/de.js +17 -0
- package/dist/src/i18n/strings/de.js.map +1 -1
- package/dist/src/i18n/strings/en-gb.d.ts +12 -0
- package/dist/src/i18n/strings/en-gb.d.ts.map +1 -1
- package/dist/src/i18n/strings/en-us.d.ts.map +1 -1
- package/dist/src/i18n/strings/en-us.js +17 -0
- package/dist/src/i18n/strings/en-us.js.map +1 -1
- package/dist/src/i18n/strings/es.d.ts.map +1 -1
- package/dist/src/i18n/strings/es.js +17 -0
- package/dist/src/i18n/strings/es.js.map +1 -1
- package/dist/src/i18n/strings/fr.d.ts.map +1 -1
- package/dist/src/i18n/strings/fr.js +17 -0
- package/dist/src/i18n/strings/fr.js.map +1 -1
- package/dist/src/i18n/strings/ja.d.ts.map +1 -1
- package/dist/src/i18n/strings/ja.js +17 -0
- package/dist/src/i18n/strings/ja.js.map +1 -1
- package/dist/src/i18n/strings/uk.d.ts.map +1 -1
- package/dist/src/i18n/strings/uk.js +17 -0
- package/dist/src/i18n/strings/uk.js.map +1 -1
- package/dist/src/i18n/strings/zh-cn.d.ts.map +1 -1
- package/dist/src/i18n/strings/zh-cn.js +17 -0
- package/dist/src/i18n/strings/zh-cn.js.map +1 -1
- package/dist/src/i18n/translations-all.d.ts +12 -0
- package/dist/src/i18n/translations-all.d.ts.map +1 -1
- package/package.json +2 -1
- package/scaffolding/api-brightstack/.env.example.mustache +48 -0
- package/scaffolding/api-brightstack/src/main.ts.mustache +20 -0
- package/scaffolding/api-lib-brightstack/src/index.ts +9 -0
- package/scaffolding/api-lib-brightstack/src/lib/application.ts +85 -0
- package/scaffolding/api-lib-brightstack/src/lib/collections/index.ts +13 -0
- package/scaffolding/api-lib-brightstack/src/lib/documents/user.ts +22 -0
- package/scaffolding/api-lib-brightstack/src/lib/environment.ts +55 -0
- package/scaffolding/api-lib-brightstack/src/lib/routers/api.ts +164 -0
- package/scaffolding/api-lib-brightstack/src/lib/routers/app.ts +32 -0
- package/scaffolding/api-lib-brightstack/src/lib/routers/base.ts +22 -0
- package/scaffolding/api-lib-brightstack/src/lib/routers/index.ts +2 -0
- package/scaffolding/api-lib-brightstack/src/lib/schemas/index.ts +2 -0
- package/scaffolding/api-lib-brightstack/src/lib/schemas/schema.ts +28 -0
- package/scaffolding/api-lib-brightstack/src/lib/schemas/user.ts +26 -0
- package/scaffolding/api-lib-brightstack/src/lib/services/email.ts +108 -0
- package/scaffolding/api-lib-brightstack/src/lib/shared-types.ts +149 -0
- package/scaffolding/api-lib-mern/src/lib/constants.ts.mustache +10 -0
- package/scaffolding/api-lib-mern/src/lib/documents/index.ts +1 -0
- package/scaffolding/api-lib-mern/src/lib/interfaces/constants.ts +9 -0
- package/scaffolding/api-lib-mern/src/lib/interfaces/environment-aws.ts +7 -0
- package/scaffolding/api-lib-mern/src/lib/interfaces/environment.ts +10 -0
- package/scaffolding/api-lib-mern/src/lib/middlewares.ts.mustache +113 -0
- package/scaffolding/api-lib-mern/src/lib/services/index.ts +1 -0
- package/scaffolding/{api → api-mern}/.env.example.mustache +1 -0
- package/scaffolding/api-mern/src/assets/.gitkeep +0 -0
- package/scaffolding/api-mern/src/views/index.ejs +34 -0
- package/scaffolding/inituserdb-brightstack/.env.example.mustache +14 -0
- package/scaffolding/inituserdb-brightstack/src/main.ts.mustache +195 -0
- package/scaffolding/{inituserdb → inituserdb-mern}/.env.example.mustache +1 -0
- /package/scaffolding/{api → api-brightstack}/src/assets/.gitkeep +0 -0
- /package/scaffolding/{api → api-brightstack}/src/views/index.ejs +0 -0
- /package/scaffolding/{api-lib → api-lib-brightstack}/src/lib/constants.ts.mustache +0 -0
- /package/scaffolding/{api-lib → api-lib-brightstack}/src/lib/documents/index.ts +0 -0
- /package/scaffolding/{api-lib → api-lib-brightstack}/src/lib/interfaces/constants.ts +0 -0
- /package/scaffolding/{api-lib → api-lib-brightstack}/src/lib/interfaces/environment-aws.ts +0 -0
- /package/scaffolding/{api-lib → api-lib-brightstack}/src/lib/interfaces/environment.ts +0 -0
- /package/scaffolding/{api-lib → api-lib-brightstack}/src/lib/middlewares.ts.mustache +0 -0
- /package/scaffolding/{api-lib → api-lib-brightstack}/src/lib/services/index.ts +0 -0
- /package/scaffolding/{api-lib → api-lib-mern}/src/index.ts +0 -0
- /package/scaffolding/{api-lib → api-lib-mern}/src/lib/application.ts +0 -0
- /package/scaffolding/{api-lib → api-lib-mern}/src/lib/documents/user.ts +0 -0
- /package/scaffolding/{api-lib → api-lib-mern}/src/lib/environment.ts +0 -0
- /package/scaffolding/{api-lib → api-lib-mern}/src/lib/models/email-token.ts +0 -0
- /package/scaffolding/{api-lib → api-lib-mern}/src/lib/models/mnemonic.ts +0 -0
- /package/scaffolding/{api-lib → api-lib-mern}/src/lib/models/role.ts +0 -0
- /package/scaffolding/{api-lib → api-lib-mern}/src/lib/models/used-direct-login-token.ts +0 -0
- /package/scaffolding/{api-lib → api-lib-mern}/src/lib/models/user-role.ts +0 -0
- /package/scaffolding/{api-lib → api-lib-mern}/src/lib/models/user.ts +0 -0
- /package/scaffolding/{api-lib → api-lib-mern}/src/lib/routers/api.ts +0 -0
- /package/scaffolding/{api-lib → api-lib-mern}/src/lib/routers/app.ts +0 -0
- /package/scaffolding/{api-lib → api-lib-mern}/src/lib/routers/index.ts +0 -0
- /package/scaffolding/{api-lib → api-lib-mern}/src/lib/schemas/index.ts +0 -0
- /package/scaffolding/{api-lib → api-lib-mern}/src/lib/schemas/schema.ts +0 -0
- /package/scaffolding/{api-lib → api-lib-mern}/src/lib/schemas/user.ts +0 -0
- /package/scaffolding/{api-lib → api-lib-mern}/src/lib/services/email.ts +0 -0
- /package/scaffolding/{api-lib → api-lib-mern}/src/lib/shared-types.ts +0 -0
- /package/scaffolding/{api → api-mern}/src/main.ts.mustache +0 -0
- /package/scaffolding/{inituserdb → inituserdb-mern}/src/main.ts.mustache +0 -0
|
@@ -1,10 +1,31 @@
|
|
|
1
|
-
import { ValidationReport } from '../interfaces/validation-issue.interface';
|
|
1
|
+
import { ValidationReport, ValidationIssue } from '../interfaces/validation-issue.interface';
|
|
2
2
|
import { GeneratorContext } from '../interfaces';
|
|
3
3
|
export declare class PostGenerationValidator {
|
|
4
4
|
static validate(context: GeneratorContext): Promise<ValidationReport>;
|
|
5
5
|
private static validatePackageJson;
|
|
6
6
|
private static validateDependencies;
|
|
7
7
|
private static validateBestPractices;
|
|
8
|
+
/**
|
|
9
|
+
* Recursively collect all .ts files under a directory.
|
|
10
|
+
*/
|
|
11
|
+
private static collectTsFiles;
|
|
12
|
+
/**
|
|
13
|
+
* For BrightStack projects, scan API/API-lib source for mongoose, mongodb,
|
|
14
|
+
* or @digitaldefiance/mongoose-types imports.
|
|
15
|
+
*/
|
|
16
|
+
static validateNoMongoImports(monorepoPath: string): ValidationIssue[];
|
|
17
|
+
/**
|
|
18
|
+
* For MERN projects, scan API/API-lib source for @brightchain/* imports.
|
|
19
|
+
*/
|
|
20
|
+
static validateNoBrightStackImports(monorepoPath: string): ValidationIssue[];
|
|
21
|
+
/**
|
|
22
|
+
* For BrightStack projects, verify .env.example contains required BrightStack vars.
|
|
23
|
+
*/
|
|
24
|
+
static validateBrightStackEnvVars(monorepoPath: string): ValidationIssue[];
|
|
25
|
+
/**
|
|
26
|
+
* For MERN projects, verify .env.example contains required MERN vars.
|
|
27
|
+
*/
|
|
28
|
+
static validateMernEnvVars(monorepoPath: string): ValidationIssue[];
|
|
8
29
|
static printReport(report: ValidationReport): void;
|
|
9
30
|
}
|
|
10
31
|
//# sourceMappingURL=post-generation-validator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-generation-validator.d.ts","sourceRoot":"","sources":["../../../../src/core/validators/post-generation-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"post-generation-validator.d.ts","sourceRoot":"","sources":["../../../../src/core/validators/post-generation-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAKjD,qBAAa,uBAAuB;WACrB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAsC3E,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAuDlC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IA2CnC,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAoCpC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAe7B;;;OAGG;IACH,MAAM,CAAC,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,eAAe,EAAE;IAsBtE;;OAEG;IACH,MAAM,CAAC,4BAA4B,CAAC,YAAY,EAAE,MAAM,GAAG,eAAe,EAAE;IAsB5E;;OAEG;IACH,MAAM,CAAC,0BAA0B,CAAC,YAAY,EAAE,MAAM,GAAG,eAAe,EAAE;IA6B1E;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,eAAe,EAAE;IAsBnE,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;CA0CnD"}
|
|
@@ -41,6 +41,7 @@ class PostGenerationValidator {
|
|
|
41
41
|
static async validate(context) {
|
|
42
42
|
const issues = [];
|
|
43
43
|
const monorepoPath = context.state.get('monorepoPath');
|
|
44
|
+
const stackType = context.config?.stackType ?? 'mern';
|
|
44
45
|
logger_1.Logger.section('Running post-generation validation');
|
|
45
46
|
// Validate package.json exists
|
|
46
47
|
issues.push(...this.validatePackageJson(monorepoPath));
|
|
@@ -48,6 +49,15 @@ class PostGenerationValidator {
|
|
|
48
49
|
issues.push(...this.validateDependencies(monorepoPath));
|
|
49
50
|
// Check for common issues
|
|
50
51
|
issues.push(...this.validateBestPractices(monorepoPath));
|
|
52
|
+
// Stack-specific validation
|
|
53
|
+
if (stackType === 'brightstack') {
|
|
54
|
+
issues.push(...this.validateNoMongoImports(monorepoPath));
|
|
55
|
+
issues.push(...this.validateBrightStackEnvVars(monorepoPath));
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
issues.push(...this.validateNoBrightStackImports(monorepoPath));
|
|
59
|
+
issues.push(...this.validateMernEnvVars(monorepoPath));
|
|
60
|
+
}
|
|
51
61
|
const summary = {
|
|
52
62
|
errors: issues.filter(i => i.type === 'error').length,
|
|
53
63
|
warnings: issues.filter(i => i.type === 'warning').length,
|
|
@@ -177,6 +187,123 @@ class PostGenerationValidator {
|
|
|
177
187
|
}
|
|
178
188
|
return issues;
|
|
179
189
|
}
|
|
190
|
+
/**
|
|
191
|
+
* Recursively collect all .ts files under a directory.
|
|
192
|
+
*/
|
|
193
|
+
static collectTsFiles(dir) {
|
|
194
|
+
const results = [];
|
|
195
|
+
if (!fs.existsSync(dir))
|
|
196
|
+
return results;
|
|
197
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
198
|
+
for (const entry of entries) {
|
|
199
|
+
const fullPath = path.join(dir, entry.name);
|
|
200
|
+
if (entry.isDirectory() && entry.name !== 'node_modules') {
|
|
201
|
+
results.push(...this.collectTsFiles(fullPath));
|
|
202
|
+
}
|
|
203
|
+
else if (entry.isFile() && entry.name.endsWith('.ts')) {
|
|
204
|
+
results.push(fullPath);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return results;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* For BrightStack projects, scan API/API-lib source for mongoose, mongodb,
|
|
211
|
+
* or @digitaldefiance/mongoose-types imports.
|
|
212
|
+
*/
|
|
213
|
+
static validateNoMongoImports(monorepoPath) {
|
|
214
|
+
const issues = [];
|
|
215
|
+
const mongoPattern = /(?:from\s+['"](?:mongoose|mongodb|@digitaldefiance\/mongoose-types))|(?:require\s*\(\s*['"](?:mongoose|mongodb|@digitaldefiance\/mongoose-types))/;
|
|
216
|
+
const dirsToScan = ['api', 'api-lib'].map(d => path.join(monorepoPath, d));
|
|
217
|
+
for (const dir of dirsToScan) {
|
|
218
|
+
for (const filePath of this.collectTsFiles(dir)) {
|
|
219
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
220
|
+
if (mongoPattern.test(content)) {
|
|
221
|
+
issues.push({
|
|
222
|
+
type: 'warning',
|
|
223
|
+
category: 'stackMismatch',
|
|
224
|
+
message: `BrightStack project contains MongoDB import in ${path.relative(monorepoPath, filePath)}`,
|
|
225
|
+
file: path.relative(monorepoPath, filePath),
|
|
226
|
+
fix: 'Remove MongoDB imports from BrightStack projects',
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return issues;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* For MERN projects, scan API/API-lib source for @brightchain/* imports.
|
|
235
|
+
*/
|
|
236
|
+
static validateNoBrightStackImports(monorepoPath) {
|
|
237
|
+
const issues = [];
|
|
238
|
+
const brightchainPattern = /(?:from\s+['"]@brightchain\/)|(?:require\s*\(\s*['"]@brightchain\/)/;
|
|
239
|
+
const dirsToScan = ['api', 'api-lib'].map(d => path.join(monorepoPath, d));
|
|
240
|
+
for (const dir of dirsToScan) {
|
|
241
|
+
for (const filePath of this.collectTsFiles(dir)) {
|
|
242
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
243
|
+
if (brightchainPattern.test(content)) {
|
|
244
|
+
issues.push({
|
|
245
|
+
type: 'warning',
|
|
246
|
+
category: 'stackMismatch',
|
|
247
|
+
message: `MERN project contains BrightChain import in ${path.relative(monorepoPath, filePath)}`,
|
|
248
|
+
file: path.relative(monorepoPath, filePath),
|
|
249
|
+
fix: 'Remove @brightchain/* imports from MERN projects',
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return issues;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* For BrightStack projects, verify .env.example contains required BrightStack vars.
|
|
258
|
+
*/
|
|
259
|
+
static validateBrightStackEnvVars(monorepoPath) {
|
|
260
|
+
const issues = [];
|
|
261
|
+
const requiredVars = [
|
|
262
|
+
'BRIGHTCHAIN_BLOCKSTORE_PATH',
|
|
263
|
+
'BRIGHTCHAIN_BLOCKSIZE_BYTES',
|
|
264
|
+
'BRIGHTCHAIN_BLOCKSTORE_TYPE',
|
|
265
|
+
'USE_MEMORY_DOCSTORE',
|
|
266
|
+
'DEV_DATABASE',
|
|
267
|
+
'MEMBER_POOL_NAME',
|
|
268
|
+
];
|
|
269
|
+
const envPath = path.join(monorepoPath, '.env.example');
|
|
270
|
+
if (!fs.existsSync(envPath))
|
|
271
|
+
return issues;
|
|
272
|
+
const content = fs.readFileSync(envPath, 'utf-8');
|
|
273
|
+
const missingVars = requiredVars.filter(v => !content.includes(v));
|
|
274
|
+
if (missingVars.length > 0) {
|
|
275
|
+
issues.push({
|
|
276
|
+
type: 'warning',
|
|
277
|
+
category: 'stackMismatch',
|
|
278
|
+
message: `BrightStack .env.example missing required variables: ${missingVars.join(', ')}`,
|
|
279
|
+
file: '.env.example',
|
|
280
|
+
fix: 'Add missing BrightStack environment variables to .env.example',
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
return issues;
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* For MERN projects, verify .env.example contains required MERN vars.
|
|
287
|
+
*/
|
|
288
|
+
static validateMernEnvVars(monorepoPath) {
|
|
289
|
+
const issues = [];
|
|
290
|
+
const requiredVars = ['MONGO_URI', 'MONGO_USE_TRANSACTIONS', 'DEV_DATABASE'];
|
|
291
|
+
const envPath = path.join(monorepoPath, '.env.example');
|
|
292
|
+
if (!fs.existsSync(envPath))
|
|
293
|
+
return issues;
|
|
294
|
+
const content = fs.readFileSync(envPath, 'utf-8');
|
|
295
|
+
const missingVars = requiredVars.filter(v => !content.includes(v));
|
|
296
|
+
if (missingVars.length > 0) {
|
|
297
|
+
issues.push({
|
|
298
|
+
type: 'warning',
|
|
299
|
+
category: 'stackMismatch',
|
|
300
|
+
message: `MERN .env.example missing required variables: ${missingVars.join(', ')}`,
|
|
301
|
+
file: '.env.example',
|
|
302
|
+
fix: 'Add missing MERN environment variables to .env.example',
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
return issues;
|
|
306
|
+
}
|
|
180
307
|
static printReport(report) {
|
|
181
308
|
if (report.passed && report.issues.length === 0) {
|
|
182
309
|
logger_1.Logger.success('Validation passed with no issues');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-generation-validator.js","sourceRoot":"","sources":["../../../../src/core/validators/post-generation-validator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,6CAA0C;AAC1C,uCAAyB;AACzB,2CAA6B;AAE7B,MAAa,uBAAuB;IAClC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAyB;QAC7C,MAAM,MAAM,GAAsB,EAAE,CAAC;QACrC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"post-generation-validator.js","sourceRoot":"","sources":["../../../../src/core/validators/post-generation-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-monorepo.d.ts","sourceRoot":"","sources":["../../src/generate-monorepo.ts"],"names":[],"mappings":"AA+BA,iBAAe,IAAI,
|
|
1
|
+
{"version":3,"file":"generate-monorepo.d.ts","sourceRoot":"","sources":["../../src/generate-monorepo.ts"],"names":[],"mappings":"AA+BA,iBAAe,IAAI,kBA05DlB;AAED,OAAO,EAAE,IAAI,EAAE,CAAC"}
|
|
@@ -99,9 +99,6 @@ async function main() {
|
|
|
99
99
|
process.exit(0);
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
|
-
// Load preset
|
|
103
|
-
const presetPath = path.resolve(__dirname, '../../config/presets/standard.json');
|
|
104
|
-
const preset = JSON.parse(fs.readFileSync(presetPath, 'utf-8'));
|
|
105
102
|
// Prompt for workspace configuration
|
|
106
103
|
logger_1.Logger.header((0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.SECTION_WORKSPACE_CONFIG));
|
|
107
104
|
const workspaceName = await (0, input_1.default)({
|
|
@@ -195,6 +192,20 @@ async function main() {
|
|
|
195
192
|
default: currentDefaults.siteTagline,
|
|
196
193
|
});
|
|
197
194
|
logger_1.Logger.info((0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.NOTICE_SITE_TITLE_TAGLINE_DESCRIPTIONS));
|
|
195
|
+
// Stack selection
|
|
196
|
+
logger_1.Logger.section((0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.SECTION_STACK_SELECTION));
|
|
197
|
+
const stackType = await (0, select_1.default)({
|
|
198
|
+
message: (0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.PROMPT_STACK_TYPE),
|
|
199
|
+
choices: [
|
|
200
|
+
{ name: (0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.STACK_MERN), value: 'mern' },
|
|
201
|
+
{ name: (0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.STACK_BRIGHTSTACK), value: 'brightstack' },
|
|
202
|
+
],
|
|
203
|
+
default: 'mern',
|
|
204
|
+
});
|
|
205
|
+
// Load preset based on stack type
|
|
206
|
+
const presetFileName = stackType === 'brightstack' ? 'brightstack.json' : 'standard.json';
|
|
207
|
+
const presetPath = path.resolve(__dirname, `../../config/presets/${presetFileName}`);
|
|
208
|
+
const preset = JSON.parse(fs.readFileSync(presetPath, 'utf-8'));
|
|
198
209
|
const dryRun = await (0, confirm_1.default)({
|
|
199
210
|
message: (0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.PROMPT_DRY_RUN),
|
|
200
211
|
default: false,
|
|
@@ -231,31 +242,38 @@ async function main() {
|
|
|
231
242
|
let devcontainerChoice = 'none';
|
|
232
243
|
let mongoPassword = '';
|
|
233
244
|
if (setupDevcontainer) {
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
(0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.VALIDATION_PASSWORD_REQUIRED),
|
|
245
|
+
if (stackType === 'brightstack') {
|
|
246
|
+
// BrightStack: only simple devcontainer (no MongoDB containers)
|
|
247
|
+
devcontainerChoice = 'simple';
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
// MERN: full devcontainer options
|
|
251
|
+
devcontainerChoice = await (0, select_1.default)({
|
|
252
|
+
message: (0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.PROMPT_DEVCONTAINER_CONFIG),
|
|
253
|
+
choices: [
|
|
254
|
+
{
|
|
255
|
+
name: (0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.DEVCONTAINER_SIMPLE),
|
|
256
|
+
value: 'simple',
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
name: (0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.DEVCONTAINER_MONGODB),
|
|
260
|
+
value: 'mongodb',
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
name: (0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.DEVCONTAINER_MONGODB_REPLICASET),
|
|
264
|
+
value: 'mongodb-replicaset',
|
|
265
|
+
},
|
|
266
|
+
],
|
|
267
|
+
default: 'mongodb-replicaset',
|
|
258
268
|
});
|
|
269
|
+
if (devcontainerChoice === 'mongodb' ||
|
|
270
|
+
devcontainerChoice === 'mongodb-replicaset') {
|
|
271
|
+
mongoPassword = await (0, input_1.default)({
|
|
272
|
+
message: (0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.PROMPT_MONGO_PASSWORD),
|
|
273
|
+
validate: (val) => val.length > 0 ||
|
|
274
|
+
(0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.VALIDATION_PASSWORD_REQUIRED),
|
|
275
|
+
});
|
|
276
|
+
}
|
|
259
277
|
}
|
|
260
278
|
}
|
|
261
279
|
logger_1.Logger.section((0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.SECTION_DATABASE_CONFIG));
|
|
@@ -264,14 +282,49 @@ async function main() {
|
|
|
264
282
|
default: false,
|
|
265
283
|
});
|
|
266
284
|
let devDatabaseName = '';
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
285
|
+
let blockStorePath = '';
|
|
286
|
+
let memberPoolName = 'BrightChain';
|
|
287
|
+
if (stackType === 'brightstack') {
|
|
288
|
+
// BrightStack storage configuration
|
|
289
|
+
if (!useInMemoryDb) {
|
|
290
|
+
logger_1.Logger.section((0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.SECTION_BRIGHTSTACK_STORAGE));
|
|
291
|
+
blockStorePath = await (0, input_1.default)({
|
|
292
|
+
message: (0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.PROMPT_BLOCKSTORE_PATH),
|
|
293
|
+
validate: (val) => {
|
|
294
|
+
if (!val || val.trim().length === 0) {
|
|
295
|
+
return (0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.VALIDATION_INVALID_BLOCKSTORE_PATH);
|
|
296
|
+
}
|
|
297
|
+
if (val.includes('\0')) {
|
|
298
|
+
return (0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.VALIDATION_INVALID_BLOCKSTORE_PATH);
|
|
299
|
+
}
|
|
300
|
+
return true;
|
|
301
|
+
},
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
devDatabaseName = await (0, input_1.default)({
|
|
306
|
+
message: (0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.PROMPT_DEV_DATABASE_NAME),
|
|
307
|
+
default: 'test',
|
|
308
|
+
validate: (val) => val.length > 0 ||
|
|
309
|
+
(0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.VALIDATION_DATABASE_NAME_REQUIRED),
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
memberPoolName = await (0, input_1.default)({
|
|
313
|
+
message: (0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.PROMPT_MEMBER_POOL_NAME),
|
|
314
|
+
default: 'BrightChain',
|
|
273
315
|
});
|
|
274
316
|
}
|
|
317
|
+
else {
|
|
318
|
+
// MERN database configuration (existing behavior)
|
|
319
|
+
if (useInMemoryDb) {
|
|
320
|
+
devDatabaseName = await (0, input_1.default)({
|
|
321
|
+
message: (0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.PROMPT_DEV_DATABASE_NAME),
|
|
322
|
+
default: 'test',
|
|
323
|
+
validate: (val) => val.length > 0 ||
|
|
324
|
+
(0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.VALIDATION_DATABASE_NAME_REQUIRED),
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
}
|
|
275
328
|
logger_1.Logger.section((0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.SECTION_SECURITY_CONFIG));
|
|
276
329
|
const crypto = await Promise.resolve().then(() => __importStar(require('crypto')));
|
|
277
330
|
const HEX_64_REGEX = /^[0-9a-f]{64}$/i;
|
|
@@ -322,6 +375,7 @@ async function main() {
|
|
|
322
375
|
},
|
|
323
376
|
projects,
|
|
324
377
|
...preset,
|
|
378
|
+
stackType,
|
|
325
379
|
};
|
|
326
380
|
// Validate configuration
|
|
327
381
|
const validation = config_schema_1.ConfigValidator.validate(config);
|
|
@@ -869,6 +923,7 @@ async function main() {
|
|
|
869
923
|
.replace(/\t/g, '\\t'); // Tab
|
|
870
924
|
};
|
|
871
925
|
// Template variables for scaffolding
|
|
926
|
+
const resolvedStackType = config.stackType ?? 'mern';
|
|
872
927
|
const scaffoldingVars = {
|
|
873
928
|
workspaceName,
|
|
874
929
|
WorkspaceName: workspaceName.charAt(0).toUpperCase() +
|
|
@@ -891,6 +946,14 @@ async function main() {
|
|
|
891
946
|
isZhCn: selectedLanguage === i18n_lib_2.LanguageCodes.ZH_CN,
|
|
892
947
|
isJa: selectedLanguage === i18n_lib_2.LanguageCodes.JA,
|
|
893
948
|
isUk: selectedLanguage === i18n_lib_2.LanguageCodes.UK,
|
|
949
|
+
// Stack-specific template variables
|
|
950
|
+
stackType: resolvedStackType,
|
|
951
|
+
isMern: resolvedStackType === 'mern',
|
|
952
|
+
isBrightStack: resolvedStackType === 'brightstack',
|
|
953
|
+
blockStorePath: blockStorePath ?? '',
|
|
954
|
+
useMemoryDocstore: useInMemoryDb ? 'true' : '',
|
|
955
|
+
memberPoolName: memberPoolName ?? 'BrightChain',
|
|
956
|
+
devDatabase: useInMemoryDb ? devDatabaseName : '',
|
|
894
957
|
};
|
|
895
958
|
// Copy root scaffolding
|
|
896
959
|
const rootSrc = path.join(scaffoldingDir, 'root');
|
|
@@ -906,8 +969,13 @@ async function main() {
|
|
|
906
969
|
}
|
|
907
970
|
}
|
|
908
971
|
// Copy project-specific scaffolding
|
|
972
|
+
// Stack-dependent project types use suffixed directories (e.g., api-mern, api-lib-mern, inituserdb-mern)
|
|
973
|
+
const stackDependentTypes = ['api', 'api-lib', 'inituserdb'];
|
|
909
974
|
projects.forEach((project) => {
|
|
910
|
-
const
|
|
975
|
+
const scaffoldingDirName = stackDependentTypes.includes(project.type)
|
|
976
|
+
? `${project.type}-${resolvedStackType}`
|
|
977
|
+
: project.type;
|
|
978
|
+
const projectSrc = path.join(scaffoldingDir, scaffoldingDirName);
|
|
911
979
|
if (fs.existsSync(projectSrc)) {
|
|
912
980
|
(0, template_renderer_1.copyDir)(projectSrc, path.join(monorepoPath, project.name), scaffoldingVars, 'mustache', context.dryRun);
|
|
913
981
|
}
|
|
@@ -1146,18 +1214,33 @@ export {};
|
|
|
1146
1214
|
envContent = envContent.replace(/JWT_SECRET=.*/g, `JWT_SECRET=${jwtSecret}`);
|
|
1147
1215
|
envContent = envContent.replace(/MNEMONIC_ENCRYPTION_KEY=.*/g, `MNEMONIC_ENCRYPTION_KEY=${mnemonicEncryptionKey}`);
|
|
1148
1216
|
envContent = envContent.replace(/MNEMONIC_HMAC_SECRET=.*/g, `MNEMONIC_HMAC_SECRET=${mnemonicHmacSecret}`);
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1217
|
+
const envStackType = config.stackType ?? 'mern';
|
|
1218
|
+
// BrightStack-specific env replacements
|
|
1219
|
+
if (envStackType === 'brightstack') {
|
|
1220
|
+
// Pre-populate blockstore path if provided
|
|
1221
|
+
if (blockStorePath) {
|
|
1222
|
+
envContent = envContent.replace(/BRIGHTCHAIN_BLOCKSTORE_PATH=.*/g, `BRIGHTCHAIN_BLOCKSTORE_PATH=${blockStorePath}`);
|
|
1223
|
+
}
|
|
1224
|
+
// Member pool name
|
|
1225
|
+
if (memberPoolName) {
|
|
1226
|
+
envContent = envContent.replace(/MEMBER_POOL_NAME=.*/g, `MEMBER_POOL_NAME=${memberPoolName}`);
|
|
1227
|
+
}
|
|
1158
1228
|
}
|
|
1159
|
-
|
|
1160
|
-
|
|
1229
|
+
// MERN-specific env replacements (skip for BrightStack)
|
|
1230
|
+
if (envStackType === 'mern') {
|
|
1231
|
+
// Replace MONGO_URI if MongoDB devcontainer
|
|
1232
|
+
if (devcontainerChoice === 'mongodb' ||
|
|
1233
|
+
devcontainerChoice === 'mongodb-replicaset') {
|
|
1234
|
+
const mongoUri = buildMongoUri(workspaceName);
|
|
1235
|
+
envContent = envContent.replace(/MONGO_URI=.*/g, `MONGO_URI=${mongoUri}`);
|
|
1236
|
+
}
|
|
1237
|
+
// Enable transactions for replica set
|
|
1238
|
+
if (devcontainerChoice === 'mongodb-replicaset') {
|
|
1239
|
+
envContent = envContent.replace(/MONGO_USE_TRANSACTIONS=.*/g, 'MONGO_USE_TRANSACTIONS=true');
|
|
1240
|
+
}
|
|
1241
|
+
else {
|
|
1242
|
+
envContent = envContent.replace(/MONGO_USE_TRANSACTIONS=.*/g, 'MONGO_USE_TRANSACTIONS=false');
|
|
1243
|
+
}
|
|
1161
1244
|
}
|
|
1162
1245
|
fs.writeFileSync(envPath, envContent);
|
|
1163
1246
|
logger_1.Logger.info(`Created ${apiProject.name}/.env with secrets`);
|
|
@@ -1289,6 +1372,7 @@ export {};
|
|
|
1289
1372
|
try {
|
|
1290
1373
|
await executor.execute(context);
|
|
1291
1374
|
if (dryRun) {
|
|
1375
|
+
logger_1.Logger.info(`Stack type: ${config.stackType ?? 'mern'}`);
|
|
1292
1376
|
logger_1.Logger.warning((0, i18n_1.getStarterTranslation)(i18n_1.StarterStringKey.WARNING_DRY_RUN_RERUN));
|
|
1293
1377
|
process.exit(0);
|
|
1294
1378
|
}
|