You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							62 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
	
	
							62 lines
						
					
					
						
							1.8 KiB
						
					
					
				'use strict';
 | 
						|
// eslint-disable-next-line es/no-object-hasown -- safe
 | 
						|
const has = Object.hasOwn || Function.call.bind({}.hasOwnProperty);
 | 
						|
 | 
						|
function semver(input) {
 | 
						|
  if (input instanceof semver) return input;
 | 
						|
  // eslint-disable-next-line new-cap -- ok
 | 
						|
  if (!(this instanceof semver)) return new semver(input);
 | 
						|
  const match = /(\d+)(?:\.(\d+))?(?:\.(\d+))?/.exec(input);
 | 
						|
  if (!match) throw TypeError(`Invalid version: ${ input }`);
 | 
						|
  const [, $major, $minor, $patch] = match;
 | 
						|
  this.major = +$major;
 | 
						|
  this.minor = $minor ? +$minor : 0;
 | 
						|
  this.patch = $patch ? +$patch : 0;
 | 
						|
}
 | 
						|
 | 
						|
semver.prototype.toString = function () {
 | 
						|
  return `${ this.major }.${ this.minor }.${ this.patch }`;
 | 
						|
};
 | 
						|
 | 
						|
function compare($a, operator, $b) {
 | 
						|
  const a = semver($a);
 | 
						|
  const b = semver($b);
 | 
						|
  for (const component of ['major', 'minor', 'patch']) {
 | 
						|
    if (a[component] < b[component]) return operator === '<' || operator === '<=' || operator === '!=';
 | 
						|
    if (a[component] > b[component]) return operator === '>' || operator === '>=' || operator === '!=';
 | 
						|
  } return operator === '==' || operator === '<=' || operator === '>=';
 | 
						|
}
 | 
						|
 | 
						|
function filterOutStabilizedProposals(modules) {
 | 
						|
  const modulesSet = new Set(modules);
 | 
						|
 | 
						|
  for (const $module of modulesSet) {
 | 
						|
    if ($module.startsWith('esnext.') && modulesSet.has($module.replace(/^esnext\./, 'es.'))) {
 | 
						|
      modulesSet.delete($module);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  return [...modulesSet];
 | 
						|
}
 | 
						|
 | 
						|
function intersection(list, order) {
 | 
						|
  const set = list instanceof Set ? list : new Set(list);
 | 
						|
  return order.filter(name => set.has(name));
 | 
						|
}
 | 
						|
 | 
						|
function sortObjectByKey(object, fn) {
 | 
						|
  return Object.keys(object).sort(fn).reduce((memo, key) => {
 | 
						|
    memo[key] = object[key];
 | 
						|
    return memo;
 | 
						|
  }, {});
 | 
						|
}
 | 
						|
 | 
						|
module.exports = {
 | 
						|
  compare,
 | 
						|
  filterOutStabilizedProposals,
 | 
						|
  has,
 | 
						|
  intersection,
 | 
						|
  semver,
 | 
						|
  sortObjectByKey,
 | 
						|
};
 |