cli-reap
Version:
CLI and ENV parser; indifferent to argument order or runtime
122 lines (119 loc) • 5.1 kB
JavaScript
// node_modules/globables/dist/index.js
var GLOBAL_THIS = /* @__PURE__ */ (() => typeof globalThis === "object" ? globalThis : (() => {
(function(Object2) {
function get() {
const e = this || self;
e.globalThis = e, delete Object2.prototype._T_;
}
typeof globalThis != "object" && (this ? get() : (Object2.defineProperty(Object2.prototype, "_T_", { configurable: true, get }), _T_));
})(Object);
return typeof globalThis === "object" ? globalThis : {};
})())();
var ARGV = /* @__PURE__ */ (() => {
var _a, _b, _c, _d;
return typeof process === "undefined" ? typeof scriptArgs !== "undefined" ? scriptArgs : [] : (_d = (GLOBAL_THIS == null ? undefined : GLOBAL_THIS["Deno"]) ? (_c = (_a = GLOBAL_THIS == null ? undefined : GLOBAL_THIS["Deno"]) == null ? undefined : _a.args) != null ? _c : ((_b = process["args"]) == null ? undefined : _b.length) ? process["args"] : process["argv"] : process["argv"]) != null ? _d : [];
})();
var ENV = /* @__PURE__ */ (() => {
var _a, _b, _c, _d;
return typeof process === "undefined" ? typeof ((_a = GLOBAL_THIS == null ? undefined : GLOBAL_THIS["std"]) == null ? undefined : _a.getenviron) === "function" ? (_d = (_c = (_b = GLOBAL_THIS["std"]).getenviron) == null ? undefined : _c.call(_b)) != null ? _d : {} : {} : !(GLOBAL_THIS == null ? undefined : GLOBAL_THIS["Deno"]) ? process["env"] : (() => {
var _a2, _b2, _c2, _d2, _e, _f;
try {
return (_f = (_c2 = (_b2 = (_a2 = GLOBAL_THIS == null ? undefined : GLOBAL_THIS["Deno"]) == null ? undefined : _a2.env) == null ? undefined : _b2.toObject) == null ? undefined : _c2.call(_b2)) != null ? _f : ((_d2 = process["env"]) == null ? undefined : _d2.toObject) ? (_e = process["env"]) == null ? undefined : _e.toObject() : process["env"];
} catch (_err) {}
return {};
})();
})();
// src/index.ts
var hasArgv = (keys, argv = ARGV) => !argv?.length ? false : !![keys].flat().filter(Boolean).find((key) => new RegExp(`(^|[^\\S])(?:--|-)${key}(=|\\s|$)`, "i").test(argv.join(" ")));
var quoteNorm = (val) => /^['"]/.test(val) ? val?.replace(/^(['"])(.*)(['"])$/, (m, q1, body, q2) => q1 === q2 ? quoteNorm(body) : m) : val;
var isFlag = (val) => /^-+\w/.test(val ?? "") && Number.isNaN(Number(val));
var isTerm = (val) => val?.trim() === "--";
var toArgvArray = (key, strict = false, _keys = Array.isArray(key) ? key : [key]) => strict ? _keys : _keys.map((item) => [
item,
item.replaceAll(...item.includes("_") ? ["_", "-"] : ["-", "_"])
]).flat();
var cliReap = (argv = ARGV, env = ENV, gthis = GLOBAL_THIS, strict = false) => {
const slice = argv[0] === "node" ? 2 : argv[1] === "run" ? 3 : isFlag(argv[0]) ? 0 : 1;
const cur = argv.map(String).slice(slice);
const cmd = argv.map(String).slice(0, slice);
const end = !!cur.find(isTerm);
const getArgv = (keys, optValue = false) => {
const keyList = toArgvArray(keys, strict);
for (let i = 0;i < cur.length; i++) {
const token = cur[i];
if (isTerm(token)) {
break;
}
if (!token || !isFlag(token)) {
continue;
}
const hasEq = /=/.test(token);
const part = keyList.map((key) => {
const [k, ...parts] = token.replace(isFlag(key) ? /(?!)/ : /^\s*?-+/, "").split(hasEq && optValue ? `${key}=` : new RegExp(`^${key}$`, strict ? "" : "i"));
return !k?.length ? parts.join(key) : k === key ? key : null;
}).find((v) => v !== null) ?? 0;
if (part === 0) {
continue;
}
if (!optValue) {
cur.splice(i, 1);
return true;
}
if (hasEq) {
cur.splice(i, 1);
return quoteNorm(part);
}
const next = cur[i + 1];
if (next !== undefined && !isTerm(next) && !isFlag(next)) {
cur.splice(i, 2);
return quoteNorm(next);
}
}
return null;
};
const getEnv = (keys) => toArgvArray(keys, strict).map((key) => (key in env) ? env[key] : (key in gthis) ? gthis[key] : null).filter(Boolean)[0] ?? null;
const getFlag = (keys) => getArgv(keys, false) !== null ? true : null;
const getOpt = (keys) => getArgv(keys, true);
const getAny = (keys, defaultValue) => getOpt(keys) ?? getFlag(keys) ?? getEnv(keys) ?? (defaultValue !== undefined ? defaultValue : null);
const getPos = () => {
const result = [];
for (let i = 0;i < cur.length; i++) {
const token = cur[i];
if (!token) {
continue;
}
if (isTerm(token)) {
return [...result, ...cur.slice(i + 1)];
}
if (isFlag(token)) {
continue;
}
result.push(token);
}
return result;
};
return {
any: getAny,
cmd: () => cmd,
cur: () => cur,
end: () => end,
env: getEnv,
flag: getFlag,
opt: getOpt,
pos: getPos
};
};
var cliReapStrict = (argv = ARGV, procEnv = ENV, gthis = GLOBAL_THIS) => cliReap(argv, procEnv, gthis, true);
var src_default = cliReap;
export {
quoteNorm,
isFlag,
hasArgv,
src_default as default,
cliReapStrict,
cliReap,
ENV,
ARGV
};
//# debugId=D346F45C437553B064756E2164756E21
//# sourceMappingURL=index.js.map