muon-ui 0.8.0 → 0.9.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/README.md +9 -13
- package/dist/cli.cjs +48 -32
- 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-bootstrap +0 -0
- package/dist/native/linux-amd64/muon-builder +0 -0
- package/dist/native/linux-arm64/muon-bootstrap +0 -0
- package/dist/native/linux-arm64/muon-builder +0 -0
- package/dist/native/linux-armhf/muon-bootstrap +0 -0
- package/dist/native/linux-armhf/muon-builder +0 -0
- package/dist/native/muon-256.png +0 -0
- package/dist/native/windows-amd64/muon-bootstrap.exe +0 -0
- package/dist/native/windows-amd64/muon-builder.exe +0 -0
- package/dist/native/windows-i686/muon-bootstrap.exe +0 -0
- package/dist/native/windows-i686/muon-builder.exe +0 -0
- package/dist/runtime/linux-amd64/libmuon-ui.so +0 -0
- package/dist/runtime/linux-amd64/muon-core +0 -0
- package/dist/runtime/linux-arm64/libmuon-ui.so +0 -0
- package/dist/runtime/linux-arm64/muon-core +0 -0
- package/dist/runtime/linux-armhf/libmuon-ui.so +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-ChWiL2TL.cjs → vite-internals-HXgH7b5M.cjs} +291 -75
- package/dist/vite-internals-HXgH7b5M.cjs.map +1 -0
- package/dist/vite.cjs +446 -6
- package/dist/vite.cjs.map +1 -1
- package/dist/vite.mjs +748 -115
- package/dist/vite.mjs.map +1 -1
- package/muon.d.ts +12 -0
- package/package.json +7 -7
- package/vite.d.ts +118 -8
- package/dist/native/muon-bootstrap.png +0 -0
- package/dist/vite-internals-ChWiL2TL.cjs.map +0 -1
package/README.md
CHANGED
|
@@ -11,9 +11,6 @@ A multi-platform GUI application framework that uses CEF as its backend.
|
|
|
11
11
|
|
|
12
12
|
## What is This?
|
|
13
13
|
|
|
14
|
-
WIP: This project is still in a very early prototype phase.
|
|
15
|
-
I intend to complete it, but please note that it is not yet at the stage of active implementation.
|
|
16
|
-
|
|
17
14
|
Have you ever thought about how to update an outdated native GUI application into a modern one?
|
|
18
15
|
Replacing applications is extremely complex and has always been a challenge for us.
|
|
19
16
|
|
|
@@ -45,7 +42,7 @@ It also features a plugin system that supports fully asynchronous processing, en
|
|
|
45
42
|
Since these features become available based on pre-configured settings, there's no risk of unused functionality running unchecked.
|
|
46
43
|
|
|
47
44
|
Since it's CEF-based, you can naturally use features expected in Chromium, such as WebGL, WebGPU, WebAssembly, Web Workers, and Local Storage.
|
|
48
|
-
You can also display
|
|
45
|
+
You can also display DevTools. Because it supports CDP (Chromium DevTools Protocol), you can debug using tools like VS Code or connect and control it via Playwright.
|
|
49
46
|
You can also use remote DevTools from Chromium/Chrome via `chrome://inspect/`.
|
|
50
47
|
|
|
51
48
|
In short, by clearly eliminating one of the major issues that arise when migrating native GTK/Qt/Windows applications to web applications,
|
|
@@ -54,17 +51,16 @@ you can develop modern local GUI applications using the web-based technology eco
|
|
|
54
51
|
### Features
|
|
55
52
|
|
|
56
53
|
- By restricting all network access with a whitelist filter, you can completely block problematic content.
|
|
57
|
-
- It is provided as an easy-to-use NPM package, allowing you to easily turn your web application project into a native GUI application.
|
|
58
|
-
|
|
59
|
-
-
|
|
60
|
-
|
|
61
|
-
-
|
|
62
|
-
-
|
|
63
|
-
- Linux desktop launcher and icon metadata can be bundled at distribution build time.
|
|
64
|
-
- You can use Chromium DevTools. Furthermore, because it supports CDP (Chromium DevTools Protocol), you can perform remote debugging from an external source.
|
|
54
|
+
- It is provided as an easy-to-use NPM package, allowing you to easily turn your web application project into a native GUI application. No complex configuration or modifications are required.
|
|
55
|
+
- The browser responsible for rendering is CEF (Chromium Embedded Framework). This means that, from the perspective of the web application, it is virtually equivalent to using Chromium or Chrome.
|
|
56
|
+
- It supports Vite plugins. Since it supports Vite’s HMR, you can preview real-time updates during development.
|
|
57
|
+
- With `muon run`, you can launch a development environment that uses local assets directly without starting an HTTP server.
|
|
58
|
+
- You can include the Linux desktop launcher and icon metadata in your distribution build.
|
|
59
|
+
- You can use DevTools. Furthermore, since it supports CDP (Chromium DevTools Protocol), you can perform remote debugging from an external source.
|
|
65
60
|
- You can display multiple browser windows. Browser windows can also be organized into a parent-child hierarchy.
|
|
66
|
-
- It features a plugin system.
|
|
61
|
+
- It features a plugin system. Plugin functionality can be restricted using a whitelist filter.
|
|
67
62
|
- Using built-in plugins, you can access local files, open dialogs, launch child processes, and manipulate windows.
|
|
63
|
+
- It supports packages for Linux (deb) and Windows (NSIS), as well as portable operation.
|
|
68
64
|
|
|
69
65
|
### Environment
|
|
70
66
|
|
package/dist/cli.cjs
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/*!
|
|
3
3
|
* name: muon-ui
|
|
4
|
-
* version: 0.
|
|
4
|
+
* version: 0.9.0
|
|
5
5
|
* description: A multi-platform GUI application framework that uses CEF as its backend
|
|
6
6
|
* author: Kouji Matsui (@kekyo@mi.kekyo.net)
|
|
7
7
|
* license: MIT
|
|
8
8
|
* repository.url: https://github.com/kekyo/muon-ui.git
|
|
9
|
-
* git.commit.hash:
|
|
9
|
+
* git.commit.hash: 3437b522a51d8772713b72722b109c5ff30fc711
|
|
10
10
|
*/
|
|
11
|
-
const require_vite_internals = require("./vite-internals-
|
|
11
|
+
const require_vite_internals = require("./vite-internals-HXgH7b5M.cjs");
|
|
12
12
|
let commander = require("commander");
|
|
13
13
|
let node_child_process = require("node:child_process");
|
|
14
14
|
let node_fs = require("node:fs");
|
|
@@ -130,9 +130,9 @@ var assertDevelopmentAssetDirectory = async (assetSourcePath) => {
|
|
|
130
130
|
try {
|
|
131
131
|
await (0, node_fs_promises.access)(assetSourcePath, node_fs.constants.F_OK);
|
|
132
132
|
} catch {
|
|
133
|
-
throw new Error(`Muon
|
|
133
|
+
throw new Error(`Muon run asset source does not exist: ${assetSourcePath}`);
|
|
134
134
|
}
|
|
135
|
-
throw new Error(`Muon
|
|
135
|
+
throw new Error(`Muon run asset source must be a directory: ${assetSourcePath}`);
|
|
136
136
|
};
|
|
137
137
|
var resolveAssetSource = async (root, assetSourcePath, projectConfig) => {
|
|
138
138
|
const configuredAssetSourcePath = readConfigAssetSourcePath(projectConfig.config);
|
|
@@ -215,7 +215,7 @@ var runMuonDev = async (options = {}) => {
|
|
|
215
215
|
const enableDebugger = options.enableDebugger ?? pluginOptions?.enableDebugger ?? true;
|
|
216
216
|
const projectConfig = await resolveProjectConfig(root, options.configPath);
|
|
217
217
|
const asset = await resolveAssetSource(root, options.assetSourcePath, projectConfig);
|
|
218
|
-
const overrideConfigPath = (0, node_path.join)(root, ".muon", "
|
|
218
|
+
const overrideConfigPath = (0, node_path.join)(root, ".muon", "run", "muon.run.json");
|
|
219
219
|
await require_vite_internals.ensureMuonGitignoreEntry(root);
|
|
220
220
|
const preparedRuntime = await require_vite_internals.runMuonPrepare({
|
|
221
221
|
muonPath,
|
|
@@ -516,22 +516,24 @@ var packageDeb = async (root, target, metadata, artifactsRoot, packageBuildRoot,
|
|
|
516
516
|
var escapeNsis = (value) => value.replaceAll("\\", "\\\\").replaceAll("\"", "$\\\"");
|
|
517
517
|
var nsisUninstallRegistryRoot = "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
|
|
518
518
|
var createNsisUninstallRegistryKey = (appId) => `${nsisUninstallRegistryRoot}\\${appId}`;
|
|
519
|
-
var packageNsis = async (root, target, metadata,
|
|
519
|
+
var packageNsis = async (root, target, metadata, windowsResource, artifactsRoot, packageBuildRoot, environment) => {
|
|
520
520
|
const descriptor = require_vite_internals.getMuonTargetDescriptor(target.target);
|
|
521
521
|
if (descriptor.os !== "windows") throw new Error(`Unsupported nsis target: ${target.target}`);
|
|
522
522
|
const scriptPath = (0, node_path.join)(packageBuildRoot, "nsis", `${metadata.packageName}-${target.target}.nsi`);
|
|
523
523
|
const outputPath = (0, node_path.join)(artifactsRoot, `${metadata.packageName}-${metadata.version}-${descriptor.arch}-setup.exe`);
|
|
524
524
|
const launcherFileName = (0, node_path.basename)(target.launcherPath);
|
|
525
|
-
const
|
|
525
|
+
const nsisDisplayName = `${metadata.packageName} (${descriptor.arch})`;
|
|
526
|
+
const nsisInstallDirectoryName = `${metadata.packageName}-${descriptor.arch}`;
|
|
527
|
+
const uninstallRegistryKey = createNsisUninstallRegistryKey(target.runtimeAppId);
|
|
526
528
|
await (0, node_fs_promises.mkdir)((0, node_path.dirname)(scriptPath), { recursive: true });
|
|
527
529
|
await (0, node_fs_promises.mkdir)((0, node_path.dirname)(outputPath), { recursive: true });
|
|
528
|
-
const iconPath =
|
|
529
|
-
|
|
530
|
+
const iconPath = (0, node_path.join)((0, node_path.dirname)(scriptPath), `${metadata.packageName}-${target.target}.ico`);
|
|
531
|
+
await require_vite_internals.createWindowsIconFromPngFile(windowsResource.iconPath, iconPath);
|
|
530
532
|
await (0, node_fs_promises.writeFile)(scriptPath, [
|
|
531
533
|
"Unicode true",
|
|
532
|
-
`Name "${escapeNsis(
|
|
534
|
+
`Name "${escapeNsis(nsisDisplayName)}"`,
|
|
533
535
|
`OutFile "${escapeNsis(outputPath)}"`,
|
|
534
|
-
`InstallDir "$LOCALAPPDATA\\Programs\\${escapeNsis(
|
|
536
|
+
`InstallDir "$LOCALAPPDATA\\Programs\\${escapeNsis(nsisInstallDirectoryName)}"`,
|
|
535
537
|
"RequestExecutionLevel user",
|
|
536
538
|
"ShowInstDetails nevershow",
|
|
537
539
|
"AutoCloseWindow true",
|
|
@@ -540,9 +542,9 @@ var packageNsis = async (root, target, metadata, appId, windowsResource, artifac
|
|
|
540
542
|
"Section",
|
|
541
543
|
" SetOutPath \"$INSTDIR\"",
|
|
542
544
|
` File /r "${escapeNsis(target.outputPath)}\\*"`,
|
|
543
|
-
` CreateShortCut "$SMPROGRAMS\\${escapeNsis(
|
|
545
|
+
` CreateShortCut "$SMPROGRAMS\\${escapeNsis(nsisDisplayName)}.lnk" "$INSTDIR\\${escapeNsis(launcherFileName)}"`,
|
|
544
546
|
" WriteUninstaller \"$INSTDIR\\Uninstall.exe\"",
|
|
545
|
-
` WriteRegStr HKCU "${escapeNsis(uninstallRegistryKey)}" "DisplayName" "${escapeNsis(
|
|
547
|
+
` WriteRegStr HKCU "${escapeNsis(uninstallRegistryKey)}" "DisplayName" "${escapeNsis(nsisDisplayName)}"`,
|
|
546
548
|
` WriteRegStr HKCU "${escapeNsis(uninstallRegistryKey)}" "DisplayVersion" "${escapeNsis(metadata.version)}"`,
|
|
547
549
|
` WriteRegStr HKCU "${escapeNsis(uninstallRegistryKey)}" "Publisher" "${escapeNsis(metadata.author)}"`,
|
|
548
550
|
` WriteRegStr HKCU "${escapeNsis(uninstallRegistryKey)}" "InstallLocation" "$INSTDIR"`,
|
|
@@ -554,10 +556,10 @@ var packageNsis = async (root, target, metadata, appId, windowsResource, artifac
|
|
|
554
556
|
"SectionEnd",
|
|
555
557
|
"",
|
|
556
558
|
"Section \"Uninstall\"",
|
|
557
|
-
` Delete "$SMPROGRAMS\\${escapeNsis(
|
|
559
|
+
` Delete "$SMPROGRAMS\\${escapeNsis(nsisDisplayName)}.lnk"`,
|
|
558
560
|
` DeleteRegKey HKCU "${escapeNsis(uninstallRegistryKey)}"`,
|
|
559
561
|
" RMDir /r \"$INSTDIR\"",
|
|
560
|
-
` RMDir /r "$LOCALAPPDATA\\${escapeNsis(
|
|
562
|
+
` RMDir /r "$LOCALAPPDATA\\${escapeNsis(target.runtimeAppId)}"`,
|
|
561
563
|
"SectionEnd",
|
|
562
564
|
"",
|
|
563
565
|
"Function .onInstSuccess",
|
|
@@ -577,10 +579,8 @@ var packageNsis = async (root, target, metadata, appId, windowsResource, artifac
|
|
|
577
579
|
};
|
|
578
580
|
var createNsisResourceDirectives = (resource, iconPath) => {
|
|
579
581
|
const lines = [];
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
lines.push(`UninstallIcon "${escapeNsis(iconPath)}"`);
|
|
583
|
-
}
|
|
582
|
+
lines.push(`Icon "${escapeNsis(iconPath)}"`);
|
|
583
|
+
lines.push(`UninstallIcon "${escapeNsis(iconPath)}"`);
|
|
584
584
|
lines.push(`VIProductVersion "${escapeNsis(resource.fixedVersion)}"`);
|
|
585
585
|
lines.push(`VIFileVersion "${escapeNsis(resource.fixedVersion)}"`);
|
|
586
586
|
lines.push(`VIAddVersionKey /LANG=${resource.language} "CompanyName" "${escapeNsis(resource.companyName)}"`);
|
|
@@ -592,12 +592,23 @@ var createNsisResourceDirectives = (resource, iconPath) => {
|
|
|
592
592
|
return lines;
|
|
593
593
|
};
|
|
594
594
|
var reapplyPackWindowsResources = async (targets, resource, root, environment) => {
|
|
595
|
-
for (const target of targets)
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
595
|
+
for (const target of targets) {
|
|
596
|
+
const descriptor = require_vite_internals.getMuonTargetDescriptor(target.target);
|
|
597
|
+
if (descriptor.os === "windows") {
|
|
598
|
+
await require_vite_internals.updateWindowsPeIconResource({
|
|
599
|
+
executablePath: (0, node_path.join)(target.outputPath, descriptor.runtimeExecutableName),
|
|
600
|
+
resource,
|
|
601
|
+
environment,
|
|
602
|
+
cwd: root
|
|
603
|
+
});
|
|
604
|
+
await require_vite_internals.updateWindowsPeResources({
|
|
605
|
+
executablePath: target.launcherPath,
|
|
606
|
+
resource,
|
|
607
|
+
environment,
|
|
608
|
+
cwd: root
|
|
609
|
+
});
|
|
610
|
+
}
|
|
611
|
+
}
|
|
601
612
|
};
|
|
602
613
|
/**
|
|
603
614
|
* Runs the Muon build sequence and creates redistributable packages.
|
|
@@ -624,7 +635,9 @@ var packMuonApp = async (options) => {
|
|
|
624
635
|
};
|
|
625
636
|
const windowsResourceOptions = require_vite_internals.mergeMuonWindowsResourceOptions(options.windowsResource, pluginBuildOptions.windowsResource);
|
|
626
637
|
const linuxDesktopOptions = require_vite_internals.mergeMuonLinuxDesktopOptions(options.linuxDesktop, pluginBuildOptions.linuxDesktop);
|
|
638
|
+
const iconPath = options.iconPath ?? pluginBuildOptions.iconPath;
|
|
627
639
|
if (options.configPath !== void 0) buildOptions.configPath = options.configPath;
|
|
640
|
+
if (iconPath !== void 0) buildOptions.iconPath = iconPath;
|
|
628
641
|
if (options.appName !== void 0) buildOptions.appName = options.appName;
|
|
629
642
|
if (options.appId !== void 0) buildOptions.appId = options.appId;
|
|
630
643
|
if (options.packageDirectory !== void 0) buildOptions.packageDirectory = options.packageDirectory;
|
|
@@ -638,6 +651,7 @@ var packMuonApp = async (options) => {
|
|
|
638
651
|
muonConfig: windowsResourceConfig.config,
|
|
639
652
|
muonConfigDirectory: windowsResourceConfig.directory,
|
|
640
653
|
options: windowsResourceOptions,
|
|
654
|
+
appIconPath: iconPath,
|
|
641
655
|
defaults: {
|
|
642
656
|
productName: metadata.packageName,
|
|
643
657
|
fileDescription: metadata.description,
|
|
@@ -666,7 +680,7 @@ var packMuonApp = async (options) => {
|
|
|
666
680
|
for (const target of build.targets) for (const type of typesByTarget.get(target.target) ?? []) if (type === "zip") artifacts.push(await packageZip(target, metadata, artifactsRoot));
|
|
667
681
|
else if (type === "tar.gz") artifacts.push(await packageTarGz(target, metadata, artifactsRoot));
|
|
668
682
|
else if (type === "deb") artifacts.push(await packageDeb(root, target, metadata, artifactsRoot, packageBuildRoot, environment));
|
|
669
|
-
else artifacts.push(await packageNsis(root, target, metadata,
|
|
683
|
+
else artifacts.push(await packageNsis(root, target, metadata, windowsResource, artifactsRoot, packageBuildRoot, environment));
|
|
670
684
|
return {
|
|
671
685
|
root,
|
|
672
686
|
packageName: metadata.packageName,
|
|
@@ -680,8 +694,8 @@ var packMuonApp = async (options) => {
|
|
|
680
694
|
};
|
|
681
695
|
//#endregion
|
|
682
696
|
//#region src/generated/packageMetadata.ts
|
|
683
|
-
var version = "0.
|
|
684
|
-
var git_commit_hash = "
|
|
697
|
+
var version = "0.9.0";
|
|
698
|
+
var git_commit_hash = "3437b522a51d8772713b72722b109c5ff30fc711";
|
|
685
699
|
//#endregion
|
|
686
700
|
//#region src/cli.ts
|
|
687
701
|
var readTargetValues = (value) => {
|
|
@@ -738,6 +752,7 @@ var runBuildCommand = async (commandOptions) => {
|
|
|
738
752
|
if (commandOptions.all === true) buildOptions.allTargets = true;
|
|
739
753
|
if (commandOptions.assets !== void 0) buildOptions.assetSourcePath = commandOptions.assets;
|
|
740
754
|
if (commandOptions.config !== void 0) buildOptions.configPath = commandOptions.config;
|
|
755
|
+
if (commandOptions.icon !== void 0) buildOptions.iconPath = commandOptions.icon;
|
|
741
756
|
const windowsResource = createWindowsResourceOptions(commandOptions);
|
|
742
757
|
if (windowsResource !== void 0) buildOptions.windowsResource = windowsResource;
|
|
743
758
|
const linuxDesktop = createLinuxDesktopOptions(commandOptions);
|
|
@@ -761,6 +776,7 @@ var runPackCommand = async (commandOptions) => {
|
|
|
761
776
|
if (targets.length > 0) packOptions.targets = targets;
|
|
762
777
|
if (commandOptions.all !== void 0) packOptions.allTargets = commandOptions.all;
|
|
763
778
|
if (commandOptions.config !== void 0) packOptions.configPath = commandOptions.config;
|
|
779
|
+
if (commandOptions.icon !== void 0) packOptions.iconPath = commandOptions.icon;
|
|
764
780
|
const windowsResource = createWindowsResourceOptions(commandOptions);
|
|
765
781
|
if (windowsResource !== void 0) packOptions.windowsResource = windowsResource;
|
|
766
782
|
const linuxDesktop = createLinuxDesktopOptions(commandOptions);
|
|
@@ -852,13 +868,13 @@ var createCliCommand = () => {
|
|
|
852
868
|
program.outputHelp({ error: true });
|
|
853
869
|
process.exitCode = 1;
|
|
854
870
|
});
|
|
855
|
-
program.command("build").description("Build CEF-free Muon app distribution directories").option("--target <target>", "public target or comma-separated public targets", appendTargetValues, []).option("--all", "build all supported targets").option("--assets <path>", "asset root path").option("--config <path>", "muon config path").option("--windows-icon <path>", "Windows PNG icon resource path").option("--windows-product-name <name>", "Windows product name").option("--windows-file-description <text>", "Windows file description").option("--windows-company-name <name>", "Windows company name").option("--windows-version <version>", "Windows resource version").option("--windows-copyright <text>", "Windows legal copyright").option("--linux-desktop-id <id>", "Linux desktop entry identifier").option("--linux-name <name>", "Linux desktop display name").option("--linux-comment <text>", "Linux desktop comment").option("--linux-icon <path>", "Linux desktop PNG icon path").option("--linux-categories <list>", "Linux desktop categories").option("--linux-startup-notify <boolean>", "Linux startup notification").option("--out-dir <path>", "output root directory").option("--name <name>", "launcher file name").option("--app-id <id>", "stable application identifier").option("--package-directory <path>", "Muon package dist directory").option("--json", "write result as JSON").action(async (options) => {
|
|
871
|
+
program.command("build").description("Build CEF-free Muon app distribution directories").option("--target <target>", "public target or comma-separated public targets", appendTargetValues, []).option("--all", "build all supported targets").option("--assets <path>", "asset root path").option("--config <path>", "muon config path").option("--icon <path>", "static application PNG icon path").option("--windows-icon <path>", "Windows PNG icon resource path").option("--windows-product-name <name>", "Windows product name").option("--windows-file-description <text>", "Windows file description").option("--windows-company-name <name>", "Windows company name").option("--windows-version <version>", "Windows resource version").option("--windows-copyright <text>", "Windows legal copyright").option("--linux-desktop-id <id>", "Linux desktop entry identifier").option("--linux-name <name>", "Linux desktop display name").option("--linux-comment <text>", "Linux desktop comment").option("--linux-icon <path>", "Linux desktop PNG icon path").option("--linux-categories <list>", "Linux desktop categories").option("--linux-startup-notify <boolean>", "Linux startup notification").option("--out-dir <path>", "output root directory").option("--name <name>", "launcher file name").option("--app-id <id>", "stable application identifier").option("--package-directory <path>", "Muon package dist directory").option("--json", "write result as JSON").action(async (options) => {
|
|
856
872
|
await runBuildCommand(options);
|
|
857
873
|
});
|
|
858
|
-
program.command("pack").description("Build and package a Muon app").option("--type <type>", "package type or comma-separated package types: zip, tar.gz, tgz, deb, nsis (default: all)", appendPackTypeValues).option("--target <target>", "public target, platform, arch, or comma-separated selectors", appendTargetValues, []).option("--all", "build all supported targets").option("--config <path>", "muon config path").option("--windows-icon <path>", "Windows PNG icon resource path").option("--windows-product-name <name>", "Windows product name").option("--windows-file-description <text>", "Windows file description").option("--windows-company-name <name>", "Windows company name").option("--windows-version <version>", "Windows resource version").option("--windows-copyright <text>", "Windows legal copyright").option("--linux-desktop-id <id>", "Linux desktop entry identifier").option("--linux-name <name>", "Linux desktop display name").option("--linux-comment <text>", "Linux desktop comment").option("--linux-icon <path>", "Linux desktop PNG icon path").option("--linux-categories <list>", "Linux desktop categories").option("--linux-startup-notify <boolean>", "Linux startup notification").option("--name <name>", "launcher file name").option("--app-id <id>", "stable application identifier").option("--package-directory <path>", "Muon package dist directory").option("--artifacts-dir <path>", "package artifact output directory").option("--package-name <name>", "package name override").option("--package-version <version>", "package version override").option("--description <text>", "package description override").option("--author <text>", "package author override").option("--json", "write result as JSON").action(async (options) => {
|
|
874
|
+
program.command("pack").description("Build and package a Muon app").option("--type <type>", "package type or comma-separated package types: zip, tar.gz, tgz, deb, nsis (default: all)", appendPackTypeValues).option("--target <target>", "public target, platform, arch, or comma-separated selectors", appendTargetValues, []).option("--all", "build all supported targets").option("--config <path>", "muon config path").option("--icon <path>", "static application PNG icon path").option("--windows-icon <path>", "Windows PNG icon resource path").option("--windows-product-name <name>", "Windows product name").option("--windows-file-description <text>", "Windows file description").option("--windows-company-name <name>", "Windows company name").option("--windows-version <version>", "Windows resource version").option("--windows-copyright <text>", "Windows legal copyright").option("--linux-desktop-id <id>", "Linux desktop entry identifier").option("--linux-name <name>", "Linux desktop display name").option("--linux-comment <text>", "Linux desktop comment").option("--linux-icon <path>", "Linux desktop PNG icon path").option("--linux-categories <list>", "Linux desktop categories").option("--linux-startup-notify <boolean>", "Linux startup notification").option("--name <name>", "launcher file name").option("--app-id <id>", "stable application identifier").option("--package-directory <path>", "Muon package dist directory").option("--artifacts-dir <path>", "package artifact output directory").option("--package-name <name>", "package name override").option("--package-version <version>", "package version override").option("--description <text>", "package description override").option("--author <text>", "package author override").option("--json", "write result as JSON").action(async (options) => {
|
|
859
875
|
await runPackCommand(options);
|
|
860
876
|
});
|
|
861
|
-
const devCommand = program.command("
|
|
877
|
+
const devCommand = program.command("run").description("Launch Muon directly with local development assets").option("--muon-path <path>", "Muon runtime file root").option("--cef-path <path>", "CEF file root").option("--stage-dir <path>", "prepared runtime output directory").option("--config <path>", "muon config path").option("--assets <path>", "development asset directory").option("--no-debugger", "disable Muon debugger defaults").option("--json", "write result as JSON").action(async (options) => {
|
|
862
878
|
await runDevCommand(options, devCommand);
|
|
863
879
|
});
|
|
864
880
|
program.command("init").description("Initialize Muon project helper files").action(async () => {
|