UNPKG

@now/build-utils

Version:
96 lines (95 loc) 4.14 kB
"use strict"; 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; }