{"version":3,"file":"vite.mjs","names":["module","exports"],"sources":["../../node_modules/json5/dist/index.js","../src/embed-config.ts","../src/targets.ts","../src/progress.ts","../src/prepare.ts","../src/windows-icon.ts","../src/app-icon.ts","../src/windows-resource.ts","../src/linux-desktop.ts","../src/windows-code-signing.ts","../src/build.ts","../src/capability.ts","../src/plugin-access.ts","../src/gitignore.ts","../src/vite-internals.ts","../src/vite-options.ts","../src/vite-assets.ts","../src/build-sequence.ts","../src/vite.ts"],"sourcesContent":["(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.JSON5 = factory());\n}(this, (function () { 'use strict';\n\n\tfunction createCommonjsModule(fn, module) {\n\t\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n\t}\n\n\tvar _global = createCommonjsModule(function (module) {\n\t// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\n\tvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n\t  ? window : typeof self != 'undefined' && self.Math == Math ? self\n\t  // eslint-disable-next-line no-new-func\n\t  : Function('return this')();\n\tif (typeof __g == 'number') { __g = global; } // eslint-disable-line no-undef\n\t});\n\n\tvar _core = createCommonjsModule(function (module) {\n\tvar core = module.exports = { version: '2.6.5' };\n\tif (typeof __e == 'number') { __e = core; } // eslint-disable-line no-undef\n\t});\n\tvar _core_1 = _core.version;\n\n\tvar _isObject = function (it) {\n\t  return typeof it === 'object' ? it !== null : typeof it === 'function';\n\t};\n\n\tvar _anObject = function (it) {\n\t  if (!_isObject(it)) { throw TypeError(it + ' is not an object!'); }\n\t  return it;\n\t};\n\n\tvar _fails = function (exec) {\n\t  try {\n\t    return !!exec();\n\t  } catch (e) {\n\t    return true;\n\t  }\n\t};\n\n\t// Thank's IE8 for his funny defineProperty\n\tvar _descriptors = !_fails(function () {\n\t  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n\t});\n\n\tvar document = _global.document;\n\t// typeof document.createElement is 'object' in old IE\n\tvar is = _isObject(document) && _isObject(document.createElement);\n\tvar _domCreate = function (it) {\n\t  return is ? document.createElement(it) : {};\n\t};\n\n\tvar _ie8DomDefine = !_descriptors && !_fails(function () {\n\t  return Object.defineProperty(_domCreate('div'), 'a', { get: function () { return 7; } }).a != 7;\n\t});\n\n\t// 7.1.1 ToPrimitive(input [, PreferredType])\n\n\t// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n\t// and the second argument - flag - preferred type is a string\n\tvar _toPrimitive = function (it, S) {\n\t  if (!_isObject(it)) { return it; }\n\t  var fn, val;\n\t  if (S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) { return val; }\n\t  if (typeof (fn = it.valueOf) == 'function' && !_isObject(val = fn.call(it))) { return val; }\n\t  if (!S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) { return val; }\n\t  throw TypeError(\"Can't convert object to primitive value\");\n\t};\n\n\tvar dP = Object.defineProperty;\n\n\tvar f = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n\t  _anObject(O);\n\t  P = _toPrimitive(P, true);\n\t  _anObject(Attributes);\n\t  if (_ie8DomDefine) { try {\n\t    return dP(O, P, Attributes);\n\t  } catch (e) { /* empty */ } }\n\t  if ('get' in Attributes || 'set' in Attributes) { throw TypeError('Accessors not supported!'); }\n\t  if ('value' in Attributes) { O[P] = Attributes.value; }\n\t  return O;\n\t};\n\n\tvar _objectDp = {\n\t\tf: f\n\t};\n\n\tvar _propertyDesc = function (bitmap, value) {\n\t  return {\n\t    enumerable: !(bitmap & 1),\n\t    configurable: !(bitmap & 2),\n\t    writable: !(bitmap & 4),\n\t    value: value\n\t  };\n\t};\n\n\tvar _hide = _descriptors ? function (object, key, value) {\n\t  return _objectDp.f(object, key, _propertyDesc(1, value));\n\t} : function (object, key, value) {\n\t  object[key] = value;\n\t  return object;\n\t};\n\n\tvar hasOwnProperty = {}.hasOwnProperty;\n\tvar _has = function (it, key) {\n\t  return hasOwnProperty.call(it, key);\n\t};\n\n\tvar id = 0;\n\tvar px = Math.random();\n\tvar _uid = function (key) {\n\t  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n\t};\n\n\tvar _library = false;\n\n\tvar _shared = createCommonjsModule(function (module) {\n\tvar SHARED = '__core-js_shared__';\n\tvar store = _global[SHARED] || (_global[SHARED] = {});\n\n\t(module.exports = function (key, value) {\n\t  return store[key] || (store[key] = value !== undefined ? value : {});\n\t})('versions', []).push({\n\t  version: _core.version,\n\t  mode: _library ? 'pure' : 'global',\n\t  copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n\t});\n\t});\n\n\tvar _functionToString = _shared('native-function-to-string', Function.toString);\n\n\tvar _redefine = createCommonjsModule(function (module) {\n\tvar SRC = _uid('src');\n\n\tvar TO_STRING = 'toString';\n\tvar TPL = ('' + _functionToString).split(TO_STRING);\n\n\t_core.inspectSource = function (it) {\n\t  return _functionToString.call(it);\n\t};\n\n\t(module.exports = function (O, key, val, safe) {\n\t  var isFunction = typeof val == 'function';\n\t  if (isFunction) { _has(val, 'name') || _hide(val, 'name', key); }\n\t  if (O[key] === val) { return; }\n\t  if (isFunction) { _has(val, SRC) || _hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); }\n\t  if (O === _global) {\n\t    O[key] = val;\n\t  } else if (!safe) {\n\t    delete O[key];\n\t    _hide(O, key, val);\n\t  } else if (O[key]) {\n\t    O[key] = val;\n\t  } else {\n\t    _hide(O, key, val);\n\t  }\n\t// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n\t})(Function.prototype, TO_STRING, function toString() {\n\t  return typeof this == 'function' && this[SRC] || _functionToString.call(this);\n\t});\n\t});\n\n\tvar _aFunction = function (it) {\n\t  if (typeof it != 'function') { throw TypeError(it + ' is not a function!'); }\n\t  return it;\n\t};\n\n\t// optional / simple context binding\n\n\tvar _ctx = function (fn, that, length) {\n\t  _aFunction(fn);\n\t  if (that === undefined) { return fn; }\n\t  switch (length) {\n\t    case 1: return function (a) {\n\t      return fn.call(that, a);\n\t    };\n\t    case 2: return function (a, b) {\n\t      return fn.call(that, a, b);\n\t    };\n\t    case 3: return function (a, b, c) {\n\t      return fn.call(that, a, b, c);\n\t    };\n\t  }\n\t  return function (/* ...args */) {\n\t    return fn.apply(that, arguments);\n\t  };\n\t};\n\n\tvar PROTOTYPE = 'prototype';\n\n\tvar $export = function (type, name, source) {\n\t  var IS_FORCED = type & $export.F;\n\t  var IS_GLOBAL = type & $export.G;\n\t  var IS_STATIC = type & $export.S;\n\t  var IS_PROTO = type & $export.P;\n\t  var IS_BIND = type & $export.B;\n\t  var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] || (_global[name] = {}) : (_global[name] || {})[PROTOTYPE];\n\t  var exports = IS_GLOBAL ? _core : _core[name] || (_core[name] = {});\n\t  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n\t  var key, own, out, exp;\n\t  if (IS_GLOBAL) { source = name; }\n\t  for (key in source) {\n\t    // contains in native\n\t    own = !IS_FORCED && target && target[key] !== undefined;\n\t    // export native or passed\n\t    out = (own ? target : source)[key];\n\t    // bind timers to global for call from export context\n\t    exp = IS_BIND && own ? _ctx(out, _global) : IS_PROTO && typeof out == 'function' ? _ctx(Function.call, out) : out;\n\t    // extend global\n\t    if (target) { _redefine(target, key, out, type & $export.U); }\n\t    // export\n\t    if (exports[key] != out) { _hide(exports, key, exp); }\n\t    if (IS_PROTO && expProto[key] != out) { expProto[key] = out; }\n\t  }\n\t};\n\t_global.core = _core;\n\t// type bitmap\n\t$export.F = 1;   // forced\n\t$export.G = 2;   // global\n\t$export.S = 4;   // static\n\t$export.P = 8;   // proto\n\t$export.B = 16;  // bind\n\t$export.W = 32;  // wrap\n\t$export.U = 64;  // safe\n\t$export.R = 128; // real proto method for `library`\n\tvar _export = $export;\n\n\t// 7.1.4 ToInteger\n\tvar ceil = Math.ceil;\n\tvar floor = Math.floor;\n\tvar _toInteger = function (it) {\n\t  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n\t};\n\n\t// 7.2.1 RequireObjectCoercible(argument)\n\tvar _defined = function (it) {\n\t  if (it == undefined) { throw TypeError(\"Can't call method on  \" + it); }\n\t  return it;\n\t};\n\n\t// true  -> String#at\n\t// false -> String#codePointAt\n\tvar _stringAt = function (TO_STRING) {\n\t  return function (that, pos) {\n\t    var s = String(_defined(that));\n\t    var i = _toInteger(pos);\n\t    var l = s.length;\n\t    var a, b;\n\t    if (i < 0 || i >= l) { return TO_STRING ? '' : undefined; }\n\t    a = s.charCodeAt(i);\n\t    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n\t      ? TO_STRING ? s.charAt(i) : a\n\t      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n\t  };\n\t};\n\n\tvar $at = _stringAt(false);\n\t_export(_export.P, 'String', {\n\t  // 21.1.3.3 String.prototype.codePointAt(pos)\n\t  codePointAt: function codePointAt(pos) {\n\t    return $at(this, pos);\n\t  }\n\t});\n\n\tvar codePointAt = _core.String.codePointAt;\n\n\tvar max = Math.max;\n\tvar min = Math.min;\n\tvar _toAbsoluteIndex = function (index, length) {\n\t  index = _toInteger(index);\n\t  return index < 0 ? max(index + length, 0) : min(index, length);\n\t};\n\n\tvar fromCharCode = String.fromCharCode;\n\tvar $fromCodePoint = String.fromCodePoint;\n\n\t// length should be 1, old FF problem\n\t_export(_export.S + _export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n\t  // 21.1.2.2 String.fromCodePoint(...codePoints)\n\t  fromCodePoint: function fromCodePoint(x) {\n\t    var arguments$1 = arguments;\n\t // eslint-disable-line no-unused-vars\n\t    var res = [];\n\t    var aLen = arguments.length;\n\t    var i = 0;\n\t    var code;\n\t    while (aLen > i) {\n\t      code = +arguments$1[i++];\n\t      if (_toAbsoluteIndex(code, 0x10ffff) !== code) { throw RangeError(code + ' is not a valid code point'); }\n\t      res.push(code < 0x10000\n\t        ? fromCharCode(code)\n\t        : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n\t      );\n\t    } return res.join('');\n\t  }\n\t});\n\n\tvar fromCodePoint = _core.String.fromCodePoint;\n\n\t// This is a generated file. Do not edit.\n\tvar Space_Separator = /[\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/;\n\tvar ID_Start = /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDF00-\\uDF19]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE83\\uDE86-\\uDE89\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]/;\n\tvar ID_Continue = /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u08D4-\\u08E1\\u08E3-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u09FC\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AF9-\\u0AFF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C80-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D00-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D54-\\u0D57\\u0D5F-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1CD0-\\u1CD2\\u1CD4-\\u1CF9\\u1D00-\\u1DF9\\u1DFB-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C5\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA8FD\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDCA-\\uDDCC\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDE3E\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC00-\\uDC4A\\uDC50-\\uDC59\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDDD8-\\uDDDD\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9\\uDF00-\\uDF19\\uDF1D-\\uDF2B\\uDF30-\\uDF39]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDE00-\\uDE3E\\uDE47\\uDE50-\\uDE83\\uDE86-\\uDE99\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC36\\uDC38-\\uDC40\\uDC50-\\uDC59\\uDC72-\\uDC8F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD47\\uDD50-\\uDD59]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F\\uDFE0\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6\\uDD00-\\uDD4A\\uDD50-\\uDD59]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/;\n\n\tvar unicode = {\n\t\tSpace_Separator: Space_Separator,\n\t\tID_Start: ID_Start,\n\t\tID_Continue: ID_Continue\n\t};\n\n\tvar util = {\n\t    isSpaceSeparator: function isSpaceSeparator (c) {\n\t        return typeof c === 'string' && unicode.Space_Separator.test(c)\n\t    },\n\n\t    isIdStartChar: function isIdStartChar (c) {\n\t        return typeof c === 'string' && (\n\t            (c >= 'a' && c <= 'z') ||\n\t        (c >= 'A' && c <= 'Z') ||\n\t        (c === '$') || (c === '_') ||\n\t        unicode.ID_Start.test(c)\n\t        )\n\t    },\n\n\t    isIdContinueChar: function isIdContinueChar (c) {\n\t        return typeof c === 'string' && (\n\t            (c >= 'a' && c <= 'z') ||\n\t        (c >= 'A' && c <= 'Z') ||\n\t        (c >= '0' && c <= '9') ||\n\t        (c === '$') || (c === '_') ||\n\t        (c === '\\u200C') || (c === '\\u200D') ||\n\t        unicode.ID_Continue.test(c)\n\t        )\n\t    },\n\n\t    isDigit: function isDigit (c) {\n\t        return typeof c === 'string' && /[0-9]/.test(c)\n\t    },\n\n\t    isHexDigit: function isHexDigit (c) {\n\t        return typeof c === 'string' && /[0-9A-Fa-f]/.test(c)\n\t    },\n\t};\n\n\tvar source;\n\tvar parseState;\n\tvar stack;\n\tvar pos;\n\tvar line;\n\tvar column;\n\tvar token;\n\tvar key;\n\tvar root;\n\n\tvar parse = function parse (text, reviver) {\n\t    source = String(text);\n\t    parseState = 'start';\n\t    stack = [];\n\t    pos = 0;\n\t    line = 1;\n\t    column = 0;\n\t    token = undefined;\n\t    key = undefined;\n\t    root = undefined;\n\n\t    do {\n\t        token = lex();\n\n\t        // This code is unreachable.\n\t        // if (!parseStates[parseState]) {\n\t        //     throw invalidParseState()\n\t        // }\n\n\t        parseStates[parseState]();\n\t    } while (token.type !== 'eof')\n\n\t    if (typeof reviver === 'function') {\n\t        return internalize({'': root}, '', reviver)\n\t    }\n\n\t    return root\n\t};\n\n\tfunction internalize (holder, name, reviver) {\n\t    var value = holder[name];\n\t    if (value != null && typeof value === 'object') {\n\t        if (Array.isArray(value)) {\n\t            for (var i = 0; i < value.length; i++) {\n\t                var key = String(i);\n\t                var replacement = internalize(value, key, reviver);\n\t                if (replacement === undefined) {\n\t                    delete value[key];\n\t                } else {\n\t                    Object.defineProperty(value, key, {\n\t                        value: replacement,\n\t                        writable: true,\n\t                        enumerable: true,\n\t                        configurable: true,\n\t                    });\n\t                }\n\t            }\n\t        } else {\n\t            for (var key$1 in value) {\n\t                var replacement$1 = internalize(value, key$1, reviver);\n\t                if (replacement$1 === undefined) {\n\t                    delete value[key$1];\n\t                } else {\n\t                    Object.defineProperty(value, key$1, {\n\t                        value: replacement$1,\n\t                        writable: true,\n\t                        enumerable: true,\n\t                        configurable: true,\n\t                    });\n\t                }\n\t            }\n\t        }\n\t    }\n\n\t    return reviver.call(holder, name, value)\n\t}\n\n\tvar lexState;\n\tvar buffer;\n\tvar doubleQuote;\n\tvar sign;\n\tvar c;\n\n\tfunction lex () {\n\t    lexState = 'default';\n\t    buffer = '';\n\t    doubleQuote = false;\n\t    sign = 1;\n\n\t    for (;;) {\n\t        c = peek();\n\n\t        // This code is unreachable.\n\t        // if (!lexStates[lexState]) {\n\t        //     throw invalidLexState(lexState)\n\t        // }\n\n\t        var token = lexStates[lexState]();\n\t        if (token) {\n\t            return token\n\t        }\n\t    }\n\t}\n\n\tfunction peek () {\n\t    if (source[pos]) {\n\t        return String.fromCodePoint(source.codePointAt(pos))\n\t    }\n\t}\n\n\tfunction read () {\n\t    var c = peek();\n\n\t    if (c === '\\n') {\n\t        line++;\n\t        column = 0;\n\t    } else if (c) {\n\t        column += c.length;\n\t    } else {\n\t        column++;\n\t    }\n\n\t    if (c) {\n\t        pos += c.length;\n\t    }\n\n\t    return c\n\t}\n\n\tvar lexStates = {\n\t    default: function default$1 () {\n\t        switch (c) {\n\t        case '\\t':\n\t        case '\\v':\n\t        case '\\f':\n\t        case ' ':\n\t        case '\\u00A0':\n\t        case '\\uFEFF':\n\t        case '\\n':\n\t        case '\\r':\n\t        case '\\u2028':\n\t        case '\\u2029':\n\t            read();\n\t            return\n\n\t        case '/':\n\t            read();\n\t            lexState = 'comment';\n\t            return\n\n\t        case undefined:\n\t            read();\n\t            return newToken('eof')\n\t        }\n\n\t        if (util.isSpaceSeparator(c)) {\n\t            read();\n\t            return\n\t        }\n\n\t        // This code is unreachable.\n\t        // if (!lexStates[parseState]) {\n\t        //     throw invalidLexState(parseState)\n\t        // }\n\n\t        return lexStates[parseState]()\n\t    },\n\n\t    comment: function comment () {\n\t        switch (c) {\n\t        case '*':\n\t            read();\n\t            lexState = 'multiLineComment';\n\t            return\n\n\t        case '/':\n\t            read();\n\t            lexState = 'singleLineComment';\n\t            return\n\t        }\n\n\t        throw invalidChar(read())\n\t    },\n\n\t    multiLineComment: function multiLineComment () {\n\t        switch (c) {\n\t        case '*':\n\t            read();\n\t            lexState = 'multiLineCommentAsterisk';\n\t            return\n\n\t        case undefined:\n\t            throw invalidChar(read())\n\t        }\n\n\t        read();\n\t    },\n\n\t    multiLineCommentAsterisk: function multiLineCommentAsterisk () {\n\t        switch (c) {\n\t        case '*':\n\t            read();\n\t            return\n\n\t        case '/':\n\t            read();\n\t            lexState = 'default';\n\t            return\n\n\t        case undefined:\n\t            throw invalidChar(read())\n\t        }\n\n\t        read();\n\t        lexState = 'multiLineComment';\n\t    },\n\n\t    singleLineComment: function singleLineComment () {\n\t        switch (c) {\n\t        case '\\n':\n\t        case '\\r':\n\t        case '\\u2028':\n\t        case '\\u2029':\n\t            read();\n\t            lexState = 'default';\n\t            return\n\n\t        case undefined:\n\t            read();\n\t            return newToken('eof')\n\t        }\n\n\t        read();\n\t    },\n\n\t    value: function value () {\n\t        switch (c) {\n\t        case '{':\n\t        case '[':\n\t            return newToken('punctuator', read())\n\n\t        case 'n':\n\t            read();\n\t            literal('ull');\n\t            return newToken('null', null)\n\n\t        case 't':\n\t            read();\n\t            literal('rue');\n\t            return newToken('boolean', true)\n\n\t        case 'f':\n\t            read();\n\t            literal('alse');\n\t            return newToken('boolean', false)\n\n\t        case '-':\n\t        case '+':\n\t            if (read() === '-') {\n\t                sign = -1;\n\t            }\n\n\t            lexState = 'sign';\n\t            return\n\n\t        case '.':\n\t            buffer = read();\n\t            lexState = 'decimalPointLeading';\n\t            return\n\n\t        case '0':\n\t            buffer = read();\n\t            lexState = 'zero';\n\t            return\n\n\t        case '1':\n\t        case '2':\n\t        case '3':\n\t        case '4':\n\t        case '5':\n\t        case '6':\n\t        case '7':\n\t        case '8':\n\t        case '9':\n\t            buffer = read();\n\t            lexState = 'decimalInteger';\n\t            return\n\n\t        case 'I':\n\t            read();\n\t            literal('nfinity');\n\t            return newToken('numeric', Infinity)\n\n\t        case 'N':\n\t            read();\n\t            literal('aN');\n\t            return newToken('numeric', NaN)\n\n\t        case '\"':\n\t        case \"'\":\n\t            doubleQuote = (read() === '\"');\n\t            buffer = '';\n\t            lexState = 'string';\n\t            return\n\t        }\n\n\t        throw invalidChar(read())\n\t    },\n\n\t    identifierNameStartEscape: function identifierNameStartEscape () {\n\t        if (c !== 'u') {\n\t            throw invalidChar(read())\n\t        }\n\n\t        read();\n\t        var u = unicodeEscape();\n\t        switch (u) {\n\t        case '$':\n\t        case '_':\n\t            break\n\n\t        default:\n\t            if (!util.isIdStartChar(u)) {\n\t                throw invalidIdentifier()\n\t            }\n\n\t            break\n\t        }\n\n\t        buffer += u;\n\t        lexState = 'identifierName';\n\t    },\n\n\t    identifierName: function identifierName () {\n\t        switch (c) {\n\t        case '$':\n\t        case '_':\n\t        case '\\u200C':\n\t        case '\\u200D':\n\t            buffer += read();\n\t            return\n\n\t        case '\\\\':\n\t            read();\n\t            lexState = 'identifierNameEscape';\n\t            return\n\t        }\n\n\t        if (util.isIdContinueChar(c)) {\n\t            buffer += read();\n\t            return\n\t        }\n\n\t        return newToken('identifier', buffer)\n\t    },\n\n\t    identifierNameEscape: function identifierNameEscape () {\n\t        if (c !== 'u') {\n\t            throw invalidChar(read())\n\t        }\n\n\t        read();\n\t        var u = unicodeEscape();\n\t        switch (u) {\n\t        case '$':\n\t        case '_':\n\t        case '\\u200C':\n\t        case '\\u200D':\n\t            break\n\n\t        default:\n\t            if (!util.isIdContinueChar(u)) {\n\t                throw invalidIdentifier()\n\t            }\n\n\t            break\n\t        }\n\n\t        buffer += u;\n\t        lexState = 'identifierName';\n\t    },\n\n\t    sign: function sign$1 () {\n\t        switch (c) {\n\t        case '.':\n\t            buffer = read();\n\t            lexState = 'decimalPointLeading';\n\t            return\n\n\t        case '0':\n\t            buffer = read();\n\t            lexState = 'zero';\n\t            return\n\n\t        case '1':\n\t        case '2':\n\t        case '3':\n\t        case '4':\n\t        case '5':\n\t        case '6':\n\t        case '7':\n\t        case '8':\n\t        case '9':\n\t            buffer = read();\n\t            lexState = 'decimalInteger';\n\t            return\n\n\t        case 'I':\n\t            read();\n\t            literal('nfinity');\n\t            return newToken('numeric', sign * Infinity)\n\n\t        case 'N':\n\t            read();\n\t            literal('aN');\n\t            return newToken('numeric', NaN)\n\t        }\n\n\t        throw invalidChar(read())\n\t    },\n\n\t    zero: function zero () {\n\t        switch (c) {\n\t        case '.':\n\t            buffer += read();\n\t            lexState = 'decimalPoint';\n\t            return\n\n\t        case 'e':\n\t        case 'E':\n\t            buffer += read();\n\t            lexState = 'decimalExponent';\n\t            return\n\n\t        case 'x':\n\t        case 'X':\n\t            buffer += read();\n\t            lexState = 'hexadecimal';\n\t            return\n\t        }\n\n\t        return newToken('numeric', sign * 0)\n\t    },\n\n\t    decimalInteger: function decimalInteger () {\n\t        switch (c) {\n\t        case '.':\n\t            buffer += read();\n\t            lexState = 'decimalPoint';\n\t            return\n\n\t        case 'e':\n\t        case 'E':\n\t            buffer += read();\n\t            lexState = 'decimalExponent';\n\t            return\n\t        }\n\n\t        if (util.isDigit(c)) {\n\t            buffer += read();\n\t            return\n\t        }\n\n\t        return newToken('numeric', sign * Number(buffer))\n\t    },\n\n\t    decimalPointLeading: function decimalPointLeading () {\n\t        if (util.isDigit(c)) {\n\t            buffer += read();\n\t            lexState = 'decimalFraction';\n\t            return\n\t        }\n\n\t        throw invalidChar(read())\n\t    },\n\n\t    decimalPoint: function decimalPoint () {\n\t        switch (c) {\n\t        case 'e':\n\t        case 'E':\n\t            buffer += read();\n\t            lexState = 'decimalExponent';\n\t            return\n\t        }\n\n\t        if (util.isDigit(c)) {\n\t            buffer += read();\n\t            lexState = 'decimalFraction';\n\t            return\n\t        }\n\n\t        return newToken('numeric', sign * Number(buffer))\n\t    },\n\n\t    decimalFraction: function decimalFraction () {\n\t        switch (c) {\n\t        case 'e':\n\t        case 'E':\n\t            buffer += read();\n\t            lexState = 'decimalExponent';\n\t            return\n\t        }\n\n\t        if (util.isDigit(c)) {\n\t            buffer += read();\n\t            return\n\t        }\n\n\t        return newToken('numeric', sign * Number(buffer))\n\t    },\n\n\t    decimalExponent: function decimalExponent () {\n\t        switch (c) {\n\t        case '+':\n\t        case '-':\n\t            buffer += read();\n\t            lexState = 'decimalExponentSign';\n\t            return\n\t        }\n\n\t        if (util.isDigit(c)) {\n\t            buffer += read();\n\t            lexState = 'decimalExponentInteger';\n\t            return\n\t        }\n\n\t        throw invalidChar(read())\n\t    },\n\n\t    decimalExponentSign: function decimalExponentSign () {\n\t        if (util.isDigit(c)) {\n\t            buffer += read();\n\t            lexState = 'decimalExponentInteger';\n\t            return\n\t        }\n\n\t        throw invalidChar(read())\n\t    },\n\n\t    decimalExponentInteger: function decimalExponentInteger () {\n\t        if (util.isDigit(c)) {\n\t            buffer += read();\n\t            return\n\t        }\n\n\t        return newToken('numeric', sign * Number(buffer))\n\t    },\n\n\t    hexadecimal: function hexadecimal () {\n\t        if (util.isHexDigit(c)) {\n\t            buffer += read();\n\t            lexState = 'hexadecimalInteger';\n\t            return\n\t        }\n\n\t        throw invalidChar(read())\n\t    },\n\n\t    hexadecimalInteger: function hexadecimalInteger () {\n\t        if (util.isHexDigit(c)) {\n\t            buffer += read();\n\t            return\n\t        }\n\n\t        return newToken('numeric', sign * Number(buffer))\n\t    },\n\n\t    string: function string () {\n\t        switch (c) {\n\t        case '\\\\':\n\t            read();\n\t            buffer += escape();\n\t            return\n\n\t        case '\"':\n\t            if (doubleQuote) {\n\t                read();\n\t                return newToken('string', buffer)\n\t            }\n\n\t            buffer += read();\n\t            return\n\n\t        case \"'\":\n\t            if (!doubleQuote) {\n\t                read();\n\t                return newToken('string', buffer)\n\t            }\n\n\t            buffer += read();\n\t            return\n\n\t        case '\\n':\n\t        case '\\r':\n\t            throw invalidChar(read())\n\n\t        case '\\u2028':\n\t        case '\\u2029':\n\t            separatorChar(c);\n\t            break\n\n\t        case undefined:\n\t            throw invalidChar(read())\n\t        }\n\n\t        buffer += read();\n\t    },\n\n\t    start: function start () {\n\t        switch (c) {\n\t        case '{':\n\t        case '[':\n\t            return newToken('punctuator', read())\n\n\t        // This code is unreachable since the default lexState handles eof.\n\t        // case undefined:\n\t        //     return newToken('eof')\n\t        }\n\n\t        lexState = 'value';\n\t    },\n\n\t    beforePropertyName: function beforePropertyName () {\n\t        switch (c) {\n\t        case '$':\n\t        case '_':\n\t            buffer = read();\n\t            lexState = 'identifierName';\n\t            return\n\n\t        case '\\\\':\n\t            read();\n\t            lexState = 'identifierNameStartEscape';\n\t            return\n\n\t        case '}':\n\t            return newToken('punctuator', read())\n\n\t        case '\"':\n\t        case \"'\":\n\t            doubleQuote = (read() === '\"');\n\t            lexState = 'string';\n\t            return\n\t        }\n\n\t        if (util.isIdStartChar(c)) {\n\t            buffer += read();\n\t            lexState = 'identifierName';\n\t            return\n\t        }\n\n\t        throw invalidChar(read())\n\t    },\n\n\t    afterPropertyName: function afterPropertyName () {\n\t        if (c === ':') {\n\t            return newToken('punctuator', read())\n\t        }\n\n\t        throw invalidChar(read())\n\t    },\n\n\t    beforePropertyValue: function beforePropertyValue () {\n\t        lexState = 'value';\n\t    },\n\n\t    afterPropertyValue: function afterPropertyValue () {\n\t        switch (c) {\n\t        case ',':\n\t        case '}':\n\t            return newToken('punctuator', read())\n\t        }\n\n\t        throw invalidChar(read())\n\t    },\n\n\t    beforeArrayValue: function beforeArrayValue () {\n\t        if (c === ']') {\n\t            return newToken('punctuator', read())\n\t        }\n\n\t        lexState = 'value';\n\t    },\n\n\t    afterArrayValue: function afterArrayValue () {\n\t        switch (c) {\n\t        case ',':\n\t        case ']':\n\t            return newToken('punctuator', read())\n\t        }\n\n\t        throw invalidChar(read())\n\t    },\n\n\t    end: function end () {\n\t        // This code is unreachable since it's handled by the default lexState.\n\t        // if (c === undefined) {\n\t        //     read()\n\t        //     return newToken('eof')\n\t        // }\n\n\t        throw invalidChar(read())\n\t    },\n\t};\n\n\tfunction newToken (type, value) {\n\t    return {\n\t        type: type,\n\t        value: value,\n\t        line: line,\n\t        column: column,\n\t    }\n\t}\n\n\tfunction literal (s) {\n\t    for (var i = 0, list = s; i < list.length; i += 1) {\n\t        var c = list[i];\n\n\t        var p = peek();\n\n\t        if (p !== c) {\n\t            throw invalidChar(read())\n\t        }\n\n\t        read();\n\t    }\n\t}\n\n\tfunction escape () {\n\t    var c = peek();\n\t    switch (c) {\n\t    case 'b':\n\t        read();\n\t        return '\\b'\n\n\t    case 'f':\n\t        read();\n\t        return '\\f'\n\n\t    case 'n':\n\t        read();\n\t        return '\\n'\n\n\t    case 'r':\n\t        read();\n\t        return '\\r'\n\n\t    case 't':\n\t        read();\n\t        return '\\t'\n\n\t    case 'v':\n\t        read();\n\t        return '\\v'\n\n\t    case '0':\n\t        read();\n\t        if (util.isDigit(peek())) {\n\t            throw invalidChar(read())\n\t        }\n\n\t        return '\\0'\n\n\t    case 'x':\n\t        read();\n\t        return hexEscape()\n\n\t    case 'u':\n\t        read();\n\t        return unicodeEscape()\n\n\t    case '\\n':\n\t    case '\\u2028':\n\t    case '\\u2029':\n\t        read();\n\t        return ''\n\n\t    case '\\r':\n\t        read();\n\t        if (peek() === '\\n') {\n\t            read();\n\t        }\n\n\t        return ''\n\n\t    case '1':\n\t    case '2':\n\t    case '3':\n\t    case '4':\n\t    case '5':\n\t    case '6':\n\t    case '7':\n\t    case '8':\n\t    case '9':\n\t        throw invalidChar(read())\n\n\t    case undefined:\n\t        throw invalidChar(read())\n\t    }\n\n\t    return read()\n\t}\n\n\tfunction hexEscape () {\n\t    var buffer = '';\n\t    var c = peek();\n\n\t    if (!util.isHexDigit(c)) {\n\t        throw invalidChar(read())\n\t    }\n\n\t    buffer += read();\n\n\t    c = peek();\n\t    if (!util.isHexDigit(c)) {\n\t        throw invalidChar(read())\n\t    }\n\n\t    buffer += read();\n\n\t    return String.fromCodePoint(parseInt(buffer, 16))\n\t}\n\n\tfunction unicodeEscape () {\n\t    var buffer = '';\n\t    var count = 4;\n\n\t    while (count-- > 0) {\n\t        var c = peek();\n\t        if (!util.isHexDigit(c)) {\n\t            throw invalidChar(read())\n\t        }\n\n\t        buffer += read();\n\t    }\n\n\t    return String.fromCodePoint(parseInt(buffer, 16))\n\t}\n\n\tvar parseStates = {\n\t    start: function start () {\n\t        if (token.type === 'eof') {\n\t            throw invalidEOF()\n\t        }\n\n\t        push();\n\t    },\n\n\t    beforePropertyName: function beforePropertyName () {\n\t        switch (token.type) {\n\t        case 'identifier':\n\t        case 'string':\n\t            key = token.value;\n\t            parseState = 'afterPropertyName';\n\t            return\n\n\t        case 'punctuator':\n\t            // This code is unreachable since it's handled by the lexState.\n\t            // if (token.value !== '}') {\n\t            //     throw invalidToken()\n\t            // }\n\n\t            pop();\n\t            return\n\n\t        case 'eof':\n\t            throw invalidEOF()\n\t        }\n\n\t        // This code is unreachable since it's handled by the lexState.\n\t        // throw invalidToken()\n\t    },\n\n\t    afterPropertyName: function afterPropertyName () {\n\t        // This code is unreachable since it's handled by the lexState.\n\t        // if (token.type !== 'punctuator' || token.value !== ':') {\n\t        //     throw invalidToken()\n\t        // }\n\n\t        if (token.type === 'eof') {\n\t            throw invalidEOF()\n\t        }\n\n\t        parseState = 'beforePropertyValue';\n\t    },\n\n\t    beforePropertyValue: function beforePropertyValue () {\n\t        if (token.type === 'eof') {\n\t            throw invalidEOF()\n\t        }\n\n\t        push();\n\t    },\n\n\t    beforeArrayValue: function beforeArrayValue () {\n\t        if (token.type === 'eof') {\n\t            throw invalidEOF()\n\t        }\n\n\t        if (token.type === 'punctuator' && token.value === ']') {\n\t            pop();\n\t            return\n\t        }\n\n\t        push();\n\t    },\n\n\t    afterPropertyValue: function afterPropertyValue () {\n\t        // This code is unreachable since it's handled by the lexState.\n\t        // if (token.type !== 'punctuator') {\n\t        //     throw invalidToken()\n\t        // }\n\n\t        if (token.type === 'eof') {\n\t            throw invalidEOF()\n\t        }\n\n\t        switch (token.value) {\n\t        case ',':\n\t            parseState = 'beforePropertyName';\n\t            return\n\n\t        case '}':\n\t            pop();\n\t        }\n\n\t        // This code is unreachable since it's handled by the lexState.\n\t        // throw invalidToken()\n\t    },\n\n\t    afterArrayValue: function afterArrayValue () {\n\t        // This code is unreachable since it's handled by the lexState.\n\t        // if (token.type !== 'punctuator') {\n\t        //     throw invalidToken()\n\t        // }\n\n\t        if (token.type === 'eof') {\n\t            throw invalidEOF()\n\t        }\n\n\t        switch (token.value) {\n\t        case ',':\n\t            parseState = 'beforeArrayValue';\n\t            return\n\n\t        case ']':\n\t            pop();\n\t        }\n\n\t        // This code is unreachable since it's handled by the lexState.\n\t        // throw invalidToken()\n\t    },\n\n\t    end: function end () {\n\t        // This code is unreachable since it's handled by the lexState.\n\t        // if (token.type !== 'eof') {\n\t        //     throw invalidToken()\n\t        // }\n\t    },\n\t};\n\n\tfunction push () {\n\t    var value;\n\n\t    switch (token.type) {\n\t    case 'punctuator':\n\t        switch (token.value) {\n\t        case '{':\n\t            value = {};\n\t            break\n\n\t        case '[':\n\t            value = [];\n\t            break\n\t        }\n\n\t        break\n\n\t    case 'null':\n\t    case 'boolean':\n\t    case 'numeric':\n\t    case 'string':\n\t        value = token.value;\n\t        break\n\n\t    // This code is unreachable.\n\t    // default:\n\t    //     throw invalidToken()\n\t    }\n\n\t    if (root === undefined) {\n\t        root = value;\n\t    } else {\n\t        var parent = stack[stack.length - 1];\n\t        if (Array.isArray(parent)) {\n\t            parent.push(value);\n\t        } else {\n\t            Object.defineProperty(parent, key, {\n\t                value: value,\n\t                writable: true,\n\t                enumerable: true,\n\t                configurable: true,\n\t            });\n\t        }\n\t    }\n\n\t    if (value !== null && typeof value === 'object') {\n\t        stack.push(value);\n\n\t        if (Array.isArray(value)) {\n\t            parseState = 'beforeArrayValue';\n\t        } else {\n\t            parseState = 'beforePropertyName';\n\t        }\n\t    } else {\n\t        var current = stack[stack.length - 1];\n\t        if (current == null) {\n\t            parseState = 'end';\n\t        } else if (Array.isArray(current)) {\n\t            parseState = 'afterArrayValue';\n\t        } else {\n\t            parseState = 'afterPropertyValue';\n\t        }\n\t    }\n\t}\n\n\tfunction pop () {\n\t    stack.pop();\n\n\t    var current = stack[stack.length - 1];\n\t    if (current == null) {\n\t        parseState = 'end';\n\t    } else if (Array.isArray(current)) {\n\t        parseState = 'afterArrayValue';\n\t    } else {\n\t        parseState = 'afterPropertyValue';\n\t    }\n\t}\n\n\t// This code is unreachable.\n\t// function invalidParseState () {\n\t//     return new Error(`JSON5: invalid parse state '${parseState}'`)\n\t// }\n\n\t// This code is unreachable.\n\t// function invalidLexState (state) {\n\t//     return new Error(`JSON5: invalid lex state '${state}'`)\n\t// }\n\n\tfunction invalidChar (c) {\n\t    if (c === undefined) {\n\t        return syntaxError((\"JSON5: invalid end of input at \" + line + \":\" + column))\n\t    }\n\n\t    return syntaxError((\"JSON5: invalid character '\" + (formatChar(c)) + \"' at \" + line + \":\" + column))\n\t}\n\n\tfunction invalidEOF () {\n\t    return syntaxError((\"JSON5: invalid end of input at \" + line + \":\" + column))\n\t}\n\n\t// This code is unreachable.\n\t// function invalidToken () {\n\t//     if (token.type === 'eof') {\n\t//         return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n\t//     }\n\n\t//     const c = String.fromCodePoint(token.value.codePointAt(0))\n\t//     return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`)\n\t// }\n\n\tfunction invalidIdentifier () {\n\t    column -= 5;\n\t    return syntaxError((\"JSON5: invalid identifier character at \" + line + \":\" + column))\n\t}\n\n\tfunction separatorChar (c) {\n\t    console.warn((\"JSON5: '\" + (formatChar(c)) + \"' in strings is not valid ECMAScript; consider escaping\"));\n\t}\n\n\tfunction formatChar (c) {\n\t    var replacements = {\n\t        \"'\": \"\\\\'\",\n\t        '\"': '\\\\\"',\n\t        '\\\\': '\\\\\\\\',\n\t        '\\b': '\\\\b',\n\t        '\\f': '\\\\f',\n\t        '\\n': '\\\\n',\n\t        '\\r': '\\\\r',\n\t        '\\t': '\\\\t',\n\t        '\\v': '\\\\v',\n\t        '\\0': '\\\\0',\n\t        '\\u2028': '\\\\u2028',\n\t        '\\u2029': '\\\\u2029',\n\t    };\n\n\t    if (replacements[c]) {\n\t        return replacements[c]\n\t    }\n\n\t    if (c < ' ') {\n\t        var hexString = c.charCodeAt(0).toString(16);\n\t        return '\\\\x' + ('00' + hexString).substring(hexString.length)\n\t    }\n\n\t    return c\n\t}\n\n\tfunction syntaxError (message) {\n\t    var err = new SyntaxError(message);\n\t    err.lineNumber = line;\n\t    err.columnNumber = column;\n\t    return err\n\t}\n\n\tvar stringify = function stringify (value, replacer, space) {\n\t    var stack = [];\n\t    var indent = '';\n\t    var propertyList;\n\t    var replacerFunc;\n\t    var gap = '';\n\t    var quote;\n\n\t    if (\n\t        replacer != null &&\n\t        typeof replacer === 'object' &&\n\t        !Array.isArray(replacer)\n\t    ) {\n\t        space = replacer.space;\n\t        quote = replacer.quote;\n\t        replacer = replacer.replacer;\n\t    }\n\n\t    if (typeof replacer === 'function') {\n\t        replacerFunc = replacer;\n\t    } else if (Array.isArray(replacer)) {\n\t        propertyList = [];\n\t        for (var i = 0, list = replacer; i < list.length; i += 1) {\n\t            var v = list[i];\n\n\t            var item = (void 0);\n\n\t            if (typeof v === 'string') {\n\t                item = v;\n\t            } else if (\n\t                typeof v === 'number' ||\n\t                v instanceof String ||\n\t                v instanceof Number\n\t            ) {\n\t                item = String(v);\n\t            }\n\n\t            if (item !== undefined && propertyList.indexOf(item) < 0) {\n\t                propertyList.push(item);\n\t            }\n\t        }\n\t    }\n\n\t    if (space instanceof Number) {\n\t        space = Number(space);\n\t    } else if (space instanceof String) {\n\t        space = String(space);\n\t    }\n\n\t    if (typeof space === 'number') {\n\t        if (space > 0) {\n\t            space = Math.min(10, Math.floor(space));\n\t            gap = '          '.substr(0, space);\n\t        }\n\t    } else if (typeof space === 'string') {\n\t        gap = space.substr(0, 10);\n\t    }\n\n\t    return serializeProperty('', {'': value})\n\n\t    function serializeProperty (key, holder) {\n\t        var value = holder[key];\n\t        if (value != null) {\n\t            if (typeof value.toJSON5 === 'function') {\n\t                value = value.toJSON5(key);\n\t            } else if (typeof value.toJSON === 'function') {\n\t                value = value.toJSON(key);\n\t            }\n\t        }\n\n\t        if (replacerFunc) {\n\t            value = replacerFunc.call(holder, key, value);\n\t        }\n\n\t        if (value instanceof Number) {\n\t            value = Number(value);\n\t        } else if (value instanceof String) {\n\t            value = String(value);\n\t        } else if (value instanceof Boolean) {\n\t            value = value.valueOf();\n\t        }\n\n\t        switch (value) {\n\t        case null: return 'null'\n\t        case true: return 'true'\n\t        case false: return 'false'\n\t        }\n\n\t        if (typeof value === 'string') {\n\t            return quoteString(value, false)\n\t        }\n\n\t        if (typeof value === 'number') {\n\t            return String(value)\n\t        }\n\n\t        if (typeof value === 'object') {\n\t            return Array.isArray(value) ? serializeArray(value) : serializeObject(value)\n\t        }\n\n\t        return undefined\n\t    }\n\n\t    function quoteString (value) {\n\t        var quotes = {\n\t            \"'\": 0.1,\n\t            '\"': 0.2,\n\t        };\n\n\t        var replacements = {\n\t            \"'\": \"\\\\'\",\n\t            '\"': '\\\\\"',\n\t            '\\\\': '\\\\\\\\',\n\t            '\\b': '\\\\b',\n\t            '\\f': '\\\\f',\n\t            '\\n': '\\\\n',\n\t            '\\r': '\\\\r',\n\t            '\\t': '\\\\t',\n\t            '\\v': '\\\\v',\n\t            '\\0': '\\\\0',\n\t            '\\u2028': '\\\\u2028',\n\t            '\\u2029': '\\\\u2029',\n\t        };\n\n\t        var product = '';\n\n\t        for (var i = 0; i < value.length; i++) {\n\t            var c = value[i];\n\t            switch (c) {\n\t            case \"'\":\n\t            case '\"':\n\t                quotes[c]++;\n\t                product += c;\n\t                continue\n\n\t            case '\\0':\n\t                if (util.isDigit(value[i + 1])) {\n\t                    product += '\\\\x00';\n\t                    continue\n\t                }\n\t            }\n\n\t            if (replacements[c]) {\n\t                product += replacements[c];\n\t                continue\n\t            }\n\n\t            if (c < ' ') {\n\t                var hexString = c.charCodeAt(0).toString(16);\n\t                product += '\\\\x' + ('00' + hexString).substring(hexString.length);\n\t                continue\n\t            }\n\n\t            product += c;\n\t        }\n\n\t        var quoteChar = quote || Object.keys(quotes).reduce(function (a, b) { return (quotes[a] < quotes[b]) ? a : b; });\n\n\t        product = product.replace(new RegExp(quoteChar, 'g'), replacements[quoteChar]);\n\n\t        return quoteChar + product + quoteChar\n\t    }\n\n\t    function serializeObject (value) {\n\t        if (stack.indexOf(value) >= 0) {\n\t            throw TypeError('Converting circular structure to JSON5')\n\t        }\n\n\t        stack.push(value);\n\n\t        var stepback = indent;\n\t        indent = indent + gap;\n\n\t        var keys = propertyList || Object.keys(value);\n\t        var partial = [];\n\t        for (var i = 0, list = keys; i < list.length; i += 1) {\n\t            var key = list[i];\n\n\t            var propertyString = serializeProperty(key, value);\n\t            if (propertyString !== undefined) {\n\t                var member = serializeKey(key) + ':';\n\t                if (gap !== '') {\n\t                    member += ' ';\n\t                }\n\t                member += propertyString;\n\t                partial.push(member);\n\t            }\n\t        }\n\n\t        var final;\n\t        if (partial.length === 0) {\n\t            final = '{}';\n\t        } else {\n\t            var properties;\n\t            if (gap === '') {\n\t                properties = partial.join(',');\n\t                final = '{' + properties + '}';\n\t            } else {\n\t                var separator = ',\\n' + indent;\n\t                properties = partial.join(separator);\n\t                final = '{\\n' + indent + properties + ',\\n' + stepback + '}';\n\t            }\n\t        }\n\n\t        stack.pop();\n\t        indent = stepback;\n\t        return final\n\t    }\n\n\t    function serializeKey (key) {\n\t        if (key.length === 0) {\n\t            return quoteString(key, true)\n\t        }\n\n\t        var firstChar = String.fromCodePoint(key.codePointAt(0));\n\t        if (!util.isIdStartChar(firstChar)) {\n\t            return quoteString(key, true)\n\t        }\n\n\t        for (var i = firstChar.length; i < key.length; i++) {\n\t            if (!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) {\n\t                return quoteString(key, true)\n\t            }\n\t        }\n\n\t        return key\n\t    }\n\n\t    function serializeArray (value) {\n\t        if (stack.indexOf(value) >= 0) {\n\t            throw TypeError('Converting circular structure to JSON5')\n\t        }\n\n\t        stack.push(value);\n\n\t        var stepback = indent;\n\t        indent = indent + gap;\n\n\t        var partial = [];\n\t        for (var i = 0; i < value.length; i++) {\n\t            var propertyString = serializeProperty(String(i), value);\n\t            partial.push((propertyString !== undefined) ? propertyString : 'null');\n\t        }\n\n\t        var final;\n\t        if (partial.length === 0) {\n\t            final = '[]';\n\t        } else {\n\t            if (gap === '') {\n\t                var properties = partial.join(',');\n\t                final = '[' + properties + ']';\n\t            } else {\n\t                var separator = ',\\n' + indent;\n\t                var properties$1 = partial.join(separator);\n\t                final = '[\\n' + indent + properties$1 + ',\\n' + stepback + ']';\n\t            }\n\t        }\n\n\t        stack.pop();\n\t        indent = stepback;\n\t        return final\n\t    }\n\t};\n\n\tvar JSON5 = {\n\t    parse: parse,\n\t    stringify: stringify,\n\t};\n\n\tvar lib = JSON5;\n\n\tvar es5 = lib;\n\n\treturn es5;\n\n})));\n","// muon - Multi-platform GUI application framework that uses CEF as its backend\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/muon\n\nimport { access, cp, readFile, stat, writeFile } from \"node:fs/promises\";\nimport { randomBytes } from \"node:crypto\";\nimport { basename, dirname, join } from \"node:path\";\n\nimport { parse } from \"json5\";\n\n/**\n * Fixed byte size reserved in muon-core for an embedded muon.json payload.\n */\nexport const muonEmbeddedConfigSlotSize = 64 * 1024;\n\n/**\n * Fixed byte sequence used to locate an unembedded config slot.\n */\nconst muonEmbeddedConfigEmptySlotMarker = Buffer.from([\n  0x6d, 0x75, 0x6f, 0x6e, 0x2d, 0x63, 0x6f, 0x72, 0x65, 0x3a, 0x65, 0x6d, 0x62,\n  0x65, 0x64, 0x2d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x3a, 0x73, 0x6c, 0x6f,\n  0x74, 0x3a, 0x76, 0x31, 0x00, 0x5d,\n]);\n\nconst muonEmbeddedConfigPayloadCapacity = muonEmbeddedConfigSlotSize;\nconst muonBootstrapEmbeddedConfigSlotSize = 64 * 1024;\nconst muonBootstrapEmbeddedConfigEmptySlotMarker = Buffer.from([\n  0x6d, 0x75, 0x6f, 0x6e, 0x2d, 0x62, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61,\n  0x70, 0x3a, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x2d, 0x63, 0x6f, 0x6e, 0x66, 0x69,\n  0x67, 0x3a, 0x76, 0x31, 0x00, 0x5d,\n]);\nconst muonBootstrapEmbeddedConfigPayloadCapacity =\n  muonBootstrapEmbeddedConfigSlotSize;\n\nconst tlvNullTag = 0;\nconst tlvFalseTag = 1;\nconst tlvTrueTag = 2;\nconst tlvUintTag = 3;\nconst tlvStringTag = 4;\nconst tlvBinaryTag = 5;\nconst tlvArrayTag = 6;\nconst tlvObjectTag = 7;\n\n/**\n * Result returned by a muon executable config embedding operation.\n */\nexport interface EmbedMuonConfigResult {\n  /** Input executable path. For bootstrap embedding this is the bootstrap path. */\n  readonly corePath: string;\n  /** Written executable path. */\n  readonly outputPath: string;\n  /** Byte offset of the fixed embedded config slot. */\n  readonly slotOffset: number;\n  /** Encoded TLV payload size in bytes. */\n  readonly payloadSize: number;\n  /** Whether an existing embedded payload was replaced. Always false. */\n  readonly replaced: boolean;\n}\n\n/**\n * Options for embedding a config into a single muon-core executable.\n */\nexport interface EmbedMuonConfigCoreOptions {\n  /** muon-core executable path to patch. */\n  readonly corePath: string;\n  /** muon.json, muon.json5, or muon.jsonc input path. */\n  readonly configPath: string;\n  /** Optional output executable path. When omitted, corePath is updated. */\n  readonly outputPath: string | undefined;\n}\n\n/**\n * Options for embedding a config into a single muon-bootstrap executable.\n */\nexport interface EmbedMuonConfigBootstrapOptions {\n  /** muon-bootstrap executable path to patch. */\n  readonly bootstrapPath: string;\n  /** muon.json, muon.json5, or muon.jsonc input path. */\n  readonly configPath: string;\n  /** Optional output executable path. When omitted, bootstrapPath is updated. */\n  readonly outputPath: string | undefined;\n}\n\n/**\n * Options for embedding a config into a runtime directory.\n */\nexport interface EmbedMuonConfigRuntimeOptions {\n  /** Runtime directory containing muon-core or muon-core.exe. */\n  readonly runtimePath: string;\n  /** muon.json, muon.json5, or muon.jsonc input path. */\n  readonly configPath: string;\n  /** Optional output runtime directory. When omitted, runtimePath is updated. */\n  readonly outputRuntimePath: string | undefined;\n}\n\n/**\n * Unembedded config slot found in a muon-core executable.\n */\nexport interface MuonEmbeddedConfigSlot {\n  /** Empty slot state. */\n  readonly state: \"empty\";\n  /** Byte offset of the slot. */\n  readonly offset: number;\n  /** Empty payload. */\n  readonly payload: Buffer;\n  /** Payload byte size. */\n  readonly payloadSize: 0;\n}\n\n/**\n * Unembedded bootstrap config slot found in a muon-bootstrap executable.\n */\nexport interface MuonBootstrapEmbeddedConfigSlot {\n  /** Empty slot state. */\n  readonly state: \"empty\";\n  /** Byte offset of the slot. */\n  readonly offset: number;\n  /** Empty payload. */\n  readonly payload: Buffer;\n  /** Payload byte size. */\n  readonly payloadSize: 0;\n}\n\nconst getEmbeddedConfigEmptySlotByte = (index: number): number => {\n  if (index < muonEmbeddedConfigEmptySlotMarker.length) {\n    return muonEmbeddedConfigEmptySlotMarker[index] ?? 0;\n  }\n  const value =\n    0xa5 ^\n    Math.imul(index, 0x25) ^\n    Math.imul(index >>> 8, 0x6d) ^\n    Math.imul(index >>> 16, 0x3b) ^\n    (Math.imul(index, 0x9e3779b1) >>> 24);\n  return value & 0xff;\n};\n\nconst createEmptySlot = (): Buffer => {\n  const slot = Buffer.allocUnsafe(muonEmbeddedConfigSlotSize);\n  for (let index = 0; index < slot.length; index += 1) {\n    slot[index] = getEmbeddedConfigEmptySlotByte(index);\n  }\n  return slot;\n};\n\nconst encodeVarUint = (value: bigint): Buffer => {\n  const bytes: number[] = [];\n  let remaining = value;\n  do {\n    let byte = Number(remaining & 0x7fn);\n    remaining >>= 7n;\n    if (remaining !== 0n) {\n      byte |= 0x80;\n    }\n    bytes.push(byte);\n  } while (remaining !== 0n);\n  return Buffer.from(bytes);\n};\n\nconst encodeRawString = (value: string): Buffer => {\n  const bytes = Buffer.from(value, \"utf8\");\n  return Buffer.concat([encodeVarUint(BigInt(bytes.length)), bytes]);\n};\n\nconst encodeTaggedBytes = (tag: number, bytes: Uint8Array): Buffer =>\n  Buffer.concat([\n    Buffer.from([tag]),\n    encodeVarUint(BigInt(bytes.length)),\n    Buffer.from(bytes),\n  ]);\n\nconst isJsonObject = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst isPath = (\n  path: readonly string[],\n  first: string,\n  second: string,\n): boolean => path.length === 2 && path[0] === first && path[1] === second;\n\nconst isPluginSignaturePath = (path: readonly string[]): boolean =>\n  path.length === 3 &&\n  path[0] === \"plugin\" &&\n  path[1] === \"plugins\" &&\n  path[2] === \"signature\";\n\nconst isPluginSaltPath = (path: readonly string[]): boolean =>\n  path.length === 3 &&\n  path[0] === \"plugin\" &&\n  path[1] === \"plugins\" &&\n  path[2] === \"salt\";\n\nconst isHexString = (value: string): boolean =>\n  value.length % 2 === 0 && /^[0-9a-fA-F]*$/.test(value);\n\nconst decodeHexString = (value: string): Buffer => {\n  const bytes = Buffer.alloc(value.length / 2);\n  for (let index = 0; index < value.length; index += 2) {\n    bytes[index / 2] = Number.parseInt(value.slice(index, index + 2), 16);\n  }\n  return bytes;\n};\n\nconst encodeKnownBinaryString = (\n  path: readonly string[],\n  value: string,\n): Buffer | undefined => {\n  if (isPath(path, \"asset\", \"signature\")) {\n    return value.length === 40 && isHexString(value)\n      ? decodeHexString(value)\n      : undefined;\n  }\n  if (isPath(path, \"asset\", \"salt\")) {\n    return isHexString(value) ? decodeHexString(value) : undefined;\n  }\n  if (isPluginSignaturePath(path)) {\n    return value.length === 40 && isHexString(value)\n      ? decodeHexString(value)\n      : undefined;\n  }\n  if (isPluginSaltPath(path)) {\n    return isHexString(value) ? decodeHexString(value) : undefined;\n  }\n  if (isPath(path, \"browser\", \"backgroundColor\")) {\n    const hex = value.startsWith(\"#\") ? value.slice(1) : value;\n    return hex.length === 6 && isHexString(hex)\n      ? decodeHexString(hex)\n      : undefined;\n  }\n  return undefined;\n};\n\nconst encodeTlvValue = (value: unknown, path: readonly string[]): Buffer => {\n  if (value === null) {\n    return Buffer.from([tlvNullTag]);\n  }\n  if (typeof value === \"boolean\") {\n    return Buffer.from([value ? tlvTrueTag : tlvFalseTag]);\n  }\n  if (typeof value === \"number\") {\n    if (!Number.isSafeInteger(value) || value < 0) {\n      throw new Error(\"muon embedded config supports only unsigned integers.\");\n    }\n    return Buffer.concat([\n      Buffer.from([tlvUintTag]),\n      encodeVarUint(BigInt(value)),\n    ]);\n  }\n  if (typeof value === \"string\") {\n    const binaryValue = encodeKnownBinaryString(path, value);\n    if (binaryValue !== undefined) {\n      return encodeTaggedBytes(tlvBinaryTag, binaryValue);\n    }\n    return encodeTaggedBytes(tlvStringTag, Buffer.from(value, \"utf8\"));\n  }\n  if (Array.isArray(value)) {\n    return Buffer.concat([\n      Buffer.from([tlvArrayTag]),\n      encodeVarUint(BigInt(value.length)),\n      ...value.map((entry) => encodeTlvValue(entry, path)),\n    ]);\n  }\n  if (isJsonObject(value)) {\n    const entries = Object.entries(value);\n    return Buffer.concat([\n      Buffer.from([tlvObjectTag]),\n      encodeVarUint(BigInt(entries.length)),\n      ...entries.flatMap(([key, entry]) => [\n        encodeRawString(key),\n        encodeTlvValue(entry, [...path, key]),\n      ]),\n    ]);\n  }\n  throw new Error(\"muon embedded config contains an unsupported value.\");\n};\n\n/**\n * Encodes a parsed muon config object as the embedded TLV payload.\n *\n * @param config Parsed muon config value.\n * @returns Encoded TLV payload bytes.\n */\nexport const encodeMuonConfigTlv = (config: unknown): Buffer =>\n  encodeTlvValue(config, []);\n\n/**\n * Creates an empty or payload-filled fixed embedded config slot.\n *\n * @param payload Optional encoded TLV payload bytes.\n * @returns Fixed-size slot image.\n */\nexport const createMuonEmbeddedConfigSlot = (\n  payload: Uint8Array | undefined = undefined,\n): Buffer => {\n  if (\n    payload !== undefined &&\n    payload.length > muonEmbeddedConfigPayloadCapacity\n  ) {\n    throw new Error(\n      `Encoded muon config exceeds the embedded slot capacity: ${payload.length} > ${muonEmbeddedConfigPayloadCapacity}`,\n    );\n  }\n\n  if (payload === undefined) {\n    return createEmptySlot();\n  }\n\n  const slot = randomBytes(muonEmbeddedConfigSlotSize);\n  Buffer.from(payload).copy(slot, 0);\n  return slot;\n};\n\n/**\n * Creates an empty or payload-filled fixed muon-bootstrap embedded config slot.\n *\n * @param payload Optional encoded TLV payload bytes.\n * @returns Fixed-size slot image.\n */\nexport const createMuonBootstrapEmbeddedConfigSlot = (\n  payload: Uint8Array | undefined = undefined,\n): Buffer => {\n  if (\n    payload !== undefined &&\n    payload.length > muonBootstrapEmbeddedConfigPayloadCapacity\n  ) {\n    throw new Error(\n      `Encoded muon config exceeds the embedded bootstrap slot capacity: ${payload.length} > ${muonBootstrapEmbeddedConfigPayloadCapacity}`,\n    );\n  }\n\n  if (payload === undefined) {\n    const slot = Buffer.alloc(muonBootstrapEmbeddedConfigSlotSize, 0);\n    muonBootstrapEmbeddedConfigEmptySlotMarker.copy(slot, 0);\n    return slot;\n  }\n\n  const slot = randomBytes(muonBootstrapEmbeddedConfigSlotSize);\n  Buffer.from(payload).copy(slot, 0);\n  return slot;\n};\n\nconst isEmptySlotAt = (content: Buffer, offset: number): boolean => {\n  for (let index = 0; index < muonEmbeddedConfigSlotSize; index += 1) {\n    if (content[offset + index] !== getEmbeddedConfigEmptySlotByte(index)) {\n      return false;\n    }\n  }\n  return true;\n};\n\nconst inspectUnembeddedSlotAt = (\n  content: Buffer,\n  offset: number,\n): MuonEmbeddedConfigSlot | undefined => {\n  if (offset < 0 || offset + muonEmbeddedConfigSlotSize > content.length) {\n    return undefined;\n  }\n  if (isEmptySlotAt(content, offset)) {\n    return {\n      state: \"empty\",\n      offset,\n      payload: Buffer.alloc(0),\n      payloadSize: 0,\n    };\n  }\n  return undefined;\n};\n\nconst collectSlotCandidates = (content: Buffer): MuonEmbeddedConfigSlot[] => {\n  const candidates = new Map<number, MuonEmbeddedConfigSlot>();\n  for (\n    let offset = content.indexOf(muonEmbeddedConfigEmptySlotMarker);\n    offset >= 0;\n    offset = content.indexOf(muonEmbeddedConfigEmptySlotMarker, offset + 1)\n  ) {\n    const slot = inspectUnembeddedSlotAt(content, offset);\n    if (slot !== undefined) {\n      candidates.set(slot.offset, slot);\n    }\n  }\n  return [...candidates.values()].sort(\n    (left, right) => left.offset - right.offset,\n  );\n};\n\nconst isEmptyBootstrapSlotAt = (content: Buffer, offset: number): boolean => {\n  if (\n    offset < 0 ||\n    offset + muonBootstrapEmbeddedConfigSlotSize > content.length\n  ) {\n    return false;\n  }\n  if (\n    !content\n      .subarray(\n        offset,\n        offset + muonBootstrapEmbeddedConfigEmptySlotMarker.length,\n      )\n      .equals(muonBootstrapEmbeddedConfigEmptySlotMarker)\n  ) {\n    return false;\n  }\n  for (\n    let index = muonBootstrapEmbeddedConfigEmptySlotMarker.length;\n    index < muonBootstrapEmbeddedConfigSlotSize;\n    index += 1\n  ) {\n    if (content[offset + index] !== 0) {\n      return false;\n    }\n  }\n  return true;\n};\n\nconst inspectUnembeddedBootstrapSlotAt = (\n  content: Buffer,\n  offset: number,\n): MuonBootstrapEmbeddedConfigSlot | undefined => {\n  if (!isEmptyBootstrapSlotAt(content, offset)) {\n    return undefined;\n  }\n  return {\n    state: \"empty\",\n    offset,\n    payload: Buffer.alloc(0),\n    payloadSize: 0,\n  };\n};\n\nconst collectBootstrapSlotCandidates = (\n  content: Buffer,\n): MuonBootstrapEmbeddedConfigSlot[] => {\n  const candidates = new Map<number, MuonBootstrapEmbeddedConfigSlot>();\n  for (\n    let offset = content.indexOf(muonBootstrapEmbeddedConfigEmptySlotMarker);\n    offset >= 0;\n    offset = content.indexOf(\n      muonBootstrapEmbeddedConfigEmptySlotMarker,\n      offset + 1,\n    )\n  ) {\n    const slot = inspectUnembeddedBootstrapSlotAt(content, offset);\n    if (slot !== undefined) {\n      candidates.set(slot.offset, slot);\n    }\n  }\n  return [...candidates.values()].sort(\n    (left, right) => left.offset - right.offset,\n  );\n};\n\n/**\n * Finds the fixed unembedded config slot in a muon-core executable image.\n *\n * @param content muon-core executable bytes.\n * @returns The single detected unembedded config slot.\n */\nexport const findMuonEmbeddedConfigSlot = (\n  content: Uint8Array,\n): MuonEmbeddedConfigSlot => {\n  const buffer = Buffer.isBuffer(content) ? content : Buffer.from(content);\n  const candidates = collectSlotCandidates(buffer);\n  if (candidates.length !== 1) {\n    throw new Error(\n      `Expected exactly one unembedded muon config slot, found ${candidates.length}.`,\n    );\n  }\n  const [candidate] = candidates;\n  if (candidate === undefined) {\n    throw new Error(\"Embedded muon config slot was not found.\");\n  }\n  return candidate;\n};\n\n/**\n * Finds the fixed unembedded config slot in a muon-bootstrap executable image.\n *\n * @param content muon-bootstrap executable bytes.\n * @returns The single detected unembedded bootstrap config slot.\n */\nexport const findMuonBootstrapEmbeddedConfigSlot = (\n  content: Uint8Array,\n): MuonBootstrapEmbeddedConfigSlot => {\n  const buffer = Buffer.isBuffer(content) ? content : Buffer.from(content);\n  const candidates = collectBootstrapSlotCandidates(buffer);\n  if (candidates.length !== 1) {\n    throw new Error(\n      `Expected exactly one unembedded muon-bootstrap config slot, found ${candidates.length}.`,\n    );\n  }\n  const [candidate] = candidates;\n  if (candidate === undefined) {\n    throw new Error(\"Embedded muon-bootstrap config slot was not found.\");\n  }\n  return candidate;\n};\n\nconst fileExists = async (path: string): Promise<boolean> => {\n  try {\n    const stats = await stat(path);\n    return stats.isFile();\n  } catch {\n    return false;\n  }\n};\n\nconst resolveMuonConfigInputPath = async (\n  configPath: string,\n): Promise<string> => {\n  if (basename(configPath) === \"muon.json\") {\n    const directory = dirname(configPath);\n    for (const fileName of [\"muon.json5\", \"muon.jsonc\", \"muon.json\"]) {\n      const candidate = join(directory, fileName);\n      if (await fileExists(candidate)) {\n        return candidate;\n      }\n    }\n  }\n  if (!(await fileExists(configPath))) {\n    throw new Error(`muon config does not exist: ${configPath}`);\n  }\n  return configPath;\n};\n\nconst readMuonConfigInput = async (configPath: string): Promise<unknown> => {\n  const resolvedPath = await resolveMuonConfigInputPath(configPath);\n  return parse(await readFile(resolvedPath, \"utf8\"));\n};\n\nconst isSignedPeExecutable = (content: Buffer): boolean => {\n  if (content.length < 0x40 || content[0] !== 0x4d || content[1] !== 0x5a) {\n    return false;\n  }\n  const peOffset = content.readUInt32LE(0x3c);\n  if (\n    peOffset + 0x18 >= content.length ||\n    content.toString(\"ascii\", peOffset, peOffset + 4) !== \"PE\\u0000\\u0000\"\n  ) {\n    return false;\n  }\n\n  const optionalHeaderOffset = peOffset + 0x18;\n  const optionalHeaderSize = content.readUInt16LE(peOffset + 0x14);\n  const optionalHeaderEnd = optionalHeaderOffset + optionalHeaderSize;\n  if (optionalHeaderEnd > content.length) {\n    return false;\n  }\n\n  const magic = content.readUInt16LE(optionalHeaderOffset);\n  const dataDirectoryOffset =\n    magic === 0x20b ? optionalHeaderOffset + 112 : optionalHeaderOffset + 96;\n  const certificateEntryOffset = dataDirectoryOffset + 4 * 8;\n  if (certificateEntryOffset + 8 > optionalHeaderEnd) {\n    return false;\n  }\n  const certificateSize = content.readUInt32LE(certificateEntryOffset + 4);\n  return certificateSize !== 0;\n};\n\n/**\n * Embeds a muon config into a single muon-core executable.\n *\n * @param options Core executable embedding options.\n * @returns Embedding result metadata.\n */\nexport const embedMuonConfigInCoreFile = async ({\n  corePath,\n  configPath,\n  outputPath,\n}: EmbedMuonConfigCoreOptions): Promise<EmbedMuonConfigResult> => {\n  const config = await readMuonConfigInput(configPath);\n  const payload = encodeMuonConfigTlv(config);\n  const embeddedSlot = createMuonEmbeddedConfigSlot(payload);\n  const coreContent = await readFile(corePath);\n  if (isSignedPeExecutable(coreContent)) {\n    throw new Error(\"Cannot embed muon config into a signed PE executable.\");\n  }\n\n  const slot = findMuonEmbeddedConfigSlot(coreContent);\n  const patchedContent = Buffer.from(coreContent);\n  embeddedSlot.copy(patchedContent, slot.offset);\n  const resolvedOutputPath = outputPath ?? corePath;\n  await writeFile(resolvedOutputPath, patchedContent);\n\n  return {\n    corePath,\n    outputPath: resolvedOutputPath,\n    slotOffset: slot.offset,\n    payloadSize: payload.length,\n    replaced: false,\n  };\n};\n\n/**\n * Embeds a muon config into a single muon-bootstrap executable.\n *\n * @param options Bootstrap executable embedding options.\n * @returns Embedding result metadata.\n */\nexport const embedMuonConfigInBootstrapFile = async ({\n  bootstrapPath,\n  configPath,\n  outputPath,\n}: EmbedMuonConfigBootstrapOptions): Promise<EmbedMuonConfigResult> => {\n  const config = await readMuonConfigInput(configPath);\n  const payload = encodeMuonConfigTlv(config);\n  const embeddedSlot = createMuonBootstrapEmbeddedConfigSlot(payload);\n  const bootstrapContent = await readFile(bootstrapPath);\n  if (isSignedPeExecutable(bootstrapContent)) {\n    throw new Error(\n      \"Cannot embed muon config into a signed muon-bootstrap PE executable.\",\n    );\n  }\n\n  const slot = findMuonBootstrapEmbeddedConfigSlot(bootstrapContent);\n  const patchedContent = Buffer.from(bootstrapContent);\n  embeddedSlot.copy(patchedContent, slot.offset);\n  const resolvedOutputPath = outputPath ?? bootstrapPath;\n  await writeFile(resolvedOutputPath, patchedContent);\n\n  return {\n    corePath: bootstrapPath,\n    outputPath: resolvedOutputPath,\n    slotOffset: slot.offset,\n    payloadSize: payload.length,\n    replaced: false,\n  };\n};\n\nconst resolveRuntimeCorePath = async (runtimePath: string): Promise<string> => {\n  const candidates = [\n    join(runtimePath, \"muon-core\"),\n    join(runtimePath, \"muon-core.exe\"),\n  ];\n  const existing: string[] = [];\n  for (const candidate of candidates) {\n    try {\n      await access(candidate);\n      existing.push(candidate);\n    } catch {\n      // Missing candidates are ignored until the final count check.\n    }\n  }\n  if (existing.length !== 1) {\n    throw new Error(\n      `Expected exactly one muon-core executable in runtime path, found ${existing.length}.`,\n    );\n  }\n  const [corePath] = existing;\n  if (corePath === undefined) {\n    throw new Error(\"muon-core executable was not found.\");\n  }\n  return corePath;\n};\n\n/**\n * Embeds a muon config into a runtime directory containing muon-core.\n *\n * @param options Runtime directory embedding options.\n * @returns Embedding result metadata.\n */\nexport const embedMuonConfigInRuntime = async ({\n  runtimePath,\n  configPath,\n  outputRuntimePath,\n}: EmbedMuonConfigRuntimeOptions): Promise<EmbedMuonConfigResult> => {\n  const targetRuntimePath = outputRuntimePath ?? runtimePath;\n  if (outputRuntimePath !== undefined) {\n    await cp(runtimePath, outputRuntimePath, {\n      recursive: true,\n      force: true,\n    });\n  }\n  return embedMuonConfigInCoreFile({\n    corePath: await resolveRuntimeCorePath(targetRuntimePath),\n    configPath,\n    outputPath: undefined,\n  });\n};\n","// muon - Multi-platform GUI application framework that uses CEF as its backend\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/muon\n\n/**\n * Public muon target platform identifier.\n */\nexport type MuonTarget =\n  | \"linux-amd64\"\n  | \"linux-armhf\"\n  | \"linux-arm64\"\n  | \"windows-i686\"\n  | \"windows-amd64\";\n\n/**\n * Internal CEF target platform identifier.\n */\nexport type MuonCefTarget =\n  | \"linux64\"\n  | \"linuxarm\"\n  | \"linuxarm64\"\n  | \"windows32\"\n  | \"windows64\";\n\n/**\n * muon target operating system family.\n */\nexport type MuonTargetOperatingSystem = \"linux\" | \"windows\";\n\n/**\n * Metadata for one supported muon target.\n */\nexport interface MuonTargetDescriptor {\n  /**\n   * Public target identifier accepted by muon CLI and Vite options.\n   */\n  id: MuonTarget;\n  /**\n   * Internal CEF target identifier used for CEF catalog and native builds.\n   */\n  cefTarget: MuonCefTarget;\n  /**\n   * Operating system family.\n   */\n  os: MuonTargetOperatingSystem;\n  /**\n   * Public architecture name used in package artifact names.\n   */\n  arch: \"amd64\" | \"armhf\" | \"arm64\" | \"i686\";\n  /**\n   * Fixed dist directory path for generated app distributions.\n   */\n  distributionDirectoryName: string;\n  /**\n   * muon-core executable file name for this target.\n   */\n  runtimeExecutableName: string;\n  /**\n   * muon-bootstrap executable file name for this target.\n   */\n  bootstrapExecutableName: string;\n  /**\n   * Optional privileged runtime helper executable file name.\n   */\n  runtimeHelperExecutableName?: string;\n  /**\n   * Launcher file suffix for app bootstrap executables.\n   */\n  launcherExtension: string;\n  /**\n   * Required runtime files copied into generated app distributions.\n   */\n  runtimeFiles: readonly string[];\n  /**\n   * Optional runtime files copied when they exist.\n   */\n  optionalRuntimeFilePatterns?: readonly RegExp[];\n}\n\n/**\n * Supported public muon targets in deterministic build order.\n */\nexport const allMuonTargets = [\n  \"linux-amd64\",\n  \"linux-armhf\",\n  \"linux-arm64\",\n  \"windows-i686\",\n  \"windows-amd64\",\n] as const satisfies readonly MuonTarget[];\n\nconst targetDescriptors = {\n  \"linux-amd64\": {\n    id: \"linux-amd64\",\n    cefTarget: \"linux64\",\n    os: \"linux\",\n    arch: \"amd64\",\n    distributionDirectoryName: \"dist-muon/linux-amd64\",\n    runtimeExecutableName: \"muon-core\",\n    bootstrapExecutableName: \"muon-bootstrap\",\n    runtimeHelperExecutableName: \"muon-runtime-helper\",\n    launcherExtension: \"\",\n    runtimeFiles: [\"muon-core\", \"libmuon-ui.so\", \"libcardio.so\"],\n  },\n  \"linux-armhf\": {\n    id: \"linux-armhf\",\n    cefTarget: \"linuxarm\",\n    os: \"linux\",\n    arch: \"armhf\",\n    distributionDirectoryName: \"dist-muon/linux-armhf\",\n    runtimeExecutableName: \"muon-core\",\n    bootstrapExecutableName: \"muon-bootstrap\",\n    runtimeHelperExecutableName: \"muon-runtime-helper\",\n    launcherExtension: \"\",\n    runtimeFiles: [\"muon-core\", \"libmuon-ui.so\", \"libcardio.so\"],\n  },\n  \"linux-arm64\": {\n    id: \"linux-arm64\",\n    cefTarget: \"linuxarm64\",\n    os: \"linux\",\n    arch: \"arm64\",\n    distributionDirectoryName: \"dist-muon/linux-arm64\",\n    runtimeExecutableName: \"muon-core\",\n    bootstrapExecutableName: \"muon-bootstrap\",\n    runtimeHelperExecutableName: \"muon-runtime-helper\",\n    launcherExtension: \"\",\n    runtimeFiles: [\"muon-core\", \"libmuon-ui.so\", \"libcardio.so\"],\n  },\n  \"windows-i686\": {\n    id: \"windows-i686\",\n    cefTarget: \"windows32\",\n    os: \"windows\",\n    arch: \"i686\",\n    distributionDirectoryName: \"dist-muon/windows-i686\",\n    runtimeExecutableName: \"muon-core.exe\",\n    bootstrapExecutableName: \"muon-bootstrap.exe\",\n    launcherExtension: \".exe\",\n    runtimeFiles: [\"muon-core.exe\", \"libmuon-ui.dll\", \"libcardio.dll\"],\n    optionalRuntimeFilePatterns: [\n      /^libgcc_s_.*-1\\.dll$/,\n      /^libstdc\\+\\+-6\\.dll$/,\n      /^libwinpthread-1\\.dll$/,\n    ],\n  },\n  \"windows-amd64\": {\n    id: \"windows-amd64\",\n    cefTarget: \"windows64\",\n    os: \"windows\",\n    arch: \"amd64\",\n    distributionDirectoryName: \"dist-muon/windows-amd64\",\n    runtimeExecutableName: \"muon-core.exe\",\n    bootstrapExecutableName: \"muon-bootstrap.exe\",\n    launcherExtension: \".exe\",\n    runtimeFiles: [\"muon-core.exe\", \"libmuon-ui.dll\", \"libcardio.dll\"],\n    optionalRuntimeFilePatterns: [\n      /^libgcc_s_.*-1\\.dll$/,\n      /^libstdc\\+\\+-6\\.dll$/,\n      /^libwinpthread-1\\.dll$/,\n    ],\n  },\n} as const satisfies Record<MuonTarget, MuonTargetDescriptor>;\n\nconst targetByCefTarget = Object.fromEntries(\n  allMuonTargets.map((target) => [targetDescriptors[target].cefTarget, target]),\n) as Record<MuonCefTarget, MuonTarget>;\n\n/**\n * Returns metadata for a public muon target.\n *\n * @param target Public muon target.\n * @returns Target descriptor.\n */\nexport const getMuonTargetDescriptor = (\n  target: MuonTarget,\n): MuonTargetDescriptor => targetDescriptors[target];\n\n/**\n * Returns the runtime app identifier embedded for one target distribution.\n *\n * @param appId Base sanitized application identifier.\n * @param target Public muon target.\n * @returns Target runtime application identifier.\n *\n * @remarks Windows targets append their public architecture name so 32-bit and\n * 64-bit packages do not share runtime state or installer identities.\n */\nexport const getMuonTargetRuntimeAppId = (\n  appId: string,\n  target: MuonTarget,\n): string => {\n  const descriptor = getMuonTargetDescriptor(target);\n  return descriptor.os === \"windows\" ? `${appId}.${descriptor.arch}` : appId;\n};\n\n/**\n * Normalizes a user supplied public muon target.\n *\n * @param target Target value supplied by the user.\n * @param label Error label used in diagnostics.\n * @returns Public muon target.\n */\nexport const normalizeMuonTarget = (\n  target: string,\n  label = \"muon target\",\n): MuonTarget => {\n  const normalized = target.trim().toLowerCase();\n  if (allMuonTargets.includes(normalized as MuonTarget)) {\n    return normalized as MuonTarget;\n  }\n  throw new Error(`Unsupported ${label}: ${target}`);\n};\n\n/**\n * Resolves a Node platform and architecture pair to a public muon target.\n *\n * @param platform Node platform.\n * @param architecture Node architecture.\n * @returns Public muon target.\n */\nexport const getDefaultMuonTarget = (\n  platform: NodeJS.Platform,\n  architecture: NodeJS.Architecture,\n): MuonTarget => {\n  if (platform === \"win32\") {\n    if (architecture === \"ia32\") {\n      return \"windows-i686\";\n    }\n    if (architecture === \"x64\") {\n      return \"windows-amd64\";\n    }\n  }\n  if (platform === \"linux\") {\n    if (architecture === \"x64\") {\n      return \"linux-amd64\";\n    }\n    if (architecture === \"arm\") {\n      return \"linux-armhf\";\n    }\n    if (architecture === \"arm64\") {\n      return \"linux-arm64\";\n    }\n  }\n  throw new Error(\n    `Unsupported muon target: platform=${platform}, arch=${architecture}`,\n  );\n};\n\n/**\n * Resolves an internal CEF target to a public muon target.\n *\n * @param cefTarget Internal CEF target.\n * @returns Public muon target.\n */\nexport const getMuonTargetForCefTarget = (\n  cefTarget: MuonCefTarget,\n): MuonTarget => targetByCefTarget[cefTarget];\n","// muon - Multi-platform GUI application framework that uses CEF as its backend\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/muon\n\n/**\n * Progress event used by internal muon build, pack, and prepare operations.\n *\n * @internal\n */\nexport interface MuonProgressEvent {\n  /**\n   * Stable phase identifier.\n   *\n   * @internal\n   */\n  phase: string;\n\n  /**\n   * Human-readable single-line status.\n   *\n   * @internal\n   */\n  status: string;\n\n  /**\n   * Current progress value.\n   *\n   * @internal\n   */\n  current?: number;\n\n  /**\n   * Total progress value.\n   *\n   * @internal\n   */\n  total?: number;\n\n  /**\n   * True when current and total form bounded progress.\n   *\n   * @internal\n   */\n  determinate?: boolean;\n}\n\n/**\n * Receives internal muon progress events.\n *\n * @internal\n */\nexport type MuonProgressCallback = (event: MuonProgressEvent) => void;\n\n/**\n * Renders internal muon progress events to stderr.\n *\n * @internal\n */\nexport interface MuonProgressRenderer {\n  /**\n   * Render a progress event.\n   *\n   * @internal\n   */\n  report(event: MuonProgressEvent): void;\n\n  /**\n   * Complete the active status line.\n   *\n   * @internal\n   */\n  flush(): void;\n}\n\nconst spinnerFrames = [\"-\", \"\\\\\", \"|\", \"/\"] as const;\nconst spinnerIntervalMilliseconds = 200;\nconst terminalLineStart = \"\\r\";\nconst terminalClearLine = \"\\x1b[K\";\n\nconst clampProgressValue = (value: number, total: number): number =>\n  Math.max(0, Math.min(value, total));\n\nconst formatProgressEvent = (event: MuonProgressEvent): string => {\n  const status = event.status.trimEnd();\n  const current = event.current ?? 0;\n  const total = event.total ?? 0;\n  if (event.determinate === true && total > 0) {\n    const percentage = Math.floor(\n      (clampProgressValue(current, total) / total) * 100,\n    );\n    return `${status} ${percentage}%`;\n  }\n  if (event.phase === \"installing\" && current > 0) {\n    return `${status} ${Math.trunc(current)} files`;\n  }\n  return status;\n};\n\ninterface ActiveProgressLine {\n  key: string;\n  text: string;\n}\n\nconst getProgressLineKey = (event: MuonProgressEvent): string =>\n  `${event.phase}\\0${event.status.trimEnd()}`;\n\nconst createSpinnerProgressRenderer = (): MuonProgressRenderer => {\n  let activeLine: ActiveProgressLine | undefined = undefined;\n  let frameIndex = 0;\n  let timer: NodeJS.Timeout | undefined = undefined;\n\n  const writeRaw = (chunk: string): void => {\n    process.stderr.write(chunk);\n  };\n\n  const stopTimer = (): void => {\n    if (timer !== undefined) {\n      clearInterval(timer);\n      timer = undefined;\n    }\n  };\n\n  const renderLine = (): void => {\n    if (activeLine === undefined) {\n      return;\n    }\n    const frame = spinnerFrames[frameIndex] ?? spinnerFrames[0];\n    writeRaw(\n      `${terminalLineStart}${frame} ${activeLine.text}${terminalClearLine}`,\n    );\n    frameIndex = (frameIndex + 1) % spinnerFrames.length;\n  };\n\n  const ensureTimer = (): void => {\n    if (timer === undefined) {\n      timer = setInterval(renderLine, spinnerIntervalMilliseconds);\n      timer.unref();\n    }\n  };\n\n  const finishLine = (): void => {\n    if (activeLine === undefined) {\n      return;\n    }\n    stopTimer();\n    const text = activeLine.text;\n    activeLine = undefined;\n    frameIndex = 0;\n    writeRaw(`${terminalLineStart}${text}${terminalClearLine}\\n`);\n  };\n\n  return {\n    report: (event): void => {\n      const nextLine = {\n        key: getProgressLineKey(event),\n        text: formatProgressEvent(event),\n      };\n      if (activeLine === undefined) {\n        activeLine = nextLine;\n        renderLine();\n        ensureTimer();\n        return;\n      }\n      if (activeLine.key !== nextLine.key) {\n        finishLine();\n        activeLine = nextLine;\n        renderLine();\n      } else {\n        activeLine = nextLine;\n      }\n      ensureTimer();\n    },\n    flush: finishLine,\n  };\n};\n\n/**\n * Creates a stderr progress renderer for the current terminal mode.\n *\n * @internal\n */\nexport const createMuonProgressRenderer = (): MuonProgressRenderer =>\n  createSpinnerProgressRenderer();\n","// muon - Multi-platform GUI application framework that uses CEF as its backend\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/muon\n\nimport { spawn } from \"node:child_process\";\nimport { constants } from \"node:fs\";\nimport { access } from \"node:fs/promises\";\nimport { fileURLToPath } from \"node:url\";\nimport { dirname, join } from \"node:path\";\nimport {\n  getDefaultMuonTarget,\n  normalizeMuonTarget,\n  type MuonTarget,\n} from \"./targets.js\";\nimport {\n  createMuonProgressRenderer,\n  type MuonProgressEvent,\n} from \"./progress.js\";\n\n/**\n * Options used to invoke the native muon builder helper.\n */\nexport interface MuonPrepareOptions {\n  /**\n   * Directory containing muon-core runtime files.\n   */\n  muonPath: string;\n\n  /**\n   * Directory containing CEF files, or a CEF archive root with Release/Resources.\n   */\n  cefPath: string | undefined;\n\n  /**\n   * Directory where the executable runtime is staged.\n   */\n  stageDir: string | undefined;\n\n  /**\n   * Public target runtime platform such as linux-amd64 or windows-amd64.\n   */\n  target: string | undefined;\n\n  /**\n   * Cache directory passed to muon-builder.\n   */\n  cacheDir: string | undefined;\n\n  /**\n   * Rebuild an existing prepared runtime.\n   */\n  force: boolean;\n\n  /**\n   * Suppress progress messages from the native builder process.\n   */\n  quiet: boolean;\n\n  /**\n   * Explicit native muon-builder executable path.\n   */\n  prepareExecutablePath: string | undefined;\n\n  /**\n   * Environment used for the child process.\n   */\n  environment: NodeJS.ProcessEnv;\n\n  /**\n   * Working directory used for the child process.\n   */\n  cwd: string | undefined;\n}\n\n/**\n * Options used to update Windows PE resources through the native muon helper.\n */\nexport interface MuonPrepareResourceUpdateOptions {\n  /**\n   * Input PE executable path.\n   */\n  inputPath: string;\n\n  /**\n   * Engraver update JSON path.\n   */\n  updatesJsonPath: string;\n\n  /**\n   * Output PE executable path.\n   *\n   * @remarks This must be different from `inputPath`.\n   */\n  outputPath: string;\n\n  /**\n   * Suppress progress messages from the native builder process.\n   */\n  quiet: boolean;\n\n  /**\n   * Explicit native muon-builder executable path.\n   */\n  prepareExecutablePath: string | undefined;\n\n  /**\n   * Environment used for the child process.\n   */\n  environment: NodeJS.ProcessEnv;\n\n  /**\n   * Working directory used for the child process.\n   */\n  cwd: string | undefined;\n}\n\n/**\n * Result returned by native muon-builder.\n */\nexport interface MuonPrepareResult {\n  /**\n   * Directory containing the staged muon runtime.\n   */\n  stagePath?: string;\n\n  /**\n   * Directory containing muon-core files used as the staging source.\n   */\n  muonPath: string;\n\n  /**\n   * Directory or cached archive containing CEF files used as the staging source.\n   */\n  cefPath: string;\n\n  /**\n   * True when an existing prepared runtime was reused.\n   */\n  cacheHit: boolean;\n}\n\n/**\n * Returns the default muon prepare target for a Node platform and architecture.\n *\n * @param platform Node platform.\n * @param architecture Node architecture.\n * @returns muon prepare target name.\n */\nexport const getDefaultMuonPrepareTarget = (\n  platform: NodeJS.Platform,\n  architecture: NodeJS.Architecture,\n): MuonTarget => {\n  try {\n    return getDefaultMuonTarget(platform, architecture);\n  } catch {\n    throw new Error(\n      `Unsupported muon prepare target: platform=${platform}, arch=${architecture}`,\n    );\n  }\n};\n\nconst getBuilderExecutableName = (platform: NodeJS.Platform): string =>\n  platform === \"win32\" ? \"muon-builder.exe\" : \"muon-builder\";\n\nconst moduleDirectory =\n  typeof __dirname === \"string\"\n    ? __dirname\n    : dirname(fileURLToPath(import.meta.url));\n\nconst canExecute = async (path: string): Promise<boolean> => {\n  try {\n    await access(path, constants.X_OK);\n    return true;\n  } catch {\n    return false;\n  }\n};\n\nconst resolveMuonBuilderExecutable = async (\n  options: Pick<MuonPrepareOptions, \"prepareExecutablePath\" | \"environment\">,\n): Promise<string> => {\n  const explicit =\n    options.prepareExecutablePath ?? options.environment.MUON_BUILDER_PATH;\n  if (explicit !== undefined && explicit !== \"\") {\n    return explicit;\n  }\n  const executableName = getBuilderExecutableName(process.platform);\n  const target = getDefaultMuonPrepareTarget(process.platform, process.arch);\n  const candidates = [\n    join(moduleDirectory, \"native\", target, executableName),\n    join(moduleDirectory, \"..\", \"dist\", \"native\", target, executableName),\n  ];\n  for (const candidate of candidates) {\n    if (await canExecute(candidate)) {\n      return candidate;\n    }\n  }\n  return candidates[0] ?? executableName;\n};\n\nconst createMuonPrepareArguments = (options: MuonPrepareOptions): string[] => {\n  const args = [\"runtime\", \"--muon-path\", options.muonPath, \"--json\"];\n  if (!options.quiet) {\n    args.push(\"--progress-json\");\n  }\n  if (options.cefPath !== undefined) {\n    args.push(\"--cef-path\", options.cefPath);\n  }\n  if (options.stageDir !== undefined) {\n    args.push(\"--stage-dir\", options.stageDir);\n  }\n  if (options.target !== undefined) {\n    args.push(\n      \"--target\",\n      normalizeMuonTarget(options.target, \"muon prepare target\"),\n    );\n  }\n  if (options.cacheDir !== undefined) {\n    args.push(\"--cache-dir\", options.cacheDir);\n  }\n  if (options.force) {\n    args.push(\"--force\");\n  }\n  if (options.quiet) {\n    args.push(\"--quiet\");\n  }\n  return args;\n};\n\ninterface MuonPrepareStderrForwarder {\n  write(chunk: string): void;\n  flush(): void;\n}\n\nconst createPlainStderrForwarder = (): MuonPrepareStderrForwarder => ({\n  write: (chunk): void => {\n    process.stderr.write(chunk);\n  },\n  flush: (): void => {},\n});\n\nconst parseProgressJsonLine = (line: string): MuonProgressEvent | undefined => {\n  const trimmed = line.trim();\n  if (!trimmed.startsWith(\"{\")) {\n    return undefined;\n  }\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(trimmed);\n  } catch {\n    return undefined;\n  }\n  if (typeof parsed !== \"object\" || parsed === null) {\n    return undefined;\n  }\n  const event = parsed as Record<string, unknown>;\n  if (typeof event.phase !== \"string\" || typeof event.status !== \"string\") {\n    return undefined;\n  }\n  const current =\n    typeof event.current === \"number\" && Number.isFinite(event.current)\n      ? event.current\n      : undefined;\n  const total =\n    typeof event.total === \"number\" && Number.isFinite(event.total)\n      ? event.total\n      : undefined;\n  const determinate =\n    typeof event.determinate === \"boolean\" ? event.determinate : undefined;\n  return {\n    phase: event.phase,\n    status: event.status,\n    ...(current === undefined ? {} : { current }),\n    ...(total === undefined ? {} : { total }),\n    ...(determinate === undefined ? {} : { determinate }),\n  };\n};\n\nconst createProgressJsonStderrForwarder = (): MuonPrepareStderrForwarder => {\n  let pending = \"\";\n  const renderer = createMuonProgressRenderer();\n\n  const writeLine = (line: string): void => {\n    const event = parseProgressJsonLine(line);\n    if (event !== undefined) {\n      renderer.report(event);\n    }\n  };\n\n  return {\n    write: (chunk): void => {\n      pending += chunk;\n      for (;;) {\n        const newlineIndex = pending.indexOf(\"\\n\");\n        if (newlineIndex < 0) {\n          break;\n        }\n        const line = pending.slice(0, newlineIndex + 1);\n        pending = pending.slice(newlineIndex + 1);\n        writeLine(line);\n      }\n    },\n    flush: (): void => {\n      if (pending.length > 0) {\n        const line = pending;\n        pending = \"\";\n        writeLine(line);\n      }\n      renderer.flush();\n    },\n  };\n};\n\nconst runMuonPrepareCommand = async (\n  options: Pick<MuonPrepareOptions, \"prepareExecutablePath\" | \"environment\"> & {\n    args: readonly string[];\n    cwd: string | undefined;\n    quiet: boolean;\n    parseProgressJson: boolean;\n  },\n): Promise<string> => {\n  const executable = await resolveMuonBuilderExecutable(options);\n  const child = spawn(executable, [...options.args], {\n    cwd: options.cwd,\n    env: options.environment,\n    stdio: [\"ignore\", \"pipe\", \"pipe\"],\n  });\n  let stdout = \"\";\n  let stderr = \"\";\n  child.stdout.setEncoding(\"utf8\");\n  child.stderr.setEncoding(\"utf8\");\n  const stderrForwarder = options.quiet\n    ? undefined\n    : options.parseProgressJson\n      ? createProgressJsonStderrForwarder()\n      : createPlainStderrForwarder();\n  child.stdout.on(\"data\", (chunk: string) => {\n    stdout += chunk;\n  });\n  child.stderr.on(\"data\", (chunk: string) => {\n    stderr += chunk;\n    stderrForwarder?.write(chunk);\n  });\n  const exitCode = await (async (): Promise<number> => {\n    try {\n      return await new Promise<number>((resolvePromise, reject) => {\n        child.on(\"error\", reject);\n        child.on(\"close\", (code) => {\n          resolvePromise(code ?? 1);\n        });\n      });\n    } finally {\n      stderrForwarder?.flush();\n    }\n  })();\n  if (exitCode !== 0) {\n    throw new Error(\n      `muon-builder failed with exit code ${exitCode}.\\n${stderr.trim()}`,\n    );\n  }\n  return stdout;\n};\n\n/**\n * Invokes the native muon-builder executable and returns the prepared runtime.\n *\n * @param options Native prepare invocation options.\n * @returns Prepared runtime location.\n */\nexport const runMuonPrepare = async (\n  options: MuonPrepareOptions,\n): Promise<MuonPrepareResult> => {\n  const args = createMuonPrepareArguments(options);\n  const stdout = await runMuonPrepareCommand({\n    prepareExecutablePath: options.prepareExecutablePath,\n    environment: options.environment,\n    cwd: options.cwd,\n    quiet: options.quiet,\n    parseProgressJson: !options.quiet,\n    args,\n  });\n  const result = JSON.parse(stdout) as Partial<MuonPrepareResult>;\n  if (\n    (result.stagePath !== undefined && typeof result.stagePath !== \"string\") ||\n    typeof result.muonPath !== \"string\" ||\n    typeof result.cefPath !== \"string\" ||\n    typeof result.cacheHit !== \"boolean\"\n  ) {\n    throw new Error(`muon-builder returned invalid JSON: ${stdout}`);\n  }\n  return {\n    ...(result.stagePath === undefined ? {} : { stagePath: result.stagePath }),\n    muonPath: result.muonPath,\n    cefPath: result.cefPath,\n    cacheHit: result.cacheHit,\n  };\n};\n\n/**\n * Invokes the native muon-builder executable to write Windows PE resources.\n *\n * @param options Resource update invocation options.\n */\nexport const runMuonPrepareResourceUpdate = async (\n  options: MuonPrepareResourceUpdateOptions,\n): Promise<void> => {\n  await runMuonPrepareCommand({\n    prepareExecutablePath: options.prepareExecutablePath,\n    environment: options.environment,\n    cwd: options.cwd,\n    quiet: options.quiet,\n    parseProgressJson: false,\n    args: [\n      \"resource\",\n      \"--input\",\n      options.inputPath,\n      \"--updates-json\",\n      options.updatesJsonPath,\n      \"--output\",\n      options.outputPath,\n      ...(options.quiet ? [\"--quiet\"] : []),\n    ],\n  });\n};\n","// muon - Multi-platform GUI application framework that uses CEF as its backend\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/muon\n\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\n\nimport sharp from \"sharp\";\n\nconst normalizedIconSize = 256;\nconst windowsIconDibSizes = [16, 24, 32, 48, 64, 128] as const;\nconst pngSignature = Buffer.from([\n  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,\n]);\n\ninterface RawIconImage {\n  data: Buffer;\n  width: number;\n  height: number;\n}\n\ninterface WindowsIconImage {\n  data: Buffer;\n  size: number;\n  bitCount: number;\n}\n\n/**\n * Creates a normalized square PNG icon image.\n *\n * @param pngData Source PNG bytes.\n * @param source Diagnostic source label used in errors.\n * @param label User-facing diagnostic label.\n * @returns PNG bytes normalized to the muon base icon size.\n * @remarks Non-square images are fitted into transparent padding without\n * stretching. The normalized PNG is the source for all platform-specific icon\n * derivatives.\n */\nexport const createNormalizedIconPngData = async (\n  pngData: Buffer,\n  source: string,\n  label: string,\n): Promise<Buffer> => {\n  await assertPngData(pngData, source, label);\n  try {\n    return await sharp(pngData)\n      .resize(normalizedIconSize, normalizedIconSize, {\n        fit: \"contain\",\n        background: { r: 0, g: 0, b: 0, alpha: 0 },\n      })\n      .ensureAlpha()\n      .png()\n      .toBuffer();\n  } catch {\n    throw new Error(`${label} must be a valid PNG: ${source}`);\n  }\n};\n\n/**\n * Creates a normalized square PNG icon image for Windows resources.\n *\n * @param pngData Source PNG bytes.\n * @param source Diagnostic source label used in errors.\n * @returns PNG bytes normalized to the muon base icon size.\n */\nexport const createNormalizedMuonIconPngData = async (\n  pngData: Buffer,\n  source: string,\n): Promise<Buffer> =>\n  await createNormalizedIconPngData(pngData, source, \"Windows resource icon\");\n\n/**\n * Creates a Windows ICO file from PNG bytes.\n *\n * @param pngData Source PNG bytes.\n * @param source Diagnostic source label used in errors.\n * @returns ICO file bytes containing 16, 24, 32, 48, 64, 128, and 256 pixel images.\n * @remarks The 256px entry is PNG-compressed. Smaller entries are 32-bit DIB\n * images, matching the common Windows ICO layout recommended by Microsoft.\n */\nexport const createWindowsIconBufferFromPngData = async (\n  pngData: Buffer,\n  source: string,\n): Promise<Buffer> => {\n  const normalizedPng = await createNormalizedMuonIconPngData(pngData, source);\n  const images: WindowsIconImage[] = [];\n  for (const size of windowsIconDibSizes) {\n    const rawImage = await resizePngToRawRgba(normalizedPng, size, source);\n    images.push({\n      data: createDibIconImage(rawImage),\n      size,\n      bitCount: 32,\n    });\n  }\n  images.push({\n    data: normalizedPng,\n    size: normalizedIconSize,\n    bitCount: 32,\n  });\n  return createIco(images);\n};\n\n/**\n * Creates a Windows ICO file from a PNG file.\n *\n * @param sourcePath Source PNG file path.\n * @param outputPath Output ICO file path.\n * @returns Promise resolved when the ICO file has been written.\n */\nexport const createWindowsIconFromPngFile = async (\n  sourcePath: string,\n  outputPath: string,\n): Promise<void> => {\n  const icon = await createWindowsIconBufferFromPngData(\n    await readFile(sourcePath),\n    sourcePath,\n  );\n  await mkdir(dirname(outputPath), { recursive: true });\n  await writeFile(outputPath, icon);\n};\n\nconst assertPngData = async (\n  data: Buffer,\n  source: string,\n  label: string,\n): Promise<void> => {\n  if (data.length === 0) {\n    throw new Error(`${label} PNG must not be empty: ${source}`);\n  }\n  if (!data.subarray(0, pngSignature.length).equals(pngSignature)) {\n    throw new Error(`${label} must be a valid PNG: ${source}`);\n  }\n  try {\n    const metadata = await sharp(data).metadata();\n    if (metadata.format !== \"png\") {\n      throw new Error();\n    }\n  } catch {\n    throw new Error(`${label} must be a valid PNG: ${source}`);\n  }\n};\n\nconst resizePngToRawRgba = async (\n  pngData: Buffer,\n  size: number,\n  source: string,\n): Promise<RawIconImage> => {\n  try {\n    const { data, info } = await sharp(pngData)\n      .resize(size, size, {\n        fit: \"fill\",\n        kernel: \"lanczos3\",\n      })\n      .ensureAlpha()\n      .raw()\n      .toBuffer({ resolveWithObject: true });\n    if (info.width !== size || info.height !== size || info.channels !== 4) {\n      throw new Error();\n    }\n    return {\n      data,\n      width: info.width,\n      height: info.height,\n    };\n  } catch {\n    throw new Error(`Failed to resize Windows resource icon PNG: ${source}`);\n  }\n};\n\nconst createDibIconImage = (image: RawIconImage): Buffer => {\n  const pixelBytes = image.width * image.height * 4;\n  const maskStride = Math.ceil(image.width / 32) * 4;\n  const maskBytes = maskStride * image.height;\n  const output = Buffer.alloc(40 + pixelBytes + maskBytes);\n  output.writeUInt32LE(40, 0);\n  output.writeInt32LE(image.width, 4);\n  output.writeInt32LE(image.height * 2, 8);\n  output.writeUInt16LE(1, 12);\n  output.writeUInt16LE(32, 14);\n  output.writeUInt32LE(0, 16);\n  output.writeUInt32LE(pixelBytes + maskBytes, 20);\n  output.writeInt32LE(0, 24);\n  output.writeInt32LE(0, 28);\n  output.writeUInt32LE(0, 32);\n  output.writeUInt32LE(0, 36);\n\n  for (let y = 0; y < image.height; y += 1) {\n    const sourceY = image.height - 1 - y;\n    for (let x = 0; x < image.width; x += 1) {\n      const sourceOffset = (sourceY * image.width + x) * 4;\n      const outputOffset = 40 + (y * image.width + x) * 4;\n      output[outputOffset] = image.data[sourceOffset + 2]!;\n      output[outputOffset + 1] = image.data[sourceOffset + 1]!;\n      output[outputOffset + 2] = image.data[sourceOffset]!;\n      output[outputOffset + 3] = image.data[sourceOffset + 3]!;\n    }\n  }\n  return output;\n};\n\nconst createIco = (images: readonly WindowsIconImage[]): Buffer => {\n  const directorySize = 6 + images.length * 16;\n  let imageOffset = directorySize;\n  const header = Buffer.alloc(directorySize);\n  header.writeUInt16LE(0, 0);\n  header.writeUInt16LE(1, 2);\n  header.writeUInt16LE(images.length, 4);\n\n  const imageData: Buffer[] = [];\n  images.forEach((image, index) => {\n    const entryOffset = 6 + index * 16;\n    header[entryOffset] = image.size === 256 ? 0 : image.size;\n    header[entryOffset + 1] = image.size === 256 ? 0 : image.size;\n    header[entryOffset + 2] = 0;\n    header[entryOffset + 3] = 0;\n    header.writeUInt16LE(1, entryOffset + 4);\n    header.writeUInt16LE(image.bitCount, entryOffset + 6);\n    header.writeUInt32LE(image.data.length, entryOffset + 8);\n    header.writeUInt32LE(imageOffset, entryOffset + 12);\n    imageOffset += image.data.length;\n    imageData.push(image.data);\n  });\n\n  return Buffer.concat([header, ...imageData]);\n};\n","// muon - Multi-platform GUI application framework that uses CEF as its backend\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/muon\n\nimport { constants } from \"node:fs\";\nimport { access, readFile } from \"node:fs/promises\";\nimport { extname, isAbsolute, resolve } from \"node:path\";\n\nimport { createNormalizedIconPngData } from \"./windows-icon.js\";\n\ntype JsonObject = Record<string, unknown>;\n\n/**\n * ZIP entry used for the generated static application icon asset.\n */\nexport const appIconAssetEntryName = \"main/.muon/app-icon.png\";\n\n/**\n * Runtime asset URL injected as the generated initial title bar icon.\n */\nexport const appIconAssetUrl = \"asset://main/.muon/app-icon.png\";\n\n/**\n * Source for a unified static application icon path.\n */\nexport interface MuonAppIconSource {\n  /** Raw icon path as supplied by the source. */\n  iconPath: string;\n  /** Directory that relative icon paths are resolved from. */\n  directory: string;\n}\n\n/**\n * Creates a static application icon source from API or CLI options.\n */\nexport const createAppIconOptionsSource = (\n  iconPath: unknown,\n  directory: string,\n  label: string = \"iconPath\",\n): MuonAppIconSource | undefined => {\n  if (iconPath === undefined) {\n    return undefined;\n  }\n  if (typeof iconPath !== \"string\") {\n    throw new Error(`${label} must be a string when present.`);\n  }\n  if (iconPath.trim() === \"\") {\n    return undefined;\n  }\n  return {\n    iconPath: iconPath.trim(),\n    directory,\n  };\n};\n\n/**\n * Reads the top-level `iconPath` from a muon config object.\n */\nexport const readConfigAppIconSource = (\n  config: JsonObject,\n  directory: string,\n  label: string,\n): MuonAppIconSource | undefined => {\n  const value = config.iconPath;\n  if (value === undefined) {\n    return undefined;\n  }\n  if (typeof value !== \"string\") {\n    throw new Error(`${label} iconPath must be a string when present.`);\n  }\n  return createAppIconOptionsSource(value, directory);\n};\n\n/**\n * Reads the top-level `iconPath` from project metadata.\n */\nexport const readProjectAppIconSource = (\n  projectJson: JsonObject,\n  directory: string,\n): MuonAppIconSource | undefined => {\n  const value = projectJson.iconPath;\n  return typeof value === \"string\"\n    ? createAppIconOptionsSource(value, directory)\n    : undefined;\n};\n\n/**\n * Resolves and validates the first available static application icon source.\n */\nexport const resolveMuonAppIconPath = async (\n  sources: readonly MuonAppIconSource[],\n): Promise<string | undefined> => {\n  for (const source of sources) {\n    const iconPath = resolveResourcePath(source.directory, source.iconPath);\n    await assertMuonAppIconPath(iconPath);\n    return iconPath;\n  }\n  return undefined;\n};\n\nconst assertMuonAppIconPath = async (iconPath: string): Promise<void> => {\n  if (extname(iconPath).toLowerCase() !== \".png\") {\n    throw new Error(`muon app icon must be a .png file: ${iconPath}`);\n  }\n  if (!(await fileExists(iconPath))) {\n    throw new Error(`muon app icon does not exist: ${iconPath}`);\n  }\n  await createNormalizedIconPngData(\n    await readFile(iconPath),\n    iconPath,\n    \"muon app icon\",\n  );\n};\n\nconst resolveResourcePath = (directory: string, value: string): string =>\n  isAbsolute(value) ? value : resolve(directory, value);\n\nconst fileExists = async (path: string): Promise<boolean> => {\n  try {\n    await access(path, constants.F_OK);\n    return true;\n  } catch {\n    return false;\n  }\n};\n","// muon - Multi-platform GUI application framework that uses CEF as its backend\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/muon\n\nimport { constants } from \"node:fs\";\nimport {\n  access,\n  chmod,\n  copyFile,\n  mkdtemp,\n  readFile,\n  rm,\n  stat,\n  writeFile,\n} from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { dirname, extname, isAbsolute, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { parse } from \"json5\";\n\nimport { runMuonPrepareResourceUpdate } from \"./prepare.js\";\nimport type { MuonWindowsResourceOptions } from \"./vite.js\";\nimport {\n  createNormalizedMuonIconPngData,\n  createWindowsIconFromPngFile,\n} from \"./windows-icon.js\";\nimport {\n  createAppIconOptionsSource,\n  readConfigAppIconSource,\n  readProjectAppIconSource,\n  resolveMuonAppIconPath,\n  type MuonAppIconSource,\n} from \"./app-icon.js\";\n\nexport type { MuonWindowsResourceOptions } from \"./vite.js\";\n\nconst defaultConfigFileNames = [\"muon.json5\", \"muon.jsonc\", \"muon.json\"];\nconst defaultLanguage = 1033;\nconst defaultCodePage = 1200;\nconst moduleDirectory =\n  typeof __dirname === \"string\"\n    ? __dirname\n    : dirname(fileURLToPath(import.meta.url));\n\ntype JsonObject = Record<string, unknown>;\n\ninterface WindowsResourceSource {\n  options: MuonWindowsResourceOptions;\n  directory: string;\n}\n\ninterface WindowsResourceDefaults {\n  productName: string;\n  fileDescription: string;\n  companyName: string;\n  version: string;\n  copyright: string | undefined;\n}\n\ninterface ResolveWindowsResourceInput {\n  root: string;\n  packageDirectory: string;\n  packageJson: JsonObject;\n  muonConfig: JsonObject;\n  muonConfigDirectory: string;\n  options: MuonWindowsResourceOptions | undefined;\n  appIconPath: string | undefined;\n  defaults: WindowsResourceDefaults;\n}\n\n/**\n * Resolved Windows resource metadata used by build and pack outputs.\n */\nexport interface ResolvedMuonWindowsResource {\n  /** Resolved `.png` icon file path. */\n  iconPath: string;\n  /** Product name. */\n  productName: string;\n  /** File description. */\n  fileDescription: string;\n  /** Company name. */\n  companyName: string;\n  /** Original version string. */\n  version: string;\n  /** Four-part fixed version string. */\n  fixedVersion: string;\n  /** Legal copyright, if supplied. */\n  copyright: string | undefined;\n  /** Windows resource language identifier. */\n  language: number;\n  /** Windows version resource code page. */\n  codePage: number;\n}\n\n/**\n * muon config file content and directory used for resource option resolution.\n */\nexport interface MuonWindowsResourceConfigSource {\n  /** Parsed muon config object. */\n  config: JsonObject;\n  /** Directory that relative config paths are resolved from. */\n  directory: string;\n}\n\n/**\n * Reads the muon config file using the same default file names as muon build.\n */\nexport const readMuonConfigForWindowsResource = async (\n  root: string,\n  configPath: string | undefined,\n): Promise<MuonWindowsResourceConfigSource> => {\n  const resolvedConfigPath = await resolveConfigPath(root, configPath);\n  if (resolvedConfigPath === undefined) {\n    return {\n      config: {},\n      directory: root,\n    };\n  }\n  return {\n    config: await readJsonObjectFile(resolvedConfigPath, \"muon config file\"),\n    directory: dirname(resolvedConfigPath),\n  };\n};\n\n/**\n * Merges Windows resource options while preserving field-level fallback.\n */\nexport const mergeMuonWindowsResourceOptions = (\n  primary: MuonWindowsResourceOptions | undefined,\n  fallback: MuonWindowsResourceOptions | undefined,\n): MuonWindowsResourceOptions | undefined => {\n  if (primary === undefined) {\n    return fallback;\n  }\n  if (fallback === undefined) {\n    return primary;\n  }\n\n  const merged: MuonWindowsResourceOptions = { ...fallback };\n  if (primary.iconPath !== undefined) {\n    merged.iconPath = primary.iconPath;\n  }\n  if (primary.productName !== undefined) {\n    merged.productName = primary.productName;\n  }\n  if (primary.fileDescription !== undefined) {\n    merged.fileDescription = primary.fileDescription;\n  }\n  if (primary.companyName !== undefined) {\n    merged.companyName = primary.companyName;\n  }\n  if (primary.version !== undefined) {\n    merged.version = primary.version;\n  }\n  if (primary.copyright !== undefined) {\n    merged.copyright = primary.copyright;\n  }\n  if (primary.language !== undefined) {\n    merged.language = primary.language;\n  }\n  if (primary.codePage !== undefined) {\n    merged.codePage = primary.codePage;\n  }\n  return merged;\n};\n\n/**\n * Resolves Windows resource metadata from options, config files, and package metadata.\n */\nexport const resolveMuonWindowsResource = async (\n  input: ResolveWindowsResourceInput,\n): Promise<ResolvedMuonWindowsResource> => {\n  const projectJson = await readProjectJson(input.root);\n  const windowsSources = [\n    createOptionsSource(input.options, input.root, \"windowsResource\"),\n    readConfigWindowsResourceSource(\n      input.muonConfig,\n      input.muonConfigDirectory,\n      \"muon.json\",\n    ),\n    readConfigWindowsResourceSource(projectJson, input.root, \"project.json\"),\n  ].filter((source): source is WindowsResourceSource => source !== undefined);\n  const sources = [\n    ...windowsSources,\n    createProjectSource(projectJson, input.root),\n    createPackageSource(input.packageJson, input.root),\n  ].filter((source): source is WindowsResourceSource => source !== undefined);\n  const appIconSources = [\n    createAppIconOptionsSource(input.appIconPath, input.root),\n    readConfigAppIconSource(\n      input.muonConfig,\n      input.muonConfigDirectory,\n      \"muon.json\",\n    ),\n    readProjectAppIconSource(projectJson, input.root),\n  ].filter((source): source is MuonAppIconSource => source !== undefined);\n\n  const productName = resolveStringField(\n    sources,\n    \"productName\",\n    input.defaults.productName,\n  );\n  const fileDescription = resolveStringField(\n    sources,\n    \"fileDescription\",\n    input.defaults.fileDescription,\n  );\n  const companyName = resolveStringField(\n    sources,\n    \"companyName\",\n    input.defaults.companyName,\n  );\n  const version = resolveStringField(\n    sources,\n    \"version\",\n    input.defaults.version,\n  );\n  const copyright = resolveOptionalStringField(\n    sources,\n    \"copyright\",\n    input.defaults.copyright,\n  );\n  const language = resolveNumericField(sources, \"language\", defaultLanguage);\n  const codePage = resolveNumericField(sources, \"codePage\", defaultCodePage);\n  const fixedVersion = normalizeWindowsVersion(version);\n  const iconPath = await resolveWindowsIconPath(\n    windowsSources,\n    appIconSources,\n    await resolveDefaultWindowsIcon(input.packageDirectory),\n  );\n\n  return {\n    iconPath,\n    productName,\n    fileDescription,\n    companyName,\n    version,\n    fixedVersion,\n    copyright,\n    language,\n    codePage,\n  };\n};\n\n/**\n * Removes build-only Windows resource settings from runtime config.\n */\nexport const stripBuildOnlyWindowsResourceConfig = (\n  sourceConfig: JsonObject,\n): JsonObject => {\n  const sourceWindows = sourceConfig.windows;\n  if (!isJsonObject(sourceWindows)) {\n    return sourceConfig;\n  }\n\n  const windowsConfig: JsonObject = {};\n  for (const [key, value] of Object.entries(sourceWindows)) {\n    if (key !== \"resource\") {\n      windowsConfig[key] = value;\n    }\n  }\n\n  const output: JsonObject = {};\n  for (const [key, value] of Object.entries(sourceConfig)) {\n    if (key !== \"windows\") {\n      output[key] = value;\n    }\n  }\n  if (Object.keys(windowsConfig).length > 0) {\n    output.windows = windowsConfig;\n  }\n  return output;\n};\n\n/**\n * Returns true when the file has a Windows PE header.\n */\nexport const isWindowsPeExecutable = async (path: string): Promise<boolean> => {\n  const content = await readFile(path);\n  if (content.length < 0x40 || content.toString(\"ascii\", 0, 2) !== \"MZ\") {\n    return false;\n  }\n  const peOffset = content.readUInt32LE(0x3c);\n  return (\n    peOffset + 4 <= content.length &&\n    content.toString(\"ascii\", peOffset, peOffset + 4) === \"PE\\0\\0\"\n  );\n};\n\n/**\n * Applies resolved resource metadata to a Windows PE executable in place.\n */\nexport const updateWindowsPeResources = async (input: {\n  executablePath: string;\n  resource: ResolvedMuonWindowsResource;\n  environment: NodeJS.ProcessEnv;\n  cwd: string;\n}): Promise<boolean> => {\n  return await updateWindowsPeResourceFile(input, createEngraverUpdate);\n};\n\n/**\n * Applies only resolved icon metadata to a Windows PE executable in place.\n */\nexport const updateWindowsPeIconResource = async (input: {\n  executablePath: string;\n  resource: ResolvedMuonWindowsResource;\n  environment: NodeJS.ProcessEnv;\n  cwd: string;\n}): Promise<boolean> => {\n  return await updateWindowsPeResourceFile(input, createEngraverIconUpdate);\n};\n\nconst updateWindowsPeResourceFile = async (\n  input: {\n    executablePath: string;\n    resource: ResolvedMuonWindowsResource;\n    environment: NodeJS.ProcessEnv;\n    cwd: string;\n  },\n  createUpdate: (\n    resource: ResolvedMuonWindowsResource,\n    iconPath: string,\n  ) => JsonObject,\n): Promise<boolean> => {\n  if (!(await isWindowsPeExecutable(input.executablePath))) {\n    return false;\n  }\n\n  const mode = (await stat(input.executablePath)).mode & 0o777;\n  const tempDirectory = await mkdtemp(join(tmpdir(), \"muon-windows-resource-\"));\n  const updatesJsonPath = join(tempDirectory, \"updates.json\");\n  const outputPath = join(tempDirectory, \"output.exe\");\n  const iconPath = join(tempDirectory, \"icon.ico\");\n  try {\n    await createWindowsIconFromPngFile(input.resource.iconPath, iconPath);\n    await writeFile(\n      updatesJsonPath,\n      `${JSON.stringify(createUpdate(input.resource, iconPath), null, 2)}\\n`,\n    );\n    await runMuonPrepareResourceUpdate({\n      inputPath: input.executablePath,\n      updatesJsonPath,\n      outputPath,\n      quiet: true,\n      prepareExecutablePath: undefined,\n      environment: input.environment,\n      cwd: input.cwd,\n    });\n    await copyFile(outputPath, input.executablePath);\n    await chmod(input.executablePath, mode === 0 ? 0o755 : mode);\n    return true;\n  } finally {\n    await rm(tempDirectory, { recursive: true, force: true });\n  }\n};\n\nconst createEngraverUpdate = (\n  resource: ResolvedMuonWindowsResource,\n  iconPath: string,\n): JsonObject => {\n  const strings: JsonObject = {\n    CompanyName: resource.companyName,\n    FileDescription: resource.fileDescription,\n    FileVersion: resource.version,\n    ProductName: resource.productName,\n    ProductVersion: resource.version,\n  };\n  if (resource.copyright !== undefined) {\n    strings.LegalCopyright = resource.copyright;\n  }\n\n  return {\n    version: {\n      language: resource.language,\n      codePage: resource.codePage,\n      fixed: {\n        fileVersion: resource.fixedVersion,\n        productVersion: resource.fixedVersion,\n        fileOS: \"windows32\",\n        fileType: \"app\",\n      },\n      strings,\n    },\n    icons: createEngraverIcons(resource, iconPath),\n  };\n};\n\nconst createEngraverIconUpdate = (\n  resource: ResolvedMuonWindowsResource,\n  iconPath: string,\n): JsonObject => ({\n  icons: createEngraverIcons(resource, iconPath),\n});\n\nconst createEngraverIcons = (\n  resource: ResolvedMuonWindowsResource,\n  iconPath: string,\n): JsonObject[] => [\n  {\n    id: 1,\n    language: resource.language,\n    path: iconPath,\n  },\n];\n\nconst resolveConfigPath = async (\n  root: string,\n  configPath: string | undefined,\n): Promise<string | undefined> => {\n  if (configPath !== undefined) {\n    const resolvedPath = resolve(root, configPath);\n    if (await fileExists(resolvedPath)) {\n      return resolvedPath;\n    }\n    throw new Error(`muon config file does not exist: ${resolvedPath}`);\n  }\n\n  for (const fileName of defaultConfigFileNames) {\n    const candidatePath = join(root, fileName);\n    if (await fileExists(candidatePath)) {\n      return candidatePath;\n    }\n  }\n  return undefined;\n};\n\nconst readProjectJson = async (root: string): Promise<JsonObject> => {\n  const projectJsonPath = join(root, \"project.json\");\n  if (!(await fileExists(projectJsonPath))) {\n    return {};\n  }\n  return await readJsonObjectFile(projectJsonPath, \"project.json\");\n};\n\nconst readJsonObjectFile = async (\n  filePath: string,\n  label: string,\n): Promise<JsonObject> => {\n  const parsed = parse(await readFile(filePath, \"utf8\"));\n  if (!isJsonObject(parsed)) {\n    throw new Error(`${label} must contain a JSON object: ${filePath}`);\n  }\n  return parsed;\n};\n\nconst createOptionsSource = (\n  options: MuonWindowsResourceOptions | undefined,\n  directory: string,\n  label: string,\n): WindowsResourceSource | undefined => {\n  if (options === undefined) {\n    return undefined;\n  }\n  return {\n    options: validateWindowsResourceOptions(options, label),\n    directory,\n  };\n};\n\nconst readConfigWindowsResourceSource = (\n  config: JsonObject,\n  directory: string,\n  label: string,\n): WindowsResourceSource | undefined => {\n  const windows = config.windows;\n  if (windows === undefined) {\n    return undefined;\n  }\n  if (!isJsonObject(windows)) {\n    throw new Error(`${label} windows must be an object when present.`);\n  }\n  const resource = windows.resource;\n  if (resource === undefined) {\n    return undefined;\n  }\n  return createOptionsSource(\n    validateWindowsResourceOptions(resource, `${label} windows.resource`),\n    directory,\n    `${label} windows.resource`,\n  );\n};\n\nconst createProjectSource = (\n  projectJson: JsonObject,\n  directory: string,\n): WindowsResourceSource | undefined => {\n  const topLevel: MuonWindowsResourceOptions = {};\n  copyStringField(projectJson, \"productName\", topLevel, \"productName\");\n  copyStringField(projectJson, \"name\", topLevel, \"productName\");\n  copyStringField(projectJson, \"fileDescription\", topLevel, \"fileDescription\");\n  copyStringField(projectJson, \"description\", topLevel, \"fileDescription\");\n  copyStringField(projectJson, \"companyName\", topLevel, \"companyName\");\n  copyStringField(projectJson, \"version\", topLevel, \"version\");\n  copyStringField(projectJson, \"copyright\", topLevel, \"copyright\");\n  const author = stringifyAuthor(projectJson.author);\n  if (author !== undefined && topLevel.companyName === undefined) {\n    topLevel.companyName = author;\n  }\n\n  const configSource = readConfigWindowsResourceSource(\n    projectJson,\n    directory,\n    \"project.json\",\n  );\n  const options = mergeMuonWindowsResourceOptions(\n    configSource?.options,\n    topLevel,\n  );\n  if (options === undefined || Object.keys(options).length === 0) {\n    return undefined;\n  }\n  return {\n    options,\n    directory,\n  };\n};\n\nconst createPackageSource = (\n  packageJson: JsonObject,\n  directory: string,\n): WindowsResourceSource | undefined => {\n  const options: MuonWindowsResourceOptions = {};\n  copyStringField(packageJson, \"name\", options, \"productName\");\n  copyStringField(packageJson, \"description\", options, \"fileDescription\");\n  copyStringField(packageJson, \"version\", options, \"version\");\n  copyStringField(packageJson, \"copyright\", options, \"copyright\");\n  const author = stringifyAuthor(packageJson.author);\n  if (author !== undefined) {\n    options.companyName = author;\n  }\n  return Object.keys(options).length === 0\n    ? undefined\n    : {\n        options,\n        directory,\n      };\n};\n\nconst copyStringField = (\n  source: JsonObject,\n  sourceKey: string,\n  target: MuonWindowsResourceOptions,\n  targetKey: keyof Pick<\n    MuonWindowsResourceOptions,\n    \"productName\" | \"fileDescription\" | \"companyName\" | \"version\" | \"copyright\"\n  >,\n): void => {\n  const value = source[sourceKey];\n  if (typeof value === \"string\" && value.trim() !== \"\") {\n    target[targetKey] = value.trim();\n  }\n};\n\nconst validateWindowsResourceOptions = (\n  value: unknown,\n  label: string,\n): MuonWindowsResourceOptions => {\n  if (!isJsonObject(value)) {\n    throw new Error(`${label} must be an object.`);\n  }\n\n  const output: MuonWindowsResourceOptions = {};\n  copyOptionalStringResourceField(value, \"iconPath\", output);\n  copyOptionalStringResourceField(value, \"productName\", output);\n  copyOptionalStringResourceField(value, \"fileDescription\", output);\n  copyOptionalStringResourceField(value, \"companyName\", output);\n  copyOptionalStringResourceField(value, \"version\", output);\n  copyOptionalStringResourceField(value, \"copyright\", output);\n  copyOptionalNumberResourceField(value, \"language\", output, label);\n  copyOptionalNumberResourceField(value, \"codePage\", output, label);\n  return output;\n};\n\nconst copyOptionalStringResourceField = (\n  source: JsonObject,\n  key: keyof Pick<\n    MuonWindowsResourceOptions,\n    | \"iconPath\"\n    | \"productName\"\n    | \"fileDescription\"\n    | \"companyName\"\n    | \"version\"\n    | \"copyright\"\n  >,\n  target: MuonWindowsResourceOptions,\n): void => {\n  const value = source[key];\n  if (value === undefined) {\n    return;\n  }\n  if (typeof value !== \"string\") {\n    throw new Error(`${key} must be a string when present.`);\n  }\n  if (value.trim() !== \"\") {\n    target[key] = value.trim();\n  }\n};\n\nconst copyOptionalNumberResourceField = (\n  source: JsonObject,\n  key: keyof Pick<MuonWindowsResourceOptions, \"language\" | \"codePage\">,\n  target: MuonWindowsResourceOptions,\n  label: string,\n): void => {\n  const value = source[key];\n  if (value === undefined) {\n    return;\n  }\n  if (\n    typeof value !== \"number\" ||\n    !Number.isInteger(value) ||\n    value < 0 ||\n    value > 0xffff\n  ) {\n    throw new Error(`${label} ${key} must be an integer from 0 to 65535.`);\n  }\n  target[key] = value;\n};\n\nconst resolveStringField = (\n  sources: readonly WindowsResourceSource[],\n  field: keyof Pick<\n    MuonWindowsResourceOptions,\n    \"productName\" | \"fileDescription\" | \"companyName\" | \"version\"\n  >,\n  fallback: string,\n): string => {\n  return resolveOptionalStringField(sources, field, fallback) ?? fallback;\n};\n\nconst resolveOptionalStringField = (\n  sources: readonly WindowsResourceSource[],\n  field: keyof Pick<\n    MuonWindowsResourceOptions,\n    \"productName\" | \"fileDescription\" | \"companyName\" | \"version\" | \"copyright\"\n  >,\n  fallback: string | undefined,\n): string | undefined => {\n  for (const source of sources) {\n    const value = source.options[field];\n    if (value !== undefined && value.trim() !== \"\") {\n      return value.trim();\n    }\n  }\n  return fallback;\n};\n\nconst resolveNumericField = (\n  sources: readonly WindowsResourceSource[],\n  field: keyof Pick<MuonWindowsResourceOptions, \"language\" | \"codePage\">,\n  fallback: number,\n): number => {\n  for (const source of sources) {\n    const value = source.options[field];\n    if (value !== undefined) {\n      return value;\n    }\n  }\n  return fallback;\n};\n\nconst resolveWindowsIconPath = async (\n  windowsSources: readonly WindowsResourceSource[],\n  appIconSources: readonly MuonAppIconSource[],\n  defaultIconPath: string,\n): Promise<string> => {\n  for (const source of windowsSources) {\n    const value = source.options.iconPath;\n    if (value !== undefined && value.trim() !== \"\") {\n      const iconPath = resolveResourcePath(source.directory, value);\n      await assertIconPath(iconPath);\n      return iconPath;\n    }\n  }\n  const appIconPath = await resolveMuonAppIconPath(appIconSources);\n  if (appIconPath !== undefined) {\n    return appIconPath;\n  }\n  await assertIconPath(defaultIconPath);\n  return defaultIconPath;\n};\n\nconst assertIconPath = async (iconPath: string): Promise<void> => {\n  if (extname(iconPath).toLowerCase() !== \".png\") {\n    throw new Error(`Windows resource icon must be a .png file: ${iconPath}`);\n  }\n  if (!(await fileExists(iconPath))) {\n    throw new Error(`Windows resource icon does not exist: ${iconPath}`);\n  }\n  await createNormalizedMuonIconPngData(await readFile(iconPath), iconPath);\n};\n\nconst resolveDefaultWindowsIcon = async (\n  packageDirectory: string,\n): Promise<string> => {\n  const sourceIconPath = join(\n    moduleDirectory,\n    \"..\",\n    \"..\",\n    \"images\",\n    \"muon-256.png\",\n  );\n  const candidates = [\n    join(resolve(packageDirectory), \"native\", \"muon-256.png\"),\n    join(moduleDirectory, \"native\", \"muon-256.png\"),\n    join(moduleDirectory, \"..\", \"dist\", \"native\", \"muon-256.png\"),\n    sourceIconPath,\n  ];\n  for (const candidate of candidates) {\n    if (await fileExists(candidate)) {\n      return candidate;\n    }\n  }\n  return sourceIconPath;\n};\n\nconst resolveResourcePath = (directory: string, path: string): string => {\n  return isAbsolute(path) ? path : resolve(directory, path);\n};\n\nconst normalizeWindowsVersion = (version: string): string => {\n  const normalized = version.trim();\n  const match = /^(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?(?:\\.(\\d+))?(?:$|[-+])/.exec(\n    normalized,\n  );\n  if (match === null) {\n    throw new Error(\n      `Windows resource version must start with numeric parts: ${version}`,\n    );\n  }\n  const values = [match[1], match[2], match[3], match[4]].map((value) =>\n    value === undefined ? 0 : Number.parseInt(value, 10),\n  );\n  for (const value of values) {\n    if (!Number.isInteger(value) || value < 0 || value > 0xffff) {\n      throw new Error(\n        `Windows resource version part must be from 0 to 65535: ${version}`,\n      );\n    }\n  }\n  return values.join(\".\");\n};\n\nconst stringifyAuthor = (value: unknown): string | undefined => {\n  if (typeof value === \"string\" && value.trim() !== \"\") {\n    return value.trim();\n  }\n  if (!isJsonObject(value) || typeof value.name !== \"string\") {\n    return undefined;\n  }\n  const name = value.name.trim();\n  if (name === \"\") {\n    return undefined;\n  }\n  return value.email === undefined || typeof value.email !== \"string\"\n    ? name\n    : `${name} <${value.email}>`;\n};\n\nconst fileExists = async (path: string): Promise<boolean> => {\n  try {\n    await access(path, constants.F_OK);\n    return true;\n  } catch {\n    return false;\n  }\n};\n\nconst isJsonObject = (value: unknown): value is JsonObject =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value);\n","// muon - Multi-platform GUI application framework that uses CEF as its backend\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/muon\n\nimport { constants } from \"node:fs\";\nimport { access, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, extname, isAbsolute, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { parse } from \"json5\";\n\nimport type { MuonLinuxDesktopOptions } from \"./vite.js\";\nimport { createNormalizedIconPngData } from \"./windows-icon.js\";\nimport {\n  createAppIconOptionsSource,\n  readConfigAppIconSource,\n  readProjectAppIconSource,\n  resolveMuonAppIconPath,\n  type MuonAppIconSource,\n} from \"./app-icon.js\";\n\nexport type { MuonLinuxDesktopOptions } from \"./vite.js\";\n\nconst defaultConfigFileNames = [\"muon.json5\", \"muon.jsonc\", \"muon.json\"];\nconst defaultIconFileName = \"muon-desktop-icon.png\";\nconst defaultDesktopConfigFileName = \"muon-desktop.json\";\nconst moduleDirectory =\n  typeof __dirname === \"string\"\n    ? __dirname\n    : dirname(fileURLToPath(import.meta.url));\n\ntype JsonObject = Record<string, unknown>;\n\ninterface LinuxDesktopSource {\n  options: MuonLinuxDesktopOptions;\n  directory: string;\n}\n\ninterface LinuxDesktopDefaults {\n  desktopId: string;\n  name: string;\n  comment: string;\n  categories: readonly string[];\n  startupNotify: boolean;\n}\n\ninterface ResolveLinuxDesktopInput {\n  root: string;\n  packageDirectory: string;\n  muonConfig: JsonObject;\n  muonConfigDirectory: string;\n  options: MuonLinuxDesktopOptions | undefined;\n  appIconPath: string | undefined;\n  defaults: LinuxDesktopDefaults;\n}\n\n/**\n * Resolved Linux desktop integration metadata used by build and pack outputs.\n */\nexport interface ResolvedMuonLinuxDesktop {\n  /** Desktop file identifier without the `.desktop` suffix. */\n  desktopId: string;\n  /** Application display name. */\n  name: string;\n  /** Application description used as a desktop entry comment. */\n  comment: string;\n  /** Desktop menu categories. */\n  categories: readonly string[];\n  /** Whether desktop startup notification is requested. */\n  startupNotify: boolean;\n  /** Resolved PNG icon file path. */\n  iconPath: string;\n  /** File name written into target distributions for the normalized icon. */\n  iconFileName: string;\n  /** File name written into target distributions for bootstrap desktop metadata. */\n  configFileName: string;\n}\n\n/**\n * muon config file content and directory used for Linux desktop option\n * resolution.\n */\nexport interface MuonLinuxDesktopConfigSource {\n  /** Parsed muon config object. */\n  config: JsonObject;\n  /** Directory that relative config paths are resolved from. */\n  directory: string;\n}\n\n/**\n * Reads the muon config file using the same default file names as muon build.\n */\nexport const readMuonConfigForLinuxDesktop = async (\n  root: string,\n  configPath: string | undefined,\n): Promise<MuonLinuxDesktopConfigSource> => {\n  const resolvedConfigPath = await resolveConfigPath(root, configPath);\n  if (resolvedConfigPath === undefined) {\n    return {\n      config: {},\n      directory: root,\n    };\n  }\n  return {\n    config: await readJsonObjectFile(resolvedConfigPath, \"muon config file\"),\n    directory: dirname(resolvedConfigPath),\n  };\n};\n\n/**\n * Merges Linux desktop options while preserving field-level fallback.\n */\nexport const mergeMuonLinuxDesktopOptions = (\n  primary: MuonLinuxDesktopOptions | undefined,\n  fallback: MuonLinuxDesktopOptions | undefined,\n): MuonLinuxDesktopOptions | undefined => {\n  if (primary === undefined) {\n    return fallback;\n  }\n  if (fallback === undefined) {\n    return primary;\n  }\n\n  const merged: MuonLinuxDesktopOptions = { ...fallback };\n  if (primary.desktopId !== undefined) {\n    merged.desktopId = primary.desktopId;\n  }\n  if (primary.name !== undefined) {\n    merged.name = primary.name;\n  }\n  if (primary.comment !== undefined) {\n    merged.comment = primary.comment;\n  }\n  if (primary.iconPath !== undefined) {\n    merged.iconPath = primary.iconPath;\n  }\n  if (primary.categories !== undefined) {\n    merged.categories = primary.categories;\n  }\n  if (primary.startupNotify !== undefined) {\n    merged.startupNotify = primary.startupNotify;\n  }\n  return merged;\n};\n\n/**\n * Resolves Linux desktop integration metadata from options, config files, and\n * package metadata.\n */\nexport const resolveMuonLinuxDesktop = async (\n  input: ResolveLinuxDesktopInput,\n): Promise<ResolvedMuonLinuxDesktop> => {\n  const projectJson = await readProjectJson(input.root);\n  const sources = [\n    createOptionsSource(input.options, input.root, \"linuxDesktop\"),\n    readConfigLinuxDesktopSource(\n      input.muonConfig,\n      input.muonConfigDirectory,\n      \"muon.json\",\n    ),\n  ].filter((source): source is LinuxDesktopSource => source !== undefined);\n  const appIconSources = [\n    createAppIconOptionsSource(input.appIconPath, input.root),\n    readConfigAppIconSource(\n      input.muonConfig,\n      input.muonConfigDirectory,\n      \"muon.json\",\n    ),\n    readProjectAppIconSource(projectJson, input.root),\n  ].filter((source): source is MuonAppIconSource => source !== undefined);\n\n  const desktopId = sanitizeDesktopId(\n    resolveStringField(sources, \"desktopId\", input.defaults.desktopId),\n  );\n  const name = resolveStringField(sources, \"name\", input.defaults.name);\n  const comment = resolveStringField(\n    sources,\n    \"comment\",\n    input.defaults.comment,\n  );\n  const categories = resolveCategories(sources, input.defaults.categories);\n  const startupNotify = resolveBooleanField(\n    sources,\n    \"startupNotify\",\n    input.defaults.startupNotify,\n  );\n  const iconPath = await resolveLinuxIconPath(\n    sources,\n    appIconSources,\n    await resolveDefaultLinuxDesktopIcon(input.packageDirectory),\n  );\n\n  return {\n    desktopId,\n    name,\n    comment,\n    categories,\n    startupNotify,\n    iconPath,\n    iconFileName: defaultIconFileName,\n    configFileName: defaultDesktopConfigFileName,\n  };\n};\n\n/**\n * Removes build-only Linux desktop settings from runtime config.\n */\nexport const stripBuildOnlyLinuxDesktopConfig = (\n  sourceConfig: JsonObject,\n): JsonObject => {\n  const sourceLinux = sourceConfig.linux;\n  if (!isJsonObject(sourceLinux)) {\n    return sourceConfig;\n  }\n\n  const linuxConfig: JsonObject = {};\n  for (const [key, value] of Object.entries(sourceLinux)) {\n    if (key !== \"desktop\") {\n      linuxConfig[key] = value;\n    }\n  }\n\n  const output: JsonObject = {};\n  for (const [key, value] of Object.entries(sourceConfig)) {\n    if (key !== \"linux\") {\n      output[key] = value;\n    }\n  }\n  if (Object.keys(linuxConfig).length > 0) {\n    output.linux = linuxConfig;\n  }\n  return output;\n};\n\n/**\n * Writes normalized Linux desktop sidecar files into a target distribution.\n */\nexport const writeLinuxDesktopDistributionFiles = async (\n  outputPath: string,\n  desktop: ResolvedMuonLinuxDesktop,\n): Promise<void> => {\n  const iconData = await createNormalizedIconPngData(\n    await readFile(desktop.iconPath),\n    desktop.iconPath,\n    \"Linux desktop icon\",\n  );\n  await writeFile(join(outputPath, desktop.iconFileName), iconData);\n  await writeFile(\n    join(outputPath, desktop.configFileName),\n    `${JSON.stringify(\n      {\n        desktopId: desktop.desktopId,\n        name: desktop.name,\n        comment: desktop.comment,\n        categories: desktop.categories,\n        startupNotify: desktop.startupNotify,\n        iconFileName: desktop.iconFileName,\n      },\n      undefined,\n      2,\n    )}\\n`,\n  );\n};\n\n/**\n * Creates a Desktop Entry file.\n */\nexport const createLinuxDesktopEntry = (input: {\n  desktop: ResolvedMuonLinuxDesktop;\n  exec: string;\n  tryExec: string;\n  icon: string;\n}): string => {\n  const lines = [\n    \"[Desktop Entry]\",\n    \"Type=Application\",\n    `Name=${escapeDesktopString(input.desktop.name)}`,\n  ];\n  if (input.desktop.comment.length > 0) {\n    lines.push(`Comment=${escapeDesktopString(input.desktop.comment)}`);\n  }\n  lines.push(`Exec=${input.exec}`);\n  lines.push(`TryExec=${input.tryExec}`);\n  lines.push(`Icon=${escapeDesktopString(input.icon)}`);\n  lines.push(`Terminal=false`);\n  if (input.desktop.categories.length > 0) {\n    lines.push(`Categories=${input.desktop.categories.join(\";\")};`);\n  }\n  lines.push(`StartupNotify=${input.desktop.startupNotify ? \"true\" : \"false\"}`);\n  lines.push(`StartupWMClass=${escapeDesktopString(input.desktop.desktopId)}`);\n  lines.push(\"X-muon-Managed=true\");\n  lines.push(\"\");\n  return lines.join(\"\\n\");\n};\n\n/**\n * Quotes one Desktop Entry Exec argument.\n */\nexport const quoteDesktopExecArgument = (value: string): string => {\n  let escaped = '\"';\n  for (const character of value) {\n    if (\n      character === '\"' ||\n      character === \"\\\\\" ||\n      character === \"$\" ||\n      character === \"`\"\n    ) {\n      escaped += \"\\\\\";\n    }\n    escaped += character;\n  }\n  return `${escaped}\"`;\n};\n\nconst resolveConfigPath = async (\n  root: string,\n  configPath: string | undefined,\n): Promise<string | undefined> => {\n  if (configPath !== undefined) {\n    const resolvedPath = resolve(root, configPath);\n    if (await fileExists(resolvedPath)) {\n      return resolvedPath;\n    }\n    throw new Error(`muon config file does not exist: ${resolvedPath}`);\n  }\n\n  for (const fileName of defaultConfigFileNames) {\n    const candidatePath = join(root, fileName);\n    if (await fileExists(candidatePath)) {\n      return candidatePath;\n    }\n  }\n  return undefined;\n};\n\nconst readJsonObjectFile = async (\n  filePath: string,\n  label: string,\n): Promise<JsonObject> => {\n  const parsed = parse(await readFile(filePath, \"utf8\"));\n  if (!isJsonObject(parsed)) {\n    throw new Error(`${label} must contain a JSON object: ${filePath}`);\n  }\n  return parsed;\n};\n\nconst readProjectJson = async (root: string): Promise<JsonObject> => {\n  const projectJsonPath = join(root, \"project.json\");\n  if (!(await fileExists(projectJsonPath))) {\n    return {};\n  }\n  return await readJsonObjectFile(projectJsonPath, \"project.json\");\n};\n\nconst createOptionsSource = (\n  options: MuonLinuxDesktopOptions | undefined,\n  directory: string,\n  label: string,\n): LinuxDesktopSource | undefined => {\n  if (options === undefined) {\n    return undefined;\n  }\n  return {\n    options: validateLinuxDesktopOptions(options, label),\n    directory,\n  };\n};\n\nconst readConfigLinuxDesktopSource = (\n  config: JsonObject,\n  directory: string,\n  label: string,\n): LinuxDesktopSource | undefined => {\n  const linux = config.linux;\n  if (linux === undefined) {\n    return undefined;\n  }\n  if (!isJsonObject(linux)) {\n    throw new Error(`${label} linux must be an object when present.`);\n  }\n  const desktop = linux.desktop;\n  if (desktop === undefined) {\n    return undefined;\n  }\n  return createOptionsSource(\n    validateLinuxDesktopOptions(desktop, `${label} linux.desktop`),\n    directory,\n    `${label} linux.desktop`,\n  );\n};\n\nconst validateLinuxDesktopOptions = (\n  value: unknown,\n  label: string,\n): MuonLinuxDesktopOptions => {\n  if (!isJsonObject(value)) {\n    throw new Error(`${label} must be an object.`);\n  }\n\n  const output: MuonLinuxDesktopOptions = {};\n  copyOptionalStringDesktopField(value, \"desktopId\", output);\n  copyOptionalStringDesktopField(value, \"name\", output);\n  copyOptionalStringDesktopField(value, \"comment\", output);\n  copyOptionalStringDesktopField(value, \"iconPath\", output);\n  copyOptionalCategoriesField(value, output, label);\n  copyOptionalBooleanDesktopField(value, \"startupNotify\", output, label);\n  return output;\n};\n\nconst copyOptionalStringDesktopField = (\n  source: JsonObject,\n  key: keyof Pick<\n    MuonLinuxDesktopOptions,\n    \"desktopId\" | \"name\" | \"comment\" | \"iconPath\"\n  >,\n  target: MuonLinuxDesktopOptions,\n): void => {\n  const value = source[key];\n  if (value === undefined) {\n    return;\n  }\n  if (typeof value !== \"string\") {\n    throw new Error(`${key} must be a string when present.`);\n  }\n  if (value.trim() !== \"\") {\n    target[key] = value.trim();\n  }\n};\n\nconst copyOptionalCategoriesField = (\n  source: JsonObject,\n  target: MuonLinuxDesktopOptions,\n  label: string,\n): void => {\n  const value = source.categories;\n  if (value === undefined) {\n    return;\n  }\n  if (\n    !Array.isArray(value) ||\n    !value.every(\n      (entry) =>\n        typeof entry === \"string\" &&\n        entry.trim() !== \"\" &&\n        !entry.includes(\";\") &&\n        !entry.includes(\"\\n\") &&\n        !entry.includes(\"\\r\"),\n    )\n  ) {\n    throw new Error(\n      `${label} categories must be a string array without semicolons when present.`,\n    );\n  }\n  target.categories = value.map((entry) => entry.trim());\n};\n\nconst copyOptionalBooleanDesktopField = (\n  source: JsonObject,\n  key: keyof Pick<MuonLinuxDesktopOptions, \"startupNotify\">,\n  target: MuonLinuxDesktopOptions,\n  label: string,\n): void => {\n  const value = source[key];\n  if (value === undefined) {\n    return;\n  }\n  if (typeof value !== \"boolean\") {\n    throw new Error(`${label} ${key} must be a boolean when present.`);\n  }\n  target[key] = value;\n};\n\nconst resolveStringField = (\n  sources: readonly LinuxDesktopSource[],\n  field: keyof Pick<MuonLinuxDesktopOptions, \"desktopId\" | \"name\" | \"comment\">,\n  fallback: string,\n): string => {\n  for (const source of sources) {\n    const value = source.options[field];\n    if (value !== undefined && value.trim() !== \"\") {\n      return value.trim();\n    }\n  }\n  return fallback;\n};\n\nconst resolveCategories = (\n  sources: readonly LinuxDesktopSource[],\n  fallback: readonly string[],\n): readonly string[] => {\n  for (const source of sources) {\n    if (source.options.categories !== undefined) {\n      return source.options.categories;\n    }\n  }\n  return fallback;\n};\n\nconst resolveBooleanField = (\n  sources: readonly LinuxDesktopSource[],\n  field: keyof Pick<MuonLinuxDesktopOptions, \"startupNotify\">,\n  fallback: boolean,\n): boolean => {\n  for (const source of sources) {\n    const value = source.options[field];\n    if (value !== undefined) {\n      return value;\n    }\n  }\n  return fallback;\n};\n\nconst resolveLinuxIconPath = async (\n  sources: readonly LinuxDesktopSource[],\n  appIconSources: readonly MuonAppIconSource[],\n  defaultIconPath: string | undefined,\n): Promise<string> => {\n  for (const source of sources) {\n    const value = source.options.iconPath;\n    if (value !== undefined && value.trim() !== \"\") {\n      const iconPath = resolveResourcePath(source.directory, value);\n      await assertIconPath(iconPath, true);\n      return iconPath;\n    }\n  }\n  const appIconPath = await resolveMuonAppIconPath(appIconSources);\n  if (appIconPath !== undefined) {\n    return appIconPath;\n  }\n  if (defaultIconPath !== undefined && (await fileExists(defaultIconPath))) {\n    await assertIconPath(defaultIconPath, false);\n    return defaultIconPath;\n  }\n  throw new Error(\"Linux desktop icon does not exist.\");\n};\n\nconst assertIconPath = async (\n  iconPath: string,\n  required: boolean,\n): Promise<void> => {\n  if (extname(iconPath).toLowerCase() !== \".png\") {\n    throw new Error(`Linux desktop icon must be a .png file: ${iconPath}`);\n  }\n  if (required && !(await fileExists(iconPath))) {\n    throw new Error(`Linux desktop icon does not exist: ${iconPath}`);\n  }\n  if (await fileExists(iconPath)) {\n    await createNormalizedIconPngData(\n      await readFile(iconPath),\n      iconPath,\n      \"Linux desktop icon\",\n    );\n  }\n};\n\nconst resolveDefaultLinuxDesktopIcon = async (\n  packageDirectory: string,\n): Promise<string | undefined> => {\n  const candidates = [\n    join(resolve(packageDirectory), \"native\", \"muon-256.png\"),\n    join(moduleDirectory, \"native\", \"muon-256.png\"),\n    join(moduleDirectory, \"..\", \"dist\", \"native\", \"muon-256.png\"),\n    join(moduleDirectory, \"..\", \"..\", \"images\", \"muon-256.png\"),\n  ];\n  for (const candidate of candidates) {\n    if (await fileExists(candidate)) {\n      return candidate;\n    }\n  }\n  return undefined;\n};\n\nconst sanitizeDesktopId = (value: string): string => {\n  const sanitized = value\n    .trim()\n    .toLowerCase()\n    .replace(/[^a-z0-9._-]+/g, \"-\")\n    .replace(/^[.-]+/g, \"\")\n    .replace(/[.-]+$/g, \"\");\n  return sanitized.length > 0 ? sanitized : \"muon-app\";\n};\n\nconst escapeDesktopString = (value: string): string =>\n  value\n    .replaceAll(\"\\\\\", \"\\\\\\\\\")\n    .replaceAll(\"\\n\", \"\\\\n\")\n    .replaceAll(\"\\r\", \"\\\\r\")\n    .replaceAll(\"\\t\", \"\\\\t\");\n\nconst resolveResourcePath = (directory: string, path: string): string => {\n  return isAbsolute(path) ? path : resolve(directory, path);\n};\n\nconst fileExists = async (path: string): Promise<boolean> => {\n  try {\n    await access(path, constants.F_OK);\n    return true;\n  } catch {\n    return false;\n  }\n};\n\nconst isJsonObject = (value: unknown): value is JsonObject =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value);\n","// muon - Multi-platform GUI application framework that uses CEF as its backend\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/muon\n\nimport { spawn } from \"node:child_process\";\n\ntype JsonObject = Record<string, unknown>;\n\n/**\n * Windows executable artifact kind accepted by code signing options.\n */\nexport type MuonWindowsCodeSigningTarget =\n  | \"runtime\"\n  | \"launcher\"\n  | \"nsisInstaller\"\n  | \"nsisUninstaller\";\n\n/**\n * External Windows code signing command options.\n */\nexport interface MuonWindowsCodeSigningOptions {\n  /**\n   * Executable or script used to sign one file.\n   */\n  command: string;\n  /**\n   * Arguments passed to the signing command.\n   *\n   * @remarks `{path}` is required and is replaced with the executable path.\n   * `{target}` and `{kind}` are also replaced when present.\n   */\n  args: readonly string[];\n  /**\n   * Artifact kinds to sign.\n   *\n   * @defaultValue Signs all supported Windows artifact kinds.\n   */\n  targets?: readonly MuonWindowsCodeSigningTarget[];\n}\n\n/**\n * Resolved Windows code signing command.\n */\nexport interface ResolvedMuonWindowsCodeSigning {\n  /** Executable or script used to sign one file. */\n  command: string;\n  /** Arguments passed to the signing command. */\n  args: readonly string[];\n  /** Artifact kinds to sign. */\n  targets: readonly MuonWindowsCodeSigningTarget[];\n}\n\ninterface WindowsCodeSigningExecution {\n  /** Resolved signing command. */\n  codeSigning: ResolvedMuonWindowsCodeSigning | undefined;\n  /** Artifact kind being signed. */\n  kind: MuonWindowsCodeSigningTarget;\n  /** Public muon target identifier. */\n  target: string;\n  /** Executable path being signed. */\n  path: string;\n  /** Child process working directory. */\n  cwd: string;\n  /** Child process environment. */\n  environment: NodeJS.ProcessEnv;\n}\n\nconst placeholderPath = \"{path}\";\nconst placeholderTarget = \"{target}\";\nconst placeholderKind = \"{kind}\";\n\nconst allWindowsCodeSigningTargets = [\n  \"runtime\",\n  \"launcher\",\n  \"nsisInstaller\",\n  \"nsisUninstaller\",\n] as const satisfies readonly MuonWindowsCodeSigningTarget[];\n\nconst isJsonObject = (value: unknown): value is JsonObject =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst isStringArray = (value: unknown): value is readonly string[] =>\n  Array.isArray(value) && value.every((entry) => typeof entry === \"string\");\n\nconst isWindowsCodeSigningTarget = (\n  value: string,\n): value is MuonWindowsCodeSigningTarget =>\n  allWindowsCodeSigningTargets.includes(value as MuonWindowsCodeSigningTarget);\n\nconst readWindowsCodeSigningTargets = (\n  value: unknown,\n  label: string,\n): readonly MuonWindowsCodeSigningTarget[] => {\n  if (value === undefined) {\n    return allWindowsCodeSigningTargets;\n  }\n  if (!isStringArray(value)) {\n    throw new Error(`${label}.targets must be an array of strings.`);\n  }\n  if (value.length === 0) {\n    throw new Error(`${label}.targets must not be empty.`);\n  }\n  const targets: MuonWindowsCodeSigningTarget[] = [];\n  for (const target of value) {\n    if (!isWindowsCodeSigningTarget(target)) {\n      throw new Error(`Unsupported ${label}.targets entry: ${target}`);\n    }\n    if (!targets.includes(target)) {\n      targets.push(target);\n    }\n  }\n  return targets;\n};\n\n/**\n * Validates Windows code signing options.\n */\nexport const validateMuonWindowsCodeSigningOptions = (\n  value: unknown,\n  label: string,\n): MuonWindowsCodeSigningOptions => {\n  if (!isJsonObject(value)) {\n    throw new Error(`${label} must be an object.`);\n  }\n  if (typeof value.command !== \"string\" || value.command.trim() === \"\") {\n    throw new Error(`${label}.command must be a non-empty string.`);\n  }\n  if (!isStringArray(value.args)) {\n    throw new Error(`${label}.args must be an array of strings.`);\n  }\n  if (!value.args.some((arg) => arg.includes(placeholderPath))) {\n    throw new Error(`${label}.args must contain ${placeholderPath}.`);\n  }\n\n  return {\n    command: value.command.trim(),\n    args: value.args,\n    targets: readWindowsCodeSigningTargets(value.targets, label),\n  };\n};\n\n/**\n * Returns true when a value is valid Windows code signing options.\n */\nexport const isMuonWindowsCodeSigningOptions = (\n  value: unknown,\n): value is MuonWindowsCodeSigningOptions => {\n  try {\n    validateMuonWindowsCodeSigningOptions(value, \"windowsCodeSigning\");\n    return true;\n  } catch {\n    return false;\n  }\n};\n\n/**\n * Resolves Windows code signing options from API options and muon config.\n */\nexport const resolveMuonWindowsCodeSigning = (input: {\n  muonConfig: JsonObject;\n  options: false | MuonWindowsCodeSigningOptions | undefined;\n}): ResolvedMuonWindowsCodeSigning | undefined => {\n  if (input.options === false) {\n    return undefined;\n  }\n  if (input.options !== undefined) {\n    return validateMuonWindowsCodeSigningOptions(\n      input.options,\n      \"windowsCodeSigning\",\n    ) as ResolvedMuonWindowsCodeSigning;\n  }\n\n  const windows = input.muonConfig.windows;\n  if (windows === undefined) {\n    return undefined;\n  }\n  if (!isJsonObject(windows)) {\n    throw new Error(\"muon.json windows must be an object when present.\");\n  }\n  const codeSigning = windows.codeSigning;\n  if (codeSigning === undefined) {\n    return undefined;\n  }\n  return validateMuonWindowsCodeSigningOptions(\n    codeSigning,\n    \"muon.json windows.codeSigning\",\n  ) as ResolvedMuonWindowsCodeSigning;\n};\n\n/**\n * Removes build-only Windows code signing settings from runtime config.\n */\nexport const stripBuildOnlyWindowsCodeSigningConfig = (\n  sourceConfig: JsonObject,\n): JsonObject => {\n  const sourceWindows = sourceConfig.windows;\n  if (!isJsonObject(sourceWindows)) {\n    return sourceConfig;\n  }\n\n  const windowsConfig: JsonObject = {};\n  for (const [key, value] of Object.entries(sourceWindows)) {\n    if (key !== \"codeSigning\") {\n      windowsConfig[key] = value;\n    }\n  }\n\n  const output: JsonObject = {};\n  for (const [key, value] of Object.entries(sourceConfig)) {\n    if (key !== \"windows\") {\n      output[key] = value;\n    }\n  }\n  if (Object.keys(windowsConfig).length > 0) {\n    output.windows = windowsConfig;\n  }\n  return output;\n};\n\n/**\n * Applies supported placeholders to signing command arguments.\n */\nexport const createWindowsCodeSigningArgs = (input: {\n  args: readonly string[];\n  kind: MuonWindowsCodeSigningTarget;\n  target: string;\n  path: string;\n}): string[] =>\n  input.args.map((arg) =>\n    arg\n      .replaceAll(placeholderPath, input.path)\n      .replaceAll(placeholderTarget, input.target)\n      .replaceAll(placeholderKind, input.kind),\n  );\n\n/**\n * Returns true when a resolved signing command includes an artifact kind.\n */\nexport const includesWindowsCodeSigningTarget = (\n  codeSigning: ResolvedMuonWindowsCodeSigning | undefined,\n  kind: MuonWindowsCodeSigningTarget,\n): codeSigning is ResolvedMuonWindowsCodeSigning =>\n  codeSigning !== undefined && codeSigning.targets.includes(kind);\n\n/**\n * Runs the configured Windows code signing command for one executable.\n */\nexport const signWindowsExecutable = async (\n  input: WindowsCodeSigningExecution,\n): Promise<void> => {\n  if (!includesWindowsCodeSigningTarget(input.codeSigning, input.kind)) {\n    return;\n  }\n  const args = createWindowsCodeSigningArgs({\n    args: input.codeSigning.args,\n    kind: input.kind,\n    target: input.target,\n    path: input.path,\n  });\n  const child = spawn(input.codeSigning.command, args, {\n    cwd: input.cwd,\n    env: input.environment,\n    stdio: [\"ignore\", \"pipe\", \"pipe\"],\n  });\n  let stderr = \"\";\n  child.stderr.setEncoding(\"utf8\");\n  child.stderr.on(\"data\", (chunk: string) => {\n    stderr += chunk;\n  });\n  const exitCode = await new Promise<number>((resolvePromise, reject) => {\n    child.once(\"error\", reject);\n    child.once(\"close\", (code) => {\n      resolvePromise(code ?? 1);\n    });\n  });\n  if (exitCode !== 0) {\n    throw new Error(\n      `${input.codeSigning.command} failed while signing ${input.kind} ${input.path} with exit code ${exitCode}: ${stderr.trim()}`,\n    );\n  }\n};\n","// muon - Multi-platform GUI application framework that uses CEF as its backend\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/muon\n\nimport { constants, type Stats } from \"node:fs\";\nimport {\n  access,\n  chmod,\n  copyFile,\n  mkdir,\n  mkdtemp,\n  readFile,\n  readdir,\n  rm,\n  stat,\n  writeFile,\n} from \"node:fs/promises\";\nimport { createHash, randomBytes } from \"node:crypto\";\nimport {\n  basename,\n  dirname,\n  isAbsolute,\n  join,\n  relative,\n  resolve,\n  sep,\n} from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport { fileURLToPath } from \"node:url\";\nimport AdmZip from \"adm-zip\";\nimport { parse } from \"json5\";\nimport {\n  embedMuonConfigInBootstrapFile,\n  embedMuonConfigInRuntime,\n} from \"./embed-config.js\";\nimport { getDefaultMuonPrepareTarget } from \"./prepare.js\";\nimport {\n  allMuonTargets,\n  getMuonTargetDescriptor,\n  getMuonTargetRuntimeAppId,\n  normalizeMuonTarget,\n  type MuonTarget,\n  type MuonTargetDescriptor,\n} from \"./targets.js\";\nimport {\n  resolveMuonWindowsResource,\n  stripBuildOnlyWindowsResourceConfig,\n  updateWindowsPeIconResource,\n  updateWindowsPeResources,\n  type MuonWindowsResourceOptions,\n  type ResolvedMuonWindowsResource,\n} from \"./windows-resource.js\";\nimport {\n  resolveMuonLinuxDesktop,\n  stripBuildOnlyLinuxDesktopConfig,\n  writeLinuxDesktopDistributionFiles,\n  type MuonLinuxDesktopOptions,\n  type ResolvedMuonLinuxDesktop,\n} from \"./linux-desktop.js\";\nimport {\n  resolveMuonWindowsCodeSigning,\n  signWindowsExecutable,\n  stripBuildOnlyWindowsCodeSigningConfig,\n  type MuonWindowsCodeSigningOptions,\n  type ResolvedMuonWindowsCodeSigning,\n} from \"./windows-code-signing.js\";\nimport { appIconAssetEntryName, appIconAssetUrl } from \"./app-icon.js\";\nimport type { MuonRuntimePluginConfig } from \"./capability.js\";\nimport type { MuonProgressCallback } from \"./progress.js\";\n\nconst defaultConfigFileNames = [\"muon.json5\", \"muon.jsonc\", \"muon.json\"];\nconst appConfigSourcePath = \"./assets.zip\";\nconst defaultAppName = \"muon-app\";\nconst defaultAppId = \"muon-app\";\nconst muonLicenseFileName = \"CREDITS.md\";\nconst directoryMode = 0o755;\nconst executableMode = 0o755;\nconst assetSaltByteLength = 16;\nconst moduleDirectory =\n  typeof __dirname === \"string\"\n    ? __dirname\n    : dirname(fileURLToPath(import.meta.url));\n\ntype JsonObject = Record<string, unknown>;\n\ntype AssetInput = {\n  sourcePath: string;\n  prefix: string;\n};\n\ntype BuildConfig = {\n  config: JsonObject;\n  directory: string;\n};\n\ninterface InternalMuonBuildOptions extends MuonBuildOptions {\n  browserProfilePathOverride: string | undefined;\n  environment?: NodeJS.ProcessEnv;\n  progress?: MuonProgressCallback;\n}\n\ntype ZipEntry = {\n  name: string;\n  data: Buffer;\n};\n\ntype DistributionFile = {\n  sourcePath: string;\n  fileName: string;\n};\n\n/**\n * Public muon runtime target used by CLI, Vite options, and package layout.\n */\nexport type MuonBuildTarget = MuonTarget;\n\n/**\n * Options for creating redistributable muon app directories.\n */\nexport interface MuonBuildOptions {\n  /**\n   * Project root containing package.json, muon.json, and app assets.\n   */\n  root?: string;\n  /**\n   * Directory containing package runtime/ and native/ folders.\n   *\n   * @remarks This defaults to the installed muon package dist directory.\n   */\n  packageDirectory?: string;\n  /**\n   * Public target identifiers to build.\n   */\n  targets?: readonly string[];\n  /**\n   * Build every supported target from the installed package.\n   *\n   * @remarks Defaults to true when targets is omitted. Set false to build only\n   * the host target.\n   */\n  allTargets?: boolean;\n  /**\n   * File name used for the app launcher.\n   *\n   * @remarks The .exe suffix is added automatically for Windows targets.\n   */\n  appName?: string;\n  /**\n   * Stable base application identifier used for runtime app identity.\n   *\n   * @remarks Windows target distributions embed `<appId>.<arch>` as their\n   * runtime app identifier. Linux targets embed this value unchanged.\n   */\n  appId?: string;\n  /**\n   * Parent directory that receives dist-muon/linux-amd64/ style outputs.\n   */\n  outputRoot?: string;\n  /**\n   * Directory or ZIP file used as app assets.\n   */\n  assetSourcePath?: string;\n  /**\n   * Optional ZIP entry prefix used for the asset source.\n   */\n  assetPrefix?: string;\n  /**\n   * Default browser start page embedded when muon config omits one.\n   */\n  browserStartPage?: string;\n  /**\n   * muon config path to embed.\n   */\n  configPath?: string;\n  /**\n   * Static application icon PNG file path.\n   *\n   * @remarks This icon is used as the shared source for Windows PE/NSIS,\n   * Linux desktop entries, and the generated initial title bar icon asset.\n   * Platform-specific icon paths override it for their target.\n   */\n  iconPath?: string;\n  /**\n   * Additional project files copied next to the generated app launcher.\n   *\n   * @remarks When omitted, `package.json` `files` is used as a candidate list.\n   * Only regular files are copied. Asset input paths, `node_modules`, `.git`,\n   * and generated target output directories are excluded.\n   */\n  distributionFiles?: readonly string[];\n  /**\n   * Windows PE and NSIS resource metadata.\n   *\n   * @defaultValue Uses `muon.json` `windows.resource`, `project.json`,\n   * `package.json`, then muon defaults.\n   */\n  windowsResource?: MuonWindowsResourceOptions;\n  /**\n   * Windows code signing command for generated executable artifacts.\n   *\n   * @remarks Set false to disable `muon.json` `windows.codeSigning`.\n   * The command is supplied by the application project or CI environment.\n   */\n  windowsCodeSigning?: false | MuonWindowsCodeSigningOptions;\n  /**\n   * Linux desktop entry metadata.\n   *\n   * @defaultValue Uses `muon.json` `linux.desktop`, package metadata, then\n   * muon defaults.\n   */\n  linuxDesktop?: MuonLinuxDesktopOptions;\n  /**\n   * Asset salt override for deterministic tests.\n   *\n   * @remarks Production builds should omit this option.\n   */\n  assetSalt?: Uint8Array;\n  /**\n   * Runtime plugin configuration supplied by a bundler integration.\n   *\n   * @internal\n   */\n  runtimePluginConfig?: MuonRuntimePluginConfig;\n  /**\n   * Include a privileged Linux runtime helper in generated distributions.\n   *\n   * @internal\n   */\n  includeRuntimeHelper?: boolean;\n}\n\n/**\n * Asset metadata generated for a target distribution.\n */\nexport interface MuonBuildAssetResult {\n  /**\n   * Path of the generated assets.zip.\n   */\n  path: string;\n  /**\n   * SHA-1 signature for the generated asset archive and salt.\n   */\n  signature: string;\n  /**\n   * Hex encoded salt embedded into muon.json.\n   */\n  salt: string;\n  /**\n   * Number of files written to the ZIP archive.\n   */\n  entryCount: number;\n}\n\n/**\n * Result for one generated target distribution.\n */\nexport interface MuonBuildTargetResult {\n  /**\n   * Public target identifier used by the muon npm package.\n   */\n  target: MuonBuildTarget;\n  /**\n   * Fixed output directory path for the target.\n   */\n  distributionDirectoryName: string;\n  /**\n   * Absolute path of the generated target directory.\n   */\n  outputPath: string;\n  /**\n   * Absolute path of the app launcher copied from muon-bootstrap.\n   */\n  launcherPath: string;\n  /**\n   * Absolute path of the privileged runtime helper when included.\n   */\n  runtimeHelperPath?: string;\n  /**\n   * Generated asset archive metadata.\n   */\n  asset: MuonBuildAssetResult;\n  /**\n   * Application identifier embedded into this target distribution.\n   *\n   * @remarks Windows targets append the target architecture to the base\n   * `appId`; Linux targets use the base `appId` unchanged.\n   */\n  runtimeAppId: string;\n  /**\n   * Config object embedded into muon-core and the app launcher.\n   */\n  embeddedConfig: JsonObject;\n  /**\n   * Linux desktop integration metadata when the target is Linux.\n   */\n  linuxDesktop?: ResolvedMuonLinuxDesktop;\n}\n\n/**\n * Result of a muon app build.\n */\nexport interface MuonBuildResult {\n  /**\n   * Absolute project root used for the build.\n   */\n  root: string;\n  /**\n   * Sanitized app launcher base name.\n   */\n  appName: string;\n  /**\n   * Stable base application identifier used to derive target runtime identity.\n   *\n   * @remarks See each target's `runtimeAppId` for the identifier embedded into\n   * that target distribution.\n   */\n  appId: string;\n  /**\n   * Generated target distributions.\n   */\n  targets: MuonBuildTargetResult[];\n}\n\n/**\n * Returns the host target used by muon build when no explicit target is passed.\n */\nexport const getDefaultMuonBuildTarget = (): MuonBuildTarget => {\n  return getDefaultMuonPrepareTarget(process.platform, process.arch);\n};\n\n/**\n * Normalizes a user-facing public target identifier.\n */\nexport const normalizeMuonBuildTarget = (target: string): MuonBuildTarget => {\n  return normalizeMuonTarget(target, \"muon build target\");\n};\n\n/**\n * Builds CEF-free muon app distribution directories for one or more targets.\n */\nexport const buildMuonApp = async (\n  options: MuonBuildOptions = {},\n): Promise<MuonBuildResult> => {\n  const internalOptions = options as InternalMuonBuildOptions;\n  const browserProfilePathOverride = internalOptions.browserProfilePathOverride;\n  const environment = internalOptions.environment ?? process.env;\n  const progress = internalOptions.progress;\n  const root = resolve(options.root ?? process.cwd());\n  const packageDirectory = resolvePackageDirectory(options.packageDirectory);\n  const targets = resolveBuildTargets(options);\n  const outputRoot = resolve(root, options.outputRoot ?? \".\");\n  const packageJson = await readPackageJson(root);\n  const appName = resolveAppName(packageJson, options.appName);\n  const appId = resolveAppId(packageJson, options.appId);\n  const buildConfig = await readBuildConfig(root, options.configPath);\n  const sourceConfig = applyRuntimePluginConfig(\n    buildConfig.config,\n    options.runtimePluginConfig ?? { mode: \"simple\" },\n  );\n  assertNoUserInitialTitleBarIcon(sourceConfig);\n  const resolvedBuildConfig: BuildConfig = {\n    ...buildConfig,\n    config: sourceConfig,\n  };\n  const assetInput = resolveAssetInput(\n    root,\n    options.assetSourcePath,\n    options.assetPrefix,\n    resolvedBuildConfig,\n  );\n  const windowsResource = await resolveMuonWindowsResource({\n    root,\n    packageDirectory,\n    packageJson,\n    muonConfig: sourceConfig,\n    muonConfigDirectory: buildConfig.directory,\n    options: options.windowsResource,\n    appIconPath: options.iconPath,\n    defaults: {\n      productName: appName,\n      fileDescription: appName,\n      companyName: \"Unknown\",\n      version: \"0.0.0\",\n      copyright: undefined,\n    },\n  });\n  const windowsCodeSigning = resolveMuonWindowsCodeSigning({\n    muonConfig: sourceConfig,\n    options: options.windowsCodeSigning,\n  });\n  const linuxDesktop = await resolveMuonLinuxDesktop({\n    root,\n    packageDirectory,\n    muonConfig: sourceConfig,\n    muonConfigDirectory: buildConfig.directory,\n    options: options.linuxDesktop,\n    appIconPath: options.iconPath,\n    defaults: {\n      desktopId: appId,\n      name: resolveLinuxDesktopDefaultName(packageJson, appName),\n      comment: resolvePackageDescription(packageJson),\n      categories: [\"Utility\"],\n      startupNotify: true,\n    },\n  });\n  const salt = Buffer.from(\n    options.assetSalt ?? randomBytes(assetSaltByteLength),\n  );\n  const distributionFiles = await resolveDistributionFiles({\n    root,\n    packageJson,\n    configuredFiles: options.distributionFiles,\n    assetSourcePath: assetInput.sourcePath,\n    outputPaths: targets.map((target) =>\n      join(\n        outputRoot,\n        getMuonTargetDescriptor(target).distributionDirectoryName,\n      ),\n    ),\n  });\n\n  const results: MuonBuildTargetResult[] = [];\n\n  for (let index = 0; index < targets.length; index += 1) {\n    const target = targets[index] as MuonBuildTarget;\n    progress?.({\n      phase: \"build\",\n      status: `Building muon target ${target} (${index + 1}/${targets.length})`,\n    });\n    const result = await buildMuonTarget({\n      packageDirectory,\n      root,\n      outputRoot,\n      appName,\n      appId,\n      target,\n      assetInput,\n      sourceConfig,\n      windowsResource,\n      windowsCodeSigning,\n      linuxDesktop,\n      distributionFiles,\n      salt,\n      environment,\n      browserStartPage: options.browserStartPage,\n      browserProfilePathOverride,\n      includeRuntimeHelper: options.includeRuntimeHelper === true,\n      progress,\n    });\n    results.push(result);\n    progress?.({\n      phase: \"build\",\n      status: `Built ${result.outputPath}`,\n    });\n  }\n\n  return {\n    root,\n    appName,\n    appId,\n    targets: results,\n  };\n};\n\nconst resolvePackageDirectory = (\n  packageDirectory: string | undefined,\n): string => {\n  if (packageDirectory !== undefined) {\n    return resolve(packageDirectory);\n  }\n\n  return moduleDirectory;\n};\n\nconst resolveBuildTargets = (options: MuonBuildOptions): MuonBuildTarget[] => {\n  if (options.allTargets === true) {\n    return [...allMuonTargets];\n  }\n\n  if (options.targets !== undefined && options.targets.length > 0) {\n    return [\n      ...new Set(\n        options.targets.map((target) => normalizeMuonBuildTarget(target)),\n      ),\n    ];\n  }\n\n  if (options.allTargets !== false) {\n    return [...allMuonTargets];\n  }\n\n  return [getDefaultMuonBuildTarget()];\n};\n\nconst resolveAssetInput = (\n  root: string,\n  assetSourcePath: string | undefined,\n  assetPrefix: string | undefined,\n  buildConfig: BuildConfig,\n): AssetInput => {\n  const configuredAssetSourcePath =\n    assetSourcePath === undefined\n      ? readConfigAssetSourcePath(buildConfig.config)\n      : undefined;\n  const sourcePath =\n    assetSourcePath !== undefined\n      ? resolve(root, assetSourcePath)\n      : configuredAssetSourcePath !== undefined\n        ? resolve(buildConfig.directory, configuredAssetSourcePath)\n        : resolve(root, \"assets\");\n  return {\n    sourcePath,\n    prefix: normalizeZipPrefix(assetPrefix ?? \"\"),\n  };\n};\n\nconst readStringArray = (value: unknown, label: string): readonly string[] => {\n  if (\n    Array.isArray(value) &&\n    value.every((entry) => typeof entry === \"string\")\n  ) {\n    return value;\n  }\n  throw new Error(`${label} must be an array of strings.`);\n};\n\nconst readDistributionFileCandidates = (\n  packageJson: JsonObject,\n  configuredFiles: readonly string[] | undefined,\n): readonly string[] => {\n  if (configuredFiles !== undefined) {\n    return readStringArray(configuredFiles, \"muon distributionFiles\");\n  }\n  if (packageJson.files === undefined) {\n    return [];\n  }\n  return readStringArray(packageJson.files, \"package.json files\");\n};\n\nconst isSameOrInsidePath = (parentPath: string, path: string): boolean => {\n  const relativePath = relative(parentPath, path);\n  return (\n    relativePath === \"\" ||\n    (!relativePath.startsWith(\"..\") && !isAbsolute(relativePath))\n  );\n};\n\nconst isExcludedDistributionFilePath = (\n  path: string,\n  excludedPaths: readonly string[],\n): boolean =>\n  excludedPaths.some((excludedPath) => isSameOrInsidePath(excludedPath, path));\n\nconst resolveDistributionFiles = async (input: {\n  root: string;\n  packageJson: JsonObject;\n  configuredFiles: readonly string[] | undefined;\n  assetSourcePath: string;\n  outputPaths: readonly string[];\n}): Promise<DistributionFile[]> => {\n  const candidates = readDistributionFileCandidates(\n    input.packageJson,\n    input.configuredFiles,\n  );\n  const excludedPaths = [\n    resolve(input.root, \"node_modules\"),\n    resolve(input.root, \".git\"),\n    input.assetSourcePath,\n    ...input.outputPaths,\n  ];\n  const destinationNames = new Set<string>();\n  const files: DistributionFile[] = [];\n\n  for (const candidate of candidates) {\n    if (candidate.trim() === \"\") {\n      throw new Error(\"muon distribution file path must not be empty.\");\n    }\n    if (isAbsolute(candidate)) {\n      throw new Error(\n        `muon distribution file path must be relative: ${candidate}`,\n      );\n    }\n\n    const sourcePath = resolve(input.root, candidate);\n    if (!isSameOrInsidePath(input.root, sourcePath)) {\n      throw new Error(\n        `muon distribution file path must stay inside the project root: ${candidate}`,\n      );\n    }\n    if (isExcludedDistributionFilePath(sourcePath, excludedPaths)) {\n      continue;\n    }\n\n    const stats = await statOrUndefined(sourcePath);\n    if (stats === undefined) {\n      throw new Error(`muon distribution file does not exist: ${candidate}`);\n    }\n    if (!stats.isFile()) {\n      throw new Error(\n        `muon distribution file must be a regular file: ${candidate}`,\n      );\n    }\n\n    const fileName = basename(sourcePath);\n    if (destinationNames.has(fileName)) {\n      throw new Error(\n        `Duplicate muon distribution file destination: ${fileName}`,\n      );\n    }\n    destinationNames.add(fileName);\n    files.push({ sourcePath, fileName });\n  }\n\n  return files;\n};\n\nconst normalizeZipPrefix = (prefix: string): string => {\n  const normalized = prefix\n    .replaceAll(\"\\\\\", \"/\")\n    .split(\"/\")\n    .filter((part) => part.length > 0)\n    .join(\"/\");\n\n  return normalized.length > 0 ? `${normalized}/` : \"\";\n};\n\nconst readPackageJson = async (root: string): Promise<JsonObject> => {\n  const packageJsonPath = join(root, \"package.json\");\n  if (!(await fileExists(packageJsonPath))) {\n    return {};\n  }\n  return await readJsonObjectFile(packageJsonPath, \"package.json\");\n};\n\nconst resolvePackageName = (packageJson: JsonObject): string => {\n  return typeof packageJson.name === \"string\"\n    ? packageJson.name\n    : defaultAppName;\n};\n\nconst resolveAppName = (\n  packageJson: JsonObject,\n  appName: string | undefined,\n): string => {\n  if (appName !== undefined) {\n    return sanitizeAppName(appName);\n  }\n\n  const packageName = resolvePackageName(packageJson);\n  const unscopedName = packageName.startsWith(\"@\")\n    ? packageName.slice(packageName.indexOf(\"/\") + 1)\n    : packageName;\n\n  return sanitizeAppName(unscopedName);\n};\n\nconst sanitizeAppName = (name: string): string => {\n  const sanitized = name\n    .trim()\n    .toLowerCase()\n    .replace(/[^a-z0-9._-]+/g, \"-\")\n    .replace(/^[.-]+/g, \"\")\n    .replace(/[.-]+$/g, \"\");\n\n  return sanitized.length > 0 ? sanitized : defaultAppName;\n};\n\nconst resolveAppId = (\n  packageJson: JsonObject,\n  appId: string | undefined,\n): string => {\n  if (appId !== undefined) {\n    return sanitizeAppId(appId);\n  }\n  return sanitizeAppId(resolvePackageName(packageJson));\n};\n\nconst sanitizeAppId = (value: string): string => {\n  const unscoped = value.startsWith(\"@\") ? value.slice(1) : value;\n  const sanitized = unscoped\n    .trim()\n    .toLowerCase()\n    .replace(\"/\", \".\")\n    .replace(/[^a-z0-9._-]+/g, \".\")\n    .replace(/^[.]+/g, \"\")\n    .replace(/[.]+$/g, \"\");\n  return sanitized.length > 0 ? sanitized : defaultAppId;\n};\n\nconst resolveLinuxDesktopDefaultName = (\n  packageJson: JsonObject,\n  appName: string,\n): string =>\n  typeof packageJson.name === \"string\" && packageJson.name.trim() !== \"\"\n    ? packageJson.name.trim()\n    : appName;\n\nconst resolvePackageDescription = (packageJson: JsonObject): string =>\n  typeof packageJson.description === \"string\"\n    ? packageJson.description.trim()\n    : \"\";\n\nconst readBuildConfig = async (\n  root: string,\n  configPath: string | undefined,\n): Promise<BuildConfig> => {\n  const resolvedConfigPath = await resolveConfigPath(root, configPath);\n  if (resolvedConfigPath === undefined) {\n    return {\n      config: {},\n      directory: root,\n    };\n  }\n\n  return {\n    config: await readJsonObjectFile(resolvedConfigPath, \"muon config file\"),\n    directory: dirname(resolvedConfigPath),\n  };\n};\n\nconst applyRuntimePluginConfig = (\n  sourceConfig: JsonObject,\n  runtimePluginConfig: MuonRuntimePluginConfig | undefined,\n): JsonObject => {\n  if (runtimePluginConfig === undefined) {\n    return sourceConfig;\n  }\n\n  const sourcePlugin = sourceConfig.plugin;\n  if (sourcePlugin !== undefined && !isJsonObject(sourcePlugin)) {\n    throw new Error(\n      \"muon.json plugin must be an object when runtime plugin config is applied.\",\n    );\n  }\n  const plugin: JsonObject = sourcePlugin ?? {};\n\n  return {\n    ...sourceConfig,\n    plugin: {\n      ...plugin,\n      ...runtimePluginConfig,\n    },\n  };\n};\n\nconst readConfigAssetSourcePath = (\n  sourceConfig: JsonObject,\n): string | undefined => {\n  const sourceAsset = sourceConfig.asset;\n  if (sourceAsset === undefined) {\n    return undefined;\n  }\n  if (!isJsonObject(sourceAsset)) {\n    throw new Error(\"muon.json asset must be an object when present.\");\n  }\n\n  const sourceAssetPath = sourceAsset.sourcePath;\n  if (sourceAssetPath === undefined) {\n    return undefined;\n  }\n  if (typeof sourceAssetPath !== \"string\") {\n    throw new Error(\n      \"muon.json asset.sourcePath must be a string when present.\",\n    );\n  }\n\n  return sourceAssetPath;\n};\n\nconst resolveConfigPath = async (\n  root: string,\n  configPath: string | undefined,\n): Promise<string | undefined> => {\n  if (configPath !== undefined) {\n    const resolvedPath = resolve(root, configPath);\n    if (await fileExists(resolvedPath)) {\n      return resolvedPath;\n    }\n\n    throw new Error(`muon config file does not exist: ${resolvedPath}`);\n  }\n\n  for (const fileName of defaultConfigFileNames) {\n    const candidatePath = join(root, fileName);\n    if (await fileExists(candidatePath)) {\n      return candidatePath;\n    }\n  }\n\n  return undefined;\n};\n\nconst readJsonObjectFile = async (\n  filePath: string,\n  label: string,\n): Promise<JsonObject> => {\n  let content: string;\n  try {\n    content = await readFile(filePath, \"utf8\");\n  } catch (error) {\n    throw new Error(\n      `${label} could not be read: ${filePath}: ${getErrorMessage(error)}`,\n    );\n  }\n\n  let parsed: unknown;\n  try {\n    parsed = parse(content);\n  } catch (error) {\n    throw new Error(\n      `${label} could not be parsed: ${filePath}: ${getErrorMessage(error)}`,\n    );\n  }\n\n  if (!isJsonObject(parsed)) {\n    throw new Error(`${label} must contain a JSON object: ${filePath}`);\n  }\n\n  return parsed;\n};\n\nconst buildMuonTarget = async (input: {\n  packageDirectory: string;\n  root: string;\n  outputRoot: string;\n  appName: string;\n  appId: string;\n  target: MuonBuildTarget;\n  assetInput: AssetInput;\n  sourceConfig: JsonObject;\n  windowsResource: ResolvedMuonWindowsResource;\n  windowsCodeSigning: ResolvedMuonWindowsCodeSigning | undefined;\n  linuxDesktop: ResolvedMuonLinuxDesktop;\n  distributionFiles: readonly DistributionFile[];\n  salt: Buffer;\n  environment: NodeJS.ProcessEnv;\n  browserStartPage: string | undefined;\n  browserProfilePathOverride: string | undefined;\n  includeRuntimeHelper: boolean;\n  progress: MuonProgressCallback | undefined;\n}): Promise<MuonBuildTargetResult> => {\n  const descriptor = getMuonTargetDescriptor(input.target);\n  const sourceRuntimePath = join(\n    input.packageDirectory,\n    \"runtime\",\n    input.target,\n  );\n  const sourceBootstrapPath = join(\n    input.packageDirectory,\n    \"native\",\n    input.target,\n    descriptor.bootstrapExecutableName,\n  );\n  const sourceRuntimeHelperPath =\n    input.includeRuntimeHelper &&\n    descriptor.runtimeHelperExecutableName !== undefined\n      ? join(\n          input.packageDirectory,\n          \"native\",\n          input.target,\n          descriptor.runtimeHelperExecutableName,\n        )\n      : undefined;\n  const outputPath = join(\n    input.outputRoot,\n    descriptor.distributionDirectoryName,\n  );\n  const launcherPath = join(\n    outputPath,\n    getLauncherFileName(input.appName, descriptor),\n  );\n  const runtimeHelperPath =\n    sourceRuntimeHelperPath === undefined ||\n    descriptor.runtimeHelperExecutableName === undefined\n      ? undefined\n      : join(outputPath, descriptor.runtimeHelperExecutableName);\n  const assetZipPath = join(outputPath, \"assets.zip\");\n  const runtimeAppId = getMuonTargetRuntimeAppId(input.appId, input.target);\n  const appIconPath =\n    descriptor.os === \"windows\"\n      ? input.windowsResource.iconPath\n      : input.linuxDesktop.iconPath;\n\n  await verifyTargetInputs({\n    sourceRuntimePath,\n    sourceBootstrapPath,\n    sourceRuntimeHelperPath,\n    descriptor,\n    target: input.target,\n  });\n\n  await rm(outputPath, { recursive: true, force: true });\n  await mkdir(outputPath, { recursive: true, mode: directoryMode });\n  await copyRuntimeFiles(sourceRuntimePath, outputPath, descriptor);\n  await chmod(\n    join(outputPath, descriptor.runtimeExecutableName),\n    executableMode,\n  );\n  await copyFile(sourceBootstrapPath, launcherPath);\n  await chmod(launcherPath, executableMode);\n  if (\n    sourceRuntimeHelperPath !== undefined &&\n    runtimeHelperPath !== undefined\n  ) {\n    await copyFile(sourceRuntimeHelperPath, runtimeHelperPath);\n    await chmod(runtimeHelperPath, executableMode);\n  }\n  await copyDistributionFiles(input.distributionFiles, outputPath);\n\n  input.progress?.({\n    phase: \"build\",\n    status: \"Creating assets.zip\",\n  });\n  const asset = await writeAssetArchive(\n    input.assetInput,\n    assetZipPath,\n    input.salt,\n    [{ name: appIconAssetEntryName, data: await readFile(appIconPath) }],\n  );\n  const embeddedConfig = createEmbeddedConfig(\n    input.sourceConfig,\n    asset,\n    runtimeAppId,\n    input.linuxDesktop.desktopId,\n    appIconAssetUrl,\n    input.browserStartPage,\n    input.browserProfilePathOverride,\n  );\n\n  input.progress?.({\n    phase: \"build\",\n    status: \"Embedding config\",\n  });\n  await withTemporaryConfig(embeddedConfig, async (configPath) => {\n    await embedMuonConfigInRuntime({\n      runtimePath: outputPath,\n      configPath,\n      outputRuntimePath: undefined,\n    });\n    await embedMuonConfigInBootstrapFile({\n      bootstrapPath: launcherPath,\n      configPath,\n      outputPath: undefined,\n    });\n    if (runtimeHelperPath !== undefined) {\n      await embedMuonConfigInBootstrapFile({\n        bootstrapPath: runtimeHelperPath,\n        configPath,\n        outputPath: undefined,\n      });\n    }\n  });\n\n  if (descriptor.os === \"windows\") {\n    input.progress?.({\n      phase: \"build\",\n      status: \"Updating Windows resources\",\n    });\n    await updateWindowsPeIconResource({\n      executablePath: join(outputPath, descriptor.runtimeExecutableName),\n      resource: input.windowsResource,\n      environment: input.environment,\n      cwd: input.root,\n    });\n    await updateWindowsPeResources({\n      executablePath: launcherPath,\n      resource: input.windowsResource,\n      environment: input.environment,\n      cwd: input.root,\n    });\n    if (input.windowsCodeSigning !== undefined) {\n      input.progress?.({\n        phase: \"build\",\n        status: \"Signing Windows executables\",\n      });\n    }\n    await signWindowsExecutable({\n      codeSigning: input.windowsCodeSigning,\n      kind: \"runtime\",\n      target: input.target,\n      path: join(outputPath, descriptor.runtimeExecutableName),\n      cwd: input.root,\n      environment: input.environment,\n    });\n    await signWindowsExecutable({\n      codeSigning: input.windowsCodeSigning,\n      kind: \"launcher\",\n      target: input.target,\n      path: launcherPath,\n      cwd: input.root,\n      environment: input.environment,\n    });\n  } else if (descriptor.os === \"linux\") {\n    input.progress?.({\n      phase: \"build\",\n      status: \"Writing Linux desktop files\",\n    });\n    await writeLinuxDesktopDistributionFiles(outputPath, input.linuxDesktop);\n  }\n\n  return {\n    target: input.target,\n    distributionDirectoryName: descriptor.distributionDirectoryName,\n    outputPath,\n    launcherPath,\n    ...(runtimeHelperPath === undefined ? {} : { runtimeHelperPath }),\n    asset,\n    runtimeAppId,\n    embeddedConfig,\n    ...(descriptor.os === \"linux\" ? { linuxDesktop: input.linuxDesktop } : {}),\n  };\n};\n\nconst verifyTargetInputs = async (input: {\n  sourceRuntimePath: string;\n  sourceBootstrapPath: string;\n  sourceRuntimeHelperPath: string | undefined;\n  descriptor: MuonTargetDescriptor;\n  target: MuonBuildTarget;\n}): Promise<void> => {\n  await assertDirectory(\n    input.sourceRuntimePath,\n    `muon runtime for ${input.target}`,\n  );\n  await assertFile(\n    input.sourceBootstrapPath,\n    `muon bootstrap for ${input.target}`,\n  );\n  if (input.sourceRuntimeHelperPath !== undefined) {\n    await assertFile(\n      input.sourceRuntimeHelperPath,\n      `muon runtime helper for ${input.target}`,\n    );\n  }\n  for (const fileName of input.descriptor.runtimeFiles) {\n    await assertFile(\n      join(input.sourceRuntimePath, fileName),\n      `muon runtime file ${fileName} for ${input.target}`,\n    );\n  }\n  await assertFile(\n    join(input.sourceRuntimePath, muonLicenseFileName),\n    `muon license file for ${input.target}`,\n  );\n};\n\nconst getLauncherFileName = (\n  appName: string,\n  descriptor: MuonTargetDescriptor,\n): string => {\n  if (\n    descriptor.launcherExtension.length > 0 &&\n    !appName.endsWith(descriptor.launcherExtension)\n  ) {\n    return `${appName}${descriptor.launcherExtension}`;\n  }\n\n  return appName;\n};\n\nconst copyRuntimeFiles = async (\n  sourceRuntimePath: string,\n  outputPath: string,\n  descriptor: MuonTargetDescriptor,\n): Promise<void> => {\n  for (const fileName of descriptor.runtimeFiles) {\n    await copyFile(\n      join(sourceRuntimePath, fileName),\n      join(outputPath, fileName),\n    );\n  }\n  if (descriptor.optionalRuntimeFilePatterns !== undefined) {\n    const fileNames = await readdir(sourceRuntimePath);\n    for (const fileName of fileNames) {\n      if (\n        descriptor.optionalRuntimeFilePatterns.some((pattern) =>\n          pattern.test(fileName),\n        )\n      ) {\n        await copyFile(\n          join(sourceRuntimePath, fileName),\n          join(outputPath, fileName),\n        );\n      }\n    }\n  }\n  await copyFile(\n    join(sourceRuntimePath, muonLicenseFileName),\n    join(outputPath, muonLicenseFileName),\n  );\n};\n\nconst copyDistributionFiles = async (\n  files: readonly DistributionFile[],\n  outputPath: string,\n): Promise<void> => {\n  for (const file of files) {\n    const destinationPath = join(outputPath, file.fileName);\n    if ((await statOrUndefined(destinationPath)) !== undefined) {\n      throw new Error(\n        `muon distribution file destination already exists: ${file.fileName}`,\n      );\n    }\n    await copyFile(file.sourcePath, destinationPath);\n  }\n};\n\nconst writeAssetArchive = async (\n  input: AssetInput,\n  outputPath: string,\n  salt: Buffer,\n  extraEntries: readonly ZipEntry[],\n): Promise<MuonBuildAssetResult> => {\n  const sourceStats = await statOrUndefined(input.sourcePath);\n  if (sourceStats === undefined) {\n    throw new Error(`muon asset source does not exist: ${input.sourcePath}`);\n  }\n\n  const archive = sourceStats.isDirectory()\n    ? await createAssetArchiveFromDirectory(input, extraEntries)\n    : sourceStats.isFile()\n      ? await createAssetArchiveFromZipFile(input.sourcePath, extraEntries)\n      : undefined;\n  if (archive === undefined) {\n    throw new Error(\n      `muon asset source is not a directory or file: ${input.sourcePath}`,\n    );\n  }\n  await writeFile(outputPath, archive);\n\n  const signature = createHash(\"sha1\")\n    .update(archive)\n    .update(salt)\n    .digest(\"hex\");\n  return {\n    path: outputPath,\n    signature,\n    salt: salt.toString(\"hex\"),\n    entryCount: sourceStats.isDirectory()\n      ? readZipEntryCount(archive, outputPath)\n      : readZipEntryCount(archive, input.sourcePath),\n  };\n};\n\nconst createAssetArchiveFromDirectory = async (\n  input: AssetInput,\n  extraEntries: readonly ZipEntry[],\n): Promise<Buffer> => {\n  const entries = await collectZipEntries(input.sourcePath, input.prefix);\n  if (entries.length === 0) {\n    throw new Error(`muon asset source has no files: ${input.sourcePath}`);\n  }\n\n  return createZipArchive(appendZipEntries(entries, extraEntries));\n};\n\nconst createAssetArchiveFromZipFile = async (\n  sourcePath: string,\n  extraEntries: readonly ZipEntry[],\n): Promise<Buffer> => {\n  const zip = new AdmZip(await readFile(sourcePath));\n  for (const entry of extraEntries) {\n    assertSafeZipEntryName(entry.name);\n    if (zip.getEntry(entry.name) !== null) {\n      throw new Error(\n        `muon app icon asset entry already exists: ${entry.name}`,\n      );\n    }\n    zip.addFile(entry.name, entry.data);\n  }\n  return zip.toBuffer();\n};\n\nconst appendZipEntries = (\n  entries: readonly ZipEntry[],\n  extraEntries: readonly ZipEntry[],\n): ZipEntry[] => {\n  const output = [...entries];\n  const names = new Set(entries.map((entry) => entry.name));\n  for (const entry of extraEntries) {\n    assertSafeZipEntryName(entry.name);\n    if (names.has(entry.name)) {\n      throw new Error(\n        `muon app icon asset entry already exists: ${entry.name}`,\n      );\n    }\n    names.add(entry.name);\n    output.push(entry);\n  }\n  return output;\n};\n\nconst readZipEntryCount = (archive: Buffer, sourcePath: string): number => {\n  const endSignature = 0x06054b50;\n  const lastPossibleOffset = archive.length - 22;\n  const firstPossibleOffset = Math.max(0, lastPossibleOffset - 0xffff);\n\n  for (\n    let offset = lastPossibleOffset;\n    offset >= firstPossibleOffset;\n    offset -= 1\n  ) {\n    if (archive.readUInt32LE(offset) === endSignature) {\n      return archive.readUInt16LE(offset + 10);\n    }\n  }\n\n  throw new Error(`muon asset ZIP could not be read: ${sourcePath}`);\n};\n\nconst collectZipEntries = async (\n  sourcePath: string,\n  prefix: string,\n): Promise<ZipEntry[]> => {\n  const entries: ZipEntry[] = [];\n\n  const walk = async (directoryPath: string): Promise<void> => {\n    const dirents = await readdir(directoryPath, { withFileTypes: true });\n    dirents.sort((a, b) => a.name.localeCompare(b.name));\n\n    for (const dirent of dirents) {\n      const childPath = join(directoryPath, dirent.name);\n      if (dirent.isDirectory()) {\n        await walk(childPath);\n      } else if (dirent.isFile()) {\n        const relativePath = relative(sourcePath, childPath)\n          .split(sep)\n          .join(\"/\");\n        const name = `${prefix}${relativePath}`;\n        assertSafeZipEntryName(name);\n        entries.push({\n          name,\n          data: await readFile(childPath),\n        });\n      }\n    }\n  };\n\n  await walk(sourcePath);\n  return entries;\n};\n\nconst assertSafeZipEntryName = (name: string): void => {\n  if (\n    name.length === 0 ||\n    name.startsWith(\"/\") ||\n    name.includes(\"..\") ||\n    name.includes(\"\\\\\")\n  ) {\n    throw new Error(`Unsafe ZIP entry name: ${name}`);\n  }\n};\n\nconst createZipArchive = (entries: readonly ZipEntry[]): Buffer => {\n  const zip = new AdmZip();\n  for (const entry of entries) {\n    zip.addFile(entry.name, entry.data);\n  }\n\n  return zip.toBuffer();\n};\n\nconst createEmbeddedConfig = (\n  sourceConfig: JsonObject,\n  asset: MuonBuildAssetResult,\n  appId: string,\n  desktopId: string,\n  initialTitleBarIcon: string,\n  browserStartPage: string | undefined,\n  browserProfilePathOverride: string | undefined,\n): JsonObject => {\n  const sourceAsset = sourceConfig.asset;\n  if (sourceAsset !== undefined && !isJsonObject(sourceAsset)) {\n    throw new Error(\"muon.json asset must be an object when present.\");\n  }\n  const sourceBootstrap = sourceConfig.bootstrap;\n  if (sourceBootstrap !== undefined && !isJsonObject(sourceBootstrap)) {\n    throw new Error(\"muon.json bootstrap must be an object when present.\");\n  }\n\n  const runtimeConfig = stripBuildOnlyAppIconConfig(\n    stripBuildOnlyLinuxDesktopConfig(\n      stripBuildOnlyWindowsCodeSigningConfig(\n        stripBuildOnlyWindowsResourceConfig(sourceConfig),\n      ),\n    ),\n  );\n  const sourceBrowser = runtimeConfig.browser;\n  if (sourceBrowser !== undefined && !isJsonObject(sourceBrowser)) {\n    throw new Error(\"muon.json browser must be an object when present.\");\n  }\n\n  const browserConfig: JsonObject = {\n    ...(sourceBrowser ?? {}),\n    initialTitleBarIcon,\n  };\n  if (browserStartPage !== undefined && browserConfig.startPage === undefined) {\n    browserConfig.startPage = browserStartPage;\n  }\n  if (browserProfilePathOverride !== undefined) {\n    browserConfig.profilePath = browserProfilePathOverride;\n  }\n\n  return {\n    ...runtimeConfig,\n    browser: browserConfig,\n    asset: {\n      ...(sourceAsset ?? {}),\n      sourcePath: appConfigSourcePath,\n      signature: asset.signature,\n      salt: asset.salt,\n    },\n    bootstrap: {\n      ...(sourceBootstrap ?? {}),\n      appId,\n      desktopId,\n    },\n  };\n};\n\nconst assertNoUserInitialTitleBarIcon = (sourceConfig: JsonObject): void => {\n  const sourceBrowser = sourceConfig.browser;\n  if (sourceBrowser === undefined) {\n    return;\n  }\n  if (!isJsonObject(sourceBrowser)) {\n    throw new Error(\"muon.json browser must be an object when present.\");\n  }\n  if (sourceBrowser.initialTitleBarIcon !== undefined) {\n    throw new Error(\n      \"muon.json browser.initialTitleBarIcon is generated by muon build; use top-level iconPath instead.\",\n    );\n  }\n};\n\nconst stripBuildOnlyAppIconConfig = (sourceConfig: JsonObject): JsonObject => {\n  const output: JsonObject = {};\n  for (const [key, value] of Object.entries(sourceConfig)) {\n    if (key !== \"iconPath\") {\n      output[key] = value;\n    }\n  }\n  return output;\n};\n\nconst withTemporaryConfig = async (\n  config: JsonObject,\n  callback: (configPath: string) => Promise<void>,\n): Promise<void> => {\n  const tempDirectory = await mkdtemp(join(tmpdir(), \"muon-build-config-\"));\n  const configPath = join(tempDirectory, \"muon.json\");\n  try {\n    await writeFile(configPath, `${JSON.stringify(config, undefined, 2)}\\n`);\n    await callback(configPath);\n  } finally {\n    await rm(tempDirectory, { recursive: true, force: true });\n  }\n};\n\nconst assertDirectory = async (path: string, label: string): Promise<void> => {\n  const stats = await statOrUndefined(path);\n  if (stats === undefined || !stats.isDirectory()) {\n    throw new Error(`${label} directory does not exist: ${path}`);\n  }\n};\n\nconst assertFile = async (path: string, label: string): Promise<void> => {\n  const stats = await statOrUndefined(path);\n  if (stats === undefined || !stats.isFile()) {\n    throw new Error(`${label} file does not exist: ${path}`);\n  }\n};\n\nconst statOrUndefined = async (path: string): Promise<Stats | undefined> => {\n  try {\n    return await stat(path);\n  } catch {\n    return undefined;\n  }\n};\n\nconst fileExists = async (path: string): Promise<boolean> => {\n  try {\n    await access(path, constants.F_OK);\n    return true;\n  } catch {\n    return false;\n  }\n};\n\nconst isJsonObject = (value: unknown): value is JsonObject => {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n};\n\nconst getErrorMessage = (error: unknown): string =>\n  error instanceof Error ? error.message : String(error);\n","// muon - Multi-platform GUI application framework that uses CEF as its backend\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/muon\n\nimport { randomBytes } from \"node:crypto\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, join, relative } from \"node:path\";\n\n/**\n * Import-side capability rule for muon plugin virtual modules.\n */\nexport interface MuonCapabilityImportOptions {\n  /**\n   * Importer path globs relative to the bundler project root.\n   */\n  sources?: readonly string[];\n  /**\n   * NPM package names allowed to import the virtual module.\n   */\n  packages?: readonly string[];\n  /**\n   * Plugin function path globs allowed for matching importers.\n   */\n  allow: readonly string[];\n  /**\n   * Plugin entry name that supplied this rule.\n   *\n   * @internal\n   */\n  pluginName?: string;\n}\n\n/**\n * Capability import configuration shared by bundler integrations.\n */\nexport interface MuonCapabilityOptions {\n  /**\n   * Capability imports allowed by importer path.\n   */\n  imports?: readonly MuonCapabilityImportOptions[];\n}\n\n/**\n * Runtime capability policy generated for muon-core.\n */\nexport interface MuonCapabilityRuntimeEntry {\n  /**\n   * Opaque capability id embedded into generated virtual modules.\n   */\n  id: string;\n  /**\n   * Plugin function path globs allowed for this capability.\n   */\n  allow: readonly string[];\n}\n\n/**\n * Runtime plugin entry generated for muon-core config overlays.\n */\nexport interface MuonRuntimePluginEntryConfig {\n  /**\n   * Plugin entry name.\n   */\n  name: string;\n  /**\n   * Optional expected SHA-1 signature for the external plugin library.\n   */\n  signature?: string;\n  /**\n   * Optional hexadecimal salt appended before checking the plugin signature.\n   */\n  salt?: string;\n  /**\n   * Plugin function path globs allowed for this plugin entry.\n   */\n  allow: readonly string[];\n}\n\n/**\n * Runtime plugin configuration generated for validate mode.\n */\nexport interface MuonCapabilityRuntimePluginConfig {\n  /**\n   * Plugin exposure mode.\n   */\n  mode: \"validate\";\n  /**\n   * Plugin bridge page URL allowlist.\n   */\n  pages?: readonly string[];\n  /**\n   * External plugin path override.\n   */\n  path?: string;\n  /**\n   * Plugin loading allowlist override.\n   */\n  plugins?: readonly MuonRuntimePluginEntryConfig[];\n  /**\n   * Capability policies consumed by muon-core.\n   */\n  capabilities: readonly MuonCapabilityRuntimeEntry[];\n}\n\n/**\n * Runtime plugin configuration for simple window-global exposure.\n */\nexport interface MuonSimpleRuntimePluginConfig {\n  /**\n   * Plugin exposure mode.\n   */\n  mode: \"simple\";\n  /**\n   * Plugin bridge page URL allowlist.\n   */\n  pages?: readonly string[];\n  /**\n   * External plugin path override.\n   */\n  path?: string;\n  /**\n   * Plugin loading allowlist override.\n   */\n  plugins?: readonly MuonRuntimePluginEntryConfig[];\n}\n\n/**\n * Runtime plugin configuration generated by a build integration.\n */\nexport type MuonRuntimePluginConfig =\n  | MuonCapabilityRuntimePluginConfig\n  | MuonSimpleRuntimePluginConfig;\n\n/**\n * Resolved virtual module.\n */\nexport interface MuonResolvedCapabilityModule {\n  /**\n   * Bundler-internal virtual id.\n   */\n  id: string;\n}\n\n/**\n * Bundler-independent virtual module resolver.\n */\nexport interface MuonCapabilityModuleResolver {\n  /**\n   * Resolves a muon virtual module specifier for one importer.\n   */\n  resolveId: (\n    source: string,\n    importer: string | undefined,\n  ) => MuonResolvedCapabilityModule | undefined;\n  /**\n   * Loads the generated source for a resolved virtual module id.\n   */\n  load: (id: string) => string | undefined;\n  /**\n   * Returns runtime plugin config generated from all capability rules.\n   */\n  getRuntimePluginConfig: () => MuonCapabilityRuntimePluginConfig;\n}\n\ninterface ParsedCapabilitySpecifier {\n  moduleName: string;\n  namespace: string;\n}\n\ninterface ResolvedRule {\n  index: number;\n  id: string;\n  rule: MuonCapabilityImportOptions;\n  namespace: string;\n  moduleName: string;\n}\n\nconst virtualModulePrefix = \"\\0muon-capability:\";\nconst capabilityIdByteLength = 16;\nconst moduleNamePattern =\n  /^[A-Za-z_$][A-Za-z0-9_$]*:[A-Za-z_$][A-Za-z0-9_$]*(?:\\.[A-Za-z_$][A-Za-z0-9_$]*)*$/u;\nconst jsIdentifierPattern = /^[A-Za-z_$][A-Za-z0-9_$]*$/u;\n\nconst normalizePath = (path: string): string =>\n  (path.split(\"?\")[0] ?? \"\").replaceAll(\"\\\\\", \"/\");\n\nconst createCapabilityId = (usedIds: Set<string>): string => {\n  for (;;) {\n    const id = `cap-${randomBytes(capabilityIdByteLength).toString(\"hex\")}`;\n    if (!usedIds.has(id)) {\n      usedIds.add(id);\n      return id;\n    }\n  }\n};\n\nconst parseCapabilitySpecifier = (\n  source: string,\n): ParsedCapabilitySpecifier | undefined => {\n  if (!moduleNamePattern.test(source)) {\n    return undefined;\n  }\n  const separator = source.indexOf(\":\");\n  const namespace = `${source.slice(0, separator)}.${source.slice(separator + 1)}`;\n  return {\n    moduleName: source,\n    namespace,\n  };\n};\n\nconst escapeRegExp = (source: string): string =>\n  source.replace(/[\\\\^$+?.()|[\\]{}]/gu, \"\\\\$&\");\n\nconst globToRegExp = (glob: string, separator: string): RegExp => {\n  let source = \"^\";\n  for (let index = 0; index < glob.length; index += 1) {\n    const current = glob[index] ?? \"\";\n    const next = glob[index + 1];\n    if (current === \"*\" && next === \"*\") {\n      source += \".*\";\n      index += 1;\n      continue;\n    }\n    if (current === \"*\") {\n      source += `[^${escapeRegExp(separator)}]*`;\n      continue;\n    }\n    source += escapeRegExp(current);\n  }\n  source += \"$\";\n  return new RegExp(source, \"u\");\n};\n\nconst isGlobMatch = (glob: string, value: string, separator: string): boolean =>\n  globToRegExp(glob, separator).test(value);\n\nconst toRootRelativeImporter = (root: string, importer: string): string =>\n  normalizePath(relative(root, importer));\n\nconst readPackageName = (packageJsonPath: string): string | undefined => {\n  try {\n    const parsed = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as unknown;\n    return typeof parsed === \"object\" &&\n      parsed !== null &&\n      !Array.isArray(parsed) &&\n      typeof (parsed as { name?: unknown }).name === \"string\"\n      ? (parsed as { name: string }).name\n      : undefined;\n  } catch {\n    return undefined;\n  }\n};\n\nconst getImporterPackageName = (\n  root: string,\n  importer: string,\n): string | undefined => {\n  const normalizedRoot = normalizePath(root);\n  const rootPackageJsonPath = join(root, \"package.json\");\n  let directory = dirname(normalizePath(importer));\n  for (;;) {\n    const packageJsonPath = join(directory, \"package.json\");\n    if (\n      packageJsonPath !== rootPackageJsonPath &&\n      existsSync(packageJsonPath)\n    ) {\n      return readPackageName(packageJsonPath);\n    }\n    if (normalizePath(directory) === normalizedRoot) {\n      return undefined;\n    }\n    const parent = dirname(directory);\n    if (parent === directory) {\n      return undefined;\n    }\n    directory = parent;\n  }\n};\n\nconst matchesCapabilityRuleImporter = (\n  rule: MuonCapabilityImportOptions,\n  root: string,\n  importer: string,\n): boolean => {\n  const relativeImporter = toRootRelativeImporter(root, importer);\n  const sourceMatched =\n    rule.sources?.some((pattern) =>\n      isGlobMatch(normalizePath(pattern), relativeImporter, \"/\"),\n    ) ?? false;\n  if (sourceMatched) {\n    return true;\n  }\n\n  const packageName = getImporterPackageName(root, importer);\n  return packageName === undefined\n    ? false\n    : (rule.packages?.includes(packageName) ?? false);\n};\n\nconst hasNamespaceFunctionAllow = (\n  namespace: string,\n  allow: readonly string[],\n): boolean =>\n  allow.some((entry) => {\n    if (entry.startsWith(`${namespace}.`)) {\n      return true;\n    }\n    return isGlobMatch(entry, `${namespace}.placeholder`, \".\");\n  });\n\nconst getExactExportName = (\n  namespace: string,\n  functionPath: string,\n): string | undefined => {\n  const prefix = `${namespace}.`;\n  if (!functionPath.startsWith(prefix)) {\n    return undefined;\n  }\n  const name = functionPath.slice(prefix.length);\n  if (!jsIdentifierPattern.test(name)) {\n    return undefined;\n  }\n  return name;\n};\n\nconst getExportedFunctions = (\n  namespace: string,\n  allow: readonly string[],\n): [string, string][] =>\n  allow.flatMap((functionPath) => {\n    const exportName = getExactExportName(namespace, functionPath);\n    return exportName === undefined ? [] : [[exportName, functionPath]];\n  });\n\nconst createRuleRuntimeEntry = (\n  rule: MuonCapabilityImportOptions,\n  id: string,\n): MuonCapabilityRuntimeEntry => ({\n  id,\n  allow: [...rule.allow],\n});\n\nconst validateCapabilityRule = (rule: MuonCapabilityImportOptions): void => {\n  if (\n    (rule.sources === undefined || rule.sources.length === 0) &&\n    (rule.packages === undefined || rule.packages.length === 0)\n  ) {\n    throw new Error(\n      \"muon capability import rule requires sources or packages.\",\n    );\n  }\n};\n\nconst createModuleVirtualId = (rule: ResolvedRule): string =>\n  `${virtualModulePrefix}${rule.index}:${rule.moduleName}`;\n\nconst parseModuleVirtualId = (\n  id: string,\n): { index: number; moduleName: string } | undefined => {\n  if (!id.startsWith(virtualModulePrefix)) {\n    return undefined;\n  }\n  const payload = id.slice(virtualModulePrefix.length);\n  const separator = payload.indexOf(\":\");\n  if (separator <= 0) {\n    return undefined;\n  }\n  const index = Number.parseInt(payload.slice(0, separator), 10);\n  if (!Number.isInteger(index) || index < 0) {\n    return undefined;\n  }\n  return {\n    index,\n    moduleName: payload.slice(separator + 1),\n  };\n};\n\nconst createExecutorSpawnExport = (\n  capabilityId: string,\n  functionPath: string,\n): string => `const __muonExecutorActiveProcesses = new Set();\nconst __muonExecutorEmptyBytes = new Uint8Array(0);\nconst __muonExecutorOwnerCallback = () => {};\nconst __muonExecutorToBytes = (data) => {\n  if (typeof data === \"string\") {\n    return new TextEncoder().encode(data);\n  }\n  if (data instanceof ArrayBuffer) {\n    return new Uint8Array(data);\n  }\n  if (ArrayBuffer.isView(data)) {\n    return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n  }\n  throw new TypeError(\"stdin data must be a string or BufferSource\");\n};\nconst __muonExecutorFromBase64 = (source) => {\n  const text = atob(source ?? \"\");\n  const bytes = new Uint8Array(text.length);\n  for (let index = 0; index < text.length; index += 1) {\n    bytes[index] = text.charCodeAt(index);\n  }\n  return bytes;\n};\nconst __muonExecutorRpc = async (\n  request,\n  data = __muonExecutorEmptyBytes,\n  onStdout = null,\n  onStderr = null,\n) =>\n  JSON.parse(\n    await __muonCall(${JSON.stringify(capabilityId)}, ${JSON.stringify(functionPath)}, [\n      JSON.stringify(request),\n      data,\n      0,\n      __muonExecutorOwnerCallback,\n      onStdout,\n      onStderr,\n    ]),\n  );\nconst __muonExecutorDecodeWaitResult = (raw) => {\n  const result = {\n    processId: raw.processId,\n    exitCode: raw.exitCode,\n  };\n  if (Object.prototype.hasOwnProperty.call(raw, \"stdoutBase64\")) {\n    result.stdout = __muonExecutorFromBase64(raw.stdoutBase64);\n  }\n  if (Object.prototype.hasOwnProperty.call(raw, \"stderrBase64\")) {\n    result.stderr = __muonExecutorFromBase64(raw.stderrBase64);\n  }\n  return result;\n};\nconst __muonExecutorDisposeActiveProcesses = async () => {\n  if (__muonExecutorActiveProcesses.size === 0) {\n    return;\n  }\n  for (const handle of Array.from(__muonExecutorActiveProcesses)) {\n    try {\n      await handle.dispose();\n    } catch {}\n  }\n};\nif (typeof globalThis.addEventListener === \"function\") {\n  for (const eventName of [\"beforeunload\", \"pagehide\", \"unload\"]) {\n    globalThis.addEventListener(eventName, __muonExecutorDisposeActiveProcesses);\n  }\n}\nexport const spawn = async (options = {}) => {\n  const stdoutCallback =\n    typeof options.onStdout === \"function\"\n      ? (chunk) => options.onStdout(new Uint8Array(chunk))\n      : null;\n  const stderrCallback =\n    typeof options.onStderr === \"function\"\n      ? (chunk) => options.onStderr(new Uint8Array(chunk))\n      : null;\n  const start = await __muonExecutorRpc(\n    {\n      op: \"start\",\n      options: {\n        command: options.command,\n        args: options.args,\n        cwd: options.cwd,\n        env: options.env,\n      },\n      captureStdout: stdoutCallback === null,\n      captureStderr: stderrCallback === null,\n    },\n    __muonExecutorEmptyBytes,\n    stdoutCallback,\n    stderrCallback,\n  );\n  const handleId = start.handleId;\n  let disposed = false;\n  let stdinClosing = false;\n  let waitPromise = null;\n  const handle = {\n    processId: start.processId,\n    writeStdin: async (data) => {\n      if (disposed) {\n        throw new Error(\"executor process is disposed\");\n      }\n      if (stdinClosing) {\n        throw new Error(\"stdin is closed\");\n      }\n      await __muonExecutorRpc(\n        { op: \"writeStdin\", handleId },\n        __muonExecutorToBytes(data),\n      );\n    },\n    closeStdin: async () => {\n      if (disposed) {\n        throw new Error(\"executor process is disposed\");\n      }\n      stdinClosing = true;\n      await __muonExecutorRpc({ op: \"closeStdin\", handleId });\n    },\n    wait: () => {\n      if (waitPromise !== null) {\n        return waitPromise;\n      }\n      waitPromise = (async () => {\n        const result = __muonExecutorDecodeWaitResult(\n          await __muonExecutorRpc({ op: \"wait\", handleId }),\n        );\n        if (!disposed) {\n          disposed = true;\n          __muonExecutorActiveProcesses.delete(handle);\n          try {\n            await __muonExecutorRpc({ op: \"dispose\", handleId });\n          } catch {}\n        }\n        return result;\n      })();\n      return waitPromise;\n    },\n    kill: async () => {\n      if (disposed) {\n        throw new Error(\"executor process is disposed\");\n      }\n      await __muonExecutorRpc({ op: \"kill\", handleId });\n    },\n    dispose: async () => {\n      if (disposed) {\n        return;\n      }\n      disposed = true;\n      __muonExecutorActiveProcesses.delete(handle);\n      await __muonExecutorRpc({ op: \"dispose\", handleId });\n    },\n  };\n  Object.freeze(handle);\n  __muonExecutorActiveProcesses.add(handle);\n  return handle;\n};`;\n\nconst createBrowserContextMenuHelpers =\n  (): string => `const __muonBrowserContextMenuEventName = \"muon-browser-context-menu-command\";\nconst __muonBrowserContextMenuWhenKeys = [\n  \"editable\",\n  \"selection\",\n  \"link\",\n  \"image\",\n  \"canCopy\",\n  \"canPaste\",\n];\nlet __muonBrowserContextMenuToken = \"\";\nlet __muonBrowserContextMenuHandler = undefined;\nlet __muonBrowserContextMenuListening = false;\nconst __muonCreateBrowserContextMenuToken = () => {\n  const crypto = globalThis.crypto;\n  if (\n    crypto &&\n    typeof crypto.getRandomValues === \"function\" &&\n    typeof globalThis.Uint32Array === \"function\"\n  ) {\n    const values = new globalThis.Uint32Array(4);\n    crypto.getRandomValues(values);\n    return Array.from(values, (value) => value.toString(16).padStart(8, \"0\")).join(\"\");\n  }\n  return \\`\\${Date.now().toString(36)}-\\${Math.random().toString(36).slice(2)}\\`;\n};\nconst __muonEnsureBrowserContextMenuListener = () => {\n  if (\n    __muonBrowserContextMenuListening ||\n    typeof globalThis.addEventListener !== \"function\"\n  ) {\n    return;\n  }\n  globalThis.addEventListener(__muonBrowserContextMenuEventName, (event) => {\n    const detail = event && event.detail;\n    if (\n      typeof detail !== \"object\" ||\n      detail === null ||\n      detail.token !== __muonBrowserContextMenuToken ||\n      typeof __muonBrowserContextMenuHandler !== \"function\"\n    ) {\n      return;\n    }\n    __muonBrowserContextMenuHandler(detail);\n  });\n  __muonBrowserContextMenuListening = true;\n};\nconst __muonNormalizeBrowserContextMenuPlacement = (placement) => {\n  if (placement === undefined) {\n    return undefined;\n  }\n  if (placement === \"start\" || placement === \"afterEdit\" || placement === \"end\") {\n    return placement;\n  }\n  throw new TypeError(\"Invalid context menu placement\");\n};\nconst __muonNormalizeBrowserContextMenuWhen = (when) => {\n  if (when === undefined) {\n    return undefined;\n  }\n  if (typeof when !== \"object\" || when === null || Array.isArray(when)) {\n    throw new TypeError(\"Invalid context menu condition\");\n  }\n  const normalized = {};\n  for (const key of __muonBrowserContextMenuWhenKeys) {\n    const value = when[key];\n    if (value === undefined) {\n      continue;\n    }\n    if (typeof value !== \"boolean\") {\n      throw new TypeError(\"Invalid context menu condition\");\n    }\n    normalized[key] = value;\n  }\n  return normalized;\n};\nconst __muonNormalizeBrowserContextMenuCommandId = (id) => {\n  if (\n    typeof id !== \"string\" ||\n    id === \"\" ||\n    /[\\\\u0000-\\\\u001f]/u.test(id) ||\n    id.startsWith(\"muon.\") ||\n    id.startsWith(\"standard.\")\n  ) {\n    throw new TypeError(\"Invalid context menu item id\");\n  }\n  return id;\n};\nconst __muonNormalizeBrowserContextMenuItem = (item) => {\n  if (typeof item !== \"object\" || item === null || Array.isArray(item)) {\n    throw new TypeError(\"Invalid context menu item\");\n  }\n  const placement = __muonNormalizeBrowserContextMenuPlacement(item.placement);\n  const when = __muonNormalizeBrowserContextMenuWhen(item.when);\n  if (item.type === \"separator\") {\n    return {\n      type: \"separator\",\n      ...(placement === undefined ? {} : { placement }),\n      ...(when === undefined ? {} : { when }),\n    };\n  }\n  if (item.type !== undefined && item.type !== \"item\") {\n    throw new TypeError(\"Invalid context menu item type\");\n  }\n  if (typeof item.label !== \"string\" || item.label === \"\") {\n    throw new TypeError(\"Invalid context menu item label\");\n  }\n  if (item.enabled !== undefined && typeof item.enabled !== \"boolean\") {\n    throw new TypeError(\"Invalid context menu item enabled state\");\n  }\n  return {\n    id: __muonNormalizeBrowserContextMenuCommandId(item.id),\n    label: item.label,\n    enabled: item.enabled === undefined ? true : item.enabled,\n    ...(placement === undefined ? {} : { placement }),\n    ...(when === undefined ? {} : { when }),\n  };\n};\nconst __muonNormalizeBrowserContextMenuItems = (items) => {\n  if (!Array.isArray(items)) {\n    throw new TypeError(\"Invalid context menu items\");\n  }\n  return items.map(__muonNormalizeBrowserContextMenuItem);\n};`;\n\nconst createBrowserSetContextMenuItemsExport = (\n  capabilityId: string,\n  functionPath: string,\n): string => `export const setContextMenuItems = async (items, handler = undefined) => {\n  if (handler !== undefined && typeof handler !== \"function\") {\n    throw new TypeError(\"Invalid context menu handler\");\n  }\n  const normalized = __muonNormalizeBrowserContextMenuItems(items);\n  const token = __muonCreateBrowserContextMenuToken();\n  await __muonCall(${JSON.stringify(capabilityId)}, ${JSON.stringify(functionPath)}, [JSON.stringify(normalized), token]);\n  __muonBrowserContextMenuToken = token;\n  __muonBrowserContextMenuHandler = handler;\n  __muonEnsureBrowserContextMenuListener();\n};`;\n\nconst createBrowserClearContextMenuItemsExport = (\n  capabilityId: string,\n  functionPath: string,\n): string => `export const clearContextMenuItems = async () => {\n  __muonBrowserContextMenuToken = \"\";\n  __muonBrowserContextMenuHandler = undefined;\n  await __muonCall(${JSON.stringify(capabilityId)}, ${JSON.stringify(functionPath)}, []);\n};`;\n\nconst createBrowserTrayHelpers =\n  (): string => `const __muonBrowserTrayEventName = \"muon-browser-tray-event\";\nconst __muonBrowserTrayHandlers = new Map();\nlet __muonBrowserTrayListening = false;\nconst __muonCreateBrowserTrayToken = () => {\n  const crypto = globalThis.crypto;\n  if (\n    crypto &&\n    typeof crypto.getRandomValues === \"function\" &&\n    typeof globalThis.Uint32Array === \"function\"\n  ) {\n    const values = new globalThis.Uint32Array(4);\n    crypto.getRandomValues(values);\n    return Array.from(values, (value) => value.toString(16).padStart(8, \"0\")).join(\"\");\n  }\n  return \\`\\${Date.now().toString(36)}-\\${Math.random().toString(36).slice(2)}\\`;\n};\nconst __muonEnsureBrowserTrayListener = () => {\n  if (\n    __muonBrowserTrayListening ||\n    typeof globalThis.addEventListener !== \"function\"\n  ) {\n    return;\n  }\n  globalThis.addEventListener(__muonBrowserTrayEventName, (event) => {\n    const detail = event && event.detail;\n    if (\n      typeof detail !== \"object\" ||\n      detail === null ||\n      typeof detail.trayId !== \"string\"\n    ) {\n      return;\n    }\n    const entry = __muonBrowserTrayHandlers.get(detail.trayId);\n    if (\n      entry === undefined ||\n      detail.token !== entry.token ||\n      typeof entry.handler !== \"function\"\n    ) {\n      return;\n    }\n    entry.handler(detail);\n  });\n  __muonBrowserTrayListening = true;\n};\nconst __muonNormalizeBrowserTrayId = (id) => {\n  if (\n    typeof id !== \"string\" ||\n    id === \"\" ||\n    /[\\\\u0000-\\\\u001f]/u.test(id) ||\n    id.startsWith(\"muon.\") ||\n    id.startsWith(\"standard.\")\n  ) {\n    throw new TypeError(\"Invalid tray id\");\n  }\n  return id;\n};\nconst __muonNormalizeBrowserTrayMenuItem = (item) => {\n  if (typeof item !== \"object\" || item === null || Array.isArray(item)) {\n    throw new TypeError(\"Invalid tray menu item\");\n  }\n  if (item.type === \"separator\") {\n    return { type: \"separator\" };\n  }\n  const type = item.type === undefined ? \"item\" : item.type;\n  if (type !== \"item\" && type !== \"checkbox\" && type !== \"radio\") {\n    throw new TypeError(\"Invalid tray menu item type\");\n  }\n  if (typeof item.label !== \"string\" || item.label === \"\") {\n    throw new TypeError(\"Invalid tray menu item label\");\n  }\n  if (item.enabled !== undefined && typeof item.enabled !== \"boolean\") {\n    throw new TypeError(\"Invalid tray menu item enabled state\");\n  }\n  if (item.checked !== undefined && typeof item.checked !== \"boolean\") {\n    throw new TypeError(\"Invalid tray menu item checked state\");\n  }\n  if (type === \"item\" && item.checked !== undefined) {\n    throw new TypeError(\"Invalid tray menu item checked state\");\n  }\n  return {\n    ...(type === \"item\" ? {} : { type }),\n    id: __muonNormalizeBrowserTrayId(item.id),\n    label: item.label,\n    enabled: item.enabled === undefined ? true : item.enabled,\n    ...(item.checked === undefined ? {} : { checked: item.checked }),\n  };\n};\nconst __muonNormalizeBrowserTrayMenuItems = (items) => {\n  if (!Array.isArray(items)) {\n    throw new TypeError(\"Invalid tray menu items\");\n  }\n  return items.map(__muonNormalizeBrowserTrayMenuItem);\n};\nconst __muonNormalizeBrowserTrayOptions = (options) => {\n  if (typeof options !== \"object\" || options === null || Array.isArray(options)) {\n    throw new TypeError(\"Invalid tray options\");\n  }\n  const hasIcon = options.icon !== undefined;\n  if (hasIcon && (typeof options.icon !== \"string\" || options.icon === \"\")) {\n    throw new TypeError(\"Invalid tray icon\");\n  }\n  if (options.tooltip !== undefined && options.tooltip !== null && typeof options.tooltip !== \"string\") {\n    throw new TypeError(\"Invalid tray tooltip\");\n  }\n  return {\n    ...(options.id === undefined ? {} : { id: __muonNormalizeBrowserTrayId(options.id) }),\n    ...(hasIcon ? { icon: options.icon } : {}),\n    ...(options.tooltip === undefined || options.tooltip === null ? {} : { tooltip: options.tooltip }),\n    ...(options.menu === undefined ? {} : { menu: __muonNormalizeBrowserTrayMenuItems(options.menu) }),\n  };\n};`;\n\nconst createBrowserCreateTrayExport = (\n  capabilityId: string,\n  functionPath: string,\n): string => `export const createTray = async (options, handler = undefined) => {\n  if (handler !== undefined && typeof handler !== \"function\") {\n    throw new TypeError(\"Invalid tray handler\");\n  }\n  const normalized = __muonNormalizeBrowserTrayOptions(options);\n  const token = __muonCreateBrowserTrayToken();\n  const trayId = await __muonCall(${JSON.stringify(capabilityId)}, ${JSON.stringify(functionPath)}, [JSON.stringify(normalized), token]);\n  __muonBrowserTrayHandlers.set(trayId, { token, handler });\n  __muonEnsureBrowserTrayListener();\n  return trayId;\n};`;\n\nconst createBrowserSetTrayMenuExport = (\n  capabilityId: string,\n  functionPath: string,\n): string => `export const setTrayMenu = async (id, items, handler = undefined) => {\n  if (handler !== undefined && typeof handler !== \"function\") {\n    throw new TypeError(\"Invalid tray handler\");\n  }\n  const trayId = __muonNormalizeBrowserTrayId(id);\n  const normalized = __muonNormalizeBrowserTrayMenuItems(items);\n  const token = __muonCreateBrowserTrayToken();\n  await __muonCall(${JSON.stringify(capabilityId)}, ${JSON.stringify(functionPath)}, [trayId, JSON.stringify(normalized), token]);\n  __muonBrowserTrayHandlers.set(trayId, { token, handler });\n  __muonEnsureBrowserTrayListener();\n};`;\n\nconst createBrowserSetTrayIconExport = (\n  capabilityId: string,\n  functionPath: string,\n): string => `export const setTrayIcon = async (id, iconPath) => {\n  const trayId = __muonNormalizeBrowserTrayId(id);\n  if (typeof iconPath !== \"string\" || iconPath === \"\") {\n    throw new TypeError(\"Invalid tray icon\");\n  }\n  await __muonCall(${JSON.stringify(capabilityId)}, ${JSON.stringify(functionPath)}, [trayId, iconPath]);\n};`;\n\nconst createBrowserSetTrayTooltipExport = (\n  capabilityId: string,\n  functionPath: string,\n): string => `export const setTrayTooltip = async (id, tooltip) => {\n  const trayId = __muonNormalizeBrowserTrayId(id);\n  if (tooltip !== null && typeof tooltip !== \"string\") {\n    throw new TypeError(\"Invalid tray tooltip\");\n  }\n  await __muonCall(${JSON.stringify(capabilityId)}, ${JSON.stringify(functionPath)}, [trayId, tooltip === null ? \"\" : tooltip]);\n};`;\n\nconst createBrowserRemoveTrayExport = (\n  capabilityId: string,\n  functionPath: string,\n): string => `export const removeTray = async (id) => {\n  const trayId = __muonNormalizeBrowserTrayId(id);\n  await __muonCall(${JSON.stringify(capabilityId)}, ${JSON.stringify(functionPath)}, [trayId]);\n  __muonBrowserTrayHandlers.delete(trayId);\n};`;\n\nconst createGenericFunctionExport = (\n  exportName: string,\n  capabilityId: string,\n  functionPath: string,\n): string => `export const ${exportName} = async (...args) =>\n  await __muonCall(${JSON.stringify(capabilityId)}, ${JSON.stringify(functionPath)}, args);`;\n\nconst createModuleSource = (rule: ResolvedRule): string => {\n  const exportedFunctions = getExportedFunctions(\n    rule.namespace,\n    rule.rule.allow,\n  );\n  if (exportedFunctions.length === 0) {\n    throw new Error(\n      `muon capability import has no exact function exports: ${rule.moduleName}`,\n    );\n  }\n\n  const usesBrowserContextMenuHelpers = exportedFunctions.some(\n    ([exportName]) =>\n      rule.namespace === \"muon.browser\" &&\n      (exportName === \"setContextMenuItems\" ||\n        exportName === \"clearContextMenuItems\"),\n  );\n  const usesBrowserTrayHelpers = exportedFunctions.some(\n    ([exportName]) =>\n      rule.namespace === \"muon.browser\" &&\n      (exportName === \"createTray\" ||\n        exportName === \"setTrayMenu\" ||\n        exportName === \"setTrayIcon\" ||\n        exportName === \"setTrayTooltip\" ||\n        exportName === \"removeTray\"),\n  );\n  const exports = exportedFunctions.map(([exportName, functionPath]) => {\n    if (rule.namespace === \"muon.executor\" && exportName === \"spawn\") {\n      return createExecutorSpawnExport(rule.id, functionPath);\n    }\n    if (\n      rule.namespace === \"muon.browser\" &&\n      exportName === \"setContextMenuItems\"\n    ) {\n      return createBrowserSetContextMenuItemsExport(rule.id, functionPath);\n    }\n    if (\n      rule.namespace === \"muon.browser\" &&\n      exportName === \"clearContextMenuItems\"\n    ) {\n      return createBrowserClearContextMenuItemsExport(rule.id, functionPath);\n    }\n    if (rule.namespace === \"muon.browser\" && exportName === \"createTray\") {\n      return createBrowserCreateTrayExport(rule.id, functionPath);\n    }\n    if (rule.namespace === \"muon.browser\" && exportName === \"setTrayMenu\") {\n      return createBrowserSetTrayMenuExport(rule.id, functionPath);\n    }\n    if (rule.namespace === \"muon.browser\" && exportName === \"setTrayIcon\") {\n      return createBrowserSetTrayIconExport(rule.id, functionPath);\n    }\n    if (rule.namespace === \"muon.browser\" && exportName === \"setTrayTooltip\") {\n      return createBrowserSetTrayTooltipExport(rule.id, functionPath);\n    }\n    if (rule.namespace === \"muon.browser\" && exportName === \"removeTray\") {\n      return createBrowserRemoveTrayExport(rule.id, functionPath);\n    }\n    return createGenericFunctionExport(exportName, rule.id, functionPath);\n  });\n  return `const __muonCall = globalThis.__muon_plugin_call;\nif (typeof __muonCall !== \"function\") {\n  throw new Error(\"muon plugin capability bridge is not available.\");\n}\n\n${usesBrowserContextMenuHelpers ? `${createBrowserContextMenuHelpers()}\\n\\n` : \"\"}\n${usesBrowserTrayHelpers ? `${createBrowserTrayHelpers()}\\n\\n` : \"\"}\n${exports.join(\"\\n\\n\")}\n`;\n};\n\n/**\n * Creates a capability virtual module resolver for a bundler adapter.\n *\n * @param root Bundler project root.\n * @param options Capability import options.\n */\nexport const createMuonCapabilityModuleResolver = (\n  root: string,\n  options: MuonCapabilityOptions | undefined,\n): MuonCapabilityModuleResolver => {\n  const rules = [...(options?.imports ?? [])];\n  for (const rule of rules) {\n    validateCapabilityRule(rule);\n  }\n  const usedCapabilityIds = new Set<string>();\n  const runtimeEntries = rules.map((rule) =>\n    createRuleRuntimeEntry(rule, createCapabilityId(usedCapabilityIds)),\n  );\n\n  const resolveRule = (\n    source: string,\n    importer: string | undefined,\n  ): ResolvedRule | undefined => {\n    const parsed = parseCapabilitySpecifier(source);\n    if (parsed === undefined) {\n      return undefined;\n    }\n    const namespaceConfigured = rules.some((rule) =>\n      hasNamespaceFunctionAllow(parsed.namespace, rule.allow),\n    );\n    if (!namespaceConfigured) {\n      return undefined;\n    }\n    if (importer === undefined) {\n      throw new Error(\n        `muon capability import is not allowed without an importer: ${source}`,\n      );\n    }\n\n    const relativeImporter = toRootRelativeImporter(root, importer);\n    for (let index = 0; index < rules.length; index += 1) {\n      const rule = rules[index];\n      const runtimeEntry = runtimeEntries[index];\n      if (\n        rule === undefined ||\n        runtimeEntry === undefined ||\n        !matchesCapabilityRuleImporter(rule, root, importer) ||\n        !hasNamespaceFunctionAllow(parsed.namespace, rule.allow)\n      ) {\n        continue;\n      }\n      return {\n        index,\n        id: runtimeEntry.id,\n        rule,\n        namespace: parsed.namespace,\n        moduleName: parsed.moduleName,\n      };\n    }\n\n    throw new Error(\n      `muon capability import is not allowed: ${source} from ${relativeImporter}`,\n    );\n  };\n\n  return {\n    resolveId: (source, importer) => {\n      const rule = resolveRule(source, importer);\n      return rule === undefined\n        ? undefined\n        : {\n            id: createModuleVirtualId(rule),\n          };\n    },\n    load: (id) => {\n      const parsed = parseModuleVirtualId(id);\n      if (parsed === undefined) {\n        return undefined;\n      }\n      const source = parseCapabilitySpecifier(parsed.moduleName);\n      const rule = rules[parsed.index];\n      const runtimeEntry = runtimeEntries[parsed.index];\n      if (\n        source === undefined ||\n        rule === undefined ||\n        runtimeEntry === undefined\n      ) {\n        return undefined;\n      }\n      return createModuleSource({\n        index: parsed.index,\n        id: runtimeEntry.id,\n        rule,\n        namespace: source.namespace,\n        moduleName: source.moduleName,\n      });\n    },\n    getRuntimePluginConfig: () => ({\n      mode: \"validate\",\n      capabilities: runtimeEntries,\n    }),\n  };\n};\n","// muon - Multi-platform GUI application framework that uses CEF as its backend\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/muon\n\nimport { constants } from \"node:fs\";\nimport { access, readFile } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\n\nimport { parse } from \"json5\";\n\nimport type {\n  MuonCapabilityImportOptions,\n  MuonCapabilityOptions,\n  MuonRuntimePluginEntryConfig,\n} from \"./capability.js\";\n\n/**\n * Plugin JavaScript exposure mode.\n */\nexport type MuonPluginAccessMode = \"simple\" | \"validate\";\n\n/**\n * Import-side capability rule from public muon plugin access config.\n */\nexport interface MuonPluginAccessImportOptions {\n  /**\n   * Importer source globs relative to the bundler project root.\n   */\n  sources?: readonly string[];\n  /**\n   * NPM package names allowed to import the virtual module.\n   */\n  packages?: readonly string[];\n  /**\n   * Plugin function paths allowed for this import rule.\n   *\n   * @remarks Required in validate mode. Simple mode does not use import rules.\n   */\n  allow?: readonly string[];\n}\n\n/**\n * Plugin entry from public muon plugin access config.\n */\nexport interface MuonPluginAccessEntryOptions {\n  /**\n   * Plugin entry name.\n   */\n  name: string;\n  /**\n   * Optional expected SHA-1 signature for the external plugin library.\n   */\n  signature?: string;\n  /**\n   * Optional hexadecimal salt appended before checking the plugin signature.\n   */\n  salt?: string;\n  /**\n   * Plugin function path globs allowed by the runtime plugin policy.\n   *\n   * @remarks Required in simple mode. Validate mode derives the runtime\n   * allowlist from `imports[].allow` and rejects this field in public config.\n   */\n  allow?: readonly string[];\n  /**\n   * Validate-mode import rules for this plugin entry.\n   */\n  imports?: readonly MuonPluginAccessImportOptions[];\n}\n\n/**\n * Public plugin access config shared by muon.json and the Vite option.\n */\nexport interface MuonPluginAccessOptions {\n  /**\n   * External plugin directory override.\n   */\n  path?: string;\n  /**\n   * Plugin exposure mode.\n   */\n  mode?: MuonPluginAccessMode;\n  /**\n   * Page URL patterns where the plugin bridge is exposed.\n   */\n  pages?: readonly string[];\n  /**\n   * Runtime plugin entries and validate-mode import rules.\n   */\n  plugins?: readonly MuonPluginAccessEntryOptions[];\n}\n\n/**\n * Resolved plugin access config used by bundler integrations.\n */\nexport interface MuonResolvedPluginAccessOptions {\n  /**\n   * Effective plugin exposure mode.\n   */\n  mode: MuonPluginAccessMode;\n  /**\n   * Effective page URL allowlist.\n   */\n  pages: readonly string[];\n  /**\n   * Capability resolver inputs generated from plugin imports.\n   */\n  capabilityOptions: MuonCapabilityOptions;\n  /**\n   * Runtime config fields added around generated capability policies.\n   */\n  runtimeOverlay: MuonPluginAccessRuntimeOverlay;\n}\n\n/**\n * Runtime plugin config fields that are not derived from capability IDs.\n */\nexport interface MuonPluginAccessRuntimeOverlay {\n  /**\n   * Page URL allowlist to write into generated runtime config.\n   */\n  pages?: readonly string[];\n  /**\n   * External plugin path override.\n   */\n  path?: string;\n  /**\n   * Plugin loading allowlist override.\n   */\n  plugins?: readonly MuonRuntimePluginEntryConfig[];\n}\n\nexport interface ResolveMuonPluginAccessOptionsInput {\n  /**\n   * Bundler project root.\n   */\n  root: string;\n  /**\n   * Optional muon.json path relative to root.\n   */\n  configPath: string | undefined;\n  /**\n   * Vite plugin access override.\n   */\n  pluginAccess: false | MuonPluginAccessOptions | undefined;\n  /**\n   * Handles project config read failures. When omitted, read failures are\n   * reported as errors.\n   */\n  onConfigReadError?: (error: unknown) => void;\n}\n\ntype JsonObject = Record<string, unknown>;\n\nconst defaultConfigFileNames = [\"muon.json5\", \"muon.jsonc\", \"muon.json\"];\nconst defaultPluginPages = [\"asset://main/**\"];\n\nconst isJsonObject = (value: unknown): value is JsonObject =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst isStringArray = (value: unknown): value is readonly string[] =>\n  Array.isArray(value) && value.every((entry) => typeof entry === \"string\");\n\nconst isSha1HexString = (value: string): boolean =>\n  value.length === 40 && /^[0-9a-fA-F]+$/.test(value);\n\nconst isHexByteString = (value: string): boolean =>\n  value.length % 2 === 0 && /^[0-9a-fA-F]*$/.test(value);\n\nconst getErrorMessage = (error: unknown): string =>\n  error instanceof Error ? error.message : String(error);\n\nconst fileExists = async (path: string): Promise<boolean> => {\n  try {\n    await access(path, constants.F_OK);\n    return true;\n  } catch {\n    return false;\n  }\n};\n\nconst resolveMuonConfigPath = async (\n  root: string,\n  configPath: string | undefined,\n): Promise<string | undefined> => {\n  if (configPath !== undefined) {\n    const resolvedPath = resolve(root, configPath);\n    if (await fileExists(resolvedPath)) {\n      return resolvedPath;\n    }\n    throw new Error(`muon config file does not exist: ${resolvedPath}`);\n  }\n\n  for (const fileName of defaultConfigFileNames) {\n    const candidatePath = join(root, fileName);\n    if (await fileExists(candidatePath)) {\n      return candidatePath;\n    }\n  }\n  return undefined;\n};\n\nconst readJsonObjectFile = async (\n  path: string,\n  label: string,\n): Promise<JsonObject> => {\n  let content: string;\n  try {\n    content = await readFile(path, \"utf8\");\n  } catch (error) {\n    throw new Error(\n      `${label} could not be read: ${path}: ${getErrorMessage(error)}`,\n    );\n  }\n\n  let parsed: unknown;\n  try {\n    parsed = parse(content);\n  } catch (error) {\n    throw new Error(\n      `${label} could not be parsed: ${path}: ${getErrorMessage(error)}`,\n    );\n  }\n\n  if (!isJsonObject(parsed)) {\n    throw new Error(`${label} must contain a JSON object: ${path}`);\n  }\n  return parsed;\n};\n\nconst readOptionalStringArray = (\n  object: JsonObject,\n  key: string,\n  configPath: string,\n): readonly string[] | undefined => {\n  const value = object[key];\n  if (value === undefined) {\n    return undefined;\n  }\n  if (!isStringArray(value)) {\n    throw new Error(`muon.json ${configPath} must be an array of strings.`);\n  }\n  return value;\n};\n\nconst readPluginAccessImportOptions = (\n  value: unknown,\n  configPath: string,\n): MuonPluginAccessImportOptions => {\n  if (!isJsonObject(value)) {\n    throw new Error(`muon.json ${configPath} must be an object.`);\n  }\n\n  const sources = readOptionalStringArray(\n    value,\n    \"sources\",\n    `${configPath}.sources`,\n  );\n  const packages = readOptionalStringArray(\n    value,\n    \"packages\",\n    `${configPath}.packages`,\n  );\n  const allow = readOptionalStringArray(value, \"allow\", `${configPath}.allow`);\n  const options: MuonPluginAccessImportOptions = {};\n  if (sources !== undefined) {\n    options.sources = sources;\n  }\n  if (packages !== undefined) {\n    options.packages = packages;\n  }\n  if (allow !== undefined) {\n    options.allow = allow;\n  }\n  return options;\n};\n\nconst readPluginAccessEntryOptions = (\n  value: unknown,\n  index: number,\n): MuonPluginAccessEntryOptions => {\n  const configPath = `plugin.plugins[${index}]`;\n  if (!isJsonObject(value)) {\n    throw new Error(`muon.json ${configPath} must be an object.`);\n  }\n  if (typeof value.name !== \"string\") {\n    throw new Error(`muon.json ${configPath}.name must be a string.`);\n  }\n  if (value.signature !== undefined) {\n    if (typeof value.signature !== \"string\") {\n      throw new Error(`muon.json ${configPath}.signature must be a string.`);\n    }\n    if (!isSha1HexString(value.signature)) {\n      throw new Error(\n        `muon.json ${configPath}.signature must be a 40-character SHA-1 hex string.`,\n      );\n    }\n  }\n  if (value.salt !== undefined) {\n    if (typeof value.salt !== \"string\") {\n      throw new Error(`muon.json ${configPath}.salt must be a string.`);\n    }\n    if (!isHexByteString(value.salt)) {\n      throw new Error(\n        `muon.json ${configPath}.salt must be a hexadecimal byte string.`,\n      );\n    }\n  }\n  const allow = readOptionalStringArray(value, \"allow\", `${configPath}.allow`);\n\n  const rawImports = value.imports;\n  if (rawImports !== undefined && !Array.isArray(rawImports)) {\n    throw new Error(`muon.json ${configPath}.imports must be an array.`);\n  }\n  const imports =\n    rawImports === undefined\n      ? undefined\n      : rawImports.map((entry, importIndex) =>\n          readPluginAccessImportOptions(\n            entry,\n            `${configPath}.imports[${importIndex}]`,\n          ),\n        );\n  const options: MuonPluginAccessEntryOptions = {\n    name: value.name,\n  };\n  if (value.signature !== undefined) {\n    options.signature = value.signature;\n  }\n  if (value.salt !== undefined) {\n    options.salt = value.salt;\n  }\n  if (allow !== undefined) {\n    options.allow = allow;\n  }\n  if (imports !== undefined) {\n    options.imports = imports;\n  }\n  return options;\n};\n\nconst readPluginAccessOptions = (\n  config: JsonObject,\n): MuonPluginAccessOptions => {\n  const browser = config.browser;\n  if (isJsonObject(browser) && browser.plugin !== undefined) {\n    throw new Error(\n      \"muon.json browser.plugin is no longer supported; use plugin.mode and plugin.pages instead.\",\n    );\n  }\n\n  const plugin = config.plugin;\n  if (plugin === undefined) {\n    return {};\n  }\n  if (!isJsonObject(plugin)) {\n    throw new Error(\"muon.json plugin must be an object.\");\n  }\n\n  const options: MuonPluginAccessOptions = {};\n  if (plugin.path !== undefined) {\n    if (typeof plugin.path !== \"string\") {\n      throw new Error(\"muon.json plugin.path must be a string.\");\n    }\n    if (plugin.path.length === 0) {\n      throw new Error(\"muon.json plugin.path must not be empty.\");\n    }\n    options.path = plugin.path;\n  }\n  if (plugin.mode !== undefined) {\n    if (typeof plugin.mode !== \"string\") {\n      throw new Error(\"muon.json plugin.mode must be a string.\");\n    }\n    if (plugin.mode.length === 0) {\n      throw new Error(\"muon.json plugin.mode must not be empty.\");\n    }\n    if (plugin.mode !== \"simple\" && plugin.mode !== \"validate\") {\n      throw new Error(\"muon.json plugin.mode has unknown value.\");\n    }\n    options.mode = plugin.mode;\n  }\n  const pages = readOptionalStringArray(plugin, \"pages\", \"plugin.pages\");\n  if (pages !== undefined) {\n    options.pages = pages;\n  }\n\n  const rawPlugins = plugin.plugins;\n  if (rawPlugins !== undefined) {\n    if (!Array.isArray(rawPlugins)) {\n      throw new Error(\"muon.json plugin.plugins must be an array.\");\n    }\n    options.plugins = rawPlugins.map((entry, index) =>\n      readPluginAccessEntryOptions(entry, index),\n    );\n  }\n  return options;\n};\n\ntype EffectivePluginAccessOptions = Required<\n  Pick<MuonPluginAccessOptions, \"mode\" | \"pages\" | \"plugins\">\n> &\n  Pick<MuonPluginAccessOptions, \"path\">;\n\nconst hasImportSourceSelector = (\n  entry: MuonPluginAccessImportOptions,\n): boolean =>\n  (entry.sources !== undefined && entry.sources.length > 0) ||\n  (entry.packages !== undefined && entry.packages.length > 0);\n\nconst validatePluginAccessOptions = (\n  resolved: EffectivePluginAccessOptions,\n): EffectivePluginAccessOptions => {\n  for (const [pluginIndex, plugin] of resolved.plugins.entries()) {\n    const pluginPath = `plugin.plugins[${pluginIndex}]`;\n    if (plugin.name === \"internal\" && plugin.signature !== undefined) {\n      throw new Error(\n        `muon.json ${pluginPath}.signature is not supported for internal plugins.`,\n      );\n    }\n    if (plugin.name === \"internal\" && plugin.salt !== undefined) {\n      throw new Error(\n        `muon.json ${pluginPath}.salt is not supported for internal plugins.`,\n      );\n    }\n    if (plugin.signature !== undefined && plugin.salt === undefined) {\n      throw new Error(\n        `muon.json ${pluginPath}.signature requires ${pluginPath}.salt.`,\n      );\n    }\n    if (resolved.mode === \"validate\") {\n      if (plugin.allow !== undefined) {\n        throw new Error(\n          `muon.json ${pluginPath}.allow is only supported in simple mode; use ${pluginPath}.imports[].allow in validate mode.`,\n        );\n      }\n      if (plugin.imports === undefined) {\n        throw new Error(\n          `muon.json ${pluginPath}.imports is required in validate mode.`,\n        );\n      }\n      if (plugin.imports.length === 0) {\n        throw new Error(\n          `muon.json ${pluginPath}.imports must not be empty in validate mode.`,\n        );\n      }\n\n      for (const [importIndex, entry] of plugin.imports.entries()) {\n        const importPath = `${pluginPath}.imports[${importIndex}]`;\n        if (!hasImportSourceSelector(entry)) {\n          throw new Error(\n            `muon.json ${importPath} requires sources or packages.`,\n          );\n        }\n        if (entry.allow === undefined) {\n          throw new Error(\n            `muon.json ${importPath}.allow is required in validate mode.`,\n          );\n        }\n        if (entry.allow.length === 0) {\n          throw new Error(\n            `muon.json ${importPath}.allow must not be empty in validate mode.`,\n          );\n        }\n      }\n      continue;\n    }\n\n    if (plugin.allow === undefined) {\n      throw new Error(\n        `muon.json ${pluginPath}.allow is required in simple mode.`,\n      );\n    }\n    if (plugin.imports !== undefined) {\n      throw new Error(\n        `muon.json ${pluginPath}.imports is only supported in validate mode.`,\n      );\n    }\n  }\n  return resolved;\n};\n\nconst getValidateImportAllow = (\n  entry: MuonPluginAccessImportOptions,\n  pluginIndex: number,\n  importIndex: number,\n): readonly string[] => {\n  if (entry.allow === undefined || entry.allow.length === 0) {\n    throw new Error(\n      `muon.json plugin.plugins[${pluginIndex}].imports[${importIndex}].allow is required in validate mode.`,\n    );\n  }\n  return entry.allow;\n};\n\nconst getSimplePluginAllow = (\n  plugin: MuonPluginAccessEntryOptions,\n  pluginIndex: number,\n): readonly string[] => {\n  if (plugin.allow === undefined) {\n    throw new Error(\n      `muon.json plugin.plugins[${pluginIndex}].allow is required in simple mode.`,\n    );\n  }\n  return plugin.allow;\n};\n\nconst toCapabilityImports = (\n  plugins: readonly MuonPluginAccessEntryOptions[],\n): readonly MuonCapabilityImportOptions[] =>\n  plugins.flatMap((plugin, pluginIndex) =>\n    (plugin.imports ?? []).map((entry, importIndex) => {\n      if (!hasImportSourceSelector(entry)) {\n        throw new Error(\n          `muon.json plugin.plugins[${pluginIndex}].imports[${importIndex}] requires sources or packages.`,\n        );\n      }\n\n      const rule: MuonCapabilityImportOptions = {\n        allow: getValidateImportAllow(entry, pluginIndex, importIndex),\n        pluginName: plugin.name,\n      };\n      if (entry.sources !== undefined) {\n        rule.sources = entry.sources;\n      }\n      if (entry.packages !== undefined) {\n        rule.packages = entry.packages;\n      }\n      return rule;\n    }),\n  );\n\nconst toValidateRuntimePluginEntries = (\n  plugins: readonly MuonPluginAccessEntryOptions[],\n): readonly MuonRuntimePluginEntryConfig[] =>\n  plugins.map((plugin, pluginIndex) => {\n    const allow: string[] = [];\n    const seenAllow = new Set<string>();\n    for (const [importIndex, entry] of (plugin.imports ?? []).entries()) {\n      for (const functionPath of getValidateImportAllow(\n        entry,\n        pluginIndex,\n        importIndex,\n      )) {\n        if (!seenAllow.has(functionPath)) {\n          seenAllow.add(functionPath);\n          allow.push(functionPath);\n        }\n      }\n    }\n    return {\n      name: plugin.name,\n      ...(plugin.signature === undefined\n        ? {}\n        : { signature: plugin.signature }),\n      ...(plugin.salt === undefined ? {} : { salt: plugin.salt }),\n      allow,\n    };\n  });\n\nconst toSimpleRuntimePluginEntries = (\n  plugins: readonly MuonPluginAccessEntryOptions[],\n): readonly MuonRuntimePluginEntryConfig[] =>\n  plugins.map((plugin, pluginIndex) => ({\n    name: plugin.name,\n    ...(plugin.signature === undefined ? {} : { signature: plugin.signature }),\n    ...(plugin.salt === undefined ? {} : { salt: plugin.salt }),\n    allow: [...getSimplePluginAllow(plugin, pluginIndex)],\n  }));\n\nconst shouldOverlayRuntimePlugins = (\n  resolved: EffectivePluginAccessOptions,\n  override: false | MuonPluginAccessOptions | undefined,\n): boolean =>\n  override !== false &&\n  (override?.plugins !== undefined ||\n    (resolved.mode === \"validate\" && resolved.plugins.length > 0));\n\nconst toRuntimePluginEntries = (\n  resolved: EffectivePluginAccessOptions,\n): readonly MuonRuntimePluginEntryConfig[] =>\n  resolved.mode === \"validate\"\n    ? toValidateRuntimePluginEntries(resolved.plugins)\n    : toSimpleRuntimePluginEntries(resolved.plugins);\n\nconst mergePluginAccessOptions = (\n  base: MuonPluginAccessOptions,\n  override: MuonPluginAccessOptions | undefined,\n): EffectivePluginAccessOptions => ({\n  ...(override?.path === undefined ? {} : { path: override.path }),\n  mode: override?.mode ?? base.mode ?? \"validate\",\n  pages: override?.pages ?? base.pages ?? defaultPluginPages,\n  plugins: override?.plugins ?? base.plugins ?? [],\n});\n\nconst createRuntimeOverlay = (\n  root: string,\n  resolved: EffectivePluginAccessOptions,\n  override: false | MuonPluginAccessOptions | undefined,\n): MuonPluginAccessRuntimeOverlay => {\n  if (override === false) {\n    return {};\n  }\n\n  const path =\n    override?.path !== undefined ? resolve(root, override.path) : undefined;\n  const plugins = shouldOverlayRuntimePlugins(resolved, override)\n    ? toRuntimePluginEntries(resolved)\n    : undefined;\n\n  return {\n    pages: resolved.pages,\n    ...(path === undefined ? {} : { path }),\n    ...(plugins === undefined ? {} : { plugins }),\n  };\n};\n\n/**\n * Resolves public plugin access config from muon.json and Vite overrides.\n *\n * @param input Resolution inputs.\n * @returns Effective plugin access config for bundler integrations.\n */\nexport const resolveMuonPluginAccessOptions = async ({\n  root,\n  configPath,\n  pluginAccess,\n  onConfigReadError,\n}: ResolveMuonPluginAccessOptionsInput): Promise<MuonResolvedPluginAccessOptions> => {\n  const resolvedConfigPath = await resolveMuonConfigPath(root, configPath);\n  let base: MuonPluginAccessOptions = {};\n  if (resolvedConfigPath !== undefined) {\n    try {\n      base = readPluginAccessOptions(\n        await readJsonObjectFile(resolvedConfigPath, \"muon config file\"),\n      );\n    } catch (error) {\n      if (onConfigReadError === undefined) {\n        throw error;\n      }\n      onConfigReadError(error);\n    }\n  }\n\n  if (pluginAccess === false) {\n    const resolved = validatePluginAccessOptions(\n      mergePluginAccessOptions(base, { mode: \"simple\" }),\n    );\n    return {\n      mode: \"simple\",\n      pages: resolved.pages,\n      capabilityOptions: { imports: [] },\n      runtimeOverlay: createRuntimeOverlay(root, resolved, pluginAccess),\n    };\n  }\n\n  const resolved = validatePluginAccessOptions(\n    mergePluginAccessOptions(base, pluginAccess),\n  );\n  const capabilityOptions: MuonCapabilityOptions = {\n    imports:\n      resolved.mode === \"validate\" ? toCapabilityImports(resolved.plugins) : [],\n  };\n  return {\n    mode: resolved.mode,\n    pages: resolved.pages,\n    capabilityOptions,\n    runtimeOverlay: createRuntimeOverlay(root, resolved, pluginAccess),\n  };\n};\n","// muon - Multi-platform GUI application framework that uses CEF as its backend\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/muon\n\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nconst muonGitignoreEntries = [\".muon/\", \"dist-muon/\", \"artifacts/\"] as const;\n\ntype MuonGitignoreEntry = (typeof muonGitignoreEntries)[number];\n\nconst muonGitignoreEntryAliases: Record<MuonGitignoreEntry, readonly string[]> =\n  {\n    \".muon/\": [\".muon/\", \"/.muon/\", \".muon\", \"/.muon\"],\n    \"dist-muon/\": [\n      \"dist-muon/\",\n      \"/dist-muon/\",\n      \"dist-muon\",\n      \"/dist-muon\",\n      \"dist-muon/*\",\n      \"/dist-muon/*\",\n    ],\n    \"artifacts/\": [\"artifacts/\", \"/artifacts/\", \"artifacts\", \"/artifacts\"],\n  };\n\n/**\n * Result of ensuring muon generated directories are ignored by Git.\n */\nexport interface MuonGitignoreResult {\n  /**\n   * Path of the .gitignore file that was checked or updated.\n   */\n  gitignorePath: string;\n\n  /**\n   * True when the file was created or appended.\n   */\n  changed: boolean;\n}\n\nconst isMissingFileError = (error: unknown): boolean =>\n  error instanceof Error && (error as NodeJS.ErrnoException).code === \"ENOENT\";\n\nconst hasMuonGitignoreEntry = (\n  content: string,\n  entry: MuonGitignoreEntry,\n): boolean =>\n  content\n    .split(/\\r?\\n/)\n    .map((line) => line.trim())\n    .some((line) => muonGitignoreEntryAliases[entry].includes(line));\n\n/**\n * Adds muon generated directories to a project .gitignore file.\n *\n * @param root Project root containing the .gitignore file.\n * @returns Gitignore update result.\n */\nexport const ensureMuonGitignoreEntry = async (\n  root: string,\n): Promise<MuonGitignoreResult> => {\n  const gitignorePath = join(root, \".gitignore\");\n  let content = \"\";\n  try {\n    content = await readFile(gitignorePath, \"utf8\");\n  } catch (error) {\n    if (!isMissingFileError(error)) {\n      throw error;\n    }\n  }\n\n  const missingEntries = muonGitignoreEntries.filter(\n    (entry) => !hasMuonGitignoreEntry(content, entry),\n  );\n  if (missingEntries.length === 0) {\n    return {\n      gitignorePath,\n      changed: false,\n    };\n  }\n\n  const separator = content.length > 0 && !content.endsWith(\"\\n\") ? \"\\n\" : \"\";\n  await writeFile(\n    gitignorePath,\n    `${content}${separator}${missingEntries.join(\"\\n\")}\\n`,\n  );\n  return {\n    gitignorePath,\n    changed: true,\n  };\n};\n","// muon - Multi-platform GUI application framework that uses CEF as its backend\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/muon\n\nimport { spawn, type ChildProcess } from \"node:child_process\";\nimport { constants, writeFileSync } from \"node:fs\";\nimport { access, mkdtemp, readFile, rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { dirname, isAbsolute, join, resolve, win32 } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { parse } from \"json5\";\nimport type { ViteDevServer } from \"vite\";\n\nimport { ensureMuonGitignoreEntry } from \"./gitignore.js\";\nimport { getDefaultMuonPrepareTarget, runMuonPrepare } from \"./prepare.js\";\nimport type { MuonRuntimePluginConfig } from \"./capability.js\";\nimport type { MuonVitePluginOptions } from \"./vite.js\";\n\nexport interface MuonLaunchScriptOptions {\n  muonExecutablePath: string;\n  projectConfigPath: string | undefined;\n  overrideConfigPath: string;\n  platform: NodeJS.Platform;\n}\n\ninterface MuonViteSessionOptions {\n  server: ViteDevServer;\n  pluginOptions: MuonVitePluginOptions;\n  refreshRuntimePluginConfig: () => Promise<MuonRuntimePluginConfig>;\n  platform: NodeJS.Platform;\n  architecture: NodeJS.Architecture;\n  environment: NodeJS.ProcessEnv;\n}\n\ninterface MuonRuntimePaths {\n  temporaryDirectory: string;\n  overrideConfigPath: string;\n}\n\ninterface MuonOverrideConfig {\n  cdp?: {\n    enable: true;\n  };\n  browser: {\n    startPage: string;\n    titleBarType?: \"native\" | \"muon\";\n    initialTitleBarVisibility?: boolean;\n    keybind?: {\n      devtools: \"f12\";\n      recycle: \"ctrl+f12\";\n    };\n  };\n  plugin: MuonRuntimePluginConfig & {\n    pages: string[];\n  };\n  network: {\n    allow: string[];\n  };\n}\n\n/**\n * Options for resolving a muon runtime directory used by the Vite plugin.\n */\nexport interface MuonRuntimePathOptions {\n  /**\n   * Vite project root used to resolve explicit relative paths.\n   */\n  root: string;\n\n  /**\n   * Public muon runtime target such as linux-amd64 or windows-amd64.\n   */\n  target: string;\n\n  /**\n   * Explicit custom muon-core runtime path.\n   */\n  muonPath: string | undefined;\n\n  /**\n   * Directory containing the packaged muon JavaScript files.\n   *\n   * @remarks This is injectable for tests. Production code uses the module directory.\n   */\n  packageDirectory?: string;\n}\n\nconst resolveFromRoot = (root: string, path: string): string =>\n  isAbsolute(path) ? path : resolve(root, path);\n\nconst moduleDirectory =\n  typeof __dirname === \"string\"\n    ? __dirname\n    : dirname(fileURLToPath(import.meta.url));\nconst defaultProjectConfigFileNames = [\"muon.json5\", \"muon.jsonc\", \"muon.json\"];\nconst muonRecycleExitCode = 88;\n\n/**\n * Resolves the muon-core runtime directory used by the Vite plugin.\n *\n * @param options Runtime path resolution inputs.\n * @returns Absolute or package-relative runtime directory path.\n */\nexport const resolveMuonRuntimePath = ({\n  root,\n  target,\n  muonPath,\n  packageDirectory = moduleDirectory,\n}: MuonRuntimePathOptions): string =>\n  muonPath === undefined\n    ? join(packageDirectory, \"runtime\", target)\n    : resolveFromRoot(root, muonPath);\n\nexport const getMuonExecutablePath = (\n  runtimePath: string,\n  platform: NodeJS.Platform,\n): string =>\n  join(runtimePath, platform === \"win32\" ? \"muon-core.exe\" : \"muon-core\");\n\nconst quotePosix = (value: string): string =>\n  `'${value.replaceAll(\"'\", \"'\\\\''\")}'`;\n\nconst getPlatformDirectoryName = (\n  path: string,\n  platform: NodeJS.Platform,\n): string => (platform === \"win32\" ? win32.dirname(path) : dirname(path));\n\nconst getOptionalPosixValue = (value: string | undefined): string =>\n  value === undefined ? \"''\" : quotePosix(value);\n\nconst createPosixMuonLaunchScript = ({\n  muonExecutablePath,\n  projectConfigPath,\n  overrideConfigPath,\n}: MuonLaunchScriptOptions): string => `#!/usr/bin/env bash\nset -euo pipefail\nMUON_RECYCLE_EXIT_CODE=${muonRecycleExitCode}\nMUON_EXECUTABLE=${quotePosix(muonExecutablePath)}\nMUON_EXECUTABLE_DIRECTORY=${quotePosix(getPlatformDirectoryName(muonExecutablePath, \"linux\"))}\nMUON_PROJECT_CONFIG=${getOptionalPosixValue(projectConfigPath)}\nMUON_OVERRIDE_CONFIG=${quotePosix(overrideConfigPath)}\n\nMUON_CONFIG_ARGS=()\nif [[ -n \"$MUON_PROJECT_CONFIG\" ]]; then\n  if [[ ! -f \"$MUON_PROJECT_CONFIG\" ]]; then\n    echo \"muon startup failed: project config does not exist: $MUON_PROJECT_CONFIG\" >&2\n    exit 1\n  fi\n  MUON_CONFIG_ARGS+=(\"-c\" \"$MUON_PROJECT_CONFIG\")\nfi\n\nif [[ ! -x \"$MUON_EXECUTABLE\" ]]; then\n  echo \"muon startup failed: executable does not exist or is not executable: $MUON_EXECUTABLE\" >&2\n  exit 1\nfi\n\nif [[ ! -f \"$MUON_OVERRIDE_CONFIG\" ]]; then\n  echo \"muon startup failed: generated override config does not exist: $MUON_OVERRIDE_CONFIG\" >&2\n  exit 1\nfi\nMUON_CONFIG_ARGS+=(\"-c\" \"$MUON_OVERRIDE_CONFIG\")\n\ncd \"$MUON_EXECUTABLE_DIRECTORY\"\nwhile true; do\n  set +e\n  \"$MUON_EXECUTABLE\" \"\\${MUON_CONFIG_ARGS[@]}\"\n  MUON_EXIT_CODE=$?\n  set -e\n  if [[ \"$MUON_EXIT_CODE\" -ne \"$MUON_RECYCLE_EXIT_CODE\" ]]; then\n    exit \"$MUON_EXIT_CODE\"\n  fi\ndone\n`;\n\nconst escapeWindowsCmdValue = (value: string): string =>\n  value.replaceAll(\"%\", \"%%\").replaceAll(\"\\r\", \"\").replaceAll(\"\\n\", \"\");\n\nconst getOptionalWindowsCmdValue = (value: string | undefined): string =>\n  value === undefined ? \"\" : escapeWindowsCmdValue(value);\n\nconst createWindowsMuonLaunchScript = ({\n  muonExecutablePath,\n  projectConfigPath,\n  overrideConfigPath,\n}: MuonLaunchScriptOptions): string => `@echo off\nsetlocal\nset \"MUON_RECYCLE_EXIT_CODE=${muonRecycleExitCode}\"\nset \"MUON_EXECUTABLE=${escapeWindowsCmdValue(muonExecutablePath)}\"\nset \"MUON_EXECUTABLE_DIRECTORY=${escapeWindowsCmdValue(getPlatformDirectoryName(muonExecutablePath, \"win32\"))}\"\nset \"MUON_PROJECT_CONFIG=${getOptionalWindowsCmdValue(projectConfigPath)}\"\nset \"MUON_OVERRIDE_CONFIG=${escapeWindowsCmdValue(overrideConfigPath)}\"\n\nif not exist \"%MUON_EXECUTABLE%\" (\n  echo muon startup failed: executable does not exist: %MUON_EXECUTABLE% 1>&2\n  exit /b 1\n)\n\nif not exist \"%MUON_OVERRIDE_CONFIG%\" (\n  echo muon startup failed: generated override config does not exist: %MUON_OVERRIDE_CONFIG% 1>&2\n  exit /b 1\n)\n\npushd \"%MUON_EXECUTABLE_DIRECTORY%\"\n:muon_recycle_loop\nif defined MUON_PROJECT_CONFIG (\n  if not exist \"%MUON_PROJECT_CONFIG%\" (\n    echo muon startup failed: project config does not exist: %MUON_PROJECT_CONFIG% 1>&2\n    popd\n    exit /b 1\n  )\n  \"%MUON_EXECUTABLE%\" -c \"%MUON_PROJECT_CONFIG%\" -c \"%MUON_OVERRIDE_CONFIG%\"\n) else (\n  \"%MUON_EXECUTABLE%\" -c \"%MUON_OVERRIDE_CONFIG%\"\n)\nset \"MUON_EXIT_CODE=%ERRORLEVEL%\"\nif \"%MUON_EXIT_CODE%\"==\"%MUON_RECYCLE_EXIT_CODE%\" goto muon_recycle_loop\npopd\nexit /b %MUON_EXIT_CODE%\n`;\n\nexport const createMuonLaunchScript = (\n  options: MuonLaunchScriptOptions,\n): string =>\n  options.platform === \"win32\"\n    ? createWindowsMuonLaunchScript(options)\n    : createPosixMuonLaunchScript(options);\n\nconst getBaseUrl = (server: ViteDevServer): string | undefined =>\n  server.resolvedUrls?.local[0] ?? server.resolvedUrls?.network[0];\n\nconst getWebSocketOrigin = (startUrl: string): string => {\n  const url = new URL(startUrl);\n  if (url.protocol === \"https:\") {\n    url.protocol = \"wss:\";\n  } else if (url.protocol === \"http:\") {\n    url.protocol = \"ws:\";\n  }\n  return url.origin;\n};\n\nconst createMuonOverrideConfig = (\n  startUrl: string,\n  enableDebugger: boolean,\n  runtimePluginConfig: MuonRuntimePluginConfig,\n): MuonOverrideConfig => {\n  const origin = new URL(startUrl).origin;\n  return {\n    ...(enableDebugger\n      ? {\n          cdp: {\n            enable: true,\n          },\n        }\n      : {}),\n    browser: {\n      startPage: startUrl,\n      ...(enableDebugger\n        ? {\n            keybind: {\n              devtools: \"f12\",\n              recycle: \"ctrl+f12\",\n            },\n          }\n        : {}),\n    },\n    plugin: {\n      ...runtimePluginConfig,\n      pages: [`${origin}/**`],\n    },\n    network: {\n      allow: [`${origin}/**`, `${getWebSocketOrigin(startUrl)}/**`],\n    },\n  };\n};\n\nconst writeMuonOverrideConfig = (\n  server: ViteDevServer,\n  overrideConfigPath: string,\n  pluginOptions: MuonVitePluginOptions,\n  runtimePluginConfig: MuonRuntimePluginConfig,\n): boolean => {\n  const startUrl = getBaseUrl(server);\n  if (startUrl === undefined) {\n    server.config.logger.warn(\"muon Vite plugin could not resolve a Vite URL.\");\n    return false;\n  }\n  writeFileSync(\n    overrideConfigPath,\n    `${JSON.stringify(\n      createMuonOverrideConfig(\n        startUrl,\n        pluginOptions.enableDebugger !== false,\n        runtimePluginConfig,\n      ),\n      null,\n      2,\n    )}\\n`,\n  );\n  return true;\n};\n\nconst createRuntimePaths = async (): Promise<MuonRuntimePaths> => {\n  const temporaryDirectory = await mkdtemp(join(tmpdir(), \"muon-vite-\"));\n  return {\n    temporaryDirectory,\n    overrideConfigPath: join(temporaryDirectory, \"muon.vite.json\"),\n  };\n};\n\nconst fileExists = async (path: string): Promise<boolean> => {\n  try {\n    await access(path, constants.F_OK);\n    return true;\n  } catch {\n    return false;\n  }\n};\n\nconst isJsonObject = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst getErrorMessage = (error: unknown): string =>\n  error instanceof Error ? error.message : String(error);\n\nconst resolveProjectConfigPath = async (\n  server: ViteDevServer,\n): Promise<string | undefined> => {\n  for (const fileName of defaultProjectConfigFileNames) {\n    const candidatePath = join(server.config.root, fileName);\n    if (!(await fileExists(candidatePath))) {\n      continue;\n    }\n\n    try {\n      const parsed = parse(await readFile(candidatePath, \"utf8\"));\n      if (!isJsonObject(parsed)) {\n        throw new Error(\"muon config root must be an object\");\n      }\n      return candidatePath;\n    } catch (error) {\n      server.config.logger.warn(\n        `muon project config will be ignored because it could not be read or parsed: ${candidatePath}: ${getErrorMessage(error)}`,\n      );\n      return undefined;\n    }\n  }\n\n  server.config.logger.warn(\n    `muon project config was not found in ${server.config.root}; launching with generated Vite config only.`,\n  );\n  return undefined;\n};\n\nconst createMuonConfigArguments = (\n  projectConfigPath: string | undefined,\n  overrideConfigPath: string,\n): string[] => [\n  ...(projectConfigPath === undefined ? [] : [\"-c\", projectConfigPath]),\n  \"-c\",\n  overrideConfigPath,\n];\n\nconst waitForMuonProcess = async (\n  muonExecutablePath: string,\n  configArguments: readonly string[],\n  environment: NodeJS.ProcessEnv,\n  setCurrentChild: (child: ChildProcess | undefined) => void,\n): Promise<number> => {\n  const child = spawn(muonExecutablePath, [...configArguments], {\n    cwd: dirname(muonExecutablePath),\n    env: environment,\n    stdio: \"ignore\",\n    windowsHide: false,\n  });\n  setCurrentChild(child);\n  try {\n    return await new Promise<number>((resolvePromise, reject) => {\n      child.once(\"error\", reject);\n      child.once(\"close\", (code) => {\n        resolvePromise(code ?? 1);\n      });\n    });\n  } finally {\n    setCurrentChild(undefined);\n  }\n};\n\nexport const startMuonViteBrowserBridge = async ({\n  server,\n  pluginOptions,\n  refreshRuntimePluginConfig,\n  platform,\n  architecture,\n  environment,\n}: MuonViteSessionOptions): Promise<void> => {\n  await ensureMuonGitignoreEntry(server.config.root);\n\n  if (pluginOptions.open === false || server.httpServer === null) {\n    return;\n  }\n\n  const target = getDefaultMuonPrepareTarget(platform, architecture);\n  const muonPath = resolveMuonRuntimePath({\n    root: server.config.root,\n    target,\n    muonPath: pluginOptions.muonPath,\n  });\n  const cefPath =\n    pluginOptions.cefPath === undefined\n      ? undefined\n      : resolveFromRoot(server.config.root, pluginOptions.cefPath);\n  const stagePath =\n    pluginOptions.stagePath === undefined\n      ? resolve(server.config.root, \".muon\", target)\n      : resolveFromRoot(server.config.root, pluginOptions.stagePath);\n  const paths = await createRuntimePaths();\n\n  let currentChild: ChildProcess | undefined = undefined;\n  let closing = false;\n  let supervisorPromise: Promise<void> | undefined = undefined;\n\n  const setCurrentChild = (child: ChildProcess | undefined): void => {\n    currentChild = child;\n  };\n\n  const runSupervisor = async (): Promise<void> => {\n    let exitCode = muonRecycleExitCode;\n    while (!closing && exitCode === muonRecycleExitCode) {\n      try {\n        const preparedRuntime = await runMuonPrepare({\n          muonPath,\n          cefPath,\n          stageDir: stagePath,\n          target,\n          cacheDir: environment.MUON_CACHE_DIR,\n          force: false,\n          quiet: false,\n          prepareExecutablePath: undefined,\n          environment,\n          cwd: server.config.root,\n        });\n        if (preparedRuntime.stagePath === undefined) {\n          throw new Error(\"muon-builder did not return a staged runtime path.\");\n        }\n        const runtimePluginConfig = await refreshRuntimePluginConfig();\n        const projectConfigPath = await resolveProjectConfigPath(server);\n        const configWritten = writeMuonOverrideConfig(\n          server,\n          paths.overrideConfigPath,\n          pluginOptions,\n          runtimePluginConfig,\n        );\n        if (!configWritten || closing) {\n          return;\n        }\n        exitCode = await waitForMuonProcess(\n          getMuonExecutablePath(preparedRuntime.stagePath, platform),\n          createMuonConfigArguments(\n            projectConfigPath,\n            paths.overrideConfigPath,\n          ),\n          environment,\n          setCurrentChild,\n        );\n      } catch (error) {\n        if (!closing) {\n          server.config.logger.warn(\n            `muon startup failed: ${getErrorMessage(error)}`,\n          );\n        }\n        return;\n      }\n    }\n  };\n\n  let cleanupPromise: Promise<void> | undefined = undefined;\n  const cleanup = async (): Promise<void> => {\n    if (cleanupPromise !== undefined) {\n      return cleanupPromise;\n    }\n    cleanupPromise = (async () => {\n      closing = true;\n      currentChild?.kill();\n      await supervisorPromise;\n      await rm(paths.temporaryDirectory, { recursive: true, force: true });\n    })();\n    return cleanupPromise;\n  };\n\n  const originalClose = server.close.bind(server);\n  server.close = async (): Promise<void> => {\n    try {\n      await originalClose();\n    } finally {\n      await cleanup();\n    }\n  };\n  server.httpServer.once(\"close\", () => {\n    void cleanup();\n  });\n  server.httpServer.once(\"listening\", () => {\n    supervisorPromise = runSupervisor();\n  });\n};\n","// muon - Multi-platform GUI application framework that uses CEF as its backend\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/muon\n\nimport type { ResolvedConfig } from \"vite\";\n\nimport type { MuonRuntimePluginConfig } from \"./capability.js\";\nimport type { MuonVitePluginOptions } from \"./vite.js\";\nimport { isMuonWindowsCodeSigningOptions } from \"./windows-code-signing.js\";\n\n/**\n * Metadata symbol used to recover `muon()` plugin options from `vite.config.*`.\n */\nexport const muonVitePluginOptionsSymbol = Symbol.for(\n  \"muon.vite.plugin.options\",\n);\n\nconst muonVitePluginRuntimeStateSymbol = Symbol.for(\n  \"muon.vite.plugin.runtimeState\",\n);\n\ninterface MuonVitePluginWithOptions {\n  [muonVitePluginOptionsSymbol]: MuonVitePluginOptions;\n}\n\n/**\n * Internal state exposed by a resolved muon Vite plugin instance.\n */\nexport interface MuonVitePluginRuntimeState {\n  /**\n   * Returns the Vite config resolved for this plugin instance.\n   */\n  getResolvedConfig: () => ResolvedConfig | undefined;\n\n  /**\n   * Returns the runtime plugin config generated by this plugin instance.\n   */\n  getRuntimePluginConfig: () => MuonRuntimePluginConfig | undefined;\n}\n\ninterface MuonVitePluginWithRuntimeState {\n  [muonVitePluginRuntimeStateSymbol]: MuonVitePluginRuntimeState;\n}\n\nconst isRecord = (value: unknown): value is Record<string | symbol, unknown> =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst isStringArray = (value: unknown): value is readonly string[] =>\n  Array.isArray(value) && value.every((entry) => typeof entry === \"string\");\n\nconst isWindowsResourceOptions = (value: unknown): boolean => {\n  if (!isRecord(value)) {\n    return false;\n  }\n\n  return (\n    (value.iconPath === undefined || typeof value.iconPath === \"string\") &&\n    (value.productName === undefined ||\n      typeof value.productName === \"string\") &&\n    (value.fileDescription === undefined ||\n      typeof value.fileDescription === \"string\") &&\n    (value.companyName === undefined ||\n      typeof value.companyName === \"string\") &&\n    (value.version === undefined || typeof value.version === \"string\") &&\n    (value.copyright === undefined || typeof value.copyright === \"string\") &&\n    (value.language === undefined ||\n      (typeof value.language === \"number\" &&\n        Number.isInteger(value.language))) &&\n    (value.codePage === undefined ||\n      (typeof value.codePage === \"number\" && Number.isInteger(value.codePage)))\n  );\n};\n\nconst isLinuxDesktopOptions = (value: unknown): boolean => {\n  if (!isRecord(value)) {\n    return false;\n  }\n\n  return (\n    (value.desktopId === undefined || typeof value.desktopId === \"string\") &&\n    (value.name === undefined || typeof value.name === \"string\") &&\n    (value.comment === undefined || typeof value.comment === \"string\") &&\n    (value.iconPath === undefined || typeof value.iconPath === \"string\") &&\n    (value.categories === undefined || isStringArray(value.categories)) &&\n    (value.startupNotify === undefined ||\n      typeof value.startupNotify === \"boolean\")\n  );\n};\n\nconst isMuonViteBuildOptions = (value: unknown): boolean => {\n  if (!isRecord(value)) {\n    return false;\n  }\n\n  return (\n    (value.targets === undefined || isStringArray(value.targets)) &&\n    (value.allTargets === undefined || typeof value.allTargets === \"boolean\") &&\n    (value.appName === undefined || typeof value.appName === \"string\") &&\n    (value.appId === undefined || typeof value.appId === \"string\") &&\n    (value.outputRoot === undefined || typeof value.outputRoot === \"string\") &&\n    (value.configPath === undefined || typeof value.configPath === \"string\") &&\n    (value.iconPath === undefined || typeof value.iconPath === \"string\") &&\n    (value.distributionFiles === undefined ||\n      isStringArray(value.distributionFiles)) &&\n    (value.windowsResource === undefined ||\n      isWindowsResourceOptions(value.windowsResource)) &&\n    (value.windowsCodeSigning === undefined ||\n      value.windowsCodeSigning === false ||\n      isMuonWindowsCodeSigningOptions(value.windowsCodeSigning)) &&\n    (value.linuxDesktop === undefined ||\n      isLinuxDesktopOptions(value.linuxDesktop)) &&\n    (value.packageDirectory === undefined ||\n      typeof value.packageDirectory === \"string\") &&\n    (value.assetSalt === undefined || value.assetSalt instanceof Uint8Array)\n  );\n};\n\nconst isMuonVitePluginAccessImportOptions = (value: unknown): boolean => {\n  if (!isRecord(value)) {\n    return false;\n  }\n\n  return (\n    (value.sources === undefined || isStringArray(value.sources)) &&\n    (value.packages === undefined || isStringArray(value.packages)) &&\n    (value.allow === undefined || isStringArray(value.allow))\n  );\n};\n\nconst isMuonVitePluginAccessEntryOptions = (value: unknown): boolean => {\n  if (!isRecord(value)) {\n    return false;\n  }\n\n  return (\n    typeof value.name === \"string\" &&\n    (value.signature === undefined || typeof value.signature === \"string\") &&\n    (value.salt === undefined || typeof value.salt === \"string\") &&\n    (value.allow === undefined || isStringArray(value.allow)) &&\n    (value.imports === undefined ||\n      (Array.isArray(value.imports) &&\n        value.imports.every(isMuonVitePluginAccessImportOptions)))\n  );\n};\n\nconst isMuonVitePluginAccessOptions = (value: unknown): boolean => {\n  if (!isRecord(value)) {\n    return false;\n  }\n\n  return (\n    (value.path === undefined || typeof value.path === \"string\") &&\n    (value.mode === undefined ||\n      value.mode === \"simple\" ||\n      value.mode === \"validate\") &&\n    (value.pages === undefined || isStringArray(value.pages)) &&\n    (value.plugins === undefined ||\n      (Array.isArray(value.plugins) &&\n        value.plugins.every(isMuonVitePluginAccessEntryOptions)))\n  );\n};\n\nconst isMuonVitePluginOptions = (\n  value: unknown,\n): value is MuonVitePluginOptions => {\n  if (!isRecord(value)) {\n    return false;\n  }\n\n  return (\n    (value.muonPath === undefined || typeof value.muonPath === \"string\") &&\n    (value.cefPath === undefined || typeof value.cefPath === \"string\") &&\n    (value.stagePath === undefined || typeof value.stagePath === \"string\") &&\n    (value.open === undefined || typeof value.open === \"boolean\") &&\n    (value.enableDebugger === undefined ||\n      typeof value.enableDebugger === \"boolean\") &&\n    (value.pluginAccess === undefined ||\n      value.pluginAccess === false ||\n      isMuonVitePluginAccessOptions(value.pluginAccess)) &&\n    (value.build === undefined ||\n      typeof value.build === \"boolean\" ||\n      isMuonViteBuildOptions(value.build))\n  );\n};\n\n/**\n * Attaches raw muon Vite plugin options to a plugin instance.\n *\n * @param plugin Plugin object.\n * @param options Raw plugin options.\n * @returns Plugin object with internal muon metadata.\n */\nexport const attachMuonVitePluginOptions = <TPlugin extends object>(\n  plugin: TPlugin,\n  options: MuonVitePluginOptions,\n): TPlugin & MuonVitePluginWithOptions => {\n  Object.defineProperty(plugin, muonVitePluginOptionsSymbol, {\n    configurable: false,\n    enumerable: false,\n    value: { ...options },\n    writable: false,\n  });\n\n  return plugin as TPlugin & MuonVitePluginWithOptions;\n};\n\n/**\n * Attaches internal runtime state to a plugin instance.\n *\n * @param plugin Plugin object.\n * @param runtimeState Runtime state accessor.\n * @returns Plugin object with internal muon runtime metadata.\n */\nexport const attachMuonVitePluginRuntimeState = <TPlugin extends object>(\n  plugin: TPlugin,\n  runtimeState: MuonVitePluginRuntimeState,\n): TPlugin & MuonVitePluginWithRuntimeState => {\n  Object.defineProperty(plugin, muonVitePluginRuntimeStateSymbol, {\n    configurable: false,\n    enumerable: false,\n    value: runtimeState,\n    writable: false,\n  });\n\n  return plugin as TPlugin & MuonVitePluginWithRuntimeState;\n};\n\n/**\n * Reads raw muon Vite plugin options from a plugin instance.\n *\n * @param plugin Candidate plugin object.\n * @returns Attached muon options, if present.\n */\nexport const getMuonVitePluginOptions = (\n  plugin: unknown,\n): MuonVitePluginOptions | undefined => {\n  if (!isRecord(plugin)) {\n    return undefined;\n  }\n\n  const options = plugin[muonVitePluginOptionsSymbol];\n  return isMuonVitePluginOptions(options) ? options : undefined;\n};\n\n/**\n * Reads internal runtime state from a muon Vite plugin instance.\n *\n * @param plugin Candidate plugin object.\n * @returns Runtime state accessor, if present.\n */\nexport const getMuonVitePluginRuntimeState = (\n  plugin: unknown,\n): MuonVitePluginRuntimeState | undefined => {\n  if (!isRecord(plugin)) {\n    return undefined;\n  }\n\n  const runtimeState = plugin[muonVitePluginRuntimeStateSymbol];\n  return isRecord(runtimeState) &&\n    typeof runtimeState.getResolvedConfig === \"function\" &&\n    typeof runtimeState.getRuntimePluginConfig === \"function\"\n    ? (runtimeState as unknown as MuonVitePluginRuntimeState)\n    : undefined;\n};\n\n/**\n * Resolves nested Vite plugin option values into a flat list.\n *\n * @param pluginOptions Raw `plugins` field from a Vite config.\n * @returns Flat plugin object list.\n */\nexport const flattenVitePluginOptions = async (\n  pluginOptions: unknown,\n): Promise<unknown[]> => {\n  const resolvedValue = await pluginOptions;\n  if (resolvedValue === null || resolvedValue === undefined || !resolvedValue) {\n    return [];\n  }\n\n  if (Array.isArray(resolvedValue)) {\n    const nested = await Promise.all(\n      resolvedValue.map((entry) => flattenVitePluginOptions(entry)),\n    );\n    return nested.flat();\n  }\n\n  return [resolvedValue];\n};\n","// muon - Multi-platform GUI application framework that uses CEF as its backend\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/muon\n\n/**\n * Asset layout derived from Vite's resolved base URL for packaged muon apps.\n */\nexport interface MuonVitePackagedAssetOptions {\n  /** ZIP entry prefix used for copied Vite build output. */\n  assetPrefix: string;\n  /** Generated browser start page when Vite base needs a packaged path. */\n  browserStartPage: string | undefined;\n}\n\n/**\n * Returns the package-local asset base path represented by a Vite base URL.\n */\nexport const resolveVitePackagedAssetBasePath = (\n  base: string,\n): string | undefined => {\n  const normalizedBase = base.trim();\n  if (\n    normalizedBase === \"\" ||\n    normalizedBase === \"/\" ||\n    normalizedBase === \"./\" ||\n    normalizedBase.startsWith(\"//\") ||\n    /^[a-zA-Z][a-zA-Z\\d+.-]*:/.test(normalizedBase) ||\n    !normalizedBase.startsWith(\"/\")\n  ) {\n    return undefined;\n  }\n\n  const normalizedPath = normalizedBase.split(/[?#]/, 1)[0] ?? \"\";\n  const segments = normalizedPath\n    .split(\"/\")\n    .filter((segment) => segment.length > 0);\n  return segments.length > 0 ? segments.join(\"/\") : undefined;\n};\n\n/**\n * Creates muon asset options for packaging Vite build output.\n */\nexport const createVitePackagedAssetOptions = (\n  base: string,\n): MuonVitePackagedAssetOptions => {\n  const packagedAssetBasePath = resolveVitePackagedAssetBasePath(base);\n  const assetPrefix =\n    packagedAssetBasePath === undefined\n      ? \"main\"\n      : `main/${packagedAssetBasePath}`;\n  return {\n    assetPrefix,\n    browserStartPage:\n      packagedAssetBasePath === undefined\n        ? undefined\n        : `asset://${assetPrefix}/index.html`,\n  };\n};\n","// muon - Multi-platform GUI application framework that uses CEF as its backend\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/muon\n\nimport { isAbsolute, resolve } from \"node:path\";\n\nimport type { InlineConfig, ResolvedConfig } from \"vite\";\n\nimport {\n  buildMuonApp,\n  type MuonBuildOptions,\n  type MuonBuildResult,\n} from \"./build.js\";\nimport {\n  flattenVitePluginOptions,\n  getMuonVitePluginOptions,\n} from \"./vite-options.js\";\nimport type { MuonViteBuildOptions, MuonVitePluginOptions } from \"./vite.js\";\nimport { createVitePackagedAssetOptions } from \"./vite-assets.js\";\nimport { mergeMuonWindowsResourceOptions } from \"./windows-resource.js\";\nimport { mergeMuonLinuxDesktopOptions } from \"./linux-desktop.js\";\nimport type { MuonProgressCallback } from \"./progress.js\";\n\n/**\n * Environment variable used to prevent the Vite plugin build hook from running\n * when a CLI command owns the muon build sequence.\n */\nexport const muonBuildSequenceSuppressViteBuildEnvironmentKey =\n  \"MUON_SUPPRESS_VITE_MUON_BUILD\";\n\n/**\n * Resolved project metadata used by the CLI build sequence.\n */\nexport interface MuonBuildSequenceProject {\n  /** Project root used for muon config and package metadata. */\n  root: string;\n  /** Root passed to Vite when the sequence must run `vite build`. */\n  viteBuildRoot: string;\n  /** Vite base URL used by the resolved Vite build. */\n  viteBase: string | undefined;\n  /** Absolute Vite output directory used as muon app assets. */\n  viteOutputDirectory: string | undefined;\n  /** muon Vite plugin options if the project config contains the plugin. */\n  pluginOptions: MuonVitePluginOptions | undefined;\n}\n\n/**\n * Options for running the CLI-oriented muon build sequence.\n */\nexport interface MuonBuildSequenceOptions extends MuonBuildOptions {\n  /** Target default used only when no muon Vite plugin defines build options. */\n  defaultAllTargets?: boolean;\n}\n\ninterface InternalMuonBuildSequenceOptions extends MuonBuildSequenceOptions {\n  environment?: NodeJS.ProcessEnv;\n  progress?: MuonProgressCallback;\n}\n\ninterface InternalMuonBuildOptions extends MuonBuildOptions {\n  environment?: NodeJS.ProcessEnv;\n  progress?: MuonProgressCallback;\n}\n\nconst isMissingVitePackageError = (error: unknown): boolean => {\n  const candidate = error as { code?: unknown; message?: unknown };\n  return (\n    candidate.code === \"ERR_MODULE_NOT_FOUND\" &&\n    typeof candidate.message === \"string\" &&\n    candidate.message.includes(\"vite\")\n  );\n};\n\nconst resolveViteOutputDirectory = (config: ResolvedConfig): string => {\n  return isAbsolute(config.build.outDir)\n    ? config.build.outDir\n    : resolve(config.root, config.build.outDir);\n};\n\nconst findMuonVitePluginOptions = async (\n  plugins: unknown,\n): Promise<MuonVitePluginOptions | undefined> => {\n  const flattenedPlugins = await flattenVitePluginOptions(plugins);\n  const muonPlugins = flattenedPlugins\n    .map((plugin) => getMuonVitePluginOptions(plugin))\n    .filter(\n      (pluginOptions): pluginOptions is MuonVitePluginOptions =>\n        pluginOptions !== undefined,\n    );\n\n  if (muonPlugins.length > 1) {\n    throw new Error(\n      \"Multiple muon() plugin definitions were found in vite.config.*.\",\n    );\n  }\n\n  return muonPlugins[0];\n};\n\n/**\n * Loads Vite configuration only far enough to discover whether a muon plugin\n * controls the build sequence.\n */\nexport const loadMuonBuildSequenceProject = async (\n  cwd: string,\n): Promise<MuonBuildSequenceProject> => {\n  const resolvedCwd = resolve(cwd);\n  let vite: typeof import(\"vite\");\n  try {\n    vite = await import(\"vite\");\n  } catch (error) {\n    if (isMissingVitePackageError(error)) {\n      return {\n        root: resolvedCwd,\n        viteBuildRoot: resolvedCwd,\n        viteBase: undefined,\n        viteOutputDirectory: undefined,\n        pluginOptions: undefined,\n      };\n    }\n    throw error;\n  }\n\n  const resolvedConfig = await vite.resolveConfig(\n    { root: resolvedCwd, logLevel: \"silent\" } satisfies InlineConfig,\n    \"build\",\n    \"production\",\n    \"production\",\n  );\n  const pluginOptions = await findMuonVitePluginOptions(resolvedConfig.plugins);\n  if (pluginOptions === undefined) {\n    return {\n      root: resolvedCwd,\n      viteBuildRoot: resolvedCwd,\n      viteBase: undefined,\n      viteOutputDirectory: undefined,\n      pluginOptions: undefined,\n    };\n  }\n\n  return {\n    root: resolvedConfig.root,\n    viteBuildRoot: resolvedCwd,\n    viteBase: resolvedConfig.base,\n    viteOutputDirectory: resolveViteOutputDirectory(resolvedConfig),\n    pluginOptions,\n  };\n};\n\n/**\n * Returns muon build options from a muon Vite plugin declaration.\n */\nexport const resolveMuonViteBuildOptions = (\n  pluginOptions: MuonVitePluginOptions | undefined,\n): MuonViteBuildOptions => {\n  if (pluginOptions?.build === false) {\n    throw new Error(\"muon build is disabled by muon({ build: false }).\");\n  }\n  return typeof pluginOptions?.build === \"object\" ? pluginOptions.build : {};\n};\n\nconst runViteBuild = async (root: string): Promise<void> => {\n  const vite = await import(\"vite\");\n  const previous =\n    process.env[muonBuildSequenceSuppressViteBuildEnvironmentKey];\n  process.env[muonBuildSequenceSuppressViteBuildEnvironmentKey] = \"1\";\n  try {\n    await vite.build({ root, logLevel: \"silent\" } satisfies InlineConfig);\n  } finally {\n    if (previous === undefined) {\n      delete process.env[muonBuildSequenceSuppressViteBuildEnvironmentKey];\n    } else {\n      process.env[muonBuildSequenceSuppressViteBuildEnvironmentKey] = previous;\n    }\n  }\n};\n\nconst hasExplicitTargets = (options: MuonBuildSequenceOptions): boolean =>\n  options.targets !== undefined && options.targets.length > 0;\n\nconst copyDefinedBuildOptions = (\n  output: MuonBuildOptions,\n  input: MuonBuildSequenceOptions,\n  usesViteAssets: boolean,\n): void => {\n  if (input.assetSourcePath !== undefined) {\n    if (usesViteAssets) {\n      throw new Error(\n        \"--assets cannot be used when a muon() Vite plugin provides the build sequence.\",\n      );\n    }\n    output.assetSourcePath = input.assetSourcePath;\n  }\n  if (input.assetPrefix !== undefined) {\n    output.assetPrefix = input.assetPrefix;\n  }\n  if (input.targets !== undefined && input.targets.length > 0) {\n    output.targets = input.targets;\n    if (input.allTargets === undefined) {\n      output.allTargets = false;\n    }\n  }\n  if (input.allTargets !== undefined) {\n    output.allTargets = input.allTargets;\n  }\n  if (input.appName !== undefined) {\n    output.appName = input.appName;\n  }\n  if (input.appId !== undefined) {\n    output.appId = input.appId;\n  }\n  if (input.outputRoot !== undefined) {\n    output.outputRoot = input.outputRoot;\n  }\n  if (input.configPath !== undefined) {\n    output.configPath = input.configPath;\n  }\n  if (input.iconPath !== undefined) {\n    output.iconPath = input.iconPath;\n  }\n  if (input.distributionFiles !== undefined) {\n    output.distributionFiles = input.distributionFiles;\n  }\n  if (input.windowsResource !== undefined) {\n    const windowsResource = mergeMuonWindowsResourceOptions(\n      input.windowsResource,\n      output.windowsResource,\n    );\n    if (windowsResource !== undefined) {\n      output.windowsResource = windowsResource;\n    }\n  }\n  if (input.windowsCodeSigning !== undefined) {\n    output.windowsCodeSigning = input.windowsCodeSigning;\n  }\n  if (input.linuxDesktop !== undefined) {\n    const linuxDesktop = mergeMuonLinuxDesktopOptions(\n      input.linuxDesktop,\n      output.linuxDesktop,\n    );\n    if (linuxDesktop !== undefined) {\n      output.linuxDesktop = linuxDesktop;\n    }\n  }\n  if (input.packageDirectory !== undefined) {\n    output.packageDirectory = input.packageDirectory;\n  }\n  if (input.assetSalt !== undefined) {\n    output.assetSalt = input.assetSalt;\n  }\n  if (input.includeRuntimeHelper !== undefined) {\n    output.includeRuntimeHelper = input.includeRuntimeHelper;\n  }\n};\n\n/**\n * Runs the project build sequence used by `muon build` and `muon pack`.\n */\nexport const runMuonBuildSequence = async (\n  options: MuonBuildSequenceOptions = {},\n  loadedProject?: MuonBuildSequenceProject,\n): Promise<MuonBuildResult> => {\n  const internalOptions = options as InternalMuonBuildSequenceOptions;\n  const progress = internalOptions.progress;\n  const project =\n    loadedProject ??\n    (await loadMuonBuildSequenceProject(options.root ?? process.cwd()));\n  const pluginBuildOptions = resolveMuonViteBuildOptions(project.pluginOptions);\n  const usesViteAssets = project.pluginOptions !== undefined;\n  const buildOptions: MuonBuildOptions = {\n    root: project.root,\n  };\n\n  if (usesViteAssets) {\n    if (project.viteOutputDirectory === undefined) {\n      throw new Error(\"Vite output directory could not be resolved.\");\n    }\n    Object.assign(buildOptions, pluginBuildOptions);\n    const packagedAssetOptions = createVitePackagedAssetOptions(\n      project.viteBase ?? \"/\",\n    );\n    buildOptions.assetSourcePath = project.viteOutputDirectory;\n    buildOptions.assetPrefix = packagedAssetOptions.assetPrefix;\n    if (packagedAssetOptions.browserStartPage !== undefined) {\n      buildOptions.browserStartPage = packagedAssetOptions.browserStartPage;\n    }\n    progress?.({\n      phase: \"build\",\n      status: \"Running Vite build\",\n    });\n    await runViteBuild(project.viteBuildRoot);\n  } else if (\n    options.defaultAllTargets !== undefined &&\n    options.allTargets === undefined &&\n    !hasExplicitTargets(options)\n  ) {\n    buildOptions.allTargets = options.defaultAllTargets;\n  }\n\n  copyDefinedBuildOptions(buildOptions, options, usesViteAssets);\n  if (internalOptions.environment !== undefined) {\n    (buildOptions as InternalMuonBuildOptions).environment =\n      internalOptions.environment;\n  }\n  if (progress !== undefined) {\n    (buildOptions as InternalMuonBuildOptions).progress = progress;\n  }\n  return await buildMuonApp(buildOptions);\n};\n","// muon - Multi-platform GUI application framework that uses CEF as its backend\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/muon\n\nimport type { Plugin, ResolvedConfig, UserConfig, WatchOptions } from \"vite\";\nimport { isAbsolute, resolve } from \"node:path\";\n\nimport { buildMuonApp, type MuonBuildOptions } from \"./build.js\";\nimport {\n  createMuonCapabilityModuleResolver,\n  type MuonCapabilityModuleResolver,\n  type MuonRuntimePluginConfig,\n} from \"./capability.js\";\nimport {\n  resolveMuonPluginAccessOptions,\n  type MuonPluginAccessEntryOptions,\n  type MuonPluginAccessImportOptions,\n  type MuonPluginAccessOptions,\n  type MuonResolvedPluginAccessOptions,\n} from \"./plugin-access.js\";\nimport { startMuonViteBrowserBridge } from \"./vite-internals.js\";\nimport {\n  attachMuonVitePluginOptions,\n  attachMuonVitePluginRuntimeState,\n} from \"./vite-options.js\";\nimport { muonBuildSequenceSuppressViteBuildEnvironmentKey } from \"./build-sequence.js\";\nimport { createVitePackagedAssetOptions } from \"./vite-assets.js\";\nimport {\n  createMuonProgressRenderer,\n  type MuonProgressCallback,\n} from \"./progress.js\";\nimport type { MuonWindowsCodeSigningOptions } from \"./windows-code-signing.js\";\n\nexport type {\n  MuonWindowsCodeSigningOptions,\n  MuonWindowsCodeSigningTarget,\n} from \"./windows-code-signing.js\";\n\ntype MuonWatchIgnored = NonNullable<WatchOptions[\"ignored\"]>;\n\ninterface InternalMuonBuildOptions extends MuonBuildOptions {\n  progress?: MuonProgressCallback;\n}\n\nconst getErrorMessage = (error: unknown): string =>\n  error instanceof Error ? error.message : String(error);\n\n/**\n * Windows PE and NSIS resource metadata options.\n */\nexport interface MuonWindowsResourceOptions {\n  /**\n   * Windows-specific icon PNG file path override.\n   *\n   * @remarks Only `.png` files are accepted as app inputs. muon generates the\n   * required Windows `.ico` file automatically when updating PE resources or\n   * creating NSIS installers. Use top-level `iconPath` for a shared static\n   * application icon. Relative paths are resolved from the source that supplied\n   * the option.\n   * @defaultValue Uses top-level `iconPath`, then the packaged `muon-256.png`\n   * icon.\n   */\n  iconPath?: string;\n\n  /**\n   * Product name written to the Windows version resource.\n   *\n   * @defaultValue Uses `windows.resource.productName`, `project.json`,\n   * `package.json`, then the muon launcher name.\n   */\n  productName?: string;\n\n  /**\n   * File description written to the Windows version resource.\n   *\n   * @defaultValue Uses `windows.resource.fileDescription`, `project.json`,\n   * `package.json.description`, then the product name.\n   */\n  fileDescription?: string;\n\n  /**\n   * Company name written to the Windows version resource.\n   *\n   * @defaultValue Uses `windows.resource.companyName`, `project.json`,\n   * `package.json.author`, then `\"Unknown\"`.\n   */\n  companyName?: string;\n\n  /**\n   * Product and file version string.\n   *\n   * @remarks PE fixed version fields are normalized to four numeric parts, so\n   * `1.2.3` becomes `1.2.3.0`. String fields keep the original value.\n   * @defaultValue Uses `windows.resource.version`, `project.json.version`,\n   * `package.json.version`, then `\"0.0.0\"`.\n   */\n  version?: string;\n\n  /**\n   * Legal copyright written to the Windows version resource.\n   *\n   * @defaultValue Uses `windows.resource.copyright`, `project.json`, then\n   * `package.json.copyright` when available.\n   */\n  copyright?: string;\n\n  /**\n   * Windows resource language identifier.\n   *\n   * @defaultValue `1033` (`en-US`).\n   */\n  language?: number;\n\n  /**\n   * Windows version resource code page.\n   *\n   * @defaultValue `1200` (`UTF-16LE`).\n   */\n  codePage?: number;\n}\n\n/**\n * Linux desktop entry metadata options.\n */\nexport interface MuonLinuxDesktopOptions {\n  /**\n   * Desktop entry identifier without the `.desktop` suffix.\n   *\n   * @defaultValue Uses the resolved muon `appId`.\n   */\n  desktopId?: string;\n\n  /**\n   * Application display name.\n   *\n   * @defaultValue Uses `linux.desktop.name`, then `package.json` name.\n   */\n  name?: string;\n\n  /**\n   * Desktop entry comment.\n   *\n   * @defaultValue Uses `linux.desktop.comment`, then `package.json`\n   * description.\n   */\n  comment?: string;\n\n  /**\n   * Linux-specific desktop icon PNG file path override.\n   *\n   * @remarks Only `.png` files are accepted as app inputs. Relative paths are\n   * resolved from the source that supplied the option. Use top-level\n   * `iconPath` for a shared static application icon.\n   * @defaultValue Uses top-level `iconPath`, then the packaged `muon-256.png`\n   * icon when available.\n   */\n  iconPath?: string;\n\n  /**\n   * Desktop menu categories.\n   *\n   * @defaultValue `[\"Utility\"]`.\n   */\n  categories?: readonly string[];\n\n  /**\n   * Whether desktop startup notification is requested.\n   *\n   * @defaultValue `true`.\n   */\n  startupNotify?: boolean;\n}\n\n/**\n * Options for generating muon app distributions after Vite build.\n */\nexport interface MuonViteBuildOptions {\n  /**\n   * Public target identifiers to build.\n   *\n   * @defaultValue Uses every supported target unless `allTargets` is `false`,\n   * then the host target is used.\n   */\n  targets?: readonly string[];\n\n  /**\n   * Build every supported target from the installed package.\n   *\n   * @remarks Set false to build only the host target when `targets` is omitted.\n   * @defaultValue `true` when `targets` is omitted.\n   */\n  allTargets?: boolean;\n\n  /**\n   * File name used for the app launcher.\n   *\n   * @remarks The .exe suffix is added automatically for Windows targets.\n   * @defaultValue The sanitized package name, or `\"muon-app\"` when unavailable.\n   */\n  appName?: string;\n\n  /**\n   * Stable base application identifier used for runtime app identity.\n   *\n   * @remarks Windows target distributions embed `<appId>.<arch>` as their\n   * runtime app identifier. Linux targets embed this value unchanged.\n   *\n   * @defaultValue The sanitized package name, or `\"muon-app\"` when unavailable.\n   */\n  appId?: string;\n\n  /**\n   * Parent directory that receives dist-muon/linux-amd64/ style outputs.\n   *\n   * @defaultValue The Vite project root.\n   */\n  outputRoot?: string;\n\n  /**\n   * muon config path to embed.\n   *\n   * @defaultValue Auto-detects `muon.json5`, `muon.jsonc`, then `muon.json`;\n   * uses an empty config when none exists.\n   */\n  configPath?: string;\n\n  /**\n   * Static application icon PNG file path.\n   *\n   * @remarks The icon is used for Windows PE/NSIS resources, Linux desktop\n   * entries, and the generated initial title bar icon asset. Target-specific\n   * icon paths in `windowsResource` or `linuxDesktop` override this value for\n   * that target.\n   * @defaultValue Uses top-level `muon.json` `iconPath`, `project.json`, then\n   * the packaged `muon-256.png` icon.\n   */\n  iconPath?: string;\n\n  /**\n   * Additional project files copied next to the generated app launcher.\n   *\n   * @remarks When omitted, `package.json` `files` is used as a candidate list.\n   * Only regular files are copied. Asset input paths, `node_modules`, `.git`,\n   * and generated target output directories are excluded. Set an empty array to\n   * disable package.json files fallback.\n   */\n  distributionFiles?: readonly string[];\n\n  /**\n   * Windows PE and NSIS resource metadata.\n   *\n   * @defaultValue Uses CLI options, `muon.json` `windows.resource`,\n   * `project.json`, `package.json`, then muon defaults.\n   */\n  windowsResource?: MuonWindowsResourceOptions;\n\n  /**\n   * Windows code signing command for generated executable artifacts.\n   *\n   * @remarks Uses `muon.json` `windows.codeSigning` when omitted. Set false\n   * to disable `muon.json` code signing.\n   */\n  windowsCodeSigning?: false | MuonWindowsCodeSigningOptions;\n\n  /**\n   * Linux desktop entry metadata.\n   *\n   * @defaultValue Uses CLI options, `muon.json` `linux.desktop`, package\n   * metadata, then muon defaults.\n   */\n  linuxDesktop?: MuonLinuxDesktopOptions;\n\n  /**\n   * Directory containing package runtime/ and native/ folders.\n   *\n   * @defaultValue The installed muon package dist directory.\n   */\n  packageDirectory?: string;\n\n  /**\n   * Asset salt override for deterministic tests.\n   *\n   * @remarks Production builds should omit this option.\n   * @defaultValue A random 16-byte salt.\n   */\n  assetSalt?: Uint8Array;\n}\n\n/**\n * Import-side capability rule for muon plugin virtual modules.\n */\nexport interface MuonVitePluginAccessImportOptions extends MuonPluginAccessImportOptions {}\n\n/**\n * Plugin entry and capability import configuration for muon virtual modules.\n */\nexport interface MuonVitePluginAccessEntryOptions extends MuonPluginAccessEntryOptions {}\n\n/**\n * Plugin access configuration for muon plugin virtual modules.\n */\nexport interface MuonVitePluginAccessOptions extends MuonPluginAccessOptions {\n  /**\n   * Runtime plugin entries and validate-mode import rules.\n   */\n  plugins?: readonly MuonVitePluginAccessEntryOptions[];\n}\n\n/**\n * Options for the muon Vite development plugin.\n */\nexport interface MuonVitePluginOptions {\n  /**\n   * Directory containing muon-core runtime files such as muon-core and plugins.\n   *\n   * @remarks Relative paths are resolved from the Vite project root. When omitted,\n   * the packaged runtime at dist/runtime/<public-target> is used.\n   * @defaultValue The packaged runtime at `dist/runtime/<public-target>`.\n   */\n  muonPath?: string;\n\n  /**\n   * Directory containing CEF files, or a CEF archive root with Release/Resources.\n   *\n   * @remarks Relative paths are resolved from the Vite project root. When omitted,\n   * muon-builder downloads and caches the tested CEF artifact from muonPath.\n   * @defaultValue The tested CEF artifact downloaded and cached by muon-builder.\n   */\n  cefPath?: string;\n\n  /**\n   * Runtime staging directory used for development startup.\n   *\n   * @remarks Relative paths are resolved from the Vite project root.\n   * @defaultValue `.muon/<public-target>`.\n   */\n  stagePath?: string;\n\n  /**\n   * Launch muon automatically during Vite dev startup.\n   *\n   * @remarks This is independent from Vite's server.open browser startup\n   * option. Vite build ignores this option.\n   * @defaultValue `true`\n   */\n  open?: boolean;\n\n  /**\n   * Enable the muon debugger defaults during Vite dev startup.\n   *\n   * @remarks When enabled, the generated development config enables CDP and\n   * binds DevTools to F12. Vite build ignores this option.\n   * @defaultValue `true`\n   */\n  enableDebugger?: boolean;\n\n  /**\n   * Plugin access mode and virtual module capability imports.\n   *\n   * @remarks Omit this option to use the `plugin` section from `muon.json`.\n   * Pass plugin entries with import rules to override `muon.json` and allow\n   * virtual modules such as `muon:executor`. Pass `false` to use simple\n   * window-global exposure.\n   * @defaultValue `muon.json` plugin config, or validate mode with no\n   * capability imports.\n   */\n  pluginAccess?: false | MuonVitePluginAccessOptions;\n\n  /**\n   * Build app distributions from Vite output.\n   *\n   * @remarks Set false to disable the build hook while keeping the development\n   * bridge enabled.\n   * @defaultValue `true` during Vite build.\n   */\n  build?: boolean | MuonViteBuildOptions;\n}\n\n/**\n * Creates a Vite plugin that launches muon during Vite dev startup.\n *\n * @param options muon plugin options used for development startup and build.\n * @returns Vite plugin instance.\n * @defaultValue `options` defaults to `{}`.\n */\nconst muon = (options: MuonVitePluginOptions = {}): Plugin => {\n  let resolvedConfig: ResolvedConfig | undefined = undefined;\n  let capabilityResolver: MuonCapabilityModuleResolver | undefined = undefined;\n  let resolvedPluginAccess: MuonResolvedPluginAccessOptions | undefined =\n    undefined;\n  let loadedCapabilityRuntimePluginConfig: MuonRuntimePluginConfig | undefined =\n    undefined;\n\n  const getRuntimePluginConfig = (): MuonRuntimePluginConfig =>\n    resolveMuonRuntimePluginConfig(capabilityResolver, resolvedPluginAccess);\n\n  const refreshPluginAccess = async (config: ResolvedConfig): Promise<void> => {\n    resolvedPluginAccess = await resolveMuonPluginAccessOptions({\n      root: config.root,\n      configPath: resolveMuonConfigPathForViteCommand(config, options),\n      pluginAccess: options.pluginAccess,\n      ...(config.command === \"serve\"\n        ? {\n            onConfigReadError: (error: unknown): void => {\n              config.logger.warn(\n                `muon project config will be ignored because it could not be read or parsed: ${getErrorMessage(error)}`,\n              );\n            },\n          }\n        : {}),\n    });\n    capabilityResolver =\n      resolvedPluginAccess.mode === \"validate\"\n        ? createMuonCapabilityModuleResolver(\n            config.root,\n            resolvedPluginAccess.capabilityOptions,\n          )\n        : undefined;\n    loadedCapabilityRuntimePluginConfig = undefined;\n  };\n\n  const refreshRuntimePluginConfig =\n    async (): Promise<MuonRuntimePluginConfig> => {\n      if (resolvedConfig === undefined) {\n        throw new Error(\"muon Vite plugin config was not resolved.\");\n      }\n      await refreshPluginAccess(resolvedConfig);\n      return getRuntimePluginConfig();\n    };\n\n  const plugin: Plugin = {\n    name: \"muon\",\n    config: (config): Omit<UserConfig, \"plugins\"> | null => {\n      if (config.server?.watch === null) {\n        return null;\n      }\n\n      return {\n        server: {\n          watch: createMuonWatchOptions(config.server?.watch),\n        },\n      };\n    },\n    configResolved: async (config): Promise<void> => {\n      resolvedConfig = config;\n      await refreshPluginAccess(config);\n    },\n    resolveId: (source, importer) =>\n      capabilityResolver?.resolveId(source, importer)?.id,\n    load: (id) => {\n      const source = capabilityResolver?.load(id);\n      if (source !== undefined) {\n        loadedCapabilityRuntimePluginConfig = getRuntimePluginConfig();\n      }\n      return source;\n    },\n    configureServer: async (server) => {\n      await startMuonViteBrowserBridge({\n        server,\n        pluginOptions: options,\n        refreshRuntimePluginConfig,\n        platform: process.platform,\n        architecture: process.arch,\n        environment: process.env,\n      });\n    },\n    closeBundle: async () => {\n      if (resolvedConfig === undefined || resolvedConfig.command !== \"build\") {\n        return;\n      }\n      if (\n        process.env[muonBuildSequenceSuppressViteBuildEnvironmentKey] === \"1\"\n      ) {\n        return;\n      }\n      if (options.build === false) {\n        return;\n      }\n\n      const buildOptions =\n        typeof options.build === \"object\" ? options.build : {};\n      const muonBuildOptions = createMuonBuildOptions(\n        resolvedConfig,\n        buildOptions,\n        getRuntimePluginConfig(),\n      );\n      const progressRenderer = createMuonProgressRenderer();\n      (muonBuildOptions as InternalMuonBuildOptions).progress =\n        progressRenderer.report;\n      try {\n        await buildMuonApp(muonBuildOptions);\n      } finally {\n        progressRenderer.flush();\n      }\n    },\n  };\n\n  return attachMuonVitePluginRuntimeState(\n    attachMuonVitePluginOptions(plugin, options),\n    {\n      getResolvedConfig: () => resolvedConfig,\n      getRuntimePluginConfig: () =>\n        resolvedConfig === undefined\n          ? undefined\n          : (loadedCapabilityRuntimePluginConfig ?? getRuntimePluginConfig()),\n    },\n  );\n};\n\nconst isMuonStagingWatchPath = (path: string): boolean => {\n  const normalized = path.replaceAll(\"\\\\\", \"/\");\n  return (\n    normalized === \".muon\" ||\n    normalized.startsWith(\".muon/\") ||\n    normalized.endsWith(\"/.muon\") ||\n    normalized.includes(\"/.muon/\")\n  );\n};\n\nconst mergeMuonWatchIgnored = (\n  ignored: WatchOptions[\"ignored\"] | undefined,\n): MuonWatchIgnored => {\n  const muonIgnored = (path: string): boolean => isMuonStagingWatchPath(path);\n  if (ignored === undefined) {\n    return muonIgnored;\n  }\n  return Array.isArray(ignored)\n    ? [...ignored, muonIgnored]\n    : [ignored, muonIgnored];\n};\n\nconst createMuonWatchOptions = (\n  watch: WatchOptions | undefined,\n): WatchOptions => ({\n  ...(watch ?? {}),\n  ignored: mergeMuonWatchIgnored(watch?.ignored),\n});\n\nconst createMuonBuildOptions = (\n  config: ResolvedConfig,\n  buildOptions: MuonViteBuildOptions,\n  runtimePluginConfig: MuonRuntimePluginConfig,\n): MuonBuildOptions => {\n  const outDir = isAbsolute(config.build.outDir)\n    ? config.build.outDir\n    : resolve(config.root, config.build.outDir);\n  const packagedAssetOptions = createVitePackagedAssetOptions(config.base);\n  const options: MuonBuildOptions = {\n    root: config.root,\n    assetSourcePath: outDir,\n    assetPrefix: packagedAssetOptions.assetPrefix,\n  };\n  if (packagedAssetOptions.browserStartPage !== undefined) {\n    options.browserStartPage = packagedAssetOptions.browserStartPage;\n  }\n\n  if (buildOptions.allTargets !== undefined) {\n    options.allTargets = buildOptions.allTargets;\n  }\n  if (buildOptions.targets !== undefined) {\n    options.targets = buildOptions.targets;\n  }\n  if (buildOptions.appName !== undefined) {\n    options.appName = buildOptions.appName;\n  }\n  if (buildOptions.appId !== undefined) {\n    options.appId = buildOptions.appId;\n  }\n  if (buildOptions.outputRoot !== undefined) {\n    options.outputRoot = buildOptions.outputRoot;\n  }\n  if (buildOptions.configPath !== undefined) {\n    options.configPath = buildOptions.configPath;\n  }\n  if (buildOptions.iconPath !== undefined) {\n    options.iconPath = buildOptions.iconPath;\n  }\n  if (buildOptions.distributionFiles !== undefined) {\n    options.distributionFiles = buildOptions.distributionFiles;\n  }\n  if (buildOptions.windowsResource !== undefined) {\n    options.windowsResource = buildOptions.windowsResource;\n  }\n  if (buildOptions.windowsCodeSigning !== undefined) {\n    options.windowsCodeSigning = buildOptions.windowsCodeSigning;\n  }\n  if (buildOptions.linuxDesktop !== undefined) {\n    options.linuxDesktop = buildOptions.linuxDesktop;\n  }\n  if (buildOptions.packageDirectory !== undefined) {\n    options.packageDirectory = buildOptions.packageDirectory;\n  }\n  if (buildOptions.assetSalt !== undefined) {\n    options.assetSalt = buildOptions.assetSalt;\n  }\n  options.runtimePluginConfig = runtimePluginConfig;\n\n  return options;\n};\n\nconst resolveMuonConfigPathForViteCommand = (\n  config: ResolvedConfig,\n  options: MuonVitePluginOptions,\n): string | undefined => {\n  if (config.command !== \"build\" || typeof options.build !== \"object\") {\n    return undefined;\n  }\n  return options.build.configPath;\n};\n\nconst resolveMuonRuntimePluginConfig = (\n  capabilityResolver: MuonCapabilityModuleResolver | undefined,\n  pluginAccess: MuonResolvedPluginAccessOptions | undefined,\n): MuonRuntimePluginConfig =>\n  pluginAccess?.mode === \"simple\"\n    ? { mode: \"simple\", ...pluginAccess.runtimeOverlay }\n    : {\n        ...(capabilityResolver?.getRuntimePluginConfig() ?? {\n          mode: \"validate\",\n          capabilities: [],\n        }),\n        ...(pluginAccess?.runtimeOverlay ?? {}),\n      };\n\nexport default muon;\n"],"x_google_ignoreList":[0],"mappings":"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"}