UNPKG

2.77 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.makeConfigAPI = makeConfigAPI;
7exports.makePluginAPI = makePluginAPI;
8exports.makePresetAPI = makePresetAPI;
9
10function _semver() {
11 const data = require("semver");
12
13 _semver = function () {
14 return data;
15 };
16
17 return data;
18}
19
20var _ = require("../../");
21
22var _caching = require("../caching");
23
24var Context = require("../cache-contexts");
25
26function makeConfigAPI(cache) {
27 const env = value => cache.using(data => {
28 if (typeof value === "undefined") return data.envName;
29
30 if (typeof value === "function") {
31 return (0, _caching.assertSimpleType)(value(data.envName));
32 }
33
34 if (!Array.isArray(value)) value = [value];
35 return value.some(entry => {
36 if (typeof entry !== "string") {
37 throw new Error("Unexpected non-string value");
38 }
39
40 return entry === data.envName;
41 });
42 });
43
44 const caller = cb => cache.using(data => (0, _caching.assertSimpleType)(cb(data.caller)));
45
46 return {
47 version: _.version,
48 cache: cache.simple(),
49 env,
50 async: () => false,
51 caller,
52 assertVersion
53 };
54}
55
56function makePresetAPI(cache, externalDependencies) {
57 const targets = () => JSON.parse(cache.using(data => JSON.stringify(data.targets)));
58
59 const addExternalDependency = ref => {
60 externalDependencies.push(ref);
61 };
62
63 return Object.assign({}, makeConfigAPI(cache), {
64 targets,
65 addExternalDependency
66 });
67}
68
69function makePluginAPI(cache, externalDependencies) {
70 const assumption = name => cache.using(data => data.assumptions[name]);
71
72 return Object.assign({}, makePresetAPI(cache, externalDependencies), {
73 assumption
74 });
75}
76
77function assertVersion(range) {
78 if (typeof range === "number") {
79 if (!Number.isInteger(range)) {
80 throw new Error("Expected string or integer value.");
81 }
82
83 range = `^${range}.0.0-0`;
84 }
85
86 if (typeof range !== "string") {
87 throw new Error("Expected string or integer value.");
88 }
89
90 if (_semver().satisfies(_.version, range)) return;
91 const limit = Error.stackTraceLimit;
92
93 if (typeof limit === "number" && limit < 25) {
94 Error.stackTraceLimit = 25;
95 }
96
97 const err = new Error(`Requires Babel "${range}", but was loaded with "${_.version}". ` + `If you are sure you have a compatible version of @babel/core, ` + `it is likely that something in your build process is loading the ` + `wrong version. Inspect the stack trace of this error to look for ` + `the first entry that doesn't mention "@babel/core" or "babel-core" ` + `to see what is calling Babel.`);
98
99 if (typeof limit === "number") {
100 Error.stackTraceLimit = limit;
101 }
102
103 throw Object.assign(err, {
104 code: "BABEL_VERSION_UNSUPPORTED",
105 version: _.version,
106 range
107 });
108}
\No newline at end of file