UNPKG

2.14 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.isPluginRequired = isPluginRequired;
7exports.default = _default;
8
9var _semver = _interopRequireDefault(require("semver"));
10
11var _utils = require("./utils");
12
13function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
15function isPluginRequired(supportedEnvironments, plugin) {
16 const targetEnvironments = Object.keys(supportedEnvironments);
17
18 if (targetEnvironments.length === 0) {
19 return true;
20 }
21
22 const isRequiredForEnvironments = targetEnvironments.filter(environment => {
23 if (!plugin[environment]) {
24 return true;
25 }
26
27 const lowestImplementedVersion = plugin[environment];
28 const lowestTargetedVersion = supportedEnvironments[environment];
29
30 if ((0, _utils.isUnreleasedVersion)(lowestTargetedVersion, environment)) {
31 return false;
32 }
33
34 if ((0, _utils.isUnreleasedVersion)(lowestImplementedVersion, environment)) {
35 return true;
36 }
37
38 if (!_semver.default.valid(lowestTargetedVersion.toString())) {
39 throw new Error(`Invalid version passed for target "${environment}": "${lowestTargetedVersion}". ` + "Versions must be in semver format (major.minor.patch)");
40 }
41
42 return _semver.default.gt((0, _utils.semverify)(lowestImplementedVersion), lowestTargetedVersion.toString());
43 });
44 return isRequiredForEnvironments.length > 0;
45}
46
47function _default(list, includes, excludes, targets, defaultIncludes, defaultExcludes, pluginSyntaxMap) {
48 const result = new Set();
49
50 for (const item in list) {
51 if (!excludes.has(item) && (isPluginRequired(targets, list[item]) || includes.has(item))) {
52 result.add(item);
53 } else if (pluginSyntaxMap) {
54 const shippedProposalsSyntax = pluginSyntaxMap.get(item);
55
56 if (shippedProposalsSyntax) {
57 result.add(shippedProposalsSyntax);
58 }
59 }
60 }
61
62 if (defaultIncludes) {
63 defaultIncludes.forEach(item => !excludes.has(item) && result.add(item));
64 }
65
66 if (defaultExcludes) {
67 defaultExcludes.forEach(item => !includes.has(item) && result.delete(item));
68 }
69
70 return result;
71}
\No newline at end of file