Move deprecated-packages functions into PackageManager

This commit is contained in:
Max Brunsfeld
2018-08-24 14:21:48 -07:00
parent 231cc58e00
commit 7111c80555
3 changed files with 26 additions and 46 deletions

View File

@@ -1,43 +0,0 @@
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

View File

@@ -335,3 +335,5 @@ exports.add = function (directoryPath, metadata) {
}
exports.cache = cache
exports.Range = Range

View File

@@ -9,7 +9,7 @@ const CSON = require('season')
const ServiceHub = require('service-hub')
const Package = require('./package')
const ThemePackage = require('./theme-package')
const {isDeprecatedPackage, getDeprecatedPackageMetadata} = require('./deprecated-packages')
const ModuleCache = require('./module-cache')
const packageJSON = require('../package.json')
// Extended: Package manager for coordinating the lifecycle of Atom packages.
@@ -42,6 +42,8 @@ module.exports = class PackageManager {
this.triggeredActivationHooks = new Set()
this.packagesCache = packageJSON._atomPackages != null ? packageJSON._atomPackages : {}
this.packageDependencies = packageJSON.packageDependencies != null ? packageJSON.packageDependencies : {}
this.deprecatedPackages = packageJSON._deprecatedPackages || {}
this.deprecatedPackageRanges = {}
this.initialPackagesLoaded = false
this.initialPackagesActivated = false
this.preloadedPackages = {}
@@ -220,11 +222,26 @@ module.exports = class PackageManager {
}
isDeprecatedPackage (name, version) {
return isDeprecatedPackage(name, version)
const metadata = this.deprecatedPackages[name]
if (!metadata) return false
if (!metadata.version) return true
let range = this.deprecatedPackageRanges[metadata.version]
if (!range) {
try {
range = new ModuleCache.Range(metadata.version)
} catch (error) {
range = NullVersionRange
}
this.deprecatedPackageRanges[metadata.version] = range
}
return range.test(version)
}
getDeprecatedPackageMetadata (name) {
return getDeprecatedPackageMetadata(name)
const metadata = this.deprecatedPackages[name]
if (metadata) Object.freeze(metadata)
return metadata
}
/*
@@ -871,3 +888,7 @@ module.exports = class PackageManager {
}
}
}
const NullVersionRange = {
test () { return false }
}