storybook
Version:
Storybook: Develop, document, and test UI components in isolation
22,549 lines • 1.2 MB
JavaScript
import CJS_COMPAT_NODE_URL_mtlvjn99jzq from 'node:url';
import CJS_COMPAT_NODE_PATH_mtlvjn99jzq from 'node:path';
import CJS_COMPAT_NODE_MODULE_mtlvjn99jzq from "node:module";
var __filename = CJS_COMPAT_NODE_URL_mtlvjn99jzq.fileURLToPath(import.meta.url);
var __dirname = CJS_COMPAT_NODE_PATH_mtlvjn99jzq.dirname(__filename);
var require = CJS_COMPAT_NODE_MODULE_mtlvjn99jzq.createRequire(import.meta.url);
// ------------------------------------------------------------
// end of CJS compatibility banner, injected by Storybook's esbuild configuration
// ------------------------------------------------------------
import {
require_picomatch,
toPath,
traversePathUp
} from "./chunk-CYY4OJME.js";
import {
versions_default
} from "./chunk-LGFSK2YH.js";
import {
logger
} from "./chunk-UUJMCNKX.js";
import {
BUN_LOCKFILE,
BUN_LOCKFILE_BINARY,
NPM_LOCKFILE,
PNPM_LOCKFILE,
YARN_LOCKFILE,
findFilesUp,
getProjectRoot,
normalizeStoryPath
} from "./chunk-D6ZWRSJD.js";
import {
any,
detectIndent,
from,
invariant,
stripJsonComments,
up,
up2
} from "./chunk-TVIZSSZ5.js";
import {
importModule,
resolveModulePath,
resolvePackageDir,
safeResolveModule
} from "./chunk-JGHKZTLJ.js";
import {
jsModuleExtensions,
storybookConfigExtensions
} from "./chunk-PWDNJ5SQ.js";
import {
require_dist
} from "./chunk-X57LZZTY.js";
import {
require_picocolors
} from "./chunk-Z7YDYOPD.js";
import {
join,
parse,
resolve
} from "./chunk-XQXO4MLK.js";
import {
slash
} from "./chunk-3GZLQLJL.js";
import {
glob,
globSync
} from "./chunk-YLFBDO77.js";
import {
__commonJS,
__esm,
__export,
__require,
__toCommonJS,
__toESM
} from "./chunk-BSXWL7AQ.js";
// ../../node_modules/isexe/windows.js
var require_windows = __commonJS({
"../../node_modules/isexe/windows.js"(exports, module) {
module.exports = isexe;
isexe.sync = sync;
var fs = __require("fs");
function checkPathExt(path5, options) {
var pathext = options.pathExt !== void 0 ? options.pathExt : process.env.PATHEXT;
if (!pathext || (pathext = pathext.split(";"), pathext.indexOf("") !== -1))
return !0;
for (var i2 = 0; i2 < pathext.length; i2++) {
var p = pathext[i2].toLowerCase();
if (p && path5.substr(-p.length).toLowerCase() === p)
return !0;
}
return !1;
}
function checkStat(stat, path5, options) {
return !stat.isSymbolicLink() && !stat.isFile() ? !1 : checkPathExt(path5, options);
}
function isexe(path5, options, cb) {
fs.stat(path5, function(er, stat) {
cb(er, er ? !1 : checkStat(stat, path5, options));
});
}
function sync(path5, options) {
return checkStat(fs.statSync(path5), path5, options);
}
}
});
// ../../node_modules/isexe/mode.js
var require_mode = __commonJS({
"../../node_modules/isexe/mode.js"(exports, module) {
module.exports = isexe;
isexe.sync = sync;
var fs = __require("fs");
function isexe(path5, options, cb) {
fs.stat(path5, function(er, stat) {
cb(er, er ? !1 : checkStat(stat, options));
});
}
function sync(path5, options) {
return checkStat(fs.statSync(path5), options);
}
function checkStat(stat, options) {
return stat.isFile() && checkMode(stat, options);
}
function checkMode(stat, options) {
var mod = stat.mode, uid = stat.uid, gid = stat.gid, myUid = options.uid !== void 0 ? options.uid : process.getuid && process.getuid(), myGid = options.gid !== void 0 ? options.gid : process.getgid && process.getgid(), u2 = parseInt("100", 8), g = parseInt("010", 8), o2 = parseInt("001", 8), ug = u2 | g, ret = mod & o2 || mod & g && gid === myGid || mod & u2 && uid === myUid || mod & ug && myUid === 0;
return ret;
}
}
});
// ../../node_modules/isexe/index.js
var require_isexe = __commonJS({
"../../node_modules/isexe/index.js"(exports, module) {
var fs = __require("fs"), core;
process.platform === "win32" || global.TESTING_WINDOWS ? core = require_windows() : core = require_mode();
module.exports = isexe;
isexe.sync = sync;
function isexe(path5, options, cb) {
if (typeof options == "function" && (cb = options, options = {}), !cb) {
if (typeof Promise != "function")
throw new TypeError("callback not provided");
return new Promise(function(resolve9, reject) {
isexe(path5, options || {}, function(er, is) {
er ? reject(er) : resolve9(is);
});
});
}
core(path5, options || {}, function(er, is) {
er && (er.code === "EACCES" || options && options.ignoreErrors) && (er = null, is = !1), cb(er, is);
});
}
function sync(path5, options) {
try {
return core.sync(path5, options || {});
} catch (er) {
if (options && options.ignoreErrors || er.code === "EACCES")
return !1;
throw er;
}
}
}
});
// ../../node_modules/which/which.js
var require_which = __commonJS({
"../../node_modules/which/which.js"(exports, module) {
var isWindows = process.platform === "win32" || process.env.OSTYPE === "cygwin" || process.env.OSTYPE === "msys", path5 = __require("path"), COLON = isWindows ? ";" : ":", isexe = require_isexe(), getNotFoundError = (cmd) => Object.assign(new Error(`not found: ${cmd}`), { code: "ENOENT" }), getPathInfo = (cmd, opt) => {
let colon = opt.colon || COLON, pathEnv = cmd.match(/\//) || isWindows && cmd.match(/\\/) ? [""] : [
// windows always checks the cwd first
...isWindows ? [process.cwd()] : [],
...(opt.path || process.env.PATH || /* istanbul ignore next: very unusual */
"").split(colon)
], pathExtExe = isWindows ? opt.pathExt || process.env.PATHEXT || ".EXE;.CMD;.BAT;.COM" : "", pathExt = isWindows ? pathExtExe.split(colon) : [""];
return isWindows && cmd.indexOf(".") !== -1 && pathExt[0] !== "" && pathExt.unshift(""), {
pathEnv,
pathExt,
pathExtExe
};
}, which = (cmd, opt, cb) => {
typeof opt == "function" && (cb = opt, opt = {}), opt || (opt = {});
let { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt), found = [], step = (i2) => new Promise((resolve9, reject) => {
if (i2 === pathEnv.length)
return opt.all && found.length ? resolve9(found) : reject(getNotFoundError(cmd));
let ppRaw = pathEnv[i2], pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw, pCmd = path5.join(pathPart, cmd), p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd : pCmd;
resolve9(subStep(p, i2, 0));
}), subStep = (p, i2, ii) => new Promise((resolve9, reject) => {
if (ii === pathExt.length)
return resolve9(step(i2 + 1));
let ext = pathExt[ii];
isexe(p + ext, { pathExt: pathExtExe }, (er, is) => {
if (!er && is)
if (opt.all)
found.push(p + ext);
else
return resolve9(p + ext);
return resolve9(subStep(p, i2, ii + 1));
});
});
return cb ? step(0).then((res) => cb(null, res), cb) : step(0);
}, whichSync = (cmd, opt) => {
opt = opt || {};
let { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt), found = [];
for (let i2 = 0; i2 < pathEnv.length; i2++) {
let ppRaw = pathEnv[i2], pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw, pCmd = path5.join(pathPart, cmd), p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd : pCmd;
for (let j = 0; j < pathExt.length; j++) {
let cur = p + pathExt[j];
try {
if (isexe.sync(cur, { pathExt: pathExtExe }))
if (opt.all)
found.push(cur);
else
return cur;
} catch {
}
}
}
if (opt.all && found.length)
return found;
if (opt.nothrow)
return null;
throw getNotFoundError(cmd);
};
module.exports = which;
which.sync = whichSync;
}
});
// ../../node_modules/path-key/index.js
var require_path_key = __commonJS({
"../../node_modules/path-key/index.js"(exports, module) {
"use strict";
var pathKey2 = (options = {}) => {
let environment = options.env || process.env;
return (options.platform || process.platform) !== "win32" ? "PATH" : Object.keys(environment).reverse().find((key) => key.toUpperCase() === "PATH") || "Path";
};
module.exports = pathKey2;
module.exports.default = pathKey2;
}
});
// ../../node_modules/cross-spawn/lib/util/resolveCommand.js
var require_resolveCommand = __commonJS({
"../../node_modules/cross-spawn/lib/util/resolveCommand.js"(exports, module) {
"use strict";
var path5 = __require("path"), which = require_which(), getPathKey = require_path_key();
function resolveCommandAttempt(parsed, withoutPathExt) {
let env2 = parsed.options.env || process.env, cwd = process.cwd(), hasCustomCwd = parsed.options.cwd != null, shouldSwitchCwd = hasCustomCwd && process.chdir !== void 0 && !process.chdir.disabled;
if (shouldSwitchCwd)
try {
process.chdir(parsed.options.cwd);
} catch {
}
let resolved;
try {
resolved = which.sync(parsed.command, {
path: env2[getPathKey({ env: env2 })],
pathExt: withoutPathExt ? path5.delimiter : void 0
});
} catch {
} finally {
shouldSwitchCwd && process.chdir(cwd);
}
return resolved && (resolved = path5.resolve(hasCustomCwd ? parsed.options.cwd : "", resolved)), resolved;
}
function resolveCommand2(parsed) {
return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, !0);
}
module.exports = resolveCommand2;
}
});
// ../../node_modules/cross-spawn/lib/util/escape.js
var require_escape = __commonJS({
"../../node_modules/cross-spawn/lib/util/escape.js"(exports, module) {
"use strict";
var metaCharsRegExp = /([()\][%!^"`<>&|;, *?])/g;
function escapeCommand(arg) {
return arg = arg.replace(metaCharsRegExp, "^$1"), arg;
}
function escapeArgument(arg, doubleEscapeMetaChars) {
return arg = `${arg}`, arg = arg.replace(/(?=(\\+?)?)\1"/g, '$1$1\\"'), arg = arg.replace(/(?=(\\+?)?)\1$/, "$1$1"), arg = `"${arg}"`, arg = arg.replace(metaCharsRegExp, "^$1"), doubleEscapeMetaChars && (arg = arg.replace(metaCharsRegExp, "^$1")), arg;
}
module.exports.command = escapeCommand;
module.exports.argument = escapeArgument;
}
});
// ../../node_modules/shebang-regex/index.js
var require_shebang_regex = __commonJS({
"../../node_modules/shebang-regex/index.js"(exports, module) {
"use strict";
module.exports = /^#!(.*)/;
}
});
// ../../node_modules/shebang-command/index.js
var require_shebang_command = __commonJS({
"../../node_modules/shebang-command/index.js"(exports, module) {
"use strict";
var shebangRegex = require_shebang_regex();
module.exports = (string = "") => {
let match = string.match(shebangRegex);
if (!match)
return null;
let [path5, argument] = match[0].replace(/#! ?/, "").split(" "), binary = path5.split("/").pop();
return binary === "env" ? argument : argument ? `${binary} ${argument}` : binary;
};
}
});
// ../../node_modules/cross-spawn/lib/util/readShebang.js
var require_readShebang = __commonJS({
"../../node_modules/cross-spawn/lib/util/readShebang.js"(exports, module) {
"use strict";
var fs = __require("fs"), shebangCommand = require_shebang_command();
function readShebang(command) {
let buffer = Buffer.alloc(150), fd;
try {
fd = fs.openSync(command, "r"), fs.readSync(fd, buffer, 0, 150, 0), fs.closeSync(fd);
} catch {
}
return shebangCommand(buffer.toString());
}
module.exports = readShebang;
}
});
// ../../node_modules/cross-spawn/lib/parse.js
var require_parse = __commonJS({
"../../node_modules/cross-spawn/lib/parse.js"(exports, module) {
"use strict";
var path5 = __require("path"), resolveCommand2 = require_resolveCommand(), escape = require_escape(), readShebang = require_readShebang(), isWin = process.platform === "win32", isExecutableRegExp = /\.(?:com|exe)$/i, isCmdShimRegExp = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;
function detectShebang(parsed) {
parsed.file = resolveCommand2(parsed);
let shebang = parsed.file && readShebang(parsed.file);
return shebang ? (parsed.args.unshift(parsed.file), parsed.command = shebang, resolveCommand2(parsed)) : parsed.file;
}
function parseNonShell(parsed) {
if (!isWin)
return parsed;
let commandFile = detectShebang(parsed), needsShell = !isExecutableRegExp.test(commandFile);
if (parsed.options.forceShell || needsShell) {
let needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile);
parsed.command = path5.normalize(parsed.command), parsed.command = escape.command(parsed.command), parsed.args = parsed.args.map((arg) => escape.argument(arg, needsDoubleEscapeMetaChars));
let shellCommand = [parsed.command].concat(parsed.args).join(" ");
parsed.args = ["/d", "/s", "/c", `"${shellCommand}"`], parsed.command = process.env.comspec || "cmd.exe", parsed.options.windowsVerbatimArguments = !0;
}
return parsed;
}
function parse4(command, args, options) {
args && !Array.isArray(args) && (options = args, args = null), args = args ? args.slice(0) : [], options = Object.assign({}, options);
let parsed = {
command,
args,
options,
file: void 0,
original: {
command,
args
}
};
return options.shell ? parsed : parseNonShell(parsed);
}
module.exports = parse4;
}
});
// ../../node_modules/cross-spawn/lib/enoent.js
var require_enoent = __commonJS({
"../../node_modules/cross-spawn/lib/enoent.js"(exports, module) {
"use strict";
var isWin = process.platform === "win32";
function notFoundError(original, syscall) {
return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), {
code: "ENOENT",
errno: "ENOENT",
syscall: `${syscall} ${original.command}`,
path: original.command,
spawnargs: original.args
});
}
function hookChildProcess(cp, parsed) {
if (!isWin)
return;
let originalEmit = cp.emit;
cp.emit = function(name, arg1) {
if (name === "exit") {
let err = verifyENOENT(arg1, parsed);
if (err)
return originalEmit.call(cp, "error", err);
}
return originalEmit.apply(cp, arguments);
};
}
function verifyENOENT(status, parsed) {
return isWin && status === 1 && !parsed.file ? notFoundError(parsed.original, "spawn") : null;
}
function verifyENOENTSync(status, parsed) {
return isWin && status === 1 && !parsed.file ? notFoundError(parsed.original, "spawnSync") : null;
}
module.exports = {
hookChildProcess,
verifyENOENT,
verifyENOENTSync,
notFoundError
};
}
});
// ../../node_modules/cross-spawn/index.js
var require_cross_spawn = __commonJS({
"../../node_modules/cross-spawn/index.js"(exports, module) {
"use strict";
var cp = __require("child_process"), parse4 = require_parse(), enoent = require_enoent();
function spawn2(command, args, options) {
let parsed = parse4(command, args, options), spawned = cp.spawn(parsed.command, parsed.args, parsed.options);
return enoent.hookChildProcess(spawned, parsed), spawned;
}
function spawnSync2(command, args, options) {
let parsed = parse4(command, args, options), result = cp.spawnSync(parsed.command, parsed.args, parsed.options);
return result.error = result.error || enoent.verifyENOENTSync(result.status, parsed), result;
}
module.exports = spawn2;
module.exports.spawn = spawn2;
module.exports.sync = spawnSync2;
module.exports._parse = parse4;
module.exports._enoent = enoent;
}
});
// ../../node_modules/yaml/dist/nodes/identity.js
var require_identity = __commonJS({
"../../node_modules/yaml/dist/nodes/identity.js"(exports) {
"use strict";
var ALIAS = /* @__PURE__ */ Symbol.for("yaml.alias"), DOC = /* @__PURE__ */ Symbol.for("yaml.document"), MAP = /* @__PURE__ */ Symbol.for("yaml.map"), PAIR = /* @__PURE__ */ Symbol.for("yaml.pair"), SCALAR = /* @__PURE__ */ Symbol.for("yaml.scalar"), SEQ = /* @__PURE__ */ Symbol.for("yaml.seq"), NODE_TYPE = /* @__PURE__ */ Symbol.for("yaml.node.type"), isAlias = (node) => !!node && typeof node == "object" && node[NODE_TYPE] === ALIAS, isDocument = (node) => !!node && typeof node == "object" && node[NODE_TYPE] === DOC, isMap = (node) => !!node && typeof node == "object" && node[NODE_TYPE] === MAP, isPair = (node) => !!node && typeof node == "object" && node[NODE_TYPE] === PAIR, isScalar = (node) => !!node && typeof node == "object" && node[NODE_TYPE] === SCALAR, isSeq = (node) => !!node && typeof node == "object" && node[NODE_TYPE] === SEQ;
function isCollection(node) {
if (node && typeof node == "object")
switch (node[NODE_TYPE]) {
case MAP:
case SEQ:
return !0;
}
return !1;
}
function isNode(node) {
if (node && typeof node == "object")
switch (node[NODE_TYPE]) {
case ALIAS:
case MAP:
case SCALAR:
case SEQ:
return !0;
}
return !1;
}
var hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;
exports.ALIAS = ALIAS;
exports.DOC = DOC;
exports.MAP = MAP;
exports.NODE_TYPE = NODE_TYPE;
exports.PAIR = PAIR;
exports.SCALAR = SCALAR;
exports.SEQ = SEQ;
exports.hasAnchor = hasAnchor;
exports.isAlias = isAlias;
exports.isCollection = isCollection;
exports.isDocument = isDocument;
exports.isMap = isMap;
exports.isNode = isNode;
exports.isPair = isPair;
exports.isScalar = isScalar;
exports.isSeq = isSeq;
}
});
// ../../node_modules/yaml/dist/visit.js
var require_visit = __commonJS({
"../../node_modules/yaml/dist/visit.js"(exports) {
"use strict";
var identity3 = require_identity(), BREAK = /* @__PURE__ */ Symbol("break visit"), SKIP = /* @__PURE__ */ Symbol("skip children"), REMOVE = /* @__PURE__ */ Symbol("remove node");
function visit(node, visitor) {
let visitor_ = initVisitor(visitor);
identity3.isDocument(node) ? visit_(null, node.contents, visitor_, Object.freeze([node])) === REMOVE && (node.contents = null) : visit_(null, node, visitor_, Object.freeze([]));
}
visit.BREAK = BREAK;
visit.SKIP = SKIP;
visit.REMOVE = REMOVE;
function visit_(key, node, visitor, path5) {
let ctrl = callVisitor(key, node, visitor, path5);
if (identity3.isNode(ctrl) || identity3.isPair(ctrl))
return replaceNode(key, path5, ctrl), visit_(key, ctrl, visitor, path5);
if (typeof ctrl != "symbol") {
if (identity3.isCollection(node)) {
path5 = Object.freeze(path5.concat(node));
for (let i2 = 0; i2 < node.items.length; ++i2) {
let ci = visit_(i2, node.items[i2], visitor, path5);
if (typeof ci == "number")
i2 = ci - 1;
else {
if (ci === BREAK)
return BREAK;
ci === REMOVE && (node.items.splice(i2, 1), i2 -= 1);
}
}
} else if (identity3.isPair(node)) {
path5 = Object.freeze(path5.concat(node));
let ck = visit_("key", node.key, visitor, path5);
if (ck === BREAK)
return BREAK;
ck === REMOVE && (node.key = null);
let cv = visit_("value", node.value, visitor, path5);
if (cv === BREAK)
return BREAK;
cv === REMOVE && (node.value = null);
}
}
return ctrl;
}
async function visitAsync(node, visitor) {
let visitor_ = initVisitor(visitor);
identity3.isDocument(node) ? await visitAsync_(null, node.contents, visitor_, Object.freeze([node])) === REMOVE && (node.contents = null) : await visitAsync_(null, node, visitor_, Object.freeze([]));
}
visitAsync.BREAK = BREAK;
visitAsync.SKIP = SKIP;
visitAsync.REMOVE = REMOVE;
async function visitAsync_(key, node, visitor, path5) {
let ctrl = await callVisitor(key, node, visitor, path5);
if (identity3.isNode(ctrl) || identity3.isPair(ctrl))
return replaceNode(key, path5, ctrl), visitAsync_(key, ctrl, visitor, path5);
if (typeof ctrl != "symbol") {
if (identity3.isCollection(node)) {
path5 = Object.freeze(path5.concat(node));
for (let i2 = 0; i2 < node.items.length; ++i2) {
let ci = await visitAsync_(i2, node.items[i2], visitor, path5);
if (typeof ci == "number")
i2 = ci - 1;
else {
if (ci === BREAK)
return BREAK;
ci === REMOVE && (node.items.splice(i2, 1), i2 -= 1);
}
}
} else if (identity3.isPair(node)) {
path5 = Object.freeze(path5.concat(node));
let ck = await visitAsync_("key", node.key, visitor, path5);
if (ck === BREAK)
return BREAK;
ck === REMOVE && (node.key = null);
let cv = await visitAsync_("value", node.value, visitor, path5);
if (cv === BREAK)
return BREAK;
cv === REMOVE && (node.value = null);
}
}
return ctrl;
}
function initVisitor(visitor) {
return typeof visitor == "object" && (visitor.Collection || visitor.Node || visitor.Value) ? Object.assign({
Alias: visitor.Node,
Map: visitor.Node,
Scalar: visitor.Node,
Seq: visitor.Node
}, visitor.Value && {
Map: visitor.Value,
Scalar: visitor.Value,
Seq: visitor.Value
}, visitor.Collection && {
Map: visitor.Collection,
Seq: visitor.Collection
}, visitor) : visitor;
}
function callVisitor(key, node, visitor, path5) {
if (typeof visitor == "function")
return visitor(key, node, path5);
if (identity3.isMap(node))
return visitor.Map?.(key, node, path5);
if (identity3.isSeq(node))
return visitor.Seq?.(key, node, path5);
if (identity3.isPair(node))
return visitor.Pair?.(key, node, path5);
if (identity3.isScalar(node))
return visitor.Scalar?.(key, node, path5);
if (identity3.isAlias(node))
return visitor.Alias?.(key, node, path5);
}
function replaceNode(key, path5, node) {
let parent = path5[path5.length - 1];
if (identity3.isCollection(parent))
parent.items[key] = node;
else if (identity3.isPair(parent))
key === "key" ? parent.key = node : parent.value = node;
else if (identity3.isDocument(parent))
parent.contents = node;
else {
let pt = identity3.isAlias(parent) ? "alias" : "scalar";
throw new Error(`Cannot replace node with ${pt} parent`);
}
}
exports.visit = visit;
exports.visitAsync = visitAsync;
}
});
// ../../node_modules/yaml/dist/doc/directives.js
var require_directives = __commonJS({
"../../node_modules/yaml/dist/doc/directives.js"(exports) {
"use strict";
var identity3 = require_identity(), visit = require_visit(), escapeChars = {
"!": "%21",
",": "%2C",
"[": "%5B",
"]": "%5D",
"{": "%7B",
"}": "%7D"
}, escapeTagName = (tn) => tn.replace(/[!,[\]{}]/g, (ch) => escapeChars[ch]), Directives = class _Directives {
constructor(yaml, tags) {
this.docStart = null, this.docEnd = !1, this.yaml = Object.assign({}, _Directives.defaultYaml, yaml), this.tags = Object.assign({}, _Directives.defaultTags, tags);
}
clone() {
let copy = new _Directives(this.yaml, this.tags);
return copy.docStart = this.docStart, copy;
}
/**
* During parsing, get a Directives instance for the current document and
* update the stream state according to the current version's spec.
*/
atDocument() {
let res = new _Directives(this.yaml, this.tags);
switch (this.yaml.version) {
case "1.1":
this.atNextDocument = !0;
break;
case "1.2":
this.atNextDocument = !1, this.yaml = {
explicit: _Directives.defaultYaml.explicit,
version: "1.2"
}, this.tags = Object.assign({}, _Directives.defaultTags);
break;
}
return res;
}
/**
* @param onError - May be called even if the action was successful
* @returns `true` on success
*/
add(line, onError) {
this.atNextDocument && (this.yaml = { explicit: _Directives.defaultYaml.explicit, version: "1.1" }, this.tags = Object.assign({}, _Directives.defaultTags), this.atNextDocument = !1);
let parts = line.trim().split(/[ \t]+/), name = parts.shift();
switch (name) {
case "%TAG": {
if (parts.length !== 2 && (onError(0, "%TAG directive should contain exactly two parts"), parts.length < 2))
return !1;
let [handle, prefix] = parts;
return this.tags[handle] = prefix, !0;
}
case "%YAML": {
if (this.yaml.explicit = !0, parts.length !== 1)
return onError(0, "%YAML directive should contain exactly one part"), !1;
let [version] = parts;
if (version === "1.1" || version === "1.2")
return this.yaml.version = version, !0;
{
let isValid = /^\d+\.\d+$/.test(version);
return onError(6, `Unsupported YAML version ${version}`, isValid), !1;
}
}
default:
return onError(0, `Unknown directive ${name}`, !0), !1;
}
}
/**
* Resolves a tag, matching handles to those defined in %TAG directives.
*
* @returns Resolved tag, which may also be the non-specific tag `'!'` or a
* `'!local'` tag, or `null` if unresolvable.
*/
tagName(source, onError) {
if (source === "!")
return "!";
if (source[0] !== "!")
return onError(`Not a valid tag: ${source}`), null;
if (source[1] === "<") {
let verbatim = source.slice(2, -1);
return verbatim === "!" || verbatim === "!!" ? (onError(`Verbatim tags aren't resolved, so ${source} is invalid.`), null) : (source[source.length - 1] !== ">" && onError("Verbatim tags must end with a >"), verbatim);
}
let [, handle, suffix] = source.match(/^(.*!)([^!]*)$/s);
suffix || onError(`The ${source} tag has no suffix`);
let prefix = this.tags[handle];
if (prefix)
try {
return prefix + decodeURIComponent(suffix);
} catch (error) {
return onError(String(error)), null;
}
return handle === "!" ? source : (onError(`Could not resolve tag: ${source}`), null);
}
/**
* Given a fully resolved tag, returns its printable string form,
* taking into account current tag prefixes and defaults.
*/
tagString(tag) {
for (let [handle, prefix] of Object.entries(this.tags))
if (tag.startsWith(prefix))
return handle + escapeTagName(tag.substring(prefix.length));
return tag[0] === "!" ? tag : `!<${tag}>`;
}
toString(doc) {
let lines = this.yaml.explicit ? [`%YAML ${this.yaml.version || "1.2"}`] : [], tagEntries = Object.entries(this.tags), tagNames;
if (doc && tagEntries.length > 0 && identity3.isNode(doc.contents)) {
let tags = {};
visit.visit(doc.contents, (_key, node) => {
identity3.isNode(node) && node.tag && (tags[node.tag] = !0);
}), tagNames = Object.keys(tags);
} else
tagNames = [];
for (let [handle, prefix] of tagEntries)
handle === "!!" && prefix === "tag:yaml.org,2002:" || (!doc || tagNames.some((tn) => tn.startsWith(prefix))) && lines.push(`%TAG ${handle} ${prefix}`);
return lines.join(`
`);
}
};
Directives.defaultYaml = { explicit: !1, version: "1.2" };
Directives.defaultTags = { "!!": "tag:yaml.org,2002:" };
exports.Directives = Directives;
}
});
// ../../node_modules/yaml/dist/doc/anchors.js
var require_anchors = __commonJS({
"../../node_modules/yaml/dist/doc/anchors.js"(exports) {
"use strict";
var identity3 = require_identity(), visit = require_visit();
function anchorIsValid(anchor) {
if (/[\x00-\x19\s,[\]{}]/.test(anchor)) {
let msg = `Anchor must not contain whitespace or control characters: ${JSON.stringify(anchor)}`;
throw new Error(msg);
}
return !0;
}
function anchorNames(root) {
let anchors = /* @__PURE__ */ new Set();
return visit.visit(root, {
Value(_key, node) {
node.anchor && anchors.add(node.anchor);
}
}), anchors;
}
function findNewAnchor(prefix, exclude) {
for (let i2 = 1; ; ++i2) {
let name = `${prefix}${i2}`;
if (!exclude.has(name))
return name;
}
}
function createNodeAnchors(doc, prefix) {
let aliasObjects = [], sourceObjects = /* @__PURE__ */ new Map(), prevAnchors = null;
return {
onAnchor: (source) => {
aliasObjects.push(source), prevAnchors ?? (prevAnchors = anchorNames(doc));
let anchor = findNewAnchor(prefix, prevAnchors);
return prevAnchors.add(anchor), anchor;
},
/**
* With circular references, the source node is only resolved after all
* of its child nodes are. This is why anchors are set only after all of
* the nodes have been created.
*/
setAnchors: () => {
for (let source of aliasObjects) {
let ref = sourceObjects.get(source);
if (typeof ref == "object" && ref.anchor && (identity3.isScalar(ref.node) || identity3.isCollection(ref.node)))
ref.node.anchor = ref.anchor;
else {
let error = new Error("Failed to resolve repeated object (this should not happen)");
throw error.source = source, error;
}
}
},
sourceObjects
};
}
exports.anchorIsValid = anchorIsValid;
exports.anchorNames = anchorNames;
exports.createNodeAnchors = createNodeAnchors;
exports.findNewAnchor = findNewAnchor;
}
});
// ../../node_modules/yaml/dist/doc/applyReviver.js
var require_applyReviver = __commonJS({
"../../node_modules/yaml/dist/doc/applyReviver.js"(exports) {
"use strict";
function applyReviver(reviver, obj, key, val) {
if (val && typeof val == "object")
if (Array.isArray(val))
for (let i2 = 0, len = val.length; i2 < len; ++i2) {
let v0 = val[i2], v1 = applyReviver(reviver, val, String(i2), v0);
v1 === void 0 ? delete val[i2] : v1 !== v0 && (val[i2] = v1);
}
else if (val instanceof Map)
for (let k of Array.from(val.keys())) {
let v0 = val.get(k), v1 = applyReviver(reviver, val, k, v0);
v1 === void 0 ? val.delete(k) : v1 !== v0 && val.set(k, v1);
}
else if (val instanceof Set)
for (let v0 of Array.from(val)) {
let v1 = applyReviver(reviver, val, v0, v0);
v1 === void 0 ? val.delete(v0) : v1 !== v0 && (val.delete(v0), val.add(v1));
}
else
for (let [k, v0] of Object.entries(val)) {
let v1 = applyReviver(reviver, val, k, v0);
v1 === void 0 ? delete val[k] : v1 !== v0 && (val[k] = v1);
}
return reviver.call(obj, key, val);
}
exports.applyReviver = applyReviver;
}
});
// ../../node_modules/yaml/dist/nodes/toJS.js
var require_toJS = __commonJS({
"../../node_modules/yaml/dist/nodes/toJS.js"(exports) {
"use strict";
var identity3 = require_identity();
function toJS(value, arg, ctx) {
if (Array.isArray(value))
return value.map((v, i2) => toJS(v, String(i2), ctx));
if (value && typeof value.toJSON == "function") {
if (!ctx || !identity3.hasAnchor(value))
return value.toJSON(arg, ctx);
let data = { aliasCount: 0, count: 1, res: void 0 };
ctx.anchors.set(value, data), ctx.onCreate = (res2) => {
data.res = res2, delete ctx.onCreate;
};
let res = value.toJSON(arg, ctx);
return ctx.onCreate && ctx.onCreate(res), res;
}
return typeof value == "bigint" && !ctx?.keep ? Number(value) : value;
}
exports.toJS = toJS;
}
});
// ../../node_modules/yaml/dist/nodes/Node.js
var require_Node = __commonJS({
"../../node_modules/yaml/dist/nodes/Node.js"(exports) {
"use strict";
var applyReviver = require_applyReviver(), identity3 = require_identity(), toJS = require_toJS(), NodeBase = class {
constructor(type) {
Object.defineProperty(this, identity3.NODE_TYPE, { value: type });
}
/** Create a copy of this node. */
clone() {
let copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));
return this.range && (copy.range = this.range.slice()), copy;
}
/** A plain JavaScript representation of this node. */
toJS(doc, { mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {
if (!identity3.isDocument(doc))
throw new TypeError("A document argument is required");
let ctx = {
anchors: /* @__PURE__ */ new Map(),
doc,
keep: !0,
mapAsMap: mapAsMap === !0,
mapKeyWarned: !1,
maxAliasCount: typeof maxAliasCount == "number" ? maxAliasCount : 100
}, res = toJS.toJS(this, "", ctx);
if (typeof onAnchor == "function")
for (let { count: count2, res: res2 } of ctx.anchors.values())
onAnchor(res2, count2);
return typeof reviver == "function" ? applyReviver.applyReviver(reviver, { "": res }, "", res) : res;
}
};
exports.NodeBase = NodeBase;
}
});
// ../../node_modules/yaml/dist/nodes/Alias.js
var require_Alias = __commonJS({
"../../node_modules/yaml/dist/nodes/Alias.js"(exports) {
"use strict";
var anchors = require_anchors(), visit = require_visit(), identity3 = require_identity(), Node = require_Node(), toJS = require_toJS(), Alias = class extends Node.NodeBase {
constructor(source) {
super(identity3.ALIAS), this.source = source, Object.defineProperty(this, "tag", {
set() {
throw new Error("Alias nodes cannot have tags");
}
});
}
/**
* Resolve the value of this alias within `doc`, finding the last
* instance of the `source` anchor before this node.
*/
resolve(doc, ctx) {
let nodes;
ctx?.aliasResolveCache ? nodes = ctx.aliasResolveCache : (nodes = [], visit.visit(doc, {
Node: (_key, node) => {
(identity3.isAlias(node) || identity3.hasAnchor(node)) && nodes.push(node);
}
}), ctx && (ctx.aliasResolveCache = nodes));
let found;
for (let node of nodes) {
if (node === this)
break;
node.anchor === this.source && (found = node);
}
return found;
}
toJSON(_arg, ctx) {
if (!ctx)
return { source: this.source };
let { anchors: anchors2, doc, maxAliasCount } = ctx, source = this.resolve(doc, ctx);
if (!source) {
let msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;
throw new ReferenceError(msg);
}
let data = anchors2.get(source);
if (data || (toJS.toJS(source, null, ctx), data = anchors2.get(source)), data?.res === void 0) {
let msg = "This should not happen: Alias anchor was not resolved?";
throw new ReferenceError(msg);
}
if (maxAliasCount >= 0 && (data.count += 1, data.aliasCount === 0 && (data.aliasCount = getAliasCount(doc, source, anchors2)), data.count * data.aliasCount > maxAliasCount)) {
let msg = "Excessive alias count indicates a resource exhaustion attack";
throw new ReferenceError(msg);
}
return data.res;
}
toString(ctx, _onComment, _onChompKeep) {
let src = `*${this.source}`;
if (ctx) {
if (anchors.anchorIsValid(this.source), ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) {
let msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;
throw new Error(msg);
}
if (ctx.implicitKey)
return `${src} `;
}
return src;
}
};
function getAliasCount(doc, node, anchors2) {
if (identity3.isAlias(node)) {
let source = node.resolve(doc), anchor = anchors2 && source && anchors2.get(source);
return anchor ? anchor.count * anchor.aliasCount : 0;
} else if (identity3.isCollection(node)) {
let count2 = 0;
for (let item of node.items) {
let c3 = getAliasCount(doc, item, anchors2);
c3 > count2 && (count2 = c3);
}
return count2;
} else if (identity3.isPair(node)) {
let kc = getAliasCount(doc, node.key, anchors2), vc = getAliasCount(doc, node.value, anchors2);
return Math.max(kc, vc);
}
return 1;
}
exports.Alias = Alias;
}
});
// ../../node_modules/yaml/dist/nodes/Scalar.js
var require_Scalar = __commonJS({
"../../node_modules/yaml/dist/nodes/Scalar.js"(exports) {
"use strict";
var identity3 = require_identity(), Node = require_Node(), toJS = require_toJS(), isScalarValue = (value) => !value || typeof value != "function" && typeof value != "object", Scalar = class extends Node.NodeBase {
constructor(value) {
super(identity3.SCALAR), this.value = value;
}
toJSON(arg, ctx) {
return ctx?.keep ? this.value : toJS.toJS(this.value, arg, ctx);
}
toString() {
return String(this.value);
}
};
Scalar.BLOCK_FOLDED = "BLOCK_FOLDED";
Scalar.BLOCK_LITERAL = "BLOCK_LITERAL";
Scalar.PLAIN = "PLAIN";
Scalar.QUOTE_DOUBLE = "QUOTE_DOUBLE";
Scalar.QUOTE_SINGLE = "QUOTE_SINGLE";
exports.Scalar = Scalar;
exports.isScalarValue = isScalarValue;
}
});
// ../../node_modules/yaml/dist/doc/createNode.js
var require_createNode = __commonJS({
"../../node_modules/yaml/dist/doc/createNode.js"(exports) {
"use strict";
var Alias = require_Alias(), identity3 = require_identity(), Scalar = require_Scalar(), defaultTagPrefix = "tag:yaml.org,2002:";
function findTagObject(value, tagName, tags) {
if (tagName) {
let match = tags.filter((t3) => t3.tag === tagName), tagObj = match.find((t3) => !t3.format) ?? match[0];
if (!tagObj)
throw new Error(`Tag ${tagName} not found`);
return tagObj;
}
return tags.find((t3) => t3.identify?.(value) && !t3.format);
}
function createNode(value, tagName, ctx) {
if (identity3.isDocument(value) && (value = value.contents), identity3.isNode(value))
return value;
if (identity3.isPair(value)) {
let map2 = ctx.schema[identity3.MAP].createNode?.(ctx.schema, null, ctx);
return map2.items.push(value), map2;
}
(value instanceof String || value instanceof Number || value instanceof Boolean || typeof BigInt < "u" && value instanceof BigInt) && (value = value.valueOf());
let { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx, ref;
if (aliasDuplicateObjects && value && typeof value == "object") {
if (ref = sourceObjects.get(value), ref)
return ref.anchor ?? (ref.anchor = onAnchor(value)), new Alias.Alias(ref.anchor);
ref = { anchor: null, node: null }, sourceObjects.set(value, ref);
}
tagName?.startsWith("!!") && (tagName = defaultTagPrefix + tagName.slice(2));
let tagObj = findTagObject(value, tagName, schema.tags);
if (!tagObj) {
if (value && typeof value.toJSON == "function" && (value = value.toJSON()), !value || typeof value != "object") {
let node2 = new Scalar.Scalar(value);
return ref && (ref.node = node2), node2;
}
tagObj = value instanceof Map ? schema[identity3.MAP] : Symbol.iterator in Object(value) ? schema[identity3.SEQ] : schema[identity3.MAP];
}
onTagObj && (onTagObj(tagObj), delete ctx.onTagObj);
let node = tagObj?.createNode ? tagObj.createNode(ctx.schema, value, ctx) : typeof tagObj?.nodeClass?.from == "function" ? tagObj.nodeClass.from(ctx.schema, value, ctx) : new Scalar.Scalar(value);
return tagName ? node.tag = tagName : tagObj.default || (node.tag = tagObj.tag), ref && (ref.node = node), node;
}
exports.createNode = createNode;
}
});
// ../../node_modules/yaml/dist/nodes/Collection.js
var require_Collection = __commonJS({
"../../node_modules/yaml/dist/nodes/Collection.js"(exports) {
"use strict";
var createNode = require_createNode(), identity3 = require_identity(), Node = require_Node();
function collectionFromPath(schema, path5, value) {
let v = value;
for (let i2 = path5.length - 1; i2 >= 0; --i2) {
let k = path5[i2];
if (typeof k == "number" && Number.isInteger(k) && k >= 0) {
let a2 = [];
a2[k] = v, v = a2;
} else
v = /* @__PURE__ */ new Map([[k, v]]);
}
return createNode.createNode(v, void 0, {
aliasDuplicateObjects: !1,
keepUndefined: !1,
onAnchor: () => {
throw new Error("This should not happen, please report a bug.");
},
schema,
sourceObjects: /* @__PURE__ */ new Map()
});
}
var isEmptyPath = (path5) => path5 == null || typeof path5 == "object" && !!path5[Symbol.iterator]().next().done, Collection = class extends Node.NodeBase {
constructor(type, schema) {
super(type), Object.defineProperty(this, "schema", {
value: schema,
configurable: !0,
enumerable: !1,
writable: !0
});
}
/**
* Create a copy of this collection.
*
* @param schema - If defined, overwrites the original's schema
*/
clone(schema) {
let copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));
return schema && (copy.schema = schema), copy.items = copy.items.map((it) => identity3.isNode(it) || identity3.isPair(it) ? it.clone(schema) : it), this.range && (copy.range = this.range.slice()), copy;
}
/**
* Adds a value to the collection. For `!!map` and `!!omap` the value must
* be a Pair instance or a `{ key, value }` object, which may not have a key
* that already exists in the map.
*/
addIn(path5, value) {
if (isEmptyPath(path5))
this.add(value);
else {
let [key, ...rest] = path5, node = this.get(key, !0);
if (identity3.isCollection(node))
node.addIn(rest, value);
else if (node === void 0 && this.schema)
this.set(key, collectionFromPath(this.schema, rest, value));
else
throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);
}
}
/**
* Removes a value from the collection.
* @returns `true` if the item was found and removed.
*/
deleteIn(path5) {
let [key, ...rest] = path5;
if (rest.length === 0)
return this.delete(key);
let node = this.get(key, !0);
if (identity3.isCollection(node))
return node.deleteIn(rest);
throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);
}
/**
* Returns item at `key`, or `undefined` if not found. By default unwraps
* scalar values from their surrounding node; to disable set `keepScalar` to
* `true` (collections are always returned intact).
*/
getIn(path5, keepScalar) {
let [key, ...rest] = path5, node = this.get(key, !0);
return rest.length === 0 ? !keepScalar && identity3.isScalar(node) ? node.value : node : identity3.isCollection(node) ? node.getIn(rest, keepScalar) : void 0;
}
hasAllNullValues(allowScalar) {
return this.items.every((node) => {
if (!identity3.isPair(node))
return !1;
let n2 = node.value;
return n2 == null || allowScalar && identity3.isScalar(n2) && n2.value == null && !n2.commentBefore && !n2.comment && !n2.tag;
});
}
/**
* Checks if the collection includes a value with the key `key`.
*/
hasIn(path5) {
let [key, ...rest] = path5;
if (rest.length === 0)
return this.has(key);
let node = this.get(key, !0);
return identity3.isCollection(node) ? node.hasIn(rest) : !1;
}
/**
* Sets a value in this collection. For `!!set`, `value` needs to be a
* boolean to add/remove the item from the set.
*/
setIn(path5, value) {
let [key, ...rest] = path5;
if (rest.length === 0)
this.set(key, value);
else {
let node = this.get(key, !0);
if (identity3.isCollection(node))
node.setIn(rest, value);
else if (node === void 0 && this.schema)
this.set(key, collectionFromPath(this.schema, rest, value));
else
throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);
}
}
};
exports.Collection = Collection;
exports.collectionFromPath = collectionFromPath;
exports.isEmptyPath = isEmptyPath;
}
});
// ../../node_modules/yaml/dist/stringify/stringifyComment.js
var require_stringifyComment = __commonJS({
"../../node_modules/yaml/dist/stringify/stringifyComment.js"(exports) {
"use strict";
var stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, "#");
function indentComment(comment, indent) {
return /^\n+$/.test(comment) ? comment.substring(1) : indent ? comment.replace(/^(?! *$)/gm, indent) : comment;
}
var lineComment = (str, indent, comment) => str.endsWith(`
`) ? indentComment(comment, indent) : comment.includes(`
`) ? `
` + indentComment(comment, indent) : (str.endsWith(" ") ? "" : " ") + comment;
exports.indentComment = indentComment;
exports.lineComment = lineComment;
exports.stringifyComment = stringifyComment;
}
});
// ../../node_modules/yaml/dist/stringify/foldFlowLines.js
var require_foldFlowLines = __commonJS({
"../../node_modules/yaml/dist/stringify/foldFlowLines.js"(exports) {
"use strict";
var FOLD_FLOW = "flow", FOLD_BLOCK = "block", FOLD_QUOTED = "quoted";
function foldFlowLines(text, indent, mode = "flow", { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {
if (!lineWidth || lineWidth < 0)
return text;
lineWidth < minContentWidth && (minContentWidth = 0);
let endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);
if (text.length <= endStep)
return text;
let folds = [], escapedFolds = {}, end = lineWidth - indent.length;
typeof indentAtStart == "number" && (indentAtStart > lineWidth - Math.max(2, minContentWidth) ? folds.push(0) : end = lineWidth - indentAtStart);
let split, prev, overflow = !1, i2 = -1, escStart = -1, escEnd = -1;
mode === FOLD_BLOCK && (i2 = consumeMoreIndentedLines(text, i2, indent.length), i2 !== -1 && (end = i2 + endStep));
for (let ch; ch = text[i2 += 1]; ) {
if (mode === FOLD_QUOTED && ch === "\\") {
switch (escStart = i2, text[i2 + 1]) {
case "x":
i2 += 3;
break;
case "u":
i2 += 5;
break;
case "U":
i2 += 9;
break;
default:
i2 += 1;
}
escEnd = i2;
}
if (ch === `
`)
mode === FOLD_BLOCK && (i2 = consumeMoreIndentedLines(text, i2, indent.length)), end = i2 + indent.length + endStep, split = void 0;
else {
if (ch === " " && prev && prev !== " " && prev !== `
` && prev !== " ") {
let next = text[i2 + 1];
next && next !== " " && next !== `
` && next !== " " && (split = i2);
}
if (i2 >= end)
if (split)
folds.push(split), end = split + endStep, split = void 0;
else if (mode === FOLD_QUOTED) {
for (; prev === " " || prev === " "; )
prev = ch, ch = text[i2 += 1], overflow = !0;
let j = i2 > escEnd + 1 ? i2 - 2 : escStart - 1;
if (escapedFolds[j])
return text;
folds.push(j), escapedFolds[j] = !0, end = j + endStep, split = void 0;
} else
overflow = !0;
}
prev = ch;
}
if (overflow && onOverflow && onOverflow(), folds.length === 0)
return text;
onFold && onFold();
let res = text.slice(0, folds[0]);
for (let i3 = 0; i3 < folds.length; ++i3) {
let fold = folds[i3], end2 = folds[i3 + 1] || text.length;
fold === 0 ? res = `
${indent}${text.slice(0, end2)}` : (mode === FOLD_QUOTED && escapedFolds[fold] && (res += `${text[fold]}\\`), res += `
${indent}${text.slice(fold + 1, end2)}`);
}
return res;
}
function consumeMoreIndentedLines(text, i2, indent) {
let end = i2, start = i2 + 1, ch = text[start];
for (; ch === " " || ch === " "; )
if (i2 < start + indent)
ch = text[++i2];
else {
do
ch = text[++i2];
while (ch && ch !== `
`);
end = i2, start = i2 + 1, ch = text[start];
}
return end;
}
exports.FOLD_BLOCK = FOLD_BLOCK;
exports.FOLD_FLOW = FOLD_FLOW;
exports.FOLD_QUOTED = FOLD_QUOTED;
exports.foldFlowLines = foldFlowLines;
}
});
// ../../node_modules/yaml/dist/stringify/stringifyString.js
var require_stringifyString = __commonJS({
"../../node_modules/yaml/dist/stringify/stringifyString.js"(exports) {
"use strict";
var Scalar = require_Scalar(), foldFlowLines = require_foldFlowLines(), getFoldOptions = (ctx, isBlock) => ({
indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart,
lineWidth: ctx.options.lineWidth,
minContentWidth: ctx.options.minContentWidth
}), containsDocumentMarker = (str) => /^(%|---|\.\.\.)/m.test(str);
function lineLengthOverLimit(str, lineWidth, indentLength) {
if (!lineWidth || lineWidth < 0)
return !1;
let limit = lineWidth - indentLength, strLen = str.length;
if (strLen <= limit)
return !1;
for (let i2 = 0, start = 0; i2 < strLen; ++i2)
if (str[i2] === `
`) {
if (i2 - start > limit)
return !0;
if (start = i2 + 1, strLen - start <= limit)
return !1;
}
return !0;
}
function doubleQuotedString(value, ctx) {
let json = JSON.stringify(value);
if (ctx.options.doubleQuotedAsJSON)
return json;
let { implicitKey } = ctx, minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength, indent = ctx.indent || (containsDocumentMarker(value) ? " " : ""), str = "", start = 0;
for (let i2 = 0, ch = json[i2]; ch; ch = json[++i2])
if (ch === " " && json[i2 + 1] === "\\" && json[i2 + 2] === "n" && (str += json.slice(start, i2) + "\\ ", i2 += 1, start = i2, ch = "\\"), ch === "\\")
switch (json[i2 + 1]) {
case "u":
{
str += json.slice(start, i2);
let code = json.substr(i2 + 2, 4);
switch (code) {
case "0000":
str += "\\0";
break;
case "0007":
str += "\\a";
break;
case "000b":
str += "\\v";
break;
case "001b":
str += "\\e";
break;
case "0085":
str += "\\N";
break;
case "00a0":
str += "\\_";
break;
case "2028":
str += "\\L";
break;
case "2029":
str += "\\P";
break;
default:
code.substr(0, 2) === "00" ? str += "\\x" + code.substr(2) : str += json.substr(i2, 6);
}
i2 += 5, start = i2 + 1;
}
break;
case "n":
if (implicitKey || json[i2 + 2] === '"' || json.length < minMultiLineLength)
i2 += 1;
else {
for (str += json.slice(start, i2) + `
`; json[i2 + 2] === "\\" && json[i2 + 3] === "n" && json[i2 + 4] !== '"'; )
str += `
`, i2 += 2;
str += indent, json[i2 + 2] === " " && (str += "\\"), i2 += 1, start = i2 + 1;
}
break;
default:
i2 += 1;
}
return str = start ? str + json.slice(start) : json, implicitKey ? str : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_QUOTED, getFoldOptions(ctx, !1));
}
function singleQuotedString(value, ctx) {
if (ctx.options.singleQuote === !1 || ctx.implicitKey && value.includes(`
`) || /[ \t]\n|\n[ \t]/.test(value))
return doubleQuotedString(value, ctx);
let indent = ctx.indent || (containsDocumentMarker(value) ? " " : ""), res = "'" + value.replace(/'/g, "''").replace(/\n+/g, `$&
${indent}`) + "'";
return ctx.implicitKey ? res : foldFlowLines.foldFlowLines(res, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, !1));
}
function quotedString(value, ctx) {
let { singleQuote } = ctx.options, qs;
if (singleQuote === !1)
qs = doubleQuotedString;
else {
let hasDouble = value.includes('"'), hasSingle = value.includes("'");
hasDouble && !hasSingle ? qs = singleQuotedString : hasSingle && !hasDouble ? qs = doubleQuotedString : qs = singleQuote ? singleQuotedString : doubleQuotedString;
}
return qs(value, ctx);
}
var blockEndNewlines;
try {
blockEndNewlines = new RegExp(`(^|(?<!
))
+(?!
|$)`, "g");
} catch {
blockEndNewlines = /\n+(?!\n|$)/g;
}
function blockString({ comment, type, value }, ctx, onComment, onChompKeep) {
let { blockQuote, commentString, lineWidth } = ctx.options;
if (!blockQuote || /\n[\t ]+$/.test(value))
return quotedString(value, ctx);
let indent = ctx.indent || (ctx.forceBlockIndent || containsDocumentMarker(value) ? " " : ""), literal = blockQuote === "literal" ? !0 : blockQuote === "folded" || type === Scalar.Scalar.BLOCK_FOLDED ? !1 : type === Scalar.Scalar.BLOCK_LITERAL ? !0 : !lineLengthOverLimit(value, lineWidth, indent.length);
if (!value)
return literal ? `|
` : `>
`;
let chomp, endStart;
for (endStart = value.length; endStart > 0; --endStart) {
let ch = value[endStart - 1];
if (ch !== `
` && ch !== " " && ch !== " ")
break;
}
let end = value.substring(endStart), endNlPos = end.indexOf(`
`);
endNlPos === -1 ? chomp = "-" : value === end || endNlPos !== end.length - 1 ? (chomp = "+", onChompKeep && onChompKeep()) : chomp = "", end && (value = value.slice(0, -end.length), end[end.length - 1] === `
` && (end = end.slice(0, -1)), end = end.replace(blockEndNewlines, `$&${indent}`));
let startWithSpace = !1, startEnd, startNlPos = -1;
for (startEnd = 0; startEnd < value.length; ++startEnd) {
let ch = value[startEnd];
if (ch === " ")
startWithSpace = !0;
else if (ch === `
`)
startNlPos = startEnd;
else
break;
}
let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd);
start && (value = value.substring(start.length), start = start.replace(/\n+/g, `$&${indent}`));
let header = (startWithSpace ? indent ? "2" : "1" : "") + chomp;
if (comment && (header += " " + commentString(comment.replace(/ ?[\r\n]+/g, " ")), onComment && onComment()), !literal) {
let foldedValue = value.replace(/\n+/g, `
$&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g, "$1$2").replace(/\n+/g, `$&${indent}`), literalFallback = !1, foldOptions = getFoldOptions(ctx, !0);
blockQuote !== "folded" && type !== Scalar.Scalar.BLOCK_FOLDED && (foldOptions.onOverflow = () => {
literalFallback = !0;
});
let body = foldFlowLines.foldFlowLines(`${start}${foldedValue}${end}`, indent, foldFlowLines.FOLD_BLOCK, foldOptions);
if (!literalFallback)
return `>${header}
${indent}${body}`;
}
return value = value.replace(/\n+/g, `$&${indent}`), `|${header}
${indent}${start}${value}${end}`;
}
function plainString(item, ctx, onComment, onChompKeep) {
let { type, value } = item, { actualString, implicitKey, indent, indentStep, inFlow } = ctx;
if (implicitKey && value.includes(`
`) || inFlow && /[[\]{},]/.test(value))
return quotedString(value, ctx);
if (/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(value))
return implicitKey || inFlow || !value.includes(`
`) ? quotedString(value, ctx) : blockString(item, ctx, onComment, onChompKeep);
if (!implicitKey && !inFlow && type !== Scalar.Scalar.PLAIN && value.includes(`
`))
return blockString(item, ctx, onComment, onChompKeep);
if (containsDocumentMarker(value)) {
if (indent === "")
return ctx.forceBlockIndent = !0, blockString(item, ctx, onComment, onChompKeep);
if (implicitKey && indent === indentStep)
return quotedString(value, ctx);
}
let str = value.replace(/\n+/g, `$&
${indent}`);
if (actualString) {
let test = (tag) => tag.default && tag.tag !== "tag:yaml.org,2002:str" && tag.test?.test(str), { compat, tags } = ctx.doc.schema;
if (tags.some(test) || compat?.some(test))
return quotedString(value, ctx);
}
return implicitKey ? str : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, !1));
}
function stringifyString(item, ctx, onComment, onChompKeep) {
let { implicitKey, inFlow } = ctx, ss = typeof item.value == "string" ? item : Object.assign({}, item, { value: String(item.value) }), { type } = item;
type !== Scalar.Scalar.QUOTE_DOUBLE && /[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(ss.value) && (type = Scalar.Scalar.QUOTE_DOUBLE);
let _stringify = (_type) => {
switch (_type) {
case Scalar.Scalar.BLOCK_FOLDED:
case Scalar.Scalar.BLOCK_LITERAL:
return implicitKey || inFlow ? quotedString(ss.value, ctx) : blockString(ss, ctx, onComment, onChompKeep);
case Scalar.Scalar.QUOTE_DOUBLE:
return doubleQuotedString(ss.value, ctx);
case Scalar.Scalar.QUOTE_SINGLE:
return singleQuotedString(ss.value, ctx);
case Scalar.Scalar.PLAIN:
return plainString(ss, ctx, onComment, onChompKeep);
default:
return null;
}
}, res = _stringify(type);
if (res === null) {
let { defaultKeyType, defaultStringType } = ctx.options, t3 = implicitKey && defaultKeyType || defaultStringType;
if (res = _stringify(t3), res === null)
throw new Error(`Unsupported default string type ${t3}`);
}
return res;
}
exports.stringifyString = stringifyString;
}
});
// ../../node_modules/yaml/dist/stringify/stringify.js
var require_stringify = __commonJS({
"../../node_modules/yaml/dist/stringify/stringify.js"(exports) {
"use strict";
var anchors = require_anchors(), identity3 = require_identity(), stringifyComment = require_stringifyComment(), stringifyString = require_stringifyString();
function createStringifyContext(doc, options) {
let opt = Object.assign({
blockQuote: !0,
commentString: stringifyComment.stringifyComment,
defaultKeyType: null,
defaultStringType: "PLAIN",
directives: null,
doubleQuotedAsJSON: !1,
doubleQuotedMinMultiLineLength: 40,
falseStr: "false",
flowCollectionPadding: !0,
indentSeq: !0,
lineWidth: 80,
minContentWidth: 20,
nullStr: "null",
simpleKeys: !1,
singleQuote: null,
trueStr: "true",
verifyAliasOrder: !0
}, doc.schema.toStringOptions, options), inFlow;
switch (opt.collectionStyle) {
case "block":
inFlow = !1;
break;
case "flow":
inFlow = !0;
break;
default:
inFlow = null;
}
return {
anchors: /* @__PURE__ */ new Set(),
doc,
flowCollectionPadding: opt.flowCollectionPadding ? " " : "",
indent: "",
indentStep: typeof opt.indent == "number" ? " ".repeat(opt.indent) : " ",
inFlow,
options: opt
};
}
function getTagObject(tags, item) {
if (item.tag) {
let match = tags.filter((t3) => t3.tag === item.tag);
if (match.length > 0)
return match.find((t3) => t3.format === item.format) ?? match[0];
}
let tagObj, obj;
if (identity3.isScalar(item)) {
obj = item.value;
let match = tags.filter((t3) => t3.identify?.(obj));
if (match.length > 1) {
let testMatch = match.filter((t3) => t3.test);
testMatch.length > 0 && (match = testMatch);
}
tagObj = match.find((t3) => t3.format === item.format) ?? match.find((t3) => !t3.format);
} else
obj = item, tagObj = tags.find((t3) => t3.nodeClass && obj instanceof t3.nodeClass);
if (!tagObj) {
let name = obj?.constructor?.name ?? (obj === null ? "null" : typeof obj);
throw new Error(`Tag not resolved for ${name} value`);
}
return tagObj;
}
function stringifyProps(node, tagObj, { anchors: anchors$1, doc }) {
if (!doc.directives)
return "";
let props = [], anchor = (identity3.isScalar(node) || identity3.isCollection(node)) && node.anchor;
anchor && anchors.anchorIsValid(anchor) && (anchors$1.add(anchor), props.push(`&${anchor}`));
let tag = node.tag ?? (tagObj.default ? null : tagObj.tag);
return tag && props.push(doc.directives.tagString(tag)), props.join(" ");
}
function stringify(item, ctx, onComment, onChompKeep) {
if (identity3.isPair(item))
return item.toString(ctx, onComment, onChompKeep);
if (identity3.isAlias(item)) {
if (ctx.doc.directives)
return item.toString(ctx);
if (ctx.resolvedAliases?.has(item))
throw new TypeError("Cannot stringify circular structure without alias nodes");
ctx.resolvedAliases ? ctx.resolvedAliases.add(item) : ctx.resolvedAliases = /* @__PURE__ */ new Set([item]), item = item.resolve(ctx.doc);
}
let tagObj, node = identity3.isNode(item) ? item : ctx.doc.createNode(item, { onTagObj: (o2) => tagObj = o2 });
tagObj ?? (tagObj = getTagObject(ctx.doc.schema.tags, node));
let props = stringifyProps(node, tagObj, ctx);
props.length > 0 && (ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1);
let str = typeof tagObj.stringify == "function" ? tagObj.stringify(node, ctx, onComment, onChompKeep) : identity3.isScalar(node) ? stringifyString.stringifyString(node, ctx, onComment, onChompKeep) : node.toString(ctx, onComment, onChompKeep);
return props ? identity3.isScalar(node) || str[0] === "{" || str[0] === "[" ? `${props} ${str}` : `${props}
${ctx.indent}${str}` : str;
}
exports.createStringifyContext = createStringifyContext;
exports.stringify = stringify;
}
});
// ../../node_modules/yaml/dist/stringify/stringifyPair.js
var require_stringifyPair = __commonJS({
"../../node_modules/yaml/dist/stringify/stringifyPair.js"(exports) {
"use strict";
var identity3 = require_identity(), Scalar = require_Scalar(), stringify = require_stringify(), stringifyComment = require_stringifyComment();
function stringifyPair({ key, value }, ctx, onComment, onChompKeep) {
let { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx, keyComment = identity3.isNode(key) && key.comment || null;
if (simpleKeys) {
if (keyComment)
throw new Error("With simple keys, key nodes cannot have comments");
if (identity3.isCollection(key) || !identity3.isNode(key) && typeof key == "object") {
let msg = "With simple keys, collection cannot be used as a key value";
throw new Error(msg);
}
}
let explicitKey = !simpleKeys && (!key || keyComment && value == null && !ctx.inFlow || identity3.isCollection(key) || (identity3.isScalar(key) ? key.type === Scalar.Scalar.BLOCK_FOLDED || key.type === Scalar.Scalar.BLOCK_LITERAL : typeof key == "object"));
ctx = Object.assign({}, ctx, {
allNullValues: !1,
implicitKey: !explicitKey && (simpleKeys || !allNullValues),
indent: indent + indentStep
});
let keyCommentDone = !1, chompKeep = !1, str = stringify.stringify(key, ctx, () => keyCommentDone = !0, () => chompKeep = !0);
if (!explicitKey && !ctx.inFlow && str.length > 1024) {
if (simpleKeys)
throw new Error("With simple keys, single line scalar must not span more than 1024 characters");
explicitKey = !0;
}
if (ctx.inFlow) {
if (allNullValues || value == null)
return keyCommentDone && onComment && onComment(), str === "" ? "?" : explicitKey ? `? ${str}` : str;
} else if (allNullValues && !simpleKeys || value == null && explicitKey)
return str = `? ${str}`, keyComment && !keyCommentDone ? str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment)) : chompKeep && onChompKeep && onChompKeep(), str;
keyCommentDone && (keyComment = null), explicitKey ? (keyComment && (str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment))), str = `? ${str}
${indent}:`) : (str = `${str}:`, keyComment && (str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment))));
let vsb, vcb, valueComment;
identity3.isNode(value) ? (vsb = !!value.spaceBefore, vcb = value.commentBefore, valueComment = value.comment) : (vsb = !1, vcb = null, valueComment = null, value && typeof value == "object" && (value = doc.createNode(value))), ctx.implicitKey = !1, !explicitKey && !keyComment && identity3.isScalar(value) && (ctx.indentAtStart = str.length + 1), chompKeep = !1, !indentSeq && indentStep.length >= 2 && !ctx.inFlow && !explicitKey && identity3.isSeq(value) && !value.flow && !value.tag && !value.anchor && (ctx.indent = ctx.indent.substring(2));
let valueCommentDone = !1, valueStr = stringify.stringify(value, ctx, () => valueCommentDone = !0, () => chompKeep = !0), ws = " ";
if (keyComment || vsb || vcb) {
if (ws = vsb ? `
` : "", vcb) {
let cs = commentString(vcb);
ws += `
${stringifyComment.indentComment(cs, ctx.indent)}`;
}
valueStr === "" && !ctx.inFlow ? ws === `
` && valueComment && (ws = `
`) : ws += `
${ctx.indent}`;
} else if (!explicitKey && identity3.isCollection(value)) {
let vs0 = valueStr[0], nl0 = valueStr.indexOf(`
`), hasNewline = nl0 !== -1, flow = ctx.inFlow ?? value.flow ?? value.items.length === 0;
if (hasNewline || !flow) {
let hasPropsLine = !1;
if (hasNewline && (vs0 === "&" || vs0 === "!")) {
let sp0 = valueStr.indexOf(" ");
vs0 === "&" && sp0 !== -1 && sp0 < nl0 && valueStr[sp0 + 1] === "!" && (sp0 = valueStr.indexOf(" ", sp0 + 1)), (sp0 === -1 || nl0 < sp0) && (hasPropsLine = !0);
}
hasPropsLine || (ws = `
${ctx.indent}`);
}
} else (valueStr === "" || valueStr[0] === `
`) && (ws = "");
return str += ws + valueStr, ctx.inFlow ? valueCommentDone && onComment && onComment() : valueComment && !valueCommentDone ? str += stringifyComment.lineComment(str, ctx.indent, commentString(valueComment)) : chompKeep && onChompKeep && onChompKeep(), str;
}
exports.stringifyPair = stringifyPair;
}
});
// ../../node_modules/yaml/dist/log.js
var require_log = __commonJS({
"../../node_modules/yaml/dist/log.js"(exports) {
"use strict";
var node_process = __require("process");
function debug(logLevel, ...messages) {
logLevel === "debug" && console.log(...messages);
}
function warn(logLevel, warning) {
(logLevel === "debug" || logLevel === "warn") && (typeof node_process.emitWarning == "function" ? node_process.emitWarning(warning) : console.warn(warning));
}
exports.debug = debug;
exports.warn = warn;
}
});
// ../../node_modules/yaml/dist/schema/yaml-1.1/merge.js
var require_merge = __commonJS({
"../../node_modules/yaml/dist/schema/yaml-1.1/merge.js"(exports) {
"use strict";
var identity3 = require_identity(), Scalar = require_Scalar(), MERGE_KEY = "<<", merge = {
identify: (value) => value === MERGE_KEY || typeof value == "symbol" && value.description === MERGE_KEY,
default: "key",
tag: "tag:yaml.org,2002:merge",
test: /^<<$/,
resolve: () => Object.assign(new Scalar.Scalar(Symbol(MERGE_KEY)), {
addToJSMap: addMergeToJSMap
}),
stringify: () => MERGE_KEY
}, isMergeKey = (ctx, key) => (merge.identify(key) || identity3.isScalar(key) && (!key.type || key.type === Scalar.Scalar.PLAIN) && merge.identify(key.value)) && ctx?.doc.schema.tags.some((tag) => tag.tag === merge.tag && tag.default);
function addMergeToJSMap(ctx, map2, value) {
if (value = ctx && identity3.isAlias(value) ? value.resolve(ctx.doc) : value, identity3.isSeq(value))
for (let it of value.items)
mergeValue(ctx, map2, it);
else if (Array.isArray(value))
for (let it of value)
mergeValue(ctx, map2, it);
else
mergeValue(ctx, map2, value);
}
function mergeValue(ctx, map2, value) {
let source = ctx && identity3.isAlias(value) ? value.resolve(ctx.doc) : value;
if (!identity3.isMap(source))
throw new Error("Merge sources must be maps or map aliases");
let srcMap = source.toJSON(null, ctx, Map);
for (let [key, value2] of srcMap)
map2 instanceof Map ? map2.has(key) || map2.set(key, value2) : map2 instanceof Set ? map2.add(key) : Object.prototype.hasOwnProperty.call(map2, key) || Object.defineProperty(map2, key, {
value: value2,
writable: !0,
enumerable: !0,
configurable: !0
});
return map2;
}
exports.addMergeToJSMap = addMergeToJSMap;
exports.isMergeKey = isMergeKey;
exports.merge = merge;
}
});
// ../../node_modules/yaml/dist/nodes/addPairToJSMap.js
var require_addPairToJSMap = __commonJS({
"../../node_modules/yaml/dist/nodes/addPairToJSMap.js"(exports) {
"use strict";
var log = require_log(), merge = require_merge(), stringify = require_stringify(), identity3 = require_identity(), toJS = require_toJS();
function addPairToJSMap(ctx, map2, { key, value }) {
if (identity3.isNode(key) && key.addToJSMap)
key.addToJSMap(ctx, map2, value);
else if (merge.isMergeKey(ctx, key))
merge.addMergeToJSMap(ctx, map2, value);
else {
let jsKey = toJS.toJS(key, "", ctx);
if (map2 instanceof Map)
map2.set(jsKey, toJS.toJS(value, jsKey, ctx));
else if (map2 instanceof Set)
map2.add(jsKey);
else {
let stringKey = stringifyKey(key, jsKey, ctx), jsValue = toJS.toJS(value, stringKey, ctx);
stringKey in map2 ? Object.defineProperty(map2, stringKey, {
value: jsValue,
writable: !0,
enumerable: !0,
configurable: !0
}) : map2[stringKey] = jsValue;
}
}
return map2;
}
function stringifyKey(key, jsKey, ctx) {
if (jsKey === null)
return "";
if (typeof jsKey != "object")
return String(jsKey);
if (identity3.isNode(key) && ctx?.doc) {
let strCtx = stringify.createStringifyContext(ctx.doc, {});
strCtx.anchors = /* @__PURE__ */ new Set();
for (let node of ctx.anchors.keys())
strCtx.anchors.add(node.anchor);
strCtx.inFlow = !0, strCtx.inStringifyKey = !0;
let strKey = key.toString(strCtx);
if (!ctx.mapKeyWarned) {
let jsonStr = JSON.stringify(strKey);
jsonStr.length > 40 && (jsonStr = jsonStr.substring(0, 36) + '..."'), log.warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`), ctx.mapKeyWarned = !0;
}
return strKey;
}
return JSON.stringify(jsKey);
}
exports.addPairToJSMap = addPairToJSMap;
}
});
// ../../node_modules/yaml/dist/nodes/Pair.js
var require_Pair = __commonJS({
"../../node_modules/yaml/dist/nodes/Pair.js"(exports) {
"use strict";
var createNode = require_createNode(), stringifyPair = require_stringifyPair(), addPairToJSMap = require_addPairToJSMap(), identity3 = require_identity();
function createPair(key, value, ctx) {
let k = createNode.createNode(key, void 0, ctx), v = createNode.createNode(value, void 0, ctx);
return new Pair(k, v);
}
var Pair = class _Pair {
constructor(key, value = null) {
Object.defineProperty(this, identity3.NODE_TYPE, { value: identity3.PAIR }), this.key = key, this.value = value;
}
clone(schema) {
let { key, value } = this;
return identity3.isNode(key) && (key = key.clone(schema)), identity3.isNode(value) && (value = value.clone(schema)), new _Pair(key, value);
}
toJSON(_, ctx) {
let pair = ctx?.mapAsMap ? /* @__PURE__ */ new Map() : {};
return addPairToJSMap.addPairToJSMap(ctx, pair, this);
}
toString(ctx, onComment, onChompKeep) {
return ctx?.doc ? stringifyPair.stringifyPair(this, ctx, onComment, onChompKeep) : JSON.stringify(this);
}
};
exports.Pair = Pair;
exports.createPair = createPair;
}
});
// ../../node_modules/yaml/dist/stringify/stringifyCollection.js
var require_stringifyCollection = __commonJS({
"../../node_modules/yaml/dist/stringify/stringifyCollection.js"(exports) {
"use strict";
var identity3 = require_identity(), stringify = require_stringify(), stringifyComment = require_stringifyComment();
function stringifyCollection(collection, ctx, options) {
return (ctx.inFlow ?? collection.flow ? stringifyFlowCollection : stringifyBlockCollection)(collection, ctx, options);
}
function stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {
let { indent, options: { commentString } } = ctx, itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null }), chompKeep = !1, lines = [];
for (let i2 = 0; i2 < items.length; ++i2) {
let item = items[i2], comment2 = null;
if (identity3.isNode(item))
!chompKeep && item.spaceBefore && lines.push(""), addCommentBefore(ctx, lines, item.commentBefore, chompKeep), item.comment && (comment2 = item.comment);
else if (identity3.isPair(item)) {
let ik = identity3.isNode(item.key) ? item.key : null;
ik && (!chompKeep && ik.spaceBefore && lines.push(""), addCommentBefore(ctx, lines, ik.commentBefore, chompKeep));
}
chompKeep = !1;
let str2 = stringify.stringify(item, itemCtx, () => comment2 = null, () => chompKeep = !0);
comment2 && (str2 += stringifyComment.lineComment(str2, itemIndent, commentString(comment2))), chompKeep && comment2 && (chompKeep = !1), lines.push(blockItemPrefix + str2);
}
let str;
if (lines.length === 0)
str = flowChars.start + flowChars.end;
else {
str = lines[0];
for (let i2 = 1; i2 < lines.length; ++i2) {
let line = lines[i2];
str += line ? `
${indent}${line}` : `
`;
}
}
return comment ? (str += `
` + stringifyComment.indentComment(commentString(comment), indent), onComment && onComment()) : chompKeep && onChompKeep && onChompKeep(), str;
}
function stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) {
let { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx;
itemIndent += indentStep;
let itemCtx = Object.assign({}, ctx, {
indent: itemIndent,
inFlow: !0,
type: null
}), reqNewline = !1, linesAtValue = 0, lines = [];
for (let i2 = 0; i2 < items.length; ++i2) {
let item = items[i2], comment = null;
if (identity3.isNode(item))
item.spaceBefore && lines.push(""), addCommentBefore(ctx, lines, item.commentBefore, !1), item.comment && (comment = item.comment);
else if (identity3.isPair(item)) {
let ik = identity3.isNode(item.key) ? item.key : null;
ik && (ik.spaceBefore && lines.push(""), addCommentBefore(ctx, lines, ik.commentBefore, !1), ik.comment && (reqNewline = !0));
let iv = identity3.isNode(item.value) ? item.value : null;
iv ? (iv.comment && (comment = iv.comment), iv.commentBefore && (reqNewline = !0)) : item.value == null && ik?.comment && (comment = ik.comment);
}
comment && (reqNewline = !0);
let str = stringify.stringify(item, itemCtx, () => comment = null);
i2 < items.length - 1 && (str += ","), comment && (str += stringifyComment.lineComment(str, itemIndent, commentString(comment))), !reqNewline && (lines.length > linesAtValue || str.includes(`
`)) && (reqNewline = !0), lines.push(str), linesAtValue = lines.length;
}
let { start, end } = flowChars;
if (lines.length === 0)
return start + end;
if (!reqNewline) {
let len = lines.reduce((sum, line) => sum + line.length + 2, 2);
reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth;
}
if (reqNewline) {
let str = start;
for (let line of lines)
str += line ? `
${indentStep}${indent}${line}` : `
`;
return `${str}
${indent}${end}`;
} else
return `${start}${fcPadding}${lines.join(" ")}${fcPadding}${end}`;
}
function addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {
if (comment && chompKeep && (comment = comment.replace(/^\n+/, "")), comment) {
let ic = stringifyComment.indentComment(commentString(comment), indent);
lines.push(ic.trimStart());
}
}
exports.stringifyCollection = stringifyCollection;
}
});
// ../../node_modules/yaml/dist/nodes/YAMLMap.js
var require_YAMLMap = __commonJS({
"../../node_modules/yaml/dist/nodes/YAMLMap.js"(exports) {
"use strict";
var stringifyCollection = require_stringifyCollection(), addPairToJSMap = require_addPairToJSMap(), Collection = require_Collection(), identity3 = require_identity(), Pair = require_Pair(), Scalar = require_Scalar();
function findPair(items, key) {
let k = identity3.isScalar(key) ? key.value : key;
for (let it of items)
if (identity3.isPair(it) && (it.key === key || it.key === k || identity3.isScalar(it.key) && it.key.value === k))
return it;
}
var YAMLMap = class extends Collection.Collection {
static get tagName() {
return "tag:yaml.org,2002:map";
}
constructor(schema) {
super(identity3.MAP, schema), this.items = [];
}
/**
* A generic collection parsing method that can be extended
* to other node classes that inherit from YAMLMap
*/
static from(schema, obj, ctx) {
let { keepUndefined, replacer } = ctx, map2 = new this(schema), add = (key, value) => {
if (typeof replacer == "function")
value = replacer.call(obj, key, value);
else if (Array.isArray(replacer) && !replacer.includes(key))
return;
(value !== void 0 || keepUndefined) && map2.items.push(Pair.createPair(key, value, ctx));
};
if (obj instanceof Map)
for (let [key, value] of obj)
add(key, value);
else if (obj && typeof obj == "object")
for (let key of Object.keys(obj))
add(key, obj[key]);
return typeof schema.sortMapEntries == "function" && map2.items.sort(schema.sortMapEntries), map2;
}
/**
* Adds a value to the collection.
*
* @param overwrite - If not set `true`, using a key that is already in the
* collection will throw. Otherwise, overwrites the previous value.
*/
add(pair, overwrite) {
let _pair;
identity3.isPair(pair) ? _pair = pair : !pair || typeof pair != "object" || !("key" in pair) ? _pair = new Pair.Pair(pair, pair?.value) : _pair = new Pair.Pair(pair.key, pair.value);
let prev = findPair(this.items, _pair.key), sortEntries = this.schema?.sortMapEntries;
if (prev) {
if (!overwrite)
throw new Error(`Key ${_pair.key} already set`);
identity3.isScalar(prev.value) && Scalar.isScalarValue(_pair.value) ? prev.value.value = _pair.value : prev.value = _pair.value;
} else if (sortEntries) {
let i2 = this.items.findIndex((item) => sortEntries(_pair, item) < 0);
i2 === -1 ? this.items.push(_pair) : this.items.splice(i2, 0, _pair);
} else
this.items.push(_pair);
}
delete(key) {
let it = findPair(this.items, key);
return it ? this.items.splice(this.items.indexOf(it), 1).length > 0 : !1;
}
get(key, keepScalar) {
let node = findPair(this.items, key)?.value;
return (!keepScalar && identity3.isScalar(node) ? node.value : node) ?? void 0;
}
has(key) {
return !!findPair(this.items, key);
}
set(key, value) {
this.add(new Pair.Pair(key, value), !0);
}
/**
* @param ctx - Conversion context, originally set in Document#toJS()
* @param {Class} Type - If set, forces the returned collection type
* @returns Instance of Type, Map, or Object
*/
toJSON(_, ctx, Type) {
let map2 = Type ? new Type() : ctx?.mapAsMap ? /* @__PURE__ */ new Map() : {};
ctx?.onCreate && ctx.onCreate(map2);
for (let item of this.items)
addPairToJSMap.addPairToJSMap(ctx, map2, item);
return map2;
}
toString(ctx, onComment, onChompKeep) {
if (!ctx)
return JSON.stringify(this);
for (let item of this.items)
if (!identity3.isPair(item))
throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);
return !ctx.allNullValues && this.hasAllNullValues(!1) && (ctx = Object.assign({}, ctx, { allNullValues: !0 })), stringifyCollection.stringifyCollection(this, ctx, {
blockItemPrefix: "",
flowChars: { start: "{", end: "}" },
itemIndent: ctx.indent || "",
onChompKeep,
onComment
});
}
};
exports.YAMLMap = YAMLMap;
exports.findPair = findPair;
}
});
// ../../node_modules/yaml/dist/schema/common/map.js
var require_map = __commonJS({
"../../node_modules/yaml/dist/schema/common/map.js"(exports) {
"use strict";
var identity3 = require_identity(), YAMLMap = require_YAMLMap(), map2 = {
collection: "map",
default: !0,
nodeClass: YAMLMap.YAMLMap,
tag: "tag:yaml.org,2002:map",
resolve(map3, onError) {
return identity3.isMap(map3) || onError("Expected a mapping for this tag"), map3;
},
createNode: (schema, obj, ctx) => YAMLMap.YAMLMap.from(schema, obj, ctx)
};
exports.map = map2;
}
});
// ../../node_modules/yaml/dist/nodes/YAMLSeq.js
var require_YAMLSeq = __commonJS({
"../../node_modules/yaml/dist/nodes/YAMLSeq.js"(exports) {
"use strict";
var createNode = require_createNode(), stringifyCollection = require_stringifyCollection(), Collection = require_Collection(), identity3 = require_identity(), Scalar = require_Scalar(), toJS = require_toJS(), YAMLSeq = class extends Collection.Collection {
static get tagName() {
return "tag:yaml.org,2002:seq";
}
constructor(schema) {
super(identity3.SEQ, schema), this.items = [];
}
add(value) {
this.items.push(value);
}
/**
* Removes a value from the collection.
*
* `key` must contain a representation of an integer for this to succeed.
* It may be wrapped in a `Scalar`.
*
* @returns `true` if the item was found and removed.
*/
delete(key) {
let idx = asItemIndex(key);
return typeof idx != "number" ? !1 : this.items.splice(idx, 1).length > 0;
}
get(key, keepScalar) {
let idx = asItemIndex(key);
if (typeof idx != "number")
return;
let it = this.items[idx];
return !keepScalar && identity3.isScalar(it) ? it.value : it;
}
/**
* Checks if the collection includes a value with the key `key`.
*
* `key` must contain a representation of an integer for this to succeed.
* It may be wrapped in a `Scalar`.
*/
has(key) {
let idx = asItemIndex(key);
return typeof idx == "number" && idx < this.items.length;
}
/**
* Sets a value in this collection. For `!!set`, `value` needs to be a
* boolean to add/remove the item from the set.
*
* If `key` does not contain a representation of an integer, this will throw.
* It may be wrapped in a `Scalar`.
*/
set(key, value) {
let idx = asItemIndex(key);
if (typeof idx != "number")
throw new Error(`Expected a valid index, not ${key}.`);
let prev = this.items[idx];
identity3.isScalar(prev) && Scalar.isScalarValue(value) ? prev.value = value : this.items[idx] = value;
}
toJSON(_, ctx) {
let seq = [];
ctx?.onCreate && ctx.onCreate(seq);
let i2 = 0;
for (let item of this.items)
seq.push(toJS.toJS(item, String(i2++), ctx));
return seq;
}
toString(ctx, onComment, onChompKeep) {
return ctx ? stringifyCollection.stringifyCollection(this, ctx, {
blockItemPrefix: "- ",
flowChars: { start: "[", end: "]" },
itemIndent: (ctx.indent || "") + " ",
onChompKeep,
onComment
}) : JSON.stringify(this);
}
static from(schema, obj, ctx) {
let { replacer } = ctx, seq = new this(schema);
if (obj && Symbol.iterator in Object(obj)) {
let i2 = 0;
for (let it of obj) {
if (typeof replacer == "function") {
let key = obj instanceof Set ? it : String(i2++);
it = replacer.call(obj, key, it);
}
seq.items.push(createNode.createNode(it, void 0, ctx));
}
}
return seq;
}
};
function asItemIndex(key) {
let idx = identity3.isScalar(key) ? key.value : key;
return idx && typeof idx == "string" && (idx = Number(idx)), typeof idx == "number" && Number.isInteger(idx) && idx >= 0 ? idx : null;
}
exports.YAMLSeq = YAMLSeq;
}
});
// ../../node_modules/yaml/dist/schema/common/seq.js
var require_seq = __commonJS({
"../../node_modules/yaml/dist/schema/common/seq.js"(exports) {
"use strict";
var identity3 = require_identity(), YAMLSeq = require_YAMLSeq(), seq = {
collection: "seq",
default: !0,
nodeClass: YAMLSeq.YAMLSeq,
tag: "tag:yaml.org,2002:seq",
resolve(seq2, onError) {
return identity3.isSeq(seq2) || onError("Expected a sequence for this tag"), seq2;
},
createNode: (schema, obj, ctx) => YAMLSeq.YAMLSeq.from(schema, obj, ctx)
};
exports.seq = seq;
}
});
// ../../node_modules/yaml/dist/schema/common/string.js
var require_string = __commonJS({
"../../node_modules/yaml/dist/schema/common/string.js"(exports) {
"use strict";
var stringifyString = require_stringifyString(), string = {
identify: (value) => typeof value == "string",
default: !0,
tag: "tag:yaml.org,2002:str",
resolve: (str) => str,
stringify(item, ctx, onComment, onChompKeep) {
return ctx = Object.assign({ actualString: !0 }, ctx), stringifyString.stringifyString(item, ctx, onComment, onChompKeep);
}
};
exports.string = string;
}
});
// ../../node_modules/yaml/dist/schema/common/null.js
var require_null = __commonJS({
"../../node_modules/yaml/dist/schema/common/null.js"(exports) {
"use strict";
var Scalar = require_Scalar(), nullTag = {
identify: (value) => value == null,
createNode: () => new Scalar.Scalar(null),
default: !0,
tag: "tag:yaml.org,2002:null",
test: /^(?:~|[Nn]ull|NULL)?$/,
resolve: () => new Scalar.Scalar(null),
stringify: ({ source }, ctx) => typeof source == "string" && nullTag.test.test(source) ? source : ctx.options.nullStr
};
exports.nullTag = nullTag;
}
});
// ../../node_modules/yaml/dist/schema/core/bool.js
var require_bool = __commonJS({
"../../node_modules/yaml/dist/schema/core/bool.js"(exports) {
"use strict";
var Scalar = require_Scalar(), boolTag = {
identify: (value) => typeof value == "boolean",
default: !0,
tag: "tag:yaml.org,2002:bool",
test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,
resolve: (str) => new Scalar.Scalar(str[0] === "t" || str[0] === "T"),
stringify({ source, value }, ctx) {
if (source && boolTag.test.test(source)) {
let sv = source[0] === "t" || source[0] === "T";
if (value === sv)
return source;
}
return value ? ctx.options.trueStr : ctx.options.falseStr;
}
};
exports.boolTag = boolTag;
}
});
// ../../node_modules/yaml/dist/stringify/stringifyNumber.js
var require_stringifyNumber = __commonJS({
"../../node_modules/yaml/dist/stringify/stringifyNumber.js"(exports) {
"use strict";
function stringifyNumber({ format: format2, minFractionDigits, tag, value }) {
if (typeof value == "bigint")
return String(value);
let num = typeof value == "number" ? value : Number(value);
if (!isFinite(num))
return isNaN(num) ? ".nan" : num < 0 ? "-.inf" : ".inf";
let n2 = Object.is(value, -0) ? "-0" : JSON.stringify(value);
if (!format2 && minFractionDigits && (!tag || tag === "tag:yaml.org,2002:float") && /^\d/.test(n2)) {
let i2 = n2.indexOf(".");
i2 < 0 && (i2 = n2.length, n2 += ".");
let d = minFractionDigits - (n2.length - i2 - 1);
for (; d-- > 0; )
n2 += "0";
}
return n2;
}
exports.stringifyNumber = stringifyNumber;
}
});
// ../../node_modules/yaml/dist/schema/core/float.js
var require_float = __commonJS({
"../../node_modules/yaml/dist/schema/core/float.js"(exports) {
"use strict";
var Scalar = require_Scalar(), stringifyNumber = require_stringifyNumber(), floatNaN = {
identify: (value) => typeof value == "number",
default: !0,
tag: "tag:yaml.org,2002:float",
test: /^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,
resolve: (str) => str.slice(-3).toLowerCase() === "nan" ? NaN : str[0] === "-" ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY,
stringify: stringifyNumber.stringifyNumber
}, floatExp = {
identify: (value) => typeof value == "number",
default: !0,
tag: "tag:yaml.org,2002:float",
format: "EXP",
test: /^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,
resolve: (str) => parseFloat(str),
stringify(node) {
let num = Number(node.value);
return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);
}
}, float = {
identify: (value) => typeof value == "number",
default: !0,
tag: "tag:yaml.org,2002:float",
test: /^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,
resolve(str) {
let node = new Scalar.Scalar(parseFloat(str)), dot = str.indexOf(".");
return dot !== -1 && str[str.length - 1] === "0" && (node.minFractionDigits = str.length - dot - 1), node;
},
stringify: stringifyNumber.stringifyNumber
};
exports.float = float;
exports.floatExp = floatExp;
exports.floatNaN = floatNaN;
}
});
// ../../node_modules/yaml/dist/schema/core/int.js
var require_int = __commonJS({
"../../node_modules/yaml/dist/schema/core/int.js"(exports) {
"use strict";
var stringifyNumber = require_stringifyNumber(), intIdentify = (value) => typeof value == "bigint" || Number.isInteger(value), intResolve = (str, offset, radix, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix);
function intStringify(node, radix, prefix) {
let { value } = node;
return intIdentify(value) && value >= 0 ? prefix + value.toString(radix) : stringifyNumber.stringifyNumber(node);
}
var intOct = {
identify: (value) => intIdentify(value) && value >= 0,
default: !0,
tag: "tag:yaml.org,2002:int",
format: "OCT",
test: /^0o[0-7]+$/,
resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt),
stringify: (node) => intStringify(node, 8, "0o")
}, int = {
identify: intIdentify,
default: !0,
tag: "tag:yaml.org,2002:int",
test: /^[-+]?[0-9]+$/,
resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),
stringify: stringifyNumber.stringifyNumber
}, intHex = {
identify: (value) => intIdentify(value) && value >= 0,
default: !0,
tag: "tag:yaml.org,2002:int",
format: "HEX",
test: /^0x[0-9a-fA-F]+$/,
resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),
stringify: (node) => intStringify(node, 16, "0x")
};
exports.int = int;
exports.intHex = intHex;
exports.intOct = intOct;
}
});
// ../../node_modules/yaml/dist/schema/core/schema.js
var require_schema = __commonJS({
"../../node_modules/yaml/dist/schema/core/schema.js"(exports) {
"use strict";
var map2 = require_map(), _null = require_null(), seq = require_seq(), string = require_string(), bool = require_bool(), float = require_float(), int = require_int(), schema = [
map2.map,
seq.seq,
string.string,
_null.nullTag,
bool.boolTag,
int.intOct,
int.int,
int.intHex,
float.floatNaN,
float.floatExp,
float.float
];
exports.schema = schema;
}
});
// ../../node_modules/yaml/dist/schema/json/schema.js
var require_schema2 = __commonJS({
"../../node_modules/yaml/dist/schema/json/schema.js"(exports) {
"use strict";
var Scalar = require_Scalar(), map2 = require_map(), seq = require_seq();
function intIdentify(value) {
return typeof value == "bigint" || Number.isInteger(value);
}
var stringifyJSON = ({ value }) => JSON.stringify(value), jsonScalars = [
{
identify: (value) => typeof value == "string",
default: !0,
tag: "tag:yaml.org,2002:str",
resolve: (str) => str,
stringify: stringifyJSON
},
{
identify: (value) => value == null,
createNode: () => new Scalar.Scalar(null),
default: !0,
tag: "tag:yaml.org,2002:null",
test: /^null$/,
resolve: () => null,
stringify: stringifyJSON
},
{
identify: (value) => typeof value == "boolean",
default: !0,
tag: "tag:yaml.org,2002:bool",
test: /^true$|^false$/,
resolve: (str) => str === "true",
stringify: stringifyJSON
},
{
identify: intIdentify,
default: !0,
tag: "tag:yaml.org,2002:int",
test: /^-?(?:0|[1-9][0-9]*)$/,
resolve: (str, _onError, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str, 10),
stringify: ({ value }) => intIdentify(value) ? value.toString() : JSON.stringify(value)
},
{
identify: (value) => typeof value == "number",
default: !0,
tag: "tag:yaml.org,2002:float",
test: /^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,
resolve: (str) => parseFloat(str),
stringify: stringifyJSON
}
], jsonError = {
default: !0,
tag: "",
test: /^/,
resolve(str, onError) {
return onError(`Unresolved plain scalar ${JSON.stringify(str)}`), str;
}
}, schema = [map2.map, seq.seq].concat(jsonScalars, jsonError);
exports.schema = schema;
}
});
// ../../node_modules/yaml/dist/schema/yaml-1.1/binary.js
var require_binary = __commonJS({
"../../node_modules/yaml/dist/schema/yaml-1.1/binary.js"(exports) {
"use strict";
var node_buffer = __require("buffer"), Scalar = require_Scalar(), stringifyString = require_stringifyString(), binary = {
identify: (value) => value instanceof Uint8Array,
// Buffer inherits from Uint8Array
default: !1,
tag: "tag:yaml.org,2002:binary",
/**
* Returns a Buffer in node and an Uint8Array in browsers
*
* To use the resulting buffer as an image, you'll want to do something like:
*
* const blob = new Blob([buffer], { type: 'image/jpeg' })
* document.querySelector('#photo').src = URL.createObjectURL(blob)
*/
resolve(src, onError) {
if (typeof node_buffer.Buffer == "function")
return node_buffer.Buffer.from(src, "base64");
if (typeof atob == "function") {
let str = atob(src.replace(/[\n\r]/g, "")), buffer = new Uint8Array(str.length);
for (let i2 = 0; i2 < str.length; ++i2)
buffer[i2] = str.charCodeAt(i2);
return buffer;
} else
return onError("This environment does not support reading binary tags; either Buffer or atob is required"), src;
},
stringify({ comment, type, value }, ctx, onComment, onChompKeep) {
if (!value)
return "";
let buf = value, str;
if (typeof node_buffer.Buffer == "function")
str = buf instanceof node_buffer.Buffer ? buf.toString("base64") : node_buffer.Buffer.from(buf.buffer).toString("base64");
else if (typeof btoa == "function") {
let s = "";
for (let i2 = 0; i2 < buf.length; ++i2)
s += String.fromCharCode(buf[i2]);
str = btoa(s);
} else
throw new Error("This environment does not support writing binary tags; either Buffer or btoa is required");
if (type ?? (type = Scalar.Scalar.BLOCK_LITERAL), type !== Scalar.Scalar.QUOTE_DOUBLE) {
let lineWidth = Math.max(ctx.options.lineWidth - ctx.indent.length, ctx.options.minContentWidth), n2 = Math.ceil(str.length / lineWidth), lines = new Array(n2);
for (let i2 = 0, o2 = 0; i2 < n2; ++i2, o2 += lineWidth)
lines[i2] = str.substr(o2, lineWidth);
str = lines.join(type === Scalar.Scalar.BLOCK_LITERAL ? `
` : " ");
}
return stringifyString.stringifyString({ comment, type, value: str }, ctx, onComment, onChompKeep);
}
};
exports.binary = binary;
}
});
// ../../node_modules/yaml/dist/schema/yaml-1.1/pairs.js
var require_pairs = __commonJS({
"../../node_modules/yaml/dist/schema/yaml-1.1/pairs.js"(exports) {
"use strict";
var identity3 = require_identity(), Pair = require_Pair(), Scalar = require_Scalar(), YAMLSeq = require_YAMLSeq();
function resolvePairs(seq, onError) {
if (identity3.isSeq(seq))
for (let i2 = 0; i2 < seq.items.length; ++i2) {
let item = seq.items[i2];
if (!identity3.isPair(item)) {
if (identity3.isMap(item)) {
item.items.length > 1 && onError("Each pair must have its own sequence indicator");
let pair = item.items[0] || new Pair.Pair(new Scalar.Scalar(null));
if (item.commentBefore && (pair.key.commentBefore = pair.key.commentBefore ? `${item.commentBefore}
${pair.key.commentBefore}` : item.commentBefore), item.comment) {
let cn = pair.value ?? pair.key;
cn.comment = cn.comment ? `${item.comment}
${cn.comment}` : item.comment;
}
item = pair;
}
seq.items[i2] = identity3.isPair(item) ? item : new Pair.Pair(item);
}
}
else
onError("Expected a sequence for this tag");
return seq;
}
function createPairs(schema, iterable, ctx) {
let { replacer } = ctx, pairs2 = new YAMLSeq.YAMLSeq(schema);
pairs2.tag = "tag:yaml.org,2002:pairs";
let i2 = 0;
if (iterable && Symbol.iterator in Object(iterable))
for (let it of iterable) {
typeof replacer == "function" && (it = replacer.call(iterable, String(i2++), it));
let key, value;
if (Array.isArray(it))
if (it.length === 2)
key = it[0], value = it[1];
else
throw new TypeError(`Expected [key, value] tuple: ${it}`);
else if (it && it instanceof Object) {
let keys = Object.keys(it);
if (keys.length === 1)
key = keys[0], value = it[key];
else
throw new TypeError(`Expected tuple with one key, not ${keys.length} keys`);
} else
key = it;
pairs2.items.push(Pair.createPair(key, value, ctx));
}
return pairs2;
}
var pairs = {
collection: "seq",
default: !1,
tag: "tag:yaml.org,2002:pairs",
resolve: resolvePairs,
createNode: createPairs
};
exports.createPairs = createPairs;
exports.pairs = pairs;
exports.resolvePairs = resolvePairs;
}
});
// ../../node_modules/yaml/dist/schema/yaml-1.1/omap.js
var require_omap = __commonJS({
"../../node_modules/yaml/dist/schema/yaml-1.1/omap.js"(exports) {
"use strict";
var identity3 = require_identity(), toJS = require_toJS(), YAMLMap = require_YAMLMap(), YAMLSeq = require_YAMLSeq(), pairs = require_pairs(), YAMLOMap = class _YAMLOMap extends YAMLSeq.YAMLSeq {
constructor() {
super(), this.add = YAMLMap.YAMLMap.prototype.add.bind(this), this.delete = YAMLMap.YAMLMap.prototype.delete.bind(this), this.get = YAMLMap.YAMLMap.prototype.get.bind(this), this.has = YAMLMap.YAMLMap.prototype.has.bind(this), this.set = YAMLMap.YAMLMap.prototype.set.bind(this), this.tag = _YAMLOMap.tag;
}
/**
* If `ctx` is given, the return type is actually `Map<unknown, unknown>`,
* but TypeScript won't allow widening the signature of a child method.
*/
toJSON(_, ctx) {
if (!ctx)
return super.toJSON(_);
let map2 = /* @__PURE__ */ new Map();
ctx?.onCreate && ctx.onCreate(map2);
for (let pair of this.items) {
let key, value;
if (identity3.isPair(pair) ? (key = toJS.toJS(pair.key, "", ctx), value = toJS.toJS(pair.value, key, ctx)) : key = toJS.toJS(pair, "", ctx), map2.has(key))
throw new Error("Ordered maps must not include duplicate keys");
map2.set(key, value);
}
return map2;
}
static from(schema, iterable, ctx) {
let pairs$1 = pairs.createPairs(schema, iterable, ctx), omap2 = new this();
return omap2.items = pairs$1.items, omap2;
}
};
YAMLOMap.tag = "tag:yaml.org,2002:omap";
var omap = {
collection: "seq",
identify: (value) => value instanceof Map,
nodeClass: YAMLOMap,
default: !1,
tag: "tag:yaml.org,2002:omap",
resolve(seq, onError) {
let pairs$1 = pairs.resolvePairs(seq, onError), seenKeys = [];
for (let { key } of pairs$1.items)
identity3.isScalar(key) && (seenKeys.includes(key.value) ? onError(`Ordered maps must not include duplicate keys: ${key.value}`) : seenKeys.push(key.value));
return Object.assign(new YAMLOMap(), pairs$1);
},
createNode: (schema, iterable, ctx) => YAMLOMap.from(schema, iterable, ctx)
};
exports.YAMLOMap = YAMLOMap;
exports.omap = omap;
}
});
// ../../node_modules/yaml/dist/schema/yaml-1.1/bool.js
var require_bool2 = __commonJS({
"../../node_modules/yaml/dist/schema/yaml-1.1/bool.js"(exports) {
"use strict";
var Scalar = require_Scalar();
function boolStringify({ value, source }, ctx) {
return source && (value ? trueTag : falseTag).test.test(source) ? source : value ? ctx.options.trueStr : ctx.options.falseStr;
}
var trueTag = {
identify: (value) => value === !0,
default: !0,
tag: "tag:yaml.org,2002:bool",
test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,
resolve: () => new Scalar.Scalar(!0),
stringify: boolStringify
}, falseTag = {
identify: (value) => value === !1,
default: !0,
tag: "tag:yaml.org,2002:bool",
test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,
resolve: () => new Scalar.Scalar(!1),
stringify: boolStringify
};
exports.falseTag = falseTag;
exports.trueTag = trueTag;
}
});
// ../../node_modules/yaml/dist/schema/yaml-1.1/float.js
var require_float2 = __commonJS({
"../../node_modules/yaml/dist/schema/yaml-1.1/float.js"(exports) {
"use strict";
var Scalar = require_Scalar(), stringifyNumber = require_stringifyNumber(), floatNaN = {
identify: (value) => typeof value == "number",
default: !0,
tag: "tag:yaml.org,2002:float",
test: /^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,
resolve: (str) => str.slice(-3).toLowerCase() === "nan" ? NaN : str[0] === "-" ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY,
stringify: stringifyNumber.stringifyNumber
}, floatExp = {
identify: (value) => typeof value == "number",
default: !0,
tag: "tag:yaml.org,2002:float",
format: "EXP",
test: /^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,
resolve: (str) => parseFloat(str.replace(/_/g, "")),
stringify(node) {
let num = Number(node.value);
return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);
}
}, float = {
identify: (value) => typeof value == "number",
default: !0,
tag: "tag:yaml.org,2002:float",
test: /^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,
resolve(str) {
let node = new Scalar.Scalar(parseFloat(str.replace(/_/g, ""))), dot = str.indexOf(".");
if (dot !== -1) {
let f = str.substring(dot + 1).replace(/_/g, "");
f[f.length - 1] === "0" && (node.minFractionDigits = f.length);
}
return node;
},
stringify: stringifyNumber.stringifyNumber
};
exports.float = float;
exports.floatExp = floatExp;
exports.floatNaN = floatNaN;
}
});
// ../../node_modules/yaml/dist/schema/yaml-1.1/int.js
var require_int2 = __commonJS({
"../../node_modules/yaml/dist/schema/yaml-1.1/int.js"(exports) {
"use strict";
var stringifyNumber = require_stringifyNumber(), intIdentify = (value) => typeof value == "bigint" || Number.isInteger(value);
function intResolve(str, offset, radix, { intAsBigInt }) {
let sign = str[0];
if ((sign === "-" || sign === "+") && (offset += 1), str = str.substring(offset).replace(/_/g, ""), intAsBigInt) {
switch (radix) {
case 2:
str = `0b${str}`;
break;
case 8:
str = `0o${str}`;
break;
case 16:
str = `0x${str}`;
break;
}
let n3 = BigInt(str);
return sign === "-" ? BigInt(-1) * n3 : n3;
}
let n2 = parseInt(str, radix);
return sign === "-" ? -1 * n2 : n2;
}
function intStringify(node, radix, prefix) {
let { value } = node;
if (intIdentify(value)) {
let str = value.toString(radix);
return value < 0 ? "-" + prefix + str.substr(1) : prefix + str;
}
return stringifyNumber.stringifyNumber(node);
}
var intBin = {
identify: intIdentify,
default: !0,
tag: "tag:yaml.org,2002:int",
format: "BIN",
test: /^[-+]?0b[0-1_]+$/,
resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),
stringify: (node) => intStringify(node, 2, "0b")
}, intOct = {
identify: intIdentify,
default: !0,
tag: "tag:yaml.org,2002:int",
format: "OCT",
test: /^[-+]?0[0-7_]+$/,
resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),
stringify: (node) => intStringify(node, 8, "0")
}, int = {
identify: intIdentify,
default: !0,
tag: "tag:yaml.org,2002:int",
test: /^[-+]?[0-9][0-9_]*$/,
resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),
stringify: stringifyNumber.stringifyNumber
}, intHex = {
identify: intIdentify,
default: !0,
tag: "tag:yaml.org,2002:int",
format: "HEX",
test: /^[-+]?0x[0-9a-fA-F_]+$/,
resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),
stringify: (node) => intStringify(node, 16, "0x")
};
exports.int = int;
exports.intBin = intBin;
exports.intHex = intHex;
exports.intOct = intOct;
}
});
// ../../node_modules/yaml/dist/schema/yaml-1.1/set.js
var require_set = __commonJS({
"../../node_modules/yaml/dist/schema/yaml-1.1/set.js"(exports) {
"use strict";
var identity3 = require_identity(), Pair = require_Pair(), YAMLMap = require_YAMLMap(), YAMLSet = class _YAMLSet extends YAMLMap.YAMLMap {
constructor(schema) {
super(schema), this.tag = _YAMLSet.tag;
}
add(key) {
let pair;
identity3.isPair(key) ? pair = key : key && typeof key == "object" && "key" in key && "value" in key && key.value === null ? pair = new Pair.Pair(key.key, null) : pair = new Pair.Pair(key, null), YAMLMap.findPair(this.items, pair.key) || this.items.push(pair);
}
/**
* If `keepPair` is `true`, returns the Pair matching `key`.
* Otherwise, returns the value of that Pair's key.
*/
get(key, keepPair) {
let pair = YAMLMap.findPair(this.items, key);
return !keepPair && identity3.isPair(pair) ? identity3.isScalar(pair.key) ? pair.key.value : pair.key : pair;
}
set(key, value) {
if (typeof value != "boolean")
throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);
let prev = YAMLMap.findPair(this.items, key);
prev && !value ? this.items.splice(this.items.indexOf(prev), 1) : !prev && value && this.items.push(new Pair.Pair(key));
}
toJSON(_, ctx) {
return super.toJSON(_, ctx, Set);
}
toString(ctx, onComment, onChompKeep) {
if (!ctx)
return JSON.stringify(this);
if (this.hasAllNullValues(!0))
return super.toString(Object.assign({}, ctx, { allNullValues: !0 }), onComment, onChompKeep);
throw new Error("Set items must all have null values");
}
static from(schema, iterable, ctx) {
let { replacer } = ctx, set2 = new this(schema);
if (iterable && Symbol.iterator in Object(iterable))
for (let value of iterable)
typeof replacer == "function" && (value = replacer.call(iterable, value, value)), set2.items.push(Pair.createPair(value, null, ctx));
return set2;
}
};
YAMLSet.tag = "tag:yaml.org,2002:set";
var set = {
collection: "map",
identify: (value) => value instanceof Set,
nodeClass: YAMLSet,
default: !1,
tag: "tag:yaml.org,2002:set",
createNode: (schema, iterable, ctx) => YAMLSet.from(schema, iterable, ctx),
resolve(map2, onError) {
if (identity3.isMap(map2)) {
if (map2.hasAllNullValues(!0))
return Object.assign(new YAMLSet(), map2);
onError("Set items must all have null values");
} else
onError("Expected a mapping for this tag");
return map2;
}
};
exports.YAMLSet = YAMLSet;
exports.set = set;
}
});
// ../../node_modules/yaml/dist/schema/yaml-1.1/timestamp.js
var require_timestamp = __commonJS({
"../../node_modules/yaml/dist/schema/yaml-1.1/timestamp.js"(exports) {
"use strict";
var stringifyNumber = require_stringifyNumber();
function parseSexagesimal(str, asBigInt) {
let sign = str[0], parts = sign === "-" || sign === "+" ? str.substring(1) : str, num = (n2) => asBigInt ? BigInt(n2) : Number(n2), res = parts.replace(/_/g, "").split(":").reduce((res2, p) => res2 * num(60) + num(p), num(0));
return sign === "-" ? num(-1) * res : res;
}
function stringifySexagesimal(node) {
let { value } = node, num = (n2) => n2;
if (typeof value == "bigint")
num = (n2) => BigInt(n2);
else if (isNaN(value) || !isFinite(value))
return stringifyNumber.stringifyNumber(node);
let sign = "";
value < 0 && (sign = "-", value *= num(-1));
let _60 = num(60), parts = [value % _60];
return value < 60 ? parts.unshift(0) : (value = (value - parts[0]) / _60, parts.unshift(value % _60), value >= 60 && (value = (value - parts[0]) / _60, parts.unshift(value))), sign + parts.map((n2) => String(n2).padStart(2, "0")).join(":").replace(/000000\d*$/, "");
}
var intTime = {
identify: (value) => typeof value == "bigint" || Number.isInteger(value),
default: !0,
tag: "tag:yaml.org,2002:int",
format: "TIME",
test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,
resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt),
stringify: stringifySexagesimal
}, floatTime = {
identify: (value) => typeof value == "number",
default: !0,
tag: "tag:yaml.org,2002:float",
format: "TIME",
test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,
resolve: (str) => parseSexagesimal(str, !1),
stringify: stringifySexagesimal
}, timestamp = {
identify: (value) => value instanceof Date,
default: !0,
tag: "tag:yaml.org,2002:timestamp",
// If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part
// may be omitted altogether, resulting in a date format. In such a case, the time part is
// assumed to be 00:00:00Z (start of day, UTC).
test: RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),
resolve(str) {
let match = str.match(timestamp.test);
if (!match)
throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");
let [, year, month, day, hour, minute, second] = match.map(Number), millisec = match[7] ? Number((match[7] + "00").substr(1, 3)) : 0, date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec), tz = match[8];
if (tz && tz !== "Z") {
let d = parseSexagesimal(tz, !1);
Math.abs(d) < 30 && (d *= 60), date -= 6e4 * d;
}
return new Date(date);
},
stringify: ({ value }) => value?.toISOString().replace(/(T00:00:00)?\.000Z$/, "") ?? ""
};
exports.floatTime = floatTime;
exports.intTime = intTime;
exports.timestamp = timestamp;
}
});
// ../../node_modules/yaml/dist/schema/yaml-1.1/schema.js
var require_schema3 = __commonJS({
"../../node_modules/yaml/dist/schema/yaml-1.1/schema.js"(exports) {
"use strict";
var map2 = require_map(), _null = require_null(), seq = require_seq(), string = require_string(), binary = require_binary(), bool = require_bool2(), float = require_float2(), int = require_int2(), merge = require_merge(), omap = require_omap(), pairs = require_pairs(), set = require_set(), timestamp = require_timestamp(), schema = [
map2.map,
seq.seq,
string.string,
_null.nullTag,
bool.trueTag,
bool.falseTag,
int.intBin,
int.intOct,
int.int,
int.intHex,
float.floatNaN,
float.floatExp,
float.float,
binary.binary,
merge.merge,
omap.omap,
pairs.pairs,
set.set,
timestamp.intTime,
timestamp.floatTime,
timestamp.timestamp
];
exports.schema = schema;
}
});
// ../../node_modules/yaml/dist/schema/tags.js
var require_tags = __commonJS({
"../../node_modules/yaml/dist/schema/tags.js"(exports) {
"use strict";
var map2 = require_map(), _null = require_null(), seq = require_seq(), string = require_string(), bool = require_bool(), float = require_float(), int = require_int(), schema = require_schema(), schema$1 = require_schema2(), binary = require_binary(), merge = require_merge(), omap = require_omap(), pairs = require_pairs(), schema$2 = require_schema3(), set = require_set(), timestamp = require_timestamp(), schemas = /* @__PURE__ */ new Map([
["core", schema.schema],
["failsafe", [map2.map, seq.seq, string.string]],
["json", schema$1.schema],
["yaml11", schema$2.schema],
["yaml-1.1", schema$2.schema]
]), tagsByName = {
binary: binary.binary,
bool: bool.boolTag,
float: float.float,
floatExp: float.floatExp,
floatNaN: float.floatNaN,
floatTime: timestamp.floatTime,
int: int.int,
intHex: int.intHex,
intOct: int.intOct,
intTime: timestamp.intTime,
map: map2.map,
merge: merge.merge,
null: _null.nullTag,
omap: omap.omap,
pairs: pairs.pairs,
seq: seq.seq,
set: set.set,
timestamp: timestamp.timestamp
}, coreKnownTags = {
"tag:yaml.org,2002:binary": binary.binary,
"tag:yaml.org,2002:merge": merge.merge,
"tag:yaml.org,2002:omap": omap.omap,
"tag:yaml.org,2002:pairs": pairs.pairs,
"tag:yaml.org,2002:set": set.set,
"tag:yaml.org,2002:timestamp": timestamp.timestamp
};
function getTags(customTags, schemaName, addMergeTag) {
let schemaTags = schemas.get(schemaName);
if (schemaTags && !customTags)
return addMergeTag && !schemaTags.includes(merge.merge) ? schemaTags.concat(merge.merge) : schemaTags.slice();
let tags = schemaTags;
if (!tags)
if (Array.isArray(customTags))
tags = [];
else {
let keys = Array.from(schemas.keys()).filter((key) => key !== "yaml11").map((key) => JSON.stringify(key)).join(", ");
throw new Error(`Unknown schema "${schemaName}"; use one of ${keys} or define customTags array`);
}
if (Array.isArray(customTags))
for (let tag of customTags)
tags = tags.concat(tag);
else typeof customTags == "function" && (tags = customTags(tags.slice()));
return addMergeTag && (tags = tags.concat(merge.merge)), tags.reduce((tags2, tag) => {
let tagObj = typeof tag == "string" ? tagsByName[tag] : tag;
if (!tagObj) {
let tagName = JSON.stringify(tag), keys = Object.keys(tagsByName).map((key) => JSON.stringify(key)).join(", ");
throw new Error(`Unknown custom tag ${tagName}; use one of ${keys}`);
}
return tags2.includes(tagObj) || tags2.push(tagObj), tags2;
}, []);
}
exports.coreKnownTags = coreKnownTags;
exports.getTags = getTags;
}
});
// ../../node_modules/yaml/dist/schema/Schema.js
var require_Schema = __commonJS({
"../../node_modules/yaml/dist/schema/Schema.js"(exports) {
"use strict";
var identity3 = require_identity(), map2 = require_map(), seq = require_seq(), string = require_string(), tags = require_tags(), sortMapEntriesByKey = (a2, b) => a2.key < b.key ? -1 : a2.key > b.key ? 1 : 0, Schema = class _Schema {
constructor({ compat, customTags, merge, resolveKnownTags, schema, sortMapEntries, toStringDefaults }) {
this.compat = Array.isArray(compat) ? tags.getTags(compat, "compat") : compat ? tags.getTags(null, compat) : null, this.name = typeof schema == "string" && schema || "core", this.knownTags = resolveKnownTags ? tags.coreKnownTags : {}, this.tags = tags.getTags(customTags, this.name, merge), this.toStringOptions = toStringDefaults ?? null, Object.defineProperty(this, identity3.MAP, { value: map2.map }), Object.defineProperty(this, identity3.SCALAR, { value: string.string }), Object.defineProperty(this, identity3.SEQ, { value: seq.seq }), this.sortMapEntries = typeof sortMapEntries == "function" ? sortMapEntries : sortMapEntries === !0 ? sortMapEntriesByKey : null;
}
clone() {
let copy = Object.create(_Schema.prototype, Object.getOwnPropertyDescriptors(this));
return copy.tags = this.tags.slice(), copy;
}
};
exports.Schema = Schema;
}
});
// ../../node_modules/yaml/dist/stringify/stringifyDocument.js
var require_stringifyDocument = __commonJS({
"../../node_modules/yaml/dist/stringify/stringifyDocument.js"(exports) {
"use strict";
var identity3 = require_identity(), stringify = require_stringify(), stringifyComment = require_stringifyComment();
function stringifyDocument(doc, options) {
let lines = [], hasDirectives = options.directives === !0;
if (options.directives !== !1 && doc.directives) {
let dir = doc.directives.toString(doc);
dir ? (lines.push(dir), hasDirectives = !0) : doc.directives.docStart && (hasDirectives = !0);
}
hasDirectives && lines.push("---");
let ctx = stringify.createStringifyContext(doc, options), { commentString } = ctx.options;
if (doc.commentBefore) {
lines.length !== 1 && lines.unshift("");
let cs = commentString(doc.commentBefore);
lines.unshift(stringifyComment.indentComment(cs, ""));
}
let chompKeep = !1, contentComment = null;
if (doc.contents) {
if (identity3.isNode(doc.contents)) {
if (doc.contents.spaceBefore && hasDirectives && lines.push(""), doc.contents.commentBefore) {
let cs = commentString(doc.contents.commentBefore);
lines.push(stringifyComment.indentComment(cs, ""));
}
ctx.forceBlockIndent = !!doc.comment, contentComment = doc.contents.comment;
}
let onChompKeep = contentComment ? void 0 : () => chompKeep = !0, body = stringify.stringify(doc.contents, ctx, () => contentComment = null, onChompKeep);
contentComment && (body += stringifyComment.lineComment(body, "", commentString(contentComment))), (body[0] === "|" || body[0] === ">") && lines[lines.length - 1] === "---" ? lines[lines.length - 1] = `--- ${body}` : lines.push(body);
} else
lines.push(stringify.stringify(doc.contents, ctx));
if (doc.directives?.docEnd)
if (doc.comment) {
let cs = commentString(doc.comment);
cs.includes(`
`) ? (lines.push("..."), lines.push(stringifyComment.indentComment(cs, ""))) : lines.push(`... ${cs}`);
} else
lines.push("...");
else {
let dc = doc.comment;
dc && chompKeep && (dc = dc.replace(/^\n+/, "")), dc && ((!chompKeep || contentComment) && lines[lines.length - 1] !== "" && lines.push(""), lines.push(stringifyComment.indentComment(commentString(dc), "")));
}
return lines.join(`
`) + `
`;
}
exports.stringifyDocument = stringifyDocument;
}
});
// ../../node_modules/yaml/dist/doc/Document.js
var require_Document = __commonJS({
"../../node_modules/yaml/dist/doc/Document.js"(exports) {
"use strict";
var Alias = require_Alias(), Collection = require_Collection(), identity3 = require_identity(), Pair = require_Pair(), toJS = require_toJS(), Schema = require_Schema(), stringifyDocument = require_stringifyDocument(), anchors = require_anchors(), applyReviver = require_applyReviver(), createNode = require_createNode(), directives = require_directives(), Document = class _Document {
constructor(value, replacer, options) {
this.commentBefore = null, this.comment = null, this.errors = [], this.warnings = [], Object.defineProperty(this, identity3.NODE_TYPE, { value: identity3.DOC });
let _replacer = null;
typeof replacer == "function" || Array.isArray(replacer) ? _replacer = replacer : options === void 0 && replacer && (options = replacer, replacer = void 0);
let opt = Object.assign({
intAsBigInt: !1,
keepSourceTokens: !1,
logLevel: "warn",
prettyErrors: !0,
strict: !0,
stringKeys: !1,
uniqueKeys: !0,
version: "1.2"
}, options);
this.options = opt;
let { version } = opt;
options?._directives ? (this.directives = options._directives.atDocument(), this.directives.yaml.explicit && (version = this.directives.yaml.version)) : this.directives = new directives.Directives({ version }), this.setSchema(version, options), this.contents = value === void 0 ? null : this.createNode(value, _replacer, options);
}
/**
* Create a deep copy of this Document and its contents.
*
* Custom Node values that inherit from `Object` still refer to their original instances.
*/
clone() {
let copy = Object.create(_Document.prototype, {
[identity3.NODE_TYPE]: { value: identity3.DOC }
});
return copy.commentBefore = this.commentBefore, copy.comment = this.comment, copy.errors = this.errors.slice(), copy.warnings = this.warnings.slice(), copy.options = Object.assign({}, this.options), this.directives && (copy.directives = this.directives.clone()), copy.schema = this.schema.clone(), copy.contents = identity3.isNode(this.contents) ? this.contents.clone(copy.schema) : this.contents, this.range && (copy.range = this.range.slice()), copy;
}
/** Adds a value to the document. */
add(value) {
assertCollection(this.contents) && this.contents.add(value);
}
/** Adds a value to the document. */
addIn(path5, value) {
assertCollection(this.contents) && this.contents.addIn(path5, value);
}
/**
* Create a new `Alias` node, ensuring that the target `node` has the required anchor.
*
* If `node` already has an anchor, `name` is ignored.
* Otherwise, the `node.anchor` value will be set to `name`,
* or if an anchor with that name is already present in the document,
* `name` will be used as a prefix for a new unique anchor.
* If `name` is undefined, the generated anchor will use 'a' as a prefix.
*/
createAlias(node, name) {
if (!node.anchor) {
let prev = anchors.anchorNames(this);
node.anchor = // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
!name || prev.has(name) ? anchors.findNewAnchor(name || "a", prev) : name;
}
return new Alias.Alias(node.anchor);
}
createNode(value, replacer, options) {
let _replacer;
if (typeof replacer == "function")
value = replacer.call({ "": value }, "", value), _replacer = replacer;
else if (Array.isArray(replacer)) {
let keyToStr = (v) => typeof v == "number" || v instanceof String || v instanceof Number, asStr = replacer.filter(keyToStr).map(String);
asStr.length > 0 && (replacer = replacer.concat(asStr)), _replacer = replacer;
} else options === void 0 && replacer && (options = replacer, replacer = void 0);
let { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options ?? {}, { onAnchor, setAnchors, sourceObjects } = anchors.createNodeAnchors(
this,
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
anchorPrefix || "a"
), ctx = {
aliasDuplicateObjects: aliasDuplicateObjects ?? !0,
keepUndefined: keepUndefined ?? !1,
onAnchor,
onTagObj,
replacer: _replacer,
schema: this.schema,
sourceObjects
}, node = createNode.createNode(value, tag, ctx);
return flow && identity3.isCollection(node) && (node.flow = !0), setAnchors(), node;
}
/**
* Convert a key and a value into a `Pair` using the current schema,
* recursively wrapping all values as `Scalar` or `Collection` nodes.
*/
createPair(key, value, options = {}) {
let k = this.createNode(key, null, options), v = this.createNode(value, null, options);
return new Pair.Pair(k, v);
}
/**
* Removes a value from the document.
* @returns `true` if the item was found and removed.
*/
delete(key) {
return assertCollection(this.contents) ? this.contents.delete(key) : !1;
}
/**
* Removes a value from the document.
* @returns `true` if the item was found and removed.
*/
deleteIn(path5) {
return Collection.isEmptyPath(path5) ? this.contents == null ? !1 : (this.contents = null, !0) : assertCollection(this.contents) ? this.contents.deleteIn(path5) : !1;
}
/**
* Returns item at `key`, or `undefined` if not found. By default unwraps
* scalar values from their surrounding node; to disable set `keepScalar` to
* `true` (collections are always returned intact).
*/
get(key, keepScalar) {
return identity3.isCollection(this.contents) ? this.contents.get(key, keepScalar) : void 0;
}
/**
* Returns item at `path`, or `undefined` if not found. By default unwraps
* scalar values from their surrounding node; to disable set `keepScalar` to
* `true` (collections are always returned intact).
*/
getIn(path5, keepScalar) {
return Collection.isEmptyPath(path5) ? !keepScalar && identity3.isScalar(this.contents) ? this.contents.value : this.contents : identity3.isCollection(this.contents) ? this.contents.getIn(path5, keepScalar) : void 0;
}
/**
* Checks if the document includes a value with the key `key`.
*/
has(key) {
return identity3.isCollection(this.contents) ? this.contents.has(key) : !1;
}
/**
* Checks if the document includes a value at `path`.
*/
hasIn(path5) {
return Collection.isEmptyPath(path5) ? this.contents !== void 0 : identity3.isCollection(this.contents) ? this.contents.hasIn(path5) : !1;
}
/**
* Sets a value in this document. For `!!set`, `value` needs to be a
* boolean to add/remove the item from the set.
*/
set(key, value) {
this.contents == null ? this.contents = Collection.collectionFromPath(this.schema, [key], value) : assertCollection(this.contents) && this.contents.set(key, value);
}
/**
* Sets a value in this document. For `!!set`, `value` needs to be a
* boolean to add/remove the item from the set.
*/
setIn(path5, value) {
Collection.isEmptyPath(path5) ? this.contents = value : this.contents == null ? this.contents = Collection.collectionFromPath(this.schema, Array.from(path5), value) : assertCollection(this.contents) && this.contents.setIn(path5, value);
}
/**
* Change the YAML version and schema used by the document.
* A `null` version disables support for directives, explicit tags, anchors, and aliases.
* It also requires the `schema` option to be given as a `Schema` instance value.
*
* Overrides all previously set schema options.
*/
setSchema(version, options = {}) {
typeof version == "number" && (version = String(version));
let opt;
switch (version) {
case "1.1":
this.directives ? this.directives.yaml.version = "1.1" : this.directives = new directives.Directives({ version: "1.1" }), opt = { resolveKnownTags: !1, schema: "yaml-1.1" };
break;
case "1.2":
case "next":
this.directives ? this.directives.yaml.version = version : this.directives = new directives.Directives({ version }), opt = { resolveKnownTags: !0, schema: "core" };
break;
case null:
this.directives && delete this.directives, opt = null;
break;
default: {
let sv = JSON.stringify(version);
throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`);
}
}
if (options.schema instanceof Object)
this.schema = options.schema;
else if (opt)
this.schema = new Schema.Schema(Object.assign(opt, options));
else
throw new Error("With a null YAML version, the { schema: Schema } option is required");
}
// json & jsonArg are only used from toJSON()
toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {
let ctx = {
anchors: /* @__PURE__ */ new Map(),
doc: this,
keep: !json,
mapAsMap: mapAsMap === !0,
mapKeyWarned: !1,
maxAliasCount: typeof maxAliasCount == "number" ? maxAliasCount : 100
}, res = toJS.toJS(this.contents, jsonArg ?? "", ctx);
if (typeof onAnchor == "function")
for (let { count: count2, res: res2 } of ctx.anchors.values())
onAnchor(res2, count2);
return typeof reviver == "function" ? applyReviver.applyReviver(reviver, { "": res }, "", res) : res;
}
/**
* A JSON representation of the document `contents`.
*
* @param jsonArg Used by `JSON.stringify` to indicate the array index or
* property name.
*/
toJSON(jsonArg, onAnchor) {
return this.toJS({ json: !0, jsonArg, mapAsMap: !1, onAnchor });
}
/** A YAML representation of the document. */
toString(options = {}) {
if (this.errors.length > 0)
throw new Error("Document with errors cannot be stringified");
if ("indent" in options && (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) {
let s = JSON.stringify(options.indent);
throw new Error(`"indent" option must be a positive integer, not ${s}`);
}
return stringifyDocument.stringifyDocument(this, options);
}
};
function assertCollection(contents) {
if (identity3.isCollection(contents))
return !0;
throw new Error("Expected a YAML collection as document contents");
}
exports.Document = Document;
}
});
// ../../node_modules/yaml/dist/errors.js
var require_errors = __commonJS({
"../../node_modules/yaml/dist/errors.js"(exports) {
"use strict";
var YAMLError = class extends Error {
constructor(name, pos, code, message) {
super(), this.name = name, this.code = code, this.message = message, this.pos = pos;
}
}, YAMLParseError = class extends YAMLError {
constructor(pos, code, message) {
super("YAMLParseError", pos, code, message);
}
}, YAMLWarning = class extends YAMLError {
constructor(pos, code, message) {
super("YAMLWarning", pos, code, message);
}
}, prettifyError = (src, lc) => (error) => {
if (error.pos[0] === -1)
return;
error.linePos = error.pos.map((pos) => lc.linePos(pos));
let { line, col } = error.linePos[0];
error.message += ` at line ${line}, column ${col}`;
let ci = col - 1, lineStr = src.substring(lc.lineStarts[line - 1], lc.lineStarts[line]).replace(/[\n\r]+$/, "");
if (ci >= 60 && lineStr.length > 80) {
let trimStart = Math.min(ci - 39, lineStr.length - 79);
lineStr = "\u2026" + lineStr.substring(trimStart), ci -= trimStart - 1;
}
if (lineStr.length > 80 && (lineStr = lineStr.substring(0, 79) + "\u2026"), line > 1 && /^ *$/.test(lineStr.substring(0, ci))) {
let prev = src.substring(lc.lineStarts[line - 2], lc.lineStarts[line - 1]);
prev.length > 80 && (prev = prev.substring(0, 79) + `\u2026
`), lineStr = prev + lineStr;
}
if (/[^ ]/.test(lineStr)) {
let count2 = 1, end = error.linePos[1];
end?.line === line && end.col > col && (count2 = Math.max(1, Math.min(end.col - col, 80 - ci)));
let pointer = " ".repeat(ci) + "^".repeat(count2);
error.message += `:
${lineStr}
${pointer}
`;
}
};
exports.YAMLError = YAMLError;
exports.YAMLParseError = YAMLParseError;
exports.YAMLWarning = YAMLWarning;
exports.prettifyError = prettifyError;
}
});
// ../../node_modules/yaml/dist/compose/resolve-props.js
var require_resolve_props = __commonJS({
"../../node_modules/yaml/dist/compose/resolve-props.js"(exports) {
"use strict";
function resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {
let spaceBefore = !1, atNewline = startOnNewline, hasSpace = startOnNewline, comment = "", commentSep = "", hasNewline = !1, reqSpace = !1, tab = null, anchor = null, tag = null, newlineAfterProp = null, comma = null, found = null, start = null;
for (let token of tokens)
switch (reqSpace && (token.type !== "space" && token.type !== "newline" && token.type !== "comma" && onError(token.offset, "MISSING_CHAR", "Tags and anchors must be separated from the next token by white space"), reqSpace = !1), tab && (atNewline && token.type !== "comment" && token.type !== "newline" && onError(tab, "TAB_AS_INDENT", "Tabs are not allowed as indentation"), tab = null), token.type) {
case "space":
!flow && (indicator !== "doc-start" || next?.type !== "flow-collection") && token.source.includes(" ") && (tab = token), hasSpace = !0;
break;
case "comment": {
hasSpace || onError(token, "MISSING_CHAR", "Comments must be separated from other tokens by white space characters");
let cb = token.source.substring(1) || " ";
comment ? comment += commentSep + cb : comment = cb, commentSep = "", atNewline = !1;
break;
}
case "newline":
atNewline ? comment ? comment += token.source : (!found || indicator !== "seq-item-ind") && (spaceBefore = !0) : commentSep += token.source, atNewline = !0, hasNewline = !0, (anchor || tag) && (newlineAfterProp = token), hasSpace = !0;
break;
case "anchor":
anchor && onError(token, "MULTIPLE_ANCHORS", "A node can have at most one anchor"), token.source.endsWith(":") && onError(token.offset + token.source.length - 1, "BAD_ALIAS", "Anchor ending in : is ambiguous", !0), anchor = token, start ?? (start = token.offset), atNewline = !1, hasSpace = !1, reqSpace = !0;
break;
case "tag": {
tag && onError(token, "MULTIPLE_TAGS", "A node can have at most one tag"), tag = token, start ?? (start = token.offset), atNewline = !1, hasSpace = !1, reqSpace = !0;
break;
}
case indicator:
(anchor || tag) && onError(token, "BAD_PROP_ORDER", `Anchors and tags must be after the ${token.source} indicator`), found && onError(token, "UNEXPECTED_TOKEN", `Unexpected ${token.source} in ${flow ?? "collection"}`), found = token, atNewline = indicator === "seq-item-ind" || indicator === "explicit-key-ind", hasSpace = !1;
break;
case "comma":
if (flow) {
comma && onError(token, "UNEXPECTED_TOKEN", `Unexpected , in ${flow}`), comma = token, atNewline = !1, hasSpace = !1;
break;
}
// else fallthrough
default:
onError(token, "UNEXPECTED_TOKEN", `Unexpected ${token.type} token`), atNewline = !1, hasSpace = !1;
}
let last = tokens[tokens.length - 1], end = last ? last.offset + last.source.length : offset;
return reqSpace && next && next.type !== "space" && next.type !== "newline" && next.type !== "comma" && (next.type !== "scalar" || next.source !== "") && onError(next.offset, "MISSING_CHAR", "Tags and anchors must be separated from the next token by white space"), tab && (atNewline && tab.indent <= parentIndent || next?.type === "block-map" || next?.type === "block-seq") && onError(tab, "TAB_AS_INDENT", "Tabs are not allowed as indentation"), {
comma,
found,
spaceBefore,
comment,
hasNewline,
anchor,
tag,
newlineAfterProp,
end,
start: start ?? end
};
}
exports.resolveProps = resolveProps;
}
});
// ../../node_modules/yaml/dist/compose/util-contains-newline.js
var require_util_contains_newline = __commonJS({
"../../node_modules/yaml/dist/compose/util-contains-newline.js"(exports) {
"use strict";
function containsNewline(key) {
if (!key)
return null;
switch (key.type) {
case "alias":
case "scalar":
case "double-quoted-scalar":
case "single-quoted-scalar":
if (key.source.includes(`
`))
return !0;
if (key.end) {
for (let st of key.end)
if (st.type === "newline")
return !0;
}
return !1;
case "flow-collection":
for (let it of key.items) {
for (let st of it.start)
if (st.type === "newline")
return !0;
if (it.sep) {
for (let st of it.sep)
if (st.type === "newline")
return !0;
}
if (containsNewline(it.key) || containsNewline(it.value))
return !0;
}
return !1;
default:
return !0;
}
}
exports.containsNewline = containsNewline;
}
});
// ../../node_modules/yaml/dist/compose/util-flow-indent-check.js
var require_util_flow_indent_check = __commonJS({
"../../node_modules/yaml/dist/compose/util-flow-indent-check.js"(exports) {
"use strict";
var utilContainsNewline = require_util_contains_newline();
function flowIndentCheck(indent, fc, onError) {
if (fc?.type === "flow-collection") {
let end = fc.end[0];
end.indent === indent && (end.source === "]" || end.source === "}") && utilContainsNewline.containsNewline(fc) && onError(end, "BAD_INDENT", "Flow end indicator should be more indented than parent", !0);
}
}
exports.flowIndentCheck = flowIndentCheck;
}
});
// ../../node_modules/yaml/dist/compose/util-map-includes.js
var require_util_map_includes = __commonJS({
"../../node_modules/yaml/dist/compose/util-map-includes.js"(exports) {
"use strict";
var identity3 = require_identity();
function mapIncludes(ctx, items, search) {
let { uniqueKeys } = ctx.options;
if (uniqueKeys === !1)
return !1;
let isEqual = typeof uniqueKeys == "function" ? uniqueKeys : (a2, b) => a2 === b || identity3.isScalar(a2) && identity3.isScalar(b) && a2.value === b.value;
return items.some((pair) => isEqual(pair.key, search));
}
exports.mapIncludes = mapIncludes;
}
});
// ../../node_modules/yaml/dist/compose/resolve-block-map.js
var require_resolve_block_map = __commonJS({
"../../node_modules/yaml/dist/compose/resolve-block-map.js"(exports) {
"use strict";
var Pair = require_Pair(), YAMLMap = require_YAMLMap(), resolveProps = require_resolve_props(), utilContainsNewline = require_util_contains_newline(), utilFlowIndentCheck = require_util_flow_indent_check(), utilMapIncludes = require_util_map_includes(), startColMsg = "All mapping items must start at the same column";
function resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError, tag) {
let NodeClass = tag?.nodeClass ?? YAMLMap.YAMLMap, map2 = new NodeClass(ctx.schema);
ctx.atRoot && (ctx.atRoot = !1);
let offset = bm.offset, commentEnd = null;
for (let collItem of bm.items) {
let { start, key, sep: sep3, value } = collItem, keyProps = resolveProps.resolveProps(start, {
indicator: "explicit-key-ind",
next: key ?? sep3?.[0],
offset,
onError,
parentIndent: bm.indent,
startOnNewline: !0
}), implicitKey = !keyProps.found;
if (implicitKey) {
if (key && (key.type === "block-seq" ? onError(offset, "BLOCK_AS_IMPLICIT_KEY", "A block sequence may not be used as an implicit map key") : "indent" in key && key.indent !== bm.indent && onError(offset, "BAD_INDENT", startColMsg)), !keyProps.anchor && !keyProps.tag && !sep3) {
commentEnd = keyProps.end, keyProps.comment && (map2.comment ? map2.comment += `
` + keyProps.comment : map2.comment = keyProps.comment);
continue;
}
(keyProps.newlineAfterProp || utilContainsNewline.containsNewline(key)) && onError(key ?? start[start.length - 1], "MULTILINE_IMPLICIT_KEY", "Implicit keys need to be on a single line");
} else keyProps.found?.indent !== bm.indent && onError(offset, "BAD_INDENT", startColMsg);
ctx.atKey = !0;
let keyStart = keyProps.end, keyNode = key ? composeNode(ctx, key, keyProps, onError) : composeEmptyNode(ctx, keyStart, start, null, keyProps, onError);
ctx.schema.compat && utilFlowIndentCheck.flowIndentCheck(bm.indent, key, onError), ctx.atKey = !1, utilMapIncludes.mapIncludes(ctx, map2.items, keyNode) && onError(keyStart, "DUPLICATE_KEY", "Map keys must be unique");
let valueProps = resolveProps.resolveProps(sep3 ?? [], {
indicator: "map-value-ind",
next: value,
offset: keyNode.range[2],
onError,
parentIndent: bm.indent,
startOnNewline: !key || key.type === "block-scalar"
});
if (offset = valueProps.end, valueProps.found) {
implicitKey && (value?.type === "block-map" && !valueProps.hasNewline && onError(offset, "BLOCK_AS_IMPLICIT_KEY", "Nested mappings are not allowed in compact mappings"), ctx.options.strict && keyProps.start < valueProps.found.offset - 1024 && onError(keyNode.range, "KEY_OVER_1024_CHARS", "The : indicator must be at most 1024 chars after the start of an implicit block mapping key"));
let valueNode = value ? composeNode(ctx, value, valueProps, onError) : composeEmptyNode(ctx, offset, sep3, null, valueProps, onError);
ctx.schema.compat && utilFlowIndentCheck.flowIndentCheck(bm.indent, value, onError), offset = valueNode.range[2];
let pair = new Pair.Pair(keyNode, valueNode);
ctx.options.keepSourceTokens && (pair.srcToken = collItem), map2.items.push(pair);
} else {
implicitKey && onError(keyNode.range, "MISSING_CHAR", "Implicit map keys need to be followed by map values"), valueProps.comment && (keyNode.comment ? keyNode.comment += `
` + valueProps.comment : keyNode.comment = valueProps.comment);
let pair = new Pair.Pair(keyNode);
ctx.options.keepSourceTokens && (pair.srcToken = collItem), map2.items.push(pair);
}
}
return commentEnd && commentEnd < offset && onError(commentEnd, "IMPOSSIBLE", "Map comment with trailing content"), map2.range = [bm.offset, offset, commentEnd ?? offset], map2;
}
exports.resolveBlockMap = resolveBlockMap;
}
});
// ../../node_modules/yaml/dist/compose/resolve-block-seq.js
var require_resolve_block_seq = __commonJS({
"../../node_modules/yaml/dist/compose/resolve-block-seq.js"(exports) {
"use strict";
var YAMLSeq = require_YAMLSeq(), resolveProps = require_resolve_props(), utilFlowIndentCheck = require_util_flow_indent_check();
function resolveBlockSeq({ composeNode, composeEmptyNode }, ctx, bs, onError, tag) {
let NodeClass = tag?.nodeClass ?? YAMLSeq.YAMLSeq, seq = new NodeClass(ctx.schema);
ctx.atRoot && (ctx.atRoot = !1), ctx.atKey && (ctx.atKey = !1);
let offset = bs.offset, commentEnd = null;
for (let { start, value } of bs.items) {
let props = resolveProps.resolveProps(start, {
indicator: "seq-item-ind",
next: value,
offset,
onError,
parentIndent: bs.indent,
startOnNewline: !0
});
if (!props.found)
if (props.anchor || props.tag || value)
value?.type === "block-seq" ? onError(props.end, "BAD_INDENT", "All sequence items must start at the same column") : onError(offset, "MISSING_CHAR", "Sequence item without - indicator");
else {
commentEnd = props.end, props.comment && (seq.comment = props.comment);
continue;
}
let node = value ? composeNode(ctx, value, props, onError) : composeEmptyNode(ctx, props.end, start, null, props, onError);
ctx.schema.compat && utilFlowIndentCheck.flowIndentCheck(bs.indent, value, onError), offset = node.range[2], seq.items.push(node);
}
return seq.range = [bs.offset, offset, commentEnd ?? offset], seq;
}
exports.resolveBlockSeq = resolveBlockSeq;
}
});
// ../../node_modules/yaml/dist/compose/resolve-end.js
var require_resolve_end = __commonJS({
"../../node_modules/yaml/dist/compose/resolve-end.js"(exports) {
"use strict";
function resolveEnd(end, offset, reqSpace, onError) {
let comment = "";
if (end) {
let hasSpace = !1, sep3 = "";
for (let token of end) {
let { source, type } = token;
switch (type) {
case "space":
hasSpace = !0;
break;
case "comment": {
reqSpace && !hasSpace && onError(token, "MISSING_CHAR", "Comments must be separated from other tokens by white space characters");
let cb = source.substring(1) || " ";
comment ? comment += sep3 + cb : comment = cb, sep3 = "";
break;
}
case "newline":
comment && (sep3 += source), hasSpace = !0;
break;
default:
onError(token, "UNEXPECTED_TOKEN", `Unexpected ${type} at node end`);
}
offset += source.length;
}
}
return { comment, offset };
}
exports.resolveEnd = resolveEnd;
}
});
// ../../node_modules/yaml/dist/compose/resolve-flow-collection.js
var require_resolve_flow_collection = __commonJS({
"../../node_modules/yaml/dist/compose/resolve-flow-collection.js"(exports) {
"use strict";
var identity3 = require_identity(), Pair = require_Pair(), YAMLMap = require_YAMLMap(), YAMLSeq = require_YAMLSeq(), resolveEnd = require_resolve_end(), resolveProps = require_resolve_props(), utilContainsNewline = require_util_contains_newline(), utilMapIncludes = require_util_map_includes(), blockMsg = "Block collections are not allowed within flow collections", isBlock = (token) => token && (token.type === "block-map" || token.type === "block-seq");
function resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError, tag) {
let isMap = fc.start.source === "{", fcName = isMap ? "flow map" : "flow sequence", NodeClass = tag?.nodeClass ?? (isMap ? YAMLMap.YAMLMap : YAMLSeq.YAMLSeq), coll = new NodeClass(ctx.schema);
coll.flow = !0;
let atRoot = ctx.atRoot;
atRoot && (ctx.atRoot = !1), ctx.atKey && (ctx.atKey = !1);
let offset = fc.offset + fc.start.source.length;
for (let i2 = 0; i2 < fc.items.length; ++i2) {
let collItem = fc.items[i2], { start, key, sep: sep3, value } = collItem, props = resolveProps.resolveProps(start, {
flow: fcName,
indicator: "explicit-key-ind",
next: key ?? sep3?.[0],
offset,
onError,
parentIndent: fc.indent,
startOnNewline: !1
});
if (!props.found) {
if (!props.anchor && !props.tag && !sep3 && !value) {
i2 === 0 && props.comma ? onError(props.comma, "UNEXPECTED_TOKEN", `Unexpected , in ${fcName}`) : i2 < fc.items.length - 1 && onError(props.start, "UNEXPECTED_TOKEN", `Unexpected empty item in ${fcName}`), props.comment && (coll.comment ? coll.comment += `
` + props.comment : coll.comment = props.comment), offset = props.end;
continue;
}
!isMap && ctx.options.strict && utilContainsNewline.containsNewline(key) && onError(
key,
// checked by containsNewline()
"MULTILINE_IMPLICIT_KEY",
"Implicit keys of flow sequence pairs need to be on a single line"
);
}
if (i2 === 0)
props.comma && onError(props.comma, "UNEXPECTED_TOKEN", `Unexpected , in ${fcName}`);
else if (props.comma || onError(props.start, "MISSING_CHAR", `Missing , between ${fcName} items`), props.comment) {
let prevItemComment = "";
loop: for (let st of start)
switch (st.type) {
case "comma":
case "space":
break;
case "comment":
prevItemComment = st.source.substring(1);
break loop;
default:
break loop;
}
if (prevItemComment) {
let prev = coll.items[coll.items.length - 1];
identity3.isPair(prev) && (prev = prev.value ?? prev.key), prev.comment ? prev.comment += `
` + prevItemComment : prev.comment = prevItemComment, props.comment = props.comment.substring(prevItemComment.length + 1);
}
}
if (!isMap && !sep3 && !props.found) {
let valueNode = value ? composeNode(ctx, value, props, onError) : composeEmptyNode(ctx, props.end, sep3, null, props, onError);
coll.items.push(valueNode), offset = valueNode.range[2], isBlock(value) && onError(valueNode.range, "BLOCK_IN_FLOW", blockMsg);
} else {
ctx.atKey = !0;
let keyStart = props.end, keyNode = key ? composeNode(ctx, key, props, onError) : composeEmptyNode(ctx, keyStart, start, null, props, onError);
isBlock(key) && onError(keyNode.range, "BLOCK_IN_FLOW", blockMsg), ctx.atKey = !1;
let valueProps = resolveProps.resolveProps(sep3 ?? [], {
flow: fcName,
indicator: "map-value-ind",
next: value,
offset: keyNode.range[2],
onError,
parentIndent: fc.indent,
startOnNewline: !1
});
if (valueProps.found) {
if (!isMap && !props.found && ctx.options.strict) {
if (sep3)
for (let st of sep3) {
if (st === valueProps.found)
break;
if (st.type === "newline") {
onError(st, "MULTILINE_IMPLICIT_KEY", "Implicit keys of flow sequence pairs need to be on a single line");
break;
}
}
props.start < valueProps.found.offset - 1024 && onError(valueProps.found, "KEY_OVER_1024_CHARS", "The : indicator must be at most 1024 chars after the start of an implicit flow sequence key");
}
} else value && ("source" in value && value.source?.[0] === ":" ? onError(value, "MISSING_CHAR", `Missing space after : in ${fcName}`) : onError(valueProps.start, "MISSING_CHAR", `Missing , or : between ${fcName} items`));
let valueNode = value ? composeNode(ctx, value, valueProps, onError) : valueProps.found ? composeEmptyNode(ctx, valueProps.end, sep3, null, valueProps, onError) : null;
valueNode ? isBlock(value) && onError(valueNode.range, "BLOCK_IN_FLOW", blockMsg) : valueProps.comment && (keyNode.comment ? keyNode.comment += `
` + valueProps.comment : keyNode.comment = valueProps.comment);
let pair = new Pair.Pair(keyNode, valueNode);
if (ctx.options.keepSourceTokens && (pair.srcToken = collItem), isMap) {
let map2 = coll;
utilMapIncludes.mapIncludes(ctx, map2.items, keyNode) && onError(keyStart, "DUPLICATE_KEY", "Map keys must be unique"), map2.items.push(pair);
} else {
let map2 = new YAMLMap.YAMLMap(ctx.schema);
map2.flow = !0, map2.items.push(pair);
let endRange = (valueNode ?? keyNode).range;
map2.range = [keyNode.range[0], endRange[1], endRange[2]], coll.items.push(map2);
}
offset = valueNode ? valueNode.range[2] : valueProps.end;
}
}
let expectedEnd = isMap ? "}" : "]", [ce, ...ee] = fc.end, cePos = offset;
if (ce?.source === expectedEnd)
cePos = ce.offset + ce.source.length;
else {
let name = fcName[0].toUpperCase() + fcName.substring(1), msg = atRoot ? `${name} must end with a ${expectedEnd}` : `${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`;
onError(offset, atRoot ? "MISSING_CHAR" : "BAD_INDENT", msg), ce && ce.source.length !== 1 && ee.unshift(ce);
}
if (ee.length > 0) {
let end = resolveEnd.resolveEnd(ee, cePos, ctx.options.strict, onError);
end.comment && (coll.comment ? coll.comment += `
` + end.comment : coll.comment = end.comment), coll.range = [fc.offset, cePos, end.offset];
} else
coll.range = [fc.offset, cePos, cePos];
return coll;
}
exports.resolveFlowCollection = resolveFlowCollection;
}
});
// ../../node_modules/yaml/dist/compose/compose-collection.js
var require_compose_collection = __commonJS({
"../../node_modules/yaml/dist/compose/compose-collection.js"(exports) {
"use strict";
var identity3 = require_identity(), Scalar = require_Scalar(), YAMLMap = require_YAMLMap(), YAMLSeq = require_YAMLSeq(), resolveBlockMap = require_resolve_block_map(), resolveBlockSeq = require_resolve_block_seq(), resolveFlowCollection = require_resolve_flow_collection();
function resolveCollection(CN, ctx, token, onError, tagName, tag) {
let coll = token.type === "block-map" ? resolveBlockMap.resolveBlockMap(CN, ctx, token, onError, tag) : token.type === "block-seq" ? resolveBlockSeq.resolveBlockSeq(CN, ctx, token, onError, tag) : resolveFlowCollection.resolveFlowCollection(CN, ctx, token, onError, tag), Coll = coll.constructor;
return tagName === "!" || tagName === Coll.tagName ? (coll.tag = Coll.tagName, coll) : (tagName && (coll.tag = tagName), coll);
}
function composeCollection(CN, ctx, token, props, onError) {
let tagToken = props.tag, tagName = tagToken ? ctx.directives.tagName(tagToken.source, (msg) => onError(tagToken, "TAG_RESOLVE_FAILED", msg)) : null;
if (token.type === "block-seq") {
let { anchor, newlineAfterProp: nl } = props, lastProp = anchor && tagToken ? anchor.offset > tagToken.offset ? anchor : tagToken : anchor ?? tagToken;
lastProp && (!nl || nl.offset < lastProp.offset) && onError(lastProp, "MISSING_CHAR", "Missing newline after block sequence props");
}
let expType = token.type === "block-map" ? "map" : token.type === "block-seq" ? "seq" : token.start.source === "{" ? "map" : "seq";
if (!tagToken || !tagName || tagName === "!" || tagName === YAMLMap.YAMLMap.tagName && expType === "map" || tagName === YAMLSeq.YAMLSeq.tagName && expType === "seq")
return resolveCollection(CN, ctx, token, onError, tagName);
let tag = ctx.schema.tags.find((t3) => t3.tag === tagName && t3.collection === expType);
if (!tag) {
let kt = ctx.schema.knownTags[tagName];
if (kt?.collection === expType)
ctx.schema.tags.push(Object.assign({}, kt, { default: !1 })), tag = kt;
else
return kt ? onError(tagToken, "BAD_COLLECTION_TYPE", `${kt.tag} used for ${expType} collection, but expects ${kt.collection ?? "scalar"}`, !0) : onError(tagToken, "TAG_RESOLVE_FAILED", `Unresolved tag: ${tagName}`, !0), resolveCollection(CN, ctx, token, onError, tagName);
}
let coll = resolveCollection(CN, ctx, token, onError, tagName, tag), res = tag.resolve?.(coll, (msg) => onError(tagToken, "TAG_RESOLVE_FAILED", msg), ctx.options) ?? coll, node = identity3.isNode(res) ? res : new Scalar.Scalar(res);
return node.range = coll.range, node.tag = tagName, tag?.format && (node.format = tag.format), node;
}
exports.composeCollection = composeCollection;
}
});
// ../../node_modules/yaml/dist/compose/resolve-block-scalar.js
var require_resolve_block_scalar = __commonJS({
"../../node_modules/yaml/dist/compose/resolve-block-scalar.js"(exports) {
"use strict";
var Scalar = require_Scalar();
function resolveBlockScalar(ctx, scalar, onError) {
let start = scalar.offset, header = parseBlockScalarHeader(scalar, ctx.options.strict, onError);
if (!header)
return { value: "", type: null, comment: "", range: [start, start, start] };
let type = header.mode === ">" ? Scalar.Scalar.BLOCK_FOLDED : Scalar.Scalar.BLOCK_LITERAL, lines = scalar.source ? splitLines(scalar.source) : [], chompStart = lines.length;
for (let i2 = lines.length - 1; i2 >= 0; --i2) {
let content = lines[i2][1];
if (content === "" || content === "\r")
chompStart = i2;
else
break;
}
if (chompStart === 0) {
let value2 = header.chomp === "+" && lines.length > 0 ? `
`.repeat(Math.max(1, lines.length - 1)) : "", end2 = start + header.length;
return scalar.source && (end2 += scalar.source.length), { value: value2, type, comment: header.comment, range: [start, end2, end2] };
}
let trimIndent = scalar.indent + header.indent, offset = scalar.offset + header.length, contentStart = 0;
for (let i2 = 0; i2 < chompStart; ++i2) {
let [indent, content] = lines[i2];
if (content === "" || content === "\r")
header.indent === 0 && indent.length > trimIndent && (trimIndent = indent.length);
else {
indent.length < trimIndent && onError(offset + indent.length, "MISSING_CHAR", "Block scalars with more-indented leading empty lines must use an explicit indentation indicator"), header.indent === 0 && (trimIndent = indent.length), contentStart = i2, trimIndent === 0 && !ctx.atRoot && onError(offset, "BAD_INDENT", "Block scalar values in collections must be indented");
break;
}
offset += indent.length + content.length + 1;
}
for (let i2 = lines.length - 1; i2 >= chompStart; --i2)
lines[i2][0].length > trimIndent && (chompStart = i2 + 1);
let value = "", sep3 = "", prevMoreIndented = !1;
for (let i2 = 0; i2 < contentStart; ++i2)
value += lines[i2][0].slice(trimIndent) + `
`;
for (let i2 = contentStart; i2 < chompStart; ++i2) {
let [indent, content] = lines[i2];
offset += indent.length + content.length + 1;
let crlf = content[content.length - 1] === "\r";
if (crlf && (content = content.slice(0, -1)), content && indent.length < trimIndent) {
let message = `Block scalar lines must not be less indented than their ${header.indent ? "explicit indentation indicator" : "first line"}`;
onError(offset - content.length - (crlf ? 2 : 1), "BAD_INDENT", message), indent = "";
}
type === Scalar.Scalar.BLOCK_LITERAL ? (value += sep3 + indent.slice(trimIndent) + content, sep3 = `
`) : indent.length > trimIndent || content[0] === " " ? (sep3 === " " ? sep3 = `
` : !prevMoreIndented && sep3 === `
` && (sep3 = `
`), value += sep3 + indent.slice(trimIndent) + content, sep3 = `
`, prevMoreIndented = !0) : content === "" ? sep3 === `
` ? value += `
` : sep3 = `
` : (value += sep3 + content, sep3 = " ", prevMoreIndented = !1);
}
switch (header.chomp) {
case "-":
break;
case "+":
for (let i2 = chompStart; i2 < lines.length; ++i2)
value += `
` + lines[i2][0].slice(trimIndent);
value[value.length - 1] !== `
` && (value += `
`);
break;
default:
value += `
`;
}
let end = start + header.length + scalar.source.length;
return { value, type, comment: header.comment, range: [start, end, end] };
}
function parseBlockScalarHeader({ offset, props }, strict, onError) {
if (props[0].type !== "block-scalar-header")
return onError(props[0], "IMPOSSIBLE", "Block scalar header not found"), null;
let { source } = props[0], mode = source[0], indent = 0, chomp = "", error = -1;
for (let i2 = 1; i2 < source.length; ++i2) {
let ch = source[i2];
if (!chomp && (ch === "-" || ch === "+"))
chomp = ch;
else {
let n2 = Number(ch);
!indent && n2 ? indent = n2 : error === -1 && (error = offset + i2);
}
}
error !== -1 && onError(error, "UNEXPECTED_TOKEN", `Block scalar header includes extra characters: ${source}`);
let hasSpace = !1, comment = "", length = source.length;
for (let i2 = 1; i2 < props.length; ++i2) {
let token = props[i2];
switch (token.type) {
case "space":
hasSpace = !0;
// fallthrough
case "newline":
length += token.source.length;
break;
case "comment":
strict && !hasSpace && onError(token, "MISSING_CHAR", "Comments must be separated from other tokens by white space characters"), length += token.source.length, comment = token.source.substring(1);
break;
case "error":
onError(token, "UNEXPECTED_TOKEN", token.message), length += token.source.length;
break;
/* istanbul ignore next should not happen */
default: {
let message = `Unexpected token in block scalar header: ${token.type}`;
onError(token, "UNEXPECTED_TOKEN", message);
let ts = token.source;
ts && typeof ts == "string" && (length += ts.length);
}
}
}
return { mode, indent, chomp, comment, length };
}
function splitLines(source) {
let split = source.split(/\n( *)/), first = split[0], m = first.match(/^( *)/), lines = [m?.[1] ? [m[1], first.slice(m[1].length)] : ["", first]];
for (let i2 = 1; i2 < split.length; i2 += 2)
lines.push([split[i2], split[i2 + 1]]);
return lines;
}
exports.resolveBlockScalar = resolveBlockScalar;
}
});
// ../../node_modules/yaml/dist/compose/resolve-flow-scalar.js
var require_resolve_flow_scalar = __commonJS({
"../../node_modules/yaml/dist/compose/resolve-flow-scalar.js"(exports) {
"use strict";
var Scalar = require_Scalar(), resolveEnd = require_resolve_end();
function resolveFlowScalar(scalar, strict, onError) {
let { offset, type, source, end } = scalar, _type, value, _onError = (rel, code, msg) => onError(offset + rel, code, msg);
switch (type) {
case "scalar":
_type = Scalar.Scalar.PLAIN, value = plainValue(source, _onError);
break;
case "single-quoted-scalar":
_type = Scalar.Scalar.QUOTE_SINGLE, value = singleQuotedValue(source, _onError);
break;
case "double-quoted-scalar":
_type = Scalar.Scalar.QUOTE_DOUBLE, value = doubleQuotedValue(source, _onError);
break;
/* istanbul ignore next should not happen */
default:
return onError(scalar, "UNEXPECTED_TOKEN", `Expected a flow scalar value, but found: ${type}`), {
value: "",
type: null,
comment: "",
range: [offset, offset + source.length, offset + source.length]
};
}
let valueEnd = offset + source.length, re = resolveEnd.resolveEnd(end, valueEnd, strict, onError);
return {
value,
type: _type,
comment: re.comment,
range: [offset, valueEnd, re.offset]
};
}
function plainValue(source, onError) {
let badChar = "";
switch (source[0]) {
/* istanbul ignore next should not happen */
case " ":
badChar = "a tab character";
break;
case ",":
badChar = "flow indicator character ,";
break;
case "%":
badChar = "directive indicator character %";
break;
case "|":
case ">": {
badChar = `block scalar indicator ${source[0]}`;
break;
}
case "@":
case "`": {
badChar = `reserved character ${source[0]}`;
break;
}
}
return badChar && onError(0, "BAD_SCALAR_START", `Plain value cannot start with ${badChar}`), foldLines(source);
}
function singleQuotedValue(source, onError) {
return (source[source.length - 1] !== "'" || source.length === 1) && onError(source.length, "MISSING_CHAR", "Missing closing 'quote"), foldLines(source.slice(1, -1)).replace(/''/g, "'");
}
function foldLines(source) {
let first, line;
try {
first = new RegExp(`(.*?)(?<![ ])[ ]*\r?
`, "sy"), line = new RegExp(`[ ]*(.*?)(?:(?<![ ])[ ]*)?\r?
`, "sy");
} catch {
first = /(.*?)[ \t]*\r?\n/sy, line = /[ \t]*(.*?)[ \t]*\r?\n/sy;
}
let match = first.exec(source);
if (!match)
return source;
let res = match[1], sep3 = " ", pos = first.lastIndex;
for (line.lastIndex = pos; match = line.exec(source); )
match[1] === "" ? sep3 === `
` ? res += sep3 : sep3 = `
` : (res += sep3 + match[1], sep3 = " "), pos = line.lastIndex;
let last = /[ \t]*(.*)/sy;
return last.lastIndex = pos, match = last.exec(source), res + sep3 + (match?.[1] ?? "");
}
function doubleQuotedValue(source, onError) {
let res = "";
for (let i2 = 1; i2 < source.length - 1; ++i2) {
let ch = source[i2];
if (!(ch === "\r" && source[i2 + 1] === `
`))
if (ch === `
`) {
let { fold, offset } = foldNewline(source, i2);
res += fold, i2 = offset;
} else if (ch === "\\") {
let next = source[++i2], cc = escapeCodes[next];
if (cc)
res += cc;
else if (next === `
`)
for (next = source[i2 + 1]; next === " " || next === " "; )
next = source[++i2 + 1];
else if (next === "\r" && source[i2 + 1] === `
`)
for (next = source[++i2 + 1]; next === " " || next === " "; )
next = source[++i2 + 1];
else if (next === "x" || next === "u" || next === "U") {
let length = { x: 2, u: 4, U: 8 }[next];
res += parseCharCode(source, i2 + 1, length, onError), i2 += length;
} else {
let raw = source.substr(i2 - 1, 2);
onError(i2 - 1, "BAD_DQ_ESCAPE", `Invalid escape sequence ${raw}`), res += raw;
}
} else if (ch === " " || ch === " ") {
let wsStart = i2, next = source[i2 + 1];
for (; next === " " || next === " "; )
next = source[++i2 + 1];
next !== `
` && !(next === "\r" && source[i2 + 2] === `
`) && (res += i2 > wsStart ? source.slice(wsStart, i2 + 1) : ch);
} else
res += ch;
}
return (source[source.length - 1] !== '"' || source.length === 1) && onError(source.length, "MISSING_CHAR", 'Missing closing "quote'), res;
}
function foldNewline(source, offset) {
let fold = "", ch = source[offset + 1];
for (; (ch === " " || ch === " " || ch === `
` || ch === "\r") && !(ch === "\r" && source[offset + 2] !== `
`); )
ch === `
` && (fold += `
`), offset += 1, ch = source[offset + 1];
return fold || (fold = " "), { fold, offset };
}
var escapeCodes = {
0: "\0",
// null character
a: "\x07",
// bell character
b: "\b",
// backspace
e: "\x1B",
// escape character
f: "\f",
// form feed
n: `
`,
// line feed
r: "\r",
// carriage return
t: " ",
// horizontal tab
v: "\v",
// vertical tab
N: "\x85",
// Unicode next line
_: "\xA0",
// Unicode non-breaking space
L: "\u2028",
// Unicode line separator
P: "\u2029",
// Unicode paragraph separator
" ": " ",
'"': '"',
"/": "/",
"\\": "\\",
" ": " "
};
function parseCharCode(source, offset, length, onError) {
let cc = source.substr(offset, length), code = cc.length === length && /^[0-9a-fA-F]+$/.test(cc) ? parseInt(cc, 16) : NaN;
if (isNaN(code)) {
let raw = source.substr(offset - 2, length + 2);
return onError(offset - 2, "BAD_DQ_ESCAPE", `Invalid escape sequence ${raw}`), raw;
}
return String.fromCodePoint(code);
}
exports.resolveFlowScalar = resolveFlowScalar;
}
});
// ../../node_modules/yaml/dist/compose/compose-scalar.js
var require_compose_scalar = __commonJS({
"../../node_modules/yaml/dist/compose/compose-scalar.js"(exports) {
"use strict";
var identity3 = require_identity(), Scalar = require_Scalar(), resolveBlockScalar = require_resolve_block_scalar(), resolveFlowScalar = require_resolve_flow_scalar();
function composeScalar(ctx, token, tagToken, onError) {
let { value, type, comment, range } = token.type === "block-scalar" ? resolveBlockScalar.resolveBlockScalar(ctx, token, onError) : resolveFlowScalar.resolveFlowScalar(token, ctx.options.strict, onError), tagName = tagToken ? ctx.directives.tagName(tagToken.source, (msg) => onError(tagToken, "TAG_RESOLVE_FAILED", msg)) : null, tag;
ctx.options.stringKeys && ctx.atKey ? tag = ctx.schema[identity3.SCALAR] : tagName ? tag = findScalarTagByName(ctx.schema, value, tagName, tagToken, onError) : token.type === "scalar" ? tag = findScalarTagByTest(ctx, value, token, onError) : tag = ctx.schema[identity3.SCALAR];
let scalar;
try {
let res = tag.resolve(value, (msg) => onError(tagToken ?? token, "TAG_RESOLVE_FAILED", msg), ctx.options);
scalar = identity3.isScalar(res) ? res : new Scalar.Scalar(res);
} catch (error) {
let msg = error instanceof Error ? error.message : String(error);
onError(tagToken ?? token, "TAG_RESOLVE_FAILED", msg), scalar = new Scalar.Scalar(value);
}
return scalar.range = range, scalar.source = value, type && (scalar.type = type), tagName && (scalar.tag = tagName), tag.format && (scalar.format = tag.format), comment && (scalar.comment = comment), scalar;
}
function findScalarTagByName(schema, value, tagName, tagToken, onError) {
if (tagName === "!")
return schema[identity3.SCALAR];
let matchWithTest = [];
for (let tag of schema.tags)
if (!tag.collection && tag.tag === tagName)
if (tag.default && tag.test)
matchWithTest.push(tag);
else
return tag;
for (let tag of matchWithTest)
if (tag.test?.test(value))
return tag;
let kt = schema.knownTags[tagName];
return kt && !kt.collection ? (schema.tags.push(Object.assign({}, kt, { default: !1, test: void 0 })), kt) : (onError(tagToken, "TAG_RESOLVE_FAILED", `Unresolved tag: ${tagName}`, tagName !== "tag:yaml.org,2002:str"), schema[identity3.SCALAR]);
}
function findScalarTagByTest({ atKey, directives, schema }, value, token, onError) {
let tag = schema.tags.find((tag2) => (tag2.default === !0 || atKey && tag2.default === "key") && tag2.test?.test(value)) || schema[identity3.SCALAR];
if (schema.compat) {
let compat = schema.compat.find((tag2) => tag2.default && tag2.test?.test(value)) ?? schema[identity3.SCALAR];
if (tag.tag !== compat.tag) {
let ts = directives.tagString(tag.tag), cs = directives.tagString(compat.tag), msg = `Value may be parsed as either ${ts} or ${cs}`;
onError(token, "TAG_RESOLVE_FAILED", msg, !0);
}
}
return tag;
}
exports.composeScalar = composeScalar;
}
});
// ../../node_modules/yaml/dist/compose/util-empty-scalar-position.js
var require_util_empty_scalar_position = __commonJS({
"../../node_modules/yaml/dist/compose/util-empty-scalar-position.js"(exports) {
"use strict";
function emptyScalarPosition(offset, before, pos) {
if (before) {
pos ?? (pos = before.length);
for (let i2 = pos - 1; i2 >= 0; --i2) {
let st = before[i2];
switch (st.type) {
case "space":
case "comment":
case "newline":
offset -= st.source.length;
continue;
}
for (st = before[++i2]; st?.type === "space"; )
offset += st.source.length, st = before[++i2];
break;
}
}
return offset;
}
exports.emptyScalarPosition = emptyScalarPosition;
}
});
// ../../node_modules/yaml/dist/compose/compose-node.js
var require_compose_node = __commonJS({
"../../node_modules/yaml/dist/compose/compose-node.js"(exports) {
"use strict";
var Alias = require_Alias(), identity3 = require_identity(), composeCollection = require_compose_collection(), composeScalar = require_compose_scalar(), resolveEnd = require_resolve_end(), utilEmptyScalarPosition = require_util_empty_scalar_position(), CN = { composeNode, composeEmptyNode };
function composeNode(ctx, token, props, onError) {
let atKey = ctx.atKey, { spaceBefore, comment, anchor, tag } = props, node, isSrcToken = !0;
switch (token.type) {
case "alias":
node = composeAlias(ctx, token, onError), (anchor || tag) && onError(token, "ALIAS_PROPS", "An alias node must not specify any properties");
break;
case "scalar":
case "single-quoted-scalar":
case "double-quoted-scalar":
case "block-scalar":
node = composeScalar.composeScalar(ctx, token, tag, onError), anchor && (node.anchor = anchor.source.substring(1));
break;
case "block-map":
case "block-seq":
case "flow-collection":
node = composeCollection.composeCollection(CN, ctx, token, props, onError), anchor && (node.anchor = anchor.source.substring(1));
break;
default: {
let message = token.type === "error" ? token.message : `Unsupported token (type: ${token.type})`;
onError(token, "UNEXPECTED_TOKEN", message), node = composeEmptyNode(ctx, token.offset, void 0, null, props, onError), isSrcToken = !1;
}
}
return anchor && node.anchor === "" && onError(anchor, "BAD_ALIAS", "Anchor cannot be an empty string"), atKey && ctx.options.stringKeys && (!identity3.isScalar(node) || typeof node.value != "string" || node.tag && node.tag !== "tag:yaml.org,2002:str") && onError(tag ?? token, "NON_STRING_KEY", "With stringKeys, all keys must be strings"), spaceBefore && (node.spaceBefore = !0), comment && (token.type === "scalar" && token.source === "" ? node.comment = comment : node.commentBefore = comment), ctx.options.keepSourceTokens && isSrcToken && (node.srcToken = token), node;
}
function composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag, end }, onError) {
let token = {
type: "scalar",
offset: utilEmptyScalarPosition.emptyScalarPosition(offset, before, pos),
indent: -1,
source: ""
}, node = composeScalar.composeScalar(ctx, token, tag, onError);
return anchor && (node.anchor = anchor.source.substring(1), node.anchor === "" && onError(anchor, "BAD_ALIAS", "Anchor cannot be an empty string")), spaceBefore && (node.spaceBefore = !0), comment && (node.comment = comment, node.range[2] = end), node;
}
function composeAlias({ options }, { offset, source, end }, onError) {
let alias = new Alias.Alias(source.substring(1));
alias.source === "" && onError(offset, "BAD_ALIAS", "Alias cannot be an empty string"), alias.source.endsWith(":") && onError(offset + source.length - 1, "BAD_ALIAS", "Alias ending in : is ambiguous", !0);
let valueEnd = offset + source.length, re = resolveEnd.resolveEnd(end, valueEnd, options.strict, onError);
return alias.range = [offset, valueEnd, re.offset], re.comment && (alias.comment = re.comment), alias;
}
exports.composeEmptyNode = composeEmptyNode;
exports.composeNode = composeNode;
}
});
// ../../node_modules/yaml/dist/compose/compose-doc.js
var require_compose_doc = __commonJS({
"../../node_modules/yaml/dist/compose/compose-doc.js"(exports) {
"use strict";
var Document = require_Document(), composeNode = require_compose_node(), resolveEnd = require_resolve_end(), resolveProps = require_resolve_props();
function composeDoc(options, directives, { offset, start, value, end }, onError) {
let opts = Object.assign({ _directives: directives }, options), doc = new Document.Document(void 0, opts), ctx = {
atKey: !1,
atRoot: !0,
directives: doc.directives,
options: doc.options,
schema: doc.schema
}, props = resolveProps.resolveProps(start, {
indicator: "doc-start",
next: value ?? end?.[0],
offset,
onError,
parentIndent: 0,
startOnNewline: !0
});
props.found && (doc.directives.docStart = !0, value && (value.type === "block-map" || value.type === "block-seq") && !props.hasNewline && onError(props.end, "MISSING_CHAR", "Block collection cannot start on same line with directives-end marker")), doc.contents = value ? composeNode.composeNode(ctx, value, props, onError) : composeNode.composeEmptyNode(ctx, props.end, start, null, props, onError);
let contentEnd = doc.contents.range[2], re = resolveEnd.resolveEnd(end, contentEnd, !1, onError);
return re.comment && (doc.comment = re.comment), doc.range = [offset, contentEnd, re.offset], doc;
}
exports.composeDoc = composeDoc;
}
});
// ../../node_modules/yaml/dist/compose/composer.js
var require_composer = __commonJS({
"../../node_modules/yaml/dist/compose/composer.js"(exports) {
"use strict";
var node_process = __require("process"), directives = require_directives(), Document = require_Document(), errors = require_errors(), identity3 = require_identity(), composeDoc = require_compose_doc(), resolveEnd = require_resolve_end();
function getErrorPos(src) {
if (typeof src == "number")
return [src, src + 1];
if (Array.isArray(src))
return src.length === 2 ? src : [src[0], src[1]];
let { offset, source } = src;
return [offset, offset + (typeof source == "string" ? source.length : 1)];
}
function parsePrelude(prelude) {
let comment = "", atComment = !1, afterEmptyLine = !1;
for (let i2 = 0; i2 < prelude.length; ++i2) {
let source = prelude[i2];
switch (source[0]) {
case "#":
comment += (comment === "" ? "" : afterEmptyLine ? `
` : `
`) + (source.substring(1) || " "), atComment = !0, afterEmptyLine = !1;
break;
case "%":
prelude[i2 + 1]?.[0] !== "#" && (i2 += 1), atComment = !1;
break;
default:
atComment || (afterEmptyLine = !0), atComment = !1;
}
}
return { comment, afterEmptyLine };
}
var Composer = class {
constructor(options = {}) {
this.doc = null, this.atDirectives = !1, this.prelude = [], this.errors = [], this.warnings = [], this.onError = (source, code, message, warning) => {
let pos = getErrorPos(source);
warning ? this.warnings.push(new errors.YAMLWarning(pos, code, message)) : this.errors.push(new errors.YAMLParseError(pos, code, message));
}, this.directives = new directives.Directives({ version: options.version || "1.2" }), this.options = options;
}
decorate(doc, afterDoc) {
let { comment, afterEmptyLine } = parsePrelude(this.prelude);
if (comment) {
let dc = doc.contents;
if (afterDoc)
doc.comment = doc.comment ? `${doc.comment}
${comment}` : comment;
else if (afterEmptyLine || doc.directives.docStart || !dc)
doc.commentBefore = comment;
else if (identity3.isCollection(dc) && !dc.flow && dc.items.length > 0) {
let it = dc.items[0];
identity3.isPair(it) && (it = it.key);
let cb = it.commentBefore;
it.commentBefore = cb ? `${comment}
${cb}` : comment;
} else {
let cb = dc.commentBefore;
dc.commentBefore = cb ? `${comment}
${cb}` : comment;
}
}
afterDoc ? (Array.prototype.push.apply(doc.errors, this.errors), Array.prototype.push.apply(doc.warnings, this.warnings)) : (doc.errors = this.errors, doc.warnings = this.warnings), this.prelude = [], this.errors = [], this.warnings = [];
}
/**
* Current stream status information.
*
* Mostly useful at the end of input for an empty stream.
*/
streamInfo() {
return {
comment: parsePrelude(this.prelude).comment,
directives: this.directives,
errors: this.errors,
warnings: this.warnings
};
}
/**
* Compose tokens into documents.
*
* @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.
* @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.
*/
*compose(tokens, forceDoc = !1, endOffset = -1) {
for (let token of tokens)
yield* this.next(token);
yield* this.end(forceDoc, endOffset);
}
/** Advance the composer by one CST token. */
*next(token) {
switch (node_process.env.LOG_STREAM && console.dir(token, { depth: null }), token.type) {
case "directive":
this.directives.add(token.source, (offset, message, warning) => {
let pos = getErrorPos(token);
pos[0] += offset, this.onError(pos, "BAD_DIRECTIVE", message, warning);
}), this.prelude.push(token.source), this.atDirectives = !0;
break;
case "document": {
let doc = composeDoc.composeDoc(this.options, this.directives, token, this.onError);
this.atDirectives && !doc.directives.docStart && this.onError(token, "MISSING_CHAR", "Missing directives-end/doc-start indicator line"), this.decorate(doc, !1), this.doc && (yield this.doc), this.doc = doc, this.atDirectives = !1;
break;
}
case "byte-order-mark":
case "space":
break;
case "comment":
case "newline":
this.prelude.push(token.source);
break;
case "error": {
let msg = token.source ? `${token.message}: ${JSON.stringify(token.source)}` : token.message, error = new errors.YAMLParseError(getErrorPos(token), "UNEXPECTED_TOKEN", msg);
this.atDirectives || !this.doc ? this.errors.push(error) : this.doc.errors.push(error);
break;
}
case "doc-end": {
if (!this.doc) {
let msg = "Unexpected doc-end without preceding document";
this.errors.push(new errors.YAMLParseError(getErrorPos(token), "UNEXPECTED_TOKEN", msg));
break;
}
this.doc.directives.docEnd = !0;
let end = resolveEnd.resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError);
if (this.decorate(this.doc, !0), end.comment) {
let dc = this.doc.comment;
this.doc.comment = dc ? `${dc}
${end.comment}` : end.comment;
}
this.doc.range[2] = end.offset;
break;
}
default:
this.errors.push(new errors.YAMLParseError(getErrorPos(token), "UNEXPECTED_TOKEN", `Unsupported token ${token.type}`));
}
}
/**
* Call at end of input to yield any remaining document.
*
* @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.
* @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.
*/
*end(forceDoc = !1, endOffset = -1) {
if (this.doc)
this.decorate(this.doc, !0), yield this.doc, this.doc = null;
else if (forceDoc) {
let opts = Object.assign({ _directives: this.directives }, this.options), doc = new Document.Document(void 0, opts);
this.atDirectives && this.onError(endOffset, "MISSING_CHAR", "Missing directives-end indicator line"), doc.range = [0, endOffset, endOffset], this.decorate(doc, !1), yield doc;
}
}
};
exports.Composer = Composer;
}
});
// ../../node_modules/yaml/dist/parse/cst-scalar.js
var require_cst_scalar = __commonJS({
"../../node_modules/yaml/dist/parse/cst-scalar.js"(exports) {
"use strict";
var resolveBlockScalar = require_resolve_block_scalar(), resolveFlowScalar = require_resolve_flow_scalar(), errors = require_errors(), stringifyString = require_stringifyString();
function resolveAsScalar(token, strict = !0, onError) {
if (token) {
let _onError = (pos, code, message) => {
let offset = typeof pos == "number" ? pos : Array.isArray(pos) ? pos[0] : pos.offset;
if (onError)
onError(offset, code, message);
else
throw new errors.YAMLParseError([offset, offset + 1], code, message);
};
switch (token.type) {
case "scalar":
case "single-quoted-scalar":
case "double-quoted-scalar":
return resolveFlowScalar.resolveFlowScalar(token, strict, _onError);
case "block-scalar":
return resolveBlockScalar.resolveBlockScalar({ options: { strict } }, token, _onError);
}
}
return null;
}
function createScalarToken(value, context) {
let { implicitKey = !1, indent, inFlow = !1, offset = -1, type = "PLAIN" } = context, source = stringifyString.stringifyString({ type, value }, {
implicitKey,
indent: indent > 0 ? " ".repeat(indent) : "",
inFlow,
options: { blockQuote: !0, lineWidth: -1 }
}), end = context.end ?? [
{ type: "newline", offset: -1, indent, source: `
` }
];
switch (source[0]) {
case "|":
case ">": {
let he = source.indexOf(`
`), head = source.substring(0, he), body = source.substring(he + 1) + `
`, props = [
{ type: "block-scalar-header", offset, indent, source: head }
];
return addEndtoBlockProps(props, end) || props.push({ type: "newline", offset: -1, indent, source: `
` }), { type: "block-scalar", offset, indent, props, source: body };
}
case '"':
return { type: "double-quoted-scalar", offset, indent, source, end };
case "'":
return { type: "single-quoted-scalar", offset, indent, source, end };
default:
return { type: "scalar", offset, indent, source, end };
}
}
function setScalarValue(token, value, context = {}) {
let { afterKey = !1, implicitKey = !1, inFlow = !1, type } = context, indent = "indent" in token ? token.indent : null;
if (afterKey && typeof indent == "number" && (indent += 2), !type)
switch (token.type) {
case "single-quoted-scalar":
type = "QUOTE_SINGLE";
break;
case "double-quoted-scalar":
type = "QUOTE_DOUBLE";
break;
case "block-scalar": {
let header = token.props[0];
if (header.type !== "block-scalar-header")
throw new Error("Invalid block scalar header");
type = header.source[0] === ">" ? "BLOCK_FOLDED" : "BLOCK_LITERAL";
break;
}
default:
type = "PLAIN";
}
let source = stringifyString.stringifyString({ type, value }, {
implicitKey: implicitKey || indent === null,
indent: indent !== null && indent > 0 ? " ".repeat(indent) : "",
inFlow,
options: { blockQuote: !0, lineWidth: -1 }
});
switch (source[0]) {
case "|":
case ">":
setBlockScalarValue(token, source);
break;
case '"':
setFlowScalarValue(token, source, "double-quoted-scalar");
break;
case "'":
setFlowScalarValue(token, source, "single-quoted-scalar");
break;
default:
setFlowScalarValue(token, source, "scalar");
}
}
function setBlockScalarValue(token, source) {
let he = source.indexOf(`
`), head = source.substring(0, he), body = source.substring(he + 1) + `
`;
if (token.type === "block-scalar") {
let header = token.props[0];
if (header.type !== "block-scalar-header")
throw new Error("Invalid block scalar header");
header.source = head, token.source = body;
} else {
let { offset } = token, indent = "indent" in token ? token.indent : -1, props = [
{ type: "block-scalar-header", offset, indent, source: head }
];
addEndtoBlockProps(props, "end" in token ? token.end : void 0) || props.push({ type: "newline", offset: -1, indent, source: `
` });
for (let key of Object.keys(token))
key !== "type" && key !== "offset" && delete token[key];
Object.assign(token, { type: "block-scalar", indent, props, source: body });
}
}
function addEndtoBlockProps(props, end) {
if (end)
for (let st of end)
switch (st.type) {
case "space":
case "comment":
props.push(st);
break;
case "newline":
return props.push(st), !0;
}
return !1;
}
function setFlowScalarValue(token, source, type) {
switch (token.type) {
case "scalar":
case "double-quoted-scalar":
case "single-quoted-scalar":
token.type = type, token.source = source;
break;
case "block-scalar": {
let end = token.props.slice(1), oa = source.length;
token.props[0].type === "block-scalar-header" && (oa -= token.props[0].source.length);
for (let tok of end)
tok.offset += oa;
delete token.props, Object.assign(token, { type, source, end });
break;
}
case "block-map":
case "block-seq": {
let nl = { type: "newline", offset: token.offset + source.length, indent: token.indent, source: `
` };
delete token.items, Object.assign(token, { type, source, end: [nl] });
break;
}
default: {
let indent = "indent" in token ? token.indent : -1, end = "end" in token && Array.isArray(token.end) ? token.end.filter((st) => st.type === "space" || st.type === "comment" || st.type === "newline") : [];
for (let key of Object.keys(token))
key !== "type" && key !== "offset" && delete token[key];
Object.assign(token, { type, indent, source, end });
}
}
}
exports.createScalarToken = createScalarToken;
exports.resolveAsScalar = resolveAsScalar;
exports.setScalarValue = setScalarValue;
}
});
// ../../node_modules/yaml/dist/parse/cst-stringify.js
var require_cst_stringify = __commonJS({
"../../node_modules/yaml/dist/parse/cst-stringify.js"(exports) {
"use strict";
var stringify = (cst) => "type" in cst ? stringifyToken(cst) : stringifyItem(cst);
function stringifyToken(token) {
switch (token.type) {
case "block-scalar": {
let res = "";
for (let tok of token.props)
res += stringifyToken(tok);
return res + token.source;
}
case "block-map":
case "block-seq": {
let res = "";
for (let item of token.items)
res += stringifyItem(item);
return res;
}
case "flow-collection": {
let res = token.start.source;
for (let item of token.items)
res += stringifyItem(item);
for (let st of token.end)
res += st.source;
return res;
}
case "document": {
let res = stringifyItem(token);
if (token.end)
for (let st of token.end)
res += st.source;
return res;
}
default: {
let res = token.source;
if ("end" in token && token.end)
for (let st of token.end)
res += st.source;
return res;
}
}
}
function stringifyItem({ start, key, sep: sep3, value }) {
let res = "";
for (let st of start)
res += st.source;
if (key && (res += stringifyToken(key)), sep3)
for (let st of sep3)
res += st.source;
return value && (res += stringifyToken(value)), res;
}
exports.stringify = stringify;
}
});
// ../../node_modules/yaml/dist/parse/cst-visit.js
var require_cst_visit = __commonJS({
"../../node_modules/yaml/dist/parse/cst-visit.js"(exports) {
"use strict";
var BREAK = /* @__PURE__ */ Symbol("break visit"), SKIP = /* @__PURE__ */ Symbol("skip children"), REMOVE = /* @__PURE__ */ Symbol("remove item");
function visit(cst, visitor) {
"type" in cst && cst.type === "document" && (cst = { start: cst.start, value: cst.value }), _visit(Object.freeze([]), cst, visitor);
}
visit.BREAK = BREAK;
visit.SKIP = SKIP;
visit.REMOVE = REMOVE;
visit.itemAtPath = (cst, path5) => {
let item = cst;
for (let [field, index] of path5) {
let tok = item?.[field];
if (tok && "items" in tok)
item = tok.items[index];
else
return;
}
return item;
};
visit.parentCollection = (cst, path5) => {
let parent = visit.itemAtPath(cst, path5.slice(0, -1)), field = path5[path5.length - 1][0], coll = parent?.[field];
if (coll && "items" in coll)
return coll;
throw new Error("Parent collection not found");
};
function _visit(path5, item, visitor) {
let ctrl = visitor(item, path5);
if (typeof ctrl == "symbol")
return ctrl;
for (let field of ["key", "value"]) {
let token = item[field];
if (token && "items" in token) {
for (let i2 = 0; i2 < token.items.length; ++i2) {
let ci = _visit(Object.freeze(path5.concat([[field, i2]])), token.items[i2], visitor);
if (typeof ci == "number")
i2 = ci - 1;
else {
if (ci === BREAK)
return BREAK;
ci === REMOVE && (token.items.splice(i2, 1), i2 -= 1);
}
}
typeof ctrl == "function" && field === "key" && (ctrl = ctrl(item, path5));
}
}
return typeof ctrl == "function" ? ctrl(item, path5) : ctrl;
}
exports.visit = visit;
}
});
// ../../node_modules/yaml/dist/parse/cst.js
var require_cst = __commonJS({
"../../node_modules/yaml/dist/parse/cst.js"(exports) {
"use strict";
var cstScalar = require_cst_scalar(), cstStringify = require_cst_stringify(), cstVisit = require_cst_visit(), BOM = "\uFEFF", DOCUMENT = "", FLOW_END = "", SCALAR = "", isCollection = (token) => !!token && "items" in token, isScalar = (token) => !!token && (token.type === "scalar" || token.type === "single-quoted-scalar" || token.type === "double-quoted-scalar" || token.type === "block-scalar");
function prettyToken(token) {
switch (token) {
case BOM:
return "<BOM>";
case DOCUMENT:
return "<DOC>";
case FLOW_END:
return "<FLOW_END>";
case SCALAR:
return "<SCALAR>";
default:
return JSON.stringify(token);
}
}
function tokenType(source) {
switch (source) {
case BOM:
return "byte-order-mark";
case DOCUMENT:
return "doc-mode";
case FLOW_END:
return "flow-error-end";
case SCALAR:
return "scalar";
case "---":
return "doc-start";
case "...":
return "doc-end";
case "":
case `
`:
case `\r
`:
return "newline";
case "-":
return "seq-item-ind";
case "?":
return "explicit-key-ind";
case ":":
return "map-value-ind";
case "{":
return "flow-map-start";
case "}":
return "flow-map-end";
case "[":
return "flow-seq-start";
case "]":
return "flow-seq-end";
case ",":
return "comma";
}
switch (source[0]) {
case " ":
case " ":
return "space";
case "#":
return "comment";
case "%":
return "directive-line";
case "*":
return "alias";
case "&":
return "anchor";
case "!":
return "tag";
case "'":
return "single-quoted-scalar";
case '"':
return "double-quoted-scalar";
case "|":
case ">":
return "block-scalar-header";
}
return null;
}
exports.createScalarToken = cstScalar.createScalarToken;
exports.resolveAsScalar = cstScalar.resolveAsScalar;
exports.setScalarValue = cstScalar.setScalarValue;
exports.stringify = cstStringify.stringify;
exports.visit = cstVisit.visit;
exports.BOM = BOM;
exports.DOCUMENT = DOCUMENT;
exports.FLOW_END = FLOW_END;
exports.SCALAR = SCALAR;
exports.isCollection = isCollection;
exports.isScalar = isScalar;
exports.prettyToken = prettyToken;
exports.tokenType = tokenType;
}
});
// ../../node_modules/yaml/dist/parse/lexer.js
var require_lexer = __commonJS({
"../../node_modules/yaml/dist/parse/lexer.js"(exports) {
"use strict";
var cst = require_cst();
function isEmpty(ch) {
switch (ch) {
case void 0:
case " ":
case `
`:
case "\r":
case " ":
return !0;
default:
return !1;
}
}
var hexDigits = new Set("0123456789ABCDEFabcdef"), tagChars = new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"), flowIndicatorChars = new Set(",[]{}"), invalidAnchorChars = new Set(` ,[]{}
\r `), isNotAnchorChar = (ch) => !ch || invalidAnchorChars.has(ch), Lexer = class {
constructor() {
this.atEnd = !1, this.blockScalarIndent = -1, this.blockScalarKeep = !1, this.buffer = "", this.flowKey = !1, this.flowLevel = 0, this.indentNext = 0, this.indentValue = 0, this.lineEndPos = null, this.next = null, this.pos = 0;
}
/**
* Generate YAML tokens from the `source` string. If `incomplete`,
* a part of the last line may be left as a buffer for the next call.
*
* @returns A generator of lexical tokens
*/
*lex(source, incomplete = !1) {
if (source) {
if (typeof source != "string")
throw TypeError("source is not a string");
this.buffer = this.buffer ? this.buffer + source : source, this.lineEndPos = null;
}
this.atEnd = !incomplete;
let next = this.next ?? "stream";
for (; next && (incomplete || this.hasChars(1)); )
next = yield* this.parseNext(next);
}
atLineEnd() {
let i2 = this.pos, ch = this.buffer[i2];
for (; ch === " " || ch === " "; )
ch = this.buffer[++i2];
return !ch || ch === "#" || ch === `
` ? !0 : ch === "\r" ? this.buffer[i2 + 1] === `
` : !1;
}
charAt(n2) {
return this.buffer[this.pos + n2];
}
continueScalar(offset) {
let ch = this.buffer[offset];
if (this.indentNext > 0) {
let indent = 0;
for (; ch === " "; )
ch = this.buffer[++indent + offset];
if (ch === "\r") {
let next = this.buffer[indent + offset + 1];
if (next === `
` || !next && !this.atEnd)
return offset + indent + 1;
}
return ch === `
` || indent >= this.indentNext || !ch && !this.atEnd ? offset + indent : -1;
}
if (ch === "-" || ch === ".") {
let dt = this.buffer.substr(offset, 3);
if ((dt === "---" || dt === "...") && isEmpty(this.buffer[offset + 3]))
return -1;
}
return offset;
}
getLine() {
let end = this.lineEndPos;
return (typeof end != "number" || end !== -1 && end < this.pos) && (end = this.buffer.indexOf(`
`, this.pos), this.lineEndPos = end), end === -1 ? this.atEnd ? this.buffer.substring(this.pos) : null : (this.buffer[end - 1] === "\r" && (end -= 1), this.buffer.substring(this.pos, end));
}
hasChars(n2) {
return this.pos + n2 <= this.buffer.length;
}
setNext(state) {
return this.buffer = this.buffer.substring(this.pos), this.pos = 0, this.lineEndPos = null, this.next = state, null;
}
peek(n2) {
return this.buffer.substr(this.pos, n2);
}
*parseNext(next) {
switch (next) {
case "stream":
return yield* this.parseStream();
case "line-start":
return yield* this.parseLineStart();
case "block-start":
return yield* this.parseBlockStart();
case "doc":
return yield* this.parseDocument();
case "flow":
return yield* this.parseFlowCollection();
case "quoted-scalar":
return yield* this.parseQuotedScalar();
case "block-scalar":
return yield* this.parseBlockScalar();
case "plain-scalar":
return yield* this.parsePlainScalar();
}
}
*parseStream() {
let line = this.getLine();
if (line === null)
return this.setNext("stream");
if (line[0] === cst.BOM && (yield* this.pushCount(1), line = line.substring(1)), line[0] === "%") {
let dirEnd = line.length, cs = line.indexOf("#");
for (; cs !== -1; ) {
let ch = line[cs - 1];
if (ch === " " || ch === " ") {
dirEnd = cs - 1;
break;
} else
cs = line.indexOf("#", cs + 1);
}
for (; ; ) {
let ch = line[dirEnd - 1];
if (ch === " " || ch === " ")
dirEnd -= 1;
else
break;
}
let n2 = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(!0));
return yield* this.pushCount(line.length - n2), this.pushNewline(), "stream";
}
if (this.atLineEnd()) {
let sp = yield* this.pushSpaces(!0);
return yield* this.pushCount(line.length - sp), yield* this.pushNewline(), "stream";
}
return yield cst.DOCUMENT, yield* this.parseLineStart();
}
*parseLineStart() {
let ch = this.charAt(0);
if (!ch && !this.atEnd)
return this.setNext("line-start");
if (ch === "-" || ch === ".") {
if (!this.atEnd && !this.hasChars(4))
return this.setNext("line-start");
let s = this.peek(3);
if ((s === "---" || s === "...") && isEmpty(this.charAt(3)))
return yield* this.pushCount(3), this.indentValue = 0, this.indentNext = 0, s === "---" ? "doc" : "stream";
}
return this.indentValue = yield* this.pushSpaces(!1), this.indentNext > this.indentValue && !isEmpty(this.charAt(1)) && (this.indentNext = this.indentValue), yield* this.parseBlockStart();
}
*parseBlockStart() {
let [ch0, ch1] = this.peek(2);
if (!ch1 && !this.atEnd)
return this.setNext("block-start");
if ((ch0 === "-" || ch0 === "?" || ch0 === ":") && isEmpty(ch1)) {
let n2 = (yield* this.pushCount(1)) + (yield* this.pushSpaces(!0));
return this.indentNext = this.indentValue + 1, this.indentValue += n2, yield* this.parseBlockStart();
}
return "doc";
}
*parseDocument() {
yield* this.pushSpaces(!0);
let line = this.getLine();
if (line === null)
return this.setNext("doc");
let n2 = yield* this.pushIndicators();
switch (line[n2]) {
case "#":
yield* this.pushCount(line.length - n2);
// fallthrough
case void 0:
return yield* this.pushNewline(), yield* this.parseLineStart();
case "{":
case "[":
return yield* this.pushCount(1), this.flowKey = !1, this.flowLevel = 1, "flow";
case "}":
case "]":
return yield* this.pushCount(1), "doc";
case "*":
return yield* this.pushUntil(isNotAnchorChar), "doc";
case '"':
case "'":
return yield* this.parseQuotedScalar();
case "|":
case ">":
return n2 += yield* this.parseBlockScalarHeader(), n2 += yield* this.pushSpaces(!0), yield* this.pushCount(line.length - n2), yield* this.pushNewline(), yield* this.parseBlockScalar();
default:
return yield* this.parsePlainScalar();
}
}
*parseFlowCollection() {
let nl, sp, indent = -1;
do
nl = yield* this.pushNewline(), nl > 0 ? (sp = yield* this.pushSpaces(!1), this.indentValue = indent = sp) : sp = 0, sp += yield* this.pushSpaces(!0);
while (nl + sp > 0);
let line = this.getLine();
if (line === null)
return this.setNext("flow");
if ((indent !== -1 && indent < this.indentNext && line[0] !== "#" || indent === 0 && (line.startsWith("---") || line.startsWith("...")) && isEmpty(line[3])) && !(indent === this.indentNext - 1 && this.flowLevel === 1 && (line[0] === "]" || line[0] === "}")))
return this.flowLevel = 0, yield cst.FLOW_END, yield* this.parseLineStart();
let n2 = 0;
for (; line[n2] === ","; )
n2 += yield* this.pushCount(1), n2 += yield* this.pushSpaces(!0), this.flowKey = !1;
switch (n2 += yield* this.pushIndicators(), line[n2]) {
case void 0:
return "flow";
case "#":
return yield* this.pushCount(line.length - n2), "flow";
case "{":
case "[":
return yield* this.pushCount(1), this.flowKey = !1, this.flowLevel += 1, "flow";
case "}":
case "]":
return yield* this.pushCount(1), this.flowKey = !0, this.flowLevel -= 1, this.flowLevel ? "flow" : "doc";
case "*":
return yield* this.pushUntil(isNotAnchorChar), "flow";
case '"':
case "'":
return this.flowKey = !0, yield* this.parseQuotedScalar();
case ":": {
let next = this.charAt(1);
if (this.flowKey || isEmpty(next) || next === ",")
return this.flowKey = !1, yield* this.pushCount(1), yield* this.pushSpaces(!0), "flow";
}
// fallthrough
default:
return this.flowKey = !1, yield* this.parsePlainScalar();
}
}
*parseQuotedScalar() {
let quote = this.charAt(0), end = this.buffer.indexOf(quote, this.pos + 1);
if (quote === "'")
for (; end !== -1 && this.buffer[end + 1] === "'"; )
end = this.buffer.indexOf("'", end + 2);
else
for (; end !== -1; ) {
let n2 = 0;
for (; this.buffer[end - 1 - n2] === "\\"; )
n2 += 1;
if (n2 % 2 === 0)
break;
end = this.buffer.indexOf('"', end + 1);
}
let qb = this.buffer.substring(0, end), nl = qb.indexOf(`
`, this.pos);
if (nl !== -1) {
for (; nl !== -1; ) {
let cs = this.continueScalar(nl + 1);
if (cs === -1)
break;
nl = qb.indexOf(`
`, cs);
}
nl !== -1 && (end = nl - (qb[nl - 1] === "\r" ? 2 : 1));
}
if (end === -1) {
if (!this.atEnd)
return this.setNext("quoted-scalar");
end = this.buffer.length;
}
return yield* this.pushToIndex(end + 1, !1), this.flowLevel ? "flow" : "doc";
}
*parseBlockScalarHeader() {
this.blockScalarIndent = -1, this.blockScalarKeep = !1;
let i2 = this.pos;
for (; ; ) {
let ch = this.buffer[++i2];
if (ch === "+")
this.blockScalarKeep = !0;
else if (ch > "0" && ch <= "9")
this.blockScalarIndent = Number(ch) - 1;
else if (ch !== "-")
break;
}
return yield* this.pushUntil((ch) => isEmpty(ch) || ch === "#");
}
*parseBlockScalar() {
let nl = this.pos - 1, indent = 0, ch;
loop: for (let i3 = this.pos; ch = this.buffer[i3]; ++i3)
switch (ch) {
case " ":
indent += 1;
break;
case `
`:
nl = i3, indent = 0;
break;
case "\r": {
let next = this.buffer[i3 + 1];
if (!next && !this.atEnd)
return this.setNext("block-scalar");
if (next === `
`)
break;
}
// fallthrough
default:
break loop;
}
if (!ch && !this.atEnd)
return this.setNext("block-scalar");
if (indent >= this.indentNext) {
this.blockScalarIndent === -1 ? this.indentNext = indent : this.indentNext = this.blockScalarIndent + (this.indentNext === 0 ? 1 : this.indentNext);
do {
let cs = this.continueScalar(nl + 1);
if (cs === -1)
break;
nl = this.buffer.indexOf(`
`, cs);
} while (nl !== -1);
if (nl === -1) {
if (!this.atEnd)
return this.setNext("block-scalar");
nl = this.buffer.length;
}
}
let i2 = nl + 1;
for (ch = this.buffer[i2]; ch === " "; )
ch = this.buffer[++i2];
if (ch === " ") {
for (; ch === " " || ch === " " || ch === "\r" || ch === `
`; )
ch = this.buffer[++i2];
nl = i2 - 1;
} else if (!this.blockScalarKeep)
do {
let i3 = nl - 1, ch2 = this.buffer[i3];
ch2 === "\r" && (ch2 = this.buffer[--i3]);
let lastChar = i3;
for (; ch2 === " "; )
ch2 = this.buffer[--i3];
if (ch2 === `
` && i3 >= this.pos && i3 + 1 + indent > lastChar)
nl = i3;
else
break;
} while (!0);
return yield cst.SCALAR, yield* this.pushToIndex(nl + 1, !0), yield* this.parseLineStart();
}
*parsePlainScalar() {
let inFlow = this.flowLevel > 0, end = this.pos - 1, i2 = this.pos - 1, ch;
for (; ch = this.buffer[++i2]; )
if (ch === ":") {
let next = this.buffer[i2 + 1];
if (isEmpty(next) || inFlow && flowIndicatorChars.has(next))
break;
end = i2;
} else if (isEmpty(ch)) {
let next = this.buffer[i2 + 1];
if (ch === "\r" && (next === `
` ? (i2 += 1, ch = `
`, next = this.buffer[i2 + 1]) : end = i2), next === "#" || inFlow && flowIndicatorChars.has(next))
break;
if (ch === `
`) {
let cs = this.continueScalar(i2 + 1);
if (cs === -1)
break;
i2 = Math.max(i2, cs - 2);
}
} else {
if (inFlow && flowIndicatorChars.has(ch))
break;
end = i2;
}
return !ch && !this.atEnd ? this.setNext("plain-scalar") : (yield cst.SCALAR, yield* this.pushToIndex(end + 1, !0), inFlow ? "flow" : "doc");
}
*pushCount(n2) {
return n2 > 0 ? (yield this.buffer.substr(this.pos, n2), this.pos += n2, n2) : 0;
}
*pushToIndex(i2, allowEmpty) {
let s = this.buffer.slice(this.pos, i2);
return s ? (yield s, this.pos += s.length, s.length) : (allowEmpty && (yield ""), 0);
}
*pushIndicators() {
switch (this.charAt(0)) {
case "!":
return (yield* this.pushTag()) + (yield* this.pushSpaces(!0)) + (yield* this.pushIndicators());
case "&":
return (yield* this.pushUntil(isNotAnchorChar)) + (yield* this.pushSpaces(!0)) + (yield* this.pushIndicators());
case "-":
// this is an error
case "?":
// this is an error outside flow collections
case ":": {
let inFlow = this.flowLevel > 0, ch1 = this.charAt(1);
if (isEmpty(ch1) || inFlow && flowIndicatorChars.has(ch1))
return inFlow ? this.flowKey && (this.flowKey = !1) : this.indentNext = this.indentValue + 1, (yield* this.pushCount(1)) + (yield* this.pushSpaces(!0)) + (yield* this.pushIndicators());
}
}
return 0;
}
*pushTag() {
if (this.charAt(1) === "<") {
let i2 = this.pos + 2, ch = this.buffer[i2];
for (; !isEmpty(ch) && ch !== ">"; )
ch = this.buffer[++i2];
return yield* this.pushToIndex(ch === ">" ? i2 + 1 : i2, !1);
} else {
let i2 = this.pos + 1, ch = this.buffer[i2];
for (; ch; )
if (tagChars.has(ch))
ch = this.buffer[++i2];
else if (ch === "%" && hexDigits.has(this.buffer[i2 + 1]) && hexDigits.has(this.buffer[i2 + 2]))
ch = this.buffer[i2 += 3];
else
break;
return yield* this.pushToIndex(i2, !1);
}
}
*pushNewline() {
let ch = this.buffer[this.pos];
return ch === `
` ? yield* this.pushCount(1) : ch === "\r" && this.charAt(1) === `
` ? yield* this.pushCount(2) : 0;
}
*pushSpaces(allowTabs) {
let i2 = this.pos - 1, ch;
do
ch = this.buffer[++i2];
while (ch === " " || allowTabs && ch === " ");
let n2 = i2 - this.pos;
return n2 > 0 && (yield this.buffer.substr(this.pos, n2), this.pos = i2), n2;
}
*pushUntil(test) {
let i2 = this.pos, ch = this.buffer[i2];
for (; !test(ch); )
ch = this.buffer[++i2];
return yield* this.pushToIndex(i2, !1);
}
};
exports.Lexer = Lexer;
}
});
// ../../node_modules/yaml/dist/parse/line-counter.js
var require_line_counter = __commonJS({
"../../node_modules/yaml/dist/parse/line-counter.js"(exports) {
"use strict";
var LineCounter = class {
constructor() {
this.lineStarts = [], this.addNewLine = (offset) => this.lineStarts.push(offset), this.linePos = (offset) => {
let low = 0, high = this.lineStarts.length;
for (; low < high; ) {
let mid = low + high >> 1;
this.lineStarts[mid] < offset ? low = mid + 1 : high = mid;
}
if (this.lineStarts[low] === offset)
return { line: low + 1, col: 1 };
if (low === 0)
return { line: 0, col: offset };
let start = this.lineStarts[low - 1];
return { line: low, col: offset - start + 1 };
};
}
};
exports.LineCounter = LineCounter;
}
});
// ../../node_modules/yaml/dist/parse/parser.js
var require_parser = __commonJS({
"../../node_modules/yaml/dist/parse/parser.js"(exports) {
"use strict";
var node_process = __require("process"), cst = require_cst(), lexer = require_lexer();
function includesToken(list, type) {
for (let i2 = 0; i2 < list.length; ++i2)
if (list[i2].type === type)
return !0;
return !1;
}
function findNonEmptyIndex(list) {
for (let i2 = 0; i2 < list.length; ++i2)
switch (list[i2].type) {
case "space":
case "comment":
case "newline":
break;
default:
return i2;
}
return -1;
}
function isFlowToken(token) {
switch (token?.type) {
case "alias":
case "scalar":
case "single-quoted-scalar":
case "double-quoted-scalar":
case "flow-collection":
return !0;
default:
return !1;
}
}
function getPrevProps(parent) {
switch (parent.type) {
case "document":
return parent.start;
case "block-map": {
let it = parent.items[parent.items.length - 1];
return it.sep ?? it.start;
}
case "block-seq":
return parent.items[parent.items.length - 1].start;
/* istanbul ignore next should not happen */
default:
return [];
}
}
function getFirstKeyStartProps(prev) {
if (prev.length === 0)
return [];
let i2 = prev.length;
loop: for (; --i2 >= 0; )
switch (prev[i2].type) {
case "doc-start":
case "explicit-key-ind":
case "map-value-ind":
case "seq-item-ind":
case "newline":
break loop;
}
for (; prev[++i2]?.type === "space"; )
;
return prev.splice(i2, prev.length);
}
function fixFlowSeqItems(fc) {
if (fc.start.type === "flow-seq-start")
for (let it of fc.items)
it.sep && !it.value && !includesToken(it.start, "explicit-key-ind") && !includesToken(it.sep, "map-value-ind") && (it.key && (it.value = it.key), delete it.key, isFlowToken(it.value) ? it.value.end ? Array.prototype.push.apply(it.value.end, it.sep) : it.value.end = it.sep : Array.prototype.push.apply(it.start, it.sep), delete it.sep);
}
var Parser = class {
/**
* @param onNewLine - If defined, called separately with the start position of
* each new line (in `parse()`, including the start of input).
*/
constructor(onNewLine) {
this.atNewLine = !0, this.atScalar = !1, this.indent = 0, this.offset = 0, this.onKeyLine = !1, this.stack = [], this.source = "", this.type = "", this.lexer = new lexer.Lexer(), this.onNewLine = onNewLine;
}
/**
* Parse `source` as a YAML stream.
* If `incomplete`, a part of the last line may be left as a buffer for the next call.
*
* Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.
*
* @returns A generator of tokens representing each directive, document, and other structure.
*/
*parse(source, incomplete = !1) {
this.onNewLine && this.offset === 0 && this.onNewLine(0);
for (let lexeme of this.lexer.lex(source, incomplete))
yield* this.next(lexeme);
incomplete || (yield* this.end());
}
/**
* Advance the parser by the `source` of one lexical token.
*/
*next(source) {
if (this.source = source, node_process.env.LOG_TOKENS && console.log("|", cst.prettyToken(source)), this.atScalar) {
this.atScalar = !1, yield* this.step(), this.offset += source.length;
return;
}
let type = cst.tokenType(source);
if (type)
if (type === "scalar")
this.atNewLine = !1, this.atScalar = !0, this.type = "scalar";
else {
switch (this.type = type, yield* this.step(), type) {
case "newline":
this.atNewLine = !0, this.indent = 0, this.onNewLine && this.onNewLine(this.offset + source.length);
break;
case "space":
this.atNewLine && source[0] === " " && (this.indent += source.length);
break;
case "explicit-key-ind":
case "map-value-ind":
case "seq-item-ind":
this.atNewLine && (this.indent += source.length);
break;
case "doc-mode":
case "flow-error-end":
return;
default:
this.atNewLine = !1;
}
this.offset += source.length;
}
else {
let message = `Not a YAML token: ${source}`;
yield* this.pop({ type: "error", offset: this.offset, message, source }), this.offset += source.length;
}
}
/** Call at end of input to push out any remaining constructions */
*end() {
for (; this.stack.length > 0; )
yield* this.pop();
}
get sourceToken() {
return {
type: this.type,
offset: this.offset,
indent: this.indent,
source: this.source
};
}
*step() {
let top = this.peek(1);
if (this.type === "doc-end" && top?.type !== "doc-end") {
for (; this.stack.length > 0; )
yield* this.pop();
this.stack.push({
type: "doc-end",
offset: this.offset,
source: this.source
});
return;
}
if (!top)
return yield* this.stream();
switch (top.type) {
case "document":
return yield* this.document(top);
case "alias":
case "scalar":
case "single-quoted-scalar":
case "double-quoted-scalar":
return yield* this.scalar(top);
case "block-scalar":
return yield* this.blockScalar(top);
case "block-map":
return yield* this.blockMap(top);
case "block-seq":
return yield* this.blockSequence(top);
case "flow-collection":
return yield* this.flowCollection(top);
case "doc-end":
return yield* this.documentEnd(top);
}
yield* this.pop();
}
peek(n2) {
return this.stack[this.stack.length - n2];
}
*pop(error) {
let token = error ?? this.stack.pop();
if (!token)
yield { type: "error", offset: this.offset, source: "", message: "Tried to pop an empty stack" };
else if (this.stack.length === 0)
yield token;
else {
let top = this.peek(1);
switch (token.type === "block-scalar" ? token.indent = "indent" in top ? top.indent : 0 : token.type === "flow-collection" && top.type === "document" && (token.indent = 0), token.type === "flow-collection" && fixFlowSeqItems(token), top.type) {
case "document":
top.value = token;
break;
case "block-scalar":
top.props.push(token);
break;
case "block-map": {
let it = top.items[top.items.length - 1];
if (it.value) {
top.items.push({ start: [], key: token, sep: [] }), this.onKeyLine = !0;
return;
} else if (it.sep)
it.value = token;
else {
Object.assign(it, { key: token, sep: [] }), this.onKeyLine = !it.explicitKey;
return;
}
break;
}
case "block-seq": {
let it = top.items[top.items.length - 1];
it.value ? top.items.push({ start: [], value: token }) : it.value = token;
break;
}
case "flow-collection": {
let it = top.items[top.items.length - 1];
!it || it.value ? top.items.push({ start: [], key: token, sep: [] }) : it.sep ? it.value = token : Object.assign(it, { key: token, sep: [] });
return;
}
/* istanbul ignore next should not happen */
default:
yield* this.pop(), yield* this.pop(token);
}
if ((top.type === "document" || top.type === "block-map" || top.type === "block-seq") && (token.type === "block-map" || token.type === "block-seq")) {
let last = token.items[token.items.length - 1];
last && !last.sep && !last.value && last.start.length > 0 && findNonEmptyIndex(last.start) === -1 && (token.indent === 0 || last.start.every((st) => st.type !== "comment" || st.indent < token.indent)) && (top.type === "document" ? top.end = last.start : top.items.push({ start: last.start }), token.items.splice(-1, 1));
}
}
}
*stream() {
switch (this.type) {
case "directive-line":
yield { type: "directive", offset: this.offset, source: this.source };
return;
case "byte-order-mark":
case "space":
case "comment":
case "newline":
yield this.sourceToken;
return;
case "doc-mode":
case "doc-start": {
let doc = {
type: "document",
offset: this.offset,
start: []
};
this.type === "doc-start" && doc.start.push(this.sourceToken), this.stack.push(doc);
return;
}
}
yield {
type: "error",
offset: this.offset,
message: `Unexpected ${this.type} token in YAML stream`,
source: this.source
};
}
*document(doc) {
if (doc.value)
return yield* this.lineEnd(doc);
switch (this.type) {
case "doc-start": {
findNonEmptyIndex(doc.start) !== -1 ? (yield* this.pop(), yield* this.step()) : doc.start.push(this.sourceToken);
return;
}
case "anchor":
case "tag":
case "space":
case "comment":
case "newline":
doc.start.push(this.sourceToken);
return;
}
let bv = this.startBlockValue(doc);
bv ? this.stack.push(bv) : yield {
type: "error",
offset: this.offset,
message: `Unexpected ${this.type} token in YAML document`,
source: this.source
};
}
*scalar(scalar) {
if (this.type === "map-value-ind") {
let prev = getPrevProps(this.peek(2)), start = getFirstKeyStartProps(prev), sep3;
scalar.end ? (sep3 = scalar.end, sep3.push(this.sourceToken), delete scalar.end) : sep3 = [this.sourceToken];
let map2 = {
type: "block-map",
offset: scalar.offset,
indent: scalar.indent,
items: [{ start, key: scalar, sep: sep3 }]
};
this.onKeyLine = !0, this.stack[this.stack.length - 1] = map2;
} else
yield* this.lineEnd(scalar);
}
*blockScalar(scalar) {
switch (this.type) {
case "space":
case "comment":
case "newline":
scalar.props.push(this.sourceToken);
return;
case "scalar":
if (scalar.source = this.source, this.atNewLine = !0, this.indent = 0, this.onNewLine) {
let nl = this.source.indexOf(`
`) + 1;
for (; nl !== 0; )
this.onNewLine(this.offset + nl), nl = this.source.indexOf(`
`, nl) + 1;
}
yield* this.pop();
break;
/* istanbul ignore next should not happen */
default:
yield* this.pop(), yield* this.step();
}
}
*blockMap(map2) {
let it = map2.items[map2.items.length - 1];
switch (this.type) {
case "newline":
if (this.onKeyLine = !1, it.value) {
let end = "end" in it.value ? it.value.end : void 0;
(Array.isArray(end) ? end[end.length - 1] : void 0)?.type === "comment" ? end?.push(this.sourceToken) : map2.items.push({ start: [this.sourceToken] });
} else it.sep ? it.sep.push(this.sourceToken) : it.start.push(this.sourceToken);
return;
case "space":
case "comment":
if (it.value)
map2.items.push({ start: [this.sourceToken] });
else if (it.sep)
it.sep.push(this.sourceToken);
else {
if (this.atIndentedComment(it.start, map2.indent)) {
let end = map2.items[map2.items.length - 2]?.value?.end;
if (Array.isArray(end)) {
Array.prototype.push.apply(end, it.start), end.push(this.sourceToken), map2.items.pop();
return;
}
}
it.start.push(this.sourceToken);
}
return;
}
if (this.indent >= map2.indent) {
let atMapIndent = !this.onKeyLine && this.indent === map2.indent, atNextItem = atMapIndent && (it.sep || it.explicitKey) && this.type !== "seq-item-ind", start = [];
if (atNextItem && it.sep && !it.value) {
let nl = [];
for (let i2 = 0; i2 < it.sep.length; ++i2) {
let st = it.sep[i2];
switch (st.type) {
case "newline":
nl.push(i2);
break;
case "space":
break;
case "comment":
st.indent > map2.indent && (nl.length = 0);
break;
default:
nl.length = 0;
}
}
nl.length >= 2 && (start = it.sep.splice(nl[1]));
}
switch (this.type) {
case "anchor":
case "tag":
atNextItem || it.value ? (start.push(this.sourceToken), map2.items.push({ start }), this.onKeyLine = !0) : it.sep ? it.sep.push(this.sourceToken) : it.start.push(this.sourceToken);
return;
case "explicit-key-ind":
!it.sep && !it.explicitKey ? (it.start.push(this.sourceToken), it.explicitKey = !0) : atNextItem || it.value ? (start.push(this.sourceToken), map2.items.push({ start, explicitKey: !0 })) : this.stack.push({
type: "block-map",
offset: this.offset,
indent: this.indent,
items: [{ start: [this.sourceToken], explicitKey: !0 }]
}), this.onKeyLine = !0;
return;
case "map-value-ind":
if (it.explicitKey)
if (it.sep)
if (it.value)
map2.items.push({ start: [], key: null, sep: [this.sourceToken] });
else if (includesToken(it.sep, "map-value-ind"))
this.stack.push({
type: "block-map",
offset: this.offset,
indent: this.indent,
items: [{ start, key: null, sep: [this.sourceToken] }]
});
else if (isFlowToken(it.key) && !includesToken(it.sep, "newline")) {
let start2 = getFirstKeyStartProps(it.start), key = it.key, sep3 = it.sep;
sep3.push(this.sourceToken), delete it.key, delete it.sep, this.stack.push({
type: "block-map",
offset: this.offset,
indent: this.indent,
items: [{ start: start2, key, sep: sep3 }]
});
} else start.length > 0 ? it.sep = it.sep.concat(start, this.sourceToken) : it.sep.push(this.sourceToken);
else if (includesToken(it.start, "newline"))
Object.assign(it, { key: null, sep: [this.sourceToken] });
else {
let start2 = getFirstKeyStartProps(it.start);
this.stack.push({
type: "block-map",
offset: this.offset,
indent: this.indent,
items: [{ start: start2, key: null, sep: [this.sourceToken] }]
});
}
else
it.sep ? it.value || atNextItem ? map2.items.push({ start, key: null, sep: [this.sourceToken] }) : includesToken(it.sep, "map-value-ind") ? this.stack.push({
type: "block-map",
offset: this.offset,
indent: this.indent,
items: [{ start: [], key: null, sep: [this.sourceToken] }]
}) : it.sep.push(this.sourceToken) : Object.assign(it, { key: null, sep: [this.sourceToken] });
this.onKeyLine = !0;
return;
case "alias":
case "scalar":
case "single-quoted-scalar":
case "double-quoted-scalar": {
let fs = this.flowScalar(this.type);
atNextItem || it.value ? (map2.items.push({ start, key: fs, sep: [] }), this.onKeyLine = !0) : it.sep ? this.stack.push(fs) : (Object.assign(it, { key: fs, sep: [] }), this.onKeyLine = !0);
return;
}
default: {
let bv = this.startBlockValue(map2);
if (bv) {
if (bv.type === "block-seq") {
if (!it.explicitKey && it.sep && !includesToken(it.sep, "newline")) {
yield* this.pop({
type: "error",
offset: this.offset,
message: "Unexpected block-seq-ind on same line with key",
source: this.source
});
return;
}
} else atMapIndent && map2.items.push({ start });
this.stack.push(bv);
return;
}
}
}
}
yield* this.pop(), yield* this.step();
}
*blockSequence(seq) {
let it = seq.items[seq.items.length - 1];
switch (this.type) {
case "newline":
if (it.value) {
let end = "end" in it.value ? it.value.end : void 0;
(Array.isArray(end) ? end[end.length - 1] : void 0)?.type === "comment" ? end?.push(this.sourceToken) : seq.items.push({ start: [this.sourceToken] });
} else
it.start.push(this.sourceToken);
return;
case "space":
case "comment":
if (it.value)
seq.items.push({ start: [this.sourceToken] });
else {
if (this.atIndentedComment(it.start, seq.indent)) {
let end = seq.items[seq.items.length - 2]?.value?.end;
if (Array.isArray(end)) {
Array.prototype.push.apply(end, it.start), end.push(this.sourceToken), seq.items.pop();
return;
}
}
it.start.push(this.sourceToken);
}
return;
case "anchor":
case "tag":
if (it.value || this.indent <= seq.indent)
break;
it.start.push(this.sourceToken);
return;
case "seq-item-ind":
if (this.indent !== seq.indent)
break;
it.value || includesToken(it.start, "seq-item-ind") ? seq.items.push({ start: [this.sourceToken] }) : it.start.push(this.sourceToken);
return;
}
if (this.indent > seq.indent) {
let bv = this.startBlockValue(seq);
if (bv) {
this.stack.push(bv);
return;
}
}
yield* this.pop(), yield* this.step();
}
*flowCollection(fc) {
let it = fc.items[fc.items.length - 1];
if (this.type === "flow-error-end") {
let top;
do
yield* this.pop(), top = this.peek(1);
while (top?.type === "flow-collection");
} else if (fc.end.length === 0) {
switch (this.type) {
case "comma":
case "explicit-key-ind":
!it || it.sep ? fc.items.push({ start: [this.sourceToken] }) : it.start.push(this.sourceToken);
return;
case "map-value-ind":
!it || it.value ? fc.items.push({ start: [], key: null, sep: [this.sourceToken] }) : it.sep ? it.sep.push(this.sourceToken) : Object.assign(it, { key: null, sep: [this.sourceToken] });
return;
case "space":
case "comment":
case "newline":
case "anchor":
case "tag":
!it || it.value ? fc.items.push({ start: [this.sourceToken] }) : it.sep ? it.sep.push(this.sourceToken) : it.start.push(this.sourceToken);
return;
case "alias":
case "scalar":
case "single-quoted-scalar":
case "double-quoted-scalar": {
let fs = this.flowScalar(this.type);
!it || it.value ? fc.items.push({ start: [], key: fs, sep: [] }) : it.sep ? this.stack.push(fs) : Object.assign(it, { key: fs, sep: [] });
return;
}
case "flow-map-end":
case "flow-seq-end":
fc.end.push(this.sourceToken);
return;
}
let bv = this.startBlockValue(fc);
bv ? this.stack.push(bv) : (yield* this.pop(), yield* this.step());
} else {
let parent = this.peek(2);
if (parent.type === "block-map" && (this.type === "map-value-ind" && parent.indent === fc.indent || this.type === "newline" && !parent.items[parent.items.length - 1].sep))
yield* this.pop(), yield* this.step();
else if (this.type === "map-value-ind" && parent.type !== "flow-collection") {
let prev = getPrevProps(parent), start = getFirstKeyStartProps(prev);
fixFlowSeqItems(fc);
let sep3 = fc.end.splice(1, fc.end.length);
sep3.push(this.sourceToken);
let map2 = {
type: "block-map",
offset: fc.offset,
indent: fc.indent,
items: [{ start, key: fc, sep: sep3 }]
};
this.onKeyLine = !0, this.stack[this.stack.length - 1] = map2;
} else
yield* this.lineEnd(fc);
}
}
flowScalar(type) {
if (this.onNewLine) {
let nl = this.source.indexOf(`
`) + 1;
for (; nl !== 0; )
this.onNewLine(this.offset + nl), nl = this.source.indexOf(`
`, nl) + 1;
}
return {
type,
offset: this.offset,
indent: this.indent,
source: this.source
};
}
startBlockValue(parent) {
switch (this.type) {
case "alias":
case "scalar":
case "single-quoted-scalar":
case "double-quoted-scalar":
return this.flowScalar(this.type);
case "block-scalar-header":
return {
type: "block-scalar",
offset: this.offset,
indent: this.indent,
props: [this.sourceToken],
source: ""
};
case "flow-map-start":
case "flow-seq-start":
return {
type: "flow-collection",
offset: this.offset,
indent: this.indent,
start: this.sourceToken,
items: [],
end: []
};
case "seq-item-ind":
return {
type: "block-seq",
offset: this.offset,
indent: this.indent,
items: [{ start: [this.sourceToken] }]
};
case "explicit-key-ind": {
this.onKeyLine = !0;
let prev = getPrevProps(parent), start = getFirstKeyStartProps(prev);
return start.push(this.sourceToken), {
type: "block-map",
offset: this.offset,
indent: this.indent,
items: [{ start, explicitKey: !0 }]
};
}
case "map-value-ind": {
this.onKeyLine = !0;
let prev = getPrevProps(parent), start = getFirstKeyStartProps(prev);
return {
type: "block-map",
offset: this.offset,
indent: this.indent,
items: [{ start, key: null, sep: [this.sourceToken] }]
};
}
}
return null;
}
atIndentedComment(start, indent) {
return this.type !== "comment" || this.indent <= indent ? !1 : start.every((st) => st.type === "newline" || st.type === "space");
}
*documentEnd(docEnd) {
this.type !== "doc-mode" && (docEnd.end ? docEnd.end.push(this.sourceToken) : docEnd.end = [this.sourceToken], this.type === "newline" && (yield* this.pop()));
}
*lineEnd(token) {
switch (this.type) {
case "comma":
case "doc-start":
case "doc-end":
case "flow-seq-end":
case "flow-map-end":
case "map-value-ind":
yield* this.pop(), yield* this.step();
break;
case "newline":
this.onKeyLine = !1;
default:
token.end ? token.end.push(this.sourceToken) : token.end = [this.sourceToken], this.type === "newline" && (yield* this.pop());
}
}
};
exports.Parser = Parser;
}
});
// ../../node_modules/yaml/dist/public-api.js
var require_public_api = __commonJS({
"../../node_modules/yaml/dist/public-api.js"(exports) {
"use strict";
var composer = require_composer(), Document = require_Document(), errors = require_errors(), log = require_log(), identity3 = require_identity(), lineCounter = require_line_counter(), parser = require_parser();
function parseOptions(options) {
let prettyErrors = options.prettyErrors !== !1;
return { lineCounter: options.lineCounter || prettyErrors && new lineCounter.LineCounter() || null, prettyErrors };
}
function parseAllDocuments(source, options = {}) {
let { lineCounter: lineCounter2, prettyErrors } = parseOptions(options), parser$1 = new parser.Parser(lineCounter2?.addNewLine), composer$1 = new composer.Composer(options), docs = Array.from(composer$1.compose(parser$1.parse(source)));
if (prettyErrors && lineCounter2)
for (let doc of docs)
doc.errors.forEach(errors.prettifyError(source, lineCounter2)), doc.warnings.forEach(errors.prettifyError(source, lineCounter2));
return docs.length > 0 ? docs : Object.assign([], { empty: !0 }, composer$1.streamInfo());
}
function parseDocument2(source, options = {}) {
let { lineCounter: lineCounter2, prettyErrors } = parseOptions(options), parser$1 = new parser.Parser(lineCounter2?.addNewLine), composer$1 = new composer.Composer(options), doc = null;
for (let _doc of composer$1.compose(parser$1.parse(source), !0, source.length))
if (!doc)
doc = _doc;
else if (doc.options.logLevel !== "silent") {
doc.errors.push(new errors.YAMLParseError(_doc.range.slice(0, 2), "MULTIPLE_DOCS", "Source contains multiple documents; please use YAML.parseAllDocuments()"));
break;
}
return prettyErrors && lineCounter2 && (doc.errors.forEach(errors.prettifyError(source, lineCounter2)), doc.warnings.forEach(errors.prettifyError(source, lineCounter2))), doc;
}
function parse4(src, reviver, options) {
let _reviver;
typeof reviver == "function" ? _reviver = reviver : options === void 0 && reviver && typeof reviver == "object" && (options = reviver);
let doc = parseDocument2(src, options);
if (!doc)
return null;
if (doc.warnings.forEach((warning) => log.warn(doc.options.logLevel, warning)), doc.errors.length > 0) {
if (doc.options.logLevel !== "silent")
throw doc.errors[0];
doc.errors = [];
}
return doc.toJS(Object.assign({ reviver: _reviver }, options));
}
function stringify(value, replacer, options) {
let _replacer = null;
if (typeof replacer == "function" || Array.isArray(replacer) ? _replacer = replacer : options === void 0 && replacer && (options = replacer), typeof options == "string" && (options = options.length), typeof options == "number") {
let indent = Math.round(options);
options = indent < 1 ? void 0 : indent > 8 ? { indent: 8 } : { indent };
}
if (value === void 0) {
let { keepUndefined } = options ?? replacer ?? {};
if (!keepUndefined)
return;
}
return identity3.isDocument(value) && !_replacer ? value.toString(options) : new Document.Document(value, _replacer, options).toString(options);
}
exports.parse = parse4;
exports.parseAllDocuments = parseAllDocuments;
exports.parseDocument = parseDocument2;
exports.stringify = stringify;
}
});
// ../../node_modules/yaml/dist/index.js
var require_dist2 = __commonJS({
"../../node_modules/yaml/dist/index.js"(exports) {
"use strict";
var composer = require_composer(), Document = require_Document(), Schema = require_Schema(), errors = require_errors(), Alias = require_Alias(), identity3 = require_identity(), Pair = require_Pair(), Scalar = require_Scalar(), YAMLMap = require_YAMLMap(), YAMLSeq = require_YAMLSeq(), cst = require_cst(), lexer = require_lexer(), lineCounter = require_line_counter(), parser = require_parser(), publicApi = require_public_api(), visit = require_visit();
exports.Composer = composer.Composer;
exports.Document = Document.Document;
exports.Schema = Schema.Schema;
exports.YAMLError = errors.YAMLError;
exports.YAMLParseError = errors.YAMLParseError;
exports.YAMLWarning = errors.YAMLWarning;
exports.Alias = Alias.Alias;
exports.isAlias = identity3.isAlias;
exports.isCollection = identity3.isCollection;
exports.isDocument = identity3.isDocument;
exports.isMap = identity3.isMap;
exports.isNode = identity3.isNode;
exports.isPair = identity3.isPair;
exports.isScalar = identity3.isScalar;
exports.isSeq = identity3.isSeq;
exports.Pair = Pair.Pair;
exports.Scalar = Scalar.Scalar;
exports.YAMLMap = YAMLMap.YAMLMap;
exports.YAMLSeq = YAMLSeq.YAMLSeq;
exports.CST = cst;
exports.Lexer = lexer.Lexer;
exports.LineCounter = lineCounter.LineCounter;
exports.Parser = parser.Parser;
exports.parse = publicApi.parse;
exports.parseAllDocuments = publicApi.parseAllDocuments;
exports.parseDocument = publicApi.parseDocument;
exports.stringify = publicApi.stringify;
exports.visit = visit.visit;
exports.visitAsync = visit.visitAsync;
}
});
// ../../node_modules/@yarnpkg/fslib/node_modules/tslib/tslib.es6.js
var tslib_es6_exports = {};
__export(tslib_es6_exports, {
__assign: () => __assign,
__asyncDelegator: () => __asyncDelegator,
__asyncGenerator: () => __asyncGenerator,
__asyncValues: () => __asyncValues,
__await: () => __await,
__awaiter: () => __awaiter,
__classPrivateFieldGet: () => __classPrivateFieldGet,
__classPrivateFieldSet: () => __classPrivateFieldSet,
__createBinding: () => __createBinding,
__decorate: () => __decorate,
__exportStar: () => __exportStar,
__extends: () => __extends,
__generator: () => __generator,
__importDefault: () => __importDefault,
__importStar: () => __importStar,
__makeTemplateObject: () => __makeTemplateObject,
__metadata: () => __metadata,
__param: () => __param,
__read: () => __read,
__rest: () => __rest,
__spread: () => __spread,
__spreadArrays: () => __spreadArrays,
__values: () => __values
});
function __extends(d, b) {
extendStatics(d, b);
function __() {
this.constructor = d;
}
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}
function __rest(s, e) {
var t3 = {};
for (var p in s) Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0 && (t3[p] = s[p]);
if (s != null && typeof Object.getOwnPropertySymbols == "function")
for (var i2 = 0, p = Object.getOwnPropertySymbols(s); i2 < p.length; i2++)
e.indexOf(p[i2]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i2]) && (t3[p[i2]] = s[p[i2]]);
return t3;
}
function __decorate(decorators, target, key, desc) {
var c3 = arguments.length, r = c3 < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect == "object" && typeof Reflect.decorate == "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i2 = decorators.length - 1; i2 >= 0; i2--) (d = decorators[i2]) && (r = (c3 < 3 ? d(r) : c3 > 3 ? d(target, key, r) : d(target, key)) || r);
return c3 > 3 && r && Object.defineProperty(target, key, r), r;
}
function __param(paramIndex, decorator) {
return function(target, key) {
decorator(target, key, paramIndex);
};
}
function __metadata(metadataKey, metadataValue) {
if (typeof Reflect == "object" && typeof Reflect.metadata == "function") return Reflect.metadata(metadataKey, metadataValue);
}
function __awaiter(thisArg, _arguments, P, generator) {
function adopt(value) {
return value instanceof P ? value : new P(function(resolve9) {
resolve9(value);
});
}
return new (P || (P = Promise))(function(resolve9, reject) {
function fulfilled(value) {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
}
function rejected(value) {
try {
step(generator.throw(value));
} catch (e) {
reject(e);
}
}
function step(result) {
result.done ? resolve9(result.value) : adopt(result.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
}
function __generator(thisArg, body) {
var _ = { label: 0, sent: function() {
if (t3[0] & 1) throw t3[1];
return t3[1];
}, trys: [], ops: [] }, f, y, t3, g;
return g = { next: verb(0), throw: verb(1), return: verb(2) }, typeof Symbol == "function" && (g[Symbol.iterator] = function() {
return this;
}), g;
function verb(n2) {
return function(v) {
return step([n2, v]);
};
}
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
for (; _; ) try {
if (f = 1, y && (t3 = op[0] & 2 ? y.return : op[0] ? y.throw || ((t3 = y.return) && t3.call(y), 0) : y.next) && !(t3 = t3.call(y, op[1])).done) return t3;
switch (y = 0, t3 && (op = [op[0] & 2, t3.value]), op[0]) {
case 0:
case 1:
t3 = op;
break;
case 4:
return _.label++, { value: op[1], done: !1 };
case 5:
_.label++, y = op[1], op = [0];
continue;
case 7:
op = _.ops.pop(), _.trys.pop();
continue;
default:
if (t3 = _.trys, !(t3 = t3.length > 0 && t3[t3.length - 1]) && (op[0] === 6 || op[0] === 2)) {
_ = 0;
continue;
}
if (op[0] === 3 && (!t3 || op[1] > t3[0] && op[1] < t3[3])) {
_.label = op[1];
break;
}
if (op[0] === 6 && _.label < t3[1]) {
_.label = t3[1], t3 = op;
break;
}
if (t3 && _.label < t3[2]) {
_.label = t3[2], _.ops.push(op);
break;
}
t3[2] && _.ops.pop(), _.trys.pop();
continue;
}
op = body.call(thisArg, _);
} catch (e) {
op = [6, e], y = 0;
} finally {
f = t3 = 0;
}
if (op[0] & 5) throw op[1];
return { value: op[0] ? op[1] : void 0, done: !0 };
}
}
function __createBinding(o2, m, k, k2) {
k2 === void 0 && (k2 = k), o2[k2] = m[k];
}
function __exportStar(m, exports) {
for (var p in m) p !== "default" && !exports.hasOwnProperty(p) && (exports[p] = m[p]);
}
function __values(o2) {
var s = typeof Symbol == "function" && Symbol.iterator, m = s && o2[s], i2 = 0;
if (m) return m.call(o2);
if (o2 && typeof o2.length == "number") return {
next: function() {
return o2 && i2 >= o2.length && (o2 = void 0), { value: o2 && o2[i2++], done: !o2 };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
}
function __read(o2, n2) {
var m = typeof Symbol == "function" && o2[Symbol.iterator];
if (!m) return o2;
var i2 = m.call(o2), r, ar = [], e;
try {
for (; (n2 === void 0 || n2-- > 0) && !(r = i2.next()).done; ) ar.push(r.value);
} catch (error) {
e = { error };
} finally {
try {
r && !r.done && (m = i2.return) && m.call(i2);
} finally {
if (e) throw e.error;
}
}
return ar;
}
function __spread() {
for (var ar = [], i2 = 0; i2 < arguments.length; i2++)
ar = ar.concat(__read(arguments[i2]));
return ar;
}
function __spreadArrays() {
for (var s = 0, i2 = 0, il = arguments.length; i2 < il; i2++) s += arguments[i2].length;
for (var r = Array(s), k = 0, i2 = 0; i2 < il; i2++)
for (var a2 = arguments[i2], j = 0, jl = a2.length; j < jl; j++, k++)
r[k] = a2[j];
return r;
}
function __await(v) {
return this instanceof __await ? (this.v = v, this) : new __await(v);
}
function __asyncGenerator(thisArg, _arguments, generator) {
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
var g = generator.apply(thisArg, _arguments || []), i2, q = [];
return i2 = {}, verb("next"), verb("throw"), verb("return"), i2[Symbol.asyncIterator] = function() {
return this;
}, i2;
function verb(n2) {
g[n2] && (i2[n2] = function(v) {
return new Promise(function(a2, b) {
q.push([n2, v, a2, b]) > 1 || resume(n2, v);
});
});
}
function resume(n2, v) {
try {
step(g[n2](v));
} catch (e) {
settle(q[0][3], e);
}
}
function step(r) {
r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
}
function fulfill(value) {
resume("next", value);
}
function reject(value) {
resume("throw", value);
}
function settle(f, v) {
f(v), q.shift(), q.length && resume(q[0][0], q[0][1]);
}
}
function __asyncDelegator(o2) {
var i2, p;
return i2 = {}, verb("next"), verb("throw", function(e) {
throw e;
}), verb("return"), i2[Symbol.iterator] = function() {
return this;
}, i2;
function verb(n2, f) {
i2[n2] = o2[n2] ? function(v) {
return (p = !p) ? { value: __await(o2[n2](v)), done: n2 === "return" } : f ? f(v) : v;
} : f;
}
}
function __asyncValues(o2) {
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
var m = o2[Symbol.asyncIterator], i2;
return m ? m.call(o2) : (o2 = typeof __values == "function" ? __values(o2) : o2[Symbol.iterator](), i2 = {}, verb("next"), verb("throw"), verb("return"), i2[Symbol.asyncIterator] = function() {
return this;
}, i2);
function verb(n2) {
i2[n2] = o2[n2] && function(v) {
return new Promise(function(resolve9, reject) {
v = o2[n2](v), settle(resolve9, reject, v.done, v.value);
});
};
}
function settle(resolve9, reject, d, v) {
Promise.resolve(v).then(function(v2) {
resolve9({ value: v2, done: d });
}, reject);
}
}
function __makeTemplateObject(cooked, raw) {
return Object.defineProperty ? Object.defineProperty(cooked, "raw", { value: raw }) : cooked.raw = raw, cooked;
}
function __importStar(mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) Object.hasOwnProperty.call(mod, k) && (result[k] = mod[k]);
return result.default = mod, result;
}
function __importDefault(mod) {
return mod && mod.__esModule ? mod : { default: mod };
}
function __classPrivateFieldGet(receiver, privateMap) {
if (!privateMap.has(receiver))
throw new TypeError("attempted to get private field on non-instance");
return privateMap.get(receiver);
}
function __classPrivateFieldSet(receiver, privateMap, value) {
if (!privateMap.has(receiver))
throw new TypeError("attempted to set private field on non-instance");
return privateMap.set(receiver, value), value;
}
var extendStatics, __assign, init_tslib_es6 = __esm({
"../../node_modules/@yarnpkg/fslib/node_modules/tslib/tslib.es6.js"() {
extendStatics = function(d, b) {
return extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {
d2.__proto__ = b2;
} || function(d2, b2) {
for (var p in b2) b2.hasOwnProperty(p) && (d2[p] = b2[p]);
}, extendStatics(d, b);
};
__assign = function() {
return __assign = Object.assign || function(t3) {
for (var s, i2 = 1, n2 = arguments.length; i2 < n2; i2++) {
s = arguments[i2];
for (var p in s) Object.prototype.hasOwnProperty.call(s, p) && (t3[p] = s[p]);
}
return t3;
}, __assign.apply(this, arguments);
};
}
});
// ../../node_modules/@yarnpkg/fslib/lib/constants.js
var require_constants = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/constants.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.SAFE_TIME = exports.S_IFLNK = exports.S_IFREG = exports.S_IFDIR = exports.S_IFMT = void 0;
exports.S_IFMT = 61440;
exports.S_IFDIR = 16384;
exports.S_IFREG = 32768;
exports.S_IFLNK = 40960;
exports.SAFE_TIME = 456789e3;
}
});
// ../../node_modules/@yarnpkg/fslib/lib/statUtils.js
var require_statUtils = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/statUtils.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.areStatsEqual = exports.convertToBigIntStats = exports.clearStats = exports.makeEmptyStats = exports.makeDefaultStats = exports.BigIntStatsEntry = exports.StatEntry = exports.DirEntry = exports.DEFAULT_MODE = void 0;
var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports)), nodeUtils = tslib_1.__importStar(__require("util")), constants_1 = require_constants();
exports.DEFAULT_MODE = constants_1.S_IFREG | 420;
var DirEntry = class {
constructor() {
this.name = "", this.mode = 0;
}
isBlockDevice() {
return !1;
}
isCharacterDevice() {
return !1;
}
isDirectory() {
return (this.mode & constants_1.S_IFMT) === constants_1.S_IFDIR;
}
isFIFO() {
return !1;
}
isFile() {
return (this.mode & constants_1.S_IFMT) === constants_1.S_IFREG;
}
isSocket() {
return !1;
}
isSymbolicLink() {
return (this.mode & constants_1.S_IFMT) === constants_1.S_IFLNK;
}
};
exports.DirEntry = DirEntry;
var StatEntry = class {
constructor() {
this.uid = 0, this.gid = 0, this.size = 0, this.blksize = 0, this.atimeMs = 0, this.mtimeMs = 0, this.ctimeMs = 0, this.birthtimeMs = 0, this.atime = /* @__PURE__ */ new Date(0), this.mtime = /* @__PURE__ */ new Date(0), this.ctime = /* @__PURE__ */ new Date(0), this.birthtime = /* @__PURE__ */ new Date(0), this.dev = 0, this.ino = 0, this.mode = exports.DEFAULT_MODE, this.nlink = 1, this.rdev = 0, this.blocks = 1;
}
isBlockDevice() {
return !1;
}
isCharacterDevice() {
return !1;
}
isDirectory() {
return (this.mode & constants_1.S_IFMT) === constants_1.S_IFDIR;
}
isFIFO() {
return !1;
}
isFile() {
return (this.mode & constants_1.S_IFMT) === constants_1.S_IFREG;
}
isSocket() {
return !1;
}
isSymbolicLink() {
return (this.mode & constants_1.S_IFMT) === constants_1.S_IFLNK;
}
};
exports.StatEntry = StatEntry;
var BigIntStatsEntry = class {
constructor() {
this.uid = BigInt(0), this.gid = BigInt(0), this.size = BigInt(0), this.blksize = BigInt(0), this.atimeMs = BigInt(0), this.mtimeMs = BigInt(0), this.ctimeMs = BigInt(0), this.birthtimeMs = BigInt(0), this.atimeNs = BigInt(0), this.mtimeNs = BigInt(0), this.ctimeNs = BigInt(0), this.birthtimeNs = BigInt(0), this.atime = /* @__PURE__ */ new Date(0), this.mtime = /* @__PURE__ */ new Date(0), this.ctime = /* @__PURE__ */ new Date(0), this.birthtime = /* @__PURE__ */ new Date(0), this.dev = BigInt(0), this.ino = BigInt(0), this.mode = BigInt(exports.DEFAULT_MODE), this.nlink = BigInt(1), this.rdev = BigInt(0), this.blocks = BigInt(1);
}
isBlockDevice() {
return !1;
}
isCharacterDevice() {
return !1;
}
isDirectory() {
return (this.mode & BigInt(constants_1.S_IFMT)) === BigInt(constants_1.S_IFDIR);
}
isFIFO() {
return !1;
}
isFile() {
return (this.mode & BigInt(constants_1.S_IFMT)) === BigInt(constants_1.S_IFREG);
}
isSocket() {
return !1;
}
isSymbolicLink() {
return (this.mode & BigInt(constants_1.S_IFMT)) === BigInt(constants_1.S_IFLNK);
}
};
exports.BigIntStatsEntry = BigIntStatsEntry;
function makeDefaultStats() {
return new StatEntry();
}
exports.makeDefaultStats = makeDefaultStats;
function makeEmptyStats() {
return clearStats(makeDefaultStats());
}
exports.makeEmptyStats = makeEmptyStats;
function clearStats(stats) {
for (let key in stats)
if (Object.prototype.hasOwnProperty.call(stats, key)) {
let element = stats[key];
typeof element == "number" ? stats[key] = 0 : typeof element == "bigint" ? stats[key] = BigInt(0) : nodeUtils.types.isDate(element) && (stats[key] = /* @__PURE__ */ new Date(0));
}
return stats;
}
exports.clearStats = clearStats;
function convertToBigIntStats(stats) {
let bigintStats = new BigIntStatsEntry();
for (let key in stats)
if (Object.prototype.hasOwnProperty.call(stats, key)) {
let element = stats[key];
typeof element == "number" ? bigintStats[key] = BigInt(element) : nodeUtils.types.isDate(element) && (bigintStats[key] = new Date(element));
}
return bigintStats.atimeNs = bigintStats.atimeMs * BigInt(1e6), bigintStats.mtimeNs = bigintStats.mtimeMs * BigInt(1e6), bigintStats.ctimeNs = bigintStats.ctimeMs * BigInt(1e6), bigintStats.birthtimeNs = bigintStats.birthtimeMs * BigInt(1e6), bigintStats;
}
exports.convertToBigIntStats = convertToBigIntStats;
function areStatsEqual(a2, b) {
if (a2.atimeMs !== b.atimeMs || a2.birthtimeMs !== b.birthtimeMs || a2.blksize !== b.blksize || a2.blocks !== b.blocks || a2.ctimeMs !== b.ctimeMs || a2.dev !== b.dev || a2.gid !== b.gid || a2.ino !== b.ino || a2.isBlockDevice() !== b.isBlockDevice() || a2.isCharacterDevice() !== b.isCharacterDevice() || a2.isDirectory() !== b.isDirectory() || a2.isFIFO() !== b.isFIFO() || a2.isFile() !== b.isFile() || a2.isSocket() !== b.isSocket() || a2.isSymbolicLink() !== b.isSymbolicLink() || a2.mode !== b.mode || a2.mtimeMs !== b.mtimeMs || a2.nlink !== b.nlink || a2.rdev !== b.rdev || a2.size !== b.size || a2.uid !== b.uid)
return !1;
let aN = a2, bN = b;
return !(aN.atimeNs !== bN.atimeNs || aN.mtimeNs !== bN.mtimeNs || aN.ctimeNs !== bN.ctimeNs || aN.birthtimeNs !== bN.birthtimeNs);
}
exports.areStatsEqual = areStatsEqual;
}
});
// ../../node_modules/@yarnpkg/fslib/lib/path.js
var require_path = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/path.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.toFilename = exports.convertPath = exports.ppath = exports.npath = exports.Filename = exports.PortablePath = void 0;
var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports)), path_1 = tslib_1.__importDefault(__require("path")), PathType;
(function(PathType2) {
PathType2[PathType2.File = 0] = "File", PathType2[PathType2.Portable = 1] = "Portable", PathType2[PathType2.Native = 2] = "Native";
})(PathType || (PathType = {}));
exports.PortablePath = {
root: "/",
dot: ".",
parent: ".."
};
exports.Filename = {
nodeModules: "node_modules",
manifest: "package.json",
lockfile: "yarn.lock",
virtual: "__virtual__",
/**
* @deprecated
*/
pnpJs: ".pnp.js",
pnpCjs: ".pnp.cjs",
rc: ".yarnrc.yml"
};
exports.npath = Object.create(path_1.default);
exports.ppath = Object.create(path_1.default.posix);
exports.npath.cwd = () => process.cwd();
exports.ppath.cwd = () => toPortablePath(process.cwd());
exports.ppath.resolve = (...segments) => segments.length > 0 && exports.ppath.isAbsolute(segments[0]) ? path_1.default.posix.resolve(...segments) : path_1.default.posix.resolve(exports.ppath.cwd(), ...segments);
var contains = function(pathUtils, from2, to) {
return from2 = pathUtils.normalize(from2), to = pathUtils.normalize(to), from2 === to ? "." : (from2.endsWith(pathUtils.sep) || (from2 = from2 + pathUtils.sep), to.startsWith(from2) ? to.slice(from2.length) : null);
};
exports.npath.fromPortablePath = fromPortablePath;
exports.npath.toPortablePath = toPortablePath;
exports.npath.contains = (from2, to) => contains(exports.npath, from2, to);
exports.ppath.contains = (from2, to) => contains(exports.ppath, from2, to);
var WINDOWS_PATH_REGEXP = /^([a-zA-Z]:.*)$/, UNC_WINDOWS_PATH_REGEXP = /^\/\/(\.\/)?(.*)$/, PORTABLE_PATH_REGEXP = /^\/([a-zA-Z]:.*)$/, UNC_PORTABLE_PATH_REGEXP = /^\/unc\/(\.dot\/)?(.*)$/;
function fromPortablePath(p) {
if (process.platform !== "win32")
return p;
let portablePathMatch, uncPortablePathMatch;
if (portablePathMatch = p.match(PORTABLE_PATH_REGEXP))
p = portablePathMatch[1];
else if (uncPortablePathMatch = p.match(UNC_PORTABLE_PATH_REGEXP))
p = `\\\\${uncPortablePathMatch[1] ? ".\\" : ""}${uncPortablePathMatch[2]}`;
else
return p;
return p.replace(/\//g, "\\");
}
function toPortablePath(p) {
if (process.platform !== "win32")
return p;
p = p.replace(/\\/g, "/");
let windowsPathMatch, uncWindowsPathMatch;
return (windowsPathMatch = p.match(WINDOWS_PATH_REGEXP)) ? p = `/${windowsPathMatch[1]}` : (uncWindowsPathMatch = p.match(UNC_WINDOWS_PATH_REGEXP)) && (p = `/unc/${uncWindowsPathMatch[1] ? ".dot/" : ""}${uncWindowsPathMatch[2]}`), p;
}
function convertPath(targetPathUtils, sourcePath) {
return targetPathUtils === exports.npath ? fromPortablePath(sourcePath) : toPortablePath(sourcePath);
}
exports.convertPath = convertPath;
function toFilename(filename) {
if (exports.npath.parse(filename).dir !== "" || exports.ppath.parse(filename).dir !== "")
throw new Error(`Invalid filename: "${filename}"`);
return filename;
}
exports.toFilename = toFilename;
}
});
// ../../node_modules/@yarnpkg/fslib/lib/algorithms/copyPromise.js
var require_copyPromise = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/algorithms/copyPromise.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.copyPromise = exports.LinkStrategy = void 0;
var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports)), fs_1 = tslib_1.__importDefault(__require("fs")), constants5 = tslib_1.__importStar(require_constants()), path_1 = require_path(), defaultTime = new Date(constants5.SAFE_TIME * 1e3), LinkStrategy;
(function(LinkStrategy2) {
LinkStrategy2.Allow = "allow", LinkStrategy2.ReadOnly = "readOnly";
})(LinkStrategy = exports.LinkStrategy || (exports.LinkStrategy = {}));
async function copyPromise(destinationFs, destination, sourceFs, source, opts) {
let normalizedDestination = destinationFs.pathUtils.normalize(destination), normalizedSource = sourceFs.pathUtils.normalize(source), prelayout = [], postlayout = [], { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : await sourceFs.lstatPromise(normalizedSource);
await destinationFs.mkdirpPromise(destinationFs.pathUtils.dirname(destination), { utimes: [atime, mtime] });
let updateTime = typeof destinationFs.lutimesPromise == "function" ? destinationFs.lutimesPromise.bind(destinationFs) : destinationFs.utimesPromise.bind(destinationFs);
await copyImpl(prelayout, postlayout, updateTime, destinationFs, normalizedDestination, sourceFs, normalizedSource, { ...opts, didParentExist: !0 });
for (let operation of prelayout)
await operation();
await Promise.all(postlayout.map((operation) => operation()));
}
exports.copyPromise = copyPromise;
async function copyImpl(prelayout, postlayout, updateTime, destinationFs, destination, sourceFs, source, opts) {
var _a, _b;
let destinationStat = opts.didParentExist ? await maybeLStat(destinationFs, destination) : null, sourceStat = await sourceFs.lstatPromise(source), { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : sourceStat, updated;
switch (!0) {
case sourceStat.isDirectory():
updated = await copyFolder(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts);
break;
case sourceStat.isFile():
updated = await copyFile2(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts);
break;
case sourceStat.isSymbolicLink():
updated = await copySymlink(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts);
break;
default:
throw new Error(`Unsupported file type (${sourceStat.mode})`);
}
return (updated || ((_a = destinationStat?.mtime) === null || _a === void 0 ? void 0 : _a.getTime()) !== mtime.getTime() || ((_b = destinationStat?.atime) === null || _b === void 0 ? void 0 : _b.getTime()) !== atime.getTime()) && (postlayout.push(() => updateTime(destination, atime, mtime)), updated = !0), (destinationStat === null || (destinationStat.mode & 511) !== (sourceStat.mode & 511)) && (postlayout.push(() => destinationFs.chmodPromise(destination, sourceStat.mode & 511)), updated = !0), updated;
}
async function maybeLStat(baseFs, p) {
try {
return await baseFs.lstatPromise(p);
} catch {
return null;
}
}
async function copyFolder(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) {
if (destinationStat !== null && !destinationStat.isDirectory())
if (opts.overwrite)
prelayout.push(async () => destinationFs.removePromise(destination)), destinationStat = null;
else
return !1;
let updated = !1;
destinationStat === null && (prelayout.push(async () => {
try {
await destinationFs.mkdirPromise(destination, { mode: sourceStat.mode });
} catch (err) {
if (err.code !== "EEXIST")
throw err;
}
}), updated = !0);
let entries = await sourceFs.readdirPromise(source), nextOpts = opts.didParentExist && !destinationStat ? { ...opts, didParentExist: !1 } : opts;
if (opts.stableSort)
for (let entry of entries.sort())
await copyImpl(prelayout, postlayout, updateTime, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts) && (updated = !0);
else
(await Promise.all(entries.map(async (entry) => {
await copyImpl(prelayout, postlayout, updateTime, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts);
}))).some((status) => status) && (updated = !0);
return updated;
}
var isCloneSupportedCache = /* @__PURE__ */ new WeakMap();
function makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy) {
return async () => {
await opFs.linkPromise(source, destination), linkStrategy === LinkStrategy.ReadOnly && (sourceStat.mode &= -147, await opFs.chmodPromise(destination, sourceStat.mode));
};
}
function makeCloneLinkOperation(opFs, destination, source, sourceStat, linkStrategy) {
let isCloneSupported = isCloneSupportedCache.get(opFs);
return typeof isCloneSupported > "u" ? async () => {
try {
await opFs.copyFilePromise(source, destination, fs_1.default.constants.COPYFILE_FICLONE_FORCE), isCloneSupportedCache.set(opFs, !0);
} catch (err) {
if (err.code === "ENOSYS" || err.code === "ENOTSUP")
isCloneSupportedCache.set(opFs, !1), await makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy)();
else
throw err;
}
} : isCloneSupported ? async () => opFs.copyFilePromise(source, destination, fs_1.default.constants.COPYFILE_FICLONE_FORCE) : makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy);
}
async function copyFile2(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) {
var _a;
if (destinationStat !== null)
if (opts.overwrite)
prelayout.push(async () => destinationFs.removePromise(destination)), destinationStat = null;
else
return !1;
let linkStrategy = (_a = opts.linkStrategy) !== null && _a !== void 0 ? _a : null, op = destinationFs === sourceFs ? linkStrategy !== null ? makeCloneLinkOperation(destinationFs, destination, source, sourceStat, linkStrategy) : async () => destinationFs.copyFilePromise(source, destination, fs_1.default.constants.COPYFILE_FICLONE) : linkStrategy !== null ? makeLinkOperation(destinationFs, destination, source, sourceStat, linkStrategy) : async () => destinationFs.writeFilePromise(destination, await sourceFs.readFilePromise(source));
return prelayout.push(async () => op()), !0;
}
async function copySymlink(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) {
if (destinationStat !== null)
if (opts.overwrite)
prelayout.push(async () => destinationFs.removePromise(destination)), destinationStat = null;
else
return !1;
return prelayout.push(async () => {
await destinationFs.symlinkPromise((0, path_1.convertPath)(destinationFs.pathUtils, await sourceFs.readlinkPromise(source)), destination);
}), !0;
}
}
});
// ../../node_modules/@yarnpkg/fslib/lib/errors.js
var require_errors2 = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/errors.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.LibzipError = exports.ERR_DIR_CLOSED = exports.EOPNOTSUPP = exports.ENOTEMPTY = exports.EROFS = exports.EEXIST = exports.EISDIR = exports.ENOTDIR = exports.ENOENT = exports.EBADF = exports.EINVAL = exports.ENOSYS = exports.EBUSY = void 0;
function makeError2(code, message) {
return Object.assign(new Error(`${code}: ${message}`), { code });
}
function EBUSY(message) {
return makeError2("EBUSY", message);
}
exports.EBUSY = EBUSY;
function ENOSYS(message, reason) {
return makeError2("ENOSYS", `${message}, ${reason}`);
}
exports.ENOSYS = ENOSYS;
function EINVAL(reason) {
return makeError2("EINVAL", `invalid argument, ${reason}`);
}
exports.EINVAL = EINVAL;
function EBADF(reason) {
return makeError2("EBADF", `bad file descriptor, ${reason}`);
}
exports.EBADF = EBADF;
function ENOENT(reason) {
return makeError2("ENOENT", `no such file or directory, ${reason}`);
}
exports.ENOENT = ENOENT;
function ENOTDIR(reason) {
return makeError2("ENOTDIR", `not a directory, ${reason}`);
}
exports.ENOTDIR = ENOTDIR;
function EISDIR(reason) {
return makeError2("EISDIR", `illegal operation on a directory, ${reason}`);
}
exports.EISDIR = EISDIR;
function EEXIST(reason) {
return makeError2("EEXIST", `file already exists, ${reason}`);
}
exports.EEXIST = EEXIST;
function EROFS(reason) {
return makeError2("EROFS", `read-only filesystem, ${reason}`);
}
exports.EROFS = EROFS;
function ENOTEMPTY(reason) {
return makeError2("ENOTEMPTY", `directory not empty, ${reason}`);
}
exports.ENOTEMPTY = ENOTEMPTY;
function EOPNOTSUPP(reason) {
return makeError2("EOPNOTSUPP", `operation not supported, ${reason}`);
}
exports.EOPNOTSUPP = EOPNOTSUPP;
function ERR_DIR_CLOSED() {
return makeError2("ERR_DIR_CLOSED", "Directory handle was closed");
}
exports.ERR_DIR_CLOSED = ERR_DIR_CLOSED;
var LibzipError = class extends Error {
constructor(message, code) {
super(message), this.name = "Libzip Error", this.code = code;
}
};
exports.LibzipError = LibzipError;
}
});
// ../../node_modules/@yarnpkg/fslib/lib/algorithms/opendir.js
var require_opendir = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/algorithms/opendir.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.opendir = exports.CustomDir = void 0;
var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports)), errors = tslib_1.__importStar(require_errors2()), CustomDir = class {
constructor(path5, nextDirent, opts = {}) {
this.path = path5, this.nextDirent = nextDirent, this.opts = opts, this.closed = !1;
}
throwIfClosed() {
if (this.closed)
throw errors.ERR_DIR_CLOSED();
}
async *[Symbol.asyncIterator]() {
try {
let dirent;
for (; (dirent = await this.read()) !== null; )
yield dirent;
} finally {
await this.close();
}
}
read(cb) {
let dirent = this.readSync();
return typeof cb < "u" ? cb(null, dirent) : Promise.resolve(dirent);
}
readSync() {
return this.throwIfClosed(), this.nextDirent();
}
close(cb) {
return this.closeSync(), typeof cb < "u" ? cb(null) : Promise.resolve();
}
closeSync() {
var _a, _b;
this.throwIfClosed(), (_b = (_a = this.opts).onClose) === null || _b === void 0 || _b.call(_a), this.closed = !0;
}
};
exports.CustomDir = CustomDir;
function opendir(fakeFs, path5, entries, opts) {
let nextDirent = () => {
let filename = entries.shift();
return typeof filename > "u" ? null : Object.assign(fakeFs.statSync(fakeFs.pathUtils.join(path5, filename)), {
name: filename
});
};
return new CustomDir(path5, nextDirent, opts);
}
exports.opendir = opendir;
}
});
// ../../node_modules/@yarnpkg/fslib/lib/FakeFS.js
var require_FakeFS = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/FakeFS.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.normalizeLineEndings = exports.BasePortableFakeFS = exports.FakeFS = void 0;
var os_1 = __require("os"), copyPromise_1 = require_copyPromise(), path_1 = require_path(), FakeFS = class {
constructor(pathUtils) {
this.pathUtils = pathUtils;
}
async *genTraversePromise(init, { stableSort = !1 } = {}) {
let stack = [init];
for (; stack.length > 0; ) {
let p = stack.shift();
if ((await this.lstatPromise(p)).isDirectory()) {
let entries = await this.readdirPromise(p);
if (stableSort)
for (let entry2 of entries.sort())
stack.push(this.pathUtils.join(p, entry2));
else
throw new Error("Not supported");
} else
yield p;
}
}
async removePromise(p, { recursive = !0, maxRetries = 5 } = {}) {
let stat;
try {
stat = await this.lstatPromise(p);
} catch (error) {
if (error.code === "ENOENT")
return;
throw error;
}
if (stat.isDirectory()) {
if (recursive) {
let entries = await this.readdirPromise(p);
await Promise.all(entries.map((entry) => this.removePromise(this.pathUtils.resolve(p, entry))));
}
for (let t3 = 0; t3 <= maxRetries; t3++)
try {
await this.rmdirPromise(p);
break;
} catch (error) {
if (error.code !== "EBUSY" && error.code !== "ENOTEMPTY")
throw error;
t3 < maxRetries && await new Promise((resolve9) => setTimeout(resolve9, t3 * 100));
}
} else
await this.unlinkPromise(p);
}
removeSync(p, { recursive = !0 } = {}) {
let stat;
try {
stat = this.lstatSync(p);
} catch (error) {
if (error.code === "ENOENT")
return;
throw error;
}
if (stat.isDirectory()) {
if (recursive)
for (let entry of this.readdirSync(p))
this.removeSync(this.pathUtils.resolve(p, entry));
this.rmdirSync(p);
} else
this.unlinkSync(p);
}
async mkdirpPromise(p, { chmod, utimes } = {}) {
if (p = this.resolve(p), p === this.pathUtils.dirname(p))
return;
let parts = p.split(this.pathUtils.sep), createdDirectory;
for (let u2 = 2; u2 <= parts.length; ++u2) {
let subPath = parts.slice(0, u2).join(this.pathUtils.sep);
if (!this.existsSync(subPath)) {
try {
await this.mkdirPromise(subPath);
} catch (error) {
if (error.code === "EEXIST")
continue;
throw error;
}
if (createdDirectory ?? (createdDirectory = subPath), chmod != null && await this.chmodPromise(subPath, chmod), utimes != null)
await this.utimesPromise(subPath, utimes[0], utimes[1]);
else {
let parentStat = await this.statPromise(this.pathUtils.dirname(subPath));
await this.utimesPromise(subPath, parentStat.atime, parentStat.mtime);
}
}
}
return createdDirectory;
}
mkdirpSync(p, { chmod, utimes } = {}) {
if (p = this.resolve(p), p === this.pathUtils.dirname(p))
return;
let parts = p.split(this.pathUtils.sep), createdDirectory;
for (let u2 = 2; u2 <= parts.length; ++u2) {
let subPath = parts.slice(0, u2).join(this.pathUtils.sep);
if (!this.existsSync(subPath)) {
try {
this.mkdirSync(subPath);
} catch (error) {
if (error.code === "EEXIST")
continue;
throw error;
}
if (createdDirectory ?? (createdDirectory = subPath), chmod != null && this.chmodSync(subPath, chmod), utimes != null)
this.utimesSync(subPath, utimes[0], utimes[1]);
else {
let parentStat = this.statSync(this.pathUtils.dirname(subPath));
this.utimesSync(subPath, parentStat.atime, parentStat.mtime);
}
}
}
return createdDirectory;
}
async copyPromise(destination, source, { baseFs = this, overwrite = !0, stableSort = !1, stableTime = !1, linkStrategy = null } = {}) {
return await (0, copyPromise_1.copyPromise)(this, destination, baseFs, source, { overwrite, stableSort, stableTime, linkStrategy });
}
copySync(destination, source, { baseFs = this, overwrite = !0 } = {}) {
let stat = baseFs.lstatSync(source), exists = this.existsSync(destination);
if (stat.isDirectory()) {
this.mkdirpSync(destination);
let directoryListing = baseFs.readdirSync(source);
for (let entry of directoryListing)
this.copySync(this.pathUtils.join(destination, entry), baseFs.pathUtils.join(source, entry), { baseFs, overwrite });
} else if (stat.isFile()) {
if (!exists || overwrite) {
exists && this.removeSync(destination);
let content = baseFs.readFileSync(source);
this.writeFileSync(destination, content);
}
} else if (stat.isSymbolicLink()) {
if (!exists || overwrite) {
exists && this.removeSync(destination);
let target = baseFs.readlinkSync(source);
this.symlinkSync((0, path_1.convertPath)(this.pathUtils, target), destination);
}
} else
throw new Error(`Unsupported file type (file: ${source}, mode: 0o${stat.mode.toString(8).padStart(6, "0")})`);
let mode = stat.mode & 511;
this.chmodSync(destination, mode);
}
async changeFilePromise(p, content, opts = {}) {
return Buffer.isBuffer(content) ? this.changeFileBufferPromise(p, content, opts) : this.changeFileTextPromise(p, content, opts);
}
async changeFileBufferPromise(p, content, { mode } = {}) {
let current = Buffer.alloc(0);
try {
current = await this.readFilePromise(p);
} catch {
}
Buffer.compare(current, content) !== 0 && await this.writeFilePromise(p, content, { mode });
}
async changeFileTextPromise(p, content, { automaticNewlines, mode } = {}) {
let current = "";
try {
current = await this.readFilePromise(p, "utf8");
} catch {
}
let normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content;
current !== normalizedContent && await this.writeFilePromise(p, normalizedContent, { mode });
}
changeFileSync(p, content, opts = {}) {
return Buffer.isBuffer(content) ? this.changeFileBufferSync(p, content, opts) : this.changeFileTextSync(p, content, opts);
}
changeFileBufferSync(p, content, { mode } = {}) {
let current = Buffer.alloc(0);
try {
current = this.readFileSync(p);
} catch {
}
Buffer.compare(current, content) !== 0 && this.writeFileSync(p, content, { mode });
}
changeFileTextSync(p, content, { automaticNewlines = !1, mode } = {}) {
let current = "";
try {
current = this.readFileSync(p, "utf8");
} catch {
}
let normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content;
current !== normalizedContent && this.writeFileSync(p, normalizedContent, { mode });
}
async movePromise(fromP, toP) {
try {
await this.renamePromise(fromP, toP);
} catch (error) {
if (error.code === "EXDEV")
await this.copyPromise(toP, fromP), await this.removePromise(fromP);
else
throw error;
}
}
moveSync(fromP, toP) {
try {
this.renameSync(fromP, toP);
} catch (error) {
if (error.code === "EXDEV")
this.copySync(toP, fromP), this.removeSync(fromP);
else
throw error;
}
}
async lockPromise(affectedPath, callback) {
let lockPath = `${affectedPath}.flock`, interval = 1e3 / 60, startTime = Date.now(), fd = null, isAlive = async () => {
let pid;
try {
[pid] = await this.readJsonPromise(lockPath);
} catch {
return Date.now() - startTime < 500;
}
try {
return process.kill(pid, 0), !0;
} catch {
return !1;
}
};
for (; fd === null; )
try {
fd = await this.openPromise(lockPath, "wx");
} catch (error) {
if (error.code === "EEXIST") {
if (!await isAlive())
try {
await this.unlinkPromise(lockPath);
continue;
} catch {
}
if (Date.now() - startTime < 60 * 1e3)
await new Promise((resolve9) => setTimeout(resolve9, interval));
else
throw new Error(`Couldn't acquire a lock in a reasonable time (via ${lockPath})`);
} else
throw error;
}
await this.writePromise(fd, JSON.stringify([process.pid]));
try {
return await callback();
} finally {
try {
await this.closePromise(fd), await this.unlinkPromise(lockPath);
} catch {
}
}
}
async readJsonPromise(p) {
let content = await this.readFilePromise(p, "utf8");
try {
return JSON.parse(content);
} catch (error) {
throw error.message += ` (in ${p})`, error;
}
}
readJsonSync(p) {
let content = this.readFileSync(p, "utf8");
try {
return JSON.parse(content);
} catch (error) {
throw error.message += ` (in ${p})`, error;
}
}
async writeJsonPromise(p, data) {
return await this.writeFilePromise(p, `${JSON.stringify(data, null, 2)}
`);
}
writeJsonSync(p, data) {
return this.writeFileSync(p, `${JSON.stringify(data, null, 2)}
`);
}
async preserveTimePromise(p, cb) {
let stat = await this.lstatPromise(p), result = await cb();
typeof result < "u" && (p = result), this.lutimesPromise ? await this.lutimesPromise(p, stat.atime, stat.mtime) : stat.isSymbolicLink() || await this.utimesPromise(p, stat.atime, stat.mtime);
}
async preserveTimeSync(p, cb) {
let stat = this.lstatSync(p), result = cb();
typeof result < "u" && (p = result), this.lutimesSync ? this.lutimesSync(p, stat.atime, stat.mtime) : stat.isSymbolicLink() || this.utimesSync(p, stat.atime, stat.mtime);
}
};
exports.FakeFS = FakeFS;
var BasePortableFakeFS = class extends FakeFS {
constructor() {
super(path_1.ppath);
}
};
exports.BasePortableFakeFS = BasePortableFakeFS;
function getEndOfLine(content) {
let matches = content.match(/\r?\n/g);
if (matches === null)
return os_1.EOL;
let crlf = matches.filter((nl) => nl === `\r
`).length, lf = matches.length - crlf;
return crlf > lf ? `\r
` : `
`;
}
function normalizeLineEndings(originalContent, newContent) {
return newContent.replace(/\r?\n/g, getEndOfLine(originalContent));
}
exports.normalizeLineEndings = normalizeLineEndings;
}
});
// ../../node_modules/@yarnpkg/fslib/lib/NodeFS.js
var require_NodeFS = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/NodeFS.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.NodeFS = void 0;
var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports)), fs_1 = tslib_1.__importDefault(__require("fs")), FakeFS_1 = require_FakeFS(), errors_1 = require_errors2(), path_1 = require_path(), NodeFS = class extends FakeFS_1.BasePortableFakeFS {
constructor(realFs = fs_1.default) {
super(), this.realFs = realFs, typeof this.realFs.lutimes < "u" && (this.lutimesPromise = this.lutimesPromiseImpl, this.lutimesSync = this.lutimesSyncImpl);
}
getExtractHint() {
return !1;
}
getRealPath() {
return path_1.PortablePath.root;
}
resolve(p) {
return path_1.ppath.resolve(p);
}
async openPromise(p, flags, mode) {
return await new Promise((resolve9, reject) => {
this.realFs.open(path_1.npath.fromPortablePath(p), flags, mode, this.makeCallback(resolve9, reject));
});
}
openSync(p, flags, mode) {
return this.realFs.openSync(path_1.npath.fromPortablePath(p), flags, mode);
}
async opendirPromise(p, opts) {
return await new Promise((resolve9, reject) => {
typeof opts < "u" ? this.realFs.opendir(path_1.npath.fromPortablePath(p), opts, this.makeCallback(resolve9, reject)) : this.realFs.opendir(path_1.npath.fromPortablePath(p), this.makeCallback(resolve9, reject));
}).then((dir) => Object.defineProperty(dir, "path", { value: p, configurable: !0, writable: !0 }));
}
opendirSync(p, opts) {
let dir = typeof opts < "u" ? this.realFs.opendirSync(path_1.npath.fromPortablePath(p), opts) : this.realFs.opendirSync(path_1.npath.fromPortablePath(p));
return Object.defineProperty(dir, "path", { value: p, configurable: !0, writable: !0 });
}
async readPromise(fd, buffer, offset = 0, length = 0, position = -1) {
return await new Promise((resolve9, reject) => {
this.realFs.read(fd, buffer, offset, length, position, (error, bytesRead) => {
error ? reject(error) : resolve9(bytesRead);
});
});
}
readSync(fd, buffer, offset, length, position) {
return this.realFs.readSync(fd, buffer, offset, length, position);
}
async writePromise(fd, buffer, offset, length, position) {
return await new Promise((resolve9, reject) => typeof buffer == "string" ? this.realFs.write(fd, buffer, offset, this.makeCallback(resolve9, reject)) : this.realFs.write(fd, buffer, offset, length, position, this.makeCallback(resolve9, reject)));
}
writeSync(fd, buffer, offset, length, position) {
return typeof buffer == "string" ? this.realFs.writeSync(fd, buffer, offset) : this.realFs.writeSync(fd, buffer, offset, length, position);
}
async closePromise(fd) {
await new Promise((resolve9, reject) => {
this.realFs.close(fd, this.makeCallback(resolve9, reject));
});
}
closeSync(fd) {
this.realFs.closeSync(fd);
}
createReadStream(p, opts) {
let realPath = p !== null ? path_1.npath.fromPortablePath(p) : p;
return this.realFs.createReadStream(realPath, opts);
}
createWriteStream(p, opts) {
let realPath = p !== null ? path_1.npath.fromPortablePath(p) : p;
return this.realFs.createWriteStream(realPath, opts);
}
async realpathPromise(p) {
return await new Promise((resolve9, reject) => {
this.realFs.realpath(path_1.npath.fromPortablePath(p), {}, this.makeCallback(resolve9, reject));
}).then((path5) => path_1.npath.toPortablePath(path5));
}
realpathSync(p) {
return path_1.npath.toPortablePath(this.realFs.realpathSync(path_1.npath.fromPortablePath(p), {}));
}
async existsPromise(p) {
return await new Promise((resolve9) => {
this.realFs.exists(path_1.npath.fromPortablePath(p), resolve9);
});
}
accessSync(p, mode) {
return this.realFs.accessSync(path_1.npath.fromPortablePath(p), mode);
}
async accessPromise(p, mode) {
return await new Promise((resolve9, reject) => {
this.realFs.access(path_1.npath.fromPortablePath(p), mode, this.makeCallback(resolve9, reject));
});
}
existsSync(p) {
return this.realFs.existsSync(path_1.npath.fromPortablePath(p));
}
async statPromise(p, opts) {
return await new Promise((resolve9, reject) => {
opts ? this.realFs.stat(path_1.npath.fromPortablePath(p), opts, this.makeCallback(resolve9, reject)) : this.realFs.stat(path_1.npath.fromPortablePath(p), this.makeCallback(resolve9, reject));
});
}
statSync(p, opts) {
return opts ? this.realFs.statSync(path_1.npath.fromPortablePath(p), opts) : this.realFs.statSync(path_1.npath.fromPortablePath(p));
}
async fstatPromise(fd, opts) {
return await new Promise((resolve9, reject) => {
opts ? this.realFs.fstat(fd, opts, this.makeCallback(resolve9, reject)) : this.realFs.fstat(fd, this.makeCallback(resolve9, reject));
});
}
fstatSync(fd, opts) {
return opts ? this.realFs.fstatSync(fd, opts) : this.realFs.fstatSync(fd);
}
async lstatPromise(p, opts) {
return await new Promise((resolve9, reject) => {
opts ? this.realFs.lstat(path_1.npath.fromPortablePath(p), opts, this.makeCallback(resolve9, reject)) : this.realFs.lstat(path_1.npath.fromPortablePath(p), this.makeCallback(resolve9, reject));
});
}
lstatSync(p, opts) {
return opts ? this.realFs.lstatSync(path_1.npath.fromPortablePath(p), opts) : this.realFs.lstatSync(path_1.npath.fromPortablePath(p));
}
async fchmodPromise(fd, mask) {
return await new Promise((resolve9, reject) => {
this.realFs.fchmod(fd, mask, this.makeCallback(resolve9, reject));
});
}
fchmodSync(fd, mask) {
return this.realFs.fchmodSync(fd, mask);
}
async chmodPromise(p, mask) {
return await new Promise((resolve9, reject) => {
this.realFs.chmod(path_1.npath.fromPortablePath(p), mask, this.makeCallback(resolve9, reject));
});
}
chmodSync(p, mask) {
return this.realFs.chmodSync(path_1.npath.fromPortablePath(p), mask);
}
async fchownPromise(fd, uid, gid) {
return await new Promise((resolve9, reject) => {
this.realFs.fchown(fd, uid, gid, this.makeCallback(resolve9, reject));
});
}
fchownSync(fd, uid, gid) {
return this.realFs.fchownSync(fd, uid, gid);
}
async chownPromise(p, uid, gid) {
return await new Promise((resolve9, reject) => {
this.realFs.chown(path_1.npath.fromPortablePath(p), uid, gid, this.makeCallback(resolve9, reject));
});
}
chownSync(p, uid, gid) {
return this.realFs.chownSync(path_1.npath.fromPortablePath(p), uid, gid);
}
async renamePromise(oldP, newP) {
return await new Promise((resolve9, reject) => {
this.realFs.rename(path_1.npath.fromPortablePath(oldP), path_1.npath.fromPortablePath(newP), this.makeCallback(resolve9, reject));
});
}
renameSync(oldP, newP) {
return this.realFs.renameSync(path_1.npath.fromPortablePath(oldP), path_1.npath.fromPortablePath(newP));
}
async copyFilePromise(sourceP, destP, flags = 0) {
return await new Promise((resolve9, reject) => {
this.realFs.copyFile(path_1.npath.fromPortablePath(sourceP), path_1.npath.fromPortablePath(destP), flags, this.makeCallback(resolve9, reject));
});
}
copyFileSync(sourceP, destP, flags = 0) {
return this.realFs.copyFileSync(path_1.npath.fromPortablePath(sourceP), path_1.npath.fromPortablePath(destP), flags);
}
async appendFilePromise(p, content, opts) {
return await new Promise((resolve9, reject) => {
let fsNativePath = typeof p == "string" ? path_1.npath.fromPortablePath(p) : p;
opts ? this.realFs.appendFile(fsNativePath, content, opts, this.makeCallback(resolve9, reject)) : this.realFs.appendFile(fsNativePath, content, this.makeCallback(resolve9, reject));
});
}
appendFileSync(p, content, opts) {
let fsNativePath = typeof p == "string" ? path_1.npath.fromPortablePath(p) : p;
opts ? this.realFs.appendFileSync(fsNativePath, content, opts) : this.realFs.appendFileSync(fsNativePath, content);
}
async writeFilePromise(p, content, opts) {
return await new Promise((resolve9, reject) => {
let fsNativePath = typeof p == "string" ? path_1.npath.fromPortablePath(p) : p;
opts ? this.realFs.writeFile(fsNativePath, content, opts, this.makeCallback(resolve9, reject)) : this.realFs.writeFile(fsNativePath, content, this.makeCallback(resolve9, reject));
});
}
writeFileSync(p, content, opts) {
let fsNativePath = typeof p == "string" ? path_1.npath.fromPortablePath(p) : p;
opts ? this.realFs.writeFileSync(fsNativePath, content, opts) : this.realFs.writeFileSync(fsNativePath, content);
}
async unlinkPromise(p) {
return await new Promise((resolve9, reject) => {
this.realFs.unlink(path_1.npath.fromPortablePath(p), this.makeCallback(resolve9, reject));
});
}
unlinkSync(p) {
return this.realFs.unlinkSync(path_1.npath.fromPortablePath(p));
}
async utimesPromise(p, atime, mtime) {
return await new Promise((resolve9, reject) => {
this.realFs.utimes(path_1.npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve9, reject));
});
}
utimesSync(p, atime, mtime) {
this.realFs.utimesSync(path_1.npath.fromPortablePath(p), atime, mtime);
}
async lutimesPromiseImpl(p, atime, mtime) {
let lutimes = this.realFs.lutimes;
if (typeof lutimes > "u")
throw (0, errors_1.ENOSYS)("unavailable Node binding", `lutimes '${p}'`);
return await new Promise((resolve9, reject) => {
lutimes.call(this.realFs, path_1.npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve9, reject));
});
}
lutimesSyncImpl(p, atime, mtime) {
let lutimesSync = this.realFs.lutimesSync;
if (typeof lutimesSync > "u")
throw (0, errors_1.ENOSYS)("unavailable Node binding", `lutimes '${p}'`);
lutimesSync.call(this.realFs, path_1.npath.fromPortablePath(p), atime, mtime);
}
async mkdirPromise(p, opts) {
return await new Promise((resolve9, reject) => {
this.realFs.mkdir(path_1.npath.fromPortablePath(p), opts, this.makeCallback(resolve9, reject));
});
}
mkdirSync(p, opts) {
return this.realFs.mkdirSync(path_1.npath.fromPortablePath(p), opts);
}
async rmdirPromise(p, opts) {
return await new Promise((resolve9, reject) => {
opts ? this.realFs.rmdir(path_1.npath.fromPortablePath(p), opts, this.makeCallback(resolve9, reject)) : this.realFs.rmdir(path_1.npath.fromPortablePath(p), this.makeCallback(resolve9, reject));
});
}
rmdirSync(p, opts) {
return this.realFs.rmdirSync(path_1.npath.fromPortablePath(p), opts);
}
async linkPromise(existingP, newP) {
return await new Promise((resolve9, reject) => {
this.realFs.link(path_1.npath.fromPortablePath(existingP), path_1.npath.fromPortablePath(newP), this.makeCallback(resolve9, reject));
});
}
linkSync(existingP, newP) {
return this.realFs.linkSync(path_1.npath.fromPortablePath(existingP), path_1.npath.fromPortablePath(newP));
}
async symlinkPromise(target, p, type) {
return await new Promise((resolve9, reject) => {
this.realFs.symlink(path_1.npath.fromPortablePath(target.replace(/\/+$/, "")), path_1.npath.fromPortablePath(p), type, this.makeCallback(resolve9, reject));
});
}
symlinkSync(target, p, type) {
return this.realFs.symlinkSync(path_1.npath.fromPortablePath(target.replace(/\/+$/, "")), path_1.npath.fromPortablePath(p), type);
}
async readFilePromise(p, encoding) {
return await new Promise((resolve9, reject) => {
let fsNativePath = typeof p == "string" ? path_1.npath.fromPortablePath(p) : p;
this.realFs.readFile(fsNativePath, encoding, this.makeCallback(resolve9, reject));
});
}
readFileSync(p, encoding) {
let fsNativePath = typeof p == "string" ? path_1.npath.fromPortablePath(p) : p;
return this.realFs.readFileSync(fsNativePath, encoding);
}
async readdirPromise(p, opts) {
return await new Promise((resolve9, reject) => {
opts?.withFileTypes ? this.realFs.readdir(path_1.npath.fromPortablePath(p), { withFileTypes: !0 }, this.makeCallback(resolve9, reject)) : this.realFs.readdir(path_1.npath.fromPortablePath(p), this.makeCallback((value) => resolve9(value), reject));
});
}
readdirSync(p, opts) {
return opts?.withFileTypes ? this.realFs.readdirSync(path_1.npath.fromPortablePath(p), { withFileTypes: !0 }) : this.realFs.readdirSync(path_1.npath.fromPortablePath(p));
}
async readlinkPromise(p) {
return await new Promise((resolve9, reject) => {
this.realFs.readlink(path_1.npath.fromPortablePath(p), this.makeCallback(resolve9, reject));
}).then((path5) => path_1.npath.toPortablePath(path5));
}
readlinkSync(p) {
return path_1.npath.toPortablePath(this.realFs.readlinkSync(path_1.npath.fromPortablePath(p)));
}
async truncatePromise(p, len) {
return await new Promise((resolve9, reject) => {
this.realFs.truncate(path_1.npath.fromPortablePath(p), len, this.makeCallback(resolve9, reject));
});
}
truncateSync(p, len) {
return this.realFs.truncateSync(path_1.npath.fromPortablePath(p), len);
}
async ftruncatePromise(fd, len) {
return await new Promise((resolve9, reject) => {
this.realFs.ftruncate(fd, len, this.makeCallback(resolve9, reject));
});
}
ftruncateSync(fd, len) {
return this.realFs.ftruncateSync(fd, len);
}
watch(p, a2, b) {
return this.realFs.watch(
path_1.npath.fromPortablePath(p),
// @ts-expect-error
a2,
b
);
}
watchFile(p, a2, b) {
return this.realFs.watchFile(
path_1.npath.fromPortablePath(p),
// @ts-expect-error
a2,
b
);
}
unwatchFile(p, cb) {
return this.realFs.unwatchFile(path_1.npath.fromPortablePath(p), cb);
}
makeCallback(resolve9, reject) {
return (err, result) => {
err ? reject(err) : resolve9(result);
};
}
};
exports.NodeFS = NodeFS;
}
});
// ../../node_modules/@yarnpkg/fslib/lib/algorithms/watchFile/CustomStatWatcher.js
var require_CustomStatWatcher = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/algorithms/watchFile/CustomStatWatcher.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.CustomStatWatcher = exports.assertStatus = exports.Status = exports.Event = void 0;
var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports)), events_1 = __require("events"), statUtils = tslib_1.__importStar(require_statUtils()), Event;
(function(Event2) {
Event2.Change = "change", Event2.Stop = "stop";
})(Event = exports.Event || (exports.Event = {}));
var Status;
(function(Status2) {
Status2.Ready = "ready", Status2.Running = "running", Status2.Stopped = "stopped";
})(Status = exports.Status || (exports.Status = {}));
function assertStatus(current, expected) {
if (current !== expected)
throw new Error(`Invalid StatWatcher status: expected '${expected}', got '${current}'`);
}
exports.assertStatus = assertStatus;
var CustomStatWatcher = class _CustomStatWatcher extends events_1.EventEmitter {
static create(fakeFs, path5, opts) {
let statWatcher = new _CustomStatWatcher(fakeFs, path5, opts);
return statWatcher.start(), statWatcher;
}
constructor(fakeFs, path5, { bigint = !1 } = {}) {
super(), this.status = Status.Ready, this.changeListeners = /* @__PURE__ */ new Map(), this.startTimeout = null, this.fakeFs = fakeFs, this.path = path5, this.bigint = bigint, this.lastStats = this.stat();
}
start() {
assertStatus(this.status, Status.Ready), this.status = Status.Running, this.startTimeout = setTimeout(() => {
this.startTimeout = null, this.fakeFs.existsSync(this.path) || this.emit(Event.Change, this.lastStats, this.lastStats);
}, 3);
}
stop() {
assertStatus(this.status, Status.Running), this.status = Status.Stopped, this.startTimeout !== null && (clearTimeout(this.startTimeout), this.startTimeout = null), this.emit(Event.Stop);
}
stat() {
try {
return this.fakeFs.statSync(this.path, { bigint: this.bigint });
} catch {
let statInstance = this.bigint ? new statUtils.BigIntStatsEntry() : new statUtils.StatEntry();
return statUtils.clearStats(statInstance);
}
}
/**
* Creates an interval whose callback compares the current stats with the previous stats and notifies all listeners in case of changes.
*
* @param opts.persistent Decides whether the interval should be immediately unref-ed.
*/
makeInterval(opts) {
let interval = setInterval(() => {
let currentStats = this.stat(), previousStats = this.lastStats;
statUtils.areStatsEqual(currentStats, previousStats) || (this.lastStats = currentStats, this.emit(Event.Change, currentStats, previousStats));
}, opts.interval);
return opts.persistent ? interval : interval.unref();
}
/**
* Registers a listener and assigns it an interval.
*/
registerChangeListener(listener, opts) {
this.addListener(Event.Change, listener), this.changeListeners.set(listener, this.makeInterval(opts));
}
/**
* Unregisters the listener and clears the assigned interval.
*/
unregisterChangeListener(listener) {
this.removeListener(Event.Change, listener);
let interval = this.changeListeners.get(listener);
typeof interval < "u" && clearInterval(interval), this.changeListeners.delete(listener);
}
/**
* Unregisters all listeners and clears all assigned intervals.
*/
unregisterAllChangeListeners() {
for (let listener of this.changeListeners.keys())
this.unregisterChangeListener(listener);
}
hasChangeListeners() {
return this.changeListeners.size > 0;
}
/**
* Refs all stored intervals.
*/
ref() {
for (let interval of this.changeListeners.values())
interval.ref();
return this;
}
/**
* Unrefs all stored intervals.
*/
unref() {
for (let interval of this.changeListeners.values())
interval.unref();
return this;
}
};
exports.CustomStatWatcher = CustomStatWatcher;
}
});
// ../../node_modules/@yarnpkg/fslib/lib/algorithms/watchFile.js
var require_watchFile = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/algorithms/watchFile.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.unwatchAllFiles = exports.unwatchFile = exports.watchFile = void 0;
var CustomStatWatcher_1 = require_CustomStatWatcher(), statWatchersByFakeFS = /* @__PURE__ */ new WeakMap();
function watchFile(fakeFs, path5, a2, b) {
let bigint, persistent, interval, listener;
typeof a2 === "function" ? (bigint = !1, persistent = !0, interval = 5007, listener = a2) : ({
bigint = !1,
persistent = !0,
interval = 5007
} = a2, listener = b);
let statWatchers = statWatchersByFakeFS.get(fakeFs);
typeof statWatchers > "u" && statWatchersByFakeFS.set(fakeFs, statWatchers = /* @__PURE__ */ new Map());
let statWatcher = statWatchers.get(path5);
return typeof statWatcher > "u" && (statWatcher = CustomStatWatcher_1.CustomStatWatcher.create(fakeFs, path5, { bigint }), statWatchers.set(path5, statWatcher)), statWatcher.registerChangeListener(listener, { persistent, interval }), statWatcher;
}
exports.watchFile = watchFile;
function unwatchFile(fakeFs, path5, cb) {
let statWatchers = statWatchersByFakeFS.get(fakeFs);
if (typeof statWatchers > "u")
return;
let statWatcher = statWatchers.get(path5);
typeof statWatcher > "u" || (typeof cb > "u" ? statWatcher.unregisterAllChangeListeners() : statWatcher.unregisterChangeListener(cb), statWatcher.hasChangeListeners() || (statWatcher.stop(), statWatchers.delete(path5)));
}
exports.unwatchFile = unwatchFile;
function unwatchAllFiles(fakeFs) {
let statWatchers = statWatchersByFakeFS.get(fakeFs);
if (!(typeof statWatchers > "u"))
for (let path5 of statWatchers.keys())
unwatchFile(fakeFs, path5);
}
exports.unwatchAllFiles = unwatchAllFiles;
}
});
// ../../node_modules/@yarnpkg/fslib/lib/ZipFS.js
var require_ZipFS = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/ZipFS.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.ZipFS = exports.makeEmptyArchive = exports.DEFAULT_COMPRESSION_LEVEL = void 0;
var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports)), fs_1 = __require("fs"), stream_1 = __require("stream"), util_1 = __require("util"), zlib_1 = tslib_1.__importDefault(__require("zlib")), FakeFS_1 = require_FakeFS(), NodeFS_1 = require_NodeFS(), opendir_1 = require_opendir(), watchFile_1 = require_watchFile(), constants_1 = require_constants(), errors = tslib_1.__importStar(require_errors2()), path_1 = require_path(), statUtils = tslib_1.__importStar(require_statUtils());
exports.DEFAULT_COMPRESSION_LEVEL = "mixed";
function toUnixTimestamp(time) {
if (typeof time == "string" && String(+time) === time)
return +time;
if (typeof time == "number" && Number.isFinite(time))
return time < 0 ? Date.now() / 1e3 : time;
if (util_1.types.isDate(time))
return time.getTime() / 1e3;
throw new Error("Invalid time");
}
function makeEmptyArchive() {
return Buffer.from([
80,
75,
5,
6,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
]);
}
exports.makeEmptyArchive = makeEmptyArchive;
var ZipFS = class extends FakeFS_1.BasePortableFakeFS {
constructor(source, opts) {
super(), this.lzSource = null, this.listings = /* @__PURE__ */ new Map(), this.entries = /* @__PURE__ */ new Map(), this.fileSources = /* @__PURE__ */ new Map(), this.fds = /* @__PURE__ */ new Map(), this.nextFd = 0, this.ready = !1, this.readOnly = !1, this.libzip = opts.libzip;
let pathOptions = opts;
if (this.level = typeof pathOptions.level < "u" ? pathOptions.level : exports.DEFAULT_COMPRESSION_LEVEL, source ?? (source = makeEmptyArchive()), typeof source == "string") {
let { baseFs = new NodeFS_1.NodeFS() } = pathOptions;
this.baseFs = baseFs, this.path = source;
} else
this.path = null, this.baseFs = null;
if (opts.stats)
this.stats = opts.stats;
else if (typeof source == "string")
try {
this.stats = this.baseFs.statSync(source);
} catch (error) {
if (error.code === "ENOENT" && pathOptions.create)
this.stats = statUtils.makeDefaultStats();
else
throw error;
}
else
this.stats = statUtils.makeDefaultStats();
let errPtr = this.libzip.malloc(4);
try {
let flags = 0;
if (typeof source == "string" && pathOptions.create && (flags |= this.libzip.ZIP_CREATE | this.libzip.ZIP_TRUNCATE), opts.readOnly && (flags |= this.libzip.ZIP_RDONLY, this.readOnly = !0), typeof source == "string")
this.zip = this.libzip.open(path_1.npath.fromPortablePath(source), flags, errPtr);
else {
let lzSource = this.allocateUnattachedSource(source);
try {
this.zip = this.libzip.openFromSource(lzSource, flags, errPtr), this.lzSource = lzSource;
} catch (error) {
throw this.libzip.source.free(lzSource), error;
}
}
if (this.zip === 0) {
let error = this.libzip.struct.errorS();
throw this.libzip.error.initWithCode(error, this.libzip.getValue(errPtr, "i32")), this.makeLibzipError(error);
}
} finally {
this.libzip.free(errPtr);
}
this.listings.set(path_1.PortablePath.root, /* @__PURE__ */ new Set());
let entryCount = this.libzip.getNumEntries(this.zip, 0);
for (let t3 = 0; t3 < entryCount; ++t3) {
let raw = this.libzip.getName(this.zip, t3, 0);
if (path_1.ppath.isAbsolute(raw))
continue;
let p = path_1.ppath.resolve(path_1.PortablePath.root, raw);
this.registerEntry(p, t3), raw.endsWith("/") && this.registerListing(p);
}
if (this.symlinkCount = this.libzip.ext.countSymlinks(this.zip), this.symlinkCount === -1)
throw this.makeLibzipError(this.libzip.getError(this.zip));
this.ready = !0;
}
makeLibzipError(error) {
let errorCode = this.libzip.struct.errorCodeZip(error), strerror = this.libzip.error.strerror(error), libzipError = new errors.LibzipError(strerror, this.libzip.errors[errorCode]);
if (errorCode === this.libzip.errors.ZIP_ER_CHANGED)
throw new Error(`Assertion failed: Unexpected libzip error: ${libzipError.message}`);
return libzipError;
}
getExtractHint(hints) {
for (let fileName of this.entries.keys()) {
let ext = this.pathUtils.extname(fileName);
if (hints.relevantExtensions.has(ext))
return !0;
}
return !1;
}
getAllFiles() {
return Array.from(this.entries.keys());
}
getRealPath() {
if (!this.path)
throw new Error("ZipFS don't have real paths when loaded from a buffer");
return this.path;
}
getBufferAndClose() {
if (this.prepareClose(), !this.lzSource)
throw new Error("ZipFS was not created from a Buffer");
if (this.entries.size === 0)
return this.discardAndClose(), makeEmptyArchive();
try {
if (this.libzip.source.keep(this.lzSource), this.libzip.close(this.zip) === -1)
throw this.makeLibzipError(this.libzip.getError(this.zip));
if (this.libzip.source.open(this.lzSource) === -1)
throw this.makeLibzipError(this.libzip.source.error(this.lzSource));
if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_END) === -1)
throw this.makeLibzipError(this.libzip.source.error(this.lzSource));
let size = this.libzip.source.tell(this.lzSource);
if (size === -1)
throw this.makeLibzipError(this.libzip.source.error(this.lzSource));
if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_SET) === -1)
throw this.makeLibzipError(this.libzip.source.error(this.lzSource));
let buffer = this.libzip.malloc(size);
if (!buffer)
throw new Error("Couldn't allocate enough memory");
try {
let rc = this.libzip.source.read(this.lzSource, buffer, size);
if (rc === -1)
throw this.makeLibzipError(this.libzip.source.error(this.lzSource));
if (rc < size)
throw new Error("Incomplete read");
if (rc > size)
throw new Error("Overread");
let memory = this.libzip.HEAPU8.subarray(buffer, buffer + size);
return Buffer.from(memory);
} finally {
this.libzip.free(buffer);
}
} finally {
this.libzip.source.close(this.lzSource), this.libzip.source.free(this.lzSource), this.ready = !1;
}
}
prepareClose() {
if (!this.ready)
throw errors.EBUSY("archive closed, close");
(0, watchFile_1.unwatchAllFiles)(this);
}
saveAndClose() {
if (!this.path || !this.baseFs)
throw new Error("ZipFS cannot be saved and must be discarded when loaded from a buffer");
if (this.prepareClose(), this.readOnly) {
this.discardAndClose();
return;
}
let newMode = this.baseFs.existsSync(this.path) || this.stats.mode === statUtils.DEFAULT_MODE ? void 0 : this.stats.mode;
if (this.entries.size === 0)
this.discardAndClose(), this.baseFs.writeFileSync(this.path, makeEmptyArchive(), { mode: newMode });
else {
if (this.libzip.close(this.zip) === -1)
throw this.makeLibzipError(this.libzip.getError(this.zip));
typeof newMode < "u" && this.baseFs.chmodSync(this.path, newMode);
}
this.ready = !1;
}
discardAndClose() {
this.prepareClose(), this.libzip.discard(this.zip), this.ready = !1;
}
resolve(p) {
return path_1.ppath.resolve(path_1.PortablePath.root, p);
}
async openPromise(p, flags, mode) {
return this.openSync(p, flags, mode);
}
openSync(p, flags, mode) {
let fd = this.nextFd++;
return this.fds.set(fd, { cursor: 0, p }), fd;
}
hasOpenFileHandles() {
return !!this.fds.size;
}
async opendirPromise(p, opts) {
return this.opendirSync(p, opts);
}
opendirSync(p, opts = {}) {
let resolvedP = this.resolveFilename(`opendir '${p}'`, p);
if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP))
throw errors.ENOENT(`opendir '${p}'`);
let directoryListing = this.listings.get(resolvedP);
if (!directoryListing)
throw errors.ENOTDIR(`opendir '${p}'`);
let entries = [...directoryListing], fd = this.openSync(resolvedP, "r"), onClose = () => {
this.closeSync(fd);
};
return (0, opendir_1.opendir)(this, resolvedP, entries, { onClose });
}
async readPromise(fd, buffer, offset, length, position) {
return this.readSync(fd, buffer, offset, length, position);
}
readSync(fd, buffer, offset = 0, length = buffer.byteLength, position = -1) {
let entry = this.fds.get(fd);
if (typeof entry > "u")
throw errors.EBADF("read");
let realPosition = position === -1 || position === null ? entry.cursor : position, source = this.readFileSync(entry.p);
source.copy(buffer, offset, realPosition, realPosition + length);
let bytesRead = Math.max(0, Math.min(source.length - realPosition, length));
return (position === -1 || position === null) && (entry.cursor += bytesRead), bytesRead;
}
async writePromise(fd, buffer, offset, length, position) {
return typeof buffer == "string" ? this.writeSync(fd, buffer, position) : this.writeSync(fd, buffer, offset, length, position);
}
writeSync(fd, buffer, offset, length, position) {
throw typeof this.fds.get(fd) > "u" ? errors.EBADF("read") : new Error("Unimplemented");
}
async closePromise(fd) {
return this.closeSync(fd);
}
closeSync(fd) {
if (typeof this.fds.get(fd) > "u")
throw errors.EBADF("read");
this.fds.delete(fd);
}
createReadStream(p, { encoding } = {}) {
if (p === null)
throw new Error("Unimplemented");
let fd = this.openSync(p, "r"), stream = Object.assign(new stream_1.PassThrough({
emitClose: !0,
autoDestroy: !0,
destroy: (error, callback) => {
clearImmediate(immediate), this.closeSync(fd), callback(error);
}
}), {
close() {
stream.destroy();
},
bytesRead: 0,
path: p
}), immediate = setImmediate(async () => {
try {
let data = await this.readFilePromise(p, encoding);
stream.bytesRead = data.length, stream.end(data);
} catch (error) {
stream.destroy(error);
}
});
return stream;
}
createWriteStream(p, { encoding } = {}) {
if (this.readOnly)
throw errors.EROFS(`open '${p}'`);
if (p === null)
throw new Error("Unimplemented");
let chunks = [], fd = this.openSync(p, "w"), stream = Object.assign(new stream_1.PassThrough({
autoDestroy: !0,
emitClose: !0,
destroy: (error, callback) => {
try {
error ? callback(error) : (this.writeFileSync(p, Buffer.concat(chunks), encoding), callback(null));
} catch (err) {
callback(err);
} finally {
this.closeSync(fd);
}
}
}), {
bytesWritten: 0,
path: p,
close() {
stream.destroy();
}
});
return stream.on("data", (chunk) => {
let chunkBuffer = Buffer.from(chunk);
stream.bytesWritten += chunkBuffer.length, chunks.push(chunkBuffer);
}), stream;
}
async realpathPromise(p) {
return this.realpathSync(p);
}
realpathSync(p) {
let resolvedP = this.resolveFilename(`lstat '${p}'`, p);
if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP))
throw errors.ENOENT(`lstat '${p}'`);
return resolvedP;
}
async existsPromise(p) {
return this.existsSync(p);
}
existsSync(p) {
if (!this.ready)
throw errors.EBUSY(`archive closed, existsSync '${p}'`);
if (this.symlinkCount === 0) {
let resolvedP2 = path_1.ppath.resolve(path_1.PortablePath.root, p);
return this.entries.has(resolvedP2) || this.listings.has(resolvedP2);
}
let resolvedP;
try {
resolvedP = this.resolveFilename(`stat '${p}'`, p, void 0, !1);
} catch {
return !1;
}
return resolvedP === void 0 ? !1 : this.entries.has(resolvedP) || this.listings.has(resolvedP);
}
async accessPromise(p, mode) {
return this.accessSync(p, mode);
}
accessSync(p, mode = fs_1.constants.F_OK) {
let resolvedP = this.resolveFilename(`access '${p}'`, p);
if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP))
throw errors.ENOENT(`access '${p}'`);
if (this.readOnly && mode & fs_1.constants.W_OK)
throw errors.EROFS(`access '${p}'`);
}
async statPromise(p, opts = { bigint: !1 }) {
return opts.bigint ? this.statSync(p, { bigint: !0 }) : this.statSync(p);
}
statSync(p, opts = { bigint: !1, throwIfNoEntry: !0 }) {
let resolvedP = this.resolveFilename(`stat '${p}'`, p, void 0, opts.throwIfNoEntry);
if (resolvedP !== void 0) {
if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) {
if (opts.throwIfNoEntry === !1)
return;
throw errors.ENOENT(`stat '${p}'`);
}
if (p[p.length - 1] === "/" && !this.listings.has(resolvedP))
throw errors.ENOTDIR(`stat '${p}'`);
return this.statImpl(`stat '${p}'`, resolvedP, opts);
}
}
async fstatPromise(fd, opts) {
return this.fstatSync(fd, opts);
}
fstatSync(fd, opts) {
let entry = this.fds.get(fd);
if (typeof entry > "u")
throw errors.EBADF("fstatSync");
let { p } = entry, resolvedP = this.resolveFilename(`stat '${p}'`, p);
if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP))
throw errors.ENOENT(`stat '${p}'`);
if (p[p.length - 1] === "/" && !this.listings.has(resolvedP))
throw errors.ENOTDIR(`stat '${p}'`);
return this.statImpl(`fstat '${p}'`, resolvedP, opts);
}
async lstatPromise(p, opts = { bigint: !1 }) {
return opts.bigint ? this.lstatSync(p, { bigint: !0 }) : this.lstatSync(p);
}
lstatSync(p, opts = { bigint: !1, throwIfNoEntry: !0 }) {
let resolvedP = this.resolveFilename(`lstat '${p}'`, p, !1, opts.throwIfNoEntry);
if (resolvedP !== void 0) {
if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) {
if (opts.throwIfNoEntry === !1)
return;
throw errors.ENOENT(`lstat '${p}'`);
}
if (p[p.length - 1] === "/" && !this.listings.has(resolvedP))
throw errors.ENOTDIR(`lstat '${p}'`);
return this.statImpl(`lstat '${p}'`, resolvedP, opts);
}
}
statImpl(reason, p, opts = {}) {
let entry = this.entries.get(p);
if (typeof entry < "u") {
let stat = this.libzip.struct.statS();
if (this.libzip.statIndex(this.zip, entry, 0, 0, stat) === -1)
throw this.makeLibzipError(this.libzip.getError(this.zip));
let uid = this.stats.uid, gid = this.stats.gid, size = this.libzip.struct.statSize(stat) >>> 0, blksize = 512, blocks = Math.ceil(size / blksize), mtimeMs = (this.libzip.struct.statMtime(stat) >>> 0) * 1e3, atimeMs = mtimeMs, birthtimeMs = mtimeMs, ctimeMs = mtimeMs, atime = new Date(atimeMs), birthtime = new Date(birthtimeMs), ctime = new Date(ctimeMs), mtime = new Date(mtimeMs), type = this.listings.has(p) ? constants_1.S_IFDIR : this.isSymbolicLink(entry) ? constants_1.S_IFLNK : constants_1.S_IFREG, defaultMode = type === constants_1.S_IFDIR ? 493 : 420, mode = type | this.getUnixMode(entry, defaultMode) & 511, crc = this.libzip.struct.statCrc(stat), statInstance = Object.assign(new statUtils.StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode, crc });
return opts.bigint === !0 ? statUtils.convertToBigIntStats(statInstance) : statInstance;
}
if (this.listings.has(p)) {
let uid = this.stats.uid, gid = this.stats.gid, size = 0, blksize = 512, blocks = 0, atimeMs = this.stats.mtimeMs, birthtimeMs = this.stats.mtimeMs, ctimeMs = this.stats.mtimeMs, mtimeMs = this.stats.mtimeMs, atime = new Date(atimeMs), birthtime = new Date(birthtimeMs), ctime = new Date(ctimeMs), mtime = new Date(mtimeMs), mode = constants_1.S_IFDIR | 493, statInstance = Object.assign(new statUtils.StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode, crc: 0 });
return opts.bigint === !0 ? statUtils.convertToBigIntStats(statInstance) : statInstance;
}
throw new Error("Unreachable");
}
getUnixMode(index, defaultMode) {
if (this.libzip.file.getExternalAttributes(this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S) === -1)
throw this.makeLibzipError(this.libzip.getError(this.zip));
return this.libzip.getValue(this.libzip.uint08S, "i8") >>> 0 !== this.libzip.ZIP_OPSYS_UNIX ? defaultMode : this.libzip.getValue(this.libzip.uint32S, "i32") >>> 16;
}
registerListing(p) {
let existingListing = this.listings.get(p);
if (existingListing)
return existingListing;
this.registerListing(path_1.ppath.dirname(p)).add(path_1.ppath.basename(p));
let newListing = /* @__PURE__ */ new Set();
return this.listings.set(p, newListing), newListing;
}
registerEntry(p, index) {
this.registerListing(path_1.ppath.dirname(p)).add(path_1.ppath.basename(p)), this.entries.set(p, index);
}
unregisterListing(p) {
this.listings.delete(p);
let parentListing = this.listings.get(path_1.ppath.dirname(p));
parentListing?.delete(path_1.ppath.basename(p));
}
unregisterEntry(p) {
this.unregisterListing(p);
let entry = this.entries.get(p);
this.entries.delete(p), !(typeof entry > "u") && (this.fileSources.delete(entry), this.isSymbolicLink(entry) && this.symlinkCount--);
}
deleteEntry(p, index) {
if (this.unregisterEntry(p), this.libzip.delete(this.zip, index) === -1)
throw this.makeLibzipError(this.libzip.getError(this.zip));
}
resolveFilename(reason, p, resolveLastComponent = !0, throwIfNoEntry = !0) {
if (!this.ready)
throw errors.EBUSY(`archive closed, ${reason}`);
let resolvedP = path_1.ppath.resolve(path_1.PortablePath.root, p);
if (resolvedP === "/")
return path_1.PortablePath.root;
let fileIndex = this.entries.get(resolvedP);
if (resolveLastComponent && fileIndex !== void 0)
if (this.symlinkCount !== 0 && this.isSymbolicLink(fileIndex)) {
let target = this.getFileSource(fileIndex).toString();
return this.resolveFilename(reason, path_1.ppath.resolve(path_1.ppath.dirname(resolvedP), target), !0, throwIfNoEntry);
} else
return resolvedP;
for (; ; ) {
let parentP = this.resolveFilename(reason, path_1.ppath.dirname(resolvedP), !0, throwIfNoEntry);
if (parentP === void 0)
return parentP;
let isDir = this.listings.has(parentP), doesExist = this.entries.has(parentP);
if (!isDir && !doesExist) {
if (throwIfNoEntry === !1)
return;
throw errors.ENOENT(reason);
}
if (!isDir)
throw errors.ENOTDIR(reason);
if (resolvedP = path_1.ppath.resolve(parentP, path_1.ppath.basename(resolvedP)), !resolveLastComponent || this.symlinkCount === 0)
break;
let index = this.libzip.name.locate(this.zip, resolvedP.slice(1), 0);
if (index === -1)
break;
if (this.isSymbolicLink(index)) {
let target = this.getFileSource(index).toString();
resolvedP = path_1.ppath.resolve(path_1.ppath.dirname(resolvedP), target);
} else
break;
}
return resolvedP;
}
allocateBuffer(content) {
Buffer.isBuffer(content) || (content = Buffer.from(content));
let buffer = this.libzip.malloc(content.byteLength);
if (!buffer)
throw new Error("Couldn't allocate enough memory");
return new Uint8Array(this.libzip.HEAPU8.buffer, buffer, content.byteLength).set(content), { buffer, byteLength: content.byteLength };
}
allocateUnattachedSource(content) {
let error = this.libzip.struct.errorS(), { buffer, byteLength } = this.allocateBuffer(content), source = this.libzip.source.fromUnattachedBuffer(buffer, byteLength, 0, 1, error);
if (source === 0)
throw this.libzip.free(error), this.makeLibzipError(error);
return source;
}
allocateSource(content) {
let { buffer, byteLength } = this.allocateBuffer(content), source = this.libzip.source.fromBuffer(this.zip, buffer, byteLength, 0, 1);
if (source === 0)
throw this.libzip.free(buffer), this.makeLibzipError(this.libzip.getError(this.zip));
return source;
}
setFileSource(p, content) {
let buffer = Buffer.isBuffer(content) ? content : Buffer.from(content), target = path_1.ppath.relative(path_1.PortablePath.root, p), lzSource = this.allocateSource(content);
try {
let newIndex = this.libzip.file.add(this.zip, target, lzSource, this.libzip.ZIP_FL_OVERWRITE);
if (newIndex === -1)
throw this.makeLibzipError(this.libzip.getError(this.zip));
if (this.level !== "mixed") {
let method = this.level === 0 ? this.libzip.ZIP_CM_STORE : this.libzip.ZIP_CM_DEFLATE;
if (this.libzip.file.setCompression(this.zip, newIndex, 0, method, this.level) === -1)
throw this.makeLibzipError(this.libzip.getError(this.zip));
}
return this.fileSources.set(newIndex, buffer), newIndex;
} catch (error) {
throw this.libzip.source.free(lzSource), error;
}
}
isSymbolicLink(index) {
if (this.symlinkCount === 0)
return !1;
if (this.libzip.file.getExternalAttributes(this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S) === -1)
throw this.makeLibzipError(this.libzip.getError(this.zip));
return this.libzip.getValue(this.libzip.uint08S, "i8") >>> 0 !== this.libzip.ZIP_OPSYS_UNIX ? !1 : (this.libzip.getValue(this.libzip.uint32S, "i32") >>> 16 & constants_1.S_IFMT) === constants_1.S_IFLNK;
}
getFileSource(index, opts = { asyncDecompress: !1 }) {
let cachedFileSource = this.fileSources.get(index);
if (typeof cachedFileSource < "u")
return cachedFileSource;
let stat = this.libzip.struct.statS();
if (this.libzip.statIndex(this.zip, index, 0, 0, stat) === -1)
throw this.makeLibzipError(this.libzip.getError(this.zip));
let size = this.libzip.struct.statCompSize(stat), compressionMethod = this.libzip.struct.statCompMethod(stat), buffer = this.libzip.malloc(size);
try {
let file = this.libzip.fopenIndex(this.zip, index, 0, this.libzip.ZIP_FL_COMPRESSED);
if (file === 0)
throw this.makeLibzipError(this.libzip.getError(this.zip));
try {
let rc2 = this.libzip.fread(file, buffer, size, 0);
if (rc2 === -1)
throw this.makeLibzipError(this.libzip.file.getError(file));
if (rc2 < size)
throw new Error("Incomplete read");
if (rc2 > size)
throw new Error("Overread");
let memory = this.libzip.HEAPU8.subarray(buffer, buffer + size), data = Buffer.from(memory);
if (compressionMethod === 0)
return this.fileSources.set(index, data), data;
if (opts.asyncDecompress)
return new Promise((resolve9, reject) => {
zlib_1.default.inflateRaw(data, (error, result) => {
error ? reject(error) : (this.fileSources.set(index, result), resolve9(result));
});
});
{
let decompressedData = zlib_1.default.inflateRawSync(data);
return this.fileSources.set(index, decompressedData), decompressedData;
}
} finally {
this.libzip.fclose(file);
}
} finally {
this.libzip.free(buffer);
}
}
async fchmodPromise(fd, mask) {
return this.chmodPromise(this.fdToPath(fd, "fchmod"), mask);
}
fchmodSync(fd, mask) {
return this.chmodSync(this.fdToPath(fd, "fchmodSync"), mask);
}
async chmodPromise(p, mask) {
return this.chmodSync(p, mask);
}
chmodSync(p, mask) {
if (this.readOnly)
throw errors.EROFS(`chmod '${p}'`);
mask &= 493;
let resolvedP = this.resolveFilename(`chmod '${p}'`, p, !1), entry = this.entries.get(resolvedP);
if (typeof entry > "u")
throw new Error(`Assertion failed: The entry should have been registered (${resolvedP})`);
let newMod = this.getUnixMode(entry, constants_1.S_IFREG | 0) & -512 | mask;
if (this.libzip.file.setExternalAttributes(this.zip, entry, 0, 0, this.libzip.ZIP_OPSYS_UNIX, newMod << 16) === -1)
throw this.makeLibzipError(this.libzip.getError(this.zip));
}
async fchownPromise(fd, uid, gid) {
return this.chownPromise(this.fdToPath(fd, "fchown"), uid, gid);
}
fchownSync(fd, uid, gid) {
return this.chownSync(this.fdToPath(fd, "fchownSync"), uid, gid);
}
async chownPromise(p, uid, gid) {
return this.chownSync(p, uid, gid);
}
chownSync(p, uid, gid) {
throw new Error("Unimplemented");
}
async renamePromise(oldP, newP) {
return this.renameSync(oldP, newP);
}
renameSync(oldP, newP) {
throw new Error("Unimplemented");
}
async copyFilePromise(sourceP, destP, flags) {
let { indexSource, indexDest, resolvedDestP } = this.prepareCopyFile(sourceP, destP, flags), source = await this.getFileSource(indexSource, { asyncDecompress: !0 }), newIndex = this.setFileSource(resolvedDestP, source);
newIndex !== indexDest && this.registerEntry(resolvedDestP, newIndex);
}
copyFileSync(sourceP, destP, flags = 0) {
let { indexSource, indexDest, resolvedDestP } = this.prepareCopyFile(sourceP, destP, flags), source = this.getFileSource(indexSource), newIndex = this.setFileSource(resolvedDestP, source);
newIndex !== indexDest && this.registerEntry(resolvedDestP, newIndex);
}
prepareCopyFile(sourceP, destP, flags = 0) {
if (this.readOnly)
throw errors.EROFS(`copyfile '${sourceP} -> '${destP}'`);
if ((flags & fs_1.constants.COPYFILE_FICLONE_FORCE) !== 0)
throw errors.ENOSYS("unsupported clone operation", `copyfile '${sourceP}' -> ${destP}'`);
let resolvedSourceP = this.resolveFilename(`copyfile '${sourceP} -> ${destP}'`, sourceP), indexSource = this.entries.get(resolvedSourceP);
if (typeof indexSource > "u")
throw errors.EINVAL(`copyfile '${sourceP}' -> '${destP}'`);
let resolvedDestP = this.resolveFilename(`copyfile '${sourceP}' -> ${destP}'`, destP), indexDest = this.entries.get(resolvedDestP);
if ((flags & (fs_1.constants.COPYFILE_EXCL | fs_1.constants.COPYFILE_FICLONE_FORCE)) !== 0 && typeof indexDest < "u")
throw errors.EEXIST(`copyfile '${sourceP}' -> '${destP}'`);
return {
indexSource,
resolvedDestP,
indexDest
};
}
async appendFilePromise(p, content, opts) {
if (this.readOnly)
throw errors.EROFS(`open '${p}'`);
return typeof opts > "u" ? opts = { flag: "a" } : typeof opts == "string" ? opts = { flag: "a", encoding: opts } : typeof opts.flag > "u" && (opts = { flag: "a", ...opts }), this.writeFilePromise(p, content, opts);
}
appendFileSync(p, content, opts = {}) {
if (this.readOnly)
throw errors.EROFS(`open '${p}'`);
return typeof opts > "u" ? opts = { flag: "a" } : typeof opts == "string" ? opts = { flag: "a", encoding: opts } : typeof opts.flag > "u" && (opts = { flag: "a", ...opts }), this.writeFileSync(p, content, opts);
}
fdToPath(fd, reason) {
var _a;
let path5 = (_a = this.fds.get(fd)) === null || _a === void 0 ? void 0 : _a.p;
if (typeof path5 > "u")
throw errors.EBADF(reason);
return path5;
}
async writeFilePromise(p, content, opts) {
let { encoding, mode, index, resolvedP } = this.prepareWriteFile(p, opts);
index !== void 0 && typeof opts == "object" && opts.flag && opts.flag.includes("a") && (content = Buffer.concat([await this.getFileSource(index, { asyncDecompress: !0 }), Buffer.from(content)])), encoding !== null && (content = content.toString(encoding));
let newIndex = this.setFileSource(resolvedP, content);
newIndex !== index && this.registerEntry(resolvedP, newIndex), mode !== null && await this.chmodPromise(resolvedP, mode);
}
writeFileSync(p, content, opts) {
let { encoding, mode, index, resolvedP } = this.prepareWriteFile(p, opts);
index !== void 0 && typeof opts == "object" && opts.flag && opts.flag.includes("a") && (content = Buffer.concat([this.getFileSource(index), Buffer.from(content)])), encoding !== null && (content = content.toString(encoding));
let newIndex = this.setFileSource(resolvedP, content);
newIndex !== index && this.registerEntry(resolvedP, newIndex), mode !== null && this.chmodSync(resolvedP, mode);
}
prepareWriteFile(p, opts) {
if (typeof p == "number" && (p = this.fdToPath(p, "read")), this.readOnly)
throw errors.EROFS(`open '${p}'`);
let resolvedP = this.resolveFilename(`open '${p}'`, p);
if (this.listings.has(resolvedP))
throw errors.EISDIR(`open '${p}'`);
let encoding = null, mode = null;
typeof opts == "string" ? encoding = opts : typeof opts == "object" && ({
encoding = null,
mode = null
} = opts);
let index = this.entries.get(resolvedP);
return {
encoding,
mode,
resolvedP,
index
};
}
async unlinkPromise(p) {
return this.unlinkSync(p);
}
unlinkSync(p) {
if (this.readOnly)
throw errors.EROFS(`unlink '${p}'`);
let resolvedP = this.resolveFilename(`unlink '${p}'`, p);
if (this.listings.has(resolvedP))
throw errors.EISDIR(`unlink '${p}'`);
let index = this.entries.get(resolvedP);
if (typeof index > "u")
throw errors.EINVAL(`unlink '${p}'`);
this.deleteEntry(resolvedP, index);
}
async utimesPromise(p, atime, mtime) {
return this.utimesSync(p, atime, mtime);
}
utimesSync(p, atime, mtime) {
if (this.readOnly)
throw errors.EROFS(`utimes '${p}'`);
let resolvedP = this.resolveFilename(`utimes '${p}'`, p);
this.utimesImpl(resolvedP, mtime);
}
async lutimesPromise(p, atime, mtime) {
return this.lutimesSync(p, atime, mtime);
}
lutimesSync(p, atime, mtime) {
if (this.readOnly)
throw errors.EROFS(`lutimes '${p}'`);
let resolvedP = this.resolveFilename(`utimes '${p}'`, p, !1);
this.utimesImpl(resolvedP, mtime);
}
utimesImpl(resolvedP, mtime) {
this.listings.has(resolvedP) && (this.entries.has(resolvedP) || this.hydrateDirectory(resolvedP));
let entry = this.entries.get(resolvedP);
if (entry === void 0)
throw new Error("Unreachable");
if (this.libzip.file.setMtime(this.zip, entry, 0, toUnixTimestamp(mtime), 0) === -1)
throw this.makeLibzipError(this.libzip.getError(this.zip));
}
async mkdirPromise(p, opts) {
return this.mkdirSync(p, opts);
}
mkdirSync(p, { mode = 493, recursive = !1 } = {}) {
if (recursive)
return this.mkdirpSync(p, { chmod: mode });
if (this.readOnly)
throw errors.EROFS(`mkdir '${p}'`);
let resolvedP = this.resolveFilename(`mkdir '${p}'`, p);
if (this.entries.has(resolvedP) || this.listings.has(resolvedP))
throw errors.EEXIST(`mkdir '${p}'`);
this.hydrateDirectory(resolvedP), this.chmodSync(resolvedP, mode);
}
async rmdirPromise(p, opts) {
return this.rmdirSync(p, opts);
}
rmdirSync(p, { recursive = !1 } = {}) {
if (this.readOnly)
throw errors.EROFS(`rmdir '${p}'`);
if (recursive) {
this.removeSync(p);
return;
}
let resolvedP = this.resolveFilename(`rmdir '${p}'`, p), directoryListing = this.listings.get(resolvedP);
if (!directoryListing)
throw errors.ENOTDIR(`rmdir '${p}'`);
if (directoryListing.size > 0)
throw errors.ENOTEMPTY(`rmdir '${p}'`);
let index = this.entries.get(resolvedP);
if (typeof index > "u")
throw errors.EINVAL(`rmdir '${p}'`);
this.deleteEntry(p, index);
}
hydrateDirectory(resolvedP) {
let index = this.libzip.dir.add(this.zip, path_1.ppath.relative(path_1.PortablePath.root, resolvedP));
if (index === -1)
throw this.makeLibzipError(this.libzip.getError(this.zip));
return this.registerListing(resolvedP), this.registerEntry(resolvedP, index), index;
}
async linkPromise(existingP, newP) {
return this.linkSync(existingP, newP);
}
linkSync(existingP, newP) {
throw errors.EOPNOTSUPP(`link '${existingP}' -> '${newP}'`);
}
async symlinkPromise(target, p) {
return this.symlinkSync(target, p);
}
symlinkSync(target, p) {
if (this.readOnly)
throw errors.EROFS(`symlink '${target}' -> '${p}'`);
let resolvedP = this.resolveFilename(`symlink '${target}' -> '${p}'`, p);
if (this.listings.has(resolvedP))
throw errors.EISDIR(`symlink '${target}' -> '${p}'`);
if (this.entries.has(resolvedP))
throw errors.EEXIST(`symlink '${target}' -> '${p}'`);
let index = this.setFileSource(resolvedP, target);
if (this.registerEntry(resolvedP, index), this.libzip.file.setExternalAttributes(this.zip, index, 0, 0, this.libzip.ZIP_OPSYS_UNIX, (constants_1.S_IFLNK | 511) << 16) === -1)
throw this.makeLibzipError(this.libzip.getError(this.zip));
this.symlinkCount += 1;
}
async readFilePromise(p, encoding) {
typeof encoding == "object" && (encoding = encoding ? encoding.encoding : void 0);
let data = await this.readFileBuffer(p, { asyncDecompress: !0 });
return encoding ? data.toString(encoding) : data;
}
readFileSync(p, encoding) {
typeof encoding == "object" && (encoding = encoding ? encoding.encoding : void 0);
let data = this.readFileBuffer(p);
return encoding ? data.toString(encoding) : data;
}
readFileBuffer(p, opts = { asyncDecompress: !1 }) {
typeof p == "number" && (p = this.fdToPath(p, "read"));
let resolvedP = this.resolveFilename(`open '${p}'`, p);
if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP))
throw errors.ENOENT(`open '${p}'`);
if (p[p.length - 1] === "/" && !this.listings.has(resolvedP))
throw errors.ENOTDIR(`open '${p}'`);
if (this.listings.has(resolvedP))
throw errors.EISDIR("read");
let entry = this.entries.get(resolvedP);
if (entry === void 0)
throw new Error("Unreachable");
return this.getFileSource(entry, opts);
}
async readdirPromise(p, opts) {
return this.readdirSync(p, opts);
}
readdirSync(p, opts) {
let resolvedP = this.resolveFilename(`scandir '${p}'`, p);
if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP))
throw errors.ENOENT(`scandir '${p}'`);
let directoryListing = this.listings.get(resolvedP);
if (!directoryListing)
throw errors.ENOTDIR(`scandir '${p}'`);
let entries = [...directoryListing];
return opts?.withFileTypes ? entries.map((name) => Object.assign(this.statImpl("lstat", path_1.ppath.join(p, name)), {
name
})) : entries;
}
async readlinkPromise(p) {
let entry = this.prepareReadlink(p);
return (await this.getFileSource(entry, { asyncDecompress: !0 })).toString();
}
readlinkSync(p) {
let entry = this.prepareReadlink(p);
return this.getFileSource(entry).toString();
}
prepareReadlink(p) {
let resolvedP = this.resolveFilename(`readlink '${p}'`, p, !1);
if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP))
throw errors.ENOENT(`readlink '${p}'`);
if (p[p.length - 1] === "/" && !this.listings.has(resolvedP))
throw errors.ENOTDIR(`open '${p}'`);
if (this.listings.has(resolvedP))
throw errors.EINVAL(`readlink '${p}'`);
let entry = this.entries.get(resolvedP);
if (entry === void 0)
throw new Error("Unreachable");
if (!this.isSymbolicLink(entry))
throw errors.EINVAL(`readlink '${p}'`);
return entry;
}
async truncatePromise(p, len = 0) {
let resolvedP = this.resolveFilename(`open '${p}'`, p), index = this.entries.get(resolvedP);
if (typeof index > "u")
throw errors.EINVAL(`open '${p}'`);
let source = await this.getFileSource(index, { asyncDecompress: !0 }), truncated = Buffer.alloc(len, 0);
return source.copy(truncated), await this.writeFilePromise(p, truncated);
}
truncateSync(p, len = 0) {
let resolvedP = this.resolveFilename(`open '${p}'`, p), index = this.entries.get(resolvedP);
if (typeof index > "u")
throw errors.EINVAL(`open '${p}'`);
let source = this.getFileSource(index), truncated = Buffer.alloc(len, 0);
return source.copy(truncated), this.writeFileSync(p, truncated);
}
async ftruncatePromise(fd, len) {
return this.truncatePromise(this.fdToPath(fd, "ftruncate"), len);
}
ftruncateSync(fd, len) {
return this.truncateSync(this.fdToPath(fd, "ftruncateSync"), len);
}
watch(p, a2, b) {
let persistent;
switch (typeof a2) {
case "function":
case "string":
case "undefined":
persistent = !0;
break;
default:
({ persistent = !0 } = a2);
break;
}
if (!persistent)
return { on: () => {
}, close: () => {
} };
let interval = setInterval(() => {
}, 1440 * 60 * 1e3);
return { on: () => {
}, close: () => {
clearInterval(interval);
} };
}
watchFile(p, a2, b) {
let resolvedP = path_1.ppath.resolve(path_1.PortablePath.root, p);
return (0, watchFile_1.watchFile)(this, resolvedP, a2, b);
}
unwatchFile(p, cb) {
let resolvedP = path_1.ppath.resolve(path_1.PortablePath.root, p);
return (0, watchFile_1.unwatchFile)(this, resolvedP, cb);
}
};
exports.ZipFS = ZipFS;
}
});
// ../../node_modules/@yarnpkg/fslib/lib/ProxiedFS.js
var require_ProxiedFS = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/ProxiedFS.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.ProxiedFS = void 0;
var FakeFS_1 = require_FakeFS(), ProxiedFS = class extends FakeFS_1.FakeFS {
getExtractHint(hints) {
return this.baseFs.getExtractHint(hints);
}
resolve(path5) {
return this.mapFromBase(this.baseFs.resolve(this.mapToBase(path5)));
}
getRealPath() {
return this.mapFromBase(this.baseFs.getRealPath());
}
async openPromise(p, flags, mode) {
return this.baseFs.openPromise(this.mapToBase(p), flags, mode);
}
openSync(p, flags, mode) {
return this.baseFs.openSync(this.mapToBase(p), flags, mode);
}
async opendirPromise(p, opts) {
return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(p), opts), { path: p });
}
opendirSync(p, opts) {
return Object.assign(this.baseFs.opendirSync(this.mapToBase(p), opts), { path: p });
}
async readPromise(fd, buffer, offset, length, position) {
return await this.baseFs.readPromise(fd, buffer, offset, length, position);
}
readSync(fd, buffer, offset, length, position) {
return this.baseFs.readSync(fd, buffer, offset, length, position);
}
async writePromise(fd, buffer, offset, length, position) {
return typeof buffer == "string" ? await this.baseFs.writePromise(fd, buffer, offset) : await this.baseFs.writePromise(fd, buffer, offset, length, position);
}
writeSync(fd, buffer, offset, length, position) {
return typeof buffer == "string" ? this.baseFs.writeSync(fd, buffer, offset) : this.baseFs.writeSync(fd, buffer, offset, length, position);
}
async closePromise(fd) {
return this.baseFs.closePromise(fd);
}
closeSync(fd) {
this.baseFs.closeSync(fd);
}
createReadStream(p, opts) {
return this.baseFs.createReadStream(p !== null ? this.mapToBase(p) : p, opts);
}
createWriteStream(p, opts) {
return this.baseFs.createWriteStream(p !== null ? this.mapToBase(p) : p, opts);
}
async realpathPromise(p) {
return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(p)));
}
realpathSync(p) {
return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(p)));
}
async existsPromise(p) {
return this.baseFs.existsPromise(this.mapToBase(p));
}
existsSync(p) {
return this.baseFs.existsSync(this.mapToBase(p));
}
accessSync(p, mode) {
return this.baseFs.accessSync(this.mapToBase(p), mode);
}
async accessPromise(p, mode) {
return this.baseFs.accessPromise(this.mapToBase(p), mode);
}
async statPromise(p, opts) {
return this.baseFs.statPromise(this.mapToBase(p), opts);
}
statSync(p, opts) {
return this.baseFs.statSync(this.mapToBase(p), opts);
}
async fstatPromise(fd, opts) {
return this.baseFs.fstatPromise(fd, opts);
}
fstatSync(fd, opts) {
return this.baseFs.fstatSync(fd, opts);
}
lstatPromise(p, opts) {
return this.baseFs.lstatPromise(this.mapToBase(p), opts);
}
lstatSync(p, opts) {
return this.baseFs.lstatSync(this.mapToBase(p), opts);
}
async fchmodPromise(fd, mask) {
return this.baseFs.fchmodPromise(fd, mask);
}
fchmodSync(fd, mask) {
return this.baseFs.fchmodSync(fd, mask);
}
async chmodPromise(p, mask) {
return this.baseFs.chmodPromise(this.mapToBase(p), mask);
}
chmodSync(p, mask) {
return this.baseFs.chmodSync(this.mapToBase(p), mask);
}
async fchownPromise(fd, uid, gid) {
return this.baseFs.fchownPromise(fd, uid, gid);
}
fchownSync(fd, uid, gid) {
return this.baseFs.fchownSync(fd, uid, gid);
}
async chownPromise(p, uid, gid) {
return this.baseFs.chownPromise(this.mapToBase(p), uid, gid);
}
chownSync(p, uid, gid) {
return this.baseFs.chownSync(this.mapToBase(p), uid, gid);
}
async renamePromise(oldP, newP) {
return this.baseFs.renamePromise(this.mapToBase(oldP), this.mapToBase(newP));
}
renameSync(oldP, newP) {
return this.baseFs.renameSync(this.mapToBase(oldP), this.mapToBase(newP));
}
async copyFilePromise(sourceP, destP, flags = 0) {
return this.baseFs.copyFilePromise(this.mapToBase(sourceP), this.mapToBase(destP), flags);
}
copyFileSync(sourceP, destP, flags = 0) {
return this.baseFs.copyFileSync(this.mapToBase(sourceP), this.mapToBase(destP), flags);
}
async appendFilePromise(p, content, opts) {
return this.baseFs.appendFilePromise(this.fsMapToBase(p), content, opts);
}
appendFileSync(p, content, opts) {
return this.baseFs.appendFileSync(this.fsMapToBase(p), content, opts);
}
async writeFilePromise(p, content, opts) {
return this.baseFs.writeFilePromise(this.fsMapToBase(p), content, opts);
}
writeFileSync(p, content, opts) {
return this.baseFs.writeFileSync(this.fsMapToBase(p), content, opts);
}
async unlinkPromise(p) {
return this.baseFs.unlinkPromise(this.mapToBase(p));
}
unlinkSync(p) {
return this.baseFs.unlinkSync(this.mapToBase(p));
}
async utimesPromise(p, atime, mtime) {
return this.baseFs.utimesPromise(this.mapToBase(p), atime, mtime);
}
utimesSync(p, atime, mtime) {
return this.baseFs.utimesSync(this.mapToBase(p), atime, mtime);
}
async mkdirPromise(p, opts) {
return this.baseFs.mkdirPromise(this.mapToBase(p), opts);
}
mkdirSync(p, opts) {
return this.baseFs.mkdirSync(this.mapToBase(p), opts);
}
async rmdirPromise(p, opts) {
return this.baseFs.rmdirPromise(this.mapToBase(p), opts);
}
rmdirSync(p, opts) {
return this.baseFs.rmdirSync(this.mapToBase(p), opts);
}
async linkPromise(existingP, newP) {
return this.baseFs.linkPromise(this.mapToBase(existingP), this.mapToBase(newP));
}
linkSync(existingP, newP) {
return this.baseFs.linkSync(this.mapToBase(existingP), this.mapToBase(newP));
}
async symlinkPromise(target, p, type) {
let mappedP = this.mapToBase(p);
if (this.pathUtils.isAbsolute(target))
return this.baseFs.symlinkPromise(this.mapToBase(target), mappedP, type);
let mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)), mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget);
return this.baseFs.symlinkPromise(mappedTarget, mappedP, type);
}
symlinkSync(target, p, type) {
let mappedP = this.mapToBase(p);
if (this.pathUtils.isAbsolute(target))
return this.baseFs.symlinkSync(this.mapToBase(target), mappedP, type);
let mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)), mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget);
return this.baseFs.symlinkSync(mappedTarget, mappedP, type);
}
async readFilePromise(p, encoding) {
return encoding === "utf8" ? this.baseFs.readFilePromise(this.fsMapToBase(p), encoding) : this.baseFs.readFilePromise(this.fsMapToBase(p), encoding);
}
readFileSync(p, encoding) {
return encoding === "utf8" ? this.baseFs.readFileSync(this.fsMapToBase(p), encoding) : this.baseFs.readFileSync(this.fsMapToBase(p), encoding);
}
async readdirPromise(p, opts) {
return this.baseFs.readdirPromise(this.mapToBase(p), opts);
}
readdirSync(p, opts) {
return this.baseFs.readdirSync(this.mapToBase(p), opts);
}
async readlinkPromise(p) {
return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(p)));
}
readlinkSync(p) {
return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(p)));
}
async truncatePromise(p, len) {
return this.baseFs.truncatePromise(this.mapToBase(p), len);
}
truncateSync(p, len) {
return this.baseFs.truncateSync(this.mapToBase(p), len);
}
async ftruncatePromise(fd, len) {
return this.baseFs.ftruncatePromise(fd, len);
}
ftruncateSync(fd, len) {
return this.baseFs.ftruncateSync(fd, len);
}
watch(p, a2, b) {
return this.baseFs.watch(
this.mapToBase(p),
// @ts-expect-error
a2,
b
);
}
watchFile(p, a2, b) {
return this.baseFs.watchFile(
this.mapToBase(p),
// @ts-expect-error
a2,
b
);
}
unwatchFile(p, cb) {
return this.baseFs.unwatchFile(this.mapToBase(p), cb);
}
fsMapToBase(p) {
return typeof p == "number" ? p : this.mapToBase(p);
}
};
exports.ProxiedFS = ProxiedFS;
}
});
// ../../node_modules/@yarnpkg/fslib/lib/AliasFS.js
var require_AliasFS = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/AliasFS.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.AliasFS = void 0;
var ProxiedFS_1 = require_ProxiedFS(), AliasFS = class extends ProxiedFS_1.ProxiedFS {
constructor(target, { baseFs, pathUtils }) {
super(pathUtils), this.target = target, this.baseFs = baseFs;
}
getRealPath() {
return this.target;
}
getBaseFs() {
return this.baseFs;
}
mapFromBase(p) {
return p;
}
mapToBase(p) {
return p;
}
};
exports.AliasFS = AliasFS;
}
});
// ../../node_modules/@yarnpkg/fslib/lib/CwdFS.js
var require_CwdFS = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/CwdFS.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.CwdFS = void 0;
var NodeFS_1 = require_NodeFS(), ProxiedFS_1 = require_ProxiedFS(), path_1 = require_path(), CwdFS = class extends ProxiedFS_1.ProxiedFS {
constructor(target, { baseFs = new NodeFS_1.NodeFS() } = {}) {
super(path_1.ppath), this.target = this.pathUtils.normalize(target), this.baseFs = baseFs;
}
getRealPath() {
return this.pathUtils.resolve(this.baseFs.getRealPath(), this.target);
}
resolve(p) {
return this.pathUtils.isAbsolute(p) ? path_1.ppath.normalize(p) : this.baseFs.resolve(path_1.ppath.join(this.target, p));
}
mapFromBase(path5) {
return path5;
}
mapToBase(path5) {
return this.pathUtils.isAbsolute(path5) ? path5 : this.pathUtils.join(this.target, path5);
}
};
exports.CwdFS = CwdFS;
}
});
// ../../node_modules/@yarnpkg/fslib/lib/JailFS.js
var require_JailFS = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/JailFS.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.JailFS = void 0;
var NodeFS_1 = require_NodeFS(), ProxiedFS_1 = require_ProxiedFS(), path_1 = require_path(), JAIL_ROOT = path_1.PortablePath.root, JailFS = class extends ProxiedFS_1.ProxiedFS {
constructor(target, { baseFs = new NodeFS_1.NodeFS() } = {}) {
super(path_1.ppath), this.target = this.pathUtils.resolve(path_1.PortablePath.root, target), this.baseFs = baseFs;
}
getRealPath() {
return this.pathUtils.resolve(this.baseFs.getRealPath(), this.pathUtils.relative(path_1.PortablePath.root, this.target));
}
getTarget() {
return this.target;
}
getBaseFs() {
return this.baseFs;
}
mapToBase(p) {
let normalized = this.pathUtils.normalize(p);
if (this.pathUtils.isAbsolute(p))
return this.pathUtils.resolve(this.target, this.pathUtils.relative(JAIL_ROOT, p));
if (normalized.match(/^\.\.\/?/))
throw new Error(`Resolving this path (${p}) would escape the jail`);
return this.pathUtils.resolve(this.target, p);
}
mapFromBase(p) {
return this.pathUtils.resolve(JAIL_ROOT, this.pathUtils.relative(this.target, p));
}
};
exports.JailFS = JailFS;
}
});
// ../../node_modules/@yarnpkg/fslib/lib/LazyFS.js
var require_LazyFS = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/LazyFS.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.LazyFS = void 0;
var ProxiedFS_1 = require_ProxiedFS(), LazyFS = class extends ProxiedFS_1.ProxiedFS {
constructor(factory, pathUtils) {
super(pathUtils), this.instance = null, this.factory = factory;
}
get baseFs() {
return this.instance || (this.instance = this.factory()), this.instance;
}
set baseFs(value) {
this.instance = value;
}
mapFromBase(p) {
return p;
}
mapToBase(p) {
return p;
}
};
exports.LazyFS = LazyFS;
}
});
// ../../node_modules/@yarnpkg/fslib/lib/NoFS.js
var require_NoFS = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/NoFS.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.NoFS = void 0;
var FakeFS_1 = require_FakeFS(), path_1 = require_path(), makeError2 = () => Object.assign(new Error("ENOSYS: unsupported filesystem access"), { code: "ENOSYS" }), NoFS = class extends FakeFS_1.FakeFS {
constructor() {
super(path_1.ppath);
}
getExtractHint() {
throw makeError2();
}
getRealPath() {
throw makeError2();
}
resolve() {
throw makeError2();
}
async openPromise() {
throw makeError2();
}
openSync() {
throw makeError2();
}
async opendirPromise() {
throw makeError2();
}
opendirSync() {
throw makeError2();
}
async readPromise() {
throw makeError2();
}
readSync() {
throw makeError2();
}
async writePromise() {
throw makeError2();
}
writeSync() {
throw makeError2();
}
async closePromise() {
throw makeError2();
}
closeSync() {
throw makeError2();
}
createWriteStream() {
throw makeError2();
}
createReadStream() {
throw makeError2();
}
async realpathPromise() {
throw makeError2();
}
realpathSync() {
throw makeError2();
}
async readdirPromise() {
throw makeError2();
}
readdirSync() {
throw makeError2();
}
async existsPromise(p) {
throw makeError2();
}
existsSync(p) {
throw makeError2();
}
async accessPromise() {
throw makeError2();
}
accessSync() {
throw makeError2();
}
async statPromise() {
throw makeError2();
}
statSync() {
throw makeError2();
}
async fstatPromise(fd) {
throw makeError2();
}
fstatSync(fd) {
throw makeError2();
}
async lstatPromise(p) {
throw makeError2();
}
lstatSync(p) {
throw makeError2();
}
async fchmodPromise() {
throw makeError2();
}
fchmodSync() {
throw makeError2();
}
async chmodPromise() {
throw makeError2();
}
chmodSync() {
throw makeError2();
}
async fchownPromise() {
throw makeError2();
}
fchownSync() {
throw makeError2();
}
async chownPromise() {
throw makeError2();
}
chownSync() {
throw makeError2();
}
async mkdirPromise() {
throw makeError2();
}
mkdirSync() {
throw makeError2();
}
async rmdirPromise() {
throw makeError2();
}
rmdirSync() {
throw makeError2();
}
async linkPromise() {
throw makeError2();
}
linkSync() {
throw makeError2();
}
async symlinkPromise() {
throw makeError2();
}
symlinkSync() {
throw makeError2();
}
async renamePromise() {
throw makeError2();
}
renameSync() {
throw makeError2();
}
async copyFilePromise() {
throw makeError2();
}
copyFileSync() {
throw makeError2();
}
async appendFilePromise() {
throw makeError2();
}
appendFileSync() {
throw makeError2();
}
async writeFilePromise() {
throw makeError2();
}
writeFileSync() {
throw makeError2();
}
async unlinkPromise() {
throw makeError2();
}
unlinkSync() {
throw makeError2();
}
async utimesPromise() {
throw makeError2();
}
utimesSync() {
throw makeError2();
}
async readFilePromise() {
throw makeError2();
}
readFileSync() {
throw makeError2();
}
async readlinkPromise() {
throw makeError2();
}
readlinkSync() {
throw makeError2();
}
async truncatePromise() {
throw makeError2();
}
truncateSync() {
throw makeError2();
}
async ftruncatePromise(fd, len) {
throw makeError2();
}
ftruncateSync(fd, len) {
throw makeError2();
}
watch() {
throw makeError2();
}
watchFile() {
throw makeError2();
}
unwatchFile() {
throw makeError2();
}
};
NoFS.instance = new NoFS();
exports.NoFS = NoFS;
}
});
// ../../node_modules/@yarnpkg/fslib/lib/PosixFS.js
var require_PosixFS = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/PosixFS.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.PosixFS = void 0;
var ProxiedFS_1 = require_ProxiedFS(), path_1 = require_path(), PosixFS2 = class extends ProxiedFS_1.ProxiedFS {
constructor(baseFs) {
super(path_1.npath), this.baseFs = baseFs;
}
mapFromBase(path5) {
return path_1.npath.fromPortablePath(path5);
}
mapToBase(path5) {
return path_1.npath.toPortablePath(path5);
}
};
exports.PosixFS = PosixFS2;
}
});
// ../../node_modules/@yarnpkg/fslib/lib/VirtualFS.js
var require_VirtualFS = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/VirtualFS.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.VirtualFS = void 0;
var NodeFS_1 = require_NodeFS(), ProxiedFS_1 = require_ProxiedFS(), path_1 = require_path(), NUMBER_REGEXP = /^[0-9]+$/, VIRTUAL_REGEXP = /^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/, VALID_COMPONENT = /^([^/]+-)?[a-f0-9]+$/, VirtualFS2 = class _VirtualFS extends ProxiedFS_1.ProxiedFS {
static makeVirtualPath(base, component, to) {
if (path_1.ppath.basename(base) !== "__virtual__")
throw new Error('Assertion failed: Virtual folders must be named "__virtual__"');
if (!path_1.ppath.basename(component).match(VALID_COMPONENT))
throw new Error("Assertion failed: Virtual components must be ended by an hexadecimal hash");
let segments = path_1.ppath.relative(path_1.ppath.dirname(base), to).split("/"), depth = 0;
for (; depth < segments.length && segments[depth] === ".."; )
depth += 1;
let finalSegments = segments.slice(depth);
return path_1.ppath.join(base, component, String(depth), ...finalSegments);
}
static resolveVirtual(p) {
let match = p.match(VIRTUAL_REGEXP);
if (!match || !match[3] && match[5])
return p;
let target = path_1.ppath.dirname(match[1]);
if (!match[3] || !match[4])
return target;
if (!NUMBER_REGEXP.test(match[4]))
return p;
let depth = Number(match[4]), backstep = "../".repeat(depth), subpath = match[5] || ".";
return _VirtualFS.resolveVirtual(path_1.ppath.join(target, backstep, subpath));
}
constructor({ baseFs = new NodeFS_1.NodeFS() } = {}) {
super(path_1.ppath), this.baseFs = baseFs;
}
getExtractHint(hints) {
return this.baseFs.getExtractHint(hints);
}
getRealPath() {
return this.baseFs.getRealPath();
}
realpathSync(p) {
let match = p.match(VIRTUAL_REGEXP);
if (!match)
return this.baseFs.realpathSync(p);
if (!match[5])
return p;
let realpath2 = this.baseFs.realpathSync(this.mapToBase(p));
return _VirtualFS.makeVirtualPath(match[1], match[3], realpath2);
}
async realpathPromise(p) {
let match = p.match(VIRTUAL_REGEXP);
if (!match)
return await this.baseFs.realpathPromise(p);
if (!match[5])
return p;
let realpath2 = await this.baseFs.realpathPromise(this.mapToBase(p));
return _VirtualFS.makeVirtualPath(match[1], match[3], realpath2);
}
mapToBase(p) {
if (p === "")
return p;
if (this.pathUtils.isAbsolute(p))
return _VirtualFS.resolveVirtual(p);
let resolvedRoot = _VirtualFS.resolveVirtual(this.baseFs.resolve(path_1.PortablePath.dot)), resolvedP = _VirtualFS.resolveVirtual(this.baseFs.resolve(p));
return path_1.ppath.relative(resolvedRoot, resolvedP) || path_1.PortablePath.dot;
}
mapFromBase(p) {
return p;
}
};
exports.VirtualFS = VirtualFS2;
}
});
// ../../node_modules/@yarnpkg/fslib/lib/ZipOpenFS.js
var require_ZipOpenFS = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/ZipOpenFS.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.ZipOpenFS = exports.getArchivePart = void 0;
var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports)), fs_1 = __require("fs"), FakeFS_1 = require_FakeFS(), NodeFS_1 = require_NodeFS(), ZipFS_1 = require_ZipFS(), watchFile_1 = require_watchFile(), errors = tslib_1.__importStar(require_errors2()), path_1 = require_path(), ZIP_MASK = 4278190080, ZIP_MAGIC = 704643072, getArchivePart = (path5, extension) => {
let idx = path5.indexOf(extension);
if (idx <= 0)
return null;
let nextCharIdx = idx;
for (; idx >= 0 && (nextCharIdx = idx + extension.length, path5[nextCharIdx] !== path_1.ppath.sep); ) {
if (path5[idx - 1] === path_1.ppath.sep)
return null;
idx = path5.indexOf(extension, nextCharIdx);
}
return path5.length > nextCharIdx && path5[nextCharIdx] !== path_1.ppath.sep ? null : path5.slice(0, nextCharIdx);
};
exports.getArchivePart = getArchivePart;
var ZipOpenFS2 = class _ZipOpenFS extends FakeFS_1.BasePortableFakeFS {
static async openPromise(fn, opts) {
let zipOpenFs = new _ZipOpenFS(opts);
try {
return await fn(zipOpenFs);
} finally {
zipOpenFs.saveAndClose();
}
}
get libzip() {
return typeof this.libzipInstance > "u" && (this.libzipInstance = this.libzipFactory()), this.libzipInstance;
}
constructor({ libzip, baseFs = new NodeFS_1.NodeFS(), filter = null, maxOpenFiles = 1 / 0, readOnlyArchives = !1, useCache = !0, maxAge = 5e3, fileExtensions = null }) {
super(), this.fdMap = /* @__PURE__ */ new Map(), this.nextFd = 3, this.isZip = /* @__PURE__ */ new Set(), this.notZip = /* @__PURE__ */ new Set(), this.realPaths = /* @__PURE__ */ new Map(), this.limitOpenFilesTimeout = null, this.libzipFactory = typeof libzip != "function" ? () => libzip : libzip, this.baseFs = baseFs, this.zipInstances = useCache ? /* @__PURE__ */ new Map() : null, this.filter = filter, this.maxOpenFiles = maxOpenFiles, this.readOnlyArchives = readOnlyArchives, this.maxAge = maxAge, this.fileExtensions = fileExtensions;
}
getExtractHint(hints) {
return this.baseFs.getExtractHint(hints);
}
getRealPath() {
return this.baseFs.getRealPath();
}
saveAndClose() {
if ((0, watchFile_1.unwatchAllFiles)(this), this.zipInstances)
for (let [path5, { zipFs }] of this.zipInstances.entries())
zipFs.saveAndClose(), this.zipInstances.delete(path5);
}
discardAndClose() {
if ((0, watchFile_1.unwatchAllFiles)(this), this.zipInstances)
for (let [path5, { zipFs }] of this.zipInstances.entries())
zipFs.discardAndClose(), this.zipInstances.delete(path5);
}
resolve(p) {
return this.baseFs.resolve(p);
}
remapFd(zipFs, fd) {
let remappedFd = this.nextFd++ | ZIP_MAGIC;
return this.fdMap.set(remappedFd, [zipFs, fd]), remappedFd;
}
async openPromise(p, flags, mode) {
return await this.makeCallPromise(p, async () => await this.baseFs.openPromise(p, flags, mode), async (zipFs, { subPath }) => this.remapFd(zipFs, await zipFs.openPromise(subPath, flags, mode)));
}
openSync(p, flags, mode) {
return this.makeCallSync(p, () => this.baseFs.openSync(p, flags, mode), (zipFs, { subPath }) => this.remapFd(zipFs, zipFs.openSync(subPath, flags, mode)));
}
async opendirPromise(p, opts) {
return await this.makeCallPromise(p, async () => await this.baseFs.opendirPromise(p, opts), async (zipFs, { subPath }) => await zipFs.opendirPromise(subPath, opts), {
requireSubpath: !1
});
}
opendirSync(p, opts) {
return this.makeCallSync(p, () => this.baseFs.opendirSync(p, opts), (zipFs, { subPath }) => zipFs.opendirSync(subPath, opts), {
requireSubpath: !1
});
}
async readPromise(fd, buffer, offset, length, position) {
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
return await this.baseFs.readPromise(fd, buffer, offset, length, position);
let entry = this.fdMap.get(fd);
if (typeof entry > "u")
throw errors.EBADF("read");
let [zipFs, realFd] = entry;
return await zipFs.readPromise(realFd, buffer, offset, length, position);
}
readSync(fd, buffer, offset, length, position) {
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
return this.baseFs.readSync(fd, buffer, offset, length, position);
let entry = this.fdMap.get(fd);
if (typeof entry > "u")
throw errors.EBADF("readSync");
let [zipFs, realFd] = entry;
return zipFs.readSync(realFd, buffer, offset, length, position);
}
async writePromise(fd, buffer, offset, length, position) {
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
return typeof buffer == "string" ? await this.baseFs.writePromise(fd, buffer, offset) : await this.baseFs.writePromise(fd, buffer, offset, length, position);
let entry = this.fdMap.get(fd);
if (typeof entry > "u")
throw errors.EBADF("write");
let [zipFs, realFd] = entry;
return typeof buffer == "string" ? await zipFs.writePromise(realFd, buffer, offset) : await zipFs.writePromise(realFd, buffer, offset, length, position);
}
writeSync(fd, buffer, offset, length, position) {
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
return typeof buffer == "string" ? this.baseFs.writeSync(fd, buffer, offset) : this.baseFs.writeSync(fd, buffer, offset, length, position);
let entry = this.fdMap.get(fd);
if (typeof entry > "u")
throw errors.EBADF("writeSync");
let [zipFs, realFd] = entry;
return typeof buffer == "string" ? zipFs.writeSync(realFd, buffer, offset) : zipFs.writeSync(realFd, buffer, offset, length, position);
}
async closePromise(fd) {
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
return await this.baseFs.closePromise(fd);
let entry = this.fdMap.get(fd);
if (typeof entry > "u")
throw errors.EBADF("close");
this.fdMap.delete(fd);
let [zipFs, realFd] = entry;
return await zipFs.closePromise(realFd);
}
closeSync(fd) {
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
return this.baseFs.closeSync(fd);
let entry = this.fdMap.get(fd);
if (typeof entry > "u")
throw errors.EBADF("closeSync");
this.fdMap.delete(fd);
let [zipFs, realFd] = entry;
return zipFs.closeSync(realFd);
}
createReadStream(p, opts) {
return p === null ? this.baseFs.createReadStream(p, opts) : this.makeCallSync(p, () => this.baseFs.createReadStream(p, opts), (zipFs, { archivePath, subPath }) => {
let stream = zipFs.createReadStream(subPath, opts);
return stream.path = path_1.npath.fromPortablePath(this.pathUtils.join(archivePath, subPath)), stream;
});
}
createWriteStream(p, opts) {
return p === null ? this.baseFs.createWriteStream(p, opts) : this.makeCallSync(p, () => this.baseFs.createWriteStream(p, opts), (zipFs, { subPath }) => zipFs.createWriteStream(subPath, opts));
}
async realpathPromise(p) {
return await this.makeCallPromise(p, async () => await this.baseFs.realpathPromise(p), async (zipFs, { archivePath, subPath }) => {
let realArchivePath = this.realPaths.get(archivePath);
return typeof realArchivePath > "u" && (realArchivePath = await this.baseFs.realpathPromise(archivePath), this.realPaths.set(archivePath, realArchivePath)), this.pathUtils.join(realArchivePath, this.pathUtils.relative(path_1.PortablePath.root, await zipFs.realpathPromise(subPath)));
});
}
realpathSync(p) {
return this.makeCallSync(p, () => this.baseFs.realpathSync(p), (zipFs, { archivePath, subPath }) => {
let realArchivePath = this.realPaths.get(archivePath);
return typeof realArchivePath > "u" && (realArchivePath = this.baseFs.realpathSync(archivePath), this.realPaths.set(archivePath, realArchivePath)), this.pathUtils.join(realArchivePath, this.pathUtils.relative(path_1.PortablePath.root, zipFs.realpathSync(subPath)));
});
}
async existsPromise(p) {
return await this.makeCallPromise(p, async () => await this.baseFs.existsPromise(p), async (zipFs, { subPath }) => await zipFs.existsPromise(subPath));
}
existsSync(p) {
return this.makeCallSync(p, () => this.baseFs.existsSync(p), (zipFs, { subPath }) => zipFs.existsSync(subPath));
}
async accessPromise(p, mode) {
return await this.makeCallPromise(p, async () => await this.baseFs.accessPromise(p, mode), async (zipFs, { subPath }) => await zipFs.accessPromise(subPath, mode));
}
accessSync(p, mode) {
return this.makeCallSync(p, () => this.baseFs.accessSync(p, mode), (zipFs, { subPath }) => zipFs.accessSync(subPath, mode));
}
async statPromise(p, opts) {
return await this.makeCallPromise(p, async () => await this.baseFs.statPromise(p, opts), async (zipFs, { subPath }) => await zipFs.statPromise(subPath, opts));
}
statSync(p, opts) {
return this.makeCallSync(p, () => this.baseFs.statSync(p, opts), (zipFs, { subPath }) => zipFs.statSync(subPath, opts));
}
async fstatPromise(fd, opts) {
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
return this.baseFs.fstatPromise(fd, opts);
let entry = this.fdMap.get(fd);
if (typeof entry > "u")
throw errors.EBADF("fstat");
let [zipFs, realFd] = entry;
return zipFs.fstatPromise(realFd, opts);
}
fstatSync(fd, opts) {
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
return this.baseFs.fstatSync(fd, opts);
let entry = this.fdMap.get(fd);
if (typeof entry > "u")
throw errors.EBADF("fstatSync");
let [zipFs, realFd] = entry;
return zipFs.fstatSync(realFd, opts);
}
async lstatPromise(p, opts) {
return await this.makeCallPromise(p, async () => await this.baseFs.lstatPromise(p, opts), async (zipFs, { subPath }) => await zipFs.lstatPromise(subPath, opts));
}
lstatSync(p, opts) {
return this.makeCallSync(p, () => this.baseFs.lstatSync(p, opts), (zipFs, { subPath }) => zipFs.lstatSync(subPath, opts));
}
async fchmodPromise(fd, mask) {
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
return this.baseFs.fchmodPromise(fd, mask);
let entry = this.fdMap.get(fd);
if (typeof entry > "u")
throw errors.EBADF("fchmod");
let [zipFs, realFd] = entry;
return zipFs.fchmodPromise(realFd, mask);
}
fchmodSync(fd, mask) {
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
return this.baseFs.fchmodSync(fd, mask);
let entry = this.fdMap.get(fd);
if (typeof entry > "u")
throw errors.EBADF("fchmodSync");
let [zipFs, realFd] = entry;
return zipFs.fchmodSync(realFd, mask);
}
async chmodPromise(p, mask) {
return await this.makeCallPromise(p, async () => await this.baseFs.chmodPromise(p, mask), async (zipFs, { subPath }) => await zipFs.chmodPromise(subPath, mask));
}
chmodSync(p, mask) {
return this.makeCallSync(p, () => this.baseFs.chmodSync(p, mask), (zipFs, { subPath }) => zipFs.chmodSync(subPath, mask));
}
async fchownPromise(fd, uid, gid) {
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
return this.baseFs.fchownPromise(fd, uid, gid);
let entry = this.fdMap.get(fd);
if (typeof entry > "u")
throw errors.EBADF("fchown");
let [zipFs, realFd] = entry;
return zipFs.fchownPromise(realFd, uid, gid);
}
fchownSync(fd, uid, gid) {
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
return this.baseFs.fchownSync(fd, uid, gid);
let entry = this.fdMap.get(fd);
if (typeof entry > "u")
throw errors.EBADF("fchownSync");
let [zipFs, realFd] = entry;
return zipFs.fchownSync(realFd, uid, gid);
}
async chownPromise(p, uid, gid) {
return await this.makeCallPromise(p, async () => await this.baseFs.chownPromise(p, uid, gid), async (zipFs, { subPath }) => await zipFs.chownPromise(subPath, uid, gid));
}
chownSync(p, uid, gid) {
return this.makeCallSync(p, () => this.baseFs.chownSync(p, uid, gid), (zipFs, { subPath }) => zipFs.chownSync(subPath, uid, gid));
}
async renamePromise(oldP, newP) {
return await this.makeCallPromise(oldP, async () => await this.makeCallPromise(newP, async () => await this.baseFs.renamePromise(oldP, newP), async () => {
throw Object.assign(new Error("EEXDEV: cross-device link not permitted"), { code: "EEXDEV" });
}), async (zipFsO, { subPath: subPathO }) => await this.makeCallPromise(newP, async () => {
throw Object.assign(new Error("EEXDEV: cross-device link not permitted"), { code: "EEXDEV" });
}, async (zipFsN, { subPath: subPathN }) => {
if (zipFsO !== zipFsN)
throw Object.assign(new Error("EEXDEV: cross-device link not permitted"), { code: "EEXDEV" });
return await zipFsO.renamePromise(subPathO, subPathN);
}));
}
renameSync(oldP, newP) {
return this.makeCallSync(oldP, () => this.makeCallSync(newP, () => this.baseFs.renameSync(oldP, newP), () => {
throw Object.assign(new Error("EEXDEV: cross-device link not permitted"), { code: "EEXDEV" });
}), (zipFsO, { subPath: subPathO }) => this.makeCallSync(newP, () => {
throw Object.assign(new Error("EEXDEV: cross-device link not permitted"), { code: "EEXDEV" });
}, (zipFsN, { subPath: subPathN }) => {
if (zipFsO !== zipFsN)
throw Object.assign(new Error("EEXDEV: cross-device link not permitted"), { code: "EEXDEV" });
return zipFsO.renameSync(subPathO, subPathN);
}));
}
async copyFilePromise(sourceP, destP, flags = 0) {
let fallback = async (sourceFs, sourceP2, destFs, destP2) => {
if ((flags & fs_1.constants.COPYFILE_FICLONE_FORCE) !== 0)
throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${sourceP2}' -> ${destP2}'`), { code: "EXDEV" });
if (flags & fs_1.constants.COPYFILE_EXCL && await this.existsPromise(sourceP2))
throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP2}' -> '${destP2}'`), { code: "EEXIST" });
let content;
try {
content = await sourceFs.readFilePromise(sourceP2);
} catch {
throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP2}' -> '${destP2}'`), { code: "EINVAL" });
}
await destFs.writeFilePromise(destP2, content);
};
return await this.makeCallPromise(sourceP, async () => await this.makeCallPromise(destP, async () => await this.baseFs.copyFilePromise(sourceP, destP, flags), async (zipFsD, { subPath: subPathD }) => await fallback(this.baseFs, sourceP, zipFsD, subPathD)), async (zipFsS, { subPath: subPathS }) => await this.makeCallPromise(destP, async () => await fallback(zipFsS, subPathS, this.baseFs, destP), async (zipFsD, { subPath: subPathD }) => zipFsS !== zipFsD ? await fallback(zipFsS, subPathS, zipFsD, subPathD) : await zipFsS.copyFilePromise(subPathS, subPathD, flags)));
}
copyFileSync(sourceP, destP, flags = 0) {
let fallback = (sourceFs, sourceP2, destFs, destP2) => {
if ((flags & fs_1.constants.COPYFILE_FICLONE_FORCE) !== 0)
throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${sourceP2}' -> ${destP2}'`), { code: "EXDEV" });
if (flags & fs_1.constants.COPYFILE_EXCL && this.existsSync(sourceP2))
throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP2}' -> '${destP2}'`), { code: "EEXIST" });
let content;
try {
content = sourceFs.readFileSync(sourceP2);
} catch {
throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP2}' -> '${destP2}'`), { code: "EINVAL" });
}
destFs.writeFileSync(destP2, content);
};
return this.makeCallSync(sourceP, () => this.makeCallSync(destP, () => this.baseFs.copyFileSync(sourceP, destP, flags), (zipFsD, { subPath: subPathD }) => fallback(this.baseFs, sourceP, zipFsD, subPathD)), (zipFsS, { subPath: subPathS }) => this.makeCallSync(destP, () => fallback(zipFsS, subPathS, this.baseFs, destP), (zipFsD, { subPath: subPathD }) => zipFsS !== zipFsD ? fallback(zipFsS, subPathS, zipFsD, subPathD) : zipFsS.copyFileSync(subPathS, subPathD, flags)));
}
async appendFilePromise(p, content, opts) {
return await this.makeCallPromise(p, async () => await this.baseFs.appendFilePromise(p, content, opts), async (zipFs, { subPath }) => await zipFs.appendFilePromise(subPath, content, opts));
}
appendFileSync(p, content, opts) {
return this.makeCallSync(p, () => this.baseFs.appendFileSync(p, content, opts), (zipFs, { subPath }) => zipFs.appendFileSync(subPath, content, opts));
}
async writeFilePromise(p, content, opts) {
return await this.makeCallPromise(p, async () => await this.baseFs.writeFilePromise(p, content, opts), async (zipFs, { subPath }) => await zipFs.writeFilePromise(subPath, content, opts));
}
writeFileSync(p, content, opts) {
return this.makeCallSync(p, () => this.baseFs.writeFileSync(p, content, opts), (zipFs, { subPath }) => zipFs.writeFileSync(subPath, content, opts));
}
async unlinkPromise(p) {
return await this.makeCallPromise(p, async () => await this.baseFs.unlinkPromise(p), async (zipFs, { subPath }) => await zipFs.unlinkPromise(subPath));
}
unlinkSync(p) {
return this.makeCallSync(p, () => this.baseFs.unlinkSync(p), (zipFs, { subPath }) => zipFs.unlinkSync(subPath));
}
async utimesPromise(p, atime, mtime) {
return await this.makeCallPromise(p, async () => await this.baseFs.utimesPromise(p, atime, mtime), async (zipFs, { subPath }) => await zipFs.utimesPromise(subPath, atime, mtime));
}
utimesSync(p, atime, mtime) {
return this.makeCallSync(p, () => this.baseFs.utimesSync(p, atime, mtime), (zipFs, { subPath }) => zipFs.utimesSync(subPath, atime, mtime));
}
async mkdirPromise(p, opts) {
return await this.makeCallPromise(p, async () => await this.baseFs.mkdirPromise(p, opts), async (zipFs, { subPath }) => await zipFs.mkdirPromise(subPath, opts));
}
mkdirSync(p, opts) {
return this.makeCallSync(p, () => this.baseFs.mkdirSync(p, opts), (zipFs, { subPath }) => zipFs.mkdirSync(subPath, opts));
}
async rmdirPromise(p, opts) {
return await this.makeCallPromise(p, async () => await this.baseFs.rmdirPromise(p, opts), async (zipFs, { subPath }) => await zipFs.rmdirPromise(subPath, opts));
}
rmdirSync(p, opts) {
return this.makeCallSync(p, () => this.baseFs.rmdirSync(p, opts), (zipFs, { subPath }) => zipFs.rmdirSync(subPath, opts));
}
async linkPromise(existingP, newP) {
return await this.makeCallPromise(newP, async () => await this.baseFs.linkPromise(existingP, newP), async (zipFs, { subPath }) => await zipFs.linkPromise(existingP, subPath));
}
linkSync(existingP, newP) {
return this.makeCallSync(newP, () => this.baseFs.linkSync(existingP, newP), (zipFs, { subPath }) => zipFs.linkSync(existingP, subPath));
}
async symlinkPromise(target, p, type) {
return await this.makeCallPromise(p, async () => await this.baseFs.symlinkPromise(target, p, type), async (zipFs, { subPath }) => await zipFs.symlinkPromise(target, subPath));
}
symlinkSync(target, p, type) {
return this.makeCallSync(p, () => this.baseFs.symlinkSync(target, p, type), (zipFs, { subPath }) => zipFs.symlinkSync(target, subPath));
}
async readFilePromise(p, encoding) {
return this.makeCallPromise(p, async () => encoding === "utf8" ? await this.baseFs.readFilePromise(p, encoding) : await this.baseFs.readFilePromise(p, encoding), async (zipFs, { subPath }) => await zipFs.readFilePromise(subPath, encoding));
}
readFileSync(p, encoding) {
return this.makeCallSync(p, () => encoding === "utf8" ? this.baseFs.readFileSync(p, encoding) : this.baseFs.readFileSync(p, encoding), (zipFs, { subPath }) => zipFs.readFileSync(subPath, encoding));
}
async readdirPromise(p, opts) {
return await this.makeCallPromise(p, async () => await this.baseFs.readdirPromise(p, opts), async (zipFs, { subPath }) => await zipFs.readdirPromise(subPath, opts), {
requireSubpath: !1
});
}
readdirSync(p, opts) {
return this.makeCallSync(p, () => this.baseFs.readdirSync(p, opts), (zipFs, { subPath }) => zipFs.readdirSync(subPath, opts), {
requireSubpath: !1
});
}
async readlinkPromise(p) {
return await this.makeCallPromise(p, async () => await this.baseFs.readlinkPromise(p), async (zipFs, { subPath }) => await zipFs.readlinkPromise(subPath));
}
readlinkSync(p) {
return this.makeCallSync(p, () => this.baseFs.readlinkSync(p), (zipFs, { subPath }) => zipFs.readlinkSync(subPath));
}
async truncatePromise(p, len) {
return await this.makeCallPromise(p, async () => await this.baseFs.truncatePromise(p, len), async (zipFs, { subPath }) => await zipFs.truncatePromise(subPath, len));
}
truncateSync(p, len) {
return this.makeCallSync(p, () => this.baseFs.truncateSync(p, len), (zipFs, { subPath }) => zipFs.truncateSync(subPath, len));
}
async ftruncatePromise(fd, len) {
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
return this.baseFs.ftruncatePromise(fd, len);
let entry = this.fdMap.get(fd);
if (typeof entry > "u")
throw errors.EBADF("ftruncate");
let [zipFs, realFd] = entry;
return zipFs.ftruncatePromise(realFd, len);
}
ftruncateSync(fd, len) {
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
return this.baseFs.ftruncateSync(fd, len);
let entry = this.fdMap.get(fd);
if (typeof entry > "u")
throw errors.EBADF("ftruncateSync");
let [zipFs, realFd] = entry;
return zipFs.ftruncateSync(realFd, len);
}
watch(p, a2, b) {
return this.makeCallSync(p, () => this.baseFs.watch(
p,
// @ts-expect-error
a2,
b
), (zipFs, { subPath }) => zipFs.watch(
subPath,
// @ts-expect-error
a2,
b
));
}
watchFile(p, a2, b) {
return this.makeCallSync(p, () => this.baseFs.watchFile(
p,
// @ts-expect-error
a2,
b
), () => (0, watchFile_1.watchFile)(this, p, a2, b));
}
unwatchFile(p, cb) {
return this.makeCallSync(p, () => this.baseFs.unwatchFile(p, cb), () => (0, watchFile_1.unwatchFile)(this, p, cb));
}
async makeCallPromise(p, discard, accept, { requireSubpath = !0 } = {}) {
if (typeof p != "string")
return await discard();
let normalizedP = this.resolve(p), zipInfo = this.findZip(normalizedP);
return zipInfo ? requireSubpath && zipInfo.subPath === "/" ? await discard() : await this.getZipPromise(zipInfo.archivePath, async (zipFs) => await accept(zipFs, zipInfo)) : await discard();
}
makeCallSync(p, discard, accept, { requireSubpath = !0 } = {}) {
if (typeof p != "string")
return discard();
let normalizedP = this.resolve(p), zipInfo = this.findZip(normalizedP);
return !zipInfo || requireSubpath && zipInfo.subPath === "/" ? discard() : this.getZipSync(zipInfo.archivePath, (zipFs) => accept(zipFs, zipInfo));
}
findZip(p) {
if (this.filter && !this.filter.test(p))
return null;
let filePath = "";
for (; ; ) {
let pathPartWithArchive = p.substring(filePath.length), archivePart;
if (!this.fileExtensions)
archivePart = (0, exports.getArchivePart)(pathPartWithArchive, ".zip");
else
for (let ext of this.fileExtensions)
if (archivePart = (0, exports.getArchivePart)(pathPartWithArchive, ext), archivePart)
break;
if (!archivePart)
return null;
if (filePath = this.pathUtils.join(filePath, archivePart), this.isZip.has(filePath) === !1) {
if (this.notZip.has(filePath))
continue;
try {
if (!this.baseFs.lstatSync(filePath).isFile()) {
this.notZip.add(filePath);
continue;
}
} catch {
return null;
}
this.isZip.add(filePath);
}
return {
archivePath: filePath,
subPath: this.pathUtils.join(path_1.PortablePath.root, p.substring(filePath.length))
};
}
}
limitOpenFiles(max) {
if (this.zipInstances === null)
return;
let now = Date.now(), nextExpiresAt = now + this.maxAge, closeCount = max === null ? 0 : this.zipInstances.size - max;
for (let [path5, { zipFs, expiresAt, refCount }] of this.zipInstances.entries())
if (!(refCount !== 0 || zipFs.hasOpenFileHandles())) {
if (now >= expiresAt) {
zipFs.saveAndClose(), this.zipInstances.delete(path5), closeCount -= 1;
continue;
} else if (max === null || closeCount <= 0) {
nextExpiresAt = expiresAt;
break;
}
zipFs.saveAndClose(), this.zipInstances.delete(path5), closeCount -= 1;
}
this.limitOpenFilesTimeout === null && (max === null && this.zipInstances.size > 0 || max !== null) && (this.limitOpenFilesTimeout = setTimeout(() => {
this.limitOpenFilesTimeout = null, this.limitOpenFiles(null);
}, nextExpiresAt - now).unref());
}
async getZipPromise(p, accept) {
let getZipOptions = async () => ({
baseFs: this.baseFs,
libzip: this.libzip,
readOnly: this.readOnlyArchives,
stats: await this.baseFs.statPromise(p)
});
if (this.zipInstances) {
let cachedZipFs = this.zipInstances.get(p);
if (!cachedZipFs) {
let zipOptions = await getZipOptions();
cachedZipFs = this.zipInstances.get(p), cachedZipFs || (cachedZipFs = {
zipFs: new ZipFS_1.ZipFS(p, zipOptions),
expiresAt: 0,
refCount: 0
});
}
this.zipInstances.delete(p), this.limitOpenFiles(this.maxOpenFiles - 1), this.zipInstances.set(p, cachedZipFs), cachedZipFs.expiresAt = Date.now() + this.maxAge, cachedZipFs.refCount += 1;
try {
return await accept(cachedZipFs.zipFs);
} finally {
cachedZipFs.refCount -= 1;
}
} else {
let zipFs = new ZipFS_1.ZipFS(p, await getZipOptions());
try {
return await accept(zipFs);
} finally {
zipFs.saveAndClose();
}
}
}
getZipSync(p, accept) {
let getZipOptions = () => ({
baseFs: this.baseFs,
libzip: this.libzip,
readOnly: this.readOnlyArchives,
stats: this.baseFs.statSync(p)
});
if (this.zipInstances) {
let cachedZipFs = this.zipInstances.get(p);
return cachedZipFs || (cachedZipFs = {
zipFs: new ZipFS_1.ZipFS(p, getZipOptions()),
expiresAt: 0,
refCount: 0
}), this.zipInstances.delete(p), this.limitOpenFiles(this.maxOpenFiles - 1), this.zipInstances.set(p, cachedZipFs), cachedZipFs.expiresAt = Date.now() + this.maxAge, accept(cachedZipFs.zipFs);
} else {
let zipFs = new ZipFS_1.ZipFS(p, getZipOptions());
try {
return accept(zipFs);
} finally {
zipFs.saveAndClose();
}
}
}
};
exports.ZipOpenFS = ZipOpenFS2;
}
});
// ../../node_modules/@yarnpkg/fslib/lib/NodePathFS.js
var require_NodePathFS = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/NodePathFS.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.NodePathFS = void 0;
var url_1 = __require("url"), util_1 = __require("util"), ProxiedFS_1 = require_ProxiedFS(), path_1 = require_path(), NodePathFS = class extends ProxiedFS_1.ProxiedFS {
constructor(baseFs) {
super(path_1.npath), this.baseFs = baseFs;
}
mapFromBase(path5) {
return path5;
}
mapToBase(path5) {
if (typeof path5 == "string")
return path5;
if (path5 instanceof url_1.URL)
return (0, url_1.fileURLToPath)(path5);
if (Buffer.isBuffer(path5)) {
let str = path5.toString();
if (Buffer.byteLength(str) !== path5.byteLength)
throw new Error("Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942");
return str;
}
throw new Error(`Unsupported path type: ${(0, util_1.inspect)(path5)}`);
}
};
exports.NodePathFS = NodePathFS;
}
});
// ../../node_modules/@yarnpkg/fslib/lib/patchFs/FileHandle.js
var require_FileHandle = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/patchFs/FileHandle.js"(exports) {
"use strict";
var _a, _b, _c, _d;
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.FileHandle = void 0;
var readline_1 = __require("readline"), kBaseFs = /* @__PURE__ */ Symbol("kBaseFs"), kFd = /* @__PURE__ */ Symbol("kFd"), kClosePromise = /* @__PURE__ */ Symbol("kClosePromise"), kCloseResolve = /* @__PURE__ */ Symbol("kCloseResolve"), kCloseReject = /* @__PURE__ */ Symbol("kCloseReject"), kRefs = /* @__PURE__ */ Symbol("kRefs"), kRef = /* @__PURE__ */ Symbol("kRef"), kUnref = /* @__PURE__ */ Symbol("kUnref"), FileHandle = class {
constructor(fd, baseFs) {
this[_a] = 1, this[_b] = void 0, this[_c] = void 0, this[_d] = void 0, this[kBaseFs] = baseFs, this[kFd] = fd;
}
get fd() {
return this[kFd];
}
async appendFile(data, options) {
var _e;
try {
this[kRef](this.appendFile);
let encoding = (_e = typeof options == "string" ? options : options?.encoding) !== null && _e !== void 0 ? _e : void 0;
return await this[kBaseFs].appendFilePromise(this.fd, data, encoding ? { encoding } : void 0);
} finally {
this[kUnref]();
}
}
async chown(uid, gid) {
try {
return this[kRef](this.chown), await this[kBaseFs].fchownPromise(this.fd, uid, gid);
} finally {
this[kUnref]();
}
}
async chmod(mode) {
try {
return this[kRef](this.chmod), await this[kBaseFs].fchmodPromise(this.fd, mode);
} finally {
this[kUnref]();
}
}
createReadStream(options) {
return this[kBaseFs].createReadStream(null, { ...options, fd: this.fd });
}
createWriteStream(options) {
return this[kBaseFs].createWriteStream(null, { ...options, fd: this.fd });
}
// FIXME: Missing FakeFS version
datasync() {
throw new Error("Method not implemented.");
}
// FIXME: Missing FakeFS version
sync() {
throw new Error("Method not implemented.");
}
async read(bufferOrOptions, offset, length, position) {
var _e, _f, _g;
try {
this[kRef](this.read);
let buffer;
return Buffer.isBuffer(bufferOrOptions) ? buffer = bufferOrOptions : (bufferOrOptions ?? (bufferOrOptions = {}), buffer = (_e = bufferOrOptions.buffer) !== null && _e !== void 0 ? _e : Buffer.alloc(16384), offset = bufferOrOptions.offset || 0, length = (_f = bufferOrOptions.length) !== null && _f !== void 0 ? _f : buffer.byteLength, position = (_g = bufferOrOptions.position) !== null && _g !== void 0 ? _g : null), offset ?? (offset = 0), length ?? (length = 0), length === 0 ? {
bytesRead: length,
buffer
} : {
bytesRead: await this[kBaseFs].readPromise(this.fd, buffer, offset, length, position),
buffer
};
} finally {
this[kUnref]();
}
}
async readFile(options) {
var _e;
try {
this[kRef](this.readFile);
let encoding = (_e = typeof options == "string" ? options : options?.encoding) !== null && _e !== void 0 ? _e : void 0;
return await this[kBaseFs].readFilePromise(this.fd, encoding);
} finally {
this[kUnref]();
}
}
readLines(options) {
return (0, readline_1.createInterface)({
input: this.createReadStream(options),
crlfDelay: 1 / 0
});
}
async stat(opts) {
try {
return this[kRef](this.stat), await this[kBaseFs].fstatPromise(this.fd, opts);
} finally {
this[kUnref]();
}
}
async truncate(len) {
try {
return this[kRef](this.truncate), await this[kBaseFs].ftruncatePromise(this.fd, len);
} finally {
this[kUnref]();
}
}
// FIXME: Missing FakeFS version
utimes(atime, mtime) {
throw new Error("Method not implemented.");
}
async writeFile(data, options) {
var _e;
try {
this[kRef](this.writeFile);
let encoding = (_e = typeof options == "string" ? options : options?.encoding) !== null && _e !== void 0 ? _e : void 0;
await this[kBaseFs].writeFilePromise(this.fd, data, encoding);
} finally {
this[kUnref]();
}
}
async write(...args) {
try {
if (this[kRef](this.write), ArrayBuffer.isView(args[0])) {
let [buffer, offset, length, position] = args;
return { bytesWritten: await this[kBaseFs].writePromise(this.fd, buffer, offset ?? void 0, length ?? void 0, position ?? void 0), buffer };
} else {
let [data, position, encoding] = args;
return { bytesWritten: await this[kBaseFs].writePromise(this.fd, data, position, encoding), buffer: data };
}
} finally {
this[kUnref]();
}
}
// TODO: Use writev from FakeFS when that is implemented
async writev(buffers, position) {
try {
this[kRef](this.writev);
let bytesWritten = 0;
if (typeof position < "u")
for (let buffer of buffers) {
let writeResult = await this.write(buffer, void 0, void 0, position);
bytesWritten += writeResult.bytesWritten, position += writeResult.bytesWritten;
}
else
for (let buffer of buffers) {
let writeResult = await this.write(buffer);
bytesWritten += writeResult.bytesWritten;
}
return {
buffers,
bytesWritten
};
} finally {
this[kUnref]();
}
}
// FIXME: Missing FakeFS version
readv(buffers, position) {
throw new Error("Method not implemented.");
}
close() {
if (this[kFd] === -1)
return Promise.resolve();
if (this[kClosePromise])
return this[kClosePromise];
if (this[kRefs]--, this[kRefs] === 0) {
let fd = this[kFd];
this[kFd] = -1, this[kClosePromise] = this[kBaseFs].closePromise(fd).finally(() => {
this[kClosePromise] = void 0;
});
} else
this[kClosePromise] = new Promise((resolve9, reject) => {
this[kCloseResolve] = resolve9, this[kCloseReject] = reject;
}).finally(() => {
this[kClosePromise] = void 0, this[kCloseReject] = void 0, this[kCloseResolve] = void 0;
});
return this[kClosePromise];
}
[(_a = kRefs, _b = kClosePromise, _c = kCloseResolve, _d = kCloseReject, kRef)](caller) {
if (this[kFd] === -1) {
let err = new Error("file closed");
throw err.code = "EBADF", err.syscall = caller.name, err;
}
this[kRefs]++;
}
[kUnref]() {
if (this[kRefs]--, this[kRefs] === 0) {
let fd = this[kFd];
this[kFd] = -1, this[kBaseFs].closePromise(fd).then(this[kCloseResolve], this[kCloseReject]);
}
}
};
exports.FileHandle = FileHandle;
}
});
// ../../node_modules/@yarnpkg/fslib/lib/patchFs/patchFs.js
var require_patchFs = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/patchFs/patchFs.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.extendFs = exports.patchFs = void 0;
var util_1 = __require("util"), NodePathFS_1 = require_NodePathFS(), FileHandle_1 = require_FileHandle(), SYNC_IMPLEMENTATIONS = /* @__PURE__ */ new Set([
"accessSync",
"appendFileSync",
"createReadStream",
"createWriteStream",
"chmodSync",
"fchmodSync",
"chownSync",
"fchownSync",
"closeSync",
"copyFileSync",
"linkSync",
"lstatSync",
"fstatSync",
"lutimesSync",
"mkdirSync",
"openSync",
"opendirSync",
"readlinkSync",
"readFileSync",
"readdirSync",
"readlinkSync",
"realpathSync",
"renameSync",
"rmdirSync",
"statSync",
"symlinkSync",
"truncateSync",
"ftruncateSync",
"unlinkSync",
"unwatchFile",
"utimesSync",
"watch",
"watchFile",
"writeFileSync",
"writeSync"
]), ASYNC_IMPLEMENTATIONS = /* @__PURE__ */ new Set([
"accessPromise",
"appendFilePromise",
"fchmodPromise",
"chmodPromise",
"fchownPromise",
"chownPromise",
"closePromise",
"copyFilePromise",
"linkPromise",
"fstatPromise",
"lstatPromise",
"lutimesPromise",
"mkdirPromise",
"openPromise",
"opendirPromise",
"readdirPromise",
"realpathPromise",
"readFilePromise",
"readdirPromise",
"readlinkPromise",
"renamePromise",
"rmdirPromise",
"statPromise",
"symlinkPromise",
"truncatePromise",
"ftruncatePromise",
"unlinkPromise",
"utimesPromise",
"writeFilePromise",
"writeSync"
]);
function patchFs(patchedFs, fakeFs) {
fakeFs = new NodePathFS_1.NodePathFS(fakeFs);
let setupFn = (target, name, replacement) => {
let orig = target[name];
target[name] = replacement, typeof orig?.[util_1.promisify.custom] < "u" && (replacement[util_1.promisify.custom] = orig[util_1.promisify.custom]);
};
{
setupFn(patchedFs, "exists", (p, ...args) => {
let callback = typeof args[args.length - 1] == "function" ? args.pop() : () => {
};
process.nextTick(() => {
fakeFs.existsPromise(p).then((exists) => {
callback(exists);
}, () => {
callback(!1);
});
});
}), setupFn(patchedFs, "read", (...args) => {
let [fd, buffer, offset, length, position, callback] = args;
if (args.length <= 3) {
let options = {};
args.length < 3 ? callback = args[1] : (options = args[1], callback = args[2]), {
buffer = Buffer.alloc(16384),
offset = 0,
length = buffer.byteLength,
position
} = options;
}
if (offset == null && (offset = 0), length |= 0, length === 0) {
process.nextTick(() => {
callback(null, 0, buffer);
});
return;
}
position == null && (position = -1), process.nextTick(() => {
fakeFs.readPromise(fd, buffer, offset, length, position).then((bytesRead) => {
callback(null, bytesRead, buffer);
}, (error) => {
callback(error, 0, buffer);
});
});
});
for (let fnName of ASYNC_IMPLEMENTATIONS) {
let origName = fnName.replace(/Promise$/, "");
if (typeof patchedFs[origName] > "u")
continue;
let fakeImpl = fakeFs[fnName];
if (typeof fakeImpl > "u")
continue;
setupFn(patchedFs, origName, (...args) => {
let callback = typeof args[args.length - 1] == "function" ? args.pop() : () => {
};
process.nextTick(() => {
fakeImpl.apply(fakeFs, args).then((result) => {
callback(null, result);
}, (error) => {
callback(error);
});
});
});
}
patchedFs.realpath.native = patchedFs.realpath;
}
{
setupFn(patchedFs, "existsSync", (p) => {
try {
return fakeFs.existsSync(p);
} catch {
return !1;
}
}), setupFn(patchedFs, "readSync", (...args) => {
let [fd, buffer, offset, length, position] = args;
return args.length <= 3 && ({ offset = 0, length = buffer.byteLength, position } = args[2] || {}), offset == null && (offset = 0), length |= 0, length === 0 ? 0 : (position == null && (position = -1), fakeFs.readSync(fd, buffer, offset, length, position));
});
for (let fnName of SYNC_IMPLEMENTATIONS) {
let origName = fnName;
if (typeof patchedFs[origName] > "u")
continue;
let fakeImpl = fakeFs[fnName];
typeof fakeImpl > "u" || setupFn(patchedFs, origName, fakeImpl.bind(fakeFs));
}
patchedFs.realpathSync.native = patchedFs.realpathSync;
}
{
let origEmitWarning = process.emitWarning;
process.emitWarning = () => {
};
let patchedFsPromises;
try {
patchedFsPromises = patchedFs.promises;
} finally {
process.emitWarning = origEmitWarning;
}
if (typeof patchedFsPromises < "u") {
for (let fnName of ASYNC_IMPLEMENTATIONS) {
let origName = fnName.replace(/Promise$/, "");
if (typeof patchedFsPromises[origName] > "u")
continue;
let fakeImpl = fakeFs[fnName];
typeof fakeImpl > "u" || fnName !== "open" && setupFn(patchedFsPromises, origName, (pathLike, ...args) => pathLike instanceof FileHandle_1.FileHandle ? pathLike[origName].apply(pathLike, args) : fakeImpl.call(fakeFs, pathLike, ...args));
}
setupFn(patchedFsPromises, "open", async (...args) => {
let fd = await fakeFs.openPromise(...args);
return new FileHandle_1.FileHandle(fd, fakeFs);
});
}
}
patchedFs.read[util_1.promisify.custom] = async (fd, buffer, ...args) => ({ bytesRead: await fakeFs.readPromise(fd, buffer, ...args), buffer }), patchedFs.write[util_1.promisify.custom] = async (fd, buffer, ...args) => ({ bytesWritten: await fakeFs.writePromise(fd, buffer, ...args), buffer });
}
exports.patchFs = patchFs;
function extendFs(realFs, fakeFs) {
let patchedFs = Object.create(realFs);
return patchFs(patchedFs, fakeFs), patchedFs;
}
exports.extendFs = extendFs;
}
});
// ../../node_modules/@yarnpkg/fslib/lib/xfs.js
var require_xfs = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/xfs.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.xfs = void 0;
var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports)), os_1 = tslib_1.__importDefault(__require("os")), NodeFS_1 = require_NodeFS(), path_1 = require_path();
function getTempName(prefix) {
let hash = Math.ceil(Math.random() * 4294967296).toString(16).padStart(8, "0");
return `${prefix}${hash}`;
}
var tmpdirs = /* @__PURE__ */ new Set(), tmpEnv = null;
function initTmpEnv() {
if (tmpEnv)
return tmpEnv;
let tmpdir2 = path_1.npath.toPortablePath(os_1.default.tmpdir()), realTmpdir = exports.xfs.realpathSync(tmpdir2);
return process.once("exit", () => {
exports.xfs.rmtempSync();
}), tmpEnv = {
tmpdir: tmpdir2,
realTmpdir
};
}
exports.xfs = Object.assign(new NodeFS_1.NodeFS(), {
detachTemp(p) {
tmpdirs.delete(p);
},
mktempSync(cb) {
let { tmpdir: tmpdir2, realTmpdir } = initTmpEnv();
for (; ; ) {
let name = getTempName("xfs-");
try {
this.mkdirSync(path_1.ppath.join(tmpdir2, name));
} catch (error) {
if (error.code === "EEXIST")
continue;
throw error;
}
let realP = path_1.ppath.join(realTmpdir, name);
if (tmpdirs.add(realP), typeof cb > "u")
return realP;
try {
return cb(realP);
} finally {
if (tmpdirs.has(realP)) {
tmpdirs.delete(realP);
try {
this.removeSync(realP);
} catch {
}
}
}
}
},
async mktempPromise(cb) {
let { tmpdir: tmpdir2, realTmpdir } = initTmpEnv();
for (; ; ) {
let name = getTempName("xfs-");
try {
await this.mkdirPromise(path_1.ppath.join(tmpdir2, name));
} catch (error) {
if (error.code === "EEXIST")
continue;
throw error;
}
let realP = path_1.ppath.join(realTmpdir, name);
if (tmpdirs.add(realP), typeof cb > "u")
return realP;
try {
return await cb(realP);
} finally {
if (tmpdirs.has(realP)) {
tmpdirs.delete(realP);
try {
await this.removePromise(realP);
} catch {
}
}
}
}
},
async rmtempPromise() {
await Promise.all(Array.from(tmpdirs.values()).map(async (p) => {
try {
await exports.xfs.removePromise(p, { maxRetries: 0 }), tmpdirs.delete(p);
} catch {
}
}));
},
rmtempSync() {
for (let p of tmpdirs)
try {
exports.xfs.removeSync(p), tmpdirs.delete(p);
} catch {
}
}
});
}
});
// ../../node_modules/@yarnpkg/fslib/lib/index.js
var require_lib = __commonJS({
"../../node_modules/@yarnpkg/fslib/lib/index.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.xfs = exports.extendFs = exports.patchFs = exports.ZipOpenFS = exports.ZipFS = exports.VirtualFS = exports.ProxiedFS = exports.PosixFS = exports.NodeFS = exports.NoFS = exports.LazyFS = exports.JailFS = exports.CwdFS = exports.FakeFS = exports.AliasFS = exports.toFilename = exports.ppath = exports.npath = exports.Filename = exports.PortablePath = exports.DEFAULT_COMPRESSION_LEVEL = exports.normalizeLineEndings = exports.statUtils = exports.CustomDir = exports.opendir = exports.LinkStrategy = exports.constants = void 0;
var tslib_1 = (init_tslib_es6(), __toCommonJS(tslib_es6_exports)), constants5 = tslib_1.__importStar(require_constants());
exports.constants = constants5;
var statUtils = tslib_1.__importStar(require_statUtils());
exports.statUtils = statUtils;
var copyPromise_1 = require_copyPromise();
Object.defineProperty(exports, "LinkStrategy", { enumerable: !0, get: function() {
return copyPromise_1.LinkStrategy;
} });
var opendir_1 = require_opendir();
Object.defineProperty(exports, "opendir", { enumerable: !0, get: function() {
return opendir_1.opendir;
} });
Object.defineProperty(exports, "CustomDir", { enumerable: !0, get: function() {
return opendir_1.CustomDir;
} });
var FakeFS_1 = require_FakeFS();
Object.defineProperty(exports, "normalizeLineEndings", { enumerable: !0, get: function() {
return FakeFS_1.normalizeLineEndings;
} });
var ZipFS_1 = require_ZipFS();
Object.defineProperty(exports, "DEFAULT_COMPRESSION_LEVEL", { enumerable: !0, get: function() {
return ZipFS_1.DEFAULT_COMPRESSION_LEVEL;
} });
var path_1 = require_path();
Object.defineProperty(exports, "PortablePath", { enumerable: !0, get: function() {
return path_1.PortablePath;
} });
Object.defineProperty(exports, "Filename", { enumerable: !0, get: function() {
return path_1.Filename;
} });
var path_2 = require_path();
Object.defineProperty(exports, "npath", { enumerable: !0, get: function() {
return path_2.npath;
} });
Object.defineProperty(exports, "ppath", { enumerable: !0, get: function() {
return path_2.ppath;
} });
Object.defineProperty(exports, "toFilename", { enumerable: !0, get: function() {
return path_2.toFilename;
} });
var AliasFS_1 = require_AliasFS();
Object.defineProperty(exports, "AliasFS", { enumerable: !0, get: function() {
return AliasFS_1.AliasFS;
} });
var FakeFS_2 = require_FakeFS();
Object.defineProperty(exports, "FakeFS", { enumerable: !0, get: function() {
return FakeFS_2.FakeFS;
} });
var CwdFS_1 = require_CwdFS();
Object.defineProperty(exports, "CwdFS", { enumerable: !0, get: function() {
return CwdFS_1.CwdFS;
} });
var JailFS_1 = require_JailFS();
Object.defineProperty(exports, "JailFS", { enumerable: !0, get: function() {
return JailFS_1.JailFS;
} });
var LazyFS_1 = require_LazyFS();
Object.defineProperty(exports, "LazyFS", { enumerable: !0, get: function() {
return LazyFS_1.LazyFS;
} });
var NoFS_1 = require_NoFS();
Object.defineProperty(exports, "NoFS", { enumerable: !0, get: function() {
return NoFS_1.NoFS;
} });
var NodeFS_1 = require_NodeFS();
Object.defineProperty(exports, "NodeFS", { enumerable: !0, get: function() {
return NodeFS_1.NodeFS;
} });
var PosixFS_1 = require_PosixFS();
Object.defineProperty(exports, "PosixFS", { enumerable: !0, get: function() {
return PosixFS_1.PosixFS;
} });
var ProxiedFS_1 = require_ProxiedFS();
Object.defineProperty(exports, "ProxiedFS", { enumerable: !0, get: function() {
return ProxiedFS_1.ProxiedFS;
} });
var VirtualFS_1 = require_VirtualFS();
Object.defineProperty(exports, "VirtualFS", { enumerable: !0, get: function() {
return VirtualFS_1.VirtualFS;
} });
var ZipFS_2 = require_ZipFS();
Object.defineProperty(exports, "ZipFS", { enumerable: !0, get: function() {
return ZipFS_2.ZipFS;
} });
var ZipOpenFS_1 = require_ZipOpenFS();
Object.defineProperty(exports, "ZipOpenFS", { enumerable: !0, get: function() {
return ZipOpenFS_1.ZipOpenFS;
} });
var patchFs_1 = require_patchFs();
Object.defineProperty(exports, "patchFs", { enumerable: !0, get: function() {
return patchFs_1.patchFs;
} });
Object.defineProperty(exports, "extendFs", { enumerable: !0, get: function() {
return patchFs_1.extendFs;
} });
var xfs_1 = require_xfs();
Object.defineProperty(exports, "xfs", { enumerable: !0, get: function() {
return xfs_1.xfs;
} });
}
});
// ../../node_modules/@yarnpkg/libzip/node_modules/tslib/tslib.es6.js
var tslib_es6_exports2 = {};
__export(tslib_es6_exports2, {
__assign: () => __assign2,
__asyncDelegator: () => __asyncDelegator2,
__asyncGenerator: () => __asyncGenerator2,
__asyncValues: () => __asyncValues2,
__await: () => __await2,
__awaiter: () => __awaiter2,
__classPrivateFieldGet: () => __classPrivateFieldGet2,
__classPrivateFieldSet: () => __classPrivateFieldSet2,
__createBinding: () => __createBinding2,
__decorate: () => __decorate2,
__exportStar: () => __exportStar2,
__extends: () => __extends2,
__generator: () => __generator2,
__importDefault: () => __importDefault2,
__importStar: () => __importStar2,
__makeTemplateObject: () => __makeTemplateObject2,
__metadata: () => __metadata2,
__param: () => __param2,
__read: () => __read2,
__rest: () => __rest2,
__spread: () => __spread2,
__spreadArrays: () => __spreadArrays2,
__values: () => __values2
});
function __extends2(d, b) {
extendStatics2(d, b);
function __() {
this.constructor = d;
}
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}
function __rest2(s, e) {
var t3 = {};
for (var p in s) Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0 && (t3[p] = s[p]);
if (s != null && typeof Object.getOwnPropertySymbols == "function")
for (var i2 = 0, p = Object.getOwnPropertySymbols(s); i2 < p.length; i2++)
e.indexOf(p[i2]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i2]) && (t3[p[i2]] = s[p[i2]]);
return t3;
}
function __decorate2(decorators, target, key, desc) {
var c3 = arguments.length, r = c3 < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect == "object" && typeof Reflect.decorate == "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i2 = decorators.length - 1; i2 >= 0; i2--) (d = decorators[i2]) && (r = (c3 < 3 ? d(r) : c3 > 3 ? d(target, key, r) : d(target, key)) || r);
return c3 > 3 && r && Object.defineProperty(target, key, r), r;
}
function __param2(paramIndex, decorator) {
return function(target, key) {
decorator(target, key, paramIndex);
};
}
function __metadata2(metadataKey, metadataValue) {
if (typeof Reflect == "object" && typeof Reflect.metadata == "function") return Reflect.metadata(metadataKey, metadataValue);
}
function __awaiter2(thisArg, _arguments, P, generator) {
function adopt(value) {
return value instanceof P ? value : new P(function(resolve9) {
resolve9(value);
});
}
return new (P || (P = Promise))(function(resolve9, reject) {
function fulfilled(value) {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
}
function rejected(value) {
try {
step(generator.throw(value));
} catch (e) {
reject(e);
}
}
function step(result) {
result.done ? resolve9(result.value) : adopt(result.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
}
function __generator2(thisArg, body) {
var _ = { label: 0, sent: function() {
if (t3[0] & 1) throw t3[1];
return t3[1];
}, trys: [], ops: [] }, f, y, t3, g;
return g = { next: verb(0), throw: verb(1), return: verb(2) }, typeof Symbol == "function" && (g[Symbol.iterator] = function() {
return this;
}), g;
function verb(n2) {
return function(v) {
return step([n2, v]);
};
}
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
for (; _; ) try {
if (f = 1, y && (t3 = op[0] & 2 ? y.return : op[0] ? y.throw || ((t3 = y.return) && t3.call(y), 0) : y.next) && !(t3 = t3.call(y, op[1])).done) return t3;
switch (y = 0, t3 && (op = [op[0] & 2, t3.value]), op[0]) {
case 0:
case 1:
t3 = op;
break;
case 4:
return _.label++, { value: op[1], done: !1 };
case 5:
_.label++, y = op[1], op = [0];
continue;
case 7:
op = _.ops.pop(), _.trys.pop();
continue;
default:
if (t3 = _.trys, !(t3 = t3.length > 0 && t3[t3.length - 1]) && (op[0] === 6 || op[0] === 2)) {
_ = 0;
continue;
}
if (op[0] === 3 && (!t3 || op[1] > t3[0] && op[1] < t3[3])) {
_.label = op[1];
break;
}
if (op[0] === 6 && _.label < t3[1]) {
_.label = t3[1], t3 = op;
break;
}
if (t3 && _.label < t3[2]) {
_.label = t3[2], _.ops.push(op);
break;
}
t3[2] && _.ops.pop(), _.trys.pop();
continue;
}
op = body.call(thisArg, _);
} catch (e) {
op = [6, e], y = 0;
} finally {
f = t3 = 0;
}
if (op[0] & 5) throw op[1];
return { value: op[0] ? op[1] : void 0, done: !0 };
}
}
function __createBinding2(o2, m, k, k2) {
k2 === void 0 && (k2 = k), o2[k2] = m[k];
}
function __exportStar2(m, exports) {
for (var p in m) p !== "default" && !exports.hasOwnProperty(p) && (exports[p] = m[p]);
}
function __values2(o2) {
var s = typeof Symbol == "function" && Symbol.iterator, m = s && o2[s], i2 = 0;
if (m) return m.call(o2);
if (o2 && typeof o2.length == "number") return {
next: function() {
return o2 && i2 >= o2.length && (o2 = void 0), { value: o2 && o2[i2++], done: !o2 };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
}
function __read2(o2, n2) {
var m = typeof Symbol == "function" && o2[Symbol.iterator];
if (!m) return o2;
var i2 = m.call(o2), r, ar = [], e;
try {
for (; (n2 === void 0 || n2-- > 0) && !(r = i2.next()).done; ) ar.push(r.value);
} catch (error) {
e = { error };
} finally {
try {
r && !r.done && (m = i2.return) && m.call(i2);
} finally {
if (e) throw e.error;
}
}
return ar;
}
function __spread2() {
for (var ar = [], i2 = 0; i2 < arguments.length; i2++)
ar = ar.concat(__read2(arguments[i2]));
return ar;
}
function __spreadArrays2() {
for (var s = 0, i2 = 0, il = arguments.length; i2 < il; i2++) s += arguments[i2].length;
for (var r = Array(s), k = 0, i2 = 0; i2 < il; i2++)
for (var a2 = arguments[i2], j = 0, jl = a2.length; j < jl; j++, k++)
r[k] = a2[j];
return r;
}
function __await2(v) {
return this instanceof __await2 ? (this.v = v, this) : new __await2(v);
}
function __asyncGenerator2(thisArg, _arguments, generator) {
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
var g = generator.apply(thisArg, _arguments || []), i2, q = [];
return i2 = {}, verb("next"), verb("throw"), verb("return"), i2[Symbol.asyncIterator] = function() {
return this;
}, i2;
function verb(n2) {
g[n2] && (i2[n2] = function(v) {
return new Promise(function(a2, b) {
q.push([n2, v, a2, b]) > 1 || resume(n2, v);
});
});
}
function resume(n2, v) {
try {
step(g[n2](v));
} catch (e) {
settle(q[0][3], e);
}
}
function step(r) {
r.value instanceof __await2 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
}
function fulfill(value) {
resume("next", value);
}
function reject(value) {
resume("throw", value);
}
function settle(f, v) {
f(v), q.shift(), q.length && resume(q[0][0], q[0][1]);
}
}
function __asyncDelegator2(o2) {
var i2, p;
return i2 = {}, verb("next"), verb("throw", function(e) {
throw e;
}), verb("return"), i2[Symbol.iterator] = function() {
return this;
}, i2;
function verb(n2, f) {
i2[n2] = o2[n2] ? function(v) {
return (p = !p) ? { value: __await2(o2[n2](v)), done: n2 === "return" } : f ? f(v) : v;
} : f;
}
}
function __asyncValues2(o2) {
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
var m = o2[Symbol.asyncIterator], i2;
return m ? m.call(o2) : (o2 = typeof __values2 == "function" ? __values2(o2) : o2[Symbol.iterator](), i2 = {}, verb("next"), verb("throw"), verb("return"), i2[Symbol.asyncIterator] = function() {
return this;
}, i2);
function verb(n2) {
i2[n2] = o2[n2] && function(v) {
return new Promise(function(resolve9, reject) {
v = o2[n2](v), settle(resolve9, reject, v.done, v.value);
});
};
}
function settle(resolve9, reject, d, v) {
Promise.resolve(v).then(function(v2) {
resolve9({ value: v2, done: d });
}, reject);
}
}
function __makeTemplateObject2(cooked, raw) {
return Object.defineProperty ? Object.defineProperty(cooked, "raw", { value: raw }) : cooked.raw = raw, cooked;
}
function __importStar2(mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) Object.hasOwnProperty.call(mod, k) && (result[k] = mod[k]);
return result.default = mod, result;
}
function __importDefault2(mod) {
return mod && mod.__esModule ? mod : { default: mod };
}
function __classPrivateFieldGet2(receiver, privateMap) {
if (!privateMap.has(receiver))
throw new TypeError("attempted to get private field on non-instance");
return privateMap.get(receiver);
}
function __classPrivateFieldSet2(receiver, privateMap, value) {
if (!privateMap.has(receiver))
throw new TypeError("attempted to set private field on non-instance");
return privateMap.set(receiver, value), value;
}
var extendStatics2, __assign2, init_tslib_es62 = __esm({
"../../node_modules/@yarnpkg/libzip/node_modules/tslib/tslib.es6.js"() {
extendStatics2 = function(d, b) {
return extendStatics2 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {
d2.__proto__ = b2;
} || function(d2, b2) {
for (var p in b2) b2.hasOwnProperty(p) && (d2[p] = b2[p]);
}, extendStatics2(d, b);
};
__assign2 = function() {
return __assign2 = Object.assign || function(t3) {
for (var s, i2 = 1, n2 = arguments.length; i2 < n2; i2++) {
s = arguments[i2];
for (var p in s) Object.prototype.hasOwnProperty.call(s, p) && (t3[p] = s[p]);
}
return t3;
}, __assign2.apply(this, arguments);
};
}
});
// ../../node_modules/@yarnpkg/libzip/lib/libzipSync.js
var require_libzipSync = __commonJS({
"../../node_modules/@yarnpkg/libzip/lib/libzipSync.js"(exports, module) {
var frozenFs = Object.assign({}, __require("fs")), createModule = (function() {
var _scriptDir = typeof document < "u" && document.currentScript ? document.currentScript.src : void 0;
return typeof __filename < "u" && (_scriptDir = _scriptDir || __filename), function(createModule2) {
createModule2 = createModule2 || {};
var Module = typeof createModule2 < "u" ? createModule2 : {}, readyPromiseResolve, readyPromiseReject;
Module.ready = new Promise(function(resolve9, reject) {
readyPromiseResolve = resolve9, readyPromiseReject = reject;
});
var moduleOverrides = {}, key;
for (key in Module)
Module.hasOwnProperty(key) && (moduleOverrides[key] = Module[key]);
var arguments_ = [], thisProgram = "./this.program", quit_ = function(status, toThrow) {
throw toThrow;
}, ENVIRONMENT_IS_WORKER = !1, ENVIRONMENT_IS_NODE = !0, scriptDirectory = "";
function locateFile(path5) {
return Module.locateFile ? Module.locateFile(path5, scriptDirectory) : scriptDirectory + path5;
}
var read_, readBinary, nodeFS, nodePath;
ENVIRONMENT_IS_NODE && (ENVIRONMENT_IS_WORKER ? scriptDirectory = __require("path").dirname(scriptDirectory) + "/" : scriptDirectory = __dirname + "/", read_ = function(filename, binary) {
var ret = tryParseAsDataURI(filename);
return ret ? binary ? ret : ret.toString() : (nodeFS || (nodeFS = frozenFs), nodePath || (nodePath = __require("path")), filename = nodePath.normalize(filename), nodeFS.readFileSync(filename, binary ? null : "utf8"));
}, readBinary = function(filename) {
var ret = read_(filename, !0);
return ret.buffer || (ret = new Uint8Array(ret)), assert(ret.buffer), ret;
}, process.argv.length > 1 && (thisProgram = process.argv[1].replace(/\\/g, "/")), arguments_ = process.argv.slice(2), quit_ = function(status) {
process.exit(status);
}, Module.inspect = function() {
return "[Emscripten Module object]";
});
var out = Module.print || console.log.bind(console), err = Module.printErr || console.warn.bind(console);
for (key in moduleOverrides)
moduleOverrides.hasOwnProperty(key) && (Module[key] = moduleOverrides[key]);
moduleOverrides = null, Module.arguments && (arguments_ = Module.arguments), Module.thisProgram && (thisProgram = Module.thisProgram), Module.quit && (quit_ = Module.quit);
var STACK_ALIGN = 16;
function alignMemory(size, factor) {
return factor || (factor = STACK_ALIGN), Math.ceil(size / factor) * factor;
}
var tempRet0 = 0, setTempRet0 = function(value) {
tempRet0 = value;
}, wasmBinary;
Module.wasmBinary && (wasmBinary = Module.wasmBinary);
var noExitRuntime = Module.noExitRuntime || !0;
typeof WebAssembly != "object" && abort("no native wasm support detected");
function getValue(ptr, type, noSafe) {
switch (type = type || "i8", type.charAt(type.length - 1) === "*" && (type = "i32"), type) {
case "i1":
return HEAP8[ptr >> 0];
case "i8":
return HEAP8[ptr >> 0];
case "i16":
return HEAP16[ptr >> 1];
case "i32":
return HEAP32[ptr >> 2];
case "i64":
return HEAP32[ptr >> 2];
case "float":
return HEAPF32[ptr >> 2];
case "double":
return HEAPF64[ptr >> 3];
default:
abort("invalid type for getValue: " + type);
}
return null;
}
var wasmMemory, ABORT = !1, EXITSTATUS;
function assert(condition, text) {
condition || abort("Assertion failed: " + text);
}
function getCFunc(ident) {
var func = Module["_" + ident];
return assert(
func,
"Cannot call unknown function " + ident + ", make sure it is exported"
), func;
}
function ccall(ident, returnType, argTypes, args, opts) {
var toC = {
string: function(str) {
var ret2 = 0;
if (str != null && str !== 0) {
var len = (str.length << 2) + 1;
ret2 = stackAlloc(len), stringToUTF8(str, ret2, len);
}
return ret2;
},
array: function(arr) {
var ret2 = stackAlloc(arr.length);
return writeArrayToMemory(arr, ret2), ret2;
}
};
function convertReturnValue(ret2) {
return returnType === "string" ? UTF8ToString(ret2) : returnType === "boolean" ? !!ret2 : ret2;
}
var func = getCFunc(ident), cArgs = [], stack = 0;
if (args)
for (var i2 = 0; i2 < args.length; i2++) {
var converter = toC[argTypes[i2]];
converter ? (stack === 0 && (stack = stackSave()), cArgs[i2] = converter(args[i2])) : cArgs[i2] = args[i2];
}
var ret = func.apply(null, cArgs);
return ret = convertReturnValue(ret), stack !== 0 && stackRestore(stack), ret;
}
function cwrap(ident, returnType, argTypes, opts) {
argTypes = argTypes || [];
var numericArgs = argTypes.every(function(type) {
return type === "number";
}), numericRet = returnType !== "string";
return numericRet && numericArgs && !opts ? getCFunc(ident) : function() {
return ccall(ident, returnType, argTypes, arguments, opts);
};
}
var UTF8Decoder = typeof TextDecoder < "u" ? new TextDecoder("utf8") : void 0;
function UTF8ArrayToString(heap, idx, maxBytesToRead) {
for (var endIdx = idx + maxBytesToRead, endPtr = idx; heap[endPtr] && !(endPtr >= endIdx); ) ++endPtr;
if (endPtr - idx > 16 && heap.subarray && UTF8Decoder)
return UTF8Decoder.decode(heap.subarray(idx, endPtr));
for (var str = ""; idx < endPtr; ) {
var u0 = heap[idx++];
if (!(u0 & 128)) {
str += String.fromCharCode(u0);
continue;
}
var u1 = heap[idx++] & 63;
if ((u0 & 224) == 192) {
str += String.fromCharCode((u0 & 31) << 6 | u1);
continue;
}
var u2 = heap[idx++] & 63;
if ((u0 & 240) == 224 ? u0 = (u0 & 15) << 12 | u1 << 6 | u2 : u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heap[idx++] & 63, u0 < 65536)
str += String.fromCharCode(u0);
else {
var ch = u0 - 65536;
str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023);
}
}
return str;
}
function UTF8ToString(ptr, maxBytesToRead) {
return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : "";
}
function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) {
if (!(maxBytesToWrite > 0)) return 0;
for (var startIdx = outIdx, endIdx = outIdx + maxBytesToWrite - 1, i2 = 0; i2 < str.length; ++i2) {
var u2 = str.charCodeAt(i2);
if (u2 >= 55296 && u2 <= 57343) {
var u1 = str.charCodeAt(++i2);
u2 = 65536 + ((u2 & 1023) << 10) | u1 & 1023;
}
if (u2 <= 127) {
if (outIdx >= endIdx) break;
heap[outIdx++] = u2;
} else if (u2 <= 2047) {
if (outIdx + 1 >= endIdx) break;
heap[outIdx++] = 192 | u2 >> 6, heap[outIdx++] = 128 | u2 & 63;
} else if (u2 <= 65535) {
if (outIdx + 2 >= endIdx) break;
heap[outIdx++] = 224 | u2 >> 12, heap[outIdx++] = 128 | u2 >> 6 & 63, heap[outIdx++] = 128 | u2 & 63;
} else {
if (outIdx + 3 >= endIdx) break;
heap[outIdx++] = 240 | u2 >> 18, heap[outIdx++] = 128 | u2 >> 12 & 63, heap[outIdx++] = 128 | u2 >> 6 & 63, heap[outIdx++] = 128 | u2 & 63;
}
}
return heap[outIdx] = 0, outIdx - startIdx;
}
function stringToUTF8(str, outPtr, maxBytesToWrite) {
return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);
}
function lengthBytesUTF8(str) {
for (var len = 0, i2 = 0; i2 < str.length; ++i2) {
var u2 = str.charCodeAt(i2);
u2 >= 55296 && u2 <= 57343 && (u2 = 65536 + ((u2 & 1023) << 10) | str.charCodeAt(++i2) & 1023), u2 <= 127 ? ++len : u2 <= 2047 ? len += 2 : u2 <= 65535 ? len += 3 : len += 4;
}
return len;
}
function allocateUTF8(str) {
var size = lengthBytesUTF8(str) + 1, ret = _malloc(size);
return ret && stringToUTF8Array(str, HEAP8, ret, size), ret;
}
function writeArrayToMemory(array, buffer2) {
HEAP8.set(array, buffer2);
}
function alignUp(x, multiple) {
return x % multiple > 0 && (x += multiple - x % multiple), x;
}
var buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
function updateGlobalBufferAndViews(buf) {
buffer = buf, Module.HEAP8 = HEAP8 = new Int8Array(buf), Module.HEAP16 = HEAP16 = new Int16Array(buf), Module.HEAP32 = HEAP32 = new Int32Array(buf), Module.HEAPU8 = HEAPU8 = new Uint8Array(buf), Module.HEAPU16 = HEAPU16 = new Uint16Array(buf), Module.HEAPU32 = HEAPU32 = new Uint32Array(buf), Module.HEAPF32 = HEAPF32 = new Float32Array(buf), Module.HEAPF64 = HEAPF64 = new Float64Array(buf);
}
var INITIAL_MEMORY = Module.INITIAL_MEMORY || 16777216, wasmTable, __ATPRERUN__ = [], __ATINIT__ = [], __ATPOSTRUN__ = [], runtimeInitialized = !1;
function preRun() {
if (Module.preRun)
for (typeof Module.preRun == "function" && (Module.preRun = [Module.preRun]); Module.preRun.length; )
addOnPreRun(Module.preRun.shift());
callRuntimeCallbacks(__ATPRERUN__);
}
function initRuntime() {
runtimeInitialized = !0, !Module.noFSInit && !FS.init.initialized && FS.init(), TTY.init(), callRuntimeCallbacks(__ATINIT__);
}
function postRun() {
if (Module.postRun)
for (typeof Module.postRun == "function" && (Module.postRun = [Module.postRun]); Module.postRun.length; )
addOnPostRun(Module.postRun.shift());
callRuntimeCallbacks(__ATPOSTRUN__);
}
function addOnPreRun(cb) {
__ATPRERUN__.unshift(cb);
}
function addOnInit(cb) {
__ATINIT__.unshift(cb);
}
function addOnPostRun(cb) {
__ATPOSTRUN__.unshift(cb);
}
var runDependencies = 0, runDependencyWatcher = null, dependenciesFulfilled = null;
function getUniqueRunDependency(id) {
return id;
}
function addRunDependency(id) {
runDependencies++, Module.monitorRunDependencies && Module.monitorRunDependencies(runDependencies);
}
function removeRunDependency(id) {
if (runDependencies--, Module.monitorRunDependencies && Module.monitorRunDependencies(runDependencies), runDependencies == 0 && (runDependencyWatcher !== null && (clearInterval(runDependencyWatcher), runDependencyWatcher = null), dependenciesFulfilled)) {
var callback = dependenciesFulfilled;
dependenciesFulfilled = null, callback();
}
}
Module.preloadedImages = {}, Module.preloadedAudios = {};
function abort(what) {
Module.onAbort && Module.onAbort(what), what += "", err(what), ABORT = !0, EXITSTATUS = 1, what = "abort(" + what + "). Build with -s ASSERTIONS=1 for more info.";
var e = new WebAssembly.RuntimeError(what);
throw readyPromiseReject(e), e;
}
var dataURIPrefix = "data:application/octet-stream;base64,";
function isDataURI(filename) {
return filename.startsWith(dataURIPrefix);
}
var wasmBinaryFile = "data:application/octet-stream;base64,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ACgCFC0AAiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQADIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAQgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABSAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAGIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAcgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAJIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAogACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACyAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAMIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAA0gACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ADiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAPIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhRBEGo2AhQgACAAKAIIQQFrIgE2AgggAQ0ACyAAIAAoAhhB8f8DcDYCGCAAIAAoAgxB8f8DcDYCDAwBCwsgACgCEARAA0AgACgCEEEQTwRAIAAgACgCEEEQazYCECAAIAAoAhQtAAAgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AASAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQACIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAMgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAFIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAYgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AByAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAIIAAoAhhqNgIYIAAgACgCGCAAKAIMajYC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NgIYIAEoAgxCADcDICABKAIMQgA3AyggASgCDEEANgIwIAEoAgxBADYCNCABKAIMQQA2AjggASgCDEEANgI8IAEoAgxBADsBQCABKAIMQYCA2I14NgJEIAEoAgxCADcDSCABKAIMQQA7AVAgASgCDEEAOwFSIAEoAgxBADYCVAvSEwEBfyMAQbABayIDJAAgAyAANgKoASADIAE2AqQBIAMgAjYCoAEgA0EANgKQASADIAMoAqQBKAIwQQAQOjYClAEgAyADKAKkASgCOEEAEDo2ApgBAkACQAJAAkAgAygClAFBAkYEQCADKAKYAUEBRg0BCyADKAKUAUEBRgRAIAMoApgBQQJGDQELIAMoApQBQQJHDQEgAygCmAFBAkcNAQsgAygCpAEiACAALwEMQYAQcjsBDAwBCyADKAKkASIAIAAvAQxB/+8DcTsBDCADKAKUAUECRgRAIANB9eABIAMoAqQBKAIwIAMoAqgBQQhqEI4BNgKQASADKAKQAUUEQCADQX82AqwBDAMLCwJAIAMoAqABQYACcQ0AIAMoApgBQQJHDQAgA0H1xgEgAygCpAEoAjggAygCqAFBCGoQjgE2AkggAygCSEUEQCADKAKQARAjIANBfzYCrAEMAwsgAygCSCADKAKQATYCACADIAMoAkg2ApABCwsCQCADKAKkAS8BUkUEQCADKAKkASIAIAAvAQxB/v8DcTsBDAwBCyADKAKkASIAIAAvAQxBAXI7AQwLIAMgAygCpAEgAygCoAEQZUEBcToAhgEgAyADKAKgAUGACnFBgApHBH8gAy0AhgEFQQELQQFxOgCHASADAn9BASADKAKkAS8BUkGBAkYNABpBASADKAKkAS8BUkGCAkYNABogAygCpAEvAVJBgwJGC0EBcToAhQEgAy0AhwFBAXEEQCADIANBIGpCHBApNgIcIAMoAhxFBEAgAygCqAFBCGpBDkEAEBQgAygCkAEQIyADQX82AqwBDAILAkAgAygCoAFBgAJxBEACQCADKAKgAUGACHENACADKAKkASkDIEL/////D1YNACADKAKkASkDKEL/////D1gNAgsgAygCHCADKAKkASkDKBAtIAMoAhwgAygCpAEpAyAQLQwBCwJAAkAgAygCoAFBgAhxDQAgAygCpAEpAyBC/////w9WDQAgAygCpAEpAyhC/////w9WDQAgAygCpAEpA0hC/////w9YDQELIAMoAqQBKQMoQv////8PWgRAIAMoAhwgAygCpAEpAygQLQsgAygCpAEpAyBC/////w9aBEAgAygCHCADKAKkASkDIBAtCyADKAKkASkDSEL/////D1oEQCADKAIcIAMoAqQBKQNIEC0LCwsCfyMAQRBrIgAgAygCHDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIcEBYgAygCkAEQIyADQX82AqwBDAILIANBAQJ/IwBBEGsiACADKAIcNgIMAn4gACgCDC0AAEEBcQRAIAAoAgwpAxAMAQtCAAunQf//A3ELIANBIGpBgAYQVTYCjAEgAygCHBAWIAMoAowBIAMoApABNgIAIAMgAygCjAE2ApABCyADLQCFAUEBcQRAIAMgA0EVakIHECk2AhAgAygCEEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAgsgAygCEEECEB8gAygCEEG9EkECEEEgAygCECADKAKkAS8BUkH/AXEQlgEgAygCECADKAKkASgCEEH//wNxEB8CfyMAQRBrIgAgAygCEDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIQEBYgAygCkAEQIyADQX82AqwBDAILIANBgbICQQcgA0EVakGABhBVNgIMIAMoAhAQFiADKAIMIAMoApABNgIAIAMgAygCDDYCkAELIAMgA0HQAGpCLhApIgA2AkwgAEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAQsgAygCTEHxEkH2EiADKAKgAUGAAnEbQQQQQSADKAKgAUGAAnFFBEAgAygCTCADLQCGAUEBcQR/QS0FIAMoAqQBLwEIC0H//wNxEB8LIAMoAkwgAy0AhgFBAXEEf0EtBSADKAKkAS8BCgtB//8DcRAfIAMoAkwgAygCpAEvAQwQHwJAIAMtAIUBQQFxBEAgAygCTEHjABAfDAELIAMoAkwgAygCpAEoAhBB//8DcRAfCyADKAKkASgCFCADQZ4BaiADQZwBahCNASADKAJMIAMvAZ4BEB8gAygCTCADLwGcARAfAkACQCADLQCFAUEBcUUNACADKAKkASkDKEIUWg0AIAMoAkxBABAhDAELIAMoAkwgAygCpAEoAhgQIQsCQAJAIAMoAqABQYACcUGAAkcNACADKAKkASkDIEL/////D1QEQCADKAKkASkDKEL/////D1QNAQsgAygCTEF/ECEgAygCTEF/ECEMAQsCQCADKAKkASkDIEL/////D1QEQCADKAJMIAMoAqQBKQMgpxAhDAELIAMoAkxBfxAhCwJAIAMoAqQBKQMoQv////8PVARAIAMoAkwgAygCpAEpAyinECEMAQsgAygCTEF/ECELCyADKAJMIAMoAqQBKAIwEFFB//8DcRAfIAMgAygCpAEoAjQgAygCoAEQkgFB//8DcSADKAKQAUGABhCSAUH//wNxajYCiAEgAygCTCADKAKIAUH//wNxEB8gAygCoAFBgAJxRQRAIAMoAkwgAygCpAEoAjgQUUH//wNxEB8gAygCTCADKAKkASgCPEH//wNxEB8gAygCTCADKAKkAS8BQBAfIAMoAkwgAygCpAEoAkQQIQJAIAMoAqQBKQNIQv////8PVARAIAMoAkwgAygCpAEpA0inECEMAQsgAygCTEF/ECELCwJ/IwBBEGsiACADKAJMNgIMIAAoAgwtAABBAXFFCwRAIAMoAqgBQQhqQRRBABAUIAMoAkwQFiADKAKQARAjIANBfzYCrAEMAQsgAygCqAEgA0HQAGoCfiMAQRBrIgAgAygCTDYCDAJ+IAAoAgwtAABBAXEEQCAAKAIMKQMQDAELQgALCxA2QQBIBEAgAygCTBAWIAMoApABECMgA0F/NgKsAQwBCyADKAJMEBYgAygCpAEoAjAEQCADKAKoASADKAKkASgCMBCFAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEEQCADKAKoASADKAKQAUGABhCRAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEQIyADKAKkASgCNARAIAMoAqgBIAMoAqQBKAI0IAMoAqABEJEBQQBIBEAgA0F/NgKsAQwCCwsgAygCoAFBgAJxRQRAIAMoAqQBKAI4BEAgAygCqAEgAygCpAEoAjgQhQFBAEgEQCADQX82AqwBDAMLCwsgAyADLQCHAUEBcTYCrAELIAMoAqwBIQAgA0GwAWokACAAC+ACAQF/IwBBIGsiBCQAIAQgADsBGiAEIAE7ARggBCACNgIUIAQgAzYCECAEQRAQGCIANgIMAkAg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AAAgAygCHEHcFmogAygCDEECdGooAgAgAygCHEHYKGpqLQAASg0ADAELIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhxB3BZqIAMoAgxBAnRqKAIANgIAIAMgAygCDDYCFCADIAMoAgxBAXQ2AgwMAQsLIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhA2AgAL1xMBA38jAEEwayICJAAgAiAANgIsIAIgATYCKCACIAIoAigoAgA2AiQgAiACKAIoKAIIKAIANgIgIAIgAigCKCgCCCgCDDYCHCACQX82AhAgAigCLEEANgLQKCACKAIsQb0ENgLUKCACQQA2AhgDQCACKAIYIAIoAhxIBEACQCACKAIkIAIoAhhBAnRqLwEABEAgAiACKAIYIgE2AhAgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQAgBCAANgLQKCAAQQJ0IANqIAE2AgAgAigCGCACKAIsQdgoampBADoAAAwBCyACKAIkIAIoAhhBAnRqQQA7AQILIAIgAigCGEEBajYCGAwBCwsDQCACKAIsKALQKEECSARAAkAgAigCEEECSARAIAIgAigCEEEBaiIANgIQDAELQQAhAAsgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQEgBCABNgLQKCABQQJ0IANqIAA2AgAgAiAANgIMIAIoAiQgAigCDEECdGpBATsBACACKAIMIAIoAixB2ChqakEAOgAAIAIoAiwiACAAKAKoLUEBazYCqC0gAigCIARAIAIoAiwiACAAKAKsLSACKAIgIAIoAgxBAnRqLwECazYCrC0LDAELCyACKAIoIAIoAhA2AgQgAiACKAIsKALQKEECbTYCGANAIAIoAhhBAU4EQCACKAIsIAIoAiQgAigCGBB5IAIgAigCGEEBazYCGAwBCwsgAiACKAIcNgIMA0AgAiACKAIsKALgFjYCGCACKAIsQdwWaiEBIAIoAiwiAygC0CghACADIABBAWs2AtAoIAIoAiwgAEECdCABaigCADYC4BYgAigCLCACKAIkQQEQeSACIAIoAiwoAuAWNgIUIAIoAhghASACKAIsQdwWaiEDIAIoAiwiBCgC1ChBAWshACAEIAA2AtQoIABBAnQgA2ogATYCACACKAIUIQEgAigCLEHcFmohAyACKAIsIgQoAtQoQQFrIQAgBCAANgLUKCAA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AQsgAigCCEEANgIAIAIoAghCADcDECACKAIIQgA3AwggAigCCEIANwMgIAIoAghCADcDGCACKAIIQQA2AiggAigCCEEAOgAsIAIoAgggAikDECACKAIMEI8BQQFxRQRAIAIoAggQJSACQQA2AhwMAQsgAiACKAIINgIcCyACKAIcIQEgAkEgaiQAIAEL1gIBAX8jAEEgayIDJAAgAyAANgIYIAMgATYCFCADIAI2AhAgAyADQQxqQgQQKTYCCAJAIAMoAghFBEAgA0F/NgIcDAELA0AgAygCFARAIAMoAhQoAgQgAygCEHFBgAZxBEAgAygCCEIAECwaIAMoAgggAygCFC8BCBAfIAMoAgggAygCFC8BChAfAn8jAEEQayIAIAMoAgg2AgwgACgCDC0AAEEBcUULBEAgAygCGEEIakEUQQAQFCADKAIIEBYgA0F/NgIcDAQLIAMoAhggA0EMakIEEDZBAEgEQCADKAIIEBYgA0F/NgIcDAQLIAMoAhQvAQoEQCADKAIYIAMoAhQoAgwgAygCFC8BCq0QNkEASARAIAMoAggQFiADQX82AhwMBQsLCyADIAMoAhQoAgA2AhQMAQsLIAMoAggQFiADQQA2AhwLIAMoAhwhACADQSBqJAAgAAtoAQF/IwBBEGsiAiAANgIMIAIgATYCCCACQQA7AQYDQCACKAIMBEAgAigCDCgCBCACKAIIcUGABnEEQCACIAIoAgwvAQogAi8BBkEEamo7AQYLIAIgAigCDCgCADYCDAwBCwsgAi8BBgvwAQEBfyMAQRBrIgEkACABIAA2AgwgASABKAIMNgIIIAFBADYCBANAIAEoAgwEQAJAAkAgASgCDC8BCEH1xgFGDQAgASgCDC8BCEH14AFGDQAgASgCDC8BCEGBsgJGDQAgASgCDC8BCEEBRw0BCyABIAEoAgwoAgA2AgAgASgCCCABKAIMRgRAIAEgASgCADYCCAsgASgCDEEANgIAIAEoAgwQIyABKAIEBEAgASgCBCABKAIANgIACyABIAEoAgA2AgwMAgsgASABKAIMNgIEIAEgASgCDCgCADYCDAwBCwsgASgCCCEAIAFBEGokACAAC7IEAQF/IwBBQGoiBSQAIAUgADYCOCAFIAE7ATYgBSACNgIwIAUgAzYCLCAFIAQ2AiggBSAFKAI4IAUvATatECkiADYC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IAEoAhBB//8DRgRAIAEgASgCDDYCEAsgASgCCEH//wNGBEAgASABKAIENgIICwJAIAEoApQBQQRxRQ0AIAEoAgggASgCBEYEQCABKAIQIAEoAgxGDQELIAEoApABQRVBABAUIAEtABdBAXEEQCABKAKkARAWCyABQQA2AqwBDAELAkAgASgCEEUEQCABKAIIRQ0BCyABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AyggASABKAKkARAxNwMgIAEpAyggASkDIFIEQCABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AzAgASABKAKkARAxNwOAAQJ/IwBBEGsiBSABKAKkATYCDCAFKAIMLQAAQQFxRQsEQCABKAKQAUEUQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABLQAXQQFxBEAgASgCpAEQFgsCQCABKQOAAUL///////////8AWARAIAEpA4ABIAEpA4ABIAEpAzB8WA0BCyABKAKQAUEEQRYQFCABQQA2AqwBDAELIAEpA4ABIAEpAzB8IAEpA5gBIAEpAzh8VgRAIAEoApABQRVBABAUIAFBADYCrAEMAQsCQCABKAKUAUEEcUUNACABKQOAASABKQMwfCABKQOYASABKQM4fFENACABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEpAyggASkDMEIugFYEQCABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEgASkDKCABKAKQARCQASIFNgKMASAFRQRAIAFBADYCrAEMAQsgASgCjAFBAToALCABKAKMASABKQMwNwMYIAEoAowBIAEpA4ABNwMgIAEgASgCjAE2AqwBCyABKAKsASEFIAFBsAFqJAAgACAFNgJQDAELIAAoAmQgACkDMBAsGiAAKAJkIQUgACkDWCEJIAAoAmgoAhQhBiAAKAJUIQcjAEHQAGsiASQAIAEgBTYCSCABIAk3A0AgASAGNgI8IAEgBzYCOAJAIAEoAkgQMEIWVARAIAEoAjhBFUEAEBQgAUEANgJMDAELIwBBEGsiBSABKAJINgIMIAECfiAFKAIMLQAAQQFxBEAgBSgCDCkDEAwBC0IACzcDCCABKAJI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ECADQcgAEBgiADYCDAJAIABFBEAgAygCEEEBQbSbASgCABAUIANBADYCHAwBCyADKAIMIAMoAhA2AgAgAygCDCADLQAbQQFxOgAEIAMoAgwgAygCFDYCCAJAIAMoAgwoAghBAU4EQCADKAIMKAIIQQlMDQELIAMoAgxBCTYCCAsgAygCDEEAOgAMIAMoAgxBADYCMCADKAIMQQA2AjQgAygCDEEANgI4IAMgAygCDDYCHAsgAygCHCEAIANBIGokACAACzgBAX8jAEEQayIBIAA2AgwgASgCDEEANgIAIAEoAgxBADYCBCABKAIMQQA2AgggASgCDEEAOgAMC+MIAQF/IwBBQGoiAiAANgI4IAIgATYCNCACIAIoAjgoAnw2AjAgAiACKAI4KAI4IAIoAjgoAmxqNgIsIAIgAigCOCgCeDYCICACIAIoAjgoApABNgIcIAICfyACKAI4KAJsIAIoAjgoAixBhgJrSwRAIAIoAjgoAmwgAigCOCgCLEGGAmtrDAELQQALNgIYIAIgAigCOCgCQDYCFCACIAIoAjgoAjQ2AhAgAiACKAI4KAI4IAIoAjgoAmxqQYICajYCDCACIAIoAiwgAigCIEEBa2otAAA6AAsgAiACKAIsIAIoAiBqLQAAOgAKIAIoAjgoAnggAigCOCgCjAFPBEAgAiACKAIwQQJ2NgIwCyACKAIcIAIoAjgoAnRLBEAgAiACKAI4KAJ0NgIcCwNAAkAgAiACKAI4KAI4IAIoAjRqNgIoAkAgAigCKCACKAIgai0AACACLQAKRw0AIAIoAiggAigCIEEBa2otAAAgAi0AC0cNACACKAIoLQAAIAIoAiwtAABHDQAgAiACKAIoIgBBAWo2AiggAC0AASACKAIsLQABRwRADAELIAIgAigCLEECajYCLCACIAIoAihBAWo2AigDQCACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AigCf0EAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACKAIsIAIoAgxJC0EBcQ0ACyACQYICIAIoAgwgAigCLGtrNgIkIAIgAigCDEGCAms2AiwgAigCJCACKAIgSgRAIAIoAjggAigCNDYCcCACIAIoAiQ2AiAgAigCJCACKAIcTg0CIAIgAigCLCACKAIgQQFrai0AADoACyACIAIoAiwgAigCIGotAAA6AAoLCyACIAIoAhQgAigCNCACKAIQcUEBdGovAQAiATYCNEEAIQAgASACKAIYSwR/IAIgAigCMEEBayIANgIwIABBAEcFQQALQQFxDQELCwJAIAIoAiAgAigCOCgCdE0EQCACIAIoAiA2AjwMAQsgAiACKAI4KAJ0NgI8CyACKAI8C5IQAQF/IwBBMGsiAiQAIAIgADYCKCACIAE2AiQgAgJ/IAIoAigoAiwgAigCKCgCDEEFa0kEQCACKAIoKAIsDAELIAIoAigoAgxBBWsLNgIgIAJBADYCECACIAIoAigoAgAoAgQ2AgwDQAJAIAJB//8DNgIcIAIgAigCKCgCvC1BKmpBA3U2AhQgAigCKCgCACgCECACKAIUSQ0AIAIgAigCKCgCACgCECACKAIUazYCFCACIAIoAigoAmwgAigCKCgCXGs2AhggAigCHCACKAIYIAIoAigoAgAoAgRqSwRAIAIgAigCGCACKAIoKAIAKAIEajYCHAsgAigCHCACKAIUSwRAIAIgAigCFDYCHAsCQCACKAIcIAIoAiBPDQACQCACKAIcRQRAIAIoAiRBBEcNAQsgAigCJEUNACACKAIcIAIoAhggAigCKCgCACgCBGpGDQELDAELQQAhACACIAIoAiRBBEYEfyACKAIcIAIoAhggAigCKCgCACgCBGpGBUEAC0EBcTYCECACKAIoQQBBACACKAIQEF0gAigCKCgCCCACKAIoKAIUQQRraiACKAIcOgAAIAIoAigoAgggAigCKCgCFEEDa2ogAigCHEEIdjoAACACKAIoKAIIIAIoAigoAhRBAmtqIAIoAhxBf3M6AAAgAigCKCgCCCACKAIoKAIUQQFraiACKAIcQX9zQQh2OgAAIAIoAigoAgAQHCACKAIYBEAgAigCGCACKAIcSwRAIAIgAigCHDYCGAsgAigCKCgCACgCDCACKAIoKAI4IAIoAigoAlxqIAIoAhgQGRogAigCKCgCACIAIAIoAhggACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCGGs2AhAgAigCKCgCACIAIAIoAhggACgCFGo2AhQgAigCKCIAIAIoAhggACgCXGo2AlwgAiACKAIcIAIoAhhrNgIcCyACKAIcBEAgAigCKCgCACACKAIoKAIAKAIMIAIoAhwQdhogAigCKCgCACIAIAIoAhwgACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCHGs2AhAgAigCKCgCACIAIAIoAhwgACgCFGo2AhQLIAIoAhBFDQELCyACIAIoAgwgAigCKCgCACgCBGs2AgwgAigCDARAAkAgAigCDCACKAIoKAIsTwRAIAIoAihBAjYCsC0gAigCKCgCOCACKAIoKAIAKAIAIAIoAigoAixrIAIoAigoAiwQGRogAigCKCACKAIoKAIsNgJsDAELIAIoAgwgAigCKCgCPCACKAIoKAJsa08EQCACKAIoIgAgACgCbCACKAIoKAIsazYCbCACKAIoKAI4IAIoAigoAjggAigCKCgCLGogAigCKCgCbBAZGiACKAIoKAKwLUECSQRAIAIoAigiACAAKAKwLUEBajYCsC0LCyACKAIoKAI4IAIoAigoAmxqIAIoAigoAgAoAgAgAigCDGsgAigCDBAZGiACKAIoIgAgAigCDCAAKAJsajYCbAsgAigCKCACKAIoKAJsNgJcIAIoAigiAQJ/IAIoAgwgAigCKCgCLCACKAIoKAK0LWtLBEAgAigCKCgCLCACKAIoKAK0LWsMAQsgAigCDAsgASgCtC1qNgK0LQsgAigCKCgCwC0gAigCKCgCbEkEQCACKAIoIAIoAigoAmw2AsAtCwJAIAIoAhAEQCACQQM2AiwMAQsCQCACKAIkRQ0AIAIoAiRBBEYNACACKAIoKAIAKAIEDQAgAigCKCgCbCACKAIoKAJcRw0AIAJBATYCLAwBCyACIAIoAigoAjwgAigCKCgCbGtBAWs2AhQCQCACKAIoKAIAKAIEIAIoAhRNDQAgAigCKCgCXCACKAIoKAIsSA0AIAIoAigiACAAKAJcIAIoAigoAixrNgJcIAIoAigiACAAKAJsIAIoAigoAixrNgJsIAIoAigoAjggAigCKCgCOCACKAIoKAIsaiACKAIoKAJsEBkaIAIoAigoArAtQQJJBEAgAigCKCIAIAAoArAtQQFqNgKwLQsgAiACKAIoKAIsIAIoAhRqNgIUCyACKAIUIAIoAigoAgAoAgRLBEAgAiACKAIoKAIAKAIENgIUCyACKAIUBEAgAigCKCgCACACKAIoKAI4IAIoAigoAmxqIAIoAhQQdhogAigCKCIAIAIoAhQgACgCbGo2AmwLIAIoAigoAsAtIAIoAigoAmxJBEAgAigCKCACKAIoKAJsNgLALQsgAiACKAIoKAK8LUEqakEDdTYCFCACIAIoAigoAgwgAigCFGtB//8DSwR/Qf//AwUgAigCKCgCDCACKAIUaws2AhQgAgJ/IAIoAhQgAigCKCgCLEsEQCACKAIoKAIsDAELIAIoAhQLNgIgIAIgAigCKCgCbCACKAIoKAJcazYCGAJAIAIoAhggAigCIEkEQCACKAIYRQRAIAIoAiRBBEcNAgsgAigCJEUNASACKAIoKAIAKAIEDQEgAigCGCACKAIUSw0BCyACAn8gAigCGCACKAIUSwRAIAIoAhQMAQsgAigCGAs2AhwgAgJ/QQAgAigCJEEERw0AGkEAIAIoAigoAgAoAgQNABogAigCHCACKAIYRgtBAXE2AhAgAigCKCACKAIoKAI4IAIoAigoAlxqIAIoAhwgAigCEBBdIAIoAigiACACKAIcIAAoAlxqNgJcIAIoAigoAgAQHAsgAkECQQAgAigCEBs2AiwLIAIoAiwhACACQTBqJAAgAAuyAgEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIEHgEQCABQX42AgwMAQsgASABKAIIKAIcKAIENgIEIAEoAggoAhwoAggEQCABKAIIKAIoIAEoAggoAhwoAgggASgCCCgCJBEEAAsgASgCCCgCHCgCRARAIAEoAggoAiggASgCCCgCHCgCRCABKAIIKAIkEQQACyABKAIIKAIc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DQAgAiEAIANBAWsiAw0ACwsgBCgCFBogASACNgKgAQwCCyMAQRBrIgAgASgCqAEoAgQ2AgwgAUEAIAAoAgxrQQJ0QajZAGooAgA2AqABDAELIAFBADYCoAELCwJAIAEoAqABRQRAIAEgASgCpAE2AqwBDAELIAEgASgCoAEQLgJ/IAEoAqQBBEAgASgCpAEQLkECagwBC0EAC2pBAWoQGCIANgIcIABFBEAgAUG4EygCADYCrAEMAQsgASgCHCEAAn8gASgCpAEEQCABKAKkAQwBC0H6EgshA0HfEkH6EiABKAKkARshAiABIAEoAqABNgIIIAEgAjYCBCABIAM2AgAgAEG+CiABEG8gASgCqAEgASgCHDYCCCABIAEoAhw2AqwBCyABKAKsASEAIAFBsAFqJAAgAAsIAEEBQTgQfwszAQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQGRogACAAKAIUIAFqNgIUIAILjwUCBn4BfyABIAEoAgBBD2pBcHEiAUEQajYCACAAAnwgASkDACEDIAEpAwghBiMAQSBrIggkAAJAIAZC////////////AIMiBEKAgICAgIDAgDx9IARCgICAgICAwP/DAH1UBEAgBkIEhiADQjyIhCEEIANC//////////8PgyIDQoGAgICAgICACFoEQCAEQoGAgICAgICAwAB8IQIMAgsgBEKAgICAgICAgEB9IQIgA0KAgICAgICAgAiFQgBSDQEgAiAEQgGDfCECDAELIANQIARCgICAgICAwP//AFQgBEKAgICAgIDA//8AURtFBEAgBkIEhiADQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgBEL///////+//8MAVg0AQgAhAiAEQjCIpyIAQZH3AEkNACADIQIgBkL///////8/g0KAgICAgIDAAIQiBSEHAkAgAEGB9wBrIgFBwABxBEAgAiABQUBqrYYhB0IAIQIMAQsgAUUNACAHIAGtIgSGIAJBwAAgAWutiIQhByACIASGIQILIAggAjcDECAIIAc3AxgCQEGB+AAgAGsiAEHAAHEEQCAFIABBQGqtiCEDQgAhBQwBCyAARQ0AIAVBwAAgAGuthiADIACtIgKIhCEDIAUgAoghBQsgCCADNwMAIAggBTcDCCAIKQMI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ADYCtC0gASgCFEEERgRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQEQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUECNgIcDAILIAFBAzYCHAwBCyABKAIYKAKgLQRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQAQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUEANgIcDAILCyABQQE2AhwLIAEoAhwhAiABQSBqJAAgAgwBCwJ/IAAoAiwoAogBQQNGBEAgACgCLCECIAAoAjQhAyMAQTBrIgEkACABIAI2AiggASADNgIkAkADQAJAIAEoAigoAnRBggJNBEAgASgCKBBcAkAgASgCKCgCdEGCAksNACABKAIkDQAgAUEANgIsDAQLIAEoAigoAnRFDQELIAEoAihBADYCYAJAIAEoAigoAnRBA0kNACABKAIoKAJsRQ0AIAEgASgCKCgCOCABKAIoKAJsakEBazYCGCABIAEoAhgtAAA2AhwgASgCHCECIAEgASgCGCIDQQFqNgIYAkAgAy0AASACRw0AIAEoAhwhAiABIAEoAhgiA0EBajYCGCADLQABIAJHDQAgASgCHCECIAEgASgCGCIDQQFqNgIYIAMtAAEgAkcNACABIAEoAigoAjggASgCKCgCbGpBggJqNgIUA0AgASgCHCECIAEgASgCGCIDQQFqNgIYAn9BACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABog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AS8BEiECIAEgASgCSCIDQQFqNgJIIAMgAjoAAAwCCyABKAIMQRBxBEAgASABLwESNgIIIAEgASgCDEEPcTYCDCABKAIMBEAgASgCKCABKAIMSQRAIAEgASgCUCICQQFqNgJQIAEgASgCLCACLQAAIAEoAih0ajYCLCABIAEoAihBCGo2AigLIAEgASgCCCABKAIsQQEgASgCDHRBAWtxajYCCCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoCyABKAIoQQ9JBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABIAEoAlAiAkEBajYCUCABIAEoAiwgAi0AACABKAIodGo2AiwgASABKAIoQQhqNgIoCyABIAEoAiAgASgCLCABKAIYcUECdGooAQA2ARACQANAIAEgAS0AETYCDCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgAS0AEDYCDCABKAIMQRBxBEAgASABLwESNgIEIAEgASgCDEEPcTYCDCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKAsLIAEgASgCBCABKAIsQQEgASgCDHRBAWtxajYCBCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgASgCSCABKAJEazYCDAJAIAEoAgQgASgCDEsEQCABIAEoAgQgASgCDGs2AgwgASgCDCABKAI4SwRAIAEoAlQoAsQ3BEAgASgCXEHdDDYCGCABKAJUQdH+ADYCBAwKCwsgASABKAIwNgIAAkAgASgCNEUEQCABIAEoAgAgASgCPCABKAIMa2o2AgAgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAkggASgCBGs2AgALDAELAkAgASgCNCABKAIMSQRAIAEgASgCACABKAI8IAEoAjRqIAEoAgxrajYCACABIAEoAgwgASgCNGs2AgwgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAjA2AgAgASgCNCABKAIISQRAIAEgASgCNDYCDCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsMAQsgASABKAIAIAEoAjQgASgCDGtqNgIAIAEoAgwgASgCCEkEQCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsLA0AgASgCCEECSwRAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCCEEDazYCCAwBCwsMAQsgASABKAJIIAEoAgRrNgIAA0AgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIIQQNrNgIIIAEoAghBAksNAAsLIAEoAggEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEoAghBAUsEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAACwsMAgsgASgCDEHAAHFFBEAgASABKAIgIAEvARIgASgCLEEBIAEoAgx0QQFrcWpBAnRqKAEANgEQDAELCyAB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AG5hbgAvZGV2L3VyYW5kb20AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoAGluZgBpbnZhbGlkIHdpbmRvdyBzaXplAFJlYWQtb25seSBhcmNoaXZlAE5vdCBhIHppcCBhcmNoaXZlAFJlc291cmNlIHN0aWxsIGluIHVzZQBNYWxsb2MgZmFpbHVyZQBpbnZhbGlkIGJsb2NrIHR5cGUARmFpbHVyZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUAQ2FuJ3Qgb3BlbiBmaWxlAE5vIHN1Y2ggZmlsZQBQcmVtYXR1cmUgZW5kIG9mIGZpbGUAQ2FuJ3QgcmVtb3ZlIGZpbGUAaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlAGludmFsaWQgZGlzdGFuY2UgY29kZQB1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZABzdHJlYW0gZW5kAENvbXByZXNzZWQgZGF0YSBpbnZhbGlkAE11bHRpLWRpc2sgemlwIGFyY2hpdmVzIG5vdCBzdXBwb3J0ZWQAT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQARW5jcnlwdGlvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABDb21wcmVzc2lvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABFbnRyeSBoYXMgYmVlbiBkZWxldGVkAENvbnRhaW5pbmcgemlwIGFyY2hpdmUgd2FzIGNsb3NlZABDbG9zaW5nIHppcCBhcmNoaXZlIGZhaWxlZABSZW5hbWluZyB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQARW50cnkgaGFzIGJlZW4gY2hhbmdlZABObyBwYXNzd29yZCBwcm92aWRlZABXcm9uZyBwYXNzd29yZCBwcm92aWRlZABVbmtub3duIGVycm9yICVkAHJiAHIrYgByd2EAJXMuWFhYWFhYAE5BTgBJTkYAQUUAMS4yLjExAC9wcm9jL3NlbGYvZmQvAC4AKG51bGwpADogAFBLBgcA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0gAIADIACACyAAgAcgAIAPIACAAKAAgAigAIAEoACADKAAgAKgAIAKoACABqAAgA6gAIABoACACaAAgAWgAIANoACAA6AAgAugAIAHoACAD6AAgABgAIAIYACABGAAgAxgAIACYACACmAAgAZgAIAOYACAAWAAgAlgAIAFYACADWAAgANgAIALYACAB2AAgA9gAIAA4ACACOAAgATgAIAM4ACAAuAAgArgAIAG4ACADuAAgAHgAIAJ4ACABeAAgA3gAIAD4ACAC+AAgAfgAIAP4ACAABAAgAgQAIAEEACADBAAgAIQAIAKEACABhAAgA4QAIABEACACRAAgAUQAIANEACAAxAAgAsQAIAHEACADxAAgACQAIAIkACABJAAgAyQAIACkACACpAAgAaQAIAOkACAAZAAgAmQAIAFkACADZAAgAOQAIALkACAB5AAgA+QAIAAUACACFAAgARQAIAMUACAAlAAgApQAIAGUACADlAAgAFQAIAJUACABVAAgA1QAIADUACAC1AAgAdQAIAPUACAANAAgAjQAIAE0ACADNAAgALQAIAK0ACABtAAgA7QAIAB0ACACdAAgAXQAIAN0ACAA9AAgAvQAIAH0ACAD9AAgAEwAJABMBCQCTAAkAkwEJAFMACQBTAQkA0wAJANMBCQAzAAkAMwEJALMACQCzAQkAcwAJAHMBCQDzAAkA8wEJAAsACQALAQkAiwAJAIsBCQBLAAkASwEJAMsACQDLAQkAKwAJACsBCQCrAAkAqwEJAGsACQBrAQkA6wAJAOsBCQAbAAkAGwEJAJsACQCbAQkAWwAJAFsBCQDbAAkA2wEJADsACQA7AQkAuwAJALsBCQB7AAkAewEJAPsACQD7AQkABwAJAAcBCQCHAAkAhwEJAEcACQBHAQkAxwAJAMcBCQAnAAkAJwEJAKcACQCnAQkAZwAJAGcBCQDnAAkA5wEJABcACQAXAQkAlwAJAJcBCQBXAAkAVwEJANcACQDXAQkANwAJADcBCQC3AAkAtwEJAHcACQB3AQkA9wAJAPcBCQAPAAkADwEJAI8ACQCPAQkATwAJAE8BCQDPAAkAzwEJAC8ACQAvAQkArwAJAK8BCQBvAAkAbwEJAO8ACQDvAQkAHwAJAB8BCQCfAAkAnwEJAF8ACQBfAQkA3wAJAN8BCQA/AAkAPwEJAL8ACQC/AQkAfwAJAH8BCQD/AAkA/wEJAAAABwBAAAcAIAAHAGAABwAQAAcAUAAHADAABwBwAAcACAAHAEgABwAoAAcAaAAHABgABwBYAAcAOAAHAHgABwAEAAcARAAHACQABwBkAAcAFAAHAFQABwA0AAcAdAAHAAMACACDAAgAQwAIAMMACAAjAAgAowAIAGMACADjAAgAAAAFABAABQAIAAUAGAAFAAQABQAUAAUADAAFABwABQACAAUAEgAFAAoABQAaAAUABgAFABYABQAOAAUAHgAFAAEABQARAAUACQAFABkABQAFAAUAFQAFAA0ABQAdAAUAAwAFABMABQALAAUAGwAFAAcABQAXAAUAQbDqAAtNAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAABAAAAAQAAAAEAAAABAAAAAUAAAAFAAAABQAAAAUAQaDrAAtlAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAAAAQAAAAFAAAABQAAAAYAAAAGAAAABwAAAAcAAAAIAAAACAAAAAkAAAAJAAAACgAAAAoAAAALAAAACwAAAAwAAAAMAAAADQAAAA0AQdDsAAsjAgAAAAMAAAAHAAAAAAAAABAREgAIBwkGCgULBAwDDQIOAQ8AQYTtAAtpAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAKAAAADAAAAA4AAAAQAAAAFAAAABgAAAAcAAAAIAAAACgAAAAwAAAAOAAAAEAAAABQAAAAYAAAAHAAAACAAAAAoAAAAMAAAADgAEGE7gALegEAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAAABAACAAQAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAMS4yLjExAEGI7wALbQcAAAAEAAQACAAEAAgAAAAEAAUAEAAIAAgAAAAEAAYAIAAgAAgAAAAEAAQAEAAQAAkAAAAIABAAIAAgAAkAAAAIABAAgACAAAkAAAAIACAAgAAAAQkAAAAgAIAAAgEABAkAAAAgAAIBAgEAEAkAQYDwAAulAgMABAAFAAYABwAIAAkACgALAA0ADwARABMAFwAbAB8AIwArADMAOwBDAFMAYwBzAIMAowDDAOMAAgEAAAAAAAAQABAAEAAQABAAEAAQABAAEQARABEAEQASABIAEgASABMAEwATABMAFAAUABQAFAAVABUAFQAVABAATQDKAAAAAQACAAMABAAFAAcACQANABEAGQAhADEAQQBhAIEAwQABAYEBAQIBAwEEAQYBCAEMARABGAEgATABQAFgAAAAABAAEAAQABAAEQARABIAEgATABMAFAAUABUAFQAWABYAFwAXABgAGAAZABkAGgAaABsAGwAcABwAHQAdAEAAQAAQABEAEgAAAAgABwAJAAYACgAFAAsABAAMAAMADQACAA4AAQAPAEGw8gALwRFgBwAAAAhQAAAIEAAUCHMAEgcfAAAIcAAACDAAAAnAABAHCgAACGAAAAggAAAJoAAACAAAAAiAAAAIQAAACeAAEAcGAAAIWAAACBgAAAmQABMHOwAACHgAAAg4AAAJ0AARBxEAAAhoAAAIKAAACbAAAAgIAAAIiAAACEgAAAnwABAHBAAACFQAAAgUABUI4wATBysAAAh0AAAINAAACcgAEQcNAAAIZAAACCQAAAmoAAAIBAAACIQAAAhEAAAJ6AAQBwgAAAhcAAAIHAAACZgAFAdTAAAIfAAACDwAAAnYABIHFwAACGwAAAgsAAAJuAAACAwAAAiMAAAITAAACfgAEAcDAAAIUgAACBIAFQijABMHIwAACHIAAAgyAAAJxAARBwsAAAhiAAAIIgAACaQAAAgCAAAIggAACEIAAAnkABAHBwAACFoAAAgaAAAJlAAUB0MAAAh6AAAIOgAACdQAEgcTAAAIagAACCoAAAm0AAAICgAACIoAAAhKAAAJ9AAQBwUAAAhWAAAIFgBACAAAEwczAAAIdgAACDYAAAnMABEHDwAACGYAAAgmAAAJrAAACAYAAAiGAAAIRgAACewAEAcJAAAIXgAACB4AAAmcABQHYwAACH4AAAg+AAAJ3AASBxsAAAhuAAAILgAACbwAAAgOAAAIjgAACE4AAAn8AGAHAAAACFEAAAgRABUIgwASBx8AAAhxAAAIMQAACcIAEAcKAAAIYQAACCEAAAmiAAAIAQAACIEAAAhBAAAJ4gAQBwYAAAhZAAAIGQAACZIAEwc7AAAIeQAACDkAAAnSABEHEQAACGkAAAgpAAAJsgAACAkAAAiJAAAISQAACfIAEAcEAAAIVQAACBUAEAgCARMHKwAACHUAAAg1AAAJygARBw0AAAhlAAAIJQAACaoAAAgFAAAIhQAACEUAAAnqABAHCAAACF0AAAgdAAAJmgAUB1MAAAh9AAAIPQAACdoAEgcXAAAIbQAACC0AAAm6AAAIDQAACI0AAAhNAAAJ+gAQBwMAAAhTAAAIEwAVCMMAEwcjAAAIcwAACDMAAAnGABEHCwAACGMAAAgjAAAJpgAACAMAAAiDAAAIQwAACeYAEAcHAAAIWwAACBsAAAmWABQHQwAACHsAAAg7AAAJ1gASBxMAAAhrAAAIKwAACbYAAAgLAAAIiwAACEsAAAn2ABAHBQAACFcAAAgXAEAIAAATBzMAAAh3AAAINwAACc4AEQcPAAAIZwAACCcAAAmuAAAIBwAACIcAAAhHAAAJ7gAQBwkAAAhfAAAIHwAACZ4AFAdjAAAIfwAACD8AAAneABIHGwAACG8AAAgvAAAJvgAACA8AAAiPAAAITwAACf4AYAcAAAAIUAAACBAAFAhzABIHHwAACHAAAAgwAAAJwQAQBwoAAAhgAAAIIAAACaEAAAgAAAAIgAAACEAAAAnhABAHBgAACFgAAAgYAAAJkQATBzsAAAh4AAAIOAAACdEAEQcRAAAIaAAACCgAAAmxAAAICAAACIgAAAhIAAAJ8QAQBwQAAAhUAAAIFAAVCOMAEwcrAAAIdAAACDQAAAnJABEHDQAACGQAAAgkAAAJqQAACAQAAAiEAAAIRAAACekAEAcIAAAIXAAACBwAAAmZABQHUwAACHwAAAg8AAAJ2QASBxcAAAhsAAAILAAACbkAAAgMAAAIjAAACEwAAAn5ABAHAwAACFIAAAgSABUIowATByMAAAhyAAAIMgAACcUAEQcLAAAIYgAACCIAAAmlAAAIAgAACIIAAAhCAAAJ5QAQBwcAAAhaAAAIGgAACZUAFAdDAAAIegAACDoAAAnVABIHEwAACGoAAAgqAAAJtQAACAoAAAiKAAAISgAACfUAEAcFAAAIVgAACBYAQAgAABMHMwAACHYAAAg2AAAJzQARBw8AAAhmAAAIJgAACa0AAAgGAAAIhgAACEYAAAntABAHCQAACF4AAAgeAAAJnQAUB2MAAAh+AAAIPgAACd0AEgcbAAAIbgAACC4AAAm9AAAIDgAACI4AAAhOAAAJ/QBgBwAAAAhRAAAIEQAVCIMAEgcfAAAIcQAACDEAAAnDABAHCgAACGEAAAghAAAJowAACAEAAAiBAAAIQQAACeMAEAcGAAAIWQAACBkAAAmTABMHOwAACHkAAAg5AAAJ0wARBxEAAAhpAAAIKQAACbMAAAgJAAAIiQAACEkAAAnzABAHBAAACFUAAAgVABAIAgETBysAAAh1AAAINQAACcsAEQcNAAAIZQAACCUAAAmrAAAIBQAACIUAAAhFAAAJ6wAQBwgAAAhdAAAIHQAACZsAFAdTAAAIfQAACD0AAAnbABIHFwAACG0AAAgtAAAJuwAACA0AAAiNAAAITQAACfsAEAcDAAAIUwAACBMAFQjDABMHIwAACHMAAAgzAAAJxwARBwsAAAhjAAAIIwAACacAAAgDAAAIgwAACEMAAAnnABAHBwAACFsAAAgbAAAJlwAUB0MAAAh7AAAIOwAACdcAEgcTAAAIawAACCsAAAm3AAAICwAACIsAAAhLAAAJ9wAQBwUAAAhXAAAIFwBACAAAEwczAAAIdwAACDcAAAnPABEHDwAACGcAAAgnAAAJrwAACAcAAAiHAAAIRwAACe8AEAcJAAAIXwAACB8AAAmfABQHYwAACH8AAAg/AAAJ3wASBxsAAAhvAAAILwAACb8AAAgPAAAIjwAACE8AAAn/ABAFAQAXBQEBEwURABsFARARBQUAGQUBBBUFQQAdBQFAEAUDABgFAQIUBSEAHAUBIBIFCQAaBQEIFgWBAEAFAAAQBQIAFwWBARMFGQAbBQEYEQUHABkFAQYVBWEAHQUBYBAFBAAYBQEDFAUxABwFATASBQ0AGgUBDBYFwQBABQAAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAEACQsLAAAJBgsAAAsABhEAAAAREREAQYGEAQshCwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAEG7hAELAQwAQceEAQsVDAAAAAAMAAAAAAkMAAAAAAAMAAAMAEH1hAELAQ4AQYGFAQsVDQAAAAQNAAAAAAkOAAAAAAAOAAAOAEGvhQELARAAQbuFAQseDwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAEHyhQELDhIAAAASEhIAAAAAAAAJAEGjhgELAQsAQa+GAQsVCgAAAAAKAAAAAAkLAAAAAAALAAALAEHdhgELAQwAQemGAQsnDAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGAEG0hwELARkAQduHAQsF//////8AQaCIAQtXGRJEOwI/LEcUPTMwChsGRktFNw9JDo4XA0AdPGkrNh9KLRwBICUpIQgMFRYiLhA4Pgs0MRhkdHV2L0EJfzkRI0MyQomKiwUEJignDSoeNYwHGkiTE5SVAEGAiQELig5JbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgBBkJcBC1JQUFAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAAAEAAAAIAAAAlEsAALRLAEGQmQELAgxQAEHImQELCR8AAADkTAAAAwBB5JkBC4wBLfRRWM+MscBG9rXLKTEDxwRbcDC0Xf0geH+LmthZKVBoSImrp1YDbP+3zYg/1He0K6WjcPG65Kj8QYP92W/hinovLXSWBx8NCV4Ddixw90ClLKdvV0GoqnTfoFhkA0rHxDxTrq9fGAQVseNtKIarDKS/Q/DpUIE5VxZSN/////////////////////8=";
isDataURI(wasmBinaryFile) || (wasmBinaryFile = locateFile(wasmBinaryFile));
function getBinary(file) {
try {
if (file == wasmBinaryFile && wasmBinary)
return new Uint8Array(wasmBinary);
var binary = tryParseAsDataURI(file);
if (binary)
return binary;
if (readBinary)
return readBinary(file);
throw "sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)";
} catch (err2) {
abort(err2);
}
}
function instantiateSync(file, info) {
var instance, module2, binary;
try {
binary = getBinary(file), module2 = new WebAssembly.Module(binary), instance = new WebAssembly.Instance(module2, info);
} catch (e) {
var str = e.toString();
throw err("failed to compile wasm module: " + str), (str.includes("imported Memory") || str.includes("memory import")) && err(
"Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)."
), e;
}
return [instance, module2];
}
function createWasm() {
var info = { a: asmLibraryArg };
function receiveInstance(instance, module2) {
var exports3 = instance.exports;
Module.asm = exports3, wasmMemory = Module.asm.u, updateGlobalBufferAndViews(wasmMemory.buffer), wasmTable = Module.asm.pa, addOnInit(Module.asm.v), removeRunDependency("wasm-instantiate");
}
if (addRunDependency("wasm-instantiate"), Module.instantiateWasm)
try {
var exports2 = Module.instantiateWasm(info, receiveInstance);
return exports2;
} catch (e) {
return err("Module.instantiateWasm callback failed with error: " + e), !1;
}
var result = instantiateSync(wasmBinaryFile, info);
return receiveInstance(result[0]), Module.asm;
}
var tempDouble, tempI64;
function callRuntimeCallbacks(callbacks) {
for (; callbacks.length > 0; ) {
var callback = callbacks.shift();
if (typeof callback == "function") {
callback(Module);
continue;
}
var func = callback.func;
typeof func == "number" ? callback.arg === void 0 ? wasmTable.get(func)() : wasmTable.get(func)(callback.arg) : func(callback.arg === void 0 ? null : callback.arg);
}
}
function _gmtime_r(time, tmPtr) {
var date = new Date(HEAP32[time >> 2] * 1e3);
HEAP32[tmPtr >> 2] = date.getUTCSeconds(), HEAP32[tmPtr + 4 >> 2] = date.getUTCMinutes(), HEAP32[tmPtr + 8 >> 2] = date.getUTCHours(), HEAP32[tmPtr + 12 >> 2] = date.getUTCDate(), HEAP32[tmPtr + 16 >> 2] = date.getUTCMonth(), HEAP32[tmPtr + 20 >> 2] = date.getUTCFullYear() - 1900, HEAP32[tmPtr + 24 >> 2] = date.getUTCDay(), HEAP32[tmPtr + 36 >> 2] = 0, HEAP32[tmPtr + 32 >> 2] = 0;
var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0), yday = (date.getTime() - start) / (1e3 * 60 * 60 * 24) | 0;
return HEAP32[tmPtr + 28 >> 2] = yday, _gmtime_r.GMTString || (_gmtime_r.GMTString = allocateUTF8("GMT")), HEAP32[tmPtr + 40 >> 2] = _gmtime_r.GMTString, tmPtr;
}
function ___gmtime_r(a0, a1) {
return _gmtime_r(a0, a1);
}
var PATH = {
splitPath: function(filename) {
var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
return splitPathRe.exec(filename).slice(1);
},
normalizeArray: function(parts, allowAboveRoot) {
for (var up4 = 0, i2 = parts.length - 1; i2 >= 0; i2--) {
var last = parts[i2];
last === "." ? parts.splice(i2, 1) : last === ".." ? (parts.splice(i2, 1), up4++) : up4 && (parts.splice(i2, 1), up4--);
}
if (allowAboveRoot)
for (; up4; up4--)
parts.unshift("..");
return parts;
},
normalize: function(path5) {
var isAbsolute2 = path5.charAt(0) === "/", trailingSlash = path5.substr(-1) === "/";
return path5 = PATH.normalizeArray(
path5.split("/").filter(function(p) {
return !!p;
}),
!isAbsolute2
).join("/"), !path5 && !isAbsolute2 && (path5 = "."), path5 && trailingSlash && (path5 += "/"), (isAbsolute2 ? "/" : "") + path5;
},
dirname: function(path5) {
var result = PATH.splitPath(path5), root = result[0], dir = result[1];
return !root && !dir ? "." : (dir && (dir = dir.substr(0, dir.length - 1)), root + dir);
},
basename: function(path5) {
if (path5 === "/") return "/";
path5 = PATH.normalize(path5), path5 = path5.replace(/\/$/, "");
var lastSlash = path5.lastIndexOf("/");
return lastSlash === -1 ? path5 : path5.substr(lastSlash + 1);
},
extname: function(path5) {
return PATH.splitPath(path5)[3];
},
join: function() {
var paths = Array.prototype.slice.call(arguments, 0);
return PATH.normalize(paths.join("/"));
},
join2: function(l, r) {
return PATH.normalize(l + "/" + r);
}
};
function getRandomDevice() {
if (typeof crypto == "object" && typeof crypto.getRandomValues == "function") {
var randomBuffer = new Uint8Array(1);
return function() {
return crypto.getRandomValues(randomBuffer), randomBuffer[0];
};
} else if (ENVIRONMENT_IS_NODE)
try {
var crypto_module = __require("crypto");
return function() {
return crypto_module.randomBytes(1)[0];
};
} catch {
}
return function() {
abort("randomDevice");
};
}
var PATH_FS = {
resolve: function() {
for (var resolvedPath = "", resolvedAbsolute = !1, i2 = arguments.length - 1; i2 >= -1 && !resolvedAbsolute; i2--) {
var path5 = i2 >= 0 ? arguments[i2] : FS.cwd();
if (typeof path5 != "string")
throw new TypeError("Arguments to path.resolve must be strings");
if (!path5)
return "";
resolvedPath = path5 + "/" + resolvedPath, resolvedAbsolute = path5.charAt(0) === "/";
}
return resolvedPath = PATH.normalizeArray(
resolvedPath.split("/").filter(function(p) {
return !!p;
}),
!resolvedAbsolute
).join("/"), (resolvedAbsolute ? "/" : "") + resolvedPath || ".";
},
relative: function(from2, to) {
from2 = PATH_FS.resolve(from2).substr(1), to = PATH_FS.resolve(to).substr(1);
function trim(arr) {
for (var start = 0; start < arr.length && arr[start] === ""; start++)
;
for (var end = arr.length - 1; end >= 0 && arr[end] === ""; end--)
;
return start > end ? [] : arr.slice(start, end - start + 1);
}
for (var fromParts = trim(from2.split("/")), toParts = trim(to.split("/")), length = Math.min(fromParts.length, toParts.length), samePartsLength = length, i2 = 0; i2 < length; i2++)
if (fromParts[i2] !== toParts[i2]) {
samePartsLength = i2;
break;
}
for (var outputParts = [], i2 = samePartsLength; i2 < fromParts.length; i2++)
outputParts.push("..");
return outputParts = outputParts.concat(toParts.slice(samePartsLength)), outputParts.join("/");
}
}, TTY = {
ttys: [],
init: function() {
},
shutdown: function() {
},
register: function(dev, ops) {
TTY.ttys[dev] = { input: [], output: [], ops }, FS.registerDevice(dev, TTY.stream_ops);
},
stream_ops: {
open: function(stream) {
var tty3 = TTY.ttys[stream.node.rdev];
if (!tty3)
throw new FS.ErrnoError(43);
stream.tty = tty3, stream.seekable = !1;
},
close: function(stream) {
stream.tty.ops.flush(stream.tty);
},
flush: function(stream) {
stream.tty.ops.flush(stream.tty);
},
read: function(stream, buffer2, offset, length, pos) {
if (!stream.tty || !stream.tty.ops.get_char)
throw new FS.ErrnoError(60);
for (var bytesRead = 0, i2 = 0; i2 < length; i2++) {
var result;
try {
result = stream.tty.ops.get_char(stream.tty);
} catch {
throw new FS.ErrnoError(29);
}
if (result === void 0 && bytesRead === 0)
throw new FS.ErrnoError(6);
if (result == null) break;
bytesRead++, buffer2[offset + i2] = result;
}
return bytesRead && (stream.node.timestamp = Date.now()), bytesRead;
},
write: function(stream, buffer2, offset, length, pos) {
if (!stream.tty || !stream.tty.ops.put_char)
throw new FS.ErrnoError(60);
try {
for (var i2 = 0; i2 < length; i2++)
stream.tty.ops.put_char(stream.tty, buffer2[offset + i2]);
} catch {
throw new FS.ErrnoError(29);
}
return length && (stream.node.timestamp = Date.now()), i2;
}
},
default_tty_ops: {
get_char: function(tty3) {
if (!tty3.input.length) {
var result = null;
if (ENVIRONMENT_IS_NODE) {
var BUFSIZE = 256, buf = Buffer.alloc ? Buffer.alloc(BUFSIZE) : new Buffer(BUFSIZE), bytesRead = 0;
try {
bytesRead = nodeFS.readSync(
process.stdin.fd,
buf,
0,
BUFSIZE,
null
);
} catch (e) {
if (e.toString().includes("EOF")) bytesRead = 0;
else throw e;
}
bytesRead > 0 ? result = buf.slice(0, bytesRead).toString("utf-8") : result = null;
} else typeof window < "u" && typeof window.prompt == "function" ? (result = window.prompt("Input: "), result !== null && (result += `
`)) : typeof readline == "function" && (result = readline(), result !== null && (result += `
`));
if (!result)
return null;
tty3.input = intArrayFromString(result, !0);
}
return tty3.input.shift();
},
put_char: function(tty3, val) {
val === null || val === 10 ? (out(UTF8ArrayToString(tty3.output, 0)), tty3.output = []) : val != 0 && tty3.output.push(val);
},
flush: function(tty3) {
tty3.output && tty3.output.length > 0 && (out(UTF8ArrayToString(tty3.output, 0)), tty3.output = []);
}
},
default_tty1_ops: {
put_char: function(tty3, val) {
val === null || val === 10 ? (err(UTF8ArrayToString(tty3.output, 0)), tty3.output = []) : val != 0 && tty3.output.push(val);
},
flush: function(tty3) {
tty3.output && tty3.output.length > 0 && (err(UTF8ArrayToString(tty3.output, 0)), tty3.output = []);
}
}
};
function mmapAlloc(size) {
for (var alignedSize = alignMemory(size, 65536), ptr = _malloc(alignedSize); size < alignedSize; ) HEAP8[ptr + size++] = 0;
return ptr;
}
var MEMFS = {
ops_table: null,
mount: function(mount) {
return MEMFS.createNode(null, "/", 16895, 0);
},
createNode: function(parent, name, mode, dev) {
if (FS.isBlkdev(mode) || FS.isFIFO(mode))
throw new FS.ErrnoError(63);
MEMFS.ops_table || (MEMFS.ops_table = {
dir: {
node: {
getattr: MEMFS.node_ops.getattr,
setattr: MEMFS.node_ops.setattr,
lookup: MEMFS.node_ops.lookup,
mknod: MEMFS.node_ops.mknod,
rename: MEMFS.node_ops.rename,
unlink: MEMFS.node_ops.unlink,
rmdir: MEMFS.node_ops.rmdir,
readdir: MEMFS.node_ops.readdir,
symlink: MEMFS.node_ops.symlink
},
stream: { llseek: MEMFS.stream_ops.llseek }
},
file: {
node: {
getattr: MEMFS.node_ops.getattr,
setattr: MEMFS.node_ops.setattr
},
stream: {
llseek: MEMFS.stream_ops.llseek,
read: MEMFS.stream_ops.read,
write: MEMFS.stream_ops.write,
allocate: MEMFS.stream_ops.allocate,
mmap: MEMFS.stream_ops.mmap,
msync: MEMFS.stream_ops.msync
}
},
link: {
node: {
getattr: MEMFS.node_ops.getattr,
setattr: MEMFS.node_ops.setattr,
readlink: MEMFS.node_ops.readlink
},
stream: {}
},
chrdev: {
node: {
getattr: MEMFS.node_ops.getattr,
setattr: MEMFS.node_ops.setattr
},
stream: FS.chrdev_stream_ops
}
});
var node = FS.createNode(parent, name, mode, dev);
return FS.isDir(node.mode) ? (node.node_ops = MEMFS.ops_table.dir.node, node.stream_ops = MEMFS.ops_table.dir.stream, node.contents = {}) : FS.isFile(node.mode) ? (node.node_ops = MEMFS.ops_table.file.node, node.stream_ops = MEMFS.ops_table.file.stream, node.usedBytes = 0, node.contents = null) : FS.isLink(node.mode) ? (node.node_ops = MEMFS.ops_table.link.node, node.stream_ops = MEMFS.ops_table.link.stream) : FS.isChrdev(node.mode) && (node.node_ops = MEMFS.ops_table.chrdev.node, node.stream_ops = MEMFS.ops_table.chrdev.stream), node.timestamp = Date.now(), parent && (parent.contents[name] = node, parent.timestamp = node.timestamp), node;
},
getFileDataAsTypedArray: function(node) {
return node.contents ? node.contents.subarray ? node.contents.subarray(0, node.usedBytes) : new Uint8Array(node.contents) : new Uint8Array(0);
},
expandFileStorage: function(node, newCapacity) {
var prevCapacity = node.contents ? node.contents.length : 0;
if (!(prevCapacity >= newCapacity)) {
var CAPACITY_DOUBLING_MAX = 1024 * 1024;
newCapacity = Math.max(
newCapacity,
prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125) >>> 0
), prevCapacity != 0 && (newCapacity = Math.max(newCapacity, 256));
var oldContents = node.contents;
node.contents = new Uint8Array(newCapacity), node.usedBytes > 0 && node.contents.set(oldContents.subarray(0, node.usedBytes), 0);
}
},
resizeFileStorage: function(node, newSize) {
if (node.usedBytes != newSize)
if (newSize == 0)
node.contents = null, node.usedBytes = 0;
else {
var oldContents = node.contents;
node.contents = new Uint8Array(newSize), oldContents && node.contents.set(
oldContents.subarray(0, Math.min(newSize, node.usedBytes))
), node.usedBytes = newSize;
}
},
node_ops: {
getattr: function(node) {
var attr = {};
return attr.dev = FS.isChrdev(node.mode) ? node.id : 1, attr.ino = node.id, attr.mode = node.mode, attr.nlink = 1, attr.uid = 0, attr.gid = 0, attr.rdev = node.rdev, FS.isDir(node.mode) ? attr.size = 4096 : FS.isFile(node.mode) ? attr.size = node.usedBytes : FS.isLink(node.mode) ? attr.size = node.link.length : attr.size = 0, attr.atime = new Date(node.timestamp), attr.mtime = new Date(node.timestamp), attr.ctime = new Date(node.timestamp), attr.blksize = 4096, attr.blocks = Math.ceil(attr.size / attr.blksize), attr;
},
setattr: function(node, attr) {
attr.mode !== void 0 && (node.mode = attr.mode), attr.timestamp !== void 0 && (node.timestamp = attr.timestamp), attr.size !== void 0 && MEMFS.resizeFileStorage(node, attr.size);
},
lookup: function(parent, name) {
throw FS.genericErrors[44];
},
mknod: function(parent, name, mode, dev) {
return MEMFS.createNode(parent, name, mode, dev);
},
rename: function(old_node, new_dir, new_name) {
if (FS.isDir(old_node.mode)) {
var new_node;
try {
new_node = FS.lookupNode(new_dir, new_name);
} catch {
}
if (new_node)
for (var i2 in new_node.contents)
throw new FS.ErrnoError(55);
}
delete old_node.parent.contents[old_node.name], old_node.parent.timestamp = Date.now(), old_node.name = new_name, new_dir.contents[new_name] = old_node, new_dir.timestamp = old_node.parent.timestamp, old_node.parent = new_dir;
},
unlink: function(parent, name) {
delete parent.contents[name], parent.timestamp = Date.now();
},
rmdir: function(parent, name) {
var node = FS.lookupNode(parent, name);
for (var i2 in node.contents)
throw new FS.ErrnoError(55);
delete parent.contents[name], parent.timestamp = Date.now();
},
readdir: function(node) {
var entries = [".", ".."];
for (var key2 in node.contents)
node.contents.hasOwnProperty(key2) && entries.push(key2);
return entries;
},
symlink: function(parent, newname, oldpath) {
var node = MEMFS.createNode(parent, newname, 41471, 0);
return node.link = oldpath, node;
},
readlink: function(node) {
if (!FS.isLink(node.mode))
throw new FS.ErrnoError(28);
return node.link;
}
},
stream_ops: {
read: function(stream, buffer2, offset, length, position) {
var contents = stream.node.contents;
if (position >= stream.node.usedBytes) return 0;
var size = Math.min(stream.node.usedBytes - position, length);
if (size > 8 && contents.subarray)
buffer2.set(contents.subarray(position, position + size), offset);
else
for (var i2 = 0; i2 < size; i2++)
buffer2[offset + i2] = contents[position + i2];
return size;
},
write: function(stream, buffer2, offset, length, position, canOwn) {
if (buffer2.buffer === HEAP8.buffer && (canOwn = !1), !length) return 0;
var node = stream.node;
if (node.timestamp = Date.now(), buffer2.subarray && (!node.contents || node.contents.subarray)) {
if (canOwn)
return node.contents = buffer2.subarray(offset, offset + length), node.usedBytes = length, length;
if (node.usedBytes === 0 && position === 0)
return node.contents = buffer2.slice(offset, offset + length), node.usedBytes = length, length;
if (position + length <= node.usedBytes)
return node.contents.set(
buffer2.subarray(offset, offset + length),
position
), length;
}
if (MEMFS.expandFileStorage(node, position + length), node.contents.subarray && buffer2.subarray)
node.contents.set(
buffer2.subarray(offset, offset + length),
position
);
else
for (var i2 = 0; i2 < length; i2++)
node.contents[position + i2] = buffer2[offset + i2];
return node.usedBytes = Math.max(node.usedBytes, position + length), length;
},
llseek: function(stream, offset, whence) {
var position = offset;
if (whence === 1 ? position += stream.position : whence === 2 && FS.isFile(stream.node.mode) && (position += stream.node.usedBytes), position < 0)
throw new FS.ErrnoError(28);
return position;
},
allocate: function(stream, offset, length) {
MEMFS.expandFileStorage(stream.node, offset + length), stream.node.usedBytes = Math.max(
stream.node.usedBytes,
offset + length
);
},
mmap: function(stream, address, length, position, prot, flags) {
if (address !== 0)
throw new FS.ErrnoError(28);
if (!FS.isFile(stream.node.mode))
throw new FS.ErrnoError(43);
var ptr, allocated, contents = stream.node.contents;
if (!(flags & 2) && contents.buffer === buffer)
allocated = !1, ptr = contents.byteOffset;
else {
if ((position > 0 || position + length < contents.length) && (contents.subarray ? contents = contents.subarray(position, position + length) : contents = Array.prototype.slice.call(
contents,
position,
position + length
)), allocated = !0, ptr = mmapAlloc(length), !ptr)
throw new FS.ErrnoError(48);
HEAP8.set(contents, ptr);
}
return { ptr, allocated };
},
msync: function(stream, buffer2, offset, length, mmapFlags) {
if (!FS.isFile(stream.node.mode))
throw new FS.ErrnoError(43);
if (mmapFlags & 2)
return 0;
var bytesWritten = MEMFS.stream_ops.write(
stream,
buffer2,
0,
length,
offset,
!1
);
return 0;
}
}
}, ERRNO_CODES = {
EPERM: 63,
ENOENT: 44,
ESRCH: 71,
EINTR: 27,
EIO: 29,
ENXIO: 60,
E2BIG: 1,
ENOEXEC: 45,
EBADF: 8,
ECHILD: 12,
EAGAIN: 6,
EWOULDBLOCK: 6,
ENOMEM: 48,
EACCES: 2,
EFAULT: 21,
ENOTBLK: 105,
EBUSY: 10,
EEXIST: 20,
EXDEV: 75,
ENODEV: 43,
ENOTDIR: 54,
EISDIR: 31,
EINVAL: 28,
ENFILE: 41,
EMFILE: 33,
ENOTTY: 59,
ETXTBSY: 74,
EFBIG: 22,
ENOSPC: 51,
ESPIPE: 70,
EROFS: 69,
EMLINK: 34,
EPIPE: 64,
EDOM: 18,
ERANGE: 68,
ENOMSG: 49,
EIDRM: 24,
ECHRNG: 106,
EL2NSYNC: 156,
EL3HLT: 107,
EL3RST: 108,
ELNRNG: 109,
EUNATCH: 110,
ENOCSI: 111,
EL2HLT: 112,
EDEADLK: 16,
ENOLCK: 46,
EBADE: 113,
EBADR: 114,
EXFULL: 115,
ENOANO: 104,
EBADRQC: 103,
EBADSLT: 102,
EDEADLOCK: 16,
EBFONT: 101,
ENOSTR: 100,
ENODATA: 116,
ETIME: 117,
ENOSR: 118,
ENONET: 119,
ENOPKG: 120,
EREMOTE: 121,
ENOLINK: 47,
EADV: 122,
ESRMNT: 123,
ECOMM: 124,
EPROTO: 65,
EMULTIHOP: 36,
EDOTDOT: 125,
EBADMSG: 9,
ENOTUNIQ: 126,
EBADFD: 127,
EREMCHG: 128,
ELIBACC: 129,
ELIBBAD: 130,
ELIBSCN: 131,
ELIBMAX: 132,
ELIBEXEC: 133,
ENOSYS: 52,
ENOTEMPTY: 55,
ENAMETOOLONG: 37,
ELOOP: 32,
EOPNOTSUPP: 138,
EPFNOSUPPORT: 139,
ECONNRESET: 15,
ENOBUFS: 42,
EAFNOSUPPORT: 5,
EPROTOTYPE: 67,
ENOTSOCK: 57,
ENOPROTOOPT: 50,
ESHUTDOWN: 140,
ECONNREFUSED: 14,
EADDRINUSE: 3,
ECONNABORTED: 13,
ENETUNREACH: 40,
ENETDOWN: 38,
ETIMEDOUT: 73,
EHOSTDOWN: 142,
EHOSTUNREACH: 23,
EINPROGRESS: 26,
EALREADY: 7,
EDESTADDRREQ: 17,
EMSGSIZE: 35,
EPROTONOSUPPORT: 66,
ESOCKTNOSUPPORT: 137,
EADDRNOTAVAIL: 4,
ENETRESET: 39,
EISCONN: 30,
ENOTCONN: 53,
ETOOMANYREFS: 141,
EUSERS: 136,
EDQUOT: 19,
ESTALE: 72,
ENOTSUP: 138,
ENOMEDIUM: 148,
EILSEQ: 25,
EOVERFLOW: 61,
ECANCELED: 11,
ENOTRECOVERABLE: 56,
EOWNERDEAD: 62,
ESTRPIPE: 135
}, NODEFS = {
isWindows: !1,
staticInit: function() {
NODEFS.isWindows = !!process.platform.match(/^win/);
var flags = { fs: fs.constants };
flags.fs && (flags = flags.fs), NODEFS.flagsForNodeMap = {
1024: flags.O_APPEND,
64: flags.O_CREAT,
128: flags.O_EXCL,
256: flags.O_NOCTTY,
0: flags.O_RDONLY,
2: flags.O_RDWR,
4096: flags.O_SYNC,
512: flags.O_TRUNC,
1: flags.O_WRONLY
};
},
bufferFrom: function(arrayBuffer) {
return Buffer.alloc ? Buffer.from(arrayBuffer) : new Buffer(arrayBuffer);
},
convertNodeCode: function(e) {
var code = e.code;
return ERRNO_CODES[code];
},
mount: function(mount) {
return NODEFS.createNode(null, "/", NODEFS.getMode(mount.opts.root), 0);
},
createNode: function(parent, name, mode, dev) {
if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode))
throw new FS.ErrnoError(28);
var node = FS.createNode(parent, name, mode);
return node.node_ops = NODEFS.node_ops, node.stream_ops = NODEFS.stream_ops, node;
},
getMode: function(path5) {
var stat;
try {
stat = fs.lstatSync(path5), NODEFS.isWindows && (stat.mode = stat.mode | (stat.mode & 292) >> 2);
} catch (e) {
throw e.code ? new FS.ErrnoError(NODEFS.convertNodeCode(e)) : e;
}
return stat.mode;
},
realPath: function(node) {
for (var parts = []; node.parent !== node; )
parts.push(node.name), node = node.parent;
return parts.push(node.mount.opts.root), parts.reverse(), PATH.join.apply(null, parts);
},
flagsForNode: function(flags) {
flags &= -2097153, flags &= -2049, flags &= -32769, flags &= -524289;
var newFlags = 0;
for (var k in NODEFS.flagsForNodeMap)
flags & k && (newFlags |= NODEFS.flagsForNodeMap[k], flags ^= k);
if (flags)
throw new FS.ErrnoError(28);
return newFlags;
},
node_ops: {
getattr: function(node) {
var path5 = NODEFS.realPath(node), stat;
try {
stat = fs.lstatSync(path5);
} catch (e) {
throw e.code ? new FS.ErrnoError(NODEFS.convertNodeCode(e)) : e;
}
return NODEFS.isWindows && !stat.blksize && (stat.blksize = 4096), NODEFS.isWindows && !stat.blocks && (stat.blocks = (stat.size + stat.blksize - 1) / stat.blksize | 0), {
dev: stat.dev,
ino: stat.ino,
mode: stat.mode,
nlink: stat.nlink,
uid: stat.uid,
gid: stat.gid,
rdev: stat.rdev,
size: stat.size,
atime: stat.atime,
mtime: stat.mtime,
ctime: stat.ctime,
blksize: stat.blksize,
blocks: stat.blocks
};
},
setattr: function(node, attr) {
var path5 = NODEFS.realPath(node);
try {
if (attr.mode !== void 0 && (fs.chmodSync(path5, attr.mode), node.mode = attr.mode), attr.timestamp !== void 0) {
var date = new Date(attr.timestamp);
fs.utimesSync(path5, date, date);
}
attr.size !== void 0 && fs.truncateSync(path5, attr.size);
} catch (e) {
throw e.code ? new FS.ErrnoError(NODEFS.convertNodeCode(e)) : e;
}
},
lookup: function(parent, name) {
var path5 = PATH.join2(NODEFS.realPath(parent), name), mode = NODEFS.getMode(path5);
return NODEFS.createNode(parent, name, mode);
},
mknod: function(parent, name, mode, dev) {
var node = NODEFS.createNode(parent, name, mode, dev), path5 = NODEFS.realPath(node);
try {
FS.isDir(node.mode) ? fs.mkdirSync(path5, node.mode) : fs.writeFileSync(path5, "", { mode: node.mode });
} catch (e) {
throw e.code ? new FS.ErrnoError(NODEFS.convertNodeCode(e)) : e;
}
return node;
},
rename: function(oldNode, newDir, newName) {
var oldPath = NODEFS.realPath(oldNode), newPath = PATH.join2(NODEFS.realPath(newDir), newName);
try {
fs.renameSync(oldPath, newPath);
} catch (e) {
throw e.code ? new FS.ErrnoError(NODEFS.convertNodeCode(e)) : e;
}
oldNode.name = newName;
},
unlink: function(parent, name) {
var path5 = PATH.join2(NODEFS.realPath(parent), name);
try {
fs.unlinkSync(path5);
} catch (e) {
throw e.code ? new FS.ErrnoError(NODEFS.convertNodeCode(e)) : e;
}
},
rmdir: function(parent, name) {
var path5 = PATH.join2(NODEFS.realPath(parent), name);
try {
fs.rmdirSync(path5);
} catch (e) {
throw e.code ? new FS.ErrnoError(NODEFS.convertNodeCode(e)) : e;
}
},
readdir: function(node) {
var path5 = NODEFS.realPath(node);
try {
return fs.readdirSync(path5);
} catch (e) {
throw e.code ? new FS.ErrnoError(NODEFS.convertNodeCode(e)) : e;
}
},
symlink: function(parent, newName, oldPath) {
var newPath = PATH.join2(NODEFS.realPath(parent), newName);
try {
fs.symlinkSync(oldPath, newPath);
} catch (e) {
throw e.code ? new FS.ErrnoError(NODEFS.convertNodeCode(e)) : e;
}
},
readlink: function(node) {
var path5 = NODEFS.realPath(node);
try {
return path5 = fs.readlinkSync(path5), path5 = NODEJS_PATH.relative(
NODEJS_PATH.resolve(node.mount.opts.root),
path5
), path5;
} catch (e) {
throw e.code ? new FS.ErrnoError(NODEFS.convertNodeCode(e)) : e;
}
}
},
stream_ops: {
open: function(stream) {
var path5 = NODEFS.realPath(stream.node);
try {
FS.isFile(stream.node.mode) && (stream.nfd = fs.openSync(path5, NODEFS.flagsForNode(stream.flags)));
} catch (e) {
throw e.code ? new FS.ErrnoError(NODEFS.convertNodeCode(e)) : e;
}
},
close: function(stream) {
try {
FS.isFile(stream.node.mode) && stream.nfd && fs.closeSync(stream.nfd);
} catch (e) {
throw e.code ? new FS.ErrnoError(NODEFS.convertNodeCode(e)) : e;
}
},
read: function(stream, buffer2, offset, length, position) {
if (length === 0) return 0;
try {
return fs.readSync(
stream.nfd,
NODEFS.bufferFrom(buffer2.buffer),
offset,
length,
position
);
} catch (e) {
throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
}
},
write: function(stream, buffer2, offset, length, position) {
try {
return fs.writeSync(
stream.nfd,
NODEFS.bufferFrom(buffer2.buffer),
offset,
length,
position
);
} catch (e) {
throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
}
},
llseek: function(stream, offset, whence) {
var position = offset;
if (whence === 1)
position += stream.position;
else if (whence === 2 && FS.isFile(stream.node.mode))
try {
var stat = fs.fstatSync(stream.nfd);
position += stat.size;
} catch (e) {
throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
}
if (position < 0)
throw new FS.ErrnoError(28);
return position;
},
mmap: function(stream, address, length, position, prot, flags) {
if (address !== 0)
throw new FS.ErrnoError(28);
if (!FS.isFile(stream.node.mode))
throw new FS.ErrnoError(43);
var ptr = mmapAlloc(length);
return NODEFS.stream_ops.read(stream, HEAP8, ptr, length, position), { ptr, allocated: !0 };
},
msync: function(stream, buffer2, offset, length, mmapFlags) {
if (!FS.isFile(stream.node.mode))
throw new FS.ErrnoError(43);
if (mmapFlags & 2)
return 0;
var bytesWritten = NODEFS.stream_ops.write(
stream,
buffer2,
0,
length,
offset,
!1
);
return 0;
}
}
}, NODERAWFS = {
lookupPath: function(path5) {
return { path: path5, node: { mode: NODEFS.getMode(path5) } };
},
createStandardStreams: function() {
FS.streams[0] = {
fd: 0,
nfd: 0,
position: 0,
path: "",
flags: 0,
tty: !0,
seekable: !1
};
for (var i2 = 1; i2 < 3; i2++)
FS.streams[i2] = {
fd: i2,
nfd: i2,
position: 0,
path: "",
flags: 577,
tty: !0,
seekable: !1
};
},
cwd: function() {
return process.cwd();
},
chdir: function() {
process.chdir.apply(void 0, arguments);
},
mknod: function(path5, mode) {
FS.isDir(path5) ? fs.mkdirSync(path5, mode) : fs.writeFileSync(path5, "", { mode });
},
mkdir: function() {
fs.mkdirSync.apply(void 0, arguments);
},
symlink: function() {
fs.symlinkSync.apply(void 0, arguments);
},
rename: function() {
fs.renameSync.apply(void 0, arguments);
},
rmdir: function() {
fs.rmdirSync.apply(void 0, arguments);
},
readdir: function() {
fs.readdirSync.apply(void 0, arguments);
},
unlink: function() {
fs.unlinkSync.apply(void 0, arguments);
},
readlink: function() {
return fs.readlinkSync.apply(void 0, arguments);
},
stat: function() {
return fs.statSync.apply(void 0, arguments);
},
lstat: function() {
return fs.lstatSync.apply(void 0, arguments);
},
chmod: function() {
fs.chmodSync.apply(void 0, arguments);
},
fchmod: function() {
fs.fchmodSync.apply(void 0, arguments);
},
chown: function() {
fs.chownSync.apply(void 0, arguments);
},
fchown: function() {
fs.fchownSync.apply(void 0, arguments);
},
truncate: function() {
fs.truncateSync.apply(void 0, arguments);
},
ftruncate: function(fd, len) {
if (len < 0)
throw new FS.ErrnoError(28);
fs.ftruncateSync.apply(void 0, arguments);
},
utime: function() {
fs.utimesSync.apply(void 0, arguments);
},
open: function(path5, flags, mode, suggestFD) {
typeof flags == "string" && (flags = VFS.modeStringToFlags(flags));
var nfd = fs.openSync(path5, NODEFS.flagsForNode(flags), mode), fd = suggestFD ?? FS.nextfd(nfd), stream = {
fd,
nfd,
position: 0,
path: path5,
flags,
seekable: !0
};
return FS.streams[fd] = stream, stream;
},
close: function(stream) {
stream.stream_ops || fs.closeSync(stream.nfd), FS.closeStream(stream.fd);
},
llseek: function(stream, offset, whence) {
if (stream.stream_ops)
return VFS.llseek(stream, offset, whence);
var position = offset;
if (whence === 1)
position += stream.position;
else if (whence === 2)
position += fs.fstatSync(stream.nfd).size;
else if (whence !== 0)
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
if (position < 0)
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
return stream.position = position, position;
},
read: function(stream, buffer2, offset, length, position) {
if (stream.stream_ops)
return VFS.read(stream, buffer2, offset, length, position);
var seeking = typeof position < "u";
!seeking && stream.seekable && (position = stream.position);
var bytesRead = fs.readSync(
stream.nfd,
NODEFS.bufferFrom(buffer2.buffer),
offset,
length,
position
);
return seeking || (stream.position += bytesRead), bytesRead;
},
write: function(stream, buffer2, offset, length, position) {
if (stream.stream_ops)
return VFS.write(stream, buffer2, offset, length, position);
stream.flags & 1024 && FS.llseek(stream, 0, 2);
var seeking = typeof position < "u";
!seeking && stream.seekable && (position = stream.position);
var bytesWritten = fs.writeSync(
stream.nfd,
NODEFS.bufferFrom(buffer2.buffer),
offset,
length,
position
);
return seeking || (stream.position += bytesWritten), bytesWritten;
},
allocate: function() {
throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);
},
mmap: function(stream, address, length, position, prot, flags) {
if (stream.stream_ops)
return VFS.mmap(stream, address, length, position, prot, flags);
if (address !== 0)
throw new FS.ErrnoError(28);
var ptr = mmapAlloc(length);
return FS.read(stream, HEAP8, ptr, length, position), { ptr, allocated: !0 };
},
msync: function(stream, buffer2, offset, length, mmapFlags) {
return stream.stream_ops ? VFS.msync(stream, buffer2, offset, length, mmapFlags) : (mmapFlags & 2 || FS.write(stream, buffer2, 0, length, offset), 0);
},
munmap: function() {
return 0;
},
ioctl: function() {
throw new FS.ErrnoError(ERRNO_CODES.ENOTTY);
}
}, FS = {
root: null,
mounts: [],
devices: {},
streams: [],
nextInode: 1,
nameTable: null,
currentPath: "/",
initialized: !1,
ignorePermissions: !0,
trackingDelegate: {},
tracking: { openFlags: { READ: 1, WRITE: 2 } },
ErrnoError: null,
genericErrors: {},
filesystems: null,
syncFSRequests: 0,
lookupPath: function(path5, opts) {
if (path5 = PATH_FS.resolve(FS.cwd(), path5), opts = opts || {}, !path5) return { path: "", node: null };
var defaults = { follow_mount: !0, recurse_count: 0 };
for (var key2 in defaults)
opts[key2] === void 0 && (opts[key2] = defaults[key2]);
if (opts.recurse_count > 8)
throw new FS.ErrnoError(32);
for (var parts = PATH.normalizeArray(
path5.split("/").filter(function(p) {
return !!p;
}),
!1
), current = FS.root, current_path = "/", i2 = 0; i2 < parts.length; i2++) {
var islast = i2 === parts.length - 1;
if (islast && opts.parent)
break;
if (current = FS.lookupNode(current, parts[i2]), current_path = PATH.join2(current_path, parts[i2]), FS.isMountpoint(current) && (!islast || islast && opts.follow_mount) && (current = current.mounted.root), !islast || opts.follow)
for (var count2 = 0; FS.isLink(current.mode); ) {
var link = FS.readlink(current_path);
current_path = PATH_FS.resolve(PATH.dirname(current_path), link);
var lookup = FS.lookupPath(current_path, {
recurse_count: opts.recurse_count
});
if (current = lookup.node, count2++ > 40)
throw new FS.ErrnoError(32);
}
}
return { path: current_path, node: current };
},
getPath: function(node) {
for (var path5; ; ) {
if (FS.isRoot(node)) {
var mount = node.mount.mountpoint;
return path5 ? mount[mount.length - 1] !== "/" ? mount + "/" + path5 : mount + path5 : mount;
}
path5 = path5 ? node.name + "/" + path5 : node.name, node = node.parent;
}
},
hashName: function(parentid, name) {
for (var hash = 0, i2 = 0; i2 < name.length; i2++)
hash = (hash << 5) - hash + name.charCodeAt(i2) | 0;
return (parentid + hash >>> 0) % FS.nameTable.length;
},
hashAddNode: function(node) {
var hash = FS.hashName(node.parent.id, node.name);
node.name_next = FS.nameTable[hash], FS.nameTable[hash] = node;
},
hashRemoveNode: function(node) {
var hash = FS.hashName(node.parent.id, node.name);
if (FS.nameTable[hash] === node)
FS.nameTable[hash] = node.name_next;
else
for (var current = FS.nameTable[hash]; current; ) {
if (current.name_next === node) {
current.name_next = node.name_next;
break;
}
current = current.name_next;
}
},
lookupNode: function(parent, name) {
var errCode = FS.mayLookup(parent);
if (errCode)
throw new FS.ErrnoError(errCode, parent);
for (var hash = FS.hashName(parent.id, name), node = FS.nameTable[hash]; node; node = node.name_next) {
var nodeName = node.name;
if (node.parent.id === parent.id && nodeName === name)
return node;
}
return FS.lookup(parent, name);
},
createNode: function(parent, name, mode, rdev) {
var node = new FS.FSNode(parent, name, mode, rdev);
return FS.hashAddNode(node), node;
},
destroyNode: function(node) {
FS.hashRemoveNode(node);
},
isRoot: function(node) {
return node === node.parent;
},
isMountpoint: function(node) {
return !!node.mounted;
},
isFile: function(mode) {
return (mode & 61440) === 32768;
},
isDir: function(mode) {
return (mode & 61440) === 16384;
},
isLink: function(mode) {
return (mode & 61440) === 40960;
},
isChrdev: function(mode) {
return (mode & 61440) === 8192;
},
isBlkdev: function(mode) {
return (mode & 61440) === 24576;
},
isFIFO: function(mode) {
return (mode & 61440) === 4096;
},
isSocket: function(mode) {
return (mode & 49152) === 49152;
},
flagModes: { r: 0, "r+": 2, w: 577, "w+": 578, a: 1089, "a+": 1090 },
modeStringToFlags: function(str) {
var flags = FS.flagModes[str];
if (typeof flags > "u")
throw new Error("Unknown file open mode: " + str);
return flags;
},
flagsToPermissionString: function(flag) {
var perms = ["r", "w", "rw"][flag & 3];
return flag & 512 && (perms += "w"), perms;
},
nodePermissions: function(node, perms) {
return FS.ignorePermissions ? 0 : perms.includes("r") && !(node.mode & 292) || perms.includes("w") && !(node.mode & 146) || perms.includes("x") && !(node.mode & 73) ? 2 : 0;
},
mayLookup: function(dir) {
var errCode = FS.nodePermissions(dir, "x");
return errCode || (dir.node_ops.lookup ? 0 : 2);
},
mayCreate: function(dir, name) {
try {
var node = FS.lookupNode(dir, name);
return 20;
} catch {
}
return FS.nodePermissions(dir, "wx");
},
mayDelete: function(dir, name, isdir) {
var node;
try {
node = FS.lookupNode(dir, name);
} catch (e) {
return e.errno;
}
var errCode = FS.nodePermissions(dir, "wx");
if (errCode)
return errCode;
if (isdir) {
if (!FS.isDir(node.mode))
return 54;
if (FS.isRoot(node) || FS.getPath(node) === FS.cwd())
return 10;
} else if (FS.isDir(node.mode))
return 31;
return 0;
},
mayOpen: function(node, flags) {
return node ? FS.isLink(node.mode) ? 32 : FS.isDir(node.mode) && (FS.flagsToPermissionString(flags) !== "r" || flags & 512) ? 31 : FS.nodePermissions(node, FS.flagsToPermissionString(flags)) : 44;
},
MAX_OPEN_FDS: 4096,
nextfd: function(fd_start, fd_end) {
fd_start = fd_start || 0, fd_end = fd_end || FS.MAX_OPEN_FDS;
for (var fd = fd_start; fd <= fd_end; fd++)
if (!FS.streams[fd])
return fd;
throw new FS.ErrnoError(33);
},
getStream: function(fd) {
return FS.streams[fd];
},
createStream: function(stream, fd_start, fd_end) {
FS.FSStream || (FS.FSStream = function() {
}, FS.FSStream.prototype = {
object: {
get: function() {
return this.node;
},
set: function(val) {
this.node = val;
}
},
isRead: {
get: function() {
return (this.flags & 2097155) !== 1;
}
},
isWrite: {
get: function() {
return (this.flags & 2097155) !== 0;
}
},
isAppend: {
get: function() {
return this.flags & 1024;
}
}
});
var newStream = new FS.FSStream();
for (var p in stream)
newStream[p] = stream[p];
stream = newStream;
var fd = FS.nextfd(fd_start, fd_end);
return stream.fd = fd, FS.streams[fd] = stream, stream;
},
closeStream: function(fd) {
FS.streams[fd] = null;
},
chrdev_stream_ops: {
open: function(stream) {
var device = FS.getDevice(stream.node.rdev);
stream.stream_ops = device.stream_ops, stream.stream_ops.open && stream.stream_ops.open(stream);
},
llseek: function() {
throw new FS.ErrnoError(70);
}
},
major: function(dev) {
return dev >> 8;
},
minor: function(dev) {
return dev & 255;
},
makedev: function(ma, mi) {
return ma << 8 | mi;
},
registerDevice: function(dev, ops) {
FS.devices[dev] = { stream_ops: ops };
},
getDevice: function(dev) {
return FS.devices[dev];
},
getMounts: function(mount) {
for (var mounts = [], check = [mount]; check.length; ) {
var m = check.pop();
mounts.push(m), check.push.apply(check, m.mounts);
}
return mounts;
},
syncfs: function(populate, callback) {
typeof populate == "function" && (callback = populate, populate = !1), FS.syncFSRequests++, FS.syncFSRequests > 1 && err(
"warning: " + FS.syncFSRequests + " FS.syncfs operations in flight at once, probably just doing extra work"
);
var mounts = FS.getMounts(FS.root.mount), completed = 0;
function doCallback(errCode) {
return FS.syncFSRequests--, callback(errCode);
}
function done(errCode) {
if (errCode)
return done.errored ? void 0 : (done.errored = !0, doCallback(errCode));
++completed >= mounts.length && doCallback(null);
}
mounts.forEach(function(mount) {
if (!mount.type.syncfs)
return done(null);
mount.type.syncfs(mount, populate, done);
});
},
mount: function(type, opts, mountpoint) {
var root = mountpoint === "/", pseudo = !mountpoint, node;
if (root && FS.root)
throw new FS.ErrnoError(10);
if (!root && !pseudo) {
var lookup = FS.lookupPath(mountpoint, { follow_mount: !1 });
if (mountpoint = lookup.path, node = lookup.node, FS.isMountpoint(node))
throw new FS.ErrnoError(10);
if (!FS.isDir(node.mode))
throw new FS.ErrnoError(54);
}
var mount = {
type,
opts,
mountpoint,
mounts: []
}, mountRoot = type.mount(mount);
return mountRoot.mount = mount, mount.root = mountRoot, root ? FS.root = mountRoot : node && (node.mounted = mount, node.mount && node.mount.mounts.push(mount)), mountRoot;
},
unmount: function(mountpoint) {
var lookup = FS.lookupPath(mountpoint, { follow_mount: !1 });
if (!FS.isMountpoint(lookup.node))
throw new FS.ErrnoError(28);
var node = lookup.node, mount = node.mounted, mounts = FS.getMounts(mount);
Object.keys(FS.nameTable).forEach(function(hash) {
for (var current = FS.nameTable[hash]; current; ) {
var next = current.name_next;
mounts.includes(current.mount) && FS.destroyNode(current), current = next;
}
}), node.mounted = null;
var idx = node.mount.mounts.indexOf(mount);
node.mount.mounts.splice(idx, 1);
},
lookup: function(parent, name) {
return parent.node_ops.lookup(parent, name);
},
mknod: function(path5, mode, dev) {
var lookup = FS.lookupPath(path5, { parent: !0 }), parent = lookup.node, name = PATH.basename(path5);
if (!name || name === "." || name === "..")
throw new FS.ErrnoError(28);
var errCode = FS.mayCreate(parent, name);
if (errCode)
throw new FS.ErrnoError(errCode);
if (!parent.node_ops.mknod)
throw new FS.ErrnoError(63);
return parent.node_ops.mknod(parent, name, mode, dev);
},
create: function(path5, mode) {
return mode = mode !== void 0 ? mode : 438, mode &= 4095, mode |= 32768, FS.mknod(path5, mode, 0);
},
mkdir: function(path5, mode) {
return mode = mode !== void 0 ? mode : 511, mode &= 1023, mode |= 16384, FS.mknod(path5, mode, 0);
},
mkdirTree: function(path5, mode) {
for (var dirs = path5.split("/"), d = "", i2 = 0; i2 < dirs.length; ++i2)
if (dirs[i2]) {
d += "/" + dirs[i2];
try {
FS.mkdir(d, mode);
} catch (e) {
if (e.errno != 20) throw e;
}
}
},
mkdev: function(path5, mode, dev) {
return typeof dev > "u" && (dev = mode, mode = 438), mode |= 8192, FS.mknod(path5, mode, dev);
},
symlink: function(oldpath, newpath) {
if (!PATH_FS.resolve(oldpath))
throw new FS.ErrnoError(44);
var lookup = FS.lookupPath(newpath, { parent: !0 }), parent = lookup.node;
if (!parent)
throw new FS.ErrnoError(44);
var newname = PATH.basename(newpath), errCode = FS.mayCreate(parent, newname);
if (errCode)
throw new FS.ErrnoError(errCode);
if (!parent.node_ops.symlink)
throw new FS.ErrnoError(63);
return parent.node_ops.symlink(parent, newname, oldpath);
},
rename: function(old_path, new_path) {
var old_dirname = PATH.dirname(old_path), new_dirname = PATH.dirname(new_path), old_name = PATH.basename(old_path), new_name = PATH.basename(new_path), lookup, old_dir, new_dir;
if (lookup = FS.lookupPath(old_path, { parent: !0 }), old_dir = lookup.node, lookup = FS.lookupPath(new_path, { parent: !0 }), new_dir = lookup.node, !old_dir || !new_dir) throw new FS.ErrnoError(44);
if (old_dir.mount !== new_dir.mount)
throw new FS.ErrnoError(75);
var old_node = FS.lookupNode(old_dir, old_name), relative6 = PATH_FS.relative(old_path, new_dirname);
if (relative6.charAt(0) !== ".")
throw new FS.ErrnoError(28);
if (relative6 = PATH_FS.relative(new_path, old_dirname), relative6.charAt(0) !== ".")
throw new FS.ErrnoError(55);
var new_node;
try {
new_node = FS.lookupNode(new_dir, new_name);
} catch {
}
if (old_node !== new_node) {
var isdir = FS.isDir(old_node.mode), errCode = FS.mayDelete(old_dir, old_name, isdir);
if (errCode)
throw new FS.ErrnoError(errCode);
if (errCode = new_node ? FS.mayDelete(new_dir, new_name, isdir) : FS.mayCreate(new_dir, new_name), errCode)
throw new FS.ErrnoError(errCode);
if (!old_dir.node_ops.rename)
throw new FS.ErrnoError(63);
if (FS.isMountpoint(old_node) || new_node && FS.isMountpoint(new_node))
throw new FS.ErrnoError(10);
if (new_dir !== old_dir && (errCode = FS.nodePermissions(old_dir, "w"), errCode))
throw new FS.ErrnoError(errCode);
try {
FS.trackingDelegate.willMovePath && FS.trackingDelegate.willMovePath(old_path, new_path);
} catch (e) {
err(
"FS.trackingDelegate['willMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message
);
}
FS.hashRemoveNode(old_node);
try {
old_dir.node_ops.rename(old_node, new_dir, new_name);
} catch (e) {
throw e;
} finally {
FS.hashAddNode(old_node);
}
try {
FS.trackingDelegate.onMovePath && FS.trackingDelegate.onMovePath(old_path, new_path);
} catch (e) {
err(
"FS.trackingDelegate['onMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message
);
}
}
},
rmdir: function(path5) {
var lookup = FS.lookupPath(path5, { parent: !0 }), parent = lookup.node, name = PATH.basename(path5), node = FS.lookupNode(parent, name), errCode = FS.mayDelete(parent, name, !0);
if (errCode)
throw new FS.ErrnoError(errCode);
if (!parent.node_ops.rmdir)
throw new FS.ErrnoError(63);
if (FS.isMountpoint(node))
throw new FS.ErrnoError(10);
try {
FS.trackingDelegate.willDeletePath && FS.trackingDelegate.willDeletePath(path5);
} catch (e) {
err(
"FS.trackingDelegate['willDeletePath']('" + path5 + "') threw an exception: " + e.message
);
}
parent.node_ops.rmdir(parent, name), FS.destroyNode(node);
try {
FS.trackingDelegate.onDeletePath && FS.trackingDelegate.onDeletePath(path5);
} catch (e) {
err(
"FS.trackingDelegate['onDeletePath']('" + path5 + "') threw an exception: " + e.message
);
}
},
readdir: function(path5) {
var lookup = FS.lookupPath(path5, { follow: !0 }), node = lookup.node;
if (!node.node_ops.readdir)
throw new FS.ErrnoError(54);
return node.node_ops.readdir(node);
},
unlink: function(path5) {
var lookup = FS.lookupPath(path5, { parent: !0 }), parent = lookup.node, name = PATH.basename(path5), node = FS.lookupNode(parent, name), errCode = FS.mayDelete(parent, name, !1);
if (errCode)
throw new FS.ErrnoError(errCode);
if (!parent.node_ops.unlink)
throw new FS.ErrnoError(63);
if (FS.isMountpoint(node))
throw new FS.ErrnoError(10);
try {
FS.trackingDelegate.willDeletePath && FS.trackingDelegate.willDeletePath(path5);
} catch (e) {
err(
"FS.trackingDelegate['willDeletePath']('" + path5 + "') threw an exception: " + e.message
);
}
parent.node_ops.unlink(parent, name), FS.destroyNode(node);
try {
FS.trackingDelegate.onDeletePath && FS.trackingDelegate.onDeletePath(path5);
} catch (e) {
err(
"FS.trackingDelegate['onDeletePath']('" + path5 + "') threw an exception: " + e.message
);
}
},
readlink: function(path5) {
var lookup = FS.lookupPath(path5), link = lookup.node;
if (!link)
throw new FS.ErrnoError(44);
if (!link.node_ops.readlink)
throw new FS.ErrnoError(28);
return PATH_FS.resolve(
FS.getPath(link.parent),
link.node_ops.readlink(link)
);
},
stat: function(path5, dontFollow) {
var lookup = FS.lookupPath(path5, { follow: !dontFollow }), node = lookup.node;
if (!node)
throw new FS.ErrnoError(44);
if (!node.node_ops.getattr)
throw new FS.ErrnoError(63);
return node.node_ops.getattr(node);
},
lstat: function(path5) {
return FS.stat(path5, !0);
},
chmod: function(path5, mode, dontFollow) {
var node;
if (typeof path5 == "string") {
var lookup = FS.lookupPath(path5, { follow: !dontFollow });
node = lookup.node;
} else
node = path5;
if (!node.node_ops.setattr)
throw new FS.ErrnoError(63);
node.node_ops.setattr(node, {
mode: mode & 4095 | node.mode & -4096,
timestamp: Date.now()
});
},
lchmod: function(path5, mode) {
FS.chmod(path5, mode, !0);
},
fchmod: function(fd, mode) {
var stream = FS.getStream(fd);
if (!stream)
throw new FS.ErrnoError(8);
FS.chmod(stream.node, mode);
},
chown: function(path5, uid, gid, dontFollow) {
var node;
if (typeof path5 == "string") {
var lookup = FS.lookupPath(path5, { follow: !dontFollow });
node = lookup.node;
} else
node = path5;
if (!node.node_ops.setattr)
throw new FS.ErrnoError(63);
node.node_ops.setattr(node, { timestamp: Date.now() });
},
lchown: function(path5, uid, gid) {
FS.chown(path5, uid, gid, !0);
},
fchown: function(fd, uid, gid) {
var stream = FS.getStream(fd);
if (!stream)
throw new FS.ErrnoError(8);
FS.chown(stream.node, uid, gid);
},
truncate: function(path5, len) {
if (len < 0)
throw new FS.ErrnoError(28);
var node;
if (typeof path5 == "string") {
var lookup = FS.lookupPath(path5, { follow: !0 });
node = lookup.node;
} else
node = path5;
if (!node.node_ops.setattr)
throw new FS.ErrnoError(63);
if (FS.isDir(node.mode))
throw new FS.ErrnoError(31);
if (!FS.isFile(node.mode))
throw new FS.ErrnoError(28);
var errCode = FS.nodePermissions(node, "w");
if (errCode)
throw new FS.ErrnoError(errCode);
node.node_ops.setattr(node, { size: len, timestamp: Date.now() });
},
ftruncate: function(fd, len) {
var stream = FS.getStream(fd);
if (!stream)
throw new FS.ErrnoError(8);
if ((stream.flags & 2097155) === 0)
throw new FS.ErrnoError(28);
FS.truncate(stream.node, len);
},
utime: function(path5, atime, mtime) {
var lookup = FS.lookupPath(path5, { follow: !0 }), node = lookup.node;
node.node_ops.setattr(node, { timestamp: Math.max(atime, mtime) });
},
open: function(path5, flags, mode, fd_start, fd_end) {
if (path5 === "")
throw new FS.ErrnoError(44);
flags = typeof flags == "string" ? FS.modeStringToFlags(flags) : flags, mode = typeof mode > "u" ? 438 : mode, flags & 64 ? mode = mode & 4095 | 32768 : mode = 0;
var node;
if (typeof path5 == "object")
node = path5;
else {
path5 = PATH.normalize(path5);
try {
var lookup = FS.lookupPath(path5, { follow: !(flags & 131072) });
node = lookup.node;
} catch {
}
}
var created = !1;
if (flags & 64)
if (node) {
if (flags & 128)
throw new FS.ErrnoError(20);
} else
node = FS.mknod(path5, mode, 0), created = !0;
if (!node)
throw new FS.ErrnoError(44);
if (FS.isChrdev(node.mode) && (flags &= -513), flags & 65536 && !FS.isDir(node.mode))
throw new FS.ErrnoError(54);
if (!created) {
var errCode = FS.mayOpen(node, flags);
if (errCode)
throw new FS.ErrnoError(errCode);
}
flags & 512 && FS.truncate(node, 0), flags &= -131713;
var stream = FS.createStream(
{
node,
path: FS.getPath(node),
flags,
seekable: !0,
position: 0,
stream_ops: node.stream_ops,
ungotten: [],
error: !1
},
fd_start,
fd_end
);
stream.stream_ops.open && stream.stream_ops.open(stream), Module.logReadFiles && !(flags & 1) && (FS.readFiles || (FS.readFiles = {}), path5 in FS.readFiles || (FS.readFiles[path5] = 1, err("FS.trackingDelegate error on read file: " + path5)));
try {
if (FS.trackingDelegate.onOpenFile) {
var trackingFlags = 0;
(flags & 2097155) !== 1 && (trackingFlags |= FS.tracking.openFlags.READ), (flags & 2097155) !== 0 && (trackingFlags |= FS.tracking.openFlags.WRITE), FS.trackingDelegate.onOpenFile(path5, trackingFlags);
}
} catch (e) {
err(
"FS.trackingDelegate['onOpenFile']('" + path5 + "', flags) threw an exception: " + e.message
);
}
return stream;
},
close: function(stream) {
if (FS.isClosed(stream))
throw new FS.ErrnoError(8);
stream.getdents && (stream.getdents = null);
try {
stream.stream_ops.close && stream.stream_ops.close(stream);
} catch (e) {
throw e;
} finally {
FS.closeStream(stream.fd);
}
stream.fd = null;
},
isClosed: function(stream) {
return stream.fd === null;
},
llseek: function(stream, offset, whence) {
if (FS.isClosed(stream))
throw new FS.ErrnoError(8);
if (!stream.seekable || !stream.stream_ops.llseek)
throw new FS.ErrnoError(70);
if (whence != 0 && whence != 1 && whence != 2)
throw new FS.ErrnoError(28);
return stream.position = stream.stream_ops.llseek(stream, offset, whence), stream.ungotten = [], stream.position;
},
read: function(stream, buffer2, offset, length, position) {
if (length < 0 || position < 0)
throw new FS.ErrnoError(28);
if (FS.isClosed(stream))
throw new FS.ErrnoError(8);
if ((stream.flags & 2097155) === 1)
throw new FS.ErrnoError(8);
if (FS.isDir(stream.node.mode))
throw new FS.ErrnoError(31);
if (!stream.stream_ops.read)
throw new FS.ErrnoError(28);
var seeking = typeof position < "u";
if (!seeking)
position = stream.position;
else if (!stream.seekable)
throw new FS.ErrnoError(70);
var bytesRead = stream.stream_ops.read(
stream,
buffer2,
offset,
length,
position
);
return seeking || (stream.position += bytesRead), bytesRead;
},
write: function(stream, buffer2, offset, length, position, canOwn) {
if (length < 0 || position < 0)
throw new FS.ErrnoError(28);
if (FS.isClosed(stream))
throw new FS.ErrnoError(8);
if ((stream.flags & 2097155) === 0)
throw new FS.ErrnoError(8);
if (FS.isDir(stream.node.mode))
throw new FS.ErrnoError(31);
if (!stream.stream_ops.write)
throw new FS.ErrnoError(28);
stream.seekable && stream.flags & 1024 && FS.llseek(stream, 0, 2);
var seeking = typeof position < "u";
if (!seeking)
position = stream.position;
else if (!stream.seekable)
throw new FS.ErrnoError(70);
var bytesWritten = stream.stream_ops.write(
stream,
buffer2,
offset,
length,
position,
canOwn
);
seeking || (stream.position += bytesWritten);
try {
stream.path && FS.trackingDelegate.onWriteToFile && FS.trackingDelegate.onWriteToFile(stream.path);
} catch (e) {
err(
"FS.trackingDelegate['onWriteToFile']('" + stream.path + "') threw an exception: " + e.message
);
}
return bytesWritten;
},
allocate: function(stream, offset, length) {
if (FS.isClosed(stream))
throw new FS.ErrnoError(8);
if (offset < 0 || length <= 0)
throw new FS.ErrnoError(28);
if ((stream.flags & 2097155) === 0)
throw new FS.ErrnoError(8);
if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode))
throw new FS.ErrnoError(43);
if (!stream.stream_ops.allocate)
throw new FS.ErrnoError(138);
stream.stream_ops.allocate(stream, offset, length);
},
mmap: function(stream, address, length, position, prot, flags) {
if ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2)
throw new FS.ErrnoError(2);
if ((stream.flags & 2097155) === 1)
throw new FS.ErrnoError(2);
if (!stream.stream_ops.mmap)
throw new FS.ErrnoError(43);
return stream.stream_ops.mmap(
stream,
address,
length,
position,
prot,
flags
);
},
msync: function(stream, buffer2, offset, length, mmapFlags) {
return !stream || !stream.stream_ops.msync ? 0 : stream.stream_ops.msync(
stream,
buffer2,
offset,
length,
mmapFlags
);
},
munmap: function(stream) {
return 0;
},
ioctl: function(stream, cmd, arg) {
if (!stream.stream_ops.ioctl)
throw new FS.ErrnoError(59);
return stream.stream_ops.ioctl(stream, cmd, arg);
},
readFile: function(path5, opts) {
if (opts = opts || {}, opts.flags = opts.flags || 0, opts.encoding = opts.encoding || "binary", opts.encoding !== "utf8" && opts.encoding !== "binary")
throw new Error('Invalid encoding type "' + opts.encoding + '"');
var ret, stream = FS.open(path5, opts.flags), stat = FS.stat(path5), length = stat.size, buf = new Uint8Array(length);
return FS.read(stream, buf, 0, length, 0), opts.encoding === "utf8" ? ret = UTF8ArrayToString(buf, 0) : opts.encoding === "binary" && (ret = buf), FS.close(stream), ret;
},
writeFile: function(path5, data, opts) {
opts = opts || {}, opts.flags = opts.flags || 577;
var stream = FS.open(path5, opts.flags, opts.mode);
if (typeof data == "string") {
var buf = new Uint8Array(lengthBytesUTF8(data) + 1), actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length);
FS.write(stream, buf, 0, actualNumBytes, void 0, opts.canOwn);
} else if (ArrayBuffer.isView(data))
FS.write(stream, data, 0, data.byteLength, void 0, opts.canOwn);
else
throw new Error("Unsupported data type");
FS.close(stream);
},
cwd: function() {
return FS.currentPath;
},
chdir: function(path5) {
var lookup = FS.lookupPath(path5, { follow: !0 });
if (lookup.node === null)
throw new FS.ErrnoError(44);
if (!FS.isDir(lookup.node.mode))
throw new FS.ErrnoError(54);
var errCode = FS.nodePermissions(lookup.node, "x");
if (errCode)
throw new FS.ErrnoError(errCode);
FS.currentPath = lookup.path;
},
createDefaultDirectories: function() {
FS.mkdir("/tmp"), FS.mkdir("/home"), FS.mkdir("/home/web_user");
},
createDefaultDevices: function() {
FS.mkdir("/dev"), FS.registerDevice(FS.makedev(1, 3), {
read: function() {
return 0;
},
write: function(stream, buffer2, offset, length, pos) {
return length;
}
}), FS.mkdev("/dev/null", FS.makedev(1, 3)), TTY.register(FS.makedev(5, 0), TTY.default_tty_ops), TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops), FS.mkdev("/dev/tty", FS.makedev(5, 0)), FS.mkdev("/dev/tty1", FS.makedev(6, 0));
var random_device = getRandomDevice();
FS.createDevice("/dev", "random", random_device), FS.createDevice("/dev", "urandom", random_device), FS.mkdir("/dev/shm"), FS.mkdir("/dev/shm/tmp");
},
createSpecialDirectories: function() {
FS.mkdir("/proc");
var proc_self = FS.mkdir("/proc/self");
FS.mkdir("/proc/self/fd"), FS.mount(
{
mount: function() {
var node = FS.createNode(proc_self, "fd", 16895, 73);
return node.node_ops = {
lookup: function(parent, name) {
var fd = +name, stream = FS.getStream(fd);
if (!stream) throw new FS.ErrnoError(8);
var ret = {
parent: null,
mount: { mountpoint: "fake" },
node_ops: {
readlink: function() {
return stream.path;
}
}
};
return ret.parent = ret, ret;
}
}, node;
}
},
{},
"/proc/self/fd"
);
},
createStandardStreams: function() {
Module.stdin ? FS.createDevice("/dev", "stdin", Module.stdin) : FS.symlink("/dev/tty", "/dev/stdin"), Module.stdout ? FS.createDevice("/dev", "stdout", null, Module.stdout) : FS.symlink("/dev/tty", "/dev/stdout"), Module.stderr ? FS.createDevice("/dev", "stderr", null, Module.stderr) : FS.symlink("/dev/tty1", "/dev/stderr");
var stdin = FS.open("/dev/stdin", 0), stdout = FS.open("/dev/stdout", 1), stderr = FS.open("/dev/stderr", 1);
},
ensureErrnoError: function() {
FS.ErrnoError || (FS.ErrnoError = function(errno, node) {
this.node = node, this.setErrno = function(errno2) {
this.errno = errno2;
}, this.setErrno(errno), this.message = "FS error";
}, FS.ErrnoError.prototype = new Error(), FS.ErrnoError.prototype.constructor = FS.ErrnoError, [44].forEach(function(code) {
FS.genericErrors[code] = new FS.ErrnoError(code), FS.genericErrors[code].stack = "<generic error, no stack>";
}));
},
staticInit: function() {
FS.ensureErrnoError(), FS.nameTable = new Array(4096), FS.mount(MEMFS, {}, "/"), FS.createDefaultDirectories(), FS.createDefaultDevices(), FS.createSpecialDirectories(), FS.filesystems = { MEMFS, NODEFS };
},
init: function(input, output, error) {
FS.init.initialized = !0, FS.ensureErrnoError(), Module.stdin = input || Module.stdin, Module.stdout = output || Module.stdout, Module.stderr = error || Module.stderr, FS.createStandardStreams();
},
quit: function() {
FS.init.initialized = !1;
var fflush = Module._fflush;
fflush && fflush(0);
for (var i2 = 0; i2 < FS.streams.length; i2++) {
var stream = FS.streams[i2];
stream && FS.close(stream);
}
},
getMode: function(canRead, canWrite) {
var mode = 0;
return canRead && (mode |= 365), canWrite && (mode |= 146), mode;
},
findObject: function(path5, dontResolveLastLink) {
var ret = FS.analyzePath(path5, dontResolveLastLink);
return ret.exists ? ret.object : null;
},
analyzePath: function(path5, dontResolveLastLink) {
try {
var lookup = FS.lookupPath(path5, { follow: !dontResolveLastLink });
path5 = lookup.path;
} catch {
}
var ret = {
isRoot: !1,
exists: !1,
error: 0,
name: null,
path: null,
object: null,
parentExists: !1,
parentPath: null,
parentObject: null
};
try {
var lookup = FS.lookupPath(path5, { parent: !0 });
ret.parentExists = !0, ret.parentPath = lookup.path, ret.parentObject = lookup.node, ret.name = PATH.basename(path5), lookup = FS.lookupPath(path5, { follow: !dontResolveLastLink }), ret.exists = !0, ret.path = lookup.path, ret.object = lookup.node, ret.name = lookup.node.name, ret.isRoot = lookup.path === "/";
} catch (e) {
ret.error = e.errno;
}
return ret;
},
createPath: function(parent, path5, canRead, canWrite) {
parent = typeof parent == "string" ? parent : FS.getPath(parent);
for (var parts = path5.split("/").reverse(); parts.length; ) {
var part = parts.pop();
if (part) {
var current = PATH.join2(parent, part);
try {
FS.mkdir(current);
} catch {
}
parent = current;
}
}
return current;
},
createFile: function(parent, name, properties, canRead, canWrite) {
var path5 = PATH.join2(
typeof parent == "string" ? parent : FS.getPath(parent),
name
), mode = FS.getMode(canRead, canWrite);
return FS.create(path5, mode);
},
createDataFile: function(parent, name, data, canRead, canWrite, canOwn) {
var path5 = name ? PATH.join2(
typeof parent == "string" ? parent : FS.getPath(parent),
name
) : parent, mode = FS.getMode(canRead, canWrite), node = FS.create(path5, mode);
if (data) {
if (typeof data == "string") {
for (var arr = new Array(data.length), i2 = 0, len = data.length; i2 < len; ++i2)
arr[i2] = data.charCodeAt(i2);
data = arr;
}
FS.chmod(node, mode | 146);
var stream = FS.open(node, 577);
FS.write(stream, data, 0, data.length, 0, canOwn), FS.close(stream), FS.chmod(node, mode);
}
return node;
},
createDevice: function(parent, name, input, output) {
var path5 = PATH.join2(
typeof parent == "string" ? parent : FS.getPath(parent),
name
), mode = FS.getMode(!!input, !!output);
FS.createDevice.major || (FS.createDevice.major = 64);
var dev = FS.makedev(FS.createDevice.major++, 0);
return FS.registerDevice(dev, {
open: function(stream) {
stream.seekable = !1;
},
close: function(stream) {
output && output.buffer && output.buffer.length && output(10);
},
read: function(stream, buffer2, offset, length, pos) {
for (var bytesRead = 0, i2 = 0; i2 < length; i2++) {
var result;
try {
result = input();
} catch {
throw new FS.ErrnoError(29);
}
if (result === void 0 && bytesRead === 0)
throw new FS.ErrnoError(6);
if (result == null) break;
bytesRead++, buffer2[offset + i2] = result;
}
return bytesRead && (stream.node.timestamp = Date.now()), bytesRead;
},
write: function(stream, buffer2, offset, length, pos) {
for (var i2 = 0; i2 < length; i2++)
try {
output(buffer2[offset + i2]);
} catch {
throw new FS.ErrnoError(29);
}
return length && (stream.node.timestamp = Date.now()), i2;
}
}), FS.mkdev(path5, mode, dev);
},
forceLoadFile: function(obj) {
if (obj.isDevice || obj.isFolder || obj.link || obj.contents)
return !0;
if (typeof XMLHttpRequest < "u")
throw new Error(
"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."
);
if (read_)
try {
obj.contents = intArrayFromString(read_(obj.url), !0), obj.usedBytes = obj.contents.length;
} catch {
throw new FS.ErrnoError(29);
}
else
throw new Error("Cannot load without read() or XMLHttpRequest.");
},
createLazyFile: function(parent, name, url, canRead, canWrite) {
function LazyUint8Array() {
this.lengthKnown = !1, this.chunks = [];
}
if (LazyUint8Array.prototype.get = function(idx) {
if (!(idx > this.length - 1 || idx < 0)) {
var chunkOffset = idx % this.chunkSize, chunkNum = idx / this.chunkSize | 0;
return this.getter(chunkNum)[chunkOffset];
}
}, LazyUint8Array.prototype.setDataGetter = function(getter) {
this.getter = getter;
}, LazyUint8Array.prototype.cacheLength = function() {
var xhr = new XMLHttpRequest();
if (xhr.open("HEAD", url, !1), xhr.send(null), !(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304))
throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
var datalength = Number(xhr.getResponseHeader("Content-length")), header, hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes", usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip", chunkSize = 1024 * 1024;
hasByteServing || (chunkSize = datalength);
var doXHR = function(from2, to) {
if (from2 > to)
throw new Error(
"invalid range (" + from2 + ", " + to + ") or no bytes requested!"
);
if (to > datalength - 1)
throw new Error(
"only " + datalength + " bytes available! programmer error!"
);
var xhr2 = new XMLHttpRequest();
if (xhr2.open("GET", url, !1), datalength !== chunkSize && xhr2.setRequestHeader("Range", "bytes=" + from2 + "-" + to), typeof Uint8Array < "u" && (xhr2.responseType = "arraybuffer"), xhr2.overrideMimeType && xhr2.overrideMimeType("text/plain; charset=x-user-defined"), xhr2.send(null), !(xhr2.status >= 200 && xhr2.status < 300 || xhr2.status === 304))
throw new Error(
"Couldn't load " + url + ". Status: " + xhr2.status
);
return xhr2.response !== void 0 ? new Uint8Array(xhr2.response || []) : intArrayFromString(xhr2.responseText || "", !0);
}, lazyArray2 = this;
lazyArray2.setDataGetter(function(chunkNum) {
var start = chunkNum * chunkSize, end = (chunkNum + 1) * chunkSize - 1;
if (end = Math.min(end, datalength - 1), typeof lazyArray2.chunks[chunkNum] > "u" && (lazyArray2.chunks[chunkNum] = doXHR(start, end)), typeof lazyArray2.chunks[chunkNum] > "u")
throw new Error("doXHR failed!");
return lazyArray2.chunks[chunkNum];
}), (usesGzip || !datalength) && (chunkSize = datalength = 1, datalength = this.getter(0).length, chunkSize = datalength, out(
"LazyFiles on gzip forces download of the whole file when length is accessed"
)), this._length = datalength, this._chunkSize = chunkSize, this.lengthKnown = !0;
}, typeof XMLHttpRequest < "u") {
if (!ENVIRONMENT_IS_WORKER)
throw "Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";
var lazyArray = new LazyUint8Array();
Object.defineProperties(lazyArray, {
length: {
get: function() {
return this.lengthKnown || this.cacheLength(), this._length;
}
},
chunkSize: {
get: function() {
return this.lengthKnown || this.cacheLength(), this._chunkSize;
}
}
});
var properties = { isDevice: !1, contents: lazyArray };
} else
var properties = { isDevice: !1, url };
var node = FS.createFile(parent, name, properties, canRead, canWrite);
properties.contents ? node.contents = properties.contents : properties.url && (node.contents = null, node.url = properties.url), Object.defineProperties(node, {
usedBytes: {
get: function() {
return this.contents.length;
}
}
});
var stream_ops = {}, keys = Object.keys(node.stream_ops);
return keys.forEach(function(key2) {
var fn = node.stream_ops[key2];
stream_ops[key2] = function() {
return FS.forceLoadFile(node), fn.apply(null, arguments);
};
}), stream_ops.read = function(stream, buffer2, offset, length, position) {
FS.forceLoadFile(node);
var contents = stream.node.contents;
if (position >= contents.length) return 0;
var size = Math.min(contents.length - position, length);
if (contents.slice)
for (var i2 = 0; i2 < size; i2++)
buffer2[offset + i2] = contents[position + i2];
else
for (var i2 = 0; i2 < size; i2++)
buffer2[offset + i2] = contents.get(position + i2);
return size;
}, node.stream_ops = stream_ops, node;
},
createPreloadedFile: function(parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) {
Browser.init();
var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent, dep = "cp " + fullname;
function processData(byteArray) {
function finish(byteArray2) {
preFinish && preFinish(), dontCreateFile || FS.createDataFile(
parent,
name,
byteArray2,
canRead,
canWrite,
canOwn
), onload && onload(), removeRunDependency(dep);
}
var handled = !1;
Module.preloadPlugins.forEach(function(plugin) {
handled || plugin.canHandle(fullname) && (plugin.handle(byteArray, fullname, finish, function() {
onerror && onerror(), removeRunDependency(dep);
}), handled = !0);
}), handled || finish(byteArray);
}
addRunDependency(dep), typeof url == "string" ? Browser.asyncLoad(
url,
function(byteArray) {
processData(byteArray);
},
onerror
) : processData(url);
},
indexedDB: function() {
return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
},
DB_NAME: function() {
return "EM_FS_" + window.location.pathname;
},
DB_VERSION: 20,
DB_STORE_NAME: "FILE_DATA",
saveFilesToDB: function(paths, onload, onerror) {
onload = onload || function() {
}, onerror = onerror || function() {
};
var indexedDB = FS.indexedDB();
try {
var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
} catch (e) {
return onerror(e);
}
openRequest.onupgradeneeded = function() {
out("creating db");
var db = openRequest.result;
db.createObjectStore(FS.DB_STORE_NAME);
}, openRequest.onsuccess = function() {
var db = openRequest.result, transaction = db.transaction([FS.DB_STORE_NAME], "readwrite"), files = transaction.objectStore(FS.DB_STORE_NAME), ok2 = 0, fail = 0, total = paths.length;
function finish() {
fail == 0 ? onload() : onerror();
}
paths.forEach(function(path5) {
var putRequest = files.put(
FS.analyzePath(path5).object.contents,
path5
);
putRequest.onsuccess = function() {
ok2++, ok2 + fail == total && finish();
}, putRequest.onerror = function() {
fail++, ok2 + fail == total && finish();
};
}), transaction.onerror = onerror;
}, openRequest.onerror = onerror;
},
loadFilesFromDB: function(paths, onload, onerror) {
onload = onload || function() {
}, onerror = onerror || function() {
};
var indexedDB = FS.indexedDB();
try {
var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
} catch (e) {
return onerror(e);
}
openRequest.onupgradeneeded = onerror, openRequest.onsuccess = function() {
var db = openRequest.result;
try {
var transaction = db.transaction([FS.DB_STORE_NAME], "readonly");
} catch (e) {
onerror(e);
return;
}
var files = transaction.objectStore(FS.DB_STORE_NAME), ok2 = 0, fail = 0, total = paths.length;
function finish() {
fail == 0 ? onload() : onerror();
}
paths.forEach(function(path5) {
var getRequest = files.get(path5);
getRequest.onsuccess = function() {
FS.analyzePath(path5).exists && FS.unlink(path5), FS.createDataFile(
PATH.dirname(path5),
PATH.basename(path5),
getRequest.result,
!0,
!0,
!0
), ok2++, ok2 + fail == total && finish();
}, getRequest.onerror = function() {
fail++, ok2 + fail == total && finish();
};
}), transaction.onerror = onerror;
}, openRequest.onerror = onerror;
}
}, SYSCALLS = {
mappings: {},
DEFAULT_POLLMASK: 5,
umask: 511,
calculateAt: function(dirfd, path5, allowEmpty) {
if (path5[0] === "/")
return path5;
var dir;
if (dirfd === -100)
dir = FS.cwd();
else {
var dirstream = FS.getStream(dirfd);
if (!dirstream) throw new FS.ErrnoError(8);
dir = dirstream.path;
}
if (path5.length == 0) {
if (!allowEmpty)
throw new FS.ErrnoError(44);
return dir;
}
return PATH.join2(dir, path5);
},
doStat: function(func, path5, buf) {
try {
var stat = func(path5);
} catch (e) {
if (e && e.node && PATH.normalize(path5) !== PATH.normalize(FS.getPath(e.node)))
return -54;
throw e;
}
return HEAP32[buf >> 2] = stat.dev, HEAP32[buf + 4 >> 2] = 0, HEAP32[buf + 8 >> 2] = stat.ino, HEAP32[buf + 12 >> 2] = stat.mode, HEAP32[buf + 16 >> 2] = stat.nlink, HEAP32[buf + 20 >> 2] = stat.uid, HEAP32[buf + 24 >> 2] = stat.gid, HEAP32[buf + 28 >> 2] = stat.rdev, HEAP32[buf + 32 >> 2] = 0, tempI64 = [
stat.size >>> 0,
(tempDouble = stat.size, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil(
(tempDouble - +(~~tempDouble >>> 0)) / 4294967296
) >>> 0 : 0)
], HEAP32[buf + 40 >> 2] = tempI64[0], HEAP32[buf + 44 >> 2] = tempI64[1], HEAP32[buf + 48 >> 2] = 4096, HEAP32[buf + 52 >> 2] = stat.blocks, HEAP32[buf + 56 >> 2] = stat.atime.getTime() / 1e3 | 0, HEAP32[buf + 60 >> 2] = 0, HEAP32[buf + 64 >> 2] = stat.mtime.getTime() / 1e3 | 0, HEAP32[buf + 68 >> 2] = 0, HEAP32[buf + 72 >> 2] = stat.ctime.getTime() / 1e3 | 0, HEAP32[buf + 76 >> 2] = 0, tempI64 = [
stat.ino >>> 0,
(tempDouble = stat.ino, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil(
(tempDouble - +(~~tempDouble >>> 0)) / 4294967296
) >>> 0 : 0)
], HEAP32[buf + 80 >> 2] = tempI64[0], HEAP32[buf + 84 >> 2] = tempI64[1], 0;
},
doMsync: function(addr, stream, len, flags, offset) {
var buffer2 = HEAPU8.slice(addr, addr + len);
FS.msync(stream, buffer2, offset, len, flags);
},
doMkdir: function(path5, mode) {
return path5 = PATH.normalize(path5), path5[path5.length - 1] === "/" && (path5 = path5.substr(0, path5.length - 1)), FS.mkdir(path5, mode, 0), 0;
},
doMknod: function(path5, mode, dev) {
switch (mode & 61440) {
case 32768:
case 8192:
case 24576:
case 4096:
case 49152:
break;
default:
return -28;
}
return FS.mknod(path5, mode, dev), 0;
},
doReadlink: function(path5, buf, bufsize) {
if (bufsize <= 0) return -28;
var ret = FS.readlink(path5), len = Math.min(bufsize, lengthBytesUTF8(ret)), endChar = HEAP8[buf + len];
return stringToUTF8(ret, buf, bufsize + 1), HEAP8[buf + len] = endChar, len;
},
doAccess: function(path5, amode) {
if (amode & -8)
return -28;
var node, lookup = FS.lookupPath(path5, { follow: !0 });
if (node = lookup.node, !node)
return -44;
var perms = "";
return amode & 4 && (perms += "r"), amode & 2 && (perms += "w"), amode & 1 && (perms += "x"), perms && FS.nodePermissions(node, perms) ? -2 : 0;
},
doDup: function(path5, flags, suggestFD) {
var suggest = FS.getStream(suggestFD);
return suggest && FS.close(suggest), FS.open(path5, flags, 0, suggestFD, suggestFD).fd;
},
doReadv: function(stream, iov, iovcnt, offset) {
for (var ret = 0, i2 = 0; i2 < iovcnt; i2++) {
var ptr = HEAP32[iov + i2 * 8 >> 2], len = HEAP32[iov + (i2 * 8 + 4) >> 2], curr = FS.read(stream, HEAP8, ptr, len, offset);
if (curr < 0) return -1;
if (ret += curr, curr < len) break;
}
return ret;
},
doWritev: function(stream, iov, iovcnt, offset) {
for (var ret = 0, i2 = 0; i2 < iovcnt; i2++) {
var ptr = HEAP32[iov + i2 * 8 >> 2], len = HEAP32[iov + (i2 * 8 + 4) >> 2], curr = FS.write(stream, HEAP8, ptr, len, offset);
if (curr < 0) return -1;
ret += curr;
}
return ret;
},
varargs: void 0,
get: function() {
SYSCALLS.varargs += 4;
var ret = HEAP32[SYSCALLS.varargs - 4 >> 2];
return ret;
},
getStr: function(ptr) {
var ret = UTF8ToString(ptr);
return ret;
},
getStreamFromFD: function(fd) {
var stream = FS.getStream(fd);
if (!stream) throw new FS.ErrnoError(8);
return stream;
},
get64: function(low, high) {
return low;
}
};
function ___sys_chmod(path5, mode) {
try {
return path5 = SYSCALLS.getStr(path5), FS.chmod(path5, mode), 0;
} catch (e) {
return (typeof FS > "u" || !(e instanceof FS.ErrnoError)) && abort(e), -e.errno;
}
}
function setErrNo(value) {
return HEAP32[___errno_location() >> 2] = value, value;
}
function ___sys_fcntl64(fd, cmd, varargs) {
SYSCALLS.varargs = varargs;
try {
var stream = SYSCALLS.getStreamFromFD(fd);
switch (cmd) {
case 0: {
var arg = SYSCALLS.get();
if (arg < 0)
return -28;
var newStream;
return newStream = FS.open(stream.path, stream.flags, 0, arg), newStream.fd;
}
case 1:
case 2:
return 0;
case 3:
return stream.flags;
case 4: {
var arg = SYSCALLS.get();
return stream.flags |= arg, 0;
}
case 12: {
var arg = SYSCALLS.get(), offset = 0;
return HEAP16[arg + offset >> 1] = 2, 0;
}
case 13:
case 14:
return 0;
case 16:
case 8:
return -28;
case 9:
return setErrNo(28), -1;
default:
return -28;
}
} catch (e) {
return (typeof FS > "u" || !(e instanceof FS.ErrnoError)) && abort(e), -e.errno;
}
}
function ___sys_fstat64(fd, buf) {
try {
var stream = SYSCALLS.getStreamFromFD(fd);
return SYSCALLS.doStat(FS.stat, stream.path, buf);
} catch (e) {
return (typeof FS > "u" || !(e instanceof FS.ErrnoError)) && abort(e), -e.errno;
}
}
function ___sys_ioctl(fd, op, varargs) {
SYSCALLS.varargs = varargs;
try {
var stream = SYSCALLS.getStreamFromFD(fd);
switch (op) {
case 21509:
case 21505:
return stream.tty ? 0 : -59;
case 21510:
case 21511:
case 21512:
case 21506:
case 21507:
case 21508:
return stream.tty ? 0 : -59;
case 21519: {
if (!stream.tty) return -59;
var argp = SYSCALLS.get();
return HEAP32[argp >> 2] = 0, 0;
}
case 21520:
return stream.tty ? -28 : -59;
case 21531: {
var argp = SYSCALLS.get();
return FS.ioctl(stream, op, argp);
}
case 21523:
return stream.tty ? 0 : -59;
case 21524:
return stream.tty ? 0 : -59;
default:
abort("bad ioctl syscall " + op);
}
} catch (e) {
return (typeof FS > "u" || !(e instanceof FS.ErrnoError)) && abort(e), -e.errno;
}
}
function ___sys_open(path5, flags, varargs) {
SYSCALLS.varargs = varargs;
try {
var pathname = SYSCALLS.getStr(path5), mode = varargs ? SYSCALLS.get() : 0, stream = FS.open(pathname, flags, mode);
return stream.fd;
} catch (e) {
return (typeof FS > "u" || !(e instanceof FS.ErrnoError)) && abort(e), -e.errno;
}
}
function ___sys_rename(old_path, new_path) {
try {
return old_path = SYSCALLS.getStr(old_path), new_path = SYSCALLS.getStr(new_path), FS.rename(old_path, new_path), 0;
} catch (e) {
return (typeof FS > "u" || !(e instanceof FS.ErrnoError)) && abort(e), -e.errno;
}
}
function ___sys_rmdir(path5) {
try {
return path5 = SYSCALLS.getStr(path5), FS.rmdir(path5), 0;
} catch (e) {
return (typeof FS > "u" || !(e instanceof FS.ErrnoError)) && abort(e), -e.errno;
}
}
function ___sys_stat64(path5, buf) {
try {
return path5 = SYSCALLS.getStr(path5), SYSCALLS.doStat(FS.stat, path5, buf);
} catch (e) {
return (typeof FS > "u" || !(e instanceof FS.ErrnoError)) && abort(e), -e.errno;
}
}
function ___sys_unlink(path5) {
try {
return path5 = SYSCALLS.getStr(path5), FS.unlink(path5), 0;
} catch (e) {
return (typeof FS > "u" || !(e instanceof FS.ErrnoError)) && abort(e), -e.errno;
}
}
function _emscripten_memcpy_big(dest, src, num) {
HEAPU8.copyWithin(dest, src, src + num);
}
function emscripten_realloc_buffer(size) {
try {
return wasmMemory.grow(size - buffer.byteLength + 65535 >>> 16), updateGlobalBufferAndViews(wasmMemory.buffer), 1;
} catch {
}
}
function _emscripten_resize_heap(requestedSize) {
var oldSize = HEAPU8.length;
requestedSize = requestedSize >>> 0;
var maxHeapSize = 2147483648;
if (requestedSize > maxHeapSize)
return !1;
for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {
var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown);
overGrownHeapSize = Math.min(
overGrownHeapSize,
requestedSize + 100663296
);
var newSize = Math.min(
maxHeapSize,
alignUp(Math.max(requestedSize, overGrownHeapSize), 65536)
), replacement = emscripten_realloc_buffer(newSize);
if (replacement)
return !0;
}
return !1;
}
function _fd_close(fd) {
try {
var stream = SYSCALLS.getStreamFromFD(fd);
return FS.close(stream), 0;
} catch (e) {
return (typeof FS > "u" || !(e instanceof FS.ErrnoError)) && abort(e), e.errno;
}
}
function _fd_fdstat_get(fd, pbuf) {
try {
var stream = SYSCALLS.getStreamFromFD(fd), type = stream.tty ? 2 : FS.isDir(stream.mode) ? 3 : FS.isLink(stream.mode) ? 7 : 4;
return HEAP8[pbuf >> 0] = type, 0;
} catch (e) {
return (typeof FS > "u" || !(e instanceof FS.ErrnoError)) && abort(e), e.errno;
}
}
function _fd_read(fd, iov, iovcnt, pnum) {
try {
var stream = SYSCALLS.getStreamFromFD(fd), num = SYSCALLS.doReadv(stream, iov, iovcnt);
return HEAP32[pnum >> 2] = num, 0;
} catch (e) {
return (typeof FS > "u" || !(e instanceof FS.ErrnoError)) && abort(e), e.errno;
}
}
function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {
try {
var stream = SYSCALLS.getStreamFromFD(fd), HIGH_OFFSET = 4294967296, offset = offset_high * HIGH_OFFSET + (offset_low >>> 0), DOUBLE_LIMIT = 9007199254740992;
return offset <= -DOUBLE_LIMIT || offset >= DOUBLE_LIMIT ? -61 : (FS.llseek(stream, offset, whence), tempI64 = [
stream.position >>> 0,
(tempDouble = stream.position, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil(
(tempDouble - +(~~tempDouble >>> 0)) / 4294967296
) >>> 0 : 0)
], HEAP32[newOffset >> 2] = tempI64[0], HEAP32[newOffset + 4 >> 2] = tempI64[1], stream.getdents && offset === 0 && whence === 0 && (stream.getdents = null), 0);
} catch (e) {
return (typeof FS > "u" || !(e instanceof FS.ErrnoError)) && abort(e), e.errno;
}
}
function _fd_write(fd, iov, iovcnt, pnum) {
try {
var stream = SYSCALLS.getStreamFromFD(fd), num = SYSCALLS.doWritev(stream, iov, iovcnt);
return HEAP32[pnum >> 2] = num, 0;
} catch (e) {
return (typeof FS > "u" || !(e instanceof FS.ErrnoError)) && abort(e), e.errno;
}
}
function _setTempRet0(val) {
setTempRet0(val);
}
function _time(ptr) {
var ret = Date.now() / 1e3 | 0;
return ptr && (HEAP32[ptr >> 2] = ret), ret;
}
function _tzset() {
if (_tzset.called) return;
_tzset.called = !0;
var currentYear = (/* @__PURE__ */ new Date()).getFullYear(), winter = new Date(currentYear, 0, 1), summer = new Date(currentYear, 6, 1), winterOffset = winter.getTimezoneOffset(), summerOffset = summer.getTimezoneOffset(), stdTimezoneOffset = Math.max(winterOffset, summerOffset);
HEAP32[__get_timezone() >> 2] = stdTimezoneOffset * 60, HEAP32[__get_daylight() >> 2] = +(winterOffset != summerOffset);
function extractZone(date) {
var match = date.toTimeString().match(/\(([A-Za-z ]+)\)$/);
return match ? match[1] : "GMT";
}
var winterName = extractZone(winter), summerName = extractZone(summer), winterNamePtr = allocateUTF8(winterName), summerNamePtr = allocateUTF8(summerName);
summerOffset < winterOffset ? (HEAP32[__get_tzname() >> 2] = winterNamePtr, HEAP32[__get_tzname() + 4 >> 2] = summerNamePtr) : (HEAP32[__get_tzname() >> 2] = summerNamePtr, HEAP32[__get_tzname() + 4 >> 2] = winterNamePtr);
}
function _timegm(tmPtr) {
_tzset();
var time = Date.UTC(
HEAP32[tmPtr + 20 >> 2] + 1900,
HEAP32[tmPtr + 16 >> 2],
HEAP32[tmPtr + 12 >> 2],
HEAP32[tmPtr + 8 >> 2],
HEAP32[tmPtr + 4 >> 2],
HEAP32[tmPtr >> 2],
0
), date = new Date(time);
HEAP32[tmPtr + 24 >> 2] = date.getUTCDay();
var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0), yday = (date.getTime() - start) / (1e3 * 60 * 60 * 24) | 0;
return HEAP32[tmPtr + 28 >> 2] = yday, date.getTime() / 1e3 | 0;
}
var FSNode = function(parent, name, mode, rdev) {
parent || (parent = this), this.parent = parent, this.mount = parent.mount, this.mounted = null, this.id = FS.nextInode++, this.name = name, this.mode = mode, this.node_ops = {}, this.stream_ops = {}, this.rdev = rdev;
}, readMode = 365, writeMode = 146;
if (Object.defineProperties(FSNode.prototype, {
read: {
get: function() {
return (this.mode & readMode) === readMode;
},
set: function(val) {
val ? this.mode |= readMode : this.mode &= ~readMode;
}
},
write: {
get: function() {
return (this.mode & writeMode) === writeMode;
},
set: function(val) {
val ? this.mode |= writeMode : this.mode &= ~writeMode;
}
},
isFolder: {
get: function() {
return FS.isDir(this.mode);
}
},
isDevice: {
get: function() {
return FS.isChrdev(this.mode);
}
}
}), FS.FSNode = FSNode, FS.staticInit(), ENVIRONMENT_IS_NODE) {
var fs = frozenFs, NODEJS_PATH = __require("path");
NODEFS.staticInit();
}
if (ENVIRONMENT_IS_NODE) {
var _wrapNodeError = function(func) {
return function() {
try {
return func.apply(this, arguments);
} catch (e) {
throw e.code ? new FS.ErrnoError(ERRNO_CODES[e.code]) : e;
}
};
}, VFS = Object.assign({}, FS);
for (var _key in NODERAWFS) FS[_key] = _wrapNodeError(NODERAWFS[_key]);
} else
throw new Error(
"NODERAWFS is currently only supported on Node.js environment."
);
function intArrayFromString(stringy, dontAddNull, length) {
var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1, u8array = new Array(len), numBytesWritten = stringToUTF8Array(
stringy,
u8array,
0,
u8array.length
);
return dontAddNull && (u8array.length = numBytesWritten), u8array;
}
var decodeBase64 = typeof atob == "function" ? atob : function(input) {
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", output = "", chr1, chr2, chr3, enc1, enc2, enc3, enc4, i2 = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
do
enc1 = keyStr.indexOf(input.charAt(i2++)), enc2 = keyStr.indexOf(input.charAt(i2++)), enc3 = keyStr.indexOf(input.charAt(i2++)), enc4 = keyStr.indexOf(input.charAt(i2++)), chr1 = enc1 << 2 | enc2 >> 4, chr2 = (enc2 & 15) << 4 | enc3 >> 2, chr3 = (enc3 & 3) << 6 | enc4, output = output + String.fromCharCode(chr1), enc3 !== 64 && (output = output + String.fromCharCode(chr2)), enc4 !== 64 && (output = output + String.fromCharCode(chr3));
while (i2 < input.length);
return output;
};
function intArrayFromBase64(s) {
if (typeof ENVIRONMENT_IS_NODE == "boolean" && ENVIRONMENT_IS_NODE) {
var buf;
try {
buf = Buffer.from(s, "base64");
} catch {
buf = new Buffer(s, "base64");
}
return new Uint8Array(
buf.buffer,
buf.byteOffset,
buf.byteLength
);
}
try {
for (var decoded = decodeBase64(s), bytes = new Uint8Array(decoded.length), i2 = 0; i2 < decoded.length; ++i2)
bytes[i2] = decoded.charCodeAt(i2);
return bytes;
} catch {
throw new Error("Converting base64 string to bytes failed.");
}
}
function tryParseAsDataURI(filename) {
if (isDataURI(filename))
return intArrayFromBase64(filename.slice(dataURIPrefix.length));
}
var asmLibraryArg = {
s: ___gmtime_r,
p: ___sys_chmod,
e: ___sys_fcntl64,
k: ___sys_fstat64,
o: ___sys_ioctl,
q: ___sys_open,
i: ___sys_rename,
r: ___sys_rmdir,
c: ___sys_stat64,
h: ___sys_unlink,
l: _emscripten_memcpy_big,
m: _emscripten_resize_heap,
f: _fd_close,
j: _fd_fdstat_get,
g: _fd_read,
n: _fd_seek,
d: _fd_write,
a: _setTempRet0,
b: _time,
t: _timegm
}, asm = createWasm(), ___wasm_call_ctors = Module.___wasm_call_ctors = asm.v, _zip_ext_count_symlinks = Module._zip_ext_count_symlinks = asm.w, _zip_file_get_external_attributes = Module._zip_file_get_external_attributes = asm.x, _zipstruct_stat = Module._zipstruct_stat = asm.y, _zipstruct_statS = Module._zipstruct_statS = asm.z, _zipstruct_stat_name = Module._zipstruct_stat_name = asm.A, _zipstruct_stat_index = Module._zipstruct_stat_index = asm.B, _zipstruct_stat_size = Module._zipstruct_stat_size = asm.C, _zipstruct_stat_mtime = Module._zipstruct_stat_mtime = asm.D, _zipstruct_stat_crc = Module._zipstruct_stat_crc = asm.E, _zipstruct_error = Module._zipstruct_error = asm.F, _zipstruct_errorS = Module._zipstruct_errorS = asm.G, _zipstruct_error_code_zip = Module._zipstruct_error_code_zip = asm.H, _zipstruct_stat_comp_size = Module._zipstruct_stat_comp_size = asm.I, _zipstruct_stat_comp_method = Module._zipstruct_stat_comp_method = asm.J, _zip_close = Module._zip_close = asm.K, _zip_delete = Module._zip_delete = asm.L, _zip_dir_add = Module._zip_dir_add = asm.M, _zip_discard = Module._zip_discard = asm.N, _zip_error_init_with_code = Module._zip_error_init_with_code = asm.O, _zip_get_error = Module._zip_get_error = asm.P, _zip_file_get_error = Module._zip_file_get_error = asm.Q, _zip_error_strerror = Module._zip_error_strerror = asm.R, _zip_fclose = Module._zip_fclose = asm.S, _zip_file_add = Module._zip_file_add = asm.T, _free = Module._free = asm.U, _malloc = Module._malloc = asm.V, ___errno_location = Module.___errno_location = asm.W, _zip_source_error = Module._zip_source_error = asm.X, _zip_source_seek = Module._zip_source_seek = asm.Y, _zip_file_set_external_attributes = Module._zip_file_set_external_attributes = asm.Z, _zip_file_set_mtime = Module._zip_file_set_mtime = asm._, _zip_fopen = Module._zip_fopen = asm.$, _zip_fopen_index = Module._zip_fopen_index = asm.aa, _zip_fread = Module._zip_fread = asm.ba, _zip_get_name = Module._zip_get_name = asm.ca, _zip_get_num_entries = Module._zip_get_num_entries = asm.da, _zip_source_read = Module._zip_source_read = asm.ea, _zip_name_locate = Module._zip_name_locate = asm.fa, _zip_open = Module._zip_open = asm.ga, _zip_open_from_source = Module._zip_open_from_source = asm.ha, _zip_set_file_compression = Module._zip_set_file_compression = asm.ia, _zip_source_buffer = Module._zip_source_buffer = asm.ja, _zip_source_buffer_create = Module._zip_source_buffer_create = asm.ka, _zip_source_close = Module._zip_source_close = asm.la, _zip_source_free = Module._zip_source_free = asm.ma, _zip_source_keep = Module._zip_source_keep = asm.na, _zip_source_open = Module._zip_source_open = asm.oa, _zip_source_set_mtime = Module._zip_source_set_mtime = asm.qa, _zip_source_tell = Module._zip_source_tell = asm.ra, _zip_stat = Module._zip_stat = asm.sa, _zip_stat_index = Module._zip_stat_index = asm.ta, __get_tzname = Module.__get_tzname = asm.ua, __get_daylight = Module.__get_daylight = asm.va, __get_timezone = Module.__get_timezone = asm.wa, stackSave = Module.stackSave = asm.xa, stackRestore = Module.stackRestore = asm.ya, stackAlloc = Module.stackAlloc = asm.za;
Module.cwrap = cwrap, Module.getValue = getValue;
var calledRun;
dependenciesFulfilled = function runCaller() {
calledRun || run(), calledRun || (dependenciesFulfilled = runCaller);
};
function run(args) {
if (args = args || arguments_, runDependencies > 0 || (preRun(), runDependencies > 0))
return;
function doRun() {
calledRun || (calledRun = !0, Module.calledRun = !0, !ABORT && (initRuntime(), readyPromiseResolve(Module), Module.onRuntimeInitialized && Module.onRuntimeInitialized(), postRun()));
}
Module.setStatus ? (Module.setStatus("Running..."), setTimeout(function() {
setTimeout(function() {
Module.setStatus("");
}, 1), doRun();
}, 1)) : doRun();
}
if (Module.run = run, Module.preInit)
for (typeof Module.preInit == "function" && (Module.preInit = [Module.preInit]); Module.preInit.length > 0; )
Module.preInit.pop()();
return run(), createModule2;
};
})();
typeof exports == "object" && typeof module == "object" ? module.exports = createModule : typeof define == "function" && define.amd ? define([], function() {
return createModule;
}) : typeof exports == "object" && (exports.createModule = createModule);
}
});
// ../../node_modules/@yarnpkg/libzip/lib/makeInterface.js
var require_makeInterface = __commonJS({
"../../node_modules/@yarnpkg/libzip/lib/makeInterface.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.makeInterface = exports.Errors = void 0;
var number64 = [
"number",
"number"
// high
], Errors;
(function(Errors2) {
Errors2[Errors2.ZIP_ER_OK = 0] = "ZIP_ER_OK", Errors2[Errors2.ZIP_ER_MULTIDISK = 1] = "ZIP_ER_MULTIDISK", Errors2[Errors2.ZIP_ER_RENAME = 2] = "ZIP_ER_RENAME", Errors2[Errors2.ZIP_ER_CLOSE = 3] = "ZIP_ER_CLOSE", Errors2[Errors2.ZIP_ER_SEEK = 4] = "ZIP_ER_SEEK", Errors2[Errors2.ZIP_ER_READ = 5] = "ZIP_ER_READ", Errors2[Errors2.ZIP_ER_WRITE = 6] = "ZIP_ER_WRITE", Errors2[Errors2.ZIP_ER_CRC = 7] = "ZIP_ER_CRC", Errors2[Errors2.ZIP_ER_ZIPCLOSED = 8] = "ZIP_ER_ZIPCLOSED", Errors2[Errors2.ZIP_ER_NOENT = 9] = "ZIP_ER_NOENT", Errors2[Errors2.ZIP_ER_EXISTS = 10] = "ZIP_ER_EXISTS", Errors2[Errors2.ZIP_ER_OPEN = 11] = "ZIP_ER_OPEN", Errors2[Errors2.ZIP_ER_TMPOPEN = 12] = "ZIP_ER_TMPOPEN", Errors2[Errors2.ZIP_ER_ZLIB = 13] = "ZIP_ER_ZLIB", Errors2[Errors2.ZIP_ER_MEMORY = 14] = "ZIP_ER_MEMORY", Errors2[Errors2.ZIP_ER_CHANGED = 15] = "ZIP_ER_CHANGED", Errors2[Errors2.ZIP_ER_COMPNOTSUPP = 16] = "ZIP_ER_COMPNOTSUPP", Errors2[Errors2.ZIP_ER_EOF = 17] = "ZIP_ER_EOF", Errors2[Errors2.ZIP_ER_INVAL = 18] = "ZIP_ER_INVAL", Errors2[Errors2.ZIP_ER_NOZIP = 19] = "ZIP_ER_NOZIP", Errors2[Errors2.ZIP_ER_INTERNAL = 20] = "ZIP_ER_INTERNAL", Errors2[Errors2.ZIP_ER_INCONS = 21] = "ZIP_ER_INCONS", Errors2[Errors2.ZIP_ER_REMOVE = 22] = "ZIP_ER_REMOVE", Errors2[Errors2.ZIP_ER_DELETED = 23] = "ZIP_ER_DELETED", Errors2[Errors2.ZIP_ER_ENCRNOTSUPP = 24] = "ZIP_ER_ENCRNOTSUPP", Errors2[Errors2.ZIP_ER_RDONLY = 25] = "ZIP_ER_RDONLY", Errors2[Errors2.ZIP_ER_NOPASSWD = 26] = "ZIP_ER_NOPASSWD", Errors2[Errors2.ZIP_ER_WRONGPASSWD = 27] = "ZIP_ER_WRONGPASSWD", Errors2[Errors2.ZIP_ER_OPNOTSUPP = 28] = "ZIP_ER_OPNOTSUPP", Errors2[Errors2.ZIP_ER_INUSE = 29] = "ZIP_ER_INUSE", Errors2[Errors2.ZIP_ER_TELL = 30] = "ZIP_ER_TELL", Errors2[Errors2.ZIP_ER_COMPRESSED_DATA = 31] = "ZIP_ER_COMPRESSED_DATA";
})(Errors = exports.Errors || (exports.Errors = {}));
var makeInterface = (libzip) => ({
// Those are getters because they can change after memory growth
get HEAP8() {
return libzip.HEAP8;
},
get HEAPU8() {
return libzip.HEAPU8;
},
errors: Errors,
SEEK_SET: 0,
SEEK_CUR: 1,
SEEK_END: 2,
ZIP_CHECKCONS: 4,
ZIP_CREATE: 1,
ZIP_EXCL: 2,
ZIP_TRUNCATE: 8,
ZIP_RDONLY: 16,
ZIP_FL_OVERWRITE: 8192,
ZIP_FL_COMPRESSED: 4,
ZIP_OPSYS_DOS: 0,
ZIP_OPSYS_AMIGA: 1,
ZIP_OPSYS_OPENVMS: 2,
ZIP_OPSYS_UNIX: 3,
ZIP_OPSYS_VM_CMS: 4,
ZIP_OPSYS_ATARI_ST: 5,
ZIP_OPSYS_OS_2: 6,
ZIP_OPSYS_MACINTOSH: 7,
ZIP_OPSYS_Z_SYSTEM: 8,
ZIP_OPSYS_CPM: 9,
ZIP_OPSYS_WINDOWS_NTFS: 10,
ZIP_OPSYS_MVS: 11,
ZIP_OPSYS_VSE: 12,
ZIP_OPSYS_ACORN_RISC: 13,
ZIP_OPSYS_VFAT: 14,
ZIP_OPSYS_ALTERNATE_MVS: 15,
ZIP_OPSYS_BEOS: 16,
ZIP_OPSYS_TANDEM: 17,
ZIP_OPSYS_OS_400: 18,
ZIP_OPSYS_OS_X: 19,
ZIP_CM_DEFAULT: -1,
ZIP_CM_STORE: 0,
ZIP_CM_DEFLATE: 8,
uint08S: libzip._malloc(1),
uint16S: libzip._malloc(2),
uint32S: libzip._malloc(4),
uint64S: libzip._malloc(8),
malloc: libzip._malloc,
free: libzip._free,
getValue: libzip.getValue,
open: libzip.cwrap("zip_open", "number", ["string", "number", "number"]),
openFromSource: libzip.cwrap("zip_open_from_source", "number", ["number", "number", "number"]),
close: libzip.cwrap("zip_close", "number", ["number"]),
discard: libzip.cwrap("zip_discard", null, ["number"]),
getError: libzip.cwrap("zip_get_error", "number", ["number"]),
getName: libzip.cwrap("zip_get_name", "string", ["number", "number", "number"]),
getNumEntries: libzip.cwrap("zip_get_num_entries", "number", ["number", "number"]),
delete: libzip.cwrap("zip_delete", "number", ["number", "number"]),
stat: libzip.cwrap("zip_stat", "number", ["number", "string", "number", "number"]),
statIndex: libzip.cwrap("zip_stat_index", "number", ["number", ...number64, "number", "number"]),
fopen: libzip.cwrap("zip_fopen", "number", ["number", "string", "number"]),
fopenIndex: libzip.cwrap("zip_fopen_index", "number", ["number", ...number64, "number"]),
fread: libzip.cwrap("zip_fread", "number", ["number", "number", "number", "number"]),
fclose: libzip.cwrap("zip_fclose", "number", ["number"]),
dir: {
add: libzip.cwrap("zip_dir_add", "number", ["number", "string"])
},
file: {
add: libzip.cwrap("zip_file_add", "number", ["number", "string", "number", "number"]),
getError: libzip.cwrap("zip_file_get_error", "number", ["number"]),
getExternalAttributes: libzip.cwrap("zip_file_get_external_attributes", "number", ["number", ...number64, "number", "number", "number"]),
setExternalAttributes: libzip.cwrap("zip_file_set_external_attributes", "number", ["number", ...number64, "number", "number", "number"]),
setMtime: libzip.cwrap("zip_file_set_mtime", "number", ["number", ...number64, "number", "number"]),
setCompression: libzip.cwrap("zip_set_file_compression", "number", ["number", ...number64, "number", "number"])
},
ext: {
countSymlinks: libzip.cwrap("zip_ext_count_symlinks", "number", ["number"])
},
error: {
initWithCode: libzip.cwrap("zip_error_init_with_code", null, ["number", "number"]),
strerror: libzip.cwrap("zip_error_strerror", "string", ["number"])
},
name: {
locate: libzip.cwrap("zip_name_locate", "number", ["number", "string", "number"])
},
source: {
fromUnattachedBuffer: libzip.cwrap("zip_source_buffer_create", "number", ["number", ...number64, "number", "number"]),
fromBuffer: libzip.cwrap("zip_source_buffer", "number", ["number", "number", ...number64, "number"]),
free: libzip.cwrap("zip_source_free", null, ["number"]),
keep: libzip.cwrap("zip_source_keep", null, ["number"]),
open: libzip.cwrap("zip_source_open", "number", ["number"]),
close: libzip.cwrap("zip_source_close", "number", ["number"]),
seek: libzip.cwrap("zip_source_seek", "number", ["number", ...number64, "number"]),
tell: libzip.cwrap("zip_source_tell", "number", ["number"]),
read: libzip.cwrap("zip_source_read", "number", ["number", "number", "number"]),
error: libzip.cwrap("zip_source_error", "number", ["number"]),
setMtime: libzip.cwrap("zip_source_set_mtime", "number", ["number", "number"])
},
struct: {
stat: libzip.cwrap("zipstruct_stat", "number", []),
statS: libzip.cwrap("zipstruct_statS", "number", []),
statName: libzip.cwrap("zipstruct_stat_name", "string", ["number"]),
statIndex: libzip.cwrap("zipstruct_stat_index", "number", ["number"]),
statSize: libzip.cwrap("zipstruct_stat_size", "number", ["number"]),
statCompSize: libzip.cwrap("zipstruct_stat_comp_size", "number", ["number"]),
statCompMethod: libzip.cwrap("zipstruct_stat_comp_method", "number", ["number"]),
statMtime: libzip.cwrap("zipstruct_stat_mtime", "number", ["number"]),
statCrc: libzip.cwrap("zipstruct_stat_crc", "number", ["number"]),
error: libzip.cwrap("zipstruct_error", "number", []),
errorS: libzip.cwrap("zipstruct_errorS", "number", []),
errorCodeZip: libzip.cwrap("zipstruct_error_code_zip", "number", ["number"])
}
});
exports.makeInterface = makeInterface;
}
});
// ../../node_modules/@yarnpkg/libzip/lib/sync.js
var require_sync = __commonJS({
"../../node_modules/@yarnpkg/libzip/lib/sync.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
exports.getLibzipPromise = exports.getLibzipSync = void 0;
var tslib_1 = (init_tslib_es62(), __toCommonJS(tslib_es6_exports2)), libzipSync_1 = tslib_1.__importDefault(require_libzipSync()), makeInterface_1 = require_makeInterface(), mod = null;
function getLibzipSync2() {
return mod === null && (mod = (0, makeInterface_1.makeInterface)((0, libzipSync_1.default)())), mod;
}
exports.getLibzipSync = getLibzipSync2;
async function getLibzipPromise() {
return getLibzipSync2();
}
exports.getLibzipPromise = getLibzipPromise;
}
});
// src/common/presets.ts
import { logger as logger2 } from "storybook/internal/node-logger";
import { CriticalPresetLoadError } from "storybook/internal/server-errors";
var import_ts_dedent2 = __toESM(require_dist(), 1);
// src/common/utils/interpret-files.ts
import { existsSync } from "node:fs";
import { extname } from "node:path";
import { ResolverFactory } from "oxc-resolver";
var typescriptFallbackExtensions = {
".js": [".ts", ".tsx"],
".mjs": [".mts"],
".cjs": [".cts"],
".jsx": [".tsx"]
}, supportedExtensions = storybookConfigExtensions;
function getInterpretedFile(pathToFile) {
return supportedExtensions.map((ext) => pathToFile.endsWith(ext) ? pathToFile : `${pathToFile}${ext}`).find((candidate) => existsSync(candidate));
}
var importResolver = new ResolverFactory({
extensions: [...supportedExtensions],
mainFields: ["module", "main"]
});
function resolveImport(id, options) {
try {
return resolveSync(id, options.basedir);
} catch (error) {
let ext = extname(id), fallbackExtensions = typescriptFallbackExtensions[ext];
if (!fallbackExtensions)
throw error;
let fallbackError = error, baseId = id.slice(0, -ext.length);
for (let fallbackExtension of fallbackExtensions)
try {
return resolveSync(`${baseId}${fallbackExtension}`, options.basedir);
} catch (err) {
fallbackError = err;
}
throw fallbackError;
}
}
function resolveSync(id, basedir) {
let result = importResolver.sync(basedir, id);
if (result.path)
return result.path;
throw new Error(result.error ?? `Cannot resolve module '${id}' from '${basedir}'`);
}
// src/common/utils/strip-abs-node-modules-path.ts
import { posix, sep } from "node:path";
function normalizePath(id) {
return posix.normalize(slash(id));
}
function stripAbsNodeModulesPath(absPath) {
let splits = absPath.split(`node_modules${sep}`);
return normalizePath(splits[splits.length - 1]);
}
// src/common/utils/validate-configuration-files.ts
import { resolve as resolve2 } from "node:path";
import { once } from "storybook/internal/node-logger";
import { MainFileMissingError } from "storybook/internal/server-errors";
var import_ts_dedent = __toESM(require_dist(), 1);
async function validateConfigurationFiles(configDir, cwd) {
let extensionsPattern = `{${Array.from(supportedExtensions).join(",")}}`, mainConfigMatches = await glob(slash(resolve2(configDir, `main${extensionsPattern}`)), {
cwd: cwd ?? process.cwd()
}), [mainConfigPath] = mainConfigMatches;
if (mainConfigMatches.length > 1 && once.warn(import_ts_dedent.dedent`
Multiple main files found in your configDir (${resolve2(configDir)}).
Storybook will use the first one found and ignore the others. Please remove the extra files.
`), !mainConfigPath)
throw new MainFileMissingError({ location: configDir });
}
// src/common/presets.ts
var isObject = (val) => val != null && typeof val == "object" && Array.isArray(val) === !1, isFunction = (val) => typeof val == "function";
function filterPresetsConfig(presetsConfig) {
return presetsConfig.filter((preset) => {
let presetName = typeof preset == "string" ? preset : preset.name;
return !/@storybook[\\\\/]preset-typescript/.test(presetName);
});
}
function resolvePresetFunction(input, presetOptions, storybookOptions) {
return isFunction(input) ? [...input({ ...storybookOptions, ...presetOptions })] : Array.isArray(input) ? [...input] : [];
}
var resolveAddonName = (configDir, name, options) => {
let resolved = safeResolveModule({ specifier: name, parent: configDir });
if (resolved && parse(name).name === "preset")
return {
type: "presets",
name: resolved
};
let presetFile = safeResolveModule({ specifier: join(name, "preset"), parent: configDir }), managerFile = safeResolveModule({ specifier: join(name, "manager"), parent: configDir }), previewFile = safeResolveModule({ specifier: join(name, "preview"), parent: configDir });
if (managerFile || previewFile || presetFile) {
let previewAnnotations = [];
if (previewFile) {
let parsedPreviewFile = stripAbsNodeModulesPath(previewFile);
parsedPreviewFile !== previewFile ? previewAnnotations.push({
bare: parsedPreviewFile,
absolute: previewFile
}) : previewAnnotations.push(previewFile);
}
return {
type: "virtual",
name,
presets: presetFile ? [{ name: presetFile, options }] : [],
managerEntries: managerFile ? [managerFile] : [],
previewAnnotations
};
}
if (resolved)
return {
type: "presets",
name: resolved
};
}, map = ({ configDir }) => (item) => {
let options = isObject(item) && item.options || void 0, name = isObject(item) ? item.name : item, resolved;
try {
resolved = resolveAddonName(configDir, name, options);
} catch {
logger2.error(
`Addon value should end in /manager or /preview or /register OR it should be a valid preset https://storybook.js.org/docs/addons/writing-presets/
${item}`
);
return;
}
if (!resolved) {
logger2.warn(`Could not resolve addon "${name}", skipping. Is it installed?`);
return;
}
return {
...options ? { options } : {},
...resolved
};
};
async function getContent(input) {
if (input.type === "virtual") {
let { type, name: name2, ...rest } = input;
return rest;
}
let name = input.name ? input.name : input;
return importModule(name);
}
async function loadPreset(input, level, storybookOptions) {
let presetName = input.name ? input.name : input;
try {
let presetOptions = input.options ? input.options : {}, contents = await getContent(input);
if (typeof contents == "function" && (contents = contents(storybookOptions, presetOptions)), Array.isArray(contents))
return await loadPresets(contents, level + 1, storybookOptions);
if (isObject(contents)) {
let { addons: addonsInput = [], presets: presetsInput = [], ...rest } = contents, filter = (i2) => !0;
storybookOptions.isCritical !== !0 && (storybookOptions.build?.test?.disabledAddons?.length || 0) > 0 && (filter = (i2) => {
let name = i2.name ? i2.name : i2;
return !storybookOptions.build?.test?.disabledAddons?.find((n2) => name.includes(n2));
});
let subPresets = resolvePresetFunction(
presetsInput,
presetOptions,
storybookOptions
).filter(filter), subAddons = resolvePresetFunction(addonsInput, presetOptions, storybookOptions).filter(
filter
);
return [
...await loadPresets([...subPresets], level + 1, storybookOptions),
...await loadPresets(
[...subAddons.map(map(storybookOptions))].filter(Boolean),
level + 1,
storybookOptions
),
{
name: presetName,
preset: rest,
options: presetOptions
}
];
}
throw new Error(import_ts_dedent2.dedent`
${input} is not a valid preset
`);
} catch (error) {
if (storybookOptions?.isCritical)
throw new CriticalPresetLoadError({
error,
presetName
});
let warning = level > 0 ? ` Failed to load preset: ${JSON.stringify(input)} on level ${level}` : ` Failed to load preset: ${JSON.stringify(input)}`;
return logger2.warn(warning), logger2.error(error), [];
}
}
async function loadPresets(presets, level, storybookOptions) {
return !presets || !Array.isArray(presets) || !presets.length ? [] : (await Promise.all(
presets.map(async (preset) => loadPreset(preset, level, storybookOptions))
)).reduce((acc, loaded) => acc.concat(loaded), []);
}
function applyPresets(presets, extension, config, args, storybookOptions) {
let presetResult = new Promise((res) => res(config));
return presets.length ? presets.reduce((accumulationPromise, { preset, options }) => {
let change = preset[extension];
if (!change)
return accumulationPromise;
if (typeof change == "function") {
let extensionFn = change, context = {
preset,
combinedOptions: {
...storybookOptions,
...args,
...options,
presetsList: presets,
presets: {
apply: async (ext, c3, a2 = {}) => applyPresets(presets, ext, c3, a2, storybookOptions)
}
}
};
return accumulationPromise.then(
(newConfig) => extensionFn.call(context.preset, newConfig, context.combinedOptions)
);
}
return accumulationPromise.then((newConfig) => Array.isArray(newConfig) && Array.isArray(change) ? [...newConfig, ...change] : isObject(newConfig) && isObject(change) ? { ...newConfig, ...change } : change);
}, presetResult) : presetResult;
}
async function getPresets(presets, storybookOptions) {
let loadedPresets = await loadPresets(presets, 0, storybookOptions);
return {
apply: async (extension, config, args = {}) => applyPresets(loadedPresets, extension, config, args, storybookOptions)
};
}
async function loadAllPresets(options) {
let { corePresets = [], overridePresets = [], ...restOptions } = options;
validateConfigurationFiles(options.configDir);
let mainUrl = getInterpretedFile(resolve(options.configDir, "main")), presetsConfig = [...corePresets, mainUrl, ...overridePresets], filteredPresetConfig = filterPresetsConfig(presetsConfig);
return filteredPresetConfig.length < presetsConfig.length && logger2.warn(
"Storybook now supports TypeScript natively. You can safely remove `@storybook/preset-typescript`."
), getPresets(filteredPresetConfig, restOptions);
}
// src/common/utils/file-cache.ts
import { createHash, randomBytes } from "node:crypto";
import { mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from "node:fs";
import { mkdir, readFile, readdir, rm } from "node:fs/promises";
import { tmpdir } from "node:os";
import { join as join2 } from "node:path";
// src/common/utils/write-file-with-retry.ts
import { writeFile } from "node:fs/promises";
async function writeFileWithRetry(file, data, options) {
for (let attempt = 1; attempt <= 5; attempt++)
try {
await writeFile(file, data, options);
return;
} catch (err) {
if (attempt < 5 && err instanceof Error && "code" in err && err.code === "EBUSY")
await new Promise((resolve9) => setTimeout(resolve9, 100));
else
throw err;
}
}
// src/common/utils/file-cache.ts
var FileSystemCache = class {
constructor(options = {}) {
this.prefix = (options.ns || options.prefix || "") + "-", this.hash_alg = options.hash_alg || "sha256", this.cache_dir = options.basePath || join2(tmpdir(), randomBytes(15).toString("base64").replace(/\//g, "-")), this.ttl = options.ttl || 0, createHash(this.hash_alg), mkdirSync(this.cache_dir, { recursive: !0 });
}
generateHash(name) {
return join2(this.cache_dir, this.prefix + createHash(this.hash_alg).update(name).digest("hex"));
}
isExpired(parsed, now) {
return parsed.ttl != null && now > parsed.ttl;
}
parseCacheData(data, fallback) {
let parsed = JSON.parse(data);
return this.isExpired(parsed, Date.now()) ? fallback : parsed.content;
}
parseSetData(key, data, opts = {}) {
let ttl = opts.ttl ?? this.ttl;
return JSON.stringify({ key, content: data, ...ttl && { ttl: Date.now() + ttl * 1e3 } });
}
async get(name, fallback) {
try {
let data = await readFile(this.generateHash(name), "utf8");
return this.parseCacheData(data, fallback);
} catch {
return fallback;
}
}
getSync(name, fallback) {
try {
let data = readFileSync(this.generateHash(name), "utf8");
return this.parseCacheData(data, fallback);
} catch {
return fallback;
}
}
async set(name, data, orgOpts = {}) {
let opts = typeof orgOpts == "number" ? { ttl: orgOpts } : orgOpts;
await mkdir(this.cache_dir, { recursive: !0 }), await writeFileWithRetry(this.generateHash(name), this.parseSetData(name, data, opts), {
encoding: opts.encoding || "utf8"
});
}
setSync(name, data, orgOpts = {}) {
let opts = typeof orgOpts == "number" ? { ttl: orgOpts } : orgOpts;
mkdirSync(this.cache_dir, { recursive: !0 }), writeFileSync(this.generateHash(name), this.parseSetData(name, data, opts), {
encoding: opts.encoding || "utf8"
});
}
async setMany(items, options) {
await Promise.all(items.map((item) => this.set(item.key, item.content ?? item.value, options)));
}
setManySync(items, options) {
items.forEach((item) => this.setSync(item.key, item.content ?? item.value, options));
}
async remove(name) {
await rm(this.generateHash(name), { force: !0 });
}
removeSync(name) {
rmSync(this.generateHash(name), { force: !0 });
}
async clear() {
let files = await readdir(this.cache_dir);
await Promise.all(
files.filter((f) => f.startsWith(this.prefix)).map((f) => rm(join2(this.cache_dir, f), { force: !0 }))
);
}
clearSync() {
readdirSync(this.cache_dir).filter((f) => f.startsWith(this.prefix)).forEach((f) => rmSync(join2(this.cache_dir, f), { force: !0 }));
}
async getAll() {
let now = Date.now(), files = await readdir(this.cache_dir);
return (await Promise.all(
files.filter((f) => f.startsWith(this.prefix)).map((f) => readFile(join2(this.cache_dir, f), "utf8"))
)).map((data) => JSON.parse(data)).filter((entry) => entry.content && !this.isExpired(entry, now));
}
async load() {
return {
files: (await this.getAll()).map((entry) => ({
path: this.generateHash(entry.key),
value: entry.content,
key: entry.key
}))
};
}
};
function createFileSystemCache(options) {
return new FileSystemCache(options);
}
// src/common/utils/resolve-path-in-sb-cache.ts
import { join as join4 } from "node:path";
// ../../node_modules/empathic/package.mjs
import { env } from "node:process";
import { dirname, join as join3 } from "node:path";
import { existsSync as existsSync2, mkdirSync as mkdirSync2 } from "node:fs";
// ../../node_modules/empathic/access.mjs
import { accessSync, constants } from "node:fs";
function ok(path5, mode) {
try {
return accessSync(path5, mode), !0;
} catch {
return !1;
}
}
function writable(path5) {
return ok(path5, constants.W_OK);
}
// ../../node_modules/empathic/package.mjs
function up3(options) {
return up2("package.json", options);
}
function cache(name, options) {
options = options || {};
let dir = env.CACHE_DIR;
if (!dir || /^(1|0|true|false)$/.test(dir)) {
let pkg = up3(options);
if (dir = pkg && dirname(pkg)) {
let mods = join3(dir, "node_modules"), exists = existsSync2(mods);
if (!writable(exists ? mods : dir)) return;
dir = join3(mods, ".cache");
}
}
if (dir)
return dir = join3(dir, name), options.create && !existsSync2(dir) && mkdirSync2(dir, { recursive: !0 }), dir;
}
// src/common/utils/resolve-path-in-sb-cache.ts
function resolvePathInStorybookCache(fileOrDirectoryName, sub = "default") {
let cacheDirectory = cache("storybook");
cacheDirectory ||= join4(process.cwd(), "node_modules", ".cache", "storybook");
let version = versions_default.storybook || "unknown";
return join4(cacheDirectory, version, sub, fileOrDirectoryName);
}
// src/common/utils/cache.ts
var cache2 = createFileSystemCache({
basePath: resolvePathInStorybookCache("dev-server"),
ns: "storybook"
// Optional. A grouping namespace for items.
});
// src/common/utils/cli.ts
import { createWriteStream, mkdirSync as mkdirSync3 } from "node:fs";
import { copyFile, readFile as readFile2, realpath, rm as rm2, writeFile as writeFile2 } from "node:fs/promises";
import os from "node:os";
import { join as join5 } from "node:path";
// ../../node_modules/crypto-random-string/index.js
import { promisify } from "util";
import crypto2 from "crypto";
var randomBytesAsync = promisify(crypto2.randomBytes), urlSafeCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~".split(""), numericCharacters = "0123456789".split(""), distinguishableCharacters = "CDEHKMPRTUWXY012458".split(""), asciiPrintableCharacters = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~".split(""), alphanumericCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""), generateForCustomCharacters = (length, characters) => {
let characterCount = characters.length, maxValidSelector = Math.floor(65536 / characterCount) * characterCount - 1, entropyLength = 2 * Math.ceil(1.1 * length), string = "", stringLength = 0;
for (; stringLength < length; ) {
let entropy = crypto2.randomBytes(entropyLength), entropyPosition = 0;
for (; entropyPosition < entropyLength && stringLength < length; ) {
let entropyValue = entropy.readUInt16LE(entropyPosition);
entropyPosition += 2, !(entropyValue > maxValidSelector) && (string += characters[entropyValue % characterCount], stringLength++);
}
}
return string;
}, generateForCustomCharactersAsync = async (length, characters) => {
let characterCount = characters.length, maxValidSelector = Math.floor(65536 / characterCount) * characterCount - 1, entropyLength = 2 * Math.ceil(1.1 * length), string = "", stringLength = 0;
for (; stringLength < length; ) {
let entropy = await randomBytesAsync(entropyLength), entropyPosition = 0;
for (; entropyPosition < entropyLength && stringLength < length; ) {
let entropyValue = entropy.readUInt16LE(entropyPosition);
entropyPosition += 2, !(entropyValue > maxValidSelector) && (string += characters[entropyValue % characterCount], stringLength++);
}
}
return string;
}, generateRandomBytes = (byteLength, type, length) => crypto2.randomBytes(byteLength).toString(type).slice(0, length), generateRandomBytesAsync = async (byteLength, type, length) => (await randomBytesAsync(byteLength)).toString(type).slice(0, length), allowedTypes = /* @__PURE__ */ new Set([
void 0,
"hex",
"base64",
"url-safe",
"numeric",
"distinguishable",
"ascii-printable",
"alphanumeric"
]), createGenerator = (generateForCustomCharacters2, generateRandomBytes2) => ({ length, type, characters }) => {
if (!(length >= 0 && Number.isFinite(length)))
throw new TypeError("Expected a `length` to be a non-negative finite number");
if (type !== void 0 && characters !== void 0)
throw new TypeError("Expected either `type` or `characters`");
if (characters !== void 0 && typeof characters != "string")
throw new TypeError("Expected `characters` to be string");
if (!allowedTypes.has(type))
throw new TypeError(`Unknown type: ${type}`);
if (type === void 0 && characters === void 0 && (type = "hex"), type === "hex" || type === void 0 && characters === void 0)
return generateRandomBytes2(Math.ceil(length * 0.5), "hex", length);
if (type === "base64")
return generateRandomBytes2(Math.ceil(length * 0.75), "base64", length);
if (type === "url-safe")
return generateForCustomCharacters2(length, urlSafeCharacters);
if (type === "numeric")
return generateForCustomCharacters2(length, numericCharacters);
if (type === "distinguishable")
return generateForCustomCharacters2(length, distinguishableCharacters);
if (type === "ascii-printable")
return generateForCustomCharacters2(length, asciiPrintableCharacters);
if (type === "alphanumeric")
return generateForCustomCharacters2(length, alphanumericCharacters);
if (characters.length === 0)
throw new TypeError("Expected `characters` string length to be greater than or equal to 1");
if (characters.length > 65536)
throw new TypeError("Expected `characters` string length to be less or equal to 65536");
return generateForCustomCharacters2(length, characters.split(""));
}, cryptoRandomString = createGenerator(generateForCustomCharacters, generateRandomBytes);
cryptoRandomString.async = createGenerator(generateForCustomCharactersAsync, generateRandomBytesAsync);
var crypto_random_string_default = cryptoRandomString;
// ../../node_modules/unique-string/index.js
function uniqueString() {
return crypto_random_string_default({ length: 32 });
}
// src/common/satellite-addons.ts
var satellite_addons_default = [
"@storybook/test-runner",
"@chromatic-com/storybook",
"@storybook/addon-designs",
"@storybook/addon-svelte-csf",
"@storybook/addon-coverage",
"@storybook/addon-webpack5-compiler-babel",
"@storybook/addon-webpack5-compiler-swc",
"@storybook/addon-mcp",
// Storybook for React Native related packages
// TODO: For Storybook 10, we should check about possible automigrations
"@storybook/addon-ondevice-actions",
"@storybook/addon-ondevice-backgrounds",
"@storybook/addon-ondevice-controls",
"@storybook/addon-ondevice-notes",
"@storybook/react-native"
];
// src/common/utils/cli.ts
var tempDir = () => realpath(os.tmpdir()), getPath = async (prefix = "") => join5(await tempDir(), prefix + uniqueString());
async function temporaryDirectory({ prefix = "" } = {}) {
let directory = await getPath(prefix);
return mkdirSync3(directory), directory;
}
async function temporaryFile({ name, extension } = {}) {
if (name) {
if (extension != null)
throw new Error("The `name` and `extension` options are mutually exclusive");
return join5(await temporaryDirectory(), name);
}
return await getPath() + (extension == null ? "" : "." + extension.replace(/^\./, ""));
}
function parseList(str) {
return str.split(",").map((item) => item.trim()).filter((item) => item.length > 0);
}
function getEnvConfig(program, configEnv) {
Object.keys(configEnv).forEach((fieldName) => {
let envVarName = configEnv[fieldName], envVarValue = process.env[envVarName];
envVarValue && (program[fieldName] = envVarValue);
});
}
var createLogStream = async (logFileName = "storybook.log") => {
let finalLogPath = join5(process.cwd(), logFileName), temporaryLogPath = await temporaryFile({ name: logFileName }), logStream = createWriteStream(temporaryLogPath, { encoding: "utf8" });
return new Promise((resolve9, reject) => {
logStream.once("open", () => {
let clearLogFile = async () => writeFile2(temporaryLogPath, ""), removeLogFile = async () => rm2(temporaryLogPath, { recursive: !0, force: !0 });
resolve9({ logStream, moveLogFile: async () => copyFile(temporaryLogPath, finalLogPath).then(removeLogFile), clearLogFile, removeLogFile, readLogFile: async () => readFile2(temporaryLogPath, { encoding: "utf8" }) });
}), logStream.once("error", reject);
});
}, isCorePackage = (pkg) => !!versions_default[pkg], isSatelliteAddon = (pkg) => satellite_addons_default.includes(pkg);
// src/common/utils/check-addon-order.ts
import { logger as logger3 } from "storybook/internal/node-logger";
var predicateFor = (addon) => (entry) => {
let name = entry.name || entry;
return name && name.replaceAll(/(\\){1,2}/g, "/").includes(addon);
}, isCorrectOrder = (addons, before, after) => {
let essentialsIndex = addons.findIndex(predicateFor("@storybook/addon-essentials")), beforeIndex = addons.findIndex(predicateFor(before.name)), afterIndex = addons.findIndex(predicateFor(after.name));
return beforeIndex === -1 && before.inEssentials && (beforeIndex = essentialsIndex), afterIndex === -1 && after.inEssentials && (afterIndex = essentialsIndex), beforeIndex !== -1 && afterIndex !== -1 && beforeIndex <= afterIndex;
}, checkAddonOrder = async ({ before, after, configFile, getConfig }) => {
try {
let config = await getConfig(configFile);
if (!config?.addons) {
logger3.warn("Unable to find 'addons' config in main Storybook config");
return;
}
if (!isCorrectOrder(config.addons, before, after)) {
let orEssentials = " (or '@storybook/addon-essentials')", beforeText = `'${before.name}'${before.inEssentials ? orEssentials : ""}`, afterText = `'${after.name}'${after.inEssentials ? orEssentials : ""}`;
logger3.warn(
`Expected ${beforeText} to be listed before ${afterText} in main Storybook config.`
);
}
} catch {
logger3.warn(`Unable to load config file: ${configFile}`);
}
};
// src/common/utils/common-glob-options.ts
var NODE_MODULES_RE = /node_modules/, commonGlobOptions = (glob2) => NODE_MODULES_RE.test(glob2) ? {} : { ignore: ["**/node_modules/**"] };
// src/common/utils/framework.ts
import { SupportedBuilder, SupportedFramework, SupportedRenderer } from "storybook/internal/types";
var frameworkToRenderer = {
// frameworks
[SupportedFramework.ANGULAR]: SupportedRenderer.ANGULAR,
[SupportedFramework.ANGULAR_VITE]: SupportedRenderer.ANGULAR,
[SupportedFramework.EMBER]: SupportedRenderer.EMBER,
[SupportedFramework.HTML_VITE]: SupportedRenderer.HTML,
[SupportedFramework.NEXTJS]: SupportedRenderer.REACT,
[SupportedFramework.NEXTJS_VITE]: SupportedRenderer.REACT,
[SupportedFramework.PREACT_VITE]: SupportedRenderer.PREACT,
[SupportedFramework.QWIK]: SupportedRenderer.QWIK,
[SupportedFramework.REACT_VITE]: SupportedRenderer.REACT,
[SupportedFramework.REACT_WEBPACK5]: SupportedRenderer.REACT,
[SupportedFramework.SERVER_WEBPACK5]: SupportedRenderer.SERVER,
[SupportedFramework.SOLID]: SupportedRenderer.SOLID,
[SupportedFramework.SVELTE_VITE]: SupportedRenderer.SVELTE,
[SupportedFramework.SVELTEKIT]: SupportedRenderer.SVELTE,
[SupportedFramework.TANSTACK_REACT]: SupportedRenderer.REACT,
[SupportedFramework.VUE3_VITE]: SupportedRenderer.VUE3,
[SupportedFramework.WEB_COMPONENTS_VITE]: SupportedRenderer.WEB_COMPONENTS,
[SupportedFramework.REACT_RSBUILD]: SupportedRenderer.REACT,
[SupportedFramework.VUE3_RSBUILD]: SupportedRenderer.VUE3,
[SupportedFramework.HTML_RSBUILD]: SupportedRenderer.HTML,
[SupportedFramework.WEB_COMPONENTS_RSBUILD]: SupportedRenderer.WEB_COMPONENTS,
[SupportedFramework.REACT_NATIVE_WEB_VITE]: SupportedRenderer.REACT,
[SupportedFramework.NUXT]: SupportedRenderer.VUE3,
// renderers
[SupportedRenderer.HTML]: SupportedRenderer.HTML,
[SupportedRenderer.PREACT]: SupportedRenderer.PREACT,
[SupportedRenderer.REACT_NATIVE]: SupportedRenderer.REACT_NATIVE,
[SupportedRenderer.REACT]: SupportedRenderer.REACT,
[SupportedRenderer.SERVER]: SupportedRenderer.SERVER,
[SupportedRenderer.SVELTE]: SupportedRenderer.SVELTE,
[SupportedRenderer.VUE3]: SupportedRenderer.VUE3,
[SupportedRenderer.WEB_COMPONENTS]: SupportedRenderer.WEB_COMPONENTS
}, frameworkToBuilder = {
// frameworks
[SupportedFramework.ANGULAR]: SupportedBuilder.WEBPACK5,
[SupportedFramework.ANGULAR_VITE]: SupportedBuilder.VITE,
[SupportedFramework.EMBER]: SupportedBuilder.WEBPACK5,
[SupportedFramework.HTML_VITE]: SupportedBuilder.VITE,
[SupportedFramework.NEXTJS]: SupportedBuilder.WEBPACK5,
[SupportedFramework.NEXTJS_VITE]: SupportedBuilder.VITE,
[SupportedFramework.PREACT_VITE]: SupportedBuilder.VITE,
[SupportedFramework.REACT_NATIVE_WEB_VITE]: SupportedBuilder.VITE,
[SupportedFramework.REACT_VITE]: SupportedBuilder.VITE,
[SupportedFramework.REACT_WEBPACK5]: SupportedBuilder.WEBPACK5,
[SupportedFramework.SERVER_WEBPACK5]: SupportedBuilder.WEBPACK5,
[SupportedFramework.SVELTE_VITE]: SupportedBuilder.VITE,
[SupportedFramework.SVELTEKIT]: SupportedBuilder.VITE,
[SupportedFramework.TANSTACK_REACT]: SupportedBuilder.VITE,
[SupportedFramework.VUE3_VITE]: SupportedBuilder.VITE,
[SupportedFramework.WEB_COMPONENTS_VITE]: SupportedBuilder.VITE,
[SupportedFramework.QWIK]: SupportedBuilder.VITE,
[SupportedFramework.SOLID]: SupportedBuilder.VITE,
[SupportedFramework.NUXT]: SupportedBuilder.VITE,
[SupportedFramework.REACT_RSBUILD]: SupportedBuilder.RSBUILD,
[SupportedFramework.VUE3_RSBUILD]: SupportedBuilder.RSBUILD,
[SupportedFramework.HTML_RSBUILD]: SupportedBuilder.RSBUILD,
[SupportedFramework.WEB_COMPONENTS_RSBUILD]: SupportedBuilder.RSBUILD
};
// src/common/utils/get-builder-options.ts
async function getBuilderOptions(options) {
let framework = await options.presets.apply("framework", {}, options);
if (typeof framework != "string" && framework?.options?.builder)
return framework.options.builder;
let { builder } = await options.presets.apply("core", {}, options);
return typeof builder != "string" && builder?.options ? builder.options : {};
}
// src/common/utils/get-framework-name.ts
var import_ts_dedent4 = __toESM(require_dist(), 1);
// src/common/utils/get-storybook-info.ts
import { existsSync as existsSync3, readFileSync as readFileSync3 } from "node:fs";
import { basename, dirname as dirname3, join as join8 } from "node:path";
import {
CoreWebpackCompiler,
SupportedBuilder as SupportedBuilder2,
SupportedFramework as SupportedFramework2,
SupportedRenderer as SupportedRenderer2
} from "storybook/internal/types";
// src/shared/constants/config-folder.ts
var RN_STORYBOOK_DIR = ".rnstorybook";
// src/common/js-package-manager/JsPackageManager.ts
import { readFileSync as readFileSync2, writeFileSync as writeFileSync2 } from "node:fs";
import { dirname as dirname2, isAbsolute, join as join6, normalize, resolve as resolve3 } from "node:path";
import { logger as logger5, prompt } from "storybook/internal/node-logger";
var import_picocolors = __toESM(require_picocolors(), 1);
import { coerce, gt, satisfies, validRange } from "semver";
// src/common/utils/HandledError.ts
var HandledError = class extends Error {
constructor(error) {
super(String(error));
this.handled = !0;
typeof error != "string" && (this.cause = error);
}
};
// src/common/js-package-manager/vite-plus-versions.ts
import { logger as logger4 } from "storybook/internal/node-logger";
var cachedVersions;
async function getVitePlusVersions() {
if (cachedVersions !== void 0)
return cachedVersions;
try {
let mod = await import("vite-plus/versions"), versions = mod.versions ?? mod;
if (versions && typeof versions.vite == "string")
return logger4.debug(`Detected vite-plus: vite=${versions.vite}, vitest=${versions.vitest ?? "N/A"}`), cachedVersions = versions, versions;
} catch {
}
return cachedVersions = null, null;
}
function clearVitePlusCache() {
cachedVersions = void 0;
}
// src/common/js-package-manager/JsPackageManager.ts
var PackageManagerName = /* @__PURE__ */ ((PackageManagerName2) => (PackageManagerName2.NPM = "npm", PackageManagerName2.YARN1 = "yarn1", PackageManagerName2.YARN2 = "yarn2", PackageManagerName2.PNPM = "pnpm", PackageManagerName2.BUN = "bun", PackageManagerName2))(PackageManagerName || {}), indentSymbol = /* @__PURE__ */ Symbol("indent"), PACKAGE_MANAGER_LABEL = {
npm: "npm",
yarn1: "Yarn Classic (v1)",
yarn2: "Yarn Berry",
pnpm: "pnpm",
bun: "Bun"
};
function isValidPackageManagerName(name) {
return Object.hasOwn(PACKAGE_MANAGER_LABEL, name);
}
function getPrettyPackageManagerName(packageManager) {
return packageManager ? isValidPackageManagerName(packageManager) ? PACKAGE_MANAGER_LABEL[packageManager] : packageManager : "unknown package manager";
}
function getPackageDetails(pkg) {
let idx = pkg.lastIndexOf("@");
if (idx <= 0)
return [pkg, void 0];
let packageName = pkg.slice(0, idx), packageVersion = pkg.slice(idx + 1);
return [packageName, packageVersion];
}
var JsPackageManager = class _JsPackageManager {
static {
/** Cache for latest version results to avoid repeated network calls. */
this.latestVersionCache = /* @__PURE__ */ new Map();
}
static {
/** Cache for installed version results to avoid repeated file system calls. */
this.installedVersionCache = /* @__PURE__ */ new Map();
}
static {
/** Cache for package.json files to avoid repeated file system calls. */
this.packageJsonCache = /* @__PURE__ */ new Map();
}
constructor(options) {
this.cwd = options?.cwd || process.cwd(), this.instanceDir = options?.configDir ? isAbsolute(options?.configDir) ? dirname2(options?.configDir) : dirname2(join6(this.cwd, options?.configDir)) : this.cwd, this.packageJsonPaths = _JsPackageManager.listAllPackageJsonPaths(
this.instanceDir,
options?.storiesPaths
), this.primaryPackageJson = this.#getPrimaryPackageJson();
}
isStorybookInMonorepo() {
let turboJsonPath = up2("turbo.json", { last: getProjectRoot() }), rushJsonPath = up2("rush.json", { last: getProjectRoot() }), nxJsonPath = up2("nx.json", { last: getProjectRoot() });
if (turboJsonPath || rushJsonPath || nxJsonPath)
return !0;
let packageJsonPaths = findFilesUp(["package.json"]);
if (packageJsonPaths.length === 0)
return !1;
for (let packageJsonPath of packageJsonPaths) {
let packageJsonFile = readFileSync2(packageJsonPath, "utf8");
if (JSON.parse(packageJsonFile).workspaces)
return !0;
}
return !1;
}
async installDependencies(options) {
await prompt.executeTaskWithSpinner(() => this.runInstall(options), {
id: "install-dependencies",
intro: "Installing dependencies...",
error: "Installation of dependencies failed!",
success: "Dependencies installed"
}), this.clearInstalledVersionCache();
}
async precheckStorybookPackageInstall(options) {
}
async dedupeDependencies(options) {
await prompt.executeTask(
(_signal) => this.runInternalCommand("dedupe", [...options?.force ? ["--force"] : []], this.cwd),
{
intro: "Deduplicating dependencies...",
error: "An error occurred while deduplicating dependencies.",
success: "Dependencies deduplicated"
}
), this.clearInstalledVersionCache();
}
/** Read the `package.json` file available in the provided directory */
static getPackageJson(packageJsonPath) {
let absolutePath = normalize(resolve3(packageJsonPath)), cached = _JsPackageManager.packageJsonCache.get(absolutePath);
if (cached)
return logger5.debug(`Using cached package.json for ${absolutePath}...`), cached;
let jsonContent = readFileSync2(absolutePath, "utf8"), packageJSON = JSON.parse(jsonContent);
packageJSON[indentSymbol] = detectIndent(jsonContent).indent ?? 2;
let result = {
...packageJSON,
dependencies: { ...packageJSON.dependencies || {} },
devDependencies: { ...packageJSON.devDependencies || {} },
peerDependencies: { ...packageJSON.peerDependencies || {} }
};
return _JsPackageManager.packageJsonCache.set(absolutePath, result), result;
}
#getIndent(filePath) {
try {
return _JsPackageManager.getPackageJson(filePath)[indentSymbol];
} catch {
return 2;
}
}
writePackageJson(packageJson, directory = this.cwd) {
let packageJsonToWrite = { ...packageJson };
["dependencies", "devDependencies", "peerDependencies"].forEach((type) => {
packageJsonToWrite[type] && Object.keys(packageJsonToWrite[type]).length === 0 && delete packageJsonToWrite[type];
});
let filePath = join6(directory, "package.json"), indent = this.#getIndent(filePath), packageJsonPath = normalize(resolve3(directory, "package.json")), content = `${JSON.stringify(packageJsonToWrite, null, indent)}
`;
writeFileSync2(packageJsonPath, content, "utf8");
let cachedPackageJson = packageJsonToWrite;
cachedPackageJson.dependencies = { ...packageJsonToWrite.dependencies || {} }, cachedPackageJson.devDependencies = { ...packageJsonToWrite.devDependencies || {} }, cachedPackageJson.peerDependencies = { ...packageJsonToWrite.peerDependencies || {} }, cachedPackageJson[indentSymbol] = indent, _JsPackageManager.packageJsonCache.set(packageJsonPath, cachedPackageJson);
}
getAllDependencies() {
let allDependencies = {};
for (let packageJsonPath of this.packageJsonPaths) {
let packageJson = _JsPackageManager.getPackageJson(packageJsonPath), { dependencies, devDependencies, peerDependencies } = packageJson;
Object.assign(allDependencies, dependencies, devDependencies, peerDependencies);
}
return allDependencies;
}
isDependencyInstalled(dependency) {
return Object.keys(this.getAllDependencies()).includes(dependency);
}
/**
* Resolve the effective version/range of a declared dependency: the installed version if present,
* otherwise the declared semver range. Returns null when the package is not declared or only a
* non-semver specifier is declared. PNPMProxy additionally resolves pnpm `catalog:` references.
*/
async getDeclaredVersionSpecifier(packageName) {
let installed = await this.getInstalledVersion(packageName);
if (installed)
return installed;
let declared = this.getAllDependencies()[packageName];
return declared && validRange(declared) ? declared : null;
}
/**
* Pin `packages` to `version`, mirroring how `anchorPackage` is declared. The base implementation
* pins each directly (`pkg@version`). PNPMProxy overrides this to honor pnpm catalogs: when
* `anchorPackage` is declared through a catalog, the packages are registered in that catalog and
* referenced as `catalog:` instead. Returns the install specifiers to write to package.json.
*/
applyVersionToRelatedPackages(packages, version, _anchorPackage) {
return packages.map((pkg) => `${pkg}@${version}`);
}
/**
* Add dependencies to a project using `yarn add` or `npm install`.
*
* @example
*
* ```ts
* addDependencies(options, [
* `@storybook/react@${storybookVersion}`,
* `@storybook/addon-links@${linksVersion}`,
* ]);
* ```
*
* @param {Object} options Contains `skipInstall`, `packageJson` and `installAsDevDependencies`
* which we use to determine how we install packages.
* @param {Array} dependencies Contains a list of packages to add.
*/
async addDependencies(options, dependencies) {
let {
skipInstall,
writeOutputToFile = !0,
packageJsonInfo = this.primaryPackageJson
} = options;
if (skipInstall) {
let { operationDir, packageJson } = packageJsonInfo, dependenciesMap = {};
for (let dep of dependencies) {
let [packageName, packageVersion] = getPackageDetails(dep);
dependenciesMap[packageName] = packageVersion ?? "latest";
}
let targetDeps = packageJson[options.type];
Object.assign(targetDeps, dependenciesMap), this.writePackageJson(packageJson, operationDir);
} else
try {
let result = this.runAddDeps(
dependencies,
options.type === "devDependencies",
writeOutputToFile
);
return this.clearInstalledVersionCache(), result;
} catch (e) {
throw logger5.error(`
An error occurred while adding dependencies to your package.json:`), logger5.log(String(e)), new HandledError(e);
}
}
/**
* Removing dependencies from the package.json file, which is found first starting from the
* instance root. The method does not run a package manager install like `npm install`.
*
* @example
*
* ```ts
* removeDependencies([`@storybook/react`]);
* ```
*
* @param dependencies Contains a list of packages to remove.
*/
async removeDependencies(dependencies) {
for (let pjPath of this.packageJsonPaths)
try {
let packageJson = _JsPackageManager.getPackageJson(pjPath), modified = !1;
if (dependencies.forEach((dep) => {
packageJson.dependencies && packageJson.dependencies[dep] && (delete packageJson.dependencies[dep], modified = !0), packageJson.devDependencies && packageJson.devDependencies[dep] && (delete packageJson.devDependencies[dep], modified = !0), packageJson.peerDependencies && packageJson.peerDependencies[dep] && (delete packageJson.peerDependencies[dep], modified = !0);
}), modified) {
this.writePackageJson(packageJson, dirname2(pjPath));
break;
}
} catch (e) {
logger5.warn(`Could not process ${pjPath} for dependency removal: ${String(e)}`);
}
}
/**
* Return an array of strings matching following format: `<storybook_package_name>@<package_latest_version>`
*
* For packages in the storybook monorepo, when the latest version is equal to the version of the
* current CLI the version is not added to the string.
*
* When a package is in the monorepo, and the version is not equal to the CLI version, the version
* is taken from the versions.ts file and added to the string.
*
* When a package is not in the monorepo, we don't change the package version and return the package name as is.
* The package manager will resolve the latest version of the package upon installing it.
*
* @param packages
*/
getVersionedPackages(packages) {
return Promise.all(
packages.map(async (pkg) => {
let [packageName, packageVersion] = getPackageDetails(pkg);
if (!(packageName in versions_default))
return pkg;
let latestInRange = await this.latestVersion(packageName, packageVersion), currentVersion = versions_default[packageName];
return currentVersion === latestInRange || !currentVersion ? `${packageName}@^${latestInRange}` : `${packageName}@${currentVersion}`;
})
);
}
/**
* Return an array of string standing for the latest version of the input packages. To be able to
* identify which version goes with which package the order of the input array is keep.
*
* @param packageNames
*/
getVersions(...packageNames) {
return Promise.all(
packageNames.map((packageName) => this.getVersion(packageName))
);
}
/**
* Return the latest version of the input package available on npmjs registry. If constraint are
* provided it return the latest version matching the constraints.
*
* For `@storybook/*` packages the latest version is retrieved from `cli/src/versions.json` file
* directly
*
* @param packageName The name of the package
* @param constraint A valid semver constraint, example: '1.x || >=2.5.0 || 5.0.0 - 7.2.3'
*/
async getVersion(packageName, constraint) {
let current;
packageName in versions_default && (current = versions_default[packageName]);
let latest;
try {
if (latest = await this.latestVersion(packageName, constraint), !latest)
throw new Error(`No version found for ${packageName}`);
} catch (e) {
if (current)
return logger5.warn(`
${import_picocolors.default.yellow(String(e))}`), current;
throw logger5.error(`
${import_picocolors.default.red(String(e))}`), new HandledError(e);
}
return `^${current && (!constraint || satisfies(current, constraint)) && gt(current, latest) ? current : latest}`;
}
/**
* Get the latest version of the package available on npmjs.com. If constraint is set then it
* returns a version satisfying it, otherwise the latest version available is returned.
*
* @param packageName Name of the package
* @param constraint Version range to use to constraint the returned version
*/
async latestVersion(packageName, constraint) {
let cacheKey = constraint ? `${packageName}@${constraint}` : packageName, cachedVersion = _JsPackageManager.latestVersionCache.get(cacheKey);
if (cachedVersion)
return logger5.debug(`Using cached version for ${packageName}...`), cachedVersion;
let result;
logger5.debug(`Getting CLI versions from NPM for ${packageName}...`);
try {
if (!constraint)
result = await this.runGetVersions(packageName, !1);
else {
let latestVersionSatisfyingTheConstraint = (await this.runGetVersions(packageName, !0)).reverse().find((version) => satisfies(version, constraint));
invariant(
latestVersionSatisfyingTheConstraint != null,
`No version satisfying the constraint: ${packageName}${constraint}`
), result = latestVersionSatisfyingTheConstraint;
}
return _JsPackageManager.latestVersionCache.set(cacheKey, result), result;
} catch (e) {
return logger5.debug(`Failed to fetch the latest version for ${packageName}: ${String(e)}`), _JsPackageManager.latestVersionCache.set(cacheKey, null), null;
}
}
/**
* Clear the latest version cache. Useful for testing or when you want to refresh version
* information.
*
* @param packageName Optional package name to clear only specific entries. If not provided,
* clears all cache.
*/
static clearLatestVersionCache(packageName) {
packageName ? Array.from(_JsPackageManager.latestVersionCache.keys()).filter(
(key) => key === packageName || key.startsWith(`${packageName}@`)
).forEach((key) => _JsPackageManager.latestVersionCache.delete(key)) : _JsPackageManager.latestVersionCache.clear();
}
/**
* Clear the installed version cache for a specific package or all packages.
*
* @param packageName Optional package name to clear from cache. If not provided, clears all.
*/
clearInstalledVersionCache(packageName) {
packageName ? Array.from(_JsPackageManager.installedVersionCache.keys()).filter(
(key) => key.endsWith(`::${packageName}`)
).forEach((key) => _JsPackageManager.installedVersionCache.delete(key)) : _JsPackageManager.installedVersionCache.clear();
}
/**
* Clear both the latest version cache and installed version cache. This should be called after
* any operation that modifies dependencies.
*/
clearAllVersionCaches() {
_JsPackageManager.clearLatestVersionCache(), this.clearInstalledVersionCache();
}
addStorybookCommandInScripts(options) {
let storybookCmd = `storybook dev -p ${options?.port ?? 6006}`, buildStorybookCmd = "storybook build", preCommand = options?.preCommand ? this.getRunCommand(options.preCommand) : void 0;
this.addScripts({
storybook: [preCommand, storybookCmd].filter(Boolean).join(" && "),
"build-storybook": [preCommand, buildStorybookCmd].filter(Boolean).join(" && ")
});
}
addScripts(scripts) {
let { operationDir, packageJson } = this.#getPrimaryPackageJson();
packageJson.scripts = {
...packageJson.scripts,
...scripts
}, this.writePackageJson(packageJson, operationDir);
}
addPackageResolutions(versions) {
let { operationDir, packageJson } = this.#getPrimaryPackageJson(), resolutions = this.getResolutions(packageJson, versions);
this.writePackageJson({ ...packageJson, ...resolutions }, operationDir);
}
// TODO: Remove pnp compatibility code in SB11
/** Returns the installed (within node_modules or pnp zip) version of a specified package */
async getInstalledVersion(packageName) {
let cacheKey = packageName;
try {
let cachedVersion = _JsPackageManager.installedVersionCache.get(cacheKey);
if (cachedVersion !== void 0)
return logger5.debug(`Using cached installed version for ${packageName}...`), cachedVersion;
logger5.debug(`Getting installed version for ${packageName}...`);
let version = null, vitePlusVersions = await getVitePlusVersions();
if (vitePlusVersions?.[packageName] && (version = vitePlusVersions[packageName]), !version) {
let installations = await this.findInstallations([packageName]);
installations && (version = Object.entries(installations.dependencies)[0]?.[1]?.[0].version || null);
}
if (!version)
return logger5.debug(`No installations found for ${packageName}`), _JsPackageManager.installedVersionCache.set(cacheKey, null), null;
let coercedVersion = coerce(version, { includePrerelease: !0 })?.toString() ?? version;
return logger5.debug(`Installed version for ${packageName}: ${coercedVersion}`), _JsPackageManager.installedVersionCache.set(cacheKey, coercedVersion), coercedVersion;
} catch (e) {
return logger5.error(`Error getting installed version for ${packageName}: ${String(e)}`), _JsPackageManager.installedVersionCache.set(cacheKey, null), null;
}
}
async isPackageInstalled(packageName) {
return await this.getInstalledVersion(packageName) !== null;
}
/**
* Searches for a dependency/devDependency in all package.json files and returns the version of
* the dependency.
*/
getDependencyVersion(dependency) {
return logger5.debug(`Getting dependency version for ${dependency}...`), this.packageJsonPaths.map((path5) => {
let packageJson = _JsPackageManager.getPackageJson(path5);
return packageJson.dependencies?.[dependency] ?? packageJson.devDependencies?.[dependency];
}).filter(Boolean)[0] ?? null;
}
// Helper to read and check a package.json for storybook dependency
static hasStorybookDependency(packageJsonPath) {
try {
let content = readFileSync2(packageJsonPath, "utf-8"), packageJson = JSON.parse(content);
return !!(packageJson.dependencies && packageJson.dependencies.storybook || packageJson.devDependencies && packageJson.devDependencies.storybook);
} catch {
return !1;
}
}
// Helper to read and check a package.json for storybook dependency
static hasAnyStorybookDependency(packageJsonPath) {
try {
let content = readFileSync2(packageJsonPath, "utf-8"), packageJson = JSON.parse(content), allDeps = {
...packageJson.dependencies,
...packageJson.devDependencies
};
return Object.keys(allDeps).some((dep) => dep.includes("storybook"));
} catch {
return !1;
}
}
/**
* Find the primary package.json file in the project root. The primary package.json file is the
* one that contains the `storybook` dependency. If no primary package.json file is found, the
* function will return the package.json file in the project root.
*/
#findPrimaryPackageJsonPath() {
for (let packageJsonPath of this.packageJsonPaths)
if (_JsPackageManager.hasStorybookDependency(packageJsonPath))
return packageJsonPath;
return this.packageJsonPaths[0] ?? resolve3(this.cwd, "package.json");
}
/** List all package.json files starting from the given directory and stopping at the project root. */
static listAllPackageJsonPaths(instanceDir, storiesPaths) {
let packageJsonPaths = findFilesUp(["package.json"], instanceDir);
if (!storiesPaths)
return packageJsonPaths;
let projectRoot = getProjectRoot(), relevantPackageJsons = globSync("**/package.json", {
cwd: projectRoot,
absolute: !0,
ignore: ["**/node_modules/**", "**/dist/**"]
}).filter((packageJsonPath) => {
let packageDir = dirname2(packageJsonPath);
return storiesPaths.some((storyPath) => storyPath.startsWith(packageDir));
});
return Array.from(/* @__PURE__ */ new Set([...packageJsonPaths, ...relevantPackageJsons]));
}
/**
* Get the primary package.json file and its operation directory. The primary package.json file is
* the one that contains the storybook dependency. If the primary package.json file is not found,
* the function returns information about thepackage.json file in the current working directory.
*/
#getPrimaryPackageJson() {
let finalTargetPackageJsonPath = this.#findPrimaryPackageJsonPath();
return _JsPackageManager.getPackageJsonInfo(finalTargetPackageJsonPath);
}
static getPackageJsonInfo(packageJsonPath) {
logger5.debug(`Getting package.json info for ${packageJsonPath}...`);
let operationDir = dirname2(packageJsonPath);
return {
packageJsonPath,
operationDir,
get packageJson() {
return _JsPackageManager.getPackageJson(packageJsonPath);
}
};
}
};
// src/common/utils/normalize-path.ts
import { posix as posix2 } from "node:path";
function normalizePath2(p) {
return posix2.normalize(p.replace(/\\/g, "/"));
}
// src/common/utils/get-addon-names.ts
var normalizeAddonName = (addon) => {
let name = "";
if (typeof addon == "string" ? name = addon : typeof addon == "object" && (name = addon.name), !name.startsWith("."))
return name = normalizePath2(name), name = name.replace(/.*node_modules\//, ""), name.replace(/\/dist\/.*$/, "").replace(/\.[mc]?[tj]?sx?$/, "").replace(/\/register$/, "").replace(/\/manager$/, "").replace(/\/preset$/, "");
}, getAddonNames = (mainConfig) => (mainConfig.addons || []).map(normalizeAddonName).filter((item) => item != null);
// src/common/utils/get-renderer-name.ts
async function getRendererName(options) {
let core = await options.presets.apply("core", {}, options);
return !core || !core.renderer ? getFrameworkName(options) : core.renderer;
}
async function extractRenderer(frameworkName) {
let extractedFrameworkName = extractFrameworkPackageName(frameworkName), framework = frameworkPackages[extractedFrameworkName];
return framework ? frameworkToRenderer[framework] : null;
}
// src/common/utils/get-storybook-configuration.ts
function getStorybookConfiguration(storybookScript, shortName, longName) {
if (!storybookScript)
return null;
let parts = storybookScript.split(/[\s='"]+/), index = parts.indexOf(longName);
return index === -1 && (index = parts.indexOf(shortName)), index === -1 ? null : parts[index + 1];
}
// src/common/utils/load-main-config.ts
var import_ts_dedent3 = __toESM(require_dist(), 1);
import { readFile as readFile3, rm as rm3, writeFile as writeFile3 } from "node:fs/promises";
import { join as join7, parse as parse2, relative, resolve as resolve4 } from "node:path";
import { logger as logger6 } from "storybook/internal/node-logger";
import { MainFileEvaluationError } from "storybook/internal/server-errors";
async function loadMainConfig({
configDir = ".storybook",
cwd,
skipCache
}) {
await validateConfigurationFiles(configDir, cwd);
let mainPath = getInterpretedFile(resolve4(configDir, "main"));
try {
return await importModule(mainPath, { skipCache });
} catch (e) {
if (!(e instanceof Error))
throw e;
if (e.message.includes("not defined in ES module scope")) {
logger6.info(
"Loading main config failed as the file does not seem to be valid ESM. Trying a temporary fix, please ensure the main config is valid ESM."
);
let comment = "// end of Storybook 10 migration assistant header, you can delete the above code", content = await readFile3(mainPath, "utf-8");
if (!content.includes(comment)) {
let header = import_ts_dedent3.dedent`
import { createRequire } from "node:module";
import { dirname } from "node:path";
import { fileURLToPath } from "node:url";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const require = createRequire(import.meta.url);
`, { ext, name, dir } = parse2(mainPath), modifiedMainPath = join7(dir, `${name}.tmp.${ext}`);
await writeFile3(modifiedMainPath, [header, comment, content].join(`
`));
let out;
try {
out = await importModule(modifiedMainPath);
} finally {
await rm3(modifiedMainPath);
}
return out;
}
}
throw new MainFileEvaluationError({
location: relative(process.cwd(), mainPath),
error: e
});
}
}
// src/common/utils/get-storybook-info.ts
var rendererPackages = {
"@storybook/react": SupportedRenderer2.REACT,
"@storybook/vue3": SupportedRenderer2.VUE3,
"@storybook/angular": SupportedRenderer2.ANGULAR,
"@storybook/html": SupportedRenderer2.HTML,
"@storybook/web-components": SupportedRenderer2.WEB_COMPONENTS,
"@storybook/ember": SupportedRenderer2.EMBER,
"@storybook/svelte": SupportedRenderer2.SVELTE,
"@storybook/preact": SupportedRenderer2.PREACT,
"@storybook/server": SupportedRenderer2.SERVER,
"@storybook/react-native": SupportedRenderer2.REACT_NATIVE,
// community (outside of monorepo)
"storybook-framework-qwik": SupportedRenderer2.QWIK,
"storybook-solidjs-vite": SupportedRenderer2.SOLID
}, frameworkPackages = {
"@storybook/angular": SupportedFramework2.ANGULAR,
"@storybook/angular-vite": SupportedFramework2.ANGULAR_VITE,
"@storybook/ember": SupportedFramework2.EMBER,
"@storybook/html-vite": SupportedFramework2.HTML_VITE,
"@storybook/nextjs": SupportedFramework2.NEXTJS,
"@storybook/preact-vite": SupportedFramework2.PREACT_VITE,
"@storybook/react-vite": SupportedFramework2.REACT_VITE,
"@storybook/react-webpack5": SupportedFramework2.REACT_WEBPACK5,
"@storybook/server-webpack5": SupportedFramework2.SERVER_WEBPACK5,
"@storybook/svelte-vite": SupportedFramework2.SVELTE_VITE,
"@storybook/sveltekit": SupportedFramework2.SVELTEKIT,
"@storybook/vue3-vite": SupportedFramework2.VUE3_VITE,
"@storybook/nextjs-vite": SupportedFramework2.NEXTJS_VITE,
"@storybook/react-native-web-vite": SupportedFramework2.REACT_NATIVE_WEB_VITE,
"@storybook/web-components-vite": SupportedFramework2.WEB_COMPONENTS_VITE,
"@storybook/tanstack-react": SupportedFramework2.TANSTACK_REACT,
// community (outside of monorepo)
"storybook-framework-qwik": SupportedFramework2.QWIK,
"storybook-solidjs-vite": SupportedFramework2.SOLID,
"storybook-react-rsbuild": SupportedFramework2.REACT_RSBUILD,
"storybook-vue3-rsbuild": SupportedFramework2.VUE3_RSBUILD,
"storybook-web-components-rsbuild": SupportedFramework2.WEB_COMPONENTS_RSBUILD,
"storybook-html-rsbuild": SupportedFramework2.HTML_RSBUILD,
"@storybook-vue/nuxt": SupportedFramework2.NUXT
}, builderPackages = {
"@storybook/builder-webpack5": SupportedBuilder2.WEBPACK5,
"@storybook/builder-vite": SupportedBuilder2.VITE,
// community (outside of monorepo)
"storybook-builder-rsbuild": SupportedBuilder2.RSBUILD
}, compilerPackages = {
"@storybook/addon-webpack5-compiler-babel": CoreWebpackCompiler.Babel,
"@storybook/addon-webpack5-compiler-swc": CoreWebpackCompiler.SWC
}, findDependency = ({ dependencies, devDependencies, peerDependencies }, predicate) => [
Object.entries(dependencies || {}).find(predicate),
Object.entries(devDependencies || {}).find(predicate),
Object.entries(peerDependencies || {}).find(predicate)
], getStorybookVersionSpecifier = (configDir) => {
let packageJsonPaths = JsPackageManager.listAllPackageJsonPaths(dirname3(configDir));
for (let packageJsonPath of packageJsonPaths) {
let packageJson = JSON.parse(readFileSync3(packageJsonPath, "utf-8")), [dep, devDep, peerDep] = findDependency(packageJson, ([key]) => key === "storybook"), [pkg, version] = dep || devDep || peerDep || [];
if (pkg && version)
return version;
}
}, validConfigExtensions = ["ts", "js", "tsx", "jsx", "mjs", "cjs"], findConfigFile = (prefix, configDir) => {
let filePrefix = join8(configDir, prefix), extension = validConfigExtensions.find((ext) => existsSync3(`${filePrefix}.${ext}`));
return extension ? `${filePrefix}.${extension}` : null;
}, getConfigInfo = (configDir) => {
let storybookConfigDir = configDir ?? ".storybook";
if (!existsSync3(storybookConfigDir)) {
let packageJsonPaths = JsPackageManager.listAllPackageJsonPaths(storybookConfigDir);
for (let packageJsonPath of packageJsonPaths) {
let storybookScript = JSON.parse(readFileSync3(packageJsonPath, "utf-8")).scripts?.storybook;
if (storybookScript && !configDir) {
let configParam = getStorybookConfiguration(storybookScript, "-c", "--config-dir");
if (configParam) {
storybookConfigDir = configParam;
break;
}
}
}
}
return {
configDir: storybookConfigDir,
mainConfigPath: findConfigFile("main", storybookConfigDir),
previewConfigPath: findConfigFile("preview", storybookConfigDir),
managerConfigPath: findConfigFile("manager", storybookConfigDir)
};
}, getStorybookInfo = async (configDir = ".storybook", cwd, { skipCache } = {}) => {
let configInfo = getConfigInfo(configDir), mainConfig = await loadMainConfig({
configDir: configInfo.configDir,
cwd,
// When the main config may have been rewritten earlier in the same process (e.g. an
// automigration switching frameworks), callers must skip the module cache to read the
// current on-disk config instead of a stale, previously-evaluated version.
skipCache
});
invariant(mainConfig, `Unable to find or evaluate ${configInfo.mainConfigPath}`);
let frameworkValue = mainConfig.framework, frameworkField = typeof frameworkValue == "string" ? frameworkValue : frameworkValue?.name, addons = getAddonNames(mainConfig), versionSpecifier = getStorybookVersionSpecifier(configDir);
if (!frameworkField)
return basename(configInfo.configDir) === RN_STORYBOOK_DIR ? {
...configInfo,
versionSpecifier,
addons,
mainConfig,
frameworkPackage: "@storybook/react-native",
rendererPackage: "@storybook/react-native",
renderer: SupportedRenderer2.REACT_NATIVE,
mainConfigPath: configInfo.mainConfigPath ?? void 0,
previewConfigPath: configInfo.previewConfigPath ?? void 0,
managerConfigPath: configInfo.managerConfigPath ?? void 0
} : {
...configInfo,
versionSpecifier,
addons,
mainConfig,
mainConfigPath: configInfo.mainConfigPath ?? void 0,
previewConfigPath: configInfo.previewConfigPath ?? void 0,
managerConfigPath: configInfo.managerConfigPath ?? void 0
};
let frameworkPackage = extractFrameworkPackageName(frameworkField), framework = frameworkPackages[frameworkPackage], renderer = await extractRenderer(frameworkPackage), builder = frameworkToBuilder[framework], rendererPackage = Object.entries(rendererPackages).find(
([, value]) => value === renderer
)?.[0], builderPackage = Object.entries(builderPackages).find(
([, value]) => value === builder
)?.[0];
return {
...configInfo,
addons,
mainConfig,
framework,
versionSpecifier,
renderer: renderer ?? void 0,
builder: builder ?? void 0,
frameworkPackage,
rendererPackage,
builderPackage,
mainConfigPath: configInfo.mainConfigPath ?? void 0,
previewConfigPath: configInfo.previewConfigPath ?? void 0,
managerConfigPath: configInfo.managerConfigPath ?? void 0
};
};
// src/common/utils/get-framework-name.ts
async function getFrameworkName(options) {
let framework = await options.presets.apply("framework", "", options);
if (!framework)
throw new Error(import_ts_dedent4.dedent`
You must specify a framework in '.storybook/main.js' config.
https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#framework-field-mandatory
`);
return typeof framework == "object" ? framework.name : framework;
}
var extractFrameworkPackageName = (framework) => {
let normalizedPath = normalizePath2(framework);
return Object.keys(frameworkPackages).find(
(pkg) => normalizedPath.endsWith(pkg) || // pnpm virtual-store dirs encode the scope slash as '+' and append '@<version>',
// e.g. .../node_modules/.pnpm/@storybook+react-vite@9.0.0 — the trailing '@' keeps
// '@storybook/react' from matching '@storybook+react-vite@...'.
normalizedPath.includes(`/.pnpm/${pkg.replace("/", "+")}@`)
) ?? framework;
};
// src/common/utils/get-storybook-refs.ts
import { readFile as readFile5 } from "node:fs/promises";
import { dirname as dirname5 } from "node:path";
// src/common/utils/read-dependency-manifest.ts
import { readFile as readFile4 } from "node:fs/promises";
import { dirname as dirname4, join as join9 } from "node:path";
import { logger as logger7 } from "storybook/internal/node-logger";
var readDependencyManifest = async (directory, dependency) => {
let subpath = from(directory, join9(dependency, "package.json"), !0);
if (subpath)
try {
let manifest = JSON.parse(await readFile4(subpath, { encoding: "utf8" }));
if (manifest?.name)
return manifest;
} catch {
}
let entry = from(directory, dependency, !0);
if (!entry) {
logger7.debug(`readDependencyManifest: could not resolve "${dependency}"`);
return;
}
let dir = dirname4(entry);
for (; ; ) {
try {
let manifest = JSON.parse(await readFile4(join9(dir, "package.json"), { encoding: "utf8" }));
if (manifest?.name)
return manifest;
} catch {
}
let parent = dirname4(dir);
if (parent === dir)
return;
dir = parent;
}
};
// src/common/utils/get-storybook-refs.ts
var getAutoRefs = async (options) => {
let location = up3({ cwd: options.configDir, last: getProjectRoot() });
if (!location)
return {};
let directory = dirname5(location), { dependencies = [], devDependencies = [] } = JSON.parse(await readFile5(location, { encoding: "utf8" })) || {}, deps = Object.keys({ ...dependencies, ...devDependencies });
return (await Promise.all(
deps.map(async (d) => {
let manifest = await readDependencyManifest(directory, d);
if (manifest?.storybook?.url)
return { id: manifest.name, ...manifest.storybook, version: manifest.version };
})
)).filter(Boolean).reduce(
(acc, cur) => ({
...acc,
[cur.id]: {
id: cur.id.toLowerCase(),
url: stripTrailingSlash(cur.url),
title: cur.title,
version: cur.version
}
}),
{}
);
}, checkRef = (url) => fetch(`${url}/iframe.html`).then(
async ({ ok: ok2, status }) => {
if (ok2) {
if (status !== 200)
return !1;
let data = await fetch(`${url}/iframe.html`, {
headers: { Accept: "application/json" }
});
if (data.ok && (await data.json().catch(() => ({}))).loginUrl)
return !1;
}
return ok2;
},
() => !1
), stripTrailingSlash = (url) => url.replace(/\/$/, ""), toTitle = (input) => {
let result = input.replace(/[A-Z]/g, (f) => ` ${f}`).replace(/[-_][A-Z]/gi, (f) => ` ${f.toUpperCase()}`).replace(/-/g, " ").replace(/_/g, " ");
return `${result.substring(0, 1).toUpperCase()}${result.substring(1)}`.trim();
};
async function getRefs(options) {
if (options.test)
return {};
let refs = await options.presets.apply("refs", await getAutoRefs(options));
return Object.entries(refs).forEach(([key, value]) => {
if (value.disable) {
delete refs[key];
return;
}
refs[key.toLowerCase()] = {
...value,
id: key.toLowerCase(),
title: value.title || toTitle(value.id || key),
url: stripTrailingSlash(value.url)
};
}), await Promise.all(
Object.entries(refs).map(async ([k, value]) => {
let ok2 = await checkRef(value.url);
refs[k] = { ...value, type: ok2 ? "server-checked" : "unknown" };
})
), refs;
}
// src/common/utils/glob-to-regexp.ts
var pico = __toESM(require_picomatch(), 1);
function globToRegexp(glob2) {
let regex = pico.makeRe(glob2, {
fastpaths: !1,
noglobstar: !1,
bash: !1
});
if (!regex.source.startsWith("^"))
throw new Error(`Invalid glob: >> ${glob2} >> ${regex}`);
return glob2.startsWith("./") ? new RegExp(
["^\\.", glob2.startsWith("./**") ? "" : "[\\\\/]", regex.source.substring(1)].join("")
) : regex;
}
// src/common/utils/interpolate.ts
var interpolate = (template, bindings) => Object.entries(bindings).reduce((acc, [k, v]) => {
let escapedString = v.replace(/\\/g, "/").replace(/\$/g, "$$$");
return acc.replace(new RegExp(`{{${k}}}`, "g"), escapedString);
}, template);
// src/common/utils/interpret-require.ts
function getCandidate(paths) {
for (let i2 = 0; i2 < paths.length; i2 += 1) {
let candidate = getInterpretedFile(paths[i2]);
if (candidate)
return candidate;
}
}
function serverRequire(filePath) {
let paths = Array.isArray(filePath) ? filePath : [filePath], candidatePath = getCandidate(paths);
return candidatePath ? importModule(candidatePath) : null;
}
// src/common/utils/load-manager-or-addons-file.ts
var import_ts_dedent5 = __toESM(require_dist(), 1);
import { resolve as resolve5 } from "node:path";
import { logger as logger8 } from "storybook/internal/node-logger";
function loadManagerOrAddonsFile({ configDir }) {
let storybookCustomAddonsPath = getInterpretedFile(resolve5(configDir, "addons")), storybookCustomManagerPath = getInterpretedFile(resolve5(configDir, "manager"));
if ((storybookCustomAddonsPath || storybookCustomManagerPath) && logger8.step("Loading custom manager config"), storybookCustomAddonsPath && storybookCustomManagerPath)
throw new Error(import_ts_dedent5.dedent`
You have both a "addons.js" and a "manager.js", remove the "addons.js" file from your configDir (${resolve5(
configDir,
"addons"
)})`);
return storybookCustomManagerPath || storybookCustomAddonsPath;
}
// src/common/utils/load-preview-or-config-file.ts
var import_ts_dedent6 = __toESM(require_dist(), 1);
import { resolve as resolve6 } from "node:path";
function loadPreviewOrConfigFile({ configDir }) {
let storybookConfigPath = getInterpretedFile(resolve6(configDir, "config")), storybookPreviewPath = getInterpretedFile(resolve6(configDir, "preview"));
if (storybookConfigPath && storybookPreviewPath)
throw new Error(import_ts_dedent6.dedent`
You have both a "config.js" and a "preview.js", remove the "config.js" file from your configDir (${resolve6(
configDir,
"config"
)})`);
return storybookPreviewPath || storybookConfigPath;
}
// src/common/utils/log-config.ts
var import_picocolors2 = __toESM(require_picocolors(), 1);
function logConfig(caption, config) {
console.log(import_picocolors2.default.cyan(String(caption))), console.dir(config, { depth: null });
}
// src/common/utils/normalize-stories.ts
var pico2 = __toESM(require_picomatch(), 1);
import { lstatSync } from "node:fs";
import { basename as basename2, dirname as dirname6, relative as relative2, resolve as resolve7 } from "node:path";
import { InvalidStoriesEntryError } from "storybook/internal/server-errors";
var DEFAULT_TITLE_PREFIX = "", DEFAULT_FILES_PATTERN = "**/*.@(mdx|stories.@(js|jsx|mjs|ts|tsx))", isDirectory = (configDir, entry) => {
try {
return lstatSync(resolve7(configDir, entry)).isDirectory();
} catch {
return !1;
}
}, getDirectoryFromWorkingDir = ({
configDir,
workingDir,
directory
}) => {
let directoryFromConfig = resolve7(configDir, directory), directoryFromWorking = relative2(workingDir, directoryFromConfig);
return normalizeStoryPath(directoryFromWorking);
}, normalizeStoriesEntry = (entry, { configDir, workingDir, defaultFilesPattern = DEFAULT_FILES_PATTERN }) => {
let specifierWithoutMatcher;
if (typeof entry == "string") {
let globResult = pico2.scan(entry);
if (globResult.isGlob) {
let directory2 = globResult.prefix + globResult.base, files2 = globResult.glob;
specifierWithoutMatcher = {
titlePrefix: DEFAULT_TITLE_PREFIX,
directory: directory2,
files: files2
};
} else isDirectory(configDir, entry) ? specifierWithoutMatcher = {
titlePrefix: DEFAULT_TITLE_PREFIX,
directory: entry,
files: defaultFilesPattern
} : specifierWithoutMatcher = {
titlePrefix: DEFAULT_TITLE_PREFIX,
directory: dirname6(entry),
files: basename2(entry)
};
} else
specifierWithoutMatcher = {
titlePrefix: DEFAULT_TITLE_PREFIX,
files: defaultFilesPattern,
...entry
};
let files = slash(specifierWithoutMatcher.files), { directory: directoryRelativeToConfig } = specifierWithoutMatcher, directory = slash(
getDirectoryFromWorkingDir({
configDir,
workingDir,
directory: directoryRelativeToConfig
})
).replace(/\/$/, ""), importPathMatcher = globToRegexp(`${directory}/${files}`);
return {
...specifierWithoutMatcher,
directory,
importPathMatcher
};
}, normalizeStories = (entries, options) => {
if (!entries || Array.isArray(entries) && entries.length === 0)
throw new InvalidStoriesEntryError();
return entries.map((entry) => normalizeStoriesEntry(entry, options));
};
// src/common/utils/readTemplate.ts
import { readFile as readFile6 } from "node:fs/promises";
async function readTemplate(filename) {
return readFile6(filename, {
encoding: "utf8"
});
}
// src/common/utils/remove.ts
var import_ts_dedent7 = __toESM(require_dist(), 1);
import { readConfig, writeConfig } from "storybook/internal/csf-tools";
import { logger as logger9 } from "storybook/internal/node-logger";
async function removeAddon(addon, options) {
let { packageManager, skipInstall } = options, { mainConfigPath, configDir } = getConfigInfo(options.configDir);
if (typeof configDir > "u")
throw new Error(import_ts_dedent7.dedent`
Unable to find storybook config directory
`);
if (!mainConfigPath) {
logger9.error("Unable to find storybook main.js config");
return;
}
let main = await readConfig(mainConfigPath);
if (logger9.debug(`Uninstalling ${addon}`), await packageManager.removeDependencies([addon]), skipInstall || await packageManager.installDependencies(), (main.getNamesFromPath(["addons"]) ?? []).includes(addon)) {
logger9.debug(`Removing '${addon}' from main.js addons field.`);
try {
main.removeEntryFromArray(["addons"], addon), await writeConfig(main);
} catch (err) {
logger9.warn(`Failed to remove '${addon}' from main.js addons field. ${String(err)}`);
}
}
}
// src/common/utils/symlinks.ts
function isPreservingSymlinks() {
let { NODE_OPTIONS, NODE_PRESERVE_SYMLINKS } = process.env;
return !!NODE_PRESERVE_SYMLINKS || NODE_OPTIONS?.includes("--preserve-symlinks");
}
// src/common/utils/template.ts
import { existsSync as existsSync4, readFileSync as readFileSync4 } from "node:fs";
var interpolate2 = (string, data = {}) => Object.entries(data).reduce((acc, [k, v]) => acc.replace(new RegExp(`%${k}%`, "g"), v), string);
function getPreviewBodyTemplate(configDirPath, interpolations) {
let base = readFileSync4(
join(resolvePackageDir("storybook"), "assets/server/base-preview-body.html"),
"utf8"
), bodyHtmlPath = resolve(configDirPath, "preview-body.html"), result = base;
return existsSync4(bodyHtmlPath) && (result = readFileSync4(bodyHtmlPath, "utf8") + result), interpolate2(result, interpolations);
}
function getPreviewHeadTemplate(configDirPath, interpolations) {
let base = readFileSync4(
join(resolvePackageDir("storybook"), "assets/server/base-preview-head.html"),
"utf8"
), headHtmlPath = resolve(configDirPath, "preview-head.html"), result = base;
return existsSync4(headHtmlPath) && (result += readFileSync4(headHtmlPath, "utf8")), interpolate2(result, interpolations);
}
// src/common/utils/tsconfig.ts
import { existsSync as existsSync5, readFileSync as readFileSync5, statSync } from "node:fs";
import { basename as basename3, dirname as dirname7, extname as extname2, relative as relative3, resolve as resolve8 } from "node:path";
var import_picomatch = __toESM(require_picomatch(), 1);
var TSCONFIG_CANDIDATES = ["tsconfig.json", "tsconfig.base.json", "tsconfig.app.json"], DEFAULT_EXCLUDE_PATTERNS = ["node_modules", "bower_components", "jspm_packages"], findTsconfigPath = (cwd) => {
let projectRoot = getProjectRoot();
for (let candidate of TSCONFIG_CANDIDATES) {
let found = up2(candidate, { cwd, last: projectRoot });
if (found)
return found;
}
}, findTsconfigPathForFile = (cwd, filePath) => {
let rootTsconfigPath = findTsconfigPath(cwd);
if (!rootTsconfigPath)
return;
let absoluteFilePath = resolve8(filePath), matchingConfigs = collectTsconfigEntries(rootTsconfigPath, /* @__PURE__ */ new Set()).filter(
(entry) => tsconfigIncludesFile(entry, absoluteFilePath)
);
return matchingConfigs.sort((left, right) => compareTsconfigEntries(absoluteFilePath, left, right)), matchingConfigs[0]?.path ?? rootTsconfigPath;
}, findTsconfigPathForPath = (path5) => isDirectoryPath(path5) ? findTsconfigPath(path5) : findTsconfigPathForFile(dirname7(path5), path5);
function isDirectoryPath(path5) {
try {
if (existsSync5(path5))
return statSync(path5).isDirectory();
} catch {
}
return extname2(path5) === "";
}
function collectTsconfigEntries(configPath, seen) {
let normalizedConfigPath = resolve8(configPath);
if (seen.has(normalizedConfigPath))
return [];
seen.add(normalizedConfigPath);
let config = readTsconfigConfig(normalizedConfigPath);
return config ? [
{ path: normalizedConfigPath, config },
...getReferencedTsconfigPaths(normalizedConfigPath, config).flatMap(
(referencePath) => collectTsconfigEntries(referencePath, seen)
)
] : [];
}
function getReferencedTsconfigPaths(configPath, config) {
return (Array.isArray(config.references) ? config.references : []).map((reference) => reference.path).filter((referencePath) => typeof referencePath == "string").map((referencePath) => resolve8(dirname7(configPath), referencePath)).flatMap((referencePath) => resolveReferenceConfigPaths(referencePath));
}
function resolveReferenceConfigPaths(referencePath) {
return referencePath.endsWith(".json") ? [referencePath] : TSCONFIG_CANDIDATES.map((candidate) => resolve8(referencePath, candidate));
}
function tsconfigIncludesFile(entry, filePath) {
let configDir = dirname7(entry.path), relativeFilePath = normalizePath3(relative3(configDir, filePath));
if (relativeFilePath.startsWith("../") || relativeFilePath === ".." || isReferencesShell(entry.config))
return !1;
let ownership = resolveOwnershipSpec(entry.path, entry.config, /* @__PURE__ */ new Set());
if (ownership.files && ownership.files.length > 0) {
let normalizedFilePath = normalizePath3(filePath);
return ownership.files.some(
(candidatePath) => normalizePath3(resolve8(configDir, candidatePath)) === normalizedFilePath
);
}
let includePatterns = getIncludePatterns(ownership, entry.config);
if (includePatterns.length === 0)
return !1;
let excludePatterns = [
...DEFAULT_EXCLUDE_PATTERNS,
...(ownership.exclude ?? []).map(normalizeTsconfigPattern)
];
return matchesPatterns(relativeFilePath, excludePatterns) ? !1 : matchesPatterns(relativeFilePath, includePatterns);
}
function resolveOwnershipSpec(configPath, config, seen) {
let normalizedConfigPath = resolve8(configPath);
if (seen.has(normalizedConfigPath))
return {};
seen.add(normalizedConfigPath);
let ownership = {};
for (let extendsPath of getExtendsPaths(normalizedConfigPath, config)) {
let baseConfig = readTsconfigConfig(extendsPath);
if (!baseConfig)
continue;
let baseOwnership = resolveOwnershipSpec(extendsPath, baseConfig, seen);
ownership = mergeOwnershipSpec(
ownership,
rebaseOwnershipSpec(baseOwnership, dirname7(extendsPath), dirname7(normalizedConfigPath))
);
}
return mergeOwnershipSpec(ownership, ownOwnershipSpec(config));
}
function getExtendsPaths(configPath, config) {
return (typeof config.extends == "string" ? [config.extends] : Array.isArray(config.extends) ? config.extends.filter((value) => typeof value == "string") : []).map((extendsPath) => resolveExtendsPath(configPath, extendsPath));
}
function resolveExtendsPath(configPath, extendsPath) {
let resolved = resolve8(dirname7(configPath), extendsPath);
if (existsSync5(resolved))
return resolved;
if (!resolved.endsWith(".json")) {
let withJson = `${resolved}.json`;
if (existsSync5(withJson))
return withJson;
}
return resolved;
}
function ownOwnershipSpec(config) {
let ownership = {};
return config.files !== void 0 && (ownership.files = asStringArray(config.files).map(normalizePath3)), config.include !== void 0 && (ownership.include = asStringArray(config.include).map(normalizePath3)), config.exclude !== void 0 && (ownership.exclude = asStringArray(config.exclude).map(normalizePath3)), ownership;
}
function mergeOwnershipSpec(base, overlay) {
return {
files: overlay.files !== void 0 ? overlay.files : base.files,
include: overlay.include !== void 0 ? overlay.include : base.include,
exclude: overlay.exclude !== void 0 ? overlay.exclude : base.exclude
};
}
function rebaseOwnershipSpec(ownership, fromDir, toDir) {
return {
files: ownership.files?.map((pattern) => rebasePattern(pattern, fromDir, toDir)),
include: ownership.include?.map((pattern) => rebasePattern(pattern, fromDir, toDir)),
exclude: ownership.exclude?.map((pattern) => rebasePattern(pattern, fromDir, toDir))
};
}
function rebasePattern(pattern, fromDir, toDir) {
return normalizePath3(relative3(toDir, resolve8(fromDir, pattern)));
}
function isReferencesShell(config) {
if (!Array.isArray(config.references))
return !1;
let hasOwnFiles = Array.isArray(config.files) && config.files.length > 0, hasOwnInclude = Array.isArray(config.include) && config.include.length > 0;
return !hasOwnFiles && !hasOwnInclude;
}
function getIncludePatterns(ownership, leafConfig) {
return ownership.include && ownership.include.length > 0 ? ownership.include.map(normalizeTsconfigPattern) : ownership.files && ownership.files.length > 0 ? ownership.files.map(normalizePath3) : Array.isArray(leafConfig.files) && leafConfig.files.length === 0 && !ownership.include ? [] : ["**/*"];
}
function compareTsconfigEntries(filePath, left, right) {
let leftDir = dirname7(left.path), rightDir = dirname7(right.path), leftDepth = normalizePath3(relative3(leftDir, filePath)).split("/").length, rightDepth = normalizePath3(relative3(rightDir, filePath)).split("/").length;
if (leftDepth !== rightDepth)
return leftDepth - rightDepth;
let leftIsPrimaryTsconfig = basename3(left.path) === "tsconfig.json" ? 1 : 0;
return (basename3(right.path) === "tsconfig.json" ? 1 : 0) - leftIsPrimaryTsconfig;
}
function readTsconfigConfig(configPath) {
try {
let content = readFileSync5(configPath, "utf-8");
return JSON.parse(stripJsonComments(content, { trailingCommas: !0 }));
} catch {
return;
}
}
function matchesPatterns(filePath, patterns) {
return patterns.some((pattern) => (0, import_picomatch.default)(pattern, { dot: !0 })(filePath));
}
function normalizeTsconfigPattern(pattern) {
let normalizedPattern = normalizePath3(pattern);
return normalizedPattern.endsWith("/") ? `${normalizedPattern}**/*` : !import_picomatch.default.scan(normalizedPattern).isGlob && !/\.[^/]+$/.test(normalizedPattern) ? `${normalizedPattern}/**/*` : normalizedPattern;
}
function normalizePath3(value) {
return value.replaceAll("\\", "/");
}
function asStringArray(value) {
return Array.isArray(value) ? value.filter((item) => typeof item == "string") : [];
}
// src/common/utils/validate-config.ts
import {
CouldNotEvaluateFrameworkError,
InvalidFrameworkNameError,
MissingFrameworkFieldError
} from "storybook/internal/server-errors";
var renderers = ["html", "preact", "react", "server", "svelte", "vue", "vue3", "web-components"], rendererNames = [...renderers, ...renderers.map((renderer) => `@storybook/${renderer}`)];
function validateFrameworkName(frameworkName) {
if (!frameworkName)
throw new MissingFrameworkFieldError();
if (rendererNames.includes(frameworkName))
throw new InvalidFrameworkNameError({ frameworkName });
let normalizedFrameworkName = extractFrameworkPackageName(frameworkName);
if (!Object.keys(frameworkPackages).includes(normalizedFrameworkName))
try {
resolveModulePath(`${frameworkName}/preset`, {
extensions: [...jsModuleExtensions],
conditions: ["node", "import", "require"]
});
} catch {
throw new CouldNotEvaluateFrameworkError({ frameworkName });
}
}
// src/common/utils/satisfies.ts
function satisfies2() {
return (x) => x;
}
// src/common/utils/babel.ts
import { readFileSync as readFileSync6 } from "node:fs";
import { createRequire } from "node:module";
import { logger as logger10 } from "storybook/internal/node-logger";
var require2 = createRequire(import.meta.url), getBabelPresetEnvMajor = () => {
try {
let pkgPath = require2.resolve("@babel/preset-env/package.json"), { version } = JSON.parse(readFileSync6(pkgPath, "utf8")), parsed = Number.parseInt(version, 10);
return Number.isNaN(parsed) ? void 0 : parsed;
} catch {
logger10.debug(
"Could not determine @babel/preset-env version in use. In case of runtime errors with @babel/preset-env, you may need to set the babelRemoveBugfixes feature flag in your `main.ts` file."
);
return;
}
};
// src/common/utils/formatter.ts
async function getPrettier() {
try {
return await import("prettier");
} catch {
return {
AstPath: class {
},
doc: {},
util: {},
version: "0.0.0-fallback",
resolveConfig: async () => null,
format: (content) => Promise.resolve(content),
check: () => Promise.resolve(!1),
clearConfigCache: () => Promise.resolve(void 0),
formatWithCursor: () => Promise.resolve({ formatted: "", cursorOffset: 0 }),
getFileInfo: async () => ({ ignored: !1, inferredParser: null }),
getSupportInfo: () => Promise.resolve({ languages: [], options: [] }),
resolveConfigFile: async () => null
};
}
}
async function formatFileContent(filePath, content) {
try {
let { resolveConfig, format: format2 } = await getPrettier(), config = await resolveConfig(filePath);
return !config || Object.keys(config).length === 0 ? await formatWithEditorConfig(filePath, content) : await format2(content, {
...config,
filepath: filePath
});
} catch {
return content;
}
}
async function formatWithEditorConfig(filePath, content) {
let { resolveConfig, format: format2 } = await getPrettier(), config = await resolveConfig(filePath, { editorconfig: !0 });
return !config || Object.keys(config).length === 0 ? content : format2(content, {
...config,
filepath: filePath
});
}
// src/common/utils/get-story-id.ts
var import_ts_dedent9 = __toESM(require_dist(), 1);
import { relative as relative4 } from "node:path";
import { normalizeStories as normalizeStories2, normalizeStoryPath as normalizeStoryPath2 } from "storybook/internal/common";
import { sanitize as sanitize2, storyNameFromExport, toId } from "storybook/internal/csf";
// src/preview-api/modules/store/autoTitle.ts
import { once as once2 } from "storybook/internal/client-logger";
var import_ts_dedent8 = __toESM(require_dist(), 1), sanitize = (parts) => {
if (parts.length === 0)
return parts;
let last = parts[parts.length - 1], lastStripped = last?.replace(/(?:[.](?:story|stories))?([.][^.]+)$/i, "");
if (parts.length === 1)
return [lastStripped];
let nextToLast = parts[parts.length - 2];
return lastStripped && nextToLast && lastStripped.toLowerCase() === nextToLast.toLowerCase() ? [...parts.slice(0, -2), lastStripped] : lastStripped && (/^(story|stories)([.][^.]+)$/i.test(last) || /^index$/i.test(lastStripped)) ? parts.slice(0, -1) : [...parts.slice(0, -1), lastStripped];
};
function pathJoin(paths) {
return paths.flatMap((p) => p.split("/")).filter(Boolean).join("/");
}
var userOrAutoTitleFromSpecifier = (fileName, entry, userTitle) => {
let { directory, importPathMatcher, titlePrefix = "" } = entry || {};
typeof fileName == "number" && once2.warn(import_ts_dedent8.dedent`
CSF Auto-title received a numeric fileName. This typically happens when
webpack is mis-configured in production mode. To force webpack to produce
filenames, set optimization.moduleIds = "named" in your webpack config.
`);
let normalizedFileName = slash(String(fileName));
if (importPathMatcher.exec(normalizedFileName)) {
if (!userTitle) {
let suffix = normalizedFileName.replace(directory, ""), parts = pathJoin([titlePrefix, suffix]).split("/");
return parts = sanitize(parts), parts.join("/");
}
return titlePrefix ? pathJoin([titlePrefix, userTitle]) : userTitle;
}
};
// src/common/utils/posix.ts
import { posix as posixPath, sep as sep2 } from "node:path";
var posix3 = (localPath, seperator = sep2) => localPath.split(seperator).filter(Boolean).join(posixPath.sep);
// src/common/utils/get-story-id.ts
async function getStoryId(data, options) {
let stories = await options.presets.apply("stories", [], options), autoTitle = getStoryTitle({
...data,
stories,
configDir: options.configDir
});
if (autoTitle === void 0)
throw new Error(import_ts_dedent9.dedent`
The new story file was successfully generated, but we are unable to index it. Please ensure that the new Story file is matched by the 'stories' glob pattern in your Storybook configuration.
`);
let storyName = storyNameFromExport(data.exportedStoryName), storyId = toId(autoTitle, storyName), kind = sanitize2(autoTitle);
return { storyId, kind };
}
function getStoryTitle({
storyFilePath,
configDir,
stories,
workingDir = process.cwd(),
userTitle
}) {
let normalizedStories = normalizeStories2(stories, {
configDir,
workingDir
}), relativePath = relative4(workingDir, storyFilePath), importPath = posix3(normalizeStoryPath2(relativePath));
return normalizedStories.map((normalizeStory) => userOrAutoTitleFromSpecifier(importPath, normalizeStory, userTitle)).filter(Boolean)[0];
}
// src/common/utils/sync-main-preview-addons.ts
var import_picocolors3 = __toESM(require_picocolors(), 1);
import { types as t } from "storybook/internal/babel";
import {
isCsfFactoryPreview,
readConfig as readConfig2,
writeConfig as writeConfig2
} from "storybook/internal/csf-tools";
import { logger as logger11 } from "storybook/internal/node-logger";
// src/common/utils/get-addon-annotations.ts
import { createRequire as createRequire2 } from "node:module";
function getAnnotationsName(addonName) {
return addonName.replace(/^@storybook\//, "").split(/[^a-zA-Z0-9]+/).map(
(word, index) => index === 0 ? word.toLowerCase() : word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()
).join("").replace(/^./, (char) => char.toLowerCase());
}
async function getAddonAnnotations(addon, configDir) {
let data = {
// core addons will have a function as default export in index entrypoint
importPath: addon,
importName: getAnnotationsName(addon),
isCoreAddon: isCorePackage(addon)
};
data.isCoreAddon || (data.importPath = `${addon}/preview`);
try {
createRequire2(import.meta.url).resolve(`${addon}/preview`, { paths: [configDir] });
} catch {
return null;
}
return data;
}
// src/common/utils/sync-main-preview-addons.ts
async function syncStorybookAddons(mainConfig, previewConfigPath, configDir) {
let previewConfig = await readConfig2(previewConfigPath), modifiedConfig = await syncPreviewAddonsWithMainConfig(
mainConfig,
previewConfig,
configDir
);
await writeConfig2(modifiedConfig);
}
async function syncPreviewAddonsWithMainConfig(mainConfig, previewConfig, configDir) {
if (!isCsfFactoryPreview(previewConfig))
return previewConfig;
let existingAddons = previewConfig.getFieldNode(["addons"]);
existingAddons || previewConfig.setFieldNode(["addons"], t.arrayExpression([]));
let addons = getAddonNames(mainConfig);
if (!addons)
return previewConfig;
let syncedAddons = [];
for (let addon of addons) {
let annotations = await getAddonAnnotations(addon, configDir);
if (annotations) {
if (previewConfig._ast.program.body.find(
(node) => t.isImportDeclaration(node) && node.source.value === annotations.importPath
))
continue;
(!existingAddons || t.isArrayExpression(existingAddons) && !existingAddons.elements.some(
(element) => t.isIdentifier(element) && element.name === annotations.importName
)) && (syncedAddons.push(addon), annotations.isCoreAddon ? (previewConfig.setImport(annotations.importName, annotations.importPath), previewConfig.appendNodeToArray(
["addons"],
t.callExpression(t.identifier(annotations.importName), [])
)) : (previewConfig.setImport({ namespace: annotations.importName }, annotations.importPath), previewConfig.appendNodeToArray(["addons"], t.identifier(annotations.importName))));
}
}
return syncedAddons.length > 0 && logger11.log(
`Synchronizing addons from main config in ${import_picocolors3.default.cyan(previewConfig.fileName)}:
${syncedAddons.map(import_picocolors3.default.magenta).join(", ")}`
), previewConfig;
}
// src/common/utils/setup-addon-in-config.ts
import { writeConfig as writeConfig3 } from "storybook/internal/csf-tools";
// src/common/utils/wrap-getAbsolutePath-utils.ts
import { types as t2 } from "storybook/internal/babel";
var PREFERRED_GET_ABSOLUTE_PATH_WRAPPER_NAME = "getAbsolutePath", ALTERNATIVE_GET_ABSOLUTE_PATH_WRAPPER_NAME = "wrapForPnp";
function doesVariableOrFunctionDeclarationExist(node, name) {
return t2.isVariableDeclaration(node) && node.declarations.length === 1 && t2.isVariableDeclarator(node.declarations[0]) && t2.isIdentifier(node.declarations[0].id) && node.declarations[0].id?.name === name || t2.isFunctionDeclaration(node) && t2.isIdentifier(node.id) && node.id.name === name;
}
function getReferenceToGetAbsolutePathWrapper(config, value) {
return t2.callExpression(
t2.identifier(getAbsolutePathWrapperName(config) ?? PREFERRED_GET_ABSOLUTE_PATH_WRAPPER_NAME),
[t2.stringLiteral(value)]
);
}
function getAbsolutePathWrapperName(config) {
let declarationName = config.getBodyDeclarations().flatMap(
(node) => doesVariableOrFunctionDeclarationExist(node, ALTERNATIVE_GET_ABSOLUTE_PATH_WRAPPER_NAME) ? [ALTERNATIVE_GET_ABSOLUTE_PATH_WRAPPER_NAME] : doesVariableOrFunctionDeclarationExist(node, PREFERRED_GET_ABSOLUTE_PATH_WRAPPER_NAME) ? [PREFERRED_GET_ABSOLUTE_PATH_WRAPPER_NAME] : []
);
return declarationName.length ? declarationName[0] : null;
}
function isGetAbsolutePathWrapperNecessary(node, cb = () => {
}) {
if (t2.isStringLiteral(node))
return cb(node), !0;
if (t2.isObjectExpression(node)) {
let nameProperty = node.properties.find(
(property) => t2.isObjectProperty(property) && t2.isIdentifier(property.key) && property.key.name === "name"
);
if (nameProperty && t2.isStringLiteral(nameProperty.value))
return cb(nameProperty), !0;
}
return t2.isArrayExpression(node) && node.elements.some((element) => element && isGetAbsolutePathWrapperNecessary(element)) ? (cb(node), !0) : !1;
}
function getFieldsForGetAbsolutePathWrapper(config) {
let frameworkNode = config.getFieldNode(["framework"]), builderNode = config.getFieldNode(["core", "builder"]), rendererNode = config.getFieldNode(["core", "renderer"]), addons = config.getFieldNode(["addons"]);
return [
...frameworkNode ? [frameworkNode] : [],
...builderNode ? [builderNode] : [],
...rendererNode ? [rendererNode] : [],
...addons && t2.isArrayExpression(addons) ? [addons] : []
];
}
function getAbsolutePathWrapperAsCallExpression(isConfigTypescript) {
let functionDeclaration = {
...t2.functionDeclaration(
t2.identifier(PREFERRED_GET_ABSOLUTE_PATH_WRAPPER_NAME),
[
{
...t2.identifier("value"),
...isConfigTypescript ? { typeAnnotation: t2.tsTypeAnnotation(t2.tSStringKeyword()) } : {}
}
],
t2.blockStatement([
t2.returnStatement(
t2.callExpression(t2.identifier("dirname"), [
t2.callExpression(t2.identifier("fileURLToPath"), [
t2.callExpression(
t2.memberExpression(
t2.metaProperty(t2.identifier("import"), t2.identifier("meta")),
t2.identifier("resolve")
),
[
t2.templateLiteral(
[
t2.templateElement({ raw: "" }),
t2.templateElement({ raw: "/package.json" }, !0)
],
[t2.identifier("value")]
)
]
)
])
])
)
])
),
...isConfigTypescript ? { returnType: t2.tSTypeAnnotation(t2.tsAnyKeyword()) } : {}
};
return t2.addComment(
functionDeclaration,
"leading",
`*
* This function is used to resolve the absolute path of a package.
* It is needed in projects that use Yarn PnP or are set up within a monorepo.
`
), functionDeclaration;
}
function wrapValueWithGetAbsolutePathWrapper(config, node) {
isGetAbsolutePathWrapperNecessary(node, (n2) => {
if (t2.isStringLiteral(n2)) {
let wrapperNode = getReferenceToGetAbsolutePathWrapper(config, n2.value);
Object.keys(n2).forEach((k) => {
delete n2[k];
}), Object.keys(wrapperNode).forEach((k) => {
n2[k] = wrapperNode[k];
});
}
t2.isObjectProperty(n2) && t2.isStringLiteral(n2.value) && (n2.value = getReferenceToGetAbsolutePathWrapper(config, n2.value.value)), t2.isArrayExpression(n2) && n2.elements.forEach((element) => {
element && isGetAbsolutePathWrapperNecessary(element) && wrapValueWithGetAbsolutePathWrapper(config, element);
});
});
}
// src/common/utils/setup-addon-in-config.ts
async function setupAddonInConfig({
addonName,
previewConfigPath,
configDir,
mainConfigCSFFile
}) {
if (mainConfigCSFFile.getFieldNode(["addons"]) && getAbsolutePathWrapperName(mainConfigCSFFile) !== null) {
let addonNode = mainConfigCSFFile.valueToNode(addonName);
mainConfigCSFFile.appendNodeToArray(["addons"], addonNode), wrapValueWithGetAbsolutePathWrapper(mainConfigCSFFile, addonNode);
} else
mainConfigCSFFile.appendValueToArray(["addons"], addonName);
await writeConfig3(mainConfigCSFFile);
try {
let newMainConfig = await loadMainConfig({ configDir, skipCache: !0 });
previewConfigPath && await syncStorybookAddons(newMainConfig, previewConfigPath, configDir);
} catch {
}
}
// src/common/js-package-manager/JsPackageManagerFactory.ts
import { existsSync as existsSync8, readFileSync as readFileSync14 } from "node:fs";
import { basename as basename4, join as join16, parse as parse3, relative as relative5 } from "node:path";
// src/common/utils/command.ts
import { logger as logger12, prompt as prompt2 } from "storybook/internal/node-logger";
import { existsSync as existsSync6 } from "node:fs";
import { delimiter, join as join10 } from "node:path";
// ../../node_modules/is-plain-obj/index.js
function isPlainObject(value) {
if (typeof value != "object" || value === null)
return !1;
let prototype = Object.getPrototypeOf(value);
return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);
}
// ../../node_modules/execa/lib/arguments/file-url.js
import { fileURLToPath } from "node:url";
var safeNormalizeFileUrl = (file, name) => {
let fileString = normalizeFileUrl(normalizeDenoExecPath(file));
if (typeof fileString != "string")
throw new TypeError(`${name} must be a string or a file URL: ${fileString}.`);
return fileString;
}, normalizeDenoExecPath = (file) => isDenoExecPath(file) ? file.toString() : file, isDenoExecPath = (file) => typeof file != "string" && file && Object.getPrototypeOf(file) === String.prototype, normalizeFileUrl = (file) => file instanceof URL ? fileURLToPath(file) : file;
// ../../node_modules/execa/lib/methods/parameters.js
var normalizeParameters = (rawFile, rawArguments = [], rawOptions = {}) => {
let filePath = safeNormalizeFileUrl(rawFile, "First argument"), [commandArguments, options] = isPlainObject(rawArguments) ? [[], rawArguments] : [rawArguments, rawOptions];
if (!Array.isArray(commandArguments))
throw new TypeError(`Second argument must be either an array of arguments or an options object: ${commandArguments}`);
if (commandArguments.some((commandArgument) => typeof commandArgument == "object" && commandArgument !== null))
throw new TypeError(`Second argument must be an array of strings: ${commandArguments}`);
let normalizedArguments = commandArguments.map(String), nullByteArgument = normalizedArguments.find((normalizedArgument) => normalizedArgument.includes("\0"));
if (nullByteArgument !== void 0)
throw new TypeError(`Arguments cannot contain null bytes ("\\0"): ${nullByteArgument}`);
if (!isPlainObject(options))
throw new TypeError(`Last argument must be an options object: ${options}`);
return [filePath, normalizedArguments, options];
};
// ../../node_modules/execa/lib/methods/template.js
import { ChildProcess } from "node:child_process";
// ../../node_modules/execa/lib/utils/uint-array.js
import { StringDecoder } from "node:string_decoder";
var { toString: objectToString } = Object.prototype, isArrayBuffer = (value) => objectToString.call(value) === "[object ArrayBuffer]", isUint8Array = (value) => objectToString.call(value) === "[object Uint8Array]", bufferToUint8Array = (buffer) => new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength), textEncoder = new TextEncoder(), stringToUint8Array = (string) => textEncoder.encode(string), textDecoder = new TextDecoder(), uint8ArrayToString = (uint8Array) => textDecoder.decode(uint8Array), joinToString = (uint8ArraysOrStrings, encoding) => uint8ArraysToStrings(uint8ArraysOrStrings, encoding).join(""), uint8ArraysToStrings = (uint8ArraysOrStrings, encoding) => {
if (encoding === "utf8" && uint8ArraysOrStrings.every((uint8ArrayOrString) => typeof uint8ArrayOrString == "string"))
return uint8ArraysOrStrings;
let decoder = new StringDecoder(encoding), strings = uint8ArraysOrStrings.map((uint8ArrayOrString) => typeof uint8ArrayOrString == "string" ? stringToUint8Array(uint8ArrayOrString) : uint8ArrayOrString).map((uint8Array) => decoder.write(uint8Array)), finalString = decoder.end();
return finalString === "" ? strings : [...strings, finalString];
}, joinToUint8Array = (uint8ArraysOrStrings) => uint8ArraysOrStrings.length === 1 && isUint8Array(uint8ArraysOrStrings[0]) ? uint8ArraysOrStrings[0] : concatUint8Arrays(stringsToUint8Arrays(uint8ArraysOrStrings)), stringsToUint8Arrays = (uint8ArraysOrStrings) => uint8ArraysOrStrings.map((uint8ArrayOrString) => typeof uint8ArrayOrString == "string" ? stringToUint8Array(uint8ArrayOrString) : uint8ArrayOrString), concatUint8Arrays = (uint8Arrays) => {
let result = new Uint8Array(getJoinLength(uint8Arrays)), index = 0;
for (let uint8Array of uint8Arrays)
result.set(uint8Array, index), index += uint8Array.length;
return result;
}, getJoinLength = (uint8Arrays) => {
let joinLength = 0;
for (let uint8Array of uint8Arrays)
joinLength += uint8Array.length;
return joinLength;
};
// ../../node_modules/execa/lib/methods/template.js
var isTemplateString = (templates) => Array.isArray(templates) && Array.isArray(templates.raw), parseTemplates = (templates, expressions) => {
let tokens = [];
for (let [index, template] of templates.entries())
tokens = parseTemplate({
templates,
expressions,
tokens,
index,
template
});
if (tokens.length === 0)
throw new TypeError("Template script must not be empty");
let [file, ...commandArguments] = tokens;
return [file, commandArguments, {}];
}, parseTemplate = ({ templates, expressions, tokens, index, template }) => {
if (template === void 0)
throw new TypeError(`Invalid backslash sequence: ${templates.raw[index]}`);
let { nextTokens, leadingWhitespaces, trailingWhitespaces } = splitByWhitespaces(template, templates.raw[index]), newTokens = concatTokens(tokens, nextTokens, leadingWhitespaces);
if (index === expressions.length)
return newTokens;
let expression = expressions[index], expressionTokens = Array.isArray(expression) ? expression.map((expression2) => parseExpression(expression2)) : [parseExpression(expression)];
return concatTokens(newTokens, expressionTokens, trailingWhitespaces);
}, splitByWhitespaces = (template, rawTemplate) => {
if (rawTemplate.length === 0)
return { nextTokens: [], leadingWhitespaces: !1, trailingWhitespaces: !1 };
let nextTokens = [], templateStart = 0, leadingWhitespaces = DELIMITERS.has(rawTemplate[0]);
for (let templateIndex = 0, rawIndex = 0; templateIndex < template.length; templateIndex += 1, rawIndex += 1) {
let rawCharacter = rawTemplate[rawIndex];
if (DELIMITERS.has(rawCharacter))
templateStart !== templateIndex && nextTokens.push(template.slice(templateStart, templateIndex)), templateStart = templateIndex + 1;
else if (rawCharacter === "\\") {
let nextRawCharacter = rawTemplate[rawIndex + 1];
nextRawCharacter === `
` ? (templateIndex -= 1, rawIndex += 1) : nextRawCharacter === "u" && rawTemplate[rawIndex + 2] === "{" ? rawIndex = rawTemplate.indexOf("}", rawIndex + 3) : rawIndex += ESCAPE_LENGTH[nextRawCharacter] ?? 1;
}
}
let trailingWhitespaces = templateStart === template.length;
return trailingWhitespaces || nextTokens.push(template.slice(templateStart)), { nextTokens, leadingWhitespaces, trailingWhitespaces };
}, DELIMITERS = /* @__PURE__ */ new Set([" ", " ", "\r", `
`]), ESCAPE_LENGTH = { x: 3, u: 5 }, concatTokens = (tokens, nextTokens, isSeparated) => isSeparated || tokens.length === 0 || nextTokens.length === 0 ? [...tokens, ...nextTokens] : [
...tokens.slice(0, -1),
`${tokens.at(-1)}${nextTokens[0]}`,
...nextTokens.slice(1)
], parseExpression = (expression) => {
let typeOfExpression = typeof expression;
if (typeOfExpression === "string")
return expression;
if (typeOfExpression === "number")
return String(expression);
if (isPlainObject(expression) && ("stdout" in expression || "isMaxBuffer" in expression))
return getSubprocessResult(expression);
throw expression instanceof ChildProcess || Object.prototype.toString.call(expression) === "[object Promise]" ? new TypeError("Unexpected subprocess in template expression. Please use ${await subprocess} instead of ${subprocess}.") : new TypeError(`Unexpected "${typeOfExpression}" in template expression`);
}, getSubprocessResult = ({ stdout }) => {
if (typeof stdout == "string")
return stdout;
if (isUint8Array(stdout))
return uint8ArrayToString(stdout);
throw stdout === void 0 ? new TypeError(`Missing result.stdout in template expression. This is probably due to the previous subprocess' "stdout" option.`) : new TypeError(`Unexpected "${typeof stdout}" stdout in template expression`);
};
// ../../node_modules/execa/lib/methods/main-sync.js
import { spawnSync } from "node:child_process";
// ../../node_modules/execa/lib/arguments/specific.js
import { debuglog } from "node:util";
// ../../node_modules/execa/lib/utils/standard-stream.js
import process2 from "node:process";
var isStandardStream = (stream) => STANDARD_STREAMS.includes(stream), STANDARD_STREAMS = [process2.stdin, process2.stdout, process2.stderr], STANDARD_STREAMS_ALIASES = ["stdin", "stdout", "stderr"], getStreamName = (fdNumber) => STANDARD_STREAMS_ALIASES[fdNumber] ?? `stdio[${fdNumber}]`;
// ../../node_modules/execa/lib/arguments/specific.js
var normalizeFdSpecificOptions = (options) => {
let optionsCopy = { ...options };
for (let optionName of FD_SPECIFIC_OPTIONS)
optionsCopy[optionName] = normalizeFdSpecificOption(options, optionName);
return optionsCopy;
}, normalizeFdSpecificOption = (options, optionName) => {
let optionBaseArray = Array.from({ length: getStdioLength(options) + 1 }), optionArray = normalizeFdSpecificValue(options[optionName], optionBaseArray, optionName);
return addDefaultValue(optionArray, optionName);
}, getStdioLength = ({ stdio }) => Array.isArray(stdio) ? Math.max(stdio.length, STANDARD_STREAMS_ALIASES.length) : STANDARD_STREAMS_ALIASES.length, normalizeFdSpecificValue = (optionValue, optionArray, optionName) => isPlainObject(optionValue) ? normalizeOptionObject(optionValue, optionArray, optionName) : optionArray.fill(optionValue), normalizeOptionObject = (optionValue, optionArray, optionName) => {
for (let fdName of Object.keys(optionValue).sort(compareFdName))
for (let fdNumber of parseFdName(fdName, optionName, optionArray))
optionArray[fdNumber] = optionValue[fdName];
return optionArray;
}, compareFdName = (fdNameA, fdNameB) => getFdNameOrder(fdNameA) < getFdNameOrder(fdNameB) ? 1 : -1, getFdNameOrder = (fdName) => fdName === "stdout" || fdName === "stderr" ? 0 : fdName === "all" ? 2 : 1, parseFdName = (fdName, optionName, optionArray) => {
if (fdName === "ipc")
return [optionArray.length - 1];
let fdNumber = parseFd(fdName);
if (fdNumber === void 0 || fdNumber === 0)
throw new TypeError(`"${optionName}.${fdName}" is invalid.
It must be "${optionName}.stdout", "${optionName}.stderr", "${optionName}.all", "${optionName}.ipc", or "${optionName}.fd3", "${optionName}.fd4" (and so on).`);
if (fdNumber >= optionArray.length)
throw new TypeError(`"${optionName}.${fdName}" is invalid: that file descriptor does not exist.
Please set the "stdio" option to ensure that file descriptor exists.`);
return fdNumber === "all" ? [1, 2] : [fdNumber];
}, parseFd = (fdName) => {
if (fdName === "all")
return fdName;
if (STANDARD_STREAMS_ALIASES.includes(fdName))
return STANDARD_STREAMS_ALIASES.indexOf(fdName);
let regexpResult = FD_REGEXP.exec(fdName);
if (regexpResult !== null)
return Number(regexpResult[1]);
}, FD_REGEXP = /^fd(\d+)$/, addDefaultValue = (optionArray, optionName) => optionArray.map((optionValue) => optionValue === void 0 ? DEFAULT_OPTIONS[optionName] : optionValue), verboseDefault = debuglog("execa").enabled ? "full" : "none", DEFAULT_OPTIONS = {
lines: !1,
buffer: !0,
maxBuffer: 1e3 * 1e3 * 100,
verbose: verboseDefault,
stripFinalNewline: !0
}, FD_SPECIFIC_OPTIONS = ["lines", "buffer", "maxBuffer", "verbose", "stripFinalNewline"], getFdSpecificValue = (optionArray, fdNumber) => fdNumber === "ipc" ? optionArray.at(-1) : optionArray[fdNumber];
// ../../node_modules/execa/lib/verbose/values.js
var isVerbose = ({ verbose }, fdNumber) => getFdVerbose(verbose, fdNumber) !== "none", isFullVerbose = ({ verbose }, fdNumber) => !["none", "short"].includes(getFdVerbose(verbose, fdNumber)), getVerboseFunction = ({ verbose }, fdNumber) => {
let fdVerbose = getFdVerbose(verbose, fdNumber);
return isVerboseFunction(fdVerbose) ? fdVerbose : void 0;
}, getFdVerbose = (verbose, fdNumber) => fdNumber === void 0 ? getFdGenericVerbose(verbose) : getFdSpecificValue(verbose, fdNumber), getFdGenericVerbose = (verbose) => verbose.find((fdVerbose) => isVerboseFunction(fdVerbose)) ?? VERBOSE_VALUES.findLast((fdVerbose) => verbose.includes(fdVerbose)), isVerboseFunction = (fdVerbose) => typeof fdVerbose == "function", VERBOSE_VALUES = ["none", "short", "full"];
// ../../node_modules/execa/lib/verbose/log.js
import { inspect } from "node:util";
// ../../node_modules/execa/lib/arguments/escape.js
import { platform } from "node:process";
import { stripVTControlCharacters } from "node:util";
var joinCommand = (filePath, rawArguments) => {
let fileAndArguments = [filePath, ...rawArguments], command = fileAndArguments.join(" "), escapedCommand = fileAndArguments.map((fileAndArgument) => quoteString(escapeControlCharacters(fileAndArgument))).join(" ");
return { command, escapedCommand };
}, escapeLines = (lines) => stripVTControlCharacters(lines).split(`
`).map((line) => escapeControlCharacters(line)).join(`
`), escapeControlCharacters = (line) => line.replaceAll(SPECIAL_CHAR_REGEXP, (character) => escapeControlCharacter(character)), escapeControlCharacter = (character) => {
let commonEscape = COMMON_ESCAPES[character];
if (commonEscape !== void 0)
return commonEscape;
let codepoint = character.codePointAt(0), codepointHex = codepoint.toString(16);
return codepoint <= ASTRAL_START ? `\\u${codepointHex.padStart(4, "0")}` : `\\U${codepointHex}`;
}, getSpecialCharRegExp = () => {
try {
return new RegExp("\\p{Separator}|\\p{Other}", "gu");
} catch {
return /[\s\u0000-\u001F\u007F-\u009F\u00AD]/g;
}
}, SPECIAL_CHAR_REGEXP = getSpecialCharRegExp(), COMMON_ESCAPES = {
" ": " ",
"\b": "\\b",
"\f": "\\f",
"\n": "\\n",
"\r": "\\r",
" ": "\\t"
}, ASTRAL_START = 65535, quoteString = (escapedArgument) => NO_ESCAPE_REGEXP.test(escapedArgument) ? escapedArgument : platform === "win32" ? `"${escapedArgument.replaceAll('"', '""')}"` : `'${escapedArgument.replaceAll("'", "'\\''")}'`, NO_ESCAPE_REGEXP = /^[\w./-]+$/;
// ../../node_modules/is-unicode-supported/index.js
import process3 from "node:process";
function isUnicodeSupported() {
let { env: env2 } = process3, { TERM, TERM_PROGRAM } = env2;
return process3.platform !== "win32" ? TERM !== "linux" : !!env2.WT_SESSION || !!env2.TERMINUS_SUBLIME || env2.ConEmuTask === "{cmd::Cmder}" || TERM_PROGRAM === "Terminus-Sublime" || TERM_PROGRAM === "vscode" || TERM === "xterm-256color" || TERM === "alacritty" || TERM === "rxvt-unicode" || TERM === "rxvt-unicode-256color" || env2.TERMINAL_EMULATOR === "JetBrains-JediTerm";
}
// ../../node_modules/execa/node_modules/figures/index.js
var common = {
circleQuestionMark: "(?)",
questionMarkPrefix: "(?)",
square: "\u2588",
squareDarkShade: "\u2593",
squareMediumShade: "\u2592",
squareLightShade: "\u2591",
squareTop: "\u2580",
squareBottom: "\u2584",
squareLeft: "\u258C",
squareRight: "\u2590",
squareCenter: "\u25A0",
bullet: "\u25CF",
dot: "\u2024",
ellipsis: "\u2026",
pointerSmall: "\u203A",
triangleUp: "\u25B2",
triangleUpSmall: "\u25B4",
triangleDown: "\u25BC",
triangleDownSmall: "\u25BE",
triangleLeftSmall: "\u25C2",
triangleRightSmall: "\u25B8",
home: "\u2302",
heart: "\u2665",
musicNote: "\u266A",
musicNoteBeamed: "\u266B",
arrowUp: "\u2191",
arrowDown: "\u2193",
arrowLeft: "\u2190",
arrowRight: "\u2192",
arrowLeftRight: "\u2194",
arrowUpDown: "\u2195",
almostEqual: "\u2248",
notEqual: "\u2260",
lessOrEqual: "\u2264",
greaterOrEqual: "\u2265",
identical: "\u2261",
infinity: "\u221E",
subscriptZero: "\u2080",
subscriptOne: "\u2081",
subscriptTwo: "\u2082",
subscriptThree: "\u2083",
subscriptFour: "\u2084",
subscriptFive: "\u2085",
subscriptSix: "\u2086",
subscriptSeven: "\u2087",
subscriptEight: "\u2088",
subscriptNine: "\u2089",
oneHalf: "\xBD",
oneThird: "\u2153",
oneQuarter: "\xBC",
oneFifth: "\u2155",
oneSixth: "\u2159",
oneEighth: "\u215B",
twoThirds: "\u2154",
twoFifths: "\u2156",
threeQuarters: "\xBE",
threeFifths: "\u2157",
threeEighths: "\u215C",
fourFifths: "\u2158",
fiveSixths: "\u215A",
fiveEighths: "\u215D",
sevenEighths: "\u215E",
line: "\u2500",
lineBold: "\u2501",
lineDouble: "\u2550",
lineDashed0: "\u2504",
lineDashed1: "\u2505",
lineDashed2: "\u2508",
lineDashed3: "\u2509",
lineDashed4: "\u254C",
lineDashed5: "\u254D",
lineDashed6: "\u2574",
lineDashed7: "\u2576",
lineDashed8: "\u2578",
lineDashed9: "\u257A",
lineDashed10: "\u257C",
lineDashed11: "\u257E",
lineDashed12: "\u2212",
lineDashed13: "\u2013",
lineDashed14: "\u2010",
lineDashed15: "\u2043",
lineVertical: "\u2502",
lineVerticalBold: "\u2503",
lineVerticalDouble: "\u2551",
lineVerticalDashed0: "\u2506",
lineVerticalDashed1: "\u2507",
lineVerticalDashed2: "\u250A",
lineVerticalDashed3: "\u250B",
lineVerticalDashed4: "\u254E",
lineVerticalDashed5: "\u254F",
lineVerticalDashed6: "\u2575",
lineVerticalDashed7: "\u2577",
lineVerticalDashed8: "\u2579",
lineVerticalDashed9: "\u257B",
lineVerticalDashed10: "\u257D",
lineVerticalDashed11: "\u257F",
lineDownLeft: "\u2510",
lineDownLeftArc: "\u256E",
lineDownBoldLeftBold: "\u2513",
lineDownBoldLeft: "\u2512",
lineDownLeftBold: "\u2511",
lineDownDoubleLeftDouble: "\u2557",
lineDownDoubleLeft: "\u2556",
lineDownLeftDouble: "\u2555",
lineDownRight: "\u250C",
lineDownRightArc: "\u256D",
lineDownBoldRightBold: "\u250F",
lineDownBoldRight: "\u250E",
lineDownRightBold: "\u250D",
lineDownDoubleRightDouble: "\u2554",
lineDownDoubleRight: "\u2553",
lineDownRightDouble: "\u2552",
lineUpLeft: "\u2518",
lineUpLeftArc: "\u256F",
lineUpBoldLeftBold: "\u251B",
lineUpBoldLeft: "\u251A",
lineUpLeftBold: "\u2519",
lineUpDoubleLeftDouble: "\u255D",
lineUpDoubleLeft: "\u255C",
lineUpLeftDouble: "\u255B",
lineUpRight: "\u2514",
lineUpRightArc: "\u2570",
lineUpBoldRightBold: "\u2517",
lineUpBoldRight: "\u2516",
lineUpRightBold: "\u2515",
lineUpDoubleRightDouble: "\u255A",
lineUpDoubleRight: "\u2559",
lineUpRightDouble: "\u2558",
lineUpDownLeft: "\u2524",
lineUpBoldDownBoldLeftBold: "\u252B",
lineUpBoldDownBoldLeft: "\u2528",
lineUpDownLeftBold: "\u2525",
lineUpBoldDownLeftBold: "\u2529",
lineUpDownBoldLeftBold: "\u252A",
lineUpDownBoldLeft: "\u2527",
lineUpBoldDownLeft: "\u2526",
lineUpDoubleDownDoubleLeftDouble: "\u2563",
lineUpDoubleDownDoubleLeft: "\u2562",
lineUpDownLeftDouble: "\u2561",
lineUpDownRight: "\u251C",
lineUpBoldDownBoldRightBold: "\u2523",
lineUpBoldDownBoldRight: "\u2520",
lineUpDownRightBold: "\u251D",
lineUpBoldDownRightBold: "\u2521",
lineUpDownBoldRightBold: "\u2522",
lineUpDownBoldRight: "\u251F",
lineUpBoldDownRight: "\u251E",
lineUpDoubleDownDoubleRightDouble: "\u2560",
lineUpDoubleDownDoubleRight: "\u255F",
lineUpDownRightDouble: "\u255E",
lineDownLeftRight: "\u252C",
lineDownBoldLeftBoldRightBold: "\u2533",
lineDownLeftBoldRightBold: "\u252F",
lineDownBoldLeftRight: "\u2530",
lineDownBoldLeftBoldRight: "\u2531",
lineDownBoldLeftRightBold: "\u2532",
lineDownLeftRightBold: "\u252E",
lineDownLeftBoldRight: "\u252D",
lineDownDoubleLeftDoubleRightDouble: "\u2566",
lineDownDoubleLeftRight: "\u2565",
lineDownLeftDoubleRightDouble: "\u2564",
lineUpLeftRight: "\u2534",
lineUpBoldLeftBoldRightBold: "\u253B",
lineUpLeftBoldRightBold: "\u2537",
lineUpBoldLeftRight: "\u2538",
lineUpBoldLeftBoldRight: "\u2539",
lineUpBoldLeftRightBold: "\u253A",
lineUpLeftRightBold: "\u2536",
lineUpLeftBoldRight: "\u2535",
lineUpDoubleLeftDoubleRightDouble: "\u2569",
lineUpDoubleLeftRight: "\u2568",
lineUpLeftDoubleRightDouble: "\u2567",
lineUpDownLeftRight: "\u253C",
lineUpBoldDownBoldLeftBoldRightBold: "\u254B",
lineUpDownBoldLeftBoldRightBold: "\u2548",
lineUpBoldDownLeftBoldRightBold: "\u2547",
lineUpBoldDownBoldLeftRightBold: "\u254A",
lineUpBoldDownBoldLeftBoldRight: "\u2549",
lineUpBoldDownLeftRight: "\u2540",
lineUpDownBoldLeftRight: "\u2541",
lineUpDownLeftBoldRight: "\u253D",
lineUpDownLeftRightBold: "\u253E",
lineUpBoldDownBoldLeftRight: "\u2542",
lineUpDownLeftBoldRightBold: "\u253F",
lineUpBoldDownLeftBoldRight: "\u2543",
lineUpBoldDownLeftRightBold: "\u2544",
lineUpDownBoldLeftBoldRight: "\u2545",
lineUpDownBoldLeftRightBold: "\u2546",
lineUpDoubleDownDoubleLeftDoubleRightDouble: "\u256C",
lineUpDoubleDownDoubleLeftRight: "\u256B",
lineUpDownLeftDoubleRightDouble: "\u256A",
lineCross: "\u2573",
lineBackslash: "\u2572",
lineSlash: "\u2571"
}, specialMainSymbols = {
tick: "\u2714",
info: "\u2139",
warning: "\u26A0",
cross: "\u2718",
squareSmall: "\u25FB",
squareSmallFilled: "\u25FC",
circle: "\u25EF",
circleFilled: "\u25C9",
circleDotted: "\u25CC",
circleDouble: "\u25CE",
circleCircle: "\u24DE",
circleCross: "\u24E7",
circlePipe: "\u24BE",
radioOn: "\u25C9",
radioOff: "\u25EF",
checkboxOn: "\u2612",
checkboxOff: "\u2610",
checkboxCircleOn: "\u24E7",
checkboxCircleOff: "\u24BE",
pointer: "\u276F",
triangleUpOutline: "\u25B3",
triangleLeft: "\u25C0",
triangleRight: "\u25B6",
lozenge: "\u25C6",
lozengeOutline: "\u25C7",
hamburger: "\u2630",
smiley: "\u32E1",
mustache: "\u0DF4",
star: "\u2605",
play: "\u25B6",
nodejs: "\u2B22",
oneSeventh: "\u2150",
oneNinth: "\u2151",
oneTenth: "\u2152"
}, specialFallbackSymbols = {
tick: "\u221A",
info: "i",
warning: "\u203C",
cross: "\xD7",
squareSmall: "\u25A1",
squareSmallFilled: "\u25A0",
circle: "( )",
circleFilled: "(*)",
circleDotted: "( )",
circleDouble: "( )",
circleCircle: "(\u25CB)",
circleCross: "(\xD7)",
circlePipe: "(\u2502)",
radioOn: "(*)",
radioOff: "( )",
checkboxOn: "[\xD7]",
checkboxOff: "[ ]",
checkboxCircleOn: "(\xD7)",
checkboxCircleOff: "( )",
pointer: ">",
triangleUpOutline: "\u2206",
triangleLeft: "\u25C4",
triangleRight: "\u25BA",
lozenge: "\u2666",
lozengeOutline: "\u25CA",
hamburger: "\u2261",
smiley: "\u263A",
mustache: "\u250C\u2500\u2510",
star: "\u2736",
play: "\u25BA",
nodejs: "\u2666",
oneSeventh: "1/7",
oneNinth: "1/9",
oneTenth: "1/10"
}, mainSymbols = { ...common, ...specialMainSymbols }, fallbackSymbols = { ...common, ...specialFallbackSymbols }, shouldUseMain = isUnicodeSupported(), figures = shouldUseMain ? mainSymbols : fallbackSymbols, figures_default = figures, replacements = Object.entries(specialMainSymbols);
// ../../node_modules/yoctocolors/base.js
import tty from "node:tty";
var hasColors = tty?.WriteStream?.prototype?.hasColors?.() ?? !1, format = (open, close) => {
if (!hasColors)
return (input) => input;
let openCode = `\x1B[${open}m`, closeCode = `\x1B[${close}m`;
return (input) => {
let string = input + "", index = string.indexOf(closeCode);
if (index === -1)
return openCode + string + closeCode;
let result = openCode, lastIndex = 0, replaceCode = (close === 22 ? closeCode : "") + openCode;
for (; index !== -1; )
result += string.slice(lastIndex, index) + replaceCode, lastIndex = index + closeCode.length, index = string.indexOf(closeCode, lastIndex);
return result += string.slice(lastIndex) + closeCode, result;
};
}, reset = format(0, 0), bold = format(1, 22), dim = format(2, 22), italic = format(3, 23), underline = format(4, 24), overline = format(53, 55), inverse = format(7, 27), hidden = format(8, 28), strikethrough = format(9, 29), black = format(30, 39), red = format(31, 39), green = format(32, 39), yellow = format(33, 39), blue = format(34, 39), magenta = format(35, 39), cyan = format(36, 39), white = format(37, 39), gray = format(90, 39), bgBlack = format(40, 49), bgRed = format(41, 49), bgGreen = format(42, 49), bgYellow = format(43, 49), bgBlue = format(44, 49), bgMagenta = format(45, 49), bgCyan = format(46, 49), bgWhite = format(47, 49), bgGray = format(100, 49), redBright = format(91, 39), greenBright = format(92, 39), yellowBright = format(93, 39), blueBright = format(94, 39), magentaBright = format(95, 39), cyanBright = format(96, 39), whiteBright = format(97, 39), bgRedBright = format(101, 49), bgGreenBright = format(102, 49), bgYellowBright = format(103, 49), bgBlueBright = format(104, 49), bgMagentaBright = format(105, 49), bgCyanBright = format(106, 49), bgWhiteBright = format(107, 49);
// ../../node_modules/execa/lib/verbose/default.js
var defaultVerboseFunction = ({
type,
message,
timestamp,
piped,
commandId,
result: { failed = !1 } = {},
options: { reject = !0 }
}) => {
let timestampString = serializeTimestamp(timestamp), icon = ICONS[type]({ failed, reject, piped }), color = COLORS[type]({ reject });
return `${gray(`[${timestampString}]`)} ${gray(`[${commandId}]`)} ${color(icon)} ${color(message)}`;
}, serializeTimestamp = (timestamp) => `${padField(timestamp.getHours(), 2)}:${padField(timestamp.getMinutes(), 2)}:${padField(timestamp.getSeconds(), 2)}.${padField(timestamp.getMilliseconds(), 3)}`, padField = (field, padding) => String(field).padStart(padding, "0"), getFinalIcon = ({ failed, reject }) => failed ? reject ? figures_default.cross : figures_default.warning : figures_default.tick, ICONS = {
command: ({ piped }) => piped ? "|" : "$",
output: () => " ",
ipc: () => "*",
error: getFinalIcon,
duration: getFinalIcon
}, identity = (string) => string, COLORS = {
command: () => bold,
output: () => identity,
ipc: () => identity,
error: ({ reject }) => reject ? redBright : yellowBright,
duration: () => gray
};
// ../../node_modules/execa/lib/verbose/custom.js
var applyVerboseOnLines = (printedLines, verboseInfo, fdNumber) => {
let verboseFunction = getVerboseFunction(verboseInfo, fdNumber);
return printedLines.map(({ verboseLine, verboseObject }) => applyVerboseFunction(verboseLine, verboseObject, verboseFunction)).filter((printedLine) => printedLine !== void 0).map((printedLine) => appendNewline(printedLine)).join("");
}, applyVerboseFunction = (verboseLine, verboseObject, verboseFunction) => {
if (verboseFunction === void 0)
return verboseLine;
let printedLine = verboseFunction(verboseLine, verboseObject);
if (typeof printedLine == "string")
return printedLine;
}, appendNewline = (printedLine) => printedLine.endsWith(`
`) ? printedLine : `${printedLine}
`;
// ../../node_modules/execa/lib/verbose/log.js
var verboseLog = ({ type, verboseMessage, fdNumber, verboseInfo, result }) => {
let verboseObject = getVerboseObject({ type, result, verboseInfo }), printedLines = getPrintedLines(verboseMessage, verboseObject), finalLines = applyVerboseOnLines(printedLines, verboseInfo, fdNumber);
finalLines !== "" && console.warn(finalLines.slice(0, -1));
}, getVerboseObject = ({
type,
result,
verboseInfo: { escapedCommand, commandId, rawOptions: { piped = !1, ...options } }
}) => ({
type,
escapedCommand,
commandId: `${commandId}`,
timestamp: /* @__PURE__ */ new Date(),
piped,
result,
options
}), getPrintedLines = (verboseMessage, verboseObject) => verboseMessage.split(`
`).map((message) => getPrintedLine({ ...verboseObject, message })), getPrintedLine = (verboseObject) => ({ verboseLine: defaultVerboseFunction(verboseObject), verboseObject }), serializeVerboseMessage = (message) => {
let messageString = typeof message == "string" ? message : inspect(message);
return escapeLines(messageString).replaceAll(" ", " ".repeat(TAB_SIZE));
}, TAB_SIZE = 2;
// ../../node_modules/execa/lib/verbose/start.js
var logCommand = (escapedCommand, verboseInfo) => {
isVerbose(verboseInfo) && verboseLog({
type: "command",
verboseMessage: escapedCommand,
verboseInfo
});
};
// ../../node_modules/execa/lib/verbose/info.js
var getVerboseInfo = (verbose, escapedCommand, rawOptions) => {
validateVerbose(verbose);
let commandId = getCommandId(verbose);
return {
verbose,
escapedCommand,
commandId,
rawOptions
};
}, getCommandId = (verbose) => isVerbose({ verbose }) ? COMMAND_ID++ : void 0, COMMAND_ID = 0n, validateVerbose = (verbose) => {
for (let fdVerbose of verbose) {
if (fdVerbose === !1)
throw new TypeError(`The "verbose: false" option was renamed to "verbose: 'none'".`);
if (fdVerbose === !0)
throw new TypeError(`The "verbose: true" option was renamed to "verbose: 'short'".`);
if (!VERBOSE_VALUES.includes(fdVerbose) && !isVerboseFunction(fdVerbose)) {
let allowedValues = VERBOSE_VALUES.map((allowedValue) => `'${allowedValue}'`).join(", ");
throw new TypeError(`The "verbose" option must not be ${fdVerbose}. Allowed values are: ${allowedValues} or a function.`);
}
}
};
// ../../node_modules/execa/lib/return/duration.js
import { hrtime } from "node:process";
var getStartTime = () => hrtime.bigint(), getDurationMs = (startTime) => Number(hrtime.bigint() - startTime) / 1e6;
// ../../node_modules/execa/lib/arguments/command.js
var handleCommand = (filePath, rawArguments, rawOptions) => {
let startTime = getStartTime(), { command, escapedCommand } = joinCommand(filePath, rawArguments), verbose = normalizeFdSpecificOption(rawOptions, "verbose"), verboseInfo = getVerboseInfo(verbose, escapedCommand, { ...rawOptions });
return logCommand(escapedCommand, verboseInfo), {
command,
escapedCommand,
startTime,
verboseInfo
};
};
// ../../node_modules/execa/lib/arguments/options.js
var import_cross_spawn = __toESM(require_cross_spawn(), 1);
import path4 from "node:path";
import process6 from "node:process";
// ../../node_modules/execa/node_modules/npm-run-path/index.js
import process4 from "node:process";
import path from "node:path";
// ../../node_modules/execa/node_modules/path-key/index.js
function pathKey(options = {}) {
let {
env: env2 = process.env,
platform: platform2 = process.platform
} = options;
return platform2 !== "win32" ? "PATH" : Object.keys(env2).reverse().find((key) => key.toUpperCase() === "PATH") || "Path";
}
// ../../node_modules/execa/node_modules/npm-run-path/index.js
var npmRunPath = ({
cwd = process4.cwd(),
path: pathOption = process4.env[pathKey()],
preferLocal = !0,
execPath: execPath2 = process4.execPath,
addExecPath = !0
} = {}) => {
let cwdPath = path.resolve(toPath(cwd)), result = [], pathParts = pathOption.split(path.delimiter);
return preferLocal && applyPreferLocal(result, pathParts, cwdPath), addExecPath && applyExecPath(result, pathParts, execPath2, cwdPath), pathOption === "" || pathOption === path.delimiter ? `${result.join(path.delimiter)}${pathOption}` : [...result, pathOption].join(path.delimiter);
}, applyPreferLocal = (result, pathParts, cwdPath) => {
for (let directory of traversePathUp(cwdPath)) {
let pathPart = path.join(directory, "node_modules/.bin");
pathParts.includes(pathPart) || result.push(pathPart);
}
}, applyExecPath = (result, pathParts, execPath2, cwdPath) => {
let pathPart = path.resolve(cwdPath, toPath(execPath2), "..");
pathParts.includes(pathPart) || result.push(pathPart);
}, npmRunPathEnv = ({ env: env2 = process4.env, ...options } = {}) => {
env2 = { ...env2 };
let pathName = pathKey({ env: env2 });
return options.path = env2[pathName], env2[pathName] = npmRunPath(options), env2;
};
// ../../node_modules/execa/lib/terminate/kill.js
import { setTimeout as setTimeout2 } from "node:timers/promises";
// ../../node_modules/execa/lib/return/final-error.js
var getFinalError = (originalError, message, isSync) => {
let ErrorClass = isSync ? ExecaSyncError : ExecaError, options = originalError instanceof DiscardedError ? {} : { cause: originalError };
return new ErrorClass(message, options);
}, DiscardedError = class extends Error {
}, setErrorName = (ErrorClass, value) => {
Object.defineProperty(ErrorClass.prototype, "name", {
value,
writable: !0,
enumerable: !1,
configurable: !0
}), Object.defineProperty(ErrorClass.prototype, execaErrorSymbol, {
value: !0,
writable: !1,
enumerable: !1,
configurable: !1
});
}, isExecaError = (error) => isErrorInstance(error) && execaErrorSymbol in error, execaErrorSymbol = /* @__PURE__ */ Symbol("isExecaError"), isErrorInstance = (value) => Object.prototype.toString.call(value) === "[object Error]", ExecaError = class extends Error {
};
setErrorName(ExecaError, ExecaError.name);
var ExecaSyncError = class extends Error {
};
setErrorName(ExecaSyncError, ExecaSyncError.name);
// ../../node_modules/execa/lib/terminate/signal.js
import { constants as constants4 } from "node:os";
// ../../node_modules/human-signals/build/src/main.js
import { constants as constants3 } from "node:os";
// ../../node_modules/human-signals/build/src/realtime.js
var getRealtimeSignals = () => {
let length = SIGRTMAX - SIGRTMIN + 1;
return Array.from({ length }, getRealtimeSignal);
}, getRealtimeSignal = (value, index) => ({
name: `SIGRT${index + 1}`,
number: SIGRTMIN + index,
action: "terminate",
description: "Application-specific signal (realtime)",
standard: "posix"
}), SIGRTMIN = 34, SIGRTMAX = 64;
// ../../node_modules/human-signals/build/src/signals.js
import { constants as constants2 } from "node:os";
// ../../node_modules/human-signals/build/src/core.js
var SIGNALS = [
{
name: "SIGHUP",
number: 1,
action: "terminate",
description: "Terminal closed",
standard: "posix"
},
{
name: "SIGINT",
number: 2,
action: "terminate",
description: "User interruption with CTRL-C",
standard: "ansi"
},
{
name: "SIGQUIT",
number: 3,
action: "core",
description: "User interruption with CTRL-\\",
standard: "posix"
},
{
name: "SIGILL",
number: 4,
action: "core",
description: "Invalid machine instruction",
standard: "ansi"
},
{
name: "SIGTRAP",
number: 5,
action: "core",
description: "Debugger breakpoint",
standard: "posix"
},
{
name: "SIGABRT",
number: 6,
action: "core",
description: "Aborted",
standard: "ansi"
},
{
name: "SIGIOT",
number: 6,
action: "core",
description: "Aborted",
standard: "bsd"
},
{
name: "SIGBUS",
number: 7,
action: "core",
description: "Bus error due to misaligned, non-existing address or paging error",
standard: "bsd"
},
{
name: "SIGEMT",
number: 7,
action: "terminate",
description: "Command should be emulated but is not implemented",
standard: "other"
},
{
name: "SIGFPE",
number: 8,
action: "core",
description: "Floating point arithmetic error",
standard: "ansi"
},
{
name: "SIGKILL",
number: 9,
action: "terminate",
description: "Forced termination",
standard: "posix",
forced: !0
},
{
name: "SIGUSR1",
number: 10,
action: "terminate",
description: "Application-specific signal",
standard: "posix"
},
{
name: "SIGSEGV",
number: 11,
action: "core",
description: "Segmentation fault",
standard: "ansi"
},
{
name: "SIGUSR2",
number: 12,
action: "terminate",
description: "Application-specific signal",
standard: "posix"
},
{
name: "SIGPIPE",
number: 13,
action: "terminate",
description: "Broken pipe or socket",
standard: "posix"
},
{
name: "SIGALRM",
number: 14,
action: "terminate",
description: "Timeout or timer",
standard: "posix"
},
{
name: "SIGTERM",
number: 15,
action: "terminate",
description: "Termination",
standard: "ansi"
},
{
name: "SIGSTKFLT",
number: 16,
action: "terminate",
description: "Stack is empty or overflowed",
standard: "other"
},
{
name: "SIGCHLD",
number: 17,
action: "ignore",
description: "Child process terminated, paused or unpaused",
standard: "posix"
},
{
name: "SIGCLD",
number: 17,
action: "ignore",
description: "Child process terminated, paused or unpaused",
standard: "other"
},
{
name: "SIGCONT",
number: 18,
action: "unpause",
description: "Unpaused",
standard: "posix",
forced: !0
},
{
name: "SIGSTOP",
number: 19,
action: "pause",
description: "Paused",
standard: "posix",
forced: !0
},
{
name: "SIGTSTP",
number: 20,
action: "pause",
description: 'Paused using CTRL-Z or "suspend"',
standard: "posix"
},
{
name: "SIGTTIN",
number: 21,
action: "pause",
description: "Background process cannot read terminal input",
standard: "posix"
},
{
name: "SIGBREAK",
number: 21,
action: "terminate",
description: "User interruption with CTRL-BREAK",
standard: "other"
},
{
name: "SIGTTOU",
number: 22,
action: "pause",
description: "Background process cannot write to terminal output",
standard: "posix"
},
{
name: "SIGURG",
number: 23,
action: "ignore",
description: "Socket received out-of-band data",
standard: "bsd"
},
{
name: "SIGXCPU",
number: 24,
action: "core",
description: "Process timed out",
standard: "bsd"
},
{
name: "SIGXFSZ",
number: 25,
action: "core",
description: "File too big",
standard: "bsd"
},
{
name: "SIGVTALRM",
number: 26,
action: "terminate",
description: "Timeout or timer",
standard: "bsd"
},
{
name: "SIGPROF",
number: 27,
action: "terminate",
description: "Timeout or timer",
standard: "bsd"
},
{
name: "SIGWINCH",
number: 28,
action: "ignore",
description: "Terminal window size changed",
standard: "bsd"
},
{
name: "SIGIO",
number: 29,
action: "terminate",
description: "I/O is available",
standard: "other"
},
{
name: "SIGPOLL",
number: 29,
action: "terminate",
description: "Watched event",
standard: "other"
},
{
name: "SIGINFO",
number: 29,
action: "ignore",
description: "Request for process information",
standard: "other"
},
{
name: "SIGPWR",
number: 30,
action: "terminate",
description: "Device running out of power",
standard: "systemv"
},
{
name: "SIGSYS",
number: 31,
action: "core",
description: "Invalid system call",
standard: "other"
},
{
name: "SIGUNUSED",
number: 31,
action: "terminate",
description: "Invalid system call",
standard: "other"
}
];
// ../../node_modules/human-signals/build/src/signals.js
var getSignals = () => {
let realtimeSignals = getRealtimeSignals();
return [...SIGNALS, ...realtimeSignals].map(normalizeSignal);
}, normalizeSignal = ({
name,
number: defaultNumber,
description,
action,
forced = !1,
standard
}) => {
let {
signals: { [name]: constantSignal }
} = constants2, supported = constantSignal !== void 0;
return { name, number: supported ? constantSignal : defaultNumber, description, supported, action, forced, standard };
};
// ../../node_modules/human-signals/build/src/main.js
var getSignalsByName = () => {
let signals2 = getSignals();
return Object.fromEntries(signals2.map(getSignalByName));
}, getSignalByName = ({
name,
number,
description,
supported,
action,
forced,
standard
}) => [name, { name, number, description, supported, action, forced, standard }], signalsByName = getSignalsByName(), getSignalsByNumber = () => {
let signals2 = getSignals(), length = 65, signalsA = Array.from(
{ length },
(value, number) => getSignalByNumber(number, signals2)
);
return Object.assign({}, ...signalsA);
}, getSignalByNumber = (number, signals2) => {
let signal = findSignalByNumber(number, signals2);
if (signal === void 0)
return {};
let { name, description, supported, action, forced, standard } = signal;
return {
[number]: {
name,
number,
description,
supported,
action,
forced,
standard
}
};
}, findSignalByNumber = (number, signals2) => {
let signal = signals2.find(({ name }) => constants3.signals[name] === number);
return signal !== void 0 ? signal : signals2.find((signalA) => signalA.number === number);
}, signalsByNumber = getSignalsByNumber();
// ../../node_modules/execa/lib/terminate/signal.js
var normalizeKillSignal = (killSignal) => {
let optionName = "option `killSignal`";
if (killSignal === 0)
throw new TypeError(`Invalid ${optionName}: 0 cannot be used.`);
return normalizeSignal2(killSignal, optionName);
}, normalizeSignalArgument = (signal) => signal === 0 ? signal : normalizeSignal2(signal, "`subprocess.kill()`'s argument"), normalizeSignal2 = (signalNameOrInteger, optionName) => {
if (Number.isInteger(signalNameOrInteger))
return normalizeSignalInteger(signalNameOrInteger, optionName);
if (typeof signalNameOrInteger == "string")
return normalizeSignalName(signalNameOrInteger, optionName);
throw new TypeError(`Invalid ${optionName} ${String(signalNameOrInteger)}: it must be a string or an integer.
${getAvailableSignals()}`);
}, normalizeSignalInteger = (signalInteger, optionName) => {
if (signalsIntegerToName.has(signalInteger))
return signalsIntegerToName.get(signalInteger);
throw new TypeError(`Invalid ${optionName} ${signalInteger}: this signal integer does not exist.
${getAvailableSignals()}`);
}, getSignalsIntegerToName = () => new Map(Object.entries(constants4.signals).reverse().map(([signalName, signalInteger]) => [signalInteger, signalName])), signalsIntegerToName = getSignalsIntegerToName(), normalizeSignalName = (signalName, optionName) => {
if (signalName in constants4.signals)
return signalName;
throw signalName.toUpperCase() in constants4.signals ? new TypeError(`Invalid ${optionName} '${signalName}': please rename it to '${signalName.toUpperCase()}'.`) : new TypeError(`Invalid ${optionName} '${signalName}': this signal name does not exist.
${getAvailableSignals()}`);
}, getAvailableSignals = () => `Available signal names: ${getAvailableSignalNames()}.
Available signal numbers: ${getAvailableSignalIntegers()}.`, getAvailableSignalNames = () => Object.keys(constants4.signals).sort().map((signalName) => `'${signalName}'`).join(", "), getAvailableSignalIntegers = () => [...new Set(Object.values(constants4.signals).sort((signalInteger, signalIntegerTwo) => signalInteger - signalIntegerTwo))].join(", "), getSignalDescription = (signal) => signalsByName[signal].description;
// ../../node_modules/execa/lib/terminate/kill.js
var normalizeForceKillAfterDelay = (forceKillAfterDelay) => {
if (forceKillAfterDelay === !1)
return forceKillAfterDelay;
if (forceKillAfterDelay === !0)
return DEFAULT_FORCE_KILL_TIMEOUT;
if (!Number.isFinite(forceKillAfterDelay) || forceKillAfterDelay < 0)
throw new TypeError(`Expected the \`forceKillAfterDelay\` option to be a non-negative integer, got \`${forceKillAfterDelay}\` (${typeof forceKillAfterDelay})`);
return forceKillAfterDelay;
}, DEFAULT_FORCE_KILL_TIMEOUT = 1e3 * 5, subprocessKill = ({ kill, options: { forceKillAfterDelay, killSignal }, onInternalError, context, controller }, signalOrError, errorArgument) => {
let { signal, error } = parseKillArguments(signalOrError, errorArgument, killSignal);
emitKillError(error, onInternalError);
let killResult = kill(signal);
return setKillTimeout({
kill,
signal,
forceKillAfterDelay,
killSignal,
killResult,
context,
controller
}), killResult;
}, parseKillArguments = (signalOrError, errorArgument, killSignal) => {
let [signal = killSignal, error] = isErrorInstance(signalOrError) ? [void 0, signalOrError] : [signalOrError, errorArgument];
if (typeof signal != "string" && !Number.isInteger(signal))
throw new TypeError(`The first argument must be an error instance or a signal name string/integer: ${String(signal)}`);
if (error !== void 0 && !isErrorInstance(error))
throw new TypeError(`The second argument is optional. If specified, it must be an error instance: ${error}`);
return { signal: normalizeSignalArgument(signal), error };
}, emitKillError = (error, onInternalError) => {
error !== void 0 && onInternalError.reject(error);
}, setKillTimeout = async ({ kill, signal, forceKillAfterDelay, killSignal, killResult, context, controller }) => {
signal === killSignal && killResult && killOnTimeout({
kill,
forceKillAfterDelay,
context,
controllerSignal: controller.signal
});
}, killOnTimeout = async ({ kill, forceKillAfterDelay, context, controllerSignal }) => {
if (forceKillAfterDelay !== !1)
try {
await setTimeout2(forceKillAfterDelay, void 0, { signal: controllerSignal }), kill("SIGKILL") && (context.isForcefullyTerminated ??= !0);
} catch {
}
};
// ../../node_modules/execa/lib/utils/abort-signal.js
import { once as once3 } from "node:events";
var onAbortedSignal = async (mainSignal, stopSignal) => {
mainSignal.aborted || await once3(mainSignal, "abort", { signal: stopSignal });
};
// ../../node_modules/execa/lib/terminate/cancel.js
var validateCancelSignal = ({ cancelSignal }) => {
if (cancelSignal !== void 0 && Object.prototype.toString.call(cancelSignal) !== "[object AbortSignal]")
throw new Error(`The \`cancelSignal\` option must be an AbortSignal: ${String(cancelSignal)}`);
}, throwOnCancel = ({ subprocess, cancelSignal, gracefulCancel, context, controller }) => cancelSignal === void 0 || gracefulCancel ? [] : [terminateOnCancel(subprocess, cancelSignal, context, controller)], terminateOnCancel = async (subprocess, cancelSignal, context, { signal }) => {
throw await onAbortedSignal(cancelSignal, signal), context.terminationReason ??= "cancel", subprocess.kill(), cancelSignal.reason;
};
// ../../node_modules/execa/lib/ipc/graceful.js
import { scheduler as scheduler2 } from "node:timers/promises";
// ../../node_modules/execa/lib/ipc/send.js
import { promisify as promisify2 } from "node:util";
// ../../node_modules/execa/lib/ipc/validation.js
var validateIpcMethod = ({ methodName, isSubprocess, ipc, isConnected: isConnected2 }) => {
validateIpcOption(methodName, isSubprocess, ipc), validateConnection(methodName, isSubprocess, isConnected2);
}, validateIpcOption = (methodName, isSubprocess, ipc) => {
if (!ipc)
throw new Error(`${getMethodName(methodName, isSubprocess)} can only be used if the \`ipc\` option is \`true\`.`);
}, validateConnection = (methodName, isSubprocess, isConnected2) => {
if (!isConnected2)
throw new Error(`${getMethodName(methodName, isSubprocess)} cannot be used: the ${getOtherProcessName(isSubprocess)} has already exited or disconnected.`);
}, throwOnEarlyDisconnect = (isSubprocess) => {
throw new Error(`${getMethodName("getOneMessage", isSubprocess)} could not complete: the ${getOtherProcessName(isSubprocess)} exited or disconnected.`);
}, throwOnStrictDeadlockError = (isSubprocess) => {
throw new Error(`${getMethodName("sendMessage", isSubprocess)} failed: the ${getOtherProcessName(isSubprocess)} is sending a message too, instead of listening to incoming messages.
This can be fixed by both sending a message and listening to incoming messages at the same time:
const [receivedMessage] = await Promise.all([
${getMethodName("getOneMessage", isSubprocess)},
${getMethodName("sendMessage", isSubprocess, "message, {strict: true}")},
]);`);
}, getStrictResponseError = (error, isSubprocess) => new Error(`${getMethodName("sendMessage", isSubprocess)} failed when sending an acknowledgment response to the ${getOtherProcessName(isSubprocess)}.`, { cause: error }), throwOnMissingStrict = (isSubprocess) => {
throw new Error(`${getMethodName("sendMessage", isSubprocess)} failed: the ${getOtherProcessName(isSubprocess)} is not listening to incoming messages.`);
}, throwOnStrictDisconnect = (isSubprocess) => {
throw new Error(`${getMethodName("sendMessage", isSubprocess)} failed: the ${getOtherProcessName(isSubprocess)} exited without listening to incoming messages.`);
}, getAbortDisconnectError = () => new Error(`\`cancelSignal\` aborted: the ${getOtherProcessName(!0)} disconnected.`), throwOnMissingParent = () => {
throw new Error("`getCancelSignal()` cannot be used without setting the `cancelSignal` subprocess option.");
}, handleEpipeError = ({ error, methodName, isSubprocess }) => {
if (error.code === "EPIPE")
throw new Error(`${getMethodName(methodName, isSubprocess)} cannot be used: the ${getOtherProcessName(isSubprocess)} is disconnecting.`, { cause: error });
}, handleSerializationError = ({ error, methodName, isSubprocess, message }) => {
if (isSerializationError(error))
throw new Error(`${getMethodName(methodName, isSubprocess)}'s argument type is invalid: the message cannot be serialized: ${String(message)}.`, { cause: error });
}, isSerializationError = ({ code, message }) => SERIALIZATION_ERROR_CODES.has(code) || SERIALIZATION_ERROR_MESSAGES.some((serializationErrorMessage) => message.includes(serializationErrorMessage)), SERIALIZATION_ERROR_CODES = /* @__PURE__ */ new Set([
// Message is `undefined`
"ERR_MISSING_ARGS",
// Message is a function, a bigint, a symbol
"ERR_INVALID_ARG_TYPE"
]), SERIALIZATION_ERROR_MESSAGES = [
// Message is a promise or a proxy, with `serialization: 'advanced'`
"could not be cloned",
// Message has cycles, with `serialization: 'json'`
"circular structure",
// Message has cycles inside toJSON(), with `serialization: 'json'`
"call stack size exceeded"
], getMethodName = (methodName, isSubprocess, parameters = "") => methodName === "cancelSignal" ? "`cancelSignal`'s `controller.abort()`" : `${getNamespaceName(isSubprocess)}${methodName}(${parameters})`, getNamespaceName = (isSubprocess) => isSubprocess ? "" : "subprocess.", getOtherProcessName = (isSubprocess) => isSubprocess ? "parent process" : "subprocess", disconnect = (anyProcess) => {
anyProcess.connected && anyProcess.disconnect();
};
// ../../node_modules/execa/lib/utils/deferred.js
var createDeferred = () => {
let methods = {}, promise = new Promise((resolve9, reject) => {
Object.assign(methods, { resolve: resolve9, reject });
});
return Object.assign(promise, methods);
};
// ../../node_modules/execa/lib/arguments/fd-options.js
var getToStream = (destination, to = "stdin") => {
let { options, fileDescriptors } = SUBPROCESS_OPTIONS.get(destination), fdNumber = getFdNumber(fileDescriptors, to, !0), destinationStream = destination.stdio[fdNumber];
if (destinationStream === null)
throw new TypeError(getInvalidStdioOptionMessage(fdNumber, to, options, !0));
return destinationStream;
}, getFromStream = (source, from2 = "stdout") => {
let { options, fileDescriptors } = SUBPROCESS_OPTIONS.get(source), fdNumber = getFdNumber(fileDescriptors, from2, !1), sourceStream = fdNumber === "all" ? source.all : source.stdio[fdNumber];
if (sourceStream == null)
throw new TypeError(getInvalidStdioOptionMessage(fdNumber, from2, options, !1));
return sourceStream;
}, SUBPROCESS_OPTIONS = /* @__PURE__ */ new WeakMap(), getFdNumber = (fileDescriptors, fdName, isWritable) => {
let fdNumber = parseFdNumber(fdName, isWritable);
return validateFdNumber(fdNumber, fdName, isWritable, fileDescriptors), fdNumber;
}, parseFdNumber = (fdName, isWritable) => {
let fdNumber = parseFd(fdName);
if (fdNumber !== void 0)
return fdNumber;
let { validOptions, defaultValue } = isWritable ? { validOptions: '"stdin"', defaultValue: "stdin" } : { validOptions: '"stdout", "stderr", "all"', defaultValue: "stdout" };
throw new TypeError(`"${getOptionName(isWritable)}" must not be "${fdName}".
It must be ${validOptions} or "fd3", "fd4" (and so on).
It is optional and defaults to "${defaultValue}".`);
}, validateFdNumber = (fdNumber, fdName, isWritable, fileDescriptors) => {
let fileDescriptor = fileDescriptors[getUsedDescriptor(fdNumber)];
if (fileDescriptor === void 0)
throw new TypeError(`"${getOptionName(isWritable)}" must not be ${fdName}. That file descriptor does not exist.
Please set the "stdio" option to ensure that file descriptor exists.`);
if (fileDescriptor.direction === "input" && !isWritable)
throw new TypeError(`"${getOptionName(isWritable)}" must not be ${fdName}. It must be a readable stream, not writable.`);
if (fileDescriptor.direction !== "input" && isWritable)
throw new TypeError(`"${getOptionName(isWritable)}" must not be ${fdName}. It must be a writable stream, not readable.`);
}, getInvalidStdioOptionMessage = (fdNumber, fdName, options, isWritable) => {
if (fdNumber === "all" && !options.all)
return `The "all" option must be true to use "from: 'all'".`;
let { optionName, optionValue } = getInvalidStdioOption(fdNumber, options);
return `The "${optionName}: ${serializeOptionValue(optionValue)}" option is incompatible with using "${getOptionName(isWritable)}: ${serializeOptionValue(fdName)}".
Please set this option with "pipe" instead.`;
}, getInvalidStdioOption = (fdNumber, { stdin, stdout, stderr, stdio }) => {
let usedDescriptor = getUsedDescriptor(fdNumber);
return usedDescriptor === 0 && stdin !== void 0 ? { optionName: "stdin", optionValue: stdin } : usedDescriptor === 1 && stdout !== void 0 ? { optionName: "stdout", optionValue: stdout } : usedDescriptor === 2 && stderr !== void 0 ? { optionName: "stderr", optionValue: stderr } : { optionName: `stdio[${usedDescriptor}]`, optionValue: stdio[usedDescriptor] };
}, getUsedDescriptor = (fdNumber) => fdNumber === "all" ? 1 : fdNumber, getOptionName = (isWritable) => isWritable ? "to" : "from", serializeOptionValue = (value) => typeof value == "string" ? `'${value}'` : typeof value == "number" ? `${value}` : "Stream";
// ../../node_modules/execa/lib/ipc/strict.js
import { once as once5 } from "node:events";
// ../../node_modules/execa/lib/utils/max-listeners.js
import { addAbortListener } from "node:events";
var incrementMaxListeners = (eventEmitter, maxListenersIncrement, signal) => {
let maxListeners = eventEmitter.getMaxListeners();
maxListeners === 0 || maxListeners === Number.POSITIVE_INFINITY || (eventEmitter.setMaxListeners(maxListeners + maxListenersIncrement), addAbortListener(signal, () => {
eventEmitter.setMaxListeners(eventEmitter.getMaxListeners() - maxListenersIncrement);
}));
};
// ../../node_modules/execa/lib/ipc/forward.js
import { EventEmitter } from "node:events";
// ../../node_modules/execa/lib/ipc/incoming.js
import { once as once4 } from "node:events";
import { scheduler } from "node:timers/promises";
// ../../node_modules/execa/lib/ipc/reference.js
var addReference = (channel, reference) => {
reference && addReferenceCount(channel);
}, addReferenceCount = (channel) => {
channel.refCounted();
}, removeReference = (channel, reference) => {
reference && removeReferenceCount(channel);
}, removeReferenceCount = (channel) => {
channel.unrefCounted();
}, undoAddedReferences = (channel, isSubprocess) => {
isSubprocess && (removeReferenceCount(channel), removeReferenceCount(channel));
}, redoAddedReferences = (channel, isSubprocess) => {
isSubprocess && (addReferenceCount(channel), addReferenceCount(channel));
};
// ../../node_modules/execa/lib/ipc/incoming.js
var onMessage = async ({ anyProcess, channel, isSubprocess, ipcEmitter }, wrappedMessage) => {
if (handleStrictResponse(wrappedMessage) || handleAbort(wrappedMessage))
return;
INCOMING_MESSAGES.has(anyProcess) || INCOMING_MESSAGES.set(anyProcess, []);
let incomingMessages = INCOMING_MESSAGES.get(anyProcess);
if (incomingMessages.push(wrappedMessage), !(incomingMessages.length > 1))
for (; incomingMessages.length > 0; ) {
await waitForOutgoingMessages(anyProcess, ipcEmitter, wrappedMessage), await scheduler.yield();
let message = await handleStrictRequest({
wrappedMessage: incomingMessages[0],
anyProcess,
channel,
isSubprocess,
ipcEmitter
});
incomingMessages.shift(), ipcEmitter.emit("message", message), ipcEmitter.emit("message:done");
}
}, onDisconnect = async ({ anyProcess, channel, isSubprocess, ipcEmitter, boundOnMessage }) => {
abortOnDisconnect();
let incomingMessages = INCOMING_MESSAGES.get(anyProcess);
for (; incomingMessages?.length > 0; )
await once4(ipcEmitter, "message:done");
anyProcess.removeListener("message", boundOnMessage), redoAddedReferences(channel, isSubprocess), ipcEmitter.connected = !1, ipcEmitter.emit("disconnect");
}, INCOMING_MESSAGES = /* @__PURE__ */ new WeakMap();
// ../../node_modules/execa/lib/ipc/forward.js
var getIpcEmitter = (anyProcess, channel, isSubprocess) => {
if (IPC_EMITTERS.has(anyProcess))
return IPC_EMITTERS.get(anyProcess);
let ipcEmitter = new EventEmitter();
return ipcEmitter.connected = !0, IPC_EMITTERS.set(anyProcess, ipcEmitter), forwardEvents({
ipcEmitter,
anyProcess,
channel,
isSubprocess
}), ipcEmitter;
}, IPC_EMITTERS = /* @__PURE__ */ new WeakMap(), forwardEvents = ({ ipcEmitter, anyProcess, channel, isSubprocess }) => {
let boundOnMessage = onMessage.bind(void 0, {
anyProcess,
channel,
isSubprocess,
ipcEmitter
});
anyProcess.on("message", boundOnMessage), anyProcess.once("disconnect", onDisconnect.bind(void 0, {
anyProcess,
channel,
isSubprocess,
ipcEmitter,
boundOnMessage
})), undoAddedReferences(channel, isSubprocess);
}, isConnected = (anyProcess) => {
let ipcEmitter = IPC_EMITTERS.get(anyProcess);
return ipcEmitter === void 0 ? anyProcess.channel !== null : ipcEmitter.connected;
};
// ../../node_modules/execa/lib/ipc/strict.js
var handleSendStrict = ({ anyProcess, channel, isSubprocess, message, strict }) => {
if (!strict)
return message;
let ipcEmitter = getIpcEmitter(anyProcess, channel, isSubprocess), hasListeners = hasMessageListeners(anyProcess, ipcEmitter);
return {
id: count++,
type: REQUEST_TYPE,
message,
hasListeners
};
}, count = 0n, validateStrictDeadlock = (outgoingMessages, wrappedMessage) => {
if (!(wrappedMessage?.type !== REQUEST_TYPE || wrappedMessage.hasListeners))
for (let { id } of outgoingMessages)
id !== void 0 && STRICT_RESPONSES[id].resolve({ isDeadlock: !0, hasListeners: !1 });
}, handleStrictRequest = async ({ wrappedMessage, anyProcess, channel, isSubprocess, ipcEmitter }) => {
if (wrappedMessage?.type !== REQUEST_TYPE || !anyProcess.connected)
return wrappedMessage;
let { id, message } = wrappedMessage, response = { id, type: RESPONSE_TYPE, message: hasMessageListeners(anyProcess, ipcEmitter) };
try {
await sendMessage({
anyProcess,
channel,
isSubprocess,
ipc: !0
}, response);
} catch (error) {
ipcEmitter.emit("strict:error", error);
}
return message;
}, handleStrictResponse = (wrappedMessage) => {
if (wrappedMessage?.type !== RESPONSE_TYPE)
return !1;
let { id, message: hasListeners } = wrappedMessage;
return STRICT_RESPONSES[id]?.resolve({ isDeadlock: !1, hasListeners }), !0;
}, waitForStrictResponse = async (wrappedMessage, anyProcess, isSubprocess) => {
if (wrappedMessage?.type !== REQUEST_TYPE)
return;
let deferred = createDeferred();
STRICT_RESPONSES[wrappedMessage.id] = deferred;
let controller = new AbortController();
try {
let { isDeadlock, hasListeners } = await Promise.race([
deferred,
throwOnDisconnect(anyProcess, isSubprocess, controller)
]);
isDeadlock && throwOnStrictDeadlockError(isSubprocess), hasListeners || throwOnMissingStrict(isSubprocess);
} finally {
controller.abort(), delete STRICT_RESPONSES[wrappedMessage.id];
}
}, STRICT_RESPONSES = {}, throwOnDisconnect = async (anyProcess, isSubprocess, { signal }) => {
incrementMaxListeners(anyProcess, 1, signal), await once5(anyProcess, "disconnect", { signal }), throwOnStrictDisconnect(isSubprocess);
}, REQUEST_TYPE = "execa:ipc:request", RESPONSE_TYPE = "execa:ipc:response";
// ../../node_modules/execa/lib/ipc/outgoing.js
var startSendMessage = (anyProcess, wrappedMessage, strict) => {
OUTGOING_MESSAGES.has(anyProcess) || OUTGOING_MESSAGES.set(anyProcess, /* @__PURE__ */ new Set());
let outgoingMessages = OUTGOING_MESSAGES.get(anyProcess), onMessageSent = createDeferred(), id = strict ? wrappedMessage.id : void 0, outgoingMessage = { onMessageSent, id };
return outgoingMessages.add(outgoingMessage), { outgoingMessages, outgoingMessage };
}, endSendMessage = ({ outgoingMessages, outgoingMessage }) => {
outgoingMessages.delete(outgoingMessage), outgoingMessage.onMessageSent.resolve();
}, waitForOutgoingMessages = async (anyProcess, ipcEmitter, wrappedMessage) => {
for (; !hasMessageListeners(anyProcess, ipcEmitter) && OUTGOING_MESSAGES.get(anyProcess)?.size > 0; ) {
let outgoingMessages = [...OUTGOING_MESSAGES.get(anyProcess)];
validateStrictDeadlock(outgoingMessages, wrappedMessage), await Promise.all(outgoingMessages.map(({ onMessageSent }) => onMessageSent));
}
}, OUTGOING_MESSAGES = /* @__PURE__ */ new WeakMap(), hasMessageListeners = (anyProcess, ipcEmitter) => ipcEmitter.listenerCount("message") > getMinListenerCount(anyProcess), getMinListenerCount = (anyProcess) => SUBPROCESS_OPTIONS.has(anyProcess) && !getFdSpecificValue(SUBPROCESS_OPTIONS.get(anyProcess).options.buffer, "ipc") ? 1 : 0;
// ../../node_modules/execa/lib/ipc/send.js
var sendMessage = ({ anyProcess, channel, isSubprocess, ipc }, message, { strict = !1 } = {}) => {
let methodName = "sendMessage";
return validateIpcMethod({
methodName,
isSubprocess,
ipc,
isConnected: anyProcess.connected
}), sendMessageAsync({
anyProcess,
channel,
methodName,
isSubprocess,
message,
strict
});
}, sendMessageAsync = async ({ anyProcess, channel, methodName, isSubprocess, message, strict }) => {
let wrappedMessage = handleSendStrict({
anyProcess,
channel,
isSubprocess,
message,
strict
}), outgoingMessagesState = startSendMessage(anyProcess, wrappedMessage, strict);
try {
await sendOneMessage({
anyProcess,
methodName,
isSubprocess,
wrappedMessage,
message
});
} catch (error) {
throw disconnect(anyProcess), error;
} finally {
endSendMessage(outgoingMessagesState);
}
}, sendOneMessage = async ({ anyProcess, methodName, isSubprocess, wrappedMessage, message }) => {
let sendMethod = getSendMethod(anyProcess);
try {
await Promise.all([
waitForStrictResponse(wrappedMessage, anyProcess, isSubprocess),
sendMethod(wrappedMessage)
]);
} catch (error) {
throw handleEpipeError({ error, methodName, isSubprocess }), handleSerializationError({
error,
methodName,
isSubprocess,
message
}), error;
}
}, getSendMethod = (anyProcess) => {
if (PROCESS_SEND_METHODS.has(anyProcess))
return PROCESS_SEND_METHODS.get(anyProcess);
let sendMethod = promisify2(anyProcess.send.bind(anyProcess));
return PROCESS_SEND_METHODS.set(anyProcess, sendMethod), sendMethod;
}, PROCESS_SEND_METHODS = /* @__PURE__ */ new WeakMap();
// ../../node_modules/execa/lib/ipc/graceful.js
var sendAbort = (subprocess, message) => {
let methodName = "cancelSignal";
return validateConnection(methodName, !1, subprocess.connected), sendOneMessage({
anyProcess: subprocess,
methodName,
isSubprocess: !1,
wrappedMessage: { type: GRACEFUL_CANCEL_TYPE, message },
message
});
}, getCancelSignal = async ({ anyProcess, channel, isSubprocess, ipc }) => (await startIpc({
anyProcess,
channel,
isSubprocess,
ipc
}), cancelController.signal), startIpc = async ({ anyProcess, channel, isSubprocess, ipc }) => {
if (!cancelListening) {
if (cancelListening = !0, !ipc) {
throwOnMissingParent();
return;
}
if (channel === null) {
abortOnDisconnect();
return;
}
getIpcEmitter(anyProcess, channel, isSubprocess), await scheduler2.yield();
}
}, cancelListening = !1, handleAbort = (wrappedMessage) => wrappedMessage?.type !== GRACEFUL_CANCEL_TYPE ? !1 : (cancelController.abort(wrappedMessage.message), !0), GRACEFUL_CANCEL_TYPE = "execa:ipc:cancel", abortOnDisconnect = () => {
cancelController.abort(getAbortDisconnectError());
}, cancelController = new AbortController();
// ../../node_modules/execa/lib/terminate/graceful.js
var validateGracefulCancel = ({ gracefulCancel, cancelSignal, ipc, serialization }) => {
if (gracefulCancel) {
if (cancelSignal === void 0)
throw new Error("The `cancelSignal` option must be defined when setting the `gracefulCancel` option.");
if (!ipc)
throw new Error("The `ipc` option cannot be false when setting the `gracefulCancel` option.");
if (serialization === "json")
throw new Error("The `serialization` option cannot be 'json' when setting the `gracefulCancel` option.");
}
}, throwOnGracefulCancel = ({
subprocess,
cancelSignal,
gracefulCancel,
forceKillAfterDelay,
context,
controller
}) => gracefulCancel ? [sendOnAbort({
subprocess,
cancelSignal,
forceKillAfterDelay,
context,
controller
})] : [], sendOnAbort = async ({ subprocess, cancelSignal, forceKillAfterDelay, context, controller: { signal } }) => {
await onAbortedSignal(cancelSignal, signal);
let reason = getReason(cancelSignal);
throw await sendAbort(subprocess, reason), killOnTimeout({
kill: subprocess.kill,
forceKillAfterDelay,
context,
controllerSignal: signal
}), context.terminationReason ??= "gracefulCancel", cancelSignal.reason;
}, getReason = ({ reason }) => {
if (!(reason instanceof DOMException))
return reason;
let error = new Error(reason.message);
return Object.defineProperty(error, "stack", {
value: reason.stack,
enumerable: !1,
configurable: !0,
writable: !0
}), error;
};
// ../../node_modules/execa/lib/terminate/timeout.js
import { setTimeout as setTimeout3 } from "node:timers/promises";
var validateTimeout = ({ timeout }) => {
if (timeout !== void 0 && (!Number.isFinite(timeout) || timeout < 0))
throw new TypeError(`Expected the \`timeout\` option to be a non-negative integer, got \`${timeout}\` (${typeof timeout})`);
}, throwOnTimeout = (subprocess, timeout, context, controller) => timeout === 0 || timeout === void 0 ? [] : [killAfterTimeout(subprocess, timeout, context, controller)], killAfterTimeout = async (subprocess, timeout, context, { signal }) => {
throw await setTimeout3(timeout, void 0, { signal }), context.terminationReason ??= "timeout", subprocess.kill(), new DiscardedError();
};
// ../../node_modules/execa/lib/methods/node.js
import { execPath, execArgv } from "node:process";
import path2 from "node:path";
var mapNode = ({ options }) => {
if (options.node === !1)
throw new TypeError('The "node" option cannot be false with `execaNode()`.');
return { options: { ...options, node: !0 } };
}, handleNodeOption = (file, commandArguments, {
node: shouldHandleNode = !1,
nodePath = execPath,
nodeOptions = execArgv.filter((nodeOption) => !nodeOption.startsWith("--inspect")),
cwd,
execPath: formerNodePath,
...options
}) => {
if (formerNodePath !== void 0)
throw new TypeError('The "execPath" option has been removed. Please use the "nodePath" option instead.');
let normalizedNodePath = safeNormalizeFileUrl(nodePath, 'The "nodePath" option'), resolvedNodePath = path2.resolve(cwd, normalizedNodePath), newOptions = {
...options,
nodePath: resolvedNodePath,
node: shouldHandleNode,
cwd
};
if (!shouldHandleNode)
return [file, commandArguments, newOptions];
if (path2.basename(file, ".exe") === "node")
throw new TypeError('When the "node" option is true, the first argument does not need to be "node".');
return [
resolvedNodePath,
[...nodeOptions, file, ...commandArguments],
{ ipc: !0, ...newOptions, shell: !1 }
];
};
// ../../node_modules/execa/lib/ipc/ipc-input.js
import { serialize } from "node:v8";
var validateIpcInputOption = ({ ipcInput, ipc, serialization }) => {
if (ipcInput !== void 0) {
if (!ipc)
throw new Error("The `ipcInput` option cannot be set unless the `ipc` option is `true`.");
validateIpcInput[serialization](ipcInput);
}
}, validateAdvancedInput = (ipcInput) => {
try {
serialize(ipcInput);
} catch (error) {
throw new Error("The `ipcInput` option is not serializable with a structured clone.", { cause: error });
}
}, validateJsonInput = (ipcInput) => {
try {
JSON.stringify(ipcInput);
} catch (error) {
throw new Error("The `ipcInput` option is not serializable with JSON.", { cause: error });
}
}, validateIpcInput = {
advanced: validateAdvancedInput,
json: validateJsonInput
}, sendIpcInput = async (subprocess, ipcInput) => {
ipcInput !== void 0 && await subprocess.sendMessage(ipcInput);
};
// ../../node_modules/execa/lib/arguments/encoding-option.js
var validateEncoding = ({ encoding }) => {
if (ENCODINGS.has(encoding))
return;
let correctEncoding = getCorrectEncoding(encoding);
if (correctEncoding !== void 0)
throw new TypeError(`Invalid option \`encoding: ${serializeEncoding(encoding)}\`.
Please rename it to ${serializeEncoding(correctEncoding)}.`);
let correctEncodings = [...ENCODINGS].map((correctEncoding2) => serializeEncoding(correctEncoding2)).join(", ");
throw new TypeError(`Invalid option \`encoding: ${serializeEncoding(encoding)}\`.
Please rename it to one of: ${correctEncodings}.`);
}, TEXT_ENCODINGS = /* @__PURE__ */ new Set(["utf8", "utf16le"]), BINARY_ENCODINGS = /* @__PURE__ */ new Set(["buffer", "hex", "base64", "base64url", "latin1", "ascii"]), ENCODINGS = /* @__PURE__ */ new Set([...TEXT_ENCODINGS, ...BINARY_ENCODINGS]), getCorrectEncoding = (encoding) => {
if (encoding === null)
return "buffer";
if (typeof encoding != "string")
return;
let lowerEncoding = encoding.toLowerCase();
if (lowerEncoding in ENCODING_ALIASES)
return ENCODING_ALIASES[lowerEncoding];
if (ENCODINGS.has(lowerEncoding))
return lowerEncoding;
}, ENCODING_ALIASES = {
// eslint-disable-next-line unicorn/text-encoding-identifier-case
"utf-8": "utf8",
"utf-16le": "utf16le",
"ucs-2": "utf16le",
ucs2: "utf16le",
binary: "latin1"
}, serializeEncoding = (encoding) => typeof encoding == "string" ? `"${encoding}"` : String(encoding);
// ../../node_modules/execa/lib/arguments/cwd.js
import { statSync as statSync2 } from "node:fs";
import path3 from "node:path";
import process5 from "node:process";
var normalizeCwd = (cwd = getDefaultCwd()) => {
let cwdString = safeNormalizeFileUrl(cwd, 'The "cwd" option');
return path3.resolve(cwdString);
}, getDefaultCwd = () => {
try {
return process5.cwd();
} catch (error) {
throw error.message = `The current directory does not exist.
${error.message}`, error;
}
}, fixCwdError = (originalMessage, cwd) => {
if (cwd === getDefaultCwd())
return originalMessage;
let cwdStat;
try {
cwdStat = statSync2(cwd);
} catch (error) {
return `The "cwd" option is invalid: ${cwd}.
${error.message}
${originalMessage}`;
}
return cwdStat.isDirectory() ? originalMessage : `The "cwd" option is not a directory: ${cwd}.
${originalMessage}`;
};
// ../../node_modules/execa/lib/arguments/options.js
var normalizeOptions = (filePath, rawArguments, rawOptions) => {
rawOptions.cwd = normalizeCwd(rawOptions.cwd);
let [processedFile, processedArguments, processedOptions] = handleNodeOption(filePath, rawArguments, rawOptions), { command: file, args: commandArguments, options: initialOptions } = import_cross_spawn.default._parse(processedFile, processedArguments, processedOptions), fdOptions = normalizeFdSpecificOptions(initialOptions), options = addDefaultOptions(fdOptions);
return validateTimeout(options), validateEncoding(options), validateIpcInputOption(options), validateCancelSignal(options), validateGracefulCancel(options), options.shell = normalizeFileUrl(options.shell), options.env = getEnv(options), options.killSignal = normalizeKillSignal(options.killSignal), options.forceKillAfterDelay = normalizeForceKillAfterDelay(options.forceKillAfterDelay), options.lines = options.lines.map((lines, fdNumber) => lines && !BINARY_ENCODINGS.has(options.encoding) && options.buffer[fdNumber]), process6.platform === "win32" && path4.basename(file, ".exe") === "cmd" && commandArguments.unshift("/q"), { file, commandArguments, options };
}, addDefaultOptions = ({
extendEnv = !0,
preferLocal = !1,
cwd,
localDir: localDirectory = cwd,
encoding = "utf8",
reject = !0,
cleanup = !0,
all = !1,
windowsHide = !0,
killSignal = "SIGTERM",
forceKillAfterDelay = !0,
gracefulCancel = !1,
ipcInput,
ipc = ipcInput !== void 0 || gracefulCancel,
serialization = "advanced",
...options
}) => ({
...options,
extendEnv,
preferLocal,
cwd,
localDirectory,
encoding,
reject,
cleanup,
all,
windowsHide,
killSignal,
forceKillAfterDelay,
gracefulCancel,
ipcInput,
ipc,
serialization
}), getEnv = ({ env: envOption, extendEnv, preferLocal, node, localDirectory, nodePath }) => {
let env2 = extendEnv ? { ...process6.env, ...envOption } : envOption;
return preferLocal || node ? npmRunPathEnv({
env: env2,
cwd: localDirectory,
execPath: nodePath,
preferLocal,
addExecPath: node
}) : env2;
};
// ../../node_modules/execa/lib/arguments/shell.js
var concatenateShell = (file, commandArguments, options) => options.shell && commandArguments.length > 0 ? [[file, ...commandArguments].join(" "), [], options] : [file, commandArguments, options];
// ../../node_modules/execa/lib/return/message.js
import { inspect as inspect2 } from "node:util";
// ../../node_modules/strip-final-newline/index.js
function stripFinalNewline(input) {
if (typeof input == "string")
return stripFinalNewlineString(input);
if (!(ArrayBuffer.isView(input) && input.BYTES_PER_ELEMENT === 1))
throw new Error("Input must be a string or a Uint8Array");
return stripFinalNewlineBinary(input);
}
var stripFinalNewlineString = (input) => input.at(-1) === LF ? input.slice(0, input.at(-2) === CR ? -2 : -1) : input, stripFinalNewlineBinary = (input) => input.at(-1) === LF_BINARY ? input.subarray(0, input.at(-2) === CR_BINARY ? -2 : -1) : input, LF = `
`, LF_BINARY = LF.codePointAt(0), CR = "\r", CR_BINARY = CR.codePointAt(0);
// ../../node_modules/get-stream/source/index.js
import { on } from "node:events";
import { finished } from "node:stream/promises";
// ../../node_modules/get-stream/node_modules/is-stream/index.js
function isStream(stream, { checkOpen = !0 } = {}) {
return stream !== null && typeof stream == "object" && (stream.writable || stream.readable || !checkOpen || stream.writable === void 0 && stream.readable === void 0) && typeof stream.pipe == "function";
}
function isReadableStream(stream, { checkOpen = !0 } = {}) {
return isStream(stream, { checkOpen }) && (stream.readable || !checkOpen) && typeof stream.read == "function" && typeof stream.readable == "boolean" && typeof stream.readableObjectMode == "boolean" && typeof stream.destroy == "function" && typeof stream.destroyed == "boolean";
}
// ../../node_modules/@sec-ant/readable-stream/dist/ponyfill/asyncIterator.js
var a = Object.getPrototypeOf(
Object.getPrototypeOf(
/* istanbul ignore next */
async function* () {
}
).prototype
), c = class {
#t;
#n;
#r = !1;
#e = void 0;
constructor(e, t3) {
this.#t = e, this.#n = t3;
}
next() {
let e = () => this.#s();
return this.#e = this.#e ? this.#e.then(e, e) : e(), this.#e;
}
return(e) {
let t3 = () => this.#i(e);
return this.#e ? this.#e.then(t3, t3) : t3();
}
async #s() {
if (this.#r)
return {
done: !0,
value: void 0
};
let e;
try {
e = await this.#t.read();
} catch (t3) {
throw this.#e = void 0, this.#r = !0, this.#t.releaseLock(), t3;
}
return e.done && (this.#e = void 0, this.#r = !0, this.#t.releaseLock()), e;
}
async #i(e) {
if (this.#r)
return {
done: !0,
value: e
};
if (this.#r = !0, !this.#n) {
let t3 = this.#t.cancel(e);
return this.#t.releaseLock(), await t3, {
done: !0,
value: e
};
}
return this.#t.releaseLock(), {
done: !0,
value: e
};
}
}, n = /* @__PURE__ */ Symbol();
function i() {
return this[n].next();
}
Object.defineProperty(i, "name", { value: "next" });
function o(r) {
return this[n].return(r);
}
Object.defineProperty(o, "name", { value: "return" });
var u = Object.create(a, {
next: {
enumerable: !0,
configurable: !0,
writable: !0,
value: i
},
return: {
enumerable: !0,
configurable: !0,
writable: !0,
value: o
}
});
function h({ preventCancel: r = !1 } = {}) {
let e = this.getReader(), t3 = new c(
e,
r
), s = Object.create(u);
return s[n] = t3, s;
}
// ../../node_modules/get-stream/source/stream.js
var getAsyncIterable = (stream) => {
if (isReadableStream(stream, { checkOpen: !1 }) && nodeImports.on !== void 0)
return getStreamIterable(stream);
if (typeof stream?.[Symbol.asyncIterator] == "function")
return stream;
if (toString.call(stream) === "[object ReadableStream]")
return h.call(stream);
throw new TypeError("The first argument must be a Readable, a ReadableStream, or an async iterable.");
}, { toString } = Object.prototype, getStreamIterable = async function* (stream) {
let controller = new AbortController(), state = {};
handleStreamEnd(stream, controller, state);
try {
for await (let [chunk] of nodeImports.on(stream, "data", { signal: controller.signal }))
yield chunk;
} catch (error) {
if (state.error !== void 0)
throw state.error;
if (!controller.signal.aborted)
throw error;
} finally {
stream.destroy();
}
}, handleStreamEnd = async (stream, controller, state) => {
try {
await nodeImports.finished(stream, {
cleanup: !0,
readable: !0,
writable: !1,
error: !1
});
} catch (error) {
state.error = error;
} finally {
controller.abort();
}
}, nodeImports = {};
// ../../node_modules/get-stream/source/contents.js
var getStreamContents = async (stream, { init, convertChunk, getSize, truncateChunk, addChunk, getFinalChunk, finalize }, { maxBuffer = Number.POSITIVE_INFINITY } = {}) => {
let asyncIterable = getAsyncIterable(stream), state = init();
state.length = 0;
try {
for await (let chunk of asyncIterable) {
let chunkType = getChunkType(chunk), convertedChunk = convertChunk[chunkType](chunk, state);
appendChunk({
convertedChunk,
state,
getSize,
truncateChunk,
addChunk,
maxBuffer
});
}
return appendFinalChunk({
state,
convertChunk,
getSize,
truncateChunk,
addChunk,
getFinalChunk,
maxBuffer
}), finalize(state);
} catch (error) {
let normalizedError = typeof error == "object" && error !== null ? error : new Error(error);
throw normalizedError.bufferedData = finalize(state), normalizedError;
}
}, appendFinalChunk = ({ state, getSize, truncateChunk, addChunk, getFinalChunk, maxBuffer }) => {
let convertedChunk = getFinalChunk(state);
convertedChunk !== void 0 && appendChunk({
convertedChunk,
state,
getSize,
truncateChunk,
addChunk,
maxBuffer
});
}, appendChunk = ({ convertedChunk, state, getSize, truncateChunk, addChunk, maxBuffer }) => {
let chunkSize = getSize(convertedChunk), newLength = state.length + chunkSize;
if (newLength <= maxBuffer) {
addNewChunk(convertedChunk, state, addChunk, newLength);
return;
}
let truncatedChunk = truncateChunk(convertedChunk, maxBuffer - state.length);
throw truncatedChunk !== void 0 && addNewChunk(truncatedChunk, state, addChunk, maxBuffer), new MaxBufferError();
}, addNewChunk = (convertedChunk, state, addChunk, newLength) => {
state.contents = addChunk(convertedChunk, state, newLength), state.length = newLength;
}, getChunkType = (chunk) => {
let typeOfChunk = typeof chunk;
if (typeOfChunk === "string")
return "string";
if (typeOfChunk !== "object" || chunk === null)
return "others";
if (globalThis.Buffer?.isBuffer(chunk))
return "buffer";
let prototypeName = objectToString2.call(chunk);
return prototypeName === "[object ArrayBuffer]" ? "arrayBuffer" : prototypeName === "[object DataView]" ? "dataView" : Number.isInteger(chunk.byteLength) && Number.isInteger(chunk.byteOffset) && objectToString2.call(chunk.buffer) === "[object ArrayBuffer]" ? "typedArray" : "others";
}, { toString: objectToString2 } = Object.prototype, MaxBufferError = class extends Error {
name = "MaxBufferError";
constructor() {
super("maxBuffer exceeded");
}
};
// ../../node_modules/get-stream/source/utils.js
var identity2 = (value) => value, noop = () => {
}, getContentsProperty = ({ contents }) => contents, throwObjectStream = (chunk) => {
throw new Error(`Streams in object mode are not supported: ${String(chunk)}`);
}, getLengthProperty = (convertedChunk) => convertedChunk.length;
// ../../node_modules/get-stream/source/array.js
async function getStreamAsArray(stream, options) {
return getStreamContents(stream, arrayMethods, options);
}
var initArray = () => ({ contents: [] }), increment = () => 1, addArrayChunk = (convertedChunk, { contents }) => (contents.push(convertedChunk), contents), arrayMethods = {
init: initArray,
convertChunk: {
string: identity2,
buffer: identity2,
arrayBuffer: identity2,
dataView: identity2,
typedArray: identity2,
others: identity2
},
getSize: increment,
truncateChunk: noop,
addChunk: addArrayChunk,
getFinalChunk: noop,
finalize: getContentsProperty
};
// ../../node_modules/get-stream/source/array-buffer.js
async function getStreamAsArrayBuffer(stream, options) {
return getStreamContents(stream, arrayBufferMethods, options);
}
var initArrayBuffer = () => ({ contents: new ArrayBuffer(0) }), useTextEncoder = (chunk) => textEncoder2.encode(chunk), textEncoder2 = new TextEncoder(), useUint8Array = (chunk) => new Uint8Array(chunk), useUint8ArrayWithOffset = (chunk) => new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength), truncateArrayBufferChunk = (convertedChunk, chunkSize) => convertedChunk.slice(0, chunkSize), addArrayBufferChunk = (convertedChunk, { contents, length: previousLength }, length) => {
let newContents = hasArrayBufferResize() ? resizeArrayBuffer(contents, length) : resizeArrayBufferSlow(contents, length);
return new Uint8Array(newContents).set(convertedChunk, previousLength), newContents;
}, resizeArrayBufferSlow = (contents, length) => {
if (length <= contents.byteLength)
return contents;
let arrayBuffer = new ArrayBuffer(getNewContentsLength(length));
return new Uint8Array(arrayBuffer).set(new Uint8Array(contents), 0), arrayBuffer;
}, resizeArrayBuffer = (contents, length) => {
if (length <= contents.maxByteLength)
return contents.resize(length), contents;
let arrayBuffer = new ArrayBuffer(length, { maxByteLength: getNewContentsLength(length) });
return new Uint8Array(arrayBuffer).set(new Uint8Array(contents), 0), arrayBuffer;
}, getNewContentsLength = (length) => SCALE_FACTOR ** Math.ceil(Math.log(length) / Math.log(SCALE_FACTOR)), SCALE_FACTOR = 2, finalizeArrayBuffer = ({ contents, length }) => hasArrayBufferResize() ? contents : contents.slice(0, length), hasArrayBufferResize = () => "resize" in ArrayBuffer.prototype, arrayBufferMethods = {
init: initArrayBuffer,
convertChunk: {
string: useTextEncoder,
buffer: useUint8Array,
arrayBuffer: useUint8Array,
dataView: useUint8ArrayWithOffset,
typedArray: useUint8ArrayWithOffset,
others: throwObjectStream
},
getSize: getLengthProperty,
truncateChunk: truncateArrayBufferChunk,
addChunk: addArrayBufferChunk,
getFinalChunk: noop,
finalize: finalizeArrayBuffer
};
// ../../node_modules/get-stream/source/string.js
async function getStreamAsString(stream, options) {
return getStreamContents(stream, stringMethods, options);
}
var initString = () => ({ contents: "", textDecoder: new TextDecoder() }), useTextDecoder = (chunk, { textDecoder: textDecoder2 }) => textDecoder2.decode(chunk, { stream: !0 }), addStringChunk = (convertedChunk, { contents }) => contents + convertedChunk, truncateStringChunk = (convertedChunk, chunkSize) => convertedChunk.slice(0, chunkSize), getFinalStringChunk = ({ textDecoder: textDecoder2 }) => {
let finalChunk = textDecoder2.decode();
return finalChunk === "" ? void 0 : finalChunk;
}, stringMethods = {
init: initString,
convertChunk: {
string: identity2,
buffer: useTextDecoder,
arrayBuffer: useTextDecoder,
dataView: useTextDecoder,
typedArray: useTextDecoder,
others: throwObjectStream
},
getSize: getLengthProperty,
truncateChunk: truncateStringChunk,
addChunk: addStringChunk,
getFinalChunk: getFinalStringChunk,
finalize: getContentsProperty
};
// ../../node_modules/get-stream/source/index.js
Object.assign(nodeImports, { on, finished });
// ../../node_modules/execa/lib/io/max-buffer.js
var handleMaxBuffer = ({ error, stream, readableObjectMode, lines, encoding, fdNumber }) => {
if (!(error instanceof MaxBufferError))
throw error;
if (fdNumber === "all")
return error;
let unit = getMaxBufferUnit(readableObjectMode, lines, encoding);
throw error.maxBufferInfo = { fdNumber, unit }, stream.destroy(), error;
}, getMaxBufferUnit = (readableObjectMode, lines, encoding) => readableObjectMode ? "objects" : lines ? "lines" : encoding === "buffer" ? "bytes" : "characters", checkIpcMaxBuffer = (subprocess, ipcOutput, maxBuffer) => {
if (ipcOutput.length !== maxBuffer)
return;
let error = new MaxBufferError();
throw error.maxBufferInfo = { fdNumber: "ipc" }, error;
}, getMaxBufferMessage = (error, maxBuffer) => {
let { streamName, threshold, unit } = getMaxBufferInfo(error, maxBuffer);
return `Command's ${streamName} was larger than ${threshold} ${unit}`;
}, getMaxBufferInfo = (error, maxBuffer) => {
if (error?.maxBufferInfo === void 0)
return { streamName: "output", threshold: maxBuffer[1], unit: "bytes" };
let { maxBufferInfo: { fdNumber, unit } } = error;
delete error.maxBufferInfo;
let threshold = getFdSpecificValue(maxBuffer, fdNumber);
return fdNumber === "ipc" ? { streamName: "IPC output", threshold, unit: "messages" } : { streamName: getStreamName(fdNumber), threshold, unit };
}, isMaxBufferSync = (resultError, output, maxBuffer) => resultError?.code === "ENOBUFS" && output !== null && output.some((result) => result !== null && result.length > getMaxBufferSync(maxBuffer)), truncateMaxBufferSync = (result, isMaxBuffer, maxBuffer) => {
if (!isMaxBuffer)
return result;
let maxBufferValue = getMaxBufferSync(maxBuffer);
return result.length > maxBufferValue ? result.slice(0, maxBufferValue) : result;
}, getMaxBufferSync = ([, stdoutMaxBuffer]) => stdoutMaxBuffer;
// ../../node_modules/execa/lib/return/message.js
var createMessages = ({
stdio,
all,
ipcOutput,
originalError,
signal,
signalDescription,
exitCode,
escapedCommand,
timedOut,
isCanceled,
isGracefullyCanceled,
isMaxBuffer,
isForcefullyTerminated,
forceKillAfterDelay,
killSignal,
maxBuffer,
timeout,
cwd
}) => {
let errorCode = originalError?.code, prefix = getErrorPrefix({
originalError,
timedOut,
timeout,
isMaxBuffer,
maxBuffer,
errorCode,
signal,
signalDescription,
exitCode,
isCanceled,
isGracefullyCanceled,
isForcefullyTerminated,
forceKillAfterDelay,
killSignal
}), originalMessage = getOriginalMessage(originalError, cwd), suffix = originalMessage === void 0 ? "" : `
${originalMessage}`, shortMessage = `${prefix}: ${escapedCommand}${suffix}`, messageStdio = all === void 0 ? [stdio[2], stdio[1]] : [all], message = [
shortMessage,
...messageStdio,
...stdio.slice(3),
ipcOutput.map((ipcMessage) => serializeIpcMessage(ipcMessage)).join(`
`)
].map((messagePart) => escapeLines(stripFinalNewline(serializeMessagePart(messagePart)))).filter(Boolean).join(`
`);
return { originalMessage, shortMessage, message };
}, getErrorPrefix = ({
originalError,
timedOut,
timeout,
isMaxBuffer,
maxBuffer,
errorCode,
signal,
signalDescription,
exitCode,
isCanceled,
isGracefullyCanceled,
isForcefullyTerminated,
forceKillAfterDelay,
killSignal
}) => {
let forcefulSuffix = getForcefulSuffix(isForcefullyTerminated, forceKillAfterDelay);
return timedOut ? `Command timed out after ${timeout} milliseconds${forcefulSuffix}` : isGracefullyCanceled ? signal === void 0 ? `Command was gracefully canceled with exit code ${exitCode}` : isForcefullyTerminated ? `Command was gracefully canceled${forcefulSuffix}` : `Command was gracefully canceled with ${signal} (${signalDescription})` : isCanceled ? `Command was canceled${forcefulSuffix}` : isMaxBuffer ? `${getMaxBufferMessage(originalError, maxBuffer)}${forcefulSuffix}` : errorCode !== void 0 ? `Command failed with ${errorCode}${forcefulSuffix}` : isForcefullyTerminated ? `Command was killed with ${killSignal} (${getSignalDescription(killSignal)})${forcefulSuffix}` : signal !== void 0 ? `Command was killed with ${signal} (${signalDescription})` : exitCode !== void 0 ? `Command failed with exit code ${exitCode}` : "Command failed";
}, getForcefulSuffix = (isForcefullyTerminated, forceKillAfterDelay) => isForcefullyTerminated ? ` and was forcefully terminated after ${forceKillAfterDelay} milliseconds` : "", getOriginalMessage = (originalError, cwd) => {
if (originalError instanceof DiscardedError)
return;
let originalMessage = isExecaError(originalError) ? originalError.originalMessage : String(originalError?.message ?? originalError), escapedOriginalMessage = escapeLines(fixCwdError(originalMessage, cwd));
return escapedOriginalMessage === "" ? void 0 : escapedOriginalMessage;
}, serializeIpcMessage = (ipcMessage) => typeof ipcMessage == "string" ? ipcMessage : inspect2(ipcMessage), serializeMessagePart = (messagePart) => Array.isArray(messagePart) ? messagePart.map((messageItem) => stripFinalNewline(serializeMessageItem(messageItem))).filter(Boolean).join(`
`) : serializeMessageItem(messagePart), serializeMessageItem = (messageItem) => typeof messageItem == "string" ? messageItem : isUint8Array(messageItem) ? uint8ArrayToString(messageItem) : "";
// ../../node_modules/execa/lib/return/result.js
var makeSuccessResult = ({
command,
escapedCommand,
stdio,
all,
ipcOutput,
options: { cwd },
startTime
}) => omitUndefinedProperties({
command,
escapedCommand,
cwd,
durationMs: getDurationMs(startTime),
failed: !1,
timedOut: !1,
isCanceled: !1,
isGracefullyCanceled: !1,
isTerminated: !1,
isMaxBuffer: !1,
isForcefullyTerminated: !1,
exitCode: 0,
stdout: stdio[1],
stderr: stdio[2],
all,
stdio,
ipcOutput,
pipedFrom: []
}), makeEarlyError = ({
error,
command,
escapedCommand,
fileDescriptors,
options,
startTime,
isSync
}) => makeError({
error,
command,
escapedCommand,
startTime,
timedOut: !1,
isCanceled: !1,
isGracefullyCanceled: !1,
isMaxBuffer: !1,
isForcefullyTerminated: !1,
stdio: Array.from({ length: fileDescriptors.length }),
ipcOutput: [],
options,
isSync
}), makeError = ({
error: originalError,
command,
escapedCommand,
startTime,
timedOut,
isCanceled,
isGracefullyCanceled,
isMaxBuffer,
isForcefullyTerminated,
exitCode: rawExitCode,
signal: rawSignal,
stdio,
all,
ipcOutput,
options: {
timeoutDuration,
timeout = timeoutDuration,
forceKillAfterDelay,
killSignal,
cwd,
maxBuffer
},
isSync
}) => {
let { exitCode, signal, signalDescription } = normalizeExitPayload(rawExitCode, rawSignal), { originalMessage, shortMessage, message } = createMessages({
stdio,
all,
ipcOutput,
originalError,
signal,
signalDescription,
exitCode,
escapedCommand,
timedOut,
isCanceled,
isGracefullyCanceled,
isMaxBuffer,
isForcefullyTerminated,
forceKillAfterDelay,
killSignal,
maxBuffer,
timeout,
cwd
}), error = getFinalError(originalError, message, isSync);
return Object.assign(error, getErrorProperties({
error,
command,
escapedCommand,
startTime,
timedOut,
isCanceled,
isGracefullyCanceled,
isMaxBuffer,
isForcefullyTerminated,
exitCode,
signal,
signalDescription,
stdio,
all,
ipcOutput,
cwd,
originalMessage,
shortMessage
})), error;
}, getErrorProperties = ({
error,
command,
escapedCommand,
startTime,
timedOut,
isCanceled,
isGracefullyCanceled,
isMaxBuffer,
isForcefullyTerminated,
exitCode,
signal,
signalDescription,
stdio,
all,
ipcOutput,
cwd,
originalMessage,
shortMessage
}) => omitUndefinedProperties({
shortMessage,
originalMessage,
command,
escapedCommand,
cwd,
durationMs: getDurationMs(startTime),
failed: !0,
timedOut,
isCanceled,
isGracefullyCanceled,
isTerminated: signal !== void 0,
isMaxBuffer,
isForcefullyTerminated,
exitCode,
signal,
signalDescription,
code: error.cause?.code,
stdout: stdio[1],
stderr: stdio[2],
all,
stdio,
ipcOutput,
pipedFrom: []
}), omitUndefinedProperties = (result) => Object.fromEntries(Object.entries(result).filter(([, value]) => value !== void 0)), normalizeExitPayload = (rawExitCode, rawSignal) => {
let exitCode = rawExitCode === null ? void 0 : rawExitCode, signal = rawSignal === null ? void 0 : rawSignal, signalDescription = signal === void 0 ? void 0 : getSignalDescription(rawSignal);
return { exitCode, signal, signalDescription };
};
// ../../node_modules/parse-ms/index.js
var toZeroIfInfinity = (value) => Number.isFinite(value) ? value : 0;
function parseNumber(milliseconds) {
return {
days: Math.trunc(milliseconds / 864e5),
hours: Math.trunc(milliseconds / 36e5 % 24),
minutes: Math.trunc(milliseconds / 6e4 % 60),
seconds: Math.trunc(milliseconds / 1e3 % 60),
milliseconds: Math.trunc(milliseconds % 1e3),
microseconds: Math.trunc(toZeroIfInfinity(milliseconds * 1e3) % 1e3),
nanoseconds: Math.trunc(toZeroIfInfinity(milliseconds * 1e6) % 1e3)
};
}
function parseBigint(milliseconds) {
return {
days: milliseconds / 86400000n,
hours: milliseconds / 3600000n % 24n,
minutes: milliseconds / 60000n % 60n,
seconds: milliseconds / 1000n % 60n,
milliseconds: milliseconds % 1000n,
microseconds: 0n,
nanoseconds: 0n
};
}
function parseMilliseconds(milliseconds) {
switch (typeof milliseconds) {
case "number": {
if (Number.isFinite(milliseconds))
return parseNumber(milliseconds);
break;
}
case "bigint":
return parseBigint(milliseconds);
}
throw new TypeError("Expected a finite number or bigint");
}
// ../../node_modules/execa/node_modules/pretty-ms/index.js
var isZero = (value) => value === 0 || value === 0n, pluralize = (word, count2) => count2 === 1 || count2 === 1n ? word : `${word}s`, SECOND_ROUNDING_EPSILON = 1e-7, ONE_DAY_IN_MILLISECONDS = 24n * 60n * 60n * 1000n;
function prettyMilliseconds(milliseconds, options) {
let isBigInt = typeof milliseconds == "bigint";
if (!isBigInt && !Number.isFinite(milliseconds))
throw new TypeError("Expected a finite number or bigint");
options = { ...options };
let sign = milliseconds < 0 ? "-" : "";
milliseconds = milliseconds < 0 ? -milliseconds : milliseconds, options.colonNotation && (options.compact = !1, options.formatSubMilliseconds = !1, options.separateMilliseconds = !1, options.verbose = !1), options.compact && (options.unitCount = 1, options.secondsDecimalDigits = 0, options.millisecondsDecimalDigits = 0);
let result = [], floorDecimals = (value, decimalDigits) => {
let flooredInterimValue = Math.floor(value * 10 ** decimalDigits + SECOND_ROUNDING_EPSILON);
return (Math.round(flooredInterimValue) / 10 ** decimalDigits).toFixed(decimalDigits);
}, add = (value, long, short, valueString) => {
if (!((result.length === 0 || !options.colonNotation) && isZero(value) && !(options.colonNotation && short === "m"))) {
if (valueString ??= String(value), options.colonNotation) {
let wholeDigits = valueString.includes(".") ? valueString.split(".")[0].length : valueString.length, minLength = result.length > 0 ? 2 : 1;
valueString = "0".repeat(Math.max(0, minLength - wholeDigits)) + valueString;
} else
valueString += options.verbose ? " " + pluralize(long, value) : short;
result.push(valueString);
}
}, parsed = parseMilliseconds(milliseconds), days = BigInt(parsed.days);
if (options.hideYearAndDays ? add(BigInt(days) * 24n + BigInt(parsed.hours), "hour", "h") : (options.hideYear ? add(days, "day", "d") : (add(days / 365n, "year", "y"), add(days % 365n, "day", "d")), add(Number(parsed.hours), "hour", "h")), add(Number(parsed.minutes), "minute", "m"), !options.hideSeconds)
if (options.separateMilliseconds || options.formatSubMilliseconds || !options.colonNotation && milliseconds < 1e3 && !options.subSecondsAsDecimals) {
let seconds = Number(parsed.seconds), milliseconds2 = Number(parsed.milliseconds), microseconds = Number(parsed.microseconds), nanoseconds = Number(parsed.nanoseconds);
if (add(seconds, "second", "s"), options.formatSubMilliseconds)
add(milliseconds2, "millisecond", "ms"), add(microseconds, "microsecond", "\xB5s"), add(nanoseconds, "nanosecond", "ns");
else {
let millisecondsAndBelow = milliseconds2 + microseconds / 1e3 + nanoseconds / 1e6, millisecondsDecimalDigits = typeof options.millisecondsDecimalDigits == "number" ? options.millisecondsDecimalDigits : 0, roundedMilliseconds = millisecondsAndBelow >= 1 ? Math.round(millisecondsAndBelow) : Math.ceil(millisecondsAndBelow), millisecondsString = millisecondsDecimalDigits ? millisecondsAndBelow.toFixed(millisecondsDecimalDigits) : roundedMilliseconds;
add(
Number.parseFloat(millisecondsString),
"millisecond",
"ms",
millisecondsString
);
}
} else {
let seconds = (isBigInt ? Number(milliseconds % ONE_DAY_IN_MILLISECONDS) : milliseconds) / 1e3 % 60, secondsDecimalDigits = typeof options.secondsDecimalDigits == "number" ? options.secondsDecimalDigits : 1, secondsFixed = floorDecimals(seconds, secondsDecimalDigits), secondsString = options.keepDecimalsOnWholeSeconds ? secondsFixed : secondsFixed.replace(/\.0+$/, "");
add(Number.parseFloat(secondsString), "second", "s", secondsString);
}
if (result.length === 0)
return sign + "0" + (options.verbose ? " milliseconds" : "ms");
let separator = options.colonNotation ? ":" : " ";
return typeof options.unitCount == "number" && (result = result.slice(0, Math.max(options.unitCount, 1))), sign + result.join(separator);
}
// ../../node_modules/execa/lib/verbose/error.js
var logError = (result, verboseInfo) => {
result.failed && verboseLog({
type: "error",
verboseMessage: result.shortMessage,
verboseInfo,
result
});
};
// ../../node_modules/execa/lib/verbose/complete.js
var logResult = (result, verboseInfo) => {
isVerbose(verboseInfo) && (logError(result, verboseInfo), logDuration(result, verboseInfo));
}, logDuration = (result, verboseInfo) => {
let verboseMessage = `(done in ${prettyMilliseconds(result.durationMs)})`;
verboseLog({
type: "duration",
verboseMessage,
verboseInfo,
result
});
};
// ../../node_modules/execa/lib/return/reject.js
var handleResult = (result, verboseInfo, { reject }) => {
if (logResult(result, verboseInfo), result.failed && reject)
throw result;
return result;
};
// ../../node_modules/execa/lib/stdio/handle-sync.js
import { readFileSync as readFileSync8 } from "node:fs";
// ../../node_modules/execa/node_modules/is-stream/index.js
function isStream2(stream, { checkOpen = !0 } = {}) {
return stream !== null && typeof stream == "object" && (stream.writable || stream.readable || !checkOpen || stream.writable === void 0 && stream.readable === void 0) && typeof stream.pipe == "function";
}
function isWritableStream(stream, { checkOpen = !0 } = {}) {
return isStream2(stream, { checkOpen }) && (stream.writable || !checkOpen) && typeof stream.write == "function" && typeof stream.end == "function" && typeof stream.writable == "boolean" && typeof stream.writableObjectMode == "boolean" && typeof stream.destroy == "function" && typeof stream.destroyed == "boolean";
}
function isReadableStream2(stream, { checkOpen = !0 } = {}) {
return isStream2(stream, { checkOpen }) && (stream.readable || !checkOpen) && typeof stream.read == "function" && typeof stream.readable == "boolean" && typeof stream.readableObjectMode == "boolean" && typeof stream.destroy == "function" && typeof stream.destroyed == "boolean";
}
function isDuplexStream(stream, options) {
return isWritableStream(stream, options) && isReadableStream2(stream, options);
}
// ../../node_modules/execa/lib/stdio/type.js
var getStdioItemType = (value, optionName) => isAsyncGenerator(value) ? "asyncGenerator" : isSyncGenerator(value) ? "generator" : isUrl(value) ? "fileUrl" : isFilePathObject(value) ? "filePath" : isWebStream(value) ? "webStream" : isStream2(value, { checkOpen: !1 }) ? "native" : isUint8Array(value) ? "uint8Array" : isAsyncIterableObject(value) ? "asyncIterable" : isIterableObject(value) ? "iterable" : isTransformStream(value) ? getTransformStreamType({ transform: value }, optionName) : isTransformOptions(value) ? getTransformObjectType(value, optionName) : "native", getTransformObjectType = (value, optionName) => isDuplexStream(value.transform, { checkOpen: !1 }) ? getDuplexType(value, optionName) : isTransformStream(value.transform) ? getTransformStreamType(value, optionName) : getGeneratorObjectType(value, optionName), getDuplexType = (value, optionName) => (validateNonGeneratorType(value, optionName, "Duplex stream"), "duplex"), getTransformStreamType = (value, optionName) => (validateNonGeneratorType(value, optionName, "web TransformStream"), "webTransform"), validateNonGeneratorType = ({ final, binary, objectMode }, optionName, typeName) => {
checkUndefinedOption(final, `${optionName}.final`, typeName), checkUndefinedOption(binary, `${optionName}.binary`, typeName), checkBooleanOption(objectMode, `${optionName}.objectMode`);
}, checkUndefinedOption = (value, optionName, typeName) => {
if (value !== void 0)
throw new TypeError(`The \`${optionName}\` option can only be defined when using a generator, not a ${typeName}.`);
}, getGeneratorObjectType = ({ transform, final, binary, objectMode }, optionName) => {
if (transform !== void 0 && !isGenerator(transform))
throw new TypeError(`The \`${optionName}.transform\` option must be a generator, a Duplex stream or a web TransformStream.`);
if (isDuplexStream(final, { checkOpen: !1 }))
throw new TypeError(`The \`${optionName}.final\` option must not be a Duplex stream.`);
if (isTransformStream(final))
throw new TypeError(`The \`${optionName}.final\` option must not be a web TransformStream.`);
if (final !== void 0 && !isGenerator(final))
throw new TypeError(`The \`${optionName}.final\` option must be a generator.`);
return checkBooleanOption(binary, `${optionName}.binary`), checkBooleanOption(objectMode, `${optionName}.objectMode`), isAsyncGenerator(transform) || isAsyncGenerator(final) ? "asyncGenerator" : "generator";
}, checkBooleanOption = (value, optionName) => {
if (value !== void 0 && typeof value != "boolean")
throw new TypeError(`The \`${optionName}\` option must use a boolean.`);
}, isGenerator = (value) => isAsyncGenerator(value) || isSyncGenerator(value), isAsyncGenerator = (value) => Object.prototype.toString.call(value) === "[object AsyncGeneratorFunction]", isSyncGenerator = (value) => Object.prototype.toString.call(value) === "[object GeneratorFunction]", isTransformOptions = (value) => isPlainObject(value) && (value.transform !== void 0 || value.final !== void 0), isUrl = (value) => Object.prototype.toString.call(value) === "[object URL]", isRegularUrl = (value) => isUrl(value) && value.protocol !== "file:", isFilePathObject = (value) => isPlainObject(value) && Object.keys(value).length > 0 && Object.keys(value).every((key) => FILE_PATH_KEYS.has(key)) && isFilePathString(value.file), FILE_PATH_KEYS = /* @__PURE__ */ new Set(["file", "append"]), isFilePathString = (file) => typeof file == "string", isUnknownStdioString = (type, value) => type === "native" && typeof value == "string" && !KNOWN_STDIO_STRINGS.has(value), KNOWN_STDIO_STRINGS = /* @__PURE__ */ new Set(["ipc", "ignore", "inherit", "overlapped", "pipe"]), isReadableStream3 = (value) => Object.prototype.toString.call(value) === "[object ReadableStream]", isWritableStream2 = (value) => Object.prototype.toString.call(value) === "[object WritableStream]", isWebStream = (value) => isReadableStream3(value) || isWritableStream2(value), isTransformStream = (value) => isReadableStream3(value?.readable) && isWritableStream2(value?.writable), isAsyncIterableObject = (value) => isObject2(value) && typeof value[Symbol.asyncIterator] == "function", isIterableObject = (value) => isObject2(value) && typeof value[Symbol.iterator] == "function", isObject2 = (value) => typeof value == "object" && value !== null, TRANSFORM_TYPES = /* @__PURE__ */ new Set(["generator", "asyncGenerator", "duplex", "webTransform"]), FILE_TYPES = /* @__PURE__ */ new Set(["fileUrl", "filePath", "fileNumber"]), SPECIAL_DUPLICATE_TYPES_SYNC = /* @__PURE__ */ new Set(["fileUrl", "filePath"]), SPECIAL_DUPLICATE_TYPES = /* @__PURE__ */ new Set([...SPECIAL_DUPLICATE_TYPES_SYNC, "webStream", "nodeStream"]), FORBID_DUPLICATE_TYPES = /* @__PURE__ */ new Set(["webTransform", "duplex"]), TYPE_TO_MESSAGE = {
generator: "a generator",
asyncGenerator: "an async generator",
fileUrl: "a file URL",
filePath: "a file path string",
fileNumber: "a file descriptor number",
webStream: "a web stream",
nodeStream: "a Node.js stream",
webTransform: "a web TransformStream",
duplex: "a Duplex stream",
native: "any value",
iterable: "an iterable",
asyncIterable: "an async iterable",
string: "a string",
uint8Array: "a Uint8Array"
};
// ../../node_modules/execa/lib/transform/object-mode.js
var getTransformObjectModes = (objectMode, index, newTransforms, direction) => direction === "output" ? getOutputObjectModes(objectMode, index, newTransforms) : getInputObjectModes(objectMode, index, newTransforms), getOutputObjectModes = (objectMode, index, newTransforms) => {
let writableObjectMode = index !== 0 && newTransforms[index - 1].value.readableObjectMode;
return { writableObjectMode, readableObjectMode: objectMode ?? writableObjectMode };
}, getInputObjectModes = (objectMode, index, newTransforms) => {
let writableObjectMode = index === 0 ? objectMode === !0 : newTransforms[index - 1].value.readableObjectMode, readableObjectMode = index !== newTransforms.length - 1 && (objectMode ?? writableObjectMode);
return { writableObjectMode, readableObjectMode };
}, getFdObjectMode = (stdioItems, direction) => {
let lastTransform = stdioItems.findLast(({ type }) => TRANSFORM_TYPES.has(type));
return lastTransform === void 0 ? !1 : direction === "input" ? lastTransform.value.writableObjectMode : lastTransform.value.readableObjectMode;
};
// ../../node_modules/execa/lib/transform/normalize.js
var normalizeTransforms = (stdioItems, optionName, direction, options) => [
...stdioItems.filter(({ type }) => !TRANSFORM_TYPES.has(type)),
...getTransforms(stdioItems, optionName, direction, options)
], getTransforms = (stdioItems, optionName, direction, { encoding }) => {
let transforms = stdioItems.filter(({ type }) => TRANSFORM_TYPES.has(type)), newTransforms = Array.from({ length: transforms.length });
for (let [index, stdioItem] of Object.entries(transforms))
newTransforms[index] = normalizeTransform({
stdioItem,
index: Number(index),
newTransforms,
optionName,
direction,
encoding
});
return sortTransforms(newTransforms, direction);
}, normalizeTransform = ({ stdioItem, stdioItem: { type }, index, newTransforms, optionName, direction, encoding }) => type === "duplex" ? normalizeDuplex({ stdioItem, optionName }) : type === "webTransform" ? normalizeTransformStream({
stdioItem,
index,
newTransforms,
direction
}) : normalizeGenerator({
stdioItem,
index,
newTransforms,
direction,
encoding
}), normalizeDuplex = ({
stdioItem,
stdioItem: {
value: {
transform,
transform: { writableObjectMode, readableObjectMode },
objectMode = readableObjectMode
}
},
optionName
}) => {
if (objectMode && !readableObjectMode)
throw new TypeError(`The \`${optionName}.objectMode\` option can only be \`true\` if \`new Duplex({objectMode: true})\` is used.`);
if (!objectMode && readableObjectMode)
throw new TypeError(`The \`${optionName}.objectMode\` option cannot be \`false\` if \`new Duplex({objectMode: true})\` is used.`);
return {
...stdioItem,
value: { transform, writableObjectMode, readableObjectMode }
};
}, normalizeTransformStream = ({ stdioItem, stdioItem: { value }, index, newTransforms, direction }) => {
let { transform, objectMode } = isPlainObject(value) ? value : { transform: value }, { writableObjectMode, readableObjectMode } = getTransformObjectModes(objectMode, index, newTransforms, direction);
return {
...stdioItem,
value: { transform, writableObjectMode, readableObjectMode }
};
}, normalizeGenerator = ({ stdioItem, stdioItem: { value }, index, newTransforms, direction, encoding }) => {
let {
transform,
final,
binary: binaryOption = !1,
preserveNewlines = !1,
objectMode
} = isPlainObject(value) ? value : { transform: value }, binary = binaryOption || BINARY_ENCODINGS.has(encoding), { writableObjectMode, readableObjectMode } = getTransformObjectModes(objectMode, index, newTransforms, direction);
return {
...stdioItem,
value: {
transform,
final,
binary,
preserveNewlines,
writableObjectMode,
readableObjectMode
}
};
}, sortTransforms = (newTransforms, direction) => direction === "input" ? newTransforms.reverse() : newTransforms;
// ../../node_modules/execa/lib/stdio/direction.js
import process7 from "node:process";
var getStreamDirection = (stdioItems, fdNumber, optionName) => {
let directions = stdioItems.map((stdioItem) => getStdioItemDirection(stdioItem, fdNumber));
if (directions.includes("input") && directions.includes("output"))
throw new TypeError(`The \`${optionName}\` option must not be an array of both readable and writable values.`);
return directions.find(Boolean) ?? DEFAULT_DIRECTION;
}, getStdioItemDirection = ({ type, value }, fdNumber) => KNOWN_DIRECTIONS[fdNumber] ?? guessStreamDirection[type](value), KNOWN_DIRECTIONS = ["input", "output", "output"], anyDirection = () => {
}, alwaysInput = () => "input", guessStreamDirection = {
generator: anyDirection,
asyncGenerator: anyDirection,
fileUrl: anyDirection,
filePath: anyDirection,
iterable: alwaysInput,
asyncIterable: alwaysInput,
uint8Array: alwaysInput,
webStream: (value) => isWritableStream2(value) ? "output" : "input",
nodeStream(value) {
return isReadableStream2(value, { checkOpen: !1 }) ? isWritableStream(value, { checkOpen: !1 }) ? void 0 : "input" : "output";
},
webTransform: anyDirection,
duplex: anyDirection,
native(value) {
let standardStreamDirection = getStandardStreamDirection(value);
if (standardStreamDirection !== void 0)
return standardStreamDirection;
if (isStream2(value, { checkOpen: !1 }))
return guessStreamDirection.nodeStream(value);
}
}, getStandardStreamDirection = (value) => {
if ([0, process7.stdin].includes(value))
return "input";
if ([1, 2, process7.stdout, process7.stderr].includes(value))
return "output";
}, DEFAULT_DIRECTION = "output";
// ../../node_modules/execa/lib/ipc/array.js
var normalizeIpcStdioArray = (stdioArray, ipc) => ipc && !stdioArray.includes("ipc") ? [...stdioArray, "ipc"] : stdioArray;
// ../../node_modules/execa/lib/stdio/stdio-option.js
var normalizeStdioOption = ({ stdio, ipc, buffer, ...options }, verboseInfo, isSync) => {
let stdioArray = getStdioArray(stdio, options).map((stdioOption, fdNumber) => addDefaultValue2(stdioOption, fdNumber));
return isSync ? normalizeStdioSync(stdioArray, buffer, verboseInfo) : normalizeIpcStdioArray(stdioArray, ipc);
}, getStdioArray = (stdio, options) => {
if (stdio === void 0)
return STANDARD_STREAMS_ALIASES.map((alias) => options[alias]);
if (hasAlias(options))
throw new Error(`It's not possible to provide \`stdio\` in combination with one of ${STANDARD_STREAMS_ALIASES.map((alias) => `\`${alias}\``).join(", ")}`);
if (typeof stdio == "string")
return [stdio, stdio, stdio];
if (!Array.isArray(stdio))
throw new TypeError(`Expected \`stdio\` to be of type \`string\` or \`Array\`, got \`${typeof stdio}\``);
let length = Math.max(stdio.length, STANDARD_STREAMS_ALIASES.length);
return Array.from({ length }, (_, fdNumber) => stdio[fdNumber]);
}, hasAlias = (options) => STANDARD_STREAMS_ALIASES.some((alias) => options[alias] !== void 0), addDefaultValue2 = (stdioOption, fdNumber) => Array.isArray(stdioOption) ? stdioOption.map((item) => addDefaultValue2(item, fdNumber)) : stdioOption ?? (fdNumber >= STANDARD_STREAMS_ALIASES.length ? "ignore" : "pipe"), normalizeStdioSync = (stdioArray, buffer, verboseInfo) => stdioArray.map((stdioOption, fdNumber) => !buffer[fdNumber] && fdNumber !== 0 && !isFullVerbose(verboseInfo, fdNumber) && isOutputPipeOnly(stdioOption) ? "ignore" : stdioOption), isOutputPipeOnly = (stdioOption) => stdioOption === "pipe" || Array.isArray(stdioOption) && stdioOption.every((item) => item === "pipe");
// ../../node_modules/execa/lib/stdio/native.js
import { readFileSync as readFileSync7 } from "node:fs";
import tty2 from "node:tty";
var handleNativeStream = ({ stdioItem, stdioItem: { type }, isStdioArray, fdNumber, direction, isSync }) => !isStdioArray || type !== "native" ? stdioItem : isSync ? handleNativeStreamSync({ stdioItem, fdNumber, direction }) : handleNativeStreamAsync({ stdioItem, fdNumber }), handleNativeStreamSync = ({ stdioItem, stdioItem: { value, optionName }, fdNumber, direction }) => {
let targetFd = getTargetFd({
value,
optionName,
fdNumber,
direction
});
if (targetFd !== void 0)
return targetFd;
if (isStream2(value, { checkOpen: !1 }))
throw new TypeError(`The \`${optionName}: Stream\` option cannot both be an array and include a stream with synchronous methods.`);
return stdioItem;
}, getTargetFd = ({ value, optionName, fdNumber, direction }) => {
let targetFdNumber = getTargetFdNumber(value, fdNumber);
if (targetFdNumber !== void 0) {
if (direction === "output")
return { type: "fileNumber", value: targetFdNumber, optionName };
if (tty2.isatty(targetFdNumber))
throw new TypeError(`The \`${optionName}: ${serializeOptionValue(value)}\` option is invalid: it cannot be a TTY with synchronous methods.`);
return { type: "uint8Array", value: bufferToUint8Array(readFileSync7(targetFdNumber)), optionName };
}
}, getTargetFdNumber = (value, fdNumber) => {
if (value === "inherit")
return fdNumber;
if (typeof value == "number")
return value;
let standardStreamIndex = STANDARD_STREAMS.indexOf(value);
if (standardStreamIndex !== -1)
return standardStreamIndex;
}, handleNativeStreamAsync = ({ stdioItem, stdioItem: { value, optionName }, fdNumber }) => value === "inherit" ? { type: "nodeStream", value: getStandardStream(fdNumber, value, optionName), optionName } : typeof value == "number" ? { type: "nodeStream", value: getStandardStream(value, value, optionName), optionName } : isStream2(value, { checkOpen: !1 }) ? { type: "nodeStream", value, optionName } : stdioItem, getStandardStream = (fdNumber, value, optionName) => {
let standardStream = STANDARD_STREAMS[fdNumber];
if (standardStream === void 0)
throw new TypeError(`The \`${optionName}: ${value}\` option is invalid: no such standard stream.`);
return standardStream;
};
// ../../node_modules/execa/lib/stdio/input-option.js
var handleInputOptions = ({ input, inputFile }, fdNumber) => fdNumber === 0 ? [
...handleInputOption(input),
...handleInputFileOption(inputFile)
] : [], handleInputOption = (input) => input === void 0 ? [] : [{
type: getInputType(input),
value: input,
optionName: "input"
}], getInputType = (input) => {
if (isReadableStream2(input, { checkOpen: !1 }))
return "nodeStream";
if (typeof input == "string")
return "string";
if (isUint8Array(input))
return "uint8Array";
throw new Error("The `input` option must be a string, a Uint8Array or a Node.js Readable stream.");
}, handleInputFileOption = (inputFile) => inputFile === void 0 ? [] : [{
...getInputFileType(inputFile),
optionName: "inputFile"
}], getInputFileType = (inputFile) => {
if (isUrl(inputFile))
return { type: "fileUrl", value: inputFile };
if (isFilePathString(inputFile))
return { type: "filePath", value: { file: inputFile } };
throw new Error("The `inputFile` option must be a file path string or a file URL.");
};
// ../../node_modules/execa/lib/stdio/duplicate.js
var filterDuplicates = (stdioItems) => stdioItems.filter((stdioItemOne, indexOne) => stdioItems.every((stdioItemTwo, indexTwo) => stdioItemOne.value !== stdioItemTwo.value || indexOne >= indexTwo || stdioItemOne.type === "generator" || stdioItemOne.type === "asyncGenerator")), getDuplicateStream = ({ stdioItem: { type, value, optionName }, direction, fileDescriptors, isSync }) => {
let otherStdioItems = getOtherStdioItems(fileDescriptors, type);
if (otherStdioItems.length !== 0) {
if (isSync) {
validateDuplicateStreamSync({
otherStdioItems,
type,
value,
optionName,
direction
});
return;
}
if (SPECIAL_DUPLICATE_TYPES.has(type))
return getDuplicateStreamInstance({
otherStdioItems,
type,
value,
optionName,
direction
});
FORBID_DUPLICATE_TYPES.has(type) && validateDuplicateTransform({
otherStdioItems,
type,
value,
optionName
});
}
}, getOtherStdioItems = (fileDescriptors, type) => fileDescriptors.flatMap(({ direction, stdioItems }) => stdioItems.filter((stdioItem) => stdioItem.type === type).map(((stdioItem) => ({ ...stdioItem, direction })))), validateDuplicateStreamSync = ({ otherStdioItems, type, value, optionName, direction }) => {
SPECIAL_DUPLICATE_TYPES_SYNC.has(type) && getDuplicateStreamInstance({
otherStdioItems,
type,
value,
optionName,
direction
});
}, getDuplicateStreamInstance = ({ otherStdioItems, type, value, optionName, direction }) => {
let duplicateStdioItems = otherStdioItems.filter((stdioItem) => hasSameValue(stdioItem, value));
if (duplicateStdioItems.length === 0)
return;
let differentStdioItem = duplicateStdioItems.find((stdioItem) => stdioItem.direction !== direction);
return throwOnDuplicateStream(differentStdioItem, optionName, type), direction === "output" ? duplicateStdioItems[0].stream : void 0;
}, hasSameValue = ({ type, value }, secondValue) => type === "filePath" ? value.file === secondValue.file : type === "fileUrl" ? value.href === secondValue.href : value === secondValue, validateDuplicateTransform = ({ otherStdioItems, type, value, optionName }) => {
let duplicateStdioItem = otherStdioItems.find(({ value: { transform } }) => transform === value.transform);
throwOnDuplicateStream(duplicateStdioItem, optionName, type);
}, throwOnDuplicateStream = (stdioItem, optionName, type) => {
if (stdioItem !== void 0)
throw new TypeError(`The \`${stdioItem.optionName}\` and \`${optionName}\` options must not target ${TYPE_TO_MESSAGE[type]} that is the same.`);
};
// ../../node_modules/execa/lib/stdio/handle.js
var handleStdio = (addProperties3, options, verboseInfo, isSync) => {
let initialFileDescriptors = normalizeStdioOption(options, verboseInfo, isSync).map((stdioOption, fdNumber) => getFileDescriptor({
stdioOption,
fdNumber,
options,
isSync
})), fileDescriptors = getFinalFileDescriptors({
initialFileDescriptors,
addProperties: addProperties3,
options,
isSync
});
return options.stdio = fileDescriptors.map(({ stdioItems }) => forwardStdio(stdioItems)), fileDescriptors;
}, getFileDescriptor = ({ stdioOption, fdNumber, options, isSync }) => {
let optionName = getStreamName(fdNumber), { stdioItems: initialStdioItems, isStdioArray } = initializeStdioItems({
stdioOption,
fdNumber,
options,
optionName
}), direction = getStreamDirection(initialStdioItems, fdNumber, optionName), stdioItems = initialStdioItems.map((stdioItem) => handleNativeStream({
stdioItem,
isStdioArray,
fdNumber,
direction,
isSync
})), normalizedStdioItems = normalizeTransforms(stdioItems, optionName, direction, options), objectMode = getFdObjectMode(normalizedStdioItems, direction);
return validateFileObjectMode(normalizedStdioItems, objectMode), { direction, objectMode, stdioItems: normalizedStdioItems };
}, initializeStdioItems = ({ stdioOption, fdNumber, options, optionName }) => {
let initialStdioItems = [
...(Array.isArray(stdioOption) ? stdioOption : [stdioOption]).map((value) => initializeStdioItem(value, optionName)),
...handleInputOptions(options, fdNumber)
], stdioItems = filterDuplicates(initialStdioItems), isStdioArray = stdioItems.length > 1;
return validateStdioArray(stdioItems, isStdioArray, optionName), validateStreams(stdioItems), { stdioItems, isStdioArray };
}, initializeStdioItem = (value, optionName) => ({
type: getStdioItemType(value, optionName),
value,
optionName
}), validateStdioArray = (stdioItems, isStdioArray, optionName) => {
if (stdioItems.length === 0)
throw new TypeError(`The \`${optionName}\` option must not be an empty array.`);
if (isStdioArray) {
for (let { value, optionName: optionName2 } of stdioItems)
if (INVALID_STDIO_ARRAY_OPTIONS.has(value))
throw new Error(`The \`${optionName2}\` option must not include \`${value}\`.`);
}
}, INVALID_STDIO_ARRAY_OPTIONS = /* @__PURE__ */ new Set(["ignore", "ipc"]), validateStreams = (stdioItems) => {
for (let stdioItem of stdioItems)
validateFileStdio(stdioItem);
}, validateFileStdio = ({ type, value, optionName }) => {
if (isRegularUrl(value))
throw new TypeError(`The \`${optionName}: URL\` option must use the \`file:\` scheme.
For example, you can use the \`pathToFileURL()\` method of the \`url\` core module.`);
if (isUnknownStdioString(type, value))
throw new TypeError(`The \`${optionName}: { file: '...' }\` option must be used instead of \`${optionName}: '...'\`.`);
}, validateFileObjectMode = (stdioItems, objectMode) => {
if (!objectMode)
return;
let fileStdioItem = stdioItems.find(({ type }) => FILE_TYPES.has(type));
if (fileStdioItem !== void 0)
throw new TypeError(`The \`${fileStdioItem.optionName}\` option cannot use both files and transforms in objectMode.`);
}, getFinalFileDescriptors = ({ initialFileDescriptors, addProperties: addProperties3, options, isSync }) => {
let fileDescriptors = [];
try {
for (let fileDescriptor of initialFileDescriptors)
fileDescriptors.push(getFinalFileDescriptor({
fileDescriptor,
fileDescriptors,
addProperties: addProperties3,
options,
isSync
}));
return fileDescriptors;
} catch (error) {
throw cleanupCustomStreams(fileDescriptors), error;
}
}, getFinalFileDescriptor = ({
fileDescriptor: { direction, objectMode, stdioItems },
fileDescriptors,
addProperties: addProperties3,
options,
isSync
}) => {
let finalStdioItems = stdioItems.map((stdioItem) => addStreamProperties({
stdioItem,
addProperties: addProperties3,
direction,
options,
fileDescriptors,
isSync
}));
return { direction, objectMode, stdioItems: finalStdioItems };
}, addStreamProperties = ({ stdioItem, addProperties: addProperties3, direction, options, fileDescriptors, isSync }) => {
let duplicateStream = getDuplicateStream({
stdioItem,
direction,
fileDescriptors,
isSync
});
return duplicateStream !== void 0 ? { ...stdioItem, stream: duplicateStream } : {
...stdioItem,
...addProperties3[direction][stdioItem.type](stdioItem, options)
};
}, cleanupCustomStreams = (fileDescriptors) => {
for (let { stdioItems } of fileDescriptors)
for (let { stream } of stdioItems)
stream !== void 0 && !isStandardStream(stream) && stream.destroy();
}, forwardStdio = (stdioItems) => {
if (stdioItems.length > 1)
return stdioItems.some(({ value: value2 }) => value2 === "overlapped") ? "overlapped" : "pipe";
let [{ type, value }] = stdioItems;
return type === "native" ? value : "pipe";
};
// ../../node_modules/execa/lib/stdio/handle-sync.js
var handleStdioSync = (options, verboseInfo) => handleStdio(addPropertiesSync, options, verboseInfo, !0), forbiddenIfSync = ({ type, optionName }) => {
throwInvalidSyncValue(optionName, TYPE_TO_MESSAGE[type]);
}, forbiddenNativeIfSync = ({ optionName, value }) => ((value === "ipc" || value === "overlapped") && throwInvalidSyncValue(optionName, `"${value}"`), {}), throwInvalidSyncValue = (optionName, value) => {
throw new TypeError(`The \`${optionName}\` option cannot be ${value} with synchronous methods.`);
}, addProperties = {
generator() {
},
asyncGenerator: forbiddenIfSync,
webStream: forbiddenIfSync,
nodeStream: forbiddenIfSync,
webTransform: forbiddenIfSync,
duplex: forbiddenIfSync,
asyncIterable: forbiddenIfSync,
native: forbiddenNativeIfSync
}, addPropertiesSync = {
input: {
...addProperties,
fileUrl: ({ value }) => ({ contents: [bufferToUint8Array(readFileSync8(value))] }),
filePath: ({ value: { file } }) => ({ contents: [bufferToUint8Array(readFileSync8(file))] }),
fileNumber: forbiddenIfSync,
iterable: ({ value }) => ({ contents: [...value] }),
string: ({ value }) => ({ contents: [value] }),
uint8Array: ({ value }) => ({ contents: [value] })
},
output: {
...addProperties,
fileUrl: ({ value }) => ({ path: value }),
filePath: ({ value: { file, append } }) => ({ path: file, append }),
fileNumber: ({ value }) => ({ path: value }),
iterable: forbiddenIfSync,
string: forbiddenIfSync,
uint8Array: forbiddenIfSync
}
};
// ../../node_modules/execa/lib/io/strip-newline.js
var stripNewline = (value, { stripFinalNewline: stripFinalNewline2 }, fdNumber) => getStripFinalNewline(stripFinalNewline2, fdNumber) && value !== void 0 && !Array.isArray(value) ? stripFinalNewline(value) : value, getStripFinalNewline = (stripFinalNewline2, fdNumber) => fdNumber === "all" ? stripFinalNewline2[1] || stripFinalNewline2[2] : stripFinalNewline2[fdNumber];
// ../../node_modules/execa/lib/transform/generator.js
import { Transform, getDefaultHighWaterMark } from "node:stream";
// ../../node_modules/execa/lib/transform/split.js
var getSplitLinesGenerator = (binary, preserveNewlines, skipped, state) => binary || skipped ? void 0 : initializeSplitLines(preserveNewlines, state), splitLinesSync = (chunk, preserveNewlines, objectMode) => objectMode ? chunk.flatMap((item) => splitLinesItemSync(item, preserveNewlines)) : splitLinesItemSync(chunk, preserveNewlines), splitLinesItemSync = (chunk, preserveNewlines) => {
let { transform, final } = initializeSplitLines(preserveNewlines, {});
return [...transform(chunk), ...final()];
}, initializeSplitLines = (preserveNewlines, state) => (state.previousChunks = "", {
transform: splitGenerator.bind(void 0, state, preserveNewlines),
final: linesFinal.bind(void 0, state)
}), splitGenerator = function* (state, preserveNewlines, chunk) {
if (typeof chunk != "string") {
yield chunk;
return;
}
let { previousChunks } = state, start = -1;
for (let end = 0; end < chunk.length; end += 1)
if (chunk[end] === `
`) {
let newlineLength = getNewlineLength(chunk, end, preserveNewlines, state), line = chunk.slice(start + 1, end + 1 - newlineLength);
previousChunks.length > 0 && (line = concatString(previousChunks, line), previousChunks = ""), yield line, start = end;
}
start !== chunk.length - 1 && (previousChunks = concatString(previousChunks, chunk.slice(start + 1))), state.previousChunks = previousChunks;
}, getNewlineLength = (chunk, end, preserveNewlines, state) => preserveNewlines ? 0 : (state.isWindowsNewline = end !== 0 && chunk[end - 1] === "\r", state.isWindowsNewline ? 2 : 1), linesFinal = function* ({ previousChunks }) {
previousChunks.length > 0 && (yield previousChunks);
}, getAppendNewlineGenerator = ({ binary, preserveNewlines, readableObjectMode, state }) => binary || preserveNewlines || readableObjectMode ? void 0 : { transform: appendNewlineGenerator.bind(void 0, state) }, appendNewlineGenerator = function* ({ isWindowsNewline = !1 }, chunk) {
let { unixNewline, windowsNewline, LF: LF2, concatBytes } = typeof chunk == "string" ? linesStringInfo : linesUint8ArrayInfo;
if (chunk.at(-1) === LF2) {
yield chunk;
return;
}
yield concatBytes(chunk, isWindowsNewline ? windowsNewline : unixNewline);
}, concatString = (firstChunk, secondChunk) => `${firstChunk}${secondChunk}`, linesStringInfo = {
windowsNewline: `\r
`,
unixNewline: `
`,
LF: `
`,
concatBytes: concatString
}, concatUint8Array = (firstChunk, secondChunk) => {
let chunk = new Uint8Array(firstChunk.length + secondChunk.length);
return chunk.set(firstChunk, 0), chunk.set(secondChunk, firstChunk.length), chunk;
}, linesUint8ArrayInfo = {
windowsNewline: new Uint8Array([13, 10]),
unixNewline: new Uint8Array([10]),
LF: 10,
concatBytes: concatUint8Array
};
// ../../node_modules/execa/lib/transform/validate.js
import { Buffer as Buffer2 } from "node:buffer";
var getValidateTransformInput = (writableObjectMode, optionName) => writableObjectMode ? void 0 : validateStringTransformInput.bind(void 0, optionName), validateStringTransformInput = function* (optionName, chunk) {
if (typeof chunk != "string" && !isUint8Array(chunk) && !Buffer2.isBuffer(chunk))
throw new TypeError(`The \`${optionName}\` option's transform must use "objectMode: true" to receive as input: ${typeof chunk}.`);
yield chunk;
}, getValidateTransformReturn = (readableObjectMode, optionName) => readableObjectMode ? validateObjectTransformReturn.bind(void 0, optionName) : validateStringTransformReturn.bind(void 0, optionName), validateObjectTransformReturn = function* (optionName, chunk) {
validateEmptyReturn(optionName, chunk), yield chunk;
}, validateStringTransformReturn = function* (optionName, chunk) {
if (validateEmptyReturn(optionName, chunk), typeof chunk != "string" && !isUint8Array(chunk))
throw new TypeError(`The \`${optionName}\` option's function must yield a string or an Uint8Array, not ${typeof chunk}.`);
yield chunk;
}, validateEmptyReturn = (optionName, chunk) => {
if (chunk == null)
throw new TypeError(`The \`${optionName}\` option's function must not call \`yield ${chunk}\`.
Instead, \`yield\` should either be called with a value, or not be called at all. For example:
if (condition) { yield value; }`);
};
// ../../node_modules/execa/lib/transform/encoding-transform.js
import { Buffer as Buffer3 } from "node:buffer";
import { StringDecoder as StringDecoder2 } from "node:string_decoder";
var getEncodingTransformGenerator = (binary, encoding, skipped) => {
if (skipped)
return;
if (binary)
return { transform: encodingUint8ArrayGenerator.bind(void 0, new TextEncoder()) };
let stringDecoder = new StringDecoder2(encoding);
return {
transform: encodingStringGenerator.bind(void 0, stringDecoder),
final: encodingStringFinal.bind(void 0, stringDecoder)
};
}, encodingUint8ArrayGenerator = function* (textEncoder3, chunk) {
Buffer3.isBuffer(chunk) ? yield bufferToUint8Array(chunk) : typeof chunk == "string" ? yield textEncoder3.encode(chunk) : yield chunk;
}, encodingStringGenerator = function* (stringDecoder, chunk) {
yield isUint8Array(chunk) ? stringDecoder.write(chunk) : chunk;
}, encodingStringFinal = function* (stringDecoder) {
let lastChunk = stringDecoder.end();
lastChunk !== "" && (yield lastChunk);
};
// ../../node_modules/execa/lib/transform/run-async.js
import { callbackify } from "node:util";
var pushChunks = callbackify(async (getChunks, state, getChunksArguments, transformStream) => {
state.currentIterable = getChunks(...getChunksArguments);
try {
for await (let chunk of state.currentIterable)
transformStream.push(chunk);
} finally {
delete state.currentIterable;
}
}), transformChunk = async function* (chunk, generators, index) {
if (index === generators.length) {
yield chunk;
return;
}
let { transform = identityGenerator } = generators[index];
for await (let transformedChunk of transform(chunk))
yield* transformChunk(transformedChunk, generators, index + 1);
}, finalChunks = async function* (generators) {
for (let [index, { final }] of Object.entries(generators))
yield* generatorFinalChunks(final, Number(index), generators);
}, generatorFinalChunks = async function* (final, index, generators) {
if (final !== void 0)
for await (let finalChunk of final())
yield* transformChunk(finalChunk, generators, index + 1);
}, destroyTransform = callbackify(async ({ currentIterable }, error) => {
if (currentIterable !== void 0) {
await (error ? currentIterable.throw(error) : currentIterable.return());
return;
}
if (error)
throw error;
}), identityGenerator = function* (chunk) {
yield chunk;
};
// ../../node_modules/execa/lib/transform/run-sync.js
var pushChunksSync = (getChunksSync, getChunksArguments, transformStream, done) => {
try {
for (let chunk of getChunksSync(...getChunksArguments))
transformStream.push(chunk);
done();
} catch (error) {
done(error);
}
}, runTransformSync = (generators, chunks) => [
...chunks.flatMap((chunk) => [...transformChunkSync(chunk, generators, 0)]),
...finalChunksSync(generators)
], transformChunkSync = function* (chunk, generators, index) {
if (index === generators.length) {
yield chunk;
return;
}
let { transform = identityGenerator2 } = generators[index];
for (let transformedChunk of transform(chunk))
yield* transformChunkSync(transformedChunk, generators, index + 1);
}, finalChunksSync = function* (generators) {
for (let [index, { final }] of Object.entries(generators))
yield* generatorFinalChunksSync(final, Number(index), generators);
}, generatorFinalChunksSync = function* (final, index, generators) {
if (final !== void 0)
for (let finalChunk of final())
yield* transformChunkSync(finalChunk, generators, index + 1);
}, identityGenerator2 = function* (chunk) {
yield chunk;
};
// ../../node_modules/execa/lib/transform/generator.js
var generatorToStream = ({
value,
value: { transform, final, writableObjectMode, readableObjectMode },
optionName
}, { encoding }) => {
let state = {}, generators = addInternalGenerators(value, encoding, optionName), transformAsync = isAsyncGenerator(transform), finalAsync = isAsyncGenerator(final), transformMethod = transformAsync ? pushChunks.bind(void 0, transformChunk, state) : pushChunksSync.bind(void 0, transformChunkSync), finalMethod = transformAsync || finalAsync ? pushChunks.bind(void 0, finalChunks, state) : pushChunksSync.bind(void 0, finalChunksSync), destroyMethod = transformAsync || finalAsync ? destroyTransform.bind(void 0, state) : void 0;
return { stream: new Transform({
writableObjectMode,
writableHighWaterMark: getDefaultHighWaterMark(writableObjectMode),
readableObjectMode,
readableHighWaterMark: getDefaultHighWaterMark(readableObjectMode),
transform(chunk, encoding2, done) {
transformMethod([chunk, generators, 0], this, done);
},
flush(done) {
finalMethod([generators], this, done);
},
destroy: destroyMethod
}) };
}, runGeneratorsSync = (chunks, stdioItems, encoding, isInput) => {
let generators = stdioItems.filter(({ type }) => type === "generator"), reversedGenerators = isInput ? generators.reverse() : generators;
for (let { value, optionName } of reversedGenerators) {
let generators2 = addInternalGenerators(value, encoding, optionName);
chunks = runTransformSync(generators2, chunks);
}
return chunks;
}, addInternalGenerators = ({ transform, final, binary, writableObjectMode, readableObjectMode, preserveNewlines }, encoding, optionName) => {
let state = {};
return [
{ transform: getValidateTransformInput(writableObjectMode, optionName) },
getEncodingTransformGenerator(binary, encoding, writableObjectMode),
getSplitLinesGenerator(binary, preserveNewlines, writableObjectMode, state),
{ transform, final },
{ transform: getValidateTransformReturn(readableObjectMode, optionName) },
getAppendNewlineGenerator({
binary,
preserveNewlines,
readableObjectMode,
state
})
].filter(Boolean);
};
// ../../node_modules/execa/lib/io/input-sync.js
var addInputOptionsSync = (fileDescriptors, options) => {
for (let fdNumber of getInputFdNumbers(fileDescriptors))
addInputOptionSync(fileDescriptors, fdNumber, options);
}, getInputFdNumbers = (fileDescriptors) => new Set(Object.entries(fileDescriptors).filter(([, { direction }]) => direction === "input").map(([fdNumber]) => Number(fdNumber))), addInputOptionSync = (fileDescriptors, fdNumber, options) => {
let { stdioItems } = fileDescriptors[fdNumber], allStdioItems = stdioItems.filter(({ contents }) => contents !== void 0);
if (allStdioItems.length === 0)
return;
if (fdNumber !== 0) {
let [{ type, optionName }] = allStdioItems;
throw new TypeError(`Only the \`stdin\` option, not \`${optionName}\`, can be ${TYPE_TO_MESSAGE[type]} with synchronous methods.`);
}
let transformedContents = allStdioItems.map(({ contents }) => contents).map((contents) => applySingleInputGeneratorsSync(contents, stdioItems));
options.input = joinToUint8Array(transformedContents);
}, applySingleInputGeneratorsSync = (contents, stdioItems) => {
let newContents = runGeneratorsSync(contents, stdioItems, "utf8", !0);
return validateSerializable(newContents), joinToUint8Array(newContents);
}, validateSerializable = (newContents) => {
let invalidItem = newContents.find((item) => typeof item != "string" && !isUint8Array(item));
if (invalidItem !== void 0)
throw new TypeError(`The \`stdin\` option is invalid: when passing objects as input, a transform must be used to serialize them to strings or Uint8Arrays: ${invalidItem}.`);
};
// ../../node_modules/execa/lib/io/output-sync.js
import { writeFileSync as writeFileSync3, appendFileSync } from "node:fs";
// ../../node_modules/execa/lib/verbose/output.js
var shouldLogOutput = ({ stdioItems, encoding, verboseInfo, fdNumber }) => fdNumber !== "all" && isFullVerbose(verboseInfo, fdNumber) && !BINARY_ENCODINGS.has(encoding) && fdUsesVerbose(fdNumber) && (stdioItems.some(({ type, value }) => type === "native" && PIPED_STDIO_VALUES.has(value)) || stdioItems.every(({ type }) => TRANSFORM_TYPES.has(type))), fdUsesVerbose = (fdNumber) => fdNumber === 1 || fdNumber === 2, PIPED_STDIO_VALUES = /* @__PURE__ */ new Set(["pipe", "overlapped"]), logLines = async (linesIterable, stream, fdNumber, verboseInfo) => {
for await (let line of linesIterable)
isPipingStream(stream) || logLine(line, fdNumber, verboseInfo);
}, logLinesSync = (linesArray, fdNumber, verboseInfo) => {
for (let line of linesArray)
logLine(line, fdNumber, verboseInfo);
}, isPipingStream = (stream) => stream._readableState.pipes.length > 0, logLine = (line, fdNumber, verboseInfo) => {
let verboseMessage = serializeVerboseMessage(line);
verboseLog({
type: "output",
verboseMessage,
fdNumber,
verboseInfo
});
};
// ../../node_modules/execa/lib/io/output-sync.js
var transformOutputSync = ({ fileDescriptors, syncResult: { output }, options, isMaxBuffer, verboseInfo }) => {
if (output === null)
return { output: Array.from({ length: 3 }) };
let state = {}, outputFiles = /* @__PURE__ */ new Set([]);
return { output: output.map((result, fdNumber) => transformOutputResultSync({
result,
fileDescriptors,
fdNumber,
state,
outputFiles,
isMaxBuffer,
verboseInfo
}, options)), ...state };
}, transformOutputResultSync = ({ result, fileDescriptors, fdNumber, state, outputFiles, isMaxBuffer, verboseInfo }, { buffer, encoding, lines, stripFinalNewline: stripFinalNewline2, maxBuffer }) => {
if (result === null)
return;
let truncatedResult = truncateMaxBufferSync(result, isMaxBuffer, maxBuffer), uint8ArrayResult = bufferToUint8Array(truncatedResult), { stdioItems, objectMode } = fileDescriptors[fdNumber], chunks = runOutputGeneratorsSync([uint8ArrayResult], stdioItems, encoding, state), { serializedResult, finalResult = serializedResult } = serializeChunks({
chunks,
objectMode,
encoding,
lines,
stripFinalNewline: stripFinalNewline2,
fdNumber
});
logOutputSync({
serializedResult,
fdNumber,
state,
verboseInfo,
encoding,
stdioItems,
objectMode
});
let returnedResult = buffer[fdNumber] ? finalResult : void 0;
try {
return state.error === void 0 && writeToFiles(serializedResult, stdioItems, outputFiles), returnedResult;
} catch (error) {
return state.error = error, returnedResult;
}
}, runOutputGeneratorsSync = (chunks, stdioItems, encoding, state) => {
try {
return runGeneratorsSync(chunks, stdioItems, encoding, !1);
} catch (error) {
return state.error = error, chunks;
}
}, serializeChunks = ({ chunks, objectMode, encoding, lines, stripFinalNewline: stripFinalNewline2, fdNumber }) => {
if (objectMode)
return { serializedResult: chunks };
if (encoding === "buffer")
return { serializedResult: joinToUint8Array(chunks) };
let serializedResult = joinToString(chunks, encoding);
return lines[fdNumber] ? { serializedResult, finalResult: splitLinesSync(serializedResult, !stripFinalNewline2[fdNumber], objectMode) } : { serializedResult };
}, logOutputSync = ({ serializedResult, fdNumber, state, verboseInfo, encoding, stdioItems, objectMode }) => {
if (!shouldLogOutput({
stdioItems,
encoding,
verboseInfo,
fdNumber
}))
return;
let linesArray = splitLinesSync(serializedResult, !1, objectMode);
try {
logLinesSync(linesArray, fdNumber, verboseInfo);
} catch (error) {
state.error ??= error;
}
}, writeToFiles = (serializedResult, stdioItems, outputFiles) => {
for (let { path: path5, append } of stdioItems.filter(({ type }) => FILE_TYPES.has(type))) {
let pathString = typeof path5 == "string" ? path5 : path5.toString();
append || outputFiles.has(pathString) ? appendFileSync(path5, serializedResult) : (outputFiles.add(pathString), writeFileSync3(path5, serializedResult));
}
};
// ../../node_modules/execa/lib/resolve/all-sync.js
var getAllSync = ([, stdout, stderr], options) => {
if (options.all)
return stdout === void 0 ? stderr : stderr === void 0 ? stdout : Array.isArray(stdout) ? Array.isArray(stderr) ? [...stdout, ...stderr] : [...stdout, stripNewline(stderr, options, "all")] : Array.isArray(stderr) ? [stripNewline(stdout, options, "all"), ...stderr] : isUint8Array(stdout) && isUint8Array(stderr) ? concatUint8Arrays([stdout, stderr]) : `${stdout}${stderr}`;
};
// ../../node_modules/execa/lib/resolve/exit-async.js
import { once as once6 } from "node:events";
var waitForExit = async (subprocess, context) => {
let [exitCode, signal] = await waitForExitOrError(subprocess);
return context.isForcefullyTerminated ??= !1, [exitCode, signal];
}, waitForExitOrError = async (subprocess) => {
let [spawnPayload, exitPayload] = await Promise.allSettled([
once6(subprocess, "spawn"),
once6(subprocess, "exit")
]);
return spawnPayload.status === "rejected" ? [] : exitPayload.status === "rejected" ? waitForSubprocessExit(subprocess) : exitPayload.value;
}, waitForSubprocessExit = async (subprocess) => {
try {
return await once6(subprocess, "exit");
} catch {
return waitForSubprocessExit(subprocess);
}
}, waitForSuccessfulExit = async (exitPromise) => {
let [exitCode, signal] = await exitPromise;
if (!isSubprocessErrorExit(exitCode, signal) && isFailedExit(exitCode, signal))
throw new DiscardedError();
return [exitCode, signal];
}, isSubprocessErrorExit = (exitCode, signal) => exitCode === void 0 && signal === void 0, isFailedExit = (exitCode, signal) => exitCode !== 0 || signal !== null;
// ../../node_modules/execa/lib/resolve/exit-sync.js
var getExitResultSync = ({ error, status: exitCode, signal, output }, { maxBuffer }) => {
let resultError = getResultError(error, exitCode, signal), timedOut = resultError?.code === "ETIMEDOUT", isMaxBuffer = isMaxBufferSync(resultError, output, maxBuffer);
return {
resultError,
exitCode,
signal,
timedOut,
isMaxBuffer
};
}, getResultError = (error, exitCode, signal) => error !== void 0 ? error : isFailedExit(exitCode, signal) ? new DiscardedError() : void 0;
// ../../node_modules/execa/lib/methods/main-sync.js
var execaCoreSync = (rawFile, rawArguments, rawOptions) => {
let { file, commandArguments, command, escapedCommand, startTime, verboseInfo, options, fileDescriptors } = handleSyncArguments(rawFile, rawArguments, rawOptions), result = spawnSubprocessSync({
file,
commandArguments,
options,
command,
escapedCommand,
verboseInfo,
fileDescriptors,
startTime
});
return handleResult(result, verboseInfo, options);
}, handleSyncArguments = (rawFile, rawArguments, rawOptions) => {
let { command, escapedCommand, startTime, verboseInfo } = handleCommand(rawFile, rawArguments, rawOptions), syncOptions = normalizeSyncOptions(rawOptions), { file, commandArguments, options } = normalizeOptions(rawFile, rawArguments, syncOptions);
validateSyncOptions(options);
let fileDescriptors = handleStdioSync(options, verboseInfo);
return {
file,
commandArguments,
command,
escapedCommand,
startTime,
verboseInfo,
options,
fileDescriptors
};
}, normalizeSyncOptions = (options) => options.node && !options.ipc ? { ...options, ipc: !1 } : options, validateSyncOptions = ({ ipc, ipcInput, detached, cancelSignal }) => {
ipcInput && throwInvalidSyncOption("ipcInput"), ipc && throwInvalidSyncOption("ipc: true"), detached && throwInvalidSyncOption("detached: true"), cancelSignal && throwInvalidSyncOption("cancelSignal");
}, throwInvalidSyncOption = (value) => {
throw new TypeError(`The "${value}" option cannot be used with synchronous methods.`);
}, spawnSubprocessSync = ({ file, commandArguments, options, command, escapedCommand, verboseInfo, fileDescriptors, startTime }) => {
let syncResult = runSubprocessSync({
file,
commandArguments,
options,
command,
escapedCommand,
fileDescriptors,
startTime
});
if (syncResult.failed)
return syncResult;
let { resultError, exitCode, signal, timedOut, isMaxBuffer } = getExitResultSync(syncResult, options), { output, error = resultError } = transformOutputSync({
fileDescriptors,
syncResult,
options,
isMaxBuffer,
verboseInfo
}), stdio = output.map((stdioOutput, fdNumber) => stripNewline(stdioOutput, options, fdNumber)), all = stripNewline(getAllSync(output, options), options, "all");
return getSyncResult({
error,
exitCode,
signal,
timedOut,
isMaxBuffer,
stdio,
all,
options,
command,
escapedCommand,
startTime
});
}, runSubprocessSync = ({ file, commandArguments, options, command, escapedCommand, fileDescriptors, startTime }) => {
try {
addInputOptionsSync(fileDescriptors, options);
let normalizedOptions = normalizeSpawnSyncOptions(options);
return spawnSync(...concatenateShell(file, commandArguments, normalizedOptions));
} catch (error) {
return makeEarlyError({
error,
command,
escapedCommand,
fileDescriptors,
options,
startTime,
isSync: !0
});
}
}, normalizeSpawnSyncOptions = ({ encoding, maxBuffer, ...options }) => ({ ...options, encoding: "buffer", maxBuffer: getMaxBufferSync(maxBuffer) }), getSyncResult = ({ error, exitCode, signal, timedOut, isMaxBuffer, stdio, all, options, command, escapedCommand, startTime }) => error === void 0 ? makeSuccessResult({
command,
escapedCommand,
stdio,
all,
ipcOutput: [],
options,
startTime
}) : makeError({
error,
command,
escapedCommand,
timedOut,
isCanceled: !1,
isGracefullyCanceled: !1,
isMaxBuffer,
isForcefullyTerminated: !1,
exitCode,
signal,
stdio,
all,
ipcOutput: [],
options,
startTime,
isSync: !0
});
// ../../node_modules/execa/lib/methods/main-async.js
import { setMaxListeners } from "node:events";
import { spawn } from "node:child_process";
// ../../node_modules/execa/lib/ipc/methods.js
import process8 from "node:process";
// ../../node_modules/execa/lib/ipc/get-one.js
import { once as once7, on as on2 } from "node:events";
var getOneMessage = ({ anyProcess, channel, isSubprocess, ipc }, { reference = !0, filter } = {}) => (validateIpcMethod({
methodName: "getOneMessage",
isSubprocess,
ipc,
isConnected: isConnected(anyProcess)
}), getOneMessageAsync({
anyProcess,
channel,
isSubprocess,
filter,
reference
})), getOneMessageAsync = async ({ anyProcess, channel, isSubprocess, filter, reference }) => {
addReference(channel, reference);
let ipcEmitter = getIpcEmitter(anyProcess, channel, isSubprocess), controller = new AbortController();
try {
return await Promise.race([
getMessage(ipcEmitter, filter, controller),
throwOnDisconnect2(ipcEmitter, isSubprocess, controller),
throwOnStrictError(ipcEmitter, isSubprocess, controller)
]);
} catch (error) {
throw disconnect(anyProcess), error;
} finally {
controller.abort(), removeReference(channel, reference);
}
}, getMessage = async (ipcEmitter, filter, { signal }) => {
if (filter === void 0) {
let [message] = await once7(ipcEmitter, "message", { signal });
return message;
}
for await (let [message] of on2(ipcEmitter, "message", { signal }))
if (filter(message))
return message;
}, throwOnDisconnect2 = async (ipcEmitter, isSubprocess, { signal }) => {
await once7(ipcEmitter, "disconnect", { signal }), throwOnEarlyDisconnect(isSubprocess);
}, throwOnStrictError = async (ipcEmitter, isSubprocess, { signal }) => {
let [error] = await once7(ipcEmitter, "strict:error", { signal });
throw getStrictResponseError(error, isSubprocess);
};
// ../../node_modules/execa/lib/ipc/get-each.js
import { once as once8, on as on3 } from "node:events";
var getEachMessage = ({ anyProcess, channel, isSubprocess, ipc }, { reference = !0 } = {}) => loopOnMessages({
anyProcess,
channel,
isSubprocess,
ipc,
shouldAwait: !isSubprocess,
reference
}), loopOnMessages = ({ anyProcess, channel, isSubprocess, ipc, shouldAwait, reference }) => {
validateIpcMethod({
methodName: "getEachMessage",
isSubprocess,
ipc,
isConnected: isConnected(anyProcess)
}), addReference(channel, reference);
let ipcEmitter = getIpcEmitter(anyProcess, channel, isSubprocess), controller = new AbortController(), state = {};
return stopOnDisconnect(anyProcess, ipcEmitter, controller), abortOnStrictError({
ipcEmitter,
isSubprocess,
controller,
state
}), iterateOnMessages({
anyProcess,
channel,
ipcEmitter,
isSubprocess,
shouldAwait,
controller,
state,
reference
});
}, stopOnDisconnect = async (anyProcess, ipcEmitter, controller) => {
try {
await once8(ipcEmitter, "disconnect", { signal: controller.signal }), controller.abort();
} catch {
}
}, abortOnStrictError = async ({ ipcEmitter, isSubprocess, controller, state }) => {
try {
let [error] = await once8(ipcEmitter, "strict:error", { signal: controller.signal });
state.error = getStrictResponseError(error, isSubprocess), controller.abort();
} catch {
}
}, iterateOnMessages = async function* ({ anyProcess, channel, ipcEmitter, isSubprocess, shouldAwait, controller, state, reference }) {
try {
for await (let [message] of on3(ipcEmitter, "message", { signal: controller.signal }))
throwIfStrictError(state), yield message;
} catch {
throwIfStrictError(state);
} finally {
controller.abort(), removeReference(channel, reference), isSubprocess || disconnect(anyProcess), shouldAwait && await anyProcess;
}
}, throwIfStrictError = ({ error }) => {
if (error)
throw error;
};
// ../../node_modules/execa/lib/ipc/methods.js
var addIpcMethods = (subprocess, { ipc }) => {
Object.assign(subprocess, getIpcMethods(subprocess, !1, ipc));
}, getIpcExport = () => {
let anyProcess = process8, isSubprocess = !0, ipc = process8.channel !== void 0;
return {
...getIpcMethods(anyProcess, isSubprocess, ipc),
getCancelSignal: getCancelSignal.bind(void 0, {
anyProcess,
channel: anyProcess.channel,
isSubprocess,
ipc
})
};
}, getIpcMethods = (anyProcess, isSubprocess, ipc) => ({
sendMessage: sendMessage.bind(void 0, {
anyProcess,
channel: anyProcess.channel,
isSubprocess,
ipc
}),
getOneMessage: getOneMessage.bind(void 0, {
anyProcess,
channel: anyProcess.channel,
isSubprocess,
ipc
}),
getEachMessage: getEachMessage.bind(void 0, {
anyProcess,
channel: anyProcess.channel,
isSubprocess,
ipc
})
});
// ../../node_modules/execa/lib/return/early-error.js
import { ChildProcess as ChildProcess2 } from "node:child_process";
import {
PassThrough,
Readable,
Writable,
Duplex
} from "node:stream";
var handleEarlyError = ({ error, command, escapedCommand, fileDescriptors, options, startTime, verboseInfo }) => {
cleanupCustomStreams(fileDescriptors);
let subprocess = new ChildProcess2();
createDummyStreams(subprocess, fileDescriptors), Object.assign(subprocess, { readable, writable: writable2, duplex });
let earlyError = makeEarlyError({
error,
command,
escapedCommand,
fileDescriptors,
options,
startTime,
isSync: !1
}), promise = handleDummyPromise(earlyError, verboseInfo, options);
return { subprocess, promise };
}, createDummyStreams = (subprocess, fileDescriptors) => {
let stdin = createDummyStream(), stdout = createDummyStream(), stderr = createDummyStream(), extraStdio = Array.from({ length: fileDescriptors.length - 3 }, createDummyStream), all = createDummyStream(), stdio = [stdin, stdout, stderr, ...extraStdio];
Object.assign(subprocess, {
stdin,
stdout,
stderr,
all,
stdio
});
}, createDummyStream = () => {
let stream = new PassThrough();
return stream.end(), stream;
}, readable = () => new Readable({ read() {
} }), writable2 = () => new Writable({ write() {
} }), duplex = () => new Duplex({ read() {
}, write() {
} }), handleDummyPromise = async (error, verboseInfo, options) => handleResult(error, verboseInfo, options);
// ../../node_modules/execa/lib/stdio/handle-async.js
import { createReadStream, createWriteStream as createWriteStream2 } from "node:fs";
import { Buffer as Buffer4 } from "node:buffer";
import { Readable as Readable2, Writable as Writable2, Duplex as Duplex2 } from "node:stream";
var handleStdioAsync = (options, verboseInfo) => handleStdio(addPropertiesAsync, options, verboseInfo, !1), forbiddenIfAsync = ({ type, optionName }) => {
throw new TypeError(`The \`${optionName}\` option cannot be ${TYPE_TO_MESSAGE[type]}.`);
}, addProperties2 = {
fileNumber: forbiddenIfAsync,
generator: generatorToStream,
asyncGenerator: generatorToStream,
nodeStream: ({ value }) => ({ stream: value }),
webTransform({ value: { transform, writableObjectMode, readableObjectMode } }) {
let objectMode = writableObjectMode || readableObjectMode;
return { stream: Duplex2.fromWeb(transform, { objectMode }) };
},
duplex: ({ value: { transform } }) => ({ stream: transform }),
native() {
}
}, addPropertiesAsync = {
input: {
...addProperties2,
fileUrl: ({ value }) => ({ stream: createReadStream(value) }),
filePath: ({ value: { file } }) => ({ stream: createReadStream(file) }),
webStream: ({ value }) => ({ stream: Readable2.fromWeb(value) }),
iterable: ({ value }) => ({ stream: Readable2.from(value) }),
asyncIterable: ({ value }) => ({ stream: Readable2.from(value) }),
string: ({ value }) => ({ stream: Readable2.from(value) }),
uint8Array: ({ value }) => ({ stream: Readable2.from(Buffer4.from(value)) })
},
output: {
...addProperties2,
fileUrl: ({ value }) => ({ stream: createWriteStream2(value) }),
filePath: ({ value: { file, append } }) => ({ stream: createWriteStream2(file, append ? { flags: "a" } : {}) }),
webStream: ({ value }) => ({ stream: Writable2.fromWeb(value) }),
iterable: forbiddenIfAsync,
asyncIterable: forbiddenIfAsync,
string: forbiddenIfAsync,
uint8Array: forbiddenIfAsync
}
};
// ../../node_modules/@sindresorhus/merge-streams/index.js
import { on as on4, once as once9 } from "node:events";
import { PassThrough as PassThroughStream, getDefaultHighWaterMark as getDefaultHighWaterMark2 } from "node:stream";
import { finished as finished2 } from "node:stream/promises";
function mergeStreams(streams) {
if (!Array.isArray(streams))
throw new TypeError(`Expected an array, got \`${typeof streams}\`.`);
for (let stream of streams)
validateStream(stream);
let objectMode = streams.some(({ readableObjectMode }) => readableObjectMode), highWaterMark = getHighWaterMark(streams, objectMode), passThroughStream = new MergedStream({
objectMode,
writableHighWaterMark: highWaterMark,
readableHighWaterMark: highWaterMark
});
for (let stream of streams)
passThroughStream.add(stream);
return passThroughStream;
}
var getHighWaterMark = (streams, objectMode) => {
if (streams.length === 0)
return getDefaultHighWaterMark2(objectMode);
let highWaterMarks = streams.filter(({ readableObjectMode }) => readableObjectMode === objectMode).map(({ readableHighWaterMark }) => readableHighWaterMark);
return Math.max(...highWaterMarks);
}, MergedStream = class extends PassThroughStream {
#streams = /* @__PURE__ */ new Set([]);
#ended = /* @__PURE__ */ new Set([]);
#aborted = /* @__PURE__ */ new Set([]);
#onFinished;
#unpipeEvent = /* @__PURE__ */ Symbol("unpipe");
#streamPromises = /* @__PURE__ */ new WeakMap();
add(stream) {
if (validateStream(stream), this.#streams.has(stream))
return;
this.#streams.add(stream), this.#onFinished ??= onMergedStreamFinished(this, this.#streams, this.#unpipeEvent);
let streamPromise = endWhenStreamsDone({
passThroughStream: this,
stream,
streams: this.#streams,
ended: this.#ended,
aborted: this.#aborted,
onFinished: this.#onFinished,
unpipeEvent: this.#unpipeEvent
});
this.#streamPromises.set(stream, streamPromise), stream.pipe(this, { end: !1 });
}
async remove(stream) {
if (validateStream(stream), !this.#streams.has(stream))
return !1;
let streamPromise = this.#streamPromises.get(stream);
return streamPromise === void 0 ? !1 : (this.#streamPromises.delete(stream), stream.unpipe(this), await streamPromise, !0);
}
}, onMergedStreamFinished = async (passThroughStream, streams, unpipeEvent) => {
updateMaxListeners(passThroughStream, PASSTHROUGH_LISTENERS_COUNT);
let controller = new AbortController();
try {
await Promise.race([
onMergedStreamEnd(passThroughStream, controller),
onInputStreamsUnpipe(passThroughStream, streams, unpipeEvent, controller)
]);
} finally {
controller.abort(), updateMaxListeners(passThroughStream, -PASSTHROUGH_LISTENERS_COUNT);
}
}, onMergedStreamEnd = async (passThroughStream, { signal }) => {
try {
await finished2(passThroughStream, { signal, cleanup: !0 });
} catch (error) {
throw errorOrAbortStream(passThroughStream, error), error;
}
}, onInputStreamsUnpipe = async (passThroughStream, streams, unpipeEvent, { signal }) => {
for await (let [unpipedStream] of on4(passThroughStream, "unpipe", { signal }))
streams.has(unpipedStream) && unpipedStream.emit(unpipeEvent);
}, validateStream = (stream) => {
if (typeof stream?.pipe != "function")
throw new TypeError(`Expected a readable stream, got: \`${typeof stream}\`.`);
}, endWhenStreamsDone = async ({ passThroughStream, stream, streams, ended, aborted: aborted2, onFinished, unpipeEvent }) => {
updateMaxListeners(passThroughStream, PASSTHROUGH_LISTENERS_PER_STREAM);
let controller = new AbortController();
try {
await Promise.race([
afterMergedStreamFinished(onFinished, stream, controller),
onInputStreamEnd({
passThroughStream,
stream,
streams,
ended,
aborted: aborted2,
controller
}),
onInputStreamUnpipe({
stream,
streams,
ended,
aborted: aborted2,
unpipeEvent,
controller
})
]);
} finally {
controller.abort(), updateMaxListeners(passThroughStream, -PASSTHROUGH_LISTENERS_PER_STREAM);
}
streams.size > 0 && streams.size === ended.size + aborted2.size && (ended.size === 0 && aborted2.size > 0 ? abortStream(passThroughStream) : endStream(passThroughStream));
}, afterMergedStreamFinished = async (onFinished, stream, { signal }) => {
try {
await onFinished, signal.aborted || abortStream(stream);
} catch (error) {
signal.aborted || errorOrAbortStream(stream, error);
}
}, onInputStreamEnd = async ({ passThroughStream, stream, streams, ended, aborted: aborted2, controller: { signal } }) => {
try {
await finished2(stream, {
signal,
cleanup: !0,
readable: !0,
writable: !1
}), streams.has(stream) && ended.add(stream);
} catch (error) {
if (signal.aborted || !streams.has(stream))
return;
isAbortError(error) ? aborted2.add(stream) : errorStream(passThroughStream, error);
}
}, onInputStreamUnpipe = async ({ stream, streams, ended, aborted: aborted2, unpipeEvent, controller: { signal } }) => {
if (await once9(stream, unpipeEvent, { signal }), !stream.readable)
return once9(signal, "abort", { signal });
streams.delete(stream), ended.delete(stream), aborted2.delete(stream);
}, endStream = (stream) => {
stream.writable && stream.end();
}, errorOrAbortStream = (stream, error) => {
isAbortError(error) ? abortStream(stream) : errorStream(stream, error);
}, isAbortError = (error) => error?.code === "ERR_STREAM_PREMATURE_CLOSE", abortStream = (stream) => {
(stream.readable || stream.writable) && stream.destroy();
}, errorStream = (stream, error) => {
stream.destroyed || (stream.once("error", noop2), stream.destroy(error));
}, noop2 = () => {
}, updateMaxListeners = (passThroughStream, increment2) => {
let maxListeners = passThroughStream.getMaxListeners();
maxListeners !== 0 && maxListeners !== Number.POSITIVE_INFINITY && passThroughStream.setMaxListeners(maxListeners + increment2);
}, PASSTHROUGH_LISTENERS_COUNT = 2, PASSTHROUGH_LISTENERS_PER_STREAM = 1;
// ../../node_modules/execa/lib/io/pipeline.js
import { finished as finished3 } from "node:stream/promises";
var pipeStreams = (source, destination) => {
source.pipe(destination), onSourceFinish(source, destination), onDestinationFinish(source, destination);
}, onSourceFinish = async (source, destination) => {
if (!(isStandardStream(source) || isStandardStream(destination))) {
try {
await finished3(source, { cleanup: !0, readable: !0, writable: !1 });
} catch {
}
endDestinationStream(destination);
}
}, endDestinationStream = (destination) => {
destination.writable && destination.end();
}, onDestinationFinish = async (source, destination) => {
if (!(isStandardStream(source) || isStandardStream(destination))) {
try {
await finished3(destination, { cleanup: !0, readable: !1, writable: !0 });
} catch {
}
abortSourceStream(source);
}
}, abortSourceStream = (source) => {
source.readable && source.destroy();
};
// ../../node_modules/execa/lib/io/output-async.js
var pipeOutputAsync = (subprocess, fileDescriptors, controller) => {
let pipeGroups = /* @__PURE__ */ new Map();
for (let [fdNumber, { stdioItems, direction }] of Object.entries(fileDescriptors)) {
for (let { stream } of stdioItems.filter(({ type }) => TRANSFORM_TYPES.has(type)))
pipeTransform(subprocess, stream, direction, fdNumber);
for (let { stream } of stdioItems.filter(({ type }) => !TRANSFORM_TYPES.has(type)))
pipeStdioItem({
subprocess,
stream,
direction,
fdNumber,
pipeGroups,
controller
});
}
for (let [outputStream, inputStreams] of pipeGroups.entries()) {
let inputStream = inputStreams.length === 1 ? inputStreams[0] : mergeStreams(inputStreams);
pipeStreams(inputStream, outputStream);
}
}, pipeTransform = (subprocess, stream, direction, fdNumber) => {
direction === "output" ? pipeStreams(subprocess.stdio[fdNumber], stream) : pipeStreams(stream, subprocess.stdio[fdNumber]);
let streamProperty = SUBPROCESS_STREAM_PROPERTIES[fdNumber];
streamProperty !== void 0 && (subprocess[streamProperty] = stream), subprocess.stdio[fdNumber] = stream;
}, SUBPROCESS_STREAM_PROPERTIES = ["stdin", "stdout", "stderr"], pipeStdioItem = ({ subprocess, stream, direction, fdNumber, pipeGroups, controller }) => {
if (stream === void 0)
return;
setStandardStreamMaxListeners(stream, controller);
let [inputStream, outputStream] = direction === "output" ? [stream, subprocess.stdio[fdNumber]] : [subprocess.stdio[fdNumber], stream], outputStreams = pipeGroups.get(inputStream) ?? [];
pipeGroups.set(inputStream, [...outputStreams, outputStream]);
}, setStandardStreamMaxListeners = (stream, { signal }) => {
isStandardStream(stream) && incrementMaxListeners(stream, MAX_LISTENERS_INCREMENT, signal);
}, MAX_LISTENERS_INCREMENT = 2;
// ../../node_modules/execa/lib/terminate/cleanup.js
import { addAbortListener as addAbortListener2 } from "node:events";
// ../../node_modules/execa/node_modules/signal-exit/dist/mjs/signals.js
var signals = [];
signals.push("SIGHUP", "SIGINT", "SIGTERM");
process.platform !== "win32" && signals.push(
"SIGALRM",
"SIGABRT",
"SIGVTALRM",
"SIGXCPU",
"SIGXFSZ",
"SIGUSR2",
"SIGTRAP",
"SIGSYS",
"SIGQUIT",
"SIGIOT"
// should detect profiler and enable/disable accordingly.
// see #21
// 'SIGPROF'
);
process.platform === "linux" && signals.push("SIGIO", "SIGPOLL", "SIGPWR", "SIGSTKFLT");
// ../../node_modules/execa/node_modules/signal-exit/dist/mjs/index.js
var processOk = (process11) => !!process11 && typeof process11 == "object" && typeof process11.removeListener == "function" && typeof process11.emit == "function" && typeof process11.reallyExit == "function" && typeof process11.listeners == "function" && typeof process11.kill == "function" && typeof process11.pid == "number" && typeof process11.on == "function", kExitEmitter = /* @__PURE__ */ Symbol.for("signal-exit emitter"), global2 = globalThis, ObjectDefineProperty = Object.defineProperty.bind(Object), Emitter = class {
emitted = {
afterExit: !1,
exit: !1
};
listeners = {
afterExit: [],
exit: []
};
count = 0;
id = Math.random();
constructor() {
if (global2[kExitEmitter])
return global2[kExitEmitter];
ObjectDefineProperty(global2, kExitEmitter, {
value: this,
writable: !1,
enumerable: !1,
configurable: !1
});
}
on(ev, fn) {
this.listeners[ev].push(fn);
}
removeListener(ev, fn) {
let list = this.listeners[ev], i2 = list.indexOf(fn);
i2 !== -1 && (i2 === 0 && list.length === 1 ? list.length = 0 : list.splice(i2, 1));
}
emit(ev, code, signal) {
if (this.emitted[ev])
return !1;
this.emitted[ev] = !0;
let ret = !1;
for (let fn of this.listeners[ev])
ret = fn(code, signal) === !0 || ret;
return ev === "exit" && (ret = this.emit("afterExit", code, signal) || ret), ret;
}
}, SignalExitBase = class {
}, signalExitWrap = (handler) => ({
onExit(cb, opts) {
return handler.onExit(cb, opts);
},
load() {
return handler.load();
},
unload() {
return handler.unload();
}
}), SignalExitFallback = class extends SignalExitBase {
onExit() {
return () => {
};
}
load() {
}
unload() {
}
}, SignalExit = class extends SignalExitBase {
// "SIGHUP" throws an `ENOSYS` error on Windows,
// so use a supported signal instead
/* c8 ignore start */
#hupSig = process9.platform === "win32" ? "SIGINT" : "SIGHUP";
/* c8 ignore stop */
#emitter = new Emitter();
#process;
#originalProcessEmit;
#originalProcessReallyExit;
#sigListeners = {};
#loaded = !1;
constructor(process11) {
super(), this.#process = process11, this.#sigListeners = {};
for (let sig of signals)
this.#sigListeners[sig] = () => {
let listeners = this.#process.listeners(sig), { count: count2 } = this.#emitter, p = process11;
if (typeof p.__signal_exit_emitter__ == "object" && typeof p.__signal_exit_emitter__.count == "number" && (count2 += p.__signal_exit_emitter__.count), listeners.length === count2) {
this.unload();
let ret = this.#emitter.emit("exit", null, sig), s = sig === "SIGHUP" ? this.#hupSig : sig;
ret || process11.kill(process11.pid, s);
}
};
this.#originalProcessReallyExit = process11.reallyExit, this.#originalProcessEmit = process11.emit;
}
onExit(cb, opts) {
if (!processOk(this.#process))
return () => {
};
this.#loaded === !1 && this.load();
let ev = opts?.alwaysLast ? "afterExit" : "exit";
return this.#emitter.on(ev, cb), () => {
this.#emitter.removeListener(ev, cb), this.#emitter.listeners.exit.length === 0 && this.#emitter.listeners.afterExit.length === 0 && this.unload();
};
}
load() {
if (!this.#loaded) {
this.#loaded = !0, this.#emitter.count += 1;
for (let sig of signals)
try {
let fn = this.#sigListeners[sig];
fn && this.#process.on(sig, fn);
} catch {
}
this.#process.emit = (ev, ...a2) => this.#processEmit(ev, ...a2), this.#process.reallyExit = (code) => this.#processReallyExit(code);
}
}
unload() {
this.#loaded && (this.#loaded = !1, signals.forEach((sig) => {
let listener = this.#sigListeners[sig];
if (!listener)
throw new Error("Listener not defined for signal: " + sig);
try {
this.#process.removeListener(sig, listener);
} catch {
}
}), this.#process.emit = this.#originalProcessEmit, this.#process.reallyExit = this.#originalProcessReallyExit, this.#emitter.count -= 1);
}
#processReallyExit(code) {
return processOk(this.#process) ? (this.#process.exitCode = code || 0, this.#emitter.emit("exit", this.#process.exitCode, null), this.#originalProcessReallyExit.call(this.#process, this.#process.exitCode)) : 0;
}
#processEmit(ev, ...args) {
let og = this.#originalProcessEmit;
if (ev === "exit" && processOk(this.#process)) {
typeof args[0] == "number" && (this.#process.exitCode = args[0]);
let ret = og.call(this.#process, ev, ...args);
return this.#emitter.emit("exit", this.#process.exitCode, null), ret;
} else
return og.call(this.#process, ev, ...args);
}
}, process9 = globalThis.process, {
/**
* Called when the process is exiting, whether via signal, explicit
* exit, or running out of stuff to do.
*
* If the global process object is not suitable for instrumentation,
* then this will be a no-op.
*
* Returns a function that may be used to unload signal-exit.
*/
onExit,
/**
* Load the listeners. Likely you never need to call this, unless
* doing a rather deep integration with signal-exit functionality.
* Mostly exposed for the benefit of testing.
*
* @internal
*/
load,
/**
* Unload the listeners. Likely you never need to call this, unless
* doing a rather deep integration with signal-exit functionality.
* Mostly exposed for the benefit of testing.
*
* @internal
*/
unload
} = signalExitWrap(processOk(process9) ? new SignalExit(process9) : new SignalExitFallback());
// ../../node_modules/execa/lib/terminate/cleanup.js
var cleanupOnExit = (subprocess, { cleanup, detached }, { signal }) => {
if (!cleanup || detached)
return;
let removeExitHandler = onExit(() => {
subprocess.kill();
});
addAbortListener2(signal, () => {
removeExitHandler();
});
};
// ../../node_modules/execa/lib/pipe/pipe-arguments.js
var normalizePipeArguments = ({ source, sourcePromise, boundOptions, createNested }, ...pipeArguments) => {
let startTime = getStartTime(), {
destination,
destinationStream,
destinationError,
from: from2,
unpipeSignal
} = getDestinationStream(boundOptions, createNested, pipeArguments), { sourceStream, sourceError } = getSourceStream(source, from2), { options: sourceOptions, fileDescriptors } = SUBPROCESS_OPTIONS.get(source);
return {
sourcePromise,
sourceStream,
sourceOptions,
sourceError,
destination,
destinationStream,
destinationError,
unpipeSignal,
fileDescriptors,
startTime
};
}, getDestinationStream = (boundOptions, createNested, pipeArguments) => {
try {
let {
destination,
pipeOptions: { from: from2, to, unpipeSignal } = {}
} = getDestination(boundOptions, createNested, ...pipeArguments), destinationStream = getToStream(destination, to);
return {
destination,
destinationStream,
from: from2,
unpipeSignal
};
} catch (error) {
return { destinationError: error };
}
}, getDestination = (boundOptions, createNested, firstArgument, ...pipeArguments) => {
if (Array.isArray(firstArgument))
return { destination: createNested(mapDestinationArguments, boundOptions)(firstArgument, ...pipeArguments), pipeOptions: boundOptions };
if (typeof firstArgument == "string" || firstArgument instanceof URL || isDenoExecPath(firstArgument)) {
if (Object.keys(boundOptions).length > 0)
throw new TypeError('Please use .pipe("file", ..., options) or .pipe(execa("file", ..., options)) instead of .pipe(options)("file", ...).');
let [rawFile, rawArguments, rawOptions] = normalizeParameters(firstArgument, ...pipeArguments);
return { destination: createNested(mapDestinationArguments)(rawFile, rawArguments, rawOptions), pipeOptions: rawOptions };
}
if (SUBPROCESS_OPTIONS.has(firstArgument)) {
if (Object.keys(boundOptions).length > 0)
throw new TypeError("Please use .pipe(options)`command` or .pipe($(options)`command`) instead of .pipe(options)($`command`).");
return { destination: firstArgument, pipeOptions: pipeArguments[0] };
}
throw new TypeError(`The first argument must be a template string, an options object, or an Execa subprocess: ${firstArgument}`);
}, mapDestinationArguments = ({ options }) => ({ options: { ...options, stdin: "pipe", piped: !0 } }), getSourceStream = (source, from2) => {
try {
return { sourceStream: getFromStream(source, from2) };
} catch (error) {
return { sourceError: error };
}
};
// ../../node_modules/execa/lib/pipe/throw.js
var handlePipeArgumentsError = ({
sourceStream,
sourceError,
destinationStream,
destinationError,
fileDescriptors,
sourceOptions,
startTime
}) => {
let error = getPipeArgumentsError({
sourceStream,
sourceError,
destinationStream,
destinationError
});
if (error !== void 0)
throw createNonCommandError({
error,
fileDescriptors,
sourceOptions,
startTime
});
}, getPipeArgumentsError = ({ sourceStream, sourceError, destinationStream, destinationError }) => {
if (sourceError !== void 0 && destinationError !== void 0)
return destinationError;
if (destinationError !== void 0)
return abortSourceStream(sourceStream), destinationError;
if (sourceError !== void 0)
return endDestinationStream(destinationStream), sourceError;
}, createNonCommandError = ({ error, fileDescriptors, sourceOptions, startTime }) => makeEarlyError({
error,
command: PIPE_COMMAND_MESSAGE,
escapedCommand: PIPE_COMMAND_MESSAGE,
fileDescriptors,
options: sourceOptions,
startTime,
isSync: !1
}), PIPE_COMMAND_MESSAGE = "source.pipe(destination)";
// ../../node_modules/execa/lib/pipe/sequence.js
var waitForBothSubprocesses = async (subprocessPromises) => {
let [
{ status: sourceStatus, reason: sourceReason, value: sourceResult = sourceReason },
{ status: destinationStatus, reason: destinationReason, value: destinationResult = destinationReason }
] = await subprocessPromises;
if (destinationResult.pipedFrom.includes(sourceResult) || destinationResult.pipedFrom.push(sourceResult), destinationStatus === "rejected")
throw destinationResult;
if (sourceStatus === "rejected")
throw sourceResult;
return destinationResult;
};
// ../../node_modules/execa/lib/pipe/streaming.js
import { finished as finished4 } from "node:stream/promises";
var pipeSubprocessStream = (sourceStream, destinationStream, maxListenersController) => {
let mergedStream = MERGED_STREAMS.has(destinationStream) ? pipeMoreSubprocessStream(sourceStream, destinationStream) : pipeFirstSubprocessStream(sourceStream, destinationStream);
return incrementMaxListeners(sourceStream, SOURCE_LISTENERS_PER_PIPE, maxListenersController.signal), incrementMaxListeners(destinationStream, DESTINATION_LISTENERS_PER_PIPE, maxListenersController.signal), cleanupMergedStreamsMap(destinationStream), mergedStream;
}, pipeFirstSubprocessStream = (sourceStream, destinationStream) => {
let mergedStream = mergeStreams([sourceStream]);
return pipeStreams(mergedStream, destinationStream), MERGED_STREAMS.set(destinationStream, mergedStream), mergedStream;
}, pipeMoreSubprocessStream = (sourceStream, destinationStream) => {
let mergedStream = MERGED_STREAMS.get(destinationStream);
return mergedStream.add(sourceStream), mergedStream;
}, cleanupMergedStreamsMap = async (destinationStream) => {
try {
await finished4(destinationStream, { cleanup: !0, readable: !1, writable: !0 });
} catch {
}
MERGED_STREAMS.delete(destinationStream);
}, MERGED_STREAMS = /* @__PURE__ */ new WeakMap(), SOURCE_LISTENERS_PER_PIPE = 2, DESTINATION_LISTENERS_PER_PIPE = 1;
// ../../node_modules/execa/lib/pipe/abort.js
import { aborted } from "node:util";
var unpipeOnAbort = (unpipeSignal, unpipeContext) => unpipeSignal === void 0 ? [] : [unpipeOnSignalAbort(unpipeSignal, unpipeContext)], unpipeOnSignalAbort = async (unpipeSignal, { sourceStream, mergedStream, fileDescriptors, sourceOptions, startTime }) => {
await aborted(unpipeSignal, sourceStream), await mergedStream.remove(sourceStream);
let error = new Error("Pipe canceled by `unpipeSignal` option.");
throw createNonCommandError({
error,
fileDescriptors,
sourceOptions,
startTime
});
};
// ../../node_modules/execa/lib/pipe/setup.js
var pipeToSubprocess = (sourceInfo, ...pipeArguments) => {
if (isPlainObject(pipeArguments[0]))
return pipeToSubprocess.bind(void 0, {
...sourceInfo,
boundOptions: { ...sourceInfo.boundOptions, ...pipeArguments[0] }
});
let { destination, ...normalizedInfo } = normalizePipeArguments(sourceInfo, ...pipeArguments), promise = handlePipePromise({ ...normalizedInfo, destination });
return promise.pipe = pipeToSubprocess.bind(void 0, {
...sourceInfo,
source: destination,
sourcePromise: promise,
boundOptions: {}
}), promise;
}, handlePipePromise = async ({
sourcePromise,
sourceStream,
sourceOptions,
sourceError,
destination,
destinationStream,
destinationError,
unpipeSignal,
fileDescriptors,
startTime
}) => {
let subprocessPromises = getSubprocessPromises(sourcePromise, destination);
handlePipeArgumentsError({
sourceStream,
sourceError,
destinationStream,
destinationError,
fileDescriptors,
sourceOptions,
startTime
});
let maxListenersController = new AbortController();
try {
let mergedStream = pipeSubprocessStream(sourceStream, destinationStream, maxListenersController);
return await Promise.race([
waitForBothSubprocesses(subprocessPromises),
...unpipeOnAbort(unpipeSignal, {
sourceStream,
mergedStream,
sourceOptions,
fileDescriptors,
startTime
})
]);
} finally {
maxListenersController.abort();
}
}, getSubprocessPromises = (sourcePromise, destination) => Promise.allSettled([sourcePromise, destination]);
// ../../node_modules/execa/lib/io/contents.js
import { setImmediate as setImmediate2 } from "node:timers/promises";
// ../../node_modules/execa/lib/io/iterate.js
import { on as on5 } from "node:events";
import { getDefaultHighWaterMark as getDefaultHighWaterMark3 } from "node:stream";
var iterateOnSubprocessStream = ({ subprocessStdout, subprocess, binary, shouldEncode, encoding, preserveNewlines }) => {
let controller = new AbortController();
return stopReadingOnExit(subprocess, controller), iterateOnStream({
stream: subprocessStdout,
controller,
binary,
shouldEncode: !subprocessStdout.readableObjectMode && shouldEncode,
encoding,
shouldSplit: !subprocessStdout.readableObjectMode,
preserveNewlines
});
}, stopReadingOnExit = async (subprocess, controller) => {
try {
await subprocess;
} catch {
} finally {
controller.abort();
}
}, iterateForResult = ({ stream, onStreamEnd, lines, encoding, stripFinalNewline: stripFinalNewline2, allMixed }) => {
let controller = new AbortController();
stopReadingOnStreamEnd(onStreamEnd, controller, stream);
let objectMode = stream.readableObjectMode && !allMixed;
return iterateOnStream({
stream,
controller,
binary: encoding === "buffer",
shouldEncode: !objectMode,
encoding,
shouldSplit: !objectMode && lines,
preserveNewlines: !stripFinalNewline2
});
}, stopReadingOnStreamEnd = async (onStreamEnd, controller, stream) => {
try {
await onStreamEnd;
} catch {
stream.destroy();
} finally {
controller.abort();
}
}, iterateOnStream = ({ stream, controller, binary, shouldEncode, encoding, shouldSplit, preserveNewlines }) => {
let onStdoutChunk = on5(stream, "data", {
signal: controller.signal,
highWaterMark: HIGH_WATER_MARK,
// Backward compatibility with older name for this option
// See https://github.com/nodejs/node/pull/52080#discussion_r1525227861
// @todo Remove after removing support for Node 21
highWatermark: HIGH_WATER_MARK
});
return iterateOnData({
onStdoutChunk,
controller,
binary,
shouldEncode,
encoding,
shouldSplit,
preserveNewlines
});
}, DEFAULT_OBJECT_HIGH_WATER_MARK = getDefaultHighWaterMark3(!0), HIGH_WATER_MARK = DEFAULT_OBJECT_HIGH_WATER_MARK, iterateOnData = async function* ({ onStdoutChunk, controller, binary, shouldEncode, encoding, shouldSplit, preserveNewlines }) {
let generators = getGenerators({
binary,
shouldEncode,
encoding,
shouldSplit,
preserveNewlines
});
try {
for await (let [chunk] of onStdoutChunk)
yield* transformChunkSync(chunk, generators, 0);
} catch (error) {
if (!controller.signal.aborted)
throw error;
} finally {
yield* finalChunksSync(generators);
}
}, getGenerators = ({ binary, shouldEncode, encoding, shouldSplit, preserveNewlines }) => [
getEncodingTransformGenerator(binary, encoding, !shouldEncode),
getSplitLinesGenerator(binary, preserveNewlines, !shouldSplit, {})
].filter(Boolean);
// ../../node_modules/execa/lib/io/contents.js
var getStreamOutput = async ({ stream, onStreamEnd, fdNumber, encoding, buffer, maxBuffer, lines, allMixed, stripFinalNewline: stripFinalNewline2, verboseInfo, streamInfo }) => {
let logPromise = logOutputAsync({
stream,
onStreamEnd,
fdNumber,
encoding,
allMixed,
verboseInfo,
streamInfo
});
if (!buffer) {
await Promise.all([resumeStream(stream), logPromise]);
return;
}
let stripFinalNewlineValue = getStripFinalNewline(stripFinalNewline2, fdNumber), iterable = iterateForResult({
stream,
onStreamEnd,
lines,
encoding,
stripFinalNewline: stripFinalNewlineValue,
allMixed
}), [output] = await Promise.all([
getStreamContents2({
stream,
iterable,
fdNumber,
encoding,
maxBuffer,
lines
}),
logPromise
]);
return output;
}, logOutputAsync = async ({ stream, onStreamEnd, fdNumber, encoding, allMixed, verboseInfo, streamInfo: { fileDescriptors } }) => {
if (!shouldLogOutput({
stdioItems: fileDescriptors[fdNumber]?.stdioItems,
encoding,
verboseInfo,
fdNumber
}))
return;
let linesIterable = iterateForResult({
stream,
onStreamEnd,
lines: !0,
encoding,
stripFinalNewline: !0,
allMixed
});
await logLines(linesIterable, stream, fdNumber, verboseInfo);
}, resumeStream = async (stream) => {
await setImmediate2(), stream.readableFlowing === null && stream.resume();
}, getStreamContents2 = async ({ stream, stream: { readableObjectMode }, iterable, fdNumber, encoding, maxBuffer, lines }) => {
try {
return readableObjectMode || lines ? await getStreamAsArray(iterable, { maxBuffer }) : encoding === "buffer" ? new Uint8Array(await getStreamAsArrayBuffer(iterable, { maxBuffer })) : await getStreamAsString(iterable, { maxBuffer });
} catch (error) {
return handleBufferedData(handleMaxBuffer({
error,
stream,
readableObjectMode,
lines,
encoding,
fdNumber
}));
}
}, getBufferedData = async (streamPromise) => {
try {
return await streamPromise;
} catch (error) {
return handleBufferedData(error);
}
}, handleBufferedData = ({ bufferedData }) => isArrayBuffer(bufferedData) ? new Uint8Array(bufferedData) : bufferedData;
// ../../node_modules/execa/lib/resolve/wait-stream.js
import { finished as finished5 } from "node:stream/promises";
var waitForStream = async (stream, fdNumber, streamInfo, { isSameDirection, stopOnExit = !1 } = {}) => {
let state = handleStdinDestroy(stream, streamInfo), abortController = new AbortController();
try {
await Promise.race([
...stopOnExit ? [streamInfo.exitPromise] : [],
finished5(stream, { cleanup: !0, signal: abortController.signal })
]);
} catch (error) {
state.stdinCleanedUp || handleStreamError(error, fdNumber, streamInfo, isSameDirection);
} finally {
abortController.abort();
}
}, handleStdinDestroy = (stream, { originalStreams: [originalStdin], subprocess }) => {
let state = { stdinCleanedUp: !1 };
return stream === originalStdin && spyOnStdinDestroy(stream, subprocess, state), state;
}, spyOnStdinDestroy = (subprocessStdin, subprocess, state) => {
let { _destroy } = subprocessStdin;
subprocessStdin._destroy = (...destroyArguments) => {
setStdinCleanedUp(subprocess, state), _destroy.call(subprocessStdin, ...destroyArguments);
};
}, setStdinCleanedUp = ({ exitCode, signalCode }, state) => {
(exitCode !== null || signalCode !== null) && (state.stdinCleanedUp = !0);
}, handleStreamError = (error, fdNumber, streamInfo, isSameDirection) => {
if (!shouldIgnoreStreamError(error, fdNumber, streamInfo, isSameDirection))
throw error;
}, shouldIgnoreStreamError = (error, fdNumber, streamInfo, isSameDirection = !0) => streamInfo.propagating ? isStreamEpipe(error) || isStreamAbort(error) : (streamInfo.propagating = !0, isInputFileDescriptor(streamInfo, fdNumber) === isSameDirection ? isStreamEpipe(error) : isStreamAbort(error)), isInputFileDescriptor = ({ fileDescriptors }, fdNumber) => fdNumber !== "all" && fileDescriptors[fdNumber].direction === "input", isStreamAbort = (error) => error?.code === "ERR_STREAM_PREMATURE_CLOSE", isStreamEpipe = (error) => error?.code === "EPIPE";
// ../../node_modules/execa/lib/resolve/stdio.js
var waitForStdioStreams = ({ subprocess, encoding, buffer, maxBuffer, lines, stripFinalNewline: stripFinalNewline2, verboseInfo, streamInfo }) => subprocess.stdio.map((stream, fdNumber) => waitForSubprocessStream({
stream,
fdNumber,
encoding,
buffer: buffer[fdNumber],
maxBuffer: maxBuffer[fdNumber],
lines: lines[fdNumber],
allMixed: !1,
stripFinalNewline: stripFinalNewline2,
verboseInfo,
streamInfo
})), waitForSubprocessStream = async ({ stream, fdNumber, encoding, buffer, maxBuffer, lines, allMixed, stripFinalNewline: stripFinalNewline2, verboseInfo, streamInfo }) => {
if (!stream)
return;
let onStreamEnd = waitForStream(stream, fdNumber, streamInfo);
if (isInputFileDescriptor(streamInfo, fdNumber)) {
await onStreamEnd;
return;
}
let [output] = await Promise.all([
getStreamOutput({
stream,
onStreamEnd,
fdNumber,
encoding,
buffer,
maxBuffer,
lines,
allMixed,
stripFinalNewline: stripFinalNewline2,
verboseInfo,
streamInfo
}),
onStreamEnd
]);
return output;
};
// ../../node_modules/execa/lib/resolve/all-async.js
var makeAllStream = ({ stdout, stderr }, { all }) => all && (stdout || stderr) ? mergeStreams([stdout, stderr].filter(Boolean)) : void 0, waitForAllStream = ({ subprocess, encoding, buffer, maxBuffer, lines, stripFinalNewline: stripFinalNewline2, verboseInfo, streamInfo }) => waitForSubprocessStream({
...getAllStream(subprocess, buffer),
fdNumber: "all",
encoding,
maxBuffer: maxBuffer[1] + maxBuffer[2],
lines: lines[1] || lines[2],
allMixed: getAllMixed(subprocess),
stripFinalNewline: stripFinalNewline2,
verboseInfo,
streamInfo
}), getAllStream = ({ stdout, stderr, all }, [, bufferStdout, bufferStderr]) => {
let buffer = bufferStdout || bufferStderr;
return buffer ? bufferStdout ? bufferStderr ? { stream: all, buffer } : { stream: stdout, buffer } : { stream: stderr, buffer } : { stream: all, buffer };
}, getAllMixed = ({ all, stdout, stderr }) => all && stdout && stderr && stdout.readableObjectMode !== stderr.readableObjectMode;
// ../../node_modules/execa/lib/resolve/wait-subprocess.js
import { once as once10 } from "node:events";
// ../../node_modules/execa/lib/verbose/ipc.js
var shouldLogIpc = (verboseInfo) => isFullVerbose(verboseInfo, "ipc"), logIpcOutput = (message, verboseInfo) => {
let verboseMessage = serializeVerboseMessage(message);
verboseLog({
type: "ipc",
verboseMessage,
fdNumber: "ipc",
verboseInfo
});
};
// ../../node_modules/execa/lib/ipc/buffer-messages.js
var waitForIpcOutput = async ({
subprocess,
buffer: bufferArray,
maxBuffer: maxBufferArray,
ipc,
ipcOutput,
verboseInfo
}) => {
if (!ipc)
return ipcOutput;
let isVerbose2 = shouldLogIpc(verboseInfo), buffer = getFdSpecificValue(bufferArray, "ipc"), maxBuffer = getFdSpecificValue(maxBufferArray, "ipc");
for await (let message of loopOnMessages({
anyProcess: subprocess,
channel: subprocess.channel,
isSubprocess: !1,
ipc,
shouldAwait: !1,
reference: !0
}))
buffer && (checkIpcMaxBuffer(subprocess, ipcOutput, maxBuffer), ipcOutput.push(message)), isVerbose2 && logIpcOutput(message, verboseInfo);
return ipcOutput;
}, getBufferedIpcOutput = async (ipcOutputPromise, ipcOutput) => (await Promise.allSettled([ipcOutputPromise]), ipcOutput);
// ../../node_modules/execa/lib/resolve/wait-subprocess.js
var waitForSubprocessResult = async ({
subprocess,
options: {
encoding,
buffer,
maxBuffer,
lines,
timeoutDuration: timeout,
cancelSignal,
gracefulCancel,
forceKillAfterDelay,
stripFinalNewline: stripFinalNewline2,
ipc,
ipcInput
},
context,
verboseInfo,
fileDescriptors,
originalStreams,
onInternalError,
controller
}) => {
let exitPromise = waitForExit(subprocess, context), streamInfo = {
originalStreams,
fileDescriptors,
subprocess,
exitPromise,
propagating: !1
}, stdioPromises = waitForStdioStreams({
subprocess,
encoding,
buffer,
maxBuffer,
lines,
stripFinalNewline: stripFinalNewline2,
verboseInfo,
streamInfo
}), allPromise = waitForAllStream({
subprocess,
encoding,
buffer,
maxBuffer,
lines,
stripFinalNewline: stripFinalNewline2,
verboseInfo,
streamInfo
}), ipcOutput = [], ipcOutputPromise = waitForIpcOutput({
subprocess,
buffer,
maxBuffer,
ipc,
ipcOutput,
verboseInfo
}), originalPromises = waitForOriginalStreams(originalStreams, subprocess, streamInfo), customStreamsEndPromises = waitForCustomStreamsEnd(fileDescriptors, streamInfo);
try {
return await Promise.race([
Promise.all([
{},
waitForSuccessfulExit(exitPromise),
Promise.all(stdioPromises),
allPromise,
ipcOutputPromise,
sendIpcInput(subprocess, ipcInput),
...originalPromises,
...customStreamsEndPromises
]),
onInternalError,
throwOnSubprocessError(subprocess, controller),
...throwOnTimeout(subprocess, timeout, context, controller),
...throwOnCancel({
subprocess,
cancelSignal,
gracefulCancel,
context,
controller
}),
...throwOnGracefulCancel({
subprocess,
cancelSignal,
gracefulCancel,
forceKillAfterDelay,
context,
controller
})
]);
} catch (error) {
return context.terminationReason ??= "other", Promise.all([
{ error },
exitPromise,
Promise.all(stdioPromises.map((stdioPromise) => getBufferedData(stdioPromise))),
getBufferedData(allPromise),
getBufferedIpcOutput(ipcOutputPromise, ipcOutput),
Promise.allSettled(originalPromises),
Promise.allSettled(customStreamsEndPromises)
]);
}
}, waitForOriginalStreams = (originalStreams, subprocess, streamInfo) => originalStreams.map((stream, fdNumber) => stream === subprocess.stdio[fdNumber] ? void 0 : waitForStream(stream, fdNumber, streamInfo)), waitForCustomStreamsEnd = (fileDescriptors, streamInfo) => fileDescriptors.flatMap(({ stdioItems }, fdNumber) => stdioItems.filter(({ value, stream = value }) => isStream2(stream, { checkOpen: !1 }) && !isStandardStream(stream)).map(({ type, value, stream = value }) => waitForStream(stream, fdNumber, streamInfo, {
isSameDirection: TRANSFORM_TYPES.has(type),
stopOnExit: type === "native"
}))), throwOnSubprocessError = async (subprocess, { signal }) => {
let [error] = await once10(subprocess, "error", { signal });
throw error;
};
// ../../node_modules/execa/lib/convert/concurrent.js
var initializeConcurrentStreams = () => ({
readableDestroy: /* @__PURE__ */ new WeakMap(),
writableFinal: /* @__PURE__ */ new WeakMap(),
writableDestroy: /* @__PURE__ */ new WeakMap()
}), addConcurrentStream = (concurrentStreams, stream, waitName) => {
let weakMap = concurrentStreams[waitName];
weakMap.has(stream) || weakMap.set(stream, []);
let promises = weakMap.get(stream), promise = createDeferred();
return promises.push(promise), { resolve: promise.resolve.bind(promise), promises };
}, waitForConcurrentStreams = async ({ resolve: resolve9, promises }, subprocess) => {
resolve9();
let [isSubprocessExit] = await Promise.race([
Promise.allSettled([!0, subprocess]),
Promise.all([!1, ...promises])
]);
return !isSubprocessExit;
};
// ../../node_modules/execa/lib/convert/readable.js
import { Readable as Readable3 } from "node:stream";
import { callbackify as callbackify2 } from "node:util";
// ../../node_modules/execa/lib/convert/shared.js
import { finished as finished6 } from "node:stream/promises";
var safeWaitForSubprocessStdin = async (subprocessStdin) => {
if (subprocessStdin !== void 0)
try {
await waitForSubprocessStdin(subprocessStdin);
} catch {
}
}, safeWaitForSubprocessStdout = async (subprocessStdout) => {
if (subprocessStdout !== void 0)
try {
await waitForSubprocessStdout(subprocessStdout);
} catch {
}
}, waitForSubprocessStdin = async (subprocessStdin) => {
await finished6(subprocessStdin, { cleanup: !0, readable: !1, writable: !0 });
}, waitForSubprocessStdout = async (subprocessStdout) => {
await finished6(subprocessStdout, { cleanup: !0, readable: !0, writable: !1 });
}, waitForSubprocess = async (subprocess, error) => {
if (await subprocess, error)
throw error;
}, destroyOtherStream = (stream, isOpen, error) => {
error && !isStreamAbort(error) ? stream.destroy(error) : isOpen && stream.destroy();
};
// ../../node_modules/execa/lib/convert/readable.js
var createReadable = ({ subprocess, concurrentStreams, encoding }, { from: from2, binary: binaryOption = !0, preserveNewlines = !0 } = {}) => {
let binary = binaryOption || BINARY_ENCODINGS.has(encoding), { subprocessStdout, waitReadableDestroy } = getSubprocessStdout(subprocess, from2, concurrentStreams), { readableEncoding, readableObjectMode, readableHighWaterMark } = getReadableOptions(subprocessStdout, binary), { read, onStdoutDataDone } = getReadableMethods({
subprocessStdout,
subprocess,
binary,
encoding,
preserveNewlines
}), readable2 = new Readable3({
read,
destroy: callbackify2(onReadableDestroy.bind(void 0, { subprocessStdout, subprocess, waitReadableDestroy })),
highWaterMark: readableHighWaterMark,
objectMode: readableObjectMode,
encoding: readableEncoding
});
return onStdoutFinished({
subprocessStdout,
onStdoutDataDone,
readable: readable2,
subprocess
}), readable2;
}, getSubprocessStdout = (subprocess, from2, concurrentStreams) => {
let subprocessStdout = getFromStream(subprocess, from2), waitReadableDestroy = addConcurrentStream(concurrentStreams, subprocessStdout, "readableDestroy");
return { subprocessStdout, waitReadableDestroy };
}, getReadableOptions = ({ readableEncoding, readableObjectMode, readableHighWaterMark }, binary) => binary ? { readableEncoding, readableObjectMode, readableHighWaterMark } : { readableEncoding, readableObjectMode: !0, readableHighWaterMark: DEFAULT_OBJECT_HIGH_WATER_MARK }, getReadableMethods = ({ subprocessStdout, subprocess, binary, encoding, preserveNewlines }) => {
let onStdoutDataDone = createDeferred(), onStdoutData = iterateOnSubprocessStream({
subprocessStdout,
subprocess,
binary,
shouldEncode: !binary,
encoding,
preserveNewlines
});
return {
read() {
onRead(this, onStdoutData, onStdoutDataDone);
},
onStdoutDataDone
};
}, onRead = async (readable2, onStdoutData, onStdoutDataDone) => {
try {
let { value, done } = await onStdoutData.next();
done ? onStdoutDataDone.resolve() : readable2.push(value);
} catch {
}
}, onStdoutFinished = async ({ subprocessStdout, onStdoutDataDone, readable: readable2, subprocess, subprocessStdin }) => {
try {
await waitForSubprocessStdout(subprocessStdout), await subprocess, await safeWaitForSubprocessStdin(subprocessStdin), await onStdoutDataDone, readable2.readable && readable2.push(null);
} catch (error) {
await safeWaitForSubprocessStdin(subprocessStdin), destroyOtherReadable(readable2, error);
}
}, onReadableDestroy = async ({ subprocessStdout, subprocess, waitReadableDestroy }, error) => {
await waitForConcurrentStreams(waitReadableDestroy, subprocess) && (destroyOtherReadable(subprocessStdout, error), await waitForSubprocess(subprocess, error));
}, destroyOtherReadable = (stream, error) => {
destroyOtherStream(stream, stream.readable, error);
};
// ../../node_modules/execa/lib/convert/writable.js
import { Writable as Writable3 } from "node:stream";
import { callbackify as callbackify3 } from "node:util";
var createWritable = ({ subprocess, concurrentStreams }, { to } = {}) => {
let { subprocessStdin, waitWritableFinal, waitWritableDestroy } = getSubprocessStdin(subprocess, to, concurrentStreams), writable3 = new Writable3({
...getWritableMethods(subprocessStdin, subprocess, waitWritableFinal),
destroy: callbackify3(onWritableDestroy.bind(void 0, {
subprocessStdin,
subprocess,
waitWritableFinal,
waitWritableDestroy
})),
highWaterMark: subprocessStdin.writableHighWaterMark,
objectMode: subprocessStdin.writableObjectMode
});
return onStdinFinished(subprocessStdin, writable3), writable3;
}, getSubprocessStdin = (subprocess, to, concurrentStreams) => {
let subprocessStdin = getToStream(subprocess, to), waitWritableFinal = addConcurrentStream(concurrentStreams, subprocessStdin, "writableFinal"), waitWritableDestroy = addConcurrentStream(concurrentStreams, subprocessStdin, "writableDestroy");
return { subprocessStdin, waitWritableFinal, waitWritableDestroy };
}, getWritableMethods = (subprocessStdin, subprocess, waitWritableFinal) => ({
write: onWrite.bind(void 0, subprocessStdin),
final: callbackify3(onWritableFinal.bind(void 0, subprocessStdin, subprocess, waitWritableFinal))
}), onWrite = (subprocessStdin, chunk, encoding, done) => {
subprocessStdin.write(chunk, encoding) ? done() : subprocessStdin.once("drain", done);
}, onWritableFinal = async (subprocessStdin, subprocess, waitWritableFinal) => {
await waitForConcurrentStreams(waitWritableFinal, subprocess) && (subprocessStdin.writable && subprocessStdin.end(), await subprocess);
}, onStdinFinished = async (subprocessStdin, writable3, subprocessStdout) => {
try {
await waitForSubprocessStdin(subprocessStdin), writable3.writable && writable3.end();
} catch (error) {
await safeWaitForSubprocessStdout(subprocessStdout), destroyOtherWritable(writable3, error);
}
}, onWritableDestroy = async ({ subprocessStdin, subprocess, waitWritableFinal, waitWritableDestroy }, error) => {
await waitForConcurrentStreams(waitWritableFinal, subprocess), await waitForConcurrentStreams(waitWritableDestroy, subprocess) && (destroyOtherWritable(subprocessStdin, error), await waitForSubprocess(subprocess, error));
}, destroyOtherWritable = (stream, error) => {
destroyOtherStream(stream, stream.writable, error);
};
// ../../node_modules/execa/lib/convert/duplex.js
import { Duplex as Duplex3 } from "node:stream";
import { callbackify as callbackify4 } from "node:util";
var createDuplex = ({ subprocess, concurrentStreams, encoding }, { from: from2, to, binary: binaryOption = !0, preserveNewlines = !0 } = {}) => {
let binary = binaryOption || BINARY_ENCODINGS.has(encoding), { subprocessStdout, waitReadableDestroy } = getSubprocessStdout(subprocess, from2, concurrentStreams), { subprocessStdin, waitWritableFinal, waitWritableDestroy } = getSubprocessStdin(subprocess, to, concurrentStreams), { readableEncoding, readableObjectMode, readableHighWaterMark } = getReadableOptions(subprocessStdout, binary), { read, onStdoutDataDone } = getReadableMethods({
subprocessStdout,
subprocess,
binary,
encoding,
preserveNewlines
}), duplex2 = new Duplex3({
read,
...getWritableMethods(subprocessStdin, subprocess, waitWritableFinal),
destroy: callbackify4(onDuplexDestroy.bind(void 0, {
subprocessStdout,
subprocessStdin,
subprocess,
waitReadableDestroy,
waitWritableFinal,
waitWritableDestroy
})),
readableHighWaterMark,
writableHighWaterMark: subprocessStdin.writableHighWaterMark,
readableObjectMode,
writableObjectMode: subprocessStdin.writableObjectMode,
encoding: readableEncoding
});
return onStdoutFinished({
subprocessStdout,
onStdoutDataDone,
readable: duplex2,
subprocess,
subprocessStdin
}), onStdinFinished(subprocessStdin, duplex2, subprocessStdout), duplex2;
}, onDuplexDestroy = async ({ subprocessStdout, subprocessStdin, subprocess, waitReadableDestroy, waitWritableFinal, waitWritableDestroy }, error) => {
await Promise.all([
onReadableDestroy({ subprocessStdout, subprocess, waitReadableDestroy }, error),
onWritableDestroy({
subprocessStdin,
subprocess,
waitWritableFinal,
waitWritableDestroy
}, error)
]);
};
// ../../node_modules/execa/lib/convert/iterable.js
var createIterable = (subprocess, encoding, {
from: from2,
binary: binaryOption = !1,
preserveNewlines = !1
} = {}) => {
let binary = binaryOption || BINARY_ENCODINGS.has(encoding), subprocessStdout = getFromStream(subprocess, from2), onStdoutData = iterateOnSubprocessStream({
subprocessStdout,
subprocess,
binary,
shouldEncode: !0,
encoding,
preserveNewlines
});
return iterateOnStdoutData(onStdoutData, subprocessStdout, subprocess);
}, iterateOnStdoutData = async function* (onStdoutData, subprocessStdout, subprocess) {
try {
yield* onStdoutData;
} finally {
subprocessStdout.readable && subprocessStdout.destroy(), await subprocess;
}
};
// ../../node_modules/execa/lib/convert/add.js
var addConvertedStreams = (subprocess, { encoding }) => {
let concurrentStreams = initializeConcurrentStreams();
subprocess.readable = createReadable.bind(void 0, { subprocess, concurrentStreams, encoding }), subprocess.writable = createWritable.bind(void 0, { subprocess, concurrentStreams }), subprocess.duplex = createDuplex.bind(void 0, { subprocess, concurrentStreams, encoding }), subprocess.iterable = createIterable.bind(void 0, subprocess, encoding), subprocess[Symbol.asyncIterator] = createIterable.bind(void 0, subprocess, encoding, {});
};
// ../../node_modules/execa/lib/methods/promise.js
var mergePromise = (subprocess, promise) => {
for (let [property, descriptor] of descriptors) {
let value = descriptor.value.bind(promise);
Reflect.defineProperty(subprocess, property, { ...descriptor, value });
}
}, nativePromisePrototype = (async () => {
})().constructor.prototype, descriptors = ["then", "catch", "finally"].map((property) => [
property,
Reflect.getOwnPropertyDescriptor(nativePromisePrototype, property)
]);
// ../../node_modules/execa/lib/methods/main-async.js
var execaCoreAsync = (rawFile, rawArguments, rawOptions, createNested) => {
let { file, commandArguments, command, escapedCommand, startTime, verboseInfo, options, fileDescriptors } = handleAsyncArguments(rawFile, rawArguments, rawOptions), { subprocess, promise } = spawnSubprocessAsync({
file,
commandArguments,
options,
startTime,
verboseInfo,
command,
escapedCommand,
fileDescriptors
});
return subprocess.pipe = pipeToSubprocess.bind(void 0, {
source: subprocess,
sourcePromise: promise,
boundOptions: {},
createNested
}), mergePromise(subprocess, promise), SUBPROCESS_OPTIONS.set(subprocess, { options, fileDescriptors }), subprocess;
}, handleAsyncArguments = (rawFile, rawArguments, rawOptions) => {
let { command, escapedCommand, startTime, verboseInfo } = handleCommand(rawFile, rawArguments, rawOptions), { file, commandArguments, options: normalizedOptions } = normalizeOptions(rawFile, rawArguments, rawOptions), options = handleAsyncOptions(normalizedOptions), fileDescriptors = handleStdioAsync(options, verboseInfo);
return {
file,
commandArguments,
command,
escapedCommand,
startTime,
verboseInfo,
options,
fileDescriptors
};
}, handleAsyncOptions = ({ timeout, signal, ...options }) => {
if (signal !== void 0)
throw new TypeError('The "signal" option has been renamed to "cancelSignal" instead.');
return { ...options, timeoutDuration: timeout };
}, spawnSubprocessAsync = ({ file, commandArguments, options, startTime, verboseInfo, command, escapedCommand, fileDescriptors }) => {
let subprocess;
try {
subprocess = spawn(...concatenateShell(file, commandArguments, options));
} catch (error) {
return handleEarlyError({
error,
command,
escapedCommand,
fileDescriptors,
options,
startTime,
verboseInfo
});
}
let controller = new AbortController();
setMaxListeners(Number.POSITIVE_INFINITY, controller.signal);
let originalStreams = [...subprocess.stdio];
pipeOutputAsync(subprocess, fileDescriptors, controller), cleanupOnExit(subprocess, options, controller);
let context = {}, onInternalError = createDeferred();
subprocess.kill = subprocessKill.bind(void 0, {
kill: subprocess.kill.bind(subprocess),
options,
onInternalError,
context,
controller
}), subprocess.all = makeAllStream(subprocess, options), addConvertedStreams(subprocess, options), addIpcMethods(subprocess, options);
let promise = handlePromise({
subprocess,
options,
startTime,
verboseInfo,
fileDescriptors,
originalStreams,
command,
escapedCommand,
context,
onInternalError,
controller
});
return { subprocess, promise };
}, handlePromise = async ({ subprocess, options, startTime, verboseInfo, fileDescriptors, originalStreams, command, escapedCommand, context, onInternalError, controller }) => {
let [
errorInfo,
[exitCode, signal],
stdioResults,
allResult,
ipcOutput
] = await waitForSubprocessResult({
subprocess,
options,
context,
verboseInfo,
fileDescriptors,
originalStreams,
onInternalError,
controller
});
controller.abort(), onInternalError.resolve();
let stdio = stdioResults.map((stdioResult, fdNumber) => stripNewline(stdioResult, options, fdNumber)), all = stripNewline(allResult, options, "all"), result = getAsyncResult({
errorInfo,
exitCode,
signal,
stdio,
all,
ipcOutput,
context,
options,
command,
escapedCommand,
startTime
});
return handleResult(result, verboseInfo, options);
}, getAsyncResult = ({ errorInfo, exitCode, signal, stdio, all, ipcOutput, context, options, command, escapedCommand, startTime }) => "error" in errorInfo ? makeError({
error: errorInfo.error,
command,
escapedCommand,
timedOut: context.terminationReason === "timeout",
isCanceled: context.terminationReason === "cancel" || context.terminationReason === "gracefulCancel",
isGracefullyCanceled: context.terminationReason === "gracefulCancel",
isMaxBuffer: errorInfo.error instanceof MaxBufferError,
isForcefullyTerminated: context.isForcefullyTerminated,
exitCode,
signal,
stdio,
all,
ipcOutput,
options,
startTime,
isSync: !1
}) : makeSuccessResult({
command,
escapedCommand,
stdio,
all,
ipcOutput,
options,
startTime
});
// ../../node_modules/execa/lib/methods/bind.js
var mergeOptions = (boundOptions, options) => {
let newOptions = Object.fromEntries(
Object.entries(options).map(([optionName, optionValue]) => [
optionName,
mergeOption(optionName, boundOptions[optionName], optionValue)
])
);
return { ...boundOptions, ...newOptions };
}, mergeOption = (optionName, boundOptionValue, optionValue) => DEEP_OPTIONS.has(optionName) && isPlainObject(boundOptionValue) && isPlainObject(optionValue) ? { ...boundOptionValue, ...optionValue } : optionValue, DEEP_OPTIONS = /* @__PURE__ */ new Set(["env", ...FD_SPECIFIC_OPTIONS]);
// ../../node_modules/execa/lib/methods/create.js
var createExeca = (mapArguments, boundOptions, deepOptions, setBoundExeca) => {
let createNested = (mapArguments2, boundOptions2, setBoundExeca2) => createExeca(mapArguments2, boundOptions2, deepOptions, setBoundExeca2), boundExeca = (...execaArguments) => callBoundExeca({
mapArguments,
deepOptions,
boundOptions,
setBoundExeca,
createNested
}, ...execaArguments);
return setBoundExeca !== void 0 && setBoundExeca(boundExeca, createNested, boundOptions), boundExeca;
}, callBoundExeca = ({ mapArguments, deepOptions = {}, boundOptions = {}, setBoundExeca, createNested }, firstArgument, ...nextArguments) => {
if (isPlainObject(firstArgument))
return createNested(mapArguments, mergeOptions(boundOptions, firstArgument), setBoundExeca);
let { file, commandArguments, options, isSync } = parseArguments({
mapArguments,
firstArgument,
nextArguments,
deepOptions,
boundOptions
});
return isSync ? execaCoreSync(file, commandArguments, options) : execaCoreAsync(file, commandArguments, options, createNested);
}, parseArguments = ({ mapArguments, firstArgument, nextArguments, deepOptions, boundOptions }) => {
let callArguments = isTemplateString(firstArgument) ? parseTemplates(firstArgument, nextArguments) : [firstArgument, ...nextArguments], [initialFile, initialArguments, initialOptions] = normalizeParameters(...callArguments), mergedOptions = mergeOptions(mergeOptions(deepOptions, boundOptions), initialOptions), {
file = initialFile,
commandArguments = initialArguments,
options = mergedOptions,
isSync = !1
} = mapArguments({ file: initialFile, commandArguments: initialArguments, options: mergedOptions });
return {
file,
commandArguments,
options,
isSync
};
};
// ../../node_modules/execa/lib/methods/command.js
var mapCommandAsync = ({ file, commandArguments }) => parseCommand(file, commandArguments), mapCommandSync = ({ file, commandArguments }) => ({ ...parseCommand(file, commandArguments), isSync: !0 }), parseCommand = (command, unusedArguments) => {
if (unusedArguments.length > 0)
throw new TypeError(`The command and its arguments must be passed as a single string: ${command} ${unusedArguments}.`);
let [file, ...commandArguments] = parseCommandString(command);
return { file, commandArguments };
}, parseCommandString = (command) => {
if (typeof command != "string")
throw new TypeError(`The command must be a string: ${String(command)}.`);
let trimmedCommand = command.trim();
if (trimmedCommand === "")
return [];
let tokens = [];
for (let token of trimmedCommand.split(SPACES_REGEXP)) {
let previousToken = tokens.at(-1);
previousToken && previousToken.endsWith("\\") ? tokens[tokens.length - 1] = `${previousToken.slice(0, -1)} ${token}` : tokens.push(token);
}
return tokens;
}, SPACES_REGEXP = / +/g;
// ../../node_modules/execa/lib/methods/script.js
var setScriptSync = (boundExeca, createNested, boundOptions) => {
boundExeca.sync = createNested(mapScriptSync, boundOptions), boundExeca.s = boundExeca.sync;
}, mapScriptAsync = ({ options }) => getScriptOptions(options), mapScriptSync = ({ options }) => ({ ...getScriptOptions(options), isSync: !0 }), getScriptOptions = (options) => ({ options: { ...getScriptStdinOption(options), ...options } }), getScriptStdinOption = ({ input, inputFile, stdio }) => input === void 0 && inputFile === void 0 && stdio === void 0 ? { stdin: "inherit" } : {}, deepScriptOptions = { preferLocal: !0 };
// ../../node_modules/execa/index.js
var execa = createExeca(() => ({})), execaSync = createExeca(() => ({ isSync: !0 })), execaCommand = createExeca(mapCommandAsync), execaCommandSync = createExeca(mapCommandSync), execaNode = createExeca(mapNode), $ = createExeca(mapScriptAsync, {}, deepScriptOptions, setScriptSync), {
sendMessage: sendMessage2,
getOneMessage: getOneMessage2,
getEachMessage: getEachMessage2,
getCancelSignal: getCancelSignal2
} = getIpcExport();
// src/common/utils/command.ts
var COMMON_ENV_VARS = {
COREPACK_ENABLE_STRICT: "0",
COREPACK_ENABLE_AUTO_PIN: "0",
NO_UPDATE_NOTIFIER: "true"
};
function getExecaOptions({
stdio,
cwd,
env: env2,
signal,
...execaOptions
}) {
return {
cwd,
stdio: stdio ?? prompt2.getPreferredStdio(),
encoding: "utf8",
cleanup: !0,
env: {
...COMMON_ENV_VARS,
...env2
},
...signal && { cancelSignal: signal },
// Map signal to cancelSignal for execa v9
...execaOptions
};
}
function executeCommand(options) {
let { command, args = [], ignoreError = !1 } = options;
logger12.debug(`Executing command: ${command} ${args.join(" ")}`);
let commandVariations = resolveCommand(command), execaProcess = tryCommandVariations(commandVariations, args, getExecaOptions(options));
return ignoreError && execaProcess.catch(() => {
}), execaProcess;
}
function executeCommandSync(options) {
let { command, args = [], ignoreError = !1 } = options;
try {
let commandVariations = resolveCommand(command);
return tryCommandVariationsSync(
commandVariations,
args,
getExecaOptions(options)
);
} catch (err) {
if (!ignoreError)
throw err;
return "";
}
}
function executeNodeCommand({
scriptPath,
args,
options
}) {
return execaNode(scriptPath, args, {
...options
});
}
function isCommandNotFoundError(error) {
return error ? (error.stderr || "").includes("is not recognized as an internal or external command") : !1;
}
function shouldRetry(error, isLastVariation) {
return isCommandNotFoundError(error) && !isLastVariation;
}
function isExecutableInPath(command) {
return (process.env.PATH || "").split(delimiter).some((dir) => existsSync6(join10(dir, command)));
}
function tryCommandVariations(commandVariations, args, options) {
if (commandVariations.length <= 1)
return execa(commandVariations[0], args, options);
for (let cmd of commandVariations.slice(0, -1))
if (isExecutableInPath(cmd))
return logger12.debug(`Resolved command variation: ${cmd}`), execa(cmd, args, options);
return execa(commandVariations[commandVariations.length - 1], args, options);
}
function tryCommandVariationsSync(commandVariations, args, options) {
let lastError;
for (let i2 = 0; i2 < commandVariations.length; i2++) {
let cmd = commandVariations[i2];
try {
let commandResult = execaCommandSync([cmd, ...args].join(" "), options);
return typeof commandResult.stdout == "string" ? commandResult.stdout : "";
} catch (error) {
if (lastError = error, !shouldRetry(error, i2 === commandVariations.length - 1))
throw error;
logger12.debug(`Command "${cmd}" not found, trying next variation...`);
}
}
throw lastError;
}
function resolveCommand(command) {
let WINDOWS_SHIM_COMMANDS = /* @__PURE__ */ new Set([
"npm",
"npx",
"pnpm",
"yarn",
"ng"
// Anything installed via node_modules/.bin (vite, eslint, prettier, etc)
// can be added here as needed. Do NOT list native executables.
]);
return process.platform !== "win32" ? [command] : WINDOWS_SHIM_COMMANDS.has(command) ? [`${command}.cmd`, `${command}.exe`, `${command}.ps1`, command] : [command];
}
// src/common/js-package-manager/BUNProxy.ts
import { readFileSync as readFileSync9, writeFileSync as writeFileSync4 } from "node:fs";
import { join as join11 } from "node:path";
import { logger as logger13, prompt as prompt3 } from "storybook/internal/node-logger";
import {
FindPackageVersionsError,
MinimumReleaseAgeHandledError
} from "storybook/internal/server-errors";
var import_ts_dedent10 = __toESM(require_dist(), 1);
import sort from "semver/functions/sort.js";
// src/common/js-package-manager/util.ts
import { gt as gt2, prerelease, valid } from "semver";
var STORYBOOK_PACKAGE_PATTERNS = [
"storybook",
"@storybook/*",
"eslint-plugin-storybook",
"@chromatic-com/storybook"
], escapePatternForRegex = (pattern) => pattern.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), packagePatternToRegex = (pattern) => new RegExp(`^${escapePatternForRegex(pattern).replace(/\\\*/g, ".*")}$`), hasStorybookMinimumAgeExclusions = (configuredPatterns) => STORYBOOK_PACKAGE_PATTERNS.every(
(storybookPattern) => configuredPatterns.some(
(configuredPattern) => packagePatternToRegex(configuredPattern).test(storybookPattern)
)
), parsePackageData = (packageName = "") => {
let [first, second, third] = packageName.replace(/[└─├]+/g, "").trim().split("@"), version = (third || second).replace("npm:", "");
return { name: third ? `@${second}` : first, value: { version, location: "" } };
}, parsePositiveIntegerConfigValue = (value) => {
let normalizedValue = value?.trim() ?? "";
if (!normalizedValue || normalizedValue === "undefined" || normalizedValue === "null" || normalizedValue === "false")
return null;
let parsedValue = Number.parseInt(normalizedValue, 10);
return !Number.isFinite(parsedValue) || parsedValue <= 0 ? null : parsedValue;
}, parseReleaseTime = (value) => {
if (typeof value != "string" || value.length === 0)
return null;
let releaseTime = new Date(value);
return Number.isNaN(releaseTime.getTime()) ? null : releaseTime;
}, parsePackageTimeMap = (value) => {
if (!value || typeof value != "object" || Array.isArray(value))
return null;
let timeMap = {};
for (let [version, releaseTime] of Object.entries(value))
typeof releaseTime == "string" && releaseTime.length > 0 && (timeMap[version] = releaseTime);
return timeMap;
}, getAgeInMinutes = (publishedAt, now = /* @__PURE__ */ new Date()) => Math.floor((now.getTime() - publishedAt.getTime()) / 6e4), getLatestStableVersionAdheringToMinimumAgeGate = (timeMap, minimumAgeGateMinutes, now = /* @__PURE__ */ new Date()) => {
let cutoff = now.getTime() - minimumAgeGateMinutes * 6e4, latestStableVersion = null;
for (let [version, releaseTime] of Object.entries(timeMap)) {
if (!valid(version) || prerelease(version))
continue;
let publishedAt = parseReleaseTime(releaseTime);
!publishedAt || publishedAt.getTime() > cutoff || (!latestStableVersion || gt2(version, latestStableVersion)) && (latestStableVersion = version);
}
return latestStableVersion;
};
function getRemotePackageRunnerArgs(packageManagerType, pkg, version, args) {
let pkgWithVersion = `${pkg}@${version}`;
return packageManagerType === "npm" /* NPM */ || packageManagerType === "yarn1" /* YARN1 */ ? ["--yes", pkgWithVersion, ...args] : [pkgWithVersion, ...args];
}
function getVitestStorybookRunCommand(packageManager, file) {
let args = ["vitest", "--project", "storybook", "run"];
return file && args.push(file), packageManager.getPackageCommand(args);
}
function getMswInitCommand(packageManager) {
return packageManager.getPackageCommand(["msw", "init", "./public", "--save"]);
}
var getStorybookRerunCommand = (installContext, compatibleVersion) => installContext === "create" ? compatibleVersion ? `npx create-storybook@${compatibleVersion}` : "npx create-storybook@<compatible-version>" : compatibleVersion ? `npx storybook@${compatibleVersion} upgrade` : "npx storybook@<compatible-version> upgrade", getStorybookRerunInstruction = (installContext) => installContext === "create" ? "Please rerun Storybook creation with:" : "Please rerun the Storybook upgrade with:", getErrorLogs = (error) => {
if (typeof error == "string")
return error;
if (error && typeof error == "object") {
let structuredError = error, structuredLogs = [
structuredError.shortMessage,
structuredError.originalMessage,
structuredError.stderr,
structuredError.stdout,
structuredError.message
].filter((entry) => typeof entry == "string" && entry.length > 0);
if (structuredLogs.length > 0)
return structuredLogs.join(`
`);
}
return String(error);
};
// src/common/js-package-manager/BUNProxy.ts
var BUNProxy = class extends JsPackageManager {
constructor() {
super(...arguments);
this.type = "bun" /* BUN */;
}
async initPackageJson() {
return executeCommand({ command: "bun", args: ["init"] });
}
getCommandName() {
return "bun";
}
getInstallCommand(deps, dev) {
return `bun add ${dev ? "-D " : ""}${deps.join(" ")}`;
}
getRunStorybookCommand() {
return "bun run storybook";
}
getRunCommand(command) {
return `bun run ${command}`;
}
getRemoteRunCommand(pkg, args, specifier) {
return `bunx ${pkg}${specifier ? `@${specifier}` : ""} ${args.join(" ")}`;
}
getPackageCommand(args) {
return `bunx ${args.join(" ")}`;
}
async getModulePackageJSON(packageName) {
let wantedPath = join11("node_modules", packageName, "package.json"), packageJsonPath = up2(wantedPath, {
cwd: this.primaryPackageJson.operationDir,
last: getProjectRoot()
});
return packageJsonPath ? JSON.parse(readFileSync9(packageJsonPath, "utf-8")) : null;
}
getInstallArgs() {
return this.installArgs || (this.installArgs = []), this.installArgs;
}
runPackageCommand(options) {
return executeCommand({
command: "bunx",
...options
});
}
runInternalCommand(command, args, cwd, stdio) {
return executeCommand({
command: "bun",
args: [command, ...args],
cwd: cwd ?? this.cwd,
stdio
});
}
async findInstallations(pattern, { depth = 99 } = {}) {
let exec = async ({ packageDepth }) => executeCommand({
command: "npm",
args: ["ls", "--json", `--depth=${packageDepth}`],
cwd: this.cwd,
stdio: ["ignore", "pipe", "ignore"],
env: {
FORCE_COLOR: "false"
}
});
try {
let result = await await exec({ packageDepth: depth }), commandResult = typeof result.stdout == "string" ? result.stdout : "", parsedOutput = JSON.parse(commandResult);
return this.mapDependencies(parsedOutput, pattern);
} catch {
try {
let result = await await exec({ packageDepth: 0 }), commandResult = typeof result.stdout == "string" ? result.stdout : "", parsedOutput = JSON.parse(commandResult);
return this.mapDependencies(parsedOutput, pattern);
} catch (err) {
logger13.debug(
`An issue occurred while trying to find dependencies metadata using npm: ${err}`
);
return;
}
}
}
getResolutions(packageJson, versions) {
return {
overrides: {
...packageJson.overrides,
...versions
}
};
}
runInstall(options) {
return executeCommand({
command: "bun",
args: ["install", ...this.getInstallArgs(), ...options?.force ? ["--force"] : []],
cwd: this.cwd,
stdio: prompt3.getPreferredStdio()
});
}
async installDependencies(options) {
try {
await super.installDependencies(options);
} catch (error) {
let logs = getErrorLogs(error);
if (logs.includes("minimum-release-age") || logs.includes("minimum release age")) {
let handledError = new MinimumReleaseAgeHandledError({
packageManagerName: "bun",
minimumReleaseAgeConfigName: "minimumReleaseAge",
minimumReleaseAgeConfigDocs: "https://bun.com/docs/pm/cli/install#minimum-release-age",
minimumReleaseAgeExclusionsConfigName: "minimumReleaseAgeExcludes",
failedPackage: this.extractMinimumReleaseAgePackage(logs),
cause: error
});
throw logger13.error(handledError.message), handledError;
}
throw error;
}
}
async precheckStorybookPackageInstall({
storybookVersion,
nonInteractive,
installContext
}) {
let bunfig = this.readBunfig(), minimumReleaseAgeSeconds = this.getMinimumReleaseAgeSeconds(bunfig);
if (!minimumReleaseAgeSeconds || hasStorybookMinimumAgeExclusions(this.getMinimumReleaseAgeExcludes(bunfig ?? "")))
return;
let timeMap = await this.getPackageTimeMap("storybook");
if (!timeMap)
return;
let releaseTime = timeMap[storybookVersion];
if (!releaseTime)
return;
let publishedAt = parseReleaseTime(releaseTime);
if (!publishedAt || Math.floor((Date.now() - publishedAt.getTime()) / 1e3) >= minimumReleaseAgeSeconds)
return;
let compatibleVersion = getLatestStableVersionAdheringToMinimumAgeGate(
timeMap,
Math.ceil(minimumReleaseAgeSeconds / 60)
);
if (nonInteractive) {
this.updateMinimumReleaseAgeExcludes(), logger13.info(
import_ts_dedent10.dedent`
bun minimumReleaseAge would block storybook@${storybookVersion} from being installed because it was released within the configured minimumReleaseAge window, so Storybook updated minimumReleaseAgeExcludes for this project automatically.
Added patterns: storybook, @storybook/*, eslint-plugin-storybook, @chromatic-com/storybook
Read more:
- https://bun.com/docs/pm/cli/install#minimum-release-age
`
);
return;
}
logger13.warn(
`bun minimumReleaseAge will block storybook@${storybookVersion} from being installed because it was released within the disallowed immaturity window.`
);
let rerunError = new MinimumReleaseAgeHandledError({
message: this.createMinimumReleaseAgeRerunMessage({
currentVersion: storybookVersion,
compatibleVersion,
installContext
})
});
if (await prompt3.select(
{
message: "How would you like to proceed?",
options: [
{
label: "Update bunfig.toml to exclude Storybook packages from minimumReleaseAge",
value: "exclude"
},
{
label: compatibleVersion ? `Stop now and rerun with the most recent allowed release: storybook@${compatibleVersion}` : "Stop now and rerun with an older stable Storybook release later",
value: "rerun"
}
]
},
{
onCancel: () => {
throw logger13.error(rerunError.message), rerunError;
}
}
) === "exclude") {
this.updateMinimumReleaseAgeExcludes();
return;
}
throw logger13.error(rerunError.message), rerunError;
}
async getRegistryURL() {
let result = await executeCommand({
command: "npm",
cwd: this.cwd,
// "npm config" commands are not allowed in workspaces per default
// https://github.com/npm/cli/issues/6099#issuecomment-1847584792
args: ["config", "get", "registry", "--workspaces=false", "--include-workspace-root"]
}), url = (typeof result.stdout == "string" ? result.stdout : "").trim();
return url === "undefined" ? void 0 : url;
}
runAddDeps(dependencies, installAsDevDependencies) {
let args = [...dependencies];
return installAsDevDependencies && (args = ["-D", ...args]), executeCommand({
command: "bun",
args: ["add", ...args, ...this.getInstallArgs()],
stdio: "pipe",
cwd: this.primaryPackageJson.operationDir
});
}
async runGetVersions(packageName, fetchAllVersions) {
let args = fetchAllVersions ? ["versions", "--json"] : ["version"];
try {
let result = await executeCommand({
command: "npm",
cwd: this.cwd,
args: ["info", packageName, ...args]
}), commandResult = typeof result.stdout == "string" ? result.stdout : "", parsedOutput = fetchAllVersions ? JSON.parse(commandResult) : commandResult.trim();
if (parsedOutput.error?.summary)
throw parsedOutput.error.summary;
return parsedOutput;
} catch (error) {
throw new FindPackageVersionsError({
error,
packageManager: "NPM",
packageName
});
}
}
/**
* @param input The output of `npm ls --json`
* @param pattern A list of package names to filter the result. * can be used as a placeholder
*/
mapDependencies(input, pattern) {
let acc = {}, existingVersions = {}, duplicatedDependencies = {}, recurse = ([name, packageInfo]) => {
if (!name || !pattern.some((p) => new RegExp(`^${p.replace(/\*/g, ".*")}$`).test(name)))
return;
let value = {
version: packageInfo.version,
location: ""
};
existingVersions[name]?.includes(value.version) || (acc[name] ? acc[name].push(value) : acc[name] = [value], existingVersions[name] = sort([...existingVersions[name] || [], value.version]), existingVersions[name].length > 1 && (duplicatedDependencies[name] = existingVersions[name])), packageInfo.dependencies && Object.entries(packageInfo.dependencies).forEach(recurse);
};
return Object.entries(input.dependencies).forEach(recurse), {
dependencies: acc,
duplicatedDependencies,
infoCommand: "npm ls --depth=1",
dedupeCommand: "npm dedupe"
};
}
getMinimumReleaseAgeSeconds(bunfig = this.readBunfig()) {
if (!bunfig)
return null;
let match = bunfig.match(/^minimumReleaseAge\s*=\s*(\d+)\s*$/m);
if (!match)
return null;
let parsedValue = Number.parseInt(match[1], 10);
return Number.isFinite(parsedValue) && parsedValue > 0 ? parsedValue : null;
}
async getPackageTimeMap(packageName) {
let result = await executeCommand({
command: "npm",
cwd: this.cwd,
args: ["info", packageName, "time", "--json"],
stdio: "pipe"
}), normalizedValue = typeof result.stdout == "string" ? result.stdout.trim() : "";
return normalizedValue ? parsePackageTimeMap(JSON.parse(normalizedValue)) : null;
}
createMinimumReleaseAgeRerunMessage({
currentVersion,
compatibleVersion,
installContext
}) {
let rerunCommand = getStorybookRerunCommand(installContext, compatibleVersion), rerunInstruction = getStorybookRerunInstruction(installContext);
return import_ts_dedent10.dedent`
bun minimumReleaseAge blocked storybook@${currentVersion} from being installed.
${rerunInstruction}
${rerunCommand}
Read more:
- https://bun.com/docs/pm/cli/install#minimum-release-age
`;
}
updateMinimumReleaseAgeExcludes() {
let bunfigPath = join11(this.cwd, "bunfig.toml"), currentContent = this.readBunfig() ?? "", lineEnding = currentContent.includes(`\r
`) ? `\r
` : `
`, replacement = [
"minimumReleaseAgeExcludes = [",
...Array.from(
/* @__PURE__ */ new Set([...this.getMinimumReleaseAgeExcludes(currentContent), ...STORYBOOK_PACKAGE_PATTERNS])
).map((pattern) => ` "${pattern}",`),
"]"
].join(lineEnding), installSectionRange = this.getTomlSectionRange(currentContent, "install"), nextContent = installSectionRange ? [
currentContent.slice(0, installSectionRange.start),
this.updateMinimumReleaseAgeExcludesInContent(
currentContent.slice(installSectionRange.start, installSectionRange.end),
replacement,
lineEnding
),
currentContent.slice(installSectionRange.end)
].join("") : this.updateMinimumReleaseAgeExcludesInContent(currentContent, replacement, lineEnding);
writeFileSync4(bunfigPath, nextContent);
}
updateMinimumReleaseAgeExcludesInContent(content, replacement, lineEnding) {
return content.match(/^minimumReleaseAgeExcludes\s*=\s*\[[\s\S]*?\]/m) ? content.replace(/^minimumReleaseAgeExcludes\s*=\s*\[[\s\S]*?\]/m, replacement) : content.match(/^minimumReleaseAge\s*=\s*.+$/m) ? content.replace(
/^minimumReleaseAge\s*=\s*.+$/m,
(minimumReleaseAgeLine) => `${minimumReleaseAgeLine}${lineEnding}${replacement}`
) : `${content}${content.trim().length > 0 ? `${lineEnding}${lineEnding}` : ""}${replacement}${lineEnding}`;
}
getTomlSectionRange(content, sectionName) {
let escapedSectionName = sectionName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), sectionMatch = new RegExp(`^\\[${escapedSectionName}\\]\\s*$`, "m").exec(content);
if (!sectionMatch || sectionMatch.index === void 0)
return null;
let nextSectionHeader = /^\[[^\]]+\]\s*$/gm;
nextSectionHeader.lastIndex = sectionMatch.index + sectionMatch[0].length;
let nextSectionMatch = nextSectionHeader.exec(content);
return {
start: sectionMatch.index,
end: nextSectionMatch?.index ?? content.length
};
}
getMinimumReleaseAgeExcludes(bunfig) {
let match = bunfig.match(/^minimumReleaseAgeExcludes\s*=\s*\[([\s\S]*?)\]/m);
return match ? Array.from(match[1].matchAll(/"([^"]+)"/g), (entry) => entry[1]) : [];
}
readBunfig() {
try {
return readFileSync9(join11(this.cwd, "bunfig.toml"), "utf-8");
} catch {
return null;
}
}
extractMinimumReleaseAgePackage(logs) {
let exactVersionMatch = logs.match(
/Version\s+"((?:@[^/\s"]+\/)?[^@\s"]+@[^\s"]+)"\s+was published within minimum release age/
);
if (exactVersionMatch)
return exactVersionMatch[1];
let rangedSpecifierMatch = logs.match(
/No version matching\s+"((?:@[^/\s"]+\/)?[^\s"]+)"\s+found for specifier\s+"([^"]+)"\s+\(blocked by minimum-release-age:/
);
if (rangedSpecifierMatch) {
let [, packageName2, specifier] = rangedSpecifierMatch;
return `${packageName2}@${specifier}`;
}
let failedToResolveMatch = logs.match(
/error:\s+((?:@[^/\s]+\/)?[^@\s]+@[^\s]+)\s+failed to resolve/
);
if (failedToResolveMatch)
return failedToResolveMatch[1];
let match = logs.match(/((?:@[^/\s]+\/)?[^@\s]+)@([^\s"']+)/);
if (!match)
return null;
let [, packageName, version] = match;
return `${packageName}@${version}`;
}
};
// src/common/js-package-manager/NPMProxy.ts
import { readFileSync as readFileSync10 } from "node:fs";
import { join as join12 } from "node:path";
import { logger as logger14, prompt as prompt4 } from "storybook/internal/node-logger";
import {
FindPackageVersionsError as FindPackageVersionsError2,
MinimumReleaseAgeHandledError as MinimumReleaseAgeHandledError2
} from "storybook/internal/server-errors";
var import_ts_dedent11 = __toESM(require_dist(), 1);
import sort2 from "semver/functions/sort.js";
var NPM_CONFIG_WORKSPACE_ARGS = ["--workspaces=false", "--include-workspace-root"];
var NPMProxy = class extends JsPackageManager {
constructor() {
super(...arguments);
this.type = "npm" /* NPM */;
}
getCommandName() {
return "npm";
}
getInstallCommand(deps, dev) {
return `npm install ${dev ? "-D " : ""}${deps.join(" ")}`;
}
getRunCommand(command) {
return `npm run ${command}`;
}
async getModulePackageJSON(packageName) {
let wantedPath = join12("node_modules", packageName, "package.json"), packageJsonPath = up2(wantedPath, {
cwd: this.primaryPackageJson.operationDir,
last: getProjectRoot()
});
return packageJsonPath ? JSON.parse(readFileSync10(packageJsonPath, "utf-8")) : null;
}
getInstallArgs() {
return this.installArgs || (this.installArgs = []), this.installArgs;
}
getPackageCommand(args) {
return `npx ${args.join(" ")}`;
}
runPackageCommand(options) {
return executeCommand({
command: "npx",
...options
});
}
runInternalCommand(command, args, cwd, stdio) {
return executeCommand({
command: "npm",
args: [command, ...args],
cwd: cwd ?? this.cwd,
stdio
});
}
async findInstallations(pattern, { depth = 99 } = {}) {
let exec = ({ packageDepth }) => executeCommand({
command: "npm",
args: ["ls", "--json", `--depth=${packageDepth}`],
env: {
FORCE_COLOR: "false"
},
cwd: this.instanceDir,
stdio: ["pipe", "pipe", "ignore"]
});
try {
let childProcess = await exec({ packageDepth: depth }), commandResult = typeof childProcess.stdout == "string" ? childProcess.stdout : "", parsedOutput = JSON.parse(commandResult);
return this.mapDependencies(parsedOutput, pattern);
} catch {
try {
let childProcess = await exec({ packageDepth: 0 }), commandResult = typeof childProcess.stdout == "string" ? childProcess.stdout : "", parsedOutput = JSON.parse(commandResult);
return this.mapDependencies(parsedOutput, pattern);
} catch (e) {
logger14.debug(`Error finding installations for ${pattern.join(", ")}: ${String(e)}`);
return;
}
}
}
getResolutions(packageJson, versions) {
return {
overrides: {
...packageJson.overrides,
...versions
}
};
}
runInstall(options) {
return executeCommand({
command: "npm",
args: ["install", ...this.getInstallArgs(), ...options?.force ? ["--force"] : []],
cwd: this.cwd,
stdio: prompt4.getPreferredStdio()
});
}
async installDependencies(options) {
try {
await super.installDependencies(options);
} catch (error) {
let logs = getErrorLogs(error);
if (logs.match(/npm\s+(ERR!|error)\s+code\s+ETARGET/i) && logs.includes("with a date before")) {
let handledError = new MinimumReleaseAgeHandledError2({
packageManagerName: "npm",
minimumReleaseAgeConfigName: "min-release-age",
minimumReleaseAgeConfigDocs: "https://docs.npmjs.com/cli/v11/using-npm/config#min-release-age",
failedPackage: this.extractMinimumReleaseAgePackage(logs),
cause: error
});
throw logger14.error(handledError.message), handledError;
}
throw error;
}
}
async precheckStorybookPackageInstall({
storybookVersion,
installContext
}) {
let minimumReleaseAgeDays = await this.getMinimumReleaseAge();
if (!minimumReleaseAgeDays)
return;
let timeMap = await this.getPackageTimeMap("storybook");
if (!timeMap)
return;
let releaseTime = timeMap[storybookVersion];
if (!releaseTime)
return;
let publishedAt = parseReleaseTime(releaseTime);
if (!publishedAt || getAgeInMinutes(publishedAt, /* @__PURE__ */ new Date()) / 1440 >= minimumReleaseAgeDays)
return;
let compatibleVersion = getLatestStableVersionAdheringToMinimumAgeGate(
timeMap,
minimumReleaseAgeDays * 24 * 60
), error = new MinimumReleaseAgeHandledError2({
message: this.createMinimumReleaseAgeRerunMessage({
currentVersion: storybookVersion,
compatibleVersion,
installContext
})
});
throw logger14.error(error.message), error;
}
async getRegistryURL() {
let result = await executeCommand({
command: "npm",
// "npm config" commands are not allowed in workspaces per default
// https://github.com/npm/cli/issues/6099#issuecomment-1847584792
args: ["config", "get", "registry", ...NPM_CONFIG_WORKSPACE_ARGS]
}), url = (typeof result.stdout == "string" ? result.stdout : "").trim();
return url === "undefined" ? void 0 : url;
}
runAddDeps(dependencies, installAsDevDependencies) {
let args = [...dependencies];
return installAsDevDependencies && (args = ["-D", ...args]), executeCommand({
command: "npm",
args: ["install", ...args, ...this.getInstallArgs()],
stdio: prompt4.getPreferredStdio(),
cwd: this.primaryPackageJson.operationDir
});
}
async runGetVersions(packageName, fetchAllVersions) {
let args = fetchAllVersions ? ["versions", "--json"] : ["version"];
try {
let result = await executeCommand({
command: "npm",
args: ["info", packageName, ...args]
}), commandResult = typeof result.stdout == "string" ? result.stdout : "", parsedOutput = fetchAllVersions ? JSON.parse(commandResult) : commandResult.trim();
if (parsedOutput.error?.summary)
throw parsedOutput.error.summary;
return parsedOutput;
} catch (error) {
throw new FindPackageVersionsError2({
error,
packageManager: "NPM",
packageName
});
}
}
/**
* @param input The output of `npm ls --json`
* @param pattern A list of package names to filter the result. * can be used as a placeholder
*/
mapDependencies(input, pattern) {
let acc = {}, existingVersions = {}, duplicatedDependencies = {}, recurse = ([name, packageInfo]) => {
if (!name || !pattern.some((p) => new RegExp(`^${p.replace(/\*/g, ".*")}$`).test(name)))
return;
let value = {
version: packageInfo.version,
location: ""
};
existingVersions[name]?.includes(value.version) || (acc[name] ? acc[name].push(value) : acc[name] = [value], existingVersions[name] = sort2([...existingVersions[name] || [], value.version]), existingVersions[name].length > 1 && (duplicatedDependencies[name] = existingVersions[name])), packageInfo.dependencies && Object.entries(packageInfo.dependencies).forEach(recurse);
};
return Object.entries(input.dependencies).forEach(recurse), {
dependencies: acc,
duplicatedDependencies,
infoCommand: "npm ls --depth=1",
dedupeCommand: "npm dedupe"
};
}
async getMinimumReleaseAge() {
let result = await executeCommand({
command: "npm",
args: ["config", "get", "min-release-age", ...NPM_CONFIG_WORKSPACE_ARGS],
cwd: this.cwd,
stdio: "pipe"
});
return parsePositiveIntegerConfigValue(
typeof result.stdout == "string" ? result.stdout : void 0
);
}
async getPackageTimeMap(packageName) {
let result = await executeCommand({
command: "npm",
args: ["info", packageName, "time", "--json"],
cwd: this.cwd,
stdio: "pipe"
}), normalizedValue = typeof result.stdout == "string" ? result.stdout.trim() : "";
return normalizedValue ? parsePackageTimeMap(JSON.parse(normalizedValue)) : null;
}
createMinimumReleaseAgeRerunMessage({
currentVersion,
compatibleVersion,
installContext
}) {
let rerunCommand = getStorybookRerunCommand(installContext, compatibleVersion), rerunInstruction = getStorybookRerunInstruction(installContext);
return import_ts_dedent11.dedent`
npm min-release-age blocked storybook@${currentVersion} from being installed.
${rerunInstruction}
${rerunCommand}
Read more:
- https://docs.npmjs.com/cli/v11/using-npm/config#min-release-age
`;
}
extractMinimumReleaseAgePackage(logs) {
let exactVersionMatch = logs.match(
/No matching version found for\s+((?:@[^/\s]+\/)?[^@\s]+)@([^\s]+)\s+with a date before/i
);
if (exactVersionMatch) {
let [, packageName2, version2] = exactVersionMatch;
return `${packageName2}@${version2}`;
}
let scopedMatch = logs.match(/((?:@[^/\s]+\/)?[^@\s]+)@([^\s"']+)/);
if (!scopedMatch)
return null;
let [, packageName, version] = scopedMatch;
return `${packageName}@${version}`;
}
};
// src/common/js-package-manager/PNPMProxy.ts
import { existsSync as existsSync7, readFileSync as readFileSync11, writeFileSync as writeFileSync5 } from "node:fs";
import { join as join13 } from "node:path";
import { pathToFileURL } from "node:url";
import { logger as logger15, prompt as prompt5 } from "storybook/internal/node-logger";
import {
FindPackageVersionsError as FindPackageVersionsError3,
MinimumReleaseAgeHandledError as MinimumReleaseAgeHandledError3
} from "storybook/internal/server-errors";
var import_ts_dedent12 = __toESM(require_dist(), 1), import_yaml = __toESM(require_dist2(), 1);
var PNPMProxy = class extends JsPackageManager {
constructor() {
super(...arguments);
this.type = "pnpm" /* PNPM */;
}
detectWorkspaceRoot() {
let pnpmWorkspaceYaml = `${process.cwd()}/pnpm-workspace.yaml`;
return existsSync7(pnpmWorkspaceYaml);
}
getCommandName() {
return "pnpm";
}
getInstallCommand(deps, dev) {
return `pnpm add ${dev ? "-D " : ""}${deps.join(" ")}`;
}
getRunCommand(command) {
return `pnpm run ${command}`;
}
async getPnpmVersion() {
let result = await executeCommand({
cwd: this.cwd,
command: "pnpm",
args: ["--version"]
});
return typeof result.stdout == "string" ? result.stdout : "";
}
getInstallArgs() {
return this.installArgs || (this.installArgs = [], this.detectWorkspaceRoot() && this.installArgs.push("-w")), this.installArgs;
}
getPackageCommand(args) {
return `pnpm exec ${args.join(" ")}`;
}
runPackageCommand({
args,
useRemotePkg = !1,
...options
}) {
return executeCommand({
command: "pnpm",
args: [useRemotePkg ? "dlx" : "exec", ...args],
...options
});
}
runInternalCommand(command, args, cwd, stdio) {
return executeCommand({
command: "pnpm",
args: [command, ...args],
cwd: cwd ?? this.cwd,
stdio
});
}
async getRegistryURL() {
let childProcess = await executeCommand({
command: "npm",
cwd: this.cwd,
args: ["config", "get", "registry", "--workspaces=false", "--include-workspace-root"]
}), url = (typeof childProcess.stdout == "string" ? childProcess.stdout : "").trim();
return url === "undefined" ? void 0 : url;
}
async findInstallations(pattern, { depth = 99 } = {}) {
try {
let args = ["list", pattern.map((p) => `"${p}"`).join(" "), "--json", `--depth=${depth}`], childProcess = await executeCommand({
command: "pnpm",
shell: !0,
args,
env: {
FORCE_COLOR: "false"
},
cwd: this.instanceDir
}), commandResult = typeof childProcess.stdout == "string" ? childProcess.stdout : "", parsedOutput = JSON.parse(commandResult);
return this.mapDependencies(parsedOutput, pattern);
} catch (e) {
logger15.debug(`Error finding installations for ${pattern.join(", ")}: ${String(e)}`);
return;
}
}
// TODO: Remove pnp compatibility code in SB11
async getModulePackageJSON(packageName) {
let pnpapiPath = any([".pnp.js", ".pnp.cjs"], {
cwd: this.primaryPackageJson.operationDir,
last: getProjectRoot()
});
if (pnpapiPath)
try {
let pnpApi = await import(pathToFileURL(pnpapiPath).href), resolvedPath = pnpApi.resolveToUnqualified(packageName, this.cwd, {
considerBuiltins: !1
}), pkgLocator = pnpApi.findPackageLocator(resolvedPath), pkg = pnpApi.getPackageInformation(pkgLocator);
return JSON.parse(
readFileSync11(join13(pkg.packageLocation, "package.json"), "utf-8")
);
} catch (error) {
return error.code !== "MODULE_NOT_FOUND" && console.error("Error while fetching package version in PNPM PnP mode:", error), null;
}
let wantedPath = join13("node_modules", packageName, "package.json"), packageJsonPath = up2(wantedPath, {
cwd: this.primaryPackageJson.operationDir,
last: getProjectRoot()
});
return packageJsonPath ? JSON.parse(readFileSync11(packageJsonPath, "utf-8")) : null;
}
getResolutions(packageJson, versions) {
return {
overrides: {
...packageJson.overrides,
...versions
}
};
}
async getDeclaredVersionSpecifier(packageName) {
let specifier = await super.getDeclaredVersionSpecifier(packageName);
if (specifier)
return specifier;
let catalogName = this.#getCatalogName(this.getAllDependencies()[packageName]);
if (catalogName === null)
return null;
let workspace = this.#readWorkspaceYaml();
if (!workspace)
return null;
let version = workspace.doc.getIn([
...this.#catalogKeyPath(workspace.doc, catalogName),
packageName
]);
return typeof version == "string" || typeof version == "number" ? String(version) : null;
}
applyVersionToRelatedPackages(packages, version, anchorPackage) {
let catalogName = this.#getCatalogName(this.getAllDependencies()[anchorPackage]);
return catalogName !== null && this.#registerCatalogEntries(packages, version, anchorPackage, catalogName) ? packages.map((pkg) => `${pkg}@catalog:${catalogName}`) : super.applyVersionToRelatedPackages(packages, version, anchorPackage);
}
/**
* If `specifier` is a pnpm catalog reference (`catalog:` / `catalog:<name>`), return the catalog
* name (`''` for the default catalog); otherwise return null.
*/
#getCatalogName(specifier) {
let match = specifier?.match(/^catalog:(.*)$/);
return match ? match[1].trim() : null;
}
/**
* Locate and parse the `pnpm-workspace.yaml` that governs this project's catalogs, walking up
* from the package.json we operate on. Returns null when the file is missing or malformed.
*/
#readWorkspaceYaml() {
let path5 = up2("pnpm-workspace.yaml", {
cwd: this.primaryPackageJson.operationDir,
last: getProjectRoot()
});
if (!path5)
return null;
try {
let doc = (0, import_yaml.parseDocument)(readFileSync11(path5, "utf8"));
if (doc.errors.length > 0)
throw doc.errors[0];
return { path: path5, doc };
} catch (e) {
return logger15.debug(`Could not read pnpm workspace file ${path5}: ${String(e)}`), null;
}
}
/**
* The key path within a parsed `pnpm-workspace.yaml` for a catalog. Named catalogs live under
* `catalogs.<name>`. The default catalog (referenced as `catalog:` or `catalog:default`) may be
* defined either as top-level `catalog` or as `catalogs.default` — defining both is a pnpm config
* error, so follow whichever form the workspace already uses.
*/
#catalogKeyPath(doc, catalogName) {
return catalogName && catalogName !== "default" ? ["catalogs", catalogName] : doc.hasIn(["catalogs", "default"]) ? ["catalogs", "default"] : ["catalog"];
}
/**
* Register `packages` in the same catalog as `anchorPackage`, editing `pnpm-workspace.yaml` via
* the `yaml` document API so the user's comments and formatting are preserved. The pnpm CLI can't
* do this: `pnpm config set` rejects scoped keys and `pnpm add --save-catalog` writes a resolved
* direct version whenever the requested range doesn't match an existing entry. Entries the user
* already pinned are never overridden. Returns whether the entries are now present, i.e. whether
* `catalog:` references to them will resolve.
*/
#registerCatalogEntries(packages, version, anchorPackage, catalogName) {
let workspace = this.#readWorkspaceYaml();
if (!workspace)
return logger15.warn(
`Could not read pnpm-workspace.yaml to register catalog entries for: ${packages.join(", ")}`
), !1;
try {
let keyPath = this.#catalogKeyPath(workspace.doc, catalogName), anchorVersion = workspace.doc.getIn([...keyPath, anchorPackage]), entryVersion = typeof anchorVersion == "string" || typeof anchorVersion == "number" ? String(anchorVersion) : version, changed = !1;
for (let pkg of packages)
workspace.doc.getIn([...keyPath, pkg]) === void 0 && (workspace.doc.setIn([...keyPath, pkg], entryVersion), changed = !0);
return changed && writeFileSync5(workspace.path, workspace.doc.toString(), "utf8"), !0;
} catch (e) {
return logger15.warn(`Could not update pnpm catalog in ${workspace.path}: ${String(e)}`), !1;
}
}
runInstall(options) {
return executeCommand({
command: "pnpm",
args: ["install", ...this.getInstallArgs(), ...options?.force ? ["--force"] : []],
stdio: prompt5.getPreferredStdio(),
cwd: this.cwd
});
}
async installDependencies(options) {
try {
await super.installDependencies(options);
} catch (error) {
let logs = getErrorLogs(error);
if (logs.includes("ERR_PNPM_NO_MATURE_MATCHING_VERSION")) {
let handledError = new MinimumReleaseAgeHandledError3({
packageManagerName: "pnpm",
minimumReleaseAgeConfigName: "minimumReleaseAge",
minimumReleaseAgeConfigDocs: "https://pnpm.io/settings#minimumreleaseage",
minimumReleaseAgeExclusionsConfigName: "minimumReleaseAgeExclude",
minimumReleaseAgeExclusionsConfigDocs: "https://pnpm.io/settings#minimumreleaseageexclude",
failedPackage: this.extractFailedPackage(logs),
cause: error
});
throw logger15.error(handledError.message), handledError;
}
throw error;
}
}
async precheckStorybookPackageInstall({
storybookVersion,
nonInteractive,
installContext
}) {
let minimumReleaseAge = await this.getMinimumReleaseAge();
if (!minimumReleaseAge || hasStorybookMinimumAgeExclusions(await this.getMinimumReleaseAgeExclude()))
return;
let publishedAt = await this.getPackageReleaseTime("storybook", storybookVersion);
if (!publishedAt || getAgeInMinutes(publishedAt, /* @__PURE__ */ new Date()) >= minimumReleaseAge)
return;
let compatibleVersion = await this.getLatestStableVersionAdheringToMinimumReleaseAge(
"storybook",
minimumReleaseAge
);
if (nonInteractive) {
await this.updateMinimumReleaseAgeExclude(), logger15.info(
import_ts_dedent12.dedent`
pnpm minimumReleaseAge would block storybook@${storybookVersion} from being installed because it was released within the configured minimumReleaseAge window, so Storybook updated minimumReleaseAgeExclude for this project automatically.
Added patterns: storybook, @storybook/*, eslint-plugin-storybook, @chromatic-com/storybook
Read more:
- https://pnpm.io/settings#minimumreleaseage
- https://pnpm.io/settings#minimumreleaseageexclude
`
);
return;
}
logger15.warn(
`pnpm minimumReleaseAge will block storybook@${storybookVersion} from being installed because it was published within the configured minimum-release-age window.`
);
let rerunError = new MinimumReleaseAgeHandledError3({
message: this.createMinimumReleaseAgeRerunMessage({
currentVersion: storybookVersion,
compatibleVersion,
installContext
})
});
if (await prompt5.select(
{
message: "How would you like to proceed?",
options: [
{
label: "Update pnpm config to exclude Storybook packages",
value: "exclude"
},
{
label: compatibleVersion ? `Stop now and rerun with the most recent allowed release: storybook@${compatibleVersion}` : "Stop now and rerun with an older stable Storybook release later",
value: "rerun"
}
]
},
{
onCancel: () => {
throw logger15.error(rerunError.message), rerunError;
}
}
) === "exclude") {
await this.updateMinimumReleaseAgeExclude();
return;
}
throw logger15.error(rerunError.message), rerunError;
}
runAddDeps(dependencies, installAsDevDependencies) {
let args = [...dependencies];
installAsDevDependencies && (args = ["-D", ...args]);
let commandArgs = ["add", ...args, ...this.getInstallArgs()];
return executeCommand({
command: "pnpm",
args: commandArgs,
stdio: prompt5.getPreferredStdio(),
cwd: this.primaryPackageJson.operationDir
});
}
async runGetVersions(packageName, fetchAllVersions) {
let args = fetchAllVersions ? ["versions", "--json"] : ["version"];
try {
let result = await executeCommand({
command: "pnpm",
args: ["info", packageName, ...args]
}), commandResult = typeof result.stdout == "string" ? result.stdout : "", parsedOutput = fetchAllVersions ? JSON.parse(commandResult) : commandResult.trim();
if (parsedOutput.error?.summary)
throw parsedOutput.error.summary;
return parsedOutput;
} catch (error) {
throw new FindPackageVersionsError3({
error,
packageManager: "PNPM",
packageName
});
}
}
mapDependencies(input, pattern) {
let acc = {}, existingVersions = {}, duplicatedDependencies = {}, items = input.reduce((curr, item) => {
let { devDependencies, dependencies, peerDependencies } = item, allDependencies = { ...devDependencies, ...dependencies, ...peerDependencies };
return Object.assign(curr, allDependencies);
}, {}), recurse = ([name, packageInfo]) => {
if (!name || !pattern.some((p) => new RegExp(`^${p.replace(/\*/g, ".*")}$`).test(name)))
return;
let value = {
version: packageInfo.version,
location: ""
};
existingVersions[name]?.includes(value.version) || (acc[name] ? acc[name].push(value) : acc[name] = [value], existingVersions[name] = [...existingVersions[name] || [], value.version], existingVersions[name].length > 1 && (duplicatedDependencies[name] = existingVersions[name])), packageInfo.dependencies && Object.entries(packageInfo.dependencies).forEach(recurse);
};
return Object.entries(items).forEach(recurse), {
dependencies: acc,
duplicatedDependencies,
infoCommand: "pnpm list --depth=1",
dedupeCommand: "pnpm dedupe"
};
}
extractFailedPackage(logs) {
let match = logs.match(
/Version\s+([^\s]+)\s+\([^)]*\)\s+of\s+((?:@[^/\s]+\/)?[^\s]+)\s+does not meet the minimumReleaseAge constraint/
);
if (!match)
return null;
let [, version, packageName] = match;
return `${packageName}@${version}`;
}
async getMinimumReleaseAge() {
let result = await this.runInternalCommand(
"config",
["get", "minimumReleaseAge"],
void 0,
"pipe"
);
return parsePositiveIntegerConfigValue(
typeof result.stdout == "string" ? result.stdout : void 0
);
}
async getPackageReleaseTime(packageName, version) {
let result = await this.runInternalCommand(
"view",
["--json", packageName, `time[${version}]`],
void 0,
"pipe"
), normalizedValue = typeof result.stdout == "string" ? result.stdout.trim() : "";
return normalizedValue ? parseReleaseTime(JSON.parse(normalizedValue)) : null;
}
async getLatestStableVersionAdheringToMinimumReleaseAge(packageName, minimumReleaseAgeMinutes, now = /* @__PURE__ */ new Date()) {
let result = await this.runInternalCommand(
"view",
["--json", packageName, "time"],
void 0,
"pipe"
), normalizedValue = typeof result.stdout == "string" ? result.stdout.trim() : "";
if (!normalizedValue)
return null;
let timeMap = parsePackageTimeMap(JSON.parse(normalizedValue));
return timeMap ? getLatestStableVersionAdheringToMinimumAgeGate(timeMap, minimumReleaseAgeMinutes, now) : null;
}
createMinimumReleaseAgeRerunMessage({
currentVersion,
compatibleVersion,
installContext
}) {
let rerunCommand = getStorybookRerunCommand(installContext, compatibleVersion), rerunInstruction = getStorybookRerunInstruction(installContext);
return import_ts_dedent12.dedent`
pnpm minimumReleaseAge blocked storybook@${currentVersion} from being installed.
${rerunInstruction}
${rerunCommand}
Read more:
- https://pnpm.io/settings#minimumreleaseage
`;
}
async updateMinimumReleaseAgeExclude() {
let currentMinimumReleaseAgeExclude = await this.getMinimumReleaseAgeExclude(), nextMinimumReleaseAgeExclude = Array.from(
/* @__PURE__ */ new Set([...currentMinimumReleaseAgeExclude, ...STORYBOOK_PACKAGE_PATTERNS])
);
await prompt5.executeTaskWithSpinner(
() => this.runInternalCommand(
"config",
[
"set",
"--location=project",
"--json",
"minimumReleaseAgeExclude",
JSON.stringify(nextMinimumReleaseAgeExclude)
],
void 0,
"pipe"
),
{
id: "update-pnpm-minimum-release-age-exclude",
intro: "Updating pnpm minimumReleaseAgeExclude...",
error: "Failed to update pnpm minimumReleaseAgeExclude.",
success: "Updated pnpm minimumReleaseAgeExclude"
}
);
}
async getMinimumReleaseAgeExclude() {
let result = await this.runInternalCommand(
"config",
["get", "minimumReleaseAgeExclude", "--json"],
void 0,
"pipe"
), normalizedValue = typeof result.stdout == "string" ? result.stdout.trim() : "";
if (!normalizedValue || normalizedValue === "undefined" || normalizedValue === "null")
return [];
let parsedValue = JSON.parse(normalizedValue);
return Array.isArray(parsedValue) ? parsedValue.filter(
(value) => typeof value == "string" && value.length > 0
) : [];
}
};
// src/common/js-package-manager/Yarn1Proxy.ts
import { readFileSync as readFileSync12 } from "node:fs";
import { join as join14 } from "node:path";
import process10 from "node:process";
import { logger as logger16, prompt as prompt6 } from "storybook/internal/node-logger";
import { FindPackageVersionsError as FindPackageVersionsError4 } from "storybook/internal/server-errors";
var Yarn1Proxy = class extends JsPackageManager {
constructor() {
super(...arguments);
this.type = "yarn1" /* YARN1 */;
}
getInstallArgs() {
return this.installArgs || (this.installArgs = process10.env.CI ? [] : ["--ignore-workspace-root-check"]), this.installArgs;
}
getCommandName() {
return "yarn";
}
getRunCommand(command) {
return `yarn ${command}`;
}
getInstallCommand(deps, dev) {
return `yarn add ${dev ? "-D " : ""}${deps.join(" ")}`;
}
getPackageCommand(args) {
let [command, ...rest] = args;
return `yarn exec ${command} -- ${rest.join(" ")}`;
}
runPackageCommand({
args,
useRemotePkg = !1,
...options
}) {
let [command, ...rest] = args;
return useRemotePkg ? executeCommand({
command: "npx",
args
}) : executeCommand({
command: "yarn",
args: ["exec", command, "--", ...rest],
...options
});
}
runInternalCommand(command, args, cwd, stdio) {
return executeCommand({
command: "yarn",
args: [command, ...args],
cwd: cwd ?? this.cwd,
stdio
});
}
async getModulePackageJSON(packageName) {
let wantedPath = join14("node_modules", packageName, "package.json"), packageJsonPath = up2(wantedPath, {
cwd: this.primaryPackageJson.operationDir,
last: getProjectRoot()
});
return packageJsonPath ? JSON.parse(readFileSync12(packageJsonPath, "utf-8")) : null;
}
async getRegistryURL() {
let childProcess = await executeCommand({
command: "yarn",
args: ["config", "get", "registry"]
}), url = (typeof childProcess.stdout == "string" ? childProcess.stdout : "").trim();
return url === "undefined" ? void 0 : url;
}
async findInstallations(pattern, { depth = 99 } = {}) {
let yarnArgs = ["list", "--pattern", pattern.map((p) => `"${p}"`).join(" "), "--json"];
depth !== 0 && yarnArgs.push("--recursive");
try {
let result = await executeCommand({
command: "yarn",
args: yarnArgs.concat(pattern),
shell: !0,
env: {
FORCE_COLOR: "false"
},
cwd: this.instanceDir
}), commandResult = typeof result.stdout == "string" ? result.stdout : "", parsedOutput = JSON.parse(commandResult);
return this.mapDependencies(parsedOutput, pattern);
} catch (e) {
logger16.debug(`Error finding installations for ${pattern.join(", ")}: ${String(e)}`);
return;
}
}
getResolutions(packageJson, versions) {
return {
resolutions: {
...packageJson.resolutions,
...versions
}
};
}
runInstall(options) {
return executeCommand({
command: "yarn",
args: ["install", ...this.getInstallArgs(), ...options?.force ? ["--force"] : []],
stdio: prompt6.getPreferredStdio(),
cwd: this.cwd
});
}
runAddDeps(dependencies, installAsDevDependencies) {
let args = [...dependencies];
return installAsDevDependencies && (args = ["-D", ...args]), executeCommand({
command: "yarn",
args: ["add", ...this.getInstallArgs(), ...args],
stdio: prompt6.getPreferredStdio(),
cwd: this.primaryPackageJson.operationDir
});
}
async runGetVersions(packageName, fetchAllVersions) {
let args = [fetchAllVersions ? "versions" : "version", "--json"];
try {
let result = await executeCommand({
command: "yarn",
args: ["info", packageName, ...args]
}), commandResult = typeof result.stdout == "string" ? result.stdout : "", parsedOutput = JSON.parse(commandResult);
if (parsedOutput.type === "inspect")
return parsedOutput.data;
throw new Error("Yarn did not provide an output with type 'inspect'.");
} catch (error) {
throw new FindPackageVersionsError4({
error,
packageManager: "Yarn 1",
packageName
});
}
}
mapDependencies(input, pattern) {
if (input.type === "tree") {
let { trees } = input.data, acc = {}, existingVersions = {}, duplicatedDependencies = {}, recurse = (tree) => {
let { children } = tree, { name, value } = parsePackageData(tree.name);
!name || !pattern.some((p) => new RegExp(`^${p.replace(/\*/g, ".*")}$`).test(name)) || (existingVersions[name]?.includes(value.version) || (acc[name] ? acc[name].push(value) : acc[name] = [value], existingVersions[name] = [...existingVersions[name] || [], value.version], existingVersions[name].length > 1 && (duplicatedDependencies[name] = existingVersions[name])), children.forEach(recurse));
};
return trees.forEach(recurse), {
dependencies: acc,
duplicatedDependencies,
infoCommand: "yarn why",
dedupeCommand: "yarn dedupe"
};
}
throw new Error("Something went wrong while parsing yarn output");
}
};
// src/common/js-package-manager/Yarn2Proxy.ts
var import_fslib = __toESM(require_lib(), 1), import_libzip = __toESM(require_sync(), 1);
import { readFileSync as readFileSync13 } from "node:fs";
import { join as join15 } from "node:path";
import { pathToFileURL as pathToFileURL2 } from "node:url";
import { prompt as prompt7 } from "storybook/internal/node-logger";
import {
FindPackageVersionsError as FindPackageVersionsError5,
MinimumReleaseAgeHandledError as MinimumReleaseAgeHandledError4
} from "storybook/internal/server-errors";
var import_ts_dedent13 = __toESM(require_dist(), 1);
var Yarn2Proxy = class extends JsPackageManager {
constructor() {
super(...arguments);
this.type = "yarn2" /* YARN2 */;
}
getInstallArgs() {
return this.installArgs || (this.installArgs = []), this.installArgs;
}
getCommandName() {
return "yarn";
}
getRunCommand(command) {
return `yarn ${command}`;
}
getInstallCommand(deps, dev) {
return `yarn add ${dev ? "-D " : ""}${deps.join(" ")}`;
}
getPackageCommand(args) {
return `yarn exec ${args.join(" ")}`;
}
runPackageCommand({
args,
useRemotePkg = !1,
...options
}) {
return executeCommand({
command: "yarn",
args: [useRemotePkg ? "dlx" : "exec", ...args],
...options
});
}
runInternalCommand(command, args, cwd, stdio) {
return executeCommand({
command: "yarn",
args: [command, ...args],
cwd: cwd ?? this.cwd,
stdio
});
}
async findInstallations(pattern, { depth = 99 } = {}) {
let yarnArgs = ["info", "--name-only"];
depth !== 0 && yarnArgs.push("--recursive");
try {
let childProcess = await executeCommand({
command: "yarn",
args: yarnArgs.concat(pattern),
env: {
FORCE_COLOR: "false"
},
cwd: this.instanceDir
}), commandResult = typeof childProcess.stdout == "string" ? childProcess.stdout : "";
return logger.debug(`Installation found for ${pattern.join(", ")}: ${commandResult}`), this.mapDependencies(commandResult, pattern);
} catch (e) {
logger.debug(`Error finding installations for ${pattern.join(", ")}: ${String(e)}`);
return;
}
}
// TODO: Remove pnp compatibility code in SB11
async getModulePackageJSON(packageName) {
let pnpapiPath = any([".pnp.js", ".pnp.cjs"], {
cwd: this.primaryPackageJson.operationDir,
last: getProjectRoot()
});
if (pnpapiPath)
try {
let { default: pnpApi } = await import(pathToFileURL2(pnpapiPath).href), resolvedPath = pnpApi.resolveToUnqualified(
packageName,
this.primaryPackageJson.operationDir,
{
considerBuiltins: !1
}
), pkgLocator = pnpApi.findPackageLocator(resolvedPath), pkg = pnpApi.getPackageInformation(pkgLocator), zipOpenFs = new import_fslib.ZipOpenFS({
libzip: (0, import_libzip.getLibzipSync)()
}), virtualFs = new import_fslib.VirtualFS({ baseFs: zipOpenFs }), crossFs = new import_fslib.PosixFS(virtualFs), virtualPath = join15(pkg.packageLocation, "package.json");
return crossFs.readJsonSync(virtualPath);
} catch (error) {
return error.code !== "ERR_MODULE_NOT_FOUND" && console.error("Error while fetching package version in Yarn PnP mode:", error), null;
}
let wantedPath = join15("node_modules", packageName, "package.json"), packageJsonPath = up2(wantedPath, {
cwd: this.primaryPackageJson.operationDir,
last: getProjectRoot()
});
return packageJsonPath ? JSON.parse(readFileSync13(packageJsonPath, "utf-8")) : null;
}
getResolutions(packageJson, versions) {
return {
resolutions: {
...packageJson.resolutions,
...versions
}
};
}
runInstall() {
return executeCommand({
command: "yarn",
args: ["install", ...this.getInstallArgs()],
cwd: this.cwd,
stdio: prompt7.getPreferredStdio()
});
}
async installDependencies(options) {
try {
await super.installDependencies(options);
} catch (error) {
let logs = getErrorLogs(error);
if (logs.includes("YN0016") && logs.includes("quarantined")) {
let handledError = new MinimumReleaseAgeHandledError4({
packageManagerName: "yarn",
minimumReleaseAgeConfigName: "npmMinimalAgeGate",
minimumReleaseAgeConfigDocs: "https://yarnpkg.com/configuration/yarnrc#npmMinimalAgeGate",
minimumReleaseAgeExclusionsConfigName: "npmPreapprovedPackages",
minimumReleaseAgeExclusionsConfigDocs: "https://yarnpkg.com/configuration/yarnrc#npmPreapprovedPackages",
failedPackage: this.extractQuarantinedPackage(logs),
cause: error
});
throw logger.error(handledError.message), handledError;
}
throw error;
}
}
async precheckStorybookPackageInstall({
storybookVersion,
nonInteractive,
installContext
}) {
let minimumAgeGate = await this.getMinimumAgeGate();
if (!minimumAgeGate || hasStorybookMinimumAgeExclusions(await this.getPreapprovedPackages()))
return;
let timeMap = await this.getPackageTimeMap("storybook");
if (!timeMap)
return;
let releaseTime = timeMap[storybookVersion];
if (!releaseTime)
return;
let publishedAt = parseReleaseTime(releaseTime);
if (!publishedAt || getAgeInMinutes(publishedAt, /* @__PURE__ */ new Date()) >= minimumAgeGate)
return;
let compatibleVersion = getLatestStableVersionAdheringToMinimumAgeGate(
timeMap,
minimumAgeGate
);
if (nonInteractive) {
await this.updatePreapprovedPackages(), logger.info(
import_ts_dedent13.dedent`
yarn npmMinimalAgeGate would block storybook@${storybookVersion} from being installed because it was released within the configured npmMinimalAgeGate window, so Storybook updated npmPreapprovedPackages for this project automatically.
Added patterns: storybook, @storybook/*, eslint-plugin-storybook, @chromatic-com/storybook
Read more:
- https://yarnpkg.com/configuration/yarnrc#npmMinimalAgeGate
- https://yarnpkg.com/configuration/yarnrc#npmPreapprovedPackages
`
);
return;
}
logger.warn(
`yarn npmMinimalAgeGate will block storybook@${storybookVersion} from being installed because it was published within the configured minimum-release-age window.`
);
let rerunError = new MinimumReleaseAgeHandledError4({
message: this.createMinimalAgeGateRerunMessage({
currentVersion: storybookVersion,
compatibleVersion,
installContext
})
});
if (await prompt7.select(
{
message: "How would you like to proceed?",
options: [
{
label: "Update yarn config to preapprove Storybook packages",
value: "exclude"
},
{
label: compatibleVersion ? `Stop now and rerun with the most recent allowed release: storybook@${compatibleVersion}` : "Stop now and rerun with an older stable Storybook release later",
value: "rerun"
}
]
},
{
onCancel: () => {
throw logger.error(rerunError.message), rerunError;
}
}
) === "exclude") {
await this.updatePreapprovedPackages();
return;
}
throw logger.error(rerunError.message), rerunError;
}
runAddDeps(dependencies, installAsDevDependencies) {
let args = [...dependencies];
return installAsDevDependencies && (args = ["-D", ...args]), executeCommand({
command: "yarn",
args: ["add", ...this.getInstallArgs(), ...args],
stdio: prompt7.getPreferredStdio(),
cwd: this.primaryPackageJson.operationDir
});
}
async getRegistryURL() {
let result = await executeCommand({
command: "yarn",
args: ["config", "get", "npmRegistryServer"]
}), url = (typeof result.stdout == "string" ? result.stdout : "").trim();
return url === "undefined" ? void 0 : url;
}
async runGetVersions(packageName, fetchAllVersions) {
let field = fetchAllVersions ? "versions" : "version", args = ["--fields", field, "--json"];
try {
let result = await executeCommand({
command: "yarn",
args: ["npm", "info", packageName, ...args]
}), commandResult = typeof result.stdout == "string" ? result.stdout : "";
return JSON.parse(commandResult)[field];
} catch (error) {
throw new FindPackageVersionsError5({
error,
packageManager: "Yarn Berry",
packageName
});
}
}
mapDependencies(input, pattern) {
let lines = input.split(`
`), acc = {}, existingVersions = {}, duplicatedDependencies = {};
return lines.forEach((packageName) => {
if (logger.debug(`Processing package ${packageName}`), !packageName || !pattern.some((p) => new RegExp(`${p.replace(/\*/g, ".*")}`).test(packageName)))
return;
let { name, value } = parsePackageData(packageName.replaceAll('"', ""));
logger.debug(`Package ${name} found with version ${value.version}`), existingVersions[name]?.includes(value.version) || (acc[name] ? acc[name].push(value) : acc[name] = [value], existingVersions[name] = [...existingVersions[name] || [], value.version], existingVersions[name].length > 1 && (duplicatedDependencies[name] = existingVersions[name]));
}), {
dependencies: acc,
duplicatedDependencies,
infoCommand: "yarn why",
dedupeCommand: "yarn dedupe"
};
}
extractQuarantinedPackage(logs) {
let match = logs.match(
/│\s+((?:@[^/\s]+\/)?[^@\s]+)@npm:([^:\s]+):\s+All versions satisfying/
);
if (!match)
return null;
let [, packageName, version] = match;
return `${packageName}@${version}`;
}
async getMinimumAgeGate() {
try {
let result = await this.runInternalCommand(
"config",
["get", "npmMinimalAgeGate"],
void 0,
"pipe"
);
return parsePositiveIntegerConfigValue(
typeof result.stdout == "string" ? result.stdout : void 0
);
} catch {
return null;
}
}
async getPackageTimeMap(packageName) {
let result = await this.runInternalCommand(
"npm",
["info", packageName, "--fields", "time", "--json"],
void 0,
"pipe"
), normalizedValue = typeof result.stdout == "string" ? result.stdout.trim() : "";
return normalizedValue ? parsePackageTimeMap(JSON.parse(normalizedValue)?.time) : null;
}
createMinimalAgeGateRerunMessage({
currentVersion,
compatibleVersion,
installContext
}) {
let rerunCommand = getStorybookRerunCommand(installContext, compatibleVersion), rerunInstruction = getStorybookRerunInstruction(installContext);
return import_ts_dedent13.dedent`
yarn npmMinimalAgeGate blocked storybook@${currentVersion} from being installed.
${rerunInstruction}
${rerunCommand}
Read more:
- https://yarnpkg.com/configuration/yarnrc#npmMinimalAgeGate
`;
}
async updatePreapprovedPackages() {
let currentPreapprovedPackages = await this.getPreapprovedPackages(), nextPreapprovedPackages = Array.from(
/* @__PURE__ */ new Set([...currentPreapprovedPackages, ...STORYBOOK_PACKAGE_PATTERNS])
);
await prompt7.executeTaskWithSpinner(
() => this.runInternalCommand(
"config",
["set", "npmPreapprovedPackages", "--json", JSON.stringify(nextPreapprovedPackages)],
void 0,
"pipe"
),
{
id: "update-yarn-npm-preapproved-packages",
intro: "Updating yarn npmPreapprovedPackages...",
error: "Failed to update yarn npmPreapprovedPackages.",
success: "Updated yarn npmPreapprovedPackages"
}
);
}
async getPreapprovedPackages() {
try {
let result = await this.runInternalCommand(
"config",
["get", "npmPreapprovedPackages"],
void 0,
"pipe"
), normalizedValue = typeof result.stdout == "string" ? result.stdout.trim() : "";
return normalizedValue ? this.parsePreapprovedPackages(normalizedValue) : [];
} catch {
return [];
}
}
parsePreapprovedPackages(value) {
try {
let parsedValue = JSON.parse(value);
return Array.isArray(parsedValue) ? parsedValue.filter(
(entry) => typeof entry == "string" && entry.length > 0
) : [];
} catch {
return Array.from(value.matchAll(/['"]([^'"\n]+)['"]/g), (match) => match[1]);
}
}
};
// src/common/js-package-manager/JsPackageManagerFactory.ts
var JsPackageManagerFactory = class {
static {
/** Cache for package manager instances */
this.cache = /* @__PURE__ */ new Map();
}
/** Generate a cache key based on the parameters */
static getCacheKey(force, configDir = ".storybook", cwd = process.cwd(), storiesPaths) {
return JSON.stringify({ force: force || null, configDir, cwd, storiesPaths });
}
/** Clear the package manager cache */
static clearCache() {
this.cache.clear();
}
/**
* Determine which package manager type to use based on lockfiles, commands, and environment
*
* @param cwd - Current working directory
* @returns Package manager type as string: 'npm', 'pnpm', 'bun', 'yarn1', or 'yarn2'
* @throws Error if no usable package manager is found
*/
static getPackageManagerType(cwd = process.cwd()) {
let root = getProjectRoot(), closestLockfilePath = [
up2(YARN_LOCKFILE, { cwd, last: root }),
up2(PNPM_LOCKFILE, { cwd, last: root }),
up2(NPM_LOCKFILE, { cwd, last: root }),
up2(BUN_LOCKFILE, { cwd, last: root }),
up2(BUN_LOCKFILE_BINARY, { cwd, last: root })
].filter(Boolean).sort((a2, b) => {
let dirA = parse3(a2).dir, dirB = parse3(b).dir, compare = relative5(dirA, dirB);
return dirA === dirB ? 0 : compare.startsWith("..") ? -1 : 1;
})[0], closestLockfile = closestLockfilePath && basename4(closestLockfilePath), yarnVersion = getYarnVersion(cwd);
if (yarnVersion && closestLockfile === YARN_LOCKFILE)
return yarnVersion === 1 ? "yarn1" /* YARN1 */ : "yarn2" /* YARN2 */;
if (hasPNPM(cwd) && closestLockfile === PNPM_LOCKFILE)
return "pnpm" /* PNPM */;
let isNPMCommandOk = hasNPM(cwd);
if (isNPMCommandOk && closestLockfile === NPM_LOCKFILE)
return "npm" /* NPM */;
if (hasBun(cwd) && (closestLockfile === BUN_LOCKFILE || closestLockfile === BUN_LOCKFILE_BINARY))
return "bun" /* BUN */;
let inferredPackageManager = this.inferPackageManagerFromUserAgent();
if (inferredPackageManager && inferredPackageManager in this.PROXY_MAP)
return inferredPackageManager;
if (isNPMCommandOk)
return "npm" /* NPM */;
throw new Error("Unable to find a usable package manager within NPM, PNPM, Yarn and Yarn 2");
}
static getPackageManager({
force,
configDir = ".storybook",
storiesPaths,
ignoreCache = !1
} = {}, cwd = process.cwd()) {
let cacheKey = this.getCacheKey(force, configDir, cwd, storiesPaths), cached = this.cache.get(cacheKey);
if (cached && !ignoreCache)
return cached;
if (force && force in this.PROXY_MAP) {
let packageManager2 = new this.PROXY_MAP[force]({
cwd,
configDir,
storiesPaths
});
return this.cache.set(cacheKey, packageManager2), packageManager2;
}
let packageManagerType = this.getPackageManagerType(cwd), packageManager = new this.PROXY_MAP[packageManagerType]({ cwd, configDir, storiesPaths });
return this.cache.set(cacheKey, packageManager), packageManager;
}
static {
/** Look up map of package manager proxies by name */
this.PROXY_MAP = {
npm: NPMProxy,
pnpm: PNPMProxy,
yarn1: Yarn1Proxy,
yarn2: Yarn2Proxy,
bun: BUNProxy
};
}
/**
* Infer the package manager based on the command the user is running. Each package manager sets
* the `npm_config_user_agent` environment variable with its name and version e.g. "npm/7.24.0"
* Which is really useful when invoking commands via npx/pnpx/yarn create/etc.
*/
static inferPackageManagerFromUserAgent() {
let userAgent = process.env.npm_config_user_agent;
if (userAgent) {
let packageSpec = userAgent.split(" ")[0], [pkgMgrName, pkgMgrVersion] = packageSpec.split("/");
if (pkgMgrName === "pnpm")
return "pnpm" /* PNPM */;
if (pkgMgrName === "npm")
return "npm" /* NPM */;
if (pkgMgrName === "yarn")
return pkgMgrVersion?.startsWith("1.") ? "yarn1" /* YARN1 */ : "yarn2" /* YARN2 */;
}
}
};
function hasNPM(cwd) {
try {
return executeCommandSync({
command: "npm",
args: ["--version"],
cwd,
env: Object.fromEntries(
Object.entries(process.env).filter(([, value]) => value !== void 0)
)
}), !0;
} catch {
return !1;
}
}
function hasBun(cwd) {
try {
return executeCommandSync({
command: "bun",
args: ["--version"],
cwd,
env: Object.fromEntries(
Object.entries(process.env).filter(([, value]) => value !== void 0)
)
}), !0;
} catch {
return !1;
}
}
function hasPNPM(cwd) {
try {
return executeCommandSync({
command: "pnpm",
args: ["--version"],
cwd,
env: Object.fromEntries(
Object.entries(process.env).filter(([, value]) => value !== void 0)
)
}), !0;
} catch {
return !1;
}
}
function getYarnVersionFromPackageJson(cwd, root) {
let effectiveRoot = root ?? getProjectRoot(), directories = up(cwd ?? process.cwd(), { last: effectiveRoot });
for (let dir of directories) {
let packageJsonPath = join16(dir, "package.json");
if (existsSync8(packageJsonPath))
try {
let packageManager = JSON.parse(readFileSync14(packageJsonPath, "utf-8")).packageManager;
if (typeof packageManager == "string") {
let match = packageManager.match(/^yarn@(\d+)\./);
if (match)
return match[1] === "1" ? 1 : 2;
}
} catch {
}
}
}
function hasYarnBerryConfig(cwd, root) {
return up2(".yarnrc.yml", { cwd, last: root }) !== void 0;
}
function getYarnVersion(cwd) {
let root = getProjectRoot(), versionFromPackageJson = getYarnVersionFromPackageJson(cwd, root);
if (versionFromPackageJson !== void 0)
return versionFromPackageJson;
let hasBerryConfig = hasYarnBerryConfig(cwd, root);
try {
let yarnVersion = executeCommandSync({
command: "yarn",
args: ["--version"],
cwd,
env: Object.fromEntries(
Object.entries(process.env).filter(([, value]) => value !== void 0)
)
});
return /^1\./.test(yarnVersion.trim()) ? hasBerryConfig ? 2 : 1 : 2;
} catch {
return hasBerryConfig ? 2 : void 0;
}
}
// src/common/utils/scan-and-transform-files.ts
import { logger as logger17, prompt as prompt8 } from "storybook/internal/node-logger";
async function scanAndTransformFiles({
promptMessage = "Enter a custom glob pattern to scan (or press enter to use default):",
defaultGlob = "**/*.{mjs,cjs,js,jsx,ts,tsx,mdx}",
dryRun = !1,
force = !1,
transformFn,
transformOptions
}) {
let glob2 = force ? defaultGlob : await prompt8.text({
message: promptMessage,
initialValue: defaultGlob
});
logger17.log("Scanning for affected files...");
let globby = (await import("./globby-HVEA7OTV.js")).globby, sourceFiles = await globby([glob2], {
...commonGlobOptions(""),
ignore: ["**/node_modules/**"],
dot: !0,
cwd: getProjectRoot(),
absolute: !0
});
return logger17.log(`Scanning ${sourceFiles.length} files...`), transformFn(sourceFiles, transformOptions, dryRun);
}
// src/common/utils/transform-imports.ts
import { readFile as readFile7, writeFile as writeFile4 } from "node:fs/promises";
function transformImports(source, renamedImports) {
let hasChanges = !1, transformed = source;
for (let [from2, to] of Object.entries(renamedImports)) {
let regex = new RegExp(`(['"])${from2}(/.*)?\\1`, "g");
regex.test(transformed) && (transformed = transformed.replace(regex, `$1${to}$2$1`), hasChanges = !0);
}
return hasChanges ? transformed : null;
}
var transformImportFiles = async (files, renamedImports, dryRun) => {
let errors = [], { default: pLimit } = await import("./p-limit-KZMUM7FO.js"), limit = pLimit(10);
return await Promise.all(
files.map(
(file) => limit(async () => {
try {
let contents = await readFile7(file, "utf-8"), transformed = transformImports(contents, renamedImports);
!dryRun && transformed && await writeFile4(file, transformed);
} catch (error) {
errors.push({ file, error });
}
})
)
), errors;
};
export {
RN_STORYBOOK_DIR,
up3 as up,
require_cross_spawn,
execa,
execaCommand,
supportedExtensions,
getInterpretedFile,
resolveImport,
validateConfigurationFiles,
filterPresetsConfig,
resolveAddonName,
loadPreset,
getPresets,
loadAllPresets,
FileSystemCache,
createFileSystemCache,
resolvePathInStorybookCache,
cache2 as cache,
temporaryDirectory,
temporaryFile,
parseList,
getEnvConfig,
createLogStream,
isCorePackage,
isSatelliteAddon,
checkAddonOrder,
commonGlobOptions,
frameworkToRenderer,
frameworkToBuilder,
getBuilderOptions,
HandledError,
getVitePlusVersions,
clearVitePlusCache,
PackageManagerName,
getPrettyPackageManagerName,
getPackageDetails,
JsPackageManager,
normalizeAddonName,
getAddonNames,
getRendererName,
extractRenderer,
getStorybookConfiguration,
loadMainConfig,
rendererPackages,
frameworkPackages,
builderPackages,
compilerPackages,
findConfigFile,
getConfigInfo,
getStorybookInfo,
getFrameworkName,
extractFrameworkPackageName,
readDependencyManifest,
getAutoRefs,
checkRef,
getRefs,
globToRegexp,
interpolate,
serverRequire,
loadManagerOrAddonsFile,
loadPreviewOrConfigFile,
logConfig,
DEFAULT_FILES_PATTERN,
getDirectoryFromWorkingDir,
normalizeStoriesEntry,
normalizeStories,
readTemplate,
removeAddon,
isPreservingSymlinks,
getPreviewBodyTemplate,
getPreviewHeadTemplate,
findTsconfigPath,
findTsconfigPathForFile,
findTsconfigPathForPath,
validateFrameworkName,
satisfies2 as satisfies,
getBabelPresetEnvMajor,
getPrettier,
formatFileContent,
userOrAutoTitleFromSpecifier,
posix3 as posix,
getStoryId,
getStoryTitle,
syncStorybookAddons,
syncPreviewAddonsWithMainConfig,
doesVariableOrFunctionDeclarationExist,
getAbsolutePathWrapperName,
isGetAbsolutePathWrapperNecessary,
getFieldsForGetAbsolutePathWrapper,
getAbsolutePathWrapperAsCallExpression,
wrapValueWithGetAbsolutePathWrapper,
setupAddonInConfig,
executeCommand,
executeCommandSync,
executeNodeCommand,
STORYBOOK_PACKAGE_PATTERNS,
hasStorybookMinimumAgeExclusions,
parsePackageData,
parsePositiveIntegerConfigValue,
parseReleaseTime,
parsePackageTimeMap,
getAgeInMinutes,
getLatestStableVersionAdheringToMinimumAgeGate,
getRemotePackageRunnerArgs,
getVitestStorybookRunCommand,
getMswInitCommand,
getStorybookRerunCommand,
getStorybookRerunInstruction,
getErrorLogs,
JsPackageManagerFactory,
scanAndTransformFiles,
transformImportFiles
};