muon-ui 0.18.0 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +11 -9
- package/dist/cli.cjs.map +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/native/linux-amd64/muon-builder +0 -0
- package/dist/native/linux-amd64/muon-launcher +0 -0
- package/dist/native/linux-amd64/muon-runtime-helper +0 -0
- package/dist/native/linux-arm64/muon-builder +0 -0
- package/dist/native/linux-arm64/muon-launcher +0 -0
- package/dist/native/linux-arm64/muon-runtime-helper +0 -0
- package/dist/native/linux-armhf/muon-builder +0 -0
- package/dist/native/linux-armhf/muon-launcher +0 -0
- package/dist/native/linux-armhf/muon-runtime-helper +0 -0
- package/dist/native/windows-amd64/muon-builder.exe +0 -0
- package/dist/native/windows-amd64/muon-launcher.exe +0 -0
- package/dist/native/windows-amd64/muon-plugin-inspector.exe +0 -0
- package/dist/native/windows-i686/muon-builder.exe +0 -0
- package/dist/native/windows-i686/muon-launcher.exe +0 -0
- package/dist/native/windows-i686/muon-plugin-inspector.exe +0 -0
- package/dist/runtime/linux-amd64/muon-core +0 -0
- package/dist/runtime/linux-arm64/muon-core +0 -0
- package/dist/runtime/linux-armhf/muon-core +0 -0
- package/dist/runtime/windows-amd64/libcardio.dll +0 -0
- package/dist/runtime/windows-amd64/libmuon-ui.dll +0 -0
- package/dist/runtime/windows-amd64/muon-core.exe +0 -0
- package/dist/runtime/windows-i686/libcardio.dll +0 -0
- package/dist/runtime/windows-i686/libmuon-ui.dll +0 -0
- package/dist/runtime/windows-i686/muon-core.exe +0 -0
- package/dist/{vite-internals-_Wv0-FW6.cjs → vite-internals-BqnOn7M6.cjs} +7 -7
- package/dist/{vite-internals-_Wv0-FW6.cjs.map → vite-internals-BqnOn7M6.cjs.map} +1 -1
- package/dist/vite.cjs +3 -3
- package/dist/vite.cjs.map +1 -1
- package/dist/vite.mjs +5 -5
- package/dist/vite.mjs.map +1 -1
- package/package.json +7 -7
- package/vite.d.ts +10 -0
package/dist/cli.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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 viteServerProxyConfigured: boolean;\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 viteServerProxyConfigured: boolean;\n}\n\ninterface InternalMuonDevOptions extends MuonDevOptions {\n warning?: (message: string) => void;\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 hasViteServerProxyConfiguration = (proxy: unknown): boolean =>\n typeof proxy === \"object\" && proxy !== null && Object.keys(proxy).length > 0;\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 viteServerProxyConfigured: false,\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 viteServerProxyConfigured: false,\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 viteServerProxyConfigured: hasViteServerProxyConfiguration(\n config.server?.proxy,\n ),\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 viteServerProxyConfigured: project.viteServerProxyConfigured,\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 reportViteServerProxyWarning: () => void,\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 viteServerProxyConfigured:\n preparedViteAssets.viteServerProxyConfigured,\n };\n if (loadedViteOptions.viteServerProxyConfigured) {\n reportViteServerProxyWarning();\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 const warning = (options as InternalMuonDevOptions).warning;\n let viteServerProxyWarningReported = false;\n const reportViteServerProxyWarning = (): void => {\n if (viteServerProxyWarningReported) {\n return;\n }\n warning?.(\n \"Vite server proxy configuration is only available during Vite development and is not used by muon run.\",\n );\n viteServerProxyWarningReported = true;\n };\n let result: MuonDevResult;\n do {\n result = await runMuonDevOnce(options, cwd, reportViteServerProxyWarning);\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.18.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 = \"cf5b421289da62d14ebb01f7b15acc02ac6d7750\";\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\ninterface InternalMuonDevOptions extends MuonDevOptions {\n warning?: (message: string) => void;\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 (devOptions as InternalMuonDevOptions).warning = (message): void => {\n console.warn(`Warning: ${message}`);\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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"}
|
|
1
|
+
{"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 viteServerProxyConfigured: boolean;\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 viteServerProxyConfigured: boolean;\n}\n\ninterface InternalMuonDevOptions extends MuonDevOptions {\n warning?: (message: string) => void;\n allowInsecureLocalhost?: boolean;\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 hasViteServerProxyConfiguration = (proxy: unknown): boolean =>\n typeof proxy === \"object\" && proxy !== null && Object.keys(proxy).length > 0;\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 viteServerProxyConfigured: false,\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 viteServerProxyConfigured: false,\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 viteServerProxyConfigured: hasViteServerProxyConfiguration(\n config.server?.proxy,\n ),\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 viteServerProxyConfigured: project.viteServerProxyConfigured,\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 allowInsecureLocalhost: boolean,\n environment: NodeJS.ProcessEnv,\n): Promise<number> => {\n const args = [\n ...configPaths.flatMap((configPath) => [\"-c\", configPath]),\n ...(allowInsecureLocalhost ? [\"--allow-insecure-localhost\"] : []),\n ];\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 reportViteServerProxyWarning: () => void,\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 viteServerProxyConfigured:\n preparedViteAssets.viteServerProxyConfigured,\n };\n if (loadedViteOptions.viteServerProxyConfigured) {\n reportViteServerProxyWarning();\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 allowInsecureLocalhost =\n (options as InternalMuonDevOptions).allowInsecureLocalhost ??\n pluginOptions?.allowInsecureLocalhost ??\n false;\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 allowInsecureLocalhost,\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 const warning = (options as InternalMuonDevOptions).warning;\n let viteServerProxyWarningReported = false;\n const reportViteServerProxyWarning = (): void => {\n if (viteServerProxyWarningReported) {\n return;\n }\n warning?.(\n \"Vite server proxy configuration is only available during Vite development and is not used by muon run.\",\n );\n viteServerProxyWarningReported = true;\n };\n let result: MuonDevResult;\n do {\n result = await runMuonDevOnce(options, cwd, reportViteServerProxyWarning);\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.19.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 = \"7b7fb7ea982e11163531485618fa27453d547280\";\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 allowInsecureLocalhost: 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\ninterface InternalMuonDevOptions extends MuonDevOptions {\n warning?: (message: string) => void;\n allowInsecureLocalhost?: boolean;\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 (devOptions as InternalMuonDevOptions).warning = (message): void => {\n console.warn(`Warning: ${message}`);\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 if (commandOptions.allowInsecureLocalhost === true) {\n (devOptions as InternalMuonDevOptions).allowInsecureLocalhost = 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(\n \"--allow-insecure-localhost\",\n \"ignore invalid HTTPS certificates for localhost\",\n )\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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"}
|