ttsc 0.21.0 → 0.23.0
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/cmd/ttscserver/main.go +79 -3
- package/cmd/ttscserver/run_lsp_uses_native_plugin_manifest_source_test.go +96 -16
- package/driver/lsp.go +4 -0
- package/go.mod +1 -1
- package/internal/lspserver/lsp_document_diagnostics_omits_cached_project_when_current_result_has_none_test.go +48 -0
- package/internal/lspserver/lsp_executable_project_input_change_requests_launcher_restart_test.go +98 -0
- package/internal/lspserver/lsp_external_watched_change_retains_program_test.go +53 -0
- package/internal/lspserver/lsp_hints_refresh_scheduled_by_editor_events_test.go +9 -0
- package/internal/lspserver/lsp_launcher_reload_directory_fingerprint_parity_windows_test.go +94 -0
- package/internal/lspserver/lsp_native_plugin_source.go +171 -55
- package/internal/lspserver/lsp_native_resident.go +110 -9
- package/internal/lspserver/lsp_plugin.go +6 -0
- package/internal/lspserver/lsp_project_context_transport_identity_test.go +43 -0
- package/internal/lspserver/lsp_project_diagnostics.go +235 -0
- package/internal/lspserver/lsp_project_diagnostics_capability_is_independent_test.go +67 -0
- package/internal/lspserver/lsp_project_diagnostics_program_input_overlap_refreshes_all_producers_test.go +78 -0
- package/internal/lspserver/lsp_project_diagnostics_refresh_accumulates_owner_freshness_test.go +65 -0
- package/internal/lspserver/lsp_project_diagnostics_refresh_keeps_each_producer_last_good_test.go +90 -0
- package/internal/lspserver/lsp_project_diagnostics_refreshes_only_input_owners_test.go +62 -0
- package/internal/lspserver/lsp_project_diagnostics_resident_unsupported_falls_back_test.go +123 -0
- package/internal/lspserver/lsp_project_diagnostics_resume_preserves_generation_test.go +52 -0
- package/internal/lspserver/lsp_project_diagnostics_translates_relative_client_project_test.go +90 -0
- package/internal/lspserver/lsp_project_input_glob_path_other.go +16 -0
- package/internal/lspserver/lsp_project_input_glob_path_windows.go +36 -0
- package/internal/lspserver/lsp_project_input_ownership_resolves_declared_spellings_test.go +95 -0
- package/internal/lspserver/lsp_project_input_path_key_other.go +17 -0
- package/internal/lspserver/lsp_project_input_path_key_windows.go +228 -0
- package/internal/lspserver/lsp_project_input_path_key_windows_test.go +460 -0
- package/internal/lspserver/lsp_project_input_registration.go +504 -0
- package/internal/lspserver/lsp_project_input_registration_rechecks_selection_baseline_test.go +71 -0
- package/internal/lspserver/lsp_project_input_registration_reconciles_rejected_pending_request_test.go +268 -0
- package/internal/lspserver/lsp_project_input_registration_shapes_patterns_test.go +94 -0
- package/internal/lspserver/lsp_project_input_watchers_anchor_missing_paths_test.go +48 -0
- package/internal/lspserver/lsp_project_inputs.go +1012 -0
- package/internal/lspserver/lsp_project_inputs_match_missing_exact_and_glob_test.go +129 -0
- package/internal/lspserver/lsp_project_inputs_reject_invalid_and_foreign_snapshots_test.go +110 -0
- package/internal/lspserver/lsp_proxy.go +591 -28
- package/internal/lspserver/lsp_reload_directories_compare_immediate_topology_test.go +188 -0
- package/internal/lspserver/lsp_reload_directories_separate_glob_territory_test.go +181 -0
- package/internal/lspserver/lsp_reload_file_fingerprint_preserves_raw_symlink_target_test.go +47 -0
- package/internal/lspserver/lsp_resident_falls_back_when_serve_unsupported_test.go +1 -1
- package/internal/lspserver/lsp_resident_invalidation_broadcasts_program_input_overlap_test.go +60 -0
- package/internal/lspserver/lsp_resident_invalidation_targets_project_input_owners_test.go +51 -0
- package/internal/lspserver/lsp_same_transport_entries_are_deduplicated_test.go +66 -0
- package/lib/compiler/internal/project/readProjectConfig.d.ts +5 -3
- package/lib/compiler/internal/project/readProjectConfig.js +46 -14
- package/lib/compiler/internal/project/readProjectConfig.js.map +1 -1
- package/lib/compiler/internal/residentCheckProcess.d.ts +46 -0
- package/lib/compiler/internal/residentCheckProcess.js +227 -0
- package/lib/compiler/internal/residentCheckProcess.js.map +1 -0
- package/lib/compiler/internal/resolveEmittedJavaScript.d.ts +2 -1
- package/lib/compiler/internal/resolveEmittedJavaScript.js +35 -18
- package/lib/compiler/internal/resolveEmittedJavaScript.js.map +1 -1
- package/lib/compiler/internal/runBuild.d.ts +64 -1
- package/lib/compiler/internal/runBuild.js +484 -7
- package/lib/compiler/internal/runBuild.js.map +1 -1
- package/lib/compiler/internal/runSingleFileEmit.js +1 -0
- package/lib/compiler/internal/runSingleFileEmit.js.map +1 -1
- package/lib/flags/parser.js +13 -17
- package/lib/flags/parser.js.map +1 -1
- package/lib/flags/schema.d.ts +10 -3
- package/lib/flags/schema.js +99 -0
- package/lib/flags/schema.js.map +1 -1
- package/lib/internal/projectInputPathIdentity.d.ts +31 -0
- package/lib/internal/projectInputPathIdentity.js +276 -0
- package/lib/internal/projectInputPathIdentity.js.map +1 -0
- package/lib/internal/windowsDirectoryCaseSensitivity.d.ts +10 -0
- package/lib/internal/windowsDirectoryCaseSensitivity.js +34 -0
- package/lib/internal/windowsDirectoryCaseSensitivity.js.map +1 -0
- package/lib/launcher/internal/runTtsc.d.ts +17 -0
- package/lib/launcher/internal/runTtsc.js +126 -88
- package/lib/launcher/internal/runTtsc.js.map +1 -1
- package/lib/launcher/internal/runTtscserver.d.ts +13 -1
- package/lib/launcher/internal/runTtscserver.js +468 -47
- package/lib/launcher/internal/runTtscserver.js.map +1 -1
- package/lib/launcher/internal/runTtsx.js +61 -7
- package/lib/launcher/internal/runTtsx.js.map +1 -1
- package/lib/launcher/internal/runtimeHooks.d.ts +6 -5
- package/lib/launcher/internal/runtimeHooks.js +7 -15
- package/lib/launcher/internal/runtimeHooks.js.map +1 -1
- package/lib/launcher/internal/singleFileOutput.d.ts +16 -0
- package/lib/launcher/internal/singleFileOutput.js +103 -0
- package/lib/launcher/internal/singleFileOutput.js.map +1 -0
- package/lib/launcher/internal/watchTopology.d.ts +288 -2
- package/lib/launcher/internal/watchTopology.js +1921 -54
- package/lib/launcher/internal/watchTopology.js.map +1 -1
- package/lib/plugin/internal/descriptorProcessFailure.d.ts +32 -0
- package/lib/plugin/internal/descriptorProcessFailure.js +73 -0
- package/lib/plugin/internal/descriptorProcessFailure.js.map +1 -0
- package/lib/plugin/internal/loadProjectPlugins.d.ts +1 -0
- package/lib/plugin/internal/loadProjectPlugins.js +34 -8
- package/lib/plugin/internal/loadProjectPlugins.js.map +1 -1
- package/lib/structures/ITtscPluginCapabilities.d.ts +31 -0
- package/lib/structures/internal/ITtscProjectInputSnapshot.d.ts +29 -0
- package/lib/structures/internal/ITtscProjectInputSnapshot.js +3 -0
- package/lib/structures/internal/ITtscProjectInputSnapshot.js.map +1 -0
- package/lib/structures/internal/TtscSingleFileEmitOptions.d.ts +5 -0
- package/package.json +12 -8
- package/src/compiler/internal/project/readProjectConfig.ts +62 -8
- package/src/compiler/internal/residentCheckProcess.ts +279 -0
- package/src/compiler/internal/resolveEmittedJavaScript.ts +43 -21
- package/src/compiler/internal/runBuild.ts +728 -12
- package/src/compiler/internal/runSingleFileEmit.ts +1 -0
- package/src/flags/parser.ts +17 -17
- package/src/flags/schema.ts +112 -3
- package/src/internal/projectInputPathIdentity.ts +377 -0
- package/src/internal/windowsDirectoryCaseSensitivity.ts +33 -0
- package/src/launcher/internal/runTtsc.ts +148 -117
- package/src/launcher/internal/runTtscserver.ts +633 -56
- package/src/launcher/internal/runTtsx.ts +87 -10
- package/src/launcher/internal/runtimeHooks.ts +16 -16
- package/src/launcher/internal/singleFileOutput.ts +133 -0
- package/src/launcher/internal/watchTopology.ts +2494 -74
- package/src/plugin/internal/descriptorProcessFailure.ts +100 -0
- package/src/plugin/internal/loadProjectPlugins.ts +49 -8
- package/src/structures/ITtscPluginCapabilities.ts +34 -0
- package/src/structures/internal/ITtscProjectInputSnapshot.ts +29 -0
- package/src/structures/internal/TtscSingleFileEmitOptions.ts +5 -0
- package/tools/shim_audit/baseline.json +0 -9
|
@@ -13,21 +13,30 @@ const resolveProjectConfig_1 = require("./resolveProjectConfig");
|
|
|
13
13
|
* Compiler option keys whose values are file-system paths that must be resolved
|
|
14
14
|
* relative to the tsconfig that declares them, not the project root.
|
|
15
15
|
*/
|
|
16
|
-
const PATH_OPTIONS = new Set([
|
|
16
|
+
const PATH_OPTIONS = new Set([
|
|
17
|
+
"baseUrl",
|
|
18
|
+
"declarationDir",
|
|
19
|
+
"outFile",
|
|
20
|
+
"rootDir",
|
|
21
|
+
"tsBuildInfoFile",
|
|
22
|
+
]);
|
|
23
|
+
const CONFIG_DIR_TEMPLATE = "${configDir}";
|
|
17
24
|
/**
|
|
18
25
|
* Read and resolve the project config subset used by ttsc.
|
|
19
26
|
*
|
|
20
27
|
* Follows `extends` chains (including arrays) and merges compiler options with
|
|
21
28
|
* later configs taking precedence. Path-typed options (`baseUrl`,
|
|
22
|
-
* `declarationDir`, `rootDir`) are resolved
|
|
23
|
-
*
|
|
24
|
-
*
|
|
29
|
+
* `declarationDir`, `outFile`, `rootDir`, `tsBuildInfoFile`) are resolved
|
|
30
|
+
* relative to the config that declares them. `${configDir}` paths are resolved
|
|
31
|
+
* against the final consuming config after the extends chain is merged. The
|
|
32
|
+
* `outDir` is resolved to an absolute path. Plugins are inherited from the
|
|
33
|
+
* nearest ancestor that declares them.
|
|
25
34
|
*/
|
|
26
35
|
function readProjectConfig(opts = {}) {
|
|
27
36
|
const identity = (0, resolveProjectConfig_1.resolveProjectIdentity)(opts);
|
|
28
37
|
const tsconfig = identity.physicalConfigPath;
|
|
29
38
|
const root = identity.physicalProjectRoot;
|
|
30
|
-
const compilerOptions = readResolvedCompilerOptions(tsconfig);
|
|
39
|
+
const compilerOptions = readResolvedCompilerOptions(tsconfig, new Set(), node_path_1.default.dirname(tsconfig));
|
|
31
40
|
return {
|
|
32
41
|
configPaths: compilerOptions.configPaths,
|
|
33
42
|
compilerOptions: {
|
|
@@ -71,7 +80,7 @@ function resolveAbsolutePath(cwd, target) {
|
|
|
71
80
|
* `finally` block so sibling-referenced configs can be visited again via a
|
|
72
81
|
* different parent.
|
|
73
82
|
*/
|
|
74
|
-
function readResolvedCompilerOptions(tsconfig, seen = new Set()) {
|
|
83
|
+
function readResolvedCompilerOptions(tsconfig, seen = new Set(), configDir = node_path_1.default.dirname(tsconfig)) {
|
|
75
84
|
const canonical = resolveRealPath(tsconfig);
|
|
76
85
|
if (seen.has(canonical)) {
|
|
77
86
|
throw new Error(`ttsc: circular tsconfig extends detected: ${canonical}`);
|
|
@@ -80,7 +89,7 @@ function readResolvedCompilerOptions(tsconfig, seen = new Set()) {
|
|
|
80
89
|
try {
|
|
81
90
|
const parsed = (0, readConfigJson_1.readJsoncFile)(canonical);
|
|
82
91
|
const own = parsed.compilerOptions;
|
|
83
|
-
const base = resolveBaseCompilerOptions(canonical, parsed.extends, seen);
|
|
92
|
+
const base = resolveBaseCompilerOptions(canonical, parsed.extends, seen, configDir);
|
|
84
93
|
const ownBaseDir = node_path_1.default.dirname(canonical);
|
|
85
94
|
const ownOptionBaseDirs = own === undefined
|
|
86
95
|
? {}
|
|
@@ -92,7 +101,7 @@ function readResolvedCompilerOptions(tsconfig, seen = new Set()) {
|
|
|
92
101
|
const options = resolvePathOptions({
|
|
93
102
|
...base.options,
|
|
94
103
|
...(own ?? {}),
|
|
95
|
-
}, optionBaseDirs);
|
|
104
|
+
}, optionBaseDirs, configDir);
|
|
96
105
|
const ownPlugins = own?.plugins;
|
|
97
106
|
const pluginsDeclared = Array.isArray(ownPlugins);
|
|
98
107
|
const plugins = pluginsDeclared
|
|
@@ -103,7 +112,7 @@ function readResolvedCompilerOptions(tsconfig, seen = new Set()) {
|
|
|
103
112
|
optionBaseDirs,
|
|
104
113
|
options,
|
|
105
114
|
outDir: typeof own?.outDir === "string"
|
|
106
|
-
?
|
|
115
|
+
? resolveCompilerOptionPath(ownBaseDir, configDir, own.outDir)
|
|
107
116
|
: base.outDir,
|
|
108
117
|
pluginBaseDirs: pluginsDeclared
|
|
109
118
|
? plugins.map(() => ownBaseDir)
|
|
@@ -126,9 +135,9 @@ function readResolvedCompilerOptions(tsconfig, seen = new Set()) {
|
|
|
126
135
|
* Plugin inheritance: when the current config in an array chain explicitly
|
|
127
136
|
* declares `plugins`, subsequent configs in the array do not override them.
|
|
128
137
|
*/
|
|
129
|
-
function resolveBaseCompilerOptions(tsconfig, extended, seen) {
|
|
138
|
+
function resolveBaseCompilerOptions(tsconfig, extended, seen, configDir) {
|
|
130
139
|
if (typeof extended === "string") {
|
|
131
|
-
return readResolvedCompilerOptions(resolveExtendsConfig(tsconfig, extended), seen);
|
|
140
|
+
return readResolvedCompilerOptions(resolveExtendsConfig(tsconfig, extended), seen, configDir);
|
|
132
141
|
}
|
|
133
142
|
if (!Array.isArray(extended)) {
|
|
134
143
|
return {
|
|
@@ -152,7 +161,7 @@ function resolveBaseCompilerOptions(tsconfig, extended, seen) {
|
|
|
152
161
|
if (typeof specifier !== "string") {
|
|
153
162
|
continue;
|
|
154
163
|
}
|
|
155
|
-
const current = readResolvedCompilerOptions(resolveExtendsConfig(tsconfig, specifier), seen);
|
|
164
|
+
const current = readResolvedCompilerOptions(resolveExtendsConfig(tsconfig, specifier), seen, configDir);
|
|
156
165
|
merged = {
|
|
157
166
|
configPaths: uniquePaths([...merged.configPaths, ...current.configPaths]),
|
|
158
167
|
optionBaseDirs: {
|
|
@@ -180,17 +189,40 @@ function uniquePaths(paths) {
|
|
|
180
189
|
* Resolve path-typed compiler options to absolute paths using the directory of
|
|
181
190
|
* the tsconfig that declared each option (`baseDirs`).
|
|
182
191
|
*/
|
|
183
|
-
function resolvePathOptions(options, baseDirs) {
|
|
192
|
+
function resolvePathOptions(options, baseDirs, configDir) {
|
|
184
193
|
const resolved = { ...options };
|
|
185
194
|
for (const key of PATH_OPTIONS) {
|
|
186
195
|
const value = resolved[key];
|
|
187
196
|
const baseDir = baseDirs[key];
|
|
188
197
|
if (typeof value === "string" && baseDir !== undefined) {
|
|
189
|
-
resolved[key] =
|
|
198
|
+
resolved[key] = resolveCompilerOptionPath(baseDir, configDir, value);
|
|
190
199
|
}
|
|
191
200
|
}
|
|
192
201
|
return resolved;
|
|
193
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* Resolve an ordinary path from the config that declares it, but substitute a
|
|
205
|
+
* leading `${configDir}` from the final config consuming the merged preset.
|
|
206
|
+
*/
|
|
207
|
+
function resolveCompilerOptionPath(declaringDir, configDir, value) {
|
|
208
|
+
if (value.slice(0, CONFIG_DIR_TEMPLATE.length).toLowerCase() !==
|
|
209
|
+
CONFIG_DIR_TEMPLATE.toLowerCase()) {
|
|
210
|
+
return resolveAbsolutePath(declaringDir, value);
|
|
211
|
+
}
|
|
212
|
+
// The compiler picks the base directory from a case-insensitive prefix but
|
|
213
|
+
// substitutes only the exact spelling, so a mis-cased template still anchors
|
|
214
|
+
// here while staying in the path as written. Both halves are reproduced: this
|
|
215
|
+
// function exists to say where the compiler will put the file, and a value
|
|
216
|
+
// the compiler leaves literal is not ours to interpret.
|
|
217
|
+
//
|
|
218
|
+
// The exact spelling becomes "./" before the result is normalized, which
|
|
219
|
+
// keeps the value relative even when its remainder resembles an absolute
|
|
220
|
+
// Windows path. Either config-file separator is accepted on every host.
|
|
221
|
+
const substituted = value.startsWith(CONFIG_DIR_TEMPLATE)
|
|
222
|
+
? `./${value.slice(CONFIG_DIR_TEMPLATE.length)}`
|
|
223
|
+
: value;
|
|
224
|
+
return resolveAbsolutePath(configDir, substituted.replaceAll("\\", "/"));
|
|
225
|
+
}
|
|
194
226
|
/**
|
|
195
227
|
* Resolve an `extends` specifier to an absolute path using the same rules as
|
|
196
228
|
* TypeScript's config resolution:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readProjectConfig.js","sourceRoot":"","sources":["../../../../src/compiler/internal/project/readProjectConfig.ts"],"names":[],"mappings":";;;;;;AAAA,sDAAyB;AACzB,6CAA4C;AAC5C,0DAA6B;AAK7B,qDAA+D;AAC/D,iEAAgE;AAEhE;;;GAGG;AACH,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"readProjectConfig.js","sourceRoot":"","sources":["../../../../src/compiler/internal/project/readProjectConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { TtscBuildResult } from "../../structures/internal/TtscBuildResult";
|
|
2
|
+
export interface ResidentCheckProcessOptions {
|
|
3
|
+
args: readonly string[];
|
|
4
|
+
binary: string;
|
|
5
|
+
cwd: string;
|
|
6
|
+
env: NodeJS.ProcessEnv;
|
|
7
|
+
requestTimeoutMs?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface ResidentCheckRequest {
|
|
10
|
+
changed?: readonly string[];
|
|
11
|
+
external?: readonly string[];
|
|
12
|
+
invalidate?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface ResidentCheckTelemetry {
|
|
15
|
+
pid: number;
|
|
16
|
+
programLoads: number;
|
|
17
|
+
programUpdates: number;
|
|
18
|
+
reused: boolean;
|
|
19
|
+
}
|
|
20
|
+
export type ResidentCheckResult = TtscBuildResult & {
|
|
21
|
+
telemetry: ResidentCheckTelemetry;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* FIFO JSON-line client for a check-stage `check-serve` sidecar.
|
|
25
|
+
*
|
|
26
|
+
* A watch session serializes cycles, but the client still queues replies so a
|
|
27
|
+
* caller cannot accidentally pair a late response with the next request. Any
|
|
28
|
+
* framing failure retires the process; the launcher then falls back to the
|
|
29
|
+
* ordinary one-shot command for that cycle.
|
|
30
|
+
*/
|
|
31
|
+
export declare class ResidentCheckProcess {
|
|
32
|
+
private readonly child;
|
|
33
|
+
private readonly pending;
|
|
34
|
+
private readonly reader;
|
|
35
|
+
private readonly requestTimeoutMs;
|
|
36
|
+
private failure;
|
|
37
|
+
private stderr;
|
|
38
|
+
constructor(options: ResidentCheckProcessOptions);
|
|
39
|
+
request(payload: ResidentCheckRequest): Promise<ResidentCheckResult>;
|
|
40
|
+
dispose(): void;
|
|
41
|
+
private onLine;
|
|
42
|
+
private settle;
|
|
43
|
+
private fail;
|
|
44
|
+
private terminate;
|
|
45
|
+
private exitError;
|
|
46
|
+
}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ResidentCheckProcess = void 0;
|
|
4
|
+
const node_child_process_1 = require("node:child_process");
|
|
5
|
+
const node_readline_1 = require("node:readline");
|
|
6
|
+
const residentTransformProcess_1 = require("./residentTransformProcess");
|
|
7
|
+
const STDERR_TAIL_LIMIT = 64 * 1024;
|
|
8
|
+
const REPLY_ECHO_LIMIT = 200;
|
|
9
|
+
const TERMINATION_GRACE_MS = 1_000;
|
|
10
|
+
/**
|
|
11
|
+
* FIFO JSON-line client for a check-stage `check-serve` sidecar.
|
|
12
|
+
*
|
|
13
|
+
* A watch session serializes cycles, but the client still queues replies so a
|
|
14
|
+
* caller cannot accidentally pair a late response with the next request. Any
|
|
15
|
+
* framing failure retires the process; the launcher then falls back to the
|
|
16
|
+
* ordinary one-shot command for that cycle.
|
|
17
|
+
*/
|
|
18
|
+
class ResidentCheckProcess {
|
|
19
|
+
child;
|
|
20
|
+
pending = [];
|
|
21
|
+
reader;
|
|
22
|
+
requestTimeoutMs;
|
|
23
|
+
failure;
|
|
24
|
+
stderr = "";
|
|
25
|
+
constructor(options) {
|
|
26
|
+
this.requestTimeoutMs = (0, residentTransformProcess_1.normalizeRequestTimeoutMs)(options.requestTimeoutMs);
|
|
27
|
+
this.child = (0, node_child_process_1.spawn)(options.binary, [...options.args], {
|
|
28
|
+
cwd: options.cwd,
|
|
29
|
+
env: options.env,
|
|
30
|
+
windowsHide: true,
|
|
31
|
+
});
|
|
32
|
+
const stdin = this.child.stdin;
|
|
33
|
+
const stdout = this.child.stdout;
|
|
34
|
+
if (stdin === null || stdout === null) {
|
|
35
|
+
this.child.kill();
|
|
36
|
+
throw new Error("ttsc: resident check host has no stdio pipes");
|
|
37
|
+
}
|
|
38
|
+
this.reader = (0, node_readline_1.createInterface)({ input: stdout });
|
|
39
|
+
this.reader.on("line", (line) => this.onLine(line));
|
|
40
|
+
this.reader.on("close", () => {
|
|
41
|
+
if (this.failure === undefined)
|
|
42
|
+
this.fail(this.exitError());
|
|
43
|
+
});
|
|
44
|
+
this.child.stderr?.on("data", (chunk) => {
|
|
45
|
+
const text = typeof chunk === "string" ? chunk : chunk.toString("utf8");
|
|
46
|
+
this.stderr = (this.stderr + text).slice(-STDERR_TAIL_LIMIT);
|
|
47
|
+
});
|
|
48
|
+
this.child.on("error", (error) => this.fail(error));
|
|
49
|
+
stdin.on("error", (error) => this.fail(error));
|
|
50
|
+
stdout.on("error", (error) => this.fail(error));
|
|
51
|
+
this.child.stderr?.on("error", () => { });
|
|
52
|
+
}
|
|
53
|
+
request(payload) {
|
|
54
|
+
if (this.failure !== undefined)
|
|
55
|
+
return Promise.reject(this.failure);
|
|
56
|
+
const stdin = this.child.stdin;
|
|
57
|
+
if (stdin === null || stdin.destroyed) {
|
|
58
|
+
return Promise.reject(new Error("ttsc: resident check host stdin is closed"));
|
|
59
|
+
}
|
|
60
|
+
let line;
|
|
61
|
+
try {
|
|
62
|
+
line = `${JSON.stringify(payload)}\n`;
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
return Promise.reject(asError(error));
|
|
66
|
+
}
|
|
67
|
+
return new Promise((resolve, reject) => {
|
|
68
|
+
const pending = {
|
|
69
|
+
reject,
|
|
70
|
+
resolve,
|
|
71
|
+
timer: setTimeout(() => {
|
|
72
|
+
const detail = stderrSuffix(this.stderr);
|
|
73
|
+
const timeout = new Error(`ttsc: resident check request timed out after ${String(this.requestTimeoutMs)} ms${detail}`);
|
|
74
|
+
this.settle(pending, timeout);
|
|
75
|
+
this.fail(timeout);
|
|
76
|
+
}, this.requestTimeoutMs),
|
|
77
|
+
};
|
|
78
|
+
pending.timer.unref();
|
|
79
|
+
this.pending.push(pending);
|
|
80
|
+
try {
|
|
81
|
+
stdin.write(line, (error) => {
|
|
82
|
+
if (error === null || error === undefined)
|
|
83
|
+
return;
|
|
84
|
+
this.settle(pending, error);
|
|
85
|
+
this.fail(error);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
const reason = asError(error);
|
|
90
|
+
this.settle(pending, reason);
|
|
91
|
+
this.fail(reason);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
dispose() {
|
|
96
|
+
if (this.failure !== undefined)
|
|
97
|
+
return;
|
|
98
|
+
this.fail(new Error("ttsc: resident check host disposed"));
|
|
99
|
+
}
|
|
100
|
+
onLine(line) {
|
|
101
|
+
if (this.failure !== undefined || line.trim().length === 0)
|
|
102
|
+
return;
|
|
103
|
+
const pending = this.pending[0];
|
|
104
|
+
if (pending === undefined) {
|
|
105
|
+
this.fail(new Error("ttsc: resident check host sent an unsolicited reply"));
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const result = parseResidentCheckResult(line);
|
|
109
|
+
if (result === undefined) {
|
|
110
|
+
const error = new Error(`ttsc: resident check host sent a malformed reply: ${echoLine(line)}`);
|
|
111
|
+
this.settle(pending, error);
|
|
112
|
+
this.fail(error);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
this.settle(pending, result);
|
|
116
|
+
}
|
|
117
|
+
settle(pending, result) {
|
|
118
|
+
const index = this.pending.indexOf(pending);
|
|
119
|
+
if (index === -1)
|
|
120
|
+
return;
|
|
121
|
+
this.pending.splice(index, 1);
|
|
122
|
+
clearTimeout(pending.timer);
|
|
123
|
+
if (result instanceof Error)
|
|
124
|
+
pending.reject(result);
|
|
125
|
+
else
|
|
126
|
+
pending.resolve(result);
|
|
127
|
+
}
|
|
128
|
+
fail(error) {
|
|
129
|
+
if (this.failure !== undefined)
|
|
130
|
+
return;
|
|
131
|
+
this.failure = error;
|
|
132
|
+
while (this.pending.length !== 0) {
|
|
133
|
+
this.settle(this.pending[0], error);
|
|
134
|
+
}
|
|
135
|
+
this.terminate();
|
|
136
|
+
}
|
|
137
|
+
terminate() {
|
|
138
|
+
const stdin = this.child.stdin;
|
|
139
|
+
if (stdin !== null && !stdin.destroyed)
|
|
140
|
+
stdin.destroy();
|
|
141
|
+
if (this.child.exitCode !== null || this.child.signalCode !== null)
|
|
142
|
+
return;
|
|
143
|
+
try {
|
|
144
|
+
this.child.kill();
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const force = setTimeout(() => {
|
|
150
|
+
if (this.child.exitCode !== null || this.child.signalCode !== null)
|
|
151
|
+
return;
|
|
152
|
+
try {
|
|
153
|
+
this.child.kill("SIGKILL");
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
// The host exited between the liveness check and forced termination.
|
|
157
|
+
}
|
|
158
|
+
}, TERMINATION_GRACE_MS);
|
|
159
|
+
force.unref();
|
|
160
|
+
this.child.once("exit", () => clearTimeout(force));
|
|
161
|
+
}
|
|
162
|
+
exitError() {
|
|
163
|
+
const detail = this.stderr.trim();
|
|
164
|
+
if (detail.length !== 0)
|
|
165
|
+
return new Error(detail);
|
|
166
|
+
const signal = this.child.signalCode === null ? "" : `, signal ${this.child.signalCode}`;
|
|
167
|
+
return new Error(`ttsc: resident check host exited (code ${this.child.exitCode ?? "null"}${signal})`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
exports.ResidentCheckProcess = ResidentCheckProcess;
|
|
171
|
+
function parseResidentCheckResult(line) {
|
|
172
|
+
let value;
|
|
173
|
+
try {
|
|
174
|
+
value = JSON.parse(line);
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
return undefined;
|
|
178
|
+
}
|
|
179
|
+
if (!isRecord(value) ||
|
|
180
|
+
typeof value.status !== "number" ||
|
|
181
|
+
!Number.isInteger(value.status)) {
|
|
182
|
+
return undefined;
|
|
183
|
+
}
|
|
184
|
+
if (typeof value.stdout !== "string" || typeof value.stderr !== "string") {
|
|
185
|
+
return undefined;
|
|
186
|
+
}
|
|
187
|
+
const telemetry = value.telemetry;
|
|
188
|
+
if (!isRecord(telemetry) ||
|
|
189
|
+
typeof telemetry.pid !== "number" ||
|
|
190
|
+
!Number.isSafeInteger(telemetry.pid) ||
|
|
191
|
+
typeof telemetry.programLoads !== "number" ||
|
|
192
|
+
!Number.isSafeInteger(telemetry.programLoads) ||
|
|
193
|
+
typeof telemetry.programUpdates !== "number" ||
|
|
194
|
+
!Number.isSafeInteger(telemetry.programUpdates) ||
|
|
195
|
+
typeof telemetry.reused !== "boolean") {
|
|
196
|
+
return undefined;
|
|
197
|
+
}
|
|
198
|
+
return {
|
|
199
|
+
diagnostics: [],
|
|
200
|
+
status: value.status,
|
|
201
|
+
stderr: value.stderr,
|
|
202
|
+
stdout: value.stdout,
|
|
203
|
+
telemetry: {
|
|
204
|
+
pid: telemetry.pid,
|
|
205
|
+
programLoads: telemetry.programLoads,
|
|
206
|
+
programUpdates: telemetry.programUpdates,
|
|
207
|
+
reused: telemetry.reused,
|
|
208
|
+
},
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
function isRecord(value) {
|
|
212
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
213
|
+
}
|
|
214
|
+
function echoLine(line) {
|
|
215
|
+
const trimmed = line.trim();
|
|
216
|
+
return JSON.stringify(trimmed.length <= REPLY_ECHO_LIMIT
|
|
217
|
+
? trimmed
|
|
218
|
+
: `${trimmed.slice(0, REPLY_ECHO_LIMIT)}…`);
|
|
219
|
+
}
|
|
220
|
+
function stderrSuffix(stderr) {
|
|
221
|
+
const detail = stderr.trim();
|
|
222
|
+
return detail.length === 0 ? "" : `: ${detail}`;
|
|
223
|
+
}
|
|
224
|
+
function asError(error) {
|
|
225
|
+
return error instanceof Error ? error : new Error(String(error));
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=residentCheckProcess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"residentCheckProcess.js","sourceRoot":"","sources":["../../../src/compiler/internal/residentCheckProcess.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
*
|
|
6
6
|
* 1. Try to derive the exact output path by mirroring the source's relative
|
|
7
7
|
* position inside `projectRoot` into `outDir`, applying the correct JS
|
|
8
|
-
* extension (`.js` / `.mjs` / `.cjs`). Use this path if it exists
|
|
8
|
+
* extension (`.js` / `.jsx` / `.mjs` / `.cjs`). Use this path if it exists
|
|
9
|
+
* on disk.
|
|
9
10
|
* 2. Fall back to scoring each candidate in `emittedFiles` (or a recursive
|
|
10
11
|
* directory scan of `outDir`) by the number of trailing path-stem segments
|
|
11
12
|
* shared with the source file name, and pick the highest-scoring existing
|
|
@@ -14,7 +14,8 @@ const paths_1 = require("./paths");
|
|
|
14
14
|
*
|
|
15
15
|
* 1. Try to derive the exact output path by mirroring the source's relative
|
|
16
16
|
* position inside `projectRoot` into `outDir`, applying the correct JS
|
|
17
|
-
* extension (`.js` / `.mjs` / `.cjs`). Use this path if it exists
|
|
17
|
+
* extension (`.js` / `.jsx` / `.mjs` / `.cjs`). Use this path if it exists
|
|
18
|
+
* on disk.
|
|
18
19
|
* 2. Fall back to scoring each candidate in `emittedFiles` (or a recursive
|
|
19
20
|
* directory scan of `outDir`) by the number of trailing path-stem segments
|
|
20
21
|
* shared with the source file name, and pick the highest-scoring existing
|
|
@@ -23,9 +24,17 @@ const paths_1 = require("./paths");
|
|
|
23
24
|
* Returns `null` when no matching output file is found on disk.
|
|
24
25
|
*/
|
|
25
26
|
function resolveEmittedJavaScript(options) {
|
|
26
|
-
const exact =
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
const exact = resolveExactEmittedFiles(options.outDir, options.projectRoot, options.sourceFile);
|
|
28
|
+
const emitted = new Set(options.emittedFiles?.map((file) => emittedPathKey(file)) ?? []);
|
|
29
|
+
for (const candidate of exact) {
|
|
30
|
+
if (emitted.has(emittedPathKey(candidate)) && node_fs_1.default.existsSync(candidate)) {
|
|
31
|
+
return candidate;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
for (const candidate of exact) {
|
|
35
|
+
if (node_fs_1.default.existsSync(candidate)) {
|
|
36
|
+
return candidate;
|
|
37
|
+
}
|
|
29
38
|
}
|
|
30
39
|
// Score the pre-computed emit list first (cheap). When it yields nothing —
|
|
31
40
|
// because the list is incomplete (a native transform host such as typia emits
|
|
@@ -64,16 +73,16 @@ function bestStemMatch(files, sourceFile) {
|
|
|
64
73
|
}
|
|
65
74
|
/**
|
|
66
75
|
* Derive the exact output path for `sourceFile` by mirroring its position
|
|
67
|
-
* relative to `projectRoot` into `outDir`. Returns
|
|
68
|
-
* not inside the project root or when the path cannot be determined.
|
|
76
|
+
* relative to `projectRoot` into `outDir`. Returns no candidates when the
|
|
77
|
+
* source is not inside the project root or when the path cannot be determined.
|
|
69
78
|
*/
|
|
70
|
-
function
|
|
79
|
+
function resolveExactEmittedFiles(outDir, projectRoot, sourceFile) {
|
|
71
80
|
const relative = node_path_1.default.relative(projectRoot, sourceFile);
|
|
72
81
|
if (relative === "" || (0, paths_1.isOutsideRelativePath)(relative)) {
|
|
73
|
-
return
|
|
82
|
+
return [];
|
|
74
83
|
}
|
|
75
|
-
|
|
76
|
-
|
|
84
|
+
const stem = relative.slice(0, relative.length - node_path_1.default.extname(relative).length);
|
|
85
|
+
return emittedJavaScriptExtensions(sourceFile).map((extension) => node_path_1.default.resolve(outDir, stem + extension));
|
|
77
86
|
}
|
|
78
87
|
/**
|
|
79
88
|
* Recursively enumerate every JavaScript output file under `root`. Uses an
|
|
@@ -125,21 +134,29 @@ function sharedSourceStemSegments(outPath, srcPath) {
|
|
|
125
134
|
return shared;
|
|
126
135
|
}
|
|
127
136
|
/**
|
|
128
|
-
* Map a
|
|
129
|
-
*
|
|
137
|
+
* Map a source extension to every JavaScript output counterpart tsgo can use.
|
|
138
|
+
* JSX preserve mode writes `.tsx`/`.jsx` inputs as `.jsx`; all other JSX modes
|
|
139
|
+
* write `.js`.
|
|
130
140
|
*/
|
|
131
|
-
function
|
|
141
|
+
function emittedJavaScriptExtensions(filename) {
|
|
132
142
|
switch (node_path_1.default.extname(filename).toLowerCase()) {
|
|
133
143
|
case ".mts":
|
|
134
|
-
return ".mjs";
|
|
144
|
+
return [".mjs"];
|
|
135
145
|
case ".cts":
|
|
136
|
-
return ".cjs";
|
|
146
|
+
return [".cjs"];
|
|
147
|
+
case ".tsx":
|
|
148
|
+
case ".jsx":
|
|
149
|
+
return [".js", ".jsx"];
|
|
137
150
|
default:
|
|
138
|
-
return ".js";
|
|
151
|
+
return [".js"];
|
|
139
152
|
}
|
|
140
153
|
}
|
|
141
|
-
/** Return true when `filename` has a
|
|
154
|
+
/** Return true when `filename` has a JavaScript output extension. */
|
|
142
155
|
function isJavaScriptOutput(filename) {
|
|
143
|
-
return /\.(?:[cm]?js)$/i.test(filename);
|
|
156
|
+
return /\.(?:[cm]?js|jsx)$/i.test(filename);
|
|
157
|
+
}
|
|
158
|
+
function emittedPathKey(filename) {
|
|
159
|
+
const resolved = node_path_1.default.resolve(filename);
|
|
160
|
+
return process.platform === "win32" ? resolved.toLowerCase() : resolved;
|
|
144
161
|
}
|
|
145
162
|
//# sourceMappingURL=resolveEmittedJavaScript.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveEmittedJavaScript.js","sourceRoot":"","sources":["../../../src/compiler/internal/resolveEmittedJavaScript.ts"],"names":[],"mappings":";;;;;;AAAA,sDAAyB;AACzB,0DAA6B;AAE7B,mCAAgD;AAEhD
|
|
1
|
+
{"version":3,"file":"resolveEmittedJavaScript.js","sourceRoot":"","sources":["../../../src/compiler/internal/resolveEmittedJavaScript.ts"],"names":[],"mappings":"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"}
|