UNPKG

@maryam-dev/partykit

Version:

FORKED: PartyKit simplifies developing multiplayer applications. Everything's better with friends.

1,429 lines (1,419 loc) 3.62 MB
#!/usr/bin/env node import { createRequire as topLevelCreateRequire } from "node:module"; import { fileURLToPath as topLevelFileURLToPath, URL as topLevelURL } from "node:url"; const require = topLevelCreateRequire(import.meta.url); const __filename = topLevelFileURLToPath(import.meta.url); const __dirname = topLevelFileURLToPath(new topLevelURL(".", import.meta.url)); var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { get: (a2, b) => (typeof require !== "undefined" ? require : a2)[b] }) : x)(function(x) { if (typeof require !== "undefined") return require.apply(this, arguments); throw Error('Dynamic require of "' + x + '" is not supported'); }); var __esm = (fn2, res) => function __init() { return fn2 && (res = (0, fn2[__getOwnPropNames(fn2)[0]])(fn2 = 0)), res; }; var __commonJS = (cb, mod) => function __require2() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __export = (target, all2) => { for (var name2 in all2) __defProp(target, name2, { get: all2[name2], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); // ../../node_modules/react/cjs/react.production.min.js var require_react_production_min = __commonJS({ "../../node_modules/react/cjs/react.production.min.js"(exports2) { "use strict"; var l = Symbol.for("react.element"); var n2 = Symbol.for("react.portal"); var p = Symbol.for("react.fragment"); var q = Symbol.for("react.strict_mode"); var r = Symbol.for("react.profiler"); var t = Symbol.for("react.provider"); var u2 = Symbol.for("react.context"); var v = Symbol.for("react.forward_ref"); var w = Symbol.for("react.suspense"); var x = Symbol.for("react.memo"); var y = Symbol.for("react.lazy"); var z2 = Symbol.iterator; function A(a2) { if (null === a2 || "object" !== typeof a2) return null; a2 = z2 && a2[z2] || a2["@@iterator"]; return "function" === typeof a2 ? a2 : null; } var B = { isMounted: function() { return false; }, enqueueForceUpdate: function() { }, enqueueReplaceState: function() { }, enqueueSetState: function() { } }; var C = Object.assign; var D = {}; function E(a2, b, e) { this.props = a2; this.context = b; this.refs = D; this.updater = e || B; } E.prototype.isReactComponent = {}; E.prototype.setState = function(a2, b) { if ("object" !== typeof a2 && "function" !== typeof a2 && null != a2) throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables."); this.updater.enqueueSetState(this, a2, b, "setState"); }; E.prototype.forceUpdate = function(a2) { this.updater.enqueueForceUpdate(this, a2, "forceUpdate"); }; function F() { } F.prototype = E.prototype; function G(a2, b, e) { this.props = a2; this.context = b; this.refs = D; this.updater = e || B; } var H = G.prototype = new F(); H.constructor = G; C(H, E.prototype); H.isPureReactComponent = true; var I = Array.isArray; var J = Object.prototype.hasOwnProperty; var K = { current: null }; var L = { key: true, ref: true, __self: true, __source: true }; function M(a2, b, e) { var d, c3 = {}, k = null, h2 = null; if (null != b) for (d in void 0 !== b.ref && (h2 = b.ref), void 0 !== b.key && (k = "" + b.key), b) J.call(b, d) && !L.hasOwnProperty(d) && (c3[d] = b[d]); var g = arguments.length - 2; if (1 === g) c3.children = e; else if (1 < g) { for (var f = Array(g), m = 0; m < g; m++) f[m] = arguments[m + 2]; c3.children = f; } if (a2 && a2.defaultProps) for (d in g = a2.defaultProps, g) void 0 === c3[d] && (c3[d] = g[d]); return { $$typeof: l, type: a2, key: k, ref: h2, props: c3, _owner: K.current }; } function N(a2, b) { return { $$typeof: l, type: a2.type, key: b, ref: a2.ref, props: a2.props, _owner: a2._owner }; } function O(a2) { return "object" === typeof a2 && null !== a2 && a2.$$typeof === l; } function escape3(a2) { var b = { "=": "=0", ":": "=2" }; return "$" + a2.replace(/[=:]/g, function(a3) { return b[a3]; }); } var P = /\/+/g; function Q(a2, b) { return "object" === typeof a2 && null !== a2 && null != a2.key ? escape3("" + a2.key) : b.toString(36); } function R(a2, b, e, d, c3) { var k = typeof a2; if ("undefined" === k || "boolean" === k) a2 = null; var h2 = false; if (null === a2) h2 = true; else switch (k) { case "string": case "number": h2 = true; break; case "object": switch (a2.$$typeof) { case l: case n2: h2 = true; } } if (h2) return h2 = a2, c3 = c3(h2), a2 = "" === d ? "." + Q(h2, 0) : d, I(c3) ? (e = "", null != a2 && (e = a2.replace(P, "$&/") + "/"), R(c3, b, e, "", function(a3) { return a3; })) : null != c3 && (O(c3) && (c3 = N(c3, e + (!c3.key || h2 && h2.key === c3.key ? "" : ("" + c3.key).replace(P, "$&/") + "/") + a2)), b.push(c3)), 1; h2 = 0; d = "" === d ? "." : d + ":"; if (I(a2)) for (var g = 0; g < a2.length; g++) { k = a2[g]; var f = d + Q(k, g); h2 += R(k, b, e, f, c3); } else if (f = A(a2), "function" === typeof f) for (a2 = f.call(a2), g = 0; !(k = a2.next()).done; ) k = k.value, f = d + Q(k, g++), h2 += R(k, b, e, f, c3); else if ("object" === k) throw b = String(a2), Error("Objects are not valid as a React child (found: " + ("[object Object]" === b ? "object with keys {" + Object.keys(a2).join(", ") + "}" : b) + "). If you meant to render a collection of children, use an array instead."); return h2; } function S(a2, b, e) { if (null == a2) return a2; var d = [], c3 = 0; R(a2, d, "", "", function(a3) { return b.call(e, a3, c3++); }); return d; } function T(a2) { if (-1 === a2._status) { var b = a2._result; b = b(); b.then(function(b2) { if (0 === a2._status || -1 === a2._status) a2._status = 1, a2._result = b2; }, function(b2) { if (0 === a2._status || -1 === a2._status) a2._status = 2, a2._result = b2; }); -1 === a2._status && (a2._status = 0, a2._result = b); } if (1 === a2._status) return a2._result.default; throw a2._result; } var U = { current: null }; var V = { transition: null }; var W = { ReactCurrentDispatcher: U, ReactCurrentBatchConfig: V, ReactCurrentOwner: K }; exports2.Children = { map: S, forEach: function(a2, b, e) { S(a2, function() { b.apply(this, arguments); }, e); }, count: function(a2) { var b = 0; S(a2, function() { b++; }); return b; }, toArray: function(a2) { return S(a2, function(a3) { return a3; }) || []; }, only: function(a2) { if (!O(a2)) throw Error("React.Children.only expected to receive a single React element child."); return a2; } }; exports2.Component = E; exports2.Fragment = p; exports2.Profiler = r; exports2.PureComponent = G; exports2.StrictMode = q; exports2.Suspense = w; exports2.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = W; exports2.cloneElement = function(a2, b, e) { if (null === a2 || void 0 === a2) throw Error("React.cloneElement(...): The argument must be a React element, but you passed " + a2 + "."); var d = C({}, a2.props), c3 = a2.key, k = a2.ref, h2 = a2._owner; if (null != b) { void 0 !== b.ref && (k = b.ref, h2 = K.current); void 0 !== b.key && (c3 = "" + b.key); if (a2.type && a2.type.defaultProps) var g = a2.type.defaultProps; for (f in b) J.call(b, f) && !L.hasOwnProperty(f) && (d[f] = void 0 === b[f] && void 0 !== g ? g[f] : b[f]); } var f = arguments.length - 2; if (1 === f) d.children = e; else if (1 < f) { g = Array(f); for (var m = 0; m < f; m++) g[m] = arguments[m + 2]; d.children = g; } return { $$typeof: l, type: a2.type, key: c3, ref: k, props: d, _owner: h2 }; }; exports2.createContext = function(a2) { a2 = { $$typeof: u2, _currentValue: a2, _currentValue2: a2, _threadCount: 0, Provider: null, Consumer: null, _defaultValue: null, _globalName: null }; a2.Provider = { $$typeof: t, _context: a2 }; return a2.Consumer = a2; }; exports2.createElement = M; exports2.createFactory = function(a2) { var b = M.bind(null, a2); b.type = a2; return b; }; exports2.createRef = function() { return { current: null }; }; exports2.forwardRef = function(a2) { return { $$typeof: v, render: a2 }; }; exports2.isValidElement = O; exports2.lazy = function(a2) { return { $$typeof: y, _payload: { _status: -1, _result: a2 }, _init: T }; }; exports2.memo = function(a2, b) { return { $$typeof: x, type: a2, compare: void 0 === b ? null : b }; }; exports2.startTransition = function(a2) { var b = V.transition; V.transition = {}; try { a2(); } finally { V.transition = b; } }; exports2.unstable_act = function() { throw Error("act(...) is not supported in production builds of React."); }; exports2.useCallback = function(a2, b) { return U.current.useCallback(a2, b); }; exports2.useContext = function(a2) { return U.current.useContext(a2); }; exports2.useDebugValue = function() { }; exports2.useDeferredValue = function(a2) { return U.current.useDeferredValue(a2); }; exports2.useEffect = function(a2, b) { return U.current.useEffect(a2, b); }; exports2.useId = function() { return U.current.useId(); }; exports2.useImperativeHandle = function(a2, b, e) { return U.current.useImperativeHandle(a2, b, e); }; exports2.useInsertionEffect = function(a2, b) { return U.current.useInsertionEffect(a2, b); }; exports2.useLayoutEffect = function(a2, b) { return U.current.useLayoutEffect(a2, b); }; exports2.useMemo = function(a2, b) { return U.current.useMemo(a2, b); }; exports2.useReducer = function(a2, b, e) { return U.current.useReducer(a2, b, e); }; exports2.useRef = function(a2) { return U.current.useRef(a2); }; exports2.useState = function(a2) { return U.current.useState(a2); }; exports2.useSyncExternalStore = function(a2, b, e) { return U.current.useSyncExternalStore(a2, b, e); }; exports2.useTransition = function() { return U.current.useTransition(); }; exports2.version = "18.2.0"; } }); // ../../node_modules/react/index.js var require_react = __commonJS({ "../../node_modules/react/index.js"(exports2, module2) { "use strict"; if (true) { module2.exports = require_react_production_min(); } else { module2.exports = null; } } }); // ../../node_modules/commander/lib/error.js var require_error = __commonJS({ "../../node_modules/commander/lib/error.js"(exports2) { var CommanderError2 = class extends Error { /** * Constructs the CommanderError class * @param {number} exitCode suggested exit code which could be used with process.exit * @param {string} code an id string representing the error * @param {string} message human-readable description of the error */ constructor(exitCode, code, message) { super(message); Error.captureStackTrace(this, this.constructor); this.name = this.constructor.name; this.code = code; this.exitCode = exitCode; this.nestedError = void 0; } }; var InvalidArgumentError2 = class extends CommanderError2 { /** * Constructs the InvalidArgumentError class * @param {string} [message] explanation of why argument is invalid */ constructor(message) { super(1, "commander.invalidArgument", message); Error.captureStackTrace(this, this.constructor); this.name = this.constructor.name; } }; exports2.CommanderError = CommanderError2; exports2.InvalidArgumentError = InvalidArgumentError2; } }); // ../../node_modules/commander/lib/argument.js var require_argument = __commonJS({ "../../node_modules/commander/lib/argument.js"(exports2) { var { InvalidArgumentError: InvalidArgumentError2 } = require_error(); var Argument2 = class { /** * Initialize a new command argument with the given name and description. * The default is that the argument is required, and you can explicitly * indicate this with <> around the name. Put [] around the name for an optional argument. * * @param {string} name * @param {string} [description] */ constructor(name2, description) { this.description = description || ""; this.variadic = false; this.parseArg = void 0; this.defaultValue = void 0; this.defaultValueDescription = void 0; this.argChoices = void 0; switch (name2[0]) { case "<": this.required = true; this._name = name2.slice(1, -1); break; case "[": this.required = false; this._name = name2.slice(1, -1); break; default: this.required = true; this._name = name2; break; } if (this._name.length > 3 && this._name.slice(-3) === "...") { this.variadic = true; this._name = this._name.slice(0, -3); } } /** * Return argument name. * * @return {string} */ name() { return this._name; } /** * @package */ _concatValue(value, previous) { if (previous === this.defaultValue || !Array.isArray(previous)) { return [value]; } return previous.concat(value); } /** * Set the default value, and optionally supply the description to be displayed in the help. * * @param {*} value * @param {string} [description] * @return {Argument} */ default(value, description) { this.defaultValue = value; this.defaultValueDescription = description; return this; } /** * Set the custom handler for processing CLI command arguments into argument values. * * @param {Function} [fn] * @return {Argument} */ argParser(fn2) { this.parseArg = fn2; return this; } /** * Only allow argument value to be one of choices. * * @param {string[]} values * @return {Argument} */ choices(values) { this.argChoices = values.slice(); this.parseArg = (arg, previous) => { if (!this.argChoices.includes(arg)) { throw new InvalidArgumentError2( `Allowed choices are ${this.argChoices.join(", ")}.` ); } if (this.variadic) { return this._concatValue(arg, previous); } return arg; }; return this; } /** * Make argument required. * * @returns {Argument} */ argRequired() { this.required = true; return this; } /** * Make argument optional. * * @returns {Argument} */ argOptional() { this.required = false; return this; } }; function humanReadableArgName(arg) { const nameOutput = arg.name() + (arg.variadic === true ? "..." : ""); return arg.required ? "<" + nameOutput + ">" : "[" + nameOutput + "]"; } exports2.Argument = Argument2; exports2.humanReadableArgName = humanReadableArgName; } }); // ../../node_modules/commander/lib/help.js var require_help = __commonJS({ "../../node_modules/commander/lib/help.js"(exports2) { var { humanReadableArgName } = require_argument(); var Help2 = class { constructor() { this.helpWidth = void 0; this.sortSubcommands = false; this.sortOptions = false; this.showGlobalOptions = false; } /** * Get an array of the visible subcommands. Includes a placeholder for the implicit help command, if there is one. * * @param {Command} cmd * @returns {Command[]} */ visibleCommands(cmd) { const visibleCommands = cmd.commands.filter((cmd2) => !cmd2._hidden); const helpCommand = cmd._getHelpCommand(); if (helpCommand && !helpCommand._hidden) { visibleCommands.push(helpCommand); } if (this.sortSubcommands) { visibleCommands.sort((a2, b) => { return a2.name().localeCompare(b.name()); }); } return visibleCommands; } /** * Compare options for sort. * * @param {Option} a * @param {Option} b * @returns {number} */ compareOptions(a2, b) { const getSortKey = (option) => { return option.short ? option.short.replace(/^-/, "") : option.long.replace(/^--/, ""); }; return getSortKey(a2).localeCompare(getSortKey(b)); } /** * Get an array of the visible options. Includes a placeholder for the implicit help option, if there is one. * * @param {Command} cmd * @returns {Option[]} */ visibleOptions(cmd) { const visibleOptions = cmd.options.filter((option) => !option.hidden); const helpOption = cmd._getHelpOption(); if (helpOption && !helpOption.hidden) { const removeShort = helpOption.short && cmd._findOption(helpOption.short); const removeLong = helpOption.long && cmd._findOption(helpOption.long); if (!removeShort && !removeLong) { visibleOptions.push(helpOption); } else if (helpOption.long && !removeLong) { visibleOptions.push( cmd.createOption(helpOption.long, helpOption.description) ); } else if (helpOption.short && !removeShort) { visibleOptions.push( cmd.createOption(helpOption.short, helpOption.description) ); } } if (this.sortOptions) { visibleOptions.sort(this.compareOptions); } return visibleOptions; } /** * Get an array of the visible global options. (Not including help.) * * @param {Command} cmd * @returns {Option[]} */ visibleGlobalOptions(cmd) { if (!this.showGlobalOptions) return []; const globalOptions = []; for (let ancestorCmd = cmd.parent; ancestorCmd; ancestorCmd = ancestorCmd.parent) { const visibleOptions = ancestorCmd.options.filter( (option) => !option.hidden ); globalOptions.push(...visibleOptions); } if (this.sortOptions) { globalOptions.sort(this.compareOptions); } return globalOptions; } /** * Get an array of the arguments if any have a description. * * @param {Command} cmd * @returns {Argument[]} */ visibleArguments(cmd) { if (cmd._argsDescription) { cmd.registeredArguments.forEach((argument) => { argument.description = argument.description || cmd._argsDescription[argument.name()] || ""; }); } if (cmd.registeredArguments.find((argument) => argument.description)) { return cmd.registeredArguments; } return []; } /** * Get the command term to show in the list of subcommands. * * @param {Command} cmd * @returns {string} */ subcommandTerm(cmd) { const args = cmd.registeredArguments.map((arg) => humanReadableArgName(arg)).join(" "); return cmd._name + (cmd._aliases[0] ? "|" + cmd._aliases[0] : "") + (cmd.options.length ? " [options]" : "") + // simplistic check for non-help option (args ? " " + args : ""); } /** * Get the option term to show in the list of options. * * @param {Option} option * @returns {string} */ optionTerm(option) { return option.flags; } /** * Get the argument term to show in the list of arguments. * * @param {Argument} argument * @returns {string} */ argumentTerm(argument) { return argument.name(); } /** * Get the longest command term length. * * @param {Command} cmd * @param {Help} helper * @returns {number} */ longestSubcommandTermLength(cmd, helper) { return helper.visibleCommands(cmd).reduce((max, command) => { return Math.max(max, helper.subcommandTerm(command).length); }, 0); } /** * Get the longest option term length. * * @param {Command} cmd * @param {Help} helper * @returns {number} */ longestOptionTermLength(cmd, helper) { return helper.visibleOptions(cmd).reduce((max, option) => { return Math.max(max, helper.optionTerm(option).length); }, 0); } /** * Get the longest global option term length. * * @param {Command} cmd * @param {Help} helper * @returns {number} */ longestGlobalOptionTermLength(cmd, helper) { return helper.visibleGlobalOptions(cmd).reduce((max, option) => { return Math.max(max, helper.optionTerm(option).length); }, 0); } /** * Get the longest argument term length. * * @param {Command} cmd * @param {Help} helper * @returns {number} */ longestArgumentTermLength(cmd, helper) { return helper.visibleArguments(cmd).reduce((max, argument) => { return Math.max(max, helper.argumentTerm(argument).length); }, 0); } /** * Get the command usage to be displayed at the top of the built-in help. * * @param {Command} cmd * @returns {string} */ commandUsage(cmd) { let cmdName = cmd._name; if (cmd._aliases[0]) { cmdName = cmdName + "|" + cmd._aliases[0]; } let ancestorCmdNames = ""; for (let ancestorCmd = cmd.parent; ancestorCmd; ancestorCmd = ancestorCmd.parent) { ancestorCmdNames = ancestorCmd.name() + " " + ancestorCmdNames; } return ancestorCmdNames + cmdName + " " + cmd.usage(); } /** * Get the description for the command. * * @param {Command} cmd * @returns {string} */ commandDescription(cmd) { return cmd.description(); } /** * Get the subcommand summary to show in the list of subcommands. * (Fallback to description for backwards compatibility.) * * @param {Command} cmd * @returns {string} */ subcommandDescription(cmd) { return cmd.summary() || cmd.description(); } /** * Get the option description to show in the list of options. * * @param {Option} option * @return {string} */ optionDescription(option) { const extraInfo = []; if (option.argChoices) { extraInfo.push( // use stringify to match the display of the default value `choices: ${option.argChoices.map((choice) => JSON.stringify(choice)).join(", ")}` ); } if (option.defaultValue !== void 0) { const showDefault = option.required || option.optional || option.isBoolean() && typeof option.defaultValue === "boolean"; if (showDefault) { extraInfo.push( `default: ${option.defaultValueDescription || JSON.stringify(option.defaultValue)}` ); } } if (option.presetArg !== void 0 && option.optional) { extraInfo.push(`preset: ${JSON.stringify(option.presetArg)}`); } if (option.envVar !== void 0) { extraInfo.push(`env: ${option.envVar}`); } if (extraInfo.length > 0) { return `${option.description} (${extraInfo.join(", ")})`; } return option.description; } /** * Get the argument description to show in the list of arguments. * * @param {Argument} argument * @return {string} */ argumentDescription(argument) { const extraInfo = []; if (argument.argChoices) { extraInfo.push( // use stringify to match the display of the default value `choices: ${argument.argChoices.map((choice) => JSON.stringify(choice)).join(", ")}` ); } if (argument.defaultValue !== void 0) { extraInfo.push( `default: ${argument.defaultValueDescription || JSON.stringify(argument.defaultValue)}` ); } if (extraInfo.length > 0) { const extraDescripton = `(${extraInfo.join(", ")})`; if (argument.description) { return `${argument.description} ${extraDescripton}`; } return extraDescripton; } return argument.description; } /** * Generate the built-in help text. * * @param {Command} cmd * @param {Help} helper * @returns {string} */ formatHelp(cmd, helper) { const termWidth = helper.padWidth(cmd, helper); const helpWidth = helper.helpWidth || 80; const itemIndentWidth = 2; const itemSeparatorWidth = 2; function formatItem(term, description) { if (description) { const fullText = `${term.padEnd(termWidth + itemSeparatorWidth)}${description}`; return helper.wrap( fullText, helpWidth - itemIndentWidth, termWidth + itemSeparatorWidth ); } return term; } function formatList(textArray) { return textArray.join("\n").replace(/^/gm, " ".repeat(itemIndentWidth)); } let output = [`Usage: ${helper.commandUsage(cmd)}`, ""]; const commandDescription = helper.commandDescription(cmd); if (commandDescription.length > 0) { output = output.concat([ helper.wrap(commandDescription, helpWidth, 0), "" ]); } const argumentList = helper.visibleArguments(cmd).map((argument) => { return formatItem( helper.argumentTerm(argument), helper.argumentDescription(argument) ); }); if (argumentList.length > 0) { output = output.concat(["Arguments:", formatList(argumentList), ""]); } const optionList = helper.visibleOptions(cmd).map((option) => { return formatItem( helper.optionTerm(option), helper.optionDescription(option) ); }); if (optionList.length > 0) { output = output.concat(["Options:", formatList(optionList), ""]); } if (this.showGlobalOptions) { const globalOptionList = helper.visibleGlobalOptions(cmd).map((option) => { return formatItem( helper.optionTerm(option), helper.optionDescription(option) ); }); if (globalOptionList.length > 0) { output = output.concat([ "Global Options:", formatList(globalOptionList), "" ]); } } const commandList = helper.visibleCommands(cmd).map((cmd2) => { return formatItem( helper.subcommandTerm(cmd2), helper.subcommandDescription(cmd2) ); }); if (commandList.length > 0) { output = output.concat(["Commands:", formatList(commandList), ""]); } return output.join("\n"); } /** * Calculate the pad width from the maximum term length. * * @param {Command} cmd * @param {Help} helper * @returns {number} */ padWidth(cmd, helper) { return Math.max( helper.longestOptionTermLength(cmd, helper), helper.longestGlobalOptionTermLength(cmd, helper), helper.longestSubcommandTermLength(cmd, helper), helper.longestArgumentTermLength(cmd, helper) ); } /** * Wrap the given string to width characters per line, with lines after the first indented. * Do not wrap if insufficient room for wrapping (minColumnWidth), or string is manually formatted. * * @param {string} str * @param {number} width * @param {number} indent * @param {number} [minColumnWidth=40] * @return {string} * */ wrap(str, width, indent, minColumnWidth = 40) { const indents = " \\f\\t\\v\xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF"; const manualIndent = new RegExp(`[\\n][${indents}]+`); if (str.match(manualIndent)) return str; const columnWidth = width - indent; if (columnWidth < minColumnWidth) return str; const leadingStr = str.slice(0, indent); const columnText = str.slice(indent).replace("\r\n", "\n"); const indentString2 = " ".repeat(indent); const zeroWidthSpace = "\u200B"; const breaks = `\\s${zeroWidthSpace}`; const regex2 = new RegExp( ` |.{1,${columnWidth - 1}}([${breaks}]|$)|[^${breaks}]+?([${breaks}]|$)`, "g" ); const lines = columnText.match(regex2) || []; return leadingStr + lines.map((line, i2) => { if (line === "\n") return ""; return (i2 > 0 ? indentString2 : "") + line.trimEnd(); }).join("\n"); } }; exports2.Help = Help2; } }); // ../../node_modules/commander/lib/option.js var require_option = __commonJS({ "../../node_modules/commander/lib/option.js"(exports2) { var { InvalidArgumentError: InvalidArgumentError2 } = require_error(); var Option2 = class { /** * Initialize a new `Option` with the given `flags` and `description`. * * @param {string} flags * @param {string} [description] */ constructor(flags, description) { this.flags = flags; this.description = description || ""; this.required = flags.includes("<"); this.optional = flags.includes("["); this.variadic = /\w\.\.\.[>\]]$/.test(flags); this.mandatory = false; const optionFlags = splitOptionFlags(flags); this.short = optionFlags.shortFlag; this.long = optionFlags.longFlag; this.negate = false; if (this.long) { this.negate = this.long.startsWith("--no-"); } this.defaultValue = void 0; this.defaultValueDescription = void 0; this.presetArg = void 0; this.envVar = void 0; this.parseArg = void 0; this.hidden = false; this.argChoices = void 0; this.conflictsWith = []; this.implied = void 0; } /** * Set the default value, and optionally supply the description to be displayed in the help. * * @param {*} value * @param {string} [description] * @return {Option} */ default(value, description) { this.defaultValue = value; this.defaultValueDescription = description; return this; } /** * Preset to use when option used without option-argument, especially optional but also boolean and negated. * The custom processing (parseArg) is called. * * @example * new Option('--color').default('GREYSCALE').preset('RGB'); * new Option('--donate [amount]').preset('20').argParser(parseFloat); * * @param {*} arg * @return {Option} */ preset(arg) { this.presetArg = arg; return this; } /** * Add option name(s) that conflict with this option. * An error will be displayed if conflicting options are found during parsing. * * @example * new Option('--rgb').conflicts('cmyk'); * new Option('--js').conflicts(['ts', 'jsx']); * * @param {(string | string[])} names * @return {Option} */ conflicts(names) { this.conflictsWith = this.conflictsWith.concat(names); return this; } /** * Specify implied option values for when this option is set and the implied options are not. * * The custom processing (parseArg) is not called on the implied values. * * @example * program * .addOption(new Option('--log', 'write logging information to file')) * .addOption(new Option('--trace', 'log extra details').implies({ log: 'trace.txt' })); * * @param {object} impliedOptionValues * @return {Option} */ implies(impliedOptionValues) { let newImplied = impliedOptionValues; if (typeof impliedOptionValues === "string") { newImplied = { [impliedOptionValues]: true }; } this.implied = Object.assign(this.implied || {}, newImplied); return this; } /** * Set environment variable to check for option value. * * An environment variable is only used if when processed the current option value is * undefined, or the source of the current value is 'default' or 'config' or 'env'. * * @param {string} name * @return {Option} */ env(name2) { this.envVar = name2; return this; } /** * Set the custom handler for processing CLI option arguments into option values. * * @param {Function} [fn] * @return {Option} */ argParser(fn2) { this.parseArg = fn2; return this; } /** * Whether the option is mandatory and must have a value after parsing. * * @param {boolean} [mandatory=true] * @return {Option} */ makeOptionMandatory(mandatory = true) { this.mandatory = !!mandatory; return this; } /** * Hide option in help. * * @param {boolean} [hide=true] * @return {Option} */ hideHelp(hide = true) { this.hidden = !!hide; return this; } /** * @package */ _concatValue(value, previous) { if (previous === this.defaultValue || !Array.isArray(previous)) { return [value]; } return previous.concat(value); } /** * Only allow option value to be one of choices. * * @param {string[]} values * @return {Option} */ choices(values) { this.argChoices = values.slice(); this.parseArg = (arg, previous) => { if (!this.argChoices.includes(arg)) { throw new InvalidArgumentError2( `Allowed choices are ${this.argChoices.join(", ")}.` ); } if (this.variadic) { return this._concatValue(arg, previous); } return arg; }; return this; } /** * Return option name. * * @return {string} */ name() { if (this.long) { return this.long.replace(/^--/, ""); } return this.short.replace(/^-/, ""); } /** * Return option name, in a camelcase format that can be used * as a object attribute key. * * @return {string} */ attributeName() { return camelcase(this.name().replace(/^no-/, "")); } /** * Check if `arg` matches the short or long flag. * * @param {string} arg * @return {boolean} * @package */ is(arg) { return this.short === arg || this.long === arg; } /** * Return whether a boolean option. * * Options are one of boolean, negated, required argument, or optional argument. * * @return {boolean} * @package */ isBoolean() { return !this.required && !this.optional && !this.negate; } }; var DualOptions = class { /** * @param {Option[]} options */ constructor(options) { this.positiveOptions = /* @__PURE__ */ new Map(); this.negativeOptions = /* @__PURE__ */ new Map(); this.dualOptions = /* @__PURE__ */ new Set(); options.forEach((option) => { if (option.negate) { this.negativeOptions.set(option.attributeName(), option); } else { this.positiveOptions.set(option.attributeName(), option); } }); this.negativeOptions.forEach((value, key) => { if (this.positiveOptions.has(key)) { this.dualOptions.add(key); } }); } /** * Did the value come from the option, and not from possible matching dual option? * * @param {*} value * @param {Option} option * @returns {boolean} */ valueFromOption(value, option) { const optionKey = option.attributeName(); if (!this.dualOptions.has(optionKey)) return true; const preset = this.negativeOptions.get(optionKey).presetArg; const negativeValue = preset !== void 0 ? preset : false; return option.negate === (negativeValue === value); } }; function camelcase(str) { return str.split("-").reduce((str2, word) => { return str2 + word[0].toUpperCase() + word.slice(1); }); } function splitOptionFlags(flags) { let shortFlag; let longFlag; const flagParts = flags.split(/[ |,]+/); if (flagParts.length > 1 && !/^[[<]/.test(flagParts[1])) shortFlag = flagParts.shift(); longFlag = flagParts.shift(); if (!shortFlag && /^-[^-]$/.test(longFlag)) { shortFlag = longFlag; longFlag = void 0; } return { shortFlag, longFlag }; } exports2.Option = Option2; exports2.DualOptions = DualOptions; } }); // ../../node_modules/commander/lib/suggestSimilar.js var require_suggestSimilar = __commonJS({ "../../node_modules/commander/lib/suggestSimilar.js"(exports2) { var maxDistance = 3; function editDistance(a2, b) { if (Math.abs(a2.length - b.length) > maxDistance) return Math.max(a2.length, b.length); const d = []; for (let i2 = 0; i2 <= a2.length; i2++) { d[i2] = [i2]; } for (let j = 0; j <= b.length; j++) { d[0][j] = j; } for (let j = 1; j <= b.length; j++) { for (let i2 = 1; i2 <= a2.length; i2++) { let cost = 1; if (a2[i2 - 1] === b[j - 1]) { cost = 0; } else { cost = 1; } d[i2][j] = Math.min( d[i2 - 1][j] + 1, // deletion d[i2][j - 1] + 1, // insertion d[i2 - 1][j - 1] + cost // substitution ); if (i2 > 1 && j > 1 && a2[i2 - 1] === b[j - 2] && a2[i2 - 2] === b[j - 1]) { d[i2][j] = Math.min(d[i2][j], d[i2 - 2][j - 2] + 1); } } } return d[a2.length][b.length]; } function suggestSimilar(word, candidates) { if (!candidates || candidates.length === 0) return ""; candidates = Array.from(new Set(candidates)); const searchingOptions = word.startsWith("--"); if (searchingOptions) { word = word.slice(2); candidates = candidates.map((candidate) => candidate.slice(2)); } let similar = []; let bestDistance = maxDistance; const minSimilarity = 0.4; candidates.forEach((candidate) => { if (candidate.length <= 1) return; const distance = editDistance(word, candidate); const length = Math.max(word.length, candidate.length); const similarity = (length - distance) / length; if (similarity > minSimilarity) { if (distance < bestDistance) { bestDistance = distance; similar = [candidate]; } else if (distance === bestDistance) { similar.push(candidate); } } }); similar.sort((a2, b) => a2.localeCompare(b)); if (searchingOptions) { similar = similar.map((candidate) => `--${candidate}`); } if (similar.length > 1) { return ` (Did you mean one of ${similar.join(", ")}?)`; } if (similar.length === 1) { return ` (Did you mean ${similar[0]}?)`; } return ""; } exports2.suggestSimilar = suggestSimilar; } }); // ../../node_modules/commander/lib/command.js var require_command = __commonJS({ "../../node_modules/commander/lib/command.js"(exports2) { var EventEmitter6 = __require("node:events").EventEmitter; var childProcess2 = __require("node:child_process"); var path17 = __require("node:path"); var fs14 = __require("node:fs"); var process36 = __require("node:process"); var { Argument: Argument2, humanReadableArgName } = require_argument(); var { CommanderError: CommanderError2 } = require_error(); var { Help: Help2 } = require_help(); var { Option: Option2, DualOptions } = require_option(); var { suggestSimilar } = require_suggestSimilar(); var Command2 = class _Command extends EventEmitter6 { /** * Initialize a new `Command`. * * @param {string} [name] */ constructor(name2) { super(); this.commands = []; this.options = []; this.parent = null; this._allowUnknownOption = false; this._allowExcessArguments = true; this.registeredArguments = []; this._args = this.registeredArguments; this.args = []; this.rawArgs = []; this.processedArgs = []; this._scriptPath = null; this._name = name2 || ""; this._optionValues = {}; this._optionValueSources = {}; this._storeOptionsAsProperties = false; this._actionHandler = null; this._executableHandler = false; this._executableFile = null; this._executableDir = null; this._defaultCommandName = null; this._exitCallback = null; this._aliases = []; this._combineFlagAndOptionalValue = true; this._description = ""; this._summary = ""; this._argsDescription = void 0; this._enablePositionalOptions = false; this._passThroughOptions = false; this._lifeCycleHooks = {}; this._showHelpAfterError = false; this._showSuggestionAfterError = true; this._outputConfiguration = { writeOut: (str) => process36.stdout.write(str), writeErr: (str) => process36.stderr.write(str), getOutHelpWidth: () => process36.stdout.isTTY ? process36.stdout.columns : void 0, getErrHelpWidth: () => process36.stderr.isTTY ? process36.stderr.columns : void 0, outputError: (str, write) => write(str) }; this._hidden = false; this._helpOption = void 0; this._addImplicitHelpCommand = void 0; this._helpCommand = void 0; this._helpConfiguration = {}; } /** * Copy settings that are useful to have in common across root command and subcommands. * * (Used internally when adding a command using `.command()` so subcommands inherit parent settings.) * * @param {Command} sourceCommand * @return {Command} `this` command for chaining */ copyInheritedSettings(sourceCommand) { this._outputConfiguration = sourceCommand._outputConfiguration; this._helpOption = sourceCommand._helpOption; this._helpCommand = sourceCommand._helpCommand; this._helpConfiguration = sourceCommand._helpConfiguration; this._exitCallback = sourceCommand._exitCallback; this._storeOptionsAsProperties = sourceCommand._storeOptionsAsProperties; this._combineFlagAndOptionalValue = sourceCommand._combineFlagAndOptionalValue; this._allowExcessArguments = sourceCommand._allowExcessArguments; this._enablePositionalOptions = sourceCommand._enablePositionalOptions; this._showHelpAfterError = sourceCommand._showHelpAfterError; this._showSuggestionAfterError = sourceCommand._showSuggestionAfterError; return this; } /** * @returns {Command[]} * @private */ _getCommandAndAncestors() { const result = []; for (let command = this; command; command = command.parent) { result.push(command); } return result; } /** * Define a command. * * There are two styles of command: pay attention to where to put the description. * * @example * // Command implemented using action handler (description is supplied separately to `.command`) * program * .command('clone <source> [destination]') * .description('clone a repository into a newly created directory') * .action((source, destination) => { * console.log('clone command called'); * }); * * // Command implemented using separate executable file (description is second parameter to `.command`) * program * .command('start <service>', 'start named service') * .command('stop [service]', 'stop named service, or all if no name supplied'); * * @param {string} nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...` * @param {(object | string)} [actionOptsOrExecDesc] - configuration options (for action), or description (for executable) * @param {object} [execOpts] - configuration options (for executable) * @return {Command} returns new command for action handler, or `this` for executable command */ command(nameAndArgs, actionOptsOrExecDesc, execOpts) { let desc = actionOptsOrExecDesc; let opts = execOpts; if (typeof desc === "object" && desc !== null) { opts = desc; desc = null; } opts = opts || {}; const [, name2, args] = nameAndArgs.match(/([^ ]+) *(.*)/); const cmd = this.createCommand(name2); if (desc) { cmd.description(desc); cmd._executableHandler = true; } if (opts.isDefault) this._defaultCommandName = cmd._name; cmd._hidden = !!(opts.noHelp || opts.hidden); cmd._executableFile = opts.executableFile || null; if (args) cmd.arguments(args); this._registerCommand(cmd); cmd.parent = this; cmd.copyInheritedSettings(this); if (desc) return this; return cmd; } /** * Factory routine to create a new unattached command. * * See .command() for creating an attached subcommand, which uses this routine to * create the command. You can override createCommand to customise subcommands. * * @param {string} [name] * @return {Command} new command */ createCommand(name2) { return new _Command(name2); } /** * You can customise the help with a subclass of Help by overriding createHelp, * or by overriding Help properties using configureHelp(). * * @return {Help} */ createHelp() { return Object.assign(new Help2(), this.configureHelp()); } /** * You can customise the help by overriding Help properties using configureHelp(), * or with a subclass of Help by overriding createHelp().