mirror of
https://github.com/atom/atom.git
synced 2026-02-08 21:55:05 -05:00
44 lines
1.2 KiB
CoffeeScript
44 lines
1.2 KiB
CoffeeScript
semver = require 'semver'
|
|
|
|
deprecatedPackages = require('../package.json')?._deprecatedPackages ? {}
|
|
ranges = {}
|
|
|
|
exports.getDeprecatedPackageMetadata = (name) ->
|
|
metadata = null
|
|
if deprecatedPackages.hasOwnProperty(name)
|
|
metadata = deprecatedPackages[name]
|
|
Object.freeze(metadata) if metadata
|
|
metadata
|
|
|
|
exports.isDeprecatedPackage = (name, version) ->
|
|
return false unless deprecatedPackages.hasOwnProperty(name)
|
|
|
|
deprecatedVersionRange = deprecatedPackages[name].version
|
|
return true unless deprecatedVersionRange
|
|
|
|
semver.valid(version) and satisfies(version, deprecatedVersionRange)
|
|
|
|
satisfies = (version, rawRange) ->
|
|
unless parsedRange = ranges[rawRange]
|
|
parsedRange = new Range(rawRange)
|
|
ranges[rawRange] = parsedRange
|
|
parsedRange.test(version)
|
|
|
|
# Extend semver.Range to memoize matched versions for speed
|
|
class Range extends semver.Range
|
|
constructor: ->
|
|
super
|
|
@matchedVersions = new Set()
|
|
@unmatchedVersions = new Set()
|
|
|
|
test: (version) ->
|
|
return true if @matchedVersions.has(version)
|
|
return false if @unmatchedVersions.has(version)
|
|
|
|
matches = super
|
|
if matches
|
|
@matchedVersions.add(version)
|
|
else
|
|
@unmatchedVersions.add(version)
|
|
matches
|