UNPKG

nw

Version:
64 lines (58 loc) 3.42 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.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 }; }