muon-ui 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/cli.cjs +368 -15
  2. package/dist/cli.cjs.map +1 -1
  3. package/dist/index.cjs +2 -2
  4. package/dist/index.mjs +2 -2
  5. package/dist/native/{linux64 → linux-amd64}/muon-bootstrap +0 -0
  6. package/dist/native/{linux64 → linux-amd64}/muon-prepare +0 -0
  7. package/dist/native/{linuxarm64 → linux-arm64}/muon-bootstrap +0 -0
  8. package/dist/native/{linuxarm64 → linux-arm64}/muon-prepare +0 -0
  9. package/dist/native/{linuxarm → linux-armhf}/muon-bootstrap +0 -0
  10. package/dist/native/{linuxarm → linux-armhf}/muon-prepare +0 -0
  11. package/dist/native/{windows64 → windows-amd64}/muon-bootstrap.exe +0 -0
  12. package/dist/native/{windows64 → windows-amd64}/muon-prepare.exe +0 -0
  13. package/dist/native/{windows32/muon-prepare.exe → windows-i686/muon-bootstrap.exe} +0 -0
  14. package/dist/native/{windows32/muon-bootstrap.exe → windows-i686/muon-prepare.exe} +0 -0
  15. package/dist/runtime/{linux64 → linux-amd64}/CREDITS.md +0 -97
  16. package/dist/runtime/{linux64 → linux-amd64}/libmuon-ui.so +0 -0
  17. package/dist/runtime/linux-amd64/muon-core +0 -0
  18. package/dist/runtime/{linuxarm → linux-arm64}/CREDITS.md +0 -97
  19. package/dist/runtime/linux-arm64/libmuon-ui.so +0 -0
  20. package/dist/runtime/linux-arm64/muon-core +0 -0
  21. package/dist/runtime/{windows32 → linux-armhf}/CREDITS.md +0 -97
  22. package/dist/runtime/{linuxarm → linux-armhf}/libmuon-ui.so +0 -0
  23. package/dist/runtime/linux-armhf/muon-core +0 -0
  24. package/dist/runtime/{linuxarm64 → windows-amd64}/CREDITS.md +0 -97
  25. package/dist/runtime/{windows64 → windows-amd64}/libcardio.dll +0 -0
  26. package/dist/runtime/windows-amd64/libmuon-ui.dll +0 -0
  27. package/dist/runtime/{windows64 → windows-amd64}/muon-core.exe +0 -0
  28. package/dist/runtime/windows-i686/CREDITS.md +266 -0
  29. package/dist/runtime/{windows32 → windows-i686}/libcardio.dll +0 -0
  30. package/dist/runtime/windows-i686/libmuon-ui.dll +0 -0
  31. package/dist/runtime/{windows32 → windows-i686}/muon-core.exe +0 -0
  32. package/dist/{vite-options-KNDVcH-e.cjs → vite-options-FFh0NWUa.cjs} +227 -136
  33. package/dist/vite-options-FFh0NWUa.cjs.map +1 -0
  34. package/dist/vite.cjs +23 -3
  35. package/dist/vite.cjs.map +1 -1
  36. package/dist/vite.mjs +233 -134
  37. package/dist/vite.mjs.map +1 -1
  38. package/images/muon-120.png +0 -0
  39. package/muon.d.ts +33 -0
  40. package/package.json +7 -7
  41. package/vite.d.ts +9 -4
  42. package/dist/runtime/linux64/muon-core +0 -0
  43. package/dist/runtime/linuxarm/muon-core +0 -0
  44. package/dist/runtime/linuxarm64/libmuon-ui.so +0 -0
  45. package/dist/runtime/linuxarm64/muon-core +0 -0
  46. package/dist/runtime/windows32/libmuon-ui.dll +0 -0
  47. package/dist/runtime/windows64/CREDITS.md +0 -363
  48. package/dist/runtime/windows64/libmuon-ui.dll +0 -0
  49. package/dist/vite-options-KNDVcH-e.cjs.map +0 -1
  50. /package/dist/runtime/{linux64 → linux-amd64}/libcardio.so +0 -0
  51. /package/dist/runtime/{linuxarm64 → linux-arm64}/libcardio.so +0 -0
  52. /package/dist/runtime/{linuxarm → linux-armhf}/libcardio.so +0 -0
  53. /package/dist/runtime/{windows64 → windows-amd64}/libgcc_s_seh-1.dll +0 -0
  54. /package/dist/runtime/{windows64 → windows-amd64}/libstdc++-6.dll +0 -0
  55. /package/dist/runtime/{windows32 → windows-i686}/libgcc_s_dw2-1.dll +0 -0
  56. /package/dist/runtime/{windows32 → windows-i686}/libstdc++-6.dll +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-options-FFh0NWUa.cjs","names":["module","exports"],"sources":["../src/targets.ts","../src/prepare.ts","../src/gitignore.ts","../../node_modules/json5/dist/index.js","../src/embed-config.ts","../src/build.ts","../src/vite-internals.ts","../src/vite-options.ts"],"sourcesContent":["// 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 name 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 * 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 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 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 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 * 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\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\";\n\n/**\n * Options used to invoke the native Muon prepare 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-prepare.\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 prepare process.\n */\n quiet: boolean;\n\n /**\n * Explicit native muon-prepare 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-prepare.\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 getPrepareExecutableName = (platform: NodeJS.Platform): string =>\n platform === \"win32\" ? \"muon-prepare.exe\" : \"muon-prepare\";\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 resolveMuonPrepareExecutable = async (\n options: MuonPrepareOptions,\n): Promise<string> => {\n const explicit =\n options.prepareExecutablePath ?? options.environment.MUON_PREPARE_PATH;\n if (explicit !== undefined && explicit !== \"\") {\n return explicit;\n }\n const executableName = getPrepareExecutableName(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.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\n/**\n * Invokes the native muon-prepare 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 executable = await resolveMuonPrepareExecutable(options);\n const args = createMuonPrepareArguments(options);\n const child = spawn(executable, 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 child.stdout.on(\"data\", (chunk: string) => {\n stdout += chunk;\n });\n child.stderr.on(\"data\", (chunk: string) => {\n stderr += chunk;\n if (!options.quiet) {\n process.stderr.write(chunk);\n }\n });\n const exitCode = await new Promise<number>((resolvePromise, reject) => {\n child.on(\"error\", reject);\n child.on(\"close\", (code) => {\n resolvePromise(code ?? 1);\n });\n });\n if (exitCode !== 0) {\n throw new Error(\n `muon-prepare failed with exit code ${exitCode}.\\n${stderr.trim()}`,\n );\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-prepare 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","// 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 ],\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","(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 { 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 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 (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 const slot = createEmptySlot();\n if (payload === undefined) {\n return slot;\n }\n\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 const slot = Buffer.alloc(muonBootstrapEmbeddedConfigSlotSize, 0);\n muonBootstrapEmbeddedConfigEmptySlotMarker.copy(slot, 0);\n if (payload === undefined) {\n return slot;\n }\n\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\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 { dirname, join, relative, resolve, sep } 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 normalizeMuonTarget,\n type MuonTarget,\n type MuonTargetDescriptor,\n} from \"./targets.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\ntype ZipEntry = {\n name: string;\n data: Buffer;\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 application identifier used for portable runtime state.\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 * Muon config path to embed.\n */\n configPath?: string;\n /**\n * Asset salt override for deterministic tests.\n *\n * @remarks Production builds should omit this option.\n */\n assetSalt?: Uint8Array;\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 name 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 * Generated asset archive metadata.\n */\n asset: MuonBuildAssetResult;\n /**\n * Config object embedded into muon-core and the app launcher.\n */\n embeddedConfig: JsonObject;\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 application identifier embedded for portable runtime state.\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 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 assetInput = resolveAssetInput(\n root,\n options.assetSourcePath,\n options.assetPrefix,\n buildConfig,\n );\n const salt = Buffer.from(\n options.assetSalt ?? randomBytes(assetSaltByteLength),\n );\n\n const results: MuonBuildTargetResult[] = [];\n\n for (const target of targets) {\n const result = await buildMuonTarget({\n packageDirectory,\n outputRoot,\n appName,\n appId,\n target,\n assetInput,\n sourceConfig: buildConfig.config,\n salt,\n });\n results.push(result);\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 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 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 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 outputRoot: string;\n appName: string;\n appId: string;\n target: MuonBuildTarget;\n assetInput: AssetInput;\n sourceConfig: JsonObject;\n salt: Buffer;\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 outputPath = join(\n input.outputRoot,\n descriptor.distributionDirectoryName,\n );\n const launcherPath = join(\n outputPath,\n getLauncherFileName(input.appName, descriptor),\n );\n const assetZipPath = join(outputPath, \"assets.zip\");\n\n await verifyTargetInputs({\n sourceRuntimePath,\n sourceBootstrapPath,\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\n const asset = await writeAssetArchive(\n input.assetInput,\n assetZipPath,\n input.salt,\n );\n const embeddedConfig = createEmbeddedConfig(\n input.sourceConfig,\n asset,\n input.appId,\n );\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 });\n\n return {\n target: input.target,\n distributionDirectoryName: descriptor.distributionDirectoryName,\n outputPath,\n launcherPath,\n asset,\n embeddedConfig,\n };\n};\n\nconst verifyTargetInputs = async (input: {\n sourceRuntimePath: string;\n sourceBootstrapPath: string;\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 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 writeAssetArchive = async (\n input: AssetInput,\n outputPath: string,\n salt: Buffer,\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)\n : sourceStats.isFile()\n ? await readFile(input.sourcePath)\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): 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(entries);\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): 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 return {\n ...sourceConfig,\n asset: {\n ...(sourceAsset ?? {}),\n sourcePath: appConfigSourcePath,\n signature: asset.signature,\n salt: asset.salt,\n },\n bootstrap: {\n ...(sourceBootstrap ?? {}),\n appId,\n },\n };\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 { spawn } from \"node:child_process\";\nimport { constants, writeFileSync } from \"node:fs\";\nimport {\n access,\n chmod,\n mkdtemp,\n readFile,\n rm,\n writeFile,\n} 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 { 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 platform: NodeJS.Platform;\n architecture: NodeJS.Architecture;\n environment: NodeJS.ProcessEnv;\n}\n\ninterface MuonRuntimePaths {\n temporaryDirectory: string;\n launchScriptPath: string;\n overrideConfigPath: string;\n projectConfigPath: string | undefined;\n muonExecutablePath: 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 plugin: {\n allow: string[];\n };\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 getLaunchScriptFileName = (platform: NodeJS.Platform): string =>\n platform === \"win32\" ? \"open-muon.cmd\" : \"open-muon.sh\";\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): 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 plugin: {\n allow: [`${origin}/**`],\n },\n },\n network: {\n allow: [`${origin}/**`, `${getWebSocketOrigin(startUrl)}/**`],\n },\n };\n};\n\nconst writeMuonOverrideConfig = (\n server: ViteDevServer,\n overrideConfigPath: string,\n enableDebugger: boolean,\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(createMuonOverrideConfig(startUrl, enableDebugger), null, 2)}\\n`,\n );\n return true;\n};\n\nconst createRuntimePaths = async (\n server: ViteDevServer,\n stagePath: string,\n platform: NodeJS.Platform,\n projectConfigPath: string | undefined,\n): Promise<MuonRuntimePaths> => {\n const temporaryDirectory = await mkdtemp(join(tmpdir(), \"muon-vite-\"));\n return {\n temporaryDirectory,\n launchScriptPath: join(\n temporaryDirectory,\n getLaunchScriptFileName(platform),\n ),\n overrideConfigPath: join(temporaryDirectory, \"muon.vite.json\"),\n projectConfigPath,\n muonExecutablePath: getMuonExecutablePath(stagePath, platform),\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 writeLaunchScript = async (\n paths: MuonRuntimePaths,\n platform: NodeJS.Platform,\n): Promise<void> => {\n await writeFile(\n paths.launchScriptPath,\n createMuonLaunchScript({\n muonExecutablePath: paths.muonExecutablePath,\n projectConfigPath: paths.projectConfigPath,\n overrideConfigPath: paths.overrideConfigPath,\n platform,\n }),\n );\n if (platform !== \"win32\") {\n await chmod(paths.launchScriptPath, 0o700);\n }\n};\n\nconst quoteWindowsCommandArgument = (value: string): string =>\n `\"${value.replaceAll('\"', '\\\\\"')}\"`;\n\nconst launchMuon = (\n paths: MuonRuntimePaths,\n platform: NodeJS.Platform,\n server: ViteDevServer,\n): void => {\n const command = platform === \"win32\" ? \"cmd.exe\" : paths.launchScriptPath;\n const args =\n platform === \"win32\"\n ? [\"/d\", \"/s\", \"/c\", quoteWindowsCommandArgument(paths.launchScriptPath)]\n : [];\n const child = spawn(command, args, {\n detached: true,\n stdio: \"ignore\",\n windowsHide: false,\n });\n child.once(\"error\", (error) => {\n server.config.logger.warn(`Muon startup failed: ${getErrorMessage(error)}`);\n });\n child.unref();\n};\n\nexport const startMuonViteBrowserBridge = async ({\n server,\n pluginOptions,\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 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-prepare did not return a staged runtime path.\");\n }\n const paths = await createRuntimePaths(\n server,\n preparedRuntime.stagePath,\n platform,\n await resolveProjectConfigPath(server),\n );\n await writeLaunchScript(paths, platform);\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 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 const configWritten = writeMuonOverrideConfig(\n server,\n paths.overrideConfigPath,\n pluginOptions.enableDebugger !== false,\n );\n if (configWritten) {\n launchMuon(paths, platform, server);\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 type { MuonVitePluginOptions } from \"./vite.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\ninterface MuonVitePluginWithOptions {\n [muonVitePluginOptionsSymbol]: MuonVitePluginOptions;\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 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.packageDirectory === undefined ||\n typeof value.packageDirectory === \"string\") &&\n (value.assetSalt === undefined || value.assetSalt instanceof Uint8Array)\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.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 * 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 * 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"],"x_google_ignoreList":[3],"mappings":"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"}
package/dist/vite.cjs CHANGED
@@ -1,15 +1,16 @@
1
1
  /*!
2
2
  * name: muon-ui
3
- * version: 0.6.0
3
+ * version: 0.7.0
4
4
  * description: A multi-platform GUI application framework that uses CEF as its backend
5
5
  * author: Kouji Matsui (@kekyo@mi.kekyo.net)
6
6
  * license: MIT
7
7
  * repository.url: https://github.com/kekyo/muon-ui.git
8
- * git.commit.hash: 44340328835f0d4ee860b444916971dfa03486ef
8
+ * git.commit.hash: fe80718aaa617c0c0ea5c816bbe38d22bf2e8402
9
9
  */
10
- const require_vite_options = require("./vite-options-KNDVcH-e.cjs");
10
+ const require_vite_options = require("./vite-options-FFh0NWUa.cjs");
11
11
  let node_path = require("node:path");
12
12
  //#region src/vite.ts
13
+ var suppressViteMuonBuildEnvironmentKey = "MUON_SUPPRESS_VITE_MUON_BUILD";
13
14
  /**
14
15
  * Creates a Vite plugin that launches Muon during Vite dev startup.
15
16
  *
@@ -20,6 +21,10 @@ var muon = (options = {}) => {
20
21
  let resolvedConfig = void 0;
21
22
  return require_vite_options.attachMuonVitePluginOptions({
22
23
  name: "muon",
24
+ config: (config) => {
25
+ if (config.server?.watch === null) return null;
26
+ return { server: { watch: createMuonWatchOptions(config.server?.watch) } };
27
+ },
23
28
  configResolved: (config) => {
24
29
  resolvedConfig = config;
25
30
  },
@@ -34,12 +39,26 @@ var muon = (options = {}) => {
34
39
  },
35
40
  closeBundle: async () => {
36
41
  if (resolvedConfig === void 0 || resolvedConfig.command !== "build") return;
42
+ if (process.env[suppressViteMuonBuildEnvironmentKey] === "1") return;
37
43
  if (options.build === false) return;
38
44
  const buildOptions = typeof options.build === "object" ? options.build : {};
39
45
  await require_vite_options.buildMuonApp(createMuonBuildOptions(resolvedConfig, buildOptions));
40
46
  }
41
47
  }, options);
42
48
  };
49
+ var isMuonStagingWatchPath = (path) => {
50
+ const normalized = path.replaceAll("\\", "/");
51
+ return normalized === ".muon" || normalized.startsWith(".muon/") || normalized.endsWith("/.muon") || normalized.includes("/.muon/");
52
+ };
53
+ var mergeMuonWatchIgnored = (ignored) => {
54
+ const muonIgnored = (path) => isMuonStagingWatchPath(path);
55
+ if (ignored === void 0) return muonIgnored;
56
+ return Array.isArray(ignored) ? [...ignored, muonIgnored] : [ignored, muonIgnored];
57
+ };
58
+ var createMuonWatchOptions = (watch) => ({
59
+ ...watch ?? {},
60
+ ignored: mergeMuonWatchIgnored(watch?.ignored)
61
+ });
43
62
  var createMuonBuildOptions = (config, buildOptions) => {
44
63
  const outDir = (0, node_path.isAbsolute)(config.build.outDir) ? config.build.outDir : (0, node_path.resolve)(config.root, config.build.outDir);
45
64
  const options = {
@@ -50,6 +69,7 @@ var createMuonBuildOptions = (config, buildOptions) => {
50
69
  if (buildOptions.allTargets !== void 0) options.allTargets = buildOptions.allTargets;
51
70
  if (buildOptions.targets !== void 0) options.targets = buildOptions.targets;
52
71
  if (buildOptions.appName !== void 0) options.appName = buildOptions.appName;
72
+ if (buildOptions.appId !== void 0) options.appId = buildOptions.appId;
53
73
  if (buildOptions.outputRoot !== void 0) options.outputRoot = buildOptions.outputRoot;
54
74
  if (buildOptions.configPath !== void 0) options.configPath = buildOptions.configPath;
55
75
  if (buildOptions.packageDirectory !== void 0) options.packageDirectory = buildOptions.packageDirectory;
package/dist/vite.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"vite.cjs","names":[],"sources":["../src/vite.ts"],"sourcesContent":["// 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 } from \"vite\";\nimport type { ResolvedConfig } from \"vite\";\nimport { isAbsolute, resolve } from \"node:path\";\n\nimport { buildMuonApp, type MuonBuildOptions } from \"./build.js\";\nimport { startMuonViteBrowserBridge } from \"./vite-internals.js\";\nimport { attachMuonVitePluginOptions } from \"./vite-options.js\";\n\n/**\n * Options for generating Muon app distributions after Vite build.\n */\nexport interface MuonViteBuildOptions {\n /**\n * Target aliases or internal target names to build.\n */\n targets?: readonly string[];\n\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 /**\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 /**\n * Parent directory that receives dist-linux-amd64/ style outputs.\n */\n outputRoot?: string;\n\n /**\n * Muon config path to embed.\n */\n configPath?: string;\n\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 /**\n * Asset salt override for deterministic tests.\n *\n * @remarks Production builds should omit this option.\n */\n assetSalt?: Uint8Array;\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/<target> is used.\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-prepare downloads and caches the tested CEF artifact from muonPath.\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. Defaults to\n * .muon/<target>.\n */\n stagePath?: string;\n\n /**\n * Launch Muon automatically during Vite dev startup.\n *\n * @remarks Defaults to true. This is independent from Vite's server.open\n * browser startup option. Vite build ignores this option.\n */\n open?: boolean;\n\n /**\n * Enable the Muon debugger defaults during Vite dev startup.\n *\n * @remarks Defaults to true. When enabled, the generated development config\n * enables CDP and binds DevTools to F12. Vite build ignores this option.\n */\n enableDebugger?: boolean;\n\n /**\n * Build app distributions from Vite output.\n *\n * @remarks Defaults to true during Vite build. Set false to disable the build\n * hook while keeping the development bridge enabled.\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 */\nconst muon = (options: MuonVitePluginOptions = {}): Plugin => {\n let resolvedConfig: ResolvedConfig | undefined = undefined;\n\n const plugin: Plugin = {\n name: \"muon\",\n configResolved: (config) => {\n resolvedConfig = config;\n },\n configureServer: async (server) => {\n await startMuonViteBrowserBridge({\n server,\n pluginOptions: options,\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 (options.build === false) {\n return;\n }\n\n const buildOptions =\n typeof options.build === \"object\" ? options.build : {};\n await buildMuonApp(createMuonBuildOptions(resolvedConfig, buildOptions));\n },\n };\n\n return attachMuonVitePluginOptions(plugin, options);\n};\n\nconst createMuonBuildOptions = (\n config: ResolvedConfig,\n buildOptions: MuonViteBuildOptions,\n): MuonBuildOptions => {\n const outDir = isAbsolute(config.build.outDir)\n ? config.build.outDir\n : resolve(config.root, config.build.outDir);\n const options: MuonBuildOptions = {\n root: config.root,\n assetSourcePath: outDir,\n assetPrefix: \"main\",\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.outputRoot !== undefined) {\n options.outputRoot = buildOptions.outputRoot;\n }\n if (buildOptions.configPath !== undefined) {\n options.configPath = buildOptions.configPath;\n }\n if (buildOptions.packageDirectory !== undefined) {\n options.packageDirectory = buildOptions.packageDirectory;\n }\n if (buildOptions.assetSalt !== undefined) {\n options.assetSalt = buildOptions.assetSalt;\n }\n\n return options;\n};\n\nexport default muon;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAyHA,IAAM,QAAQ,UAAiC,CAAC,MAAc;CAC5D,IAAI,iBAA6C,KAAA;CA8BjD,OAAO,qBAAA,4BAA4B;EA3BjC,MAAM;EACN,iBAAiB,WAAW;GAC1B,iBAAiB;EACnB;EACA,iBAAiB,OAAO,WAAW;GACjC,MAAM,qBAAA,2BAA2B;IAC/B;IACA,eAAe;IACf,UAAU,QAAQ;IAClB,cAAc,QAAQ;IACtB,aAAa,QAAQ;GACvB,CAAC;EACH;EACA,aAAa,YAAY;GACvB,IAAI,mBAAmB,KAAA,KAAa,eAAe,YAAY,SAC7D;GAEF,IAAI,QAAQ,UAAU,OACpB;GAGF,MAAM,eACJ,OAAO,QAAQ,UAAU,WAAW,QAAQ,QAAQ,CAAC;GACvD,MAAM,qBAAA,aAAa,uBAAuB,gBAAgB,YAAY,CAAC;EACzE;CAGiC,GAAQ,OAAO;AACpD;AAEA,IAAM,0BACJ,QACA,iBACqB;CACrB,MAAM,UAAA,GAAA,UAAA,YAAoB,OAAO,MAAM,MAAM,IACzC,OAAO,MAAM,UAAA,GAAA,UAAA,SACL,OAAO,MAAM,OAAO,MAAM,MAAM;CAC5C,MAAM,UAA4B;EAChC,MAAM,OAAO;EACb,iBAAiB;EACjB,aAAa;CACf;CAEA,IAAI,aAAa,eAAe,KAAA,GAC9B,QAAQ,aAAa,aAAa;CAEpC,IAAI,aAAa,YAAY,KAAA,GAC3B,QAAQ,UAAU,aAAa;CAEjC,IAAI,aAAa,YAAY,KAAA,GAC3B,QAAQ,UAAU,aAAa;CAEjC,IAAI,aAAa,eAAe,KAAA,GAC9B,QAAQ,aAAa,aAAa;CAEpC,IAAI,aAAa,eAAe,KAAA,GAC9B,QAAQ,aAAa,aAAa;CAEpC,IAAI,aAAa,qBAAqB,KAAA,GACpC,QAAQ,mBAAmB,aAAa;CAE1C,IAAI,aAAa,cAAc,KAAA,GAC7B,QAAQ,YAAY,aAAa;CAGnC,OAAO;AACT"}
1
+ {"version":3,"file":"vite.cjs","names":[],"sources":["../src/vite.ts"],"sourcesContent":["// 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 { startMuonViteBrowserBridge } from \"./vite-internals.js\";\nimport { attachMuonVitePluginOptions } from \"./vite-options.js\";\n\nconst suppressViteMuonBuildEnvironmentKey = \"MUON_SUPPRESS_VITE_MUON_BUILD\";\n\ntype MuonWatchIgnored = NonNullable<WatchOptions[\"ignored\"]>;\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 targets?: readonly string[];\n\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 /**\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 /**\n * Stable application identifier used for portable runtime state.\n */\n appId?: string;\n\n /**\n * Parent directory that receives dist-muon-linux-amd64/ style outputs.\n */\n outputRoot?: string;\n\n /**\n * Muon config path to embed.\n */\n configPath?: string;\n\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 /**\n * Asset salt override for deterministic tests.\n *\n * @remarks Production builds should omit this option.\n */\n assetSalt?: Uint8Array;\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 */\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-prepare downloads and caches the tested CEF artifact from muonPath.\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. Defaults to\n * .muon/<public-target>.\n */\n stagePath?: string;\n\n /**\n * Launch Muon automatically during Vite dev startup.\n *\n * @remarks Defaults to true. This is independent from Vite's server.open\n * browser startup option. Vite build ignores this option.\n */\n open?: boolean;\n\n /**\n * Enable the Muon debugger defaults during Vite dev startup.\n *\n * @remarks Defaults to true. When enabled, the generated development config\n * enables CDP and binds DevTools to F12. Vite build ignores this option.\n */\n enableDebugger?: boolean;\n\n /**\n * Build app distributions from Vite output.\n *\n * @remarks Defaults to true during Vite build. Set false to disable the build\n * hook while keeping the development bridge enabled.\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 */\nconst muon = (options: MuonVitePluginOptions = {}): Plugin => {\n let resolvedConfig: ResolvedConfig | undefined = undefined;\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: (config) => {\n resolvedConfig = config;\n },\n configureServer: async (server) => {\n await startMuonViteBrowserBridge({\n server,\n pluginOptions: options,\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 (process.env[suppressViteMuonBuildEnvironmentKey] === \"1\") {\n return;\n }\n if (options.build === false) {\n return;\n }\n\n const buildOptions =\n typeof options.build === \"object\" ? options.build : {};\n await buildMuonApp(createMuonBuildOptions(resolvedConfig, buildOptions));\n },\n };\n\n return attachMuonVitePluginOptions(plugin, options);\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): MuonBuildOptions => {\n const outDir = isAbsolute(config.build.outDir)\n ? config.build.outDir\n : resolve(config.root, config.build.outDir);\n const options: MuonBuildOptions = {\n root: config.root,\n assetSourcePath: outDir,\n assetPrefix: \"main\",\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.packageDirectory !== undefined) {\n options.packageDirectory = buildOptions.packageDirectory;\n }\n if (buildOptions.assetSalt !== undefined) {\n options.assetSalt = buildOptions.assetSalt;\n }\n\n return options;\n};\n\nexport default muon;\n"],"mappings":";;;;;;;;;;;;AAYA,IAAM,sCAAsC;;;;;;;AAqH5C,IAAM,QAAQ,UAAiC,CAAC,MAAc;CAC5D,IAAI,iBAA6C,KAAA;CA4CjD,OAAO,qBAAA,4BAA4B;EAzCjC,MAAM;EACN,SAAS,WAA+C;GACtD,IAAI,OAAO,QAAQ,UAAU,MAC3B,OAAO;GAGT,OAAO,EACL,QAAQ,EACN,OAAO,uBAAuB,OAAO,QAAQ,KAAK,EACpD,EACF;EACF;EACA,iBAAiB,WAAW;GAC1B,iBAAiB;EACnB;EACA,iBAAiB,OAAO,WAAW;GACjC,MAAM,qBAAA,2BAA2B;IAC/B;IACA,eAAe;IACf,UAAU,QAAQ;IAClB,cAAc,QAAQ;IACtB,aAAa,QAAQ;GACvB,CAAC;EACH;EACA,aAAa,YAAY;GACvB,IAAI,mBAAmB,KAAA,KAAa,eAAe,YAAY,SAC7D;GAEF,IAAI,QAAQ,IAAI,yCAAyC,KACvD;GAEF,IAAI,QAAQ,UAAU,OACpB;GAGF,MAAM,eACJ,OAAO,QAAQ,UAAU,WAAW,QAAQ,QAAQ,CAAC;GACvD,MAAM,qBAAA,aAAa,uBAAuB,gBAAgB,YAAY,CAAC;EACzE;CAGiC,GAAQ,OAAO;AACpD;AAEA,IAAM,0BAA0B,SAA0B;CACxD,MAAM,aAAa,KAAK,WAAW,MAAM,GAAG;CAC5C,OACE,eAAe,WACf,WAAW,WAAW,QAAQ,KAC9B,WAAW,SAAS,QAAQ,KAC5B,WAAW,SAAS,SAAS;AAEjC;AAEA,IAAM,yBACJ,YACqB;CACrB,MAAM,eAAe,SAA0B,uBAAuB,IAAI;CAC1E,IAAI,YAAY,KAAA,GACd,OAAO;CAET,OAAO,MAAM,QAAQ,OAAO,IACxB,CAAC,GAAG,SAAS,WAAW,IACxB,CAAC,SAAS,WAAW;AAC3B;AAEA,IAAM,0BACJ,WACkB;CAClB,GAAI,SAAS,CAAC;CACd,SAAS,sBAAsB,OAAO,OAAO;AAC/C;AAEA,IAAM,0BACJ,QACA,iBACqB;CACrB,MAAM,UAAA,GAAA,UAAA,YAAoB,OAAO,MAAM,MAAM,IACzC,OAAO,MAAM,UAAA,GAAA,UAAA,SACL,OAAO,MAAM,OAAO,MAAM,MAAM;CAC5C,MAAM,UAA4B;EAChC,MAAM,OAAO;EACb,iBAAiB;EACjB,aAAa;CACf;CAEA,IAAI,aAAa,eAAe,KAAA,GAC9B,QAAQ,aAAa,aAAa;CAEpC,IAAI,aAAa,YAAY,KAAA,GAC3B,QAAQ,UAAU,aAAa;CAEjC,IAAI,aAAa,YAAY,KAAA,GAC3B,QAAQ,UAAU,aAAa;CAEjC,IAAI,aAAa,UAAU,KAAA,GACzB,QAAQ,QAAQ,aAAa;CAE/B,IAAI,aAAa,eAAe,KAAA,GAC9B,QAAQ,aAAa,aAAa;CAEpC,IAAI,aAAa,eAAe,KAAA,GAC9B,QAAQ,aAAa,aAAa;CAEpC,IAAI,aAAa,qBAAqB,KAAA,GACpC,QAAQ,mBAAmB,aAAa;CAE1C,IAAI,aAAa,cAAc,KAAA,GAC7B,QAAQ,YAAY,aAAa;CAGnC,OAAO;AACT"}