UNPKG

3.88 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.shouldUpdateLockfile = undefined;
7
8var _semver;
9
10function _load_semver() {
11 return _semver = _interopRequireDefault(require('semver'));
12}
13
14var _minimatch;
15
16function _load_minimatch() {
17 return _minimatch = _interopRequireDefault(require('minimatch'));
18}
19
20var _map;
21
22function _load_map() {
23 return _map = _interopRequireDefault(require('./util/map'));
24}
25
26var _normalizePattern2;
27
28function _load_normalizePattern() {
29 return _normalizePattern2 = require('./util/normalize-pattern.js');
30}
31
32var _parsePackagePath;
33
34function _load_parsePackagePath() {
35 return _parsePackagePath = _interopRequireDefault(require('./util/parse-package-path'));
36}
37
38var _parsePackagePath2;
39
40function _load_parsePackagePath2() {
41 return _parsePackagePath2 = require('./util/parse-package-path');
42}
43
44var _resolvers;
45
46function _load_resolvers() {
47 return _resolvers = require('./resolvers');
48}
49
50function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
51
52const DIRECTORY_SEPARATOR = '/';
53const GLOBAL_NESTED_DEP_PATTERN = '**/';
54
55class ResolutionMap {
56 constructor(config) {
57 this.resolutionsByPackage = (0, (_map || _load_map()).default)();
58 this.config = config;
59 this.reporter = config.reporter;
60 this.delayQueue = new Set();
61 }
62
63 init(resolutions = {}) {
64 for (const globPattern in resolutions) {
65 const info = this.parsePatternInfo(globPattern, resolutions[globPattern]);
66
67 if (info) {
68 const resolution = this.resolutionsByPackage[info.name] || [];
69 this.resolutionsByPackage[info.name] = [...resolution, info];
70 }
71 }
72 }
73
74 addToDelayQueue(req) {
75 this.delayQueue.add(req);
76 }
77
78 parsePatternInfo(globPattern, range) {
79 if (!(0, (_parsePackagePath2 || _load_parsePackagePath2()).isValidPackagePath)(globPattern)) {
80 this.reporter.warn(this.reporter.lang('invalidResolutionName', globPattern));
81 return null;
82 }
83
84 const directories = (0, (_parsePackagePath || _load_parsePackagePath()).default)(globPattern);
85 const name = directories.pop();
86
87 if (!(_semver || _load_semver()).default.validRange(range) && !(0, (_resolvers || _load_resolvers()).getExoticResolver)(range)) {
88 this.reporter.warn(this.reporter.lang('invalidResolutionVersion', range));
89 return null;
90 }
91
92 // For legacy support of resolutions, replace `name` with `**/name`
93 if (name === globPattern) {
94 globPattern = `${GLOBAL_NESTED_DEP_PATTERN}${name}`;
95 }
96
97 return {
98 name,
99 range,
100 globPattern,
101 pattern: `${name}@${range}`
102 };
103 }
104
105 find(reqPattern, parentNames) {
106 var _normalizePattern = (0, (_normalizePattern2 || _load_normalizePattern()).normalizePattern)(reqPattern);
107
108 const name = _normalizePattern.name,
109 reqRange = _normalizePattern.range;
110
111 const resolutions = this.resolutionsByPackage[name];
112
113 if (!resolutions) {
114 return '';
115 }
116
117 const modulePath = [...parentNames, name].join(DIRECTORY_SEPARATOR);
118
119 var _ref = resolutions.find(({ globPattern }) => (0, (_minimatch || _load_minimatch()).default)(modulePath, globPattern)) || {};
120
121 const pattern = _ref.pattern,
122 range = _ref.range;
123
124
125 if (pattern) {
126 if ((_semver || _load_semver()).default.validRange(reqRange) && (_semver || _load_semver()).default.valid(range) && !(_semver || _load_semver()).default.satisfies(range, reqRange)) {
127 this.reporter.warn(this.reporter.lang('incompatibleResolutionVersion', pattern, reqPattern));
128 }
129 }
130
131 return pattern;
132 }
133}
134
135exports.default = ResolutionMap;
136const shouldUpdateLockfile = exports.shouldUpdateLockfile = (lockfileEntry, resolutionEntry) => {
137 if (!lockfileEntry || !resolutionEntry) {
138 return false;
139 }
140
141 return lockfileEntry.resolved !== resolutionEntry.remote.resolved;
142};
\No newline at end of file