@ingenyus/swarm-wasp 0.2.1 → 0.2.2

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
@@ -1,7 +1,6 @@
1
1
  // src/generators/base/wasp-generator.base.ts
2
2
  import {
3
3
  GeneratorBase,
4
- logger as singletonLogger2,
5
4
  SwarmConfigManager,
6
5
  TemplateResolver
7
6
  } from "@ingenyus/swarm";
@@ -605,14 +604,6 @@ var WaspConfigGenerator = class {
605
604
 
606
605
  // src/generators/base/wasp-generator.base.ts
607
606
  var WaspGeneratorBase = class extends GeneratorBase {
608
- constructor(fileSystem = realFileSystem, logger = singletonLogger2) {
609
- super(fileSystem, logger);
610
- this.fileSystem = fileSystem;
611
- this.logger = logger;
612
- this.configGenerator = new WaspConfigGenerator(logger, fileSystem);
613
- this.templateUtility = new TemplateUtility(fileSystem);
614
- this.templateResolver = new TemplateResolver(fileSystem);
615
- }
616
607
  configGenerator;
617
608
  templateUtility;
618
609
  templateResolver;
@@ -620,6 +611,15 @@ var WaspGeneratorBase = class extends GeneratorBase {
620
611
  configLoaded = false;
621
612
  // Plugin name from swarm.config.json
622
613
  pluginName = PLUGIN_NAME;
614
+ constructor() {
615
+ super();
616
+ this.configGenerator = new WaspConfigGenerator(
617
+ this.logger,
618
+ this.fileSystem
619
+ );
620
+ this.templateUtility = new TemplateUtility(this.fileSystem);
621
+ this.templateResolver = new TemplateResolver(this.fileSystem);
622
+ }
623
623
  async loadSwarmConfig() {
624
624
  if (this.configLoaded) return;
625
625
  const configManager = new SwarmConfigManager();
@@ -670,7 +670,7 @@ var WaspGeneratorBase = class extends GeneratorBase {
670
670
  }
671
671
  /**
672
672
  * Generic existence check with force flag handling
673
- * Consolidates the pattern used in both file and config checks
673
+ * Consolidates the pattern used in both file and config existence checks
674
674
  */
675
675
  checkExistence(exists, itemDescription, force, errorMessage) {
676
676
  if (exists && !force) {
@@ -348,8 +348,8 @@ var TemplateUtility = class {
348
348
 
349
349
  // src/generators/base/component-generator.base.ts
350
350
  import {
351
+ GeneratorRuntime,
351
352
  hasHelperMethodCall,
352
- logger as singletonLogger4,
353
353
  toCamelCase,
354
354
  toKebabCase as toKebabCase2,
355
355
  validateFeaturePath as validateFeaturePath3
@@ -357,17 +357,12 @@ import {
357
357
  import path6 from "path";
358
358
 
359
359
  // src/generators/feature/feature-generator.ts
360
- import {
361
- handleFatalError as handleFatalError2,
362
- logger as singletonLogger3,
363
- validateFeaturePath as validateFeaturePath2
364
- } from "@ingenyus/swarm";
360
+ import { handleFatalError as handleFatalError2, validateFeaturePath as validateFeaturePath2 } from "@ingenyus/swarm";
365
361
  import path5 from "path";
366
362
 
367
363
  // src/generators/base/wasp-generator.base.ts
368
364
  import {
369
365
  GeneratorBase,
370
- logger as singletonLogger2,
371
366
  SwarmConfigManager,
372
367
  TemplateResolver
373
368
  } from "@ingenyus/swarm";
@@ -810,14 +805,6 @@ var WaspConfigGenerator = class {
810
805
 
811
806
  // src/generators/base/wasp-generator.base.ts
812
807
  var WaspGeneratorBase = class extends GeneratorBase {
813
- constructor(fileSystem = realFileSystem, logger = singletonLogger2) {
814
- super(fileSystem, logger);
815
- this.fileSystem = fileSystem;
816
- this.logger = logger;
817
- this.configGenerator = new WaspConfigGenerator(logger, fileSystem);
818
- this.templateUtility = new TemplateUtility(fileSystem);
819
- this.templateResolver = new TemplateResolver(fileSystem);
820
- }
821
808
  configGenerator;
822
809
  templateUtility;
823
810
  templateResolver;
@@ -825,6 +812,15 @@ var WaspGeneratorBase = class extends GeneratorBase {
825
812
  configLoaded = false;
826
813
  // Plugin name from swarm.config.json
827
814
  pluginName = PLUGIN_NAME;
815
+ constructor() {
816
+ super();
817
+ this.configGenerator = new WaspConfigGenerator(
818
+ this.logger,
819
+ this.fileSystem
820
+ );
821
+ this.templateUtility = new TemplateUtility(this.fileSystem);
822
+ this.templateResolver = new TemplateResolver(this.fileSystem);
823
+ }
828
824
  async loadSwarmConfig() {
829
825
  if (this.configLoaded) return;
830
826
  const configManager = new SwarmConfigManager();
@@ -875,7 +871,7 @@ var WaspGeneratorBase = class extends GeneratorBase {
875
871
  }
876
872
  /**
877
873
  * Generic existence check with force flag handling
878
- * Consolidates the pattern used in both file and config checks
874
+ * Consolidates the pattern used in both file and config existence checks
879
875
  */
880
876
  checkExistence(exists, itemDescription, force, errorMessage) {
881
877
  if (exists && !force) {
@@ -915,16 +911,14 @@ var schema = z2.object({
915
911
 
916
912
  // src/generators/feature/feature-generator.ts
917
913
  var FeatureGenerator = class extends WaspGeneratorBase {
918
- constructor(logger = singletonLogger3, fileSystem = realFileSystem) {
919
- super(fileSystem, logger);
920
- this.logger = logger;
921
- this.fileSystem = fileSystem;
922
- this.name = "feature";
923
- this.description = "Generates a feature directory containing a Wasp configuration file";
924
- }
925
914
  name;
926
915
  description;
927
916
  schema = schema;
917
+ constructor() {
918
+ super();
919
+ this.name = "feature";
920
+ this.description = "Generates a feature directory containing a Wasp configuration file";
921
+ }
928
922
  getDefaultTemplatePath(templateName) {
929
923
  return this.templateUtility.resolveTemplatePath(
930
924
  templateName,
@@ -960,13 +954,6 @@ var FeatureGenerator = class extends WaspGeneratorBase {
960
954
 
961
955
  // src/generators/base/component-generator.base.ts
962
956
  var ComponentGeneratorBase = class extends WaspGeneratorBase {
963
- constructor(logger = singletonLogger4, fileSystem = realFileSystem, featureDirectoryGenerator = new FeatureGenerator(logger, fileSystem)) {
964
- super(fileSystem, logger);
965
- this.logger = logger;
966
- this.fileSystem = fileSystem;
967
- this.featureDirectoryGenerator = featureDirectoryGenerator;
968
- this.featureDirectoryGenerator = featureDirectoryGenerator;
969
- }
970
957
  getDefaultTemplatePath(templateName) {
971
958
  return this.templateUtility.resolveTemplatePath(
972
959
  templateName,
@@ -974,6 +961,17 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
974
961
  import.meta.url
975
962
  );
976
963
  }
964
+ featureDirectoryGenerator;
965
+ constructor() {
966
+ super();
967
+ const runtime = GeneratorRuntime.current();
968
+ if (runtime.featureGeneratorFactory) {
969
+ const factoryResult = runtime.featureGeneratorFactory(runtime);
970
+ this.featureDirectoryGenerator = factoryResult;
971
+ } else {
972
+ this.featureDirectoryGenerator = new FeatureGenerator();
973
+ }
974
+ }
977
975
  get name() {
978
976
  return toKebabCase2(this.componentType);
979
977
  }
@@ -1050,15 +1048,14 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
1050
1048
  }
1051
1049
  /**
1052
1050
  * Gets the appropriate directory for a feature based on its path.
1053
- * @param fileSystem - The filesystem abstraction
1054
1051
  * @param featurePath - The full feature path
1055
1052
  * @param type - The type of file being generated
1056
1053
  * @returns The target directory and import path
1057
1054
  */
1058
- getFeatureTargetDir(fileSystem, featurePath, type) {
1055
+ getFeatureTargetDir(featurePath, type) {
1059
1056
  validateFeaturePath3(featurePath);
1060
1057
  const normalisedPath = normaliseFeaturePath(featurePath);
1061
- const featureDir = getFeatureDir(fileSystem, normalisedPath);
1058
+ const featureDir = getFeatureDir(this.fileSystem, normalisedPath);
1062
1059
  const typeKey = type.toLowerCase();
1063
1060
  const typeDirectory = TYPE_DIRECTORIES[typeKey];
1064
1061
  const targetDirectory = path6.join(featureDir, typeDirectory);
@@ -1070,7 +1067,6 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
1070
1067
  */
1071
1068
  ensureTargetDirectory(featurePath, type) {
1072
1069
  const { targetDirectory, importDirectory } = this.getFeatureTargetDir(
1073
- this.fileSystem,
1074
1070
  featurePath,
1075
1071
  type
1076
1072
  );
@@ -348,8 +348,8 @@ var TemplateUtility = class {
348
348
 
349
349
  // src/generators/base/component-generator.base.ts
350
350
  import {
351
+ GeneratorRuntime,
351
352
  hasHelperMethodCall,
352
- logger as singletonLogger4,
353
353
  toCamelCase,
354
354
  toKebabCase as toKebabCase2,
355
355
  validateFeaturePath as validateFeaturePath3
@@ -357,17 +357,12 @@ import {
357
357
  import path6 from "path";
358
358
 
359
359
  // src/generators/feature/feature-generator.ts
360
- import {
361
- handleFatalError as handleFatalError2,
362
- logger as singletonLogger3,
363
- validateFeaturePath as validateFeaturePath2
364
- } from "@ingenyus/swarm";
360
+ import { handleFatalError as handleFatalError2, validateFeaturePath as validateFeaturePath2 } from "@ingenyus/swarm";
365
361
  import path5 from "path";
366
362
 
367
363
  // src/generators/base/wasp-generator.base.ts
368
364
  import {
369
365
  GeneratorBase,
370
- logger as singletonLogger2,
371
366
  SwarmConfigManager,
372
367
  TemplateResolver
373
368
  } from "@ingenyus/swarm";
@@ -810,14 +805,6 @@ var WaspConfigGenerator = class {
810
805
 
811
806
  // src/generators/base/wasp-generator.base.ts
812
807
  var WaspGeneratorBase = class extends GeneratorBase {
813
- constructor(fileSystem = realFileSystem, logger = singletonLogger2) {
814
- super(fileSystem, logger);
815
- this.fileSystem = fileSystem;
816
- this.logger = logger;
817
- this.configGenerator = new WaspConfigGenerator(logger, fileSystem);
818
- this.templateUtility = new TemplateUtility(fileSystem);
819
- this.templateResolver = new TemplateResolver(fileSystem);
820
- }
821
808
  configGenerator;
822
809
  templateUtility;
823
810
  templateResolver;
@@ -825,6 +812,15 @@ var WaspGeneratorBase = class extends GeneratorBase {
825
812
  configLoaded = false;
826
813
  // Plugin name from swarm.config.json
827
814
  pluginName = PLUGIN_NAME;
815
+ constructor() {
816
+ super();
817
+ this.configGenerator = new WaspConfigGenerator(
818
+ this.logger,
819
+ this.fileSystem
820
+ );
821
+ this.templateUtility = new TemplateUtility(this.fileSystem);
822
+ this.templateResolver = new TemplateResolver(this.fileSystem);
823
+ }
828
824
  async loadSwarmConfig() {
829
825
  if (this.configLoaded) return;
830
826
  const configManager = new SwarmConfigManager();
@@ -875,7 +871,7 @@ var WaspGeneratorBase = class extends GeneratorBase {
875
871
  }
876
872
  /**
877
873
  * Generic existence check with force flag handling
878
- * Consolidates the pattern used in both file and config checks
874
+ * Consolidates the pattern used in both file and config existence checks
879
875
  */
880
876
  checkExistence(exists, itemDescription, force, errorMessage) {
881
877
  if (exists && !force) {
@@ -915,16 +911,14 @@ var schema = z2.object({
915
911
 
916
912
  // src/generators/feature/feature-generator.ts
917
913
  var FeatureGenerator = class extends WaspGeneratorBase {
918
- constructor(logger = singletonLogger3, fileSystem = realFileSystem) {
919
- super(fileSystem, logger);
920
- this.logger = logger;
921
- this.fileSystem = fileSystem;
922
- this.name = "feature";
923
- this.description = "Generates a feature directory containing a Wasp configuration file";
924
- }
925
914
  name;
926
915
  description;
927
916
  schema = schema;
917
+ constructor() {
918
+ super();
919
+ this.name = "feature";
920
+ this.description = "Generates a feature directory containing a Wasp configuration file";
921
+ }
928
922
  getDefaultTemplatePath(templateName) {
929
923
  return this.templateUtility.resolveTemplatePath(
930
924
  templateName,
@@ -960,13 +954,6 @@ var FeatureGenerator = class extends WaspGeneratorBase {
960
954
 
961
955
  // src/generators/base/component-generator.base.ts
962
956
  var ComponentGeneratorBase = class extends WaspGeneratorBase {
963
- constructor(logger = singletonLogger4, fileSystem = realFileSystem, featureDirectoryGenerator = new FeatureGenerator(logger, fileSystem)) {
964
- super(fileSystem, logger);
965
- this.logger = logger;
966
- this.fileSystem = fileSystem;
967
- this.featureDirectoryGenerator = featureDirectoryGenerator;
968
- this.featureDirectoryGenerator = featureDirectoryGenerator;
969
- }
970
957
  getDefaultTemplatePath(templateName) {
971
958
  return this.templateUtility.resolveTemplatePath(
972
959
  templateName,
@@ -974,6 +961,17 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
974
961
  import.meta.url
975
962
  );
976
963
  }
964
+ featureDirectoryGenerator;
965
+ constructor() {
966
+ super();
967
+ const runtime = GeneratorRuntime.current();
968
+ if (runtime.featureGeneratorFactory) {
969
+ const factoryResult = runtime.featureGeneratorFactory(runtime);
970
+ this.featureDirectoryGenerator = factoryResult;
971
+ } else {
972
+ this.featureDirectoryGenerator = new FeatureGenerator();
973
+ }
974
+ }
977
975
  get name() {
978
976
  return toKebabCase2(this.componentType);
979
977
  }
@@ -1050,15 +1048,14 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
1050
1048
  }
1051
1049
  /**
1052
1050
  * Gets the appropriate directory for a feature based on its path.
1053
- * @param fileSystem - The filesystem abstraction
1054
1051
  * @param featurePath - The full feature path
1055
1052
  * @param type - The type of file being generated
1056
1053
  * @returns The target directory and import path
1057
1054
  */
1058
- getFeatureTargetDir(fileSystem, featurePath, type) {
1055
+ getFeatureTargetDir(featurePath, type) {
1059
1056
  validateFeaturePath3(featurePath);
1060
1057
  const normalisedPath = normaliseFeaturePath(featurePath);
1061
- const featureDir = getFeatureDir(fileSystem, normalisedPath);
1058
+ const featureDir = getFeatureDir(this.fileSystem, normalisedPath);
1062
1059
  const typeKey = type.toLowerCase();
1063
1060
  const typeDirectory = TYPE_DIRECTORIES[typeKey];
1064
1061
  const targetDirectory = path6.join(featureDir, typeDirectory);
@@ -1070,7 +1067,6 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
1070
1067
  */
1071
1068
  ensureTargetDirectory(featurePath, type) {
1072
1069
  const { targetDirectory, importDirectory } = this.getFeatureTargetDir(
1073
- this.fileSystem,
1074
1070
  featurePath,
1075
1071
  type
1076
1072
  );
@@ -1,15 +1,13 @@
1
- import { FileSystem, Logger, Out } from '@ingenyus/swarm';
1
+ import { Out } from '@ingenyus/swarm';
2
2
  import { WaspGeneratorBase } from '../base/wasp-generator.base';
3
3
  import { schema } from './schema';
4
4
  export declare class FeatureGenerator extends WaspGeneratorBase<typeof schema> {
5
- logger: Logger;
6
- fileSystem: FileSystem;
7
5
  name: string;
8
6
  description: string;
9
7
  schema: import("zod").ZodObject<{
10
8
  target: import("zod").ZodString;
11
9
  }, import("zod/v4/core").$strip>;
12
- constructor(logger?: Logger, fileSystem?: FileSystem);
10
+ constructor();
13
11
  protected getDefaultTemplatePath(templateName: string): string;
14
12
  /**
15
13
  * Generates a feature directory containing a Wasp configuration file
@@ -1 +1 @@
1
- {"version":3,"file":"feature-generator.d.ts","sourceRoot":"","sources":["../../../src/generators/feature/feature-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAEV,MAAM,EACN,GAAG,EAGJ,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,qBAAa,gBAAiB,SAAQ,iBAAiB,CAAC,OAAO,MAAM,CAAC;IAM3D,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,UAAU;IAN/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM;;qCAAU;gBAGP,MAAM,GAAE,MAAwB,EAChC,UAAU,GAAE,UAA2B;IAQhD,SAAS,CAAC,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAQ9D;;;OAGG;IACG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAyBxD"}
1
+ {"version":3,"file":"feature-generator.d.ts","sourceRoot":"","sources":["../../../src/generators/feature/feature-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,GAAG,EAAuB,MAAM,iBAAiB,CAAC;AAG7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,qBAAa,gBAAiB,SAAQ,iBAAiB,CAAC,OAAO,MAAM,CAAC;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM;;qCAAU;;IAShB,SAAS,CAAC,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAQ9D;;;OAGG;IACG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAyBxD"}
@@ -1,9 +1,5 @@
1
1
  // src/generators/feature/feature-generator.ts
2
- import {
3
- handleFatalError as handleFatalError2,
4
- logger as singletonLogger3,
5
- validateFeaturePath as validateFeaturePath2
6
- } from "@ingenyus/swarm";
2
+ import { handleFatalError as handleFatalError2, validateFeaturePath as validateFeaturePath2 } from "@ingenyus/swarm";
7
3
  import path5 from "path";
8
4
 
9
5
  // src/common/filesystem.ts
@@ -170,7 +166,6 @@ var TemplateUtility = class {
170
166
  // src/generators/base/wasp-generator.base.ts
171
167
  import {
172
168
  GeneratorBase,
173
- logger as singletonLogger2,
174
169
  SwarmConfigManager,
175
170
  TemplateResolver
176
171
  } from "@ingenyus/swarm";
@@ -613,14 +608,6 @@ var WaspConfigGenerator = class {
613
608
 
614
609
  // src/generators/base/wasp-generator.base.ts
615
610
  var WaspGeneratorBase = class extends GeneratorBase {
616
- constructor(fileSystem = realFileSystem, logger = singletonLogger2) {
617
- super(fileSystem, logger);
618
- this.fileSystem = fileSystem;
619
- this.logger = logger;
620
- this.configGenerator = new WaspConfigGenerator(logger, fileSystem);
621
- this.templateUtility = new TemplateUtility(fileSystem);
622
- this.templateResolver = new TemplateResolver(fileSystem);
623
- }
624
611
  configGenerator;
625
612
  templateUtility;
626
613
  templateResolver;
@@ -628,6 +615,15 @@ var WaspGeneratorBase = class extends GeneratorBase {
628
615
  configLoaded = false;
629
616
  // Plugin name from swarm.config.json
630
617
  pluginName = PLUGIN_NAME;
618
+ constructor() {
619
+ super();
620
+ this.configGenerator = new WaspConfigGenerator(
621
+ this.logger,
622
+ this.fileSystem
623
+ );
624
+ this.templateUtility = new TemplateUtility(this.fileSystem);
625
+ this.templateResolver = new TemplateResolver(this.fileSystem);
626
+ }
631
627
  async loadSwarmConfig() {
632
628
  if (this.configLoaded) return;
633
629
  const configManager = new SwarmConfigManager();
@@ -678,7 +674,7 @@ var WaspGeneratorBase = class extends GeneratorBase {
678
674
  }
679
675
  /**
680
676
  * Generic existence check with force flag handling
681
- * Consolidates the pattern used in both file and config checks
677
+ * Consolidates the pattern used in both file and config existence checks
682
678
  */
683
679
  checkExistence(exists, itemDescription, force, errorMessage) {
684
680
  if (exists && !force) {
@@ -718,16 +714,14 @@ var schema = z2.object({
718
714
 
719
715
  // src/generators/feature/feature-generator.ts
720
716
  var FeatureGenerator = class extends WaspGeneratorBase {
721
- constructor(logger = singletonLogger3, fileSystem = realFileSystem) {
722
- super(fileSystem, logger);
723
- this.logger = logger;
724
- this.fileSystem = fileSystem;
725
- this.name = "feature";
726
- this.description = "Generates a feature directory containing a Wasp configuration file";
727
- }
728
717
  name;
729
718
  description;
730
719
  schema = schema;
720
+ constructor() {
721
+ super();
722
+ this.name = "feature";
723
+ this.description = "Generates a feature directory containing a Wasp configuration file";
724
+ }
731
725
  getDefaultTemplatePath(templateName) {
732
726
  return this.templateUtility.resolveTemplatePath(
733
727
  templateName,
@@ -1,9 +1,5 @@
1
1
  // src/generators/feature/feature-generator.ts
2
- import {
3
- handleFatalError as handleFatalError2,
4
- logger as singletonLogger3,
5
- validateFeaturePath as validateFeaturePath2
6
- } from "@ingenyus/swarm";
2
+ import { handleFatalError as handleFatalError2, validateFeaturePath as validateFeaturePath2 } from "@ingenyus/swarm";
7
3
  import path5 from "path";
8
4
 
9
5
  // src/common/filesystem.ts
@@ -170,7 +166,6 @@ var TemplateUtility = class {
170
166
  // src/generators/base/wasp-generator.base.ts
171
167
  import {
172
168
  GeneratorBase,
173
- logger as singletonLogger2,
174
169
  SwarmConfigManager,
175
170
  TemplateResolver
176
171
  } from "@ingenyus/swarm";
@@ -613,14 +608,6 @@ var WaspConfigGenerator = class {
613
608
 
614
609
  // src/generators/base/wasp-generator.base.ts
615
610
  var WaspGeneratorBase = class extends GeneratorBase {
616
- constructor(fileSystem = realFileSystem, logger = singletonLogger2) {
617
- super(fileSystem, logger);
618
- this.fileSystem = fileSystem;
619
- this.logger = logger;
620
- this.configGenerator = new WaspConfigGenerator(logger, fileSystem);
621
- this.templateUtility = new TemplateUtility(fileSystem);
622
- this.templateResolver = new TemplateResolver(fileSystem);
623
- }
624
611
  configGenerator;
625
612
  templateUtility;
626
613
  templateResolver;
@@ -628,6 +615,15 @@ var WaspGeneratorBase = class extends GeneratorBase {
628
615
  configLoaded = false;
629
616
  // Plugin name from swarm.config.json
630
617
  pluginName = PLUGIN_NAME;
618
+ constructor() {
619
+ super();
620
+ this.configGenerator = new WaspConfigGenerator(
621
+ this.logger,
622
+ this.fileSystem
623
+ );
624
+ this.templateUtility = new TemplateUtility(this.fileSystem);
625
+ this.templateResolver = new TemplateResolver(this.fileSystem);
626
+ }
631
627
  async loadSwarmConfig() {
632
628
  if (this.configLoaded) return;
633
629
  const configManager = new SwarmConfigManager();
@@ -678,7 +674,7 @@ var WaspGeneratorBase = class extends GeneratorBase {
678
674
  }
679
675
  /**
680
676
  * Generic existence check with force flag handling
681
- * Consolidates the pattern used in both file and config checks
677
+ * Consolidates the pattern used in both file and config existence checks
682
678
  */
683
679
  checkExistence(exists, itemDescription, force, errorMessage) {
684
680
  if (exists && !force) {
@@ -718,16 +714,14 @@ var schema = z2.object({
718
714
 
719
715
  // src/generators/feature/feature-generator.ts
720
716
  var FeatureGenerator = class extends WaspGeneratorBase {
721
- constructor(logger = singletonLogger3, fileSystem = realFileSystem) {
722
- super(fileSystem, logger);
723
- this.logger = logger;
724
- this.fileSystem = fileSystem;
725
- this.name = "feature";
726
- this.description = "Generates a feature directory containing a Wasp configuration file";
727
- }
728
717
  name;
729
718
  description;
730
719
  schema = schema;
720
+ constructor() {
721
+ super();
722
+ this.name = "feature";
723
+ this.description = "Generates a feature directory containing a Wasp configuration file";
724
+ }
731
725
  getDefaultTemplatePath(templateName) {
732
726
  return this.templateUtility.resolveTemplatePath(
733
727
  templateName,
@@ -59,8 +59,8 @@ var CONFIG_TYPES = {
59
59
 
60
60
  // src/generators/base/component-generator.base.ts
61
61
  import {
62
+ GeneratorRuntime,
62
63
  hasHelperMethodCall,
63
- logger as singletonLogger4,
64
64
  toCamelCase,
65
65
  toKebabCase as toKebabCase2,
66
66
  validateFeaturePath as validateFeaturePath3
@@ -374,17 +374,12 @@ var TemplateUtility = class {
374
374
  };
375
375
 
376
376
  // src/generators/feature/feature-generator.ts
377
- import {
378
- handleFatalError as handleFatalError2,
379
- logger as singletonLogger3,
380
- validateFeaturePath as validateFeaturePath2
381
- } from "@ingenyus/swarm";
377
+ import { handleFatalError as handleFatalError2, validateFeaturePath as validateFeaturePath2 } from "@ingenyus/swarm";
382
378
  import path5 from "path";
383
379
 
384
380
  // src/generators/base/wasp-generator.base.ts
385
381
  import {
386
382
  GeneratorBase,
387
- logger as singletonLogger2,
388
383
  SwarmConfigManager,
389
384
  TemplateResolver
390
385
  } from "@ingenyus/swarm";
@@ -827,14 +822,6 @@ var WaspConfigGenerator = class {
827
822
 
828
823
  // src/generators/base/wasp-generator.base.ts
829
824
  var WaspGeneratorBase = class extends GeneratorBase {
830
- constructor(fileSystem = realFileSystem, logger = singletonLogger2) {
831
- super(fileSystem, logger);
832
- this.fileSystem = fileSystem;
833
- this.logger = logger;
834
- this.configGenerator = new WaspConfigGenerator(logger, fileSystem);
835
- this.templateUtility = new TemplateUtility(fileSystem);
836
- this.templateResolver = new TemplateResolver(fileSystem);
837
- }
838
825
  configGenerator;
839
826
  templateUtility;
840
827
  templateResolver;
@@ -842,6 +829,15 @@ var WaspGeneratorBase = class extends GeneratorBase {
842
829
  configLoaded = false;
843
830
  // Plugin name from swarm.config.json
844
831
  pluginName = PLUGIN_NAME;
832
+ constructor() {
833
+ super();
834
+ this.configGenerator = new WaspConfigGenerator(
835
+ this.logger,
836
+ this.fileSystem
837
+ );
838
+ this.templateUtility = new TemplateUtility(this.fileSystem);
839
+ this.templateResolver = new TemplateResolver(this.fileSystem);
840
+ }
845
841
  async loadSwarmConfig() {
846
842
  if (this.configLoaded) return;
847
843
  const configManager = new SwarmConfigManager();
@@ -892,7 +888,7 @@ var WaspGeneratorBase = class extends GeneratorBase {
892
888
  }
893
889
  /**
894
890
  * Generic existence check with force flag handling
895
- * Consolidates the pattern used in both file and config checks
891
+ * Consolidates the pattern used in both file and config existence checks
896
892
  */
897
893
  checkExistence(exists, itemDescription, force, errorMessage) {
898
894
  if (exists && !force) {
@@ -932,16 +928,14 @@ var schema = z2.object({
932
928
 
933
929
  // src/generators/feature/feature-generator.ts
934
930
  var FeatureGenerator = class extends WaspGeneratorBase {
935
- constructor(logger = singletonLogger3, fileSystem = realFileSystem) {
936
- super(fileSystem, logger);
937
- this.logger = logger;
938
- this.fileSystem = fileSystem;
939
- this.name = "feature";
940
- this.description = "Generates a feature directory containing a Wasp configuration file";
941
- }
942
931
  name;
943
932
  description;
944
933
  schema = schema;
934
+ constructor() {
935
+ super();
936
+ this.name = "feature";
937
+ this.description = "Generates a feature directory containing a Wasp configuration file";
938
+ }
945
939
  getDefaultTemplatePath(templateName) {
946
940
  return this.templateUtility.resolveTemplatePath(
947
941
  templateName,
@@ -977,13 +971,6 @@ var FeatureGenerator = class extends WaspGeneratorBase {
977
971
 
978
972
  // src/generators/base/component-generator.base.ts
979
973
  var ComponentGeneratorBase = class extends WaspGeneratorBase {
980
- constructor(logger = singletonLogger4, fileSystem = realFileSystem, featureDirectoryGenerator = new FeatureGenerator(logger, fileSystem)) {
981
- super(fileSystem, logger);
982
- this.logger = logger;
983
- this.fileSystem = fileSystem;
984
- this.featureDirectoryGenerator = featureDirectoryGenerator;
985
- this.featureDirectoryGenerator = featureDirectoryGenerator;
986
- }
987
974
  getDefaultTemplatePath(templateName) {
988
975
  return this.templateUtility.resolveTemplatePath(
989
976
  templateName,
@@ -991,6 +978,17 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
991
978
  import.meta.url
992
979
  );
993
980
  }
981
+ featureDirectoryGenerator;
982
+ constructor() {
983
+ super();
984
+ const runtime = GeneratorRuntime.current();
985
+ if (runtime.featureGeneratorFactory) {
986
+ const factoryResult = runtime.featureGeneratorFactory(runtime);
987
+ this.featureDirectoryGenerator = factoryResult;
988
+ } else {
989
+ this.featureDirectoryGenerator = new FeatureGenerator();
990
+ }
991
+ }
994
992
  get name() {
995
993
  return toKebabCase2(this.componentType);
996
994
  }
@@ -1067,15 +1065,14 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
1067
1065
  }
1068
1066
  /**
1069
1067
  * Gets the appropriate directory for a feature based on its path.
1070
- * @param fileSystem - The filesystem abstraction
1071
1068
  * @param featurePath - The full feature path
1072
1069
  * @param type - The type of file being generated
1073
1070
  * @returns The target directory and import path
1074
1071
  */
1075
- getFeatureTargetDir(fileSystem, featurePath, type) {
1072
+ getFeatureTargetDir(featurePath, type) {
1076
1073
  validateFeaturePath3(featurePath);
1077
1074
  const normalisedPath = normaliseFeaturePath(featurePath);
1078
- const featureDir = getFeatureDir(fileSystem, normalisedPath);
1075
+ const featureDir = getFeatureDir(this.fileSystem, normalisedPath);
1079
1076
  const typeKey = type.toLowerCase();
1080
1077
  const typeDirectory = TYPE_DIRECTORIES[typeKey];
1081
1078
  const targetDirectory = path6.join(featureDir, typeDirectory);
@@ -1087,7 +1084,6 @@ var ComponentGeneratorBase = class extends WaspGeneratorBase {
1087
1084
  */
1088
1085
  ensureTargetDirectory(featurePath, type) {
1089
1086
  const { targetDirectory, importDirectory } = this.getFeatureTargetDir(
1090
- this.fileSystem,
1091
1087
  featurePath,
1092
1088
  type
1093
1089
  );