@typespec/internal-build-utils 0.4.0
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/cmd/cli.js +2 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +21 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/common.d.ts +37 -0
- package/dist/src/common.d.ts.map +1 -0
- package/dist/src/common.js +75 -0
- package/dist/src/common.js.map +1 -0
- package/dist/src/constants.d.ts +11 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +11 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/dotnet.d.ts +13 -0
- package/dist/src/dotnet.d.ts.map +1 -0
- package/dist/src/dotnet.js +81 -0
- package/dist/src/dotnet.js.map +1 -0
- package/dist/src/generate-third-party-notice.d.ts +2 -0
- package/dist/src/generate-third-party-notice.d.ts.map +1 -0
- package/dist/src/generate-third-party-notice.js +121 -0
- package/dist/src/generate-third-party-notice.js.map +1 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +5 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/prerelease.d.ts +2 -0
- package/dist/src/prerelease.d.ts.map +1 -0
- package/dist/src/prerelease.js +132 -0
- package/dist/src/prerelease.js.map +1 -0
- package/dist/src/visualstudio.d.ts +6 -0
- package/dist/src/visualstudio.d.ts.map +1 -0
- package/dist/src/visualstudio.js +28 -0
- package/dist/src/visualstudio.js.map +1 -0
- package/dist/src/watch.d.ts +2 -0
- package/dist/src/watch.d.ts.map +1 -0
- package/dist/src/watch.js +50 -0
- package/dist/src/watch.js.map +1 -0
- package/package.json +60 -0
package/cmd/cli.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/src/cli.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import yargs from "yargs";
|
|
2
|
+
import { generateThirdPartyNotice } from "./generate-third-party-notice.js";
|
|
3
|
+
import { bumpVersionsForPrerelease } from "./prerelease.js";
|
|
4
|
+
main().catch((e) => {
|
|
5
|
+
// eslint-disable-next-line no-console
|
|
6
|
+
console.error(e);
|
|
7
|
+
process.exit(1);
|
|
8
|
+
});
|
|
9
|
+
async function main() {
|
|
10
|
+
await yargs(process.argv.slice(2))
|
|
11
|
+
.scriptName("typespec-build-tool")
|
|
12
|
+
.help()
|
|
13
|
+
.strict()
|
|
14
|
+
.command("generate-third-party-notices", "Generate the third party notice", () => { }, () => generateThirdPartyNotice())
|
|
15
|
+
.command("bump-version-preview <workspaceRoots...>", "Bump all package version for the preview", (cmd) => cmd.positional("workspaceRoots", {
|
|
16
|
+
type: "string",
|
|
17
|
+
array: true,
|
|
18
|
+
demandOption: true,
|
|
19
|
+
}), (args) => bumpVersionsForPrerelease(args.workspaceRoots)).argv;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACjB,sCAAsC;IACtC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC/B,UAAU,CAAC,qBAAqB,CAAC;SACjC,IAAI,EAAE;SACN,MAAM,EAAE;SACR,OAAO,CACN,8BAA8B,EAC9B,iCAAiC,EACjC,GAAG,EAAE,GAAE,CAAC,EACR,GAAG,EAAE,CAAC,wBAAwB,EAAE,CACjC;SACA,OAAO,CACN,0CAA0C,EAC1C,0CAA0C,EAC1C,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,CAAC,UAAU,CAAC,gBAAgB,EAAE;QAC/B,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,IAAI;QACX,YAAY,EAAE,IAAI;KACnB,CAAC,EACJ,CAAC,IAAI,EAAE,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,cAAc,CAAC,CACzD,CAAC,IAAI,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import { ChildProcess, SpawnOptions } from "child_process";
|
|
3
|
+
export declare class CommandFailedError extends Error {
|
|
4
|
+
proc: ChildProcess;
|
|
5
|
+
constructor(msg: string, proc: ChildProcess);
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Return the correct executable name if on unix or windows(with .cmd extension)
|
|
9
|
+
* @param cmd to run
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
export declare function xplatCmd(cmd: string): string;
|
|
13
|
+
export interface RunOptions extends SpawnOptions {
|
|
14
|
+
silent?: boolean;
|
|
15
|
+
encoding?: string;
|
|
16
|
+
ignoreCommandNotFound?: boolean;
|
|
17
|
+
throwOnNonZeroExit?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function run(command: string, args: string[], options?: RunOptions): Promise<{
|
|
20
|
+
exitCode: number;
|
|
21
|
+
stdout: string;
|
|
22
|
+
stderr: string;
|
|
23
|
+
proc: ChildProcess;
|
|
24
|
+
} | {
|
|
25
|
+
exitCode: number;
|
|
26
|
+
stdout: string;
|
|
27
|
+
stderr: string;
|
|
28
|
+
}>;
|
|
29
|
+
export declare function execAsync(command: string, args: string[], options: SpawnOptions): Promise<{
|
|
30
|
+
exitCode: number;
|
|
31
|
+
stdout: string;
|
|
32
|
+
stderr: string;
|
|
33
|
+
proc: ChildProcess;
|
|
34
|
+
}>;
|
|
35
|
+
export declare function clearScreen(): void;
|
|
36
|
+
export declare function logWithTime(msg: string): void;
|
|
37
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/common.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAS,YAAY,EAAE,MAAM,eAAe,CAAC;AAElE,qBAAa,kBAAmB,SAAQ,KAAK;IACX,IAAI,EAAE,YAAY;gBAAtC,GAAG,EAAE,MAAM,EAAS,IAAI,EAAE,YAAY;CAGnD;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,UAEnC;AAED,MAAM,WAAW,UAAW,SAAQ,YAAY;IAC9C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAsB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,UAAU;;;;;;;;;GAgC9E;AAED,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC,CAqBnF;AAED,wBAAgB,WAAW,SAE1B;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,QAItC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { spawn } from "child_process";
|
|
2
|
+
export class CommandFailedError extends Error {
|
|
3
|
+
constructor(msg, proc) {
|
|
4
|
+
super(msg);
|
|
5
|
+
this.proc = proc;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Return the correct executable name if on unix or windows(with .cmd extension)
|
|
10
|
+
* @param cmd to run
|
|
11
|
+
* @returns
|
|
12
|
+
*/
|
|
13
|
+
export function xplatCmd(cmd) {
|
|
14
|
+
return process.platform === "win32" ? `${cmd}.cmd` : cmd;
|
|
15
|
+
}
|
|
16
|
+
export async function run(command, args, options) {
|
|
17
|
+
if (!(options === null || options === void 0 ? void 0 : options.silent)) {
|
|
18
|
+
// eslint-disable-next-line no-console
|
|
19
|
+
console.log();
|
|
20
|
+
// eslint-disable-next-line no-console
|
|
21
|
+
console.log(`> ${command} ${args.join(" ")}`);
|
|
22
|
+
}
|
|
23
|
+
options = {
|
|
24
|
+
stdio: "inherit",
|
|
25
|
+
throwOnNonZeroExit: true,
|
|
26
|
+
...options,
|
|
27
|
+
};
|
|
28
|
+
try {
|
|
29
|
+
const result = await execAsync(command, args, options);
|
|
30
|
+
if (options.throwOnNonZeroExit && result.exitCode !== undefined && result.exitCode !== 0) {
|
|
31
|
+
throw new CommandFailedError(`Command \`${command} ${args.join(" ")}\` failed with exit code ${result.exitCode}`, result.proc);
|
|
32
|
+
}
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
if (options.ignoreCommandNotFound && e.code === "ENOENT") {
|
|
37
|
+
// eslint-disable-next-line no-console
|
|
38
|
+
console.log(`Skipped: Command \`${command}\` not found.`);
|
|
39
|
+
return { exitCode: 0, stdout: "", stderr: "" };
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
throw e;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export async function execAsync(command, args, options) {
|
|
47
|
+
const child = spawn(command, args, options);
|
|
48
|
+
return new Promise((resolve, reject) => {
|
|
49
|
+
var _a, _b;
|
|
50
|
+
child.on("error", (error) => {
|
|
51
|
+
reject(error);
|
|
52
|
+
});
|
|
53
|
+
const stdout = [];
|
|
54
|
+
const stderr = [];
|
|
55
|
+
(_a = child.stdout) === null || _a === void 0 ? void 0 : _a.on("data", (data) => stdout.push(data));
|
|
56
|
+
(_b = child.stderr) === null || _b === void 0 ? void 0 : _b.on("data", (data) => stderr.push(data));
|
|
57
|
+
child.on("exit", (exitCode) => {
|
|
58
|
+
resolve({
|
|
59
|
+
exitCode: exitCode !== null && exitCode !== void 0 ? exitCode : -1,
|
|
60
|
+
stdout: Buffer.concat(stdout).toString(),
|
|
61
|
+
stderr: Buffer.concat(stderr).toString(),
|
|
62
|
+
proc: child,
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
export function clearScreen() {
|
|
68
|
+
process.stdout.write("\x1bc");
|
|
69
|
+
}
|
|
70
|
+
export function logWithTime(msg) {
|
|
71
|
+
const time = new Date().toLocaleTimeString();
|
|
72
|
+
// eslint-disable-next-line no-console
|
|
73
|
+
console.log(`[${time}] ${msg}`);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/common.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const vsMinimumVersion = "16.9";
|
|
2
|
+
export declare const MinimumDotnetVersion: {
|
|
3
|
+
major: number;
|
|
4
|
+
minor: number;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* When publishing the preview version name of the suffix
|
|
8
|
+
* @example 1.2.0-dev.3
|
|
9
|
+
*/
|
|
10
|
+
export declare const PRERELEASE_TYPE = "dev";
|
|
11
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,SAAS,CAAC;AAEvC,eAAO,MAAM,oBAAoB;;;CAGhC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const vsMinimumVersion = "16.9";
|
|
2
|
+
export const MinimumDotnetVersion = {
|
|
3
|
+
major: 6,
|
|
4
|
+
minor: 0,
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* When publishing the preview version name of the suffix
|
|
8
|
+
* @example 1.2.0-dev.3
|
|
9
|
+
*/
|
|
10
|
+
export const PRERELEASE_TYPE = "dev";
|
|
11
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEvC,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;CACT,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { RunOptions } from "./common.js";
|
|
2
|
+
export declare function runDotnet(args: string[], options?: Omit<RunOptions, "stdio" | "throwOnNonZeroExit">): Promise<void>;
|
|
3
|
+
export declare function validateDotnetVersion(): Promise<{
|
|
4
|
+
error?: string;
|
|
5
|
+
}>;
|
|
6
|
+
export declare function ensureDotnetVersion(options?: {
|
|
7
|
+
exitWithSuccessInDevBuilds?: boolean;
|
|
8
|
+
}): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Runs the dotnet formatter.
|
|
11
|
+
*/
|
|
12
|
+
export declare function runDotnetFormat(...args: string[]): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=dotnet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dotnet.d.ts","sourceRoot":"","sources":["../../src/dotnet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzD,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,oBAAoB,CAAM,iBAiB/D;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA4BzE;AAGD,wBAAsB,mBAAmB,CAAC,OAAO,GAAE;IAAE,0BAA0B,CAAC,EAAE,OAAO,CAAA;CAAO,iBAoB/F;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,iBAUtD"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { execAsync, run } from "./common.js";
|
|
2
|
+
import { MinimumDotnetVersion } from "./constants.js";
|
|
3
|
+
export async function runDotnet(args, options = {}) {
|
|
4
|
+
await ensureDotnetVersion();
|
|
5
|
+
const result = await run("dotnet", args, {
|
|
6
|
+
...options,
|
|
7
|
+
throwOnNonZeroExit: false,
|
|
8
|
+
stdio: [null, "pipe", "inherit"],
|
|
9
|
+
});
|
|
10
|
+
if (result.exitCode !== 0) {
|
|
11
|
+
// rush wants errors on stderr to show them to user without --verbose.
|
|
12
|
+
// eslint-disable-next-line no-console
|
|
13
|
+
console.error(result.stdout);
|
|
14
|
+
process.exit(result.exitCode);
|
|
15
|
+
}
|
|
16
|
+
// eslint-disable-next-line no-console
|
|
17
|
+
console.log(result.stdout);
|
|
18
|
+
}
|
|
19
|
+
export async function validateDotnetVersion() {
|
|
20
|
+
try {
|
|
21
|
+
const result = await execAsync("dotnet", ["--version"], {
|
|
22
|
+
stdio: [null, "pipe", "inherit"],
|
|
23
|
+
});
|
|
24
|
+
if (result.exitCode !== 0 || !result.stdout) {
|
|
25
|
+
return { error: `dotnet not found.` };
|
|
26
|
+
}
|
|
27
|
+
const version = result.stdout.toString().trim();
|
|
28
|
+
const [major, minor, _patch] = version.split(".").map((x) => parseInt(x, 10));
|
|
29
|
+
if (major < MinimumDotnetVersion.major ||
|
|
30
|
+
(major === MinimumDotnetVersion.major && minor < MinimumDotnetVersion.minor)) {
|
|
31
|
+
return {
|
|
32
|
+
error: `dotnet version ${version} does not meet minimum requirement ${MinimumDotnetVersion.major}.${MinimumDotnetVersion.minor}.x`,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
return {};
|
|
36
|
+
}
|
|
37
|
+
catch (e) {
|
|
38
|
+
if (e.code === "ENOENT") {
|
|
39
|
+
return { error: "dotnet not found." };
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
throw e;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
let validatedDotnet = false;
|
|
47
|
+
export async function ensureDotnetVersion(options = {}) {
|
|
48
|
+
if (validatedDotnet) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const { error } = await validateDotnetVersion();
|
|
52
|
+
if (error) {
|
|
53
|
+
// If running in CI/AzureDevOps fail if dotnet is invalid.
|
|
54
|
+
if (process.env.CI || process.env.TF_BUILD || !options.exitWithSuccessInDevBuilds) {
|
|
55
|
+
// eslint-disable-next-line no-console
|
|
56
|
+
console.error(`error: ${error}`);
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// eslint-disable-next-line no-console
|
|
61
|
+
console.log(`Skipping build step: ${error}`);
|
|
62
|
+
process.exit(0);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
validatedDotnet = true;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Runs the dotnet formatter.
|
|
69
|
+
*/
|
|
70
|
+
export async function runDotnetFormat(...args) {
|
|
71
|
+
return runDotnet([
|
|
72
|
+
"format",
|
|
73
|
+
"whitespace",
|
|
74
|
+
".",
|
|
75
|
+
`--exclude`,
|
|
76
|
+
"**/node_modules/**/*",
|
|
77
|
+
"--folder",
|
|
78
|
+
...args,
|
|
79
|
+
]);
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=dotnet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dotnet.js","sourceRoot":"","sources":["../../src/dotnet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-third-party-notice.d.ts","sourceRoot":"","sources":["../../src/generate-third-party-notice.ts"],"names":[],"mappings":"AAKA,wBAAsB,wBAAwB,kBAqC7C"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { readdir, readFile, stat, writeFile } from "fs/promises";
|
|
2
|
+
import { basename, dirname, join, resolve } from "path";
|
|
3
|
+
const skipDirs = new Set(["node_modules", "dist-dev"]);
|
|
4
|
+
export async function generateThirdPartyNotice() {
|
|
5
|
+
const root = resolve("./");
|
|
6
|
+
const rootName = basename(root);
|
|
7
|
+
const packages = await findThirdPartyPackages();
|
|
8
|
+
const packageRoots = [...packages.keys()].sort((a, b) => packages.get(a).name.localeCompare(packages.get(b).name));
|
|
9
|
+
let text = `${rootName}
|
|
10
|
+
|
|
11
|
+
THIRD-PARTY SOFTWARE NOTICES AND INFORMATION
|
|
12
|
+
Do Not Translate or Localize
|
|
13
|
+
|
|
14
|
+
This project incorporates components from the projects listed below. The
|
|
15
|
+
original copyright notices and the licenses under which Microsoft received such
|
|
16
|
+
components are set forth below. Microsoft reserves all rights not expressly
|
|
17
|
+
granted herein, whether by implication, estoppel or otherwise.
|
|
18
|
+
`;
|
|
19
|
+
let i = 1;
|
|
20
|
+
for (const packageRoot of packageRoots) {
|
|
21
|
+
const pkg = packages.get(packageRoot);
|
|
22
|
+
const url = getUrl(pkg);
|
|
23
|
+
text += `\n${i++}. ${pkg.name} version ${pkg.version} (${url})`;
|
|
24
|
+
}
|
|
25
|
+
for (const packageRoot of packageRoots) {
|
|
26
|
+
const pkg = packages.get(packageRoot);
|
|
27
|
+
const license = await getLicense(packageRoot);
|
|
28
|
+
text += `\n\n
|
|
29
|
+
%% ${pkg.name} NOTICES AND INFORMATION BEGIN HERE
|
|
30
|
+
=====================================================
|
|
31
|
+
${license}
|
|
32
|
+
=====================================================");
|
|
33
|
+
END OF ${pkg.name} NOTICES AND INFORMATION`;
|
|
34
|
+
}
|
|
35
|
+
await writeFile("ThirdPartyNotices.txt", text);
|
|
36
|
+
}
|
|
37
|
+
async function findThirdPartyPackages() {
|
|
38
|
+
const root = resolve("./");
|
|
39
|
+
const rootName = basename(root);
|
|
40
|
+
const packages = new Map();
|
|
41
|
+
for await (const map of projectSourcemaps(root)) {
|
|
42
|
+
const contents = JSON.parse(await readFile(map, "utf-8"));
|
|
43
|
+
const sources = contents.sources;
|
|
44
|
+
for (const source of sources) {
|
|
45
|
+
const sourcePath = join(dirname(map), source);
|
|
46
|
+
const packageRoot = await getPackageRoot(sourcePath);
|
|
47
|
+
const pkg = JSON.parse(await readFile(join(packageRoot, "package.json"), "utf-8"));
|
|
48
|
+
if (pkg.name === rootName || /microsoft/i.test(JSON.stringify(pkg.author))) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
if (!packages.has(packageRoot)) {
|
|
52
|
+
packages.set(packageRoot, pkg);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return packages;
|
|
57
|
+
}
|
|
58
|
+
async function* projectSourcemaps(rootPath) {
|
|
59
|
+
const files = await readdir(rootPath, { withFileTypes: true });
|
|
60
|
+
for (const file of files) {
|
|
61
|
+
const filepath = join(rootPath, file.name);
|
|
62
|
+
if (file.isDirectory()) {
|
|
63
|
+
if (skipDirs.has(file.name)) {
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
yield* projectSourcemaps(filepath);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
if (file.name.endsWith(".js.map")) {
|
|
70
|
+
yield filepath;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async function getPackageRoot(filename) {
|
|
76
|
+
const dir = dirname(filename);
|
|
77
|
+
try {
|
|
78
|
+
const pkgPath = join(dir, "package.json");
|
|
79
|
+
await stat(pkgPath);
|
|
80
|
+
return dir;
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
if (e.code === "ENOENT") {
|
|
84
|
+
return getPackageRoot(dir);
|
|
85
|
+
}
|
|
86
|
+
throw e;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function getUrl(pkg) {
|
|
90
|
+
var _a;
|
|
91
|
+
let url = pkg.repository;
|
|
92
|
+
if (typeof url !== "string") {
|
|
93
|
+
url = (_a = pkg.repository) === null || _a === void 0 ? void 0 : _a.url;
|
|
94
|
+
}
|
|
95
|
+
if (!url) {
|
|
96
|
+
throw new Error(`Cannot find URL for ${pkg}`);
|
|
97
|
+
}
|
|
98
|
+
url = url.replace(/^git\+/, "");
|
|
99
|
+
url = url.replace(/\.git$/, "");
|
|
100
|
+
url = url.replace(/^git:\/\//, "https://");
|
|
101
|
+
return url;
|
|
102
|
+
}
|
|
103
|
+
async function getLicense(packageRoot) {
|
|
104
|
+
for (const licenseName of ["LICENSE", "LICENSE.txt", "LICENSE.md", "LICENSE-MIT"]) {
|
|
105
|
+
const licensePath = join(packageRoot, licenseName);
|
|
106
|
+
try {
|
|
107
|
+
let text = await readFile(licensePath, "utf-8");
|
|
108
|
+
text = text.replace("<", "<");
|
|
109
|
+
text = text.replace(">", ">");
|
|
110
|
+
return text;
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
if (err.code === "ENOENT") {
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
throw err;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
throw new Error(`Cannot get license for ${packageRoot}, license file not found.`);
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=generate-third-party-notice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-third-party-notice.js","sourceRoot":"","sources":["../../src/generate-third-party-notice.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prerelease.d.ts","sourceRoot":"","sources":["../../src/prerelease.ts"],"names":[],"mappings":"AAkJA,wBAAsB,yBAAyB,CAAC,cAAc,EAAE,MAAM,EAAE,iBAcvE"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
import { lstat, readdir, readFile, writeFile } from "fs/promises";
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
import stripJsonComments from "strip-json-comments";
|
|
5
|
+
async function getAllChanges(workspaceRoot) {
|
|
6
|
+
const changeDir = join(workspaceRoot, "common", "changes");
|
|
7
|
+
const files = await findAllFiles(changeDir);
|
|
8
|
+
return await Promise.all(files.map((x) => readJsonFile(x)));
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* @returns map of package to number of changes.
|
|
12
|
+
*/
|
|
13
|
+
async function getChangeCountPerPackage(workspaceRoot) {
|
|
14
|
+
const changes = await getAllChanges(workspaceRoot);
|
|
15
|
+
console.log("Changes", changes);
|
|
16
|
+
const changeCounts = {};
|
|
17
|
+
for (const change of changes) {
|
|
18
|
+
if (!(change.packageName in changeCounts)) {
|
|
19
|
+
// Count all changes that are not "none"
|
|
20
|
+
changeCounts[change.packageName] = 0;
|
|
21
|
+
}
|
|
22
|
+
changeCounts[change.packageName] += change.changes.length;
|
|
23
|
+
}
|
|
24
|
+
return changeCounts;
|
|
25
|
+
}
|
|
26
|
+
async function getPackages(workspaceRoot) {
|
|
27
|
+
const rushJson = await readJsonFile(join(workspaceRoot, "rush.json"));
|
|
28
|
+
const paths = {};
|
|
29
|
+
for (const project of rushJson.projects) {
|
|
30
|
+
const packagePath = join(workspaceRoot, project.projectFolder);
|
|
31
|
+
const pkg = await readJsonFile(join(packagePath, "package.json"));
|
|
32
|
+
paths[project.packageName] = {
|
|
33
|
+
path: packagePath,
|
|
34
|
+
version: pkg.version,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
return paths;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Update the package dependencies to match the newly updated version.
|
|
41
|
+
* @param {*} packageManifest
|
|
42
|
+
* @param {*} updatedPackages
|
|
43
|
+
*/
|
|
44
|
+
function updateDependencyVersions(packageManifest, updatedPackages) {
|
|
45
|
+
const clone = {
|
|
46
|
+
...packageManifest,
|
|
47
|
+
};
|
|
48
|
+
for (const depType of ["dependencies", "devDependencies", "peerDependencies"]) {
|
|
49
|
+
const dependencies = {};
|
|
50
|
+
const currentDeps = packageManifest[depType];
|
|
51
|
+
if (currentDeps) {
|
|
52
|
+
for (const [name, currentVersion] of Object.entries(currentDeps)) {
|
|
53
|
+
const updatedPackage = updatedPackages[name];
|
|
54
|
+
if (updatedPackage) {
|
|
55
|
+
// Loose dependency accept anything above the last release. This make sure that preview release of only one package need to be bumped without needing all the other as well.
|
|
56
|
+
dependencies[name] = `>=${updatedPackage.oldVersion}`;
|
|
57
|
+
// change to this line to have strict dependency for preview versions
|
|
58
|
+
// dependencies[name] = `~${updatedPackage.newVersion}`;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
dependencies[name] = currentVersion;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
clone[depType] = dependencies;
|
|
66
|
+
}
|
|
67
|
+
return clone;
|
|
68
|
+
}
|
|
69
|
+
function bumpVersion(version, changeCount) {
|
|
70
|
+
if (changeCount === 0) {
|
|
71
|
+
return version;
|
|
72
|
+
}
|
|
73
|
+
const [major, minor] = version.split(".").map((x) => parseInt(x, 10));
|
|
74
|
+
console.log(`Bumping version ${version} to ${major}.${minor + 1}.0-dev.${changeCount}`);
|
|
75
|
+
return `${major}.${minor + 1}.0-dev.${changeCount}`;
|
|
76
|
+
}
|
|
77
|
+
async function addPrereleaseNumber(changeCounts, packages) {
|
|
78
|
+
var _a;
|
|
79
|
+
const updatedManifests = {};
|
|
80
|
+
for (const [packageName, packageInfo] of Object.entries(packages)) {
|
|
81
|
+
const changeCount = (_a = changeCounts[packageName]) !== null && _a !== void 0 ? _a : 0;
|
|
82
|
+
const packageJsonPath = join(packageInfo.path, "package.json");
|
|
83
|
+
const packageJsonContent = await readJsonFile(packageJsonPath);
|
|
84
|
+
const newVersion = bumpVersion(packageInfo.version, changeCount);
|
|
85
|
+
console.log(`Setting version for ${packageName} to '${newVersion}'`);
|
|
86
|
+
updatedManifests[packageName] = {
|
|
87
|
+
packageJsonPath,
|
|
88
|
+
oldVersion: packageJsonContent.version,
|
|
89
|
+
newVersion: newVersion,
|
|
90
|
+
manifest: {
|
|
91
|
+
...packageJsonContent,
|
|
92
|
+
version: newVersion,
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
for (const { packageJsonPath, manifest } of Object.values(updatedManifests)) {
|
|
97
|
+
const newManifest = updateDependencyVersions(manifest, updatedManifests);
|
|
98
|
+
await writeFile(packageJsonPath, JSON.stringify(newManifest, null, 2));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
export async function bumpVersionsForPrerelease(workspaceRoots) {
|
|
102
|
+
let changeCounts = {};
|
|
103
|
+
let packages = {};
|
|
104
|
+
for (const workspaceRoot of workspaceRoots) {
|
|
105
|
+
changeCounts = { ...changeCounts, ...(await getChangeCountPerPackage(workspaceRoot)) };
|
|
106
|
+
packages = { ...packages, ...(await getPackages(workspaceRoot)) };
|
|
107
|
+
}
|
|
108
|
+
console.log("Change counts: ", changeCounts);
|
|
109
|
+
console.log("Packages", packages);
|
|
110
|
+
// Bumping with rush publish so rush computes from the changes what will be the next non prerelease version.
|
|
111
|
+
console.log("Adding prerelease number");
|
|
112
|
+
await addPrereleaseNumber(changeCounts, packages);
|
|
113
|
+
}
|
|
114
|
+
async function findAllFiles(dir) {
|
|
115
|
+
const files = [];
|
|
116
|
+
for (const file of await readdir(dir)) {
|
|
117
|
+
const path = join(dir, file);
|
|
118
|
+
const stat = await lstat(path);
|
|
119
|
+
if (stat.isDirectory()) {
|
|
120
|
+
files.push(...(await findAllFiles(path)));
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
files.push(path);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return files;
|
|
127
|
+
}
|
|
128
|
+
async function readJsonFile(filename) {
|
|
129
|
+
const content = await readFile(filename);
|
|
130
|
+
return JSON.parse(stripJsonComments(content.toString()));
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=prerelease.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prerelease.js","sourceRoot":"","sources":["../../src/prerelease.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visualstudio.d.ts","sourceRoot":"","sources":["../../src/visualstudio.ts"],"names":[],"mappings":"AAaA,wBAAsB,0BAA0B,IAAI,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAsBhG"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { join } from "path";
|
|
2
|
+
import { run } from "./common.js";
|
|
3
|
+
import { vsMinimumVersion } from "./constants.js";
|
|
4
|
+
const vswhereArgs = [
|
|
5
|
+
"-latest",
|
|
6
|
+
"-prerelease",
|
|
7
|
+
"-version",
|
|
8
|
+
`[${vsMinimumVersion},`,
|
|
9
|
+
"-property",
|
|
10
|
+
"installationPath",
|
|
11
|
+
];
|
|
12
|
+
export async function getVisualStudioMsBuildPath() {
|
|
13
|
+
if (process.platform !== "win32") {
|
|
14
|
+
return { error: "Not on windows." };
|
|
15
|
+
}
|
|
16
|
+
const vswhere = join(process.env["ProgramFiles(x86)"], "Microsoft Visual Studio/Installer/vswhere.exe");
|
|
17
|
+
const result = await run(vswhere, vswhereArgs, {
|
|
18
|
+
ignoreCommandNotFound: true,
|
|
19
|
+
throwOnNonZeroExit: false,
|
|
20
|
+
encoding: "utf-8",
|
|
21
|
+
stdio: [null, "pipe", "inherit"],
|
|
22
|
+
});
|
|
23
|
+
if (!result || result.exitCode !== 0 || !result.stdout) {
|
|
24
|
+
return { error: `Visual Studio ${vsMinimumVersion} or later not found` };
|
|
25
|
+
}
|
|
26
|
+
return { path: join(result.stdout.trim(), "MSBuild/Current/Bin/MSBuild.exe") };
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=visualstudio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visualstudio.js","sourceRoot":"","sources":["../../src/visualstudio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,WAAW,GAAG;IAClB,SAAS;IACT,aAAa;IACb,UAAU;IACV,IAAI,gBAAgB,GAAG;IACvB,WAAW;IACX,kBAAkB;CACnB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,0BAA0B;IAC9C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;QAChC,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;KACrC;IAED,MAAM,OAAO,GAAG,IAAI,CAClB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAE,EACjC,+CAA+C,CAChD,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE;QAC7C,qBAAqB,EAAE,IAAI;QAC3B,kBAAkB,EAAE,KAAK;QACzB,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC;KACjC,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;QACtD,OAAO,EAAE,KAAK,EAAE,iBAAiB,gBAAgB,qBAAqB,EAAE,CAAC;KAC1E;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,iCAAiC,CAAC,EAAE,CAAC;AACjF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/watch.ts"],"names":[],"mappings":"AAIA,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,QAmDlE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import chokidar from "chokidar";
|
|
2
|
+
import { resolve } from "path";
|
|
3
|
+
import { clearScreen, logWithTime } from "./common.js";
|
|
4
|
+
export function runWatch(pattern, build, options) {
|
|
5
|
+
let lastBuildTime;
|
|
6
|
+
pattern = resolve(pattern);
|
|
7
|
+
start();
|
|
8
|
+
function start() {
|
|
9
|
+
// build once up-front
|
|
10
|
+
runBuild();
|
|
11
|
+
const watcher = chokidar.watch(pattern, { interval: 0.2, ...options });
|
|
12
|
+
// then build again on any change
|
|
13
|
+
watcher.on("add", (file) => runBuild(`${file} created`));
|
|
14
|
+
watcher.on("removed", (file) => runBuild(`${file} removed`));
|
|
15
|
+
watcher.on("change", (file, stats) => runBuild(`${file} changed`, stats === null || stats === void 0 ? void 0 : stats.mtime));
|
|
16
|
+
}
|
|
17
|
+
function runBuild(changeDescription, changeTime) {
|
|
18
|
+
runBuildAsync(changeDescription, changeTime).catch((err) => {
|
|
19
|
+
// eslint-disable-next-line no-console
|
|
20
|
+
console.error(err.stack);
|
|
21
|
+
process.exit(1);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
async function runBuildAsync(changeDescription, changeTime) {
|
|
25
|
+
if (changeTime && lastBuildTime && changeTime < lastBuildTime) {
|
|
26
|
+
// Don't rebuild if a change happened before the last build kicked off.
|
|
27
|
+
// Defends against duplicate events and building more than once when a
|
|
28
|
+
// bunch of files are changed at the same time.
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
lastBuildTime = new Date();
|
|
32
|
+
if (changeDescription) {
|
|
33
|
+
clearScreen();
|
|
34
|
+
logWithTime(`File change detected: ${changeDescription}. Running build.`);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
logWithTime("Starting build in watch mode.");
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
await build();
|
|
41
|
+
logWithTime("Build succeeded. Waiting for file changes.");
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
// eslint-disable-next-line no-console
|
|
45
|
+
console.error(err.stack);
|
|
46
|
+
logWithTime(`Build failed. Waiting for file changes.`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/watch.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEvD,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,KAAU,EAAE,OAAa;IACjE,IAAI,aAAmB,CAAC;IACxB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3B,KAAK,EAAE,CAAC;IAER,SAAS,KAAK;QACZ,sBAAsB;QACtB,QAAQ,EAAE,CAAC;QAEX,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;QAEvE,iCAAiC;QACjC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,UAAU,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAC,CAAC,CAAC;IACnF,CAAC;IAED,SAAS,QAAQ,CAAC,iBAA0B,EAAE,UAAiB;QAC7D,aAAa,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACzD,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,aAAa,CAAC,iBAA0B,EAAE,UAAiB;QACxE,IAAI,UAAU,IAAI,aAAa,IAAI,UAAU,GAAG,aAAa,EAAE;YAC7D,uEAAuE;YACvE,sEAAsE;YACtE,+CAA+C;YAC/C,OAAO;SACR;QAED,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC;QAC3B,IAAI,iBAAiB,EAAE;YACrB,WAAW,EAAE,CAAC;YACd,WAAW,CAAC,yBAAyB,iBAAiB,kBAAkB,CAAC,CAAC;SAC3E;aAAM;YACL,WAAW,CAAC,+BAA+B,CAAC,CAAC;SAC9C;QAED,IAAI;YACF,MAAM,KAAK,EAAE,CAAC;YACd,WAAW,CAAC,4CAA4C,CAAC,CAAC;SAC3D;QAAC,OAAO,GAAQ,EAAE;YACjB,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACzB,WAAW,CAAC,yCAAyC,CAAC,CAAC;SACxD;IACH,CAAC;AACH,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@typespec/internal-build-utils",
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"author": "Microsoft Corporation",
|
|
5
|
+
"description": "Internal library to TypeSpec providing helpers to build.",
|
|
6
|
+
"homepage": "https://microsoft.github.io/typespec",
|
|
7
|
+
"readme": "https://github.com/Azure/typespec/blob/master/README.md",
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/Azure/typespec.git"
|
|
12
|
+
},
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/Azure/typespec/issues"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"typespec"
|
|
18
|
+
],
|
|
19
|
+
"type": "module",
|
|
20
|
+
"main": "dist/src/index.js",
|
|
21
|
+
"bin": {
|
|
22
|
+
"typespec-build-tool": "cmd/cli.js"
|
|
23
|
+
},
|
|
24
|
+
"engines": {
|
|
25
|
+
"node": ">=16.0.0"
|
|
26
|
+
},
|
|
27
|
+
"files": [
|
|
28
|
+
"lib/*.tsp",
|
|
29
|
+
"dist/**",
|
|
30
|
+
"!dist/test/**"
|
|
31
|
+
],
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"yargs": "~17.6.2",
|
|
34
|
+
"strip-json-comments": "~4.0.0",
|
|
35
|
+
"cspell": "~6.14.3"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@types/mocha": "~10.0.0",
|
|
39
|
+
"@types/node": "~18.11.9",
|
|
40
|
+
"@types/yargs": "~17.0.2",
|
|
41
|
+
"@typespec/eslint-config-typespec": "~0.6.0",
|
|
42
|
+
"eslint": "^8.12.0",
|
|
43
|
+
"mocha": "~10.1.0",
|
|
44
|
+
"mocha-junit-reporter": "~2.2.0",
|
|
45
|
+
"mocha-multi-reporters": "~1.5.1",
|
|
46
|
+
"c8": "~7.12.0",
|
|
47
|
+
"rimraf": "~3.0.2",
|
|
48
|
+
"typescript": "~4.9.3",
|
|
49
|
+
"chokidar": "~3.5.3"
|
|
50
|
+
},
|
|
51
|
+
"scripts": {
|
|
52
|
+
"clean": "rimraf ./dist ./temp",
|
|
53
|
+
"build": "tsc -p .",
|
|
54
|
+
"watch": "tsc -p . --watch",
|
|
55
|
+
"test": "mocha",
|
|
56
|
+
"test-official": "c8 mocha --forbid-only --reporter mocha-multi-reporters",
|
|
57
|
+
"lint": "eslint . --ext .ts --max-warnings=0",
|
|
58
|
+
"lint:fix": "eslint . --fix --ext .ts"
|
|
59
|
+
}
|
|
60
|
+
}
|