UNPKG

node-semvers

Version:

Utilities for managing versions of node including looking up codenames

125 lines 5.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "default", { enumerable: true, get: function() { return NodeVersions; } }); var _fetchjsoncache = /*#__PURE__*/ _interop_require_default(require("fetch-json-cache")); var _semver = /*#__PURE__*/ _interop_require_default(require("semver")); var _constantsts = require("./constants.js"); var _keyFunctionsts = require("./lib/keyFunctions.js"); var _lineFunctionsts = require("./lib/lineFunctions.js"); var _matchts = /*#__PURE__*/ _interop_require_default(require("./lib/match.js")); var _normalizeSchedulets = /*#__PURE__*/ _interop_require_default(require("./lib/normalizeSchedule.js")); var _normalizeVersionts = /*#__PURE__*/ _interop_require_default(require("./lib/normalizeVersion.js")); var _indexts = /*#__PURE__*/ _interop_require_default(require("./parseExpression/index.js")); function _class_call_check(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var NodeVersions = /*#__PURE__*/ function() { "use strict"; function NodeVersions(versions, schedule) { _class_call_check(this, NodeVersions); if (!versions) throw new Error('Missing option: versions'); if (!schedule) throw new Error('Missing option: schedule'); this.schedules = []; for(var name in schedule)this.schedules.push((0, _normalizeSchedulets.default)(name, schedule[name])); this.schedules = this.schedules.sort(function(a, b) { return _semver.default.gt(_semver.default.coerce(a.semver), _semver.default.coerce(b.semver)) ? 1 : -1; }); this.versions = []; for(var index = 0; index < versions.length; index++)this.versions.push((0, _normalizeVersionts.default)(versions[index], this.schedules)); this.versions = this.versions.sort(function(a, b) { return _semver.default.gt(a.semver, b.semver) ? -1 : 1; }); } var _proto = NodeVersions.prototype; _proto.resolve = function resolve(expression, options) { options = options || {}; var path = options.path || 'version'; // normalize if (typeof expression === 'number') expression = "".concat(expression); if (typeof expression !== 'string') return null; expression = expression.trim(); // single result, try a match var query = _indexts.default.call(this, expression, options.now || new Date()); if (query) { var version = null; for(var index = 0; index < this.versions.length; index++){ var test = this.versions[index]; if (options.now && options.now < test.date) continue; if (!(0, _matchts.default)(test, query)) continue; version = test; break; } if (version) return version[path]; } // filtered expression var range = options.range || ''; var filters = { lts: !!~range.indexOf('lts'), key: undefined, line: undefined }; filters.key = ~range.indexOf('major') ? _keyFunctionsts.major : ~range.indexOf('minor') ? _keyFunctionsts.minor : undefined; filters.line = ~range.indexOf('even') ? _lineFunctionsts.even : ~range.indexOf('odd') ? _lineFunctionsts.odd : undefined; var results = []; var founds = {}; for(var index1 = 0; index1 < this.versions.length; index1++){ var test1 = this.versions[index1]; if (options.now && options.now < test1.date) continue; if (filters.lts && !test1.lts) continue; if (filters.line && !filters.line(test1)) continue; if (!_semver.default.satisfies(test1.semver, expression)) continue; if (filters.key) { if (founds[filters.key(test1)]) continue; founds[filters.key(test1)] = true; } results.unshift(test1[path]); } return results; }; NodeVersions.load = function load(options, callback) { if (typeof options === 'function') { callback = options; options = null; } options = options || {}; function worker(options, callback) { var cache = new _fetchjsoncache.default(options.cachePath || _constantsts.CACHE_PATH); cache.get(_constantsts.DISTS_URL, function(err, versions) { if (err) return callback(err); cache.get(_constantsts.SCHEDULES_URL, function(err, schedule) { err ? callback(err) : callback(null, new NodeVersions(versions, schedule)); }); }); } if (typeof callback === 'function') return worker(options, callback); return new Promise(function(resolve, reject) { return worker(options, function(err, versions) { return err ? reject(err) : resolve(versions); }); }); }; NodeVersions.loadSync = function loadSync(options) { options = options || {}; var cache = new _fetchjsoncache.default(options.cachePath || _constantsts.CACHE_PATH); var versions = cache.getSync(_constantsts.DISTS_URL); var schedule = cache.getSync(_constantsts.SCHEDULES_URL); if (!versions || !schedule) return null; return new NodeVersions(versions, schedule); }; return NodeVersions; }(); /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }