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