UNPKG

nw

Version:
65 lines (59 loc) 3.59 kB
import fs from "node:fs"; import path from "node:path"; import process from "node:process"; import url from "node:url"; import semver from "semver"; import util from "../src/util.js"; /** * @typedef {object} ParseOptions * @property {string | "latest" | "stable" | "lts"} version Runtime version * @property {"normal" | "sdk"} flavor Build flavor * @property {"linux" | "osx" | "win"} platform Target platform * @property {"ia32" | "x64" | "arm64"} arch Target arch * @property {string} downloadUrl Download server. * @property {string} cacheDir Cache directory * @property {string} srcDir Source directory * @property {boolean} cache If false, remove cache and redownload. * @property {boolean} ffmpeg If true, ffmpeg is not downloaded. * @property {false | "gyp"} nativeAddon Rebuild native modules * @property {boolean} unref Unref the child process and unblock the caller */ /** * Parse options. * * @param {ParseOptions} options * @return {Promise<ParseOptions>} */ export default async function parse(options) { const __dirname = path.dirname(url.fileURLToPath(import.meta.url)); /** * @type {fs.PathLike} */ const nodeManifestPath = path.resolve(__dirname, "..", "package.json"); /** * @type {object} */ const nodeManifest = JSON.parse(await fs.promises.readFile(nodeManifestPath, { encoding: "utf-8" })); options.version = options.version ?? nodeManifest.version; const parsedVersion = semver.parse(options.version); options.version = [ parsedVersion.major, parsedVersion.minor, parsedVersion.patch ].join("."); options.flavor = options.flavor || process.env.npm_config_nwjs_build_type || process.env.NWJS_BUILD_TYPE || "normal"; if (String(parsedVersion?.prerelease[0]).endsWith("sdk")) { options.flavor = "sdk"; } options.platform = options.platform || util.PLATFORM_KV[process.env.npm_config_nwjs_platform || process.env.NWJS_PLATFORM || process.platform]; options.arch = options.arch || util.ARCH_KV[process.env.npm_config_nwjs_process_arch || process.env.NWJS_ARCH || process.arch]; options.downloadUrl = options.downloadUrl || process.env.npm_config_nwjs_urlbase || process.env.NWJS_URLBASE || "https://dl.nwjs.io"; options.manifestUrl = options.manifestUrl || process.env.npm_config_nwjs_manifest_urlbase || process.env.NWJS_MANIFEST_URLBASE || "https://nwjs.io/versions.json"; options.cacheDir = options.npm_config_nwjs_urlbase || process.env.npm_config_nwjs_cache_dir || process.env.NWJS_CACHE_DIR || path.resolve(__dirname, ".."); options.srcDir = options.srcDir || process.cwd(); options.cache ??= process.env.npm_config_nwjs_cache !== "false" && process.env.NWJS_CACHE !== "false"; options.ffmpeg ??= process.env.npm_config_nwjs_ffmpeg === "true" || process.env.NWJS_FFMPEG === "true"; options.nativeAddon ??= (process.env.npm_config_nwjs_native_addon === "gyp" || process.env.NWJS_NATIVE_ADDON === "gyp") ? "gyp" : false; options.unref ??= process.env.npm_config_nwjs_unref === "true" || process.env.NWJS_UNREF === "true"; return { ...options }; }