task-script-support-cli 0.1.1 → 0.2.4

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 (246) 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 +9 -3
  62. package/dist/src/commands/about.d.ts +2 -2
  63. package/dist/src/commands/about.d.ts.map +1 -1
  64. package/dist/src/commands/about.js +2 -2
  65. package/dist/src/commands/about.js.map +1 -1
  66. package/dist/src/commands/configure.d.ts +8 -0
  67. package/dist/src/commands/configure.d.ts.map +1 -0
  68. package/dist/src/commands/configure.js +25 -0
  69. package/dist/src/commands/configure.js.map +1 -0
  70. package/dist/src/commands/gen.d.ts +9 -7
  71. package/dist/src/commands/gen.d.ts.map +1 -1
  72. package/dist/src/commands/gen.js +10 -6
  73. package/dist/src/commands/gen.js.map +1 -1
  74. package/dist/src/commands/new.d.ts +8 -0
  75. package/dist/src/commands/new.d.ts.map +1 -0
  76. package/dist/src/commands/new.js +25 -0
  77. package/dist/src/commands/new.js.map +1 -0
  78. package/dist/src/index.js +10 -0
  79. package/dist/src/index.js.map +1 -1
  80. package/dist/src/services/cache-service.d.ts +11 -0
  81. package/dist/src/services/cache-service.d.ts.map +1 -0
  82. package/dist/src/services/cache-service.js +64 -0
  83. package/dist/src/services/cache-service.js.map +1 -0
  84. package/dist/src/services/file-service.d.ts +8 -2
  85. package/dist/src/services/file-service.d.ts.map +1 -1
  86. package/dist/src/services/file-service.js +38 -6
  87. package/dist/src/services/file-service.js.map +1 -1
  88. package/dist/src/services/log-service.d.ts +1 -0
  89. package/dist/src/services/log-service.d.ts.map +1 -1
  90. package/dist/src/services/log-service.js +14 -1
  91. package/dist/src/services/log-service.js.map +1 -1
  92. package/dist/src/services/project-service.d.ts +3 -3
  93. package/dist/src/services/project-service.d.ts.map +1 -1
  94. package/dist/src/services/project-service.js +10 -10
  95. package/dist/src/services/project-service.js.map +1 -1
  96. package/dist/src/services/prompt-service.d.ts +34 -0
  97. package/dist/src/services/prompt-service.d.ts.map +1 -0
  98. package/dist/src/services/prompt-service.js +80 -0
  99. package/dist/src/services/prompt-service.js.map +1 -0
  100. package/dist/src/services/spawn-service.d.ts +2 -1
  101. package/dist/src/services/spawn-service.d.ts.map +1 -1
  102. package/dist/src/services/spawn-service.js +16 -1
  103. package/dist/src/services/spawn-service.js.map +1 -1
  104. package/dist/src/services/util-service.d.ts +2 -0
  105. package/dist/src/services/util-service.d.ts.map +1 -1
  106. package/dist/src/services/util-service.js +4 -0
  107. package/dist/src/services/util-service.js.map +1 -1
  108. package/dist/src/tasks/check-env.d.ts +3 -2
  109. package/dist/src/tasks/check-env.d.ts.map +1 -1
  110. package/dist/src/tasks/check-env.js +11 -3
  111. package/dist/src/tasks/check-env.js.map +1 -1
  112. package/dist/src/tasks/configure.d.ts +44 -0
  113. package/dist/src/tasks/configure.d.ts.map +1 -0
  114. package/dist/src/tasks/configure.js +102 -0
  115. package/dist/src/tasks/configure.js.map +1 -0
  116. package/dist/src/tasks/create-new-project.d.ts +26 -0
  117. package/dist/src/tasks/create-new-project.d.ts.map +1 -0
  118. package/dist/src/tasks/create-new-project.js +76 -0
  119. package/dist/src/tasks/create-new-project.js.map +1 -0
  120. package/dist/src/tasks/generate/generate-command.d.ts +35 -0
  121. package/dist/src/tasks/generate/generate-command.d.ts.map +1 -0
  122. package/dist/src/tasks/generate/generate-command.js +128 -0
  123. package/dist/src/tasks/generate/generate-command.js.map +1 -0
  124. package/dist/src/tasks/generate/generate-service.d.ts +30 -0
  125. package/dist/src/tasks/generate/generate-service.d.ts.map +1 -0
  126. package/dist/src/tasks/{generate-service.js → generate/generate-service.js} +32 -31
  127. package/dist/src/tasks/generate/generate-service.js.map +1 -0
  128. package/dist/src/tasks/generate/generate-task.d.ts +30 -0
  129. package/dist/src/tasks/generate/generate-task.d.ts.map +1 -0
  130. package/dist/src/tasks/{generate-task.js → generate/generate-task.js} +32 -31
  131. package/dist/src/tasks/generate/generate-task.js.map +1 -0
  132. package/dist/src/tasks/generate/select-gen-target-name.d.ts +15 -0
  133. package/dist/src/tasks/generate/select-gen-target-name.d.ts.map +1 -0
  134. package/dist/src/tasks/generate/select-gen-target-name.js +59 -0
  135. package/dist/src/tasks/generate/select-gen-target-name.js.map +1 -0
  136. package/dist/src/tasks/generate/select-gen-target.d.ts +14 -0
  137. package/dist/src/tasks/generate/select-gen-target.d.ts.map +1 -0
  138. package/dist/src/tasks/generate/select-gen-target.js +60 -0
  139. package/dist/src/tasks/generate/select-gen-target.js.map +1 -0
  140. package/dist/src/tasks/{print-about-information.d.ts → stdout/print-about-information.d.ts} +1 -1
  141. package/dist/src/tasks/stdout/print-about-information.d.ts.map +1 -0
  142. package/dist/src/tasks/{print-about-information.js → stdout/print-about-information.js} +2 -2
  143. package/dist/src/tasks/stdout/print-about-information.js.map +1 -0
  144. package/dist/src/tasks/stdout/print-banner.d.ts +12 -0
  145. package/dist/src/tasks/stdout/print-banner.d.ts.map +1 -0
  146. package/dist/src/tasks/{print-banner.js → stdout/print-banner.js} +15 -11
  147. package/dist/src/tasks/stdout/print-banner.js.map +1 -0
  148. package/dist/src/tasks/{print-generated-results.d.ts → stdout/print-generated-results.d.ts} +2 -2
  149. package/dist/src/tasks/stdout/print-generated-results.d.ts.map +1 -0
  150. package/dist/src/tasks/{print-generated-results.js → stdout/print-generated-results.js} +16 -12
  151. package/dist/src/tasks/stdout/print-generated-results.js.map +1 -0
  152. package/dist/src/tasks/sync-configuration.d.ts +38 -0
  153. package/dist/src/tasks/sync-configuration.d.ts.map +1 -0
  154. package/dist/src/tasks/sync-configuration.js +121 -0
  155. package/dist/src/tasks/sync-configuration.js.map +1 -0
  156. package/dist/src/tasks/test-task.d.ts +10 -0
  157. package/dist/src/tasks/test-task.d.ts.map +1 -0
  158. package/dist/src/tasks/test-task.js +36 -0
  159. package/dist/src/tasks/test-task.js.map +1 -0
  160. package/dist/src/templates/command.js +2 -2
  161. package/dist/src/templates/command.js.map +1 -1
  162. package/dist/src/templates/service.js +1 -1
  163. package/dist/src/templates/service.js.map +1 -1
  164. package/dist/src/types/process.d.ts +2 -1
  165. package/dist/src/types/process.d.ts.map +1 -1
  166. package/dist/src/types/process.js +1 -0
  167. package/dist/src/types/process.js.map +1 -1
  168. package/dist/src/types/project.d.ts +12 -0
  169. package/dist/src/types/project.d.ts.map +1 -0
  170. package/dist/src/types/project.js +3 -0
  171. package/dist/src/types/project.js.map +1 -0
  172. package/dist/src/types/state.d.ts +5 -1
  173. package/dist/src/types/state.d.ts.map +1 -1
  174. package/dist/src/types/state.js +1 -0
  175. package/dist/src/types/state.js.map +1 -1
  176. package/dist/src/wrappers/app-task.d.ts +1 -0
  177. package/dist/src/wrappers/app-task.d.ts.map +1 -1
  178. package/dist/src/wrappers/app-task.js +4 -0
  179. package/dist/src/wrappers/app-task.js.map +1 -1
  180. package/dist/vitest.config.d.ts +3 -0
  181. package/dist/vitest.config.d.ts.map +1 -0
  182. package/dist/vitest.config.js +16 -0
  183. package/dist/vitest.config.js.map +1 -0
  184. package/package.json +9 -3
  185. package/src/commands/about.ts +2 -2
  186. package/src/commands/configure.ts +10 -0
  187. package/src/commands/gen.ts +10 -6
  188. package/src/commands/new.ts +10 -0
  189. package/src/index.ts +12 -0
  190. package/src/services/cache-service.ts +50 -0
  191. package/src/services/file-service.ts +46 -5
  192. package/src/services/log-service.ts +14 -1
  193. package/src/services/project-service.ts +8 -5
  194. package/src/services/prompt-service.ts +71 -0
  195. package/src/services/spawn-service.ts +15 -1
  196. package/src/services/util-service.ts +5 -0
  197. package/src/tasks/check-env.ts +10 -2
  198. package/src/tasks/configure.ts +105 -0
  199. package/src/tasks/create-new-project.ts +66 -0
  200. package/src/tasks/generate/generate-command.ts +136 -0
  201. package/src/tasks/generate/generate-service.ts +78 -0
  202. package/src/tasks/generate/generate-task.ts +79 -0
  203. package/src/tasks/generate/select-gen-target-name.ts +44 -0
  204. package/src/tasks/generate/select-gen-target.ts +46 -0
  205. package/src/tasks/{print-about-information.ts → stdout/print-about-information.ts} +2 -2
  206. package/src/tasks/stdout/print-banner.ts +41 -0
  207. package/src/tasks/stdout/print-generated-results.ts +37 -0
  208. package/src/tasks/sync-configuration.ts +129 -0
  209. package/src/tasks/test-task.ts +20 -0
  210. package/src/templates/command.ts +2 -2
  211. package/src/templates/service.ts +1 -1
  212. package/src/types/process.ts +1 -0
  213. package/src/types/project.ts +12 -0
  214. package/src/types/state.ts +7 -1
  215. package/src/wrappers/app-task.ts +5 -0
  216. package/tests/index.spec.ts +8 -0
  217. package/tests/setup.ts +1 -0
  218. package/tsconfig.json +1 -1
  219. package/vitest.config.ts +14 -0
  220. package/dist/src/tasks/generate-command.d.ts +0 -23
  221. package/dist/src/tasks/generate-command.d.ts.map +0 -1
  222. package/dist/src/tasks/generate-command.js +0 -91
  223. package/dist/src/tasks/generate-command.js.map +0 -1
  224. package/dist/src/tasks/generate-service.d.ts +0 -26
  225. package/dist/src/tasks/generate-service.d.ts.map +0 -1
  226. package/dist/src/tasks/generate-service.js.map +0 -1
  227. package/dist/src/tasks/generate-task.d.ts +0 -26
  228. package/dist/src/tasks/generate-task.d.ts.map +0 -1
  229. package/dist/src/tasks/generate-task.js.map +0 -1
  230. package/dist/src/tasks/print-about-information.d.ts.map +0 -1
  231. package/dist/src/tasks/print-about-information.js.map +0 -1
  232. package/dist/src/tasks/print-banner.d.ts +0 -12
  233. package/dist/src/tasks/print-banner.d.ts.map +0 -1
  234. package/dist/src/tasks/print-banner.js.map +0 -1
  235. package/dist/src/tasks/print-generated-results.d.ts.map +0 -1
  236. package/dist/src/tasks/print-generated-results.js.map +0 -1
  237. package/dist/src/tasks/select-gen-target.d.ts +0 -9
  238. package/dist/src/tasks/select-gen-target.d.ts.map +0 -1
  239. package/dist/src/tasks/select-gen-target.js +0 -44
  240. package/dist/src/tasks/select-gen-target.js.map +0 -1
  241. package/src/tasks/generate-command.ts +0 -87
  242. package/src/tasks/generate-service.ts +0 -82
  243. package/src/tasks/generate-task.ts +0 -83
  244. package/src/tasks/print-banner.ts +0 -37
  245. package/src/tasks/print-generated-results.ts +0 -36
  246. package/src/tasks/select-gen-target.ts +0 -29
@@ -0,0 +1,42 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { describe, it, expect, vi } from "vitest";
3
+ import PrintBanner from "../../src/tasks/print-banner";
4
+ import CheckEnv from "../../src/tasks/check-env";
5
+ import { container } from "tsyringe";
6
+ import { CommandService } from "task-script-support";
7
+ import { AppStateData, CLIArgs } from "../../src/types/state";
8
+
9
+ // Mock the tasks and their run methods
10
+ vi.mock("../../src/tasks/print-banner", () => {
11
+ const PrintBannerMock = vi.fn();
12
+ PrintBannerMock.prototype.run = vi.fn();
13
+ return { default: PrintBannerMock };
14
+ });
15
+
16
+ vi.mock("../../src/tasks/check-env", () => {
17
+ const CheckEnvMock = vi.fn();
18
+ CheckEnvMock.prototype.run = vi.fn();
19
+ return { default: CheckEnvMock };
20
+ });
21
+
22
+ describe("verify command", () => {
23
+ it("should run PrintBanner and then CheckEnv", async () => {
24
+ const tasks = [PrintBanner, CheckEnv];
25
+ container.register("Args", { useValue: [] });
26
+
27
+ // when
28
+ await new CommandService<AppStateData, CLIArgs>().runTasks(
29
+ tasks,
30
+ {} as CLIArgs,
31
+ );
32
+
33
+ expect(PrintBanner).toHaveBeenCalled();
34
+ expect(CheckEnv).toHaveBeenCalled();
35
+
36
+ const printBannerInstance = (PrintBanner as any).mock.instances[0];
37
+ const checkEnvInstance = (CheckEnv as any).mock.instances[0];
38
+
39
+ expect(printBannerInstance.run).toHaveBeenCalled();
40
+ expect(checkEnvInstance.run).toHaveBeenCalled();
41
+ });
42
+ });
@@ -0,0 +1,132 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { describe, it, expect, vi, beforeEach } from "vitest";
3
+ import { SpawnService } from "../../src/services/spawn-service";
4
+ import childProcess from "node:child_process";
5
+ import { fail } from "node:assert";
6
+
7
+ const hoisted = vi.hoisted(() => {
8
+ return {
9
+ spawn: vi.fn(),
10
+ };
11
+ });
12
+
13
+ vi.mock("node:child_process", async (importOriginal) => {
14
+ const mod = await importOriginal<typeof import("node:child_process")>();
15
+ return {
16
+ ...mod,
17
+ default: {
18
+ ...mod,
19
+ execSync: vi.fn(),
20
+ exec: vi.fn(),
21
+ },
22
+ spawn: hoisted.spawn,
23
+ };
24
+ });
25
+
26
+ describe("SpawnService", () => {
27
+ let spawnService: SpawnService;
28
+
29
+ beforeEach(() => {
30
+ spawnService = new SpawnService();
31
+ vi.resetAllMocks();
32
+ });
33
+
34
+ describe("execSync", () => {
35
+ it("should call execSync with the correct command", () => {
36
+ const command = "ls -la";
37
+ (childProcess.execSync as any).mockReturnValue("output");
38
+ const result = spawnService.execSync(command);
39
+ expect(childProcess.execSync).toHaveBeenCalledWith(command);
40
+ expect(result).toBe("output");
41
+ });
42
+
43
+ it("should throw an error if execSync throws", () => {
44
+ const command = "invalid command";
45
+ (childProcess.execSync as any).mockImplementation(() => {
46
+ throw new Error("error");
47
+ });
48
+ expect(() => spawnService.execSync(command)).toThrow("error");
49
+ });
50
+ });
51
+
52
+ describe("exec", () => {
53
+ it("should call exec with the correct command", async () => {
54
+ const command = "ls -la";
55
+ const mockedCallback = (
56
+ _cmd: string,
57
+ callback: (err: Error | null, stdout?: string, stderr?: string) => void,
58
+ ) => {
59
+ callback(null, "output", undefined);
60
+ };
61
+ (childProcess.exec as any).mockReturnValue("output");
62
+ (childProcess.exec as any).mockImplementation(mockedCallback);
63
+ const { stdout: result } = await spawnService.exec(command);
64
+ expect(childProcess.exec).toHaveBeenCalledWith(
65
+ command,
66
+ expect.anything(),
67
+ );
68
+ expect(result).toBe("output");
69
+ expect(command).toBeTruthy();
70
+ });
71
+
72
+ it("should throw an error if exec throws", async () => {
73
+ const command = "invalid command";
74
+ (childProcess.exec as any).mockImplementation(
75
+ (
76
+ _cmd: string,
77
+ callback: (
78
+ err: Error | null,
79
+ stdout?: string,
80
+ stderr?: string,
81
+ ) => void,
82
+ ) => {
83
+ callback(new Error("error"), undefined, undefined);
84
+ },
85
+ );
86
+
87
+ try {
88
+ await spawnService.exec(command);
89
+ fail("should not get past errors");
90
+ } catch (err) {
91
+ expect((err as Error).message).toBe("error");
92
+ }
93
+ });
94
+ });
95
+
96
+ describe("backgroundExec", () => {
97
+ it("should call spawn with the correct command and args", () => {
98
+ const command = "node";
99
+ const args = ["script.js"];
100
+ const mockChildProcess = { unref: vi.fn() };
101
+ hoisted.spawn.mockReturnValue(mockChildProcess);
102
+ spawnService.backgroundExec(command, args);
103
+ expect(hoisted.spawn).toHaveBeenCalledWith(command, args, {
104
+ detached: true,
105
+ stdio: "ignore",
106
+ });
107
+ expect(mockChildProcess.unref).toHaveBeenCalled();
108
+ });
109
+ });
110
+
111
+ describe("isProcessCompleted", () => {
112
+ it("should return false if process.kill succeeds", () => {
113
+ const pid = 123;
114
+ const mockKill = vi.spyOn(process, "kill").mockImplementation(() => true);
115
+ const result = spawnService.isProcessCompleted(pid);
116
+ expect(result).toBe(false);
117
+ expect(mockKill).toHaveBeenCalledWith(pid, 0);
118
+ mockKill.mockRestore();
119
+ });
120
+
121
+ it("should return true if process.kill throws", () => {
122
+ const pid = 123;
123
+ const mockKill = vi.spyOn(process, "kill").mockImplementation(() => {
124
+ throw new Error("error");
125
+ });
126
+ const result = spawnService.isProcessCompleted(pid);
127
+ expect(result).toBe(true);
128
+ expect(mockKill).toHaveBeenCalledWith(pid, 0);
129
+ mockKill.mockRestore();
130
+ });
131
+ });
132
+ });
@@ -0,0 +1,36 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { UtilService } from "../../src/services/util-service";
3
+ import pkgJson from "../../package.json";
4
+
5
+ describe("UtilService", () => {
6
+ describe("titleize", () => {
7
+ it("should capitalize the first letter of a string", () => {
8
+ const utilService = new UtilService();
9
+ expect(utilService.titleize("hello")).toBe("Hello");
10
+ });
11
+
12
+ it("should return an empty string if given an empty string", () => {
13
+ const utilService = new UtilService();
14
+ expect(utilService.titleize("")).toBe("");
15
+ });
16
+
17
+ it("should handle single character strings", () => {
18
+ const utilService = new UtilService();
19
+ expect(utilService.titleize("a")).toBe("A");
20
+ });
21
+ });
22
+
23
+ describe("getAppName", () => {
24
+ it("should return the application name from package.json", () => {
25
+ const utilService = new UtilService();
26
+ expect(utilService.getAppName()).toBe(pkgJson.name);
27
+ });
28
+ });
29
+
30
+ describe("getAppVersion", () => {
31
+ it("should return the application version from package.json", () => {
32
+ const utilService = new UtilService();
33
+ expect(utilService.getAppVersion()).toBe(pkgJson.version);
34
+ });
35
+ });
36
+ });
@@ -0,0 +1 @@
1
+ import "reflect-metadata";
@@ -0,0 +1,30 @@
1
+ import { describe, it, expect, vi } from "vitest";
2
+ import CheckEnv from "../../src/tasks/check-env";
3
+ import { LogService } from "../../src/services/log-service";
4
+ import { CommandService } from "task-script-support";
5
+ import { AppStateData, CLIArgs } from "../../src/types/state";
6
+
7
+ describe("CheckEnv", () => {
8
+ it("should set environmentValidated to true", async () => {
9
+ const mockLogService = {
10
+ info: vi.fn(),
11
+ debug: vi.fn(),
12
+ } as unknown as LogService;
13
+ const mockCommandService = {
14
+ setData: vi.fn((state, data) => ({
15
+ ...state,
16
+ data: { ...state.data, ...data },
17
+ })),
18
+ } as unknown as CommandService<AppStateData, CLIArgs>;
19
+
20
+ const checkEnv = Object.create(CheckEnv.prototype);
21
+ checkEnv._commandService = mockCommandService;
22
+ checkEnv._logService = mockLogService;
23
+ checkEnv.state = { id: "test", args: [], data: {} };
24
+ await checkEnv.run();
25
+ expect(mockLogService.info).toHaveBeenCalledWith(
26
+ "Running Check Environment",
27
+ );
28
+ expect(checkEnv.state.data.environmentValidated).toBe(true);
29
+ });
30
+ });
@@ -0,0 +1,27 @@
1
+ {
2
+ "compilerOptions": {
3
+ "rootDir": ".",
4
+ "sourceRoot": "./src",
5
+ "outDir": "./dist",
6
+ "module": "node16",
7
+ "target": "esnext",
8
+ "lib": ["esnext"],
9
+ "types": ["node", "vitest"],
10
+ "sourceMap": true,
11
+ "declaration": true,
12
+ "declarationMap": true,
13
+ "noUncheckedIndexedAccess": true,
14
+ "exactOptionalPropertyTypes": true,
15
+ "strict": true,
16
+ "jsx": "react-jsx",
17
+ "resolveJsonModule": true,
18
+ "esModuleInterop": true,
19
+ "isolatedModules": true,
20
+ "noUncheckedSideEffectImports": true,
21
+ "experimentalDecorators": true,
22
+ "emitDecoratorMetadata": true,
23
+ "moduleDetection": "force",
24
+ "skipLibCheck": true
25
+ },
26
+ "exclude": ["node_modules", "dist", "tests"]
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],
9
+ coverage: {
10
+ provider: "v8",
11
+ reporter: ["text", "json", "html"],
12
+ },
13
+ },
14
+ });
@@ -0,0 +1,3 @@
1
+ # Ignore artifacts:
2
+ build
3
+ coverage
@@ -0,0 +1,34 @@
1
+ {
2
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
3
+ "version": "0.2.0",
4
+ "configurations": [
5
+ {
6
+ "name": "Start Verify --Env 'test'",
7
+ "request": "launch",
8
+ "runtimeArgs": ["start", "verify", "-d"],
9
+ "runtimeExecutable": "npm",
10
+ "skipFiles": ["<node_internals>/**"],
11
+ "type": "node"
12
+ },
13
+
14
+ {
15
+ "name": "Launch with Random Banner Font",
16
+ "request": "launch",
17
+ "runtimeArgs": ["start", "verify", "-d", "--rf"],
18
+ "runtimeExecutable": "npm",
19
+ "skipFiles": ["<node_internals>/**"],
20
+ "type": "node"
21
+ },
22
+
23
+ {
24
+ "type": "node",
25
+ "request": "launch",
26
+ "name": "Launch Program 2",
27
+ "skipFiles": ["<node_internals>/**"],
28
+ "program": "${workspaceFolder}/dist/src/index.js",
29
+ "preLaunchTask": "tsc: build - tsconfig.json",
30
+ "outFiles": ["${workspaceFolder}/dist/**/*.js"],
31
+ "args": ["verify"]
32
+ }
33
+ ]
34
+ }
@@ -0,0 +1,11 @@
1
+ import eslint from "@eslint/js";
2
+ import { defineConfig, globalIgnores } from "eslint/config";
3
+ import tseslint from "typescript-eslint";
4
+
5
+ export default defineConfig([
6
+ {
7
+ extends: [eslint.configs.recommended, tseslint.configs.recommended],
8
+ files: ["./src/**/*.ts", "./tests/**/*.ts"],
9
+ },
10
+ globalIgnores(["dist/*"]),
11
+ ]);
@@ -0,0 +1,21 @@
1
+ #!/bin/bash
2
+
3
+ SOURCE_LN=$(echo `pwd`/task-runner)
4
+ DEST_DIR="$HOME/.scripts"
5
+ DEST_LN="$DEST_DIR/task-runner"
6
+
7
+ npm i
8
+
9
+ npm run build
10
+
11
+ mkdir -p "$DEST_DIR"
12
+
13
+ echo "Creating SymLink:"
14
+ echo " $SOURCE_LN -> $DEST_LN"
15
+
16
+ ln -s "$SOURCE_LN" "$DEST_LN"
17
+
18
+ echo 'Installed local client as task-runner'
19
+ echo;
20
+ echo 'Try: task-runner -h'
21
+ echo;