app-builder-lib 27.0.0-alpha.4 → 27.0.0-alpha.6
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/appInfo.d.ts +1 -1
- package/dist/appInfo.d.ts.map +1 -1
- package/dist/appInfo.js +3 -3
- package/dist/appInfo.js.map +1 -1
- package/dist/codeSign/mac/macCodeSign.d.ts.map +1 -1
- package/dist/codeSign/mac/macCodeSign.js +3 -6
- package/dist/codeSign/mac/macCodeSign.js.map +1 -1
- package/dist/codeSign/win/signtoolBaseSignManager.d.ts.map +1 -1
- package/dist/codeSign/win/signtoolBaseSignManager.js +6 -4
- package/dist/codeSign/win/signtoolBaseSignManager.js.map +1 -1
- package/dist/codeSign/win/windowsSignAzureManager.d.ts.map +1 -1
- package/dist/codeSign/win/windowsSignAzureManager.js +31 -21
- package/dist/codeSign/win/windowsSignAzureManager.js.map +1 -1
- package/dist/configuration.d.ts +84 -44
- package/dist/configuration.d.ts.map +1 -1
- package/dist/configuration.js +11 -1
- package/dist/configuration.js.map +1 -1
- package/dist/electron/ElectronFramework.d.ts +2 -1
- package/dist/electron/ElectronFramework.d.ts.map +1 -1
- package/dist/electron/ElectronFramework.js +32 -28
- package/dist/electron/ElectronFramework.js.map +1 -1
- package/dist/electron/electronArchSupport.d.ts +12 -0
- package/dist/electron/electronArchSupport.d.ts.map +1 -0
- package/dist/electron/electronArchSupport.js +58 -0
- package/dist/electron/electronArchSupport.js.map +1 -0
- package/dist/electron/electronVersion.d.ts.map +1 -1
- package/dist/electron/electronVersion.js +1 -11
- package/dist/electron/electronVersion.js.map +1 -1
- package/dist/electron/mac/electronMac.js +12 -21
- package/dist/electron/mac/electronMac.js.map +1 -1
- package/dist/electron/mac/electronMacUtils.d.ts +24 -0
- package/dist/electron/mac/electronMacUtils.d.ts.map +1 -0
- package/dist/electron/mac/electronMacUtils.js +42 -0
- package/dist/electron/mac/electronMacUtils.js.map +1 -0
- package/dist/fileMatcher.d.ts +27 -2
- package/dist/fileMatcher.d.ts.map +1 -1
- package/dist/fileMatcher.js +204 -16
- package/dist/fileMatcher.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/indexInternal.d.ts +8 -5
- package/dist/indexInternal.d.ts.map +1 -1
- package/dist/indexInternal.js +8 -4
- package/dist/indexInternal.js.map +1 -1
- package/dist/macPackager.d.ts.map +1 -1
- package/dist/macPackager.js +15 -3
- package/dist/macPackager.js.map +1 -1
- package/dist/node-module-collector/moduleManager.d.ts +3 -1
- package/dist/node-module-collector/moduleManager.d.ts.map +1 -1
- package/dist/node-module-collector/moduleManager.js +9 -1
- package/dist/node-module-collector/moduleManager.js.map +1 -1
- package/dist/node-module-collector/nodeModulesCollector.d.ts +17 -1
- package/dist/node-module-collector/nodeModulesCollector.d.ts.map +1 -1
- package/dist/node-module-collector/nodeModulesCollector.js +67 -1
- package/dist/node-module-collector/nodeModulesCollector.js.map +1 -1
- package/dist/node-module-collector/pnpmNodeModulesCollector.js +5 -5
- package/dist/node-module-collector/pnpmNodeModulesCollector.js.map +1 -1
- package/dist/node-module-collector/types.d.ts +2 -0
- package/dist/node-module-collector/types.d.ts.map +1 -1
- package/dist/node-module-collector/types.js.map +1 -1
- package/dist/options/MsixOptions.d.ts +126 -0
- package/dist/options/MsixOptions.d.ts.map +1 -0
- package/dist/options/MsixOptions.js +2 -0
- package/dist/options/MsixOptions.js.map +1 -0
- package/dist/options/PlatformSpecificBuildOptions.d.ts +0 -6
- package/dist/options/PlatformSpecificBuildOptions.d.ts.map +1 -1
- package/dist/options/PlatformSpecificBuildOptions.js.map +1 -1
- package/dist/options/SnapOptions.d.ts +15 -13
- package/dist/options/SnapOptions.d.ts.map +1 -1
- package/dist/options/SnapOptions.js.map +1 -1
- package/dist/options/macOptions.d.ts +4 -4
- package/dist/options/macOptions.d.ts.map +1 -1
- package/dist/options/macOptions.js.map +1 -1
- package/dist/options/winOptions.d.ts +166 -36
- package/dist/options/winOptions.d.ts.map +1 -1
- package/dist/options/winOptions.js.map +1 -1
- package/dist/packager.d.ts +2 -0
- package/dist/packager.d.ts.map +1 -1
- package/dist/packager.js +26 -21
- package/dist/packager.js.map +1 -1
- package/dist/platformPackager.d.ts +2 -0
- package/dist/platformPackager.d.ts.map +1 -1
- package/dist/platformPackager.js +6 -0
- package/dist/platformPackager.js.map +1 -1
- package/dist/publish/PublishManager.d.ts +1 -0
- package/dist/publish/PublishManager.d.ts.map +1 -1
- package/dist/publish/PublishManager.js +20 -6
- package/dist/publish/PublishManager.js.map +1 -1
- package/dist/publish/updateInfoBuilder.d.ts.map +1 -1
- package/dist/publish/updateInfoBuilder.js +20 -22
- package/dist/publish/updateInfoBuilder.js.map +1 -1
- package/dist/targets/archive.d.ts +11 -0
- package/dist/targets/archive.d.ts.map +1 -1
- package/dist/targets/archive.js +40 -22
- package/dist/targets/archive.js.map +1 -1
- package/dist/targets/linux/FpmTarget.d.ts.map +1 -1
- package/dist/targets/linux/FpmTarget.js +3 -3
- package/dist/targets/linux/FpmTarget.js.map +1 -1
- package/dist/targets/linux/appimage/AppImageTarget.d.ts.map +1 -1
- package/dist/targets/linux/appimage/AppImageTarget.js +5 -6
- package/dist/targets/linux/appimage/AppImageTarget.js.map +1 -1
- package/dist/targets/linux/snap/SnapTarget.d.ts +1 -1
- package/dist/targets/linux/snap/SnapTarget.d.ts.map +1 -1
- package/dist/targets/linux/snap/SnapTarget.js +23 -1
- package/dist/targets/linux/snap/SnapTarget.js.map +1 -1
- package/dist/targets/linux/snap/core24.d.ts +1 -1
- package/dist/targets/linux/snap/core24.d.ts.map +1 -1
- package/dist/targets/linux/snap/core24.js +3 -2
- package/dist/targets/linux/snap/core24.js.map +1 -1
- package/dist/targets/linux/snap/coreCustom.d.ts +1 -1
- package/dist/targets/linux/snap/coreCustom.d.ts.map +1 -1
- package/dist/targets/linux/snap/coreCustom.js +2 -2
- package/dist/targets/linux/snap/coreCustom.js.map +1 -1
- package/dist/targets/linux/snap/coreLegacy.d.ts +1 -1
- package/dist/targets/linux/snap/coreLegacy.d.ts.map +1 -1
- package/dist/targets/linux/snap/coreLegacy.js +2 -1
- package/dist/targets/linux/snap/coreLegacy.js.map +1 -1
- package/dist/targets/linux/snap/snapcraft.d.ts +190 -0
- package/dist/targets/linux/snap/snapcraft.d.ts.map +1 -0
- package/dist/targets/linux/snap/snapcraft.js +11 -0
- package/dist/targets/linux/snap/snapcraft.js.map +1 -0
- package/dist/targets/linux/snap/snapcraftBuilder.d.ts +7 -1
- package/dist/targets/linux/snap/snapcraftBuilder.d.ts.map +1 -1
- package/dist/targets/linux/snap/snapcraftBuilder.js +57 -20
- package/dist/targets/linux/snap/snapcraftBuilder.js.map +1 -1
- package/dist/targets/mac/MacTargetHelper.d.ts +6 -0
- package/dist/targets/mac/MacTargetHelper.d.ts.map +1 -1
- package/dist/targets/mac/MacTargetHelper.js +22 -1
- package/dist/targets/mac/MacTargetHelper.js.map +1 -1
- package/dist/targets/targetFactory.d.ts +7 -0
- package/dist/targets/targetFactory.d.ts.map +1 -1
- package/dist/targets/targetFactory.js +28 -0
- package/dist/targets/targetFactory.js.map +1 -1
- package/dist/targets/win/AppxTarget.d.ts +0 -2
- package/dist/targets/win/AppxTarget.d.ts.map +1 -1
- package/dist/targets/win/AppxTarget.js +37 -317
- package/dist/targets/win/AppxTarget.js.map +1 -1
- package/dist/targets/win/MsixTarget.d.ts +22 -0
- package/dist/targets/win/MsixTarget.d.ts.map +1 -0
- package/dist/targets/win/MsixTarget.js +214 -0
- package/dist/targets/win/MsixTarget.js.map +1 -0
- package/dist/targets/win/nsis/NsisTarget.d.ts +3 -2
- package/dist/targets/win/nsis/NsisTarget.d.ts.map +1 -1
- package/dist/targets/win/nsis/NsisTarget.js +28 -46
- package/dist/targets/win/nsis/NsisTarget.js.map +1 -1
- package/dist/targets/win/nsis/nsisScriptGenerator.d.ts.map +1 -1
- package/dist/targets/win/nsis/nsisScriptGenerator.js +2 -1
- package/dist/targets/win/nsis/nsisScriptGenerator.js.map +1 -1
- package/dist/targets/win/nsis/nsisUtil.d.ts +5 -2
- package/dist/targets/win/nsis/nsisUtil.d.ts.map +1 -1
- package/dist/targets/win/nsis/nsisUtil.js +46 -22
- package/dist/targets/win/nsis/nsisUtil.js.map +1 -1
- package/dist/targets/win/nsis/progId.d.ts +21 -0
- package/dist/targets/win/nsis/progId.d.ts.map +1 -0
- package/dist/targets/win/nsis/progId.js +60 -0
- package/dist/targets/win/nsis/progId.js.map +1 -0
- package/dist/targets/win/winAppUtil.d.ts +115 -0
- package/dist/targets/win/winAppUtil.d.ts.map +1 -0
- package/dist/targets/win/winAppUtil.js +407 -0
- package/dist/targets/win/winAppUtil.js.map +1 -0
- package/dist/toolsets/7zip.d.ts.map +1 -1
- package/dist/toolsets/7zip.js +3 -1
- package/dist/toolsets/7zip.js.map +1 -1
- package/dist/toolsets/appimage.d.ts +3 -3
- package/dist/toolsets/appimage.d.ts.map +1 -1
- package/dist/toolsets/appimage.js +9 -6
- package/dist/toolsets/appimage.js.map +1 -1
- package/dist/toolsets/custom.d.ts +1 -3
- package/dist/toolsets/custom.d.ts.map +1 -1
- package/dist/toolsets/custom.js +4 -133
- package/dist/toolsets/custom.js.map +1 -1
- package/dist/toolsets/fpm.d.ts.map +1 -1
- package/dist/toolsets/fpm.js +11 -5
- package/dist/toolsets/fpm.js.map +1 -1
- package/dist/toolsets/icons.d.ts.map +1 -1
- package/dist/toolsets/icons.js +4 -1
- package/dist/toolsets/icons.js.map +1 -1
- package/dist/toolsets/linuxToolsMac.d.ts.map +1 -1
- package/dist/toolsets/linuxToolsMac.js +4 -1
- package/dist/toolsets/linuxToolsMac.js.map +1 -1
- package/dist/toolsets/nsis.d.ts.map +1 -1
- package/dist/toolsets/nsis.js +6 -3
- package/dist/toolsets/nsis.js.map +1 -1
- package/dist/toolsets/version.d.ts +12 -0
- package/dist/toolsets/version.d.ts.map +1 -0
- package/dist/toolsets/version.js +13 -0
- package/dist/toolsets/version.js.map +1 -0
- package/dist/toolsets/winCodeSign.d.ts +20 -3
- package/dist/toolsets/winCodeSign.d.ts.map +1 -1
- package/dist/toolsets/winCodeSign.js +56 -27
- package/dist/toolsets/winCodeSign.js.map +1 -1
- package/dist/toolsets/wine.d.ts +2 -1
- package/dist/toolsets/wine.d.ts.map +1 -1
- package/dist/toolsets/wine.js +15 -13
- package/dist/toolsets/wine.js.map +1 -1
- package/dist/util/NodeModuleCopyHelper.js +3 -3
- package/dist/util/NodeModuleCopyHelper.js.map +1 -1
- package/dist/util/appFileCopier.d.ts +39 -0
- package/dist/util/appFileCopier.d.ts.map +1 -1
- package/dist/util/appFileCopier.js +88 -22
- package/dist/util/appFileCopier.js.map +1 -1
- package/dist/util/config/config.d.ts +1 -0
- package/dist/util/config/config.d.ts.map +1 -1
- package/dist/util/config/config.js +4 -1
- package/dist/util/config/config.js.map +1 -1
- package/dist/util/config/load.d.ts +2 -2
- package/dist/util/config/load.d.ts.map +1 -1
- package/dist/util/config/load.js +3 -12
- package/dist/util/config/load.js.map +1 -1
- package/dist/util/config/schemaValidator.js +1 -1
- package/dist/util/config/schemaValidator.js.map +1 -1
- package/dist/util/electronGet.d.ts +6 -3
- package/dist/util/electronGet.d.ts.map +1 -1
- package/dist/util/electronGet.js +40 -20
- package/dist/util/electronGet.js.map +1 -1
- package/dist/util/flags.d.ts +0 -2
- package/dist/util/flags.d.ts.map +1 -1
- package/dist/util/flags.js +0 -6
- package/dist/util/flags.js.map +1 -1
- package/dist/util/hash.d.ts +1 -1
- package/dist/util/hash.d.ts.map +1 -1
- package/dist/util/hash.js +1 -15
- package/dist/util/hash.js.map +1 -1
- package/dist/util/packageMetadata.js +0 -10
- package/dist/util/packageMetadata.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/vm/ParallelsVm.d.ts.map +1 -1
- package/dist/vm/ParallelsVm.js +18 -5
- package/dist/vm/ParallelsVm.js.map +1 -1
- package/dist/winPackager.d.ts.map +1 -1
- package/dist/winPackager.js +3 -0
- package/dist/winPackager.js.map +1 -1
- package/package.json +8 -8
- package/scheme.json +556 -133
- package/templates/appx/appxmanifest.xml +1 -1
- package/templates/msix/appxmanifest.xml +45 -0
- package/templates/nsis/installSection.nsh +14 -0
|
@@ -1,44 +1,12 @@
|
|
|
1
|
-
import { Arch, asArray,
|
|
1
|
+
import { Arch, asArray, InvalidConfigurationError, log } from "builder-util";
|
|
2
2
|
import path from "path";
|
|
3
|
-
import {
|
|
3
|
+
import { isOldWin6 } from "../../toolsets/winCodeSign.js";
|
|
4
4
|
import { Target } from "../../core.js";
|
|
5
5
|
import { getTemplatePath } from "../../util/pathManager.js";
|
|
6
|
-
|
|
7
|
-
import {
|
|
6
|
+
// Shared with the MSIX target — winAppUtil is the single source of truth for the build pipeline + manifest helpers.
|
|
7
|
+
import { buildAppxPackage, buildCapabilitiesXml, buildExtensionsXml, defaultTileTag, lockScreenTag, resolvePackageApplicationId, resolvePackageIdentityName, resourceLanguageTag, splashScreenTag, substituteManifestMacros, } from "./winAppUtil.js";
|
|
8
8
|
import _fsExtra from "fs-extra";
|
|
9
|
-
const {
|
|
10
|
-
const APPX_ASSETS_DIR_NAME = "appx";
|
|
11
|
-
const vendorAssetsForDefaultAssets = {
|
|
12
|
-
"StoreLogo.png": "SampleAppx.50x50.png",
|
|
13
|
-
"Square150x150Logo.png": "SampleAppx.150x150.png",
|
|
14
|
-
"Square44x44Logo.png": "SampleAppx.44x44.png",
|
|
15
|
-
"Wide310x150Logo.png": "SampleAppx.310x150.png",
|
|
16
|
-
};
|
|
17
|
-
const restrictedApplicationIdValues = [
|
|
18
|
-
"CON",
|
|
19
|
-
"PRN",
|
|
20
|
-
"AUX",
|
|
21
|
-
"NUL",
|
|
22
|
-
"COM1",
|
|
23
|
-
"COM2",
|
|
24
|
-
"COM3",
|
|
25
|
-
"COM4",
|
|
26
|
-
"COM5",
|
|
27
|
-
"COM6",
|
|
28
|
-
"COM7",
|
|
29
|
-
"COM8",
|
|
30
|
-
"COM9",
|
|
31
|
-
"LPT1",
|
|
32
|
-
"LPT2",
|
|
33
|
-
"LPT3",
|
|
34
|
-
"LPT4",
|
|
35
|
-
"LPT5",
|
|
36
|
-
"LPT6",
|
|
37
|
-
"LPT7",
|
|
38
|
-
"LPT8",
|
|
39
|
-
"LPT9",
|
|
40
|
-
];
|
|
41
|
-
const DEFAULT_RESOURCE_LANG = "en-US";
|
|
9
|
+
const { readFile, writeFile } = _fsExtra;
|
|
42
10
|
export default class AppXTarget extends Target {
|
|
43
11
|
constructor(packager, outDir) {
|
|
44
12
|
super("appx");
|
|
@@ -51,114 +19,12 @@ export default class AppXTarget extends Target {
|
|
|
51
19
|
}
|
|
52
20
|
}
|
|
53
21
|
// https://docs.microsoft.com/en-us/windows/uwp/packaging/create-app-package-with-makeappx-tool#mapping-files
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
targetPresentableName: "AppX",
|
|
60
|
-
file: artifactPath,
|
|
61
|
-
arch,
|
|
22
|
+
build(appOutDir, arch) {
|
|
23
|
+
return buildAppxPackage(this, this.packager, this.options, appOutDir, arch, {
|
|
24
|
+
kind: "appx",
|
|
25
|
+
presentableName: "AppX",
|
|
26
|
+
writeManifest: (manifestFile, a, publisher, userAssets) => this.writeManifest(manifestFile, a, publisher, userAssets),
|
|
62
27
|
});
|
|
63
|
-
const vendorPath = await getWindowsKitsBundle({ winCodeSign: this.packager.config.toolsets?.winCodeSign, arch: arch, resourcesDir: this.packager.buildResourcesDir });
|
|
64
|
-
const vm = await packager.vm.value;
|
|
65
|
-
const stageDir = await createStageDir(this, packager, arch);
|
|
66
|
-
const mappingFile = stageDir.getTempFile("mapping.txt");
|
|
67
|
-
const makeAppXArgs = ["pack", "/o" /* overwrite the output file if it exists */, "/f", vm.toVmFile(mappingFile), "/p", vm.toVmFile(artifactPath)];
|
|
68
|
-
if (packager.compression === "store") {
|
|
69
|
-
makeAppXArgs.push("/nc");
|
|
70
|
-
}
|
|
71
|
-
const mappingList = [];
|
|
72
|
-
mappingList.push(await Promise.all((await walk(appOutDir)).map(file => {
|
|
73
|
-
let appxPath = file.substring(appOutDir.length + 1);
|
|
74
|
-
if (path.sep !== "\\") {
|
|
75
|
-
appxPath = appxPath.replace(/\//g, "\\");
|
|
76
|
-
}
|
|
77
|
-
return `"${vm.toVmFile(file)}" "app\\${appxPath}"`;
|
|
78
|
-
})));
|
|
79
|
-
const userAssetDir = await this.packager.getResource(undefined, APPX_ASSETS_DIR_NAME);
|
|
80
|
-
const assetInfo = await AppXTarget.computeUserAssets(vm, vendorPath.appxAssets, userAssetDir);
|
|
81
|
-
const userAssets = assetInfo.userAssets;
|
|
82
|
-
const manifestFile = stageDir.getTempFile("AppxManifest.xml");
|
|
83
|
-
await this.writeManifest(manifestFile, arch, await this.computePublisherName(), userAssets);
|
|
84
|
-
await packager.emitAppxManifestCreated(manifestFile);
|
|
85
|
-
mappingList.push(assetInfo.mappings);
|
|
86
|
-
mappingList.push([`"${vm.toVmFile(manifestFile)}" "AppxManifest.xml"`]);
|
|
87
|
-
if (isScaledAssetsProvided(userAssets)) {
|
|
88
|
-
const outFile = vm.toVmFile(stageDir.getTempFile("resources.pri"));
|
|
89
|
-
const makePriPath = vm.toVmFile(path.join(vendorPath.kit, "makepri.exe"));
|
|
90
|
-
const assetRoot = stageDir.getTempFile("appx/assets");
|
|
91
|
-
await emptyDir(assetRoot);
|
|
92
|
-
await Promise.all(assetInfo.allAssets.map(it => copyOrLinkFile(it, path.join(assetRoot, path.basename(it)))));
|
|
93
|
-
await vm.exec(makePriPath, [
|
|
94
|
-
"new",
|
|
95
|
-
"/Overwrite",
|
|
96
|
-
"/Manifest",
|
|
97
|
-
vm.toVmFile(manifestFile),
|
|
98
|
-
"/ProjectRoot",
|
|
99
|
-
vm.toVmFile(path.dirname(assetRoot)),
|
|
100
|
-
"/ConfigXml",
|
|
101
|
-
vm.toVmFile(path.join(getTemplatePath("appx"), "priconfig.xml")),
|
|
102
|
-
"/OutputFile",
|
|
103
|
-
outFile,
|
|
104
|
-
]);
|
|
105
|
-
// in addition to resources.pri, resources.scale-140.pri and other such files will be generated
|
|
106
|
-
for (const resourceFile of (await readdir(stageDir.dir)).filter(it => it.startsWith("resources.")).sort()) {
|
|
107
|
-
mappingList.push([`"${vm.toVmFile(stageDir.getTempFile(resourceFile))}" "${resourceFile}"`]);
|
|
108
|
-
}
|
|
109
|
-
makeAppXArgs.push("/l");
|
|
110
|
-
}
|
|
111
|
-
let mapping = "[Files]";
|
|
112
|
-
for (const list of mappingList) {
|
|
113
|
-
mapping += "\r\n" + list.join("\r\n");
|
|
114
|
-
}
|
|
115
|
-
await writeFile(mappingFile, mapping);
|
|
116
|
-
packager.debugLogger.add("appx.mapping", mapping);
|
|
117
|
-
if (this.options.makeappxArgs != null) {
|
|
118
|
-
makeAppXArgs.push(...this.options.makeappxArgs);
|
|
119
|
-
}
|
|
120
|
-
this.buildQueueManager.add(async () => {
|
|
121
|
-
await vm.exec(vm.toVmFile(path.join(vendorPath.kit, "makeappx.exe")), makeAppXArgs);
|
|
122
|
-
await packager.signIf(artifactPath);
|
|
123
|
-
await stageDir.cleanup();
|
|
124
|
-
await packager.emitArtifactBuildCompleted({
|
|
125
|
-
file: artifactPath,
|
|
126
|
-
packager,
|
|
127
|
-
arch,
|
|
128
|
-
safeArtifactName: packager.computeSafeArtifactName(artifactName, "appx"),
|
|
129
|
-
target: this,
|
|
130
|
-
isWriteUpdateInfo: this.options.electronUpdaterAware,
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
static async computeUserAssets(vm, vendorPath, userAssetDir) {
|
|
135
|
-
const mappings = [];
|
|
136
|
-
let userAssets;
|
|
137
|
-
const allAssets = [];
|
|
138
|
-
if (userAssetDir == null) {
|
|
139
|
-
userAssets = [];
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
userAssets = (await readdir(userAssetDir)).filter(it => !it.startsWith(".") && !it.endsWith(".db") && it.includes("."));
|
|
143
|
-
for (const name of userAssets) {
|
|
144
|
-
mappings.push(`"${vm.toVmFile(userAssetDir)}${vm.pathSep}${name}" "assets\\${name}"`);
|
|
145
|
-
allAssets.push(path.join(userAssetDir, name));
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
for (const defaultAsset of Object.keys(vendorAssetsForDefaultAssets)) {
|
|
149
|
-
if (userAssets.length === 0 || !isDefaultAssetIncluded(userAssets, defaultAsset)) {
|
|
150
|
-
const file = sanitizeDirPath(path.join(vendorPath, "appxAssets", vendorAssetsForDefaultAssets[defaultAsset]), vendorPath);
|
|
151
|
-
mappings.push(`"${vm.toVmFile(file)}" "assets\\${defaultAsset}"`);
|
|
152
|
-
allAssets.push(file);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
// we do not use process.arch to build path to tools, because even if you are on x64, ia32 appx tool must be used if you build appx for ia32
|
|
156
|
-
return { userAssets, mappings, allAssets };
|
|
157
|
-
}
|
|
158
|
-
async computePublisherName() {
|
|
159
|
-
const signtoolManager = await this.packager.signingManager.value;
|
|
160
|
-
// https://github.com/electron-userland/electron-builder/issues/2108#issuecomment-333200711
|
|
161
|
-
return signtoolManager.computePublisherName(this, this.options.publisher ?? null);
|
|
162
28
|
}
|
|
163
29
|
async writeManifest(outFile, arch, publisher, userAssets) {
|
|
164
30
|
const appInfo = this.packager.appInfo;
|
|
@@ -173,84 +39,31 @@ export default class AppXTarget extends Target {
|
|
|
173
39
|
log.info({ manifestPath: log.filePath(customManifestPath) }, "custom appx manifest found");
|
|
174
40
|
}
|
|
175
41
|
const manifestFileContent = await readFile(customManifestPath || path.join(getTemplatePath("appx"), "appxmanifest.xml"), "utf8");
|
|
176
|
-
const manifest = manifestFileContent
|
|
42
|
+
const manifest = substituteManifestMacros(manifestFileContent, (p1) => {
|
|
177
43
|
switch (p1) {
|
|
178
44
|
case "publisher":
|
|
179
|
-
return
|
|
45
|
+
return publisher;
|
|
180
46
|
case "publisherDisplayName": {
|
|
181
47
|
const name = options.publisherDisplayName || appInfo.companyName;
|
|
182
48
|
if (name == null) {
|
|
183
49
|
throw new InvalidConfigurationError(`Please specify "author" in the application package.json — it is required because "appx.publisherDisplayName" is not set.`);
|
|
184
50
|
}
|
|
185
|
-
return
|
|
51
|
+
return name;
|
|
186
52
|
}
|
|
187
53
|
case "version":
|
|
188
54
|
return appInfo.getVersionInWeirdWindowsForm(options.setBuildNumber === true);
|
|
189
|
-
case "applicationId":
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
}
|
|
196
|
-
else if (!isNaN(identitynumber) && options.identityName !== null && options.identityName !== undefined) {
|
|
197
|
-
if (options.identityName[0] === "0") {
|
|
198
|
-
log.warn(`Remove the 0${identitynumber}`);
|
|
199
|
-
result = options.identityName.replace("0" + identitynumber.toString(), "");
|
|
200
|
-
}
|
|
201
|
-
else {
|
|
202
|
-
log.warn(`Remove the ${identitynumber}`);
|
|
203
|
-
result = options.identityName.replace(identitynumber.toString(), "");
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
result = options.identityName || appInfo.name;
|
|
208
|
-
}
|
|
209
|
-
if (result.length < 1 || result.length > 64) {
|
|
210
|
-
const message = `Appx Application.Id must be between 1 and 64 characters in length: ${result}`;
|
|
211
|
-
throw new InvalidConfigurationError(message);
|
|
212
|
-
}
|
|
213
|
-
else if (!validCharactersRegex.test(result)) {
|
|
214
|
-
const message = `AppX Application.Id cannot contain alpha-numeric, period, and dash characters: ${result}"`;
|
|
215
|
-
throw new InvalidConfigurationError(message);
|
|
216
|
-
}
|
|
217
|
-
else if (restrictedApplicationIdValues.includes(result.toUpperCase())) {
|
|
218
|
-
const message = `AppX Application.Id cannot contain restricted values ${JSON.stringify(restrictedApplicationIdValues)}: ${result}`;
|
|
219
|
-
throw new InvalidConfigurationError(message);
|
|
220
|
-
}
|
|
221
|
-
else if (result == null && options.applicationId == null) {
|
|
222
|
-
const message = `Please set appx.applicationId (or correct appx.identityName or name)`;
|
|
223
|
-
throw new InvalidConfigurationError(message);
|
|
224
|
-
}
|
|
225
|
-
return result;
|
|
226
|
-
}
|
|
227
|
-
case "identityName": {
|
|
228
|
-
const result = options.identityName || appInfo.name;
|
|
229
|
-
const validCharactersRegex = /^[a-zA-Z0-9.-]+$/;
|
|
230
|
-
if (result.length < 3 || result.length > 50) {
|
|
231
|
-
const message = `Appx identityName.Id must be between 3 and 50 characters in length: ${result}`;
|
|
232
|
-
throw new InvalidConfigurationError(message);
|
|
233
|
-
}
|
|
234
|
-
else if (!validCharactersRegex.test(result)) {
|
|
235
|
-
const message = `AppX identityName.Id cannot contain of alpha-numeric, period, and dash characters: ${result}`;
|
|
236
|
-
throw new InvalidConfigurationError(message);
|
|
237
|
-
}
|
|
238
|
-
else if (restrictedApplicationIdValues.includes(result.toUpperCase())) {
|
|
239
|
-
const message = `AppX identityName.Id cannot contain restricted values ${JSON.stringify(restrictedApplicationIdValues)}: ${result}`;
|
|
240
|
-
throw new InvalidConfigurationError(message);
|
|
241
|
-
}
|
|
242
|
-
else if (result == null && options.identityName == null) {
|
|
243
|
-
const message = `Please set appx.identityName or name`;
|
|
244
|
-
throw new InvalidConfigurationError(message);
|
|
245
|
-
}
|
|
246
|
-
return result;
|
|
247
|
-
}
|
|
55
|
+
case "applicationId":
|
|
56
|
+
// Shared with MSIX: consistent "AppX" label, correct validation messages, and identical
|
|
57
|
+
// numeric-prefix stripping / validation logic (see winAppUtil.resolvePackageApplicationId).
|
|
58
|
+
return resolvePackageApplicationId(options.applicationId, options.identityName, appInfo.name, "AppX");
|
|
59
|
+
case "identityName":
|
|
60
|
+
return resolvePackageIdentityName(options.identityName, appInfo.name, "AppX");
|
|
248
61
|
case "executable":
|
|
249
62
|
return executable;
|
|
250
63
|
case "displayName":
|
|
251
|
-
return
|
|
64
|
+
return displayName;
|
|
252
65
|
case "description":
|
|
253
|
-
return
|
|
66
|
+
return appInfo.description || appInfo.productName;
|
|
254
67
|
case "backgroundColor":
|
|
255
68
|
return options.backgroundColor || "#464646";
|
|
256
69
|
case "logo":
|
|
@@ -284,115 +97,22 @@ export default class AppXTarget extends Target {
|
|
|
284
97
|
await writeFile(outFile, manifest);
|
|
285
98
|
}
|
|
286
99
|
getCapabilities() {
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
if (isAddAutoLaunchExtension === undefined) {
|
|
304
|
-
const deps = this.packager.metadata.dependencies;
|
|
305
|
-
isAddAutoLaunchExtension = deps != null && deps["electron-winstore-auto-launch"] != null;
|
|
306
|
-
}
|
|
307
|
-
if (!isAddAutoLaunchExtension && uriSchemes.length === 0 && fileAssociations.length === 0 && this.options.customExtensionsPath === undefined) {
|
|
308
|
-
return "";
|
|
309
|
-
}
|
|
310
|
-
let extensions = "<Extensions>";
|
|
311
|
-
if (isAddAutoLaunchExtension) {
|
|
312
|
-
extensions += `
|
|
313
|
-
<desktop:Extension Category="windows.startupTask" Executable="${executable}" EntryPoint="Windows.FullTrustApplication">
|
|
314
|
-
<desktop:StartupTask TaskId="SlackStartup" Enabled="true" DisplayName="${displayName}" />
|
|
315
|
-
</desktop:Extension>`;
|
|
316
|
-
}
|
|
317
|
-
for (const protocol of uriSchemes) {
|
|
318
|
-
for (const scheme of asArray(protocol.schemes)) {
|
|
319
|
-
extensions += `
|
|
320
|
-
<uap:Extension Category="windows.protocol">
|
|
321
|
-
<uap:Protocol Name="${scheme}">
|
|
322
|
-
<uap:DisplayName>${protocol.name}</uap:DisplayName>
|
|
323
|
-
</uap:Protocol>
|
|
324
|
-
</uap:Extension>`;
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
for (const fileAssociation of fileAssociations) {
|
|
328
|
-
for (const ext of asArray(fileAssociation.ext)) {
|
|
329
|
-
extensions += `
|
|
330
|
-
<uap:Extension Category="windows.fileTypeAssociation">
|
|
331
|
-
<uap:FileTypeAssociation Name="${ext}">
|
|
332
|
-
<uap:SupportedFileTypes>
|
|
333
|
-
<uap:FileType>.${ext}</uap:FileType>
|
|
334
|
-
</uap:SupportedFileTypes>
|
|
335
|
-
</uap:FileTypeAssociation>
|
|
336
|
-
</uap:Extension>`;
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
if (this.options.customExtensionsPath !== undefined) {
|
|
340
|
-
const extensionsPath = path.resolve(this.packager.appDir, this.options.customExtensionsPath);
|
|
341
|
-
extensions += await readFile(extensionsPath, "utf8");
|
|
342
|
-
}
|
|
343
|
-
extensions += "</Extensions>";
|
|
344
|
-
return extensions;
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
// get the resource - language tag, see https://docs.microsoft.com/en-us/windows/uwp/globalizing/manage-language-and-region#specify-the-supported-languages-in-the-apps-manifest
|
|
348
|
-
function resourceLanguageTag(userLanguages) {
|
|
349
|
-
if (userLanguages == null || userLanguages.length === 0) {
|
|
350
|
-
userLanguages = [DEFAULT_RESOURCE_LANG];
|
|
351
|
-
}
|
|
352
|
-
return userLanguages.map(it => `<Resource Language="${it.trim().replace(/_/g, "-")}" />`).join("\n");
|
|
353
|
-
}
|
|
354
|
-
function lockScreenTag(userAssets) {
|
|
355
|
-
if (isDefaultAssetIncluded(userAssets, "BadgeLogo.png")) {
|
|
356
|
-
return '<uap:LockScreen Notification="badgeAndTileText" BadgeLogo="assets\\BadgeLogo.png" />';
|
|
357
|
-
}
|
|
358
|
-
else {
|
|
359
|
-
return "";
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
function defaultTileTag(userAssets, showNameOnTiles) {
|
|
363
|
-
const defaultTiles = ["<uap:DefaultTile", 'Wide310x150Logo="assets\\Wide310x150Logo.png"'];
|
|
364
|
-
if (isDefaultAssetIncluded(userAssets, "LargeTile.png")) {
|
|
365
|
-
defaultTiles.push('Square310x310Logo="assets\\LargeTile.png"');
|
|
366
|
-
}
|
|
367
|
-
if (isDefaultAssetIncluded(userAssets, "SmallTile.png")) {
|
|
368
|
-
defaultTiles.push('Square71x71Logo="assets\\SmallTile.png"');
|
|
369
|
-
}
|
|
370
|
-
if (showNameOnTiles) {
|
|
371
|
-
defaultTiles.push(">");
|
|
372
|
-
defaultTiles.push("<uap:ShowNameOnTiles>");
|
|
373
|
-
defaultTiles.push("<uap:ShowOn", 'Tile="wide310x150Logo"', "/>");
|
|
374
|
-
defaultTiles.push("<uap:ShowOn", 'Tile="square150x150Logo"', "/>");
|
|
375
|
-
defaultTiles.push("</uap:ShowNameOnTiles>");
|
|
376
|
-
defaultTiles.push("</uap:DefaultTile>");
|
|
377
|
-
}
|
|
378
|
-
else {
|
|
379
|
-
defaultTiles.push("/>");
|
|
380
|
-
}
|
|
381
|
-
return defaultTiles.join(" ");
|
|
382
|
-
}
|
|
383
|
-
function splashScreenTag(userAssets) {
|
|
384
|
-
if (isDefaultAssetIncluded(userAssets, "SplashScreen.png")) {
|
|
385
|
-
return '<uap:SplashScreen Image="assets\\SplashScreen.png" />';
|
|
386
|
-
}
|
|
387
|
-
else {
|
|
388
|
-
return "";
|
|
100
|
+
return `<Capabilities>\n${buildCapabilitiesXml(this.options.capabilities)}\n</Capabilities>`;
|
|
101
|
+
}
|
|
102
|
+
getExtensions(executable, displayName) {
|
|
103
|
+
// Delegate to the shared, XML-escaped helper so AppX and MSIX produce identical (and safely
|
|
104
|
+
// escaped) extension XML and cannot drift. Raw interpolation here previously left protocol
|
|
105
|
+
// schemes/names, file-association extensions, displayName and executable unescaped.
|
|
106
|
+
return buildExtensionsXml({
|
|
107
|
+
protocols: asArray(this.packager.config.protocols).concat(asArray(this.packager.platformOptions.protocols)),
|
|
108
|
+
fileAssociations: asArray(this.packager.config.fileAssociations).concat(asArray(this.packager.platformOptions.fileAssociations)),
|
|
109
|
+
addAutoLaunchExtension: this.options.addAutoLaunchExtension,
|
|
110
|
+
customExtensionsPath: this.options.customExtensionsPath,
|
|
111
|
+
appDir: this.packager.appDir,
|
|
112
|
+
executable,
|
|
113
|
+
displayName,
|
|
114
|
+
dependencyNames: this.packager.metadata.dependencies,
|
|
115
|
+
});
|
|
389
116
|
}
|
|
390
117
|
}
|
|
391
|
-
function isDefaultAssetIncluded(userAssets, defaultAsset) {
|
|
392
|
-
const defaultAssetName = defaultAsset.substring(0, defaultAsset.indexOf("."));
|
|
393
|
-
return userAssets.some(it => it.includes(defaultAssetName));
|
|
394
|
-
}
|
|
395
|
-
function isScaledAssetsProvided(userAssets) {
|
|
396
|
-
return userAssets.some(it => it.includes(".scale-") || it.includes(".targetsize-"));
|
|
397
|
-
}
|
|
398
118
|
//# sourceMappingURL=AppxTarget.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppxTarget.js","sourceRoot":"","sources":["../../../src/targets/win/AppxTarget.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arch, asArray, copyOrLinkFile, InvalidConfigurationError, log, sanitizeDirPath, walk, escapeForXml } from \"builder-util\"\nimport { Nullish } from \"builder-util-runtime\"\n\nimport path from \"path\"\nimport { AppXOptions } from \"../../index.js\"\nimport { getWindowsKitsBundle, isOldWin6 } from \"../../toolsets/winCodeSign.js\"\nimport { Target } from \"../../core.js\"\nimport { getTemplatePath } from \"../../util/pathManager.js\"\nimport { VmManager } from \"../../vm/vm.js\"\nimport { WinPackager } from \"../../winPackager.js\"\nimport { createStageDir } from \"../targetUtil.js\"\nimport { CAPABILITIES, isValidCapabilityName } from \"./AppxCapabilities.js\"\nimport _fsExtra from \"fs-extra\"\nconst { emptyDir, readdir, readFile, writeFile } = _fsExtra\n\nconst APPX_ASSETS_DIR_NAME = \"appx\"\n\nconst vendorAssetsForDefaultAssets: Record<string, string> = {\n \"StoreLogo.png\": \"SampleAppx.50x50.png\",\n \"Square150x150Logo.png\": \"SampleAppx.150x150.png\",\n \"Square44x44Logo.png\": \"SampleAppx.44x44.png\",\n \"Wide310x150Logo.png\": \"SampleAppx.310x150.png\",\n}\n\nconst restrictedApplicationIdValues = [\n \"CON\",\n \"PRN\",\n \"AUX\",\n \"NUL\",\n \"COM1\",\n \"COM2\",\n \"COM3\",\n \"COM4\",\n \"COM5\",\n \"COM6\",\n \"COM7\",\n \"COM8\",\n \"COM9\",\n \"LPT1\",\n \"LPT2\",\n \"LPT3\",\n \"LPT4\",\n \"LPT5\",\n \"LPT6\",\n \"LPT7\",\n \"LPT8\",\n \"LPT9\",\n]\n\nconst DEFAULT_RESOURCE_LANG = \"en-US\"\n\nexport default class AppXTarget extends Target {\n readonly options: AppXOptions = this.packager.getOptionsForTarget<AppXOptions>(\"appx\")\n\n isAsyncSupported = false\n\n constructor(\n private readonly packager: WinPackager,\n readonly outDir: string\n ) {\n super(\"appx\")\n\n if (process.platform !== \"darwin\" && (process.platform !== \"win32\" || isOldWin6())) {\n throw new Error(\"AppX is supported only on Windows 10 or Windows Server 2012 R2 (version number 6.3+)\")\n }\n }\n\n // https://docs.microsoft.com/en-us/windows/uwp/packaging/create-app-package-with-makeappx-tool#mapping-files\n async build(appOutDir: string, arch: Arch): Promise<any> {\n const packager = this.packager\n const artifactName = packager.expandArtifactBeautyNamePattern(this.options, \"appx\", arch)\n const artifactPath = path.join(this.outDir, artifactName)\n await packager.emitArtifactBuildStarted({\n targetPresentableName: \"AppX\",\n file: artifactPath,\n arch,\n })\n\n const vendorPath = await getWindowsKitsBundle({ winCodeSign: this.packager.config.toolsets?.winCodeSign, arch: arch, resourcesDir: this.packager.buildResourcesDir })\n const vm = await packager.vm.value\n\n const stageDir = await createStageDir(this, packager, arch)\n\n const mappingFile = stageDir.getTempFile(\"mapping.txt\")\n const makeAppXArgs = [\"pack\", \"/o\" /* overwrite the output file if it exists */, \"/f\", vm.toVmFile(mappingFile), \"/p\", vm.toVmFile(artifactPath)]\n if (packager.compression === \"store\") {\n makeAppXArgs.push(\"/nc\")\n }\n\n const mappingList: Array<Array<string>> = []\n mappingList.push(\n await Promise.all(\n (await walk(appOutDir)).map(file => {\n let appxPath = file.substring(appOutDir.length + 1)\n if (path.sep !== \"\\\\\") {\n appxPath = appxPath.replace(/\\//g, \"\\\\\")\n }\n return `\"${vm.toVmFile(file)}\" \"app\\\\${appxPath}\"`\n })\n )\n )\n\n const userAssetDir = await this.packager.getResource(undefined, APPX_ASSETS_DIR_NAME)\n const assetInfo = await AppXTarget.computeUserAssets(vm, vendorPath.appxAssets, userAssetDir)\n const userAssets = assetInfo.userAssets\n\n const manifestFile = stageDir.getTempFile(\"AppxManifest.xml\")\n await this.writeManifest(manifestFile, arch, await this.computePublisherName(), userAssets)\n\n await packager.emitAppxManifestCreated(manifestFile)\n mappingList.push(assetInfo.mappings)\n mappingList.push([`\"${vm.toVmFile(manifestFile)}\" \"AppxManifest.xml\"`])\n\n if (isScaledAssetsProvided(userAssets)) {\n const outFile = vm.toVmFile(stageDir.getTempFile(\"resources.pri\"))\n const makePriPath = vm.toVmFile(path.join(vendorPath.kit, \"makepri.exe\"))\n\n const assetRoot = stageDir.getTempFile(\"appx/assets\")\n await emptyDir(assetRoot)\n await Promise.all(assetInfo.allAssets.map(it => copyOrLinkFile(it, path.join(assetRoot, path.basename(it)))))\n\n await vm.exec(makePriPath, [\n \"new\",\n \"/Overwrite\",\n \"/Manifest\",\n vm.toVmFile(manifestFile),\n \"/ProjectRoot\",\n vm.toVmFile(path.dirname(assetRoot)),\n \"/ConfigXml\",\n vm.toVmFile(path.join(getTemplatePath(\"appx\"), \"priconfig.xml\")),\n \"/OutputFile\",\n outFile,\n ])\n\n // in addition to resources.pri, resources.scale-140.pri and other such files will be generated\n for (const resourceFile of (await readdir(stageDir.dir)).filter(it => it.startsWith(\"resources.\")).sort()) {\n mappingList.push([`\"${vm.toVmFile(stageDir.getTempFile(resourceFile))}\" \"${resourceFile}\"`])\n }\n makeAppXArgs.push(\"/l\")\n }\n\n let mapping = \"[Files]\"\n for (const list of mappingList) {\n mapping += \"\\r\\n\" + list.join(\"\\r\\n\")\n }\n await writeFile(mappingFile, mapping)\n packager.debugLogger.add(\"appx.mapping\", mapping)\n\n if (this.options.makeappxArgs != null) {\n makeAppXArgs.push(...this.options.makeappxArgs)\n }\n this.buildQueueManager.add(async () => {\n await vm.exec(vm.toVmFile(path.join(vendorPath.kit, \"makeappx.exe\")), makeAppXArgs)\n await packager.signIf(artifactPath)\n\n await stageDir.cleanup()\n\n await packager.emitArtifactBuildCompleted({\n file: artifactPath,\n packager,\n arch,\n safeArtifactName: packager.computeSafeArtifactName(artifactName, \"appx\"),\n target: this,\n isWriteUpdateInfo: this.options.electronUpdaterAware,\n })\n })\n }\n\n private static async computeUserAssets(vm: VmManager, vendorPath: string, userAssetDir: string | null) {\n const mappings: Array<string> = []\n let userAssets: Array<string>\n const allAssets: Array<string> = []\n if (userAssetDir == null) {\n userAssets = []\n } else {\n userAssets = (await readdir(userAssetDir)).filter(it => !it.startsWith(\".\") && !it.endsWith(\".db\") && it.includes(\".\"))\n for (const name of userAssets) {\n mappings.push(`\"${vm.toVmFile(userAssetDir)}${vm.pathSep}${name}\" \"assets\\\\${name}\"`)\n allAssets.push(path.join(userAssetDir, name))\n }\n }\n\n for (const defaultAsset of Object.keys(vendorAssetsForDefaultAssets)) {\n if (userAssets.length === 0 || !isDefaultAssetIncluded(userAssets, defaultAsset)) {\n const file = sanitizeDirPath(path.join(vendorPath, \"appxAssets\", vendorAssetsForDefaultAssets[defaultAsset]), vendorPath)\n mappings.push(`\"${vm.toVmFile(file)}\" \"assets\\\\${defaultAsset}\"`)\n allAssets.push(file)\n }\n }\n\n // we do not use process.arch to build path to tools, because even if you are on x64, ia32 appx tool must be used if you build appx for ia32\n return { userAssets, mappings, allAssets }\n }\n\n private async computePublisherName() {\n const signtoolManager = await this.packager.signingManager.value\n // https://github.com/electron-userland/electron-builder/issues/2108#issuecomment-333200711\n return signtoolManager.computePublisherName(this, this.options.publisher ?? null)\n }\n\n private async writeManifest(outFile: string, arch: Arch, publisher: string, userAssets: Array<string>) {\n const appInfo = this.packager.appInfo\n const options = this.options\n const executable = `app\\\\${appInfo.productFilename}.exe`\n const displayName = options.displayName || appInfo.productName\n const capabilities = this.getCapabilities()\n const extensions = await this.getExtensions(executable, displayName)\n const archSpecificMinVersion = arch === Arch.arm64 ? \"10.0.16299.0\" : \"10.0.14316.0\"\n\n const customManifestPath = await this.packager.getResource(this.options.customManifestPath)\n if (customManifestPath) {\n log.info({ manifestPath: log.filePath(customManifestPath) }, \"custom appx manifest found\")\n }\n const manifestFileContent = await readFile(customManifestPath || path.join(getTemplatePath(\"appx\"), \"appxmanifest.xml\"), \"utf8\")\n const manifest = manifestFileContent.replace(/\\${([a-zA-Z0-9]+)}/g, (match, p1): string => {\n switch (p1) {\n case \"publisher\":\n return escapeForXml(publisher)\n\n case \"publisherDisplayName\": {\n const name = options.publisherDisplayName || appInfo.companyName\n if (name == null) {\n throw new InvalidConfigurationError(`Please specify \"author\" in the application package.json — it is required because \"appx.publisherDisplayName\" is not set.`)\n }\n return escapeForXml(name)\n }\n\n case \"version\":\n return appInfo.getVersionInWeirdWindowsForm(options.setBuildNumber === true)\n\n case \"applicationId\": {\n const validCharactersRegex = /^([A-Za-z][A-Za-z0-9]*)(\\.[A-Za-z][A-Za-z0-9]*)*$/\n const identitynumber = parseInt(options.identityName as string, 10) || NaN\n let result: string\n if (options.applicationId) {\n result = options.applicationId\n } else if (!isNaN(identitynumber) && options.identityName !== null && options.identityName !== undefined) {\n if (options.identityName[0] === \"0\") {\n log.warn(`Remove the 0${identitynumber}`)\n result = options.identityName.replace(\"0\" + identitynumber.toString(), \"\")\n } else {\n log.warn(`Remove the ${identitynumber}`)\n result = options.identityName.replace(identitynumber.toString(), \"\")\n }\n } else {\n result = options.identityName || appInfo.name\n }\n\n if (result.length < 1 || result.length > 64) {\n const message = `Appx Application.Id must be between 1 and 64 characters in length: ${result}`\n throw new InvalidConfigurationError(message)\n } else if (!validCharactersRegex.test(result)) {\n const message = `AppX Application.Id cannot contain alpha-numeric, period, and dash characters: ${result}\"`\n throw new InvalidConfigurationError(message)\n } else if (restrictedApplicationIdValues.includes(result.toUpperCase())) {\n const message = `AppX Application.Id cannot contain restricted values ${JSON.stringify(restrictedApplicationIdValues)}: ${result}`\n throw new InvalidConfigurationError(message)\n } else if (result == null && options.applicationId == null) {\n const message = `Please set appx.applicationId (or correct appx.identityName or name)`\n throw new InvalidConfigurationError(message)\n }\n\n return result\n }\n\n case \"identityName\": {\n const result = options.identityName || appInfo.name\n const validCharactersRegex = /^[a-zA-Z0-9.-]+$/\n if (result.length < 3 || result.length > 50) {\n const message = `Appx identityName.Id must be between 3 and 50 characters in length: ${result}`\n throw new InvalidConfigurationError(message)\n } else if (!validCharactersRegex.test(result)) {\n const message = `AppX identityName.Id cannot contain of alpha-numeric, period, and dash characters: ${result}`\n throw new InvalidConfigurationError(message)\n } else if (restrictedApplicationIdValues.includes(result.toUpperCase())) {\n const message = `AppX identityName.Id cannot contain restricted values ${JSON.stringify(restrictedApplicationIdValues)}: ${result}`\n throw new InvalidConfigurationError(message)\n } else if (result == null && options.identityName == null) {\n const message = `Please set appx.identityName or name`\n throw new InvalidConfigurationError(message)\n }\n\n return result\n }\n\n case \"executable\":\n return executable\n\n case \"displayName\":\n return escapeForXml(displayName)\n\n case \"description\":\n return escapeForXml(appInfo.description || appInfo.productName)\n\n case \"backgroundColor\":\n return options.backgroundColor || \"#464646\"\n\n case \"logo\":\n return \"assets\\\\StoreLogo.png\"\n\n case \"square150x150Logo\":\n return \"assets\\\\Square150x150Logo.png\"\n\n case \"square44x44Logo\":\n return \"assets\\\\Square44x44Logo.png\"\n\n case \"lockScreen\":\n return lockScreenTag(userAssets)\n\n case \"defaultTile\":\n return defaultTileTag(userAssets, options.showNameOnTiles || false)\n\n case \"splashScreen\":\n return splashScreenTag(userAssets)\n\n case \"arch\":\n return arch === Arch.ia32 ? \"x86\" : arch === Arch.arm64 ? \"arm64\" : \"x64\"\n\n case \"resourceLanguages\":\n return resourceLanguageTag(asArray(options.languages))\n\n case \"capabilities\":\n return capabilities\n\n case \"extensions\":\n return extensions\n\n case \"minVersion\":\n return options.minVersion || archSpecificMinVersion\n\n case \"maxVersionTested\":\n return options.maxVersionTested || options.minVersion || archSpecificMinVersion\n\n default:\n throw new Error(`Macro ${p1} is not defined`)\n }\n })\n await writeFile(outFile, manifest)\n }\n\n private getCapabilities(): string {\n const caps = asArray(this.options.capabilities)\n\n const capSet = new Set(caps)\n\n const invalid = Array.from(capSet).filter(cap => !isValidCapabilityName(cap))\n if (invalid.length > 0) {\n throw new Error(`invalid windows capabilit${invalid.length === 1 ? \"y\" : \"ies\"} specified: ${invalid.join(\", \")}`)\n }\n\n // Ensure runFullTrust is always included\n capSet.add(\"runFullTrust\")\n\n // Filter and map in one pass\n const capabilityStrings = CAPABILITIES.filter(cap => capSet.has(cap.name)).map(cap => ` ${cap.toXMLString()}`)\n\n return `<Capabilities>\\n${capabilityStrings.join(\"\\n\")}\\n</Capabilities>`\n }\n\n private async getExtensions(executable: string, displayName: string): Promise<string> {\n const uriSchemes = asArray(this.packager.config.protocols).concat(asArray(this.packager.platformOptions.protocols))\n\n const fileAssociations = asArray(this.packager.config.fileAssociations).concat(asArray(this.packager.platformOptions.fileAssociations))\n\n let isAddAutoLaunchExtension = this.options.addAutoLaunchExtension\n if (isAddAutoLaunchExtension === undefined) {\n const deps = this.packager.metadata.dependencies\n isAddAutoLaunchExtension = deps != null && deps[\"electron-winstore-auto-launch\"] != null\n }\n\n if (!isAddAutoLaunchExtension && uriSchemes.length === 0 && fileAssociations.length === 0 && this.options.customExtensionsPath === undefined) {\n return \"\"\n }\n\n let extensions = \"<Extensions>\"\n\n if (isAddAutoLaunchExtension) {\n extensions += `\n <desktop:Extension Category=\"windows.startupTask\" Executable=\"${executable}\" EntryPoint=\"Windows.FullTrustApplication\">\n <desktop:StartupTask TaskId=\"SlackStartup\" Enabled=\"true\" DisplayName=\"${displayName}\" />\n </desktop:Extension>`\n }\n\n for (const protocol of uriSchemes) {\n for (const scheme of asArray(protocol.schemes)) {\n extensions += `\n <uap:Extension Category=\"windows.protocol\">\n <uap:Protocol Name=\"${scheme}\">\n <uap:DisplayName>${protocol.name}</uap:DisplayName>\n </uap:Protocol>\n </uap:Extension>`\n }\n }\n\n for (const fileAssociation of fileAssociations) {\n for (const ext of asArray(fileAssociation.ext)) {\n extensions += `\n <uap:Extension Category=\"windows.fileTypeAssociation\">\n <uap:FileTypeAssociation Name=\"${ext}\">\n <uap:SupportedFileTypes>\n <uap:FileType>.${ext}</uap:FileType>\n </uap:SupportedFileTypes>\n </uap:FileTypeAssociation>\n </uap:Extension>`\n }\n }\n\n if (this.options.customExtensionsPath !== undefined) {\n const extensionsPath = path.resolve(this.packager.appDir, this.options.customExtensionsPath)\n extensions += await readFile(extensionsPath, \"utf8\")\n }\n\n extensions += \"</Extensions>\"\n return extensions\n }\n}\n\n// get the resource - language tag, see https://docs.microsoft.com/en-us/windows/uwp/globalizing/manage-language-and-region#specify-the-supported-languages-in-the-apps-manifest\nfunction resourceLanguageTag(userLanguages: Array<string> | Nullish): string {\n if (userLanguages == null || userLanguages.length === 0) {\n userLanguages = [DEFAULT_RESOURCE_LANG]\n }\n return userLanguages.map(it => `<Resource Language=\"${it.trim().replace(/_/g, \"-\")}\" />`).join(\"\\n\")\n}\n\nfunction lockScreenTag(userAssets: Array<string>): string {\n if (isDefaultAssetIncluded(userAssets, \"BadgeLogo.png\")) {\n return '<uap:LockScreen Notification=\"badgeAndTileText\" BadgeLogo=\"assets\\\\BadgeLogo.png\" />'\n } else {\n return \"\"\n }\n}\n\nfunction defaultTileTag(userAssets: Array<string>, showNameOnTiles: boolean): string {\n const defaultTiles: Array<string> = [\"<uap:DefaultTile\", 'Wide310x150Logo=\"assets\\\\Wide310x150Logo.png\"']\n\n if (isDefaultAssetIncluded(userAssets, \"LargeTile.png\")) {\n defaultTiles.push('Square310x310Logo=\"assets\\\\LargeTile.png\"')\n }\n if (isDefaultAssetIncluded(userAssets, \"SmallTile.png\")) {\n defaultTiles.push('Square71x71Logo=\"assets\\\\SmallTile.png\"')\n }\n\n if (showNameOnTiles) {\n defaultTiles.push(\">\")\n defaultTiles.push(\"<uap:ShowNameOnTiles>\")\n defaultTiles.push(\"<uap:ShowOn\", 'Tile=\"wide310x150Logo\"', \"/>\")\n defaultTiles.push(\"<uap:ShowOn\", 'Tile=\"square150x150Logo\"', \"/>\")\n defaultTiles.push(\"</uap:ShowNameOnTiles>\")\n defaultTiles.push(\"</uap:DefaultTile>\")\n } else {\n defaultTiles.push(\"/>\")\n }\n return defaultTiles.join(\" \")\n}\n\nfunction splashScreenTag(userAssets: Array<string>): string {\n if (isDefaultAssetIncluded(userAssets, \"SplashScreen.png\")) {\n return '<uap:SplashScreen Image=\"assets\\\\SplashScreen.png\" />'\n } else {\n return \"\"\n }\n}\n\nfunction isDefaultAssetIncluded(userAssets: Array<string>, defaultAsset: string) {\n const defaultAssetName = defaultAsset.substring(0, defaultAsset.indexOf(\".\"))\n return userAssets.some(it => it.includes(defaultAssetName))\n}\n\nfunction isScaledAssetsProvided(userAssets: Array<string>) {\n return userAssets.some(it => it.includes(\".scale-\") || it.includes(\".targetsize-\"))\n}\n"]}
|
|
1
|
+
{"version":3,"file":"AppxTarget.js","sourceRoot":"","sources":["../../../src/targets/win/AppxTarget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,yBAAyB,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAE5E,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,oHAAoH;AACpH,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,2BAA2B,EAC3B,0BAA0B,EAC1B,mBAAmB,EACnB,eAAe,EACf,wBAAwB,GACzB,MAAM,iBAAiB,CAAA;AACxB,OAAO,QAAQ,MAAM,UAAU,CAAA;AAC/B,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAA;AAExC,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,MAAM;IAK5C,YACmB,QAAqB,EAC7B,MAAc;QAEvB,KAAK,CAAC,MAAM,CAAC,CAAA;QAHI,aAAQ,GAAR,QAAQ,CAAa;QAC7B,WAAM,GAAN,MAAM,CAAQ;QANhB,YAAO,GAAgB,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAc,MAAM,CAAC,CAAA;QAEtF,qBAAgB,GAAG,KAAK,CAAA;QAQtB,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,SAAS,EAAE,CAAC,EAAE,CAAC;YACnF,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAA;QACzG,CAAC;IACH,CAAC;IAED,6GAA6G;IAC7G,KAAK,CAAC,SAAiB,EAAE,IAAU;QACjC,OAAO,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;YAC1E,IAAI,EAAE,MAAM;YACZ,eAAe,EAAE,MAAM;YACvB,aAAa,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC;SACtH,CAAC,CAAA;IACJ,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,OAAe,EAAE,IAAU,EAAE,SAAiB,EAAE,UAAyB;QACnG,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAA;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC5B,MAAM,UAAU,GAAG,QAAQ,OAAO,CAAC,eAAe,MAAM,CAAA;QACxD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAA;QAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QAC3C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;QACpE,MAAM,sBAAsB,GAAG,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAA;QAEpF,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;QAC3F,IAAI,kBAAkB,EAAE,CAAC;YACvB,GAAG,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,EAAE,4BAA4B,CAAC,CAAA;QAC5F,CAAC;QACD,MAAM,mBAAmB,GAAG,MAAM,QAAQ,CAAC,kBAAkB,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC,EAAE,MAAM,CAAC,CAAA;QAChI,MAAM,QAAQ,GAAG,wBAAwB,CAAC,mBAAmB,EAAE,CAAC,EAAE,EAAU,EAAE;YAC5E,QAAQ,EAAE,EAAE,CAAC;gBACX,KAAK,WAAW;oBACd,OAAO,SAAS,CAAA;gBAElB,KAAK,sBAAsB,CAAC,CAAC,CAAC;oBAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,oBAAoB,IAAI,OAAO,CAAC,WAAW,CAAA;oBAChE,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;wBACjB,MAAM,IAAI,yBAAyB,CAAC,0HAA0H,CAAC,CAAA;oBACjK,CAAC;oBACD,OAAO,IAAI,CAAA;gBACb,CAAC;gBAED,KAAK,SAAS;oBACZ,OAAO,OAAO,CAAC,4BAA4B,CAAC,OAAO,CAAC,cAAc,KAAK,IAAI,CAAC,CAAA;gBAE9E,KAAK,eAAe;oBAClB,wFAAwF;oBACxF,4FAA4F;oBAC5F,OAAO,2BAA2B,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;gBAEvG,KAAK,cAAc;oBACjB,OAAO,0BAA0B,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;gBAE/E,KAAK,YAAY;oBACf,OAAO,UAAU,CAAA;gBAEnB,KAAK,aAAa;oBAChB,OAAO,WAAW,CAAA;gBAEpB,KAAK,aAAa;oBAChB,OAAO,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAA;gBAEnD,KAAK,iBAAiB;oBACpB,OAAO,OAAO,CAAC,eAAe,IAAI,SAAS,CAAA;gBAE7C,KAAK,MAAM;oBACT,OAAO,uBAAuB,CAAA;gBAEhC,KAAK,mBAAmB;oBACtB,OAAO,+BAA+B,CAAA;gBAExC,KAAK,iBAAiB;oBACpB,OAAO,6BAA6B,CAAA;gBAEtC,KAAK,YAAY;oBACf,OAAO,aAAa,CAAC,UAAU,CAAC,CAAA;gBAElC,KAAK,aAAa;oBAChB,OAAO,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,eAAe,IAAI,KAAK,CAAC,CAAA;gBAErE,KAAK,cAAc;oBACjB,OAAO,eAAe,CAAC,UAAU,CAAC,CAAA;gBAEpC,KAAK,MAAM;oBACT,OAAO,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAA;gBAE3E,KAAK,mBAAmB;oBACtB,OAAO,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA;gBAExD,KAAK,cAAc;oBACjB,OAAO,YAAY,CAAA;gBAErB,KAAK,YAAY;oBACf,OAAO,UAAU,CAAA;gBAEnB,KAAK,YAAY;oBACf,OAAO,OAAO,CAAC,UAAU,IAAI,sBAAsB,CAAA;gBAErD,KAAK,kBAAkB;oBACrB,OAAO,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,UAAU,IAAI,sBAAsB,CAAA;gBAEjF;oBACE,MAAM,IAAI,KAAK,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAA;YACjD,CAAC;QACH,CAAC,CAAC,CAAA;QACF,MAAM,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IACpC,CAAC;IAEO,eAAe;QACrB,OAAO,mBAAmB,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,mBAAmB,CAAA;IAC9F,CAAC;IAEO,aAAa,CAAC,UAAkB,EAAE,WAAmB;QAC3D,4FAA4F;QAC5F,2FAA2F;QAC3F,oFAAoF;QACpF,OAAO,kBAAkB,CAAC;YACxB,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAC3G,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;YAChI,sBAAsB,EAAE,IAAI,CAAC,OAAO,CAAC,sBAAsB;YAC3D,oBAAoB,EAAE,IAAI,CAAC,OAAO,CAAC,oBAAoB;YACvD,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;YAC5B,UAAU;YACV,WAAW;YACX,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY;SACrD,CAAC,CAAA;IACJ,CAAC;CACF","sourcesContent":["import { Arch, asArray, InvalidConfigurationError, log } from \"builder-util\"\n\nimport path from \"path\"\nimport { AppXOptions } from \"../../index.js\"\nimport { isOldWin6 } from \"../../toolsets/winCodeSign.js\"\nimport { Target } from \"../../core.js\"\nimport { getTemplatePath } from \"../../util/pathManager.js\"\nimport { WinPackager } from \"../../winPackager.js\"\n// Shared with the MSIX target — winAppUtil is the single source of truth for the build pipeline + manifest helpers.\nimport {\n buildAppxPackage,\n buildCapabilitiesXml,\n buildExtensionsXml,\n defaultTileTag,\n lockScreenTag,\n resolvePackageApplicationId,\n resolvePackageIdentityName,\n resourceLanguageTag,\n splashScreenTag,\n substituteManifestMacros,\n} from \"./winAppUtil.js\"\nimport _fsExtra from \"fs-extra\"\nconst { readFile, writeFile } = _fsExtra\n\nexport default class AppXTarget extends Target {\n readonly options: AppXOptions = this.packager.getOptionsForTarget<AppXOptions>(\"appx\")\n\n isAsyncSupported = false\n\n constructor(\n private readonly packager: WinPackager,\n readonly outDir: string\n ) {\n super(\"appx\")\n\n if (process.platform !== \"darwin\" && (process.platform !== \"win32\" || isOldWin6())) {\n throw new Error(\"AppX is supported only on Windows 10 or Windows Server 2012 R2 (version number 6.3+)\")\n }\n }\n\n // https://docs.microsoft.com/en-us/windows/uwp/packaging/create-app-package-with-makeappx-tool#mapping-files\n build(appOutDir: string, arch: Arch): Promise<any> {\n return buildAppxPackage(this, this.packager, this.options, appOutDir, arch, {\n kind: \"appx\",\n presentableName: \"AppX\",\n writeManifest: (manifestFile, a, publisher, userAssets) => this.writeManifest(manifestFile, a, publisher, userAssets),\n })\n }\n\n private async writeManifest(outFile: string, arch: Arch, publisher: string, userAssets: Array<string>) {\n const appInfo = this.packager.appInfo\n const options = this.options\n const executable = `app\\\\${appInfo.productFilename}.exe`\n const displayName = options.displayName || appInfo.productName\n const capabilities = this.getCapabilities()\n const extensions = await this.getExtensions(executable, displayName)\n const archSpecificMinVersion = arch === Arch.arm64 ? \"10.0.16299.0\" : \"10.0.14316.0\"\n\n const customManifestPath = await this.packager.getResource(this.options.customManifestPath)\n if (customManifestPath) {\n log.info({ manifestPath: log.filePath(customManifestPath) }, \"custom appx manifest found\")\n }\n const manifestFileContent = await readFile(customManifestPath || path.join(getTemplatePath(\"appx\"), \"appxmanifest.xml\"), \"utf8\")\n const manifest = substituteManifestMacros(manifestFileContent, (p1): string => {\n switch (p1) {\n case \"publisher\":\n return publisher\n\n case \"publisherDisplayName\": {\n const name = options.publisherDisplayName || appInfo.companyName\n if (name == null) {\n throw new InvalidConfigurationError(`Please specify \"author\" in the application package.json — it is required because \"appx.publisherDisplayName\" is not set.`)\n }\n return name\n }\n\n case \"version\":\n return appInfo.getVersionInWeirdWindowsForm(options.setBuildNumber === true)\n\n case \"applicationId\":\n // Shared with MSIX: consistent \"AppX\" label, correct validation messages, and identical\n // numeric-prefix stripping / validation logic (see winAppUtil.resolvePackageApplicationId).\n return resolvePackageApplicationId(options.applicationId, options.identityName, appInfo.name, \"AppX\")\n\n case \"identityName\":\n return resolvePackageIdentityName(options.identityName, appInfo.name, \"AppX\")\n\n case \"executable\":\n return executable\n\n case \"displayName\":\n return displayName\n\n case \"description\":\n return appInfo.description || appInfo.productName\n\n case \"backgroundColor\":\n return options.backgroundColor || \"#464646\"\n\n case \"logo\":\n return \"assets\\\\StoreLogo.png\"\n\n case \"square150x150Logo\":\n return \"assets\\\\Square150x150Logo.png\"\n\n case \"square44x44Logo\":\n return \"assets\\\\Square44x44Logo.png\"\n\n case \"lockScreen\":\n return lockScreenTag(userAssets)\n\n case \"defaultTile\":\n return defaultTileTag(userAssets, options.showNameOnTiles || false)\n\n case \"splashScreen\":\n return splashScreenTag(userAssets)\n\n case \"arch\":\n return arch === Arch.ia32 ? \"x86\" : arch === Arch.arm64 ? \"arm64\" : \"x64\"\n\n case \"resourceLanguages\":\n return resourceLanguageTag(asArray(options.languages))\n\n case \"capabilities\":\n return capabilities\n\n case \"extensions\":\n return extensions\n\n case \"minVersion\":\n return options.minVersion || archSpecificMinVersion\n\n case \"maxVersionTested\":\n return options.maxVersionTested || options.minVersion || archSpecificMinVersion\n\n default:\n throw new Error(`Macro ${p1} is not defined`)\n }\n })\n await writeFile(outFile, manifest)\n }\n\n private getCapabilities(): string {\n return `<Capabilities>\\n${buildCapabilitiesXml(this.options.capabilities)}\\n</Capabilities>`\n }\n\n private getExtensions(executable: string, displayName: string): Promise<string> {\n // Delegate to the shared, XML-escaped helper so AppX and MSIX produce identical (and safely\n // escaped) extension XML and cannot drift. Raw interpolation here previously left protocol\n // schemes/names, file-association extensions, displayName and executable unescaped.\n return buildExtensionsXml({\n protocols: asArray(this.packager.config.protocols).concat(asArray(this.packager.platformOptions.protocols)),\n fileAssociations: asArray(this.packager.config.fileAssociations).concat(asArray(this.packager.platformOptions.fileAssociations)),\n addAutoLaunchExtension: this.options.addAutoLaunchExtension,\n customExtensionsPath: this.options.customExtensionsPath,\n appDir: this.packager.appDir,\n executable,\n displayName,\n dependencyNames: this.packager.metadata.dependencies,\n })\n }\n}\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Arch } from "builder-util";
|
|
2
|
+
import { MsixOptions } from "../../options/MsixOptions.js";
|
|
3
|
+
import { Target } from "../../core.js";
|
|
4
|
+
import { WinPackager } from "../../winPackager.js";
|
|
5
|
+
export default class MsixTarget extends Target {
|
|
6
|
+
private readonly packager;
|
|
7
|
+
readonly outDir: string;
|
|
8
|
+
readonly options: MsixOptions;
|
|
9
|
+
isAsyncSupported: boolean;
|
|
10
|
+
private readonly builtPackages;
|
|
11
|
+
private vendorPathKit;
|
|
12
|
+
private vm;
|
|
13
|
+
constructor(packager: WinPackager, outDir: string);
|
|
14
|
+
build(appOutDir: string, arch: Arch): Promise<any>;
|
|
15
|
+
finishBuild(): Promise<void>;
|
|
16
|
+
private createMsixBundle;
|
|
17
|
+
private createMsixUpload;
|
|
18
|
+
private writeManifest;
|
|
19
|
+
private getCapabilities;
|
|
20
|
+
private getExtensions;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=MsixTarget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MsixTarget.d.ts","sourceRoot":"","sources":["../../../src/targets/win/MsixTarget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgF,MAAM,cAAc,CAAA;AAKjH,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAE1D,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAGtC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAelD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,MAAM;IAU1C,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM;IAVzB,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAyD;IAEtF,gBAAgB,UAAQ;IAExB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA0B;IACxD,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,EAAE,CAAyB;gBAGhB,QAAQ,EAAE,WAAW,EAC7B,MAAM,EAAE,MAAM;IASzB,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;IAyB5C,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;YAkBpB,gBAAgB;YAuChB,gBAAgB;YAwBhB,aAAa;IAkG3B,OAAO,CAAC,eAAe;YAKT,aAAa;CA2B5B"}
|