@tsonic/frontend 0.0.63 → 0.0.65
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/dist/.tsbuildinfo +1 -1
- package/dist/dependency-graph.d.ts +1 -1
- package/dist/dependency-graph.d.ts.map +1 -1
- package/dist/dependency-graph.js +1 -1
- package/dist/dependency-graph.js.map +1 -1
- package/dist/graph/extraction/imports.d.ts +0 -5
- package/dist/graph/extraction/imports.d.ts.map +1 -1
- package/dist/graph/extraction/imports.js +4 -31
- package/dist/graph/extraction/imports.js.map +1 -1
- package/dist/graph/extraction/index.d.ts +1 -1
- package/dist/graph/extraction/index.d.ts.map +1 -1
- package/dist/graph/extraction/index.js +1 -1
- package/dist/graph/extraction/index.js.map +1 -1
- package/dist/graph/extraction/orchestrator.d.ts.map +1 -1
- package/dist/graph/extraction/orchestrator.js +1 -7
- package/dist/graph/extraction/orchestrator.js.map +1 -1
- package/dist/graph/extraction.d.ts +1 -1
- package/dist/graph/extraction.d.ts.map +1 -1
- package/dist/graph/extraction.js +1 -1
- package/dist/graph/extraction.js.map +1 -1
- package/dist/ir/binding/binding-types.d.ts +2 -2
- package/dist/ir/binding/binding-types.d.ts.map +1 -1
- package/dist/ir/binding-resolution.test.js +224 -0
- package/dist/ir/binding-resolution.test.js.map +1 -1
- package/dist/ir/bindings-disambiguation.test.js +149 -0
- package/dist/ir/bindings-disambiguation.test.js.map +1 -1
- package/dist/ir/builder/imports.d.ts.map +1 -1
- package/dist/ir/builder/imports.js +7 -4
- package/dist/ir/builder/imports.js.map +1 -1
- package/dist/ir/builder.test.js +193 -0
- package/dist/ir/builder.test.js.map +1 -1
- package/dist/ir/converters/expressions/access/binding-resolution.d.ts.map +1 -1
- package/dist/ir/converters/expressions/access/binding-resolution.js +55 -14
- package/dist/ir/converters/expressions/access/binding-resolution.js.map +1 -1
- package/dist/ir/converters/expressions/access/member-resolution.d.ts.map +1 -1
- package/dist/ir/converters/expressions/access/member-resolution.js +5 -0
- package/dist/ir/converters/expressions/access/member-resolution.js.map +1 -1
- package/dist/ir/converters/expressions/calls/call-converter.js +3 -3
- package/dist/ir/converters/expressions/calls/call-converter.js.map +1 -1
- package/dist/ir/program-context.d.ts +5 -0
- package/dist/ir/program-context.d.ts.map +1 -1
- package/dist/ir/program-context.js +1 -0
- package/dist/ir/program-context.js.map +1 -1
- package/dist/ir/type-system/internal/type-converter/orchestrator.d.ts.map +1 -1
- package/dist/ir/type-system/internal/type-converter/orchestrator.js +12 -5
- package/dist/ir/type-system/internal/type-converter/orchestrator.js.map +1 -1
- package/dist/ir/type-system/internal/type-converter/references.d.ts.map +1 -1
- package/dist/ir/type-system/internal/type-converter/references.js +6 -9
- package/dist/ir/type-system/internal/type-converter/references.js.map +1 -1
- package/dist/ir/type-system/internal/universe/clr-type-parser.d.ts.map +1 -1
- package/dist/ir/type-system/internal/universe/clr-type-parser.js +66 -0
- package/dist/ir/type-system/internal/universe/clr-type-parser.js.map +1 -1
- package/dist/ir/type-system/internal/universe/clr-type-parser.test.d.ts +2 -0
- package/dist/ir/type-system/internal/universe/clr-type-parser.test.d.ts.map +1 -0
- package/dist/ir/type-system/internal/universe/clr-type-parser.test.js +55 -0
- package/dist/ir/type-system/internal/universe/clr-type-parser.test.js.map +1 -0
- package/dist/ir/type-system/type-system-call-resolution.d.ts.map +1 -1
- package/dist/ir/type-system/type-system-call-resolution.js +109 -3
- package/dist/ir/type-system/type-system-call-resolution.js.map +1 -1
- package/dist/ir/type-system/type-system-inference.d.ts.map +1 -1
- package/dist/ir/type-system/type-system-inference.js +38 -0
- package/dist/ir/type-system/type-system-inference.js.map +1 -1
- package/dist/ir/type-system/type-system-state.d.ts.map +1 -1
- package/dist/ir/type-system/type-system-state.js +33 -17
- package/dist/ir/type-system/type-system-state.js.map +1 -1
- package/dist/ir/type-system/type-system.d.ts.map +1 -1
- package/dist/ir/type-system/type-system.js.map +1 -1
- package/dist/ir/validation/anonymous-type-lowering-pass.d.ts.map +1 -1
- package/dist/ir/validation/anonymous-type-lowering-pass.js +34 -0
- package/dist/ir/validation/anonymous-type-lowering-pass.js.map +1 -1
- package/dist/ir/validation/anonymous-type-lowering-regressions.test.d.ts +2 -0
- package/dist/ir/validation/anonymous-type-lowering-regressions.test.d.ts.map +1 -0
- package/dist/ir/validation/anonymous-type-lowering-regressions.test.js +121 -0
- package/dist/ir/validation/anonymous-type-lowering-regressions.test.js.map +1 -0
- package/dist/ir/validation/numeric-invariants.test.js +29 -0
- package/dist/ir/validation/numeric-invariants.test.js.map +1 -1
- package/dist/ir/validation/numeric-proof-pass.d.ts.map +1 -1
- package/dist/ir/validation/numeric-proof-pass.js +21 -0
- package/dist/ir/validation/numeric-proof-pass.js.map +1 -1
- package/dist/program/binding-loader.d.ts +3 -3
- package/dist/program/binding-loader.d.ts.map +1 -1
- package/dist/program/binding-loader.js +47 -23
- package/dist/program/binding-loader.js.map +1 -1
- package/dist/program/binding-registry.d.ts +7 -0
- package/dist/program/binding-registry.d.ts.map +1 -1
- package/dist/program/binding-registry.js +52 -1
- package/dist/program/binding-registry.js.map +1 -1
- package/dist/program/bindings.test.js +168 -0
- package/dist/program/bindings.test.js.map +1 -1
- package/dist/program/creation.d.ts.map +1 -1
- package/dist/program/creation.js +337 -77
- package/dist/program/creation.js.map +1 -1
- package/dist/program/creation.test.js +312 -1
- package/dist/program/creation.test.js.map +1 -1
- package/dist/program/diagnostics.d.ts +1 -1
- package/dist/program/diagnostics.d.ts.map +1 -1
- package/dist/program/diagnostics.js +47 -2
- package/dist/program/diagnostics.js.map +1 -1
- package/dist/program/diagnostics.test.d.ts +2 -0
- package/dist/program/diagnostics.test.d.ts.map +1 -0
- package/dist/program/diagnostics.test.js +58 -0
- package/dist/program/diagnostics.test.js.map +1 -0
- package/dist/program/metadata.d.ts.map +1 -1
- package/dist/program/metadata.js +8 -2
- package/dist/program/metadata.js.map +1 -1
- package/dist/program/types.d.ts +2 -0
- package/dist/program/types.d.ts.map +1 -1
- package/dist/resolver/clr-bindings-resolver.d.ts.map +1 -1
- package/dist/resolver/clr-bindings-resolver.js +42 -4
- package/dist/resolver/clr-bindings-resolver.js.map +1 -1
- package/dist/resolver/import-resolution.d.ts.map +1 -1
- package/dist/resolver/import-resolution.js +6 -5
- package/dist/resolver/import-resolution.js.map +1 -1
- package/dist/resolver.test.js +75 -0
- package/dist/resolver.test.js.map +1 -1
- package/dist/surface/profiles.d.ts +13 -0
- package/dist/surface/profiles.d.ts.map +1 -0
- package/dist/surface/profiles.js +214 -0
- package/dist/surface/profiles.js.map +1 -0
- package/dist/surface/profiles.test.d.ts +2 -0
- package/dist/surface/profiles.test.d.ts.map +1 -0
- package/dist/surface/profiles.test.js +125 -0
- package/dist/surface/profiles.test.js.map +1 -0
- package/dist/validation/features.d.ts.map +1 -1
- package/dist/validation/features.js +1 -23
- package/dist/validation/features.js.map +1 -1
- package/dist/validation/features.test.js +4 -4
- package/dist/validation/features.test.js.map +1 -1
- package/dist/validation/imports.d.ts.map +1 -1
- package/dist/validation/imports.js +19 -5
- package/dist/validation/imports.js.map +1 -1
- package/dist/validation/imports.test.js +112 -5
- package/dist/validation/imports.test.js.map +1 -1
- package/dist/validator.maximus.test.js +4 -5
- package/dist/validator.maximus.test.js.map +1 -1
- package/package.json +2 -2
- package/dist/ir/converters/context.d.ts +0 -40
- package/dist/ir/converters/context.d.ts.map +0 -1
- package/dist/ir/converters/context.js +0 -25
- package/dist/ir/converters/context.js.map +0 -1
- package/dist/validation/unsupported-utility-types.d.ts +0 -40
- package/dist/validation/unsupported-utility-types.d.ts.map +0 -1
- package/dist/validation/unsupported-utility-types.js +0 -43
- package/dist/validation/unsupported-utility-types.js.map +0 -1
|
@@ -6,8 +6,49 @@ import { expect } from "chai";
|
|
|
6
6
|
import * as fs from "node:fs";
|
|
7
7
|
import * as os from "node:os";
|
|
8
8
|
import * as path from "node:path";
|
|
9
|
-
import { createProgram } from "./creation.js";
|
|
9
|
+
import { createCompilerOptions, createProgram } from "./creation.js";
|
|
10
10
|
describe("Program Creation", () => {
|
|
11
|
+
it("should keep noLib mode in js surface mode", () => {
|
|
12
|
+
const options = createCompilerOptions({
|
|
13
|
+
projectRoot: "/tmp/app",
|
|
14
|
+
sourceRoot: "/tmp/app/src",
|
|
15
|
+
rootNamespace: "App",
|
|
16
|
+
surface: "@tsonic/js",
|
|
17
|
+
});
|
|
18
|
+
expect(options.noLib).to.equal(true);
|
|
19
|
+
});
|
|
20
|
+
it("should keep noLib mode in nodejs surface mode", () => {
|
|
21
|
+
const options = createCompilerOptions({
|
|
22
|
+
projectRoot: "/tmp/app",
|
|
23
|
+
sourceRoot: "/tmp/app/src",
|
|
24
|
+
rootNamespace: "App",
|
|
25
|
+
surface: "@tsonic/nodejs",
|
|
26
|
+
});
|
|
27
|
+
expect(options.noLib).to.equal(true);
|
|
28
|
+
});
|
|
29
|
+
it("should allow mutable array index writes in clr surface mode", () => {
|
|
30
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tsonic-program-clr-array-write-"));
|
|
31
|
+
try {
|
|
32
|
+
fs.writeFileSync(path.join(tempDir, "package.json"), JSON.stringify({ name: "app", version: "1.0.0", type: "module" }, null, 2));
|
|
33
|
+
const srcDir = path.join(tempDir, "src");
|
|
34
|
+
fs.mkdirSync(srcDir, { recursive: true });
|
|
35
|
+
const entryPath = path.join(srcDir, "index.ts");
|
|
36
|
+
fs.writeFileSync(entryPath, [
|
|
37
|
+
"const values: number[] = [1, 2, 3];",
|
|
38
|
+
"values[0] = 42;",
|
|
39
|
+
"export const first = values[0];",
|
|
40
|
+
].join("\n"));
|
|
41
|
+
const result = createProgram([entryPath], {
|
|
42
|
+
projectRoot: tempDir,
|
|
43
|
+
sourceRoot: srcDir,
|
|
44
|
+
rootNamespace: "Test",
|
|
45
|
+
});
|
|
46
|
+
expect(result.ok).to.equal(true);
|
|
47
|
+
}
|
|
48
|
+
finally {
|
|
49
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
50
|
+
}
|
|
51
|
+
});
|
|
11
52
|
it("should resolve @tsonic/* imports from the project root (global install)", () => {
|
|
12
53
|
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tsonic-program-creation-"));
|
|
13
54
|
try {
|
|
@@ -38,5 +79,275 @@ describe("Program Creation", () => {
|
|
|
38
79
|
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
39
80
|
}
|
|
40
81
|
});
|
|
82
|
+
it("should resolve node module imports from package-provided declarations and bindings", () => {
|
|
83
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tsonic-program-js-surface-"));
|
|
84
|
+
try {
|
|
85
|
+
fs.writeFileSync(path.join(tempDir, "package.json"), JSON.stringify({ name: "app", version: "1.0.0", type: "module" }, null, 2));
|
|
86
|
+
const srcDir = path.join(tempDir, "src");
|
|
87
|
+
fs.mkdirSync(srcDir, { recursive: true });
|
|
88
|
+
const nodejsRoot = path.join(tempDir, "node_modules/@tsonic/nodejs");
|
|
89
|
+
fs.mkdirSync(nodejsRoot, { recursive: true });
|
|
90
|
+
fs.writeFileSync(path.join(nodejsRoot, "package.json"), JSON.stringify({ name: "@tsonic/nodejs", version: "0.0.0", type: "module" }, null, 2));
|
|
91
|
+
fs.writeFileSync(path.join(nodejsRoot, "index.d.ts"), 'declare module "node:fs" { export const readFileSync: (path: string) => string; }\n');
|
|
92
|
+
fs.writeFileSync(path.join(nodejsRoot, "index.js"), "export const fs = {};\n");
|
|
93
|
+
const nodejsInternalDir = path.join(nodejsRoot, "index");
|
|
94
|
+
fs.mkdirSync(nodejsInternalDir, { recursive: true });
|
|
95
|
+
fs.writeFileSync(path.join(nodejsRoot, "bindings.json"), JSON.stringify({
|
|
96
|
+
bindings: {
|
|
97
|
+
"node:fs": {
|
|
98
|
+
kind: "module",
|
|
99
|
+
assembly: "nodejs",
|
|
100
|
+
type: "nodejs.fs",
|
|
101
|
+
},
|
|
102
|
+
fs: {
|
|
103
|
+
kind: "module",
|
|
104
|
+
assembly: "nodejs",
|
|
105
|
+
type: "nodejs.fs",
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
}, null, 2));
|
|
109
|
+
const entryPath = path.join(srcDir, "index.ts");
|
|
110
|
+
fs.writeFileSync(entryPath, 'import { readFileSync } from "node:fs";\nexport const x = readFileSync("a.txt");\n');
|
|
111
|
+
const result = createProgram([entryPath], {
|
|
112
|
+
projectRoot: tempDir,
|
|
113
|
+
sourceRoot: srcDir,
|
|
114
|
+
rootNamespace: "Test",
|
|
115
|
+
surface: "@tsonic/nodejs",
|
|
116
|
+
typeRoots: [],
|
|
117
|
+
});
|
|
118
|
+
expect(result.ok).to.equal(true);
|
|
119
|
+
if (!result.ok)
|
|
120
|
+
return;
|
|
121
|
+
const nodeFs = result.value.bindings.getBinding("node:fs");
|
|
122
|
+
expect(nodeFs?.kind).to.equal("module");
|
|
123
|
+
if (nodeFs?.kind === "module") {
|
|
124
|
+
expect(nodeFs.type).to.equal("nodejs.fs");
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
finally {
|
|
128
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
it("should include declaration files from custom non-@tsonic surface packages", () => {
|
|
132
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tsonic-program-custom-surface-"));
|
|
133
|
+
try {
|
|
134
|
+
fs.writeFileSync(path.join(tempDir, "package.json"), JSON.stringify({ name: "app", version: "1.0.0", type: "module" }, null, 2));
|
|
135
|
+
const srcDir = path.join(tempDir, "src");
|
|
136
|
+
fs.mkdirSync(srcDir, { recursive: true });
|
|
137
|
+
const surfaceRoot = path.join(tempDir, "node_modules", "@acme", "surface-web");
|
|
138
|
+
fs.mkdirSync(surfaceRoot, { recursive: true });
|
|
139
|
+
fs.writeFileSync(path.join(surfaceRoot, "package.json"), JSON.stringify({ name: "@acme/surface-web", version: "1.0.0", type: "module" }, null, 2));
|
|
140
|
+
fs.writeFileSync(path.join(surfaceRoot, "tsonic.surface.json"), JSON.stringify({
|
|
141
|
+
schemaVersion: 1,
|
|
142
|
+
id: "@acme/surface-web",
|
|
143
|
+
extends: [],
|
|
144
|
+
requiredTypeRoots: ["."],
|
|
145
|
+
}, null, 2));
|
|
146
|
+
fs.writeFileSync(path.join(surfaceRoot, "index.d.ts"), "declare global { interface String { shout(): string; } }\nexport {};\n");
|
|
147
|
+
fs.writeFileSync(path.join(surfaceRoot, "index.js"), "export {};\n");
|
|
148
|
+
const entryPath = path.join(srcDir, "index.ts");
|
|
149
|
+
fs.writeFileSync(entryPath, 'export const x = "hello".shout();\n');
|
|
150
|
+
const result = createProgram([entryPath], {
|
|
151
|
+
projectRoot: tempDir,
|
|
152
|
+
sourceRoot: srcDir,
|
|
153
|
+
rootNamespace: "Test",
|
|
154
|
+
surface: "@acme/surface-web",
|
|
155
|
+
});
|
|
156
|
+
expect(result.ok).to.equal(true);
|
|
157
|
+
if (!result.ok)
|
|
158
|
+
return;
|
|
159
|
+
const expectedDts = path.resolve(path.join(surfaceRoot, "index.d.ts"));
|
|
160
|
+
expect(result.value.declarationSourceFiles.some((sf) => path.resolve(sf.fileName) === expectedDts)).to.equal(true);
|
|
161
|
+
}
|
|
162
|
+
finally {
|
|
163
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
it("should load js-surface extension bindings without explicit typeRoots", () => {
|
|
167
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tsonic-program-js-extensions-"));
|
|
168
|
+
try {
|
|
169
|
+
fs.writeFileSync(path.join(tempDir, "package.json"), JSON.stringify({ name: "app", version: "1.0.0", type: "module" }, null, 2));
|
|
170
|
+
const srcDir = path.join(tempDir, "src");
|
|
171
|
+
fs.mkdirSync(srcDir, { recursive: true });
|
|
172
|
+
const jsRoot = path.join(tempDir, "node_modules/@tsonic/js");
|
|
173
|
+
fs.mkdirSync(path.join(jsRoot, "index"), { recursive: true });
|
|
174
|
+
fs.writeFileSync(path.join(jsRoot, "package.json"), JSON.stringify({ name: "@tsonic/js", version: "0.0.0", type: "module" }, null, 2));
|
|
175
|
+
fs.writeFileSync(path.join(jsRoot, "index.d.ts"), "declare global { interface String { trim(): string; } }\nexport {};\n");
|
|
176
|
+
fs.writeFileSync(path.join(jsRoot, "index.js"), "export {};\n");
|
|
177
|
+
fs.writeFileSync(path.join(jsRoot, "index", "bindings.json"), JSON.stringify({
|
|
178
|
+
namespace: "Tsonic.JSRuntime",
|
|
179
|
+
types: [
|
|
180
|
+
{
|
|
181
|
+
clrName: "Tsonic.JSRuntime.String",
|
|
182
|
+
assemblyName: "Tsonic.JSRuntime",
|
|
183
|
+
methods: [
|
|
184
|
+
{
|
|
185
|
+
clrName: "trim",
|
|
186
|
+
normalizedSignature: "trim|(System.String):System.String|static=true",
|
|
187
|
+
parameterCount: 1,
|
|
188
|
+
declaringClrType: "Tsonic.JSRuntime.String",
|
|
189
|
+
declaringAssemblyName: "Tsonic.JSRuntime",
|
|
190
|
+
isExtensionMethod: true,
|
|
191
|
+
},
|
|
192
|
+
],
|
|
193
|
+
properties: [],
|
|
194
|
+
fields: [],
|
|
195
|
+
},
|
|
196
|
+
],
|
|
197
|
+
}, null, 2));
|
|
198
|
+
const entryPath = path.join(srcDir, "index.ts");
|
|
199
|
+
fs.writeFileSync(entryPath, 'export const x = " hi ".trim();\n');
|
|
200
|
+
const result = createProgram([entryPath], {
|
|
201
|
+
projectRoot: tempDir,
|
|
202
|
+
sourceRoot: srcDir,
|
|
203
|
+
rootNamespace: "Test",
|
|
204
|
+
surface: "@tsonic/js",
|
|
205
|
+
});
|
|
206
|
+
expect(result.ok).to.equal(true);
|
|
207
|
+
if (!result.ok)
|
|
208
|
+
return;
|
|
209
|
+
expect(result.value.bindings.resolveExtensionMethodByKey("Tsonic_JSRuntime", "String", "trim", 0)).to.not.equal(undefined);
|
|
210
|
+
}
|
|
211
|
+
finally {
|
|
212
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
it("should typecheck package-provided js globals in noLib mode", () => {
|
|
216
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tsonic-program-js-globals-"));
|
|
217
|
+
try {
|
|
218
|
+
fs.writeFileSync(path.join(tempDir, "package.json"), JSON.stringify({ name: "app", version: "1.0.0", type: "module" }, null, 2));
|
|
219
|
+
const srcDir = path.join(tempDir, "src");
|
|
220
|
+
fs.mkdirSync(srcDir, { recursive: true });
|
|
221
|
+
const jsRoot = path.join(tempDir, "node_modules/@tsonic/js");
|
|
222
|
+
fs.mkdirSync(jsRoot, { recursive: true });
|
|
223
|
+
fs.writeFileSync(path.join(jsRoot, "package.json"), JSON.stringify({ name: "@tsonic/js", version: "0.0.0", type: "module" }, null, 2));
|
|
224
|
+
fs.writeFileSync(path.join(jsRoot, "index.d.ts"), `
|
|
225
|
+
declare global {
|
|
226
|
+
interface String {
|
|
227
|
+
trim(): string;
|
|
228
|
+
toUpperCase(): string;
|
|
229
|
+
includes(search: string): boolean;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
interface Array<T> {
|
|
233
|
+
readonly length: number;
|
|
234
|
+
map<TResult>(callback: (value: T) => TResult): TResult[];
|
|
235
|
+
filter(callback: (value: T) => boolean): T[];
|
|
236
|
+
reduce<TResult>(
|
|
237
|
+
callback: (previousValue: TResult, currentValue: T) => TResult,
|
|
238
|
+
initialValue: TResult
|
|
239
|
+
): TResult;
|
|
240
|
+
join(separator?: string): string;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
const console: {
|
|
244
|
+
log(...data: unknown[]): void;
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
function parseInt(value: string): number;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
export {};
|
|
251
|
+
`);
|
|
252
|
+
const entryPath = path.join(srcDir, "index.ts");
|
|
253
|
+
fs.writeFileSync(entryPath, [
|
|
254
|
+
'const m = " hi ".trim().toUpperCase();',
|
|
255
|
+
'const hasNeedle = m.includes("H");',
|
|
256
|
+
"const nums = [1, 2, 3, 4];",
|
|
257
|
+
"const doubled = nums.map((x) => x * 2);",
|
|
258
|
+
"const filtered = doubled.filter((x) => x > 2);",
|
|
259
|
+
"const total = filtered.reduce((a, b) => a + b, 0);",
|
|
260
|
+
"console.log(hasNeedle);",
|
|
261
|
+
'console.log(nums.length, doubled.join(","), total, m);',
|
|
262
|
+
'export const ok = parseInt("42");',
|
|
263
|
+
].join("\n"));
|
|
264
|
+
const result = createProgram([entryPath], {
|
|
265
|
+
projectRoot: tempDir,
|
|
266
|
+
sourceRoot: srcDir,
|
|
267
|
+
rootNamespace: "Test",
|
|
268
|
+
surface: "@tsonic/js",
|
|
269
|
+
});
|
|
270
|
+
expect(result.ok).to.equal(true);
|
|
271
|
+
}
|
|
272
|
+
finally {
|
|
273
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
it("should keep JS surface free of CLR string members", () => {
|
|
277
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tsonic-program-js-no-clr-"));
|
|
278
|
+
try {
|
|
279
|
+
fs.writeFileSync(path.join(tempDir, "package.json"), JSON.stringify({ name: "app", version: "1.0.0", type: "module" }, null, 2));
|
|
280
|
+
const srcDir = path.join(tempDir, "src");
|
|
281
|
+
fs.mkdirSync(srcDir, { recursive: true });
|
|
282
|
+
const jsRoot = path.join(tempDir, "node_modules/@tsonic/js");
|
|
283
|
+
fs.mkdirSync(jsRoot, { recursive: true });
|
|
284
|
+
fs.writeFileSync(path.join(jsRoot, "package.json"), JSON.stringify({ name: "@tsonic/js", version: "0.0.0", type: "module" }, null, 2));
|
|
285
|
+
fs.writeFileSync(path.join(jsRoot, "index.d.ts"), "declare global { interface String { trim(): string; } }\nexport {};\n");
|
|
286
|
+
fs.writeFileSync(path.join(jsRoot, "index.js"), "export {};\n");
|
|
287
|
+
fs.writeFileSync(path.join(jsRoot, "tsonic.surface.json"), JSON.stringify({
|
|
288
|
+
schemaVersion: 1,
|
|
289
|
+
id: "@tsonic/js",
|
|
290
|
+
extends: [],
|
|
291
|
+
requiredTypeRoots: ["."],
|
|
292
|
+
useStandardLib: false,
|
|
293
|
+
}, null, 2));
|
|
294
|
+
const entryPath = path.join(srcDir, "index.ts");
|
|
295
|
+
fs.writeFileSync(entryPath, 'export const bad = " hi ".Trim();\n');
|
|
296
|
+
const result = createProgram([entryPath], {
|
|
297
|
+
projectRoot: tempDir,
|
|
298
|
+
sourceRoot: srcDir,
|
|
299
|
+
rootNamespace: "Test",
|
|
300
|
+
surface: "@tsonic/js",
|
|
301
|
+
});
|
|
302
|
+
expect(result.ok).to.equal(false);
|
|
303
|
+
if (result.ok)
|
|
304
|
+
return;
|
|
305
|
+
expect(result.error.hasErrors).to.equal(true);
|
|
306
|
+
expect(result.error.diagnostics.some((diagnostic) => diagnostic.message.includes("Property 'Trim' does not exist"))).to.equal(true);
|
|
307
|
+
}
|
|
308
|
+
finally {
|
|
309
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
310
|
+
}
|
|
311
|
+
});
|
|
312
|
+
it("should expose CLR string members on clr surface via compiler declarations", () => {
|
|
313
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "tsonic-program-clr-members-"));
|
|
314
|
+
try {
|
|
315
|
+
fs.writeFileSync(path.join(tempDir, "package.json"), JSON.stringify({ name: "app", version: "1.0.0", type: "module" }, null, 2));
|
|
316
|
+
const srcDir = path.join(tempDir, "src");
|
|
317
|
+
fs.mkdirSync(srcDir, { recursive: true });
|
|
318
|
+
const dotnetRoot = path.join(tempDir, "node_modules/@tsonic/dotnet");
|
|
319
|
+
const dotnetInternalRoot = path.join(dotnetRoot, "System/internal");
|
|
320
|
+
fs.mkdirSync(dotnetInternalRoot, { recursive: true });
|
|
321
|
+
fs.writeFileSync(path.join(dotnetRoot, "package.json"), JSON.stringify({ name: "@tsonic/dotnet", version: "0.0.0", type: "module" }, null, 2));
|
|
322
|
+
fs.writeFileSync(path.join(dotnetInternalRoot, "index.d.ts"), `
|
|
323
|
+
export interface Array$instance {}
|
|
324
|
+
export interface __Array$views {}
|
|
325
|
+
export interface String$instance { Trim(): string; }
|
|
326
|
+
export interface __String$views {}
|
|
327
|
+
export interface Double$instance {}
|
|
328
|
+
export interface __Double$views {}
|
|
329
|
+
export interface Boolean$instance {}
|
|
330
|
+
export interface __Boolean$views {}
|
|
331
|
+
export interface Object$instance {}
|
|
332
|
+
`);
|
|
333
|
+
fs.writeFileSync(path.join(dotnetInternalRoot, "index.js"), "export {};\n");
|
|
334
|
+
fs.writeFileSync(path.join(dotnetRoot, "System.Collections.d.ts"), "export interface IEnumerator {}\n");
|
|
335
|
+
fs.writeFileSync(path.join(dotnetRoot, "System.Collections.js"), "export {};\n");
|
|
336
|
+
fs.writeFileSync(path.join(dotnetRoot, "System.Collections.Generic.d.ts"), "export interface IEnumerable<T> {}\nexport interface IEnumerator<T> {}\n");
|
|
337
|
+
fs.writeFileSync(path.join(dotnetRoot, "System.Collections.Generic.js"), "export {};\n");
|
|
338
|
+
const entryPath = path.join(srcDir, "index.ts");
|
|
339
|
+
fs.writeFileSync(entryPath, 'export const ok = " hi ".Trim();\n');
|
|
340
|
+
const result = createProgram([entryPath], {
|
|
341
|
+
projectRoot: tempDir,
|
|
342
|
+
sourceRoot: srcDir,
|
|
343
|
+
rootNamespace: "Test",
|
|
344
|
+
surface: "clr",
|
|
345
|
+
});
|
|
346
|
+
expect(result.ok).to.equal(true);
|
|
347
|
+
}
|
|
348
|
+
finally {
|
|
349
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
350
|
+
}
|
|
351
|
+
});
|
|
41
352
|
});
|
|
42
353
|
//# sourceMappingURL=creation.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"creation.test.js","sourceRoot":"","sources":["../../src/program/creation.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"creation.test.js","sourceRoot":"","sources":["../../src/program/creation.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAErE,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,OAAO,GAAG,qBAAqB,CAAC;YACpC,WAAW,EAAE,UAAU;YACvB,UAAU,EAAE,cAAc;YAC1B,aAAa,EAAE,KAAK;YACpB,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC;QAEH,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,OAAO,GAAG,qBAAqB,CAAC;YACpC,WAAW,EAAE,UAAU;YACvB,UAAU,EAAE,cAAc;YAC1B,aAAa,EAAE,KAAK;YACpB,OAAO,EAAE,gBAAgB;SAC1B,CAAC,CAAC;QAEH,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,iCAAiC,CAAC,CAC1D,CAAC;QAEF,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAClC,IAAI,CAAC,SAAS,CACZ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EACjD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YAEF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACzC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAChD,EAAE,CAAC,aAAa,CACd,SAAS,EACT;gBACE,qCAAqC;gBACrC,iBAAiB;gBACjB,iCAAiC;aAClC,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;YAEF,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,SAAS,CAAC,EAAE;gBACxC,WAAW,EAAE,OAAO;gBACpB,UAAU,EAAE,MAAM;gBAClB,aAAa,EAAE,MAAM;aACtB,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,0BAA0B,CAAC,CACnD,CAAC;QAEF,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAClC,IAAI,CAAC,SAAS,CACZ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EACjD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YAEF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACzC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE1C,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC;YACzE,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,EACzC,IAAI,CAAC,SAAS,CACZ,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAC5D,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YACF,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,EACxC,uCAAuC,CACxC,CAAC;YACF,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,EACtC,2CAA2C,CAC5C,CAAC;YAEF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAChD,EAAE,CAAC,aAAa,CACd,SAAS,EACT,iFAAiF,CAClF,CAAC;YAEF,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,SAAS,CAAC,EAAE;gBACxC,WAAW,EAAE,OAAO;gBACpB,UAAU,EAAE,MAAM;gBAClB,aAAa,EAAE,MAAM;gBACrB,cAAc,EAAE,IAAI;gBACpB,SAAS,EAAE,EAAE;aACd,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAAE,OAAO;YAEvB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAC9B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CACzC,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAClE,SAAS,CACV,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oFAAoF,EAAE,GAAG,EAAE;QAC5F,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,4BAA4B,CAAC,CACrD,CAAC;QAEF,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAClC,IAAI,CAAC,SAAS,CACZ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EACjD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YAEF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACzC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC;YACrE,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,EACrC,IAAI,CAAC,SAAS,CACZ,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAC5D,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YACF,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EACnC,qFAAqF,CACtF,CAAC;YACF,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EACjC,yBAAyB,CAC1B,CAAC;YACF,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACzD,EAAE,CAAC,SAAS,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,EACtC,IAAI,CAAC,SAAS,CACZ;gBACE,QAAQ,EAAE;oBACR,SAAS,EAAE;wBACT,IAAI,EAAE,QAAQ;wBACd,QAAQ,EAAE,QAAQ;wBAClB,IAAI,EAAE,WAAW;qBAClB;oBACD,EAAE,EAAE;wBACF,IAAI,EAAE,QAAQ;wBACd,QAAQ,EAAE,QAAQ;wBAClB,IAAI,EAAE,WAAW;qBAClB;iBACF;aACF,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YAEF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAChD,EAAE,CAAC,aAAa,CACd,SAAS,EACT,oFAAoF,CACrF,CAAC;YAEF,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,SAAS,CAAC,EAAE;gBACxC,WAAW,EAAE,OAAO;gBACpB,UAAU,EAAE,MAAM;gBAClB,aAAa,EAAE,MAAM;gBACrB,OAAO,EAAE,gBAAgB;gBACzB,SAAS,EAAE,EAAE;aACd,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAAE,OAAO;YAEvB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACxC,IAAI,MAAM,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC9B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACnF,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,gCAAgC,CAAC,CACzD,CAAC;QAEF,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAClC,IAAI,CAAC,SAAS,CACZ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EACjD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YAEF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACzC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE1C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAC3B,OAAO,EACP,cAAc,EACd,OAAO,EACP,aAAa,CACd,CAAC;YACF,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE/C,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EACtC,IAAI,CAAC,SAAS,CACZ,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAC/D,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YACF,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,EAC7C,IAAI,CAAC,SAAS,CACZ;gBACE,aAAa,EAAE,CAAC;gBAChB,EAAE,EAAE,mBAAmB;gBACvB,OAAO,EAAE,EAAE;gBACX,iBAAiB,EAAE,CAAC,GAAG,CAAC;aACzB,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YACF,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,EACpC,wEAAwE,CACzE,CAAC;YACF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,cAAc,CAAC,CAAC;YAErE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAChD,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,qCAAqC,CAAC,CAAC;YAEnE,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,SAAS,CAAC,EAAE;gBACxC,WAAW,EAAE,OAAO;gBACpB,UAAU,EAAE,MAAM;gBAClB,aAAa,EAAE,MAAM;gBACrB,OAAO,EAAE,mBAAmB;aAC7B,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAAE,OAAO;YAEvB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;YACvE,MAAM,CACJ,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,CACtC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,WAAW,CAClD,CACF,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,+BAA+B,CAAC,CACxD,CAAC;QAEF,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAClC,IAAI,CAAC,SAAS,CACZ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EACjD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YAEF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACzC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE1C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;YAC7D,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9D,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,EACjC,IAAI,CAAC,SAAS,CACZ,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EACxD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YACF,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAC/B,uEAAuE,CACxE,CAAC;YACF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,cAAc,CAAC,CAAC;YAChE,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,EAC3C,IAAI,CAAC,SAAS,CACZ;gBACE,SAAS,EAAE,kBAAkB;gBAC7B,KAAK,EAAE;oBACL;wBACE,OAAO,EAAE,yBAAyB;wBAClC,YAAY,EAAE,kBAAkB;wBAChC,OAAO,EAAE;4BACP;gCACE,OAAO,EAAE,MAAM;gCACf,mBAAmB,EACjB,gDAAgD;gCAClD,cAAc,EAAE,CAAC;gCACjB,gBAAgB,EAAE,yBAAyB;gCAC3C,qBAAqB,EAAE,kBAAkB;gCACzC,iBAAiB,EAAE,IAAI;6BACxB;yBACF;wBACD,UAAU,EAAE,EAAE;wBACd,MAAM,EAAE,EAAE;qBACX;iBACF;aACF,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YAEF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAChD,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,qCAAqC,CAAC,CAAC;YAEnE,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,SAAS,CAAC,EAAE;gBACxC,WAAW,EAAE,OAAO;gBACpB,UAAU,EAAE,MAAM;gBAClB,aAAa,EAAE,MAAM;gBACrB,OAAO,EAAE,YAAY;aACtB,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAAE,OAAO;YAEvB,MAAM,CACJ,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,2BAA2B,CAC/C,kBAAkB,EAClB,QAAQ,EACR,MAAM,EACN,CAAC,CACF,CACF,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,4BAA4B,CAAC,CACrD,CAAC;QAEF,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAClC,IAAI,CAAC,SAAS,CACZ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EACjD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YAEF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACzC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;YAC7D,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,EACjC,IAAI,CAAC,SAAS,CACZ,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EACxD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YACF,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BP,CACM,CAAC;YAEF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAChD,EAAE,CAAC,aAAa,CACd,SAAS,EACT;gBACE,0CAA0C;gBAC1C,oCAAoC;gBACpC,4BAA4B;gBAC5B,yCAAyC;gBACzC,gDAAgD;gBAChD,oDAAoD;gBACpD,yBAAyB;gBACzB,wDAAwD;gBACxD,mCAAmC;aACpC,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;YAEF,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,SAAS,CAAC,EAAE;gBACxC,WAAW,EAAE,OAAO;gBACpB,UAAU,EAAE,MAAM;gBAClB,aAAa,EAAE,MAAM;gBACrB,OAAO,EAAE,YAAY;aACtB,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,2BAA2B,CAAC,CACpD,CAAC;QAEF,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAClC,IAAI,CAAC,SAAS,CACZ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EACjD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YAEF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACzC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE1C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;YAC7D,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,EACjC,IAAI,CAAC,SAAS,CACZ,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EACxD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YACF,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAC/B,uEAAuE,CACxE,CAAC;YACF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,cAAc,CAAC,CAAC;YAChE,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,qBAAqB,CAAC,EACxC,IAAI,CAAC,SAAS,CACZ;gBACE,aAAa,EAAE,CAAC;gBAChB,EAAE,EAAE,YAAY;gBAChB,OAAO,EAAE,EAAE;gBACX,iBAAiB,EAAE,CAAC,GAAG,CAAC;gBACxB,cAAc,EAAE,KAAK;aACtB,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YAEF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAChD,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,uCAAuC,CAAC,CAAC;YAErE,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,SAAS,CAAC,EAAE;gBACxC,WAAW,EAAE,OAAO;gBACpB,UAAU,EAAE,MAAM;gBAClB,aAAa,EAAE,MAAM;gBACrB,OAAO,EAAE,YAAY;aACtB,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,MAAM,CAAC,EAAE;gBAAE,OAAO;YACtB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,CACJ,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAC3C,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CAC9D,CACF,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACnF,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,6BAA6B,CAAC,CACtD,CAAC;QAEF,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAClC,IAAI,CAAC,SAAS,CACZ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EACjD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YAEF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACzC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC;YACrE,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;YACpE,EAAE,CAAC,SAAS,CAAC,kBAAkB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,EACrC,IAAI,CAAC,SAAS,CACZ,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAC5D,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YACF,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,YAAY,CAAC,EAC3C;;;;;;;;;;CAUP,CACM,CAAC;YACF,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC,EACzC,cAAc,CACf,CAAC;YACF,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,yBAAyB,CAAC,EAChD,mCAAmC,CACpC,CAAC;YACF,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,uBAAuB,CAAC,EAC9C,cAAc,CACf,CAAC;YACF,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iCAAiC,CAAC,EACxD,0EAA0E,CAC3E,CAAC;YACF,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,+BAA+B,CAAC,EACtD,cAAc,CACf,CAAC;YAEF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAChD,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,sCAAsC,CAAC,CAAC;YAEpE,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,SAAS,CAAC,EAAE;gBACxC,WAAW,EAAE,OAAO;gBACpB,UAAU,EAAE,MAAM;gBAClB,aAAa,EAAE,MAAM;gBACrB,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -10,7 +10,7 @@ export declare const collectTsDiagnostics: (program: ts.Program) => DiagnosticsC
|
|
|
10
10
|
/**
|
|
11
11
|
* Convert TypeScript diagnostic to Tsonic diagnostic
|
|
12
12
|
*/
|
|
13
|
-
export declare const convertTsDiagnostic: (tsDiag: ts.Diagnostic) => Diagnostic | null;
|
|
13
|
+
export declare const convertTsDiagnostic: (tsDiag: ts.Diagnostic, checker?: ts.TypeChecker) => Diagnostic | null;
|
|
14
14
|
/**
|
|
15
15
|
* Get source location information from TypeScript source file
|
|
16
16
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/program/diagnostics.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EACL,UAAU,EACV,oBAAoB,EAIrB,MAAM,wBAAwB,CAAC;AAEhC;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,SAAS,EAAE,CAAC,OAAO,KAClB,
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/program/diagnostics.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EACL,UAAU,EACV,oBAAoB,EAIrB,MAAM,wBAAwB,CAAC;AAEhC;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,SAAS,EAAE,CAAC,OAAO,KAClB,oBAcF,CAAC;AAwDF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,EAAE,CAAC,UAAU,EACrB,UAAU,EAAE,CAAC,WAAW,KACvB,UAAU,GAAG,IAoDf,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,EAAE,CAAC,UAAU,EACnB,OAAO,MAAM,EACb,QAAQ,MAAM,KACb;IACD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CASzB,CAAC"}
|
|
@@ -7,6 +7,7 @@ import { createDiagnosticsCollector, addDiagnostic, createDiagnostic, } from "..
|
|
|
7
7
|
* Collect all TypeScript diagnostics from a program
|
|
8
8
|
*/
|
|
9
9
|
export const collectTsDiagnostics = (program) => {
|
|
10
|
+
const checker = program.getTypeChecker();
|
|
10
11
|
const tsDiagnostics = [
|
|
11
12
|
...program.getConfigFileParsingDiagnostics(),
|
|
12
13
|
...program.getOptionsDiagnostics(),
|
|
@@ -15,14 +16,51 @@ export const collectTsDiagnostics = (program) => {
|
|
|
15
16
|
...program.getSemanticDiagnostics(),
|
|
16
17
|
];
|
|
17
18
|
return tsDiagnostics.reduce((collector, tsDiag) => {
|
|
18
|
-
const diagnostic = convertTsDiagnostic(tsDiag);
|
|
19
|
+
const diagnostic = convertTsDiagnostic(tsDiag, checker);
|
|
19
20
|
return diagnostic ? addDiagnostic(collector, diagnostic) : collector;
|
|
20
21
|
}, createDiagnosticsCollector());
|
|
21
22
|
};
|
|
23
|
+
const findNodeAtPosition = (sourceFile, position) => {
|
|
24
|
+
const visit = (node) => {
|
|
25
|
+
if (position < node.getFullStart() || position >= node.getEnd()) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
const child = ts.forEachChild(node, visit);
|
|
29
|
+
return child ?? node;
|
|
30
|
+
};
|
|
31
|
+
return visit(sourceFile);
|
|
32
|
+
};
|
|
33
|
+
const isDictionaryLikeType = (checker, type) => checker.getIndexTypeOfType(type, ts.IndexKind.String) !== undefined ||
|
|
34
|
+
checker.getIndexTypeOfType(type, ts.IndexKind.Number) !== undefined;
|
|
35
|
+
const shouldIgnoreDictionaryPseudoMemberUnknownDiagnostic = (tsDiag, checker) => {
|
|
36
|
+
if (tsDiag.code !== 18046 || !tsDiag.file || tsDiag.start === undefined) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
const node = findNodeAtPosition(tsDiag.file, tsDiag.start);
|
|
40
|
+
if (!node || !ts.isIdentifier(node))
|
|
41
|
+
return false;
|
|
42
|
+
const symbol = checker.getSymbolAtLocation(node);
|
|
43
|
+
if (!symbol)
|
|
44
|
+
return false;
|
|
45
|
+
return (symbol.declarations ?? []).some((decl) => {
|
|
46
|
+
if (!ts.isVariableDeclaration(decl))
|
|
47
|
+
return false;
|
|
48
|
+
const initializer = decl.initializer;
|
|
49
|
+
if (!initializer || !ts.isPropertyAccessExpression(initializer)) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
if (initializer.name.text !== "Keys" &&
|
|
53
|
+
initializer.name.text !== "Values") {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
const receiverType = checker.getTypeAtLocation(initializer.expression);
|
|
57
|
+
return isDictionaryLikeType(checker, receiverType);
|
|
58
|
+
});
|
|
59
|
+
};
|
|
22
60
|
/**
|
|
23
61
|
* Convert TypeScript diagnostic to Tsonic diagnostic
|
|
24
62
|
*/
|
|
25
|
-
export const convertTsDiagnostic = (tsDiag) => {
|
|
63
|
+
export const convertTsDiagnostic = (tsDiag, checker) => {
|
|
26
64
|
if (tsDiag.category === ts.DiagnosticCategory.Suggestion) {
|
|
27
65
|
return null; // Ignore suggestions
|
|
28
66
|
}
|
|
@@ -39,6 +77,13 @@ export const convertTsDiagnostic = (tsDiag) => {
|
|
|
39
77
|
return null; // Ignore - will be handled by Tsonic
|
|
40
78
|
}
|
|
41
79
|
}
|
|
80
|
+
// Dictionary pseudo-members (`Record<K,V>.Keys` / `.Values`) are modeled
|
|
81
|
+
// by Tsonic. TS can type these as `unknown` (TS18046) because Record has a
|
|
82
|
+
// string index signature. Ignore only this targeted pattern.
|
|
83
|
+
if (checker &&
|
|
84
|
+
shouldIgnoreDictionaryPseudoMemberUnknownDiagnostic(tsDiag, checker)) {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
42
87
|
const severity = tsDiag.category === ts.DiagnosticCategory.Error
|
|
43
88
|
? "error"
|
|
44
89
|
: tsDiag.category === ts.DiagnosticCategory.Warning
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/program/diagnostics.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAGL,0BAA0B,EAC1B,aAAa,EACb,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAEhC;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,OAAmB,EACG,EAAE;IACxB,MAAM,aAAa,GAAG;QACpB,GAAG,OAAO,CAAC,+BAA+B,EAAE;QAC5C,GAAG,OAAO,CAAC,qBAAqB,EAAE;QAClC,GAAG,OAAO,CAAC,uBAAuB,EAAE;QACpC,GAAG,OAAO,CAAC,oBAAoB,EAAE;QACjC,GAAG,OAAO,CAAC,sBAAsB,EAAE;KACpC,CAAC;IAEF,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE;QAChD,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/program/diagnostics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.test.d.ts","sourceRoot":"","sources":["../../src/program/diagnostics.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { describe, it } from "mocha";
|
|
2
|
+
import { expect } from "chai";
|
|
3
|
+
import * as ts from "typescript";
|
|
4
|
+
import { collectTsDiagnostics } from "./diagnostics.js";
|
|
5
|
+
const collectMessages = (source) => {
|
|
6
|
+
const fileName = "/test/input.ts";
|
|
7
|
+
const sourceFile = ts.createSourceFile(fileName, source, ts.ScriptTarget.ES2022, true, ts.ScriptKind.TS);
|
|
8
|
+
const options = {
|
|
9
|
+
target: ts.ScriptTarget.ES2022,
|
|
10
|
+
module: ts.ModuleKind.ES2022,
|
|
11
|
+
strict: true,
|
|
12
|
+
skipLibCheck: true,
|
|
13
|
+
};
|
|
14
|
+
const host = ts.createCompilerHost(options);
|
|
15
|
+
const originalGetSourceFile = host.getSourceFile;
|
|
16
|
+
host.getSourceFile = (name, languageVersionOrOptions, onError, shouldCreateNewSourceFile) => {
|
|
17
|
+
if (name === fileName)
|
|
18
|
+
return sourceFile;
|
|
19
|
+
return originalGetSourceFile.call(host, name, languageVersionOrOptions, onError, shouldCreateNewSourceFile);
|
|
20
|
+
};
|
|
21
|
+
const program = ts.createProgram([fileName], options, host);
|
|
22
|
+
return collectTsDiagnostics(program).diagnostics.map((d) => d.message);
|
|
23
|
+
};
|
|
24
|
+
describe("TypeScript Diagnostics Conversion", () => {
|
|
25
|
+
it("ignores TS18046 for Record.Keys pseudo-member flows", () => {
|
|
26
|
+
const messages = collectMessages(`
|
|
27
|
+
function f(settings: Record<string, unknown>) {
|
|
28
|
+
const settingsKeys = settings.Keys;
|
|
29
|
+
for (let i = 0; i < settingsKeys.Length; i++) {
|
|
30
|
+
const key = settingsKeys[i];
|
|
31
|
+
void key;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
`);
|
|
35
|
+
expect(messages.some((m) => m.includes("is of type 'unknown'"))).to.equal(false);
|
|
36
|
+
});
|
|
37
|
+
it("ignores TS18046 for Record.Values pseudo-member flows", () => {
|
|
38
|
+
const messages = collectMessages(`
|
|
39
|
+
function f(settings: Record<string, unknown>) {
|
|
40
|
+
const values = settings.Values;
|
|
41
|
+
for (let i = 0; i < values.Length; i++) {
|
|
42
|
+
void values[i];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
`);
|
|
46
|
+
expect(messages.some((m) => m.includes("is of type 'unknown'"))).to.equal(false);
|
|
47
|
+
});
|
|
48
|
+
it("does not ignore unrelated TS18046 unknown diagnostics", () => {
|
|
49
|
+
const messages = collectMessages(`
|
|
50
|
+
function f(value: unknown) {
|
|
51
|
+
const copy = value;
|
|
52
|
+
return copy.toString();
|
|
53
|
+
}
|
|
54
|
+
`);
|
|
55
|
+
expect(messages.some((m) => m.includes("is of type 'unknown'"))).to.equal(true);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=diagnostics.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.test.js","sourceRoot":"","sources":["../../src/program/diagnostics.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,eAAe,GAAG,CAAC,MAAc,EAAqB,EAAE;IAC5D,MAAM,QAAQ,GAAG,gBAAgB,CAAC;IAClC,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CACpC,QAAQ,EACR,MAAM,EACN,EAAE,CAAC,YAAY,CAAC,MAAM,EACtB,IAAI,EACJ,EAAE,CAAC,UAAU,CAAC,EAAE,CACjB,CAAC;IAEF,MAAM,OAAO,GAAuB;QAClC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM;QAC9B,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM;QAC5B,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE,IAAI;KACnB,CAAC;IACF,MAAM,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC;IACjD,IAAI,CAAC,aAAa,GAAG,CACnB,IAAY,EACZ,wBAAsE,EACtE,OAAmC,EACnC,yBAAmC,EACnC,EAAE;QACF,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,UAAU,CAAC;QACzC,OAAO,qBAAqB,CAAC,IAAI,CAC/B,IAAI,EACJ,IAAI,EACJ,wBAAwB,EACxB,OAAO,EACP,yBAAyB,CAC1B,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5D,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACzE,CAAC,CAAC;AAEF,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IACjD,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,QAAQ,GAAG,eAAe,CAAC;;;;;;;;KAQhC,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CACvE,KAAK,CACN,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,QAAQ,GAAG,eAAe,CAAC;;;;;;;KAOhC,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CACvE,KAAK,CACN,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,QAAQ,GAAG,eAAe,CAAC;;;;;KAKhC,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CACvE,IAAI,CACL,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/program/metadata.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EACL,sBAAsB,EAEvB,MAAM,uBAAuB,CAAC;AAyB/B;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAC7B,WAAW,SAAS,MAAM,EAAE,KAC3B,
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/program/metadata.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EACL,sBAAsB,EAEvB,MAAM,uBAAuB,CAAC;AAyB/B;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAC7B,WAAW,SAAS,MAAM,EAAE,KAC3B,sBAiCF,CAAC"}
|
package/dist/program/metadata.js
CHANGED
|
@@ -39,8 +39,14 @@ export const loadDotnetMetadata = (typeRoots) => {
|
|
|
39
39
|
for (const bindingsPath of bindingsFiles) {
|
|
40
40
|
try {
|
|
41
41
|
const content = fs.readFileSync(bindingsPath, "utf-8");
|
|
42
|
-
const
|
|
43
|
-
|
|
42
|
+
const parsed = JSON.parse(content);
|
|
43
|
+
if (parsed &&
|
|
44
|
+
typeof parsed === "object" &&
|
|
45
|
+
typeof parsed.namespace ===
|
|
46
|
+
"string" &&
|
|
47
|
+
Array.isArray(parsed.types)) {
|
|
48
|
+
registry.loadBindingsFile(bindingsPath, parsed);
|
|
49
|
+
}
|
|
44
50
|
}
|
|
45
51
|
catch (err) {
|
|
46
52
|
// Silently skip files that can't be read or parsed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/program/metadata.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,sBAAsB,GAEvB,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,MAAM,oBAAoB,GAAG,CAAC,GAAW,EAAqB,EAAE;IAC9D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClD,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,SAA4B,EACJ,EAAE;IAC1B,MAAM,QAAQ,GAAG,IAAI,sBAAsB,EAAE,CAAC;IAE9C,kDAAkD;IAClD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,aAAa,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;QAEzD,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;YACzC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;gBACvD,MAAM,
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/program/metadata.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,sBAAsB,GAEvB,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,MAAM,oBAAoB,GAAG,CAAC,GAAW,EAAqB,EAAE;IAC9D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClD,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,SAA4B,EACJ,EAAE;IAC1B,MAAM,QAAQ,GAAG,IAAI,sBAAsB,EAAE,CAAC;IAE9C,kDAAkD;IAClD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,aAAa,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;QAEzD,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;YACzC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;gBACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAC;gBAC9C,IACE,MAAM;oBACN,OAAO,MAAM,KAAK,QAAQ;oBAC1B,OAAQ,MAA2C,CAAC,SAAS;wBAC3D,QAAQ;oBACV,KAAK,CAAC,OAAO,CAAE,MAAuC,CAAC,KAAK,CAAC,EAC7D,CAAC;oBACD,QAAQ,CAAC,gBAAgB,CACvB,YAAY,EACZ,MAA+B,CAChC,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,mDAAmD;gBACnD,4DAA4D;gBAC5D,OAAO,CAAC,IAAI,CAAC,gCAAgC,YAAY,GAAG,EAAE,GAAG,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC"}
|
package/dist/program/types.d.ts
CHANGED
|
@@ -6,10 +6,12 @@ import { DotnetMetadataRegistry } from "../dotnet-metadata.js";
|
|
|
6
6
|
import { BindingRegistry } from "./bindings.js";
|
|
7
7
|
import { ClrBindingsResolver } from "../resolver/clr-bindings-resolver.js";
|
|
8
8
|
import type { Binding } from "../ir/binding/index.js";
|
|
9
|
+
export type SurfaceMode = string;
|
|
9
10
|
export type CompilerOptions = {
|
|
10
11
|
readonly projectRoot: string;
|
|
11
12
|
readonly sourceRoot: string;
|
|
12
13
|
readonly rootNamespace: string;
|
|
14
|
+
readonly surface?: SurfaceMode;
|
|
13
15
|
readonly strict?: boolean;
|
|
14
16
|
readonly typeRoots?: readonly string[];
|
|
15
17
|
readonly verbose?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/program/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;IAC/C,qEAAqE;IACrE,QAAQ,CAAC,sBAAsB,EAAE,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;IAC1D,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,mEAAmE;IACnE,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;IAC1C,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/program/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;IAC/C,qEAAqE;IACrE,QAAQ,CAAC,sBAAsB,EAAE,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;IAC1D,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,mEAAmE;IACnE,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;IAC1C,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clr-bindings-resolver.d.ts","sourceRoot":"","sources":["../../src/resolver/clr-bindings-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB;IACE,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC,GACD;IACE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB,CAAC;AAUN;;;;;;;;GAQG;AACH,qBAAa,mBAAmB;IAE9B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoC;IAGjE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA8B;IAGlE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoC;IAGnE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoC;IAGlE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoC;IAGtE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAE3D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmC;gBAEvD,OAAO,EAAE,MAAM;IAM3B;;OAEG;IACH,OAAO,CAAC,eAAe,EAAE,MAAM,GAAG,iBAAiB;IA2EnD,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,iBAAiB;IA+CzB,OAAO,CAAC,0BAA0B;IA2ClC;;;;;;;;OAQG;IACH,OAAO,CAAC,oBAAoB;IAoB5B;;;;;OAKG;IACH,OAAO,CAAC,cAAc;
|
|
1
|
+
{"version":3,"file":"clr-bindings-resolver.d.ts","sourceRoot":"","sources":["../../src/resolver/clr-bindings-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB;IACE,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC,GACD;IACE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB,CAAC;AAUN;;;;;;;;GAQG;AACH,qBAAa,mBAAmB;IAE9B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoC;IAGjE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA8B;IAGlE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoC;IAGnE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoC;IAGlE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoC;IAGtE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAE3D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmC;gBAEvD,OAAO,EAAE,MAAM;IAM3B;;OAEG;IACH,OAAO,CAAC,eAAe,EAAE,MAAM,GAAG,iBAAiB;IA2EnD,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,iBAAiB;IA+CzB,OAAO,CAAC,0BAA0B;IA2ClC;;;;;;;;OAQG;IACH,OAAO,CAAC,oBAAoB;IAoB5B;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAkItB;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,uBAAuB;IAY/B;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAiCxB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAsCvB;;OAEG;IACH,yBAAyB,IAAI,WAAW,CAAC,MAAM,CAAC;CASjD;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,GACpC,YAAY,MAAM,KACjB,mBAEF,CAAC"}
|