@typespec/compiler 1.17.0-dev.6 → 1.17.0-dev.7
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/init/scaffold.d.ts.map +1 -1
- package/dist/src/init/scaffold.js +31 -3
- package/dist/src/init/scaffold.js.map +1 -1
- package/dist/src/init/template-source/in-memory-template-source.d.ts +1 -1
- package/dist/src/init/template-source/in-memory-template-source.d.ts.map +1 -1
- package/dist/src/init/template-source/in-memory-template-source.js +2 -1
- package/dist/src/init/template-source/in-memory-template-source.js.map +1 -1
- package/dist/src/init/template-source/types.d.ts +1 -0
- package/dist/src/init/template-source/types.d.ts.map +1 -1
- package/dist/src/init/template-source/types.js +10 -1
- package/dist/src/init/template-source/types.js.map +1 -1
- package/dist/src/init/template-source/uri-template-source.d.ts +1 -1
- package/dist/src/init/template-source/uri-template-source.d.ts.map +1 -1
- package/dist/src/init/template-source/uri-template-source.js +23 -2
- package/dist/src/init/template-source/uri-template-source.js.map +1 -1
- package/package.json +4 -4
package/dist/manifest.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../../src/init/scaffold.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../../src/init/scaffold.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAQnD,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAGjE,eAAO,MAAM,sBAAsB,mBAAmB,CAAC;AAEvD,MAAM,WAAW,iBAAiB;IAChC,2CAA2C;IAC3C,QAAQ,EAAE,YAAY,CAAC;IAEvB;;;OAGG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;IAExB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,SAAS,EAAE,uBAAuB,EAAE,CAAC;IAErC;;OAEG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEhC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,GAAG,uBAAuB,CAKtF;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACjC,iBAAiB,CAWnB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,iBAOnF;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAOzF"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { stringify } from "yaml";
|
|
2
|
-
import { getDirectoryPath, joinPaths } from "../core/path-utils.js";
|
|
2
|
+
import { getDirectoryPath, getRelativePathFromDirectory, isPathAbsolute, joinPaths, normalizePath, } from "../core/path-utils.js";
|
|
3
3
|
import { fetchLatestPackageManifest } from "../package-manger/npm-registry.js";
|
|
4
4
|
import { createFileTemplatingContext, render, } from "./file-templating.js";
|
|
5
|
+
import { validateTemplateRelativePath } from "./template-source/types.js";
|
|
5
6
|
export const TypeSpecConfigFilename = "tspconfig.yaml";
|
|
6
7
|
export function normalizeLibrary(library) {
|
|
7
8
|
if (typeof library === "string") {
|
|
@@ -151,12 +152,39 @@ async function writeFile(host, config, context, file) {
|
|
|
151
152
|
if (config.source === undefined) {
|
|
152
153
|
throw new Error(`Cannot resolve template file "${file.path}": template was loaded without a source.`);
|
|
153
154
|
}
|
|
155
|
+
const destination = validateTemplateRelativePath(file.destination, "destination");
|
|
156
|
+
const destinationFilePath = joinPaths(config.directory, destination);
|
|
157
|
+
await validateRealPathWithinProject(host, config.directory, destinationFilePath, file.destination);
|
|
154
158
|
const template = await config.source.readFile(file.path);
|
|
155
159
|
const content = render(template.text, context);
|
|
156
|
-
const destinationFilePath = joinPaths(config.directory, file.destination);
|
|
157
160
|
// create folders in case they don't exist
|
|
158
161
|
await host.mkdirp(getDirectoryPath(destinationFilePath) + "/");
|
|
159
|
-
|
|
162
|
+
await validateRealPathWithinProject(host, config.directory, destinationFilePath, file.destination);
|
|
163
|
+
return host.writeFile(destinationFilePath, content);
|
|
164
|
+
}
|
|
165
|
+
async function validateRealPathWithinProject(host, projectDirectory, destinationFilePath, destination) {
|
|
166
|
+
const realProjectDirectory = normalizePath(await host.realpath(projectDirectory));
|
|
167
|
+
let ancestor = destinationFilePath;
|
|
168
|
+
while (true) {
|
|
169
|
+
try {
|
|
170
|
+
const realAncestor = normalizePath(await host.realpath(ancestor));
|
|
171
|
+
const relativePath = getRelativePathFromDirectory(realProjectDirectory, realAncestor, false);
|
|
172
|
+
if (isPathAbsolute(relativePath) || relativePath === ".." || relativePath.startsWith("../")) {
|
|
173
|
+
throw new Error(`Template file destination must be a relative path: "${destination}"`);
|
|
174
|
+
}
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
if (error.code !== "ENOENT") {
|
|
179
|
+
throw error;
|
|
180
|
+
}
|
|
181
|
+
const parent = getDirectoryPath(ancestor);
|
|
182
|
+
if (parent === ancestor) {
|
|
183
|
+
throw error;
|
|
184
|
+
}
|
|
185
|
+
ancestor = parent;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
160
188
|
}
|
|
161
189
|
async function getPackageVersion(packageName, templatePackageConfig) {
|
|
162
190
|
if (templatePackageConfig.version !== undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../../src/init/scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../../src/init/scaffold.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SourceFile } from "../../core/types.js";
|
|
2
|
-
import type
|
|
2
|
+
import { type LoadedTemplateIndex, type TemplateSource } from "./types.js";
|
|
3
3
|
/**
|
|
4
4
|
* A {@link TemplateSource} serving an index and its template files from an in-memory map keyed by
|
|
5
5
|
* relative path. Used for built-in templates that are bundled rather than on disk — e.g. the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory-template-source.d.ts","sourceRoot":"","sources":["../../../../src/init/template-source/in-memory-template-source.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"in-memory-template-source.d.ts","sourceRoot":"","sources":["../../../../src/init/template-source/in-memory-template-source.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,cAAc,EAEpB,MAAM,YAAY,CAAC;AAMpB;;;;;GAKG;AACH,qBAAa,sBAAuB,YAAW,cAAc;;IAI3D;;;OAGG;gBACS,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,GAAE,MAA6B;IAKlF,SAAS,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAMzC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;CAgB1D"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { normalizePath } from "../../core/path-utils.js";
|
|
2
2
|
import { createSourceFile } from "../../core/source-file.js";
|
|
3
|
+
import { validateTemplateRelativePath, } from "./types.js";
|
|
3
4
|
import { SCAFFOLDING_FILENAME } from "./uri-template-source.js";
|
|
4
5
|
/** Prefix used to label the virtual files this source serves in diagnostics. */
|
|
5
6
|
const INTERNAL_URI_PREFIX = "internal:";
|
|
@@ -29,7 +30,7 @@ export class InMemoryTemplateSource {
|
|
|
29
30
|
return this.#read(relativePath);
|
|
30
31
|
}
|
|
31
32
|
#read(relativePath) {
|
|
32
|
-
const key = normalizeKey(relativePath);
|
|
33
|
+
const key = normalizeKey(validateTemplateRelativePath(relativePath, "path"));
|
|
33
34
|
const content = this.#files.get(key);
|
|
34
35
|
if (content === undefined) {
|
|
35
36
|
const error = new Error(`ENOENT: bundled template file not found, '${relativePath}'`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory-template-source.js","sourceRoot":"","sources":["../../../../src/init/template-source/in-memory-template-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"in-memory-template-source.js","sourceRoot":"","sources":["../../../../src/init/template-source/in-memory-template-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAGL,4BAA4B,GAC7B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,gFAAgF;AAChF,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAExC;;;;;GAKG;AACH,MAAM,OAAO,sBAAsB;IACjC,MAAM,CAA8B;IACpC,UAAU,CAAS;IAEnB;;;OAGG;IACH,YAAY,KAAkC,EAAE,YAAoB,oBAAoB;QACtF,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,YAAoB;QACjC,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,YAAoB;QACxB,MAAM,GAAG,GAAG,YAAY,CAAC,4BAA4B,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,KAAK,GAA0B,IAAI,KAAK,CAC5C,6CAA6C,YAAY,GAAG,CAC7D,CAAC;YACF,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;YACtB,MAAM,KAAK,CAAC;QACd,CAAC;QACD,OAAO,gBAAgB,CAAC,OAAO,EAAE,GAAG,mBAAmB,GAAG,GAAG,EAAE,CAAC,CAAC;IACnE,CAAC;CACF;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -18,4 +18,5 @@ export interface TemplateSource {
|
|
|
18
18
|
loadIndex(): Promise<LoadedTemplateIndex>;
|
|
19
19
|
readFile(relativePath: string): Promise<SourceFile>;
|
|
20
20
|
}
|
|
21
|
+
export declare function validateTemplateRelativePath(path: string, kind: "path" | "destination"): string;
|
|
21
22
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/init/template-source/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/init/template-source/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,qGAAqG;AACrG,MAAM,WAAW,mBAAmB;IAClC,mCAAmC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjD,sFAAsF;IACtF,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;IAC/B,wFAAwF;IACxF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC1C,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CACrD;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,MAAM,CAU/F"}
|
|
@@ -1,2 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
import { isPathAbsolute, normalizePath } from "../../core/path-utils.js";
|
|
2
|
+
export function validateTemplateRelativePath(path, kind) {
|
|
3
|
+
const normalizedPath = normalizePath(path);
|
|
4
|
+
if (isPathAbsolute(normalizedPath) ||
|
|
5
|
+
normalizedPath === ".." ||
|
|
6
|
+
normalizedPath.startsWith("../")) {
|
|
7
|
+
throw new Error(`Template file ${kind} must be a relative path: "${path}"`);
|
|
8
|
+
}
|
|
9
|
+
return normalizedPath;
|
|
10
|
+
}
|
|
2
11
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/init/template-source/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/init/template-source/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAwBzE,MAAM,UAAU,4BAA4B,CAAC,IAAY,EAAE,IAA4B;IACrF,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3C,IACE,cAAc,CAAC,cAAc,CAAC;QAC9B,cAAc,KAAK,IAAI;QACvB,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,EAChC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,8BAA8B,IAAI,GAAG,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SourceFile, SystemHost } from "../../core/types.js";
|
|
2
|
-
import type
|
|
2
|
+
import { type LoadedTemplateIndex, type TemplateSource } from "./types.js";
|
|
3
3
|
/** File name of the template index within a template source directory. */
|
|
4
4
|
export declare const SCAFFOLDING_FILENAME = "scaffolding.json";
|
|
5
5
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uri-template-source.d.ts","sourceRoot":"","sources":["../../../../src/init/template-source/uri-template-source.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"uri-template-source.d.ts","sourceRoot":"","sources":["../../../../src/init/template-source/uri-template-source.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAElE,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,cAAc,EAEpB,MAAM,YAAY,CAAC;AAEpB,0EAA0E;AAC1E,eAAO,MAAM,oBAAoB,qBAAqB,CAAC;AAEvD;;;;;;;;GAQG;AACH,qBAAa,iBAAkB,YAAW,cAAc;;IAMtD;;;;OAIG;gBACS,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM;IAMnD;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,iBAAiB;IAOtE,SAAS,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAMzC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;CA0B1D"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { getDirectoryPath } from "../../core/path-utils.js";
|
|
1
|
+
import { getDirectoryPath, getRelativePathFromDirectory, isPathAbsolute, isUrl, normalizePath, } from "../../core/path-utils.js";
|
|
2
2
|
import { readUrlOrPath, resolveRelativeUrlOrPath } from "../../utils/misc.js";
|
|
3
|
+
import { validateTemplateRelativePath, } from "./types.js";
|
|
3
4
|
/** File name of the template index within a template source directory. */
|
|
4
5
|
export const SCAFFOLDING_FILENAME = "scaffolding.json";
|
|
5
6
|
/**
|
|
@@ -39,7 +40,27 @@ export class UriTemplateSource {
|
|
|
39
40
|
return { templates, indexFile, baseUri: this.#baseUri };
|
|
40
41
|
}
|
|
41
42
|
async readFile(relativePath) {
|
|
42
|
-
|
|
43
|
+
const path = validateTemplateRelativePath(relativePath, "path");
|
|
44
|
+
const resolvedPath = resolveRelativeUrlOrPath(this.#baseUri + "/", path);
|
|
45
|
+
if (isUrl(this.#baseUri)) {
|
|
46
|
+
const baseUrl = new URL(this.#baseUri + "/");
|
|
47
|
+
const resolvedUrl = new URL(resolvedPath);
|
|
48
|
+
if (resolvedUrl.origin !== baseUrl.origin ||
|
|
49
|
+
!resolvedUrl.pathname.startsWith(baseUrl.pathname)) {
|
|
50
|
+
throw new Error(`Template file path must be a relative path: "${relativePath}"`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
const realBasePath = normalizePath(await this.#host.realpath(this.#baseUri));
|
|
55
|
+
const realFilePath = normalizePath(await this.#host.realpath(resolvedPath));
|
|
56
|
+
const relativeRealPath = getRelativePathFromDirectory(realBasePath, realFilePath, false);
|
|
57
|
+
if (isPathAbsolute(relativeRealPath) ||
|
|
58
|
+
relativeRealPath === ".." ||
|
|
59
|
+
relativeRealPath.startsWith("../")) {
|
|
60
|
+
throw new Error(`Template file path must be a relative path: "${relativePath}"`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return readUrlOrPath(this.#host, resolvedPath);
|
|
43
64
|
}
|
|
44
65
|
}
|
|
45
66
|
//# sourceMappingURL=uri-template-source.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uri-template-source.js","sourceRoot":"","sources":["../../../../src/init/template-source/uri-template-source.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"uri-template-source.js","sourceRoot":"","sources":["../../../../src/init/template-source/uri-template-source.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,4BAA4B,EAC5B,cAAc,EACd,KAAK,EACL,aAAa,GACd,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAGL,4BAA4B,GAC7B,MAAM,YAAY,CAAC;AAEpB,0EAA0E;AAC1E,MAAM,CAAC,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAEvD;;;;;;;;GAQG;AACH,MAAM,OAAO,iBAAiB;IAC5B,KAAK,CAAa;IAClB,cAAc,CAAS;IACvB,6EAA6E;IAC7E,QAAQ,CAAS;IAEjB;;;;OAIG;IACH,YAAY,IAAgB,EAAE,aAAqB;QACjD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAClD,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,IAAgB,EAAE,SAAiB;QACtD,OAAO,IAAI,iBAAiB,CAC1B,IAAI,EACJ,wBAAwB,CAAC,SAAS,GAAG,GAAG,EAAE,oBAAoB,CAAC,CAChE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,YAAoB;QACjC,MAAM,IAAI,GAAG,4BAA4B,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAChE,MAAM,YAAY,GAAG,wBAAwB,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;QACzE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;YAC7C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;YAC1C,IACE,WAAW,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM;gBACrC,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,EAClD,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,gDAAgD,YAAY,GAAG,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC7E,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;YAC5E,MAAM,gBAAgB,GAAG,4BAA4B,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;YACzF,IACE,cAAc,CAAC,gBAAgB,CAAC;gBAChC,gBAAgB,KAAK,IAAI;gBACzB,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,EAClC,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,gDAAgD,YAAY,GAAG,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;QACD,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACjD,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@typespec/compiler",
|
|
3
|
-
"version": "1.17.0-dev.
|
|
3
|
+
"version": "1.17.0-dev.7",
|
|
4
4
|
"description": "TypeSpec compiler and standard library",
|
|
5
5
|
"author": "Microsoft Corporation",
|
|
6
6
|
"license": "MIT",
|
|
@@ -114,13 +114,13 @@
|
|
|
114
114
|
"@types/semver": "^7.8.0",
|
|
115
115
|
"@types/yargs": "^17.0.35",
|
|
116
116
|
"@typespec/internal-build-utils": "^0.86.0 || >= 0.87.0-dev.0",
|
|
117
|
-
"@vitest/coverage-v8": "^
|
|
118
|
-
"@vitest/ui": "^
|
|
117
|
+
"@vitest/coverage-v8": "^5.0.0",
|
|
118
|
+
"@vitest/ui": "^5.0.0",
|
|
119
119
|
"pathe": "^2.0.3",
|
|
120
120
|
"rimraf": "^6.1.3",
|
|
121
121
|
"tmlanguage-generator": "^0.6.8 || >= 0.6.9-dev.8",
|
|
122
122
|
"typescript": "~6.0.2",
|
|
123
|
-
"vitest": "^
|
|
123
|
+
"vitest": "^5.0.0",
|
|
124
124
|
"vscode-oniguruma": "^2.0.1",
|
|
125
125
|
"vscode-textmate": "^9.3.2"
|
|
126
126
|
},
|