Materialpool-Entwicklung/.obsidian/plugins/yet-another-obsidian-synchronizer/main.js

5671 lines
177 KiB
JavaScript

"use strict";
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 __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
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 key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __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);
var __publicField = (obj, key, value) => {
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
return value;
};
// node_modules/dayjs/dayjs.min.js
var require_dayjs_min = __commonJS({
"node_modules/dayjs/dayjs.min.js"(exports, module2) {
!function(t, e) {
"object" == typeof exports && "undefined" != typeof module2 ? module2.exports = e() : "function" == typeof define && define.amd ? define(e) : (t = "undefined" != typeof globalThis ? globalThis : t || self).dayjs = e();
}(exports, function() {
"use strict";
var t = 1e3, e = 6e4, n = 36e5, r = "millisecond", i = "second", s = "minute", u = "hour", a = "day", o = "week", c = "month", f = "quarter", h = "year", d = "date", l = "Invalid Date", $ = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/, y = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g, M = { name: "en", weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), ordinal: function(t2) {
var e2 = ["th", "st", "nd", "rd"], n2 = t2 % 100;
return "[" + t2 + (e2[(n2 - 20) % 10] || e2[n2] || e2[0]) + "]";
} }, m = function(t2, e2, n2) {
var r2 = String(t2);
return !r2 || r2.length >= e2 ? t2 : "" + Array(e2 + 1 - r2.length).join(n2) + t2;
}, v = { s: m, z: function(t2) {
var e2 = -t2.utcOffset(), n2 = Math.abs(e2), r2 = Math.floor(n2 / 60), i2 = n2 % 60;
return (e2 <= 0 ? "+" : "-") + m(r2, 2, "0") + ":" + m(i2, 2, "0");
}, m: function t2(e2, n2) {
if (e2.date() < n2.date())
return -t2(n2, e2);
var r2 = 12 * (n2.year() - e2.year()) + (n2.month() - e2.month()), i2 = e2.clone().add(r2, c), s2 = n2 - i2 < 0, u2 = e2.clone().add(r2 + (s2 ? -1 : 1), c);
return +(-(r2 + (n2 - i2) / (s2 ? i2 - u2 : u2 - i2)) || 0);
}, a: function(t2) {
return t2 < 0 ? Math.ceil(t2) || 0 : Math.floor(t2);
}, p: function(t2) {
return { M: c, y: h, w: o, d: a, D: d, h: u, m: s, s: i, ms: r, Q: f }[t2] || String(t2 || "").toLowerCase().replace(/s$/, "");
}, u: function(t2) {
return void 0 === t2;
} }, g = "en", D = {};
D[g] = M;
var p = function(t2) {
return t2 instanceof b;
}, S = function t2(e2, n2, r2) {
var i2;
if (!e2)
return g;
if ("string" == typeof e2) {
var s2 = e2.toLowerCase();
D[s2] && (i2 = s2), n2 && (D[s2] = n2, i2 = s2);
var u2 = e2.split("-");
if (!i2 && u2.length > 1)
return t2(u2[0]);
} else {
var a2 = e2.name;
D[a2] = e2, i2 = a2;
}
return !r2 && i2 && (g = i2), i2 || !r2 && g;
}, w = function(t2, e2) {
if (p(t2))
return t2.clone();
var n2 = "object" == typeof e2 ? e2 : {};
return n2.date = t2, n2.args = arguments, new b(n2);
}, O = v;
O.l = S, O.i = p, O.w = function(t2, e2) {
return w(t2, { locale: e2.$L, utc: e2.$u, x: e2.$x, $offset: e2.$offset });
};
var b = function() {
function M2(t2) {
this.$L = S(t2.locale, null, true), this.parse(t2);
}
var m2 = M2.prototype;
return m2.parse = function(t2) {
this.$d = function(t3) {
var e2 = t3.date, n2 = t3.utc;
if (null === e2)
return /* @__PURE__ */ new Date(NaN);
if (O.u(e2))
return /* @__PURE__ */ new Date();
if (e2 instanceof Date)
return new Date(e2);
if ("string" == typeof e2 && !/Z$/i.test(e2)) {
var r2 = e2.match($);
if (r2) {
var i2 = r2[2] - 1 || 0, s2 = (r2[7] || "0").substring(0, 3);
return n2 ? new Date(Date.UTC(r2[1], i2, r2[3] || 1, r2[4] || 0, r2[5] || 0, r2[6] || 0, s2)) : new Date(r2[1], i2, r2[3] || 1, r2[4] || 0, r2[5] || 0, r2[6] || 0, s2);
}
}
return new Date(e2);
}(t2), this.$x = t2.x || {}, this.init();
}, m2.init = function() {
var t2 = this.$d;
this.$y = t2.getFullYear(), this.$M = t2.getMonth(), this.$D = t2.getDate(), this.$W = t2.getDay(), this.$H = t2.getHours(), this.$m = t2.getMinutes(), this.$s = t2.getSeconds(), this.$ms = t2.getMilliseconds();
}, m2.$utils = function() {
return O;
}, m2.isValid = function() {
return !(this.$d.toString() === l);
}, m2.isSame = function(t2, e2) {
var n2 = w(t2);
return this.startOf(e2) <= n2 && n2 <= this.endOf(e2);
}, m2.isAfter = function(t2, e2) {
return w(t2) < this.startOf(e2);
}, m2.isBefore = function(t2, e2) {
return this.endOf(e2) < w(t2);
}, m2.$g = function(t2, e2, n2) {
return O.u(t2) ? this[e2] : this.set(n2, t2);
}, m2.unix = function() {
return Math.floor(this.valueOf() / 1e3);
}, m2.valueOf = function() {
return this.$d.getTime();
}, m2.startOf = function(t2, e2) {
var n2 = this, r2 = !!O.u(e2) || e2, f2 = O.p(t2), l2 = function(t3, e3) {
var i2 = O.w(n2.$u ? Date.UTC(n2.$y, e3, t3) : new Date(n2.$y, e3, t3), n2);
return r2 ? i2 : i2.endOf(a);
}, $2 = function(t3, e3) {
return O.w(n2.toDate()[t3].apply(n2.toDate("s"), (r2 ? [0, 0, 0, 0] : [23, 59, 59, 999]).slice(e3)), n2);
}, y2 = this.$W, M3 = this.$M, m3 = this.$D, v2 = "set" + (this.$u ? "UTC" : "");
switch (f2) {
case h:
return r2 ? l2(1, 0) : l2(31, 11);
case c:
return r2 ? l2(1, M3) : l2(0, M3 + 1);
case o:
var g2 = this.$locale().weekStart || 0, D2 = (y2 < g2 ? y2 + 7 : y2) - g2;
return l2(r2 ? m3 - D2 : m3 + (6 - D2), M3);
case a:
case d:
return $2(v2 + "Hours", 0);
case u:
return $2(v2 + "Minutes", 1);
case s:
return $2(v2 + "Seconds", 2);
case i:
return $2(v2 + "Milliseconds", 3);
default:
return this.clone();
}
}, m2.endOf = function(t2) {
return this.startOf(t2, false);
}, m2.$set = function(t2, e2) {
var n2, o2 = O.p(t2), f2 = "set" + (this.$u ? "UTC" : ""), l2 = (n2 = {}, n2[a] = f2 + "Date", n2[d] = f2 + "Date", n2[c] = f2 + "Month", n2[h] = f2 + "FullYear", n2[u] = f2 + "Hours", n2[s] = f2 + "Minutes", n2[i] = f2 + "Seconds", n2[r] = f2 + "Milliseconds", n2)[o2], $2 = o2 === a ? this.$D + (e2 - this.$W) : e2;
if (o2 === c || o2 === h) {
var y2 = this.clone().set(d, 1);
y2.$d[l2]($2), y2.init(), this.$d = y2.set(d, Math.min(this.$D, y2.daysInMonth())).$d;
} else
l2 && this.$d[l2]($2);
return this.init(), this;
}, m2.set = function(t2, e2) {
return this.clone().$set(t2, e2);
}, m2.get = function(t2) {
return this[O.p(t2)]();
}, m2.add = function(r2, f2) {
var d2, l2 = this;
r2 = Number(r2);
var $2 = O.p(f2), y2 = function(t2) {
var e2 = w(l2);
return O.w(e2.date(e2.date() + Math.round(t2 * r2)), l2);
};
if ($2 === c)
return this.set(c, this.$M + r2);
if ($2 === h)
return this.set(h, this.$y + r2);
if ($2 === a)
return y2(1);
if ($2 === o)
return y2(7);
var M3 = (d2 = {}, d2[s] = e, d2[u] = n, d2[i] = t, d2)[$2] || 1, m3 = this.$d.getTime() + r2 * M3;
return O.w(m3, this);
}, m2.subtract = function(t2, e2) {
return this.add(-1 * t2, e2);
}, m2.format = function(t2) {
var e2 = this, n2 = this.$locale();
if (!this.isValid())
return n2.invalidDate || l;
var r2 = t2 || "YYYY-MM-DDTHH:mm:ssZ", i2 = O.z(this), s2 = this.$H, u2 = this.$m, a2 = this.$M, o2 = n2.weekdays, c2 = n2.months, f2 = n2.meridiem, h2 = function(t3, n3, i3, s3) {
return t3 && (t3[n3] || t3(e2, r2)) || i3[n3].slice(0, s3);
}, d2 = function(t3) {
return O.s(s2 % 12 || 12, t3, "0");
}, $2 = f2 || function(t3, e3, n3) {
var r3 = t3 < 12 ? "AM" : "PM";
return n3 ? r3.toLowerCase() : r3;
};
return r2.replace(y, function(t3, r3) {
return r3 || function(t4) {
switch (t4) {
case "YY":
return String(e2.$y).slice(-2);
case "YYYY":
return O.s(e2.$y, 4, "0");
case "M":
return a2 + 1;
case "MM":
return O.s(a2 + 1, 2, "0");
case "MMM":
return h2(n2.monthsShort, a2, c2, 3);
case "MMMM":
return h2(c2, a2);
case "D":
return e2.$D;
case "DD":
return O.s(e2.$D, 2, "0");
case "d":
return String(e2.$W);
case "dd":
return h2(n2.weekdaysMin, e2.$W, o2, 2);
case "ddd":
return h2(n2.weekdaysShort, e2.$W, o2, 3);
case "dddd":
return o2[e2.$W];
case "H":
return String(s2);
case "HH":
return O.s(s2, 2, "0");
case "h":
return d2(1);
case "hh":
return d2(2);
case "a":
return $2(s2, u2, true);
case "A":
return $2(s2, u2, false);
case "m":
return String(u2);
case "mm":
return O.s(u2, 2, "0");
case "s":
return String(e2.$s);
case "ss":
return O.s(e2.$s, 2, "0");
case "SSS":
return O.s(e2.$ms, 3, "0");
case "Z":
return i2;
}
return null;
}(t3) || i2.replace(":", "");
});
}, m2.utcOffset = function() {
return 15 * -Math.round(this.$d.getTimezoneOffset() / 15);
}, m2.diff = function(r2, d2, l2) {
var $2, y2 = this, M3 = O.p(d2), m3 = w(r2), v2 = (m3.utcOffset() - this.utcOffset()) * e, g2 = this - m3, D2 = function() {
return O.m(y2, m3);
};
switch (M3) {
case h:
$2 = D2() / 12;
break;
case c:
$2 = D2();
break;
case f:
$2 = D2() / 3;
break;
case o:
$2 = (g2 - v2) / 6048e5;
break;
case a:
$2 = (g2 - v2) / 864e5;
break;
case u:
$2 = g2 / n;
break;
case s:
$2 = g2 / e;
break;
case i:
$2 = g2 / t;
break;
default:
$2 = g2;
}
return l2 ? $2 : O.a($2);
}, m2.daysInMonth = function() {
return this.endOf(c).$D;
}, m2.$locale = function() {
return D[this.$L];
}, m2.locale = function(t2, e2) {
if (!t2)
return this.$L;
var n2 = this.clone(), r2 = S(t2, e2, true);
return r2 && (n2.$L = r2), n2;
}, m2.clone = function() {
return O.w(this.$d, this);
}, m2.toDate = function() {
return new Date(this.valueOf());
}, m2.toJSON = function() {
return this.isValid() ? this.toISOString() : null;
}, m2.toISOString = function() {
return this.$d.toISOString();
}, m2.toString = function() {
return this.$d.toUTCString();
}, M2;
}(), _ = b.prototype;
return w.prototype = _, [["$ms", r], ["$s", i], ["$m", s], ["$H", u], ["$W", a], ["$M", c], ["$y", h], ["$D", d]].forEach(function(t2) {
_[t2[1]] = function(e2) {
return this.$g(e2, t2[0], t2[1]);
};
}), w.extend = function(t2, e2) {
return t2.$i || (t2(e2, b, w), t2.$i = true), w;
}, w.locale = S, w.isDayjs = p, w.unix = function(t2) {
return w(1e3 * t2);
}, w.en = D[g], w.Ls = D, w.p = {}, w;
});
}
});
// 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 parse(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 parse(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((key) => {
createDebug[key] = env[key];
});
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 self2 = debug2;
const curr = Number(/* @__PURE__ */ new Date());
const ms = curr - (prevTime || curr);
self2.diff = ms;
self2.prev = prevTime;
self2.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(self2, val);
args.splice(index, 1);
index--;
}
return match;
});
createDebug.formatArgs.call(self2, args);
const logFn = self2.log || createDebug.log;
logFn.apply(self2, 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: () => YaosPlugin
});
module.exports = __toCommonJS(main_exports);
// src/utils/constants.ts
var PLUGIN_NAME = "YAOS";
// node_modules/consola/dist/core.mjs
var LogLevels = {
silent: Number.NEGATIVE_INFINITY,
fatal: 0,
error: 0,
warn: 1,
log: 2,
info: 3,
success: 3,
fail: 3,
ready: 3,
start: 3,
box: 3,
debug: 4,
trace: 5,
verbose: Number.POSITIVE_INFINITY
};
var LogTypes = {
// Silent
silent: {
level: -1
},
// Level 0
fatal: {
level: LogLevels.fatal
},
error: {
level: LogLevels.error
},
// Level 1
warn: {
level: LogLevels.warn
},
// Level 2
log: {
level: LogLevels.log
},
// Level 3
info: {
level: LogLevels.info
},
success: {
level: LogLevels.success
},
fail: {
level: LogLevels.fail
},
ready: {
level: LogLevels.info
},
start: {
level: LogLevels.info
},
box: {
level: LogLevels.info
},
// Level 4
debug: {
level: LogLevels.debug
},
// Level 5
trace: {
level: LogLevels.trace
},
// Verbose
verbose: {
level: LogLevels.verbose
}
};
function isObject(value) {
return value !== null && typeof value === "object";
}
function _defu(baseObject, defaults, namespace = ".", merger) {
if (!isObject(defaults)) {
return _defu(baseObject, {}, namespace, merger);
}
const object = Object.assign({}, defaults);
for (const key in baseObject) {
if (key === "__proto__" || key === "constructor") {
continue;
}
const value = baseObject[key];
if (value === null || value === void 0) {
continue;
}
if (merger && merger(object, key, value, namespace)) {
continue;
}
if (Array.isArray(value) && Array.isArray(object[key])) {
object[key] = [...value, ...object[key]];
} else if (isObject(value) && isObject(object[key])) {
object[key] = _defu(
value,
object[key],
(namespace ? `${namespace}.` : "") + key.toString(),
merger
);
} else {
object[key] = value;
}
}
return object;
}
function createDefu(merger) {
return (...arguments_) => (
// eslint-disable-next-line unicorn/no-array-reduce
arguments_.reduce((p, c) => _defu(p, c, "", merger), {})
);
}
var defu = createDefu();
function isPlainObject(obj) {
return Object.prototype.toString.call(obj) === "[object Object]";
}
function isLogObj(arg) {
if (!isPlainObject(arg)) {
return false;
}
if (!arg.message && !arg.args) {
return false;
}
if (arg.stack) {
return false;
}
return true;
}
var paused = false;
var queue = [];
var Consola = class _Consola {
constructor(options = {}) {
const types = options.types || LogTypes;
this.options = defu(
{
...options,
defaults: { ...options.defaults },
level: _normalizeLogLevel(options.level, types),
reporters: [...options.reporters || []]
},
{
types: LogTypes,
throttle: 1e3,
throttleMin: 5,
formatOptions: {
date: true,
colors: false,
compact: true
}
}
);
for (const type in types) {
const defaults = {
type,
...this.options.defaults,
...types[type]
};
this[type] = this._wrapLogFn(defaults);
this[type].raw = this._wrapLogFn(
defaults,
true
);
}
if (this.options.mockFn) {
this.mockTypes();
}
this._lastLog = {};
}
get level() {
return this.options.level;
}
set level(level) {
this.options.level = _normalizeLogLevel(
level,
this.options.types,
this.options.level
);
}
prompt(message, opts) {
if (!this.options.prompt) {
throw new Error("prompt is not supported!");
}
return this.options.prompt(message, opts);
}
create(options) {
const instance = new _Consola({
...this.options,
...options
});
if (this._mockFn) {
instance.mockTypes(this._mockFn);
}
return instance;
}
withDefaults(defaults) {
return this.create({
...this.options,
defaults: {
...this.options.defaults,
...defaults
}
});
}
withTag(tag) {
return this.withDefaults({
tag: this.options.defaults.tag ? this.options.defaults.tag + ":" + tag : tag
});
}
addReporter(reporter) {
this.options.reporters.push(reporter);
return this;
}
removeReporter(reporter) {
if (reporter) {
const i = this.options.reporters.indexOf(reporter);
if (i >= 0) {
return this.options.reporters.splice(i, 1);
}
} else {
this.options.reporters.splice(0);
}
return this;
}
setReporters(reporters) {
this.options.reporters = Array.isArray(reporters) ? reporters : [reporters];
return this;
}
wrapAll() {
this.wrapConsole();
this.wrapStd();
}
restoreAll() {
this.restoreConsole();
this.restoreStd();
}
wrapConsole() {
for (const type in this.options.types) {
if (!console["__" + type]) {
console["__" + type] = console[type];
}
console[type] = this[type].raw;
}
}
restoreConsole() {
for (const type in this.options.types) {
if (console["__" + type]) {
console[type] = console["__" + type];
delete console["__" + type];
}
}
}
wrapStd() {
this._wrapStream(this.options.stdout, "log");
this._wrapStream(this.options.stderr, "log");
}
_wrapStream(stream, type) {
if (!stream) {
return;
}
if (!stream.__write) {
stream.__write = stream.write;
}
stream.write = (data) => {
this[type].raw(String(data).trim());
};
}
restoreStd() {
this._restoreStream(this.options.stdout);
this._restoreStream(this.options.stderr);
}
_restoreStream(stream) {
if (!stream) {
return;
}
if (stream.__write) {
stream.write = stream.__write;
delete stream.__write;
}
}
pauseLogs() {
paused = true;
}
resumeLogs() {
paused = false;
const _queue = queue.splice(0);
for (const item of _queue) {
item[0]._logFn(item[1], item[2]);
}
}
mockTypes(mockFn) {
const _mockFn = mockFn || this.options.mockFn;
this._mockFn = _mockFn;
if (typeof _mockFn !== "function") {
return;
}
for (const type in this.options.types) {
this[type] = _mockFn(type, this.options.types[type]) || this[type];
this[type].raw = this[type];
}
}
_wrapLogFn(defaults, isRaw) {
return (...args) => {
if (paused) {
queue.push([this, defaults, args, isRaw]);
return;
}
return this._logFn(defaults, args, isRaw);
};
}
_logFn(defaults, args, isRaw) {
if ((defaults.level || 0) > this.level) {
return false;
}
const logObj = {
date: /* @__PURE__ */ new Date(),
args: [],
...defaults,
level: _normalizeLogLevel(defaults.level, this.options.types)
};
if (!isRaw && args.length === 1 && isLogObj(args[0])) {
Object.assign(logObj, args[0]);
} else {
logObj.args = [...args];
}
if (logObj.message) {
logObj.args.unshift(logObj.message);
delete logObj.message;
}
if (logObj.additional) {
if (!Array.isArray(logObj.additional)) {
logObj.additional = logObj.additional.split("\n");
}
logObj.args.push("\n" + logObj.additional.join("\n"));
delete logObj.additional;
}
logObj.type = typeof logObj.type === "string" ? logObj.type.toLowerCase() : "log";
logObj.tag = typeof logObj.tag === "string" ? logObj.tag : "";
const resolveLog = (newLog = false) => {
const repeated = (this._lastLog.count || 0) - this.options.throttleMin;
if (this._lastLog.object && repeated > 0) {
const args2 = [...this._lastLog.object.args];
if (repeated > 1) {
args2.push(`(repeated ${repeated} times)`);
}
this._log({ ...this._lastLog.object, args: args2 });
this._lastLog.count = 1;
}
if (newLog) {
this._lastLog.object = logObj;
this._log(logObj);
}
};
clearTimeout(this._lastLog.timeout);
const diffTime = this._lastLog.time && logObj.date ? logObj.date.getTime() - this._lastLog.time.getTime() : 0;
this._lastLog.time = logObj.date;
if (diffTime < this.options.throttle) {
try {
const serializedLog = JSON.stringify([
logObj.type,
logObj.tag,
logObj.args
]);
const isSameLog = this._lastLog.serialized === serializedLog;
this._lastLog.serialized = serializedLog;
if (isSameLog) {
this._lastLog.count = (this._lastLog.count || 0) + 1;
if (this._lastLog.count > this.options.throttleMin) {
this._lastLog.timeout = setTimeout(
resolveLog,
this.options.throttle
);
return;
}
}
} catch (e) {
}
}
resolveLog(true);
}
_log(logObj) {
for (const reporter of this.options.reporters) {
reporter.log(logObj, {
options: this.options
});
}
}
};
function _normalizeLogLevel(input, types = {}, defaultLevel = 3) {
if (input === void 0) {
return defaultLevel;
}
if (typeof input === "number") {
return input;
}
if (types[input] && types[input].level !== void 0) {
return types[input].level;
}
return defaultLevel;
}
Consola.prototype.add = Consola.prototype.addReporter;
Consola.prototype.remove = Consola.prototype.removeReporter;
Consola.prototype.clear = Consola.prototype.removeReporter;
Consola.prototype.withScope = Consola.prototype.withTag;
Consola.prototype.mock = Consola.prototype.mockTypes;
Consola.prototype.pause = Consola.prototype.pauseLogs;
Consola.prototype.resume = Consola.prototype.resumeLogs;
function createConsola(options = {}) {
return new Consola(options);
}
// node_modules/consola/dist/browser.mjs
var BrowserReporter = class {
constructor(options) {
this.options = { ...options };
this.defaultColor = "#7f8c8d";
this.levelColorMap = {
0: "#c0392b",
// Red
1: "#f39c12",
// Yellow
3: "#00BCD4"
// Cyan
};
this.typeColorMap = {
success: "#2ecc71"
// Green
};
}
_getLogFn(level) {
if (level < 1) {
return console.__error || console.error;
}
if (level === 1) {
return console.__warn || console.warn;
}
return console.__log || console.log;
}
log(logObj) {
const consoleLogFn = this._getLogFn(logObj.level);
const type = logObj.type === "log" ? "" : logObj.type;
const tag = logObj.tag || "";
const color = this.typeColorMap[logObj.type] || this.levelColorMap[logObj.level] || this.defaultColor;
const style = `
background: ${color};
border-radius: 0.5em;
color: white;
font-weight: bold;
padding: 2px 0.5em;
`;
const badge = `%c${[tag, type].filter(Boolean).join(":")}`;
if (typeof logObj.args[0] === "string") {
consoleLogFn(
`${badge}%c ${logObj.args[0]}`,
style,
// Empty string as style resets to default console style
"",
...logObj.args.slice(1)
);
} else {
consoleLogFn(badge, style, ...logObj.args);
}
}
};
function createConsola2(options = {}) {
const consola2 = createConsola({
reporters: options.reporters || [new BrowserReporter({})],
prompt(message, options2 = {}) {
if (options2.type === "confirm") {
return Promise.resolve(confirm(message));
}
return Promise.resolve(prompt(message));
},
...options
});
return consola2;
}
var consola = createConsola2();
// src/utils/logger.ts
var logger = consola.create({ level: LogLevels.debug }).withTag(PLUGIN_NAME);
var logger_default = logger;
// src/utils/notifier.ts
var import_obsidian = require("obsidian");
var notifyUserAboutFailure = (message) => new import_obsidian.Notice(`FATAL: ${message}`);
// src/controllers/syncController.ts
var import_obsidian2 = require("obsidian");
var SyncController = class {
constructor(gitService, gitignoreService) {
this.gitService = gitService;
this.gitignoreService = gitignoreService;
logger_default.debug("Initialized sync controller.");
}
async createVaultBackup() {
if (await this.gitService.unstagedChangesExist()) {
await this.handleUnstagedChanges();
} else {
logger_default.info("No changes in vault detected for backup.");
}
if (await this.gitService.isLocalAhead()) {
await this.handleLocalAhead();
}
}
async handleLocalAhead() {
try {
await this.gitService.gitPush();
this.notifyUserAboutBackup();
} catch (e) {
logger_default.warn("Remote and local have conflicting changes!");
logger_default.info("Starting rebase process...");
try {
await this.gitService.gitPullWithRebase();
await this.gitService.gitPush();
this.notifyUserAboutBackup();
logger_default.success("Created vault backup.");
} catch (e2) {
this.notifyUserAboutConflicts();
logger_default.error("Automatic rebasing failed.");
}
}
}
async handleUnstagedChanges() {
logger_default.info("Unstaged changes detected. Creating backup...");
await this.gitService.gitStageAll();
await this.gitService.gitCommit();
}
notifyUserAboutBackup() {
new import_obsidian2.Notice("Successfully backed up vault!");
}
notifyUserAboutConflicts() {
new import_obsidian2.Notice("Your local and remote repositories had conflicting changes.");
new import_obsidian2.Notice("Please fix the changes and then click the sync button again.");
}
async sync() {
if (await this.gitService.isRepo()) {
logger_default.debug("Vault is initialized as a Git repository.");
} else {
logger_default.fatal("Vault is not initialized as a Git repository.");
notifyUserAboutFailure("Vault is not a Git repository.");
return;
}
if (await this.gitService.isRemoteConfigured()) {
logger_default.debug("Remote repository is configured.");
} else {
logger_default.fatal("Remote repository is not configured.");
notifyUserAboutFailure("Remote repository is not configured.");
return;
}
if (await this.gitService.isRebasing()) {
logger_default.debug("Stopping in progress rebase.");
await this.gitService.stopRebasing();
}
await this.createVaultBackup();
}
};
// src/services/gitService.ts
var import_dayjs = __toESM(require_dayjs_min());
// 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 __defNormalProp2 = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp2.call(b, prop))
__defNormalProp2(a, prop, b[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b)) {
if (__propIsEnum.call(b, prop))
__defNormalProp2(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 key of __getOwnPropNames2(module2))
if (!__hasOwnProp2.call(target, key) && (copyDefault || key !== "default"))
__defProp2(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc2(module2, key)) || desc.enumerable });
}
return target;
};
var __toCommonJS2 = /* @__PURE__ */ ((cache2) => {
return (module2, temp) => {
return cache2 && cache2.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache2 && cache2.set(module2, temp), temp);
};
})(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
var __async = (__this, __arguments, generator) => {
return new Promise((resolve2, 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 ? resolve2(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
step((generator = generator.apply(__this, __arguments)).next());
});
};
function isPathSpec(path) {
return path instanceof String && cache.has(path);
}
function toPaths(pathSpec) {
return cache.get(pathSpec) || [];
}
var cache;
var init_pathspec = __esm({
"src/lib/args/pathspec.ts"() {
cache = /* @__PURE__ */ new WeakMap();
}
});
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, separator = "\n") {
return input.split(separator).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) {
const type = isPathSpec(input) ? "string" : typeof input;
return /number|string|boolean/.test(type) && (!omit || !omit.includes(type));
}
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();
init_pathspec();
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, key) => {
const value = options[key];
if (isPathSpec(value)) {
commands2.push(value);
} else if (filterPrimitives(value, ["boolean"])) {
commands2.push(key + "=" + value);
} else {
commands2.push(key);
}
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();
init_pathspec();
}
});
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 }) => parse(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, key) {
let value = null;
const values = [];
const scopes = /* @__PURE__ */ new Map();
for (const item of configParser(text, key)) {
if (item.key !== key) {
continue;
}
values.push(value = item.value);
if (!scopes.has(item.file)) {
scopes.set(item.file, []);
}
scopes.get(item.file).push(value);
}
return {
key,
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 key = requestedKey;
if (value.includes("\n")) {
const line = splitOn(value, "\n");
key = line[0];
value = line[1];
}
yield { file, key, 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, key, value) {
const values = this.addFile(file);
if (!values.hasOwnProperty(key)) {
values[key] = value;
} else if (Array.isArray(values[key])) {
values[key].push(value);
} else {
values[key] = [values[key], value];
}
this._all = void 0;
}
};
}
});
function asConfigScope(scope, fallback) {
if (typeof scope === "string" && GitConfigScope.hasOwnProperty(scope)) {
return scope;
}
return fallback;
}
function addConfigTask(key, value, append2, scope) {
const commands = ["config", `--${scope}`];
if (append2) {
commands.push("--add");
}
commands.push(key, value);
return {
commands,
format: "utf-8",
parser(text) {
return text;
}
};
}
function getConfigTask(key, scope) {
const commands = ["config", "--null", "--show-origin", "--get-all", key];
if (scope) {
commands.splice(1, 0, `--${scope}`);
}
return {
commands,
format: "utf-8",
parser(text) {
return configGetParser(text, key);
}
};
}
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(key, value, ...rest) {
return this._runTask(addConfigTask(key, value, rest[0] === true, asConfigScope(
rest[1],
"local"
/* local */
)), trailingFunctionArgument(arguments));
},
getConfig(key, scope) {
return this._runTask(getConfigTask(key, 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 key = childLoggerName(filterType(verbose, filterString), debugDebugger, infoDebugger);
return step(initialStep);
function sibling(name, initial) {
return append(spawned, createLogger(label, key.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 logger2 = createLogger(this.logLabel, name);
return {
task,
logger: logger2,
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: logger2 }] of Array.from(this._queue.entries())) {
if (task === err.task) {
logger2.info(`Failed %o`, err);
logger2(`Fatal exception, any as-yet un-started tasks run through this executor will not be attempted`);
} else {
logger2.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, logger2) {
return (err) => {
logger2(`[ERROR] child process exception %o`, err);
target.push(Buffer.from(String(err.stack), "ascii"));
};
}
function onDataReceived(target, name, logger2, output) {
return (buffer) => {
logger2(`%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: logger2 } = this._queue.attempt(task);
return yield isEmptyTask(task) ? this.attemptEmptyTask(task, logger2) : this.attemptRemoteTask(task, logger2);
} 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, logger2) {
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, logger2.step("SPAWN"));
const outputStreams = yield this.handleTaskData(task, args, raw, logger2.step("HANDLE"));
logger2(`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, logger2) {
return __async(this, null, function* () {
logger2(`empty task bypassing child process to call to task's parser`);
return task.parser(this);
});
}
handleTaskData(task, args, result, logger2) {
const { exitCode, rejection, stdOut, stdErr } = result;
return new Promise((done, fail) => {
logger2(`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) {
logger2.info(`exitCode=%s handling with custom error handler`);
return task.onError(result, error, (newStdOut) => {
logger2.info(`custom error handler treated as success`);
logger2(`custom error returned a %s`, objectToString(newStdOut));
done(new GitOutputStreams(Array.isArray(newStdOut) ? Buffer.concat(newStdOut) : newStdOut, Buffer.concat(stdErr)));
}, fail);
}
if (error) {
logger2.info(`handling as error: exitCode=%s stdErr=%s rejection=%o`, exitCode, stdErr.length, rejection);
return fail(error);
}
logger2.info(`retrieving task output complete`);
done(new GitOutputStreams(Buffer.concat(stdOut), Buffer.concat(stdErr)));
});
}
gitResponse(task, command, args, outputHandler, logger2) {
return __async(this, null, function* () {
const outputLogger = logger2.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 = [];
logger2.info(`%s %o`, command, args);
logger2("%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", logger2, outputLogger.step("stdOut")));
spawned.stderr.on("data", onDataReceived(stdErr, "stdErr", logger2, outputLogger.step("stdErr")));
spawned.on("error", onErrorReceived(stdErr, logger2));
if (outputHandler) {
logger2(`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, key) => {
if (!(key in excludeOptions)) {
out[key] = input[key];
}
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 key = action.toLowerCase();
const enumeration = objectEnumerationResult(result.remoteMessages);
Object.assign(enumeration, { [key]: asNumber(count) });
}),
new RemoteLineParser(/^remote:\s*(enumerating|counting|compressing) objects: \d+% \(\d+\/(\d+)\),/i, (result, [action, count]) => {
const key = action.toLowerCase();
const enumeration = objectEnumerationResult(result.remoteMessages);
Object.assign(enumeration, { [key]: 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();
}
});
function show_default() {
return {
showBuffer() {
const commands = ["show", ...getTrailingOptions(arguments, 1)];
if (!commands.includes("--binary")) {
commands.splice(1, 0, "--binary");
}
return this._runTask(straightThroughBufferTask(commands), trailingFunctionArgument(arguments));
},
show() {
const commands = ["show", ...getTrailingOptions(arguments, 1)];
return this._runTask(straightThroughStringTask(commands), trailingFunctionArgument(arguments));
}
};
}
var init_show = __esm({
"src/lib/tasks/show.ts"() {
init_utils();
init_task();
}
});
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_show();
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(), show_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 diff = sorted(toNumber(partsA[i]), toNumber(partsB[i]));
if (diff) {
return diff;
}
}
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.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_pathspec();
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_pathspec();
function suffixPathsPlugin() {
return {
type: "spawn.args",
action(data) {
const prefix = [];
let suffix;
function append2(args) {
(suffix = suffix || []).push(...args);
}
for (let i = 0; i < data.length; i++) {
const param = data[i];
if (isPathSpec(param)) {
append2(toPaths(param));
continue;
}
if (param === "--") {
append2(data.slice(i + 1).flatMap((item) => isPathSpec(item) && toPaths(item) || item));
break;
}
prefix.push(param);
}
return !suffix ? prefix : [...prefix, "--", ...suffix.map(String)];
}
};
}
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(suffixPathsPlugin());
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 esm_default = gitInstanceFactory;
// src/services/gitService.ts
var DEFAULT_REMOTE = "origin";
var DEFAULT_BRANCH = "main";
var CURRENT_TIME = () => (0, import_dayjs.default)().format("YYYY-MM-DDTHH:mm");
var COMMIT_MESSAGE = (deviceName) => `chore: vault backup from ${deviceName} at ${CURRENT_TIME()}`;
var SimpleGitService = class {
constructor(repoPath, settings) {
this.settings = settings;
__publicField(this, "gitProvider");
logger_default.debug("Initializing SimpleGitService...");
this.gitProvider = esm_default(repoPath);
logger_default.debug("SimpleGitService initialized.");
}
async gitCommit(message = COMMIT_MESSAGE(this.settings.deviceName)) {
logger_default.info(`Committing... ${message}`);
await this.gitProvider.commit(message);
}
async gitPullWithRebase() {
await this.gitProvider.pull(["--rebase"]);
}
async gitPush(forcePush = false) {
const options = forcePush ? ["-f"] : [];
await this.gitProvider.push(DEFAULT_REMOTE, DEFAULT_BRANCH, options);
logger_default.info(`Pushed changes to ${DEFAULT_REMOTE}/${DEFAULT_BRANCH}.`);
}
async gitStage(...files) {
await Promise.all(files.map((file) => this.gitProvider.add(file)));
}
async gitStageAll() {
await this.gitProvider.add("./*");
}
async isLocalAhead() {
return this.gitProvider.status().then((status) => status.ahead > 0);
}
async isRebasing() {
return this.gitProvider.raw(["status"]).then((status) => status.includes("rebase"));
}
async isRemoteConfigured() {
let remoteConfigured = false;
try {
const remotes = await this.gitProvider.listRemote(["--get-url"]);
remoteConfigured = !!remotes;
} catch (e) {
remoteConfigured = false;
}
return remoteConfigured;
}
async isRepo() {
return this.gitProvider.checkIsRepo();
}
async getConflictingFiles() {
return this.gitProvider.status().then((status) => status.conflicted);
}
async stopRebasing() {
process.env.GIT_EDITOR = "true";
await this.gitStageAll();
await this.gitProvider.rebase(["--continue"]);
await this.gitPush();
process.env.GIT_EDITOR = void 0;
}
async unstagedChangesExist() {
return this.gitProvider.status().then((status) => status.files.length > 0 || status.not_added.length > 0);
}
};
// src/services/gitignoreService.ts
var import_path = require("path");
var GITIGNORE_FILE_NAME = ".gitignore";
var GitignoreService = class {
constructor(basePath, gitService) {
this.gitService = gitService;
__publicField(this, "gitignorePath");
logger_default.debug("Initializing GitignoreService...");
this.gitignorePath = (0, import_path.resolve)(basePath, GITIGNORE_FILE_NAME);
logger_default.debug("GitignoreService initialized.");
}
async stageCommitAndPushGitignore(message) {
await this.gitService.gitStage(GITIGNORE_FILE_NAME);
await this.gitService.gitCommit(message);
await this.gitService.gitPush();
}
};
// src/views/modals/unmergedFilesView.ts
var import_obsidian3 = require("obsidian");
var UnmergedFilesView = class extends import_obsidian3.Modal {
constructor(app, gitService) {
super(app);
this.gitService = gitService;
}
onOpen() {
var _a2;
this.contentEl.empty();
this.contentEl.createEl("h3", {
text: "Loading...",
cls: "yaos-title"
});
(_a2 = this.gitService) == null ? void 0 : _a2.getConflictingFiles().then((files) => {
this.contentEl.empty();
if (files.length > 0) {
this.contentEl.createEl("h3", {
text: "Please resolve the conflicts in the following files:",
cls: "yaos-title"
});
const list = this.contentEl.createEl("ul");
files.forEach(
(file) => list.createEl("li").createEl("strong", { text: file, cls: "yaos-conflicting-files" })
);
} else {
this.contentEl.createEl("h3", {
text: "No unmerged files to show!",
cls: "yaos-title"
});
}
});
}
onClose() {
this.contentEl.empty();
}
};
// src/views/settingsTab.ts
var import_obsidian4 = require("obsidian");
var import_os = __toESM(require("os"));
var GITHUB_ISSUE_LINK = "https://github.com/mahyarmirrashed/yaos/issues/new/choose";
var DEFAULT_YAOS_SETTINGS = {
deviceName: import_os.default.hostname(),
syncImages: false,
syncAudio: false,
syncVideos: false,
syncPdfs: false,
syncOtherFiles: false,
syncMainSettings: false,
syncAppearanceSettings: false,
syncThemesAndSnippets: false,
syncHotkeys: false,
syncCorePluginSettings: false,
syncCommunityPluginSettings: false
};
var YaosSettingTab = class extends import_obsidian4.PluginSettingTab {
constructor(app, plugin) {
super(app, plugin);
__publicField(this, "plugin");
this.plugin = plugin;
}
display() {
const { containerEl } = this;
containerEl.empty();
this.addGeneralSection(containerEl);
}
addGeneralSection(el) {
el.createEl("h2", { text: "General" });
this.addDeviceNameSetting(el);
this.addCreateIssueSetting(el);
}
addSelectiveSection(el) {
el.createEl("h2", { text: "Selective sync" });
this.addToggleSetting(el, {
propertyName: "syncImages",
settingName: "Sync images",
settingDesc: "Sync image files with these extensions: bmp, png, jpg, jpeg, gif, svg, webp."
});
this.addToggleSetting(el, {
propertyName: "syncAudio",
settingName: "Sync audio",
settingDesc: "Sync audio files with these extensions: mp3, wav, m4a, 3gp, flac, ogg, oga, opus."
});
this.addToggleSetting(el, {
propertyName: "syncVideos",
settingName: "Sync videos",
settingDesc: "Sync video files with these extensions: mp4, webm, ogv, mov, mkv."
});
this.addToggleSetting(el, {
propertyName: "syncPdfs",
settingName: "Sync PDFs",
settingDesc: "Sync PDF files."
});
this.addToggleSetting(el, {
propertyName: "syncOtherFiles",
settingName: "Sync all other types",
settingDesc: "Sync unsupported file types."
});
}
addVaultSection(el) {
el.createEl("h2", { text: "Vault configuration sync" });
this.addDisabledToggleSetting(el, {
propertyName: "syncMainSettings",
settingName: "Sync main settings",
settingDesc: "Sync editor settings, files, link settings, and others."
});
this.addDisabledToggleSetting(el, {
propertyName: "syncAppearanceSettings",
settingName: "Sync appearance settings",
settingDesc: "Sync appearance settings like dark mode, active theme, and enabled snippets."
});
this.addDisabledToggleSetting(el, {
propertyName: "syncThemesAndSnippets",
settingName: "Sync themes and snippets",
settingDesc: "Sync downloaded themes and snippets. Whether they are enabled depends on the previous setting."
});
this.addDisabledToggleSetting(el, {
propertyName: "syncHotkeys",
settingName: "Sync hotkeys",
settingDesc: "Sync custom hotkeys."
});
this.addDisabledToggleSetting(el, {
propertyName: "syncCorePluginSettings",
settingName: "Sync core plugin settings",
settingDesc: "Sync core plugin settings."
});
this.addDisabledToggleSetting(el, {
propertyName: "syncCommunityPluginSettings",
settingName: "Sync community plugin settings",
settingDesc: "Sync core plugin settings."
});
}
addDeviceNameSetting(el) {
new import_obsidian4.Setting(el).setName("Device name").setDesc(
"This name will be displayed in the commit messages to indicate the sync source. Leave empty to use the default name."
).addText(
(text) => text.setPlaceholder(DEFAULT_YAOS_SETTINGS.deviceName).setValue(this.plugin.settings.deviceName).onChange(async (deviceName) => {
this.plugin.settings.deviceName = deviceName;
await this.plugin.saveSettings();
})
);
}
addCreateIssueSetting(el) {
new import_obsidian4.Setting(el).setName("Contact support").setDesc(
"If you run into any issues working with this plugin, please let us know by creating an issue on our GitHub page."
).addButton(
(button) => button.setButtonText("Create issue").setTooltip("Create an issue on GitHub").setCta().onClick(() => self.open(GITHUB_ISSUE_LINK, "_blank", "norefferrer"))
);
}
addDisabledToggleSetting(el, options) {
this.addToggleSetting(el, options, true);
}
addToggleSetting(el, options, disabled = false) {
const { propertyName, settingName, settingDesc } = options;
new import_obsidian4.Setting(el).setName(settingName).setDesc(settingDesc).addToggle(
(toggle) => toggle.setValue(disabled ? true : this.plugin.settings[propertyName]).setDisabled(disabled).onChange(async (value) => {
this.plugin.settings[propertyName] = value;
await this.plugin.saveSettings();
})
);
}
};
// src/main.ts
var import_obsidian5 = require("obsidian");
var PLUGIN_ICON = "sync";
var YaosPlugin = class extends import_obsidian5.Plugin {
constructor() {
super(...arguments);
__publicField(this, "gitService");
__publicField(this, "gitignoreService");
__publicField(this, "syncController");
__publicField(this, "settings", DEFAULT_YAOS_SETTINGS);
}
async onload() {
logger_default.debug("Initializing plugin...");
try {
await this.loadSettings();
logger_default.info("Loaded settings.");
} catch (e) {
logger_default.error("Failed to load settings.");
}
const adapter = this.app.vault.adapter;
if (adapter instanceof import_obsidian5.FileSystemAdapter) {
const basePath = adapter.getBasePath();
this.gitService = new SimpleGitService(basePath, this.settings);
this.gitignoreService = new GitignoreService(basePath, this.gitService);
this.syncController = new SyncController(
this.gitService,
this.gitignoreService
);
this.addCommand({
id: "show-unmerged",
name: "Show unmerged/conflicting files",
callback: () => new UnmergedFilesView(this.app, this.gitService).open()
});
this.addCommand({
id: "sync",
name: "Sync your vault",
callback: async () => {
await this.syncVault();
}
});
this.addRibbonIcon(PLUGIN_ICON, PLUGIN_NAME, this.syncVault.bind(this));
this.addSettingTab(new YaosSettingTab(this.app, this));
logger_default.debug("Plugin initialized.");
} else {
notifyUserAboutFailure("Adapter type is not recognized.");
logger_default.fatal("Logger type was not FileSystemAdapter.");
}
}
async loadSettings() {
this.settings = Object.assign(
{},
DEFAULT_YAOS_SETTINGS,
await this.loadData()
);
if (this.settings.deviceName === "")
this.settings.deviceName = DEFAULT_YAOS_SETTINGS.deviceName;
}
async saveSettings(settings = this.settings) {
await this.saveData(settings);
}
async syncVault(_evt) {
if (!this.gitService || !this.gitignoreService) {
logger_default.fatal("Services were not initialized.");
} else if (!this.syncController) {
logger_default.fatal("Sync controller was not initialized.");
} else {
try {
await this.syncController.sync();
} catch (e) {
new import_obsidian5.Notice("Unknown error occurred. Please create an issue.");
logger_default.fatal("Unknown error:", e);
}
}
}
};