UNPKG

1.76 kBJavaScriptView Raw
1import child_process from "node:child_process";
2import console from "node:console";
3import path from "node:path";
4import process from "node:process";
5
6import util from "./util.js";
7
8/**
9 * @typedef {object} RunOptions
10 * @property {string | "latest" | "stable" | "lts"} [version = "latest"] Runtime version
11 * @property {"normal" | "sdk"} [flavor = "normal"] Build flavor
12 * @property {"linux" | "osx" | "win"} [platform] Target platform
13 * @property {"ia32" | "x64" | "arm64"} [arch] Target arch
14 * @property {string} [srcDir = "./src"] Source directory
15 * @property {string} [cacheDir = "./cache"] Cache directory
16 */
17
18/**
19 * Run NW.js application.
20 *
21 * @async
22 * @function
23 *
24 * @param {RunOptions} options Run mode options
25 * @return {Promise<void>}
26 */
27async function run({
28 version = "latest",
29 flavor = "normal",
30 platform = util.PLATFORM_KV[process.platform],
31 arch = util.ARCH_KV[process.arch],
32 srcDir = ".",
33 cacheDir = "./cache",
34}) {
35
36 try {
37 if (util.EXE_NAME[platform] === undefined) {
38 throw new Error("Unsupported platform.");
39 }
40
41 const nwDir = path.resolve(
42 cacheDir,
43 `nwjs${flavor === "sdk" ? "-sdk" : ""}-v${version}-${platform}-${arch}`,
44 );
45
46 return new Promise((res, rej) => {
47 const nwProcess = child_process.spawn(
48 path.resolve(nwDir, util.EXE_NAME[platform]),
49 [srcDir]
50 );
51
52 nwProcess.on("close", () => {
53 res();
54 });
55
56 nwProcess.on("error", (error) => {
57 console.error(error);
58 rej(error);
59 });
60 });
61 } catch (error) {
62 console.error(error);
63 }
64}
65
66export default run;