|
| 1 | + |
| 2 | +var fs = require('fs'); |
| 3 | +var semver = require('semver'); |
| 4 | +var execSync = require('child_process').execSync; |
| 5 | +var which = require('./which.js'); |
| 6 | + |
| 7 | +// Node.js type stripping availability: |
| 8 | +// enabled by default since 22.18.0 (22.x line) and 23.6.0, |
| 9 | +// behind --experimental-strip-types since 22.6.0. |
| 10 | +var NATIVE_RANGE = '>=22.18.0 <23.0.0 || >=23.6.0'; |
| 11 | +var FLAG_RANGE = '>=22.6.0'; |
| 12 | + |
| 13 | +var resolved_node_version = null; |
| 14 | + |
| 15 | +/** |
| 16 | + * Type stripping support of a given node version. |
| 17 | + * Returns 'native' (runs .ts without flags), 'flag' |
| 18 | + * (needs --experimental-strip-types) or false. |
| 19 | + */ |
| 20 | +function supportLevel(version) { |
| 21 | + if (semver.satisfies(version, NATIVE_RANGE)) |
| 22 | + return 'native'; |
| 23 | + if (semver.satisfies(version, FLAG_RANGE)) |
| 24 | + return 'flag'; |
| 25 | + return false; |
| 26 | +} |
| 27 | + |
| 28 | +/** |
| 29 | + * Version of the `node` binary fork mode will spawn (the one in PATH), |
| 30 | + * which can differ from the node running PM2. |
| 31 | + */ |
| 32 | +function resolvedNodeVersion() { |
| 33 | + if (resolved_node_version) |
| 34 | + return resolved_node_version; |
| 35 | + |
| 36 | + var node_path = which('node'); |
| 37 | + if (node_path == null) |
| 38 | + return resolved_node_version = process.versions.node; |
| 39 | + |
| 40 | + try { |
| 41 | + if (fs.realpathSync(node_path) === fs.realpathSync(process.execPath)) |
| 42 | + return resolved_node_version = process.versions.node; |
| 43 | + resolved_node_version = execSync(JSON.stringify(node_path) + ' --version', { |
| 44 | + encoding: 'utf8' |
| 45 | + }).trim().replace(/^v/, ''); |
| 46 | + } catch(e) { |
| 47 | + resolved_node_version = process.versions.node; |
| 48 | + } |
| 49 | + return resolved_node_version; |
| 50 | +} |
| 51 | + |
| 52 | +module.exports = { |
| 53 | + supportLevel: supportLevel, |
| 54 | + resolvedNodeVersion: resolvedNodeVersion |
| 55 | +}; |
0 commit comments