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:
Siddharth Parmar
2018-09-04 09:19:51 +05:30
committed by Logan Smyth
parent 4beb977f15
commit 262787bd92
5 changed files with 588 additions and 525 deletions

View File

@@ -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");

View File

@@ -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",
},
},
},
};
};

View File

@@ -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.",