@now/build-utils
Version:
96 lines (95 loc) • 4.14 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getSupportedNodeVersion = exports.getDiscontinuedNodeVersions = exports.getLatestNodeVersion = void 0;
const semver_1 = require("semver");
const boxen_1 = __importDefault(require("boxen"));
const errors_1 = require("../errors");
const debug_1 = __importDefault(require("../debug"));
const allOptions = [
{ major: 12, range: '12.x', runtime: 'nodejs12.x' },
{ major: 10, range: '10.x', runtime: 'nodejs10.x' },
{
major: 8,
range: '8.10.x',
runtime: 'nodejs8.10',
discontinueDate: new Date('2020-01-06'),
},
];
const pleaseSet = 'Please set "engines": { "node": "' +
getLatestNodeVersion().range +
'" } in your `package.json` file to upgrade to Node.js ' +
getLatestNodeVersion().major +
'.';
const upstreamProvider = 'This change is the result of a decision made by an upstream infrastructure provider (AWS).' +
'\nRead more: https://docs.aws.amazon.com/lambda/latest/dg/runtime-support-policy.html';
function getLatestNodeVersion() {
return allOptions[0];
}
exports.getLatestNodeVersion = getLatestNodeVersion;
function getDiscontinuedNodeVersions() {
return allOptions.filter(isDiscontinued);
}
exports.getDiscontinuedNodeVersions = getDiscontinuedNodeVersions;
async function getSupportedNodeVersion(engineRange, isAuto) {
let selection = getLatestNodeVersion();
if (engineRange) {
const found = semver_1.validRange(engineRange) &&
allOptions.some(o => {
// the array is already in order so return the first
// match which will be the newest version of node
selection = o;
return semver_1.intersects(o.range, engineRange);
});
if (!found) {
const intro = isAuto || !engineRange
? 'This project is using an invalid version of Node.js and must be changed.'
: 'Found `engines` in `package.json` with an invalid Node.js version range: "' +
engineRange +
'".';
throw new errors_1.NowBuildError({
code: 'BUILD_UTILS_NODE_VERSION_INVALID',
link: 'https://vercel.com/docs/runtimes#official-runtimes/node-js/node-js-version',
message: intro + '\n' + pleaseSet,
});
}
}
if (isDiscontinued(selection)) {
const intro = isAuto || !engineRange
? 'This project is using a discontinued version of Node.js (' +
selection.range +
') and must be upgraded.'
: 'Found `engines` in `package.json` with a discontinued Node.js version range: "' +
engineRange +
'".';
throw new errors_1.NowBuildError({
code: 'BUILD_UTILS_NODE_VERSION_DISCONTINUED',
link: 'https://vercel.com/docs/runtimes#official-runtimes/node-js/node-js-version',
message: intro + '\n' + pleaseSet + '\n' + upstreamProvider,
});
}
debug_1.default(isAuto || !engineRange
? 'Using default Node.js range: "' + selection.range + '".'
: 'Found `engines` in `package.json`, selecting range: "' +
selection.range +
'".');
if (selection.discontinueDate) {
const d = selection.discontinueDate.toISOString().split('T')[0];
console.warn(boxen_1.default('NOTICE' +
'\n' +
`\nNode.js version ${selection.range} has reached end-of-life.` +
`\nAs a result, deployments created on or after ${d} will fail to build.` +
'\n' +
pleaseSet +
'\n' +
upstreamProvider, { padding: 1 }));
}
return selection;
}
exports.getSupportedNodeVersion = getSupportedNodeVersion;
function isDiscontinued({ discontinueDate }) {
const today = Date.now();
return discontinueDate !== undefined && discontinueDate.getTime() <= today;
}
;