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.
- package/assets/yargs-template/task-runner/src/commands/verify.ts +3 -2
- package/assets/yargs-template/task-runner/src/services/banner-service.ts +13 -9
- package/assets/yargs-template/task-runner/src/tasks/banner/print-banner.ts +38 -0
- package/assets/yargs-template/task-runner/src/tasks/banner/resolve-banner-font.ts +70 -0
- package/assets/yargs-template/task-runner/src/types/state.ts +4 -0
- package/{dist/assets/yargs-template/task-runner/src/wrappers → assets/yargs-template/task-runner/src/wrappers/electives}/concurrent-task-group.ts +4 -4
- package/assets/yargs-template/task-runner/src/wrappers/electives/resolver-task.ts +87 -0
- package/assets/yargs-template/task-runner/src/wrappers/{sequential-task-group.ts → electives/sequential-task-group.ts} +4 -4
- package/assets/yargs-template/task-runner/tests/commands/verify.test.ts +14 -21
- package/dist/assets/yargs-template/task-runner/src/commands/verify.ts +3 -2
- package/dist/assets/yargs-template/task-runner/src/services/banner-service.ts +13 -9
- package/dist/assets/yargs-template/task-runner/src/tasks/banner/print-banner.ts +38 -0
- package/dist/assets/yargs-template/task-runner/src/tasks/banner/resolve-banner-font.ts +70 -0
- package/dist/assets/yargs-template/task-runner/src/types/state.ts +4 -0
- package/{assets/yargs-template/task-runner/src/wrappers → dist/assets/yargs-template/task-runner/src/wrappers/electives}/concurrent-task-group.ts +4 -4
- package/dist/assets/yargs-template/task-runner/src/wrappers/electives/resolver-task.ts +87 -0
- package/dist/assets/yargs-template/task-runner/src/wrappers/{sequential-task-group.ts → electives/sequential-task-group.ts} +4 -4
- package/dist/assets/yargs-template/task-runner/tests/commands/verify.test.ts +14 -21
- package/dist/package.json +2 -2
- package/dist/src/commands/gen.d.ts +2 -1
- package/dist/src/commands/gen.d.ts.map +1 -1
- package/dist/src/commands/gen.js +2 -0
- package/dist/src/commands/gen.js.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/services/file-service.d.ts.map +1 -1
- package/dist/src/services/file-service.js +2 -1
- package/dist/src/services/file-service.js.map +1 -1
- package/dist/src/services/project-service.d.ts +21 -0
- package/dist/src/services/project-service.d.ts.map +1 -1
- package/dist/src/services/project-service.js +41 -0
- package/dist/src/services/project-service.js.map +1 -1
- package/dist/src/services/templater-service.d.ts +1 -0
- package/dist/src/services/templater-service.d.ts.map +1 -1
- package/dist/src/services/templater-service.js +9 -3
- package/dist/src/services/templater-service.js.map +1 -1
- package/dist/src/tasks/generate/generate-command.d.ts +6 -14
- package/dist/src/tasks/generate/generate-command.d.ts.map +1 -1
- package/dist/src/tasks/generate/generate-command.js +15 -52
- package/dist/src/tasks/generate/generate-command.js.map +1 -1
- package/dist/src/tasks/generate/generate-service.d.ts +6 -6
- package/dist/src/tasks/generate/generate-service.d.ts.map +1 -1
- package/dist/src/tasks/generate/generate-service.js +17 -16
- package/dist/src/tasks/generate/generate-service.js.map +1 -1
- package/dist/src/tasks/generate/generate-task.d.ts +6 -6
- package/dist/src/tasks/generate/generate-task.d.ts.map +1 -1
- package/dist/src/tasks/generate/generate-task.js +17 -16
- package/dist/src/tasks/generate/generate-task.js.map +1 -1
- package/dist/src/tasks/generate/project-context-guard.d.ts +1 -1
- package/dist/src/tasks/generate/project-context-guard.js +1 -1
- package/dist/src/tasks/generate/resolve-injectables.d.ts +56 -0
- package/dist/src/tasks/generate/resolve-injectables.d.ts.map +1 -0
- package/dist/src/tasks/generate/resolve-injectables.js +134 -0
- package/dist/src/tasks/generate/resolve-injectables.js.map +1 -0
- package/dist/src/tasks/generate/select-gen-target-name.js +4 -4
- package/dist/src/tasks/generate/select-gen-target-name.js.map +1 -1
- package/dist/src/tasks/generate/select-gen-target.d.ts +1 -1
- package/dist/src/tasks/generate/select-gen-target.js +2 -2
- package/dist/src/tasks/generate/select-gen-target.js.map +1 -1
- package/dist/src/tasks/stdout/print-generated-results.js +2 -2
- package/dist/src/tasks/stdout/print-generated-results.js.map +1 -1
- package/dist/src/tasks/sync-configuration.d.ts +1 -1
- package/dist/src/tasks/sync-configuration.js +6 -6
- package/dist/src/tasks/sync-configuration.js.map +1 -1
- package/dist/src/templates/command.d.ts.map +1 -1
- package/dist/src/templates/command.js +8 -2
- package/dist/src/templates/command.js.map +1 -1
- package/dist/src/templates/service.d.ts +1 -1
- package/dist/src/templates/service.d.ts.map +1 -1
- package/dist/src/templates/service.js +29 -1
- package/dist/src/templates/service.js.map +1 -1
- package/dist/src/templates/task.d.ts +1 -1
- package/dist/src/templates/task.d.ts.map +1 -1
- package/dist/src/templates/task.js +37 -1
- package/dist/src/templates/task.js.map +1 -1
- package/dist/src/types/project.d.ts +4 -0
- package/dist/src/types/project.d.ts.map +1 -1
- package/dist/src/types/state.d.ts +7 -3
- package/dist/src/types/state.d.ts.map +1 -1
- package/dist/src/types/state.js.map +1 -1
- package/package.json +2 -2
- package/src/commands/gen.ts +2 -0
- package/src/index.ts +1 -0
- package/src/services/file-service.ts +2 -1
- package/src/services/project-service.ts +54 -0
- package/src/services/templater-service.ts +15 -3
- package/src/tasks/generate/generate-command.ts +14 -67
- package/src/tasks/generate/generate-service.ts +14 -11
- package/src/tasks/generate/generate-task.ts +14 -11
- package/src/tasks/generate/project-context-guard.ts +1 -1
- package/src/tasks/generate/resolve-injectables.ts +154 -0
- package/src/tasks/generate/select-gen-target-name.ts +4 -4
- package/src/tasks/generate/select-gen-target.ts +2 -2
- package/src/tasks/stdout/print-generated-results.ts +2 -2
- package/src/tasks/sync-configuration.ts +6 -6
- package/src/templates/command.ts +10 -2
- package/src/templates/service.ts +34 -2
- package/src/templates/task.ts +42 -2
- package/src/types/project.ts +5 -0
- package/src/types/state.ts +9 -3
- package/assets/yargs-template/task-runner/src/tasks/print-banner.ts +0 -73
- 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,
|
|
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,OAAO,EAAE,UAAU,EAAE,CAAC;YACxC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;YACtD,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,2DAA2D;QAC3D,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,OAAO,EAAE,UAAU,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACb,kGAAkG,CACnG,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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"./src/","sources":["src/templates/command.ts"],"names":[],"mappings":"
|
|
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
|
|
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":";;;
|
|
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":"
|
|
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
|
|
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":";;;
|
|
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":"
|
|
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
|
|
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":";;;
|
|
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"}
|
|
@@ -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
|
|
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;
|
|
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;
|
|
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
|
|
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
|
-
"
|
|
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",
|
package/src/commands/gen.ts
CHANGED
|
@@ -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
|
-
|
|
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(
|
|
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 {
|
|
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
|
|
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.
|
|
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.
|
|
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
|
|
56
|
-
|
|
57
|
-
|
|
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
|
|
66
|
+
* Skips validation if genData.targetType is not set to command.
|
|
68
67
|
*/
|
|
69
68
|
async preRun() {
|
|
70
|
-
if (this.state.data.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
65
|
+
* Skips validation if genData.targetType is not set to service.
|
|
63
66
|
*/
|
|
64
67
|
async preRun() {
|
|
65
|
-
if (this.state.data.
|
|
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.
|
|
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) {
|