task-script-support-cli 0.2.20 → 0.3.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 (102) hide show
  1. package/assets/yargs-template/task-runner/src/commands/verify.ts +3 -2
  2. package/assets/yargs-template/task-runner/src/services/banner-service.ts +13 -9
  3. package/assets/yargs-template/task-runner/src/tasks/banner/print-banner.ts +38 -0
  4. package/assets/yargs-template/task-runner/src/tasks/banner/resolve-banner-font.ts +70 -0
  5. package/assets/yargs-template/task-runner/src/types/state.ts +4 -0
  6. package/{dist/assets/yargs-template/task-runner/src/wrappers → assets/yargs-template/task-runner/src/wrappers/electives}/concurrent-task-group.ts +4 -4
  7. package/assets/yargs-template/task-runner/src/wrappers/electives/resolver-task.ts +87 -0
  8. package/assets/yargs-template/task-runner/src/wrappers/{sequential-task-group.ts → electives/sequential-task-group.ts} +4 -4
  9. package/assets/yargs-template/task-runner/tests/commands/verify.test.ts +14 -21
  10. package/dist/assets/yargs-template/task-runner/src/commands/verify.ts +3 -2
  11. package/dist/assets/yargs-template/task-runner/src/services/banner-service.ts +13 -9
  12. package/dist/assets/yargs-template/task-runner/src/tasks/banner/print-banner.ts +38 -0
  13. package/dist/assets/yargs-template/task-runner/src/tasks/banner/resolve-banner-font.ts +70 -0
  14. package/dist/assets/yargs-template/task-runner/src/types/state.ts +4 -0
  15. package/{assets/yargs-template/task-runner/src/wrappers → dist/assets/yargs-template/task-runner/src/wrappers/electives}/concurrent-task-group.ts +4 -4
  16. package/dist/assets/yargs-template/task-runner/src/wrappers/electives/resolver-task.ts +87 -0
  17. package/dist/assets/yargs-template/task-runner/src/wrappers/{sequential-task-group.ts → electives/sequential-task-group.ts} +4 -4
  18. package/dist/assets/yargs-template/task-runner/tests/commands/verify.test.ts +14 -21
  19. package/dist/package.json +2 -2
  20. package/dist/src/commands/gen.d.ts +2 -1
  21. package/dist/src/commands/gen.d.ts.map +1 -1
  22. package/dist/src/commands/gen.js +2 -0
  23. package/dist/src/commands/gen.js.map +1 -1
  24. package/dist/src/index.js +1 -0
  25. package/dist/src/index.js.map +1 -1
  26. package/dist/src/services/file-service.d.ts.map +1 -1
  27. package/dist/src/services/file-service.js +2 -1
  28. package/dist/src/services/file-service.js.map +1 -1
  29. package/dist/src/services/project-service.d.ts +21 -0
  30. package/dist/src/services/project-service.d.ts.map +1 -1
  31. package/dist/src/services/project-service.js +41 -0
  32. package/dist/src/services/project-service.js.map +1 -1
  33. package/dist/src/services/templater-service.d.ts +1 -0
  34. package/dist/src/services/templater-service.d.ts.map +1 -1
  35. package/dist/src/services/templater-service.js +9 -3
  36. package/dist/src/services/templater-service.js.map +1 -1
  37. package/dist/src/tasks/generate/generate-command.d.ts +6 -14
  38. package/dist/src/tasks/generate/generate-command.d.ts.map +1 -1
  39. package/dist/src/tasks/generate/generate-command.js +15 -52
  40. package/dist/src/tasks/generate/generate-command.js.map +1 -1
  41. package/dist/src/tasks/generate/generate-service.d.ts +6 -6
  42. package/dist/src/tasks/generate/generate-service.d.ts.map +1 -1
  43. package/dist/src/tasks/generate/generate-service.js +17 -16
  44. package/dist/src/tasks/generate/generate-service.js.map +1 -1
  45. package/dist/src/tasks/generate/generate-task.d.ts +6 -6
  46. package/dist/src/tasks/generate/generate-task.d.ts.map +1 -1
  47. package/dist/src/tasks/generate/generate-task.js +17 -16
  48. package/dist/src/tasks/generate/generate-task.js.map +1 -1
  49. package/dist/src/tasks/generate/project-context-guard.d.ts +1 -1
  50. package/dist/src/tasks/generate/project-context-guard.js +1 -1
  51. package/dist/src/tasks/generate/resolve-injectables.d.ts +56 -0
  52. package/dist/src/tasks/generate/resolve-injectables.d.ts.map +1 -0
  53. package/dist/src/tasks/generate/resolve-injectables.js +134 -0
  54. package/dist/src/tasks/generate/resolve-injectables.js.map +1 -0
  55. package/dist/src/tasks/generate/select-gen-target-name.js +4 -4
  56. package/dist/src/tasks/generate/select-gen-target-name.js.map +1 -1
  57. package/dist/src/tasks/generate/select-gen-target.d.ts +1 -1
  58. package/dist/src/tasks/generate/select-gen-target.js +2 -2
  59. package/dist/src/tasks/generate/select-gen-target.js.map +1 -1
  60. package/dist/src/tasks/stdout/print-generated-results.js +2 -2
  61. package/dist/src/tasks/stdout/print-generated-results.js.map +1 -1
  62. package/dist/src/tasks/sync-configuration.d.ts +1 -1
  63. package/dist/src/tasks/sync-configuration.js +6 -6
  64. package/dist/src/tasks/sync-configuration.js.map +1 -1
  65. package/dist/src/templates/command.d.ts.map +1 -1
  66. package/dist/src/templates/command.js +8 -2
  67. package/dist/src/templates/command.js.map +1 -1
  68. package/dist/src/templates/service.d.ts +1 -1
  69. package/dist/src/templates/service.d.ts.map +1 -1
  70. package/dist/src/templates/service.js +29 -1
  71. package/dist/src/templates/service.js.map +1 -1
  72. package/dist/src/templates/task.d.ts +1 -1
  73. package/dist/src/templates/task.d.ts.map +1 -1
  74. package/dist/src/templates/task.js +37 -1
  75. package/dist/src/templates/task.js.map +1 -1
  76. package/dist/src/types/project.d.ts +4 -0
  77. package/dist/src/types/project.d.ts.map +1 -1
  78. package/dist/src/types/state.d.ts +7 -3
  79. package/dist/src/types/state.d.ts.map +1 -1
  80. package/dist/src/types/state.js.map +1 -1
  81. package/package.json +2 -2
  82. package/src/commands/gen.ts +2 -0
  83. package/src/index.ts +1 -0
  84. package/src/services/file-service.ts +2 -1
  85. package/src/services/project-service.ts +54 -0
  86. package/src/services/templater-service.ts +15 -3
  87. package/src/tasks/generate/generate-command.ts +14 -67
  88. package/src/tasks/generate/generate-service.ts +14 -11
  89. package/src/tasks/generate/generate-task.ts +14 -11
  90. package/src/tasks/generate/project-context-guard.ts +1 -1
  91. package/src/tasks/generate/resolve-injectables.ts +154 -0
  92. package/src/tasks/generate/select-gen-target-name.ts +4 -4
  93. package/src/tasks/generate/select-gen-target.ts +2 -2
  94. package/src/tasks/stdout/print-generated-results.ts +2 -2
  95. package/src/tasks/sync-configuration.ts +6 -6
  96. package/src/templates/command.ts +10 -2
  97. package/src/templates/service.ts +34 -2
  98. package/src/templates/task.ts +42 -2
  99. package/src/types/project.ts +5 -0
  100. package/src/types/state.ts +9 -3
  101. package/assets/yargs-template/task-runner/src/tasks/print-banner.ts +0 -73
  102. package/dist/assets/yargs-template/task-runner/src/tasks/print-banner.ts +0 -73
@@ -1 +1 @@
1
- {"version":3,"file":"sync-configuration.js","sourceRoot":"./src/","sources":["src/tasks/sync-configuration.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,uCAA0C;AAC1C,mDAA+C;AAC/C,+DAA2D;AAC3D,kDAA0B;AAC1B,6DAAyD;AAEzD,0CAA+C;AAC/C,2DAAuD;AACvD,2DAAuD;AAEvD;;GAEG;AAEY,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,kBAAO;IAI1C;IACA;IACA;IALV,UAAU,GAAG,oBAAoB,CAAC;IAElC,YACU,aAA4B,EAC5B,YAA0B,EAC1B,WAAwB;QAEhC,KAAK,EAAE,CAAC;QAJA,kBAAa,GAAb,aAAa,CAAe;QAC5B,iBAAY,GAAZ,YAAY,CAAc;QAC1B,gBAAW,GAAX,WAAW,CAAa;IAGlC,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACrD,IAAI,OAAO,GAAgC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAQ,CAAC;QAEpE,4EAA4E;QAC5E,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1E,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;YAC1D,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAQ,EAAE,GAAG,aAAa,EAAE,CAAC;QAC9D,CAAC;QAED,2CAA2C;QAC3C,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;YACjD,MAAM,cAAc,GAAyB,GAAG,UAAU,aAAa,CAAC;YACxE,OAAO,CAAC,cAAc,CAAC;gBACrB,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;YACrE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,uDAAuD;QACvD,MAAM,SAAS,GAAY,IAAI,CAAC;QAChC,OAAO,CAAC,kBAAkB;YACxB,OAAO,CAAC,kBAAkB;gBAC1B,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,qBAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,kBAAkB;YACxB,OAAO,CAAC,kBAAkB;gBAC1B,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,qBAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,eAAe;YACrB,OAAO,CAAC,eAAe;gBACvB,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,qBAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;QAE7D,oBAAoB;QACpB,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED;;;;;OAKG;IACH,cAAc,GAAG,CAAC,OAAe,EAAE,EAAE,EAAE,CACrC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,eAAK,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEjE;;;;;;;;OAQG;IACH,KAAK,CAAC,cAAc,CAClB,OAAuC,EACvC,YAAqB,KAAK;QAE1B,MAAM,UAAU,GACd,GAAG,OAAO,SAAiD,CAAC;QAE9D,MAAM,cAAc,GAClB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAQ,CAAC,UAAU,CACpC,CAAC,MAAM,CAAC,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC,0BAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAE9D,gEAAgE;QAChE,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACjC,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,+BAA+B;QAC/B,MAAM,aAAa,GAAW,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAC3D,0CAA0C,eAAK,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,SAAS,EACvG,cAAc,CACf,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAC9D,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACjE,MAAM,IAAI,KAAK,CACb,gGAAgG,CACjG,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACb,6FAA6F,CAC9F,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAA;AAnHoB,iBAAiB;IADrC,IAAA,yBAAc,GAAE;qCAKU,8BAAa;QACd,4BAAY;QACb,0BAAW;GANf,iBAAiB,CAmHrC;kBAnHoB,iBAAiB"}
1
+ {"version":3,"file":"sync-configuration.js","sourceRoot":"./src/","sources":["src/tasks/sync-configuration.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"./src/","sources":["src/templates/command.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,GAC7B,WAAW,MAAM,EACjB,QAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAa,WAevC,CAAC"}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"./src/","sources":["src/templates/command.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,kBAAkB,GAC7B,WAAW,MAAM,EACjB,QAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAa,WAmBvC,CAAC"}
@@ -1,17 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getCommandTemplate = void 0;
4
+ const nonClashingName = (name) => `${name}Task`;
5
+ const nameCheck = (name, className) => name === className ? nonClashingName(name) : name;
4
6
  const getCommandTemplate = (className, tasks = new Map()) => `import { singleton } from "tsyringe";
5
7
  import { Command } from "../wrappers/command";
6
8
  ${tasks
7
9
  .keys()
8
10
  .toArray()
9
- .map((k) => `import ${k} from "${tasks.get(k)}";`)
11
+ .map((k) => `import ${nameCheck(k, className)} from "${tasks.get(k)}";`)
10
12
  .join("\n")}
11
13
 
12
14
  @singleton()
13
15
  export class ${className} extends Command {
14
- tasks = [${tasks.keys().toArray().join(", ")}];
16
+ tasks = [${tasks
17
+ .keys()
18
+ .toArray()
19
+ .map((k) => nameCheck(k, className))
20
+ .join(", ")}];
15
21
  }
16
22
 
17
23
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sourceRoot":"./src/","sources":["src/templates/command.ts"],"names":[],"mappings":";;;AAAO,MAAM,kBAAkB,GAAG,CAChC,SAAiB,EACjB,QAA6B,IAAI,GAAG,EAAE,EACtC,EAAE,CACF;;EAEA,KAAK;KACJ,IAAI,EAAE;KACN,OAAO,EAAE;KACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;KACjD,IAAI,CAAC,IAAI,CAAC;;;eAGE,SAAS;aACX,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;;;CAG7C,CAAC;AAjBW,QAAA,kBAAkB,sBAiB7B"}
1
+ {"version":3,"file":"command.js","sourceRoot":"./src/","sources":["src/templates/command.ts"],"names":[],"mappings":";;;AAAA,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,IAAI,MAAM,CAAC;AACxD,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,SAAiB,EAAE,EAAE,CACpD,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAE7C,MAAM,kBAAkB,GAAG,CAChC,SAAiB,EACjB,QAA6B,IAAI,GAAG,EAAE,EACtC,EAAE,CACF;;EAEA,KAAK;KACJ,IAAI,EAAE;KACN,OAAO,EAAE;KACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,UAAU,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;KACvE,IAAI,CAAC,IAAI,CAAC;;;eAGE,SAAS;aACX,KAAK;KACb,IAAI,EAAE;KACN,OAAO,EAAE;KACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;KACnC,IAAI,CAAC,IAAI,CAAC;;;CAGd,CAAC;AArBW,QAAA,kBAAkB,sBAqB7B"}
@@ -1,2 +1,2 @@
1
- export declare const getServiceTemplate: (className: string) => string;
1
+ export declare const getServiceTemplate: (className: string, injections: Map<string, string>) => string;
2
2
  //# sourceMappingURL=service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"./src/","sources":["src/templates/service.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,GAAI,WAAW,MAAM,WAWnD,CAAC"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"./src/","sources":["src/templates/service.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kBAAkB,GAC7B,WAAW,MAAM,EACjB,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,WAuChC,CAAC"}
@@ -1,7 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getServiceTemplate = void 0;
4
- const getServiceTemplate = (className) => `import { singleton } from "tsyringe";
4
+ const camelCase = (s) => s.charAt(0).toLowerCase() + s.slice(1);
5
+ const getServiceTemplate = (className, injections) => {
6
+ if (!injections || injections.size === 0) {
7
+ return `import { singleton } from "tsyringe";
5
8
 
6
9
  /**
7
10
  * ${className}
@@ -12,5 +15,30 @@ export class ${className} {
12
15
  }
13
16
 
14
17
  `;
18
+ }
19
+ return `import { singleton } from "tsyringe";
20
+ ${injections
21
+ .keys()
22
+ .toArray()
23
+ .map((k) => `import { ${k} } from "${injections.get(k)}";`)
24
+ .join("\n")}
25
+
26
+
27
+ /**
28
+ * ${className}
29
+ */
30
+ @singleton()
31
+ export class ${className} {
32
+ constructor(
33
+ ${injections
34
+ .keys()
35
+ .toArray()
36
+ .map((k) => `private ${camelCase(k)}: ${k}`)
37
+ .join(",\n ")}
38
+ ) {}
39
+ }
40
+
41
+ `;
42
+ };
15
43
  exports.getServiceTemplate = getServiceTemplate;
16
44
  //# sourceMappingURL=service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"./src/","sources":["src/templates/service.ts"],"names":[],"mappings":";;;AAAO,MAAM,kBAAkB,GAAG,CAAC,SAAiB,EAAE,EAAE,CACtD;;;KAGG,SAAS;;;eAGC,SAAS;;;;CAIvB,CAAC;AAXW,QAAA,kBAAkB,sBAW7B"}
1
+ {"version":3,"file":"service.js","sourceRoot":"./src/","sources":["src/templates/service.ts"],"names":[],"mappings":";;;AAAA,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEjE,MAAM,kBAAkB,GAAG,CAChC,SAAiB,EACjB,UAA+B,EAC/B,EAAE;IACF,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO;;;KAGN,SAAS;;;eAGC,SAAS;;;;CAIvB,CAAC;IACA,CAAC;IAED,OAAO;EACP,UAAU;SACT,IAAI,EAAE;SACN,OAAO,EAAE;SACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,YAAY,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;SAC1D,IAAI,CAAC,IAAI,CAAC;;;;KAIR,SAAS;;;eAGC,SAAS;;MAElB,UAAU;SACT,IAAI,EAAE;SACN,OAAO,EAAE;SACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;SAC3C,IAAI,CAAC,SAAS,CAAC;;;;CAIrB,CAAC;AACF,CAAC,CAAC;AAzCW,QAAA,kBAAkB,sBAyC7B"}
@@ -1,2 +1,2 @@
1
- export declare const getTaskTemplate: (className: string) => string;
1
+ export declare const getTaskTemplate: (className: string, injections: Map<string, string>) => string;
2
2
  //# sourceMappingURL=task.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"task.d.ts","sourceRoot":"./src/","sources":["src/templates/task.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,GAAI,WAAW,MAAM,WAehD,CAAC"}
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"./src/","sources":["src/templates/task.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,GAC1B,WAAW,MAAM,EACjB,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,WAmDhC,CAAC"}
@@ -1,7 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getTaskTemplate = void 0;
4
- const getTaskTemplate = (className) => `import { AppTask } from "../wrappers/app-task";
4
+ const camelCase = (s) => s.charAt(0).toLowerCase() + s.slice(1);
5
+ const getTaskTemplate = (className, injections) => {
6
+ if (!injections || injections.size === 0) {
7
+ return `import { AppTask } from "../wrappers/app-task";
5
8
  import { autoInjectable } from "tsyringe";
6
9
 
7
10
  /**
@@ -16,5 +19,38 @@ export default class ${className} extends AppTask {
16
19
  }
17
20
 
18
21
  `;
22
+ }
23
+ return `import { AppTask } from "../wrappers/app-task";
24
+ import { autoInjectable } from "tsyringe";
25
+ ${injections
26
+ .keys()
27
+ .toArray()
28
+ .map((k) => `import { ${k} } from "${injections.get(k)}";`)
29
+ .join("\n")}
30
+
31
+ /**
32
+ * ${className}
33
+ */
34
+ @autoInjectable()
35
+ export default class ${className} extends AppTask {
36
+ loggerName = "${className}";
37
+
38
+ constructor(
39
+ ${injections
40
+ .keys()
41
+ .toArray()
42
+ .map((k) => `private ${camelCase(k)}: ${k}`)
43
+ .join(",\n ")}
44
+ ) {
45
+ super();
46
+ }
47
+
48
+ async run() {
49
+ // TODO: implement task
50
+ }
51
+ }
52
+
53
+ `;
54
+ };
19
55
  exports.getTaskTemplate = getTaskTemplate;
20
56
  //# sourceMappingURL=task.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"task.js","sourceRoot":"./src/","sources":["src/templates/task.ts"],"names":[],"mappings":";;;AAAO,MAAM,eAAe,GAAG,CAAC,SAAiB,EAAE,EAAE,CACnD;;;;KAIG,SAAS;;;uBAGS,SAAS;kBACd,SAAS;;;;;;CAM1B,CAAC;AAfW,QAAA,eAAe,mBAe1B"}
1
+ {"version":3,"file":"task.js","sourceRoot":"./src/","sources":["src/templates/task.ts"],"names":[],"mappings":";;;AAAA,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEjE,MAAM,eAAe,GAAG,CAC7B,SAAiB,EACjB,UAA+B,EAC/B,EAAE;IACF,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO;;;;KAIN,SAAS;;;uBAGS,SAAS;kBACd,SAAS;;;;;;CAM1B,CAAC;IACA,CAAC;IAED,OAAO;;EAEP,UAAU;SACT,IAAI,EAAE;SACN,OAAO,EAAE;SACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,YAAY,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;SAC1D,IAAI,CAAC,IAAI,CAAC;;;KAGR,SAAS;;;uBAGS,SAAS;kBACd,SAAS;;;MAGrB,UAAU;SACT,IAAI,EAAE;SACN,OAAO,EAAE;SACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;SAC3C,IAAI,CAAC,SAAS,CAAC;;;;;;;;;;CAUrB,CAAC;AACF,CAAC,CAAC;AArDW,QAAA,eAAe,mBAqD1B"}
@@ -9,4 +9,8 @@ export interface ProjectData {
9
9
  serviceFolders: string[];
10
10
  commandFolders: string[];
11
11
  }
12
+ export type ProjectImport = {
13
+ importClassName: string;
14
+ importPath: string;
15
+ };
12
16
  //# sourceMappingURL=project.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"./src/","sources":["src/types/project.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B"}
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"./src/","sources":["src/types/project.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC"}
@@ -1,17 +1,21 @@
1
1
  import { CLIArg } from "./process";
2
2
  import { AppState as State, TaskClass } from "task-script-support";
3
- import { ProjectConfig, ProjectData } from "./project";
3
+ import { ProjectConfig, ProjectData, ProjectImport } from "./project";
4
4
  export declare enum GenTargetType {
5
5
  Command = "command",
6
6
  Service = "service",
7
7
  Task = "task"
8
8
  }
9
+ export interface GenData {
10
+ readonly targetType?: GenTargetType;
11
+ readonly targetName?: string;
12
+ readonly imports?: ProjectImport[];
13
+ }
9
14
  export interface AppStateData {
10
15
  readonly banner?: {
11
16
  readonly font?: string;
12
17
  };
13
- readonly genTargetType?: GenTargetType;
14
- readonly genTargetName?: string;
18
+ readonly genData?: GenData;
15
19
  readonly environmentValidated?: boolean;
16
20
  readonly project?: ProjectConfig & ProjectData;
17
21
  readonly errorMessages?: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"./src/","sources":["src/types/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,QAAQ,IAAI,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAEvD,oBAAY,aAAa;IACvB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,IAAI,SAAS;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEhC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,WAAW,CAAC;IAE/C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC;AAED,eAAO,MAAM,qBAAqB;;;;;;;CAOjC,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;AACrD,MAAM,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"./src/","sources":["src/types/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,QAAQ,IAAI,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAEtE,oBAAY,aAAa;IACvB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,IAAI,SAAS;CACd;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IAEF,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAE3B,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,WAAW,CAAC;IAE/C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC;AAED,eAAO,MAAM,qBAAqB;;;;;;;CAOjC,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;AACrD,MAAM,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"./src/","sources":["src/types/state.ts"],"names":[],"mappings":";;;AAIA,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,oCAAmB,CAAA;IACnB,oCAAmB,CAAA;IACnB,8BAAa,CAAA;AACf,CAAC,EAJW,aAAa,6BAAb,aAAa,QAIxB;AAgBY,QAAA,qBAAqB,GAAG;IACnC,iBAAiB,EAAE,mBAAmB;IACtC,cAAc,EAAE,gBAAgB;IAChC,QAAQ,EAAE,UAAU;IACpB,iBAAiB,EAAE,mBAAmB;IACtC,eAAe,EAAE,iBAAiB;IAClC,mBAAmB,EAAE,qBAAqB;CAC3C,CAAC"}
1
+ {"version":3,"file":"state.js","sourceRoot":"./src/","sources":["src/types/state.ts"],"names":[],"mappings":";;;AAIA,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,oCAAmB,CAAA;IACnB,oCAAmB,CAAA;IACnB,8BAAa,CAAA;AACf,CAAC,EAJW,aAAa,6BAAb,aAAa,QAIxB;AAsBY,QAAA,qBAAqB,GAAG;IACnC,iBAAiB,EAAE,mBAAmB;IACtC,cAAc,EAAE,gBAAgB;IAChC,QAAQ,EAAE,UAAU;IACpB,iBAAiB,EAAE,mBAAmB;IACtC,eAAe,EAAE,iBAAiB;IAClC,mBAAmB,EAAE,qBAAqB;CAC3C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "task-script-support-cli",
3
- "version": "0.2.20",
3
+ "version": "0.3.2",
4
4
  "main": "index.js",
5
5
  "type": "commonjs",
6
6
  "preferGlobal": true,
@@ -17,7 +17,7 @@
17
17
  "format": "prettier --write ./",
18
18
  "format-check": "prettier --check .",
19
19
  "hooks-one-time-setup": "npx simple-git-hooks",
20
- "prettier-watch": "onchange \"**/*\" -- prettier --write --ignore-unknown {{changed}}",
20
+ "format-watch": "onchange \"**/*\" -- prettier --write --ignore-unknown {{changed}}",
21
21
  "build": "rm -rf ./dist && npx tsc && node dist/src/index.js -v && npm run cp-assets",
22
22
  "prepack": "npm run build",
23
23
  "test": "vitest run",
@@ -10,6 +10,7 @@ import PrintGeneratedResults from "../tasks/stdout/print-generated-results";
10
10
  import SyncConfiguration from "../tasks/sync-configuration";
11
11
  import SelectGenTargetName from "../tasks/generate/select-gen-target-name";
12
12
  import ProjectContextGuard from "../tasks/generate/project-context-guard";
13
+ import ResolveInjectables from "../tasks/generate/resolve-injectables";
13
14
 
14
15
  @singleton()
15
16
  export class GenCommand extends Command {
@@ -20,6 +21,7 @@ export class GenCommand extends Command {
20
21
  SelectGenTarget,
21
22
  SyncConfiguration,
22
23
  SelectGenTargetName,
24
+ ResolveInjectables,
23
25
  [GenerateCommand, GenerateService, GenerateTask],
24
26
  PrintGeneratedResults,
25
27
  ];
package/src/index.ts CHANGED
@@ -32,6 +32,7 @@ program
32
32
  program
33
33
  .command("gen [name]")
34
34
  .option("-n, --target-name <name>", "Name of Generated Target")
35
+ .option("-i, --inject", "Inject services")
35
36
  .option("-s, --service", "Generate a service")
36
37
  .option("-c, --command", "Generate a command")
37
38
  .option("-t, --task", "Generate a task")
@@ -20,7 +20,8 @@ export class FileService {
20
20
  }
21
21
 
22
22
  toRelativePath(fromPath: string, toPath: string) {
23
- return this.ensurePosix(path.relative(fromPath, toPath));
23
+ const p = this.ensurePosix(path.relative(fromPath, toPath));
24
+ return !p.includes("/") ? `./${p}` : p;
24
25
  }
25
26
 
26
27
  ensurePosix(possiblyWindowsPath: string) {
@@ -2,6 +2,8 @@ import { autoInjectable } from "tsyringe";
2
2
  import { FileService } from "./file-service";
3
3
  import { CaseType } from "../types/format";
4
4
  import { UtilService } from "./util-service";
5
+ import { GenData } from "../types/state";
6
+ import { ProjectImport } from "../types/project";
5
7
 
6
8
  @autoInjectable()
7
9
  export class ProjectService {
@@ -17,6 +19,42 @@ export class ProjectService {
17
19
  private utilService: UtilService,
18
20
  ) {}
19
21
 
22
+ /**
23
+ * Formalize the selected imports into a format that can be used in the source code being generated.
24
+ *
25
+ * 1. Generate a PascalCased import name from the filename
26
+ * 2. Convert to a relative path
27
+ * 3. Remove the file extension for TypeScript import
28
+ *
29
+ * @param selectedPaths the selected file paths to formalize
30
+ * @param relativeSource the path to the source file being generated to resolve relative paths
31
+ * @returns the formalized ProjectImport array ({ importClassName, importPath })
32
+ */
33
+ formalizeImports(
34
+ selectedPaths: string[],
35
+ relativeSource: string,
36
+ ): ProjectImport[] {
37
+ if (!selectedPaths?.length) {
38
+ return [];
39
+ }
40
+ const formalizedPaths: ProjectImport[] = [];
41
+ for (const fullPath of selectedPaths) {
42
+ const filename = this.fileService.getFilenameNoExt(fullPath);
43
+ const importClassName = this.utilService.titleizedToCase(
44
+ this.utilService.titleizeAll(filename),
45
+ CaseType.PASCAL_CASE,
46
+ );
47
+
48
+ formalizedPaths.push({
49
+ importClassName,
50
+ importPath: this.fileService
51
+ .toRelativePath(relativeSource, fullPath)
52
+ .replace(ProjectService.defaults.extention, ""),
53
+ });
54
+ }
55
+ return formalizedPaths;
56
+ }
57
+
20
58
  /**
21
59
  * Get all task files found in the project
22
60
  *
@@ -46,6 +84,22 @@ export class ProjectService {
46
84
  ];
47
85
  }
48
86
 
87
+ /**
88
+ * Returns a map of import class names to import paths.
89
+ *
90
+ * @param genData the GenData object containing the ProjectImport objects to map
91
+ * @returns a Map of import class names to relative import paths
92
+ */
93
+ getImportMap(genData: GenData) {
94
+ const imports = genData.imports || [];
95
+ return new Map<string, string>(
96
+ imports.map((imp: ProjectImport) => [
97
+ imp.importClassName,
98
+ imp.importPath,
99
+ ]),
100
+ );
101
+ }
102
+
49
103
  /**
50
104
  * Looks for a naming convention on the given filename array. Returns
51
105
  * the first found convention or the default one if it can't be detected.
@@ -4,6 +4,7 @@ import { autoInjectable } from "tsyringe";
4
4
  import { SpawnService } from "./spawn-service";
5
5
  import { LogService } from "./log-service";
6
6
  import { dockerIgnoreTemplate } from "../templates/docker-ignore";
7
+ import chalk from "chalk";
7
8
 
8
9
  const gitignoreContent = `node_modules
9
10
  dist
@@ -78,11 +79,19 @@ export class TemplateService {
78
79
  }
79
80
  }
80
81
 
82
+ toLogPath(pathString: string) {
83
+ return path.relative(
84
+ process.cwd(),
85
+ pathString.replaceAll("task-runner", this.outputName),
86
+ );
87
+ }
88
+
81
89
  private async copyDirectories() {
82
90
  for (const folder of this.dirListToCopy) {
83
91
  const src = path.join(this.sourceDir, folder);
84
92
  const dest = path.join(this.destination, folder);
85
- this.logger.debug(`Running Copy: cp -R ${src} ${dest}`);
93
+ // this.logger.debug(`Running Copy: cp -R ${src} ${dest}`);;
94
+ this.logger.debug(`Generating folder ${chalk.dim(this.toLogPath(dest))}`);
86
95
  fs.cpSync(src, dest, { recursive: true });
87
96
  }
88
97
  }
@@ -91,7 +100,8 @@ export class TemplateService {
91
100
  for (const filename of this.fileListToCopy) {
92
101
  const src = path.join(this.sourceDir, filename);
93
102
  const dest = path.join(this.destination, filename);
94
- this.logger.debug(`Running Copy: cp ${src} ${dest}`);
103
+ // this.logger.debug(`Running Copy: cp ${src} ${dest}`);
104
+ this.logger.debug(`Generating file ${chalk.dim(this.toLogPath(dest))}`);
95
105
  fs.copyFileSync(src, dest);
96
106
  }
97
107
  }
@@ -135,7 +145,9 @@ export class TemplateService {
135
145
  const rename = (ext = "") => {
136
146
  const src = path.join(this.destination, `task-runner${ext}`);
137
147
  const dest = path.join(this.destination, `${this.outputName}${ext}`);
138
- this.logger.debug(`Renaming task-runner to ${this.outputName}${ext}`);
148
+ this.logger.debug(
149
+ `Fixing references ${chalk.dim(`(${this.outputName}${ext})`)}`,
150
+ );
139
151
  fs.renameSync(src, dest);
140
152
  };
141
153
  rename();
@@ -1,14 +1,13 @@
1
1
  import chalk from "chalk";
2
- import { AppTask } from "../../wrappers/app-task";
3
2
  import { autoInjectable } from "tsyringe";
4
3
  import { AppState, GenTargetType } from "../../types/state";
5
- import { FileService } from "../../services/file-service";
6
- import { UtilService } from "../../services/util-service";
7
4
  import { CaseType } from "../../types/format";
8
5
  import path from "path";
9
6
  import { getCommandTemplate } from "../../templates/command";
10
7
  import { ProjectService } from "../../services/project-service";
11
- import { PromptService } from "../../services/prompt-service";
8
+ import { AppTask } from "../../wrappers/app-task";
9
+ import { FileService } from "../../services/file-service";
10
+ import { UtilService } from "../../services/util-service";
12
11
 
13
12
  /**
14
13
  * Generates a new command class
@@ -19,9 +18,8 @@ export default class GenerateCommand extends AppTask {
19
18
 
20
19
  constructor(
21
20
  private fileService: FileService,
22
- private utilService: UtilService,
23
21
  private projectService: ProjectService,
24
- private promptService: PromptService,
22
+ private utilService: UtilService,
25
23
  ) {
26
24
  super();
27
25
  }
@@ -29,17 +27,17 @@ export default class GenerateCommand extends AppTask {
29
27
  /**
30
28
  * Generates a new command class file.
31
29
  *
32
- * @returns updated state with outputDestination set to generated result path.
30
+ * @returns updated state with outputDestination set to a generated result path.
33
31
  */
34
32
  async run(): Promise<void | Partial<AppState>> {
35
33
  const { utilService, fileService, projectService } = this;
36
34
 
37
- if (this.state.data.genTargetType !== GenTargetType.Command) {
35
+ if (this.state.data.genData!.targetType !== GenTargetType.Command) {
38
36
  return; // no-op
39
37
  }
40
38
 
41
39
  this.logger.info(chalk.blueBright("Generating Command"));
42
- const targetName = this.state.data.genTargetName!;
40
+ const targetName = this.state.data.genData!.targetName!;
43
41
  const targetDirectory = this.state.data.project!.commandDestination!;
44
42
 
45
43
  // detect case between commands and task files
@@ -52,9 +50,10 @@ export default class GenerateCommand extends AppTask {
52
50
  );
53
51
  const filename = `${utilService.titleizedToCase(targetName, convention)}${ProjectService.defaults.extention}`;
54
52
 
55
- const taskMappings = new Map();
56
- await this.addTasksToMap(taskMappings);
57
- const rendered = getCommandTemplate(className, taskMappings);
53
+ const injectablesMap = this.projectService.getImportMap(
54
+ this.state.data.genData!,
55
+ );
56
+ const rendered = getCommandTemplate(className, injectablesMap);
58
57
  const destination = path.join(targetDirectory, filename);
59
58
 
60
59
  // write contents
@@ -64,13 +63,13 @@ export default class GenerateCommand extends AppTask {
64
63
 
65
64
  /**
66
65
  * Checks state for required fields. Executes prior to run method.
67
- * Skips validation if genTargetType is not set to command.
66
+ * Skips validation if genData.targetType is not set to command.
68
67
  */
69
68
  async preRun() {
70
- if (this.state.data.genTargetType !== GenTargetType.Command) {
69
+ if (this.state.data.genData!.targetType !== GenTargetType.Command) {
71
70
  return; // no validation on no-op flow
72
71
  }
73
- if (!this.state.data.genTargetName) {
72
+ if (!this.state.data.genData!.targetName) {
74
73
  throw new Error("Unable to determine targetName");
75
74
  }
76
75
  if (!this.state.data.project) {
@@ -80,56 +79,4 @@ export default class GenerateCommand extends AppTask {
80
79
  throw new Error("Unable to determine targetDirectory");
81
80
  }
82
81
  }
83
-
84
- /**
85
- * Prompt to select tasks to use in the command being generated.
86
- *
87
- * @param taskMappings the map to add picked tasks to import for the command
88
- */
89
- async addTasksToMap(taskMappings: Map<string, string>) {
90
- if (!this.state.data.project?.taskDestination) {
91
- return;
92
- }
93
-
94
- const taskFiles = this.fileService.getFilesInDir(
95
- this.state.data.project.taskDestination,
96
- );
97
-
98
- this.logger.debug(`Found ${taskFiles.length} task files`);
99
-
100
- // prompt for tasks to use in the new command
101
- const pickedTasks = await this.promptService.pickMultiple(
102
- "Include Tasks",
103
- taskFiles.map((tf) => ({
104
- name: this.utilService.titleizedToCase(
105
- this.utilService.titleizeAll(this.fileService.getFilenameNoExt(tf)),
106
- CaseType.PASCAL_CASE,
107
- ),
108
- value: tf,
109
- })),
110
- );
111
-
112
- this.logger.debug(`Selected ${pickedTasks.length} tasks`);
113
- if (!pickedTasks.length) {
114
- return;
115
- }
116
-
117
- // add them to the map
118
- for (const picked of pickedTasks) {
119
- const filename = this.fileService.getFilenameNoExt(picked);
120
- const taskClassName = this.utilService.titleizedToCase(
121
- this.utilService.titleizeAll(filename),
122
- CaseType.PASCAL_CASE,
123
- );
124
- const relativeSource = this.state.data.project!.commandDestination!;
125
- const relativeDest = picked;
126
- taskMappings.set(
127
- taskClassName,
128
- this.fileService
129
- .toRelativePath(relativeSource, relativeDest)
130
- // remove extension for typescript import
131
- .replace(ProjectService.defaults.extention, ""),
132
- );
133
- }
134
- }
135
82
  }
@@ -1,13 +1,13 @@
1
1
  import chalk from "chalk";
2
- import { AppTask } from "../../wrappers/app-task";
3
2
  import { autoInjectable } from "tsyringe";
4
3
  import { GenTargetType } from "../../types/state";
5
4
  import { ProjectService } from "../../services/project-service";
6
- import { UtilService } from "../../services/util-service";
7
- import { FileService } from "../../services/file-service";
8
5
  import { CaseType } from "../../types/format";
9
6
  import path from "path";
10
7
  import { getServiceTemplate } from "../../templates/service";
8
+ import { AppTask } from "../../wrappers/app-task";
9
+ import { FileService } from "../../services/file-service";
10
+ import { UtilService } from "../../services/util-service";
11
11
 
12
12
  /**
13
13
  * Generates a new service class
@@ -17,9 +17,9 @@ export default class GenerateService extends AppTask {
17
17
  loggerName = "Generate Service";
18
18
 
19
19
  constructor(
20
+ private fileService: FileService,
20
21
  private projectService: ProjectService,
21
22
  private utilService: UtilService,
22
- private fileService: FileService,
23
23
  ) {
24
24
  super();
25
25
  }
@@ -27,17 +27,17 @@ export default class GenerateService extends AppTask {
27
27
  /**
28
28
  * Generates a new service class file.
29
29
  *
30
- * @returns updated state with outputDestination set to generated result path.
30
+ * @returns updated state with outputDestination set to a generated result path.
31
31
  */
32
32
  async run() {
33
- if (this.state.data.genTargetType !== GenTargetType.Service) {
33
+ if (this.state.data.genData!.targetType !== GenTargetType.Service) {
34
34
  return;
35
35
  }
36
36
 
37
37
  this.logger.info(chalk.blueBright("Generating Service"));
38
38
  const { utilService, projectService } = this;
39
39
 
40
- const targetName = this.state.data.genTargetName!;
40
+ const targetName = this.state.data.genData!.targetName!;
41
41
  const targetDirectory = this.state.data.project!.serviceDestination!;
42
42
 
43
43
  // detect case
@@ -48,7 +48,10 @@ export default class GenerateService extends AppTask {
48
48
  CaseType.PASCAL_CASE,
49
49
  );
50
50
 
51
- const rendered = getServiceTemplate(className);
51
+ const injectableMappings = this.projectService.getImportMap(
52
+ this.state.data.genData!,
53
+ );
54
+ const rendered = getServiceTemplate(className, injectableMappings);
52
55
  const filename = `${utilService.titleizedToCase(targetName, convention)}${ProjectService.defaults.extention}`;
53
56
  const destination = path.join(targetDirectory, filename);
54
57
 
@@ -59,13 +62,13 @@ export default class GenerateService extends AppTask {
59
62
 
60
63
  /**
61
64
  * Checks state for required fields. Executes prior to run method.
62
- * Skips validation if genTargetType is not set to service.
65
+ * Skips validation if genData.targetType is not set to service.
63
66
  */
64
67
  async preRun() {
65
- if (this.state.data.genTargetType !== GenTargetType.Service) {
68
+ if (this.state.data.genData!.targetType !== GenTargetType.Service) {
66
69
  return; // no validation on no-op flow
67
70
  }
68
- if (!this.state.data.genTargetName) {
71
+ if (!this.state.data.genData!.targetName) {
69
72
  throw new Error("Unable to determine targetName");
70
73
  }
71
74
  if (!this.state.data.project) {