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
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
export const PLUGIN_DESCRIPTOR_MAX_BUFFER_BYTES = 16 * 1024 * 1024;
|
|
2
|
+
export const PLUGIN_DESCRIPTOR_TIMEOUT_MS = 60_000;
|
|
3
|
+
export const PLUGIN_DESCRIPTOR_TEARDOWN_GRACE_MS = 5_000;
|
|
4
|
+
export const PLUGIN_DESCRIPTOR_STATUS_FD = 3;
|
|
5
|
+
export const PLUGIN_DESCRIPTOR_PROCESS_OPTIONS = Object.freeze({
|
|
6
|
+
killSignal: "SIGKILL" as const,
|
|
7
|
+
maxBuffer: PLUGIN_DESCRIPTOR_MAX_BUFFER_BYTES,
|
|
8
|
+
timeout: PLUGIN_DESCRIPTOR_TIMEOUT_MS + PLUGIN_DESCRIPTOR_TEARDOWN_GRACE_MS,
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
interface DescriptorProcessResult {
|
|
12
|
+
error?: Error;
|
|
13
|
+
output?: readonly (string | null)[] | null;
|
|
14
|
+
signal: NodeJS.Signals | null;
|
|
15
|
+
status: number | null;
|
|
16
|
+
stderr: string | null | undefined;
|
|
17
|
+
stdout: string | null | undefined;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Classify the ways the isolated TypeScript descriptor evaluator can stop.
|
|
22
|
+
*
|
|
23
|
+
* Node reports both timeout and max-buffer termination with the configured
|
|
24
|
+
* signal, so the process error code must take precedence over the signal. The
|
|
25
|
+
* evaluator uses `SIGKILL`: Node's synchronous process API otherwise keeps
|
|
26
|
+
* waiting when a POSIX child handles the default `SIGTERM` without exiting.
|
|
27
|
+
*/
|
|
28
|
+
export function pluginDescriptorProcessFailure(
|
|
29
|
+
result: DescriptorProcessResult,
|
|
30
|
+
request: string,
|
|
31
|
+
): Error | undefined {
|
|
32
|
+
const code = (result.error as NodeJS.ErrnoException | undefined)?.code;
|
|
33
|
+
const nestedCode = result.output?.[PLUGIN_DESCRIPTOR_STATUS_FD]?.trim() ?? "";
|
|
34
|
+
if (code === "ETIMEDOUT" || nestedCode === "ETIMEDOUT") {
|
|
35
|
+
return new Error(
|
|
36
|
+
`ttsc: plugin descriptor "${request}" evaluation through ttsx timed out after ` +
|
|
37
|
+
`${PLUGIN_DESCRIPTOR_TIMEOUT_MS / 1_000} seconds. ` +
|
|
38
|
+
"Descriptor modules and factories must finish their setup within that window.",
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
if (code === "ENOBUFS" || nestedCode === "ENOBUFS") {
|
|
42
|
+
return new Error(
|
|
43
|
+
`ttsc: plugin descriptor "${request}" evaluation through ttsx exceeded the ` +
|
|
44
|
+
`${PLUGIN_DESCRIPTOR_MAX_BUFFER_BYTES / (1024 * 1024)} MiB process output limit. ` +
|
|
45
|
+
"Reduce stdout and stderr from the descriptor and its dependencies.",
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
if (result.error) {
|
|
49
|
+
return new Error(
|
|
50
|
+
`ttsc: failed to launch ttsx for plugin descriptor "${request}": ${result.error.message}`,
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
if (result.signal) {
|
|
54
|
+
return new Error(
|
|
55
|
+
`ttsc: plugin descriptor "${request}" evaluation through ttsx was killed by signal ${result.signal}.`,
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
if (result.status !== 0) {
|
|
59
|
+
const reason = descriptorFailureReason(
|
|
60
|
+
hasText(result.stderr) ? result.stderr : result.stdout,
|
|
61
|
+
);
|
|
62
|
+
return new Error(
|
|
63
|
+
`ttsc: plugin descriptor "${request}" evaluation through ttsx failed with exit code ${String(result.status)}` +
|
|
64
|
+
(reason === "" ? "" : "\n" + reason),
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Pass the semantic deadline and private status pipe through the `ttsx` wrapper
|
|
72
|
+
* to the runtime child that actually executes the descriptor.
|
|
73
|
+
*/
|
|
74
|
+
export function pluginDescriptorBoundaryEnvironment(
|
|
75
|
+
now: number = Date.now(),
|
|
76
|
+
): NodeJS.ProcessEnv {
|
|
77
|
+
return {
|
|
78
|
+
TTSC_TTSX_EVALUATOR_DEADLINE_MS: String(now + PLUGIN_DESCRIPTOR_TIMEOUT_MS),
|
|
79
|
+
TTSC_TTSX_EVALUATOR_MAX_BUFFER_BYTES: String(
|
|
80
|
+
PLUGIN_DESCRIPTOR_MAX_BUFFER_BYTES,
|
|
81
|
+
),
|
|
82
|
+
TTSC_TTSX_EVALUATOR_STATUS_FD: String(PLUGIN_DESCRIPTOR_STATUS_FD),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function hasText(value: string | null | undefined): value is string {
|
|
87
|
+
return value !== null && value !== undefined && value.trim() !== "";
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function descriptorFailureReason(stderr: string | null | undefined): string {
|
|
91
|
+
const bounded = (stderr ?? "").slice(-PLUGIN_DESCRIPTOR_REASON_MAX_CHARS);
|
|
92
|
+
const lines = bounded
|
|
93
|
+
.split(/\r?\n/)
|
|
94
|
+
.map((line) => line.trimEnd())
|
|
95
|
+
.filter((line) => line.trim() !== "");
|
|
96
|
+
return lines.slice(-PLUGIN_DESCRIPTOR_REASON_LINES).join("\n");
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const PLUGIN_DESCRIPTOR_REASON_LINES = 5;
|
|
100
|
+
const PLUGIN_DESCRIPTOR_REASON_MAX_CHARS = 8 * 1024;
|
|
@@ -15,6 +15,13 @@ import type { TtscPluginStage } from "../../structures/TtscPluginStage";
|
|
|
15
15
|
import type { ITtscLoadedNativePlugin } from "../../structures/internal/ITtscLoadedNativePlugin";
|
|
16
16
|
import type { ITtscParsedProjectConfig } from "../../structures/internal/ITtscParsedProjectConfig";
|
|
17
17
|
import { buildSourcePlugin } from "./buildSourcePlugin";
|
|
18
|
+
import {
|
|
19
|
+
PLUGIN_DESCRIPTOR_MAX_BUFFER_BYTES,
|
|
20
|
+
PLUGIN_DESCRIPTOR_PROCESS_OPTIONS,
|
|
21
|
+
PLUGIN_DESCRIPTOR_STATUS_FD,
|
|
22
|
+
pluginDescriptorBoundaryEnvironment,
|
|
23
|
+
pluginDescriptorProcessFailure,
|
|
24
|
+
} from "./descriptorProcessFailure";
|
|
18
25
|
|
|
19
26
|
const GO_MOD_SEARCH_MAX_DEPTH = 3;
|
|
20
27
|
|
|
@@ -65,6 +72,7 @@ export function loadProjectPlugins(options: {
|
|
|
65
72
|
entries?: readonly ITtscProjectPluginConfig[] | false;
|
|
66
73
|
env?: NodeJS.ProcessEnv;
|
|
67
74
|
file?: string;
|
|
75
|
+
onWatchInputs?: (inputs: readonly string[]) => void;
|
|
68
76
|
pluginConfigDir?: string;
|
|
69
77
|
projectRoot?: string;
|
|
70
78
|
tsconfig?: string;
|
|
@@ -86,6 +94,7 @@ export function loadProjectPlugins(options: {
|
|
|
86
94
|
(entry) => entry.config.enabled !== false,
|
|
87
95
|
);
|
|
88
96
|
if (entries.length === 0) {
|
|
97
|
+
options.onWatchInputs?.([]);
|
|
89
98
|
return {
|
|
90
99
|
nativePlugins: [],
|
|
91
100
|
project,
|
|
@@ -150,6 +159,12 @@ export function loadProjectPlugins(options: {
|
|
|
150
159
|
stage,
|
|
151
160
|
};
|
|
152
161
|
});
|
|
162
|
+
options.onWatchInputs?.(
|
|
163
|
+
records.flatMap((record) => [
|
|
164
|
+
record.source,
|
|
165
|
+
...(record.contributors?.map((contributor) => contributor.source) ?? []),
|
|
166
|
+
]),
|
|
167
|
+
);
|
|
153
168
|
const linkedContributors = records
|
|
154
169
|
.filter((record) => record.stage === "transform")
|
|
155
170
|
.flatMap((record) =>
|
|
@@ -758,25 +773,51 @@ function loadDescriptorViaTtsx(
|
|
|
758
773
|
TTSC_PLUGIN_DESCRIPTOR_LOAD: "1",
|
|
759
774
|
TTSC_PLUGIN_DESCRIPTOR_OUT: out,
|
|
760
775
|
TTSC_PLUGIN_ENTRY: request,
|
|
776
|
+
...pluginDescriptorBoundaryEnvironment(),
|
|
761
777
|
},
|
|
778
|
+
...PLUGIN_DESCRIPTOR_PROCESS_OPTIONS,
|
|
779
|
+
stdio: [
|
|
780
|
+
"ignore",
|
|
781
|
+
"pipe",
|
|
782
|
+
"pipe",
|
|
783
|
+
...Array.from(
|
|
784
|
+
{ length: PLUGIN_DESCRIPTOR_STATUS_FD - 2 },
|
|
785
|
+
() => "pipe" as const,
|
|
786
|
+
),
|
|
787
|
+
],
|
|
762
788
|
windowsHide: true,
|
|
763
789
|
});
|
|
764
|
-
|
|
790
|
+
const processFailure = pluginDescriptorProcessFailure(result, request);
|
|
791
|
+
if (processFailure) throw processFailure;
|
|
792
|
+
if (!fs.existsSync(out)) {
|
|
793
|
+
throw new Error(
|
|
794
|
+
`ttsc: plugin descriptor "${request}" evaluation through ttsx produced no descriptor output.`,
|
|
795
|
+
);
|
|
796
|
+
}
|
|
797
|
+
const outputSize = fs.statSync(out).size;
|
|
798
|
+
if (outputSize > PLUGIN_DESCRIPTOR_MAX_BUFFER_BYTES) {
|
|
765
799
|
throw new Error(
|
|
766
|
-
|
|
767
|
-
`
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
800
|
+
`ttsc: plugin descriptor "${request}" produced ${outputSize} bytes of JSON, ` +
|
|
801
|
+
`exceeding the ${PLUGIN_DESCRIPTOR_MAX_BUFFER_BYTES / (1024 * 1024)} MiB descriptor output limit.`,
|
|
802
|
+
);
|
|
803
|
+
}
|
|
804
|
+
const text = fs.readFileSync(out, "utf8");
|
|
805
|
+
try {
|
|
806
|
+
return JSON.parse(text);
|
|
807
|
+
} catch (error) {
|
|
808
|
+
throw new Error(
|
|
809
|
+
`ttsc: plugin descriptor "${request}" produced invalid JSON: ${errorMessage(error)}`,
|
|
772
810
|
);
|
|
773
811
|
}
|
|
774
|
-
return JSON.parse(fs.readFileSync(out, "utf8"));
|
|
775
812
|
} finally {
|
|
776
813
|
fs.rmSync(dir, { force: true, recursive: true });
|
|
777
814
|
}
|
|
778
815
|
}
|
|
779
816
|
|
|
817
|
+
function errorMessage(error: unknown): string {
|
|
818
|
+
return error instanceof Error ? error.message : String(error);
|
|
819
|
+
}
|
|
820
|
+
|
|
780
821
|
function withPluginLoaderEnv<T>(run: () => T): T {
|
|
781
822
|
const previousNode = process.env.TTSC_NODE_BINARY;
|
|
782
823
|
const previousTtsx = process.env.TTSC_TTSX_BINARY;
|
|
@@ -46,6 +46,40 @@ export interface ITtscPluginCapabilities {
|
|
|
46
46
|
*/
|
|
47
47
|
projectContextArgs?: boolean;
|
|
48
48
|
|
|
49
|
+
/**
|
|
50
|
+
* Whether the LSP sidecar implements the standalone `lsp-project-diagnostics`
|
|
51
|
+
* command.
|
|
52
|
+
*
|
|
53
|
+
* The command evaluates project rules without an open document. It is
|
|
54
|
+
* independent of `projectInputs`, which publishes only filesystem topology.
|
|
55
|
+
*
|
|
56
|
+
* @default false
|
|
57
|
+
*/
|
|
58
|
+
projectDiagnostics?: boolean;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Whether the sidecar implements the `project-inputs` command. The command
|
|
62
|
+
* publishes normalized exact paths and glob populations declared by enabled
|
|
63
|
+
* project rules without loading a TypeScript Program.
|
|
64
|
+
*
|
|
65
|
+
* @default false
|
|
66
|
+
*/
|
|
67
|
+
projectInputs?: boolean;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Whether the check-stage sidecar implements the newline-delimited
|
|
71
|
+
* `check-serve` protocol used by `ttsc check --watch`.
|
|
72
|
+
*
|
|
73
|
+
* A resident check host keeps one no-emit TypeScript Program across
|
|
74
|
+
* compatible source and declared external-input changes while constructing a
|
|
75
|
+
* fresh rule engine and reporter for every request. The launcher retains the
|
|
76
|
+
* spawn-per-cycle path when this capability is absent and never uses it for
|
|
77
|
+
* transform or emit work.
|
|
78
|
+
*
|
|
79
|
+
* @default false
|
|
80
|
+
*/
|
|
81
|
+
residentCheck?: boolean;
|
|
82
|
+
|
|
49
83
|
/**
|
|
50
84
|
* Whether the sidecar accepts `--singleThreaded` and `--checkers` on its
|
|
51
85
|
* command line. The lint sidecar parses both flags via `parseSubcommandFlags`
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** Normalized local filesystem dependencies published by project rules. */
|
|
2
|
+
export interface ITtscProjectInputSnapshot {
|
|
3
|
+
/** Exact absolute paths, retained even while missing. */
|
|
4
|
+
files: readonly string[];
|
|
5
|
+
/** Absolute glob patterns using forward-slash separators. */
|
|
6
|
+
globs: readonly string[];
|
|
7
|
+
/** Exact paths whose change invalidates plugin/execution selection. */
|
|
8
|
+
reloadFiles?: readonly string[];
|
|
9
|
+
/** Directories whose immediate topology changes execution selection. */
|
|
10
|
+
reloadDirectories?: readonly string[];
|
|
11
|
+
/** Physical project root that anchored relative declarations. */
|
|
12
|
+
root: string;
|
|
13
|
+
/**
|
|
14
|
+
* The spellings the contributors published, before identity normalization.
|
|
15
|
+
*
|
|
16
|
+
* Normalizing a declaration resolves it through every symlink on its way, so
|
|
17
|
+
* the retained snapshot names the file the link currently points at rather
|
|
18
|
+
* than the link. That is what every comparison needs and the wrong thing to
|
|
19
|
+
* watch: retargeting or replacing the link is exactly what decides which
|
|
20
|
+
* bytes the declaration names next, and it happens at the spelling that
|
|
21
|
+
* normalization discarded. Consumers that install watchers keep both.
|
|
22
|
+
*/
|
|
23
|
+
declared?: {
|
|
24
|
+
files: readonly string[];
|
|
25
|
+
globs: readonly string[];
|
|
26
|
+
reloadFiles?: readonly string[];
|
|
27
|
+
reloadDirectories?: readonly string[];
|
|
28
|
+
};
|
|
29
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ITtscProjectInputSnapshot } from "./ITtscProjectInputSnapshot";
|
|
1
2
|
import type { TtscCommonOptions } from "./TtscCommonOptions";
|
|
2
3
|
|
|
3
4
|
/** Internal options for emitting one source file through the file-argument path. */
|
|
@@ -10,4 +11,8 @@ export interface TtscSingleFileEmitOptions extends TtscCommonOptions {
|
|
|
10
11
|
out?: string;
|
|
11
12
|
/** Suppress summary banners from ttsc/native sidecars. Defaults to `true`. */
|
|
12
13
|
quiet?: boolean;
|
|
14
|
+
/** Receive native-plugin source roots when a watch owns this invocation. */
|
|
15
|
+
onWatchInputs?: (inputs: readonly string[]) => void;
|
|
16
|
+
/** Receive project-rule filesystem inputs when a watch owns this invocation. */
|
|
17
|
+
onProjectInputs?: (inputs: ITtscProjectInputSnapshot) => void;
|
|
13
18
|
}
|
|
@@ -40,7 +40,6 @@
|
|
|
40
40
|
"ESCAPE|checker|VerbosityContext",
|
|
41
41
|
"ESCAPE|core|LimitedSemaphore",
|
|
42
42
|
"ESCAPE|core|ModuleDetectionKind",
|
|
43
|
-
"ESCAPE|core|ModuleResolutionKind",
|
|
44
43
|
"ESCAPE|core|NewLineKind",
|
|
45
44
|
"ESCAPE|core|ParsedOptions",
|
|
46
45
|
"ESCAPE|core|Pattern",
|
|
@@ -194,8 +193,6 @@
|
|
|
194
193
|
"FUNC|ast|IsBindableStaticAccessExpression",
|
|
195
194
|
"FUNC|ast|IsBindableStaticElementAccessExpression",
|
|
196
195
|
"FUNC|ast|IsBindableStaticNameExpression",
|
|
197
|
-
"FUNC|ast|IsBindingElement",
|
|
198
|
-
"FUNC|ast|IsBindingPattern",
|
|
199
196
|
"FUNC|ast|IsBitwiseOperator",
|
|
200
197
|
"FUNC|ast|IsBitwiseOperatorOrHigher",
|
|
201
198
|
"FUNC|ast|IsBlock",
|
|
@@ -239,10 +236,8 @@
|
|
|
239
236
|
"FUNC|ast|IsContextualKeyword",
|
|
240
237
|
"FUNC|ast|IsContinueStatement",
|
|
241
238
|
"FUNC|ast|IsDebuggerStatement",
|
|
242
|
-
"FUNC|ast|IsDeclaration",
|
|
243
239
|
"FUNC|ast|IsDeclarationBindingElement",
|
|
244
240
|
"FUNC|ast|IsDeclarationName",
|
|
245
|
-
"FUNC|ast|IsDeclarationNameOrImportPropertyName",
|
|
246
241
|
"FUNC|ast|IsDeclarationNode",
|
|
247
242
|
"FUNC|ast|IsDeclarationStatement",
|
|
248
243
|
"FUNC|ast|IsDecorator",
|
|
@@ -279,7 +274,6 @@
|
|
|
279
274
|
"FUNC|ast|IsExportSpecifier",
|
|
280
275
|
"FUNC|ast|IsExportsIdentifier",
|
|
281
276
|
"FUNC|ast|IsExpression",
|
|
282
|
-
"FUNC|ast|IsExpressionNode",
|
|
283
277
|
"FUNC|ast|IsExpressionOfOptionalChainRoot",
|
|
284
278
|
"FUNC|ast|IsExpressionStatement",
|
|
285
279
|
"FUNC|ast|IsExpressionWithTypeArguments",
|
|
@@ -567,15 +561,12 @@
|
|
|
567
561
|
"FUNC|ast|IsThisTypeNode",
|
|
568
562
|
"FUNC|ast|IsThrowStatement",
|
|
569
563
|
"FUNC|ast|IsToken",
|
|
570
|
-
"FUNC|ast|IsTokenKind",
|
|
571
564
|
"FUNC|ast|IsTrivia",
|
|
572
565
|
"FUNC|ast|IsTriviaKind",
|
|
573
566
|
"FUNC|ast|IsTryStatement",
|
|
574
567
|
"FUNC|ast|IsTupleTypeNode",
|
|
575
568
|
"FUNC|ast|IsTypeAliasDeclaration",
|
|
576
569
|
"FUNC|ast|IsTypeAssertion",
|
|
577
|
-
"FUNC|ast|IsTypeDeclaration",
|
|
578
|
-
"FUNC|ast|IsTypeDeclarationName",
|
|
579
570
|
"FUNC|ast|IsTypeElement",
|
|
580
571
|
"FUNC|ast|IsTypeKeywordToken",
|
|
581
572
|
"FUNC|ast|IsTypeLiteralNode",
|