UNPKG

7.11 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = void 0;
7
8var _helperPluginUtils = require("@babel/helper-plugin-utils");
9
10var _helperModuleImports = require("@babel/helper-module-imports");
11
12var _core = require("@babel/core");
13
14var _helpers = require("./helpers");
15
16var _getRuntimePath = _interopRequireDefault(require("./get-runtime-path"));
17
18var _babelPluginPolyfillCorejs = _interopRequireDefault(require("babel-plugin-polyfill-corejs2"));
19
20var _babelPluginPolyfillCorejs2 = _interopRequireDefault(require("babel-plugin-polyfill-corejs3"));
21
22var _babelPluginPolyfillRegenerator = _interopRequireDefault(require("babel-plugin-polyfill-regenerator"));
23
24function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
26const pluginsCompat = "#__secret_key__@babel/runtime__compatibility";
27
28function supportsStaticESM(caller) {
29 return !!(caller != null && caller.supportsStaticESM);
30}
31
32var _default = (0, _helperPluginUtils.declare)((api, options, dirname) => {
33 api.assertVersion(7);
34 const {
35 corejs,
36 helpers: useRuntimeHelpers = true,
37 regenerator: useRuntimeRegenerator = true,
38 useESModules = false,
39 version: runtimeVersion = "7.0.0-beta.0",
40 absoluteRuntime = false
41 } = options;
42 let proposals = false;
43 let rawVersion;
44
45 if (typeof corejs === "object" && corejs !== null) {
46 rawVersion = corejs.version;
47 proposals = Boolean(corejs.proposals);
48 } else {
49 rawVersion = corejs;
50 }
51
52 const corejsVersion = rawVersion ? Number(rawVersion) : false;
53
54 if (![false, 2, 3].includes(corejsVersion)) {
55 throw new Error(`The \`core-js\` version must be false, 2 or 3, but got ${JSON.stringify(rawVersion)}.`);
56 }
57
58 if (proposals && (!corejsVersion || corejsVersion < 3)) {
59 throw new Error("The 'proposals' option is only supported when using 'corejs: 3'");
60 }
61
62 if (typeof useRuntimeRegenerator !== "boolean") {
63 throw new Error("The 'regenerator' option must be undefined, or a boolean.");
64 }
65
66 if (typeof useRuntimeHelpers !== "boolean") {
67 throw new Error("The 'helpers' option must be undefined, or a boolean.");
68 }
69
70 if (typeof useESModules !== "boolean" && useESModules !== "auto") {
71 throw new Error("The 'useESModules' option must be undefined, or a boolean, or 'auto'.");
72 }
73
74 if (typeof absoluteRuntime !== "boolean" && typeof absoluteRuntime !== "string") {
75 throw new Error("The 'absoluteRuntime' option must be undefined, a boolean, or a string.");
76 }
77
78 if (typeof runtimeVersion !== "string") {
79 throw new Error(`The 'version' option must be a version string.`);
80 }
81
82 const DUAL_MODE_RUNTIME = "7.13.0";
83 const supportsCJSDefault = (0, _helpers.hasMinVersion)(DUAL_MODE_RUNTIME, runtimeVersion);
84
85 function has(obj, key) {
86 return Object.prototype.hasOwnProperty.call(obj, key);
87 }
88
89 if (has(options, "useBuiltIns")) {
90 if (options.useBuiltIns) {
91 throw new Error("The 'useBuiltIns' option has been removed. The @babel/runtime " + "module now uses builtins by default.");
92 } else {
93 throw new Error("The 'useBuiltIns' option has been removed. Use the 'corejs'" + "option to polyfill with `core-js` via @babel/runtime.");
94 }
95 }
96
97 if (has(options, "polyfill")) {
98 if (options.polyfill === false) {
99 throw new Error("The 'polyfill' option has been removed. The @babel/runtime " + "module now skips polyfilling by default.");
100 } else {
101 throw new Error("The 'polyfill' option has been removed. Use the 'corejs'" + "option to polyfill with `core-js` via @babel/runtime.");
102 }
103 }
104
105 if (has(options, "moduleName")) {
106 throw new Error("The 'moduleName' option has been removed. @babel/transform-runtime " + "no longer supports arbitrary runtimes. If you were using this to " + "set an absolute path for Babel's standard runtimes, please use the " + "'absoluteRuntime' option.");
107 }
108
109 const esModules = useESModules === "auto" ? api.caller(supportsStaticESM) : useESModules;
110 const injectCoreJS2 = corejsVersion === 2;
111 const injectCoreJS3 = corejsVersion === 3;
112 const moduleName = injectCoreJS3 ? "@babel/runtime-corejs3" : injectCoreJS2 ? "@babel/runtime-corejs2" : "@babel/runtime";
113 const HEADER_HELPERS = ["interopRequireWildcard", "interopRequireDefault"];
114 const modulePath = (0, _getRuntimePath.default)(moduleName, dirname, absoluteRuntime);
115
116 function createCorejsPlgin(plugin, options, regeneratorPlugin) {
117 return (api, _, filename) => {
118 return Object.assign({}, plugin(api, options, filename), {
119 inherits: regeneratorPlugin
120 });
121 };
122 }
123
124 function createRegeneratorPlugin(options) {
125 if (!useRuntimeRegenerator) return undefined;
126 return (api, _, filename) => {
127 return (0, _babelPluginPolyfillRegenerator.default)(api, options, filename);
128 };
129 }
130
131 const corejsExt = absoluteRuntime ? ".js" : "";
132 return {
133 name: "transform-runtime",
134 inherits: injectCoreJS2 ? createCorejsPlgin(_babelPluginPolyfillCorejs.default, {
135 method: "usage-pure",
136 [pluginsCompat]: {
137 runtimeVersion,
138 useBabelRuntime: modulePath,
139 ext: corejsExt
140 }
141 }, createRegeneratorPlugin({
142 method: "usage-pure",
143 [pluginsCompat]: {
144 useBabelRuntime: modulePath
145 }
146 })) : injectCoreJS3 ? createCorejsPlgin(_babelPluginPolyfillCorejs2.default, {
147 method: "usage-pure",
148 version: 3,
149 proposals,
150 [pluginsCompat]: {
151 useBabelRuntime: modulePath,
152 ext: corejsExt
153 }
154 }, createRegeneratorPlugin({
155 method: "usage-pure",
156 [pluginsCompat]: {
157 useBabelRuntime: modulePath
158 }
159 })) : createRegeneratorPlugin({
160 method: "usage-pure",
161 [pluginsCompat]: {
162 useBabelRuntime: modulePath
163 }
164 }),
165
166 pre(file) {
167 if (!useRuntimeHelpers) return;
168 file.set("helperGenerator", name => {
169 if (file.availableHelper && !file.availableHelper(name, runtimeVersion)) {
170 return;
171 }
172
173 const isInteropHelper = HEADER_HELPERS.indexOf(name) !== -1;
174 const blockHoist = isInteropHelper && !(0, _helperModuleImports.isModule)(file.path) ? 4 : undefined;
175 const helpersDir = esModules && file.path.node.sourceType === "module" ? "helpers/esm" : "helpers";
176 return addDefaultImport(`${modulePath}/${helpersDir}/${name}`, name, blockHoist, true);
177 });
178 const cache = new Map();
179
180 function addDefaultImport(source, nameHint, blockHoist, isHelper = false) {
181 const cacheKey = (0, _helperModuleImports.isModule)(file.path);
182 const key = `${source}:${nameHint}:${cacheKey || ""}`;
183 let cached = cache.get(key);
184
185 if (cached) {
186 cached = _core.types.cloneNode(cached);
187 } else {
188 cached = (0, _helperModuleImports.addDefault)(file.path, source, {
189 importedInterop: isHelper && supportsCJSDefault ? "compiled" : "uncompiled",
190 nameHint,
191 blockHoist
192 });
193 cache.set(key, cached);
194 }
195
196 return cached;
197 }
198 }
199
200 };
201});
202
203exports.default = _default;
\No newline at end of file