muon-ui 0.10.0 → 0.12.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 +255 -45
- 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-amd64/muon-runtime-helper +0 -0
- package/dist/native/linux-arm64/muon-bootstrap +0 -0
- package/dist/native/linux-arm64/muon-builder +0 -0
- package/dist/native/linux-arm64/muon-runtime-helper +0 -0
- package/dist/native/linux-armhf/muon-bootstrap +0 -0
- package/dist/native/linux-armhf/muon-builder +0 -0
- package/dist/native/linux-armhf/muon-runtime-helper +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-DnxA6RxV.cjs → vite-internals-BK3BM9YY.cjs} +202 -96
- package/dist/vite-internals-BK3BM9YY.cjs.map +1 -0
- package/dist/vite.cjs +185 -23
- package/dist/vite.cjs.map +1 -1
- package/dist/vite.mjs +348 -104
- package/dist/vite.mjs.map +1 -1
- package/muon-virtual-modules.d.ts +90 -0
- package/muon.d.ts +126 -157
- package/package.json +10 -8
- package/vite.d.ts +69 -59
- package/dist/vite-internals-DnxA6RxV.cjs.map +0 -1
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.12.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: e716d83ebb5283f31cbdf524872df61039e6a7f0
|
|
10
10
|
*/
|
|
11
|
-
const require_vite_internals = require("./vite-internals-
|
|
11
|
+
const require_vite_internals = require("./vite-internals-BK3BM9YY.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");
|
|
@@ -76,10 +76,66 @@ var loadViteMuonOptions = async (cwd) => {
|
|
|
76
76
|
pluginOptions: muonPlugins[0]
|
|
77
77
|
};
|
|
78
78
|
};
|
|
79
|
+
var getRuntimePluginConfigFromViteBuild = async (root) => {
|
|
80
|
+
const vite = await import("vite");
|
|
81
|
+
let resolvedRuntimeStates = [];
|
|
82
|
+
const inspector = {
|
|
83
|
+
name: "muon-run-vite-build-inspector",
|
|
84
|
+
enforce: "post",
|
|
85
|
+
configResolved: (config) => {
|
|
86
|
+
const runtimeStates = config.plugins.map((plugin) => require_vite_internals.getMuonVitePluginRuntimeState(plugin)).filter((runtimeState) => runtimeState !== void 0);
|
|
87
|
+
if (runtimeStates.length > 1) throw new Error("Multiple muon() plugin definitions were found in vite.config.*.");
|
|
88
|
+
resolvedRuntimeStates = runtimeStates;
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
const previous = process.env[require_vite_internals.muonBuildSequenceSuppressViteBuildEnvironmentKey];
|
|
92
|
+
process.env[require_vite_internals.muonBuildSequenceSuppressViteBuildEnvironmentKey] = "1";
|
|
93
|
+
try {
|
|
94
|
+
await vite.build({
|
|
95
|
+
root,
|
|
96
|
+
logLevel: "silent",
|
|
97
|
+
plugins: [inspector]
|
|
98
|
+
});
|
|
99
|
+
} finally {
|
|
100
|
+
if (previous === void 0) delete process.env[require_vite_internals.muonBuildSequenceSuppressViteBuildEnvironmentKey];
|
|
101
|
+
else process.env[require_vite_internals.muonBuildSequenceSuppressViteBuildEnvironmentKey] = previous;
|
|
102
|
+
}
|
|
103
|
+
const runtimePluginConfig = resolvedRuntimeStates[0]?.getRuntimePluginConfig();
|
|
104
|
+
if (runtimePluginConfig === void 0) throw new Error("muon Vite plugin runtime config was not resolved.");
|
|
105
|
+
return runtimePluginConfig;
|
|
106
|
+
};
|
|
107
|
+
var copyViteOutputAsRunAssets = async (project, assetSourcePath, assetPrefix) => {
|
|
108
|
+
if (project.viteOutputDirectory === void 0) throw new Error("Vite output directory could not be resolved.");
|
|
109
|
+
await assertDevelopmentAssetDirectory(project.viteOutputDirectory);
|
|
110
|
+
const destinationPath = (0, node_path.join)(assetSourcePath, ...assetPrefix.split("/"));
|
|
111
|
+
await (0, node_fs_promises.mkdir)((0, node_path.dirname)(destinationPath), { recursive: true });
|
|
112
|
+
await (0, node_fs_promises.cp)(project.viteOutputDirectory, destinationPath, { recursive: true });
|
|
113
|
+
};
|
|
114
|
+
var prepareViteRunAssets = async (cwd) => {
|
|
115
|
+
const project = await require_vite_internals.loadMuonBuildSequenceProject(cwd);
|
|
116
|
+
if (project.pluginOptions === void 0) return;
|
|
117
|
+
const buildOptions = require_vite_internals.resolveMuonViteBuildOptions(project.pluginOptions);
|
|
118
|
+
const packagedAssetOptions = require_vite_internals.createVitePackagedAssetOptions(project.viteBase ?? "/");
|
|
119
|
+
const assetSourcePath = (0, node_path.join)(project.root, ".muon", "run", "assets");
|
|
120
|
+
await (0, node_fs_promises.rm)(assetSourcePath, {
|
|
121
|
+
recursive: true,
|
|
122
|
+
force: true
|
|
123
|
+
});
|
|
124
|
+
const runtimePluginConfig = await getRuntimePluginConfigFromViteBuild(project.viteBuildRoot);
|
|
125
|
+
await copyViteOutputAsRunAssets(project, assetSourcePath, packagedAssetOptions.assetPrefix);
|
|
126
|
+
return {
|
|
127
|
+
root: project.root,
|
|
128
|
+
pluginOptions: project.pluginOptions,
|
|
129
|
+
configPath: buildOptions.configPath,
|
|
130
|
+
assetSourcePath,
|
|
131
|
+
browserStartPage: packagedAssetOptions.browserStartPage,
|
|
132
|
+
runtimePluginConfig
|
|
133
|
+
};
|
|
134
|
+
};
|
|
79
135
|
var resolveProjectConfigPath = async (root, configPath) => {
|
|
80
136
|
if (configPath !== void 0) {
|
|
81
137
|
const resolvedPath = resolveFromRoot(root, configPath);
|
|
82
|
-
if (!await fileExists(resolvedPath)) throw new Error(`
|
|
138
|
+
if (!await fileExists(resolvedPath)) throw new Error(`muon config file does not exist: ${resolvedPath}`);
|
|
83
139
|
return resolvedPath;
|
|
84
140
|
}
|
|
85
141
|
for (const fileName of defaultProjectConfigFileNames) {
|
|
@@ -125,14 +181,19 @@ var readConfigAssetSourcePath = (config) => {
|
|
|
125
181
|
if (sourcePath.trim().length === 0) throw new Error("muon config asset.sourcePath must not be empty.");
|
|
126
182
|
return sourcePath;
|
|
127
183
|
};
|
|
184
|
+
var hasConfigBrowserStartPage = (config) => {
|
|
185
|
+
if (config === void 0) return false;
|
|
186
|
+
const browser = config.browser;
|
|
187
|
+
return isJsonObject$1(browser) && browser.startPage !== void 0;
|
|
188
|
+
};
|
|
128
189
|
var assertDevelopmentAssetDirectory = async (assetSourcePath) => {
|
|
129
190
|
if (await directoryExists(assetSourcePath)) return;
|
|
130
191
|
try {
|
|
131
192
|
await (0, node_fs_promises.access)(assetSourcePath, node_fs.constants.F_OK);
|
|
132
193
|
} catch {
|
|
133
|
-
throw new Error(`
|
|
194
|
+
throw new Error(`muon run asset source does not exist: ${assetSourcePath}`);
|
|
134
195
|
}
|
|
135
|
-
throw new Error(`
|
|
196
|
+
throw new Error(`muon run asset source must be a directory: ${assetSourcePath}`);
|
|
136
197
|
};
|
|
137
198
|
var resolveAssetSource = async (root, assetSourcePath, projectConfig) => {
|
|
138
199
|
const configuredAssetSourcePath = readConfigAssetSourcePath(projectConfig.config);
|
|
@@ -155,16 +216,21 @@ var resolveAssetSource = async (root, assetSourcePath, projectConfig) => {
|
|
|
155
216
|
overrideAssetSourcePath: defaultAssetSourcePath
|
|
156
217
|
};
|
|
157
218
|
};
|
|
158
|
-
var createMuonDevOverrideConfig = (assetSourcePath, enableDebugger) =>
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
browser: { keybind: {
|
|
219
|
+
var createMuonDevOverrideConfig = (assetSourcePath, enableDebugger, browserStartPage, runtimePluginConfig) => {
|
|
220
|
+
const browser = browserStartPage === void 0 && !enableDebugger ? void 0 : {
|
|
221
|
+
...browserStartPage === void 0 ? {} : { startPage: browserStartPage },
|
|
222
|
+
...enableDebugger ? { keybind: {
|
|
163
223
|
devtools: "f12",
|
|
164
224
|
recycle: "ctrl+f12"
|
|
165
|
-
} }
|
|
166
|
-
}
|
|
167
|
-
|
|
225
|
+
} } : {}
|
|
226
|
+
};
|
|
227
|
+
return {
|
|
228
|
+
...assetSourcePath === void 0 ? {} : { asset: { sourcePath: assetSourcePath } },
|
|
229
|
+
...enableDebugger ? { cdp: { enable: true } } : {},
|
|
230
|
+
...browser === void 0 ? {} : { browser },
|
|
231
|
+
...runtimePluginConfig === void 0 ? {} : { plugin: runtimePluginConfig }
|
|
232
|
+
};
|
|
233
|
+
};
|
|
168
234
|
var writeMuonDevOverrideConfig = async (overrideConfigPath, overrideConfig) => {
|
|
169
235
|
await (0, node_fs_promises.mkdir)((0, node_path.dirname)(overrideConfigPath), { recursive: true });
|
|
170
236
|
await (0, node_fs_promises.writeFile)(overrideConfigPath, `${JSON.stringify(overrideConfig, null, 2)}\n`);
|
|
@@ -192,13 +258,18 @@ var runMuonExecutable = async (muonExecutablePath, configPaths, environment) =>
|
|
|
192
258
|
return exitCode;
|
|
193
259
|
};
|
|
194
260
|
/**
|
|
195
|
-
* Launches
|
|
261
|
+
* Launches muon directly against local development assets.
|
|
196
262
|
*
|
|
197
263
|
* @param options Development startup options.
|
|
198
|
-
* @returns Development startup result after the
|
|
264
|
+
* @returns Development startup result after the muon process exits.
|
|
199
265
|
*/
|
|
200
266
|
var runMuonDev = async (options = {}) => {
|
|
201
|
-
const
|
|
267
|
+
const cwd = (0, node_path.resolve)(options.root ?? process.cwd());
|
|
268
|
+
const preparedViteAssets = options.assetSourcePath === void 0 ? await prepareViteRunAssets(cwd) : void 0;
|
|
269
|
+
const loadedViteOptions = preparedViteAssets === void 0 ? await loadViteMuonOptions(cwd) : {
|
|
270
|
+
root: preparedViteAssets.root,
|
|
271
|
+
pluginOptions: preparedViteAssets.pluginOptions
|
|
272
|
+
};
|
|
202
273
|
const root = loadedViteOptions.root;
|
|
203
274
|
const pluginOptions = loadedViteOptions.pluginOptions;
|
|
204
275
|
const platform = options.platform ?? process.platform;
|
|
@@ -213,8 +284,12 @@ var runMuonDev = async (options = {}) => {
|
|
|
213
284
|
const cefPath = options.cefPath !== void 0 ? resolveFromRoot(root, options.cefPath) : pluginOptions?.cefPath === void 0 ? void 0 : resolveFromRoot(root, pluginOptions.cefPath);
|
|
214
285
|
const stagePath = options.stagePath !== void 0 ? resolveFromRoot(root, options.stagePath) : pluginOptions?.stagePath === void 0 ? (0, node_path.resolve)(root, ".muon", target) : resolveFromRoot(root, pluginOptions.stagePath);
|
|
215
286
|
const enableDebugger = options.enableDebugger ?? pluginOptions?.enableDebugger ?? true;
|
|
216
|
-
const projectConfig = await resolveProjectConfig(root, options.configPath);
|
|
217
|
-
const asset = await resolveAssetSource(root, options.assetSourcePath, projectConfig)
|
|
287
|
+
const projectConfig = await resolveProjectConfig(root, options.configPath ?? preparedViteAssets?.configPath);
|
|
288
|
+
const asset = preparedViteAssets === void 0 ? await resolveAssetSource(root, options.assetSourcePath, projectConfig) : {
|
|
289
|
+
assetSourcePath: preparedViteAssets.assetSourcePath,
|
|
290
|
+
overrideAssetSourcePath: preparedViteAssets.assetSourcePath
|
|
291
|
+
};
|
|
292
|
+
const browserStartPage = preparedViteAssets?.browserStartPage !== void 0 && !hasConfigBrowserStartPage(projectConfig.config) ? preparedViteAssets.browserStartPage : void 0;
|
|
218
293
|
const overrideConfigPath = (0, node_path.join)(root, ".muon", "run", "muon.run.json");
|
|
219
294
|
await require_vite_internals.ensureMuonGitignoreEntry(root);
|
|
220
295
|
const preparedRuntime = await require_vite_internals.runMuonPrepare({
|
|
@@ -230,7 +305,7 @@ var runMuonDev = async (options = {}) => {
|
|
|
230
305
|
cwd: root
|
|
231
306
|
});
|
|
232
307
|
if (preparedRuntime.stagePath === void 0) throw new Error("muon-builder did not return a staged runtime path.");
|
|
233
|
-
await writeMuonDevOverrideConfig(overrideConfigPath, createMuonDevOverrideConfig(asset.overrideAssetSourcePath, enableDebugger));
|
|
308
|
+
await writeMuonDevOverrideConfig(overrideConfigPath, createMuonDevOverrideConfig(asset.overrideAssetSourcePath, enableDebugger, browserStartPage, preparedViteAssets?.runtimePluginConfig));
|
|
234
309
|
const muonExecutablePath = require_vite_internals.getMuonExecutablePath(preparedRuntime.stagePath, platform);
|
|
235
310
|
const exitCode = await runMuonExecutable(muonExecutablePath, [...projectConfig.configPath === void 0 ? [] : [projectConfig.configPath], overrideConfigPath], environment);
|
|
236
311
|
return {
|
|
@@ -280,7 +355,41 @@ var defaultPackageBuildDirectory = ".muon/pack";
|
|
|
280
355
|
var systemRuntimeRoot = "/var/lib/muon/apps";
|
|
281
356
|
var systemCefCacheRoot = "/var/cache/muon/cef";
|
|
282
357
|
var runtimeHelperExecutableName = "muon-runtime-helper";
|
|
283
|
-
var
|
|
358
|
+
var portableProfilePath = "profile";
|
|
359
|
+
var portableInstallMetadata = {
|
|
360
|
+
type: "portable",
|
|
361
|
+
runtimeMode: "in-place"
|
|
362
|
+
};
|
|
363
|
+
var debRuntimeDependencies = [
|
|
364
|
+
"libc6",
|
|
365
|
+
"libgcc-s1",
|
|
366
|
+
"libstdc++6",
|
|
367
|
+
"libffi8",
|
|
368
|
+
"libexpat1",
|
|
369
|
+
"libdbus-1-3",
|
|
370
|
+
"libglib2.0-0t64 | libglib2.0-0",
|
|
371
|
+
"libgtk-3-0t64 | libgtk-3-0",
|
|
372
|
+
"libatk-bridge2.0-0t64 | libatk-bridge2.0-0",
|
|
373
|
+
"libatk1.0-0t64 | libatk1.0-0",
|
|
374
|
+
"libatspi2.0-0t64 | libatspi2.0-0",
|
|
375
|
+
"libcups2t64 | libcups2",
|
|
376
|
+
"libnspr4",
|
|
377
|
+
"libnss3",
|
|
378
|
+
"libgbm1",
|
|
379
|
+
"libasound2t64 | libasound2",
|
|
380
|
+
"libudev1",
|
|
381
|
+
"libx11-6",
|
|
382
|
+
"libxcb1",
|
|
383
|
+
"libxcomposite1",
|
|
384
|
+
"libxdamage1",
|
|
385
|
+
"libxext6",
|
|
386
|
+
"libxfixes3",
|
|
387
|
+
"libxi6",
|
|
388
|
+
"libxkbcommon0",
|
|
389
|
+
"libxrandr2",
|
|
390
|
+
"libcairo2",
|
|
391
|
+
"libpango-1.0-0"
|
|
392
|
+
];
|
|
284
393
|
var isJsonObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
285
394
|
var readJsonObjectFile = async (path) => {
|
|
286
395
|
const parsed = (0, import_dist.parse)(await (0, node_fs_promises.readFile)(path, "utf8"));
|
|
@@ -304,7 +413,7 @@ var resolveMetadata = (packageJson, options) => {
|
|
|
304
413
|
if (packageNameSource === void 0 || packageNameSource.trim() === "") throw new Error("package.json name is required for muon pack.");
|
|
305
414
|
const version = options.packageVersion ?? (typeof packageJson.version === "string" ? packageJson.version : void 0);
|
|
306
415
|
if (version === void 0 || version.trim() === "") throw new Error("package.json version is required for muon pack.");
|
|
307
|
-
const description = options.description ?? (typeof packageJson.description === "string" ? packageJson.description : "
|
|
416
|
+
const description = options.description ?? (typeof packageJson.description === "string" ? packageJson.description : "muon application");
|
|
308
417
|
const author = options.author ?? stringifyAuthor(packageJson.author) ?? "Unknown";
|
|
309
418
|
return {
|
|
310
419
|
packageName: sanitizePackageName(packageNameSource),
|
|
@@ -369,6 +478,7 @@ var packTypeSupportsTarget = (type, target) => {
|
|
|
369
478
|
const descriptor = require_vite_internals.getMuonTargetDescriptor(target);
|
|
370
479
|
return type === "zip" && descriptor.os === "windows" || type === "tar.gz" && descriptor.os === "linux" || type === "deb" && descriptor.os === "linux" || type === "nsis" && descriptor.os === "windows";
|
|
371
480
|
};
|
|
481
|
+
var isPortablePackType = (type) => type === "zip" || type === "tar.gz";
|
|
372
482
|
var createPackTargetPlan = (types, targets) => {
|
|
373
483
|
const plan = targets.map((target) => ({
|
|
374
484
|
target,
|
|
@@ -404,6 +514,17 @@ var runTool = async (executable, args, cwd, environment) => {
|
|
|
404
514
|
});
|
|
405
515
|
if (exitCode !== 0) throw new Error(`${executable} failed with exit code ${exitCode}: ${stderr.trim()}`);
|
|
406
516
|
};
|
|
517
|
+
var isUnavailableToolError = (error, executable) => {
|
|
518
|
+
if (!(error instanceof Error)) return false;
|
|
519
|
+
const nodeError = error;
|
|
520
|
+
return nodeError.code === "ENOENT" && (nodeError.syscall === `spawn ${executable}` || nodeError.path === executable);
|
|
521
|
+
};
|
|
522
|
+
var reportSkippedUnavailableTool = (progress, executable, type, target) => {
|
|
523
|
+
progress?.({
|
|
524
|
+
phase: "pack",
|
|
525
|
+
status: `Warning: ${executable} is not available; skipping ${type} package for ${target}.`
|
|
526
|
+
});
|
|
527
|
+
};
|
|
407
528
|
var statOrUndefined = async (path) => {
|
|
408
529
|
try {
|
|
409
530
|
return await (0, node_fs_promises.stat)(path);
|
|
@@ -427,9 +548,10 @@ var addDirectoryToZip = async (zip, directory, entryRoot) => {
|
|
|
427
548
|
};
|
|
428
549
|
await walk(directory);
|
|
429
550
|
};
|
|
551
|
+
var getPortableArchiveEntryRoot = (target, metadata) => `${metadata.packageName}/${target.target}`;
|
|
430
552
|
var packageZip = async (target, metadata, artifactsRoot) => {
|
|
431
553
|
const zip = new AdmZip();
|
|
432
|
-
await addDirectoryToZip(zip, target.outputPath, target
|
|
554
|
+
await addDirectoryToZip(zip, target.outputPath, getPortableArchiveEntryRoot(target, metadata));
|
|
433
555
|
const outputPath = (0, node_path.join)(artifactsRoot, `${metadata.packageName}-${metadata.version}-${target.target}.zip`);
|
|
434
556
|
await (0, node_fs_promises.mkdir)((0, node_path.dirname)(outputPath), { recursive: true });
|
|
435
557
|
await (0, node_fs_promises.writeFile)(outputPath, zip.toBuffer());
|
|
@@ -459,13 +581,16 @@ var createTarGzEntryGenerator = async function* (directory, entryRoot) {
|
|
|
459
581
|
var packageTarGz = async (target, metadata, artifactsRoot) => {
|
|
460
582
|
const outputPath = (0, node_path.join)(artifactsRoot, `${metadata.packageName}-${metadata.version}-${target.target}.tar.gz`);
|
|
461
583
|
await (0, node_fs_promises.mkdir)((0, node_path.dirname)(outputPath), { recursive: true });
|
|
462
|
-
await (0, tar_vern.storeReaderToFile)((0, tar_vern.createTarPacker)(createTarGzEntryGenerator(target.outputPath, target
|
|
584
|
+
await (0, tar_vern.storeReaderToFile)((0, tar_vern.createTarPacker)(createTarGzEntryGenerator(target.outputPath, getPortableArchiveEntryRoot(target, metadata)), "gzip"), outputPath);
|
|
463
585
|
return {
|
|
464
586
|
type: "tar.gz",
|
|
465
587
|
target: target.target,
|
|
466
588
|
path: outputPath
|
|
467
589
|
};
|
|
468
590
|
};
|
|
591
|
+
var writePortableInstallMetadata = async (target) => {
|
|
592
|
+
await (0, node_fs_promises.writeFile)((0, node_path.join)(target.outputPath, "muon-install.json"), `${JSON.stringify(portableInstallMetadata, void 0, 2)}\n`);
|
|
593
|
+
};
|
|
469
594
|
var packageDeb = async (root, target, metadata, artifactsRoot, packageBuildRoot, environment, linuxSandbox, progress) => {
|
|
470
595
|
const descriptor = require_vite_internals.getMuonTargetDescriptor(target.target);
|
|
471
596
|
if (descriptor.os !== "linux") throw new Error(`Unsupported deb target: ${target.target}`);
|
|
@@ -481,7 +606,7 @@ var packageDeb = async (root, target, metadata, artifactsRoot, packageBuildRoot,
|
|
|
481
606
|
await (0, node_fs_promises.mkdir)(installedDist, { recursive: true });
|
|
482
607
|
await (0, node_fs_promises.cp)(target.outputPath, installedDist, { recursive: true });
|
|
483
608
|
if (linuxSandbox === "setuid") {
|
|
484
|
-
if (target.runtimeHelperPath === void 0) throw new Error(`
|
|
609
|
+
if (target.runtimeHelperPath === void 0) throw new Error(`muon runtime helper is unavailable for setuid deb target: ${target.target}`);
|
|
485
610
|
await (0, node_fs_promises.chmod)((0, node_path.join)(installedDist, runtimeHelperExecutableName), 2541);
|
|
486
611
|
}
|
|
487
612
|
await (0, node_fs_promises.writeFile)((0, node_path.join)(installedDist, "muon-install.json"), `${JSON.stringify({
|
|
@@ -523,7 +648,7 @@ var packageDeb = async (root, target, metadata, artifactsRoot, packageBuildRoot,
|
|
|
523
648
|
`Version: ${metadata.version}`,
|
|
524
649
|
`Architecture: ${architecture}`,
|
|
525
650
|
`Maintainer: ${metadata.author}`,
|
|
526
|
-
`Depends: ${
|
|
651
|
+
`Depends: ${debRuntimeDependencies.join(", ")}`,
|
|
527
652
|
`Description: ${metadata.description}`,
|
|
528
653
|
""
|
|
529
654
|
].join("\n"));
|
|
@@ -562,12 +687,20 @@ var packageDeb = async (root, target, metadata, artifactsRoot, packageBuildRoot,
|
|
|
562
687
|
phase: "pack",
|
|
563
688
|
status: "Running dpkg-deb"
|
|
564
689
|
});
|
|
565
|
-
|
|
566
|
-
"
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
690
|
+
try {
|
|
691
|
+
await runTool("dpkg-deb", [
|
|
692
|
+
"--root-owner-group",
|
|
693
|
+
"--build",
|
|
694
|
+
packageRoot,
|
|
695
|
+
outputPath
|
|
696
|
+
], root, environment);
|
|
697
|
+
} catch (error) {
|
|
698
|
+
if (isUnavailableToolError(error, "dpkg-deb")) {
|
|
699
|
+
reportSkippedUnavailableTool(progress, "dpkg-deb", "deb", target.target);
|
|
700
|
+
return;
|
|
701
|
+
}
|
|
702
|
+
throw error;
|
|
703
|
+
}
|
|
571
704
|
return {
|
|
572
705
|
type: "deb",
|
|
573
706
|
target: target.target,
|
|
@@ -634,7 +767,15 @@ var packageNsis = async (root, target, metadata, windowsResource, artifactsRoot,
|
|
|
634
767
|
phase: "pack",
|
|
635
768
|
status: "Running makensis"
|
|
636
769
|
});
|
|
637
|
-
|
|
770
|
+
try {
|
|
771
|
+
await runTool("makensis", [scriptPath], root, environment);
|
|
772
|
+
} catch (error) {
|
|
773
|
+
if (isUnavailableToolError(error, "makensis")) {
|
|
774
|
+
reportSkippedUnavailableTool(progress, "makensis", "nsis", target.target);
|
|
775
|
+
return;
|
|
776
|
+
}
|
|
777
|
+
throw error;
|
|
778
|
+
}
|
|
638
779
|
if (await statOrUndefined(outputPath) === void 0) throw new Error(`makensis did not create installer: ${outputPath}`);
|
|
639
780
|
return {
|
|
640
781
|
type: "nsis",
|
|
@@ -675,8 +816,57 @@ var reapplyPackWindowsResources = async (targets, resource, root, environment) =
|
|
|
675
816
|
}
|
|
676
817
|
}
|
|
677
818
|
};
|
|
819
|
+
var createPortableBuildOptions = (input) => {
|
|
820
|
+
const buildOptions = {
|
|
821
|
+
root: input.project.root,
|
|
822
|
+
targets: input.targets,
|
|
823
|
+
allTargets: false,
|
|
824
|
+
outputRoot: input.outputRoot
|
|
825
|
+
};
|
|
826
|
+
if (input.project.pluginOptions !== void 0) {
|
|
827
|
+
if (input.project.viteOutputDirectory === void 0) throw new Error("Vite output directory could not be resolved.");
|
|
828
|
+
Object.assign(buildOptions, input.pluginBuildOptions);
|
|
829
|
+
const packagedAssetOptions = require_vite_internals.createVitePackagedAssetOptions(input.project.viteBase ?? "/");
|
|
830
|
+
buildOptions.assetSourcePath = input.project.viteOutputDirectory;
|
|
831
|
+
buildOptions.assetPrefix = packagedAssetOptions.assetPrefix;
|
|
832
|
+
if (packagedAssetOptions.browserStartPage !== void 0) buildOptions.browserStartPage = packagedAssetOptions.browserStartPage;
|
|
833
|
+
}
|
|
834
|
+
buildOptions.targets = input.targets;
|
|
835
|
+
buildOptions.allTargets = false;
|
|
836
|
+
buildOptions.outputRoot = input.outputRoot;
|
|
837
|
+
if (input.options.configPath !== void 0) buildOptions.configPath = input.options.configPath;
|
|
838
|
+
if (input.iconPath !== void 0) buildOptions.iconPath = input.iconPath;
|
|
839
|
+
if (input.options.appName !== void 0) buildOptions.appName = input.options.appName;
|
|
840
|
+
if (input.options.appId !== void 0) buildOptions.appId = input.options.appId;
|
|
841
|
+
if (input.options.packageDirectory !== void 0) buildOptions.packageDirectory = input.options.packageDirectory;
|
|
842
|
+
if (input.windowsResourceOptions !== void 0) buildOptions.windowsResource = input.windowsResourceOptions;
|
|
843
|
+
if (input.linuxDesktopOptions !== void 0) buildOptions.linuxDesktop = input.linuxDesktopOptions;
|
|
844
|
+
if (input.progress !== void 0) buildOptions.progress = input.progress;
|
|
845
|
+
buildOptions.browserProfilePathOverride = portableProfilePath;
|
|
846
|
+
return buildOptions;
|
|
847
|
+
};
|
|
848
|
+
var buildPortableTargets = async (input) => {
|
|
849
|
+
if (input.targets.length === 0) return /* @__PURE__ */ new Map();
|
|
850
|
+
input.progress?.({
|
|
851
|
+
phase: "pack",
|
|
852
|
+
status: "Building portable distributions"
|
|
853
|
+
});
|
|
854
|
+
const build = await require_vite_internals.buildMuonApp(createPortableBuildOptions({
|
|
855
|
+
project: input.project,
|
|
856
|
+
pluginBuildOptions: input.pluginBuildOptions,
|
|
857
|
+
options: input.options,
|
|
858
|
+
outputRoot: (0, node_path.join)(input.packageBuildRoot, "portable-build"),
|
|
859
|
+
targets: input.targets,
|
|
860
|
+
windowsResourceOptions: input.windowsResourceOptions,
|
|
861
|
+
linuxDesktopOptions: input.linuxDesktopOptions,
|
|
862
|
+
iconPath: input.iconPath,
|
|
863
|
+
progress: input.progress
|
|
864
|
+
}));
|
|
865
|
+
await Promise.all(build.targets.map(writePortableInstallMetadata));
|
|
866
|
+
return new Map(build.targets.map((target) => [target.target, target]));
|
|
867
|
+
};
|
|
678
868
|
/**
|
|
679
|
-
* Runs the
|
|
869
|
+
* Runs the muon build sequence and creates redistributable packages.
|
|
680
870
|
*
|
|
681
871
|
* @param options Pack options.
|
|
682
872
|
* @returns Generated package artifacts.
|
|
@@ -737,6 +927,7 @@ var packMuonApp = async (options) => {
|
|
|
737
927
|
const build = await require_vite_internals.runMuonBuildSequence(buildOptions, project);
|
|
738
928
|
if (options.packageVersion !== void 0) await reapplyPackWindowsResources(build.targets, windowsResource, root, environment);
|
|
739
929
|
const typesByTarget = new Map(targetPlan.map((entry) => [entry.target, entry.types]));
|
|
930
|
+
const portableTargets = targetPlan.filter((entry) => entry.types.some(isPortablePackType)).map((entry) => entry.target);
|
|
740
931
|
await (0, node_fs_promises.rm)(packageBuildRoot, {
|
|
741
932
|
recursive: true,
|
|
742
933
|
force: true
|
|
@@ -750,6 +941,18 @@ var packMuonApp = async (options) => {
|
|
|
750
941
|
force: true
|
|
751
942
|
});
|
|
752
943
|
await (0, node_fs_promises.mkdir)(artifactsRoot, { recursive: true });
|
|
944
|
+
const portableTargetsByTarget = await buildPortableTargets({
|
|
945
|
+
project,
|
|
946
|
+
pluginBuildOptions,
|
|
947
|
+
options,
|
|
948
|
+
packageBuildRoot,
|
|
949
|
+
targets: portableTargets,
|
|
950
|
+
windowsResourceOptions,
|
|
951
|
+
linuxDesktopOptions,
|
|
952
|
+
iconPath,
|
|
953
|
+
progress
|
|
954
|
+
});
|
|
955
|
+
if (options.packageVersion !== void 0) await reapplyPackWindowsResources([...portableTargetsByTarget.values()], windowsResource, root, environment);
|
|
753
956
|
const artifacts = [];
|
|
754
957
|
const totalArtifacts = targetPlan.reduce((sum, entry) => sum + entry.types.length, 0);
|
|
755
958
|
let artifactIndex = 0;
|
|
@@ -760,10 +963,17 @@ var packMuonApp = async (options) => {
|
|
|
760
963
|
status: `Packaging ${type} ${target.target} (${artifactIndex}/${totalArtifacts})`
|
|
761
964
|
});
|
|
762
965
|
let artifact;
|
|
763
|
-
if (type === "zip")
|
|
764
|
-
|
|
765
|
-
|
|
966
|
+
if (type === "zip") {
|
|
967
|
+
const portableTarget = portableTargetsByTarget.get(target.target);
|
|
968
|
+
if (portableTarget === void 0) throw new Error(`Portable target was not built: ${target.target}`);
|
|
969
|
+
artifact = await packageZip(portableTarget, metadata, artifactsRoot);
|
|
970
|
+
} else if (type === "tar.gz") {
|
|
971
|
+
const portableTarget = portableTargetsByTarget.get(target.target);
|
|
972
|
+
if (portableTarget === void 0) throw new Error(`Portable target was not built: ${target.target}`);
|
|
973
|
+
artifact = await packageTarGz(portableTarget, metadata, artifactsRoot);
|
|
974
|
+
} else if (type === "deb") artifact = await packageDeb(root, target, metadata, artifactsRoot, packageBuildRoot, environment, linuxSandbox, progress);
|
|
766
975
|
else artifact = await packageNsis(root, target, metadata, windowsResource, artifactsRoot, packageBuildRoot, environment, progress);
|
|
976
|
+
if (artifact === void 0) continue;
|
|
767
977
|
artifacts.push(artifact);
|
|
768
978
|
progress?.({
|
|
769
979
|
phase: "pack",
|
|
@@ -783,8 +993,8 @@ var packMuonApp = async (options) => {
|
|
|
783
993
|
};
|
|
784
994
|
//#endregion
|
|
785
995
|
//#region src/generated/packageMetadata.ts
|
|
786
|
-
var version = "0.
|
|
787
|
-
var git_commit_hash = "
|
|
996
|
+
var version = "0.12.0";
|
|
997
|
+
var git_commit_hash = "e716d83ebb5283f31cbdf524872df61039e6a7f0";
|
|
788
998
|
//#endregion
|
|
789
999
|
//#region src/cli.ts
|
|
790
1000
|
var readTargetValues = (value) => {
|
|
@@ -974,22 +1184,22 @@ var createCliCommand = () => {
|
|
|
974
1184
|
program.outputHelp({ error: true });
|
|
975
1185
|
process.exitCode = 1;
|
|
976
1186
|
});
|
|
977
|
-
program.command("build").description("Build CEF-free
|
|
1187
|
+
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) => {
|
|
978
1188
|
await runBuildCommand(options);
|
|
979
1189
|
});
|
|
980
|
-
program.command("pack").description("Build and package a
|
|
1190
|
+
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("--linux-sandbox <mode>", "Linux deb CEF sandbox mode: disabled, setuid").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) => {
|
|
981
1191
|
await runPackCommand(options);
|
|
982
1192
|
});
|
|
983
|
-
const devCommand = program.command("run").description("Launch
|
|
1193
|
+
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) => {
|
|
984
1194
|
await runDevCommand(options, devCommand);
|
|
985
1195
|
});
|
|
986
|
-
program.command("init").description("Initialize
|
|
1196
|
+
program.command("init").description("Initialize muon project helper files").action(async () => {
|
|
987
1197
|
await runInitCommand();
|
|
988
1198
|
});
|
|
989
|
-
program.command("prepare").description("Prepare a
|
|
1199
|
+
program.command("prepare").description("Prepare a muon runtime with CEF files").requiredOption("--muon-path <path>", "muon runtime file root").option("--cef-path <path>", "CEF file root").option("--stage-dir <path>", "prepared runtime output directory").option("--target <target>", "prepare target").option("--cache-dir <path>", "CEF artifact cache directory").option("--force", "rebuild an existing prepared runtime").option("-q, --quiet", "suppress native builder progress messages").option("--json", "write result as JSON").action(async (options) => {
|
|
990
1200
|
await runPrepareCommand(options);
|
|
991
1201
|
});
|
|
992
|
-
program.command("embed-config").description("Embed muon.json into
|
|
1202
|
+
program.command("embed-config").description("Embed muon.json into muon runtime files").option("--runtime-path <path>", "prepared runtime directory").option("--core-path <path>", "muon-core executable path").option("--bootstrap-path <path>", "muon-bootstrap executable path").requiredOption("--config <path>", "muon config path").option("--output-runtime-path <path>", "patched runtime output directory").option("--output <path>", "patched muon-core output path").option("--output-bootstrap <path>", "patched bootstrap output path").option("--json", "write result as JSON").action(async (options) => {
|
|
993
1203
|
await runEmbedConfigCommand(options);
|
|
994
1204
|
});
|
|
995
1205
|
return program;
|