@matter/tools
Advanced tools
Comparing version 0.11.0-alpha.0-20241027-e40e1664f to 0.11.0-alpha.0-20241028-39fc76758
"use strict"; | ||
var __create = Object.create; | ||
var __defProp = Object.defineProperty; | ||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
var __getOwnPropNames = Object.getOwnPropertyNames; | ||
var __getProtoOf = Object.getPrototypeOf; | ||
var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
@@ -20,10 +18,2 @@ var __export = (target, all) => { | ||
}; | ||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( | ||
// If the importer is in node compatibility mode or this is not an ESM | ||
// file that has been converted to a CommonJS file using a Babel- | ||
// compatible transform (i.e. "__esModule" has not been set), then set | ||
// "default" to the CommonJS "module.exports" for node compatibility. | ||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, | ||
mod | ||
)); | ||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); | ||
@@ -36,3 +26,2 @@ var builder_exports = {}; | ||
module.exports = __toCommonJS(builder_exports); | ||
var import_ansi_colors = __toESM(require("ansi-colors"), 1); | ||
var import_crypto = require("crypto"); | ||
@@ -151,3 +140,4 @@ var import_error = require("./error.js"); | ||
progress.failure("Terminating due to type errors"); | ||
process.stderr.write(e.diagnostics); | ||
process.stderr.write(`${e.diagnostics} | ||
`); | ||
process.exit(1); | ||
@@ -158,8 +148,22 @@ } | ||
} | ||
const formats = Array(); | ||
if (targets.has("esm" /* esm */)) { | ||
await this.#transpile(project, progress, "esm" /* esm */); | ||
formats.push("esm"); | ||
} | ||
if (targets.has("cjs" /* cjs */)) { | ||
await this.#transpile(project, progress, "cjs" /* cjs */); | ||
formats.push("cjs"); | ||
} | ||
if (formats.length) { | ||
const groups = [project.pkg.isLibrary ? "library" : "app"]; | ||
if (project.pkg.hasTests) { | ||
groups.push("tests"); | ||
} | ||
const formatDesc = formats.map(progress.emphasize).join("+"); | ||
const groupDesc = groups.map(progress.emphasize).join("+"); | ||
await progress.run(`Transpile ${groupDesc} to ${formatDesc}`, async () => { | ||
for (const format of formats) { | ||
await this.#transpile(project, format); | ||
} | ||
}); | ||
} | ||
await config?.after?.({ project }); | ||
@@ -173,13 +177,6 @@ if (!this.options.targets?.length) { | ||
} | ||
async #transpile(project, progress, format) { | ||
const fmt = format.toUpperCase(); | ||
await progress.run( | ||
`Transpile ${progress.emphasize(project.pkg.isLibrary ? "library" : "app")} to ${import_ansi_colors.default.bold(fmt)}`, | ||
() => project.buildSource(format) | ||
); | ||
async #transpile(project, format) { | ||
await project.buildSource(format); | ||
if (project.pkg.hasTests) { | ||
await progress.run( | ||
`Transpile ${progress.emphasize("tests")} to ${import_ansi_colors.default.bold(fmt)}`, | ||
() => project.buildTests(format) | ||
); | ||
await project.buildTests(format); | ||
} | ||
@@ -186,0 +183,0 @@ } |
"use strict"; | ||
var __create = Object.create; | ||
var __defProp = Object.defineProperty; | ||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
var __getOwnPropNames = Object.getOwnPropertyNames; | ||
var __getProtoOf = Object.getPrototypeOf; | ||
var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
@@ -20,10 +18,2 @@ var __export = (target, all) => { | ||
}; | ||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( | ||
// If the importer is in node compatibility mode or this is not an ESM | ||
// file that has been converted to a CommonJS file using a Babel- | ||
// compatible transform (i.e. "__esModule" has not been set), then set | ||
// "default" to the CommonJS "module.exports" for node compatibility. | ||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, | ||
mod | ||
)); | ||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); | ||
@@ -35,4 +25,3 @@ var cli_exports = {}; | ||
module.exports = __toCommonJS(cli_exports); | ||
var import_yargs = __toESM(require("yargs"), 1); | ||
var import_helpers = require("yargs/helpers"); | ||
var import_commander = require("../util/commander.js"); | ||
var import_builder = require("./builder.js"); | ||
@@ -58,4 +47,26 @@ var import_graph = require("./graph.js"); | ||
let mode = 0 /* BuildProject */; | ||
const args = await (0, import_yargs.default)((0, import_helpers.hideBin)(argv)).usage("Builds packages adhering to matter.js standards.").option("prefix", { alias: "p", default: ".", type: "string", describe: "specify build directory" }).option("clean", { alias: "c", default: false, type: "boolean", describe: "clean before build" }).option("workspaces", { alias: "w", default: false, type: "boolean", describe: "build all workspace packages" }).option("dependencies", { alias: "d", default: false, type: "boolean", describe: "build dependencies" }).command("*", "build types and both JS files", () => { | ||
}).command("clean", "remove build and dist directories", () => targets.push(import_builder.Target.clean)).command("types", "build type definitions", () => targets.push(import_builder.Target.types)).command("esm", "build JS (ES6 modules)", () => targets.push(import_builder.Target.esm)).command("cjs", "build JS (CommonJS modules)", () => targets.push(import_builder.Target.cjs)).command("graph", "display the workspace graph", () => mode = 3 /* DisplayGraph */).command("tsconfigs", "sync all tsconfigs with package.json", () => mode = 4 /* SyncTsconfigs */).wrap(Math.min(process.stdout.columns, 80)).strict().argv; | ||
const program = (0, import_commander.commander)("matter-build", "Builds packages adhering to matter.js standards.").option("-p, --prefix <path>", "specify build directory", ".").option("-c, --clean", "clean before build", false).option("-w, --workspaces", "build all workspace packages", false).option("-d, --dependencies", "build dependencies", false); | ||
program.command("build").description("(default) build JS and type definitions").action(() => { | ||
}); | ||
program.command("clean").description("remove build and dist directories").action(() => { | ||
targets.push(import_builder.Target.clean); | ||
}); | ||
program.command("types").description("build type definitions").action(() => { | ||
targets.push(import_builder.Target.types); | ||
}); | ||
program.command("esm").description("build JS (ES6 modules)").action(() => { | ||
targets.push(import_builder.Target.esm); | ||
}); | ||
program.command("cjs").description("build JS (CommonJS modules)").action(() => { | ||
targets.push(import_builder.Target.cjs); | ||
}); | ||
program.command("graph").description("display the workspace graph").action(() => { | ||
mode = 3 /* DisplayGraph */; | ||
}); | ||
program.command("tsconfigs").description("sync all tsconfigs with package.json").action(() => { | ||
mode = 4 /* SyncTsconfigs */; | ||
}); | ||
program.action(() => { | ||
}); | ||
const args = program.parse(argv).opts(); | ||
if (mode === 0 /* BuildProject */) { | ||
@@ -62,0 +73,0 @@ if (args.workspaces) { |
@@ -34,3 +34,2 @@ "use strict"; | ||
module.exports = __toCommonJS(graph_exports); | ||
var import_map_workspaces = __toESM(require("@npmcli/map-workspaces"), 1); | ||
var import_ansi_colors = __toESM(require("ansi-colors"), 1); | ||
@@ -177,7 +176,7 @@ var import_package = require("../util/package.js"); | ||
static async #loadNodes(workspace) { | ||
const workspaces = await (0, import_map_workspaces.default)({ pkg: workspace.json, cwd: workspace.path }); | ||
const workspaces = workspace.json.workspaces; | ||
const nodeMap = {}; | ||
const allDeps = {}; | ||
for (const path of workspaces.values()) { | ||
const pkg = new import_package.Package({ path }); | ||
const pkg = new import_package.Package({ path: workspace.resolve(path) }); | ||
allDeps[pkg.json.name] = pkg.dependencies; | ||
@@ -184,0 +183,0 @@ nodeMap[pkg.json.name] = { |
@@ -27,3 +27,2 @@ "use strict"; | ||
var import_promises = require("fs/promises"); | ||
var import_glob = require("glob"); | ||
var import_os = require("os"); | ||
@@ -50,3 +49,5 @@ var import_path = require("path"); | ||
if (!this.pkg.hasSrc) { | ||
throw new Error(`Found package ${this.pkg.json.name} but no src directory is present`); | ||
throw new Error( | ||
`Found package ${this.pkg.json.name} but src directory is not present or not referenced in tsconfig.json` | ||
); | ||
} | ||
@@ -146,3 +147,6 @@ } | ||
for (const format of formats) { | ||
await (0, import_promises.cp)(this.pkg.resolve(source), this.pkg.resolve((0, import_path.join)("dist", format, dest))); | ||
await (0, import_promises.cp)(this.pkg.resolve(source), this.pkg.resolve((0, import_path.join)("dist", format, dest)), { | ||
recursive: true, | ||
force: true | ||
}); | ||
} | ||
@@ -195,7 +199,7 @@ } | ||
async #targetsOf(indir, outdir, ...extensions) { | ||
indir = this.pkg.resolve(indir).replace(/\\/g, "/"); | ||
const inputPrefixLength = this.pkg.resolve(indir).length + 1; | ||
outdir = this.pkg.resolve(outdir).replace(/\\/g, "/"); | ||
return (await (0, import_glob.glob)(extensions.map((ext) => `${indir}/**/*.${ext}`))).map((file) => ({ | ||
return (await this.pkg.glob(extensions.map((ext) => `${indir}/**/*.${ext}`))).map((file) => ({ | ||
in: file, | ||
out: `${outdir}/${file.slice(indir.length + 1)}` | ||
out: `${outdir}/${file.slice(inputPrefixLength)}` | ||
})); | ||
@@ -202,0 +206,0 @@ } |
@@ -62,3 +62,3 @@ "use strict"; | ||
} | ||
const deps = node.dependencies.map((dep) => dep.pkg.resolve("src")).filter((p) => !p.match(/packages[\\/]tools/)); | ||
const deps = node.dependencies.filter((dep) => dep.pkg.isLibrary).map((dep) => dep.pkg.resolve("src")).filter((p) => !p.match(/packages[\\/]tools/)); | ||
const desired = [.../* @__PURE__ */ new Set([...deps, ...extraRefs])]; | ||
@@ -65,0 +65,0 @@ const newReferences = desired.map((ref) => ({ path: (0, import_path.relative)(path, ref).replace(/\\/g, "/") })).sort((ref1, ref2) => ref1.path.localeCompare(ref2.path)); |
@@ -6,11 +6,9 @@ /** | ||
*/ | ||
import "./testing/global-declarations.js"; | ||
export * from "./building/builder.js"; | ||
export * from "./building/graph.js"; | ||
export * from "./building/project.js"; | ||
export * from "./testing/chip.js"; | ||
export * from "./testing/mocharc.cjs"; | ||
export * from "./util/docker.js"; | ||
export * from "./util/commander.js"; | ||
export * from "./util/files.js"; | ||
export * from "./util/package.js"; | ||
export * from "./util/progress.js"; | ||
export * from "./util/wtf.js"; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -18,11 +18,9 @@ "use strict"; | ||
module.exports = __toCommonJS(src_exports); | ||
var import_global_declarations = require("./testing/global-declarations.js"); | ||
__reExport(src_exports, require("./building/builder.js"), module.exports); | ||
__reExport(src_exports, require("./building/graph.js"), module.exports); | ||
__reExport(src_exports, require("./building/project.js"), module.exports); | ||
__reExport(src_exports, require("./testing/chip.js"), module.exports); | ||
__reExport(src_exports, require("./testing/mocharc.cjs"), module.exports); | ||
__reExport(src_exports, require("./util/docker.js"), module.exports); | ||
__reExport(src_exports, require("./util/commander.js"), module.exports); | ||
__reExport(src_exports, require("./util/files.js"), module.exports); | ||
__reExport(src_exports, require("./util/package.js"), module.exports); | ||
__reExport(src_exports, require("./util/progress.js"), module.exports); | ||
__reExport(src_exports, require("./util/wtf.js"), module.exports); | ||
/** | ||
@@ -29,0 +27,0 @@ * @license |
@@ -6,4 +6,6 @@ /** | ||
*/ | ||
export * from "./commander.js"; | ||
export * from "./errors.js"; | ||
export * from "./files.js"; | ||
export * from "./package.js"; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -18,3 +18,5 @@ "use strict"; | ||
module.exports = __toCommonJS(util_exports); | ||
__reExport(util_exports, require("./commander.js"), module.exports); | ||
__reExport(util_exports, require("./errors.js"), module.exports); | ||
__reExport(util_exports, require("./files.js"), module.exports); | ||
__reExport(util_exports, require("./package.js"), module.exports); | ||
@@ -21,0 +23,0 @@ /** |
@@ -28,5 +28,5 @@ /** | ||
get hasCodegen(): boolean; | ||
resolve(path: string): string; | ||
resolve(...paths: string[]): string; | ||
relative(path: string): string; | ||
glob(pattern: string): Promise<string[]>; | ||
glob(pattern: string | string[]): Promise<string[]>; | ||
start(what: string): Progress; | ||
@@ -43,2 +43,3 @@ lastModified(...paths: string[]): Promise<number>; | ||
resolveExport(name: string, type?: "cjs" | "esm"): string; | ||
findPackage(name: string): Package; | ||
resolveImport(name: string, type?: "cjs" | "esm"): string; | ||
@@ -45,0 +46,0 @@ hasFile(path: string): boolean; |
@@ -29,6 +29,5 @@ "use strict"; | ||
var import_promises = require("fs/promises"); | ||
var import_glob = require("glob"); | ||
var import_path = require("path"); | ||
var import_files = require("../testing/files.js"); | ||
var import_errors = require("./errors.js"); | ||
var import_files = require("./files.js"); | ||
var import_progress = require("./progress.js"); | ||
@@ -90,2 +89,11 @@ var import_tools_path = require("./tools-path.cjs"); | ||
this.hasTests = isDirectory(this.resolve("test")); | ||
const refs = (0, import_files.maybeReadJsonSync)(this.resolve("tsconfig.json"))?.references; | ||
if (refs !== void 0) { | ||
if (!refs.find((ref) => this.resolve(ref.path) === this.resolve("src"))) { | ||
this.hasSrc = false; | ||
} | ||
if (!refs.find((ref) => this.resolve(ref.path) === this.resolve("test"))) { | ||
this.hasTests = false; | ||
} | ||
} | ||
this.isLibrary = !!(this.json.main || this.json.module || this.json.exports); | ||
@@ -103,4 +111,4 @@ this.hasConfig = this.hasFile(this.resolve(CONFIG_PATH)); | ||
} | ||
resolve(path) { | ||
return (0, import_path.resolve)(this.path, path); | ||
resolve(...paths) { | ||
return (0, import_path.resolve)(this.path, ...paths); | ||
} | ||
@@ -111,4 +119,8 @@ relative(path) { | ||
async glob(pattern) { | ||
pattern = this.resolve(pattern).replace(/\\/g, "/"); | ||
return await (0, import_glob.glob)(pattern); | ||
if (typeof pattern === "string") { | ||
pattern = this.resolve(pattern).replace(/\\/g, "/"); | ||
} else { | ||
pattern = pattern.map((s) => this.resolve(s).replace(/\\/g, "/")); | ||
} | ||
return (0, import_files.globSync)(pattern); | ||
} | ||
@@ -199,11 +211,6 @@ start(what) { | ||
} | ||
resolveImport(name, type = "esm") { | ||
const segments = name.split("/"); | ||
let subdir = segments.shift(); | ||
if (subdir.startsWith("@") && segments.length) { | ||
subdir = `${subdir}/${segments.shift()}`; | ||
} | ||
findPackage(name) { | ||
let resolveIn = this.path; | ||
while (true) { | ||
if (isDirectory((0, import_path.resolve)(resolveIn, "node_modules", subdir))) { | ||
if (isDirectory((0, import_path.resolve)(resolveIn, "node_modules", name))) { | ||
break; | ||
@@ -213,7 +220,15 @@ } | ||
if (nextResolveIn === resolveIn) { | ||
throw new Error(`Cannot find module ${subdir} from ${this.path}`); | ||
throw new Error(`Cannot find module ${name} from ${this.path}`); | ||
} | ||
resolveIn = nextResolveIn; | ||
} | ||
const pkg = Package.forPath((0, import_path.resolve)(resolveIn, "node_modules", subdir)); | ||
return Package.forPath((0, import_path.resolve)(resolveIn, "node_modules", name)); | ||
} | ||
resolveImport(name, type = "esm") { | ||
const segments = name.split("/"); | ||
let packageName = segments.shift(); | ||
if (packageName.startsWith("@") && segments.length) { | ||
packageName = `${packageName}/${segments.shift()}`; | ||
} | ||
const pkg = this.findPackage(packageName); | ||
return pkg.resolveExport(segments.length ? segments.join("/") : ".", type); | ||
@@ -248,4 +263,4 @@ } | ||
e.message = `Error parsing "${this.resolve(path)}": ${e.message}`; | ||
throw e; | ||
} | ||
return JSON.parse(await this.readFile(path)); | ||
} | ||
@@ -252,0 +267,0 @@ async writeJson(path, value) { |
"use strict"; | ||
var __create = Object.create; | ||
var __defProp = Object.defineProperty; | ||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
var __getOwnPropNames = Object.getOwnPropertyNames; | ||
var __getProtoOf = Object.getPrototypeOf; | ||
var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
@@ -20,10 +18,2 @@ var __export = (target, all) => { | ||
}; | ||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( | ||
// If the importer is in node compatibility mode or this is not an ESM | ||
// file that has been converted to a CommonJS file using a Babel- | ||
// compatible transform (i.e. "__esModule" has not been set), then set | ||
// "default" to the CommonJS "module.exports" for node compatibility. | ||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, | ||
mod | ||
)); | ||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); | ||
@@ -35,4 +25,3 @@ var cli_exports = {}; | ||
module.exports = __toCommonJS(cli_exports); | ||
var import_yargs = __toESM(require("yargs"), 1); | ||
var import_helpers = require("yargs/helpers"); | ||
var import_commander = require("../util/commander.js"); | ||
var import_package = require("../util/package.js"); | ||
@@ -47,4 +36,6 @@ var import_progress = require("../util/progress.js"); | ||
async function main(argv = process.argv) { | ||
const args = await (0, import_yargs.default)((0, import_helpers.hideBin)(argv)).command("$0 [ver]", "Manipulate monorepo package versions.").option("prefix", { alias: "p", default: ".", type: "string", describe: "specify monorepo directory" }).option("set", { alias: "s", type: "boolean", describe: "Sets the release version" }).option("apply", { alias: "a", type: "boolean", describe: "Sets package versions to the release version" }).option("tag", { alias: "t", type: "boolean", describe: "Adds git tag for release version" }).wrap(Math.min(process.stdout.columns, 80)).strict().argv; | ||
const version = args.ver; | ||
const program = (0, import_commander.commander)("matter-version", "Manipulate monorepo package versions.").argument("[version]").option("-p, --prefix <prefix>", "specify monorepo directory").option("-s, --set", "sets the release version").option("-a, --apply", "sets package versions to the release version").option("-t, --tag", "adds git tag for release version").parse(argv); | ||
const args = program.opts(); | ||
args.version = program.args[0]; | ||
const version = args.version; | ||
const pkg = new import_package.Package({ path: args.prefix }); | ||
@@ -51,0 +42,0 @@ const versioner = new import_versioner.Versioner(pkg, version); |
@@ -6,3 +6,2 @@ /** | ||
*/ | ||
import colors from "ansi-colors"; | ||
import { createHash } from "crypto"; | ||
@@ -116,3 +115,4 @@ import { BuildError } from "./error.js"; | ||
progress.failure("Terminating due to type errors"); | ||
process.stderr.write(e.diagnostics); | ||
process.stderr.write(`${e.diagnostics} | ||
`); | ||
process.exit(1); | ||
@@ -123,8 +123,22 @@ } | ||
} | ||
const formats = Array(); | ||
if (targets.has("esm" /* esm */)) { | ||
await this.#transpile(project, progress, "esm" /* esm */); | ||
formats.push("esm"); | ||
} | ||
if (targets.has("cjs" /* cjs */)) { | ||
await this.#transpile(project, progress, "cjs" /* cjs */); | ||
formats.push("cjs"); | ||
} | ||
if (formats.length) { | ||
const groups = [project.pkg.isLibrary ? "library" : "app"]; | ||
if (project.pkg.hasTests) { | ||
groups.push("tests"); | ||
} | ||
const formatDesc = formats.map(progress.emphasize).join("+"); | ||
const groupDesc = groups.map(progress.emphasize).join("+"); | ||
await progress.run(`Transpile ${groupDesc} to ${formatDesc}`, async () => { | ||
for (const format of formats) { | ||
await this.#transpile(project, format); | ||
} | ||
}); | ||
} | ||
await config?.after?.({ project }); | ||
@@ -138,13 +152,6 @@ if (!this.options.targets?.length) { | ||
} | ||
async #transpile(project, progress, format) { | ||
const fmt = format.toUpperCase(); | ||
await progress.run( | ||
`Transpile ${progress.emphasize(project.pkg.isLibrary ? "library" : "app")} to ${colors.bold(fmt)}`, | ||
() => project.buildSource(format) | ||
); | ||
async #transpile(project, format) { | ||
await project.buildSource(format); | ||
if (project.pkg.hasTests) { | ||
await progress.run( | ||
`Transpile ${progress.emphasize("tests")} to ${colors.bold(fmt)}`, | ||
() => project.buildTests(format) | ||
); | ||
await project.buildTests(format); | ||
} | ||
@@ -177,2 +184,2 @@ } | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1aWxkaW5nL2J1aWxkZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyLTIwMjQgTWF0dGVyLmpzIEF1dGhvcnNcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IGNvbG9ycyBmcm9tIFwiYW5zaS1jb2xvcnNcIjtcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgeyBQcm9ncmVzcyB9IGZyb20gXCIuLi91dGlsL3Byb2dyZXNzLmpzXCI7XG5pbXBvcnQgeyBCdWlsZEVycm9yIH0gZnJvbSBcIi4vZXJyb3IuanNcIjtcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSBcIi4vZ3JhcGguanNcIjtcbmltcG9ydCB7IEJ1aWxkSW5mb3JtYXRpb24sIFByb2plY3QgfSBmcm9tIFwiLi9wcm9qZWN0LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVUeXBlc2NyaXB0Q29udGV4dCB9IGZyb20gXCIuL3R5cGVzY3JpcHQuanNcIjtcbmltcG9ydCB7IFR5cGVzY3JpcHRDb250ZXh0IH0gZnJvbSBcIi4vdHlwZXNjcmlwdC9jb250ZXh0LmpzXCI7XG5cbmV4cG9ydCBlbnVtIFRhcmdldCB7XG4gICAgY2xlYW4gPSBcImNsZWFuXCIsXG4gICAgdHlwZXMgPSBcInR5cGVzXCIsXG4gICAgZXNtID0gXCJlc21cIixcbiAgICBjanMgPSBcImNqc1wiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnMge1xuICAgIHRhcmdldHM/OiBUYXJnZXRbXTtcbiAgICBjbGVhbj86IGJvb2xlYW47XG4gICAgZ3JhcGg/OiBHcmFwaDtcbn1cblxuLyoqXG4gKiBIaWdoLWxldmVsIGJ1aWxkIGNvb3JkaW5hdGlvbi5cbiAqXG4gKiBXYXJuaW5nOiBUaGlzIGNsYXNzIGlzIGludGVuZGVkIGZvciBjb21tYW5kIGxpbmUgdXNlIGFuZCB3aWxsIHByb2Nlc3MuZXhpdCBpZiB0aGluZ3MgZ28gd3JvbmcuXG4gKi9cbmV4cG9ydCBjbGFzcyBCdWlsZGVyIHtcbiAgICB1bmNvbmRpdGlvbmFsOiBib29sZWFuO1xuICAgIHRzQ29udGV4dD86IFR5cGVzY3JpcHRDb250ZXh0O1xuICAgIGdyYXBoPzogR3JhcGg7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9wdGlvbnM6IE9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLmdyYXBoID0gb3B0aW9ucy5ncmFwaDtcbiAgICAgICAgdGhpcy51bmNvbmRpdGlvbmFsID1cbiAgICAgICAgICAgIG9wdGlvbnMuY2xlYW4gfHwgKG9wdGlvbnMudGFyZ2V0cyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMudGFyZ2V0cz8uaW5kZXhPZihUYXJnZXQuY2xlYW4pICE9PSAtMSk7XG4gICAgfVxuXG4gICAgZ2V0IGhhc0NsZWFuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNsZWFuO1xuICAgIH1cblxuICAgIGNsZWFyQ2xlYW4oKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnMuY2xlYW47XG4gICAgfVxuXG4gICAgaGFzVGFyZ2V0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy50YXJnZXRzICYmIHRoaXMub3B0aW9ucy50YXJnZXRzLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNvbmZpZ3VyZShwcm9qZWN0OiBQcm9qZWN0KSB7XG4gICAgICAgIGlmICghcHJvamVjdC5wa2cuaGFzQ29uZmlnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBwcm9qZWN0LmNvbmZpZ3VyZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBidWlsZChwcm9qZWN0OiBQcm9qZWN0KSB7XG4gICAgICAgIGNvbnN0IHByb2dyZXNzID0gcHJvamVjdC5wa2cuc3RhcnQoXCJCdWlsZGluZ1wiKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy4jZG9CdWlsZChwcm9qZWN0LCBwcm9ncmVzcyk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgcHJvZ3Jlc3Muc2h1dGRvd24oKTtcbiAgICAgICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGAke2Uuc3RhY2sgPz8gZS5tZXNzYWdlfVxcblxcbmApO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvZ3Jlc3Muc2h1dGRvd24oKTtcbiAgICB9XG5cbiAgICBhc3luYyAjZG9CdWlsZChwcm9qZWN0OiBQcm9qZWN0LCBwcm9ncmVzczogUHJvZ3Jlc3MpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0cyA9IHRoaXMuI3NlbGVjdFRhcmdldHMocHJvamVjdCk7XG5cbiAgICAgICAgaWYgKHRhcmdldHMuaGFzKFRhcmdldC5jbGVhbikgfHwgdGhpcy5vcHRpb25zLmNsZWFuKSB7XG4gICAgICAgICAgICBhd2FpdCBwcm9ncmVzcy5ydW4oXCJDbGVhblwiLCAoKSA9PiBwcm9qZWN0LmNsZWFuKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0YXJnZXRzLmhhcyhUYXJnZXQudHlwZXMpICYmICF0YXJnZXRzLmhhcyhUYXJnZXQuZXNtKSAmJiAhdGFyZ2V0cy5oYXMoVGFyZ2V0LmNqcykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZm86IEJ1aWxkSW5mb3JtYXRpb24gPSB7fTtcblxuICAgICAgICBjb25zdCBjb25maWcgPSBhd2FpdCBwcm9qZWN0LmNvbmZpZ3VyZSgpO1xuXG4gICAgICAgIGF3YWl0IGNvbmZpZz8uYmVmb3JlPy4oeyBwcm9qZWN0IH0pO1xuXG4gICAgICAgIC8vIElmIGF2YWlsYWJsZSB3ZSB1c2UgZ3JhcGggdG8gYWNjZXNzIGRlcGVuZGVuY3kgQVBJIHNoYXNcbiAgICAgICAgY29uc3QgZ3JhcGggPSB0aGlzLmdyYXBoID8/IChhd2FpdCBHcmFwaC5mb3JQcm9qZWN0KHByb2plY3QucGtnLnBhdGgpKTtcbiAgICAgICAgbGV0IG5vZGU6IEdyYXBoLk5vZGUgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChncmFwaCkge1xuICAgICAgICAgICAgbm9kZSA9IGdyYXBoLmdldChwcm9qZWN0LnBrZy5uYW1lKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZGVwIG9mIG5vZGUuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlcC5pbmZvLmFwaVNoYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLmRlcGVuZGVuY3lBcGlTaGFzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uZGVwZW5kZW5jeUFwaVNoYXMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpbmZvLmRlcGVuZGVuY3lBcGlTaGFzW2RlcC5wa2cubmFtZV0gPSBkZXAuaW5mby5hcGlTaGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhcmdldHMuaGFzKFRhcmdldC50eXBlcykpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgLy8gT2J0YWluIG9yIGluaXRpYWxpemUgdHlwZXNjcmlwdCBzb2x1dGlvbiBidWlsZGVyXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRleHQgPSB0aGlzLnRzQ29udGV4dDtcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSB0aGlzLnRzQ29udGV4dCA9IGF3YWl0IGNyZWF0ZVR5cGVzY3JpcHRDb250ZXh0KHByb2plY3QucGtnLndvcmtzcGFjZSwgZ3JhcGgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlZnJlc2hDYWxsYmFjayA9IHByb2dyZXNzLnJlZnJlc2guYmluZChwcm9ncmVzcyk7XG5cbiAgICAgICAgICAgICAgICBpZiAocHJvamVjdC5wa2cuaXNMaWJyYXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwaVNoYSA9IGNyZWF0ZUhhc2goXCJzaGExXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIE91ciBBUEkgU0hBIGNoYW5nZXMgaWYgdGhhdCBvZiBhbnkgZGVwZW5kZW5jeSBjaGFuZ2VzXG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRlcCBvZiBub2RlLmRlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXAuaW5mby5hcGlTaGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGlTaGEudXBkYXRlKGRlcC5pbmZvLmFwaVNoYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcHJvZ3Jlc3MucnVuKGBHZW5lcmF0ZSAke3Byb2dyZXNzLmVtcGhhc2l6ZShcInR5cGUgZGVjbGFyYXRpb25zXCIpfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuYnVpbGQocHJvamVjdC5wa2csIFwic3JjXCIsIHJlZnJlc2hDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBwcm9qZWN0Lmhhc2hEZWNsYXJhdGlvbnMoYXBpU2hhKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaW5mby5hcGlTaGEgPSBhcGlTaGEuZGlnZXN0KFwiaGV4XCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHByb2dyZXNzLnJ1bihgVmFsaWRhdGUgJHtwcm9ncmVzcy5lbXBoYXNpemUoXCJ0eXBlc1wiKX1gLCAoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5idWlsZChwcm9qZWN0LnBrZywgXCJzcmNcIiwgcmVmcmVzaENhbGxiYWNrLCBmYWxzZSksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwcm9qZWN0LnBrZy5oYXNUZXN0cykge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBwcm9ncmVzcy5ydW4oYFZhbGlkYXRlICR7cHJvZ3Jlc3MuZW1waGFzaXplKFwidGVzdCB0eXBlc1wiKX1gLCAoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5idWlsZChwcm9qZWN0LnBrZywgXCJ0ZXN0XCIsIHJlZnJlc2hDYWxsYmFjayksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgQnVpbGRFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcy5mYWlsdXJlKFwiVGVybWluYXRpbmcgZHVlIHRvIHR5cGUgZXJyb3JzXCIpO1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShlLmRpYWdub3N0aWNzKTtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhcmdldHMuaGFzKFRhcmdldC5lc20pKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLiN0cmFuc3BpbGUocHJvamVjdCwgcHJvZ3Jlc3MsIFRhcmdldC5lc20pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhcmdldHMuaGFzKFRhcmdldC5janMpKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLiN0cmFuc3BpbGUocHJvamVjdCwgcHJvZ3Jlc3MsIFRhcmdldC5janMpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgY29uZmlnPy5hZnRlcj8uKHsgcHJvamVjdCB9KTtcblxuICAgICAgICAvLyBPbmx5IHVwZGF0ZSBidWlsZCBpbmZvcm1hdGlvbiB3aGVuIHRoZXJlIGFyZSBubyBleHBsaWNpdCB0YXJnZXRzIHNvIHdlIGtub3cgaXQncyBhIGZ1bGwgYnVpbGRcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMudGFyZ2V0cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBhd2FpdCBwcm9qZWN0LnJlY29yZEJ1aWxkSW5mbyhpbmZvKTtcbiAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5pbmZvID0gaW5mbztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jICN0cmFuc3BpbGUocHJvamVjdDogUHJvamVjdCwgcHJvZ3Jlc3M6IFByb2dyZXNzLCBmb3JtYXQ6IFwiZXNtXCIgfCBcImNqc1wiKSB7XG4gICAgICAgIGNvbnN0IGZtdCA9IGZvcm1hdC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICBhd2FpdCBwcm9ncmVzcy5ydW4oXG4gICAgICAgICAgICBgVHJhbnNwaWxlICR7cHJvZ3Jlc3MuZW1waGFzaXplKHByb2plY3QucGtnLmlzTGlicmFyeSA/IFwibGlicmFyeVwiIDogXCJhcHBcIil9IHRvICR7Y29sb3JzLmJvbGQoZm10KX1gLFxuICAgICAgICAgICAgKCkgPT4gcHJvamVjdC5idWlsZFNvdXJjZShmb3JtYXQpLFxuICAgICAgICApO1xuICAgICAgICBpZiAocHJvamVjdC5wa2cuaGFzVGVzdHMpIHtcbiAgICAgICAgICAgIGF3YWl0IHByb2dyZXNzLnJ1bihgVHJhbnNwaWxlICR7cHJvZ3Jlc3MuZW1waGFzaXplKFwidGVzdHNcIil9IHRvICR7Y29sb3JzLmJvbGQoZm10KX1gLCAoKSA9PlxuICAgICAgICAgICAgICAgIHByb2plY3QuYnVpbGRUZXN0cyhmb3JtYXQpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICNzZWxlY3RUYXJnZXRzKHByb2plY3Q6IFByb2plY3QpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0cyA9IG5ldyBTZXQ8c3RyaW5nPih0aGlzLm9wdGlvbnMudGFyZ2V0cyk7XG5cbiAgICAgICAgaWYgKCF0YXJnZXRzLnNpemUpIHtcbiAgICAgICAgICAgIHRhcmdldHMuYWRkKFRhcmdldC50eXBlcyk7XG5cbiAgICAgICAgICAgIGlmIChwcm9qZWN0LnBrZy5zdXBwb3J0c0VzbSkge1xuICAgICAgICAgICAgICAgIHRhcmdldHMuYWRkKFRhcmdldC5lc20pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocHJvamVjdC5wa2cuc3VwcG9ydHNDanMpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRzLmFkZChUYXJnZXQuY2pzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghcHJvamVjdC5wa2cuc3VwcG9ydHNFc20pIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRzLmRlbGV0ZShUYXJnZXQuZXNtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFwcm9qZWN0LnBrZy5zdXBwb3J0c0Nqcykge1xuICAgICAgICAgICAgICAgIHRhcmdldHMuZGVsZXRlKFRhcmdldC5janMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldHM7XG4gICAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIkFB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 | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1aWxkaW5nL2J1aWxkZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyLTIwMjQgTWF0dGVyLmpzIEF1dGhvcnNcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IFByb2dyZXNzIH0gZnJvbSBcIi4uL3V0aWwvcHJvZ3Jlc3MuanNcIjtcbmltcG9ydCB7IEJ1aWxkRXJyb3IgfSBmcm9tIFwiLi9lcnJvci5qc1wiO1xuaW1wb3J0IHsgR3JhcGggfSBmcm9tIFwiLi9ncmFwaC5qc1wiO1xuaW1wb3J0IHsgQnVpbGRJbmZvcm1hdGlvbiwgUHJvamVjdCB9IGZyb20gXCIuL3Byb2plY3QuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVR5cGVzY3JpcHRDb250ZXh0IH0gZnJvbSBcIi4vdHlwZXNjcmlwdC5qc1wiO1xuaW1wb3J0IHsgVHlwZXNjcmlwdENvbnRleHQgfSBmcm9tIFwiLi90eXBlc2NyaXB0L2NvbnRleHQuanNcIjtcblxuZXhwb3J0IGVudW0gVGFyZ2V0IHtcbiAgICBjbGVhbiA9IFwiY2xlYW5cIixcbiAgICB0eXBlcyA9IFwidHlwZXNcIixcbiAgICBlc20gPSBcImVzbVwiLFxuICAgIGNqcyA9IFwiY2pzXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9ucyB7XG4gICAgdGFyZ2V0cz86IFRhcmdldFtdO1xuICAgIGNsZWFuPzogYm9vbGVhbjtcbiAgICBncmFwaD86IEdyYXBoO1xufVxuXG4vKipcbiAqIEhpZ2gtbGV2ZWwgYnVpbGQgY29vcmRpbmF0aW9uLlxuICpcbiAqIFdhcm5pbmc6IFRoaXMgY2xhc3MgaXMgaW50ZW5kZWQgZm9yIGNvbW1hbmQgbGluZSB1c2UgYW5kIHdpbGwgcHJvY2Vzcy5leGl0IGlmIHRoaW5ncyBnbyB3cm9uZy5cbiAqL1xuZXhwb3J0IGNsYXNzIEJ1aWxkZXIge1xuICAgIHVuY29uZGl0aW9uYWw6IGJvb2xlYW47XG4gICAgdHNDb250ZXh0PzogVHlwZXNjcmlwdENvbnRleHQ7XG4gICAgZ3JhcGg/OiBHcmFwaDtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgb3B0aW9uczogT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuZ3JhcGggPSBvcHRpb25zLmdyYXBoO1xuICAgICAgICB0aGlzLnVuY29uZGl0aW9uYWwgPVxuICAgICAgICAgICAgb3B0aW9ucy5jbGVhbiB8fCAob3B0aW9ucy50YXJnZXRzICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy50YXJnZXRzPy5pbmRleE9mKFRhcmdldC5jbGVhbikgIT09IC0xKTtcbiAgICB9XG5cbiAgICBnZXQgaGFzQ2xlYW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY2xlYW47XG4gICAgfVxuXG4gICAgY2xlYXJDbGVhbigpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMub3B0aW9ucy5jbGVhbjtcbiAgICB9XG5cbiAgICBoYXNUYXJnZXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRhcmdldHMgJiYgdGhpcy5vcHRpb25zLnRhcmdldHMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY29uZmlndXJlKHByb2plY3Q6IFByb2plY3QpIHtcbiAgICAgICAgaWYgKCFwcm9qZWN0LnBrZy5oYXNDb25maWcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHByb2plY3QuY29uZmlndXJlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGJ1aWxkKHByb2plY3Q6IFByb2plY3QpIHtcbiAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBwcm9qZWN0LnBrZy5zdGFydChcIkJ1aWxkaW5nXCIpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLiNkb0J1aWxkKHByb2plY3QsIHByb2dyZXNzKTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICBwcm9ncmVzcy5zaHV0ZG93bigpO1xuICAgICAgICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoYCR7ZS5zdGFjayA/PyBlLm1lc3NhZ2V9XFxuXFxuYCk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9ncmVzcy5zaHV0ZG93bigpO1xuICAgIH1cblxuICAgIGFzeW5jICNkb0J1aWxkKHByb2plY3Q6IFByb2plY3QsIHByb2dyZXNzOiBQcm9ncmVzcykge1xuICAgICAgICBjb25zdCB0YXJnZXRzID0gdGhpcy4jc2VsZWN0VGFyZ2V0cyhwcm9qZWN0KTtcblxuICAgICAgICBpZiAodGFyZ2V0cy5oYXMoVGFyZ2V0LmNsZWFuKSB8fCB0aGlzLm9wdGlvbnMuY2xlYW4pIHtcbiAgICAgICAgICAgIGF3YWl0IHByb2dyZXNzLnJ1bihcIkNsZWFuXCIsICgpID0+IHByb2plY3QuY2xlYW4oKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRhcmdldHMuaGFzKFRhcmdldC50eXBlcykgJiYgIXRhcmdldHMuaGFzKFRhcmdldC5lc20pICYmICF0YXJnZXRzLmhhcyhUYXJnZXQuY2pzKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5mbzogQnVpbGRJbmZvcm1hdGlvbiA9IHt9O1xuXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHByb2plY3QuY29uZmlndXJlKCk7XG5cbiAgICAgICAgYXdhaXQgY29uZmlnPy5iZWZvcmU/Lih7IHByb2plY3QgfSk7XG5cbiAgICAgICAgLy8gSWYgYXZhaWxhYmxlIHdlIHVzZSBncmFwaCB0byBhY2Nlc3MgZGVwZW5kZW5jeSBBUEkgc2hhc1xuICAgICAgICBjb25zdCBncmFwaCA9IHRoaXMuZ3JhcGggPz8gKGF3YWl0IEdyYXBoLmZvclByb2plY3QocHJvamVjdC5wa2cucGF0aCkpO1xuICAgICAgICBsZXQgbm9kZTogR3JhcGguTm9kZSB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGdyYXBoKSB7XG4gICAgICAgICAgICBub2RlID0gZ3JhcGguZ2V0KHByb2plY3QucGtnLm5hbWUpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBkZXAgb2Ygbm9kZS5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGVwLmluZm8uYXBpU2hhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8uZGVwZW5kZW5jeUFwaVNoYXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5kZXBlbmRlbmN5QXBpU2hhcyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGluZm8uZGVwZW5kZW5jeUFwaVNoYXNbZGVwLnBrZy5uYW1lXSA9IGRlcC5pbmZvLmFwaVNoYTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFyZ2V0cy5oYXMoVGFyZ2V0LnR5cGVzKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBPYnRhaW4gb3IgaW5pdGlhbGl6ZSB0eXBlc2NyaXB0IHNvbHV0aW9uIGJ1aWxkZXJcbiAgICAgICAgICAgICAgICBsZXQgY29udGV4dCA9IHRoaXMudHNDb250ZXh0O1xuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9IHRoaXMudHNDb250ZXh0ID0gYXdhaXQgY3JlYXRlVHlwZXNjcmlwdENvbnRleHQocHJvamVjdC5wa2cud29ya3NwYWNlLCBncmFwaCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVmcmVzaENhbGxiYWNrID0gcHJvZ3Jlc3MucmVmcmVzaC5iaW5kKHByb2dyZXNzKTtcblxuICAgICAgICAgICAgICAgIGlmIChwcm9qZWN0LnBrZy5pc0xpYnJhcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBpU2hhID0gY3JlYXRlSGFzaChcInNoYTFcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gT3VyIEFQSSBTSEEgY2hhbmdlcyBpZiB0aGF0IG9mIGFueSBkZXBlbmRlbmN5IGNoYW5nZXNcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZGVwIG9mIG5vZGUuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlcC5pbmZvLmFwaVNoYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwaVNoYS51cGRhdGUoZGVwLmluZm8uYXBpU2hhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBwcm9ncmVzcy5ydW4oYEdlbmVyYXRlICR7cHJvZ3Jlc3MuZW1waGFzaXplKFwidHlwZSBkZWNsYXJhdGlvbnNcIil9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5idWlsZChwcm9qZWN0LnBrZywgXCJzcmNcIiwgcmVmcmVzaENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHByb2plY3QuaGFzaERlY2xhcmF0aW9ucyhhcGlTaGEpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBpbmZvLmFwaVNoYSA9IGFwaVNoYS5kaWdlc3QoXCJoZXhcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcHJvZ3Jlc3MucnVuKGBWYWxpZGF0ZSAke3Byb2dyZXNzLmVtcGhhc2l6ZShcInR5cGVzXCIpfWAsICgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmJ1aWxkKHByb2plY3QucGtnLCBcInNyY1wiLCByZWZyZXNoQ2FsbGJhY2ssIGZhbHNlKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHByb2plY3QucGtnLmhhc1Rlc3RzKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHByb2dyZXNzLnJ1bihgVmFsaWRhdGUgJHtwcm9ncmVzcy5lbXBoYXNpemUoXCJ0ZXN0IHR5cGVzXCIpfWAsICgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmJ1aWxkKHByb2plY3QucGtnLCBcInRlc3RcIiwgcmVmcmVzaENhbGxiYWNrKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBCdWlsZEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzLmZhaWx1cmUoXCJUZXJtaW5hdGluZyBkdWUgdG8gdHlwZSBlcnJvcnNcIik7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGAke2UuZGlhZ25vc3RpY3N9XFxuYCk7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvcm1hdHMgPSBBcnJheTxcImVzbVwiIHwgXCJjanNcIj4oKTtcbiAgICAgICAgaWYgKHRhcmdldHMuaGFzKFRhcmdldC5lc20pKSB7XG4gICAgICAgICAgICBmb3JtYXRzLnB1c2goXCJlc21cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldHMuaGFzKFRhcmdldC5janMpKSB7XG4gICAgICAgICAgICBmb3JtYXRzLnB1c2goXCJjanNcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybWF0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwcyA9IFtwcm9qZWN0LnBrZy5pc0xpYnJhcnkgPyBcImxpYnJhcnlcIiA6IFwiYXBwXCJdO1xuICAgICAgICAgICAgaWYgKHByb2plY3QucGtnLmhhc1Rlc3RzKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBzLnB1c2goXCJ0ZXN0c1wiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZm9ybWF0RGVzYyA9IGZvcm1hdHMubWFwKHByb2dyZXNzLmVtcGhhc2l6ZSkuam9pbihcIitcIik7XG4gICAgICAgICAgICBjb25zdCBncm91cERlc2MgPSBncm91cHMubWFwKHByb2dyZXNzLmVtcGhhc2l6ZSkuam9pbihcIitcIik7XG5cbiAgICAgICAgICAgIGF3YWl0IHByb2dyZXNzLnJ1bihgVHJhbnNwaWxlICR7Z3JvdXBEZXNjfSB0byAke2Zvcm1hdERlc2N9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZm9ybWF0IG9mIGZvcm1hdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy4jdHJhbnNwaWxlKHByb2plY3QsIGZvcm1hdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBjb25maWc/LmFmdGVyPy4oeyBwcm9qZWN0IH0pO1xuXG4gICAgICAgIC8vIE9ubHkgdXBkYXRlIGJ1aWxkIGluZm9ybWF0aW9uIHdoZW4gdGhlcmUgYXJlIG5vIGV4cGxpY2l0IHRhcmdldHMgc28gd2Uga25vdyBpdCdzIGEgZnVsbCBidWlsZFxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy50YXJnZXRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGF3YWl0IHByb2plY3QucmVjb3JkQnVpbGRJbmZvKGluZm8pO1xuICAgICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgICAgICBub2RlLmluZm8gPSBpbmZvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgI3RyYW5zcGlsZShwcm9qZWN0OiBQcm9qZWN0LCBmb3JtYXQ6IFwiZXNtXCIgfCBcImNqc1wiKSB7XG4gICAgICAgIGF3YWl0IHByb2plY3QuYnVpbGRTb3VyY2UoZm9ybWF0KTtcbiAgICAgICAgaWYgKHByb2plY3QucGtnLmhhc1Rlc3RzKSB7XG4gICAgICAgICAgICBhd2FpdCBwcm9qZWN0LmJ1aWxkVGVzdHMoZm9ybWF0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICNzZWxlY3RUYXJnZXRzKHByb2plY3Q6IFByb2plY3QpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0cyA9IG5ldyBTZXQ8c3RyaW5nPih0aGlzLm9wdGlvbnMudGFyZ2V0cyk7XG5cbiAgICAgICAgaWYgKCF0YXJnZXRzLnNpemUpIHtcbiAgICAgICAgICAgIHRhcmdldHMuYWRkKFRhcmdldC50eXBlcyk7XG5cbiAgICAgICAgICAgIGlmIChwcm9qZWN0LnBrZy5zdXBwb3J0c0VzbSkge1xuICAgICAgICAgICAgICAgIHRhcmdldHMuYWRkKFRhcmdldC5lc20pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocHJvamVjdC5wa2cuc3VwcG9ydHNDanMpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRzLmFkZChUYXJnZXQuY2pzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghcHJvamVjdC5wa2cuc3VwcG9ydHNFc20pIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRzLmRlbGV0ZShUYXJnZXQuZXNtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFwcm9qZWN0LnBrZy5zdXBwb3J0c0Nqcykge1xuICAgICAgICAgICAgICAgIHRhcmdldHMuZGVsZXRlKFRhcmdldC5janMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldHM7XG4gICAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BLFNBQVMsa0JBQWtCO0FBRTNCLFNBQVMsa0JBQWtCO0FBQzNCLFNBQVMsYUFBYTtBQUV0QixTQUFTLCtCQUErQjtBQUdqQyxJQUFLLFNBQUwsa0JBQUtBLFlBQUw7QUFDSCxFQUFBQSxRQUFBLFdBQVE7QUFDUixFQUFBQSxRQUFBLFdBQVE7QUFDUixFQUFBQSxRQUFBLFNBQU07QUFDTixFQUFBQSxRQUFBLFNBQU07QUFKRSxTQUFBQTtBQUFBLEdBQUE7QUFrQkwsTUFBTSxRQUFRO0FBQUEsRUFLakIsWUFBb0IsVUFBbUIsQ0FBQyxHQUFHO0FBQXZCO0FBQ2hCLFNBQUssUUFBUSxRQUFRO0FBQ3JCLFNBQUssZ0JBQ0QsUUFBUSxTQUFVLFFBQVEsWUFBWSxVQUFhLFFBQVEsU0FBUyxRQUFRLG1CQUFZLE1BQU07QUFBQSxFQUN0RztBQUFBLEVBUkE7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBUUEsSUFBSSxXQUFXO0FBQ1gsV0FBTyxLQUFLLFFBQVE7QUFBQSxFQUN4QjtBQUFBLEVBRUEsYUFBYTtBQUNULFdBQU8sS0FBSyxRQUFRO0FBQUEsRUFDeEI7QUFBQSxFQUVBLGFBQWE7QUFDVCxXQUFPLEtBQUssUUFBUSxXQUFXLEtBQUssUUFBUSxRQUFRLFNBQVM7QUFBQSxFQUNqRTtBQUFBLEVBRUEsTUFBYSxVQUFVLFNBQWtCO0FBQ3JDLFFBQUksQ0FBQyxRQUFRLElBQUksV0FBVztBQUN4QjtBQUFBLElBQ0o7QUFFQSxVQUFNLFFBQVEsVUFBVTtBQUFBLEVB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 |
@@ -6,4 +6,3 @@ /** | ||
*/ | ||
import yargs from "yargs"; | ||
import { hideBin } from "yargs/helpers"; | ||
import { commander } from "../util/commander.js"; | ||
import { Builder, Target } from "./builder.js"; | ||
@@ -24,4 +23,26 @@ import { Graph } from "./graph.js"; | ||
let mode = 0 /* BuildProject */; | ||
const args = await yargs(hideBin(argv)).usage("Builds packages adhering to matter.js standards.").option("prefix", { alias: "p", default: ".", type: "string", describe: "specify build directory" }).option("clean", { alias: "c", default: false, type: "boolean", describe: "clean before build" }).option("workspaces", { alias: "w", default: false, type: "boolean", describe: "build all workspace packages" }).option("dependencies", { alias: "d", default: false, type: "boolean", describe: "build dependencies" }).command("*", "build types and both JS files", () => { | ||
}).command("clean", "remove build and dist directories", () => targets.push(Target.clean)).command("types", "build type definitions", () => targets.push(Target.types)).command("esm", "build JS (ES6 modules)", () => targets.push(Target.esm)).command("cjs", "build JS (CommonJS modules)", () => targets.push(Target.cjs)).command("graph", "display the workspace graph", () => mode = 3 /* DisplayGraph */).command("tsconfigs", "sync all tsconfigs with package.json", () => mode = 4 /* SyncTsconfigs */).wrap(Math.min(process.stdout.columns, 80)).strict().argv; | ||
const program = commander("matter-build", "Builds packages adhering to matter.js standards.").option("-p, --prefix <path>", "specify build directory", ".").option("-c, --clean", "clean before build", false).option("-w, --workspaces", "build all workspace packages", false).option("-d, --dependencies", "build dependencies", false); | ||
program.command("build").description("(default) build JS and type definitions").action(() => { | ||
}); | ||
program.command("clean").description("remove build and dist directories").action(() => { | ||
targets.push(Target.clean); | ||
}); | ||
program.command("types").description("build type definitions").action(() => { | ||
targets.push(Target.types); | ||
}); | ||
program.command("esm").description("build JS (ES6 modules)").action(() => { | ||
targets.push(Target.esm); | ||
}); | ||
program.command("cjs").description("build JS (CommonJS modules)").action(() => { | ||
targets.push(Target.cjs); | ||
}); | ||
program.command("graph").description("display the workspace graph").action(() => { | ||
mode = 3 /* DisplayGraph */; | ||
}); | ||
program.command("tsconfigs").description("sync all tsconfigs with package.json").action(() => { | ||
mode = 4 /* SyncTsconfigs */; | ||
}); | ||
program.action(() => { | ||
}); | ||
const args = program.parse(argv).opts(); | ||
if (mode === 0 /* BuildProject */) { | ||
@@ -72,2 +93,2 @@ if (args.workspaces) { | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1aWxkaW5nL2NsaS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjItMjAyNCBNYXR0ZXIuanMgQXV0aG9yc1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5pbXBvcnQgeWFyZ3MgZnJvbSBcInlhcmdzXCI7XG5pbXBvcnQgeyBoaWRlQmluIH0gZnJvbSBcInlhcmdzL2hlbHBlcnNcIjtcbmltcG9ydCB7IEJ1aWxkZXIsIFRhcmdldCB9IGZyb20gXCIuL2J1aWxkZXIuanNcIjtcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSBcIi4vZ3JhcGguanNcIjtcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tIFwiLi9wcm9qZWN0LmpzXCI7XG5pbXBvcnQgeyBzeW5jQWxsVHNjb25maWdzIH0gZnJvbSBcIi4vdHNjb25maWcuanNcIjtcblxuZW51bSBNb2RlIHtcbiAgICBCdWlsZFByb2plY3QsXG4gICAgQnVpbGRQcm9qZWN0V2l0aERlcGVuZGVuY2llcyxcbiAgICBCdWlsZFdvcmtzcGFjZSxcbiAgICBEaXNwbGF5R3JhcGgsXG4gICAgU3luY1RzY29uZmlncyxcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4oYXJndiA9IHByb2Nlc3MuYXJndikge1xuICAgIGNvbnN0IHRhcmdldHMgPSBBcnJheTxUYXJnZXQ+KCk7XG4gICAgbGV0IG1vZGUgPSBNb2RlLkJ1aWxkUHJvamVjdDtcblxuICAgIGNvbnN0IGFyZ3MgPSBhd2FpdCB5YXJncyhoaWRlQmluKGFyZ3YpKVxuICAgICAgICAudXNhZ2UoXCJCdWlsZHMgcGFja2FnZXMgYWRoZXJpbmcgdG8gbWF0dGVyLmpzIHN0YW5kYXJkcy5cIilcbiAgICAgICAgLm9wdGlvbihcInByZWZpeFwiLCB7IGFsaWFzOiBcInBcIiwgZGVmYXVsdDogXCIuXCIsIHR5cGU6IFwic3RyaW5nXCIsIGRlc2NyaWJlOiBcInNwZWNpZnkgYnVpbGQgZGlyZWN0b3J5XCIgfSlcbiAgICAgICAgLm9wdGlvbihcImNsZWFuXCIsIHsgYWxpYXM6IFwiY1wiLCBkZWZhdWx0OiBmYWxzZSwgdHlwZTogXCJib29sZWFuXCIsIGRlc2NyaWJlOiBcImNsZWFuIGJlZm9yZSBidWlsZFwiIH0pXG4gICAgICAgIC5vcHRpb24oXCJ3b3Jrc3BhY2VzXCIsIHsgYWxpYXM6IFwid1wiLCBkZWZhdWx0OiBmYWxzZSwgdHlwZTogXCJib29sZWFuXCIsIGRlc2NyaWJlOiBcImJ1aWxkIGFsbCB3b3Jrc3BhY2UgcGFja2FnZXNcIiB9KVxuICAgICAgICAub3B0aW9uKFwiZGVwZW5kZW5jaWVzXCIsIHsgYWxpYXM6IFwiZFwiLCBkZWZhdWx0OiBmYWxzZSwgdHlwZTogXCJib29sZWFuXCIsIGRlc2NyaWJlOiBcImJ1aWxkIGRlcGVuZGVuY2llc1wiIH0pXG4gICAgICAgIC5jb21tYW5kKFwiKlwiLCBcImJ1aWxkIHR5cGVzIGFuZCBib3RoIEpTIGZpbGVzXCIsICgpID0+IHt9KVxuICAgICAgICAuY29tbWFuZChcImNsZWFuXCIsIFwicmVtb3ZlIGJ1aWxkIGFuZCBkaXN0IGRpcmVjdG9yaWVzXCIsICgpID0+IHRhcmdldHMucHVzaChUYXJnZXQuY2xlYW4pKVxuICAgICAgICAuY29tbWFuZChcInR5cGVzXCIsIFwiYnVpbGQgdHlwZSBkZWZpbml0aW9uc1wiLCAoKSA9PiB0YXJnZXRzLnB1c2goVGFyZ2V0LnR5cGVzKSlcbiAgICAgICAgLmNvbW1hbmQoXCJlc21cIiwgXCJidWlsZCBKUyAoRVM2IG1vZHVsZXMpXCIsICgpID0+IHRhcmdldHMucHVzaChUYXJnZXQuZXNtKSlcbiAgICAgICAgLmNvbW1hbmQoXCJjanNcIiwgXCJidWlsZCBKUyAoQ29tbW9uSlMgbW9kdWxlcylcIiwgKCkgPT4gdGFyZ2V0cy5wdXNoKFRhcmdldC5janMpKVxuICAgICAgICAuY29tbWFuZChcImdyYXBoXCIsIFwiZGlzcGxheSB0aGUgd29ya3NwYWNlIGdyYXBoXCIsICgpID0+IChtb2RlID0gTW9kZS5EaXNwbGF5R3JhcGgpKVxuICAgICAgICAuY29tbWFuZChcInRzY29uZmlnc1wiLCBcInN5bmMgYWxsIHRzY29uZmlncyB3aXRoIHBhY2thZ2UuanNvblwiLCAoKSA9PiAobW9kZSA9IE1vZGUuU3luY1RzY29uZmlncykpXG4gICAgICAgIC53cmFwKE1hdGgubWluKHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMsIDgwKSlcbiAgICAgICAgLnN0cmljdCgpLmFyZ3Y7XG5cbiAgICBpZiAobW9kZSA9PT0gTW9kZS5CdWlsZFByb2plY3QpIHtcbiAgICAgICAgaWYgKGFyZ3Mud29ya3NwYWNlcykge1xuICAgICAgICAgICAgbW9kZSA9IE1vZGUuQnVpbGRXb3Jrc3BhY2U7XG4gICAgICAgIH0gZWxzZSBpZiAoYXJncy5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICAgIG1vZGUgPSBNb2RlLkJ1aWxkUHJvamVjdFdpdGhEZXBlbmRlbmNpZXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZGVyKGdyYXBoPzogR3JhcGgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCdWlsZGVyKHsgLi4uYXJncywgdGFyZ2V0czogWy4uLnRhcmdldHNdLCBncmFwaCB9KTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKG1vZGUgYXMgTW9kZSkge1xuICAgICAgICBjYXNlIE1vZGUuQnVpbGRQcm9qZWN0OlxuICAgICAgICAgICAgY29uc3QgcHJvamVjdCA9IG5ldyBQcm9qZWN0KGFyZ3MucHJlZml4KTtcbiAgICAgICAgICAgIGF3YWl0IGJ1aWxkZXIoKS5idWlsZChwcm9qZWN0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgTW9kZS5CdWlsZFByb2plY3RXaXRoRGVwZW5kZW5jaWVzOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyYXBoID0gYXdhaXQgR3JhcGguZm9yUHJvamVjdChhcmdzLnByZWZpeCk7XG4gICAgICAgICAgICAgICAgaWYgKGdyYXBoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgYnVpbGQgd2l0aCBkZXBlbmRlbmNpZXMgYmVjYXVzZSAke2FyZ3MucHJlZml4fSBpcyBub3QgaW4gYSB3b3Jrc3BhY2VgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgZ3JhcGguYnVpbGQoYnVpbGRlcihncmFwaCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBNb2RlLkJ1aWxkV29ya3NwYWNlOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyYXBoID0gYXdhaXQgR3JhcGgubG9hZCgpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHN5bmNBbGxUc2NvbmZpZ3MoZ3JhcGgpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGdyYXBoLmJ1aWxkKGJ1aWxkZXIoZ3JhcGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgTW9kZS5EaXNwbGF5R3JhcGg6XG4gICAgICAgICAgICAoYXdhaXQgR3JhcGgubG9hZCgpKS5kaXNwbGF5KCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIE1vZGUuU3luY1RzY29uZmlnczpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncmFwaCA9IGF3YWl0IEdyYXBoLmxvYWQoKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBzeW5jQWxsVHNjb25maWdzKGdyYXBoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxPQUFPLFdBQVc7QUFDbEIsU0FBUyxlQUFlO0FBQ3hCLFNBQVMsU0FBUyxj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 | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1aWxkaW5nL2NsaS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjItMjAyNCBNYXR0ZXIuanMgQXV0aG9yc1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5pbXBvcnQgeyBjb21tYW5kZXIgfSBmcm9tIFwiLi4vdXRpbC9jb21tYW5kZXIuanNcIjtcbmltcG9ydCB7IEJ1aWxkZXIsIFRhcmdldCB9IGZyb20gXCIuL2J1aWxkZXIuanNcIjtcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSBcIi4vZ3JhcGguanNcIjtcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tIFwiLi9wcm9qZWN0LmpzXCI7XG5pbXBvcnQgeyBzeW5jQWxsVHNjb25maWdzIH0gZnJvbSBcIi4vdHNjb25maWcuanNcIjtcblxuZW51bSBNb2RlIHtcbiAgICBCdWlsZFByb2plY3QsXG4gICAgQnVpbGRQcm9qZWN0V2l0aERlcGVuZGVuY2llcyxcbiAgICBCdWlsZFdvcmtzcGFjZSxcbiAgICBEaXNwbGF5R3JhcGgsXG4gICAgU3luY1RzY29uZmlncyxcbn1cblxuaW50ZXJmYWNlIEFyZ3Mge1xuICAgIHByZWZpeDogc3RyaW5nO1xuICAgIGNsZWFuPzogYm9vbGVhbjtcbiAgICB3b3Jrc3BhY2VzPzogYm9vbGVhbjtcbiAgICBkZXBlbmRlbmNpZXM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbihhcmd2ID0gcHJvY2Vzcy5hcmd2KSB7XG4gICAgY29uc3QgdGFyZ2V0cyA9IEFycmF5PFRhcmdldD4oKTtcbiAgICBsZXQgbW9kZSA9IE1vZGUuQnVpbGRQcm9qZWN0O1xuXG4gICAgY29uc3QgcHJvZ3JhbSA9IGNvbW1hbmRlcihcIm1hdHRlci1idWlsZFwiLCBcIkJ1aWxkcyBwYWNrYWdlcyBhZGhlcmluZyB0byBtYXR0ZXIuanMgc3RhbmRhcmRzLlwiKVxuICAgICAgICAub3B0aW9uKFwiLXAsIC0tcHJlZml4IDxwYXRoPlwiLCBcInNwZWNpZnkgYnVpbGQgZGlyZWN0b3J5XCIsIFwiLlwiKVxuICAgICAgICAub3B0aW9uKFwiLWMsIC0tY2xlYW5cIiwgXCJjbGVhbiBiZWZvcmUgYnVpbGRcIiwgZmFsc2UpXG4gICAgICAgIC5vcHRpb24oXCItdywgLS13b3Jrc3BhY2VzXCIsIFwiYnVpbGQgYWxsIHdvcmtzcGFjZSBwYWNrYWdlc1wiLCBmYWxzZSlcbiAgICAgICAgLm9wdGlvbihcIi1kLCAtLWRlcGVuZGVuY2llc1wiLCBcImJ1aWxkIGRlcGVuZGVuY2llc1wiLCBmYWxzZSk7XG5cbiAgICBwcm9ncmFtXG4gICAgICAgIC5jb21tYW5kKFwiYnVpbGRcIilcbiAgICAgICAgLmRlc2NyaXB0aW9uKFwiKGRlZmF1bHQpIGJ1aWxkIEpTIGFuZCB0eXBlIGRlZmluaXRpb25zXCIpXG4gICAgICAgIC5hY3Rpb24oKCkgPT4ge30pO1xuXG4gICAgcHJvZ3JhbVxuICAgICAgICAuY29tbWFuZChcImNsZWFuXCIpXG4gICAgICAgIC5kZXNjcmlwdGlvbihcInJlbW92ZSBidWlsZCBhbmQgZGlzdCBkaXJlY3Rvcmllc1wiKVxuICAgICAgICAuYWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgIHRhcmdldHMucHVzaChUYXJnZXQuY2xlYW4pO1xuICAgICAgICB9KTtcblxuICAgIHByb2dyYW1cbiAgICAgICAgLmNvbW1hbmQoXCJ0eXBlc1wiKVxuICAgICAgICAuZGVzY3JpcHRpb24oXCJidWlsZCB0eXBlIGRlZmluaXRpb25zXCIpXG4gICAgICAgIC5hY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgdGFyZ2V0cy5wdXNoKFRhcmdldC50eXBlcyk7XG4gICAgICAgIH0pO1xuXG4gICAgcHJvZ3JhbVxuICAgICAgICAuY29tbWFuZChcImVzbVwiKVxuICAgICAgICAuZGVzY3JpcHRpb24oXCJidWlsZCBKUyAoRVM2IG1vZHVsZXMpXCIpXG4gICAgICAgIC5hY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgdGFyZ2V0cy5wdXNoKFRhcmdldC5lc20pO1xuICAgICAgICB9KTtcblxuICAgIHByb2dyYW1cbiAgICAgICAgLmNvbW1hbmQoXCJjanNcIilcbiAgICAgICAgLmRlc2NyaXB0aW9uKFwiYnVpbGQgSlMgKENvbW1vbkpTIG1vZHVsZXMpXCIpXG4gICAgICAgIC5hY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgdGFyZ2V0cy5wdXNoKFRhcmdldC5janMpO1xuICAgICAgICB9KTtcblxuICAgIHByb2dyYW1cbiAgICAgICAgLmNvbW1hbmQoXCJncmFwaFwiKVxuICAgICAgICAuZGVzY3JpcHRpb24oXCJkaXNwbGF5IHRoZSB3b3Jrc3BhY2UgZ3JhcGhcIilcbiAgICAgICAgLmFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICBtb2RlID0gTW9kZS5EaXNwbGF5R3JhcGg7XG4gICAgICAgIH0pO1xuXG4gICAgcHJvZ3JhbVxuICAgICAgICAuY29tbWFuZChcInRzY29uZmlnc1wiKVxuICAgICAgICAuZGVzY3JpcHRpb24oXCJzeW5jIGFsbCB0c2NvbmZpZ3Mgd2l0aCBwYWNrYWdlLmpzb25cIilcbiAgICAgICAgLmFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICBtb2RlID0gTW9kZS5TeW5jVHNjb25maWdzO1xuICAgICAgICB9KTtcblxuICAgIHByb2dyYW0uYWN0aW9uKCgpID0+IHt9KTtcblxuICAgIGNvbnN0IGFyZ3MgPSBwcm9ncmFtLnBhcnNlKGFyZ3YpLm9wdHM8QXJncz4oKTtcblxuICAgIGlmIChtb2RlID09PSBNb2RlLkJ1aWxkUHJvamVjdCkge1xuICAgICAgICBpZiAoYXJncy53b3Jrc3BhY2VzKSB7XG4gICAgICAgICAgICBtb2RlID0gTW9kZS5CdWlsZFdvcmtzcGFjZTtcbiAgICAgICAgfSBlbHNlIGlmIChhcmdzLmRlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgbW9kZSA9IE1vZGUuQnVpbGRQcm9qZWN0V2l0aERlcGVuZGVuY2llcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkZXIoZ3JhcGg/OiBHcmFwaCkge1xuICAgICAgICByZXR1cm4gbmV3IEJ1aWxkZXIoeyAuLi5hcmdzLCB0YXJnZXRzOiBbLi4udGFyZ2V0c10sIGdyYXBoIH0pO1xuICAgIH1cblxuICAgIHN3aXRjaCAobW9kZSBhcyBNb2RlKSB7XG4gICAgICAgIGNhc2UgTW9kZS5CdWlsZFByb2plY3Q6XG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0ID0gbmV3IFByb2plY3QoYXJncy5wcmVmaXgpO1xuICAgICAgICAgICAgYXdhaXQgYnVpbGRlcigpLmJ1aWxkKHByb2plY3QpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBNb2RlLkJ1aWxkUHJvamVjdFdpdGhEZXBlbmRlbmNpZXM6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JhcGggPSBhd2FpdCBHcmFwaC5mb3JQcm9qZWN0KGFyZ3MucHJlZml4KTtcbiAgICAgICAgICAgICAgICBpZiAoZ3JhcGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBidWlsZCB3aXRoIGRlcGVuZGVuY2llcyBiZWNhdXNlICR7YXJncy5wcmVmaXh9IGlzIG5vdCBpbiBhIHdvcmtzcGFjZWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhd2FpdCBncmFwaC5idWlsZChidWlsZGVyKGdyYXBoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIE1vZGUuQnVpbGRXb3Jrc3BhY2U6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JhcGggPSBhd2FpdCBHcmFwaC5sb2FkKCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgc3luY0FsbFRzY29uZmlncyhncmFwaCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgZ3JhcGguYnVpbGQoYnVpbGRlcihncmFwaCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBNb2RlLkRpc3BsYXlHcmFwaDpcbiAgICAgICAgICAgIChhd2FpdCBHcmFwaC5sb2FkKCkpLmRpc3BsYXkoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgTW9kZS5TeW5jVHNjb25maWdzOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyYXBoID0gYXdhaXQgR3JhcGgubG9hZCgpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHN5bmNBbGxUc2NvbmZpZ3MoZ3JhcGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BLFNBQVMsaUJBQWlCO0FBQzFCLFNBQVMsU0FBUyxjQUFjO0FBQ2hDLFNBQVMsYUFBYTtBQUN0QixTQUFTLGVBQWU7QUFDeEIsU0FBUyx3QkFBd0I7QUFFakMsSUFBSyxPQUFMLGtCQUFLQSxVQUFMO0FBQ0ksRUFBQUEsWUFBQTtBQUNBLEVBQUFBLFlBQUE7QUFDQSxFQUFBQSxZQUFBO0FBQ0EsRUFBQUEsWUFBQTtBQUNBLEVBQUFBLFlBQUE7QUFMQyxTQUFBQTtBQUFBLEdBQUE7QUFlTCxlQUFzQixLQUFLLE9BQU8sUUFBUSxNQUFNO0FBQzVDLFFBQU0sVUFBVSxNQUFjO0FBQzlCLE1BQUksT0FBTztBQUVYLFFBQU0sVUFBVSxVQUFVLGdCQUFnQixrREFBa0QsRUFDdkYsT0FBTyx1QkFBdUIsMkJBQTJCLEdBQUcsRUFDNUQsT0FBTyxlQUFlLHNCQUFzQixLQUFLLEVBQ2pELE9BQU8sb0JBQW9CLGdDQUFnQyxLQUFLLEVBQ2hFLE9BQU8sc0JBQXNCLHNCQUFzQixLQUFLO0FBRTdELFVBQ0ssUUFBUSxPQUFPLEVBQ2YsWUFBWSx5Q0FBeUMsRUFDckQsT0FBTyxNQUFNO0FBQUEsRUFBQyxDQUFDO0FBRXBCLFVBQ0ssUUFBUSxPQUFPLEVBQ2YsWUFBWSxtQ0FBbUMsRUFDL0MsT0FBTyxNQUFNO0FBQ1YsWUFBUSxLQUFLLE9BQU8sS0FBSztBQUFBLEVBQzdCLENBQUM7QUFFTCxVQUNLLFFBQVEsT0FBTyxFQUNmLFlBQVksd0JBQXdCLEVBQ3BDLE9BQU8sTUFBTTtBQUNWLFlBQVEsS0FBSyxPQUFPLEtBQUs7QUFBQSxFQUM3QixDQUFDO0FBRUwsVUFDSyxRQUFRLEtBQUssRUFDYixZQUFZLHdCQUF3QixFQUNwQyxPQUFPLE1BQU07QUFDVixZQUFRLEtBQUssT0FBTyxHQUFHO0FBQUEsRUFDM0IsQ0FBQztBQUVMLFVBQ0ssUUFBUSxLQUFLLEVBQ2IsWUFBWSw2QkFBNkIsRUFDekMsT0FBTyxNQUFNO0FBQ1YsWUFBUSxLQUFLLE9BQU8sR0FBRztBQUFBLEVBQzNCLENBQUM7QUFFTCxVQUNLLFFBQVEsT0FBTyxFQUNmLFlBQVksNkJBQTZCLEVBQ3pDLE9BQU8sTUFBTTtBQUNWLFdBQU87QUFBQSxFQUNYLENBQUM7QUFFTCxVQUNLLFFBQVEsV0FBVyxFQUNuQixZQUFZLHNDQUFzQyxFQUNsRCxPQUFPLE1BQU07QUFDVixXQUFPO0FBQUEsRUFDWCxDQUFDO0FBRUwsVUFBUSxPQUFPLE1BQU07QUFBQSxFQUFDLENBQUM7QUFFdkIsUUFBTSxPQUFPLFFBQVEsTUFBTSxJQUFJLEVBQUUsS0FBVztBQUU1QyxNQUFJLFNBQVMsc0JBQW1CO0FBQzVCLFFBQUksS0FBSyxZQUFZO0FBQ2pCLGFBQU87QUFBQSxJQUNYLFdBQVcsS0FBSyxjQUFjO0FBQzFCLGFBQU87QUFBQSxJQUNYO0FBQUEsRUFDSjtBQUVBLFdBQVMsUUFBUSxPQUFlO0FBQzVCLFdBQU8sSUFBSSxRQUFRLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFBQSxFQUNoRTtBQUVBLFVBQVEsTUFBYztBQUFBLElBQ2xCLEtBQUs7QUFDRCxZQUFNLFVBQVUsSUFBSSxRQUFRLEtBQUssTUFBTTtBQUN2QyxZQUFNLFFBQVEsRUFBRSxNQUFNLE9BQU87QUFDN0I7QUFBQSxJQUVKLEtBQUs7QUFDRDtBQUNJLGNBQU0sUUFBUSxNQUFNLE1BQU0sV0FBVyxLQUFLLE1BQU07QUFDaEQsWUFBSSxVQUFVLFFBQVc7QUFDckIsZ0JBQU0sSUFBSSxNQUFNLDBDQUEwQyxLQUFLLE1BQU0sd0JBQXdCO0FBQUEsUUFDakc7QUFDQSxjQUFNLE1BQU0sTUFBTSxRQUFRLEtBQUssQ0FBQztBQUFBLE1BQ3BDO0FBQ0E7QUFBQSxJQUVKLEtBQUs7QUFDRDtBQUNJLGNBQU0sUUFBUSxNQUFNLE1BQU0sS0FBSztBQUMvQixjQUFNLGlCQUFpQixLQUFLO0FBQzVCLGNBQU0sTUFBTSxNQUFNLFFBQVEsS0FBSyxDQUFDO0FBQUEsTUFDcEM7QUFDQTtBQUFBLElBRUosS0FBSztBQUNELE9BQUMsTUFBTSxNQUFNLEtBQUssR0FBRyxRQUFRO0FBQzdCO0FBQUEsSUFFSixLQUFLO0FBQ0Q7QUFDSSxjQUFNLFFBQVEsTUFBTSxNQUFNLEtBQUs7QUFDL0IsY0FBTSxpQkFBaUIsS0FBSztBQUFBLE1BQ2hDO0FBQ0E7QUFBQSxFQUNSO0FBQ0o7IiwKICAibmFtZXMiOiBbIk1vZGUiXQp9Cg== |
@@ -6,3 +6,2 @@ /** | ||
*/ | ||
import mapWorkspaces from "@npmcli/map-workspaces"; | ||
import colors from "ansi-colors"; | ||
@@ -144,7 +143,7 @@ import { JsonNotFoundError, Package } from "../util/package.js"; | ||
static async #loadNodes(workspace) { | ||
const workspaces = await mapWorkspaces({ pkg: workspace.json, cwd: workspace.path }); | ||
const workspaces = workspace.json.workspaces; | ||
const nodeMap = {}; | ||
const allDeps = {}; | ||
for (const path of workspaces.values()) { | ||
const pkg = new Package({ path }); | ||
const pkg = new Package({ path: workspace.resolve(path) }); | ||
allDeps[pkg.json.name] = pkg.dependencies; | ||
@@ -193,2 +192,2 @@ nodeMap[pkg.json.name] = { | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1aWxkaW5nL2dyYXBoLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMi0yMDI0IE1hdHRlci5qcyBBdXRob3JzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCBtYXBXb3Jrc3BhY2VzIGZyb20gXCJAbnBtY2xpL21hcC13b3Jrc3BhY2VzXCI7XG5pbXBvcnQgY29sb3JzIGZyb20gXCJhbnNpLWNvbG9yc1wiO1xuaW1wb3J0IHsgSnNvbk5vdEZvdW5kRXJyb3IsIFBhY2thZ2UgfSBmcm9tIFwiLi4vdXRpbC9wYWNrYWdlLmpzXCI7XG5pbXBvcnQgeyBQcm9ncmVzcyB9IGZyb20gXCIuLi91dGlsL3Byb2dyZXNzLmpzXCI7XG5pbXBvcnQgeyBCdWlsZGVyIH0gZnJvbSBcIi4vYnVpbGRlci5qc1wiO1xuaW1wb3J0IHsgSW50ZXJuYWxCdWlsZEVycm9yIH0gZnJvbSBcIi4vZXJyb3IuanNcIjtcbmltcG9ydCB7IEJVSUxEX0lORk9fTE9DQVRJT04sIEJ1aWxkSW5mb3JtYXRpb24sIFByb2plY3QgfSBmcm9tIFwiLi9wcm9qZWN0LmpzXCI7XG5cbi8qKlxuICogR3JhcGggb2YgZGVwZW5kZW5jaWVzIGZvciB3b3Jrc3BhY2UgcGFja2FnZXMuXG4gKlxuICogV2UgdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gZGV0ZXJtaW5lIHdoaWNoIHBhY2thZ2VzIGFyZSBcImRpcnR5XCIgYW5kIG5lZWQgcmVidWlsZC4gIEluIHRoZSBmdXR1cmUgd2UgY2FuIGFsc28gdXNlIGZvclxuICogcGFyYWxsZWwgYnVpbGQsIG9ubHkgdHJpY2t5IHBhcnQgdGhlcmUgaXMgc2hvd2luZyBzdGF0dXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBHcmFwaCB7XG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG5vZGVzOiBHcmFwaC5Ob2RlW10pIHt9XG5cbiAgICBnZXQobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLm5vZGVzLmZpbmQobm9kZSA9PiBub2RlLnBrZy5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgbG9jYXRlIHBhY2thZ2UgXCIke25hbWV9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgbG9hZChwa2cgPSBQYWNrYWdlLndvcmtzcGFjZSkge1xuICAgICAgICBjb25zdCBub2RlTWFwID0gYXdhaXQgdGhpcy4jbG9hZE5vZGVzKHBrZy53b3Jrc3BhY2UpO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy4jY3JlYXRlR3JhcGgoT2JqZWN0LnZhbHVlcyhub2RlTWFwKSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGZvclByb2plY3QocGF0aDogc3RyaW5nKTogUHJvbWlzZTxHcmFwaCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBsZXQgd29ya3NwYWNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgd29ya3NwYWNlID0gUGFja2FnZS53b3Jrc3BhY2VGb3IocGF0aCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgSnNvbk5vdEZvdW5kRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyBQcm9qZWN0IGlzIG5vdCBpbiBhIHdvcmtzcGFjZVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub2RlTWFwID0gYXdhaXQgdGhpcy4jbG9hZE5vZGVzKHdvcmtzcGFjZSk7XG5cbiAgICAgICAgY29uc3Qgcm9vdFBrZyA9IG5ldyBQYWNrYWdlKHsgcGF0aDogcGF0aCB9KTtcbiAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSBub2RlTWFwW3Jvb3RQa2cuanNvbi5uYW1lXTtcbiAgICAgICAgaWYgKCFyb290Tm9kZSkge1xuICAgICAgICAgICAgLy8gUHJvamVjdCByZXNpZGVzIHVuZGVyIGEgd29ya3NwYWNlIGJ1dCBpcyBub3QgcGFydCBvZiB0aGUgd29ya3NwYWNlXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub2RlcyA9IG5ldyBTZXQ8R3JhcGguTm9kZT4oKTtcbiAgICAgICAgZnVuY3Rpb24gYWRkTm9kZShub2RlOiBHcmFwaC5Ob2RlKSB7XG4gICAgICAgICAgICBpZiAobm9kZXMuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9kZXMuYWRkKG5vZGUpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBkZXBlbmRlbmN5IG9mIG5vZGUuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAgICAgYWRkTm9kZShkZXBlbmRlbmN5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGFkZE5vZGUocm9vdE5vZGUpO1xuXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLiNjcmVhdGVHcmFwaChbLi4ubm9kZXNdKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPIC0gcGFyYWxsZWxpemF0aW9uIHdpbGwgYmUgdHJpdmlhbCBleGNlcHQgbmVlZCB0byB1cGRhdGUgUHJvZ3Jlc3MgdG8gc3VwcG9ydCBkaXNwbGF5IG9mIG11bHRpcGxlIHNpbXVsdGFuZW91c1xuICAgIC8vIHRhc2tzXG4gICAgYXN5bmMgYnVpbGQoYnVpbGRlcjogQnVpbGRlciwgc2hvd1NraXBwZWQgPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHRvQnVpbGQgPSBuZXcgU2V0KHRoaXMubm9kZXMpO1xuXG4gICAgICAgIGNvbnN0IG5lZWRzQ29uZmlnID0gdGhpcy5ub2Rlcy5maW5kKG5vZGUgPT4gbm9kZS5wa2cuaGFzQ29uZmlnKTtcbiAgICAgICAgaWYgKGJ1aWxkZXIuaGFzQ2xlYW4gfHwgbmVlZHNDb25maWcpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgY2xlYW4gYWxsIHBhY2thZ2VzIGJlZm9yZSBlbmdhZ2luZyB0eXBlc2NyaXB0IGJlY2F1c2Ugb3RoZXJ3aXNlIGl0IHNlZW1zIHRvIGdldCBjb25mdXNlZFxuICAgICAgICAgICAgICAgIGlmIChidWlsZGVyLmhhc0NsZWFuKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuY2xlYXJDbGVhbigpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5ub2Rlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgbm9kZS5wcm9qZWN0LmNsZWFuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmluZm8gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFdlIGNvbmZpZ3VyZSBlYWNoIGJ1aWxkIGJlZm9yZSBidWlsZGluZyBzbyB0aGF0IGFueSBnZW5lcmF0ZWQgZmlsZXMgYXJlIGluIHBsYWNlIGJlZm9yZSB3ZSBpbml0aWF0ZSB0aGUgYnVpbGRcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5ub2Rlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUucGtnLmhhc0NvbmZpZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYnVpbGRlci5jb25maWd1cmUobm9kZS5wcm9qZWN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRlcm1pbmF0aW5nIGR1ZSB0byBwcmVidWlsZCBlcnJvcjpcIiwgZSk7XG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKHRvQnVpbGQuc2l6ZSkge1xuICAgICAgICAgICAgbGV0IG5vZGU7XG5cbiAgICAgICAgICAgIG5vZGVzOiBmb3IgKG5vZGUgb2YgdG9CdWlsZCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZGVwIG9mIG5vZGUuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXAuaXNEaXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgbm9kZXM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludGVybmFsIGxvZ2ljIGVycm9yOiBObyB1bmJ1aWx0IHByb2plY3QgaGFzIGZ1bGx5IGJ1aWx0IGRlcGVuZGVuY2llc1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub2RlLmlzRGlydHkgfHwgYnVpbGRlci51bmNvbmRpdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgYnVpbGRlci5idWlsZChub2RlLnByb2plY3QpO1xuICAgICAgICAgICAgICAgIG5vZGUuaW5mby50aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNob3dTa2lwcGVkKSB7XG4gICAgICAgICAgICAgICAgbmV3IFByb2dyZXNzKCkuc2tpcChcIlVwIHRvIGRhdGVcIiwgbm9kZS5wa2cpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b0J1aWxkLmRlbGV0ZShub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRpc3BsYXkoKSB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLm5vZGVzKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9ncmVzcyA9IG5vZGUucGtnLnN0YXJ0KFwiTm9kZVwiKTtcbiAgICAgICAgICAgIHByb2dyZXNzLmluZm8oXCJwYXRoXCIsIG5vZGUucGtnLnBhdGgpO1xuICAgICAgICAgICAgcHJvZ3Jlc3MuaW5mbyhcIm1vZGlmaWVkXCIsIGZvcm1hdFRpbWUobm9kZS5tb2RpZnlUaW1lKSk7XG4gICAgICAgICAgICBwcm9ncmVzcy5pbmZvKFwiYnVpbHRcIiwgZm9ybWF0VGltZShub2RlLmluZm8udGltZXN0YW1wID8/IDApKTtcbiAgICAgICAgICAgIHByb2dyZXNzLmluZm8oXCJkaXJ0eVwiLCBub2RlLmlzRGlydHkgPyBjb2xvcnMuZGltLnJlZChcInllc1wiKSA6IGNvbG9ycy5kaW0uZ3JlZW4oXCJub1wiKSk7XG4gICAgICAgICAgICBwcm9ncmVzcy5pbmZvKFwiZGVwZW5kZW5jaWVzXCIsIG5vZGUuZGVwZW5kZW5jaWVzLm1hcChmb3JtYXREZXApLmpvaW4oXCIsIFwiKSk7XG4gICAgICAgICAgICBwcm9ncmVzcy5zaHV0ZG93bigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jICNjcmVhdGVHcmFwaChub2RlczogR3JhcGguTm9kZVtdKSB7XG4gICAgICAgIGNvbnN0IGdyYXBoID0gbmV3IEdyYXBoKG5vZGVzKTtcblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIGdyYXBoLm5vZGVzLm1hcChhc3luYyBub2RlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5wa2cuaGFzRmlsZShCVUlMRF9JTkZPX0xPQ0FUSU9OKSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlLmluZm8gPSBhd2FpdCBub2RlLnBrZy5yZWFkSnNvbihCVUlMRF9JTkZPX0xPQ0FUSU9OKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBub2RlLm1vZGlmeVRpbWUgPSBhd2FpdCBub2RlLnBrZy5sYXN0TW9kaWZpZWQoXCJwYWNrYWdlLmpzb25cIiwgXCJzcmNcIiwgXCJ0ZXN0XCIpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBzdGFjayA9IEFycmF5PEdyYXBoLk5vZGU+KCk7XG4gICAgICAgIGZ1bmN0aW9uIGZpbmRDaXJjdWxhcihub2RlOiBHcmFwaC5Ob2RlKSB7XG4gICAgICAgICAgICBpZiAoc3RhY2suaW5kZXhPZihub2RlKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBzdGFjay5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEJ1aWxkRXJyb3IoYENpcmN1bGFyIGRlcGVuZGVuY3k6ICR7c3RhY2subWFwKGZvcm1hdERlcCkuam9pbihcIiBcdTI1QjggXCIpfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaChub2RlKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZGVwIG9mIG5vZGUuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAgICAgZmluZENpcmN1bGFyKGRlcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFjay5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgZ3JhcGgubm9kZXMpIHtcbiAgICAgICAgICAgIGZpbmRDaXJjdWxhcihub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBncmFwaDtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgI2xvYWROb2Rlcyh3b3Jrc3BhY2U6IFBhY2thZ2UpIHtcbiAgICAgICAgY29uc3Qgd29ya3NwYWNlcyA9IGF3YWl0IG1hcFdvcmtzcGFjZXMoeyBwa2c6IHdvcmtzcGFjZS5qc29uLCBjd2Q6IHdvcmtzcGFjZS5wYXRoIH0pO1xuXG4gICAgICAgIGNvbnN0IG5vZGVNYXAgPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBHcmFwaC5Ob2RlPjtcbiAgICAgICAgY29uc3QgYWxsRGVwcyA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcbiAgICAgICAgZm9yIChjb25zdCBwYXRoIG9mIHdvcmtzcGFjZXMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBrZyA9IG5ldyBQYWNrYWdlKHsgcGF0aDogcGF0aCB9KTtcbiAgICAgICAgICAgIGFsbERlcHNbcGtnLmpzb24ubmFtZV0gPSBwa2cuZGVwZW5kZW5jaWVzO1xuICAgICAgICAgICAgbm9kZU1hcFtwa2cuanNvbi5uYW1lXSA9IHtcbiAgICAgICAgICAgICAgICBwa2csXG4gICAgICAgICAgICAgICAgcHJvamVjdDogbmV3IFByb2plY3QocGtnKSxcbiAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXM6IFtdLFxuICAgICAgICAgICAgICAgIGluZm86IHt9LFxuICAgICAgICAgICAgICAgIG1vZGlmeVRpbWU6IDAsXG5cbiAgICAgICAgICAgICAgICBnZXQgYnVpbGRUaW1lKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbmZvLnRpbWVzdGFtcCA/IG5ldyBEYXRlKHRoaXMuaW5mby50aW1lc3RhbXApLmdldFRpbWUoKSA6IDA7XG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIGdldCBpc0RpcnR5KCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RpZnlUaW1lID4gdGhpcy5idWlsZFRpbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICEhdGhpcy5kZXBlbmRlbmNpZXMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXAgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwLmlzRGlydHkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlcC5idWlsZFRpbWUgPiB0aGlzLmJ1aWxkVGltZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlcC5pbmZvLmFwaVNoYSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwLmluZm8uYXBpU2hhICE9PSB0aGlzLmluZm8uZGVwZW5kZW5jeUFwaVNoYXM/LltkZXAucGtnLm5hbWVdKSksXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gYWxsRGVwcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBkZXAgb2YgYWxsRGVwc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcE5vZGUgPSBub2RlTWFwW2RlcF07XG5cbiAgICAgICAgICAgICAgICAvLyBOb3RlIC0tIGFsbG93IG5vZGVzIHRvIHJlZmVyZW5jZSB0aGVtc2VsdmVzLCBzZWVtcyB0byBiZSBuZWNlc3Nhcnkgb24gdG9vbHMgZm9yIHVzZSBvZiB0c2NcbiAgICAgICAgICAgICAgICBpZiAoZGVwTm9kZSAmJiBkZXBOb2RlICE9PSBub2RlTWFwW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVNYXBbbmFtZV0uZGVwZW5kZW5jaWVzLnB1c2goZGVwTm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGVNYXA7XG4gICAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIEdyYXBoIHtcbiAgICBleHBvcnQgaW50ZXJmYWNlIE5vZGUge1xuICAgICAgICBwa2c6IFBhY2thZ2U7XG4gICAgICAgIHByb2plY3Q6IFByb2plY3Q7XG4gICAgICAgIGRlcGVuZGVuY2llczogTm9kZVtdO1xuICAgICAgICBidWlsZFRpbWU6IG51bWJlcjtcbiAgICAgICAgaW5mbzogQnVpbGRJbmZvcm1hdGlvbjtcbiAgICAgICAgbW9kaWZ5VGltZTogbnVtYmVyO1xuICAgICAgICBpc0RpcnR5OiBib29sZWFuO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0VGltZSh0aW1lOiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgICBpZiAoIXRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGNvbG9ycy5kaW0ucmVkKFwibmV2ZXJcIik7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGltZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aW1lID0gbmV3IERhdGUodGltZSkuZ2V0VGltZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUodGltZSAtIG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSkudG9JU09TdHJpbmcoKS5zcGxpdChcIi5cIilbMF0ucmVwbGFjZShcIlRcIiwgXCIgXCIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREZXAobm9kZTogR3JhcGguTm9kZSkge1xuICAgIHJldHVybiBub2RlLnBrZy5uYW1lLnJlcGxhY2UoL15AbWF0dGVyXFwvLywgXCJcIik7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEsT0FBTyxtQkFBbUI7QUFDMUIsT0FBTyxZQUFZO0FBQ25CLFNBQVMsbUJBQW1CLGVBQWU7QUFDM0MsU0FBUyxnQkFBZ0I7QUFFekIsU0FBUywwQkFBMEI7QUFDbkMsU0FBUyxxQkFBdUMsZUFBZTtBQVF4RCxNQUFNLE1BQU07QUFBQSxFQUNMLFlBQXFCLE9BQXFCO0FBQXJCO0FBQUEsRUFBc0I7QUFBQSxFQUVyRCxJQUFJLE1BQWM7QUFDZCxVQUFNLE9BQU8sS0FBSyxN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 | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1aWxkaW5nL2dyYXBoLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMi0yMDI0IE1hdHRlci5qcyBBdXRob3JzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCBjb2xvcnMgZnJvbSBcImFuc2ktY29sb3JzXCI7XG5pbXBvcnQgeyBKc29uTm90Rm91bmRFcnJvciwgUGFja2FnZSB9IGZyb20gXCIuLi91dGlsL3BhY2thZ2UuanNcIjtcbmltcG9ydCB7IFByb2dyZXNzIH0gZnJvbSBcIi4uL3V0aWwvcHJvZ3Jlc3MuanNcIjtcbmltcG9ydCB7IEJ1aWxkZXIgfSBmcm9tIFwiLi9idWlsZGVyLmpzXCI7XG5pbXBvcnQgeyBJbnRlcm5hbEJ1aWxkRXJyb3IgfSBmcm9tIFwiLi9lcnJvci5qc1wiO1xuaW1wb3J0IHsgQlVJTERfSU5GT19MT0NBVElPTiwgQnVpbGRJbmZvcm1hdGlvbiwgUHJvamVjdCB9IGZyb20gXCIuL3Byb2plY3QuanNcIjtcblxuLyoqXG4gKiBHcmFwaCBvZiBkZXBlbmRlbmNpZXMgZm9yIHdvcmtzcGFjZSBwYWNrYWdlcy5cbiAqXG4gKiBXZSB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBkZXRlcm1pbmUgd2hpY2ggcGFja2FnZXMgYXJlIFwiZGlydHlcIiBhbmQgbmVlZCByZWJ1aWxkLiAgSW4gdGhlIGZ1dHVyZSB3ZSBjYW4gYWxzbyB1c2UgZm9yXG4gKiBwYXJhbGxlbCBidWlsZCwgb25seSB0cmlja3kgcGFydCB0aGVyZSBpcyBzaG93aW5nIHN0YXR1cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEdyYXBoIHtcbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocmVhZG9ubHkgbm9kZXM6IEdyYXBoLk5vZGVbXSkge31cblxuICAgIGdldChuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMubm9kZXMuZmluZChub2RlID0+IG5vZGUucGtnLm5hbWUgPT09IG5hbWUpO1xuICAgICAgICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBsb2NhdGUgcGFja2FnZSBcIiR7bmFtZX1cImApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBsb2FkKHBrZyA9IFBhY2thZ2Uud29ya3NwYWNlKSB7XG4gICAgICAgIGNvbnN0IG5vZGVNYXAgPSBhd2FpdCB0aGlzLiNsb2FkTm9kZXMocGtnLndvcmtzcGFjZSk7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLiNjcmVhdGVHcmFwaChPYmplY3QudmFsdWVzKG5vZGVNYXApKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgZm9yUHJvamVjdChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPEdyYXBoIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGxldCB3b3Jrc3BhY2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB3b3Jrc3BhY2UgPSBQYWNrYWdlLndvcmtzcGFjZUZvcihwYXRoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBKc29uTm90Rm91bmRFcnJvcikge1xuICAgICAgICAgICAgICAgIC8vIFByb2plY3QgaXMgbm90IGluIGEgd29ya3NwYWNlXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vZGVNYXAgPSBhd2FpdCB0aGlzLiNsb2FkTm9kZXMod29ya3NwYWNlKTtcblxuICAgICAgICBjb25zdCByb290UGtnID0gbmV3IFBhY2thZ2UoeyBwYXRoOiBwYXRoIH0pO1xuICAgICAgICBjb25zdCByb290Tm9kZSA9IG5vZGVNYXBbcm9vdFBrZy5qc29uLm5hbWVdO1xuICAgICAgICBpZiAoIXJvb3ROb2RlKSB7XG4gICAgICAgICAgICAvLyBQcm9qZWN0IHJlc2lkZXMgdW5kZXIgYSB3b3Jrc3BhY2UgYnV0IGlzIG5vdCBwYXJ0IG9mIHRoZSB3b3Jrc3BhY2VcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vZGVzID0gbmV3IFNldDxHcmFwaC5Ob2RlPigpO1xuICAgICAgICBmdW5jdGlvbiBhZGROb2RlKG5vZGU6IEdyYXBoLk5vZGUpIHtcbiAgICAgICAgICAgIGlmIChub2Rlcy5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2Rlcy5hZGQobm9kZSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3kgb2Ygbm9kZS5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICAgICAgICBhZGROb2RlKGRlcGVuZGVuY3kpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYWRkTm9kZShyb290Tm9kZSk7XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuI2NyZWF0ZUdyYXBoKFsuLi5ub2Rlc10pO1xuICAgIH1cblxuICAgIC8vIFRPRE8gLSBwYXJhbGxlbGl6YXRpb24gd2lsbCBiZSB0cml2aWFsIGV4Y2VwdCBuZWVkIHRvIHVwZGF0ZSBQcm9ncmVzcyB0byBzdXBwb3J0IGRpc3BsYXkgb2YgbXVsdGlwbGUgc2ltdWx0YW5lb3VzXG4gICAgLy8gdGFza3NcbiAgICBhc3luYyBidWlsZChidWlsZGVyOiBCdWlsZGVyLCBzaG93U2tpcHBlZCA9IHRydWUpIHtcbiAgICAgICAgY29uc3QgdG9CdWlsZCA9IG5ldyBTZXQodGhpcy5ub2Rlcyk7XG5cbiAgICAgICAgY29uc3QgbmVlZHNDb25maWcgPSB0aGlzLm5vZGVzLmZpbmQobm9kZSA9PiBub2RlLnBrZy5oYXNDb25maWcpO1xuICAgICAgICBpZiAoYnVpbGRlci5oYXNDbGVhbiB8fCBuZWVkc0NvbmZpZykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBXZSBjbGVhbiBhbGwgcGFja2FnZXMgYmVmb3JlIGVuZ2FnaW5nIHR5cGVzY3JpcHQgYmVjYXVzZSBvdGhlcndpc2UgaXQgc2VlbXMgdG8gZ2V0IGNvbmZ1c2VkXG4gICAgICAgICAgICAgICAgaWYgKGJ1aWxkZXIuaGFzQ2xlYW4pIHtcbiAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5jbGVhckNsZWFuKCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLm5vZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBub2RlLnByb2plY3QuY2xlYW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuaW5mbyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gV2UgY29uZmlndXJlIGVhY2ggYnVpbGQgYmVmb3JlIGJ1aWxkaW5nIHNvIHRoYXQgYW55IGdlbmVyYXRlZCBmaWxlcyBhcmUgaW4gcGxhY2UgYmVmb3JlIHdlIGluaXRpYXRlIHRoZSBidWlsZFxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLm5vZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS5wa2cuaGFzQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBidWlsZGVyLmNvbmZpZ3VyZShub2RlLnByb2plY3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiVGVybWluYXRpbmcgZHVlIHRvIHByZWJ1aWxkIGVycm9yOlwiLCBlKTtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAodG9CdWlsZC5zaXplKSB7XG4gICAgICAgICAgICBsZXQgbm9kZTtcblxuICAgICAgICAgICAgbm9kZXM6IGZvciAobm9kZSBvZiB0b0J1aWxkKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXAgb2Ygbm9kZS5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlcC5pc0RpcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBub2RlcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW50ZXJuYWwgbG9naWMgZXJyb3I6IE5vIHVuYnVpbHQgcHJvamVjdCBoYXMgZnVsbHkgYnVpbHQgZGVwZW5kZW5jaWVzXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vZGUuaXNEaXJ0eSB8fCBidWlsZGVyLnVuY29uZGl0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKG5vZGUucHJvamVjdCk7XG4gICAgICAgICAgICAgICAgbm9kZS5pbmZvLnRpbWVzdGFtcCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvd1NraXBwZWQpIHtcbiAgICAgICAgICAgICAgICBuZXcgUHJvZ3Jlc3MoKS5za2lwKFwiVXAgdG8gZGF0ZVwiLCBub2RlLnBrZyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRvQnVpbGQuZGVsZXRlKG5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGlzcGxheSgpIHtcbiAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIHRoaXMubm9kZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2dyZXNzID0gbm9kZS5wa2cuc3RhcnQoXCJOb2RlXCIpO1xuICAgICAgICAgICAgcHJvZ3Jlc3MuaW5mbyhcInBhdGhcIiwgbm9kZS5wa2cucGF0aCk7XG4gICAgICAgICAgICBwcm9ncmVzcy5pbmZvKFwibW9kaWZpZWRcIiwgZm9ybWF0VGltZShub2RlLm1vZGlmeVRpbWUpKTtcbiAgICAgICAgICAgIHByb2dyZXNzLmluZm8oXCJidWlsdFwiLCBmb3JtYXRUaW1lKG5vZGUuaW5mby50aW1lc3RhbXAgPz8gMCkpO1xuICAgICAgICAgICAgcHJvZ3Jlc3MuaW5mbyhcImRpcnR5XCIsIG5vZGUuaXNEaXJ0eSA/IGNvbG9ycy5kaW0ucmVkKFwieWVzXCIpIDogY29sb3JzLmRpbS5ncmVlbihcIm5vXCIpKTtcbiAgICAgICAgICAgIHByb2dyZXNzLmluZm8oXCJkZXBlbmRlbmNpZXNcIiwgbm9kZS5kZXBlbmRlbmNpZXMubWFwKGZvcm1hdERlcCkuam9pbihcIiwgXCIpKTtcbiAgICAgICAgICAgIHByb2dyZXNzLnNodXRkb3duKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgI2NyZWF0ZUdyYXBoKG5vZGVzOiBHcmFwaC5Ob2RlW10pIHtcbiAgICAgICAgY29uc3QgZ3JhcGggPSBuZXcgR3JhcGgobm9kZXMpO1xuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgZ3JhcGgubm9kZXMubWFwKGFzeW5jIG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLnBrZy5oYXNGaWxlKEJVSUxEX0lORk9fTE9DQVRJT04pKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuaW5mbyA9IGF3YWl0IG5vZGUucGtnLnJlYWRKc29uKEJVSUxEX0lORk9fTE9DQVRJT04pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG5vZGUubW9kaWZ5VGltZSA9IGF3YWl0IG5vZGUucGtnLmxhc3RNb2RpZmllZChcInBhY2thZ2UuanNvblwiLCBcInNyY1wiLCBcInRlc3RcIik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHN0YWNrID0gQXJyYXk8R3JhcGguTm9kZT4oKTtcbiAgICAgICAgZnVuY3Rpb24gZmluZENpcmN1bGFyKG5vZGU6IEdyYXBoLk5vZGUpIHtcbiAgICAgICAgICAgIGlmIChzdGFjay5pbmRleE9mKG5vZGUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsQnVpbGRFcnJvcihgQ2lyY3VsYXIgZGVwZW5kZW5jeTogJHtzdGFjay5tYXAoZm9ybWF0RGVwKS5qb2luKFwiIFx1MjVCOCBcIil9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBkZXAgb2Ygbm9kZS5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICAgICAgICBmaW5kQ2lyY3VsYXIoZGVwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBncmFwaC5ub2Rlcykge1xuICAgICAgICAgICAgZmluZENpcmN1bGFyKG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdyYXBoO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyAjbG9hZE5vZGVzKHdvcmtzcGFjZTogUGFja2FnZSkge1xuICAgICAgICBjb25zdCB3b3Jrc3BhY2VzID0gd29ya3NwYWNlLmpzb24ud29ya3NwYWNlcztcblxuICAgICAgICBjb25zdCBub2RlTWFwID0ge30gYXMgUmVjb3JkPHN0cmluZywgR3JhcGguTm9kZT47XG4gICAgICAgIGNvbnN0IGFsbERlcHMgPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT47XG4gICAgICAgIGZvciAoY29uc3QgcGF0aCBvZiB3b3Jrc3BhY2VzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBjb25zdCBwa2cgPSBuZXcgUGFja2FnZSh7IHBhdGg6IHdvcmtzcGFjZS5yZXNvbHZlKHBhdGgpIH0pO1xuICAgICAgICAgICAgYWxsRGVwc1twa2cuanNvbi5uYW1lXSA9IHBrZy5kZXBlbmRlbmNpZXM7XG4gICAgICAgICAgICBub2RlTWFwW3BrZy5qc29uLm5hbWVdID0ge1xuICAgICAgICAgICAgICAgIHBrZyxcbiAgICAgICAgICAgICAgICBwcm9qZWN0OiBuZXcgUHJvamVjdChwa2cpLFxuICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llczogW10sXG4gICAgICAgICAgICAgICAgaW5mbzoge30sXG4gICAgICAgICAgICAgICAgbW9kaWZ5VGltZTogMCxcblxuICAgICAgICAgICAgICAgIGdldCBidWlsZFRpbWUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluZm8udGltZXN0YW1wID8gbmV3IERhdGUodGhpcy5pbmZvLnRpbWVzdGFtcCkuZ2V0VGltZSgpIDogMDtcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgZ2V0IGlzRGlydHkoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGlmeVRpbWUgPiB0aGlzLmJ1aWxkVGltZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgISF0aGlzLmRlcGVuZGVuY2llcy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXAuaXNEaXJ0eSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVwLmJ1aWxkVGltZSA+IHRoaXMuYnVpbGRUaW1lICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVwLmluZm8uYXBpU2hhID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXAuaW5mby5hcGlTaGEgIT09IHRoaXMuaW5mby5kZXBlbmRlbmN5QXBpU2hhcz8uW2RlcC5wa2cubmFtZV0pKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBhbGxEZXBzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRlcCBvZiBhbGxEZXBzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwTm9kZSA9IG5vZGVNYXBbZGVwXTtcblxuICAgICAgICAgICAgICAgIC8vIE5vdGUgLS0gYWxsb3cgbm9kZXMgdG8gcmVmZXJlbmNlIHRoZW1zZWx2ZXMsIHNlZW1zIHRvIGJlIG5lY2Vzc2FyeSBvbiB0b29scyBmb3IgdXNlIG9mIHRzY1xuICAgICAgICAgICAgICAgIGlmIChkZXBOb2RlICYmIGRlcE5vZGUgIT09IG5vZGVNYXBbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZU1hcFtuYW1lXS5kZXBlbmRlbmNpZXMucHVzaChkZXBOb2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZU1hcDtcbiAgICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgR3JhcGgge1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgTm9kZSB7XG4gICAgICAgIHBrZzogUGFja2FnZTtcbiAgICAgICAgcHJvamVjdDogUHJvamVjdDtcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBOb2RlW107XG4gICAgICAgIGJ1aWxkVGltZTogbnVtYmVyO1xuICAgICAgICBpbmZvOiBCdWlsZEluZm9ybWF0aW9uO1xuICAgICAgICBtb2RpZnlUaW1lOiBudW1iZXI7XG4gICAgICAgIGlzRGlydHk6IGJvb2xlYW47XG4gICAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRUaW1lKHRpbWU6IG51bWJlciB8IHN0cmluZykge1xuICAgIGlmICghdGltZSkge1xuICAgICAgICByZXR1cm4gY29sb3JzLmRpbS5yZWQoXCJuZXZlclwiKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0aW1lID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRpbWUgPSBuZXcgRGF0ZSh0aW1lKS5nZXRUaW1lKCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZSh0aW1lIC0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKS50b0lTT1N0cmluZygpLnNwbGl0KFwiLlwiKVswXS5yZXBsYWNlKFwiVFwiLCBcIiBcIik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERlcChub2RlOiBHcmFwaC5Ob2RlKSB7XG4gICAgcmV0dXJuIG5vZGUucGtnLm5hbWUucmVwbGFjZSgvXkBtYXR0ZXJcXC8vLCBcIlwiKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxPQUFPLFlBQVk7QUFDbkIsU0FBUyxtQkFBbUIsZUFBZTtBQUMzQyxTQUFTLGdCQUFnQjtBQUV6QixTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLHFCQUF1QyxlQUFlO0FBUXhELE1BQU0sTUFBTTtBQUFBLEVBQ0wsWUFBcUIsT0FBcUI7QUFBckI7QUFBQSxFQUFzQjtBQUFBLEVBRXJELElBQUksTUFBYztBQUNkLFVBQU0sT0FBTyxLQUFLLE1BQU0sS0FBSyxDQUFBQSxVQUFRQSxNQUFLLElBQUksU0FBUyxJQUFJO0FBQzNELFFBQUksU0FBUyxRQUFXO0FBQ3BCLFlBQU0sSUFBSSxNQUFNLDBCQUEwQixJQUFJ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 |
@@ -8,3 +8,2 @@ /** | ||
import { cp, mkdir, readFile, rm, symlink, writeFile } from "fs/promises"; | ||
import { glob } from "glob"; | ||
import { platform } from "os"; | ||
@@ -26,3 +25,5 @@ import { dirname, join } from "path"; | ||
if (!this.pkg.hasSrc) { | ||
throw new Error(`Found package ${this.pkg.json.name} but no src directory is present`); | ||
throw new Error( | ||
`Found package ${this.pkg.json.name} but src directory is not present or not referenced in tsconfig.json` | ||
); | ||
} | ||
@@ -122,3 +123,6 @@ } | ||
for (const format of formats) { | ||
await cp(this.pkg.resolve(source), this.pkg.resolve(join("dist", format, dest))); | ||
await cp(this.pkg.resolve(source), this.pkg.resolve(join("dist", format, dest)), { | ||
recursive: true, | ||
force: true | ||
}); | ||
} | ||
@@ -171,7 +175,7 @@ } | ||
async #targetsOf(indir, outdir, ...extensions) { | ||
indir = this.pkg.resolve(indir).replace(/\\/g, "/"); | ||
const inputPrefixLength = this.pkg.resolve(indir).length + 1; | ||
outdir = this.pkg.resolve(outdir).replace(/\\/g, "/"); | ||
return (await glob(extensions.map((ext) => `${indir}/**/*.${ext}`))).map((file) => ({ | ||
return (await this.pkg.glob(extensions.map((ext) => `${indir}/**/*.${ext}`))).map((file) => ({ | ||
in: file, | ||
out: `${outdir}/${file.slice(indir.length + 1)}` | ||
out: `${outdir}/${file.slice(inputPrefixLength)}` | ||
})); | ||
@@ -184,2 +188,2 @@ } | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1aWxkaW5nL3Byb2plY3QudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyLTIwMjQgTWF0dGVyLmpzIEF1dGhvcnNcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHsgSGFzaCB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IGJ1aWxkIGFzIGVzYnVpbGQsIEZvcm1hdCB9IGZyb20gXCJlc2J1aWxkXCI7XG5pbXBvcnQgeyBjcCwgbWtkaXIsIHJlYWRGaWxlLCBybSwgc3ltbGluaywgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBnbG9iIH0gZnJvbSBcImdsb2JcIjtcbmltcG9ydCB7IHBsYXRmb3JtIH0gZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGlnbm9yZUVycm9yIH0gZnJvbSBcIi4uL3V0aWwvZXJyb3JzLmpzXCI7XG5pbXBvcnQgeyBDT05GSUdfUEFUSCwgUGFja2FnZSB9IGZyb20gXCIuLi91dGlsL3BhY2thZ2UuanNcIjtcblxuZXhwb3J0IGNvbnN0IEJVSUxEX0lORk9fTE9DQVRJT04gPSBcImJ1aWxkL2luZm8uanNvblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkSW5mb3JtYXRpb24ge1xuICAgIC8qKlxuICAgICAqIFRpbWUgb2YgbGFzdCBidWlsZC4gIENvbXBhcmVkIHRvIHNvdXJjZSBmaWxlcyB0byBkZXRlcm1pbmUgd2hldGhlciBidWlsZCBpcyBkaXJ0eS5cbiAgICAgKi9cbiAgICB0aW1lc3RhbXA/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBUEkgc2lnbmF0dXJlLiAgVXNlZCBieSBkZXBlbmRlbnRzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZXkgbmVlZCB0byByZWJ1aWxkIGFmdGVyIHdlIGRvLlxuICAgICAqL1xuICAgIGFwaVNoYT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEFQSSBzaWduYXR1cmUgb2YgZWFjaCBkZXBlbmRlbmN5LiAgQ29tcGFyZWQgdG8gYXBpU2hhIG9mIGVhY2ggZGVwZW5kZW5jeSBkdXJpbmcgZGlydHkgZGV0ZWN0aW9uLlxuICAgICAqL1xuICAgIGRlcGVuZGVuY3lBcGlTaGFzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuZXhwb3J0IGNsYXNzIFByb2plY3Qge1xuICAgIHBrZzogUGFja2FnZTtcbiAgICAjY29uZmlnPzogUHJvamVjdC5Db25maWc7XG4gICAgI2NvbmZpZ3VyZWQ/OiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3Ioc291cmNlOiBQYWNrYWdlIHwgc3RyaW5nID0gXCIuXCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRoaXMucGtnID0gbmV3IFBhY2thZ2UoeyBwYXRoOiBzb3VyY2UgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBrZyA9IHNvdXJjZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5wa2cuaGFzU3JjKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZvdW5kIHBhY2thZ2UgJHt0aGlzLnBrZy5qc29uLm5hbWV9IGJ1dCBubyBzcmMgZGlyZWN0b3J5IGlzIHByZXNlbnRgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGJ1aWxkU291cmNlKGZvcm1hdDogRm9ybWF0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuI2J1aWxkKGZvcm1hdCwgXCJzcmNcIiwgYGRpc3QvJHtmb3JtYXR9YCk7XG4gICAgICAgIGF3YWl0IHRoaXMuI2NvbmZpZ3VyZUZvcm1hdChcImRpc3RcIiwgZm9ybWF0LCB0cnVlKTtcbiAgICB9XG5cbiAgICBhc3luYyBidWlsZFRlc3RzKGZvcm1hdDogRm9ybWF0KSB7XG4gICAgICAgIGlmICh0aGlzLnBrZy5oYXNEaXJlY3RvcnkoXCJ0ZXN0XCIpKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLiNidWlsZChmb3JtYXQsIFwidGVzdFwiLCBgYnVpbGQvJHtmb3JtYXR9L3Rlc3RgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNyYyA9IGBkaXN0LyR7Zm9ybWF0fWA7XG4gICAgICAgIGNvbnN0IGRlc3QgPSBgYnVpbGQvJHtmb3JtYXR9L3NyY2A7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRlc3RQYXRoID0gdGhpcy5wa2cucmVzb2x2ZShkZXN0KTtcbiAgICAgICAgICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUoZGVzdFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIGF3YWl0IGlnbm9yZUVycm9yKFwiRUVYSVNUXCIsIGFzeW5jICgpID0+IGF3YWl0IHN5bWxpbmsodGhpcy5wa2cucmVzb2x2ZShzcmMpLCBkZXN0UGF0aCkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoKGUgYXMgYW55KS5jb2RlID09PSBcIkVQRVJNXCIgJiYgcGxhdGZvcm0oKSA9PT0gXCJ3aW4zMlwiKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgZGV2ZWxvcGVyIG1vZGUgaXMgbm90IGVuYWJsZWQsIHdlIGNhbid0IGNyZWF0ZSBhIHN5bWxpbmtcbiAgICAgICAgICAgICAgICAvLyBvbiBXaW5kb3dzLiAgQ29weSBpbnN0ZWFkXG4gICAgICAgICAgICAgICAgYXdhaXQgY3AodGhpcy5wa2cucmVzb2x2ZShzcmMpLCB0aGlzLnBrZy5yZXNvbHZlKGRlc3QpLCB7XG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZm9yY2U6IHRydWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy4jY29uZmlndXJlRm9ybWF0KFwiYnVpbGRcIiwgZm9ybWF0LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgYXN5bmMgY2xlYW4oKSB7XG4gICAgICAgIGZvciAoY29uc3QgZGlyIG9mIFtcImJ1aWxkXCIsIFwiZGlzdFwiXSkge1xuICAgICAgICAgICAgYXdhaXQgcm0odGhpcy5wa2cucmVzb2x2ZShkaXIpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgaGFzRGVjbGFyYXRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wa2cuaGFzRGlyZWN0b3J5KFwiYnVpbGQvdHlwZXNcIik7XG4gICAgfVxuXG4gICAgYXN5bmMgaGFzaERlY2xhcmF0aW9ucyhhcGlTaGE6IEhhc2gpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBrZy5pc0xpYnJhcnkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwYXRoO1xuICAgICAgICBpZiAodGhpcy5wa2cuc3VwcG9ydHNFc20pIHtcbiAgICAgICAgICAgIHBhdGggPSBcImVzbVwiO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGtnLnN1cHBvcnRzQ2pzKSB7XG4gICAgICAgICAgICBwYXRoID0gXCJjanNcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IChhd2FpdCB0aGlzLnBrZy5nbG9iKGBkaXN0LyR7cGF0aH0vKiovKi5kLnRzKmApKS5zb3J0KCk7XG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBkZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgICAgIGFwaVNoYS51cGRhdGUoZmlsZSk7XG4gICAgICAgICAgICBhcGlTaGEudXBkYXRlKGF3YWl0IHJlYWRGaWxlKGZpbGUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHJlY29yZEJ1aWxkSW5mbyhpbmZvOiBCdWlsZEluZm9ybWF0aW9uKSB7XG4gICAgICAgIGF3YWl0IG1rZGlyKHRoaXMucGtnLnJlc29sdmUoXCJidWlsZFwiKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIGluZm8udGltZXN0YW1wID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgICBhd2FpdCB3cml0ZUZpbGUodGhpcy5wa2cucmVzb2x2ZShCVUlMRF9JTkZPX0xPQ0FUSU9OKSwgSlNPTi5zdHJpbmdpZnkoaW5mbywgdW5kZWZpbmVkLCA0KSk7XG4gICAgfVxuXG4gICAgYXN5bmMgY29uZmlndXJlKCkge1xuICAgICAgICBpZiAodGhpcy4jY29uZmlndXJlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2NvbmZpZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5wa2cuaGFzQ29uZmlnKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb25maWdQYXRoID0gdGhpcy5wa2cucmVzb2x2ZShDT05GSUdfUEFUSCk7XG5cbiAgICAgICAgY29uc3Qgb3V0ZmlsZSA9IGNvbmZpZ1BhdGgucmVwbGFjZSgvXFxcXC9nLCBcIi9cIikucmVwbGFjZShcIi9zcmMvXCIsIFwiL2J1aWxkL1wiKS5yZXBsYWNlKC9cXC50cyQvLCBcIi5qc1wiKTtcbiAgICAgICAgYXdhaXQgZXNidWlsZCh7XG4gICAgICAgICAgICBlbnRyeVBvaW50czogW2NvbmZpZ1BhdGhdLFxuICAgICAgICAgICAgb3V0ZmlsZSxcbiAgICAgICAgICAgIHNvdXJjZW1hcDogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy4jY29uZmlnID0gKGF3YWl0IGltcG9ydChgZmlsZTovLyR7b3V0ZmlsZX1gKSkgYXMgUHJvamVjdC5Db25maWcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuI2NvbmZpZ3VyZWQgPSB0cnVlO1xuXG4gICAgICAgIGlmICh0aGlzLiNjb25maWc/LnN0YXJ0dXApIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuI2NvbmZpZz8uc3RhcnR1cCh7XG4gICAgICAgICAgICAgICAgcHJvamVjdDogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuI2NvbmZpZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb3B5IGZpbGVzIGludG8gZGlzdCBmb3Igc3VwcG9ydGVkIGZvcm1hdHMuXG4gICAgICovXG4gICAgYXN5bmMgY29weVRvRGlzdChzb3VyY2U6IHN0cmluZywgZGVzdDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHMgPSBBcnJheTxzdHJpbmc+KCk7XG4gICAgICAgIGlmICh0aGlzLnBrZy5zdXBwb3J0c0VzbSkge1xuICAgICAgICAgICAgZm9ybWF0cy5wdXNoKFwiZXNtXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBrZy5zdXBwb3J0c0Nqcykge1xuICAgICAgICAgICAgZm9ybWF0cy5wdXNoKFwiY2pzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgZm9ybWF0IG9mIGZvcm1hdHMpIHtcbiAgICAgICAgICAgIGF3YWl0IGNwKHRoaXMucGtnLnJlc29sdmUoc291cmNlKSwgdGhpcy5wa2cucmVzb2x2ZShqb2luKFwiZGlzdFwiLCBmb3JtYXQsIGRlc3QpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyAjYnVpbGQoZm9ybWF0OiBGb3JtYXQsIGluZGlyOiBzdHJpbmcsIG91dGRpcjogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5UG9pbnRzID0gYXdhaXQgdGhpcy4jdGFyZ2V0c09mKGluZGlyLCBvdXRkaXIsIFwidHNcIiwgXCJqc1wiKTtcblxuICAgICAgICBjb25zdCBjb25maWdQYXRoID0gdGhpcy5wa2cucmVzb2x2ZShDT05GSUdfUEFUSCk7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cnlQb2ludHMpIHtcbiAgICAgICAgICAgIGlmIChlbnRyeS5pbiA9PT0gY29uZmlnUGF0aCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW50cnkub3V0ID0gZW50cnkub3V0LnJlcGxhY2UoL1xcLltqdF1zJC8sIFwiXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgZXNidWlsZCh7XG4gICAgICAgICAgICBlbnRyeVBvaW50cyxcbiAgICAgICAgICAgIG91dGRpcjogdGhpcy5wa2cucGF0aCxcbiAgICAgICAgICAgIGZvcm1hdCxcbiAgICAgICAgICAgIHNvdXJjZW1hcDogdHJ1ZSxcbiAgICAgICAgICAgIHNvdXJjZXNDb250ZW50OiBmYWxzZSxcbiAgICAgICAgICAgIGFic1dvcmtpbmdEaXI6IGRpcm5hbWUodGhpcy5wa2cucmVzb2x2ZShpbmRpcikpLFxuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSB0byBkb3dubGV2ZWwgXCJ1c2luZ1wiXG4gICAgICAgICAgICB0YXJnZXQ6IFwiZXMyMDIyXCIsXG5cbiAgICAgICAgICAgIGxvZ092ZXJyaWRlOiB7XG4gICAgICAgICAgICAgICAgXCJkaXJlY3QtZXZhbFwiOiBcInNpbGVudFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBhd2FpdCB0aGlzLiN0YXJnZXRzT2YoaW5kaXIsIG91dGRpciwgXCJjanNcIiwgXCJtanNcIiwgXCJkLmN0c1wiLCBcImQubXRzXCIpKSB7XG4gICAgICAgICAgICBhd2FpdCBjcChlbnRyeS5pbiwgZW50cnkub3V0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jICNjb25maWd1cmVGb3JtYXQoZGlyOiBzdHJpbmcsIGZvcm1hdDogRm9ybWF0LCBpc0Rpc3Q6IGJvb2xlYW4pIHtcbiAgICAgICAgLy8gQnVpbGQgaW1wb3J0IG1hcFxuICAgICAgICBsZXQgeyBpbXBvcnRzIH0gPSB0aGlzLnBrZy5qc29uO1xuICAgICAgICBpZiAoaXNEaXN0ICYmIHR5cGVvZiBpbXBvcnRzID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBpbXBvcnRzID0geyAuLi5pbXBvcnRzIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBpbXBvcnRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpbXBvcnRzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBpbXBvcnRzW2tleV0gPSB2YWx1ZS5yZXBsYWNlKC9eXFwuXFwvc3JjXFwvLywgXCIuL1wiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXcml0ZSBwYWNrYWdlLmpzb25cbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMucGtnLnJlc29sdmUoYCR7ZGlyfS8ke2Zvcm1hdH0vcGFja2FnZS5qc29uYCk7XG4gICAgICAgIGNvbnN0IGpzb246IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICAgICAgdHlwZTogZm9ybWF0ID09PSBcImNqc1wiID8gXCJjb21tb25qc1wiIDogXCJtb2R1bGVcIixcbiAgICAgICAgICAgIGltcG9ydHMsXG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IHdyaXRlRmlsZShwYXRoLCBKU09OLnN0cmluZ2lmeShqc29uLCB1bmRlZmluZWQsIDQpKTtcbiAgICB9XG5cbiAgICBhc3luYyAjdGFyZ2V0c09mKGluZGlyOiBzdHJpbmcsIG91dGRpcjogc3RyaW5nLCAuLi5leHRlbnNpb25zOiBzdHJpbmdbXSkge1xuICAgICAgICBpbmRpciA9IHRoaXMucGtnLnJlc29sdmUoaW5kaXIpLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpO1xuICAgICAgICBvdXRkaXIgPSB0aGlzLnBrZy5yZXNvbHZlKG91dGRpcikucmVwbGFjZSgvXFxcXC9nLCBcIi9cIik7XG5cbiAgICAgICAgcmV0dXJuIChhd2FpdCBnbG9iKGV4dGVuc2lvbnMubWFwKGV4dCA9PiBgJHtpbmRpcn0vKiovKi4ke2V4dH1gKSkpLm1hcChmaWxlID0+ICh7XG4gICAgICAgICAgICBpbjogZmlsZSxcbiAgICAgICAgICAgIG91dDogYCR7b3V0ZGlyfS8ke2ZpbGUuc2xpY2UoaW5kaXIubGVuZ3RoICsgMSl9YCxcbiAgICAgICAgfSkpO1xuICAgIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBQcm9qZWN0IHtcbiAgICBleHBvcnQgaW50ZXJmYWNlIENvbnRleHQge1xuICAgICAgICBwcm9qZWN0OiBQcm9qZWN0O1xuICAgIH1cblxuICAgIGV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnIHtcbiAgICAgICAgc3RhcnR1cD86IChjb250ZXh0OiBDb250ZXh0KSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgICAgICBiZWZvcmU/OiAoY29udGV4dDogQ29udGV4dCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICAgICAgYWZ0ZXI/OiAoY29udGV4dDogQ29udGV4dCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBT0EsU0FBUyxTQUFTLGVBQXVCO0FBQ3pDLFNBQVMsSUFBSSxPQUFPLFVBQVUsSUFBSSxTQUFTLGlCQUFpQjtBQUM1RCxTQUFTLFlBQVk7QUFDckIsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyxTQUFTLFlBQVk7QUFDOUIsU0FBUyxtQkFBbUI7QUFDNUIsU0FBUyxhQUFhLGVBQWU7QUFFOUIsTUFBTSxzQkFBc0I7QUFtQjVCLE1BQU0sUUFBUTtBQUFBLEVBQ2pCO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFlBQVksU0FB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 | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1aWxkaW5nL3Byb2plY3QudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyLTIwMjQgTWF0dGVyLmpzIEF1dGhvcnNcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHsgSGFzaCB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IGJ1aWxkIGFzIGVzYnVpbGQsIEZvcm1hdCB9IGZyb20gXCJlc2J1aWxkXCI7XG5pbXBvcnQgeyBjcCwgbWtkaXIsIHJlYWRGaWxlLCBybSwgc3ltbGluaywgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBwbGF0Zm9ybSB9IGZyb20gXCJvc1wiO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBpZ25vcmVFcnJvciB9IGZyb20gXCIuLi91dGlsL2Vycm9ycy5qc1wiO1xuaW1wb3J0IHsgQ09ORklHX1BBVEgsIFBhY2thZ2UgfSBmcm9tIFwiLi4vdXRpbC9wYWNrYWdlLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBCVUlMRF9JTkZPX0xPQ0FUSU9OID0gXCJidWlsZC9pbmZvLmpzb25cIjtcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZEluZm9ybWF0aW9uIHtcbiAgICAvKipcbiAgICAgKiBUaW1lIG9mIGxhc3QgYnVpbGQuICBDb21wYXJlZCB0byBzb3VyY2UgZmlsZXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYnVpbGQgaXMgZGlydHkuXG4gICAgICovXG4gICAgdGltZXN0YW1wPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQVBJIHNpZ25hdHVyZS4gIFVzZWQgYnkgZGVwZW5kZW50cyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGV5IG5lZWQgdG8gcmVidWlsZCBhZnRlciB3ZSBkby5cbiAgICAgKi9cbiAgICBhcGlTaGE/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBUEkgc2lnbmF0dXJlIG9mIGVhY2ggZGVwZW5kZW5jeS4gIENvbXBhcmVkIHRvIGFwaVNoYSBvZiBlYWNoIGRlcGVuZGVuY3kgZHVyaW5nIGRpcnR5IGRldGVjdGlvbi5cbiAgICAgKi9cbiAgICBkZXBlbmRlbmN5QXBpU2hhcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9qZWN0IHtcbiAgICBwa2c6IFBhY2thZ2U7XG4gICAgI2NvbmZpZz86IFByb2plY3QuQ29uZmlnO1xuICAgICNjb25maWd1cmVkPzogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKHNvdXJjZTogUGFja2FnZSB8IHN0cmluZyA9IFwiLlwiKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLnBrZyA9IG5ldyBQYWNrYWdlKHsgcGF0aDogc291cmNlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wa2cgPSBzb3VyY2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMucGtnLmhhc1NyYykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBGb3VuZCBwYWNrYWdlICR7dGhpcy5wa2cuanNvbi5uYW1lfSBidXQgc3JjIGRpcmVjdG9yeSBpcyBub3QgcHJlc2VudCBvciBub3QgcmVmZXJlbmNlZCBpbiB0c2NvbmZpZy5qc29uYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBidWlsZFNvdXJjZShmb3JtYXQ6IEZvcm1hdCkge1xuICAgICAgICBhd2FpdCB0aGlzLiNidWlsZChmb3JtYXQsIFwic3JjXCIsIGBkaXN0LyR7Zm9ybWF0fWApO1xuICAgICAgICBhd2FpdCB0aGlzLiNjb25maWd1cmVGb3JtYXQoXCJkaXN0XCIsIGZvcm1hdCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgYXN5bmMgYnVpbGRUZXN0cyhmb3JtYXQ6IEZvcm1hdCkge1xuICAgICAgICBpZiAodGhpcy5wa2cuaGFzRGlyZWN0b3J5KFwidGVzdFwiKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy4jYnVpbGQoZm9ybWF0LCBcInRlc3RcIiwgYGJ1aWxkLyR7Zm9ybWF0fS90ZXN0YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzcmMgPSBgZGlzdC8ke2Zvcm1hdH1gO1xuICAgICAgICBjb25zdCBkZXN0ID0gYGJ1aWxkLyR7Zm9ybWF0fS9zcmNgO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkZXN0UGF0aCA9IHRoaXMucGtnLnJlc29sdmUoZGVzdCk7XG4gICAgICAgICAgICBhd2FpdCBta2RpcihkaXJuYW1lKGRlc3RQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICBhd2FpdCBpZ25vcmVFcnJvcihcIkVFWElTVFwiLCBhc3luYyAoKSA9PiBhd2FpdCBzeW1saW5rKHRoaXMucGtnLnJlc29sdmUoc3JjKSwgZGVzdFBhdGgpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKChlIGFzIGFueSkuY29kZSA9PT0gXCJFUEVSTVwiICYmIHBsYXRmb3JtKCkgPT09IFwid2luMzJcIikge1xuICAgICAgICAgICAgICAgIC8vIElmIGRldmVsb3BlciBtb2RlIGlzIG5vdCBlbmFibGVkLCB3ZSBjYW4ndCBjcmVhdGUgYSBzeW1saW5rXG4gICAgICAgICAgICAgICAgLy8gb24gV2luZG93cy4gIENvcHkgaW5zdGVhZFxuICAgICAgICAgICAgICAgIGF3YWl0IGNwKHRoaXMucGtnLnJlc29sdmUoc3JjKSwgdGhpcy5wa2cucmVzb2x2ZShkZXN0KSwge1xuICAgICAgICAgICAgICAgICAgICByZWN1cnNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGZvcmNlOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuI2NvbmZpZ3VyZUZvcm1hdChcImJ1aWxkXCIsIGZvcm1hdCwgZmFsc2UpO1xuICAgIH1cblxuICAgIGFzeW5jIGNsZWFuKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGRpciBvZiBbXCJidWlsZFwiLCBcImRpc3RcIl0pIHtcbiAgICAgICAgICAgIGF3YWl0IHJtKHRoaXMucGtnLnJlc29sdmUoZGlyKSwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGhhc0RlY2xhcmF0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGtnLmhhc0RpcmVjdG9yeShcImJ1aWxkL3R5cGVzXCIpO1xuICAgIH1cblxuICAgIGFzeW5jIGhhc2hEZWNsYXJhdGlvbnMoYXBpU2hhOiBIYXNoKSB7XG4gICAgICAgIGlmICghdGhpcy5wa2cuaXNMaWJyYXJ5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcGF0aDtcbiAgICAgICAgaWYgKHRoaXMucGtnLnN1cHBvcnRzRXNtKSB7XG4gICAgICAgICAgICBwYXRoID0gXCJlc21cIjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBrZy5zdXBwb3J0c0Nqcykge1xuICAgICAgICAgICAgcGF0aCA9IFwiY2pzXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSAoYXdhaXQgdGhpcy5wa2cuZ2xvYihgZGlzdC8ke3BhdGh9LyoqLyouZC50cypgKSkuc29ydCgpO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZGVjbGFyYXRpb25zKSB7XG4gICAgICAgICAgICBhcGlTaGEudXBkYXRlKGZpbGUpO1xuICAgICAgICAgICAgYXBpU2hhLnVwZGF0ZShhd2FpdCByZWFkRmlsZShmaWxlKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyByZWNvcmRCdWlsZEluZm8oaW5mbzogQnVpbGRJbmZvcm1hdGlvbikge1xuICAgICAgICBhd2FpdCBta2Rpcih0aGlzLnBrZy5yZXNvbHZlKFwiYnVpbGRcIiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBpbmZvLnRpbWVzdGFtcCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgYXdhaXQgd3JpdGVGaWxlKHRoaXMucGtnLnJlc29sdmUoQlVJTERfSU5GT19MT0NBVElPTiksIEpTT04uc3RyaW5naWZ5KGluZm8sIHVuZGVmaW5lZCwgNCkpO1xuICAgIH1cblxuICAgIGFzeW5jIGNvbmZpZ3VyZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuI2NvbmZpZ3VyZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNjb25maWc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMucGtnLmhhc0NvbmZpZykge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29uZmlnUGF0aCA9IHRoaXMucGtnLnJlc29sdmUoQ09ORklHX1BBVEgpO1xuXG4gICAgICAgIGNvbnN0IG91dGZpbGUgPSBjb25maWdQYXRoLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpLnJlcGxhY2UoXCIvc3JjL1wiLCBcIi9idWlsZC9cIikucmVwbGFjZSgvXFwudHMkLywgXCIuanNcIik7XG4gICAgICAgIGF3YWl0IGVzYnVpbGQoe1xuICAgICAgICAgICAgZW50cnlQb2ludHM6IFtjb25maWdQYXRoXSxcbiAgICAgICAgICAgIG91dGZpbGUsXG4gICAgICAgICAgICBzb3VyY2VtYXA6IHRydWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuI2NvbmZpZyA9IChhd2FpdCBpbXBvcnQoYGZpbGU6Ly8ke291dGZpbGV9YCkpIGFzIFByb2plY3QuQ29uZmlnIHwgdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLiNjb25maWd1cmVkID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy4jY29uZmlnPy5zdGFydHVwKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLiNjb25maWc/LnN0YXJ0dXAoe1xuICAgICAgICAgICAgICAgIHByb2plY3Q6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLiNjb25maWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29weSBmaWxlcyBpbnRvIGRpc3QgZm9yIHN1cHBvcnRlZCBmb3JtYXRzLlxuICAgICAqL1xuICAgIGFzeW5jIGNvcHlUb0Rpc3Qoc291cmNlOiBzdHJpbmcsIGRlc3Q6IHN0cmluZykge1xuICAgICAgICBjb25zdCBmb3JtYXRzID0gQXJyYXk8c3RyaW5nPigpO1xuICAgICAgICBpZiAodGhpcy5wa2cuc3VwcG9ydHNFc20pIHtcbiAgICAgICAgICAgIGZvcm1hdHMucHVzaChcImVzbVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wa2cuc3VwcG9ydHNDanMpIHtcbiAgICAgICAgICAgIGZvcm1hdHMucHVzaChcImNqc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGZvcm1hdCBvZiBmb3JtYXRzKSB7XG4gICAgICAgICAgICBhd2FpdCBjcCh0aGlzLnBrZy5yZXNvbHZlKHNvdXJjZSksIHRoaXMucGtnLnJlc29sdmUoam9pbihcImRpc3RcIiwgZm9ybWF0LCBkZXN0KSksIHtcbiAgICAgICAgICAgICAgICByZWN1cnNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgZm9yY2U6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jICNidWlsZChmb3JtYXQ6IEZvcm1hdCwgaW5kaXI6IHN0cmluZywgb3V0ZGlyOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZW50cnlQb2ludHMgPSBhd2FpdCB0aGlzLiN0YXJnZXRzT2YoaW5kaXIsIG91dGRpciwgXCJ0c1wiLCBcImpzXCIpO1xuXG4gICAgICAgIGNvbnN0IGNvbmZpZ1BhdGggPSB0aGlzLnBrZy5yZXNvbHZlKENPTkZJR19QQVRIKTtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyeVBvaW50cykge1xuICAgICAgICAgICAgaWYgKGVudHJ5LmluID09PSBjb25maWdQYXRoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbnRyeS5vdXQgPSBlbnRyeS5vdXQucmVwbGFjZSgvXFwuW2p0XXMkLywgXCJcIik7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBlc2J1aWxkKHtcbiAgICAgICAgICAgIGVudHJ5UG9pbnRzLFxuICAgICAgICAgICAgb3V0ZGlyOiB0aGlzLnBrZy5wYXRoLFxuICAgICAgICAgICAgZm9ybWF0LFxuICAgICAgICAgICAgc291cmNlbWFwOiB0cnVlLFxuICAgICAgICAgICAgc291cmNlc0NvbnRlbnQ6IGZhbHNlLFxuICAgICAgICAgICAgYWJzV29ya2luZ0RpcjogZGlybmFtZSh0aGlzLnBrZy5yZXNvbHZlKGluZGlyKSksXG5cbiAgICAgICAgICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGRvd25sZXZlbCBcInVzaW5nXCJcbiAgICAgICAgICAgIHRhcmdldDogXCJlczIwMjJcIixcblxuICAgICAgICAgICAgbG9nT3ZlcnJpZGU6IHtcbiAgICAgICAgICAgICAgICBcImRpcmVjdC1ldmFsXCI6IFwic2lsZW50XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGF3YWl0IHRoaXMuI3RhcmdldHNPZihpbmRpciwgb3V0ZGlyLCBcImNqc1wiLCBcIm1qc1wiLCBcImQuY3RzXCIsIFwiZC5tdHNcIikpIHtcbiAgICAgICAgICAgIGF3YWl0IGNwKGVudHJ5LmluLCBlbnRyeS5vdXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgI2NvbmZpZ3VyZUZvcm1hdChkaXI6IHN0cmluZywgZm9ybWF0OiBGb3JtYXQsIGlzRGlzdDogYm9vbGVhbikge1xuICAgICAgICAvLyBCdWlsZCBpbXBvcnQgbWFwXG4gICAgICAgIGxldCB7IGltcG9ydHMgfSA9IHRoaXMucGtnLmpzb247XG4gICAgICAgIGlmIChpc0Rpc3QgJiYgdHlwZW9mIGltcG9ydHMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGltcG9ydHMgPSB7IC4uLmltcG9ydHMgfTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGltcG9ydHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGltcG9ydHNba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGltcG9ydHNba2V5XSA9IHZhbHVlLnJlcGxhY2UoL15cXC5cXC9zcmNcXC8vLCBcIi4vXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdyaXRlIHBhY2thZ2UuanNvblxuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5wa2cucmVzb2x2ZShgJHtkaXJ9LyR7Zm9ybWF0fS9wYWNrYWdlLmpzb25gKTtcbiAgICAgICAgY29uc3QganNvbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAgICAgICB0eXBlOiBmb3JtYXQgPT09IFwiY2pzXCIgPyBcImNvbW1vbmpzXCIgOiBcIm1vZHVsZVwiLFxuICAgICAgICAgICAgaW1wb3J0cyxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgd3JpdGVGaWxlKHBhdGgsIEpTT04uc3RyaW5naWZ5KGpzb24sIHVuZGVmaW5lZCwgNCkpO1xuICAgIH1cblxuICAgIGFzeW5jICN0YXJnZXRzT2YoaW5kaXI6IHN0cmluZywgb3V0ZGlyOiBzdHJpbmcsIC4uLmV4dGVuc2lvbnM6IHN0cmluZ1tdKSB7XG4gICAgICAgIGNvbnN0IGlucHV0UHJlZml4TGVuZ3RoID0gdGhpcy5wa2cucmVzb2x2ZShpbmRpcikubGVuZ3RoICsgMTtcbiAgICAgICAgb3V0ZGlyID0gdGhpcy5wa2cucmVzb2x2ZShvdXRkaXIpLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpO1xuXG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5wa2cuZ2xvYihleHRlbnNpb25zLm1hcChleHQgPT4gYCR7aW5kaXJ9LyoqLyouJHtleHR9YCkpKS5tYXAoZmlsZSA9PiAoe1xuICAgICAgICAgICAgaW46IGZpbGUsXG4gICAgICAgICAgICBvdXQ6IGAke291dGRpcn0vJHtmaWxlLnNsaWNlKGlucHV0UHJlZml4TGVuZ3RoKX1gLFxuICAgICAgICB9KSk7XG4gICAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFByb2plY3Qge1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgQ29udGV4dCB7XG4gICAgICAgIHByb2plY3Q6IFByb2plY3Q7XG4gICAgfVxuXG4gICAgZXhwb3J0IGludGVyZmFjZSBDb25maWcge1xuICAgICAgICBzdGFydHVwPzogKGNvbnRleHQ6IENvbnRleHQpID0+IFByb21pc2U8dm9pZD47XG4gICAgICAgIGJlZm9yZT86IChjb250ZXh0OiBDb250ZXh0KSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgICAgICBhZnRlcj86IChjb250ZXh0OiBDb250ZXh0KSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFPQSxTQUFTLFNBQVMsZUFBdUI7QUFDekMsU0FBUyxJQUFJLE9BQU8sVUFBVSxJQUFJLFNBQVMsaUJBQWlCO0FBQzVELFNBQVMsZ0JBQWdCO0FBQ3pCLFNBQVMsU0FBUyxZQUFZO0FBQzlC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 |
@@ -38,3 +38,3 @@ /** | ||
} | ||
const deps = node.dependencies.map((dep) => dep.pkg.resolve("src")).filter((p) => !p.match(/packages[\\/]tools/)); | ||
const deps = node.dependencies.filter((dep) => dep.pkg.isLibrary).map((dep) => dep.pkg.resolve("src")).filter((p) => !p.match(/packages[\\/]tools/)); | ||
const desired = [.../* @__PURE__ */ new Set([...deps, ...extraRefs])]; | ||
@@ -51,2 +51,2 @@ const newReferences = desired.map((ref) => ({ path: relative(path, ref).replace(/\\/g, "/") })).sort((ref1, ref2) => ref1.path.localeCompare(ref2.path)); | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1aWxkaW5nL3RzY29uZmlnLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMi0yMDI0IE1hdHRlci5qcyBBdXRob3JzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCB7IHJlbGF0aXZlLCByZXNvbHZlIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSBcIi4vZ3JhcGguanNcIjtcblxuLyoqXG4gKiBVbmZvcnR1bmF0ZWx5IHR5cGVzY3JpcHQncyBcInByb2plY3QgcmVmZXJlbmNlc1wiIGFyZSByZWR1bmRhbnQgd2l0aCBwYWNrYWdlLmpzb24gZGVwZW5kZW5jaWVzLiAgV2UgZG9uJ3QgdXNlIHRoZW0gZm9yXG4gKiBidWlsZCBidXQgdGhlcmUgYXJlIHN0aWxsIHNvbWUgYWR2YW50YWdlcyB0byBtYWludGFpbmluZyB0aGVtIHNvIHdlIGp1c3QgZW5zdXJlIHRoZXkncmUgaW4gc3luYyBkdXJpbmcgd29ya3NwYWNlXG4gKiBidWlsZHMuXG4gKlxuICogT25lIGRpc2N1c3Npb24gb24gdGhlIHRvcGljOiBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzI1Mzc2XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzeW5jQWxsVHNjb25maWdzKGdyYXBoOiBHcmFwaCkge1xuICAgIGNvbnN0IHdvcmtzcGFjZSA9IGdyYXBoLm5vZGVzWzBdLnBrZy53b3Jrc3BhY2U7XG4gICAgY29uc3Qgcm9vdFRzY29uZmlnID0gYXdhaXQgd29ya3NwYWNlLnJlYWRKc29uKFwidHNjb25maWcuanNvblwiKTtcblxuICAgIGNvbnN0IG9yaWdpbmFsUmVmZXJlbmNlcyA9IHJvb3RUc2NvbmZpZy5yZWZlcmVuY2VzO1xuICAgIHJvb3RUc2NvbmZpZy5yZWZlcmVuY2VzID0gW107XG5cbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgZ3JhcGgubm9kZXMpIHtcbiAgICAgICAgYXdhaXQgc3luY1BhY2thZ2VUc2NvbmZpZ3MoZ3JhcGgsIG5vZGUpO1xuICAgICAgICByb290VHNjb25maWcucmVmZXJlbmNlcy5wdXNoKHsgcGF0aDogd29ya3NwYWNlLnJlbGF0aXZlKG5vZGUucGtnLnBhdGgpLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpIH0pO1xuICAgIH1cblxuICAgIGlmIChyZWZlcmVuY2VzQ2hhbmdlZChvcmlnaW5hbFJlZmVyZW5jZXMsIHJvb3RUc2NvbmZpZy5yZWZlcmVuY2VzKSkge1xuICAgICAgICBhd2FpdCB3b3Jrc3BhY2Uud3JpdGVKc29uKFwidHNjb25maWcuanNvblwiLCByb290VHNjb25maWcpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVmZXJlbmNlc0NoYW5nZWQob3JpZ2luYWxSZWZlcmVuY2VzOiB1bmtub3duLCBuZXdSZWZlcmVuY2VzOiB1bmtub3duKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9yaWdpbmFsUmVmZXJlbmNlcykgIT09IEpTT04uc3RyaW5naWZ5KG5ld1JlZmVyZW5jZXMpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3luY1BhY2thZ2VUc2NvbmZpZ3MoZ3JhcGg6IEdyYXBoLCBub2RlOiBHcmFwaC5Ob2RlKSB7XG4gICAgYXdhaXQgc3luY1N1YnByb2plY3Qobm9kZSwgXCJzcmNcIik7XG4gICAgYXdhaXQgc3luY1N1YnByb2plY3Qobm9kZSwgXCJ0ZXN0XCIsIG5vZGUucGtnLnJlc29sdmUoXCJzcmNcIiksIGdyYXBoLmdldChcIkBtYXR0ZXIvdG9vbHNcIikucGtnLnJlc29sdmUoXCJzcmNcIikpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzeW5jU3VicHJvamVjdChub2RlOiBHcmFwaC5Ob2RlLCBwYXRoOiBzdHJpbmcsIC4uLmV4dHJhUmVmczogc3RyaW5nW10pIHtcbiAgICBwYXRoID0gbm9kZS5wa2cucmVzb2x2ZShwYXRoKTtcblxuICAgIGNvbnN0IHRzY29uZmlnUGF0aCA9IHJlc29sdmUocGF0aCwgXCJ0c2NvbmZpZy5qc29uXCIpO1xuICAgIGlmICghbm9kZS5wa2cuaGFzRmlsZSh0c2NvbmZpZ1BhdGgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0c2NvbmZpZyA9IGF3YWl0IG5vZGUucGtnLnJlYWRKc29uKHRzY29uZmlnUGF0aCk7XG5cbiAgICBsZXQgcmVmcyA9IHRzY29uZmlnLnJlZnMgYXMgdW5kZWZpbmVkIHwgeyBwYXRoOiBzdHJpbmcgfVtdO1xuXG4gICAgaWYgKHJlZnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZWZzID0gW107XG4gICAgfVxuXG4gICAgY29uc3QgZGVwcyA9IG5vZGUuZGVwZW5kZW5jaWVzLm1hcChkZXAgPT4gZGVwLnBrZy5yZXNvbHZlKFwic3JjXCIpKS5maWx0ZXIocCA9PiAhcC5tYXRjaCgvcGFja2FnZXNbXFxcXC9ddG9vbHMvKSk7XG5cbiAgICBjb25zdCBkZXNpcmVkID0gWy4uLm5ldyBTZXQoWy4uLmRlcHMsIC4uLmV4dHJhUmVmc10pXTtcblxuICAgIGNvbnN0IG5ld1JlZmVyZW5jZXMgPSBkZXNpcmVkXG4gICAgICAgIC5tYXAocmVmID0+ICh7IHBhdGg6IHJlbGF0aXZlKHBhdGgsIHJlZikucmVwbGFjZSgvXFxcXC9nLCBcIi9cIikgfSkpXG4gICAgICAgIC5zb3J0KChyZWYxLCByZWYyKSA9PiByZWYxLnBhdGgubG9jYWxlQ29tcGFyZShyZWYyLnBhdGgpKTtcblxuICAgIGlmIChyZWZlcmVuY2VzQ2hhbmdlZCh0c2NvbmZpZy5yZWZlcmVuY2VzLCBuZXdSZWZlcmVuY2VzKSkge1xuICAgICAgICB0c2NvbmZpZy5yZWZlcmVuY2VzID0gbmV3UmVmZXJlbmNlcztcbiAgICAgICAgYXdhaXQgbm9kZS5wa2cud3JpdGVKc29uKHRzY29uZmlnUGF0aCwgdHNjb25maWcpO1xuICAgIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxTQUFTLFVBQVUsZUFBZTtBQVVsQyxlQUFzQixpQkFBaUIsT0FBYztBQUNqRCxRQUFNLFlBQVksTUFBTSxNQUFNLENBQUMsRUFBRSxJQUFJO0FBQ3JDLFFBQU0sZUFBZSxNQUFNLFVBQVUsU0FBUyxlQUFlO0FBRTdELFFBQU0scUJBQXFCLGFBQWE7QUFDeEMsZUFBYSxhQUFhLENBQUM7QUFFM0IsYUFBVyxRQUFRLE1BQU0sT0FBTztBQUM1QixVQUFNLHFCQUFxQixPQUFPLElBQUk7QUFDdEMsaUJBQWEsV0FBVyxLQUFLLEVBQUUsTUFBTSxVQUFVLFNBQVMsS0FBSyxJQUFJLElBQUksRUFBRSxRQUFRLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFBQSxFQUNoRztBQUVBLE1BQUksa0JBQWtCLG9CQUFvQixhQUFhLFVBQVUsR0FBRztBQUNoRSxVQUFNLFVBQVUsVUFBVSxpQkFBaUIsWUFBWTtBQUFBLEVBQzNEO0FBQ0o7QUFFQSxTQUFTLGtCQUFrQixvQkFBNkIsZUFBd0I7QUFDNUUsU0FBTyxLQUFLLFVBQVUsa0JBQWtCLE1BQU0sS0FBSyxVQUFVLGFBQWE7QUFDOUU7QUFFQSxlQUFzQixxQkFBcUIsT0FBYyxNQUFrQjtBQUN2RSxRQUFNLGVBQWUsTUFBTSxLQUFLO0FBQ2hDLFFBQU0sZUFBZSxNQUFNLFFBQVEsS0FBSyxJQUFJLFFBQVEsS0FBSyxHQUFHLE1BQU0sSUFBSSxlQUFlLEVBQUUsSUFBSSxRQUFRLEtBQUssQ0FBQztBQUM3RztBQUVBLGVBQWUsZUFBZSxNQUFrQixTQUFpQixXQUFxQjtBQUNsRixTQUFPLEtBQUssSUFBSSxRQUFRLElBQUk7QUFFNUIsUUFBTSxlQUFlLFFBQVEsTUFBTSxlQUFlO0FBQ2xELE1BQUksQ0FBQyxLQUFLLElBQUksUUFBUSxZQUFZLEdBQUc7QUFDakM7QUFBQSxFQUNKO0FBRUEsUUFBTSxXQUFXLE1BQU0sS0FBSyxJQUFJLFNBQVMsWUFBWTtBQUVyRCxNQUFJLE9BQU8sU0FBUztBQUVwQixNQUFJLFNBQVMsUUFBVztBQUNwQixXQUFPLENBQUM7QUFBQSxFQUNaO0FBRUEsUUFBTSxPQUFPLEtBQUssYUFBYSxJQUFJLFNBQU8sSUFBSSxJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUUsT0FBTyxPQUFLLENBQUMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVHLFFBQU0sVUFBVSxDQUFDLEdBQUcsb0JBQUksSUFBSSxDQUFDLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0FBRXBELFFBQU0sZ0JBQWdCLFFBQ2pCLElBQUksVUFBUSxFQUFFLE1BQU0sU0FBUyxNQUFNLEdBQUcsRUFBRSxRQUFRLE9BQU8sR0FBRyxFQUFFLEVBQUUsRUFDOUQsS0FBSyxDQUFDLE1BQU0sU0FBUyxLQUFLLEtBQUssY0FBYyxLQUFLLElBQUksQ0FBQztBQUU1RCxNQUFJLGtCQUFrQixTQUFTLFlBQVksYUFBYSxHQUFHO0FBQ3ZELGFBQVMsYUFBYTtBQUN0QixVQUFNLEtBQUssSUFBSSxVQUFVLGNBQWMsUUFBUTtBQUFBLEVBQ25EO0FBQ0o7IiwKICAibmFtZXMiOiBbXQp9Cg== | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2J1aWxkaW5nL3RzY29uZmlnLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMi0yMDI0IE1hdHRlci5qcyBBdXRob3JzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCB7IHJlbGF0aXZlLCByZXNvbHZlIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IEdyYXBoIH0gZnJvbSBcIi4vZ3JhcGguanNcIjtcblxuLyoqXG4gKiBVbmZvcnR1bmF0ZWx5IHR5cGVzY3JpcHQncyBcInByb2plY3QgcmVmZXJlbmNlc1wiIGFyZSByZWR1bmRhbnQgd2l0aCBwYWNrYWdlLmpzb24gZGVwZW5kZW5jaWVzLiAgV2UgZG9uJ3QgdXNlIHRoZW0gZm9yXG4gKiBidWlsZCBidXQgdGhlcmUgYXJlIHN0aWxsIHNvbWUgYWR2YW50YWdlcyB0byBtYWludGFpbmluZyB0aGVtIHNvIHdlIGp1c3QgZW5zdXJlIHRoZXkncmUgaW4gc3luYyBkdXJpbmcgd29ya3NwYWNlXG4gKiBidWlsZHMuXG4gKlxuICogT25lIGRpc2N1c3Npb24gb24gdGhlIHRvcGljOiBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzI1Mzc2XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzeW5jQWxsVHNjb25maWdzKGdyYXBoOiBHcmFwaCkge1xuICAgIGNvbnN0IHdvcmtzcGFjZSA9IGdyYXBoLm5vZGVzWzBdLnBrZy53b3Jrc3BhY2U7XG4gICAgY29uc3Qgcm9vdFRzY29uZmlnID0gYXdhaXQgd29ya3NwYWNlLnJlYWRKc29uKFwidHNjb25maWcuanNvblwiKTtcblxuICAgIGNvbnN0IG9yaWdpbmFsUmVmZXJlbmNlcyA9IHJvb3RUc2NvbmZpZy5yZWZlcmVuY2VzO1xuICAgIHJvb3RUc2NvbmZpZy5yZWZlcmVuY2VzID0gW107XG5cbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgZ3JhcGgubm9kZXMpIHtcbiAgICAgICAgYXdhaXQgc3luY1BhY2thZ2VUc2NvbmZpZ3MoZ3JhcGgsIG5vZGUpO1xuICAgICAgICByb290VHNjb25maWcucmVmZXJlbmNlcy5wdXNoKHsgcGF0aDogd29ya3NwYWNlLnJlbGF0aXZlKG5vZGUucGtnLnBhdGgpLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpIH0pO1xuICAgIH1cblxuICAgIGlmIChyZWZlcmVuY2VzQ2hhbmdlZChvcmlnaW5hbFJlZmVyZW5jZXMsIHJvb3RUc2NvbmZpZy5yZWZlcmVuY2VzKSkge1xuICAgICAgICBhd2FpdCB3b3Jrc3BhY2Uud3JpdGVKc29uKFwidHNjb25maWcuanNvblwiLCByb290VHNjb25maWcpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVmZXJlbmNlc0NoYW5nZWQob3JpZ2luYWxSZWZlcmVuY2VzOiB1bmtub3duLCBuZXdSZWZlcmVuY2VzOiB1bmtub3duKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9yaWdpbmFsUmVmZXJlbmNlcykgIT09IEpTT04uc3RyaW5naWZ5KG5ld1JlZmVyZW5jZXMpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3luY1BhY2thZ2VUc2NvbmZpZ3MoZ3JhcGg6IEdyYXBoLCBub2RlOiBHcmFwaC5Ob2RlKSB7XG4gICAgYXdhaXQgc3luY1N1YnByb2plY3Qobm9kZSwgXCJzcmNcIik7XG4gICAgYXdhaXQgc3luY1N1YnByb2plY3Qobm9kZSwgXCJ0ZXN0XCIsIG5vZGUucGtnLnJlc29sdmUoXCJzcmNcIiksIGdyYXBoLmdldChcIkBtYXR0ZXIvdG9vbHNcIikucGtnLnJlc29sdmUoXCJzcmNcIikpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzeW5jU3VicHJvamVjdChub2RlOiBHcmFwaC5Ob2RlLCBwYXRoOiBzdHJpbmcsIC4uLmV4dHJhUmVmczogc3RyaW5nW10pIHtcbiAgICBwYXRoID0gbm9kZS5wa2cucmVzb2x2ZShwYXRoKTtcblxuICAgIGNvbnN0IHRzY29uZmlnUGF0aCA9IHJlc29sdmUocGF0aCwgXCJ0c2NvbmZpZy5qc29uXCIpO1xuICAgIGlmICghbm9kZS5wa2cuaGFzRmlsZSh0c2NvbmZpZ1BhdGgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0c2NvbmZpZyA9IGF3YWl0IG5vZGUucGtnLnJlYWRKc29uKHRzY29uZmlnUGF0aCk7XG5cbiAgICBsZXQgcmVmcyA9IHRzY29uZmlnLnJlZnMgYXMgdW5kZWZpbmVkIHwgeyBwYXRoOiBzdHJpbmcgfVtdO1xuXG4gICAgaWYgKHJlZnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZWZzID0gW107XG4gICAgfVxuXG4gICAgY29uc3QgZGVwcyA9IG5vZGUuZGVwZW5kZW5jaWVzXG4gICAgICAgIC5maWx0ZXIoZGVwID0+IGRlcC5wa2cuaXNMaWJyYXJ5KVxuICAgICAgICAubWFwKGRlcCA9PiBkZXAucGtnLnJlc29sdmUoXCJzcmNcIikpXG4gICAgICAgIC5maWx0ZXIocCA9PiAhcC5tYXRjaCgvcGFja2FnZXNbXFxcXC9ddG9vbHMvKSk7XG5cbiAgICBjb25zdCBkZXNpcmVkID0gWy4uLm5ldyBTZXQoWy4uLmRlcHMsIC4uLmV4dHJhUmVmc10pXTtcblxuICAgIGNvbnN0IG5ld1JlZmVyZW5jZXMgPSBkZXNpcmVkXG4gICAgICAgIC5tYXAocmVmID0+ICh7IHBhdGg6IHJlbGF0aXZlKHBhdGgsIHJlZikucmVwbGFjZSgvXFxcXC9nLCBcIi9cIikgfSkpXG4gICAgICAgIC5zb3J0KChyZWYxLCByZWYyKSA9PiByZWYxLnBhdGgubG9jYWxlQ29tcGFyZShyZWYyLnBhdGgpKTtcblxuICAgIGlmIChyZWZlcmVuY2VzQ2hhbmdlZCh0c2NvbmZpZy5yZWZlcmVuY2VzLCBuZXdSZWZlcmVuY2VzKSkge1xuICAgICAgICB0c2NvbmZpZy5yZWZlcmVuY2VzID0gbmV3UmVmZXJlbmNlcztcbiAgICAgICAgYXdhaXQgbm9kZS5wa2cud3JpdGVKc29uKHRzY29uZmlnUGF0aCwgdHNjb25maWcpO1xuICAgIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxTQUFTLFVBQVUsZUFBZTtBQVVsQyxlQUFzQixpQkFBaUIsT0FBYztBQUNqRCxRQUFNLFlBQVksTUFBTSxNQUFNLENBQUMsRUFBRSxJQUFJO0FBQ3JDLFFBQU0sZUFBZSxNQUFNLFVBQVUsU0FBUyxlQUFlO0FBRTdELFFBQU0scUJBQXFCLGFBQWE7QUFDeEMsZUFBYSxhQUFhLENBQUM7QUFFM0IsYUFBVyxRQUFRLE1BQU0sT0FBTztBQUM1QixVQUFNLHFCQUFxQixPQUFPLElBQUk7QUFDdEMsaUJBQWEsV0FBVyxLQUFLLEVBQUUsTUFBTSxVQUFVLFNBQVMsS0FBSyxJQUFJLElBQUksRUFBRSxRQUFRLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFBQSxFQUNoRztBQUVBLE1BQUksa0JBQWtCLG9CQUFvQixhQUFhLFVBQVUsR0FBRztBQUNoRSxVQUFNLFVBQVUsVUFBVSxpQkFBaUIsWUFBWTtBQUFBLEVBQzNEO0FBQ0o7QUFFQSxTQUFTLGtCQUFrQixvQkFBNkIsZUFBd0I7QUFDNUUsU0FBTyxLQUFLLFVBQVUsa0JBQWtCLE1BQU0sS0FBSyxVQUFVLGFBQWE7QUFDOUU7QUFFQSxlQUFzQixxQkFBcUIsT0FBYyxNQUFrQjtBQUN2RSxRQUFNLGVBQWUsTUFBTSxLQUFLO0FBQ2hDLFFBQU0sZUFBZSxNQUFNLFFBQVEsS0FBSyxJQUFJLFFBQVEsS0FBSyxHQUFHLE1BQU0sSUFBSSxlQUFlLEVBQUUsSUFBSSxRQUFRLEtBQUssQ0FBQztBQUM3RztBQUVBLGVBQWUsZUFBZSxNQUFrQixTQUFpQixXQUFxQjtBQUNsRixTQUFPLEtBQUssSUFBSSxRQUFRLElBQUk7QUFFNUIsUUFBTSxlQUFlLFFBQVEsTUFBTSxlQUFlO0FBQ2xELE1BQUksQ0FBQyxLQUFLLElBQUksUUFBUSxZQUFZLEdBQUc7QUFDakM7QUFBQSxFQUNKO0FBRUEsUUFBTSxXQUFXLE1BQU0sS0FBSyxJQUFJLFNBQVMsWUFBWTtBQUVyRCxNQUFJLE9BQU8sU0FBUztBQUVwQixNQUFJLFNBQVMsUUFBVztBQUNwQixXQUFPLENBQUM7QUFBQSxFQUNaO0FBRUEsUUFBTSxPQUFPLEtBQUssYUFDYixPQUFPLFNBQU8sSUFBSSxJQUFJLFNBQVMsRUFDL0IsSUFBSSxTQUFPLElBQUksSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUNqQyxPQUFPLE9BQUssQ0FBQyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFL0MsUUFBTSxVQUFVLENBQUMsR0FBRyxvQkFBSSxJQUFJLENBQUMsR0FBRyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUM7QUFFcEQsUUFBTSxnQkFBZ0IsUUFDakIsSUFBSSxVQUFRLEVBQUUsTUFBTSxTQUFTLE1BQU0sR0FBRyxFQUFFLFFBQVEsT0FBTyxHQUFHLEVBQUUsRUFBRSxFQUM5RCxLQUFLLENBQUMsTUFBTSxTQUFTLEtBQUssS0FBSyxjQUFjLEtBQUssSUFBSSxDQUFDO0FBRTVELE1BQUksa0JBQWtCLFNBQVMsWUFBWSxhQUFhLEdBQUc7QUFDdkQsYUFBUyxhQUFhO0FBQ3RCLFVBQU0sS0FBSyxJQUFJLFVBQVUsY0FBYyxRQUFRO0FBQUEsRUFDbkQ7QUFDSjsiLAogICJuYW1lcyI6IFtdCn0K |
@@ -6,11 +6,9 @@ /** | ||
*/ | ||
import "./testing/global-declarations.js"; | ||
export * from "./building/builder.js"; | ||
export * from "./building/graph.js"; | ||
export * from "./building/project.js"; | ||
export * from "./testing/chip.js"; | ||
export * from "./testing/mocharc.cjs"; | ||
export * from "./util/docker.js"; | ||
export * from "./util/commander.js"; | ||
export * from "./util/files.js"; | ||
export * from "./util/package.js"; | ||
export * from "./util/progress.js"; | ||
export * from "./util/wtf.js"; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -6,11 +6,9 @@ /** | ||
*/ | ||
import "./testing/global-declarations.js"; | ||
export * from "./building/builder.js"; | ||
export * from "./building/graph.js"; | ||
export * from "./building/project.js"; | ||
export * from "./testing/chip.js"; | ||
export * from "./testing/mocharc.cjs"; | ||
export * from "./util/docker.js"; | ||
export * from "./util/commander.js"; | ||
export * from "./util/files.js"; | ||
export * from "./util/package.js"; | ||
export * from "./util/progress.js"; | ||
export * from "./util/wtf.js"; | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMi0yMDI0IE1hdHRlci5qcyBBdXRob3JzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCBcIi4vdGVzdGluZy9nbG9iYWwtZGVjbGFyYXRpb25zLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9idWlsZGluZy9ncmFwaC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vYnVpbGRpbmcvcHJvamVjdC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGVzdGluZy9jaGlwLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90ZXN0aW5nL21vY2hhcmMuY2pzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsL2RvY2tlci5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbC9wYWNrYWdlLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsL3Byb2dyZXNzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsL3d0Zi5qc1wiO1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BLE9BQU87QUFDUCxjQUFjO0FBQ2QsY0FBYztBQUNkLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYzsiLAogICJuYW1lcyI6IFtdCn0K | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMi0yMDI0IE1hdHRlci5qcyBBdXRob3JzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmV4cG9ydCAqIGZyb20gXCIuL2J1aWxkaW5nL2J1aWxkZXIuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2J1aWxkaW5nL2dyYXBoLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9idWlsZGluZy9wcm9qZWN0LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsL2NvbW1hbmRlci5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbC9maWxlcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbC9wYWNrYWdlLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsL3Byb2dyZXNzLmpzXCI7XG4iXSwKICAibWFwcGluZ3MiOiAiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEsY0FBYztBQUNkLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYzsiLAogICJuYW1lcyI6IFtdCn0K |
@@ -6,4 +6,6 @@ /** | ||
*/ | ||
export * from "./commander.js"; | ||
export * from "./errors.js"; | ||
export * from "./files.js"; | ||
export * from "./package.js"; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -6,4 +6,6 @@ /** | ||
*/ | ||
export * from "./commander.js"; | ||
export * from "./errors.js"; | ||
export * from "./files.js"; | ||
export * from "./package.js"; | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3V0aWwvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyLTIwMjQgTWF0dGVyLmpzIEF1dGhvcnNcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wYWNrYWdlLmpzXCI7XG4iXSwKICAibWFwcGluZ3MiOiAiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEsY0FBYztBQUNkLGNBQWM7IiwKICAibmFtZXMiOiBbXQp9Cg== | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3V0aWwvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyLTIwMjQgTWF0dGVyLmpzIEF1dGhvcnNcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuZXhwb3J0ICogZnJvbSBcIi4vY29tbWFuZGVyLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2ZpbGVzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wYWNrYWdlLmpzXCI7XG4iXSwKICAibWFwcGluZ3MiOiAiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEsY0FBYztBQUNkLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYzsiLAogICJuYW1lcyI6IFtdCn0K |
@@ -28,5 +28,5 @@ /** | ||
get hasCodegen(): boolean; | ||
resolve(path: string): string; | ||
resolve(...paths: string[]): string; | ||
relative(path: string): string; | ||
glob(pattern: string): Promise<string[]>; | ||
glob(pattern: string | string[]): Promise<string[]>; | ||
start(what: string): Progress; | ||
@@ -43,2 +43,3 @@ lastModified(...paths: string[]): Promise<number>; | ||
resolveExport(name: string, type?: "cjs" | "esm"): string; | ||
findPackage(name: string): Package; | ||
resolveImport(name: string, type?: "cjs" | "esm"): string; | ||
@@ -45,0 +46,0 @@ hasFile(path: string): boolean; |
@@ -8,6 +8,5 @@ /** | ||
import { readdir, readFile, stat, writeFile } from "fs/promises"; | ||
import { glob } from "glob"; | ||
import { dirname, join, relative, resolve } from "path"; | ||
import { maybeStatSync } from "../testing/files.js"; | ||
import { ignoreError, ignoreErrorSync } from "./errors.js"; | ||
import { globSync, maybeReadJsonSync, maybeStatSync } from "./files.js"; | ||
import { Progress } from "./progress.js"; | ||
@@ -64,2 +63,11 @@ import { toolsPath } from "./tools-path.cjs"; | ||
this.hasTests = isDirectory(this.resolve("test")); | ||
const refs = maybeReadJsonSync(this.resolve("tsconfig.json"))?.references; | ||
if (refs !== void 0) { | ||
if (!refs.find((ref) => this.resolve(ref.path) === this.resolve("src"))) { | ||
this.hasSrc = false; | ||
} | ||
if (!refs.find((ref) => this.resolve(ref.path) === this.resolve("test"))) { | ||
this.hasTests = false; | ||
} | ||
} | ||
this.isLibrary = !!(this.json.main || this.json.module || this.json.exports); | ||
@@ -77,4 +85,4 @@ this.hasConfig = this.hasFile(this.resolve(CONFIG_PATH)); | ||
} | ||
resolve(path) { | ||
return resolve(this.path, path); | ||
resolve(...paths) { | ||
return resolve(this.path, ...paths); | ||
} | ||
@@ -85,4 +93,8 @@ relative(path) { | ||
async glob(pattern) { | ||
pattern = this.resolve(pattern).replace(/\\/g, "/"); | ||
return await glob(pattern); | ||
if (typeof pattern === "string") { | ||
pattern = this.resolve(pattern).replace(/\\/g, "/"); | ||
} else { | ||
pattern = pattern.map((s) => this.resolve(s).replace(/\\/g, "/")); | ||
} | ||
return globSync(pattern); | ||
} | ||
@@ -173,11 +185,6 @@ start(what) { | ||
} | ||
resolveImport(name, type = "esm") { | ||
const segments = name.split("/"); | ||
let subdir = segments.shift(); | ||
if (subdir.startsWith("@") && segments.length) { | ||
subdir = `${subdir}/${segments.shift()}`; | ||
} | ||
findPackage(name) { | ||
let resolveIn = this.path; | ||
while (true) { | ||
if (isDirectory(resolve(resolveIn, "node_modules", subdir))) { | ||
if (isDirectory(resolve(resolveIn, "node_modules", name))) { | ||
break; | ||
@@ -187,7 +194,15 @@ } | ||
if (nextResolveIn === resolveIn) { | ||
throw new Error(`Cannot find module ${subdir} from ${this.path}`); | ||
throw new Error(`Cannot find module ${name} from ${this.path}`); | ||
} | ||
resolveIn = nextResolveIn; | ||
} | ||
const pkg = Package.forPath(resolve(resolveIn, "node_modules", subdir)); | ||
return Package.forPath(resolve(resolveIn, "node_modules", name)); | ||
} | ||
resolveImport(name, type = "esm") { | ||
const segments = name.split("/"); | ||
let packageName = segments.shift(); | ||
if (packageName.startsWith("@") && segments.length) { | ||
packageName = `${packageName}/${segments.shift()}`; | ||
} | ||
const pkg = this.findPackage(packageName); | ||
return pkg.resolveExport(segments.length ? segments.join("/") : ".", type); | ||
@@ -222,4 +237,4 @@ } | ||
e.message = `Error parsing "${this.resolve(path)}": ${e.message}`; | ||
throw e; | ||
} | ||
return JSON.parse(await this.readFile(path)); | ||
} | ||
@@ -311,2 +326,2 @@ async writeJson(path, value) { | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3V0aWwvcGFja2FnZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjItMjAyNCBNYXR0ZXIuanMgQXV0aG9yc1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMsIHN0YXRTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyByZWFkZGlyLCByZWFkRmlsZSwgc3RhdCwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBnbG9iIH0gZnJvbSBcImdsb2JcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4sIHJlbGF0aXZlLCByZXNvbHZlIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IG1heWJlU3RhdFN5bmMgfSBmcm9tIFwiLi4vdGVzdGluZy9maWxlcy5qc1wiO1xuaW1wb3J0IHsgaWdub3JlRXJyb3IsIGlnbm9yZUVycm9yU3luYyB9IGZyb20gXCIuL2Vycm9ycy5qc1wiO1xuaW1wb3J0IHsgUHJvZ3Jlc3MgfSBmcm9tIFwiLi9wcm9ncmVzcy5qc1wiO1xuaW1wb3J0IHsgdG9vbHNQYXRoIH0gZnJvbSBcIi4vdG9vbHMtcGF0aC5janNcIjtcblxuZXhwb3J0IGNsYXNzIEpzb25Ob3RGb3VuZEVycm9yIGV4dGVuZHMgRXJyb3Ige31cblxuZXhwb3J0IGNvbnN0IENPTkZJR19QQVRIID0gYHNyYy9idWlsZC5jb25maWcudHNgO1xuZXhwb3J0IGNvbnN0IENPREVHRU5fUEFUSCA9IGBjb2RlZ2VuYDtcblxuY29uc3QgcGFja2FnZUZvclBhdGggPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBQYWNrYWdlIHwgdW5kZWZpbmVkIHwgbnVsbD47XG5cbmZ1bmN0aW9uIGZpbmRKc29uKGZpbGVuYW1lOiBzdHJpbmcsIHBhdGg6IHN0cmluZyA9IFwiLlwiLCB0aXRsZT86IHN0cmluZykge1xuICAgIHBhdGggPSByZXNvbHZlKHBhdGgpO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBpZ25vcmVFcnJvclN5bmMoW1wiRU5PRU5UXCIsIFwiRU5PVERJUlwiXSwgKCkgPT5cbiAgICAgICAgICAgIEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHJlc29sdmUocGF0aCwgZmlsZW5hbWUpKS50b1N0cmluZygpKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGpzb24pIHtcbiAgICAgICAgICAgIGlmICh0aXRsZSA9PT0gdW5kZWZpbmVkIHx8IGpzb24ubmFtZSA9PT0gdGl0bGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyByb290OiBwYXRoLCBqc29uIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyZW50ID0gZGlybmFtZShwYXRoKTtcbiAgICAgICAgaWYgKHBhcmVudCA9PT0gcGF0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEpzb25Ob3RGb3VuZEVycm9yKGBDb3VsZCBub3QgbG9jYXRlICR7dGl0bGUgPz8gZmlsZW5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcGF0aCA9IHBhcmVudDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzRGlyZWN0b3J5KHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiAhIWlnbm9yZUVycm9yU3luYyhcIkVOT0VOVFwiLCAoKSA9PiBzdGF0U3luYyhwYXRoKS5pc0RpcmVjdG9yeSgpKTtcbn1cblxuZXhwb3J0IGNsYXNzIFBhY2thZ2Uge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBqc29uOiBQYWNrYWdlSnNvbjtcbiAgICBzdXBwb3J0c0VzbTogYm9vbGVhbjtcbiAgICBzdXBwb3J0c0NqczogYm9vbGVhbjtcbiAgICBoYXNTcmM6IGJvb2xlYW47XG4gICAgaGFzVGVzdHM6IGJvb2xlYW47XG4gICAgaGFzQ29uZmlnOiBib29sZWFuO1xuICAgIGlzTGlicmFyeTogYm9vbGVhbjtcbiAgICAjYWxpYXNlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgICBjb25zdHJ1Y3Rvcih7XG4gICAgICAgIHBhdGggPSBcIi5cIixcbiAgICAgICAgbmFtZSxcbiAgICB9OiB7XG4gICAgICAgIHBhdGg/OiBzdHJpbmc7XG4gICAgICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgfSA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgcm9vdCwganNvbiB9ID0gZmluZEpzb24oXCJwYWNrYWdlLmpzb25cIiwgcGF0aCwgbmFtZSk7XG4gICAgICAgIHRoaXMucGF0aCA9IHJvb3Q7XG4gICAgICAgIHRoaXMuanNvbiA9IGpzb247XG5cbiAgICAgICAgY29uc3QgeyBlc20sIGNqcyB9ID0gc2VsZWN0Rm9ybWF0cyh0aGlzLmpzb24pO1xuICAgICAgICB0aGlzLnN1cHBvcnRzRXNtID0gZXNtO1xuICAgICAgICB0aGlzLnN1cHBvcnRzQ2pzID0gY2pzO1xuXG4gICAgICAgIHRoaXMuaGFzU3JjID0gaXNEaXJlY3RvcnkodGhpcy5yZXNvbHZlKFwic3JjXCIpKTtcbiAgICAgICAgdGhpcy5oYXNUZXN0cyA9IGlzRGlyZWN0b3J5KHRoaXMucmVzb2x2ZShcInRlc3RcIikpO1xuXG4gICAgICAgIHRoaXMuaXNMaWJyYXJ5ID0gISEodGhpcy5qc29uLm1haW4gfHwgdGhpcy5qc29uLm1vZHVsZSB8fCB0aGlzLmpzb24uZXhwb3J0cyk7XG5cbiAgICAgICAgdGhpcy5oYXNDb25maWcgPSB0aGlzLmhhc0ZpbGUodGhpcy5yZXNvbHZlKENPTkZJR19QQVRIKSk7XG4gICAgfVxuXG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpzb24ubmFtZTtcbiAgICB9XG5cbiAgICBnZXQgZXhwb3J0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuanNvbi5leHBvcnRzO1xuICAgIH1cblxuICAgIGdldCBoYXNDb2RlZ2VuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNEaXJlY3RvcnkoQ09ERUdFTl9QQVRIKTtcbiAgICB9XG5cbiAgICByZXNvbHZlKHBhdGg6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLnBhdGgsIHBhdGgpO1xuICAgIH1cblxuICAgIHJlbGF0aXZlKHBhdGg6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gcmVsYXRpdmUodGhpcy5wYXRoLCBwYXRoKTtcbiAgICB9XG5cbiAgICBhc3luYyBnbG9iKHBhdHRlcm46IHN0cmluZykge1xuICAgICAgICAvLyBHbG9iIG9ubHkgdW5kZXJzdGFuZHMgZm9yd2FyZC1zbGFzaCBhcyBzZXBhcmF0b3IgYmVjYXVzZSByZWFzb25zXG4gICAgICAgIHBhdHRlcm4gPSB0aGlzLnJlc29sdmUocGF0dGVybikucmVwbGFjZSgvXFxcXC9nLCBcIi9cIik7XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IGdsb2IocGF0dGVybik7XG4gICAgfVxuXG4gICAgc3RhcnQod2hhdDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHByb2dyZXNzID0gbmV3IFByb2dyZXNzKCk7XG4gICAgICAgIHByb2dyZXNzLnN0YXJ0dXAod2hhdCwgdGhpcyk7XG4gICAgICAgIHJldHVybiBwcm9ncmVzcztcbiAgICB9XG5cbiAgICBhc3luYyBsYXN0TW9kaWZpZWQoLi4ucGF0aHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxhc3RNb2RpZmllZEFic29sdXRlKHBhdGhzLm1hcChwID0+IHRoaXMucmVzb2x2ZShwKSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbGFzdE1vZGlmaWVkQWJzb2x1dGUocGF0aHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIGxldCBtdGltZSA9IDA7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgcGF0aHMubWFwKGFzeW5jIHAgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgaWdub3JlRXJyb3IoXCJFTk9FTlRcIiwgYXN5bmMgKCkgPT4gYXdhaXQgc3RhdChwKSk7XG4gICAgICAgICAgICAgICAgaWYgKCFzdGF0cykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IHRoaXNNdGltZTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRocyA9IChhd2FpdCByZWFkZGlyKHApKS5tYXAocDIgPT4gcmVzb2x2ZShwLCBwMikpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzTXRpbWUgPSBhd2FpdCB0aGlzLmxhc3RNb2RpZmllZEFic29sdXRlKHBhdGhzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzTXRpbWUgPSBzdGF0cy5tdGltZU1zO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpc010aW1lID4gbXRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgbXRpbWUgPSB0aGlzTXRpbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBtdGltZTtcbiAgICB9XG5cbiAgICBnZXQgZGVwZW5kZW5jaWVzKCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gQXJyYXk8c3RyaW5nPigpO1xuICAgICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgW1wiZGVwZW5kZW5jaWVzXCIsIFwib3B0aW9uYWxEZXBlbmRlbmNpZXNcIiwgXCJkZXZEZXBlbmRlbmNpZXNcIiwgXCJwZWVyRGVwZW5kZW5jaWVzXCJdKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuanNvblt0eXBlXSA9PT0gXCJvYmplY3RcIiAmJiB0aGlzLmpzb25bdHlwZV0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBbLi4ucmVzdWx0LCAuLi5PYmplY3Qua2V5cyh0aGlzLmpzb25bdHlwZV0pXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWy4uLm5ldyBTZXQocmVzdWx0KV07XG4gICAgfVxuXG4gICAgZ2V0IHdvcmtzcGFjZSgpIHtcbiAgICAgICAgcmV0dXJuIFBhY2thZ2Uud29ya3NwYWNlRm9yKHRoaXMucGF0aCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHNldCB3b3JraW5nRGlyKHdkOiBzdHJpbmcpIHtcbiAgICAgICAgd29ya2luZ0RpciA9IHdkO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgd29ya3NwYWNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy53b3Jrc3BhY2VGb3Iod29ya2luZ0Rpcik7XG4gICAgfVxuXG4gICAgc3RhdGljIHdvcmtzcGFjZUZvcihjd2Q6IHN0cmluZykge1xuICAgICAgICBpZiAoIXdvcmtzcGFjZSkge1xuICAgICAgICAgICAgd29ya3NwYWNlID0gZmluZChjd2QsIHBrZyA9PiBBcnJheS5pc0FycmF5KHBrZy5qc29uLndvcmtzcGFjZXMpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd29ya3NwYWNlO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgdG9vbHMoKSB7XG4gICAgICAgIGlmICghdG9vbHMpIHtcbiAgICAgICAgICAgIHRvb2xzID0gbmV3IFBhY2thZ2UoeyBwYXRoOiB0b29sc1BhdGggfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvb2xzO1xuICAgIH1cblxuICAgIHN0YXRpYyBmaW5kRXhwb3J0KG5hbWU6IHN0cmluZywgdHlwZTogXCJjanNcIiB8IFwiZXNtXCIgPSBcImVzbVwiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndvcmtzcGFjZS5yZXNvbHZlSW1wb3J0KG5hbWUsIHR5cGUpO1xuICAgIH1cblxuICAgIHJlc29sdmVFeHBvcnQobmFtZTogc3RyaW5nLCB0eXBlOiBcImNqc1wiIHwgXCJlc21cIiA9IFwiZXNtXCIpIHtcbiAgICAgICAgaWYgKCFuYW1lLnN0YXJ0c1dpdGgoXCIuXCIpKSB7XG4gICAgICAgICAgICBuYW1lID0gYC4vJHtuYW1lfWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXhwb3J0RGV0YWlsID0gdGhpcy5leHBvcnRzPy5bbmFtZV07XG5cbiAgICAgICAgaWYgKGV4cG9ydERldGFpbCkge1xuICAgICAgICAgICAgY29uc3QgZXhwID0gZmluZEV4cG9ydENvbmRpdGlvbihleHBvcnREZXRhaWwsIHR5cGUpO1xuICAgICAgICAgICAgaWYgKGV4cCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc29sdmUoZXhwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuYW1lID09PSBcIi5cIikge1xuICAgICAgICAgICAgaWYgKHR5cGUgPT09IFwiZXNtXCIgJiYgdGhpcy5qc29uLm1vZHVsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc29sdmUodGhpcy5qc29uLm1vZHVsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5qc29uLm1haW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNvbHZlKHRoaXMuanNvbi5tYWluKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlc29sdmUgZXhwb3J0ICR7bmFtZX0gaW4gcGFja2FnZSAke3RoaXMubmFtZX1gKTtcbiAgICB9XG5cbiAgICByZXNvbHZlSW1wb3J0KG5hbWU6IHN0cmluZywgdHlwZTogXCJjanNcIiB8IFwiZXNtXCIgPSBcImVzbVwiKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRzID0gbmFtZS5zcGxpdChcIi9cIik7XG4gICAgICAgIGxldCBzdWJkaXIgPSBzZWdtZW50cy5zaGlmdCgpIGFzIHN0cmluZztcbiAgICAgICAgaWYgKHN1YmRpci5zdGFydHNXaXRoKFwiQFwiKSAmJiBzZWdtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHN1YmRpciA9IGAke3N1YmRpcn0vJHtzZWdtZW50cy5zaGlmdCgpfWA7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzb2x2ZUluID0gdGhpcy5wYXRoO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgaWYgKGlzRGlyZWN0b3J5KHJlc29sdmUocmVzb2x2ZUluLCBcIm5vZGVfbW9kdWxlc1wiLCBzdWJkaXIpKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmV4dFJlc29sdmVJbiA9IGRpcm5hbWUocmVzb2x2ZUluKTtcbiAgICAgICAgICAgIGlmIChuZXh0UmVzb2x2ZUluID09PSByZXNvbHZlSW4pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIG1vZHVsZSAke3N1YmRpcn0gZnJvbSAke3RoaXMucGF0aH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmVJbiA9IG5leHRSZXNvbHZlSW47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwa2cgPSBQYWNrYWdlLmZvclBhdGgocmVzb2x2ZShyZXNvbHZlSW4sIFwibm9kZV9tb2R1bGVzXCIsIHN1YmRpcikpO1xuICAgICAgICByZXR1cm4gcGtnLnJlc29sdmVFeHBvcnQoc2VnbWVudHMubGVuZ3RoID8gc2VnbWVudHMuam9pbihcIi9cIikgOiBcIi5cIiwgdHlwZSk7XG4gICAgfVxuXG4gICAgaGFzRmlsZShwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy4jbWF5YmVTdGF0KHBhdGgpPy5pc0ZpbGUoKTtcbiAgICB9XG5cbiAgICBoYXNEaXJlY3RvcnkocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuI21heWJlU3RhdChwYXRoKT8uaXNEaXJlY3RvcnkoKTtcbiAgICB9XG5cbiAgICBhc3luYyByZWFkRmlsZShwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRGaWxlKHRoaXMucmVzb2x2ZShwYXRoKSwgXCJ1dGYtOFwiKTtcbiAgICB9XG5cbiAgICByZWFkRmlsZVN5bmMocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiByZWFkRmlsZVN5bmModGhpcy5yZXNvbHZlKHBhdGgpLCBcInV0Zi04XCIpO1xuICAgIH1cblxuICAgIGFzeW5jIHdyaXRlRmlsZShwYXRoOiBzdHJpbmcsIGNvbnRlbnRzOiB1bmtub3duKSB7XG4gICAgICAgIGF3YWl0IHdyaXRlRmlsZSh0aGlzLnJlc29sdmUocGF0aCksIGAke2NvbnRlbnRzfWApO1xuICAgIH1cblxuICAgIGFzeW5jIHNhdmUoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMud3JpdGVGaWxlKGpvaW4odGhpcy5wYXRoLCBcInBhY2thZ2UuanNvblwiKSwgSlNPTi5zdHJpbmdpZnkodGhpcy5qc29uLCB1bmRlZmluZWQsIDQpKTtcbiAgICB9XG5cbiAgICBhc3luYyByZWFkSnNvbihwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHRoaXMucmVhZEZpbGUocGF0aCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgICAgICAgIGUgPSBuZXcgRXJyb3IoYCR7ZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIChlIGFzIEVycm9yKS5tZXNzYWdlID0gYEVycm9yIHBhcnNpbmcgXCIke3RoaXMucmVzb2x2ZShwYXRoKX1cIjogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGF3YWl0IHRoaXMucmVhZEZpbGUocGF0aCkpO1xuICAgIH1cblxuICAgIGFzeW5jIHdyaXRlSnNvbihwYXRoOiBzdHJpbmcsIHZhbHVlOiB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLndyaXRlRmlsZShwYXRoLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgdW5kZWZpbmVkLCA0KSk7XG4gICAgfVxuXG4gICAgc3RhdGljIG1heWJlRm9yUGF0aChwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgZnVuY3Rpb24gZmluZChwYXRoOiBzdHJpbmcpOiBQYWNrYWdlIHwgbnVsbCB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gcGFja2FnZUZvclBhdGhbcGF0aF07XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXhpc3RzU3luYyhqb2luKHBhdGgsIFwicGFja2FnZS5qc29uXCIpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBuZXcgUGFja2FnZSh7IHBhdGggfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmluZChkaXJuYW1lKHBhdGgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGFja2FnZUZvclBhdGhbcGF0aF0gPSByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZmluZChwYXRoKTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0ID8/IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZm9yUGF0aChwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5tYXliZUZvclBhdGgocGF0aCk7XG4gICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHBhY2thZ2UuanNvbiBmb3IgXCIke3BhdGh9XCJgKTtcbiAgICB9XG5cbiAgICBnZXQgYWxpYXNlcygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICAgICAgaWYgKHRoaXMuI2FsaWFzZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2FsaWFzZXM7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiNhbGlhc2VzID0ge1xuICAgICAgICAgICAgLi4uUGFja2FnZS5tYXliZUZvclBhdGgoZGlybmFtZSh0aGlzLnBhdGgpKT8uYWxpYXNlcyxcbiAgICAgICAgICAgIC4uLnRoaXMuanNvbi5pbXBvcnRzLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLiNhbGlhc2VzO1xuICAgIH1cblxuICAgICNtYXliZVN0YXQocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBtYXliZVN0YXRTeW5jKHRoaXMucmVzb2x2ZShwYXRoKSk7XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBQYWNrYWdlSnNvbiA9IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGltcG9ydHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufTtcblxubGV0IHdvcmtpbmdEaXIgPSBcIi5cIjtcbmxldCB3b3Jrc3BhY2U6IFBhY2thZ2UgfCB1bmRlZmluZWQ7XG5sZXQgdG9vbHM6IFBhY2thZ2UgfCB1bmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGZpbmQoc3RhcnREaXI6IHN0cmluZywgc2VsZWN0b3I6IChwa2c6IFBhY2thZ2UpID0+IGJvb2xlYW4pOiBQYWNrYWdlIHtcbiAgICBsZXQgcGtnID0gbmV3IFBhY2thZ2UoeyBwYXRoOiBzdGFydERpciB9KTtcbiAgICB3aGlsZSAoIXNlbGVjdG9yKHBrZykpIHtcbiAgICAgICAgcGtnID0gbmV3IFBhY2thZ2UoeyBwYXRoOiBkaXJuYW1lKHBrZy5wYXRoKSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHBrZztcbn1cblxuZnVuY3Rpb24gc2VsZWN0Rm9ybWF0cyhqc29uOiBhbnkpIHtcbiAgICBsZXQgZXNtOiBib29sZWFuLCBjanM6IGJvb2xlYW47XG5cbiAgICBpZiAoanNvbi50eXBlID09PSBcIm1vZHVsZVwiKSB7XG4gICAgICAgIGVzbSA9IHRydWU7XG4gICAgICAgIGNqcyA9XG4gICAgICAgICAgICAoanNvbi5tYWluICE9PSB1bmRlZmluZWQgJiYganNvbi5tb2R1bGUgIT09IHVuZGVmaW5lZCkgfHxcbiAgICAgICAgICAgICEhT2JqZWN0LnZhbHVlcyhqc29uLmV4cG9ydHMgPz8ge30pLmZpbmQoKGV4cDogYW55KSA9PiBleHAucmVxdWlyZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY2pzID0gdHJ1ZTtcbiAgICAgICAgZXNtID0gISFqc29uLm1vZHVsZSB8fCAhIU9iamVjdC52YWx1ZXMoanNvbi5leHBvcnRzID8/IHt9KS5maW5kKChleHA6IGFueSkgPT4gZXhwLmltcG9ydCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZXNtLCBjanMgfTtcbn1cblxuZnVuY3Rpb24gZmluZEV4cG9ydENvbmRpdGlvbihkZXRhaWw6IFJlY29yZDxzdHJpbmcsIGFueT4sIHR5cGU6IFwiZXNtXCIgfCBcImNqc1wiKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodHlwZSA9PT0gXCJlc21cIiAmJiBkZXRhaWwuaW1wb3J0KSB7XG4gICAgICAgIGxldCBleHAgPSBkZXRhaWwuaW1wb3J0O1xuICAgICAgICBpZiAoZXhwICYmIHR5cGVvZiBleHAgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGV4cCA9IGZpbmRFeHBvcnRDb25kaXRpb24oZXhwLCB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXhwKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGV4cCA9IGRldGFpbC5yZXF1aXJlID8/IGRldGFpbC5ub2RlID8/IGRldGFpbC5kZWZhdWx0O1xuICAgIGlmIChleHAgJiYgdHlwZW9mIGV4cCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBleHAgPSBmaW5kRXhwb3J0Q29uZGl0aW9uKGV4cCwgdHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBleHAgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIGV4cDtcbiAgICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEsU0FBUyxZQUFZLGNBQWMsZ0JBQWdCO0FBQ25ELFNBQVMsU0FBUyxVQUFVLE1BQU0saUJBQWlCO0FBQ25ELFNBQVMsWUFBWTtBQUNyQixTQUFTLFNBQVMsTUFBTSxVQUFVLGVBQWU7QUFDakQsU0FBUyxxQkFBcUI7QUFDOUIsU0FBUyxhQUFhLHVCQUF1QjtBQUM3QyxTQUFTLGdCQUFnQjtBQUN6QixTQUFTLGlCQUFpQjtBQUVuQixNQUFNLDBCQUEwQixNQUFNO0FBQUM7QUFFdkMsTUFBTSxjQUFjO0FBQ3BCLE1BQU0sZUFBZTtBQUU1QixNQUFNLGlCQUFpQixDQUFDO0FBRXhCLFNBQVMsU0FBUyxVQUFrQixPQUFlLEtBQUssT0FBZ0I7QUFDcEUsU0FBTyxRQUFRLElBQUk7QUFDbkIsU0FBTyxNQUFNO0FBQ1QsVUFBTSxPQUFPO0FBQUEsTUFBZ0IsQ0FBQyxVQUFVLFNBQVM7QUFBQSxNQUFHLE1BQ2hELEtBQUssTUFBTSxhQUFhLFFBQVEsTUFBTSxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUM7QUFBQSxJQUMvRDtBQUNBLFFBQUksTUFBTTtBQUNOLFVBQUksVUFBVSxVQUFhLEtBQUssU0FBUyxPQUFPO0FBQzVDLGVBQU8sRUFBRSxNQUFNLE1BQU0sS0FBSztBQUFBLE1BQzlCO0FBQUEsSUFDSjtBQUNBLFVBQU0sU0FBUyxRQUFRLElBQUk7QUFDM0IsUUFBSSxXQUFXLE1BQU07QUFDakIs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 | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3V0aWwvcGFja2FnZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjItMjAyNCBNYXR0ZXIuanMgQXV0aG9yc1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMsIHN0YXRTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyByZWFkZGlyLCByZWFkRmlsZSwgc3RhdCwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBpZ25vcmVFcnJvciwgaWdub3JlRXJyb3JTeW5jIH0gZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5pbXBvcnQgeyBnbG9iU3luYywgbWF5YmVSZWFkSnNvblN5bmMsIG1heWJlU3RhdFN5bmMgfSBmcm9tIFwiLi9maWxlcy5qc1wiO1xuaW1wb3J0IHsgUHJvZ3Jlc3MgfSBmcm9tIFwiLi9wcm9ncmVzcy5qc1wiO1xuaW1wb3J0IHsgdG9vbHNQYXRoIH0gZnJvbSBcIi4vdG9vbHMtcGF0aC5janNcIjtcblxuZXhwb3J0IGNsYXNzIEpzb25Ob3RGb3VuZEVycm9yIGV4dGVuZHMgRXJyb3Ige31cblxuZXhwb3J0IGNvbnN0IENPTkZJR19QQVRIID0gYHNyYy9idWlsZC5jb25maWcudHNgO1xuZXhwb3J0IGNvbnN0IENPREVHRU5fUEFUSCA9IGBjb2RlZ2VuYDtcblxuY29uc3QgcGFja2FnZUZvclBhdGggPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBQYWNrYWdlIHwgdW5kZWZpbmVkIHwgbnVsbD47XG5cbmZ1bmN0aW9uIGZpbmRKc29uKGZpbGVuYW1lOiBzdHJpbmcsIHBhdGg6IHN0cmluZyA9IFwiLlwiLCB0aXRsZT86IHN0cmluZykge1xuICAgIHBhdGggPSByZXNvbHZlKHBhdGgpO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBpZ25vcmVFcnJvclN5bmMoW1wiRU5PRU5UXCIsIFwiRU5PVERJUlwiXSwgKCkgPT5cbiAgICAgICAgICAgIEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHJlc29sdmUocGF0aCwgZmlsZW5hbWUpKS50b1N0cmluZygpKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGpzb24pIHtcbiAgICAgICAgICAgIGlmICh0aXRsZSA9PT0gdW5kZWZpbmVkIHx8IGpzb24ubmFtZSA9PT0gdGl0bGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyByb290OiBwYXRoLCBqc29uIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyZW50ID0gZGlybmFtZShwYXRoKTtcbiAgICAgICAgaWYgKHBhcmVudCA9PT0gcGF0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEpzb25Ob3RGb3VuZEVycm9yKGBDb3VsZCBub3QgbG9jYXRlICR7dGl0bGUgPz8gZmlsZW5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcGF0aCA9IHBhcmVudDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzRGlyZWN0b3J5KHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiAhIWlnbm9yZUVycm9yU3luYyhcIkVOT0VOVFwiLCAoKSA9PiBzdGF0U3luYyhwYXRoKS5pc0RpcmVjdG9yeSgpKTtcbn1cblxuZXhwb3J0IGNsYXNzIFBhY2thZ2Uge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBqc29uOiBQYWNrYWdlSnNvbjtcbiAgICBzdXBwb3J0c0VzbTogYm9vbGVhbjtcbiAgICBzdXBwb3J0c0NqczogYm9vbGVhbjtcbiAgICBoYXNTcmM6IGJvb2xlYW47XG4gICAgaGFzVGVzdHM6IGJvb2xlYW47XG4gICAgaGFzQ29uZmlnOiBib29sZWFuO1xuICAgIGlzTGlicmFyeTogYm9vbGVhbjtcbiAgICAjYWxpYXNlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgICBjb25zdHJ1Y3Rvcih7XG4gICAgICAgIHBhdGggPSBcIi5cIixcbiAgICAgICAgbmFtZSxcbiAgICB9OiB7XG4gICAgICAgIHBhdGg/OiBzdHJpbmc7XG4gICAgICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgfSA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgcm9vdCwganNvbiB9ID0gZmluZEpzb24oXCJwYWNrYWdlLmpzb25cIiwgcGF0aCwgbmFtZSk7XG4gICAgICAgIHRoaXMucGF0aCA9IHJvb3Q7XG4gICAgICAgIHRoaXMuanNvbiA9IGpzb247XG5cbiAgICAgICAgY29uc3QgeyBlc20sIGNqcyB9ID0gc2VsZWN0Rm9ybWF0cyh0aGlzLmpzb24pO1xuICAgICAgICB0aGlzLnN1cHBvcnRzRXNtID0gZXNtO1xuICAgICAgICB0aGlzLnN1cHBvcnRzQ2pzID0gY2pzO1xuXG4gICAgICAgIHRoaXMuaGFzU3JjID0gaXNEaXJlY3RvcnkodGhpcy5yZXNvbHZlKFwic3JjXCIpKTtcbiAgICAgICAgdGhpcy5oYXNUZXN0cyA9IGlzRGlyZWN0b3J5KHRoaXMucmVzb2x2ZShcInRlc3RcIikpO1xuXG4gICAgICAgIGNvbnN0IHJlZnMgPSBtYXliZVJlYWRKc29uU3luYyh0aGlzLnJlc29sdmUoXCJ0c2NvbmZpZy5qc29uXCIpKT8ucmVmZXJlbmNlcyBhcyB1bmRlZmluZWQgfCB7IHBhdGg6IHN0cmluZyB9W107XG4gICAgICAgIGlmIChyZWZzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICghcmVmcy5maW5kKHJlZiA9PiB0aGlzLnJlc29sdmUocmVmLnBhdGgpID09PSB0aGlzLnJlc29sdmUoXCJzcmNcIikpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNTcmMgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVmcy5maW5kKHJlZiA9PiB0aGlzLnJlc29sdmUocmVmLnBhdGgpID09PSB0aGlzLnJlc29sdmUoXCJ0ZXN0XCIpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzVGVzdHMgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNMaWJyYXJ5ID0gISEodGhpcy5qc29uLm1haW4gfHwgdGhpcy5qc29uLm1vZHVsZSB8fCB0aGlzLmpzb24uZXhwb3J0cyk7XG5cbiAgICAgICAgdGhpcy5oYXNDb25maWcgPSB0aGlzLmhhc0ZpbGUodGhpcy5yZXNvbHZlKENPTkZJR19QQVRIKSk7XG4gICAgfVxuXG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpzb24ubmFtZTtcbiAgICB9XG5cbiAgICBnZXQgZXhwb3J0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuanNvbi5leHBvcnRzO1xuICAgIH1cblxuICAgIGdldCBoYXNDb2RlZ2VuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNEaXJlY3RvcnkoQ09ERUdFTl9QQVRIKTtcbiAgICB9XG5cbiAgICByZXNvbHZlKC4uLnBhdGhzOiBzdHJpbmdbXSkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLnBhdGgsIC4uLnBhdGhzKTtcbiAgICB9XG5cbiAgICByZWxhdGl2ZShwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHJlbGF0aXZlKHRoaXMucGF0aCwgcGF0aCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2xvYihwYXR0ZXJuOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgICAgICAvLyBHbG9iIG9ubHkgdW5kZXJzdGFuZHMgZm9yd2FyZC1zbGFzaCBhcyBzZXBhcmF0b3IgYmVjYXVzZSByZWFzb25zXG4gICAgICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcGF0dGVybiA9IHRoaXMucmVzb2x2ZShwYXR0ZXJuKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLm1hcChzID0+IHRoaXMucmVzb2x2ZShzKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDdXJyZW50IGdsb2IgaW1wbGVtZW50YXRpb24gaXNuJ3QgYWN0dWFsbHkgYXN5bmMgYXMgdGhpcyBpcyBmYXN0ZXIgYW5kIHdlIG9ubHkgd2FsayBzbWFsbCBkaXJlY3RvcnkgdHJlZXNcbiAgICAgICAgcmV0dXJuIGdsb2JTeW5jKHBhdHRlcm4pO1xuICAgIH1cblxuICAgIHN0YXJ0KHdoYXQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBwcm9ncmVzcyA9IG5ldyBQcm9ncmVzcygpO1xuICAgICAgICBwcm9ncmVzcy5zdGFydHVwKHdoYXQsIHRoaXMpO1xuICAgICAgICByZXR1cm4gcHJvZ3Jlc3M7XG4gICAgfVxuXG4gICAgYXN5bmMgbGFzdE1vZGlmaWVkKC4uLnBhdGhzOiBzdHJpbmdbXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXN0TW9kaWZpZWRBYnNvbHV0ZShwYXRocy5tYXAocCA9PiB0aGlzLnJlc29sdmUocCkpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGxhc3RNb2RpZmllZEFic29sdXRlKHBhdGhzOiBzdHJpbmdbXSkge1xuICAgICAgICBsZXQgbXRpbWUgPSAwO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIHBhdGhzLm1hcChhc3luYyBwID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGlnbm9yZUVycm9yKFwiRU5PRU5UXCIsIGFzeW5jICgpID0+IGF3YWl0IHN0YXQocCkpO1xuICAgICAgICAgICAgICAgIGlmICghc3RhdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCB0aGlzTXRpbWU7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aHMgPSAoYXdhaXQgcmVhZGRpcihwKSkubWFwKHAyID0+IHJlc29sdmUocCwgcDIpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpc010aW1lID0gYXdhaXQgdGhpcy5sYXN0TW9kaWZpZWRBYnNvbHV0ZShwYXRocyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc010aW1lID0gc3RhdHMubXRpbWVNcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNNdGltZSA+IG10aW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIG10aW1lID0gdGhpc010aW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbXRpbWU7XG4gICAgfVxuXG4gICAgZ2V0IGRlcGVuZGVuY2llcygpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IEFycmF5PHN0cmluZz4oKTtcbiAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIFtcImRlcGVuZGVuY2llc1wiLCBcIm9wdGlvbmFsRGVwZW5kZW5jaWVzXCIsIFwiZGV2RGVwZW5kZW5jaWVzXCIsIFwicGVlckRlcGVuZGVuY2llc1wiXSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmpzb25bdHlwZV0gPT09IFwib2JqZWN0XCIgJiYgdGhpcy5qc29uW3R5cGVdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gWy4uLnJlc3VsdCwgLi4uT2JqZWN0LmtleXModGhpcy5qc29uW3R5cGVdKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsuLi5uZXcgU2V0KHJlc3VsdCldO1xuICAgIH1cblxuICAgIGdldCB3b3Jrc3BhY2UoKSB7XG4gICAgICAgIHJldHVybiBQYWNrYWdlLndvcmtzcGFjZUZvcih0aGlzLnBhdGgpO1xuICAgIH1cblxuICAgIHN0YXRpYyBzZXQgd29ya2luZ0Rpcih3ZDogc3RyaW5nKSB7XG4gICAgICAgIHdvcmtpbmdEaXIgPSB3ZDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IHdvcmtzcGFjZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud29ya3NwYWNlRm9yKHdvcmtpbmdEaXIpO1xuICAgIH1cblxuICAgIHN0YXRpYyB3b3Jrc3BhY2VGb3IoY3dkOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF3b3Jrc3BhY2UpIHtcbiAgICAgICAgICAgIHdvcmtzcGFjZSA9IGZpbmQoY3dkLCBwa2cgPT4gQXJyYXkuaXNBcnJheShwa2cuanNvbi53b3Jrc3BhY2VzKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdvcmtzcGFjZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IHRvb2xzKCkge1xuICAgICAgICBpZiAoIXRvb2xzKSB7XG4gICAgICAgICAgICB0b29scyA9IG5ldyBQYWNrYWdlKHsgcGF0aDogdG9vbHNQYXRoIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b29scztcbiAgICB9XG5cbiAgICBzdGF0aWMgZmluZEV4cG9ydChuYW1lOiBzdHJpbmcsIHR5cGU6IFwiY2pzXCIgfCBcImVzbVwiID0gXCJlc21cIikge1xuICAgICAgICByZXR1cm4gdGhpcy53b3Jrc3BhY2UucmVzb2x2ZUltcG9ydChuYW1lLCB0eXBlKTtcbiAgICB9XG5cbiAgICByZXNvbHZlRXhwb3J0KG5hbWU6IHN0cmluZywgdHlwZTogXCJjanNcIiB8IFwiZXNtXCIgPSBcImVzbVwiKSB7XG4gICAgICAgIGlmICghbmFtZS5zdGFydHNXaXRoKFwiLlwiKSkge1xuICAgICAgICAgICAgbmFtZSA9IGAuLyR7bmFtZX1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV4cG9ydERldGFpbCA9IHRoaXMuZXhwb3J0cz8uW25hbWVdO1xuXG4gICAgICAgIGlmIChleHBvcnREZXRhaWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cCA9IGZpbmRFeHBvcnRDb25kaXRpb24oZXhwb3J0RGV0YWlsLCB0eXBlKTtcbiAgICAgICAgICAgIGlmIChleHApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNvbHZlKGV4cCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmFtZSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSBcImVzbVwiICYmIHRoaXMuanNvbi5tb2R1bGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNvbHZlKHRoaXMuanNvbi5tb2R1bGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuanNvbi5tYWluKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZSh0aGlzLmpzb24ubWFpbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXNvbHZlIGV4cG9ydCAke25hbWV9IGluIHBhY2thZ2UgJHt0aGlzLm5hbWV9YCk7XG4gICAgfVxuXG4gICAgZmluZFBhY2thZ2UobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGxldCByZXNvbHZlSW4gPSB0aGlzLnBhdGg7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBpZiAoaXNEaXJlY3RvcnkocmVzb2x2ZShyZXNvbHZlSW4sIFwibm9kZV9tb2R1bGVzXCIsIG5hbWUpKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmV4dFJlc29sdmVJbiA9IGRpcm5hbWUocmVzb2x2ZUluKTtcbiAgICAgICAgICAgIGlmIChuZXh0UmVzb2x2ZUluID09PSByZXNvbHZlSW4pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIG1vZHVsZSAke25hbWV9IGZyb20gJHt0aGlzLnBhdGh9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlSW4gPSBuZXh0UmVzb2x2ZUluO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFBhY2thZ2UuZm9yUGF0aChyZXNvbHZlKHJlc29sdmVJbiwgXCJub2RlX21vZHVsZXNcIiwgbmFtZSkpO1xuICAgIH1cblxuICAgIHJlc29sdmVJbXBvcnQobmFtZTogc3RyaW5nLCB0eXBlOiBcImNqc1wiIHwgXCJlc21cIiA9IFwiZXNtXCIpIHtcbiAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBuYW1lLnNwbGl0KFwiL1wiKTtcbiAgICAgICAgbGV0IHBhY2thZ2VOYW1lID0gc2VnbWVudHMuc2hpZnQoKSBhcyBzdHJpbmc7XG4gICAgICAgIGlmIChwYWNrYWdlTmFtZS5zdGFydHNXaXRoKFwiQFwiKSAmJiBzZWdtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBhY2thZ2VOYW1lID0gYCR7cGFja2FnZU5hbWV9LyR7c2VnbWVudHMuc2hpZnQoKX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGtnID0gdGhpcy5maW5kUGFja2FnZShwYWNrYWdlTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIHBrZy5yZXNvbHZlRXhwb3J0KHNlZ21lbnRzLmxlbmd0aCA/IHNlZ21lbnRzLmpvaW4oXCIvXCIpIDogXCIuXCIsIHR5cGUpO1xuICAgIH1cblxuICAgIGhhc0ZpbGUocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuI21heWJlU3RhdChwYXRoKT8uaXNGaWxlKCk7XG4gICAgfVxuXG4gICAgaGFzRGlyZWN0b3J5KHBhdGg6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gISF0aGlzLiNtYXliZVN0YXQocGF0aCk/LmlzRGlyZWN0b3J5KCk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVhZEZpbGUocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiByZWFkRmlsZSh0aGlzLnJlc29sdmUocGF0aCksIFwidXRmLThcIik7XG4gICAgfVxuXG4gICAgcmVhZEZpbGVTeW5jKHBhdGg6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gcmVhZEZpbGVTeW5jKHRoaXMucmVzb2x2ZShwYXRoKSwgXCJ1dGYtOFwiKTtcbiAgICB9XG5cbiAgICBhc3luYyB3cml0ZUZpbGUocGF0aDogc3RyaW5nLCBjb250ZW50czogdW5rbm93bikge1xuICAgICAgICBhd2FpdCB3cml0ZUZpbGUodGhpcy5yZXNvbHZlKHBhdGgpLCBgJHtjb250ZW50c31gKTtcbiAgICB9XG5cbiAgICBhc3luYyBzYXZlKCkge1xuICAgICAgICBhd2FpdCB0aGlzLndyaXRlRmlsZShqb2luKHRoaXMucGF0aCwgXCJwYWNrYWdlLmpzb25cIiksIEpTT04uc3RyaW5naWZ5KHRoaXMuanNvbiwgdW5kZWZpbmVkLCA0KSk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVhZEpzb24ocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCB0aGlzLnJlYWRGaWxlKHBhdGgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UodGV4dCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICAgICAgICBlID0gbmV3IEVycm9yKGAke2V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAoZSBhcyBFcnJvcikubWVzc2FnZSA9IGBFcnJvciBwYXJzaW5nIFwiJHt0aGlzLnJlc29sdmUocGF0aCl9XCI6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyB3cml0ZUpzb24ocGF0aDogc3RyaW5nLCB2YWx1ZToge30pIHtcbiAgICAgICAgYXdhaXQgdGhpcy53cml0ZUZpbGUocGF0aCwgSlNPTi5zdHJpbmdpZnkodmFsdWUsIHVuZGVmaW5lZCwgNCkpO1xuICAgIH1cblxuICAgIHN0YXRpYyBtYXliZUZvclBhdGgocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIGZ1bmN0aW9uIGZpbmQocGF0aDogc3RyaW5nKTogUGFja2FnZSB8IG51bGwge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHBhY2thZ2VGb3JQYXRoW3BhdGhdO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4aXN0c1N5bmMoam9pbihwYXRoLCBcInBhY2thZ2UuanNvblwiKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFBhY2thZ2UoeyBwYXRoIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZpbmQoZGlybmFtZShwYXRoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhY2thZ2VGb3JQYXRoW3BhdGhdID0gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmQocGF0aCk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdCA/PyB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgc3RhdGljIGZvclBhdGgocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMubWF5YmVGb3JQYXRoKHBhdGgpO1xuICAgICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBwYWNrYWdlLmpzb24gZm9yIFwiJHtwYXRofVwiYCk7XG4gICAgfVxuXG4gICAgZ2V0IGFsaWFzZXMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgICAgIGlmICh0aGlzLiNhbGlhc2VzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNhbGlhc2VzO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4jYWxpYXNlcyA9IHtcbiAgICAgICAgICAgIC4uLlBhY2thZ2UubWF5YmVGb3JQYXRoKGRpcm5hbWUodGhpcy5wYXRoKSk/LmFsaWFzZXMsXG4gICAgICAgICAgICAuLi50aGlzLmpzb24uaW1wb3J0cyxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy4jYWxpYXNlcztcbiAgICB9XG5cbiAgICAjbWF5YmVTdGF0KHBhdGg6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbWF5YmVTdGF0U3luYyh0aGlzLnJlc29sdmUocGF0aCkpO1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgUGFja2FnZUpzb24gPSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICBpbXBvcnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn07XG5cbmxldCB3b3JraW5nRGlyID0gXCIuXCI7XG5sZXQgd29ya3NwYWNlOiBQYWNrYWdlIHwgdW5kZWZpbmVkO1xubGV0IHRvb2xzOiBQYWNrYWdlIHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBmaW5kKHN0YXJ0RGlyOiBzdHJpbmcsIHNlbGVjdG9yOiAocGtnOiBQYWNrYWdlKSA9PiBib29sZWFuKTogUGFja2FnZSB7XG4gICAgbGV0IHBrZyA9IG5ldyBQYWNrYWdlKHsgcGF0aDogc3RhcnREaXIgfSk7XG4gICAgd2hpbGUgKCFzZWxlY3Rvcihwa2cpKSB7XG4gICAgICAgIHBrZyA9IG5ldyBQYWNrYWdlKHsgcGF0aDogZGlybmFtZShwa2cucGF0aCkgfSk7XG4gICAgfVxuICAgIHJldHVybiBwa2c7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdEZvcm1hdHMoanNvbjogYW55KSB7XG4gICAgbGV0IGVzbTogYm9vbGVhbiwgY2pzOiBib29sZWFuO1xuXG4gICAgaWYgKGpzb24udHlwZSA9PT0gXCJtb2R1bGVcIikge1xuICAgICAgICBlc20gPSB0cnVlO1xuICAgICAgICBjanMgPVxuICAgICAgICAgICAgKGpzb24ubWFpbiAhPT0gdW5kZWZpbmVkICYmIGpzb24ubW9kdWxlICE9PSB1bmRlZmluZWQpIHx8XG4gICAgICAgICAgICAhIU9iamVjdC52YWx1ZXMoanNvbi5leHBvcnRzID8/IHt9KS5maW5kKChleHA6IGFueSkgPT4gZXhwLnJlcXVpcmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNqcyA9IHRydWU7XG4gICAgICAgIGVzbSA9ICEhanNvbi5tb2R1bGUgfHwgISFPYmplY3QudmFsdWVzKGpzb24uZXhwb3J0cyA/PyB7fSkuZmluZCgoZXhwOiBhbnkpID0+IGV4cC5pbXBvcnQpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGVzbSwgY2pzIH07XG59XG5cbmZ1bmN0aW9uIGZpbmRFeHBvcnRDb25kaXRpb24oZGV0YWlsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCB0eXBlOiBcImVzbVwiIHwgXCJjanNcIik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGUgPT09IFwiZXNtXCIgJiYgZGV0YWlsLmltcG9ydCkge1xuICAgICAgICBsZXQgZXhwID0gZGV0YWlsLmltcG9ydDtcbiAgICAgICAgaWYgKGV4cCAmJiB0eXBlb2YgZXhwICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBleHAgPSBmaW5kRXhwb3J0Q29uZGl0aW9uKGV4cCwgdHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4cCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxldCBleHAgPSBkZXRhaWwucmVxdWlyZSA/PyBkZXRhaWwubm9kZSA/PyBkZXRhaWwuZGVmYXVsdDtcbiAgICBpZiAoZXhwICYmIHR5cGVvZiBleHAgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgZXhwID0gZmluZEV4cG9ydENvbmRpdGlvbihleHAsIHR5cGUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXhwID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBleHA7XG4gICAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BLFNBQVMsWUFBWSxjQUFjLGdCQUFnQjtBQUNuRCxTQUFTLFNBQVMsVUFBVSxNQUFNLGlCQUFpQjtBQUNuRCxTQUFTLFNBQVMsTUFBTSxVQUFVLGVBQWU7QUFDakQsU0FBUyxhQUFhLHVCQUF1QjtBQUM3QyxTQUFTLFVBQVUsbUJBQW1CLHFCQUFxQjtBQUMzRCxTQUFTLGdCQUFnQjtBQUN6QixTQUFTLGlCQUFpQjtBQUVuQixNQUFNLDBCQUEwQixNQUFNO0FBQUM7QUFFdkMsTUFBTSxjQUFjO0FBQ3BCLE1BQU0sZUFBZTtBQUU1QixNQUFNLGlCQUFpQixDQUFDO0FBRXhCLFNBQVMsU0FBUyxVQUFrQixPQUFlLEtBQUssT0FBZ0I7QUFDcEUsU0FBTyxRQUFRLElBQUk7QUFDbkIsU0FBTyxNQUFNO0FBQ1QsVUFBTSxPQUFPO0FBQUEsTUFBZ0IsQ0FBQyxVQUFVLFNBQVM7QUFBQSxNQUFHLE1BQ2hELEtBQUssTUFBTSxhQUFhLFFBQVEsTUFBTSxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUM7QUFBQSxJQUMvRDtBQUNBLFFBQUksTUFBTTtBQUNOLFVBQUksVUFBVSxVQUFhLEtBQUssU0FBUyxPQUFPO0FBQzVDLGVBQU8sRUFBRSxNQUFNLE1BQU0sS0FBSztBQUFBLE1BQzlCO0FBQUEsSUFDSjtBQUNBLFVBQU0sU0FBUyxRQUFRLElBQUk7QUFDM0IsUUFBSSxXQUFXLE1BQU07QUFDakIsWUFBTSxJQUFJLGtCQUFrQixvQkFBb0IsU0FBUyxRQUFRLEVBQUU7QUFBQSxJQUN2RTtBQUNBLFdBQU87QUFBQSxFQUNYO0FBQ0o7QUFFQSxTQUFTLFlBQVksTUFB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QUFFQSxTQUFLLFdBQVc7QUFBQSxNQUNaLEdBQUcsUUFBUSxhQUFhLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRztBQUFBLE1BQzdDLEdBQUcsS0FBSyxLQUFLO0FBQUEsSUFDakI7QUFFQSxXQUFPLEtBQUs7QUFBQSxFQUNoQjtBQUFBLEVBRUEsV0FBVyxNQUFjO0FBQ3JCLFdBQU8sY0FBYyxLQUFLLFFBQVEsSUFBSSxDQUFDO0FBQUEsRUFDM0M7QUFDSjtBQVNBLElBQUksYUFBYTtBQUNqQixJQUFJO0FBQ0osSUFBSTtBQUVKLFNBQVMsS0FBSyxVQUFrQixVQUE4QztBQUMxRSxNQUFJLE1BQU0sSUFBSSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDeEMsU0FBTyxDQUFDLFNBQVMsR0FBRyxHQUFHO0FBQ25CLFVBQU0sSUFBSSxRQUFRLEVBQUUsTUFBTSxRQUFRLElBQUksSUFBSSxFQUFFLENBQUM7QUFBQSxFQUNqRDtBQUNBLFNBQU87QUFDWDtBQUVBLFNBQVMsY0FBYyxNQUFXO0FBQzlCLE1BQUksS0FBYztBQUVsQixNQUFJLEtBQUssU0FBUyxVQUFVO0FBQ3hCLFVBQU07QUFDTixVQUNLLEtBQUssU0FBUyxVQUFhLEtBQUssV0FBVyxVQUM1QyxDQUFDLENBQUMsT0FBTyxPQUFPLEtBQUssV0FBVyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsUUFBYSxJQUFJLE9BQU87QUFBQSxFQUMxRSxPQUFPO0FBQ0gsVUFBTTtBQUNOLFVBQU0sQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUMsT0FBTyxPQUFPLEtBQUssV0FBVyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsUUFBYSxJQUFJLE1BQU07QUFBQSxFQUM1RjtBQUVBLFNBQU8sRUFBRSxLQUFLLElBQUk7QUFDdEI7QUFFQSxTQUFTLG9CQUFvQixRQUE2QixNQUF5QztBQUMvRixNQUFJLFNBQVMsU0FBUyxPQUFPLFFBQVE7QUFDakMsUUFBSUcsT0FBTSxPQUFPO0FBQ2pCLFFBQUlBLFFBQU8sT0FBT0EsU0FBUSxVQUFVO0FBQ2hDLE1BQUFBLE9BQU0sb0JBQW9CQSxNQUFLLElBQUk7QUFBQSxJQUN2QztBQUNBLFFBQUlBLE1BQUs7QUFDTCxhQUFPQTtBQUFBLElBQ1g7QUFBQSxFQUNKO0FBRUEsTUFBSSxNQUFNLE9BQU8sV0FBVyxPQUFPLFFBQVEsT0FBTztBQUNsRCxNQUFJLE9BQU8sT0FBTyxRQUFRLFVBQVU7QUFDaEMsVUFBTSxvQkFBb0IsS0FBSyxJQUFJO0FBQUEsRUFDdkM7QUFFQSxNQUFJLE9BQU8sUUFBUSxVQUFVO0FBQ3pCLFdBQU87QUFBQSxFQUNYO0FBQ0o7IiwKICAibmFtZXMiOiBbInBhdGhzIiwgImZpbmQiLCAicGF0aCIsICJyZXN1bHQiLCAiZXhwIl0KfQo= |
@@ -6,4 +6,3 @@ /** | ||
*/ | ||
import yargs from "yargs"; | ||
import { hideBin } from "yargs/helpers"; | ||
import { commander } from "../util/commander.js"; | ||
import { Package } from "../util/package.js"; | ||
@@ -13,4 +12,6 @@ import { Progress } from "../util/progress.js"; | ||
async function main(argv = process.argv) { | ||
const args = await yargs(hideBin(argv)).command("$0 [ver]", "Manipulate monorepo package versions.").option("prefix", { alias: "p", default: ".", type: "string", describe: "specify monorepo directory" }).option("set", { alias: "s", type: "boolean", describe: "Sets the release version" }).option("apply", { alias: "a", type: "boolean", describe: "Sets package versions to the release version" }).option("tag", { alias: "t", type: "boolean", describe: "Adds git tag for release version" }).wrap(Math.min(process.stdout.columns, 80)).strict().argv; | ||
const version = args.ver; | ||
const program = commander("matter-version", "Manipulate monorepo package versions.").argument("[version]").option("-p, --prefix <prefix>", "specify monorepo directory").option("-s, --set", "sets the release version").option("-a, --apply", "sets package versions to the release version").option("-t, --tag", "adds git tag for release version").parse(argv); | ||
const args = program.opts(); | ||
args.version = program.args[0]; | ||
const version = args.version; | ||
const pkg = new Package({ path: args.prefix }); | ||
@@ -34,2 +35,2 @@ const versioner = new Versioner(pkg, version); | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3ZlcnNpb25pbmcvY2xpLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMi0yMDI0IE1hdHRlci5qcyBBdXRob3JzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCB5YXJncyBmcm9tIFwieWFyZ3NcIjtcbmltcG9ydCB7IGhpZGVCaW4gfSBmcm9tIFwieWFyZ3MvaGVscGVyc1wiO1xuaW1wb3J0IHsgUGFja2FnZSB9IGZyb20gXCIuLi91dGlsL3BhY2thZ2UuanNcIjtcbmltcG9ydCB7IFByb2dyZXNzIH0gZnJvbSBcIi4uL3V0aWwvcHJvZ3Jlc3MuanNcIjtcbmltcG9ydCB7IFZlcnNpb25lciB9IGZyb20gXCIuL3ZlcnNpb25lci5qc1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbihhcmd2ID0gcHJvY2Vzcy5hcmd2KSB7XG4gICAgY29uc3QgYXJncyA9IGF3YWl0IHlhcmdzKGhpZGVCaW4oYXJndikpXG4gICAgICAgIC5jb21tYW5kKFwiJDAgW3Zlcl1cIiwgXCJNYW5pcHVsYXRlIG1vbm9yZXBvIHBhY2thZ2UgdmVyc2lvbnMuXCIpXG4gICAgICAgIC5vcHRpb24oXCJwcmVmaXhcIiwgeyBhbGlhczogXCJwXCIsIGRlZmF1bHQ6IFwiLlwiLCB0eXBlOiBcInN0cmluZ1wiLCBkZXNjcmliZTogXCJzcGVjaWZ5IG1vbm9yZXBvIGRpcmVjdG9yeVwiIH0pXG4gICAgICAgIC5vcHRpb24oXCJzZXRcIiwgeyBhbGlhczogXCJzXCIsIHR5cGU6IFwiYm9vbGVhblwiLCBkZXNjcmliZTogXCJTZXRzIHRoZSByZWxlYXNlIHZlcnNpb25cIiB9KVxuICAgICAgICAub3B0aW9uKFwiYXBwbHlcIiwgeyBhbGlhczogXCJhXCIsIHR5cGU6IFwiYm9vbGVhblwiLCBkZXNjcmliZTogXCJTZXRzIHBhY2thZ2UgdmVyc2lvbnMgdG8gdGhlIHJlbGVhc2UgdmVyc2lvblwiIH0pXG4gICAgICAgIC5vcHRpb24oXCJ0YWdcIiwgeyBhbGlhczogXCJ0XCIsIHR5cGU6IFwiYm9vbGVhblwiLCBkZXNjcmliZTogXCJBZGRzIGdpdCB0YWcgZm9yIHJlbGVhc2UgdmVyc2lvblwiIH0pXG4gICAgICAgIC53cmFwKE1hdGgubWluKHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMsIDgwKSlcbiAgICAgICAgLnN0cmljdCgpLmFyZ3Y7XG5cbiAgICBjb25zdCB2ZXJzaW9uID0gYXJncy52ZXIgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHBrZyA9IG5ldyBQYWNrYWdlKHsgcGF0aDogYXJncy5wcmVmaXggfSk7XG4gICAgY29uc3QgdmVyc2lvbmVyID0gbmV3IFZlcnNpb25lcihwa2csIHZlcnNpb24pO1xuXG4gICAgY29uc3QgcHJvZ3Jlc3MgPSBuZXcgUHJvZ3Jlc3MoKTtcblxuICAgIHByb2dyZXNzLnN0YXJ0dXAoYFJlbGVhc2UgJHt2ZXJzaW9uZXIudmVyc2lvbn1gLCB2ZXJzaW9uZXIucGtnKTtcbiAgICBpZiAoYXJncy5zZXQpIHtcbiAgICAgICAgYXdhaXQgcHJvZ3Jlc3MucnVuKGBTZXQgdmVyc2lvbiB0byAke3Byb2dyZXNzLmVtcGhhc2l6ZSh2ZXJzaW9uZXIudmVyc2lvbil9YCwgKCkgPT4gdmVyc2lvbmVyLnNldCgpKTtcbiAgICB9XG5cbiAgICBpZiAoYXJncy5hcHBseSkge1xuICAgICAgICBhd2FpdCB2ZXJzaW9uZXIuYXBwbHkocHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGlmIChhcmdzLnRhZykge1xuICAgICAgICBhd2FpdCBwcm9ncmVzcy5ydW4oYFRhZ2dpbmcgdmVyc2lvbiAke3Byb2dyZXNzLmVtcGhhc2l6ZSh2ZXJzaW9uZXIudmVyc2lvbil9YCwgKCkgPT4gdmVyc2lvbmVyLnRhZygpKTtcbiAgICB9XG5cbiAgICBwcm9ncmVzcy5zaHV0ZG93bigpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BLE9BQU8sV0FBVztBQUNsQixTQUFTLGVBQWU7QUFDeEIsU0FBUyxlQUFlO0FBQ3hCLFNBQVMsZ0JBQWdCO0FBQ3pCLFNBQVMsaUJBQWlCO0FBRTFCLGVBQXNCLEtBQUssT0FBTyxRQUFRLE1BQU07QUFDNUMsUUFBTSxPQUFPLE1BQU0sTUFBTSxRQUFRLElBQUksQ0FBQyxFQUNqQyxRQUFRLFlBQVksdUNBQXVDLEVBQzNELE9BQU8sVUFBVSxFQUFFLE9BQU8sS0FBSyxTQUFTLEtBQUssTUFBTSxVQUFVLFVBQVUsNkJBQTZCLENBQUMsRUFDckcsT0FBTyxPQUFPLEVBQUUsT0FBTyxLQUFLLE1BQU0sV0FBVyxVQUFVLDJCQUEyQixDQUFDLEVBQ25GLE9BQU8sU0FBUyxFQUFFLE9BQU8sS0FBSyxNQUFNLFdBQVcsVUFBVSwrQ0FBK0MsQ0FBQyxFQUN6RyxPQUFPLE9BQU8sRUFBRSxPQUFPLEtBQUssTUFBTSxXQUFXLFVBQVUsbUNBQW1DLENBQUMsRUFDM0YsS0FBSyxLQUFLLElBQUksUUFBUSxPQUFPLFNBQVMsRUFBRSxDQUFDLEVBQ3pDLE9BQU8sRUFBRTtBQUVkLFFBQU0sVUFBVSxLQUFLO0FBQ3JCLFFBQU0sTUFBTSxJQUFJLFFBQVEsRUFBRSxNQUFNLEtBQUssT0FBTyxDQUFDO0FBQzdDLFFBQU0sWUFBWSxJQUFJLFVBQVUsS0FBSyxPQUFPO0FBRTVDLFFBQU0sV0FBVyxJQUFJLFNBQVM7QUFFOUIsV0FBUyxRQUFRLFdBQVcsVUFBVSxPQUFPLElBQUksVUFBVSxHQUFHO0FBQzlELE1BQUksS0FBSyxLQUFLO0FBQ1YsVUFBTSxTQUFTLElBQUksa0JBQWtCLFNBQVMsVUFBVSxVQUFVLE9BQU8sQ0FBQyxJQUFJLE1BQU0sVUFBVSxJQUFJLENBQUM7QUFBQSxFQUN2RztBQUVBLE1BQUksS0FBSyxPQUFPO0FBQ1osVUFBTSxVQUFVLE1BQU0sUUFBUTtBQUFBLEVBQ2xDO0FBRUEsTUFBSSxLQUFLLEtBQUs7QUFDVixVQUFNLFNBQVMsSUFBSSxtQkFBbUIsU0FBUyxVQUFVLFVBQVUsT0FBTyxDQUFDLElBQUksTUFBTSxVQUFVLElBQUksQ0FBQztBQUFBLEVBQ3hHO0FBRUEsV0FBUyxTQUFTO0FBQ3RCOyIsCiAgIm5hbWVzIjogW10KfQo= | ||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3ZlcnNpb25pbmcvY2xpLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMi0yMDI0IE1hdHRlci5qcyBBdXRob3JzXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCB7IGNvbW1hbmRlciB9IGZyb20gXCIuLi91dGlsL2NvbW1hbmRlci5qc1wiO1xuaW1wb3J0IHsgUGFja2FnZSB9IGZyb20gXCIuLi91dGlsL3BhY2thZ2UuanNcIjtcbmltcG9ydCB7IFByb2dyZXNzIH0gZnJvbSBcIi4uL3V0aWwvcHJvZ3Jlc3MuanNcIjtcbmltcG9ydCB7IFZlcnNpb25lciB9IGZyb20gXCIuL3ZlcnNpb25lci5qc1wiO1xuXG5pbnRlcmZhY2UgQXJncyB7XG4gICAgdmVyc2lvbj86IHN0cmluZztcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gICAgc2V0PzogYm9vbGVhbjtcbiAgICBhcHBseT86IGJvb2xlYW47XG4gICAgdGFnPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4oYXJndiA9IHByb2Nlc3MuYXJndikge1xuICAgIGNvbnN0IHByb2dyYW0gPSBjb21tYW5kZXIoXCJtYXR0ZXItdmVyc2lvblwiLCBcIk1hbmlwdWxhdGUgbW9ub3JlcG8gcGFja2FnZSB2ZXJzaW9ucy5cIilcbiAgICAgICAgLmFyZ3VtZW50KFwiW3ZlcnNpb25dXCIpXG4gICAgICAgIC5vcHRpb24oXCItcCwgLS1wcmVmaXggPHByZWZpeD5cIiwgXCJzcGVjaWZ5IG1vbm9yZXBvIGRpcmVjdG9yeVwiKVxuICAgICAgICAub3B0aW9uKFwiLXMsIC0tc2V0XCIsIFwic2V0cyB0aGUgcmVsZWFzZSB2ZXJzaW9uXCIpXG4gICAgICAgIC5vcHRpb24oXCItYSwgLS1hcHBseVwiLCBcInNldHMgcGFja2FnZSB2ZXJzaW9ucyB0byB0aGUgcmVsZWFzZSB2ZXJzaW9uXCIpXG4gICAgICAgIC5vcHRpb24oXCItdCwgLS10YWdcIiwgXCJhZGRzIGdpdCB0YWcgZm9yIHJlbGVhc2UgdmVyc2lvblwiKVxuICAgICAgICAucGFyc2UoYXJndik7XG5cbiAgICBjb25zdCBhcmdzID0gcHJvZ3JhbS5vcHRzPEFyZ3M+KCk7XG4gICAgYXJncy52ZXJzaW9uID0gcHJvZ3JhbS5hcmdzWzBdO1xuXG4gICAgY29uc3QgdmVyc2lvbiA9IGFyZ3MudmVyc2lvbjtcbiAgICBjb25zdCBwa2cgPSBuZXcgUGFja2FnZSh7IHBhdGg6IGFyZ3MucHJlZml4IH0pO1xuICAgIGNvbnN0IHZlcnNpb25lciA9IG5ldyBWZXJzaW9uZXIocGtnLCB2ZXJzaW9uKTtcblxuICAgIGNvbnN0IHByb2dyZXNzID0gbmV3IFByb2dyZXNzKCk7XG5cbiAgICBwcm9ncmVzcy5zdGFydHVwKGBSZWxlYXNlICR7dmVyc2lvbmVyLnZlcnNpb259YCwgdmVyc2lvbmVyLnBrZyk7XG4gICAgaWYgKGFyZ3Muc2V0KSB7XG4gICAgICAgIGF3YWl0IHByb2dyZXNzLnJ1bihgU2V0IHZlcnNpb24gdG8gJHtwcm9ncmVzcy5lbXBoYXNpemUodmVyc2lvbmVyLnZlcnNpb24pfWAsICgpID0+IHZlcnNpb25lci5zZXQoKSk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3MuYXBwbHkpIHtcbiAgICAgICAgYXdhaXQgdmVyc2lvbmVyLmFwcGx5KHByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBpZiAoYXJncy50YWcpIHtcbiAgICAgICAgYXdhaXQgcHJvZ3Jlc3MucnVuKGBUYWdnaW5nIHZlcnNpb24gJHtwcm9ncmVzcy5lbXBoYXNpemUodmVyc2lvbmVyLnZlcnNpb24pfWAsICgpID0+IHZlcnNpb25lci50YWcoKSk7XG4gICAgfVxuXG4gICAgcHJvZ3Jlc3Muc2h1dGRvd24oKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxTQUFTLGlCQUFpQjtBQUMxQixTQUFTLGVBQWU7QUFDeEIsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyxpQkFBaUI7QUFVMUIsZUFBc0IsS0FBSyxPQUFPLFFBQVEsTUFBTTtBQUM1QyxRQUFNLFVBQVUsVUFBVSxrQkFBa0IsdUNBQXVDLEVBQzlFLFNBQVMsV0FBVyxFQUNwQixPQUFPLHlCQUF5Qiw0QkFBNEIsRUFDNUQsT0FBTyxhQUFhLDBCQUEwQixFQUM5QyxPQUFPLGVBQWUsOENBQThDLEVBQ3BFLE9BQU8sYUFBYSxrQ0FBa0MsRUFDdEQsTUFBTSxJQUFJO0FBRWYsUUFBTSxPQUFPLFFBQVEsS0FBVztBQUNoQyxPQUFLLFVBQVUsUUFBUSxLQUFLLENBQUM7QUFFN0IsUUFBTSxVQUFVLEtBQUs7QUFDckIsUUFBTSxNQUFNLElBQUksUUFBUSxFQUFFLE1BQU0sS0FBSyxPQUFPLENBQUM7QUFDN0MsUUFBTSxZQUFZLElBQUksVUFBVSxLQUFLLE9BQU87QUFFNUMsUUFBTSxXQUFXLElBQUksU0FBUztBQUU5QixXQUFTLFFBQVEsV0FBVyxVQUFVLE9BQU8sSUFBSSxVQUFVLEdBQUc7QUFDOUQsTUFBSSxLQUFLLEtBQUs7QUFDVixVQUFNLFNBQVMsSUFBSSxrQkFBa0IsU0FBUyxVQUFVLFVBQVUsT0FBTyxDQUFDLElBQUksTUFBTSxVQUFVLElBQUksQ0FBQztBQUFBLEVBQ3ZHO0FBRUEsTUFBSSxLQUFLLE9BQU87QUFDWixVQUFNLFVBQVUsTUFBTSxRQUFRO0FBQUEsRUFDbEM7QUFFQSxNQUFJLEtBQUssS0FBSztBQUNWLFVBQU0sU0FBUyxJQUFJLG1CQUFtQixTQUFTLFVBQVUsVUFBVSxPQUFPLENBQUMsSUFBSSxNQUFNLFVBQVUsSUFBSSxDQUFDO0FBQUEsRUFDeEc7QUFFQSxXQUFTLFNBQVM7QUFDdEI7IiwKICAibmFtZXMiOiBbXQp9Cg== |
{ | ||
"name": "@matter/tools", | ||
"version": "0.11.0-alpha.0-20241027-e40e1664f", | ||
"version": "0.11.0-alpha.0-20241028-39fc76758", | ||
"description": "Matter.js tooling", | ||
@@ -10,3 +10,2 @@ "type": "module", | ||
"build-clean": "node bin/build.js --clean", | ||
"test": "node bin/test.js", | ||
"version": "node bin/version.js" | ||
@@ -16,3 +15,2 @@ }, | ||
"matter-build": "bin/build.js", | ||
"matter-test": "bin/test.js", | ||
"matter-run": "bin/run.js", | ||
@@ -50,32 +48,15 @@ "matter-version": "bin/version.js" | ||
"dependencies": { | ||
"@npmcli/map-workspaces": "^4.0.1", | ||
"@types/express": "^4.17.21", | ||
"ansi-colors": "^4.1.3", | ||
"chai": "^4.4.1", | ||
"chai-as-promised": "^7.1.2", | ||
"dockerode": "^4.0.2", | ||
"commander": "^12.1.0", | ||
"esbuild": "^0.24.0", | ||
"express": "^4.19.2", | ||
"glob": "^10.4.5", | ||
"mocha": "^10.7.3", | ||
"playwright": "^1.48.1", | ||
"trace-unhandled": "^2.0.1", | ||
"typescript": "~5.6.2", | ||
"wtfnode": "^0.9.3", | ||
"yargs": "^17.7.2" | ||
"minimatch": "^9.0.5", | ||
"typescript": "~5.6.2" | ||
}, | ||
"optionalDependencies": { | ||
"@esbuild/linux-x64": "^0.24.0", | ||
"v8-profiler-next": "^1.10.0" | ||
"@esbuild/linux-x64": "^0.24.0" | ||
}, | ||
"devDependencies": { | ||
"@types/chai": "^4.3.16", | ||
"@types/chai-as-promised": "^7.1.8", | ||
"@types/debug": "^4.1.12", | ||
"@types/dockerode": "^3.3.30", | ||
"@types/glob": "^8.1.0", | ||
"@types/mocha": "^10.0.7", | ||
"@types/npmcli__map-workspaces": "^3.0.4", | ||
"@types/wtfnode": "^0.7.3", | ||
"@types/yargs": "^17.0.33" | ||
"@types/commander": "^2.12.5", | ||
"@types/minimatch": "^5.1.2", | ||
"@types/node": "^22.8.1" | ||
}, | ||
@@ -82,0 +63,0 @@ "publishConfig": { |
105
README.md
# @matter/tools - Matter.js Tooling | ||
This package supports build, test and execution infrastructure for other matter.js packages. | ||
This package supports build and execution infrastructure for other matter.js packages. | ||
> This package supports all Node.js LTS versions starting with 18.x | ||
> Supports all Node.js LTS versions starting with 18.x | ||
## Rational | ||
Matter.js consists of a large number of generated TypeScript files. We support | ||
multiple module formats targeting disparate JavaScript runtimes including Node | ||
and web browsers. We publish a moderate (and growing) number of packages to | ||
NPM. We support Linux, Windows and MacOS. | ||
Matter.js consists of a large number of generated TypeScript files. We support multiple module formats targeting | ||
disparate JavaScript runtimes including Node and web browsers. We publish a moderate (and growing) number of packages | ||
to NPM. We support Linux, Windows and MacOS. | ||
Previously, TSC analysis and test times had become quite slow. A proliferation | ||
of configuration files for TSC and test framework was adding significant | ||
redundancy to the codebase. | ||
Previously, TSC analysis and test times had become quite slow. A proliferation of configuration files for TSC and test | ||
framework was adding significant redundancy to the codebase. | ||
This package standardizes and centralizes configuration for build and test. It | ||
minimizes reliance on TSC and generally does its best to run build and test as | ||
quickly as possible. | ||
This package standardizes and centralizes configuration for build and test. It minimizes reliance on TSC and generally | ||
does its best to run build and test as quickly as possible. | ||
## Dev workflow | ||
Although Matter.js relies on third party tools for build and test, the | ||
interface is command-line oriented and unique to Matter.js. As such it will be | ||
unfamiliar to new developers. | ||
Although Matter.js relies on third party tools for build and test, the interface is command-line oriented and unique to | ||
Matter.js. As such it will be unfamiliar to new developers. | ||
To minimize developer burden, we also maintain traditional `tsconfig.json` | ||
files with project references in each `src/` and `test/`. These files support | ||
traditional IDE and `tsc --watch` workflows and are largely (but not entirely) | ||
ignored by the tooling package. | ||
To minimize developer burden, we also maintain traditional `tsconfig.json` files with project references in each `src/` | ||
and `test/`. These files support traditional IDE and `tsc --watch` workflows and are largely (but not entirely) ignored | ||
by the tooling package. | ||
These files do add configuration overhead but we minimize this with a shared | ||
[tsconfig.base.json](tsconfig.base.json) supplied by this package. | ||
These files do add configuration overhead but we minimize this with a shared [tsconfig.base.json](tsconfig.base.json) | ||
supplied by this package. | ||
We also supply a standard `.mocharc.cjs` in packages with tests. You can use | ||
this with your IDE's Mocha integration for standard testing workflows. | ||
We also supply a standard `.mocharc.cjs` in packages with tests. You can use this with your IDE's Mocha integration for | ||
standard testing workflows. | ||
## Build | ||
We use [TSC](https://www.typescriptlang.org/docs/handbook/compiler-options.html) | ||
to validate TypeScript types and generate declaration files. We | ||
use [esbuild](https://esbuild.github.io/) for transcoding TypeScript to ESM | ||
(ES6 module format) and CJS (CommonJS module format). | ||
We use [TSC](https://www.typescriptlang.org/docs/handbook/compiler-options.html) to validate TypeScript types and | ||
generate declaration files. We use [esbuild](https://esbuild.github.io/) for transcoding TypeScript to ESM (ES6 module | ||
format) and CJS (CommonJS module format). | ||
The [matter-build](./bin/build.js) script orchestrates TSC and esbuild. It | ||
inspects `package.json` for the target module to determine whether to emit | ||
ESM, CJS or both. | ||
The [matter-build](./bin/build.js) script orchestrates TSC and esbuild. It inspects `package.json` for the target | ||
module to determine whether to emit ESM, CJS or both. | ||
Use `matter-build --help` for command line usage. `matter-build --workspaces` | ||
builds all workspace packages that have changed (or depend on other workspace | ||
packages that have changed) since the last build. | ||
Use `matter-build --help` for command line usage. `matter-build --workspaces` builds all workspace packages that have | ||
changed (or depend on other workspace packages that have changed) since the last build. | ||
`matter-build` itself is implemented in TypeScript. It uses `esbuild` to | ||
bootstrap itself in fresh installs. | ||
`matter-build` itself is implemented in TypeScript. It uses `esbuild` to bootstrap itself in fresh installs. | ||
## Test | ||
We run tests using [Mocha](https://mochajs.org/) with | ||
[chai](https://www.chaijs.com/) for assertions. For multi-format modules we | ||
run tests as both CJS and ESM. For packages that support browsers we run tests | ||
in a headless browser using [Playwright](https://playwright.dev/). | ||
The [matter-test](./bin/test.js) scripts orchestrates test execution. Use | ||
`matter-test --help` for command line usage. | ||
By default matter-test inspects `package.json` for the target module to | ||
determine whether to test ESM, CJS or both under Node. Web tests do not run by | ||
default but you can enable them using the `-w` option. | ||
`matter-test` supports | ||
environment variables of the form `MATTER_<OPTION>` for most command line | ||
arguments. This includes `MATTER_SPEC`, `MATTER_PROFILE`, `MATTER_GREP`, | ||
`MATTER_FGREP`, `MATTER_INVERT` and `MATTER_ALL_LOGS`. | ||
Matter.js emits a significant volume of logging during testing. By default, | ||
`matter-test` captures these logs internally and only emits them when | ||
reporting on failed tests. | ||
The test environment orchestrated by this package installs a small number of | ||
Mocks for Matter.js infrastructure singletons. | ||
[global-declarations.ts](src/testing/global-declarations.ts) defines a global | ||
API for these mocks. | ||
## Execution | ||
The final command supplied by the tooling package is [matter-run](bin/run.js). | ||
This command bootstraps tooling, transpiles the target module, and executes | ||
the named JS or TS script. | ||
We facilitate execution via [matter-run](bin/run.js). This command bootstraps tooling, transpiles the target module, and | ||
executes the named JS or TS script. | ||
`matter-run` understands Matter.js `package.json` conventions and | ||
automatically transpiles typescript files in the target package prior to | ||
execution. | ||
`matter-run` understands Matter.js `package.json` conventions and automatically transpiles typescript files in the | ||
target package prior to execution. | ||
`matter-run` accepts a script to run and passes other arguments to the script | ||
verbatim. | ||
`matter-run` accepts a script to run and passes other arguments to the script verbatim. | ||
If you set the environment variable `MATTER_ECHO`, `matter-run` will print the | ||
command line prior to invoking a script. | ||
If you set the environment variable `MATTER_ECHO`, `matter-run` will print the command line prior to invoking a script. |
@@ -7,3 +7,2 @@ /** | ||
import colors from "ansi-colors"; | ||
import { createHash } from "crypto"; | ||
@@ -153,3 +152,3 @@ import { Progress } from "../util/progress.js"; | ||
progress.failure("Terminating due to type errors"); | ||
process.stderr.write(e.diagnostics); | ||
process.stderr.write(`${e.diagnostics}\n`); | ||
process.exit(1); | ||
@@ -161,10 +160,26 @@ } | ||
const formats = Array<"esm" | "cjs">(); | ||
if (targets.has(Target.esm)) { | ||
await this.#transpile(project, progress, Target.esm); | ||
formats.push("esm"); | ||
} | ||
if (targets.has(Target.cjs)) { | ||
await this.#transpile(project, progress, Target.cjs); | ||
formats.push("cjs"); | ||
} | ||
if (formats.length) { | ||
const groups = [project.pkg.isLibrary ? "library" : "app"]; | ||
if (project.pkg.hasTests) { | ||
groups.push("tests"); | ||
} | ||
const formatDesc = formats.map(progress.emphasize).join("+"); | ||
const groupDesc = groups.map(progress.emphasize).join("+"); | ||
await progress.run(`Transpile ${groupDesc} to ${formatDesc}`, async () => { | ||
for (const format of formats) { | ||
await this.#transpile(project, format); | ||
} | ||
}); | ||
} | ||
await config?.after?.({ project }); | ||
@@ -181,12 +196,6 @@ | ||
async #transpile(project: Project, progress: Progress, format: "esm" | "cjs") { | ||
const fmt = format.toUpperCase(); | ||
await progress.run( | ||
`Transpile ${progress.emphasize(project.pkg.isLibrary ? "library" : "app")} to ${colors.bold(fmt)}`, | ||
() => project.buildSource(format), | ||
); | ||
async #transpile(project: Project, format: "esm" | "cjs") { | ||
await project.buildSource(format); | ||
if (project.pkg.hasTests) { | ||
await progress.run(`Transpile ${progress.emphasize("tests")} to ${colors.bold(fmt)}`, () => | ||
project.buildTests(format), | ||
); | ||
await project.buildTests(format); | ||
} | ||
@@ -193,0 +202,0 @@ } |
@@ -7,4 +7,3 @@ /** | ||
import yargs from "yargs"; | ||
import { hideBin } from "yargs/helpers"; | ||
import { commander } from "../util/commander.js"; | ||
import { Builder, Target } from "./builder.js"; | ||
@@ -23,2 +22,9 @@ import { Graph } from "./graph.js"; | ||
interface Args { | ||
prefix: string; | ||
clean?: boolean; | ||
workspaces?: boolean; | ||
dependencies?: boolean; | ||
} | ||
export async function main(argv = process.argv) { | ||
@@ -28,18 +34,59 @@ const targets = Array<Target>(); | ||
const args = await yargs(hideBin(argv)) | ||
.usage("Builds packages adhering to matter.js standards.") | ||
.option("prefix", { alias: "p", default: ".", type: "string", describe: "specify build directory" }) | ||
.option("clean", { alias: "c", default: false, type: "boolean", describe: "clean before build" }) | ||
.option("workspaces", { alias: "w", default: false, type: "boolean", describe: "build all workspace packages" }) | ||
.option("dependencies", { alias: "d", default: false, type: "boolean", describe: "build dependencies" }) | ||
.command("*", "build types and both JS files", () => {}) | ||
.command("clean", "remove build and dist directories", () => targets.push(Target.clean)) | ||
.command("types", "build type definitions", () => targets.push(Target.types)) | ||
.command("esm", "build JS (ES6 modules)", () => targets.push(Target.esm)) | ||
.command("cjs", "build JS (CommonJS modules)", () => targets.push(Target.cjs)) | ||
.command("graph", "display the workspace graph", () => (mode = Mode.DisplayGraph)) | ||
.command("tsconfigs", "sync all tsconfigs with package.json", () => (mode = Mode.SyncTsconfigs)) | ||
.wrap(Math.min(process.stdout.columns, 80)) | ||
.strict().argv; | ||
const program = commander("matter-build", "Builds packages adhering to matter.js standards.") | ||
.option("-p, --prefix <path>", "specify build directory", ".") | ||
.option("-c, --clean", "clean before build", false) | ||
.option("-w, --workspaces", "build all workspace packages", false) | ||
.option("-d, --dependencies", "build dependencies", false); | ||
program | ||
.command("build") | ||
.description("(default) build JS and type definitions") | ||
.action(() => {}); | ||
program | ||
.command("clean") | ||
.description("remove build and dist directories") | ||
.action(() => { | ||
targets.push(Target.clean); | ||
}); | ||
program | ||
.command("types") | ||
.description("build type definitions") | ||
.action(() => { | ||
targets.push(Target.types); | ||
}); | ||
program | ||
.command("esm") | ||
.description("build JS (ES6 modules)") | ||
.action(() => { | ||
targets.push(Target.esm); | ||
}); | ||
program | ||
.command("cjs") | ||
.description("build JS (CommonJS modules)") | ||
.action(() => { | ||
targets.push(Target.cjs); | ||
}); | ||
program | ||
.command("graph") | ||
.description("display the workspace graph") | ||
.action(() => { | ||
mode = Mode.DisplayGraph; | ||
}); | ||
program | ||
.command("tsconfigs") | ||
.description("sync all tsconfigs with package.json") | ||
.action(() => { | ||
mode = Mode.SyncTsconfigs; | ||
}); | ||
program.action(() => {}); | ||
const args = program.parse(argv).opts<Args>(); | ||
if (mode === Mode.BuildProject) { | ||
@@ -46,0 +93,0 @@ if (args.workspaces) { |
@@ -7,3 +7,2 @@ /** | ||
import mapWorkspaces from "@npmcli/map-workspaces"; | ||
import colors from "ansi-colors"; | ||
@@ -178,3 +177,3 @@ import { JsonNotFoundError, Package } from "../util/package.js"; | ||
static async #loadNodes(workspace: Package) { | ||
const workspaces = await mapWorkspaces({ pkg: workspace.json, cwd: workspace.path }); | ||
const workspaces = workspace.json.workspaces; | ||
@@ -184,3 +183,3 @@ const nodeMap = {} as Record<string, Graph.Node>; | ||
for (const path of workspaces.values()) { | ||
const pkg = new Package({ path: path }); | ||
const pkg = new Package({ path: workspace.resolve(path) }); | ||
allDeps[pkg.json.name] = pkg.dependencies; | ||
@@ -187,0 +186,0 @@ nodeMap[pkg.json.name] = { |
@@ -10,3 +10,2 @@ /** | ||
import { cp, mkdir, readFile, rm, symlink, writeFile } from "fs/promises"; | ||
import { glob } from "glob"; | ||
import { platform } from "os"; | ||
@@ -49,3 +48,5 @@ import { dirname, join } from "path"; | ||
if (!this.pkg.hasSrc) { | ||
throw new Error(`Found package ${this.pkg.json.name} but no src directory is present`); | ||
throw new Error( | ||
`Found package ${this.pkg.json.name} but src directory is not present or not referenced in tsconfig.json`, | ||
); | ||
} | ||
@@ -165,3 +166,6 @@ } | ||
for (const format of formats) { | ||
await cp(this.pkg.resolve(source), this.pkg.resolve(join("dist", format, dest))); | ||
await cp(this.pkg.resolve(source), this.pkg.resolve(join("dist", format, dest)), { | ||
recursive: true, | ||
force: true, | ||
}); | ||
} | ||
@@ -225,8 +229,8 @@ } | ||
async #targetsOf(indir: string, outdir: string, ...extensions: string[]) { | ||
indir = this.pkg.resolve(indir).replace(/\\/g, "/"); | ||
const inputPrefixLength = this.pkg.resolve(indir).length + 1; | ||
outdir = this.pkg.resolve(outdir).replace(/\\/g, "/"); | ||
return (await glob(extensions.map(ext => `${indir}/**/*.${ext}`))).map(file => ({ | ||
return (await this.pkg.glob(extensions.map(ext => `${indir}/**/*.${ext}`))).map(file => ({ | ||
in: file, | ||
out: `${outdir}/${file.slice(indir.length + 1)}`, | ||
out: `${outdir}/${file.slice(inputPrefixLength)}`, | ||
})); | ||
@@ -233,0 +237,0 @@ } |
@@ -59,3 +59,6 @@ /** | ||
const deps = node.dependencies.map(dep => dep.pkg.resolve("src")).filter(p => !p.match(/packages[\\/]tools/)); | ||
const deps = node.dependencies | ||
.filter(dep => dep.pkg.isLibrary) | ||
.map(dep => dep.pkg.resolve("src")) | ||
.filter(p => !p.match(/packages[\\/]tools/)); | ||
@@ -62,0 +65,0 @@ const desired = [...new Set([...deps, ...extraRefs])]; |
@@ -7,10 +7,8 @@ /** | ||
import "./testing/global-declarations.js"; | ||
export * from "./building/builder.js"; | ||
export * from "./building/graph.js"; | ||
export * from "./building/project.js"; | ||
export * from "./testing/chip.js"; | ||
export * from "./testing/mocharc.cjs"; | ||
export * from "./util/docker.js"; | ||
export * from "./util/commander.js"; | ||
export * from "./util/files.js"; | ||
export * from "./util/package.js"; | ||
export * from "./util/progress.js"; | ||
export * from "./util/wtf.js"; |
@@ -10,3 +10,2 @@ { | ||
"**/*.ts", | ||
"testing/mocharc.cjs", | ||
"util/tools-path.d.cts" | ||
@@ -13,0 +12,0 @@ ], |
@@ -7,3 +7,5 @@ /** | ||
export * from "./commander.js"; | ||
export * from "./errors.js"; | ||
export * from "./files.js"; | ||
export * from "./package.js"; |
@@ -9,6 +9,5 @@ /** | ||
import { readdir, readFile, stat, writeFile } from "fs/promises"; | ||
import { glob } from "glob"; | ||
import { dirname, join, relative, resolve } from "path"; | ||
import { maybeStatSync } from "../testing/files.js"; | ||
import { ignoreError, ignoreErrorSync } from "./errors.js"; | ||
import { globSync, maybeReadJsonSync, maybeStatSync } from "./files.js"; | ||
import { Progress } from "./progress.js"; | ||
@@ -76,2 +75,12 @@ import { toolsPath } from "./tools-path.cjs"; | ||
const refs = maybeReadJsonSync(this.resolve("tsconfig.json"))?.references as undefined | { path: string }[]; | ||
if (refs !== undefined) { | ||
if (!refs.find(ref => this.resolve(ref.path) === this.resolve("src"))) { | ||
this.hasSrc = false; | ||
} | ||
if (!refs.find(ref => this.resolve(ref.path) === this.resolve("test"))) { | ||
this.hasTests = false; | ||
} | ||
} | ||
this.isLibrary = !!(this.json.main || this.json.module || this.json.exports); | ||
@@ -94,4 +103,4 @@ | ||
resolve(path: string) { | ||
return resolve(this.path, path); | ||
resolve(...paths: string[]) { | ||
return resolve(this.path, ...paths); | ||
} | ||
@@ -103,7 +112,12 @@ | ||
async glob(pattern: string) { | ||
async glob(pattern: string | string[]) { | ||
// Glob only understands forward-slash as separator because reasons | ||
pattern = this.resolve(pattern).replace(/\\/g, "/"); | ||
if (typeof pattern === "string") { | ||
pattern = this.resolve(pattern).replace(/\\/g, "/"); | ||
} else { | ||
pattern = pattern.map(s => this.resolve(s).replace(/\\/g, "/")); | ||
} | ||
return await glob(pattern); | ||
// Current glob implementation isn't actually async as this is faster and we only walk small directory trees | ||
return globSync(pattern); | ||
} | ||
@@ -210,12 +224,6 @@ | ||
resolveImport(name: string, type: "cjs" | "esm" = "esm") { | ||
const segments = name.split("/"); | ||
let subdir = segments.shift() as string; | ||
if (subdir.startsWith("@") && segments.length) { | ||
subdir = `${subdir}/${segments.shift()}`; | ||
} | ||
findPackage(name: string) { | ||
let resolveIn = this.path; | ||
while (true) { | ||
if (isDirectory(resolve(resolveIn, "node_modules", subdir))) { | ||
if (isDirectory(resolve(resolveIn, "node_modules", name))) { | ||
break; | ||
@@ -225,3 +233,3 @@ } | ||
if (nextResolveIn === resolveIn) { | ||
throw new Error(`Cannot find module ${subdir} from ${this.path}`); | ||
throw new Error(`Cannot find module ${name} from ${this.path}`); | ||
} | ||
@@ -231,3 +239,14 @@ resolveIn = nextResolveIn; | ||
const pkg = Package.forPath(resolve(resolveIn, "node_modules", subdir)); | ||
return Package.forPath(resolve(resolveIn, "node_modules", name)); | ||
} | ||
resolveImport(name: string, type: "cjs" | "esm" = "esm") { | ||
const segments = name.split("/"); | ||
let packageName = segments.shift() as string; | ||
if (packageName.startsWith("@") && segments.length) { | ||
packageName = `${packageName}/${segments.shift()}`; | ||
} | ||
const pkg = this.findPackage(packageName); | ||
return pkg.resolveExport(segments.length ? segments.join("/") : ".", type); | ||
@@ -269,4 +288,4 @@ } | ||
(e as Error).message = `Error parsing "${this.resolve(path)}": ${(e as Error).message}`; | ||
throw e; | ||
} | ||
return JSON.parse(await this.readFile(path)); | ||
} | ||
@@ -273,0 +292,0 @@ |
@@ -7,4 +7,3 @@ /** | ||
import yargs from "yargs"; | ||
import { hideBin } from "yargs/helpers"; | ||
import { commander } from "../util/commander.js"; | ||
import { Package } from "../util/package.js"; | ||
@@ -14,13 +13,23 @@ import { Progress } from "../util/progress.js"; | ||
interface Args { | ||
version?: string; | ||
prefix?: string; | ||
set?: boolean; | ||
apply?: boolean; | ||
tag?: boolean; | ||
} | ||
export async function main(argv = process.argv) { | ||
const args = await yargs(hideBin(argv)) | ||
.command("$0 [ver]", "Manipulate monorepo package versions.") | ||
.option("prefix", { alias: "p", default: ".", type: "string", describe: "specify monorepo directory" }) | ||
.option("set", { alias: "s", type: "boolean", describe: "Sets the release version" }) | ||
.option("apply", { alias: "a", type: "boolean", describe: "Sets package versions to the release version" }) | ||
.option("tag", { alias: "t", type: "boolean", describe: "Adds git tag for release version" }) | ||
.wrap(Math.min(process.stdout.columns, 80)) | ||
.strict().argv; | ||
const program = commander("matter-version", "Manipulate monorepo package versions.") | ||
.argument("[version]") | ||
.option("-p, --prefix <prefix>", "specify monorepo directory") | ||
.option("-s, --set", "sets the release version") | ||
.option("-a, --apply", "sets package versions to the release version") | ||
.option("-t, --tag", "adds git tag for release version") | ||
.parse(argv); | ||
const version = args.ver as string | undefined; | ||
const args = program.opts<Args>(); | ||
args.version = program.args[0]; | ||
const version = args.version; | ||
const pkg = new Package({ path: args.prefix }); | ||
@@ -27,0 +36,0 @@ const versioner = new Versioner(pkg, version); |
{ | ||
"compilerOptions": { "composite": true }, | ||
"files": [], | ||
"references": [{ "path": "src" }, { "path": "test" }] | ||
"references": [{ "path": "src" }] | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
6
3
25
5
560344
213
8500
59
+ Addedcommander@^12.1.0
+ Addedminimatch@^9.0.5
+ Addedcommander@12.1.0(transitive)
- Removed@npmcli/map-workspaces@^4.0.1
- Removed@types/express@^4.17.21
- Removedchai@^4.4.1
- Removedchai-as-promised@^7.1.2
- Removeddockerode@^4.0.2
- Removedexpress@^4.19.2
- Removedglob@^10.4.5
- Removedmocha@^10.7.3
- Removedplaywright@^1.48.1
- Removedtrace-unhandled@^2.0.1
- Removedwtfnode@^0.9.3
- Removedyargs@^17.7.2
- Removed@balena/dockerignore@1.0.2(transitive)
- Removed@gar/promisify@1.1.3(transitive)
- Removed@grpc/grpc-js@1.12.5(transitive)
- Removed@grpc/proto-loader@0.7.13(transitive)
- Removed@isaacs/cliui@8.0.2(transitive)
- Removed@js-sdsl/ordered-map@4.4.2(transitive)
- Removed@npmcli/fs@2.1.2(transitive)
- Removed@npmcli/git@6.0.1(transitive)
- Removed@npmcli/map-workspaces@4.0.2(transitive)
- Removed@npmcli/move-file@2.0.1(transitive)
- Removed@npmcli/name-from-folder@3.0.0(transitive)
- Removed@npmcli/package-json@6.1.1(transitive)
- Removed@npmcli/promise-spawn@8.0.2(transitive)
- Removed@pkgjs/parseargs@0.11.0(transitive)
- Removed@protobufjs/aspromise@1.1.2(transitive)
- Removed@protobufjs/base64@1.1.2(transitive)
- Removed@protobufjs/codegen@2.0.4(transitive)
- Removed@protobufjs/eventemitter@1.1.0(transitive)
- Removed@protobufjs/fetch@1.1.0(transitive)
- Removed@protobufjs/float@1.0.2(transitive)
- Removed@protobufjs/inquire@1.1.0(transitive)
- Removed@protobufjs/path@1.1.2(transitive)
- Removed@protobufjs/pool@1.1.0(transitive)
- Removed@protobufjs/utf8@1.1.0(transitive)
- Removed@tootallnate/once@2.0.0(transitive)
- Removed@types/body-parser@1.19.5(transitive)
- Removed@types/connect@3.4.38(transitive)
- Removed@types/express@4.17.21(transitive)
- Removed@types/express-serve-static-core@4.19.6(transitive)
- Removed@types/http-errors@2.0.4(transitive)
- Removed@types/mime@1.3.5(transitive)
- Removed@types/node@22.10.10(transitive)
- Removed@types/qs@6.9.18(transitive)
- Removed@types/range-parser@1.2.7(transitive)
- Removed@types/send@0.17.4(transitive)
- Removed@types/serve-static@1.15.7(transitive)
- Removed@xprofiler/node-pre-gyp@1.0.11(transitive)
- Removedabbrev@1.1.1(transitive)
- Removedaccepts@1.3.8(transitive)
- Removedagent-base@6.0.2(transitive)
- Removedagentkeepalive@4.6.0(transitive)
- Removedaggregate-error@3.1.0(transitive)
- Removedansi-regex@5.0.16.1.0(transitive)
- Removedansi-styles@4.3.06.2.1(transitive)
- Removedanymatch@3.1.3(transitive)
- Removedaproba@2.0.0(transitive)
- Removedare-we-there-yet@2.0.03.0.1(transitive)
- Removedargparse@2.0.1(transitive)
- Removedarray-flatten@1.1.1(transitive)
- Removedasn1@0.2.6(transitive)
- Removedassertion-error@1.1.0(transitive)
- Removedbase64-js@1.5.1(transitive)
- Removedbcrypt-pbkdf@1.0.2(transitive)
- Removedbinary-extensions@2.3.0(transitive)
- Removedbl@4.1.0(transitive)
- Removedbody-parser@1.20.3(transitive)
- Removedbrace-expansion@1.1.11(transitive)
- Removedbraces@3.0.3(transitive)
- Removedbrowser-stdout@1.3.1(transitive)
- Removedbuffer@5.7.1(transitive)
- Removedbuildcheck@0.0.6(transitive)
- Removedbytes@3.1.2(transitive)
- Removedcacache@16.1.3(transitive)
- Removedcall-bind-apply-helpers@1.0.1(transitive)
- Removedcall-bound@1.0.3(transitive)
- Removedcamelcase@6.3.0(transitive)
- Removedchai@4.5.0(transitive)
- Removedchai-as-promised@7.1.2(transitive)
- Removedchalk@4.1.2(transitive)
- Removedcheck-error@1.0.3(transitive)
- Removedchokidar@3.6.0(transitive)
- Removedchownr@1.1.42.0.0(transitive)
- Removedclean-stack@2.2.0(transitive)
- Removedcliui@7.0.48.0.1(transitive)
- Removedcolor-convert@2.0.1(transitive)
- Removedcolor-name@1.1.4(transitive)
- Removedcolor-support@1.1.3(transitive)
- Removedconcat-map@0.0.1(transitive)
- Removedconsole-control-strings@1.1.0(transitive)
- Removedcontent-disposition@0.5.4(transitive)
- Removedcontent-type@1.0.5(transitive)
- Removedcookie@0.7.1(transitive)
- Removedcookie-signature@1.0.6(transitive)
- Removedcpu-features@0.0.10(transitive)
- Removedcross-spawn@7.0.6(transitive)
- Removeddebug@2.6.94.4.0(transitive)
- Removeddecamelize@4.0.0(transitive)
- Removeddeep-eql@4.1.4(transitive)
- Removeddelegates@1.0.0(transitive)
- Removeddepd@2.0.0(transitive)
- Removeddestroy@1.2.0(transitive)
- Removeddetect-libc@1.0.3(transitive)
- Removeddiff@5.2.0(transitive)
- Removeddocker-modem@5.0.6(transitive)
- Removeddockerode@4.0.4(transitive)
- Removeddunder-proto@1.0.1(transitive)
- Removedeastasianwidth@0.2.0(transitive)
- Removedee-first@1.1.1(transitive)
- Removedemoji-regex@8.0.09.2.2(transitive)
- Removedencodeurl@1.0.22.0.0(transitive)
- Removedencoding@0.1.13(transitive)
- Removedend-of-stream@1.4.4(transitive)
- Removedenv-paths@2.2.1(transitive)
- Removederr-code@2.0.3(transitive)
- Removedes-define-property@1.0.1(transitive)
- Removedes-errors@1.3.0(transitive)
- Removedes-object-atoms@1.1.1(transitive)
- Removedescalade@3.2.0(transitive)
- Removedescape-html@1.0.3(transitive)
- Removedescape-string-regexp@4.0.0(transitive)
- Removedetag@1.8.1(transitive)
- Removedexpress@4.21.2(transitive)
- Removedfill-range@7.1.1(transitive)
- Removedfinalhandler@1.3.1(transitive)
- Removedfind-up@5.0.0(transitive)
- Removedflat@5.0.2(transitive)
- Removedforeground-child@2.0.03.3.0(transitive)
- Removedforwarded@0.2.0(transitive)
- Removedfresh@0.5.2(transitive)
- Removedfs-constants@1.0.0(transitive)
- Removedfs-minipass@2.1.0(transitive)
- Removedfs.realpath@1.0.0(transitive)
- Removedfsevents@2.3.22.3.3(transitive)
- Removedfunction-bind@1.1.2(transitive)
- Removedgauge@3.0.24.0.4(transitive)
- Removedget-caller-file@2.0.5(transitive)
- Removedget-func-name@2.0.2(transitive)
- Removedget-intrinsic@1.2.7(transitive)
- Removedget-proto@1.0.1(transitive)
- Removedglob@10.4.57.2.38.1.0(transitive)
- Removedglob-parent@5.1.2(transitive)
- Removedgopd@1.2.0(transitive)
- Removedgraceful-fs@4.2.11(transitive)
- Removedhas-flag@4.0.0(transitive)
- Removedhas-symbols@1.1.0(transitive)
- Removedhas-unicode@2.0.1(transitive)
- Removedhasown@2.0.2(transitive)
- Removedhaxec@2.0.1(transitive)
- Removedhe@1.2.0(transitive)
- Removedhosted-git-info@8.0.2(transitive)
- Removedhttp-cache-semantics@4.1.1(transitive)
- Removedhttp-errors@2.0.0(transitive)
- Removedhttp-proxy-agent@5.0.0(transitive)
- Removedhttps-proxy-agent@5.0.1(transitive)
- Removedhumanize-ms@1.2.1(transitive)
- Removediconv-lite@0.4.240.6.3(transitive)
- Removedieee754@1.2.1(transitive)
- Removedimurmurhash@0.1.4(transitive)
- Removedindent-string@4.0.0(transitive)
- Removedinfer-owner@1.0.4(transitive)
- Removedinflight@1.0.6(transitive)
- Removedinherits@2.0.4(transitive)
- Removedini@5.0.0(transitive)
- Removedip-address@9.0.5(transitive)
- Removedipaddr.js@1.9.1(transitive)
- Removedis-binary-path@2.1.0(transitive)
- Removedis-extglob@2.1.1(transitive)
- Removedis-fullwidth-code-point@3.0.0(transitive)
- Removedis-glob@4.0.3(transitive)
- Removedis-lambda@1.0.1(transitive)
- Removedis-number@7.0.0(transitive)
- Removedis-plain-obj@2.1.0(transitive)
- Removedis-unicode-supported@0.1.0(transitive)
- Removedis-windows@1.0.2(transitive)
- Removedisexe@2.0.03.1.1(transitive)
- Removedjackspeak@3.4.3(transitive)
- Removedjs-yaml@4.1.0(transitive)
- Removedjsbn@1.1.0(transitive)
- Removedjson-parse-even-better-errors@4.0.0(transitive)
- Removedlocate-path@6.0.0(transitive)
- Removedlodash.camelcase@4.3.0(transitive)
- Removedlog-symbols@4.1.0(transitive)
- Removedlong@5.2.4(transitive)
- Removedloupe@2.3.7(transitive)
- Removedlru-cache@10.4.37.18.3(transitive)
- Removedmake-dir@3.1.0(transitive)
- Removedmake-fetch-happen@10.2.1(transitive)
- Removedmath-intrinsics@1.1.0(transitive)
- Removedmedia-typer@0.3.0(transitive)
- Removedmerge-descriptors@1.0.3(transitive)
- Removedmethods@1.1.2(transitive)
- Removedmime@1.6.0(transitive)
- Removedmime-db@1.52.0(transitive)
- Removedmime-types@2.1.35(transitive)
- Removedminimatch@3.1.25.1.6(transitive)
- Removedminipass@3.3.65.0.07.1.2(transitive)
- Removedminipass-collect@1.0.2(transitive)
- Removedminipass-fetch@2.1.2(transitive)
- Removedminipass-flush@1.0.5(transitive)
- Removedminipass-pipeline@1.2.4(transitive)
- Removedminipass-sized@1.0.3(transitive)
- Removedminizlib@2.1.2(transitive)
- Removedmkdirp@1.0.4(transitive)
- Removedmkdirp-classic@0.5.3(transitive)
- Removedmocha@10.8.2(transitive)
- Removedms@2.0.02.1.3(transitive)
- Removednan@2.22.0(transitive)
- Removednegotiator@0.6.3(transitive)
- Removednode-fetch@2.7.0(transitive)
- Removednode-gyp@9.3.1(transitive)
- Removednopt@5.0.06.0.0(transitive)
- Removednormalize-path@3.0.0(transitive)
- Removednpm-install-checks@7.1.1(transitive)
- Removednpm-normalize-package-bin@4.0.0(transitive)
- Removednpm-package-arg@12.0.1(transitive)
- Removednpm-pick-manifest@10.0.0(transitive)
- Removednpmlog@5.0.16.0.2(transitive)
- Removedobject-assign@4.1.1(transitive)
- Removedobject-inspect@1.13.3(transitive)
- Removedon-finished@2.4.1(transitive)
- Removedonce@1.4.0(transitive)
- Removedp-limit@3.1.0(transitive)
- Removedp-locate@5.0.0(transitive)
- Removedp-map@4.0.0(transitive)
- Removedpackage-json-from-dist@1.0.1(transitive)
- Removedparseurl@1.3.3(transitive)
- Removedpath-exists@4.0.0(transitive)
- Removedpath-is-absolute@1.0.1(transitive)
- Removedpath-key@3.1.1(transitive)
- Removedpath-scurry@1.11.1(transitive)
- Removedpath-to-regexp@0.1.12(transitive)
- Removedpathval@1.1.1(transitive)
- Removedpicomatch@2.3.1(transitive)
- Removedplaywright@1.50.0(transitive)
- Removedplaywright-core@1.50.0(transitive)
- Removedproc-log@5.0.0(transitive)
- Removedpromise-inflight@1.0.1(transitive)
- Removedpromise-retry@2.0.1(transitive)
- Removedprotobufjs@7.4.0(transitive)
- Removedproxy-addr@2.0.7(transitive)
- Removedpump@3.0.2(transitive)
- Removedqs@6.13.0(transitive)
- Removedrandombytes@2.1.0(transitive)
- Removedrange-parser@1.2.1(transitive)
- Removedraw-body@2.5.2(transitive)
- Removedreadable-stream@3.6.2(transitive)
- Removedreaddirp@3.6.0(transitive)
- Removedrequire-directory@2.1.1(transitive)
- Removedretry@0.12.0(transitive)
- Removedrimraf@3.0.2(transitive)
- Removedsafe-buffer@5.2.1(transitive)
- Removedsafer-buffer@2.1.2(transitive)
- Removedsemver@6.3.17.6.3(transitive)
- Removedsend@0.19.0(transitive)
- Removedserialize-javascript@6.0.2(transitive)
- Removedserve-static@1.16.2(transitive)
- Removedset-blocking@2.0.0(transitive)
- Removedsetprototypeof@1.2.0(transitive)
- Removedshebang-command@2.0.0(transitive)
- Removedshebang-regex@3.0.0(transitive)
- Removedside-channel@1.1.0(transitive)
- Removedside-channel-list@1.0.0(transitive)
- Removedside-channel-map@1.0.1(transitive)
- Removedside-channel-weakmap@1.0.2(transitive)
- Removedsignal-exit@3.0.74.1.0(transitive)
- Removedsmart-buffer@4.2.0(transitive)
- Removedsocks@2.8.3(transitive)
- Removedsocks-proxy-agent@7.0.0(transitive)
- Removedspawn-wrap@2.0.0(transitive)
- Removedspdx-correct@3.2.0(transitive)
- Removedspdx-exceptions@2.5.0(transitive)
- Removedspdx-expression-parse@3.0.1(transitive)
- Removedspdx-license-ids@3.0.21(transitive)
- Removedsplit-ca@1.0.1(transitive)
- Removedsprintf-js@1.1.3(transitive)
- Removedssh2@1.16.0(transitive)
- Removedssri@9.0.1(transitive)
- Removedstatuses@2.0.1(transitive)
- Removedstring-width@4.2.35.1.2(transitive)
- Removedstring_decoder@1.3.0(transitive)
- Removedstrip-ansi@6.0.17.1.0(transitive)
- Removedstrip-json-comments@3.1.1(transitive)
- Removedsupports-color@7.2.08.1.1(transitive)
- Removedtar@6.2.1(transitive)
- Removedtar-fs@2.0.1(transitive)
- Removedtar-stream@2.2.0(transitive)
- Removedto-regex-range@5.0.1(transitive)
- Removedtoidentifier@1.0.1(transitive)
- Removedtr46@0.0.3(transitive)
- Removedtrace-unhandled@2.0.1(transitive)
- Removedtweetnacl@0.14.5(transitive)
- Removedtype-detect@4.1.0(transitive)
- Removedtype-is@1.6.18(transitive)
- Removedundici-types@6.20.0(transitive)
- Removedunique-filename@2.0.1(transitive)
- Removedunique-slug@3.0.0(transitive)
- Removedunpipe@1.0.0(transitive)
- Removedutil-deprecate@1.0.2(transitive)
- Removedutils-merge@1.0.1(transitive)
- Removeduuid@10.0.0(transitive)
- Removedv8-profiler-next@1.10.0(transitive)
- Removedvalidate-npm-package-license@3.0.4(transitive)
- Removedvalidate-npm-package-name@6.0.0(transitive)
- Removedvary@1.1.2(transitive)
- Removedwebidl-conversions@3.0.1(transitive)
- Removedwhatwg-url@5.0.0(transitive)
- Removedwhich@2.0.25.0.0(transitive)
- Removedwide-align@1.1.5(transitive)
- Removedworkerpool@6.5.1(transitive)
- Removedwrap-ansi@7.0.08.1.0(transitive)
- Removedwrappy@1.0.2(transitive)
- Removedwtfnode@0.9.4(transitive)
- Removedy18n@5.0.8(transitive)
- Removedyallist@4.0.0(transitive)
- Removedyargs@16.2.017.7.2(transitive)
- Removedyargs-parser@20.2.921.1.1(transitive)
- Removedyargs-unparser@2.0.0(transitive)
- Removedyocto-queue@0.1.0(transitive)