UNPKG

@sap/generator-cap-project

Version:

Creates a new SAP Cloud Application Programming Model project.

464 lines (463 loc) 11.8 kB
import { isPathSpec as m, toPaths as v } from "@simple-git/args-pathspec"; function* U(e, t) { const n = t === "global"; for (const o of e) o.isGlobal === n && (yield o); } const k = /* @__PURE__ */ new Set([ "--add", "--edit", "--remove-section", "--rename-section", "--replace-all", "--unset", "--unset-all", "-e" ]), S = /* @__PURE__ */ new Set([ "--get", "--get-all", "--get-color", "--get-colorbool", "--get-regexp", "--get-urlmatch", "--list", "-l" ]), P = /* @__PURE__ */ new Set([ "edit", "remove-section", "rename-section", "set", "unset" ]), E = /* @__PURE__ */ new Set(["get", "get-color", "get-colorbool", "list"]); function F(e, t) { for (const { name: o } of U(e, "task")) { if (k.has(o)) return p(!0, t); if (S.has(o)) return p(!1, t); } const n = t.at(0)?.toLowerCase(); return n === void 0 ? null : P.has(n) ? p(!0, t.slice(1)) : E.has(n) ? p(!1, t.slice(1)) : t.length === 1 ? p(!1, t) : p(!0, t); } function p(e = !1, t = []) { const n = t.at(0)?.toLowerCase(); return n === void 0 ? null : { isWrite: e, isRead: !e, key: n, value: t.at(1) }; } function A(e, t) { return t.isWrite && t.value !== void 0 ? { key: t.key, value: t.value, scope: e } : { key: t.key, scope: e }; } function M(e) { const t = e?.indexOf("=") || -1; return !e || t < 0 ? null : { key: e.slice(0, t).trim().toLowerCase(), value: e.slice(t + 1) }; } function N(e) { for (const { name: t } of U(e, "task")) switch (t) { case "--global": return "global"; case "--system": return "system"; case "--worktree": return "worktree"; case "--local": return "local"; case "--file": case "-f": return "file"; } return "local"; } function G({ name: e }) { if (e === "-c" || e === "--config") return "inline"; if (e === "--config-env") return "env"; } function* O(e) { for (const t of e) { const n = G(t), o = n && M(t.value); o && (yield { ...o, scope: n }); } } function L(e, t, n) { const o = { read: [], write: [...O(t)] }; return e === "config" && $( o, N(t), F(t, n) ), o; } function $(e, t, n) { if (n === null) return; const o = A(t, n); n.isWrite ? e.write.push(o) : e.read.push(o); } const x = { short: /* @__PURE__ */ new Map([ ["c", !0] // -c <k=v> set config key for this invocation ]) }, D = { short: new Map([ ["C", !0], // -C <path> change working directory ["P", !1], // -P no pager (alias for --no-pager) ["h", !1], // -h help ["p", !1], // -p paginate ["v", !1], // -v version ...x.short.entries() ]), long: /* @__PURE__ */ new Set([ "attr-source", "config-env", "exec-path", "git-dir", "list-cmds", "namespace", "super-prefix", "work-tree" ]) }, R = { clone: { short: /* @__PURE__ */ new Map([ ["b", !0], // -b <branch> ["j", !0], // -j <n> parallel jobs ["l", !1], // -l local ["n", !1], // -n no-checkout ["o", !0], // -o <name> remote name ["q", !1], // -q quiet ["s", !1], // -s shared ["u", !0] // -u <upload-pack> ]), long: /* @__PURE__ */ new Set(["branch", "config", "jobs", "origin", "upload-pack", "u", "template"]) }, commit: { short: /* @__PURE__ */ new Map([ ["C", !0], // -C <commit> reuse message ["F", !0], // -F <file> read message from file ["c", !0], // -c <commit> reedit message ["m", !0], // -m <msg> ["t", !0] // -t <template> ]), long: /* @__PURE__ */ new Set(["file", "message", "reedit-message", "reuse-message", "template"]) }, config: { short: /* @__PURE__ */ new Map([ ["e", !1], // -e open editor ["f", !0], // -f <file> ["l", !1] // -l list ]), long: /* @__PURE__ */ new Set(["blob", "comment", "default", "file", "type", "value"]) }, fetch: { short: /* @__PURE__ */ new Map(), long: /* @__PURE__ */ new Set(["upload-pack"]) }, init: { short: /* @__PURE__ */ new Map(), long: /* @__PURE__ */ new Set(["template"]) }, pull: { short: /* @__PURE__ */ new Map(), long: /* @__PURE__ */ new Set(["upload-pack"]) }, push: { short: /* @__PURE__ */ new Map(), long: /* @__PURE__ */ new Set(["exec", "receive-pack"]) } }, T = { short: /* @__PURE__ */ new Map(), long: /* @__PURE__ */ new Set() }; function I(e) { const t = R[e ?? ""] ?? T; return { short: new Map([...x.short.entries(), ...t.short.entries()]), long: t.long }; } function b(e, t = D) { if (e.startsWith("--")) { const n = e.indexOf("="); if (n > 2) return [{ name: e.slice(0, n), value: e.slice(n + 1), needsNext: !1 }]; const o = e.slice(2); return [{ name: e, needsNext: t.long.has(o) }]; } if (e.length === 2) { const n = e.charAt(1), o = t.short.get(n); return [{ name: e, needsNext: o === !0 }]; } return W(e, t.short); } function W(e, t) { const n = e.slice(1).split(""), o = []; for (let s = 0; s < n.length; s++) { const r = n[s], l = t.get(r); if (l === void 0) return [{ name: e, needsNext: !1 }]; if (l) { const a = n.slice(s + 1).join(""); if (a && ![...a].every((w) => t.has(w))) return o.push({ name: `-${r}`, value: a, needsNext: !1 }), o; } o.push({ name: `-${r}`, needsNext: l }); } return o; } function j(e, t = []) { let n = 0; for (; n < e.length; ) { const o = String(e[n]); if (!o.startsWith("-") || o.length < 2) break; const s = b(o); let r = n + 1; for (const l of s) { const a = { name: l.name, value: l.value, absorbedNext: !1, isGlobal: !0 }; l.needsNext && a.value === void 0 && r < e.length && (a.value = String(e[r]), a.absorbedNext = !0, r++), t.push(a); } n = r; } return { flags: t, taskIndex: n }; } function B(e, t, n = []) { const o = I(t), s = [], r = []; let l = 0; for (; l < e.length; ) { const a = e[l]; if (m(a)) { r.push(...v(a)), l++; continue; } const f = String(a); if (f === "--") { for (let g = l + 1; g < e.length; g++) { const u = e[g]; m(u) ? r.push(...v(u)) : r.push(String(u)); } break; } if (!f.startsWith("-") || f.length < 2) { s.push(f), l++; continue; } const w = b(f, o); let d = l + 1; for (const g of w) { const u = { name: g.name, value: g.value, absorbedNext: !1, isGlobal: !1 }; g.needsNext && u.value === void 0 && d < e.length && !m(e[d]) && (u.value = String(e[d]), u.absorbedNext = !0, d++), n.push(u); } l = d; } return { flags: n, positionals: s, pathspecs: r }; } function* V({ write: e }) { for (const t of e) for (const n of q) { const o = n(t.key); o && (yield o); } } function c(e, t, n = String(e)) { const o = typeof e == "string" ? new RegExp(`\\s*${e.toLowerCase()}`) : e; return function(r) { if (o.test(r)) return { category: t, message: `Configuring ${n} is not permitted without enabling ${t}` }; }; } function i(e, t) { const n = new RegExp(`\\s*${e.toLowerCase().replace(/\./g, "(..+)?.")}`); return c(n, t, e); } const q = [ c("alias", "allowUnsafeAlias"), c("core.askPass", "allowUnsafeAskPass"), c("core.editor", "allowUnsafeEditor"), c("core.fsmonitor", "allowUnsafeFsMonitor"), c("core.gitProxy", "allowUnsafeGitProxy"), c("core.hooksPath", "allowUnsafeHooksPath"), c("core.pager", "allowUnsafePager"), c("core.sshCommand", "allowUnsafeSshCommand"), i("credential.helper", "allowUnsafeCredentialHelper"), i("diff.command", "allowUnsafeDiffExternal"), c("diff.external", "allowUnsafeDiffExternal"), i("diff.textconv", "allowUnsafeDiffTextConv"), i("filter.clean", "allowUnsafeFilter"), i("filter.smudge", "allowUnsafeFilter"), i("gpg.program", "allowUnsafeGpgProgram"), c("init.templateDir", "allowUnsafeTemplateDir"), i("merge.driver", "allowUnsafeMergeDriver"), i("mergetool.path", "allowUnsafeMergeDriver"), i("mergetool.cmd", "allowUnsafeMergeDriver"), i("protocol.allow", "allowUnsafeProtocolOverride"), i("remote.receivepack", "allowUnsafePack"), i("remote.uploadpack", "allowUnsafePack"), c("sequence.editor", "allowUnsafeEditor") ]; function* K(e, t) { for (const n of t) for (const o of H) { const s = o(e, n.name); s && (yield s); } } function h(e, t, n, o = String(t)) { const s = typeof t == "string" ? new RegExp(`\\s*${t.toLowerCase()}`) : t, r = `Use of ${e ? `${e} with option ` : ""}${o} is not permitted without enabling ${n}`; return function(a, f) { if ((!e || a === e) && s.test(f)) return { category: n, message: r }; }; } const H = [ h( null, /--(upload|receive)-pack/, "allowUnsafePack", "--upload-pack or --receive-pack" ), h("clone", /^-\w*u/, "allowUnsafePack"), h("clone", "--u", "allowUnsafePack"), h("push", "--exec", "allowUnsafePack"), h(null, "--template", "allowUnsafeTemplateDir") ]; function C(e, t, n) { return [...K(e, t), ...V(n)]; } function Y(...e) { const { flags: t, taskIndex: n } = j(e), o = n < e.length ? String(e[n]).toLowerCase() : null, s = o !== null ? e.slice(n + 1) : [], { positionals: r, pathspecs: l } = B(s, o, t), a = L(o, t, r); return { task: o, flags: t.map(J), paths: l, config: a, vulnerabilities: z(C(o, t, a)) }; } function z(e) { return Object.defineProperty(e, "vulnerabilities", { value: e }); } function J({ value: e, name: t }) { return e !== void 0 ? { name: t, value: e } : { name: t }; } const y = { editor: "allowUnsafeEditor", git_askpass: "allowUnsafeAskPass", git_config_global: "allowUnsafeConfigPaths", git_config_system: "allowUnsafeConfigPaths", git_config_count: "allowUnsafeConfigEnvCount", git_config: "allowUnsafeConfigPaths", git_editor: "allowUnsafeEditor", git_exec_path: "allowUnsafeConfigPaths", git_external_diff: "allowUnsafeDiffExternal", git_pager: "allowUnsafePager", git_proxy_command: "allowUnsafeGitProxy", git_template_dir: "allowUnsafeTemplateDir", git_sequence_editor: "allowUnsafeEditor", git_ssh: "allowUnsafeSshCommand", git_ssh_command: "allowUnsafeSshCommand", pager: "allowUnsafePager", prefix: "allowUnsafeConfigPaths", ssh_askpass: "allowUnsafeAskPass" }; function* Q(e) { const t = parseInt(e.git_config_count ?? "0", 10); for (let n = 0; n < t; n++) { const o = e[`git_config_key_${n}`], s = e[`git_config_value_${n}`]; o !== void 0 && (yield { key: o.toLowerCase().trim(), value: s, scope: "env" }); } } function* X(e) { for (const t of Object.keys(e)) if (_(t)) { const n = y[t]; yield { category: n, message: `Use of "${t.toUpperCase()}" is not permitted without enabling ${n}` }; } } function _(e) { return Object.hasOwn(y, e); } function Z(e) { const t = {}; for (const [n, o] of Object.entries(e)) { const s = n.toLowerCase().trim(); (_(s) || s.startsWith("git")) && (t[s] = String(o)); } return t; } function ee(e) { const t = Z(e), n = { read: [], write: [...Q(t)] }, o = [ ...X(t), ...C(null, [], n) ]; return { config: n, vulnerabilities: o }; } function ne(e, t) { return [...Y(...e).vulnerabilities, ...ee(t).vulnerabilities]; } export { Y as parseArgv, ee as parseEnv, ne as vulnerabilityCheck }; //# sourceMappingURL=index.mjs.map