@scriptc/compiler 0.0.0 → 0.0.2
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/LICENSE +202 -0
- package/ambient/package.json +3 -0
- package/ambient/scriptc-node-fallback.d.ts +3001 -0
- package/ambient/scriptc-overrides.d.ts +95 -0
- package/ambient/scriptc.d.ts +74 -0
- package/dist/backend/cc.d.ts +169 -0
- package/dist/backend/cc.js +897 -0
- package/dist/backend/cc.js.map +1 -0
- package/dist/backend/emission/emit-async.d.ts +145 -0
- package/dist/backend/emission/emit-async.js +996 -0
- package/dist/backend/emission/emit-async.js.map +1 -0
- package/dist/backend/emission/emit-exprs.d.ts +3 -0
- package/dist/backend/emission/emit-exprs.js +5949 -0
- package/dist/backend/emission/emit-exprs.js.map +1 -0
- package/dist/backend/emission/emit-island.d.ts +45 -0
- package/dist/backend/emission/emit-island.js +271 -0
- package/dist/backend/emission/emit-island.js.map +1 -0
- package/dist/backend/emission/emit-shapes.d.ts +142 -0
- package/dist/backend/emission/emit-shapes.js +575 -0
- package/dist/backend/emission/emit-shapes.js.map +1 -0
- package/dist/backend/emission/emit-stmts.d.ts +78 -0
- package/dist/backend/emission/emit-stmts.js +960 -0
- package/dist/backend/emission/emit-stmts.js.map +1 -0
- package/dist/backend/emission/emit-types.d.ts +65 -0
- package/dist/backend/emission/emit-types.js +652 -0
- package/dist/backend/emission/emit-types.js.map +1 -0
- package/dist/backend/emission/emit-walkers.d.ts +154 -0
- package/dist/backend/emission/emit-walkers.js +1587 -0
- package/dist/backend/emission/emit-walkers.js.map +1 -0
- package/dist/backend/emission/emitter.d.ts +452 -0
- package/dist/backend/emission/emitter.js +1249 -0
- package/dist/backend/emission/emitter.js.map +1 -0
- package/dist/backend/emission/may-throw.d.ts +15 -0
- package/dist/backend/emission/may-throw.js +250 -0
- package/dist/backend/emission/may-throw.js.map +1 -0
- package/dist/backend/llvm/blocks.d.ts +21 -0
- package/dist/backend/llvm/blocks.js +68 -0
- package/dist/backend/llvm/blocks.js.map +1 -0
- package/dist/backend/llvm/classes.d.ts +84 -0
- package/dist/backend/llvm/classes.js +438 -0
- package/dist/backend/llvm/classes.js.map +1 -0
- package/dist/backend/llvm/dyn.d.ts +123 -0
- package/dist/backend/llvm/dyn.js +2624 -0
- package/dist/backend/llvm/dyn.js.map +1 -0
- package/dist/backend/llvm/emitter.d.ts +3 -0
- package/dist/backend/llvm/emitter.js +10102 -0
- package/dist/backend/llvm/emitter.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +78 -0
- package/dist/backend/llvm/shapes.js +754 -0
- package/dist/backend/llvm/shapes.js.map +1 -0
- package/dist/backend/llvm/unsupported.d.ts +6 -0
- package/dist/backend/llvm/unsupported.js +12 -0
- package/dist/backend/llvm/unsupported.js.map +1 -0
- package/dist/backend/llvm/walkers.d.ts +58 -0
- package/dist/backend/llvm/walkers.js +793 -0
- package/dist/backend/llvm/walkers.js.map +1 -0
- package/dist/backend/mangle.d.ts +124 -0
- package/dist/backend/mangle.js +232 -0
- package/dist/backend/mangle.js.map +1 -0
- package/dist/coverage/report.d.ts +65 -0
- package/dist/coverage/report.js +238 -0
- package/dist/coverage/report.js.map +1 -0
- package/dist/diagnostics/diagnostic.d.ts +140 -0
- package/dist/diagnostics/diagnostic.js +458 -0
- package/dist/diagnostics/diagnostic.js.map +1 -0
- package/dist/diagnostics/render.d.ts +11 -0
- package/dist/diagnostics/render.js +58 -0
- package/dist/diagnostics/render.js.map +1 -0
- package/dist/frontend/cjs-lexer.d.ts +20 -0
- package/dist/frontend/cjs-lexer.js +813 -0
- package/dist/frontend/cjs-lexer.js.map +1 -0
- package/dist/frontend/lowering/http2-constants.d.ts +1 -0
- package/dist/frontend/lowering/http2-constants.js +251 -0
- package/dist/frontend/lowering/http2-constants.js.map +1 -0
- package/dist/frontend/lowering/lib-boundary.d.ts +6 -0
- package/dist/frontend/lowering/lib-boundary.js +143 -0
- package/dist/frontend/lowering/lib-boundary.js.map +1 -0
- package/dist/frontend/lowering/lower-assert.d.ts +18 -0
- package/dist/frontend/lowering/lower-assert.js +1269 -0
- package/dist/frontend/lowering/lower-assert.js.map +1 -0
- package/dist/frontend/lowering/lower-builtins.d.ts +511 -0
- package/dist/frontend/lowering/lower-builtins.js +5249 -0
- package/dist/frontend/lowering/lower-builtins.js.map +1 -0
- package/dist/frontend/lowering/lower-calls.d.ts +581 -0
- package/dist/frontend/lowering/lower-calls.js +6286 -0
- package/dist/frontend/lowering/lower-calls.js.map +1 -0
- package/dist/frontend/lowering/lower-classes.d.ts +727 -0
- package/dist/frontend/lowering/lower-classes.js +4701 -0
- package/dist/frontend/lowering/lower-classes.js.map +1 -0
- package/dist/frontend/lowering/lower-comptime.d.ts +53 -0
- package/dist/frontend/lowering/lower-comptime.js +244 -0
- package/dist/frontend/lowering/lower-comptime.js.map +1 -0
- package/dist/frontend/lowering/lower-containers.d.ts +486 -0
- package/dist/frontend/lowering/lower-containers.js +6345 -0
- package/dist/frontend/lowering/lower-containers.js.map +1 -0
- package/dist/frontend/lowering/lower-dgram.d.ts +20 -0
- package/dist/frontend/lowering/lower-dgram.js +319 -0
- package/dist/frontend/lowering/lower-dgram.js.map +1 -0
- package/dist/frontend/lowering/lower-emitter.d.ts +10 -0
- package/dist/frontend/lowering/lower-emitter.js +688 -0
- package/dist/frontend/lowering/lower-emitter.js.map +1 -0
- package/dist/frontend/lowering/lower-enums.d.ts +22 -0
- package/dist/frontend/lowering/lower-enums.js +235 -0
- package/dist/frontend/lowering/lower-enums.js.map +1 -0
- package/dist/frontend/lowering/lower-expando.d.ts +35 -0
- package/dist/frontend/lowering/lower-expando.js +276 -0
- package/dist/frontend/lowering/lower-expando.js.map +1 -0
- package/dist/frontend/lowering/lower-exprs.d.ts +524 -0
- package/dist/frontend/lowering/lower-exprs.js +8111 -0
- package/dist/frontend/lowering/lower-exprs.js.map +1 -0
- package/dist/frontend/lowering/lower-generators.d.ts +50 -0
- package/dist/frontend/lowering/lower-generators.js +421 -0
- package/dist/frontend/lowering/lower-generators.js.map +1 -0
- package/dist/frontend/lowering/lower-inspect.d.ts +20 -0
- package/dist/frontend/lowering/lower-inspect.js +1074 -0
- package/dist/frontend/lowering/lower-inspect.js.map +1 -0
- package/dist/frontend/lowering/lower-island.d.ts +108 -0
- package/dist/frontend/lowering/lower-island.js +650 -0
- package/dist/frontend/lowering/lower-island.js.map +1 -0
- package/dist/frontend/lowering/lower-mixins.d.ts +96 -0
- package/dist/frontend/lowering/lower-mixins.js +534 -0
- package/dist/frontend/lowering/lower-mixins.js.map +1 -0
- package/dist/frontend/lowering/lower-modules.d.ts +135 -0
- package/dist/frontend/lowering/lower-modules.js +1613 -0
- package/dist/frontend/lowering/lower-modules.js.map +1 -0
- package/dist/frontend/lowering/lower-namespaces.d.ts +168 -0
- package/dist/frontend/lowering/lower-namespaces.js +706 -0
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -0
- package/dist/frontend/lowering/lower-server.d.ts +90 -0
- package/dist/frontend/lowering/lower-server.js +3471 -0
- package/dist/frontend/lowering/lower-server.js.map +1 -0
- package/dist/frontend/lowering/lower-stmts.d.ts +361 -0
- package/dist/frontend/lowering/lower-stmts.js +5341 -0
- package/dist/frontend/lowering/lower-stmts.js.map +1 -0
- package/dist/frontend/lowering/lower-stream.d.ts +88 -0
- package/dist/frontend/lowering/lower-stream.js +1533 -0
- package/dist/frontend/lowering/lower-stream.js.map +1 -0
- package/dist/frontend/lowering/lower-test.d.ts +27 -0
- package/dist/frontend/lowering/lower-test.js +353 -0
- package/dist/frontend/lowering/lower-test.js.map +1 -0
- package/dist/frontend/lowering/lowerer.d.ts +1748 -0
- package/dist/frontend/lowering/lowerer.js +6257 -0
- package/dist/frontend/lowering/lowerer.js.map +1 -0
- package/dist/frontend/lowering/surfaces.d.ts +272 -0
- package/dist/frontend/lowering/surfaces.js +1096 -0
- package/dist/frontend/lowering/surfaces.js.map +1 -0
- package/dist/frontend/npm-static.d.ts +55 -0
- package/dist/frontend/npm-static.js +300 -0
- package/dist/frontend/npm-static.js.map +1 -0
- package/dist/frontend/npm.d.ts +330 -0
- package/dist/frontend/npm.js +1259 -0
- package/dist/frontend/npm.js.map +1 -0
- package/dist/frontend/program.d.ts +186 -0
- package/dist/frontend/program.js +2255 -0
- package/dist/frontend/program.js.map +1 -0
- package/dist/frontend/provenance-registry.d.ts +48 -0
- package/dist/frontend/provenance-registry.js +87 -0
- package/dist/frontend/provenance-registry.js.map +1 -0
- package/dist/frontend/provenance.d.ts +6 -0
- package/dist/frontend/provenance.js +459 -0
- package/dist/frontend/provenance.js.map +1 -0
- package/dist/frontend/resolve.d.ts +56 -0
- package/dist/frontend/resolve.js +682 -0
- package/dist/frontend/resolve.js.map +1 -0
- package/dist/frontend/shared.d.ts +67 -0
- package/dist/frontend/shared.js +241 -0
- package/dist/frontend/shared.js.map +1 -0
- package/dist/frontend/ts7/adapter.d.ts +7 -0
- package/dist/frontend/ts7/adapter.js +54 -0
- package/dist/frontend/ts7/adapter.js.map +1 -0
- package/dist/frontend/ts7/ast.d.ts +50 -0
- package/dist/frontend/ts7/ast.js +211 -0
- package/dist/frontend/ts7/ast.js.map +1 -0
- package/dist/frontend/ts7/census-check.d.ts +1 -0
- package/dist/frontend/ts7/census-check.js +12 -0
- package/dist/frontend/ts7/census-check.js.map +1 -0
- package/dist/frontend/ts7/checker.d.ts +140 -0
- package/dist/frontend/ts7/checker.js +544 -0
- package/dist/frontend/ts7/checker.js.map +1 -0
- package/dist/frontend/ts7/enums.d.ts +18 -0
- package/dist/frontend/ts7/enums.js +43 -0
- package/dist/frontend/ts7/enums.js.map +1 -0
- package/dist/frontend/ts7/program.d.ts +99 -0
- package/dist/frontend/ts7/program.js +278 -0
- package/dist/frontend/ts7/program.js.map +1 -0
- package/dist/frontend/ts7/world-check.d.ts +3 -0
- package/dist/frontend/ts7/world-check.js +34 -0
- package/dist/frontend/ts7/world-check.js.map +1 -0
- package/dist/frontend/types.d.ts +205 -0
- package/dist/frontend/types.js +2485 -0
- package/dist/frontend/types.js.map +1 -0
- package/dist/index.d.ts +85 -0
- package/dist/index.js +429 -0
- package/dist/index.js.map +1 -0
- package/dist/ir/nodes.d.ts +4334 -0
- package/dist/ir/nodes.js +1906 -0
- package/dist/ir/nodes.js.map +1 -0
- package/dist/ir/serialize.d.ts +4 -0
- package/dist/ir/serialize.js +34 -0
- package/dist/ir/serialize.js.map +1 -0
- package/dist/ir/validate.d.ts +36 -0
- package/dist/ir/validate.js +4885 -0
- package/dist/ir/validate.js.map +1 -0
- package/package.json +30 -6
- package/README.md +0 -3
- package/index.js +0 -2
|
@@ -0,0 +1,544 @@
|
|
|
1
|
+
/* The checker facade: 5.9.3-shaped TypeChecker methods over 7.0.2's sync
|
|
2
|
+
* client, built around the survey's feasibility verdict. Naive per-call use
|
|
3
|
+
* of the 7.0.2 client costs 0.1-0.3 ms of IPC per query; the census counted
|
|
4
|
+
* 32,226 checker calls lowering mock-gateway, so a transparent adapter would
|
|
5
|
+
* add seconds. Batched, the same queries run at ~0.005 ms/call — parity with
|
|
6
|
+
* 5.9.3. Three mechanisms make batching and reuse the DEFAULT path:
|
|
7
|
+
*
|
|
8
|
+
* 1. IDENTITY MEMOS. One WeakMap per query kind, keyed on the client-side
|
|
9
|
+
* node/type/symbol object. Safe because the 7.0.2 client registry dedupes
|
|
10
|
+
* by server handle id (probe-verified: the same symbol/type from any two
|
|
11
|
+
* queries is the same object), and a snapshot is immutable — an answer
|
|
12
|
+
* never changes for the life of the program. The client itself does NOT
|
|
13
|
+
* memoize (warm re-query of 21 nodes costs 2.5-3.8 ms; the survey's
|
|
14
|
+
* finding), so this layer is where reuse lives.
|
|
15
|
+
*
|
|
16
|
+
* 2. PER-FILE BATCH PREFETCH. The first getTypeAtLocation/getSymbolAtLocation
|
|
17
|
+
* miss in a source file walks the whole file client-side (free — the AST
|
|
18
|
+
* is local) and issues the ARRAY overloads for every node, chunked, then
|
|
19
|
+
* answers all later queries for that file from the memo. The lowering's
|
|
20
|
+
* walk touches most of a file anyway, so prefetching the file is the
|
|
21
|
+
* batching lever without changing a single call site. prefetchSourceFile()
|
|
22
|
+
* exposes the same hook explicitly. Symbol prefetch also batch-fetches
|
|
23
|
+
* getTypeOfSymbol over every symbol the file mentions (5,333 calls of the
|
|
24
|
+
* mock-gateway census ride that pattern).
|
|
25
|
+
*
|
|
26
|
+
* 3. CLIENT-SIDE FAST PATHS. getBaseTypeOfLiteralType — the census's single
|
|
27
|
+
* hottest method (9,059 calls on mock-gateway) — is answered locally from
|
|
28
|
+
* type.flags plus the intrinsic-type singletons for the literal kinds
|
|
29
|
+
* 5.9.3 maps to intrinsics (string/number/bigint/boolean literals), with
|
|
30
|
+
* IPC only for enum-ish and union types. isTupleType answers shape-true
|
|
31
|
+
* and non-object-false locally and round-trips (memoized) only for
|
|
32
|
+
* object types. Both verified against the raw checker AND against 5.9.3
|
|
33
|
+
* by the adapter's suites. */
|
|
34
|
+
import { walkPreorder } from "./ast.js";
|
|
35
|
+
import { SignatureKind, TypeFlags } from "./enums.js";
|
|
36
|
+
/** Array-overload chunk size: large enough that per-request overhead
|
|
37
|
+
* vanishes, small enough to keep any single JSON-RPC payload modest. */
|
|
38
|
+
const BATCH_CHUNK = 2048;
|
|
39
|
+
/** The bisecting panic fence for batch queries. The prefetch sweeps query
|
|
40
|
+
* nodes/symbols the lowering itself may never ask about, and tsgo can PANIC
|
|
41
|
+
* on some of them (a server-side failure the sync channel surfaces as a
|
|
42
|
+
* thrown Error, server intact). A batch must not turn a node nobody needs
|
|
43
|
+
* into a build crash: on failure, bisect — healthy items keep their real
|
|
44
|
+
* answers, and the panicking ITEM alone memoizes undefined (anyType through
|
|
45
|
+
* the facade), which is exactly what the pinned type-position finding maps
|
|
46
|
+
* such answers to. */
|
|
47
|
+
function withPanicFence(chunk, call) {
|
|
48
|
+
try {
|
|
49
|
+
return [...call(chunk)];
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
if (chunk.length === 1)
|
|
53
|
+
return [undefined];
|
|
54
|
+
const mid = chunk.length >> 1;
|
|
55
|
+
return [
|
|
56
|
+
...withPanicFence(chunk.slice(0, mid), call),
|
|
57
|
+
...withPanicFence(chunk.slice(mid), call),
|
|
58
|
+
];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function chunked(items, fetch) {
|
|
62
|
+
const out = [];
|
|
63
|
+
for (let i = 0; i < items.length; i += BATCH_CHUNK) {
|
|
64
|
+
out.push(...fetch(items.slice(i, i + BATCH_CHUNK)));
|
|
65
|
+
}
|
|
66
|
+
return out;
|
|
67
|
+
}
|
|
68
|
+
/** The prefetch sweep's depth floor. The lowering fences expressions at 200
|
|
69
|
+
* nesting levels (SC1090) and never queries below its fence, so nodes much
|
|
70
|
+
* deeper than that can only belong to a program the build is about to
|
|
71
|
+
* refuse — and batch-querying them is where a pathological file's cost
|
|
72
|
+
* lives (the ~6500-term binderBinaryExpressionStress chains spent minutes
|
|
73
|
+
* in server-side per-node queries). Skipped subtrees stay CORRECT: any
|
|
74
|
+
* query the lowering does make below the floor falls through to a direct,
|
|
75
|
+
* memoized per-node call. */
|
|
76
|
+
const PREFETCH_MAX_DEPTH = 512;
|
|
77
|
+
/** Preorder sweep of the whole file, ITERATIVE (walkPreorder): the obvious
|
|
78
|
+
* recursive forEachChild walk overflowed the stack HERE, in the prefetch
|
|
79
|
+
* sweep, on the binderBinaryExpressionStress chains — before lowering could
|
|
80
|
+
* answer with its SC1090 nesting fence. */
|
|
81
|
+
function collectNodes(sf) {
|
|
82
|
+
const nodes = [];
|
|
83
|
+
walkPreorder(sf, (n, depth) => {
|
|
84
|
+
nodes.push(n);
|
|
85
|
+
if (depth >= PREFETCH_MAX_DEPTH)
|
|
86
|
+
return "skip";
|
|
87
|
+
return undefined;
|
|
88
|
+
});
|
|
89
|
+
return nodes;
|
|
90
|
+
}
|
|
91
|
+
export class CheckerFacade {
|
|
92
|
+
raw;
|
|
93
|
+
options;
|
|
94
|
+
/** Node-keyed memos. `undefined` results are represented by map presence
|
|
95
|
+
* (WeakMap.has), so misses and cached-undefined are distinguishable. */
|
|
96
|
+
typeAtLocation = new WeakMap();
|
|
97
|
+
symbolAtLocation = new WeakMap();
|
|
98
|
+
contextualType = new WeakMap();
|
|
99
|
+
typeFromTypeNode = new WeakMap();
|
|
100
|
+
shorthandValueSymbol = new WeakMap();
|
|
101
|
+
resolvedSignature = new WeakMap();
|
|
102
|
+
signatureFromDeclaration = new WeakMap();
|
|
103
|
+
/** Symbol-keyed memos. */
|
|
104
|
+
typeOfSymbol = new WeakMap();
|
|
105
|
+
aliasedSymbol = new WeakMap();
|
|
106
|
+
declaredTypeOfSymbol = new WeakMap();
|
|
107
|
+
/** Type-keyed memos. */
|
|
108
|
+
baseTypeOfLiteral = new WeakMap();
|
|
109
|
+
nonNullableType = new WeakMap();
|
|
110
|
+
propertiesOfType = new WeakMap();
|
|
111
|
+
indexInfosOfType = new WeakMap();
|
|
112
|
+
typeArgumentsOf = new WeakMap();
|
|
113
|
+
arrayTypeAnswer = new WeakMap();
|
|
114
|
+
arrayLikeAnswer = new WeakMap();
|
|
115
|
+
typeStringOf = new WeakMap();
|
|
116
|
+
awaitedTypeOf = new WeakMap();
|
|
117
|
+
/** Signature-keyed memos. */
|
|
118
|
+
returnTypeOf = new WeakMap();
|
|
119
|
+
typePredicateOf = new WeakMap();
|
|
120
|
+
/** Files whose nodes have been batch-prefetched, per query kind. */
|
|
121
|
+
prefetchedTypes = new WeakSet();
|
|
122
|
+
prefetchedSymbols = new WeakSet();
|
|
123
|
+
unknownType = null;
|
|
124
|
+
/** Intrinsic singletons (string/number/bigint/boolean), fetched once. */
|
|
125
|
+
intrinsics = new Map();
|
|
126
|
+
tupleTypeAnswer = new WeakMap();
|
|
127
|
+
constructor(
|
|
128
|
+
/** The underlying 7.0.2 sync checker — exposed for methods the facade
|
|
129
|
+
* does not shim; going around the facade forfeits memoization only. */
|
|
130
|
+
raw, options = {}) {
|
|
131
|
+
this.raw = raw;
|
|
132
|
+
this.options = options;
|
|
133
|
+
}
|
|
134
|
+
/* ── the symbol-declaration surface (phase 3) ─────────────────────────
|
|
135
|
+
* 7's Symbol carries declarations as NodeHandles (server references),
|
|
136
|
+
* where 5.9.3 handed out the nodes themselves. The lowering reads
|
|
137
|
+
* symbol.declarations/valueDeclaration pervasively, so the facade owns
|
|
138
|
+
* the resolve step (NodeHandle.resolve into the client AST — identity-
|
|
139
|
+
* stable, probe-verified) and memoizes per symbol. Requires the project
|
|
140
|
+
* the symbols came from (options.project — Ts7Program supplies it). */
|
|
141
|
+
declsOf = new WeakMap();
|
|
142
|
+
valueDeclOf = new WeakMap();
|
|
143
|
+
requireProject() {
|
|
144
|
+
const project = this.options.project;
|
|
145
|
+
if (!project)
|
|
146
|
+
throw new Error("CheckerFacade built without a project cannot resolve declarations");
|
|
147
|
+
return project;
|
|
148
|
+
}
|
|
149
|
+
/** 5.9.3's symbol.declarations (never undefined here: 7 answers an empty
|
|
150
|
+
* array where 5.9.3 answered undefined — callers treat them alike). */
|
|
151
|
+
declarationsOf(symbol) {
|
|
152
|
+
let decls = this.declsOf.get(symbol);
|
|
153
|
+
if (decls === undefined) {
|
|
154
|
+
const project = this.requireProject();
|
|
155
|
+
decls = symbol.declarations
|
|
156
|
+
.map((h) => h.resolve(project))
|
|
157
|
+
.filter((n) => n !== undefined);
|
|
158
|
+
this.declsOf.set(symbol, decls);
|
|
159
|
+
}
|
|
160
|
+
return decls;
|
|
161
|
+
}
|
|
162
|
+
/** 5.9.3's symbol.valueDeclaration. */
|
|
163
|
+
valueDeclarationOf(symbol) {
|
|
164
|
+
if (this.valueDeclOf.has(symbol))
|
|
165
|
+
return this.valueDeclOf.get(symbol);
|
|
166
|
+
const decl = symbol.valueDeclaration?.resolve(this.requireProject());
|
|
167
|
+
this.valueDeclOf.set(symbol, decl);
|
|
168
|
+
return decl;
|
|
169
|
+
}
|
|
170
|
+
/** 5.9.3's signature.getDeclaration() (undefined for synthesized
|
|
171
|
+
* signatures — same contract as sig.declaration there). */
|
|
172
|
+
signatureDeclaration(signature) {
|
|
173
|
+
if (this.sigDeclOf.has(signature))
|
|
174
|
+
return this.sigDeclOf.get(signature);
|
|
175
|
+
const decl = signature.declaration?.resolve(this.requireProject());
|
|
176
|
+
this.sigDeclOf.set(signature, decl);
|
|
177
|
+
return decl;
|
|
178
|
+
}
|
|
179
|
+
sigDeclOf = new WeakMap();
|
|
180
|
+
/** 5.9.3's type.getCallSignatures(). */
|
|
181
|
+
getCallSignatures(type) {
|
|
182
|
+
let sigs = this.callSigsOf.get(type);
|
|
183
|
+
if (sigs === undefined) {
|
|
184
|
+
sigs = this.raw.getSignaturesOfType(type, SignatureKind.Call);
|
|
185
|
+
this.callSigsOf.set(type, sigs);
|
|
186
|
+
}
|
|
187
|
+
return sigs;
|
|
188
|
+
}
|
|
189
|
+
callSigsOf = new WeakMap();
|
|
190
|
+
/** 5.9.3's type.getConstructSignatures(). */
|
|
191
|
+
getConstructSignatures(type) {
|
|
192
|
+
let sigs = this.ctorSigsOf.get(type);
|
|
193
|
+
if (sigs === undefined) {
|
|
194
|
+
sigs = this.raw.getSignaturesOfType(type, SignatureKind.Construct);
|
|
195
|
+
this.ctorSigsOf.set(type, sigs);
|
|
196
|
+
}
|
|
197
|
+
return sigs;
|
|
198
|
+
}
|
|
199
|
+
ctorSigsOf = new WeakMap();
|
|
200
|
+
/** 5.9.3's type.getProperty(name). */
|
|
201
|
+
getPropertyOfType(type, name) {
|
|
202
|
+
return this.raw.getPropertyOfType(type, name);
|
|
203
|
+
}
|
|
204
|
+
/** The 5.9.3 checker never answered undefined from getTypeAtLocation-
|
|
205
|
+
* family queries (errorType/anyType stood in); the 7 client loosens them
|
|
206
|
+
* to `T | undefined`. The lowering is written against the 5.9.3 contract,
|
|
207
|
+
* so the facade restores it: undefined becomes anyType — exactly the
|
|
208
|
+
* equivalence the parity battery pinned (a 7-side undefined renders as
|
|
209
|
+
* "any" wherever 5.9.3 said any). */
|
|
210
|
+
anyType() {
|
|
211
|
+
return this.intrinsic("any", () => this.raw.getAnyType());
|
|
212
|
+
}
|
|
213
|
+
/** Batch-prefetches getTypeAtLocation and getSymbolAtLocation for every
|
|
214
|
+
* node of the file, plus getTypeOfSymbol for every symbol those answers
|
|
215
|
+
* surfaced — the per-file hook that turns the lowering's walk into three
|
|
216
|
+
* array requests instead of thousands of round trips. */
|
|
217
|
+
prefetchSourceFile(sf) {
|
|
218
|
+
this.prefetchTypes(sf);
|
|
219
|
+
this.prefetchSymbols(sf);
|
|
220
|
+
}
|
|
221
|
+
prefetchTypes(sf) {
|
|
222
|
+
if (this.prefetchedTypes.has(sf))
|
|
223
|
+
return;
|
|
224
|
+
this.prefetchedTypes.add(sf);
|
|
225
|
+
const nodes = collectNodes(sf).filter((n) => !this.typeAtLocation.has(n));
|
|
226
|
+
const types = chunked(nodes, (chunk) => this.typesWithPanicFence(chunk));
|
|
227
|
+
nodes.forEach((n, i) => this.typeAtLocation.set(n, types[i]));
|
|
228
|
+
}
|
|
229
|
+
/** withPanicFence over the type sweep (observed panic: GetTypeAtLocation
|
|
230
|
+
* over an unresolved npm import's clause — a server-side nil deref). */
|
|
231
|
+
typesWithPanicFence(chunk) {
|
|
232
|
+
return withPanicFence(chunk, (c) => this.raw.getTypeAtLocation(c));
|
|
233
|
+
}
|
|
234
|
+
prefetchSymbols(sf) {
|
|
235
|
+
if (this.prefetchedSymbols.has(sf))
|
|
236
|
+
return;
|
|
237
|
+
this.prefetchedSymbols.add(sf);
|
|
238
|
+
const nodes = collectNodes(sf).filter((n) => !this.symbolAtLocation.has(n));
|
|
239
|
+
// The same bisecting panic fence as the type sweep: tsgo panics on
|
|
240
|
+
// SYMBOL queries too (observed: GetSymbolAtLocation over an
|
|
241
|
+
// `import.defer(...)` callee — the sweep's batch must not turn one
|
|
242
|
+
// poisonous node into a build crash).
|
|
243
|
+
const symbols = chunked(nodes, (chunk) => withPanicFence(chunk, (c) => this.raw.getSymbolAtLocation(c)));
|
|
244
|
+
nodes.forEach((n, i) => this.symbolAtLocation.set(n, symbols[i]));
|
|
245
|
+
// The walk's companion query: types of the symbols the file mentions.
|
|
246
|
+
const distinct = [...new Set(symbols.filter((s) => s !== undefined))].filter((s) => !this.typeOfSymbol.has(s));
|
|
247
|
+
const symbolTypes = chunked(distinct, (chunk) => withPanicFence(chunk, (c) => this.raw.getTypeOfSymbol(c)));
|
|
248
|
+
distinct.forEach((s, i) => this.typeOfSymbol.set(s, symbolTypes[i]));
|
|
249
|
+
}
|
|
250
|
+
autoPrefetch(node, kind) {
|
|
251
|
+
if (this.options.autoPrefetch === false)
|
|
252
|
+
return;
|
|
253
|
+
const sf = node.getSourceFile();
|
|
254
|
+
if (kind === "types")
|
|
255
|
+
this.prefetchTypes(sf);
|
|
256
|
+
else
|
|
257
|
+
this.prefetchSymbols(sf);
|
|
258
|
+
}
|
|
259
|
+
getTypeAtLocation(node) {
|
|
260
|
+
if (this.typeAtLocation.has(node))
|
|
261
|
+
return this.typeAtLocation.get(node) ?? this.anyType();
|
|
262
|
+
this.autoPrefetch(node, "types");
|
|
263
|
+
if (this.typeAtLocation.has(node))
|
|
264
|
+
return this.typeAtLocation.get(node) ?? this.anyType();
|
|
265
|
+
const type = this.raw.getTypeAtLocation(node);
|
|
266
|
+
this.typeAtLocation.set(node, type);
|
|
267
|
+
return type ?? this.anyType();
|
|
268
|
+
}
|
|
269
|
+
getSymbolAtLocation(node) {
|
|
270
|
+
if (this.symbolAtLocation.has(node))
|
|
271
|
+
return this.symbolAtLocation.get(node);
|
|
272
|
+
this.autoPrefetch(node, "symbols");
|
|
273
|
+
if (this.symbolAtLocation.has(node))
|
|
274
|
+
return this.symbolAtLocation.get(node);
|
|
275
|
+
const symbol = this.raw.getSymbolAtLocation(node);
|
|
276
|
+
this.symbolAtLocation.set(node, symbol);
|
|
277
|
+
return symbol;
|
|
278
|
+
}
|
|
279
|
+
getTypeOfSymbol(symbol) {
|
|
280
|
+
if (this.typeOfSymbol.has(symbol))
|
|
281
|
+
return this.typeOfSymbol.get(symbol) ?? this.anyType();
|
|
282
|
+
// The direct (memo-miss) path wears the same panic fence as the
|
|
283
|
+
// prefetch sweep: symbols the sweep never saw (members resolved from
|
|
284
|
+
// other files' d.ts) can hit the identical server panics (observed:
|
|
285
|
+
// GetTypeOfSymbol's TypeReference/TupleType conversion on prettier's
|
|
286
|
+
// engine graph), and the fence's answer is the sweep's — undefined,
|
|
287
|
+
// presented as `any`.
|
|
288
|
+
const [type] = withPanicFence([symbol], (c) => this.raw.getTypeOfSymbol(c));
|
|
289
|
+
this.typeOfSymbol.set(symbol, type);
|
|
290
|
+
return type ?? this.anyType();
|
|
291
|
+
}
|
|
292
|
+
getAliasedSymbol(symbol) {
|
|
293
|
+
let aliased = this.aliasedSymbol.get(symbol);
|
|
294
|
+
if (aliased === undefined) {
|
|
295
|
+
aliased = this.raw.getAliasedSymbol(symbol);
|
|
296
|
+
this.aliasedSymbol.set(symbol, aliased);
|
|
297
|
+
}
|
|
298
|
+
return aliased;
|
|
299
|
+
}
|
|
300
|
+
getDeclaredTypeOfSymbol(symbol) {
|
|
301
|
+
let type = this.declaredTypeOfSymbol.get(symbol);
|
|
302
|
+
if (type === undefined) {
|
|
303
|
+
type = this.raw.getDeclaredTypeOfSymbol(symbol);
|
|
304
|
+
this.declaredTypeOfSymbol.set(symbol, type);
|
|
305
|
+
}
|
|
306
|
+
return type;
|
|
307
|
+
}
|
|
308
|
+
getContextualType(node) {
|
|
309
|
+
if (this.contextualType.has(node))
|
|
310
|
+
return this.contextualType.get(node);
|
|
311
|
+
const type = this.raw.getContextualType(node);
|
|
312
|
+
this.contextualType.set(node, type);
|
|
313
|
+
return type;
|
|
314
|
+
}
|
|
315
|
+
getTypeFromTypeNode(node) {
|
|
316
|
+
if (this.typeFromTypeNode.has(node))
|
|
317
|
+
return this.typeFromTypeNode.get(node) ?? this.anyType();
|
|
318
|
+
const type = this.raw.getTypeFromTypeNode(node);
|
|
319
|
+
this.typeFromTypeNode.set(node, type);
|
|
320
|
+
return type ?? this.anyType();
|
|
321
|
+
}
|
|
322
|
+
getShorthandAssignmentValueSymbol(node) {
|
|
323
|
+
if (this.shorthandValueSymbol.has(node))
|
|
324
|
+
return this.shorthandValueSymbol.get(node);
|
|
325
|
+
const symbol = this.raw.getShorthandAssignmentValueSymbol(node);
|
|
326
|
+
this.shorthandValueSymbol.set(node, symbol);
|
|
327
|
+
return symbol;
|
|
328
|
+
}
|
|
329
|
+
getResolvedSignature(node) {
|
|
330
|
+
if (this.resolvedSignature.has(node))
|
|
331
|
+
return this.resolvedSignature.get(node);
|
|
332
|
+
const signature = this.raw.getResolvedSignature(node);
|
|
333
|
+
this.resolvedSignature.set(node, signature);
|
|
334
|
+
return signature;
|
|
335
|
+
}
|
|
336
|
+
getSignatureFromDeclaration(node) {
|
|
337
|
+
if (this.signatureFromDeclaration.has(node))
|
|
338
|
+
return this.signatureFromDeclaration.get(node);
|
|
339
|
+
const signature = this.raw.getSignatureFromDeclaration(node);
|
|
340
|
+
this.signatureFromDeclaration.set(node, signature);
|
|
341
|
+
return signature;
|
|
342
|
+
}
|
|
343
|
+
getReturnTypeOfSignature(signature) {
|
|
344
|
+
if (this.returnTypeOf.has(signature))
|
|
345
|
+
return this.returnTypeOf.get(signature) ?? this.anyType();
|
|
346
|
+
const type = this.raw.getReturnTypeOfSignature(signature);
|
|
347
|
+
this.returnTypeOf.set(signature, type);
|
|
348
|
+
return type ?? this.anyType();
|
|
349
|
+
}
|
|
350
|
+
getTypePredicateOfSignature(signature) {
|
|
351
|
+
if (this.typePredicateOf.has(signature))
|
|
352
|
+
return this.typePredicateOf.get(signature);
|
|
353
|
+
const predicate = this.raw.getTypePredicateOfSignature(signature);
|
|
354
|
+
this.typePredicateOf.set(signature, predicate);
|
|
355
|
+
return predicate;
|
|
356
|
+
}
|
|
357
|
+
/** 5.9.3 semantics, answered client-side wherever type.flags suffices:
|
|
358
|
+
* string/number/bigint/boolean literals map to the intrinsic singletons
|
|
359
|
+
* (one IPC ever per intrinsic); enum-ish and union types round-trip
|
|
360
|
+
* (memoized); everything else is itself. */
|
|
361
|
+
getBaseTypeOfLiteralType(type) {
|
|
362
|
+
const memo = this.baseTypeOfLiteral.get(type);
|
|
363
|
+
if (memo !== undefined)
|
|
364
|
+
return memo;
|
|
365
|
+
const flags = type.flags;
|
|
366
|
+
let base;
|
|
367
|
+
if (flags & (TypeFlags.EnumLiteral | TypeFlags.Enum) || flags & TypeFlags.Union) {
|
|
368
|
+
base = this.raw.getBaseTypeOfLiteralType(type) ?? type;
|
|
369
|
+
}
|
|
370
|
+
else if (flags & (TypeFlags.StringLiteral | TypeFlags.TemplateLiteral)) {
|
|
371
|
+
base = this.intrinsic("string", () => this.raw.getStringType());
|
|
372
|
+
}
|
|
373
|
+
else if (flags & TypeFlags.NumberLiteral) {
|
|
374
|
+
base = this.intrinsic("number", () => this.raw.getNumberType());
|
|
375
|
+
}
|
|
376
|
+
else if (flags & TypeFlags.BigIntLiteral) {
|
|
377
|
+
base = this.intrinsic("bigint", () => this.raw.getBigIntType());
|
|
378
|
+
}
|
|
379
|
+
else if (flags & TypeFlags.BooleanLiteral) {
|
|
380
|
+
base = this.intrinsic("boolean", () => this.raw.getBooleanType());
|
|
381
|
+
}
|
|
382
|
+
else {
|
|
383
|
+
base = type;
|
|
384
|
+
}
|
|
385
|
+
this.baseTypeOfLiteral.set(type, base);
|
|
386
|
+
return base;
|
|
387
|
+
}
|
|
388
|
+
intrinsic(name, fetch) {
|
|
389
|
+
let type = this.intrinsics.get(name);
|
|
390
|
+
if (type === undefined) {
|
|
391
|
+
type = fetch();
|
|
392
|
+
this.intrinsics.set(name, type);
|
|
393
|
+
}
|
|
394
|
+
return type;
|
|
395
|
+
}
|
|
396
|
+
/** 5.9.3's checker.getConstantValue, memoized per node. The one caller
|
|
397
|
+
* (enum lowering) passes ENUM MEMBER declaration nodes only: 7 answers
|
|
398
|
+
* the member's computed constant there for const and regular enums alike
|
|
399
|
+
* (access-expression queries answer const enums only — same as 5.9.3 —
|
|
400
|
+
* so the lowering resolves the member symbol and asks its declaration). */
|
|
401
|
+
getConstantValue(node) {
|
|
402
|
+
if (this.constantValueOf.has(node))
|
|
403
|
+
return this.constantValueOf.get(node);
|
|
404
|
+
const value = this.raw.getConstantValue(node);
|
|
405
|
+
this.constantValueOf.set(node, value);
|
|
406
|
+
return value;
|
|
407
|
+
}
|
|
408
|
+
constantValueOf = new WeakMap();
|
|
409
|
+
getNonNullableType(type) {
|
|
410
|
+
if (this.nonNullableType.has(type))
|
|
411
|
+
return this.nonNullableType.get(type) ?? type;
|
|
412
|
+
const result = this.raw.getNonNullableType(type);
|
|
413
|
+
this.nonNullableType.set(type, result);
|
|
414
|
+
return result ?? type;
|
|
415
|
+
}
|
|
416
|
+
getPropertiesOfType(type) {
|
|
417
|
+
let props = this.propertiesOfType.get(type);
|
|
418
|
+
if (props === undefined) {
|
|
419
|
+
props = this.raw.getPropertiesOfType(type);
|
|
420
|
+
this.propertiesOfType.set(type, props);
|
|
421
|
+
}
|
|
422
|
+
return props;
|
|
423
|
+
}
|
|
424
|
+
getIndexInfosOfType(type) {
|
|
425
|
+
let infos = this.indexInfosOfType.get(type);
|
|
426
|
+
if (infos === undefined) {
|
|
427
|
+
infos = this.raw.getIndexInfosOfType(type);
|
|
428
|
+
this.indexInfosOfType.set(type, infos);
|
|
429
|
+
}
|
|
430
|
+
return infos;
|
|
431
|
+
}
|
|
432
|
+
getTypeArguments(type) {
|
|
433
|
+
let args = this.typeArgumentsOf.get(type);
|
|
434
|
+
if (args === undefined) {
|
|
435
|
+
// 5.9.3 answered [] for a non-reference passed by cast (the lowering
|
|
436
|
+
// leans on that — a concretely-declared interface takes the same
|
|
437
|
+
// path as its generic @types twin); tsgo PANICS on it, so the
|
|
438
|
+
// reference check happens client-side (free — objectFlags).
|
|
439
|
+
args = type.isTypeReference() ? this.raw.getTypeArguments(type) : [];
|
|
440
|
+
this.typeArgumentsOf.set(type, args);
|
|
441
|
+
}
|
|
442
|
+
return args;
|
|
443
|
+
}
|
|
444
|
+
isArrayType(type) {
|
|
445
|
+
let answer = this.arrayTypeAnswer.get(type);
|
|
446
|
+
if (answer === undefined) {
|
|
447
|
+
answer = this.raw.isArrayType(type);
|
|
448
|
+
this.arrayTypeAnswer.set(type, answer);
|
|
449
|
+
}
|
|
450
|
+
return answer;
|
|
451
|
+
}
|
|
452
|
+
/** 5.9.3's checker.isTupleType answers true for tuple SHAPES and for
|
|
453
|
+
* REFERENCES to them (Pair<number>, a readonly [T, T] instantiation).
|
|
454
|
+
* The 7.0.2 client-side Type.isTupleType() sees only the shape — a
|
|
455
|
+
* reference answers false there (measured; the facade suite pins it) —
|
|
456
|
+
* so shape-true and non-object-false resolve locally and only object
|
|
457
|
+
* types that are not visibly tuples round-trip, memoized. */
|
|
458
|
+
isTupleType(type) {
|
|
459
|
+
if (type.isTupleType())
|
|
460
|
+
return true;
|
|
461
|
+
if (!(type.flags & TypeFlags.Object))
|
|
462
|
+
return false;
|
|
463
|
+
let answer = this.tupleTypeAnswer.get(type);
|
|
464
|
+
if (answer === undefined) {
|
|
465
|
+
answer = this.raw.isTupleType(type);
|
|
466
|
+
this.tupleTypeAnswer.set(type, answer);
|
|
467
|
+
}
|
|
468
|
+
return answer;
|
|
469
|
+
}
|
|
470
|
+
isArrayLikeType(type) {
|
|
471
|
+
let answer = this.arrayLikeAnswer.get(type);
|
|
472
|
+
if (answer === undefined) {
|
|
473
|
+
answer = this.raw.isArrayLikeType(type);
|
|
474
|
+
this.arrayLikeAnswer.set(type, answer);
|
|
475
|
+
}
|
|
476
|
+
return answer;
|
|
477
|
+
}
|
|
478
|
+
typeToString(type, enclosingDeclaration, flags) {
|
|
479
|
+
if (enclosingDeclaration === undefined && flags === undefined) {
|
|
480
|
+
let text = this.typeStringOf.get(type);
|
|
481
|
+
if (text === undefined) {
|
|
482
|
+
text = this.raw.typeToString(type);
|
|
483
|
+
this.typeStringOf.set(type, text);
|
|
484
|
+
}
|
|
485
|
+
return text;
|
|
486
|
+
}
|
|
487
|
+
return this.raw.typeToString(type, enclosingDeclaration, flags);
|
|
488
|
+
}
|
|
489
|
+
getTypeOfSymbolAtLocation(symbol, location) {
|
|
490
|
+
// Two-key query with one census call site: no memo, straight through.
|
|
491
|
+
return this.raw.getTypeOfSymbolAtLocation(symbol, location);
|
|
492
|
+
}
|
|
493
|
+
getUnknownType() {
|
|
494
|
+
this.unknownType ??= this.raw.getUnknownType();
|
|
495
|
+
return this.unknownType;
|
|
496
|
+
}
|
|
497
|
+
/** 7.0.2 dropped getAwaitedType (the census's one MISSING checker method).
|
|
498
|
+
* Shimmed per the survey: unwrap Promise/PromiseLike references through
|
|
499
|
+
* their type argument, distributing over unions. The client cannot BUILD
|
|
500
|
+
* union types, so a union whose arms unwrap to more than one distinct type
|
|
501
|
+
* returns undefined (callers fall back to the input; the census's one call
|
|
502
|
+
* site does exactly that) — a union like `T | PromiseLike<T>` collapses by
|
|
503
|
+
* object identity to T, which is the pattern that call site exists for. */
|
|
504
|
+
getAwaitedType(type) {
|
|
505
|
+
if (this.awaitedTypeOf.has(type))
|
|
506
|
+
return this.awaitedTypeOf.get(type);
|
|
507
|
+
const awaited = this.computeAwaitedType(type, 0);
|
|
508
|
+
this.awaitedTypeOf.set(type, awaited);
|
|
509
|
+
return awaited;
|
|
510
|
+
}
|
|
511
|
+
computeAwaitedType(type, depth) {
|
|
512
|
+
if (depth > 8)
|
|
513
|
+
return undefined; // matches 5.9.3's unwrap depth fence
|
|
514
|
+
if (type.isUnionType()) {
|
|
515
|
+
const arms = type.getTypes();
|
|
516
|
+
const awaited = arms.map((arm) => this.computeAwaitedType(arm, depth + 1));
|
|
517
|
+
if (awaited.some((arm) => arm === undefined))
|
|
518
|
+
return undefined;
|
|
519
|
+
// No arm was a promise: awaiting the union is the union itself
|
|
520
|
+
// (5.9.3 answers the input type — string | null stays string | null).
|
|
521
|
+
if (awaited.every((arm, i) => arm === arms[i]))
|
|
522
|
+
return type;
|
|
523
|
+
const distinct = [...new Set(awaited)];
|
|
524
|
+
return distinct.length === 1 ? distinct[0] : undefined;
|
|
525
|
+
}
|
|
526
|
+
const unwrapped = this.promiseArgumentOf(type);
|
|
527
|
+
if (unwrapped === null)
|
|
528
|
+
return type;
|
|
529
|
+
return this.computeAwaitedType(unwrapped, depth + 1);
|
|
530
|
+
}
|
|
531
|
+
/** The type argument of a Promise/PromiseLike reference, or null when the
|
|
532
|
+
* type is not one. Global-ness is approximated by symbol name — scriptc
|
|
533
|
+
* programs see the es2025 lib's Promise (the ambient world forces it). */
|
|
534
|
+
promiseArgumentOf(type) {
|
|
535
|
+
if (!type.isTypeReference())
|
|
536
|
+
return null;
|
|
537
|
+
const name = type.getTarget().getSymbol()?.name;
|
|
538
|
+
if (name !== "Promise" && name !== "PromiseLike")
|
|
539
|
+
return null;
|
|
540
|
+
const args = this.getTypeArguments(type);
|
|
541
|
+
return args[0] ?? null;
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
//# sourceMappingURL=checker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checker.js","sourceRoot":"","sources":["../../../src/frontend/ts7/checker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { InternalSymbolName, ModifierFlags, NodeFlags, ScriptKind, ScriptTarget, SyntaxKind, TokenFlags, } from "typescript/unstable/ast";
|
|
2
|
+
export { DiagnosticCategory, ElementFlags, ModuleKind, NodeBuilderFlags, ObjectFlags, SignatureFlags, SignatureKind, SymbolFlags, TypeFlags, TypePredicateKind, } from "typescript/unstable/sync";
|
|
3
|
+
interface ModuleResolutionKindEnum {
|
|
4
|
+
readonly Unknown: number;
|
|
5
|
+
readonly Classic: number;
|
|
6
|
+
readonly Node10: number;
|
|
7
|
+
readonly Node16: number;
|
|
8
|
+
readonly NodeNext: number;
|
|
9
|
+
readonly Bundler: number;
|
|
10
|
+
readonly [key: string | number]: string | number;
|
|
11
|
+
}
|
|
12
|
+
export declare const ModuleResolutionKind: ModuleResolutionKindEnum;
|
|
13
|
+
export type ModuleResolutionKind = number;
|
|
14
|
+
/** Reverse-maps a numeric enum value to its TS7 key name ("ESNext",
|
|
15
|
+
* "Bundler") — the spelling tsgo's tsconfig JSON parser accepts (lowercased
|
|
16
|
+
* by the caller where needed). Symbolic by construction: the name comes from
|
|
17
|
+
* the enum object's own reverse mapping. */
|
|
18
|
+
export declare function enumKeyOf(enumObject: Record<string | number, string | number>, value: number): string | undefined;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/* The census's enum surface over typescript@7.0.2 (the plain "typescript"
|
|
2
|
+
* dependency — 5.9.3 lives under the "typescript5" alias, islands only; see
|
|
3
|
+
* adapter.ts for the two-world rules). Everything here re-exports
|
|
4
|
+
* SYMBOLICALLY from 7: the two
|
|
5
|
+
* worlds renumbered their enums (SyntaxKind 218/396 keys differ, TypeFlags
|
|
6
|
+
* 64/71, NodeFlags 33/41 — the survey's census), so a numeric constant copied
|
|
7
|
+
* from either world is a silent lie in the other. No numeric values appear in
|
|
8
|
+
* this module.
|
|
9
|
+
*
|
|
10
|
+
* Placement in 7.0.2 (probed): the AST-world enums ship from unstable/ast,
|
|
11
|
+
* the checker-world enums from unstable/sync. ModuleResolutionKind is the one
|
|
12
|
+
* census enum the package does not re-export from any public entry point —
|
|
13
|
+
* it lives in dist/enums (the #enums/* internal imports), which the exports
|
|
14
|
+
* map hides from bare-specifier imports but NOT from a direct file require;
|
|
15
|
+
* loadHiddenEnum resolves the package root and requires the enum module by
|
|
16
|
+
* path, so the values are still TypeScript 7's own, never copied numbers. */
|
|
17
|
+
import { createRequire } from "node:module";
|
|
18
|
+
import { dirname, join } from "node:path";
|
|
19
|
+
export { InternalSymbolName, ModifierFlags, NodeFlags, ScriptKind, ScriptTarget, SyntaxKind, TokenFlags, } from "typescript/unstable/ast";
|
|
20
|
+
export { DiagnosticCategory, ElementFlags, ModuleKind, NodeBuilderFlags, ObjectFlags, SignatureFlags, SignatureKind, SymbolFlags, TypeFlags, TypePredicateKind, } from "typescript/unstable/sync";
|
|
21
|
+
const require = createRequire(import.meta.url);
|
|
22
|
+
/** Loads one of typescript(7)'s dist/enums modules by file path (the exports
|
|
23
|
+
* map hides them; a path require does not go through it). The enum files are
|
|
24
|
+
* ESM, so this leans on Node's require(esm) — the repo floor is Node 24,
|
|
25
|
+
* where that is always available. */
|
|
26
|
+
function loadHiddenEnum(basename, key) {
|
|
27
|
+
const packageRoot = dirname(require.resolve("typescript/package.json"));
|
|
28
|
+
const mod = require(join(packageRoot, "dist", "enums", `${basename}.js`));
|
|
29
|
+
const value = mod[key];
|
|
30
|
+
if (value === undefined)
|
|
31
|
+
throw new Error(`typescript enum module ${basename} has no export ${key}`);
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
export const ModuleResolutionKind = loadHiddenEnum("moduleResolutionKind", "ModuleResolutionKind");
|
|
35
|
+
/** Reverse-maps a numeric enum value to its TS7 key name ("ESNext",
|
|
36
|
+
* "Bundler") — the spelling tsgo's tsconfig JSON parser accepts (lowercased
|
|
37
|
+
* by the caller where needed). Symbolic by construction: the name comes from
|
|
38
|
+
* the enum object's own reverse mapping. */
|
|
39
|
+
export function enumKeyOf(enumObject, value) {
|
|
40
|
+
const key = enumObject[value];
|
|
41
|
+
return typeof key === "string" ? key : undefined;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=enums.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enums.js","sourceRoot":"","sources":["../../../src/frontend/ts7/enums.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;6EAe6E;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,SAAS,EACT,UAAU,EACV,YAAY,EACZ,UAAU,EACV,UAAU,GACX,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,aAAa,EACb,WAAW,EACX,SAAS,EACT,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAElC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C;;;qCAGqC;AACrC,SAAS,cAAc,CAAI,QAAgB,EAAE,GAAW;IACtD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACxE,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,KAAK,CAAC,CAAsB,CAAC;IAC/F,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,kBAAkB,GAAG,EAAE,CAAC,CAAC;IACpG,OAAO,KAAK,CAAC;AACf,CAAC;AAiBD,MAAM,CAAC,MAAM,oBAAoB,GAC/B,cAAc,CAA2B,sBAAsB,EAAE,sBAAsB,CAAC,CAAC;AAG3F;;;4CAG4C;AAC5C,MAAM,UAAU,SAAS,CAAC,UAAoD,EAAE,KAAa;IAC3F,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,CAAC"}
|