@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.
Files changed (144) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/dependency-graph.d.ts +1 -1
  3. package/dist/dependency-graph.d.ts.map +1 -1
  4. package/dist/dependency-graph.js +1 -1
  5. package/dist/dependency-graph.js.map +1 -1
  6. package/dist/graph/extraction/imports.d.ts +0 -5
  7. package/dist/graph/extraction/imports.d.ts.map +1 -1
  8. package/dist/graph/extraction/imports.js +4 -31
  9. package/dist/graph/extraction/imports.js.map +1 -1
  10. package/dist/graph/extraction/index.d.ts +1 -1
  11. package/dist/graph/extraction/index.d.ts.map +1 -1
  12. package/dist/graph/extraction/index.js +1 -1
  13. package/dist/graph/extraction/index.js.map +1 -1
  14. package/dist/graph/extraction/orchestrator.d.ts.map +1 -1
  15. package/dist/graph/extraction/orchestrator.js +1 -7
  16. package/dist/graph/extraction/orchestrator.js.map +1 -1
  17. package/dist/graph/extraction.d.ts +1 -1
  18. package/dist/graph/extraction.d.ts.map +1 -1
  19. package/dist/graph/extraction.js +1 -1
  20. package/dist/graph/extraction.js.map +1 -1
  21. package/dist/ir/binding/binding-types.d.ts +2 -2
  22. package/dist/ir/binding/binding-types.d.ts.map +1 -1
  23. package/dist/ir/binding-resolution.test.js +224 -0
  24. package/dist/ir/binding-resolution.test.js.map +1 -1
  25. package/dist/ir/bindings-disambiguation.test.js +149 -0
  26. package/dist/ir/bindings-disambiguation.test.js.map +1 -1
  27. package/dist/ir/builder/imports.d.ts.map +1 -1
  28. package/dist/ir/builder/imports.js +7 -4
  29. package/dist/ir/builder/imports.js.map +1 -1
  30. package/dist/ir/builder.test.js +193 -0
  31. package/dist/ir/builder.test.js.map +1 -1
  32. package/dist/ir/converters/expressions/access/binding-resolution.d.ts.map +1 -1
  33. package/dist/ir/converters/expressions/access/binding-resolution.js +55 -14
  34. package/dist/ir/converters/expressions/access/binding-resolution.js.map +1 -1
  35. package/dist/ir/converters/expressions/access/member-resolution.d.ts.map +1 -1
  36. package/dist/ir/converters/expressions/access/member-resolution.js +5 -0
  37. package/dist/ir/converters/expressions/access/member-resolution.js.map +1 -1
  38. package/dist/ir/converters/expressions/calls/call-converter.js +3 -3
  39. package/dist/ir/converters/expressions/calls/call-converter.js.map +1 -1
  40. package/dist/ir/program-context.d.ts +5 -0
  41. package/dist/ir/program-context.d.ts.map +1 -1
  42. package/dist/ir/program-context.js +1 -0
  43. package/dist/ir/program-context.js.map +1 -1
  44. package/dist/ir/type-system/internal/type-converter/orchestrator.d.ts.map +1 -1
  45. package/dist/ir/type-system/internal/type-converter/orchestrator.js +12 -5
  46. package/dist/ir/type-system/internal/type-converter/orchestrator.js.map +1 -1
  47. package/dist/ir/type-system/internal/type-converter/references.d.ts.map +1 -1
  48. package/dist/ir/type-system/internal/type-converter/references.js +6 -9
  49. package/dist/ir/type-system/internal/type-converter/references.js.map +1 -1
  50. package/dist/ir/type-system/internal/universe/clr-type-parser.d.ts.map +1 -1
  51. package/dist/ir/type-system/internal/universe/clr-type-parser.js +66 -0
  52. package/dist/ir/type-system/internal/universe/clr-type-parser.js.map +1 -1
  53. package/dist/ir/type-system/internal/universe/clr-type-parser.test.d.ts +2 -0
  54. package/dist/ir/type-system/internal/universe/clr-type-parser.test.d.ts.map +1 -0
  55. package/dist/ir/type-system/internal/universe/clr-type-parser.test.js +55 -0
  56. package/dist/ir/type-system/internal/universe/clr-type-parser.test.js.map +1 -0
  57. package/dist/ir/type-system/type-system-call-resolution.d.ts.map +1 -1
  58. package/dist/ir/type-system/type-system-call-resolution.js +109 -3
  59. package/dist/ir/type-system/type-system-call-resolution.js.map +1 -1
  60. package/dist/ir/type-system/type-system-inference.d.ts.map +1 -1
  61. package/dist/ir/type-system/type-system-inference.js +38 -0
  62. package/dist/ir/type-system/type-system-inference.js.map +1 -1
  63. package/dist/ir/type-system/type-system-state.d.ts.map +1 -1
  64. package/dist/ir/type-system/type-system-state.js +33 -17
  65. package/dist/ir/type-system/type-system-state.js.map +1 -1
  66. package/dist/ir/type-system/type-system.d.ts.map +1 -1
  67. package/dist/ir/type-system/type-system.js.map +1 -1
  68. package/dist/ir/validation/anonymous-type-lowering-pass.d.ts.map +1 -1
  69. package/dist/ir/validation/anonymous-type-lowering-pass.js +34 -0
  70. package/dist/ir/validation/anonymous-type-lowering-pass.js.map +1 -1
  71. package/dist/ir/validation/anonymous-type-lowering-regressions.test.d.ts +2 -0
  72. package/dist/ir/validation/anonymous-type-lowering-regressions.test.d.ts.map +1 -0
  73. package/dist/ir/validation/anonymous-type-lowering-regressions.test.js +121 -0
  74. package/dist/ir/validation/anonymous-type-lowering-regressions.test.js.map +1 -0
  75. package/dist/ir/validation/numeric-invariants.test.js +29 -0
  76. package/dist/ir/validation/numeric-invariants.test.js.map +1 -1
  77. package/dist/ir/validation/numeric-proof-pass.d.ts.map +1 -1
  78. package/dist/ir/validation/numeric-proof-pass.js +21 -0
  79. package/dist/ir/validation/numeric-proof-pass.js.map +1 -1
  80. package/dist/program/binding-loader.d.ts +3 -3
  81. package/dist/program/binding-loader.d.ts.map +1 -1
  82. package/dist/program/binding-loader.js +47 -23
  83. package/dist/program/binding-loader.js.map +1 -1
  84. package/dist/program/binding-registry.d.ts +7 -0
  85. package/dist/program/binding-registry.d.ts.map +1 -1
  86. package/dist/program/binding-registry.js +52 -1
  87. package/dist/program/binding-registry.js.map +1 -1
  88. package/dist/program/bindings.test.js +168 -0
  89. package/dist/program/bindings.test.js.map +1 -1
  90. package/dist/program/creation.d.ts.map +1 -1
  91. package/dist/program/creation.js +337 -77
  92. package/dist/program/creation.js.map +1 -1
  93. package/dist/program/creation.test.js +312 -1
  94. package/dist/program/creation.test.js.map +1 -1
  95. package/dist/program/diagnostics.d.ts +1 -1
  96. package/dist/program/diagnostics.d.ts.map +1 -1
  97. package/dist/program/diagnostics.js +47 -2
  98. package/dist/program/diagnostics.js.map +1 -1
  99. package/dist/program/diagnostics.test.d.ts +2 -0
  100. package/dist/program/diagnostics.test.d.ts.map +1 -0
  101. package/dist/program/diagnostics.test.js +58 -0
  102. package/dist/program/diagnostics.test.js.map +1 -0
  103. package/dist/program/metadata.d.ts.map +1 -1
  104. package/dist/program/metadata.js +8 -2
  105. package/dist/program/metadata.js.map +1 -1
  106. package/dist/program/types.d.ts +2 -0
  107. package/dist/program/types.d.ts.map +1 -1
  108. package/dist/resolver/clr-bindings-resolver.d.ts.map +1 -1
  109. package/dist/resolver/clr-bindings-resolver.js +42 -4
  110. package/dist/resolver/clr-bindings-resolver.js.map +1 -1
  111. package/dist/resolver/import-resolution.d.ts.map +1 -1
  112. package/dist/resolver/import-resolution.js +6 -5
  113. package/dist/resolver/import-resolution.js.map +1 -1
  114. package/dist/resolver.test.js +75 -0
  115. package/dist/resolver.test.js.map +1 -1
  116. package/dist/surface/profiles.d.ts +13 -0
  117. package/dist/surface/profiles.d.ts.map +1 -0
  118. package/dist/surface/profiles.js +214 -0
  119. package/dist/surface/profiles.js.map +1 -0
  120. package/dist/surface/profiles.test.d.ts +2 -0
  121. package/dist/surface/profiles.test.d.ts.map +1 -0
  122. package/dist/surface/profiles.test.js +125 -0
  123. package/dist/surface/profiles.test.js.map +1 -0
  124. package/dist/validation/features.d.ts.map +1 -1
  125. package/dist/validation/features.js +1 -23
  126. package/dist/validation/features.js.map +1 -1
  127. package/dist/validation/features.test.js +4 -4
  128. package/dist/validation/features.test.js.map +1 -1
  129. package/dist/validation/imports.d.ts.map +1 -1
  130. package/dist/validation/imports.js +19 -5
  131. package/dist/validation/imports.js.map +1 -1
  132. package/dist/validation/imports.test.js +112 -5
  133. package/dist/validation/imports.test.js.map +1 -1
  134. package/dist/validator.maximus.test.js +4 -5
  135. package/dist/validator.maximus.test.js.map +1 -1
  136. package/package.json +2 -2
  137. package/dist/ir/converters/context.d.ts +0 -40
  138. package/dist/ir/converters/context.d.ts.map +0 -1
  139. package/dist/ir/converters/context.js +0 -25
  140. package/dist/ir/converters/context.js.map +0 -1
  141. package/dist/validation/unsupported-utility-types.d.ts +0 -40
  142. package/dist/validation/unsupported-utility-types.d.ts.map +0 -1
  143. package/dist/validation/unsupported-utility-types.js +0 -43
  144. 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":"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"}
@@ -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,oBAaF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,EAAE,CAAC,UAAU,KACpB,UAAU,GAAG,IA0Cf,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"}
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":"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"}
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,OAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IACzC,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,EAAE,OAAO,CAAC,CAAC;QACxD,OAAO,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,CAAC,EAAE,0BAA0B,EAAE,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CACzB,UAAyB,EACzB,QAAgB,EACK,EAAE;IACvB,MAAM,KAAK,GAAG,CAAC,IAAa,EAAuB,EAAE;QACnD,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAChE,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO,KAAK,IAAI,IAAI,CAAC;IACvB,CAAC,CAAC;IACF,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAC3B,OAAuB,EACvB,IAAa,EACJ,EAAE,CACX,OAAO,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,SAAS;IACnE,OAAO,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;AAEtE,MAAM,mDAAmD,GAAG,CAC1D,MAAqB,EACrB,OAAuB,EACd,EAAE;IACX,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACxE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3D,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAElD,MAAM,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAE1B,OAAO,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QAC/C,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC,0BAA0B,CAAC,WAAW,CAAC,EAAE,CAAC;YAChE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IACE,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM;YAChC,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,EAClC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACvE,OAAO,oBAAoB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,MAAqB,EACrB,OAAwB,EACL,EAAE;IACrB,IAAI,MAAM,CAAC,QAAQ,KAAK,EAAE,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC;QACzD,OAAO,IAAI,CAAC,CAAC,qBAAqB;IACpC,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,4BAA4B,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAE1E,oDAAoD;IACpD,2CAA2C;IAC3C,IACE,OAAO,CAAC,QAAQ,CAAC,qDAAqD,CAAC;QACvE,MAAM,CAAC,IAAI,EACX,CAAC;QACD,iCAAiC;QACjC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACzC,IACE,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC;YACnC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACtC,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,EACpC,CAAC;YACD,OAAO,IAAI,CAAC,CAAC,qCAAqC;QACpD,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,2EAA2E;IAC3E,6DAA6D;IAC7D,IACE,OAAO;QACP,mDAAmD,CAAC,MAAM,EAAE,OAAO,CAAC,EACpE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GACZ,MAAM,CAAC,QAAQ,KAAK,EAAE,CAAC,kBAAkB,CAAC,KAAK;QAC7C,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,EAAE,CAAC,kBAAkB,CAAC,OAAO;YACjD,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,MAAM,CAAC;IAEf,MAAM,QAAQ,GACZ,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;QACvC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QAClE,CAAC,CAAC,SAAS,CAAC;IAEhB,OAAO,gBAAgB,CACrB,SAAS,EAAE,2BAA2B;IACtC,QAAQ,EACR,OAAO,EACP,QAAQ,CACT,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,IAAmB,EACnB,KAAa,EACb,MAAc,EAMd,EAAE;IACF,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC;IACtE,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,QAAQ;QACnB,IAAI,EAAE,IAAI,GAAG,CAAC;QACd,MAAM,EAAE,SAAS,GAAG,CAAC;QACrB,MAAM;KACP,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=diagnostics.test.d.ts.map
@@ -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,sBAsBF,CAAC"}
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"}
@@ -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 bindingsFile = JSON.parse(content);
43
- registry.loadBindingsFile(bindingsPath, bindingsFile);
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,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA0B,CAAC;gBAClE,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YACxD,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"}
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"}
@@ -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;IAuFtB;;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"}
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"}