@typespec/compiler 0.60.0-dev.9 → 0.60.1
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/manifest.js +2 -2
- package/dist/src/config/config-loader.js +7 -7
- package/dist/src/config/config-loader.js.map +1 -1
- package/dist/src/core/checker.d.ts.map +1 -1
- package/dist/src/core/checker.js +23 -577
- package/dist/src/core/checker.js.map +1 -1
- package/dist/src/core/messages.d.ts +25 -12
- package/dist/src/core/messages.d.ts.map +1 -1
- package/dist/src/core/messages.js +7 -2
- package/dist/src/core/messages.js.map +1 -1
- package/dist/src/core/numeric.js +17 -3
- package/dist/src/core/numeric.js.map +1 -1
- package/dist/src/core/program.d.ts.map +1 -1
- package/dist/src/core/program.js +47 -187
- package/dist/src/core/program.js.map +1 -1
- package/dist/src/core/schema-validator.d.ts.map +1 -1
- package/dist/src/core/schema-validator.js +8 -18
- package/dist/src/core/schema-validator.js.map +1 -1
- package/dist/src/core/semantic-walker.d.ts.map +1 -1
- package/dist/src/core/semantic-walker.js +2 -0
- package/dist/src/core/semantic-walker.js.map +1 -1
- package/dist/src/core/source-loader.d.ts +34 -0
- package/dist/src/core/source-loader.d.ts.map +1 -0
- package/dist/src/core/source-loader.js +241 -0
- package/dist/src/core/source-loader.js.map +1 -0
- package/dist/src/core/type-relation-checker.d.ts +32 -0
- package/dist/src/core/type-relation-checker.d.ts.map +1 -0
- package/dist/src/core/type-relation-checker.js +643 -0
- package/dist/src/core/type-relation-checker.js.map +1 -0
- package/dist/src/lib/service.js +2 -2
- package/dist/src/lib/service.js.map +1 -1
- package/package.json +4 -5
- package/templates/scaffolding.json +4 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-loader.d.ts","sourceRoot":"","sources":["../../../src/core/source-loader.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,WAAW,EAIZ,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EACL,gBAAgB,EAGhB,QAAQ,EACR,YAAY,EACZ,UAAU,EAEV,MAAM,EACN,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACxB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,4BAA4B;IAC5B,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAEtD,+CAA+C;IAC/C,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAEtD,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IAChE,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IAEhE,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;CAC7C;AAED,UAAU,wBAAwB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,kBAAkB,GAAG,SAAS,CAAC;CACxE;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,CACR,IAAI,EAAE,MAAM,EACZ,eAAe,CAAC,EAAE,eAAe,EACjC,IAAI,CAAC,EAAE,QAAQ,GAAG,YAAY,GAC7B,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,UAAU,CACR,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,gBAAgB,GAAG,OAAO,QAAQ,EAC1C,UAAU,EAAE,MAAM,EAClB,eAAe,CAAC,EAAE,eAAe,GAChC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;CACvC;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,YAAY,EAClB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAgPvB;AAqBD,wBAAsB,UAAU,CAC9B,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,QAAQ,GACnD,OAAO,CAAC,CAAC,gBAAgB,GAAG,SAAS,EAAE,SAAS,UAAU,EAAE,CAAC,CAAC,CA+BhE"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { deepEquals, doIO, resolveTspMain } from "../utils/misc.js";
|
|
2
|
+
import { compilerAssert, createDiagnosticCollector } from "./diagnostics.js";
|
|
3
|
+
import { resolveTypeSpecEntrypointForDir } from "./entrypoint-resolution.js";
|
|
4
|
+
import { createDiagnostic } from "./messages.js";
|
|
5
|
+
import { resolveModule, } from "./module-resolver.js";
|
|
6
|
+
import { isImportStatement, parse } from "./parser.js";
|
|
7
|
+
import { getDirectoryPath } from "./path-utils.js";
|
|
8
|
+
import { createSourceFile } from "./source-file.js";
|
|
9
|
+
import { NoTarget, SyntaxKind, } from "./types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Create a TypeSpec source loader. This will be able to resolve and load TypeSpec and JS files.
|
|
12
|
+
* @param host Compiler host
|
|
13
|
+
* @param options Loading options
|
|
14
|
+
*/
|
|
15
|
+
export async function createSourceLoader(host, options) {
|
|
16
|
+
const diagnostics = createDiagnosticCollector();
|
|
17
|
+
const tracer = options?.tracer;
|
|
18
|
+
const seenSourceFiles = new Set();
|
|
19
|
+
const sourceFileLocationContexts = new WeakMap();
|
|
20
|
+
const sourceFiles = new Map();
|
|
21
|
+
const jsSourceFiles = new Map();
|
|
22
|
+
const loadedLibraries = new Map();
|
|
23
|
+
async function importFile(path, locationContext, kind = "import") {
|
|
24
|
+
const sourceFileKind = host.getSourceFileKind(path);
|
|
25
|
+
switch (sourceFileKind) {
|
|
26
|
+
case "js":
|
|
27
|
+
await importJsFile(path, locationContext, NoTarget);
|
|
28
|
+
break;
|
|
29
|
+
case "typespec":
|
|
30
|
+
await loadTypeSpecFile(path, locationContext, NoTarget);
|
|
31
|
+
break;
|
|
32
|
+
default:
|
|
33
|
+
diagnostics.add(createDiagnostic({
|
|
34
|
+
code: kind === "import" ? "invalid-import" : "invalid-main",
|
|
35
|
+
target: NoTarget,
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
importFile,
|
|
41
|
+
importPath,
|
|
42
|
+
resolution: {
|
|
43
|
+
sourceFiles,
|
|
44
|
+
jsSourceFiles,
|
|
45
|
+
locationContexts: sourceFileLocationContexts,
|
|
46
|
+
loadedLibraries: loadedLibraries,
|
|
47
|
+
diagnostics: diagnostics.diagnostics,
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
async function loadTypeSpecFile(path, locationContext, diagnosticTarget) {
|
|
51
|
+
if (seenSourceFiles.has(path)) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
seenSourceFiles.add(path);
|
|
55
|
+
const file = await doIO(host.readFile, path, (x) => diagnostics.add(x), {
|
|
56
|
+
diagnosticTarget,
|
|
57
|
+
});
|
|
58
|
+
if (file) {
|
|
59
|
+
sourceFileLocationContexts.set(file, locationContext);
|
|
60
|
+
await loadTypeSpecScript(file);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async function loadTypeSpecScript(file) {
|
|
64
|
+
// This is not a diagnostic because the compiler should never reuse the same path.
|
|
65
|
+
// It's the caller's responsibility to use unique paths.
|
|
66
|
+
if (sourceFiles.has(file.path)) {
|
|
67
|
+
throw new RangeError("Duplicate script path: " + file.path);
|
|
68
|
+
}
|
|
69
|
+
const script = parseOrReuse(file);
|
|
70
|
+
for (const diagnostic of script.parseDiagnostics) {
|
|
71
|
+
diagnostics.add(diagnostic);
|
|
72
|
+
}
|
|
73
|
+
sourceFiles.set(file.path, script);
|
|
74
|
+
await loadScriptImports(script);
|
|
75
|
+
return script;
|
|
76
|
+
}
|
|
77
|
+
function parseOrReuse(file) {
|
|
78
|
+
if (options?.getCachedScript) {
|
|
79
|
+
const old = options.getCachedScript(file);
|
|
80
|
+
if (old?.file === file && deepEquals(old.parseOptions, options.parseOptions)) {
|
|
81
|
+
return old;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const script = parse(file, options?.parseOptions);
|
|
85
|
+
host.parseCache?.set(file, script);
|
|
86
|
+
return script;
|
|
87
|
+
}
|
|
88
|
+
async function loadScriptImports(file) {
|
|
89
|
+
// collect imports
|
|
90
|
+
const basedir = getDirectoryPath(file.file.path);
|
|
91
|
+
await loadImports(file.statements.filter(isImportStatement).map((x) => ({ path: x.path.value, target: x })), basedir, getSourceFileLocationContext(file.file));
|
|
92
|
+
}
|
|
93
|
+
function getSourceFileLocationContext(sourcefile) {
|
|
94
|
+
const locationContext = sourceFileLocationContexts.get(sourcefile);
|
|
95
|
+
compilerAssert(locationContext, "SourceFile should have a declaration locationContext.");
|
|
96
|
+
return locationContext;
|
|
97
|
+
}
|
|
98
|
+
async function loadImports(imports, relativeTo, locationContext) {
|
|
99
|
+
// collect imports
|
|
100
|
+
for (const { path, target } of imports) {
|
|
101
|
+
await importPath(path, target, relativeTo, locationContext);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async function importPath(path, target, relativeTo, locationContext = { type: "project" }) {
|
|
105
|
+
const library = await resolveTypeSpecLibrary(path, relativeTo, target);
|
|
106
|
+
if (library === undefined) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if (library.type === "module") {
|
|
110
|
+
loadedLibraries.set(library.manifest.name, {
|
|
111
|
+
path: library.path,
|
|
112
|
+
manifest: library.manifest,
|
|
113
|
+
});
|
|
114
|
+
tracer?.trace("import-resolution.library", `Loading library "${path}" from "${library.mainFile}"`);
|
|
115
|
+
const metadata = computeModuleMetadata(library);
|
|
116
|
+
locationContext = {
|
|
117
|
+
type: "library",
|
|
118
|
+
metadata,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
const importFilePath = library.type === "module" ? library.mainFile : library.path;
|
|
122
|
+
const isDirectory = (await host.stat(importFilePath)).isDirectory();
|
|
123
|
+
if (isDirectory) {
|
|
124
|
+
await loadDirectory(importFilePath, locationContext, target);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
return importFile(importFilePath, locationContext);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* resolves a module specifier like "myLib" to an absolute path where we can find the main of
|
|
131
|
+
* that module, e.g. "/typespec/node_modules/myLib/main.tsp".
|
|
132
|
+
*/
|
|
133
|
+
async function resolveTypeSpecLibrary(specifier, baseDir, target) {
|
|
134
|
+
try {
|
|
135
|
+
return await resolveModule(getResolveModuleHost(), specifier, {
|
|
136
|
+
baseDir,
|
|
137
|
+
directoryIndexFiles: ["main.tsp", "index.mjs", "index.js"],
|
|
138
|
+
resolveMain(pkg) {
|
|
139
|
+
// this lets us follow node resolve semantics more-or-less exactly
|
|
140
|
+
// but using tspMain instead of main.
|
|
141
|
+
return resolveTspMain(pkg) ?? pkg.main;
|
|
142
|
+
},
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
catch (e) {
|
|
146
|
+
if (e.code === "MODULE_NOT_FOUND") {
|
|
147
|
+
diagnostics.add(createDiagnostic({ code: "import-not-found", format: { path: specifier }, target }));
|
|
148
|
+
return undefined;
|
|
149
|
+
}
|
|
150
|
+
else if (e.code === "INVALID_MAIN") {
|
|
151
|
+
diagnostics.add(createDiagnostic({
|
|
152
|
+
code: "library-invalid",
|
|
153
|
+
format: { path: specifier },
|
|
154
|
+
messageId: "tspMain",
|
|
155
|
+
target,
|
|
156
|
+
}));
|
|
157
|
+
return undefined;
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
throw e;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
async function loadDirectory(dir, locationContext, diagnosticTarget) {
|
|
165
|
+
const mainFile = await resolveTypeSpecEntrypointForDir(host, dir, (x) => diagnostics.add(x));
|
|
166
|
+
await loadTypeSpecFile(mainFile, locationContext, diagnosticTarget);
|
|
167
|
+
return mainFile;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Import the Javascript files decorator and lifecycle hooks.
|
|
171
|
+
*/
|
|
172
|
+
async function importJsFile(path, locationContext, diagnosticTarget) {
|
|
173
|
+
const sourceFile = jsSourceFiles.get(path);
|
|
174
|
+
if (sourceFile !== undefined) {
|
|
175
|
+
return sourceFile;
|
|
176
|
+
}
|
|
177
|
+
const file = diagnostics.pipe(await loadJsFile(host, path, diagnosticTarget));
|
|
178
|
+
if (file !== undefined) {
|
|
179
|
+
sourceFileLocationContexts.set(file.file, locationContext);
|
|
180
|
+
jsSourceFiles.set(path, file);
|
|
181
|
+
}
|
|
182
|
+
return file;
|
|
183
|
+
}
|
|
184
|
+
function getResolveModuleHost() {
|
|
185
|
+
return {
|
|
186
|
+
realpath: host.realpath,
|
|
187
|
+
stat: host.stat,
|
|
188
|
+
readFile: async (path) => {
|
|
189
|
+
const file = await host.readFile(path);
|
|
190
|
+
return file.text;
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
function computeModuleMetadata(module) {
|
|
196
|
+
const metadata = {
|
|
197
|
+
type: "module",
|
|
198
|
+
name: module.manifest.name,
|
|
199
|
+
};
|
|
200
|
+
if (module.manifest.homepage) {
|
|
201
|
+
metadata.homepage = module.manifest.homepage;
|
|
202
|
+
}
|
|
203
|
+
if (module.manifest.bugs?.url) {
|
|
204
|
+
metadata.bugs = { url: module.manifest.bugs?.url };
|
|
205
|
+
}
|
|
206
|
+
if (module.manifest.version) {
|
|
207
|
+
metadata.version = module.manifest.version;
|
|
208
|
+
}
|
|
209
|
+
return metadata;
|
|
210
|
+
}
|
|
211
|
+
export async function loadJsFile(host, path, diagnosticTarget) {
|
|
212
|
+
const file = createSourceFile("", path);
|
|
213
|
+
const diagnostics = [];
|
|
214
|
+
const exports = await doIO(host.getJsImport, path, (x) => diagnostics.push(x), {
|
|
215
|
+
diagnosticTarget,
|
|
216
|
+
jsDiagnosticTarget: { file, pos: 0, end: 0 },
|
|
217
|
+
});
|
|
218
|
+
if (!exports) {
|
|
219
|
+
return [undefined, diagnostics];
|
|
220
|
+
}
|
|
221
|
+
const node = {
|
|
222
|
+
kind: SyntaxKind.JsSourceFile,
|
|
223
|
+
id: {
|
|
224
|
+
kind: SyntaxKind.Identifier,
|
|
225
|
+
sv: "",
|
|
226
|
+
pos: 0,
|
|
227
|
+
end: 0,
|
|
228
|
+
symbol: undefined,
|
|
229
|
+
flags: 8 /* NodeFlags.Synthetic */,
|
|
230
|
+
},
|
|
231
|
+
esmExports: exports,
|
|
232
|
+
file,
|
|
233
|
+
namespaceSymbols: [],
|
|
234
|
+
symbol: undefined,
|
|
235
|
+
pos: 0,
|
|
236
|
+
end: 0,
|
|
237
|
+
flags: 0 /* NodeFlags.None */,
|
|
238
|
+
};
|
|
239
|
+
return [node, diagnostics];
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=source-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-loader.js","sourceRoot":"","sources":["../../../src/core/source-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Checker } from "./checker.js";
|
|
2
|
+
import { Program } from "./program.js";
|
|
3
|
+
import { Diagnostic, Entity, IndeterminateEntity, Model, Node, Scalar, Type, Value } from "./types.js";
|
|
4
|
+
export interface TypeRelation {
|
|
5
|
+
isTypeAssignableTo(source: Entity | IndeterminateEntity, target: Entity, diagnosticTarget: Entity | Node): [boolean, readonly Diagnostic[]];
|
|
6
|
+
isValueOfType(source: Value, target: Type, diagnosticTarget: Entity | Node): [boolean, readonly Diagnostic[]];
|
|
7
|
+
isReflectionType(type: Type): type is Model & {
|
|
8
|
+
name: ReflectionTypeName;
|
|
9
|
+
};
|
|
10
|
+
areScalarsRelated(source: Scalar, target: Scalar): boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Mapping from the reflection models to Type["kind"] value
|
|
14
|
+
*/
|
|
15
|
+
declare const ReflectionNameToKind: {
|
|
16
|
+
readonly Enum: "Enum";
|
|
17
|
+
readonly EnumMember: "EnumMember";
|
|
18
|
+
readonly Interface: "Interface";
|
|
19
|
+
readonly Model: "Model";
|
|
20
|
+
readonly ModelProperty: "ModelProperty";
|
|
21
|
+
readonly Namespace: "Namespace";
|
|
22
|
+
readonly Operation: "Operation";
|
|
23
|
+
readonly Scalar: "Scalar";
|
|
24
|
+
readonly TemplateParameter: "TemplateParameter";
|
|
25
|
+
readonly Tuple: "Tuple";
|
|
26
|
+
readonly Union: "Union";
|
|
27
|
+
readonly UnionVariant: "UnionVariant";
|
|
28
|
+
};
|
|
29
|
+
type ReflectionTypeName = keyof typeof ReflectionNameToKind;
|
|
30
|
+
export declare function createTypeRelationChecker(program: Program, checker: Checker): TypeRelation;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=type-relation-checker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-relation-checker.d.ts","sourceRoot":"","sources":["../../../src/core/type-relation-checker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAA2B,MAAM,cAAc,CAAC;AAgBhE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAGL,UAAU,EAEV,MAAM,EAEN,mBAAmB,EAEnB,KAAK,EAIL,IAAI,EAGJ,MAAM,EAKN,IAAI,EAEJ,KAAK,EACN,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,YAAY;IAC3B,kBAAkB,CAChB,MAAM,EAAE,MAAM,GAAG,mBAAmB,EACpC,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAC9B,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC,CAAC;IAEpC,aAAa,CACX,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,IAAI,EACZ,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAC9B,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC,CAAC;IAEpC,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG;QAAE,IAAI,EAAE,kBAAkB,CAAA;KAAE,CAAC;IAE3E,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5D;AAuBD;;GAEG;AACH,QAAA,MAAM,oBAAoB;;;;;;;;;;;;;CAahB,CAAC;AAIX,KAAK,kBAAkB,GAAG,MAAM,OAAO,oBAAoB,CAAC;AAE5D,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,YAAY,CA+0B1F"}
|