@gravito/scaffold 1.0.0-beta.1 → 1.0.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 +1473 -299
  2. package/dist/index.d.cts +132 -9
  3. package/dist/index.d.ts +132 -9
  4. package/dist/index.js +1468 -299
  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
  */
@@ -310,12 +394,9 @@ declare class CleanArchitectureGenerator extends BaseGenerator {
310
394
  private generateAuthConfig;
311
395
  private generateCacheConfig;
312
396
  private generateLoggingConfig;
313
- private generateBaseEntity;
314
397
  private generateUserEntity;
315
- private generateBaseValueObject;
316
398
  private generateEmailValueObject;
317
399
  private generateUserRepositoryInterface;
318
- private generateDomainException;
319
400
  private generateCreateUserUseCase;
320
401
  private generateGetUserUseCase;
321
402
  private generateUserDTO;
@@ -329,6 +410,7 @@ declare class CleanArchitectureGenerator extends BaseGenerator {
329
410
  private generateUserPresenter;
330
411
  private generateBootstrap;
331
412
  protected generateArchitectureDoc(context: GeneratorContext): string;
413
+ protected generatePackageJson(context: GeneratorContext): string;
332
414
  }
333
415
 
334
416
  /**
@@ -366,10 +448,6 @@ declare class DddGenerator extends BaseGenerator {
366
448
  private generateIdValueObject;
367
449
  private generateMoneyValueObject;
368
450
  private generateEmailValueObject;
369
- private generateDomainEvent;
370
- private generateAggregateRoot;
371
- private generateEntity;
372
- private generateValueObject;
373
451
  private generateEventDispatcher;
374
452
  private generateAggregate;
375
453
  private generateAggregateStatus;
@@ -417,6 +495,51 @@ declare class EnterpriseMvcGenerator extends BaseGenerator {
417
495
  protected generateArchitectureDoc(context: GeneratorContext): string;
418
496
  }
419
497
 
498
+ /**
499
+ * SatelliteGenerator - Scaffolds Gravito Satellites (Plugins)
500
+ *
501
+ * Implements DDD + Clean Architecture for plugins with built-in
502
+ * Dogfooding support (pre-configured with Gravito modules).
503
+ */
504
+
505
+ declare class SatelliteGenerator extends BaseGenerator {
506
+ get architectureType(): "satellite";
507
+ get displayName(): string;
508
+ get description(): string;
509
+ getDirectoryStructure(context: GeneratorContext): DirectoryNode[];
510
+ private generateEntity;
511
+ private generateRepositoryInterface;
512
+ private generateUseCase;
513
+ private generateAtlasRepository;
514
+ private generateEntryPoint;
515
+ private generateManifest;
516
+ protected generatePackageJson(context: GeneratorContext): string;
517
+ protected generateArchitectureDoc(context: GeneratorContext): string;
518
+ }
519
+
520
+ interface LockFile {
521
+ profile: {
522
+ name: ProfileType;
523
+ version: string;
524
+ };
525
+ features: string[];
526
+ drivers: {
527
+ database: string;
528
+ cache: string;
529
+ queue: string;
530
+ storage: string;
531
+ session: string;
532
+ };
533
+ manifest: {
534
+ template: string;
535
+ version: string;
536
+ };
537
+ createdAt: string;
538
+ }
539
+ declare class LockGenerator {
540
+ generate(profileName: ProfileType, config: ProfileConfig, templateName?: string, templateVersion?: string): string;
541
+ }
542
+
420
543
  /**
421
544
  * Scaffold - Main API for project scaffolding
422
545
  *
@@ -459,4 +582,4 @@ declare class Scaffold {
459
582
  generateProvider(_targetDir: string, _providerName: string): Promise<ScaffoldResult>;
460
583
  }
461
584
 
462
- export { type ArchitectureType, BaseGenerator, CleanArchitectureGenerator, DddGenerator, EnterpriseMvcGenerator, type GeneratorConfig, type GeneratorContext, Scaffold, type ScaffoldOptions, type StubConfig, StubGenerator, type StubVariables };
585
+ 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
  */
@@ -310,12 +394,9 @@ declare class CleanArchitectureGenerator extends BaseGenerator {
310
394
  private generateAuthConfig;
311
395
  private generateCacheConfig;
312
396
  private generateLoggingConfig;
313
- private generateBaseEntity;
314
397
  private generateUserEntity;
315
- private generateBaseValueObject;
316
398
  private generateEmailValueObject;
317
399
  private generateUserRepositoryInterface;
318
- private generateDomainException;
319
400
  private generateCreateUserUseCase;
320
401
  private generateGetUserUseCase;
321
402
  private generateUserDTO;
@@ -329,6 +410,7 @@ declare class CleanArchitectureGenerator extends BaseGenerator {
329
410
  private generateUserPresenter;
330
411
  private generateBootstrap;
331
412
  protected generateArchitectureDoc(context: GeneratorContext): string;
413
+ protected generatePackageJson(context: GeneratorContext): string;
332
414
  }
333
415
 
334
416
  /**
@@ -366,10 +448,6 @@ declare class DddGenerator extends BaseGenerator {
366
448
  private generateIdValueObject;
367
449
  private generateMoneyValueObject;
368
450
  private generateEmailValueObject;
369
- private generateDomainEvent;
370
- private generateAggregateRoot;
371
- private generateEntity;
372
- private generateValueObject;
373
451
  private generateEventDispatcher;
374
452
  private generateAggregate;
375
453
  private generateAggregateStatus;
@@ -417,6 +495,51 @@ declare class EnterpriseMvcGenerator extends BaseGenerator {
417
495
  protected generateArchitectureDoc(context: GeneratorContext): string;
418
496
  }
419
497
 
498
+ /**
499
+ * SatelliteGenerator - Scaffolds Gravito Satellites (Plugins)
500
+ *
501
+ * Implements DDD + Clean Architecture for plugins with built-in
502
+ * Dogfooding support (pre-configured with Gravito modules).
503
+ */
504
+
505
+ declare class SatelliteGenerator extends BaseGenerator {
506
+ get architectureType(): "satellite";
507
+ get displayName(): string;
508
+ get description(): string;
509
+ getDirectoryStructure(context: GeneratorContext): DirectoryNode[];
510
+ private generateEntity;
511
+ private generateRepositoryInterface;
512
+ private generateUseCase;
513
+ private generateAtlasRepository;
514
+ private generateEntryPoint;
515
+ private generateManifest;
516
+ protected generatePackageJson(context: GeneratorContext): string;
517
+ protected generateArchitectureDoc(context: GeneratorContext): string;
518
+ }
519
+
520
+ interface LockFile {
521
+ profile: {
522
+ name: ProfileType;
523
+ version: string;
524
+ };
525
+ features: string[];
526
+ drivers: {
527
+ database: string;
528
+ cache: string;
529
+ queue: string;
530
+ storage: string;
531
+ session: string;
532
+ };
533
+ manifest: {
534
+ template: string;
535
+ version: string;
536
+ };
537
+ createdAt: string;
538
+ }
539
+ declare class LockGenerator {
540
+ generate(profileName: ProfileType, config: ProfileConfig, templateName?: string, templateVersion?: string): string;
541
+ }
542
+
420
543
  /**
421
544
  * Scaffold - Main API for project scaffolding
422
545
  *
@@ -459,4 +582,4 @@ declare class Scaffold {
459
582
  generateProvider(_targetDir: string, _providerName: string): Promise<ScaffoldResult>;
460
583
  }
461
584
 
462
- export { type ArchitectureType, BaseGenerator, CleanArchitectureGenerator, DddGenerator, EnterpriseMvcGenerator, type GeneratorConfig, type GeneratorContext, Scaffold, type ScaffoldOptions, type StubConfig, StubGenerator, type StubVariables };
585
+ 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 };