@gravito/scaffold 1.0.0-beta.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/index.cjs +2385 -419
  2. package/dist/index.d.cts +159 -9
  3. package/dist/index.d.ts +159 -9
  4. package/dist/index.js +2380 -419
  5. package/package.json +8 -5
  6. package/templates/features/otel/.env.example +2 -0
  7. package/templates/features/otel/config/telemetry.ts +10 -0
  8. package/templates/features/otel/docker-compose.yml +15 -0
  9. package/templates/features/otel/package.json +7 -0
  10. package/templates/features/redis/.env.example +7 -0
  11. package/templates/features/redis/config/cache.ts +14 -0
  12. package/templates/features/redis/config/queue.ts +13 -0
  13. package/templates/features/redis/docker-compose.yml +17 -0
  14. package/templates/features/redis/package.json +5 -0
  15. package/templates/overlays/core/.env.example +14 -0
  16. package/templates/overlays/core/config/cache.ts +26 -0
  17. package/templates/overlays/core/config/database.ts +38 -0
  18. package/templates/overlays/core/config/queue.ts +31 -0
  19. package/templates/overlays/core/package.json +5 -0
  20. package/templates/overlays/enterprise/.env.example +26 -0
  21. package/templates/overlays/enterprise/config/cache.ts +31 -0
  22. package/templates/overlays/enterprise/config/database.ts +34 -0
  23. package/templates/overlays/enterprise/config/logging.ts +32 -0
  24. package/templates/overlays/enterprise/config/queue.ts +31 -0
  25. package/templates/overlays/enterprise/config/security.ts +20 -0
  26. package/templates/overlays/enterprise/docker-compose.yml +32 -0
  27. package/templates/overlays/enterprise/package.json +7 -0
  28. package/templates/overlays/scale/.env.example +22 -0
  29. package/templates/overlays/scale/config/cache.ts +31 -0
  30. package/templates/overlays/scale/config/database.ts +34 -0
  31. package/templates/overlays/scale/config/queue.ts +34 -0
  32. package/templates/overlays/scale/docker-compose.yml +32 -0
  33. package/templates/overlays/scale/package.json +6 -0
package/dist/index.d.cts CHANGED
@@ -1,9 +1,53 @@
1
1
  import Handlebars from 'handlebars';
2
2
 
3
+ type ProfileType = 'core' | 'scale' | 'enterprise';
4
+ interface ProfileConfig {
5
+ drivers: {
6
+ database: string;
7
+ cache: string;
8
+ queue: string;
9
+ storage: string;
10
+ session: string;
11
+ };
12
+ features: string[];
13
+ }
14
+ declare class ProfileResolver {
15
+ private static readonly DEFAULTS;
16
+ resolve(profile?: ProfileType, withFeatures?: string[]): ProfileConfig;
17
+ private applyFeature;
18
+ /**
19
+ * Validator for profile names
20
+ */
21
+ isValidProfile(profile: string): profile is ProfileType;
22
+ /**
23
+ * Validator for feature names
24
+ */
25
+ isValidFeature(feature: string): boolean;
26
+ }
27
+
28
+ interface DetectedEnvironment {
29
+ platform: 'aws' | 'gcp' | 'azure' | 'k8s' | 'vercel' | 'netlify' | 'unknown';
30
+ suggestedProfile: ProfileType;
31
+ confidence: 'high' | 'medium' | 'low';
32
+ reason: string;
33
+ }
34
+ declare class EnvironmentDetector {
35
+ detect(): DetectedEnvironment;
36
+ }
37
+
38
+ declare class FileMerger {
39
+ /**
40
+ * Merge content of two files based on their type.
41
+ */
42
+ merge(fileName: string, baseContent: string, overlayContent: string): string;
43
+ private mergeJson;
44
+ private mergeEnv;
45
+ }
46
+
3
47
  /**
4
48
  * Architecture types supported by the scaffolding system.
5
49
  */
6
- type ArchitectureType = 'enterprise-mvc' | 'clean' | 'ddd';
50
+ type ArchitectureType = 'enterprise-mvc' | 'clean' | 'ddd' | 'satellite' | 'action-domain';
7
51
  /**
8
52
  * Options for scaffolding a new project.
9
53
  */
@@ -35,6 +79,25 @@ interface ScaffoldOptions {
35
79
  * @default true
36
80
  */
37
81
  installDeps?: boolean;
82
+ /**
83
+ * Whether to include Spectrum debug dashboard
84
+ * @default false
85
+ */
86
+ withSpectrum?: boolean;
87
+ /**
88
+ * Whether this is an internal official satellite
89
+ * @default false
90
+ */
91
+ isInternal?: boolean;
92
+ /**
93
+ * Profile preset (Core, Scale, Enterprise)
94
+ * @default 'core'
95
+ */
96
+ profile?: 'core' | 'scale' | 'enterprise';
97
+ /**
98
+ * Feature add-ons (e.g. 'redis', 'queue', 'otel')
99
+ */
100
+ features?: string[];
38
101
  /**
39
102
  * Additional context variables for templates
40
103
  */
@@ -222,6 +285,7 @@ interface GeneratorConfig {
222
285
  declare abstract class BaseGenerator {
223
286
  protected config: GeneratorConfig;
224
287
  protected stubGenerator: StubGenerator;
288
+ protected fileMerger: FileMerger;
225
289
  protected filesCreated: string[];
226
290
  constructor(config: GeneratorConfig);
227
291
  /**
@@ -255,6 +319,18 @@ declare abstract class BaseGenerator {
255
319
  * Generate common files (package.json, .env, etc.)
256
320
  */
257
321
  protected generateCommonFiles(context: GeneratorContext): Promise<void>;
322
+ /**
323
+ * Apply profile-specific overlays
324
+ */
325
+ protected applyOverlays(context: GeneratorContext): Promise<void>;
326
+ /**
327
+ * Apply feature-specific overlays
328
+ */
329
+ protected applyFeatureOverlays(context: GeneratorContext): Promise<void>;
330
+ /**
331
+ * Helper to copy/merge an overlay directory into the target
332
+ */
333
+ protected copyOverlayDirectory(sourceDir: string, context: GeneratorContext): Promise<void>;
258
334
  /**
259
335
  * Write a file and track it.
260
336
  */
@@ -263,6 +339,14 @@ declare abstract class BaseGenerator {
263
339
  * Generate package.json content.
264
340
  */
265
341
  protected generatePackageJson(context: GeneratorContext): string;
342
+ /**
343
+ * Generate Dockerfile content.
344
+ */
345
+ protected generateDockerfile(context: GeneratorContext): string;
346
+ /**
347
+ * Generate .dockerignore content.
348
+ */
349
+ protected generateDockerIgnore(): string;
266
350
  /**
267
351
  * Generate .env.example content.
268
352
  */
@@ -280,6 +364,26 @@ declare abstract class BaseGenerator {
280
364
  * Override in subclasses for architecture-specific docs.
281
365
  */
282
366
  protected abstract generateArchitectureDoc(context: GeneratorContext): string;
367
+ /**
368
+ * Generate check scripts for project validation.
369
+ */
370
+ protected generateCheckScripts(context: GeneratorContext): Promise<void>;
371
+ /**
372
+ * Generate check-dependencies.ts script content.
373
+ */
374
+ protected generateCheckDependenciesScript(): string;
375
+ /**
376
+ * Generate check.sh script content.
377
+ */
378
+ protected generateCheckShellScript(): string;
379
+ /**
380
+ * Generate pre-commit.sh script content.
381
+ */
382
+ protected generatePreCommitScript(): string;
383
+ /**
384
+ * Generate CHECK_SYSTEM.md documentation.
385
+ */
386
+ protected generateCheckSystemDoc(context: GeneratorContext): string;
283
387
  /**
284
388
  * Log a message if verbose mode is enabled.
285
389
  */
@@ -310,12 +414,9 @@ declare class CleanArchitectureGenerator extends BaseGenerator {
310
414
  private generateAuthConfig;
311
415
  private generateCacheConfig;
312
416
  private generateLoggingConfig;
313
- private generateBaseEntity;
314
417
  private generateUserEntity;
315
- private generateBaseValueObject;
316
418
  private generateEmailValueObject;
317
419
  private generateUserRepositoryInterface;
318
- private generateDomainException;
319
420
  private generateCreateUserUseCase;
320
421
  private generateGetUserUseCase;
321
422
  private generateUserDTO;
@@ -324,11 +425,15 @@ declare class CleanArchitectureGenerator extends BaseGenerator {
324
425
  private generateMailService;
325
426
  private generateAppServiceProvider;
326
427
  private generateRepositoryServiceProvider;
428
+ private generateProvidersIndex;
429
+ private generateMiddlewareProvider;
430
+ private generateRouteProvider;
327
431
  private generateUserController;
328
432
  private generateApiRoutes;
329
433
  private generateUserPresenter;
330
434
  private generateBootstrap;
331
435
  protected generateArchitectureDoc(context: GeneratorContext): string;
436
+ protected generatePackageJson(context: GeneratorContext): string;
332
437
  }
333
438
 
334
439
  /**
@@ -366,10 +471,6 @@ declare class DddGenerator extends BaseGenerator {
366
471
  private generateIdValueObject;
367
472
  private generateMoneyValueObject;
368
473
  private generateEmailValueObject;
369
- private generateDomainEvent;
370
- private generateAggregateRoot;
371
- private generateEntity;
372
- private generateValueObject;
373
474
  private generateEventDispatcher;
374
475
  private generateAggregate;
375
476
  private generateAggregateStatus;
@@ -411,12 +512,61 @@ declare class EnterpriseMvcGenerator extends BaseGenerator {
411
512
  private generateAuthMiddleware;
412
513
  private generateAppServiceProvider;
413
514
  private generateRouteServiceProvider;
515
+ private generateProvidersIndex;
516
+ private generateDatabaseProvider;
517
+ private generateMiddlewareProvider;
518
+ private generateRouteProvider;
414
519
  private generateExceptionHandler;
415
520
  private generateBootstrap;
416
521
  private generateRoutes;
417
522
  protected generateArchitectureDoc(context: GeneratorContext): string;
418
523
  }
419
524
 
525
+ /**
526
+ * SatelliteGenerator - Scaffolds Gravito Satellites (Plugins)
527
+ *
528
+ * Implements DDD + Clean Architecture for plugins with built-in
529
+ * Dogfooding support (pre-configured with Gravito modules).
530
+ */
531
+
532
+ declare class SatelliteGenerator extends BaseGenerator {
533
+ get architectureType(): "satellite";
534
+ get displayName(): string;
535
+ get description(): string;
536
+ getDirectoryStructure(context: GeneratorContext): DirectoryNode[];
537
+ private generateEntity;
538
+ private generateRepositoryInterface;
539
+ private generateUseCase;
540
+ private generateAtlasRepository;
541
+ private generateEntryPoint;
542
+ private generateManifest;
543
+ protected generatePackageJson(context: GeneratorContext): string;
544
+ protected generateArchitectureDoc(context: GeneratorContext): string;
545
+ }
546
+
547
+ interface LockFile {
548
+ profile: {
549
+ name: ProfileType;
550
+ version: string;
551
+ };
552
+ features: string[];
553
+ drivers: {
554
+ database: string;
555
+ cache: string;
556
+ queue: string;
557
+ storage: string;
558
+ session: string;
559
+ };
560
+ manifest: {
561
+ template: string;
562
+ version: string;
563
+ };
564
+ createdAt: string;
565
+ }
566
+ declare class LockGenerator {
567
+ generate(profileName: ProfileType, config: ProfileConfig, templateName?: string, templateVersion?: string): string;
568
+ }
569
+
420
570
  /**
421
571
  * Scaffold - Main API for project scaffolding
422
572
  *
@@ -459,4 +609,4 @@ declare class Scaffold {
459
609
  generateProvider(_targetDir: string, _providerName: string): Promise<ScaffoldResult>;
460
610
  }
461
611
 
462
- export { type ArchitectureType, BaseGenerator, CleanArchitectureGenerator, DddGenerator, EnterpriseMvcGenerator, type GeneratorConfig, type GeneratorContext, Scaffold, type ScaffoldOptions, type StubConfig, StubGenerator, type StubVariables };
612
+ export { type ArchitectureType, BaseGenerator, CleanArchitectureGenerator, DddGenerator, type DetectedEnvironment, EnterpriseMvcGenerator, EnvironmentDetector, FileMerger, type GeneratorConfig, type GeneratorContext, type LockFile, LockGenerator, type ProfileConfig, ProfileResolver, type ProfileType, SatelliteGenerator, Scaffold, type ScaffoldOptions, type StubConfig, StubGenerator, type StubVariables };
package/dist/index.d.ts CHANGED
@@ -1,9 +1,53 @@
1
1
  import Handlebars from 'handlebars';
2
2
 
3
+ type ProfileType = 'core' | 'scale' | 'enterprise';
4
+ interface ProfileConfig {
5
+ drivers: {
6
+ database: string;
7
+ cache: string;
8
+ queue: string;
9
+ storage: string;
10
+ session: string;
11
+ };
12
+ features: string[];
13
+ }
14
+ declare class ProfileResolver {
15
+ private static readonly DEFAULTS;
16
+ resolve(profile?: ProfileType, withFeatures?: string[]): ProfileConfig;
17
+ private applyFeature;
18
+ /**
19
+ * Validator for profile names
20
+ */
21
+ isValidProfile(profile: string): profile is ProfileType;
22
+ /**
23
+ * Validator for feature names
24
+ */
25
+ isValidFeature(feature: string): boolean;
26
+ }
27
+
28
+ interface DetectedEnvironment {
29
+ platform: 'aws' | 'gcp' | 'azure' | 'k8s' | 'vercel' | 'netlify' | 'unknown';
30
+ suggestedProfile: ProfileType;
31
+ confidence: 'high' | 'medium' | 'low';
32
+ reason: string;
33
+ }
34
+ declare class EnvironmentDetector {
35
+ detect(): DetectedEnvironment;
36
+ }
37
+
38
+ declare class FileMerger {
39
+ /**
40
+ * Merge content of two files based on their type.
41
+ */
42
+ merge(fileName: string, baseContent: string, overlayContent: string): string;
43
+ private mergeJson;
44
+ private mergeEnv;
45
+ }
46
+
3
47
  /**
4
48
  * Architecture types supported by the scaffolding system.
5
49
  */
6
- type ArchitectureType = 'enterprise-mvc' | 'clean' | 'ddd';
50
+ type ArchitectureType = 'enterprise-mvc' | 'clean' | 'ddd' | 'satellite' | 'action-domain';
7
51
  /**
8
52
  * Options for scaffolding a new project.
9
53
  */
@@ -35,6 +79,25 @@ interface ScaffoldOptions {
35
79
  * @default true
36
80
  */
37
81
  installDeps?: boolean;
82
+ /**
83
+ * Whether to include Spectrum debug dashboard
84
+ * @default false
85
+ */
86
+ withSpectrum?: boolean;
87
+ /**
88
+ * Whether this is an internal official satellite
89
+ * @default false
90
+ */
91
+ isInternal?: boolean;
92
+ /**
93
+ * Profile preset (Core, Scale, Enterprise)
94
+ * @default 'core'
95
+ */
96
+ profile?: 'core' | 'scale' | 'enterprise';
97
+ /**
98
+ * Feature add-ons (e.g. 'redis', 'queue', 'otel')
99
+ */
100
+ features?: string[];
38
101
  /**
39
102
  * Additional context variables for templates
40
103
  */
@@ -222,6 +285,7 @@ interface GeneratorConfig {
222
285
  declare abstract class BaseGenerator {
223
286
  protected config: GeneratorConfig;
224
287
  protected stubGenerator: StubGenerator;
288
+ protected fileMerger: FileMerger;
225
289
  protected filesCreated: string[];
226
290
  constructor(config: GeneratorConfig);
227
291
  /**
@@ -255,6 +319,18 @@ declare abstract class BaseGenerator {
255
319
  * Generate common files (package.json, .env, etc.)
256
320
  */
257
321
  protected generateCommonFiles(context: GeneratorContext): Promise<void>;
322
+ /**
323
+ * Apply profile-specific overlays
324
+ */
325
+ protected applyOverlays(context: GeneratorContext): Promise<void>;
326
+ /**
327
+ * Apply feature-specific overlays
328
+ */
329
+ protected applyFeatureOverlays(context: GeneratorContext): Promise<void>;
330
+ /**
331
+ * Helper to copy/merge an overlay directory into the target
332
+ */
333
+ protected copyOverlayDirectory(sourceDir: string, context: GeneratorContext): Promise<void>;
258
334
  /**
259
335
  * Write a file and track it.
260
336
  */
@@ -263,6 +339,14 @@ declare abstract class BaseGenerator {
263
339
  * Generate package.json content.
264
340
  */
265
341
  protected generatePackageJson(context: GeneratorContext): string;
342
+ /**
343
+ * Generate Dockerfile content.
344
+ */
345
+ protected generateDockerfile(context: GeneratorContext): string;
346
+ /**
347
+ * Generate .dockerignore content.
348
+ */
349
+ protected generateDockerIgnore(): string;
266
350
  /**
267
351
  * Generate .env.example content.
268
352
  */
@@ -280,6 +364,26 @@ declare abstract class BaseGenerator {
280
364
  * Override in subclasses for architecture-specific docs.
281
365
  */
282
366
  protected abstract generateArchitectureDoc(context: GeneratorContext): string;
367
+ /**
368
+ * Generate check scripts for project validation.
369
+ */
370
+ protected generateCheckScripts(context: GeneratorContext): Promise<void>;
371
+ /**
372
+ * Generate check-dependencies.ts script content.
373
+ */
374
+ protected generateCheckDependenciesScript(): string;
375
+ /**
376
+ * Generate check.sh script content.
377
+ */
378
+ protected generateCheckShellScript(): string;
379
+ /**
380
+ * Generate pre-commit.sh script content.
381
+ */
382
+ protected generatePreCommitScript(): string;
383
+ /**
384
+ * Generate CHECK_SYSTEM.md documentation.
385
+ */
386
+ protected generateCheckSystemDoc(context: GeneratorContext): string;
283
387
  /**
284
388
  * Log a message if verbose mode is enabled.
285
389
  */
@@ -310,12 +414,9 @@ declare class CleanArchitectureGenerator extends BaseGenerator {
310
414
  private generateAuthConfig;
311
415
  private generateCacheConfig;
312
416
  private generateLoggingConfig;
313
- private generateBaseEntity;
314
417
  private generateUserEntity;
315
- private generateBaseValueObject;
316
418
  private generateEmailValueObject;
317
419
  private generateUserRepositoryInterface;
318
- private generateDomainException;
319
420
  private generateCreateUserUseCase;
320
421
  private generateGetUserUseCase;
321
422
  private generateUserDTO;
@@ -324,11 +425,15 @@ declare class CleanArchitectureGenerator extends BaseGenerator {
324
425
  private generateMailService;
325
426
  private generateAppServiceProvider;
326
427
  private generateRepositoryServiceProvider;
428
+ private generateProvidersIndex;
429
+ private generateMiddlewareProvider;
430
+ private generateRouteProvider;
327
431
  private generateUserController;
328
432
  private generateApiRoutes;
329
433
  private generateUserPresenter;
330
434
  private generateBootstrap;
331
435
  protected generateArchitectureDoc(context: GeneratorContext): string;
436
+ protected generatePackageJson(context: GeneratorContext): string;
332
437
  }
333
438
 
334
439
  /**
@@ -366,10 +471,6 @@ declare class DddGenerator extends BaseGenerator {
366
471
  private generateIdValueObject;
367
472
  private generateMoneyValueObject;
368
473
  private generateEmailValueObject;
369
- private generateDomainEvent;
370
- private generateAggregateRoot;
371
- private generateEntity;
372
- private generateValueObject;
373
474
  private generateEventDispatcher;
374
475
  private generateAggregate;
375
476
  private generateAggregateStatus;
@@ -411,12 +512,61 @@ declare class EnterpriseMvcGenerator extends BaseGenerator {
411
512
  private generateAuthMiddleware;
412
513
  private generateAppServiceProvider;
413
514
  private generateRouteServiceProvider;
515
+ private generateProvidersIndex;
516
+ private generateDatabaseProvider;
517
+ private generateMiddlewareProvider;
518
+ private generateRouteProvider;
414
519
  private generateExceptionHandler;
415
520
  private generateBootstrap;
416
521
  private generateRoutes;
417
522
  protected generateArchitectureDoc(context: GeneratorContext): string;
418
523
  }
419
524
 
525
+ /**
526
+ * SatelliteGenerator - Scaffolds Gravito Satellites (Plugins)
527
+ *
528
+ * Implements DDD + Clean Architecture for plugins with built-in
529
+ * Dogfooding support (pre-configured with Gravito modules).
530
+ */
531
+
532
+ declare class SatelliteGenerator extends BaseGenerator {
533
+ get architectureType(): "satellite";
534
+ get displayName(): string;
535
+ get description(): string;
536
+ getDirectoryStructure(context: GeneratorContext): DirectoryNode[];
537
+ private generateEntity;
538
+ private generateRepositoryInterface;
539
+ private generateUseCase;
540
+ private generateAtlasRepository;
541
+ private generateEntryPoint;
542
+ private generateManifest;
543
+ protected generatePackageJson(context: GeneratorContext): string;
544
+ protected generateArchitectureDoc(context: GeneratorContext): string;
545
+ }
546
+
547
+ interface LockFile {
548
+ profile: {
549
+ name: ProfileType;
550
+ version: string;
551
+ };
552
+ features: string[];
553
+ drivers: {
554
+ database: string;
555
+ cache: string;
556
+ queue: string;
557
+ storage: string;
558
+ session: string;
559
+ };
560
+ manifest: {
561
+ template: string;
562
+ version: string;
563
+ };
564
+ createdAt: string;
565
+ }
566
+ declare class LockGenerator {
567
+ generate(profileName: ProfileType, config: ProfileConfig, templateName?: string, templateVersion?: string): string;
568
+ }
569
+
420
570
  /**
421
571
  * Scaffold - Main API for project scaffolding
422
572
  *
@@ -459,4 +609,4 @@ declare class Scaffold {
459
609
  generateProvider(_targetDir: string, _providerName: string): Promise<ScaffoldResult>;
460
610
  }
461
611
 
462
- export { type ArchitectureType, BaseGenerator, CleanArchitectureGenerator, DddGenerator, EnterpriseMvcGenerator, type GeneratorConfig, type GeneratorContext, Scaffold, type ScaffoldOptions, type StubConfig, StubGenerator, type StubVariables };
612
+ export { type ArchitectureType, BaseGenerator, CleanArchitectureGenerator, DddGenerator, type DetectedEnvironment, EnterpriseMvcGenerator, EnvironmentDetector, FileMerger, type GeneratorConfig, type GeneratorContext, type LockFile, LockGenerator, type ProfileConfig, ProfileResolver, type ProfileType, SatelliteGenerator, Scaffold, type ScaffoldOptions, type StubConfig, StubGenerator, type StubVariables };