@codenotch/codenotch.cli 1.0.40 → 1.0.41
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/commands/generate/app.js +6 -0
- package/dist/commands/generate/app.js.map +1 -1
- package/dist/commands/generate/appmanifest.js +5 -0
- package/dist/commands/generate/appmanifest.js.map +1 -1
- package/dist/commands/generate/dbcontext.js +5 -1
- package/dist/commands/generate/dbcontext.js.map +1 -1
- package/dist/commands/generate/i18n.js +5 -0
- package/dist/commands/generate/i18n.js.map +1 -1
- package/dist/commands/generate/index.js +8 -1
- package/dist/commands/generate/index.js.map +1 -1
- package/dist/commands/generate/manifest.js +4 -0
- package/dist/commands/generate/manifest.js.map +1 -1
- package/dist/commands/generate/openapi.js +5 -1
- package/dist/commands/generate/openapi.js.map +1 -1
- package/dist/commands/generate/pkg.js +4 -0
- package/dist/commands/generate/pkg.js.map +1 -1
- package/dist/commands/generate/process.js +6 -0
- package/dist/commands/generate/process.js.map +1 -1
- package/dist/commands/project/index.js +8 -1
- package/dist/commands/project/index.js.map +1 -1
- package/dist/commands/project/new.js +7 -1
- package/dist/commands/project/new.js.map +1 -1
- package/dist/commands/project/remove.js +6 -1
- package/dist/commands/project/remove.js.map +1 -1
- package/dist/commands/react/build.js +22 -1
- package/dist/commands/react/build.js.map +1 -1
- package/dist/commands/react/clean.js +7 -2
- package/dist/commands/react/clean.js.map +1 -1
- package/dist/commands/react/dev.js +6 -0
- package/dist/commands/react/dev.js.map +1 -1
- package/dist/commands/react/index.js +11 -1
- package/dist/commands/react/index.js.map +1 -1
- package/dist/commands/react/package.d.ts +2 -0
- package/dist/commands/react/package.js +47 -0
- package/dist/commands/react/package.js.map +1 -0
- package/dist/commands/react/serve.js +5 -0
- package/dist/commands/react/serve.js.map +1 -1
- package/dist/commands/runtime/clear.js +5 -0
- package/dist/commands/runtime/clear.js.map +1 -1
- package/dist/commands/runtime/index.js +8 -1
- package/dist/commands/runtime/index.js.map +1 -1
- package/dist/commands/validation/validate.js +4 -13
- package/dist/commands/validation/validate.js.map +1 -1
- package/dist/utils/BuildUtils.d.ts +53 -5
- package/dist/utils/BuildUtils.js +233 -21
- package/dist/utils/BuildUtils.js.map +1 -1
- package/dist/utils/ConsoleUtils.d.ts +0 -2
- package/dist/utils/ConsoleUtils.js +0 -8
- package/dist/utils/ConsoleUtils.js.map +1 -1
- package/dist/utils/OsUtils.d.ts +6 -0
- package/dist/utils/OsUtils.js +26 -0
- package/dist/utils/OsUtils.js.map +1 -1
- package/dist/utils/PackageUtils.d.ts +101 -0
- package/dist/utils/PackageUtils.js +538 -0
- package/dist/utils/PackageUtils.js.map +1 -0
- package/dist/utils/ProjectCompilationUtils.js.map +1 -1
- package/dist/utils/ServeUtils.js +1 -2
- package/dist/utils/ServeUtils.js.map +1 -1
- package/dist/utils/TemplateUtils.d.ts +1 -0
- package/dist/utils/TemplateUtils.js +1 -0
- package/dist/utils/TemplateUtils.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,538 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const fs_1 = require("fs");
|
|
7
|
+
const path_1 = require("path");
|
|
8
|
+
const os_1 = require("os");
|
|
9
|
+
const zlib_1 = require("zlib");
|
|
10
|
+
const fs_2 = __importDefault(require("fs"));
|
|
11
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
12
|
+
const StringUtils_1 = __importDefault(require("./StringUtils"));
|
|
13
|
+
const FileUtils_1 = __importDefault(require("./FileUtils"));
|
|
14
|
+
const ShellUtils_1 = __importDefault(require("./ShellUtils"));
|
|
15
|
+
const ConsoleUtils_1 = __importDefault(require("./ConsoleUtils"));
|
|
16
|
+
const BuildUtils_1 = __importDefault(require("./BuildUtils"));
|
|
17
|
+
/**
|
|
18
|
+
* Desktop installers for the React apps, through Tauri: the static bundle of the app (see
|
|
19
|
+
* 'cn react build --static') is wrapped into a native window using the webview of the system,
|
|
20
|
+
* and bundled as an installer — NSIS .exe on Windows, .deb/.AppImage on Linux, .app/.dmg on
|
|
21
|
+
* macOS. Behind the command: cn react package <app>
|
|
22
|
+
*
|
|
23
|
+
* Installers do not cross-compile: each one is built on its own OS (a CI matrix covers the
|
|
24
|
+
* others). The machine needs the Rust toolchain — installed on demand through rustup when
|
|
25
|
+
* missing, see {@link PackageUtils.ensureCargo}; everything else (@tauri-apps/cli, the Tauri
|
|
26
|
+
* crates) is fetched into the staging by npm and cargo.
|
|
27
|
+
*/
|
|
28
|
+
class PackageUtils {
|
|
29
|
+
/**
|
|
30
|
+
* Packages one React app of a Codenotch project as a desktop installer.
|
|
31
|
+
*
|
|
32
|
+
* The flow: check the target and the Rust toolchain (fail fast, the build is long), run the
|
|
33
|
+
* static build (environment baked in: a native window has no /api/env to fetch), then stage
|
|
34
|
+
* a generated Tauri project under `.codenotch/<appName>-package`:
|
|
35
|
+
* - package.json — only @tauri-apps/cli, installed on the first run
|
|
36
|
+
* - src-tauri/ — Cargo.toml, build.rs, src/main.rs (a bare webview window), tauri.conf.json
|
|
37
|
+
* pointing `frontendDist` at the `-dist` folder of the static build
|
|
38
|
+
* - src-tauri/icons/ — generated by 'tauri icon' from the biggest icon of the `pwa` section
|
|
39
|
+
* of the app manifest, or from a placeholder when there is none
|
|
40
|
+
*
|
|
41
|
+
* Unlike the build staging, this folder is NOT wiped between runs: cargo caches the compiled
|
|
42
|
+
* Tauri runtime under src-tauri/target, and only the first build pays the full compilation.
|
|
43
|
+
* 'cn react clean' deletes it like the other stagings.
|
|
44
|
+
*
|
|
45
|
+
* Returns the folder holding the installers on success, undefined otherwise (the reason is
|
|
46
|
+
* already printed).
|
|
47
|
+
*/
|
|
48
|
+
static async packageReactApp(appFilePath, options = {}) {
|
|
49
|
+
// resolve() already turns a relative path into an absolute one, based on the current directory
|
|
50
|
+
appFilePath = StringUtils_1.default.normalizePath((0, path_1.resolve)(appFilePath));
|
|
51
|
+
if ((0, fs_1.existsSync)(appFilePath) === false) {
|
|
52
|
+
console.log(chalk_1.default.red(`Error: File "${appFilePath}" not found`));
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
let workspacePath = BuildUtils_1.default.findWorkspaceFromFile(appFilePath) ?? '';
|
|
56
|
+
if (workspacePath === '' || (0, fs_1.existsSync)(workspacePath) === false) {
|
|
57
|
+
console.log(chalk_1.default.red(`Error: Could not find workspace manifest for file "${appFilePath}".`));
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
// App manifest, named like the component
|
|
61
|
+
let appFilename = StringUtils_1.default.getFilenameFromUri(appFilePath);
|
|
62
|
+
let appFolderPath = StringUtils_1.default.getFolder(appFilePath);
|
|
63
|
+
let appManifestPath = StringUtils_1.default.normalizePath(`${appFolderPath}/${appFilename.replace(/\.[^/.]+$/, '.manifest.json')}`);
|
|
64
|
+
if ((0, fs_1.existsSync)(appManifestPath) === false) {
|
|
65
|
+
console.log(chalk_1.default.red(`Error: App manifest file not found at "${appManifestPath}"`));
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
let appManifest = JSON.parse(fs_2.default.readFileSync(appManifestPath, 'utf-8'));
|
|
69
|
+
let appName = `${appManifest.app?.name ?? ''}`.trim();
|
|
70
|
+
if (appName === '') {
|
|
71
|
+
console.log(chalk_1.default.red(`Error: App name not found in manifest at "${appManifestPath}"`));
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
// Only the OS the command runs on: installers do not cross-compile
|
|
75
|
+
const target = this.checkTarget(options.target);
|
|
76
|
+
if (target === undefined) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
// Rust next: a missing toolchain should fail (or be installed) before the (long) static build
|
|
80
|
+
if (await this.ensureCargo(target) === false) {
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
// The installer wraps a bundle that must run without a Codenotch host behind it
|
|
84
|
+
console.log(chalk_1.default.green(`Packaging "${appName}" for ${target}...\n`));
|
|
85
|
+
const distPath = await BuildUtils_1.default.buildReactApp(appFilePath, { clusterUrl: options.clusterUrl, static: true });
|
|
86
|
+
if (distPath === undefined) {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
// The staging is kept between runs: src-tauri/target holds the cargo cache, and only
|
|
90
|
+
// the first build compiles the Tauri runtime. 'cn react clean' deletes it.
|
|
91
|
+
let stagingPath = StringUtils_1.default.normalizePath(`${workspacePath}/.codenotch/${appName}-package`);
|
|
92
|
+
let version = this.projectVersion(workspacePath);
|
|
93
|
+
let serviceName = this.serviceName(workspacePath);
|
|
94
|
+
console.log('');
|
|
95
|
+
console.log("Creating packaging files...");
|
|
96
|
+
FileUtils_1.default.writeFileSync(stagingPath + '/package.json', JSON.stringify(this.createStagingPackageJson(appName), null, 4));
|
|
97
|
+
FileUtils_1.default.writeFileSync(stagingPath + '/src-tauri/Cargo.toml', this.createCargoToml(appName, version));
|
|
98
|
+
FileUtils_1.default.writeFileSync(stagingPath + '/src-tauri/build.rs', this.createBuildRs());
|
|
99
|
+
FileUtils_1.default.writeFileSync(stagingPath + '/src-tauri/src/main.rs', this.createMainRs());
|
|
100
|
+
ConsoleUtils_1.default.check(`Tauri project files created in ${stagingPath}\n`);
|
|
101
|
+
// Dependencies first: 'tauri icon' below needs the local @tauri-apps/cli
|
|
102
|
+
if ((0, fs_1.existsSync)(StringUtils_1.default.normalizePath(`${stagingPath}/node_modules`)) === false) {
|
|
103
|
+
console.log("Installing packaging dependencies...");
|
|
104
|
+
const installCode = await ShellUtils_1.default.run(stagingPath, 'npm install --no-audit --no-fund');
|
|
105
|
+
if (installCode !== 0) {
|
|
106
|
+
console.log(chalk_1.default.red(`Error: npm install failed (exit code ${installCode}).`));
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Icons are generated once; delete the staging (or the icons folder) to refresh them
|
|
111
|
+
if ((0, fs_1.existsSync)(StringUtils_1.default.normalizePath(`${stagingPath}/src-tauri/icons/icon.ico`)) === false) {
|
|
112
|
+
const generated = await this.generateIcons(stagingPath, this.findAppIcon(appManifest, appFolderPath, workspacePath));
|
|
113
|
+
if (generated === false) {
|
|
114
|
+
return undefined;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// The conf lists the icon files actually generated, so it comes after them
|
|
118
|
+
FileUtils_1.default.writeFileSync(stagingPath + '/src-tauri/tauri.conf.json', JSON.stringify(this.createTauriConf(appManifest, appName, serviceName, version, target, stagingPath), null, 4));
|
|
119
|
+
ConsoleUtils_1.default.check(`tauri.conf.json created successfully\n`);
|
|
120
|
+
console.log(chalk_1.default.green(`Building the ${target} installer (the first run compiles the Tauri runtime, expect several minutes)...\n`));
|
|
121
|
+
const buildCode = await ShellUtils_1.default.run(stagingPath, 'npx --no-install tauri build');
|
|
122
|
+
if (buildCode !== 0) {
|
|
123
|
+
console.log(chalk_1.default.red(`\nError: 'tauri build' failed (exit code ${buildCode}).`));
|
|
124
|
+
this.printBuildHelp(target);
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
const bundleDir = StringUtils_1.default.normalizePath(`${stagingPath}/src-tauri/target/release/bundle`);
|
|
128
|
+
const installers = this.listInstallers(bundleDir);
|
|
129
|
+
console.log('');
|
|
130
|
+
console.log(chalk_1.default.green(`Packaging completed!\n`));
|
|
131
|
+
if (installers.length === 0) {
|
|
132
|
+
console.log(chalk_1.default.yellow(`No installer found under "${bundleDir}" — check the build output above.`));
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
console.log(`Installer(s) available:\n`);
|
|
136
|
+
for (const installer of installers) {
|
|
137
|
+
console.log(chalk_1.default.green(` ${installer.path}`) + ` (${installer.sizeMb} MB)`);
|
|
138
|
+
}
|
|
139
|
+
console.log('');
|
|
140
|
+
console.log(`The installers are not signed: Windows SmartScreen / macOS Gatekeeper will warn on first launch.`);
|
|
141
|
+
return bundleDir;
|
|
142
|
+
}
|
|
143
|
+
/** The OS this process runs on, as a packaging target */
|
|
144
|
+
static hostTarget() {
|
|
145
|
+
return process.platform === 'win32' ? 'windows' :
|
|
146
|
+
process.platform === 'darwin' ? 'macos' :
|
|
147
|
+
'linux';
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* The target actually buildable here: the host OS. An explicit different target is refused
|
|
151
|
+
* with the CI suggestion — installers do not cross-compile.
|
|
152
|
+
*/
|
|
153
|
+
static checkTarget(requested) {
|
|
154
|
+
const host = this.hostTarget();
|
|
155
|
+
if (requested === undefined) {
|
|
156
|
+
return host;
|
|
157
|
+
}
|
|
158
|
+
const wanted = requested.toLowerCase();
|
|
159
|
+
if (wanted !== 'windows' && wanted !== 'linux' && wanted !== 'macos') {
|
|
160
|
+
console.log(chalk_1.default.red(`Error: Unknown target "${requested}". Possible targets: windows, linux, macos.`));
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
if (wanted !== host) {
|
|
164
|
+
console.log(chalk_1.default.red(`Error: A ${wanted} installer can only be built on ${wanted} (installers do not cross-compile).`));
|
|
165
|
+
console.log(`This ${host} machine can build the ${host} installer; use a CI matrix (e.g. GitHub Actions with windows/macos/ubuntu runners) for the others.`);
|
|
166
|
+
return undefined;
|
|
167
|
+
}
|
|
168
|
+
return wanted;
|
|
169
|
+
}
|
|
170
|
+
static async hasCargo() {
|
|
171
|
+
try {
|
|
172
|
+
await ShellUtils_1.default.exec(process.cwd(), 'cargo --version', undefined, true);
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Checks the Rust toolchain, and proposes to install it through rustup when missing (in an
|
|
181
|
+
* interactive terminal only — elsewhere the manual instructions are printed instead). After
|
|
182
|
+
* a successful install, ~/.cargo/bin is adopted into the PATH of this process, so the
|
|
183
|
+
* packaging goes on without a new terminal.
|
|
184
|
+
*/
|
|
185
|
+
static async ensureCargo(target) {
|
|
186
|
+
if (await this.hasCargo()) {
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
// An existing install may just be missing from the PATH of this terminal
|
|
190
|
+
if (this.adoptCargoHome()) {
|
|
191
|
+
ConsoleUtils_1.default.check(`Rust toolchain found in ~/.cargo/bin (it was not on the PATH of this terminal).\n`);
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
194
|
+
console.log(chalk_1.default.yellow(`The Rust toolchain (cargo) is needed to build the installer, and was not found.`));
|
|
195
|
+
if (process.stdin.isTTY !== true) {
|
|
196
|
+
this.printRustHelp(target);
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
if (await ConsoleUtils_1.default.confirm(`Install it now with rustup (https://rustup.rs)?`, true) === false) {
|
|
200
|
+
this.printRustHelp(target);
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
203
|
+
const installed = target === 'windows' ?
|
|
204
|
+
await this.installRustWindows() :
|
|
205
|
+
await this.installRustUnix(target);
|
|
206
|
+
if (installed === false) {
|
|
207
|
+
this.printRustHelp(target);
|
|
208
|
+
return false;
|
|
209
|
+
}
|
|
210
|
+
// rustup updates the persistent environment, not this process: adopt ~/.cargo/bin now
|
|
211
|
+
this.adoptCargoHome();
|
|
212
|
+
if (await this.hasCargo() === false) {
|
|
213
|
+
console.log(chalk_1.default.yellow(`rustup finished, but 'cargo' is still not callable from this process: open a new terminal and run the command again.`));
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
ConsoleUtils_1.default.check(`Rust toolchain installed successfully.\n`);
|
|
217
|
+
return true;
|
|
218
|
+
}
|
|
219
|
+
/** Prepends ~/.cargo/bin to the PATH of this process when cargo lives there; true when it does */
|
|
220
|
+
static adoptCargoHome() {
|
|
221
|
+
const cargoBin = StringUtils_1.default.normalizePath(`${(0, os_1.homedir)()}/.cargo/bin`);
|
|
222
|
+
const cargoExe = StringUtils_1.default.normalizePath(`${cargoBin}/cargo${process.platform === 'win32' ? '.exe' : ''}`);
|
|
223
|
+
if ((0, fs_1.existsSync)(cargoExe) === false) {
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
if ((process.env.PATH ?? '').includes(cargoBin) === false) {
|
|
227
|
+
process.env.PATH = `${cargoBin}${path_1.delimiter}${process.env.PATH ?? ''}`;
|
|
228
|
+
}
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Downloads rustup-init.exe and runs it INTERACTIVELY: when the MSVC build tools are missing,
|
|
233
|
+
* rustup-init proposes their quick install — the silent '-y' mode would skip that and leave
|
|
234
|
+
* a toolchain unable to link.
|
|
235
|
+
*/
|
|
236
|
+
static async installRustWindows() {
|
|
237
|
+
const arch = process.arch === 'arm64' ? 'aarch64' : 'x86_64';
|
|
238
|
+
const installerPath = StringUtils_1.default.normalizePath(`${(0, os_1.tmpdir)()}/rustup-init.exe`);
|
|
239
|
+
try {
|
|
240
|
+
console.log(`Downloading rustup-init.exe (${arch})...`);
|
|
241
|
+
const response = await fetch(`https://win.rustup.rs/${arch}`);
|
|
242
|
+
if (response.ok === false) {
|
|
243
|
+
throw new Error(`HTTP ${response.status}`);
|
|
244
|
+
}
|
|
245
|
+
fs_2.default.writeFileSync(installerPath, Buffer.from(await response.arrayBuffer()));
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
console.log(chalk_1.default.red(`Error: could not download rustup-init.exe (${error?.message ?? error}).`));
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
console.log(`Running the rustup installer — accept the defaults when unsure; it can also install the missing Visual Studio C++ build tools...\n`);
|
|
252
|
+
const code = await ShellUtils_1.default.run(process.cwd(), `"${installerPath}"`);
|
|
253
|
+
return code === 0;
|
|
254
|
+
}
|
|
255
|
+
/** The documented one-liner, in its non-interactive form: stable toolchain, default profile */
|
|
256
|
+
static async installRustUnix(target) {
|
|
257
|
+
console.log(`Installing rustup (stable toolchain)...\n`);
|
|
258
|
+
const code = await ShellUtils_1.default.run(process.cwd(), `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y`);
|
|
259
|
+
if (code !== 0) {
|
|
260
|
+
console.log(chalk_1.default.red(`Error: the rustup install failed (exit code ${code}).`));
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
if (target === 'linux') {
|
|
264
|
+
console.log(`Reminder: the webview dev packages are needed too, e.g. on Debian/Ubuntu:`);
|
|
265
|
+
console.log(chalk_1.default.green(`sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file libssl-dev libayatana-appindicator3-dev librsvg2-dev`));
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
console.log(`Reminder: the Xcode command line tools are needed too when not already present: ${chalk_1.default.green('xcode-select --install')}`);
|
|
269
|
+
}
|
|
270
|
+
return true;
|
|
271
|
+
}
|
|
272
|
+
static printRustHelp(target) {
|
|
273
|
+
console.log(chalk_1.default.red(`Error: Rust toolchain not found ('cargo' is not on the PATH), and Tauri needs it to build the installer.`));
|
|
274
|
+
console.log(`Install it from ${chalk_1.default.green('https://rustup.rs')} then run the command again (in a fresh terminal).`);
|
|
275
|
+
if (target === 'windows') {
|
|
276
|
+
console.log(`On Windows, pick the MSVC toolchain: rustup proposes to install the Visual Studio 'Desktop development with C++' build tools when they are missing.`);
|
|
277
|
+
}
|
|
278
|
+
else if (target === 'linux') {
|
|
279
|
+
console.log(`On Linux, the webview dev packages are needed too, e.g. on Debian/Ubuntu:`);
|
|
280
|
+
console.log(chalk_1.default.green(`sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file libssl-dev libayatana-appindicator3-dev librsvg2-dev`));
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
console.log(`On macOS, the Xcode command line tools are needed too: ${chalk_1.default.green('xcode-select --install')}`);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
/** The usual causes of a failed 'tauri build', per OS, printed after its own output */
|
|
287
|
+
static printBuildHelp(target) {
|
|
288
|
+
if (target === 'windows') {
|
|
289
|
+
console.log(`If the error mentions 'link.exe' or a missing linker, install the Visual Studio 'Desktop development with C++' build tools and retry.`);
|
|
290
|
+
}
|
|
291
|
+
else if (target === 'linux') {
|
|
292
|
+
console.log(`If the error mentions webkit2gtk, soup or javascriptcore, install the Tauri prerequisites, e.g. on Debian/Ubuntu:`);
|
|
293
|
+
console.log(chalk_1.default.green(`sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file libssl-dev libayatana-appindicator3-dev librsvg2-dev`));
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
console.log(`If the error mentions xcrun or missing developer tools: ${chalk_1.default.green('xcode-select --install')}`);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
/** 'version' of the project manifest when it looks like x.y.z, or 0.1.0 (installers want numbers) */
|
|
300
|
+
static projectVersion(workspacePath) {
|
|
301
|
+
try {
|
|
302
|
+
const manifest = BuildUtils_1.default.getFullManifestAt(workspacePath);
|
|
303
|
+
const match = `${manifest?.version ?? ''}`.match(/^\d+\.\d+\.\d+/);
|
|
304
|
+
if (match !== null) {
|
|
305
|
+
return match[0];
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
catch { }
|
|
309
|
+
return '0.1.0';
|
|
310
|
+
}
|
|
311
|
+
static serviceName(workspacePath) {
|
|
312
|
+
try {
|
|
313
|
+
return `${BuildUtils_1.default.getFullManifestAt(workspacePath).serviceName ?? ''}`.trim();
|
|
314
|
+
}
|
|
315
|
+
catch {
|
|
316
|
+
return '';
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
/** appName as a cargo crate name: lowercase, alphanumerics and underscores, no leading digit */
|
|
320
|
+
static crateName(appName) {
|
|
321
|
+
let name = appName.toLowerCase().replace(/[^a-z0-9_]/g, '_');
|
|
322
|
+
if (name === '' || /^[0-9]/.test(name)) {
|
|
323
|
+
name = `app_${name}`;
|
|
324
|
+
}
|
|
325
|
+
return name;
|
|
326
|
+
}
|
|
327
|
+
/** A name as a segment of the bundle identifier: lowercase alphanumerics only */
|
|
328
|
+
static identifierSegment(name) {
|
|
329
|
+
let segment = name.toLowerCase().replace(/[^a-z0-9]/g, '');
|
|
330
|
+
return segment === '' ? 'app' : segment;
|
|
331
|
+
}
|
|
332
|
+
static createStagingPackageJson(appName) {
|
|
333
|
+
return {
|
|
334
|
+
"name": `${this.crateName(appName)}-package`,
|
|
335
|
+
"private": true,
|
|
336
|
+
"version": "1.0.0",
|
|
337
|
+
"scripts": {
|
|
338
|
+
"tauri": "tauri"
|
|
339
|
+
},
|
|
340
|
+
"devDependencies": {
|
|
341
|
+
"@tauri-apps/cli": "^2.0.0"
|
|
342
|
+
}
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
static createCargoToml(appName, version) {
|
|
346
|
+
return `
|
|
347
|
+
[package]
|
|
348
|
+
name = ${JSON.stringify(this.crateName(appName))}
|
|
349
|
+
version = ${JSON.stringify(version)}
|
|
350
|
+
description = ${JSON.stringify(`${appName} — Codenotch app packaged by 'cn react package'`)}
|
|
351
|
+
edition = "2021"
|
|
352
|
+
|
|
353
|
+
[build-dependencies]
|
|
354
|
+
tauri-build = { version = "2", features = [] }
|
|
355
|
+
|
|
356
|
+
[dependencies]
|
|
357
|
+
tauri = { version = "2", features = [] }
|
|
358
|
+
|
|
359
|
+
[profile.release]
|
|
360
|
+
strip = true
|
|
361
|
+
`.trim();
|
|
362
|
+
}
|
|
363
|
+
static createBuildRs() {
|
|
364
|
+
return `
|
|
365
|
+
fn main() {
|
|
366
|
+
tauri_build::build()
|
|
367
|
+
}
|
|
368
|
+
`.trim();
|
|
369
|
+
}
|
|
370
|
+
/** A bare Tauri app: one window on the static bundle, no API surface at all */
|
|
371
|
+
static createMainRs() {
|
|
372
|
+
return `
|
|
373
|
+
// Prevents an extra console window on Windows in release builds
|
|
374
|
+
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
|
|
375
|
+
|
|
376
|
+
fn main() {
|
|
377
|
+
tauri::Builder::default()
|
|
378
|
+
.run(tauri::generate_context!())
|
|
379
|
+
.expect("error while running tauri application");
|
|
380
|
+
}
|
|
381
|
+
`.trim();
|
|
382
|
+
}
|
|
383
|
+
static createTauriConf(appManifest, appName, serviceName, version, target, stagingPath) {
|
|
384
|
+
// Only the icon files 'tauri icon' actually generated: a missing listed file fails the bundle
|
|
385
|
+
let iconsDir = StringUtils_1.default.normalizePath(`${stagingPath}/src-tauri/icons`);
|
|
386
|
+
let iconFiles = [];
|
|
387
|
+
if ((0, fs_1.existsSync)(iconsDir)) {
|
|
388
|
+
iconFiles = fs_2.default.readdirSync(iconsDir)
|
|
389
|
+
.filter(f => f === 'icon.ico' || f === 'icon.icns' || /^\d+x\d+(@2x)?\.png$/.test(f))
|
|
390
|
+
.map(f => `icons/${f}`);
|
|
391
|
+
}
|
|
392
|
+
let targets = target === 'windows' ? ['nsis'] :
|
|
393
|
+
target === 'macos' ? ['app', 'dmg'] :
|
|
394
|
+
['deb', 'appimage'];
|
|
395
|
+
let identifier = serviceName === '' ?
|
|
396
|
+
`com.codenotch.${this.identifierSegment(appName)}` :
|
|
397
|
+
`com.codenotch.${this.identifierSegment(serviceName)}.${this.identifierSegment(appName)}`;
|
|
398
|
+
return {
|
|
399
|
+
"$schema": "https://schema.tauri.app/config/2",
|
|
400
|
+
"productName": appName,
|
|
401
|
+
"version": version,
|
|
402
|
+
"identifier": identifier,
|
|
403
|
+
"build": {
|
|
404
|
+
// Already produced by the static build: tauri only wraps the dist, no dev server
|
|
405
|
+
"frontendDist": `../../${appName}-dist`
|
|
406
|
+
},
|
|
407
|
+
"app": {
|
|
408
|
+
"windows": [
|
|
409
|
+
{
|
|
410
|
+
"title": appManifest.html?.title ?? appName,
|
|
411
|
+
"width": 1280,
|
|
412
|
+
"height": 800
|
|
413
|
+
}
|
|
414
|
+
],
|
|
415
|
+
"security": {
|
|
416
|
+
"csp": null
|
|
417
|
+
}
|
|
418
|
+
},
|
|
419
|
+
"bundle": {
|
|
420
|
+
"active": true,
|
|
421
|
+
"targets": targets,
|
|
422
|
+
"icon": iconFiles
|
|
423
|
+
}
|
|
424
|
+
};
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* The best source for the installer icons: the biggest icon of the `pwa` section of the app
|
|
428
|
+
* manifest, looked up next to the app manifest then from the workspace root, like the PWA
|
|
429
|
+
* build does. Undefined when the app declares none (or only URLs).
|
|
430
|
+
*/
|
|
431
|
+
static findAppIcon(appManifest, appFolderPath, workspacePath) {
|
|
432
|
+
// Biggest first: 'tauri icon' downscales cleanly, upscaling a small one would blur
|
|
433
|
+
let icons = [...(appManifest.pwa?.icons ?? [])]
|
|
434
|
+
.sort((a, b) => (parseInt(`${b.sizes ?? ''}`) || 0) - (parseInt(`${a.sizes ?? ''}`) || 0));
|
|
435
|
+
for (let icon of icons) {
|
|
436
|
+
let src = `${icon.src ?? ''}`.trim();
|
|
437
|
+
if (src === '' || /^(https?:|data:)/i.test(src)) {
|
|
438
|
+
continue;
|
|
439
|
+
}
|
|
440
|
+
let candidates = [
|
|
441
|
+
StringUtils_1.default.normalizePath(`${appFolderPath}/${src}`),
|
|
442
|
+
StringUtils_1.default.normalizePath(`${workspacePath}/${src}`)
|
|
443
|
+
];
|
|
444
|
+
let found = candidates.find(c => (0, fs_1.existsSync)(c));
|
|
445
|
+
if (found !== undefined) {
|
|
446
|
+
return found;
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
return undefined;
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Generates the full icon set (icon.ico, icon.icns, sized pngs) in src-tauri/icons with
|
|
453
|
+
* 'tauri icon'. Falls back to a generated placeholder when the app has no usable icon, or
|
|
454
|
+
* when the source is rejected (not square, no alpha channel...). Returns false only when
|
|
455
|
+
* even the placeholder fails, the reason printed by the tauri CLI itself.
|
|
456
|
+
*/
|
|
457
|
+
static async generateIcons(stagingPath, sourceIconPath) {
|
|
458
|
+
if (sourceIconPath === undefined) {
|
|
459
|
+
ConsoleUtils_1.default.checkWarning(`No usable icon in the pwa section of the app manifest: using a placeholder (a square PNG with transparency, 512px or more, is recommended).`);
|
|
460
|
+
}
|
|
461
|
+
else {
|
|
462
|
+
console.log(`Generating installer icons from "${sourceIconPath}"...`);
|
|
463
|
+
const code = await ShellUtils_1.default.run(stagingPath, `npx --no-install tauri icon "${sourceIconPath}" -o src-tauri/icons`);
|
|
464
|
+
if (code === 0) {
|
|
465
|
+
ConsoleUtils_1.default.check(`Installer icons generated successfully\n`);
|
|
466
|
+
return true;
|
|
467
|
+
}
|
|
468
|
+
ConsoleUtils_1.default.checkWarning(`'tauri icon' rejected "${sourceIconPath}" (it wants a square PNG with an alpha channel): using a placeholder instead.`);
|
|
469
|
+
}
|
|
470
|
+
const placeholderPath = StringUtils_1.default.normalizePath(`${stagingPath}/app-icon.png`);
|
|
471
|
+
fs_2.default.writeFileSync(placeholderPath, this.createPlaceholderIcon(1024, [30, 41, 59, 255]));
|
|
472
|
+
const code = await ShellUtils_1.default.run(stagingPath, `npx --no-install tauri icon "${placeholderPath}" -o src-tauri/icons`);
|
|
473
|
+
if (code !== 0) {
|
|
474
|
+
console.log(chalk_1.default.red(`Error: could not generate the installer icons ('tauri icon' failed, see its output above).`));
|
|
475
|
+
return false;
|
|
476
|
+
}
|
|
477
|
+
ConsoleUtils_1.default.check(`Installer icons generated successfully\n`);
|
|
478
|
+
return true;
|
|
479
|
+
}
|
|
480
|
+
/**
|
|
481
|
+
* A solid-color square PNG (RGBA), built by hand: enough for 'tauri icon', which wants a
|
|
482
|
+
* square image with an alpha channel, without pulling an image library into the CLI.
|
|
483
|
+
*/
|
|
484
|
+
static createPlaceholderIcon(size, rgba) {
|
|
485
|
+
// One scanline: a filter byte (0, none) then the RGBA pixels
|
|
486
|
+
let row = Buffer.alloc(1 + size * 4);
|
|
487
|
+
for (let x = 0; x < size; x++) {
|
|
488
|
+
row[1 + x * 4] = rgba[0];
|
|
489
|
+
row[2 + x * 4] = rgba[1];
|
|
490
|
+
row[3 + x * 4] = rgba[2];
|
|
491
|
+
row[4 + x * 4] = rgba[3];
|
|
492
|
+
}
|
|
493
|
+
let raw = Buffer.concat(new Array(size).fill(row));
|
|
494
|
+
let ihdr = Buffer.alloc(13);
|
|
495
|
+
ihdr.writeUInt32BE(size, 0); // width
|
|
496
|
+
ihdr.writeUInt32BE(size, 4); // height
|
|
497
|
+
ihdr[8] = 8; // bit depth
|
|
498
|
+
ihdr[9] = 6; // color type: truecolor with alpha
|
|
499
|
+
return Buffer.concat([
|
|
500
|
+
Buffer.from([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A]), // PNG signature
|
|
501
|
+
this.pngChunk('IHDR', ihdr),
|
|
502
|
+
this.pngChunk('IDAT', (0, zlib_1.deflateSync)(raw)),
|
|
503
|
+
this.pngChunk('IEND', Buffer.alloc(0))
|
|
504
|
+
]);
|
|
505
|
+
}
|
|
506
|
+
static pngChunk(type, data) {
|
|
507
|
+
let payload = Buffer.concat([Buffer.from(type, 'ascii'), data]);
|
|
508
|
+
let header = Buffer.alloc(4);
|
|
509
|
+
header.writeUInt32BE(data.length, 0);
|
|
510
|
+
let crc = Buffer.alloc(4);
|
|
511
|
+
crc.writeUInt32BE(this.crc32(payload), 0);
|
|
512
|
+
return Buffer.concat([header, payload, crc]);
|
|
513
|
+
}
|
|
514
|
+
static crc32(data) {
|
|
515
|
+
let crc = 0xFFFFFFFF;
|
|
516
|
+
for (let i = 0; i < data.length; i++) {
|
|
517
|
+
crc ^= data[i];
|
|
518
|
+
for (let bit = 0; bit < 8; bit++) {
|
|
519
|
+
crc = (crc >>> 1) ^ (0xEDB88320 & -(crc & 1));
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
return (crc ^ 0xFFFFFFFF) >>> 0;
|
|
523
|
+
}
|
|
524
|
+
/** The installer files tauri bundled, with their size — the raw binary is not one of them */
|
|
525
|
+
static listInstallers(bundleDir) {
|
|
526
|
+
if ((0, fs_1.existsSync)(bundleDir) === false) {
|
|
527
|
+
return [];
|
|
528
|
+
}
|
|
529
|
+
return FileUtils_1.default.listFilesRecursively(bundleDir, {
|
|
530
|
+
fileExtensions: ['.exe', '.msi', '.dmg', '.deb', '.rpm', '.AppImage']
|
|
531
|
+
}).map(f => ({
|
|
532
|
+
path: StringUtils_1.default.normalizePath(f),
|
|
533
|
+
sizeMb: (fs_2.default.statSync(f).size / (1024 * 1024)).toFixed(1)
|
|
534
|
+
}));
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
exports.default = PackageUtils;
|
|
538
|
+
//# sourceMappingURL=PackageUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PackageUtils.js","sourceRoot":"","sources":["../../src/utils/PackageUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectCompilationUtils.js","sourceRoot":"","sources":["../../src/utils/ProjectCompilationUtils.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;
|
|
1
|
+
{"version":3,"file":"ProjectCompilationUtils.js","sourceRoot":"","sources":["../../src/utils/ProjectCompilationUtils.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/ServeUtils.js
CHANGED
|
@@ -39,7 +39,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
39
39
|
const chalk_1 = __importDefault(require("chalk"));
|
|
40
40
|
const fs_1 = require("fs");
|
|
41
41
|
const path_1 = require("path");
|
|
42
|
-
const ConsoleUtils_1 = __importDefault(require("./ConsoleUtils"));
|
|
43
42
|
class ServeUtils {
|
|
44
43
|
static async serveApp(directory, options) {
|
|
45
44
|
const port = options.port || 5000;
|
|
@@ -142,7 +141,7 @@ class ServeUtils {
|
|
|
142
141
|
}
|
|
143
142
|
});
|
|
144
143
|
const server = app.listen(options.port, () => {
|
|
145
|
-
console.log(chalk_1.default.green(`Server running on http://localhost:${options.port}`)
|
|
144
|
+
console.log(chalk_1.default.green(`Server running on http://localhost:${options.port}`));
|
|
146
145
|
});
|
|
147
146
|
const killServer = () => {
|
|
148
147
|
console.log(chalk_1.default.yellow('\nStopping server...'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServeUtils.js","sourceRoot":"","sources":["../../src/utils/ServeUtils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,2BAA8C;AAC9C,+BAA+B;
|
|
1
|
+
{"version":3,"file":"ServeUtils.js","sourceRoot":"","sources":["../../src/utils/ServeUtils.ts"],"names":[],"mappings":"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"}
|