UNPKG

3.3 kBJavaScriptView Raw
1import path from 'node:path';
2import process from 'node:process';
3
4import semver from 'semver';
5
6import nodeManifest from '../package.json' assert { type: 'json' };
7import util from '../src/util.js';
8
9/**
10 * @typedef {object} ParseOptions
11 * @property {string | "latest" | "stable" | "lts"} version Runtime version
12 * @property {"normal" | "sdk"} flavor Build flavor
13 * @property {"linux" | "osx" | "win"} platform Target platform
14 * @property {"ia32" | "x64" | "arm64"} arch Target arch
15 * @property {string} downloadUrl Download server.
16 * @property {string} cacheDir Cache directory
17 * @property {boolean} cache If false, remove cache and redownload.
18 * @property {boolean} ffmpeg If true, ffmpeg is not downloaded.
19 * @property {false | "gyp"} nativeAddon Rebuild native modules
20 */
21
22/**
23 * Parse options.
24 *
25 * @param {ParseOptions} options
26 * @return {Promise<ParseOptions>}
27 */
28export default async function parse(options) {
29 options.version = options.version ?? nodeManifest.version;
30 const parsedVersion = semver.parse(options.version);
31 options.version = [
32 parsedVersion.major,
33 parsedVersion.minor,
34 parsedVersion.patch
35 ].join('.');
36
37 options.flavor = options.flavor || process.env.npm_config_nwjs_build_type || process.env.NWJS_BUILD_TYPE || 'normal';
38
39 /* Check if version is a prelease. */
40 if (typeof parsedVersion?.prerelease?.[0] === 'string') {
41 let prerelease = parsedVersion.prerelease[0].split('-');
42 if (prerelease.length > 1) {
43 prerelease = prerelease.slice(0, -1);
44 }
45 options.version = [options.version, ...prerelease].join('-');
46 }
47
48 /* Check build flavor and slice that off the `version`. */
49 if (options.version.endsWith('-sdk')) {
50 options.version = options.version.slice(0, -4);
51 options.flavor = 'sdk';
52 } else if (options.version.endsWith('sdk')) {
53 options.version = version.slice(0, -3);
54 options.flavor = 'sdk';
55 }
56
57 options.platform = options.platform || util.PLATFORM_KV[process.env.npm_config_nwjs_platform || process.env.NWJS_PLATFORM || process.platform];
58 options.arch = options.arch || util.ARCH_KV[process.env.npm_config_nwjs_process_arch || process.env.NWJS_ARCH || process.arch];
59 options.downloadUrl = options.downloadUrl || process.env.npm_config_nwjs_urlbase || process.env.NWJS_URLBASE || 'https://dl.nwjs.io';
60 options.cacheDir = options.npm_config_nwjs_urlbase || process.env.npm_config_nwjs_cache_dir || process.env.NWJS_CACHE_DIR || path.resolve('.', 'node_modules', 'nw');
61 options.cache = options.cache || process.env.npm_config_nwjs_cache || process.env.NWJS_CACHE || true;
62 options.ffmpeg = options.ffmpeg || process.env.npm_config_nwjs_ffmpeg || process.env.NWJS_FFMPEG || false;
63 options.nativeAddon = options.nativeAddon || process.env.npm_config_nwjs_native_addon || process.env.NWJS_NATIVE_ADDON || false;
64
65 return { ...options };
66}