{"version":3,"file":"cli.cjs","names":[],"sources":["../src/dev.ts","../src/pack.ts","../src/generated/packageMetadata.ts","../src/cli.ts"],"sourcesContent":["// muon - Multi-platform GUI application framework that uses CEF as its backend\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/muon\n\nimport { spawn } from \"node:child_process\";\nimport { constants } from \"node:fs\";\nimport {\n  access,\n  cp,\n  mkdir,\n  readFile,\n  rm,\n  stat,\n  writeFile,\n} from \"node:fs/promises\";\nimport { dirname, isAbsolute, join, resolve } from \"node:path\";\n\nimport { parse } from \"json5\";\nimport type { InlineConfig, Plugin, UserConfig } from \"vite\";\n\nimport {\n  loadMuonBuildSequenceProject,\n  muonBuildSequenceSuppressViteBuildEnvironmentKey,\n  resolveMuonViteBuildOptions,\n  type MuonBuildSequenceProject,\n} from \"./build-sequence.js\";\nimport type { MuonRuntimePluginConfig } from \"./capability.js\";\nimport { ensureMuonGitignoreEntry } from \"./gitignore.js\";\nimport { getDefaultMuonPrepareTarget, runMuonPrepare } from \"./prepare.js\";\nimport {\n  getMuonExecutablePath,\n  resolveMuonRuntimePath,\n} from \"./vite-internals.js\";\nimport {\n  flattenVitePluginOptions,\n  getMuonVitePluginOptions,\n  getMuonVitePluginRuntimeState,\n  type MuonVitePluginRuntimeState,\n} from \"./vite-options.js\";\nimport { createVitePackagedAssetOptions } from \"./vite-assets.js\";\nimport type { MuonVitePluginOptions } from \"./vite.js\";\n\nconst muonRecycleExitCode = 88;\n\ntype JsonObject = Record<string, unknown>;\n\ninterface LoadedViteMuonOptions {\n  root: string;\n  pluginOptions: MuonVitePluginOptions | undefined;\n}\n\ninterface PreparedViteRunAssets {\n  root: string;\n  pluginOptions: MuonVitePluginOptions;\n  configPath: string | undefined;\n  assetSourcePath: string;\n  browserStartPage: string | undefined;\n  runtimePluginConfig: MuonRuntimePluginConfig;\n}\n\ninterface ProjectConfigResolution {\n  configPath: string | undefined;\n  config: JsonObject | undefined;\n}\n\ninterface MuonDevOverrideConfig {\n  asset?: {\n    sourcePath: string;\n  };\n  cdp?: {\n    enable: true;\n  };\n  browser?: {\n    startPage?: string;\n    keybind?: {\n      devtools: \"f12\";\n      recycle: \"ctrl+f12\";\n    };\n  };\n  plugin?: MuonRuntimePluginConfig;\n}\n\n/**\n * Options for launching muon directly against local development assets.\n */\nexport interface MuonDevOptions {\n  /**\n   * Directory used as the project root.\n   */\n  root?: string;\n\n  /**\n   * Directory containing muon-core runtime files such as muon-core and plugins.\n   */\n  muonPath?: string;\n\n  /**\n   * Directory containing CEF files, or a CEF archive root with Release/Resources.\n   */\n  cefPath?: string;\n\n  /**\n   * Runtime staging directory used for development startup.\n   */\n  stagePath?: string;\n\n  /**\n   * muon config path passed before the generated development override.\n   */\n  configPath?: string;\n\n  /**\n   * Local development asset directory.\n   */\n  assetSourcePath?: string;\n\n  /**\n   * Enable the muon debugger defaults during development startup.\n   */\n  enableDebugger?: boolean;\n\n  /**\n   * Platform used for runtime target resolution.\n   *\n   * @remarks This is injectable for tests. Production code uses process.platform.\n   */\n  platform?: NodeJS.Platform;\n\n  /**\n   * Architecture used for runtime target resolution.\n   *\n   * @remarks This is injectable for tests. Production code uses process.arch.\n   */\n  architecture?: NodeJS.Architecture;\n\n  /**\n   * Environment used for child processes.\n   */\n  environment?: NodeJS.ProcessEnv;\n\n  /**\n   * Suppress native builder progress messages.\n   */\n  quietPrepare?: boolean;\n}\n\n/**\n * Result returned after the muon development process exits.\n */\nexport interface MuonDevResult {\n  /**\n   * Absolute project root used for development startup.\n   */\n  root: string;\n\n  /**\n   * muon runtime target used for prepare.\n   */\n  target: 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   * Directory containing the prepared muon runtime.\n   */\n  stagePath: string;\n\n  /**\n   * Prepared muon-core executable path.\n   */\n  muonExecutablePath: string;\n\n  /**\n   * Project config path passed before the generated development override.\n   */\n  projectConfigPath?: string;\n\n  /**\n   * Generated development override config path.\n   */\n  overrideConfigPath: string;\n\n  /**\n   * Effective local asset source path.\n   */\n  assetSourcePath: string;\n\n  /**\n   * Exit code returned by the muon process.\n   */\n  exitCode: number;\n}\n\nconst defaultProjectConfigFileNames = [\"muon.json5\", \"muon.jsonc\", \"muon.json\"];\n\nconst resolveFromRoot = (root: string, path: string): string =>\n  isAbsolute(path) ? path : resolve(root, path);\n\nconst isJsonObject = (value: unknown): value is JsonObject =>\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 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 directoryExists = async (path: string): Promise<boolean> => {\n  try {\n    const stats = await stat(path);\n    return stats.isDirectory();\n  } catch {\n    return false;\n  }\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 loadViteMuonOptions = async (\n  cwd: string,\n): Promise<LoadedViteMuonOptions> => {\n  let vite: typeof import(\"vite\");\n  try {\n    vite = await import(\"vite\");\n  } catch (error) {\n    if (isMissingVitePackageError(error)) {\n      return {\n        root: resolve(cwd),\n        pluginOptions: undefined,\n      };\n    }\n    throw error;\n  }\n\n  const loaded = await vite.loadConfigFromFile(\n    {\n      command: \"serve\",\n      mode: \"development\",\n      isPreview: false,\n      isSsrBuild: false,\n    },\n    undefined,\n    cwd,\n    \"silent\",\n  );\n  if (loaded === null) {\n    return {\n      root: resolve(cwd),\n      pluginOptions: undefined,\n    };\n  }\n\n  const config = loaded.config as UserConfig;\n  const root =\n    typeof config.root === \"string\" ? resolve(cwd, config.root) : resolve(cwd);\n  const plugins = await flattenVitePluginOptions(config.plugins);\n  const muonPlugins = plugins\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 {\n    root,\n    pluginOptions: muonPlugins[0],\n  };\n};\n\nconst getRuntimePluginConfigFromViteBuild = async (\n  root: string,\n): Promise<MuonRuntimePluginConfig> => {\n  const vite = await import(\"vite\");\n  let resolvedRuntimeStates: readonly MuonVitePluginRuntimeState[] = [];\n  const inspector: Plugin = {\n    name: \"muon-run-vite-build-inspector\",\n    enforce: \"post\",\n    configResolved: (config): void => {\n      const runtimeStates = config.plugins\n        .map((plugin) => getMuonVitePluginRuntimeState(plugin))\n        .filter(\n          (runtimeState): runtimeState is MuonVitePluginRuntimeState =>\n            runtimeState !== undefined,\n        );\n      if (runtimeStates.length > 1) {\n        throw new Error(\n          \"Multiple muon() plugin definitions were found in vite.config.*.\",\n        );\n      }\n      resolvedRuntimeStates = runtimeStates;\n    },\n  };\n  const previous =\n    process.env[muonBuildSequenceSuppressViteBuildEnvironmentKey];\n  process.env[muonBuildSequenceSuppressViteBuildEnvironmentKey] = \"1\";\n  try {\n    await vite.build({\n      root,\n      logLevel: \"silent\",\n      plugins: [inspector],\n    } satisfies InlineConfig);\n  } finally {\n    if (previous === undefined) {\n      delete process.env[muonBuildSequenceSuppressViteBuildEnvironmentKey];\n    } else {\n      process.env[muonBuildSequenceSuppressViteBuildEnvironmentKey] = previous;\n    }\n  }\n\n  const runtimeState = resolvedRuntimeStates[0];\n  const runtimePluginConfig = runtimeState?.getRuntimePluginConfig();\n  if (runtimePluginConfig === undefined) {\n    throw new Error(\"muon Vite plugin runtime config was not resolved.\");\n  }\n  return runtimePluginConfig;\n};\n\nconst copyViteOutputAsRunAssets = async (\n  project: MuonBuildSequenceProject,\n  assetSourcePath: string,\n  assetPrefix: string,\n): Promise<void> => {\n  if (project.viteOutputDirectory === undefined) {\n    throw new Error(\"Vite output directory could not be resolved.\");\n  }\n\n  await assertDevelopmentAssetDirectory(project.viteOutputDirectory);\n  const destinationPath = join(assetSourcePath, ...assetPrefix.split(\"/\"));\n  await mkdir(dirname(destinationPath), { recursive: true });\n  await cp(project.viteOutputDirectory, destinationPath, {\n    recursive: true,\n  });\n};\n\nconst prepareViteRunAssets = async (\n  cwd: string,\n): Promise<PreparedViteRunAssets | undefined> => {\n  const project = await loadMuonBuildSequenceProject(cwd);\n  if (project.pluginOptions === undefined) {\n    return undefined;\n  }\n\n  const buildOptions = resolveMuonViteBuildOptions(project.pluginOptions);\n  const packagedAssetOptions = createVitePackagedAssetOptions(\n    project.viteBase ?? \"/\",\n  );\n  const assetSourcePath = join(project.root, \".muon\", \"run\", \"assets\");\n\n  await rm(assetSourcePath, { recursive: true, force: true });\n  const runtimePluginConfig = await getRuntimePluginConfigFromViteBuild(\n    project.viteBuildRoot,\n  );\n  await copyViteOutputAsRunAssets(\n    project,\n    assetSourcePath,\n    packagedAssetOptions.assetPrefix,\n  );\n\n  return {\n    root: project.root,\n    pluginOptions: project.pluginOptions,\n    configPath: buildOptions.configPath,\n    assetSourcePath,\n    browserStartPage: packagedAssetOptions.browserStartPage,\n    runtimePluginConfig,\n  };\n};\n\nconst resolveProjectConfigPath = async (\n  root: string,\n  configPath: string | undefined,\n): Promise<string | undefined> => {\n  if (configPath !== undefined) {\n    const resolvedPath = resolveFromRoot(root, configPath);\n    if (!(await fileExists(resolvedPath))) {\n      throw new Error(`muon config file does not exist: ${resolvedPath}`);\n    }\n    return resolvedPath;\n  }\n\n  for (const fileName of defaultProjectConfigFileNames) {\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 resolveProjectConfig = async (\n  root: string,\n  configPath: string | undefined,\n): Promise<ProjectConfigResolution> => {\n  const resolvedConfigPath = await resolveProjectConfigPath(root, configPath);\n  if (resolvedConfigPath === undefined) {\n    return {\n      configPath: undefined,\n      config: undefined,\n    };\n  }\n\n  return {\n    configPath: resolvedConfigPath,\n    config: await readJsonObjectFile(resolvedConfigPath, \"muon config\"),\n  };\n};\n\nconst readConfigAssetSourcePath = (\n  config: JsonObject | undefined,\n): string | undefined => {\n  if (config === undefined) {\n    return undefined;\n  }\n\n  const asset = config.asset;\n  if (asset === undefined) {\n    return undefined;\n  }\n  if (!isJsonObject(asset)) {\n    throw new Error(\"muon config asset must be an object when present.\");\n  }\n\n  const sourcePath = asset.sourcePath;\n  if (sourcePath === undefined) {\n    return undefined;\n  }\n  if (typeof sourcePath !== \"string\") {\n    throw new Error(\"muon config asset.sourcePath must be a string.\");\n  }\n  if (sourcePath.trim().length === 0) {\n    throw new Error(\"muon config asset.sourcePath must not be empty.\");\n  }\n  return sourcePath;\n};\n\nconst hasConfigBrowserStartPage = (config: JsonObject | undefined): boolean => {\n  if (config === undefined) {\n    return false;\n  }\n\n  const browser = config.browser;\n  return isJsonObject(browser) && browser.startPage !== undefined;\n};\n\nconst assertDevelopmentAssetDirectory = async (\n  assetSourcePath: string,\n): Promise<void> => {\n  if (await directoryExists(assetSourcePath)) {\n    return;\n  }\n\n  try {\n    await access(assetSourcePath, constants.F_OK);\n  } catch {\n    throw new Error(`muon run asset source does not exist: ${assetSourcePath}`);\n  }\n\n  throw new Error(\n    `muon run asset source must be a directory: ${assetSourcePath}`,\n  );\n};\n\nconst resolveAssetSource = async (\n  root: string,\n  assetSourcePath: string | undefined,\n  projectConfig: ProjectConfigResolution,\n): Promise<{\n  assetSourcePath: string;\n  overrideAssetSourcePath: string | undefined;\n}> => {\n  const configuredAssetSourcePath = readConfigAssetSourcePath(\n    projectConfig.config,\n  );\n  if (assetSourcePath !== undefined) {\n    const resolvedPath = resolveFromRoot(root, assetSourcePath);\n    await assertDevelopmentAssetDirectory(resolvedPath);\n    return {\n      assetSourcePath: resolvedPath,\n      overrideAssetSourcePath: resolvedPath,\n    };\n  }\n\n  if (\n    configuredAssetSourcePath !== undefined &&\n    projectConfig.configPath !== undefined\n  ) {\n    return {\n      assetSourcePath: resolve(\n        dirname(projectConfig.configPath),\n        configuredAssetSourcePath,\n      ),\n      overrideAssetSourcePath: undefined,\n    };\n  }\n\n  const defaultAssetSourcePath = resolve(root, \"assets\");\n  await assertDevelopmentAssetDirectory(defaultAssetSourcePath);\n  return {\n    assetSourcePath: defaultAssetSourcePath,\n    overrideAssetSourcePath: defaultAssetSourcePath,\n  };\n};\n\nconst createMuonDevOverrideConfig = (\n  assetSourcePath: string | undefined,\n  enableDebugger: boolean,\n  browserStartPage: string | undefined,\n  runtimePluginConfig: MuonRuntimePluginConfig | undefined,\n): MuonDevOverrideConfig => {\n  const browser =\n    browserStartPage === undefined && !enableDebugger\n      ? undefined\n      : {\n          ...(browserStartPage === undefined\n            ? {}\n            : { startPage: browserStartPage }),\n          ...(enableDebugger\n            ? {\n                keybind: {\n                  devtools: \"f12\" as const,\n                  recycle: \"ctrl+f12\" as const,\n                },\n              }\n            : {}),\n        };\n\n  return {\n    ...(assetSourcePath === undefined\n      ? {}\n      : {\n          asset: {\n            sourcePath: assetSourcePath,\n          },\n        }),\n    ...(enableDebugger\n      ? {\n          cdp: {\n            enable: true,\n          },\n        }\n      : {}),\n    ...(browser === undefined ? {} : { browser }),\n    ...(runtimePluginConfig === undefined\n      ? {}\n      : { plugin: runtimePluginConfig }),\n  };\n};\n\nconst writeMuonDevOverrideConfig = async (\n  overrideConfigPath: string,\n  overrideConfig: MuonDevOverrideConfig,\n): Promise<void> => {\n  await mkdir(dirname(overrideConfigPath), { recursive: true });\n  await writeFile(\n    overrideConfigPath,\n    `${JSON.stringify(overrideConfig, null, 2)}\\n`,\n  );\n};\n\nconst runMuonExecutable = async (\n  muonExecutablePath: string,\n  configPaths: readonly string[],\n  environment: NodeJS.ProcessEnv,\n): Promise<number> => {\n  const args = configPaths.flatMap((configPath) => [\"-c\", configPath]);\n  const child = spawn(muonExecutablePath, args, {\n    cwd: dirname(muonExecutablePath),\n    env: environment,\n    stdio: [\"ignore\", \"inherit\", \"inherit\"],\n  });\n\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};\n\nconst runMuonDevOnce = async (\n  options: MuonDevOptions,\n  cwd: string,\n): Promise<MuonDevResult> => {\n  const preparedViteAssets =\n    options.assetSourcePath === undefined\n      ? await prepareViteRunAssets(cwd)\n      : undefined;\n  const loadedViteOptions =\n    preparedViteAssets === undefined\n      ? await loadViteMuonOptions(cwd)\n      : {\n          root: preparedViteAssets.root,\n          pluginOptions: preparedViteAssets.pluginOptions,\n        };\n  const root = loadedViteOptions.root;\n  const pluginOptions = loadedViteOptions.pluginOptions;\n  const platform = options.platform ?? process.platform;\n  const architecture = options.architecture ?? process.arch;\n  const environment = options.environment ?? process.env;\n  const target = getDefaultMuonPrepareTarget(platform, architecture);\n  const muonPath = resolveMuonRuntimePath({\n    root,\n    target,\n    muonPath: options.muonPath ?? pluginOptions?.muonPath,\n  });\n  const cefPath =\n    options.cefPath !== undefined\n      ? resolveFromRoot(root, options.cefPath)\n      : pluginOptions?.cefPath === undefined\n        ? undefined\n        : resolveFromRoot(root, pluginOptions.cefPath);\n  const stagePath =\n    options.stagePath !== undefined\n      ? resolveFromRoot(root, options.stagePath)\n      : pluginOptions?.stagePath === undefined\n        ? resolve(root, \".muon\", target)\n        : resolveFromRoot(root, pluginOptions.stagePath);\n  const enableDebugger =\n    options.enableDebugger ?? pluginOptions?.enableDebugger ?? true;\n  const projectConfig = await resolveProjectConfig(\n    root,\n    options.configPath ?? preparedViteAssets?.configPath,\n  );\n  const asset =\n    preparedViteAssets === undefined\n      ? await resolveAssetSource(root, options.assetSourcePath, projectConfig)\n      : {\n          assetSourcePath: preparedViteAssets.assetSourcePath,\n          overrideAssetSourcePath: preparedViteAssets.assetSourcePath,\n        };\n  const browserStartPage =\n    preparedViteAssets?.browserStartPage !== undefined &&\n    !hasConfigBrowserStartPage(projectConfig.config)\n      ? preparedViteAssets.browserStartPage\n      : undefined;\n  const overrideConfigPath = join(root, \".muon\", \"run\", \"muon.run.json\");\n\n  await ensureMuonGitignoreEntry(root);\n\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: options.quietPrepare === true,\n    prepareExecutablePath: undefined,\n    environment,\n    cwd: root,\n  });\n  if (preparedRuntime.stagePath === undefined) {\n    throw new Error(\"muon-builder did not return a staged runtime path.\");\n  }\n\n  await writeMuonDevOverrideConfig(\n    overrideConfigPath,\n    createMuonDevOverrideConfig(\n      asset.overrideAssetSourcePath,\n      enableDebugger,\n      browserStartPage,\n      preparedViteAssets?.runtimePluginConfig,\n    ),\n  );\n  const muonExecutablePath = getMuonExecutablePath(\n    preparedRuntime.stagePath,\n    platform,\n  );\n  const configPaths = [\n    ...(projectConfig.configPath === undefined\n      ? []\n      : [projectConfig.configPath]),\n    overrideConfigPath,\n  ];\n  const exitCode = await runMuonExecutable(\n    muonExecutablePath,\n    configPaths,\n    environment,\n  );\n\n  return {\n    root,\n    target,\n    muonPath: preparedRuntime.muonPath,\n    cefPath: preparedRuntime.cefPath,\n    stagePath: preparedRuntime.stagePath,\n    muonExecutablePath,\n    ...(projectConfig.configPath === undefined\n      ? {}\n      : { projectConfigPath: projectConfig.configPath }),\n    overrideConfigPath,\n    assetSourcePath: asset.assetSourcePath,\n    exitCode,\n  };\n};\n\n/**\n * Launches muon directly against local development assets.\n *\n * @param options Development startup options.\n * @returns Development startup result after the muon process exits.\n */\nexport const runMuonDev = async (\n  options: MuonDevOptions = {},\n): Promise<MuonDevResult> => {\n  const cwd = resolve(options.root ?? process.cwd());\n  let result: MuonDevResult;\n  do {\n    result = await runMuonDevOnce(options, cwd);\n  } while (result.exitCode === muonRecycleExitCode);\n  return result;\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 } from \"node:child_process\";\nimport { type Stats } from \"node:fs\";\nimport {\n  chmod,\n  cp,\n  mkdir,\n  readFile,\n  readdir,\n  rm,\n  stat,\n  writeFile,\n} from \"node:fs/promises\";\nimport { basename, dirname, join, relative, resolve, sep } from \"node:path\";\n\nimport AdmZip from \"adm-zip\";\nimport { parse } from \"json5\";\nimport {\n  createDirectoryItem,\n  createReadFileItem,\n  createTarPacker,\n  storeReaderToFile,\n  type EntryItem,\n} from \"tar-vern\";\n\nimport {\n  buildMuonApp,\n  getDefaultMuonBuildTarget,\n  type MuonBuildOptions,\n  type MuonBuildResult,\n  type MuonBuildTarget,\n  type MuonBuildTargetResult,\n} from \"./build.js\";\nimport {\n  loadMuonBuildSequenceProject,\n  muonBuildSequenceSuppressViteBuildEnvironmentKey,\n  resolveMuonViteBuildOptions,\n  runMuonBuildSequence,\n  type MuonBuildSequenceProject,\n  type MuonBuildSequenceOptions,\n} from \"./build-sequence.js\";\nimport type { MuonViteBuildOptions } from \"./vite.js\";\nimport { createVitePackagedAssetOptions } from \"./vite-assets.js\";\nimport {\n  allMuonTargets,\n  getMuonTargetDescriptor,\n  normalizeMuonTarget,\n} from \"./targets.js\";\nimport {\n  mergeMuonWindowsResourceOptions,\n  readMuonConfigForWindowsResource,\n  resolveMuonWindowsResource,\n  updateWindowsPeIconResource,\n  updateWindowsPeResources,\n  type MuonWindowsResourceOptions,\n  type ResolvedMuonWindowsResource,\n} from \"./windows-resource.js\";\nimport {\n  includesWindowsCodeSigningTarget,\n  resolveMuonWindowsCodeSigning,\n  signWindowsExecutable,\n  type MuonWindowsCodeSigningOptions,\n  type MuonWindowsCodeSigningTarget,\n  type ResolvedMuonWindowsCodeSigning,\n} from \"./windows-code-signing.js\";\nimport { createWindowsIconFromPngFile } from \"./windows-icon.js\";\nimport {\n  createLinuxDesktopEntry,\n  mergeMuonLinuxDesktopOptions,\n  quoteDesktopExecArgument,\n  type MuonLinuxDesktopOptions,\n} from \"./linux-desktop.js\";\nimport type { MuonProgressCallback } from \"./progress.js\";\n\nconst supportedPackTypes = [\"zip\", \"tar.gz\", \"deb\", \"nsis\"] as const;\nconst supportedLinuxSandboxModes = [\"disabled\", \"setuid\"] as const;\nconst defaultArtifactsDirectory = \"artifacts\";\nconst defaultPackageBuildDirectory = \".muon/pack\";\nconst systemRuntimeRoot = \"/var/lib/muon/apps\";\nconst systemCefCacheRoot = \"/var/cache/muon/cef\";\nconst runtimeHelperExecutableName = \"muon-runtime-helper\";\nconst portableProfilePath = \"profile\";\nconst portableInstallMetadata = {\n  type: \"portable\",\n  runtimeMode: \"in-place\",\n} as const;\n// Keep both names for Debian t64 and pre-t64 runtime packages.\nconst debRuntimeDependencies = [\n  \"libc6\",\n  \"libgcc-s1\",\n  \"libstdc++6\",\n  \"libffi8\",\n  \"libexpat1\",\n  \"libdbus-1-3\",\n  \"libglib2.0-0t64 | libglib2.0-0\",\n  \"libgtk-3-0t64 | libgtk-3-0\",\n  \"libatk-bridge2.0-0t64 | libatk-bridge2.0-0\",\n  \"libatk1.0-0t64 | libatk1.0-0\",\n  \"libatspi2.0-0t64 | libatspi2.0-0\",\n  \"libcups2t64 | libcups2\",\n  \"libnspr4\",\n  \"libnss3\",\n  \"libgbm1\",\n  \"libasound2t64 | libasound2\",\n  \"libudev1\",\n  \"libx11-6\",\n  \"libxcb1\",\n  \"libxcomposite1\",\n  \"libxdamage1\",\n  \"libxext6\",\n  \"libxfixes3\",\n  \"libxi6\",\n  \"libxkbcommon0\",\n  \"libxrandr2\",\n  \"libcairo2\",\n  \"libpango-1.0-0\",\n] as const;\n\ntype JsonObject = Record<string, unknown>;\n\n/**\n * muon package output type.\n */\nexport type MuonPackType = (typeof supportedPackTypes)[number];\n\n/**\n * Linux CEF sandbox strategy used by deb packages.\n */\nexport type MuonLinuxSandboxMode = (typeof supportedLinuxSandboxModes)[number];\n\n/**\n * Options for creating redistributable muon package artifacts.\n */\nexport interface MuonPackOptions {\n  /**\n   * Project root.\n   */\n  root?: string;\n  /**\n   * Package artifact types to generate.\n   *\n   * @remarks Defaults to zip, tar.gz, deb, and nsis when omitted.\n   */\n  types?: readonly string[];\n  /**\n   * Public target identifiers to build.\n   */\n  targets?: readonly string[];\n  /**\n   * Build every supported target.\n   */\n  allTargets?: boolean;\n  /**\n   * muon config path to embed.\n   */\n  configPath?: string;\n  /**\n   * Static application icon PNG file path.\n   *\n   * @remarks Used for Windows PE/NSIS resources, Linux desktop entries, and\n   * the generated initial title bar icon asset unless a target-specific icon\n   * override is supplied.\n   */\n  iconPath?: string;\n  /**\n   * File name used for the app launcher.\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   * Windows PE and NSIS resource metadata.\n   *\n   * @defaultValue Uses Vite build options, `muon.json` `windows.resource`,\n   * `project.json`, `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 Vite build options, `muon.json` `linux.desktop`,\n   * package metadata, then muon defaults.\n   */\n  linuxDesktop?: MuonLinuxDesktopOptions;\n  /**\n   * Linux deb CEF sandbox mode.\n   *\n   * @remarks `setuid` is opt-in and valid only when packaging Linux deb\n   * artifacts. The default `disabled` preserves the existing no-sandbox\n   * runtime behavior.\n   */\n  linuxSandbox?: string;\n  /**\n   * Directory containing package runtime/ and native/ folders.\n   */\n  packageDirectory?: string;\n  /**\n   * Directory that receives generated package artifacts.\n   */\n  artifactsDir?: string;\n  /**\n   * Package name override.\n   */\n  packageName?: string;\n  /**\n   * Package version override.\n   */\n  packageVersion?: string;\n  /**\n   * Package description override.\n   */\n  description?: string;\n  /**\n   * Package author/maintainer override.\n   */\n  author?: string;\n  /**\n   * Environment used for child processes.\n   */\n  environment?: NodeJS.ProcessEnv;\n}\n\n/**\n * Generated package artifact metadata.\n */\nexport interface MuonPackArtifact {\n  /**\n   * Package artifact type.\n   */\n  type: MuonPackType;\n  /**\n   * muon target packaged in this artifact.\n   */\n  target: MuonBuildTarget;\n  /**\n   * Generated artifact path.\n   */\n  path: string;\n}\n\n/**\n * Result of a muon package build.\n */\nexport interface MuonPackResult {\n  /**\n   * Absolute project root used for packaging.\n   */\n  root: string;\n  /**\n   * Debian/installer safe package name.\n   */\n  packageName: string;\n  /**\n   * Package version.\n   */\n  version: string;\n  /**\n   * Launcher file base name.\n   */\n  appName: string;\n  /**\n   * Stable base app identifier used to derive target runtime app identifiers.\n   */\n  appId: string;\n  /**\n   * muon dist build result.\n   */\n  build: MuonBuildResult;\n  /**\n   * Target dist directories used as package inputs.\n   */\n  targets: MuonBuildTargetResult[];\n  /**\n   * Generated package artifacts.\n   */\n  artifacts: MuonPackArtifact[];\n}\n\ninterface PackageMetadata {\n  packageName: string;\n  version: string;\n  description: string;\n  author: string;\n}\n\ninterface MuonPackTargetPlan {\n  target: MuonBuildTarget;\n  types: MuonPackType[];\n}\n\ninterface InternalMuonPackOptions extends MuonPackOptions {\n  progress?: MuonProgressCallback;\n}\n\ninterface InternalMuonBuildSequenceOptions extends MuonBuildSequenceOptions {\n  environment?: NodeJS.ProcessEnv;\n  progress?: MuonProgressCallback;\n}\n\ninterface InternalMuonBuildOptions extends MuonBuildOptions {\n  browserProfilePathOverride: string | undefined;\n  environment?: NodeJS.ProcessEnv;\n  progress?: MuonProgressCallback;\n}\n\nconst isJsonObject = (value: unknown): value is JsonObject =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst readJsonObjectFile = async (path: string): Promise<JsonObject> => {\n  const parsed = parse(await readFile(path, \"utf8\"));\n  if (!isJsonObject(parsed)) {\n    throw new Error(`JSON file must contain an object: ${path}`);\n  }\n  return parsed;\n};\n\nconst readPackageJson = async (root: string): Promise<JsonObject> => {\n  return await readJsonObjectFile(join(root, \"package.json\"));\n};\n\nconst sanitizePackageName = (value: string): string => {\n  const unscoped = value.startsWith(\"@\")\n    ? value.slice(value.indexOf(\"/\") + 1)\n    : value;\n  const sanitized = unscoped\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 stringifyAuthor = (value: unknown): string | undefined => {\n  if (typeof value === \"string\") {\n    return value;\n  }\n  if (!isJsonObject(value) || typeof value.name !== \"string\") {\n    return undefined;\n  }\n  return value.email === undefined || typeof value.email !== \"string\"\n    ? value.name\n    : `${value.name} <${value.email}>`;\n};\n\nconst resolveMetadata = (\n  packageJson: JsonObject,\n  options: MuonPackOptions,\n): PackageMetadata => {\n  const packageNameSource =\n    options.packageName ??\n    (typeof packageJson.name === \"string\" ? packageJson.name : undefined);\n  if (packageNameSource === undefined || packageNameSource.trim() === \"\") {\n    throw new Error(\"package.json name is required for muon pack.\");\n  }\n  const version =\n    options.packageVersion ??\n    (typeof packageJson.version === \"string\" ? packageJson.version : undefined);\n  if (version === undefined || version.trim() === \"\") {\n    throw new Error(\"package.json version is required for muon pack.\");\n  }\n  const description =\n    options.description ??\n    (typeof packageJson.description === \"string\"\n      ? packageJson.description\n      : \"muon application\");\n  const author =\n    options.author ?? stringifyAuthor(packageJson.author) ?? \"Unknown\";\n  return {\n    packageName: sanitizePackageName(packageNameSource),\n    version,\n    description,\n    author,\n  };\n};\n\nconst createPackMetadataPackageJson = (\n  packageJson: JsonObject,\n  metadata: PackageMetadata,\n): JsonObject => ({\n  ...packageJson,\n  version: metadata.version,\n});\n\nconst normalizePackTypes = (\n  types: readonly string[] | undefined,\n): MuonPackType[] => {\n  if (types === undefined) {\n    return [...supportedPackTypes];\n  }\n  const normalized = types\n    .flatMap((value) => value.split(\",\"))\n    .map((value) => value.trim().toLowerCase())\n    .map((value) => (value === \"tgz\" ? \"tar.gz\" : value))\n    .filter((value) => value.length > 0);\n  if (normalized.length === 0) {\n    throw new Error(\"Specify at least one package type with --type.\");\n  }\n  for (const type of normalized) {\n    if (!supportedPackTypes.includes(type as MuonPackType)) {\n      throw new Error(`Unsupported muon pack type: ${type}`);\n    }\n  }\n  return [...new Set(normalized)] as MuonPackType[];\n};\n\nconst normalizeLinuxSandboxMode = (\n  mode: string | undefined,\n): MuonLinuxSandboxMode => {\n  if (mode === undefined) {\n    return \"disabled\";\n  }\n  const normalized = mode.trim().toLowerCase();\n  if (supportedLinuxSandboxModes.includes(normalized as MuonLinuxSandboxMode)) {\n    return normalized as MuonLinuxSandboxMode;\n  }\n  throw new Error(`Unsupported Linux sandbox mode: ${mode}`);\n};\n\nconst packTargetSelectorTargets: Record<string, readonly MuonBuildTarget[]> = {\n  linux: [\"linux-amd64\", \"linux-armhf\", \"linux-arm64\"],\n  windows: [\"windows-i686\", \"windows-amd64\"],\n  amd64: [\"linux-amd64\", \"windows-amd64\"],\n  arm64: [\"linux-arm64\"],\n  armhf: [\"linux-armhf\"],\n  i686: [\"windows-i686\"],\n};\n\nconst normalizePackTargetSelector = (\n  selector: string,\n): readonly MuonBuildTarget[] => {\n  const normalized = selector.trim().toLowerCase();\n  if (allMuonTargets.includes(normalized as MuonBuildTarget)) {\n    return [normalized as MuonBuildTarget];\n  }\n  const targets = packTargetSelectorTargets[normalized];\n  if (targets !== undefined) {\n    return targets;\n  }\n  throw new Error(`Unsupported muon pack target selector: ${selector}`);\n};\n\nconst normalizePackTargetSelectors = (\n  selectors: readonly string[],\n): MuonBuildTarget[] => {\n  const targets = selectors\n    .flatMap((selector) => selector.split(\",\"))\n    .map((selector) => selector.trim())\n    .filter((selector) => selector.length > 0)\n    .flatMap((selector) => normalizePackTargetSelector(selector));\n  return [...new Set(targets)];\n};\n\nconst normalizePluginBuildTargets = (\n  targets: readonly string[],\n): MuonBuildTarget[] => {\n  return [\n    ...new Set(\n      targets.map((target) => normalizeMuonTarget(target, \"muon pack target\")),\n    ),\n  ];\n};\n\nconst resolvePackTargetCandidates = (\n  options: MuonPackOptions,\n  pluginBuildOptions: MuonViteBuildOptions,\n): MuonBuildTarget[] => {\n  if (options.allTargets === true) {\n    return [...allMuonTargets];\n  }\n  if (options.targets !== undefined && options.targets.length > 0) {\n    return normalizePackTargetSelectors(options.targets);\n  }\n  if (options.allTargets === false) {\n    return [getDefaultMuonBuildTarget()];\n  }\n  if (pluginBuildOptions.allTargets === true) {\n    return [...allMuonTargets];\n  }\n  if (\n    pluginBuildOptions.targets !== undefined &&\n    pluginBuildOptions.targets.length > 0\n  ) {\n    return normalizePluginBuildTargets(pluginBuildOptions.targets);\n  }\n  if (pluginBuildOptions.allTargets === false) {\n    return [getDefaultMuonBuildTarget()];\n  }\n  return [...allMuonTargets];\n};\n\nconst packTypeSupportsTarget = (\n  type: MuonPackType,\n  target: MuonBuildTarget,\n): boolean => {\n  const descriptor = getMuonTargetDescriptor(target);\n  return (\n    (type === \"zip\" && descriptor.os === \"windows\") ||\n    (type === \"tar.gz\" && descriptor.os === \"linux\") ||\n    (type === \"deb\" && descriptor.os === \"linux\") ||\n    (type === \"nsis\" && descriptor.os === \"windows\")\n  );\n};\n\nconst isPortablePackType = (type: MuonPackType): boolean =>\n  type === \"zip\" || type === \"tar.gz\";\n\nconst createPackTargetPlan = (\n  types: readonly MuonPackType[],\n  targets: readonly MuonBuildTarget[],\n): MuonPackTargetPlan[] => {\n  const plan = targets\n    .map((target) => ({\n      target,\n      types: types.filter((type) => packTypeSupportsTarget(type, target)),\n    }))\n    .filter((entry) => entry.types.length > 0);\n  if (plan.length === 0) {\n    throw new Error(\"No valid muon pack target and type combinations.\");\n  }\n  return plan;\n};\n\nconst validateLinuxSandboxModeForPlan = (\n  mode: MuonLinuxSandboxMode,\n  plan: readonly MuonPackTargetPlan[],\n): void => {\n  if (mode === \"disabled\") {\n    return;\n  }\n  for (const entry of plan) {\n    const descriptor = getMuonTargetDescriptor(entry.target);\n    if (\n      descriptor.os !== \"linux\" ||\n      entry.types.length !== 1 ||\n      entry.types[0] !== \"deb\"\n    ) {\n      throw new Error(\n        \"--linux-sandbox=setuid is supported only for Linux deb packages. Specify --type deb with Linux targets.\",\n      );\n    }\n  }\n};\n\nconst runTool = async (\n  executable: string,\n  args: readonly string[],\n  cwd: string,\n  environment: NodeJS.ProcessEnv,\n): Promise<void> => {\n  const child = spawn(executable, [...args], {\n    cwd,\n    env: 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      `${executable} failed with exit code ${exitCode}: ${stderr.trim()}`,\n    );\n  }\n};\n\nconst isUnavailableToolError = (\n  error: unknown,\n  executable: string,\n): boolean => {\n  if (!(error instanceof Error)) {\n    return false;\n  }\n  const nodeError = error as NodeJS.ErrnoException;\n  return (\n    nodeError.code === \"ENOENT\" &&\n    (nodeError.syscall === `spawn ${executable}` ||\n      nodeError.path === executable)\n  );\n};\n\nconst reportSkippedUnavailableTool = (\n  progress: MuonProgressCallback | undefined,\n  executable: string,\n  type: MuonPackType,\n  target: MuonBuildTarget,\n): void => {\n  progress?.({\n    phase: \"pack\",\n    status: `Warning: ${executable} is not available; skipping ${type} package for ${target}.`,\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 addDirectoryToZip = async (\n  zip: AdmZip,\n  directory: string,\n  entryRoot: string,\n): Promise<void> => {\n  const walk = async (currentDirectory: string): Promise<void> => {\n    const entries = await readdir(currentDirectory, { withFileTypes: true });\n    entries.sort((left, right) => left.name.localeCompare(right.name));\n    for (const entry of entries) {\n      const path = join(currentDirectory, entry.name);\n      if (entry.isDirectory()) {\n        await walk(path);\n      } else if (entry.isFile()) {\n        const stats = await stat(path);\n        const relativePath = relative(directory, path).split(sep).join(\"/\");\n        zip.addFile(\n          `${entryRoot}/${relativePath}`,\n          await readFile(path),\n          undefined,\n          stats.mode << 16,\n        );\n      }\n    }\n  };\n  await walk(directory);\n};\n\nconst getPortableArchiveEntryRoot = (\n  target: MuonBuildTargetResult,\n  metadata: PackageMetadata,\n): string => `${metadata.packageName}/${target.target}`;\n\nconst packageZip = async (\n  target: MuonBuildTargetResult,\n  metadata: PackageMetadata,\n  artifactsRoot: string,\n): Promise<MuonPackArtifact> => {\n  const zip = new AdmZip();\n  await addDirectoryToZip(\n    zip,\n    target.outputPath,\n    getPortableArchiveEntryRoot(target, metadata),\n  );\n  const outputPath = join(\n    artifactsRoot,\n    `${metadata.packageName}-${metadata.version}-${target.target}.zip`,\n  );\n  await mkdir(dirname(outputPath), { recursive: true });\n  await writeFile(outputPath, zip.toBuffer());\n  return {\n    type: \"zip\",\n    target: target.target,\n    path: outputPath,\n  };\n};\n\nconst toArchivePath = (path: string): string => path.split(sep).join(\"/\");\n\nconst createTarGzEntryGenerator = async function* (\n  directory: string,\n  entryRoot: string,\n): AsyncGenerator<EntryItem, void, unknown> {\n  yield await createDirectoryItem(entryRoot, \"exceptName\", {\n    directoryPath: directory,\n  });\n\n  const walk = async function* (\n    currentDirectory: string,\n  ): AsyncGenerator<EntryItem, void, unknown> {\n    const entries = await readdir(currentDirectory, { withFileTypes: true });\n    entries.sort((left, right) => left.name.localeCompare(right.name));\n    for (const entry of entries) {\n      const path = join(currentDirectory, entry.name);\n      const relativePath = toArchivePath(relative(directory, path));\n      const entryName = `${entryRoot}/${relativePath}`;\n      if (entry.isDirectory()) {\n        yield await createDirectoryItem(entryName, \"exceptName\", {\n          directoryPath: path,\n        });\n        yield* walk(path);\n      } else if (entry.isFile()) {\n        yield await createReadFileItem(entryName, path, \"exceptName\");\n      }\n    }\n  };\n\n  yield* walk(directory);\n};\n\nconst packageTarGz = async (\n  target: MuonBuildTargetResult,\n  metadata: PackageMetadata,\n  artifactsRoot: string,\n): Promise<MuonPackArtifact> => {\n  const outputPath = join(\n    artifactsRoot,\n    `${metadata.packageName}-${metadata.version}-${target.target}.tar.gz`,\n  );\n  await mkdir(dirname(outputPath), { recursive: true });\n  const packer = createTarPacker(\n    createTarGzEntryGenerator(\n      target.outputPath,\n      getPortableArchiveEntryRoot(target, metadata),\n    ),\n    \"gzip\",\n  );\n  await storeReaderToFile(packer, outputPath);\n  return {\n    type: \"tar.gz\",\n    target: target.target,\n    path: outputPath,\n  };\n};\n\nconst writePortableInstallMetadata = async (\n  target: MuonBuildTargetResult,\n): Promise<void> => {\n  await writeFile(\n    join(target.outputPath, \"muon-install.json\"),\n    `${JSON.stringify(portableInstallMetadata, undefined, 2)}\\n`,\n  );\n};\n\nconst packageDeb = async (\n  root: string,\n  target: MuonBuildTargetResult,\n  metadata: PackageMetadata,\n  artifactsRoot: string,\n  packageBuildRoot: string,\n  environment: NodeJS.ProcessEnv,\n  linuxSandbox: MuonLinuxSandboxMode,\n  progress: MuonProgressCallback | undefined,\n): Promise<MuonPackArtifact | undefined> => {\n  const descriptor = getMuonTargetDescriptor(target.target);\n  if (descriptor.os !== \"linux\") {\n    throw new Error(`Unsupported deb target: ${target.target}`);\n  }\n  const architecture = descriptor.arch;\n  const packageRoot = join(\n    packageBuildRoot,\n    \"deb\",\n    `${metadata.packageName}-${target.target}`,\n  );\n  await rm(packageRoot, { recursive: true, force: true });\n  const installRoot = join(packageRoot, \"usr\", \"lib\", metadata.packageName);\n  const installedDist = join(installRoot, target.distributionDirectoryName);\n  const privilegedPreparePath = `/usr/lib/${metadata.packageName}/${target.distributionDirectoryName}/${runtimeHelperExecutableName}`;\n  const systemRuntimePath = `${systemRuntimeRoot}/${metadata.packageName}/${target.target}/runtime`;\n  await mkdir(installedDist, { recursive: true });\n  await cp(target.outputPath, installedDist, { recursive: true });\n  if (linuxSandbox === \"setuid\") {\n    if (target.runtimeHelperPath === undefined) {\n      throw new Error(\n        `muon runtime helper is unavailable for setuid deb target: ${target.target}`,\n      );\n    }\n    await chmod(join(installedDist, runtimeHelperExecutableName), 0o4755);\n  }\n  await writeFile(\n    join(installedDist, \"muon-install.json\"),\n    `${JSON.stringify(\n      {\n        type: \"deb\",\n        packageName: metadata.packageName,\n        launcherPath: `/usr/bin/${metadata.packageName}`,\n        ...(linuxSandbox === \"setuid\"\n          ? {\n              runtimeMode: \"system-setuid\",\n              systemRuntimePath,\n              privilegedPreparePath,\n            }\n          : {}),\n      },\n      undefined,\n      2,\n    )}\\n`,\n  );\n  const binPath = join(packageRoot, \"usr\", \"bin\", metadata.packageName);\n  const launcherName = basename(target.launcherPath);\n  await mkdir(dirname(binPath), { recursive: true });\n  await writeFile(\n    binPath,\n    [\n      \"#!/usr/bin/env bash\",\n      \"set -euo pipefail\",\n      `exec ${JSON.stringify(`/usr/lib/${metadata.packageName}/${target.distributionDirectoryName}/${launcherName}`)} \"$@\"`,\n      \"\",\n    ].join(\"\\n\"),\n  );\n  await chmod(binPath, 0o755);\n  if (target.linuxDesktop === undefined) {\n    throw new Error(`Linux desktop metadata is unavailable: ${target.target}`);\n  }\n  const applicationsPath = join(\n    packageRoot,\n    \"usr\",\n    \"share\",\n    \"applications\",\n    `${target.linuxDesktop.desktopId}.desktop`,\n  );\n  await mkdir(dirname(applicationsPath), { recursive: true });\n  await writeFile(\n    applicationsPath,\n    createLinuxDesktopEntry({\n      desktop: target.linuxDesktop,\n      exec: `${quoteDesktopExecArgument(`/usr/bin/${metadata.packageName}`)} --muon-launch-from=normal`,\n      tryExec: `/usr/bin/${metadata.packageName}`,\n      icon: target.linuxDesktop.desktopId,\n    }),\n  );\n  const iconPath = join(\n    packageRoot,\n    \"usr\",\n    \"share\",\n    \"icons\",\n    \"hicolor\",\n    \"256x256\",\n    \"apps\",\n    `${target.linuxDesktop.desktopId}.png`,\n  );\n  await mkdir(dirname(iconPath), { recursive: true });\n  await cp(join(target.outputPath, target.linuxDesktop.iconFileName), iconPath);\n  const controlPath = join(packageRoot, \"DEBIAN\", \"control\");\n  await mkdir(dirname(controlPath), { recursive: true });\n  await writeFile(\n    controlPath,\n    [\n      `Package: ${metadata.packageName}`,\n      `Version: ${metadata.version}`,\n      `Architecture: ${architecture}`,\n      `Maintainer: ${metadata.author}`,\n      `Depends: ${debRuntimeDependencies.join(\", \")}`,\n      `Description: ${metadata.description}`,\n      \"\",\n    ].join(\"\\n\"),\n  );\n  if (linuxSandbox === \"setuid\") {\n    const postinstPath = join(packageRoot, \"DEBIAN\", \"postinst\");\n    await writeFile(\n      postinstPath,\n      [\n        \"#!/bin/sh\",\n        \"set -e\",\n        `helper=${JSON.stringify(privilegedPreparePath)}`,\n        'if [ ! -f \"$helper\" ]; then',\n        '  echo \"muon-runtime-helper is missing: $helper\" >&2',\n        \"  exit 1\",\n        \"fi\",\n        'chown root:root \"$helper\"',\n        'chmod 4755 \"$helper\"',\n        \"exit 0\",\n        \"\",\n      ].join(\"\\n\"),\n    );\n    await chmod(postinstPath, 0o755);\n\n    const postrmPath = join(packageRoot, \"DEBIAN\", \"postrm\");\n    await writeFile(\n      postrmPath,\n      [\n        \"#!/bin/sh\",\n        \"set -e\",\n        'if [ \"$1\" = \"purge\" ]; then',\n        `  rm -rf ${JSON.stringify(`${systemRuntimeRoot}/${metadata.packageName}`)}`,\n        `  # Shared CEF cache ${systemCefCacheRoot} is intentionally preserved.`,\n        \"fi\",\n        \"exit 0\",\n        \"\",\n      ].join(\"\\n\"),\n    );\n    await chmod(postrmPath, 0o755);\n  }\n  const outputPath = join(\n    artifactsRoot,\n    `${metadata.packageName}-${metadata.version}-${architecture}.deb`,\n  );\n  await mkdir(dirname(outputPath), { recursive: true });\n  progress?.({\n    phase: \"pack\",\n    status: \"Running dpkg-deb\",\n  });\n  try {\n    await runTool(\n      \"dpkg-deb\",\n      [\"--root-owner-group\", \"--build\", packageRoot, outputPath],\n      root,\n      environment,\n    );\n  } catch (error) {\n    if (isUnavailableToolError(error, \"dpkg-deb\")) {\n      reportSkippedUnavailableTool(progress, \"dpkg-deb\", \"deb\", target.target);\n      return undefined;\n    }\n    throw error;\n  }\n  return {\n    type: \"deb\",\n    target: target.target,\n    path: outputPath,\n  };\n};\n\nconst escapeNsis = (value: string): string =>\n  value.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll('\"', '$\\\\\"');\n\nconst nsisUninstallRegistryRoot =\n  \"Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Uninstall\";\n\nconst createNsisUninstallRegistryKey = (appId: string): string =>\n  `${nsisUninstallRegistryRoot}\\\\${appId}`;\n\nconst packageNsis = async (\n  root: string,\n  target: MuonBuildTargetResult,\n  metadata: PackageMetadata,\n  windowsResource: ResolvedMuonWindowsResource,\n  windowsCodeSigning: ResolvedMuonWindowsCodeSigning | undefined,\n  artifactsRoot: string,\n  packageBuildRoot: string,\n  environment: NodeJS.ProcessEnv,\n  progress: MuonProgressCallback | undefined,\n): Promise<MuonPackArtifact | undefined> => {\n  const descriptor = getMuonTargetDescriptor(target.target);\n  if (descriptor.os !== \"windows\") {\n    throw new Error(`Unsupported nsis target: ${target.target}`);\n  }\n  const scriptPath = join(\n    packageBuildRoot,\n    \"nsis\",\n    `${metadata.packageName}-${target.target}.nsi`,\n  );\n  const outputPath = join(\n    artifactsRoot,\n    `${metadata.packageName}-${metadata.version}-${descriptor.arch}-setup.exe`,\n  );\n  const launcherFileName = basename(target.launcherPath);\n  const nsisDisplayName = `${metadata.packageName} (${descriptor.arch})`;\n  const nsisInstallDirectoryName = `${metadata.packageName}-${descriptor.arch}`;\n  const uninstallRegistryKey = createNsisUninstallRegistryKey(\n    target.runtimeAppId,\n  );\n  await mkdir(dirname(scriptPath), { recursive: true });\n  await mkdir(dirname(outputPath), { recursive: true });\n  const iconPath = join(\n    dirname(scriptPath),\n    `${metadata.packageName}-${target.target}.ico`,\n  );\n  await createWindowsIconFromPngFile(windowsResource.iconPath, iconPath);\n  const codeSigningDirectives = await createNsisCodeSigningDirectives({\n    root,\n    scriptPath,\n    target: target.target,\n    codeSigning: windowsCodeSigning,\n  });\n  await writeFile(\n    scriptPath,\n    [\n      \"Unicode true\",\n      `Name \"${escapeNsis(nsisDisplayName)}\"`,\n      `OutFile \"${escapeNsis(outputPath)}\"`,\n      ...codeSigningDirectives,\n      `InstallDir \"$LOCALAPPDATA\\\\Programs\\\\${escapeNsis(nsisInstallDirectoryName)}\"`,\n      \"RequestExecutionLevel user\",\n      \"ShowInstDetails nevershow\",\n      \"AutoCloseWindow true\",\n      ...createNsisResourceDirectives(windowsResource, iconPath),\n      \"Page instfiles\",\n      \"Section\",\n      '  SetOutPath \"$INSTDIR\"',\n      `  File /r \"${escapeNsis(target.outputPath)}\\\\*\"`,\n      `  CreateShortCut \"$SMPROGRAMS\\\\${escapeNsis(nsisDisplayName)}.lnk\" \"$INSTDIR\\\\${escapeNsis(launcherFileName)}\"`,\n      '  WriteUninstaller \"$INSTDIR\\\\Uninstall.exe\"',\n      `  WriteRegStr HKCU \"${escapeNsis(uninstallRegistryKey)}\" \"DisplayName\" \"${escapeNsis(nsisDisplayName)}\"`,\n      `  WriteRegStr HKCU \"${escapeNsis(uninstallRegistryKey)}\" \"DisplayVersion\" \"${escapeNsis(metadata.version)}\"`,\n      `  WriteRegStr HKCU \"${escapeNsis(uninstallRegistryKey)}\" \"Publisher\" \"${escapeNsis(metadata.author)}\"`,\n      `  WriteRegStr HKCU \"${escapeNsis(uninstallRegistryKey)}\" \"InstallLocation\" \"$INSTDIR\"`,\n      `  WriteRegStr HKCU \"${escapeNsis(uninstallRegistryKey)}\" \"DisplayIcon\" \"$\\\\\"$INSTDIR\\\\${escapeNsis(launcherFileName)}$\\\\\"\"`,\n      `  WriteRegStr HKCU \"${escapeNsis(uninstallRegistryKey)}\" \"UninstallString\" \"$\\\\\"$INSTDIR\\\\Uninstall.exe$\\\\\" /S\"`,\n      `  WriteRegStr HKCU \"${escapeNsis(uninstallRegistryKey)}\" \"QuietUninstallString\" \"$\\\\\"$INSTDIR\\\\Uninstall.exe$\\\\\" /S\"`,\n      `  WriteRegDWORD HKCU \"${escapeNsis(uninstallRegistryKey)}\" \"NoModify\" 1`,\n      `  WriteRegDWORD HKCU \"${escapeNsis(uninstallRegistryKey)}\" \"NoRepair\" 1`,\n      \"SectionEnd\",\n      \"\",\n      'Section \"Uninstall\"',\n      `  Delete \"$SMPROGRAMS\\\\${escapeNsis(nsisDisplayName)}.lnk\"`,\n      `  DeleteRegKey HKCU \"${escapeNsis(uninstallRegistryKey)}\"`,\n      '  RMDir /r \"$INSTDIR\"',\n      `  RMDir /r \"$LOCALAPPDATA\\\\${escapeNsis(target.runtimeAppId)}\"`,\n      \"SectionEnd\",\n      \"\",\n      \"Function .onInstSuccess\",\n      \"  IfSilent +3\",\n      '  SetOutPath \"$INSTDIR\"',\n      `  Exec \"$\\\\\"$INSTDIR\\\\${escapeNsis(launcherFileName)}$\\\\\"\"`,\n      \"FunctionEnd\",\n      \"\",\n    ].join(\"\\n\"),\n  );\n  progress?.({\n    phase: \"pack\",\n    status: \"Running makensis\",\n  });\n  try {\n    await runTool(\"makensis\", [scriptPath], root, environment);\n  } catch (error) {\n    if (isUnavailableToolError(error, \"makensis\")) {\n      reportSkippedUnavailableTool(progress, \"makensis\", \"nsis\", target.target);\n      return undefined;\n    }\n    throw error;\n  }\n  if ((await statOrUndefined(outputPath)) === undefined) {\n    throw new Error(`makensis did not create installer: ${outputPath}`);\n  }\n  return {\n    type: \"nsis\",\n    target: target.target,\n    path: outputPath,\n  };\n};\n\nconst createNsisResourceDirectives = (\n  resource: ResolvedMuonWindowsResource,\n  iconPath: string,\n): string[] => {\n  const lines: string[] = [];\n  lines.push(`Icon \"${escapeNsis(iconPath)}\"`);\n  lines.push(`UninstallIcon \"${escapeNsis(iconPath)}\"`);\n  lines.push(`VIProductVersion \"${escapeNsis(resource.fixedVersion)}\"`);\n  lines.push(`VIFileVersion \"${escapeNsis(resource.fixedVersion)}\"`);\n  lines.push(\n    `VIAddVersionKey /LANG=${resource.language} \"CompanyName\" \"${escapeNsis(resource.companyName)}\"`,\n  );\n  lines.push(\n    `VIAddVersionKey /LANG=${resource.language} \"FileDescription\" \"${escapeNsis(resource.fileDescription)}\"`,\n  );\n  lines.push(\n    `VIAddVersionKey /LANG=${resource.language} \"FileVersion\" \"${escapeNsis(resource.version)}\"`,\n  );\n  lines.push(\n    `VIAddVersionKey /LANG=${resource.language} \"ProductName\" \"${escapeNsis(resource.productName)}\"`,\n  );\n  lines.push(\n    `VIAddVersionKey /LANG=${resource.language} \"ProductVersion\" \"${escapeNsis(resource.version)}\"`,\n  );\n  if (resource.copyright !== undefined) {\n    lines.push(\n      `VIAddVersionKey /LANG=${resource.language} \"LegalCopyright\" \"${escapeNsis(resource.copyright)}\"`,\n    );\n  }\n  return lines;\n};\n\nconst createNsisCodeSigningWrapperScript = (configPath: string): string =>\n  [\n    \"#!/usr/bin/env node\",\n    \"const { readFileSync } = require('node:fs');\",\n    \"const { spawnSync } = require('node:child_process');\",\n    `const config = JSON.parse(readFileSync(${JSON.stringify(configPath)}, 'utf8'));`,\n    \"const [kind, target, path] = process.argv.slice(2);\",\n    \"const args = config.args.map((arg) => arg.replaceAll('{path}', path).replaceAll('{target}', target).replaceAll('{kind}', kind));\",\n    \"const result = spawnSync(config.command, args, { cwd: config.cwd, env: process.env, stdio: 'inherit' });\",\n    \"if (result.error) {\",\n    \"  console.error(result.error.message);\",\n    \"  process.exit(1);\",\n    \"}\",\n    \"process.exit(result.status ?? 1);\",\n    \"\",\n  ].join(\"\\n\");\n\nconst createNsisCodeSigningDirectiveCommand = (input: {\n  wrapperPath: string;\n  kind: MuonWindowsCodeSigningTarget;\n  target: MuonBuildTarget;\n}): string =>\n  `\"${escapeNsis(process.execPath)}\" \"${escapeNsis(input.wrapperPath)}\" \"${input.kind}\" \"${input.target}\" \"%1\"`;\n\nconst createNsisCodeSigningDirectives = async (input: {\n  root: string;\n  scriptPath: string;\n  target: MuonBuildTarget;\n  codeSigning: ResolvedMuonWindowsCodeSigning | undefined;\n}): Promise<string[]> => {\n  const codeSigning = input.codeSigning;\n  if (codeSigning === undefined) {\n    return [];\n  }\n  const signsInstaller = includesWindowsCodeSigningTarget(\n    codeSigning,\n    \"nsisInstaller\",\n  );\n  const signsUninstaller = includesWindowsCodeSigningTarget(\n    codeSigning,\n    \"nsisUninstaller\",\n  );\n  if (!signsInstaller && !signsUninstaller) {\n    return [];\n  }\n\n  const scriptDirectory = dirname(input.scriptPath);\n  const configPath = join(\n    scriptDirectory,\n    `${basename(input.scriptPath)}.sign.json`,\n  );\n  const wrapperPath = join(\n    scriptDirectory,\n    `${basename(input.scriptPath)}.sign.cjs`,\n  );\n  await writeFile(\n    configPath,\n    `${JSON.stringify(\n      {\n        command: codeSigning.command,\n        args: codeSigning.args,\n        cwd: input.root,\n      },\n      undefined,\n      2,\n    )}\\n`,\n  );\n  await writeFile(wrapperPath, createNsisCodeSigningWrapperScript(configPath));\n  await chmod(wrapperPath, 0o755);\n\n  const lines: string[] = [];\n  if (signsInstaller) {\n    lines.push(\n      `!finalize '${createNsisCodeSigningDirectiveCommand({\n        wrapperPath,\n        kind: \"nsisInstaller\",\n        target: input.target,\n      })}' = 0`,\n    );\n  }\n  if (signsUninstaller) {\n    lines.push(\n      `!uninstfinalize '${createNsisCodeSigningDirectiveCommand({\n        wrapperPath,\n        kind: \"nsisUninstaller\",\n        target: input.target,\n      })}' = 0`,\n    );\n  }\n  return lines;\n};\n\nconst reapplyPackWindowsResources = async (\n  targets: readonly MuonBuildTargetResult[],\n  resource: ResolvedMuonWindowsResource,\n  root: string,\n  environment: NodeJS.ProcessEnv,\n): Promise<void> => {\n  for (const target of targets) {\n    const descriptor = getMuonTargetDescriptor(target.target);\n    if (descriptor.os === \"windows\") {\n      await updateWindowsPeIconResource({\n        executablePath: join(\n          target.outputPath,\n          descriptor.runtimeExecutableName,\n        ),\n        resource,\n        environment,\n        cwd: root,\n      });\n      await updateWindowsPeResources({\n        executablePath: target.launcherPath,\n        resource,\n        environment,\n        cwd: root,\n      });\n    }\n  }\n};\n\nconst signPackWindowsExecutables = async (\n  targets: readonly MuonBuildTargetResult[],\n  codeSigning: ResolvedMuonWindowsCodeSigning | undefined,\n  root: string,\n  environment: NodeJS.ProcessEnv,\n  progress: MuonProgressCallback | undefined,\n): Promise<void> => {\n  if (codeSigning === undefined) {\n    return;\n  }\n  progress?.({\n    phase: \"pack\",\n    status: \"Signing Windows executables\",\n  });\n  for (const target of targets) {\n    const descriptor = getMuonTargetDescriptor(target.target);\n    if (descriptor.os !== \"windows\") {\n      continue;\n    }\n    await signWindowsExecutable({\n      codeSigning,\n      kind: \"runtime\",\n      target: target.target,\n      path: join(target.outputPath, descriptor.runtimeExecutableName),\n      cwd: root,\n      environment,\n    });\n    await signWindowsExecutable({\n      codeSigning,\n      kind: \"launcher\",\n      target: target.target,\n      path: target.launcherPath,\n      cwd: root,\n      environment,\n    });\n  }\n};\n\nconst createPortableBuildOptions = (input: {\n  project: MuonBuildSequenceProject;\n  pluginBuildOptions: MuonViteBuildOptions;\n  options: MuonPackOptions;\n  outputRoot: string;\n  targets: readonly MuonBuildTarget[];\n  windowsResourceOptions: MuonWindowsResourceOptions | undefined;\n  windowsCodeSigningOptions: false | MuonWindowsCodeSigningOptions | undefined;\n  linuxDesktopOptions: MuonLinuxDesktopOptions | undefined;\n  iconPath: string | undefined;\n  environment: NodeJS.ProcessEnv;\n  progress: MuonProgressCallback | undefined;\n}): MuonBuildOptions => {\n  const buildOptions: MuonBuildOptions = {\n    root: input.project.root,\n    targets: input.targets,\n    allTargets: false,\n    outputRoot: input.outputRoot,\n  };\n\n  if (input.project.pluginOptions !== undefined) {\n    if (input.project.viteOutputDirectory === undefined) {\n      throw new Error(\"Vite output directory could not be resolved.\");\n    }\n    Object.assign(buildOptions, input.pluginBuildOptions);\n    const packagedAssetOptions = createVitePackagedAssetOptions(\n      input.project.viteBase ?? \"/\",\n    );\n    buildOptions.assetSourcePath = input.project.viteOutputDirectory;\n    buildOptions.assetPrefix = packagedAssetOptions.assetPrefix;\n    if (packagedAssetOptions.browserStartPage !== undefined) {\n      buildOptions.browserStartPage = packagedAssetOptions.browserStartPage;\n    }\n  }\n\n  buildOptions.targets = input.targets;\n  buildOptions.allTargets = false;\n  buildOptions.outputRoot = input.outputRoot;\n  if (input.options.configPath !== undefined) {\n    buildOptions.configPath = input.options.configPath;\n  }\n  if (input.iconPath !== undefined) {\n    buildOptions.iconPath = input.iconPath;\n  }\n  if (input.options.appName !== undefined) {\n    buildOptions.appName = input.options.appName;\n  }\n  if (input.options.appId !== undefined) {\n    buildOptions.appId = input.options.appId;\n  }\n  if (input.options.packageDirectory !== undefined) {\n    buildOptions.packageDirectory = input.options.packageDirectory;\n  }\n  if (input.windowsResourceOptions !== undefined) {\n    buildOptions.windowsResource = input.windowsResourceOptions;\n  }\n  if (input.windowsCodeSigningOptions !== undefined) {\n    buildOptions.windowsCodeSigning = input.windowsCodeSigningOptions;\n  }\n  if (input.linuxDesktopOptions !== undefined) {\n    buildOptions.linuxDesktop = input.linuxDesktopOptions;\n  }\n  if (input.progress !== undefined) {\n    (buildOptions as InternalMuonBuildOptions).progress = input.progress;\n  }\n  (buildOptions as InternalMuonBuildOptions).environment = input.environment;\n  (buildOptions as InternalMuonBuildOptions).browserProfilePathOverride =\n    portableProfilePath;\n  return buildOptions;\n};\n\nconst buildPortableTargets = async (input: {\n  project: MuonBuildSequenceProject;\n  pluginBuildOptions: MuonViteBuildOptions;\n  options: MuonPackOptions;\n  packageBuildRoot: string;\n  targets: readonly MuonBuildTarget[];\n  windowsResourceOptions: MuonWindowsResourceOptions | undefined;\n  windowsCodeSigningOptions: false | MuonWindowsCodeSigningOptions | undefined;\n  linuxDesktopOptions: MuonLinuxDesktopOptions | undefined;\n  iconPath: string | undefined;\n  environment: NodeJS.ProcessEnv;\n  progress: MuonProgressCallback | undefined;\n}): Promise<Map<MuonBuildTarget, MuonBuildTargetResult>> => {\n  if (input.targets.length === 0) {\n    return new Map();\n  }\n  input.progress?.({\n    phase: \"pack\",\n    status: \"Building portable distributions\",\n  });\n  const build = await buildMuonApp(\n    createPortableBuildOptions({\n      project: input.project,\n      pluginBuildOptions: input.pluginBuildOptions,\n      options: input.options,\n      outputRoot: join(input.packageBuildRoot, \"portable-build\"),\n      targets: input.targets,\n      windowsResourceOptions: input.windowsResourceOptions,\n      windowsCodeSigningOptions: input.windowsCodeSigningOptions,\n      linuxDesktopOptions: input.linuxDesktopOptions,\n      iconPath: input.iconPath,\n      environment: input.environment,\n      progress: input.progress,\n    }),\n  );\n  await Promise.all(build.targets.map(writePortableInstallMetadata));\n  return new Map(build.targets.map((target) => [target.target, target]));\n};\n\n/**\n * Runs the muon build sequence and creates redistributable packages.\n *\n * @param options Pack options.\n * @returns Generated package artifacts.\n */\nexport const packMuonApp = async (\n  options: MuonPackOptions,\n): Promise<MuonPackResult> => {\n  const progress = (options as InternalMuonPackOptions).progress;\n  const cwd = resolve(options.root ?? process.cwd());\n  const environment = options.environment ?? process.env;\n  const project = await loadMuonBuildSequenceProject(cwd);\n  const root = project.root;\n  const packageJson = await readPackageJson(root);\n  const metadata = resolveMetadata(packageJson, options);\n  const artifactsRoot = resolve(\n    root,\n    options.artifactsDir ?? defaultArtifactsDirectory,\n  );\n  const packageBuildRoot = resolve(root, defaultPackageBuildDirectory);\n  const types = normalizePackTypes(options.types);\n  const linuxSandbox = normalizeLinuxSandboxMode(options.linuxSandbox);\n  const pluginBuildOptions = resolveMuonViteBuildOptions(project.pluginOptions);\n  const targetPlan = createPackTargetPlan(\n    types,\n    resolvePackTargetCandidates(options, pluginBuildOptions),\n  );\n  validateLinuxSandboxModeForPlan(linuxSandbox, targetPlan);\n  const buildOptions: MuonBuildSequenceOptions = {\n    root: cwd,\n    targets: targetPlan.map((entry) => entry.target),\n    allTargets: false,\n    includeRuntimeHelper: linuxSandbox === \"setuid\",\n  };\n  const windowsResourceOptions = mergeMuonWindowsResourceOptions(\n    options.windowsResource,\n    pluginBuildOptions.windowsResource,\n  );\n  const windowsCodeSigningOptions =\n    options.windowsCodeSigning !== undefined\n      ? options.windowsCodeSigning\n      : pluginBuildOptions.windowsCodeSigning;\n  const linuxDesktopOptions = mergeMuonLinuxDesktopOptions(\n    options.linuxDesktop,\n    pluginBuildOptions.linuxDesktop,\n  );\n  const iconPath = options.iconPath ?? pluginBuildOptions.iconPath;\n  if (options.configPath !== undefined) {\n    buildOptions.configPath = options.configPath;\n  }\n  if (iconPath !== undefined) {\n    buildOptions.iconPath = iconPath;\n  }\n  if (options.appName !== undefined) {\n    buildOptions.appName = options.appName;\n  }\n  if (options.appId !== undefined) {\n    buildOptions.appId = options.appId;\n  }\n  if (options.packageDirectory !== undefined) {\n    buildOptions.packageDirectory = options.packageDirectory;\n  }\n  if (windowsResourceOptions !== undefined) {\n    buildOptions.windowsResource = windowsResourceOptions;\n  }\n  if (windowsCodeSigningOptions !== undefined) {\n    buildOptions.windowsCodeSigning = windowsCodeSigningOptions;\n  }\n  if (linuxDesktopOptions !== undefined) {\n    buildOptions.linuxDesktop = linuxDesktopOptions;\n  }\n  if (progress !== undefined) {\n    (buildOptions as InternalMuonBuildSequenceOptions).progress = progress;\n  }\n  (buildOptions as InternalMuonBuildSequenceOptions).environment = environment;\n  const windowsResourceConfig = await readMuonConfigForWindowsResource(\n    root,\n    options.configPath,\n  );\n  const windowsResource = await resolveMuonWindowsResource({\n    root,\n    packageDirectory:\n      options.packageDirectory ?? pluginBuildOptions.packageDirectory ?? \"\",\n    packageJson: createPackMetadataPackageJson(packageJson, metadata),\n    muonConfig: windowsResourceConfig.config,\n    muonConfigDirectory: windowsResourceConfig.directory,\n    options: windowsResourceOptions,\n    appIconPath: iconPath,\n    defaults: {\n      productName: metadata.packageName,\n      fileDescription: metadata.description,\n      companyName: metadata.author,\n      version: metadata.version,\n      copyright: undefined,\n    },\n  });\n  const windowsCodeSigning = resolveMuonWindowsCodeSigning({\n    muonConfig: windowsResourceConfig.config,\n    options: windowsCodeSigningOptions,\n  });\n  progress?.({\n    phase: \"pack\",\n    status: \"Building distributions\",\n  });\n  const build = await runMuonBuildSequence(buildOptions, project);\n  if (options.packageVersion !== undefined) {\n    await reapplyPackWindowsResources(\n      build.targets,\n      windowsResource,\n      root,\n      environment,\n    );\n    await signPackWindowsExecutables(\n      build.targets,\n      windowsCodeSigning,\n      root,\n      environment,\n      progress,\n    );\n  }\n  const typesByTarget = new Map(\n    targetPlan.map((entry) => [entry.target, entry.types] as const),\n  );\n  const portableTargets = targetPlan\n    .filter((entry) => entry.types.some(isPortablePackType))\n    .map((entry) => entry.target);\n  await rm(packageBuildRoot, { recursive: true, force: true });\n  await rm(join(artifactsRoot, \"deb\"), { recursive: true, force: true });\n  await rm(join(artifactsRoot, \"nsis\"), { recursive: true, force: true });\n  await mkdir(artifactsRoot, { recursive: true });\n  const portableTargetsByTarget = await buildPortableTargets({\n    project,\n    pluginBuildOptions,\n    options,\n    packageBuildRoot,\n    targets: portableTargets,\n    windowsResourceOptions,\n    windowsCodeSigningOptions,\n    linuxDesktopOptions,\n    iconPath,\n    environment,\n    progress,\n  });\n  if (options.packageVersion !== undefined) {\n    await reapplyPackWindowsResources(\n      [...portableTargetsByTarget.values()],\n      windowsResource,\n      root,\n      environment,\n    );\n    await signPackWindowsExecutables(\n      [...portableTargetsByTarget.values()],\n      windowsCodeSigning,\n      root,\n      environment,\n      progress,\n    );\n  }\n  const artifacts: MuonPackArtifact[] = [];\n  const totalArtifacts = targetPlan.reduce(\n    (sum, entry) => sum + entry.types.length,\n    0,\n  );\n  let artifactIndex = 0;\n  for (const target of build.targets) {\n    for (const type of typesByTarget.get(target.target) ?? []) {\n      artifactIndex += 1;\n      progress?.({\n        phase: \"pack\",\n        status: `Packaging ${type} ${target.target} (${artifactIndex}/${totalArtifacts})`,\n      });\n      let artifact: MuonPackArtifact | undefined;\n      if (type === \"zip\") {\n        const portableTarget = portableTargetsByTarget.get(target.target);\n        if (portableTarget === undefined) {\n          throw new Error(`Portable target was not built: ${target.target}`);\n        }\n        artifact = await packageZip(portableTarget, metadata, artifactsRoot);\n      } else if (type === \"tar.gz\") {\n        const portableTarget = portableTargetsByTarget.get(target.target);\n        if (portableTarget === undefined) {\n          throw new Error(`Portable target was not built: ${target.target}`);\n        }\n        artifact = await packageTarGz(portableTarget, metadata, artifactsRoot);\n      } else if (type === \"deb\") {\n        artifact = await packageDeb(\n          root,\n          target,\n          metadata,\n          artifactsRoot,\n          packageBuildRoot,\n          environment,\n          linuxSandbox,\n          progress,\n        );\n      } else {\n        artifact = await packageNsis(\n          root,\n          target,\n          metadata,\n          windowsResource,\n          windowsCodeSigning,\n          artifactsRoot,\n          packageBuildRoot,\n          environment,\n          progress,\n        );\n      }\n      if (artifact === undefined) {\n        continue;\n      }\n      artifacts.push(artifact);\n      progress?.({\n        phase: \"pack\",\n        status: `Wrote ${artifact.path}`,\n      });\n    }\n  }\n  return {\n    root,\n    packageName: metadata.packageName,\n    version: metadata.version,\n    appName: build.appName,\n    appId: build.appId,\n    build,\n    targets: build.targets,\n    artifacts,\n  };\n};\n\nexport const muonPackSuppressViteBuildEnvironmentKey =\n  muonBuildSequenceSuppressViteBuildEnvironmentKey;\n","// @ts-nocheck\n// This file is auto-generated by screw-up plugin\n// Do not edit manually\n\nexport const name = \"muon-ui\";\nexport const version = \"0.16.0\";\nexport const description = \"A multi-platform GUI application framework that uses CEF as its backend\";\nexport const author = \"Kouji Matsui (@kekyo@mi.kekyo.net)\";\nexport const license = \"MIT\";\nexport const repository_url = \"https://github.com/kekyo/muon-ui.git\";\nexport const git_commit_hash = \"33c694fe496f80cab223ce4231f3249ddf6b3dd1\";\n","#!/usr/bin/env node\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 { Command } from \"commander\";\n\nimport {\n  getDefaultMuonPrepareTarget,\n  runMuonPrepare,\n  type MuonPrepareOptions,\n} from \"./prepare.js\";\nimport { ensureMuonGitignoreEntry } from \"./gitignore.js\";\nimport {\n  embedMuonConfigInLauncherFile,\n  embedMuonConfigInCoreFile,\n  embedMuonConfigInRuntime,\n  type EmbedMuonConfigResult,\n} from \"./embed-config.js\";\nimport {\n  runMuonBuildSequence,\n  type MuonBuildSequenceOptions,\n} from \"./build-sequence.js\";\nimport { runMuonDev, type MuonDevOptions } from \"./dev.js\";\nimport { packMuonApp, type MuonPackOptions } from \"./pack.js\";\nimport type { MuonWindowsResourceOptions } from \"./windows-resource.js\";\nimport type { MuonLinuxDesktopOptions } from \"./linux-desktop.js\";\nimport { git_commit_hash, version } from \"./generated/packageMetadata.js\";\nimport {\n  createMuonProgressRenderer,\n  type MuonProgressCallback,\n} from \"./progress.js\";\nimport type {\n  MuonWindowsCodeSigningOptions,\n  MuonWindowsCodeSigningTarget,\n} from \"./windows-code-signing.js\";\n\ninterface PrepareCommandOptions {\n  muonPath: string | undefined;\n  cefPath: string | undefined;\n  stageDir: string | undefined;\n  target: string | undefined;\n  cacheDir: string | undefined;\n  force: boolean | undefined;\n  quiet: boolean | undefined;\n  json: boolean | undefined;\n}\n\ninterface EmbedConfigCommandOptions {\n  runtimePath: string | undefined;\n  corePath: string | undefined;\n  launcherPath: string | undefined;\n  config: string | undefined;\n  outputRuntimePath: string | undefined;\n  output: string | undefined;\n  outputLauncher: string | undefined;\n  json: boolean | undefined;\n}\n\ninterface BuildCommandOptions {\n  target: string[];\n  all: boolean | undefined;\n  assets: string | undefined;\n  config: string | undefined;\n  icon: string | undefined;\n  windowsIcon: string | undefined;\n  windowsProductName: string | undefined;\n  windowsFileDescription: string | undefined;\n  windowsCompanyName: string | undefined;\n  windowsVersion: string | undefined;\n  windowsCopyright: string | undefined;\n  windowsSignCommand: string | undefined;\n  windowsSignArg: string[] | undefined;\n  windowsSignTarget: string[] | undefined;\n  windowsCodeSigning: boolean | undefined;\n  linuxDesktopId: string | undefined;\n  linuxName: string | undefined;\n  linuxComment: string | undefined;\n  linuxIcon: string | undefined;\n  linuxCategories: string | undefined;\n  linuxStartupNotify: string | undefined;\n  outDir: string | undefined;\n  name: string | undefined;\n  appId: string | undefined;\n  packageDirectory: string | undefined;\n  json: boolean | undefined;\n}\n\ninterface PackCommandOptions {\n  type: string[] | undefined;\n  target: string[];\n  all: boolean | undefined;\n  config: string | undefined;\n  icon: string | undefined;\n  windowsIcon: string | undefined;\n  windowsProductName: string | undefined;\n  windowsFileDescription: string | undefined;\n  windowsCompanyName: string | undefined;\n  windowsVersion: string | undefined;\n  windowsCopyright: string | undefined;\n  windowsSignCommand: string | undefined;\n  windowsSignArg: string[] | undefined;\n  windowsSignTarget: string[] | undefined;\n  windowsCodeSigning: boolean | undefined;\n  linuxDesktopId: string | undefined;\n  linuxName: string | undefined;\n  linuxComment: string | undefined;\n  linuxIcon: string | undefined;\n  linuxCategories: string | undefined;\n  linuxStartupNotify: string | undefined;\n  linuxSandbox: string | undefined;\n  name: string | undefined;\n  appId: string | undefined;\n  packageDirectory: string | undefined;\n  artifactsDir: string | undefined;\n  packageName: string | undefined;\n  packageVersion: string | undefined;\n  description: string | undefined;\n  author: string | undefined;\n  json: boolean | undefined;\n}\n\ninterface DevCommandOptions {\n  muonPath: string | undefined;\n  cefPath: string | undefined;\n  stageDir: string | undefined;\n  config: string | undefined;\n  assets: string | undefined;\n  debugger: boolean | undefined;\n  json: boolean | undefined;\n}\n\ninterface InternalMuonBuildSequenceOptions extends MuonBuildSequenceOptions {\n  progress?: MuonProgressCallback;\n}\n\ninterface InternalMuonPackOptions extends MuonPackOptions {\n  progress?: MuonProgressCallback;\n}\n\nconst readTargetValues = (value: string): string[] => {\n  return value\n    .split(\",\")\n    .map((value) => value.trim())\n    .filter((value) => value.length > 0);\n};\n\nconst appendTargetValues = (value: string, previous: string[]): string[] => {\n  return [...previous, ...readTargetValues(value)];\n};\n\nconst appendPackTypeValues = (\n  value: string,\n  previous: string[] | undefined,\n): string[] => {\n  return [...(previous ?? []), ...readTargetValues(value)];\n};\n\nconst appendWindowsSignArgValue = (\n  value: string,\n  previous: string[] | undefined,\n): string[] => {\n  return [...(previous ?? []), value];\n};\n\nconst appendWindowsSignTargetValues = (\n  value: string,\n  previous: string[] | undefined,\n): string[] => {\n  return [...(previous ?? []), ...readTargetValues(value)];\n};\n\nconst readCommaSeparatedValues = (value: string): string[] =>\n  value\n    .split(\",\")\n    .map((entry) => entry.trim())\n    .filter((entry) => entry.length > 0);\n\nconst readBooleanValue = (value: string, label: string): boolean => {\n  const normalized = value.trim().toLowerCase();\n  if (normalized === \"true\" || normalized === \"1\" || normalized === \"yes\") {\n    return true;\n  }\n  if (normalized === \"false\" || normalized === \"0\" || normalized === \"no\") {\n    return false;\n  }\n  throw new Error(`${label} must be true or false.`);\n};\n\nconst validateEmbedConfigOptions = (\n  options: EmbedConfigCommandOptions,\n): void => {\n  if (options.runtimePath !== undefined && options.corePath !== undefined) {\n    throw new Error(\"Specify at most one of --runtime-path or --core-path.\");\n  }\n  if (\n    options.runtimePath === undefined &&\n    options.corePath === undefined &&\n    options.launcherPath === undefined\n  ) {\n    throw new Error(\n      \"Specify at least one of --runtime-path, --core-path, or --launcher-path.\",\n    );\n  }\n  if (\n    options.corePath !== undefined &&\n    options.outputRuntimePath !== undefined\n  ) {\n    throw new Error(\"--output-runtime-path requires --runtime-path.\");\n  }\n  if (options.runtimePath !== undefined && options.output !== undefined) {\n    throw new Error(\"--output requires --core-path.\");\n  }\n  if (\n    options.launcherPath === undefined &&\n    options.outputLauncher !== undefined\n  ) {\n    throw new Error(\"--output-launcher requires --launcher-path.\");\n  }\n};\n\nconst createWindowsResourceOptions = (commandOptions: {\n  windowsIcon: string | undefined;\n  windowsProductName: string | undefined;\n  windowsFileDescription: string | undefined;\n  windowsCompanyName: string | undefined;\n  windowsVersion: string | undefined;\n  windowsCopyright: string | undefined;\n}): MuonWindowsResourceOptions | undefined => {\n  const options: MuonWindowsResourceOptions = {};\n  if (commandOptions.windowsIcon !== undefined) {\n    options.iconPath = commandOptions.windowsIcon;\n  }\n  if (commandOptions.windowsProductName !== undefined) {\n    options.productName = commandOptions.windowsProductName;\n  }\n  if (commandOptions.windowsFileDescription !== undefined) {\n    options.fileDescription = commandOptions.windowsFileDescription;\n  }\n  if (commandOptions.windowsCompanyName !== undefined) {\n    options.companyName = commandOptions.windowsCompanyName;\n  }\n  if (commandOptions.windowsVersion !== undefined) {\n    options.version = commandOptions.windowsVersion;\n  }\n  if (commandOptions.windowsCopyright !== undefined) {\n    options.copyright = commandOptions.windowsCopyright;\n  }\n  return Object.keys(options).length === 0 ? undefined : options;\n};\n\nconst createLinuxDesktopOptions = (commandOptions: {\n  linuxDesktopId: string | undefined;\n  linuxName: string | undefined;\n  linuxComment: string | undefined;\n  linuxIcon: string | undefined;\n  linuxCategories: string | undefined;\n  linuxStartupNotify: string | undefined;\n}): MuonLinuxDesktopOptions | undefined => {\n  const options: MuonLinuxDesktopOptions = {};\n  if (commandOptions.linuxDesktopId !== undefined) {\n    options.desktopId = commandOptions.linuxDesktopId;\n  }\n  if (commandOptions.linuxName !== undefined) {\n    options.name = commandOptions.linuxName;\n  }\n  if (commandOptions.linuxComment !== undefined) {\n    options.comment = commandOptions.linuxComment;\n  }\n  if (commandOptions.linuxIcon !== undefined) {\n    options.iconPath = commandOptions.linuxIcon;\n  }\n  if (commandOptions.linuxCategories !== undefined) {\n    options.categories = readCommaSeparatedValues(\n      commandOptions.linuxCategories,\n    );\n  }\n  if (commandOptions.linuxStartupNotify !== undefined) {\n    options.startupNotify = readBooleanValue(\n      commandOptions.linuxStartupNotify,\n      \"--linux-startup-notify\",\n    );\n  }\n  return Object.keys(options).length === 0 ? undefined : options;\n};\n\nconst createWindowsCodeSigningOptions = (\n  commandOptions: {\n    windowsSignCommand: string | undefined;\n    windowsSignArg: string[] | undefined;\n    windowsSignTarget: string[] | undefined;\n    windowsCodeSigning: boolean | undefined;\n  },\n  command: Command,\n): false | MuonWindowsCodeSigningOptions | undefined => {\n  if (\n    command.getOptionValueSource(\"windowsCodeSigning\") === \"cli\" &&\n    commandOptions.windowsCodeSigning === false\n  ) {\n    return false;\n  }\n  const args = commandOptions.windowsSignArg ?? [];\n  const targets = commandOptions.windowsSignTarget ?? [];\n  if (commandOptions.windowsSignCommand === undefined) {\n    if (args.length > 0 || targets.length > 0) {\n      throw new Error(\n        \"--windows-sign-command is required when Windows signing arguments or targets are specified.\",\n      );\n    }\n    return undefined;\n  }\n\n  const options: MuonWindowsCodeSigningOptions = {\n    command: commandOptions.windowsSignCommand,\n    args,\n  };\n  if (targets.length > 0) {\n    options.targets = targets as MuonWindowsCodeSigningTarget[];\n  }\n  return options;\n};\n\nconst runBuildCommand = async (\n  commandOptions: BuildCommandOptions,\n  command: Command,\n): Promise<void> => {\n  const targets = commandOptions.target;\n  if (commandOptions.all === true && targets.length > 0) {\n    throw new Error(\"Specify either --all or --target, not both.\");\n  }\n\n  const buildOptions: MuonBuildSequenceOptions = {\n    root: process.cwd(),\n    defaultAllTargets: false,\n  };\n\n  if (targets.length > 0) {\n    buildOptions.targets = targets;\n  }\n  if (commandOptions.all === true) {\n    buildOptions.allTargets = true;\n  }\n  if (commandOptions.assets !== undefined) {\n    buildOptions.assetSourcePath = commandOptions.assets;\n  }\n  if (commandOptions.config !== undefined) {\n    buildOptions.configPath = commandOptions.config;\n  }\n  if (commandOptions.icon !== undefined) {\n    buildOptions.iconPath = commandOptions.icon;\n  }\n  const windowsResource = createWindowsResourceOptions(commandOptions);\n  if (windowsResource !== undefined) {\n    buildOptions.windowsResource = windowsResource;\n  }\n  const windowsCodeSigning = createWindowsCodeSigningOptions(\n    commandOptions,\n    command,\n  );\n  if (windowsCodeSigning !== undefined) {\n    buildOptions.windowsCodeSigning = windowsCodeSigning;\n  }\n  const linuxDesktop = createLinuxDesktopOptions(commandOptions);\n  if (linuxDesktop !== undefined) {\n    buildOptions.linuxDesktop = linuxDesktop;\n  }\n  if (commandOptions.outDir !== undefined) {\n    buildOptions.outputRoot = commandOptions.outDir;\n  }\n  if (commandOptions.name !== undefined) {\n    buildOptions.appName = commandOptions.name;\n  }\n  if (commandOptions.appId !== undefined) {\n    buildOptions.appId = commandOptions.appId;\n  }\n  if (commandOptions.packageDirectory !== undefined) {\n    buildOptions.packageDirectory = commandOptions.packageDirectory;\n  }\n\n  const progressRenderer = createMuonProgressRenderer();\n  (buildOptions as InternalMuonBuildSequenceOptions).progress =\n    progressRenderer.report;\n  const result = await (async () => {\n    try {\n      return await runMuonBuildSequence(buildOptions);\n    } finally {\n      progressRenderer.flush();\n    }\n  })();\n  if (commandOptions.json === true) {\n    console.log(JSON.stringify(result, null, 2));\n  } else {\n    for (const target of result.targets) {\n      console.log(target.outputPath);\n    }\n  }\n};\n\nconst runPackCommand = async (\n  commandOptions: PackCommandOptions,\n  command: Command,\n): Promise<void> => {\n  const targets = commandOptions.target;\n  if (commandOptions.all === true && targets.length > 0) {\n    throw new Error(\"Specify either --all or --target, not both.\");\n  }\n\n  const packOptions: MuonPackOptions = {\n    root: process.cwd(),\n    environment: process.env,\n  };\n  if (commandOptions.type !== undefined) {\n    packOptions.types = commandOptions.type;\n  }\n  if (targets.length > 0) {\n    packOptions.targets = targets;\n  }\n  if (commandOptions.all !== undefined) {\n    packOptions.allTargets = commandOptions.all;\n  }\n  if (commandOptions.config !== undefined) {\n    packOptions.configPath = commandOptions.config;\n  }\n  if (commandOptions.icon !== undefined) {\n    packOptions.iconPath = commandOptions.icon;\n  }\n  const windowsResource = createWindowsResourceOptions(commandOptions);\n  if (windowsResource !== undefined) {\n    packOptions.windowsResource = windowsResource;\n  }\n  const windowsCodeSigning = createWindowsCodeSigningOptions(\n    commandOptions,\n    command,\n  );\n  if (windowsCodeSigning !== undefined) {\n    packOptions.windowsCodeSigning = windowsCodeSigning;\n  }\n  const linuxDesktop = createLinuxDesktopOptions(commandOptions);\n  if (linuxDesktop !== undefined) {\n    packOptions.linuxDesktop = linuxDesktop;\n  }\n  if (commandOptions.linuxSandbox !== undefined) {\n    packOptions.linuxSandbox = commandOptions.linuxSandbox;\n  }\n  if (commandOptions.name !== undefined) {\n    packOptions.appName = commandOptions.name;\n  }\n  if (commandOptions.appId !== undefined) {\n    packOptions.appId = commandOptions.appId;\n  }\n  if (commandOptions.packageDirectory !== undefined) {\n    packOptions.packageDirectory = commandOptions.packageDirectory;\n  }\n  if (commandOptions.artifactsDir !== undefined) {\n    packOptions.artifactsDir = commandOptions.artifactsDir;\n  }\n  if (commandOptions.packageName !== undefined) {\n    packOptions.packageName = commandOptions.packageName;\n  }\n  if (commandOptions.packageVersion !== undefined) {\n    packOptions.packageVersion = commandOptions.packageVersion;\n  }\n  if (commandOptions.description !== undefined) {\n    packOptions.description = commandOptions.description;\n  }\n  if (commandOptions.author !== undefined) {\n    packOptions.author = commandOptions.author;\n  }\n\n  const progressRenderer = createMuonProgressRenderer();\n  (packOptions as InternalMuonPackOptions).progress = progressRenderer.report;\n  const result = await (async () => {\n    try {\n      return await packMuonApp(packOptions);\n    } finally {\n      progressRenderer.flush();\n    }\n  })();\n  if (commandOptions.json === true) {\n    console.log(JSON.stringify(result, null, 2));\n  } else {\n    for (const artifact of result.artifacts) {\n      console.log(artifact.path);\n    }\n  }\n};\n\nconst runPrepareCommand = async (\n  commandOptions: PrepareCommandOptions,\n): Promise<void> => {\n  const prepareOptions: MuonPrepareOptions = {\n    muonPath: commandOptions.muonPath ?? \"\",\n    cefPath: commandOptions.cefPath,\n    stageDir: commandOptions.stageDir,\n    target:\n      commandOptions.target ??\n      getDefaultMuonPrepareTarget(process.platform, process.arch),\n    cacheDir: commandOptions.cacheDir,\n    force: commandOptions.force === true,\n    quiet: commandOptions.quiet === true,\n    prepareExecutablePath: undefined,\n    environment: process.env,\n    cwd: process.cwd(),\n  };\n  const result = await runMuonPrepare(prepareOptions);\n  if (commandOptions.json === true) {\n    console.log(JSON.stringify(result, null, 2));\n  } else {\n    console.log(result.stagePath ?? result.cefPath);\n  }\n};\n\nconst runDevCommand = async (\n  commandOptions: DevCommandOptions,\n  command: Command,\n): Promise<void> => {\n  const devOptions: MuonDevOptions = {\n    root: process.cwd(),\n    environment: process.env,\n    quietPrepare: commandOptions.json === true,\n  };\n\n  if (commandOptions.muonPath !== undefined) {\n    devOptions.muonPath = commandOptions.muonPath;\n  }\n  if (commandOptions.cefPath !== undefined) {\n    devOptions.cefPath = commandOptions.cefPath;\n  }\n  if (commandOptions.stageDir !== undefined) {\n    devOptions.stagePath = commandOptions.stageDir;\n  }\n  if (commandOptions.config !== undefined) {\n    devOptions.configPath = commandOptions.config;\n  }\n  if (commandOptions.assets !== undefined) {\n    devOptions.assetSourcePath = commandOptions.assets;\n  }\n  if (command.getOptionValueSource(\"debugger\") === \"cli\") {\n    devOptions.enableDebugger = commandOptions.debugger === true;\n  }\n\n  const result = await runMuonDev(devOptions);\n  if (commandOptions.json === true) {\n    console.log(JSON.stringify(result, null, 2));\n  }\n  if (result.exitCode !== 0) {\n    process.exitCode = result.exitCode;\n  }\n};\n\nconst runInitCommand = async (): Promise<void> => {\n  const result = await ensureMuonGitignoreEntry(process.cwd());\n  console.log(\n    result.changed ? `Updated ${result.gitignorePath}` : result.gitignorePath,\n  );\n};\n\nconst printEmbedConfigResult = (\n  result: EmbedMuonConfigResult,\n  json: boolean | undefined,\n): void => {\n  if (json === true) {\n    console.log(JSON.stringify(result, null, 2));\n  } else {\n    console.log(result.outputPath);\n  }\n};\n\nconst runEmbedConfigCommand = async (\n  commandOptions: EmbedConfigCommandOptions,\n): Promise<void> => {\n  validateEmbedConfigOptions(commandOptions);\n  const configPath = commandOptions.config ?? \"\";\n  const coreResult =\n    commandOptions.corePath !== undefined\n      ? await embedMuonConfigInCoreFile({\n          corePath: commandOptions.corePath,\n          configPath,\n          outputPath: commandOptions.output,\n        })\n      : commandOptions.runtimePath !== undefined\n        ? await embedMuonConfigInRuntime({\n            runtimePath: commandOptions.runtimePath,\n            configPath,\n            outputRuntimePath: commandOptions.outputRuntimePath,\n          })\n        : undefined;\n  const launcherResult =\n    commandOptions.launcherPath === undefined\n      ? undefined\n      : await embedMuonConfigInLauncherFile({\n          launcherPath: commandOptions.launcherPath,\n          configPath,\n          outputPath: commandOptions.outputLauncher,\n        });\n  if (coreResult !== undefined && launcherResult !== undefined) {\n    if (commandOptions.json === true) {\n      console.log(\n        JSON.stringify(\n          {\n            core: coreResult,\n            launcher: launcherResult,\n          },\n          null,\n          2,\n        ),\n      );\n    } else {\n      console.log(`${coreResult.outputPath}\\n${launcherResult.outputPath}`);\n    }\n    return;\n  }\n  const result = coreResult ?? launcherResult;\n  if (result === undefined) {\n    throw new Error(\"No embed-config target was specified.\");\n  }\n  printEmbedConfigResult(result, commandOptions.json);\n};\n\nconst createCliCommand = (): Command => {\n  const program = new Command();\n\n  program\n    .name(\"muon\")\n    .description(\n      \"Multi-platform GUI application framework that uses CEF as its backend\",\n    )\n    .version(`${version}-${git_commit_hash}`)\n    .showSuggestionAfterError()\n    .action(() => {\n      program.outputHelp({ error: true });\n      process.exitCode = 1;\n    });\n\n  program\n    .command(\"build\")\n    .description(\"Build CEF-free muon app distribution directories\")\n    .option(\n      \"--target <target>\",\n      \"public target or comma-separated public targets\",\n      appendTargetValues,\n      [],\n    )\n    .option(\"--all\", \"build all supported targets\")\n    .option(\"--assets <path>\", \"asset root path\")\n    .option(\"--config <path>\", \"muon config path\")\n    .option(\"--icon <path>\", \"static application PNG icon path\")\n    .option(\"--windows-icon <path>\", \"Windows PNG icon resource path\")\n    .option(\"--windows-product-name <name>\", \"Windows product name\")\n    .option(\"--windows-file-description <text>\", \"Windows file description\")\n    .option(\"--windows-company-name <name>\", \"Windows company name\")\n    .option(\"--windows-version <version>\", \"Windows resource version\")\n    .option(\"--windows-copyright <text>\", \"Windows legal copyright\")\n    .option(\"--windows-sign-command <command>\", \"Windows code signing command\")\n    .option(\n      \"--windows-sign-arg <arg>\",\n      \"Windows code signing command argument\",\n      appendWindowsSignArgValue,\n    )\n    .option(\n      \"--windows-sign-target <target>\",\n      \"Windows code signing target or comma-separated targets\",\n      appendWindowsSignTargetValues,\n    )\n    .option(\"--no-windows-code-signing\", \"disable muon.json Windows signing\")\n    .option(\"--linux-desktop-id <id>\", \"Linux desktop entry identifier\")\n    .option(\"--linux-name <name>\", \"Linux desktop display name\")\n    .option(\"--linux-comment <text>\", \"Linux desktop comment\")\n    .option(\"--linux-icon <path>\", \"Linux desktop PNG icon path\")\n    .option(\"--linux-categories <list>\", \"Linux desktop categories\")\n    .option(\"--linux-startup-notify <boolean>\", \"Linux startup notification\")\n    .option(\"--out-dir <path>\", \"output root directory\")\n    .option(\"--name <name>\", \"launcher file name\")\n    .option(\"--app-id <id>\", \"stable application identifier\")\n    .option(\"--package-directory <path>\", \"muon package dist directory\")\n    .option(\"--json\", \"write result as JSON\")\n    .action(async (options: BuildCommandOptions, command: Command) => {\n      await runBuildCommand(options, command);\n    });\n\n  program\n    .command(\"pack\")\n    .description(\"Build and package a muon app\")\n    .option(\n      \"--type <type>\",\n      \"package type or comma-separated package types: zip, tar.gz, tgz, deb, nsis (default: all)\",\n      appendPackTypeValues,\n    )\n    .option(\n      \"--target <target>\",\n      \"public target, platform, arch, or comma-separated selectors\",\n      appendTargetValues,\n      [],\n    )\n    .option(\"--all\", \"build all supported targets\")\n    .option(\"--config <path>\", \"muon config path\")\n    .option(\"--icon <path>\", \"static application PNG icon path\")\n    .option(\"--windows-icon <path>\", \"Windows PNG icon resource path\")\n    .option(\"--windows-product-name <name>\", \"Windows product name\")\n    .option(\"--windows-file-description <text>\", \"Windows file description\")\n    .option(\"--windows-company-name <name>\", \"Windows company name\")\n    .option(\"--windows-version <version>\", \"Windows resource version\")\n    .option(\"--windows-copyright <text>\", \"Windows legal copyright\")\n    .option(\"--windows-sign-command <command>\", \"Windows code signing command\")\n    .option(\n      \"--windows-sign-arg <arg>\",\n      \"Windows code signing command argument\",\n      appendWindowsSignArgValue,\n    )\n    .option(\n      \"--windows-sign-target <target>\",\n      \"Windows code signing target or comma-separated targets\",\n      appendWindowsSignTargetValues,\n    )\n    .option(\"--no-windows-code-signing\", \"disable muon.json Windows signing\")\n    .option(\"--linux-desktop-id <id>\", \"Linux desktop entry identifier\")\n    .option(\"--linux-name <name>\", \"Linux desktop display name\")\n    .option(\"--linux-comment <text>\", \"Linux desktop comment\")\n    .option(\"--linux-icon <path>\", \"Linux desktop PNG icon path\")\n    .option(\"--linux-categories <list>\", \"Linux desktop categories\")\n    .option(\"--linux-startup-notify <boolean>\", \"Linux startup notification\")\n    .option(\n      \"--linux-sandbox <mode>\",\n      \"Linux deb CEF sandbox mode: disabled, setuid\",\n    )\n    .option(\"--name <name>\", \"launcher file name\")\n    .option(\"--app-id <id>\", \"stable application identifier\")\n    .option(\"--package-directory <path>\", \"muon package dist directory\")\n    .option(\"--artifacts-dir <path>\", \"package artifact output directory\")\n    .option(\"--package-name <name>\", \"package name override\")\n    .option(\"--package-version <version>\", \"package version override\")\n    .option(\"--description <text>\", \"package description override\")\n    .option(\"--author <text>\", \"package author override\")\n    .option(\"--json\", \"write result as JSON\")\n    .action(async (options: PackCommandOptions, command: Command) => {\n      await runPackCommand(options, command);\n    });\n\n  const devCommand = program\n    .command(\"run\")\n    .description(\"Launch muon directly with local development assets\")\n    .option(\"--muon-path <path>\", \"muon runtime file root\")\n    .option(\"--cef-path <path>\", \"CEF file root\")\n    .option(\"--stage-dir <path>\", \"prepared runtime output directory\")\n    .option(\"--config <path>\", \"muon config path\")\n    .option(\"--assets <path>\", \"development asset directory\")\n    .option(\"--no-debugger\", \"disable muon debugger defaults\")\n    .option(\"--json\", \"write result as JSON\")\n    .action(async (options: DevCommandOptions) => {\n      await runDevCommand(options, devCommand);\n    });\n\n  program\n    .command(\"init\")\n    .description(\"Initialize muon project helper files\")\n    .action(async () => {\n      await runInitCommand();\n    });\n\n  program\n    .command(\"prepare\")\n    .description(\"Prepare a muon runtime with CEF files\")\n    .requiredOption(\"--muon-path <path>\", \"muon runtime file root\")\n    .option(\"--cef-path <path>\", \"CEF file root\")\n    .option(\"--stage-dir <path>\", \"prepared runtime output directory\")\n    .option(\"--target <target>\", \"prepare target\")\n    .option(\"--cache-dir <path>\", \"CEF artifact cache directory\")\n    .option(\"--force\", \"rebuild an existing prepared runtime\")\n    .option(\"-q, --quiet\", \"suppress native builder progress messages\")\n    .option(\"--json\", \"write result as JSON\")\n    .action(async (options: PrepareCommandOptions) => {\n      await runPrepareCommand(options);\n    });\n\n  program\n    .command(\"embed-config\")\n    .description(\"Embed muon.json into muon runtime files\")\n    .option(\"--runtime-path <path>\", \"prepared runtime directory\")\n    .option(\"--core-path <path>\", \"muon-core executable path\")\n    .option(\"--launcher-path <path>\", \"muon-launcher executable path\")\n    .requiredOption(\"--config <path>\", \"muon config path\")\n    .option(\"--output-runtime-path <path>\", \"patched runtime output directory\")\n    .option(\"--output <path>\", \"patched muon-core output path\")\n    .option(\"--output-launcher <path>\", \"patched launcher output path\")\n    .option(\"--json\", \"write result as JSON\")\n    .action(async (options: EmbedConfigCommandOptions) => {\n      await runEmbedConfigCommand(options);\n    });\n\n  return program;\n};\n\nconst main = async (): Promise<void> => {\n  try {\n    await createCliCommand().parseAsync(process.argv);\n  } catch (error) {\n    console.error(error instanceof Error ? error.message : String(error));\n    process.exitCode = 1;\n  }\n};\n\nvoid main();\n"],"mappings":"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"}