tsx-strict 0.1.2 → 0.2.0-canary

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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # `Tsx-Strict`
2
2
 
3
- Type-safe TSX runner with automatic type-checking
3
+ ### Type-safe TSX runner with automatic type-checking
4
4
 
5
5
  tsx-strict is a CLI tool that runs TypeScript files with TSX while providing real-time type checking. It combines the speed of tsx with the safety of TypeScript's compiler, ensuring your code is both executable and type-safe.
6
6
 
@@ -16,7 +16,7 @@ tsx-strict is a CLI tool that runs TypeScript files with TSX while providing rea
16
16
  ## Installation
17
17
 
18
18
  ```bash
19
- npm install -g tsx-strict
19
+ pnpm install -g tsx-strict
20
20
  ```
21
21
 
22
22
  Or use with npx:
@@ -68,7 +68,7 @@ tsx-strict src/index.ts
68
68
  ### Watch Mode with Custom TSC Arguments
69
69
 
70
70
  ```bash
71
- tsx-strict --watch --tsc-args --strict --exactOptionalPropertyTypes src/app.ts
71
+ tsx-strict --watch --tsc-args "--strict --exactOptionalPropertyTypes" src/app.ts
72
72
  ```
73
73
 
74
74
  ### Silent Mode
package/bin/tsx-strict.js CHANGED
File without changes
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dependency_extractor.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency_extractor.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/dependency_extractor.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const fs = __importStar(require("fs"));
37
+ const path = __importStar(require("path"));
38
+ const dependency_extractor_1 = require("../dependency-extractor");
39
+ jest.mock("fs");
40
+ jest.mock("path");
41
+ const mockFs = fs;
42
+ const mockPath = path;
43
+ describe("extractDependencies", () => {
44
+ beforeEach(() => {
45
+ jest.clearAllMocks();
46
+ mockPath.dirname.mockReturnValue("/test/dir");
47
+ mockPath.resolve.mockImplementation((...args) => args.join("/"));
48
+ });
49
+ it("should extract ES6 imports", () => {
50
+ const content = `
51
+ import foo from './foo';
52
+ import { bar } from './bar';
53
+ import * as baz from './baz';
54
+ `;
55
+ mockFs.existsSync.mockReturnValue(true);
56
+ const deps = (0, dependency_extractor_1.extractDependencies)(content, "/test/dir/index.js");
57
+ expect(deps).toContain("/test/dir/./foo");
58
+ expect(deps).toContain("/test/dir/./bar");
59
+ expect(deps).toContain("/test/dir/./baz");
60
+ });
61
+ it("should extract CommonJS requires", () => {
62
+ const content = `
63
+ const foo = require('./foo');
64
+ const bar = require("./bar");
65
+ `;
66
+ mockFs.existsSync.mockReturnValue(true);
67
+ const deps = (0, dependency_extractor_1.extractDependencies)(content, "/test/dir/index.js");
68
+ expect(deps).toContain("/test/dir/./foo");
69
+ expect(deps).toContain("/test/dir/./bar");
70
+ });
71
+ it("should extract dynamic imports", () => {
72
+ const content = `
73
+ const foo = import('./foo');
74
+ import('./bar').then(m => m.default);
75
+ `;
76
+ mockFs.existsSync.mockReturnValue(true);
77
+ const deps = (0, dependency_extractor_1.extractDependencies)(content, "/test/dir/index.js");
78
+ expect(deps).toContain("/test/dir/./foo");
79
+ expect(deps).toContain("/test/dir/./bar");
80
+ });
81
+ it("should skip node built-ins", () => {
82
+ const content = `
83
+ import fs from 'fs';
84
+ const path = require('path');
85
+ `;
86
+ const deps = (0, dependency_extractor_1.extractDependencies)(content, "/test/dir/index.js");
87
+ expect(deps).toHaveLength(0);
88
+ });
89
+ it("should skip external packages", () => {
90
+ const content = `
91
+ import react from 'react';
92
+ const lodash = require('lodash');
93
+ `;
94
+ const deps = (0, dependency_extractor_1.extractDependencies)(content, "/test/dir/index.js");
95
+ expect(deps).toHaveLength(0);
96
+ });
97
+ it("should handle absolute paths", () => {
98
+ const content = `import foo from '/absolute/path/foo';`;
99
+ mockFs.existsSync.mockReturnValue(true);
100
+ const deps = (0, dependency_extractor_1.extractDependencies)(content, "/test/dir/index.js");
101
+ expect(deps).toContain("/test/dir//absolute/path/foo");
102
+ });
103
+ });
104
+ describe("resolveWithExtensions", () => {
105
+ beforeEach(() => {
106
+ jest.clearAllMocks();
107
+ mockPath.join.mockImplementation((...args) => args.join("/"));
108
+ });
109
+ it("should return path if it exists", () => {
110
+ mockFs.existsSync.mockReturnValue(true);
111
+ const result = (0, dependency_extractor_1.resolveWithExtensions)("/test/file");
112
+ expect(result).toBe("/test/file");
113
+ });
114
+ it("should try extensions if base path does not exist", () => {
115
+ mockFs.existsSync
116
+ .mockReturnValueOnce(false)
117
+ .mockReturnValueOnce(false)
118
+ .mockReturnValueOnce(true);
119
+ const result = (0, dependency_extractor_1.resolveWithExtensions)("/test/file");
120
+ expect(result).toBe("/test/file.jsx");
121
+ });
122
+ it("should try index files in directory", () => {
123
+ mockFs.existsSync
124
+ .mockReturnValueOnce(false)
125
+ .mockReturnValueOnce(false)
126
+ .mockReturnValueOnce(false)
127
+ .mockReturnValueOnce(false)
128
+ .mockReturnValueOnce(false)
129
+ .mockReturnValueOnce(false)
130
+ .mockReturnValueOnce(false)
131
+ .mockReturnValueOnce(true);
132
+ mockFs.statSync.mockReturnValue({ isDirectory: () => true });
133
+ const result = (0, dependency_extractor_1.resolveWithExtensions)("/test/dir");
134
+ expect(result).toBe("/test/dir/index.js");
135
+ });
136
+ it("should return null if no resolution found", () => {
137
+ mockFs.existsSync.mockReturnValue(false);
138
+ const result = (0, dependency_extractor_1.resolveWithExtensions)("/test/nonexistent");
139
+ expect(result).toBeNull();
140
+ });
141
+ });
142
+ describe("getAllDependencies", () => {
143
+ beforeEach(() => {
144
+ jest.clearAllMocks();
145
+ mockPath.resolve.mockImplementation((...args) => args.join("/"));
146
+ mockPath.dirname.mockImplementation((p) => p.split("/").slice(0, -1).join("/"));
147
+ mockPath.extname.mockImplementation((p) => {
148
+ const parts = p.split(".");
149
+ return parts.length > 1 ? "." + parts[parts.length - 1] : "";
150
+ });
151
+ });
152
+ it("should return single file with no dependencies", () => {
153
+ mockFs.existsSync.mockReturnValue(true);
154
+ mockFs.readFileSync.mockReturnValue("const x = 1;");
155
+ const deps = (0, dependency_extractor_1.getAllDependencies)("/test/index.js");
156
+ expect(deps.size).toBe(1);
157
+ expect(deps.has("/test/index.js")).toBe(true);
158
+ });
159
+ it("should recursively find all dependencies", () => {
160
+ mockPath.resolve.mockImplementation((...args) => args
161
+ .filter((a) => a)
162
+ .join("/")
163
+ .replace(/\/\.\//g, "/"));
164
+ mockFs.existsSync.mockReturnValue(true);
165
+ mockFs.readFileSync
166
+ .mockReturnValueOnce(`import './foo';`)
167
+ .mockReturnValueOnce(`import './bar';`)
168
+ .mockReturnValueOnce(`const x = 1;`);
169
+ const deps = (0, dependency_extractor_1.getAllDependencies)("/test/index.js");
170
+ expect(deps.size).toBe(3);
171
+ });
172
+ it("should respect maxDepth option", () => {
173
+ mockFs.existsSync.mockReturnValue(true);
174
+ mockFs.readFileSync
175
+ .mockReturnValueOnce(`import './foo';`)
176
+ .mockReturnValueOnce(`import './bar';`);
177
+ const deps = (0, dependency_extractor_1.getAllDependencies)("/test/index.js", { maxDepth: 0 });
178
+ expect(deps.size).toBe(1);
179
+ expect(deps.has("/test/index.js")).toBe(true);
180
+ });
181
+ it("should filter by extensions", () => {
182
+ mockFs.existsSync.mockReturnValue(true);
183
+ mockFs.readFileSync.mockReturnValue("");
184
+ const deps = (0, dependency_extractor_1.getAllDependencies)("/test/index.json", {
185
+ extensions: [".js", ".ts"],
186
+ });
187
+ expect(deps.size).toBe(0);
188
+ });
189
+ it("should exclude paths matching pattern", () => {
190
+ mockFs.existsSync.mockReturnValue(true);
191
+ mockFs.readFileSync.mockReturnValue("");
192
+ const deps = (0, dependency_extractor_1.getAllDependencies)("/test/node_modules/index.js", {
193
+ exclude: /node_modules/,
194
+ });
195
+ expect(deps.size).toBe(0);
196
+ });
197
+ it("should handle circular dependencies", () => {
198
+ mockPath.resolve.mockImplementation((...args) => args
199
+ .filter((a) => a)
200
+ .join("/")
201
+ .replace(/\/\.\//g, "/"));
202
+ mockFs.existsSync.mockReturnValue(true);
203
+ mockFs.readFileSync
204
+ .mockReturnValueOnce(`import './foo';`)
205
+ .mockReturnValueOnce(`import './index';`);
206
+ const deps = (0, dependency_extractor_1.getAllDependencies)("/test/index.js");
207
+ expect(deps.size).toBe(2);
208
+ });
209
+ it("should handle missing files gracefully", () => {
210
+ const consoleWarnSpy = jest.spyOn(console, "warn").mockImplementation();
211
+ mockFs.existsSync.mockReturnValue(false);
212
+ const deps = (0, dependency_extractor_1.getAllDependencies)("/test/nonexistent.js");
213
+ expect(deps.size).toBe(0);
214
+ expect(consoleWarnSpy).toHaveBeenCalled();
215
+ consoleWarnSpy.mockRestore();
216
+ });
217
+ it("should handle read errors gracefully", () => {
218
+ const consoleErrorSpy = jest.spyOn(console, "error").mockImplementation();
219
+ mockFs.existsSync.mockReturnValue(true);
220
+ mockFs.readFileSync.mockImplementation(() => {
221
+ throw new Error("Permission denied");
222
+ });
223
+ const deps = (0, dependency_extractor_1.getAllDependencies)("/test/index.js");
224
+ expect(deps.size).toBe(1);
225
+ expect(consoleErrorSpy).toHaveBeenCalled();
226
+ consoleErrorSpy.mockRestore();
227
+ });
228
+ });
229
+ //# sourceMappingURL=dependency_extractor.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency_extractor.test.js","sourceRoot":"","sources":["../../src/__tests__/dependency_extractor.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/index.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,326 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const index_1 = require("../index");
7
+ const cross_spawn_1 = __importDefault(require("cross-spawn"));
8
+ const runner_1 = require("../runner");
9
+ const stdout_manipulator_1 = require("../stdout-manipulator");
10
+ const killer_1 = require("../killer");
11
+ const compiler_provider_1 = require("../compiler-provider");
12
+ const events_1 = require("events");
13
+ const readline_1 = require("readline");
14
+ const node_cleanup_1 = __importDefault(require("node-cleanup"));
15
+ jest.mock("cross-spawn");
16
+ jest.mock("../runner");
17
+ jest.mock("../stdout-manipulator");
18
+ jest.mock("../killer");
19
+ jest.mock("../compiler-provider");
20
+ jest.mock("readline");
21
+ jest.mock("node-cleanup");
22
+ describe("runTsxStrict", () => {
23
+ let mockTscProcess;
24
+ let mockStdout;
25
+ let mockStderr;
26
+ let mockReadlineInterface;
27
+ let cleanupCallback;
28
+ let originalProcessOn;
29
+ beforeEach(() => {
30
+ jest.clearAllMocks();
31
+ originalProcessOn = process.on;
32
+ process.on = jest.fn();
33
+ mockStdout = new events_1.EventEmitter();
34
+ mockStderr = {
35
+ pipe: jest.fn(),
36
+ };
37
+ mockReadlineInterface = new events_1.EventEmitter();
38
+ readline_1.createInterface.mockReturnValue(mockReadlineInterface);
39
+ mockTscProcess = {
40
+ stdout: mockStdout,
41
+ stderr: mockStderr,
42
+ on: jest.fn(),
43
+ kill: jest.fn(),
44
+ };
45
+ cross_spawn_1.default.mockReturnValue(mockTscProcess);
46
+ runner_1.run.mockReturnValue(jest.fn().mockResolvedValue(undefined));
47
+ compiler_provider_1.getCompilerPath.mockReturnValue("tsc");
48
+ killer_1.killProcesses.mockResolvedValue(1);
49
+ stdout_manipulator_1.detectState.mockReturnValue({
50
+ compilationStarted: false,
51
+ compilationError: false,
52
+ compilationComplete: false,
53
+ fileEmitted: null,
54
+ });
55
+ node_cleanup_1.default.mockImplementation((cb) => {
56
+ cleanupCallback = cb;
57
+ });
58
+ });
59
+ afterEach(() => {
60
+ process.on = originalProcessOn;
61
+ });
62
+ it("runs tsx command with default options", () => {
63
+ (0, index_1.runTsxStrict)("index.ts", {});
64
+ expect(runner_1.run).toHaveBeenCalledWith("npx tsx index.ts");
65
+ });
66
+ it("runs tsx with watch flag", () => {
67
+ (0, index_1.runTsxStrict)("index.ts", { watch: true });
68
+ expect(runner_1.run).toHaveBeenCalledWith("npx tsx --watch index.ts");
69
+ });
70
+ it("runs tsx with watch-preserve-output when clear is false", () => {
71
+ (0, index_1.runTsxStrict)("index.ts", { clear: false, watch: true });
72
+ expect(runner_1.run).toHaveBeenCalledWith("npx tsx --watch-preserve-output index.ts");
73
+ });
74
+ it("adds additional tsx args", () => {
75
+ (0, index_1.runTsxStrict)("index.ts", { tsxArgs: "--inspect" });
76
+ expect(runner_1.run).toHaveBeenCalledWith("npx tsx index.ts --inspect");
77
+ });
78
+ it("removes duplicate tsx args", () => {
79
+ (0, index_1.runTsxStrict)("index.ts", { watch: true, tsxArgs: "--watch --inspect" });
80
+ expect(runner_1.run).toHaveBeenCalledWith("npx tsx --watch index.ts --inspect");
81
+ });
82
+ it("spawns tsc with noEmit flag", () => {
83
+ (0, index_1.runTsxStrict)("index.ts", {});
84
+ expect(cross_spawn_1.default).toHaveBeenCalledWith("node", ["tsc", "--noEmit"]);
85
+ });
86
+ it("spawns tsc with watch flag when watch is true", () => {
87
+ (0, index_1.runTsxStrict)("index.ts", { watch: true });
88
+ expect(cross_spawn_1.default).toHaveBeenCalledWith("node", ["tsc", "--noEmit", "--watch"]);
89
+ });
90
+ it("adds max node memory flag", () => {
91
+ (0, index_1.runTsxStrict)("index.ts", { maxNodeMem: 4096 });
92
+ expect(cross_spawn_1.default).toHaveBeenCalledWith("node", [
93
+ "--max_old_space_size=4096",
94
+ "tsc",
95
+ "--noEmit",
96
+ ]);
97
+ });
98
+ it("adds additional tsc args", () => {
99
+ (0, index_1.runTsxStrict)("index.ts", { tscArgs: "--strict" });
100
+ expect(cross_spawn_1.default).toHaveBeenCalledWith("node", ["tsc", "--noEmit", "--strict"]);
101
+ });
102
+ it("removes duplicate tsc args", () => {
103
+ (0, index_1.runTsxStrict)("index.ts", { tscArgs: "--noEmit --strict" });
104
+ expect(cross_spawn_1.default).toHaveBeenCalledWith("node", ["tsc", "--noEmit", "--strict"]);
105
+ });
106
+ it("uses custom compiler", () => {
107
+ compiler_provider_1.getCompilerPath.mockReturnValue("custom-tsc");
108
+ (0, index_1.runTsxStrict)("index.ts", { compiler: "custom" });
109
+ expect(compiler_provider_1.getCompilerPath).toHaveBeenCalledWith("custom");
110
+ expect(cross_spawn_1.default).toHaveBeenCalledWith("node", ["custom-tsc", "--noEmit"]);
111
+ });
112
+ it("skips type check when typeCheck is false", () => {
113
+ (0, index_1.runTsxStrict)("index.ts", { typeCheck: false });
114
+ expect(runner_1.run).toHaveBeenCalled();
115
+ expect(cross_spawn_1.default).not.toHaveBeenCalled();
116
+ });
117
+ it("throws error when stdout is not available", () => {
118
+ cross_spawn_1.default.mockReturnValue({
119
+ stdout: null,
120
+ stderr: mockStderr,
121
+ on: jest.fn(),
122
+ kill: jest.fn(),
123
+ });
124
+ expect(() => (0, index_1.runTsxStrict)("index.ts", {})).toThrow("Unable to read Typescript stdout");
125
+ });
126
+ it("throws error when stderr is not available", () => {
127
+ cross_spawn_1.default.mockReturnValue({
128
+ stdout: mockStdout,
129
+ stderr: null,
130
+ on: jest.fn(),
131
+ kill: jest.fn(),
132
+ });
133
+ expect(() => (0, index_1.runTsxStrict)("index.ts", {})).toThrow("Unable to read Typescript stderr");
134
+ });
135
+ it("pipes stderr to process.stderr", () => {
136
+ (0, index_1.runTsxStrict)("index.ts", {});
137
+ expect(mockStderr.pipe).toHaveBeenCalledWith(process.stderr);
138
+ });
139
+ it("prints lines from tsc output", () => {
140
+ (0, index_1.runTsxStrict)("index.ts", {});
141
+ mockReadlineInterface.emit("line", "test output");
142
+ expect(stdout_manipulator_1.print).toHaveBeenCalledWith("test output", { clear: true });
143
+ });
144
+ it("prints with clear false when specified", () => {
145
+ (0, index_1.runTsxStrict)("index.ts", { clear: false });
146
+ mockReadlineInterface.emit("line", "test output");
147
+ expect(stdout_manipulator_1.print).toHaveBeenCalledWith("test output", { clear: false });
148
+ });
149
+ it("kills processes on compilation start", async () => {
150
+ stdout_manipulator_1.detectState.mockReturnValue({
151
+ compilationStarted: true,
152
+ compilationError: false,
153
+ compilationComplete: false,
154
+ fileEmitted: null,
155
+ });
156
+ (0, index_1.runTsxStrict)("index.ts", {});
157
+ mockReadlineInterface.emit("line", "Starting compilation");
158
+ await new Promise((resolve) => setTimeout(resolve, 10));
159
+ expect(killer_1.killProcesses).toHaveBeenCalledWith(1);
160
+ });
161
+ it("reruns tsx on successful compilation", async () => {
162
+ stdout_manipulator_1.detectState.mockReturnValue({
163
+ compilationStarted: false,
164
+ compilationError: false,
165
+ compilationComplete: true,
166
+ fileEmitted: null,
167
+ });
168
+ (0, index_1.runTsxStrict)("index.ts", {});
169
+ mockReadlineInterface.emit("line", "Compilation complete");
170
+ await new Promise((resolve) => setTimeout(resolve, 10));
171
+ expect(runner_1.run).toHaveBeenCalledTimes(2);
172
+ });
173
+ it("does not rerun tsx on compilation error", async () => {
174
+ stdout_manipulator_1.detectState
175
+ .mockReturnValueOnce({
176
+ compilationStarted: false,
177
+ compilationError: true,
178
+ compilationComplete: false,
179
+ fileEmitted: null,
180
+ })
181
+ .mockReturnValueOnce({
182
+ compilationStarted: false,
183
+ compilationError: false,
184
+ compilationComplete: true,
185
+ fileEmitted: null,
186
+ });
187
+ (0, index_1.runTsxStrict)("index.ts", {});
188
+ mockReadlineInterface.emit("line", "Error line");
189
+ mockReadlineInterface.emit("line", "Compilation complete");
190
+ await new Promise((resolve) => setTimeout(resolve, 10));
191
+ expect(runner_1.run).toHaveBeenCalledTimes(1);
192
+ });
193
+ it("sends first_success signal on first successful compilation", async () => {
194
+ const mockSend = jest.fn();
195
+ process.send = mockSend;
196
+ stdout_manipulator_1.detectState.mockReturnValue({
197
+ compilationStarted: false,
198
+ compilationError: false,
199
+ compilationComplete: true,
200
+ fileEmitted: null,
201
+ });
202
+ (0, index_1.runTsxStrict)("index.ts", {});
203
+ mockReadlineInterface.emit("line", "Compilation complete");
204
+ await new Promise((resolve) => setTimeout(resolve, 10));
205
+ expect(mockSend).toHaveBeenCalledWith("first_success");
206
+ mockReadlineInterface.emit("line", "Compilation complete");
207
+ await new Promise((resolve) => setTimeout(resolve, 10));
208
+ expect(mockSend).toHaveBeenCalledWith("success");
209
+ });
210
+ it("sends compile_errors signal on compilation error", async () => {
211
+ const mockSend = jest.fn();
212
+ process.send = mockSend;
213
+ stdout_manipulator_1.detectState
214
+ .mockReturnValueOnce({
215
+ compilationStarted: false,
216
+ compilationError: true,
217
+ compilationComplete: false,
218
+ fileEmitted: null,
219
+ })
220
+ .mockReturnValueOnce({
221
+ compilationStarted: false,
222
+ compilationError: false,
223
+ compilationComplete: true,
224
+ fileEmitted: null,
225
+ });
226
+ (0, index_1.runTsxStrict)("index.ts", {});
227
+ mockReadlineInterface.emit("line", "Error");
228
+ mockReadlineInterface.emit("line", "Complete");
229
+ await new Promise((resolve) => setTimeout(resolve, 10));
230
+ expect(mockSend).toHaveBeenCalledWith("compile_errors");
231
+ });
232
+ it("sends file_emitted signal when file is emitted", async () => {
233
+ const mockSend = jest.fn();
234
+ process.send = mockSend;
235
+ stdout_manipulator_1.detectState.mockReturnValue({
236
+ compilationStarted: false,
237
+ compilationError: false,
238
+ compilationComplete: false,
239
+ fileEmitted: "test.js",
240
+ });
241
+ (0, index_1.runTsxStrict)("index.ts", {});
242
+ mockReadlineInterface.emit("line", "File emitted");
243
+ await new Promise((resolve) => setTimeout(resolve, 10));
244
+ expect(mockSend).toHaveBeenCalledWith("file_emitted:test.js");
245
+ });
246
+ it("sends started signal on compilation start", async () => {
247
+ const mockSend = jest.fn();
248
+ process.send = mockSend;
249
+ stdout_manipulator_1.detectState.mockReturnValue({
250
+ compilationStarted: true,
251
+ compilationError: false,
252
+ compilationComplete: false,
253
+ fileEmitted: null,
254
+ });
255
+ (0, index_1.runTsxStrict)("index.ts", {});
256
+ mockReadlineInterface.emit("line", "Starting");
257
+ await new Promise((resolve) => setTimeout(resolve, 10));
258
+ expect(mockSend).toHaveBeenCalledWith("started");
259
+ });
260
+ it("handles run-on-success-command message", async () => {
261
+ const mockKiller = jest.fn().mockResolvedValue(undefined);
262
+ (0, index_1.setTsxKiller)(mockKiller);
263
+ (0, index_1.runTsxStrict)("index.ts", {});
264
+ const messageHandler = process.on.mock.calls.find((call) => call[0] === "message")?.[1];
265
+ expect(messageHandler).toBeDefined();
266
+ if (messageHandler) {
267
+ await messageHandler("run-on-success-command");
268
+ await new Promise((resolve) => setTimeout(resolve, 10));
269
+ expect(mockKiller).toHaveBeenCalled();
270
+ expect(runner_1.run).toHaveBeenCalledTimes(2);
271
+ }
272
+ });
273
+ it("handles tsc process exit with signal", () => {
274
+ const mockKill = jest.spyOn(process, "kill").mockImplementation();
275
+ (0, index_1.runTsxStrict)("index.ts", {});
276
+ const exitHandler = mockTscProcess.on.mock.calls.find((call) => call[0] === "exit")?.[1];
277
+ if (exitHandler) {
278
+ exitHandler(0, "SIGTERM");
279
+ expect(mockKill).toHaveBeenCalledWith(process.pid, "SIGTERM");
280
+ }
281
+ mockKill.mockRestore();
282
+ });
283
+ it("does not kill process on normal exit", () => {
284
+ const mockKill = jest.spyOn(process, "kill").mockImplementation();
285
+ (0, index_1.runTsxStrict)("index.ts", {});
286
+ const exitHandler = mockTscProcess.on.mock.calls.find((call) => call[0] === "exit")?.[1];
287
+ if (exitHandler) {
288
+ exitHandler(0, null);
289
+ expect(mockKill).not.toHaveBeenCalled();
290
+ }
291
+ mockKill.mockRestore();
292
+ });
293
+ it("cleans up on exit", async () => {
294
+ (0, index_1.runTsxStrict)("index.ts", {});
295
+ expect(node_cleanup_1.default).toHaveBeenCalled();
296
+ if (cleanupCallback) {
297
+ const mockExit = jest.spyOn(process, "exit").mockImplementation();
298
+ cleanupCallback(0, null);
299
+ await new Promise((resolve) => setTimeout(resolve, 10));
300
+ expect(killer_1.killProcesses).toHaveBeenCalledWith(0);
301
+ mockExit.mockRestore();
302
+ }
303
+ });
304
+ it("kills tsc process on cleanup with signal", async () => {
305
+ (0, index_1.runTsxStrict)("index.ts", {});
306
+ if (cleanupCallback) {
307
+ const mockExit = jest.spyOn(process, "exit").mockImplementation();
308
+ cleanupCallback(0, "SIGTERM");
309
+ expect(mockTscProcess.kill).toHaveBeenCalledWith("SIGTERM");
310
+ await new Promise((resolve) => setTimeout(resolve, 10));
311
+ mockExit.mockRestore();
312
+ }
313
+ });
314
+ });
315
+ describe("tsxKiller getter/setter", () => {
316
+ it("sets and gets tsx killer function", () => {
317
+ const mockKiller = jest.fn();
318
+ (0, index_1.setTsxKiller)(mockKiller);
319
+ expect((0, index_1.getTsxKiller)()).toBe(mockKiller);
320
+ });
321
+ it("initializes as null", () => {
322
+ (0, index_1.setTsxKiller)(null);
323
+ expect((0, index_1.getTsxKiller)()).toBeNull();
324
+ });
325
+ });
326
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/__tests__/index.test.ts"],"names":[],"mappings":"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"}