### `@babel/runtime` - Added `@babel/runtime-corejs3` package and `corejs: 3` options to `@babel/plugin-transform-runtime`. - Added support of instance methods, fixes #8928. - Added flag `proposals` (in `corejs: { version: 3, proposals: true }` format) for support all proposals polyfills from `core-js`. - Used separate directories in runtime for `core-js` entry points with proposals and without. - Used `get-iterator-method` helper for getting iterators, fixes #2500. - As a cheap bonus, added support of IE8- (except some cases of `regenerator`). ### `@babel/polyfill` - Should be deprecated in favor of separate usage required features from `core-js` and `regenerator-runtime` with an informative message. ### `@babel/preset-env` - Uses for built-ins data from [`core-js-compat`](https://github.com/zloirock/core-js/tree/master/packages/core-js-compat) instead of `compat-table` since information from `compat-table` [is not enough](https://github.com/zloirock/core-js/tree/master/packages/core-js-compat). - `useBuilIns` now requires direct setting of `corejs` version option, without it will be used `2` by default and shown deprecation warning. - Added support of minor `core-js` versions for simplify updating in the future. - For preventing some order-related problems, polyfills in the both `core-js@3` plugins added on `post` stage in the order of `core-js-compat` data. - Divided plugins and polyfills parts of `preset-env`, instead of 2 internal plugins for adding polyfills, we have 6: usage and entry versions of plugins for `core-js@2`, ### Current state: `core-js@3`, `regenerator-runtime`. - Added support `samsung` target (for Samsung Internet) since `core-js-compat` and `compat-table` now contains mapping for this, fixes #6602. #### `useBuilIns: entry` with `corejs: 3` - No longer transforms `@babel/polyfill`. - Transforms **all possible** `core-js` entry points to import of related modules (based on data from [`core-js-compat`](https://unpkg.com/core-js-compat@3.0.0-beta.15/entries.json)). - Since of this, we no longer need `shippedProposals` / `proposals` flags with `useBuilIns: entry`. - Removes `regenerator-runtime/runtime` import where it's not required. #### `useBuilIns: usage` with `corejs: 3` - In addition to `shippedProposals`, added flag `proposals` (in `corejs: { version: 3, proposals: true }` format) for polyfill all proposals from `core-js`. - Fixed list of dependencies in built-in definitions. - Improved the way of determination method / built-in name and source of this method. - Adds import of required polyfills on `MemberExpression`, `ObjectPattern`, `in` operator. - Adds import of required polyfills on access to global object properties. - Adds import of all required common iterators on all syntax features which use iterators protocol (`for-of`, destructuring, spread, `yield` delegation, etc.). - Adds import of promises on syntax features which use promises (async functions/generators, dynamic import, etc.), fixes #9250, #7402, etc. ### `core-js@2` stuff I didn't want to tough `core-js@2`-related stuff, however - Fixed some serious errors in definitions which breaks `Object.getOwnPropertySymbols`, `Symbol.toStringTag` logic, `Promise#finally`, `Array#forEach`, etc. - `Array#flatMap` and trim methods moved to stable features as a part of ES2019 and loaded by deprecated `@babel/polyfill` and `@babel/preset-env` with `corejs: 2` option.
504 lines
12 KiB
JavaScript
504 lines
12 KiB
JavaScript
"use strict";
|
|
|
|
describe("babel-runtime", () => {
|
|
describe("instance methods entries", () => {
|
|
it("at, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/at")("").call("a", 0),
|
|
).toEqual("a");
|
|
});
|
|
|
|
it("at, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/at")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("bind, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/bind")(() => {}).call(function () { return this; }, 42)(),
|
|
).toEqual(42);
|
|
});
|
|
|
|
it("bind, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/bind")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("codePointAt, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/code-point-at")("").call("a", 0),
|
|
).toEqual(97);
|
|
});
|
|
|
|
it("codePointAt, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/code-point-at")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("codePoints, exists", () => {
|
|
expect(
|
|
typeof require("../core-js/instance/code-points")("").call("a").next,
|
|
).toEqual("function");
|
|
});
|
|
|
|
it("codePoints, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/code-points")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("concat, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/concat")([]).call([1, 2], [3, 4]).length,
|
|
).toEqual(4);
|
|
});
|
|
|
|
it("concat, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/concat")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("copyWithin, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/copy-within")([]).call([1, 2, 3], 1)[2],
|
|
).toEqual(2);
|
|
});
|
|
|
|
it("copyWithin, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/copy-within")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("endsWith, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/ends-with")("").call("qwe", "we"),
|
|
).toEqual(true);
|
|
});
|
|
|
|
it("endsWith, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/ends-with")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("entries, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/entries")([]).call([]).next().done,
|
|
).toEqual(true);
|
|
});
|
|
|
|
it("entries, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/entries")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("every, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/every")([]).call([1, 2, 3], it => typeof it === "number"),
|
|
).toEqual(true);
|
|
});
|
|
|
|
it("every, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/every")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("fill, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/fill")([]).call([1, 2, 3], 42)[1],
|
|
).toEqual(42);
|
|
});
|
|
|
|
it("fill, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/fill")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("filter, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/filter")([]).call([1, 2, 3], it => it % 2).length,
|
|
).toEqual(2);
|
|
});
|
|
|
|
it("filter, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/filter")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("find, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/find")([]).call([1, 2, 3], it => !(it % 2)),
|
|
).toEqual(2);
|
|
});
|
|
|
|
it("find, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/find")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("findIndex, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/find-index")([]).call([1, 2, 3], it => !(it % 2)),
|
|
).toEqual(1);
|
|
});
|
|
|
|
it("findIndex, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/find-index")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("flags, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/flags")(/./gim),
|
|
).toEqual("gim");
|
|
});
|
|
|
|
it("flags, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/flags")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("flatMap, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/flat-map")([]).call([1, 2, [3, 4]], it => it).length,
|
|
).toEqual(4);
|
|
});
|
|
|
|
it("flatMap, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/flat-map")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("flat, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/flat")([]).call([1, 2, [3, 4]]).length,
|
|
).toEqual(4);
|
|
});
|
|
|
|
it("flat, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/flat")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("forEach, exists", () => {
|
|
expect(
|
|
typeof require("../core-js/instance/for-each")([]),
|
|
).toEqual("function");
|
|
});
|
|
|
|
it("forEach, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/for-each")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("includes, array", () => {
|
|
expect(
|
|
require("../core-js/instance/includes")([]).call([1, 2, 3], 2),
|
|
).toEqual(true);
|
|
});
|
|
|
|
it("includes, string", () => {
|
|
expect(
|
|
require("../core-js/instance/includes")("").call("qweasd", "ea"),
|
|
).toEqual(true);
|
|
});
|
|
|
|
it("includes, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/includes")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("indexOf, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/index-of")([]).call([1, 2, 3], 4),
|
|
).toEqual(-1);
|
|
});
|
|
|
|
it("indexOf, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/index-of")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("keys, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/keys")([]).call([]).next().done,
|
|
).toEqual(true);
|
|
});
|
|
|
|
it("keys, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/keys")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("lastIndexOf, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/last-index-of")([]).call([1, 2, 3], 4),
|
|
).toEqual(-1);
|
|
});
|
|
|
|
it("lastIndexOf, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/last-index-of")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("map, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/map")([]).call([1, 2, 3], it => it * it)[2],
|
|
).toEqual(9);
|
|
});
|
|
|
|
it("map, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/map")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("matchAll, exists", () => {
|
|
expect(
|
|
typeof require("../core-js/instance/match-all")("").call("qwe", /./).next,
|
|
).toEqual("function");
|
|
});
|
|
|
|
it("matchAll, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/match-all")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("padEnd, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/pad-end")("").call("qwe", 6),
|
|
).toEqual("qwe ");
|
|
});
|
|
|
|
it("padEnd, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/pad-end")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("padStart, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/pad-start")("").call("qwe", 6),
|
|
).toEqual(" qwe");
|
|
});
|
|
|
|
it("padStart, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/pad-start")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("reduce, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/reduce")([]).call([1, 2, 3], (a, b) => a + b),
|
|
).toEqual(6);
|
|
});
|
|
|
|
it("reduce, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/reduce")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("reduceRight, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/reduce-right")([]).call([1, 2, 3], (a, b) => a + b),
|
|
).toEqual(6);
|
|
});
|
|
|
|
it("reduceRight, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/reduce-right")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("repeat, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/repeat")("").call("q", 6),
|
|
).toEqual("qqqqqq");
|
|
});
|
|
|
|
it("repeat, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/repeat")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("replaceAll, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/replace-all")("").call("qwe", "w", "r"),
|
|
).toEqual("qre");
|
|
});
|
|
|
|
it("replaceAll, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/replace-all")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("reverse, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/reverse")([]).call([1, 2, 3]).join(''),
|
|
).toEqual("321");
|
|
});
|
|
|
|
it("reverse, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/reverse")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("slice, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/slice")([]).call([1, 2, 3], 1)[0],
|
|
).toEqual(2);
|
|
});
|
|
|
|
it("slice, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/slice")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("some, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/some")([]).call([1, 2, 3], it => typeof it === "number"),
|
|
).toEqual(true);
|
|
});
|
|
|
|
it("some, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/some")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("sort, exists", () => {
|
|
expect(
|
|
typeof require("../core-js/instance/sort")([]),
|
|
).toEqual("function");
|
|
});
|
|
|
|
it("sort, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/sort")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("splice, exists", () => {
|
|
expect(
|
|
typeof require("../core-js/instance/splice")([]),
|
|
).toEqual("function");
|
|
});
|
|
|
|
it("splice, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/splice")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("startsWith, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/starts-with")("").call("qwe", "qw"),
|
|
).toEqual(true);
|
|
});
|
|
|
|
it("startsWith, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/starts-with")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("trim, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/trim")("").call(" qwe "),
|
|
).toEqual("qwe");
|
|
});
|
|
|
|
it("trim, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/trim")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("trimEnd, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/trim-end")("").call(" qwe "),
|
|
).toEqual(" qwe");
|
|
});
|
|
|
|
it("trimEnd, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/trim-end")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("trimLeft, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/trim-left")("").call(" qwe "),
|
|
).toEqual("qwe ");
|
|
});
|
|
|
|
it("trimLeft, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/trim-left")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("trimRight, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/trim-right")("").call(" qwe "),
|
|
).toEqual(" qwe");
|
|
});
|
|
|
|
it("trimRight, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/trim-right")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("trimStart, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/trim-start")("").call(" qwe "),
|
|
).toEqual("qwe ");
|
|
});
|
|
|
|
it("trimStart, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/trim-start")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
|
|
it("values, exists", () => {
|
|
expect(
|
|
require("../core-js/instance/values")([]).call([]).next().done,
|
|
).toEqual(true);
|
|
});
|
|
|
|
it("values, missing", () => {
|
|
expect(
|
|
require("../core-js/instance/values")({}),
|
|
).toEqual(undefined);
|
|
});
|
|
});
|
|
});
|