projen
Version:
CDK for software projects
14,897 lines • 736 kB
JavaScript
"use strict";
var __getOwnPropNames = Object.getOwnPropertyNames;
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
// npm/script/_dnt.polyfills.js
var require_dnt_polyfills = __commonJS({
"npm/script/_dnt.polyfills.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
if (!Object.hasOwn) {
Object.defineProperty(Object, "hasOwn", {
value: function(object, property) {
if (object == null) {
throw new TypeError("Cannot convert undefined or null to object");
}
return Object.prototype.hasOwnProperty.call(Object(object), property);
},
configurable: true,
enumerable: false,
writable: true
});
}
if (Promise.withResolvers === void 0) {
Promise.withResolvers = () => {
const out = {};
out.promise = new Promise((resolve_, reject_) => {
out.resolve = resolve_;
out.reject = reject_;
});
return out;
};
}
function findLastIndex(self, callbackfn, that) {
const boundFunc = that === void 0 ? callbackfn : callbackfn.bind(that);
let index = self.length - 1;
while (index >= 0) {
const result = boundFunc(self[index], index, self);
if (result) {
return index;
}
index--;
}
return -1;
}
function findLast(self, callbackfn, that) {
const index = self.findLastIndex(callbackfn, that);
return index === -1 ? void 0 : self[index];
}
if (!Array.prototype.findLastIndex) {
Array.prototype.findLastIndex = function(callbackfn, that) {
return findLastIndex(this, callbackfn, that);
};
}
if (!Array.prototype.findLast) {
Array.prototype.findLast = function(callbackfn, that) {
return findLast(this, callbackfn, that);
};
}
if (!Uint8Array.prototype.findLastIndex) {
Uint8Array.prototype.findLastIndex = function(callbackfn, that) {
return findLastIndex(this, callbackfn, that);
};
}
if (!Uint8Array.prototype.findLast) {
Uint8Array.prototype.findLast = function(callbackfn, that) {
return findLast(this, callbackfn, that);
};
}
var { MAX_SAFE_INTEGER } = Number;
var iteratorSymbol = Symbol.iterator;
var asyncIteratorSymbol = Symbol.asyncIterator;
var IntrinsicArray = Array;
var tooLongErrorMessage = "Input is too long and exceeded Number.MAX_SAFE_INTEGER times.";
function isConstructor(obj) {
if (obj != null) {
const prox = new Proxy(obj, {
construct() {
return prox;
}
});
try {
new prox();
return true;
} catch (err) {
return false;
}
} else {
return false;
}
}
async function fromAsync(items, mapfn, thisArg) {
const itemsAreIterable = asyncIteratorSymbol in items || iteratorSymbol in items;
if (itemsAreIterable) {
const result = isConstructor(this) ? new this() : IntrinsicArray(0);
let i = 0;
for await (const v of items) {
if (i > MAX_SAFE_INTEGER) {
throw TypeError(tooLongErrorMessage);
} else if (mapfn) {
result[i] = await mapfn.call(thisArg, v, i);
} else {
result[i] = v;
}
i++;
}
result.length = i;
return result;
} else {
const { length } = items;
const result = isConstructor(this) ? new this(length) : IntrinsicArray(length);
let i = 0;
while (i < length) {
if (i > MAX_SAFE_INTEGER) {
throw TypeError(tooLongErrorMessage);
}
const v = await items[i];
if (mapfn) {
result[i] = await mapfn.call(thisArg, v, i);
} else {
result[i] = v;
}
i++;
}
result.length = i;
return result;
}
}
if (!Array.fromAsync) {
Array.fromAsync = fromAsync;
}
}
});
// npm/script/_dnt.shims.js
var require_dnt_shims = __commonJS({
"npm/script/_dnt.shims.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.dntGlobalThis = exports2.TransformStream = exports2.TextDecoderStream = exports2.WritableStream = exports2.ReadableStream = exports2.TextDecoder = void 0;
var node_util_12 = require("node:util");
var node_util_2 = require("node:util");
Object.defineProperty(exports2, "TextDecoder", { enumerable: true, get: function() {
return node_util_2.TextDecoder;
} });
var web_1 = require("node:stream/web");
var web_2 = require("node:stream/web");
Object.defineProperty(exports2, "ReadableStream", { enumerable: true, get: function() {
return web_2.ReadableStream;
} });
Object.defineProperty(exports2, "WritableStream", { enumerable: true, get: function() {
return web_2.WritableStream;
} });
Object.defineProperty(exports2, "TextDecoderStream", { enumerable: true, get: function() {
return web_2.TextDecoderStream;
} });
Object.defineProperty(exports2, "TransformStream", { enumerable: true, get: function() {
return web_2.TransformStream;
} });
var dntGlobals = {
TextDecoder: node_util_12.TextDecoder,
ReadableStream: web_1.ReadableStream,
WritableStream: web_1.WritableStream,
TextDecoderStream: web_1.TextDecoderStream,
TransformStream: web_1.TransformStream
};
exports2.dntGlobalThis = createMergeProxy(globalThis, dntGlobals);
function createMergeProxy(baseObj, extObj) {
return new Proxy(baseObj, {
get(_target, prop, _receiver) {
if (prop in extObj) {
return extObj[prop];
} else {
return baseObj[prop];
}
},
set(_target, prop, value) {
if (prop in extObj) {
delete extObj[prop];
}
baseObj[prop] = value;
return true;
},
deleteProperty(_target, prop) {
let success = false;
if (prop in extObj) {
delete extObj[prop];
success = true;
}
if (prop in baseObj) {
delete baseObj[prop];
success = true;
}
return success;
},
ownKeys(_target) {
const baseKeys = Reflect.ownKeys(baseObj);
const extKeys = Reflect.ownKeys(extObj);
const extKeysSet = new Set(extKeys);
return [...baseKeys.filter((k) => !extKeysSet.has(k)), ...extKeys];
},
defineProperty(_target, prop, desc) {
if (prop in extObj) {
delete extObj[prop];
}
Reflect.defineProperty(baseObj, prop, desc);
return true;
},
getOwnPropertyDescriptor(_target, prop) {
if (prop in extObj) {
return Reflect.getOwnPropertyDescriptor(extObj, prop);
} else {
return Reflect.getOwnPropertyDescriptor(baseObj, prop);
}
},
has(_target, prop) {
return prop in extObj || prop in baseObj;
}
});
}
}
});
// npm/script/deps/jsr.io/@std/fmt/1.0.10/colors.js
var require_colors = __commonJS({
"npm/script/deps/jsr.io/@std/fmt/1.0.10/colors.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.setColorEnabled = setColorEnabled;
exports2.getColorEnabled = getColorEnabled;
exports2.reset = reset;
exports2.bold = bold;
exports2.dim = dim;
exports2.italic = italic;
exports2.underline = underline;
exports2.inverse = inverse;
exports2.hidden = hidden;
exports2.strikethrough = strikethrough;
exports2.black = black;
exports2.red = red;
exports2.green = green;
exports2.yellow = yellow;
exports2.blue = blue;
exports2.magenta = magenta;
exports2.cyan = cyan;
exports2.white = white;
exports2.gray = gray;
exports2.brightBlack = brightBlack;
exports2.brightRed = brightRed;
exports2.brightGreen = brightGreen;
exports2.brightYellow = brightYellow;
exports2.brightBlue = brightBlue;
exports2.brightMagenta = brightMagenta;
exports2.brightCyan = brightCyan;
exports2.brightWhite = brightWhite;
exports2.bgBlack = bgBlack;
exports2.bgRed = bgRed;
exports2.bgGreen = bgGreen;
exports2.bgYellow = bgYellow;
exports2.bgBlue = bgBlue;
exports2.bgMagenta = bgMagenta;
exports2.bgCyan = bgCyan;
exports2.bgWhite = bgWhite;
exports2.bgBrightBlack = bgBrightBlack;
exports2.bgBrightRed = bgBrightRed;
exports2.bgBrightGreen = bgBrightGreen;
exports2.bgBrightYellow = bgBrightYellow;
exports2.bgBrightBlue = bgBrightBlue;
exports2.bgBrightMagenta = bgBrightMagenta;
exports2.bgBrightCyan = bgBrightCyan;
exports2.bgBrightWhite = bgBrightWhite;
exports2.rgb8 = rgb8;
exports2.bgRgb8 = bgRgb8;
exports2.rgb24 = rgb24;
exports2.bgRgb24 = bgRgb24;
exports2.stripAnsiCode = stripAnsiCode;
var dntShim = __importStar2(require_dnt_shims());
var { Deno } = dntShim.dntGlobalThis;
var noColor = typeof Deno?.noColor === "boolean" ? Deno.noColor : false;
var enabled = !noColor;
function setColorEnabled(value) {
if (Deno?.noColor) {
return;
}
enabled = value;
}
function getColorEnabled() {
return enabled;
}
function code(open, close) {
return {
open: `\x1B[${open.join(";")}m`,
close: `\x1B[${close}m`,
regexp: new RegExp(`\\x1b\\[${close}m`, "g")
};
}
function run(str, code2) {
return enabled ? `${code2.open}${str.replace(code2.regexp, code2.open)}${code2.close}` : str;
}
function reset(str) {
return run(str, code([0], 0));
}
function bold(str) {
return run(str, code([1], 22));
}
function dim(str) {
return run(str, code([2], 22));
}
function italic(str) {
return run(str, code([3], 23));
}
function underline(str) {
return run(str, code([4], 24));
}
function inverse(str) {
return run(str, code([7], 27));
}
function hidden(str) {
return run(str, code([8], 28));
}
function strikethrough(str) {
return run(str, code([9], 29));
}
function black(str) {
return run(str, code([30], 39));
}
function red(str) {
return run(str, code([31], 39));
}
function green(str) {
return run(str, code([32], 39));
}
function yellow(str) {
return run(str, code([33], 39));
}
function blue(str) {
return run(str, code([34], 39));
}
function magenta(str) {
return run(str, code([35], 39));
}
function cyan(str) {
return run(str, code([36], 39));
}
function white(str) {
return run(str, code([37], 39));
}
function gray(str) {
return brightBlack(str);
}
function brightBlack(str) {
return run(str, code([90], 39));
}
function brightRed(str) {
return run(str, code([91], 39));
}
function brightGreen(str) {
return run(str, code([92], 39));
}
function brightYellow(str) {
return run(str, code([93], 39));
}
function brightBlue(str) {
return run(str, code([94], 39));
}
function brightMagenta(str) {
return run(str, code([95], 39));
}
function brightCyan(str) {
return run(str, code([96], 39));
}
function brightWhite(str) {
return run(str, code([97], 39));
}
function bgBlack(str) {
return run(str, code([40], 49));
}
function bgRed(str) {
return run(str, code([41], 49));
}
function bgGreen(str) {
return run(str, code([42], 49));
}
function bgYellow(str) {
return run(str, code([43], 49));
}
function bgBlue(str) {
return run(str, code([44], 49));
}
function bgMagenta(str) {
return run(str, code([45], 49));
}
function bgCyan(str) {
return run(str, code([46], 49));
}
function bgWhite(str) {
return run(str, code([47], 49));
}
function bgBrightBlack(str) {
return run(str, code([100], 49));
}
function bgBrightRed(str) {
return run(str, code([101], 49));
}
function bgBrightGreen(str) {
return run(str, code([102], 49));
}
function bgBrightYellow(str) {
return run(str, code([103], 49));
}
function bgBrightBlue(str) {
return run(str, code([104], 49));
}
function bgBrightMagenta(str) {
return run(str, code([105], 49));
}
function bgBrightCyan(str) {
return run(str, code([106], 49));
}
function bgBrightWhite(str) {
return run(str, code([107], 49));
}
function clampAndTruncate(n, max = 255, min = 0) {
return Math.trunc(Math.max(Math.min(n, max), min));
}
function rgb8(str, color) {
return run(str, code([38, 5, clampAndTruncate(color)], 39));
}
function bgRgb8(str, color) {
return run(str, code([48, 5, clampAndTruncate(color)], 49));
}
function rgb24(str, color) {
if (typeof color === "number") {
return run(str, code([38, 2, color >> 16 & 255, color >> 8 & 255, color & 255], 39));
}
return run(str, code([
38,
2,
clampAndTruncate(color.r),
clampAndTruncate(color.g),
clampAndTruncate(color.b)
], 39));
}
function bgRgb24(str, color) {
if (typeof color === "number") {
return run(str, code([48, 2, color >> 16 & 255, color >> 8 & 255, color & 255], 49));
}
return run(str, code([
48,
2,
clampAndTruncate(color.r),
clampAndTruncate(color.g),
clampAndTruncate(color.b)
], 49));
}
var ANSI_REGEXP = new RegExp([
"[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)",
"(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TXZcf-nq-uy=><~]))"
].join("|"), "g");
function stripAnsiCode(string) {
return string.replace(ANSI_REGEXP, "");
}
}
});
// npm/script/deps/jsr.io/@david/which/0.7.1/mod.js
var require_mod = __commonJS({
"npm/script/deps/jsr.io/@david/which/0.7.1/mod.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.RealEnvironment = void 0;
exports2.which = which;
exports2.whichSync = whichSync;
var denoGlobal = globalThis.Deno;
var nodeProcess = globalThis.process;
var nodeFs;
function getNodeFs() {
return nodeFs ??= nodeProcess.getBuiltinModule("node:fs");
}
var RealEnvironment = class {
env(key) {
if (denoGlobal?.env) {
return denoGlobal.env.get(key);
}
return nodeProcess.env[key];
}
async stat(path) {
if (denoGlobal?.stat) {
return await denoGlobal.stat(path);
}
const info = await getNodeFs().promises.stat(path);
return { isFile: info.isFile() };
}
statSync(path) {
if (denoGlobal?.statSync) {
return denoGlobal.statSync(path);
}
const info = getNodeFs().statSync(path);
return { isFile: info.isFile() };
}
async lstat(path) {
if (denoGlobal?.lstat) {
return await denoGlobal.lstat(path);
}
const info = await getNodeFs().promises.lstat(path);
return { isFile: info.isFile(), isSymlink: info.isSymbolicLink() };
}
lstatSync(path) {
if (denoGlobal?.lstatSync) {
return denoGlobal.lstatSync(path);
}
const info = getNodeFs().lstatSync(path);
return { isFile: info.isFile(), isSymlink: info.isSymbolicLink() };
}
async readLink(path) {
if (denoGlobal?.readLink) {
return await denoGlobal.readLink(path);
}
return await getNodeFs().promises.readlink(path);
}
readLinkSync(path) {
if (denoGlobal?.readLinkSync) {
return denoGlobal.readLinkSync(path);
}
return getNodeFs().readlinkSync(path);
}
get isWindows() {
if (denoGlobal?.build?.os) {
return denoGlobal.build.os === "windows";
}
return nodeProcess.platform === "win32";
}
};
exports2.RealEnvironment = RealEnvironment;
async function which(command, environment = new RealEnvironment()) {
if (commandHasPathSeparator(command, environment.isWindows)) {
if (await pathMatches(environment, command)) {
return command;
}
const pathExts = getPathExts(command, environment);
if (pathExts == null) {
return void 0;
}
for (const pathExt of pathExts) {
const filePath = command + pathExt;
if (await pathMatches(environment, filePath)) {
return filePath;
}
}
return void 0;
}
const systemInfo = getSystemInfo(command, environment);
if (systemInfo == null) {
return void 0;
}
for (const pathItem of systemInfo.pathItems) {
const filePath = pathItem + command;
if (systemInfo.pathExts) {
environment.requestPermission?.(pathItem);
for (const pathExt of systemInfo.pathExts) {
const filePath2 = pathItem + command + pathExt;
if (await pathMatches(environment, filePath2)) {
return filePath2;
}
}
} else if (await pathMatches(environment, filePath)) {
return filePath;
}
}
return void 0;
}
async function pathMatches(environment, path) {
try {
return (await environment.stat(path)).isFile;
} catch (statErr) {
if (isDenoPermissionDeniedError(statErr)) {
throw statErr;
}
if (environment.isWindows && isEaccesError(statErr)) {
return await followSymlinkChain(environment, path);
}
return false;
}
}
async function followSymlinkChain(environment, path) {
let current = path;
for (let hops = 0; hops < 40; hops++) {
let info;
try {
info = await environment.lstat(current);
} catch (err) {
if (isDenoPermissionDeniedError(err)) {
throw err;
}
return false;
}
if (info.isFile)
return true;
if (!info.isSymlink)
return false;
let target;
try {
target = await environment.readLink(current);
} catch (err) {
if (isDenoPermissionDeniedError(err)) {
throw err;
}
return false;
}
current = resolveLinkTarget(current, target);
}
return false;
}
function whichSync(command, environment = new RealEnvironment()) {
if (commandHasPathSeparator(command, environment.isWindows)) {
if (pathMatchesSync(environment, command)) {
return command;
}
const pathExts = getPathExts(command, environment);
if (pathExts == null) {
return void 0;
}
for (const pathExt of pathExts) {
const filePath = command + pathExt;
if (pathMatchesSync(environment, filePath)) {
return filePath;
}
}
return void 0;
}
const systemInfo = getSystemInfo(command, environment);
if (systemInfo == null) {
return void 0;
}
for (const pathItem of systemInfo.pathItems) {
const filePath = pathItem + command;
if (systemInfo.pathExts) {
environment.requestPermission?.(pathItem);
for (const pathExt of systemInfo.pathExts) {
const filePath2 = pathItem + command + pathExt;
if (pathMatchesSync(environment, filePath2)) {
return filePath2;
}
}
} else if (pathMatchesSync(environment, filePath)) {
return filePath;
}
}
return void 0;
}
function pathMatchesSync(environment, path) {
try {
return environment.statSync(path).isFile;
} catch (statErr) {
if (isDenoPermissionDeniedError(statErr)) {
throw statErr;
}
if (environment.isWindows && isEaccesError(statErr)) {
return followSymlinkChainSync(environment, path);
}
return false;
}
}
function followSymlinkChainSync(environment, path) {
let current = path;
for (let hops = 0; hops < 40; hops++) {
let info;
try {
info = environment.lstatSync(current);
} catch (err) {
if (isDenoPermissionDeniedError(err)) {
throw err;
}
return false;
}
if (info.isFile)
return true;
if (!info.isSymlink)
return false;
let target;
try {
target = environment.readLinkSync(current);
} catch (err) {
if (isDenoPermissionDeniedError(err)) {
throw err;
}
return false;
}
current = resolveLinkTarget(current, target);
}
return false;
}
function resolveLinkTarget(linkPath, target) {
if (isAbsolutePath(target)) {
return target;
}
const sepIdx = Math.max(linkPath.lastIndexOf("/"), linkPath.lastIndexOf("\\"));
const dir = sepIdx >= 0 ? linkPath.slice(0, sepIdx + 1) : "";
return dir + target;
}
function isAbsolutePath(p) {
if (p.startsWith("/") || p.startsWith("\\"))
return true;
return /^[A-Za-z]:[\\/]/.test(p);
}
function isEaccesError(err) {
return err != null && typeof err === "object" && "code" in err && err.code === "EACCES";
}
function isDenoPermissionDeniedError(err) {
const permissionDeniedError = denoGlobal?.errors?.PermissionDenied;
return permissionDeniedError != null && err instanceof permissionDeniedError;
}
function getSystemInfo(command, environment) {
const isWindows = environment.isWindows;
const path = environment.env("PATH");
const pathSeparator = isWindows ? "\\" : "/";
if (path == null) {
return void 0;
}
return {
pathItems: splitEnvValue(path, isWindows).map((item) => normalizeDir(item, pathSeparator)),
pathExts: getPathExts(command, environment),
isNameMatch: isWindows ? (a, b) => a.toLowerCase() === b.toLowerCase() : (a, b) => a === b
};
}
function getPathExts(command, environment) {
if (!environment.isWindows) {
return void 0;
}
const pathExtText = environment.env("PATHEXT") ?? ".EXE;.CMD;.BAT;.COM";
const pathExts = splitEnvValue(pathExtText, true);
const lowerCaseCommand = command.toLowerCase();
for (const pathExt of pathExts) {
if (lowerCaseCommand.endsWith(pathExt.toLowerCase())) {
return void 0;
}
}
return pathExts;
}
function commandHasPathSeparator(command, isWindows) {
return command.includes("/") || isWindows && command.includes("\\");
}
function splitEnvValue(value, isWindows) {
const envValueSeparator = isWindows ? ";" : ":";
return value.split(envValueSeparator).map((item) => item.trim()).filter((item) => item.length > 0);
}
function normalizeDir(dirPath, pathSeparator) {
if (pathSeparator === "\\" && dirPath.includes("/")) {
dirPath = normalizeWindowsSeparators(dirPath, pathSeparator);
}
if (!dirPath.endsWith(pathSeparator)) {
dirPath += pathSeparator;
}
return dirPath;
}
function normalizeWindowsSeparators(dirPath, pathSeparator) {
const isUncRoot = /^[/\\]{2}/.test(dirPath);
const head = isUncRoot ? pathSeparator + pathSeparator : "";
const rest = isUncRoot ? dirPath.slice(2) : dirPath;
return head + rest.replaceAll("/", pathSeparator).replace(/\\+/g, pathSeparator);
}
}
});
// npm/script/deps/jsr.io/@david/path/0.3.2/path.js
var require_path = __commonJS({
"npm/script/deps/jsr.io/@david/path/0.3.2/path.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.basename = basename3;
exports2.dirname = dirname3;
exports2.extname = extname3;
exports2.fromFileUrl = fromFileUrl3;
exports2.isAbsolute = isAbsolute3;
exports2.join = join3;
exports2.normalize = normalize3;
exports2.relative = relative3;
exports2.resolve = resolve3;
exports2.toFileUrl = toFileUrl3;
var dntShim = __importStar2(require_dnt_shims());
function checkWindows() {
const global = dntShim.dntGlobalThis;
const platform = global.process?.platform;
if (typeof platform === "string")
return platform.startsWith("win");
const os = global.Deno?.build?.os;
if (typeof os === "string")
return os === "windows";
return global.navigator?.platform?.startsWith("Win") ?? false;
}
var isWindows = checkWindows();
function assertPath(path) {
if (typeof path !== "string") {
throw new TypeError(`Path must be a string, received "${JSON.stringify(path)}"`);
}
}
function stripSuffix(name, suffix) {
if (suffix.length >= name.length) {
return name;
}
const lenDiff = name.length - suffix.length;
for (let i = suffix.length - 1; i >= 0; --i) {
if (name.charCodeAt(lenDiff + i) !== suffix.charCodeAt(i)) {
return name;
}
}
return name.slice(0, -suffix.length);
}
function lastPathSegment(path, isSep, start = 0) {
let matchedNonSeparator = false;
let end = path.length;
for (let i = path.length - 1; i >= start; --i) {
if (isSep(path.charCodeAt(i))) {
if (matchedNonSeparator) {
start = i + 1;
break;
}
} else if (!matchedNonSeparator) {
matchedNonSeparator = true;
end = i + 1;
}
}
return path.slice(start, end);
}
function assertArgs(path, suffix) {
assertPath(path);
if (path.length === 0)
return path;
if (typeof suffix !== "string") {
throw new TypeError(`Suffix must be a string, received "${JSON.stringify(suffix)}"`);
}
}
function assertArg(url) {
url = url instanceof URL ? url : new URL(url);
if (url.protocol !== "file:") {
throw new TypeError(`URL must be a file URL: received "${url.protocol}"`);
}
return url;
}
function fromFileUrl(url) {
url = assertArg(url);
return decodeURIComponent(url.pathname.replace(/%(?![0-9A-Fa-f]{2})/g, "%25"));
}
function stripTrailingSeparators(segment, isSep) {
if (segment.length <= 1) {
return segment;
}
let end = segment.length;
for (let i = segment.length - 1; i > 0; i--) {
if (isSep(segment.charCodeAt(i))) {
end = i;
} else {
break;
}
}
return segment.slice(0, end);
}
var CHAR_UPPERCASE_A = 65;
var CHAR_LOWERCASE_A = 97;
var CHAR_UPPERCASE_Z = 90;
var CHAR_LOWERCASE_Z = 122;
var CHAR_DOT = 46;
var CHAR_FORWARD_SLASH = 47;
var CHAR_BACKWARD_SLASH = 92;
var CHAR_COLON = 58;
function isPosixPathSeparator(code) {
return code === CHAR_FORWARD_SLASH;
}
function basename(path, suffix = "") {
if (path instanceof URL) {
path = fromFileUrl(path);
}
assertArgs(path, suffix);
const lastSegment = lastPathSegment(path, isPosixPathSeparator);
const strippedSegment = stripTrailingSeparators(lastSegment, isPosixPathSeparator);
return suffix ? stripSuffix(strippedSegment, suffix) : strippedSegment;
}
function isPosixPathSeparator2(code) {
return code === CHAR_FORWARD_SLASH;
}
function isPathSeparator(code) {
return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
}
function isWindowsDeviceRoot(code) {
return code >= CHAR_LOWERCASE_A && code <= CHAR_LOWERCASE_Z || code >= CHAR_UPPERCASE_A && code <= CHAR_UPPERCASE_Z;
}
function fromFileUrl2(url) {
url = assertArg(url);
let path = decodeURIComponent(url.pathname.replace(/\//g, "\\").replace(/%(?![0-9A-Fa-f]{2})/g, "%25")).replace(/^\\*([A-Za-z]:)(\\|$)/, "$1\\");
if (url.hostname !== "") {
path = `\\\\${url.hostname}${path}`;
}
return path;
}
function basename2(path, suffix = "") {
if (path instanceof URL) {
path = fromFileUrl2(path);
}
assertArgs(path, suffix);
let start = 0;
if (path.length >= 2) {
const drive = path.charCodeAt(0);
if (isWindowsDeviceRoot(drive)) {
if (path.charCodeAt(1) === CHAR_COLON)
start = 2;
}
}
const lastSegment = lastPathSegment(path, isPathSeparator, start);
const strippedSegment = stripTrailingSeparators(lastSegment, isPathSeparator);
return suffix ? stripSuffix(strippedSegment, suffix) : strippedSegment;
}
function basename3(path, suffix = "") {
return isWindows ? basename2(path, suffix) : basename(path, suffix);
}
function assertArg2(path) {
assertPath(path);
if (path.length === 0)
return ".";
}
function dirname(path) {
if (path instanceof URL) {
path = fromFileUrl(path);
}
assertArg2(path);
let end = -1;
let matchedNonSeparator = false;
for (let i = path.length - 1; i >= 1; --i) {
if (isPosixPathSeparator(path.charCodeAt(i))) {
if (matchedNonSeparator) {
end = i;
break;
}
} else {
matchedNonSeparator = true;
}
}
if (end === -1) {
return isPosixPathSeparator(path.charCodeAt(0)) ? "/" : ".";
}
return stripTrailingSeparators(path.slice(0, end), isPosixPathSeparator);
}
function dirname2(path) {
if (path instanceof URL) {
path = fromFileUrl2(path);
}
assertArg2(path);
const len = path.length;
let rootEnd = -1;
let end = -1;
let matchedSlash = true;
let offset = 0;
const code = path.charCodeAt(0);
if (len > 1) {
if (isPathSeparator(code)) {
rootEnd = offset = 1;
if (isPathSeparator(path.charCodeAt(1))) {
let j = 2;
let last = j;
for (; j < len; ++j) {
if (isPathSeparator(path.charCodeAt(j)))
break;
}
if (j < len && j !== last) {
last = j;
for (; j < len; ++j) {
if (!isPathSeparator(path.charCodeAt(j)))
break;
}
if (j < len && j !== last) {
last = j;
for (; j < len; ++j) {
if (isPathSeparator(path.charCodeAt(j)))
break;
}
if (j === len) {
return path;
}
if (j !== last) {
rootEnd = offset = j + 1;
}
}
}
}
} else if (isWindowsDeviceRoot(code)) {
if (path.charCodeAt(1) === CHAR_COLON) {
rootEnd = offset = 2;
if (len > 2) {
if (isPathSeparator(path.charCodeAt(2)))
rootEnd = offset = 3;
}
}
}
} else if (isPathSeparator(code)) {
return path;
}
for (let i = len - 1; i >= offset; --i) {
if (isPathSeparator(path.charCodeAt(i))) {
if (!matchedSlash) {
end = i;
break;
}
} else {
matchedSlash = false;
}
}
if (end === -1) {
if (rootEnd === -1)
return ".";
else
end = rootEnd;
}
return stripTrailingSeparators(path.slice(0, end), isPosixPathSeparator2);
}
function dirname3(path) {
return isWindows ? dirname2(path) : dirname(path);
}
function extname(path) {
if (path instanceof URL) {
path = fromFileUrl(path);
}
assertPath(path);
let startDot = -1;
let startPart = 0;
let end = -1;
let matchedSlash = true;
let preDotState = 0;
for (let i = path.length - 1; i >= 0; --i) {
const code = path.charCodeAt(i);
if (isPosixPathSeparator(code)) {
if (!matchedSlash) {
startPart = i + 1;
break;
}
continue;
}
if (end === -1) {
matchedSlash = false;
end = i + 1;
}
if (code === CHAR_DOT) {
if (startDot === -1)
startDot = i;
else if (preDotState !== 1)
preDotState = 1;
} else if (startDot !== -1) {
preDotState = -1;
}
}
if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot
preDotState === 0 || // The (right-most) trimmed path component is exactly '..'
preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
return "";
}
return path.slice(startDot, end);
}
function extname2(path) {
if (path instanceof URL) {
path = fromFileUrl2(path);
}
assertPath(path);
let start = 0;
let startDot = -1;
let startPart = 0;
let end = -1;
let matchedSlash = true;
let preDotState = 0;
if (path.length >= 2 && path.charCodeAt(1) === CHAR_COLON && isWindowsDeviceRoot(path.charCodeAt(0))) {
start = startPart = 2;
}
for (let i = path.length - 1; i >= start; --i) {
const code = path.charCodeAt(i);
if (isPathSeparator(code)) {
if (!matchedSlash) {
startPart = i + 1;
break;
}
continue;
}
if (end === -1) {
matchedSlash = false;
end = i + 1;
}
if (code === CHAR_DOT) {
if (startDot === -1)
startDot = i;
else if (preDotState !== 1)
preDotState = 1;
} else if (startDot !== -1) {
preDotState = -1;
}
}
if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot
preDotState === 0 || // The (right-most) trimmed path component is exactly '..'
preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
return "";
}
return path.slice(startDot, end);
}
function extname3(path) {
return isWindows ? extname2(path) : extname(path);
}
function fromFileUrl3(url) {
return isWindows ? fromFileUrl2(url) : fromFileUrl(url);
}
function isAbsolute(path) {
assertPath(path);
return path.length > 0 && isPosixPathSeparator(path.charCodeAt(0));
}
function isAbsolute2(path) {
assertPath(path);
const len = path.length;
if (len === 0)
return false;
const code = path.charCodeAt(0);
if (isPathSeparator(code)) {
return true;
} else if (isWindowsDeviceRoot(code)) {
if (len > 2 && path.charCodeAt(1) === CHAR_COLON) {
if (isPathSeparator(path.charCodeAt(2)))
return true;
}
}
return false;
}
function isAbsolute3(path) {
return isWindows ? isAbsolute2(path) : isAbsolute(path);
}
function assertArg4(path) {
assertPath(path);
if (path.length === 0)
return ".";
}
function normalizeString(path, allowAboveRoot, separator, isPathSeparator2) {
let res = "";
let lastSegmentLength = 0;
let lastSlash = -1;
let dots = 0;
let code;
for (let i = 0; i <= path.length; ++i) {
if (i < path.length)
code = path.charCodeAt(i);
else if (isPathSeparator2(code))
break;
else
code = CHAR_FORWARD_SLASH;
if (isPathSeparator2(code)) {
if (lastSlash === i - 1 || dots === 1) {
} else if (lastSlash !== i - 1 && dots === 2) {
if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== CHAR_DOT || res.charCodeAt(res.length - 2) !== CHAR_DOT) {
if (res.length > 2) {
const lastSlashIndex = res.lastIndexOf(separator);
if (lastSlashIndex === -1) {
res = "";
lastSegmentLength = 0;
} else {
res = res.slice(0, lastSlashIndex);
lastSegmentLength = res.length - 1 - res.lastIndexOf(separator);
}
lastSlash = i;
dots = 0;
continue;
} else if (res.length === 2 || res.length === 1) {
res = "";
lastSegmentLength = 0;
lastSlash = i;
dots = 0;
continue;
}
}
if (allowAboveRoot) {
if (res.length > 0)
res += `${separator}..`;
else
res = "..";
lastSegmentLength = 2;
}
} else {
if (res.length > 0)
res += separator + path.slice(lastSlash + 1, i);
else
res = path.slice(lastSlash + 1, i);
lastSegmentLength = i - lastSlash - 1;
}
lastSlash = i;
dots = 0;
} else if (code === CHAR_DOT && dots !== -1) {
++dots;
} else {
dots = -1;
}
}
return res;
}
function normalize(path) {
if (path instanceof URL) {
path = fromFileUrl(path);
}
assertArg4(path);
const isAbsolute4 = isPosixPathSeparator(path.charCodeAt(0));
const trailingSeparator = isPosixPathSeparator(path.charCodeAt(path.length - 1));
path = normalizeString(path, !isAbsolute4, "/", isPosixPathSeparator);
if (path.length === 0 && !isAbsolute4)
path = ".";
if (path.length > 0 && trailingSeparator)
path += "/";
if (isAbsolute4)
return `/${path}`;
return path;
}
function join(path, ...paths) {
if (path === void 0)
return ".";
if (path instanceof URL) {
path = fromFileUrl(path);
}
paths = path ? [
path,
...paths
] : paths;
paths.forEach((path2) => assertPath(path2));
const joined = paths.filter((path2) => path2.length > 0).join("/");
return joined === "" ? "." : normalize(joined);
}
function normalize2(path) {
if (path instanceof URL) {
path = fromFileUrl2(path);
}
assertArg4(path);
const len = path.length;
let rootEnd = 0;
let device;
let isAbsolute4 = false;
const code = path.charCodeAt(0);
if (len > 1) {
if (isPathSeparator(code)) {
isAbsolute4 = true;
if (isPathSeparator(path.charCodeAt(1))) {
let j = 2;
let last = j;
for (; j < len; ++j) {
if (isPathSeparator(path.charCodeAt(j)))
break;
}
if (j < len && j !== last) {
const firstPart = path.slice(last, j);
last = j;
for (; j < len; ++j) {
if (!isPathSeparator(path.charCodeAt(j)))
break;
}
if (j < len && j !== last) {
last = j;
for (; j < len; ++j) {
if (isPathSeparator(path.charCodeAt(j)))
break;
}
if (j === len) {
return `\\\\${firstPart}\\${path.slice(last)}\\`;
} else if (j !== last) {
device = `\\\\${firstPart}\\${path.slice(last, j)}`;
rootEnd = j;
}
}
}
} else {
rootEnd = 1;
}
} else if (isWindowsDeviceRoot(code)) {
if (path.charCodeAt(1) === CHAR_COLON) {
device = path.slice(0, 2);
rootEnd = 2;
if (len > 2) {
if (isPathSeparator(path.charCodeAt(2))) {
isAbsolute4 = true;
rootEnd = 3;
}
}
}
}
} else if (isPathSeparator(code)) {
return "\\";
}
let tail;
if (rootEnd < len) {
tail = normalizeString(path.slice(rootEnd), !isAbsolute4, "\\", isPathSeparator);
} else {
tail = "";
}
if (tail.length === 0 && !isAbsolute4)
tail = ".";
if (tail.length > 0 && isPathSeparator(path.charCodeAt(len - 1))) {
tail += "\\";
}
if (device === void 0) {
if (isAbsolute4) {
if (tail.length > 0)
return `\\${tail}`;
else
return "\\";
}
return tail;
} else if (isAbsolute4) {
if (tail.length > 0)
return `${device}\\${tail}`;
else
return `${device}\\`;
}
return device + tail;
}
function join2(path, ...paths) {
if (path instanceof URL) {
path = fromFileUrl2(path);
}
paths = path ? [
path,
...paths
] : paths;
paths.forEach((path2) => assertPath(path2));
paths = paths.filter((path2) => path2.length > 0);
if (paths.length === 0)
return ".";
let needsReplace = true;
let slashCount = 0;
const firstPart = paths[0];
if (isPathSeparator(firstPart.charCodeAt(0))) {
++slashCount;
const firstLen = firstPart.length;
if (firstLen > 1) {
if (isPathSeparator(firstPart.charCodeAt(1))) {
++slashCount;
if (firstLen > 2) {
if (isPathSeparator(firstPart.charCodeAt(2)))
++slashCount;
else {
needsReplace = false;
}
}
}
}
}
let joined = paths.join("\\");
if (needsReplace) {
for (; slashCount < joined.length; ++slashCount) {
if (!isPathSeparator(joined.charCodeAt(slashCount)))
break;
}
if (slashCount >= 2)
joined = `\\${joined.slice(slashCount)}`;
}
return normalize2(joined);
}
function join3(path, ...paths) {
return isWindows ? join2(path, ...paths) : join(path, ...paths);
}
function normalize3(path) {
return isWindows ? normalize2(path) : normalize(path);
}
function cwd(errorMessage) {
const global = dntShim.dntGlobalThis;
const getCwd = global.process?.cwd ?? global.Deno?.cwd;
if (typeof getCwd !== "function") {
throw new TypeError(errorMessage);
}
return getCwd();
}
function resolve(...pathSegments) {
let resolvedPath = "";
let resolvedAbsolute = false;
for (let i = pathSegments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
let path;
if (i >= 0)
path = pathSegments[i];
else {
path = cwd("Resolved a relative path without a current working directory (CWD)");
}
assertPath(path);
if (path.length === 0) {
continue;
}
resolvedPath = `${path}/${resolvedPath}`;
resolvedAbsolute = isPosixPathSeparator(path.charCodeAt(0));
}
resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute, "/", isPosixPathSeparator);
if (resolvedAbsolute) {
if (resolvedPath.length > 0)
return `/${resolvedPath}`;
else
return "/";
} else if (resolvedPath.length > 0)
return resolvedPath;
else
return ".";
}
function assertArgs2(from, to) {
assertPath(from);
assertPath(to);
if (from === to)
return "";
}
function relative(from, to) {
assertArgs2(from, to);
from = resolve(from);
to = resolve(to);
if (from === to)
return "";
let fromStart = 1;
const fromEnd = from.length;
for (; fromStart < fromEnd; ++fromStart) {
if (!isPosixPathSeparator(from.charCodeAt(fromStart)))
break;
}
const fromLen = fromEnd - fromStart;
let toStart = 1;
const toEnd = to.length;
for (; toStart < toEnd; ++toStart) {
if (!isPosixPathSeparator(to.charCodeAt(toStart)))
break;
}
const toLen = toEnd - toStart;
const length = fromLen < toLen ? fromLen : toLen;
let lastCommonSep = -1;
let i = 0;
for (; i <= length; ++i) {
if (i === length) {
if (toLen > length) {
if (isPosixPathSeparator(to.charCodeAt(toStart + i))) {
return to.slice(toStart + i + 1);
} else if (i === 0) {
return to.slice(toStart + i);
}
} else if (fromLen > length) {
if (isPosixPathSeparator(from.charCodeAt(fromStart + i))) {
lastCommonSep = i;
} else if (i === 0) {
lastCommonSep = 0;
}
}
break;
}
const fromCode = from.charCodeAt(fromStart + i);
const toCode = to.charCodeAt(toStart + i);
if (fromCode !== toCode)
break;
else if (isPosixPathSeparator(fromCode))
lastCommonSep = i;
}
let out = "";
for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {
if (i === fromEnd || isPosixPathSeparator(from.charCodeAt(i))) {
if (out.length === 0)
out += "..";
else
out += "/..";
}
}
if (out.length > 0)
return out + to.slice(toStart + lastCommonSep);
else {
toStart += lastCommonSep;
if (isPosixPathSeparator(to.charCodeAt(toStart)))
++toStart;
return to.slice(toStart);
}
}
function resolve2(...pathSegments) {
let resolvedDevice = "";
let resolvedTail = "";
let resolvedAbsolute = false;
for (let i = pathSegments.length - 1; i >= -1; i--) {
let path;
if (i >= 0) {
path = pathSegments[i];
} else if (!resolvedDevice) {
path = cwd("Resolved a drive-letter-less path without a current working directory (CWD)");
} else {
path = cwd("Resolved a relative path without a current working directory (CWD)");
if (path === void 0 || path.slice(0, 3).toLowerCase() !== `${resolvedDevice.toLowerCase()}\\`) {
path = `${resolvedDevice}\\`;
}
}
assertPath(path);
const len = path.length;
if (len === 0)
continue;
let rootEnd = 0;
let device = "";
let isAbsolute4 = false;
const code = path.charCodeAt(0);
if (len > 1) {
if (isPathSeparator(code)) {
isAbsolute4 = true;
if (isPathSeparator(path.charCodeAt(1))) {
let j = 2;
let last = j;
for (; j < len; ++j) {
if (isPathSeparator(path.charCodeAt(j)))
break;
}
if (j < len && j !== last) {
const firstPart = path.slice(last, j);
last = j;
for (; j < len; ++j) {
if (!isPathSeparator(path.charCodeAt(j)))
break;
}
if (j < len && j !== last) {
last = j;
for (; j < len; ++j) {
if (isPathSeparator(path.charCodeAt(j)))
break;
}
if (j === len) {
device = `\\\\${firstPart}\\${path.slice(last)}`;
rootEnd = j;
} else if (j !== last) {
device = `\\\\${firstPart}\\${path.slice(last, j)}`;
rootEnd = j;
}
}
}
} else {
rootEnd = 1;
}
} else if (isWindowsDeviceRoot(code)) {
if (path.charCodeAt(1) === CHAR_COLON) {
device = path.slice(0, 2);
rootEnd = 2;
if (len > 2) {
if (isPathSeparator(path.charCodeAt(2))) {
isAbsolute4 = true;
rootEnd = 3;
}
}
}
}
} else if (isPathSeparator(code)) {
rootEnd = 1;
isAbsolute4 = true;
}
if (device.length > 0 && resolvedDevice.length > 0 && device.toLowerCase() !== resolvedDevice.toLowerCase()) {
continue;
}
if (resolvedDevice.length === 0 && device.length > 0) {
resolvedDevice = device;
}
if (!resolvedAbsolute) {
resolvedTail = `${path.slice(rootEnd)}\\${resolvedTail}`;
resolvedAbsolute = isAbsolute4;
}
if (resolvedAbsolute && resolvedDevice.length > 0)
break;
}
resolvedTail = normalizeString(resolvedTail, !resolvedAbsolute, "\\", isPathSeparator);
return resolvedDevice + (resolvedAbsolute ? "\\" : "") + resolvedTail || ".";
}
function relative2(from, to) {
assertArgs2(from, to);
const fromOrig = resolve2(from);
const toOrig = resolve2(to);
if (fromOrig === toOrig)
return "";
from = fromOrig.toLowerCase();
to = toOrig.toLowerCase();
if (from === to)
return "";
let fromStart = 0;
let fromEnd = from.length;
for (; fromStart < fromEnd; ++fromStart) {
if (from.charCodeAt(fromStart) !== CHAR_BACKWARD_SLASH)
break;
}
for (; fromEnd - 1 > fromStart; --fromEnd) {
if (from.charCodeAt(fromEnd - 1) !== CHAR_BACKWARD_SLASH)
break;
}
const fromLen = fromEnd - fromStart;
let toStart = 0;
let toEnd = to.length;
for (; toStart < toEnd; ++toStart) {
if (to.charCodeAt(toStart) !== CHAR_BACKWARD_SLASH)
break;
}
for (; toEnd - 1 > toStart; --toEnd) {
if (to.charCodeAt(toEnd - 1) !== CHAR_BACKWARD_SLASH)
break;
}
const toLen = toEnd - toStart;
const length = fromLen < toLen ? fromLen : toLen;
let lastCommonSep = -1;
let i = 0;
for (; i <= length; ++i) {
if (i === length) {
if (toLen > length) {
if (to.charCodeAt(toStart + i) === CHAR_BACKWARD_SLASH) {
return toOrig.slice(toStart + i + 1);
} else if (i === 2) {
return toOrig.slice(toStart + i);
}
}
if (fromLen > length) {
if (from.charCodeAt(fromStart + i) === CHAR_BACKWARD_SLASH) {
lastCommonSep = i;
} else if (i === 2) {
lastCommonSep = 3;
}
}
break;
}
const fromCode = from.charCodeAt(fromStart + i);
const toCode = to.charCodeAt(toStart + i);
if (fromCode !== toCode)
break;
else if (fromCode === CHAR_BACKWARD_SLASH)
lastCommonSep = i;
}
if (i !== length && lastCommonSep === -1) {
return toOrig;
}
let out = "";
if (lastCommonSep === -1)
lastCommonSep = 0;
for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {
if (i === fromEnd || from.charCodeAt(i) === CHAR_BACKWARD_SLASH) {
if (out.length === 0)
out += "..";
else
out += "\\..";
}
}
if (out.length > 0) {
return out + toOrig.slice(toStart + lastCommonSep, toEnd);
} else {
toStart += lastCommonSep;
if (toOrig.charCodeAt(toStart) === CHAR_BACKWARD_SLASH)
++toStart;
return toOrig.slice(toStart, toEnd);
}
}
function relative3(from, to) {
return isWindows ? relative2(from, to) : relative(from, to);
}
function resolve3(...pathSegments) {
return isWindows ? resolve2(...pathSegments) : resolve(...pathSegments);
}
var WHITESPACE_ENCODINGS = {
" ": "%09",
"\n": "%0A",
"\v": "%0B",
"\f": "%0C",
"\r": "%0D",
" ": "%20"
};
function encodeWhitespace(string) {
return string.replaceAll(/[\s]/g, (c) => {
return WHITESPACE_ENCODINGS[c] ?? c;
});
}
function toFileUrl(path) {
if (!isAbsolute(path)) {
throw new TypeError(`Path must be absolute: received "${path}"`);
}
const url = new URL("file:///");
url.pathname = encodeWhitespace(path.replace(/%/g, "%25").replace(/\\/g, "%5C"));
return url;
}
function toFileUrl2(path) {
if (!isAbsolute2(path)) {
throw new TypeError(`Path must be absolute: received "${path}"`);
}
const [, hostname, pathname] = path.match(/^(?:[/\\]{2}([^/\\]+)(?=[/\\](?:[^/\\]|$)))?(.*)/);
const url = new URL("file:///");
url.pathname = encodeWhitespace(pathname.replace(/%/g, "%25"));
if (hostname !== void 0 && hostname !== "localhost") {
url.hostname = hostname;
if (!url.hostname) {
throw new TypeError(`Invalid hostname: "${url.hostname}"`);
}
}
return url;
}
function toFileUrl3(path) {
return isWindows ? toFileUrl2(path) : toFileUrl(path);
}
}
});
// npm/script/deps/jsr.io/@david/path/0.3.2/_fs.js
var require_fs = __commonJS({
"npm/script/deps/jsr.io/@david/path/0.3.2/_fs.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
var __importDefault = exports2 && exports2.__importDefault || function(mod) {
return mod && mod.__esModule ? mod : { "default": mod };
};
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.FsFile = void 0;
exports2.isNotFoundError = isNotFoundError;
exports2.createNotFoundError = createNotFoundError;
exports2.isWindows = isWindows;
exports2.stat = stat;
exports2.statSync = statSync;
exports2.lstat = lstat;
exports2.lstatSync = lstatSync;
exports2.realPath = realPath;
exports2.realPathSync = realPathSync;
exports2.mkdirFn = mkdirFn;
exports2.mkdirSyncFn = mkdirSyncFn;
exports2.linkFn = linkFn;
exports2.linkSyncFn = linkSyncFn;
exports2.symlinkFn = symlinkFn;
exports2.symlinkSyncFn = symlinkSyncFn;
exports2.readDir = readDir;
exports2.readDirSync = readDirSync;
exports2.readFile = readFile;
exports2.readFileSync = readFileSync;
exports2.readTextFile = readTextFile;
exports2.readTextFileSync = readTextFileSync;
exports2.chmod = chmod;
exports2.chmodSync = chmodSync;
exports2.chown = chown;
exports2.chownSync = chownSync;
exports2.openFile = openFile;
exports2.openFileSync = openFileSync;
exports2.createFile = createFile;
exports2.createFileSync = createFileSync;
exports2.remove = remove;
exports2.removeSync = removeSync;
exports2.copyFileFn = copyFileFn;
exports2.copyFileSyncFn = copyFileSyncFn;
exports2.renameFn = renameFn;
exports2.renameSyncFn = renameSyncFn;
exports2.ensureDir = ensureDir;
exports2.ensureDirSync = ensureDirSync;
exports2.ensureFile = ensureFile;
exports2.ensureFileSync = ensureFileSync;
exports2.emptyDir = emptyDir;
exports2.emptyDirSync = emptyDirSync;
exports2.copy = copy;
exports2.copySync = copySync;
var dntShim = __importStar2(require_dnt_shims());
var node_fs_1 = __importDefault(require("node:fs"));
var promises_1 = __importDefault(require("node:fs/promises"));
var node_path_1 = require("node:path");
function isNotFoundError(err) {
return err?.code === "ENOENT";
}
function createNotFoundError(message) {
const err = new Error(message);
err.code = "ENOENT";
return err;
}
function isWindows() {
return process.platform === "win32";
}
var FsFile = class {
/** @internal */
_fd;
/** @internal */
constructor(fd) {
this._fd = fd;
}
/** Writes data to the file, resolving to the number of bytes written.
*
* Strings are encoded as UTF-8.
*/
write(data) {
const bytes = typeof data === "string" ? new TextEncoder().encode(data) : data;
return new Promise((resolve, reject) => {
node_fs_1.default.write(this._fd, bytes, 0, bytes.length, null, (err, written) => {
if (err)
reject(err);
else
resolve(written);
});
});
}
/** Synchronously writes data to the file, returning the number of bytes written.
*
* Strings are encoded as UTF-8.
*/
writeSync(data) {
const bytes = typeof data === "string" ? new TextEncoder().encode(data) : data;
return node_fs_1.default.writeSync(this._fd, bytes, 0, bytes.length);
}
/** Reads into `buf`, resolving to the number of bytes read (0 at EOF). */
read(buf) {
return new Promise((resolve, reject) => {
node_fs_1.default.read(this._fd, buf, 0, buf.length, null, (err, bytesRead) => {
if (err)
reject(err);
else
resolve(bytesRead);
});
});
}
/** Synchronously reads into `buf`, returning the number of bytes read (0 at EOF). */
readSync(buf) {
return node_fs_1.default.readSync(this._fd, buf, 0, buf.length, null);
}
/** Closes the file handle. */
close() {
node_fs_1.default.closeSync(this._fd);
}
/** A writable stream that writes to this file. */
get writable() {
const fd = this._fd;
return new dntShim.WritableStream({
write(chunk) {
return new Promise((resolve, reject) => {
node_fs_1.default.write(fd, chunk, 0, chunk.length, null, (err) => {
if (err)
reject(err);
else
resolve();
});
});
}
});
}
/** A readable stream that reads from this file. */
get readable() {
const fd = this._fd;
return new dntShim.ReadableStream({
pull(controller) {
return new Promise((resolve, reject) => {
const buf = new Uint8Array(16384);
node_fs_1.default.read(fd, buf, 0, buf.length, null, (err, bytesRead) => {
if (err) {
reject(err);
return;
}
if (bytesRead === 0) {
controller.close();
} else {
controller.enqueue(buf.subarray(0, bytesRead));
}
resolve();
});
});
}
});
}
};
exports2.FsFile = FsFile;
function stat(path) {
return promises_1.default.stat(path);
}
function statSync(path) {
return node_fs_1.default.statSync(path);
}
function lstat(path) {
return promises_1.default.lstat(path);
}
function lstatSync(path) {
return node_fs_1.default.lstatSync(path);
}
function realPath(path) {
return promises_1.default.realpath(path);
}
function realPathSync(path) {
return node_fs_1.default.realpathSync(path);
}
async function mkdirFn(path, options) {
await promises_1.default.mkdir(path, options);
}
function mkdirSyncFn(path, options) {
node_fs_1.default.mkdirSync(path, options);
}
async function linkFn(oldPath, newPath) {
await promises_1.default.link(oldPath, newPath);
}
function linkSyncFn(oldPath, newPath) {
node_fs_1.default.linkSync(oldPath, newPath);
}
async function symlinkFn(target, path, type) {
await promises_1.default.symlink(target, path, type?.type);
}
function symlinkSyncFn(target, path, type) {
node_fs_1.default.symlinkSync(target, path, type?.type);
}
async function* readDir(path) {
const entries = await promises_1.default.readdir(path, { withFileTypes: true });
yield* entries;
}
function* readDirSync(path) {
yield* node_fs_1.default.readdirSync(path, { withFileTypes: true });
}
async function readFile(path, options) {
return new Uint8Array(await promises_1.default.readFile(path, { signal: options?.signal }));
}
function readFileSync(path) {
return new Uint8Array(node_fs_1.default.readFileSync(path));
}
function readTextFile(path, options) {
return promises_1.default.readFile(path, {
encoding: "utf8",
signal: options?.signal
});
}
function readTextFileSync(path) {
return node_fs_1.default.readFileSync(path, "utf8");
}
async function chmod(path, mode) {
await promises_1.default.chmod(path, mode);
}
function chmodSync(path, mode) {
node_fs_1.default.chmodSync(path, mode);
}
async function chown(path, uid, gid) {
await promises_1.default.chown(path, uid ?? -1, gid ?? -1);
}
function chownSync(path, uid, gid) {
node_fs_1.default.chownSync(path, uid ?? -1, gid ?? -1);
}
function openFile(path, options) {
return new Promise((resolve, reject) => {
node_fs_1.default.open(path, openOptionsToFlags(options), options?.mode, (err, fd) => {
if (err)
reject(err);
else
resolve(new FsFile(fd));
});
});
}
function openFileSync(path, options) {
const fd = node_fs_1.default.openSync(path, openOptionsToFlags(options), options?.mode);
return new FsFile(fd);
}
function createFile(path) {
return openFile(path, {
write: true,
create: true,
truncate: true,
read: true
});
}
function createFileSync(path) {
return openFileSync(path, {
write: true,
create: true,
truncate: true,
read: true
});
}
async function remove(path, options) {
if (options?.recursive) {
await promises_1.default.rm(path, { recursive: true });
return;
}
const info = await promises_1.default.lstat(path);
if (info.isDirectory()) {
await promises_1.default.rmdir(path);
} else {
await promises_1.default.unlink(path);
}
}
function removeSync(path, options) {
if (options?.recursive) {
node_fs_1.default.rmSync(path, { recursive: true });
return;
}
const info = node_fs_1.default.lstatSync(path);
if (info.isDirectory()) {
node_fs_1.default.rmdirSync(path);
} else {
node_fs_1.default.unlinkSync(path);
}
}
async function copyFileFn(src, dest) {
await promises_1.default.copyFile(src, dest);
}
function copyFileSyncFn(src, dest) {
node_fs_1.default.copyFileSync(src, dest);
}
async function renameFn(oldPath, newPath) {
await promises_1.default.rename(oldPath, newPath);
}
function renameSyncFn(oldPath, newPath) {
node_fs_1.default.renameSync(oldPath, newPath);
}
async function ensureDir(path) {
await mkdirFn(path, { recursive: true });
}
function ensureDirSync(path) {
mkdirSyncFn(path, { recursive: true });
}
async function ensureFile(path) {
const info = await lstatOrUndefined(path);
if (info != null) {
if (info.isFile())
return;
throw new Error(`Path '${path}' already exists and is not a file.`);
}
await mkdirFn((0, node_path_1.dirname)(path), { recursive: true });
(await createFile(path)).close();
}
function ensureFileSync(path) {
const info = lstatOrUndefinedSync(path);
if (info != null) {
if (info.isFile())
return;
throw new Error(`Path '${path}' already exists and is not a file.`);
}
mkdirSyncFn((0, node_path_1.dirname)(path), { recursive: true });
createFileSync(path).close();
}
async function emptyDir(path) {
try {
const entries = [];
for await (const entry of readDir(path)) {
entries.push(entry);
}
for (const entry of entries) {
await remove((0, node_path_1.join)(path, entry.name), { recursive: true });
}
} catch (err) {
if (!isNotFoundError(err))
throw err;
await mkdirFn(path, { recursive: true });
}
}
function emptyDirSync(path) {
try {
const entries = [...readDirSync(path)];
for (const entry of entries) {
removeSync((0, node_path_1.join)(path, entry.name), { recursive: true });
}
} catch (err) {
if (!isNotFoundError(err))
throw err;
mkdirSyncFn(path, { recursive: true });
}
}
async function copy(src, dest, options) {
const overwrite = options?.overwrite ?? false;
const srcInfo = await stat(src);
await copyRecursive(src, dest, srcInfo, overwrite);
}
function copySync(src, dest, options) {
const overwrite = options?.overwrite ?? false;
const srcInfo = statSync(src);
copyRecursiveSync(src, dest, srcInfo, overwrite);
}
async function copyRecursive(src, dest, srcInfo, overwrite) {
let destInfo = await lstatOrUndefined(dest);
if (destInfo != null && !overwrite) {
throw new Error(`'${dest}' already exists.`);
}
if (srcInfo.isDirectory()) {
if (destInfo != null && !destInfo.isDirectory()) {
await remove(dest);
destInfo = void 0;
}
if (destInfo == null) {
await mkdirFn(dest, { recursive: true });
}
for await (const entry of readDir(src)) {
const srcChild = (0, node_path_1.join)(src, entry.name);
const destChild = (0, node_path_1.join)(dest, entry.name);
const childInfo = await stat(srcChild);
await copyRecursive(srcChild, destChild, childInfo, overwrite);
}
} else {
if (destInfo != null && destInfo.isDirectory()) {
throw new Error(`Cannot overwrite directory '${dest}' with file '${src}'.`);
}
await copyFileFn(src, dest);
}
}
function copyRecursiveSync(src, dest, srcInfo, overwrite) {
let destInfo = lstatOrUndefinedSync(dest);
if (destInfo != null && !overwrite) {
throw new Error(`'${dest}' already exists.`);
}
if (srcInfo.isDirectory()) {
if (destInfo != null && !destInfo.isDirectory()) {
removeSync(dest);
destInfo = void 0;
}
if (destInfo == null) {
mkdirSyncFn(dest, { recursive: true });
}
for (const entry of readDirSync(src)) {
const srcChild = (0, node_path_1.join)(src, entry.name);
const destChild = (0, node_path_1.join)(dest, entry.name);
const childInfo = statSync(srcChild);
copyRecursiveSync(srcChild, destChild, childInfo, overwrite);
}
} else {
if (destInfo != null && destInfo.isDirectory()) {
throw new Error(`Cannot overwrite directory '${dest}' with file '${src}'.`);
}
copyFileSyncFn(src, dest);
}
}
async function lstatOrUndefined(path) {
try {
return await lstat(path);
} catch (err) {
if (isNotFoundError(err))
return void 0;
throw err;
}
}
function lstatOrUndefinedSync(path) {
try {
return lstatSync(path);
} catch (err) {
if (isNotFoundError(err))
return void 0;
throw err;
}
}
function openOptionsToFlags(options) {
const C = node_fs_1.default.constants;
if (!options)
return C.O_RDONLY;
const { read, write, append, truncate, create, createNew } = options;
const needsWrite = write || append || create || createNew;
let flags;
if (read && needsWrite)
flags = C.O_RDWR;
else if (needsWrite)
flags = C.O_WRONLY;
else
flags = C.O_RDONLY;
if (append)
flags |= C.O_APPEND;
if (truncate)
flags |= C.O_TRUNC;
if (createNew)
flags |= C.O_CREAT | C.O_EXCL;
else if (create)
flags |= C.O_CREAT;
return flags;
}
}
});
// npm/script/deps/jsr.io/@david/path/0.3.2/mod.js
var require_mod2 = __commonJS({
"npm/script/deps/jsr.io/@david/path/0.3.2/mod.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.FsFileWrapper = exports2.Path = exports2.FsFile = void 0;
exports2.path = path;
var dntShim = __importStar2(require_dnt_shims());
var path_js_1 = require_path();
var _fs = __importStar2(require_fs());
var _fs_js_1 = require_fs();
Object.defineProperty(exports2, "FsFile", { enumerable: true, get: function() {
return _fs_js_1.FsFile;
} });
function path(path2) {
return new Path(path2);
}
exports2.default = path;
var Path = class _Path {
#path;
#knownResolved = false;
/** This is a special symbol that allows different versions of
* `Path` API to match on `instanceof` checks. Ideally
* people shouldn't be mixing versions, but if it happens then
* this will maybe reduce some bugs.
* @internal
*/
static instanceofSymbol = Symbol.for("@david/path.Path");
/** Creates a new path from the provided string, URL, or another Path. */
constructor(path2) {
if (path2 instanceof URL) {
this.#path = (0, path_js_1.fromFileUrl)(path2);
} else if (path2 instanceof _Path) {
this.#path = path2.toString();
} else if (typeof path2 === "string") {
if (path2.startsWith("file://")) {
this.#path = (0, path_js_1.fromFileUrl)(path2);
} else {
this.#path = path2;
}
} else {
throw new Error(`Invalid path argument: ${path2}
Provide a URL, string, or another Path.`);
}
}
/** @internal */
static [Symbol.hasInstance](instance) {
return instance?.constructor?.instanceofSymbol === _Path.instanceofSymbol;
}
/** @internal */
[Symbol.for("Deno.customInspect")]() {
return `Path("${this.#path}")`;
}
/** @internal */
[Symbol.for("nodejs.util.inspect.custom")]() {
return `Path("${this.#path}")`;
}
/** Gets the string representation of this path. */
toString() {
return this.#path;
}
/** Resolves the path and gets the file URL. */
toFileUrl() {
const resolvedPath = this.resolve();
return (0, path_js_1.toFileUrl)(resolvedPath.toString());
}
/** If this path reference is the same as another one. */
equals(otherPath) {
return this.resolve().toString() === otherPath.resolve().toString();
}
/** Follows symlinks and gets if this path is a directory. */
isDirSync() {
return this.statSync()?.isDirectory() ?? false;
}
/** Follows symlinks and gets if this path is a file. */
isFileSync() {
return this.statSync()?.isFile() ?? false;
}
/** Gets if this path is a symlink. */
isSymlinkSync() {
return this.lstatSync()?.isSymbolicLink() ?? false;
}
/** Gets if this path is an absolute path. */
isAbsolute() {
return (0, path_js_1.isAbsolute)(this.#path);
}
/** Gets if this path is relative. */
isRelative() {
return !this.isAbsolute();
}
/** Joins the provided path segments onto this path. */
join(...pathSegments) {
return new _Path((0, path_js_1.join)(this.#path, ...pathSegments));
}
/** Resolves this path to an absolute path along with the provided path segments. */
resolve(...pathSegments) {
if (this.#knownResolved && pathSegments.length === 0) {
return this;
}
const resolvedPath = (0, path_js_1.resolve)(this.#path, ...pathSegments);
if (pathSegments.length === 0 && resolvedPath === this.#path) {
this.#knownResolved = true;
return this;
} else {
const pathRef = new _Path(resolvedPath);
pathRef.#knownResolved = true;
return pathRef;
}
}
/**
* Normalizes the `path`, resolving `'..'` and `'.'` segments.
* Note that resolving these segments does not necessarily mean that all will be eliminated.
* A `'..'` at the top-level will be preserved, and an empty path is canonically `'.'`.
*/
normalize() {
return new _Path((0, path_js_1.normalize)(this.#path));
}
/** Resolves the file info of this path following symlinks. */
async stat() {
try {
return await _fs.stat(this.#path);
} catch (err) {
if (_fs.isNotFoundError(err)) {
return void 0;
} else {
throw err;
}
}
}
/** Synchronously resolves the file info of this path following symlinks. */
statSync() {
try {
return _fs.statSync(this.#path);
} catch (err) {
if (_fs.isNotFoundError(err)) {
return void 0;
} else {
throw err;
}
}
}
/** Resolves the file info of this path without following symlinks. */
async lstat() {
try {
return await _fs.lstat(this.#path);
} catch (err) {
if (_fs.isNotFoundError(err)) {
return void 0;
} else {
throw err;
}
}
}
/** Synchronously resolves the file info of this path without following symlinks. */
lstatSync() {
try {
return _fs.lstatSync(this.#path);
} catch (err) {
if (_fs.isNotFoundError(err)) {
return void 0;
} else {
throw err;
}
}
}
/**
* Gets the directory path. In most cases, it is recommended
* to use `.parent()` instead since it will give you a `PathRef`.
*/
dirname() {
return (0, path_js_1.dirname)(this.#path);
}
/** Gets the file or directory name of the path. */
basename() {
return (0, path_js_1.basename)(this.#path);
}
/** Resolves the path getting all its ancestor directories in order. */
*ancestors() {
let ancestor = this.parent();
while (ancestor != null) {
yield ancestor;
ancestor = ancestor.parent();
}
}
/** Iterates over the components of a path. */
*components() {
const path2 = this.normalize();
let last_index = 0;
if (path2.#path.startsWith("\\\\?\\")) {
last_index = nextSlash(path2.#path, 4);
if (last_index === -1) {
yield path2.#path;
return;
} else {
yield path2.#path.substring(0, last_index);
last_index += 1;
}
} else if (path2.#path.startsWith("/")) {
last_index += 1;
}
while (true) {
const index = nextSlash(path2.#path, last_index);
if (index < 0) {
const part = path2.#path.substring(last_index);
if (part.length > 0) {
yield part;
}
return;
}
yield path2.#path.substring(last_index, index);
last_index = index + 1;
}
function nextSlash(path3, start) {
for (let i = start; i < path3.length; i++) {
const c = path3.charCodeAt(i);
if (c === 47 || c === 92) {
return i;
}
}
return -1;
}
}
// This is private because this doesn't handle stuff like `\\?\` at the start
// so it's only used internally with #endsWith for perf. API consumers should
// use .components()
*#rcomponents() {
const path2 = this.normalize();
let last_index = void 0;
while (last_index == null || last_index > 0) {
const index = nextSlash(path2.#path, last_index == null ? void 0 : last_index - 1);
if (index < 0) {
const part2 = path2.#path.substring(0, last_index);
if (part2.length > 0) {
yield part2;
}
return;
}
const part = path2.#path.substring(index + 1, last_index);
if (last_index != null || part.length > 0) {
yield part;
}
last_index = index;
}
function nextSlash(path3, start) {
for (let i = start ?? path3.length - 1; i >= 0; i--) {
const c = path3.charCodeAt(i);
if (c === 47 || c === 92) {
return i;
}
}
return -1;
}
}
/** Gets if the provided path starts with the specified Path, URL, or string.
*
* This verifies based on matching the components.
*
* ```
* assert(new Path("/a/b/c").startsWith("/a/b"));
* assert(!new Path("/example").endsWith("/exam"));
* ```
*/
startsWith(path2) {
const startsWithComponents = ensurePath(path2).components();
for (const component of this.components()) {
const next = startsWithComponents.next();
if (next.done) {
return true;
}
if (next.value !== component) {
return false;
}
}
return startsWithComponents.next().done ?? true;
}
/** Gets if the provided path ends with the specified Path, URL, or string.
*
* This verifies based on matching the components.
*
* ```
* assert(new Path("/a/b/c").endsWith("b/c"));
* assert(!new Path("/a/b/example").endsWith("ple"));
* ```
*/
endsWith(path2) {
const endsWithComponents = ensurePath(path2).#rcomponents();
for (const component of this.#rcomponents()) {
const next = endsWithComponents.next();
if (next.done) {
return true;
}
if (next.value !== component) {
return false;
}
}
return endsWithComponents.next().done ?? true;
}
/** Gets the parent directory or returns undefined if the parent is the root directory. */
parent() {
const resolvedPath = this.resolve();
const dirname = resolvedPath.dirname();
if (dirname === resolvedPath.#path) {
return void 0;
} else {
return new _Path(dirname);
}
}
/** Gets the parent or throws if the current directory was the root. */
parentOrThrow() {
const parent = this.parent();
if (parent == null) {
throw new Error(`Cannot get the parent directory of '${this.#path}'.`);
}
return parent;
}
/**
* Returns the extension of the path with leading period or undefined
* if there is no extension.
*/
extname() {
const extName = (0, path_js_1.extname)(this.#path);
return extName.length === 0 ? void 0 : extName;
}
/** Gets a new path reference with the provided extension. */
withExtname(ext) {
const currentExt = this.extname();
const hasLeadingPeriod = ext.charCodeAt(0) === /* period */
46;
if (!hasLeadingPeriod && ext.length !== 0) {
ext = "." + ext;
}
return new _Path(this.#path.substring(0, this.#path.length - (currentExt?.length ?? 0)) + ext);
}
/** Gets a new path reference with the provided file or directory name. */
withBasename(basename) {
const currentBaseName = this.basename();
return new _Path(this.#path.substring(0, this.#path.length - currentBaseName.length) + basename);
}
/** Gets the relative path from this path to the specified path. */
relative(to) {
const toPathRef = ensurePath(to);
return (0, path_js_1.relative)(this.resolve().#path, toPathRef.resolve().toString());
}
/** Gets if the path exists. Beware of TOCTOU issues. */
exists() {
return this.lstat().then((info) => info != null);
}
/** Synchronously gets if the path exists. Beware of TOCTOU issues. */
existsSync() {
return this.lstatSync() != null;
}
/** Resolves to the absolute normalized path, with symbolic links resolved. */
realPath() {
return _fs.realPath(this.#path).then((path2) => new _Path(path2));
}
/** Synchronously resolves to the absolute normalized path, with symbolic links resolved. */
realPathSync() {
return new _Path(_fs.realPathSync(this.#path));
}
/** Creates a directory at this path.
* @remarks By default, this is recursive.
*/
async mkdir(options) {
await _fs.mkdirFn(this.#path, {
recursive: true,
...options
});
return this;
}
/** Synchronously creates a directory at this path.
* @remarks By default, this is recursive.
*/
mkdirSync(options) {
_fs.mkdirSyncFn(this.#path, {
recursive: true,
...options
});
return this;
}
async symlinkTo(target, opts) {
await createSymlink(this.#resolveCreateSymlinkOpts(target, opts));
}
symlinkToSync(target, opts) {
createSymlinkSync(this.#resolveCreateSymlinkOpts(target, opts));
}
#resolveCreateSymlinkOpts(target, opts) {
if (opts?.kind == null) {
if (typeof target === "string") {
return {
fromPath: this.resolve(),
targetPath: ensurePath(target),
text: target,
type: opts?.type
};
} else {
throw new Error("Please specify if this symlink is absolute or relative. Otherwise provide the target text.");
}
}
const targetPath = ensurePath(target).resolve();
if (opts?.kind === "relative") {
const fromPath = this.resolve();
const relativePath = fromPath.parentOrThrow().relative(targetPath);
return {
fromPath,
targetPath,
text: relativePath,
type: opts?.type
};
} else {
return {
fromPath: this.resolve(),
targetPath,
text: targetPath.toString(),
type: opts?.type
};
}
}
/**
* Creates a hardlink to the provided target path.
*/
async linkTo(targetPath) {
const targetPathRef = ensurePath(targetPath).resolve();
await _fs.linkFn(targetPathRef.toString(), this.resolve().toString());
}
/**
* Synchronously creates a hardlink to the provided target path.
*/
linkToSync(targetPath) {
const targetPathRef = ensurePath(targetPath).resolve();
_fs.linkSyncFn(targetPathRef.toString(), this.resolve().toString());
}
/** Reads the entries in the directory. */
async *readDir() {
const dir = this.resolve();
for await (const entry of _fs.readDir(dir.#path)) {
const out = entry;
out.path = dir.join(entry.name);
yield out;
}
}
/** Synchronously reads the entries in the directory. */
*readDirSync() {
const dir = this.resolve();
for (const entry of _fs.readDirSync(dir.#path)) {
const out = entry;
out.path = dir.join(entry.name);
yield out;
}
}
/** Reads only the directory file paths, not including symlinks. */
async *readDirFilePaths() {
const dir = this.resolve();
for await (const entry of _fs.readDir(dir.#path)) {
if (entry.isFile()) {
yield dir.join(entry.name);
}
}
}
/** Synchronously reads only the directory file paths, not including symlinks. */
*readDirFilePathsSync() {
const dir = this.resolve();
for (const entry of _fs.readDirSync(dir.#path)) {
if (entry.isFile()) {
yield dir.join(entry.name);
}
}
}
/** Reads the bytes from the file. */
readBytes(options) {
return _fs.readFile(this.#path, options);
}
/** Synchronously reads the bytes from the file. */
readBytesSync() {
return _fs.readFileSync(this.#path);
}
/** Calls `.readBytes()`, but returns undefined if the path doesn't exist. */
readMaybeBytes(options) {
return notFoundToUndefined(() => this.readBytes(options));
}
/** Calls `.readBytesSync()`, but returns undefined if the path doesn't exist. */
readMaybeBytesSync() {
return notFoundToUndefinedSync(() => this.readBytesSync());
}
/** Reads the text from the file. */
readText(options) {
return _fs.readTextFile(this.#path, options);
}
/** Synchronously reads the text from the file. */
readTextSync() {
return _fs.readTextFileSync(this.#path);
}
/** Calls `.readText()`, but returns undefined when the path doesn't exist.
* @remarks This still errors for other kinds of errors reading a file.
*/
readMaybeText(options) {
return notFoundToUndefined(() => this.readText(options));
}
/** Calls `.readTextSync()`, but returns undefined when the path doesn't exist.
* @remarks This still errors for other kinds of errors reading a file.
*/
readMaybeTextSync() {
return notFoundToUndefinedSync(() => this.readTextSync());
}
/** Reads the file's text and returns an array of its lines.
*
* Lines are split at `\n` or `\r\n`. Line terminators are not included.
* A trailing blank line caused by a final line ending is excluded (matches
* [Rust's `str::lines`](https://doc.rust-lang.org/std/primitive.str.html#method.lines)).
*/
async lines(options) {
return [...splitLines(await this.readText(options))];
}
/** Synchronously reads the file's text and returns an array of its lines.
*
* See `.lines()` for the splitting semantics.
*/
linesSync() {
return [...splitLines(this.readTextSync())];
}
/** Streams the file and iterates over its lines without loading it all into memory.
*
* See `.lines()` for the splitting semantics.
*/
async *linesIter(options) {
const file = await _fs.openFile(this.#path, { read: true });
try {
const decoder = new dntShim.TextDecoder();
const chunk = new Uint8Array(16384);
let buffer = "";
while (true) {
options?.signal?.throwIfAborted();
const n = await file.read(chunk);
if (n === 0)
break;
buffer += decoder.decode(chunk.subarray(0, n), { stream: true });
let start = 0;
while (true) {
const nl = buffer.indexOf("\n", start);
if (nl === -1)
break;
const end = nl > start && buffer.charCodeAt(nl - 1) === 13 ? nl - 1 : nl;
yield buffer.substring(start, end);
start = nl + 1;
}
if (start > 0)
buffer = buffer.substring(start);
}
buffer += decoder.decode();
if (buffer !== "")
yield buffer;
} finally {
try {
file.close();
} catch {
}
}
}
/** Synchronously streams the file and iterates over its lines without
* loading it all into memory.
*
* See `.lines()` for the splitting semantics.
*/
*linesIterSync() {
const file = _fs.openFileSync(this.#path, { read: true });
try {
const decoder = new dntShim.TextDecoder();
const chunk = new Uint8Array(16384);
let buffer = "";
while (true) {
const n = file.readSync(chunk);
if (n === 0)
break;
buffer += decoder.decode(chunk.subarray(0, n), { stream: true });
let start = 0;
while (true) {
const nl = buffer.indexOf("\n", start);
if (nl === -1)
break;
const end = nl > start && buffer.charCodeAt(nl - 1) === 13 ? nl - 1 : nl;
yield buffer.substring(start, end);
start = nl + 1;
}
if (start > 0)
buffer = buffer.substring(start);
}
buffer += decoder.decode();
if (buffer !== "")
yield buffer;
} finally {
try {
file.close();
} catch {
}
}
}
/** Reads and parses the file as JSON, throwing if it doesn't exist or is not valid JSON. */
async readJson(options) {
return this.#parseJson(await this.readText(options));
}
/** Synchronously reads and parses the file as JSON, throwing if it doesn't
* exist or is not valid JSON. */
readJsonSync() {
return this.#parseJson(this.readTextSync());
}
#parseJson(text) {
try {
return JSON.parse(text);
} catch (err) {
throw new Error(`Failed parsing JSON in '${this.toString()}'.`, {
cause: err
});
}
}
/**
* Calls `.readJson()`, but returns undefined if the file doesn't exist.
* @remarks This method will still throw if the file cannot be parsed as JSON.
*/
readMaybeJson(options) {
return notFoundToUndefined(() => this.readJson(options));
}
/**
* Calls `.readJsonSync()`, but returns undefined if the file doesn't exist.
* @remarks This method will still throw if the file cannot be parsed as JSON.
*/
readMaybeJsonSync() {
return notFoundToUndefinedSync(() => this.readJsonSync());
}
/** Writes out the provided bytes or text to the file.
*
* Strings are encoded as UTF-8.
*/
async write(data, options) {
const bytes = typeof data === "string" ? new TextEncoder().encode(data) : data;
await this.#withFileForWriting(options, (file) => {
return writeAll(file, bytes, options?.signal);
});
return this;
}
/** Synchronously writes out the provided bytes or text to the file.
*
* Strings are encoded as UTF-8.
*/
writeSync(data, options) {
const bytes = typeof data === "string" ? new TextEncoder().encode(data) : data;
this.#withFileForWritingSync(options, (file) => {
writeAllSync(file, bytes, options?.signal);
});
return this;
}
/** Writes the provided text to the file.
* @deprecated Use `.write(text)` instead — `write` now accepts strings.
*/
writeText(text, options) {
return this.write(text, options);
}
/** Synchronously writes the provided text to the file.
* @deprecated Use `.writeSync(text)` instead — `writeSync` now accepts strings.
*/
writeTextSync(text, options) {
return this.writeSync(text, options);
}
/** Writes out the provided object as compact JSON. */
async writeJson(obj, options) {
await this.write(JSON.stringify(obj) + "\n", options);
return this;
}
/** Synchronously writes out the provided object as compact JSON. */
writeJsonSync(obj, options) {
this.writeSync(JSON.stringify(obj) + "\n", options);
return this;
}
/** Writes out the provided object as formatted JSON. */
async writeJsonPretty(obj, options) {
await this.write(JSON.stringify(obj, void 0, 2) + "\n", options);
return this;
}
/** Synchronously writes out the provided object as formatted JSON. */
writeJsonPrettySync(obj, options) {
this.writeSync(JSON.stringify(obj, void 0, 2) + "\n", options);
return this;
}
/** Appends the provided bytes or text to the file.
*
* Strings are encoded as UTF-8.
*/
async append(data, options) {
const bytes = typeof data === "string" ? new TextEncoder().encode(data) : data;
await this.#withFileForAppending(options, (file) => writeAll(file, bytes, options?.signal));
return this;
}
/** Synchronously appends the provided bytes or text to the file.
*
* Strings are encoded as UTF-8.
*/
appendSync(data, options) {
const bytes = typeof data === "string" ? new TextEncoder().encode(data) : data;
this.#withFileForAppendingSync(options, (file) => {
writeAllSync(file, bytes, options?.signal);
});
return this;
}
#withFileForAppending(options, action) {
return this.#withFileForWriting({
append: true,
...options
}, action);
}
async #withFileForWriting(options, action) {
const file = await this.#openFileMaybeCreatingDirectory({
write: true,
create: true,
truncate: options?.append !== true,
...options
});
try {
return await action(file);
} finally {
try {
file.close();
} catch {
}
}
}
/** Opens a file, but handles if the directory does not exist. */
async #openFileMaybeCreatingDirectory(options) {
const resolvedPath = this.resolve();
try {
return await resolvedPath.open(options);
} catch (err) {
if (_fs.isNotFoundError(err)) {
const parent = resolvedPath.parent();
if (parent != null) {
try {
await parent.mkdir();
} catch {
throw err;
}
}
return await resolvedPath.open(options);
} else {
throw err;
}
}
}
#withFileForAppendingSync(options, action) {
return this.#withFileForWritingSync({
append: true,
...options
}, action);
}
#withFileForWritingSync(options, action) {
const file = this.#openFileForWritingSync(options);
try {
return action(file);
} finally {
try {
file.close();
} catch {
}
}
}
/** Opens a file for writing, but handles if the directory does not exist. */
#openFileForWritingSync(options) {
return this.#openFileMaybeCreatingDirectorySync({
write: true,
create: true,
truncate: options?.append !== true,
...options
});
}
/** Opens a file for writing, but handles if the directory does not exist. */
#openFileMaybeCreatingDirectorySync(options) {
try {
return this.openSync(options);
} catch (err) {
if (_fs.isNotFoundError(err)) {
const parent = this.resolve().parent();
if (parent != null) {
try {
parent.mkdirSync();
} catch {
throw err;
}
}
return this.openSync(options);
} else {
throw err;
}
}
}
/** Changes the permissions of the file or directory. */
async chmod(mode) {
await _fs.chmod(this.#path, mode);
return this;
}
/** Synchronously changes the permissions of the file or directory. */
chmodSync(mode) {
_fs.chmodSync(this.#path, mode);
return this;
}
/** Changes the ownership permissions of the file. */
async chown(uid, gid) {
await _fs.chown(this.#path, uid, gid);
return this;
}
/** Synchronously changes the ownership permissions of the file. */
chownSync(uid, gid) {
_fs.chownSync(this.#path, uid, gid);
return this;
}
/** Creates a new file or opens the existing one. */
create() {
return _fs.createFile(this.#path).then((file) => createFsFileWrapper(file));
}
/** Synchronously creates a new file or opens the existing one. */
createSync() {
return createFsFileWrapper(_fs.createFileSync(this.#path));
}
/** Creates a file throwing if a file previously existed. */
createNew() {
return this.open({
createNew: true,
read: true,
write: true
});
}
/** Synchronously creates a file throwing if a file previously existed. */
createNewSync() {
return this.openSync({
createNew: true,
read: true,
write: true
});
}
/** Opens a file. */
open(options) {
return _fs.openFile(this.#path, options).then((file) => createFsFileWrapper(file));
}
/** Opens a file synchronously. */
openSync(options) {
return createFsFileWrapper(_fs.openFileSync(this.#path, options));
}
/** Removes the file or directory from the file system. */
async remove(options) {
await _fs.remove(this.#path, options);
return this;
}
/** Removes the file or directory from the file system synchronously. */
removeSync(options) {
_fs.removeSync(this.#path, options);
return this;
}
/** Removes the file or directory from the file system, but doesn't throw
* when the file doesn't exist.
*/
async ensureRemove(options) {
try {
return await this.remove(options);
} catch (err) {
if (_fs.isNotFoundError(err)) {
return this;
} else {
throw err;
}
}
}
/** Removes the file or directory from the file system, but doesn't throw
* when the file doesn't exist.
*/
ensureRemoveSync(options) {
try {
return this.removeSync(options);
} catch (err) {
if (_fs.isNotFoundError(err)) {
return this;
} else {
throw err;
}
}
}
/**
* Ensures that a directory is empty.
* Deletes directory contents if the directory is not empty.
* If the directory does not exist, it is created.
* The directory itself is not deleted.
*/
async emptyDir() {
await _fs.emptyDir(this.toString());
return this;
}
/** Synchronous version of `emptyDir()` */
emptyDirSync() {
_fs.emptyDirSync(this.toString());
return this;
}
/** Ensures that the directory exists.
* If the directory structure does not exist, it is created. Like mkdir -p.
*/
async ensureDir() {
await _fs.ensureDir(this.toString());
return this;
}
/** Synchronously ensures that the directory exists.
* If the directory structure does not exist, it is created. Like mkdir -p.
*/
ensureDirSync() {
_fs.ensureDirSync(this.toString());
return this;
}
/**
* Ensures that the file exists.
* If the file that is requested to be created is in directories that do
* not exist these directories are created. If the file already exists,
* it is NOTMODIFIED.
*/
async ensureFile() {
await _fs.ensureFile(this.toString());
return this;
}
/**
* Synchronously ensures that the file exists.
* If the file that is requested to be created is in directories that do
* not exist these directories are created. If the file already exists,
* it is NOTMODIFIED.
*/
ensureFileSync() {
_fs.ensureFileSync(this.toString());
return this;
}
/** Copies a file or directory to the provided destination.
* @returns The destination path.
*/
async copy(destinationPath, options) {
const pathRef = ensurePath(destinationPath);
await _fs.copy(this.#path, pathRef.toString(), options);
return pathRef;
}
/** Copies a file or directory to the provided destination synchronously.
* @returns The destination path.
*/
copySync(destinationPath, options) {
const pathRef = ensurePath(destinationPath);
_fs.copySync(this.#path, pathRef.toString(), options);
return pathRef;
}
/**
* Copies the file or directory to the specified directory.
* @returns The destination path.
*/
copyToDir(destinationDirPath, options) {
const destinationPath = ensurePath(destinationDirPath).join(this.basename());
return this.copy(destinationPath, options);
}
/**
* Copies the file or directory to the specified directory synchronously.
* @returns The destination path.
*/
copyToDirSync(destinationDirPath, options) {
const destinationPath = ensurePath(destinationDirPath).join(this.basename());
return this.copySync(destinationPath, options);
}
/**
* Copies the file to the specified destination path.
* @returns The destination path.
*/
copyFile(destinationPath) {
const pathRef = ensurePath(destinationPath);
return _fs.copyFileFn(this.#path, pathRef.toString()).then(() => pathRef);
}
/**
* Copies the file to the destination path synchronously.
* @returns The destination path.
*/
copyFileSync(destinationPath) {
const pathRef = ensurePath(destinationPath);
_fs.copyFileSyncFn(this.#path, pathRef.toString());
return pathRef;
}
/**
* Copies the file to the specified directory.
* @returns The destination path.
*/
copyFileToDir(destinationDirPath) {
const destinationPath = ensurePath(destinationDirPath).join(this.basename());
return this.copyFile(destinationPath);
}
/**
* Copies the file to the specified directory synchronously.
* @returns The destination path.
*/
copyFileToDirSync(destinationDirPath) {
const destinationPath = ensurePath(destinationDirPath).join(this.basename());
return this.copyFileSync(destinationPath);
}
/**
* Moves the file or directory returning a promise that resolves to
* the renamed path.
* @returns The destination path.
*/
rename(newPath) {
const pathRef = ensurePath(newPath);
return _fs.renameFn(this.#path, pathRef.toString()).then(() => pathRef);
}
/**
* Moves the file or directory returning the renamed path synchronously.
* @returns The destination path.
*/
renameSync(newPath) {
const pathRef = ensurePath(newPath);
_fs.renameSyncFn(this.#path, pathRef.toString());
return pathRef;
}
/**
* Moves the file or directory to the specified directory.
* @returns The destination path.
*/
renameToDir(destinationDirPath) {
const destinationPath = ensurePath(destinationDirPath).join(this.basename());
return this.rename(destinationPath);
}
/**
* Moves the file or directory to the specified directory synchronously.
* @returns The destination path.
*/
renameToDirSync(destinationDirPath) {
const destinationPath = ensurePath(destinationDirPath).join(this.basename());
return this.renameSync(destinationPath);
}
/** Opens the file and pipes it to the writable stream. */
async pipeTo(dest, options) {
const file = await _fs.openFile(this.#path, { read: true });
try {
await file.readable.pipeTo(dest, options);
} finally {
try {
file.close();
} catch {
}
}
return this;
}
};
exports2.Path = Path;
function ensurePath(path2) {
return path2 instanceof Path ? path2 : new Path(path2);
}
function createFsFileWrapper(file) {
Object.setPrototypeOf(file, FsFileWrapper.prototype);
return file;
}
var FsFileWrapper = class extends _fs.FsFile {
/** Writes the provided text to this file, looping to handle partial writes. */
writeText(text) {
return this.writeBytes(new TextEncoder().encode(text));
}
/** Synchronously writes the provided text to this file, looping to handle partial writes. */
writeTextSync(text) {
return this.writeBytesSync(new TextEncoder().encode(text));
}
/** Writes all the provided bytes to this file, looping to handle partial writes. */
async writeBytes(bytes) {
let nwritten = 0;
while (nwritten < bytes.length) {
nwritten += await this.write(bytes.subarray(nwritten));
}
return this;
}
/** Synchronously writes all the provided bytes to this file, looping to handle partial writes. */
writeBytesSync(bytes) {
let nwritten = 0;
while (nwritten < bytes.length) {
nwritten += this.writeSync(bytes.subarray(nwritten));
}
return this;
}
/** Writes all the provided data to this file, dispatching to `.writeText` or `.writeBytes` based on input type. */
writeAll(data) {
return typeof data === "string" ? this.writeText(data) : this.writeBytes(data);
}
/** Synchronously writes all the provided data to this file, dispatching to `.writeTextSync` or `.writeBytesSync` based on input type. */
writeAllSync(data) {
return typeof data === "string" ? this.writeTextSync(data) : this.writeBytesSync(data);
}
};
exports2.FsFileWrapper = FsFileWrapper;
async function createSymlink(opts) {
let kind = opts.type;
if (kind == null && _fs.isWindows()) {
const info = await opts.targetPath.lstat();
if (info?.isDirectory()) {
kind = "dir";
} else if (info?.isFile()) {
kind = "file";
} else {
throw _fs.createNotFoundError(`The target path '${opts.targetPath}' did not exist or path kind could not be determined. When the path doesn't exist, you need to specify a symlink type on Windows.`);
}
}
await _fs.symlinkFn(opts.text, opts.fromPath.toString(), kind == null ? void 0 : {
type: kind
});
}
function createSymlinkSync(opts) {
let kind = opts.type;
if (kind == null && _fs.isWindows()) {
const info = opts.targetPath.lstatSync();
if (info?.isDirectory()) {
kind = "dir";
} else if (info?.isFile()) {
kind = "file";
} else {
throw _fs.createNotFoundError(`The target path '${opts.targetPath}' did not exist or path kind could not be determined. When the path doesn't exist, you need to specify a symlink type on Windows.`);
}
}
_fs.symlinkSyncFn(opts.text, opts.fromPath.toString(), kind == null ? void 0 : {
type: kind
});
}
async function notFoundToUndefined(action) {
try {
return await action();
} catch (err) {
if (_fs.isNotFoundError(err)) {
return void 0;
} else {
throw err;
}
}
}
function notFoundToUndefinedSync(action) {
try {
return action();
} catch (err) {
if (_fs.isNotFoundError(err)) {
return void 0;
} else {
throw err;
}
}
}
async function writeAll(writer, data, signal) {
let nwritten = 0;
while (nwritten < data.length) {
signal?.throwIfAborted();
nwritten += await writer.write(data.subarray(nwritten));
}
}
function writeAllSync(writer, data, signal) {
let nwritten = 0;
while (nwritten < data.length) {
signal?.throwIfAborted();
nwritten += writer.writeSync(data.subarray(nwritten));
}
}
function* splitLines(text) {
if (text === "")
return;
let start = 0;
while (true) {
const nl = text.indexOf("\n", start);
if (nl === -1) {
if (start < text.length)
yield text.substring(start);
return;
}
const end = nl > start && text.charCodeAt(nl - 1) === 13 ? nl - 1 : nl;
yield text.substring(start, end);
start = nl + 1;
if (start === text.length)
return;
}
}
}
});
// npm/script/deps/jsr.io/@david/console-static-text/0.3.4/lib/rs_lib.internal.js
var require_rs_lib_internal = __commonJS({
"npm/script/deps/jsr.io/@david/console-static-text/0.3.4/lib/rs_lib.internal.js"(exports2, module2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.StaticTextContainer = void 0;
exports2.__wbg_set_wasm = __wbg_set_wasm;
exports2.static_text_render_once = static_text_render_once;
exports2.strip_ansi_codes = strip_ansi_codes;
exports2.__wbg_buffer_609cc3eee51ed158 = __wbg_buffer_609cc3eee51ed158;
exports2.__wbg_call_672a4d21634d4a24 = __wbg_call_672a4d21634d4a24;
exports2.__wbg_done_769e5ede4b31c67b = __wbg_done_769e5ede4b31c67b;
exports2.__wbg_entries_3265d4158b33e5dc = __wbg_entries_3265d4158b33e5dc;
exports2.__wbg_get_67b2ba62fc30de12 = __wbg_get_67b2ba62fc30de12;
exports2.__wbg_get_b9b93047fe3cf45b = __wbg_get_b9b93047fe3cf45b;
exports2.__wbg_instanceof_ArrayBuffer_e14585432e3737fc = __wbg_instanceof_ArrayBuffer_e14585432e3737fc;
exports2.__wbg_instanceof_Map_f3469ce2244d2430 = __wbg_instanceof_Map_f3469ce2244d2430;
exports2.__wbg_instanceof_Uint8Array_17156bcf118086a9 = __wbg_instanceof_Uint8Array_17156bcf118086a9;
exports2.__wbg_isArray_a1eab7e0d067391b = __wbg_isArray_a1eab7e0d067391b;
exports2.__wbg_isSafeInteger_343e2beeeece1bb0 = __wbg_isSafeInteger_343e2beeeece1bb0;
exports2.__wbg_iterator_9a24c88df860dc65 = __wbg_iterator_9a24c88df860dc65;
exports2.__wbg_length_a446193dc22c12f8 = __wbg_length_a446193dc22c12f8;
exports2.__wbg_length_e2d2a49132c1b256 = __wbg_length_e2d2a49132c1b256;
exports2.__wbg_new_a12002a7f91c75be = __wbg_new_a12002a7f91c75be;
exports2.__wbg_next_25feadfc0913fea9 = __wbg_next_25feadfc0913fea9;
exports2.__wbg_next_6574e1a8a62d1055 = __wbg_next_6574e1a8a62d1055;
exports2.__wbg_set_65595bdd868b3009 = __wbg_set_65595bdd868b3009;
exports2.__wbg_value_cd1ffa7b1ab794f1 = __wbg_value_cd1ffa7b1ab794f1;
exports2.__wbindgen_bigint_from_i64 = __wbindgen_bigint_from_i64;
exports2.__wbindgen_bigint_from_u64 = __wbindgen_bigint_from_u64;
exports2.__wbindgen_bigint_get_as_i64 = __wbindgen_bigint_get_as_i64;
exports2.__wbindgen_boolean_get = __wbindgen_boolean_get;
exports2.__wbindgen_debug_string = __wbindgen_debug_string;
exports2.__wbindgen_error_new = __wbindgen_error_new;
exports2.__wbindgen_in = __wbindgen_in;
exports2.__wbindgen_init_externref_table = __wbindgen_init_externref_table;
exports2.__wbindgen_is_bigint = __wbindgen_is_bigint;
exports2.__wbindgen_is_function = __wbindgen_is_function;
exports2.__wbindgen_is_object = __wbindgen_is_object;
exports2.__wbindgen_jsval_eq = __wbindgen_jsval_eq;
exports2.__wbindgen_jsval_loose_eq = __wbindgen_jsval_loose_eq;
exports2.__wbindgen_memory = __wbindgen_memory;
exports2.__wbindgen_number_get = __wbindgen_number_get;
exports2.__wbindgen_string_get = __wbindgen_string_get;
exports2.__wbindgen_throw = __wbindgen_throw;
var dntShim = __importStar2(require_dnt_shims());
var wasm;
function __wbg_set_wasm(val) {
wasm = val;
}
function addToExternrefTable0(obj) {
const idx = wasm.__externref_table_alloc();
wasm.__wbindgen_export_2.set(idx, obj);
return idx;
}
function handleError(f, args) {
try {
return f.apply(this, args);
} catch (e) {
const idx = addToExternrefTable0(e);
wasm.__wbindgen_exn_store(idx);
}
}
function isLikeNone(x) {
return x === void 0 || x === null;
}
var cachedDataViewMemory0 = null;
function getDataViewMemory0() {
if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || cachedDataViewMemory0.buffer.detached === void 0 && cachedDataViewMemory0.buffer !== wasm.memory.buffer) {
cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
}
return cachedDataViewMemory0;
}
function debugString(val) {
const type = typeof val;
if (type == "number" || type == "boolean" || val == null) {
return `${val}`;
}
if (type == "string") {
return `"${val}"`;
}
if (type == "symbol") {
const description = val.description;
if (description == null) {
return "Symbol";
} else {
return `Symbol(${description})`;
}
}
if (type == "function") {
const name = val.name;
if (typeof name == "string" && name.length > 0) {
return `Function(${name})`;
} else {
return "Function";
}
}
if (Array.isArray(val)) {
const length = val.length;
let debug = "[";
if (length > 0) {
debug += debugString(val[0]);
}
for (let i = 1; i < length; i++) {
debug += ", " + debugString(val[i]);
}
debug += "]";
return debug;
}
const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val));
let className;
if (builtInMatches && builtInMatches.length > 1) {
className = builtInMatches[1];
} else {
return toString.call(val);
}
if (className == "Object") {
try {
return "Object(" + JSON.stringify(val) + ")";
} catch (_) {
return "Object";
}
}
if (val instanceof Error) {
return `${val.name}: ${val.message}
${val.stack}`;
}
return className;
}
var WASM_VECTOR_LEN = 0;
var cachedUint8ArrayMemory0 = null;
function getUint8ArrayMemory0() {
if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
}
return cachedUint8ArrayMemory0;
}
var lTextEncoder = typeof TextEncoder === "undefined" ? (0, module2.require)("util").TextEncoder : TextEncoder;
var cachedTextEncoder = new lTextEncoder("utf-8");
var encodeString = typeof cachedTextEncoder.encodeInto === "function" ? function(arg, view) {
return cachedTextEncoder.encodeInto(arg, view);
} : function(arg, view) {
const buf = cachedTextEncoder.encode(arg);
view.set(buf);
return {
read: arg.length,
written: buf.length
};
};
function passStringToWasm0(arg, malloc, realloc) {
if (realloc === void 0) {
const buf = cachedTextEncoder.encode(arg);
const ptr2 = malloc(buf.length, 1) >>> 0;
getUint8ArrayMemory0().subarray(ptr2, ptr2 + buf.length).set(buf);
WASM_VECTOR_LEN = buf.length;
return ptr2;
}
let len = arg.length;
let ptr = malloc(len, 1) >>> 0;
const mem = getUint8ArrayMemory0();
let offset = 0;
for (; offset < len; offset++) {
const code = arg.charCodeAt(offset);
if (code > 127)
break;
mem[ptr + offset] = code;
}
if (offset !== len) {
if (offset !== 0) {
arg = arg.slice(offset);
}
ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);
const ret = encodeString(arg, view);
offset += ret.written;
ptr = realloc(ptr, len, offset, 1) >>> 0;
}
WASM_VECTOR_LEN = offset;
return ptr;
}
var lTextDecoder = typeof dntShim.TextDecoder === "undefined" ? (0, module2.require)("util").TextDecoder : dntShim.TextDecoder;
var cachedTextDecoder = new lTextDecoder("utf-8", {
ignoreBOM: true,
fatal: true
});
cachedTextDecoder.decode();
function getStringFromWasm0(ptr, len) {
ptr = ptr >>> 0;
return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
}
function takeFromExternrefTable0(idx) {
const value = wasm.__wbindgen_export_2.get(idx);
wasm.__externref_table_dealloc(idx);
return value;
}
function static_text_render_once(items, cols, rows) {
const ret = wasm.static_text_render_once(items, isLikeNone(cols) ? 4294967297 : cols >>> 0, isLikeNone(rows) ? 4294967297 : rows >>> 0);
if (ret[3]) {
throw takeFromExternrefTable0(ret[2]);
}
let v1;
if (ret[0] !== 0) {
v1 = getStringFromWasm0(ret[0], ret[1]).slice();
wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
}
return v1;
}
function strip_ansi_codes(text) {
let deferred2_0;
let deferred2_1;
try {
const ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len0 = WASM_VECTOR_LEN;
const ret = wasm.strip_ansi_codes(ptr0, len0);
deferred2_0 = ret[0];
deferred2_1 = ret[1];
return getStringFromWasm0(ret[0], ret[1]);
} finally {
wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
}
}
var StaticTextContainerFinalization = typeof FinalizationRegistry === "undefined" ? { register: () => {
}, unregister: () => {
} } : new FinalizationRegistry((ptr) => wasm.__wbg_statictextcontainer_free(ptr >>> 0, 1));
var StaticTextContainer = class {
__destroy_into_raw() {
const ptr = this.__wbg_ptr;
this.__wbg_ptr = 0;
StaticTextContainerFinalization.unregister(this);
return ptr;
}
free() {
const ptr = this.__destroy_into_raw();
wasm.__wbg_statictextcontainer_free(ptr, 0);
}
constructor() {
const ret = wasm.statictextcontainer_new();
this.__wbg_ptr = ret >>> 0;
StaticTextContainerFinalization.register(this, this.__wbg_ptr, this);
return this;
}
/**
* @param {any} items
* @param {number | null} [cols]
* @param {number | null} [rows]
* @returns {string | undefined}
*/
render_text(items, cols, rows) {
const ret = wasm.statictextcontainer_render_text(this.__wbg_ptr, items, isLikeNone(cols) ? 4294967297 : cols >>> 0, isLikeNone(rows) ? 4294967297 : rows >>> 0);
if (ret[3]) {
throw takeFromExternrefTable0(ret[2]);
}
let v1;
if (ret[0] !== 0) {
v1 = getStringFromWasm0(ret[0], ret[1]).slice();
wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
}
return v1;
}
/**
* @param {number | null} [cols]
* @param {number | null} [rows]
* @returns {string | undefined}
*/
clear_text(cols, rows) {
const ret = wasm.statictextcontainer_clear_text(this.__wbg_ptr, isLikeNone(cols) ? 4294967297 : cols >>> 0, isLikeNone(rows) ? 4294967297 : rows >>> 0);
let v1;
if (ret[0] !== 0) {
v1 = getStringFromWasm0(ret[0], ret[1]).slice();
wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
}
return v1;
}
};
exports2.StaticTextContainer = StaticTextContainer;
function __wbg_buffer_609cc3eee51ed158(arg0) {
const ret = arg0.buffer;
return ret;
}
function __wbg_call_672a4d21634d4a24() {
return handleError(function(arg0, arg1) {
const ret = arg0.call(arg1);
return ret;
}, arguments);
}
function __wbg_done_769e5ede4b31c67b(arg0) {
const ret = arg0.done;
return ret;
}
function __wbg_entries_3265d4158b33e5dc(arg0) {
const ret = Object.entries(arg0);
return ret;
}
function __wbg_get_67b2ba62fc30de12() {
return handleError(function(arg0, arg1) {
const ret = Reflect.get(arg0, arg1);
return ret;
}, arguments);
}
function __wbg_get_b9b93047fe3cf45b(arg0, arg1) {
const ret = arg0[arg1 >>> 0];
return ret;
}
function __wbg_instanceof_ArrayBuffer_e14585432e3737fc(arg0) {
let result;
try {
result = arg0 instanceof ArrayBuffer;
} catch (_) {
result = false;
}
const ret = result;
return ret;
}
function __wbg_instanceof_Map_f3469ce2244d2430(arg0) {
let result;
try {
result = arg0 instanceof Map;
} catch (_) {
result = false;
}
const ret = result;
return ret;
}
function __wbg_instanceof_Uint8Array_17156bcf118086a9(arg0) {
let result;
try {
result = arg0 instanceof Uint8Array;
} catch (_) {
result = false;
}
const ret = result;
return ret;
}
function __wbg_isArray_a1eab7e0d067391b(arg0) {
const ret = Array.isArray(arg0);
return ret;
}
function __wbg_isSafeInteger_343e2beeeece1bb0(arg0) {
const ret = Number.isSafeInteger(arg0);
return ret;
}
function __wbg_iterator_9a24c88df860dc65() {
const ret = Symbol.iterator;
return ret;
}
function __wbg_length_a446193dc22c12f8(arg0) {
const ret = arg0.length;
return ret;
}
function __wbg_length_e2d2a49132c1b256(arg0) {
const ret = arg0.length;
return ret;
}
function __wbg_new_a12002a7f91c75be(arg0) {
const ret = new Uint8Array(arg0);
return ret;
}
function __wbg_next_25feadfc0913fea9(arg0) {
const ret = arg0.next;
return ret;
}
function __wbg_next_6574e1a8a62d1055() {
return handleError(function(arg0) {
const ret = arg0.next();
return ret;
}, arguments);
}
function __wbg_set_65595bdd868b3009(arg0, arg1, arg2) {
arg0.set(arg1, arg2 >>> 0);
}
function __wbg_value_cd1ffa7b1ab794f1(arg0) {
const ret = arg0.value;
return ret;
}
function __wbindgen_bigint_from_i64(arg0) {
const ret = arg0;
return ret;
}
function __wbindgen_bigint_from_u64(arg0) {
const ret = BigInt.asUintN(64, arg0);
return ret;
}
function __wbindgen_bigint_get_as_i64(arg0, arg1) {
const v = arg1;
const ret = typeof v === "bigint" ? v : void 0;
getDataViewMemory0().setBigInt64(arg0 + 8 * 1, isLikeNone(ret) ? BigInt(0) : ret, true);
getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);
}
function __wbindgen_boolean_get(arg0) {
const v = arg0;
const ret = typeof v === "boolean" ? v ? 1 : 0 : 2;
return ret;
}
function __wbindgen_debug_string(arg0, arg1) {
const ret = debugString(arg1);
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
}
function __wbindgen_error_new(arg0, arg1) {
const ret = new Error(getStringFromWasm0(arg0, arg1));
return ret;
}
function __wbindgen_in(arg0, arg1) {
const ret = arg0 in arg1;
return ret;
}
function __wbindgen_init_externref_table() {
const table = wasm.__wbindgen_export_2;
const offset = table.grow(4);
table.set(0, void 0);
table.set(offset + 0, void 0);
table.set(offset + 1, null);
table.set(offset + 2, true);
table.set(offset + 3, false);
}
function __wbindgen_is_bigint(arg0) {
const ret = typeof arg0 === "bigint";
return ret;
}
function __wbindgen_is_function(arg0) {
const ret = typeof arg0 === "function";
return ret;
}
function __wbindgen_is_object(arg0) {
const val = arg0;
const ret = typeof val === "object" && val !== null;
return ret;
}
function __wbindgen_jsval_eq(arg0, arg1) {
const ret = arg0 === arg1;
return ret;
}
function __wbindgen_jsval_loose_eq(arg0, arg1) {
const ret = arg0 == arg1;
return ret;
}
function __wbindgen_memory() {
const ret = wasm.memory;
return ret;
}
function __wbindgen_number_get(arg0, arg1) {
const obj = arg1;
const ret = typeof obj === "number" ? obj : void 0;
getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);
getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);
}
function __wbindgen_string_get(arg0, arg1) {
const obj = arg1;
const ret = typeof obj === "string" ? obj : void 0;
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
var len1 = WASM_VECTOR_LEN;
getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
}
function __wbindgen_throw(arg0, arg1) {
throw new Error(getStringFromWasm0(arg0, arg1));
}
}
});
// npm/script/deps/jsr.io/@david/console-static-text/0.3.4/lib/rs_lib.js
var require_rs_lib = __commonJS({
"npm/script/deps/jsr.io/@david/console-static-text/0.3.4/lib/rs_lib.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
for (var p in m)
if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p))
__createBinding2(exports3, m, p);
};
Object.defineProperty(exports2, "__esModule", { value: true });
var imports = __importStar2(require_rs_lib_internal());
var bytes = base64decode("AGFzbQEAAAABpwIrYAJ/fwBgAn9/AX9gA39/fwF/YAN/f38AYAF/AGABfwF/YAFvAX9gBX9/f39/AGAEf39/fwBgAW8Bb2AEf39/fwF/YAJ/bwBgBn9/f39/fwBgAAR/f39/YAACf39gAm9vAX9gAAF/YAV/f39/fwF/YAF+AW9gAAFvYAJvbwFvYAAAYAZ/f39/f38Bf2ADf35/AGACf34AYAJvfwFvYAJ/fwFvYANvb38AYAh/f39/f39/fwBgCX9/f39/f35+fgBgB39/f39/f38Bf2ADf35+AGACf3wAYAR/b3x8BH9/f39gA298fAR/f39/YAN/fHwCf39gAn9/An9/YAV/f31/fwBgBH99f38AYAV/f35/fwBgBH9+f38AYAV/f3x/fwBgBH98f38AApcOJBQuL3JzX2xpYi5pbnRlcm5hbC5qcxpfX3diZ19nZXRfYjliOTMwNDdmZTNjZjQ1YgAZFC4vcnNfbGliLmludGVybmFsLmpzGV9fd2JpbmRnZW5fanN2YWxfbG9vc2VfZXEADxQuL3JzX2xpYi5pbnRlcm5hbC5qcyxfX3diZ19pbnN0YW5jZW9mX1VpbnQ4QXJyYXlfMTcxNTZiY2YxMTgwODZhOQAGFC4vcnNfbGliLmludGVybmFsLmpzLV9fd2JnX2luc3RhbmNlb2ZfQXJyYXlCdWZmZXJfZTE0NTg1NDMyZTM3MzdmYwAGFC4vcnNfbGliLmludGVybmFsLmpzGl9fd2JnX25ld19hMTIwMDJhN2Y5MWM3NWJlAAkULi9yc19saWIuaW50ZXJuYWwuanMWX193YmluZGdlbl9ib29sZWFuX2dldAAGFC4vcnNfbGliLmludGVybmFsLmpzFV9fd2JpbmRnZW5fbnVtYmVyX2dldAALFC4vcnNfbGliLmludGVybmFsLmpzFV9fd2JpbmRnZW5fc3RyaW5nX2dldAALFC4vcnNfbGliLmludGVybmFsLmpzFF9fd2JpbmRnZW5fZXJyb3JfbmV3ABoULi9yc19saWIuaW50ZXJuYWwuanMdX193YmdfbGVuZ3RoX2UyZDJhNDkxMzJjMWIyNTYABhQuL3JzX2xpYi5pbnRlcm5hbC5qcxRfX3diaW5kZ2VuX2lzX2JpZ2ludAAGFC4vcnNfbGliLmludGVybmFsLmpzJF9fd2JnX2lzU2FmZUludGVnZXJfMzQzZTJiZWVlZWNlMWJiMAAGFC4vcnNfbGliLmludGVybmFsLmpzGl9fd2JpbmRnZW5fYmlnaW50X2Zyb21faTY0ABIULi9yc19saWIuaW50ZXJuYWwuanMaX193YmluZGdlbl9iaWdpbnRfZnJvbV91NjQAEhQuL3JzX2xpYi5pbnRlcm5hbC5qcxRfX3diaW5kZ2VuX2lzX29iamVjdAAGFC4vcnNfbGliLmludGVybmFsLmpzH19fd2JnX2l0ZXJhdG9yXzlhMjRjODhkZjg2MGRjNjUAExQuL3JzX2xpYi5pbnRlcm5hbC5qcw1fX3diaW5kZ2VuX2luAA8ULi9yc19saWIuaW50ZXJuYWwuanMlX193YmdfaW5zdGFuY2VvZl9NYXBfZjM0NjljZTIyNDRkMjQzMAAGFC4vcnNfbGliLmludGVybmFsLmpzHl9fd2JnX2VudHJpZXNfMzI2NWQ0MTU4YjMzZTVkYwAJFC4vcnNfbGliLmludGVybmFsLmpzE19fd2JpbmRnZW5fanN2YWxfZXEADxQuL3JzX2xpYi5pbnRlcm5hbC5qcxZfX3diaW5kZ2VuX2lzX2Z1bmN0aW9uAAYULi9yc19saWIuaW50ZXJuYWwuanMbX193YmdfbmV4dF82NTc0ZTFhOGE2MmQxMDU1AAkULi9yc19saWIuaW50ZXJuYWwuanMbX193YmdfZG9uZV83NjllNWVkZTRiMzFjNjdiAAYULi9yc19saWIuaW50ZXJuYWwuanMcX193YmdfdmFsdWVfY2QxZmZhN2IxYWI3OTRmMQAJFC4vcnNfbGliLmludGVybmFsLmpzGl9fd2JnX2dldF82N2IyYmE2MmZjMzBkZTEyABQULi9yc19saWIuaW50ZXJuYWwuanMbX193YmdfY2FsbF82NzJhNGQyMTYzNGQ0YTI0ABQULi9yc19saWIuaW50ZXJuYWwuanMbX193YmdfbmV4dF8yNWZlYWRmYzA5MTNmZWE5AAkULi9yc19saWIuaW50ZXJuYWwuanMeX193YmdfaXNBcnJheV9hMWVhYjdlMGQwNjczOTFiAAYULi9yc19saWIuaW50ZXJuYWwuanMdX193YmdfbGVuZ3RoX2E0NDYxOTNkYzIyYzEyZjgABhQuL3JzX2xpYi5pbnRlcm5hbC5qcxFfX3diaW5kZ2VuX21lbW9yeQATFC4vcnNfbGliLmludGVybmFsLmpzHV9fd2JnX2J1ZmZlcl82MDljYzNlZWU1MWVkMTU4AAkULi9yc19saWIuaW50ZXJuYWwuanMaX193Ymdfc2V0XzY1NTk1YmRkODY4YjMwMDkAGxQuL3JzX2xpYi5pbnRlcm5hbC5qcxBfX3diaW5kZ2VuX3Rocm93AAAULi9yc19saWIuaW50ZXJuYWwuanMcX193YmluZGdlbl9iaWdpbnRfZ2V0X2FzX2k2NAALFC4vcnNfbGliLmludGVybmFsLmpzF19fd2JpbmRnZW5fZGVidWdfc3RyaW5nAAsULi9yc19saWIuaW50ZXJuYWwuanMfX193YmluZGdlbl9pbml0X2V4dGVybnJlZl90YWJsZQAVA4UCgwIFHAEABwADCAIBAwEKAQMABAMAARYCAwMAAgIAHRABAAACAB4XDAMDDAEBAAEIAQAHAwAHABUBAwMAAAgABAUCBwAAAQAMCAEIDAUAAR8HAAADAwgDAAIEAgABCAAAAAMBAAADAwQABAMDAAgAAAcBBAEAAAAHBAACAwMAAwMABwADGBggAwEBEAQDAAQEAwEBBQUAAAADEQEEAQQBCiEAIgAAASMEJAAAAAAEFgoDBxElJykDAQgEBAIBBAQEAQEEBQEAAQEABAABBAQEAQEBAQEBAgADBAQHAQQFEAMBAQAFAAQBBQAAAwMAAAAEAQAABQUAAAAAAAAFBQUFAAcICggXBAkCcAE2Nm8AgAEFAwEAEQYJAX8BQYCAwAALB/ACDwZtZW1vcnkCAB5fX3diZ19zdGF0aWN0ZXh0Y29udGFpbmVyX2ZyZWUAXhdzdGF0aWN0ZXh0Y29udGFpbmVyX25ldwCsAR9zdGF0aWN0ZXh0Y29udGFpbmVyX3JlbmRlcl90ZXh0AMIBHnN0YXRpY3RleHRjb250YWluZXJfY2xlYXJfdGV4dADIARdzdGF0aWNfdGV4dF9yZW5kZXJfb25jZQDEARBzdHJpcF9hbnNpX2NvZGVzAMoBFF9fd2JpbmRnZW5fZXhuX3N0b3JlAPoBF19fZXh0ZXJucmVmX3RhYmxlX2FsbG9jAEETX193YmluZGdlbl9leHBvcnRfMgEBEV9fd2JpbmRnZW5fbWFsbG9jALwBEl9f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EIYBIANBNGogAUG4mcAAEJ0BDAELA0AgA0HMAGoQtgEiBkGAgMQARwRAIANBCGogBhB9IAMoAghBAXFFDQEgBSADKAIMIgEgBGoiBEkEQCADQYABaiIEIANBkAFqEIYBIANBNGogBEGomcAAEJ0BIANBADYCnAEgAyAGIANBnAFqEJ4BIAQgAygCACADKAIEEIwBIANBmAFqIANBiAFqKAIANgIAIAMgAykCgAE3A5ABIAEhBAwCBSADQZABaiAGEIUBDAILAAsLIAMoApgBBEAgA0GAAWoiASADQZABahCGASADQTRqIAFBmJnAABCdAQUgAygCkAEgAygClAEQjgILDAALAAsgA0HYAGogAiABENgBA0AgA0EYaiADQdgAahBGIAMoAhgiAUUNBiADQZABaiIEIAEgAygCHBCMASADQYABaiIBIAQQhgEgA0E0aiABQciZwAAQnQEMAAsACyAEKQIEIQ4gASAKaiILIAc2AgAgC0EEaiAONwIAIAZBEGshBiAFQRBqIQUgAUEMaiEBIAhBAWohCCAEQRBqIQQMAQsLDAQLDAMLIAAgASkCADcCACABQoCAgIDAADcCACAAQQhqIAFBCGoiACgCADYCACAAQQA2AgAMAQsgA0GIAWoiBCADQTxqKAIANgIAIAMgAykCNDcDgAECQCAOQoCAgIAQg1ANACADKAKIASIGIA5CMIinIgFNDQAgA0EANgKIASADIAMoAoQBIgU2AlggAyABNgJoIAMgBiABayIBNgJkIAMgBSABQQR0ajYCXCADIANBgAFqNgJgIANB2ABqEGELIAAgAykDgAE3AgAgAEEIaiAEKAIANgIAIAMoAkAgAhDqASAHIAoQjgIgCSEBA0AgCARAIAEoAgAgAUEEaigCABCOAiAIQQFrIQggAUEMaiEBDAELCyAMIAlBBEEMEHcLIANBoAFqJAAPCyADQQA2AmggA0EBNgJcIANByJXAADYCWCADQgQ3AmAgA0HYAGpB9JbAABDGAQALzAoBBX8jAEEQayIGJAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAJB/wFxQQFrDg8ACgsCAQwZBhEHEggYGAkZCyAAQQA6AIEKIABBADYC8AEgAEEAOwH+CSAAQQA6AOQBIABBADYC4AEM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IAAoAugBIAJBH3FBBnRyNgLoAUEDIQMMCAsgAsBBQEgiBEEBdCEDCyAERQ0EIAAgACgC6AEgAkE/cUEMdHI2AugBDAYLQQULIQMgACAAKALoASACQQ9xQQx0cjYC6AEMBAtBByEDCyAAIAAoAugBIAJBB3FBEnRyNgLoAQwCCyAAQQA2AugBIAEoAhQhAiABLQAYQQFGBEAgAUEAOgAYIAEgAkEDazYCDAsgAEEMOgCACiABIAI2AhAMAQsgACAAKALoASACQT9xQQZ0cjYC6AFBAyEDCyAAIAM6AOwBC6MEAQd/IwBBoAprIgMkACADQQBBgAH8CwAgA0EANgLwASADQQw6AIAKIANBgAFqQQBB5QD8CwAgA0EAOgCBCiADQQA2AvQBIANCADcC+AkgA0EAOgDsASADQQA2AugBIANCADcClAogA0IANwKMCiADQQA6AJwKIANCgICAgMAANwKECgNAAkACQCACBEAgAyADKAKYCkEBajYCmAogAS0AACEEIAMtAIAKIgdBD0YEQCADIANBhApqIAQQOgwDCyAEQfaZwQBqLQAAIgVFBEAgB0EIdCAEckH2mcEAai0AACEFCyAFQfABcUEEdiEIIAVBD3EiBkUEQCADIANBhApqIAggBBArDAMLQQghCQJAAkACQCAHQQlrDgUAAgICAQILQQ4hCQsgAyADQYQKaiAJIAQQKwsgBUEPTQ0BIAMgA0GECmogCCAEECsMAQsgAyADKAKYCjYClAogA0GECmogAy0AnAoQjgEgAEEIaiADQYwKaigCADYCACAAIAMpAoQKNwIAIANBoApqJAAPCwJAAkACQAJAAkAgBkEFaw4JAgQEBAACBAQDAQsgAyADQYQKakEGIAQQKwwDCyAGQQFHDQILIANBADoAgQogA0EANgLwASADQQA7Af4JIANBADoA5AEgA0EANgLgAQwBCyADKAL0AQRAIANBADYC9AELIANBADYC+AkLIAMgBjoAgAoLIAFBAWohASACQQFrIQIMAAsAC/kDAQJ/IAAgAWohAgJAAkAgACgCBCIDQQFxDQAgA0ECcUUNASAAKAIAIgMgAWohASAAIANrIgBBgMDBACgCAEYEQCACKAIEQQNxQQNHDQFB+L/BACABNgIAIAIgAigCBEF+cTYCBCAAIAFBAXI2AgQgAiABNgIADAILIAAgAxBE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ADYCGCAAQgQ3AiAgAEEYakGQu8EAEMYBAAv2AQECfyMAQTBrIgIkAAJAIAApAwBC////////////AINCgICAgICAgPj/AFoEQCACQQE2AhQgAkHA08AANgIQIAJCATcCHCACQR42AiwgAiAANgIoIAIgAkEoajYCGCABKAIAIAEoAgQgAkEQahD3ASEDDAELIAJBADoADCACIAE2AghBASEDIAJBATYCFCACQcDTwAA2AhAgAkIBNwIcIAJBHjYCLCACIAA2AiggAiACQShqNgIYIAJBCGogAkEQahD2AQ0AIAItAAxFBEAgASgCAEHI08AAQQIgASgCBCgCDBECAA0BC0EAIQMLIAJBMGokACADC/gBAQN/IwBBIGsiAyQAAkACf0EAIAEgASACaiICSw0AGkEAQQggAiAAKAIAIgRBAXQiASABIAJJGyIBIAFBCE0bIgFBAEgNABogAyAEBH8gAyAENgIcIAMgACgCBDYCFEEBBUEACzYCGCADQQhqIQICfwJAIANBFGoiBCgCBEUNACAEKAIIIgVFDQAgBCgCACAFQQEgARAwDAELIAEQJAshBCACIAE2AgggAiAEQQEgBBs2AgQgAiAERTYCACADKAIIQQFHDQEgAygCEBogAygCDAtB1JLAABDnAQALIAMoAgwhAiAAIAE2AgAgACACNgIEIANBIGokAAuzAQEDfyMAQRBrIgUkACABKAIIIgMgAksEQCABKAIEIAJBA3RqIgQoAgQhASAEKAIAIQQgACADIAJBAWpLBH8gBUEANgIMIAVBDSAFQQxqEJ4BQQAhAiAFKAIEIgMgAU0EQCAEQQAgBSgCACADIAQgASADa2ogAxDRARshAgsgAiAEIAIbIQQgASADQQAgAhtrBSABCzYCBCAAIAQ2AgAgBUEQaiQADwsgAiADQZiawAAQdgALsQEAAkAgAEGAAU8EQCAAQYAQSQ0BIABBgIAETwRAIAEgAEE/cUGAAXI6AAMgASAAQRJ2QfABcjoAACABIABBBnZBP3FBgAFyOgACIAEgAEEMdkE/cUGAAXI6AAEPCyABIABBP3FBgAFyOgACIAEgAEEMdkHgAXI6AAAgASAAQQZ2QT9xQYABcjoAAQ8LIAEgADoAAA8LIAEgAEE/cUGAAXI6AAEgASAAQQZ2QcABcjoAAAu+AQICfwF+IwBBIGsiAiQAIAAQ/gEgAEEIayEDAkACQCABRQRAIAMoAgBBAUcNAiACQRhqIABBHGopAgA3AwAgAkEQaiAAQRRqKQIANwMAIAJBCGogAEEMaikCADcDACAAKQIEIQQgA0EANgIAIAIgBDcDAAJAIANBf0YNACAAQQRrIgAgACgCAEEBayIANgIAIAANACADQSwQgAELIAIQmgEMAQsgAxDbAQsgAkEgaiQADwtBldDAAEE/EJQCAAupAQICfwF+IwBBEGsiBCQAIAACfwJAIAIgA2pBAWtBACACa3GtIAGtfiIGQiCIUARAIAanIgNBgICAgHggAmtNDQELIABBADYCBEEBDAELIANFBEAgACACNgIIIABBADYCBEEADAELIARBCGogAiADENIBIAQoAggiBQRAIAAgBTYCCCAAIAE2AgRBAAwBCyAAIAM2AgggACACNgIEQQELNgIAIARBEGokAAvCAQEFfyMAQRBrIgMkACABKAIMIQICQAJAAkACQAJAAkAgASgCBA4CAAECCyACDQFBASECQQAhAQwCCyACDQAgASgCACICKAIEIQEgAigCACECDAELIAAgARBTDAELIANBBGogAUEBQQEQXyADKAIIIQQgAygCBEEBRg0BIAMoAgwhBSABBEAgBSACIAH8CgAACyAAIAE2AgggACAFNgIEIAAgBDYCAAsgA0EQaiQADwsgAygCDCEGIARBxM7AABDnAQALrQEBBX8gACgCBCEBIAAoAgAhAiAAQoSAgIDAADcCAAJAIAEgAkYNACABIAJrQQR2IQEDQCABRQ0BIAIoAgAgAkEEaigCABCOAiABQQFrIQEgAkEQaiECDAALAAsgACgCECICBEACQCAAKAIMIgMgACgCCCIAKAIIIgFGDQAgAkEEdCIERQ0AIAAoAgQiBSABQQR0aiAFIANBBHRqIAT8CgAACyAAIAEgAmo2AggLC5kBAQJ/AkAgAEEJayIBQRhPBEBBACEBIABBgAFJDQECQCAAQQh2IgIEQCACQTBHBEAgAkEgRg0CIAJBFkcNBCAAQYAtRiEBDAQLIABBgOAARiEBDAMLIABB/wFxQfegwABqLQAAIQEMAgsgAEH/AXFB96DAAGotAABBAnFBAXYhAQwBC0EAQZ+AgAQgAXZBAXFrIQELIAFBAXELlAEBBX8jAEEQayIDJAACQCACQQdNBEAgAiEE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IAUoAgRBAUYEQCAFKAIMIQYgASAEEOcBAAsgACAFKAIMNgIEIAAgATYCACAFQRBqJAALUwAjAEEgayIAJAAgAEEBNgIEIABB1JfAADYCACAAQgE3AgwgAEEONgIcIABBvJfAADYCGCAAIABBGGo2AgggASgCACABKAIEIAAQOSAAQSBqJAALTgECfyAAKAIMIAAoAgQiAWtBGG4hAgNAIAIEQCABKAIAIAFBBGooAgAQjwIgAkEBayECIAFBGGohAQwBCwsgACgCCCAAKAIAQQRBGBB3C0gCAX8CfiMAQSBrIgIkACACIAApAwAiAyADQj+HIgSFIAR9IAJBDGoQSCABIANCAFlBAUEAIAIoAgAgAigCBBA4IAJBIGokAAtYAQF/IAEoAgwhAgJAAkACQAJAIAEoAgQOAgABAgsgAg0BQQEhAUEAIQIMAgsgAg0AIAEoAgAiASgCBCECIAEoAgAhAQwBCyAAIAEQUw8LIAAgASACEIwBC0gBAn8jAEEQayICJAAgASgCAAR/IAJBCGogARCkASACKAIMIQMgAigCCEEBcQVBAAshASAAIAM2AgQgACABNgIAIAJBEGokAAtIAQJ/IwBBEGsiAiQAIAAgASgCAEGAgICAeEcEfyACQQhqIAEQmwEgAigCCCEDIAIoAgwFQQALNgIEIAAgAzYCACACQRBqJAALSAACQCADRQ0AAkAgAiADTQRAIAIgA0cNAQwCCyABIANqLAAAQb9/Sg0BCyABIAJBACADIAQQ/AEACyAAIAM2AgQgACABNgIAC1IBBH8gACgCFCEBIAAoAhgiAygCACICBEAgASACEQQACyADKAIEIgIEQCADKAIIIQQgASACEIABCyAAKAIEIgEgACgCCBDFASAAKAIAIAEQkAILSQEBfyMAQSBrIgIkACACQRhqIAFBCGooAgA2AgAgAiABKQIANwMQIAJBCGogAkEQakHU0MAAEHggACACKQMINwMAIAJBIGokAAtHAQF/IAAoAgAgACgCCCIDayACSQRAIAAgAyACEFsgACgCCCEDCyACBEAgACgCBCADaiABIAL8CgAACyAAIAIgA2o2AghBAAuGAQEDfyAAKAIIIgQgACgCAEYEQCMAQRBrIgMkACADQQhqIAAgACgCAEEBQQRBEBBMIAMoAggiBUGBgICAeEcEQCADKAIMGiAFIAIQ5wEACyADQRBqJAALIAAgBEEBajYCCCAAKAIEIARBBHRqIgAgASkCADcCACAAQQhqIAFBCGopAgA3AgALOQAgASACEF0gAAJ/QQEgAUGAAUkNABpBAiABQYAQSQ0AGkEDQQQgAUGAgARJGws2AgQgACACNgIAC4cBAQN/IAAoAggiAyAAKAIARgRAIwBBEGsiAiQAIAJBCGogACAAKAIAQQRBEBBUIAIoAggiBEGBgICAeEcEQCACKAIMGiAEQcTLwAAQ5wEACyACQRBqJAALIAAgA0EBajYCCCAAKAIEIANBBHRqIgAgASkCADcCACAAQQhqIAFBCGopAgA3AgALDQAgACABIAJBBRClAgsNACAAIAEgAkEGEKUCC4cBAQN/IAAoAggiAyAAKAIARgRAIwBBEGsiAiQAIAJBCGogACAAKAIAQQhBEBBUIAIoAggiBEGBgICAeEcEQCACKAIMGiAEQbTOwAAQ5wEACyACQRBqJAALIAAgA0EBajYCCCAAKAIEIANBBHRqIgAgASkDADcDACAAQQhqIAFBCGopAwA3AwALSAECfyMAQRBrIgUkACAFQQhqIAAgASACIAMgBBBMIAUoAggiAEGBgICAeEcEQCAFKAIMIQYgAEGUl8AAEOcBAAsgBUEQaiQAC0IBAX8gASgCBCICIAEoAghPBH9BAAUgASACQQFqNgIEIAEoAgAoAgAgAhDiASEBQQELIQIgACABNgIEIAAgAjYCAAtEAQF/IwBBIGsiAyQAIAMgAjYCHCADIAE2AhggAyACNgIUIANBCGogA0EUakGkvMEAEHggACADKQMINwMAIANBIGokAAsLACAAIAFBARCmAgsLACAAIAFBAhCmAgtHAQJ/IwBBIGsiAiQAIAJBAzoACCACIAE5AxAgAkEIaiACQR9qQaTNwAAQeiEDIABBgYCAgHg2AgAgACADNgIEIAJBIGokAAtCAQF/IwBBIGsiAyQAIANBADYCECADQQE2AgQgA0IENwIIIAMgATYCHCADIAA2AhggAyADQRhqNgIAIAMgAhDGAQALOQEBfyMAQSBrIgIkACACQQhqIAAoAgAgAkEWahBKIAFBAUEBQQAgAigCCCACKAIMEDggAkEgaiQAC/pPAxl/FX4BfCABKAIIIgZBgICAAXEhBCAAKwMAITAgBkGAgICAAXFFBEACfyABIQUg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ACAIQQFxaiIINgIAIAAgAUkgACAIS3IhCCACQQRqIQIgB0EEaiEHIARBAWsiBA0ACyAIRQ0RCyADIAY2AvwBIAlBAmohCQsgDiAGIAYgDkkbIgBBKU8NDSAAQQJ0IQICQAJAAkADQCACRQ0BIAJBBGsiAiADQdwAamooAgAiASACIANByARqaigCACIERg0ACyABIARPDQEgBiEADAILIANByARqIgEgASACakYNACAGIQAMAQsgAARAQQEhCCADQcgEaiEHIANB3ABqIQIgACEEA0AgAiACKAIAIgYgBygCAEF/c2oiASAIQQFxaiIINgIAIAEgBkkgASAIS3IhCCACQQRqIQIgB0EEaiEHIARBAWsiBA0ACyAIRQ0RCyADIAA2AvwBIAlBAWohCQsgCkERRg0EIANBywBqIApqIAlBMGo6AAAgAygCoAMiESAAIAAgEUkbIgJBKU8NECAKQQFqIQkgAkECdCECAn8CQANAIAJFDQEgAkEEayICIANB3ABqaigCACIBIAIgA0GAAmpqKAIAIgRGDQALIAEgBEsgASAESWsMAQtBf0EAIANBgAJqIgEgASACakcbCyEYIANB3AlqIANB3ABqQaQB/AoAAAJAAkAgAygCxAQiBiADKAL8CiIBIAEgBkkbIgFBKE0EQCABDQFBACEBDAILDBALQQAhCCADQaQDaiEHIANB3AlqIQIgASEEA0AgAiACKAIAIhkgBygCAGoiFiAIQQFxaiIINgIAIBYgGUkgCCAWSXIhCCACQQRqIQIgB0EEaiEHIARBAWsiBA0ACyAIRQ0AIAFBKEYNEiADQdwJaiABQQJ0akEBNgIAIAFBAWohAQsgAyABNgL8CiABIA4gASAOSxsiAkEpTw0QIAJBAnQhAiAMIBhKIghFAn8CQANAIAJFDQEgAkEEayICIANByARqaigCACIBIAIgA0HcCWpqKAIAIgRGDQALIAEgBEsgASAESWsMAQtBf0EAIANB3AlqIgEgASACakcbCyIBIAxOcUUEQCABIAxIDQMMCgtBACEBIAMCf0EAIABFDQAaIABBAnQiByADQdwAaiICakIAIRwDQCACIAI1AgBCCn4gHHwiGz4CACACQQRqIQIgG0IgiCEcIAdBBGsiBw0ACyAAIBtCgICAgBBUDQAaIABBKEYNEiAcPgIAIABBAWoLIgg2AvwBAkAgEUUNACARQQJ0IgcgA0GAAmoiAmpCACEcA0AgAiACNQIAQgp+IBx8Ihs+AgAgAkEEaiECIBtCIIghHCAHQQRrIgcNAAsgG0KAgICAEFQEQCARIQEMAQsgEUEoRg0SIBw+AgAgEUEBaiEBCyADIAE2AqADAkAgBkUEQEEAIQYMAQsgBkECdCIHIANBpANqIgJqQgAhHANAIAIgAjUCAEIKfiAcfCIbPgIAIAJBBGohAiAbQiCIIRwgB0EEayIHDQALIBtCgICAgBBUDQAgBkEoRg0SIBw+AgAgBkEBaiEGCyADIAY2AsQEIA8gCCAIIA9JGyIAQShNDQALCwwLCyAIRQ0FIANB3ABqQQEQLRogAygC6AUiACADKAL8ASIBIAAgAUsbIgJBKU8NDSACQQJ0IQIgA0HYAGohAANAIAJFDQMgACACaigCACIBIAJBBGsiAiADQcgEamooAgAiBEYNAAsgASAESQ0GDAULIAZBKEH0x8AAEIwCAAtBEUERQeikwAAQdgALIANByARqIgAgACACakcNAwwCCwwHCwwICyADQcsAaiAJaiEEQX8hByAJIQICQANAIAIiAEUNASAHQQFqIQcgAkEBayICIANBywBqIgFqLQAAQTlGDQALIAEgAmoiBCAELQAAQQFqOgAAIAdFIAAgCktyDQEgACABakEwIAf8CwAMAQsgA0ExOgBLAkAgCgRAIAoEQCADQcwAakEwIAr8CwALIApBD0sNAQsgBEEwOgAAIAtBAWohCyAKQQJqIQkMAgsgCUERQfikwAAQdgALIApBEUkNACAJQRFBiKXAABCMAgALIANBCGogA0HLAGogCSALQQAgA0HcCWoQSSADKAIMIQEgAygCCAshACADIAE2AsQIIAMgADYCwAggAyANNgK8CCADIBI2ArgIIAUgA0G4CGoQNyADQYALaiQADAYLIANBADYC3AkjAEEQayIBJAAgASADQbgIajYCDCABIANBkAdqNgIIIwBB8ABrIgAkACAAQdi0wAA2AgwgACABQQhqNgIIIABB2LTAADYCFCAAIAFBDGo2AhAgAEECNgIcIABB6LTAADYCGAJAIANB3AlqIgEoAgAEQCAAQTBqIAFBEGopAgA3AwAgAEEoaiABQQhqKQIANwMAIAAgASkCADcDICAAQQQ2AlwgAEHQtcAANgJYIABCBDcC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IQJBACEDDAILIAMNACACKAIAIgIoAgQhAyACKAIAIQIMAQsgAEGAgICAeDYCACAAIAE2AgwgASgCCCIBLQAIIQIgAS0ACRogAEEfIAIQdQALIAAgAzYCBCAAIAI2AgAgASgCCCIBLQAIIQIgAS0ACRogAEEgIAIQdQALLAAgACAALQAEIAFBLkZyOgAEIAAoAgAiACgCACABIABBBGooAgAoAhARAQALoAIBA38jAEEQayIEJAAjAEFAaiIDJAAgA0EIaiAAEJEBIAMoAgghACADIAL8AzsBGiADIAJEAAAQAAAA8EFiOwEYIAMgAfwDOwEWIAMgAUQAABAAAADwQWI7ARQgA0EcaiAAIANBFGoQKgJAAkAgAygCJCIABEAgA0EoaiIFQYiZwABBBBCMASAAQQFrIgBFDQEgA0E0aiAAEJABIAUgAygCOCIAIAMoAjwQgQIgAygCNCAAEI4CDAELIANBgICAgHg2AigMAQsgA0EoakGMmcAAQZOZwAAQugELIANBHGoQ4QEgAygCDEEANgIAIAMoAhAQ2wEgAyADQShqEJgBIAQgAykDADcCACADQUBrJAAgBCgCACAEKAIEIARBEGokAAstAQF+QajAwQApAwAhAUGowMEAQgA3AwAgACABQiCIPgIEIAAgAadBAUY2AgALigEBBH8jAEEQayIDJAAjAEEwayICJAAgAkEQaiAAIAEQpQEgAkEkaiACKAIQIgAgAigCFCIBEEsgAkEYaiIEIAIoAigiBSACKAIsEI0BIAIoAiQgBRDsASABIAAQigIgAkEIaiAEEJsBIAMgAikDCDcCACACQTBqJAAgAygCACADKAIEIANBEGokAAspAQJ/IAFBABDiASECIAFBARDiASEDIAEQ+wEgACADNgIEIAAgAjYCAAskAQF/IAAoAgAgACgCCCICayABSQRAIAAgAiABQQFBARCjAQsLJAEBfyAAKAIAIAAoAggiAmsgAUkEQCAAIAIgAUEEQRAQowELCyoAIAAgASgCDDsBBiAAIAEoAgg7AQQgACABKAIEOwECIAAgASgCADsBAAskACAAIAAoAgBBgICAgHhGQQJ0aiIAKAIAIABBBGooAgAQigILJQAgAEUEQEHk0MAAQTIQlAIACyAAIAIgAyAEIAUgASgCEBERAAtTAQJ/IAEgA0YEf0EAIQMCQCABRQ0A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LXdpZHRoLTAuMS4xNFxzcmNcdGFibGVzLnJzAFY6XC5jYWNoZVxjYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Zcd2FzbS1iaW5kZ2VuLTAuMi4xMDBcc3JjXGNvbnZlcnRcc2xpY2VzLnJzAEM6XFVzZXJzXGRhdmlkXC5ydXN0dXBcdG9vbGNoYWluc1xzdGFibGUteDg2XzY0LXBjLXdpbmRvd3MtbXN2Y1xsaWIvcnVzdGxpYi9zcmMvcnVzdFxsaWJyYXJ5L2FsbG9jL3NyYy9zdHIucnMAQzpcVXNlcnNcZGF2aWRcLnJ1c3R1cFx0b29sY2hhaW5zXHN0YWJsZS14ODZfNjQtcGMtd2luZG93cy1tc3ZjXGxpYi9ydXN0bGliL3NyYy9ydXN0XGxpYnJhcnkvY29yZS9zcmMvaXRlci90cmFpdHMvaXRlcmF0b3IucnMAQzpcVXNlcnNcZGF2aWRcLnJ1c3R1cFx0b29sY2hhaW5zXHN0YWJsZS14ODZfNjQtcGMtd2luZG93cy1tc3ZjXGxpYi9ydXN0bGliL3NyYy9ydXN0XGxpYnJhcnkvY29yZS9zcmMvc3RyL3BhdHRlcm4ucnMAbGlicmFyeS9jb3JlL3NyYy9udW0vZmx0MmRlYy9zdHJhdGVneS9kcmFnb24ucnMAbGlicmFyeS9jb3JlL3NyYy9udW0vYmlnbnVtLnJzAFY6XC5jYWNoZVxjYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2ZcY29uc29sZV9zdGF0aWNfdGV4dC0wLjkuMFxzcmNcYW5zaS5ycwBDOlxVc2Vyc1xkYXZpZFwucnVzdHVwXHRvb2xjaGFpbnNcc3RhYmxlLXg4Nl82NC1wYy13aW5kb3dzLW1zdmNcbGliL3J1c3RsaWIvc3JjL3J1c3RcbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAFY6XC5jYWNoZVxjYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Zcc2VyZGUtMS4wLjIxOVxzcmNcZGVcdmFsdWUucnMAbGlicmFyeS9jb3JlL3NyYy91bmljb2RlL3ByaW50YWJsZS5ycwBWOlwuY2FjaGVcY2FyZ29ccmVnaXN0cnlcc3JjXGluZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmXHNlcmRlLTEuMC4yMTlcc3JjXHByaXZhdGVcZGUucnMAQzpcVXNlcnNcZGF2aWRcLnJ1c3R1cFx0b29sY2hhaW5zXHN0YWJsZS14ODZfNjQtcGMtd2luZG93cy1tc3ZjXGxpYi9ydXN0bGliL3NyYy9ydXN0XGxpYnJhcnkvYWxsb2Mvc3JjL3NsaWNlLnJzAFY6XC5jYWNoZVxjYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2ZcY29uc29sZV9zdGF0aWNfdGV4dC0wLjkuMFxzcmNcd29yZC5ycwBsaWJyYXJ5L2NvcmUvc3JjL2ZtdC9tb2QucnMAbGlicmFyeS9jb3JlL3NyYy9zdHIvbW9kLnJzAEM6XFVzZXJzXGRhdmlkXC5ydXN0dXBcdG9vbGNoYWluc1xzdGFibGUteDg2XzY0LXBjLXdpbmRvd3MtbXN2Y1xsaWIvcnVzdGxpYi9zcmMvcnVzdFxsaWJyYXJ5L2NvcmUvc3JjL3NsaWNlL21vZC5ycwBDOlxVc2Vyc1xkYXZpZFwucnVzdHVwXHRvb2xjaGFpbnNcc3RhYmxlLXg4Nl82NC1wYy13aW5kb3dzLW1zdmNcbGliL3J1c3RsaWIvc3JjL3J1c3RcbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy9tb2QucnMAbGlicmFyeS9jb3JlL3NyYy9udW0vZmx0MmRlYy9tb2QucnMAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuOS9zcmMvZGxtYWxsb2MucnMAVjpcLmNhY2hlXGNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zlxqcy1zeXMtMC4zLjc3XHNyY1xsaWIucnMAVjpcLmNhY2hlXGNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3ZlxvbmNlX2NlbGwtMS4yMS4zXHNyY1xsaWIucnMAVjpcLmNhY2hlXGNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMu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ZWZnAmgCaWprbAICbW5vcAJxcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnR1AgICAgICAnZ3OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTl4OTk5OTk5OTk5eXoCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAns5OXw5OX0CAgICAgICAgICAgICAgICAgICfgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn8CAgKAgYICAgICAgICAgICAgICAgKDhAICAgICAgICAgKFhnUCAocCAgKIAgICAgICAomKAgICAgICAgICAgICAouMAo2OAo+QkZKTlJWWApcCApiZmpsCAgICAgICAgICOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5nB0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAnQICAgKenwIEAgUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0CAh4CAgICAgICHyAhIiMCJCUmJygpAioCAgICoKGio6Slpi6nqKmqq6ytMwICAgICAq4CAjU2NwI4OTo7PD0+rzk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUwCAgICArBOT7GFhnUCAocCAgKIAgICAgICAomKAgICAgICAgICAgICAouMsrOOAo+QkZKTlJWWApcCApiZmpsCAgICAgICAgICVVV1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAEG84sAACylVVVVVFQBQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAQBB7+LAAAvEARBBEFVVVVVVV1VVVVVVVVVVVVFVVQAAQFT13VVVVVVVVVVVFQAAAAAAVVVVVfxdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUFABQAFARQVVVVVVVVVRVRVVVVVVVVVQAAAAAAAEBVVVVVVVVVVVXVV1VVVVVVVVVVVVVVBQAAVFVVVVVVVVVVVVVVVVUVAABVVVFVVVVVVQUQAAABAVBVVVVVVVVVVVVVAVVVVVVV/////39VVVVQVQAAVVVVVVVVVVVVVQUAQcDkwAALmARAVVVVVVVVVVVVVVVVVUVUAQBUUQEAVVUFVVVVVVVVVVFVVVVVVVVVVVVVVVVVVUQBVFVRVRVVVQVVVVVVVVVFQVVVVVVVVVVVVVVVVVVVVEEVFFBRVVVVVVVVVVBRVVVBVVVVVVVVVVVVVVVVVVVUARBUUVVVVVUFVVVVVVUFAFFVVVVVVVVVVVVVVVVVVQQBVFVRVQFVVQVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVRVRVVVFVFVVVVVVVVVVVVVVUVFVVVVVVVVVVVVVVVVUEVAUEUFVBVVUFVVVVVVVVVVFVVVVVVVVVVVVVVVVVVRREBQRQVUFVVQVVVVVVVVVVUFVVVVVVVVVVVVVVVVUVRAFUVUFVFVVVBVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVVVVFFQVEVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVEAQFVVFQBAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUQAAVFVVAEBVVVVVVVVVVVVVVVVVVVVVVVVQVVVVVVVVEVFVVVVVVVVVVVVVVVVVAQAAQAAEVQEAAAEAAAAAAAAAAFRVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUBBABBQVVVVVVVVVAFVFVVVQFUVVVFQVVRVVVVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqgBBgOnAAAuQA1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAVVVVVVVVVVVVVVVVQVUVVVVVVVVBVVVVVVVVVUFVVVVVVVVVQVVVVV///33//3XX3fW1ddVEABQVUUBAABVV1FVVVVVVVVVVVVVFQBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUFVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAVVFVFVQFVVVVVVVVVVVVVVVVVVVVVVVVVVVVXFRRVVVVVVVVVVVVVVVVVVUUAQEQBAFQVAAAUVVVVVVVVVVVVVVVVAAAAAAAAAEBVVVVVVVVVVVVVVVUAVVVVVVVVVVVVVVVVAABQBVVVVVVVVVVVVRUAAFVVVVBVVVVVVVVVBVAQUFVVVVVVVVVVVVVVVVVFUBFQVVVVVVVVVVVVVVVVVVUAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAAAAAEAFRRVVRQVVVVVVVVVVVVVVVVVVVVVVUAQaDswAALkwhVVRUAVVVVVVVVBUBVVVVVVVVVVVVVVVUAAAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAAAAAAAAAABUVVVVVVVVVVVV9VVVVWlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf1X11VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV9VVVVVVVfVVVVVVVVVVVVVVVV////VVVVVVVVVVVVVdVVVVVV1VVVVV1V9VVVVVV9VV9VdVVXVVVVVXVV9V11XVVd9VVVVVVVVVVXVVVVVVVVVVV31d9VVVVVVVVVVVVVVVVVVVX9VVVVVVVVV1VV1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVXVV1VVVVVVVVVVVVVVVVddVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVQVVVVVVVVVVVVVVVVVVVV/f///////////////19V1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAAAAAAAAAAKqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqVVVVqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpaVVVVVVVVqqqqqqqqqqqqqqqqqqoKAKqqqmqpqqqqqqqqqqqqqqqqqqqqqqqqqqpqgaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVqaqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqKqqqqqqqqqqqmqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVVZWqqqqqqqqqqqqqqmqqqqqqqqqqqqqqVVWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqVVVVVVVVVVVVVVVVVVVVVaqqqlaqqqqqqqqqqqqqqqqqalVVVVVVVVVVVVVVVVVfVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFUAAAFBVVVVVVVVVBVVVVVVVVVVVVVVVVVVVVVVVVVVVUFVVVUVFFVVVVVVVVUFVVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQVVVVVVVVAAAAAFBVRRVVVVVVVVVVVVUFAFBVVVVVVRUAAFBVVVWqqqqqqqqqVkBVVVVVVVVVVVVVVRUFUFBVVVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVVQFAQUFVVRVVVVRVVVVVVVVVVVVVVVRVVVVVVVVVVVVVVVUEFFQFUVVVVVVVVVVVVVVQVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVFFVVVVVqqqqqqqqqqqqVVVVAAAAAABAFQBBv/TAAAvhDFVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQAAAPCqqlpVAAAAAKqqqqqqqqqqaqqqqqpqqlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRWpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpWVVVVVVVVVVVVVVVVVVUFVFVVVVVVVVVVVVVVVVVVVapqVVUAAFRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVBUBVAUFVAFVVVVVVVVVVVVVAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQVVVVVVVVdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVRVVVVVVVVVVVVVVVVVVVVVVVVVAVVVVVVVVVVVVVVVVVVVVVVVBQAAVFVVVVVVVVVVVVVVBVBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVVVVVVVVVVVVVVVVVQAAAEBVVVVVVVVVVVVVFFRVFVBVVVVVVVVVVVVVVRVAQVVFVVVVVVVVVVVVVVVVVVVVQFVVVVVVVVVVFQABAFRVVVVVVVVVVVVVVVVVVRVVVVVQVVVVVVVVVVVVVVVVBQBABVUBFFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVAEVUVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVFQBAVVVVVVVQVVVVVVVVVVVVVVVVVRVEVFVVVVUVVVVVBQBUAFRVVVVVVVVVVVVVVVVVVVVVAAAFRFVVVVVVRVVVVVVVVVVVVVVVVVVVVVVVVVVVFABEEQRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRUFUFUQVFVVVVVVVVBVVVVVVVVVVVVVVVVVVVVVVVVVVRUAQBFUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVRABBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAQUQAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFQAAQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFUVBBFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUABVVUVVVVVVVVVQEAQFVVVVVVVVVVVRUABEBVFVVVAUABVVVVVVVVVVVVVQAAAABAUFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAQAAQVVVVVVVVVVVVVVVVVVVVVVVVVVUFAAAAAAAFAARBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAUBFEAAAVVVVVVVVVVVVVVVVVVVVVVVVUBFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVVFVVQFVVVVVVVVVVVVVVVQVAVURVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVBUAAABQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAVFVVVVVVVVVVVVVVVVVVAEBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVRVAVVVVVVVVVVVVVVVVVVVVVVVVVapUVVVaVVVVqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqVVWqqqqqqqqqqqqqqqqqqqqqqqqqqqpaVVVVVVVVVVVVVaqqVlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaqpqmmqqqqqqqqqqmpVVVVlVVVVVVVVVWpZVVVVqlVVqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVVVVVVVVVVUEAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAQauBwQALdVAAAAAAAEBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVURUAUAAAAAQAEAVVVVVVVVVQVQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVBVRVVVVVVVVVVVVVVVVVVQBBrYLBAAsCQBUAQbuCwQALxQZUVVFVVVVUVVVVVRUAAQAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVAEAAAAAAFAAQBEBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVQBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQBAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAEBVVVVVVVVVVVVVVVVVVVdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV1VVVVVVVVVVVVVVVVVVVVXX9/39VVVVVVVVVVVVVVVVVVVVVVVX1////////blVVVaqquqqqqqrq+r+/VaqqVlVfVVVVqlpVVVVVVVX//////////1dVVf3/3///////////////////////9///////VVVV/////////////3/V/1VVVf////9XV///////////////////////f/f/////////////////////////////////////////////////////////////1////////////////////19VVdV/////////VVVVVXVVVVVVVVV9VVVVV1VVVVVVVVVVVVVVVVVVVVVVVVVV1f///////////////////////////1VVVVVVVVVVVVVVVf//////////////////////X1VXf/1V/1VV1VdV//9XVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV////VVdVVVVVVVX//////////////3///9//////////////////////////////////////////////////////////////VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf///1f//1dV///////////////f/19V9f///1X//1dV//9XVaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpaVVVVVVVVVVVZllVhqqVZqlVVVVVVlVVVVVVVVVWVVVUAQY6JwQALAQMAQZyJwQAL7AdVVVVVVZVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRUAlmpaWmqqBUCmWZVlVVVVVVVVVVUAAAAAVVZVValWVVVVVVVVVVVVVlVVVVVVVVVVAAAAAAAAAABUVVVVlVlZVVVlVVVpVVVVVVVVVVVVVVWVVpVqqqqqVaqqWlVVVVlVqqqqVVVVVWVVVVpVVVVVpWVWVVVVlVVVVVVVVaaWmpZZWWWplqqqZlWqVVpZVVpWZVVVVWqqpaVaVVVVpapaVVVZWVVVWVVVVVVVlVVVVVVVVVVVVVVVVVVVVVVVVVVVZVX1VVVVaVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqVaqqqqqqqqqqqlVVVaqqqqqlWlVVmqpaVaWlVVpapZalWlVVVaVaVZVVVVV9VWlZpVVfVWZVVVVVVVVVVWZV////VVVVmppqmlVVVdVVVVVV1VVVpV1V9VVVVVW9Va+quqqrqqqaVbqq+q66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uLgoKCgoCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJcABB9qXBAAuAAXBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcABwAABwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwAEGSp8EACwEMAEH2p8EAC4ABcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwAHAAAHBwcHAgICAgICAgICAgICAgICAgBgYGBgYGBgYGBgYGBgYGBgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXAAQfapwQALgAFwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHAAcAAAcHBwcCcnJycnJycnJycnJycnJyewsLCwsLCwsLCwsLAGBgYGCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJcABB9qvBAAuAAdDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0ADQAADQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NBwAEGSrcEACwEMAEH2rcEAC4ABUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQAFAAAFBQUFArKysrKysrKysrKysrKysrTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwFTExMTExMTA5MTAFMDQ4OTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTHAAQfavwQALgAFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFAAUAAAUFBQUCAgICAgICAgICAgICAgICBMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMcABB9rHBAAudAVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUABQAABQUFBQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAUFBQUFBQUFBQUFBQUFBQUABQUFBQUFBQUFBQAFAAQbizwQALM////////////////////////////////////////////////////////////////////wBB9rPBAAuAA3BwcHBwcHAMcHBwcHBwcHBwcHBwcHBwcABwAABwcHBwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHAAcAAAcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcABBkrfBAAsBDABB9rnBAAu7AlRyaWVkIHRvIHNocmluayB0byBhIGxhcmdlciBjYXBhY2l0eQAA9lwQACQAAAAnBxAAdgAAALkCAAAJAAAATGF6eSBpbnN0YW5jZSBoYXMgcHJldmlvdXNseSBiZWVuIHBvaXNvbmVkAAA0XRAAKgAAAEIIEABaAAAACAMAABkAAAByZWVudHJhbnQgaW5pdAAAeF0QAA4AAABCCBAAWgAAAHoCAAANAAAAbnVsbCBwb2ludGVyIHBhc3NlZCB0byBydXN0cmVjdXJzaXZlIHVzZSBvZiBhbiBvYmplY3QgZGV0ZWN0ZWQgd2hpY2ggd291bGQgbGVhZCB0byB1bnNhZmUgYWxpYXNpbmcgaW4gcnVzdEpzVmFsdWUoKQAKXhAACAAAABJeEAABAAAA2gEQAGkAAADoAAAAAQBBzLzBAAsBNQBwCXByb2R1Y2VycwIIbGFuZ3VhZ2UBBFJ1c3QADHByb2Nlc3NlZC1ieQMFcnVzdGMdMS44OS4wICgyOTQ4Mzg4M2UgMjAyNS0wOC0wNCkGd2FscnVzBjAuMjMuMwx3YXNtLWJpbmRnZW4HMC4yLjEwMAB8D3RhcmdldF9mZWF0dXJlcwcrD211dGFibGUtZ2xvYmFscysTbm9udHJhcHBpbmctZnB0b2ludCsLYnVsay1tZW1vcnkrCHNpZ24tZXh0Kw9yZWZlcmVuY2UtdHlwZXMrCm11bHRpdmFsdWUrD2J1bGstbWVtb3J5LW9wdA==");
var wasmModule = new WebAssembly.Module(bytes);
var wasm = new WebAssembly.Instance(wasmModule, {
"./rs_lib.internal.js": imports
});
__exportStar(require_rs_lib_internal(), exports2);
var rs_lib_internal_js_1 = require_rs_lib_internal();
(0, rs_lib_internal_js_1.__wbg_set_wasm)(wasm.exports);
wasm.exports.__wbindgen_start();
function base64decode(b64) {
const binString = atob(b64);
const size = binString.length;
const bytes2 = new Uint8Array(size);
for (let i = 0; i < size; i++) {
bytes2[i] = binString.charCodeAt(i);
}
return bytes2;
}
}
});
// npm/script/deps/jsr.io/@david/console-static-text/0.3.4/mod.js
var require_mod3 = __commonJS({
"npm/script/deps/jsr.io/@david/console-static-text/0.3.4/mod.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.renderInterval = exports2.staticText = exports2.RenderInterval = exports2.StaticTextContainer = exports2.StaticTextScope = void 0;
exports2.renderTextItems = renderTextItems;
exports2.maybeConsoleSize = maybeConsoleSize;
exports2.stripAnsiCodes = stripAnsiCodes;
var rs_lib_js_1 = require_rs_lib();
var scopesSymbol = Symbol();
var getItemsSymbol = Symbol();
var renderOnceSymbol = Symbol();
var onItemsChangedEventsSymbol = Symbol();
var StaticTextScope = class {
#container;
#items = [];
constructor(container) {
this.#container = container;
this.#container[scopesSymbol].push(this);
}
[Symbol.dispose]() {
this.#items.length = 0;
const index = this.#container[scopesSymbol].indexOf(this);
if (index >= 0) {
this.#container[scopesSymbol].splice(index, 1);
this.#container.refresh();
this.#notifyContainerOnItemsChanged();
}
}
[getItemsSymbol]() {
return this.#items;
}
setText(textOrItems) {
if (typeof textOrItems === "string") {
if (textOrItems.length === 0) {
textOrItems = [];
} else {
textOrItems = [{ text: textOrItems }];
}
} else if (textOrItems instanceof Function) {
textOrItems = [{ text: textOrItems }];
}
this.#items = textOrItems;
this.#notifyContainerOnItemsChanged();
}
#notifyContainerOnItemsChanged() {
for (const onChanged of this.#container[onItemsChangedEventsSymbol]) {
onChanged();
}
}
logAbove(textOrItems, size) {
this.#container.logAbove(textOrItems, size);
}
/** Forces a refresh of the container. */
refresh(size) {
this.#container.refresh(size);
}
};
exports2.StaticTextScope = StaticTextScope;
var StaticTextContainer = class {
#container = new rs_lib_js_1.StaticTextContainer();
[scopesSymbol] = [];
#getConsoleSize;
#onWriteText;
[onItemsChangedEventsSymbol] = [];
constructor(onWriteText, getConsoleSize) {
this.#onWriteText = onWriteText;
this.#getConsoleSize = getConsoleSize;
}
/** If any scope has text or items. */
hasText() {
return this[scopesSymbol].some((s) => s[getItemsSymbol]().length > 0);
}
/** Creates a scope which can be used to set the text for. */
createScope() {
return new StaticTextScope(this);
}
/** Gets the containers current console size. */
getConsoleSize() {
return this.#getConsoleSize();
}
logAbove(textOrItems, size) {
size ??= this.getConsoleSize();
let detailedItem;
if (typeof textOrItems === "string") {
if (textOrItems.length === 0) {
detailedItem = [];
} else {
detailedItem = [{ text: textOrItems }];
}
} else {
detailedItem = Array.from(resolveItems(textOrItems, size));
}
this.withTempClear(() => {
this[renderOnceSymbol](detailedItem, size);
}, size);
}
/** Clears the displayed text for the provided action. */
withTempClear(action, size) {
size ??= this.getConsoleSize();
this.clear(size);
try {
action();
} finally {
this.refresh(size);
}
}
/** Clears the text and flushes it to the console. */
clear(size) {
const newText = this.renderClearText(size);
if (newText != null) {
this.#onWriteText(newText);
}
}
/** Refreshes the static text (writes it to the console). */
refresh(size) {
const newText = this.renderRefreshText(size);
if (newText != null) {
this.#onWriteText(newText);
}
}
/**
* Renders the clear text.
*
* Note: this is a low level method. Prefer calling `.clear()` instead.
*/
renderClearText(size) {
size = size ?? this.#getConsoleSize();
return this.#container.clear_text(size?.columns, size?.rows);
}
/**
* Renders the next text that should be displayed.
*
* Note: This is a low level method. Prefer calling `.refresh()` instead.
*/
renderRefreshText(size) {
size ??= this.#getConsoleSize();
const items = Array.from(this.#resolveItems(size));
return this.#container.render_text(items, size?.columns, size?.rows);
}
*#resolveItems(size) {
for (const provider of this[scopesSymbol]) {
for (const item of provider[getItemsSymbol]()) {
yield* resolveItem(item, size);
}
}
}
[renderOnceSymbol](items, size) {
const newText = (0, rs_lib_js_1.static_text_render_once)(items, size?.columns, void 0);
if (newText != null) {
this.#onWriteText(newText + "\r\n");
}
}
};
exports2.StaticTextContainer = StaticTextContainer;
var encoder = new TextEncoder();
var RenderInterval = class {
#count = 0;
#intervalId = void 0;
#container;
#intervalMs = 60;
#containerSubscription;
#disposed = false;
/**
* Constructs a new `RenderInterval` from the provided `StaticTextContainer`.
* @param container Container to render every `intervalMs`.
*/
constructor(container) {
this.#container = container;
}
[Symbol.dispose]() {
this.#markStop();
this.#disposed = true;
}
/** Gets how often this interval will refresh the output.
* @default `60`
*/
get intervalMs() {
return this.#intervalMs;
}
/** Sets how often this should refresh the output. */
set intervalMs(value) {
if (this.#intervalMs === value) {
return;
}
this.#intervalMs = value;
if (this.#intervalId != null) {
this.#stopInterval();
this.#startInterval();
}
}
/**
* Starts the render task returning a disposable for stopping it.
*
* Note that it's perfectly fine to just start this and never dispose it.
* The underlying interval won't run if there's no items in the container.
*/
start() {
if (this.#disposed) {
throw new Error("Cannot call .start() on a disposed RenderInterval.");
}
if (this.#count === 0) {
this.#markStart();
}
this.#count++;
let hasCalled = false;
return {
[Symbol.dispose]: () => {
if (!hasCalled && !this.#disposed) {
hasCalled = true;
this.#count--;
if (this.#count === 0) {
this.#markStop();
this.#container.refresh();
}
}
}
};
}
#markStart() {
this.#addSubscriptionToContainer();
if (this.#container.hasText()) {
this.#container.refresh();
}
}
#markStop() {
this.#removeSubscriptionFromContainer();
this.#stopInterval();
}
#startInterval() {
this.#container.refresh();
this.#intervalId = setInterval(() => {
this.#container.refresh();
}, this.#intervalMs);
}
#stopInterval() {
if (this.#intervalId == null) {
return;
}
clearInterval(this.#intervalId);
this.#intervalId = void 0;
}
#addSubscriptionToContainer() {
let lastValue = this.#container.hasText();
this.#containerSubscription = () => {
const hasItems = this.#container.hasText();
if (hasItems != lastValue) {
lastValue = hasItems;
if (hasItems) {
this.#startInterval();
} else {
this.#stopInterval();
this.#container.refresh();
}
}
};
this.#container[onItemsChangedEventsSymbol].push(this.#containerSubscription);
}
#removeSubscriptionFromContainer() {
if (!this.#containerSubscription) {
return;
}
const events = this.#container[onItemsChangedEventsSymbol];
const removeIndex = events.indexOf(this.#containerSubscription);
if (removeIndex >= 0) {
events.splice(removeIndex, 1);
this.#containerSubscription = void 0;
}
}
};
exports2.RenderInterval = RenderInterval;
exports2.staticText = new StaticTextContainer((text) => {
process.stderr.write(encoder.encode(text));
}, () => maybeConsoleSize());
exports2.renderInterval = new RenderInterval(exports2.staticText);
function renderTextItems(items, size) {
size ??= maybeConsoleSize();
const wasmItems = Array.from(resolveItems(items, size));
return (0, rs_lib_js_1.static_text_render_once)(wasmItems, size?.columns, size?.rows) ?? "";
}
function maybeConsoleSize() {
try {
for (const stream of [process.stdout, process.stderr]) {
if (stream.isTTY) {
return {
columns: stream.columns,
rows: stream.rows
};
}
}
return void 0;
} catch {
return void 0;
}
}
function stripAnsiCodes(text) {
return (0, rs_lib_js_1.strip_ansi_codes)(text);
}
function* resolveDeferred(deferred, size) {
const value = deferred(size);
if (value instanceof Array) {
yield* resolveItems(value, size);
} else {
yield* resolveItem(value, size);
}
}
function* resolveItems(value, size) {
for (const item of value) {
yield* resolveItem(item, size);
}
}
function* resolveItem(item, size) {
if (typeof item === "string") {
if (item.length > 0) {
yield { text: item };
}
} else if (item instanceof Function) {
yield* resolveDeferred(item, size);
} else if (item.text instanceof Function) {
const hangingIndent = item.hangingIndent ?? 0;
for (const value of resolveDeferred(item.text, size)) {
yield {
...value,
hangingIndent: hangingIndent + (value.hangingIndent ?? 0)
};
}
} else if (item.text.length > 0) {
yield item;
}
}
}
});
// npm/script/deps/jsr.io/@std/bytes/1.0.6/copy.js
var require_copy = __commonJS({
"npm/script/deps/jsr.io/@std/bytes/1.0.6/copy.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.copy = copy;
function copy(src, dst, offset = 0) {
offset = Math.max(0, Math.min(offset, dst.byteLength));
const dstBytesAvailable = dst.byteLength - offset;
if (src.byteLength > dstBytesAvailable) {
src = src.subarray(0, dstBytesAvailable);
}
dst.set(src, offset);
return src.byteLength;
}
}
});
// npm/script/deps/jsr.io/@std/io/0.225.3/buffer.js
var require_buffer = __commonJS({
"npm/script/deps/jsr.io/@std/io/0.225.3/buffer.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.Buffer = void 0;
var copy_js_1 = require_copy();
var MIN_READ = 32 * 1024;
var MAX_SIZE = 2 ** 32 - 2;
var Buffer2 = class {
#buf;
// contents are the bytes buf[off : len(buf)]
#off = 0;
// read at buf[off], write at buf[buf.byteLength]
/**
* Constructs a new instance with the specified {@linkcode ArrayBuffer} as its
* initial contents.
*
* @param ab The ArrayBuffer to use as the initial contents of the buffer.
*/
constructor(ab) {
if (ab === void 0) {
this.#buf = new Uint8Array(0);
} else if (ab instanceof SharedArrayBuffer) {
this.#buf = new Uint8Array(ab);
} else {
this.#buf = new Uint8Array(ab);
}
}
/**
* Returns a slice holding the unread portion of the buffer.
*
* The slice is valid for use only until the next buffer modification (that
* is, only until the next call to a method like `read()`, `write()`,
* `reset()`, or `truncate()`). If `options.copy` is false the slice aliases the buffer content at
* least until the next buffer modification, so immediate changes to the
* slice will affect the result of future reads.
*
* @example Usage
* ```ts
* import { Buffer } from "@std/io/buffer";
* import { assertEquals } from "@std/assert/equals";
*
* const buf = new Buffer();
* await buf.write(new TextEncoder().encode("Hello, world!"));
*
* const slice = buf.bytes();
* assertEquals(new TextDecoder().decode(slice), "Hello, world!");
* ```
*
* @param options The options for the slice.
* @returns A slice holding the unread portion of the buffer.
*/
bytes(options = { copy: true }) {
if (options.copy === false)
return this.#buf.subarray(this.#off);
return this.#buf.slice(this.#off);
}
/**
* Returns whether the unread portion of the buffer is empty.
*
* @example Usage
* ```ts
* import { Buffer } from "@std/io/buffer";
* import { assertEquals } from "@std/assert/equals";
*
* const buf = new Buffer();
* assertEquals(buf.empty(), true);
* await buf.write(new TextEncoder().encode("Hello, world!"));
* assertEquals(buf.empty(), false);
* ```
*
* @returns `true` if the unread portion of the buffer is empty, `false`
* otherwise.
*/
empty() {
return this.#buf.byteLength <= this.#off;
}
/**
* A read only number of bytes of the unread portion of the buffer.
*
* @example Usage
* ```ts
* import { Buffer } from "@std/io/buffer";
* import { assertEquals } from "@std/assert/equals";
*
* const buf = new Buffer();
* await buf.write(new TextEncoder().encode("Hello, world!"));
*
* assertEquals(buf.length, 13);
* ```
*
* @returns The number of bytes of the unread portion of the buffer.
*/
get length() {
return this.#buf.byteLength - this.#off;
}
/**
* The read only capacity of the buffer's underlying byte slice, that is,
* the total space allocated for the buffer's data.
*
* @example Usage
* ```ts
* import { Buffer } from "@std/io/buffer";
* import { assertEquals } from "@std/assert/equals";
*
* const buf = new Buffer();
* assertEquals(buf.capacity, 0);
* await buf.write(new TextEncoder().encode("Hello, world!"));
* assertEquals(buf.capacity, 13);
* ```
*
* @returns The capacity of the buffer.
*/
get capacity() {
return this.#buf.buffer.byteLength;
}
/**
* Discards all but the first `n` unread bytes from the buffer but
* continues to use the same allocated storage. It throws if `n` is
* negative or greater than the length of the buffer.
*
* @example Usage
* ```ts
* import { Buffer } from "@std/io/buffer";
* import { assertEquals } from "@std/assert/equals";
*
* const buf = new Buffer();
* await buf.write(new TextEncoder().encode("Hello, world!"));
* buf.truncate(6);
* assertEquals(buf.length, 6);
* ```
*
* @param n The number of bytes to keep.
*/
truncate(n) {
if (n === 0) {
this.reset();
return;
}
if (n < 0 || n > this.length) {
throw new Error("Buffer truncation out of range");
}
this.#reslice(this.#off + n);
}
/**
* Resets the contents
*
* @example Usage
* ```ts
* import { Buffer } from "@std/io/buffer";
* import { assertEquals } from "@std/assert/equals";
*
* const buf = new Buffer();
* await buf.write(new TextEncoder().encode("Hello, world!"));
* buf.reset();
* assertEquals(buf.length, 0);
* ```
*/
reset() {
this.#reslice(0);
this.#off = 0;
}
#tryGrowByReslice(n) {
const l = this.#buf.byteLength;
if (n <= this.capacity - l) {
this.#reslice(l + n);
return l;
}
return -1;
}
#reslice(len) {
if (len > this.#buf.buffer.byteLength) {
throw new RangeError("Length is greater than buffer capacity");
}
this.#buf = new Uint8Array(this.#buf.buffer, 0, len);
}
/**
* Reads the next `p.length` bytes from the buffer or until the buffer is
* drained. Returns the number of bytes read. If the buffer has no data to
* return, the return is EOF (`null`).
*
* @example Usage
* ```ts
* import { Buffer } from "@std/io/buffer";
* import { assertEquals } from "@std/assert/equals";
*
* const buf = new Buffer();
* await buf.write(new TextEncoder().encode("Hello, world!"));
*
* const data = new Uint8Array(5);
* const res = await buf.read(data);
*
* assertEquals(res, 5);
* assertEquals(new TextDecoder().decode(data), "Hello");
* ```
*
* @param p The buffer to read data into.
* @returns The number of bytes read.
*/
readSync(p) {
if (this.empty()) {
this.reset();
if (p.byteLength === 0) {
return 0;
}
return null;
}
const nread = (0, copy_js_1.copy)(this.#buf.subarray(this.#off), p);
this.#off += nread;
return nread;
}
/**
* Reads the next `p.length` bytes from the buffer or until the buffer is
* drained. Resolves to the number of bytes read. If the buffer has no
* data to return, resolves to EOF (`null`).
*
* NOTE: This methods reads bytes synchronously; it's provided for
* compatibility with `Reader` interfaces.
*
* @example Usage
* ```ts
* import { Buffer } from "@std/io/buffer";
* import { assertEquals } from "@std/assert/equals";
*
* const buf = new Buffer();
* await buf.write(new TextEncoder().encode("Hello, world!"));
*
* const data = new Uint8Array(5);
* const res = await buf.read(data);
*
* assertEquals(res, 5);
* assertEquals(new TextDecoder().decode(data), "Hello");
* ```
*
* @param p The buffer to read data into.
* @returns The number of bytes read.
*/
read(p) {
const rr = this.readSync(p);
return Promise.resolve(rr);
}
/**
* Writes the given data to the buffer.
*
* @example Usage
* ```ts
* import { Buffer } from "@std/io/buffer";
* import { assertEquals } from "@std/assert/equals";
*
* const buf = new Buffer();
* const data = new TextEncoder().encode("Hello, world!");
* buf.writeSync(data);
*
* const slice = buf.bytes();
* assertEquals(new TextDecoder().decode(slice), "Hello, world!");
* ```
*
* @param p The data to write to the buffer.
* @returns The number of bytes written.
*/
writeSync(p) {
const m = this.#grow(p.byteLength);
return (0, copy_js_1.copy)(p, this.#buf, m);
}
/**
* Writes the given data to the buffer. Resolves to the number of bytes
* written.
*
* > [!NOTE]
* > This methods writes bytes synchronously; it's provided for compatibility
* > with the {@linkcode Writer} interface.
*
* @example Usage
* ```ts
* import { Buffer } from "@std/io/buffer";
* import { assertEquals } from "@std/assert/equals";
*
* const buf = new Buffer();
* const data = new TextEncoder().encode("Hello, world!");
* await buf.write(data);
*
* const slice = buf.bytes();
* assertEquals(new TextDecoder().decode(slice), "Hello, world!");
* ```
*
* @param p The data to write to the buffer.
* @returns The number of bytes written.
*/
write(p) {
const n = this.writeSync(p);
return Promise.resolve(n);
}
#grow(n) {
const m = this.length;
if (m === 0 && this.#off !== 0) {
this.reset();
}
const i = this.#tryGrowByReslice(n);
if (i >= 0) {
return i;
}
const c = this.capacity;
if (n <= Math.floor(c / 2) - m) {
(0, copy_js_1.copy)(this.#buf.subarray(this.#off), this.#buf);
} else if (c + n > MAX_SIZE) {
throw new Error(`The buffer cannot be grown beyond the maximum size of "${MAX_SIZE}"`);
} else {
const buf = new Uint8Array(Math.min(2 * c + n, MAX_SIZE));
(0, copy_js_1.copy)(this.#buf.subarray(this.#off), buf);
this.#buf = buf;
}
this.#off = 0;
this.#reslice(Math.min(m + n, MAX_SIZE));
return m;
}
/** Grows the buffer's capacity, if necessary, to guarantee space for
* another `n` bytes. After `.grow(n)`, at least `n` bytes can be written to
* the buffer without another allocation. If `n` is negative, `.grow()` will
* throw. If the buffer can't grow it will throw an error.
*
* Based on Go Lang's
* {@link https://golang.org/pkg/bytes/#Buffer.Grow | Buffer.Grow}.
*
* @example Usage
* ```ts
* import { Buffer } from "@std/io/buffer";
* import { assertEquals } from "@std/assert/equals";
*
* const buf = new Buffer();
* buf.grow(10);
* assertEquals(buf.capacity, 10);
* ```
*
* @param n The number of bytes to grow the buffer by.
*/
grow(n) {
if (n < 0) {
throw new Error("Buffer growth cannot be negative");
}
const m = this.#grow(n);
this.#reslice(m);
}
/**
* Reads data from `r` until EOF (`null`) and appends it to the buffer,
* growing the buffer as needed. It resolves to the number of bytes read.
* If the buffer becomes too large, `.readFrom()` will reject with an error.
*
* Based on Go Lang's
* {@link https://golang.org/pkg/bytes/#Buffer.ReadFrom | Buffer.ReadFrom}.
*
* @example Usage
* ```ts
* import { Buffer } from "@std/io/buffer";
* import { assertEquals } from "@std/assert/equals";
*
* const buf = new Buffer();
* const r = new Buffer(new TextEncoder().encode("Hello, world!"));
* const n = await buf.readFrom(r);
*
* assertEquals(n, 13);
* ```
*
* @param r The reader to read from.
* @returns The number of bytes read.
*/
async readFrom(r) {
let n = 0;
const tmp = new Uint8Array(MIN_READ);
while (true) {
const shouldGrow = this.capacity - this.length < MIN_READ;
const buf = shouldGrow ? tmp : new Uint8Array(this.#buf.buffer, this.length);
const nread = await r.read(buf);
if (nread === null) {
return n;
}
if (shouldGrow)
this.writeSync(buf.subarray(0, nread));
else
this.#reslice(this.length + nread);
n += nread;
}
}
/** Reads data from `r` until EOF (`null`) and appends it to the buffer,
* growing the buffer as needed. It returns the number of bytes read. If the
* buffer becomes too large, `.readFromSync()` will throw an error.
*
* Based on Go Lang's
* {@link https://golang.org/pkg/bytes/#Buffer.ReadFrom | Buffer.ReadFrom}.
*
* @example Usage
* ```ts
* import { Buffer } from "@std/io/buffer";
* import { assertEquals } from "@std/assert/equals";
*
* const buf = new Buffer();
* const r = new Buffer(new TextEncoder().encode("Hello, world!"));
* const n = buf.readFromSync(r);
*
* assertEquals(n, 13);
* ```
*
* @param r The reader to read from.
* @returns The number of bytes read.
*/
readFromSync(r) {
let n = 0;
const tmp = new Uint8Array(MIN_READ);
while (true) {
const shouldGrow = this.capacity - this.length < MIN_READ;
const buf = shouldGrow ? tmp : new Uint8Array(this.#buf.buffer, this.length);
const nread = r.readSync(buf);
if (nread === null) {
return n;
}
if (shouldGrow)
this.writeSync(buf.subarray(0, nread));
else
this.#reslice(this.length + nread);
n += nread;
}
}
};
exports2.Buffer = Buffer2;
}
});
// npm/script/deps/jsr.io/@std/io/0.225.3/write_all.js
var require_write_all = __commonJS({
"npm/script/deps/jsr.io/@std/io/0.225.3/write_all.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.writeAll = writeAll;
exports2.writeAllSync = writeAllSync;
async function writeAll(writer, data) {
let nwritten = 0;
while (nwritten < data.length) {
nwritten += await writer.write(data.subarray(nwritten));
}
}
function writeAllSync(writer, data) {
let nwritten = 0;
while (nwritten < data.length) {
nwritten += writer.writeSync(data.subarray(nwritten));
}
}
}
});
// npm/script/deps/jsr.io/@std/io/0.225.3/reader_from_stream_reader.js
var require_reader_from_stream_reader = __commonJS({
"npm/script/deps/jsr.io/@std/io/0.225.3/reader_from_stream_reader.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.readerFromStreamReader = readerFromStreamReader;
var buffer_js_1 = require_buffer();
var write_all_js_1 = require_write_all();
function readerFromStreamReader(streamReader) {
const buffer = new buffer_js_1.Buffer();
return {
async read(p) {
if (buffer.empty()) {
const res = await streamReader.read();
if (res.done) {
return null;
}
await (0, write_all_js_1.writeAll)(buffer, res.value);
}
return buffer.read(p);
}
};
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/fsFile.js
var require_fsFile = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/fsFile.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.FsFile = void 0;
exports2.open = open;
exports2.create = create;
exports2.writeSyncAll = writeSyncAll;
exports2.writeAll = writeAll;
var dntShim = __importStar2(require_dnt_shims());
var fs = __importStar2(require("node:fs"));
var node_timers_1 = require("node:timers");
var nodeUtil = __importStar2(require("node:util"));
var openAsync = nodeUtil.promisify(fs.open);
var FsFile = class {
#fd;
/** Wraps an existing open file descriptor. */
constructor(fd) {
this.#fd = fd;
}
/** Reads up to `p.length` bytes into `p`, returning the number of bytes
* read or `null` on EOF. */
read(p) {
return new Promise((resolve, reject) => {
fs.read(this.#fd, p, 0, p.length, null, (err, bytesRead) => {
if (err)
reject(err);
else
resolve(bytesRead === 0 ? null : bytesRead);
});
});
}
/** Synchronous variant of {@link FsFile.read}. */
readSync(p) {
const bytesRead = fs.readSync(this.#fd, p);
return bytesRead === 0 ? null : bytesRead;
}
/** Writes the provided bytes to the file, returning the number of bytes
* written. */
write(p) {
return writeAll(this.#fd, p);
}
/** Synchronous variant of {@link FsFile.write}. */
writeSync(p) {
return writeSyncAll(this.#fd, p);
}
/** Closes the underlying file descriptor. */
close() {
try {
fs.closeSync(this.#fd);
} catch {
}
}
/** A `WritableStream` that writes to this file. */
get writable() {
const write = this.write.bind(this);
return new dntShim.WritableStream({
async write(chunk) {
await write(chunk);
}
});
}
/** Closes the file when used with `using` declarations. */
[Symbol.dispose]() {
this.close();
}
};
exports2.FsFile = FsFile;
async function open(filePath, options) {
const fd = await openAsync(filePath, openOptionsToFlags(options));
return new FsFile(fd);
}
async function create(filePath) {
const fd = await openAsync(filePath, fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_TRUNC);
return new FsFile(fd);
}
function openOptionsToFlags(options) {
let flags = options.read && options.write ? fs.constants.O_RDWR : options.write ? fs.constants.O_WRONLY : fs.constants.O_RDONLY;
if (options.create)
flags |= fs.constants.O_CREAT;
if (options.truncate)
flags |= fs.constants.O_TRUNC;
if (options.append)
flags |= fs.constants.O_APPEND;
return flags;
}
function writeSyncAll(fd, data) {
let offset = 0;
while (offset < data.length) {
try {
const n = fs.writeSync(fd, data, offset, data.length - offset);
if (n <= 0)
break;
offset += n;
} catch (err) {
if (err?.code === "EAGAIN" || err?.code === "EWOULDBLOCK")
continue;
throw err;
}
}
return offset;
}
async function writeAll(fd, data) {
let offset = 0;
while (offset < data.length) {
const n = await writeOnce(fd, data, offset);
if (n <= 0)
break;
offset += n;
}
return offset;
}
function writeOnce(fd, data, offset) {
return new Promise((resolve, reject) => {
const attempt = () => {
fs.write(fd, data, offset, data.length - offset, null, (err, bytesWritten) => {
if (err) {
if (err.code === "EAGAIN" || err.code === "EWOULDBLOCK")
(0, node_timers_1.setImmediate)(attempt);
else
reject(err);
} else {
resolve(bytesWritten);
}
});
};
attempt();
});
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/common.js
var require_common = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/common.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.LoggerTreeBox = exports2.TreeBox = exports2.Box = exports2.symbols = exports2.isWindows = void 0;
exports2.getRealEnvVars = getRealEnvVars;
exports2.delayToMs = delayToMs;
exports2.resolvePath = resolvePath;
exports2.safeLstat = safeLstat;
exports2.getExecutableShebangFromPath = getExecutableShebangFromPath;
exports2.getExecutableShebang = getExecutableShebang;
exports2.abortSignalToPromise = abortSignalToPromise;
exports2.errorToString = errorToString;
var dntShim = __importStar2(require_dnt_shims());
var fs = __importStar2(require("node:fs"));
var path = __importStar2(require("node:path"));
var mod_js_12 = require_mod3();
var fsFile_js_1 = require_fsFile();
exports2.isWindows = process.platform === "win32";
function getRealEnvVars() {
const result = {};
for (const [key, value] of Object.entries(process.env)) {
if (value !== void 0) {
result[key] = value;
}
}
return result;
}
exports2.symbols = {
writable: Symbol.for("dax.writableStream"),
readable: Symbol.for("dax.readableStream")
};
function delayToMs(delay) {
if (typeof delay === "number") {
return delay;
} else if (typeof delay === "string") {
const msMatch = delay.match(/^([0-9]+)ms$/);
if (msMatch != null) {
return parseInt(msMatch[1], 10);
}
const secondsMatch = delay.match(/^([0-9]+\.?[0-9]*)s$/);
if (secondsMatch != null) {
return Math.round(parseFloat(secondsMatch[1]) * 1e3);
}
const minutesMatch = delay.match(/^([0-9]+\.?[0-9]*)m$/);
if (minutesMatch != null) {
return Math.round(parseFloat(minutesMatch[1]) * 1e3 * 60);
}
const minutesSecondsMatch = delay.match(/^([0-9]+\.?[0-9]*)m([0-9]+\.?[0-9]*)s$/);
if (minutesSecondsMatch != null) {
return Math.round(parseFloat(minutesSecondsMatch[1]) * 1e3 * 60 + parseFloat(minutesSecondsMatch[2]) * 1e3);
}
const hoursMatch = delay.match(/^([0-9]+\.?[0-9]*)h$/);
if (hoursMatch != null) {
return Math.round(parseFloat(hoursMatch[1]) * 1e3 * 60 * 60);
}
const hoursMinutesMatch = delay.match(/^([0-9]+\.?[0-9]*)h([0-9]+\.?[0-9]*)m$/);
if (hoursMinutesMatch != null) {
return Math.round(parseFloat(hoursMinutesMatch[1]) * 1e3 * 60 * 60 + parseFloat(hoursMinutesMatch[2]) * 1e3 * 60);
}
const hoursMinutesSecondsMatch = delay.match(/^([0-9]+\.?[0-9]*)h([0-9]+\.?[0-9]*)m([0-9]+\.?[0-9]*)s$/);
if (hoursMinutesSecondsMatch != null) {
return Math.round(parseFloat(hoursMinutesSecondsMatch[1]) * 1e3 * 60 * 60 + parseFloat(hoursMinutesSecondsMatch[2]) * 1e3 * 60 + parseFloat(hoursMinutesSecondsMatch[3]) * 1e3);
}
}
throw new Error(`Unknown delay value: ${delay}`);
}
function resolvePath(cwd, arg) {
return path.resolve(path.isAbsolute(arg) ? arg : path.join(cwd, arg));
}
var Box = class {
value;
constructor(value) {
this.value = value;
}
};
exports2.Box = Box;
var TreeBox = class _TreeBox {
#value;
constructor(value) {
this.#value = value;
}
getValue() {
let tree = this;
while (tree.#value instanceof _TreeBox) {
tree = tree.#value;
}
return tree.#value;
}
setValue(value) {
this.#value = value;
}
createChild() {
return new _TreeBox(this);
}
};
exports2.TreeBox = TreeBox;
var LoggerTreeBox = class extends TreeBox {
getValue() {
const innerValue = super.getValue();
return (...args) => {
return mod_js_12.staticText.withTempClear(() => {
innerValue(...args);
});
};
}
};
exports2.LoggerTreeBox = LoggerTreeBox;
async function safeLstat(path2) {
try {
return await fs.promises.lstat(path2);
} catch (err) {
if (err?.code === "ENOENT") {
return void 0;
} else {
throw err;
}
}
}
async function getExecutableShebangFromPath(path2) {
try {
const file = await (0, fsFile_js_1.open)(path2, { read: true });
try {
return await getExecutableShebang(file);
} finally {
try {
file.close();
} catch {
}
}
} catch (err) {
if (err?.code === "ENOENT") {
return false;
}
throw err;
}
}
var decoder = new dntShim.TextDecoder();
async function getExecutableShebang(reader) {
const text = "#!/usr/bin/env ";
const buffer = new Uint8Array(text.length);
const bytesReadCount = await reader.read(buffer);
if (bytesReadCount !== text.length || decoder.decode(buffer) !== text) {
return void 0;
}
const line = (await readFirstLine(reader)).trim();
if (line.length === 0) {
return void 0;
}
const dashS = "-S ";
if (line.startsWith(dashS)) {
return {
stringSplit: true,
command: line.slice(dashS.length)
};
} else {
return {
stringSplit: false,
command: line
};
}
}
async function readFirstLine(reader) {
const chunkSize = 1024;
const chunkBuffer = new Uint8Array(chunkSize);
const collectedChunks = [];
let totalLength = 0;
while (true) {
const bytesRead = await reader.read(chunkBuffer);
if (bytesRead == null || bytesRead === 0) {
break;
}
const currentChunk = chunkBuffer.subarray(0, bytesRead);
const newlineIndex = currentChunk.indexOf(10);
if (newlineIndex !== -1) {
collectedChunks.push(currentChunk.subarray(0, newlineIndex));
totalLength += newlineIndex;
break;
} else {
collectedChunks.push(currentChunk);
totalLength += bytesRead;
}
}
const finalBytes = new Uint8Array(totalLength);
let offset = 0;
for (const chunk of collectedChunks) {
finalBytes.set(chunk, offset);
offset += chunk.length;
}
return new dntShim.TextDecoder().decode(finalBytes);
}
function abortSignalToPromise(signal) {
const { resolve, promise } = Promise.withResolvers();
const listener = () => {
signal.removeEventListener("abort", listener);
resolve();
};
signal.addEventListener("abort", listener);
return {
[Symbol.dispose]() {
signal.removeEventListener("abort", listener);
},
promise
};
}
var nodeErrorPrefix = /^E[A-Z0-9_]+: /;
function errorToString(err) {
const message = err instanceof Error ? err.message : String(err);
return message.replace(nodeErrorPrefix, "");
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/args.js
var require_args = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/args.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.parseArgKinds = parseArgKinds;
exports2.bailUnsupported = bailUnsupported;
function parseArgKinds(flags) {
const result = [];
let had_dash_dash = false;
for (const arg of flags) {
if (had_dash_dash) {
result.push({ arg, kind: "Arg" });
} else if (arg == "-") {
result.push({ arg: "-", kind: "Arg" });
} else if (arg == "--") {
had_dash_dash = true;
} else if (arg.startsWith("--")) {
result.push({ arg: arg.replace(/^--/, ""), kind: "LongFlag" });
} else if (arg.startsWith("-")) {
const flags2 = arg.replace(/^-/, "");
if (!isNaN(parseFloat(flags2))) {
result.push({ arg, kind: "Arg" });
} else {
for (const c of flags2) {
result.push({ arg: c, kind: "ShortFlag" });
}
}
} else {
result.push({ arg, kind: "Arg" });
}
}
return result;
}
function bailUnsupported(arg) {
switch (arg.kind) {
case "Arg":
throw Error(`unsupported argument: ${arg.arg}`);
case "ShortFlag":
throw Error(`unsupported flag: -${arg.arg}`);
case "LongFlag":
throw Error(`unsupported flag: --${arg.arg}`);
}
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/cat.js
var require_cat = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/cat.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.catCommand = catCommand;
exports2.parseCatArgs = parseCatArgs;
var common_js_12 = require_common();
var fsFile_js_1 = require_fsFile();
var args_js_1 = require_args();
async function catCommand(context) {
try {
const code = await executeCat(context);
return { code };
} catch (err) {
return context.error(`cat: ${(0, common_js_12.errorToString)(err)}`);
}
}
async function executeCat(context) {
const flags = parseCatArgs(context.args);
let exitCode = 0;
const buf = new Uint8Array(1024);
for (const path of flags.paths) {
if (path === "-") {
if (typeof context.stdin === "object") {
while (!context.signal.aborted) {
const size = await context.stdin.read(buf);
if (!size || size === 0) {
break;
} else {
const maybePromise = context.stdout.write(buf.slice(0, size));
if (maybePromise instanceof Promise) {
await maybePromise;
}
}
}
exitCode = context.signal.abortedExitCode ?? 0;
} else {
const _assertValue = context.stdin;
throw new Error(`not supported. stdin was '${context.stdin}'`);
}
} else {
let file;
try {
file = await (0, fsFile_js_1.open)((0, common_js_12.resolvePath)(context.cwd, path), { read: true });
while (!context.signal.aborted) {
const size = await file.read(buf);
if (!size || size === 0) {
break;
} else {
const maybePromise = context.stdout.write(buf.slice(0, size));
if (maybePromise instanceof Promise) {
await maybePromise;
}
}
}
exitCode = context.signal.abortedExitCode ?? 0;
} catch (err) {
const maybePromise = context.stderr.writeLine(`cat ${path}: ${(0, common_js_12.errorToString)(err)}`);
if (maybePromise instanceof Promise) {
await maybePromise;
}
exitCode = 1;
} finally {
file?.close();
}
}
}
return exitCode;
}
function parseCatArgs(args) {
const paths = [];
for (const arg of (0, args_js_1.parseArgKinds)(args)) {
if (arg.kind === "Arg") {
paths.push(arg.arg);
} else {
(0, args_js_1.bailUnsupported)(arg);
}
}
if (paths.length === 0) {
paths.push("-");
}
return { paths };
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/cd.js
var require_cd = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/cd.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.cdCommand = cdCommand;
var fs = __importStar2(require("node:fs"));
var common_js_12 = require_common();
async function cdCommand(context) {
try {
const dir = await executeCd(context.cwd, context.args);
return {
code: 0,
changes: [{
kind: "cd",
dir
}]
};
} catch (err) {
return context.error(`cd: ${(0, common_js_12.errorToString)(err)}`);
}
}
async function executeCd(cwd, args) {
const arg = parseArgs(args);
const result = (0, common_js_12.resolvePath)(cwd, arg);
if (!await isDirectory(result)) {
throw new Error(`${result}: Not a directory`);
}
return result;
}
async function isDirectory(path) {
try {
return (await fs.promises.stat(path)).isDirectory();
} catch (err) {
if (err?.code === "ENOENT") {
return false;
} else {
throw err;
}
}
}
function parseArgs(args) {
if (args.length === 0) {
throw new Error("expected at least 1 argument");
} else if (args.length > 1) {
throw new Error("too many arguments");
} else {
return args[0];
}
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/cpMv.js
var require_cpMv = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/cpMv.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.cpCommand = cpCommand;
exports2.parseCpArgs = parseCpArgs;
exports2.mvCommand = mvCommand;
exports2.parseMvArgs = parseMvArgs;
var fs = __importStar2(require("node:fs"));
var path = __importStar2(require("node:path"));
var common_js_12 = require_common();
var args_js_1 = require_args();
async function cpCommand(context) {
try {
await executeCp(context.cwd, context.args);
return { code: 0 };
} catch (err) {
return context.error(`cp: ${(0, common_js_12.errorToString)(err)}`);
}
}
async function executeCp(cwd, args) {
const flags = await parseCpArgs(cwd, args);
for (const { from, to } of flags.operations) {
await doCopyOperation(flags, from, to);
}
}
async function parseCpArgs(cwd, args) {
const paths = [];
let recursive = false;
for (const arg of (0, args_js_1.parseArgKinds)(args)) {
if (arg.kind === "Arg")
paths.push(arg.arg);
else if (arg.arg === "recursive" && arg.kind === "LongFlag" || arg.arg === "r" && arg.kind == "ShortFlag" || arg.arg === "R" && arg.kind === "ShortFlag") {
recursive = true;
} else
(0, args_js_1.bailUnsupported)(arg);
}
if (paths.length === 0)
throw Error("missing file operand");
else if (paths.length === 1)
throw Error(`missing destination file operand after '${paths[0]}'`);
return { recursive, operations: await getCopyAndMoveOperations(cwd, paths) };
}
async function doCopyOperation(flags, from, to) {
const fromInfo = await (0, common_js_12.safeLstat)(from.path);
if (fromInfo?.isDirectory()) {
if (flags.recursive) {
const toInfo = await (0, common_js_12.safeLstat)(to.path);
if (toInfo?.isFile()) {
throw Error("destination was a file");
} else if (toInfo?.isSymbolicLink()) {
throw Error("no support for copying to symlinks");
} else if (fromInfo.isSymbolicLink()) {
throw Error("no support for copying from symlinks");
} else {
await fs.promises.cp(from.path, to.path, { recursive: true });
}
} else {
throw Error("source was a directory; maybe specify -r");
}
} else {
await fs.promises.copyFile(from.path, to.path);
}
}
async function mvCommand(context) {
try {
await executeMove(context.cwd, context.args);
return { code: 0 };
} catch (err) {
return context.error(`mv: ${(0, common_js_12.errorToString)(err)}`);
}
}
async function executeMove(cwd, args) {
const flags = await parseMvArgs(cwd, args);
for (const { from, to } of flags.operations) {
await fs.promises.rename(from.path, to.path);
}
}
async function parseMvArgs(cwd, args) {
const paths = [];
for (const arg of (0, args_js_1.parseArgKinds)(args)) {
if (arg.kind === "Arg")
paths.push(arg.arg);
else
(0, args_js_1.bailUnsupported)(arg);
}
if (paths.length === 0)
throw Error("missing operand");
else if (paths.length === 1)
throw Error(`missing destination file operand after '${paths[0]}'`);
return { operations: await getCopyAndMoveOperations(cwd, paths) };
}
async function getCopyAndMoveOperations(cwd, paths) {
const specified_destination = paths.splice(paths.length - 1, 1)[0];
const destination = (0, common_js_12.resolvePath)(cwd, specified_destination);
const fromArgs = paths;
const operations = [];
if (fromArgs.length > 1) {
if (!await (0, common_js_12.safeLstat)(destination).then((p) => p?.isDirectory())) {
throw Error(`target '${specified_destination}' is not a directory`);
}
for (const from of fromArgs) {
const fromPath = (0, common_js_12.resolvePath)(cwd, from);
const toPath = path.join(destination, path.basename(fromPath));
operations.push({
from: {
specified: from,
path: fromPath
},
to: {
specified: specified_destination,
path: toPath
}
});
}
} else {
const fromPath = (0, common_js_12.resolvePath)(cwd, fromArgs[0]);
const toPath = await (0, common_js_12.safeLstat)(destination).then((p) => p?.isDirectory()) ? calculateDestinationPath(destination, fromPath) : destination;
operations.push({
from: {
specified: fromArgs[0],
path: fromPath
},
to: {
specified: specified_destination,
path: toPath
}
});
}
return operations;
}
function calculateDestinationPath(destination, from) {
return path.join(destination, path.basename(from));
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/echo.js
var require_echo = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/echo.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.echoCommand = echoCommand;
var common_js_12 = require_common();
function echoCommand(context) {
try {
const maybePromise = context.stdout.writeLine(context.args.join(" "));
if (maybePromise instanceof Promise) {
return maybePromise.then(() => ({ code: 0 })).catch((err) => handleFailure(context, err));
} else {
return { code: 0 };
}
} catch (err) {
return handleFailure(context, err);
}
}
function handleFailure(context, err) {
return context.error(`echo: ${(0, common_js_12.errorToString)(err)}`);
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/exit.js
var require_exit = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/exit.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.exitCommand = exitCommand;
var common_js_12 = require_common();
function exitCommand(context) {
try {
const code = parseArgs(context.args);
return {
kind: "exit",
code
};
} catch (err) {
return context.error(2, `exit: ${(0, common_js_12.errorToString)(err)}`);
}
}
function parseArgs(args) {
if (args.length === 0)
return 1;
if (args.length > 1)
throw new Error("too many arguments");
const exitCode = parseInt(args[0], 10);
if (isNaN(exitCode))
throw new Error("numeric argument required.");
if (exitCode < 0) {
const code = -exitCode % 256;
return 256 - code;
}
return exitCode % 256;
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/export.js
var require_export = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/export.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.exportCommand = exportCommand;
function exportCommand(context) {
const changes = [];
for (const arg of context.args) {
const equalsIndex = arg.indexOf("=");
if (equalsIndex >= 0) {
changes.push({
kind: "envvar",
name: arg.substring(0, equalsIndex),
value: arg.substring(equalsIndex + 1)
});
}
}
return {
code: 0,
changes
};
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/mkdir.js
var require_mkdir = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/mkdir.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.mkdirCommand = mkdirCommand;
exports2.parseArgs = parseArgs;
var fs = __importStar2(require("node:fs"));
var common_js_12 = require_common();
var common_js_22 = require_common();
var args_js_1 = require_args();
async function mkdirCommand(context) {
try {
await executeMkdir(context.cwd, context.args);
return { code: 0 };
} catch (err) {
return context.error(`mkdir: ${(0, common_js_12.errorToString)(err)}`);
}
}
async function executeMkdir(cwd, args) {
const flags = parseArgs(args);
for (const specifiedPath of flags.paths) {
const path = (0, common_js_12.resolvePath)(cwd, specifiedPath);
const info = await (0, common_js_22.safeLstat)(path);
if (info?.isFile() || !flags.parents && info?.isDirectory()) {
throw Error(`cannot create directory '${specifiedPath}': File exists`);
}
if (flags.parents) {
await fs.promises.mkdir(path, { recursive: true });
} else {
await fs.promises.mkdir(path);
}
}
}
function parseArgs(args) {
const result = {
parents: false,
paths: []
};
for (const arg of (0, args_js_1.parseArgKinds)(args)) {
if (arg.arg === "parents" && arg.kind === "LongFlag" || arg.arg === "p" && arg.kind == "ShortFlag") {
result.parents = true;
} else {
if (arg.kind !== "Arg")
(0, args_js_1.bailUnsupported)(arg);
result.paths.push(arg.arg.trim());
}
}
if (result.paths.length === 0) {
throw Error("missing operand");
}
return result;
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/printenv.js
var require_printenv = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/printenv.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.printEnvCommand = printEnvCommand;
var common_js_12 = require_common();
function printEnvCommand(context) {
let args;
if (common_js_12.isWindows) {
args = context.args.map((arg) => arg.toUpperCase());
} else {
args = context.args;
}
try {
const result = executePrintEnv(context.env, args);
const code = args.some((arg) => context.env[arg] === void 0) ? 1 : 0;
const maybePromise = context.stdout.writeLine(result);
if (maybePromise instanceof Promise) {
return maybePromise.then(() => ({ code })).catch((err) => handleError(context, err));
} else {
return { code };
}
} catch (err) {
return handleError(context, err);
}
}
function handleError(context, err) {
return context.error(`printenv: ${(0, common_js_12.errorToString)(err)}`);
}
function executePrintEnv(env, args) {
if (args.length === 0) {
return Object.entries(env).map(([key, val]) => `${common_js_12.isWindows ? key.toUpperCase() : key}=${val}`).join("\n");
} else {
if (common_js_12.isWindows) {
args = args.map((arg) => arg.toUpperCase());
}
return Object.entries(env).filter(([key]) => args.includes(key)).map(([_key, val]) => val).join("\n");
}
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/pwd.js
var require_pwd = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/pwd.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.pwdCommand = pwdCommand;
exports2.parseArgs = parseArgs;
var path = __importStar2(require("node:path"));
var common_js_12 = require_common();
var args_js_1 = require_args();
function pwdCommand(context) {
try {
const output = executePwd(context.cwd, context.args);
const maybePromise = context.stdout.writeLine(output);
const result = { code: 0 };
if (maybePromise instanceof Promise) {
return maybePromise.then(() => result).catch((err) => handleError(context, err));
} else {
return result;
}
} catch (err) {
return handleError(context, err);
}
}
function handleError(context, err) {
return context.error(`pwd: ${(0, common_js_12.errorToString)(err)}`);
}
function executePwd(cwd, args) {
const flags = parseArgs(args);
if (flags.logical) {
return path.resolve(cwd);
} else {
return cwd;
}
}
function parseArgs(args) {
let logical = false;
for (const arg of (0, args_js_1.parseArgKinds)(args)) {
if (arg.arg === "L" && arg.kind === "ShortFlag") {
logical = true;
} else if (arg.arg === "P" && arg.kind == "ShortFlag") {
} else if (arg.kind === "Arg") {
} else {
(0, args_js_1.bailUnsupported)(arg);
}
}
return { logical };
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/rm.js
var require_rm = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/rm.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.rmCommand = rmCommand;
exports2.parseArgs = parseArgs;
var fs = __importStar2(require("node:fs"));
var common_js_12 = require_common();
var args_js_1 = require_args();
async function rmCommand(context) {
try {
await executeRemove(context.cwd, context.args);
return { code: 0 };
} catch (err) {
return context.error(`rm: ${(0, common_js_12.errorToString)(err)}`);
}
}
async function executeRemove(cwd, args) {
const flags = parseArgs(args);
await Promise.all(flags.paths.map((specifiedPath) => {
if (specifiedPath.length === 0) {
throw new Error("Bug in dax. Specified path should have not been empty.");
}
const path = (0, common_js_12.resolvePath)(cwd, specifiedPath);
if (path === "/") {
throw new Error("Cannot delete root directory. Maybe bug in dax? Please report this.");
}
return removePath(path, flags.recursive).catch((err) => {
if (flags.force && err?.code === "ENOENT") {
return Promise.resolve();
} else {
return Promise.reject(err);
}
});
}));
}
async function removePath(filePath, recursive) {
if (recursive) {
await fs.promises.rm(filePath, { recursive: true });
return;
}
try {
await fs.promises.rm(filePath);
} catch (err) {
if (err?.code !== "EISDIR" && err?.code !== "ERR_FS_EISDIR") {
throw err;
}
await fs.promises.rmdir(filePath);
}
}
function parseArgs(args) {
const result = {
recursive: false,
force: false,
dir: false,
paths: []
};
for (const arg of (0, args_js_1.parseArgKinds)(args)) {
if (arg.arg === "recursive" && arg.kind === "LongFlag" || arg.arg === "r" && arg.kind == "ShortFlag" || arg.arg === "R" && arg.kind === "ShortFlag") {
result.recursive = true;
} else if (arg.arg == "dir" && arg.kind === "LongFlag" || arg.arg == "d" && arg.kind === "ShortFlag") {
result.dir = true;
} else if (arg.arg == "force" && arg.kind === "LongFlag" || arg.arg == "f" && arg.kind === "ShortFlag") {
result.force = true;
} else {
if (arg.kind !== "Arg")
bailUnsupported(arg);
result.paths.push(arg.arg.trim());
}
}
if (result.paths.length === 0) {
throw Error("missing operand");
}
return result;
}
function bailUnsupported(arg) {
switch (arg.kind) {
case "Arg":
throw Error(`unsupported argument: ${arg.arg}`);
case "ShortFlag":
throw Error(`unsupported flag: -${arg.arg}`);
case "LongFlag":
throw Error(`unsupported flag: --${arg.arg}`);
}
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/set.js
var require_set = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/set.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.setCommand = setCommand;
var NAMED_OPTIONS = [
["errexit", "errexit"],
["pipefail", "pipefail"]
];
var SHORT_FLAGS = {
e: "errexit"
};
function findNamedOption(name) {
return NAMED_OPTIONS.find(([n]) => n === name)?.[1];
}
function findShortFlag(arg) {
if (arg.length !== 2)
return void 0;
const sign = arg[0];
if (sign !== "-" && sign !== "+")
return void 0;
return SHORT_FLAGS[arg[1]];
}
function setCommand(context) {
const args = context.args;
if (args.length === 0) {
return { code: 0 };
}
if (args.length === 1 && args[0] === "-o") {
const opts = context.shellOptions;
for (const [name, flag] of NAMED_OPTIONS) {
context.stdout.writeLine(`${name} ${opts[flag] ? "on" : "off"}`);
}
return { code: 0 };
}
if (args.length === 1 && args[0] === "+o") {
const opts = context.shellOptions;
for (const [name, flag] of NAMED_OPTIONS) {
context.stdout.writeLine(`set ${opts[flag] ? "-o" : "+o"} ${name}`);
}
return { code: 0 };
}
const changes = [];
let i = 0;
while (i < args.length) {
const arg = args[i];
if ((arg === "-o" || arg === "+o") && i + 1 < args.length) {
const enable = arg === "-o";
const optionName = args[i + 1];
const option = findNamedOption(optionName);
if (option == null) {
return context.error(`set: unknown option: ${optionName}`);
}
changes.push({ kind: "setoption", option, value: enable });
i += 2;
} else {
const option = findShortFlag(arg);
if (option == null) {
return context.error(`set: invalid option: ${arg}`);
}
changes.push({ kind: "setoption", option, value: arg.startsWith("-") });
i += 1;
}
}
return { code: 0, changes };
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/shopt.js
var require_shopt = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/shopt.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.shoptCommand = shoptCommand;
var SHOPT_OPTIONS = ["nullglob", "failglob", "globstar"];
function isShoptOption(name) {
return SHOPT_OPTIONS.includes(name);
}
function invalidOptionError(context, name) {
return context.error(`shopt: ${name}: invalid shell option name`);
}
function shoptCommand(context) {
const args = context.args;
let mode;
let optionArgs = args;
if (args.length > 0) {
if (args[0] === "-s") {
mode = true;
optionArgs = args.slice(1);
} else if (args[0] === "-u") {
mode = false;
optionArgs = args.slice(1);
}
}
const options = [];
for (const arg of optionArgs) {
if (!isShoptOption(arg)) {
return invalidOptionError(context, arg);
}
options.push(arg);
}
if (mode !== void 0) {
const changes = options.map((option) => ({
kind: "setoption",
option,
value: mode
}));
return { code: 0, changes };
}
const currentOptions = context.shellOptions;
if (options.length === 0) {
context.stdout.writeLine(`failglob ${currentOptions.failglob ? "on" : "off"}`);
context.stdout.writeLine(`globstar ${currentOptions.globstar ? "on" : "off"}`);
context.stdout.writeLine(`nullglob ${currentOptions.nullglob ? "on" : "off"}`);
return { code: 0 };
} else {
let anyOff = false;
for (const opt of options) {
const isOn = currentOptions[opt];
if (!isOn) {
anyOff = true;
}
context.stdout.writeLine(`${opt} ${isOn ? "on" : "off"}`);
}
return { code: anyOff ? 1 : 0 };
}
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/result.js
var require_result = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/result.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.getAbortedResult = getAbortedResult;
function getAbortedResult() {
return {
kind: "exit",
code: 124
// same as timeout command
};
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/sleep.js
var require_sleep = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/sleep.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.sleepCommand = sleepCommand;
var common_js_12 = require_common();
var result_js_1 = require_result();
async function sleepCommand(context) {
try {
const ms = parseArgs(context.args);
await new Promise((resolve) => {
const timeoutId = setTimeout(finish, ms);
context.signal.addListener(signalListener);
function signalListener(_signal) {
if (context.signal.aborted) {
finish();
}
}
function finish() {
resolve();
clearInterval(timeoutId);
context.signal.removeListener(signalListener);
}
});
if (context.signal.aborted) {
return (0, result_js_1.getAbortedResult)();
}
return { code: 0 };
} catch (err) {
return context.error(`sleep: ${(0, common_js_12.errorToString)(err)}`);
}
}
function parseArgs(args) {
let totalTimeMs = 0;
if (args.length === 0) {
throw new Error("missing operand");
}
for (const arg of args) {
if (arg.startsWith("-")) {
throw new Error(`unsupported: ${arg}`);
}
const value = parseFloat(arg);
if (isNaN(value)) {
throw new Error(`error parsing argument '${arg}' to number.`);
}
totalTimeMs = value * 1e3;
}
return totalTimeMs;
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/test.js
var require_test = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/test.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.testCommand = testCommand;
var common_js_12 = require_common();
async function testCommand(context) {
try {
const [testFlag, testPath] = parseArgs(context.cwd, context.args);
let result;
switch (testFlag) {
case "-f":
result = (await (0, common_js_12.safeLstat)(testPath))?.isFile() ?? false;
break;
case "-d":
result = (await (0, common_js_12.safeLstat)(testPath))?.isDirectory() ?? false;
break;
case "-e":
result = await (0, common_js_12.safeLstat)(testPath) != null;
break;
case "-s":
result = ((await (0, common_js_12.safeLstat)(testPath))?.size ?? 0) > 0;
break;
case "-L":
result = (await (0, common_js_12.safeLstat)(testPath))?.isSymbolicLink() ?? false;
break;
default:
throw new Error("unsupported test type");
}
return { code: result ? 0 : 1 };
} catch (err) {
return context.error(2, `test: ${(0, common_js_12.errorToString)(err)}`);
}
}
function parseArgs(cwd, args) {
if (args.length !== 2) {
throw new Error("expected 2 arguments");
}
if (args[0] == null || !args[0].startsWith("-")) {
throw new Error("missing test type flag");
}
return [args[0], (0, common_js_12.resolvePath)(cwd, args[1])];
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/touch.js
var require_touch = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/touch.js"(exports2) {
"use strict";
var __addDisposableResource = exports2 && exports2.__addDisposableResource || function(env, value, async) {
if (value !== null && value !== void 0) {
if (typeof value !== "object" && typeof value !== "function")
throw new TypeError("Object expected.");
var dispose, inner;
if (async) {
if (!Symbol.asyncDispose)
throw new TypeError("Symbol.asyncDispose is not defined.");
dispose = value[Symbol.asyncDispose];
}
if (dispose === void 0) {
if (!Symbol.dispose)
throw new TypeError("Symbol.dispose is not defined.");
dispose = value[Symbol.dispose];
if (async)
inner = dispose;
}
if (typeof dispose !== "function")
throw new TypeError("Object not disposable.");
if (inner)
dispose = function() {
try {
inner.call(this);
} catch (e) {
return Promise.reject(e);
}
};
env.stack.push({ value, dispose, async });
} else if (async) {
env.stack.push({ async: true });
}
return value;
};
var __disposeResources = exports2 && exports2.__disposeResources || /* @__PURE__ */ function(SuppressedError2) {
return function(env) {
function fail(e) {
env.error = env.hasError ? new SuppressedError2(e, env.error, "An error was suppressed during disposal.") : e;
env.hasError = true;
}
var r, s = 0;
function next() {
while (r = env.stack.pop()) {
try {
if (!r.async && s === 1)
return s = 0, env.stack.push(r), Promise.resolve().then(next);
if (r.dispose) {
var result = r.dispose.call(r.value);
if (r.async)
return s |= 2, Promise.resolve(result).then(next, function(e) {
fail(e);
return next();
});
} else
s |= 1;
} catch (e) {
fail(e);
}
}
if (s === 1)
return env.hasError ? Promise.reject(env.error) : Promise.resolve();
if (env.hasError)
throw env.error;
}
return next();
};
}(typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
var e = new Error(message);
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
});
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.touchCommand = touchCommand;
exports2.parseArgs = parseArgs;
var node_path_1 = require("node:path");
var common_js_12 = require_common();
var fsFile_js_1 = require_fsFile();
var args_js_1 = require_args();
async function touchCommand(context) {
try {
await executetouch(context.args, context.cwd);
return { code: 0 };
} catch (err) {
return context.error(`touch: ${(0, common_js_12.errorToString)(err)}`);
}
}
async function executetouch(args, cwd) {
const flags = parseArgs(args);
for (const path of flags.paths) {
const env_1 = { stack: [], error: void 0, hasError: false };
try {
const _f = __addDisposableResource(env_1, await (0, fsFile_js_1.create)((0, node_path_1.join)(cwd, path)), false);
} catch (e_1) {
env_1.error = e_1;
env_1.hasError = true;
} finally {
__disposeResources(env_1);
}
}
}
function parseArgs(args) {
const paths = [];
for (const arg of (0, args_js_1.parseArgKinds)(args)) {
if (arg.kind === "Arg")
paths.push(arg.arg);
else
(0, args_js_1.bailUnsupported)(arg);
}
if (paths.length === 0)
throw Error("missing file operand");
return { paths };
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/unset.js
var require_unset = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/unset.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.unsetCommand = unsetCommand;
var common_js_12 = require_common();
function unsetCommand(context) {
try {
return {
code: 0,
changes: parseNames(context.args).map((name) => ({ kind: "unsetvar", name }))
};
} catch (err) {
return context.error(`unset: ${(0, common_js_12.errorToString)(err)}`);
}
}
function parseNames(args) {
if (args[0] === "-f") {
throw Error(`unsupported flag: -f`);
} else if (args[0] === "-v") {
return args.slice(1);
} else {
return args;
}
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/lineRingBuffer.js
var require_lineRingBuffer = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/lineRingBuffer.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.LineRingBuffer = void 0;
var LineRingBuffer = class {
capacity;
#buffer;
#size = 0;
#head = 0;
constructor(capacity) {
this.capacity = Math.max(1, capacity);
this.#buffer = new Array(this.capacity);
}
get size() {
return this.#size;
}
push(item) {
this.#buffer[this.#head] = item;
this.#head = (this.#head + 1) % this.capacity;
if (this.#size < this.capacity)
this.#size++;
}
/** Iterate every retained item, oldest first. */
*[Symbol.iterator]() {
const start = this.#size < this.capacity ? 0 : this.#head;
for (let i = 0; i < this.#size; i++) {
yield this.#buffer[(start + i) % this.capacity];
}
}
/** Iterate the last `n` retained items, oldest first. */
*takeLast(n) {
const count = Math.min(Math.max(0, n), this.#size);
const start = (this.#head - count + this.capacity) % this.capacity;
for (let i = 0; i < count; i++) {
yield this.#buffer[(start + i) % this.capacity];
}
}
};
exports2.LineRingBuffer = LineRingBuffer;
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/pipes.js
var require_pipes = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/pipes.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
var __addDisposableResource = exports2 && exports2.__addDisposableResource || function(env, value, async) {
if (value !== null && value !== void 0) {
if (typeof value !== "object" && typeof value !== "function")
throw new TypeError("Object expected.");
var dispose, inner;
if (async) {
if (!Symbol.asyncDispose)
throw new TypeError("Symbol.asyncDispose is not defined.");
dispose = value[Symbol.asyncDispose];
}
if (dispose === void 0) {
if (!Symbol.dispose)
throw new TypeError("Symbol.dispose is not defined.");
dispose = value[Symbol.dispose];
if (async)
inner = dispose;
}
if (typeof dispose !== "function")
throw new TypeError("Object not disposable.");
if (inner)
dispose = function() {
try {
inner.call(this);
} catch (e) {
return Promise.reject(e);
}
};
env.stack.push({ value, dispose, async });
} else if (async) {
env.stack.push({ async: true });
}
return value;
};
var __disposeResources = exports2 && exports2.__disposeResources || /* @__PURE__ */ function(SuppressedError2) {
return function(env) {
function fail(e) {
env.error = env.hasError ? new SuppressedError2(e, env.error, "An error was suppressed during disposal.") : e;
env.hasError = true;
}
var r, s = 0;
function next() {
while (r = env.stack.pop()) {
try {
if (!r.async && s === 1)
return s = 0, env.stack.push(r), Promise.resolve().then(next);
if (r.dispose) {
var result = r.dispose.call(r.value);
if (r.async)
return s |= 2, Promise.resolve(result).then(next, function(e) {
fail(e);
return next();
});
} else
s |= 1;
} catch (e) {
fail(e);
}
}
if (s === 1)
return env.hasError ? Promise.reject(env.error) : Promise.resolve();
if (env.hasError)
throw env.error;
}
return next();
};
}(typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
var e = new Error(message);
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
});
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.PipeSequencePipe = exports2.PipedBuffer = exports2.InheritTailWriter = exports2.DEFAULT_ERROR_TAIL_BYTES = exports2.DEFAULT_INHERIT_TAIL_ERROR_LINES = exports2.DEFAULT_INHERIT_TAIL_LINES = exports2.InheritStaticTextBypassWriter = exports2.ErrorTailCaptureWriterSync = exports2.ErrorTailCaptureWriter = exports2.CapturingBufferWriterSync = exports2.CapturingBufferWriter = exports2.ShellPipeWriter = exports2.NullPipeWriter = exports2.NullPipeReader = exports2.TailRenderer = void 0;
exports2.formatTailHeader = formatTailHeader;
exports2.formatRanHeader = formatRanHeader;
exports2.pipeReaderToWritable = pipeReaderToWritable;
exports2.pipeReadableToWriterSync = pipeReadableToWriterSync;
var dntShim = __importStar2(require_dnt_shims());
var mod_js_12 = require_mod3();
var colors2 = __importStar2(require_colors());
var buffer_js_1 = require_buffer();
var write_all_js_1 = require_write_all();
var common_js_12 = require_common();
var lineRingBuffer_js_1 = require_lineRingBuffer();
var TAIL_INDENT = " ";
function indentTailLine(line) {
return { text: TAIL_INDENT + line, hangingIndent: TAIL_INDENT.length };
}
var TailRenderer = class {
container;
#scope;
#intervalScope;
#segments = [];
// single deferred installed on the scope while at least one segment is
// active. `setText` is called only on the empty↔non-empty transition, so
// appendLines/setHeader become pure field writes — items get rebuilt at
// draw time (≈16 Hz via renderInterval) instead of per write.
#deferredItems;
constructor(options = {}) {
this.container = options.container ?? mod_js_12.staticText;
this.#scope = this.container.createScope();
const interval = options.interval === null ? void 0 : options.interval ?? mod_js_12.renderInterval;
this.#intervalScope = interval?.start();
this.#deferredItems = [(size) => this.#buildItems(size)];
}
[Symbol.dispose]() {
this.#intervalScope?.[Symbol.dispose]();
this.#scope[Symbol.dispose]();
}
/** @internal */
register(seg) {
const wasEmpty = this.#segments.length === 0;
this.#segments.push(seg);
if (wasEmpty)
this.#scope.setText(this.#deferredItems);
}
/** @internal */
unregister(seg) {
const idx = this.#segments.indexOf(seg);
if (idx !== -1)
this.#segments.splice(idx, 1);
if (this.#segments.length === 0)
this.#scope.setText([]);
}
/** @internal */
logAbove(items) {
this.#scope.logAbove(items);
}
#buildItems(size) {
const items = [];
const ctx = { size };
for (const seg of this.#segments) {
if (seg.headerFn != null) {
const text = seg.headerFn(ctx);
items.push(seg.headerVerbatim ? truncateHeaderToWidth(text, size) : formatTailHeader(text, size));
}
for (const line of seg.lines.takeLast(seg.visibleLineCount(ctx)))
items.push(indentTailLine(line));
}
return items;
}
};
exports2.TailRenderer = TailRenderer;
var defaultTailRenderer = new TailRenderer();
var encoder = new TextEncoder();
var NullPipeReader = class {
read(_p) {
return Promise.resolve(null);
}
};
exports2.NullPipeReader = NullPipeReader;
var NullPipeWriter = class {
writeSync(p) {
return p.length;
}
};
exports2.NullPipeWriter = NullPipeWriter;
var ShellPipeWriter = class {
#kind;
#inner;
constructor(kind, inner) {
this.#kind = kind;
this.#inner = inner;
}
get kind() {
return this.#kind;
}
get inner() {
return this.#inner;
}
write(p) {
if ("write" in this.#inner) {
return this.#inner.write(p);
} else {
return this.#inner.writeSync(p);
}
}
writeAll(data) {
if ("write" in this.#inner) {
return (0, write_all_js_1.writeAll)(this.#inner, data);
} else {
return (0, write_all_js_1.writeAllSync)(this.#inner, data);
}
}
writeText(text) {
return this.writeAll(encoder.encode(text));
}
writeLine(text) {
return this.writeText(text + "\n");
}
};
exports2.ShellPipeWriter = ShellPipeWriter;
var CapturingBufferWriter = class {
#buffer;
#innerWriter;
constructor(innerWriter, buffer) {
this.#innerWriter = innerWriter;
this.#buffer = buffer;
}
getBuffer() {
return this.#buffer;
}
async write(p) {
const nWritten = await this.#innerWriter.write(p);
this.#buffer.writeSync(p.slice(0, nWritten));
return nWritten;
}
};
exports2.CapturingBufferWriter = CapturingBufferWriter;
var CapturingBufferWriterSync = class {
#buffer;
#innerWriter;
constructor(innerWriter, buffer) {
this.#innerWriter = innerWriter;
this.#buffer = buffer;
}
getBuffer() {
return this.#buffer;
}
writeSync(p) {
const nWritten = this.#innerWriter.writeSync(p);
this.#buffer.writeSync(p.slice(0, nWritten));
return nWritten;
}
};
exports2.CapturingBufferWriterSync = CapturingBufferWriterSync;
var ErrorTailCaptureWriter = class {
ring;
#innerWriter;
constructor(innerWriter, ring) {
this.#innerWriter = innerWriter;
this.ring = ring;
}
async write(p) {
const nWritten = await this.#innerWriter.write(p);
this.ring.push(p.subarray(0, nWritten));
return nWritten;
}
};
exports2.ErrorTailCaptureWriter = ErrorTailCaptureWriter;
var ErrorTailCaptureWriterSync = class {
ring;
#innerWriter;
constructor(innerWriter, ring) {
this.#innerWriter = innerWriter;
this.ring = ring;
}
writeSync(p) {
const nWritten = this.#innerWriter.writeSync(p);
this.ring.push(p.subarray(0, nWritten));
return nWritten;
}
};
exports2.ErrorTailCaptureWriterSync = ErrorTailCaptureWriterSync;
var lineFeedCharCode = "\n".charCodeAt(0);
var InheritStaticTextBypassWriter = class {
#buffer;
#innerWriter;
constructor(innerWriter) {
this.#innerWriter = innerWriter;
this.#buffer = new buffer_js_1.Buffer();
}
writeSync(p) {
const index = p.findLastIndex((v) => v === lineFeedCharCode);
if (index === -1) {
this.#buffer.writeSync(p);
} else {
this.#buffer.writeSync(p.slice(0, index + 1));
this.flush();
this.#buffer.writeSync(p.slice(index + 1));
}
return p.byteLength;
}
flush() {
const bytes = this.#buffer.bytes({ copy: false });
mod_js_12.staticText.withTempClear(() => {
(0, write_all_js_1.writeAllSync)(this.#innerWriter, bytes);
});
this.#buffer.reset();
}
};
exports2.InheritStaticTextBypassWriter = InheritStaticTextBypassWriter;
exports2.DEFAULT_INHERIT_TAIL_LINES = 5;
exports2.DEFAULT_INHERIT_TAIL_ERROR_LINES = 80;
exports2.DEFAULT_ERROR_TAIL_BYTES = 8 * 1024;
function makeMaxLinesResolver(value) {
if (typeof value === "function")
return value;
if (typeof value === "number") {
if (!Number.isFinite(value)) {
throw new TypeError(`Invalid tailDisplay maxLines: ${value}`);
}
const n = Math.max(1, Math.floor(value));
return () => n;
}
const match = /^(\d+(?:\.\d+)?)%$/.exec(value);
if (!match)
throw new TypeError(`Invalid tailDisplay maxLines: ${JSON.stringify(value)}`);
const fraction = parseFloat(match[1]) / 100;
return ({ size }) => {
if (size?.rows == null)
return exports2.DEFAULT_INHERIT_TAIL_LINES;
return Math.max(1, Math.floor(size.rows * fraction));
};
}
function normalizeHeaderText(text) {
if (text == null)
return void 0;
const trimmed = text.replace(/\s+/g, " ").trim();
return trimmed.length > 0 ? trimmed : void 0;
}
function truncateHeaderToWidth(text, size) {
const cols = size?.columns ?? 80;
const visible = (0, mod_js_12.stripAnsiCodes)(text);
if (visible.length <= cols)
return text;
return visible.slice(0, Math.max(1, cols - 1)) + "\u2026";
}
var InheritTailState = class {
resolveMaxLines;
lines;
enabled;
/** Per-draw callback that produces the header text. `undefined` means
* "no header" (live tail renders no label). Percentages, raw strings and
* user callbacks are all normalized into this single shape upstream. */
headerFn;
/** When true, the header is rendered verbatim instead of being framed
* with the built-in `Running <text>` / `Ran <text>` styling. Set when
* the user supplies a custom header string or function. */
headerVerbatim = false;
/** Always-present fallback shown on the error path, even if the live
* header is hidden or customized — so error scrollback is unambiguous
* about which command failed. */
errorHeader;
promoteHeaderOnSuccess = false;
#refCount = 0;
#disposed = false;
#errored = false;
#trailingLines = [];
#registered = false;
#totalLinesSeen = 0;
renderer;
constructor(renderer, maxLines, isTty, maxErrorLines = exports2.DEFAULT_INHERIT_TAIL_ERROR_LINES) {
this.renderer = renderer;
this.resolveMaxLines = makeMaxLinesResolver(maxLines);
const initial = this.resolveMaxLines({ size: renderer.container.getConsoleSize() });
this.lines = new lineRingBuffer_js_1.LineRingBuffer(Math.max(initial, maxErrorLines));
this.enabled = isTty;
}
get omittedLineCount() {
return Math.max(0, this.#totalLinesSeen - this.lines.size);
}
/** Visible output rows after subtracting the header (if any) from the
* total `maxLines` budget. Floors to 1 so a headered segment always shows
* at least one line. */
visibleLineCount(ctx) {
const total = this.resolveMaxLines(ctx);
return Math.max(1, this.headerFn != null ? total - 1 : total);
}
addRef() {
this.#refCount++;
if (this.enabled && !this.#registered && !this.#disposed) {
this.renderer.register(this);
this.#registered = true;
}
}
setHeader(header, options) {
if (header == null) {
this.headerFn = void 0;
} else if (typeof header === "string") {
const trimmed = normalizeHeaderText(header);
this.headerFn = trimmed != null ? () => trimmed : void 0;
} else {
this.headerFn = header;
}
this.headerVerbatim = options?.verbatim ?? false;
}
appendLines(newLines) {
if (this.#disposed)
return;
this.#totalLinesSeen += newLines.length;
for (const line of newLines)
this.lines.push(line);
}
release(errored, trailing) {
if (this.#disposed)
return;
if (errored)
this.#errored = true;
if (trailing.length > 0)
this.#trailingLines.push(...trailing);
this.#refCount--;
if (this.#refCount > 0)
return;
this.#disposed = true;
if (!this.enabled)
return;
this.renderer.unregister(this);
this.#flushAbove();
}
#flushAbove() {
const preserved = [];
if (this.#errored) {
if (this.errorHeader != null) {
preserved.push(`${colors2.white(">")} ${colors2.blue(this.errorHeader)}`);
} else if (this.headerFn != null) {
const headerFn = this.headerFn;
preserved.push((size) => `${colors2.white(">")} ${colors2.blue(headerFn({ size }))}`);
}
const omitted = this.omittedLineCount;
if (omitted > 0) {
const noun = omitted === 1 ? "line" : "lines";
preserved.push(indentTailLine(colors2.dim(`...${omitted} ${noun} omitted...`)));
}
for (const line of this.lines)
preserved.push(indentTailLine(line));
for (const line of this.#trailingLines)
preserved.push(indentTailLine(line));
} else if (this.promoteHeaderOnSuccess && this.headerFn != null) {
const headerFn = this.headerFn;
const verbatim = this.headerVerbatim;
preserved.push((size) => {
const text = headerFn({ size });
return verbatim ? truncateHeaderToWidth(text, size) : formatRanHeader(text, size);
});
}
if (preserved.length > 0)
this.renderer.logAbove(preserved);
}
};
var InheritTailWriter = class _InheritTailWriter {
#innerWriter;
#state;
#decoder = new dntShim.TextDecoder();
#pending = "";
#finalized = false;
constructor(innerWriter, optionsOrSibling = {}) {
this.#innerWriter = innerWriter;
if (optionsOrSibling instanceof _InheritTailWriter) {
this.#state = optionsOrSibling.#state;
} else {
const opts = optionsOrSibling;
const renderer = opts.renderer ?? defaultTailRenderer;
const maxLines = opts.maxLines ?? exports2.DEFAULT_INHERIT_TAIL_LINES;
const isTty = opts.isTty ?? isStderrTty();
const state = new InheritTailState(renderer, maxLines, isTty);
if (opts.header !== void 0) {
state.setHeader(opts.header, { verbatim: opts.headerVerbatim });
}
if (opts.errorHeader !== void 0) {
state.errorHeader = normalizeHeaderText(opts.errorHeader);
}
if (opts.promoteHeaderOnSuccess !== void 0) {
state.promoteHeaderOnSuccess = opts.promoteHeaderOnSuccess;
}
this.#state = state;
}
this.#state.addRef();
}
/** Snapshot of the live tail (last visible-window retained lines, oldest
* first). The visible-window size is `maxLines - 1` when a header is shown
* (recomputed from the current console size for percentage / callback
* `maxLines`). */
get tailLines() {
const size = this.#state.renderer.container.getConsoleSize();
return Array.from(this.#state.lines.takeLast(this.#state.visibleLineCount({ size })));
}
/** Number of completed lines that were dropped from the retained ring
* buffer because its capacity is bounded. Rendered as
* `...N lines omitted...` above the retained tail when the command fails. */
get omittedLineCount() {
return this.#state.omittedLineCount;
}
/**
* Sets a label rendered above the tail lines that identifies what this
* scrolling region is showing. Accepts a literal string (collapsed to
* a single line) or a per-draw callback that receives the current
* `{ size }`. `undefined` removes the header. Long text is truncated to
* the terminal width.
*
* When `options.verbatim` is true, the text is rendered as-is (no
* built-in `Running` / `Ran` framing). Used by `.tailDisplay({ header })`
* so the caller has full control over styling.
*/
setHeader(header, options) {
this.#state.setHeader(header, options);
}
/**
* Sets the command label preserved on the error scrollback path even
* when the live header is hidden or customized — so `> <command>` is
* always shown when a tailed command fails, regardless of `.tailDisplay`
* header config.
*/
setErrorHeader(text) {
this.#state.errorHeader = normalizeHeaderText(text);
}
/**
* Controls whether the `Ran <command>` header is promoted to scrollback
* on successful finalize. Defaults to `false` — on success the live tail
* clears silently unless the caller opts in (command.ts enables it when
* `.printCommand()` was set, so the command stays visible in scrollback).
* The error-path header (`> <command>` + retained tail) is always emitted
* regardless of this flag since it's diagnostic.
*/
setPromoteHeaderOnSuccess(value) {
this.#state.promoteHeaderOnSuccess = value;
}
writeSync(p) {
if (this.#finalized) {
return p.length;
}
if (!this.#state.enabled) {
return this.#innerWriter.writeSync(p);
}
this.#pending += this.#decoder.decode(p, { stream: true });
const lastNewline = this.#pending.lastIndexOf("\n");
if (lastNewline !== -1) {
const complete = this.#pending.slice(0, lastNewline);
this.#pending = this.#pending.slice(lastNewline + 1);
this.#state.appendLines(complete.split("\n").map(stripTrailingCR));
}
return p.length;
}
/**
* Clears the scrolling region. Called on successful command completion.
*
* If a header was set it's promoted to scrollback via `logAbove` before
* the scope is disposed, so "which commands ran" remains visible after
* the transient tail clears. When multiple writers share a scope the
* scope is only disposed once all of them have finalized.
*
* Any partial pending line is still passed to `release` so that — if a
* sibling writer subsequently errors — the success side's last partial
* line is preserved in the error scrollback. The success path itself
* never renders trailing lines, so there's no visual cost when no
* sibling errors.
*/
finalize() {
if (this.#finalized)
return;
this.#finalized = true;
const trailing = [];
if (this.#pending.length > 0) {
trailing.push(stripTrailingCR(this.#pending));
this.#pending = "";
}
this.#state.release(false, trailing);
}
[Symbol.dispose]() {
this.finalize();
}
/**
* Promotes the header + retained tail above the static region before
* clearing it. Called when the command errored so the user has visible
* context. When multiple writers share a scope, any writer finalizing
* for error causes the shared region to use the error path once all
* writers have finalized.
*/
finalizeForError() {
if (this.#finalized)
return;
this.#finalized = true;
const trailing = [];
if (this.#pending.length > 0) {
trailing.push(stripTrailingCR(this.#pending));
this.#pending = "";
}
this.#state.release(true, trailing);
}
};
exports2.InheritTailWriter = InheritTailWriter;
function stripTrailingCR(line) {
return line.endsWith("\r") ? line.slice(0, -1) : line;
}
function isStderrTty() {
return Boolean(process.stderr.isTTY);
}
function formatTailHeader(text, size) {
return renderTailHeader(text, size, "Running", colors2.cyan);
}
function formatRanHeader(text, size) {
return renderTailHeader(text, size, "Ran", colors2.green);
}
function renderTailHeader(text, size, status, statusColor) {
const maxColumns = size?.columns ?? 80;
const overhead = status.length + 1;
const budget = Math.max(10, maxColumns - overhead);
const display = text.length > budget ? text.slice(0, budget - 1) + "\u2026" : text;
return `${colors2.bold(statusColor(status))} ${display}`;
}
var PipedBuffer = class {
#inner;
#hasSet = false;
constructor() {
this.#inner = new buffer_js_1.Buffer();
}
getBuffer() {
if (this.#inner instanceof buffer_js_1.Buffer) {
return this.#inner;
} else {
return void 0;
}
}
setError(err) {
if ("setError" in this.#inner) {
this.#inner.setError(err);
}
}
close() {
if ("close" in this.#inner) {
this.#inner.close();
}
}
writeSync(p) {
return this.#inner.writeSync(p);
}
setListener(listener) {
if (this.#hasSet) {
throw new Error("Piping to multiple outputs is currently not supported.");
}
if (this.#inner instanceof buffer_js_1.Buffer) {
(0, write_all_js_1.writeAllSync)(listener, this.#inner.bytes({ copy: false }));
}
this.#inner = listener;
this.#hasSet = true;
}
};
exports2.PipedBuffer = PipedBuffer;
var PipeSequencePipe = class {
#inner = new buffer_js_1.Buffer();
#readListener;
#closed = false;
close() {
this.#readListener?.();
this.#closed = true;
}
writeSync(p) {
const value = this.#inner.writeSync(p);
if (this.#readListener !== void 0) {
const listener = this.#readListener;
this.#readListener = void 0;
listener();
}
return value;
}
read(p) {
if (this.#readListener !== void 0) {
throw new Error("Misuse of PipeSequencePipe");
}
if (this.#inner.length === 0) {
if (this.#closed) {
return Promise.resolve(null);
} else {
return new Promise((resolve) => {
this.#readListener = () => {
resolve(this.#inner.readSync(p));
};
});
}
} else {
return Promise.resolve(this.#inner.readSync(p));
}
}
};
exports2.PipeSequencePipe = PipeSequencePipe;
async function pipeReaderToWritable(reader, writable, signal) {
const env_1 = { stack: [], error: void 0, hasError: false };
try {
const abortedPromise = __addDisposableResource(env_1, (0, common_js_12.abortSignalToPromise)(signal), false);
const writer = writable.getWriter();
try {
while (!signal.aborted) {
const buffer = new Uint8Array(1024);
const length = await Promise.race([abortedPromise.promise, reader.read(buffer)]);
if (length === 0 || length == null) {
break;
}
await writer.write(buffer.subarray(0, length));
}
} finally {
await writer.close();
}
} catch (e_1) {
env_1.error = e_1;
env_1.hasError = true;
} finally {
__disposeResources(env_1);
}
}
async function pipeReadableToWriterSync(readable, writer, signal) {
const reader = readable.getReader();
while (!signal.aborted) {
const result = await reader.read();
if (result.done) {
break;
}
const maybePromise = writer.writeAll(result.value);
if (maybePromise) {
await maybePromise;
}
}
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/spawn.js
var require_spawn = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/spawn.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.spawnCommand = spawnCommand;
var cp = __importStar2(require("node:child_process"));
var node_stream_1 = require("node:stream");
var command_js_1 = require_command();
var common_js_12 = require_common();
function spawnCommand(path, options) {
let receivedSignal;
const isWindowsBatch = common_js_12.isWindows && /\.(cmd|bat)$/i.test(path);
const child = cp.spawn(isWindowsBatch ? "cmd.exe" : path, isWindowsBatch ? getWindowsBatchArgs(path, options.args) : options.args, {
cwd: options.cwd,
env: options.env,
// cmd.exe parses its command line differently than the
// `CommandLineToArgvW` convention that Node's default escaping assumes, so
// escape the arguments ourselves (see `getWindowsBatchArgs`) and tell Node
// to pass them through verbatim. Without this, a `.cmd`/`.bat` path or
// argument containing a space is split by cmd.exe.
windowsVerbatimArguments: isWindowsBatch,
stdio: [
toNodeStdio(options.stdin),
toNodeStdio(options.stdout),
toNodeStdio(options.stderr)
]
});
const exitResolvers = Promise.withResolvers();
child.on("exit", (code) => {
if (code == null && receivedSignal != null) {
exitResolvers.resolve((0, command_js_1.getSignalAbortCode)(receivedSignal) ?? 1);
} else {
exitResolvers.resolve(code ?? 0);
}
});
child.on("error", (err) => {
exitResolvers.reject(err);
});
return {
stdin() {
return node_stream_1.Writable.toWeb(child.stdin);
},
kill(signo) {
receivedSignal = signo;
child.kill(signo);
},
waitExitCode() {
return exitResolvers.promise;
},
stdout() {
return node_stream_1.Readable.toWeb(child.stdout);
},
stderr() {
return node_stream_1.Readable.toWeb(child.stderr);
}
};
}
function getWindowsBatchArgs(path, args) {
const doubleEscapeMetaChars = /node_modules[\\/]\.bin[\\/][^\\/]+\.cmd$/i.test(path);
const command = [
escapeCmdCommand(path),
...args.map((arg) => escapeCmdArgument(arg, doubleEscapeMetaChars))
].join(" ");
return ["/d", "/s", "/c", `"${command}"`];
}
var cmdMetaCharsRegex = /([()\][%!^"`<>&|;, *?])/g;
function escapeCmdCommand(arg) {
return arg.replace(cmdMetaCharsRegex, "^$1");
}
function escapeCmdArgument(arg, doubleEscapeMetaChars) {
arg = arg.replace(/(?=(\\+?)?)\1"/g, '$1$1\\"');
arg = arg.replace(/(?=(\\+?)?)\1$/, "$1$1");
arg = `"${arg}"`;
arg = arg.replace(cmdMetaCharsRegex, "^$1");
if (doubleEscapeMetaChars) {
arg = arg.replace(cmdMetaCharsRegex, "^$1");
}
return arg;
}
function toNodeStdio(stdio) {
switch (stdio) {
case "inherit":
return "inherit";
case "null":
return "ignore";
case "piped":
return "pipe";
}
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/executable.js
var require_executable = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/executable.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.createExecutableCommand = createExecutableCommand;
var fs = __importStar2(require("node:fs"));
var common_js_12 = require_common();
var pipes_js_1 = require_pipes();
var spawn_js_1 = require_spawn();
var neverAbortedSignal = new AbortController().signal;
function createExecutableCommand(resolvedPath, options) {
const prependArgs = options?.args;
return async function executeCommandAtPath(context) {
const pipeStringVals = {
stdin: getStdioStringValue(context.stdin),
stdout: getStdioStringValue(context.stdout.kind),
stderr: getStdioStringValue(context.stderr.kind)
};
let p;
const cwd = context.cwd;
const args = prependArgs != null && prependArgs.length > 0 ? [...prependArgs, ...context.args] : context.args;
try {
p = (0, spawn_js_1.spawnCommand)(resolvedPath, {
args,
cwd,
env: context.env,
...pipeStringVals
});
} catch (err) {
throw checkMapCwdNotExistsError(cwd, err);
}
const listener = (signal) => p.kill(signal);
context.signal.addListener(listener);
const completeController = new AbortController();
const completeSignal = completeController.signal;
let stdinError;
const stdinPromise = writeStdin(context.stdin, p, completeSignal).catch(async (err) => {
if (completeSignal.aborted) {
return;
}
const maybePromise = context.stderr.writeLine(`stdin pipe broken. ${(0, common_js_12.errorToString)(err)}`);
if (maybePromise != null) {
await maybePromise;
}
stdinError = err;
try {
p.kill("SIGKILL");
} catch (err2) {
const code = err2?.code;
if (code !== "EACCES" && code !== "EPERM" && code !== "ENOENT") {
throw err2;
}
}
});
try {
const readStdoutTask = pipeStringVals.stdout === "piped" ? readStdOutOrErr(p.stdout(), context.stdout) : Promise.resolve();
const readStderrTask = pipeStringVals.stderr === "piped" ? readStdOutOrErr(p.stderr(), context.stderr) : Promise.resolve();
const [exitCode] = await Promise.all([
p.waitExitCode().catch((err) => Promise.reject(checkMapCwdNotExistsError(cwd, err))),
readStdoutTask,
readStderrTask
]);
if (stdinError != null) {
return {
code: 1,
kind: "exit"
};
} else {
return { code: exitCode };
}
} finally {
completeController.abort();
context.signal.removeListener(listener);
await stdinPromise;
}
};
}
async function writeStdin(stdin, p, signal) {
if (typeof stdin === "string") {
return;
}
const processStdin = p.stdin();
await (0, pipes_js_1.pipeReaderToWritable)(stdin, processStdin, signal);
try {
await processStdin.close();
} catch {
}
}
async function readStdOutOrErr(readable, writer) {
if (typeof writer === "string") {
return;
}
await (0, pipes_js_1.pipeReadableToWriterSync)(readable, writer, neverAbortedSignal);
}
function getStdioStringValue(value) {
if (value === "inheritPiped") {
return "piped";
} else if (value === "inherit" || value === "null" || value === "piped") {
return value;
} else {
return "piped";
}
}
function checkMapCwdNotExistsError(cwd, err) {
if (err.code === "ENOENT" && !fs.existsSync(cwd)) {
throw new Error(`Failed to launch command because the cwd does not exist (${cwd}).`, {
cause: err
});
} else {
throw err;
}
}
}
});
// npm/script/deps/jsr.io/@std/internal/1.0.14/_os.js
var require_os = __commonJS({
"npm/script/deps/jsr.io/@std/internal/1.0.14/_os.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.checkWindows = checkWindows;
var dntShim = __importStar2(require_dnt_shims());
function checkWindows() {
const global = dntShim.dntGlobalThis;
const platform = global.process?.platform;
if (typeof platform === "string")
return platform.startsWith("win");
const os = global.Deno?.build?.os;
if (typeof os === "string")
return os === "windows";
return global.navigator?.platform?.startsWith("Win") ?? false;
}
}
});
// npm/script/deps/jsr.io/@std/internal/1.0.14/os.js
var require_os2 = __commonJS({
"npm/script/deps/jsr.io/@std/internal/1.0.14/os.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.isWindows = void 0;
var _os_js_1 = require_os();
exports2.isWindows = (0, _os_js_1.checkWindows)();
}
});
// npm/script/deps/jsr.io/@std/path/1.1.6/_common/glob_to_reg_exp.js
var require_glob_to_reg_exp = __commonJS({
"npm/script/deps/jsr.io/@std/path/1.1.6/_common/glob_to_reg_exp.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2._globToRegExp = _globToRegExp;
var REG_EXP_ESCAPE_CHARS = [
"!",
"$",
"(",
")",
"*",
"+",
".",
"=",
"?",
"[",
"\\",
"^",
"{",
"|"
];
var RANGE_ESCAPE_CHARS = ["-", "\\", "]"];
function _globToRegExp(c, glob, {
extended = true,
globstar: globstarOption = true,
// os = osType,
caseInsensitive = false
} = {}) {
if (glob === "") {
return /(?!)/;
}
let newLength = glob.length;
for (; newLength > 1 && c.seps.includes(glob[newLength - 1]); newLength--)
;
glob = glob.slice(0, newLength);
let regExpString = "";
for (let j = 0; j < glob.length; ) {
let segment = "";
const groupStack = [];
let inRange = false;
let inEscape = false;
let endsWithSep = false;
let i = j;
for (; i < glob.length && !(c.seps.includes(glob[i]) && groupStack.length === 0); i++) {
if (inEscape) {
inEscape = false;
const escapeChars = inRange ? RANGE_ESCAPE_CHARS : REG_EXP_ESCAPE_CHARS;
segment += escapeChars.includes(glob[i]) ? `\\${glob[i]}` : glob[i];
continue;
}
if (glob[i] === c.escapePrefix) {
inEscape = true;
continue;
}
if (glob[i] === "[") {
if (!inRange) {
inRange = true;
segment += "[";
if (glob[i + 1] === "!") {
i++;
segment += "^";
} else if (glob[i + 1] === "^") {
i++;
segment += "\\^";
}
continue;
} else if (glob[i + 1] === ":") {
let k = i + 1;
let value = "";
while (glob[k + 1] !== void 0 && glob[k + 1] !== ":") {
value += glob[k + 1];
k++;
}
if (glob[k + 1] === ":" && glob[k + 2] === "]") {
i = k + 2;
if (value === "alnum")
segment += "\\dA-Za-z";
else if (value === "alpha")
segment += "A-Za-z";
else if (value === "ascii")
segment += "\0-\x7F";
else if (value === "blank")
segment += " ";
else if (value === "cntrl")
segment += "\0-\x7F";
else if (value === "digit")
segment += "\\d";
else if (value === "graph")
segment += "!-~";
else if (value === "lower")
segment += "a-z";
else if (value === "print")
segment += " -~";
else if (value === "punct") {
segment += `!"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_\u2018{|}~`;
} else if (value === "space")
segment += "\\s\v";
else if (value === "upper")
segment += "A-Z";
else if (value === "word")
segment += "\\w";
else if (value === "xdigit")
segment += "\\dA-Fa-f";
continue;
}
}
}
if (glob[i] === "]" && inRange) {
inRange = false;
segment += "]";
continue;
}
if (inRange) {
segment += glob[i];
continue;
}
if (glob[i] === ")" && groupStack.length > 0 && groupStack[groupStack.length - 1] !== "BRACE") {
segment += ")";
const type = groupStack.pop();
if (type === "!") {
segment += c.wildcard;
} else if (type !== "@") {
segment += type;
}
continue;
}
if (glob[i] === "|" && groupStack.length > 0 && groupStack[groupStack.length - 1] !== "BRACE") {
segment += "|";
continue;
}
if (glob[i] === "+" && extended && glob[i + 1] === "(") {
i++;
groupStack.push("+");
segment += "(?:";
continue;
}
if (glob[i] === "@" && extended && glob[i + 1] === "(") {
i++;
groupStack.push("@");
segment += "(?:";
continue;
}
if (glob[i] === "?") {
if (extended && glob[i + 1] === "(") {
i++;
groupStack.push("?");
segment += "(?:";
} else {
segment += ".";
}
continue;
}
if (glob[i] === "!" && extended && glob[i + 1] === "(") {
i++;
groupStack.push("!");
segment += "(?!";
continue;
}
if (glob[i] === "{") {
groupStack.push("BRACE");
segment += "(?:";
continue;
}
if (glob[i] === "}" && groupStack[groupStack.length - 1] === "BRACE") {
groupStack.pop();
segment += ")";
continue;
}
if (glob[i] === "," && groupStack[groupStack.length - 1] === "BRACE") {
segment += "|";
continue;
}
if (glob[i] === "*") {
if (extended && glob[i + 1] === "(") {
i++;
groupStack.push("*");
segment += "(?:";
} else {
const prevChar = glob[i - 1];
let numStars = 1;
while (glob[i + 1] === "*") {
i++;
numStars++;
}
const nextChar = glob[i + 1];
if (globstarOption && numStars === 2 && [...c.seps, void 0].includes(prevChar) && [...c.seps, void 0].includes(nextChar)) {
segment += c.globstar;
endsWithSep = true;
} else {
segment += c.wildcard;
}
}
continue;
}
segment += REG_EXP_ESCAPE_CHARS.includes(glob[i]) ? `\\${glob[i]}` : glob[i];
}
if (groupStack.length > 0 || inRange || inEscape) {
segment = "";
for (const c2 of glob.slice(j, i)) {
segment += REG_EXP_ESCAPE_CHARS.includes(c2) ? `\\${c2}` : c2;
endsWithSep = false;
}
}
regExpString += segment;
if (!endsWithSep) {
regExpString += i < glob.length ? c.sep : c.sepMaybe;
endsWithSep = true;
}
while (c.seps.includes(glob[i]))
i++;
j = i;
}
regExpString = `^${regExpString}$`;
return new RegExp(regExpString, caseInsensitive ? "i" : "");
}
}
});
// npm/script/deps/jsr.io/@std/path/1.1.6/posix/glob_to_regexp.js
var require_glob_to_regexp = __commonJS({
"npm/script/deps/jsr.io/@std/path/1.1.6/posix/glob_to_regexp.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.globToRegExp = globToRegExp;
var glob_to_reg_exp_js_1 = require_glob_to_reg_exp();
var constants = {
sep: "/+",
sepMaybe: "/*",
seps: ["/"],
globstar: "(?:[^/]*(?:/|$)+)*",
wildcard: "[^/]*",
escapePrefix: "\\"
};
function globToRegExp(glob, options = {}) {
return (0, glob_to_reg_exp_js_1._globToRegExp)(constants, glob, options);
}
}
});
// npm/script/deps/jsr.io/@std/path/1.1.6/windows/glob_to_regexp.js
var require_glob_to_regexp2 = __commonJS({
"npm/script/deps/jsr.io/@std/path/1.1.6/windows/glob_to_regexp.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.globToRegExp = globToRegExp;
var glob_to_reg_exp_js_1 = require_glob_to_reg_exp();
var constants = {
sep: "(?:\\\\|/)+",
sepMaybe: "(?:\\\\|/)*",
seps: ["\\", "/"],
globstar: "(?:[^\\\\/]*(?:\\\\|/|$)+)*",
wildcard: "[^\\\\/]*",
escapePrefix: "`"
};
function globToRegExp(glob, options = {}) {
return (0, glob_to_reg_exp_js_1._globToRegExp)(constants, glob, options);
}
}
});
// npm/script/deps/jsr.io/@std/path/1.1.6/glob_to_regexp.js
var require_glob_to_regexp3 = __commonJS({
"npm/script/deps/jsr.io/@std/path/1.1.6/glob_to_regexp.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.globToRegExp = globToRegExp;
var os_js_1 = require_os2();
var glob_to_regexp_js_1 = require_glob_to_regexp();
var glob_to_regexp_js_2 = require_glob_to_regexp2();
function globToRegExp(glob, options = {}) {
return os_js_1.isWindows ? (0, glob_to_regexp_js_2.globToRegExp)(glob, options) : (0, glob_to_regexp_js_1.globToRegExp)(glob, options);
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/glob.js
var require_glob = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/glob.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.expandGlob = expandGlob;
var fs = __importStar2(require("node:fs"));
var nodePath = __importStar2(require("node:path"));
var glob_to_regexp_js_1 = require_glob_to_regexp3();
var common_js_12 = require_common();
async function* expandGlob(pattern, options) {
const opts = {
caseInsensitive: options.caseInsensitive ?? false,
globstar: options.globstar ?? true,
followSymlinks: options.followSymlinks ?? false,
includeDirs: options.includeDirs ?? true
};
let startDir;
let remaining;
if (nodePath.isAbsolute(pattern)) {
const parsed = nodePath.parse(pattern);
startDir = parsed.root;
remaining = pattern.slice(parsed.root.length);
} else {
startDir = options.root;
remaining = pattern;
}
const sepRe = common_js_12.isWindows ? /[/\\]/ : /\//;
const segments = remaining.split(sepRe).filter((s) => s.length > 0);
yield* walkSegments(startDir, segments, 0, opts);
}
async function* walkSegments(dir, segments, index, opts) {
if (index >= segments.length) {
return;
}
const segment = segments[index];
const isLast = index === segments.length - 1;
if (segment === "**" && opts.globstar) {
yield* walkSegments(dir, segments, index + 1, opts);
let entries2;
try {
entries2 = await fs.promises.readdir(dir, { withFileTypes: true });
} catch {
return;
}
for (const entry of entries2) {
const entryPath = nodePath.join(dir, entry.name);
if (await isDirectory(entry, entryPath, opts.followSymlinks)) {
yield* walkSegments(entryPath, segments, index, opts);
}
}
return;
}
if (!hasGlobChar(segment)) {
const nextPath = nodePath.join(dir, segment);
let stat;
try {
stat = await fs.promises.stat(nextPath);
} catch (err) {
if (err?.code !== "ENOENT" || !opts.caseInsensitive || common_js_12.isWindows) {
return;
}
let entries2;
try {
entries2 = await fs.promises.readdir(dir, { withFileTypes: true });
} catch {
return;
}
const lowered = segment.toLowerCase();
for (const entry of entries2) {
if (entry.name.toLowerCase() !== lowered)
continue;
yield* yieldOrDescend(nodePath.join(dir, entry.name), entry, segments, index, isLast, opts);
}
return;
}
if (isLast) {
if (stat.isFile() || stat.isDirectory() && opts.includeDirs) {
yield { path: nextPath };
}
} else if (stat.isDirectory()) {
yield* walkSegments(nextPath, segments, index + 1, opts);
}
return;
}
const regex = (0, glob_to_regexp_js_1.globToRegExp)(segment, {
caseInsensitive: opts.caseInsensitive,
globstar: opts.globstar
});
let entries;
try {
entries = await fs.promises.readdir(dir, { withFileTypes: true });
} catch {
return;
}
for (const entry of entries) {
if (!regex.test(entry.name))
continue;
yield* yieldOrDescend(nodePath.join(dir, entry.name), entry, segments, index, isLast, opts);
}
}
async function* yieldOrDescend(entryPath, entry, segments, index, isLast, opts) {
let isFile = entry.isFile();
let isDir = entry.isDirectory();
if (entry.isSymbolicLink()) {
if (opts.followSymlinks) {
try {
const s = await fs.promises.stat(entryPath);
isFile = s.isFile();
isDir = s.isDirectory();
} catch {
return;
}
} else if (isLast) {
isFile = true;
}
}
if (isLast) {
if (isFile || isDir && opts.includeDirs) {
yield { path: entryPath };
}
} else if (isDir) {
yield* walkSegments(entryPath, segments, index + 1, opts);
}
}
async function isDirectory(entry, entryPath, followSymlinks) {
if (entry.isDirectory())
return true;
if (followSymlinks && entry.isSymbolicLink()) {
try {
return (await fs.promises.stat(entryPath)).isDirectory();
} catch {
return false;
}
}
return false;
}
function hasGlobChar(segment) {
for (let i = 0; i < segment.length; i++) {
const ch = segment[i];
if (ch === "*" || ch === "?" || ch === "[")
return true;
}
return false;
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/lib/rs_lib.internal.js
var require_rs_lib_internal2 = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/lib/rs_lib.internal.js"(exports2, module2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.__wbg_set_wasm = __wbg_set_wasm;
exports2.parse = parse;
exports2.__wbg_error_7534b8e9a36f1ab4 = __wbg_error_7534b8e9a36f1ab4;
exports2.__wbg_new_405e22f390576ce2 = __wbg_new_405e22f390576ce2;
exports2.__wbg_new_78feb108b6472713 = __wbg_new_78feb108b6472713;
exports2.__wbg_new_8a6f238a6ece86ea = __wbg_new_8a6f238a6ece86ea;
exports2.__wbg_set_37837023f3d740e8 = __wbg_set_37837023f3d740e8;
exports2.__wbg_set_3f1d0b984ed272ed = __wbg_set_3f1d0b984ed272ed;
exports2.__wbg_stack_0ed75d68575b0f3c = __wbg_stack_0ed75d68575b0f3c;
exports2.__wbindgen_debug_string = __wbindgen_debug_string;
exports2.__wbindgen_init_externref_table = __wbindgen_init_externref_table;
exports2.__wbindgen_number_new = __wbindgen_number_new;
exports2.__wbindgen_string_new = __wbindgen_string_new;
exports2.__wbindgen_throw = __wbindgen_throw;
var dntShim = __importStar2(require_dnt_shims());
var wasm;
function __wbg_set_wasm(val) {
wasm = val;
}
var lTextDecoder = typeof dntShim.TextDecoder === "undefined" ? (0, module2.require)("util").TextDecoder : dntShim.TextDecoder;
var cachedTextDecoder = new lTextDecoder("utf-8", { ignoreBOM: true, fatal: true });
cachedTextDecoder.decode();
var cachedUint8ArrayMemory0 = null;
function getUint8ArrayMemory0() {
if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
}
return cachedUint8ArrayMemory0;
}
function getStringFromWasm0(ptr, len) {
ptr = ptr >>> 0;
return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
}
var WASM_VECTOR_LEN = 0;
var lTextEncoder = typeof TextEncoder === "undefined" ? (0, module2.require)("util").TextEncoder : TextEncoder;
var cachedTextEncoder = new lTextEncoder("utf-8");
var encodeString = typeof cachedTextEncoder.encodeInto === "function" ? function(arg, view) {
return cachedTextEncoder.encodeInto(arg, view);
} : function(arg, view) {
const buf = cachedTextEncoder.encode(arg);
view.set(buf);
return {
read: arg.length,
written: buf.length
};
};
function passStringToWasm0(arg, malloc, realloc) {
if (realloc === void 0) {
const buf = cachedTextEncoder.encode(arg);
const ptr2 = malloc(buf.length, 1) >>> 0;
getUint8ArrayMemory0().subarray(ptr2, ptr2 + buf.length).set(buf);
WASM_VECTOR_LEN = buf.length;
return ptr2;
}
let len = arg.length;
let ptr = malloc(len, 1) >>> 0;
const mem = getUint8ArrayMemory0();
let offset = 0;
for (; offset < len; offset++) {
const code = arg.charCodeAt(offset);
if (code > 127)
break;
mem[ptr + offset] = code;
}
if (offset !== len) {
if (offset !== 0) {
arg = arg.slice(offset);
}
ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);
const ret = encodeString(arg, view);
offset += ret.written;
ptr = realloc(ptr, len, offset, 1) >>> 0;
}
WASM_VECTOR_LEN = offset;
return ptr;
}
var cachedDataViewMemory0 = null;
function getDataViewMemory0() {
if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || cachedDataViewMemory0.buffer.detached === void 0 && cachedDataViewMemory0.buffer !== wasm.memory.buffer) {
cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
}
return cachedDataViewMemory0;
}
function debugString(val) {
const type = typeof val;
if (type == "number" || type == "boolean" || val == null) {
return `${val}`;
}
if (type == "string") {
return `"${val}"`;
}
if (type == "symbol") {
const description = val.description;
if (description == null) {
return "Symbol";
} else {
return `Symbol(${description})`;
}
}
if (type == "function") {
const name = val.name;
if (typeof name == "string" && name.length > 0) {
return `Function(${name})`;
} else {
return "Function";
}
}
if (Array.isArray(val)) {
const length = val.length;
let debug = "[";
if (length > 0) {
debug += debugString(val[0]);
}
for (let i = 1; i < length; i++) {
debug += ", " + debugString(val[i]);
}
debug += "]";
return debug;
}
const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val));
let className;
if (builtInMatches && builtInMatches.length > 1) {
className = builtInMatches[1];
} else {
return toString.call(val);
}
if (className == "Object") {
try {
return "Object(" + JSON.stringify(val) + ")";
} catch (_) {
return "Object";
}
}
if (val instanceof Error) {
return `${val.name}: ${val.message}
${val.stack}`;
}
return className;
}
function takeFromExternrefTable0(idx) {
const value = wasm.__wbindgen_export_3.get(idx);
wasm.__externref_table_dealloc(idx);
return value;
}
function parse(command) {
const ptr0 = passStringToWasm0(command, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len0 = WASM_VECTOR_LEN;
const ret = wasm.parse(ptr0, len0);
if (ret[2]) {
throw takeFromExternrefTable0(ret[1]);
}
return takeFromExternrefTable0(ret[0]);
}
function __wbg_error_7534b8e9a36f1ab4(arg0, arg1) {
let deferred0_0;
let deferred0_1;
try {
deferred0_0 = arg0;
deferred0_1 = arg1;
console.error(getStringFromWasm0(arg0, arg1));
} finally {
wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);
}
}
function __wbg_new_405e22f390576ce2() {
const ret = new Object();
return ret;
}
function __wbg_new_78feb108b6472713() {
const ret = new Array();
return ret;
}
function __wbg_new_8a6f238a6ece86ea() {
const ret = new Error();
return ret;
}
function __wbg_set_37837023f3d740e8(arg0, arg1, arg2) {
arg0[arg1 >>> 0] = arg2;
}
function __wbg_set_3f1d0b984ed272ed(arg0, arg1, arg2) {
arg0[arg1] = arg2;
}
function __wbg_stack_0ed75d68575b0f3c(arg0, arg1) {
const ret = arg1.stack;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
}
function __wbindgen_debug_string(arg0, arg1) {
const ret = debugString(arg1);
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
}
function __wbindgen_init_externref_table() {
const table = wasm.__wbindgen_export_3;
const offset = table.grow(4);
table.set(0, void 0);
table.set(offset + 0, void 0);
table.set(offset + 1, null);
table.set(offset + 2, true);
table.set(offset + 3, false);
}
function __wbindgen_number_new(arg0) {
const ret = arg0;
return ret;
}
function __wbindgen_string_new(arg0, arg1) {
const ret = getStringFromWasm0(arg0, arg1);
return ret;
}
function __wbindgen_throw(arg0, arg1) {
throw new Error(getStringFromWasm0(arg0, arg1));
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/lib/rs_lib.js
var require_rs_lib2 = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/lib/rs_lib.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
for (var p in m)
if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p))
__createBinding2(exports3, m, p);
};
Object.defineProperty(exports2, "__esModule", { value: true });
var imports = __importStar2(require_rs_lib_internal2());
var bytes = base64decode("AGFzbQEAAAAB5QEiYAN/f38AYAJ/fwBgAn9/AX9gAX8AYAN/f38Bf2AEf39/fwBgBX9/f39/AGAEf39/fwF/YAF/AX9gBX9/f39/AX9gAAFvYAAAYAABf2ACf28AYAZ/f39/f38AYAADf39/YAJ/fwFvYANvf28AYANvb28AYAF8AW9gAn9+AGAHf39/f39/fwBgB39/f39/f38Bf2ADf35+AGADf39+AX9gBH9/f34AYAJ/fwN/f39gBn9/f39/fwF/YAV/f35/fwBgBH9+f38AYAV/f31/fwBgBH99f38AYAV/f3x/fwBgBH98f38AAssEDBQuL3JzX2xpYi5pbnRlcm5hbC5qcxVfX3diaW5kZ2VuX3N0cmluZ19uZXcAEBQuL3JzX2xpYi5pbnRlcm5hbC5qcxpfX3diZ19uZXdfNDA1ZTIyZjM5MDU3NmNlMgAKFC4vcnNfbGliLmludGVybmFsLmpzGl9fd2JnX25ld183OGZlYjEwOGI2NDcyNzEzAAoULi9yc19saWIuaW50ZXJuYWwuanMaX193Ymdfc2V0XzM3ODM3MDIzZjNkNzQwZTgAERQuL3JzX2xpYi5pbnRlcm5hbC5qcxpfX3diZ19zZXRfM2YxZDBiOTg0ZWQyNzJlZAASFC4vcnNfbGliLmludGVybmFsLmpzFV9fd2JpbmRnZW5fbnVtYmVyX25ldwATFC4vcnNfbGliLmludGVybmFsLmpzF19fd2JpbmRnZW5fZGVidWdfc3RyaW5nAA0ULi9yc19saWIuaW50ZXJuYWwuanMaX193YmdfbmV3XzhhNmYyMzhhNmVjZTg2ZWEAChQuL3JzX2xpYi5pbnRlcm5hbC5qcxxfX3diZ19zdGFja18wZWQ3NWQ2ODU3NWIwZjNjAA0ULi9yc19saWIuaW50ZXJuYWwuanMcX193YmdfZXJyb3JfNzUzNGI4ZTlhMzZmMWFiNAABFC4vcnNfbGliLmludGVybmFsLmpzEF9fd2JpbmRnZW5fdGhyb3cAARQuL3JzX2xpYi5pbnRlcm5hbC5qcx9fX3diaW5kZ2VuX2luaXRfZXh0ZXJucmVmX3RhYmxlAAsDhQKDAgUIAAAAAAYEAgcAAAYAAwYCAAQABAkAABQAABUBBQwAAgECAAEWAAQAAAABAgACAgACAQIBBQ4BAAAABgMBAAsA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AwsgBCAFai0AAEEnRg0CIAVBAWohBQwACwALQQAhAiADKQKUASENIAMoApABIQQMBwsgA0HYAGogBCAIIAVBxKzAABCHASADKAJcIQcgAygCWCEGIANB0ABqIAQgCCAFQdSswAAQjAEgByAGRQ0AGiADKAJUIQUgAygCUCEIIANB4ABqIAwgBiAHEEEgAygCYCIEIAMoAmhBgIDEAEYNABogAygCZCEHIAQNASAHCyEEQYCAgIB4IQUgA0G0AWoMAQtBEBDtASEKIANBgAJqIAggBRCEASAKQQA2AgAgCiADKQKAAjcCBCAKQQxqIANBiAJqKAIANgIAQQEhBSADQQE2ArQBIAchCyADQbABagsgBTYCAAJAAkACfwJAAkAgAygCtAEiB0GAgICAeEYEQCAEDQcgA0KigICAEDcCgAIgA0GBxAA7AYgCIANB4ABqIANBgAJqIAEgAhBNIAMoAmAhBiADKAJoQYCAxABGBEAgA0GAgICAeDYCpAEgAyAGNgKcAUGAgICAeAwECyADKAJkIQcgA0EANgLAASADQoCAgIDAADcCuAEgA0EANgJoIAMgBjYCYCADIAYgB2o2AmQDQEEAIQRBgYDEACEFA0AgA0GBgMQANgJwAn8gBUGBgMQARwRAIAMoAmwMAQsgA0HIAGogA0HgAGoQciADKAJMIQUgAygCSAshCAJAAkACQAJAAkAgBUEiaw4DAwQBAAsgBUHgAEYNASAFQYCAxABHDQMgA0GcAWogASACQZCzwABBHhCzASADQbgBahCkAQwICyAEQQFxDQIgAygCcCIEQYGAxABGBEAgA0EgaiADQeAAahByIAMgAygCJCIENgJwIAMgAygCIDYCbAsgBEEoRw0CIANBGGogBiAHIAhBoLHAABCMASADQYACaiADKAIYIAMoAhwQNCADKAKIAiIEQYCAgIB4RgRAIANBgICAgHg2AqQBIAMgAygCgAI2ApwBDAcLIAMgAykCjAI3AsgBIAMgBDYCxAEgA0G4AWogA0HEAWoQcSADQRBqIAYgByAIQbCxwAAQhwEgA0GAAmogAygCECADKAIUEDwgAygCgAIhBgJAAkAgAygCiAIiBEGAgICAeEYEQCAGDQFBACEFDAILIAMoAoQCIQcgAyADKQKMAjcCiAIgAyAENgKEAiADQQM2AoACIANBuAFqIANBgAJqQfyxwAAQkQEgA0GBgMQANgJwIANBADYCaCADIAY2AmAgAyAGIAdqNgJkDAYLIANB3AFqIgQgBigCCEE+ahCnASAEQcCxwABB/LHAABCsASAEQeSswABB5qzAABCsASAEIAYoAgQgBigCCBD1ASAGKQIMIQ1BFBDtASIFIA03AgwgBUEIaiADQeQBaigCADYCACAFIAMpAtwBNwIAIAYQ1QELIANBgICAgHg2AqQBIAMgBTYCnAEMBgsgBEEBcQ0BIANBMGogBiAHIAhBjLLAABCMASADQYACaiADKAIwIAMoAjQQNCADKAKIAiIEQYCAgIB4RgRAIANBgICAgHg2AqQBIAMgAygCgAI2ApwBDAYLIAMgAykCjAI3AtQBIAMgBDYC0AEgA0G4AWogA0HQAWoQcSADQShqIAYgByAIQZyywAAQhwEgA0GAAmogAygCKCADKAIsEBcgAygCgAIhBgJAAkAgAygCiAIiBEGAgICAeEYEQCAGDQFBACEFDAILIAMoAoQCIQcgAyADKQKMAjcCiAIgAyAENgKEAiADQQM2AoACIANBuAFqIANBgAJqQeCywAAQkQEgA0GBgMQANgJwIANBADYCaCADIAY2AmAgAyAGIAdqNgJkDAULIANB6AFqIgQgBigCCEEzahCnASAEQayywABB3bLAABCsASAEQeSswABB5qzAABCsASAEIAYoAgQgBigCCBD1ASAGKQIMIQ1BFBDtASIFIA03AgwgBUEIaiADQfABaigCADYCACAFIAMpAugBNwIAIAYQ1QELIANBgICAgHg2AqQBIAMgBTYCnAEMBQsgBEEBcQ0AIANBQGsgBiAHIAhB8LLAABCMASADQYACaiADKAJAIAMoAkQQNCADKAKIAiIEQYCAgIB4RgRAIANBgICAgHg2AqQBIAMgAygCgAI2ApwBDAULIAMgAykCjAI3AvgBIAMgBDYC9AEgA0E4aiAGIAcgCEEBakGAs8AAEIcBIAMoAjwhByADKAI4IQQgAygCwAEEQCADQbgBaiADQfQBahBxIAkgAykCuAE3AgAgCUEIaiADQcABaigCADYCACADIAc2AqABIAMgBDYCnAEMBgsgCSADKQL0ATcCACAJQQhqIANB/AFqKAIANgIAIAMgBzYCoAEgAyAENgKcAQwECyAFQdwARiEEIAMoAnAhBQwACwALAAsgAyAKNgKoASADIAc2AqQBIAMgCzYCoAEgAyAENgKcASADIAMoArABNgKsAQwDCyADQbgBahCkAQsgAygCpAELQQAQ9AEgAygCnAEhBEGAgICAeEYNAQsgBCEBIAMoAqABIQIgA0GQAWogCRCUAQwBCwsgBEUNAQsgA0GQAWoQpQFBgICAgHghAkEIIQUMAgsgAykClAEhDSADKAKQASEEQQAQ9AELQQghBSAEQYCAgIB4RgRAIAEhBEGAgICAeCECDAELIAMgBDYCgAIgAyANNwKEAiANQv////8PWARAIANBgAJqEKUBQQAhBEGAgICAeCECDAELIANBADYCgAEgA0EANgJwIAMgBDYCaCADIA2nIgQ2AmQgAyAENgJgIAMgBCANQiCIp0EMbGo2AmwgA0GcAWogA0HgAGoiBRBRAkAgAygCnAFBBkcEQCADQYACaiIIIAUQbyADQQhqQQQgAygCgAJBAWoiBEF/IAQbIgQgBEEETRtBBEEQQcSrwAAQbSADQaQBaikCACENIAMoAgghBCADKAIMIgsgAykCnAE3AgAgC0EIaiANNwIAIANB/AFqIgdBATYCACADIAs2AvgBIAMgBDYC9AEgCCAFQTD8CgAAIANB9AFqIAgQYiAAQQhqIgRBCGogBygCADYCACAEIAMpAvQBNwIADAELIABBADYCECAAQoCAgIDAADcCCCADQeAAahCAAQtBBCEFIAEhBAsgACAENgIAIAAgBWogAjYCACADQbACaiQAC6MOAg9/An4jAEHQAmsiAyQAIAMgAjYCjAIgAyABNgKIAiADQSk2AoQCIANB0LnAADYCgAIgA0GB0gA7AfwBIANCqYCAgBA3AvQBIANBgdAAOwHwASADQqiAgIAQNwLoASADQdwAaiIGIANB6AFqIAEgAhBNIAMoAlwhBAJAAkACQAJAAkACQCADKAJkQYCAxABGDQAgBiAEIAMoAmAQMiADKAJgIQQgAygCXCIFRQ0AIAYgBSAEECIgAygCXCEEIAMoAmQiBUGAgICAeEYNACADKAJgIQcgAyADKQJoIhI3AowBIAMgBTYCiAEgBiADQfQBaiAEIAcQQSADKAJcIQQgAygCZEGAgMQARw0BIANBiAFqEOgBCyAEDQIgA0HoAWoiBiABIAIQGSADKALoASEEIAMoAvABIgJBgICAgHhGDQIgAygC7AEhASADIAMpAvQBIhI3AmAgAyACNgJcIAYgBCABEBEgAygC6AEhBCADKALwASIBQYCAgIB4RwRAIAMoAuwBIQcgAyADKQL0ASITNwLsASADIAE2AugBIBNC/////w9WDQIgBhCeAUEAIQQLIANB3ABqEJ8BDAILIAMoAmAhB0EMEO0BIgIgEjcCBCACIAU2AgAgAq0hEkGAgICAeCECCyADIBM3AvgBIAMgATYC9AEgAyASNwLsASADIAI2AugBIANB3ABqIAQgBxA2IAMoAmAhBCADKAJcIghFBEAgA0HoAWoQuAEMAQtBBCEKIANBnAFqIANB7AFqIgFBEGooAgA2AgAgA0GUAWogAUEIaikCADcCACADIAEpAgA3AowBIAMgAjYCiAEgA0EANgK0AiADQoCAgIDAADcCrAIgA0HkAGohDyADQeAAaiEJIANB9AFqIQxBBCEGIAQhBSAIIQECfwJAA0AgBQRAIANB6AFqIhAgASAFEBYgAygC6AEhAgJAIAMoAvABIg5BA0cEQCADKALsASEHIAlBEGoiDSAMQRBqKAIANgIAIAlBCGoiESAMQQhqKQIANwIAIAkgDCkCADcCACADIA42AlwgECACIAcQNiADKALsASECIAMoAugBIgcNASAPEOEBCyACRQ0DIANBrAJqEJoBIAIMBAsgA0HIAmoiBSANKAIANgIAIANBwAJqIg0gESkCADcDACADIAkpAgA3A7gCIAMoAqwCIAtGBEAgA0GsAmoQlgEgAygCsAIhBgsgBiAKaiIBQQRrIA42AgAgASADKQO4AjcCACABQQhqIA0pAwA3AgAgAUEQaiAFKAIANgIAIAMgC0EBaiILNgK0AiAKQRhqIQogAiEFIAchAQwBCwtBACEFCyADKQKwAiESIAEgAygCrAIiAkGAgICAeEYNABogAyACNgLoASADIBI3AuwBIBJC/////x9YBEBBAyEEIBJCgICAgBBaBEAgAyASQiCIp0EBayICNgLwASADQagBaiASpyACQRhsaiICQQxqKQIANwMAIANBsAFqIAJBFGooAgA2AgAgAyACKQIENwOgASACKAIAIQQLIANB3AFqIANBmAFqKQIANwIAIANB1AFqIANBkAFqKQIANwIAIANBwAFqIANBqAFqKQMANwMAIANByAFqIANBsAFqKAIANgIAIAMgAykCiAE3AswBIAMgAykDoAE3A7gBIANB6AFqEJoBIARBBEcNAyABIQQMAgtBFBDtASIBIAQ2AhAgASAINgIMIAFBLzYCCCABQeevwAA2AgQgAUGAgICAeDYCACADQegBahCaASABCyEEIANBiAFqELgBCyAAQQU2AgggACAENgIADAELIANBCGogA0G4AWoiBkEs/AoAACADIAQ2AgQgA0GIAWogASAFEEUgAygCiAEhAgJAAkACQCADLQCQASIHQQJGBEAgAg0DIAMoAgghAiADQTRqIAZBBHJBKPwKAABBABD0AQwBCyADQegBaiACIAMoAowBIgQQDyADKALoASEBIAMoAvABIghBBUYEQCABDQJBFBDtASIBIAQ2AhAgASACNgIMIAFBLTYCCCABQbqvwAA2AgQgAUGAgICAeDYCACABIQIMAwsgAygC7AEhBSADQdwAaiADQfQBakEs/AoAAEHkABDtASICIANBBGpBMPwKAAAgAiAINgIwIAJBNGogA0HcAGpBLPwKAAAgAiAHOgBgQQQhBAsgACACNgIMIAAgBDYCCCAAIAU2AgQgACABNgIAIABBEGogA0E0akEo/AoAAAwCCyADQaACaiICIAEoAghBL2oQpwEgAkG6r8AAQeevwAAQrAEgAkHkrMAAQeaswAAQrAEgAiABKAIEIAEoAggQ9QEgASkCDCESQRQQ7QEiAiASNwIMIAJBCGogA0GoAmooAgA2AgAgAiADKQKgAjcCACABENUBCyAAQQU2AgggACACNgIAIANBBGoQvwELIANB0AJqJAALzwoCBn8CfiMAQYACayIDJAAgA0H4AGoiByABIAIQGSADKAJ4IQQCQAJAAkACQAJAAkACfwJAAkACQAJAAkAgAygCgAEiBUGAgICAeEcEQCADKAJ8IQYgAyADKQKEASIJNwJ8IAMgBTYCeCAJQv////8PVg0BIAcQnwFBACEECyADQQg2AswBIAMgBDYCxAEMAQsgAyAFNgJAIAMgCTcCRCADQfgAaiAEIAYQESADKAJ4IQQCQAJAIAMoAoABIgVBgICAgHhGBEAgA0EINgLMASADIAQ2AsQBDAELIAMoAnwhBiADIAMpAoQBIgo3AnwgAyAFNgJ4IApCgICAgBBUDQEgA0EINgLMAUEAIQQgA0EANgLEASADQfgAahCeAQsgA0FAaxCfAQwB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BwwDCyAAQQM2AgggACAENgIADAMLDAELQQAhBwsgAygCLCEIIANBgcwAOwEwIANCpoCAgBA3AiggA0EEaiADQShqIAQgCBBNQYCAxAAhBiADKAIEIQECfyADQTxqIAMoAgwiDEGAgMQARg0AGiADQQRqIAEgAygCCBBYIAMoAgQiAUUEQCADKAIIIQEgA0E8agwBCyADIAw2AjwgAygCDCEGIAMoAgghCSADQThqCyAGNgIAIAMCfiADKAI8QYCAxABGBEACQCABDQAgA0EEaiIGIAQgCBA2IAMoAgghASADKAIEIgRFDQAgBiAEIAEQJSADKAIEIQFBgYCAgHggAygCDCIEIARBgYCAgHhMGyIEQYGAgIB4Rg0AIAMoAgghCSADKQIQDAILIABBAzYCCCAAIAE2AgAMAgtBgICAgHghBCADNQI4CyINNwIIIAMgBDYCBCAEQYCAgIB4RiANQv////8PVnJFBEBBFBDtASIBIAI2AhAgASAFNgIMIAFBFzYCCCABQciwwAA2AgQgAUGAgICAeDYCACAAQQM2AgggACABNgIAIANBBGoQ4QEMAQsgACADKQIENwIQIAAgBzoAHCAAIAo2AgwgACALNgIIIAAgCTYCBCAAIAE2AgAgAEEYaiADQQxqKAIANgIACyADQUBrJAAL5AYBB38jAEHAAWsiAyQAIANC4ICAgBA3AoABIANBgcABOwGIASADQThqIANBgAFqIAEgAhBNIAMoAjghBAJAIAMoAkBBgIDEAEYEQCAAQYCAgIB4NgIIIAAgBDYCAAwBCyADKAI8IQYgA0EANgI0IAMgBDYCLCADIAQgBmo2AjADQAJAIANBIGogA0EsahByAkAgAygCJCIHQeAARwRAIAdBgIDEAEcNAUEUEO0BIgQgAjYCECAEIAE2AgwgBEEaNgIIIARBnLjAADYCBCAEQYCAgIB4NgIAIABBgICAgHg2AgggACAENgIADAQLIAVBAXFFDQELIAdB3ABGIQUMAQsLIANBGGogBCAGIAMoAiAiB0G4uMAAEIwBIAMoAhwhAiADKAIYIQFBACEFIANBEGpBAEEBQQFB1KvAABBtIANBADYCeCADIAMpAxA3AnAgA0GAAWogASACQci4wABBAhASA0AgA0E4aiADQYABahAtIAMoAjhBAUdFBEAgASAFaiEIIAMoAkAhBSAD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CyAEDQQLIAAgAykCDDcCCCAAIAI2AgQgACABNgIAIABBEGogA0EUaigCADYCAAwECyADQShqIgIgC0EQaigCADYCACADQSBqIgggC0EIaikCADcDACADIAspAgA3AxggAygCDCAJRgRAIANBDGoQlgEgAygCECEMCyAKIAxqIgFBBGsgBjYCACABIAMpAxg3AgAgAUEIaiAIKQMANwIAIAFBEGogAigCADYCACADIAlBAWoiCTYCFCAKQRhqIQogBCECIAUhAQwBCwsgACADKQIMNwIIIABBADYCBCAAIAE2AgAgAEEQaiADQRRqKAIANgIADAELIABBgICAgHg2AgggACAENgIAIANBDGoQnwELIANB4ABqJAAL/gUBBX8gAEEIayIBIABBBGsoAgAiA0F4cSIAaiECAkACQCADQQFxDQAgA0ECcUUNASABKAIAIgMgAGohACABIANrIgFBqMfAACgCAEYEQCACKAIEQQNxQQNHDQFBoMfAACAANgIAIAIgAigCBEF+cTYCBCABIABBAXI2AgQgAiAANgIADwsgASADEDALAkACQAJAAkACQCACKAIEIgNBAnFFBEAgAkGsx8AAKAIARg0CIAJBqMfAACgCAEYNAyACIANBeHEiAhAwIAEgACACaiIAQQFyNgIEIAAgAWogADYCACABQajHwAAoAgBHDQFBoMfAACAANgIADwsgAiADQX5xNgIEIAEgAEEBcjYCBCAAIAFqIAA2AgALIABBgAJJDQIgASAAEDdBACEBQcDHwABBwMfAACgCAEEBayIANgIAIAANBEGIxcAAKAIAIgAEQANAIAFBAWohASAAKAIIIgANAAsLQcDHwABB/x8gASABQf8fTRs2AgAPC0Gsx8AAIAE2AgBBpMfAAEGkx8AAKAIAIABqIgA2AgAgASAAQQFyNgIEQajHwAAoAgAgAUYEQEGgx8AAQQA2AgBBqMfAAEEANgIACyAAQbjHwAAoAgAiA00NA0Gsx8AAKAIAIgJFDQNBACEAQaTHwAAoAgAiBEEpSQ0CQYDFwAAhAQNAIAIgASgCACIFTwRAIAIgBSABKAIEakkNBAsgASgCCCEBDAALAAtBqMfAACABNgIAQaDHwABBoMfAACgCACAAaiIANgIAIAEgAEEBcjYCBCAAIAFqIAA2AgAPCyAAQfgBcUGQxcAAaiECAn9BmMfAACgCACIDQQEgAEEDdnQiAHFFBEBBmMfAACAAIANyNgIAIAIMAQsgAigCCAshACACIAE2AgggACABNgIMIAEgAjYCDCABIAA2AggPC0GIxcAAKAIAIgEEQANAIABBAWohACABKAIIIgENAAsLQcDHwABB/x8gACAAQf8fTRs2AgAgAyAETw0AQbjHwABBfzYCAAsL1QUBBH8jAEHwAGsiBSQAIAEoAgAhBgJAIAQoAgBBBEYEQCAFIAY2AlwgBUEMNgJYIAVBv43AADYCVCAFQQQ2AlAgBUHTi8AANgJMIAVBDDYCSCAFQaaNwAA2AkQgBUENNgJAIAVBso3AADYCPCAEKAIEIQcgBUHoAGogBUE8ahB/IAUoAmwhBiAFKAJoIgRFBEBBASEHIAYhBAwCCyAFIAY2AmQgBSAENgJgIAUQ7wEiCDYCbCAFIAQ2AmggBUEgaiAFQegAaiAHQRhqEB0CQAJAAn8gBSgCIEEBcQRAIAUoAiQMAQsgBUEYaiAFQegAaiAHECYgBSgCGEEBcUUNASAFKAIcCyEEIAgQ6QEMAQsgBkHzjMAAQQcQHCAIEM8BAn8gBy0AYEEBRgRAIAVBCGpBvovAAEEMENkBIAUoAgghCCAFKAIMDAELIAVBEGpBuIvAAEEGENkBIAUoAhAhCCAFKAIUCyEEIAhBAXENACAGQYeMwABBAhAcIAQQzwEgBSAFQeAAakH6jMAAQQQgB0EwahAbIAUoAgBBAXFFBEBBACEHIAYhBAwDCyAFKAIEIQQLIAYQ6QFBASEHDAELIAUgBjYCXCAFQQc2AlggBUHWjMAANgJUIAVBBDYCUCAFQdOLwAA2AkwgBUEHNgJIIAVB3YvAADYCRCAFQQ02AkAgBUGyjcAANgI8IAVB6ABqIAVBPGoQfyAFKAJsIQYgBSgCaCIHRQRAQQEhByAGIQQMAQsgBSAGNgJsIAUgBzYCaCAFQTBqIAVB6ABqIARBGGoQHUEBIQcCfyAFKAIwQQFxBEAgBSgCNAwBCyAFQShqIAVB6ABqIAQQJiAFKAIoQQFxRQRAQQAhByAGIQQMAgsgBSgCLAshBCAGEOkBC0EBIQYgB0UEQCACIAMQHCECIAEoAgQgAiAEEM8BQQAhBgsgACAENgIEIAAgBjYCACAFQfAAaiQAC48PAhN/BH4jAEEgayILJAACQEHYw8AAKAIAIgINAEHYw8AAQgE3AgBB5MPAACgCACEJQeDDwAAoAgAhBkHgw8AAQYiAwAApAgA3AgBB7MPAACgCACEDQejDwABBkIDAACkCADcCACACRSAJRXINAAJAIANFDQAgBkEIaiEEIAYpAwBCf4VCgIGChIiQoMCAf4MhFkEBIQUgBiECA0AgBUUNASAWIRUDQCAVUARAIAJB4ABrIQIgBCkDAEJ/hUKAgYKEiJCgwIB/gyEVIARBCGohBAwBCwsgFUIBfSAVgyEWIANBAWsiAyEFIAIgFXqnQQN2QXRsakEEaygCACIHQYQBSQ0AIAcQgwEMAAsACyALQRRqQQxBCCAJQQFqEGkgCygCFBogBiALKAIcayALKAIYENgBC0Hcw8AAKAIARQRAQdzDwABBfzYCAEHkw8AAKAIAIgYgAHEhAiAArSIXQhmIQoGChIiQoMCAAX4hGEHgw8AAKAIAIQNBACEFA0AgAiADaikAACIWIBiFIhVCf4UgFUKBgoSIkKDAgAF9g0KAgYKEiJCgwIB/gyEVAkACQANAIBVQRQRAIAAgAyAVeqdBA3YgAmogBnFBdGxqIgRBDGsoAgBGBEAgBEEIaygCACABRg0DCyAVQgF9IBWDIRUMAQsLIBYgFkIBhoNCgIGChIiQoMCAf4NQDQFB6MPAACgCAEUEQEEAIQkjAEEwayIDJAACQAJAAkBB7MPAACgCACIGQX9GDQBB5MPAACgCACIHIAdBAWoiCkEDdiICQQdsIAdBCEkbIg9BAXYgBk0EQCADQQhqQQxBCAJ/IA8gBiAGIA9JGyICQQ5PBEAgAkH+////AUsNA0F/IAJBA3RBCGpBB25BAWtndkEBagwBC0EEQQhBECACQQdJGyACQQNJGwsiBBBpIAMoAggiAkUNASADKAIQIQUgAygCDCIHBEAgByACEMsBIQILIAJFDQIgAiAFaiEHIARBCGoiAgRAIAdB/wEgAvwLAAsgA0EANgIgIAMgBEEBayIKNgIYIAMgBzYCFCADQoyAgICAATcCDCADQfDDwAA2AgggAyAKIARBA3ZBB2wgBEEJSRsiDzYCHCAHQQxrIQxB4MPAACgCACIEKQMAQn+FQoCBgoSIkKDAgH+DIRUgA0EUaiEIIAQhAiAGIQUDQCAFBEADQCAVUARAIAlBCGohCSACQQhqIgIpAwBCf4VCgIGChIiQoMCAf4MhFQwBCwsgAyAHIAogBCAVeqdBA3YgCWoiDUF0bGoiBEEMaygCACIOIARBCGsoAgAgDhutEI0BIAwgAygCAEF0bGoiDkHgw8AAKAIAIgQgDUF0bGpBDGsiDSkAADcAACAOQQhqIA1BCGooAAA2AAAgBUEBayEFIBVCAX0gFYMhFQwBCwsgAyAGNgIgIAMgDyAGazYCHEHgw8AAIAhBBBCgASADKAIYIgJFDQMgA0EkaiADKAIMIAMoAhAgAkEBahBpIAMoAiQaIAMoAhQgAygCLGsgAygCKBDYAQwDCyACIApBB3FBAEdqIQJB4MPAACgCACIFIQkDQCACBEAgCSAJKQMAIhVCf4VCB4hCgYKEiJCgwIABgyAVQv/+/fv379+//wCEfDcDACAJQQhqIQkgAkEBayECDAEFAkAgCkEITwRAIAUgCmogBSkAADcAAAwBCyAKRQ0AIAVBCGogBSAK/AoAAAsgBUEIaiEJIAVBDGshDkEAIQIDQAJAIAogAiIESwRAIAIgAiAKSWohAiAEIAVqIhEtAABBgAFHDQIgDiAEQXRsIghqIQwgBSAIaiIIQQhrIRIgCEEMayETA0AgBCATKAIAIgggEigCACAIGyIIIAdxIhBrIAUgByAIrRBuIg0gEGtzIAdxQQhJDQIgBSANaiIQLQAAIBAgCEEZdiIIOgAAIAkgDUEIayAHcWogCDoAACAOIA1BdGxqIQhB/wFGBEAgEUH/AToAACAJIARBCGsgB3FqQf8BOgAAIAhBCGogDEEIaigAADYAACAIIAwpAAA3AAAMBAUgDCAIQQMQoAEMAQsACwALQejDwAAgDyAGazYCAAwGCyARIAhBGXYiDDoAACAJIARBCGsgB3FqIAw6AAAMAAsACwALAAsjAEEgayIAJAAgAEEANgIYIABBATYCDCAAQay7wAA2AgggAEIENwIQIABBCGpBtLvAABC5AQALAAsgA0EwaiQACyAAIAEQ1wEhAiALQQhqQeDDwAAoAgAiBkHkw8AAKAIAIBcQjQFB7MPAAEHsw8AAKAIAQQFqNgIAQejDwABB6MPAACgCACALLQAMQQFxazYCACAGIAsoAghBdGxqIgRBBGsgAjYCACAEQQhrIAE2AgAgBEEMayAANgIACyAEQQRrKAIAIQAQKiIBIAAlASYBQdzDwABB3MPAACgCAEEBajYCACALQSBqJAAgAQ8LIAIgBUEIaiIFaiAGcSECDAALAAsjAEEwayIAJAAgAEEBNgIMIABBqL7AADYCCCAAQgE3AhQgACAAQS9qrUKAgICAEIQ3AyAgACAAQSBqNgIQIABBCGpBjIvAABC5AQALiQUBCH8jAEHQAGsiAyQAIAEoAgAhBAJAAkAgAigCAEGAgICAeEYEQCADIAQ2AkQgA0EINgJAIANBno3AADYCPCADQQQ2AjggA0HTi8AANgI0IANBCDYCMCADQZaNwAA2AiwgA0EMNgIoIANB/ozAADYCJCACKAIEIQRBASEFIANByABqIgYgA0EkahB/IAMoAkwhAiADKAJIIgdFDQEgAyACNgJMIAMgBzYCSCADIAYgBBBGIAMoAgBBAXFFBEBBACEFDAILIAMoAgQhBCACEOkBDAILIAMgBDYCRCADQQY2AkAgA0GQjcAANgI8IANBBDYCOCADQdOLwAA2AjQgA0EGNgIwIANBio3AADYCLCADQQw2AiggA0H+jMAANgIkIANByABqIANBJGoQfyADKAJMIQcgAygCSCIKRQRAQQEhBSAHIQQMAgsgAyAHNgIgIAMgCjYCHCACKAIIQRhsIQYgAigCBCEEEPABIQgCQAJAA0AgBkUNASADEO8BIgk2AkwgAyAKNgJIIAlByovAAEEEIARBBGooAgAgBEEIaigCABCuASADQRBqIANByABqIARBDGoQfiADKAIQQQFxRQRAIAggBSAJEOcBIAZBGGshBiAFQQFqIQUgBEEYaiEEDAELCyADKAIUIQQgCRDpASAIEOkBDAELIAdBy43AAEEHEBwgCBDPASADQQhqIANBHGpB0o3AAEEEIAJBDGoQWiADKAIIQQFxRQRAQQAhBSAHIQQMAwsgAygCDCEECyAHEOkBQQEhBQwBCyACIQQLQQEhBiAFRQRAQeSLwABBBRAcIQIgASgCBCACIAQQzwFBACEGCyAAIAQ2AgQgACAGNgIAIANB0ABqJAALqwQBDH8gAUEBayEOIAAoAgQhCiAAKAIAIQsgACgCCCEMAkADQCAFDQECfwJAIAIgA0kNAANAIAEgA2ohBQJAAkACQCACIANrIgdBB00EQCACIANHDQEgAiEDDAULAkAgBUEDakF8cSIGIAVrIgQEQEEAIQADQCAAIAVqLQAAQQpGDQUgBCAAQQFqIgBHDQALIAQgB0EIayIATQ0BDAMLIAdBCGshAAsDQEGAgoQIIAYoAgAiCUGKlKjQAHNrIAlyQYCChAggBkEEaigCACIJQYqUqNAAc2sgCXJxQYCBgoR4cUGAgYKEeEcNAiAGQQhqIQYgBEEIaiIEIABNDQALDAELQQAhAANAIAAgBWotAABBCkYNAiAHIABBAWoiAEcNAAsgAiEDDAMLIAQgB0YEQCACIQMMAwsgBCAFaiEGIAIgBGsgA2shB0EAIQACQANAIAAgBmotAABBCkYNASAHIABBAWoiAEcNAAsgAiEDDAMLIAAgBGohAAsgACADaiIEQQFqIQMCQCACIARNDQAgACAFai0AAEEKRw0AQQAhBSADIgQMAwsgAiADTw0ACwsgAiAIRg0CQQEhBSAIIQQgAgshAAJAIAwtAAAEQCALQbiZwABBBCAKKAIMEQQADQELQQAhBiAAIAhHBEAgACAOai0AAEEKRiEGCyAAIAhrIQAgASAIaiEHIAwgBjoAACAEIQggCyAHIAAgCigCDBEEAEUNAQsLQQEhDQsgDQuRBAICfgJ/IwBBIGsiBiQAIAACfwJAAkACQAJAAkAgAg4CAAECCyAAQQA6AAFBAQwECyABLQAAIgVBK2sOAwIBAgELIAEtAAAhBQsCQAJAAkACQAJAAkACQAJAIAVB/wFxQStrDgMAAgECCyACQQFrIQUgAUEBaiEBIAJBEEsNAgwFCyACQQFrIQUgAUEBaiEBIAJBEU8EQANAIAVFDQcgBkEQaiADIANCP4cQayABLQAAQTBrIgJBCUsNCCAGKQMYIAYpAxAiA0I/h1INBCABQQFqIQEgBUEBayEFIAKtIgRCAFIgAyADIAR9IgNVc0UNAAsgAEEDOgABQQEMCAsDQCAFRQ0GIAEtAABBMGsiAkEJSw0HIAFBAWohASAFQQFrIQUgA0IKfiACrX0hAwwACwALIAIiBUEQSQ0DCwwBCyAAQQM6AAFBAQwECwJAA0AgBUUNAyAGIAMgA0I/hxBrIAEtAABBMGsiAkEJSw0EIAYpAwggBikDACIDQj+HUg0BIAFBAWohASAFQQFrIQUgAq0iBEIAVCADIAMgBHwiA1VzRQ0ACyAAQQI6AAFBAQwECyAAQQI6AAFBAQwDCwNAIAVFDQEgAS0AAEEwayICQQlLDQIgAUEBaiEBIAVBAWshBSACrSADQgp+fCEDDAALAAsgACADNwMIQQAMAQsgAEEBOgABQQELOgAAIAZBIGokAAu6BAEIfyMAQRBrIgMkACADIAE2AgQgAyAANgIAIANCoICAgA43AggCfwJAAkACQCACKAIQIgkEQCACKAIUIgANAQwCCyACKAIMIgBFDQEgAigCCCIBIABBA3RqIQQgAEEBa0H/////AXFBAWohBiACKAIAIQADQAJAIABBBGooAgAiBUUNACADKAIAIAAoAgAgBSADKAIEKAIMEQQARQ0AQQEMBQtBASABKAIAIAMgAUEEaigCABECAA0EGiAAQQhqIQAgBCABQQhqIgFHDQALDAILIABBGGwhCiAAQQFrQf////8BcUEBaiEGIAIoAgghBCACKAIAIQADQAJAIABBBGooAgAiAUUNACADKAIAIAAoAgAgASADKAIEKAIMEQQARQ0AQQEMBAtBACEHQQAhCAJAAkACQCAFIAlqIgFBCGovAQBBAWsOAgECAAsgAUEKai8BACEIDAELIAQgAUEMaigCAEEDdGovAQQhCAsCQAJAAkAgAS8BAEEBaw4CAQIACyABQQJqLwEAIQcMAQsgBCABQQRqKAIAQQN0ai8BBCEHCyADIAc7AQ4gAyAIOwEMIAMgAUEUaigCADYCCEEBIAQgAUEQaigCAEEDdGoiASgCACADIAEoAgQRAgANAxogAEEIaiEAIAVBGGoiBSAKRw0ACwwBCwsCQCAGIAIoAgRPDQAgAygCACACKAIAIAZBA3RqIgAoAgAgACgCBCADKAIEKAIMEQQARQ0AQQEMAQtBAAsgA0EQaiQAC64EAgd/AX4gACgCCCIGQYCAgAFxIgpBFXYgBGohCQJAIAZBgICABHFFBEBBACEBDAELIAIEQCABIQUgAiEIA0AgByAFLAAAQb9/SmohByAFQQFqIQUgCEEBayIIDQALCyAHIAlqIQkLQStBgIDEACAKGyEKAkAgAC8BDCIIIAlLBEACQAJAIAZBgICACHFFBEAgCCAJayEJQQAhBUEAIQgCQAJAAkAgBkEddkEDcUEBaw4DAAEAAgsgCSEIDAELIAlB/v8DcUEBdiEICyAGQf///wBxIQsgACgCBCEGIAAoAgAhAANAIAVB//8DcSAIQf//A3FPDQJBASEHIAVBAWohBSAAIAsgBigCEBECAEUNAAsMBAsgACAAKQIIIgynQYCAgP95cUGwgICAAnI2AghBASEHIAAoAgAiBiAAKAIEIgsgCiABIAIQqwENA0EAIQUgCCAJa0H//wNxIQEDQCAFQf//A3EgAU8NAiAFQQFqIQUgBkEwIAsoAhARAgBFDQALDAMLQQEhByAAIAYgCiABIAIQqwENAiAAIAMgBCAGKAIMEQQADQIgCSAIa0H//wNxIQFBACEFA0AgASAFQf//A3FNBEBBAA8LIAVBAWohBSAAIAsgBigCEBECAEUNAAsMAgsgBiADIAQgCygCDBEEAA0BIAAgDDcCCEEADwtBASEHIAAoAgAiBSAAKAIEIgAgCiABIAIQqwENACAFIAMgBCAAKAIMEQQAIQcLIAcLjwQBBn8jAEGAAWsiAyQAIANBxABqIAEgAhAyIAMoAkghAgJAIAMoAkQiAUUEQCAAQYCAgIB4NgIIIAAgAjYCAAwBCyADQQA2AgwgA0KAgICAwAA3AgQgA0HMAGohCANAAkAgAkUNACADQcQAaiABIAIQECADKAJEIQQCQAJAAkACQAJAIAMoAkxBCEYEQCAERQ0EIABBgICAgHg2AgggACAENgIADAELIAMoAkghASADQRBqIAhBNPwKAAAgA0HEAGogBCABEDYgAygCSCECAkAgAygCRCIERQRAIABBgICAgHg2AgggACACNgIADAELIANBxABqIAQgAhAjIAMoAkQhASADLQBMIgdBAkcNAyABRQ0CIABBgICAgHg2AgggACABNgIACyADQRBqEI8BCyADQQRqEOgBDAYLQQAhBUEAEPQBQQAhByAEIQEMAgsgAy0ATSEFIAMoAkghAgwBC0EAEPQBIAIhBgwBCyAHQQFxIgQgAnIEQCADIAVBAXE6AHkgAyAEOgB4IANBxABqIgQgA0EQakE0/AoAACADQQRqIAQQogEMAgsgA0EAOgB4IAMgBUEBcSIEOgB5IANBxABqIgUgA0EQakE0/AoAACADQQRqIAUQogEgBA0BCwsgACADKQIENwIIIAAgBjYCBCAAIAE2AgAgAEEQaiADQQxqKAIANgIACyADQYABaiQAC74EAQZ/IwBB0ABrIgMkACADEEggA0GBzAA7ASggA0KmgICAEDcDICADQThqIgYgA0EgaiABIAIQTSADKAI4IQQCQAJ/AkACQCADKAJAIgdBgIDEAEcE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CjcDACAFIAk3AwggBSgCAEEBcUUNAQwCCyAEIAEoAhQgASgCGBBbDQELQYCAxAAhBCAHIQYgAiEHIAMhCAsgACAINgIEIAAgBzYCACAGIAQQ7gEgBUEgaiQAC7cBAgJ/AX4jAEEgayIDJAAgA0EMaiABIAIQJSADKAIMIQICQCADKAIUIgFBgICAgHhGBEAgAEGAgICAeDYCCAwBCyADKAIQIQQgAyADKQIYIgU3AhAgAyABNgIMIABBCGohASAFQoCAgIAQWgRAIAEgAykCDDcCACAAIAQ2AgQgAUEIaiADQRRqKAIANgIADAELIAFBgICAgHg2AgAgA0EMahCkAUEAIQILIAAgAjYCACADQSBqJAALmQEBA38jAEHgAGsiAyQAAn8CQCACQYABTwRAIANBADYCECADQQhqIAIgA0EQahCVASADKAIIIQIgAygCDCIEIAFPDQEgBEEBRwRAIANBIGoiBSAAIAEgAiAEEBIgA0EUaiAFEC0gAygCFAwDCyACLQAAIAAgARAzDAILIAIgACABEDMMAQsgAiAEIAAgARDAAQsgA0HgAGokAAu2AQIEfwF+IwBBIGsiAyQAIANBDGoiBSABIAIQDiADKAIMIQQCQCADKAIUIgZBgICAgHhGBEAgBEUEQCADQQE6AAwgACAFIAEgAhAMDAILIABBgICAgHg2AgggACAENgIADAELIAMoAhAhAiADKQIYIQdBEBDtASIBIAc3AgggASAGNgIEIAFBBDYCACAAQQE2AhAgACABNgIMIABBATYCCCAAIAI2AgQgACAENgIACyADQSBqJAALsQEBA38jAEEQayIEJAAgBCABNgIIIAQgASACajYCDAJAAkAgBEEIahCmASIDQYCAxABGDQAgAxBhDQAgA0H8AEYgA0EmayIFQRVNQQBBASAFdEGNgIABcRtyDQBBFBDtASIDIAI2AhAgAyABNgIMIANBFTYCCCADQfm6wAA2AgQgA0GAgICAeDYCACAAIAM2AgQgAEEANgIADAELIAAgAjYCBCAAIAE2AgALIARBEGokAAuZAQECfwJAIABBCWsiAUEYTwRAQQAhASAAQYABSQ0BAkAgAEEIdiICBEAgAkEwRwRAIAJBIEYNAiACQRZHDQQgAEGALUYhAQwECyAAQYDgAEYhAQwDCyAAQf8BcUGGvMAAai0AACEBDAILIABB/wFxQYa8wABqLQAAQQJxQQF2IQEMAQtBAEGfgIAEIAF2QQFxayEBCyABQQFxC5gBAQN/IwBBIGsiAiQAA0ACQCACQQRqIAEQUSACKAIEQQZGDQAgACgCCCIDIAAoAgBGBEAgAkEUaiABEG8gACACKAIUQQFqIgRBfyAEGxC8AQsgACADQQFqNgIIIAAoAgQgA0EEdGoiAyACKQIENwIAIANBCGogAkEMaikCADcCAAwBCwsgAkEEahDgASABEIABIAJBIGokAAucAQECfyMAQRBrIgMkAAJAIAEoAgAEQAJAIAEoAgQiAiABKAIMRwRAIAEgAkEQajYCBCADQQhqIAJBDGooAgA2AgAgAyACKQIENwMAIAIoAgAiAkEGRw0BCyABEOwBIAFBADYCAEEGIQILIAAgAjYCACAAIAMpAwA3AgQgAEEMaiADQQhqKAIANgIADAELIABBBjYCAAsgA0EQaiQAC48BAQF/IwBBIGsiAiQAAn8gACgCAEGAgICAeEcEQCABKAIAIAAoAgQgACgCCCABKAIEKAIMEQQADAELIAJBEGogACgCDCgCACIAQQhqKQIANwMAIAJBGGogAEEQaikCADcDACACIAApAgA3AwggASgCBCEAIAIoAgwaIAEoAgAgACACQQhqECALIAJBIGokAAuPAQECfyMAQRBrIgMkACADIAE2AgggAyABIAJqNgIMAkAgA0EIahCmASIEQYCAxABHBEAgAyABIAICf0EBIARBgAFJDQAaQQIgBEGAEEkNABpBA0EEIARBgIAESRsLQbitwAAQhwEgACADKQMANwIADAELIABBADYCAEGAgMQAIQQLIAAgBDYCCCADQRBqJAALjgEBAn8jAEEQayIEJAACfyADKAIEBEAgAygCCCIFRQRAIARBCGogASACEMIBIAQoAgghAyAEKAIMDAILIAMoAgAgBSABIAIQFSEDIAIMAQsgBCABIAIQwgEgBCgCACEDIAQoAgQLIQUgACADIAEgAxs2AgQgACADRTYCACAAIAUgAiADGzYCCCAEQRBqJAALmgEBAn8jAEEQayIEJAAgBCABKAIgIAEoAiQgAiADEHsCQAJAAkAgBCgCACICRQRAIAQoAgQhAQwBCyAEKAIMIQMgBCgCCCEFIAQgASACIAQoAgQQcyAEKAIEIQEgBCgCACICDQELIABBADYCACAAIAE2AgQMAQsgACADNgIMIAAgBTYCCCAAIAE2AgQgACACNgIACyAEQRBqJAALkAEBA38jAEEgayIGJAACQCABBEAgBkEUaiIHIAEgAyAEIAUgAigCEBEGACAAIAYoAhwiASAGKAIUSQR/IAZBCGogByABQQRBBBBHIAYoAggiAUGBgICAeEcNAiAGKAIcBSABCzYCBCAAIAYoAhg2AgAgBkEgaiQADwsQiQIACyAGKAIMIQggAUHEu8AAENsBAAuAAQIBfgF/AkACQCABrSADrX4iBEIgiKcNACAEpyIBIAJBAWtqIgUgAUkNACAFQQAgAmtxIgEgA0EIamoiAyABSQ0BQYCAgIB4IAJrIANPBEAgACABNgIIIAAgAzYCBCAAIAI2AgAPCyAAQQA2AgAPCyAAQQA2AgAPCyAAQQA2AgALkQEBAX8jAEFAaiIDJAAgA0IANwM4IANBOGogACgCACUBEAYgAyADKAI8IgA2AjQgAyADKAI4NgIwIAMgADYCLCADQQg2AiggA0ECNgIQIANBnMPAADYCDCADQgE3AhggAyADQSxqNgIkIAMgA0EkajYCFCABIAIgA0EMahAgIAMoAiwgAygCMBD7ASADQUBrJAALTwEDfiAAIAFC/////w+DIgNCCn4iBEIAIgMgAUIgiEIKfnwiAUIghnwiBTcDACAAIAQgBVatIAEgA1StQiCGIAFCIIiEfCACQgp+fDcDCAt8AQF/IwBBQGoiBSQAIAUgATYCDCAFIAA2AgggBSADNgIUIAUgAjYCECAFQQI2AhwgBUGQmcAANgIYIAVCAjcCJCAFIAVBEGqtQoCAgIDgAIQ3AzggBSAFQQhqrUKAgICA8ACENwMwIAUgBUEwajYCICAFQRhqIAQQuQEAC2gCAX8BfgJAAkAgAiADakEBa0EAIAJrca0gAa1+IgZCIIhQRQ0AIAanIgNBgICAgHggAmtLDQAgA0UEQEEAIQEMAgsgAyACIgUQywEiAg0BCyAFIAQQ2wEACyAAIAI2AgQgACABNgIAC3UBAn8gASACp3EhA0EIIQQDfyAAIANqKQAAQoCBgoSIkKDAgH+DIgJQBH8gAyAEaiABcSEDIARBCGohBAwBBSAAIAJ6p0EDdiADaiABcSIDaiwAAEEATgR/IAApAwBCgIGChIiQoMCAf4N6p0EDdgUgAwsLCwt1AQF/IAEoAiwgASgCJGtBBHZBACABKAIgGyABKAIcIAEoAhRrQQR2QQAgASgCEBtqIQICfwJAIAEoAgBFDQAgASgCDCABKAIERg0AIAAgAjYCAEEAIQJBBAwBCyAAQQE2AgQgACACNgIAQQgLIABqIAI2AgALgAEBAn8jAEEQayIEJAAgBCABKAIAIAEoAgQgAiADEHsCQCAEKAIARQRAIAQoAgQiBUUEQCAAIAEoAgggASgCDCACIAMQe0EAEPQBDAILIABBADYCACAAIAU2AgQMAQsgACAEKQIANwIAIABBCGogBEEIaikCADcCAAsgBEEQaiQAC3cBBH8jAEEQayICJAAgAiABKAIANgIIIAIgASgCBCIDNgIAIAIgAzYCBCAAIAEoAggiARC8ASAAKAIIIQQgAUEEdCIFBEAgACgCBCAEQQR0aiADIAX8CgAACyAAIAEgBGo2AgggAiADNgIMIAIQnAEgAkEQaiQAC3YBBX8jAEEQayICJAAgASgCACEEIAEoAgQhBSACQQhqIAEQSQJAIAIoAghBAXFFBEBBgIDEACEDDAELIAIoAgwhAyABIAEoAgAgASgCCCIGIAVqIAQgASgCBGprajYCCAsgACADNgIEIAAgBjYCACACQRBqJAALcAECfyMAQRBrIgQkACAEQQhqIgUgASACIAMQXCAEKAIMIQMCQAJAIAQoAggiAQRAIAUgASADEDIgBCgCDCEDIAQoAggiAQ0BCyAAQQA2AgAgACADNgIEDAELIAAgAzYCBCAAIAE2AgALIARBEGokAAtuAQJ/IwBBEGsiAyQAIANBCGoiBCABIAIQYCADKAIMIQICQAJAIAMoAggiAQRAIAQgASACEDYgAygCDCECIAMoAggiAQ0BCyAAQQA2AgAgACACNgIEDAELIAAgAjYCBCAAIAE2AgALIANBEGokAAttAQN/IwBBEGsiAiQAAkACQAJAIAAoAggiA0UNACAAKAIEIANBBHRqIgNBEGsiBEUNACAEKAIARQ0BCyACQQRqIAEQgQEgAkEANgIAIAAgAkHwtMAAEJEBDAELIANBDGsgARCCAQsgAkEQaiQAC20BA38jAEEQayIDJAACQCAAIAEoAggiBCABKAIASQR/IANBCGogASAEQQFBARBHIAMoAggiBEGBgICAeEcNASABKAIIBSAECzYCBCAA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bGoiACABKQIANwIAIABBCGogAUEIaigCADYCAAs5ACABIAIQVSAAAn9BASABQYABSQ0AGkECIAFBgBBJDQAaQQNBBCABQYCABEkbCzYCBCAAIAI2AgALSwECfyMAQRBrIgEkACABQQhqIAAgACgCAEEBQQRBGBBCIAEoAggiAEGBgICAeEcEQCABKAIMIQIgAEGorcAAENsBAAsgAUEQaiQAC0gBAn8jAEEQayICJAAgAkEIaiAAIAAoAgBBAUEEQQwQQiACKAIIIgBBgYCAgHhHBEAgAigCDCEDIAAgARDbAQALIAJBEGokAAtFAQJ/IAAoAiAgACgCGCIBa0EEdiECA0AgAgRAIAJBAWshAiABEL4BIAFBEGohAQwBCwsgACgCHCAAKAIUEIICIAAQ4wELSAECfyMAQRBrIgUkACAFQQhqIAAgASACIAMgBBBCIAUoAggiAEGBgICAeEcEQCAFKAIMIQYgAEHgvsAAENsBAAsgBUEQaiQAC0EBA38gACgCBCIDQQhqIQEgACgCCCECA0AgAgRAIAJBAWshAiABEOEBIAFBGGohAQwBCwsgACgCACADQQRBGBB4C0QBAX8jAEEgayIDJAAgAyACNgIcIAMgATYCGCADIAI2AhQgA0EIaiADQRRqQazDwAAQdiAAIAMpAwg3AwAgA0EgaiQAC0ABAn8gACgCDCAAKAIEIgFrQQR2IQIDQCACBEAgAkEBayECIAEQiwEgAUEQaiEBDAELCyAAKAIIIAAoAgAQggILQgEBfyMAQSBrIgMkACADQQA2AhAgA0EBNgIEIANCBDcCCCADIAE2AhwgAyAANgIYIAMgA0EYajYCACADIAIQuQEACz4BA38gACgCCCEBIAAoAgQiAyECA0AgAQRAIAFBAWshASACEKQBIAJBDGohAgwBCwsgACgCACADQQRBDBB4Cz4BA38gACgCCCEBIAAoAgQiAyECA0AgAQRAIAFBAWshASACENQBIAJBGGohAgwBCwsgACgCACADQQRBGBB4CzsBAX8DQCACBEAgACgAACEDIAAgASgAADYAACABIAM2AAAgAkEBayECIAFBBGohASAAQQRqIQAMAQsLCzcBAX8jAEEgayICJAAgAkEIaiAAKAIAIAJBFmoQNSABQQFBACACKAIIIAIoAgwQISACQSBqJAALdwEDfyAAKAIIIgMgACgCAEYEQCMAQRBrIgIkACACQQhqIAAgACgCAEEBQQRBOBBCIAIoAggiBEGBgICAeEcEQCACKAIMGiAEQayuwAAQ2wEACyACQRBqJAALIAAoAgQgA0E4bGogAUE4/AoAACAAIANBAWo2AggLegEDfyAAKAIIIgUgACgCAEYEQCMAQRBrIgQkACAEQQhqIAAgACgCAEEBQQRBCBBCIAQoAggiBkGBgICAeEcEQCAEKAIMGiAGIAMQ2wEACyAEQRBqJAALIAAgBUEBajYCCCAAKAIEIAVBA3RqIgAgAjYCBCAAIAE2AgALOwEDfyAAKAIIIQEgACgCBCIDIQIDQCABBEAgAUEBayEBIAIQiwEgAkEQaiECDAELCyAAKAIAIAMQggILOwEDfyAAKAIIIQEgACgCBCIDIQIDQCABBEAgAUEBayEBIAIQpAEgAkEMaiECDAELCyAAKAIAIAMQgQILNAECfyMAQRBrIgEkACABQQhqIAAQSSABKAIIIQAgASgCDCABQRBqJABBgIDEACAAQQFxGws9AgF/AX4jAEEQayICJAAgAkEIaiABQQFBAUHUq8AAEG0gAikDCCEDIABBADYCCCAAIAM3AgAgAkEQaiQAC0MBAX9BFBDtASIEIAI2AhAgBCABNgIMIABBgICAgHg2AgggACAENgIAIARBCGogA0EIaigCADYCACAEIAMpAgA3AgALNwEBfyMAQRBrIgMkACADQQhqIAEgAhArIAMoAgwhASAAIAMoAgg2AgAgACABNgIEIANBEGokAAs1AQF/IAAgAiABayICEEMgACgCCCEDIAIEQCAAKAIEIANqIAEgAvwKAAALIAAgAiADajYCCAs4AAJAIAJBgIDEAEYNACAAIAIgASgCEBECAEUNAEEBDwsgA0UEQEEADwsgACADIAQgASgCDBEEAAs2AQF/IAAgAiABayICEL0BIAAoAgghAyACBEAgACgCBCADaiABIAL8CgAACyAAIAIgA2o2AggLLwACQCABaUEBRyAAQYCAgIB4IAFrS3INACAABEAgACABEMsBIgFFDQELIAEPCwALNAEBfyMAQRBrIgUkACAFQQhqIAMgBBDaASAFKAIMIQMgACABIAIQHCADEM8BIAVBEGokAAs3AQF/IwBBEGsiAyQAIANBCGogASACENkBIAMoAgwhASAAQdOLwABBBBAcIAEQzwEgA0EQaiQACzwBAn8gASgCBCECIAEoAgAhA0EIEA0iAUUEQAALIAEgAjYCBCABIAM2AgAgAEGgwcAANgIEIAAgATYCAAs3AQF/IwBBIGsiASQAIAFBADYCGCABQQE2AgwgAUHoj8AANgIIIAFCBDcCECABQQhqIAAQuQEACzwBAX9BASECAkAgACgCACABEDgNACABKAIAQYC3wABBAiABKAIEKAIMEQQADQAgACgCBCABEDghAgsgAgtCAQF/QRQQ7QEiBSACNgIQIAUgATYCDCAFIAQ2AgggBSADNgIEIAVBgICAgHg2AgAgAEGAgICAeDYCCCAAIAU2AgALPgEBf0EUEO0BIgUgAjYCECAFIAE2AgwgBSAENgIIIAUgAzYCBCAFQYCAgIB4NgIAIABBCDYCCCAAIAU2AgALLQACQCADaUEBRyABQYCAgIB4IANrS3INACAAIAEgAyACEBUiAEUNACAADwsACy8BAX8gACgCCCEBIAAoAgQhAANAIAEEQCABQQFrIQEgABCPASAAQThqIQAMAQsLCywAIAAoAgBBBEcEQCAAEL8BDwsgACgCBCIAEL8BIABBMGoQtwEgAEHkABB9Cy8AIAAoAgBBgICAgHhHBEAgABCfASAAQQxqEJ4BDwsgACgCBCIAEOgBIABBDBB9C/oBAgJ/AX4jAEEQayICJAAgAkEBOwEMIAIgATYCCCACIAA2AgQjAEEQayIBJAAgAkEEaiIAKQIAIQQgASAANgIMIAEgBDcCBCMAQRBrIgAkACABQQRqIgEoAgAiAigCDCEDAkACQAJAAkAgAigCBA4CAAECCyADDQFBASECQQAhAwwCCyADDQAgAigCACICKAIEIQMgAigCACECDAELIABBgICAgHg2AgAgACABNgIMIABBzMHAACABKAIEIAEoAggiAC0ACCAALQAJEFQACyAAIAM2AgQgACACNgIAIABBsMHAACABKAIEIAEoAggiAC0ACCAALQAJEFQACygAIAMgBCABIAIQwQEhASAAIAQgAms2AgQgACACIANqQQAgARs2AgALrwgBCH8jAEEQayIDJAAjAEGQAWsiAiQAIAJBKGogACABEJsBIAIoAiwhByACKAIoIQgCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQfDDwAAtAABBAWsOAwQDAQALQfDDwABBAjoAAEH8w8AAKAIAQf////8HcQRAQcTHwAAoAgANAgtB9MPAACgCAA0HQfDDwABBAzoAAEH4w8AAQQE2AgALIAJBIGogCCAHEC8gAkHIAGogAigCICIBIAIoAiQiBBAiIAIoAkghACACKAJQQYCAgIB4Rw0DIABFDQQgAkGIAWogAEEQaigCADYCACACQYABaiAAQQhqKQIANwMAIAIgACkCADcDeCACQTBqIAEgBCACQfgAahApIAAQhwIMBQsgAkEANgKIASACQQE2AnwgAkH4wMAANgJ4IAJCBDcCgAEgAkH4AGpBgMHAABC5AQALIAJBADYCiAEgAkEBNgJ8IAJB6I7AADYCeAwICyACQQA2AogBIAJBATYCfCACQaiOwAA2AngMBwsgAkHQAGohBSACKAJYIQYgAkEYaiAAIAIoAkwiCRAvAkAgAigCHARAIAIgCTYCiAEgAiAANgKEASACQRU2AoABIAJB+brAADYCfCACQYCAgIB4NgJ4IAJBMGogASAEIAJB+ABqECkMAQsgBgRAIAJBPGogBUEIaigCADYCACACQYGAgIB4NgIwIAIgBSkCADcCNAwFCyACQTBqQeytwABBDhCEASACQYCAgIB4NgI8CyAFEOgBDAELIAIgBDYCiAEgAiABNgKEASACQRU2AoABIAJB+brAADYCfCACQYCAgIB4NgJ4IAJBMGogASAEIAJB+ABqECkLIAIoAjBBgYCAgHhGDQEgAkHYAGogAkFAaykCADcDACACQdAAaiACQThqKQIANwMAIAIgAikCMDcDSCACQQI2AnQgAiACQcgAajYCcCACQgE3AoQBIAJBATYCfCACQai+wAA2AnggAiACQfAAajYCgAEgAkHkAGogAkH4AGoQPiACQRBqIAIoAmgiASACKAJsENoBIAIoAhQhACACKAJkIAEQ+QEgAigCSCIBQYCAgIB4RwRAIAEgAigCTBD5AQsgAigCVCIBQYCAgIB4RwRAIAEgAigCWBD5AQtBASEBDAILAAsgAigCOCEEIAIoAjRBACEBIAJBADYCeCACQQhqIAJBNGoiBiACQfgAahB6IAIoAgwhACACKAIIQQFxDQEgBhC2ASAEEPoBCyAHIAgQ+QEgAyABNgIIIAMgAEEAIAEbNgIEIANBACAAIAEbNgIAIAJBkAFqJAAMAgsgAiAANgJ4QYCPwABBKyACQfgAakHwjsAAQayPwAAQbAALIAJCBDcCgAEgAkH4AGpB7I3AABC5AQALIAMoAgAgAygCBCADKAIIIANBEGokAAskAQF/IAAoAgAgACgCCCICayABSQRAIAAgAiABQQRBEBCZAQsLJAEBfyAAKAIAIAAoAggiAmsgAUkEQCAAIAIgAUEBQQEQmQELCygAAkACQAJAIAAoAgAOBAEBAQIACyAAQQRqEKQBCw8LIABBBGoQ6AELHQAgAEEYahC4ASAAKAIAQQNHBEAgAEEIahDhAQsLGQEBfyABIANGBH8gACACIAEQiQEFQQELRQsZAQF/IAEgA08EfyACIAAgAxCJAQVBAQtFCx4AIAIEQCACIAEQywEhAQsgACACNgIEIAAgATYCAAslAQF/IAAoAgAiAUGAgICAeHJBgICAgHhHBEAgACgCBCABEH0LCx4AIABFBEAQiQIACyAAIAIgAyAEIAUgASgCEBEJAAscACAARQRAEIkCAAsgACACIAMgBCABKAIQEQUACxwAIABFBEAQiQIACyAAIAIgAyAEIAEoAhARHQALHAAgAEUEQBCJAgALIAAgAiADIAQgASgCEBEfAAscACAARQRAEIkCAAsgACACIAMgBCABKAIQESEACxwAIABFBEAQiQIACyAAIAIgAyAEIAEoAhARBwALGwAgASAAKAIAIgBBBGooAgAgAEEIaigCABATCxUAIAFBCU8EQCABIAAQLA8LIAAQDQsZACAAIAEgAhAcQYIBQYMBIANBAXEbEM8BCxcBAX8gACgCACIBBEAgACgCBCABEH0LCxoAIABFBEAQiQIACyAAIAIgAyABKAIQEQAACxwBAW8gACUBIAElASABEIMBIAIlASACEIMBEAQLIAEBbyADuBAFIQQQKiIDIAQmASAAIAEgAhAcIAMQzwELFQAgACgCBEEFRwRAIABBBGoQvgELCxgAIABFBEAQiQIACyAAIAIgASgCEBECAAscACABKAIAIAAoAgAgACgCBCABKAIEKAIMEQQACxcAIAAoAgAgACgCBBD5ASAAQQxqEKQBCxcAIAAoAgAgAEEEaigCABDiASAAEIcCCxwAIABBADYCECAAQgA3AgggAEKAgICAwAA3AgALFgEBbyAAIAEQACECECoiACACJgEgAAsNACABBEAgACABEH0LCxQAIAAg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fQsNACABQYaYwABBGBATCwwAQdS7wABBMhAKAAsMACAAIAEpAgA3AwALCgAgACgCABDpAQsJACAAQQA2AgALuQEBBH8jAEEgayIEJAACQAJ/QQAgASABIAJqIgJLDQAaQQBBCCACIAAoAgAiAUEBdCIFIAIgBUsbIgIgAkEITRsiBUEASA0AGkEAIQIgBCABBH8gBCABNgIcIAQgACgCBDYCFEEBBUEACzYCGCAEQQhqIAUgBEEUahCKASAEKAIIQQFHDQEgBCgCECEAIAQoAgwLIAAhByADENsBAAsgBCgCDCEBIAAgBTYCACAAIAE2AgQgBEEgaiQAC2YBAX8jAEEwayIEJAAgBCABNgIEIAQgADYCACAEQQI2AgwgBCADNgIIIARCAjcCFCAEIARBBGqtQoCAgIAwhDcDKCAEIAStQoCAgIAwhDcDICAEIARBIGo2AhAgBEEIaiACELkBAAsLjUIKAEGAgMAACwv//////////wAAEABBmIDAAAv1D2xpYnJhcnkvYWxsb2Mvc3JjL2ZtdC5ycwBWOlwuY2FjaGVcY2FyZ29ccmVnaXN0cnlcc3JjXGluZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmXHdhc20tYmluZGdlbi0wLjIuMTAwXHNyY1xjb252ZXJ0XHNsaWNlcy5ycwB+XC5ydXN0dXBcdG9vbGNoYWluc1xzdGFibGUteDg2XzY0LXBjLXdpbmRvd3MtbXN2Y1xsaWIvcnVzdGxpYi9zcmMvcnVzdFxsaWJyYXJ5L2NvcmUvc3JjL2l0ZXIvdHJhaXRzL2l0ZXJhdG9yLnJzAFY6XC5jYWNoZVxjYXJnb1xnaXRcY2hlY2tvdXRzXGRlbm9fdGFza19zaGVsbC01OTZlMGM0MmFiZDJkZmIzXGMxYTFjZjhcc3JjXHBhcnNlci5ycwB+XC5ydXN0dXBcdG9vbGNoYWluc1xzdGFibGUteDg2XzY0LXBjLXdpbmRvd3MtbXN2Y1xsaWIvcnVzdGxpYi9zcmMvcnVzdFxsaWJyYXJ5L2NvcmUvc3JjL3N0ci9wYXR0ZXJuLnJzAH5cLnJ1c3R1cFx0b29sY2hhaW5zXHN0YWJsZS14ODZfNjQtcGMtd2luZG93cy1tc3ZjXGxpYi9ydXN0bGliL3NyYy9ydXN0XGxpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwBsaWJyYXJ5L3N0ZC9zcmMvcGFuaWNraW5nLnJzAGxpYnJhcnkvY29yZS9zcmMvdW5pY29kZS9wcmludGFibGUucnMAflwucnVzdHVwXHRvb2xjaGFpbnNcc3RhYmxlLXg4Nl82NC1wYy13aW5kb3dzLW1zdmNcbGliL3J1c3RsaWIvc3JjL3J1c3RcbGlicmFyeS9hbGxvYy9zcmMvc2xpY2UucnMAL3J1c3QvZGVwcy9oYXNoYnJvd24tMC4xNS40L3NyYy9yYXcvbW9kLnJzAGxpYnJhcnkvY29yZS9zcmMvc3RyL21vZC5ycwB+XC5ydXN0dXBcdG9vbGNoYWluc1xzdGFibGUteDg2XzY0LXBjLXdpbmRvd3MtbXN2Y1xsaWIvcnVzdGxpYi9zcmMvcnVzdFxsaWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjL21vZC5ycwAvcnVzdGMvMjk0ODM4ODNlZWQ2OWQ1ZmI0ZGIwMTk2NGNkZjJhZjRkODZlOWNiMi9saWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjL21vZC5ycwAvcnVzdC9kZXBzL2RsbWFsbG9jLTAuMi45L3NyYy9kbG1hbGxvYy5ycwBzcmNccnNfbGliXHNyY1xsaWIucnMAVjpcLmNhY2hlXGNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zlxjb25zb2xlX2Vycm9yX3BhbmljX2hvb2stMC4xLjdcc3JjXGxpYi5ycwBWOlwuY2FjaGVcY2FyZ29ccmVnaXN0cnlcc3JjXGluZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmXHNlcmRlLXdhc20tYmluZGdlbi0wLjYuNVxzcmNcbGliLnJzAFY6XC5jYWNoZVxjYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Zcb25jZV9jZWxsLTEuMjEuNFxzcmNcbGliLnJzAFY6XC5jYWNoZVxjYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2ZcbW9uY2gtMC42LjBcc3JjXGxpYi5ycwB7BBAAYgAAADUAAAAOAAAAaXNBc3luY2VuZHNMaW5lc2VxdWVuY2VhbmRvcnN0ZG91dHN0ZG91dFN0ZGVycm5hbWV2YWx1ZWtpbmR3b3JkZmRDb21tYW5kaW5uZXJyZWRpcmVjdFBpcGVsaW5lbmVnYXRlZG1heWJlRmRvcGlvRmlsZVNlcXVlbmNlU2hlbGxWYXJzaGVsbFZhcnBpcGVsaW5lQm9vbGVhbkxpc3Rib29sZWFuTGlzdHRleHR2YXJpYWJsZXRpbGRlY29tbWFuZHF1b3RlZGJyYWNlaW5wdXRvdXRwdXRjdXJyZW50bmV4dENvbW1hbmRJbm5lclNpbXBsZXNpbXBsZVN1YnNoZWxsc3Vic2hlbGxQaXBlU2VxdWVuY2VQaXBlbGluZUlubmVycGlwZVNlcXVlbmNlZW52VmFyc2FyZ3NpdGVtc292ZXJ3cml0ZWFwcGVuZAAAEwQQAGgAAACVAAAADgAAAE9uY2UgaW5zdGFuY2UgaGFzIHByZXZpb3VzbHkgYmVlbiBwb2lzb25lZAAA/AYQACoAAABvbmUtdGltZSBpbml0aWFsaXphdGlvbiBtYXkgbm90IGJlIHBlcmZvcm1lZCByZWN1cnNpdmVseTAHEAA4AAAAGgAAAAQAAAAEAAAAGwAAAGNhbGxlZCBgUmVzdWx0Ojp1bndyYXAoKWAgb24gYW4gYEVycmAgdmFsdWUA/QMQABYAAAAIAAAAOAAAABwAAAAMAAAABAAAAB0AAAAeAAAAHwAAAGNhcGFjaXR5IG92ZXJmbG93AAAA1AcQABEAAACyAxAAIQAAAC4CAAARAAAAEAIQABwAAADoAQAAFwBBmJDAAAuFAQEAAAAgAAAAYSBmb3JtYXR0aW5nIHRyYWl0IGltcGxlbWVudGF0aW9uIHJldHVybmVkIGFuIGVycm9yIHdoZW4gdGhlIHVuZGVybHlpbmcgc3RyZWFtIGRpZCBub3QAABgAEAAZAAAAigIAAA4AAAAhAAAADAAAAAQAAAAiAAAAIwAAACQAQaiRwAAL7CoBAAAAJQAAAGEgRGlzcGxheSBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCBhbiBlcnJvciB1bmV4cGVjdGVkbHkAyAEQAGQAAAAOCwAADgAAAEVycm9yCgpTdGFjazoKCgBwAAcALQEBAQIBAgEBSAswFRABZQcCBgICAQQjAR4bWws6CQkBGAQBCQEDAQUrAzsJKhgBIDcBAQEECAQBAwcKAh0BOgEBAQIECAEJAQoCGgECAjkBBAIEAgIDAwEeAgMBCwI5AQQFAQIEARQCFgYBAToBAQIBBAgBBwMKAh4BOwEBAQwBCQEoAQMBNwEBAwUDAQQHAgsCHQE6AQICAQEDAwEEBwILAhwCOQIBAQIECAEJAQoCHQFIAQQBAgMBAQgBUQECBwwIYgECCQsHSQIbAQEBAQE3DgEFAQIFCwEkCQFmBAEGAQICAhkCBAMQBA0BAgIGAQ8BAAMABBwDHQIeAkACAQcIAQILCQEtAwEBdQIiAXYDBAIJAQYD2wICAToBAQcBAQEBAggGCgIBMB8xBDAKBAMmCQwCIAQCBjgBAQIDAQEFOAgCApgDAQ0BBwQBBgEDAsZAAAHDIQADjQFgIAAGaQIABAEKIAJQAgABAwEEARkCBQGXAhoSDQEmCBkLAQEsAzABAgQCAgIBJAFDBgICAgIMAQgBLwEzAQEDAgIFAgEBKgIIAe4BAgEEAQABABAQEAACAAHiAZUFAAMBAgUEKAMEAaUCAARBBQACTwRGCzEEewE2DykBAgIKAzEEAgIHAT0DJAUBCD4BDAI0CQEBCAQCAV8DAgQGAQIBnQEDCBUCOQIBAQEBDAEJAQ4HAwVDAQIGAQECAQEDBAMBAQ4CVQgCAwEBFwFRAQIGAQECAQECAQLrAQIEBgIBAhsCVQgCAQECagEBAQIIZQEBAQIEAQUACQEC9QEKBAQBkAQCAgQBIAooBgIECAEJBgIDLg0BAgAHAQYBAVIWAgcBAgECegYDAQECAQcBAUgCAwEBAQACCwI0BQUDFwEAAQYPAAwDAwAFOwcAAT8EUQELAgACAC4CFwAFAwYICAIHHgSUAwA3BDIIAQ4BFgUBDwAHARECBwECAQVkAaAHAAE9BAAE/gIAB20HAGCA8AAwMTIzNDU2Nzg5YWJjZGVmUmVmQ2VsbCBhbHJlYWR5IGJvcnJvd2VkY2FsbGVkIGBPcHRpb246OnVud3JhcCgpYCBvbiBhIGBOb25lYCB2YWx1ZWluZGV4IG91dCBvZiBib3VuZHM6IHRoZSBsZW4gaXMgIGJ1dCB0aGUgaW5kZXggaXMgAEkMEAAgAAAAaQwQABIAAAA6IAAAAQAAAAAAAACMDBAAAgAAAAAAAAAMAAAABAAA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AAsAAAB8Jg0KCkV4cGVjdGVkIGNvbW1hbmQgZm9sbG93aW5nIGJvb2xlYW4gb3BlcmF0b3IuQ2Fubm90IHNldCBtdWx0aXBsZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2hlbiB0aGVyZSBpcyBubyBmb2xsb3dpbmcgY29tbWFuZC5FeHBlY3RlZCBjb21tYW5kIGZvbGxvd2luZyBwaXBlbGluZSBvcGVyYXRvci5NdWx0aXBsZSByZWRpcmVjdHMgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgAACwEQAFUAAAA+AgAACAAAAFVuc3VwcG9ydGVkIHJlc2VydmVkIHdvcmQuIT4+Pnw+RXhwZWN0ZWQgcmVkaXJlY3QgcGF0aC5JbnZhbGlkIGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlLkV4cGVjdGVkIGNsb3Npbmcgc2luZ2xlIHF1b3RlLgsBEABVAAAAOQMAACQAAAALARAAVQAAADsDAAAgAAAARmFpbGVkIHBhcnNpbmcgY29tbWFuZCBzdWJzdGl0dXRpb24gaW4gZG91YmxlIHF1b3RlZCBzdHJpbmcuCwEQAFUAAABAAwAAFwAAAAsBEABVAAAARQMAACQAAAALARAAVQAAAEcDAAAgAAAARmFpbGVkIHBhcnNpbmcgYmFja3RpY2tzIGluIGRvdWJsZSBxdW90ZWQgc3RyaW5nLgAAAAsBEABVAAAATAMAABcAAAALARAAVQAAAFEDAAAhAAAACwEQAFUAAABUAwAAEQAAAEV4cGVjdGVkIGNsb3NpbmcgZG91YmxlIHF1b3RlLkZhaWxlZCBwYXJzaW5nIHdpdGhpbiBkb3VibGUgcXVvdGVzLiBVbmV4cGVjdGVkIGNoYXJhY3RlcjogAAAArhkQADsAAABDb3VsZCBub3QgZGV0ZXJtaW5lIGV4cHJlc3Npb24uRmFpbGVkIHBhcnNpbmcgd2l0aGluIGRvdWJsZSBxdW90ZXMuIBMaEAAlAAAAJCMqJCBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC5DGhAAAQAAAEQaEAAcAAAACwEQAFUAAACrAwAADgAAAFwNClwKJD8ACwEQAFUAAAAFBAAAEgAAAAsBEABVAAAA+AMAABYAAABVbnN1cHBvcnRlZCB0aWxkZSBl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");
var wasmModule = new WebAssembly.Module(bytes);
var wasm = new WebAssembly.Instance(wasmModule, {
"./rs_lib.internal.js": imports
});
__exportStar(require_rs_lib_internal2(), exports2);
var rs_lib_internal_js_1 = require_rs_lib_internal2();
(0, rs_lib_internal_js_1.__wbg_set_wasm)(wasm.exports);
wasm.exports.__wbindgen_start();
function base64decode(b64) {
const binString = atob(b64);
const size = binString.length;
const bytes2 = new Uint8Array(size);
for (let i = 0; i < size; i++) {
bytes2[i] = binString.charCodeAt(i);
}
return bytes2;
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/streams.js
var require_streams = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/streams.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.stderr = exports2.stdout = exports2.stdin = void 0;
var dntShim = __importStar2(require_dnt_shims());
var fsFile_js_1 = require_fsFile();
var cachedStdinReadable;
function getStdinReadable() {
if (cachedStdinReadable !== void 0)
return cachedStdinReadable;
const abortController = new AbortController();
return cachedStdinReadable = new dntShim.ReadableStream({
async pull(controller) {
const buf = new Uint8Array(16 * 1024);
let bytesRead;
try {
bytesRead = await readStdin(buf, abortController.signal);
} catch (err) {
if (abortController.signal.aborted)
return;
throw err;
}
if (bytesRead === null)
controller.close();
else
controller.enqueue(buf.subarray(0, bytesRead));
},
cancel() {
abortController.abort();
cachedStdinReadable = void 0;
}
});
}
exports2.stdin = {
read(p, options) {
const signal = options?.signal;
signal?.throwIfAborted();
return readStdin(p, signal);
},
// todo: remove this as it's unused
get readable() {
return getStdinReadable();
},
setRaw(mode) {
if (process.stdin.isTTY) {
process.stdin.setRawMode(mode);
}
},
isTerminal() {
return process.stdin.isTTY ?? false;
}
};
exports2.stdout = {
writeSync(p) {
return (0, fsFile_js_1.writeSyncAll)(1, p);
},
isTerminal() {
return process.stdout.isTTY ?? false;
}
};
function readStdin(p, signal) {
const stream = process.stdin;
return new Promise((resolve, reject) => {
const onReadable = () => {
const chunk = stream.read();
if (chunk === null)
return;
cleanup();
const len = Math.min(chunk.length, p.length);
p.set(chunk.subarray(0, len));
if (chunk.length > len)
stream.unshift(chunk.subarray(len));
resolve(len);
};
const onEnd = () => {
cleanup();
resolve(null);
};
const onError = (err) => {
cleanup();
reject(err);
};
const onAbort = () => {
cleanup();
reject(signal.reason);
};
const cleanup = () => {
stream.off("readable", onReadable);
stream.off("end", onEnd);
stream.off("error", onError);
signal?.removeEventListener("abort", onAbort);
};
stream.on("readable", onReadable);
stream.on("end", onEnd);
stream.on("error", onError);
signal?.addEventListener("abort", onAbort, { once: true });
onReadable();
});
}
exports2.stderr = {
writeSync(p) {
return (0, fsFile_js_1.writeSyncAll)(2, p);
},
isTerminal() {
return process.stderr.isTTY ?? false;
}
};
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/shell.js
var require_shell = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/shell.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.whichRealEnv = exports2.WhichEnv = exports2.Context = exports2.StreamFds = void 0;
exports2.parseCommand = parseCommand;
exports2.spawn = spawn;
exports2.whichFromContext = whichFromContext;
var dntShim = __importStar2(require_dnt_shims());
var path = __importStar2(require("node:path"));
var mod_js_12 = require_mod();
var executable_js_1 = require_executable();
var common_js_12 = require_common();
var fsFile_js_1 = require_fsFile();
var glob_js_1 = require_glob();
var wasmInstance = __importStar2(require_rs_lib2());
var pipes_js_1 = require_pipes();
var buffer_js_1 = require_buffer();
var result_js_1 = require_result();
var streams_js_1 = require_streams();
var ShellEvaluateError = class extends Error {
};
var RealEnv = class {
setCwd(cwd) {
process.chdir(cwd);
}
getCwd() {
return process.cwd();
}
setEnvVar(key, value) {
if (value == null) {
delete process.env[key];
} else {
process.env[key] = value;
}
}
getEnvVar(key) {
return process.env[key];
}
getEnvVars() {
return (0, common_js_12.getRealEnvVars)();
}
clone() {
return cloneEnv(this);
}
};
var ShellEnv = class {
#cwd;
#envVars = {};
setCwd(cwd) {
this.#cwd = cwd;
}
getCwd() {
if (this.#cwd == null) {
throw new Error("The cwd must be initialized.");
}
return this.#cwd;
}
setEnvVar(key, value) {
if (common_js_12.isWindows) {
key = key.toUpperCase();
}
if (value == null) {
delete this.#envVars[key];
} else {
this.#envVars[key] = value;
}
}
getEnvVar(key) {
if (common_js_12.isWindows) {
key = key.toUpperCase();
}
return this.#envVars[key];
}
getEnvVars() {
return { ...this.#envVars };
}
clone() {
return cloneEnv(this);
}
};
var RealEnvWriteOnly = class {
real = new RealEnv();
shell = new ShellEnv();
setCwd(cwd) {
this.real.setCwd(cwd);
this.shell.setCwd(cwd);
}
getCwd() {
return this.shell.getCwd();
}
setEnvVar(key, value) {
this.real.setEnvVar(key, value);
this.shell.setEnvVar(key, value);
}
getEnvVar(key) {
return this.shell.getEnvVar(key);
}
getEnvVars() {
return this.shell.getEnvVars();
}
clone() {
return cloneEnv(this);
}
};
function initializeEnv(env, opts) {
env.setCwd(opts.cwd);
for (const [key, value] of Object.entries(opts.env)) {
env.setEnvVar(key, value);
}
}
function cloneEnv(env) {
const result = new ShellEnv();
initializeEnv(result, {
cwd: env.getCwd(),
env: env.getEnvVars()
});
return result;
}
var StreamFds = class {
#readers = /* @__PURE__ */ new Map();
#writers = /* @__PURE__ */ new Map();
insertReader(fd, stream) {
this.#readers.set(fd, stream);
}
insertWriter(fd, stream) {
this.#writers.set(fd, stream);
}
getReader(fd) {
return this.#readers.get(fd)?.();
}
getWriter(fd) {
return this.#writers.get(fd)?.();
}
};
exports2.StreamFds = StreamFds;
var Context = class _Context {
stdin;
stdout;
stderr;
#env;
#shellVars;
#shellOptions;
#static;
constructor(opts) {
this.stdin = opts.stdin;
this.stdout = opts.stdout;
this.stderr = opts.stderr;
this.#env = opts.env;
this.#shellVars = opts.shellVars;
this.#shellOptions = opts.shellOptions;
this.#static = opts.static;
}
get signal() {
return this.#static.signal;
}
applyChanges(changes) {
if (changes == null) {
return;
}
for (const change of changes) {
switch (change.kind) {
case "cd":
this.#env.setCwd(change.dir);
break;
case "envvar":
this.setEnvVar(change.name, change.value);
break;
case "shellvar":
this.setShellVar(change.name, change.value);
break;
case "unsetvar":
this.setShellVar(change.name, void 0);
this.setEnvVar(change.name, void 0);
break;
case "setoption":
this.setShellOption(change.option, change.value);
break;
default: {
const _assertNever = change;
throw new Error(`Not implemented env change: ${change}`);
}
}
}
}
setEnvVar(key, value) {
if (common_js_12.isWindows) {
key = key.toUpperCase();
}
if (key === "PWD") {
if (value != null && path.isAbsolute(value)) {
this.#env.setCwd(path.resolve(value));
}
} else {
delete this.#shellVars[key];
this.#env.setEnvVar(key, value);
}
}
setShellVar(key, value) {
if (common_js_12.isWindows) {
key = key.toUpperCase();
}
if (this.#env.getEnvVar(key) != null || key === "PWD") {
this.setEnvVar(key, value);
} else if (value == null) {
delete this.#shellVars[key];
} else {
this.#shellVars[key] = value;
}
}
getEnvVars() {
return this.#env.getEnvVars();
}
getCwd() {
return this.#env.getCwd();
}
getVar(key) {
if (common_js_12.isWindows) {
key = key.toUpperCase();
}
if (key === "PWD") {
return this.#env.getCwd();
}
return this.#env.getEnvVar(key) ?? this.#shellVars[key];
}
getCommand(command) {
return this.#static.commands[command] ?? null;
}
getShellOptions() {
return this.#shellOptions;
}
setShellOption(option, value) {
this.#shellOptions[option] = value;
}
getFdReader(fd) {
return this.#static.fds?.getReader(fd);
}
getFdWriter(fd) {
return this.#static.fds?.getWriter(fd);
}
asCommandContext(args) {
const context = this;
return {
get args() {
return args;
},
get cwd() {
return context.getCwd();
},
get env() {
return context.getEnvVars();
},
get stdin() {
return context.stdin;
},
get stdout() {
return context.stdout;
},
get stderr() {
return context.stderr;
},
get signal() {
return context.signal;
},
get shellOptions() {
return context.getShellOptions();
},
error(codeOrText, maybeText) {
return context.error(codeOrText, maybeText);
}
};
}
error(codeOrText, maybeText) {
let code;
let text;
if (typeof codeOrText === "number") {
code = codeOrText;
text = maybeText;
} else {
code = 1;
text = codeOrText;
}
const maybePromise = this.stderr.writeLine(text);
if (maybePromise instanceof Promise) {
return maybePromise.then(() => ({ code }));
} else {
return { code };
}
}
withInner(opts) {
return new _Context({
stdin: opts.stdin ?? this.stdin,
stdout: opts.stdout ?? this.stdout,
stderr: opts.stderr ?? this.stderr,
env: this.#env.clone(),
shellVars: { ...this.#shellVars },
shellOptions: this.#shellOptions,
static: this.#static
});
}
clone() {
return new _Context({
stdin: this.stdin,
stdout: this.stdout,
stderr: this.stderr,
env: this.#env.clone(),
shellVars: { ...this.#shellVars },
shellOptions: this.#shellOptions,
static: this.#static
});
}
};
exports2.Context = Context;
function parseCommand(command) {
return wasmInstance.parse(command);
}
function getDefaultShellOptions(list) {
return {
nullglob: false,
failglob: false,
// default: pass unmatched globs through literally
pipefail: false,
globstar: true,
// default: ** matches recursively
questionGlob: false,
// default: ? is literal
// on by default for multi-line input so a failing line stops the rest;
// single-line `a; b` keeps running through failures.
errexit: isMultiLine(list)
};
}
function isMultiLine(list) {
return list.items.some((item) => item.endsLine);
}
async function spawn(list, opts) {
const env = opts.exportEnv ? opts.clearedEnv ? new RealEnvWriteOnly() : new RealEnv() : new ShellEnv();
initializeEnv(env, opts);
const defaultOptions = getDefaultShellOptions(list);
const context = new Context({
env,
stdin: opts.stdin,
stdout: opts.stdout,
stderr: opts.stderr,
shellVars: {},
shellOptions: {
...defaultOptions,
...opts.shellOptions
},
static: {
commands: opts.commands,
fds: opts.fds,
signal: opts.signal
}
});
const result = await executeSequentialList(list, context);
return result.code;
}
async function executeSequentialList(list, context) {
let finalExitCode = 0;
const finalChanges = [];
for (const item of list.items) {
if (item.isAsync) {
throw new Error("Async commands are not supported. Run a command concurrently in the JS code instead.");
}
const result = await executeSequence(item.sequence, context);
switch (result.kind) {
case void 0:
if (result.changes) {
context.applyChanges(result.changes);
finalChanges.push(...result.changes);
}
finalExitCode = result.code;
break;
case "exit":
return result;
default: {
const _assertNever = result;
}
}
if (finalExitCode !== 0 && context.getShellOptions().errexit) {
break;
}
}
return {
code: finalExitCode,
changes: finalChanges
};
}
function executeSequence(sequence, context) {
if (context.signal.aborted) {
return Promise.resolve((0, result_js_1.getAbortedResult)());
}
switch (sequence.kind) {
case "pipeline":
return executePipeline(sequence, context);
case "booleanList":
return executeBooleanList(sequence, context);
case "shellVar":
return executeShellVar(sequence, context);
default: {
const _assertNever = sequence;
throw new Error(`Not implemented: ${sequence}`);
}
}
}
function executePipeline(pipeline, context) {
const output = executePipelineInner(pipeline.inner, context);
if (pipeline.negated) {
return Promise.resolve(output).then((result) => {
return {
...result,
code: result.code === 0 ? 1 : 0
};
});
}
return output;
}
async function executeBooleanList(list, context) {
const changes = [];
const firstResult = await executeSequence(list.current, context.clone());
let exitCode = 0;
switch (firstResult.kind) {
case "exit":
return firstResult;
case void 0:
if (firstResult.changes) {
context.applyChanges(firstResult.changes);
changes.push(...firstResult.changes);
}
exitCode = firstResult.code;
break;
default: {
const _assertNever = firstResult;
throw new Error("Not handled.");
}
}
const next = findNextSequence(list, exitCode);
if (next == null) {
return {
code: exitCode,
changes
};
} else {
const nextResult = await executeSequence(next, context.clone());
switch (nextResult.kind) {
case "exit":
return nextResult;
case void 0:
if (nextResult.changes) {
changes.push(...nextResult.changes);
}
return {
code: nextResult.code,
changes
};
default: {
const _assertNever = nextResult;
throw new Error("Not Implemented");
}
}
}
function findNextSequence(current, exitCode2) {
if (opMovesNextForExitCode(current.op, exitCode2)) {
return current.next;
} else {
let next2 = current.next;
while (next2.kind === "booleanList") {
if (opMovesNextForExitCode(next2.op, exitCode2)) {
return next2.next;
} else {
next2 = next2.next;
}
}
return void 0;
}
}
function opMovesNextForExitCode(op, exitCode2) {
switch (op) {
case "or":
return exitCode2 !== 0;
case "and":
return exitCode2 === 0;
}
}
}
async function executeShellVar(sequence, context) {
const value = await evaluateWord(sequence.value, context);
return {
code: 0,
changes: [{
kind: "shellvar",
name: sequence.name,
value
}]
};
}
function executePipelineInner(inner, context) {
switch (inner.kind) {
case "command":
return executeCommand(inner, context);
case "pipeSequence":
return executePipeSequence(inner, context);
default: {
const _assertNever = inner;
throw new Error(`Not implemented: ${inner.kind}`);
}
}
}
async function executeCommand(command, context) {
if (command.redirect != null) {
const redirectResult = await resolveRedirectPipe(command.redirect, context);
let redirectPipe;
if (redirectResult.kind === "input") {
const { pipe } = redirectResult;
context = context.withInner({
stdin: pipe
});
redirectPipe = pipe;
} else if (redirectResult.kind === "output") {
const { pipe, toFd } = redirectResult;
const writer = new pipes_js_1.ShellPipeWriter("piped", pipe);
redirectPipe = pipe;
if (toFd === 1) {
context = context.withInner({
stdout: writer
});
} else if (toFd === 2) {
context = context.withInner({
stderr: writer
});
} else if (toFd === "&") {
context = context.withInner({
stdout: writer
}).withInner({
stderr: writer
});
} else {
const _assertNever = toFd;
throw new Error(`Not handled fd: ${toFd}`);
}
} else {
return redirectResult;
}
const result = await executeCommandInner(command.inner, context);
try {
if (isAsyncDisposable(redirectPipe)) {
await redirectPipe[Symbol.asyncDispose]();
} else if (isDisposable(redirectPipe)) {
redirectPipe[Symbol.dispose]();
}
} catch (err) {
if (result.code === 0) {
return context.error(`failed disposing redirected pipe. ${(0, common_js_12.errorToString)(err)}`);
}
}
return result;
} else {
return executeCommandInner(command.inner, context);
}
}
async function resolveRedirectPipe(redirect, context) {
function handleFileOpenError(outputPath, err) {
return context.error(`failed opening file for redirect (${outputPath}). ${(0, common_js_12.errorToString)(err)}`);
}
const toFd = resolveRedirectToFd(redirect, context);
if (typeof toFd !== "number" && toFd !== "&") {
return toFd;
}
const { ioFile } = redirect;
if (ioFile.kind === "fd") {
switch (redirect.op.kind) {
case "input": {
if (ioFile.value === 0) {
return {
kind: "input",
pipe: getStdinReader(context.stdin)
};
} else if (ioFile.value === 1 || ioFile.value === 2) {
return context.error(`redirecting stdout or stderr to a command input is not supported`);
} else {
const pipe = context.getFdReader(ioFile.value);
if (pipe == null) {
return context.error(`could not find fd reader: ${ioFile.value}`);
} else {
return {
kind: "input",
pipe
};
}
}
}
case "output": {
if (ioFile.value === 0) {
return context.error(`redirecting output to stdin is not supported`);
} else if (ioFile.value === 1) {
return {
kind: "output",
pipe: context.stdout.inner,
toFd
};
} else if (ioFile.value === 2) {
return {
kind: "output",
pipe: context.stderr.inner,
toFd
};
} else {
const pipe = context.getFdWriter(ioFile.value);
if (pipe == null) {
return context.error(`could not find fd: ${ioFile.value}`);
} else {
return {
kind: "output",
pipe,
toFd
};
}
}
}
default: {
const _assertNever = redirect.op;
throw new Error("not implemented redirect op.");
}
}
} else if (ioFile.kind === "word") {
const words = await evaluateWordParts(ioFile.value, context);
if (words.length === 0) {
return context.error("redirect path must be 1 argument, but found 0");
} else if (words.length > 1) {
return context.error(`redirect path must be 1 argument, but found ${words.length} (${words.join(" ")}). Did you mean to quote it (ex. "${words.join(" ")}")?`);
}
switch (redirect.op.kind) {
case "input": {
const outputPath = path.isAbsolute(words[0]) ? words[0] : path.join(context.getCwd(), words[0]);
try {
const file = await (0, fsFile_js_1.open)(outputPath, {
read: true
});
return {
kind: "input",
pipe: file
};
} catch (err) {
return handleFileOpenError(outputPath, err);
}
}
case "output": {
if (words[0] === "/dev/null") {
return {
kind: "output",
pipe: new pipes_js_1.NullPipeWriter(),
toFd
};
}
const outputPath = path.isAbsolute(words[0]) ? words[0] : path.join(context.getCwd(), words[0]);
try {
const file = await (0, fsFile_js_1.open)(outputPath, {
write: true,
create: true,
append: redirect.op.value === "append",
truncate: redirect.op.value !== "append"
});
return {
kind: "output",
pipe: file,
toFd
};
} catch (err) {
return handleFileOpenError(outputPath, err);
}
}
default: {
const _assertNever = redirect.op;
throw new Error("not implemented redirect op.");
}
}
} else {
const _assertNever = ioFile;
throw new Error("not implemented redirect io file.");
}
}
function getStdinReader(stdin) {
if (stdin === "inherit") {
return streams_js_1.stdin;
} else if (stdin === "null") {
return new pipes_js_1.NullPipeReader();
} else {
return stdin;
}
}
function resolveRedirectToFd(redirect, context) {
const maybeFd = redirect.maybeFd;
if (maybeFd == null) {
return 1;
}
if (maybeFd.kind === "stdoutStderr") {
return "&";
}
if (maybeFd.fd !== 1 && maybeFd.fd !== 2) {
return context.error(`only redirecting to stdout (1) and stderr (2) is supported`);
} else {
return maybeFd.fd;
}
}
function executeCommandInner(command, context) {
switch (command.kind) {
case "simple":
return executeSimpleCommand(command, context);
case "subshell":
return executeSubshell(command, context);
default: {
const _assertNever = command;
throw new Error(`Not implemented: ${command.kind}`);
}
}
}
async function executeSimpleCommand(command, parentContext) {
const context = parentContext.clone();
try {
for (const envVar of command.envVars) {
context.setEnvVar(envVar.name, await evaluateWord(envVar.value, context));
}
const commandArgs = await evaluateArgs(command.args, context);
return await executeCommandArgs(commandArgs, context);
} catch (err) {
if (err instanceof ShellEvaluateError) {
return context.error(err.message);
} else {
throw err;
}
}
}
function executeCommandArgs(commandArgs, context) {
const commandName = commandArgs.shift();
const command = context.getCommand(commandName);
if (command != null) {
return Promise.resolve(command(context.asCommandContext(commandArgs)));
}
const unresolvedCommand = {
name: commandName,
baseDir: context.getCwd()
};
return executeUnresolvedCommand(unresolvedCommand, commandArgs, context);
}
async function executeUnresolvedCommand(unresolvedCommand, commandArgs, context) {
const resolvedCommand = await resolveCommand(unresolvedCommand, context);
if (resolvedCommand === false) {
context.stderr.writeLine(`dax: ${unresolvedCommand.name}: command not found`);
return { code: 127 };
}
if (resolvedCommand.kind === "shebang") {
return executeUnresolvedCommand(resolvedCommand.command, [...resolvedCommand.args, ...commandArgs], context);
}
const _assertIsPath = resolvedCommand.kind;
return (0, executable_js_1.createExecutableCommand)(resolvedCommand.path)(context.asCommandContext(commandArgs));
}
async function executeSubshell(subshell, context) {
const result = await executeSequentialList(subshell, context);
return { code: result.code };
}
async function pipeReaderToWriterSync(reader, writer, signal) {
const buffer = new Uint8Array(1024);
while (!signal.aborted) {
const bytesRead = await reader.read(buffer);
if (bytesRead == null || bytesRead === 0) {
break;
}
const maybePromise = writer.writeAll(buffer.slice(0, bytesRead));
if (maybePromise) {
await maybePromise;
}
}
}
function pipeCommandPipeReaderToWriterSync(reader, writer, signal) {
switch (reader) {
case "inherit":
return pipeReaderToWriterSync(streams_js_1.stdin, writer, signal);
case "null":
return Promise.resolve();
default: {
return pipeReaderToWriterSync(reader, writer, signal);
}
}
}
async function resolveCommand(unresolvedCommand, context) {
if (unresolvedCommand.name.includes("/") || common_js_12.isWindows && unresolvedCommand.name.includes("\\")) {
const absolutePath = path.isAbsolute(unresolvedCommand.name) ? unresolvedCommand.name : path.resolve(unresolvedCommand.baseDir, unresolvedCommand.name);
const commandPath2 = await whichFromContext(absolutePath, context);
if (commandPath2 == null) {
return false;
}
const result = await (0, common_js_12.getExecutableShebangFromPath)(commandPath2);
if (result === false) {
return false;
} else if (result != null) {
const args = await parseShebangArgs(result, context);
const name = args.shift();
args.push(commandPath2);
return {
kind: "shebang",
command: {
name,
baseDir: path.dirname(commandPath2)
},
args
};
} else {
const _assertUndefined = result;
return {
kind: "path",
path: commandPath2
};
}
}
const commandPath = await whichFromContext(unresolvedCommand.name, context);
if (commandPath == null) {
return false;
}
return {
kind: "path",
path: commandPath
};
}
var WhichEnv = class extends mod_js_12.RealEnvironment {
/** Requests read permission for the provided directory under Deno. */
requestPermission(folderPath) {
const denoGlobal = globalThis.Deno;
denoGlobal?.permissions?.requestSync?.({
name: "read",
path: folderPath
});
}
};
exports2.WhichEnv = WhichEnv;
exports2.whichRealEnv = new WhichEnv();
async function whichFromContext(commandName, context) {
return await (0, mod_js_12.which)(commandName, {
isWindows: common_js_12.isWindows,
stat: exports2.whichRealEnv.stat,
lstat: exports2.whichRealEnv.lstat,
readLink: exports2.whichRealEnv.readLink,
env(key) {
return context.getVar(key);
},
requestPermission: exports2.whichRealEnv.requestPermission
});
}
async function executePipeSequence(sequence, context) {
const waitTasks = [];
let lastOutput = context.stdin;
let nextInner = sequence;
while (nextInner != null) {
let innerCommand;
switch (nextInner.kind) {
case "pipeSequence":
switch (nextInner.op) {
case "stdout": {
innerCommand = nextInner.current;
break;
}
case "stdoutstderr": {
return context.error(`piping to both stdout and stderr is not implemented (ex. |&)`);
}
default: {
const _assertNever = nextInner.op;
return context.error(`not implemented pipe sequence op: ${nextInner.op}`);
}
}
nextInner = nextInner.next;
break;
case "command":
innerCommand = nextInner;
nextInner = void 0;
break;
}
const buffer = new pipes_js_1.PipeSequencePipe();
const newContext = context.withInner({
stdout: new pipes_js_1.ShellPipeWriter("piped", buffer),
stdin: lastOutput
});
const commandPromise = executeCommand(innerCommand, newContext);
waitTasks.push(commandPromise);
commandPromise.finally(() => {
buffer.close();
});
lastOutput = buffer;
}
waitTasks.push(pipeCommandPipeReaderToWriterSync(lastOutput, context.stdout, context.signal).then(() => ({ code: 0 })));
const results = await Promise.all(waitTasks);
const shellOptions = context.getShellOptions();
let exitCode;
if (shellOptions.pipefail) {
exitCode = 0;
for (let i = results.length - 1; i >= 0; i--) {
const code = results[i].code;
if (code !== 0) {
exitCode = code;
break;
}
}
} else {
exitCode = results[results.length - 2].code;
}
return { code: exitCode };
}
async function parseShebangArgs(info, context) {
function throwUnsupported() {
throw new Error("Unsupported shebang. Please report this as a bug.");
}
if (!info.stringSplit) {
return [info.command];
}
const command = parseCommand(info.command);
if (command.items.length !== 1) {
throwUnsupported();
}
const item = command.items[0];
if (item.sequence.kind !== "pipeline" || item.isAsync) {
throwUnsupported();
}
const sequence = item.sequence;
if (sequence.negated) {
throwUnsupported();
}
if (sequence.inner.kind !== "command" || sequence.inner.redirect != null) {
throwUnsupported();
}
const innerCommand = sequence.inner.inner;
if (innerCommand.kind !== "simple") {
throwUnsupported();
}
if (innerCommand.envVars.length > 0) {
throwUnsupported();
}
return await evaluateArgs(innerCommand.args, context);
}
async function evaluateArgs(args, context) {
const result = [];
for (const arg of args) {
result.push(...await evaluateWordParts(arg, context));
}
return result;
}
async function evaluateWord(word, context) {
const result = await evaluateWordParts(word, context);
return result.join(" ");
}
async function evaluateWordParts(wordParts, context) {
const result = [];
for (const expanded of expandBraces(wordParts)) {
result.push(...await evaluateWordPartsInner(expanded, context, false));
}
return result;
}
function expandBraces(parts) {
let results = [[]];
for (const part of parts) {
if (part.kind === "brace") {
const expanded = part.value.flatMap((word) => expandBraces(word));
if (expanded.length === 0) {
continue;
}
const next = [];
for (const prefix of results) {
for (const alt of expanded) {
next.push([...prefix, ...alt]);
}
}
results = next;
} else {
for (const r of results) {
r.push(part);
}
}
}
return results;
}
async function evaluateWordPartsInner(wordParts, context, quoted) {
function hasGlobChar(text, questionGlob) {
for (let i = 0; i < text.length; i++) {
switch (text[i]) {
case "?":
if (questionGlob)
return true;
break;
case "*":
case "[":
return true;
default:
break;
}
}
return false;
}
function textPartsToString(textParts) {
return textParts.map((p) => p.value).join("");
}
async function evaluateWordText(textParts, isQuoted) {
const questionGlob = context.getShellOptions().questionGlob;
if (!isQuoted && textParts.some((part) => part.kind === "text" && hasGlobChar(part.value, questionGlob))) {
let currentText2 = "";
const globEscapeChar = common_js_12.isWindows ? "`" : "\\";
for (const textPart of textParts) {
switch (textPart.kind) {
case "quoted":
for (let i = 0; i < textPart.value.length; i++) {
const char = textPart.value[i];
switch (char) {
case "?":
case "*":
case "[":
case "]":
case "{":
case "}":
currentText2 += `${globEscapeChar}${char}`;
break;
default:
currentText2 += char;
break;
}
}
break;
case "text": {
const textPartValue = textPart.value.replaceAll("[]]", `${globEscapeChar}]`).replaceAll("[[]", `${globEscapeChar}[`);
for (let i = 0; i < textPartValue.length; i++) {
const char = textPartValue[i];
switch (char) {
case "?":
if (!questionGlob) {
currentText2 += `${globEscapeChar}${char}`;
} else {
currentText2 += char;
}
break;
case "{":
case "}":
currentText2 += `${globEscapeChar}${char}`;
break;
default:
currentText2 += char;
break;
}
}
break;
}
default: {
const _assertNever = textPart;
break;
}
}
}
const cwd = context.getCwd();
const shellOptions = context.getShellOptions();
const isAbsolute = path.isAbsolute(currentText2);
let patternText = currentText2;
if (!shellOptions.globstar && currentText2.includes("**")) {
while (patternText.includes("**")) {
patternText = patternText.replace("**", "*");
}
}
const pattern = isAbsolute ? patternText : path.join(cwd, patternText);
const entries = await Array.fromAsync((0, glob_js_1.expandGlob)(pattern, {
// be the same on all operating systems
caseInsensitive: true,
followSymlinks: false,
globstar: shellOptions.globstar,
root: cwd,
includeDirs: false
}));
entries.sort((a, b) => a.path < b.path ? -1 : a.path > b.path ? 1 : 0);
if (entries.length === 0) {
if (shellOptions.failglob) {
throw new ShellEvaluateError(`glob: no matches found '${pattern}' (run \`shopt -u failglob\` to pass unmatched glob patterns literally)`);
} else if (shellOptions.nullglob) {
return [];
} else {
return [textPartsToString(textParts)];
}
}
if (isAbsolute) {
return entries.map((e) => e.path);
} else {
return entries.map((e) => path.relative(cwd, e.path));
}
} else {
return [textPartsToString(textParts)];
}
}
const result = [];
let currentText = [];
for (const stringPart of wordParts) {
let evaluationResult = void 0;
switch (stringPart.kind) {
case "text":
currentText.push(stringPart);
break;
case "variable":
evaluationResult = context.getVar(stringPart.value);
break;
case "quoted": {
const text = (await evaluateWordPartsInner(stringPart.value, context, true)).join(" ");
currentText.push({
kind: "quoted",
value: text
});
continue;
}
case "tilde": {
const envVarName = common_js_12.isWindows ? "USERPROFILE" : "HOME";
const homeDirEnv = context.getVar(envVarName);
if (homeDirEnv == null) {
throw new Error(`Failed resolving home directory for tilde expansion ('${envVarName}' env var not set).`);
}
evaluationResult = homeDirEnv;
break;
}
case "command":
evaluationResult = await evaluateCommandSubstitution(stringPart.value, context);
break;
case "brace":
throw new Error("brace parts must be expanded before evaluation");
}
if (evaluationResult != null) {
const parts = evaluationResult.split(" ").map((t) => ({
kind: "text",
value: t.trim()
})).filter((t) => t.value.length > 0);
if (parts.length > 0) {
currentText.push(...parts.splice(0, 1));
if (parts.length > 0) {
result.push(...await evaluateWordText(currentText, quoted));
for (const part of parts.splice(0, parts.length - 1)) {
result.push(...await evaluateWordText([part], quoted));
}
currentText = parts;
}
}
}
}
if (currentText.length !== 0) {
result.push(...await evaluateWordText(currentText, quoted));
}
return result;
}
async function evaluateCommandSubstitution(list, context) {
const buffer = new buffer_js_1.Buffer();
const subContext = context.withInner({
stdout: new pipes_js_1.ShellPipeWriter("piped", buffer)
});
await executeSequentialList(list, subContext);
const text = new dntShim.TextDecoder().decode(buffer.bytes({ copy: false }));
return text.replace(/\s+/g, " ").trim();
}
function isDisposable(value) {
return value != null && typeof value[Symbol.dispose] === "function";
}
function isAsyncDisposable(value) {
return value != null && typeof value[Symbol.asyncDispose] === "function";
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/which.js
var require_which = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/commands/which.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.whichCommand = whichCommand;
exports2.parseArgs = parseArgs;
var common_js_12 = require_common();
var shell_js_1 = require_shell();
var args_js_1 = require_args();
async function whichCommand(context) {
try {
return await executeWhich(context);
} catch (err) {
return context.error(`which: ${(0, common_js_12.errorToString)(err)}`);
}
}
async function executeWhich(context) {
let flags;
try {
flags = parseArgs(context.args);
} catch (err) {
return await context.error(2, `which: ${(0, common_js_12.errorToString)(err)}`);
}
if (flags.commandName == null) {
return { code: 1 };
}
const path = await (0, shell_js_1.whichFromContext)(flags.commandName, {
getVar(key) {
return context.env[key];
}
});
if (path != null) {
await context.stdout.writeLine(path);
return { code: 0 };
} else {
return { code: 1 };
}
}
function parseArgs(args) {
let commandName;
for (const arg of (0, args_js_1.parseArgKinds)(args)) {
if (arg.kind === "Arg") {
if (commandName != null) {
throw Error("unsupported too many arguments");
}
commandName = arg.arg;
} else {
bailUnsupported(arg);
}
}
return {
commandName
};
}
function bailUnsupported(arg) {
switch (arg.kind) {
case "Arg":
throw Error(`unsupported argument: ${arg.arg}`);
case "ShortFlag":
throw Error(`unsupported flag: -${arg.arg}`);
case "LongFlag":
throw Error(`unsupported flag: --${arg.arg}`);
}
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/byteRingBuffer.js
var require_byteRingBuffer = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/byteRingBuffer.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.ByteRingBuffer = void 0;
var ByteRingBuffer = class {
capacity;
#buffer;
#size = 0;
/** Index of the next byte to write — equivalently, the oldest retained
* byte once the ring has wrapped. */
#head = 0;
constructor(capacity) {
this.capacity = Math.max(1, Math.floor(capacity));
this.#buffer = new Uint8Array(this.capacity);
}
get size() {
return this.#size;
}
push(data) {
if (data.length === 0)
return;
if (data.length >= this.capacity) {
this.#buffer.set(data.subarray(data.length - this.capacity), 0);
this.#size = this.capacity;
this.#head = 0;
return;
}
const tail = this.capacity - this.#head;
if (data.length <= tail) {
this.#buffer.set(data, this.#head);
} else {
this.#buffer.set(data.subarray(0, tail), this.#head);
this.#buffer.set(data.subarray(tail), 0);
}
this.#head = (this.#head + data.length) % this.capacity;
this.#size = Math.min(this.#size + data.length, this.capacity);
}
/** Return the retained bytes, oldest first, as a freshly allocated array. */
toBytes() {
const out = new Uint8Array(this.#size);
if (this.#size === 0)
return out;
const start = this.#size < this.capacity ? 0 : this.#head;
const tail = this.capacity - start;
if (this.#size <= tail) {
out.set(this.#buffer.subarray(start, start + this.#size));
} else {
out.set(this.#buffer.subarray(start, this.capacity), 0);
out.set(this.#buffer.subarray(0, this.#size - tail), tail);
}
return out;
}
};
exports2.ByteRingBuffer = ByteRingBuffer;
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/command.js
var require_command = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/command.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
var _a;
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.KillSignal = exports2.KillController = exports2.RawArg = exports2.CommandResult = exports2.ShellError = exports2.CommandChild = exports2.CommandBuilder = exports2.setCommandTextStateSymbol = exports2.getRegisteredCommandNamesSymbol = void 0;
exports2.parseAndSpawnCommand = parseAndSpawnCommand;
exports2.escapeArg = escapeArg;
exports2.rawArg = rawArg;
exports2.getSignalAbortCode = getSignalAbortCode;
exports2.template = template;
exports2.templateRaw = templateRaw;
var dntShim = __importStar2(require_dnt_shims());
var mod_js_12 = require_mod2();
var mod_js_22 = require_mod3();
var colors2 = __importStar2(require_colors());
var buffer_js_1 = require_buffer();
var reader_from_stream_reader_js_1 = require_reader_from_stream_reader();
var path = __importStar2(require("node:path"));
var node_url_1 = require("node:url");
var cat_js_1 = require_cat();
var cd_js_1 = require_cd();
var cpMv_js_1 = require_cpMv();
var echo_js_1 = require_echo();
var exit_js_1 = require_exit();
var export_js_1 = require_export();
var mkdir_js_1 = require_mkdir();
var printenv_js_1 = require_printenv();
var pwd_js_1 = require_pwd();
var rm_js_1 = require_rm();
var set_js_1 = require_set();
var shopt_js_1 = require_shopt();
var sleep_js_1 = require_sleep();
var test_js_1 = require_test();
var touch_js_1 = require_touch();
var unset_js_1 = require_unset();
var which_js_1 = require_which();
var common_js_12 = require_common();
var streams_js_1 = require_streams();
var byteRingBuffer_js_1 = require_byteRingBuffer();
var pipes_js_1 = require_pipes();
var shell_js_1 = require_shell();
var shell_js_2 = require_shell();
var Deferred = class {
#create;
constructor(create) {
this.#create = create;
}
create() {
return this.#create();
}
};
var textDecoder = new dntShim.TextDecoder();
var builtInCommands = {
cd: cd_js_1.cdCommand,
printenv: printenv_js_1.printEnvCommand,
echo: echo_js_1.echoCommand,
cat: cat_js_1.catCommand,
exit: exit_js_1.exitCommand,
export: export_js_1.exportCommand,
set: set_js_1.setCommand,
shopt: shopt_js_1.shoptCommand,
sleep: sleep_js_1.sleepCommand,
test: test_js_1.testCommand,
rm: rm_js_1.rmCommand,
mkdir: mkdir_js_1.mkdirCommand,
cp: cpMv_js_1.cpCommand,
mv: cpMv_js_1.mvCommand,
pwd: pwd_js_1.pwdCommand,
touch: touch_js_1.touchCommand,
true: () => ({ code: 0 }),
false: () => ({ code: 1 }),
// POSIX null command: discards its arguments and always exits 0
":": () => ({ code: 0 }),
unset: unset_js_1.unsetCommand,
which: which_js_1.whichCommand
};
exports2.getRegisteredCommandNamesSymbol = Symbol();
exports2.setCommandTextStateSymbol = Symbol();
var CommandBuilder = class {
#state = {
command: void 0,
combinedStdoutStderr: false,
stdin: "inherit",
stdout: {
kind: "inherit"
},
stderr: {
kind: "inherit"
},
tailDisplay: false,
errorTail: false,
noThrow: false,
env: {},
cwd: void 0,
commands: { ...builtInCommands },
clearEnv: false,
exportEnv: false,
printCommand: false,
printCommandLogger: new common_js_12.LoggerTreeBox(
// deno-lint-ignore no-console
(cmd) => console.error(colors2.white(">"), colors2.blue(cmd))
),
timeout: void 0,
signal: void 0,
encoding: void 0,
shellOptions: {},
beforeCommand: void 0,
beforeCommandSync: void 0
};
#getClonedState() {
const state = this.#state;
return {
// be explicit here in order to evaluate each property on a case by case basis
command: state.command,
combinedStdoutStderr: state.combinedStdoutStderr,
stdin: state.stdin,
stdout: {
kind: state.stdout.kind,
options: state.stdout.options
},
stderr: {
kind: state.stderr.kind,
options: state.stderr.options
},
tailDisplay: state.tailDisplay === false ? false : { ...state.tailDisplay },
errorTail: state.errorTail === false ? false : { ...state.errorTail },
noThrow: state.noThrow instanceof Array ? [...state.noThrow] : state.noThrow,
env: { ...state.env },
cwd: state.cwd,
commands: { ...state.commands },
clearEnv: state.clearEnv,
exportEnv: state.exportEnv,
printCommand: state.printCommand,
printCommandLogger: state.printCommandLogger.createChild(),
timeout: state.timeout,
signal: state.signal,
encoding: state.encoding,
shellOptions: { ...state.shellOptions },
beforeCommand: state.beforeCommand,
beforeCommandSync: state.beforeCommandSync
};
}
#newWithState(action) {
const builder = new _a();
const state = this.#getClonedState();
action(state);
builder.#state = state;
return builder;
}
/** Spawns the command and returns a promise resolving to the command result.
*
* Allows awaiting a `CommandBuilder` directly without calling `.spawn()`.
*/
then(onfulfilled, onrejected) {
const callerStack = captureCallerStack(this.then);
return this.#resolveStateForSpawn().then((state) => parseAndSpawnCommand(state, callerStack).then(onfulfilled).catch(onrejected));
}
/**
* Explicit way to spawn a command.
*
* This is an alias for awaiting the command builder or calling `.then(...)`
*/
spawn() {
if (this.#state.beforeCommand != null && this.#state.beforeCommand.length > 0) {
throw new Error(".spawn() cannot be used when .beforeCommand() hooks are registered; await the builder, call .then(), or use .beforeCommandSync() instead.");
}
const callerStack = captureCallerStack(this.spawn);
return parseAndSpawnCommand(this.#runSyncHooks(), callerStack);
}
#runSyncHooks() {
const callbacks = this.#state.beforeCommandSync;
if (callbacks == null || callbacks.length === 0) {
return this.#getClonedState();
}
let builder = this.#newWithState((state) => {
state.beforeCommandSync = void 0;
});
for (const cb of callbacks) {
const result = cb(builder);
if (result instanceof _a) {
builder = result;
}
}
return builder.#getClonedState();
}
async #resolveStateForSpawn() {
let builder;
{
const syncState = this.#runSyncHooks();
builder = new _a();
builder.#state = syncState;
}
const callbacks = this.#state.beforeCommand;
if (callbacks == null || callbacks.length === 0) {
return builder.#getClonedState();
}
builder = builder.#newWithState((state) => {
state.beforeCommand = void 0;
});
for (const cb of callbacks) {
const proxy = wrapCommandBuilderNonThenable(builder);
const result = await cb(proxy);
builder = unwrapCommandBuilder(result) ?? builder;
}
return builder.#getClonedState();
}
/**
* Register a command.
*/
registerCommand(command, handleFn) {
validateCommandName(command);
return this.#newWithState((state) => {
state.commands[command] = handleFn;
});
}
/**
* Register multilple commands.
*/
registerCommands(commands) {
let command = this;
for (const [key, value] of Object.entries(commands)) {
command = command.registerCommand(key, value);
}
return command;
}
/**
* Unregister a command.
*/
unregisterCommand(command) {
return this.#newWithState((state) => {
delete state.commands[command];
});
}
/** Sets the raw command to execute. */
command(command) {
return this.#newWithState((state) => {
if (command instanceof Array) {
command = command.map(escapeArg).join(" ");
}
state.command = {
text: command,
fds: void 0
};
});
}
noThrow(value, ...additional) {
return this.#newWithState((state) => {
if (typeof value === "boolean" || value == null) {
state.noThrow = value ?? true;
} else {
state.noThrow = [value, ...additional];
}
});
}
/** Registers a callback that runs just before each command is spawned.
*
* The callback receives the current builder and may return a (possibly
* modified) builder to use for the spawn. Useful for asynchronously
* resolving values such as auth tokens or env vars.
*
* ```ts
* $`./build.sh`.beforeCommand(async (builder) => {
* return builder.env("AUTH_TOKEN", await getAccessToken());
* });
* ```
*
* Multiple `.beforeCommand(...)` calls compose: each registered callback runs
* in the order it was added, with the builder produced by the previous one.
*
* The builder passed to the callback is in a special "passthrough" mode so
* its `.then(...)` resolves with the builder itself (instead of spawning) —
* this is what makes `return builder.env(...)` from an `async` function
* safe. If you construct a fresh `new CommandBuilder()` inside the callback,
* return it as `{ commandBuilder: ... }` to avoid an accidental spawn.
*
* Hooks are only resolved when the builder is awaited (or `.then()` is
* called). Calling `.spawn()` on a builder with registered hooks throws.
*/
beforeCommand(callback) {
return this.#newWithState((state) => {
state.beforeCommand = state.beforeCommand == null ? [callback] : [...state.beforeCommand, callback];
});
}
/** Synchronous variant of {@link beforeCommand}. Unlike `.beforeCommand`,
* sync hooks also run on the `.spawn()` path, so they're suitable when you
* need streaming via `.spawn().stdout()` etc.
*
* The callback must return synchronously (`CommandBuilder` or nothing). The
* thenable-unwrapping concern doesn't apply here because the return value
* never passes through Promise machinery — `return builder.env(...)` is just
* a function return.
*
* ```ts
* const child = $`./build.sh`
* .beforeCommandSync((builder) => builder.env("BUILD_ID", crypto.randomUUID()))
* .spawn();
* ```
*
* Sync hooks always run before async hooks during a single resolution pass.
*/
beforeCommandSync(callback) {
return this.#newWithState((state) => {
state.beforeCommandSync = state.beforeCommandSync == null ? [callback] : [...state.beforeCommandSync, callback];
});
}
/** Sets the signal that will be passed to all commands
* created with this command builder.
*
* Accepts a `KillSignal` or a standard `AbortSignal`. When an
* `AbortSignal` is provided it is internally bridged to a
* `KillSignal` that sends `SIGTERM` on abort.
*/
signal(signal) {
return this.#newWithState((state) => {
const killSignal = signal instanceof KillSignal ? signal : killSignalFromAbortSignal(signal);
if (state.signal != null) {
state.signal.linkChild(killSignal);
}
state.signal = killSignal;
});
}
/**
* Whether to capture a combined buffer of both stdout and stderr.
*
* This will set both stdout and stderr to "piped" if not already "piped"
* or "inheritPiped".
*/
captureCombined(value = true) {
return this.#newWithState((state) => {
state.combinedStdoutStderr = value;
if (value) {
if (state.stdout.kind !== "piped" && state.stdout.kind !== "inheritPiped") {
state.stdout.kind = "piped";
}
if (state.stderr.kind !== "piped" && state.stderr.kind !== "inheritPiped") {
state.stderr.kind = "piped";
}
}
});
}
/**
* Sets the stdin to use for the command.
*
* @remarks If multiple launches of a command occurs, then stdin will only be
* read from the first consumed reader or readable stream and error otherwise.
* For this reason, if you are setting stdin to something other than "inherit" or
* "null", then it's recommended to set this each time you spawn a command.
*/
stdin(reader) {
return this.#newWithState((state) => {
if (reader === "inherit" || reader === "null") {
state.stdin = reader;
} else if (reader instanceof Uint8Array) {
state.stdin = new Deferred(() => new buffer_js_1.Buffer(reader));
} else if (reader instanceof mod_js_12.Path) {
state.stdin = new Deferred(async () => {
const file = await reader.open();
return file.readable;
});
} else if (reader instanceof _a) {
state.stdin = new Deferred(() => {
return reader.stdout("piped").spawn().stdout();
});
} else if (isAwaitableReadable(reader)) {
const awaitable = reader;
state.stdin = new Deferred(async () => {
const body = await awaitable;
if (!(body?.readable instanceof dntShim.ReadableStream)) {
throw new TypeError("When passing an awaitable to stdin, the resolved value must have a `readable` ReadableStream.");
}
return body.readable;
});
} else {
state.stdin = new common_js_12.Box(reader);
}
});
}
/**
* Sets the stdin string to use for a command.
*
* @remarks See the remarks on stdin. The same applies here.
*/
stdinText(text) {
return this.stdin(new TextEncoder().encode(text));
}
stdout(kind, options) {
return this.#newWithState((state) => {
if (state.combinedStdoutStderr && kind !== "piped" && kind !== "inheritPiped") {
throw new TypeError("Cannot set stdout's kind to anything but 'piped' or 'inheritPiped' when combined is true.");
}
if (options?.signal != null) {
throw new TypeError("Setting a signal for a stdout WritableStream is not yet supported.");
}
state.stdout = {
kind,
options
};
});
}
stderr(kind, options) {
return this.#newWithState((state) => {
if (state.combinedStdoutStderr && kind !== "piped" && kind !== "inheritPiped") {
throw new TypeError("Cannot set stderr's kind to anything but 'piped' or 'inheritPiped' when combined is true.");
}
if (options?.signal != null) {
throw new TypeError("Setting a signal for a stderr WritableStream is not yet supported.");
}
state.stderr = {
kind,
options
};
});
}
tailDisplay(valueOrOptions = true) {
return this.#newWithState((state) => {
if (valueOrOptions === false) {
state.tailDisplay = false;
} else if (valueOrOptions === true) {
state.tailDisplay = {};
} else {
state.tailDisplay = { ...valueOrOptions };
}
});
}
errorTail(valueOrOptions = true) {
return this.#newWithState((state) => {
if (valueOrOptions === false) {
state.errorTail = false;
} else if (valueOrOptions === true) {
state.errorTail = {};
} else {
state.errorTail = { ...valueOrOptions };
}
});
}
/** Pipes the current command to the provided command returning the
* provided command builder. When chaining, it's important to call this
* after you are done configuring the current command or else you will
* start modifying the provided command instead.
*
* @example
* ```ts
* const lineCount = await $`echo 1 && echo 2`
* .pipe($`wc -l`)
* .text();
* ```
*/
pipe(builder) {
return builder.stdin(this.stdout("piped"));
}
env(nameOrItems, value) {
return this.#newWithState((state) => {
if (typeof nameOrItems === "string") {
setEnv(state, nameOrItems, value);
} else {
for (const [key, value2] of Object.entries(nameOrItems)) {
setEnv(state, key, value2);
}
}
});
function setEnv(state, key, value2) {
if (common_js_12.isWindows) {
key = key.toUpperCase();
}
state.env[key] = value2;
}
}
/** Sets the current working directory to use when executing this command. */
cwd(dirPath) {
return this.#newWithState((state) => {
state.cwd = dirPath instanceof URL ? (0, node_url_1.fileURLToPath)(dirPath) : dirPath instanceof mod_js_12.Path ? dirPath.resolve().toString() : path.resolve(dirPath);
});
}
/**
* Exports the environment of the command to the executing process.
*
* So for example, changing the directory in a command or exporting
* an environment variable will actually change the environment
* of the executing process.
*
* ```ts
* await $`cd src && export SOME_VALUE=5`;
* console.log(process.env["SOME_VALUE"]); // 5
* console.log(process.cwd()); // will be in the src directory
* ```
*/
exportEnv(value = true) {
return this.#newWithState((state) => {
state.exportEnv = value;
});
}
/**
* Clear environmental variables from parent process.
*
* Doesn't guarantee that only `env` variables are present, as the OS may
* set environmental variables for processes.
*/
clearEnv(value = true) {
return this.#newWithState((state) => {
state.clearEnv = value;
});
}
/**
* Prints the command text before executing the command.
*
* For example:
*
* ```ts
* const text = "example";
* await $`echo ${text}`.printCommand();
* ```
*
* Outputs:
*
* ```
* > echo example
* example
* ```
*/
printCommand(value = true) {
return this.#newWithState((state) => {
state.printCommand = value;
});
}
/**
* Mutates the command builder to change the logger used
* for `printCommand()`.
*/
setPrintCommandLogger(logger) {
this.#state.printCommandLogger.setValue(logger);
}
/**
* Ensures stdout and stderr are piped if they have the default behaviour or are inherited.
*
* ```ts
* // ensure both stdout and stderr is not logged to the console
* await $`echo 1`.quiet();
* // ensure stdout is not logged to the console
* await $`echo 1`.quiet("stdout");
* // ensure stderr is not logged to the console
* await $`echo 1`.quiet("stderr");
* ```
*/
quiet(kind = "combined") {
kind = kind === "both" ? "combined" : kind;
return this.#newWithState((state) => {
if (kind === "combined" || kind === "stdout") {
state.stdout.kind = getQuietKind(state.stdout.kind);
}
if (kind === "combined" || kind === "stderr") {
state.stderr.kind = getQuietKind(state.stderr.kind);
}
});
function getQuietKind(kind2) {
if (typeof kind2 === "object") {
return kind2;
}
switch (kind2) {
case "inheritPiped":
case "inherit":
return "piped";
case "null":
case "piped":
return kind2;
default: {
const _assertNever = kind2;
throw new TypeError(`Unhandled kind ${kind2}.`);
}
}
}
}
/**
* Specifies a timeout for the command. The command will exit with
* exit code `124` (timeout) if it times out.
*
* Note that when using `.noThrow()` this won't cause an error to
* be thrown when timing out.
*/
timeout(delay) {
return this.#newWithState((state) => {
state.timeout = delay == null ? void 0 : (0, common_js_12.delayToMs)(delay);
});
}
/**
* Sets stdout as quiet, spawns the command, and gets stdout as a Uint8Array.
*
* Shorthand for:
*
* ```ts
* const data = (await $`command`.quiet("stdout")).stdoutBytes;
* ```
*/
async bytes(kind = "stdout") {
const command = kind === "combined" ? this.quiet(kind).captureCombined() : this.quiet(kind);
return (await command)[`${kind}Bytes`];
}
/**
* Sets the text decoder encoding to use for decoding stdout and stderr.
*
* This can be useful when the command output uses a specific character encoding
* that differs from the default UTF-8 encoding.
*/
encoding(encoding) {
return this.#newWithState((state) => {
state.encoding = encoding;
});
}
/**
* Sets whether pipefail is enabled. When enabled, a pipeline's exit code
* is the rightmost non-zero exit code, or 0 if all commands succeed.
*
* ```ts
* // without pipefail (default): exit code is from the last command (grep)
* const code1 = await $`false | grep foo`.noThrow().code(); // 1 (grep's exit code)
*
* // with pipefail: exit code is from the first failing command
* const code2 = await $`false | grep foo`.pipefail().noThrow().code(); // 1 (false's exit code)
* ```
*/
pipefail(value = true) {
return this.#newWithState((state) => {
state.shellOptions.pipefail = value;
});
}
/**
* Sets whether nullglob is enabled. When enabled, a glob pattern that
* matches no files expands to nothing (empty) rather than being passed
* through literally.
*
* Note: This also disables failglob since nullglob and failglob are
* mutually exclusive behaviors.
*
* ```ts
* // without nullglob (default): passes pattern literally
* await $`echo *.nonexistent`; // outputs "*.nonexistent"
*
* // with nullglob: expands to nothing
* await $`echo *.nonexistent`.nullglob(); // outputs empty line
* ```
*/
nullglob(value = true) {
return this.#newWithState((state) => {
state.shellOptions.nullglob = value;
if (value) {
state.shellOptions.failglob = false;
}
});
}
/**
* Sets whether failglob is enabled. When enabled, a glob pattern
* that matches no files causes an error. When disabled (the default),
* unmatched patterns are passed through literally.
*
* ```ts
* // without failglob (default): passes pattern literally
* await $`echo *.nonexistent`; // outputs "*.nonexistent"
*
* // with failglob: throws error if no matches
* await $`echo *.nonexistent`.failglob(); // Error: glob: no matches found
* ```
*/
failglob(value = true) {
return this.#newWithState((state) => {
state.shellOptions.failglob = value;
});
}
/**
* Sets whether globstar is enabled. When enabled (the default), the pattern `**`
* used in a pathname expansion context will match all files and zero or more
* directories and subdirectories. When disabled, `**` is treated as `*`.
*
* ```ts
* // with globstar (default): ** matches recursively
* await $`echo **\/*.ts`; // matches all .ts files in all subdirectories
*
* // without globstar: ** is treated as *
* await $`echo **\/*.ts`.globstar(false); // matches only .ts files one level deep
* ```
*/
globstar(value = true) {
return this.#newWithState((state) => {
state.shellOptions.globstar = value;
});
}
/**
* Sets whether questionGlob is enabled. When enabled, `?` matches any
* single character in glob patterns. When disabled (the default), `?` is
* treated literally.
*
* This option is only available via the builder API, not via `shopt` or `set`.
*
* ```ts
* // without questionGlob (default): ? is literal
* await $`echo a?c`; // outputs "a?c"
*
* // with questionGlob: ? matches any single character
* await $`echo a?c`.questionGlob(); // matches files like "abc", "axc", etc.
* ```
*/
questionGlob(value = true) {
return this.#newWithState((state) => {
state.shellOptions.questionGlob = value;
});
}
/**
* Sets the provided stream (stdout by default) as quiet, spawns the command, and gets the stream as a string without the last newline.
* Can be used to get stdout, stderr, or both.
*
* Shorthand for:
*
* ```ts
* const data = (await $`command`.quiet("stdout")).stdout.replace(/\r?\n$/, "");
* ```
*/
async text(kind = "stdout") {
return (await this.#textRaw(kind)).replace(/\r?\n$/, "");
}
/**
* Gets the text as an array of lines.
*
* Lines are split the same way as {@link CommandBuilder.linesIter} (matches
* [Rust's `str::lines`](https://doc.rust-lang.org/std/primitive.str.html#method.lines)):
* line terminators are not included, a trailing blank line caused by a final
* line ending is excluded, and empty output yields no lines.
*/
async lines(kind = "stdout") {
return splitLines(await this.#textRaw(kind));
}
async #textRaw(kind) {
const command = kind === "combined" ? this.quiet(kind).captureCombined() : this.quiet(kind);
return (await command)[kind];
}
/**
* Streams the command's output and iterates over its lines without
* buffering everything into memory.
*
* Lines are split at `\n` or `\r\n`. Line terminators are not included.
* A trailing blank line caused by a final line ending is excluded (matches
* [Rust's `str::lines`](https://doc.rust-lang.org/std/primitive.str.html#method.lines)).
*
* If iteration is abandoned before the end of the output is reached, the
* child process is killed.
*
* ```ts
* for await (const line of $`cat big.txt`.linesIter()) {
* console.log(line);
* }
* ```
*/
linesIter(kind = "stdout") {
const child = this.quiet(kind).spawn();
return iterateLines(child, kind);
}
/**
* Sets stream (stdout by default) as quiet, spawns the command, and gets stream as JSON.
*
* Shorthand for:
*
* ```ts
* const data = (await $`command`.quiet("stdout")).stdoutJson;
* ```
*/
async json(kind = "stdout") {
return (await this.quiet(kind))[`${kind}Json`];
}
/**
* Helper to get the exit code without throwing on non-zero exit codes.
*
* Shorthand for:
*
* ```ts
* const code = (await $`command`.noThrow()).code;
* ```
*/
async code() {
const result = await this.noThrow();
return result.code;
}
/** @internal */
[exports2.getRegisteredCommandNamesSymbol]() {
return Object.keys(this.#state.commands);
}
/** @internal */
[exports2.setCommandTextStateSymbol](textState) {
return this.#newWithState((state) => {
state.command = textState;
});
}
};
exports2.CommandBuilder = CommandBuilder;
_a = CommandBuilder;
var CommandChild = class extends Promise {
#pipedStdoutBuffer;
#pipedStderrBuffer;
#killSignalController;
/** @internal */
constructor(executor, options = { pipedStderrBuffer: void 0, pipedStdoutBuffer: void 0, killSignalController: void 0 }) {
super(executor);
this.#pipedStdoutBuffer = options.pipedStdoutBuffer;
this.#pipedStderrBuffer = options.pipedStderrBuffer;
this.#killSignalController = options.killSignalController;
}
/** Send a signal to the executing command's child process. Note that SIGTERM,
* SIGKILL, SIGABRT, SIGQUIT, SIGINT, or SIGSTOP will cause the entire command
* to be considered "aborted" and if part of a command runs after this has occurred
* it will return a 124 exit code. Other signals will just be forwarded to the command.
*
* Defaults to "SIGTERM".
*/
kill(signal) {
this.#killSignalController?.kill(signal);
}
/** Returns a `ReadableStream` of the running child's stdout. Requires the
* stdout to have been set to `"piped"`. May only be consumed once. */
stdout() {
const buffer = this.#pipedStdoutBuffer;
this.#assertBufferStreamable("stdout", buffer);
this.#pipedStdoutBuffer = "consumed";
this.catch(() => {
});
return this.#bufferToStream(buffer);
}
/** Returns a `ReadableStream` of the running child's stderr. Requires the
* stderr to have been set to `"piped"`. May only be consumed once. */
stderr() {
const buffer = this.#pipedStderrBuffer;
this.#assertBufferStreamable("stderr", buffer);
this.#pipedStderrBuffer = "consumed";
this.catch(() => {
});
return this.#bufferToStream(buffer);
}
#assertBufferStreamable(name, buffer) {
if (buffer == null) {
throw new Error(`No pipe available. Ensure ${name} is "piped" (not "inheritPiped") and combinedOutput is not enabled.`);
}
if (buffer === "consumed") {
throw new Error(`Streamable ${name} was already consumed. Use the previously acquired stream instead.`);
}
}
#bufferToStream(buffer) {
const self = this;
return new dntShim.ReadableStream({
start(controller) {
buffer.setListener({
writeSync(data) {
controller.enqueue(data);
return data.length;
},
setError(err) {
controller.error(err);
},
close() {
controller.close();
}
});
},
cancel(_reason) {
self.kill();
}
});
}
};
exports2.CommandChild = CommandChild;
function parseAndSpawnCommand(state, callerStack) {
if (state.command == null) {
throw new Error("A command must be set before it can be spawned.");
}
if (state.printCommand) {
const tailHidesCommand = state.tailDisplay !== false && state.tailDisplay.header !== false;
if (!tailHidesCommand) {
state.printCommandLogger.getValue()(state.command.text);
}
}
const disposables = [];
const asyncDisposables = [];
const parentSignal = state.signal;
const killSignalController = new KillController();
if (parentSignal != null) {
const parentSignalListener = (signal2) => {
killSignalController.kill(signal2);
};
parentSignal.addListener(parentSignalListener);
if (parentSignal.aborted) {
killSignalController.kill("SIGTERM");
}
disposables.push({
[Symbol.dispose]() {
parentSignal.removeListener(parentSignalListener);
}
});
}
let timedOut = false;
if (state.timeout != null) {
const timeoutId = setTimeout(() => {
timedOut = true;
killSignalController.kill();
}, state.timeout);
disposables.push({
[Symbol.dispose]() {
clearTimeout(timeoutId);
}
});
}
const resolvedTailWriterOptions = state.tailDisplay !== false ? resolveTailWriterOptions(state.tailDisplay, state.command.text, Boolean(state.printCommand)) : void 0;
const [stdoutBuffer, stderrBuffer, combinedBuffer, tailWriters] = getBuffers();
const errorTail = state.errorTail;
const errorTailMaxBytes = errorTail === false ? 0 : errorTail.maxBytes ?? pipes_js_1.DEFAULT_ERROR_TAIL_BYTES;
const errorTailCombined = errorTail !== false && errorTail.combined === true;
const captureStdout = shouldCaptureForErrorTail(errorTail, "stdout", state.stdout.kind);
const captureStderr = shouldCaptureForErrorTail(errorTail, "stderr", state.stderr.kind);
let stdoutErrorRing;
let stderrErrorRing;
let combinedErrorRing;
if (errorTailCombined && (captureStdout || captureStderr)) {
combinedErrorRing = new byteRingBuffer_js_1.ByteRingBuffer(errorTailMaxBytes);
if (captureStdout)
stdoutErrorRing = combinedErrorRing;
if (captureStderr)
stderrErrorRing = combinedErrorRing;
} else {
if (captureStdout)
stdoutErrorRing = new byteRingBuffer_js_1.ByteRingBuffer(errorTailMaxBytes);
if (captureStderr)
stderrErrorRing = new byteRingBuffer_js_1.ByteRingBuffer(errorTailMaxBytes);
}
const tailEnabled = state.tailDisplay !== false;
const stdoutShellKind = resolveShellKind(state.stdout.kind, tailEnabled, stdoutErrorRing != null);
const stderrShellKind = resolveShellKind(state.stderr.kind, tailEnabled, stderrErrorRing != null);
const stdoutInner = stdoutBuffer === "null" ? new pipes_js_1.NullPipeWriter() : stdoutBuffer === "inherit" ? streams_js_1.stdout : stdoutBuffer;
const stderrInner = stderrBuffer === "null" ? new pipes_js_1.NullPipeWriter() : stderrBuffer === "inherit" ? streams_js_1.stderr : stderrBuffer;
const stdout = new pipes_js_1.ShellPipeWriter(stdoutShellKind, stdoutErrorRing != null ? wrapWithErrorTailCapture(stdoutInner, stdoutErrorRing) : stdoutInner);
const stderr = new pipes_js_1.ShellPipeWriter(stderrShellKind, stderrErrorRing != null ? wrapWithErrorTailCapture(stderrInner, stderrErrorRing) : stderrInner);
const { text: commandText, fds } = state.command;
const signal = killSignalController.signal;
return new CommandChild(async (resolve, reject) => {
try {
const list = (0, shell_js_1.parseCommand)(commandText);
const stdin = await takeStdin();
let code = await (0, shell_js_1.spawn)(list, {
stdin: stdin instanceof dntShim.ReadableStream ? (0, reader_from_stream_reader_js_1.readerFromStreamReader)(stdin.getReader()) : stdin,
stdout,
stderr,
env: buildEnv(state.env, state.clearEnv),
commands: state.commands,
cwd: state.cwd ?? process.cwd(),
exportEnv: state.exportEnv,
clearedEnv: state.clearEnv,
signal,
fds,
shellOptions: state.shellOptions
});
if (code !== 0) {
if (timedOut) {
code = 124;
}
const noThrow = state.noThrow instanceof Array ? state.noThrow.includes(code) : state.noThrow;
if (!noThrow) {
if (stdin instanceof dntShim.ReadableStream) {
if (!stdin.locked) {
stdin.cancel();
}
}
throw new ShellError({
exitCode: code,
timedOut,
aborted: signal.aborted,
stdoutRing: stdoutErrorRing,
stderrRing: stderrErrorRing,
combinedRing: combinedErrorRing
});
}
}
for (const tw of tailWriters)
tw.finalize();
const result = new CommandResult(code, finalizeCommandResultBuffer(stdoutBuffer), finalizeCommandResultBuffer(stderrBuffer), combinedBuffer instanceof buffer_js_1.Buffer ? combinedBuffer : void 0, state.encoding);
const maybeError = await cleanupDisposablesAndMaybeGetError(void 0);
if (maybeError) {
attachCallerStack(maybeError, callerStack);
reject(maybeError);
} else {
resolve(result);
}
} catch (err) {
for (const tw of tailWriters)
tw.finalizeForError();
finalizeCommandResultBufferForError(stdoutBuffer, err);
finalizeCommandResultBufferForError(stderrBuffer, err);
const rejectErr = await cleanupDisposablesAndMaybeGetError(err);
attachCallerStack(rejectErr, callerStack);
reject(rejectErr);
}
}, {
pipedStdoutBuffer: stdoutBuffer instanceof pipes_js_1.PipedBuffer ? stdoutBuffer : void 0,
pipedStderrBuffer: stderrBuffer instanceof pipes_js_1.PipedBuffer ? stderrBuffer : void 0,
killSignalController
});
async function cleanupDisposablesAndMaybeGetError(maybeError) {
const errors = [];
if (maybeError) {
errors.push(maybeError);
}
for (const disposable of disposables) {
try {
disposable[Symbol.dispose]();
} catch (err) {
errors.push(err);
}
}
if (asyncDisposables.length > 0) {
await Promise.all(asyncDisposables.map(async (d) => {
try {
await d[Symbol.asyncDispose]();
} catch (err) {
errors.push(err);
}
}));
}
if (errors.length === 1) {
return errors[0];
} else if (errors.length > 1) {
return new AggregateError(errors);
} else {
return void 0;
}
}
async function takeStdin() {
if (state.stdin instanceof common_js_12.Box) {
const stdin = state.stdin.value;
if (stdin === "consumed") {
throw new Error("Cannot spawn command. Stdin was already consumed when a previous command using the same stdin was spawned. You need to call `.stdin(...)` again with a new value before spawning.");
}
state.stdin.value = "consumed";
return stdin;
} else if (state.stdin instanceof Deferred) {
const stdin = await state.stdin.create();
if (stdin instanceof dntShim.ReadableStream) {
asyncDisposables.push({
async [Symbol.asyncDispose]() {
if (!stdin.locked) {
await stdin.cancel();
}
}
});
}
return stdin;
} else {
return state.stdin;
}
}
function getBuffers() {
const hasProgressBars = mod_js_22.staticText.hasText();
const tailOpts = resolvedTailWriterOptions;
const stdoutTail = tailOpts && canTail(state.stdout.kind) ? new pipes_js_1.InheritTailWriter(streams_js_1.stdout, tailOpts) : void 0;
const stderrTail = tailOpts && canTail(state.stderr.kind) ? stdoutTail != null ? new pipes_js_1.InheritTailWriter(streams_js_1.stderr, stdoutTail) : new pipes_js_1.InheritTailWriter(streams_js_1.stderr, tailOpts) : void 0;
const tailWriters2 = [];
if (stdoutTail != null)
tailWriters2.push(stdoutTail);
if (stderrTail != null)
tailWriters2.push(stderrTail);
const stdoutBuffer2 = getOutputBuffer(streams_js_1.stdout, state.stdout, stdoutTail);
const stderrBuffer2 = getOutputBuffer(streams_js_1.stderr, state.stderr, stderrTail);
if (state.combinedStdoutStderr) {
if (typeof stdoutBuffer2 === "string" || typeof stderrBuffer2 === "string") {
throw new Error("Internal programming error. Expected writers for stdout and stderr.");
}
const combinedBuffer2 = new buffer_js_1.Buffer();
return [
getCapturingBuffer(stdoutBuffer2, combinedBuffer2),
getCapturingBuffer(stderrBuffer2, combinedBuffer2),
combinedBuffer2,
tailWriters2
];
}
return [stdoutBuffer2, stderrBuffer2, void 0, tailWriters2];
function canTail(kind) {
return kind === "inherit" || kind === "inheritPiped";
}
function getCapturingBuffer(buffer, combinedBuffer2) {
if ("write" in buffer) {
return new pipes_js_1.CapturingBufferWriter(buffer, combinedBuffer2);
} else {
return new pipes_js_1.CapturingBufferWriterSync(buffer, combinedBuffer2);
}
}
function getOutputBuffer(inheritWriter, { kind, options }, tail) {
if (typeof kind === "object") {
if (kind instanceof mod_js_12.Path) {
const file = kind.openSync({ write: true, truncate: true, create: true });
disposables.push({
[Symbol.dispose]() {
file.close();
}
});
return file;
} else if (kind instanceof dntShim.WritableStream) {
const streamWriter = kind.getWriter();
asyncDisposables.push({
async [Symbol.asyncDispose]() {
streamWriter.releaseLock();
if (!options?.preventClose) {
try {
await kind.close();
} catch {
}
}
}
});
return writerFromStreamWriter(streamWriter);
} else {
return kind;
}
}
switch (kind) {
case "inherit":
if (tail != null) {
return tail;
} else if (hasProgressBars) {
return new pipes_js_1.InheritStaticTextBypassWriter(inheritWriter);
} else {
return "inherit";
}
case "piped":
return new pipes_js_1.PipedBuffer();
case "inheritPiped":
return new pipes_js_1.CapturingBufferWriterSync(tail ?? inheritWriter, new buffer_js_1.Buffer());
case "null":
return "null";
default: {
const _assertNever = kind;
throw new TypeError("Unhandled.");
}
}
}
}
function finalizeCommandResultBuffer(buffer) {
if (buffer instanceof pipes_js_1.CapturingBufferWriterSync || buffer instanceof pipes_js_1.CapturingBufferWriter) {
return buffer.getBuffer();
} else if (buffer instanceof pipes_js_1.InheritStaticTextBypassWriter) {
buffer.flush();
return "inherit";
} else if (buffer instanceof pipes_js_1.InheritTailWriter) {
return "inherit";
} else if (buffer instanceof pipes_js_1.PipedBuffer) {
buffer.close();
return buffer.getBuffer() ?? "streamed";
} else if (typeof buffer === "object") {
return "streamed";
} else {
return buffer;
}
}
function finalizeCommandResultBufferForError(buffer, error) {
if (buffer instanceof pipes_js_1.InheritStaticTextBypassWriter) {
buffer.flush();
} else if (buffer instanceof pipes_js_1.PipedBuffer) {
buffer.setError(error);
}
}
}
var ShellError = class extends Error {
name = "ShellError";
/** The process exit code. */
exitCode;
/** Whether the command was killed because its timeout elapsed. */
timedOut;
/** Whether the command was aborted via its kill signal. */
aborted;
/** Captured trailing stdout text from the error-tail ring buffer.
* Empty string when stdout was not captured (e.g. routed to the
* terminal, or errorTail disabled for stdout). */
stdout;
/** Captured trailing stderr text from the error-tail ring buffer.
* Empty string when stderr was not captured. */
stderr;
#cachedMessage;
#baseMessage;
/** @internal */
constructor(options) {
super();
this.exitCode = options.exitCode;
this.timedOut = options.timedOut;
this.aborted = options.aborted;
if (options.timedOut) {
this.#baseMessage = `Timed out with exit code: ${options.exitCode}`;
} else if (options.aborted) {
this.#baseMessage = `Aborted with exit code: ${options.exitCode}`;
} else {
this.#baseMessage = `Exited with code: ${options.exitCode}`;
}
if (options.combinedRing != null && options.combinedRing.size > 0) {
const combined = textDecoder.decode(options.combinedRing.toBytes());
this.stdout = combined;
this.stderr = combined;
} else {
this.stdout = options.stdoutRing != null && options.stdoutRing.size > 0 ? textDecoder.decode(options.stdoutRing.toBytes()) : "";
this.stderr = options.stderrRing != null && options.stderrRing.size > 0 ? textDecoder.decode(options.stderrRing.toBytes()) : "";
}
delete this.message;
}
get message() {
if (this.#cachedMessage == null) {
this.#cachedMessage = this.#baseMessage + formatErrorTailSuffix(this.stdout, this.stderr);
}
return this.#cachedMessage;
}
set message(value) {
this.#cachedMessage = value;
}
};
exports2.ShellError = ShellError;
var CommandResult = class {
#stdout;
#stderr;
#combined;
#textDecoder;
/** The exit code. */
code;
/** @internal */
constructor(code, stdout, stderr, combined, encoding) {
this.code = code;
this.#stdout = stdout;
this.#stderr = stderr;
this.#combined = combined;
this.#textDecoder = encoding ? new dntShim.TextDecoder(encoding) : textDecoder;
}
#memoizedStdout;
/** Raw decoded stdout text. */
get stdout() {
if (!this.#memoizedStdout) {
this.#memoizedStdout = this.#textDecoder.decode(this.stdoutBytes);
}
return this.#memoizedStdout;
}
#memoizedStdoutJson;
/**
* Stdout text as JSON.
*
* @remarks Will throw if it can't be parsed as JSON.
*/
get stdoutJson() {
if (this.#memoizedStdoutJson == null) {
this.#memoizedStdoutJson = JSON.parse(this.stdout);
}
return this.#memoizedStdoutJson;
}
/** Raw stdout bytes. */
get stdoutBytes() {
if (this.#stdout === "streamed") {
throw new Error(`Stdout was streamed to another source and is no longer available.`);
}
if (typeof this.#stdout === "string") {
throw new Error(`Stdout was not piped (was ${this.#stdout}). Call .stdout("piped") or .stdout("inheritPiped") when building the command.`);
}
return this.#stdout.bytes({ copy: false });
}
#memoizedStderr;
/** Raw decoded stdout text. */
get stderr() {
if (!this.#memoizedStderr) {
this.#memoizedStderr = this.#textDecoder.decode(this.stderrBytes);
}
return this.#memoizedStderr;
}
#memoizedStderrJson;
/**
* Stderr text as JSON.
*
* @remarks Will throw if it can't be parsed as JSON.
*/
get stderrJson() {
if (this.#memoizedStderrJson == null) {
this.#memoizedStderrJson = JSON.parse(this.stderr);
}
return this.#memoizedStderrJson;
}
/** Raw stderr bytes. */
get stderrBytes() {
if (this.#stderr === "streamed") {
throw new Error(`Stderr was streamed to another source and is no longer available.`);
}
if (typeof this.#stderr === "string") {
throw new Error(`Stderr was not piped (was ${this.#stderr}). Call .stderr("piped") or .stderr("inheritPiped") when building the command.`);
}
return this.#stderr.bytes({ copy: false });
}
#memoizedCombined;
/** Raw combined stdout and stderr text. */
get combined() {
if (!this.#memoizedCombined) {
this.#memoizedCombined = textDecoder.decode(this.combinedBytes);
}
return this.#memoizedCombined;
}
/** Raw combined stdout and stderr bytes. */
get combinedBytes() {
if (this.#combined == null) {
throw new Error("Stdout and stderr were not combined. Call .captureCombined() when building the command.");
}
return this.#combined.bytes({ copy: false });
}
};
exports2.CommandResult = CommandResult;
function shouldCaptureForErrorTail(errorTail, stream, kind) {
if (errorTail === false)
return false;
if (errorTail[stream] === false)
return false;
if (kind === "inherit" || kind === "inheritPiped")
return false;
return true;
}
function resolveShellKind(userKind, tailEnabled, errorTailEnabled) {
if (!tailEnabled && !errorTailEnabled)
return userKind;
if (userKind === "inherit")
return "inheritPiped";
if (userKind === "null" && errorTailEnabled)
return "piped";
return userKind;
}
function wrapWithErrorTailCapture(inner, ring) {
if ("write" in inner) {
return new pipes_js_1.ErrorTailCaptureWriter(inner, ring);
}
return new pipes_js_1.ErrorTailCaptureWriterSync(inner, ring);
}
function formatErrorTailSuffix(stdoutText, stderrText) {
if (stdoutText.length === 0 && stderrText.length === 0)
return "";
if (stdoutText === stderrText) {
return `
${stripTrailingNewline(stdoutText)}`;
}
let suffix = "";
if (stderrText.length > 0 && stdoutText.length > 0) {
suffix += `
stderr:
${stripTrailingNewline(stderrText)}`;
suffix += `
stdout:
${stripTrailingNewline(stdoutText)}`;
} else if (stderrText.length > 0) {
suffix += `
${stripTrailingNewline(stderrText)}`;
} else {
suffix += `
${stripTrailingNewline(stdoutText)}`;
}
return suffix;
}
function stripTrailingNewline(text) {
if (text.endsWith("\r\n"))
return text.slice(0, -2);
if (text.endsWith("\n"))
return text.slice(0, -1);
return text;
}
function resolveTailWriterOptions(display, command, promoteHeaderOnSuccess) {
const headerOpt = display.header;
let header;
let headerVerbatim = false;
if (headerOpt === false) {
header = void 0;
} else if (typeof headerOpt === "function") {
header = ({ size }) => headerOpt({ command, size });
headerVerbatim = true;
} else if (typeof headerOpt === "string") {
header = headerOpt;
headerVerbatim = true;
} else {
header = command;
}
return {
maxLines: display.maxLines,
header,
headerVerbatim,
errorHeader: command,
promoteHeaderOnSuccess
};
}
function buildEnv(env, clearEnv) {
const result = clearEnv ? {} : (0, common_js_12.getRealEnvVars)();
for (const [key, value] of Object.entries(env)) {
if (value == null) {
delete result[key];
} else {
result[key] = value;
}
}
return result;
}
function escapeArg(arg) {
if (/^[A-Za-z0-9]+$/.test(arg)) {
return arg;
} else {
return `'${arg.replaceAll("'", `'"'"'`)}'`;
}
}
var RawArg = class {
#value;
/** Creates a new `RawArg` wrapping the provided value. */
constructor(value) {
this.#value = value;
}
/** The wrapped value that will be used as-is during template substitution. */
get value() {
return this.#value;
}
};
exports2.RawArg = RawArg;
function rawArg(arg) {
return new RawArg(arg);
}
function validateCommandName(command) {
if (command.match(/^[a-zA-Z0-9-_]+$/) == null) {
throw new TypeError("Invalid command name");
}
}
var SHELL_SIGNAL_CTOR_SYMBOL = Symbol();
var KillController = class {
#state;
#killSignal;
constructor() {
this.#state = {
abortedCode: void 0,
listeners: []
};
this.#killSignal = new KillSignal(SHELL_SIGNAL_CTOR_SYMBOL, this.#state);
}
/** The associated `KillSignal` to attach to commands. */
get signal() {
return this.#killSignal;
}
/** Send a signal to the downstream child process. Note that SIGTERM,
* SIGKILL, SIGABRT, SIGQUIT, SIGINT, or SIGSTOP will cause all the commands
* to be considered "aborted" and will return a 124 exit code, while other
* signals will just be forwarded to the commands.
*/
kill(signal = "SIGTERM") {
sendSignalToState(this.#state, signal);
}
};
exports2.KillController = KillController;
var KillSignal = class {
#state;
/** @internal */
constructor(symbol, state) {
if (symbol !== SHELL_SIGNAL_CTOR_SYMBOL) {
throw new Error("Constructing instances of KillSignal is not permitted.");
}
this.#state = state;
}
/** Returns if the command signal has ever received a SIGTERM,
* SIGKILL, SIGABRT, SIGQUIT, SIGINT, or SIGSTOP
*/
get aborted() {
return this.#state.abortedCode !== void 0;
}
/** Gets the exit code to use if aborted. */
get abortedExitCode() {
return this.#state.abortedCode;
}
/**
* Causes the provided kill signal to be triggered when this
* signal receives a signal.
*/
linkChild(killSignal) {
const listener = (signal) => {
sendSignalToState(killSignal.#state, signal);
};
this.addListener(listener);
return {
unsubscribe: () => {
this.removeListener(listener);
}
};
}
/** Registers a listener that will be invoked whenever a signal is sent. */
addListener(listener) {
this.#state.listeners.push(listener);
}
/** Removes a previously registered listener. */
removeListener(listener) {
const index = this.#state.listeners.indexOf(listener);
if (index >= 0) {
this.#state.listeners.splice(index, 1);
}
}
};
exports2.KillSignal = KillSignal;
function killSignalFromAbortSignal(abortSignal) {
const controller = new KillController();
if (abortSignal.aborted) {
controller.kill("SIGTERM");
} else {
abortSignal.addEventListener("abort", () => {
controller.kill("SIGTERM");
}, { once: true });
}
return controller.signal;
}
function sendSignalToState(state, signal) {
const code = getSignalAbortCode(signal);
if (code !== void 0) {
state.abortedCode = code;
}
for (const listener of state.listeners) {
listener(signal);
}
}
function getSignalAbortCode(signal) {
switch (signal) {
case "SIGTERM":
return 128 + 15;
case "SIGKILL":
return 128 + 9;
case "SIGABRT":
return 128 + 6;
case "SIGQUIT":
return 128 + 3;
case "SIGINT":
return 128 + 2;
case "SIGSTOP":
return 128 + 19;
default:
return void 0;
}
}
function template(strings, exprs) {
return templateInner(strings, exprs, escapeArg);
}
function templateRaw(strings, exprs) {
return templateInner(strings, exprs, void 0);
}
function templateInner(strings, exprs, escape) {
let nextStreamFd = 3;
let text = "";
let streams;
const exprsCount = exprs.length;
for (let i = 0; i < Math.max(strings.length, exprs.length); i++) {
if (strings.length > i) {
text += strings[i];
}
if (exprs.length > i) {
try {
const expr = exprs[i];
if (expr == null) {
throw "Expression was null or undefined.";
}
const inputOrOutputRedirect = detectInputOrOutputRedirect(text);
if (inputOrOutputRedirect === "<") {
if (expr instanceof mod_js_12.Path) {
text += templateLiteralExprToString(expr, escape);
} else if (typeof expr === "string") {
handleReadableStream(() => new dntShim.ReadableStream({
start(controller) {
controller.enqueue(new TextEncoder().encode(expr));
controller.close();
}
}));
} else if (expr instanceof dntShim.ReadableStream) {
handleReadableStream(() => expr);
} else if (expr?.[common_js_12.symbols.readable]) {
handleReadableStream(() => {
const stream = expr[common_js_12.symbols.readable]?.();
if (!(stream instanceof dntShim.ReadableStream)) {
throw new TypeError(`Expected a ReadableStream or an object with a [$.symbols.readable] method that returns a ReadableStream at expression ${i + 1}/${exprsCount}.`);
}
return stream;
});
} else if (expr instanceof mod_js_12.FsFileWrapper) {
handleReadableStream(() => expr.readable);
} else if (expr instanceof Uint8Array) {
handleReadableStream(() => {
return new dntShim.ReadableStream({
start(controller) {
controller.enqueue(expr);
controller.close();
}
});
});
} else if (expr instanceof Response) {
handleReadableStream(() => {
return expr.body ?? new dntShim.ReadableStream({
start(controller) {
controller.close();
}
});
});
} else if (expr instanceof Function) {
handleReadableStream(() => {
try {
const result = expr();
if (!(result instanceof dntShim.ReadableStream)) {
throw new TypeError("Function did not return a ReadableStream.");
}
return result;
} catch (err) {
throw new Error(`Error getting ReadableStream from function at expression ${i + 1}/${exprsCount}. ${(0, common_js_12.errorToString)(err)}`);
}
});
} else {
throw new TypeError("Unsupported object provided to input redirect.");
}
} else if (inputOrOutputRedirect === ">") {
if (expr instanceof mod_js_12.Path) {
text += templateLiteralExprToString(expr, escape);
} else if (expr instanceof dntShim.WritableStream) {
handleWritableStream(() => expr);
} else if (expr instanceof Uint8Array) {
let pos = 0;
handleWritableStream(() => {
return new dntShim.WritableStream({
write(chunk) {
const nextPos = chunk.length + pos;
if (nextPos > expr.length) {
const chunkLength = expr.length - pos;
expr.set(chunk.slice(0, chunkLength), pos);
throw new Error(`Overflow writing ${nextPos} bytes to Uint8Array (length: ${exprsCount}).`);
}
expr.set(chunk, pos);
pos = nextPos;
}
});
});
} else if (expr instanceof mod_js_12.FsFileWrapper) {
handleWritableStream(() => expr.writable);
} else if (expr?.[common_js_12.symbols.writable]) {
handleWritableStream(() => {
const stream = expr[common_js_12.symbols.writable]?.();
if (!(stream instanceof dntShim.WritableStream)) {
throw new TypeError(`Expected a WritableStream or an object with a [$.symbols.writable] method that returns a WritableStream at expression ${i + 1}/${exprsCount}.`);
}
return stream;
});
} else if (expr instanceof Function) {
handleWritableStream(() => {
try {
const result = expr();
if (!(result instanceof dntShim.WritableStream)) {
throw new TypeError("Function did not return a WritableStream.");
}
return result;
} catch (err) {
throw new Error(`Error getting WritableStream from function at expression ${i + 1}/${exprsCount}. ${(0, common_js_12.errorToString)(err)}`);
}
});
} else if (typeof expr === "string") {
throw new TypeError("Cannot provide strings to output redirects. Did you mean to provide a path instead via the `$.path(...)` API?");
} else {
throw new TypeError("Unsupported object provided to output redirect.");
}
} else {
text += templateLiteralExprToString(expr, escape);
}
} catch (err) {
const startMessage = exprsCount === 1 ? "Failed resolving expression in command." : `Failed resolving expression ${i + 1}/${exprsCount} in command.`;
const message = `${startMessage} ${(0, common_js_12.errorToString)(err)}`;
if (err instanceof TypeError) {
throw new TypeError(message);
} else {
throw new Error(message);
}
}
}
}
return {
text,
fds: streams
};
function handleReadableStream(createStream) {
streams ??= new shell_js_2.StreamFds();
const fd = nextStreamFd++;
streams.insertReader(fd, () => {
const reader = createStream().getReader();
return {
...(0, reader_from_stream_reader_js_1.readerFromStreamReader)(reader),
[Symbol.dispose]() {
reader.releaseLock();
}
};
});
text = text.trimEnd() + "&" + fd;
}
function handleWritableStream(createStream) {
streams ??= new shell_js_2.StreamFds();
const fd = nextStreamFd++;
streams.insertWriter(fd, () => {
const stream = createStream();
const writer = stream.getWriter();
return {
...writerFromStreamWriter(writer),
async [Symbol.asyncDispose]() {
writer.releaseLock();
try {
await stream.close();
} catch {
}
}
};
});
text = text.trimEnd() + "&" + fd;
}
}
function detectInputOrOutputRedirect(text) {
text = text.trimEnd();
if (text.endsWith(">")) {
return ">";
} else if (text.endsWith("<")) {
return "<";
} else {
return void 0;
}
}
function templateLiteralExprToString(expr, escape) {
let result;
if (typeof expr === "string") {
result = expr;
} else if (expr instanceof Array) {
return expr.map((e) => templateLiteralExprToString(e, escape)).join(" ");
} else if (expr instanceof CommandResult) {
result = expr.stdout.replace(/\r?\n$/, "");
} else if (expr instanceof CommandBuilder) {
throw new TypeError("Providing a command builder is not yet supported (https://github.com/dsherret/dax/issues/239). Await the command builder's text before using it in an expression (ex. await $`cmd`.text()).");
} else if (expr instanceof RawArg) {
return templateLiteralExprToString(expr.value, void 0);
} else if (typeof expr === "object" && expr.toString === Object.prototype.toString) {
if (expr instanceof Promise) {
throw new TypeError("Provided object was a Promise. Please await it before providing it.");
} else {
throw new TypeError("Provided object does not override `toString()`.");
}
} else {
result = `${expr}`;
}
return escape ? escape(result) : result;
}
function writerFromStreamWriter(streamWriter) {
return {
async write(p) {
await streamWriter.ready;
await streamWriter.write(p);
return p.length;
}
};
}
function isAwaitableReadable(value) {
return value != null && (typeof value === "object" || typeof value === "function") && typeof value.then === "function";
}
function captureCallerStack(skipUpTo) {
const captureFn = Error.captureStackTrace;
if (captureFn == null) {
return new Error().stack;
}
const holder = {};
captureFn(holder, skipUpTo);
return holder.stack;
}
var proxyToCommandBuilder = /* @__PURE__ */ new WeakMap();
function wrapCommandBuilderNonThenable(builder) {
const proxy = new Proxy(builder, {
get(target, prop, _receiver) {
if (prop === "then")
return void 0;
const value = Reflect.get(target, prop, target);
if (typeof value === "function") {
return (...args) => {
const result = value.apply(target, args);
if (result instanceof CommandBuilder) {
return wrapCommandBuilderNonThenable(result);
}
return result;
};
}
return value;
}
});
proxyToCommandBuilder.set(proxy, builder);
return proxy;
}
function unwrapCommandBuilder(result) {
if (!(result instanceof CommandBuilder))
return void 0;
return proxyToCommandBuilder.get(result) ?? result;
}
function attachCallerStack(err, callerStack) {
if (callerStack == null || !(err instanceof Error)) {
return;
}
const newlineIdx = callerStack.indexOf("\n");
if (newlineIdx === -1)
return;
const frames = callerStack.slice(newlineIdx + 1);
if (frames.length === 0)
return;
err.stack = err.stack == null ? frames : `${err.stack}
${frames}`;
}
function splitLines(text) {
const lines = [];
let start = 0;
while (true) {
const nl = text.indexOf("\n", start);
if (nl === -1)
break;
const end = nl > start && text.charCodeAt(nl - 1) === 13 ? nl - 1 : nl;
lines.push(text.substring(start, end));
start = nl + 1;
}
if (start < text.length)
lines.push(text.substring(start));
return lines;
}
async function* iterateLines(child, kind) {
const stream = kind === "stdout" ? child.stdout() : child.stderr();
const reader = stream.getReader();
const decoder = new dntShim.TextDecoder();
let buffer = "";
let completed = false;
try {
while (true) {
const { done, value } = await reader.read();
if (done)
break;
if (value.length === 0)
continue;
buffer += decoder.decode(value, { stream: true });
let start = 0;
while (true) {
const nl = buffer.indexOf("\n", start);
if (nl === -1)
break;
const end = nl > start && buffer.charCodeAt(nl - 1) === 13 ? nl - 1 : nl;
yield buffer.substring(start, end);
start = nl + 1;
}
if (start > 0)
buffer = buffer.substring(start);
}
buffer += decoder.decode();
if (buffer !== "")
yield buffer;
completed = true;
} finally {
try {
await reader.cancel();
} catch {
}
if (!completed) {
child.kill();
try {
await child;
} catch {
}
} else {
await child;
}
}
}
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/src/dollar.js
var require_dollar = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/src/dollar.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.$ = void 0;
exports2.build$ = build$2;
var command_js_1 = require_command();
var common_js_12 = require_common();
function build$FromState2(state) {
const tag = (strings, ...exprs) => state.commandBuilder.getValue()[command_js_1.setCommandTextStateSymbol]((0, command_js_1.template)(strings, exprs));
const result = Object.assign(tag, {
escapeArg: command_js_1.escapeArg,
rawArg: command_js_1.rawArg,
raw(strings, ...exprs) {
return state.commandBuilder.getValue()[command_js_1.setCommandTextStateSymbol]((0, command_js_1.templateRaw)(strings, exprs));
},
build$(opts = {}) {
return build$FromState2({
commandBuilder: resolveCommandBuilder(opts.commandBuilder, state.commandBuilder),
extras: { ...state.extras, ...opts.extras }
});
}
}, state.extras ?? {});
return result;
}
function resolveCommandBuilder(value, parent) {
if (value instanceof command_js_1.CommandBuilder) {
return new common_js_12.TreeBox(value);
} else if (typeof value === "function") {
const base = parent != null ? parent.getValue() : new command_js_1.CommandBuilder();
return new common_js_12.TreeBox(value(base));
} else {
return parent != null ? parent.createChild() : new common_js_12.TreeBox(new command_js_1.CommandBuilder());
}
}
function build$2(opts = {}) {
return build$FromState2({
commandBuilder: resolveCommandBuilder(opts.commandBuilder, void 0),
extras: opts.extras
});
}
exports2.$ = build$2();
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/mod.js
var require_mod4 = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/mod.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.Path = exports2.FsFileWrapper = exports2.delayToMs = exports2.open = exports2.FsFile = exports2.create = exports2.build$ = exports2.$ = exports2.stdout = exports2.stdin = exports2.stderr = exports2.createExecutableCommand = exports2.whichRealEnv = exports2.WhichEnv = exports2.ShellError = exports2.rawArg = exports2.RawArg = exports2.KillSignal = exports2.KillController = exports2.escapeArg = exports2.CommandResult = exports2.CommandChild = exports2.CommandBuilder = void 0;
var command_js_1 = require_command();
Object.defineProperty(exports2, "CommandBuilder", { enumerable: true, get: function() {
return command_js_1.CommandBuilder;
} });
Object.defineProperty(exports2, "CommandChild", { enumerable: true, get: function() {
return command_js_1.CommandChild;
} });
Object.defineProperty(exports2, "CommandResult", { enumerable: true, get: function() {
return command_js_1.CommandResult;
} });
Object.defineProperty(exports2, "escapeArg", { enumerable: true, get: function() {
return command_js_1.escapeArg;
} });
Object.defineProperty(exports2, "KillController", { enumerable: true, get: function() {
return command_js_1.KillController;
} });
Object.defineProperty(exports2, "KillSignal", { enumerable: true, get: function() {
return command_js_1.KillSignal;
} });
Object.defineProperty(exports2, "RawArg", { enumerable: true, get: function() {
return command_js_1.RawArg;
} });
Object.defineProperty(exports2, "rawArg", { enumerable: true, get: function() {
return command_js_1.rawArg;
} });
Object.defineProperty(exports2, "ShellError", { enumerable: true, get: function() {
return command_js_1.ShellError;
} });
var shell_js_1 = require_shell();
Object.defineProperty(exports2, "WhichEnv", { enumerable: true, get: function() {
return shell_js_1.WhichEnv;
} });
Object.defineProperty(exports2, "whichRealEnv", { enumerable: true, get: function() {
return shell_js_1.whichRealEnv;
} });
var executable_js_1 = require_executable();
Object.defineProperty(exports2, "createExecutableCommand", { enumerable: true, get: function() {
return executable_js_1.createExecutableCommand;
} });
var streams_js_1 = require_streams();
Object.defineProperty(exports2, "stderr", { enumerable: true, get: function() {
return streams_js_1.stderr;
} });
Object.defineProperty(exports2, "stdin", { enumerable: true, get: function() {
return streams_js_1.stdin;
} });
Object.defineProperty(exports2, "stdout", { enumerable: true, get: function() {
return streams_js_1.stdout;
} });
var dollar_js_1 = require_dollar();
Object.defineProperty(exports2, "$", { enumerable: true, get: function() {
return dollar_js_1.$;
} });
Object.defineProperty(exports2, "build$", { enumerable: true, get: function() {
return dollar_js_1.build$;
} });
var dollar_js_2 = require_dollar();
exports2.default = dollar_js_2.$;
var fsFile_js_1 = require_fsFile();
Object.defineProperty(exports2, "create", { enumerable: true, get: function() {
return fsFile_js_1.create;
} });
Object.defineProperty(exports2, "FsFile", { enumerable: true, get: function() {
return fsFile_js_1.FsFile;
} });
Object.defineProperty(exports2, "open", { enumerable: true, get: function() {
return fsFile_js_1.open;
} });
var common_js_12 = require_common();
Object.defineProperty(exports2, "delayToMs", { enumerable: true, get: function() {
return common_js_12.delayToMs;
} });
var mod_js_12 = require_mod2();
Object.defineProperty(exports2, "FsFileWrapper", { enumerable: true, get: function() {
return mod_js_12.FsFileWrapper;
} });
Object.defineProperty(exports2, "Path", { enumerable: true, get: function() {
return mod_js_12.Path;
} });
}
});
// npm/script/deps/jsr.io/@david/shell/0.6.0/internal.js
var require_internal = __commonJS({
"npm/script/deps/jsr.io/@david/shell/0.6.0/internal.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.TreeBox = exports2.symbols = exports2.LoggerTreeBox = exports2.Box = exports2.templateRaw = exports2.template = exports2.setCommandTextStateSymbol = exports2.getRegisteredCommandNamesSymbol = void 0;
var command_js_1 = require_command();
Object.defineProperty(exports2, "getRegisteredCommandNamesSymbol", { enumerable: true, get: function() {
return command_js_1.getRegisteredCommandNamesSymbol;
} });
Object.defineProperty(exports2, "setCommandTextStateSymbol", { enumerable: true, get: function() {
return command_js_1.setCommandTextStateSymbol;
} });
Object.defineProperty(exports2, "template", { enumerable: true, get: function() {
return command_js_1.template;
} });
Object.defineProperty(exports2, "templateRaw", { enumerable: true, get: function() {
return command_js_1.templateRaw;
} });
var common_js_12 = require_common();
Object.defineProperty(exports2, "Box", { enumerable: true, get: function() {
return common_js_12.Box;
} });
Object.defineProperty(exports2, "LoggerTreeBox", { enumerable: true, get: function() {
return common_js_12.LoggerTreeBox;
} });
Object.defineProperty(exports2, "symbols", { enumerable: true, get: function() {
return common_js_12.symbols;
} });
Object.defineProperty(exports2, "TreeBox", { enumerable: true, get: function() {
return common_js_12.TreeBox;
} });
}
});
// npm/script/src/common.js
var require_common2 = __commonJS({
"npm/script/src/common.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.TimeoutError = void 0;
exports2.delayToIterator = delayToIterator;
exports2.formatMillis = formatMillis;
exports2.filterEmptyRecordValues = filterEmptyRecordValues;
exports2.getFileNameFromUrl = getFileNameFromUrl;
var mod_js_12 = require_mod4();
var TimeoutError = class extends Error {
constructor(message) {
super(message);
}
get name() {
return "TimeoutError";
}
};
exports2.TimeoutError = TimeoutError;
function delayToIterator(delay) {
if (typeof delay !== "number" && typeof delay !== "string") {
return delay;
}
const ms = (0, mod_js_12.delayToMs)(delay);
return {
next() {
return ms;
}
};
}
function formatMillis(ms) {
if (ms < 1e3) {
return `${formatValue(ms)} millisecond${ms === 1 ? "" : "s"}`;
} else if (ms < 60 * 1e3) {
const s = ms / 1e3;
return `${formatValue(s)} ${pluralize("second", s)}`;
} else {
const mins = ms / 60 / 1e3;
return `${formatValue(mins)} ${pluralize("minute", mins)}`;
}
function formatValue(value) {
const text = value.toFixed(2);
if (text.endsWith(".00")) {
return value.toFixed(0);
} else if (text.endsWith("0")) {
return value.toFixed(1);
} else {
return text;
}
}
function pluralize(text, value) {
const suffix = value === 1 ? "" : "s";
return text + suffix;
}
}
function filterEmptyRecordValues(record) {
const result = {};
for (const [key, value] of Object.entries(record)) {
if (value != null) {
result[key] = value;
}
}
return result;
}
function getFileNameFromUrl(url) {
const parsedUrl = url instanceof URL ? url : new URL(url);
const fileName = parsedUrl.pathname.split("/").at(-1);
return fileName?.length === 0 ? void 0 : fileName;
}
}
});
// npm/script/src/console/logger.js
var require_logger = __commonJS({
"npm/script/src/console/logger.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.logger = exports2.LoggerRefreshItemKind = void 0;
var utils_js_1 = require_utils();
var mod_js_12 = require_mod3();
var staticTextScope = mod_js_12.staticText.createScope();
var _renderScope = mod_js_12.renderInterval.start();
var LoggerRefreshItemKind;
(function(LoggerRefreshItemKind2) {
LoggerRefreshItemKind2[LoggerRefreshItemKind2["ProgressBars"] = 0] = "ProgressBars";
LoggerRefreshItemKind2[LoggerRefreshItemKind2["Selection"] = 1] = "Selection";
})(LoggerRefreshItemKind || (exports2.LoggerRefreshItemKind = LoggerRefreshItemKind = {}));
var refreshItems = {
[LoggerRefreshItemKind.ProgressBars]: void 0,
[LoggerRefreshItemKind.Selection]: void 0
};
function setItems(kind, items, size) {
refreshItems[kind] = items;
refresh(size);
}
function refresh(size) {
if (!utils_js_1.isOutputTty) {
return;
}
const items = Object.values(refreshItems).flatMap((items2) => items2 ?? []);
staticTextScope.setText(items);
mod_js_12.staticText.refresh(size);
}
var logger = {
setItems,
logOnce(items, size) {
staticTextScope.logAbove(items, size);
},
withTempClear(action) {
mod_js_12.staticText.withTempClear(action);
}
};
exports2.logger = logger;
}
});
// npm/script/src/console/ttyFallback.js
var require_ttyFallback = __commonJS({
"npm/script/src/console/ttyFallback.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
var __importDefault = exports2 && exports2.__importDefault || function(mod) {
return mod && mod.__esModule ? mod : { "default": mod };
};
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.ttyStdin = void 0;
exports2.hasFallbackTty = hasFallbackTty;
var fs = __importStar2(require("node:fs"));
var tty = __importStar2(require("node:tty"));
var node_process_1 = __importDefault(require("node:process"));
var cached;
function tryOpen() {
if (cached !== void 0)
return cached;
try {
const path = node_process_1.default.platform === "win32" ? "\\\\.\\CONIN$" : "/dev/tty";
const fd = fs.openSync(path, "r+");
const stream = new tty.ReadStream(fd);
cached = { fd, stream };
} catch {
cached = null;
}
return cached;
}
function hasFallbackTty() {
return tryOpen() != null;
}
exports2.ttyStdin = {
read(p, options) {
const signal = options?.signal;
signal?.throwIfAborted();
const handle = tryOpen();
if (handle == null)
return Promise.reject(new Error("No controlling terminal available."));
return readTty(handle.stream, p, signal);
},
setRaw(mode) {
const handle = tryOpen();
if (handle == null)
return;
handle.stream.setRawMode(mode);
}
};
function readTty(stream, p, signal) {
return new Promise((resolve, reject) => {
const onReadable = () => {
const chunk = stream.read();
if (chunk === null)
return;
cleanup();
const len = Math.min(chunk.length, p.length);
p.set(chunk.subarray(0, len));
if (chunk.length > len)
stream.unshift(chunk.subarray(len));
resolve(len);
};
const onEnd = () => {
cleanup();
resolve(null);
};
const onError = (err) => {
cleanup();
reject(err);
};
const onAbort = () => {
cleanup();
reject(signal.reason);
};
const cleanup = () => {
stream.off("readable", onReadable);
stream.off("end", onEnd);
stream.off("error", onError);
signal?.removeEventListener("abort", onAbort);
};
stream.on("readable", onReadable);
stream.on("end", onEnd);
stream.on("error", onError);
signal?.addEventListener("abort", onAbort, { once: true });
onReadable();
});
}
}
});
// npm/script/src/console/utils.js
var require_utils = __commonJS({
"npm/script/src/console/utils.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.SelectionItem = exports2.isOutputTty = exports2.Keys = void 0;
exports2.readKeys = readKeys;
exports2.hideCursor = hideCursor;
exports2.showCursor = showCursor;
exports2.setNotTtyForTesting = setNotTtyForTesting;
exports2.resultOrExit = resultOrExit;
exports2.undefinedOnAbort = undefinedOnAbort;
exports2.createSelection = createSelection;
var dntShim = __importStar2(require_dnt_shims());
var logger_js_1 = require_logger();
var mod_js_12 = require_mod3();
var mod_js_22 = require_mod4();
var ttyFallback_js_1 = require_ttyFallback();
var encoder = new TextEncoder();
function resolvePromptInput() {
if (isTerminal(mod_js_22.stdin))
return mod_js_22.stdin;
if ((0, ttyFallback_js_1.hasFallbackTty)())
return ttyFallback_js_1.ttyStdin;
return void 0;
}
var Keys;
(function(Keys2) {
Keys2[Keys2["Up"] = 0] = "Up";
Keys2[Keys2["Down"] = 1] = "Down";
Keys2[Keys2["Left"] = 2] = "Left";
Keys2[Keys2["Right"] = 3] = "Right";
Keys2[Keys2["Enter"] = 4] = "Enter";
Keys2[Keys2["Space"] = 5] = "Space";
Keys2[Keys2["Backspace"] = 6] = "Backspace";
})(Keys || (exports2.Keys = Keys = {}));
async function* readKeys(reader, signal) {
const decoder = new dntShim.TextDecoder();
while (true) {
const buf = new Uint8Array(8);
const byteCount = await reader.read(buf, { signal });
if (byteCount == null) {
break;
}
if (byteCount === 3) {
if (buf[0] === 27 && buf[1] === 91) {
if (buf[2] === 65) {
yield Keys.Up;
continue;
} else if (buf[2] === 66) {
yield Keys.Down;
continue;
} else if (buf[2] === 67) {
yield Keys.Right;
continue;
} else if (buf[2] === 68) {
yield Keys.Left;
continue;
}
}
} else if (byteCount === 1) {
if (buf[0] === 3) {
break;
} else if (buf[0] === 13) {
yield Keys.Enter;
continue;
} else if (buf[0] === 14) {
yield Keys.Down;
continue;
} else if (buf[0] === 16) {
yield Keys.Up;
continue;
} else if (buf[0] === 32) {
yield Keys.Space;
continue;
} else if (buf[0] === 127) {
yield Keys.Backspace;
continue;
}
}
const text = (0, mod_js_12.stripAnsiCodes)(decoder.decode(buf.slice(0, byteCount ?? 0), { stream: true }));
if (text.length > 0) {
yield text;
}
}
}
function hideCursor() {
mod_js_22.stderr.writeSync(encoder.encode("\x1B[?25l"));
}
function showCursor() {
mod_js_22.stderr.writeSync(encoder.encode("\x1B[?25h"));
}
exports2.isOutputTty = (0, mod_js_12.maybeConsoleSize)() != null && isTerminal(mod_js_22.stderr);
function setNotTtyForTesting() {
exports2.isOutputTty = false;
}
function isTerminal(pipe) {
if (typeof pipe.isTerminal === "function") {
return pipe.isTerminal();
} else {
throw new Error("Unsupported pipe.");
}
}
function resultOrExit(result) {
if (result == null) {
process.exit(130);
} else {
return result;
}
}
function undefinedOnAbort(signal, p) {
if (signal == null)
return p;
return p.catch((err) => {
if (signal.aborted && err === signal.reason)
return void 0;
throw err;
});
}
var SelectionItem = class {
index;
value;
constructor(index, value) {
this.index = index;
this.value = value;
}
[Symbol.toPrimitive](hint) {
return hint === "string" ? String(this.index) : this.index;
}
toString() {
return String(this.index);
}
valueOf() {
return this.index;
}
};
exports2.SelectionItem = SelectionItem;
function createSelection(options) {
const input = exports2.isOutputTty ? resolvePromptInput() : void 0;
if (input == null) {
throw new Error(`Cannot prompt when not a tty. (Prompt: '${options.message}')`);
}
if ((0, mod_js_12.maybeConsoleSize)() == null) {
throw new Error(`Cannot prompt when can't get console size. (Prompt: '${options.message}')`);
}
const { signal } = options;
if (signal?.aborted) {
return Promise.reject(signal.reason);
}
return ensureSingleSelection(input, async () => {
logger_js_1.logger.setItems(logger_js_1.LoggerRefreshItemKind.Selection, options.render());
try {
for await (const key of readKeys(input, signal)) {
const keyResult = options.onKey(key);
if (keyResult != null)
return keyResult;
logger_js_1.logger.setItems(logger_js_1.LoggerRefreshItemKind.Selection, options.render());
}
return void 0;
} finally {
const size = {
columns: process.stdout.columns ?? 80,
rows: process.stdout.rows ?? 24
};
logger_js_1.logger.setItems(logger_js_1.LoggerRefreshItemKind.Selection, [], size);
if (options.noClear) {
logger_js_1.logger.logOnce(options.render(), size);
}
}
});
}
var lastPromise = Promise.resolve();
function ensureSingleSelection(input, action) {
const currentLastPromise = lastPromise;
const currentPromise = (async () => {
try {
await currentLastPromise;
} catch {
}
hideCursor();
try {
input.setRaw(true);
try {
return await action();
} finally {
input.setRaw(false);
}
} finally {
showCursor();
}
})();
lastPromise = currentPromise;
return currentPromise;
}
}
});
// npm/script/src/console/alert.js
var require_alert = __commonJS({
"npm/script/src/console/alert.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.alert = alert;
exports2.innerAlert = innerAlert;
var colors2 = __importStar2(require_colors());
var utils_js_1 = require_utils();
function alert(optsOrMessage, options) {
const opts = typeof optsOrMessage === "string" ? { message: optsOrMessage, ...options } : optsOrMessage;
return (0, utils_js_1.createSelection)({
message: opts.message,
noClear: opts.noClear,
signal: opts.signal,
...innerAlert(opts)
}).then(utils_js_1.resultOrExit).then(() => void 0);
}
function innerAlert(opts) {
const requireEnter = opts.requireEnter ?? false;
const drawState = {
title: opts.message,
requireEnter,
hasCompleted: false
};
return {
render: () => render(drawState),
onKey: (key) => {
if (!requireEnter || key === utils_js_1.Keys.Enter) {
drawState.hasCompleted = true;
return true;
}
return void 0;
}
};
}
function render(state) {
const hint = state.hasCompleted ? "" : state.requireEnter ? " [press enter]" : " [press any key]";
return [
colors2.bold(colors2.blue(state.title)) + colors2.dim(hint)
];
}
}
});
// npm/script/src/console/confirm.js
var require_confirm = __commonJS({
"npm/script/src/console/confirm.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.confirm = confirm;
exports2.maybeConfirm = maybeConfirm;
exports2.innerConfirm = innerConfirm;
var colors2 = __importStar2(require_colors());
var utils_js_1 = require_utils();
function confirm(optsOrMessage, options) {
return maybeConfirm(optsOrMessage, options).then(utils_js_1.resultOrExit);
}
function maybeConfirm(optsOrMessage, options) {
const opts = typeof optsOrMessage === "string" ? { message: optsOrMessage, ...options } : optsOrMessage;
return (0, utils_js_1.undefinedOnAbort)(opts.signal, (0, utils_js_1.createSelection)({
message: opts.message,
noClear: opts.noClear,
signal: opts.signal,
...innerConfirm(opts)
}));
}
function innerConfirm(opts) {
const drawState = {
title: opts.message,
default: opts.default,
inputText: "",
hasCompleted: false
};
return {
render: () => render(drawState),
onKey: (key) => {
switch (key) {
case "Y":
case "y":
drawState.inputText = "Y";
break;
case "N":
case "n":
drawState.inputText = "N";
break;
case utils_js_1.Keys.Backspace:
drawState.inputText = "";
break;
case utils_js_1.Keys.Enter:
if (drawState.inputText.length === 0) {
if (drawState.default == null) {
return void 0;
}
drawState.inputText = drawState.default ? "Y" : "N";
}
drawState.hasCompleted = true;
return drawState.inputText === "Y" ? true : drawState.inputText === "N" ? false : drawState.default;
}
}
};
}
function render(state) {
return [
colors2.bold(colors2.blue(state.title)) + " " + (state.hasCompleted ? "" : state.default == null ? "(Y/N) " : state.default ? "(Y/n) " : "(y/N) ") + state.inputText + (state.hasCompleted ? "" : "\u2588")
// (block character)
];
}
}
});
// npm/script/src/console/multiSelect.js
var require_multiSelect = __commonJS({
"npm/script/src/console/multiSelect.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.multiSelect = multiSelect;
exports2.maybeMultiSelect = maybeMultiSelect;
exports2.innerMultiSelect = innerMultiSelect;
var colors2 = __importStar2(require_colors());
var utils_js_1 = require_utils();
function multiSelect(opts) {
return maybeMultiSelect(opts).then(utils_js_1.resultOrExit);
}
function maybeMultiSelect(opts) {
if (opts.options.length === 0) {
throw new Error(`You must provide at least one option. (Prompt: '${opts.message}')`);
}
return (0, utils_js_1.undefinedOnAbort)(opts.signal, (0, utils_js_1.createSelection)({
message: opts.message,
noClear: opts.noClear,
signal: opts.signal,
...innerMultiSelect(opts)
}));
}
function innerMultiSelect(opts) {
const drawState = {
title: opts.message,
activeIndex: 0,
items: opts.options.map((option) => {
if (typeof option === "string") {
option = {
text: option
};
}
return {
selected: option.selected ?? false,
text: option.text
};
}),
hasCompleted: false
};
return {
render: () => render(drawState),
onKey: (key) => {
switch (key) {
case utils_js_1.Keys.Up:
if (drawState.activeIndex === 0) {
drawState.activeIndex = drawState.items.length - 1;
} else {
drawState.activeIndex--;
}
break;
case utils_js_1.Keys.Down:
drawState.activeIndex = (drawState.activeIndex + 1) % drawState.items.length;
break;
case utils_js_1.Keys.Space: {
const item = drawState.items[drawState.activeIndex];
item.selected = !item.selected;
break;
}
case utils_js_1.Keys.Enter:
drawState.hasCompleted = true;
return drawState.items.map((item, index) => [item, index]).filter(([item]) => item.selected).map(([item, index]) => new utils_js_1.SelectionItem(index, item.text));
}
return void 0;
}
};
}
function render(state) {
const items = [];
items.push(colors2.bold(colors2.blue(state.title)));
if (state.hasCompleted) {
if (state.items.some((i) => i.selected)) {
for (const item of state.items) {
if (item.selected) {
items.push({
text: ` - ${item.text}`,
indent: 3
});
}
}
} else {
items.push(colors2.italic(" <None>"));
}
} else {
for (const [i, item] of state.items.entries()) {
const prefix = i === state.activeIndex ? "> " : " ";
items.push({
text: `${prefix}[${item.selected ? "x" : " "}] ${item.text}`,
indent: 6
});
}
}
return items;
}
}
});
// npm/script/src/console/progress.js
var require_progress = __commonJS({
"npm/script/src/console/progress.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.ProgressBar = void 0;
exports2.renderProgressBar = renderProgressBar;
exports2.isShowingProgressBars = isShowingProgressBars;
exports2.humanDownloadSize = humanDownloadSize;
var colors2 = __importStar2(require_colors());
var mod_js_12 = require_mod3();
var utils_js_1 = require_utils();
var logger_js_1 = require_logger();
var ProgressBar = class {
#state;
#pb;
#withCount = 0;
#onLog;
#noClear;
/** @internal */
constructor(onLog, opts) {
if (arguments.length !== 2) {
throw new Error("Invalid usage. Create the progress bar via `$.progress`.");
}
this.#onLog = onLog;
this.#state = {
message: opts.message,
prefix: opts.prefix,
length: opts.length,
currentPos: 0,
tickCount: 0,
hasCompleted: false,
kind: "raw"
};
this.#pb = addProgressBar((size) => {
this.#state.tickCount++;
return renderProgressBar(this.#state, size);
});
this.#noClear = opts.noClear ?? false;
this.#logIfNonInteractive();
}
/** Sets the prefix message/word, which will be displayed in green. */
prefix(prefix) {
this.#state.prefix = prefix;
if (prefix != null && prefix.length > 0) {
this.#logIfNonInteractive();
}
return this;
}
/** Sets the message the progress bar will display after the prefix in white. */
message(message) {
this.#state.message = message;
if (message != null && message.length > 0) {
this.#logIfNonInteractive();
}
return this;
}
/** Sets how to format the length values. */
kind(kind) {
this.#state.kind = kind;
return this;
}
#logIfNonInteractive() {
if (utils_js_1.isOutputTty) {
return;
}
let text = this.#state.prefix ?? "";
if (text.length > 0) {
text += " ";
}
text += this.#state.message ?? "";
if (text.length > 0) {
this.#onLog(text);
}
}
/** Sets the current position of the progress bar. */
position(position) {
this.#state.currentPos = position;
return this;
}
/** Increments the position of the progress bar. */
increment(inc = 1) {
this.#state.currentPos += inc;
return this;
}
/** Sets the total length of the progress bar. */
length(size) {
this.#state.length = size;
return this;
}
/** Whether the progress bar should output a summary when finished. */
noClear(value = true) {
this.#noClear = value;
return this;
}
/** Forces a render to the console. */
forceRender() {
return mod_js_12.staticText.refresh();
}
/** Finish showing the progress bar. */
finish() {
if (removeProgressBar(this.#pb)) {
this.#state.hasCompleted = true;
if (this.#noClear) {
const size = (0, mod_js_12.maybeConsoleSize)();
const text = (0, mod_js_12.renderTextItems)(renderProgressBar(this.#state, size), size);
this.#onLog(text);
}
}
}
with(action) {
this.#withCount++;
let wasAsync = false;
try {
const result = action();
if (result instanceof Promise) {
wasAsync = true;
return result.finally(() => {
this.#decrementWith();
});
} else {
return result;
}
} finally {
if (!wasAsync) {
this.#decrementWith();
}
}
}
#decrementWith() {
this.#withCount--;
if (this.#withCount === 0) {
this.finish();
}
}
};
exports2.ProgressBar = ProgressBar;
var tickStrings = ["\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826", "\u2827", "\u2807", "\u280F"];
function renderProgressBar(state, size) {
if (state.hasCompleted) {
let text = "";
if (state.prefix != null) {
text += colors2.green(state.prefix);
}
if (state.message != null) {
if (text.length > 0) {
text += " ";
}
text += state.message;
}
return text.length > 0 ? [text] : [];
} else if (state.length == null || state.length === 0) {
let text = colors2.green(tickStrings[Math.abs(state.tickCount) % tickStrings.length]);
if (state.prefix != null) {
text += ` ${colors2.green(state.prefix)}`;
}
if (state.message != null) {
text += ` ${state.message}`;
}
if (state.currentPos > 0) {
const currentPosText = state.kind === "bytes" ? humanDownloadSize(state.currentPos) : state.currentPos.toString();
text += ` (${currentPosText}/?)`;
}
return [text];
} else {
let firstLine = "";
if (state.prefix != null) {
firstLine += colors2.green(state.prefix);
}
if (state.message != null) {
if (firstLine.length > 0) {
firstLine += " ";
}
firstLine += state.message;
}
const percent = Math.min(state.currentPos / state.length, 1);
const currentPosText = state.kind === "bytes" ? humanDownloadSize(state.currentPos, state.length) : state.currentPos.toString();
const lengthText = state.kind === "bytes" ? humanDownloadSize(state.length) : state.length.toString();
const maxWidth = size == null ? 75 : Math.max(10, Math.min(75, size.columns - 5));
const sameLineTextWidth = 6 + lengthText.length * 2 + state.length.toString().length * 2;
const totalBars = Math.max(1, maxWidth - sameLineTextWidth);
const completedBars = Math.floor(totalBars * percent);
let secondLine = "";
secondLine += "[";
if (completedBars != totalBars) {
if (completedBars > 0) {
secondLine += colors2.cyan("#".repeat(completedBars - 1) + ">");
}
secondLine += colors2.blue("-".repeat(totalBars - completedBars));
} else {
secondLine += colors2.cyan("#".repeat(completedBars));
}
secondLine += `] (${currentPosText}/${lengthText})`;
const result = [];
if (firstLine.length > 0) {
result.push(firstLine);
}
result.push(secondLine);
return result;
}
}
var progressBars = [];
function addProgressBar(render) {
progressBars.push(render);
refresh();
return render;
}
function removeProgressBar(pb) {
const index = progressBars.indexOf(pb);
if (index === -1) {
return false;
}
progressBars.splice(index, 1);
refresh();
return true;
}
function refresh() {
logger_js_1.logger.setItems(logger_js_1.LoggerRefreshItemKind.ProgressBars, progressBars);
}
function isShowingProgressBars() {
return utils_js_1.isOutputTty && progressBars.length > 0;
}
var units = ["B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"];
function humanDownloadSize(byteCount, totalBytes) {
const exponentBasis = totalBytes ?? byteCount;
const exponent = Math.min(units.length - 1, Math.floor(Math.log(exponentBasis) / Math.log(1024)));
const unit = units[exponent];
const prettyBytes = (Math.floor(byteCount / Math.pow(1024, exponent) * 100) / 100).toFixed(exponent === 0 ? 0 : 2);
return `${prettyBytes} ${unit}`;
}
}
});
// npm/script/src/console/prompt.js
var require_prompt = __commonJS({
"npm/script/src/console/prompt.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.prompt = prompt;
exports2.maybePrompt = maybePrompt;
exports2.innerPrompt = innerPrompt;
var colors2 = __importStar2(require_colors());
var utils_js_1 = require_utils();
var defaultMask = { char: "*", lastVisible: false };
function prompt(optsOrMessage, options) {
return maybePrompt(optsOrMessage, options).then(utils_js_1.resultOrExit);
}
function maybePrompt(optsOrMessage, options) {
const opts = typeof optsOrMessage === "string" ? {
message: optsOrMessage,
...options
} : optsOrMessage;
return (0, utils_js_1.undefinedOnAbort)(opts.signal, (0, utils_js_1.createSelection)({
message: opts.message,
noClear: opts.noClear,
signal: opts.signal,
...innerPrompt(opts)
}));
}
function innerPrompt(opts) {
let mask = opts.mask ?? false;
if (mask && typeof mask === "boolean") {
mask = defaultMask;
}
const drawState = {
title: opts.message,
inputText: opts.default ?? "",
mask,
hasCompleted: false
};
return {
render: () => render(drawState),
onKey: (key) => {
if (typeof key === "string") {
drawState.inputText += key;
} else {
switch (key) {
case utils_js_1.Keys.Space:
drawState.inputText += " ";
break;
case utils_js_1.Keys.Backspace:
drawState.inputText = drawState.inputText.slice(0, -1);
break;
case utils_js_1.Keys.Enter:
drawState.hasCompleted = true;
return drawState.inputText;
}
}
return void 0;
}
};
}
function render(state) {
let { inputText } = state;
if (state.mask) {
const char = state.mask.char ?? defaultMask.char;
const lastVisible = state.mask.lastVisible ?? defaultMask.lastVisible;
const shouldShowLast = lastVisible && !state.hasCompleted;
const safeLengthMinusOne = Math.max(0, inputText.length - 1);
const masked = char.repeat(shouldShowLast ? safeLengthMinusOne : inputText.length);
const unmasked = shouldShowLast ? inputText.slice(safeLengthMinusOne) : "";
inputText = `${masked}${unmasked}`;
}
return [
colors2.bold(colors2.blue(state.title)) + " " + inputText + (state.hasCompleted ? "" : "\u2588")
// (block character)
];
}
}
});
// npm/script/src/console/select.js
var require_select = __commonJS({
"npm/script/src/console/select.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.select = select;
exports2.maybeSelect = maybeSelect;
exports2.innerSelect = innerSelect;
var colors2 = __importStar2(require_colors());
var utils_js_1 = require_utils();
function select(opts) {
return maybeSelect(opts).then(utils_js_1.resultOrExit);
}
function maybeSelect(opts) {
if (opts.options.length < 1) {
throw new Error(`You must provide at least one option. (Prompt: '${opts.message}')`);
}
return (0, utils_js_1.undefinedOnAbort)(opts.signal, (0, utils_js_1.createSelection)({
message: opts.message,
noClear: opts.noClear,
signal: opts.signal,
...innerSelect(opts)
}));
}
function innerSelect(opts) {
const drawState = {
title: opts.message,
activeIndex: (opts.initialIndex ?? 0) % opts.options.length,
items: opts.options,
hasCompleted: false
};
return {
render: () => render(drawState),
onKey: (key) => {
switch (key) {
case utils_js_1.Keys.Up:
if (drawState.activeIndex === 0) {
drawState.activeIndex = drawState.items.length - 1;
} else {
drawState.activeIndex--;
}
break;
case utils_js_1.Keys.Down:
drawState.activeIndex = (drawState.activeIndex + 1) % drawState.items.length;
break;
case utils_js_1.Keys.Enter:
drawState.hasCompleted = true;
return new utils_js_1.SelectionItem(drawState.activeIndex, drawState.items[drawState.activeIndex]);
}
}
};
}
function render(state) {
const items = [];
items.push(colors2.bold(colors2.blue(state.title)));
if (state.hasCompleted) {
items.push({
text: ` - ${state.items[state.activeIndex]}`,
indent: 3
});
} else {
for (const [i, text] of state.items.entries()) {
const prefix = i === state.activeIndex ? "> " : " ";
items.push({
text: `${prefix}${text}`,
indent: 4
});
}
}
return items;
}
}
});
// npm/script/src/console/mod.js
var require_mod5 = __commonJS({
"npm/script/src/console/mod.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.select = exports2.maybeSelect = exports2.prompt = exports2.maybePrompt = exports2.ProgressBar = exports2.isShowingProgressBars = exports2.SelectionItem = exports2.multiSelect = exports2.maybeMultiSelect = exports2.maybeConfirm = exports2.confirm = exports2.alert = void 0;
var alert_js_1 = require_alert();
Object.defineProperty(exports2, "alert", { enumerable: true, get: function() {
return alert_js_1.alert;
} });
var confirm_js_1 = require_confirm();
Object.defineProperty(exports2, "confirm", { enumerable: true, get: function() {
return confirm_js_1.confirm;
} });
Object.defineProperty(exports2, "maybeConfirm", { enumerable: true, get: function() {
return confirm_js_1.maybeConfirm;
} });
var multiSelect_js_1 = require_multiSelect();
Object.defineProperty(exports2, "maybeMultiSelect", { enumerable: true, get: function() {
return multiSelect_js_1.maybeMultiSelect;
} });
Object.defineProperty(exports2, "multiSelect", { enumerable: true, get: function() {
return multiSelect_js_1.multiSelect;
} });
var utils_js_1 = require_utils();
Object.defineProperty(exports2, "SelectionItem", { enumerable: true, get: function() {
return utils_js_1.SelectionItem;
} });
var progress_js_1 = require_progress();
Object.defineProperty(exports2, "isShowingProgressBars", { enumerable: true, get: function() {
return progress_js_1.isShowingProgressBars;
} });
Object.defineProperty(exports2, "ProgressBar", { enumerable: true, get: function() {
return progress_js_1.ProgressBar;
} });
var prompt_js_1 = require_prompt();
Object.defineProperty(exports2, "maybePrompt", { enumerable: true, get: function() {
return prompt_js_1.maybePrompt;
} });
Object.defineProperty(exports2, "prompt", { enumerable: true, get: function() {
return prompt_js_1.prompt;
} });
var select_js_1 = require_select();
Object.defineProperty(exports2, "maybeSelect", { enumerable: true, get: function() {
return select_js_1.maybeSelect;
} });
Object.defineProperty(exports2, "select", { enumerable: true, get: function() {
return select_js_1.select;
} });
}
});
// npm/script/src/request.js
var require_request = __commonJS({
"npm/script/src/request.js"(exports2) {
"use strict";
var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar2 = exports2 && exports2.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding2(result, mod, k[i]);
}
__setModuleDefault2(result, mod);
return result;
};
}();
var _a;
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.RequestResponse = exports2.RequestBuilder = exports2.withProgressBarFactorySymbol = void 0;
exports2.makeRequest = makeRequest;
var dntShim = __importStar2(require_dnt_shims());
var mod_js_12 = require_mod2();
var mod_js_22 = require_mod4();
var internal_js_12 = require_internal();
var common_js_12 = require_common2();
exports2.withProgressBarFactorySymbol = Symbol();
var RequestBuilder = class {
#state = void 0;
#getClonedState() {
const state = this.#state;
if (state == null) {
return this.#getDefaultState();
}
return {
// be explicit here in order to force evaluation
// of each property on a case by case basis
noThrow: typeof state.noThrow === "boolean" ? state.noThrow : [...state.noThrow],
url: state.url,
body: state.body,
cache: state.cache,
headers: state.headers,
integrity: state.integrity,
keepalive: state.keepalive,
method: state.method,
mode: state.mode,
redirect: state.redirect,
referrer: state.referrer,
referrerPolicy: state.referrerPolicy,
progressBarFactory: state.progressBarFactory,
progressOptions: state.progressOptions == null ? void 0 : {
...state.progressOptions
},
onProgress: [...state.onProgress],
timeout: state.timeout,
signal: state.signal,
beforeRequest: state.beforeRequest
};
}
#getDefaultState() {
return {
noThrow: false,
url: void 0,
body: void 0,
cache: void 0,
headers: {},
integrity: void 0,
keepalive: void 0,
method: void 0,
mode: void 0,
redirect: void 0,
referrer: void 0,
referrerPolicy: void 0,
progressBarFactory: void 0,
progressOptions: void 0,
onProgress: [],
timeout: void 0,
signal: void 0,
beforeRequest: void 0
};
}
#newWithState(action) {
const builder = new _a();
const state = this.#getClonedState();
action(state);
builder.#state = state;
return builder;
}
[internal_js_12.symbols.readable]() {
const self = this;
let streamReader;
let response;
let wasCancelled = false;
let cancelledReason;
return new dntShim.ReadableStream({
async start() {
response = await self.fetch();
const readable = response.readable;
if (wasCancelled) {
await readable.cancel(cancelledReason);
} else {
streamReader = readable.getReader();
}
},
async pull(controller) {
try {
const { done, value } = await streamReader.read();
if (done || value == null) {
if (response?.signal?.aborted) {
controller.error(response?.signal?.reason);
} else {
controller.close();
}
} else {
controller.enqueue(value);
}
} catch (err) {
try {
streamReader?.releaseLock();
} catch {
}
try {
await response?.cancelBody();
} catch {
}
throw err;
}
},
async cancel(reason) {
wasCancelled = true;
cancelledReason = reason;
try {
if (streamReader != null) {
await streamReader.cancel(reason);
}
} catch {
}
try {
await response?.cancelBody();
} catch {
}
}
});
}
then(onfulfilled, onrejected) {
return this.fetch().then(onfulfilled).catch(onrejected);
}
/** Fetches and gets the response. */
fetch() {
return this.#resolveStateForRequest().then(makeRequest).catch((err) => {
if (err instanceof common_js_12.TimeoutError) {
Error.captureStackTrace(err, common_js_12.TimeoutError);
}
return Promise.reject(err);
});
}
async #resolveStateForRequest() {
const callbacks = this.#state?.beforeRequest;
if (callbacks == null || callbacks.length === 0) {
return this.#getClonedState();
}
let builder = this.#newWithState((state) => {
state.beforeRequest = void 0;
});
for (const cb of callbacks) {
const proxy = wrapNonThenable(builder);
const result = await cb(proxy);
builder = unwrapBuilder(result) ?? builder;
}
return builder.#getClonedState();
}
/** Specifies the URL to send the request to. */
url(value) {
return this.#newWithState((state) => {
state.url = value;
});
}
header(nameOrItems, value) {
return this.#newWithState((state) => {
if (typeof nameOrItems === "string") {
setHeader(state, nameOrItems, value);
} else {
for (const [name, value2] of Object.entries(nameOrItems)) {
setHeader(state, name, value2);
}
}
});
function setHeader(state, name, value2) {
name = name.toUpperCase();
state.headers[name] = value2;
}
}
noThrow(value, ...additional) {
return this.#newWithState((state) => {
if (typeof value === "boolean" || value == null) {
state.noThrow = value ?? true;
} else {
state.noThrow = [value, ...additional];
}
});
}
body(value) {
return this.#newWithState((state) => {
state.body = value;
});
}
cache(value) {
return this.#newWithState((state) => {
state.cache = value;
});
}
integrity(value) {
return this.#newWithState((state) => {
state.integrity = value;
});
}
keepalive(value) {
return this.#newWithState((state) => {
state.keepalive = value;
});
}
method(value) {
return this.#newWithState((state) => {
state.method = value;
});
}
mode(value) {
return this.#newWithState((state) => {
state.mode = value;
});
}
/** @internal */
[exports2.withProgressBarFactorySymbol](factory) {
return this.#newWithState((state) => {
state.progressBarFactory = factory;
});
}
redirect(value) {
return this.#newWithState((state) => {
state.redirect = value;
});
}
referrer(value) {
return this.#newWithState((state) => {
state.referrer = value;
});
}
referrerPolicy(value) {
return this.#newWithState((state) => {
state.referrerPolicy = value;
});
}
showProgress(value) {
return this.#newWithState((state) => {
if (value === true || value == null) {
state.progressOptions = { noClear: false };
} else if (value === false) {
state.progressOptions = void 0;
} else {
state.progressOptions = {
noClear: value.noClear ?? false
};
}
});
}
/** Adds a callback that is invoked as bytes are received from the response body.
*
* The callback fires once per chunk read from the network with the cumulative
* number of bytes received and the total expected size (from the `content-length`
* header, or `undefined` if the server didn't provide one). Multiple callbacks
* may be registered by calling this method repeatedly; each is invoked in the
* order it was added.
*/
onProgress(callback) {
return this.#newWithState((state) => {
state.onProgress.push(callback);
});
}
/** Timeout the request after the specified delay throwing a `TimeoutError`. */
timeout(delay) {
return this.#newWithState((state) => {
state.timeout = delay == null ? void 0 : (0, mod_js_22.delayToMs)(delay);
});
}
/** Sets an abort signal for the request. When the signal is
* aborted, the request will be cancelled.
*/
signal(signal) {
return this.#newWithState((state) => {
state.signal = signal;
});
}
/** Registers a callback that runs just before each request is sent.
*
* The callback receives the current builder and may return a (possibly
* modified) builder to use for the request. Useful for asynchronously
* resolving values such as auth tokens.
*
* ```ts
* $.request(url).beforeRequest(async (builder) => {
* return builder.header("Authorization", `Bearer ${await getAccessToken()}`);
* });
* ```
*
* Multiple `.beforeRequest(...)` calls compose: each registered callback runs
* in the order it was added, with the builder produced by the previous one.
*
* The builder passed to the callback is in a special "passthrough" mode so
* its `.then(...)` resolves with the builder itself (instead of fetching) —
* this is what makes `return builder.header(...)` from an `async` function
* safe. If you construct a fresh `new RequestBuilder()` inside the callback,
* return it as `{ requestBuilder: ... }` to avoid accidental fetching.
*/
beforeRequest(callback) {
return this.#newWithState((state) => {
state.beforeRequest = state.beforeRequest == null ? [callback] : [...state.beforeRequest, callback];
});
}
/** Fetches and gets the response as an array buffer. */
async arrayBuffer() {
const response = await this.fetch();
return response.arrayBuffer();
}
/** Fetches and gets the response as a blob. */
async blob() {
const response = await this.fetch();
return response.blob();
}
/** Fetches and gets the response as form data. */
async formData() {
const response = await this.fetch();
return response.formData();
}
/** Fetches and gets the response as JSON additionally setting
* a JSON accept header if not set. */
async json() {
let builder = this;
const acceptHeaderName = "ACCEPT";
if (builder.#state == null || !Object.hasOwn(builder.#state.headers, acceptHeaderName)) {
builder = builder.header(acceptHeaderName, "application/json");
}
const response = await builder.fetch();
return response.json();
}
/** Fetches and gets the response as text. */
async text() {
const response = await this.fetch();
return response.text();
}
/** Pipes the response body to the provided writable stream. */
async pipeTo(dest, options) {
const response = await this.fetch();
return await response.pipeTo(dest, options);
}
async pipeToPath(filePathOrOptions, maybeOptions) {
const { filePath, options } = resolvePipeToPathParams(filePathOrOptions, maybeOptions, this.#state?.url);
const response = await this.fetch();
return await response.pipeToPath(filePath, options);
}
/** Pipes the response body through the provided transform. */
async pipeThrough(transform) {
const response = await this.fetch();
return response.pipeThrough(transform);
}
};
exports2.RequestBuilder = RequestBuilder;
_a = RequestBuilder;
var RequestResponse = class {
#response;
#downloadResponse;
#originalUrl;
#abortController;
/** @internal */
constructor(opts) {
this.#originalUrl = opts.originalUrl;
this.#response = opts.response;
this.#abortController = opts.abortController;
if (opts.response.body == null) {
opts.abortController.clearTimeout();
}
if (opts.progressBar != null || opts.onProgress.length > 0) {
const pb = opts.progressBar;
const onProgress = opts.onProgress;
const total = opts.contentLength;
this.#downloadResponse = new Response(new dntShim.ReadableStream({
async start(controller) {
const reader = opts.response.body?.getReader();
if (reader == null) {
return;
}
let loaded = 0;
let lockReleased = false;
try {
while (true) {
const { done, value } = await reader.read();
if (done || value == null) {
break;
}
loaded += value.byteLength;
pb?.increment(value.byteLength);
if (onProgress.length > 0) {
const event = { loaded, total };
for (const callback of onProgress) {
callback(event);
}
}
controller.enqueue(value);
}
const signal = opts.abortController.controller.signal;
if (signal.aborted) {
controller.error(signal.reason);
} else {
controller.close();
}
} catch (err) {
try {
reader.releaseLock();
lockReleased = true;
} catch {
}
try {
await opts.response.body?.cancel(err);
} catch {
}
throw err;
} finally {
if (!lockReleased) {
try {
reader.releaseLock();
} catch {
}
}
pb?.finish();
}
},
async cancel(reason) {
try {
await opts.response.body?.cancel(reason);
} catch {
}
}
}));
} else {
this.#downloadResponse = opts.response;
}
}
/** Raw response. */
get response() {
return this.#response;
}
/** Response headers. */
get headers() {
return this.#response.headers;
}
/** If the response had a 2xx code. */
get ok() {
return this.#response.ok;
}
/** If the response is the result of a redirect. */
get redirected() {
return this.#response.redirected;
}
/** The underlying `AbortSignal` used to abort the request body
* when a timeout is reached or when the `.abort()` method is called. */
get signal() {
return this.#abortController.controller.signal;
}
/** Status code of the response. */
get status() {
return this.#response.status;
}
/** Status text of the response. */
get statusText() {
return this.#response.statusText;
}
/** URL of the response. */
get url() {
return this.#response.url;
}
/** Aborts */
abort(reason) {
this.#abortController?.controller.abort(reason);
}
/**
* Throws if the response doesn't have a 2xx code.
*
* This might be useful if the request was built with `.noThrow()`, but
* otherwise this is called automatically for any non-2xx response codes.
*
* Note: this does not consume the body. If you don't intend to read the
* body, call `cancelBody()` first to release the underlying resources.
*/
throwIfNotOk() {
if (!this.ok) {
throw new Error(`Error making request to ${this.#originalUrl}: ${this.statusText}`);
}
}
/**
* Cancels the response body, releasing the underlying resources.
*
* Useful in conjunction with `.noThrow()` and `throwIfNotOk()` when you
* don't intend to read the body.
*/
cancelBody() {
return this.#withReturnHandling(async () => {
await this.#response.body?.cancel();
});
}
/**
* Respose body as an array buffer.
*
* Note: Returns `undefined` when `.noThrow(404)` and status code is 404.
*/
arrayBuffer() {
return this.#withReturnHandling(async () => {
if (this.#response.status === 404) {
await this.#response.body?.cancel();
return void 0;
}
return this.#downloadResponse.arrayBuffer();
});
}
/**
* Response body as a blog.
*
* Note: Returns `undefined` when `.noThrow(404)` and status code is 404.
*/
blob() {
return this.#withReturnHandling(async () => {
if (this.#response.status === 404) {
await this.#response.body?.cancel();
return void 0;
}
return await this.#downloadResponse.blob();
});
}
/**
* Response body as a form data.
*
* Note: Returns `undefined` when `.noThrow(404)` and status code is 404.
*/
formData() {
return this.#withReturnHandling(async () => {
if (this.#response.status === 404) {
await this.#response.body?.cancel();
return void 0;
}
return await this.#downloadResponse.formData();
});
}
/**
* Respose body as JSON.
*
* Note: Returns `undefined` when `.noThrow(404)` and status code is 404.
*/
json() {
return this.#withReturnHandling(async () => {
if (this.#response.status === 404) {
await this.#response.body?.cancel();
return void 0;
}
return await this.#downloadResponse.json();
});
}
/**
* Respose body as text.
*
* Note: Returns `undefined` when `.noThrow(404)` and status code is 404.
*/
text() {
return this.#withReturnHandling(async () => {
if (this.#response.status === 404) {
await this.#response.body?.cancel();
return void 0;
}
return await this.#downloadResponse.text();
});
}
/** Pipes the response body to the provided writable stream. */
pipeTo(dest, options) {
return this.#withReturnHandling(() => this.readable.pipeTo(dest, options));
}
async pipeToPath(filePathOrOptions, maybeOptions) {
const { filePath, options } = resolvePipeToPathParams(filePathOrOptions, maybeOptions, this.#originalUrl);
const body = this.readable;
try {
const file = await filePath.open({
write: true,
create: true,
truncate: true,
...options ?? {}
});
try {
await body.pipeTo(file.writable, {
preventClose: true
});
await file.writable.close();
} finally {
try {
file.close();
} catch {
}
this.#abortController?.clearTimeout();
}
} catch (err) {
await this.#response.body?.cancel();
throw err;
}
return filePath;
}
/** Pipes the response body through the provided transform. */
pipeThrough(transform) {
return this.readable.pipeThrough(transform);
}
get readable() {
const body = this.#downloadResponse.body;
if (body == null) {
throw new Error("Response had no body.");
}
return body;
}
async #withReturnHandling(action) {
try {
return await action();
} catch (err) {
if (err instanceof common_js_12.TimeoutError) {
Error.captureStackTrace(err);
}
try {
await this.#response.body?.cancel(err);
} catch {
}
throw err;
} finally {
this.#abortController.clearTimeout();
}
}
};
exports2.RequestResponse = RequestResponse;
async function makeRequest(state) {
if (state.url == null) {
throw new Error("You must specify a URL before fetching.");
}
const abortController = getAbortController();
let response;
try {
response = await fetch(state.url, {
body: state.body,
// @ts-ignore not supported in Node.js yet?
cache: state.cache,
headers: (0, common_js_12.filterEmptyRecordValues)(state.headers),
integrity: state.integrity,
keepalive: state.keepalive,
method: state.method,
mode: state.mode,
redirect: state.redirect,
referrer: state.referrer,
referrerPolicy: state.referrerPolicy,
signal: abortController.controller.signal
});
} catch (err) {
abortController.clearTimeout();
throw err;
}
const contentLength = getContentLength();
const result = new RequestResponse({
response,
originalUrl: state.url.toString(),
progressBar: getProgressBar(contentLength),
onProgress: state.onProgress,
contentLength,
abortController
});
const shouldThrowOnError = !response.ok && (!state.noThrow || state.noThrow instanceof Array && !state.noThrow.includes(response.status));
if (shouldThrowOnError) {
try {
await result.cancelBody();
} catch {
}
result.throwIfNotOk();
}
return result;
function getProgressBar(contentLength2) {
if (state.progressOptions == null || state.progressBarFactory == null) {
return void 0;
}
return state.progressBarFactory(`Download ${state.url}`).noClear(state.progressOptions.noClear).kind("bytes").length(contentLength2);
}
function getContentLength() {
const contentLength2 = response.headers.get("content-length");
if (contentLength2 == null) {
return void 0;
}
const length = parseInt(contentLength2, 10);
return isNaN(length) ? void 0 : length;
}
function getAbortController() {
const baseController = getTimeoutAbortController() ?? {
controller: new AbortController(),
clearTimeout() {
}
};
if (state.signal == null) {
return baseController;
}
if (state.signal.aborted) {
baseController.controller.abort(state.signal.reason);
return baseController;
}
const onAbort = () => {
baseController.controller.abort(state.signal.reason);
};
state.signal.addEventListener("abort", onAbort, { once: true });
const originalClearTimeout = baseController.clearTimeout;
return {
controller: baseController.controller,
clearTimeout() {
originalClearTimeout();
state.signal?.removeEventListener("abort", onAbort);
}
};
}
function getTimeoutAbortController() {
if (state.timeout == null) {
return void 0;
}
const timeout = state.timeout;
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(new common_js_12.TimeoutError(`Request timed out after ${(0, common_js_12.formatMillis)(timeout)}.`)), timeout);
return {
controller,
clearTimeout() {
clearTimeout(timeoutId);
}
};
}
}
var proxyToBuilder = /* @__PURE__ */ new WeakMap();
function wrapNonThenable(builder) {
const proxy = new Proxy(builder, {
get(target, prop, _receiver) {
if (prop === "then")
return void 0;
const value = Reflect.get(target, prop, target);
if (typeof value === "function") {
return (...args) => {
const result = value.apply(target, args);
if (result instanceof RequestBuilder) {
return wrapNonThenable(result);
}
return result;
};
}
return value;
}
});
proxyToBuilder.set(proxy, builder);
return proxy;
}
function unwrapBuilder(result) {
if (!(result instanceof RequestBuilder))
return void 0;
return proxyToBuilder.get(result) ?? result;
}
function resolvePipeToPathParams(pathOrOptions, maybeOptions, originalUrl) {
let filePath;
let options;
if (typeof pathOrOptions === "string" || pathOrOptions instanceof URL) {
filePath = new mod_js_12.Path(pathOrOptions).resolve();
options = maybeOptions;
} else if (pathOrOptions instanceof mod_js_12.Path) {
filePath = pathOrOptions.resolve();
options = maybeOptions;
} else if (typeof pathOrOptions === "object") {
options = pathOrOptions;
} else if (pathOrOptions === void 0) {
options = maybeOptions;
}
if (filePath === void 0) {
filePath = new mod_js_12.Path(getFileNameFromUrlOrThrow(originalUrl));
} else if (filePath.isDirSync()) {
filePath = filePath.join(getFileNameFromUrlOrThrow(originalUrl));
}
filePath = filePath.resolve();
return {
filePath,
options
};
function getFileNameFromUrlOrThrow(url) {
const fileName = url == null ? void 0 : (0, common_js_12.getFileNameFromUrl)(url);
if (fileName == null) {
throw new Error("Could not derive the path from the request URL. Please explicitly provide a path.");
}
return fileName;
}
}
}
});
// npm/script/src/vendor/outdent.js
var require_outdent = __commonJS({
"npm/script/src/vendor/outdent.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.outdent = void 0;
function extend(target, source) {
for (const prop in source) {
if (Object.hasOwn(source, prop)) {
target[prop] = source[prop];
}
}
return target;
}
var reLeadingNewline = /^[ \t]*(?:\r\n|\r|\n)/;
var reTrailingNewline = /(?:\r\n|\r|\n)[ \t]*$/;
var reStartsWithNewlineOrIsEmpty = /^(?:[\r\n]|$)/;
var reDetectIndentation = /(?:\r\n|\r|\n)([ \t]*)(?:[^ \t\r\n]|$)/;
var reOnlyWhitespaceWithAtLeastOneNewline = /^[ \t]*[\r\n][ \t\r\n]*$/;
function _outdentArray(strings, firstInterpolatedValueSetsIndentationLevel, options) {
let indentationLevel = 0;
const match = strings[0].match(reDetectIndentation);
if (match) {
indentationLevel = match[1].length;
}
const reSource = `(\\r\\n|\\r|\\n).{0,${indentationLevel}}`;
const reMatchIndent = new RegExp(reSource, "g");
if (firstInterpolatedValueSetsIndentationLevel) {
strings = strings.slice(1);
}
const { newline, trimLeadingNewline, trimTrailingNewline } = options;
const normalizeNewlines = typeof newline === "string";
const l = strings.length;
const outdentedStrings = strings.map((v, i) => {
v = v.replace(reMatchIndent, "$1");
if (i === 0 && trimLeadingNewline) {
v = v.replace(reLeadingNewline, "");
}
if (i === l - 1 && trimTrailingNewline) {
v = v.replace(reTrailingNewline, "");
}
if (normalizeNewlines) {
v = v.replace(/\r\n|\n|\r/g, (_) => newline);
}
return v;
});
return outdentedStrings;
}
function concatStringsAndValues(strings, values) {
let ret = "";
for (let i = 0, l = strings.length; i < l; i++) {
ret += strings[i];
if (i < l - 1) {
ret += values[i];
}
}
return ret;
}
function isTemplateStringsArray(v) {
return Object.hasOwn(v, "raw") && Object.hasOwn(v, "length");
}
function createInstance(options) {
const arrayAutoIndentCache = /* @__PURE__ */ new WeakMap();
const arrayFirstInterpSetsIndentCache = /* @__PURE__ */ new WeakMap();
function outdent(stringsOrOptions, ...values) {
if (isTemplateStringsArray(stringsOrOptions)) {
const strings = stringsOrOptions;
const firstInterpolatedValueSetsIndentationLevel = (values[0] === outdent || values[0] === defaultOutdent) && reOnlyWhitespaceWithAtLeastOneNewline.test(strings[0]) && reStartsWithNewlineOrIsEmpty.test(strings[1]);
const cache = firstInterpolatedValueSetsIndentationLevel ? arrayFirstInterpSetsIndentCache : arrayAutoIndentCache;
let renderedArray = cache.get(strings);
if (!renderedArray) {
renderedArray = _outdentArray(strings, firstInterpolatedValueSetsIndentationLevel, options);
cache.set(strings, renderedArray);
}
if (values.length === 0) {
return renderedArray[0];
}
const rendered = concatStringsAndValues(renderedArray, firstInterpolatedValueSetsIndentationLevel ? values.slice(1) : values);
return rendered;
} else {
return createInstance(extend(extend({}, options), stringsOrOptions || {}));
}
}
const fullOutdent = extend(outdent, {
string(str) {
return _outdentArray([str], false, options)[0];
}
});
return fullOutdent;
}
var defaultOutdent = createInstance({
trimLeadingNewline: true,
trimTrailingNewline: true
});
exports2.outdent = defaultOutdent;
}
});
// npm/script/mod.js
var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
} : function(o, m, k, k2) {
if (k2 === void 0)
k2 = k;
o[k2] = m[k];
});
var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
} : function(o, v) {
o["default"] = v;
});
var __importStar = exports && exports.__importStar || /* @__PURE__ */ function() {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function(o2) {
var ar = [];
for (var k in o2)
if (Object.prototype.hasOwnProperty.call(o2, k))
ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function(mod) {
if (mod && mod.__esModule)
return mod;
var result = {};
if (mod != null) {
for (var k = ownKeys(mod), i = 0; i < k.length; i++)
if (k[i] !== "default")
__createBinding(result, mod, k[i]);
}
__setModuleDefault(result, mod);
return result;
};
}();
Object.defineProperty(exports, "__esModule", { value: true });
exports.$ = exports.RequestResponse = exports.RequestBuilder = exports.PathRef = exports.SelectionItem = exports.TimeoutError = exports.RawArg = exports.KillSignal = exports.KillController = exports.createExecutableCommand = exports.CommandResult = exports.CommandChild = exports.CommandBuilder = exports.Path = exports.FsFileWrapper = void 0;
exports.build$ = build$;
require_dnt_polyfills();
var colors = __importStar(require_colors());
var mod_js_1 = require_mod();
var mod_js_2 = require_mod4();
var internal_js_1 = require_internal();
var common_js_1 = require_common2();
var mod_js_3 = require_mod5();
var mod_js_4 = require_mod3();
var mod_js_5 = require_mod2();
var node_util_1 = require("node:util");
var request_js_1 = require_request();
var outdent_js_1 = require_outdent();
var mod_js_6 = require_mod2();
Object.defineProperty(exports, "FsFileWrapper", { enumerable: true, get: function() {
return mod_js_6.FsFileWrapper;
} });
Object.defineProperty(exports, "Path", { enumerable: true, get: function() {
return mod_js_6.Path;
} });
var mod_js_7 = require_mod4();
Object.defineProperty(exports, "CommandBuilder", { enumerable: true, get: function() {
return mod_js_7.CommandBuilder;
} });
Object.defineProperty(exports, "CommandChild", { enumerable: true, get: function() {
return mod_js_7.CommandChild;
} });
Object.defineProperty(exports, "CommandResult", { enumerable: true, get: function() {
return mod_js_7.CommandResult;
} });
Object.defineProperty(exports, "createExecutableCommand", { enumerable: true, get: function() {
return mod_js_7.createExecutableCommand;
} });
Object.defineProperty(exports, "KillController", { enumerable: true, get: function() {
return mod_js_7.KillController;
} });
Object.defineProperty(exports, "KillSignal", { enumerable: true, get: function() {
return mod_js_7.KillSignal;
} });
Object.defineProperty(exports, "RawArg", { enumerable: true, get: function() {
return mod_js_7.RawArg;
} });
var common_js_2 = require_common2();
Object.defineProperty(exports, "TimeoutError", { enumerable: true, get: function() {
return common_js_2.TimeoutError;
} });
var mod_js_8 = require_mod5();
Object.defineProperty(exports, "SelectionItem", { enumerable: true, get: function() {
return mod_js_8.SelectionItem;
} });
var PathRef = mod_js_5.Path;
exports.PathRef = PathRef;
var request_js_2 = require_request();
Object.defineProperty(exports, "RequestBuilder", { enumerable: true, get: function() {
return request_js_2.RequestBuilder;
} });
Object.defineProperty(exports, "RequestResponse", { enumerable: true, get: function() {
return request_js_2.RequestResponse;
} });
function sleep(delay) {
const ms = (0, mod_js_2.delayToMs)(delay);
return new Promise((resolve) => setTimeout(resolve, ms));
}
async function withRetries($local, errorLogger, opts) {
const delayIterator = (0, common_js_1.delayToIterator)(opts.delay);
for (let i = 0; i < opts.count; i++) {
if (i > 0) {
const nextDelay = delayIterator.next();
if (!opts.quiet) {
$local.logWarn(`Failed. Trying again in ${(0, common_js_1.formatMillis)(nextDelay)}...`);
}
await sleep(nextDelay);
if (!opts.quiet) {
$local.logStep(`Retrying attempt ${i + 1}/${opts.count}...`);
}
}
try {
return await opts.action();
} catch (err) {
errorLogger(err);
}
}
throw new Error(`Failed after ${opts.count} attempts.`);
}
function buildInitial$State(opts) {
return {
commandBuilder: new internal_js_1.TreeBox(resolveCommandBuilder()),
requestBuilder: resolveRequestBuilder(),
// deno-lint-ignore no-console
infoLogger: new internal_js_1.LoggerTreeBox(console.error),
// deno-lint-ignore no-console
warnLogger: new internal_js_1.LoggerTreeBox(console.error),
// deno-lint-ignore no-console
errorLogger: new internal_js_1.LoggerTreeBox(console.error),
indentLevel: new internal_js_1.Box(0),
extras: opts.extras
};
function resolveCommandBuilder() {
if (opts.commandBuilder instanceof mod_js_2.CommandBuilder) {
return opts.commandBuilder;
} else if (opts.commandBuilder instanceof Function) {
return opts.commandBuilder(new mod_js_2.CommandBuilder());
} else {
const _assertUndefined = opts.commandBuilder;
return new mod_js_2.CommandBuilder();
}
}
function resolveRequestBuilder() {
if (opts.requestBuilder instanceof request_js_1.RequestBuilder) {
return opts.requestBuilder;
} else if (opts.requestBuilder instanceof Function) {
return opts.requestBuilder(new request_js_1.RequestBuilder());
} else {
const _assertUndefined = opts.requestBuilder;
return new request_js_1.RequestBuilder();
}
}
}
var helperObject = {
path: createPath,
escapeArg: mod_js_2.escapeArg,
stripAnsi(text) {
return (0, mod_js_4.stripAnsiCodes)(text);
},
dedent: outdent_js_1.outdent,
sleep,
which(commandName) {
return (0, mod_js_1.which)(commandName, mod_js_2.whichRealEnv);
},
whichSync(commandName) {
return (0, mod_js_1.whichSync)(commandName, mod_js_2.whichRealEnv);
}
};
function build$FromState(state) {
const logDepthObj = {
get logDepth() {
return state.indentLevel.value;
},
set logDepth(value) {
if (value < 0 || value % 1 !== 0) {
throw new Error("Expected a positive integer.");
}
state.indentLevel.value = value;
}
};
const result = Object.assign((strings, ...exprs) => {
const textState = (0, internal_js_1.template)(strings, exprs);
return state.commandBuilder.getValue()[internal_js_1.setCommandTextStateSymbol](textState);
}, helperObject, logDepthObj, {
build$(opts = {}) {
return build$FromState({
commandBuilder: resolveCommandBuilder(),
requestBuilder: resolveRequestBuilder(),
errorLogger: state.errorLogger.createChild(),
infoLogger: state.infoLogger.createChild(),
warnLogger: state.warnLogger.createChild(),
indentLevel: state.indentLevel,
extras: {
...state.extras,
...opts.extras
}
});
function resolveCommandBuilder() {
if (opts.commandBuilder instanceof mod_js_2.CommandBuilder) {
return new internal_js_1.TreeBox(opts.commandBuilder);
} else if (opts.commandBuilder instanceof Function) {
return new internal_js_1.TreeBox(opts.commandBuilder(state.commandBuilder.getValue()));
} else {
const _assertUndefined = opts.commandBuilder;
return state.commandBuilder.createChild();
}
}
function resolveRequestBuilder() {
if (opts.requestBuilder instanceof request_js_1.RequestBuilder) {
return opts.requestBuilder;
} else if (opts.requestBuilder instanceof Function) {
return opts.requestBuilder(state.requestBuilder);
} else {
const _assertUndefined = opts.requestBuilder;
return state.requestBuilder;
}
}
},
log(...data) {
state.infoLogger.getValue()(getLogText(data));
},
logLight(...data) {
state.infoLogger.getValue()(colors.gray(getLogText(data)));
},
logStep(firstArg, ...data) {
logStep(firstArg, data, (t) => colors.bold(colors.green(t)), state.infoLogger.getValue());
},
logError(firstArg, ...data) {
logStep(firstArg, data, (t) => colors.bold(colors.red(t)), state.errorLogger.getValue());
},
logWarn(firstArg, ...data) {
logStep(firstArg, data, (t) => colors.bold(colors.yellow(t)), state.warnLogger.getValue());
},
logGroup(labelOrAction, maybeAction) {
const label = typeof labelOrAction === "string" ? labelOrAction : void 0;
if (label) {
state.infoLogger.getValue()(getLogText([label]));
}
state.indentLevel.value++;
const action = label != null ? maybeAction : labelOrAction;
if (action != null) {
let wasPromise = false;
try {
const result2 = action();
if (result2 instanceof Promise) {
wasPromise = true;
return result2.finally(() => {
if (state.indentLevel.value > 0) {
state.indentLevel.value--;
}
});
} else {
return result2;
}
} finally {
if (!wasPromise) {
if (state.indentLevel.value > 0) {
state.indentLevel.value--;
}
}
}
}
},
logGroupEnd() {
if (state.indentLevel.value > 0) {
state.indentLevel.value--;
}
},
commandExists(commandName) {
if (state.commandBuilder.getValue()[internal_js_1.getRegisteredCommandNamesSymbol]().includes(commandName)) {
return Promise.resolve(true);
}
return helperObject.which(commandName).then((c) => c != null);
},
commandExistsSync(commandName) {
if (state.commandBuilder.getValue()[internal_js_1.getRegisteredCommandNamesSymbol]().includes(commandName)) {
return true;
}
return helperObject.whichSync(commandName) != null;
},
alert: mod_js_3.alert,
maybeConfirm: mod_js_3.maybeConfirm,
confirm: mod_js_3.confirm,
maybeSelect: mod_js_3.maybeSelect,
select: mod_js_3.select,
maybeMultiSelect: mod_js_3.maybeMultiSelect,
multiSelect: mod_js_3.multiSelect,
maybePrompt: mod_js_3.maybePrompt,
prompt: mod_js_3.prompt,
progress(messageOrText, options) {
const opts = typeof messageOrText === "string" ? (() => {
const words = messageOrText.split(" ");
return {
prefix: words[0],
message: words.length > 1 ? words.slice(1).join(" ") : void 0,
...options
};
})() : messageOrText;
return new mod_js_3.ProgressBar((...data) => {
state.infoLogger.getValue()(...data);
}, opts);
},
setInfoLogger(logger) {
state.infoLogger.setValue(logger);
},
setWarnLogger(logger) {
state.warnLogger.setValue(logger);
},
setErrorLogger(logger) {
state.errorLogger.setValue(logger);
const commandBuilder = state.commandBuilder.getValue();
commandBuilder.setPrintCommandLogger((cmd) => logger(colors.white(">"), colors.blue(cmd)));
state.commandBuilder.setValue(commandBuilder);
},
setPrintCommand(value) {
const commandBuilder = state.commandBuilder.getValue().printCommand(value);
state.commandBuilder.setValue(commandBuilder);
},
setTailDisplay(value) {
const builder = state.commandBuilder.getValue();
const commandBuilder = typeof value === "boolean" ? builder.tailDisplay(value) : builder.tailDisplay(value);
state.commandBuilder.setValue(commandBuilder);
},
setErrorTail(value) {
const builder = state.commandBuilder.getValue();
const commandBuilder = typeof value === "boolean" ? builder.errorTail(value) : builder.errorTail(value);
state.commandBuilder.setValue(commandBuilder);
},
symbols: internal_js_1.symbols,
request(url) {
return state.requestBuilder.url(url);
},
raw(strings, ...exprs) {
const textState = (0, internal_js_1.templateRaw)(strings, exprs);
return state.commandBuilder.getValue()[internal_js_1.setCommandTextStateSymbol](textState);
},
rawArg: mod_js_2.rawArg,
withRetries(opts) {
return withRetries(result, state.errorLogger.getValue(), opts);
},
all(values, transform) {
const items = Array.from(values);
const count = Math.max(1, items.length);
const maxLines = ({ size }) => Math.max(3, Math.floor((size?.rows ?? 24) * 0.9 / count));
return Promise.all(items.map((value) => {
if (value instanceof mod_js_2.CommandBuilder) {
const configured = value.tailDisplay({ maxLines });
return transform ? transform(configured) : configured;
}
return value;
}));
}
}, state.extras);
const keyName = "logDepth";
Object.defineProperty(result, keyName, Object.getOwnPropertyDescriptor(logDepthObj, keyName));
state.requestBuilder = state.requestBuilder[request_js_1.withProgressBarFactorySymbol]((message) => result.progress(message));
return result;
function getLogText(data) {
const combinedText = data.map((d) => {
const typeofD = typeof d;
if (typeofD !== "object" && typeofD !== "undefined") {
return d;
} else {
return (0, node_util_1.inspect)(d, { colors: true });
}
}).join(" ");
if (state.indentLevel.value === 0) {
return combinedText;
} else {
const indentText = " ".repeat(state.indentLevel.value);
return combinedText.split(/\n/).map((l) => `${indentText}${l}`).join("\n");
}
}
function logStep(firstArg, data, colourize, logger) {
if (data.length === 0) {
let i = 0;
while (i < firstArg.length && firstArg[i] === " ") {
i++;
}
while (i < firstArg.length && firstArg[i] !== " ") {
i++;
}
firstArg = colourize(firstArg.substring(0, i)) + firstArg.substring(i);
} else {
firstArg = colourize(firstArg);
}
logger(getLogText([firstArg, ...data]));
}
}
function build$(options = {}) {
return build$FromState(buildInitial$State({
isGlobal: false,
...options
}));
}
exports.$ = build$FromState(buildInitial$State({
isGlobal: true
}));
exports.default = exports.$;
function createPath(path) {
if (path instanceof mod_js_5.Path) {
return path;
} else {
return new mod_js_5.Path(path);
}
}