task-script-support-cli 0.1.1 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/assets/yargs-template/task-runner/.prettierignore +3 -0
  2. package/assets/yargs-template/task-runner/.prettierrc +1 -0
  3. package/assets/yargs-template/task-runner/.vscode/launch.json +34 -0
  4. package/assets/yargs-template/task-runner/eslint.config.ts +11 -0
  5. package/assets/yargs-template/task-runner/install-link.sh +21 -0
  6. package/assets/yargs-template/task-runner/package-lock.json +3387 -0
  7. package/assets/yargs-template/task-runner/package.json +51 -0
  8. package/assets/yargs-template/task-runner/src/commands/verify.ts +10 -0
  9. package/assets/yargs-template/task-runner/src/index.ts +46 -0
  10. package/assets/yargs-template/task-runner/src/services/banner-service.ts +38 -0
  11. package/assets/yargs-template/task-runner/src/services/log-service.ts +48 -0
  12. package/assets/yargs-template/task-runner/src/services/spawn-service.ts +87 -0
  13. package/assets/yargs-template/task-runner/src/services/util-service.ts +28 -0
  14. package/assets/yargs-template/task-runner/src/tasks/check-env.ts +49 -0
  15. package/assets/yargs-template/task-runner/src/tasks/log-state.ts +22 -0
  16. package/assets/yargs-template/task-runner/src/tasks/print-banner.ts +73 -0
  17. package/assets/yargs-template/task-runner/src/types/process.ts +9 -0
  18. package/assets/yargs-template/task-runner/src/types/state.ts +31 -0
  19. package/assets/yargs-template/task-runner/src/wrappers/app-task.ts +42 -0
  20. package/assets/yargs-template/task-runner/src/wrappers/command.ts +20 -0
  21. package/assets/yargs-template/task-runner/src/wrappers/dependencies.ts +24 -0
  22. package/assets/yargs-template/task-runner/task-runner +3 -0
  23. package/assets/yargs-template/task-runner/templater.sh +57 -0
  24. package/assets/yargs-template/task-runner/tests/commands/verify.test.ts +42 -0
  25. package/assets/yargs-template/task-runner/tests/services/spawn-service.test.ts +132 -0
  26. package/assets/yargs-template/task-runner/tests/services/util-service.test.ts +36 -0
  27. package/assets/yargs-template/task-runner/tests/setup.ts +1 -0
  28. package/assets/yargs-template/task-runner/tests/tasks/check-env.test.ts +30 -0
  29. package/assets/yargs-template/task-runner/tsconfig.json +27 -0
  30. package/assets/yargs-template/task-runner/vitest.config.ts +14 -0
  31. package/dist/assets/yargs-template/task-runner/.prettierignore +3 -0
  32. package/dist/assets/yargs-template/task-runner/.prettierrc +1 -0
  33. package/dist/assets/yargs-template/task-runner/.vscode/launch.json +34 -0
  34. package/dist/assets/yargs-template/task-runner/eslint.config.ts +11 -0
  35. package/dist/assets/yargs-template/task-runner/install-link.sh +21 -0
  36. package/dist/assets/yargs-template/task-runner/package-lock.json +3387 -0
  37. package/dist/assets/yargs-template/task-runner/package.json +51 -0
  38. package/dist/assets/yargs-template/task-runner/src/commands/verify.ts +10 -0
  39. package/dist/assets/yargs-template/task-runner/src/index.ts +46 -0
  40. package/dist/assets/yargs-template/task-runner/src/services/banner-service.ts +38 -0
  41. package/dist/assets/yargs-template/task-runner/src/services/log-service.ts +48 -0
  42. package/dist/assets/yargs-template/task-runner/src/services/spawn-service.ts +87 -0
  43. package/dist/assets/yargs-template/task-runner/src/services/util-service.ts +28 -0
  44. package/dist/assets/yargs-template/task-runner/src/tasks/check-env.ts +49 -0
  45. package/dist/assets/yargs-template/task-runner/src/tasks/log-state.ts +22 -0
  46. package/dist/assets/yargs-template/task-runner/src/tasks/print-banner.ts +73 -0
  47. package/dist/assets/yargs-template/task-runner/src/types/process.ts +9 -0
  48. package/dist/assets/yargs-template/task-runner/src/types/state.ts +31 -0
  49. package/dist/assets/yargs-template/task-runner/src/wrappers/app-task.ts +42 -0
  50. package/dist/assets/yargs-template/task-runner/src/wrappers/command.ts +20 -0
  51. package/dist/assets/yargs-template/task-runner/src/wrappers/dependencies.ts +24 -0
  52. package/dist/assets/yargs-template/task-runner/task-runner +3 -0
  53. package/dist/assets/yargs-template/task-runner/templater.sh +57 -0
  54. package/dist/assets/yargs-template/task-runner/tests/commands/verify.test.ts +42 -0
  55. package/dist/assets/yargs-template/task-runner/tests/services/spawn-service.test.ts +132 -0
  56. package/dist/assets/yargs-template/task-runner/tests/services/util-service.test.ts +36 -0
  57. package/dist/assets/yargs-template/task-runner/tests/setup.ts +1 -0
  58. package/dist/assets/yargs-template/task-runner/tests/tasks/check-env.test.ts +30 -0
  59. package/dist/assets/yargs-template/task-runner/tsconfig.json +27 -0
  60. package/dist/assets/yargs-template/task-runner/vitest.config.ts +14 -0
  61. package/dist/package.json +8 -3
  62. package/dist/src/commands/gen.d.ts +3 -1
  63. package/dist/src/commands/gen.d.ts.map +1 -1
  64. package/dist/src/commands/gen.js +4 -0
  65. package/dist/src/commands/gen.js.map +1 -1
  66. package/dist/src/commands/new.d.ts +8 -0
  67. package/dist/src/commands/new.d.ts.map +1 -0
  68. package/dist/src/commands/new.js +25 -0
  69. package/dist/src/commands/new.js.map +1 -0
  70. package/dist/src/index.js +6 -0
  71. package/dist/src/index.js.map +1 -1
  72. package/dist/src/services/cache-service.d.ts +11 -0
  73. package/dist/src/services/cache-service.d.ts.map +1 -0
  74. package/dist/src/services/cache-service.js +64 -0
  75. package/dist/src/services/cache-service.js.map +1 -0
  76. package/dist/src/services/file-service.d.ts +5 -1
  77. package/dist/src/services/file-service.d.ts.map +1 -1
  78. package/dist/src/services/file-service.js +16 -2
  79. package/dist/src/services/file-service.js.map +1 -1
  80. package/dist/src/services/log-service.d.ts.map +1 -1
  81. package/dist/src/services/log-service.js +7 -1
  82. package/dist/src/services/log-service.js.map +1 -1
  83. package/dist/src/services/project-service.d.ts +2 -2
  84. package/dist/src/services/project-service.d.ts.map +1 -1
  85. package/dist/src/services/project-service.js +5 -7
  86. package/dist/src/services/project-service.js.map +1 -1
  87. package/dist/src/services/prompt-service.d.ts +27 -0
  88. package/dist/src/services/prompt-service.d.ts.map +1 -0
  89. package/dist/src/services/prompt-service.js +67 -0
  90. package/dist/src/services/prompt-service.js.map +1 -0
  91. package/dist/src/services/spawn-service.d.ts +2 -1
  92. package/dist/src/services/spawn-service.d.ts.map +1 -1
  93. package/dist/src/services/spawn-service.js +16 -1
  94. package/dist/src/services/spawn-service.js.map +1 -1
  95. package/dist/src/services/util-service.d.ts +2 -0
  96. package/dist/src/services/util-service.d.ts.map +1 -1
  97. package/dist/src/services/util-service.js +4 -0
  98. package/dist/src/services/util-service.js.map +1 -1
  99. package/dist/src/tasks/check-env.d.ts +3 -2
  100. package/dist/src/tasks/check-env.d.ts.map +1 -1
  101. package/dist/src/tasks/check-env.js +11 -3
  102. package/dist/src/tasks/check-env.js.map +1 -1
  103. package/dist/src/tasks/create-new-project.d.ts +26 -0
  104. package/dist/src/tasks/create-new-project.d.ts.map +1 -0
  105. package/dist/src/tasks/create-new-project.js +76 -0
  106. package/dist/src/tasks/create-new-project.js.map +1 -0
  107. package/dist/src/tasks/generate-command.d.ts +18 -6
  108. package/dist/src/tasks/generate-command.d.ts.map +1 -1
  109. package/dist/src/tasks/generate-command.js +66 -29
  110. package/dist/src/tasks/generate-command.js.map +1 -1
  111. package/dist/src/tasks/generate-service.d.ts +10 -6
  112. package/dist/src/tasks/generate-service.d.ts.map +1 -1
  113. package/dist/src/tasks/generate-service.js +27 -26
  114. package/dist/src/tasks/generate-service.js.map +1 -1
  115. package/dist/src/tasks/generate-task.d.ts +10 -6
  116. package/dist/src/tasks/generate-task.d.ts.map +1 -1
  117. package/dist/src/tasks/generate-task.js +27 -26
  118. package/dist/src/tasks/generate-task.js.map +1 -1
  119. package/dist/src/tasks/print-banner.d.ts +3 -3
  120. package/dist/src/tasks/print-banner.d.ts.map +1 -1
  121. package/dist/src/tasks/print-banner.js +12 -8
  122. package/dist/src/tasks/print-banner.js.map +1 -1
  123. package/dist/src/tasks/print-generated-results.d.ts.map +1 -1
  124. package/dist/src/tasks/print-generated-results.js +13 -10
  125. package/dist/src/tasks/print-generated-results.js.map +1 -1
  126. package/dist/src/tasks/select-gen-target-name.d.ts +15 -0
  127. package/dist/src/tasks/select-gen-target-name.d.ts.map +1 -0
  128. package/dist/src/tasks/select-gen-target-name.js +58 -0
  129. package/dist/src/tasks/select-gen-target-name.js.map +1 -0
  130. package/dist/src/tasks/select-gen-target.d.ts +5 -0
  131. package/dist/src/tasks/select-gen-target.d.ts.map +1 -1
  132. package/dist/src/tasks/select-gen-target.js +16 -2
  133. package/dist/src/tasks/select-gen-target.js.map +1 -1
  134. package/dist/src/tasks/sync-configuration.d.ts +34 -0
  135. package/dist/src/tasks/sync-configuration.d.ts.map +1 -0
  136. package/dist/src/tasks/sync-configuration.js +116 -0
  137. package/dist/src/tasks/sync-configuration.js.map +1 -0
  138. package/dist/src/tasks/test-task.d.ts +10 -0
  139. package/dist/src/tasks/test-task.d.ts.map +1 -0
  140. package/dist/src/tasks/test-task.js +36 -0
  141. package/dist/src/tasks/test-task.js.map +1 -0
  142. package/dist/src/templates/command.js +2 -2
  143. package/dist/src/templates/command.js.map +1 -1
  144. package/dist/src/templates/service.js +1 -1
  145. package/dist/src/templates/service.js.map +1 -1
  146. package/dist/src/types/process.d.ts +2 -1
  147. package/dist/src/types/process.d.ts.map +1 -1
  148. package/dist/src/types/process.js +1 -0
  149. package/dist/src/types/process.js.map +1 -1
  150. package/dist/src/types/project.d.ts +12 -0
  151. package/dist/src/types/project.d.ts.map +1 -0
  152. package/dist/src/types/project.js +3 -0
  153. package/dist/src/types/project.js.map +1 -0
  154. package/dist/src/types/state.d.ts +5 -1
  155. package/dist/src/types/state.d.ts.map +1 -1
  156. package/dist/src/types/state.js +1 -0
  157. package/dist/src/types/state.js.map +1 -1
  158. package/dist/vitest.config.d.ts +3 -0
  159. package/dist/vitest.config.d.ts.map +1 -0
  160. package/dist/vitest.config.js +16 -0
  161. package/dist/vitest.config.js.map +1 -0
  162. package/package.json +8 -3
  163. package/src/commands/gen.ts +4 -0
  164. package/src/commands/new.ts +10 -0
  165. package/src/index.ts +7 -0
  166. package/src/services/cache-service.ts +50 -0
  167. package/src/services/file-service.ts +18 -1
  168. package/src/services/log-service.ts +6 -1
  169. package/src/services/project-service.ts +2 -2
  170. package/src/services/prompt-service.ts +60 -0
  171. package/src/services/spawn-service.ts +15 -1
  172. package/src/services/util-service.ts +5 -0
  173. package/src/tasks/check-env.ts +10 -2
  174. package/src/tasks/create-new-project.ts +66 -0
  175. package/src/tasks/generate-command.ts +84 -31
  176. package/src/tasks/generate-service.ts +24 -28
  177. package/src/tasks/generate-task.ts +24 -28
  178. package/src/tasks/print-banner.ts +10 -6
  179. package/src/tasks/print-generated-results.ts +15 -15
  180. package/src/tasks/select-gen-target-name.ts +44 -0
  181. package/src/tasks/select-gen-target.ts +16 -1
  182. package/src/tasks/sync-configuration.ts +121 -0
  183. package/src/tasks/test-task.ts +20 -0
  184. package/src/templates/command.ts +2 -2
  185. package/src/templates/service.ts +1 -1
  186. package/src/types/process.ts +1 -0
  187. package/src/types/project.ts +12 -0
  188. package/src/types/state.ts +7 -1
  189. package/tests/index.spec.ts +8 -0
  190. package/tests/setup.ts +1 -0
  191. package/tsconfig.json +1 -1
  192. package/vitest.config.ts +14 -0
@@ -1,5 +1,5 @@
1
1
  import { autoInjectable } from "tsyringe";
2
- import { AppState } from "../types/state";
2
+ import { AppState, EnvironmentConfigKeys } from "../types/state";
3
3
  import { AppTask } from "../wrappers/app-task";
4
4
  import { BannerService } from "../services/banner-service";
5
5
  import { UtilService } from "../services/util-service";
@@ -10,8 +10,8 @@ export default class PrintBanner extends AppTask {
10
10
  loggerName = "Print Banner";
11
11
 
12
12
  constructor(
13
- private bannnerSvc: BannerService,
14
- private utilSvc: UtilService,
13
+ private bannnerService: BannerService,
14
+ private utilService: UtilService,
15
15
  ) {
16
16
  super();
17
17
  }
@@ -19,19 +19,23 @@ export default class PrintBanner extends AppTask {
19
19
  async run(): Promise<Partial<AppState> | void> {
20
20
  let font = "";
21
21
 
22
+ if (process.env[EnvironmentConfigKeys.TSSC_SILENCE_BANNER]) {
23
+ return;
24
+ }
25
+
22
26
  if (this.argService.hasFlag("randomFont")) {
23
- font = await this.bannnerSvc.getRandomFont();
27
+ font = await this.bannnerService.getRandomFont();
24
28
  console.log(`Using random font ${font}`);
25
29
  }
26
30
 
27
31
  console.log(
28
32
  chalk.blueBright(
29
- await this.bannnerSvc.toBanner(this.utilSvc.getAppName(), font),
33
+ await this.bannnerService.toBanner(this.utilService.getAppName(), font),
30
34
  ),
31
35
  );
32
36
 
33
37
  this.setData({
34
- banner: { font: font || this.bannnerSvc.defaultFontFamily },
38
+ banner: { font: font || this.bannnerService.defaultFontFamily },
35
39
  });
36
40
  }
37
41
  }
@@ -1,8 +1,8 @@
1
1
  import chalk from "chalk";
2
2
  import { AppTask } from "../wrappers/app-task";
3
3
  import { autoInjectable } from "tsyringe";
4
- import { GenTargetType } from "../types/state";
5
4
  import { UtilService } from "../services/util-service";
5
+ import { ProjectService } from "../services/project-service";
6
6
 
7
7
  /**
8
8
  * Prints the generated output results
@@ -16,21 +16,21 @@ export default class PrintGeneratedResults extends AppTask {
16
16
  }
17
17
 
18
18
  async run() {
19
- const target: GenTargetType = this.state.data.genTargetType!;
20
- this.logger.info(
21
- chalk.blueBright(
22
- `Generated Results for ${this.utilService.titleize(target)}`,
23
- ),
24
- );
19
+ const genType: string = this.state.data.genTargetType
20
+ ? this.utilService.titleize(this.state.data.genTargetType)
21
+ : "Project";
25
22
 
26
- setTimeout(() => {
27
- console.log(`
28
-
29
- Generated new file:
23
+ this.logger.info(`Generated Results for ${chalk.blueBright(genType)}`);
30
24
 
31
- ${this.state.data.outputDestination || "<None>"}
32
-
33
- `);
34
- }, 1000);
25
+ // wait for logs to flush before mixing in console.log
26
+ await this.utilService.sleep(200);
27
+
28
+ console.log(`
29
+
30
+ Generated new ${this.state.data.outputDestination?.includes(ProjectService.defaults.extention) ? "file" : "project"}:
31
+
32
+ ${this.state.data.outputDestination || "<None>"}
33
+
34
+ `);
35
35
  }
36
36
  }
@@ -0,0 +1,44 @@
1
+ import chalk from "chalk";
2
+ import { AppTask } from "../wrappers/app-task";
3
+ import { autoInjectable } from "tsyringe";
4
+ import { PromptService } from "../services/prompt-service";
5
+ import { ProjectService } from "../services/project-service";
6
+ import { UtilService } from "../services/util-service";
7
+
8
+ /**
9
+ * SelectGenTargetName
10
+ */
11
+ @autoInjectable()
12
+ export default class SelectGenTargetName extends AppTask {
13
+ loggerName = "SelectGenTargetName";
14
+ constructor(
15
+ private promptService: PromptService,
16
+ private utilService: UtilService,
17
+ ) {
18
+ super();
19
+ }
20
+
21
+ async run() {
22
+ this.logger.info(chalk.blueBright("Checking Target Name"));
23
+
24
+ let targetName = this.argService.getTargetName();
25
+ if (!targetName) {
26
+ targetName =
27
+ (await this.promptService.getInput(
28
+ `Enter Name for ${chalk.blueBright(this.utilService.titleize(this.state.data.genTargetType!))}`,
29
+ )) || ProjectService.defaults.targetName;
30
+ }
31
+ if (!targetName) {
32
+ throw new Error("Unable to resolve targetName");
33
+ }
34
+
35
+ this.logger.debug(`Target selected: ${chalk.magentaBright(targetName)}`);
36
+ this.setData({ genTargetName: targetName });
37
+ }
38
+
39
+ async preRun() {
40
+ if (!this.state.data.genTargetType) {
41
+ throw new Error("Unable to determine genTargetType");
42
+ }
43
+ }
44
+ }
@@ -2,6 +2,7 @@ import chalk from "chalk";
2
2
  import { AppTask } from "../wrappers/app-task";
3
3
  import { autoInjectable } from "tsyringe";
4
4
  import { GenTargetType } from "../types/state";
5
+ import { PromptService } from "../services/prompt-service";
5
6
 
6
7
  /**
7
8
  * Sets the genTargetType based on input
@@ -9,6 +10,11 @@ import { GenTargetType } from "../types/state";
9
10
  @autoInjectable()
10
11
  export default class SelectGenTarget extends AppTask {
11
12
  loggerName = "Select Target";
13
+
14
+ constructor(private promptService: PromptService) {
15
+ super();
16
+ }
17
+
12
18
  async run() {
13
19
  let target: GenTargetType = GenTargetType.Command;
14
20
  this.logger.info(chalk.blueBright("Checking Target"));
@@ -20,10 +26,19 @@ export default class SelectGenTarget extends AppTask {
20
26
  } else if (this.argService.hasFlag("command")) {
21
27
  target = GenTargetType.Command;
22
28
  } else {
23
- this.logger.warn(`Using default target: ${target}`);
29
+ target = await this.getGenTargetInput();
24
30
  }
25
31
 
26
32
  this.logger.debug(`Target selected: ${chalk.magentaBright(target)}`);
27
33
  this.setData({ genTargetType: target });
28
34
  }
35
+
36
+ async getGenTargetInput() {
37
+ const targetType: GenTargetType = await this.promptService.select(
38
+ `Select a type of ${chalk.blueBright("Resource")} to create`,
39
+ [GenTargetType.Command, GenTargetType.Service, GenTargetType.Task],
40
+ );
41
+
42
+ return targetType;
43
+ }
29
44
  }
@@ -0,0 +1,121 @@
1
+ import { autoInjectable } from "tsyringe";
2
+ import { AppTask } from "../wrappers/app-task";
3
+ import { PromptService } from "../services/prompt-service";
4
+ import chalk from "chalk";
5
+ import { CacheService } from "../services/cache-service";
6
+ import { ProjectConfig, ProjectData } from "../types/project";
7
+ import { GenTargetType } from "../types/state";
8
+ import { UtilService } from "../services/util-service";
9
+
10
+ @autoInjectable()
11
+ export class SyncConfiguration extends AppTask {
12
+ loggerName = "Sync Configuration";
13
+
14
+ constructor(
15
+ private promptService: PromptService,
16
+ private cacheService: CacheService,
17
+ private utilService: UtilService,
18
+ ) {
19
+ super();
20
+ }
21
+
22
+ async preRun() {
23
+ this.verifyState();
24
+ }
25
+
26
+ async run() {
27
+ this.logger.info(chalk.blueBright("Checking Cache"));
28
+ let project: ProjectConfig & ProjectData = this.state.data.project!;
29
+
30
+ // see if we have a project config in the cache with rootDir path as the key
31
+ const cachedProject = await this.cacheService.getProject(project.rootDir);
32
+ if (cachedProject) {
33
+ this.logger.debug(chalk.dim("loaded project from cache"));
34
+ project = { ...this.state.data.project!, ...cachedProject };
35
+ }
36
+
37
+ // get target destination if not cached yet
38
+ switch (this.state.data.genTargetType) {
39
+ case GenTargetType.Command:
40
+ project.commandDestination =
41
+ project.commandDestination || (await this.getDestination("command"));
42
+
43
+ this.logDestination(project.commandDestination);
44
+ break;
45
+ case GenTargetType.Service:
46
+ project.serviceDestination =
47
+ project.serviceDestination || (await this.getDestination("service"));
48
+
49
+ this.logDestination(project.serviceDestination);
50
+ break;
51
+ case GenTargetType.Task:
52
+ project.taskDestination =
53
+ project.taskDestination || (await this.getDestination("task"));
54
+
55
+ this.logDestination(project.taskDestination);
56
+ break;
57
+ default:
58
+ throw new Error(`Uknown target type: ${this.state.data.genTargetType}`);
59
+ }
60
+
61
+ // cache any changes
62
+ await this.cacheService.writeProject(project);
63
+ this.setData({ project });
64
+ }
65
+
66
+ /**
67
+ * Prints the target destination path string
68
+ *
69
+ * @param dest the destination path to log
70
+ * @returns
71
+ */
72
+ logDestination = (dest: string = "") =>
73
+ this.logger.debug(`Destination: ${chalk.magentaBright(dest)}`);
74
+
75
+ /**
76
+ * Gets the destination path for generating resources by resource type.
77
+ * If only one resource destination folder was found it is returned
78
+ * otherwise the user is prompted to select one from the found folders.
79
+ *
80
+ * @param keyType the type of destination to resolve
81
+ * @returns the path of the resolved destination
82
+ */
83
+ async getDestination(keyType: "command" | "task" | "service") {
84
+ const foldersKey: keyof typeof this.state.data.project =
85
+ `${keyType}Folders` as keyof typeof this.state.data.project;
86
+
87
+ const nonTestFolders: string[] = (
88
+ this.state.data.project![foldersKey] as string[]
89
+ ).filter((folder: string) => !(folder || "").includes("/tests/"));
90
+
91
+ // if we only have one folder found, use this as the destination
92
+ if (nonTestFolders.length === 1) {
93
+ return nonTestFolders[0] || "";
94
+ }
95
+
96
+ // otherwise prompt to pick one
97
+ const userSelection: string = await this.promptService.select(
98
+ `Multiple folders found. Select correct ${chalk.blueBright(this.utilService.titleize(keyType))} folder`,
99
+ nonTestFolders,
100
+ );
101
+ this.logger.debug(chalk.blackBright(`caching for next time`));
102
+ return userSelection;
103
+ }
104
+
105
+ /**
106
+ * Check we have all the required state set
107
+ */
108
+ verifyState() {
109
+ if (!this.state.data.project || !this.state.data.project.rootDir) {
110
+ throw new Error(
111
+ `Missing project rootDir! SyncConfiguration requires the CheckEnvironment task to be ran first.`,
112
+ );
113
+ }
114
+
115
+ if (!this.state.data.genTargetType) {
116
+ throw new Error(
117
+ `Missing genTargetType! SyncConfiguration requires the SelectGenTarget task to be ran first.`,
118
+ );
119
+ }
120
+ }
121
+ }
@@ -0,0 +1,20 @@
1
+ import { autoInjectable } from "tsyringe";
2
+ import { AppState } from "../types/state";
3
+ import { AppTask } from "../wrappers/app-task";
4
+ import chalk from "chalk";
5
+ import { PromptService } from "../services/prompt-service";
6
+
7
+ @autoInjectable()
8
+ export default class TestTask extends AppTask {
9
+ loggerName = "Testing Things";
10
+
11
+ constructor(private promptService: PromptService) {
12
+ super();
13
+ }
14
+
15
+ async run(): Promise<Partial<AppState> | void> {
16
+ // test task
17
+
18
+ console.log(chalk.magentaBright(JSON.stringify(this.state)));
19
+ }
20
+ }
@@ -7,12 +7,12 @@ import { Command } from "../wrappers/command";
7
7
  ${tasks
8
8
  .keys()
9
9
  .toArray()
10
- .map((k) => `import { ${k} } from "${tasks.get(k)}";`)
10
+ .map((k) => `import ${k} from "${tasks.get(k)}";`)
11
11
  .join("\n")}
12
12
 
13
13
  @singleton()
14
14
  export class ${className} extends Command {
15
- tasks = [${tasks.keys().toArray().join(",")}];
15
+ tasks = [${tasks.keys().toArray().join(", ")}];
16
16
  }
17
17
 
18
18
  `;
@@ -5,7 +5,7 @@ export const getServiceTemplate = (className: string) =>
5
5
  * ${className}
6
6
  */
7
7
  @singleton()
8
- export default class ${className} {
8
+ export class ${className} {
9
9
  constructor() {}
10
10
  }
11
11
 
@@ -15,4 +15,5 @@ export enum CLIOptions {
15
15
  command = "command",
16
16
  task = "task",
17
17
  targetName = "targetName",
18
+ name = "name",
18
19
  }
@@ -0,0 +1,12 @@
1
+ export interface ProjectConfig {
2
+ rootDir: string;
3
+ taskDestination?: string | undefined;
4
+ serviceDestination?: string | undefined;
5
+ commandDestination?: string | undefined;
6
+ }
7
+
8
+ export interface ProjectData {
9
+ taskFolders: string[];
10
+ serviceFolders: string[];
11
+ commandFolders: string[];
12
+ }
@@ -1,5 +1,6 @@
1
1
  import { CLIArg } from "./process";
2
2
  import { AppState as State, TaskClass } from "task-script-support";
3
+ import { ProjectConfig, ProjectData } from "./project";
3
4
 
4
5
  export enum GenTargetType {
5
6
  Command = "command",
@@ -8,12 +9,16 @@ export enum GenTargetType {
8
9
  }
9
10
 
10
11
  export interface AppStateData {
11
- readonly errorMessages?: string[];
12
12
  readonly banner?: {
13
13
  readonly font?: string;
14
14
  };
15
15
  readonly genTargetType?: GenTargetType;
16
+ readonly genTargetName?: string;
17
+
16
18
  readonly environmentValidated?: boolean;
19
+ readonly project?: ProjectConfig & ProjectData;
20
+
21
+ readonly errorMessages?: string[];
17
22
  readonly outputDestination?: string;
18
23
  }
19
24
 
@@ -23,6 +28,7 @@ export const EnvironmentConfigKeys = {
23
28
  NODE_ENV: "NODE_ENV",
24
29
  PINO_LOG_FILENAME: "PINO_LOG_FILENAME",
25
30
  PINO_LOG_TARGET: "PINO_LOG_TARGET",
31
+ TSSC_SILENCE_BANNER: "TSSC_SILENCE_BANNER",
26
32
  };
27
33
 
28
34
  export type AppState = State<AppStateData, CLIArg[]>;
@@ -0,0 +1,8 @@
1
+ import { describe, it, expect } from "vitest";
2
+
3
+ describe("index", () => {
4
+ it("should ...", () => {
5
+ // TODO: add tests
6
+ expect(1).toBeTruthy();
7
+ });
8
+ });
package/tests/setup.ts ADDED
@@ -0,0 +1 @@
1
+ import "reflect-metadata";
package/tsconfig.json CHANGED
@@ -23,5 +23,5 @@
23
23
  "moduleDetection": "force",
24
24
  "skipLibCheck": true
25
25
  },
26
- "exclude": ["node_modules", "dist", "tests"]
26
+ "exclude": ["node_modules", "dist", "tests", "assets"]
27
27
  }
@@ -0,0 +1,14 @@
1
+ const { defineConfig, configDefaults } = require("vitest/config");
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ globals: true,
6
+ environment: "node",
7
+ setupFiles: "./tests/setup.ts",
8
+ exclude: [...configDefaults.exclude, "assets/**/*", "dist/**/*"],
9
+ coverage: {
10
+ provider: "v8",
11
+ reporter: ["text", "json", "html"],
12
+ },
13
+ },
14
+ });