Add static Math methods to plugin-transform-runtime (#8616)
* Add static Math methods to plugin-transform-runtime * Remove methods which are not part of TC39 standard * Use semver to conditionally include Math module
This commit is contained in:
committed by
Logan Smyth
parent
4beb977f15
commit
262787bd92
@@ -8,7 +8,8 @@ const template = require("@babel/template");
|
||||
const t = require("@babel/types");
|
||||
|
||||
const transformRuntime = require("../");
|
||||
const corejs2Definitions = require("../lib/definitions").default;
|
||||
const getCorejs2Definitions = require("../lib/definitions").default;
|
||||
const corejs2Definitions = getCorejs2Definitions();
|
||||
|
||||
writeHelpers("@babel/runtime");
|
||||
|
||||
|
||||
@@ -1,104 +1,141 @@
|
||||
export default {
|
||||
builtins: {
|
||||
Symbol: "symbol",
|
||||
Promise: "promise",
|
||||
Map: "map",
|
||||
WeakMap: "weak-map",
|
||||
Set: "set",
|
||||
WeakSet: "weak-set",
|
||||
setImmediate: "set-immediate",
|
||||
clearImmediate: "clear-immediate",
|
||||
parseFloat: "parse-float",
|
||||
parseInt: "parse-int",
|
||||
},
|
||||
import semver from "semver";
|
||||
|
||||
methods: {
|
||||
Array: {
|
||||
from: "array/from",
|
||||
isArray: "array/is-array",
|
||||
of: "array/of",
|
||||
export default runtimeVersion => {
|
||||
let includeMathModule = true;
|
||||
if (runtimeVersion) {
|
||||
// reason for conditionally including this module:
|
||||
// https://github.com/babel/babel/pull/8616#issuecomment-418154753
|
||||
includeMathModule =
|
||||
!semver.intersects(`<=7.0.0`, runtimeVersion) &&
|
||||
!semver.intersects(`>=8.0.0`, runtimeVersion);
|
||||
}
|
||||
|
||||
return {
|
||||
builtins: {
|
||||
Symbol: "symbol",
|
||||
Promise: "promise",
|
||||
Map: "map",
|
||||
WeakMap: "weak-map",
|
||||
Set: "set",
|
||||
WeakSet: "weak-set",
|
||||
setImmediate: "set-immediate",
|
||||
clearImmediate: "clear-immediate",
|
||||
parseFloat: "parse-float",
|
||||
parseInt: "parse-int",
|
||||
},
|
||||
|
||||
JSON: {
|
||||
stringify: "json/stringify",
|
||||
},
|
||||
methods: {
|
||||
Array: {
|
||||
from: "array/from",
|
||||
isArray: "array/is-array",
|
||||
of: "array/of",
|
||||
},
|
||||
|
||||
Object: {
|
||||
assign: "object/assign",
|
||||
create: "object/create",
|
||||
defineProperties: "object/define-properties",
|
||||
defineProperty: "object/define-property",
|
||||
entries: "object/entries",
|
||||
freeze: "object/freeze",
|
||||
getOwnPropertyDescriptor: "object/get-own-property-descriptor",
|
||||
getOwnPropertyDescriptors: "object/get-own-property-descriptors",
|
||||
getOwnPropertyNames: "object/get-own-property-names",
|
||||
getOwnPropertySymbols: "object/get-own-property-symbols",
|
||||
getPrototypeOf: "object/get-prototype-of",
|
||||
isExtensible: "object/is-extensible",
|
||||
isFrozen: "object/is-frozen",
|
||||
isSealed: "object/is-sealed",
|
||||
is: "object/is",
|
||||
keys: "object/keys",
|
||||
preventExtensions: "object/prevent-extensions",
|
||||
seal: "object/seal",
|
||||
setPrototypeOf: "object/set-prototype-of",
|
||||
values: "object/values",
|
||||
},
|
||||
JSON: {
|
||||
stringify: "json/stringify",
|
||||
},
|
||||
|
||||
Symbol: {
|
||||
asyncIterator: "symbol/async-iterator",
|
||||
for: "symbol/for",
|
||||
hasInstance: "symbol/has-instance",
|
||||
isConcatSpreadable: "symbol/is-concat-spreadable",
|
||||
iterator: "symbol/iterator",
|
||||
keyFor: "symbol/key-for",
|
||||
match: "symbol/match",
|
||||
replace: "symbol/replace",
|
||||
search: "symbol/search",
|
||||
species: "symbol/species",
|
||||
split: "symbol/split",
|
||||
toPrimitive: "symbol/to-primitive",
|
||||
toStringTag: "symbol/to-string-tag",
|
||||
unscopables: "symbol/unscopables",
|
||||
},
|
||||
Object: {
|
||||
assign: "object/assign",
|
||||
create: "object/create",
|
||||
defineProperties: "object/define-properties",
|
||||
defineProperty: "object/define-property",
|
||||
entries: "object/entries",
|
||||
freeze: "object/freeze",
|
||||
getOwnPropertyDescriptor: "object/get-own-property-descriptor",
|
||||
getOwnPropertyDescriptors: "object/get-own-property-descriptors",
|
||||
getOwnPropertyNames: "object/get-own-property-names",
|
||||
getOwnPropertySymbols: "object/get-own-property-symbols",
|
||||
getPrototypeOf: "object/get-prototype-of",
|
||||
isExtensible: "object/is-extensible",
|
||||
isFrozen: "object/is-frozen",
|
||||
isSealed: "object/is-sealed",
|
||||
is: "object/is",
|
||||
keys: "object/keys",
|
||||
preventExtensions: "object/prevent-extensions",
|
||||
seal: "object/seal",
|
||||
setPrototypeOf: "object/set-prototype-of",
|
||||
values: "object/values",
|
||||
},
|
||||
|
||||
String: {
|
||||
at: "string/at",
|
||||
fromCodePoint: "string/from-code-point",
|
||||
raw: "string/raw",
|
||||
},
|
||||
...(includeMathModule
|
||||
? {
|
||||
Math: {
|
||||
acosh: "math/acosh",
|
||||
asinh: "math/asinh",
|
||||
atanh: "math/atanh",
|
||||
cbrt: "math/cbrt",
|
||||
clz32: "math/clz32",
|
||||
cosh: "math/cosh",
|
||||
expm1: "math/expm1",
|
||||
fround: "math/fround",
|
||||
hypot: "math/hypot",
|
||||
imul: "math/imul",
|
||||
log10: "math/log10",
|
||||
log1p: "math/log1p",
|
||||
log2: "math/log2",
|
||||
sign: "math/sign",
|
||||
sinh: "math/sinh",
|
||||
tanh: "math/tanh",
|
||||
trunc: "math/trunc",
|
||||
},
|
||||
}
|
||||
: {}),
|
||||
|
||||
Number: {
|
||||
EPSILON: "number/epsilon",
|
||||
isFinite: "number/is-finite",
|
||||
isInteger: "number/is-integer",
|
||||
isNaN: "number/is-nan",
|
||||
isSafeInteger: "number/is-safe-integer",
|
||||
MAX_SAFE_INTEGER: "number/max-safe-integer",
|
||||
MIN_SAFE_INTEGER: "number/min-safe-integer",
|
||||
parseFloat: "number/parse-float",
|
||||
parseInt: "number/parse-int",
|
||||
},
|
||||
Symbol: {
|
||||
asyncIterator: "symbol/async-iterator",
|
||||
for: "symbol/for",
|
||||
hasInstance: "symbol/has-instance",
|
||||
isConcatSpreadable: "symbol/is-concat-spreadable",
|
||||
iterator: "symbol/iterator",
|
||||
keyFor: "symbol/key-for",
|
||||
match: "symbol/match",
|
||||
replace: "symbol/replace",
|
||||
search: "symbol/search",
|
||||
species: "symbol/species",
|
||||
split: "symbol/split",
|
||||
toPrimitive: "symbol/to-primitive",
|
||||
toStringTag: "symbol/to-string-tag",
|
||||
unscopables: "symbol/unscopables",
|
||||
},
|
||||
|
||||
Reflect: {
|
||||
apply: "reflect/apply",
|
||||
construct: "reflect/construct",
|
||||
defineProperty: "reflect/define-property",
|
||||
deleteProperty: "reflect/delete-property",
|
||||
getOwnPropertyDescriptor: "reflect/get-own-property-descriptor",
|
||||
getPrototypeOf: "reflect/get-prototype-of",
|
||||
get: "reflect/get",
|
||||
has: "reflect/has",
|
||||
isExtensible: "reflect/is-extensible",
|
||||
ownKeys: "reflect/own-keys",
|
||||
preventExtensions: "reflect/prevent-extensions",
|
||||
setPrototypeOf: "reflect/set-prototype-of",
|
||||
set: "reflect/set",
|
||||
},
|
||||
String: {
|
||||
at: "string/at",
|
||||
fromCodePoint: "string/from-code-point",
|
||||
raw: "string/raw",
|
||||
},
|
||||
|
||||
Date: {
|
||||
now: "date/now",
|
||||
Number: {
|
||||
EPSILON: "number/epsilon",
|
||||
isFinite: "number/is-finite",
|
||||
isInteger: "number/is-integer",
|
||||
isNaN: "number/is-nan",
|
||||
isSafeInteger: "number/is-safe-integer",
|
||||
MAX_SAFE_INTEGER: "number/max-safe-integer",
|
||||
MIN_SAFE_INTEGER: "number/min-safe-integer",
|
||||
parseFloat: "number/parse-float",
|
||||
parseInt: "number/parse-int",
|
||||
},
|
||||
|
||||
Reflect: {
|
||||
apply: "reflect/apply",
|
||||
construct: "reflect/construct",
|
||||
defineProperty: "reflect/define-property",
|
||||
deleteProperty: "reflect/delete-property",
|
||||
getOwnPropertyDescriptor: "reflect/get-own-property-descriptor",
|
||||
getPrototypeOf: "reflect/get-prototype-of",
|
||||
get: "reflect/get",
|
||||
has: "reflect/has",
|
||||
isExtensible: "reflect/is-extensible",
|
||||
ownKeys: "reflect/own-keys",
|
||||
preventExtensions: "reflect/prevent-extensions",
|
||||
setPrototypeOf: "reflect/set-prototype-of",
|
||||
set: "reflect/set",
|
||||
},
|
||||
|
||||
Date: {
|
||||
now: "date/now",
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
@@ -4,7 +4,7 @@ import { declare } from "@babel/helper-plugin-utils";
|
||||
import { addDefault, isModule } from "@babel/helper-module-imports";
|
||||
import { types as t } from "@babel/core";
|
||||
|
||||
import definitions from "./definitions";
|
||||
import getDefinitions from "./definitions";
|
||||
|
||||
function resolveAbsoluteRuntime(moduleName: string, dirname: string) {
|
||||
try {
|
||||
@@ -41,6 +41,8 @@ export default declare((api, options, dirname) => {
|
||||
absoluteRuntime = false,
|
||||
} = options;
|
||||
|
||||
const definitions = getDefinitions(runtimeVersion);
|
||||
|
||||
if (typeof useRuntimeRegenerator !== "boolean") {
|
||||
throw new Error(
|
||||
"The 'regenerator' option must be undefined, or a boolean.",
|
||||
|
||||
Reference in New Issue
Block a user