muon-ui 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +1 -0
  2. package/dist/cli.cjs +269 -120
  3. package/dist/cli.cjs.map +1 -1
  4. package/dist/index.cjs +2 -2
  5. package/dist/index.mjs +2 -2
  6. package/dist/native/linux-amd64/muon-bootstrap +0 -0
  7. package/dist/native/linux-amd64/muon-builder +0 -0
  8. package/dist/native/linux-arm64/muon-bootstrap +0 -0
  9. package/dist/native/linux-arm64/{muon-prepare → muon-builder} +0 -0
  10. package/dist/native/linux-armhf/muon-bootstrap +0 -0
  11. package/dist/native/linux-armhf/{muon-prepare → muon-builder} +0 -0
  12. package/dist/native/muon-bootstrap.png +0 -0
  13. package/dist/native/windows-amd64/muon-bootstrap.exe +0 -0
  14. package/dist/native/windows-amd64/muon-builder.exe +0 -0
  15. package/dist/native/windows-i686/muon-bootstrap.exe +0 -0
  16. package/dist/native/windows-i686/muon-builder.exe +0 -0
  17. package/dist/runtime/linux-amd64/CREDITS.md +24 -0
  18. package/dist/runtime/linux-amd64/muon-core +0 -0
  19. package/dist/runtime/linux-arm64/CREDITS.md +24 -0
  20. package/dist/runtime/linux-arm64/muon-core +0 -0
  21. package/dist/runtime/linux-armhf/CREDITS.md +24 -0
  22. package/dist/runtime/linux-armhf/muon-core +0 -0
  23. package/dist/runtime/windows-amd64/CREDITS.md +24 -0
  24. package/dist/runtime/windows-amd64/libcardio.dll +0 -0
  25. package/dist/runtime/windows-amd64/libmuon-ui.dll +0 -0
  26. package/dist/runtime/windows-amd64/muon-core.exe +0 -0
  27. package/dist/runtime/windows-i686/CREDITS.md +24 -0
  28. package/dist/runtime/windows-i686/libcardio.dll +0 -0
  29. package/dist/runtime/windows-i686/libmuon-ui.dll +0 -0
  30. package/dist/runtime/windows-i686/muon-core.exe +0 -0
  31. package/dist/{vite-options-FFh0NWUa.cjs → vite-internals-ChWiL2TL.cjs} +1225 -102
  32. package/dist/vite-internals-ChWiL2TL.cjs.map +1 -0
  33. package/dist/vite.cjs +10 -8
  34. package/dist/vite.cjs.map +1 -1
  35. package/dist/vite.mjs +876 -49
  36. package/dist/vite.mjs.map +1 -1
  37. package/muon.d.ts +129 -27
  38. package/package.json +14 -10
  39. package/vite.d.ts +165 -13
  40. package/dist/native/linux-amd64/muon-prepare +0 -0
  41. package/dist/native/windows-amd64/muon-prepare.exe +0 -0
  42. package/dist/native/windows-i686/muon-prepare.exe +0 -0
  43. package/dist/vite-options-FFh0NWUa.cjs.map +0 -1
package/dist/vite.cjs CHANGED
@@ -1,25 +1,25 @@
1
1
  /*!
2
2
  * name: muon-ui
3
- * version: 0.7.0
3
+ * version: 0.8.0
4
4
  * description: A multi-platform GUI application framework that uses CEF as its backend
5
5
  * author: Kouji Matsui (@kekyo@mi.kekyo.net)
6
6
  * license: MIT
7
7
  * repository.url: https://github.com/kekyo/muon-ui.git
8
- * git.commit.hash: fe80718aaa617c0c0ea5c816bbe38d22bf2e8402
8
+ * git.commit.hash: 9bb6148e155dab16c4ca441073b144e21981b038
9
9
  */
10
- const require_vite_options = require("./vite-options-FFh0NWUa.cjs");
10
+ const require_vite_internals = require("./vite-internals-ChWiL2TL.cjs");
11
11
  let node_path = require("node:path");
12
12
  //#region src/vite.ts
13
- var suppressViteMuonBuildEnvironmentKey = "MUON_SUPPRESS_VITE_MUON_BUILD";
14
13
  /**
15
14
  * Creates a Vite plugin that launches Muon during Vite dev startup.
16
15
  *
17
16
  * @param options Muon plugin options used for development startup and build.
18
17
  * @returns Vite plugin instance.
18
+ * @defaultValue `options` defaults to `{}`.
19
19
  */
20
20
  var muon = (options = {}) => {
21
21
  let resolvedConfig = void 0;
22
- return require_vite_options.attachMuonVitePluginOptions({
22
+ return require_vite_internals.attachMuonVitePluginOptions({
23
23
  name: "muon",
24
24
  config: (config) => {
25
25
  if (config.server?.watch === null) return null;
@@ -29,7 +29,7 @@ var muon = (options = {}) => {
29
29
  resolvedConfig = config;
30
30
  },
31
31
  configureServer: async (server) => {
32
- await require_vite_options.startMuonViteBrowserBridge({
32
+ await require_vite_internals.startMuonViteBrowserBridge({
33
33
  server,
34
34
  pluginOptions: options,
35
35
  platform: process.platform,
@@ -39,10 +39,10 @@ var muon = (options = {}) => {
39
39
  },
40
40
  closeBundle: async () => {
41
41
  if (resolvedConfig === void 0 || resolvedConfig.command !== "build") return;
42
- if (process.env[suppressViteMuonBuildEnvironmentKey] === "1") return;
42
+ if (process.env["MUON_SUPPRESS_VITE_MUON_BUILD"] === "1") return;
43
43
  if (options.build === false) return;
44
44
  const buildOptions = typeof options.build === "object" ? options.build : {};
45
- await require_vite_options.buildMuonApp(createMuonBuildOptions(resolvedConfig, buildOptions));
45
+ await require_vite_internals.buildMuonApp(createMuonBuildOptions(resolvedConfig, buildOptions));
46
46
  }
47
47
  }, options);
48
48
  };
@@ -72,6 +72,8 @@ var createMuonBuildOptions = (config, buildOptions) => {
72
72
  if (buildOptions.appId !== void 0) options.appId = buildOptions.appId;
73
73
  if (buildOptions.outputRoot !== void 0) options.outputRoot = buildOptions.outputRoot;
74
74
  if (buildOptions.configPath !== void 0) options.configPath = buildOptions.configPath;
75
+ if (buildOptions.windowsResource !== void 0) options.windowsResource = buildOptions.windowsResource;
76
+ if (buildOptions.linuxDesktop !== void 0) options.linuxDesktop = buildOptions.linuxDesktop;
75
77
  if (buildOptions.packageDirectory !== void 0) options.packageDirectory = buildOptions.packageDirectory;
76
78
  if (buildOptions.assetSalt !== void 0) options.assetSalt = buildOptions.assetSalt;
77
79
  return options;
package/dist/vite.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"vite.cjs","names":[],"sources":["../src/vite.ts"],"sourcesContent":["// muon - Multi-platform GUI application framework that uses CEF as its backend\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/muon\n\nimport type { Plugin, ResolvedConfig, UserConfig, WatchOptions } from \"vite\";\nimport { isAbsolute, resolve } from \"node:path\";\n\nimport { buildMuonApp, type MuonBuildOptions } from \"./build.js\";\nimport { startMuonViteBrowserBridge } from \"./vite-internals.js\";\nimport { attachMuonVitePluginOptions } from \"./vite-options.js\";\n\nconst suppressViteMuonBuildEnvironmentKey = \"MUON_SUPPRESS_VITE_MUON_BUILD\";\n\ntype MuonWatchIgnored = NonNullable<WatchOptions[\"ignored\"]>;\n\n/**\n * Options for generating Muon app distributions after Vite build.\n */\nexport interface MuonViteBuildOptions {\n /**\n * Public target identifiers to build.\n */\n targets?: readonly string[];\n\n /**\n * Build every supported target from the installed package.\n *\n * @remarks Defaults to true when targets is omitted. Set false to build only\n * the host target.\n */\n allTargets?: boolean;\n\n /**\n * File name used for the app launcher.\n *\n * @remarks The .exe suffix is added automatically for Windows targets.\n */\n appName?: string;\n\n /**\n * Stable application identifier used for portable runtime state.\n */\n appId?: string;\n\n /**\n * Parent directory that receives dist-muon-linux-amd64/ style outputs.\n */\n outputRoot?: string;\n\n /**\n * Muon config path to embed.\n */\n configPath?: string;\n\n /**\n * Directory containing package runtime/ and native/ folders.\n *\n * @remarks This defaults to the installed muon package dist directory.\n */\n packageDirectory?: string;\n\n /**\n * Asset salt override for deterministic tests.\n *\n * @remarks Production builds should omit this option.\n */\n assetSalt?: Uint8Array;\n}\n\n/**\n * Options for the Muon Vite development plugin.\n */\nexport interface MuonVitePluginOptions {\n /**\n * Directory containing muon-core runtime files such as muon-core and plugins.\n *\n * @remarks Relative paths are resolved from the Vite project root. When omitted,\n * the packaged runtime at dist/runtime/<public-target> is used.\n */\n muonPath?: string;\n\n /**\n * Directory containing CEF files, or a CEF archive root with Release/Resources.\n *\n * @remarks Relative paths are resolved from the Vite project root. When omitted,\n * muon-prepare downloads and caches the tested CEF artifact from muonPath.\n */\n cefPath?: string;\n\n /**\n * Runtime staging directory used for development startup.\n *\n * @remarks Relative paths are resolved from the Vite project root. Defaults to\n * .muon/<public-target>.\n */\n stagePath?: string;\n\n /**\n * Launch Muon automatically during Vite dev startup.\n *\n * @remarks Defaults to true. This is independent from Vite's server.open\n * browser startup option. Vite build ignores this option.\n */\n open?: boolean;\n\n /**\n * Enable the Muon debugger defaults during Vite dev startup.\n *\n * @remarks Defaults to true. When enabled, the generated development config\n * enables CDP and binds DevTools to F12. Vite build ignores this option.\n */\n enableDebugger?: boolean;\n\n /**\n * Build app distributions from Vite output.\n *\n * @remarks Defaults to true during Vite build. Set false to disable the build\n * hook while keeping the development bridge enabled.\n */\n build?: boolean | MuonViteBuildOptions;\n}\n\n/**\n * Creates a Vite plugin that launches Muon during Vite dev startup.\n *\n * @param options Muon plugin options used for development startup and build.\n * @returns Vite plugin instance.\n */\nconst muon = (options: MuonVitePluginOptions = {}): Plugin => {\n let resolvedConfig: ResolvedConfig | undefined = undefined;\n\n const plugin: Plugin = {\n name: \"muon\",\n config: (config): Omit<UserConfig, \"plugins\"> | null => {\n if (config.server?.watch === null) {\n return null;\n }\n\n return {\n server: {\n watch: createMuonWatchOptions(config.server?.watch),\n },\n };\n },\n configResolved: (config) => {\n resolvedConfig = config;\n },\n configureServer: async (server) => {\n await startMuonViteBrowserBridge({\n server,\n pluginOptions: options,\n platform: process.platform,\n architecture: process.arch,\n environment: process.env,\n });\n },\n closeBundle: async () => {\n if (resolvedConfig === undefined || resolvedConfig.command !== \"build\") {\n return;\n }\n if (process.env[suppressViteMuonBuildEnvironmentKey] === \"1\") {\n return;\n }\n if (options.build === false) {\n return;\n }\n\n const buildOptions =\n typeof options.build === \"object\" ? options.build : {};\n await buildMuonApp(createMuonBuildOptions(resolvedConfig, buildOptions));\n },\n };\n\n return attachMuonVitePluginOptions(plugin, options);\n};\n\nconst isMuonStagingWatchPath = (path: string): boolean => {\n const normalized = path.replaceAll(\"\\\\\", \"/\");\n return (\n normalized === \".muon\" ||\n normalized.startsWith(\".muon/\") ||\n normalized.endsWith(\"/.muon\") ||\n normalized.includes(\"/.muon/\")\n );\n};\n\nconst mergeMuonWatchIgnored = (\n ignored: WatchOptions[\"ignored\"] | undefined,\n): MuonWatchIgnored => {\n const muonIgnored = (path: string): boolean => isMuonStagingWatchPath(path);\n if (ignored === undefined) {\n return muonIgnored;\n }\n return Array.isArray(ignored)\n ? [...ignored, muonIgnored]\n : [ignored, muonIgnored];\n};\n\nconst createMuonWatchOptions = (\n watch: WatchOptions | undefined,\n): WatchOptions => ({\n ...(watch ?? {}),\n ignored: mergeMuonWatchIgnored(watch?.ignored),\n});\n\nconst createMuonBuildOptions = (\n config: ResolvedConfig,\n buildOptions: MuonViteBuildOptions,\n): MuonBuildOptions => {\n const outDir = isAbsolute(config.build.outDir)\n ? config.build.outDir\n : resolve(config.root, config.build.outDir);\n const options: MuonBuildOptions = {\n root: config.root,\n assetSourcePath: outDir,\n assetPrefix: \"main\",\n };\n\n if (buildOptions.allTargets !== undefined) {\n options.allTargets = buildOptions.allTargets;\n }\n if (buildOptions.targets !== undefined) {\n options.targets = buildOptions.targets;\n }\n if (buildOptions.appName !== undefined) {\n options.appName = buildOptions.appName;\n }\n if (buildOptions.appId !== undefined) {\n options.appId = buildOptions.appId;\n }\n if (buildOptions.outputRoot !== undefined) {\n options.outputRoot = buildOptions.outputRoot;\n }\n if (buildOptions.configPath !== undefined) {\n options.configPath = buildOptions.configPath;\n }\n if (buildOptions.packageDirectory !== undefined) {\n options.packageDirectory = buildOptions.packageDirectory;\n }\n if (buildOptions.assetSalt !== undefined) {\n options.assetSalt = buildOptions.assetSalt;\n }\n\n return options;\n};\n\nexport default muon;\n"],"mappings":";;;;;;;;;;;;AAYA,IAAM,sCAAsC;;;;;;;AAqH5C,IAAM,QAAQ,UAAiC,CAAC,MAAc;CAC5D,IAAI,iBAA6C,KAAA;CA4CjD,OAAO,qBAAA,4BAA4B;EAzCjC,MAAM;EACN,SAAS,WAA+C;GACtD,IAAI,OAAO,QAAQ,UAAU,MAC3B,OAAO;GAGT,OAAO,EACL,QAAQ,EACN,OAAO,uBAAuB,OAAO,QAAQ,KAAK,EACpD,EACF;EACF;EACA,iBAAiB,WAAW;GAC1B,iBAAiB;EACnB;EACA,iBAAiB,OAAO,WAAW;GACjC,MAAM,qBAAA,2BAA2B;IAC/B;IACA,eAAe;IACf,UAAU,QAAQ;IAClB,cAAc,QAAQ;IACtB,aAAa,QAAQ;GACvB,CAAC;EACH;EACA,aAAa,YAAY;GACvB,IAAI,mBAAmB,KAAA,KAAa,eAAe,YAAY,SAC7D;GAEF,IAAI,QAAQ,IAAI,yCAAyC,KACvD;GAEF,IAAI,QAAQ,UAAU,OACpB;GAGF,MAAM,eACJ,OAAO,QAAQ,UAAU,WAAW,QAAQ,QAAQ,CAAC;GACvD,MAAM,qBAAA,aAAa,uBAAuB,gBAAgB,YAAY,CAAC;EACzE;CAGiC,GAAQ,OAAO;AACpD;AAEA,IAAM,0BAA0B,SAA0B;CACxD,MAAM,aAAa,KAAK,WAAW,MAAM,GAAG;CAC5C,OACE,eAAe,WACf,WAAW,WAAW,QAAQ,KAC9B,WAAW,SAAS,QAAQ,KAC5B,WAAW,SAAS,SAAS;AAEjC;AAEA,IAAM,yBACJ,YACqB;CACrB,MAAM,eAAe,SAA0B,uBAAuB,IAAI;CAC1E,IAAI,YAAY,KAAA,GACd,OAAO;CAET,OAAO,MAAM,QAAQ,OAAO,IACxB,CAAC,GAAG,SAAS,WAAW,IACxB,CAAC,SAAS,WAAW;AAC3B;AAEA,IAAM,0BACJ,WACkB;CAClB,GAAI,SAAS,CAAC;CACd,SAAS,sBAAsB,OAAO,OAAO;AAC/C;AAEA,IAAM,0BACJ,QACA,iBACqB;CACrB,MAAM,UAAA,GAAA,UAAA,YAAoB,OAAO,MAAM,MAAM,IACzC,OAAO,MAAM,UAAA,GAAA,UAAA,SACL,OAAO,MAAM,OAAO,MAAM,MAAM;CAC5C,MAAM,UAA4B;EAChC,MAAM,OAAO;EACb,iBAAiB;EACjB,aAAa;CACf;CAEA,IAAI,aAAa,eAAe,KAAA,GAC9B,QAAQ,aAAa,aAAa;CAEpC,IAAI,aAAa,YAAY,KAAA,GAC3B,QAAQ,UAAU,aAAa;CAEjC,IAAI,aAAa,YAAY,KAAA,GAC3B,QAAQ,UAAU,aAAa;CAEjC,IAAI,aAAa,UAAU,KAAA,GACzB,QAAQ,QAAQ,aAAa;CAE/B,IAAI,aAAa,eAAe,KAAA,GAC9B,QAAQ,aAAa,aAAa;CAEpC,IAAI,aAAa,eAAe,KAAA,GAC9B,QAAQ,aAAa,aAAa;CAEpC,IAAI,aAAa,qBAAqB,KAAA,GACpC,QAAQ,mBAAmB,aAAa;CAE1C,IAAI,aAAa,cAAc,KAAA,GAC7B,QAAQ,YAAY,aAAa;CAGnC,OAAO;AACT"}
1
+ {"version":3,"file":"vite.cjs","names":[],"sources":["../src/vite.ts"],"sourcesContent":["// muon - Multi-platform GUI application framework that uses CEF as its backend\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/muon\n\nimport type { Plugin, ResolvedConfig, UserConfig, WatchOptions } from \"vite\";\nimport { isAbsolute, resolve } from \"node:path\";\n\nimport { buildMuonApp, type MuonBuildOptions } from \"./build.js\";\nimport { startMuonViteBrowserBridge } from \"./vite-internals.js\";\nimport { attachMuonVitePluginOptions } from \"./vite-options.js\";\nimport { muonBuildSequenceSuppressViteBuildEnvironmentKey } from \"./build-sequence.js\";\n\ntype MuonWatchIgnored = NonNullable<WatchOptions[\"ignored\"]>;\n\n/**\n * Windows PE and NSIS resource metadata options.\n */\nexport interface MuonWindowsResourceOptions {\n /**\n * Windows icon PNG file path.\n *\n * @remarks Only `.png` files are accepted as app inputs. Muon generates the\n * required Windows `.ico` file automatically when updating PE resources or\n * creating NSIS installers. Relative paths are resolved from the source that\n * supplied the option.\n * @defaultValue Uses `windows.resource.iconPath`, then the packaged Muon\n * bootstrap PNG icon when available.\n */\n iconPath?: string;\n\n /**\n * Product name written to the Windows version resource.\n *\n * @defaultValue Uses `windows.resource.productName`, `project.json`,\n * `package.json`, then the Muon launcher name.\n */\n productName?: string;\n\n /**\n * File description written to the Windows version resource.\n *\n * @defaultValue Uses `windows.resource.fileDescription`, `project.json`,\n * `package.json.description`, then the product name.\n */\n fileDescription?: string;\n\n /**\n * Company name written to the Windows version resource.\n *\n * @defaultValue Uses `windows.resource.companyName`, `project.json`,\n * `package.json.author`, then `\"Unknown\"`.\n */\n companyName?: string;\n\n /**\n * Product and file version string.\n *\n * @remarks PE fixed version fields are normalized to four numeric parts, so\n * `1.2.3` becomes `1.2.3.0`. String fields keep the original value.\n * @defaultValue Uses `windows.resource.version`, `project.json.version`,\n * `package.json.version`, then `\"0.0.0\"`.\n */\n version?: string;\n\n /**\n * Legal copyright written to the Windows version resource.\n *\n * @defaultValue Uses `windows.resource.copyright`, `project.json`, then\n * `package.json.copyright` when available.\n */\n copyright?: string;\n\n /**\n * Windows resource language identifier.\n *\n * @defaultValue `1033` (`en-US`).\n */\n language?: number;\n\n /**\n * Windows version resource code page.\n *\n * @defaultValue `1200` (`UTF-16LE`).\n */\n codePage?: number;\n}\n\n/**\n * Linux desktop entry metadata options.\n */\nexport interface MuonLinuxDesktopOptions {\n /**\n * Desktop entry identifier without the `.desktop` suffix.\n *\n * @defaultValue Uses the resolved Muon `appId`.\n */\n desktopId?: string;\n\n /**\n * Application display name.\n *\n * @defaultValue Uses `linux.desktop.name`, then `package.json` name.\n */\n name?: string;\n\n /**\n * Desktop entry comment.\n *\n * @defaultValue Uses `linux.desktop.comment`, then `package.json`\n * description.\n */\n comment?: string;\n\n /**\n * Linux desktop icon PNG file path.\n *\n * @remarks Only `.png` files are accepted as app inputs. Relative paths are\n * resolved from the source that supplied the option.\n * @defaultValue Uses the packaged Muon bootstrap PNG icon when available.\n */\n iconPath?: string;\n\n /**\n * Desktop menu categories.\n *\n * @defaultValue `[\"Utility\"]`.\n */\n categories?: readonly string[];\n\n /**\n * Whether desktop startup notification is requested.\n *\n * @defaultValue `true`.\n */\n startupNotify?: boolean;\n}\n\n/**\n * Options for generating Muon app distributions after Vite build.\n */\nexport interface MuonViteBuildOptions {\n /**\n * Public target identifiers to build.\n *\n * @defaultValue Uses every supported target unless `allTargets` is `false`,\n * then the host target is used.\n */\n targets?: readonly string[];\n\n /**\n * Build every supported target from the installed package.\n *\n * @remarks Set false to build only the host target when `targets` is omitted.\n * @defaultValue `true` when `targets` is omitted.\n */\n allTargets?: boolean;\n\n /**\n * File name used for the app launcher.\n *\n * @remarks The .exe suffix is added automatically for Windows targets.\n * @defaultValue The sanitized package name, or `\"muon-app\"` when unavailable.\n */\n appName?: string;\n\n /**\n * Stable application identifier used for portable runtime state.\n *\n * @defaultValue The sanitized package name, or `\"muon-app\"` when unavailable.\n */\n appId?: string;\n\n /**\n * Parent directory that receives dist-muon/linux-amd64/ style outputs.\n *\n * @defaultValue The Vite project root.\n */\n outputRoot?: string;\n\n /**\n * Muon config path to embed.\n *\n * @defaultValue Auto-detects `muon.json5`, `muon.jsonc`, then `muon.json`;\n * uses an empty config when none exists.\n */\n configPath?: string;\n\n /**\n * Windows PE and NSIS resource metadata.\n *\n * @defaultValue Uses CLI options, `muon.json` `windows.resource`,\n * `project.json`, `package.json`, then Muon defaults.\n */\n windowsResource?: MuonWindowsResourceOptions;\n\n /**\n * Linux desktop entry metadata.\n *\n * @defaultValue Uses CLI options, `muon.json` `linux.desktop`, package\n * metadata, then Muon defaults.\n */\n linuxDesktop?: MuonLinuxDesktopOptions;\n\n /**\n * Directory containing package runtime/ and native/ folders.\n *\n * @defaultValue The installed muon package dist directory.\n */\n packageDirectory?: string;\n\n /**\n * Asset salt override for deterministic tests.\n *\n * @remarks Production builds should omit this option.\n * @defaultValue A random 16-byte salt.\n */\n assetSalt?: Uint8Array;\n}\n\n/**\n * Options for the Muon Vite development plugin.\n */\nexport interface MuonVitePluginOptions {\n /**\n * Directory containing muon-core runtime files such as muon-core and plugins.\n *\n * @remarks Relative paths are resolved from the Vite project root. When omitted,\n * the packaged runtime at dist/runtime/<public-target> is used.\n * @defaultValue The packaged runtime at `dist/runtime/<public-target>`.\n */\n muonPath?: string;\n\n /**\n * Directory containing CEF files, or a CEF archive root with Release/Resources.\n *\n * @remarks Relative paths are resolved from the Vite project root. When omitted,\n * muon-builder downloads and caches the tested CEF artifact from muonPath.\n * @defaultValue The tested CEF artifact downloaded and cached by muon-builder.\n */\n cefPath?: string;\n\n /**\n * Runtime staging directory used for development startup.\n *\n * @remarks Relative paths are resolved from the Vite project root.\n * @defaultValue `.muon/<public-target>`.\n */\n stagePath?: string;\n\n /**\n * Launch Muon automatically during Vite dev startup.\n *\n * @remarks This is independent from Vite's server.open browser startup\n * option. Vite build ignores this option.\n * @defaultValue `true`\n */\n open?: boolean;\n\n /**\n * Enable the Muon debugger defaults during Vite dev startup.\n *\n * @remarks When enabled, the generated development config enables CDP and\n * binds DevTools to F12. Vite build ignores this option.\n * @defaultValue `true`\n */\n enableDebugger?: boolean;\n\n /**\n * Build app distributions from Vite output.\n *\n * @remarks Set false to disable the build hook while keeping the development\n * bridge enabled.\n * @defaultValue `true` during Vite build.\n */\n build?: boolean | MuonViteBuildOptions;\n}\n\n/**\n * Creates a Vite plugin that launches Muon during Vite dev startup.\n *\n * @param options Muon plugin options used for development startup and build.\n * @returns Vite plugin instance.\n * @defaultValue `options` defaults to `{}`.\n */\nconst muon = (options: MuonVitePluginOptions = {}): Plugin => {\n let resolvedConfig: ResolvedConfig | undefined = undefined;\n\n const plugin: Plugin = {\n name: \"muon\",\n config: (config): Omit<UserConfig, \"plugins\"> | null => {\n if (config.server?.watch === null) {\n return null;\n }\n\n return {\n server: {\n watch: createMuonWatchOptions(config.server?.watch),\n },\n };\n },\n configResolved: (config) => {\n resolvedConfig = config;\n },\n configureServer: async (server) => {\n await startMuonViteBrowserBridge({\n server,\n pluginOptions: options,\n platform: process.platform,\n architecture: process.arch,\n environment: process.env,\n });\n },\n closeBundle: async () => {\n if (resolvedConfig === undefined || resolvedConfig.command !== \"build\") {\n return;\n }\n if (\n process.env[muonBuildSequenceSuppressViteBuildEnvironmentKey] === \"1\"\n ) {\n return;\n }\n if (options.build === false) {\n return;\n }\n\n const buildOptions =\n typeof options.build === \"object\" ? options.build : {};\n await buildMuonApp(createMuonBuildOptions(resolvedConfig, buildOptions));\n },\n };\n\n return attachMuonVitePluginOptions(plugin, options);\n};\n\nconst isMuonStagingWatchPath = (path: string): boolean => {\n const normalized = path.replaceAll(\"\\\\\", \"/\");\n return (\n normalized === \".muon\" ||\n normalized.startsWith(\".muon/\") ||\n normalized.endsWith(\"/.muon\") ||\n normalized.includes(\"/.muon/\")\n );\n};\n\nconst mergeMuonWatchIgnored = (\n ignored: WatchOptions[\"ignored\"] | undefined,\n): MuonWatchIgnored => {\n const muonIgnored = (path: string): boolean => isMuonStagingWatchPath(path);\n if (ignored === undefined) {\n return muonIgnored;\n }\n return Array.isArray(ignored)\n ? [...ignored, muonIgnored]\n : [ignored, muonIgnored];\n};\n\nconst createMuonWatchOptions = (\n watch: WatchOptions | undefined,\n): WatchOptions => ({\n ...(watch ?? {}),\n ignored: mergeMuonWatchIgnored(watch?.ignored),\n});\n\nconst createMuonBuildOptions = (\n config: ResolvedConfig,\n buildOptions: MuonViteBuildOptions,\n): MuonBuildOptions => {\n const outDir = isAbsolute(config.build.outDir)\n ? config.build.outDir\n : resolve(config.root, config.build.outDir);\n const options: MuonBuildOptions = {\n root: config.root,\n assetSourcePath: outDir,\n assetPrefix: \"main\",\n };\n\n if (buildOptions.allTargets !== undefined) {\n options.allTargets = buildOptions.allTargets;\n }\n if (buildOptions.targets !== undefined) {\n options.targets = buildOptions.targets;\n }\n if (buildOptions.appName !== undefined) {\n options.appName = buildOptions.appName;\n }\n if (buildOptions.appId !== undefined) {\n options.appId = buildOptions.appId;\n }\n if (buildOptions.outputRoot !== undefined) {\n options.outputRoot = buildOptions.outputRoot;\n }\n if (buildOptions.configPath !== undefined) {\n options.configPath = buildOptions.configPath;\n }\n if (buildOptions.windowsResource !== undefined) {\n options.windowsResource = buildOptions.windowsResource;\n }\n if (buildOptions.linuxDesktop !== undefined) {\n options.linuxDesktop = buildOptions.linuxDesktop;\n }\n if (buildOptions.packageDirectory !== undefined) {\n options.packageDirectory = buildOptions.packageDirectory;\n }\n if (buildOptions.assetSalt !== undefined) {\n options.assetSalt = buildOptions.assetSalt;\n }\n\n return options;\n};\n\nexport default muon;\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA6RA,IAAM,QAAQ,UAAiC,CAAC,MAAc;CAC5D,IAAI,iBAA6C,KAAA;CA8CjD,OAAO,uBAAA,4BAA4B;EA3CjC,MAAM;EACN,SAAS,WAA+C;GACtD,IAAI,OAAO,QAAQ,UAAU,MAC3B,OAAO;GAGT,OAAO,EACL,QAAQ,EACN,OAAO,uBAAuB,OAAO,QAAQ,KAAK,EACpD,EACF;EACF;EACA,iBAAiB,WAAW;GAC1B,iBAAiB;EACnB;EACA,iBAAiB,OAAO,WAAW;GACjC,MAAM,uBAAA,2BAA2B;IAC/B;IACA,eAAe;IACf,UAAU,QAAQ;IAClB,cAAc,QAAQ;IACtB,aAAa,QAAQ;GACvB,CAAC;EACH;EACA,aAAa,YAAY;GACvB,IAAI,mBAAmB,KAAA,KAAa,eAAe,YAAY,SAC7D;GAEF,IACE,QAAQ,IAAA,qCAA0D,KAElE;GAEF,IAAI,QAAQ,UAAU,OACpB;GAGF,MAAM,eACJ,OAAO,QAAQ,UAAU,WAAW,QAAQ,QAAQ,CAAC;GACvD,MAAM,uBAAA,aAAa,uBAAuB,gBAAgB,YAAY,CAAC;EACzE;CAGiC,GAAQ,OAAO;AACpD;AAEA,IAAM,0BAA0B,SAA0B;CACxD,MAAM,aAAa,KAAK,WAAW,MAAM,GAAG;CAC5C,OACE,eAAe,WACf,WAAW,WAAW,QAAQ,KAC9B,WAAW,SAAS,QAAQ,KAC5B,WAAW,SAAS,SAAS;AAEjC;AAEA,IAAM,yBACJ,YACqB;CACrB,MAAM,eAAe,SAA0B,uBAAuB,IAAI;CAC1E,IAAI,YAAY,KAAA,GACd,OAAO;CAET,OAAO,MAAM,QAAQ,OAAO,IACxB,CAAC,GAAG,SAAS,WAAW,IACxB,CAAC,SAAS,WAAW;AAC3B;AAEA,IAAM,0BACJ,WACkB;CAClB,GAAI,SAAS,CAAC;CACd,SAAS,sBAAsB,OAAO,OAAO;AAC/C;AAEA,IAAM,0BACJ,QACA,iBACqB;CACrB,MAAM,UAAA,GAAA,UAAA,YAAoB,OAAO,MAAM,MAAM,IACzC,OAAO,MAAM,UAAA,GAAA,UAAA,SACL,OAAO,MAAM,OAAO,MAAM,MAAM;CAC5C,MAAM,UAA4B;EAChC,MAAM,OAAO;EACb,iBAAiB;EACjB,aAAa;CACf;CAEA,IAAI,aAAa,eAAe,KAAA,GAC9B,QAAQ,aAAa,aAAa;CAEpC,IAAI,aAAa,YAAY,KAAA,GAC3B,QAAQ,UAAU,aAAa;CAEjC,IAAI,aAAa,YAAY,KAAA,GAC3B,QAAQ,UAAU,aAAa;CAEjC,IAAI,aAAa,UAAU,KAAA,GACzB,QAAQ,QAAQ,aAAa;CAE/B,IAAI,aAAa,eAAe,KAAA,GAC9B,QAAQ,aAAa,aAAa;CAEpC,IAAI,aAAa,eAAe,KAAA,GAC9B,QAAQ,aAAa,aAAa;CAEpC,IAAI,aAAa,oBAAoB,KAAA,GACnC,QAAQ,kBAAkB,aAAa;CAEzC,IAAI,aAAa,iBAAiB,KAAA,GAChC,QAAQ,eAAe,aAAa;CAEtC,IAAI,aAAa,qBAAqB,KAAA,GACpC,QAAQ,mBAAmB,aAAa;CAE1C,IAAI,aAAa,cAAc,KAAA,GAC7B,QAAQ,YAAY,aAAa;CAGnC,OAAO;AACT"}