/* THIS IS A GENERATED/BUNDLED FILE BY ESBUILD if you want to view the source, please visit the github repository of this plugin */ 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 __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key2 of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key2) && key2 !== except) __defProp(to, key2, { get: () => from[key2], enumerable: !(desc = __getOwnPropDesc(from, key2)) || desc.enumerable }); } return to; }; 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 )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // node_modules/hogan.js/lib/compiler.js var require_compiler = __commonJS({ "node_modules/hogan.js/lib/compiler.js"(exports) { (function(Hogan4) { var rIsWhitespace = /\S/, rQuot = /\"/g, rNewline = /\n/g, rCr = /\r/g, rSlash = /\\/g, rLineSep = /\u2028/, rParagraphSep = /\u2029/; Hogan4.tags = { "#": 1, "^": 2, "<": 3, "$": 4, "/": 5, "!": 6, ">": 7, "=": 8, "_v": 9, "{": 10, "&": 11, "_t": 12 }; Hogan4.scan = function scan(text, delimiters) { var len = text.length, IN_TEXT = 0, IN_TAG_TYPE = 1, IN_TAG = 2, state = IN_TEXT, tagType = null, tag = null, buf = "", tokens = [], seenTag = false, i = 0, lineStart = 0, otag = "{{", ctag = "}}"; function addBuf() { if (buf.length > 0) { tokens.push({ tag: "_t", text: new String(buf) }); buf = ""; } } function lineIsWhitespace() { var isAllWhitespace = true; for (var j = lineStart; j < tokens.length; j++) { isAllWhitespace = Hogan4.tags[tokens[j].tag] < Hogan4.tags["_v"] || tokens[j].tag == "_t" && tokens[j].text.match(rIsWhitespace) === null; if (!isAllWhitespace) { return false; } } return isAllWhitespace; } function filterLine(haveSeenTag, noNewLine) { addBuf(); if (haveSeenTag && lineIsWhitespace()) { for (var j = lineStart, next; j < tokens.length; j++) { if (tokens[j].text) { if ((next = tokens[j + 1]) && next.tag == ">") { next.indent = tokens[j].text.toString(); } tokens.splice(j, 1); } } } else if (!noNewLine) { tokens.push({ tag: "\n" }); } seenTag = false; lineStart = tokens.length; } function changeDelimiters(text2, index) { var close = "=" + ctag, closeIndex = text2.indexOf(close, index), delimiters2 = trim( text2.substring(text2.indexOf("=", index) + 1, closeIndex) ).split(" "); otag = delimiters2[0]; ctag = delimiters2[delimiters2.length - 1]; return closeIndex + close.length - 1; } if (delimiters) { delimiters = delimiters.split(" "); otag = delimiters[0]; ctag = delimiters[1]; } for (i = 0; i < len; i++) { if (state == IN_TEXT) { if (tagChange(otag, text, i)) { --i; addBuf(); state = IN_TAG_TYPE; } else { if (text.charAt(i) == "\n") { filterLine(seenTag); } else { buf += text.charAt(i); } } } else if (state == IN_TAG_TYPE) { i += otag.length - 1; tag = Hogan4.tags[text.charAt(i + 1)]; tagType = tag ? text.charAt(i + 1) : "_v"; if (tagType == "=") { i = changeDelimiters(text, i); state = IN_TEXT; } else { if (tag) { i++; } state = IN_TAG; } seenTag = i; } else { if (tagChange(ctag, text, i)) { tokens.push({ tag: tagType, n: trim(buf), otag, ctag, i: tagType == "/" ? seenTag - otag.length : i + ctag.length }); buf = ""; i += ctag.length - 1; state = IN_TEXT; if (tagType == "{") { if (ctag == "}}") { i++; } else { cleanTripleStache(tokens[tokens.length - 1]); } } } else { buf += text.charAt(i); } } } filterLine(seenTag, true); return tokens; }; function cleanTripleStache(token) { if (token.n.substr(token.n.length - 1) === "}") { token.n = token.n.substring(0, token.n.length - 1); } } function trim(s) { if (s.trim) { return s.trim(); } return s.replace(/^\s*|\s*$/g, ""); } function tagChange(tag, text, index) { if (text.charAt(index) != tag.charAt(0)) { return false; } for (var i = 1, l = tag.length; i < l; i++) { if (text.charAt(index + i) != tag.charAt(i)) { return false; } } return true; } var allowedInSuper = { "_t": true, "\n": true, "$": true, "/": true }; function buildTree(tokens, kind, stack, customTags) { var instructions = [], opener = null, tail = null, token = null; tail = stack[stack.length - 1]; while (tokens.length > 0) { token = tokens.shift(); if (tail && tail.tag == "<" && !(token.tag in allowedInSuper)) { throw new Error("Illegal content in < super tag."); } if (Hogan4.tags[token.tag] <= Hogan4.tags["$"] || isOpener(token, customTags)) { stack.push(token); token.nodes = buildTree(tokens, token.tag, stack, customTags); } else if (token.tag == "/") { if (stack.length === 0) { throw new Error("Closing tag without opener: /" + token.n); } opener = stack.pop(); if (token.n != opener.n && !isCloser(token.n, opener.n, customTags)) { throw new Error("Nesting error: " + opener.n + " vs. " + token.n); } opener.end = token.i; return instructions; } else if (token.tag == "\n") { token.last = tokens.length == 0 || tokens[0].tag == "\n"; } instructions.push(token); } if (stack.length > 0) { throw new Error("missing closing tag: " + stack.pop().n); } return instructions; } function isOpener(token, tags) { for (var i = 0, l = tags.length; i < l; i++) { if (tags[i].o == token.n) { token.tag = "#"; return true; } } } function isCloser(close, open, tags) { for (var i = 0, l = tags.length; i < l; i++) { if (tags[i].c == close && tags[i].o == open) { return true; } } } function stringifySubstitutions(obj) { var items = []; for (var key2 in obj) { items.push('"' + esc(key2) + '": function(c,p,t,i) {' + obj[key2] + "}"); } return "{ " + items.join(",") + " }"; } function stringifyPartials(codeObj) { var partials = []; for (var key2 in codeObj.partials) { partials.push('"' + esc(key2) + '":{name:"' + esc(codeObj.partials[key2].name) + '", ' + stringifyPartials(codeObj.partials[key2]) + "}"); } return "partials: {" + partials.join(",") + "}, subs: " + stringifySubstitutions(codeObj.subs); } Hogan4.stringify = function(codeObj, text, options) { return "{code: function (c,p,i) { " + Hogan4.wrapMain(codeObj.code) + " }," + stringifyPartials(codeObj) + "}"; }; var serialNo = 0; Hogan4.generate = function(tree, text, options) { serialNo = 0; var context = { code: "", subs: {}, partials: {} }; Hogan4.walk(tree, context); if (options.asString) { return this.stringify(context, text, options); } return this.makeTemplate(context, text, options); }; Hogan4.wrapMain = function(code) { return 'var t=this;t.b(i=i||"");' + code + "return t.fl();"; }; Hogan4.template = Hogan4.Template; Hogan4.makeTemplate = function(codeObj, text, options) { var template = this.makePartials(codeObj); template.code = new Function("c", "p", "i", this.wrapMain(codeObj.code)); return new this.template(template, text, this, options); }; Hogan4.makePartials = function(codeObj) { var key2, template = { subs: {}, partials: codeObj.partials, name: codeObj.name }; for (key2 in template.partials) { template.partials[key2] = this.makePartials(template.partials[key2]); } for (key2 in codeObj.subs) { template.subs[key2] = new Function("c", "p", "t", "i", codeObj.subs[key2]); } return template; }; function esc(s) { return s.replace(rSlash, "\\\\").replace(rQuot, '\\"').replace(rNewline, "\\n").replace(rCr, "\\r").replace(rLineSep, "\\u2028").replace(rParagraphSep, "\\u2029"); } function chooseMethod(s) { return ~s.indexOf(".") ? "d" : "f"; } function createPartial(node, context) { var prefix = "<" + (context.prefix || ""); var sym = prefix + node.n + serialNo++; context.partials[sym] = { name: node.n, partials: {} }; context.code += 't.b(t.rp("' + esc(sym) + '",c,p,"' + (node.indent || "") + '"));'; return sym; } Hogan4.codegen = { "#": function(node, context) { context.code += "if(t.s(t." + chooseMethod(node.n) + '("' + esc(node.n) + '",c,p,1),c,p,0,' + node.i + "," + node.end + ',"' + node.otag + " " + node.ctag + '")){t.rs(c,p,function(c,p,t){'; Hogan4.walk(node.nodes, context); context.code += "});c.pop();}"; }, "^": function(node, context) { context.code += "if(!t.s(t." + chooseMethod(node.n) + '("' + esc(node.n) + '",c,p,1),c,p,1,0,0,"")){'; Hogan4.walk(node.nodes, context); context.code += "};"; }, ">": createPartial, "<": function(node, context) { var ctx = { partials: {}, code: "", subs: {}, inPartial: true }; Hogan4.walk(node.nodes, ctx); var template = context.partials[createPartial(node, context)]; template.subs = ctx.subs; template.partials = ctx.partials; }, "$": function(node, context) { var ctx = { subs: {}, code: "", partials: context.partials, prefix: node.n }; Hogan4.walk(node.nodes, ctx); context.subs[node.n] = ctx.code; if (!context.inPartial) { context.code += 't.sub("' + esc(node.n) + '",c,p,i);'; } }, "\n": function(node, context) { context.code += write('"\\n"' + (node.last ? "" : " + i")); }, "_v": function(node, context) { context.code += "t.b(t.v(t." + chooseMethod(node.n) + '("' + esc(node.n) + '",c,p,0)));'; }, "_t": function(node, context) { context.code += write('"' + esc(node.text) + '"'); }, "{": tripleStache, "&": tripleStache }; function tripleStache(node, context) { context.code += "t.b(t.t(t." + chooseMethod(node.n) + '("' + esc(node.n) + '",c,p,0)));'; } function write(s) { return "t.b(" + s + ");"; } Hogan4.walk = function(nodelist, context) { var func; for (var i = 0, l = nodelist.length; i < l; i++) { func = Hogan4.codegen[nodelist[i].tag]; func && func(nodelist[i], context); } return context; }; Hogan4.parse = function(tokens, text, options) { options = options || {}; return buildTree(tokens, "", [], options.sectionTags || []); }; Hogan4.cache = {}; Hogan4.cacheKey = function(text, options) { return [text, !!options.asString, !!options.disableLambda, options.delimiters, !!options.modelGet].join("||"); }; Hogan4.compile = function(text, options) { options = options || {}; var key2 = Hogan4.cacheKey(text, options); var template = this.cache[key2]; if (template) { var partials = template.partials; for (var name in partials) { delete partials[name].instance; } return template; } template = this.generate(this.parse(this.scan(text, options.delimiters), text, options), text, options); return this.cache[key2] = template; }; })(typeof exports !== "undefined" ? exports : Hogan); } }); // node_modules/hogan.js/lib/template.js var require_template = __commonJS({ "node_modules/hogan.js/lib/template.js"(exports) { var Hogan4 = {}; (function(Hogan5) { Hogan5.Template = function(codeObj, text, compiler, options) { codeObj = codeObj || {}; this.r = codeObj.code || this.r; this.c = compiler; this.options = options || {}; this.text = text || ""; this.partials = codeObj.partials || {}; this.subs = codeObj.subs || {}; this.buf = ""; }; Hogan5.Template.prototype = { // render: replaced by generated code. r: function(context, partials, indent) { return ""; }, // variable escaping v: hoganEscape, // triple stache t: coerceToString, render: function render2(context, partials, indent) { return this.ri([context], partials || {}, indent); }, // render internal -- a hook for overrides that catches partials too ri: function(context, partials, indent) { return this.r(context, partials, indent); }, // ensurePartial ep: function(symbol, partials) { var partial = this.partials[symbol]; var template = partials[partial.name]; if (partial.instance && partial.base == template) { return partial.instance; } if (typeof template == "string") { if (!this.c) { throw new Error("No compiler available."); } template = this.c.compile(template, this.options); } if (!template) { return null; } this.partials[symbol].base = template; if (partial.subs) { if (!partials.stackText) partials.stackText = {}; for (key in partial.subs) { if (!partials.stackText[key]) { partials.stackText[key] = this.activeSub !== void 0 && partials.stackText[this.activeSub] ? partials.stackText[this.activeSub] : this.text; } } template = createSpecializedPartial( template, partial.subs, partial.partials, this.stackSubs, this.stackPartials, partials.stackText ); } this.partials[symbol].instance = template; return template; }, // tries to find a partial in the current scope and render it rp: function(symbol, context, partials, indent) { var partial = this.ep(symbol, partials); if (!partial) { return ""; } return partial.ri(context, partials, indent); }, // render a section rs: function(context, partials, section) { var tail = context[context.length - 1]; if (!isArray(tail)) { section(context, partials, this); return; } for (var i = 0; i < tail.length; i++) { context.push(tail[i]); section(context, partials, this); context.pop(); } }, // maybe start a section s: function(val, ctx, partials, inverted, start, end, tags) { var pass; if (isArray(val) && val.length === 0) { return false; } if (typeof val == "function") { val = this.ms(val, ctx, partials, inverted, start, end, tags); } pass = !!val; if (!inverted && pass && ctx) { ctx.push(typeof val == "object" ? val : ctx[ctx.length - 1]); } return pass; }, // find values with dotted names d: function(key2, ctx, partials, returnFound) { var found, names = key2.split("."), val = this.f(names[0], ctx, partials, returnFound), doModelGet = this.options.modelGet, cx = null; if (key2 === "." && isArray(ctx[ctx.length - 2])) { val = ctx[ctx.length - 1]; } else { for (var i = 1; i < names.length; i++) { found = findInScope(names[i], val, doModelGet); if (found !== void 0) { cx = val; val = found; } else { val = ""; } } } if (returnFound && !val) { return false; } if (!returnFound && typeof val == "function") { ctx.push(cx); val = this.mv(val, ctx, partials); ctx.pop(); } return val; }, // find values with normal names f: function(key2, ctx, partials, returnFound) { var val = false, v = null, found = false, doModelGet = this.options.modelGet; for (var i = ctx.length - 1; i >= 0; i--) { v = ctx[i]; val = findInScope(key2, v, doModelGet); if (val !== void 0) { found = true; break; } } if (!found) { return returnFound ? false : ""; } if (!returnFound && typeof val == "function") { val = this.mv(val, ctx, partials); } return val; }, // higher order templates ls: function(func, cx, partials, text, tags) { var oldTags = this.options.delimiters; this.options.delimiters = tags; this.b(this.ct(coerceToString(func.call(cx, text)), cx, partials)); this.options.delimiters = oldTags; return false; }, // compile text ct: function(text, cx, partials) { if (this.options.disableLambda) { throw new Error("Lambda features disabled."); } return this.c.compile(text, this.options).render(cx, partials); }, // template result buffering b: function(s) { this.buf += s; }, fl: function() { var r = this.buf; this.buf = ""; return r; }, // method replace section ms: function(func, ctx, partials, inverted, start, end, tags) { var textSource, cx = ctx[ctx.length - 1], result = func.call(cx); if (typeof result == "function") { if (inverted) { return true; } else { textSource = this.activeSub && this.subsText && this.subsText[this.activeSub] ? this.subsText[this.activeSub] : this.text; return this.ls(result, cx, partials, textSource.substring(start, end), tags); } } return result; }, // method replace variable mv: function(func, ctx, partials) { var cx = ctx[ctx.length - 1]; var result = func.call(cx); if (typeof result == "function") { return this.ct(coerceToString(result.call(cx)), cx, partials); } return result; }, sub: function(name, context, partials, indent) { var f = this.subs[name]; if (f) { this.activeSub = name; f(context, partials, this, indent); this.activeSub = false; } } }; function findInScope(key2, scope, doModelGet) { var val; if (scope && typeof scope == "object") { if (scope[key2] !== void 0) { val = scope[key2]; } else if (doModelGet && scope.get && typeof scope.get == "function") { val = scope.get(key2); } } return val; } function createSpecializedPartial(instance, subs, partials, stackSubs, stackPartials, stackText) { function PartialTemplate() { } ; PartialTemplate.prototype = instance; function Substitutions() { } ; Substitutions.prototype = instance.subs; var key2; var partial = new PartialTemplate(); partial.subs = new Substitutions(); partial.subsText = {}; partial.buf = ""; stackSubs = stackSubs || {}; partial.stackSubs = stackSubs; partial.subsText = stackText; for (key2 in subs) { if (!stackSubs[key2]) stackSubs[key2] = subs[key2]; } for (key2 in stackSubs) { partial.subs[key2] = stackSubs[key2]; } stackPartials = stackPartials || {}; partial.stackPartials = stackPartials; for (key2 in partials) { if (!stackPartials[key2]) stackPartials[key2] = partials[key2]; } for (key2 in stackPartials) { partial.partials[key2] = stackPartials[key2]; } return partial; } var rAmp = /&/g, rLt = //g, rApos = /\'/g, rQuot = /\"/g, hChars = /[&<>\"\']/; function coerceToString(val) { return String(val === null || val === void 0 ? "" : val); } function hoganEscape(str) { str = coerceToString(str); return hChars.test(str) ? str.replace(rAmp, "&").replace(rLt, "<").replace(rGt, ">").replace(rApos, "'").replace(rQuot, """) : str; } var isArray = Array.isArray || function(a) { return Object.prototype.toString.call(a) === "[object Array]"; }; })(typeof exports !== "undefined" ? exports : Hogan4); } }); // node_modules/hogan.js/lib/hogan.js var require_hogan = __commonJS({ "node_modules/hogan.js/lib/hogan.js"(exports, module2) { var Hogan4 = require_compiler(); Hogan4.Template = require_template().Template; Hogan4.template = Hogan4.Template; module2.exports = Hogan4; } }); // node_modules/typed-assert/build/index.js var require_build = __commonJS({ "node_modules/typed-assert/build/index.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.check = exports.isPromise = exports.isInstanceOf = exports.isOneOfType = exports.isOneOf = exports.isOptionOfType = exports.isArrayOfType = exports.isRecordOfType = exports.isArray = exports.isRecordWithKeys = exports.isRecord = exports.isDate = exports.isString = exports.isNumber = exports.isBoolean = exports.isExactly = exports.isNotVoid = exports.isNotUndefined = exports.isNotNull = exports.isNever = exports.isUnknown = exports.safeJsonParse = exports.setBaseAssert = exports.assert = exports.defaultAssert = void 0; var expectedToBe = (type) => `expected to be ${type}`; var defaultAssert = (condition, message) => { if (!condition) { throw new TypeError(message); } }; exports.defaultAssert = defaultAssert; var baseAssert = exports.defaultAssert; var assert = (condition, message) => baseAssert(condition, message); exports.assert = assert; function setBaseAssert(assert2) { if (assert2) { baseAssert = assert2; } } exports.setBaseAssert = setBaseAssert; var safeJsonParse = (json) => JSON.parse(json); exports.safeJsonParse = safeJsonParse; function isUnknown(_input) { return true; } exports.isUnknown = isUnknown; function isNever(_input, message = expectedToBe("unreachable")) { throw new TypeError(message); } exports.isNever = isNever; function isNotNull(input, message = expectedToBe("not null")) { (0, exports.assert)(input !== null, message); } exports.isNotNull = isNotNull; function isNotUndefined2(input, message = expectedToBe("not undefined")) { (0, exports.assert)(input !== void 0, message); } exports.isNotUndefined = isNotUndefined2; function isNotVoid(input, message = expectedToBe("neither null nor undefined")) { (0, exports.assert)(input !== null && input !== void 0, message); } exports.isNotVoid = isNotVoid; function isExactly(input, value, message = expectedToBe(`exactly ${value}`)) { (0, exports.assert)(input === value, message); } exports.isExactly = isExactly; function isBoolean(input, message = expectedToBe("a boolean")) { (0, exports.assert)(typeof input === "boolean", message); } exports.isBoolean = isBoolean; function isNumber(input, message = expectedToBe("a number")) { (0, exports.assert)(typeof input === "number", message); } exports.isNumber = isNumber; function isString2(input, message = expectedToBe("a string")) { (0, exports.assert)(typeof input === "string", message); } exports.isString = isString2; function isDate(input, message = expectedToBe("a Date")) { (0, exports.assert)(input instanceof Date, message); } exports.isDate = isDate; function isRecord(input, message = expectedToBe("a record")) { (0, exports.assert)(typeof input === "object", message); isNotNull(input, message); for (const key2 of Object.keys(input)) { isString2(key2, message); } } exports.isRecord = isRecord; function isRecordWithKeys(input, keys, message = expectedToBe(`a record with keys ${keys.join(", ")}`)) { isRecord(input, message); for (const key2 of keys) { isNotUndefined2(input[key2]); } } exports.isRecordWithKeys = isRecordWithKeys; function isArray(input, message = expectedToBe("an array")) { (0, exports.assert)(Array.isArray(input), message); } exports.isArray = isArray; function isRecordOfType(input, assertT, message = expectedToBe("a record of given type"), itemMessage = expectedToBe("of given type")) { isRecord(input, message); for (const item of Object.values(input)) { assertT(item, itemMessage); } } exports.isRecordOfType = isRecordOfType; function isArrayOfType(input, assertT, message = expectedToBe("an array of given type"), itemMessage = expectedToBe("of given type")) { isArray(input, message); for (const item of input) { assertT(item, itemMessage); } } exports.isArrayOfType = isArrayOfType; function isOptionOfType(input, assertT, message = expectedToBe("option of given type")) { if (input === void 0) { return; } assertT(input, message); } exports.isOptionOfType = isOptionOfType; function isOneOf(input, values, message = expectedToBe(`one of ${values.join(", ")}`)) { (0, exports.assert)(values.includes(input), message); } exports.isOneOf = isOneOf; function isOneOfType(input, assertT, message = expectedToBe(`one of type`), itemMessage) { for (const assert2 of assertT) { try { assert2(input, itemMessage); return; } catch (_) { } } throw new TypeError(message); } exports.isOneOfType = isOneOfType; function isInstanceOf(input, constructor, message = expectedToBe("an instance of given constructor")) { (0, exports.assert)(input instanceof constructor, message); } exports.isInstanceOf = isInstanceOf; function isPromise(input, message = expectedToBe("a promise")) { isInstanceOf(input, Promise, message); } exports.isPromise = isPromise; function check(assertT) { return (input) => { try { assertT(input); return true; } catch (_) { return false; } }; } exports.check = check; } }); // node_modules/ms/index.js var require_ms = __commonJS({ "node_modules/ms/index.js"(exports, module2) { var s = 1e3; var m = s * 60; var h = m * 60; var d = h * 24; var w = d * 7; var y = d * 365.25; module2.exports = function(val, options) { options = options || {}; var type = typeof val; if (type === "string" && val.length > 0) { return parse3(val); } else if (type === "number" && isFinite(val)) { return options.long ? fmtLong(val) : fmtShort(val); } throw new Error( "val is not a non-empty string or a valid number. val=" + JSON.stringify(val) ); }; function parse3(str) { str = String(str); if (str.length > 100) { return; } var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( str ); if (!match) { return; } var n = parseFloat(match[1]); var type = (match[2] || "ms").toLowerCase(); switch (type) { case "years": case "year": case "yrs": case "yr": case "y": return n * y; case "weeks": case "week": case "w": return n * w; case "days": case "day": case "d": return n * d; case "hours": case "hour": case "hrs": case "hr": case "h": return n * h; case "minutes": case "minute": case "mins": case "min": case "m": return n * m; case "seconds": case "second": case "secs": case "sec": case "s": return n * s; case "milliseconds": case "millisecond": case "msecs": case "msec": case "ms": return n; default: return void 0; } } function fmtShort(ms) { var msAbs = Math.abs(ms); if (msAbs >= d) { return Math.round(ms / d) + "d"; } if (msAbs >= h) { return Math.round(ms / h) + "h"; } if (msAbs >= m) { return Math.round(ms / m) + "m"; } if (msAbs >= s) { return Math.round(ms / s) + "s"; } return ms + "ms"; } function fmtLong(ms) { var msAbs = Math.abs(ms); if (msAbs >= d) { return plural(ms, msAbs, d, "day"); } if (msAbs >= h) { return plural(ms, msAbs, h, "hour"); } if (msAbs >= m) { return plural(ms, msAbs, m, "minute"); } if (msAbs >= s) { return plural(ms, msAbs, s, "second"); } return ms + " ms"; } function plural(ms, msAbs, n, name) { var isPlural = msAbs >= n * 1.5; return Math.round(ms / n) + " " + name + (isPlural ? "s" : ""); } } }); // node_modules/debug/src/common.js var require_common = __commonJS({ "node_modules/debug/src/common.js"(exports, module2) { function setup(env) { createDebug.debug = createDebug; createDebug.default = createDebug; createDebug.coerce = coerce; createDebug.disable = disable; createDebug.enable = enable; createDebug.enabled = enabled; createDebug.humanize = require_ms(); createDebug.destroy = destroy; Object.keys(env).forEach((key2) => { createDebug[key2] = env[key2]; }); createDebug.names = []; createDebug.skips = []; createDebug.formatters = {}; function selectColor(namespace) { let hash = 0; for (let i = 0; i < namespace.length; i++) { hash = (hash << 5) - hash + namespace.charCodeAt(i); hash |= 0; } return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; } createDebug.selectColor = selectColor; function createDebug(namespace) { let prevTime; let enableOverride = null; let namespacesCache; let enabledCache; function debug2(...args) { if (!debug2.enabled) { return; } const self = debug2; const curr = Number(/* @__PURE__ */ new Date()); const ms = curr - (prevTime || curr); self.diff = ms; self.prev = prevTime; self.curr = curr; prevTime = curr; args[0] = createDebug.coerce(args[0]); if (typeof args[0] !== "string") { args.unshift("%O"); } let index = 0; args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { if (match === "%%") { return "%"; } index++; const formatter = createDebug.formatters[format]; if (typeof formatter === "function") { const val = args[index]; match = formatter.call(self, val); args.splice(index, 1); index--; } return match; }); createDebug.formatArgs.call(self, args); const logFn = self.log || createDebug.log; logFn.apply(self, args); } debug2.namespace = namespace; debug2.useColors = createDebug.useColors(); debug2.color = createDebug.selectColor(namespace); debug2.extend = extend; debug2.destroy = createDebug.destroy; Object.defineProperty(debug2, "enabled", { enumerable: true, configurable: false, get: () => { if (enableOverride !== null) { return enableOverride; } if (namespacesCache !== createDebug.namespaces) { namespacesCache = createDebug.namespaces; enabledCache = createDebug.enabled(namespace); } return enabledCache; }, set: (v) => { enableOverride = v; } }); if (typeof createDebug.init === "function") { createDebug.init(debug2); } return debug2; } function extend(namespace, delimiter) { const newDebug = createDebug(this.namespace + (typeof delimiter === "undefined" ? ":" : delimiter) + namespace); newDebug.log = this.log; return newDebug; } function enable(namespaces) { createDebug.save(namespaces); createDebug.namespaces = namespaces; createDebug.names = []; createDebug.skips = []; let i; const split = (typeof namespaces === "string" ? namespaces : "").split(/[\s,]+/); const len = split.length; for (i = 0; i < len; i++) { if (!split[i]) { continue; } namespaces = split[i].replace(/\*/g, ".*?"); if (namespaces[0] === "-") { createDebug.skips.push(new RegExp("^" + namespaces.slice(1) + "$")); } else { createDebug.names.push(new RegExp("^" + namespaces + "$")); } } } function disable() { const namespaces = [ ...createDebug.names.map(toNamespace), ...createDebug.skips.map(toNamespace).map((namespace) => "-" + namespace) ].join(","); createDebug.enable(""); return namespaces; } function enabled(name) { if (name[name.length - 1] === "*") { return true; } let i; let len; for (i = 0, len = createDebug.skips.length; i < len; i++) { if (createDebug.skips[i].test(name)) { return false; } } for (i = 0, len = createDebug.names.length; i < len; i++) { if (createDebug.names[i].test(name)) { return true; } } return false; } function toNamespace(regexp) { return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, "*"); } function coerce(val) { if (val instanceof Error) { return val.stack || val.message; } return val; } function destroy() { console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."); } createDebug.enable(createDebug.load()); return createDebug; } module2.exports = setup; } }); // node_modules/debug/src/browser.js var require_browser = __commonJS({ "node_modules/debug/src/browser.js"(exports, module2) { exports.formatArgs = formatArgs; exports.save = save; exports.load = load; exports.useColors = useColors; exports.storage = localstorage(); exports.destroy = (() => { let warned = false; return () => { if (!warned) { warned = true; console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."); } }; })(); exports.colors = [ "#0000CC", "#0000FF", "#0033CC", "#0033FF", "#0066CC", "#0066FF", "#0099CC", "#0099FF", "#00CC00", "#00CC33", "#00CC66", "#00CC99", "#00CCCC", "#00CCFF", "#3300CC", "#3300FF", "#3333CC", "#3333FF", "#3366CC", "#3366FF", "#3399CC", "#3399FF", "#33CC00", "#33CC33", "#33CC66", "#33CC99", "#33CCCC", "#33CCFF", "#6600CC", "#6600FF", "#6633CC", "#6633FF", "#66CC00", "#66CC33", "#9900CC", "#9900FF", "#9933CC", "#9933FF", "#99CC00", "#99CC33", "#CC0000", "#CC0033", "#CC0066", "#CC0099", "#CC00CC", "#CC00FF", "#CC3300", "#CC3333", "#CC3366", "#CC3399", "#CC33CC", "#CC33FF", "#CC6600", "#CC6633", "#CC9900", "#CC9933", "#CCCC00", "#CCCC33", "#FF0000", "#FF0033", "#FF0066", "#FF0099", "#FF00CC", "#FF00FF", "#FF3300", "#FF3333", "#FF3366", "#FF3399", "#FF33CC", "#FF33FF", "#FF6600", "#FF6633", "#FF9900", "#FF9933", "#FFCC00", "#FFCC33" ]; function useColors() { if (typeof window !== "undefined" && window.process && (window.process.type === "renderer" || window.process.__nwjs)) { return true; } if (typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { return false; } return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773 typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31? // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/); } function formatArgs(args) { args[0] = (this.useColors ? "%c" : "") + this.namespace + (this.useColors ? " %c" : " ") + args[0] + (this.useColors ? "%c " : " ") + "+" + module2.exports.humanize(this.diff); if (!this.useColors) { return; } const c = "color: " + this.color; args.splice(1, 0, c, "color: inherit"); let index = 0; let lastC = 0; args[0].replace(/%[a-zA-Z%]/g, (match) => { if (match === "%%") { return; } index++; if (match === "%c") { lastC = index; } }); args.splice(lastC, 0, c); } exports.log = console.debug || console.log || (() => { }); function save(namespaces) { try { if (namespaces) { exports.storage.setItem("debug", namespaces); } else { exports.storage.removeItem("debug"); } } catch (error) { } } function load() { let r; try { r = exports.storage.getItem("debug"); } catch (error) { } if (!r && typeof process !== "undefined" && "env" in process) { r = process.env.DEBUG; } return r; } function localstorage() { try { return localStorage; } catch (error) { } } module2.exports = require_common()(exports); var { formatters } = module2.exports; formatters.j = function(v) { try { return JSON.stringify(v); } catch (error) { return "[UnexpectedJSONParseError]: " + error.message; } }; } }); // node_modules/@kwsites/file-exists/dist/src/index.js var require_src = __commonJS({ "node_modules/@kwsites/file-exists/dist/src/index.js"(exports) { "use strict"; var __importDefault = exports && exports.__importDefault || function(mod) { return mod && mod.__esModule ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var fs_1 = require("fs"); var debug_1 = __importDefault(require_browser()); var log = debug_1.default("@kwsites/file-exists"); function check(path, isFile, isDirectory) { log(`checking %s`, path); try { const stat = fs_1.statSync(path); if (stat.isFile() && isFile) { log(`[OK] path represents a file`); return true; } if (stat.isDirectory() && isDirectory) { log(`[OK] path represents a directory`); return true; } log(`[FAIL] path represents something other than a file or directory`); return false; } catch (e) { if (e.code === "ENOENT") { log(`[FAIL] path is not accessible: %o`, e); return false; } log(`[FATAL] %o`, e); throw e; } } function exists2(path, type = exports.READABLE) { return check(path, (type & exports.FILE) > 0, (type & exports.FOLDER) > 0); } exports.exists = exists2; exports.FILE = 1; exports.FOLDER = 2; exports.READABLE = exports.FILE + exports.FOLDER; } }); // node_modules/@kwsites/file-exists/dist/index.js var require_dist = __commonJS({ "node_modules/@kwsites/file-exists/dist/index.js"(exports) { "use strict"; function __export3(m) { for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; } Object.defineProperty(exports, "__esModule", { value: true }); __export3(require_src()); } }); // node_modules/@kwsites/promise-deferred/dist/index.js var require_dist2 = __commonJS({ "node_modules/@kwsites/promise-deferred/dist/index.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createDeferred = exports.deferred = void 0; function deferred2() { let done; let fail; let status = "pending"; const promise = new Promise((_done, _fail) => { done = _done; fail = _fail; }); return { promise, done(result) { if (status === "pending") { status = "resolved"; done(result); } }, fail(error) { if (status === "pending") { status = "rejected"; fail(error); } }, get fulfilled() { return status !== "pending"; }, get status() { return status; } }; } exports.deferred = deferred2; exports.createDeferred = deferred2; exports.default = deferred2; } }); // src/main.ts var main_exports = {}; __export(main_exports, { default: () => RenderDiffPlugin }); module.exports = __toCommonJS(main_exports); var import_obsidian2 = require("obsidian"); // node_modules/diff2html/lib-esm/types.js var LineType; (function(LineType2) { LineType2["INSERT"] = "insert"; LineType2["DELETE"] = "delete"; LineType2["CONTEXT"] = "context"; })(LineType || (LineType = {})); var OutputFormatType = { LINE_BY_LINE: "line-by-line", SIDE_BY_SIDE: "side-by-side" }; var LineMatchingType = { LINES: "lines", WORDS: "words", NONE: "none" }; var DiffStyleType = { WORD: "word", CHAR: "char" }; // node_modules/diff2html/lib-esm/utils.js var specials = [ "-", "[", "]", "/", "{", "}", "(", ")", "*", "+", "?", ".", "\\", "^", "$", "|" ]; var regex = RegExp("[" + specials.join("\\") + "]", "g"); function escapeForRegExp(str) { return str.replace(regex, "\\$&"); } function unifyPath(path) { return path ? path.replace(/\\/g, "/") : path; } function hashCode(text) { var i, chr, len; var hash = 0; for (i = 0, len = text.length; i < len; i++) { chr = text.charCodeAt(i); hash = (hash << 5) - hash + chr; hash |= 0; } return hash; } // node_modules/diff2html/lib-esm/diff-parser.js var __spreadArray = function(to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; function getExtension(filename, language) { var filenameParts = filename.split("."); return filenameParts.length > 1 ? filenameParts[filenameParts.length - 1] : language; } function startsWithAny(str, prefixes) { return prefixes.reduce(function(startsWith, prefix) { return startsWith || str.startsWith(prefix); }, false); } var baseDiffFilenamePrefixes = ["a/", "b/", "i/", "w/", "c/", "o/"]; function getFilename(line, linePrefix, extraPrefix) { var prefixes = extraPrefix !== void 0 ? __spreadArray(__spreadArray([], baseDiffFilenamePrefixes, true), [extraPrefix], false) : baseDiffFilenamePrefixes; var FilenameRegExp = linePrefix ? new RegExp("^".concat(escapeForRegExp(linePrefix), ' "?(.+?)"?$')) : new RegExp('^"?(.+?)"?$'); var _a2 = FilenameRegExp.exec(line) || [], _b = _a2[1], filename = _b === void 0 ? "" : _b; var matchingPrefix = prefixes.find(function(p) { return filename.indexOf(p) === 0; }); var fnameWithoutPrefix = matchingPrefix ? filename.slice(matchingPrefix.length) : filename; return fnameWithoutPrefix.replace(/\s+\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}(?:\.\d+)? [+-]\d{4}.*$/, ""); } function getSrcFilename(line, srcPrefix) { return getFilename(line, "---", srcPrefix); } function getDstFilename(line, dstPrefix) { return getFilename(line, "+++", dstPrefix); } function parse(diffInput, config) { if (config === void 0) { config = {}; } var files = []; var currentFile = null; var currentBlock = null; var oldLine = null; var oldLine2 = null; var newLine = null; var possibleOldName = null; var possibleNewName = null; var oldFileNameHeader = "--- "; var newFileNameHeader = "+++ "; var hunkHeaderPrefix = "@@"; var oldMode = /^old mode (\d{6})/; var newMode = /^new mode (\d{6})/; var deletedFileMode = /^deleted file mode (\d{6})/; var newFileMode = /^new file mode (\d{6})/; var copyFrom = /^copy from "?(.+)"?/; var copyTo = /^copy to "?(.+)"?/; var renameFrom = /^rename from "?(.+)"?/; var renameTo = /^rename to "?(.+)"?/; var similarityIndex = /^similarity index (\d+)%/; var dissimilarityIndex = /^dissimilarity index (\d+)%/; var index = /^index ([\da-z]+)\.\.([\da-z]+)\s*(\d{6})?/; var binaryFiles = /^Binary files (.*) and (.*) differ/; var binaryDiff = /^GIT binary patch/; var combinedIndex = /^index ([\da-z]+),([\da-z]+)\.\.([\da-z]+)/; var combinedMode = /^mode (\d{6}),(\d{6})\.\.(\d{6})/; var combinedNewFile = /^new file mode (\d{6})/; var combinedDeletedFile = /^deleted file mode (\d{6}),(\d{6})/; var diffLines = diffInput.replace(/\\ No newline at end of file/g, "").replace(/\r\n?/g, "\n").split("\n"); function saveBlock() { if (currentBlock !== null && currentFile !== null) { currentFile.blocks.push(currentBlock); currentBlock = null; } } function saveFile() { if (currentFile !== null) { if (!currentFile.oldName && possibleOldName !== null) { currentFile.oldName = possibleOldName; } if (!currentFile.newName && possibleNewName !== null) { currentFile.newName = possibleNewName; } if (currentFile.newName) { files.push(currentFile); currentFile = null; } } possibleOldName = null; possibleNewName = null; } function startFile() { saveBlock(); saveFile(); currentFile = { blocks: [], deletedLines: 0, addedLines: 0 }; } function startBlock(line) { saveBlock(); var values; if (currentFile !== null) { if (values = /^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@.*/.exec(line)) { currentFile.isCombined = false; oldLine = parseInt(values[1], 10); newLine = parseInt(values[2], 10); } else if (values = /^@@@ -(\d+)(?:,\d+)? -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@@.*/.exec(line)) { currentFile.isCombined = true; oldLine = parseInt(values[1], 10); oldLine2 = parseInt(values[2], 10); newLine = parseInt(values[3], 10); } else { if (line.startsWith(hunkHeaderPrefix)) { console.error("Failed to parse lines, starting in 0!"); } oldLine = 0; newLine = 0; currentFile.isCombined = false; } } currentBlock = { lines: [], oldStartLine: oldLine, oldStartLine2: oldLine2, newStartLine: newLine, header: line }; } function createLine(line) { if (currentFile === null || currentBlock === null || oldLine === null || newLine === null) return; var currentLine = { content: line }; var addedPrefixes = currentFile.isCombined ? ["+ ", " +", "++"] : ["+"]; var deletedPrefixes = currentFile.isCombined ? ["- ", " -", "--"] : ["-"]; if (startsWithAny(line, addedPrefixes)) { currentFile.addedLines++; currentLine.type = LineType.INSERT; currentLine.oldNumber = void 0; currentLine.newNumber = newLine++; } else if (startsWithAny(line, deletedPrefixes)) { currentFile.deletedLines++; currentLine.type = LineType.DELETE; currentLine.oldNumber = oldLine++; currentLine.newNumber = void 0; } else { currentLine.type = LineType.CONTEXT; currentLine.oldNumber = oldLine++; currentLine.newNumber = newLine++; } currentBlock.lines.push(currentLine); } function existHunkHeader(line, lineIdx) { var idx = lineIdx; while (idx < diffLines.length - 3) { if (line.startsWith("diff")) { return false; } if (diffLines[idx].startsWith(oldFileNameHeader) && diffLines[idx + 1].startsWith(newFileNameHeader) && diffLines[idx + 2].startsWith(hunkHeaderPrefix)) { return true; } idx++; } return false; } diffLines.forEach(function(line, lineIndex) { if (!line || line.startsWith("*")) { return; } var values; var prevLine = diffLines[lineIndex - 1]; var nxtLine = diffLines[lineIndex + 1]; var afterNxtLine = diffLines[lineIndex + 2]; if (line.startsWith("diff --git") || line.startsWith("diff --combined")) { startFile(); var gitDiffStart = /^diff --git "?([a-ciow]\/.+)"? "?([a-ciow]\/.+)"?/; if (values = gitDiffStart.exec(line)) { possibleOldName = getFilename(values[1], void 0, config.dstPrefix); possibleNewName = getFilename(values[2], void 0, config.srcPrefix); } if (currentFile === null) { throw new Error("Where is my file !!!"); } currentFile.isGitDiff = true; return; } if (line.startsWith("Binary files") && !(currentFile === null || currentFile === void 0 ? void 0 : currentFile.isGitDiff)) { startFile(); var unixDiffBinaryStart = /^Binary files "?([a-ciow]\/.+)"? and "?([a-ciow]\/.+)"? differ/; if (values = unixDiffBinaryStart.exec(line)) { possibleOldName = getFilename(values[1], void 0, config.dstPrefix); possibleNewName = getFilename(values[2], void 0, config.srcPrefix); } if (currentFile === null) { throw new Error("Where is my file !!!"); } currentFile.isBinary = true; return; } if (!currentFile || !currentFile.isGitDiff && currentFile && line.startsWith(oldFileNameHeader) && nxtLine.startsWith(newFileNameHeader) && afterNxtLine.startsWith(hunkHeaderPrefix)) { startFile(); } if (currentFile === null || currentFile === void 0 ? void 0 : currentFile.isTooBig) { return; } if (currentFile && (typeof config.diffMaxChanges === "number" && currentFile.addedLines + currentFile.deletedLines > config.diffMaxChanges || typeof config.diffMaxLineLength === "number" && line.length > config.diffMaxLineLength)) { currentFile.isTooBig = true; currentFile.addedLines = 0; currentFile.deletedLines = 0; currentFile.blocks = []; currentBlock = null; var message = typeof config.diffTooBigMessage === "function" ? config.diffTooBigMessage(files.length) : "Diff too big to be displayed"; startBlock(message); return; } if (line.startsWith(oldFileNameHeader) && nxtLine.startsWith(newFileNameHeader) || line.startsWith(newFileNameHeader) && prevLine.startsWith(oldFileNameHeader)) { if (currentFile && !currentFile.oldName && line.startsWith("--- ") && (values = getSrcFilename(line, config.srcPrefix))) { currentFile.oldName = values; currentFile.language = getExtension(currentFile.oldName, currentFile.language); return; } if (currentFile && !currentFile.newName && line.startsWith("+++ ") && (values = getDstFilename(line, config.dstPrefix))) { currentFile.newName = values; currentFile.language = getExtension(currentFile.newName, currentFile.language); return; } } if (currentFile && (line.startsWith(hunkHeaderPrefix) || currentFile.isGitDiff && currentFile.oldName && currentFile.newName && !currentBlock)) { startBlock(line); return; } if (currentBlock && (line.startsWith("+") || line.startsWith("-") || line.startsWith(" "))) { createLine(line); return; } var doesNotExistHunkHeader = !existHunkHeader(line, lineIndex); if (currentFile === null) { throw new Error("Where is my file !!!"); } if (values = oldMode.exec(line)) { currentFile.oldMode = values[1]; } else if (values = newMode.exec(line)) { currentFile.newMode = values[1]; } else if (values = deletedFileMode.exec(line)) { currentFile.deletedFileMode = values[1]; currentFile.isDeleted = true; } else if (values = newFileMode.exec(line)) { currentFile.newFileMode = values[1]; currentFile.isNew = true; } else if (values = copyFrom.exec(line)) { if (doesNotExistHunkHeader) { currentFile.oldName = values[1]; } currentFile.isCopy = true; } else if (values = copyTo.exec(line)) { if (doesNotExistHunkHeader) { currentFile.newName = values[1]; } currentFile.isCopy = true; } else if (values = renameFrom.exec(line)) { if (doesNotExistHunkHeader) { currentFile.oldName = values[1]; } currentFile.isRename = true; } else if (values = renameTo.exec(line)) { if (doesNotExistHunkHeader) { currentFile.newName = values[1]; } currentFile.isRename = true; } else if (values = binaryFiles.exec(line)) { currentFile.isBinary = true; currentFile.oldName = getFilename(values[1], void 0, config.srcPrefix); currentFile.newName = getFilename(values[2], void 0, config.dstPrefix); startBlock("Binary file"); } else if (binaryDiff.test(line)) { currentFile.isBinary = true; startBlock(line); } else if (values = similarityIndex.exec(line)) { currentFile.unchangedPercentage = parseInt(values[1], 10); } else if (values = dissimilarityIndex.exec(line)) { currentFile.changedPercentage = parseInt(values[1], 10); } else if (values = index.exec(line)) { currentFile.checksumBefore = values[1]; currentFile.checksumAfter = values[2]; values[3] && (currentFile.mode = values[3]); } else if (values = combinedIndex.exec(line)) { currentFile.checksumBefore = [values[2], values[3]]; currentFile.checksumAfter = values[1]; } else if (values = combinedMode.exec(line)) { currentFile.oldMode = [values[2], values[3]]; currentFile.newMode = values[1]; } else if (values = combinedNewFile.exec(line)) { currentFile.newFileMode = values[1]; currentFile.isNew = true; } else if (values = combinedDeletedFile.exec(line)) { currentFile.deletedFileMode = values[1]; currentFile.isDeleted = true; } }); saveBlock(); saveFile(); return files; } // node_modules/diff/lib/index.mjs function Diff() { } Diff.prototype = { diff: function diff(oldString, newString) { var options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; var callback = options.callback; if (typeof options === "function") { callback = options; options = {}; } this.options = options; var self = this; function done(value) { if (callback) { setTimeout(function() { callback(void 0, value); }, 0); return true; } else { return value; } } oldString = this.castInput(oldString); newString = this.castInput(newString); oldString = this.removeEmpty(this.tokenize(oldString)); newString = this.removeEmpty(this.tokenize(newString)); var newLen = newString.length, oldLen = oldString.length; var editLength = 1; var maxEditLength = newLen + oldLen; if (options.maxEditLength) { maxEditLength = Math.min(maxEditLength, options.maxEditLength); } var bestPath = [{ newPos: -1, components: [] }]; var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0); if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) { return done([{ value: this.join(newString), count: newString.length }]); } function execEditLength() { for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) { var basePath = void 0; var addPath = bestPath[diagonalPath - 1], removePath = bestPath[diagonalPath + 1], _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath; if (addPath) { bestPath[diagonalPath - 1] = void 0; } var canAdd = addPath && addPath.newPos + 1 < newLen, canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen; if (!canAdd && !canRemove) { bestPath[diagonalPath] = void 0; continue; } if (!canAdd || canRemove && addPath.newPos < removePath.newPos) { basePath = clonePath(removePath); self.pushComponent(basePath.components, void 0, true); } else { basePath = addPath; basePath.newPos++; self.pushComponent(basePath.components, true, void 0); } _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) { return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken)); } else { bestPath[diagonalPath] = basePath; } } editLength++; } if (callback) { (function exec() { setTimeout(function() { if (editLength > maxEditLength) { return callback(); } if (!execEditLength()) { exec(); } }, 0); })(); } else { while (editLength <= maxEditLength) { var ret = execEditLength(); if (ret) { return ret; } } } }, pushComponent: function pushComponent(components, added, removed) { var last2 = components[components.length - 1]; if (last2 && last2.added === added && last2.removed === removed) { components[components.length - 1] = { count: last2.count + 1, added, removed }; } else { components.push({ count: 1, added, removed }); } }, extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) { var newLen = newString.length, oldLen = oldString.length, newPos = basePath.newPos, oldPos = newPos - diagonalPath, commonCount = 0; while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) { newPos++; oldPos++; commonCount++; } if (commonCount) { basePath.components.push({ count: commonCount }); } basePath.newPos = newPos; return oldPos; }, equals: function equals(left, right) { if (this.options.comparator) { return this.options.comparator(left, right); } else { return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase(); } }, removeEmpty: function removeEmpty(array) { var ret = []; for (var i = 0; i < array.length; i++) { if (array[i]) { ret.push(array[i]); } } return ret; }, castInput: function castInput(value) { return value; }, tokenize: function tokenize(value) { return value.split(""); }, join: function join(chars) { return chars.join(""); } }; function buildValues(diff2, components, newString, oldString, useLongestToken) { var componentPos = 0, componentLen = components.length, newPos = 0, oldPos = 0; for (; componentPos < componentLen; componentPos++) { var component = components[componentPos]; if (!component.removed) { if (!component.added && useLongestToken) { var value = newString.slice(newPos, newPos + component.count); value = value.map(function(value2, i) { var oldValue = oldString[oldPos + i]; return oldValue.length > value2.length ? oldValue : value2; }); component.value = diff2.join(value); } else { component.value = diff2.join(newString.slice(newPos, newPos + component.count)); } newPos += component.count; if (!component.added) { oldPos += component.count; } } else { component.value = diff2.join(oldString.slice(oldPos, oldPos + component.count)); oldPos += component.count; if (componentPos && components[componentPos - 1].added) { var tmp = components[componentPos - 1]; components[componentPos - 1] = components[componentPos]; components[componentPos] = tmp; } } } var lastComponent = components[componentLen - 1]; if (componentLen > 1 && typeof lastComponent.value === "string" && (lastComponent.added || lastComponent.removed) && diff2.equals("", lastComponent.value)) { components[componentLen - 2].value += lastComponent.value; components.pop(); } return components; } function clonePath(path) { return { newPos: path.newPos, components: path.components.slice(0) }; } var characterDiff = new Diff(); function diffChars(oldStr, newStr, options) { return characterDiff.diff(oldStr, newStr, options); } var extendedWordChars = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/; var reWhitespace = /\S/; var wordDiff = new Diff(); wordDiff.equals = function(left, right) { if (this.options.ignoreCase) { left = left.toLowerCase(); right = right.toLowerCase(); } return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right); }; wordDiff.tokenize = function(value) { var tokens = value.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/); for (var i = 0; i < tokens.length - 1; i++) { if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) { tokens[i] += tokens[i + 2]; tokens.splice(i + 1, 2); i--; } } return tokens; }; function diffWordsWithSpace(oldStr, newStr, options) { return wordDiff.diff(oldStr, newStr, options); } var lineDiff = new Diff(); lineDiff.tokenize = function(value) { var retLines = [], linesAndNewlines = value.split(/(\n|\r\n)/); if (!linesAndNewlines[linesAndNewlines.length - 1]) { linesAndNewlines.pop(); } for (var i = 0; i < linesAndNewlines.length; i++) { var line = linesAndNewlines[i]; if (i % 2 && !this.options.newlineIsToken) { retLines[retLines.length - 1] += line; } else { if (this.options.ignoreWhitespace) { line = line.trim(); } retLines.push(line); } } return retLines; }; var sentenceDiff = new Diff(); sentenceDiff.tokenize = function(value) { return value.split(/(\S.+?[.!?])(?=\s+|$)/); }; var cssDiff = new Diff(); cssDiff.tokenize = function(value) { return value.split(/([{}:;,]|\s+)/); }; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function(obj2) { return typeof obj2; }; } else { _typeof = function(obj2) { return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; }; } return _typeof(obj); } var objectPrototypeToString = Object.prototype.toString; var jsonDiff = new Diff(); jsonDiff.useLongestToken = true; jsonDiff.tokenize = lineDiff.tokenize; jsonDiff.castInput = function(value) { var _this$options = this.options, undefinedReplacement = _this$options.undefinedReplacement, _this$options$stringi = _this$options.stringifyReplacer, stringifyReplacer = _this$options$stringi === void 0 ? function(k, v) { return typeof v === "undefined" ? undefinedReplacement : v; } : _this$options$stringi; return typeof value === "string" ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, " "); }; jsonDiff.equals = function(left, right) { return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, "$1"), right.replace(/,([\r\n])/g, "$1")); }; function canonicalize(obj, stack, replacementStack, replacer, key2) { stack = stack || []; replacementStack = replacementStack || []; if (replacer) { obj = replacer(key2, obj); } var i; for (i = 0; i < stack.length; i += 1) { if (stack[i] === obj) { return replacementStack[i]; } } var canonicalizedObj; if ("[object Array]" === objectPrototypeToString.call(obj)) { stack.push(obj); canonicalizedObj = new Array(obj.length); replacementStack.push(canonicalizedObj); for (i = 0; i < obj.length; i += 1) { canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key2); } stack.pop(); replacementStack.pop(); return canonicalizedObj; } if (obj && obj.toJSON) { obj = obj.toJSON(); } if (_typeof(obj) === "object" && obj !== null) { stack.push(obj); canonicalizedObj = {}; replacementStack.push(canonicalizedObj); var sortedKeys = [], _key; for (_key in obj) { if (obj.hasOwnProperty(_key)) { sortedKeys.push(_key); } } sortedKeys.sort(); for (i = 0; i < sortedKeys.length; i += 1) { _key = sortedKeys[i]; canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key); } stack.pop(); replacementStack.pop(); } else { canonicalizedObj = obj; } return canonicalizedObj; } var arrayDiff = new Diff(); arrayDiff.tokenize = function(value) { return value.slice(); }; arrayDiff.join = arrayDiff.removeEmpty = function(value) { return value; }; // node_modules/diff2html/lib-esm/rematch.js function levenshtein(a, b) { if (a.length === 0) { return b.length; } if (b.length === 0) { return a.length; } var matrix = []; var i; for (i = 0; i <= b.length; i++) { matrix[i] = [i]; } var j; for (j = 0; j <= a.length; j++) { matrix[0][j] = j; } for (i = 1; i <= b.length; i++) { for (j = 1; j <= a.length; j++) { if (b.charAt(i - 1) === a.charAt(j - 1)) { matrix[i][j] = matrix[i - 1][j - 1]; } else { matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, Math.min(matrix[i][j - 1] + 1, matrix[i - 1][j] + 1)); } } } return matrix[b.length][a.length]; } function newDistanceFn(str) { return function(x, y) { var xValue = str(x).trim(); var yValue = str(y).trim(); var lev = levenshtein(xValue, yValue); return lev / (xValue.length + yValue.length); }; } function newMatcherFn(distance2) { function findBestMatch(a, b, cache) { if (cache === void 0) { cache = /* @__PURE__ */ new Map(); } var bestMatchDist = Infinity; var bestMatch; for (var i = 0; i < a.length; ++i) { for (var j = 0; j < b.length; ++j) { var cacheKey = JSON.stringify([a[i], b[j]]); var md = void 0; if (!(cache.has(cacheKey) && (md = cache.get(cacheKey)))) { md = distance2(a[i], b[j]); cache.set(cacheKey, md); } if (md < bestMatchDist) { bestMatchDist = md; bestMatch = { indexA: i, indexB: j, score: bestMatchDist }; } } } return bestMatch; } function group(a, b, level, cache) { if (level === void 0) { level = 0; } if (cache === void 0) { cache = /* @__PURE__ */ new Map(); } var bm = findBestMatch(a, b, cache); if (!bm || a.length + b.length < 3) { return [[a, b]]; } var a1 = a.slice(0, bm.indexA); var b1 = b.slice(0, bm.indexB); var aMatch = [a[bm.indexA]]; var bMatch = [b[bm.indexB]]; var tailA = bm.indexA + 1; var tailB = bm.indexB + 1; var a2 = a.slice(tailA); var b2 = b.slice(tailB); var group1 = group(a1, b1, level + 1, cache); var groupMatch = group(aMatch, bMatch, level + 1, cache); var group2 = group(a2, b2, level + 1, cache); var result = groupMatch; if (bm.indexA > 0 || bm.indexB > 0) { result = group1.concat(result); } if (a.length > tailA || b.length > tailB) { result = result.concat(group2); } return result; } return group; } // node_modules/diff2html/lib-esm/render-utils.js var __assign = function() { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var CSSLineClass = { INSERTS: "d2h-ins", DELETES: "d2h-del", CONTEXT: "d2h-cntx", INFO: "d2h-info", INSERT_CHANGES: "d2h-ins d2h-change", DELETE_CHANGES: "d2h-del d2h-change" }; var defaultRenderConfig = { matching: LineMatchingType.NONE, matchWordsThreshold: 0.25, maxLineLengthHighlight: 1e4, diffStyle: DiffStyleType.WORD }; var separator = "/"; var distance = newDistanceFn(function(change) { return change.value; }); var matcher = newMatcherFn(distance); function isDevNullName(name) { return name.indexOf("dev/null") !== -1; } function removeInsElements(line) { return line.replace(/(]*>((.|\n)*?)<\/ins>)/g, ""); } function removeDelElements(line) { return line.replace(/(]*>((.|\n)*?)<\/del>)/g, ""); } function toCSSClass(lineType) { switch (lineType) { case LineType.CONTEXT: return CSSLineClass.CONTEXT; case LineType.INSERT: return CSSLineClass.INSERTS; case LineType.DELETE: return CSSLineClass.DELETES; } } function prefixLength(isCombined) { return isCombined ? 2 : 1; } function escapeForHtml(str) { return str.slice(0).replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'").replace(/\//g, "/"); } function deconstructLine(line, isCombined, escape) { if (escape === void 0) { escape = true; } var indexToSplit = prefixLength(isCombined); return { prefix: line.substring(0, indexToSplit), content: escape ? escapeForHtml(line.substring(indexToSplit)) : line.substring(indexToSplit) }; } function filenameDiff(file) { var oldFilename = unifyPath(file.oldName); var newFilename = unifyPath(file.newName); if (oldFilename !== newFilename && !isDevNullName(oldFilename) && !isDevNullName(newFilename)) { var prefixPaths = []; var suffixPaths = []; var oldFilenameParts = oldFilename.split(separator); var newFilenameParts = newFilename.split(separator); var oldFilenamePartsSize = oldFilenameParts.length; var newFilenamePartsSize = newFilenameParts.length; var i = 0; var j = oldFilenamePartsSize - 1; var k = newFilenamePartsSize - 1; while (i < j && i < k) { if (oldFilenameParts[i] === newFilenameParts[i]) { prefixPaths.push(newFilenameParts[i]); i += 1; } else { break; } } while (j > i && k > i) { if (oldFilenameParts[j] === newFilenameParts[k]) { suffixPaths.unshift(newFilenameParts[k]); j -= 1; k -= 1; } else { break; } } var finalPrefix = prefixPaths.join(separator); var finalSuffix = suffixPaths.join(separator); var oldRemainingPath = oldFilenameParts.slice(i, j + 1).join(separator); var newRemainingPath = newFilenameParts.slice(i, k + 1).join(separator); if (finalPrefix.length && finalSuffix.length) { return finalPrefix + separator + "{" + oldRemainingPath + " \u2192 " + newRemainingPath + "}" + separator + finalSuffix; } else if (finalPrefix.length) { return finalPrefix + separator + "{" + oldRemainingPath + " \u2192 " + newRemainingPath + "}"; } else if (finalSuffix.length) { return "{" + oldRemainingPath + " \u2192 " + newRemainingPath + "}" + separator + finalSuffix; } return oldFilename + " \u2192 " + newFilename; } else if (!isDevNullName(newFilename)) { return newFilename; } else { return oldFilename; } } function getHtmlId(file) { return "d2h-".concat(hashCode(filenameDiff(file)).toString().slice(-6)); } function getFileIcon(file) { var templateName = "file-changed"; if (file.isRename) { templateName = "file-renamed"; } else if (file.isCopy) { templateName = "file-renamed"; } else if (file.isNew) { templateName = "file-added"; } else if (file.isDeleted) { templateName = "file-deleted"; } else if (file.newName !== file.oldName) { templateName = "file-renamed"; } return templateName; } function diffHighlight(diffLine1, diffLine2, isCombined, config) { if (config === void 0) { config = {}; } var _a2 = __assign(__assign({}, defaultRenderConfig), config), matching = _a2.matching, maxLineLengthHighlight = _a2.maxLineLengthHighlight, matchWordsThreshold = _a2.matchWordsThreshold, diffStyle = _a2.diffStyle; var line1 = deconstructLine(diffLine1, isCombined, false); var line2 = deconstructLine(diffLine2, isCombined, false); if (line1.content.length > maxLineLengthHighlight || line2.content.length > maxLineLengthHighlight) { return { oldLine: { prefix: line1.prefix, content: escapeForHtml(line1.content) }, newLine: { prefix: line2.prefix, content: escapeForHtml(line2.content) } }; } var diff2 = diffStyle === "char" ? diffChars(line1.content, line2.content) : diffWordsWithSpace(line1.content, line2.content); var changedWords = []; if (diffStyle === "word" && matching === "words") { var removed = diff2.filter(function(element) { return element.removed; }); var added = diff2.filter(function(element) { return element.added; }); var chunks = matcher(added, removed); chunks.forEach(function(chunk) { if (chunk[0].length === 1 && chunk[1].length === 1) { var dist = distance(chunk[0][0], chunk[1][0]); if (dist < matchWordsThreshold) { changedWords.push(chunk[0][0]); changedWords.push(chunk[1][0]); } } }); } var highlightedLine = diff2.reduce(function(highlightedLine2, part) { var elemType = part.added ? "ins" : part.removed ? "del" : null; var addClass = changedWords.indexOf(part) > -1 ? ' class="d2h-change"' : ""; var escapedValue = escapeForHtml(part.value); return elemType !== null ? "".concat(highlightedLine2, "<").concat(elemType).concat(addClass, ">").concat(escapedValue, "") : "".concat(highlightedLine2).concat(escapedValue); }, ""); return { oldLine: { prefix: line1.prefix, content: removeInsElements(highlightedLine) }, newLine: { prefix: line2.prefix, content: removeDelElements(highlightedLine) } }; } // node_modules/diff2html/lib-esm/file-list-renderer.js var baseTemplatesPath = "file-summary"; var iconsBaseTemplatesPath = "icon"; function render(diffFiles, hoganUtils) { var files = diffFiles.map(function(file) { return hoganUtils.render(baseTemplatesPath, "line", { fileHtmlId: getHtmlId(file), oldName: file.oldName, newName: file.newName, fileName: filenameDiff(file), deletedLines: "-" + file.deletedLines, addedLines: "+" + file.addedLines }, { fileIcon: hoganUtils.template(iconsBaseTemplatesPath, getFileIcon(file)) }); }).join("\n"); return hoganUtils.render(baseTemplatesPath, "wrapper", { filesNumber: diffFiles.length, files }); } // node_modules/diff2html/lib-esm/line-by-line-renderer.js var __assign2 = function() { __assign2 = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign2.apply(this, arguments); }; var defaultLineByLineRendererConfig = __assign2(__assign2({}, defaultRenderConfig), { renderNothingWhenEmpty: false, matchingMaxComparisons: 2500, maxLineSizeInBlockForComparison: 200 }); var genericTemplatesPath = "generic"; var baseTemplatesPath2 = "line-by-line"; var iconsBaseTemplatesPath2 = "icon"; var tagsBaseTemplatesPath = "tag"; var LineByLineRenderer = function() { function LineByLineRenderer2(hoganUtils, config) { if (config === void 0) { config = {}; } this.hoganUtils = hoganUtils; this.config = __assign2(__assign2({}, defaultLineByLineRendererConfig), config); } LineByLineRenderer2.prototype.render = function(diffFiles) { var _this = this; var diffsHtml = diffFiles.map(function(file) { var diffs; if (file.blocks.length) { diffs = _this.generateFileHtml(file); } else { diffs = _this.generateEmptyDiff(); } return _this.makeFileDiffHtml(file, diffs); }).join("\n"); return this.hoganUtils.render(genericTemplatesPath, "wrapper", { content: diffsHtml }); }; LineByLineRenderer2.prototype.makeFileDiffHtml = function(file, diffs) { if (this.config.renderNothingWhenEmpty && Array.isArray(file.blocks) && file.blocks.length === 0) return ""; var fileDiffTemplate = this.hoganUtils.template(baseTemplatesPath2, "file-diff"); var filePathTemplate = this.hoganUtils.template(genericTemplatesPath, "file-path"); var fileIconTemplate = this.hoganUtils.template(iconsBaseTemplatesPath2, "file"); var fileTagTemplate = this.hoganUtils.template(tagsBaseTemplatesPath, getFileIcon(file)); return fileDiffTemplate.render({ file, fileHtmlId: getHtmlId(file), diffs, filePath: filePathTemplate.render({ fileDiffName: filenameDiff(file) }, { fileIcon: fileIconTemplate, fileTag: fileTagTemplate }) }); }; LineByLineRenderer2.prototype.generateEmptyDiff = function() { return this.hoganUtils.render(genericTemplatesPath, "empty-diff", { contentClass: "d2h-code-line", CSSLineClass }); }; LineByLineRenderer2.prototype.generateFileHtml = function(file) { var _this = this; var matcher2 = newMatcherFn(newDistanceFn(function(e) { return deconstructLine(e.content, file.isCombined).content; })); return file.blocks.map(function(block) { var lines = _this.hoganUtils.render(genericTemplatesPath, "block-header", { CSSLineClass, blockHeader: file.isTooBig ? block.header : escapeForHtml(block.header), lineClass: "d2h-code-linenumber", contentClass: "d2h-code-line" }); _this.applyLineGroupping(block).forEach(function(_a2) { var contextLines = _a2[0], oldLines = _a2[1], newLines = _a2[2]; if (oldLines.length && newLines.length && !contextLines.length) { _this.applyRematchMatching(oldLines, newLines, matcher2).map(function(_a3) { var oldLines2 = _a3[0], newLines2 = _a3[1]; var _b2 = _this.processChangedLines(file, file.isCombined, oldLines2, newLines2), left2 = _b2.left, right2 = _b2.right; lines += left2; lines += right2; }); } else if (contextLines.length) { contextLines.forEach(function(line) { var _a3 = deconstructLine(line.content, file.isCombined), prefix = _a3.prefix, content = _a3.content; lines += _this.generateSingleLineHtml(file, { type: CSSLineClass.CONTEXT, prefix, content, oldNumber: line.oldNumber, newNumber: line.newNumber }); }); } else if (oldLines.length || newLines.length) { var _b = _this.processChangedLines(file, file.isCombined, oldLines, newLines), left = _b.left, right = _b.right; lines += left; lines += right; } else { console.error("Unknown state reached while processing groups of lines", contextLines, oldLines, newLines); } }); return lines; }).join("\n"); }; LineByLineRenderer2.prototype.applyLineGroupping = function(block) { var blockLinesGroups = []; var oldLines = []; var newLines = []; for (var i = 0; i < block.lines.length; i++) { var diffLine = block.lines[i]; if (diffLine.type !== LineType.INSERT && newLines.length || diffLine.type === LineType.CONTEXT && oldLines.length > 0) { blockLinesGroups.push([[], oldLines, newLines]); oldLines = []; newLines = []; } if (diffLine.type === LineType.CONTEXT) { blockLinesGroups.push([[diffLine], [], []]); } else if (diffLine.type === LineType.INSERT && oldLines.length === 0) { blockLinesGroups.push([[], [], [diffLine]]); } else if (diffLine.type === LineType.INSERT && oldLines.length > 0) { newLines.push(diffLine); } else if (diffLine.type === LineType.DELETE) { oldLines.push(diffLine); } } if (oldLines.length || newLines.length) { blockLinesGroups.push([[], oldLines, newLines]); oldLines = []; newLines = []; } return blockLinesGroups; }; LineByLineRenderer2.prototype.applyRematchMatching = function(oldLines, newLines, matcher2) { var comparisons = oldLines.length * newLines.length; var maxLineSizeInBlock = Math.max.apply(null, [0].concat(oldLines.concat(newLines).map(function(elem) { return elem.content.length; }))); var doMatching = comparisons < this.config.matchingMaxComparisons && maxLineSizeInBlock < this.config.maxLineSizeInBlockForComparison && (this.config.matching === "lines" || this.config.matching === "words"); return doMatching ? matcher2(oldLines, newLines) : [[oldLines, newLines]]; }; LineByLineRenderer2.prototype.processChangedLines = function(file, isCombined, oldLines, newLines) { var fileHtml = { right: "", left: "" }; var maxLinesNumber = Math.max(oldLines.length, newLines.length); for (var i = 0; i < maxLinesNumber; i++) { var oldLine = oldLines[i]; var newLine = newLines[i]; var diff2 = oldLine !== void 0 && newLine !== void 0 ? diffHighlight(oldLine.content, newLine.content, isCombined, this.config) : void 0; var preparedOldLine = oldLine !== void 0 && oldLine.oldNumber !== void 0 ? __assign2(__assign2({}, diff2 !== void 0 ? { prefix: diff2.oldLine.prefix, content: diff2.oldLine.content, type: CSSLineClass.DELETE_CHANGES } : __assign2(__assign2({}, deconstructLine(oldLine.content, isCombined)), { type: toCSSClass(oldLine.type) })), { oldNumber: oldLine.oldNumber, newNumber: oldLine.newNumber }) : void 0; var preparedNewLine = newLine !== void 0 && newLine.newNumber !== void 0 ? __assign2(__assign2({}, diff2 !== void 0 ? { prefix: diff2.newLine.prefix, content: diff2.newLine.content, type: CSSLineClass.INSERT_CHANGES } : __assign2(__assign2({}, deconstructLine(newLine.content, isCombined)), { type: toCSSClass(newLine.type) })), { oldNumber: newLine.oldNumber, newNumber: newLine.newNumber }) : void 0; var _a2 = this.generateLineHtml(file, preparedOldLine, preparedNewLine), left = _a2.left, right = _a2.right; fileHtml.left += left; fileHtml.right += right; } return fileHtml; }; LineByLineRenderer2.prototype.generateLineHtml = function(file, oldLine, newLine) { return { left: this.generateSingleLineHtml(file, oldLine), right: this.generateSingleLineHtml(file, newLine) }; }; LineByLineRenderer2.prototype.generateSingleLineHtml = function(file, line) { if (line === void 0) return ""; var lineNumberHtml = this.hoganUtils.render(baseTemplatesPath2, "numbers", { oldNumber: line.oldNumber || "", newNumber: line.newNumber || "" }); return this.hoganUtils.render(genericTemplatesPath, "line", { type: line.type, lineClass: "d2h-code-linenumber", contentClass: "d2h-code-line", prefix: line.prefix === " " ? " " : line.prefix, content: line.content, lineNumber: lineNumberHtml, line, file }); }; return LineByLineRenderer2; }(); var line_by_line_renderer_default = LineByLineRenderer; // node_modules/diff2html/lib-esm/side-by-side-renderer.js var __assign3 = function() { __assign3 = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign3.apply(this, arguments); }; var defaultSideBySideRendererConfig = __assign3(__assign3({}, defaultRenderConfig), { renderNothingWhenEmpty: false, matchingMaxComparisons: 2500, maxLineSizeInBlockForComparison: 200 }); var genericTemplatesPath2 = "generic"; var baseTemplatesPath3 = "side-by-side"; var iconsBaseTemplatesPath3 = "icon"; var tagsBaseTemplatesPath2 = "tag"; var SideBySideRenderer = function() { function SideBySideRenderer2(hoganUtils, config) { if (config === void 0) { config = {}; } this.hoganUtils = hoganUtils; this.config = __assign3(__assign3({}, defaultSideBySideRendererConfig), config); } SideBySideRenderer2.prototype.render = function(diffFiles) { var _this = this; var diffsHtml = diffFiles.map(function(file) { var diffs; if (file.blocks.length) { diffs = _this.generateFileHtml(file); } else { diffs = _this.generateEmptyDiff(); } return _this.makeFileDiffHtml(file, diffs); }).join("\n"); return this.hoganUtils.render(genericTemplatesPath2, "wrapper", { content: diffsHtml }); }; SideBySideRenderer2.prototype.makeFileDiffHtml = function(file, diffs) { if (this.config.renderNothingWhenEmpty && Array.isArray(file.blocks) && file.blocks.length === 0) return ""; var fileDiffTemplate = this.hoganUtils.template(baseTemplatesPath3, "file-diff"); var filePathTemplate = this.hoganUtils.template(genericTemplatesPath2, "file-path"); var fileIconTemplate = this.hoganUtils.template(iconsBaseTemplatesPath3, "file"); var fileTagTemplate = this.hoganUtils.template(tagsBaseTemplatesPath2, getFileIcon(file)); return fileDiffTemplate.render({ file, fileHtmlId: getHtmlId(file), diffs, filePath: filePathTemplate.render({ fileDiffName: filenameDiff(file) }, { fileIcon: fileIconTemplate, fileTag: fileTagTemplate }) }); }; SideBySideRenderer2.prototype.generateEmptyDiff = function() { return { right: "", left: this.hoganUtils.render(genericTemplatesPath2, "empty-diff", { contentClass: "d2h-code-side-line", CSSLineClass }) }; }; SideBySideRenderer2.prototype.generateFileHtml = function(file) { var _this = this; var matcher2 = newMatcherFn(newDistanceFn(function(e) { return deconstructLine(e.content, file.isCombined).content; })); return file.blocks.map(function(block) { var fileHtml = { left: _this.makeHeaderHtml(block.header, file), right: _this.makeHeaderHtml("") }; _this.applyLineGroupping(block).forEach(function(_a2) { var contextLines = _a2[0], oldLines = _a2[1], newLines = _a2[2]; if (oldLines.length && newLines.length && !contextLines.length) { _this.applyRematchMatching(oldLines, newLines, matcher2).map(function(_a3) { var oldLines2 = _a3[0], newLines2 = _a3[1]; var _b2 = _this.processChangedLines(file.isCombined, oldLines2, newLines2), left2 = _b2.left, right2 = _b2.right; fileHtml.left += left2; fileHtml.right += right2; }); } else if (contextLines.length) { contextLines.forEach(function(line) { var _a3 = deconstructLine(line.content, file.isCombined), prefix = _a3.prefix, content = _a3.content; var _b2 = _this.generateLineHtml({ type: CSSLineClass.CONTEXT, prefix, content, number: line.oldNumber }, { type: CSSLineClass.CONTEXT, prefix, content, number: line.newNumber }), left2 = _b2.left, right2 = _b2.right; fileHtml.left += left2; fileHtml.right += right2; }); } else if (oldLines.length || newLines.length) { var _b = _this.processChangedLines(file.isCombined, oldLines, newLines), left = _b.left, right = _b.right; fileHtml.left += left; fileHtml.right += right; } else { console.error("Unknown state reached while processing groups of lines", contextLines, oldLines, newLines); } }); return fileHtml; }).reduce(function(accomulated, html2) { return { left: accomulated.left + html2.left, right: accomulated.right + html2.right }; }, { left: "", right: "" }); }; SideBySideRenderer2.prototype.applyLineGroupping = function(block) { var blockLinesGroups = []; var oldLines = []; var newLines = []; for (var i = 0; i < block.lines.length; i++) { var diffLine = block.lines[i]; if (diffLine.type !== LineType.INSERT && newLines.length || diffLine.type === LineType.CONTEXT && oldLines.length > 0) { blockLinesGroups.push([[], oldLines, newLines]); oldLines = []; newLines = []; } if (diffLine.type === LineType.CONTEXT) { blockLinesGroups.push([[diffLine], [], []]); } else if (diffLine.type === LineType.INSERT && oldLines.length === 0) { blockLinesGroups.push([[], [], [diffLine]]); } else if (diffLine.type === LineType.INSERT && oldLines.length > 0) { newLines.push(diffLine); } else if (diffLine.type === LineType.DELETE) { oldLines.push(diffLine); } } if (oldLines.length || newLines.length) { blockLinesGroups.push([[], oldLines, newLines]); oldLines = []; newLines = []; } return blockLinesGroups; }; SideBySideRenderer2.prototype.applyRematchMatching = function(oldLines, newLines, matcher2) { var comparisons = oldLines.length * newLines.length; var maxLineSizeInBlock = Math.max.apply(null, [0].concat(oldLines.concat(newLines).map(function(elem) { return elem.content.length; }))); var doMatching = comparisons < this.config.matchingMaxComparisons && maxLineSizeInBlock < this.config.maxLineSizeInBlockForComparison && (this.config.matching === "lines" || this.config.matching === "words"); return doMatching ? matcher2(oldLines, newLines) : [[oldLines, newLines]]; }; SideBySideRenderer2.prototype.makeHeaderHtml = function(blockHeader, file) { return this.hoganUtils.render(genericTemplatesPath2, "block-header", { CSSLineClass, blockHeader: (file === null || file === void 0 ? void 0 : file.isTooBig) ? blockHeader : escapeForHtml(blockHeader), lineClass: "d2h-code-side-linenumber", contentClass: "d2h-code-side-line" }); }; SideBySideRenderer2.prototype.processChangedLines = function(isCombined, oldLines, newLines) { var fileHtml = { right: "", left: "" }; var maxLinesNumber = Math.max(oldLines.length, newLines.length); for (var i = 0; i < maxLinesNumber; i++) { var oldLine = oldLines[i]; var newLine = newLines[i]; var diff2 = oldLine !== void 0 && newLine !== void 0 ? diffHighlight(oldLine.content, newLine.content, isCombined, this.config) : void 0; var preparedOldLine = oldLine !== void 0 && oldLine.oldNumber !== void 0 ? __assign3(__assign3({}, diff2 !== void 0 ? { prefix: diff2.oldLine.prefix, content: diff2.oldLine.content, type: CSSLineClass.DELETE_CHANGES } : __assign3(__assign3({}, deconstructLine(oldLine.content, isCombined)), { type: toCSSClass(oldLine.type) })), { number: oldLine.oldNumber }) : void 0; var preparedNewLine = newLine !== void 0 && newLine.newNumber !== void 0 ? __assign3(__assign3({}, diff2 !== void 0 ? { prefix: diff2.newLine.prefix, content: diff2.newLine.content, type: CSSLineClass.INSERT_CHANGES } : __assign3(__assign3({}, deconstructLine(newLine.content, isCombined)), { type: toCSSClass(newLine.type) })), { number: newLine.newNumber }) : void 0; var _a2 = this.generateLineHtml(preparedOldLine, preparedNewLine), left = _a2.left, right = _a2.right; fileHtml.left += left; fileHtml.right += right; } return fileHtml; }; SideBySideRenderer2.prototype.generateLineHtml = function(oldLine, newLine) { return { left: this.generateSingleHtml(oldLine), right: this.generateSingleHtml(newLine) }; }; SideBySideRenderer2.prototype.generateSingleHtml = function(line) { var lineClass = "d2h-code-side-linenumber"; var contentClass = "d2h-code-side-line"; return this.hoganUtils.render(genericTemplatesPath2, "line", { type: (line === null || line === void 0 ? void 0 : line.type) || "".concat(CSSLineClass.CONTEXT, " d2h-emptyplaceholder"), lineClass: line !== void 0 ? lineClass : "".concat(lineClass, " d2h-code-side-emptyplaceholder"), contentClass: line !== void 0 ? contentClass : "".concat(contentClass, " d2h-code-side-emptyplaceholder"), prefix: (line === null || line === void 0 ? void 0 : line.prefix) === " " ? " " : line === null || line === void 0 ? void 0 : line.prefix, content: line === null || line === void 0 ? void 0 : line.content, lineNumber: line === null || line === void 0 ? void 0 : line.number }); }; return SideBySideRenderer2; }(); var side_by_side_renderer_default = SideBySideRenderer; // node_modules/diff2html/lib-esm/hoganjs-utils.js var Hogan3 = __toESM(require_hogan()); // node_modules/diff2html/lib-esm/diff2html-templates.js var Hogan2 = __toESM(require_hogan()); var defaultTemplates = {}; defaultTemplates["file-summary-line"] = new Hogan2.Template({ code: function(c, p, i) { var t = this; t.b(i = i || ""); t.b('
  • '); t.b("\n" + i); t.b(' '); t.b("\n" + i); t.b(t.rp("'); t.b(t.v(t.f("fileName", c, p, 0))); t.b(""); t.b("\n" + i); t.b(' '); t.b("\n" + i); t.b(' '); t.b(t.v(t.f("addedLines", c, p, 0))); t.b(""); t.b("\n" + i); t.b(' '); t.b(t.v(t.f("deletedLines", c, p, 0))); t.b(""); t.b("\n" + i); t.b(" "); t.b("\n" + i); t.b(" "); t.b("\n" + i); t.b("
  • "); return t.fl(); }, partials: { "'); t.b("\n" + i); t.b('
    '); t.b("\n" + i); t.b(' Files changed ('); t.b(t.v(t.f("filesNumber", c, p, 0))); t.b(")"); t.b("\n" + i); t.b(' hide'); t.b("\n" + i); t.b(' show'); t.b("\n" + i); t.b("
    "); t.b("\n" + i); t.b('
      '); t.b("\n" + i); t.b(" "); t.b(t.t(t.f("files", c, p, 0))); t.b("\n" + i); t.b("
    "); t.b("\n" + i); t.b(""); return t.fl(); }, partials: {}, subs: {} }); defaultTemplates["generic-block-header"] = new Hogan2.Template({ code: function(c, p, i) { var t = this; t.b(i = i || ""); t.b(""); t.b("\n" + i); t.b(' '); t.b("\n" + i); t.b(' '); t.b("\n" + i); t.b('
    '); if (t.s(t.f("blockHeader", c, p, 1), c, p, 0, 156, 173, "{{ }}")) { t.rs(c, p, function(c2, p2, t2) { t2.b(t2.t(t2.f("blockHeader", c2, p2, 0))); }); c.pop(); } if (!t.s(t.f("blockHeader", c, p, 1), c, p, 1, 0, 0, "")) { t.b(" "); } ; t.b("
    "); t.b("\n" + i); t.b(" "); t.b("\n" + i); t.b(""); return t.fl(); }, partials: {}, subs: {} }); defaultTemplates["generic-empty-diff"] = new Hogan2.Template({ code: function(c, p, i) { var t = this; t.b(i = i || ""); t.b(""); t.b("\n" + i); t.b(' '); t.b("\n" + i); t.b('
    '); t.b("\n" + i); t.b(" File without changes"); t.b("\n" + i); t.b("
    "); t.b("\n" + i); t.b(" "); t.b("\n" + i); t.b(""); return t.fl(); }, partials: {}, subs: {} }); defaultTemplates["generic-file-path"] = new Hogan2.Template({ code: function(c, p, i) { var t = this; t.b(i = i || ""); t.b(''); t.b("\n" + i); t.b(t.rp("'); t.b(t.v(t.f("fileDiffName", c, p, 0))); t.b(""); t.b("\n" + i); t.b(t.rp(""); t.b("\n" + i); t.b('"); return t.fl(); }, partials: { ""); t.b("\n" + i); t.b(' '); t.b("\n" + i); t.b(" "); t.b(t.t(t.f("lineNumber", c, p, 0))); t.b("\n" + i); t.b(" "); t.b("\n" + i); t.b(' '); t.b("\n" + i); t.b('
    '); t.b("\n" + i); if (t.s(t.f("prefix", c, p, 1), c, p, 0, 162, 238, "{{ }}")) { t.rs(c, p, function(c2, p2, t2) { t2.b(' '); t2.b(t2.t(t2.f("prefix", c2, p2, 0))); t2.b(""); t2.b("\n" + i); }); c.pop(); } if (!t.s(t.f("prefix", c, p, 1), c, p, 1, 0, 0, "")) { t.b('  '); t.b("\n" + i); } ; if (t.s(t.f("content", c, p, 1), c, p, 0, 371, 445, "{{ }}")) { t.rs(c, p, function(c2, p2, t2) { t2.b(' '); t2.b(t2.t(t2.f("content", c2, p2, 0))); t2.b(""); t2.b("\n" + i); }); c.pop(); } if (!t.s(t.f("content", c, p, 1), c, p, 1, 0, 0, "")) { t.b('
    '); t.b("\n" + i); } ; t.b("
    "); t.b("\n" + i); t.b(" "); t.b("\n" + i); t.b(""); return t.fl(); }, partials: {}, subs: {} }); defaultTemplates["generic-wrapper"] = new Hogan2.Template({ code: function(c, p, i) { var t = this; t.b(i = i || ""); t.b('
    '); t.b("\n" + i); t.b(" "); t.b(t.t(t.f("content", c, p, 0))); t.b("\n" + i); t.b("
    "); return t.fl(); }, partials: {}, subs: {} }); defaultTemplates["icon-file-added"] = new Hogan2.Template({ code: function(c, p, i) { var t = this; t.b(i = i || ""); t.b('"); return t.fl(); }, partials: {}, subs: {} }); defaultTemplates["icon-file-changed"] = new Hogan2.Template({ code: function(c, p, i) { var t = this; t.b(i = i || ""); t.b('"); return t.fl(); }, partials: {}, subs: {} }); defaultTemplates["icon-file-deleted"] = new Hogan2.Template({ code: function(c, p, i) { var t = this; t.b(i = i || ""); t.b('"); return t.fl(); }, partials: {}, subs: {} }); defaultTemplates["icon-file-renamed"] = new Hogan2.Template({ code: function(c, p, i) { var t = this; t.b(i = i || ""); t.b('"); return t.fl(); }, partials: {}, subs: {} }); defaultTemplates["icon-file"] = new Hogan2.Template({ code: function(c, p, i) { var t = this; t.b(i = i || ""); t.b('"); return t.fl(); }, partials: {}, subs: {} }); defaultTemplates["line-by-line-file-diff"] = new Hogan2.Template({ code: function(c, p, i) { var t = this; t.b(i = i || ""); t.b('
    '); t.b("\n" + i); t.b('
    '); t.b("\n" + i); t.b(" "); t.b(t.t(t.f("filePath", c, p, 0))); t.b("\n" + i); t.b("
    "); t.b("\n" + i); t.b('
    '); t.b("\n" + i); t.b('
    '); t.b("\n" + i); t.b(' '); t.b("\n" + i); t.b(' '); t.b("\n" + i); t.b(" "); t.b(t.t(t.f("diffs", c, p, 0))); t.b("\n" + i); t.b(" "); t.b("\n" + i); t.b("
    "); t.b("\n" + i); t.b("
    "); t.b("\n" + i); t.b("
    "); t.b("\n" + i); t.b("
    "); return t.fl(); }, partials: {}, subs: {} }); defaultTemplates["line-by-line-numbers"] = new Hogan2.Template({ code: function(c, p, i) { var t = this; t.b(i = i || ""); t.b('
    '); t.b(t.v(t.f("oldNumber", c, p, 0))); t.b("
    "); t.b("\n" + i); t.b('
    '); t.b(t.v(t.f("newNumber", c, p, 0))); t.b("
    "); return t.fl(); }, partials: {}, subs: {} }); defaultTemplates["side-by-side-file-diff"] = new Hogan2.Template({ code: function(c, p, i) { var t = this; t.b(i = i || ""); t.b('
    '); t.b("\n" + i); t.b('
    '); t.b("\n" + i); t.b(" "); t.b(t.t(t.f("filePath", c, p, 0))); t.b("\n" + i); t.b("
    "); t.b("\n" + i); t.b('
    '); t.b("\n" + i); t.b('
    '); t.b("\n" + i); t.b('
    '); t.b("\n" + i); t.b(' '); t.b("\n" + i); t.b(' '); t.b("\n" + i); t.b(" "); t.b(t.t(t.d("diffs.left", c, p, 0))); t.b("\n" + i); t.b(" "); t.b("\n" + i); t.b("
    "); t.b("\n" + i); t.b("
    "); t.b("\n" + i); t.b("
    "); t.b("\n" + i); t.b('
    '); t.b("\n" + i); t.b('
    '); t.b("\n" + i); t.b(' '); t.b("\n" + i); t.b(' '); t.b("\n" + i); t.b(" "); t.b(t.t(t.d("diffs.right", c, p, 0))); t.b("\n" + i); t.b(" "); t.b("\n" + i); t.b("
    "); t.b("\n" + i); t.b("
    "); t.b("\n" + i); t.b("
    "); t.b("\n" + i); t.b("
    "); t.b("\n" + i); t.b("
    "); return t.fl(); }, partials: {}, subs: {} }); defaultTemplates["tag-file-added"] = new Hogan2.Template({ code: function(c, p, i) { var t = this; t.b(i = i || ""); t.b('ADDED'); return t.fl(); }, partials: {}, subs: {} }); defaultTemplates["tag-file-changed"] = new Hogan2.Template({ code: function(c, p, i) { var t = this; t.b(i = i || ""); t.b('CHANGED'); return t.fl(); }, partials: {}, subs: {} }); defaultTemplates["tag-file-deleted"] = new Hogan2.Template({ code: function(c, p, i) { var t = this; t.b(i = i || ""); t.b('DELETED'); return t.fl(); }, partials: {}, subs: {} }); defaultTemplates["tag-file-renamed"] = new Hogan2.Template({ code: function(c, p, i) { var t = this; t.b(i = i || ""); t.b('RENAMED'); return t.fl(); }, partials: {}, subs: {} }); // node_modules/diff2html/lib-esm/hoganjs-utils.js var __assign4 = function() { __assign4 = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign4.apply(this, arguments); }; var HoganJsUtils = function() { function HoganJsUtils2(_a2) { var _b = _a2.compiledTemplates, compiledTemplates = _b === void 0 ? {} : _b, _c = _a2.rawTemplates, rawTemplates2 = _c === void 0 ? {} : _c; var compiledRawTemplates = Object.entries(rawTemplates2).reduce(function(previousTemplates, _a3) { var _b2; var name = _a3[0], templateString = _a3[1]; var compiledTemplate = Hogan3.compile(templateString, { asString: false }); return __assign4(__assign4({}, previousTemplates), (_b2 = {}, _b2[name] = compiledTemplate, _b2)); }, {}); this.preCompiledTemplates = __assign4(__assign4(__assign4({}, defaultTemplates), compiledTemplates), compiledRawTemplates); } HoganJsUtils2.compile = function(templateString) { return Hogan3.compile(templateString, { asString: false }); }; HoganJsUtils2.prototype.render = function(namespace, view, params, partials, indent) { var templateKey = this.templateKey(namespace, view); try { var template = this.preCompiledTemplates[templateKey]; return template.render(params, partials, indent); } catch (e) { throw new Error("Could not find template to render '".concat(templateKey, "'")); } }; HoganJsUtils2.prototype.template = function(namespace, view) { return this.preCompiledTemplates[this.templateKey(namespace, view)]; }; HoganJsUtils2.prototype.templateKey = function(namespace, view) { return "".concat(namespace, "-").concat(view); }; return HoganJsUtils2; }(); var hoganjs_utils_default = HoganJsUtils; // node_modules/diff2html/lib-esm/diff2html.js var __assign5 = function() { __assign5 = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign5.apply(this, arguments); }; var defaultDiff2HtmlConfig = __assign5(__assign5(__assign5({}, defaultLineByLineRendererConfig), defaultSideBySideRendererConfig), { outputFormat: OutputFormatType.LINE_BY_LINE, drawFileList: true }); function parse2(diffInput, configuration) { if (configuration === void 0) { configuration = {}; } return parse(diffInput, __assign5(__assign5({}, defaultDiff2HtmlConfig), configuration)); } function html(diffInput, configuration) { if (configuration === void 0) { configuration = {}; } var config = __assign5(__assign5({}, defaultDiff2HtmlConfig), configuration); var diffJson = typeof diffInput === "string" ? parse(diffInput, config) : diffInput; var hoganUtils = new hoganjs_utils_default(config); var fileList = config.drawFileList ? render(diffJson, hoganUtils) : ""; var diffOutput = config.outputFormat === "side-by-side" ? new side_by_side_renderer_default(hoganUtils, config).render(diffJson) : new line_by_line_renderer_default(hoganUtils, config).render(diffJson); return fileList + diffOutput; } // src/utils.ts var import_obsidian = require("obsidian"); var import_typed_assert = __toESM(require_build()); // node_modules/simple-git/dist/esm/index.js var import_file_exists = __toESM(require_dist(), 1); var import_debug = __toESM(require_browser(), 1); var import_child_process = require("child_process"); var import_promise_deferred = __toESM(require_dist2(), 1); var import_promise_deferred2 = __toESM(require_dist2(), 1); var __defProp2 = Object.defineProperty; var __defProps = Object.defineProperties; var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; var __getOwnPropDescs = Object.getOwnPropertyDescriptors; var __getOwnPropNames2 = Object.getOwnPropertyNames; var __getOwnPropSymbols = Object.getOwnPropertySymbols; var __hasOwnProp2 = Object.prototype.hasOwnProperty; var __propIsEnum = Object.prototype.propertyIsEnumerable; var __defNormalProp = (obj, key2, value) => key2 in obj ? __defProp2(obj, key2, { enumerable: true, configurable: true, writable: true, value }) : obj[key2] = value; var __spreadValues = (a, b) => { for (var prop in b || (b = {})) if (__hasOwnProp2.call(b, prop)) __defNormalProp(a, prop, b[prop]); if (__getOwnPropSymbols) for (var prop of __getOwnPropSymbols(b)) { if (__propIsEnum.call(b, prop)) __defNormalProp(a, prop, b[prop]); } return a; }; var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); var __markAsModule = (target) => __defProp2(target, "__esModule", { value: true }); var __esm = (fn, res) => function __init() { return fn && (res = (0, fn[__getOwnPropNames2(fn)[0]])(fn = 0)), res; }; var __commonJS2 = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __export2 = (target, all) => { for (var name in all) __defProp2(target, name, { get: all[name], enumerable: true }); }; var __reExport = (target, module2, copyDefault, desc) => { if (module2 && typeof module2 === "object" || typeof module2 === "function") { for (let key2 of __getOwnPropNames2(module2)) if (!__hasOwnProp2.call(target, key2) && (copyDefault || key2 !== "default")) __defProp2(target, key2, { get: () => module2[key2], enumerable: !(desc = __getOwnPropDesc2(module2, key2)) || desc.enumerable }); } return target; }; var __toCommonJS2 = /* @__PURE__ */ ((cache) => { return (module2, temp) => { return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp); }; })(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0); var __async = (__this, __arguments, generator) => { return new Promise((resolve, reject) => { var fulfilled = (value) => { try { step(generator.next(value)); } catch (e) { reject(e); } }; var rejected = (value) => { try { step(generator.throw(value)); } catch (e) { reject(e); } }; var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); step((generator = generator.apply(__this, __arguments)).next()); }); }; var GitError; var init_git_error = __esm({ "src/lib/errors/git-error.ts"() { GitError = class extends Error { constructor(task, message) { super(message); this.task = task; Object.setPrototypeOf(this, new.target.prototype); } }; } }); var GitResponseError; var init_git_response_error = __esm({ "src/lib/errors/git-response-error.ts"() { init_git_error(); GitResponseError = class extends GitError { constructor(git, message) { super(void 0, message || String(git)); this.git = git; } }; } }); var TaskConfigurationError; var init_task_configuration_error = __esm({ "src/lib/errors/task-configuration-error.ts"() { init_git_error(); TaskConfigurationError = class extends GitError { constructor(message) { super(void 0, message); } }; } }); function asFunction(source) { return typeof source === "function" ? source : NOOP; } function isUserFunction(source) { return typeof source === "function" && source !== NOOP; } function splitOn(input, char) { const index = input.indexOf(char); if (index <= 0) { return [input, ""]; } return [input.substr(0, index), input.substr(index + 1)]; } function first(input, offset = 0) { return isArrayLike(input) && input.length > offset ? input[offset] : void 0; } function last(input, offset = 0) { if (isArrayLike(input) && input.length > offset) { return input[input.length - 1 - offset]; } } function isArrayLike(input) { return !!(input && typeof input.length === "number"); } function toLinesWithContent(input = "", trimmed2 = true, separator2 = "\n") { return input.split(separator2).reduce((output, line) => { const lineContent = trimmed2 ? line.trim() : line; if (lineContent) { output.push(lineContent); } return output; }, []); } function forEachLineWithContent(input, callback) { return toLinesWithContent(input, true).map((line) => callback(line)); } function folderExists(path) { return (0, import_file_exists.exists)(path, import_file_exists.FOLDER); } function append(target, item) { if (Array.isArray(target)) { if (!target.includes(item)) { target.push(item); } } else { target.add(item); } return item; } function including(target, item) { if (Array.isArray(target) && !target.includes(item)) { target.push(item); } return target; } function remove(target, item) { if (Array.isArray(target)) { const index = target.indexOf(item); if (index >= 0) { target.splice(index, 1); } } else { target.delete(item); } return item; } function asArray(source) { return Array.isArray(source) ? source : [source]; } function asStringArray(source) { return asArray(source).map(String); } function asNumber(source, onNaN = 0) { if (source == null) { return onNaN; } const num = parseInt(source, 10); return isNaN(num) ? onNaN : num; } function prefixedArray(input, prefix) { const output = []; for (let i = 0, max = input.length; i < max; i++) { output.push(prefix, input[i]); } return output; } function bufferToString(input) { return (Array.isArray(input) ? Buffer.concat(input) : input).toString("utf-8"); } function pick(source, properties) { return Object.assign({}, ...properties.map((property) => property in source ? { [property]: source[property] } : {})); } function delay(duration = 0) { return new Promise((done) => setTimeout(done, duration)); } var NULL; var NOOP; var objectToString; var init_util = __esm({ "src/lib/utils/util.ts"() { NULL = "\0"; NOOP = () => { }; objectToString = Object.prototype.toString.call.bind(Object.prototype.toString); } }); function filterType(input, filter, def) { if (filter(input)) { return input; } return arguments.length > 2 ? def : void 0; } function filterPrimitives(input, omit) { return /number|string|boolean/.test(typeof input) && (!omit || !omit.includes(typeof input)); } function filterPlainObject(input) { return !!input && objectToString(input) === "[object Object]"; } function filterFunction(input) { return typeof input === "function"; } var filterArray; var filterString; var filterStringArray; var filterStringOrStringArray; var filterHasLength; var init_argument_filters = __esm({ "src/lib/utils/argument-filters.ts"() { init_util(); filterArray = (input) => { return Array.isArray(input); }; filterString = (input) => { return typeof input === "string"; }; filterStringArray = (input) => { return Array.isArray(input) && input.every(filterString); }; filterStringOrStringArray = (input) => { return filterString(input) || Array.isArray(input) && input.every(filterString); }; filterHasLength = (input) => { if (input == null || "number|boolean|function".includes(typeof input)) { return false; } return Array.isArray(input) || typeof input === "string" || typeof input.length === "number"; }; } }); var ExitCodes; var init_exit_codes = __esm({ "src/lib/utils/exit-codes.ts"() { ExitCodes = /* @__PURE__ */ ((ExitCodes2) => { ExitCodes2[ExitCodes2["SUCCESS"] = 0] = "SUCCESS"; ExitCodes2[ExitCodes2["ERROR"] = 1] = "ERROR"; ExitCodes2[ExitCodes2["NOT_FOUND"] = -2] = "NOT_FOUND"; ExitCodes2[ExitCodes2["UNCLEAN"] = 128] = "UNCLEAN"; return ExitCodes2; })(ExitCodes || {}); } }); var GitOutputStreams; var init_git_output_streams = __esm({ "src/lib/utils/git-output-streams.ts"() { GitOutputStreams = class { constructor(stdOut, stdErr) { this.stdOut = stdOut; this.stdErr = stdErr; } asStrings() { return new GitOutputStreams(this.stdOut.toString("utf8"), this.stdErr.toString("utf8")); } }; } }); var LineParser; var RemoteLineParser; var init_line_parser = __esm({ "src/lib/utils/line-parser.ts"() { LineParser = class { constructor(regExp, useMatches) { this.matches = []; this.parse = (line, target) => { this.resetMatches(); if (!this._regExp.every((reg, index) => this.addMatch(reg, index, line(index)))) { return false; } return this.useMatches(target, this.prepareMatches()) !== false; }; this._regExp = Array.isArray(regExp) ? regExp : [regExp]; if (useMatches) { this.useMatches = useMatches; } } useMatches(target, match) { throw new Error(`LineParser:useMatches not implemented`); } resetMatches() { this.matches.length = 0; } prepareMatches() { return this.matches; } addMatch(reg, index, line) { const matched = line && reg.exec(line); if (matched) { this.pushMatch(index, matched); } return !!matched; } pushMatch(_index, matched) { this.matches.push(...matched.slice(1)); } }; RemoteLineParser = class extends LineParser { addMatch(reg, index, line) { return /^remote:\s/.test(String(line)) && super.addMatch(reg, index, line); } pushMatch(index, matched) { if (index > 0 || matched.length > 1) { super.pushMatch(index, matched); } } }; } }); function createInstanceConfig(...options) { const baseDir = process.cwd(); const config = Object.assign(__spreadValues({ baseDir }, defaultOptions), ...options.filter((o) => typeof o === "object" && o)); config.baseDir = config.baseDir || baseDir; config.trimmed = config.trimmed === true; return config; } var defaultOptions; var init_simple_git_options = __esm({ "src/lib/utils/simple-git-options.ts"() { defaultOptions = { binary: "git", maxConcurrentProcesses: 5, config: [], trimmed: false }; } }); function appendTaskOptions(options, commands = []) { if (!filterPlainObject(options)) { return commands; } return Object.keys(options).reduce((commands2, key2) => { const value = options[key2]; if (filterPrimitives(value, ["boolean"])) { commands2.push(key2 + "=" + value); } else { commands2.push(key2); } return commands2; }, commands); } function getTrailingOptions(args, initialPrimitive = 0, objectOnly = false) { const command = []; for (let i = 0, max = initialPrimitive < 0 ? args.length : initialPrimitive; i < max; i++) { if ("string|number".includes(typeof args[i])) { command.push(String(args[i])); } } appendTaskOptions(trailingOptionsArgument(args), command); if (!objectOnly) { command.push(...trailingArrayArgument(args)); } return command; } function trailingArrayArgument(args) { const hasTrailingCallback = typeof last(args) === "function"; return filterType(last(args, hasTrailingCallback ? 1 : 0), filterArray, []); } function trailingOptionsArgument(args) { const hasTrailingCallback = filterFunction(last(args)); return filterType(last(args, hasTrailingCallback ? 1 : 0), filterPlainObject); } function trailingFunctionArgument(args, includeNoop = true) { const callback = asFunction(last(args)); return includeNoop || isUserFunction(callback) ? callback : void 0; } var init_task_options = __esm({ "src/lib/utils/task-options.ts"() { init_argument_filters(); init_util(); } }); function callTaskParser(parser3, streams) { return parser3(streams.stdOut, streams.stdErr); } function parseStringResponse(result, parsers12, texts, trim = true) { asArray(texts).forEach((text) => { for (let lines = toLinesWithContent(text, trim), i = 0, max = lines.length; i < max; i++) { const line = (offset = 0) => { if (i + offset >= max) { return; } return lines[i + offset]; }; parsers12.some(({ parse: parse3 }) => parse3(line, result)); } }); return result; } var init_task_parser = __esm({ "src/lib/utils/task-parser.ts"() { init_util(); } }); var utils_exports = {}; __export2(utils_exports, { ExitCodes: () => ExitCodes, GitOutputStreams: () => GitOutputStreams, LineParser: () => LineParser, NOOP: () => NOOP, NULL: () => NULL, RemoteLineParser: () => RemoteLineParser, append: () => append, appendTaskOptions: () => appendTaskOptions, asArray: () => asArray, asFunction: () => asFunction, asNumber: () => asNumber, asStringArray: () => asStringArray, bufferToString: () => bufferToString, callTaskParser: () => callTaskParser, createInstanceConfig: () => createInstanceConfig, delay: () => delay, filterArray: () => filterArray, filterFunction: () => filterFunction, filterHasLength: () => filterHasLength, filterPlainObject: () => filterPlainObject, filterPrimitives: () => filterPrimitives, filterString: () => filterString, filterStringArray: () => filterStringArray, filterStringOrStringArray: () => filterStringOrStringArray, filterType: () => filterType, first: () => first, folderExists: () => folderExists, forEachLineWithContent: () => forEachLineWithContent, getTrailingOptions: () => getTrailingOptions, including: () => including, isUserFunction: () => isUserFunction, last: () => last, objectToString: () => objectToString, parseStringResponse: () => parseStringResponse, pick: () => pick, prefixedArray: () => prefixedArray, remove: () => remove, splitOn: () => splitOn, toLinesWithContent: () => toLinesWithContent, trailingFunctionArgument: () => trailingFunctionArgument, trailingOptionsArgument: () => trailingOptionsArgument }); var init_utils = __esm({ "src/lib/utils/index.ts"() { init_argument_filters(); init_exit_codes(); init_git_output_streams(); init_line_parser(); init_simple_git_options(); init_task_options(); init_task_parser(); init_util(); } }); var check_is_repo_exports = {}; __export2(check_is_repo_exports, { CheckRepoActions: () => CheckRepoActions, checkIsBareRepoTask: () => checkIsBareRepoTask, checkIsRepoRootTask: () => checkIsRepoRootTask, checkIsRepoTask: () => checkIsRepoTask }); function checkIsRepoTask(action) { switch (action) { case "bare": return checkIsBareRepoTask(); case "root": return checkIsRepoRootTask(); } const commands = ["rev-parse", "--is-inside-work-tree"]; return { commands, format: "utf-8", onError, parser }; } function checkIsRepoRootTask() { const commands = ["rev-parse", "--git-dir"]; return { commands, format: "utf-8", onError, parser(path) { return /^\.(git)?$/.test(path.trim()); } }; } function checkIsBareRepoTask() { const commands = ["rev-parse", "--is-bare-repository"]; return { commands, format: "utf-8", onError, parser }; } function isNotRepoMessage(error) { return /(Not a git repository|Kein Git-Repository)/i.test(String(error)); } var CheckRepoActions; var onError; var parser; var init_check_is_repo = __esm({ "src/lib/tasks/check-is-repo.ts"() { init_utils(); CheckRepoActions = /* @__PURE__ */ ((CheckRepoActions2) => { CheckRepoActions2["BARE"] = "bare"; CheckRepoActions2["IN_TREE"] = "tree"; CheckRepoActions2["IS_REPO_ROOT"] = "root"; return CheckRepoActions2; })(CheckRepoActions || {}); onError = ({ exitCode }, error, done, fail) => { if (exitCode === 128 && isNotRepoMessage(error)) { return done(Buffer.from("false")); } fail(error); }; parser = (text) => { return text.trim() === "true"; }; } }); function cleanSummaryParser(dryRun, text) { const summary = new CleanResponse(dryRun); const regexp = dryRun ? dryRunRemovalRegexp : removalRegexp; toLinesWithContent(text).forEach((line) => { const removed = line.replace(regexp, ""); summary.paths.push(removed); (isFolderRegexp.test(removed) ? summary.folders : summary.files).push(removed); }); return summary; } var CleanResponse; var removalRegexp; var dryRunRemovalRegexp; var isFolderRegexp; var init_CleanSummary = __esm({ "src/lib/responses/CleanSummary.ts"() { init_utils(); CleanResponse = class { constructor(dryRun) { this.dryRun = dryRun; this.paths = []; this.files = []; this.folders = []; } }; removalRegexp = /^[a-z]+\s*/i; dryRunRemovalRegexp = /^[a-z]+\s+[a-z]+\s*/i; isFolderRegexp = /\/$/; } }); var task_exports = {}; __export2(task_exports, { EMPTY_COMMANDS: () => EMPTY_COMMANDS, adhocExecTask: () => adhocExecTask, configurationErrorTask: () => configurationErrorTask, isBufferTask: () => isBufferTask, isEmptyTask: () => isEmptyTask, straightThroughBufferTask: () => straightThroughBufferTask, straightThroughStringTask: () => straightThroughStringTask }); function adhocExecTask(parser3) { return { commands: EMPTY_COMMANDS, format: "empty", parser: parser3 }; } function configurationErrorTask(error) { return { commands: EMPTY_COMMANDS, format: "empty", parser() { throw typeof error === "string" ? new TaskConfigurationError(error) : error; } }; } function straightThroughStringTask(commands, trimmed2 = false) { return { commands, format: "utf-8", parser(text) { return trimmed2 ? String(text).trim() : text; } }; } function straightThroughBufferTask(commands) { return { commands, format: "buffer", parser(buffer) { return buffer; } }; } function isBufferTask(task) { return task.format === "buffer"; } function isEmptyTask(task) { return task.format === "empty" || !task.commands.length; } var EMPTY_COMMANDS; var init_task = __esm({ "src/lib/tasks/task.ts"() { init_task_configuration_error(); EMPTY_COMMANDS = []; } }); var clean_exports = {}; __export2(clean_exports, { CONFIG_ERROR_INTERACTIVE_MODE: () => CONFIG_ERROR_INTERACTIVE_MODE, CONFIG_ERROR_MODE_REQUIRED: () => CONFIG_ERROR_MODE_REQUIRED, CONFIG_ERROR_UNKNOWN_OPTION: () => CONFIG_ERROR_UNKNOWN_OPTION, CleanOptions: () => CleanOptions, cleanTask: () => cleanTask, cleanWithOptionsTask: () => cleanWithOptionsTask, isCleanOptionsArray: () => isCleanOptionsArray }); function cleanWithOptionsTask(mode, customArgs) { const { cleanMode, options, valid } = getCleanOptions(mode); if (!cleanMode) { return configurationErrorTask(CONFIG_ERROR_MODE_REQUIRED); } if (!valid.options) { return configurationErrorTask(CONFIG_ERROR_UNKNOWN_OPTION + JSON.stringify(mode)); } options.push(...customArgs); if (options.some(isInteractiveMode)) { return configurationErrorTask(CONFIG_ERROR_INTERACTIVE_MODE); } return cleanTask(cleanMode, options); } function cleanTask(mode, customArgs) { const commands = ["clean", `-${mode}`, ...customArgs]; return { commands, format: "utf-8", parser(text) { return cleanSummaryParser(mode === "n", text); } }; } function isCleanOptionsArray(input) { return Array.isArray(input) && input.every((test) => CleanOptionValues.has(test)); } function getCleanOptions(input) { let cleanMode; let options = []; let valid = { cleanMode: false, options: true }; input.replace(/[^a-z]i/g, "").split("").forEach((char) => { if (isCleanMode(char)) { cleanMode = char; valid.cleanMode = true; } else { valid.options = valid.options && isKnownOption(options[options.length] = `-${char}`); } }); return { cleanMode, options, valid }; } function isCleanMode(cleanMode) { return cleanMode === "f" || cleanMode === "n"; } function isKnownOption(option) { return /^-[a-z]$/i.test(option) && CleanOptionValues.has(option.charAt(1)); } function isInteractiveMode(option) { if (/^-[^\-]/.test(option)) { return option.indexOf("i") > 0; } return option === "--interactive"; } var CONFIG_ERROR_INTERACTIVE_MODE; var CONFIG_ERROR_MODE_REQUIRED; var CONFIG_ERROR_UNKNOWN_OPTION; var CleanOptions; var CleanOptionValues; var init_clean = __esm({ "src/lib/tasks/clean.ts"() { init_CleanSummary(); init_utils(); init_task(); CONFIG_ERROR_INTERACTIVE_MODE = "Git clean interactive mode is not supported"; CONFIG_ERROR_MODE_REQUIRED = 'Git clean mode parameter ("n" or "f") is required'; CONFIG_ERROR_UNKNOWN_OPTION = "Git clean unknown option found in: "; CleanOptions = /* @__PURE__ */ ((CleanOptions2) => { CleanOptions2["DRY_RUN"] = "n"; CleanOptions2["FORCE"] = "f"; CleanOptions2["IGNORED_INCLUDED"] = "x"; CleanOptions2["IGNORED_ONLY"] = "X"; CleanOptions2["EXCLUDING"] = "e"; CleanOptions2["QUIET"] = "q"; CleanOptions2["RECURSIVE"] = "d"; return CleanOptions2; })(CleanOptions || {}); CleanOptionValues = /* @__PURE__ */ new Set([ "i", ...asStringArray(Object.values(CleanOptions)) ]); } }); function configListParser(text) { const config = new ConfigList(); for (const item of configParser(text)) { config.addValue(item.file, String(item.key), item.value); } return config; } function configGetParser(text, key2) { let value = null; const values = []; const scopes = /* @__PURE__ */ new Map(); for (const item of configParser(text, key2)) { if (item.key !== key2) { continue; } values.push(value = item.value); if (!scopes.has(item.file)) { scopes.set(item.file, []); } scopes.get(item.file).push(value); } return { key: key2, paths: Array.from(scopes.keys()), scopes, value, values }; } function configFilePath(filePath) { return filePath.replace(/^(file):/, ""); } function* configParser(text, requestedKey = null) { const lines = text.split("\0"); for (let i = 0, max = lines.length - 1; i < max; ) { const file = configFilePath(lines[i++]); let value = lines[i++]; let key2 = requestedKey; if (value.includes("\n")) { const line = splitOn(value, "\n"); key2 = line[0]; value = line[1]; } yield { file, key: key2, value }; } } var ConfigList; var init_ConfigList = __esm({ "src/lib/responses/ConfigList.ts"() { init_utils(); ConfigList = class { constructor() { this.files = []; this.values = /* @__PURE__ */ Object.create(null); } get all() { if (!this._all) { this._all = this.files.reduce((all, file) => { return Object.assign(all, this.values[file]); }, {}); } return this._all; } addFile(file) { if (!(file in this.values)) { const latest = last(this.files); this.values[file] = latest ? Object.create(this.values[latest]) : {}; this.files.push(file); } return this.values[file]; } addValue(file, key2, value) { const values = this.addFile(file); if (!values.hasOwnProperty(key2)) { values[key2] = value; } else if (Array.isArray(values[key2])) { values[key2].push(value); } else { values[key2] = [values[key2], value]; } this._all = void 0; } }; } }); function asConfigScope(scope, fallback) { if (typeof scope === "string" && GitConfigScope.hasOwnProperty(scope)) { return scope; } return fallback; } function addConfigTask(key2, value, append2, scope) { const commands = ["config", `--${scope}`]; if (append2) { commands.push("--add"); } commands.push(key2, value); return { commands, format: "utf-8", parser(text) { return text; } }; } function getConfigTask(key2, scope) { const commands = ["config", "--null", "--show-origin", "--get-all", key2]; if (scope) { commands.splice(1, 0, `--${scope}`); } return { commands, format: "utf-8", parser(text) { return configGetParser(text, key2); } }; } function listConfigTask(scope) { const commands = ["config", "--list", "--show-origin", "--null"]; if (scope) { commands.push(`--${scope}`); } return { commands, format: "utf-8", parser(text) { return configListParser(text); } }; } function config_default() { return { addConfig(key2, value, ...rest) { return this._runTask(addConfigTask(key2, value, rest[0] === true, asConfigScope( rest[1], "local" /* local */ )), trailingFunctionArgument(arguments)); }, getConfig(key2, scope) { return this._runTask(getConfigTask(key2, asConfigScope(scope, void 0)), trailingFunctionArgument(arguments)); }, listConfig(...rest) { return this._runTask(listConfigTask(asConfigScope(rest[0], void 0)), trailingFunctionArgument(arguments)); } }; } var GitConfigScope; var init_config = __esm({ "src/lib/tasks/config.ts"() { init_ConfigList(); init_utils(); GitConfigScope = /* @__PURE__ */ ((GitConfigScope2) => { GitConfigScope2["system"] = "system"; GitConfigScope2["global"] = "global"; GitConfigScope2["local"] = "local"; GitConfigScope2["worktree"] = "worktree"; return GitConfigScope2; })(GitConfigScope || {}); } }); function grepQueryBuilder(...params) { return new GrepQuery().param(...params); } function parseGrep(grep) { const paths = /* @__PURE__ */ new Set(); const results = {}; forEachLineWithContent(grep, (input) => { const [path, line, preview] = input.split(NULL); paths.add(path); (results[path] = results[path] || []).push({ line: asNumber(line), path, preview }); }); return { paths, results }; } function grep_default() { return { grep(searchTerm) { const then = trailingFunctionArgument(arguments); const options = getTrailingOptions(arguments); for (const option of disallowedOptions) { if (options.includes(option)) { return this._runTask(configurationErrorTask(`git.grep: use of "${option}" is not supported.`), then); } } if (typeof searchTerm === "string") { searchTerm = grepQueryBuilder().param(searchTerm); } const commands = ["grep", "--null", "-n", "--full-name", ...options, ...searchTerm]; return this._runTask({ commands, format: "utf-8", parser(stdOut) { return parseGrep(stdOut); } }, then); } }; } var disallowedOptions; var Query; var _a; var GrepQuery; var init_grep = __esm({ "src/lib/tasks/grep.ts"() { init_utils(); init_task(); disallowedOptions = ["-h"]; Query = Symbol("grepQuery"); GrepQuery = class { constructor() { this[_a] = []; } *[(_a = Query, Symbol.iterator)]() { for (const query of this[Query]) { yield query; } } and(...and) { and.length && this[Query].push("--and", "(", ...prefixedArray(and, "-e"), ")"); return this; } param(...param) { this[Query].push(...prefixedArray(param, "-e")); return this; } }; } }); var reset_exports = {}; __export2(reset_exports, { ResetMode: () => ResetMode, getResetMode: () => getResetMode, resetTask: () => resetTask }); function resetTask(mode, customArgs) { const commands = ["reset"]; if (isValidResetMode(mode)) { commands.push(`--${mode}`); } commands.push(...customArgs); return straightThroughStringTask(commands); } function getResetMode(mode) { if (isValidResetMode(mode)) { return mode; } switch (typeof mode) { case "string": case "undefined": return "soft"; } return; } function isValidResetMode(mode) { return ResetModes.includes(mode); } var ResetMode; var ResetModes; var init_reset = __esm({ "src/lib/tasks/reset.ts"() { init_task(); ResetMode = /* @__PURE__ */ ((ResetMode2) => { ResetMode2["MIXED"] = "mixed"; ResetMode2["SOFT"] = "soft"; ResetMode2["HARD"] = "hard"; ResetMode2["MERGE"] = "merge"; ResetMode2["KEEP"] = "keep"; return ResetMode2; })(ResetMode || {}); ResetModes = Array.from(Object.values(ResetMode)); } }); function createLog() { return (0, import_debug.default)("simple-git"); } function prefixedLogger(to, prefix, forward) { if (!prefix || !String(prefix).replace(/\s*/, "")) { return !forward ? to : (message, ...args) => { to(message, ...args); forward(message, ...args); }; } return (message, ...args) => { to(`%s ${message}`, prefix, ...args); if (forward) { forward(message, ...args); } }; } function childLoggerName(name, childDebugger, { namespace: parentNamespace }) { if (typeof name === "string") { return name; } const childNamespace = childDebugger && childDebugger.namespace || ""; if (childNamespace.startsWith(parentNamespace)) { return childNamespace.substr(parentNamespace.length + 1); } return childNamespace || parentNamespace; } function createLogger(label, verbose, initialStep, infoDebugger = createLog()) { const labelPrefix = label && `[${label}]` || ""; const spawned = []; const debugDebugger = typeof verbose === "string" ? infoDebugger.extend(verbose) : verbose; const key2 = childLoggerName(filterType(verbose, filterString), debugDebugger, infoDebugger); return step(initialStep); function sibling(name, initial) { return append(spawned, createLogger(label, key2.replace(/^[^:]+/, name), initial, infoDebugger)); } function step(phase) { const stepPrefix = phase && `[${phase}]` || ""; const debug2 = debugDebugger && prefixedLogger(debugDebugger, stepPrefix) || NOOP; const info = prefixedLogger(infoDebugger, `${labelPrefix} ${stepPrefix}`, debug2); return Object.assign(debugDebugger ? debug2 : info, { label, sibling, info, step }); } } var init_git_logger = __esm({ "src/lib/git-logger.ts"() { init_utils(); import_debug.default.formatters.L = (value) => String(filterHasLength(value) ? value.length : "-"); import_debug.default.formatters.B = (value) => { if (Buffer.isBuffer(value)) { return value.toString("utf8"); } return objectToString(value); }; } }); var _TasksPendingQueue; var TasksPendingQueue; var init_tasks_pending_queue = __esm({ "src/lib/runners/tasks-pending-queue.ts"() { init_git_error(); init_git_logger(); _TasksPendingQueue = class { constructor(logLabel = "GitExecutor") { this.logLabel = logLabel; this._queue = /* @__PURE__ */ new Map(); } withProgress(task) { return this._queue.get(task); } createProgress(task) { const name = _TasksPendingQueue.getName(task.commands[0]); const logger = createLogger(this.logLabel, name); return { task, logger, name }; } push(task) { const progress = this.createProgress(task); progress.logger("Adding task to the queue, commands = %o", task.commands); this._queue.set(task, progress); return progress; } fatal(err) { for (const [task, { logger }] of Array.from(this._queue.entries())) { if (task === err.task) { logger.info(`Failed %o`, err); logger(`Fatal exception, any as-yet un-started tasks run through this executor will not be attempted`); } else { logger.info(`A fatal exception occurred in a previous task, the queue has been purged: %o`, err.message); } this.complete(task); } if (this._queue.size !== 0) { throw new Error(`Queue size should be zero after fatal: ${this._queue.size}`); } } complete(task) { const progress = this.withProgress(task); if (progress) { this._queue.delete(task); } } attempt(task) { const progress = this.withProgress(task); if (!progress) { throw new GitError(void 0, "TasksPendingQueue: attempt called for an unknown task"); } progress.logger("Starting task"); return progress; } static getName(name = "empty") { return `task:${name}:${++_TasksPendingQueue.counter}`; } }; TasksPendingQueue = _TasksPendingQueue; TasksPendingQueue.counter = 0; } }); function pluginContext(task, commands) { return { method: first(task.commands) || "", commands }; } function onErrorReceived(target, logger) { return (err) => { logger(`[ERROR] child process exception %o`, err); target.push(Buffer.from(String(err.stack), "ascii")); }; } function onDataReceived(target, name, logger, output) { return (buffer) => { logger(`%s received %L bytes`, name, buffer); output(`%B`, buffer); target.push(buffer); }; } var GitExecutorChain; var init_git_executor_chain = __esm({ "src/lib/runners/git-executor-chain.ts"() { init_git_error(); init_task(); init_utils(); init_tasks_pending_queue(); GitExecutorChain = class { constructor(_executor, _scheduler, _plugins) { this._executor = _executor; this._scheduler = _scheduler; this._plugins = _plugins; this._chain = Promise.resolve(); this._queue = new TasksPendingQueue(); } get binary() { return this._executor.binary; } get cwd() { return this._cwd || this._executor.cwd; } set cwd(cwd) { this._cwd = cwd; } get env() { return this._executor.env; } get outputHandler() { return this._executor.outputHandler; } chain() { return this; } push(task) { this._queue.push(task); return this._chain = this._chain.then(() => this.attemptTask(task)); } attemptTask(task) { return __async(this, null, function* () { const onScheduleComplete = yield this._scheduler.next(); const onQueueComplete = () => this._queue.complete(task); try { const { logger } = this._queue.attempt(task); return yield isEmptyTask(task) ? this.attemptEmptyTask(task, logger) : this.attemptRemoteTask(task, logger); } catch (e) { throw this.onFatalException(task, e); } finally { onQueueComplete(); onScheduleComplete(); } }); } onFatalException(task, e) { const gitError = e instanceof GitError ? Object.assign(e, { task }) : new GitError(task, e && String(e)); this._chain = Promise.resolve(); this._queue.fatal(gitError); return gitError; } attemptRemoteTask(task, logger) { return __async(this, null, function* () { const args = this._plugins.exec("spawn.args", [...task.commands], pluginContext(task, task.commands)); const raw = yield this.gitResponse(task, this.binary, args, this.outputHandler, logger.step("SPAWN")); const outputStreams = yield this.handleTaskData(task, args, raw, logger.step("HANDLE")); logger(`passing response to task's parser as a %s`, task.format); if (isBufferTask(task)) { return callTaskParser(task.parser, outputStreams); } return callTaskParser(task.parser, outputStreams.asStrings()); }); } attemptEmptyTask(task, logger) { return __async(this, null, function* () { logger(`empty task bypassing child process to call to task's parser`); return task.parser(this); }); } handleTaskData(task, args, result, logger) { const { exitCode, rejection, stdOut, stdErr } = result; return new Promise((done, fail) => { logger(`Preparing to handle process response exitCode=%d stdOut=`, exitCode); const { error } = this._plugins.exec("task.error", { error: rejection }, __spreadValues(__spreadValues({}, pluginContext(task, args)), result)); if (error && task.onError) { logger.info(`exitCode=%s handling with custom error handler`); return task.onError(result, error, (newStdOut) => { logger.info(`custom error handler treated as success`); logger(`custom error returned a %s`, objectToString(newStdOut)); done(new GitOutputStreams(Array.isArray(newStdOut) ? Buffer.concat(newStdOut) : newStdOut, Buffer.concat(stdErr))); }, fail); } if (error) { logger.info(`handling as error: exitCode=%s stdErr=%s rejection=%o`, exitCode, stdErr.length, rejection); return fail(error); } logger.info(`retrieving task output complete`); done(new GitOutputStreams(Buffer.concat(stdOut), Buffer.concat(stdErr))); }); } gitResponse(task, command, args, outputHandler, logger) { return __async(this, null, function* () { const outputLogger = logger.sibling("output"); const spawnOptions = this._plugins.exec("spawn.options", { cwd: this.cwd, env: this.env, windowsHide: true }, pluginContext(task, task.commands)); return new Promise((done) => { const stdOut = []; const stdErr = []; logger.info(`%s %o`, command, args); logger("%O", spawnOptions); let rejection = this._beforeSpawn(task, args); if (rejection) { return done({ stdOut, stdErr, exitCode: 9901, rejection }); } this._plugins.exec("spawn.before", void 0, __spreadProps(__spreadValues({}, pluginContext(task, args)), { kill(reason) { rejection = reason || rejection; } })); const spawned = (0, import_child_process.spawn)(command, args, spawnOptions); spawned.stdout.on("data", onDataReceived(stdOut, "stdOut", logger, outputLogger.step("stdOut"))); spawned.stderr.on("data", onDataReceived(stdErr, "stdErr", logger, outputLogger.step("stdErr"))); spawned.on("error", onErrorReceived(stdErr, logger)); if (outputHandler) { logger(`Passing child process stdOut/stdErr to custom outputHandler`); outputHandler(command, spawned.stdout, spawned.stderr, [...args]); } this._plugins.exec("spawn.after", void 0, __spreadProps(__spreadValues({}, pluginContext(task, args)), { spawned, close(exitCode, reason) { done({ stdOut, stdErr, exitCode, rejection: rejection || reason }); }, kill(reason) { if (spawned.killed) { return; } rejection = reason; spawned.kill("SIGINT"); } })); }); }); } _beforeSpawn(task, args) { let rejection; this._plugins.exec("spawn.before", void 0, __spreadProps(__spreadValues({}, pluginContext(task, args)), { kill(reason) { rejection = reason || rejection; } })); return rejection; } }; } }); var git_executor_exports = {}; __export2(git_executor_exports, { GitExecutor: () => GitExecutor }); var GitExecutor; var init_git_executor = __esm({ "src/lib/runners/git-executor.ts"() { init_git_executor_chain(); GitExecutor = class { constructor(binary = "git", cwd, _scheduler, _plugins) { this.binary = binary; this.cwd = cwd; this._scheduler = _scheduler; this._plugins = _plugins; this._chain = new GitExecutorChain(this, this._scheduler, this._plugins); } chain() { return new GitExecutorChain(this, this._scheduler, this._plugins); } push(task) { return this._chain.push(task); } }; } }); function taskCallback(task, response, callback = NOOP) { const onSuccess = (data) => { callback(null, data); }; const onError2 = (err) => { if ((err == null ? void 0 : err.task) === task) { callback(err instanceof GitResponseError ? addDeprecationNoticeToError(err) : err, void 0); } }; response.then(onSuccess, onError2); } function addDeprecationNoticeToError(err) { let log = (name) => { console.warn(`simple-git deprecation notice: accessing GitResponseError.${name} should be GitResponseError.git.${name}, this will no longer be available in version 3`); log = NOOP; }; return Object.create(err, Object.getOwnPropertyNames(err.git).reduce(descriptorReducer, {})); function descriptorReducer(all, name) { if (name in err) { return all; } all[name] = { enumerable: false, configurable: false, get() { log(name); return err.git[name]; } }; return all; } } var init_task_callback = __esm({ "src/lib/task-callback.ts"() { init_git_response_error(); init_utils(); } }); function changeWorkingDirectoryTask(directory, root) { return adhocExecTask((instance) => { if (!folderExists(directory)) { throw new Error(`Git.cwd: cannot change to non-directory "${directory}"`); } return (root || instance).cwd = directory; }); } var init_change_working_directory = __esm({ "src/lib/tasks/change-working-directory.ts"() { init_utils(); init_task(); } }); function checkoutTask(args) { const commands = ["checkout", ...args]; if (commands[1] === "-b" && commands.includes("-B")) { commands[1] = remove(commands, "-B"); } return straightThroughStringTask(commands); } function checkout_default() { return { checkout() { return this._runTask(checkoutTask(getTrailingOptions(arguments, 1)), trailingFunctionArgument(arguments)); }, checkoutBranch(branchName, startPoint) { return this._runTask(checkoutTask(["-b", branchName, startPoint, ...getTrailingOptions(arguments)]), trailingFunctionArgument(arguments)); }, checkoutLocalBranch(branchName) { return this._runTask(checkoutTask(["-b", branchName, ...getTrailingOptions(arguments)]), trailingFunctionArgument(arguments)); } }; } var init_checkout = __esm({ "src/lib/tasks/checkout.ts"() { init_utils(); init_task(); } }); function parseCommitResult(stdOut) { const result = { author: null, branch: "", commit: "", root: false, summary: { changes: 0, insertions: 0, deletions: 0 } }; return parseStringResponse(result, parsers, stdOut); } var parsers; var init_parse_commit = __esm({ "src/lib/parsers/parse-commit.ts"() { init_utils(); parsers = [ new LineParser(/^\[([^\s]+)( \([^)]+\))? ([^\]]+)/, (result, [branch, root, commit]) => { result.branch = branch; result.commit = commit; result.root = !!root; }), new LineParser(/\s*Author:\s(.+)/i, (result, [author]) => { const parts = author.split("<"); const email = parts.pop(); if (!email || !email.includes("@")) { return; } result.author = { email: email.substr(0, email.length - 1), name: parts.join("<").trim() }; }), new LineParser(/(\d+)[^,]*(?:,\s*(\d+)[^,]*)(?:,\s*(\d+))/g, (result, [changes, insertions, deletions]) => { result.summary.changes = parseInt(changes, 10) || 0; result.summary.insertions = parseInt(insertions, 10) || 0; result.summary.deletions = parseInt(deletions, 10) || 0; }), new LineParser(/^(\d+)[^,]*(?:,\s*(\d+)[^(]+\(([+-]))?/, (result, [changes, lines, direction]) => { result.summary.changes = parseInt(changes, 10) || 0; const count = parseInt(lines, 10) || 0; if (direction === "-") { result.summary.deletions = count; } else if (direction === "+") { result.summary.insertions = count; } }) ]; } }); function commitTask(message, files, customArgs) { const commands = [ "-c", "core.abbrev=40", "commit", ...prefixedArray(message, "-m"), ...files, ...customArgs ]; return { commands, format: "utf-8", parser: parseCommitResult }; } function commit_default() { return { commit(message, ...rest) { const next = trailingFunctionArgument(arguments); const task = rejectDeprecatedSignatures(message) || commitTask(asArray(message), asArray(filterType(rest[0], filterStringOrStringArray, [])), [...filterType(rest[1], filterArray, []), ...getTrailingOptions(arguments, 0, true)]); return this._runTask(task, next); } }; function rejectDeprecatedSignatures(message) { return !filterStringOrStringArray(message) && configurationErrorTask(`git.commit: requires the commit message to be supplied as a string/string[]`); } } var init_commit = __esm({ "src/lib/tasks/commit.ts"() { init_parse_commit(); init_utils(); init_task(); } }); function hashObjectTask(filePath, write) { const commands = ["hash-object", filePath]; if (write) { commands.push("-w"); } return straightThroughStringTask(commands, true); } var init_hash_object = __esm({ "src/lib/tasks/hash-object.ts"() { init_task(); } }); function parseInit(bare, path, text) { const response = String(text).trim(); let result; if (result = initResponseRegex.exec(response)) { return new InitSummary(bare, path, false, result[1]); } if (result = reInitResponseRegex.exec(response)) { return new InitSummary(bare, path, true, result[1]); } let gitDir = ""; const tokens = response.split(" "); while (tokens.length) { const token = tokens.shift(); if (token === "in") { gitDir = tokens.join(" "); break; } } return new InitSummary(bare, path, /^re/i.test(response), gitDir); } var InitSummary; var initResponseRegex; var reInitResponseRegex; var init_InitSummary = __esm({ "src/lib/responses/InitSummary.ts"() { InitSummary = class { constructor(bare, path, existing, gitDir) { this.bare = bare; this.path = path; this.existing = existing; this.gitDir = gitDir; } }; initResponseRegex = /^Init.+ repository in (.+)$/; reInitResponseRegex = /^Rein.+ in (.+)$/; } }); function hasBareCommand(command) { return command.includes(bareCommand); } function initTask(bare = false, path, customArgs) { const commands = ["init", ...customArgs]; if (bare && !hasBareCommand(commands)) { commands.splice(1, 0, bareCommand); } return { commands, format: "utf-8", parser(text) { return parseInit(commands.includes("--bare"), path, text); } }; } var bareCommand; var init_init = __esm({ "src/lib/tasks/init.ts"() { init_InitSummary(); bareCommand = "--bare"; } }); function logFormatFromCommand(customArgs) { for (let i = 0; i < customArgs.length; i++) { const format = logFormatRegex.exec(customArgs[i]); if (format) { return `--${format[1]}`; } } return ""; } function isLogFormat(customArg) { return logFormatRegex.test(customArg); } var logFormatRegex; var init_log_format = __esm({ "src/lib/args/log-format.ts"() { logFormatRegex = /^--(stat|numstat|name-only|name-status)(=|$)/; } }); var DiffSummary; var init_DiffSummary = __esm({ "src/lib/responses/DiffSummary.ts"() { DiffSummary = class { constructor() { this.changed = 0; this.deletions = 0; this.insertions = 0; this.files = []; } }; } }); function getDiffParser(format = "") { const parser3 = diffSummaryParsers[format]; return (stdOut) => parseStringResponse(new DiffSummary(), parser3, stdOut, false); } var statParser; var numStatParser; var nameOnlyParser; var nameStatusParser; var diffSummaryParsers; var init_parse_diff_summary = __esm({ "src/lib/parsers/parse-diff-summary.ts"() { init_log_format(); init_DiffSummary(); init_utils(); statParser = [ new LineParser(/(.+)\s+\|\s+(\d+)(\s+[+\-]+)?$/, (result, [file, changes, alterations = ""]) => { result.files.push({ file: file.trim(), changes: asNumber(changes), insertions: alterations.replace(/[^+]/g, "").length, deletions: alterations.replace(/[^-]/g, "").length, binary: false }); }), new LineParser(/(.+) \|\s+Bin ([0-9.]+) -> ([0-9.]+) ([a-z]+)/, (result, [file, before, after]) => { result.files.push({ file: file.trim(), before: asNumber(before), after: asNumber(after), binary: true }); }), new LineParser(/(\d+) files? changed\s*((?:, \d+ [^,]+){0,2})/, (result, [changed, summary]) => { const inserted = /(\d+) i/.exec(summary); const deleted = /(\d+) d/.exec(summary); result.changed = asNumber(changed); result.insertions = asNumber(inserted == null ? void 0 : inserted[1]); result.deletions = asNumber(deleted == null ? void 0 : deleted[1]); }) ]; numStatParser = [ new LineParser(/(\d+)\t(\d+)\t(.+)$/, (result, [changesInsert, changesDelete, file]) => { const insertions = asNumber(changesInsert); const deletions = asNumber(changesDelete); result.changed++; result.insertions += insertions; result.deletions += deletions; result.files.push({ file, changes: insertions + deletions, insertions, deletions, binary: false }); }), new LineParser(/-\t-\t(.+)$/, (result, [file]) => { result.changed++; result.files.push({ file, after: 0, before: 0, binary: true }); }) ]; nameOnlyParser = [ new LineParser(/(.+)$/, (result, [file]) => { result.changed++; result.files.push({ file, changes: 0, insertions: 0, deletions: 0, binary: false }); }) ]; nameStatusParser = [ new LineParser(/([ACDMRTUXB])\s*(.+)$/, (result, [_status, file]) => { result.changed++; result.files.push({ file, changes: 0, insertions: 0, deletions: 0, binary: false }); }) ]; diffSummaryParsers = { [ "" /* NONE */ ]: statParser, [ "--stat" /* STAT */ ]: statParser, [ "--numstat" /* NUM_STAT */ ]: numStatParser, [ "--name-status" /* NAME_STATUS */ ]: nameStatusParser, [ "--name-only" /* NAME_ONLY */ ]: nameOnlyParser }; } }); function lineBuilder(tokens, fields) { return fields.reduce((line, field, index) => { line[field] = tokens[index] || ""; return line; }, /* @__PURE__ */ Object.create({ diff: null })); } function createListLogSummaryParser(splitter = SPLITTER, fields = defaultFieldNames, logFormat = "") { const parseDiffResult = getDiffParser(logFormat); return function(stdOut) { const all = toLinesWithContent(stdOut, true, START_BOUNDARY).map(function(item) { const lineDetail = item.trim().split(COMMIT_BOUNDARY); const listLogLine = lineBuilder(lineDetail[0].trim().split(splitter), fields); if (lineDetail.length > 1 && !!lineDetail[1].trim()) { listLogLine.diff = parseDiffResult(lineDetail[1]); } return listLogLine; }); return { all, latest: all.length && all[0] || null, total: all.length }; }; } var START_BOUNDARY; var COMMIT_BOUNDARY; var SPLITTER; var defaultFieldNames; var init_parse_list_log_summary = __esm({ "src/lib/parsers/parse-list-log-summary.ts"() { init_utils(); init_parse_diff_summary(); init_log_format(); START_BOUNDARY = "\xF2\xF2\xF2\xF2\xF2\xF2 "; COMMIT_BOUNDARY = " \xF2\xF2"; SPLITTER = " \xF2 "; defaultFieldNames = ["hash", "date", "message", "refs", "author_name", "author_email"]; } }); var diff_exports = {}; __export2(diff_exports, { diffSummaryTask: () => diffSummaryTask, validateLogFormatConfig: () => validateLogFormatConfig }); function diffSummaryTask(customArgs) { let logFormat = logFormatFromCommand(customArgs); const commands = ["diff"]; if (logFormat === "") { logFormat = "--stat"; commands.push("--stat=4096"); } commands.push(...customArgs); return validateLogFormatConfig(commands) || { commands, format: "utf-8", parser: getDiffParser(logFormat) }; } function validateLogFormatConfig(customArgs) { const flags = customArgs.filter(isLogFormat); if (flags.length > 1) { return configurationErrorTask(`Summary flags are mutually exclusive - pick one of ${flags.join(",")}`); } if (flags.length && customArgs.includes("-z")) { return configurationErrorTask(`Summary flag ${flags} parsing is not compatible with null termination option '-z'`); } } var init_diff = __esm({ "src/lib/tasks/diff.ts"() { init_log_format(); init_parse_diff_summary(); init_task(); } }); function prettyFormat(format, splitter) { const fields = []; const formatStr = []; Object.keys(format).forEach((field) => { fields.push(field); formatStr.push(String(format[field])); }); return [fields, formatStr.join(splitter)]; } function userOptions(input) { return Object.keys(input).reduce((out, key2) => { if (!(key2 in excludeOptions)) { out[key2] = input[key2]; } return out; }, {}); } function parseLogOptions(opt = {}, customArgs = []) { const splitter = filterType(opt.splitter, filterString, SPLITTER); const format = !filterPrimitives(opt.format) && opt.format ? opt.format : { hash: "%H", date: opt.strictDate === false ? "%ai" : "%aI", message: "%s", refs: "%D", body: opt.multiLine ? "%B" : "%b", author_name: opt.mailMap !== false ? "%aN" : "%an", author_email: opt.mailMap !== false ? "%aE" : "%ae" }; const [fields, formatStr] = prettyFormat(format, splitter); const suffix = []; const command = [ `--pretty=format:${START_BOUNDARY}${formatStr}${COMMIT_BOUNDARY}`, ...customArgs ]; const maxCount = opt.n || opt["max-count"] || opt.maxCount; if (maxCount) { command.push(`--max-count=${maxCount}`); } if (opt.from || opt.to) { const rangeOperator = opt.symmetric !== false ? "..." : ".."; suffix.push(`${opt.from || ""}${rangeOperator}${opt.to || ""}`); } if (filterString(opt.file)) { suffix.push("--follow", opt.file); } appendTaskOptions(userOptions(opt), command); return { fields, splitter, commands: [...command, ...suffix] }; } function logTask(splitter, fields, customArgs) { const parser3 = createListLogSummaryParser(splitter, fields, logFormatFromCommand(customArgs)); return { commands: ["log", ...customArgs], format: "utf-8", parser: parser3 }; } function log_default() { return { log(...rest) { const next = trailingFunctionArgument(arguments); const options = parseLogOptions(trailingOptionsArgument(arguments), filterType(arguments[0], filterArray)); const task = rejectDeprecatedSignatures(...rest) || validateLogFormatConfig(options.commands) || createLogTask(options); return this._runTask(task, next); } }; function createLogTask(options) { return logTask(options.splitter, options.fields, options.commands); } function rejectDeprecatedSignatures(from, to) { return filterString(from) && filterString(to) && configurationErrorTask(`git.log(string, string) should be replaced with git.log({ from: string, to: string })`); } } var excludeOptions; var init_log = __esm({ "src/lib/tasks/log.ts"() { init_log_format(); init_parse_list_log_summary(); init_utils(); init_task(); init_diff(); excludeOptions = /* @__PURE__ */ ((excludeOptions2) => { excludeOptions2[excludeOptions2["--pretty"] = 0] = "--pretty"; excludeOptions2[excludeOptions2["max-count"] = 1] = "max-count"; excludeOptions2[excludeOptions2["maxCount"] = 2] = "maxCount"; excludeOptions2[excludeOptions2["n"] = 3] = "n"; excludeOptions2[excludeOptions2["file"] = 4] = "file"; excludeOptions2[excludeOptions2["format"] = 5] = "format"; excludeOptions2[excludeOptions2["from"] = 6] = "from"; excludeOptions2[excludeOptions2["to"] = 7] = "to"; excludeOptions2[excludeOptions2["splitter"] = 8] = "splitter"; excludeOptions2[excludeOptions2["symmetric"] = 9] = "symmetric"; excludeOptions2[excludeOptions2["mailMap"] = 10] = "mailMap"; excludeOptions2[excludeOptions2["multiLine"] = 11] = "multiLine"; excludeOptions2[excludeOptions2["strictDate"] = 12] = "strictDate"; return excludeOptions2; })(excludeOptions || {}); } }); var MergeSummaryConflict; var MergeSummaryDetail; var init_MergeSummary = __esm({ "src/lib/responses/MergeSummary.ts"() { MergeSummaryConflict = class { constructor(reason, file = null, meta) { this.reason = reason; this.file = file; this.meta = meta; } toString() { return `${this.file}:${this.reason}`; } }; MergeSummaryDetail = class { constructor() { this.conflicts = []; this.merges = []; this.result = "success"; } get failed() { return this.conflicts.length > 0; } get reason() { return this.result; } toString() { if (this.conflicts.length) { return `CONFLICTS: ${this.conflicts.join(", ")}`; } return "OK"; } }; } }); var PullSummary; var PullFailedSummary; var init_PullSummary = __esm({ "src/lib/responses/PullSummary.ts"() { PullSummary = class { constructor() { this.remoteMessages = { all: [] }; this.created = []; this.deleted = []; this.files = []; this.deletions = {}; this.insertions = {}; this.summary = { changes: 0, deletions: 0, insertions: 0 }; } }; PullFailedSummary = class { constructor() { this.remote = ""; this.hash = { local: "", remote: "" }; this.branch = { local: "", remote: "" }; this.message = ""; } toString() { return this.message; } }; } }); function objectEnumerationResult(remoteMessages) { return remoteMessages.objects = remoteMessages.objects || { compressing: 0, counting: 0, enumerating: 0, packReused: 0, reused: { count: 0, delta: 0 }, total: { count: 0, delta: 0 } }; } function asObjectCount(source) { const count = /^\s*(\d+)/.exec(source); const delta = /delta (\d+)/i.exec(source); return { count: asNumber(count && count[1] || "0"), delta: asNumber(delta && delta[1] || "0") }; } var remoteMessagesObjectParsers; var init_parse_remote_objects = __esm({ "src/lib/parsers/parse-remote-objects.ts"() { init_utils(); remoteMessagesObjectParsers = [ new RemoteLineParser(/^remote:\s*(enumerating|counting|compressing) objects: (\d+),/i, (result, [action, count]) => { const key2 = action.toLowerCase(); const enumeration = objectEnumerationResult(result.remoteMessages); Object.assign(enumeration, { [key2]: asNumber(count) }); }), new RemoteLineParser(/^remote:\s*(enumerating|counting|compressing) objects: \d+% \(\d+\/(\d+)\),/i, (result, [action, count]) => { const key2 = action.toLowerCase(); const enumeration = objectEnumerationResult(result.remoteMessages); Object.assign(enumeration, { [key2]: asNumber(count) }); }), new RemoteLineParser(/total ([^,]+), reused ([^,]+), pack-reused (\d+)/i, (result, [total, reused, packReused]) => { const objects = objectEnumerationResult(result.remoteMessages); objects.total = asObjectCount(total); objects.reused = asObjectCount(reused); objects.packReused = asNumber(packReused); }) ]; } }); function parseRemoteMessages(_stdOut, stdErr) { return parseStringResponse({ remoteMessages: new RemoteMessageSummary() }, parsers2, stdErr); } var parsers2; var RemoteMessageSummary; var init_parse_remote_messages = __esm({ "src/lib/parsers/parse-remote-messages.ts"() { init_utils(); init_parse_remote_objects(); parsers2 = [ new RemoteLineParser(/^remote:\s*(.+)$/, (result, [text]) => { result.remoteMessages.all.push(text.trim()); return false; }), ...remoteMessagesObjectParsers, new RemoteLineParser([/create a (?:pull|merge) request/i, /\s(https?:\/\/\S+)$/], (result, [pullRequestUrl]) => { result.remoteMessages.pullRequestUrl = pullRequestUrl; }), new RemoteLineParser([/found (\d+) vulnerabilities.+\(([^)]+)\)/i, /\s(https?:\/\/\S+)$/], (result, [count, summary, url]) => { result.remoteMessages.vulnerabilities = { count: asNumber(count), summary, url }; }) ]; RemoteMessageSummary = class { constructor() { this.all = []; } }; } }); function parsePullErrorResult(stdOut, stdErr) { const pullError = parseStringResponse(new PullFailedSummary(), errorParsers, [stdOut, stdErr]); return pullError.message && pullError; } var FILE_UPDATE_REGEX; var SUMMARY_REGEX; var ACTION_REGEX; var parsers3; var errorParsers; var parsePullDetail; var parsePullResult; var init_parse_pull = __esm({ "src/lib/parsers/parse-pull.ts"() { init_PullSummary(); init_utils(); init_parse_remote_messages(); FILE_UPDATE_REGEX = /^\s*(.+?)\s+\|\s+\d+\s*(\+*)(-*)/; SUMMARY_REGEX = /(\d+)\D+((\d+)\D+\(\+\))?(\D+(\d+)\D+\(-\))?/; ACTION_REGEX = /^(create|delete) mode \d+ (.+)/; parsers3 = [ new LineParser(FILE_UPDATE_REGEX, (result, [file, insertions, deletions]) => { result.files.push(file); if (insertions) { result.insertions[file] = insertions.length; } if (deletions) { result.deletions[file] = deletions.length; } }), new LineParser(SUMMARY_REGEX, (result, [changes, , insertions, , deletions]) => { if (insertions !== void 0 || deletions !== void 0) { result.summary.changes = +changes || 0; result.summary.insertions = +insertions || 0; result.summary.deletions = +deletions || 0; return true; } return false; }), new LineParser(ACTION_REGEX, (result, [action, file]) => { append(result.files, file); append(action === "create" ? result.created : result.deleted, file); }) ]; errorParsers = [ new LineParser(/^from\s(.+)$/i, (result, [remote]) => void (result.remote = remote)), new LineParser(/^fatal:\s(.+)$/, (result, [message]) => void (result.message = message)), new LineParser(/([a-z0-9]+)\.\.([a-z0-9]+)\s+(\S+)\s+->\s+(\S+)$/, (result, [hashLocal, hashRemote, branchLocal, branchRemote]) => { result.branch.local = branchLocal; result.hash.local = hashLocal; result.branch.remote = branchRemote; result.hash.remote = hashRemote; }) ]; parsePullDetail = (stdOut, stdErr) => { return parseStringResponse(new PullSummary(), parsers3, [stdOut, stdErr]); }; parsePullResult = (stdOut, stdErr) => { return Object.assign(new PullSummary(), parsePullDetail(stdOut, stdErr), parseRemoteMessages(stdOut, stdErr)); }; } }); var parsers4; var parseMergeResult; var parseMergeDetail; var init_parse_merge = __esm({ "src/lib/parsers/parse-merge.ts"() { init_MergeSummary(); init_utils(); init_parse_pull(); parsers4 = [ new LineParser(/^Auto-merging\s+(.+)$/, (summary, [autoMerge]) => { summary.merges.push(autoMerge); }), new LineParser(/^CONFLICT\s+\((.+)\): Merge conflict in (.+)$/, (summary, [reason, file]) => { summary.conflicts.push(new MergeSummaryConflict(reason, file)); }), new LineParser(/^CONFLICT\s+\((.+\/delete)\): (.+) deleted in (.+) and/, (summary, [reason, file, deleteRef]) => { summary.conflicts.push(new MergeSummaryConflict(reason, file, { deleteRef })); }), new LineParser(/^CONFLICT\s+\((.+)\):/, (summary, [reason]) => { summary.conflicts.push(new MergeSummaryConflict(reason, null)); }), new LineParser(/^Automatic merge failed;\s+(.+)$/, (summary, [result]) => { summary.result = result; }) ]; parseMergeResult = (stdOut, stdErr) => { return Object.assign(parseMergeDetail(stdOut, stdErr), parsePullResult(stdOut, stdErr)); }; parseMergeDetail = (stdOut) => { return parseStringResponse(new MergeSummaryDetail(), parsers4, stdOut); }; } }); function mergeTask(customArgs) { if (!customArgs.length) { return configurationErrorTask("Git.merge requires at least one option"); } return { commands: ["merge", ...customArgs], format: "utf-8", parser(stdOut, stdErr) { const merge = parseMergeResult(stdOut, stdErr); if (merge.failed) { throw new GitResponseError(merge); } return merge; } }; } var init_merge = __esm({ "src/lib/tasks/merge.ts"() { init_git_response_error(); init_parse_merge(); init_task(); } }); function pushResultPushedItem(local, remote, status) { const deleted = status.includes("deleted"); const tag = status.includes("tag") || /^refs\/tags/.test(local); const alreadyUpdated = !status.includes("new"); return { deleted, tag, branch: !tag, new: !alreadyUpdated, alreadyUpdated, local, remote }; } var parsers5; var parsePushResult; var parsePushDetail; var init_parse_push = __esm({ "src/lib/parsers/parse-push.ts"() { init_utils(); init_parse_remote_messages(); parsers5 = [ new LineParser(/^Pushing to (.+)$/, (result, [repo]) => { result.repo = repo; }), new LineParser(/^updating local tracking ref '(.+)'/, (result, [local]) => { result.ref = __spreadProps(__spreadValues({}, result.ref || {}), { local }); }), new LineParser(/^[=*-]\s+([^:]+):(\S+)\s+\[(.+)]$/, (result, [local, remote, type]) => { result.pushed.push(pushResultPushedItem(local, remote, type)); }), new LineParser(/^Branch '([^']+)' set up to track remote branch '([^']+)' from '([^']+)'/, (result, [local, remote, remoteName]) => { result.branch = __spreadProps(__spreadValues({}, result.branch || {}), { local, remote, remoteName }); }), new LineParser(/^([^:]+):(\S+)\s+([a-z0-9]+)\.\.([a-z0-9]+)$/, (result, [local, remote, from, to]) => { result.update = { head: { local, remote }, hash: { from, to } }; }) ]; parsePushResult = (stdOut, stdErr) => { const pushDetail = parsePushDetail(stdOut, stdErr); const responseDetail = parseRemoteMessages(stdOut, stdErr); return __spreadValues(__spreadValues({}, pushDetail), responseDetail); }; parsePushDetail = (stdOut, stdErr) => { return parseStringResponse({ pushed: [] }, parsers5, [stdOut, stdErr]); }; } }); var push_exports = {}; __export2(push_exports, { pushTagsTask: () => pushTagsTask, pushTask: () => pushTask }); function pushTagsTask(ref = {}, customArgs) { append(customArgs, "--tags"); return pushTask(ref, customArgs); } function pushTask(ref = {}, customArgs) { const commands = ["push", ...customArgs]; if (ref.branch) { commands.splice(1, 0, ref.branch); } if (ref.remote) { commands.splice(1, 0, ref.remote); } remove(commands, "-v"); append(commands, "--verbose"); append(commands, "--porcelain"); return { commands, format: "utf-8", parser: parsePushResult }; } var init_push = __esm({ "src/lib/tasks/push.ts"() { init_parse_push(); init_utils(); } }); var fromPathRegex; var FileStatusSummary; var init_FileStatusSummary = __esm({ "src/lib/responses/FileStatusSummary.ts"() { fromPathRegex = /^(.+) -> (.+)$/; FileStatusSummary = class { constructor(path, index, working_dir) { this.path = path; this.index = index; this.working_dir = working_dir; if (index + working_dir === "R") { const detail = fromPathRegex.exec(path) || [null, path, path]; this.from = detail[1] || ""; this.path = detail[2] || ""; } } }; } }); function renamedFile(line) { const [to, from] = line.split(NULL); return { from: from || to, to }; } function parser2(indexX, indexY, handler) { return [`${indexX}${indexY}`, handler]; } function conflicts(indexX, ...indexY) { return indexY.map((y) => parser2(indexX, y, (result, file) => append(result.conflicted, file))); } function splitLine(result, lineStr) { const trimmed2 = lineStr.trim(); switch (" ") { case trimmed2.charAt(2): return data(trimmed2.charAt(0), trimmed2.charAt(1), trimmed2.substr(3)); case trimmed2.charAt(1): return data(" ", trimmed2.charAt(0), trimmed2.substr(2)); default: return; } function data(index, workingDir, path) { const raw = `${index}${workingDir}`; const handler = parsers6.get(raw); if (handler) { handler(result, path); } if (raw !== "##" && raw !== "!!") { result.files.push(new FileStatusSummary(path.replace(/\0.+$/, ""), index, workingDir)); } } } var StatusSummary; var parsers6; var parseStatusSummary; var init_StatusSummary = __esm({ "src/lib/responses/StatusSummary.ts"() { init_utils(); init_FileStatusSummary(); StatusSummary = class { constructor() { this.not_added = []; this.conflicted = []; this.created = []; this.deleted = []; this.ignored = void 0; this.modified = []; this.renamed = []; this.files = []; this.staged = []; this.ahead = 0; this.behind = 0; this.current = null; this.tracking = null; this.detached = false; this.isClean = () => { return !this.files.length; }; } }; parsers6 = new Map([ parser2(" ", "A", (result, file) => append(result.created, file)), parser2(" ", "D", (result, file) => append(result.deleted, file)), parser2(" ", "M", (result, file) => append(result.modified, file)), parser2("A", " ", (result, file) => append(result.created, file) && append(result.staged, file)), parser2("A", "M", (result, file) => append(result.created, file) && append(result.staged, file) && append(result.modified, file)), parser2("D", " ", (result, file) => append(result.deleted, file) && append(result.staged, file)), parser2("M", " ", (result, file) => append(result.modified, file) && append(result.staged, file)), parser2("M", "M", (result, file) => append(result.modified, file) && append(result.staged, file)), parser2("R", " ", (result, file) => { append(result.renamed, renamedFile(file)); }), parser2("R", "M", (result, file) => { const renamed = renamedFile(file); append(result.renamed, renamed); append(result.modified, renamed.to); }), parser2("!", "!", (_result, _file) => { append(_result.ignored = _result.ignored || [], _file); }), parser2("?", "?", (result, file) => append(result.not_added, file)), ...conflicts( "A", "A", "U" /* UNMERGED */ ), ...conflicts( "D", "D", "U" /* UNMERGED */ ), ...conflicts( "U", "A", "D", "U" /* UNMERGED */ ), [ "##", (result, line) => { const aheadReg = /ahead (\d+)/; const behindReg = /behind (\d+)/; const currentReg = /^(.+?(?=(?:\.{3}|\s|$)))/; const trackingReg = /\.{3}(\S*)/; const onEmptyBranchReg = /\son\s([\S]+)$/; let regexResult; regexResult = aheadReg.exec(line); result.ahead = regexResult && +regexResult[1] || 0; regexResult = behindReg.exec(line); result.behind = regexResult && +regexResult[1] || 0; regexResult = currentReg.exec(line); result.current = regexResult && regexResult[1]; regexResult = trackingReg.exec(line); result.tracking = regexResult && regexResult[1]; regexResult = onEmptyBranchReg.exec(line); result.current = regexResult && regexResult[1] || result.current; result.detached = /\(no branch\)/.test(line); } ] ]); parseStatusSummary = function(text) { const lines = text.split(NULL); const status = new StatusSummary(); for (let i = 0, l = lines.length; i < l; ) { let line = lines[i++].trim(); if (!line) { continue; } if (line.charAt(0) === "R") { line += NULL + (lines[i++] || ""); } splitLine(status, line); } return status; }; } }); function statusTask(customArgs) { const commands = [ "status", "--porcelain", "-b", "-u", "--null", ...customArgs.filter((arg) => !ignoredOptions.includes(arg)) ]; return { format: "utf-8", commands, parser(text) { return parseStatusSummary(text); } }; } var ignoredOptions; var init_status = __esm({ "src/lib/tasks/status.ts"() { init_StatusSummary(); ignoredOptions = ["--null", "-z"]; } }); function versionResponse(major = 0, minor = 0, patch = 0, agent = "", installed = true) { return Object.defineProperty({ major, minor, patch, agent, installed }, "toString", { value() { return `${this.major}.${this.minor}.${this.patch}`; }, configurable: false, enumerable: false }); } function notInstalledResponse() { return versionResponse(0, 0, 0, "", false); } function version_default() { return { version() { return this._runTask({ commands: ["--version"], format: "utf-8", parser: versionParser, onError(result, error, done, fail) { if (result.exitCode === -2) { return done(Buffer.from(NOT_INSTALLED)); } fail(error); } }); } }; } function versionParser(stdOut) { if (stdOut === NOT_INSTALLED) { return notInstalledResponse(); } return parseStringResponse(versionResponse(0, 0, 0, stdOut), parsers7, stdOut); } var NOT_INSTALLED; var parsers7; var init_version = __esm({ "src/lib/tasks/version.ts"() { init_utils(); NOT_INSTALLED = "installed=false"; parsers7 = [ new LineParser(/version (\d+)\.(\d+)\.(\d+)(?:\s*\((.+)\))?/, (result, [major, minor, patch, agent = ""]) => { Object.assign(result, versionResponse(asNumber(major), asNumber(minor), asNumber(patch), agent)); }), new LineParser(/version (\d+)\.(\d+)\.(\D+)(.+)?$/, (result, [major, minor, patch, agent = ""]) => { Object.assign(result, versionResponse(asNumber(major), asNumber(minor), patch, agent)); }) ]; } }); var simple_git_api_exports = {}; __export2(simple_git_api_exports, { SimpleGitApi: () => SimpleGitApi }); var SimpleGitApi; var init_simple_git_api = __esm({ "src/lib/simple-git-api.ts"() { init_task_callback(); init_change_working_directory(); init_checkout(); init_commit(); init_config(); init_grep(); init_hash_object(); init_init(); init_log(); init_merge(); init_push(); init_status(); init_task(); init_version(); init_utils(); SimpleGitApi = class { constructor(_executor) { this._executor = _executor; } _runTask(task, then) { const chain = this._executor.chain(); const promise = chain.push(task); if (then) { taskCallback(task, promise, then); } return Object.create(this, { then: { value: promise.then.bind(promise) }, catch: { value: promise.catch.bind(promise) }, _executor: { value: chain } }); } add(files) { return this._runTask(straightThroughStringTask(["add", ...asArray(files)]), trailingFunctionArgument(arguments)); } cwd(directory) { const next = trailingFunctionArgument(arguments); if (typeof directory === "string") { return this._runTask(changeWorkingDirectoryTask(directory, this._executor), next); } if (typeof (directory == null ? void 0 : directory.path) === "string") { return this._runTask(changeWorkingDirectoryTask(directory.path, directory.root && this._executor || void 0), next); } return this._runTask(configurationErrorTask("Git.cwd: workingDirectory must be supplied as a string"), next); } hashObject(path, write) { return this._runTask(hashObjectTask(path, write === true), trailingFunctionArgument(arguments)); } init(bare) { return this._runTask(initTask(bare === true, this._executor.cwd, getTrailingOptions(arguments)), trailingFunctionArgument(arguments)); } merge() { return this._runTask(mergeTask(getTrailingOptions(arguments)), trailingFunctionArgument(arguments)); } mergeFromTo(remote, branch) { if (!(filterString(remote) && filterString(branch))) { return this._runTask(configurationErrorTask(`Git.mergeFromTo requires that the 'remote' and 'branch' arguments are supplied as strings`)); } return this._runTask(mergeTask([remote, branch, ...getTrailingOptions(arguments)]), trailingFunctionArgument(arguments, false)); } outputHandler(handler) { this._executor.outputHandler = handler; return this; } push() { const task = pushTask({ remote: filterType(arguments[0], filterString), branch: filterType(arguments[1], filterString) }, getTrailingOptions(arguments)); return this._runTask(task, trailingFunctionArgument(arguments)); } stash() { return this._runTask(straightThroughStringTask(["stash", ...getTrailingOptions(arguments)]), trailingFunctionArgument(arguments)); } status() { return this._runTask(statusTask(getTrailingOptions(arguments)), trailingFunctionArgument(arguments)); } }; Object.assign(SimpleGitApi.prototype, checkout_default(), commit_default(), config_default(), grep_default(), log_default(), version_default()); } }); var scheduler_exports = {}; __export2(scheduler_exports, { Scheduler: () => Scheduler }); var createScheduledTask; var Scheduler; var init_scheduler = __esm({ "src/lib/runners/scheduler.ts"() { init_utils(); init_git_logger(); createScheduledTask = (() => { let id = 0; return () => { id++; const { promise, done } = (0, import_promise_deferred.createDeferred)(); return { promise, done, id }; }; })(); Scheduler = class { constructor(concurrency = 2) { this.concurrency = concurrency; this.logger = createLogger("", "scheduler"); this.pending = []; this.running = []; this.logger(`Constructed, concurrency=%s`, concurrency); } schedule() { if (!this.pending.length || this.running.length >= this.concurrency) { this.logger(`Schedule attempt ignored, pending=%s running=%s concurrency=%s`, this.pending.length, this.running.length, this.concurrency); return; } const task = append(this.running, this.pending.shift()); this.logger(`Attempting id=%s`, task.id); task.done(() => { this.logger(`Completing id=`, task.id); remove(this.running, task); this.schedule(); }); } next() { const { promise, id } = append(this.pending, createScheduledTask()); this.logger(`Scheduling id=%s`, id); this.schedule(); return promise; } }; } }); var apply_patch_exports = {}; __export2(apply_patch_exports, { applyPatchTask: () => applyPatchTask }); function applyPatchTask(patches, customArgs) { return straightThroughStringTask(["apply", ...customArgs, ...patches]); } var init_apply_patch = __esm({ "src/lib/tasks/apply-patch.ts"() { init_task(); } }); function branchDeletionSuccess(branch, hash) { return { branch, hash, success: true }; } function branchDeletionFailure(branch) { return { branch, hash: null, success: false }; } var BranchDeletionBatch; var init_BranchDeleteSummary = __esm({ "src/lib/responses/BranchDeleteSummary.ts"() { BranchDeletionBatch = class { constructor() { this.all = []; this.branches = {}; this.errors = []; } get success() { return !this.errors.length; } }; } }); function hasBranchDeletionError(data, processExitCode) { return processExitCode === 1 && deleteErrorRegex.test(data); } var deleteSuccessRegex; var deleteErrorRegex; var parsers8; var parseBranchDeletions; var init_parse_branch_delete = __esm({ "src/lib/parsers/parse-branch-delete.ts"() { init_BranchDeleteSummary(); init_utils(); deleteSuccessRegex = /(\S+)\s+\(\S+\s([^)]+)\)/; deleteErrorRegex = /^error[^']+'([^']+)'/m; parsers8 = [ new LineParser(deleteSuccessRegex, (result, [branch, hash]) => { const deletion = branchDeletionSuccess(branch, hash); result.all.push(deletion); result.branches[branch] = deletion; }), new LineParser(deleteErrorRegex, (result, [branch]) => { const deletion = branchDeletionFailure(branch); result.errors.push(deletion); result.all.push(deletion); result.branches[branch] = deletion; }) ]; parseBranchDeletions = (stdOut, stdErr) => { return parseStringResponse(new BranchDeletionBatch(), parsers8, [stdOut, stdErr]); }; } }); var BranchSummaryResult; var init_BranchSummary = __esm({ "src/lib/responses/BranchSummary.ts"() { BranchSummaryResult = class { constructor() { this.all = []; this.branches = {}; this.current = ""; this.detached = false; } push(status, detached, name, commit, label) { if (status === "*") { this.detached = detached; this.current = name; } this.all.push(name); this.branches[name] = { current: status === "*", linkedWorkTree: status === "+", name, commit, label }; } }; } }); function branchStatus(input) { return input ? input.charAt(0) : ""; } function parseBranchSummary(stdOut) { return parseStringResponse(new BranchSummaryResult(), parsers9, stdOut); } var parsers9; var init_parse_branch = __esm({ "src/lib/parsers/parse-branch.ts"() { init_BranchSummary(); init_utils(); parsers9 = [ new LineParser(/^([*+]\s)?\((?:HEAD )?detached (?:from|at) (\S+)\)\s+([a-z0-9]+)\s(.*)$/, (result, [current, name, commit, label]) => { result.push(branchStatus(current), true, name, commit, label); }), new LineParser(/^([*+]\s)?(\S+)\s+([a-z0-9]+)\s?(.*)$/s, (result, [current, name, commit, label]) => { result.push(branchStatus(current), false, name, commit, label); }) ]; } }); var branch_exports = {}; __export2(branch_exports, { branchLocalTask: () => branchLocalTask, branchTask: () => branchTask, containsDeleteBranchCommand: () => containsDeleteBranchCommand, deleteBranchTask: () => deleteBranchTask, deleteBranchesTask: () => deleteBranchesTask }); function containsDeleteBranchCommand(commands) { const deleteCommands = ["-d", "-D", "--delete"]; return commands.some((command) => deleteCommands.includes(command)); } function branchTask(customArgs) { const isDelete = containsDeleteBranchCommand(customArgs); const commands = ["branch", ...customArgs]; if (commands.length === 1) { commands.push("-a"); } if (!commands.includes("-v")) { commands.splice(1, 0, "-v"); } return { format: "utf-8", commands, parser(stdOut, stdErr) { if (isDelete) { return parseBranchDeletions(stdOut, stdErr).all[0]; } return parseBranchSummary(stdOut); } }; } function branchLocalTask() { const parser3 = parseBranchSummary; return { format: "utf-8", commands: ["branch", "-v"], parser: parser3 }; } function deleteBranchesTask(branches, forceDelete = false) { return { format: "utf-8", commands: ["branch", "-v", forceDelete ? "-D" : "-d", ...branches], parser(stdOut, stdErr) { return parseBranchDeletions(stdOut, stdErr); }, onError({ exitCode, stdOut }, error, done, fail) { if (!hasBranchDeletionError(String(error), exitCode)) { return fail(error); } done(stdOut); } }; } function deleteBranchTask(branch, forceDelete = false) { const task = { format: "utf-8", commands: ["branch", "-v", forceDelete ? "-D" : "-d", branch], parser(stdOut, stdErr) { return parseBranchDeletions(stdOut, stdErr).branches[branch]; }, onError({ exitCode, stdErr, stdOut }, error, _, fail) { if (!hasBranchDeletionError(String(error), exitCode)) { return fail(error); } throw new GitResponseError(task.parser(bufferToString(stdOut), bufferToString(stdErr)), String(error)); } }; return task; } var init_branch = __esm({ "src/lib/tasks/branch.ts"() { init_git_response_error(); init_parse_branch_delete(); init_parse_branch(); init_utils(); } }); var parseCheckIgnore; var init_CheckIgnore = __esm({ "src/lib/responses/CheckIgnore.ts"() { parseCheckIgnore = (text) => { return text.split(/\n/g).map((line) => line.trim()).filter((file) => !!file); }; } }); var check_ignore_exports = {}; __export2(check_ignore_exports, { checkIgnoreTask: () => checkIgnoreTask }); function checkIgnoreTask(paths) { return { commands: ["check-ignore", ...paths], format: "utf-8", parser: parseCheckIgnore }; } var init_check_ignore = __esm({ "src/lib/tasks/check-ignore.ts"() { init_CheckIgnore(); } }); var clone_exports = {}; __export2(clone_exports, { cloneMirrorTask: () => cloneMirrorTask, cloneTask: () => cloneTask }); function disallowedCommand(command) { return /^--upload-pack(=|$)/.test(command); } function cloneTask(repo, directory, customArgs) { const commands = ["clone", ...customArgs]; filterString(repo) && commands.push(repo); filterString(directory) && commands.push(directory); const banned = commands.find(disallowedCommand); if (banned) { return configurationErrorTask(`git.fetch: potential exploit argument blocked.`); } return straightThroughStringTask(commands); } function cloneMirrorTask(repo, directory, customArgs) { append(customArgs, "--mirror"); return cloneTask(repo, directory, customArgs); } var init_clone = __esm({ "src/lib/tasks/clone.ts"() { init_task(); init_utils(); } }); function parseFetchResult(stdOut, stdErr) { const result = { raw: stdOut, remote: null, branches: [], tags: [], updated: [], deleted: [] }; return parseStringResponse(result, parsers10, [stdOut, stdErr]); } var parsers10; var init_parse_fetch = __esm({ "src/lib/parsers/parse-fetch.ts"() { init_utils(); parsers10 = [ new LineParser(/From (.+)$/, (result, [remote]) => { result.remote = remote; }), new LineParser(/\* \[new branch]\s+(\S+)\s*-> (.+)$/, (result, [name, tracking]) => { result.branches.push({ name, tracking }); }), new LineParser(/\* \[new tag]\s+(\S+)\s*-> (.+)$/, (result, [name, tracking]) => { result.tags.push({ name, tracking }); }), new LineParser(/- \[deleted]\s+\S+\s*-> (.+)$/, (result, [tracking]) => { result.deleted.push({ tracking }); }), new LineParser(/\s*([^.]+)\.\.(\S+)\s+(\S+)\s*-> (.+)$/, (result, [from, to, name, tracking]) => { result.updated.push({ name, tracking, to, from }); }) ]; } }); var fetch_exports = {}; __export2(fetch_exports, { fetchTask: () => fetchTask }); function disallowedCommand2(command) { return /^--upload-pack(=|$)/.test(command); } function fetchTask(remote, branch, customArgs) { const commands = ["fetch", ...customArgs]; if (remote && branch) { commands.push(remote, branch); } const banned = commands.find(disallowedCommand2); if (banned) { return configurationErrorTask(`git.fetch: potential exploit argument blocked.`); } return { commands, format: "utf-8", parser: parseFetchResult }; } var init_fetch = __esm({ "src/lib/tasks/fetch.ts"() { init_parse_fetch(); init_task(); } }); function parseMoveResult(stdOut) { return parseStringResponse({ moves: [] }, parsers11, stdOut); } var parsers11; var init_parse_move = __esm({ "src/lib/parsers/parse-move.ts"() { init_utils(); parsers11 = [ new LineParser(/^Renaming (.+) to (.+)$/, (result, [from, to]) => { result.moves.push({ from, to }); }) ]; } }); var move_exports = {}; __export2(move_exports, { moveTask: () => moveTask }); function moveTask(from, to) { return { commands: ["mv", "-v", ...asArray(from), to], format: "utf-8", parser: parseMoveResult }; } var init_move = __esm({ "src/lib/tasks/move.ts"() { init_parse_move(); init_utils(); } }); var pull_exports = {}; __export2(pull_exports, { pullTask: () => pullTask }); function pullTask(remote, branch, customArgs) { const commands = ["pull", ...customArgs]; if (remote && branch) { commands.splice(1, 0, remote, branch); } return { commands, format: "utf-8", parser(stdOut, stdErr) { return parsePullResult(stdOut, stdErr); }, onError(result, _error, _done, fail) { const pullError = parsePullErrorResult(bufferToString(result.stdOut), bufferToString(result.stdErr)); if (pullError) { return fail(new GitResponseError(pullError)); } fail(_error); } }; } var init_pull = __esm({ "src/lib/tasks/pull.ts"() { init_git_response_error(); init_parse_pull(); init_utils(); } }); function parseGetRemotes(text) { const remotes = {}; forEach(text, ([name]) => remotes[name] = { name }); return Object.values(remotes); } function parseGetRemotesVerbose(text) { const remotes = {}; forEach(text, ([name, url, purpose]) => { if (!remotes.hasOwnProperty(name)) { remotes[name] = { name, refs: { fetch: "", push: "" } }; } if (purpose && url) { remotes[name].refs[purpose.replace(/[^a-z]/g, "")] = url; } }); return Object.values(remotes); } function forEach(text, handler) { forEachLineWithContent(text, (line) => handler(line.split(/\s+/))); } var init_GetRemoteSummary = __esm({ "src/lib/responses/GetRemoteSummary.ts"() { init_utils(); } }); var remote_exports = {}; __export2(remote_exports, { addRemoteTask: () => addRemoteTask, getRemotesTask: () => getRemotesTask, listRemotesTask: () => listRemotesTask, remoteTask: () => remoteTask, removeRemoteTask: () => removeRemoteTask }); function addRemoteTask(remoteName, remoteRepo, customArgs = []) { return straightThroughStringTask(["remote", "add", ...customArgs, remoteName, remoteRepo]); } function getRemotesTask(verbose) { const commands = ["remote"]; if (verbose) { commands.push("-v"); } return { commands, format: "utf-8", parser: verbose ? parseGetRemotesVerbose : parseGetRemotes }; } function listRemotesTask(customArgs = []) { const commands = [...customArgs]; if (commands[0] !== "ls-remote") { commands.unshift("ls-remote"); } return straightThroughStringTask(commands); } function remoteTask(customArgs = []) { const commands = [...customArgs]; if (commands[0] !== "remote") { commands.unshift("remote"); } return straightThroughStringTask(commands); } function removeRemoteTask(remoteName) { return straightThroughStringTask(["remote", "remove", remoteName]); } var init_remote = __esm({ "src/lib/tasks/remote.ts"() { init_GetRemoteSummary(); init_task(); } }); var stash_list_exports = {}; __export2(stash_list_exports, { stashListTask: () => stashListTask }); function stashListTask(opt = {}, customArgs) { const options = parseLogOptions(opt); const commands = ["stash", "list", ...options.commands, ...customArgs]; const parser3 = createListLogSummaryParser(options.splitter, options.fields, logFormatFromCommand(commands)); return validateLogFormatConfig(commands) || { commands, format: "utf-8", parser: parser3 }; } var init_stash_list = __esm({ "src/lib/tasks/stash-list.ts"() { init_log_format(); init_parse_list_log_summary(); init_diff(); init_log(); } }); var sub_module_exports = {}; __export2(sub_module_exports, { addSubModuleTask: () => addSubModuleTask, initSubModuleTask: () => initSubModuleTask, subModuleTask: () => subModuleTask, updateSubModuleTask: () => updateSubModuleTask }); function addSubModuleTask(repo, path) { return subModuleTask(["add", repo, path]); } function initSubModuleTask(customArgs) { return subModuleTask(["init", ...customArgs]); } function subModuleTask(customArgs) { const commands = [...customArgs]; if (commands[0] !== "submodule") { commands.unshift("submodule"); } return straightThroughStringTask(commands); } function updateSubModuleTask(customArgs) { return subModuleTask(["update", ...customArgs]); } var init_sub_module = __esm({ "src/lib/tasks/sub-module.ts"() { init_task(); } }); function singleSorted(a, b) { const aIsNum = isNaN(a); const bIsNum = isNaN(b); if (aIsNum !== bIsNum) { return aIsNum ? 1 : -1; } return aIsNum ? sorted(a, b) : 0; } function sorted(a, b) { return a === b ? 0 : a > b ? 1 : -1; } function trimmed(input) { return input.trim(); } function toNumber(input) { if (typeof input === "string") { return parseInt(input.replace(/^\D+/g, ""), 10) || 0; } return 0; } var TagList; var parseTagList; var init_TagList = __esm({ "src/lib/responses/TagList.ts"() { TagList = class { constructor(all, latest) { this.all = all; this.latest = latest; } }; parseTagList = function(data, customSort = false) { const tags = data.split("\n").map(trimmed).filter(Boolean); if (!customSort) { tags.sort(function(tagA, tagB) { const partsA = tagA.split("."); const partsB = tagB.split("."); if (partsA.length === 1 || partsB.length === 1) { return singleSorted(toNumber(partsA[0]), toNumber(partsB[0])); } for (let i = 0, l = Math.max(partsA.length, partsB.length); i < l; i++) { const diff2 = sorted(toNumber(partsA[i]), toNumber(partsB[i])); if (diff2) { return diff2; } } return 0; }); } const latest = customSort ? tags[0] : [...tags].reverse().find((tag) => tag.indexOf(".") >= 0); return new TagList(tags, latest); }; } }); var tag_exports = {}; __export2(tag_exports, { addAnnotatedTagTask: () => addAnnotatedTagTask, addTagTask: () => addTagTask, tagListTask: () => tagListTask }); function tagListTask(customArgs = []) { const hasCustomSort = customArgs.some((option) => /^--sort=/.test(option)); return { format: "utf-8", commands: ["tag", "-l", ...customArgs], parser(text) { return parseTagList(text, hasCustomSort); } }; } function addTagTask(name) { return { format: "utf-8", commands: ["tag", name], parser() { return { name }; } }; } function addAnnotatedTagTask(name, tagMessage) { return { format: "utf-8", commands: ["tag", "-a", "-m", tagMessage, name], parser() { return { name }; } }; } var init_tag = __esm({ "src/lib/tasks/tag.ts"() { init_TagList(); } }); var require_git = __commonJS2({ "src/git.js"(exports, module2) { var { GitExecutor: GitExecutor2 } = (init_git_executor(), __toCommonJS2(git_executor_exports)); var { SimpleGitApi: SimpleGitApi2 } = (init_simple_git_api(), __toCommonJS2(simple_git_api_exports)); var { Scheduler: Scheduler2 } = (init_scheduler(), __toCommonJS2(scheduler_exports)); var { configurationErrorTask: configurationErrorTask2 } = (init_task(), __toCommonJS2(task_exports)); var { asArray: asArray2, filterArray: filterArray2, filterPrimitives: filterPrimitives2, filterString: filterString2, filterStringOrStringArray: filterStringOrStringArray2, filterType: filterType2, getTrailingOptions: getTrailingOptions2, trailingFunctionArgument: trailingFunctionArgument2, trailingOptionsArgument: trailingOptionsArgument2 } = (init_utils(), __toCommonJS2(utils_exports)); var { applyPatchTask: applyPatchTask2 } = (init_apply_patch(), __toCommonJS2(apply_patch_exports)); var { branchTask: branchTask2, branchLocalTask: branchLocalTask2, deleteBranchesTask: deleteBranchesTask2, deleteBranchTask: deleteBranchTask2 } = (init_branch(), __toCommonJS2(branch_exports)); var { checkIgnoreTask: checkIgnoreTask2 } = (init_check_ignore(), __toCommonJS2(check_ignore_exports)); var { checkIsRepoTask: checkIsRepoTask2 } = (init_check_is_repo(), __toCommonJS2(check_is_repo_exports)); var { cloneTask: cloneTask2, cloneMirrorTask: cloneMirrorTask2 } = (init_clone(), __toCommonJS2(clone_exports)); var { cleanWithOptionsTask: cleanWithOptionsTask2, isCleanOptionsArray: isCleanOptionsArray2 } = (init_clean(), __toCommonJS2(clean_exports)); var { diffSummaryTask: diffSummaryTask2 } = (init_diff(), __toCommonJS2(diff_exports)); var { fetchTask: fetchTask2 } = (init_fetch(), __toCommonJS2(fetch_exports)); var { moveTask: moveTask2 } = (init_move(), __toCommonJS2(move_exports)); var { pullTask: pullTask2 } = (init_pull(), __toCommonJS2(pull_exports)); var { pushTagsTask: pushTagsTask2 } = (init_push(), __toCommonJS2(push_exports)); var { addRemoteTask: addRemoteTask2, getRemotesTask: getRemotesTask2, listRemotesTask: listRemotesTask2, remoteTask: remoteTask2, removeRemoteTask: removeRemoteTask2 } = (init_remote(), __toCommonJS2(remote_exports)); var { getResetMode: getResetMode2, resetTask: resetTask2 } = (init_reset(), __toCommonJS2(reset_exports)); var { stashListTask: stashListTask2 } = (init_stash_list(), __toCommonJS2(stash_list_exports)); var { addSubModuleTask: addSubModuleTask2, initSubModuleTask: initSubModuleTask2, subModuleTask: subModuleTask2, updateSubModuleTask: updateSubModuleTask2 } = (init_sub_module(), __toCommonJS2(sub_module_exports)); var { addAnnotatedTagTask: addAnnotatedTagTask2, addTagTask: addTagTask2, tagListTask: tagListTask2 } = (init_tag(), __toCommonJS2(tag_exports)); var { straightThroughBufferTask: straightThroughBufferTask2, straightThroughStringTask: straightThroughStringTask2 } = (init_task(), __toCommonJS2(task_exports)); function Git2(options, plugins) { this._executor = new GitExecutor2(options.binary, options.baseDir, new Scheduler2(options.maxConcurrentProcesses), plugins); this._trimmed = options.trimmed; } (Git2.prototype = Object.create(SimpleGitApi2.prototype)).constructor = Git2; Git2.prototype.customBinary = function(command) { this._executor.binary = command; return this; }; Git2.prototype.env = function(name, value) { if (arguments.length === 1 && typeof name === "object") { this._executor.env = name; } else { (this._executor.env = this._executor.env || {})[name] = value; } return this; }; Git2.prototype.stashList = function(options) { return this._runTask(stashListTask2(trailingOptionsArgument2(arguments) || {}, filterArray2(options) && options || []), trailingFunctionArgument2(arguments)); }; function createCloneTask(api, task, repoPath, localPath) { if (typeof repoPath !== "string") { return configurationErrorTask2(`git.${api}() requires a string 'repoPath'`); } return task(repoPath, filterType2(localPath, filterString2), getTrailingOptions2(arguments)); } Git2.prototype.clone = function() { return this._runTask(createCloneTask("clone", cloneTask2, ...arguments), trailingFunctionArgument2(arguments)); }; Git2.prototype.mirror = function() { return this._runTask(createCloneTask("mirror", cloneMirrorTask2, ...arguments), trailingFunctionArgument2(arguments)); }; Git2.prototype.mv = function(from, to) { return this._runTask(moveTask2(from, to), trailingFunctionArgument2(arguments)); }; Git2.prototype.checkoutLatestTag = function(then) { var git = this; return this.pull(function() { git.tags(function(err, tags) { git.checkout(tags.latest, then); }); }); }; Git2.prototype.pull = function(remote, branch, options, then) { return this._runTask(pullTask2(filterType2(remote, filterString2), filterType2(branch, filterString2), getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); }; Git2.prototype.fetch = function(remote, branch) { return this._runTask(fetchTask2(filterType2(remote, filterString2), filterType2(branch, filterString2), getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); }; Git2.prototype.silent = function(silence) { console.warn("simple-git deprecation notice: git.silent: logging should be configured using the `debug` library / `DEBUG` environment variable, this will be an error in version 3"); return this; }; Git2.prototype.tags = function(options, then) { return this._runTask(tagListTask2(getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); }; Git2.prototype.rebase = function() { return this._runTask(straightThroughStringTask2(["rebase", ...getTrailingOptions2(arguments)]), trailingFunctionArgument2(arguments)); }; Git2.prototype.reset = function(mode) { return this._runTask(resetTask2(getResetMode2(mode), getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); }; Git2.prototype.revert = function(commit) { const next = trailingFunctionArgument2(arguments); if (typeof commit !== "string") { return this._runTask(configurationErrorTask2("Commit must be a string"), next); } return this._runTask(straightThroughStringTask2(["revert", ...getTrailingOptions2(arguments, 0, true), commit]), next); }; Git2.prototype.addTag = function(name) { const task = typeof name === "string" ? addTagTask2(name) : configurationErrorTask2("Git.addTag requires a tag name"); return this._runTask(task, trailingFunctionArgument2(arguments)); }; Git2.prototype.addAnnotatedTag = function(tagName, tagMessage) { return this._runTask(addAnnotatedTagTask2(tagName, tagMessage), trailingFunctionArgument2(arguments)); }; Git2.prototype.deleteLocalBranch = function(branchName, forceDelete, then) { return this._runTask(deleteBranchTask2(branchName, typeof forceDelete === "boolean" ? forceDelete : false), trailingFunctionArgument2(arguments)); }; Git2.prototype.deleteLocalBranches = function(branchNames, forceDelete, then) { return this._runTask(deleteBranchesTask2(branchNames, typeof forceDelete === "boolean" ? forceDelete : false), trailingFunctionArgument2(arguments)); }; Git2.prototype.branch = function(options, then) { return this._runTask(branchTask2(getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); }; Git2.prototype.branchLocal = function(then) { return this._runTask(branchLocalTask2(), trailingFunctionArgument2(arguments)); }; Git2.prototype.raw = function(commands) { const createRestCommands = !Array.isArray(commands); const command = [].slice.call(createRestCommands ? arguments : commands, 0); for (let i = 0; i < command.length && createRestCommands; i++) { if (!filterPrimitives2(command[i])) { command.splice(i, command.length - i); break; } } command.push(...getTrailingOptions2(arguments, 0, true)); var next = trailingFunctionArgument2(arguments); if (!command.length) { return this._runTask(configurationErrorTask2("Raw: must supply one or more command to execute"), next); } return this._runTask(straightThroughStringTask2(command, this._trimmed), next); }; Git2.prototype.submoduleAdd = function(repo, path, then) { return this._runTask(addSubModuleTask2(repo, path), trailingFunctionArgument2(arguments)); }; Git2.prototype.submoduleUpdate = function(args, then) { return this._runTask(updateSubModuleTask2(getTrailingOptions2(arguments, true)), trailingFunctionArgument2(arguments)); }; Git2.prototype.submoduleInit = function(args, then) { return this._runTask(initSubModuleTask2(getTrailingOptions2(arguments, true)), trailingFunctionArgument2(arguments)); }; Git2.prototype.subModule = function(options, then) { return this._runTask(subModuleTask2(getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); }; Git2.prototype.listRemote = function() { return this._runTask(listRemotesTask2(getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); }; Git2.prototype.addRemote = function(remoteName, remoteRepo, then) { return this._runTask(addRemoteTask2(remoteName, remoteRepo, getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); }; Git2.prototype.removeRemote = function(remoteName, then) { return this._runTask(removeRemoteTask2(remoteName), trailingFunctionArgument2(arguments)); }; Git2.prototype.getRemotes = function(verbose, then) { return this._runTask(getRemotesTask2(verbose === true), trailingFunctionArgument2(arguments)); }; Git2.prototype.remote = function(options, then) { return this._runTask(remoteTask2(getTrailingOptions2(arguments)), trailingFunctionArgument2(arguments)); }; Git2.prototype.tag = function(options, then) { const command = getTrailingOptions2(arguments); if (command[0] !== "tag") { command.unshift("tag"); } return this._runTask(straightThroughStringTask2(command), trailingFunctionArgument2(arguments)); }; Git2.prototype.updateServerInfo = function(then) { return this._runTask(straightThroughStringTask2(["update-server-info"]), trailingFunctionArgument2(arguments)); }; Git2.prototype.pushTags = function(remote, then) { const task = pushTagsTask2({ remote: filterType2(remote, filterString2) }, getTrailingOptions2(arguments)); return this._runTask(task, trailingFunctionArgument2(arguments)); }; Git2.prototype.rm = function(files) { return this._runTask(straightThroughStringTask2(["rm", "-f", ...asArray2(files)]), trailingFunctionArgument2(arguments)); }; Git2.prototype.rmKeepLocal = function(files) { return this._runTask(straightThroughStringTask2(["rm", "--cached", ...asArray2(files)]), trailingFunctionArgument2(arguments)); }; Git2.prototype.catFile = function(options, then) { return this._catFile("utf-8", arguments); }; Git2.prototype.binaryCatFile = function() { return this._catFile("buffer", arguments); }; Git2.prototype._catFile = function(format, args) { var handler = trailingFunctionArgument2(args); var command = ["cat-file"]; var options = args[0]; if (typeof options === "string") { return this._runTask(configurationErrorTask2("Git.catFile: options must be supplied as an array of strings"), handler); } if (Array.isArray(options)) { command.push.apply(command, options); } const task = format === "buffer" ? straightThroughBufferTask2(command) : straightThroughStringTask2(command); return this._runTask(task, handler); }; Git2.prototype.diff = function(options, then) { const task = filterString2(options) ? configurationErrorTask2("git.diff: supplying options as a single string is no longer supported, switch to an array of strings") : straightThroughStringTask2(["diff", ...getTrailingOptions2(arguments)]); return this._runTask(task, trailingFunctionArgument2(arguments)); }; Git2.prototype.diffSummary = function() { return this._runTask(diffSummaryTask2(getTrailingOptions2(arguments, 1)), trailingFunctionArgument2(arguments)); }; Git2.prototype.applyPatch = function(patches) { const task = !filterStringOrStringArray2(patches) ? configurationErrorTask2(`git.applyPatch requires one or more string patches as the first argument`) : applyPatchTask2(asArray2(patches), getTrailingOptions2([].slice.call(arguments, 1))); return this._runTask(task, trailingFunctionArgument2(arguments)); }; Git2.prototype.revparse = function() { const commands = ["rev-parse", ...getTrailingOptions2(arguments, true)]; return this._runTask(straightThroughStringTask2(commands, true), trailingFunctionArgument2(arguments)); }; Git2.prototype.show = function(options, then) { return this._runTask(straightThroughStringTask2(["show", ...getTrailingOptions2(arguments, 1)]), trailingFunctionArgument2(arguments)); }; Git2.prototype.clean = function(mode, options, then) { const usingCleanOptionsArray = isCleanOptionsArray2(mode); const cleanMode = usingCleanOptionsArray && mode.join("") || filterType2(mode, filterString2) || ""; const customArgs = getTrailingOptions2([].slice.call(arguments, usingCleanOptionsArray ? 1 : 0)); return this._runTask(cleanWithOptionsTask2(cleanMode, customArgs), trailingFunctionArgument2(arguments)); }; Git2.prototype.exec = function(then) { const task = { commands: [], format: "utf-8", parser() { if (typeof then === "function") { then(); } } }; return this._runTask(task); }; Git2.prototype.clearQueue = function() { return this; }; Git2.prototype.checkIgnore = function(pathnames, then) { return this._runTask(checkIgnoreTask2(asArray2(filterType2(pathnames, filterStringOrStringArray2, []))), trailingFunctionArgument2(arguments)); }; Git2.prototype.checkIsRepo = function(checkType, then) { return this._runTask(checkIsRepoTask2(filterType2(checkType, filterString2)), trailingFunctionArgument2(arguments)); }; module2.exports = Git2; } }); init_git_error(); var GitConstructError = class extends GitError { constructor(config, message) { super(void 0, message); this.config = config; } }; init_git_error(); init_git_error(); var GitPluginError = class extends GitError { constructor(task, plugin, message) { super(task, message); this.task = task; this.plugin = plugin; Object.setPrototypeOf(this, new.target.prototype); } }; init_git_response_error(); init_task_configuration_error(); init_check_is_repo(); init_clean(); init_config(); init_grep(); init_reset(); function abortPlugin(signal) { if (!signal) { return; } const onSpawnAfter = { type: "spawn.after", action(_data, context) { function kill() { context.kill(new GitPluginError(void 0, "abort", "Abort signal received")); } signal.addEventListener("abort", kill); context.spawned.on("close", () => signal.removeEventListener("abort", kill)); } }; const onSpawnBefore = { type: "spawn.before", action(_data, context) { if (signal.aborted) { context.kill(new GitPluginError(void 0, "abort", "Abort already signaled")); } } }; return [onSpawnBefore, onSpawnAfter]; } function isConfigSwitch(arg) { return typeof arg === "string" && arg.trim().toLowerCase() === "-c"; } function preventProtocolOverride(arg, next) { if (!isConfigSwitch(arg)) { return; } if (!/^\s*protocol(.[a-z]+)?.allow/.test(next)) { return; } throw new GitPluginError(void 0, "unsafe", "Configuring protocol.allow is not permitted without enabling allowUnsafeExtProtocol"); } function preventUploadPack(arg, method) { if (/^\s*--(upload|receive)-pack/.test(arg)) { throw new GitPluginError(void 0, "unsafe", `Use of --upload-pack or --receive-pack is not permitted without enabling allowUnsafePack`); } if (method === "clone" && /^\s*-u\b/.test(arg)) { throw new GitPluginError(void 0, "unsafe", `Use of clone with option -u is not permitted without enabling allowUnsafePack`); } if (method === "push" && /^\s*--exec\b/.test(arg)) { throw new GitPluginError(void 0, "unsafe", `Use of push with option --exec is not permitted without enabling allowUnsafePack`); } } function blockUnsafeOperationsPlugin({ allowUnsafeProtocolOverride = false, allowUnsafePack = false } = {}) { return { type: "spawn.args", action(args, context) { args.forEach((current, index) => { const next = index < args.length ? args[index + 1] : ""; allowUnsafeProtocolOverride || preventProtocolOverride(current, next); allowUnsafePack || preventUploadPack(current, context.method); }); return args; } }; } init_utils(); function commandConfigPrefixingPlugin(configuration) { const prefix = prefixedArray(configuration, "-c"); return { type: "spawn.args", action(data) { return [...prefix, ...data]; } }; } init_utils(); var never = (0, import_promise_deferred2.deferred)().promise; function completionDetectionPlugin({ onClose = true, onExit = 50 } = {}) { function createEvents() { let exitCode = -1; const events = { close: (0, import_promise_deferred2.deferred)(), closeTimeout: (0, import_promise_deferred2.deferred)(), exit: (0, import_promise_deferred2.deferred)(), exitTimeout: (0, import_promise_deferred2.deferred)() }; const result = Promise.race([ onClose === false ? never : events.closeTimeout.promise, onExit === false ? never : events.exitTimeout.promise ]); configureTimeout(onClose, events.close, events.closeTimeout); configureTimeout(onExit, events.exit, events.exitTimeout); return { close(code) { exitCode = code; events.close.done(); }, exit(code) { exitCode = code; events.exit.done(); }, get exitCode() { return exitCode; }, result }; } function configureTimeout(flag, event, timeout) { if (flag === false) { return; } (flag === true ? event.promise : event.promise.then(() => delay(flag))).then(timeout.done); } return { type: "spawn.after", action(_0, _1) { return __async(this, arguments, function* (_data, { spawned, close }) { var _a2, _b; const events = createEvents(); let deferClose = true; let quickClose = () => void (deferClose = false); (_a2 = spawned.stdout) == null ? void 0 : _a2.on("data", quickClose); (_b = spawned.stderr) == null ? void 0 : _b.on("data", quickClose); spawned.on("error", quickClose); spawned.on("close", (code) => events.close(code)); spawned.on("exit", (code) => events.exit(code)); try { yield events.result; if (deferClose) { yield delay(50); } close(events.exitCode); } catch (err) { close(events.exitCode, err); } }); } }; } init_git_error(); function isTaskError(result) { return !!(result.exitCode && result.stdErr.length); } function getErrorMessage(result) { return Buffer.concat([...result.stdOut, ...result.stdErr]); } function errorDetectionHandler(overwrite = false, isError = isTaskError, errorMessage = getErrorMessage) { return (error, result) => { if (!overwrite && error || !isError(result)) { return error; } return errorMessage(result); }; } function errorDetectionPlugin(config) { return { type: "task.error", action(data, context) { const error = config(data.error, { stdErr: context.stdErr, stdOut: context.stdOut, exitCode: context.exitCode }); if (Buffer.isBuffer(error)) { return { error: new GitError(void 0, error.toString("utf-8")) }; } return { error }; } }; } init_utils(); var PluginStore = class { constructor() { this.plugins = /* @__PURE__ */ new Set(); } add(plugin) { const plugins = []; asArray(plugin).forEach((plugin2) => plugin2 && this.plugins.add(append(plugins, plugin2))); return () => { plugins.forEach((plugin2) => this.plugins.delete(plugin2)); }; } exec(type, data, context) { let output = data; const contextual = Object.freeze(Object.create(context)); for (const plugin of this.plugins) { if (plugin.type === type) { output = plugin.action(output, contextual); } } return output; } }; init_utils(); function progressMonitorPlugin(progress) { const progressCommand = "--progress"; const progressMethods = ["checkout", "clone", "fetch", "pull", "push"]; const onProgress = { type: "spawn.after", action(_data, context) { var _a2; if (!context.commands.includes(progressCommand)) { return; } (_a2 = context.spawned.stderr) == null ? void 0 : _a2.on("data", (chunk) => { const message = /^([\s\S]+?):\s*(\d+)% \((\d+)\/(\d+)\)/.exec(chunk.toString("utf8")); if (!message) { return; } progress({ method: context.method, stage: progressEventStage(message[1]), progress: asNumber(message[2]), processed: asNumber(message[3]), total: asNumber(message[4]) }); }); } }; const onArgs = { type: "spawn.args", action(args, context) { if (!progressMethods.includes(context.method)) { return args; } return including(args, progressCommand); } }; return [onArgs, onProgress]; } function progressEventStage(input) { return String(input.toLowerCase().split(" ", 1)) || "unknown"; } init_utils(); function spawnOptionsPlugin(spawnOptions) { const options = pick(spawnOptions, ["uid", "gid"]); return { type: "spawn.options", action(data) { return __spreadValues(__spreadValues({}, options), data); } }; } function timeoutPlugin({ block, stdErr = true, stdOut = true }) { if (block > 0) { return { type: "spawn.after", action(_data, context) { var _a2, _b; let timeout; function wait() { timeout && clearTimeout(timeout); timeout = setTimeout(kill, block); } function stop() { var _a3, _b2; (_a3 = context.spawned.stdout) == null ? void 0 : _a3.off("data", wait); (_b2 = context.spawned.stderr) == null ? void 0 : _b2.off("data", wait); context.spawned.off("exit", stop); context.spawned.off("close", stop); timeout && clearTimeout(timeout); } function kill() { stop(); context.kill(new GitPluginError(void 0, "timeout", `block timeout reached`)); } stdOut && ((_a2 = context.spawned.stdout) == null ? void 0 : _a2.on("data", wait)); stdErr && ((_b = context.spawned.stderr) == null ? void 0 : _b.on("data", wait)); context.spawned.on("exit", stop); context.spawned.on("close", stop); wait(); } }; } } init_utils(); var Git = require_git(); function gitInstanceFactory(baseDir, options) { const plugins = new PluginStore(); const config = createInstanceConfig(baseDir && (typeof baseDir === "string" ? { baseDir } : baseDir) || {}, options); if (!folderExists(config.baseDir)) { throw new GitConstructError(config, `Cannot use simple-git on a directory that does not exist`); } if (Array.isArray(config.config)) { plugins.add(commandConfigPrefixingPlugin(config.config)); } plugins.add(blockUnsafeOperationsPlugin(config.unsafe)); plugins.add(completionDetectionPlugin(config.completion)); config.abort && plugins.add(abortPlugin(config.abort)); config.progress && plugins.add(progressMonitorPlugin(config.progress)); config.timeout && plugins.add(timeoutPlugin(config.timeout)); config.spawnOptions && plugins.add(spawnOptionsPlugin(config.spawnOptions)); plugins.add(errorDetectionPlugin(errorDetectionHandler(true))); config.errors && plugins.add(errorDetectionPlugin(config.errors)); return new Git(config, plugins); } init_git_response_error(); var simpleGit = gitInstanceFactory; // src/utils.ts function createDailyDiffConfig() { return { dates: { from: getDefaultFrom(), to: getDefaultTo() } }; } function getDefaultFrom() { return (0, import_obsidian.moment)().subtract(1, "day").format("YYYY-MM-DD"); } function getDefaultTo() { return (0, import_obsidian.moment)().format("YYYY-MM-DD"); } function createDailyDiffCodeBlock() { const yaml = (0, import_obsidian.stringifyYaml)(createDailyDiffConfig()).trimEnd(); return `\`\`\`show-diff ${yaml} \`\`\``; } function getDateRange(from, to) { return `HEAD@{${from}}..HEAD@{${to}}`; } function getDefaultDateRange() { return getDateRange(getDefaultFrom(), getDefaultTo()); } function getCommitRange(from, to) { return `${from}..${to}`; } function excludePath(string) { return `:(exclude)${string}`; } function createRevisionRange(commits, dates) { if (commits) { const { from, to } = commits; (0, import_typed_assert.isString)(from, "Commits must have a `from` string property"); (0, import_typed_assert.isString)(to, "Commits must have a `to` string property"); return getCommitRange(from, to); } if (dates) { const { from, to = getDefaultTo() } = dates; (0, import_typed_assert.isNotUndefined)(from, "Dates must have a `from` property"); return getDateRange(from, to); } return getDefaultDateRange(); } function createExcludedPaths(exclude) { if (Array.isArray(exclude)) { return exclude.map((path) => excludePath(path)).join(" "); } return excludePath(exclude); } function gitDiff(config) { const revisionRange = createRevisionRange(config.commits, config.dates); const excludedPaths = createExcludedPaths(config.exclude || ".obsidian"); const args = [revisionRange, "--", excludedPaths]; return simpleGit(config.path).diff(args); } // icons/file-text.svg var file_text_default = '\n \n \n \n \n \n\n'; // icons/file-plus.svg var file_plus_default = '\n \n \n \n \n\n'; // icons/file-diff.svg var file_diff_default = ''; // icons/file-signature.svg var file_signature_default = ''; // icons/file-x.svg var file_x_default = ''; // icons/plus.svg var plus_default = ''; // icons/diff.svg var diff_default = ''; // icons/trash-2.svg var trash_2_default = ''; // src/main.ts var rawTemplates = { "icon-file": file_text_default, "icon-file-added": file_plus_default, "icon-file-changed": file_diff_default, "icon-file-deleted": file_x_default, "icon-file-renamed": file_signature_default, "tag-file-added": plus_default, "tag-file-changed": diff_default, "tag-file-deleted": trash_2_default, "tag-file-renamed": file_signature_default }; var RenderDiffPlugin = class extends import_obsidian2.Plugin { constructor() { super(...arguments); this.diffProcessor = async (rawConfig, el) => { try { const config = { path: this.getVaultPath(), ...(0, import_obsidian2.parseYaml)(rawConfig) }; const diff2 = await gitDiff(config); if (!diff2.trim()) { el.createEl("p", { text: "No changes" }); } const fragment = (0, import_obsidian2.sanitizeHTMLToDom)( html(parse2(diff2), { drawFileList: false, rawTemplates }) ); el.append(fragment); } catch (e) { el.createEl("pre", { text: e }); } }; } async onload() { this.registerMarkdownCodeBlockProcessor( "show-diff", this.diffProcessor ); this.addCommand({ id: "generate-diff-for-today", name: "Generate diff code block for today", editorCallback: (editor) => { editor.replaceSelection(createDailyDiffCodeBlock()); } }); } onunload() { } getVaultPath() { return this.app.vault.adapter.getBasePath(); } }; /* nosourcemap */