@choochmeque/tauri-windows-bundle 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -1
- package/dist/cli.js +49 -6
- package/dist/index.js +49 -7
- package/dist/types.d.ts +2 -0
- package/dist/utils/exec.d.ts +3 -0
- package/package.json +12 -14
package/README.md
CHANGED
|
@@ -77,7 +77,7 @@ Edit `src-tauri/gen/windows/bundle.config.json`:
|
|
|
77
77
|
### Build
|
|
78
78
|
|
|
79
79
|
```bash
|
|
80
|
-
# Build x64 only (default)
|
|
80
|
+
# Build x64 only (default, uses cargo)
|
|
81
81
|
pnpm tauri:windows:build
|
|
82
82
|
|
|
83
83
|
# Build multiarch bundle (x64 + arm64)
|
|
@@ -85,6 +85,10 @@ pnpm tauri:windows:build --arch x64,arm64
|
|
|
85
85
|
|
|
86
86
|
# Release build
|
|
87
87
|
pnpm tauri:windows:build --release
|
|
88
|
+
|
|
89
|
+
# Use different build runner (pnpm, npm, yarn, bun, etc.)
|
|
90
|
+
pnpm tauri:windows:build --runner pnpm
|
|
91
|
+
pnpm tauri:windows:build --runner npm
|
|
88
92
|
```
|
|
89
93
|
|
|
90
94
|
### Output
|
package/dist/cli.js
CHANGED
|
@@ -4,7 +4,7 @@ import * as fs from 'node:fs';
|
|
|
4
4
|
import * as path from 'node:path';
|
|
5
5
|
import { fileURLToPath } from 'node:url';
|
|
6
6
|
import { glob } from 'glob';
|
|
7
|
-
import { exec } from 'node:child_process';
|
|
7
|
+
import { exec, spawn } from 'node:child_process';
|
|
8
8
|
import { promisify } from 'node:util';
|
|
9
9
|
import * as readline from 'node:readline';
|
|
10
10
|
|
|
@@ -64,6 +64,7 @@ function toFourPartVersion(version) {
|
|
|
64
64
|
return parts.slice(0, 4).join('.');
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
+
const DEFAULT_RUNNER = 'cargo';
|
|
67
68
|
const MSIX_ASSETS = [
|
|
68
69
|
{ name: 'StoreLogo.png', size: 50 },
|
|
69
70
|
{ name: 'Square44x44Logo.png', size: 44 },
|
|
@@ -594,6 +595,33 @@ async function promptInstall(message) {
|
|
|
594
595
|
});
|
|
595
596
|
});
|
|
596
597
|
}
|
|
598
|
+
async function execWithProgress(command, options) {
|
|
599
|
+
return new Promise((resolve, reject) => {
|
|
600
|
+
const [cmd, ...args] = command.split(' ');
|
|
601
|
+
const child = spawn(cmd, args, {
|
|
602
|
+
cwd: options?.cwd,
|
|
603
|
+
stdio: ['inherit', 'pipe', 'pipe'],
|
|
604
|
+
shell: true,
|
|
605
|
+
});
|
|
606
|
+
child.stdout?.on('data', (data) => {
|
|
607
|
+
process.stdout.write(data);
|
|
608
|
+
});
|
|
609
|
+
child.stderr?.on('data', (data) => {
|
|
610
|
+
process.stderr.write(data);
|
|
611
|
+
});
|
|
612
|
+
child.on('close', (code) => {
|
|
613
|
+
if (code === 0) {
|
|
614
|
+
resolve();
|
|
615
|
+
}
|
|
616
|
+
else {
|
|
617
|
+
reject(new Error(`Command failed with exit code ${code}`));
|
|
618
|
+
}
|
|
619
|
+
});
|
|
620
|
+
child.on('error', (error) => {
|
|
621
|
+
reject(error);
|
|
622
|
+
});
|
|
623
|
+
});
|
|
624
|
+
}
|
|
597
625
|
|
|
598
626
|
async function build(options) {
|
|
599
627
|
console.log('Building MSIX package...\n');
|
|
@@ -601,10 +629,10 @@ async function build(options) {
|
|
|
601
629
|
if (!(await isMsixbundleCliInstalled())) {
|
|
602
630
|
const shouldInstall = await promptInstall('msixbundle-cli is required but not installed.\n' + 'Install it now? (requires Rust/Cargo)');
|
|
603
631
|
if (shouldInstall) {
|
|
604
|
-
console.log('Installing msixbundle-cli
|
|
632
|
+
console.log('Installing msixbundle-cli...\n');
|
|
605
633
|
try {
|
|
606
|
-
await
|
|
607
|
-
console.log(' msixbundle-cli installed\n');
|
|
634
|
+
await execWithProgress('cargo install msixbundle-cli');
|
|
635
|
+
console.log('\n msixbundle-cli installed\n');
|
|
608
636
|
}
|
|
609
637
|
catch (error) {
|
|
610
638
|
console.error('Failed to install msixbundle-cli:', error);
|
|
@@ -647,14 +675,28 @@ async function build(options) {
|
|
|
647
675
|
const architectures = options.arch?.split(',') || ['x64'];
|
|
648
676
|
const minVersion = options.minWindows || DEFAULT_MIN_WINDOWS_VERSION;
|
|
649
677
|
const appxDirs = [];
|
|
678
|
+
const runner = options.runner || DEFAULT_RUNNER;
|
|
650
679
|
for (const arch of architectures) {
|
|
651
680
|
console.log(`Building for ${arch}...`);
|
|
652
681
|
// Build Tauri app
|
|
653
682
|
const target = arch === 'x64' ? 'x86_64-pc-windows-msvc' : 'aarch64-pc-windows-msvc';
|
|
654
683
|
const releaseFlag = options.release ? '--release' : '';
|
|
684
|
+
// Build command based on runner
|
|
685
|
+
// --bundles none skips MSI/NSIS bundling since we're creating MSIX
|
|
686
|
+
let buildCommand;
|
|
687
|
+
if (runner === 'npm') {
|
|
688
|
+
// npm requires -- to pass args to the script
|
|
689
|
+
buildCommand =
|
|
690
|
+
`npm run tauri build -- --target ${target} --bundles none ${releaseFlag}`.trim();
|
|
691
|
+
}
|
|
692
|
+
else {
|
|
693
|
+
// cargo, pnpm, yarn, bun, etc.
|
|
694
|
+
buildCommand =
|
|
695
|
+
`${runner} tauri build --target ${target} --bundles none ${releaseFlag}`.trim();
|
|
696
|
+
}
|
|
655
697
|
try {
|
|
656
|
-
console.log(` Running:
|
|
657
|
-
await
|
|
698
|
+
console.log(` Running: ${buildCommand}\n`);
|
|
699
|
+
await execWithProgress(buildCommand, {
|
|
658
700
|
cwd: projectRoot,
|
|
659
701
|
});
|
|
660
702
|
}
|
|
@@ -1429,6 +1471,7 @@ program
|
|
|
1429
1471
|
.option('--arch <architectures>', 'Architectures to build (comma-separated: x64,arm64)', 'x64')
|
|
1430
1472
|
.option('--release', 'Build in release mode')
|
|
1431
1473
|
.option('--min-windows <version>', 'Minimum Windows version', '10.0.17763.0')
|
|
1474
|
+
.option('--runner <runner>', 'Build runner (cargo, pnpm, npm, yarn, etc.)', 'cargo')
|
|
1432
1475
|
.action(async (options) => {
|
|
1433
1476
|
try {
|
|
1434
1477
|
await build(options);
|
package/dist/index.js
CHANGED
|
@@ -2,10 +2,11 @@ import * as fs from 'node:fs';
|
|
|
2
2
|
import * as path from 'node:path';
|
|
3
3
|
import { fileURLToPath } from 'node:url';
|
|
4
4
|
import { glob } from 'glob';
|
|
5
|
-
import { exec } from 'node:child_process';
|
|
5
|
+
import { exec, spawn } from 'node:child_process';
|
|
6
6
|
import { promisify } from 'node:util';
|
|
7
7
|
import * as readline from 'node:readline';
|
|
8
8
|
|
|
9
|
+
const DEFAULT_RUNNER = 'cargo';
|
|
9
10
|
const MSIX_ASSETS = [
|
|
10
11
|
{ name: 'StoreLogo.png', size: 50 },
|
|
11
12
|
{ name: 'Square44x44Logo.png', size: 44 },
|
|
@@ -592,6 +593,33 @@ async function promptInstall(message) {
|
|
|
592
593
|
});
|
|
593
594
|
});
|
|
594
595
|
}
|
|
596
|
+
async function execWithProgress(command, options) {
|
|
597
|
+
return new Promise((resolve, reject) => {
|
|
598
|
+
const [cmd, ...args] = command.split(' ');
|
|
599
|
+
const child = spawn(cmd, args, {
|
|
600
|
+
cwd: options?.cwd,
|
|
601
|
+
stdio: ['inherit', 'pipe', 'pipe'],
|
|
602
|
+
shell: true,
|
|
603
|
+
});
|
|
604
|
+
child.stdout?.on('data', (data) => {
|
|
605
|
+
process.stdout.write(data);
|
|
606
|
+
});
|
|
607
|
+
child.stderr?.on('data', (data) => {
|
|
608
|
+
process.stderr.write(data);
|
|
609
|
+
});
|
|
610
|
+
child.on('close', (code) => {
|
|
611
|
+
if (code === 0) {
|
|
612
|
+
resolve();
|
|
613
|
+
}
|
|
614
|
+
else {
|
|
615
|
+
reject(new Error(`Command failed with exit code ${code}`));
|
|
616
|
+
}
|
|
617
|
+
});
|
|
618
|
+
child.on('error', (error) => {
|
|
619
|
+
reject(error);
|
|
620
|
+
});
|
|
621
|
+
});
|
|
622
|
+
}
|
|
595
623
|
|
|
596
624
|
async function build(options) {
|
|
597
625
|
console.log('Building MSIX package...\n');
|
|
@@ -599,10 +627,10 @@ async function build(options) {
|
|
|
599
627
|
if (!(await isMsixbundleCliInstalled())) {
|
|
600
628
|
const shouldInstall = await promptInstall('msixbundle-cli is required but not installed.\n' + 'Install it now? (requires Rust/Cargo)');
|
|
601
629
|
if (shouldInstall) {
|
|
602
|
-
console.log('Installing msixbundle-cli
|
|
630
|
+
console.log('Installing msixbundle-cli...\n');
|
|
603
631
|
try {
|
|
604
|
-
await
|
|
605
|
-
console.log(' msixbundle-cli installed\n');
|
|
632
|
+
await execWithProgress('cargo install msixbundle-cli');
|
|
633
|
+
console.log('\n msixbundle-cli installed\n');
|
|
606
634
|
}
|
|
607
635
|
catch (error) {
|
|
608
636
|
console.error('Failed to install msixbundle-cli:', error);
|
|
@@ -645,14 +673,28 @@ async function build(options) {
|
|
|
645
673
|
const architectures = options.arch?.split(',') || ['x64'];
|
|
646
674
|
const minVersion = options.minWindows || DEFAULT_MIN_WINDOWS_VERSION;
|
|
647
675
|
const appxDirs = [];
|
|
676
|
+
const runner = options.runner || DEFAULT_RUNNER;
|
|
648
677
|
for (const arch of architectures) {
|
|
649
678
|
console.log(`Building for ${arch}...`);
|
|
650
679
|
// Build Tauri app
|
|
651
680
|
const target = arch === 'x64' ? 'x86_64-pc-windows-msvc' : 'aarch64-pc-windows-msvc';
|
|
652
681
|
const releaseFlag = options.release ? '--release' : '';
|
|
682
|
+
// Build command based on runner
|
|
683
|
+
// --bundles none skips MSI/NSIS bundling since we're creating MSIX
|
|
684
|
+
let buildCommand;
|
|
685
|
+
if (runner === 'npm') {
|
|
686
|
+
// npm requires -- to pass args to the script
|
|
687
|
+
buildCommand =
|
|
688
|
+
`npm run tauri build -- --target ${target} --bundles none ${releaseFlag}`.trim();
|
|
689
|
+
}
|
|
690
|
+
else {
|
|
691
|
+
// cargo, pnpm, yarn, bun, etc.
|
|
692
|
+
buildCommand =
|
|
693
|
+
`${runner} tauri build --target ${target} --bundles none ${releaseFlag}`.trim();
|
|
694
|
+
}
|
|
653
695
|
try {
|
|
654
|
-
console.log(` Running:
|
|
655
|
-
await
|
|
696
|
+
console.log(` Running: ${buildCommand}\n`);
|
|
697
|
+
await execWithProgress(buildCommand, {
|
|
656
698
|
cwd: projectRoot,
|
|
657
699
|
});
|
|
658
700
|
}
|
|
@@ -1403,4 +1445,4 @@ async function extensionRemove(type, name, options) {
|
|
|
1403
1445
|
}
|
|
1404
1446
|
}
|
|
1405
1447
|
|
|
1406
|
-
export { DEFAULT_CAPABILITIES, DEFAULT_MIN_WINDOWS_VERSION, MSIX_ASSETS, build, extensionAddAppExecutionAlias, extensionAddAppService, extensionAddAutoplay, extensionAddBackgroundTask, extensionAddContextMenu, extensionAddFileAssociation, extensionAddPreviewHandler, extensionAddProtocol, extensionAddThumbnailHandler, extensionDisablePrintTaskSettings, extensionDisableShareTarget, extensionDisableStartupTask, extensionDisableToastActivation, extensionEnablePrintTaskSettings, extensionEnableShareTarget, extensionEnableStartupTask, extensionEnableToastActivation, extensionList, extensionRemove, findProjectRoot, generateManifest, generateManifestTemplate, getWindowsDir, init, prepareAppxContent, readBundleConfig$1 as readBundleConfig, readTauriConfig, toFourPartVersion };
|
|
1448
|
+
export { DEFAULT_CAPABILITIES, DEFAULT_MIN_WINDOWS_VERSION, DEFAULT_RUNNER, MSIX_ASSETS, build, extensionAddAppExecutionAlias, extensionAddAppService, extensionAddAutoplay, extensionAddBackgroundTask, extensionAddContextMenu, extensionAddFileAssociation, extensionAddPreviewHandler, extensionAddProtocol, extensionAddThumbnailHandler, extensionDisablePrintTaskSettings, extensionDisableShareTarget, extensionDisableStartupTask, extensionDisableToastActivation, extensionEnablePrintTaskSettings, extensionEnableShareTarget, extensionEnableStartupTask, extensionEnableToastActivation, extensionList, extensionRemove, findProjectRoot, generateManifest, generateManifestTemplate, getWindowsDir, init, prepareAppxContent, readBundleConfig$1 as readBundleConfig, readTauriConfig, toFourPartVersion };
|
package/dist/types.d.ts
CHANGED
package/dist/utils/exec.d.ts
CHANGED
|
@@ -9,3 +9,6 @@ export declare function getMsixbundleCliVersion(): Promise<string | null>;
|
|
|
9
9
|
export declare function isVersionSufficient(version: string, minVersion: string): boolean;
|
|
10
10
|
export declare const MIN_MSIXBUNDLE_CLI_VERSION = "1.0.0";
|
|
11
11
|
export declare function promptInstall(message: string): Promise<boolean>;
|
|
12
|
+
export declare function execWithProgress(command: string, options?: {
|
|
13
|
+
cwd?: string;
|
|
14
|
+
}): Promise<void>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@choochmeque/tauri-windows-bundle",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "MSIX packaging tool for Tauri apps - Windows Store ready bundles",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -8,17 +8,6 @@
|
|
|
8
8
|
},
|
|
9
9
|
"main": "./dist/index.js",
|
|
10
10
|
"types": "./dist/index.d.ts",
|
|
11
|
-
"scripts": {
|
|
12
|
-
"build": "rollup -c",
|
|
13
|
-
"prepublishOnly": "pnpm build",
|
|
14
|
-
"pretest": "pnpm build",
|
|
15
|
-
"test": "vitest run",
|
|
16
|
-
"test:watch": "vitest",
|
|
17
|
-
"test:coverage": "vitest run --coverage",
|
|
18
|
-
"lint": "eslint .",
|
|
19
|
-
"format": "prettier --write \"./**/*.{cjs,mjs,js,jsx,mts,ts,tsx,html,css,json}\"",
|
|
20
|
-
"format:check": "prettier --check \"./**/*.{cjs,mjs,js,jsx,mts,ts,tsx,html,css,json}\""
|
|
21
|
-
},
|
|
22
11
|
"keywords": [
|
|
23
12
|
"tauri",
|
|
24
13
|
"windows",
|
|
@@ -55,5 +44,14 @@
|
|
|
55
44
|
"typescript": "^5.3.3",
|
|
56
45
|
"vitest": "^2.0.0"
|
|
57
46
|
},
|
|
58
|
-
"
|
|
59
|
-
|
|
47
|
+
"scripts": {
|
|
48
|
+
"build": "rollup -c",
|
|
49
|
+
"pretest": "pnpm build",
|
|
50
|
+
"test": "vitest run",
|
|
51
|
+
"test:watch": "vitest",
|
|
52
|
+
"test:coverage": "vitest run --coverage",
|
|
53
|
+
"lint": "eslint .",
|
|
54
|
+
"format": "prettier --write \"./**/*.{cjs,mjs,js,jsx,mts,ts,tsx,html,css,json}\"",
|
|
55
|
+
"format:check": "prettier --check \"./**/*.{cjs,mjs,js,jsx,mts,ts,tsx,html,css,json}\""
|
|
56
|
+
}
|
|
57
|
+
}
|