@typespec/compiler 1.2.0-dev.4 → 1.2.0-dev.6

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 (45) hide show
  1. package/dist/manifest.js +2 -2
  2. package/dist/src/testing/fourslash.d.ts +16 -0
  3. package/dist/src/testing/fourslash.d.ts.map +1 -0
  4. package/dist/src/testing/fourslash.js +17 -0
  5. package/dist/src/testing/fourslash.js.map +1 -0
  6. package/dist/src/testing/fs.d.ts +12 -0
  7. package/dist/src/testing/fs.d.ts.map +1 -0
  8. package/dist/src/testing/fs.js +133 -0
  9. package/dist/src/testing/fs.js.map +1 -0
  10. package/dist/src/testing/index.d.ts +9 -2
  11. package/dist/src/testing/index.d.ts.map +1 -1
  12. package/dist/src/testing/index.js +7 -1
  13. package/dist/src/testing/index.js.map +1 -1
  14. package/dist/src/testing/marked-template.d.ts +96 -0
  15. package/dist/src/testing/marked-template.d.ts.map +1 -0
  16. package/dist/src/testing/marked-template.js +107 -0
  17. package/dist/src/testing/marked-template.js.map +1 -0
  18. package/dist/src/testing/rule-tester.d.ts +2 -2
  19. package/dist/src/testing/rule-tester.d.ts.map +1 -1
  20. package/dist/src/testing/rule-tester.js +2 -1
  21. package/dist/src/testing/rule-tester.js.map +1 -1
  22. package/dist/src/testing/test-compiler-host.d.ts +11 -0
  23. package/dist/src/testing/test-compiler-host.d.ts.map +1 -0
  24. package/dist/src/testing/test-compiler-host.js +138 -0
  25. package/dist/src/testing/test-compiler-host.js.map +1 -0
  26. package/dist/src/testing/test-host.d.ts +3 -9
  27. package/dist/src/testing/test-host.d.ts.map +1 -1
  28. package/dist/src/testing/test-host.js +6 -218
  29. package/dist/src/testing/test-host.js.map +1 -1
  30. package/dist/src/testing/test-server-host.d.ts +1 -1
  31. package/dist/src/testing/test-server-host.d.ts.map +1 -1
  32. package/dist/src/testing/test-server-host.js +2 -1
  33. package/dist/src/testing/test-server-host.js.map +1 -1
  34. package/dist/src/testing/tester.d.ts +12 -0
  35. package/dist/src/testing/tester.d.ts.map +1 -0
  36. package/dist/src/testing/tester.js +339 -0
  37. package/dist/src/testing/tester.js.map +1 -0
  38. package/dist/src/testing/types.d.ts +146 -3
  39. package/dist/src/testing/types.d.ts.map +1 -1
  40. package/dist/src/testing/types.js +1 -0
  41. package/dist/src/testing/types.js.map +1 -1
  42. package/dist/src/typekit/kits/literal.d.ts.map +1 -1
  43. package/dist/src/typekit/kits/literal.js +4 -25
  44. package/dist/src/typekit/kits/literal.js.map +1 -1
  45. package/package.json +1 -1
@@ -0,0 +1,339 @@
1
+ import { readFile, realpath } from "fs/promises";
2
+ import { pathToFileURL } from "url";
3
+ import { compilerAssert } from "../core/diagnostics.js";
4
+ import { getEntityName } from "../core/helpers/type-name-utils.js";
5
+ import { NodeHost } from "../core/node-host.js";
6
+ import { getIdentifierContext, getNodeAtPosition } from "../core/parser.js";
7
+ import { getRelativePathFromDirectory, joinPaths, resolvePath } from "../core/path-utils.js";
8
+ import { compile as coreCompile } from "../core/program.js";
9
+ import { createSourceLoader } from "../core/source-loader.js";
10
+ import { NoTarget } from "../core/types.js";
11
+ import { resolveModule } from "../module-resolver/module-resolver.js";
12
+ import { expectDiagnosticEmpty } from "./expect.js";
13
+ import { extractMarkers } from "./fourslash.js";
14
+ import { createTestFileSystem } from "./fs.js";
15
+ import { TemplateWithMarkers } from "./marked-template.js";
16
+ import { StandardTestLibrary, addTestLib } from "./test-compiler-host.js";
17
+ import { resolveVirtualPath } from "./test-utils.js";
18
+ export function createTester(base, options) {
19
+ return createTesterInternal({
20
+ fs: once(() => createTesterFs(base, options)),
21
+ libraries: options.libraries,
22
+ });
23
+ }
24
+ function once(fn) {
25
+ let load;
26
+ return () => {
27
+ if (load)
28
+ return load;
29
+ load = fn();
30
+ return load;
31
+ };
32
+ }
33
+ async function createTesterFs(base, options) {
34
+ const fs = createTestFileSystem();
35
+ const host = {
36
+ ...NodeHost,
37
+ // We want to keep the original path in the file map but we do still want to resolve the full path when loading JS to prevent duplicate imports.
38
+ realpath: async (x) => x,
39
+ getJsImport: async (path) => {
40
+ return await import(pathToFileURL(await realpath(path)).href);
41
+ },
42
+ };
43
+ const sl = await createSourceLoader(host);
44
+ const selfName = JSON.parse(await readFile(resolvePath(base, "package.json"), "utf8")).name;
45
+ for (const lib of options.libraries) {
46
+ await sl.importPath(lib, NoTarget, base);
47
+ const resolved = await resolveModule({
48
+ realpath: async (x) => x,
49
+ stat: NodeHost.stat,
50
+ readFile: async (path) => {
51
+ const file = await NodeHost.readFile(path);
52
+ return file.text;
53
+ },
54
+ }, lib, { baseDir: base, conditions: ["import", "default"] });
55
+ if (resolved.type === "module") {
56
+ const virtualPath = computeRelativePath(lib, resolved.mainFile);
57
+ fs.addJsFile(virtualPath, host.getJsImport(resolved.mainFile));
58
+ }
59
+ }
60
+ await fs.addTypeSpecLibrary(StandardTestLibrary);
61
+ function computeVirtualPath(file) {
62
+ const context = sl.resolution.locationContexts.get(file);
63
+ compilerAssert(context?.type === "library", `Unexpected: all source files should be in a library but ${file.path} was in '${context?.type}'`);
64
+ return computeRelativePath(context.metadata.name, file.path);
65
+ }
66
+ function computeRelativePath(libName, realPath) {
67
+ const relativePath = getRelativePathFromDirectory(base, realPath, false);
68
+ if (libName === selfName) {
69
+ return joinPaths("node_modules", selfName, relativePath);
70
+ }
71
+ else {
72
+ return relativePath;
73
+ }
74
+ }
75
+ for (const file of sl.resolution.sourceFiles.values()) {
76
+ const relativePath = computeVirtualPath(file.file);
77
+ fs.add(resolveVirtualPath(relativePath), file.file.text);
78
+ }
79
+ for (const file of sl.resolution.jsSourceFiles.values()) {
80
+ const relativePath = computeVirtualPath(file.file);
81
+ fs.addJsFile(resolveVirtualPath(relativePath), file.esmExports);
82
+ }
83
+ for (const [path, lib] of sl.resolution.loadedLibraries) {
84
+ fs.add(resolvePath("node_modules", path, "package.json"), lib.manifest.file.text);
85
+ }
86
+ fs.freeze();
87
+ return fs;
88
+ }
89
+ function createTesterBuilder(params, create) {
90
+ return {
91
+ files,
92
+ wrap,
93
+ importLibraries,
94
+ import: importFn,
95
+ using,
96
+ };
97
+ function files(files) {
98
+ const fs = async () => {
99
+ const fs = (await params.fs()).clone();
100
+ for (const [name, value] of Object.entries(files)) {
101
+ fs.add(name, value);
102
+ }
103
+ fs.freeze();
104
+ return fs;
105
+ };
106
+ return create({
107
+ ...params,
108
+ fs,
109
+ });
110
+ }
111
+ function wrap(fn) {
112
+ return create({
113
+ ...params,
114
+ wraps: [...(params.wraps ?? []), fn],
115
+ });
116
+ }
117
+ function importLibraries() {
118
+ return create({
119
+ ...params,
120
+ imports: [...(params.imports ?? []), ...params.libraries],
121
+ });
122
+ }
123
+ function importFn(...imports) {
124
+ return create({
125
+ ...params,
126
+ imports: [...(params.imports ?? []), ...imports],
127
+ });
128
+ }
129
+ function using(...usings) {
130
+ return create({
131
+ ...params,
132
+ usings: [...(params.usings ?? []), ...usings],
133
+ });
134
+ }
135
+ }
136
+ function createTesterInternal(params) {
137
+ return {
138
+ ...createCompilable(async (...args) => {
139
+ const instance = await createTesterInstance(params);
140
+ return instance.compileAndDiagnose(...args);
141
+ }),
142
+ ...createTesterBuilder(params, createTesterInternal),
143
+ emit,
144
+ createInstance,
145
+ };
146
+ function emit(emitter, options) {
147
+ return createEmitterTesterInternal({
148
+ ...params,
149
+ emitter,
150
+ compilerOptions: options
151
+ ? {
152
+ ...params.compilerOptions,
153
+ options: {
154
+ ...params.compilerOptions?.options,
155
+ [emitter]: options,
156
+ },
157
+ }
158
+ : params.compilerOptions,
159
+ });
160
+ }
161
+ function createInstance() {
162
+ return createTesterInstance(params);
163
+ }
164
+ }
165
+ function createEmitterTesterInternal(params) {
166
+ return {
167
+ ...createCompilable(async (...args) => {
168
+ const instance = await createEmitterTesterInstance(params);
169
+ return instance.compileAndDiagnose(...args);
170
+ }),
171
+ ...createTesterBuilder(params, createEmitterTesterInternal),
172
+ pipe: (cb) => {
173
+ return createEmitterTesterInternal({
174
+ ...params,
175
+ outputProcess: async (result) => {
176
+ return params.outputProcess ? cb(params.outputProcess(result)) : cb(result);
177
+ },
178
+ });
179
+ },
180
+ createInstance: () => createEmitterTesterInstance(params),
181
+ };
182
+ }
183
+ async function createEmitterTesterInstance(params) {
184
+ const tester = await createTesterInstance(params);
185
+ return {
186
+ fs: tester.fs,
187
+ ...createCompilable(compileAndDiagnose),
188
+ get program() {
189
+ return tester.program;
190
+ },
191
+ };
192
+ async function compileAndDiagnose(code, options) {
193
+ if (options?.compilerOptions?.emit !== undefined) {
194
+ throw new Error("Cannot set emit in options.");
195
+ }
196
+ const resolvedOptions = {
197
+ ...options,
198
+ compilerOptions: {
199
+ ...params.compilerOptions,
200
+ ...options?.compilerOptions,
201
+ outputDir: "tsp-output",
202
+ emit: [params.emitter],
203
+ },
204
+ };
205
+ const [result, diagnostics] = await tester.compileAndDiagnose(code, resolvedOptions);
206
+ const outputs = {};
207
+ const outputDir = resolvedOptions.compilerOptions?.options?.[params.emitter]?.["emitter-output-dir"] ??
208
+ resolveVirtualPath(resolvePath("tsp-output", params.emitter));
209
+ for (const [name, value] of result.fs.fs) {
210
+ if (name.startsWith(outputDir)) {
211
+ const relativePath = name.slice(outputDir.length + 1);
212
+ outputs[relativePath] = value;
213
+ }
214
+ }
215
+ const prep = {
216
+ ...result,
217
+ outputs,
218
+ };
219
+ const final = params.outputProcess ? params.outputProcess(prep) : prep;
220
+ return [final, diagnostics];
221
+ }
222
+ }
223
+ async function createTesterInstance(params) {
224
+ let savedProgram;
225
+ const fs = (await params.fs()).clone();
226
+ return {
227
+ ...createCompilable(compileAndDiagnose),
228
+ fs,
229
+ get program() {
230
+ if (!savedProgram) {
231
+ throw new Error("Program not initialized. Call compile first.");
232
+ }
233
+ return savedProgram;
234
+ },
235
+ };
236
+ function applyWraps(code, wraps) {
237
+ for (const wrap of wraps) {
238
+ code = wrap(code);
239
+ }
240
+ return code;
241
+ }
242
+ function addCode(fs, code) {
243
+ const markerPositions = [];
244
+ const markerConfigs = {};
245
+ function addTsp(filename, value) {
246
+ const codeStr = TemplateWithMarkers.is(value) ? value.code : value;
247
+ const actualCode = filename === "main.tsp" ? wrapMain(codeStr) : codeStr;
248
+ if (TemplateWithMarkers.is(value)) {
249
+ const markers = extractMarkers(actualCode);
250
+ for (const marker of markers) {
251
+ markerPositions.push({ ...marker, filename });
252
+ }
253
+ for (const [markerName, markerConfig] of Object.entries(value.markers)) {
254
+ if (markerConfig) {
255
+ markerConfigs[markerName] = markerConfig;
256
+ }
257
+ }
258
+ }
259
+ fs.addTypeSpecFile(filename, actualCode);
260
+ }
261
+ const files = typeof code === "string" || TemplateWithMarkers.is(code) ? { "main.tsp": code } : code;
262
+ for (const [name, value] of Object.entries(files)) {
263
+ addTsp(name, value);
264
+ }
265
+ return { markerPositions, markerConfigs };
266
+ }
267
+ function wrapMain(code) {
268
+ const imports = (params.imports ?? []).map((x) => `import "${x}";`);
269
+ const usings = (params.usings ?? []).map((x) => `using ${x};`);
270
+ const actualCode = [
271
+ ...imports,
272
+ ...usings,
273
+ params.wraps ? applyWraps(code, params.wraps) : code,
274
+ ].join("\n");
275
+ return actualCode;
276
+ }
277
+ async function compileAndDiagnose(code, options) {
278
+ const typesCollected = addTestLib(fs);
279
+ const { markerPositions, markerConfigs } = addCode(fs, code);
280
+ const program = await coreCompile(fs.compilerHost, resolveVirtualPath("main.tsp"), options?.compilerOptions);
281
+ savedProgram = program;
282
+ const entities = extractMarkedEntities(program, markerPositions, markerConfigs);
283
+ return [{ program, fs, ...typesCollected, ...entities }, program.diagnostics];
284
+ }
285
+ }
286
+ function extractMarkedEntities(program, markerPositions, markerConfigs) {
287
+ const entities = {};
288
+ for (const marker of markerPositions) {
289
+ const file = program.sourceFiles.get(resolveVirtualPath(marker.filename));
290
+ if (!file) {
291
+ throw new Error(`Couldn't find ${resolveVirtualPath(marker.filename)} in program`);
292
+ }
293
+ const { name, pos } = marker;
294
+ const markerConfig = markerConfigs[name];
295
+ const node = getNodeAtPosition(file, pos);
296
+ if (!node) {
297
+ throw new Error(`Could not find node at ${pos}`);
298
+ }
299
+ const { node: contextNode } = getIdentifierContext(node);
300
+ if (contextNode === undefined) {
301
+ throw new Error(`Could not find context node for ${name} at ${pos}. File content: ${file.file.text}`);
302
+ }
303
+ const entity = program.checker.getTypeOrValueForNode(contextNode);
304
+ if (entity === null) {
305
+ throw new Error(`Expected ${name} to be of entity kind ${markerConfig?.entityKind} but got null (Means a value failed to resolve) at ${pos}`);
306
+ }
307
+ if (markerConfig) {
308
+ const { entityKind, kind, valueKind } = markerConfig;
309
+ if (entity.entityKind !== entityKind) {
310
+ throw new Error(`Expected ${name} to be of entity kind ${entityKind} but got (${entity?.entityKind}) ${getEntityName(entity)} at ${pos}`);
311
+ }
312
+ if (entity.entityKind === "Type" && kind !== undefined && entity.kind !== kind) {
313
+ throw new Error(`Expected ${name} to be of kind ${kind} but got (${entity.kind}) ${getEntityName(entity)} at ${pos}`);
314
+ }
315
+ else if (entity?.entityKind === "Value" &&
316
+ valueKind !== undefined &&
317
+ entity.valueKind !== valueKind) {
318
+ throw new Error(`Expected ${name} to be of value kind ${valueKind} but got (${entity.valueKind}) ${getEntityName(entity)} at ${pos}`);
319
+ }
320
+ }
321
+ entities[name] = entity;
322
+ }
323
+ return entities;
324
+ }
325
+ function createCompilable(fn) {
326
+ return {
327
+ compileAndDiagnose: fn,
328
+ compile: async (...args) => {
329
+ const [result, diagnostics] = await fn(...args);
330
+ expectDiagnosticEmpty(diagnostics);
331
+ return result;
332
+ },
333
+ diagnose: async (...args) => {
334
+ const [_, diagnostics] = await fn(...args);
335
+ return diagnostics;
336
+ },
337
+ };
338
+ }
339
+ //# sourceMappingURL=tester.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tester.js","sourceRoot":"","sources":["../../../src/testing/tester.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,159 @@
1
1
  import type { CompilerOptions } from "../core/options.js";
2
2
  import type { Program } from "../core/program.js";
3
- import type { CompilerHost, Diagnostic, Type } from "../core/types.js";
3
+ import type { CompilerHost, Diagnostic, Entity, Type } from "../core/types.js";
4
+ import { GetMarkedEntities, TemplateWithMarkers } from "./marked-template.js";
5
+ /** Represent a mock file. Use `mockFile` function to construct */
6
+ export type MockFile = string | JsFile;
7
+ export interface JsFile {
8
+ readonly kind: "js";
9
+ readonly exports: Record<string, any>;
10
+ }
4
11
  export interface TestFileSystem {
5
- readonly compilerHost: CompilerHost;
12
+ /** Raw files */
6
13
  readonly fs: Map<string, string>;
14
+ /** Compiler host */
15
+ readonly compilerHost: CompilerHost;
16
+ /**
17
+ * Add a mock test file
18
+ * @example
19
+ * ```ts
20
+ * fs.add("foo.tsp", "model Foo {}");
21
+ * fs.add("foo.js", mockFile.js({ Foo: { bar: 1 } }));
22
+ * ```
23
+ */
24
+ add(path: string, content: MockFile): void;
25
+ /** Prefer using {@link add} */
7
26
  addTypeSpecFile(path: string, contents: string): void;
27
+ /** Prefer using {@link add} */
8
28
  addJsFile(path: string, contents: Record<string, any>): void;
9
29
  addRealTypeSpecFile(path: string, realPath: string): Promise<void>;
10
30
  addRealJsFile(path: string, realPath: string): Promise<void>;
11
31
  addRealFolder(path: string, realPath: string): Promise<void>;
12
32
  addTypeSpecLibrary(testLibrary: TypeSpecTestLibrary): Promise<void>;
13
33
  }
14
- export interface TestHost extends TestFileSystem {
34
+ export type TestCompileResult<T extends Record<string, Entity>> = T & {
35
+ /** The program created in this test compilation. */
36
+ readonly program: Program;
37
+ /** File system */
38
+ readonly fs: TestFileSystem;
39
+ } & Record<string, Entity>;
40
+ export interface TestCompileOptions {
41
+ /** Optional compiler options */
42
+ readonly compilerOptions?: CompilerOptions;
43
+ }
44
+ interface Testable {
45
+ /**
46
+ * Compile the given code and validate no diagnostics(error or warnings) are present.
47
+ * Use {@link compileAndDiagnose} to get the compiler result and manage diagnostics yourself.
48
+ *
49
+ * @param code Can be the content of the `main.tsp` file or a record of files(MUST contains a main.tsp).
50
+ * @param options Optional test options.
51
+ * @returns {@link TestCompileResult} with the program and collected entities.
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * const result = await tester.compile(t.code`model ${t.model("Foo")} { bar: string }`);
56
+ * // result.program is the program created
57
+ * // result.Foo is the model Foo created
58
+ * ```
59
+ */
60
+ compile<T extends string | TemplateWithMarkers<any> | Record<string, string | TemplateWithMarkers<any>>>(code: T, options?: TestCompileOptions): Promise<TestCompileResult<GetMarkedEntities<T>>>;
61
+ /**
62
+ * Compile the given code and return the list of diagnostics emitted.
63
+ * @param code Can be the content of the `main.tsp` file or a record of files(MUST contains a main.tsp).
64
+ * @param options Optional test options.
65
+ * @returns List of diagnostics emitted.
66
+ *
67
+ * @example
68
+ * ```ts
69
+ * const diagnostics = await tester.diagnose("model Foo {}");
70
+ * expectDiagnostics(diagnostics, {
71
+ * code: "no-foo",
72
+ * message: "Do not use Foo as a model name",
73
+ * });
74
+ * ```
75
+ */
76
+ diagnose(main: string, options?: TestCompileOptions): Promise<readonly Diagnostic[]>;
77
+ /**
78
+ * Compile the given code and return the collected entities and diagnostics.
79
+ *
80
+ * @param code Can be the content of the `main.tsp` file or a record of files(MUST contains a main.tsp).
81
+ * @param options Optional test options.
82
+ * @returns {@link TestCompileResult} with the program and collected entities with the list of diagnostics emitted.
83
+ *
84
+ * @example
85
+ * ```ts
86
+ * const [result, diagnostics] = await tester.compileAndDiagnose(t.code`model ${t.model("Foo")} { bar: string }`);
87
+ * // result.program is the program created
88
+ * // result.Foo is the model Foo created
89
+ * ```
90
+ */
91
+ compileAndDiagnose<T extends string | TemplateWithMarkers<any> | Record<string, string | TemplateWithMarkers<any>>>(code: T, options?: TestCompileOptions): Promise<[TestCompileResult<GetMarkedEntities<T>>, readonly Diagnostic[]]>;
92
+ }
93
+ export interface TesterBuilder<T> {
94
+ /** Extend with the given list of files */
95
+ files(files: Record<string, MockFile>): T;
96
+ /** Auto import all libraries defined in this tester. */
97
+ importLibraries(): T;
98
+ /** Import the given paths */
99
+ import(...imports: string[]): T;
100
+ /** Add using statement for the given namespaces. */
101
+ using(...names: string[]): T;
102
+ /** Wrap the code of the `main.tsp` file */
103
+ wrap(fn: (x: string) => string): T;
104
+ }
105
+ export interface Tester extends Testable, TesterBuilder<Tester> {
106
+ /**
107
+ * Create an emitter tester
108
+ * @param options - Options to pass to the emitter
109
+ */
110
+ emit(emitter: string, options?: Record<string, unknown>): EmitterTester;
111
+ /** Create an instance of the tester */
112
+ createInstance(): Promise<TesterInstance>;
113
+ }
114
+ export interface TestEmitterCompileResult {
115
+ /** The program created in this test compilation. */
116
+ readonly program: Program;
117
+ /** Files written to the emitter output dir. */
118
+ readonly outputs: Record<string, string>;
119
+ }
120
+ export interface OutputTestable<Result> {
121
+ compile(code: string | Record<string, string>, options?: TestCompileOptions): Promise<Result>;
122
+ compileAndDiagnose(code: string | Record<string, string>, options?: TestCompileOptions): Promise<[Result, readonly Diagnostic[]]>;
123
+ diagnose(code: string | Record<string, string>, options?: TestCompileOptions): Promise<readonly Diagnostic[]>;
124
+ }
125
+ /** Alternate version of the tester which runs the configured emitter */
126
+ export interface EmitterTester<Result = TestEmitterCompileResult> extends OutputTestable<Result>, TesterBuilder<EmitterTester<Result>> {
127
+ /**
128
+ * Pipe the output of the emitter into a different structure
129
+ *
130
+ * @example
131
+ * ```ts
132
+ * const MyTester = Tester.emit("my-emitter").pipe((result) => {
133
+ * return JSON.parse(result.outputs["output.json"]);
134
+ * });
135
+ *
136
+ * const result = await MyTester.compile("model Foo { bar: string }");
137
+ * // result is the parsed JSON from the output.json file
138
+ * ```
139
+ */
140
+ pipe<O>(cb: (result: Result) => O): EmitterTester<O>;
141
+ /** Create a mutable instance of the tester */
142
+ createInstance(): Promise<EmitterTesterInstance<Result>>;
143
+ }
144
+ export interface TesterInstanceBase {
145
+ /** Program created. Only available after calling `compile`, `diagnose` or `compileAndDiagnose` */
146
+ get program(): Program;
147
+ /** File system used */
148
+ readonly fs: TestFileSystem;
149
+ }
150
+ /** Instance of a tester. */
151
+ export interface TesterInstance extends TesterInstanceBase, Testable {
152
+ }
153
+ /** Instance of an emitter tester */
154
+ export interface EmitterTesterInstance<Result> extends TesterInstanceBase, OutputTestable<Result> {
155
+ }
156
+ export interface TestHost extends Pick<TestFileSystem, "addTypeSpecFile" | "addJsFile" | "addRealTypeSpecFile" | "addRealJsFile" | "addRealFolder" | "addTypeSpecLibrary" | "compilerHost" | "fs"> {
15
157
  program: Program;
16
158
  libraries: TypeSpecTestLibrary[];
17
159
  testTypes: Record<string, Type>;
@@ -68,4 +210,5 @@ export interface BasicTestRunner {
68
210
  */
69
211
  compileAndDiagnose(code: string, options?: CompilerOptions): Promise<[Record<string, Type>, readonly Diagnostic[]]>;
70
212
  }
213
+ export {};
71
214
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/testing/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEvE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACtD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IAC7D,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,kBAAkB,CAAC,WAAW,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE;AAED,MAAM,WAAW,QAAS,SAAQ,cAAc;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAEhC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAChF,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC;IAClF,kBAAkB,CAChB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACnC;AAED,qBAAa,aAAc,SAAQ,KAAK;IAG7B,IAAI,EAAE,QAAQ,GAAG,sBAAsB;gBAD9C,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,QAAQ,GAAG,sBAAsB;CAIjD;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAEhC;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAEhF;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC;IAElF;;OAEG;IACH,kBAAkB,CAChB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC,CAAC,CAAC;CAC3D"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/testing/types.ts"],"names":[],"mappings":"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"}
@@ -5,4 +5,5 @@ export class TestHostError extends Error {
5
5
  this.code = code;
6
6
  }
7
7
  }
8
+ // #endregion
8
9
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/testing/types.ts"],"names":[],"mappings":"AA2DA,MAAM,OAAO,aAAc,SAAQ,KAAK;IAG7B;IAFT,YACE,OAAe,EACR,IAAuC;QAE9C,KAAK,CAAC,OAAO,CAAC,CAAC;QAFR,SAAI,GAAJ,IAAI,CAAmC;IAGhD,CAAC;CACF"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/testing/types.ts"],"names":[],"mappings":"AAqQA,MAAM,OAAO,aAAc,SAAQ,KAAK;IAG7B;IAFT,YACE,OAAe,EACR,IAAuC;QAE9C,KAAK,CAAC,OAAO,CAAC,CAAC;QAFR,SAAI,GAAJ,IAAI,CAAmC;IAGhD,CAAC;CACF;AA6BD,aAAa"}
@@ -1 +1 @@
1
- {"version":3,"file":"literal.d.ts","sourceRoot":"","sources":["../../../../src/typekit/kits/literal.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGjG;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,aAAa,GAAG,cAAc,GAAG,cAAc,CAAC;IAE1F;;;;OAIG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC;IAE3C;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC;IAE7C;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAAC;IAE9C;;;;OAIG;IACH,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,aAAa,GAAG,cAAc,GAAG,cAAc,CAAC;IAE1E;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,aAAa,CAAC;IAE9C;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,cAAc,CAAC;IAEhD;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,cAAc,CAAC;CACjD;AAED,UAAU,gBAAgB;IACxB;;;;;OAKG;IACH,OAAO,EAAE,UAAU,CAAC;CACrB;AAED,OAAO,QAAQ,kBAAkB,CAAC;IAChC,UAAU,OAAQ,SAAQ,gBAAgB;KAAG;CAC9C"}
1
+ {"version":3,"file":"literal.d.ts","sourceRoot":"","sources":["../../../../src/typekit/kits/literal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGjG;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,aAAa,GAAG,cAAc,GAAG,cAAc,CAAC;IAE1F;;;;OAIG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC;IAE3C;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC;IAE7C;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAAC;IAE9C;;;;OAIG;IACH,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,aAAa,GAAG,cAAc,GAAG,cAAc,CAAC;IAE1E;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,aAAa,CAAC;IAE9C;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,cAAc,CAAC;IAEhD;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,cAAc,CAAC;CACjD;AAED,UAAU,gBAAgB;IACxB;;;;;OAKG;IACH,OAAO,EAAE,UAAU,CAAC;CACrB;AAED,OAAO,QAAQ,kBAAkB,CAAC;IAChC,UAAU,OAAQ,SAAQ,gBAAgB;KAAG;CAC9C"}
@@ -1,38 +1,17 @@
1
- import { Numeric } from "../../core/numeric.js";
2
1
  import { defineKit } from "../define-kit.js";
3
2
  defineKit({
4
3
  literal: {
5
4
  create(value) {
6
- if (typeof value === "string") {
7
- return this.literal.createString(value);
8
- }
9
- else if (typeof value === "number") {
10
- return this.literal.createNumeric(value);
11
- }
12
- else {
13
- return this.literal.createBoolean(value);
14
- }
5
+ return this.program.checker.createLiteralType(value);
15
6
  },
16
7
  createString(value) {
17
- return this.program.checker.createType({
18
- kind: "String",
19
- value,
20
- });
8
+ return this.program.checker.createLiteralType(value);
21
9
  },
22
10
  createNumeric(value) {
23
- const valueAsString = String(value);
24
- return this.program.checker.createType({
25
- kind: "Number",
26
- value,
27
- valueAsString,
28
- numericValue: Numeric(valueAsString),
29
- });
11
+ return this.program.checker.createLiteralType(value);
30
12
  },
31
13
  createBoolean(value) {
32
- return this.program.checker.createType({
33
- kind: "Boolean",
34
- value,
35
- });
14
+ return this.program.checker.createLiteralType(value);
36
15
  },
37
16
  isBoolean(type) {
38
17
  return type.entityKind === "Type" && type.kind === "Boolean";
@@ -1 +1 @@
1
- {"version":3,"file":"literal.js","sourceRoot":"","sources":["../../../../src/typekit/kits/literal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AA+E7C,SAAS,CAAmB;IAC1B,OAAO,EAAE;QACP,MAAM,CAAC,KAAK;YACV,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC1C,CAAC;iBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACrC,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QACD,YAAY,CAAC,KAAK;YAChB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;gBACrC,IAAI,EAAE,QAAQ;gBACd,KAAK;aACN,CAAC,CAAC;QACL,CAAC;QAED,aAAa,CAAC,KAAK;YACjB,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAEpC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;gBACrC,IAAI,EAAE,QAAQ;gBACd,KAAK;gBACL,aAAa;gBACb,YAAY,EAAE,OAAO,CAAC,aAAa,CAAC;aACrC,CAAC,CAAC;QACL,CAAC;QAED,aAAa,CAAC,KAAK;YACjB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;gBACrC,IAAI,EAAE,SAAS;gBACf,KAAK;aACN,CAAC,CAAC;QACL,CAAC;QAED,SAAS,CAAC,IAAI;YACZ,OAAO,IAAI,CAAC,UAAU,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;QAC/D,CAAC;QACD,QAAQ,CAAC,IAAI;YACX,OAAO,IAAI,CAAC,UAAU,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;QAC9D,CAAC;QACD,SAAS,CAAC,IAAI;YACZ,OAAO,IAAI,CAAC,UAAU,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;QAC9D,CAAC;QACD,EAAE,CAAC,IAAI;YACL,OAAO,CACL,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC5F,CAAC;QACJ,CAAC;KACF;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"literal.js","sourceRoot":"","sources":["../../../../src/typekit/kits/literal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AA+E7C,SAAS,CAAmB;IAC1B,OAAO,EAAE;QACP,MAAM,CAAC,KAAK;YACV,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACvD,CAAC;QACD,YAAY,CAAC,KAAK;YAChB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACvD,CAAC;QAED,aAAa,CAAC,KAAK;YACjB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACvD,CAAC;QAED,aAAa,CAAC,KAAK;YACjB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACvD,CAAC;QAED,SAAS,CAAC,IAAI;YACZ,OAAO,IAAI,CAAC,UAAU,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;QAC/D,CAAC;QACD,QAAQ,CAAC,IAAI;YACX,OAAO,IAAI,CAAC,UAAU,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;QAC9D,CAAC;QACD,SAAS,CAAC,IAAI;YACZ,OAAO,IAAI,CAAC,UAAU,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;QAC9D,CAAC;QACD,EAAE,CAAC,IAAI;YACL,OAAO,CACL,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC5F,CAAC;QACJ,CAAC;KACF;CACF,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typespec/compiler",
3
- "version": "1.2.0-dev.4",
3
+ "version": "1.2.0-dev.6",
4
4
  "description": "TypeSpec Compiler Preview",
5
5
  "author": "Microsoft Corporation",
6
6
  "license": "MIT",