@ingenyus/swarm-wasp 0.2.1 → 0.2.3

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 (30) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/generators/action/action-generator.js +30 -34
  3. package/dist/generators/action/index.js +30 -34
  4. package/dist/generators/api/api-generator.js +30 -34
  5. package/dist/generators/api/index.js +30 -34
  6. package/dist/generators/api-namespace/api-namespace-generator.js +30 -34
  7. package/dist/generators/api-namespace/index.js +30 -34
  8. package/dist/generators/base/component-generator.base.d.ts +4 -7
  9. package/dist/generators/base/component-generator.base.d.ts.map +1 -1
  10. package/dist/generators/base/component-generator.base.js +30 -34
  11. package/dist/generators/base/index.js +30 -34
  12. package/dist/generators/base/operation-generator.base.js +30 -34
  13. package/dist/generators/base/wasp-generator.base.d.ts +3 -5
  14. package/dist/generators/base/wasp-generator.base.d.ts.map +1 -1
  15. package/dist/generators/base/wasp-generator.base.js +10 -10
  16. package/dist/generators/crud/crud-generator.js +30 -34
  17. package/dist/generators/crud/index.js +30 -34
  18. package/dist/generators/feature/feature-generator.d.ts +2 -4
  19. package/dist/generators/feature/feature-generator.d.ts.map +1 -1
  20. package/dist/generators/feature/feature-generator.js +16 -22
  21. package/dist/generators/feature/index.js +16 -22
  22. package/dist/generators/index.js +30 -34
  23. package/dist/generators/job/index.js +30 -34
  24. package/dist/generators/job/job-generator.js +30 -34
  25. package/dist/generators/query/index.js +30 -34
  26. package/dist/generators/query/query-generator.js +30 -34
  27. package/dist/generators/route/index.js +30 -34
  28. package/dist/generators/route/route-generator.js +30 -34
  29. package/dist/index.js +30 -34
  30. package/package.json +2 -2
@@ -30,8 +30,8 @@ var CONFIG_TYPES = {
30
30
 
31
31
  // src/generators/base/component-generator.base.ts
32
32
  import {
33
+ GeneratorRuntime,
33
34
  hasHelperMethodCall,
34
- logger as singletonLogger4,
35
35
  toCamelCase,
36
36
  toKebabCase as toKebabCase2,
37
37
  validateFeaturePath as validateFeaturePath3
@@ -200,17 +200,12 @@ var TemplateUtility = class {
200
200
  };
201
201
 
202
202
  // src/generators/feature/feature-generator.ts
203
- import {
204
- handleFatalError as handleFatalError2,
205
- logger as singletonLogger3,
206
- validateFeaturePath as validateFeaturePath2
207
- } from "@ingenyus/swarm";
203
+ import { handleFatalError as handleFatalError2, validateFeaturePath as validateFeaturePath2 } from "@ingenyus/swarm";
208
204
  import path5 from "path";
209
205
 
210
206
  // src/generators/base/wasp-generator.base.ts
211
207
  import {
212
208
  GeneratorBase,
213
- logger as singletonLogger2,
214
209
  SwarmConfigManager,
215
210
  TemplateResolver
216
211
  } from "@ingenyus/swarm";
@@ -653,14 +648,6 @@ var WaspConfigGenerator = class {
653
648
 
654
649
  // src/generators/base/wasp-generator.base.ts
655
650
  var WaspGeneratorBase = class extends GeneratorBase {
656
- constructor(fileSystem = realFileSystem, logger = singletonLogger2) {
657
- super(fileSystem, logger);
658
- this.fileSystem = fileSystem;
659
- this.logger = logger;
660
- this.configGenerator = new WaspConfigGenerator(logger, fileSystem);
661
- this.templateUtility = new TemplateUtility(fileSystem);
662
- this.templateResolver = new TemplateResolver(fileSystem);
663
- }
664
651
  configGenerator;
665
652
  templateUtility;
666
653
  templateResolver;
@@ -668,6 +655,15 @@ var WaspGeneratorBase = class extends GeneratorBase {
668
655
  configLoaded = false;
669
656
  // Plugin name from swarm.config.json
670
657
  pluginName = PLUGIN_NAME;
658
+ constructor() {
659
+ super();
660
+ this.configGenerator = new WaspConfigGenerator(
661
+ this.logger,
662
+ this.fileSystem
663
+ );
664
+ this.templateUtility = new TemplateUtility(this.fileSystem);
665
+ this.templateResolver = new TemplateResolver(this.fileSystem);
666
+ }
671
667
  async loadSwarmConfig() {
672
668
  if (this.configLoaded) return;
673
669
  const configManager = new SwarmConfigManager();
@@ -718,7 +714,7 @@ var WaspGeneratorBase = class extends GeneratorBase {
718
714
  }
719
715
  /**
720
716
  * Generic existence check with force flag handling
721
- * Consolidates the pattern used in both file and config checks
717
+ * Consolidates the pattern used in both file and config existence checks
722
718
  */
723
719
  checkExistence(exists, itemDescription, force, errorMessage) {
724
720
  if (exists && !force) {
@@ -758,16 +754,14 @@ var schema = z2.object({
758
754
 
759
755
  // src/generators/feature/feature-generator.ts
760
756
  var FeatureGenerator = class extends WaspGeneratorBase {
761
- constructor(logger = singletonLogger3, fileSystem = realFileSystem) {
762
- super(fileSystem, logger);
763
- this.logger = logger;
764
- this.fileSystem = fileSystem;
765
- this.name = "feature";
766
- this.description = "Generates a feature directory containing a Wasp configuration file";
767
- }
768
757
  name;
769
758
  description;
770
759
  schema = schema;
760
+ constructor() {
761
+ super();
762
+ this.name = "feature";
763
+ this.description = "Generates a feature directory containing a Wasp configuration file";
764
+ }
771
765
  getDefaultTemplatePath(templateName) {
772
766
  return this.templateUtility.resolveTemplatePath(
773
767
  templateName,
@@ -803,13 +797,6 @@ var FeatureGenerator = class extends WaspGeneratorBase {
803
797
 
804
798
  // src/generators/base/component-generator.base.ts
805
799
  var ComponentGeneratorBase = class extends WaspGeneratorBase {
806
- constructor(logger = singletonLogger4, fileSystem = realFileSystem, featureDirectoryGenerator = new FeatureGenerator(logger, fileSystem)) {
807
- super(fileSystem, logger);
808
- this.logger = logger;
809
- this.fileSystem = fileSystem;
810
- this.featureDirectoryGenerator = featureDirectoryGenerator;
811
- this.featureDirectoryGenerator = featureDirectoryGenerator;
812
- }
813
800
  getDefaultTemplatePath(templateName) {
814
801
  return this.templateUtility.resolveTemplatePath(
815
802
  templateName,
@@ -817,6 +804,17 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
817
804
  import.meta.url
818
805
  );
819
806
  }
807
+ featureDirectoryGenerator;
808
+ constructor() {
809
+ super();
810
+ const runtime = GeneratorRuntime.current();
811
+ if (runtime.featureGeneratorFactory) {
812
+ const factoryResult = runtime.featureGeneratorFactory(runtime);
813
+ this.featureDirectoryGenerator = factoryResult;
814
+ } else {
815
+ this.featureDirectoryGenerator = new FeatureGenerator();
816
+ }
817
+ }
820
818
  get name() {
821
819
  return toKebabCase2(this.componentType);
822
820
  }
@@ -893,15 +891,14 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
893
891
  }
894
892
  /**
895
893
  * Gets the appropriate directory for a feature based on its path.
896
- * @param fileSystem - The filesystem abstraction
897
894
  * @param featurePath - The full feature path
898
895
  * @param type - The type of file being generated
899
896
  * @returns The target directory and import path
900
897
  */
901
- getFeatureTargetDir(fileSystem, featurePath, type) {
898
+ getFeatureTargetDir(featurePath, type) {
902
899
  validateFeaturePath3(featurePath);
903
900
  const normalisedPath = normaliseFeaturePath(featurePath);
904
- const featureDir = getFeatureDir(fileSystem, normalisedPath);
901
+ const featureDir = getFeatureDir(this.fileSystem, normalisedPath);
905
902
  const typeKey = type.toLowerCase();
906
903
  const typeDirectory = TYPE_DIRECTORIES[typeKey];
907
904
  const targetDirectory = path6.join(featureDir, typeDirectory);
@@ -913,7 +910,6 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
913
910
  */
914
911
  ensureTargetDirectory(featurePath, type) {
915
912
  const { targetDirectory, importDirectory } = this.getFeatureTargetDir(
916
- this.fileSystem,
917
913
  featurePath,
918
914
  type
919
915
  );
@@ -1,4 +1,4 @@
1
- import { FileSystem, Logger, SwarmGenerator } from '@ingenyus/swarm';
1
+ import { SwarmGenerator } from '@ingenyus/swarm';
2
2
  import { ZodType } from 'zod';
3
3
  import { ConfigType } from '../../types';
4
4
  import { schema as featureSchema } from '../feature/schema';
@@ -7,12 +7,10 @@ import { WaspGeneratorBase } from './wasp-generator.base';
7
7
  * Abstract base class for all Wasp component generators
8
8
  */
9
9
  export declare abstract class ComponentGeneratorBase<S extends ZodType, TConfig extends ConfigType> extends WaspGeneratorBase<S> {
10
- logger: Logger;
11
- fileSystem: FileSystem;
12
- protected featureDirectoryGenerator: SwarmGenerator<typeof featureSchema>;
13
10
  protected abstract componentType: TConfig;
14
11
  protected getDefaultTemplatePath(templateName: string): string;
15
- constructor(logger?: Logger, fileSystem?: FileSystem, featureDirectoryGenerator?: SwarmGenerator<typeof featureSchema>);
12
+ protected featureDirectoryGenerator: SwarmGenerator<typeof featureSchema>;
13
+ constructor();
16
14
  get name(): string;
17
15
  /**
18
16
  * Validates that the feature config file exists in the target or ancestor directories
@@ -33,12 +31,11 @@ export declare abstract class ComponentGeneratorBase<S extends ZodType, TConfig
33
31
  protected updateConfigWithCheck(configPath: string, methodName: string, entityName: string, definition: string, featurePath: string, force: boolean): void;
34
32
  /**
35
33
  * Gets the appropriate directory for a feature based on its path.
36
- * @param fileSystem - The filesystem abstraction
37
34
  * @param featurePath - The full feature path
38
35
  * @param type - The type of file being generated
39
36
  * @returns The target directory and import path
40
37
  */
41
- protected getFeatureTargetDir(fileSystem: FileSystem, featurePath: string, type: string): {
38
+ protected getFeatureTargetDir(featurePath: string, type: string): {
42
39
  targetDirectory: string;
43
40
  importDirectory: string;
44
41
  };
@@ -1 +1 @@
1
- {"version":3,"file":"component-generator.base.d.ts","sourceRoot":"","sources":["../../../src/generators/base/component-generator.base.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAEV,MAAM,EAEN,cAAc,EAIf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAO9B,OAAO,EAAE,UAAU,EAAoB,MAAM,aAAa,CAAC;AAE3D,OAAO,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;GAEG;AACH,8BAAsB,sBAAsB,CAC1C,CAAC,SAAS,OAAO,EACjB,OAAO,SAAS,UAAU,CAC1B,SAAQ,iBAAiB,CAAC,CAAC,CAAC;IAYnB,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,UAAU;IAC7B,SAAS,CAAC,yBAAyB,EAAE,cAAc,CACjD,OAAO,aAAa,CACrB;IAfH,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAE1C,SAAS,CAAC,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;gBASrD,MAAM,GAAE,MAAwB,EAChC,UAAU,GAAE,UAA2B,EACpC,yBAAyB,GAAE,cAAc,CACjD,OAAO,aAAa,CACsB;IAO9C,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,SAAS,CAAC,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IA4B5D;;OAEG;IACH,SAAS,CAAC,iBAAiB,CACzB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,GACb,OAAO;IAgBV;;OAEG;IACH,SAAS,CAAC,mBAAmB,CAC3B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,OAAO,EACrB,UAAU,EAAE,MAAM,GACjB,IAAI;IAOP;;;OAGG;IACH,SAAS,CAAC,qBAAqB,CAC7B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,GACb,IAAI;IAmBP;;;;;;OAMG;IACH,SAAS,CAAC,mBAAmB,CAC3B,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE;IAavD;;OAEG;IACH,SAAS,CAAC,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;IAYjE;;OAEG;cACa,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,IAAI,CAAC;CAcjB"}
1
+ {"version":3,"file":"component-generator.base.d.ts","sourceRoot":"","sources":["../../../src/generators/base/component-generator.base.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,cAAc,EAIf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAM9B,OAAO,EAAE,UAAU,EAAoB,MAAM,aAAa,CAAC;AAE3D,OAAO,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;GAEG;AACH,8BAAsB,sBAAsB,CAC1C,CAAC,SAAS,OAAO,EACjB,OAAO,SAAS,UAAU,CAC1B,SAAQ,iBAAiB,CAAC,CAAC,CAAC;IAC5B,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAE1C,SAAS,CAAC,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAQ9D,SAAS,CAAC,yBAAyB,EAAE,cAAc,CAAC,OAAO,aAAa,CAAC,CAAC;;IAmB1E,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,SAAS,CAAC,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IA4B5D;;OAEG;IACH,SAAS,CAAC,iBAAiB,CACzB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,GACb,OAAO;IAgBV;;OAEG;IACH,SAAS,CAAC,mBAAmB,CAC3B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,OAAO,EACrB,UAAU,EAAE,MAAM,GACjB,IAAI;IAOP;;;OAGG;IACH,SAAS,CAAC,qBAAqB,CAC7B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,GACb,IAAI;IAmBP;;;;;OAKG;IACH,SAAS,CAAC,mBAAmB,CAC3B,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE;IAavD;;OAEG;IACH,SAAS,CAAC,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;IAWjE;;OAEG;cACa,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,IAAI,CAAC;CAcjB"}
@@ -1,7 +1,7 @@
1
1
  // src/generators/base/component-generator.base.ts
2
2
  import {
3
+ GeneratorRuntime,
3
4
  hasHelperMethodCall,
4
- logger as singletonLogger4,
5
5
  toCamelCase,
6
6
  toKebabCase as toKebabCase2,
7
7
  validateFeaturePath as validateFeaturePath3
@@ -189,17 +189,12 @@ var TemplateUtility = class {
189
189
  };
190
190
 
191
191
  // src/generators/feature/feature-generator.ts
192
- import {
193
- handleFatalError as handleFatalError2,
194
- logger as singletonLogger3,
195
- validateFeaturePath as validateFeaturePath2
196
- } from "@ingenyus/swarm";
192
+ import { handleFatalError as handleFatalError2, validateFeaturePath as validateFeaturePath2 } from "@ingenyus/swarm";
197
193
  import path5 from "path";
198
194
 
199
195
  // src/generators/base/wasp-generator.base.ts
200
196
  import {
201
197
  GeneratorBase,
202
- logger as singletonLogger2,
203
198
  SwarmConfigManager,
204
199
  TemplateResolver
205
200
  } from "@ingenyus/swarm";
@@ -642,14 +637,6 @@ var WaspConfigGenerator = class {
642
637
 
643
638
  // src/generators/base/wasp-generator.base.ts
644
639
  var WaspGeneratorBase = class extends GeneratorBase {
645
- constructor(fileSystem = realFileSystem, logger = singletonLogger2) {
646
- super(fileSystem, logger);
647
- this.fileSystem = fileSystem;
648
- this.logger = logger;
649
- this.configGenerator = new WaspConfigGenerator(logger, fileSystem);
650
- this.templateUtility = new TemplateUtility(fileSystem);
651
- this.templateResolver = new TemplateResolver(fileSystem);
652
- }
653
640
  configGenerator;
654
641
  templateUtility;
655
642
  templateResolver;
@@ -657,6 +644,15 @@ var WaspGeneratorBase = class extends GeneratorBase {
657
644
  configLoaded = false;
658
645
  // Plugin name from swarm.config.json
659
646
  pluginName = PLUGIN_NAME;
647
+ constructor() {
648
+ super();
649
+ this.configGenerator = new WaspConfigGenerator(
650
+ this.logger,
651
+ this.fileSystem
652
+ );
653
+ this.templateUtility = new TemplateUtility(this.fileSystem);
654
+ this.templateResolver = new TemplateResolver(this.fileSystem);
655
+ }
660
656
  async loadSwarmConfig() {
661
657
  if (this.configLoaded) return;
662
658
  const configManager = new SwarmConfigManager();
@@ -707,7 +703,7 @@ var WaspGeneratorBase = class extends GeneratorBase {
707
703
  }
708
704
  /**
709
705
  * Generic existence check with force flag handling
710
- * Consolidates the pattern used in both file and config checks
706
+ * Consolidates the pattern used in both file and config existence checks
711
707
  */
712
708
  checkExistence(exists, itemDescription, force, errorMessage) {
713
709
  if (exists && !force) {
@@ -747,16 +743,14 @@ var schema = z2.object({
747
743
 
748
744
  // src/generators/feature/feature-generator.ts
749
745
  var FeatureGenerator = class extends WaspGeneratorBase {
750
- constructor(logger = singletonLogger3, fileSystem = realFileSystem) {
751
- super(fileSystem, logger);
752
- this.logger = logger;
753
- this.fileSystem = fileSystem;
754
- this.name = "feature";
755
- this.description = "Generates a feature directory containing a Wasp configuration file";
756
- }
757
746
  name;
758
747
  description;
759
748
  schema = schema;
749
+ constructor() {
750
+ super();
751
+ this.name = "feature";
752
+ this.description = "Generates a feature directory containing a Wasp configuration file";
753
+ }
760
754
  getDefaultTemplatePath(templateName) {
761
755
  return this.templateUtility.resolveTemplatePath(
762
756
  templateName,
@@ -792,13 +786,6 @@ var FeatureGenerator = class extends WaspGeneratorBase {
792
786
 
793
787
  // src/generators/base/component-generator.base.ts
794
788
  var ComponentGeneratorBase = class extends WaspGeneratorBase {
795
- constructor(logger = singletonLogger4, fileSystem = realFileSystem, featureDirectoryGenerator = new FeatureGenerator(logger, fileSystem)) {
796
- super(fileSystem, logger);
797
- this.logger = logger;
798
- this.fileSystem = fileSystem;
799
- this.featureDirectoryGenerator = featureDirectoryGenerator;
800
- this.featureDirectoryGenerator = featureDirectoryGenerator;
801
- }
802
789
  getDefaultTemplatePath(templateName) {
803
790
  return this.templateUtility.resolveTemplatePath(
804
791
  templateName,
@@ -806,6 +793,17 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
806
793
  import.meta.url
807
794
  );
808
795
  }
796
+ featureDirectoryGenerator;
797
+ constructor() {
798
+ super();
799
+ const runtime = GeneratorRuntime.current();
800
+ if (runtime.featureGeneratorFactory) {
801
+ const factoryResult = runtime.featureGeneratorFactory(runtime);
802
+ this.featureDirectoryGenerator = factoryResult;
803
+ } else {
804
+ this.featureDirectoryGenerator = new FeatureGenerator();
805
+ }
806
+ }
809
807
  get name() {
810
808
  return toKebabCase2(this.componentType);
811
809
  }
@@ -882,15 +880,14 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
882
880
  }
883
881
  /**
884
882
  * Gets the appropriate directory for a feature based on its path.
885
- * @param fileSystem - The filesystem abstraction
886
883
  * @param featurePath - The full feature path
887
884
  * @param type - The type of file being generated
888
885
  * @returns The target directory and import path
889
886
  */
890
- getFeatureTargetDir(fileSystem, featurePath, type) {
887
+ getFeatureTargetDir(featurePath, type) {
891
888
  validateFeaturePath3(featurePath);
892
889
  const normalisedPath = normaliseFeaturePath(featurePath);
893
- const featureDir = getFeatureDir(fileSystem, normalisedPath);
890
+ const featureDir = getFeatureDir(this.fileSystem, normalisedPath);
894
891
  const typeKey = type.toLowerCase();
895
892
  const typeDirectory = TYPE_DIRECTORIES[typeKey];
896
893
  const targetDirectory = path6.join(featureDir, typeDirectory);
@@ -902,7 +899,6 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
902
899
  */
903
900
  ensureTargetDirectory(featurePath, type) {
904
901
  const { targetDirectory, importDirectory } = this.getFeatureTargetDir(
905
- this.fileSystem,
906
902
  featurePath,
907
903
  type
908
904
  );
@@ -1,7 +1,7 @@
1
1
  // src/generators/base/component-generator.base.ts
2
2
  import {
3
+ GeneratorRuntime,
3
4
  hasHelperMethodCall,
4
- logger as singletonLogger4,
5
5
  toCamelCase,
6
6
  toKebabCase as toKebabCase2,
7
7
  validateFeaturePath as validateFeaturePath3
@@ -338,17 +338,12 @@ var TemplateUtility = class {
338
338
  };
339
339
 
340
340
  // src/generators/feature/feature-generator.ts
341
- import {
342
- handleFatalError as handleFatalError2,
343
- logger as singletonLogger3,
344
- validateFeaturePath as validateFeaturePath2
345
- } from "@ingenyus/swarm";
341
+ import { handleFatalError as handleFatalError2, validateFeaturePath as validateFeaturePath2 } from "@ingenyus/swarm";
346
342
  import path5 from "path";
347
343
 
348
344
  // src/generators/base/wasp-generator.base.ts
349
345
  import {
350
346
  GeneratorBase,
351
- logger as singletonLogger2,
352
347
  SwarmConfigManager,
353
348
  TemplateResolver
354
349
  } from "@ingenyus/swarm";
@@ -791,14 +786,6 @@ var WaspConfigGenerator = class {
791
786
 
792
787
  // src/generators/base/wasp-generator.base.ts
793
788
  var WaspGeneratorBase = class extends GeneratorBase {
794
- constructor(fileSystem = realFileSystem, logger = singletonLogger2) {
795
- super(fileSystem, logger);
796
- this.fileSystem = fileSystem;
797
- this.logger = logger;
798
- this.configGenerator = new WaspConfigGenerator(logger, fileSystem);
799
- this.templateUtility = new TemplateUtility(fileSystem);
800
- this.templateResolver = new TemplateResolver(fileSystem);
801
- }
802
789
  configGenerator;
803
790
  templateUtility;
804
791
  templateResolver;
@@ -806,6 +793,15 @@ var WaspGeneratorBase = class extends GeneratorBase {
806
793
  configLoaded = false;
807
794
  // Plugin name from swarm.config.json
808
795
  pluginName = PLUGIN_NAME;
796
+ constructor() {
797
+ super();
798
+ this.configGenerator = new WaspConfigGenerator(
799
+ this.logger,
800
+ this.fileSystem
801
+ );
802
+ this.templateUtility = new TemplateUtility(this.fileSystem);
803
+ this.templateResolver = new TemplateResolver(this.fileSystem);
804
+ }
809
805
  async loadSwarmConfig() {
810
806
  if (this.configLoaded) return;
811
807
  const configManager = new SwarmConfigManager();
@@ -856,7 +852,7 @@ var WaspGeneratorBase = class extends GeneratorBase {
856
852
  }
857
853
  /**
858
854
  * Generic existence check with force flag handling
859
- * Consolidates the pattern used in both file and config checks
855
+ * Consolidates the pattern used in both file and config existence checks
860
856
  */
861
857
  checkExistence(exists, itemDescription, force, errorMessage) {
862
858
  if (exists && !force) {
@@ -896,16 +892,14 @@ var schema = z2.object({
896
892
 
897
893
  // src/generators/feature/feature-generator.ts
898
894
  var FeatureGenerator = class extends WaspGeneratorBase {
899
- constructor(logger = singletonLogger3, fileSystem = realFileSystem) {
900
- super(fileSystem, logger);
901
- this.logger = logger;
902
- this.fileSystem = fileSystem;
903
- this.name = "feature";
904
- this.description = "Generates a feature directory containing a Wasp configuration file";
905
- }
906
895
  name;
907
896
  description;
908
897
  schema = schema;
898
+ constructor() {
899
+ super();
900
+ this.name = "feature";
901
+ this.description = "Generates a feature directory containing a Wasp configuration file";
902
+ }
909
903
  getDefaultTemplatePath(templateName) {
910
904
  return this.templateUtility.resolveTemplatePath(
911
905
  templateName,
@@ -941,13 +935,6 @@ var FeatureGenerator = class extends WaspGeneratorBase {
941
935
 
942
936
  // src/generators/base/component-generator.base.ts
943
937
  var ComponentGeneratorBase = class extends WaspGeneratorBase {
944
- constructor(logger = singletonLogger4, fileSystem = realFileSystem, featureDirectoryGenerator = new FeatureGenerator(logger, fileSystem)) {
945
- super(fileSystem, logger);
946
- this.logger = logger;
947
- this.fileSystem = fileSystem;
948
- this.featureDirectoryGenerator = featureDirectoryGenerator;
949
- this.featureDirectoryGenerator = featureDirectoryGenerator;
950
- }
951
938
  getDefaultTemplatePath(templateName) {
952
939
  return this.templateUtility.resolveTemplatePath(
953
940
  templateName,
@@ -955,6 +942,17 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
955
942
  import.meta.url
956
943
  );
957
944
  }
945
+ featureDirectoryGenerator;
946
+ constructor() {
947
+ super();
948
+ const runtime = GeneratorRuntime.current();
949
+ if (runtime.featureGeneratorFactory) {
950
+ const factoryResult = runtime.featureGeneratorFactory(runtime);
951
+ this.featureDirectoryGenerator = factoryResult;
952
+ } else {
953
+ this.featureDirectoryGenerator = new FeatureGenerator();
954
+ }
955
+ }
958
956
  get name() {
959
957
  return toKebabCase2(this.componentType);
960
958
  }
@@ -1031,15 +1029,14 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
1031
1029
  }
1032
1030
  /**
1033
1031
  * Gets the appropriate directory for a feature based on its path.
1034
- * @param fileSystem - The filesystem abstraction
1035
1032
  * @param featurePath - The full feature path
1036
1033
  * @param type - The type of file being generated
1037
1034
  * @returns The target directory and import path
1038
1035
  */
1039
- getFeatureTargetDir(fileSystem, featurePath, type) {
1036
+ getFeatureTargetDir(featurePath, type) {
1040
1037
  validateFeaturePath3(featurePath);
1041
1038
  const normalisedPath = normaliseFeaturePath(featurePath);
1042
- const featureDir = getFeatureDir(fileSystem, normalisedPath);
1039
+ const featureDir = getFeatureDir(this.fileSystem, normalisedPath);
1043
1040
  const typeKey = type.toLowerCase();
1044
1041
  const typeDirectory = TYPE_DIRECTORIES[typeKey];
1045
1042
  const targetDirectory = path6.join(featureDir, typeDirectory);
@@ -1051,7 +1048,6 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
1051
1048
  */
1052
1049
  ensureTargetDirectory(featurePath, type) {
1053
1050
  const { targetDirectory, importDirectory } = this.getFeatureTargetDir(
1054
- this.fileSystem,
1055
1051
  featurePath,
1056
1052
  type
1057
1053
  );
@@ -337,8 +337,8 @@ var TemplateUtility = class {
337
337
 
338
338
  // src/generators/base/component-generator.base.ts
339
339
  import {
340
+ GeneratorRuntime,
340
341
  hasHelperMethodCall,
341
- logger as singletonLogger4,
342
342
  toCamelCase,
343
343
  toKebabCase as toKebabCase2,
344
344
  validateFeaturePath as validateFeaturePath3
@@ -346,17 +346,12 @@ import {
346
346
  import path6 from "path";
347
347
 
348
348
  // src/generators/feature/feature-generator.ts
349
- import {
350
- handleFatalError as handleFatalError2,
351
- logger as singletonLogger3,
352
- validateFeaturePath as validateFeaturePath2
353
- } from "@ingenyus/swarm";
349
+ import { handleFatalError as handleFatalError2, validateFeaturePath as validateFeaturePath2 } from "@ingenyus/swarm";
354
350
  import path5 from "path";
355
351
 
356
352
  // src/generators/base/wasp-generator.base.ts
357
353
  import {
358
354
  GeneratorBase,
359
- logger as singletonLogger2,
360
355
  SwarmConfigManager,
361
356
  TemplateResolver
362
357
  } from "@ingenyus/swarm";
@@ -799,14 +794,6 @@ var WaspConfigGenerator = class {
799
794
 
800
795
  // src/generators/base/wasp-generator.base.ts
801
796
  var WaspGeneratorBase = class extends GeneratorBase {
802
- constructor(fileSystem = realFileSystem, logger = singletonLogger2) {
803
- super(fileSystem, logger);
804
- this.fileSystem = fileSystem;
805
- this.logger = logger;
806
- this.configGenerator = new WaspConfigGenerator(logger, fileSystem);
807
- this.templateUtility = new TemplateUtility(fileSystem);
808
- this.templateResolver = new TemplateResolver(fileSystem);
809
- }
810
797
  configGenerator;
811
798
  templateUtility;
812
799
  templateResolver;
@@ -814,6 +801,15 @@ var WaspGeneratorBase = class extends GeneratorBase {
814
801
  configLoaded = false;
815
802
  // Plugin name from swarm.config.json
816
803
  pluginName = PLUGIN_NAME;
804
+ constructor() {
805
+ super();
806
+ this.configGenerator = new WaspConfigGenerator(
807
+ this.logger,
808
+ this.fileSystem
809
+ );
810
+ this.templateUtility = new TemplateUtility(this.fileSystem);
811
+ this.templateResolver = new TemplateResolver(this.fileSystem);
812
+ }
817
813
  async loadSwarmConfig() {
818
814
  if (this.configLoaded) return;
819
815
  const configManager = new SwarmConfigManager();
@@ -864,7 +860,7 @@ var WaspGeneratorBase = class extends GeneratorBase {
864
860
  }
865
861
  /**
866
862
  * Generic existence check with force flag handling
867
- * Consolidates the pattern used in both file and config checks
863
+ * Consolidates the pattern used in both file and config existence checks
868
864
  */
869
865
  checkExistence(exists, itemDescription, force, errorMessage) {
870
866
  if (exists && !force) {
@@ -904,16 +900,14 @@ var schema = z2.object({
904
900
 
905
901
  // src/generators/feature/feature-generator.ts
906
902
  var FeatureGenerator = class extends WaspGeneratorBase {
907
- constructor(logger = singletonLogger3, fileSystem = realFileSystem) {
908
- super(fileSystem, logger);
909
- this.logger = logger;
910
- this.fileSystem = fileSystem;
911
- this.name = "feature";
912
- this.description = "Generates a feature directory containing a Wasp configuration file";
913
- }
914
903
  name;
915
904
  description;
916
905
  schema = schema;
906
+ constructor() {
907
+ super();
908
+ this.name = "feature";
909
+ this.description = "Generates a feature directory containing a Wasp configuration file";
910
+ }
917
911
  getDefaultTemplatePath(templateName) {
918
912
  return this.templateUtility.resolveTemplatePath(
919
913
  templateName,
@@ -949,13 +943,6 @@ var FeatureGenerator = class extends WaspGeneratorBase {
949
943
 
950
944
  // src/generators/base/component-generator.base.ts
951
945
  var ComponentGeneratorBase = class extends WaspGeneratorBase {
952
- constructor(logger = singletonLogger4, fileSystem = realFileSystem, featureDirectoryGenerator = new FeatureGenerator(logger, fileSystem)) {
953
- super(fileSystem, logger);
954
- this.logger = logger;
955
- this.fileSystem = fileSystem;
956
- this.featureDirectoryGenerator = featureDirectoryGenerator;
957
- this.featureDirectoryGenerator = featureDirectoryGenerator;
958
- }
959
946
  getDefaultTemplatePath(templateName) {
960
947
  return this.templateUtility.resolveTemplatePath(
961
948
  templateName,
@@ -963,6 +950,17 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
963
950
  import.meta.url
964
951
  );
965
952
  }
953
+ featureDirectoryGenerator;
954
+ constructor() {
955
+ super();
956
+ const runtime = GeneratorRuntime.current();
957
+ if (runtime.featureGeneratorFactory) {
958
+ const factoryResult = runtime.featureGeneratorFactory(runtime);
959
+ this.featureDirectoryGenerator = factoryResult;
960
+ } else {
961
+ this.featureDirectoryGenerator = new FeatureGenerator();
962
+ }
963
+ }
966
964
  get name() {
967
965
  return toKebabCase2(this.componentType);
968
966
  }
@@ -1039,15 +1037,14 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
1039
1037
  }
1040
1038
  /**
1041
1039
  * Gets the appropriate directory for a feature based on its path.
1042
- * @param fileSystem - The filesystem abstraction
1043
1040
  * @param featurePath - The full feature path
1044
1041
  * @param type - The type of file being generated
1045
1042
  * @returns The target directory and import path
1046
1043
  */
1047
- getFeatureTargetDir(fileSystem, featurePath, type) {
1044
+ getFeatureTargetDir(featurePath, type) {
1048
1045
  validateFeaturePath3(featurePath);
1049
1046
  const normalisedPath = normaliseFeaturePath(featurePath);
1050
- const featureDir = getFeatureDir(fileSystem, normalisedPath);
1047
+ const featureDir = getFeatureDir(this.fileSystem, normalisedPath);
1051
1048
  const typeKey = type.toLowerCase();
1052
1049
  const typeDirectory = TYPE_DIRECTORIES[typeKey];
1053
1050
  const targetDirectory = path6.join(featureDir, typeDirectory);
@@ -1059,7 +1056,6 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
1059
1056
  */
1060
1057
  ensureTargetDirectory(featurePath, type) {
1061
1058
  const { targetDirectory, importDirectory } = this.getFeatureTargetDir(
1062
- this.fileSystem,
1063
1059
  featurePath,
1064
1060
  type
1065
1061
  );
@@ -1,4 +1,4 @@
1
- import { FileSystem, GeneratorBase, Logger, TemplateResolver } from '@ingenyus/swarm';
1
+ import { GeneratorBase, TemplateResolver } from '@ingenyus/swarm';
2
2
  import { ZodType } from 'zod';
3
3
  import { TemplateUtility } from '../../common';
4
4
  import { WaspConfigGenerator } from '../config';
@@ -6,15 +6,13 @@ import { WaspConfigGenerator } from '../config';
6
6
  * Abstract base class for all Wasp generators
7
7
  */
8
8
  export declare abstract class WaspGeneratorBase<S extends ZodType> extends GeneratorBase<S> {
9
- fileSystem: FileSystem;
10
- logger: Logger;
11
9
  protected configGenerator: WaspConfigGenerator;
12
10
  protected templateUtility: TemplateUtility;
13
11
  protected templateResolver: TemplateResolver;
14
12
  private swarmConfig;
15
13
  private configLoaded;
16
14
  protected readonly pluginName: "wasp";
17
- constructor(fileSystem?: FileSystem, logger?: Logger);
15
+ constructor();
18
16
  private loadSwarmConfig;
19
17
  protected getCustomTemplateDir(): Promise<string | undefined>;
20
18
  /**
@@ -33,7 +31,7 @@ export declare abstract class WaspGeneratorBase<S extends ZodType> extends Gener
33
31
  protected renderTemplateToFile(templateName: string, replacements: Record<string, any>, outputPath: string, readableFileType: string, force: boolean): Promise<boolean>;
34
32
  /**
35
33
  * Generic existence check with force flag handling
36
- * Consolidates the pattern used in both file and config checks
34
+ * Consolidates the pattern used in both file and config existence checks
37
35
  */
38
36
  protected checkExistence(exists: boolean, itemDescription: string, force: boolean, errorMessage?: string): boolean;
39
37
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"wasp-generator.base.d.ts","sourceRoot":"","sources":["../../../src/generators/base/wasp-generator.base.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,aAAa,EACb,MAAM,EAKN,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAC9B,OAAO,EAAkB,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD;;GAEG;AACH,8BAAsB,iBAAiB,CACrC,CAAC,SAAS,OAAO,CACjB,SAAQ,aAAa,CAAC,CAAC,CAAC;IAWf,UAAU,EAAE,UAAU;IACtB,MAAM,EAAE,MAAM;IAXvB,SAAS,CAAC,eAAe,EAAE,mBAAmB,CAAC;IAC/C,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAC3C,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC7C,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,YAAY,CAAS;IAG7B,SAAS,CAAC,QAAQ,CAAC,UAAU,SAAe;gBAGnC,UAAU,GAAE,UAA2B,EACvC,MAAM,GAAE,MAAwB;YAQ3B,eAAe;cASb,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAMnE;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAEvE;;OAEG;cACa,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBtE;;OAEG;cACa,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,EACxB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,OAAO,CAAC;IAiBnB;;;OAGG;IACH,SAAS,CAAC,cAAc,CACtB,MAAM,EAAE,OAAO,EACf,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,OAAO,EACd,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO;IAQV;;OAEG;IACH,SAAS,CAAC,eAAe,CACvB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,GACf,OAAO;IAUV;;OAEG;IACH,SAAS,CAAC,SAAS,CACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,OAAO,GAClB,IAAI;CAMR"}
1
+ {"version":3,"file":"wasp-generator.base.d.ts","sourceRoot":"","sources":["../../../src/generators/base/wasp-generator.base.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAGb,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD;;GAEG;AACH,8BAAsB,iBAAiB,CACrC,CAAC,SAAS,OAAO,CACjB,SAAQ,aAAa,CAAC,CAAC,CAAC;IACxB,SAAS,CAAC,eAAe,EAAE,mBAAmB,CAAC;IAC/C,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAC3C,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC7C,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,YAAY,CAAS;IAG7B,SAAS,CAAC,QAAQ,CAAC,UAAU,SAAe;;YAY9B,eAAe;cASb,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAMnE;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAEvE;;OAEG;cACa,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBtE;;OAEG;cACa,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,EACxB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,OAAO,CAAC;IAiBnB;;;OAGG;IACH,SAAS,CAAC,cAAc,CACtB,MAAM,EAAE,OAAO,EACf,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,OAAO,EACd,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO;IAQV;;OAEG;IACH,SAAS,CAAC,eAAe,CACvB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,GACf,OAAO;IAUV;;OAEG;IACH,SAAS,CAAC,SAAS,CACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,OAAO,GAClB,IAAI;CAMR"}