ttsc 0.19.2 → 0.20.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/README.md +7 -5
- package/cmd/graphdump/main.go +2 -4
- package/cmd/ttsc/filter.go +12 -4
- package/cmd/ttsc/filter_resolves_flag_names_case_insensitively_test.go +53 -0
- package/cmd/ttsc/flags_gen.go +3 -3
- package/cmd/ttscgraph/dump.go +5 -7
- package/cmd/ttscgraph/run_dump_emits_only_checker_verified_member_relations_test.go +118 -0
- package/cmd/ttscgraph/serve.go +58 -308
- package/cmd/ttscgraph/serve_session_keeps_base_url_fallback_unchanged_test.go +49 -0
- package/cmd/ttscgraph/serve_session_keeps_esm_directory_candidate_unchanged_test.go +61 -0
- package/cmd/ttscgraph/serve_session_keeps_exports_blocked_file_candidates_unchanged_test.go +64 -0
- package/cmd/ttscgraph/serve_session_keeps_inactive_conditional_export_unchanged_test.go +66 -0
- package/cmd/ttscgraph/serve_session_keeps_lower_priority_module_candidate_unchanged_test.go +67 -0
- package/cmd/ttscgraph/serve_session_keeps_lower_priority_paths_pattern_unchanged_test.go +58 -0
- package/cmd/ttscgraph/serve_session_keeps_nonlongest_root_dirs_candidate_unchanged_test.go +54 -0
- package/cmd/ttscgraph/serve_session_reloads_commonjs_package_entry_for_esm_test.go +50 -0
- package/cmd/ttscgraph/serve_session_reloads_module_suffix_candidate_test.go +41 -0
- package/cmd/ttscgraph/serve_session_reloads_superseding_module_candidates_test.go +216 -0
- package/cmd/ttscgraph/serve_session_retries_failed_dump_test.go +103 -0
- package/driver/graph.go +12 -6
- package/driver/lsp.go +30 -0
- package/driver/program.go +37 -1
- package/driver/resolution_candidates.go +819 -0
- package/driver/windowsjunction/windowsjunction.go +40 -0
- package/go.mod +2 -0
- package/internal/graph/build.go +45 -11
- package/internal/graph/dump.go +312 -108
- package/internal/graph/dump_checkout_paths_are_stable_test.go +210 -0
- package/internal/graph/dump_diagnostics_ride_the_generation_that_built_it_test.go +9 -3
- package/internal/graph/dump_paths.go +172 -0
- package/internal/graph/dump_paths_are_portable_and_injective_test.go +93 -0
- package/internal/graph/dump_schema_version_matches_the_typescript_client_test.go +1 -1
- package/internal/graph/dump_uses_ecma_line_terminators_test.go +87 -0
- package/internal/graph/duplicate_variable_object_members_keep_first_declaration_test.go +61 -0
- package/internal/graph/edges.go +220 -5
- package/internal/graph/enum_members_carry_their_names_on_the_enum_node_test.go +131 -0
- package/internal/graph/graph.go +177 -5
- package/internal/graph/line_model.go +122 -0
- package/internal/graph/literals.go +175 -0
- package/internal/graph/literals_are_absent_when_the_type_admits_more_than_it_can_name_test.go +74 -0
- package/internal/graph/literals_cover_enum_members_the_graph_has_no_nodes_for_test.go +79 -0
- package/internal/graph/literals_do_not_depend_on_declaration_line_wrapping_test.go +84 -0
- package/internal/graph/literals_render_every_value_in_typescript_source_form_test.go +77 -0
- package/internal/graph/literals_resolve_through_alias_indirection_test.go +64 -0
- package/internal/graph/member_relation_edges_follow_checker_validity_test.go +85 -0
- package/internal/graph/member_relation_edges_preserve_checker_boundaries_test.go +191 -0
- package/internal/graph/member_relation_edges_reject_checker_invalid_pairs_test.go +119 -0
- package/internal/graph/node_ids_preserve_hash_bearing_components_test.go +41 -0
- package/internal/graph/node_modifiers_emit_union_strings_test.go +4 -1
- package/internal/graph/object_literal_members_ride_on_the_snapshot_test.go +192 -0
- package/internal/graph/object_member_signatures_preserve_literal_whitespace_test.go +67 -0
- package/internal/graph/object_members.go +229 -0
- package/internal/graph/provenance.go +88 -30
- package/internal/graph/source_texts_cover_every_resident_program_source_test.go +73 -0
- package/internal/graphsymbols/position_helpers_follow_ecma_line_terminators_test.go +66 -0
- package/internal/graphsymbols/provider.go +26 -91
- package/internal/lspserver/lsp_clean_didopen_refreshes_compiler_state_test.go +144 -0
- package/internal/lspserver/lsp_completion.go +109 -0
- package/internal/lspserver/lsp_completion_gate_never_refuses_a_matching_line_test.go +50 -0
- package/internal/lspserver/lsp_completion_hints_longest_trigger_wins_test.go +149 -0
- package/internal/lspserver/lsp_completion_hints_nearest_trigger_wins_test.go +37 -0
- package/internal/lspserver/lsp_completion_merges_into_upstream_response_test.go +149 -0
- package/internal/lspserver/lsp_completion_nearest_hint_replaces_nearest_filter_test.go +43 -0
- package/internal/lspserver/lsp_completion_preserves_completion_list_extensions_test.go +99 -0
- package/internal/lspserver/lsp_completion_refuses_hints_inside_a_string_literal_test.go +69 -0
- package/internal/lspserver/lsp_completion_replaces_full_filter_in_rank_order_test.go +85 -0
- package/internal/lspserver/lsp_completion_request.go +455 -0
- package/internal/lspserver/lsp_completion_scope.go +530 -0
- package/internal/lspserver/lsp_completion_scope_bench_test.go +41 -0
- package/internal/lspserver/lsp_completion_scope_classifies_regex_statement_and_operator_boundaries_test.go +39 -0
- package/internal/lspserver/lsp_completion_scope_ignores_jsdoc_bytes_in_literals_test.go +108 -0
- package/internal/lspserver/lsp_completion_scope_refuses_regex_hints_test.go +52 -0
- package/internal/lspserver/lsp_completion_trigger_uses_last_rune_test.go +24 -0
- package/internal/lspserver/lsp_deleted_watched_file_withdraws_plugin_diagnostics_test.go +110 -0
- package/internal/lspserver/lsp_didsave_keeps_the_incremental_changed_uri_path_test.go +78 -0
- package/internal/lspserver/lsp_hints_absence_is_not_an_error_test.go +46 -0
- package/internal/lspserver/lsp_hints_refresh_coalesces_concurrent_requests_test.go +82 -0
- package/internal/lspserver/lsp_hints_refresh_ignores_a_superseded_generation_test.go +40 -0
- package/internal/lspserver/lsp_hints_refresh_keeps_each_producer_isolated_test.go +64 -0
- package/internal/lspserver/lsp_hints_refresh_replaces_the_session_snapshot_test.go +66 -0
- package/internal/lspserver/lsp_hints_refresh_scheduled_by_editor_events_test.go +90 -0
- package/internal/lspserver/lsp_hints_refresh_serves_completion_while_running_test.go +91 -0
- package/internal/lspserver/lsp_index_byte_from_bounds_its_search_start_test.go +38 -0
- package/internal/lspserver/lsp_initialize_constrains_position_encoding_to_utf16_test.go +205 -0
- package/internal/lspserver/lsp_late_completion_trigger_is_reported_once_test.go +105 -0
- package/internal/lspserver/lsp_native_completion_hints_decode_flat_lint_wire_test.go +66 -0
- package/internal/lspserver/lsp_native_completion_hints_grouped_compatibility_boundary_test.go +60 -0
- package/internal/lspserver/lsp_native_plugin_source.go +315 -2
- package/internal/lspserver/lsp_native_resident.go +304 -0
- package/internal/lspserver/lsp_plugin.go +85 -8
- package/internal/lspserver/lsp_plugin_completion_resolve_stays_local_test.go +82 -0
- package/internal/lspserver/lsp_position_conversions_span_astral_and_combining_runes_test.go +119 -0
- package/internal/lspserver/lsp_proxy.go +601 -9
- package/internal/lspserver/lsp_refresh.go +70 -0
- package/internal/lspserver/lsp_resident_falls_back_when_serve_unsupported_test.go +43 -0
- package/internal/lspserver/lsp_resident_maps_verb_args_test.go +34 -0
- package/internal/lspserver/lsp_server.go +13 -1
- package/internal/lspserver/lsp_watched_file_changes_reach_compiler_caches_test.go +172 -0
- package/lib/TtscCompiler.d.ts +3 -1
- package/lib/TtscCompiler.js +5 -1
- package/lib/TtscCompiler.js.map +1 -1
- package/lib/TtscService.d.ts +13 -3
- package/lib/TtscService.js +6 -6
- package/lib/TtscService.js.map +1 -1
- package/lib/compiler/internal/project/readConfigJson.d.ts +30 -0
- package/lib/compiler/internal/project/readConfigJson.js +208 -0
- package/lib/compiler/internal/project/readConfigJson.js.map +1 -0
- package/lib/compiler/internal/project/readProjectConfig.js +53 -149
- package/lib/compiler/internal/project/readProjectConfig.js.map +1 -1
- package/lib/compiler/internal/residentTransformProcess.d.ts +15 -2
- package/lib/compiler/internal/residentTransformProcess.js +159 -39
- package/lib/compiler/internal/residentTransformProcess.js.map +1 -1
- package/lib/compiler/internal/runBuild.d.ts +6 -0
- package/lib/compiler/internal/runBuild.js +143 -44
- package/lib/compiler/internal/runBuild.js.map +1 -1
- package/lib/compiler/internal/startResidentTransform.d.ts +5 -1
- package/lib/compiler/internal/startResidentTransform.js +3 -1
- package/lib/compiler/internal/startResidentTransform.js.map +1 -1
- package/lib/compiler/internal/transformProjectInMemory.js +12 -2
- package/lib/compiler/internal/transformProjectInMemory.js.map +1 -1
- package/lib/flags/parser.d.ts +19 -0
- package/lib/flags/parser.js +78 -36
- package/lib/flags/parser.js.map +1 -1
- package/lib/flags/schema.d.ts +49 -11
- package/lib/flags/schema.js +94 -22
- package/lib/flags/schema.js.map +1 -1
- package/lib/internal/assertSafeExplicitCacheDirectory.d.ts +5 -0
- package/lib/internal/assertSafeExplicitCacheDirectory.js +26 -0
- package/lib/internal/assertSafeExplicitCacheDirectory.js.map +1 -0
- package/lib/launcher/internal/runTtsc.js +107 -69
- package/lib/launcher/internal/runTtsc.js.map +1 -1
- package/lib/launcher/internal/runTtsx.js +28 -41
- package/lib/launcher/internal/runTtsx.js.map +1 -1
- package/lib/launcher/internal/runtimeHooks.d.ts +15 -0
- package/lib/launcher/internal/runtimeHooks.js +18 -1
- package/lib/launcher/internal/runtimeHooks.js.map +1 -1
- package/lib/launcher/internal/watchTopology.d.ts +43 -0
- package/lib/launcher/internal/watchTopology.js +360 -0
- package/lib/launcher/internal/watchTopology.js.map +1 -0
- package/lib/plugin/internal/buildSourcePlugin.d.ts +14 -3
- package/lib/plugin/internal/buildSourcePlugin.js +247 -61
- package/lib/plugin/internal/buildSourcePlugin.js.map +1 -1
- package/lib/plugin/internal/loadProjectPlugins.js +63 -2
- package/lib/plugin/internal/loadProjectPlugins.js.map +1 -1
- package/lib/structures/ITtscCompilerTransformation.d.ts +16 -0
- package/lib/structures/internal/ITtscParsedProjectConfig.d.ts +2 -0
- package/package.json +8 -8
- package/shim/ast/shim.go +48 -3
- package/shim/astnav/go.mod +14 -0
- package/shim/astnav/go.sum +20 -0
- package/shim/astnav/shim.go +15 -0
- package/shim/checker/shim.go +113 -0
- package/shim/core/shim.go +47 -0
- package/shim/diagnosticwriter/lint.go +50 -0
- package/src/TtscCompiler.ts +5 -1
- package/src/TtscService.ts +37 -10
- package/src/compiler/internal/project/readConfigJson.ts +209 -0
- package/src/compiler/internal/project/readProjectConfig.ts +62 -158
- package/src/compiler/internal/residentTransformProcess.ts +197 -39
- package/src/compiler/internal/runBuild.ts +169 -47
- package/src/compiler/internal/startResidentTransform.ts +12 -1
- package/src/compiler/internal/transformProjectInMemory.ts +12 -1
- package/src/flags/parser.ts +113 -42
- package/src/flags/schema.ts +113 -31
- package/src/internal/assertSafeExplicitCacheDirectory.ts +29 -0
- package/src/launcher/internal/runTtsc.ts +117 -68
- package/src/launcher/internal/runTtsx.ts +29 -44
- package/src/launcher/internal/runtimeHooks.ts +30 -2
- package/src/launcher/internal/watchTopology.ts +466 -0
- package/src/plugin/internal/buildSourcePlugin.ts +326 -64
- package/src/plugin/internal/loadProjectPlugins.ts +80 -2
- package/src/structures/ITtscCompilerTransformation.ts +17 -0
- package/src/structures/internal/ITtscParsedProjectConfig.ts +2 -0
- package/tools/shim_audit/baseline.json +0 -3
- package/tools/shim_audit/main.go +42 -14
- package/tools/shim_audit/shim_dir_coverage_test.go +25 -0
- package/utility/flags_gen.go +3 -3
- package/utility/host.go +9 -3
package/lib/flags/schema.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Subcommands the ttsc CLI dispatches to. The bare `"ttsc"` entry covers the
|
|
3
3
|
* default lane (no explicit subcommand, e.g. `ttsc -p tsconfig.json`).
|
|
4
4
|
*/
|
|
5
|
-
export type TtscSubcommand = "ttsc" | "build" | "check" | "fix" | "format" | "prepare" | "clean";
|
|
5
|
+
export type TtscSubcommand = "ttsc" | "build" | "cache" | "check" | "fix" | "format" | "prepare" | "clean";
|
|
6
6
|
/**
|
|
7
7
|
* Subcommands the ttsx CLI dispatches to. ttsx exposes a single lane today but
|
|
8
8
|
* the schema mirrors ttsc's shape so future subcommands plug in without a
|
|
@@ -83,6 +83,24 @@ export interface FlagSpec {
|
|
|
83
83
|
* `--showConfig prints twice` bug appeared (RC-2).
|
|
84
84
|
*/
|
|
85
85
|
readonly terminal?: boolean;
|
|
86
|
+
/**
|
|
87
|
+
* `true` when a `terminal` flag's meaning does not presuppose a resolved
|
|
88
|
+
* project, so ttsc must answer it before project resolution runs (`--init`
|
|
89
|
+
* writes the starter tsconfig, `--all` and `-?` print tsgo's help). Without
|
|
90
|
+
* this split `ttsc --init` failed with "could not find tsconfig.json …" in
|
|
91
|
+
* the only directory where it is useful.
|
|
92
|
+
*
|
|
93
|
+
* `--showConfig` and `--listFilesOnly` are terminal but deliberately NOT
|
|
94
|
+
* project-free: both describe a project, so failing without one is correct.
|
|
95
|
+
*/
|
|
96
|
+
readonly projectFree?: boolean;
|
|
97
|
+
/**
|
|
98
|
+
* `true` when every occurrence of a repeated `value` flag counts rather than
|
|
99
|
+
* the last one winning (`ttsx -r a -r b` preloads both). The engine keeps the
|
|
100
|
+
* last value in `ParseResult.values` for callers that want a single answer
|
|
101
|
+
* and records the complete ordered list in `ParseResult.repeated`.
|
|
102
|
+
*/
|
|
103
|
+
readonly repeatable?: boolean;
|
|
86
104
|
/**
|
|
87
105
|
* `true` when ttsc may add this flag to tsgo internally and post-process the
|
|
88
106
|
* output. If the user also forwards the same flag, ttsc keeps the
|
|
@@ -119,21 +137,41 @@ export interface FlagSpec {
|
|
|
119
137
|
*/
|
|
120
138
|
export declare const FLAG_SCHEMA: readonly FlagSpec[];
|
|
121
139
|
/**
|
|
122
|
-
*
|
|
123
|
-
*
|
|
140
|
+
* Normalize a CLI token to the identity the compiler ttsc wraps resolves it by:
|
|
141
|
+
* one or two leading dashes removed, the remainder lower-cased.
|
|
142
|
+
*
|
|
143
|
+
* TypeScript's option parser — legacy `tsc` and native tsgo alike — strips a
|
|
144
|
+
* `--` or `-` prefix and matches the rest case-insensitively, so `--noEmit`,
|
|
145
|
+
* `--noemit`, `--NOEMIT`, and `-noEmit` all name the same option to the tool
|
|
146
|
+
* ttsc forwards to. The launcher used to key its index on the exact spelling,
|
|
147
|
+
* so a case variant of a ttsc-owned flag fell through the unknown-flag escape
|
|
148
|
+
* hatch: tsgo honoured it and every ttsc-side consumer of the same flag never
|
|
149
|
+
* fired, with no diagnostic.
|
|
150
|
+
*
|
|
151
|
+
* This is the single normalization. Everything that resolves a token against
|
|
152
|
+
* `FLAG_SCHEMA` — the parsing engine, the terminal / shadow / project-free
|
|
153
|
+
* classifications, and the generated Go allow-lists — keys off this function,
|
|
154
|
+
* so no two layers can disagree about which flag a spelling names.
|
|
124
155
|
*/
|
|
125
|
-
export declare
|
|
156
|
+
export declare function normalizeFlagToken(token: string): string;
|
|
126
157
|
/**
|
|
127
|
-
*
|
|
128
|
-
*
|
|
158
|
+
* Resolve a raw argv token to the flag it names, or `undefined` when the schema
|
|
159
|
+
* claims no such flag.
|
|
160
|
+
*
|
|
161
|
+
* Accepts every spelling the compiler accepts — any casing, one or two leading
|
|
162
|
+
* dashes — plus the inline `--flag=value` form, whose value is not part of the
|
|
163
|
+
* identity. A token without a leading dash is never a flag: bare tokens are
|
|
164
|
+
* input files and flag values, and resolving them here would let a value like
|
|
165
|
+
* the `all` of `--target all` masquerade as `--all`.
|
|
129
166
|
*/
|
|
130
|
-
export declare
|
|
167
|
+
export declare function resolveFlagSpec(token: string): FlagSpec | undefined;
|
|
131
168
|
/**
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
169
|
+
* Lookup of every declared spelling → its canonical FlagSpec, keyed by
|
|
170
|
+
* {@link normalizeFlagToken}. Built once at module load so the parsing engine
|
|
171
|
+
* has O(1) flag resolution. Prefer {@link resolveFlagSpec}, which applies the
|
|
172
|
+
* normalization for the caller.
|
|
135
173
|
*/
|
|
136
|
-
export declare const
|
|
174
|
+
export declare const FLAG_BY_TOKEN: ReadonlyMap<string, FlagSpec>;
|
|
137
175
|
/** Tokens (canonical name + aliases) accepted in `subcommand`. */
|
|
138
176
|
export declare function flagsForSubcommand(subcommand: AnySubcommand): FlagSpec[];
|
|
139
177
|
/**
|
package/lib/flags/schema.js
CHANGED
|
@@ -20,7 +20,9 @@
|
|
|
20
20
|
// AGENTS.md §2.1. Editing the generated files by hand is rejected by the
|
|
21
21
|
// `format` check.
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
-
exports.
|
|
23
|
+
exports.FLAG_BY_TOKEN = exports.FLAG_SCHEMA = void 0;
|
|
24
|
+
exports.normalizeFlagToken = normalizeFlagToken;
|
|
25
|
+
exports.resolveFlagSpec = resolveFlagSpec;
|
|
24
26
|
exports.flagsForSubcommand = flagsForSubcommand;
|
|
25
27
|
exports.buildGoAllowList = buildGoAllowList;
|
|
26
28
|
/**
|
|
@@ -72,6 +74,7 @@ exports.FLAG_SCHEMA = [
|
|
|
72
74
|
"ttsc",
|
|
73
75
|
"ttsx",
|
|
74
76
|
"build",
|
|
77
|
+
"cache",
|
|
75
78
|
"check",
|
|
76
79
|
"fix",
|
|
77
80
|
"format",
|
|
@@ -88,6 +91,7 @@ exports.FLAG_SCHEMA = [
|
|
|
88
91
|
"ttsc",
|
|
89
92
|
"ttsx",
|
|
90
93
|
"build",
|
|
94
|
+
"cache",
|
|
91
95
|
"check",
|
|
92
96
|
"fix",
|
|
93
97
|
"format",
|
|
@@ -183,6 +187,7 @@ exports.FLAG_SCHEMA = [
|
|
|
183
187
|
"ttsc",
|
|
184
188
|
"ttsx",
|
|
185
189
|
"build",
|
|
190
|
+
"cache",
|
|
186
191
|
"check",
|
|
187
192
|
"fix",
|
|
188
193
|
"format",
|
|
@@ -192,6 +197,13 @@ exports.FLAG_SCHEMA = [
|
|
|
192
197
|
consumedBy: ["launcher"],
|
|
193
198
|
description: "Override the runner and source-plugin cache root.",
|
|
194
199
|
},
|
|
200
|
+
{
|
|
201
|
+
name: "--json",
|
|
202
|
+
kind: "boolean",
|
|
203
|
+
subcommands: ["cache"],
|
|
204
|
+
consumedBy: ["launcher"],
|
|
205
|
+
description: "Print cache paths as JSON.",
|
|
206
|
+
},
|
|
195
207
|
// -------------------------------------------------------------------------
|
|
196
208
|
// Threading (tsgo-native; lint host opts in via capability).
|
|
197
209
|
// -------------------------------------------------------------------------
|
|
@@ -219,9 +231,10 @@ exports.FLAG_SCHEMA = [
|
|
|
219
231
|
name: "--require",
|
|
220
232
|
aliases: ["-r"],
|
|
221
233
|
kind: "value",
|
|
234
|
+
repeatable: true,
|
|
222
235
|
subcommands: ["ttsx"],
|
|
223
236
|
consumedBy: ["launcher"],
|
|
224
|
-
description: "Preload a module before the entrypoint (ttsx).",
|
|
237
|
+
description: "Preload a module before the entrypoint (ttsx; repeatable).",
|
|
225
238
|
},
|
|
226
239
|
{
|
|
227
240
|
name: "--no-plugins",
|
|
@@ -245,8 +258,14 @@ exports.FLAG_SCHEMA = [
|
|
|
245
258
|
description: "Print the list of emitted files (forwarded to tsgo; ttsc keeps the lines when forwarded).",
|
|
246
259
|
},
|
|
247
260
|
{
|
|
261
|
+
// tsgo declares `--pretty` as `type: boolean`, so it occupies one argv
|
|
262
|
+
// token and consumes a following one only when that token is the literal
|
|
263
|
+
// `true` or `false` — the shape the engine's boolean branch implements.
|
|
264
|
+
// Declaring it `value` made the forwarding path swallow whatever followed,
|
|
265
|
+
// so `ttsc --pretty a.ts` lost its input file and silently switched to
|
|
266
|
+
// project mode.
|
|
248
267
|
name: "--pretty",
|
|
249
|
-
kind: "
|
|
268
|
+
kind: "boolean",
|
|
250
269
|
subcommands: ["ttsc", "ttsx", "build", "check", "fix", "format"],
|
|
251
270
|
consumedBy: ["tsgo"],
|
|
252
271
|
forwardTo: "tsgo",
|
|
@@ -296,6 +315,7 @@ exports.FLAG_SCHEMA = [
|
|
|
296
315
|
consumedBy: ["tsgo"],
|
|
297
316
|
forwardTo: "tsgo",
|
|
298
317
|
terminal: true,
|
|
318
|
+
projectFree: true,
|
|
299
319
|
description: "Print the full tsgo CLI help and exit.",
|
|
300
320
|
},
|
|
301
321
|
{
|
|
@@ -305,8 +325,24 @@ exports.FLAG_SCHEMA = [
|
|
|
305
325
|
consumedBy: ["tsgo"],
|
|
306
326
|
forwardTo: "tsgo",
|
|
307
327
|
terminal: true,
|
|
328
|
+
projectFree: true,
|
|
308
329
|
description: "Write a starter tsconfig.json and exit (forwarded to tsgo).",
|
|
309
330
|
},
|
|
331
|
+
{
|
|
332
|
+
// tsgo's short synonym for `--help`. ttsc owns `--help` / `-h` itself (the
|
|
333
|
+
// launcher prints its own help), so `-?` is declared as its own tsgo-only
|
|
334
|
+
// row rather than as an alias — that keeps `ttsc -?` printing tsgo's help
|
|
335
|
+
// while putting the token inside the schema, where the terminal and
|
|
336
|
+
// project-free classifications are derived from.
|
|
337
|
+
name: "-?",
|
|
338
|
+
kind: "boolean",
|
|
339
|
+
subcommands: ["ttsc", "build", "check"],
|
|
340
|
+
consumedBy: ["tsgo"],
|
|
341
|
+
forwardTo: "tsgo",
|
|
342
|
+
terminal: true,
|
|
343
|
+
projectFree: true,
|
|
344
|
+
description: "Print the tsgo CLI help and exit (forwarded to tsgo).",
|
|
345
|
+
},
|
|
310
346
|
// -------------------------------------------------------------------------
|
|
311
347
|
// `--tsgo-args` — JSON-encoded passthrough envelope the launcher emits on
|
|
312
348
|
// the way down to native sidecars. The sidecars decode it back into the
|
|
@@ -365,10 +401,49 @@ exports.FLAG_SCHEMA = [
|
|
|
365
401
|
},
|
|
366
402
|
];
|
|
367
403
|
/**
|
|
368
|
-
*
|
|
369
|
-
*
|
|
404
|
+
* Normalize a CLI token to the identity the compiler ttsc wraps resolves it by:
|
|
405
|
+
* one or two leading dashes removed, the remainder lower-cased.
|
|
406
|
+
*
|
|
407
|
+
* TypeScript's option parser — legacy `tsc` and native tsgo alike — strips a
|
|
408
|
+
* `--` or `-` prefix and matches the rest case-insensitively, so `--noEmit`,
|
|
409
|
+
* `--noemit`, `--NOEMIT`, and `-noEmit` all name the same option to the tool
|
|
410
|
+
* ttsc forwards to. The launcher used to key its index on the exact spelling,
|
|
411
|
+
* so a case variant of a ttsc-owned flag fell through the unknown-flag escape
|
|
412
|
+
* hatch: tsgo honoured it and every ttsc-side consumer of the same flag never
|
|
413
|
+
* fired, with no diagnostic.
|
|
414
|
+
*
|
|
415
|
+
* This is the single normalization. Everything that resolves a token against
|
|
416
|
+
* `FLAG_SCHEMA` — the parsing engine, the terminal / shadow / project-free
|
|
417
|
+
* classifications, and the generated Go allow-lists — keys off this function,
|
|
418
|
+
* so no two layers can disagree about which flag a spelling names.
|
|
370
419
|
*/
|
|
371
|
-
|
|
420
|
+
function normalizeFlagToken(token) {
|
|
421
|
+
return token.replace(/^--?/, "").toLowerCase();
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Resolve a raw argv token to the flag it names, or `undefined` when the schema
|
|
425
|
+
* claims no such flag.
|
|
426
|
+
*
|
|
427
|
+
* Accepts every spelling the compiler accepts — any casing, one or two leading
|
|
428
|
+
* dashes — plus the inline `--flag=value` form, whose value is not part of the
|
|
429
|
+
* identity. A token without a leading dash is never a flag: bare tokens are
|
|
430
|
+
* input files and flag values, and resolving them here would let a value like
|
|
431
|
+
* the `all` of `--target all` masquerade as `--all`.
|
|
432
|
+
*/
|
|
433
|
+
function resolveFlagSpec(token) {
|
|
434
|
+
if (!token.startsWith("-"))
|
|
435
|
+
return undefined;
|
|
436
|
+
const equalsIndex = token.indexOf("=");
|
|
437
|
+
const name = equalsIndex === -1 ? token : token.slice(0, equalsIndex);
|
|
438
|
+
return exports.FLAG_BY_TOKEN.get(normalizeFlagToken(name));
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Lookup of every declared spelling → its canonical FlagSpec, keyed by
|
|
442
|
+
* {@link normalizeFlagToken}. Built once at module load so the parsing engine
|
|
443
|
+
* has O(1) flag resolution. Prefer {@link resolveFlagSpec}, which applies the
|
|
444
|
+
* normalization for the caller.
|
|
445
|
+
*/
|
|
446
|
+
exports.FLAG_BY_TOKEN = buildFlagIndex();
|
|
372
447
|
function buildFlagIndex() {
|
|
373
448
|
const index = new Map();
|
|
374
449
|
for (const flag of exports.FLAG_SCHEMA) {
|
|
@@ -379,24 +454,17 @@ function buildFlagIndex() {
|
|
|
379
454
|
}
|
|
380
455
|
return index;
|
|
381
456
|
}
|
|
382
|
-
function register(index,
|
|
457
|
+
function register(index, spelling, flag) {
|
|
458
|
+
// Two spellings that normalize to one identity would make the schema
|
|
459
|
+
// ambiguous, so the collision fails loudly at module load rather than
|
|
460
|
+
// resolving to whichever row was declared last.
|
|
461
|
+
const key = normalizeFlagToken(spelling);
|
|
383
462
|
const existing = index.get(key);
|
|
384
463
|
if (existing && existing !== flag) {
|
|
385
|
-
throw new Error(`ttsc flag schema: duplicate token ${JSON.stringify(
|
|
464
|
+
throw new Error(`ttsc flag schema: duplicate token ${JSON.stringify(spelling)} claimed by ${existing.name} and ${flag.name}`);
|
|
386
465
|
}
|
|
387
466
|
index.set(key, flag);
|
|
388
467
|
}
|
|
389
|
-
/**
|
|
390
|
-
* Terminal flags as a derived set. Used by `runBuild.ts` to skip the pre-emit
|
|
391
|
-
* pass when one is present.
|
|
392
|
-
*/
|
|
393
|
-
exports.TERMINAL_FLAGS = new Set(exports.FLAG_SCHEMA.flatMap((flag) => flag.terminal === true ? [flag.name, ...(flag.aliases ?? [])] : []));
|
|
394
|
-
/**
|
|
395
|
-
* `internalShadow: true` flags as a derived set. Used by `runBuild.ts` to
|
|
396
|
-
* detect a user-forwarded copy of a flag ttsc adds internally so the
|
|
397
|
-
* post-processor does not eat the user's output.
|
|
398
|
-
*/
|
|
399
|
-
exports.INTERNAL_SHADOW_FLAGS = new Set(exports.FLAG_SCHEMA.flatMap((flag) => flag.internalShadow === true ? [flag.name, ...(flag.aliases ?? [])] : []));
|
|
400
468
|
/** Tokens (canonical name + aliases) accepted in `subcommand`. */
|
|
401
469
|
function flagsForSubcommand(subcommand) {
|
|
402
470
|
return exports.FLAG_SCHEMA.filter((flag) => flag.subcommands.includes(subcommand));
|
|
@@ -415,9 +483,13 @@ function buildGoAllowList(layer) {
|
|
|
415
483
|
continue;
|
|
416
484
|
const takesValue = flag.kind === "value" || flag.kind === "valueOptional";
|
|
417
485
|
for (const name of [flag.name, ...(flag.aliases ?? [])]) {
|
|
418
|
-
|
|
419
|
-
//
|
|
420
|
-
//
|
|
486
|
+
// Keyed by the one normalization the runtime token lookup uses, so the
|
|
487
|
+
// generated allow-lists and `resolveFlagSpec` cannot recognise different
|
|
488
|
+
// spellings. The Go consumers apply the same normalization before the
|
|
489
|
+
// lookup (`strings.ToLower` on the dash-stripped name).
|
|
490
|
+
const key = normalizeFlagToken(name);
|
|
491
|
+
// If two flags collide on the normalized key (e.g. `-p` vs `--project`),
|
|
492
|
+
// use the value-taking shape.
|
|
421
493
|
const existing = out.get(key);
|
|
422
494
|
if (existing !== undefined && existing !== takesValue) {
|
|
423
495
|
throw new Error(`ttsc flag schema: conflicting Go allow-list entry for ${JSON.stringify(key)} on layer ${layer}`);
|
package/lib/flags/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/flags/schema.ts"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,EAAE;AACF,6EAA6E;AAC7E,YAAY;AACZ,EAAE;AACF,8EAA8E;AAC9E,iFAAiF;AACjF,qEAAqE;AACrE,+EAA+E;AAC/E,8EAA8E;AAC9E,sEAAsE;AACtE,kEAAkE;AAClE,8EAA8E;AAC9E,2EAA2E;AAC3E,6EAA6E;AAC7E,EAAE;AACF,8EAA8E;AAC9E,wEAAwE;AACxE,yEAAyE;AACzE,kBAAkB
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/flags/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
exports.assertSafeExplicitCacheDirectory = assertSafeExplicitCacheDirectory;
|
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
/**
|
|
9
|
+
* Refuse an explicit cache directory whose wholesale removal could delete the
|
|
10
|
+
* project or an entire filesystem volume.
|
|
11
|
+
*/
|
|
12
|
+
function assertSafeExplicitCacheDirectory(projectRoot, cacheDirectory) {
|
|
13
|
+
const project = node_path_1.default.resolve(projectRoot);
|
|
14
|
+
const cache = node_path_1.default.resolve(cacheDirectory);
|
|
15
|
+
if (cache === node_path_1.default.parse(cache).root) {
|
|
16
|
+
throw new Error(`ttsc: refusing to clean cache directory ${JSON.stringify(cache)} because filesystem roots are never valid cache directories`);
|
|
17
|
+
}
|
|
18
|
+
const relative = node_path_1.default.relative(cache, project);
|
|
19
|
+
if (relative === "" ||
|
|
20
|
+
(relative !== ".." &&
|
|
21
|
+
!relative.startsWith(`..${node_path_1.default.sep}`) &&
|
|
22
|
+
!node_path_1.default.isAbsolute(relative))) {
|
|
23
|
+
throw new Error(`ttsc: refusing to clean cache directory ${JSON.stringify(cache)} because it equals or contains project root ${JSON.stringify(project)}; choose a dedicated cache directory`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=assertSafeExplicitCacheDirectory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertSafeExplicitCacheDirectory.js","sourceRoot":"","sources":["../../src/internal/assertSafeExplicitCacheDirectory.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA6B;AAE7B;;;GAGG;AACH,0CACE,WAAmB,EACnB,cAAsB;IAEtB,MAAM,OAAO,GAAG,mBAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,mBAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3C,IAAI,KAAK,KAAK,mBAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CACb,2CAA2C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,6DAA6D,CAC9H,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,mBAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/C,IACE,QAAQ,KAAK,EAAE;QACf,CAAC,QAAQ,KAAK,IAAI;YAChB,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,mBAAI,CAAC,GAAG,EAAE,CAAC;YACrC,CAAC,mBAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAC7B,CAAC;QACD,MAAM,IAAI,KAAK,CACb,2CAA2C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,+CAA+C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,sCAAsC,CAC7K,CAAC;IACJ,CAAC;AACH,CAAC"}
|