import require$$2 from "path"; import electron$2, { app as app$1, BrowserWindow } from "electron"; import require$$1 from "fs"; import require$$0$1 from "constants"; import require$$0$2 from "stream"; import require$$4 from "util"; import require$$5 from "assert"; import require$$0$3 from "child_process"; import require$$1$1 from "os"; import require$$0$4 from "events"; import require$$0$5 from "http"; import require$$1$2 from "https"; import path$9 from "node:path"; import require$$2$1 from "querystring"; import require$$0$6 from "tty"; import require$$4$1 from "net"; import __cjs_url__ from "node:url"; import __cjs_path__ from "node:path"; import __cjs_mod__ from "node:module"; const __filename = __cjs_url__.fileURLToPath(import.meta.url); const __dirname = __cjs_path__.dirname(__filename); const require2 = __cjs_mod__.createRequire(import.meta.url); var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; function getDefaultExportFromCjs(x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x; } function getAugmentedNamespace(n) { if (n.__esModule) return n; var f = n.default; if (typeof f == "function") { var a = function a2() { if (this instanceof a2) { return Reflect.construct(f, arguments, this.constructor); } return f.apply(this, arguments); }; a.prototype = f.prototype; } else a = {}; Object.defineProperty(a, "__esModule", { value: true }); Object.keys(n).forEach(function(k) { var d = Object.getOwnPropertyDescriptor(n, k); Object.defineProperty(a, k, d.get ? d : { enumerable: true, get: function() { return n[k]; } }); }); return a; } var polyfills; var hasRequiredPolyfills; function requirePolyfills() { if (hasRequiredPolyfills) return polyfills; hasRequiredPolyfills = 1; var constants = require$$0$1; var origCwd = process.cwd; var cwd = null; var platform = process.env.GRACEFUL_FS_PLATFORM || process.platform; process.cwd = function() { if (!cwd) cwd = origCwd.call(process); return cwd; }; try { process.cwd(); } catch (er) { } if (typeof process.chdir === "function") { var chdir = process.chdir; process.chdir = function(d) { cwd = null; chdir.call(process, d); }; if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir); } polyfills = patch; function patch(fs2) { if (constants.hasOwnProperty("O_SYMLINK") && process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) { patchLchmod(fs2); } if (!fs2.lutimes) { patchLutimes(fs2); } fs2.chown = chownFix(fs2.chown); fs2.fchown = chownFix(fs2.fchown); fs2.lchown = chownFix(fs2.lchown); fs2.chmod = chmodFix(fs2.chmod); fs2.fchmod = chmodFix(fs2.fchmod); fs2.lchmod = chmodFix(fs2.lchmod); fs2.chownSync = chownFixSync(fs2.chownSync); fs2.fchownSync = chownFixSync(fs2.fchownSync); fs2.lchownSync = chownFixSync(fs2.lchownSync); fs2.chmodSync = chmodFixSync(fs2.chmodSync); fs2.fchmodSync = chmodFixSync(fs2.fchmodSync); fs2.lchmodSync = chmodFixSync(fs2.lchmodSync); fs2.stat = statFix(fs2.stat); fs2.fstat = statFix(fs2.fstat); fs2.lstat = statFix(fs2.lstat); fs2.statSync = statFixSync(fs2.statSync); fs2.fstatSync = statFixSync(fs2.fstatSync); fs2.lstatSync = statFixSync(fs2.lstatSync); if (fs2.chmod && !fs2.lchmod) { fs2.lchmod = function(path2, mode, cb) { if (cb) process.nextTick(cb); }; fs2.lchmodSync = function() { }; } if (fs2.chown && !fs2.lchown) { fs2.lchown = function(path2, uid, gid, cb) { if (cb) process.nextTick(cb); }; fs2.lchownSync = function() { }; } if (platform === "win32") { fs2.rename = typeof fs2.rename !== "function" ? fs2.rename : function(fs$rename) { function rename(from, to, cb) { var start2 = Date.now(); var backoff = 0; fs$rename(from, to, function CB(er) { if (er && (er.code === "EACCES" || er.code === "EPERM" || er.code === "EBUSY") && Date.now() - start2 < 6e4) { setTimeout(function() { fs2.stat(to, function(stater, st) { if (stater && stater.code === "ENOENT") fs$rename(from, to, CB); else cb(er); }); }, backoff); if (backoff < 100) backoff += 10; return; } if (cb) cb(er); }); } if (Object.setPrototypeOf) Object.setPrototypeOf(rename, fs$rename); return rename; }(fs2.rename); } fs2.read = typeof fs2.read !== "function" ? fs2.read : function(fs$read) { function read(fd, buffer, offset, length, position, callback_) { var callback; if (callback_ && typeof callback_ === "function") { var eagCounter = 0; callback = function(er, _, __) { if (er && er.code === "EAGAIN" && eagCounter < 10) { eagCounter++; return fs$read.call(fs2, fd, buffer, offset, length, position, callback); } callback_.apply(this, arguments); }; } return fs$read.call(fs2, fd, buffer, offset, length, position, callback); } if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read); return read; }(fs2.read); fs2.readSync = typeof fs2.readSync !== "function" ? fs2.readSync : /* @__PURE__ */ function(fs$readSync) { return function(fd, buffer, offset, length, position) { var eagCounter = 0; while (true) { try { return fs$readSync.call(fs2, fd, buffer, offset, length, position); } catch (er) { if (er.code === "EAGAIN" && eagCounter < 10) { eagCounter++; continue; } throw er; } } }; }(fs2.readSync); function patchLchmod(fs22) { fs22.lchmod = function(path2, mode, callback) { fs22.open( path2, constants.O_WRONLY | constants.O_SYMLINK, mode, function(err, fd) { if (err) { if (callback) callback(err); return; } fs22.fchmod(fd, mode, function(err2) { fs22.close(fd, function(err22) { if (callback) callback(err2 || err22); }); }); } ); }; fs22.lchmodSync = function(path2, mode) { var fd = fs22.openSync(path2, constants.O_WRONLY | constants.O_SYMLINK, mode); var threw = true; var ret; try { ret = fs22.fchmodSync(fd, mode); threw = false; } finally { if (threw) { try { fs22.closeSync(fd); } catch (er) { } } else { fs22.closeSync(fd); } } return ret; }; } function patchLutimes(fs22) { if (constants.hasOwnProperty("O_SYMLINK") && fs22.futimes) { fs22.lutimes = function(path2, at, mt, cb) { fs22.open(path2, constants.O_SYMLINK, function(er, fd) { if (er) { if (cb) cb(er); return; } fs22.futimes(fd, at, mt, function(er2) { fs22.close(fd, function(er22) { if (cb) cb(er2 || er22); }); }); }); }; fs22.lutimesSync = function(path2, at, mt) { var fd = fs22.openSync(path2, constants.O_SYMLINK); var ret; var threw = true; try { ret = fs22.futimesSync(fd, at, mt); threw = false; } finally { if (threw) { try { fs22.closeSync(fd); } catch (er) { } } else { fs22.closeSync(fd); } } return ret; }; } else if (fs22.futimes) { fs22.lutimes = function(_a, _b, _c, cb) { if (cb) process.nextTick(cb); }; fs22.lutimesSync = function() { }; } } function chmodFix(orig) { if (!orig) return orig; return function(target, mode, cb) { return orig.call(fs2, target, mode, function(er) { if (chownErOk(er)) er = null; if (cb) cb.apply(this, arguments); }); }; } function chmodFixSync(orig) { if (!orig) return orig; return function(target, mode) { try { return orig.call(fs2, target, mode); } catch (er) { if (!chownErOk(er)) throw er; } }; } function chownFix(orig) { if (!orig) return orig; return function(target, uid, gid, cb) { return orig.call(fs2, target, uid, gid, function(er) { if (chownErOk(er)) er = null; if (cb) cb.apply(this, arguments); }); }; } function chownFixSync(orig) { if (!orig) return orig; return function(target, uid, gid) { try { return orig.call(fs2, target, uid, gid); } catch (er) { if (!chownErOk(er)) throw er; } }; } function statFix(orig) { if (!orig) return orig; return function(target, options, cb) { if (typeof options === "function") { cb = options; options = null; } function callback(er, stats) { if (stats) { if (stats.uid < 0) stats.uid += 4294967296; if (stats.gid < 0) stats.gid += 4294967296; } if (cb) cb.apply(this, arguments); } return options ? orig.call(fs2, target, options, callback) : orig.call(fs2, target, callback); }; } function statFixSync(orig) { if (!orig) return orig; return function(target, options) { var stats = options ? orig.call(fs2, target, options) : orig.call(fs2, target); if (stats) { if (stats.uid < 0) stats.uid += 4294967296; if (stats.gid < 0) stats.gid += 4294967296; } return stats; }; } function chownErOk(er) { if (!er) return true; if (er.code === "ENOSYS") return true; var nonroot = !process.getuid || process.getuid() !== 0; if (nonroot) { if (er.code === "EINVAL" || er.code === "EPERM") return true; } return false; } } return polyfills; } var legacyStreams; var hasRequiredLegacyStreams; function requireLegacyStreams() { if (hasRequiredLegacyStreams) return legacyStreams; hasRequiredLegacyStreams = 1; var Stream = require$$0$2.Stream; legacyStreams = legacy; function legacy(fs2) { return { ReadStream, WriteStream }; function ReadStream(path2, options) { if (!(this instanceof ReadStream)) return new ReadStream(path2, options); Stream.call(this); var self2 = this; this.path = path2; this.fd = null; this.readable = true; this.paused = false; this.flags = "r"; this.mode = 438; this.bufferSize = 64 * 1024; options = options || {}; var keys = Object.keys(options); for (var index = 0, length = keys.length; index < length; index++) { var key = keys[index]; this[key] = options[key]; } if (this.encoding) this.setEncoding(this.encoding); if (this.start !== void 0) { if ("number" !== typeof this.start) { throw TypeError("start must be a Number"); } if (this.end === void 0) { this.end = Infinity; } else if ("number" !== typeof this.end) { throw TypeError("end must be a Number"); } if (this.start > this.end) { throw new Error("start must be <= end"); } this.pos = this.start; } if (this.fd !== null) { process.nextTick(function() { self2._read(); }); return; } fs2.open(this.path, this.flags, this.mode, function(err, fd) { if (err) { self2.emit("error", err); self2.readable = false; return; } self2.fd = fd; self2.emit("open", fd); self2._read(); }); } function WriteStream(path2, options) { if (!(this instanceof WriteStream)) return new WriteStream(path2, options); Stream.call(this); this.path = path2; this.fd = null; this.writable = true; this.flags = "w"; this.encoding = "binary"; this.mode = 438; this.bytesWritten = 0; options = options || {}; var keys = Object.keys(options); for (var index = 0, length = keys.length; index < length; index++) { var key = keys[index]; this[key] = options[key]; } if (this.start !== void 0) { if ("number" !== typeof this.start) { throw TypeError("start must be a Number"); } if (this.start < 0) { throw new Error("start must be >= zero"); } this.pos = this.start; } this.busy = false; this._queue = []; if (this.fd === null) { this._open = fs2.open; this._queue.push([this._open, this.path, this.flags, this.mode, void 0]); this.flush(); } } } return legacyStreams; } var clone_1; var hasRequiredClone; function requireClone() { if (hasRequiredClone) return clone_1; hasRequiredClone = 1; clone_1 = clone; var getPrototypeOf = Object.getPrototypeOf || function(obj) { return obj.__proto__; }; function clone(obj) { if (obj === null || typeof obj !== "object") return obj; if (obj instanceof Object) var copy = { __proto__: getPrototypeOf(obj) }; else var copy = /* @__PURE__ */ Object.create(null); Object.getOwnPropertyNames(obj).forEach(function(key) { Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key)); }); return copy; } return clone_1; } var gracefulFs; var hasRequiredGracefulFs; function requireGracefulFs() { if (hasRequiredGracefulFs) return gracefulFs; hasRequiredGracefulFs = 1; var fs2 = require$$1; var polyfills2 = requirePolyfills(); var legacy = requireLegacyStreams(); var clone = requireClone(); var util = require$$4; var gracefulQueue; var previousSymbol; if (typeof Symbol === "function" && typeof Symbol.for === "function") { gracefulQueue = Symbol.for("graceful-fs.queue"); previousSymbol = Symbol.for("graceful-fs.previous"); } else { gracefulQueue = "___graceful-fs.queue"; previousSymbol = "___graceful-fs.previous"; } function noop() { } function publishQueue(context, queue2) { Object.defineProperty(context, gracefulQueue, { get: function() { return queue2; } }); } var debug2 = noop; if (util.debuglog) debug2 = util.debuglog("gfs4"); else if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || "")) debug2 = function() { var m = util.format.apply(util, arguments); m = "GFS4: " + m.split(/\n/).join("\nGFS4: "); console.error(m); }; if (!fs2[gracefulQueue]) { var queue = commonjsGlobal[gracefulQueue] || []; publishQueue(fs2, queue); fs2.close = function(fs$close) { function close(fd, cb) { return fs$close.call(fs2, fd, function(err) { if (!err) { resetQueue(); } if (typeof cb === "function") cb.apply(this, arguments); }); } Object.defineProperty(close, previousSymbol, { value: fs$close }); return close; }(fs2.close); fs2.closeSync = function(fs$closeSync) { function closeSync(fd) { fs$closeSync.apply(fs2, arguments); resetQueue(); } Object.defineProperty(closeSync, previousSymbol, { value: fs$closeSync }); return closeSync; }(fs2.closeSync); if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || "")) { process.on("exit", function() { debug2(fs2[gracefulQueue]); require$$5.equal(fs2[gracefulQueue].length, 0); }); } } if (!commonjsGlobal[gracefulQueue]) { publishQueue(commonjsGlobal, fs2[gracefulQueue]); } gracefulFs = patch(clone(fs2)); if (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs2.__patched) { gracefulFs = patch(fs2); fs2.__patched = true; } function patch(fs22) { polyfills2(fs22); fs22.gracefulify = patch; fs22.createReadStream = createReadStream; fs22.createWriteStream = createWriteStream; var fs$readFile = fs22.readFile; fs22.readFile = readFile2; function readFile2(path2, options, cb) { if (typeof options === "function") cb = options, options = null; return go$readFile(path2, options, cb); function go$readFile(path22, options2, cb2, startTime) { return fs$readFile(path22, options2, function(err) { if (err && (err.code === "EMFILE" || err.code === "ENFILE")) enqueue([go$readFile, [path22, options2, cb2], err, startTime || Date.now(), Date.now()]); else { if (typeof cb2 === "function") cb2.apply(this, arguments); } }); } } var fs$writeFile = fs22.writeFile; fs22.writeFile = writeFile2; function writeFile2(path2, data, options, cb) { if (typeof options === "function") cb = options, options = null; return go$writeFile(path2, data, options, cb); function go$writeFile(path22, data2, options2, cb2, startTime) { return fs$writeFile(path22, data2, options2, function(err) { if (err && (err.code === "EMFILE" || err.code === "ENFILE")) enqueue([go$writeFile, [path22, data2, options2, cb2], err, startTime || Date.now(), Date.now()]); else { if (typeof cb2 === "function") cb2.apply(this, arguments); } }); } } var fs$appendFile = fs22.appendFile; if (fs$appendFile) fs22.appendFile = appendFile; function appendFile(path2, data, options, cb) { if (typeof options === "function") cb = options, options = null; return go$appendFile(path2, data, options, cb); function go$appendFile(path22, data2, options2, cb2, startTime) { return fs$appendFile(path22, data2, options2, function(err) { if (err && (err.code === "EMFILE" || err.code === "ENFILE")) enqueue([go$appendFile, [path22, data2, options2, cb2], err, startTime || Date.now(), Date.now()]); else { if (typeof cb2 === "function") cb2.apply(this, arguments); } }); } } var fs$copyFile = fs22.copyFile; if (fs$copyFile) fs22.copyFile = copyFile; function copyFile(src2, dest, flags, cb) { if (typeof flags === "function") { cb = flags; flags = 0; } return go$copyFile(src2, dest, flags, cb); function go$copyFile(src22, dest2, flags2, cb2, startTime) { return fs$copyFile(src22, dest2, flags2, function(err) { if (err && (err.code === "EMFILE" || err.code === "ENFILE")) enqueue([go$copyFile, [src22, dest2, flags2, cb2], err, startTime || Date.now(), Date.now()]); else { if (typeof cb2 === "function") cb2.apply(this, arguments); } }); } } var fs$readdir = fs22.readdir; fs22.readdir = readdir; var noReaddirOptionVersions = /^v[0-5]\./; function readdir(path2, options, cb) { if (typeof options === "function") cb = options, options = null; var go$readdir = noReaddirOptionVersions.test(process.version) ? function go$readdir2(path22, options2, cb2, startTime) { return fs$readdir(path22, fs$readdirCallback( path22, options2, cb2, startTime )); } : function go$readdir2(path22, options2, cb2, startTime) { return fs$readdir(path22, options2, fs$readdirCallback( path22, options2, cb2, startTime )); }; return go$readdir(path2, options, cb); function fs$readdirCallback(path22, options2, cb2, startTime) { return function(err, files) { if (err && (err.code === "EMFILE" || err.code === "ENFILE")) enqueue([ go$readdir, [path22, options2, cb2], err, startTime || Date.now(), Date.now() ]); else { if (files && files.sort) files.sort(); if (typeof cb2 === "function") cb2.call(this, err, files); } }; } } if (process.version.substr(0, 4) === "v0.8") { var legStreams = legacy(fs22); ReadStream = legStreams.ReadStream; WriteStream = legStreams.WriteStream; } var fs$ReadStream = fs22.ReadStream; if (fs$ReadStream) { ReadStream.prototype = Object.create(fs$ReadStream.prototype); ReadStream.prototype.open = ReadStream$open; } var fs$WriteStream = fs22.WriteStream; if (fs$WriteStream) { WriteStream.prototype = Object.create(fs$WriteStream.prototype); WriteStream.prototype.open = WriteStream$open; } Object.defineProperty(fs22, "ReadStream", { get: function() { return ReadStream; }, set: function(val) { ReadStream = val; }, enumerable: true, configurable: true }); Object.defineProperty(fs22, "WriteStream", { get: function() { return WriteStream; }, set: function(val) { WriteStream = val; }, enumerable: true, configurable: true }); var FileReadStream = ReadStream; Object.defineProperty(fs22, "FileReadStream", { get: function() { return FileReadStream; }, set: function(val) { FileReadStream = val; }, enumerable: true, configurable: true }); var FileWriteStream = WriteStream; Object.defineProperty(fs22, "FileWriteStream", { get: function() { return FileWriteStream; }, set: function(val) { FileWriteStream = val; }, enumerable: true, configurable: true }); function ReadStream(path2, options) { if (this instanceof ReadStream) return fs$ReadStream.apply(this, arguments), this; else return ReadStream.apply(Object.create(ReadStream.prototype), arguments); } function ReadStream$open() { var that = this; open(that.path, that.flags, that.mode, function(err, fd) { if (err) { if (that.autoClose) that.destroy(); that.emit("error", err); } else { that.fd = fd; that.emit("open", fd); that.read(); } }); } function WriteStream(path2, options) { if (this instanceof WriteStream) return fs$WriteStream.apply(this, arguments), this; else return WriteStream.apply(Object.create(WriteStream.prototype), arguments); } function WriteStream$open() { var that = this; open(that.path, that.flags, that.mode, function(err, fd) { if (err) { that.destroy(); that.emit("error", err); } else { that.fd = fd; that.emit("open", fd); } }); } function createReadStream(path2, options) { return new fs22.ReadStream(path2, options); } function createWriteStream(path2, options) { return new fs22.WriteStream(path2, options); } var fs$open = fs22.open; fs22.open = open; function open(path2, flags, mode, cb) { if (typeof mode === "function") cb = mode, mode = null; return go$open(path2, flags, mode, cb); function go$open(path22, flags2, mode2, cb2, startTime) { return fs$open(path22, flags2, mode2, function(err, fd) { if (err && (err.code === "EMFILE" || err.code === "ENFILE")) enqueue([go$open, [path22, flags2, mode2, cb2], err, startTime || Date.now(), Date.now()]); else { if (typeof cb2 === "function") cb2.apply(this, arguments); } }); } } return fs22; } function enqueue(elem) { debug2("ENQUEUE", elem[0].name, elem[1]); fs2[gracefulQueue].push(elem); retry(); } var retryTimer; function resetQueue() { var now = Date.now(); for (var i = 0; i < fs2[gracefulQueue].length; ++i) { if (fs2[gracefulQueue][i].length > 2) { fs2[gracefulQueue][i][3] = now; fs2[gracefulQueue][i][4] = now; } } retry(); } function retry() { clearTimeout(retryTimer); retryTimer = void 0; if (fs2[gracefulQueue].length === 0) return; var elem = fs2[gracefulQueue].shift(); var fn = elem[0]; var args = elem[1]; var err = elem[2]; var startTime = elem[3]; var lastTime = elem[4]; if (startTime === void 0) { debug2("RETRY", fn.name, args); fn.apply(null, args); } else if (Date.now() - startTime >= 6e4) { debug2("TIMEOUT", fn.name, args); var cb = args.pop(); if (typeof cb === "function") cb.call(null, err); } else { var sinceAttempt = Date.now() - lastTime; var sinceStart = Math.max(lastTime - startTime, 1); var desiredDelay = Math.min(sinceStart * 1.2, 100); if (sinceAttempt >= desiredDelay) { debug2("RETRY", fn.name, args); fn.apply(null, args.concat([startTime])); } else { fs2[gracefulQueue].push(elem); } } if (retryTimer === void 0) { retryTimer = setTimeout(retry, 0); } } return gracefulFs; } var _fs; try { _fs = requireGracefulFs(); } catch (_) { _fs = require$$1; } function readFile(file2, options, callback) { if (callback == null) { callback = options; options = {}; } if (typeof options === "string") { options = { encoding: options }; } options = options || {}; var fs2 = options.fs || _fs; var shouldThrow = true; if ("throws" in options) { shouldThrow = options.throws; } fs2.readFile(file2, options, function(err, data) { if (err) return callback(err); data = stripBom(data); var obj; try { obj = JSON.parse(data, options ? options.reviver : null); } catch (err2) { if (shouldThrow) { err2.message = file2 + ": " + err2.message; return callback(err2); } else { return callback(null, null); } } callback(null, obj); }); } function readFileSync(file2, options) { options = options || {}; if (typeof options === "string") { options = { encoding: options }; } var fs2 = options.fs || _fs; var shouldThrow = true; if ("throws" in options) { shouldThrow = options.throws; } try { var content = fs2.readFileSync(file2, options); content = stripBom(content); return JSON.parse(content, options.reviver); } catch (err) { if (shouldThrow) { err.message = file2 + ": " + err.message; throw err; } else { return null; } } } function stringify(obj, options) { var spaces; var EOL = "\n"; if (typeof options === "object" && options !== null) { if (options.spaces) { spaces = options.spaces; } if (options.EOL) { EOL = options.EOL; } } var str = JSON.stringify(obj, options ? options.replacer : null, spaces); return str.replace(/\n/g, EOL) + EOL; } function writeFile(file2, obj, options, callback) { if (callback == null) { callback = options; options = {}; } options = options || {}; var fs2 = options.fs || _fs; var str = ""; try { str = stringify(obj, options); } catch (err) { if (callback) callback(err, null); return; } fs2.writeFile(file2, str, options, callback); } function writeFileSync(file2, obj, options) { options = options || {}; var fs2 = options.fs || _fs; var str = stringify(obj, options); return fs2.writeFileSync(file2, str, options); } function stripBom(content) { if (Buffer.isBuffer(content)) content = content.toString("utf8"); content = content.replace(/^\uFEFF/, ""); return content; } var jsonfile$1 = { readFile, readFileSync, writeFile, writeFileSync }; var jsonfile_1 = jsonfile$1; var path$8 = require$$2; var fs$5 = require$$1; var _0777 = parseInt("0777", 8); var mkdirp$1 = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP; function mkdirP(p, opts, f, made) { if (typeof opts === "function") { f = opts; opts = {}; } else if (!opts || typeof opts !== "object") { opts = { mode: opts }; } var mode = opts.mode; var xfs = opts.fs || fs$5; if (mode === void 0) { mode = _0777; } if (!made) made = null; var cb = f || /* istanbul ignore next */ function() { }; p = path$8.resolve(p); xfs.mkdir(p, mode, function(er) { if (!er) { made = made || p; return cb(null, made); } switch (er.code) { case "ENOENT": if (path$8.dirname(p) === p) return cb(er); mkdirP(path$8.dirname(p), opts, function(er2, made2) { if (er2) cb(er2, made2); else mkdirP(p, opts, cb, made2); }); break; default: xfs.stat(p, function(er2, stat) { if (er2 || !stat.isDirectory()) cb(er, made); else cb(null, made); }); break; } }); } mkdirP.sync = function sync(p, opts, made) { if (!opts || typeof opts !== "object") { opts = { mode: opts }; } var mode = opts.mode; var xfs = opts.fs || fs$5; if (mode === void 0) { mode = _0777; } if (!made) made = null; p = path$8.resolve(p); try { xfs.mkdirSync(p, mode); made = made || p; } catch (err0) { switch (err0.code) { case "ENOENT": made = sync(path$8.dirname(p), opts, made); sync(p, opts, made); break; default: var stat; try { stat = xfs.statSync(p); } catch (err1) { throw err0; } if (!stat.isDirectory()) throw err0; break; } } return made; }; const path$7 = require$$2; const electron$1 = electron$2; const jsonfile = jsonfile_1; const mkdirp = mkdirp$1; var electronWindowState = function(options) { const app2 = electron$1.app || electron$1.remote.app; const screen = electron$1.screen || electron$1.remote.screen; let state; let winRef; let stateChangeTimer; const eventHandlingDelay = 100; const config = Object.assign({ file: "window-state.json", path: app2.getPath("userData"), maximize: true, fullScreen: true }, options); const fullStoreFileName = path$7.join(config.path, config.file); function isNormal(win) { return !win.isMaximized() && !win.isMinimized() && !win.isFullScreen(); } function hasBounds() { return state && Number.isInteger(state.x) && Number.isInteger(state.y) && Number.isInteger(state.width) && state.width > 0 && Number.isInteger(state.height) && state.height > 0; } function resetStateToDefault() { const displayBounds = screen.getPrimaryDisplay().bounds; state = { width: config.defaultWidth || 800, height: config.defaultHeight || 600, x: 0, y: 0, displayBounds }; } function windowWithinBounds(bounds) { return state.x >= bounds.x && state.y >= bounds.y && state.x + state.width <= bounds.x + bounds.width && state.y + state.height <= bounds.y + bounds.height; } function ensureWindowVisibleOnSomeDisplay() { const visible = screen.getAllDisplays().some((display) => { return windowWithinBounds(display.bounds); }); if (!visible) { return resetStateToDefault(); } } function validateState() { const isValid = state && (hasBounds() || state.isMaximized || state.isFullScreen); if (!isValid) { state = null; return; } if (hasBounds() && state.displayBounds) { ensureWindowVisibleOnSomeDisplay(); } } function updateState(win) { win = win || winRef; if (!win) { return; } try { const winBounds = win.getBounds(); if (isNormal(win)) { state.x = winBounds.x; state.y = winBounds.y; state.width = winBounds.width; state.height = winBounds.height; } state.isMaximized = win.isMaximized(); state.isFullScreen = win.isFullScreen(); state.displayBounds = screen.getDisplayMatching(winBounds).bounds; } catch (err) { } } function saveState(win) { if (win) { updateState(win); } try { mkdirp.sync(path$7.dirname(fullStoreFileName)); jsonfile.writeFileSync(fullStoreFileName, state); } catch (err) { } } function stateChangeHandler() { clearTimeout(stateChangeTimer); stateChangeTimer = setTimeout(updateState, eventHandlingDelay); } function closeHandler() { updateState(); } function closedHandler() { unmanage(); saveState(); } function manage(win) { if (config.maximize && state.isMaximized) { win.maximize(); } if (config.fullScreen && state.isFullScreen) { win.setFullScreen(true); } win.on("resize", stateChangeHandler); win.on("move", stateChangeHandler); win.on("close", closeHandler); win.on("closed", closedHandler); winRef = win; } function unmanage() { if (winRef) { winRef.removeListener("resize", stateChangeHandler); winRef.removeListener("move", stateChangeHandler); clearTimeout(stateChangeTimer); winRef.removeListener("close", closeHandler); winRef.removeListener("closed", closedHandler); winRef = null; } } try { state = jsonfile.readFileSync(fullStoreFileName); } catch (err) { } validateState(); state = Object.assign({ width: config.defaultWidth || 800, height: config.defaultHeight || 600 }, state); return { get x() { return state.x; }, get y() { return state.y; }, get width() { return state.width; }, get height() { return state.height; }, get displayBounds() { return state.displayBounds; }, get isMaximized() { return state.isMaximized; }, get isFullScreen() { return state.isFullScreen; }, saveState, unmanage, manage, resetStateToDefault }; }; const windowStateManager = /* @__PURE__ */ getDefaultExportFromCjs(electronWindowState); if (typeof electron$2 === "string") { throw new TypeError("Not running in an Electron environment!"); } const { env } = process; const isEnvSet = "ELECTRON_IS_DEV" in env; const getFromEnv = Number.parseInt(env.ELECTRON_IS_DEV, 10) === 1; const isDev = isEnvSet ? getFromEnv : !electron$2.app.isPackaged; const fs$4 = require$$1; const path$6 = require$$2; var packageJson$1 = { findAndReadPackageJson, tryReadJsonAt }; function findAndReadPackageJson() { return tryReadJsonAt(getMainModulePath()) || tryReadJsonAt(extractPathFromArgs()) || tryReadJsonAt(process.resourcesPath, "app.asar") || tryReadJsonAt(process.resourcesPath, "app") || tryReadJsonAt(process.cwd()) || { name: void 0, version: void 0 }; } function tryReadJsonAt(...searchPaths) { if (!searchPaths[0]) { return void 0; } try { const searchPath = path$6.join(...searchPaths); const fileName = findUp("package.json", searchPath); if (!fileName) { return void 0; } const json = JSON.parse(fs$4.readFileSync(fileName, "utf8")); const name = json?.productName || json?.name; if (!name || name.toLowerCase() === "electron") { return void 0; } if (name) { return { name, version: json?.version }; } return void 0; } catch (e) { return void 0; } } function findUp(fileName, cwd) { let currentPath = cwd; while (true) { const parsedPath = path$6.parse(currentPath); const root = parsedPath.root; const dir = parsedPath.dir; if (fs$4.existsSync(path$6.join(currentPath, fileName))) { return path$6.resolve(path$6.join(currentPath, fileName)); } if (currentPath === root) { return null; } currentPath = dir; } } function extractPathFromArgs() { const matchedArgs = process.argv.filter((arg) => { return arg.indexOf("--user-data-dir=") === 0; }); if (matchedArgs.length === 0 || typeof matchedArgs[0] !== "string") { return null; } const userDataDir = matchedArgs[0]; return userDataDir.replace("--user-data-dir=", ""); } function getMainModulePath() { try { return require2.main?.filename; } catch { return void 0; } } const childProcess = require$$0$3; const os$3 = require$$1$1; const path$5 = require$$2; const packageJson = packageJson$1; let NodeExternalApi$1 = class NodeExternalApi { appName = void 0; appPackageJson = void 0; platform = process.platform; getAppLogPath(appName = this.getAppName()) { if (this.platform === "darwin") { return path$5.join(this.getSystemPathHome(), "Library/Logs", appName); } return path$5.join(this.getAppUserDataPath(appName), "logs"); } getAppName() { return this.appName || this.getAppPackageJson()?.name; } /** * @private * @returns {undefined} */ getAppPackageJson() { if (typeof this.appPackageJson !== "object") { this.appPackageJson = packageJson.findAndReadPackageJson(); } return this.appPackageJson; } getAppUserDataPath(appName = this.getAppName()) { return appName ? path$5.join(this.getSystemPathAppData(), appName) : void 0; } getAppVersion() { return this.getAppPackageJson()?.version; } getElectronLogPath() { return this.getAppLogPath(); } getMacOsVersion() { const release = Number(os$3.release().split(".")[0]); if (release <= 19) { return `10.${release - 4}`; } return release - 9; } /** * @protected * @returns {string} */ getOsVersion() { let osName = os$3.type().replace("_", " "); let osVersion = os$3.release(); if (osName === "Darwin") { osName = "macOS"; osVersion = this.getMacOsVersion(); } return `${osName} ${osVersion}`; } /** * @return {PathVariables} */ getPathVariables() { const appName = this.getAppName(); const appVersion = this.getAppVersion(); const self2 = this; return { appData: this.getSystemPathAppData(), appName, appVersion, get electronDefaultDir() { return self2.getElectronLogPath(); }, home: this.getSystemPathHome(), libraryDefaultDir: this.getAppLogPath(appName), libraryTemplate: this.getAppLogPath("{appName}"), temp: this.getSystemPathTemp(), userData: this.getAppUserDataPath(appName) }; } getSystemPathAppData() { const home = this.getSystemPathHome(); switch (this.platform) { case "darwin": { return path$5.join(home, "Library/Application Support"); } case "win32": { return process.env.APPDATA || path$5.join(home, "AppData/Roaming"); } default: { return process.env.XDG_CONFIG_HOME || path$5.join(home, ".config"); } } } getSystemPathHome() { return os$3.homedir?.() || process.env.HOME; } getSystemPathTemp() { return os$3.tmpdir(); } getVersions() { return { app: `${this.getAppName()} ${this.getAppVersion()}`, electron: void 0, os: this.getOsVersion() }; } isDev() { return process.env.NODE_ENV === "development" || process.env.ELECTRON_IS_DEV === "1"; } isElectron() { return Boolean(process.versions.electron); } onAppEvent(_eventName, _handler) { } onAppReady(handler) { handler(); } onEveryWebContentsEvent(eventName, handler) { } /** * Listen to async messages sent from opposite process * @param {string} channel * @param {function} listener */ onIpc(channel, listener) { } onIpcInvoke(channel, listener) { } /** * @param {string} url * @param {Function} [logFunction] */ openUrl(url2, logFunction = console.error) { const startMap = { darwin: "open", win32: "start", linux: "xdg-open" }; const start2 = startMap[process.platform] || "xdg-open"; childProcess.exec(`${start2} ${url2}`, {}, (err) => { if (err) { logFunction(err); } }); } setPlatform(platform) { this.platform = platform; } setPreloadFileForSessions({ filePath, // eslint-disable-line no-unused-vars includeFutureSession = true, // eslint-disable-line no-unused-vars getSessions = () => [] // eslint-disable-line no-unused-vars }) { } /** * Sent a message to opposite process * @param {string} channel * @param {any} message */ sendIpc(channel, message) { } showErrorBox(title, message) { } }; var NodeExternalApi_1 = NodeExternalApi$1; const path$4 = require$$2; const NodeExternalApi2 = NodeExternalApi_1; let ElectronExternalApi$1 = class ElectronExternalApi extends NodeExternalApi2 { /** * @type {typeof Electron} */ electron = void 0; /** * @param {object} options * @param {typeof Electron} [options.electron] */ constructor({ electron: electron2 } = {}) { super(); this.electron = electron2; } getAppName() { let appName; try { appName = this.electron.app?.name || this.electron.app?.getName(); } catch { } return appName || super.getAppName(); } getAppUserDataPath(appName) { return this.getPath("userData") || super.getAppUserDataPath(appName); } getAppVersion() { let appVersion; try { appVersion = this.electron.app?.getVersion(); } catch { } return appVersion || super.getAppVersion(); } getElectronLogPath() { return this.getPath("logs") || super.getElectronLogPath(); } /** * @private * @param {any} name * @returns {string|undefined} */ getPath(name) { try { return this.electron.app?.getPath(name); } catch { return void 0; } } getVersions() { return { app: `${this.getAppName()} ${this.getAppVersion()}`, electron: `Electron ${process.versions.electron}`, os: this.getOsVersion() }; } getSystemPathAppData() { return this.getPath("appData") || super.getSystemPathAppData(); } isDev() { if (this.electron.app?.isPackaged !== void 0) { return !this.electron.app.isPackaged; } if (typeof process.execPath === "string") { const execFileName = path$4.basename(process.execPath).toLowerCase(); return execFileName.startsWith("electron"); } return super.isDev(); } onAppEvent(eventName, handler) { this.electron.app?.on(eventName, handler); return () => { this.electron.app?.off(eventName, handler); }; } onAppReady(handler) { if (this.electron.app?.isReady()) { handler(); } else if (this.electron.app?.once) { this.electron.app?.once("ready", handler); } else { handler(); } } onEveryWebContentsEvent(eventName, handler) { this.electron.webContents?.getAllWebContents()?.forEach((webContents) => { webContents.on(eventName, handler); }); this.electron.app?.on("web-contents-created", onWebContentsCreated); return () => { this.electron.webContents?.getAllWebContents().forEach((webContents) => { webContents.off(eventName, handler); }); this.electron.app?.off("web-contents-created", onWebContentsCreated); }; function onWebContentsCreated(_, webContents) { webContents.on(eventName, handler); } } /** * Listen to async messages sent from opposite process * @param {string} channel * @param {function} listener */ onIpc(channel, listener) { this.electron.ipcMain?.on(channel, listener); } onIpcInvoke(channel, listener) { this.electron.ipcMain?.handle?.(channel, listener); } /** * @param {string} url * @param {Function} [logFunction] */ openUrl(url2, logFunction = console.error) { this.electron.shell?.openExternal(url2).catch(logFunction); } setPreloadFileForSessions({ filePath, includeFutureSession = true, getSessions = () => [this.electron.session?.defaultSession] }) { for (const session of getSessions().filter(Boolean)) { setPreload(session); } if (includeFutureSession) { this.onAppEvent("session-created", (session) => { setPreload(session); }); } function setPreload(session) { session.setPreloads([...session.getPreloads(), filePath]); } } /** * Sent a message to opposite process * @param {string} channel * @param {any} message */ sendIpc(channel, message) { this.electron.BrowserWindow?.getAllWindows()?.forEach((wnd) => { if (wnd.webContents?.isDestroyed() === false) { wnd.webContents.send(channel, message); } }); } showErrorBox(title, message) { this.electron.dialog?.showErrorBox(title, message); } }; var ElectronExternalApi_1 = ElectronExternalApi$1; var electronLogPreload = { exports: {} }; (function(module) { let electron2 = {}; try { electron2 = require2("electron"); } catch (e) { } if (electron2.ipcRenderer) { initialize2(electron2); } { module.exports = initialize2; } function initialize2({ contextBridge, ipcRenderer }) { if (!ipcRenderer) { return; } ipcRenderer.on("__ELECTRON_LOG_IPC__", (_, message) => { window.postMessage({ cmd: "message", ...message }); }); ipcRenderer.invoke("__ELECTRON_LOG__", { cmd: "getOptions" }).catch((e) => console.error(new Error( `electron-log isn't initialized in the main process. Please call log.initialize() before. ${e.message}` ))); const electronLog = { sendToMain(message) { try { ipcRenderer.send("__ELECTRON_LOG__", message); } catch (e) { console.error("electronLog.sendToMain ", e, "data:", message); ipcRenderer.send("__ELECTRON_LOG__", { cmd: "errorHandler", error: { message: e?.message, stack: e?.stack }, errorName: "sendToMain" }); } }, log(...data) { electronLog.sendToMain({ data, level: "info" }); } }; for (const level of ["error", "warn", "info", "verbose", "debug", "silly"]) { electronLog[level] = (...data) => electronLog.sendToMain({ data, level }); } if (contextBridge && process.contextIsolated) { try { contextBridge.exposeInMainWorld("__electronLog", electronLog); } catch { } } if (typeof window === "object") { window.__electronLog = electronLog; } else { __electronLog = electronLog; } } })(electronLogPreload); var electronLogPreloadExports = electronLogPreload.exports; const fs$3 = require$$1; const os$2 = require$$1$1; const path$3 = require$$2; const preloadInitializeFn = electronLogPreloadExports; var initialize$1 = { initialize({ externalApi: externalApi2, getSessions, includeFutureSession, logger, preload = true, spyRendererConsole = false }) { externalApi2.onAppReady(() => { try { if (preload) { initializePreload({ externalApi: externalApi2, getSessions, includeFutureSession, preloadOption: preload }); } if (spyRendererConsole) { initializeSpyRendererConsole({ externalApi: externalApi2, logger }); } } catch (err) { logger.warn(err); } }); } }; function initializePreload({ externalApi: externalApi2, getSessions, includeFutureSession, preloadOption }) { let preloadPath = typeof preloadOption === "string" ? preloadOption : void 0; try { preloadPath = path$3.resolve( __dirname, "../renderer/electron-log-preload.js" ); } catch { } if (!preloadPath || !fs$3.existsSync(preloadPath)) { preloadPath = path$3.join( externalApi2.getAppUserDataPath() || os$2.tmpdir(), "electron-log-preload.js" ); const preloadCode = ` try { (${preloadInitializeFn.toString()})(require('electron')); } catch(e) { console.error(e); } `; fs$3.writeFileSync(preloadPath, preloadCode, "utf8"); } externalApi2.setPreloadFileForSessions({ filePath: preloadPath, includeFutureSession, getSessions }); } function initializeSpyRendererConsole({ externalApi: externalApi2, logger }) { const levels = ["verbose", "info", "warning", "error"]; externalApi2.onEveryWebContentsEvent( "console-message", (event, level, message) => { logger.processMessage({ data: [message], level: levels[level], variables: { processType: "renderer" } }); } ); } var scope = scopeFactory$1; function scopeFactory$1(logger) { return Object.defineProperties(scope2, { defaultLabel: { value: "", writable: true }, labelPadding: { value: true, writable: true }, maxLabelLength: { value: 0, writable: true }, labelLength: { get() { switch (typeof scope2.labelPadding) { case "boolean": return scope2.labelPadding ? scope2.maxLabelLength : 0; case "number": return scope2.labelPadding; default: return 0; } } } }); function scope2(label) { scope2.maxLabelLength = Math.max(scope2.maxLabelLength, label.length); const newScope = {}; for (const level of [...logger.levels, "log"]) { newScope[level] = (...d) => logger.logData(d, { level, scope: label }); } return newScope; } } const scopeFactory = scope; let Logger$1 = class Logger { static instances = {}; dependencies = {}; errorHandler = null; eventLogger = null; functions = {}; hooks = []; isDev = false; levels = null; logId = null; scope = null; transports = {}; variables = {}; constructor({ allowUnknownLevel = false, dependencies = {}, errorHandler, eventLogger, initializeFn, isDev: isDev2 = false, levels = ["error", "warn", "info", "verbose", "debug", "silly"], logId, transportFactories = {}, variables } = {}) { this.addLevel = this.addLevel.bind(this); this.create = this.create.bind(this); this.initialize = this.initialize.bind(this); this.logData = this.logData.bind(this); this.processMessage = this.processMessage.bind(this); this.allowUnknownLevel = allowUnknownLevel; this.dependencies = dependencies; this.initializeFn = initializeFn; this.isDev = isDev2; this.levels = levels; this.logId = logId; this.transportFactories = transportFactories; this.variables = variables || {}; this.scope = scopeFactory(this); this.addLevel("log", false); for (const name of this.levels) { this.addLevel(name, false); } this.errorHandler = errorHandler; errorHandler?.setOptions({ ...dependencies, logFn: this.error }); this.eventLogger = eventLogger; eventLogger?.setOptions({ ...dependencies, logger: this }); for (const [name, factory] of Object.entries(transportFactories)) { this.transports[name] = factory(this, dependencies); } Logger.instances[logId] = this; } static getInstance({ logId }) { return this.instances[logId] || this.instances.default; } addLevel(level, index = this.levels.length) { if (index !== false) { this.levels.splice(index, 0, level); } this[level] = (...args) => this.logData(args, { level }); this.functions[level] = this[level]; } catchErrors(options) { this.processMessage( { data: ["log.catchErrors is deprecated. Use log.errorHandler instead"], level: "warn" }, { transports: ["console"] } ); return this.errorHandler.startCatching(options); } create(options) { if (typeof options === "string") { options = { logId: options }; } return new Logger({ dependencies: this.dependencies, errorHandler: this.errorHandler, initializeFn: this.initializeFn, isDev: this.isDev, transportFactories: this.transportFactories, variables: { ...this.variables }, ...options }); } compareLevels(passLevel, checkLevel, levels = this.levels) { const pass = levels.indexOf(passLevel); const check2 = levels.indexOf(checkLevel); if (check2 === -1 || pass === -1) { return true; } return check2 <= pass; } initialize(options = {}) { this.initializeFn({ logger: this, ...this.dependencies, ...options }); } logData(data, options = {}) { this.processMessage({ data, ...options }); } processMessage(message, { transports = this.transports } = {}) { if (message.cmd === "errorHandler") { this.errorHandler.handle(message.error, { errorName: message.errorName, processType: "renderer", showDialog: Boolean(message.showDialog) }); return; } let level = message.level; if (!this.allowUnknownLevel) { level = this.levels.includes(message.level) ? message.level : "info"; } const normalizedMessage = { date: /* @__PURE__ */ new Date(), ...message, level, variables: { ...this.variables, ...message.variables } }; for (const [transName, transFn] of this.transportEntries(transports)) { if (typeof transFn !== "function" || transFn.level === false) { continue; } if (!this.compareLevels(transFn.level, message.level)) { continue; } try { const transformedMsg = this.hooks.reduce((msg, hook) => { return msg ? hook(msg, transFn, transName) : msg; }, normalizedMessage); if (transformedMsg) { transFn({ ...transformedMsg, data: [...transformedMsg.data] }); } } catch (e) { this.processInternalErrorFn(e); } } } processInternalErrorFn(_e) { } transportEntries(transports = this.transports) { const transportArray = Array.isArray(transports) ? transports : Object.entries(transports); return transportArray.map((item) => { switch (typeof item) { case "string": return this.transports[item] ? [item, this.transports[item]] : null; case "function": return [item.name, item]; default: return Array.isArray(item) ? item : null; } }).filter(Boolean); } }; var Logger_1 = Logger$1; let ErrorHandler$1 = class ErrorHandler { externalApi = void 0; isActive = false; logFn = void 0; onError = void 0; showDialog = true; constructor({ externalApi: externalApi2, logFn = void 0, onError: onError2 = void 0, showDialog = void 0 } = {}) { this.createIssue = this.createIssue.bind(this); this.handleError = this.handleError.bind(this); this.handleRejection = this.handleRejection.bind(this); this.setOptions({ externalApi: externalApi2, logFn, onError: onError2, showDialog }); this.startCatching = this.startCatching.bind(this); this.stopCatching = this.stopCatching.bind(this); } handle(error, { logFn = this.logFn, onError: onError2 = this.onError, processType = "browser", showDialog = this.showDialog, errorName = "" } = {}) { error = normalizeError(error); try { if (typeof onError2 === "function") { const versions = this.externalApi?.getVersions() || {}; const createIssue = this.createIssue; const result = onError2({ createIssue, error, errorName, processType, versions }); if (result === false) { return; } } errorName ? logFn(errorName, error) : logFn(error); if (showDialog && !errorName.includes("rejection") && this.externalApi) { this.externalApi.showErrorBox( `A JavaScript error occurred in the ${processType} process`, error.stack ); } } catch { console.error(error); } } setOptions({ externalApi: externalApi2, logFn, onError: onError2, showDialog }) { if (typeof externalApi2 === "object") { this.externalApi = externalApi2; } if (typeof logFn === "function") { this.logFn = logFn; } if (typeof onError2 === "function") { this.onError = onError2; } if (typeof showDialog === "boolean") { this.showDialog = showDialog; } } startCatching({ onError: onError2, showDialog } = {}) { if (this.isActive) { return; } this.isActive = true; this.setOptions({ onError: onError2, showDialog }); process.on("uncaughtException", this.handleError); process.on("unhandledRejection", this.handleRejection); } stopCatching() { this.isActive = false; process.removeListener("uncaughtException", this.handleError); process.removeListener("unhandledRejection", this.handleRejection); } createIssue(pageUrl, queryParams) { this.externalApi?.openUrl( `${pageUrl}?${new URLSearchParams(queryParams).toString()}` ); } handleError(error) { this.handle(error, { errorName: "Unhandled" }); } handleRejection(reason) { const error = reason instanceof Error ? reason : new Error(JSON.stringify(reason)); this.handle(error, { errorName: "Unhandled rejection" }); } }; function normalizeError(e) { if (e instanceof Error) { return e; } if (e && typeof e === "object") { if (e.message) { return Object.assign(new Error(e.message), e); } try { return new Error(JSON.stringify(e)); } catch (serErr) { return new Error(`Couldn't normalize error ${String(e)}: ${serErr}`); } } return new Error(`Can't normalize error ${String(e)}`); } var ErrorHandler_1 = ErrorHandler$1; let EventLogger$1 = class EventLogger { disposers = []; format = "{eventSource}#{eventName}:"; formatters = { app: { "certificate-error": ({ args }) => { return this.arrayToObject(args.slice(1, 4), [ "url", "error", "certificate" ]); }, "child-process-gone": ({ args }) => { return args.length === 1 ? args[0] : args; }, "render-process-gone": ({ args: [webContents, details] }) => { return details && typeof details === "object" ? { ...details, ...this.getWebContentsDetails(webContents) } : []; } }, webContents: { "console-message": ({ args: [level, message, line, sourceId] }) => { if (level < 3) { return void 0; } return { message, source: `${sourceId}:${line}` }; }, "did-fail-load": ({ args }) => { return this.arrayToObject(args, [ "errorCode", "errorDescription", "validatedURL", "isMainFrame", "frameProcessId", "frameRoutingId" ]); }, "did-fail-provisional-load": ({ args }) => { return this.arrayToObject(args, [ "errorCode", "errorDescription", "validatedURL", "isMainFrame", "frameProcessId", "frameRoutingId" ]); }, "plugin-crashed": ({ args }) => { return this.arrayToObject(args, ["name", "version"]); }, "preload-error": ({ args }) => { return this.arrayToObject(args, ["preloadPath", "error"]); } } }; events = { app: { "certificate-error": true, "child-process-gone": true, "render-process-gone": true }, webContents: { // 'console-message': true, "did-fail-load": true, "did-fail-provisional-load": true, "plugin-crashed": true, "preload-error": true, "unresponsive": true } }; externalApi = void 0; level = "error"; scope = ""; constructor(options = {}) { this.setOptions(options); } setOptions({ events, externalApi: externalApi2, level, logger, format: format2, formatters, scope: scope2 }) { if (typeof events === "object") { this.events = events; } if (typeof externalApi2 === "object") { this.externalApi = externalApi2; } if (typeof level === "string") { this.level = level; } if (typeof logger === "object") { this.logger = logger; } if (typeof format2 === "string" || typeof format2 === "function") { this.format = format2; } if (typeof formatters === "object") { this.formatters = formatters; } if (typeof scope2 === "string") { this.scope = scope2; } } startLogging(options = {}) { this.setOptions(options); this.disposeListeners(); for (const eventName of this.getEventNames(this.events.app)) { this.disposers.push( this.externalApi.onAppEvent(eventName, (...handlerArgs) => { this.handleEvent({ eventSource: "app", eventName, handlerArgs }); }) ); } for (const eventName of this.getEventNames(this.events.webContents)) { this.disposers.push( this.externalApi.onEveryWebContentsEvent( eventName, (...handlerArgs) => { this.handleEvent( { eventSource: "webContents", eventName, handlerArgs } ); } ) ); } } stopLogging() { this.disposeListeners(); } arrayToObject(array, fieldNames) { const obj = {}; fieldNames.forEach((fieldName, index) => { obj[fieldName] = array[index]; }); if (array.length > fieldNames.length) { obj.unknownArgs = array.slice(fieldNames.length); } return obj; } disposeListeners() { this.disposers.forEach((disposer) => disposer()); this.disposers = []; } formatEventLog({ eventName, eventSource, handlerArgs }) { const [event, ...args] = handlerArgs; if (typeof this.format === "function") { return this.format({ args, event, eventName, eventSource }); } const formatter = this.formatters[eventSource]?.[eventName]; let formattedArgs = args; if (typeof formatter === "function") { formattedArgs = formatter({ args, event, eventName, eventSource }); } if (!formattedArgs) { return void 0; } const eventData = {}; if (Array.isArray(formattedArgs)) { eventData.args = formattedArgs; } else if (typeof formattedArgs === "object") { Object.assign(eventData, formattedArgs); } if (eventSource === "webContents") { Object.assign(eventData, this.getWebContentsDetails(event?.sender)); } const title = this.format.replace("{eventSource}", eventSource === "app" ? "App" : "WebContents").replace("{eventName}", eventName); return [title, eventData]; } getEventNames(eventMap) { if (!eventMap || typeof eventMap !== "object") { return []; } return Object.entries(eventMap).filter(([_, listen]) => listen).map(([eventName]) => eventName); } getWebContentsDetails(webContents) { if (!webContents?.loadURL) { return {}; } try { return { webContents: { id: webContents.id, url: webContents.getURL() } }; } catch { return {}; } } handleEvent({ eventName, eventSource, handlerArgs }) { const log2 = this.formatEventLog({ eventName, eventSource, handlerArgs }); if (log2) { const logFns = this.scope ? this.logger.scope(this.scope) : this.logger; logFns?.[this.level]?.(...log2); } } }; var EventLogger_1 = EventLogger$1; var transform_1 = { transform: transform$5 }; function transform$5({ logger, message, transport, initialData = message?.data || [], transforms = transport?.transforms }) { return transforms.reduce((data, trans) => { if (typeof trans === "function") { return trans({ data, logger, message, transport }); } return data; }, initialData); } const { transform: transform$4 } = transform_1; var format$2 = { concatFirstStringElements: concatFirstStringElements$1, formatScope, formatText, formatVariables, timeZoneFromOffset, format({ message, logger, transport, data = message?.data }) { switch (typeof transport.format) { case "string": { return transform$4({ message, logger, transforms: [formatVariables, formatScope, formatText], transport, initialData: [transport.format, ...data] }); } case "function": { return transport.format({ data, level: message?.level || "info", logger, message, transport }); } default: { return data; } } } }; function concatFirstStringElements$1({ data }) { if (typeof data[0] !== "string" || typeof data[1] !== "string") { return data; } if (data[0].match(/%[1cdfiOos]/)) { return data; } return [`${data[0]} ${data[1]}`, ...data.slice(2)]; } function timeZoneFromOffset(minutesOffset) { const minutesPositive = Math.abs(minutesOffset); const sign = minutesOffset >= 0 ? "-" : "+"; const hours = Math.floor(minutesPositive / 60).toString().padStart(2, "0"); const minutes = (minutesPositive % 60).toString().padStart(2, "0"); return `${sign}${hours}:${minutes}`; } function formatScope({ data, logger, message }) { const { defaultLabel, labelLength } = logger?.scope || {}; const template = data[0]; let label = message.scope; if (!label) { label = defaultLabel; } let scopeText; if (label === "") { scopeText = labelLength > 0 ? "".padEnd(labelLength + 3) : ""; } else if (typeof label === "string") { scopeText = ` (${label})`.padEnd(labelLength + 3); } else { scopeText = ""; } data[0] = template.replace("{scope}", scopeText); return data; } function formatVariables({ data, message }) { let template = data[0]; if (typeof template !== "string") { return data; } template = template.replace("{level}]", `${message.level}]`.padEnd(6, " ")); const date = message.date || /* @__PURE__ */ new Date(); data[0] = template.replace(/\{(\w+)}/g, (substring, name) => { switch (name) { case "level": return message.level || "info"; case "logId": return message.logId; case "y": return date.getFullYear().toString(10); case "m": return (date.getMonth() + 1).toString(10).padStart(2, "0"); case "d": return date.getDate().toString(10).padStart(2, "0"); case "h": return date.getHours().toString(10).padStart(2, "0"); case "i": return date.getMinutes().toString(10).padStart(2, "0"); case "s": return date.getSeconds().toString(10).padStart(2, "0"); case "ms": return date.getMilliseconds().toString(10).padStart(3, "0"); case "z": return timeZoneFromOffset(date.getTimezoneOffset()); case "iso": return date.toISOString(); default: { return message.variables?.[name] || substring; } } }).trim(); return data; } function formatText({ data }) { const template = data[0]; if (typeof template !== "string") { return data; } const textTplPosition = template.lastIndexOf("{text}"); if (textTplPosition === template.length - 6) { data[0] = template.replace(/\s?{text}/, ""); if (data[0] === "") { data.shift(); } return data; } const templatePieces = template.split("{text}"); let result = []; if (templatePieces[0] !== "") { result.push(templatePieces[0]); } result = result.concat(data.slice(1)); if (templatePieces[1] !== "") { result.push(templatePieces[1]); } return result; } var object = { exports: {} }; (function(module) { const util = require$$4; module.exports = { serialize, maxDepth({ data, transport, depth = transport?.depth ?? 6 }) { if (!data) { return data; } if (depth < 1) { if (Array.isArray(data)) return "[array]"; if (typeof data === "object" && data) return "[object]"; return data; } if (Array.isArray(data)) { return data.map((child) => module.exports.maxDepth({ data: child, depth: depth - 1 })); } if (typeof data !== "object") { return data; } if (data && typeof data.toISOString === "function") { return data; } if (data === null) { return null; } if (data instanceof Error) { return data; } const newJson = {}; for (const i in data) { if (!Object.prototype.hasOwnProperty.call(data, i)) continue; newJson[i] = module.exports.maxDepth({ data: data[i], depth: depth - 1 }); } return newJson; }, toJSON({ data }) { return JSON.parse(JSON.stringify(data, createSerializer())); }, toString({ data, transport }) { const inspectOptions = transport?.inspectOptions || {}; const simplifiedData = data.map((item) => { if (item === void 0) { return void 0; } try { const str = JSON.stringify(item, createSerializer(), " "); return str === void 0 ? void 0 : JSON.parse(str); } catch (e) { return item; } }); return util.formatWithOptions(inspectOptions, ...simplifiedData); } }; function createSerializer(options = {}) { const seen = /* @__PURE__ */ new WeakSet(); return function(key, value2) { if (typeof value2 === "object" && value2 !== null) { if (seen.has(value2)) { return void 0; } seen.add(value2); } return serialize(key, value2, options); }; } function serialize(key, value2, options = {}) { const serializeMapAndSet = options?.serializeMapAndSet !== false; if (value2 instanceof Error) { return value2.stack; } if (!value2) { return value2; } if (typeof value2 === "function") { return `[function] ${value2.toString()}`; } if (value2 instanceof Date) { return value2.toISOString(); } if (serializeMapAndSet && value2 instanceof Map && Object.fromEntries) { return Object.fromEntries(value2); } if (serializeMapAndSet && value2 instanceof Set && Array.from) { return Array.from(value2); } return value2; } })(object); var objectExports = object.exports; var style = { transformStyles, applyAnsiStyles({ data }) { return transformStyles(data, styleToAnsi, resetAnsiStyle); }, removeStyles({ data }) { return transformStyles(data, () => ""); } }; const ANSI_COLORS = { unset: "\x1B[0m", black: "\x1B[30m", red: "\x1B[31m", green: "\x1B[32m", yellow: "\x1B[33m", blue: "\x1B[34m", magenta: "\x1B[35m", cyan: "\x1B[36m", white: "\x1B[37m" }; function styleToAnsi(style2) { const color = style2.replace(/color:\s*(\w+).*/, "$1").toLowerCase(); return ANSI_COLORS[color] || ""; } function resetAnsiStyle(string) { return string + ANSI_COLORS.unset; } function transformStyles(data, onStyleFound, onStyleApplied) { const foundStyles = {}; return data.reduce((result, item, index, array) => { if (foundStyles[index]) { return result; } if (typeof item === "string") { let valueIndex = index; let styleApplied = false; item = item.replace(/%[1cdfiOos]/g, (match2) => { valueIndex += 1; if (match2 !== "%c") { return match2; } const style2 = array[valueIndex]; if (typeof style2 === "string") { foundStyles[valueIndex] = true; styleApplied = true; return onStyleFound(style2, item); } return match2; }); if (styleApplied && onStyleApplied) { item = onStyleApplied(item); } } result.push(item); return result; }, []); } const { concatFirstStringElements, format: format$1 } = format$2; const { maxDepth: maxDepth$2, toJSON: toJSON$2 } = objectExports; const { applyAnsiStyles, removeStyles: removeStyles$2 } = style; const { transform: transform$3 } = transform_1; const consoleMethods = { error: console.error, warn: console.warn, info: console.info, verbose: console.info, debug: console.debug, silly: console.debug, log: console.log }; var console_1 = consoleTransportFactory; const separator = process.platform === "win32" ? ">" : "›"; const DEFAULT_FORMAT = `%c{h}:{i}:{s}.{ms}{scope}%c ${separator} {text}`; Object.assign(consoleTransportFactory, { DEFAULT_FORMAT }); function consoleTransportFactory(logger) { return Object.assign(transport, { format: DEFAULT_FORMAT, level: "silly", transforms: [ addTemplateColors, format$1, formatStyles, concatFirstStringElements, maxDepth$2, toJSON$2 ], useStyles: process.env.FORCE_STYLES, writeFn({ message }) { const consoleLogFn = consoleMethods[message.level] || consoleMethods.info; consoleLogFn(...message.data); } }); function transport(message) { const data = transform$3({ logger, message, transport }); transport.writeFn({ message: { ...message, data } }); } } function addTemplateColors({ data, message, transport }) { if (transport.format !== DEFAULT_FORMAT) { return data; } return [`color:${levelToStyle(message.level)}`, "color:unset", ...data]; } function canUseStyles(useStyleValue, level) { if (typeof useStyleValue === "boolean") { return useStyleValue; } const useStderr = level === "error" || level === "warn"; const stream = useStderr ? process.stderr : process.stdout; return stream && stream.isTTY; } function formatStyles(args) { const { message, transport } = args; const useStyles = canUseStyles(transport.useStyles, message.level); const nextTransform = useStyles ? applyAnsiStyles : removeStyles$2; return nextTransform(args); } function levelToStyle(level) { const map = { error: "red", warn: "yellow", info: "cyan", default: "unset" }; return map[level] || map.default; } const EventEmitter$1 = require$$0$4; const fs$2 = require$$1; const os$1 = require$$1$1; let File$2 = class File extends EventEmitter$1 { asyncWriteQueue = []; bytesWritten = 0; hasActiveAsyncWriting = false; path = null; initialSize = void 0; writeOptions = null; writeAsync = false; constructor({ path: path2, writeOptions = { encoding: "utf8", flag: "a", mode: 438 }, writeAsync = false }) { super(); this.path = path2; this.writeOptions = writeOptions; this.writeAsync = writeAsync; } get size() { return this.getSize(); } clear() { try { fs$2.writeFileSync(this.path, "", { mode: this.writeOptions.mode, flag: "w" }); this.reset(); return true; } catch (e) { if (e.code === "ENOENT") { return true; } this.emit("error", e, this); return false; } } crop(bytesAfter) { try { const content = readFileSyncFromEnd(this.path, bytesAfter || 4096); this.clear(); this.writeLine(`[log cropped]${os$1.EOL}${content}`); } catch (e) { this.emit( "error", new Error(`Couldn't crop file ${this.path}. ${e.message}`), this ); } } getSize() { if (this.initialSize === void 0) { try { const stats = fs$2.statSync(this.path); this.initialSize = stats.size; } catch (e) { this.initialSize = 0; } } return this.initialSize + this.bytesWritten; } increaseBytesWrittenCounter(text) { this.bytesWritten += Buffer.byteLength(text, this.writeOptions.encoding); } isNull() { return false; } nextAsyncWrite() { const file2 = this; if (this.hasActiveAsyncWriting || this.asyncWriteQueue.length === 0) { return; } const text = this.asyncWriteQueue.join(""); this.asyncWriteQueue = []; this.hasActiveAsyncWriting = true; fs$2.writeFile(this.path, text, this.writeOptions, (e) => { file2.hasActiveAsyncWriting = false; if (e) { file2.emit( "error", new Error(`Couldn't write to ${file2.path}. ${e.message}`), this ); } else { file2.increaseBytesWrittenCounter(text); } file2.nextAsyncWrite(); }); } reset() { this.initialSize = void 0; this.bytesWritten = 0; } toString() { return this.path; } writeLine(text) { text += os$1.EOL; if (this.writeAsync) { this.asyncWriteQueue.push(text); this.nextAsyncWrite(); return; } try { fs$2.writeFileSync(this.path, text, this.writeOptions); this.increaseBytesWrittenCounter(text); } catch (e) { this.emit( "error", new Error(`Couldn't write to ${this.path}. ${e.message}`), this ); } } }; var File_1 = File$2; function readFileSyncFromEnd(filePath, bytesCount) { const buffer = Buffer.alloc(bytesCount); const stats = fs$2.statSync(filePath); const readLength = Math.min(stats.size, bytesCount); const offset = Math.max(0, stats.size - bytesCount); const fd = fs$2.openSync(filePath, "r"); const totalBytes = fs$2.readSync(fd, buffer, 0, readLength, offset); fs$2.closeSync(fd); return buffer.toString("utf8", 0, totalBytes); } const File$1 = File_1; let NullFile$1 = class NullFile extends File$1 { clear() { } crop() { } getSize() { return 0; } isNull() { return true; } writeLine() { } }; var NullFile_1 = NullFile$1; const EventEmitter = require$$0$4; const fs$1 = require$$1; const path$2 = require$$2; const File2 = File_1; const NullFile2 = NullFile_1; let FileRegistry$1 = class FileRegistry extends EventEmitter { store = {}; constructor() { super(); this.emitError = this.emitError.bind(this); } /** * Provide a File object corresponding to the filePath * @param {string} filePath * @param {WriteOptions} [writeOptions] * @param {boolean} [writeAsync] * @return {File} */ provide({ filePath, writeOptions, writeAsync = false }) { let file2; try { filePath = path$2.resolve(filePath); if (this.store[filePath]) { return this.store[filePath]; } file2 = this.createFile({ filePath, writeOptions, writeAsync }); } catch (e) { file2 = new NullFile2({ path: filePath }); this.emitError(e, file2); } file2.on("error", this.emitError); this.store[filePath] = file2; return file2; } /** * @param {string} filePath * @param {WriteOptions} writeOptions * @param {boolean} async * @return {File} * @private */ createFile({ filePath, writeOptions, writeAsync }) { this.testFileWriting(filePath); return new File2({ path: filePath, writeOptions, writeAsync }); } /** * @param {Error} error * @param {File} file * @private */ emitError(error, file2) { this.emit("error", error, file2); } /** * @param {string} filePath * @private */ testFileWriting(filePath) { fs$1.mkdirSync(path$2.dirname(filePath), { recursive: true }); fs$1.writeFileSync(filePath, "", { flag: "a" }); } }; var FileRegistry_1 = FileRegistry$1; const fs = require$$1; const os = require$$1$1; const path$1 = require$$2; const FileRegistry2 = FileRegistry_1; const { transform: transform$2 } = transform_1; const { removeStyles: removeStyles$1 } = style; const { format } = format$2; const { toString } = objectExports; var file = fileTransportFactory; const globalRegistry = new FileRegistry2(); function fileTransportFactory(logger, { registry = globalRegistry, externalApi: externalApi2 } = {}) { let pathVariables; if (registry.listenerCount("error") < 1) { registry.on("error", (e, file2) => { logConsole(`Can't write to ${file2}`, e); }); } return Object.assign(transport, { fileName: getDefaultFileName(logger.variables.processType), format: "[{y}-{m}-{d} {h}:{i}:{s}.{ms}] [{level}]{scope} {text}", getFile, inspectOptions: { depth: 5 }, level: "silly", maxSize: 1024 ** 2, readAllLogs, sync: true, transforms: [removeStyles$1, format, toString], writeOptions: { flag: "a", mode: 438, encoding: "utf8" }, archiveLogFn(file2) { const oldPath = file2.toString(); const inf = path$1.parse(oldPath); try { fs.renameSync(oldPath, path$1.join(inf.dir, `${inf.name}.old${inf.ext}`)); } catch (e) { logConsole("Could not rotate log", e); const quarterOfMaxSize = Math.round(transport.maxSize / 4); file2.crop(Math.min(quarterOfMaxSize, 256 * 1024)); } }, resolvePathFn(vars) { return path$1.join(vars.libraryDefaultDir, vars.fileName); } }); function transport(message) { const file2 = getFile(message); const needLogRotation = transport.maxSize > 0 && file2.size > transport.maxSize; if (needLogRotation) { transport.archiveLogFn(file2); file2.reset(); } const content = transform$2({ logger, message, transport }); file2.writeLine(content); } function initializeOnFirstAccess() { if (pathVariables) { return; } pathVariables = Object.create( Object.prototype, { ...Object.getOwnPropertyDescriptors( externalApi2.getPathVariables() ), fileName: { get() { return transport.fileName; }, enumerable: true } } ); if (typeof transport.archiveLog === "function") { transport.archiveLogFn = transport.archiveLog; logConsole("archiveLog is deprecated. Use archiveLogFn instead"); } if (typeof transport.resolvePath === "function") { transport.resolvePathFn = transport.resolvePath; logConsole("resolvePath is deprecated. Use resolvePathFn instead"); } } function logConsole(message, error = null, level = "error") { const data = [`electron-log.transports.file: ${message}`]; if (error) { data.push(error); } logger.transports.console({ data, date: /* @__PURE__ */ new Date(), level }); } function getFile(msg) { initializeOnFirstAccess(); const filePath = transport.resolvePathFn(pathVariables, msg); return registry.provide({ filePath, writeAsync: !transport.sync, writeOptions: transport.writeOptions }); } function readAllLogs({ fileFilter = (f) => f.endsWith(".log") } = {}) { const logsPath = path$1.dirname(transport.resolvePathFn(pathVariables)); return fs.readdirSync(logsPath).map((fileName) => path$1.join(logsPath, fileName)).filter(fileFilter).map((logPath) => { try { return { path: logPath, lines: fs.readFileSync(logPath, "utf8").split(os.EOL) }; } catch { return null; } }).filter(Boolean); } } function getDefaultFileName(processType = process.type) { switch (processType) { case "renderer": return "renderer.log"; case "worker": return "worker.log"; default: return "main.log"; } } const { maxDepth: maxDepth$1, toJSON: toJSON$1 } = objectExports; const { transform: transform$1 } = transform_1; var ipc = ipcTransportFactory; function ipcTransportFactory(logger, { externalApi: externalApi2 }) { Object.assign(transport, { depth: 3, eventId: "__ELECTRON_LOG_IPC__", level: logger.isDev ? "silly" : false, transforms: [toJSON$1, maxDepth$1] }); return externalApi2?.isElectron() ? transport : void 0; function transport(message) { externalApi2?.sendIpc(transport.eventId, { ...message, data: transform$1({ logger, message, transport }) }); } } const http$1 = require$$0$5; const https = require$$1$2; const { transform } = transform_1; const { removeStyles } = style; const { toJSON, maxDepth } = objectExports; var remote = remoteTransportFactory; function remoteTransportFactory(logger) { return Object.assign(transport, { client: { name: "electron-application" }, depth: 6, level: false, requestOptions: {}, transforms: [removeStyles, toJSON, maxDepth], makeBodyFn({ message }) { return JSON.stringify({ client: transport.client, data: message.data, date: message.date.getTime(), level: message.level, scope: message.scope, variables: message.variables }); }, processErrorFn({ error }) { logger.processMessage( { data: [`electron-log: can't POST ${transport.url}`, error], level: "warn" }, { transports: ["console", "file"] } ); }, sendRequestFn({ serverUrl, requestOptions, body }) { const httpTransport = serverUrl.startsWith("https:") ? https : http$1; const request = httpTransport.request(serverUrl, { method: "POST", ...requestOptions, headers: { "Content-Type": "application/json", "Content-Length": body.length, ...requestOptions.headers } }); request.write(body); request.end(); return request; } }); function transport(message) { if (!transport.url) { return; } const body = transport.makeBodyFn({ logger, message: { ...message, data: transform({ logger, message, transport }) }, transport }); const request = transport.sendRequestFn({ serverUrl: transport.url, requestOptions: transport.requestOptions, body: Buffer.from(body, "utf8") }); request.on("error", (error) => transport.processErrorFn({ error, logger, message, request, transport })); } } const Logger2 = Logger_1; const ErrorHandler2 = ErrorHandler_1; const EventLogger2 = EventLogger_1; const transportConsole = console_1; const transportFile = file; const transportIpc = ipc; const transportRemote = remote; var createDefaultLogger_1 = createDefaultLogger$1; function createDefaultLogger$1({ dependencies, initializeFn }) { const defaultLogger2 = new Logger2({ dependencies, errorHandler: new ErrorHandler2(), eventLogger: new EventLogger2(), initializeFn, isDev: dependencies.externalApi?.isDev(), logId: "default", transportFactories: { console: transportConsole, file: transportFile, ipc: transportIpc, remote: transportRemote }, variables: { processType: "main" } }); defaultLogger2.default = defaultLogger2; defaultLogger2.Logger = Logger2; defaultLogger2.processInternalErrorFn = (e) => { defaultLogger2.transports.console.writeFn({ message: { data: ["Unhandled electron-log error", e], level: "error" } }); }; return defaultLogger2; } const electron = electron$2; const ElectronExternalApi2 = ElectronExternalApi_1; const { initialize } = initialize$1; const createDefaultLogger = createDefaultLogger_1; const externalApi = new ElectronExternalApi2({ electron }); const defaultLogger = createDefaultLogger({ dependencies: { externalApi }, initializeFn: initialize }); var main$1 = defaultLogger; externalApi.onIpc("__ELECTRON_LOG__", (_, message) => { if (message.scope) { defaultLogger.Logger.getInstance(message).scope(message.scope); } const date = new Date(message.date); processMessage({ ...message, date: date.getTime() ? date : /* @__PURE__ */ new Date() }); }); externalApi.onIpcInvoke("__ELECTRON_LOG__", (_, { cmd = "", logId }) => { switch (cmd) { case "getOptions": { const logger = defaultLogger.Logger.getInstance({ logId }); return { levels: logger.levels, logId }; } default: { processMessage({ data: [`Unknown cmd '${cmd}'`], level: "error" }); return {}; } } }); function processMessage(message) { defaultLogger.Logger.getInstance(message)?.processMessage(message); } const main = main$1; var main_1 = main; const log = /* @__PURE__ */ getDefaultExportFromCjs(main_1); function every(arr, cb) { var i = 0, len = arr.length; for (; i < len; i++) { if (!cb(arr[i], i, arr)) { return false; } } return true; } const SEP = "/"; const STYPE = 0, PTYPE = 1, ATYPE = 2, OTYPE = 3; const SLASH = 47, COLON = 58, ASTER = 42, QMARK = 63; function strip(str) { if (str === SEP) return str; str.charCodeAt(0) === SLASH && (str = str.substring(1)); var len = str.length - 1; return str.charCodeAt(len) === SLASH ? str.substring(0, len) : str; } function split(str) { return (str = strip(str)) === SEP ? [SEP] : str.split(SEP); } function isMatch(arr, obj, idx) { idx = arr[idx]; return obj.val === idx && obj.type === STYPE || (idx === SEP ? obj.type > PTYPE : obj.type !== STYPE && (idx || "").endsWith(obj.end)); } function match$1(str, all) { var i = 0, tmp, segs = split(str), len = segs.length, l; var fn = isMatch.bind(isMatch, segs); for (; i < all.length; i++) { tmp = all[i]; if ((l = tmp.length) === len || l < len && tmp[l - 1].type === ATYPE || l > len && tmp[l - 1].type === OTYPE) { if (every(tmp, fn)) return tmp; } } return []; } function parse$2(str) { if (str === SEP) { return [{ old: str, type: STYPE, val: str, end: "" }]; } var c, x, t, sfx, nxt = strip(str), i = -1, j = 0, len = nxt.length, out = []; while (++i < len) { c = nxt.charCodeAt(i); if (c === COLON) { j = i + 1; t = PTYPE; x = 0; sfx = ""; while (i < len && nxt.charCodeAt(i) !== SLASH) { c = nxt.charCodeAt(i); if (c === QMARK) { x = i; t = OTYPE; } else if (c === 46 && sfx.length === 0) { sfx = nxt.substring(x = i); } i++; } out.push({ old: str, type: t, val: nxt.substring(j, x || i), end: sfx }); nxt = nxt.substring(i); len -= i; i = 0; continue; } else if (c === ASTER) { out.push({ old: str, type: ATYPE, val: nxt.substring(i), end: "" }); continue; } else { j = i; while (i < len && nxt.charCodeAt(i) !== SLASH) { ++i; } out.push({ old: str, type: STYPE, val: nxt.substring(j, i), end: "" }); nxt = nxt.substring(i); len -= i; i = j = 0; } } return out; } function exec$1(str, arr) { var i = 0, x, y, segs = split(str), out = {}; for (; i < arr.length; i++) { x = segs[i]; y = arr[i]; if (x === SEP) continue; if (x !== void 0 && y.type | 2 === OTYPE) { out[y.val] = x.replace(y.end, ""); } } return out; } const matchit = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, exec: exec$1, match: match$1, parse: parse$2 }, Symbol.toStringTag, { value: "Module" })); const require$$0 = /* @__PURE__ */ getAugmentedNamespace(matchit); const { exec, match, parse: parse$1 } = require$$0; class Trouter { constructor(opts) { this.opts = opts || {}; this.routes = {}; this.handlers = {}; this.all = this.add.bind(this, "*"); this.get = this.add.bind(this, "GET"); this.head = this.add.bind(this, "HEAD"); this.patch = this.add.bind(this, "PATCH"); this.options = this.add.bind(this, "OPTIONS"); this.connect = this.add.bind(this, "CONNECT"); this.delete = this.add.bind(this, "DELETE"); this.trace = this.add.bind(this, "TRACE"); this.post = this.add.bind(this, "POST"); this.put = this.add.bind(this, "PUT"); } add(method, pattern, ...fns) { if (this.routes[method] === void 0) this.routes[method] = []; this.routes[method].push(parse$1(pattern)); if (this.handlers[method] === void 0) this.handlers[method] = {}; this.handlers[method][pattern] = fns; return this; } find(method, url2) { let arr = match(url2, this.routes[method] || []); if (arr.length === 0) { arr = match(url2, this.routes[method = "*"] || []); if (!arr.length) return false; } return { params: exec(url2, arr), handlers: this.handlers[method][arr[0].old] }; } } var trouter = Trouter; var url = function(req) { let url2 = req.url; if (url2 === void 0) return url2; let obj = req._parsedUrl; if (obj && obj._raw === url2) return obj; obj = {}; obj.query = obj.search = null; obj.href = obj.path = obj.pathname = url2; let idx = url2.indexOf("?", 1); if (idx !== -1) { obj.search = url2.substring(idx); obj.query = obj.search.substring(1); obj.pathname = url2.substring(0, idx); } obj._raw = url2; return req._parsedUrl = obj; }; const http = require$$0$5; const Router = trouter; const { parse } = require$$2$1; const parser = url; function lead(x) { return x.charCodeAt(0) === 47 ? x : "/" + x; } function value(x) { let y = x.indexOf("/", 1); return y > 1 ? x.substring(0, y) : x; } function mutate(str, req) { req.url = req.url.substring(str.length) || "/"; req.path = req.path.substring(str.length) || "/"; } function onError(err, req, res, next) { let code = res.statusCode = err.code || err.status || 500; res.end(err.length && err || err.message || http.STATUS_CODES[code]); } class Polka extends Router { constructor(opts = {}) { super(opts); this.apps = {}; this.wares = []; this.bwares = {}; this.parse = parser; this.server = opts.server; this.handler = this.handler.bind(this); this.onError = opts.onError || onError; this.onNoMatch = opts.onNoMatch || this.onError.bind(null, { code: 404 }); } add(method, pattern, ...fns) { let base = lead(value(pattern)); if (this.apps[base] !== void 0) throw new Error(`Cannot mount ".${method.toLowerCase()}('${lead(pattern)}')" because a Polka application at ".use('${base}')" already exists! You should move this handler into your Polka application instead.`); return super.add(method, pattern, ...fns); } use(base, ...fns) { if (typeof base === "function") { this.wares = this.wares.concat(base, fns); } else if (base === "/") { this.wares = this.wares.concat(fns); } else { base = lead(base); fns.forEach((fn) => { if (fn instanceof Polka) { this.apps[base] = fn; } else { let arr = this.bwares[base] || []; arr.length > 0 || arr.push((r, _, nxt) => (mutate(base, r), nxt())); this.bwares[base] = arr.concat(fn); } }); } return this; } listen() { (this.server = this.server || http.createServer()).on("request", this.handler); this.server.listen.apply(this.server, arguments); return this; } handler(req, res, info) { info = info || this.parse(req); let fns = [], arr = this.wares, obj = this.find(req.method, info.pathname); req.originalUrl = req.originalUrl || req.url; let base = value(req.path = info.pathname); if (this.bwares[base] !== void 0) { arr = arr.concat(this.bwares[base]); } if (obj) { fns = obj.handlers; req.params = obj.params; } else if (this.apps[base] !== void 0) { mutate(base, req); info.pathname = req.path; fns.push(this.apps[base].handler.bind(null, req, res, info)); } else if (fns.length === 0) { fns.push(this.onNoMatch); } req.search = info.search; req.query = parse(info.query); let i = 0, len = arr.length, num = fns.length; if (len === i && num === 1) return fns[0](req, res); let next = (err) => err ? this.onError(err, req, res, next) : loop(); let loop = (_) => res.finished || i < len && arr[i++](req, res, next); arr = arr.concat(fns); len += num; loop(); } } var polka = (opts) => new Polka(opts); const polka$1 = /* @__PURE__ */ getDefaultExportFromCjs(polka); const start = async () => { if (isDev) return void 0; const { env: env2 } = await await import(`file://${path$9.join(__dirname, "../renderer/env.js")}`); const port2 = env2("PORT", "3000"); log.info(`Configured Port is: ${port2}`); log.info(`Setting origin to http://127.0.0.1:${port2}`); process.env["ORIGIN"] = `http://127.0.0.1:${port2}`; log.info("Importing Polka handler"); const { handler } = await import(`file://${path$9.join(__dirname, "../renderer/handler.js")}`); const server = polka$1().use(handler); Object.assign(console, log.functions); log.info("Starting server..."); server.listen({ path: false, host: "127.0.0.1", port: port2 }, () => { log.info(`Server Listening on http://127.0.0.1:${port2}`); }); return port2; }; const load = (mainWindow, port2) => { if (isDev && process.env["ELECTRON_RENDERER_URL"]) { log.info(`Loading url: ${process.env["ELECTRON_RENDERER_URL"]}`); mainWindow.loadURL(process.env["ELECTRON_RENDERER_URL"]); } else { log.info(`Loading url: http://127.0.0.1:${port2}`); mainWindow.loadURL(`http://127.0.0.1:${port2}`); } }; var src = { exports: {} }; var browser = { exports: {} }; var debug$1 = { exports: {} }; var ms; var hasRequiredMs; function requireMs() { if (hasRequiredMs) return ms; hasRequiredMs = 1; var s = 1e3; var m = s * 60; var h = m * 60; var d = h * 24; var y = d * 365.25; ms = function(val, options) { options = options || {}; var type = typeof val; if (type === "string" && val.length > 0) { return parse2(val); } else if (type === "number" && isNaN(val) === false) { 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 parse2(str) { str = String(str); if (str.length > 100) { return; } var match2 = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec( str ); if (!match2) { return; } var n = parseFloat(match2[1]); var type = (match2[2] || "ms").toLowerCase(); switch (type) { case "years": case "year": case "yrs": case "yr": case "y": return n * y; 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(ms2) { if (ms2 >= d) { return Math.round(ms2 / d) + "d"; } if (ms2 >= h) { return Math.round(ms2 / h) + "h"; } if (ms2 >= m) { return Math.round(ms2 / m) + "m"; } if (ms2 >= s) { return Math.round(ms2 / s) + "s"; } return ms2 + "ms"; } function fmtLong(ms2) { return plural(ms2, d, "day") || plural(ms2, h, "hour") || plural(ms2, m, "minute") || plural(ms2, s, "second") || ms2 + " ms"; } function plural(ms2, n, name) { if (ms2 < n) { return; } if (ms2 < n * 1.5) { return Math.floor(ms2 / n) + " " + name; } return Math.ceil(ms2 / n) + " " + name + "s"; } return ms; } var hasRequiredDebug; function requireDebug() { if (hasRequiredDebug) return debug$1.exports; hasRequiredDebug = 1; (function(module, exports) { exports = module.exports = createDebug.debug = createDebug["default"] = createDebug; exports.coerce = coerce; exports.disable = disable; exports.enable = enable; exports.enabled = enabled; exports.humanize = requireMs(); exports.names = []; exports.skips = []; exports.formatters = {}; var prevTime; function selectColor(namespace) { var hash = 0, i; for (i in namespace) { hash = (hash << 5) - hash + namespace.charCodeAt(i); hash |= 0; } return exports.colors[Math.abs(hash) % exports.colors.length]; } function createDebug(namespace) { function debug2() { if (!debug2.enabled) return; var self2 = debug2; var curr = +/* @__PURE__ */ new Date(); var ms2 = curr - (prevTime || curr); self2.diff = ms2; self2.prev = prevTime; self2.curr = curr; prevTime = curr; var args = new Array(arguments.length); for (var i = 0; i < args.length; i++) { args[i] = arguments[i]; } args[0] = exports.coerce(args[0]); if ("string" !== typeof args[0]) { args.unshift("%O"); } var index = 0; args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match2, format2) { if (match2 === "%%") return match2; index++; var formatter = exports.formatters[format2]; if ("function" === typeof formatter) { var val = args[index]; match2 = formatter.call(self2, val); args.splice(index, 1); index--; } return match2; }); exports.formatArgs.call(self2, args); var logFn = debug2.log || exports.log || console.log.bind(console); logFn.apply(self2, args); } debug2.namespace = namespace; debug2.enabled = exports.enabled(namespace); debug2.useColors = exports.useColors(); debug2.color = selectColor(namespace); if ("function" === typeof exports.init) { exports.init(debug2); } return debug2; } function enable(namespaces) { exports.save(namespaces); exports.names = []; exports.skips = []; var split2 = (typeof namespaces === "string" ? namespaces : "").split(/[\s,]+/); var len = split2.length; for (var i = 0; i < len; i++) { if (!split2[i]) continue; namespaces = split2[i].replace(/\*/g, ".*?"); if (namespaces[0] === "-") { exports.skips.push(new RegExp("^" + namespaces.substr(1) + "$")); } else { exports.names.push(new RegExp("^" + namespaces + "$")); } } } function disable() { exports.enable(""); } function enabled(name) { var i, len; for (i = 0, len = exports.skips.length; i < len; i++) { if (exports.skips[i].test(name)) { return false; } } for (i = 0, len = exports.names.length; i < len; i++) { if (exports.names[i].test(name)) { return true; } } return false; } function coerce(val) { if (val instanceof Error) return val.stack || val.message; return val; } })(debug$1, debug$1.exports); return debug$1.exports; } var hasRequiredBrowser; function requireBrowser() { if (hasRequiredBrowser) return browser.exports; hasRequiredBrowser = 1; (function(module, exports) { exports = module.exports = requireDebug(); exports.log = log2; exports.formatArgs = formatArgs; exports.save = save; exports.load = load2; exports.useColors = useColors; exports.storage = "undefined" != typeof chrome && "undefined" != typeof chrome.storage ? chrome.storage.local : localstorage(); exports.colors = [ "lightseagreen", "forestgreen", "goldenrod", "dodgerblue", "darkorchid", "crimson" ]; function useColors() { if (typeof window !== "undefined" && window.process && window.process.type === "renderer") { return true; } 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+)/); } exports.formatters.j = function(v) { try { return JSON.stringify(v); } catch (err) { return "[UnexpectedJSONParseError]: " + err.message; } }; function formatArgs(args) { var useColors2 = this.useColors; args[0] = (useColors2 ? "%c" : "") + this.namespace + (useColors2 ? " %c" : " ") + args[0] + (useColors2 ? "%c " : " ") + "+" + exports.humanize(this.diff); if (!useColors2) return; var c = "color: " + this.color; args.splice(1, 0, c, "color: inherit"); var index = 0; var lastC = 0; args[0].replace(/%[a-zA-Z%]/g, function(match2) { if ("%%" === match2) return; index++; if ("%c" === match2) { lastC = index; } }); args.splice(lastC, 0, c); } function log2() { return "object" === typeof console && console.log && Function.prototype.apply.call(console.log, console, arguments); } function save(namespaces) { try { if (null == namespaces) { exports.storage.removeItem("debug"); } else { exports.storage.debug = namespaces; } } catch (e) { } } function load2() { var r; try { r = exports.storage.debug; } catch (e) { } if (!r && typeof process !== "undefined" && "env" in process) { r = process.env.DEBUG; } return r; } exports.enable(load2()); function localstorage() { try { return window.localStorage; } catch (e) { } } })(browser, browser.exports); return browser.exports; } var node = { exports: {} }; var hasRequiredNode; function requireNode() { if (hasRequiredNode) return node.exports; hasRequiredNode = 1; (function(module, exports) { var tty = require$$0$6; var util = require$$4; exports = module.exports = requireDebug(); exports.init = init; exports.log = log2; exports.formatArgs = formatArgs; exports.save = save; exports.load = load2; exports.useColors = useColors; exports.colors = [6, 2, 3, 4, 5, 1]; exports.inspectOpts = Object.keys(process.env).filter(function(key) { return /^debug_/i.test(key); }).reduce(function(obj, key) { var prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, function(_, k) { return k.toUpperCase(); }); var val = process.env[key]; if (/^(yes|on|true|enabled)$/i.test(val)) val = true; else if (/^(no|off|false|disabled)$/i.test(val)) val = false; else if (val === "null") val = null; else val = Number(val); obj[prop] = val; return obj; }, {}); var fd = parseInt(process.env.DEBUG_FD, 10) || 2; if (1 !== fd && 2 !== fd) { util.deprecate(function() { }, "except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)")(); } var stream = 1 === fd ? process.stdout : 2 === fd ? process.stderr : createWritableStdioStream(fd); function useColors() { return "colors" in exports.inspectOpts ? Boolean(exports.inspectOpts.colors) : tty.isatty(fd); } exports.formatters.o = function(v) { this.inspectOpts.colors = this.useColors; return util.inspect(v, this.inspectOpts).split("\n").map(function(str) { return str.trim(); }).join(" "); }; exports.formatters.O = function(v) { this.inspectOpts.colors = this.useColors; return util.inspect(v, this.inspectOpts); }; function formatArgs(args) { var name = this.namespace; var useColors2 = this.useColors; if (useColors2) { var c = this.color; var prefix = " \x1B[3" + c + ";1m" + name + " \x1B[0m"; args[0] = prefix + args[0].split("\n").join("\n" + prefix); args.push("\x1B[3" + c + "m+" + exports.humanize(this.diff) + "\x1B[0m"); } else { args[0] = (/* @__PURE__ */ new Date()).toUTCString() + " " + name + " " + args[0]; } } function log2() { return stream.write(util.format.apply(util, arguments) + "\n"); } function save(namespaces) { if (null == namespaces) { delete process.env.DEBUG; } else { process.env.DEBUG = namespaces; } } function load2() { return process.env.DEBUG; } function createWritableStdioStream(fd2) { var stream2; var tty_wrap = process.binding("tty_wrap"); switch (tty_wrap.guessHandleType(fd2)) { case "TTY": stream2 = new tty.WriteStream(fd2); stream2._type = "tty"; if (stream2._handle && stream2._handle.unref) { stream2._handle.unref(); } break; case "FILE": var fs2 = require$$1; stream2 = new fs2.SyncWriteStream(fd2, { autoClose: false }); stream2._type = "fs"; break; case "PIPE": case "TCP": var net = require$$4$1; stream2 = new net.Socket({ fd: fd2, readable: false, writable: true }); stream2.readable = false; stream2.read = null; stream2._type = "pipe"; if (stream2._handle && stream2._handle.unref) { stream2._handle.unref(); } break; default: throw new Error("Implement me. Unknown stream file type!"); } stream2.fd = fd2; stream2._isStdio = true; return stream2; } function init(debug2) { debug2.inspectOpts = {}; var keys = Object.keys(exports.inspectOpts); for (var i = 0; i < keys.length; i++) { debug2.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; } } exports.enable(load2()); })(node, node.exports); return node.exports; } if (typeof process !== "undefined" && process.type === "renderer") { src.exports = requireBrowser(); } else { src.exports = requireNode(); } var srcExports = src.exports; var path = require$$2; var spawn = require$$0$3.spawn; var debug = srcExports("electron-squirrel-startup"); var app = electron$2.app; var run = function(args, done) { var updateExe = path.resolve(path.dirname(process.execPath), "..", "Update.exe"); debug("Spawning `%s` with args `%s`", updateExe, args); spawn(updateExe, args, { detached: true }).on("close", done); }; var check = function() { if (process.platform === "win32") { var cmd = process.argv[1]; debug("processing squirrel command `%s`", cmd); var target = path.basename(process.execPath); if (cmd === "--squirrel-install" || cmd === "--squirrel-updated") { run(["--createShortcut=" + target], app.quit); return true; } if (cmd === "--squirrel-uninstall") { run(["--removeShortcut=" + target], app.quit); return true; } if (cmd === "--squirrel-obsolete") { app.quit(); return true; } } return false; }; var electronSquirrelStartup = check(); const ess = /* @__PURE__ */ getDefaultExportFromCjs(electronSquirrelStartup); Object.assign(console, log.functions); log.info("Hello, log!"); const port = await start(); if (ess) { app$1.quit(); } const createWindow = () => { console.log("Creating window..."); try { const windowState = windowStateManager({ defaultWidth: 1920, defaultHeight: 1080 }); const mainWindow = new BrowserWindow({ show: false, backgroundColor: "whitesmoke", titleBarStyle: "default", autoHideMenuBar: false, trafficLightPosition: { x: 17, y: 32 }, minHeight: 800, minWidth: 800, webPreferences: { contextIsolation: true, nodeIntegration: true, spellcheck: false, devTools: true, preload: path$9.join(__dirname, "../preload/index.mjs") }, x: windowState.x, y: windowState.y, width: windowState.width, height: windowState.height }); load(mainWindow, port); if (isDev) mainWindow.webContents.openDevTools(); mainWindow.once("ready-to-show", () => { mainWindow.show(); mainWindow.focus(); }); mainWindow.on("close", () => { windowState.saveState(mainWindow); }); } catch (e) { console.log("Error creating window"); console.log(e); } }; app$1.on("ready", createWindow); app$1.on("window-all-closed", () => { if (process.platform !== "darwin") { app$1.quit(); } }); app$1.on("activate", () => { if (BrowserWindow.getAllWindows().length === 0) { createWindow(); } });