@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
@@ -29,8 +29,8 @@ var CONFIG_TYPES = {
29
29
 
30
30
  // src/generators/base/component-generator.base.ts
31
31
  import {
32
+ GeneratorRuntime,
32
33
  hasHelperMethodCall,
33
- logger as singletonLogger4,
34
34
  toCamelCase,
35
35
  toKebabCase as toKebabCase2,
36
36
  validateFeaturePath as validateFeaturePath3
@@ -199,17 +199,12 @@ var TemplateUtility = class {
199
199
  };
200
200
 
201
201
  // src/generators/feature/feature-generator.ts
202
- import {
203
- handleFatalError as handleFatalError2,
204
- logger as singletonLogger3,
205
- validateFeaturePath as validateFeaturePath2
206
- } from "@ingenyus/swarm";
202
+ import { handleFatalError as handleFatalError2, validateFeaturePath as validateFeaturePath2 } from "@ingenyus/swarm";
207
203
  import path5 from "path";
208
204
 
209
205
  // src/generators/base/wasp-generator.base.ts
210
206
  import {
211
207
  GeneratorBase,
212
- logger as singletonLogger2,
213
208
  SwarmConfigManager,
214
209
  TemplateResolver
215
210
  } from "@ingenyus/swarm";
@@ -652,14 +647,6 @@ var WaspConfigGenerator = class {
652
647
 
653
648
  // src/generators/base/wasp-generator.base.ts
654
649
  var WaspGeneratorBase = class extends GeneratorBase {
655
- constructor(fileSystem = realFileSystem, logger = singletonLogger2) {
656
- super(fileSystem, logger);
657
- this.fileSystem = fileSystem;
658
- this.logger = logger;
659
- this.configGenerator = new WaspConfigGenerator(logger, fileSystem);
660
- this.templateUtility = new TemplateUtility(fileSystem);
661
- this.templateResolver = new TemplateResolver(fileSystem);
662
- }
663
650
  configGenerator;
664
651
  templateUtility;
665
652
  templateResolver;
@@ -667,6 +654,15 @@ var WaspGeneratorBase = class extends GeneratorBase {
667
654
  configLoaded = false;
668
655
  // Plugin name from swarm.config.json
669
656
  pluginName = PLUGIN_NAME;
657
+ constructor() {
658
+ super();
659
+ this.configGenerator = new WaspConfigGenerator(
660
+ this.logger,
661
+ this.fileSystem
662
+ );
663
+ this.templateUtility = new TemplateUtility(this.fileSystem);
664
+ this.templateResolver = new TemplateResolver(this.fileSystem);
665
+ }
670
666
  async loadSwarmConfig() {
671
667
  if (this.configLoaded) return;
672
668
  const configManager = new SwarmConfigManager();
@@ -717,7 +713,7 @@ var WaspGeneratorBase = class extends GeneratorBase {
717
713
  }
718
714
  /**
719
715
  * Generic existence check with force flag handling
720
- * Consolidates the pattern used in both file and config checks
716
+ * Consolidates the pattern used in both file and config existence checks
721
717
  */
722
718
  checkExistence(exists, itemDescription, force, errorMessage) {
723
719
  if (exists && !force) {
@@ -757,16 +753,14 @@ var schema = z2.object({
757
753
 
758
754
  // src/generators/feature/feature-generator.ts
759
755
  var FeatureGenerator = class extends WaspGeneratorBase {
760
- constructor(logger = singletonLogger3, fileSystem = realFileSystem) {
761
- super(fileSystem, logger);
762
- this.logger = logger;
763
- this.fileSystem = fileSystem;
764
- this.name = "feature";
765
- this.description = "Generates a feature directory containing a Wasp configuration file";
766
- }
767
756
  name;
768
757
  description;
769
758
  schema = schema;
759
+ constructor() {
760
+ super();
761
+ this.name = "feature";
762
+ this.description = "Generates a feature directory containing a Wasp configuration file";
763
+ }
770
764
  getDefaultTemplatePath(templateName) {
771
765
  return this.templateUtility.resolveTemplatePath(
772
766
  templateName,
@@ -802,13 +796,6 @@ var FeatureGenerator = class extends WaspGeneratorBase {
802
796
 
803
797
  // src/generators/base/component-generator.base.ts
804
798
  var ComponentGeneratorBase = class extends WaspGeneratorBase {
805
- constructor(logger = singletonLogger4, fileSystem = realFileSystem, featureDirectoryGenerator = new FeatureGenerator(logger, fileSystem)) {
806
- super(fileSystem, logger);
807
- this.logger = logger;
808
- this.fileSystem = fileSystem;
809
- this.featureDirectoryGenerator = featureDirectoryGenerator;
810
- this.featureDirectoryGenerator = featureDirectoryGenerator;
811
- }
812
799
  getDefaultTemplatePath(templateName) {
813
800
  return this.templateUtility.resolveTemplatePath(
814
801
  templateName,
@@ -816,6 +803,17 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
816
803
  import.meta.url
817
804
  );
818
805
  }
806
+ featureDirectoryGenerator;
807
+ constructor() {
808
+ super();
809
+ const runtime = GeneratorRuntime.current();
810
+ if (runtime.featureGeneratorFactory) {
811
+ const factoryResult = runtime.featureGeneratorFactory(runtime);
812
+ this.featureDirectoryGenerator = factoryResult;
813
+ } else {
814
+ this.featureDirectoryGenerator = new FeatureGenerator();
815
+ }
816
+ }
819
817
  get name() {
820
818
  return toKebabCase2(this.componentType);
821
819
  }
@@ -892,15 +890,14 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
892
890
  }
893
891
  /**
894
892
  * Gets the appropriate directory for a feature based on its path.
895
- * @param fileSystem - The filesystem abstraction
896
893
  * @param featurePath - The full feature path
897
894
  * @param type - The type of file being generated
898
895
  * @returns The target directory and import path
899
896
  */
900
- getFeatureTargetDir(fileSystem, featurePath, type) {
897
+ getFeatureTargetDir(featurePath, type) {
901
898
  validateFeaturePath3(featurePath);
902
899
  const normalisedPath = normaliseFeaturePath(featurePath);
903
- const featureDir = getFeatureDir(fileSystem, normalisedPath);
900
+ const featureDir = getFeatureDir(this.fileSystem, normalisedPath);
904
901
  const typeKey = type.toLowerCase();
905
902
  const typeDirectory = TYPE_DIRECTORIES[typeKey];
906
903
  const targetDirectory = path6.join(featureDir, typeDirectory);
@@ -912,7 +909,6 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
912
909
  */
913
910
  ensureTargetDirectory(featurePath, type) {
914
911
  const { targetDirectory, importDirectory } = this.getFeatureTargetDir(
915
- this.fileSystem,
916
912
  featurePath,
917
913
  type
918
914
  );
@@ -29,8 +29,8 @@ var CONFIG_TYPES = {
29
29
 
30
30
  // src/generators/base/component-generator.base.ts
31
31
  import {
32
+ GeneratorRuntime,
32
33
  hasHelperMethodCall,
33
- logger as singletonLogger4,
34
34
  toCamelCase,
35
35
  toKebabCase as toKebabCase2,
36
36
  validateFeaturePath as validateFeaturePath3
@@ -199,17 +199,12 @@ var TemplateUtility = class {
199
199
  };
200
200
 
201
201
  // src/generators/feature/feature-generator.ts
202
- import {
203
- handleFatalError as handleFatalError2,
204
- logger as singletonLogger3,
205
- validateFeaturePath as validateFeaturePath2
206
- } from "@ingenyus/swarm";
202
+ import { handleFatalError as handleFatalError2, validateFeaturePath as validateFeaturePath2 } from "@ingenyus/swarm";
207
203
  import path5 from "path";
208
204
 
209
205
  // src/generators/base/wasp-generator.base.ts
210
206
  import {
211
207
  GeneratorBase,
212
- logger as singletonLogger2,
213
208
  SwarmConfigManager,
214
209
  TemplateResolver
215
210
  } from "@ingenyus/swarm";
@@ -652,14 +647,6 @@ var WaspConfigGenerator = class {
652
647
 
653
648
  // src/generators/base/wasp-generator.base.ts
654
649
  var WaspGeneratorBase = class extends GeneratorBase {
655
- constructor(fileSystem = realFileSystem, logger = singletonLogger2) {
656
- super(fileSystem, logger);
657
- this.fileSystem = fileSystem;
658
- this.logger = logger;
659
- this.configGenerator = new WaspConfigGenerator(logger, fileSystem);
660
- this.templateUtility = new TemplateUtility(fileSystem);
661
- this.templateResolver = new TemplateResolver(fileSystem);
662
- }
663
650
  configGenerator;
664
651
  templateUtility;
665
652
  templateResolver;
@@ -667,6 +654,15 @@ var WaspGeneratorBase = class extends GeneratorBase {
667
654
  configLoaded = false;
668
655
  // Plugin name from swarm.config.json
669
656
  pluginName = PLUGIN_NAME;
657
+ constructor() {
658
+ super();
659
+ this.configGenerator = new WaspConfigGenerator(
660
+ this.logger,
661
+ this.fileSystem
662
+ );
663
+ this.templateUtility = new TemplateUtility(this.fileSystem);
664
+ this.templateResolver = new TemplateResolver(this.fileSystem);
665
+ }
670
666
  async loadSwarmConfig() {
671
667
  if (this.configLoaded) return;
672
668
  const configManager = new SwarmConfigManager();
@@ -717,7 +713,7 @@ var WaspGeneratorBase = class extends GeneratorBase {
717
713
  }
718
714
  /**
719
715
  * Generic existence check with force flag handling
720
- * Consolidates the pattern used in both file and config checks
716
+ * Consolidates the pattern used in both file and config existence checks
721
717
  */
722
718
  checkExistence(exists, itemDescription, force, errorMessage) {
723
719
  if (exists && !force) {
@@ -757,16 +753,14 @@ var schema = z2.object({
757
753
 
758
754
  // src/generators/feature/feature-generator.ts
759
755
  var FeatureGenerator = class extends WaspGeneratorBase {
760
- constructor(logger = singletonLogger3, fileSystem = realFileSystem) {
761
- super(fileSystem, logger);
762
- this.logger = logger;
763
- this.fileSystem = fileSystem;
764
- this.name = "feature";
765
- this.description = "Generates a feature directory containing a Wasp configuration file";
766
- }
767
756
  name;
768
757
  description;
769
758
  schema = schema;
759
+ constructor() {
760
+ super();
761
+ this.name = "feature";
762
+ this.description = "Generates a feature directory containing a Wasp configuration file";
763
+ }
770
764
  getDefaultTemplatePath(templateName) {
771
765
  return this.templateUtility.resolveTemplatePath(
772
766
  templateName,
@@ -802,13 +796,6 @@ var FeatureGenerator = class extends WaspGeneratorBase {
802
796
 
803
797
  // src/generators/base/component-generator.base.ts
804
798
  var ComponentGeneratorBase = class extends WaspGeneratorBase {
805
- constructor(logger = singletonLogger4, fileSystem = realFileSystem, featureDirectoryGenerator = new FeatureGenerator(logger, fileSystem)) {
806
- super(fileSystem, logger);
807
- this.logger = logger;
808
- this.fileSystem = fileSystem;
809
- this.featureDirectoryGenerator = featureDirectoryGenerator;
810
- this.featureDirectoryGenerator = featureDirectoryGenerator;
811
- }
812
799
  getDefaultTemplatePath(templateName) {
813
800
  return this.templateUtility.resolveTemplatePath(
814
801
  templateName,
@@ -816,6 +803,17 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
816
803
  import.meta.url
817
804
  );
818
805
  }
806
+ featureDirectoryGenerator;
807
+ constructor() {
808
+ super();
809
+ const runtime = GeneratorRuntime.current();
810
+ if (runtime.featureGeneratorFactory) {
811
+ const factoryResult = runtime.featureGeneratorFactory(runtime);
812
+ this.featureDirectoryGenerator = factoryResult;
813
+ } else {
814
+ this.featureDirectoryGenerator = new FeatureGenerator();
815
+ }
816
+ }
819
817
  get name() {
820
818
  return toKebabCase2(this.componentType);
821
819
  }
@@ -892,15 +890,14 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
892
890
  }
893
891
  /**
894
892
  * Gets the appropriate directory for a feature based on its path.
895
- * @param fileSystem - The filesystem abstraction
896
893
  * @param featurePath - The full feature path
897
894
  * @param type - The type of file being generated
898
895
  * @returns The target directory and import path
899
896
  */
900
- getFeatureTargetDir(fileSystem, featurePath, type) {
897
+ getFeatureTargetDir(featurePath, type) {
901
898
  validateFeaturePath3(featurePath);
902
899
  const normalisedPath = normaliseFeaturePath(featurePath);
903
- const featureDir = getFeatureDir(fileSystem, normalisedPath);
900
+ const featureDir = getFeatureDir(this.fileSystem, normalisedPath);
904
901
  const typeKey = type.toLowerCase();
905
902
  const typeDirectory = TYPE_DIRECTORIES[typeKey];
906
903
  const targetDirectory = path6.join(featureDir, typeDirectory);
@@ -912,7 +909,6 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
912
909
  */
913
910
  ensureTargetDirectory(featurePath, type) {
914
911
  const { targetDirectory, importDirectory } = this.getFeatureTargetDir(
915
- this.fileSystem,
916
912
  featurePath,
917
913
  type
918
914
  );
@@ -40,8 +40,8 @@ var CONFIG_TYPES = {
40
40
 
41
41
  // src/generators/base/component-generator.base.ts
42
42
  import {
43
+ GeneratorRuntime,
43
44
  hasHelperMethodCall,
44
- logger as singletonLogger4,
45
45
  toCamelCase,
46
46
  toKebabCase as toKebabCase2,
47
47
  validateFeaturePath as validateFeaturePath3
@@ -350,17 +350,12 @@ var TemplateUtility = class {
350
350
  };
351
351
 
352
352
  // src/generators/feature/feature-generator.ts
353
- import {
354
- handleFatalError as handleFatalError2,
355
- logger as singletonLogger3,
356
- validateFeaturePath as validateFeaturePath2
357
- } from "@ingenyus/swarm";
353
+ import { handleFatalError as handleFatalError2, validateFeaturePath as validateFeaturePath2 } from "@ingenyus/swarm";
358
354
  import path5 from "path";
359
355
 
360
356
  // src/generators/base/wasp-generator.base.ts
361
357
  import {
362
358
  GeneratorBase,
363
- logger as singletonLogger2,
364
359
  SwarmConfigManager,
365
360
  TemplateResolver
366
361
  } from "@ingenyus/swarm";
@@ -803,14 +798,6 @@ var WaspConfigGenerator = class {
803
798
 
804
799
  // src/generators/base/wasp-generator.base.ts
805
800
  var WaspGeneratorBase = class extends GeneratorBase {
806
- constructor(fileSystem = realFileSystem, logger = singletonLogger2) {
807
- super(fileSystem, logger);
808
- this.fileSystem = fileSystem;
809
- this.logger = logger;
810
- this.configGenerator = new WaspConfigGenerator(logger, fileSystem);
811
- this.templateUtility = new TemplateUtility(fileSystem);
812
- this.templateResolver = new TemplateResolver(fileSystem);
813
- }
814
801
  configGenerator;
815
802
  templateUtility;
816
803
  templateResolver;
@@ -818,6 +805,15 @@ var WaspGeneratorBase = class extends GeneratorBase {
818
805
  configLoaded = false;
819
806
  // Plugin name from swarm.config.json
820
807
  pluginName = PLUGIN_NAME;
808
+ constructor() {
809
+ super();
810
+ this.configGenerator = new WaspConfigGenerator(
811
+ this.logger,
812
+ this.fileSystem
813
+ );
814
+ this.templateUtility = new TemplateUtility(this.fileSystem);
815
+ this.templateResolver = new TemplateResolver(this.fileSystem);
816
+ }
821
817
  async loadSwarmConfig() {
822
818
  if (this.configLoaded) return;
823
819
  const configManager = new SwarmConfigManager();
@@ -868,7 +864,7 @@ var WaspGeneratorBase = class extends GeneratorBase {
868
864
  }
869
865
  /**
870
866
  * Generic existence check with force flag handling
871
- * Consolidates the pattern used in both file and config checks
867
+ * Consolidates the pattern used in both file and config existence checks
872
868
  */
873
869
  checkExistence(exists, itemDescription, force, errorMessage) {
874
870
  if (exists && !force) {
@@ -908,16 +904,14 @@ var schema = z2.object({
908
904
 
909
905
  // src/generators/feature/feature-generator.ts
910
906
  var FeatureGenerator = class extends WaspGeneratorBase {
911
- constructor(logger = singletonLogger3, fileSystem = realFileSystem) {
912
- super(fileSystem, logger);
913
- this.logger = logger;
914
- this.fileSystem = fileSystem;
915
- this.name = "feature";
916
- this.description = "Generates a feature directory containing a Wasp configuration file";
917
- }
918
907
  name;
919
908
  description;
920
909
  schema = schema;
910
+ constructor() {
911
+ super();
912
+ this.name = "feature";
913
+ this.description = "Generates a feature directory containing a Wasp configuration file";
914
+ }
921
915
  getDefaultTemplatePath(templateName) {
922
916
  return this.templateUtility.resolveTemplatePath(
923
917
  templateName,
@@ -953,13 +947,6 @@ var FeatureGenerator = class extends WaspGeneratorBase {
953
947
 
954
948
  // src/generators/base/component-generator.base.ts
955
949
  var ComponentGeneratorBase = class extends WaspGeneratorBase {
956
- constructor(logger = singletonLogger4, fileSystem = realFileSystem, featureDirectoryGenerator = new FeatureGenerator(logger, fileSystem)) {
957
- super(fileSystem, logger);
958
- this.logger = logger;
959
- this.fileSystem = fileSystem;
960
- this.featureDirectoryGenerator = featureDirectoryGenerator;
961
- this.featureDirectoryGenerator = featureDirectoryGenerator;
962
- }
963
950
  getDefaultTemplatePath(templateName) {
964
951
  return this.templateUtility.resolveTemplatePath(
965
952
  templateName,
@@ -967,6 +954,17 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
967
954
  import.meta.url
968
955
  );
969
956
  }
957
+ featureDirectoryGenerator;
958
+ constructor() {
959
+ super();
960
+ const runtime = GeneratorRuntime.current();
961
+ if (runtime.featureGeneratorFactory) {
962
+ const factoryResult = runtime.featureGeneratorFactory(runtime);
963
+ this.featureDirectoryGenerator = factoryResult;
964
+ } else {
965
+ this.featureDirectoryGenerator = new FeatureGenerator();
966
+ }
967
+ }
970
968
  get name() {
971
969
  return toKebabCase2(this.componentType);
972
970
  }
@@ -1043,15 +1041,14 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
1043
1041
  }
1044
1042
  /**
1045
1043
  * Gets the appropriate directory for a feature based on its path.
1046
- * @param fileSystem - The filesystem abstraction
1047
1044
  * @param featurePath - The full feature path
1048
1045
  * @param type - The type of file being generated
1049
1046
  * @returns The target directory and import path
1050
1047
  */
1051
- getFeatureTargetDir(fileSystem, featurePath, type) {
1048
+ getFeatureTargetDir(featurePath, type) {
1052
1049
  validateFeaturePath3(featurePath);
1053
1050
  const normalisedPath = normaliseFeaturePath(featurePath);
1054
- const featureDir = getFeatureDir(fileSystem, normalisedPath);
1051
+ const featureDir = getFeatureDir(this.fileSystem, normalisedPath);
1055
1052
  const typeKey = type.toLowerCase();
1056
1053
  const typeDirectory = TYPE_DIRECTORIES[typeKey];
1057
1054
  const targetDirectory = path6.join(featureDir, typeDirectory);
@@ -1063,7 +1060,6 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
1063
1060
  */
1064
1061
  ensureTargetDirectory(featurePath, type) {
1065
1062
  const { targetDirectory, importDirectory } = this.getFeatureTargetDir(
1066
- this.fileSystem,
1067
1063
  featurePath,
1068
1064
  type
1069
1065
  );
@@ -40,8 +40,8 @@ var CONFIG_TYPES = {
40
40
 
41
41
  // src/generators/base/component-generator.base.ts
42
42
  import {
43
+ GeneratorRuntime,
43
44
  hasHelperMethodCall,
44
- logger as singletonLogger4,
45
45
  toCamelCase,
46
46
  toKebabCase as toKebabCase2,
47
47
  validateFeaturePath as validateFeaturePath3
@@ -350,17 +350,12 @@ var TemplateUtility = class {
350
350
  };
351
351
 
352
352
  // src/generators/feature/feature-generator.ts
353
- import {
354
- handleFatalError as handleFatalError2,
355
- logger as singletonLogger3,
356
- validateFeaturePath as validateFeaturePath2
357
- } from "@ingenyus/swarm";
353
+ import { handleFatalError as handleFatalError2, validateFeaturePath as validateFeaturePath2 } from "@ingenyus/swarm";
358
354
  import path5 from "path";
359
355
 
360
356
  // src/generators/base/wasp-generator.base.ts
361
357
  import {
362
358
  GeneratorBase,
363
- logger as singletonLogger2,
364
359
  SwarmConfigManager,
365
360
  TemplateResolver
366
361
  } from "@ingenyus/swarm";
@@ -803,14 +798,6 @@ var WaspConfigGenerator = class {
803
798
 
804
799
  // src/generators/base/wasp-generator.base.ts
805
800
  var WaspGeneratorBase = class extends GeneratorBase {
806
- constructor(fileSystem = realFileSystem, logger = singletonLogger2) {
807
- super(fileSystem, logger);
808
- this.fileSystem = fileSystem;
809
- this.logger = logger;
810
- this.configGenerator = new WaspConfigGenerator(logger, fileSystem);
811
- this.templateUtility = new TemplateUtility(fileSystem);
812
- this.templateResolver = new TemplateResolver(fileSystem);
813
- }
814
801
  configGenerator;
815
802
  templateUtility;
816
803
  templateResolver;
@@ -818,6 +805,15 @@ var WaspGeneratorBase = class extends GeneratorBase {
818
805
  configLoaded = false;
819
806
  // Plugin name from swarm.config.json
820
807
  pluginName = PLUGIN_NAME;
808
+ constructor() {
809
+ super();
810
+ this.configGenerator = new WaspConfigGenerator(
811
+ this.logger,
812
+ this.fileSystem
813
+ );
814
+ this.templateUtility = new TemplateUtility(this.fileSystem);
815
+ this.templateResolver = new TemplateResolver(this.fileSystem);
816
+ }
821
817
  async loadSwarmConfig() {
822
818
  if (this.configLoaded) return;
823
819
  const configManager = new SwarmConfigManager();
@@ -868,7 +864,7 @@ var WaspGeneratorBase = class extends GeneratorBase {
868
864
  }
869
865
  /**
870
866
  * Generic existence check with force flag handling
871
- * Consolidates the pattern used in both file and config checks
867
+ * Consolidates the pattern used in both file and config existence checks
872
868
  */
873
869
  checkExistence(exists, itemDescription, force, errorMessage) {
874
870
  if (exists && !force) {
@@ -908,16 +904,14 @@ var schema = z2.object({
908
904
 
909
905
  // src/generators/feature/feature-generator.ts
910
906
  var FeatureGenerator = class extends WaspGeneratorBase {
911
- constructor(logger = singletonLogger3, fileSystem = realFileSystem) {
912
- super(fileSystem, logger);
913
- this.logger = logger;
914
- this.fileSystem = fileSystem;
915
- this.name = "feature";
916
- this.description = "Generates a feature directory containing a Wasp configuration file";
917
- }
918
907
  name;
919
908
  description;
920
909
  schema = schema;
910
+ constructor() {
911
+ super();
912
+ this.name = "feature";
913
+ this.description = "Generates a feature directory containing a Wasp configuration file";
914
+ }
921
915
  getDefaultTemplatePath(templateName) {
922
916
  return this.templateUtility.resolveTemplatePath(
923
917
  templateName,
@@ -953,13 +947,6 @@ var FeatureGenerator = class extends WaspGeneratorBase {
953
947
 
954
948
  // src/generators/base/component-generator.base.ts
955
949
  var ComponentGeneratorBase = class extends WaspGeneratorBase {
956
- constructor(logger = singletonLogger4, fileSystem = realFileSystem, featureDirectoryGenerator = new FeatureGenerator(logger, fileSystem)) {
957
- super(fileSystem, logger);
958
- this.logger = logger;
959
- this.fileSystem = fileSystem;
960
- this.featureDirectoryGenerator = featureDirectoryGenerator;
961
- this.featureDirectoryGenerator = featureDirectoryGenerator;
962
- }
963
950
  getDefaultTemplatePath(templateName) {
964
951
  return this.templateUtility.resolveTemplatePath(
965
952
  templateName,
@@ -967,6 +954,17 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
967
954
  import.meta.url
968
955
  );
969
956
  }
957
+ featureDirectoryGenerator;
958
+ constructor() {
959
+ super();
960
+ const runtime = GeneratorRuntime.current();
961
+ if (runtime.featureGeneratorFactory) {
962
+ const factoryResult = runtime.featureGeneratorFactory(runtime);
963
+ this.featureDirectoryGenerator = factoryResult;
964
+ } else {
965
+ this.featureDirectoryGenerator = new FeatureGenerator();
966
+ }
967
+ }
970
968
  get name() {
971
969
  return toKebabCase2(this.componentType);
972
970
  }
@@ -1043,15 +1041,14 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
1043
1041
  }
1044
1042
  /**
1045
1043
  * Gets the appropriate directory for a feature based on its path.
1046
- * @param fileSystem - The filesystem abstraction
1047
1044
  * @param featurePath - The full feature path
1048
1045
  * @param type - The type of file being generated
1049
1046
  * @returns The target directory and import path
1050
1047
  */
1051
- getFeatureTargetDir(fileSystem, featurePath, type) {
1048
+ getFeatureTargetDir(featurePath, type) {
1052
1049
  validateFeaturePath3(featurePath);
1053
1050
  const normalisedPath = normaliseFeaturePath(featurePath);
1054
- const featureDir = getFeatureDir(fileSystem, normalisedPath);
1051
+ const featureDir = getFeatureDir(this.fileSystem, normalisedPath);
1055
1052
  const typeKey = type.toLowerCase();
1056
1053
  const typeDirectory = TYPE_DIRECTORIES[typeKey];
1057
1054
  const targetDirectory = path6.join(featureDir, typeDirectory);
@@ -1063,7 +1060,6 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
1063
1060
  */
1064
1061
  ensureTargetDirectory(featurePath, type) {
1065
1062
  const { targetDirectory, importDirectory } = this.getFeatureTargetDir(
1066
- this.fileSystem,
1067
1063
  featurePath,
1068
1064
  type
1069
1065
  );