Compare commits
84 Commits
v7.0.0-bet
...
v7.0.0-rc.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
814c564c45 | ||
|
|
7a104e3e1d | ||
|
|
b98799557a | ||
|
|
1ac46a256d | ||
|
|
50d3c09883 | ||
|
|
508bfad55a | ||
|
|
130814342a | ||
|
|
e0ee0570be | ||
|
|
edbffda091 | ||
|
|
72ee1816a4 | ||
|
|
e875fc7bc1 | ||
|
|
524d847763 | ||
|
|
5899940156 | ||
|
|
595240f071 | ||
|
|
cada040bec | ||
|
|
1f9b2a5c41 | ||
|
|
39fa102ee8 | ||
|
|
e841ccca34 | ||
|
|
4249dbc8ea | ||
|
|
a7cc3325cd | ||
|
|
023044c1d4 | ||
|
|
22bcfbe469 | ||
|
|
47e05d70f3 | ||
|
|
c5e3b6d4bc | ||
|
|
b04de1196a | ||
|
|
d07cef244e | ||
|
|
6c68ca8e0a | ||
|
|
f1d774b34f | ||
|
|
8874c5c481 | ||
|
|
b439013cd4 | ||
|
|
f8b0a5579f | ||
|
|
2a4f162366 | ||
|
|
55295cc545 | ||
|
|
59e9c6322b | ||
|
|
0fd3da110d | ||
|
|
d60c5e1736 | ||
|
|
90bebe7186 | ||
|
|
8d6ed7e0aa | ||
|
|
8f4bae8ea4 | ||
|
|
2c3c12fdf7 | ||
|
|
25d2f59018 | ||
|
|
3a399d1eb9 | ||
|
|
c2a2e24965 | ||
|
|
ef68114d67 | ||
|
|
ca639b4262 | ||
|
|
7a51d72345 | ||
|
|
ab8555a867 | ||
|
|
0136a26af7 | ||
|
|
c75a00bd56 | ||
|
|
ffa8e6cbae | ||
|
|
5043ec78bc | ||
|
|
3989213e37 | ||
|
|
d79b5eeeff | ||
|
|
1e0b649485 | ||
|
|
8c65230258 | ||
|
|
427aff559f | ||
|
|
de16ac08be | ||
|
|
0a958861c9 | ||
|
|
904bcaffe3 | ||
|
|
e855987c51 | ||
|
|
8b1406127a | ||
|
|
c8bb450032 | ||
|
|
b6db036ff7 | ||
|
|
6476a0d089 | ||
|
|
6695f5e2f7 | ||
|
|
86ce2e4e0d | ||
|
|
8cffbbae75 | ||
|
|
cb51704745 | ||
|
|
a8224d40e2 | ||
|
|
3210a7a873 | ||
|
|
9c598a8e28 | ||
|
|
a149466001 | ||
|
|
ec8330870e | ||
|
|
363c5923f0 | ||
|
|
8173b6e694 | ||
|
|
e2d64f146c | ||
|
|
9392783738 | ||
|
|
810b7916c2 | ||
|
|
eb0e999987 | ||
|
|
5c728ea609 | ||
|
|
b8f9ebf638 | ||
|
|
55ca90b3fc | ||
|
|
1a0fe993f5 | ||
|
|
02760d0f70 |
@@ -4,8 +4,9 @@
|
||||
package.json
|
||||
lerna.json
|
||||
packages/babel-runtime
|
||||
!packages/babel-runtime/scripts
|
||||
!packages/babel-runtime/core-js.js
|
||||
!packages/babel-plugin-transform-runtime/scripts
|
||||
!packages/babel-runtime-corejs2/core-js.js
|
||||
packages/babel-runtime-corejs2
|
||||
packages/*/node_modules
|
||||
packages/*/lib
|
||||
packages/*/dist
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
.*/codemods/.*/lib
|
||||
.*/codemods/.*/test
|
||||
.*/node_modules/conventional-changelog-core/
|
||||
.*/node_modules/module-deps/
|
||||
|
||||
[include]
|
||||
packages/*/src
|
||||
|
||||
34
.gitignore
vendored
34
.gitignore
vendored
@@ -1,6 +1,9 @@
|
||||
.DS_Store
|
||||
/node_modules
|
||||
/packages/*/node_modules
|
||||
/packages/*/LICENSE
|
||||
!/packages/babel-parser/LICENSE
|
||||
!/packages/babel-plugin-transform-object-assign/LICENSE
|
||||
*.log
|
||||
*.cache
|
||||
/build
|
||||
@@ -12,24 +15,27 @@ coverage
|
||||
dist
|
||||
/.package.json
|
||||
package-lock.json
|
||||
/packages/babel-runtime/core-js/**/*.js
|
||||
!/packages/babel-runtime/core-js/map.js
|
||||
|
||||
/packages/babel-runtime/helpers/*.js
|
||||
!/packages/babel-runtime/helpers/toArray.js
|
||||
!/packages/babel-runtime/helpers/iterableToArray.js
|
||||
!/packages/babel-runtime/helpers/temporalRef.js
|
||||
/packages/babel-runtime/helpers/builtin/*.js
|
||||
!/packages/babel-runtime/helpers/builtin/toArray.js
|
||||
!/packages/babel-runtime/helpers/builtin/iterableToArray.js
|
||||
!/packages/babel-runtime/helpers/builtin/temporalRef.js
|
||||
/packages/babel-runtime/helpers/builtin/es6/*.js
|
||||
!/packages/babel-runtime/helpers/builtin/es6/toArray.js
|
||||
!/packages/babel-runtime/helpers/builtin/es6/iterableToArray.js
|
||||
!/packages/babel-runtime/helpers/builtin/es6/temporalRef.js
|
||||
/packages/babel-runtime/helpers/es6/*.js
|
||||
!/packages/babel-runtime/helpers/es6/toArray.js
|
||||
!/packages/babel-runtime/helpers/es6/iterableToArray.js
|
||||
!/packages/babel-runtime/helpers/es6/temporalRef.js
|
||||
/packages/babel-runtime/helpers/esm/*.js
|
||||
!/packages/babel-runtime/helpers/esm/toArray.js
|
||||
!/packages/babel-runtime/helpers/esm/iterableToArray.js
|
||||
!/packages/babel-runtime/helpers/esm/temporalRef.js
|
||||
|
||||
/packages/babel-runtime-corejs2/helpers/*.js
|
||||
!/packages/babel-runtime-corejs2/helpers/toArray.js
|
||||
!/packages/babel-runtime-corejs2/helpers/iterableToArray.js
|
||||
!/packages/babel-runtime-corejs2/helpers/temporalRef.js
|
||||
/packages/babel-runtime-corejs2/helpers/esm/*.js
|
||||
!/packages/babel-runtime-corejs2/helpers/esm/toArray.js
|
||||
!/packages/babel-runtime-corejs2/helpers/esm/iterableToArray.js
|
||||
!/packages/babel-runtime-corejs2/helpers/esm/temporalRef.js
|
||||
/packages/babel-runtime-corejs2/core-js/**/*.js
|
||||
!/packages/babel-runtime-corejs2/core-js/map.js
|
||||
|
||||
/packages/babel-register/test/.babel
|
||||
/packages/babel-cli/test/tmp
|
||||
/packages/babel-node/test/tmp
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
contributors and maintainers pledge to make participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, gender identity and expression, level of experience,
|
||||
nationality, personal appearance, race, religion, or sexual identity and
|
||||
|
||||
@@ -186,7 +186,7 @@ For example, in [`@babel/plugin-transform-exponentiation-operator/test`](https:/
|
||||
- If you need to expect an error, you can ignore creating the `output.js` file and pass a new `throws` key to the `options.json` that contains the error string that is created.
|
||||
- The second and preferred type is a test that actually evaluates the produced code and asserts that certain properties are true or false. We do this by creating an [`exec.js`](https://github.com/babel/babel/blob/master/packages/babel-plugin-transform-exponentiation-operator/test/fixtures/exponentian-operator/comprehensive/exec.js) file.
|
||||
|
||||
In a fixture test, you simply write out the code you want transformed in `input.js`.
|
||||
In a fixture test, you simply write out the code you want to transform in `input.js`.
|
||||
|
||||
```js
|
||||
// input.js
|
||||
|
||||
15
Makefile
15
Makefile
@@ -1,5 +1,5 @@
|
||||
MAKEFLAGS = -j1
|
||||
FLOW_COMMIT = 395e045c18d537fcbbc552a96ef2cdcd70b4ab52
|
||||
FLOW_COMMIT = bea8b83f50f597454941d2a7ecef6e93a881e576
|
||||
TEST262_COMMIT = f90a52b39609a620c0854e0bd0b3a906c930fd17
|
||||
|
||||
# Fix color output until TravisCI fixes https://github.com/travis-ci/travis-ci/issues/7967
|
||||
@@ -31,7 +31,7 @@ build-preset-env-standalone:
|
||||
build-dist: build
|
||||
cd packages/babel-polyfill; \
|
||||
scripts/build-dist.sh
|
||||
cd packages/babel-runtime; \
|
||||
cd packages/babel-plugin-transform-runtime; \
|
||||
node scripts/build-dist.js
|
||||
|
||||
watch: clean clean-lib
|
||||
@@ -104,23 +104,28 @@ test-test262-ci: bootstrap test-test262
|
||||
test-test262-update-whitelist:
|
||||
node scripts/tests/test262/run_babel_parser_test262.js --update-whitelist
|
||||
|
||||
clone-license:
|
||||
./scripts/clone-license.sh
|
||||
|
||||
publish:
|
||||
git pull --rebase
|
||||
make clean-lib
|
||||
rm -rf packages/babel-runtime/helpers
|
||||
rm -rf packages/babel-runtime/core-js
|
||||
rm -rf packages/babel-runtime-corejs2/helpers
|
||||
rm -rf packages/babel-runtime-corejs2/core-js
|
||||
BABEL_ENV=production make build-dist
|
||||
make test
|
||||
make clone-license
|
||||
# not using lerna independent mode atm, so only update packages that have changed since we use ^
|
||||
# --only-explicit-updates
|
||||
./node_modules/.bin/lerna publish --force-publish=* --exact --skip-temp-tag
|
||||
./node_modules/.bin/lerna publish --force-publish=* --skip-temp-tag
|
||||
make clean
|
||||
|
||||
bootstrap: clean-all
|
||||
yarn --ignore-engines
|
||||
./node_modules/.bin/lerna bootstrap -- --ignore-engines
|
||||
make build
|
||||
cd packages/babel-runtime; \
|
||||
cd packages/babel-plugin-transform-runtime; \
|
||||
node scripts/build-dist.js
|
||||
|
||||
clean-lib:
|
||||
|
||||
@@ -72,6 +72,7 @@ Become a sponsor and get your logo on our README on Github with a link to your s
|
||||
|
||||
<a href="http://teamextension.io/" target="_blank"><img src="https://teamextension.io/dist/img/logo/te-logo-compact.png" height="64"></a>
|
||||
<a href="https://webflow.com/" target="_blank"><img src="https://opencollective.com/proxy/images/?src=https%3A%2F%2Fopencollective-production.s3-us-west-1.amazonaws.com%2F4a5024b0-8cf2-11e7-b1a2-b30b1de1463c.png&height=64"></a>
|
||||
<a href="https://issue.sh/?utm_medium=github&utm_campaign=babel" target="_blank"><img src="https://user-images.githubusercontent.com/5557143/43912065-c8cdff78-9c33-11e8-829a-0b4166ccc215.png"></a>
|
||||
<p><a href="https://twitter.com/mikesherov">Mike Sherov</a></p>
|
||||
|
||||
## Intro
|
||||
|
||||
@@ -13,13 +13,18 @@ module.exports = function(api) {
|
||||
|
||||
let convertESM = true;
|
||||
let ignoreLib = true;
|
||||
let includeRuntime = false;
|
||||
|
||||
switch (env) {
|
||||
// Configs used during bundling builds.
|
||||
case "babel-parser":
|
||||
convertESM = false;
|
||||
ignoreLib = false;
|
||||
break;
|
||||
case "standalone":
|
||||
convertESM = false;
|
||||
ignoreLib = false;
|
||||
includeRuntime = true;
|
||||
break;
|
||||
case "production":
|
||||
// Config during builds before publish.
|
||||
@@ -41,6 +46,10 @@ module.exports = function(api) {
|
||||
}
|
||||
|
||||
const config = {
|
||||
// Our dependencies are all standard CommonJS, along with all sorts of
|
||||
// other random files in Babel's codebase, so we use script as the default,
|
||||
// and then mark actual modules as modules farther down.
|
||||
sourceType: "script",
|
||||
comments: false,
|
||||
ignore: [
|
||||
// These may not be strictly necessary with the newly-limited scope of
|
||||
@@ -84,7 +93,29 @@ module.exports = function(api) {
|
||||
convertESM ? "@babel/transform-modules-commonjs" : null,
|
||||
].filter(Boolean),
|
||||
},
|
||||
],
|
||||
{
|
||||
// The vast majority of our src files are modules, but we use
|
||||
// unambiguous to keep things simple until we get around to renaming
|
||||
// the modules to be more easily distinguished from CommonJS
|
||||
test: [
|
||||
"packages/*/src",
|
||||
"packages/*/test",
|
||||
"codemods/*/src",
|
||||
"codemods/*/test",
|
||||
],
|
||||
sourceType: "unambiguous",
|
||||
},
|
||||
{
|
||||
// The runtime transform shouldn't process its own runtime or core-js.
|
||||
exclude: [
|
||||
"packages/babel-runtime",
|
||||
/[\\/]node_modules[\\/](?:@babel\/runtime|babel-runtime|core-js)[\\/]/,
|
||||
],
|
||||
plugins: [includeRuntime ? "@babel/transform-runtime" : null].filter(
|
||||
Boolean
|
||||
),
|
||||
},
|
||||
].filter(Boolean),
|
||||
};
|
||||
|
||||
// we need to do this as long as we do not test everything from source
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@babel/plugin-codemod-object-assign-to-object-spread",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Transforms Object.assign into object spread syntax",
|
||||
"repository": "https://github.com/babel/babel/tree/master/codemods/babel-plugin-codemod-object-assign-to-object-spread",
|
||||
"license": "MIT",
|
||||
@@ -10,14 +10,14 @@
|
||||
"@babel/plugin"
|
||||
],
|
||||
"dependencies": {
|
||||
"@babel/plugin-syntax-object-rest-spread": "7.0.0-beta.55"
|
||||
"@babel/plugin-syntax-object-rest-spread": "^7.0.0-rc.4"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@babel/core": ">=7.0.0-beta.50 <7.0.0-rc.0"
|
||||
"@babel/core": "^7.0.0-0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "7.0.0-beta.55",
|
||||
"@babel/helper-plugin-test-runner": "7.0.0-beta.55"
|
||||
"@babel/core": "^7.0.0-rc.4",
|
||||
"@babel/helper-plugin-test-runner": "^7.0.0-rc.4"
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@babel/plugin-codemod-optional-catch-binding",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Remove unused catch bindings",
|
||||
"repository": "https://github.com/babel/babel/tree/master/codemods/babel-plugin-codemod-remove-unused-catch-binding",
|
||||
"license": "MIT",
|
||||
@@ -10,13 +10,13 @@
|
||||
"@babel/plugin"
|
||||
],
|
||||
"dependencies": {
|
||||
"@babel/plugin-syntax-optional-catch-binding": "7.0.0-beta.55"
|
||||
"@babel/plugin-syntax-optional-catch-binding": "^7.0.0-rc.4"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@babel/core": ">=7.0.0-beta.50 <7.0.0-rc.0"
|
||||
"@babel/core": "^7.0.0-0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "7.0.0-beta.55",
|
||||
"@babel/helper-plugin-test-runner": "7.0.0-beta.55"
|
||||
"@babel/core": "^7.0.0-rc.4",
|
||||
"@babel/helper-plugin-test-runner": "^7.0.0-rc.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"lerna": "2.11.0",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"changelog": {
|
||||
"repo": "babel/babel",
|
||||
"cacheDir": ".changelog",
|
||||
|
||||
@@ -32,6 +32,20 @@ declare module "lodash/merge" {
|
||||
declare export default <T: Object>(T, Object) => T;
|
||||
}
|
||||
|
||||
declare module "semver" {
|
||||
declare module.exports: {
|
||||
valid(v: string): boolean;
|
||||
gt(v1: string, v2: string): boolean;
|
||||
lt(v1: string, v2: string): boolean;
|
||||
major(v: string): number;
|
||||
minor(v: string): number;
|
||||
patch(v: string): number;
|
||||
satisfies(v1: string, r1: string): boolean;
|
||||
|
||||
intersects(r1: string, r2: string): boolean;
|
||||
}
|
||||
}
|
||||
|
||||
declare module "source-map" {
|
||||
declare export type SourceMap = {
|
||||
version: 3,
|
||||
|
||||
30
package.json
30
package.json
@@ -10,31 +10,33 @@
|
||||
"test": "make test"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/cli": "7.0.0-beta.52",
|
||||
"@babel/core": "7.0.0-beta.52",
|
||||
"@babel/plugin-proposal-class-properties": "7.0.0-beta.52",
|
||||
"@babel/plugin-proposal-export-namespace-from": "7.0.0-beta.52",
|
||||
"@babel/plugin-proposal-numeric-separator": "7.0.0-beta.52",
|
||||
"@babel/plugin-transform-modules-commonjs": "7.0.0-beta.52",
|
||||
"@babel/preset-env": "7.0.0-beta.52",
|
||||
"@babel/preset-flow": "7.0.0-beta.52",
|
||||
"@babel/register": "7.0.0-beta.52",
|
||||
"@babel/cli": "7.0.0-rc.2",
|
||||
"@babel/core": "7.0.0-rc.2",
|
||||
"@babel/plugin-transform-runtime": "7.0.0-rc.2",
|
||||
"@babel/plugin-proposal-class-properties": "7.0.0-rc.2",
|
||||
"@babel/plugin-proposal-export-namespace-from": "7.0.0-rc.2",
|
||||
"@babel/plugin-proposal-numeric-separator": "7.0.0-rc.2",
|
||||
"@babel/plugin-transform-modules-commonjs": "7.0.0-rc.2",
|
||||
"@babel/preset-env": "7.0.0-rc.2",
|
||||
"@babel/preset-flow": "7.0.0-rc.2",
|
||||
"@babel/register": "7.0.0-rc.2",
|
||||
"@babel/runtime": "7.0.0-rc.2",
|
||||
"babel-core": "^7.0.0-0",
|
||||
"babel-eslint": "^8.2.6",
|
||||
"babel-jest": "^23.4.0",
|
||||
"babel-loader": "8.0.0-beta.0",
|
||||
"babel-loader": "8.0.0-beta.4",
|
||||
"babel-plugin-transform-charcodes": "^0.1.0",
|
||||
"browserify": "^13.1.1",
|
||||
"browserify": "^16.2.2",
|
||||
"bundle-collapser": "^1.2.1",
|
||||
"chalk": "^2.3.2",
|
||||
"charcodes": "^0.1.0",
|
||||
"derequire": "^2.0.2",
|
||||
"enhanced-resolve": "^3.0.0",
|
||||
"eslint": "^5.1.0",
|
||||
"eslint": "^5.3.0",
|
||||
"eslint-config-babel": "^7.0.2",
|
||||
"eslint-plugin-flowtype": "^2.50.0",
|
||||
"eslint-plugin-prettier": "^2.6.2",
|
||||
"flow-bin": "^0.76.0",
|
||||
"flow-bin": "^0.79.0",
|
||||
"graceful-fs": "^4.1.11",
|
||||
"gulp": "^4.0.0",
|
||||
"gulp-babel": "^8.0.0-beta.2",
|
||||
@@ -70,7 +72,7 @@
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6.9.0 <= 11.0.0-0",
|
||||
"npm": ">= 2.x <= 5.x",
|
||||
"npm": ">= 3.x <= 6.x",
|
||||
"yarn": ">=0.27.5 || >=1.0.0-20170811"
|
||||
},
|
||||
"lint-staged": {
|
||||
|
||||
@@ -14,7 +14,7 @@ A monorepo, muhahahahahaha. See the [monorepo design doc](/doc/design/monorepo.m
|
||||
| Package | Version | Dependencies |
|
||||
|--------|-------|------------|
|
||||
| [`@babel/core`](/packages/babel-core) | [](https://www.npmjs.com/package/@babel/core) | [](https://david-dm.org/babel/babel?path=packages/babel-core) |
|
||||
| [`@babel/parser`](/packages/@babel/parser) | [](https://www.npmjs.com/package/@babel/parser) | [](https://david-dm.org/babel/babel?path=packages/babel-parser) |
|
||||
| [`@babel/parser`](/packages/babel-parser) | [](https://www.npmjs.com/package/@babel/parser) | [](https://david-dm.org/babel/babel?path=packages/babel-parser) |
|
||||
| [`@babel/traverse`](/packages/babel-traverse) | [](https://www.npmjs.com/package/@babel/traverse) | [](https://david-dm.org/babel/babel?path=packages/babel-traverse) |
|
||||
| [`@babel/generator`](/packages/babel-generator) | [](https://www.npmjs.com/package/@babel/generator) | [](https://david-dm.org/babel/babel?path=packages/babel-generator) |
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@babel/cli",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Babel command line.",
|
||||
"author": "Sebastian McKenzie <sebmck@gmail.com>",
|
||||
"homepage": "https://babeljs.io/",
|
||||
@@ -18,23 +18,23 @@
|
||||
"dependencies": {
|
||||
"commander": "^2.8.1",
|
||||
"convert-source-map": "^1.1.0",
|
||||
"fs-readdir-recursive": "^1.0.0",
|
||||
"fs-readdir-recursive": "^1.1.0",
|
||||
"glob": "^7.0.0",
|
||||
"lodash": "^4.17.10",
|
||||
"mkdirp": "^0.5.1",
|
||||
"output-file-sync": "^2.0.0",
|
||||
"slash": "^1.0.0",
|
||||
"slash": "^2.0.0",
|
||||
"source-map": "^0.5.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"chokidar": "^2.0.3"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@babel/core": ">=7.0.0-beta.50 <7.0.0-rc.0"
|
||||
"@babel/core": "^7.0.0-0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "7.0.0-beta.55",
|
||||
"@babel/helper-fixtures": "7.0.0-beta.55"
|
||||
"@babel/core": "^7.0.0-rc.4",
|
||||
"@babel/helper-fixtures": "^7.0.0-rc.4"
|
||||
},
|
||||
"bin": {
|
||||
"babel": "./bin/babel.js",
|
||||
|
||||
@@ -89,7 +89,7 @@ export default async function({ cliOptions, babelOptions }) {
|
||||
|
||||
const stat = fs.statSync(filenameOrDir);
|
||||
|
||||
if (stat.isDirectory(filenameOrDir)) {
|
||||
if (stat.isDirectory()) {
|
||||
const dirname = filenameOrDir;
|
||||
|
||||
let count = 0;
|
||||
|
||||
@@ -15,11 +15,15 @@ export function readdir(
|
||||
includeDotfiles: boolean,
|
||||
filter: ReaddirFilter,
|
||||
) {
|
||||
return readdirRecursive(
|
||||
dirname,
|
||||
filename =>
|
||||
(includeDotfiles || filename[0] !== ".") && (!filter || filter(filename)),
|
||||
);
|
||||
return readdirRecursive(dirname, (filename, _index, currentDirectory) => {
|
||||
const stat = fs.statSync(path.join(currentDirectory, filename));
|
||||
|
||||
if (stat.isDirectory()) return true;
|
||||
|
||||
return (
|
||||
(includeDotfiles || filename[0] !== ".") && (!filter || filter(filename))
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
export function readdirForCompilable(
|
||||
@@ -45,9 +49,14 @@ export function addSourceMappingUrl(code, loc) {
|
||||
return code + "\n//# sourceMappingURL=" + path.basename(loc);
|
||||
}
|
||||
|
||||
const CALLER = {
|
||||
name: "@babel/cli",
|
||||
};
|
||||
|
||||
export function transform(filename, code, opts) {
|
||||
opts = {
|
||||
...opts,
|
||||
caller: CALLER,
|
||||
filename,
|
||||
};
|
||||
|
||||
@@ -60,6 +69,11 @@ export function transform(filename, code, opts) {
|
||||
}
|
||||
|
||||
export function compile(filename, opts) {
|
||||
opts = {
|
||||
...opts,
|
||||
caller: CALLER,
|
||||
};
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
babel.transformFile(filename, opts, (err, result) => {
|
||||
if (err) reject(err);
|
||||
|
||||
1
packages/babel-cli/test/fixtures/babel/dir --out-file/in-files/src/bar/bar.js
vendored
Normal file
1
packages/babel-cli/test/fixtures/babel/dir --out-file/in-files/src/bar/bar.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
(() => 42)
|
||||
1
packages/babel-cli/test/fixtures/babel/dir --out-file/in-files/src/foo.js
vendored
Normal file
1
packages/babel-cli/test/fixtures/babel/dir --out-file/in-files/src/foo.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
arr.map(x => x * MULTIPLIER);
|
||||
3
packages/babel-cli/test/fixtures/babel/dir --out-file/options.json
vendored
Normal file
3
packages/babel-cli/test/fixtures/babel/dir --out-file/options.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"args": ["src", "--out-file", "test.js"]
|
||||
}
|
||||
10
packages/babel-cli/test/fixtures/babel/dir --out-file/out-files/test.js
vendored
Normal file
10
packages/babel-cli/test/fixtures/babel/dir --out-file/out-files/test.js
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
"use strict";
|
||||
|
||||
(function () {
|
||||
return 42;
|
||||
});
|
||||
"use strict";
|
||||
|
||||
arr.map(function (x) {
|
||||
return x * MULTIPLIER;
|
||||
});
|
||||
0
packages/babel-cli/test/fixtures/babel/dir --out-file/stdout.txt
vendored
Normal file
0
packages/babel-cli/test/fixtures/babel/dir --out-file/stdout.txt
vendored
Normal file
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@babel/code-frame",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Generate errors that contain a code frame that point to source locations.",
|
||||
"author": "Sebastian McKenzie <sebmck@gmail.com>",
|
||||
"homepage": "https://babeljs.io/",
|
||||
@@ -8,7 +8,7 @@
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-code-frame",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"@babel/highlight": "7.0.0-beta.55"
|
||||
"@babel/highlight": "^7.0.0-rc.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"chalk": "^2.0.0",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@babel/core",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Babel compiler core.",
|
||||
"main": "lib/index.js",
|
||||
"author": "Sebastian McKenzie <sebmck@gmail.com>",
|
||||
@@ -30,13 +30,13 @@
|
||||
"./lib/transform-file.js": "./lib/transform-file-browser.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "7.0.0-beta.55",
|
||||
"@babel/generator": "7.0.0-beta.55",
|
||||
"@babel/helpers": "7.0.0-beta.55",
|
||||
"@babel/parser": "7.0.0-beta.55",
|
||||
"@babel/template": "7.0.0-beta.55",
|
||||
"@babel/traverse": "7.0.0-beta.55",
|
||||
"@babel/types": "7.0.0-beta.55",
|
||||
"@babel/code-frame": "^7.0.0-rc.4",
|
||||
"@babel/generator": "^7.0.0-rc.4",
|
||||
"@babel/helpers": "^7.0.0-rc.4",
|
||||
"@babel/parser": "^7.0.0-rc.4",
|
||||
"@babel/template": "^7.0.0-rc.4",
|
||||
"@babel/traverse": "^7.0.0-rc.4",
|
||||
"@babel/types": "^7.0.0-rc.4",
|
||||
"convert-source-map": "^1.1.0",
|
||||
"debug": "^3.1.0",
|
||||
"json5": "^0.5.0",
|
||||
@@ -46,7 +46,7 @@
|
||||
"source-map": "^0.5.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/helper-transform-fixture-test-runner": "7.0.0-beta.55",
|
||||
"@babel/register": "7.0.0-beta.55"
|
||||
"@babel/helper-transform-fixture-test-runner": "^7.0.0-rc.4",
|
||||
"@babel/register": "^7.0.0-rc.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -206,12 +206,29 @@ function makeSimpleConfigurator(
|
||||
return;
|
||||
}
|
||||
|
||||
return cache.using(val);
|
||||
return cache.using(() => assertSimpleType(val()));
|
||||
}
|
||||
cacheFn.forever = () => cache.forever();
|
||||
cacheFn.never = () => cache.never();
|
||||
cacheFn.using = cb => cache.using(() => cb());
|
||||
cacheFn.invalidate = cb => cache.invalidate(() => cb());
|
||||
cacheFn.using = cb => cache.using(() => assertSimpleType(cb()));
|
||||
cacheFn.invalidate = cb => cache.invalidate(() => assertSimpleType(cb()));
|
||||
|
||||
return (cacheFn: any);
|
||||
}
|
||||
|
||||
// Types are limited here so that in the future these values can be used
|
||||
// as part of Babel's caching logic.
|
||||
type SimpleType = string | boolean | number | null | void;
|
||||
export function assertSimpleType(value: mixed): SimpleType {
|
||||
if (
|
||||
value != null &&
|
||||
typeof value !== "string" &&
|
||||
typeof value !== "boolean" &&
|
||||
typeof value !== "number"
|
||||
) {
|
||||
throw new Error(
|
||||
"Cache keys must be either string, boolean, number, null, or undefined.",
|
||||
);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import {
|
||||
type IgnoreList,
|
||||
type ConfigApplicableTest,
|
||||
type BabelrcSearch,
|
||||
type CallerMetadata,
|
||||
} from "./validation/options";
|
||||
import pathPatternToRegex from "./pattern-to-regex";
|
||||
|
||||
@@ -50,12 +51,27 @@ export type ConfigContext = {
|
||||
cwd: string,
|
||||
root: string,
|
||||
envName: string,
|
||||
caller: CallerMetadata | void,
|
||||
};
|
||||
|
||||
/**
|
||||
* Build a config chain for a given preset.
|
||||
*/
|
||||
export const buildPresetChain: (
|
||||
export function buildPresetChain(
|
||||
arg: PresetInstance,
|
||||
context: *,
|
||||
): ConfigChain | null {
|
||||
const chain = buildPresetChainWalker(arg, context);
|
||||
if (!chain) return null;
|
||||
|
||||
return {
|
||||
plugins: dedupDescriptors(chain.plugins),
|
||||
presets: dedupDescriptors(chain.presets),
|
||||
options: chain.options,
|
||||
};
|
||||
}
|
||||
|
||||
export const buildPresetChainWalker: (
|
||||
arg: PresetInstance,
|
||||
context: *,
|
||||
) => * = makeChainWalker({
|
||||
@@ -128,9 +144,14 @@ export function buildRootChain(
|
||||
|
||||
let configFile;
|
||||
if (typeof opts.configFile === "string") {
|
||||
configFile = loadConfig(opts.configFile, context.cwd, context.envName);
|
||||
configFile = loadConfig(
|
||||
opts.configFile,
|
||||
context.cwd,
|
||||
context.envName,
|
||||
context.caller,
|
||||
);
|
||||
} else if (opts.configFile !== false) {
|
||||
configFile = findRootConfig(context.root, context.envName);
|
||||
configFile = findRootConfig(context.root, context.envName, context.caller);
|
||||
}
|
||||
|
||||
let { babelrc, babelrcRoots } = opts;
|
||||
@@ -234,7 +255,7 @@ function babelrcLoadEnabled(
|
||||
if (typeof pat === "string") pat = pathPatternToRegex(pat, context.cwd);
|
||||
|
||||
return pkgData.directories.some(directory => {
|
||||
return matchPattern(pat, context.cwd, directory);
|
||||
return matchPattern(pat, context.cwd, directory, context);
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -449,7 +470,12 @@ function mergeExtendsChain(
|
||||
): boolean {
|
||||
if (opts.extends === undefined) return true;
|
||||
|
||||
const file = loadConfig(opts.extends, dirname, context.envName);
|
||||
const file = loadConfig(
|
||||
opts.extends,
|
||||
dirname,
|
||||
context.envName,
|
||||
context.caller,
|
||||
);
|
||||
|
||||
if (files.has(file)) {
|
||||
throw new Error(
|
||||
@@ -527,7 +553,7 @@ function dedupDescriptors(
|
||||
): Array<UnloadedDescriptor> {
|
||||
const map: Map<
|
||||
Function,
|
||||
Map<string | void, { value: UnloadedDescriptor | null }>,
|
||||
Map<string | void, { value: UnloadedDescriptor }>,
|
||||
> = new Map();
|
||||
|
||||
const descriptors = [];
|
||||
@@ -542,16 +568,12 @@ function dedupDescriptors(
|
||||
}
|
||||
let desc = nameMap.get(item.name);
|
||||
if (!desc) {
|
||||
desc = { value: null };
|
||||
desc = { value: item };
|
||||
descriptors.push(desc);
|
||||
|
||||
// Treat passPerPreset presets as unique, skipping them
|
||||
// in the merge processing steps.
|
||||
if (!item.ownPass) nameMap.set(item.name, desc);
|
||||
}
|
||||
|
||||
if (item.options === false) {
|
||||
desc.value = null;
|
||||
} else {
|
||||
desc.value = item;
|
||||
}
|
||||
@@ -561,7 +583,7 @@ function dedupDescriptors(
|
||||
}
|
||||
|
||||
return descriptors.reduce((acc, desc) => {
|
||||
if (desc.value) acc.push(desc.value);
|
||||
acc.push(desc.value);
|
||||
return acc;
|
||||
}, []);
|
||||
}
|
||||
@@ -633,12 +655,23 @@ function matchesPatterns(
|
||||
dirname: string,
|
||||
): boolean {
|
||||
return patterns.some(pattern =>
|
||||
matchPattern(pattern, dirname, context.filename),
|
||||
matchPattern(pattern, dirname, context.filename, context),
|
||||
);
|
||||
}
|
||||
|
||||
function matchPattern(pattern, dirname, pathToTest): boolean {
|
||||
if (typeof pattern === "function") return !!pattern(pathToTest);
|
||||
function matchPattern(
|
||||
pattern,
|
||||
dirname,
|
||||
pathToTest,
|
||||
context: ConfigContext,
|
||||
): boolean {
|
||||
if (typeof pattern === "function") {
|
||||
return !!pattern(pathToTest, {
|
||||
dirname,
|
||||
envName: context.envName,
|
||||
caller: context.caller,
|
||||
});
|
||||
}
|
||||
|
||||
if (typeof pathToTest !== "string") {
|
||||
throw new Error(
|
||||
|
||||
@@ -41,6 +41,22 @@ export type UnloadedDescriptor = {
|
||||
} | void,
|
||||
};
|
||||
|
||||
function isEqualDescriptor(
|
||||
a: UnloadedDescriptor,
|
||||
b: UnloadedDescriptor,
|
||||
): boolean {
|
||||
return (
|
||||
a.name === b.name &&
|
||||
a.value === b.value &&
|
||||
a.options === b.options &&
|
||||
a.dirname === b.dirname &&
|
||||
a.alias === b.alias &&
|
||||
a.ownPass === b.ownPass &&
|
||||
(a.file && a.file.request) === (b.file && b.file.request) &&
|
||||
(a.file && a.file.resolved) === (b.file && b.file.resolved)
|
||||
);
|
||||
}
|
||||
|
||||
export type ValidatedFile = {
|
||||
filepath: string,
|
||||
dirname: string,
|
||||
@@ -50,7 +66,7 @@ export type ValidatedFile = {
|
||||
/**
|
||||
* Create a set of descriptors from a given options object, preserving
|
||||
* descriptor identity based on the identity of the plugin/preset arrays
|
||||
* themselves.
|
||||
* themselves, and potentially on the identity of the plugins/presets + options.
|
||||
*/
|
||||
export function createCachedDescriptors(
|
||||
dirname: string,
|
||||
@@ -113,26 +129,82 @@ export function createUncachedDescriptors(
|
||||
};
|
||||
}
|
||||
|
||||
const PRESET_DESCRIPTOR_CACHE = new WeakMap();
|
||||
const createCachedPresetDescriptors = makeWeakCache(
|
||||
(items: PluginList, cache: CacheConfigurator<string>) => {
|
||||
const dirname = cache.using(dir => dir);
|
||||
return makeStrongCache((alias: string) =>
|
||||
makeStrongCache((passPerPreset: boolean) =>
|
||||
createPresetDescriptors(items, dirname, alias, passPerPreset),
|
||||
createPresetDescriptors(items, dirname, alias, passPerPreset).map(
|
||||
// Items are cached using the overall preset array identity when
|
||||
// possibly, but individual descriptors are also cached if a match
|
||||
// can be found in the previously-used descriptor lists.
|
||||
desc => loadCachedDescriptor(PRESET_DESCRIPTOR_CACHE, desc),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
const PLUGIN_DESCRIPTOR_CACHE = new WeakMap();
|
||||
const createCachedPluginDescriptors = makeWeakCache(
|
||||
(items: PluginList, cache: CacheConfigurator<string>) => {
|
||||
const dirname = cache.using(dir => dir);
|
||||
return makeStrongCache((alias: string) =>
|
||||
createPluginDescriptors(items, dirname, alias),
|
||||
createPluginDescriptors(items, dirname, alias).map(
|
||||
// Items are cached using the overall plugin array identity when
|
||||
// possibly, but individual descriptors are also cached if a match
|
||||
// can be found in the previously-used descriptor lists.
|
||||
desc => loadCachedDescriptor(PLUGIN_DESCRIPTOR_CACHE, desc),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
/**
|
||||
* When no options object is given in a descriptor, this object is used
|
||||
* as a WeakMap key in order to have consistent identity.
|
||||
*/
|
||||
const DEFAULT_OPTIONS = {};
|
||||
|
||||
/**
|
||||
* Given the cache and a descriptor, returns a matching descriptor from the
|
||||
* cache, or else returns the input descriptor and adds it to the cache for
|
||||
* next time.
|
||||
*/
|
||||
function loadCachedDescriptor(
|
||||
cache: WeakMap<{} | Function, WeakMap<{}, Array<UnloadedDescriptor>>>,
|
||||
desc: UnloadedDescriptor,
|
||||
) {
|
||||
const { value, options = DEFAULT_OPTIONS } = desc;
|
||||
if (options === false) return desc;
|
||||
|
||||
let cacheByOptions = cache.get(value);
|
||||
if (!cacheByOptions) {
|
||||
cacheByOptions = new WeakMap();
|
||||
cache.set(value, cacheByOptions);
|
||||
}
|
||||
|
||||
let possibilities = cacheByOptions.get(options);
|
||||
if (!possibilities) {
|
||||
possibilities = [];
|
||||
cacheByOptions.set(options, possibilities);
|
||||
}
|
||||
|
||||
if (possibilities.indexOf(desc) === -1) {
|
||||
const matches = possibilities.filter(possibility =>
|
||||
isEqualDescriptor(possibility, desc),
|
||||
);
|
||||
if (matches.length > 0) {
|
||||
return matches[0];
|
||||
}
|
||||
|
||||
possibilities.push(desc);
|
||||
}
|
||||
|
||||
return desc;
|
||||
}
|
||||
|
||||
function createPresetDescriptors(
|
||||
items: PluginList,
|
||||
dirname: string,
|
||||
|
||||
@@ -14,6 +14,7 @@ import makeAPI from "../helpers/config-api";
|
||||
import { makeStaticFileCache } from "./utils";
|
||||
import pathPatternToRegex from "../pattern-to-regex";
|
||||
import type { FilePackageData, RelativeConfig, ConfigFile } from "./types";
|
||||
import type { CallerMetadata } from "../validation/options";
|
||||
|
||||
const debug = buildDebug("babel:config:loading:files:configuration");
|
||||
|
||||
@@ -26,6 +27,7 @@ const BABELIGNORE_FILENAME = ".babelignore";
|
||||
export function findRelativeConfig(
|
||||
packageData: FilePackageData,
|
||||
envName: string,
|
||||
caller: CallerMetadata | void,
|
||||
): RelativeConfig {
|
||||
let config = null;
|
||||
let ignore = null;
|
||||
@@ -37,7 +39,7 @@ export function findRelativeConfig(
|
||||
config = [BABELRC_FILENAME, BABELRC_JS_FILENAME].reduce(
|
||||
(previousConfig: ConfigFile | null, name) => {
|
||||
const filepath = path.join(loc, name);
|
||||
const config = readConfig(filepath, envName);
|
||||
const config = readConfig(filepath, envName, caller);
|
||||
|
||||
if (config && previousConfig) {
|
||||
throw new Error(
|
||||
@@ -91,10 +93,11 @@ export function findRelativeConfig(
|
||||
export function findRootConfig(
|
||||
dirname: string,
|
||||
envName: string,
|
||||
caller: CallerMetadata | void,
|
||||
): ConfigFile | null {
|
||||
const filepath = path.resolve(dirname, BABEL_CONFIG_JS_FILENAME);
|
||||
|
||||
const conf = readConfig(filepath, envName);
|
||||
const conf = readConfig(filepath, envName, caller);
|
||||
if (conf) {
|
||||
debug("Found root config %o in $o.", BABEL_CONFIG_JS_FILENAME, dirname);
|
||||
}
|
||||
@@ -105,10 +108,11 @@ export function loadConfig(
|
||||
name: string,
|
||||
dirname: string,
|
||||
envName: string,
|
||||
caller: CallerMetadata | void,
|
||||
): ConfigFile {
|
||||
const filepath = resolve.sync(name, { basedir: dirname });
|
||||
|
||||
const conf = readConfig(filepath, envName);
|
||||
const conf = readConfig(filepath, envName, caller);
|
||||
if (!conf) {
|
||||
throw new Error(`Config file ${filepath} contains no configuration data`);
|
||||
}
|
||||
@@ -121,16 +125,22 @@ export function loadConfig(
|
||||
* Read the given config file, returning the result. Returns null if no config was found, but will
|
||||
* throw if there are parsing errors while loading a config.
|
||||
*/
|
||||
function readConfig(filepath, envName): ConfigFile | null {
|
||||
function readConfig(filepath, envName, caller): ConfigFile | null {
|
||||
return path.extname(filepath) === ".js"
|
||||
? readConfigJS(filepath, { envName })
|
||||
? readConfigJS(filepath, { envName, caller })
|
||||
: readConfigJSON5(filepath);
|
||||
}
|
||||
|
||||
const LOADING_CONFIGS = new Set();
|
||||
|
||||
const readConfigJS = makeStrongCache(
|
||||
(filepath, cache: CacheConfigurator<{ envName: string }>) => {
|
||||
(
|
||||
filepath,
|
||||
cache: CacheConfigurator<{
|
||||
envName: string,
|
||||
caller: CallerMetadata | void,
|
||||
}>,
|
||||
) => {
|
||||
if (!fs.existsSync(filepath)) {
|
||||
cache.forever();
|
||||
return null;
|
||||
|
||||
@@ -7,6 +7,8 @@ import type {
|
||||
FilePackageData,
|
||||
} from "./types";
|
||||
|
||||
import type { CallerMetadata } from "../validation/options";
|
||||
|
||||
export type { ConfigFile, IgnoreFile, RelativeConfig, FilePackageData };
|
||||
|
||||
export function findPackageData(filepath: string): FilePackageData {
|
||||
@@ -21,6 +23,7 @@ export function findPackageData(filepath: string): FilePackageData {
|
||||
export function findRelativeConfig(
|
||||
pkgData: FilePackageData, // eslint-disable-line no-unused-vars
|
||||
envName: string, // eslint-disable-line no-unused-vars
|
||||
caller: CallerMetadata | void, // eslint-disable-line no-unused-vars
|
||||
): RelativeConfig {
|
||||
return { pkg: null, config: null, ignore: null };
|
||||
}
|
||||
@@ -28,6 +31,7 @@ export function findRelativeConfig(
|
||||
export function findRootConfig(
|
||||
dirname: string, // eslint-disable-line no-unused-vars
|
||||
envName: string, // eslint-disable-line no-unused-vars
|
||||
caller: CallerMetadata | void, // eslint-disable-line no-unused-vars
|
||||
): ConfigFile | null {
|
||||
return null;
|
||||
}
|
||||
@@ -36,6 +40,7 @@ export function loadConfig(
|
||||
name: string,
|
||||
dirname: string,
|
||||
envName: string, // eslint-disable-line no-unused-vars
|
||||
caller: CallerMetadata | void, // eslint-disable-line no-unused-vars
|
||||
): ConfigFile {
|
||||
throw new Error(`Cannot load ${name} relative to ${dirname} in a browser`);
|
||||
}
|
||||
|
||||
@@ -15,8 +15,8 @@ const BABEL_PLUGIN_PREFIX_RE = /^(?!@|module:|[^/]+\/|babel-plugin-)/;
|
||||
const BABEL_PRESET_PREFIX_RE = /^(?!@|module:|[^/]+\/|babel-preset-)/;
|
||||
const BABEL_PLUGIN_ORG_RE = /^(@babel\/)(?!plugin-|[^/]+\/)/;
|
||||
const BABEL_PRESET_ORG_RE = /^(@babel\/)(?!preset-|[^/]+\/)/;
|
||||
const OTHER_PLUGIN_ORG_RE = /^(@(?!babel\/)[^/]+\/)(?!babel-plugin(?:-|\/|$)|[^/]+\/)/;
|
||||
const OTHER_PRESET_ORG_RE = /^(@(?!babel\/)[^/]+\/)(?!babel-preset(?:-|\/|$)|[^/]+\/)/;
|
||||
const OTHER_PLUGIN_ORG_RE = /^(@(?!babel\/)[^/]+\/)(?![^/]*babel-plugin(?:-|\/|$)|[^/]+\/)/;
|
||||
const OTHER_PRESET_ORG_RE = /^(@(?!babel\/)[^/]+\/)(?![^/]*babel-preset(?:-|\/|$)|[^/]+\/)/;
|
||||
const OTHER_ORG_DEFAULT_RE = /^(@(?!babel$)[^/]+)$/;
|
||||
|
||||
export function resolvePlugin(name: string, dirname: string): string | null {
|
||||
|
||||
@@ -13,7 +13,7 @@ import {
|
||||
import type { UnloadedDescriptor } from "./config-descriptors";
|
||||
import traverse from "@babel/traverse";
|
||||
import { makeWeakCache, type CacheConfigurator } from "./caching";
|
||||
import { validate } from "./validation/options";
|
||||
import { validate, type CallerMetadata } from "./validation/options";
|
||||
import { validatePluginObject } from "./validation/plugins";
|
||||
import makeAPI from "./helpers/config-api";
|
||||
|
||||
@@ -41,6 +41,7 @@ export type PluginPasses = Array<PluginPassList>;
|
||||
// process 'ignore'/'only' and other filename-based logic.
|
||||
type SimpleContext = {
|
||||
envName: string,
|
||||
caller: CallerMetadata | void,
|
||||
};
|
||||
|
||||
export default function loadFullConfig(
|
||||
@@ -68,15 +69,21 @@ export default function loadFullConfig(
|
||||
},
|
||||
pass: Array<Plugin>,
|
||||
) {
|
||||
const plugins = config.plugins.map(descriptor => {
|
||||
return loadPluginDescriptor(descriptor, context);
|
||||
});
|
||||
const presets = config.presets.map(descriptor => {
|
||||
return {
|
||||
preset: loadPresetDescriptor(descriptor, context),
|
||||
pass: descriptor.ownPass ? [] : pass,
|
||||
};
|
||||
});
|
||||
const plugins = config.plugins.reduce((acc, descriptor) => {
|
||||
if (descriptor.options !== false) {
|
||||
acc.push(loadPluginDescriptor(descriptor, context));
|
||||
}
|
||||
return acc;
|
||||
}, []);
|
||||
const presets = config.presets.reduce((acc, descriptor) => {
|
||||
if (descriptor.options !== false) {
|
||||
acc.push({
|
||||
preset: loadPresetDescriptor(descriptor, context),
|
||||
pass: descriptor.ownPass ? [] : pass,
|
||||
});
|
||||
}
|
||||
return acc;
|
||||
}, []);
|
||||
|
||||
// resolve presets
|
||||
if (presets.length > 0) {
|
||||
|
||||
@@ -2,7 +2,13 @@
|
||||
|
||||
import semver from "semver";
|
||||
import { version as coreVersion } from "../../";
|
||||
import type { CacheConfigurator, SimpleCacheConfigurator } from "../caching";
|
||||
import {
|
||||
assertSimpleType,
|
||||
type CacheConfigurator,
|
||||
type SimpleCacheConfigurator,
|
||||
} from "../caching";
|
||||
|
||||
import type { CallerMetadata } from "../validation/options";
|
||||
|
||||
type EnvFunction = {
|
||||
(): string,
|
||||
@@ -20,12 +26,14 @@ export type PluginAPI = {
|
||||
};
|
||||
|
||||
export default function makeAPI(
|
||||
cache: CacheConfigurator<{ envName: string }>,
|
||||
cache: CacheConfigurator<{ envName: string, caller: CallerMetadata | void }>,
|
||||
): PluginAPI {
|
||||
const env: any = value =>
|
||||
cache.using(data => {
|
||||
if (typeof value === "undefined") return data.envName;
|
||||
if (typeof value === "function") return value(data.envName);
|
||||
if (typeof value === "function") {
|
||||
return assertSimpleType(value(data.envName));
|
||||
}
|
||||
if (!Array.isArray(value)) value = [value];
|
||||
|
||||
return value.some(entry => {
|
||||
@@ -36,12 +44,16 @@ export default function makeAPI(
|
||||
});
|
||||
});
|
||||
|
||||
const caller: any = cb =>
|
||||
cache.using(data => assertSimpleType(cb(data.caller)));
|
||||
|
||||
return {
|
||||
version: coreVersion,
|
||||
cache: cache.simple(),
|
||||
// Expose ".env()" so people can easily get the same env that we expose using the "env" key.
|
||||
env,
|
||||
async: () => false,
|
||||
caller,
|
||||
assertVersion,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -71,9 +71,11 @@ class ConfigItem {
|
||||
|
||||
/**
|
||||
* The options, if any, that were passed to the item.
|
||||
* Mutating this will lead to undefined behavior. If you need
|
||||
* Mutating this will lead to undefined behavior.
|
||||
*
|
||||
* "false" means that this item has been disabled.
|
||||
*/
|
||||
options: {} | void;
|
||||
options: {} | void | false;
|
||||
|
||||
/**
|
||||
* The directory that the options for this item are relative to.
|
||||
@@ -103,10 +105,6 @@ class ConfigItem {
|
||||
this._descriptor = descriptor;
|
||||
Object.defineProperty(this, "_descriptor", ({ enumerable: false }: any));
|
||||
|
||||
if (this._descriptor.options === false) {
|
||||
throw new Error("Assertion failure - unexpected false options");
|
||||
}
|
||||
|
||||
this.value = this._descriptor.value;
|
||||
this.options = this._descriptor.options;
|
||||
this.dirname = this._descriptor.dirname;
|
||||
|
||||
@@ -28,7 +28,7 @@ export default function loadPrivatePartialConfig(
|
||||
|
||||
const args = inputOpts ? validate("arguments", inputOpts) : {};
|
||||
|
||||
const { envName = getEnv(), cwd = ".", root: rootDir = "." } = args;
|
||||
const { envName = getEnv(), cwd = ".", root: rootDir = ".", caller } = args;
|
||||
const absoluteCwd = path.resolve(cwd);
|
||||
const absoluteRootDir = path.resolve(absoluteCwd, rootDir);
|
||||
|
||||
@@ -40,6 +40,7 @@ export default function loadPrivatePartialConfig(
|
||||
cwd: absoluteCwd,
|
||||
root: absoluteRootDir,
|
||||
envName,
|
||||
caller,
|
||||
};
|
||||
|
||||
const configChain = buildRootChain(args, context);
|
||||
|
||||
@@ -13,16 +13,55 @@ import type {
|
||||
SourceTypeOption,
|
||||
CompactOption,
|
||||
RootInputSourceMapOption,
|
||||
NestingPath,
|
||||
CallerMetadata,
|
||||
} from "./options";
|
||||
|
||||
export type ValidatorSet = {
|
||||
[string]: Validator<any>,
|
||||
};
|
||||
|
||||
export type Validator<T> = (string, mixed) => T;
|
||||
export type Validator<T> = (OptionPath, mixed) => T;
|
||||
|
||||
export function msg(loc: NestingPath | GeneralPath) {
|
||||
switch (loc.type) {
|
||||
case "root":
|
||||
return ``;
|
||||
case "env":
|
||||
return `${msg(loc.parent)}.env["${loc.name}"]`;
|
||||
case "overrides":
|
||||
return `${msg(loc.parent)}.overrides[${loc.index}]`;
|
||||
case "option":
|
||||
return `${msg(loc.parent)}.${loc.name}`;
|
||||
case "access":
|
||||
return `${msg(loc.parent)}[${JSON.stringify(loc.name)}]`;
|
||||
default:
|
||||
throw new Error(`Assertion failure: Unknown type ${loc.type}`);
|
||||
}
|
||||
}
|
||||
|
||||
export function access(loc: GeneralPath, name: string | number): AccessPath {
|
||||
return {
|
||||
type: "access",
|
||||
name,
|
||||
parent: loc,
|
||||
};
|
||||
}
|
||||
|
||||
export type OptionPath = $ReadOnly<{
|
||||
type: "option",
|
||||
name: string,
|
||||
parent: NestingPath,
|
||||
}>;
|
||||
type AccessPath = $ReadOnly<{
|
||||
type: "access",
|
||||
name: string | number,
|
||||
parent: GeneralPath,
|
||||
}>;
|
||||
type GeneralPath = OptionPath | AccessPath;
|
||||
|
||||
export function assertSourceMaps(
|
||||
key: string,
|
||||
loc: OptionPath,
|
||||
value: mixed,
|
||||
): SourceMapsOption | void {
|
||||
if (
|
||||
@@ -32,21 +71,24 @@ export function assertSourceMaps(
|
||||
value !== "both"
|
||||
) {
|
||||
throw new Error(
|
||||
`.${key} must be a boolean, "inline", "both", or undefined`,
|
||||
`${msg(loc)} must be a boolean, "inline", "both", or undefined`,
|
||||
);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
export function assertCompact(key: string, value: mixed): CompactOption | void {
|
||||
export function assertCompact(
|
||||
loc: OptionPath,
|
||||
value: mixed,
|
||||
): CompactOption | void {
|
||||
if (value !== undefined && typeof value !== "boolean" && value !== "auto") {
|
||||
throw new Error(`.${key} must be a boolean, "auto", or undefined`);
|
||||
throw new Error(`${msg(loc)} must be a boolean, "auto", or undefined`);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
export function assertSourceType(
|
||||
key: string,
|
||||
loc: OptionPath,
|
||||
value: mixed,
|
||||
): SourceTypeOption | void {
|
||||
if (
|
||||
@@ -56,14 +98,49 @@ export function assertSourceType(
|
||||
value !== "unambiguous"
|
||||
) {
|
||||
throw new Error(
|
||||
`.${key} must be "module", "script", "unambiguous", or undefined`,
|
||||
`${msg(loc)} must be "module", "script", "unambiguous", or undefined`,
|
||||
);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
export function assertCallerMetadata(
|
||||
loc: OptionPath,
|
||||
value: mixed,
|
||||
): CallerMetadata | void {
|
||||
const obj = assertObject(loc, value);
|
||||
if (obj) {
|
||||
if (typeof obj[("name": string)] !== "string") {
|
||||
throw new Error(
|
||||
`${msg(loc)} set but does not contain "name" property string`,
|
||||
);
|
||||
}
|
||||
|
||||
for (const prop of Object.keys(obj)) {
|
||||
const propLoc = access(loc, prop);
|
||||
const value = obj[prop];
|
||||
if (
|
||||
value != null &&
|
||||
typeof value !== "boolean" &&
|
||||
typeof value !== "string" &&
|
||||
typeof value !== "number"
|
||||
) {
|
||||
// NOTE(logan): I'm limiting the type here so that we can guarantee that
|
||||
// the "caller" value will serialize to JSON nicely. We can always
|
||||
// allow more complex structures later though.
|
||||
throw new Error(
|
||||
`${msg(
|
||||
propLoc,
|
||||
)} must be null, undefined, a boolean, a string, or a number.`,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
return (value: any);
|
||||
}
|
||||
|
||||
export function assertInputSourceMap(
|
||||
key: string,
|
||||
loc: OptionPath,
|
||||
value: mixed,
|
||||
): RootInputSourceMapOption | void {
|
||||
if (
|
||||
@@ -71,75 +148,82 @@ export function assertInputSourceMap(
|
||||
typeof value !== "boolean" &&
|
||||
(typeof value !== "object" || !value)
|
||||
) {
|
||||
throw new Error(".inputSourceMap must be a boolean, object, or undefined");
|
||||
throw new Error(`${msg(loc)} must be a boolean, object, or undefined`);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
export function assertString(key: string, value: mixed): string | void {
|
||||
export function assertString(loc: GeneralPath, value: mixed): string | void {
|
||||
if (value !== undefined && typeof value !== "string") {
|
||||
throw new Error(`.${key} must be a string, or undefined`);
|
||||
throw new Error(`${msg(loc)} must be a string, or undefined`);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
export function assertFunction(key: string, value: mixed): Function | void {
|
||||
export function assertFunction(
|
||||
loc: GeneralPath,
|
||||
value: mixed,
|
||||
): Function | void {
|
||||
if (value !== undefined && typeof value !== "function") {
|
||||
throw new Error(`.${key} must be a function, or undefined`);
|
||||
throw new Error(`${msg(loc)} must be a function, or undefined`);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
export function assertBoolean(key: string, value: mixed): boolean | void {
|
||||
export function assertBoolean(loc: GeneralPath, value: mixed): boolean | void {
|
||||
if (value !== undefined && typeof value !== "boolean") {
|
||||
throw new Error(`.${key} must be a boolean, or undefined`);
|
||||
throw new Error(`${msg(loc)} must be a boolean, or undefined`);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
export function assertObject(key: string, value: mixed): {} | void {
|
||||
export function assertObject(loc: GeneralPath, value: mixed): {} | void {
|
||||
if (
|
||||
value !== undefined &&
|
||||
(typeof value !== "object" || Array.isArray(value) || !value)
|
||||
) {
|
||||
throw new Error(`.${key} must be an object, or undefined`);
|
||||
throw new Error(`${msg(loc)} must be an object, or undefined`);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
export function assertArray(key: string, value: mixed): ?$ReadOnlyArray<mixed> {
|
||||
export function assertArray(
|
||||
loc: GeneralPath,
|
||||
value: mixed,
|
||||
): ?$ReadOnlyArray<mixed> {
|
||||
if (value != null && !Array.isArray(value)) {
|
||||
throw new Error(`.${key} must be an array, or undefined`);
|
||||
throw new Error(`${msg(loc)} must be an array, or undefined`);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
export function assertIgnoreList(key: string, value: mixed): IgnoreList | void {
|
||||
const arr = assertArray(key, value);
|
||||
export function assertIgnoreList(
|
||||
loc: OptionPath,
|
||||
value: mixed,
|
||||
): IgnoreList | void {
|
||||
const arr = assertArray(loc, value);
|
||||
if (arr) {
|
||||
arr.forEach((item, i) => assertIgnoreItem(key, i, item));
|
||||
arr.forEach((item, i) => assertIgnoreItem(access(loc, i), item));
|
||||
}
|
||||
return (arr: any);
|
||||
}
|
||||
function assertIgnoreItem(
|
||||
key: string,
|
||||
index: number,
|
||||
value: mixed,
|
||||
): IgnoreItem {
|
||||
function assertIgnoreItem(loc: GeneralPath, value: mixed): IgnoreItem {
|
||||
if (
|
||||
typeof value !== "string" &&
|
||||
typeof value !== "function" &&
|
||||
!(value instanceof RegExp)
|
||||
) {
|
||||
throw new Error(
|
||||
`.${key}[${index}] must be an array of string/Funtion/RegExp values, or undefined`,
|
||||
`${msg(
|
||||
loc,
|
||||
)} must be an array of string/Funtion/RegExp values, or undefined`,
|
||||
);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
export function assertConfigApplicableTest(
|
||||
key: string,
|
||||
loc: OptionPath,
|
||||
value: mixed,
|
||||
): ConfigApplicableTest | void {
|
||||
if (value === undefined) return value;
|
||||
@@ -147,12 +231,14 @@ export function assertConfigApplicableTest(
|
||||
if (Array.isArray(value)) {
|
||||
value.forEach((item, i) => {
|
||||
if (!checkValidTest(item)) {
|
||||
throw new Error(`.${key}[${i}] must be a string/Function/RegExp.`);
|
||||
throw new Error(
|
||||
`${msg(access(loc, i))} must be a string/Function/RegExp.`,
|
||||
);
|
||||
}
|
||||
});
|
||||
} else if (!checkValidTest(value)) {
|
||||
throw new Error(
|
||||
`.${key} must be a string/Function/RegExp, or an array of those`,
|
||||
`${msg(loc)} must be a string/Function/RegExp, or an array of those`,
|
||||
);
|
||||
}
|
||||
return (value: any);
|
||||
@@ -167,7 +253,7 @@ function checkValidTest(value: mixed): boolean {
|
||||
}
|
||||
|
||||
export function assertConfigFileSearch(
|
||||
key: string,
|
||||
loc: OptionPath,
|
||||
value: mixed,
|
||||
): ConfigFileSearch | void {
|
||||
if (
|
||||
@@ -176,7 +262,7 @@ export function assertConfigFileSearch(
|
||||
typeof value !== "string"
|
||||
) {
|
||||
throw new Error(
|
||||
`.${key} must be a undefined, a boolean, a string, ` +
|
||||
`${msg(loc)} must be a undefined, a boolean, a string, ` +
|
||||
`got ${JSON.stringify(value)}`,
|
||||
);
|
||||
}
|
||||
@@ -185,7 +271,7 @@ export function assertConfigFileSearch(
|
||||
}
|
||||
|
||||
export function assertBabelrcSearch(
|
||||
key: string,
|
||||
loc: OptionPath,
|
||||
value: mixed,
|
||||
): BabelrcSearch | void {
|
||||
if (value === undefined || typeof value === "boolean") return value;
|
||||
@@ -193,44 +279,43 @@ export function assertBabelrcSearch(
|
||||
if (Array.isArray(value)) {
|
||||
value.forEach((item, i) => {
|
||||
if (!checkValidTest(item)) {
|
||||
throw new Error(`.${key}[${i}] must be a string/Function/RegExp.`);
|
||||
throw new Error(
|
||||
`${msg(access(loc, i))} must be a string/Function/RegExp.`,
|
||||
);
|
||||
}
|
||||
});
|
||||
} else if (!checkValidTest(value)) {
|
||||
throw new Error(
|
||||
`.${key} must be a undefined, a boolean, a string/Function/RegExp ` +
|
||||
`${msg(loc)} must be a undefined, a boolean, a string/Function/RegExp ` +
|
||||
`or an array of those, got ${JSON.stringify(value)}`,
|
||||
);
|
||||
}
|
||||
return (value: any);
|
||||
}
|
||||
|
||||
export function assertPluginList(key: string, value: mixed): PluginList | void {
|
||||
const arr = assertArray(key, value);
|
||||
export function assertPluginList(
|
||||
loc: OptionPath,
|
||||
value: mixed,
|
||||
): PluginList | void {
|
||||
const arr = assertArray(loc, value);
|
||||
if (arr) {
|
||||
// Loop instead of using `.map` in order to preserve object identity
|
||||
// for plugin array for use during config chain processing.
|
||||
arr.forEach((item, i) => assertPluginItem(key, i, item));
|
||||
arr.forEach((item, i) => assertPluginItem(access(loc, i), item));
|
||||
}
|
||||
return (arr: any);
|
||||
}
|
||||
function assertPluginItem(
|
||||
key: string,
|
||||
index: number,
|
||||
value: mixed,
|
||||
): PluginItem {
|
||||
function assertPluginItem(loc: GeneralPath, value: mixed): PluginItem {
|
||||
if (Array.isArray(value)) {
|
||||
if (value.length === 0) {
|
||||
throw new Error(`.${key}[${index}] must include an object`);
|
||||
throw new Error(`${msg(loc)} must include an object`);
|
||||
}
|
||||
|
||||
if (value.length > 3) {
|
||||
throw new Error(
|
||||
`.${key}[${index}] may only be a two-tuple or three-tuple`,
|
||||
);
|
||||
throw new Error(`${msg(loc)} may only be a two-tuple or three-tuple`);
|
||||
}
|
||||
|
||||
assertPluginTarget(key, index, true, value[0]);
|
||||
assertPluginTarget(access(loc, 0), value[0]);
|
||||
|
||||
if (value.length > 1) {
|
||||
const opts = value[1];
|
||||
@@ -240,38 +325,31 @@ function assertPluginItem(
|
||||
(typeof opts !== "object" || Array.isArray(opts))
|
||||
) {
|
||||
throw new Error(
|
||||
`.${key}[${index}][1] must be an object, false, or undefined`,
|
||||
`${msg(access(loc, 1))} must be an object, false, or undefined`,
|
||||
);
|
||||
}
|
||||
}
|
||||
if (value.length === 3) {
|
||||
const name = value[2];
|
||||
if (name !== undefined && typeof name !== "string") {
|
||||
throw new Error(`.${key}[${index}][2] must be a string, or undefined`);
|
||||
throw new Error(
|
||||
`${msg(access(loc, 2))} must be a string, or undefined`,
|
||||
);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
assertPluginTarget(key, index, false, value);
|
||||
assertPluginTarget(loc, value);
|
||||
}
|
||||
|
||||
return (value: any);
|
||||
}
|
||||
function assertPluginTarget(
|
||||
key: string,
|
||||
index: number,
|
||||
inArray: boolean,
|
||||
value: mixed,
|
||||
): PluginTarget {
|
||||
function assertPluginTarget(loc: GeneralPath, value: mixed): PluginTarget {
|
||||
if (
|
||||
(typeof value !== "object" || !value) &&
|
||||
typeof value !== "string" &&
|
||||
typeof value !== "function"
|
||||
) {
|
||||
throw new Error(
|
||||
`.${key}[${index}]${
|
||||
inArray ? `[0]` : ""
|
||||
} must be a string, object, function`,
|
||||
);
|
||||
throw new Error(`${msg(loc)} must be a string, object, function`);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -5,10 +5,13 @@ import Plugin from "../plugin";
|
||||
|
||||
import removed from "./removed";
|
||||
import {
|
||||
msg,
|
||||
access,
|
||||
assertString,
|
||||
assertBoolean,
|
||||
assertObject,
|
||||
assertArray,
|
||||
assertCallerMetadata,
|
||||
assertInputSourceMap,
|
||||
assertIgnoreList,
|
||||
assertPluginList,
|
||||
@@ -21,6 +24,7 @@ import {
|
||||
assertSourceType,
|
||||
type ValidatorSet,
|
||||
type Validator,
|
||||
type OptionPath,
|
||||
} from "./option-assertions";
|
||||
|
||||
const ROOT_VALIDATORS: ValidatorSet = {
|
||||
@@ -30,6 +34,9 @@ const ROOT_VALIDATORS: ValidatorSet = {
|
||||
$PropertyType<ValidatedOptions, "configFile">,
|
||||
>),
|
||||
|
||||
caller: (assertCallerMetadata: Validator<
|
||||
$PropertyType<ValidatedOptions, "caller">,
|
||||
>),
|
||||
filename: (assertString: Validator<
|
||||
$PropertyType<ValidatedOptions, "filename">,
|
||||
>),
|
||||
@@ -173,6 +180,7 @@ export type ValidatedOptions = {
|
||||
ast?: boolean,
|
||||
inputSourceMap?: RootInputSourceMapOption,
|
||||
envName?: string,
|
||||
caller?: CallerMetadata,
|
||||
|
||||
extends?: string,
|
||||
env?: EnvSet<ValidatedOptions>,
|
||||
@@ -222,6 +230,11 @@ export type ValidatedOptions = {
|
||||
generatorOpts?: {},
|
||||
};
|
||||
|
||||
export type CallerMetadata = {
|
||||
// If 'caller' is specified, require that the name is given for debugging
|
||||
// messages.
|
||||
name: string,
|
||||
};
|
||||
export type EnvSet<T> = {
|
||||
[string]: ?T,
|
||||
};
|
||||
@@ -248,24 +261,62 @@ export type SourceTypeOption = "module" | "script" | "unambiguous";
|
||||
export type CompactOption = boolean | "auto";
|
||||
export type RootInputSourceMapOption = {} | boolean;
|
||||
|
||||
export type OptionsType =
|
||||
export type OptionsSource =
|
||||
| "arguments"
|
||||
| "env"
|
||||
| "preset"
|
||||
| "override"
|
||||
| "configfile"
|
||||
| "babelrcfile"
|
||||
| "extendsfile";
|
||||
| "extendsfile"
|
||||
| "preset";
|
||||
|
||||
type RootPath = $ReadOnly<{
|
||||
type: "root",
|
||||
source: OptionsSource,
|
||||
}>;
|
||||
type OverridesPath = $ReadOnly<{
|
||||
type: "overrides",
|
||||
index: number,
|
||||
parent: RootPath,
|
||||
}>;
|
||||
type EnvPath = $ReadOnly<{
|
||||
type: "env",
|
||||
name: string,
|
||||
parent: RootPath | OverridesPath,
|
||||
}>;
|
||||
export type NestingPath = RootPath | OverridesPath | EnvPath;
|
||||
|
||||
function getSource(loc: NestingPath): OptionsSource {
|
||||
return loc.type === "root" ? loc.source : getSource(loc.parent);
|
||||
}
|
||||
|
||||
export function validate(type: OptionsSource, opts: {}): ValidatedOptions {
|
||||
return validateNested(
|
||||
{
|
||||
type: "root",
|
||||
source: type,
|
||||
},
|
||||
opts,
|
||||
);
|
||||
}
|
||||
|
||||
function validateNested(loc: NestingPath, opts: {}) {
|
||||
const type = getSource(loc);
|
||||
|
||||
export function validate(type: OptionsType, opts: {}): ValidatedOptions {
|
||||
assertNoDuplicateSourcemap(opts);
|
||||
|
||||
Object.keys(opts).forEach(key => {
|
||||
const optLoc = {
|
||||
type: "option",
|
||||
name: key,
|
||||
parent: loc,
|
||||
};
|
||||
|
||||
if (type === "preset" && NONPRESET_VALIDATORS[key]) {
|
||||
throw new Error(`.${key} is not allowed in preset options`);
|
||||
throw new Error(`${msg(optLoc)} is not allowed in preset options`);
|
||||
}
|
||||
if (type !== "arguments" && ROOT_VALIDATORS[key]) {
|
||||
throw new Error(`.${key} is only allowed in root programmatic options`);
|
||||
throw new Error(
|
||||
`${msg(optLoc)} is only allowed in root programmatic options`,
|
||||
);
|
||||
}
|
||||
if (
|
||||
type !== "arguments" &&
|
||||
@@ -274,48 +325,47 @@ export function validate(type: OptionsType, opts: {}): ValidatedOptions {
|
||||
) {
|
||||
if (type === "babelrcfile" || type === "extendsfile") {
|
||||
throw new Error(
|
||||
`.${key} is not allowed in .babelrc or "extend"ed files, only in root programmatic options, ` +
|
||||
`${msg(
|
||||
optLoc,
|
||||
)} is not allowed in .babelrc or "extends"ed files, only in root programmatic options, ` +
|
||||
`or babel.config.js/config file options`,
|
||||
);
|
||||
}
|
||||
|
||||
throw new Error(
|
||||
`.${key} is only allowed in root programmatic options, or babel.config.js/config file options`,
|
||||
`${msg(
|
||||
optLoc,
|
||||
)} is only allowed in root programmatic options, or babel.config.js/config file options`,
|
||||
);
|
||||
}
|
||||
if (type === "env" && key === "env") {
|
||||
throw new Error(`.${key} is not allowed inside another env block`);
|
||||
}
|
||||
if (type === "env" && key === "overrides") {
|
||||
throw new Error(`.${key} is not allowed inside an env block`);
|
||||
}
|
||||
if (type === "override" && key === "overrides") {
|
||||
throw new Error(`.${key} is not allowed inside an overrides block`);
|
||||
}
|
||||
|
||||
const validator =
|
||||
COMMON_VALIDATORS[key] ||
|
||||
NONPRESET_VALIDATORS[key] ||
|
||||
BABELRC_VALIDATORS[key] ||
|
||||
ROOT_VALIDATORS[key];
|
||||
ROOT_VALIDATORS[key] ||
|
||||
throwUnknownError;
|
||||
|
||||
if (validator) validator(key, opts[key]);
|
||||
else throw buildUnknownError(key);
|
||||
validator(optLoc, opts[key]);
|
||||
});
|
||||
|
||||
return (opts: any);
|
||||
}
|
||||
|
||||
function buildUnknownError(key: string) {
|
||||
function throwUnknownError(loc: OptionPath) {
|
||||
const key = loc.name;
|
||||
|
||||
if (removed[key]) {
|
||||
const { message, version = 5 } = removed[key];
|
||||
|
||||
throw new ReferenceError(
|
||||
`Using removed Babel ${version} option: .${key} - ${message}`,
|
||||
`Using removed Babel ${version} option: ${msg(loc)} - ${message}`,
|
||||
);
|
||||
} else {
|
||||
// eslint-disable-next-line max-len
|
||||
const unknownOptErr = `Unknown option: .${key}. Check out http://babeljs.io/docs/usage/options/ for more information about options.`;
|
||||
const unknownOptErr = `Unknown option: ${msg(
|
||||
loc,
|
||||
)}. Check out https://babeljs.io/docs/en/babel-core/#options for more information about options.`;
|
||||
|
||||
throw new ReferenceError(unknownOptErr);
|
||||
}
|
||||
@@ -331,27 +381,53 @@ function assertNoDuplicateSourcemap(opts: {}): void {
|
||||
}
|
||||
}
|
||||
|
||||
function assertEnvSet(key: string, value: mixed): EnvSet<ValidatedOptions> {
|
||||
const obj = assertObject(key, value);
|
||||
function assertEnvSet(loc: OptionPath, value: mixed): EnvSet<ValidatedOptions> {
|
||||
if (loc.parent.type === "env") {
|
||||
throw new Error(`${msg(loc)} is not allowed inside of another .env block`);
|
||||
}
|
||||
const parent: RootPath | OverridesPath = loc.parent;
|
||||
|
||||
const obj = assertObject(loc, value);
|
||||
if (obj) {
|
||||
// Validate but don't copy the .env object in order to preserve
|
||||
// object identity for use during config chain processing.
|
||||
for (const key of Object.keys(obj)) {
|
||||
const env = assertObject(key, obj[key]);
|
||||
if (env) validate("env", env);
|
||||
for (const envName of Object.keys(obj)) {
|
||||
const env = assertObject(access(loc, envName), obj[envName]);
|
||||
if (!env) continue;
|
||||
|
||||
const envLoc = {
|
||||
type: "env",
|
||||
name: envName,
|
||||
parent,
|
||||
};
|
||||
validateNested(envLoc, env);
|
||||
}
|
||||
}
|
||||
return (obj: any);
|
||||
}
|
||||
|
||||
function assertOverridesList(key: string, value: mixed): OverridesList {
|
||||
const arr = assertArray(key, value);
|
||||
function assertOverridesList(loc: OptionPath, value: mixed): OverridesList {
|
||||
if (loc.parent.type === "env") {
|
||||
throw new Error(`${msg(loc)} is not allowed inside an .env block`);
|
||||
}
|
||||
if (loc.parent.type === "overrides") {
|
||||
throw new Error(`${msg(loc)} is not allowed inside an .overrides block`);
|
||||
}
|
||||
const parent: RootPath = loc.parent;
|
||||
|
||||
const arr = assertArray(loc, value);
|
||||
if (arr) {
|
||||
for (const [index, item] of arr.entries()) {
|
||||
const env = assertObject(`${index}`, item);
|
||||
if (!env) throw new Error(`.${key}[${index}] must be an object`);
|
||||
const objLoc = access(loc, index);
|
||||
const env = assertObject(objLoc, item);
|
||||
if (!env) throw new Error(`${msg(objLoc)} must be an object`);
|
||||
|
||||
validate("override", env);
|
||||
const overridesLoc = {
|
||||
type: "overrides",
|
||||
index,
|
||||
parent,
|
||||
};
|
||||
validateNested(overridesLoc, env);
|
||||
}
|
||||
}
|
||||
return (arr: any);
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
// @flow
|
||||
|
||||
import * as helpers from "@babel/helpers";
|
||||
import { NodePath, Hub, Scope } from "@babel/traverse";
|
||||
import { NodePath, Scope, type HubInterface } from "@babel/traverse";
|
||||
import { codeFrameColumns } from "@babel/code-frame";
|
||||
import traverse from "@babel/traverse";
|
||||
import * as t from "@babel/types";
|
||||
import semver from "semver";
|
||||
|
||||
import type { NormalizedFile } from "../normalize-file";
|
||||
|
||||
@@ -26,10 +27,18 @@ export default class File {
|
||||
ast: Object = {};
|
||||
scope: Scope;
|
||||
metadata: {} = {};
|
||||
hub: Hub = new Hub(this);
|
||||
code: string = "";
|
||||
inputMap: Object | null = null;
|
||||
|
||||
hub: HubInterface = {
|
||||
// keep it for the usage in babel-core, ex: path.hub.file.opts.filename
|
||||
file: this,
|
||||
getCode: () => this.code,
|
||||
getScope: () => this.scope,
|
||||
addHelper: this.addHelper.bind(this),
|
||||
buildError: this.buildCodeFrameError.bind(this),
|
||||
};
|
||||
|
||||
constructor(options: {}, { code, ast, inputMap }: NormalizedFile) {
|
||||
this.opts = options;
|
||||
this.code = code;
|
||||
@@ -64,6 +73,16 @@ export default class File {
|
||||
}
|
||||
|
||||
set(key: mixed, val: mixed) {
|
||||
if (key === "helpersNamespace") {
|
||||
throw new Error(
|
||||
"Babel 7.0.0-beta.56 has dropped support for the 'helpersNamespace' utility." +
|
||||
"If you are using @babel/plugin-external-helpers you will need to use a newer " +
|
||||
"version than the one you currently have installed. " +
|
||||
"If you have your own implementation, you'll want to explore using 'helperGenerator' " +
|
||||
"alongside 'file.availableHelper()'.",
|
||||
);
|
||||
}
|
||||
|
||||
this._map.set(key, val);
|
||||
}
|
||||
|
||||
@@ -121,12 +140,6 @@ export default class File {
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Remove this before 7.x's official release. Leaving it in for now to
|
||||
// prevent unnecessary breakage between beta versions.
|
||||
resolveModuleSource(source: string): string {
|
||||
return source;
|
||||
}
|
||||
|
||||
addImport() {
|
||||
throw new Error(
|
||||
"This API has been removed. If you're looking for this " +
|
||||
@@ -136,17 +149,38 @@ export default class File {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a given helper is available in @babel/core's helper list.
|
||||
*
|
||||
* This _also_ allows you to pass a Babel version specifically. If the
|
||||
* helper exists, but was not available for the full given range, it will be
|
||||
* considered unavailable.
|
||||
*/
|
||||
availableHelper(name: string, versionRange: ?string) {
|
||||
let minVersion;
|
||||
try {
|
||||
minVersion = helpers.minVersion(name);
|
||||
} catch (err) {
|
||||
if (err.code !== "BABEL_HELPER_UNKNOWN") throw err;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return (
|
||||
typeof versionRange !== "string" ||
|
||||
(!semver.intersects(`<${minVersion}`, versionRange) &&
|
||||
!semver.intersects(`>=8.0.0`, versionRange))
|
||||
);
|
||||
}
|
||||
|
||||
addHelper(name: string): Object {
|
||||
const declar = this.declarations[name];
|
||||
if (declar) return t.cloneNode(declar);
|
||||
|
||||
const generator = this.get("helperGenerator");
|
||||
const runtime = this.get("helpersNamespace");
|
||||
if (generator) {
|
||||
const res = generator(name);
|
||||
if (res) return res;
|
||||
} else if (runtime) {
|
||||
return t.memberExpression(t.cloneNode(runtime), t.identifier(name));
|
||||
}
|
||||
|
||||
const uid = (this.declarations[name] = this.scope.generateUidIdentifier(
|
||||
|
||||
@@ -293,7 +293,7 @@ function findInsertionLocation<T>(
|
||||
// Ensure the value is the start of any set of matches.
|
||||
let i = left;
|
||||
if (i < array.length) {
|
||||
while (i > 0 && callback(array[i]) >= 0) {
|
||||
while (i >= 0 && callback(array[i]) >= 0) {
|
||||
i--;
|
||||
}
|
||||
return i + 1;
|
||||
|
||||
@@ -91,14 +91,18 @@ export default function normalizeFile(
|
||||
});
|
||||
}
|
||||
|
||||
function parser(pluginPasses, options, code) {
|
||||
function parser(
|
||||
pluginPasses: PluginPasses,
|
||||
{ parserOpts, highlightCode = true, filename = "unknown" }: Object,
|
||||
code: string,
|
||||
) {
|
||||
try {
|
||||
const results = [];
|
||||
for (const plugins of pluginPasses) {
|
||||
for (const plugin of plugins) {
|
||||
const { parserOverride } = plugin;
|
||||
if (parserOverride) {
|
||||
const ast = parserOverride(code, options.parserOpts, parse);
|
||||
const ast = parserOverride(code, parserOpts, parse);
|
||||
|
||||
if (ast !== undefined) results.push(ast);
|
||||
}
|
||||
@@ -106,7 +110,7 @@ function parser(pluginPasses, options, code) {
|
||||
}
|
||||
|
||||
if (results.length === 0) {
|
||||
return parse(code, options.parserOpts);
|
||||
return parse(code, parserOpts);
|
||||
} else if (results.length === 1) {
|
||||
if (typeof results[0].then === "function") {
|
||||
throw new Error(
|
||||
@@ -136,15 +140,16 @@ function parser(pluginPasses, options, code) {
|
||||
column: loc.column + 1,
|
||||
},
|
||||
},
|
||||
options,
|
||||
{
|
||||
highlightCode,
|
||||
},
|
||||
);
|
||||
if (missingPlugin) {
|
||||
err.message =
|
||||
`${options.filename || "unknown"}: ` +
|
||||
`${filename}: ` +
|
||||
generateMissingPluginMessage(missingPlugin[0], loc, codeFrame);
|
||||
} else {
|
||||
err.message =
|
||||
`${options.filename || "unknown"}: ${err.message}\n\n` + codeFrame;
|
||||
err.message = `${filename}: ${err.message}\n\n` + codeFrame;
|
||||
}
|
||||
err.code = "BABEL_PARSE_ERROR";
|
||||
}
|
||||
|
||||
@@ -31,6 +31,10 @@ export default class PluginPass {
|
||||
return this._map.get(key);
|
||||
}
|
||||
|
||||
availableHelper(name: string, versionRange: ?string) {
|
||||
return this.file.availableHelper(name, versionRange);
|
||||
}
|
||||
|
||||
addHelper(name: string) {
|
||||
return this.file.addHelper(name);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import loadConfig from "../lib/config";
|
||||
import loadConfig, { loadPartialConfig } from "../lib/config";
|
||||
import path from "path";
|
||||
|
||||
describe("@babel/core config loading", () => {
|
||||
@@ -29,13 +29,53 @@ describe("@babel/core config loading", () => {
|
||||
filename: FILEPATH,
|
||||
presets: skipProgrammatic
|
||||
? null
|
||||
: [require("./fixtures/config-loading/preset3")],
|
||||
: [[require("./fixtures/config-loading/preset3"), {}]],
|
||||
plugins: skipProgrammatic
|
||||
? null
|
||||
: [require("./fixtures/config-loading/plugin6")],
|
||||
: [[require("./fixtures/config-loading/plugin6"), {}]],
|
||||
};
|
||||
}
|
||||
|
||||
describe("loadPartialConfig", () => {
|
||||
it("should preserve disabled plugins in the partial config", () => {
|
||||
const plugin = function() {
|
||||
return {};
|
||||
};
|
||||
|
||||
const opts = loadPartialConfig({
|
||||
...makeOpts(true),
|
||||
babelrc: false,
|
||||
configFile: false,
|
||||
plugins: [[plugin, false]],
|
||||
});
|
||||
|
||||
expect(opts.options.plugins.length).toBe(1);
|
||||
const item = opts.options.plugins[0];
|
||||
|
||||
expect(item.value).toBe(plugin);
|
||||
expect(item.options).toBe(false);
|
||||
});
|
||||
|
||||
it("should preserve disabled presets in the partial config", () => {
|
||||
const preset = function() {
|
||||
return {};
|
||||
};
|
||||
|
||||
const opts = loadPartialConfig({
|
||||
...makeOpts(true),
|
||||
babelrc: false,
|
||||
configFile: false,
|
||||
presets: [[preset, false]],
|
||||
});
|
||||
|
||||
expect(opts.options.presets.length).toBe(1);
|
||||
const item = opts.options.presets[0];
|
||||
|
||||
expect(item.value).toBe(preset);
|
||||
expect(item.options).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe("config file", () => {
|
||||
it("should load and cache the config with plugins and presets", () => {
|
||||
const opts = makeOpts();
|
||||
@@ -173,7 +213,7 @@ describe("@babel/core config loading", () => {
|
||||
}
|
||||
});
|
||||
|
||||
it("should invalidate the plugins when given a fresh arrays", () => {
|
||||
it("should not invalidate the plugins when given a fresh arrays", () => {
|
||||
const opts = makeOpts();
|
||||
|
||||
const options1 = loadConfig(opts).options;
|
||||
@@ -184,6 +224,38 @@ describe("@babel/core config loading", () => {
|
||||
}).options;
|
||||
expect(options2.plugins.length).toBe(options1.plugins.length);
|
||||
|
||||
for (let i = 0; i < options2.plugins.length; i++) {
|
||||
expect(options2.plugins[i]).toBe(options1.plugins[i]);
|
||||
}
|
||||
});
|
||||
|
||||
it("should not invalidate the presets when given a fresh arrays", () => {
|
||||
const opts = makeOpts();
|
||||
|
||||
const options1 = loadConfig(opts).options;
|
||||
|
||||
const options2 = loadConfig({
|
||||
...opts,
|
||||
presets: opts.presets.slice(),
|
||||
}).options;
|
||||
expect(options2.plugins.length).toBe(options1.plugins.length);
|
||||
|
||||
for (let i = 0; i < options2.plugins.length; i++) {
|
||||
expect(options2.plugins[i]).toBe(options1.plugins[i]);
|
||||
}
|
||||
});
|
||||
|
||||
it("should invalidate the plugins when given a fresh options", () => {
|
||||
const opts = makeOpts();
|
||||
|
||||
const options1 = loadConfig(opts).options;
|
||||
|
||||
const options2 = loadConfig({
|
||||
...opts,
|
||||
plugins: opts.plugins.map(([plg, opt]) => [plg, { ...opt }]),
|
||||
}).options;
|
||||
expect(options2.plugins.length).toBe(options1.plugins.length);
|
||||
|
||||
for (let i = 0; i < options2.plugins.length; i++) {
|
||||
if (i === 2) {
|
||||
expect(options2.plugins[i]).not.toBe(options1.plugins[i]);
|
||||
@@ -193,14 +265,14 @@ describe("@babel/core config loading", () => {
|
||||
}
|
||||
});
|
||||
|
||||
it("should invalidate the presets when given a fresh arrays", () => {
|
||||
it("should invalidate the presets when given a fresh options", () => {
|
||||
const opts = makeOpts();
|
||||
|
||||
const options1 = loadConfig(opts).options;
|
||||
|
||||
const options2 = loadConfig({
|
||||
...opts,
|
||||
presets: opts.presets.slice(),
|
||||
presets: opts.presets.map(([plg, opt]) => [plg, { ...opt }]),
|
||||
}).options;
|
||||
expect(options2.plugins.length).toBe(options1.plugins.length);
|
||||
|
||||
@@ -251,4 +323,51 @@ describe("@babel/core config loading", () => {
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe("caller metadata", () => {
|
||||
it("should pass caller data through", () => {
|
||||
const options1 = loadConfig({
|
||||
...makeOpts(),
|
||||
caller: {
|
||||
name: "babel-test",
|
||||
someFlag: true,
|
||||
},
|
||||
}).options;
|
||||
|
||||
expect(options1.caller.name).toBe("babel-test");
|
||||
expect(options1.caller.someFlag).toBe(true);
|
||||
});
|
||||
|
||||
it("should pass unknown caller data through", () => {
|
||||
const options1 = loadConfig({
|
||||
...makeOpts(),
|
||||
caller: undefined,
|
||||
}).options;
|
||||
|
||||
expect(options1.caller).toBeUndefined();
|
||||
});
|
||||
|
||||
it("should pass caller data to test functions", () => {
|
||||
const options1 = loadConfig({
|
||||
...makeOpts(),
|
||||
caller: {
|
||||
name: "babel-test",
|
||||
someFlag: true,
|
||||
},
|
||||
overrides: [
|
||||
{
|
||||
test: (filename, { caller }) => caller.name === "babel-test",
|
||||
comments: false,
|
||||
},
|
||||
{
|
||||
test: (filename, { caller }) => caller.name !== "babel-test",
|
||||
ast: false,
|
||||
},
|
||||
],
|
||||
}).options;
|
||||
|
||||
expect(options1.comments).toBe(false);
|
||||
expect(options1.ast).not.toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
3
packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/thing-babel-plugin/index.js
generated
vendored
Normal file
3
packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/thing-babel-plugin/index.js
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
module.exports = function() {
|
||||
return {};
|
||||
};
|
||||
3
packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/thing-babel-preset/index.js
generated
vendored
Normal file
3
packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/thing-babel-preset/index.js
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
module.exports = function() {
|
||||
return {};
|
||||
};
|
||||
3
packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/thing.babel-plugin-convert/index.js
generated
vendored
Normal file
3
packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/thing.babel-plugin-convert/index.js
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
module.exports = function() {
|
||||
return {};
|
||||
};
|
||||
3
packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/thing.babel-preset-convert/index.js
generated
vendored
Normal file
3
packages/babel-core/test/fixtures/resolution/foo-org-paths/node_modules/@foo/thing.babel-preset-convert/index.js
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
module.exports = function() {
|
||||
return {};
|
||||
};
|
||||
@@ -23,7 +23,9 @@ describe("parse", function() {
|
||||
const output = require(fixture("output.json"));
|
||||
|
||||
const result = parse(input, {
|
||||
parserOpts: { plugins: ["decorators"] },
|
||||
parserOpts: {
|
||||
plugins: [["decorators", { decoratorsBeforeExport: false }]],
|
||||
},
|
||||
cwd: fixture(),
|
||||
});
|
||||
expect(JSON.parse(JSON.stringify(result))).toEqual(output);
|
||||
|
||||
@@ -134,6 +134,46 @@ describe("addon resolution", function() {
|
||||
});
|
||||
});
|
||||
|
||||
it("should find @foo scoped presets with an inner babel-preset", function() {
|
||||
process.chdir("foo-org-paths");
|
||||
|
||||
babel.transform("", {
|
||||
filename: "filename.js",
|
||||
babelrc: false,
|
||||
presets: ["@foo/thing.babel-preset-convert"],
|
||||
});
|
||||
});
|
||||
|
||||
it("should find @foo scoped plugins with an inner babel-plugin", function() {
|
||||
process.chdir("foo-org-paths");
|
||||
|
||||
babel.transform("", {
|
||||
filename: "filename.js",
|
||||
babelrc: false,
|
||||
plugins: ["@foo/thing.babel-plugin-convert"],
|
||||
});
|
||||
});
|
||||
|
||||
it("should find @foo scoped presets with an babel-preset suffix", function() {
|
||||
process.chdir("foo-org-paths");
|
||||
|
||||
babel.transform("", {
|
||||
filename: "filename.js",
|
||||
babelrc: false,
|
||||
presets: ["@foo/thing-babel-preset"],
|
||||
});
|
||||
});
|
||||
|
||||
it("should find @foo scoped plugins with an babel-plugin suffix", function() {
|
||||
process.chdir("foo-org-paths");
|
||||
|
||||
babel.transform("", {
|
||||
filename: "filename.js",
|
||||
babelrc: false,
|
||||
plugins: ["@foo/thing-babel-plugin"],
|
||||
});
|
||||
});
|
||||
|
||||
it("should find @foo scoped presets with an existing prefix", function() {
|
||||
process.chdir("foo-org-paths");
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@babel/generator",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Turns an AST into code.",
|
||||
"author": "Sebastian McKenzie <sebmck@gmail.com>",
|
||||
"homepage": "https://babeljs.io/",
|
||||
@@ -11,14 +11,14 @@
|
||||
"lib"
|
||||
],
|
||||
"dependencies": {
|
||||
"@babel/types": "7.0.0-beta.55",
|
||||
"@babel/types": "^7.0.0-rc.4",
|
||||
"jsesc": "^2.5.1",
|
||||
"lodash": "^4.17.10",
|
||||
"source-map": "^0.5.0",
|
||||
"trim-right": "^1.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/helper-fixtures": "7.0.0-beta.55",
|
||||
"@babel/parser": "7.0.0-beta.55"
|
||||
"@babel/helper-fixtures": "^7.0.0-rc.4",
|
||||
"@babel/parser": "^7.0.0-rc.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -124,6 +124,7 @@ export function ClassPrivateProperty(node: Object) {
|
||||
this.space();
|
||||
}
|
||||
this.print(node.key, node);
|
||||
this.print(node.typeAnnotation, node);
|
||||
if (node.value) {
|
||||
this.space();
|
||||
this.token("=");
|
||||
|
||||
@@ -72,6 +72,10 @@ class Foo {
|
||||
static prop1: string;
|
||||
prop2: number;
|
||||
}
|
||||
class Foo {
|
||||
#prop1: string;
|
||||
prop2: number;
|
||||
}
|
||||
var x: number | string = 4;
|
||||
class Array { concat(items:number | string) {}; }
|
||||
var x: () => number | () => string = fn;
|
||||
|
||||
1
packages/babel-generator/test/fixtures/flow/type-annotations/options.json
vendored
Normal file
1
packages/babel-generator/test/fixtures/flow/type-annotations/options.json
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{ "plugins": ["classPrivateProperties", "flow"] }
|
||||
@@ -168,6 +168,11 @@ class Foo {
|
||||
prop2: number;
|
||||
}
|
||||
|
||||
class Foo {
|
||||
#prop1: string;
|
||||
prop2: number;
|
||||
}
|
||||
|
||||
var x: number | string = 4;
|
||||
|
||||
class Array {
|
||||
|
||||
5
packages/babel-generator/test/fixtures/harmony-edgecase/import-with-break/input.js
vendored
Normal file
5
packages/babel-generator/test/fixtures/harmony-edgecase/import-with-break/input.js
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
import foo from "foo";
|
||||
|
||||
foo: {
|
||||
break foo;
|
||||
}
|
||||
5
packages/babel-generator/test/fixtures/harmony-edgecase/import-with-break/output.js
vendored
Normal file
5
packages/babel-generator/test/fixtures/harmony-edgecase/import-with-break/output.js
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
import foo from "foo";
|
||||
|
||||
foo: {
|
||||
break foo;
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "@babel/helper-annotate-as-pure",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Helper function to annotate paths and nodes with #__PURE__ comment",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-annotate-as-pure",
|
||||
"license": "MIT",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"@babel/types": "7.0.0-beta.55"
|
||||
"@babel/types": "^7.0.0-rc.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@babel/helper-bindify-decorators",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Helper function to bindify decorators",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-bindify-decorators",
|
||||
"license": "MIT",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"@babel/traverse": "7.0.0-beta.55",
|
||||
"@babel/types": "7.0.0-beta.55"
|
||||
"@babel/traverse": "^7.0.0-rc.4",
|
||||
"@babel/types": "^7.0.0-rc.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@babel/helper-builder-binary-assignment-operator-visitor",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Helper function to build binary assignment operator visitors",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-builder-binary-assignment-operator-visitor",
|
||||
"license": "MIT",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"@babel/helper-explode-assignable-expression": "7.0.0-beta.55",
|
||||
"@babel/types": "7.0.0-beta.55"
|
||||
"@babel/helper-explode-assignable-expression": "^7.0.0-rc.4",
|
||||
"@babel/types": "^7.0.0-rc.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@babel/helper-builder-react-jsx",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Helper function to build react jsx",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-builder-react-jsx",
|
||||
"license": "MIT",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"@babel/types": "7.0.0-beta.55",
|
||||
"@babel/types": "^7.0.0-rc.4",
|
||||
"esutils": "^2.0.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"name": "@babel/helper-call-delegate",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Helper function to call delegate",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-call-delegate",
|
||||
"license": "MIT",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"@babel/helper-hoist-variables": "7.0.0-beta.55",
|
||||
"@babel/traverse": "7.0.0-beta.55",
|
||||
"@babel/types": "7.0.0-beta.55"
|
||||
"@babel/helper-hoist-variables": "^7.0.0-rc.4",
|
||||
"@babel/traverse": "^7.0.0-rc.4",
|
||||
"@babel/types": "^7.0.0-rc.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"name": "@babel/helper-define-map",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Helper function to define a map",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-define-map",
|
||||
"license": "MIT",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"@babel/helper-function-name": "7.0.0-beta.55",
|
||||
"@babel/types": "7.0.0-beta.55",
|
||||
"@babel/helper-function-name": "^7.0.0-rc.4",
|
||||
"@babel/types": "^7.0.0-rc.4",
|
||||
"lodash": "^4.17.10"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@babel/helper-explode-assignable-expression",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Helper function to explode an assignable expression",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-explode-assignable-expression",
|
||||
"license": "MIT",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"@babel/traverse": "7.0.0-beta.55",
|
||||
"@babel/types": "7.0.0-beta.55"
|
||||
"@babel/traverse": "^7.0.0-rc.4",
|
||||
"@babel/types": "^7.0.0-rc.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"name": "@babel/helper-explode-class",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Helper function to explode class",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-explode-class",
|
||||
"license": "MIT",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"@babel/helper-bindify-decorators": "7.0.0-beta.55",
|
||||
"@babel/traverse": "7.0.0-beta.55",
|
||||
"@babel/types": "7.0.0-beta.55"
|
||||
"@babel/helper-bindify-decorators": "^7.0.0-rc.4",
|
||||
"@babel/traverse": "^7.0.0-rc.4",
|
||||
"@babel/types": "^7.0.0-rc.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@babel/helper-fixtures",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Helper function to support fixtures",
|
||||
"author": "Sebastian McKenzie <sebmck@gmail.com>",
|
||||
"license": "MIT",
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"name": "@babel/helper-function-name",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Helper function to change the property 'name' of every function",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-function-name",
|
||||
"license": "MIT",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"@babel/helper-get-function-arity": "7.0.0-beta.55",
|
||||
"@babel/template": "7.0.0-beta.55",
|
||||
"@babel/types": "7.0.0-beta.55"
|
||||
"@babel/helper-get-function-arity": "^7.0.0-rc.4",
|
||||
"@babel/template": "^7.0.0-rc.4",
|
||||
"@babel/types": "^7.0.0-rc.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "@babel/helper-get-function-arity",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Helper function to get function arity",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-get-function-arity",
|
||||
"license": "MIT",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"@babel/types": "7.0.0-beta.55"
|
||||
"@babel/types": "^7.0.0-rc.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "@babel/helper-hoist-variables",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Helper function to hoist variables",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-hoist-variables",
|
||||
"license": "MIT",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"@babel/types": "7.0.0-beta.55"
|
||||
"@babel/types": "^7.0.0-rc.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@babel/helper-member-expression-to-functions",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Helper function to replace certain member expressions with function calls",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-member-expression-to-functions",
|
||||
"license": "MIT",
|
||||
"main": "lib/index.js",
|
||||
"author": "Justin Ridgewell <justin@ridgewell.name>",
|
||||
"dependencies": {
|
||||
"@babel/types": "7.0.0-beta.55"
|
||||
"@babel/types": "^7.0.0-rc.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@babel/helper-module-imports",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Babel helper functions for inserting module loads",
|
||||
"author": "Logan Smyth <loganfsmyth@gmail.com>",
|
||||
"homepage": "https://babeljs.io/",
|
||||
@@ -8,10 +8,9 @@
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-module-imports",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"@babel/types": "7.0.0-beta.55",
|
||||
"lodash": "^4.17.10"
|
||||
"@babel/types": "^7.0.0-rc.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "7.0.0-beta.55"
|
||||
"@babel/core": "^7.0.0-rc.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,11 +10,11 @@ export default class ImportBuilder {
|
||||
_resultName = null;
|
||||
|
||||
_scope = null;
|
||||
_file = null;
|
||||
_hub = null;
|
||||
|
||||
constructor(importedSource, scope, file) {
|
||||
constructor(importedSource, scope, hub) {
|
||||
this._scope = scope;
|
||||
this._file = file;
|
||||
this._hub = hub;
|
||||
this._importedSource = importedSource;
|
||||
}
|
||||
|
||||
@@ -91,10 +91,10 @@ export default class ImportBuilder {
|
||||
}
|
||||
|
||||
defaultInterop() {
|
||||
return this._interop(this._file.addHelper("interopRequireDefault"));
|
||||
return this._interop(this._hub.addHelper("interopRequireDefault"));
|
||||
}
|
||||
wildcardInterop() {
|
||||
return this._interop(this._file.addHelper("interopRequireWildcard"));
|
||||
return this._interop(this._hub.addHelper("interopRequireWildcard"));
|
||||
}
|
||||
|
||||
_interop(callee) {
|
||||
|
||||
@@ -108,7 +108,7 @@ export default class ImportInjector {
|
||||
/**
|
||||
* The file used to inject helpers and resolve paths.
|
||||
*/
|
||||
_file;
|
||||
_hub;
|
||||
|
||||
/**
|
||||
* The default options to use with this instance when imports are added.
|
||||
@@ -127,7 +127,7 @@ export default class ImportInjector {
|
||||
|
||||
this._programPath = programPath;
|
||||
this._programScope = programPath.scope;
|
||||
this._file = programPath.hub.file;
|
||||
this._hub = programPath.hub;
|
||||
|
||||
this._defaultOpts = this._applyDefaults(importedSource, opts, true);
|
||||
}
|
||||
@@ -218,7 +218,7 @@ export default class ImportInjector {
|
||||
const builder = new ImportBuilder(
|
||||
importedSource,
|
||||
this._programScope,
|
||||
this._file,
|
||||
this._hub,
|
||||
);
|
||||
|
||||
if (importedType === "es6") {
|
||||
|
||||
@@ -18,7 +18,12 @@ function test(sourceType, opts, initializer, expectedCode) {
|
||||
function({ types: t }) {
|
||||
return {
|
||||
pre(file) {
|
||||
file.set("helpersNamespace", t.identifier("babelHelpers"));
|
||||
file.set("helperGenerator", name =>
|
||||
t.memberExpression(
|
||||
t.identifier("babelHelpers"),
|
||||
t.identifier(name),
|
||||
),
|
||||
);
|
||||
},
|
||||
visitor: {
|
||||
Program(path) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@babel/helper-module-transforms",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Babel helper functions for implementing ES6 module transformations",
|
||||
"author": "Logan Smyth <loganfsmyth@gmail.com>",
|
||||
"homepage": "https://babeljs.io/",
|
||||
@@ -8,11 +8,11 @@
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-module-transforms",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"@babel/helper-module-imports": "7.0.0-beta.55",
|
||||
"@babel/helper-simple-access": "7.0.0-beta.55",
|
||||
"@babel/helper-split-export-declaration": "7.0.0-beta.55",
|
||||
"@babel/template": "7.0.0-beta.55",
|
||||
"@babel/types": "7.0.0-beta.55",
|
||||
"@babel/helper-module-imports": "^7.0.0-rc.4",
|
||||
"@babel/helper-simple-access": "^7.0.0-rc.4",
|
||||
"@babel/helper-split-export-declaration": "^7.0.0-rc.4",
|
||||
"@babel/template": "^7.0.0-rc.4",
|
||||
"@babel/types": "^7.0.0-rc.4",
|
||||
"lodash": "^4.17.10"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -112,7 +112,7 @@ export function wrapInterop(
|
||||
throw new Error(`Unknown interop: ${type}`);
|
||||
}
|
||||
|
||||
return t.callExpression(programPath.hub.file.addHelper(helper), [expr]);
|
||||
return t.callExpression(programPath.hub.addHelper(helper), [expr]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "@babel/helper-optimise-call-expression",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Helper function to optimise call expression",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-optimise-call-expression",
|
||||
"license": "MIT",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"@babel/types": "7.0.0-beta.55"
|
||||
"@babel/types": "^7.0.0-rc.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "@babel/helper-plugin-test-runner",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Helper function to support test runner",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-plugin-test-runner",
|
||||
"license": "MIT",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"@babel/helper-transform-fixture-test-runner": "7.0.0-beta.55"
|
||||
"@babel/helper-transform-fixture-test-runner": "^7.0.0-rc.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@babel/helper-plugin-utils",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "General utilities for plugins to use",
|
||||
"author": "Logan Smyth <loganfsmyth@gmail.com>",
|
||||
"homepage": "https://babeljs.io/",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@babel/helper-regex",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Helper function to check for literal RegEx",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-regex",
|
||||
"license": "MIT",
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
{
|
||||
"name": "@babel/helper-remap-async-to-generator",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Helper function to remap async functions to generators",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-remap-async-to-generator",
|
||||
"license": "MIT",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"@babel/helper-annotate-as-pure": "7.0.0-beta.55",
|
||||
"@babel/helper-wrap-function": "7.0.0-beta.55",
|
||||
"@babel/template": "7.0.0-beta.55",
|
||||
"@babel/traverse": "7.0.0-beta.55",
|
||||
"@babel/types": "7.0.0-beta.55"
|
||||
"@babel/helper-annotate-as-pure": "^7.0.0-rc.4",
|
||||
"@babel/helper-wrap-function": "^7.0.0-rc.4",
|
||||
"@babel/template": "^7.0.0-rc.4",
|
||||
"@babel/traverse": "^7.0.0-rc.4",
|
||||
"@babel/types": "^7.0.0-rc.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
{
|
||||
"name": "@babel/helper-replace-supers",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Helper function to replace supers",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-replace-supers",
|
||||
"license": "MIT",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"@babel/helper-member-expression-to-functions": "7.0.0-beta.55",
|
||||
"@babel/helper-optimise-call-expression": "7.0.0-beta.55",
|
||||
"@babel/traverse": "7.0.0-beta.55",
|
||||
"@babel/types": "7.0.0-beta.55"
|
||||
"@babel/helper-member-expression-to-functions": "^7.0.0-rc.4",
|
||||
"@babel/helper-optimise-call-expression": "^7.0.0-rc.4",
|
||||
"@babel/traverse": "^7.0.0-rc.4",
|
||||
"@babel/types": "^7.0.0-rc.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@babel/helper-simple-access",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Babel helper for ensuring that access to a given value is performed through simple accesses",
|
||||
"author": "Logan Smyth <loganfsmyth@gmail.com>",
|
||||
"homepage": "https://babeljs.io/",
|
||||
@@ -8,8 +8,7 @@
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-simple-access",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"@babel/template": "7.0.0-beta.55",
|
||||
"@babel/types": "7.0.0-beta.55",
|
||||
"lodash": "^4.17.10"
|
||||
"@babel/template": "^7.0.0-rc.4",
|
||||
"@babel/types": "^7.0.0-rc.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "@babel/helper-split-export-declaration",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-split-export-declaration",
|
||||
"license": "MIT",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"@babel/types": "7.0.0-beta.55"
|
||||
"@babel/types": "^7.0.0-rc.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@babel/helper-transform-fixture-test-runner",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Transform test runner for @babel/helper-fixtures module",
|
||||
"author": "Sebastian McKenzie <sebmck@gmail.com>",
|
||||
"homepage": "https://babeljs.io/",
|
||||
@@ -8,10 +8,10 @@
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-transform-fixture-test-runner",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "7.0.0-beta.55",
|
||||
"@babel/core": "7.0.0-beta.55",
|
||||
"@babel/helper-fixtures": "7.0.0-beta.55",
|
||||
"@babel/polyfill": "7.0.0-beta.55",
|
||||
"@babel/code-frame": "^7.0.0-rc.4",
|
||||
"@babel/core": "^7.0.0-rc.4",
|
||||
"@babel/helper-fixtures": "^7.0.0-rc.4",
|
||||
"@babel/polyfill": "^7.0.0-rc.4",
|
||||
"jest": "^22.4.2",
|
||||
"jest-diff": "^22.4.0",
|
||||
"lodash": "^4.17.10",
|
||||
|
||||
@@ -6,6 +6,7 @@ import sourceMap from "source-map";
|
||||
import { codeFrameColumns } from "@babel/code-frame";
|
||||
import defaults from "lodash/defaults";
|
||||
import includes from "lodash/includes";
|
||||
import escapeRegExp from "lodash/escapeRegExp";
|
||||
import * as helpers from "./helpers";
|
||||
import extend from "lodash/extend";
|
||||
import merge from "lodash/merge";
|
||||
@@ -180,7 +181,7 @@ function run(task) {
|
||||
function getOpts(self) {
|
||||
const newOpts = merge(
|
||||
{
|
||||
cwd: path.dirname(self.filename),
|
||||
cwd: path.dirname(self.loc),
|
||||
filename: self.loc,
|
||||
filenameRelative: self.filename,
|
||||
sourceFileName: self.filename,
|
||||
@@ -235,10 +236,15 @@ function run(task) {
|
||||
const expectCode = expected.code;
|
||||
if (!execCode || actualCode) {
|
||||
result = babel.transform(actualCode, getOpts(actual));
|
||||
const expectedCode = result.code.replace(
|
||||
escapeRegExp(path.resolve(__dirname, "../../../")),
|
||||
"<CWD>",
|
||||
);
|
||||
|
||||
checkDuplicatedNodes(result.ast);
|
||||
if (
|
||||
!expected.code &&
|
||||
result.code &&
|
||||
expectedCode &&
|
||||
!opts.throws &&
|
||||
fs.statSync(path.dirname(expected.loc)).isDirectory() &&
|
||||
!process.env.CI
|
||||
@@ -249,7 +255,7 @@ function run(task) {
|
||||
);
|
||||
|
||||
console.log(`New test file created: ${expectedFile}`);
|
||||
fs.writeFileSync(expectedFile, `${result.code}\n`);
|
||||
fs.writeFileSync(expectedFile, `${expectedCode}\n`);
|
||||
|
||||
if (expected.loc !== expectedFile) {
|
||||
try {
|
||||
@@ -257,7 +263,7 @@ function run(task) {
|
||||
} catch (e) {}
|
||||
}
|
||||
} else {
|
||||
actualCode = result.code.trim();
|
||||
actualCode = expectedCode.trim();
|
||||
try {
|
||||
expect(actualCode).toEqualFile({
|
||||
filename: expected.loc,
|
||||
@@ -267,7 +273,7 @@ function run(task) {
|
||||
if (!process.env.OVERWRITE) throw e;
|
||||
|
||||
console.log(`Updated test file: ${expected.loc}`);
|
||||
fs.writeFileSync(expected.loc, `${result.code}\n`);
|
||||
fs.writeFileSync(expected.loc, `${expectedCode}\n`);
|
||||
}
|
||||
|
||||
if (actualCode) {
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
{
|
||||
"name": "@babel/helper-wrap-function",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Helper to wrap functions inside a function call.",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-wrap-function",
|
||||
"license": "MIT",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"@babel/helper-function-name": "7.0.0-beta.55",
|
||||
"@babel/template": "7.0.0-beta.55",
|
||||
"@babel/traverse": "7.0.0-beta.55",
|
||||
"@babel/types": "7.0.0-beta.55"
|
||||
"@babel/helper-function-name": "^7.0.0-rc.4",
|
||||
"@babel/template": "^7.0.0-rc.4",
|
||||
"@babel/traverse": "^7.0.0-rc.4",
|
||||
"@babel/types": "^7.0.0-rc.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@babel/helpers",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Collection of helper functions used by Babel transforms.",
|
||||
"author": "Sebastian McKenzie <sebmck@gmail.com>",
|
||||
"homepage": "https://babeljs.io/",
|
||||
@@ -8,11 +8,11 @@
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helpers",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"@babel/template": "7.0.0-beta.55",
|
||||
"@babel/traverse": "7.0.0-beta.55",
|
||||
"@babel/types": "7.0.0-beta.55"
|
||||
"@babel/template": "^7.0.0-rc.4",
|
||||
"@babel/traverse": "^7.0.0-rc.4",
|
||||
"@babel/types": "^7.0.0-rc.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/helper-plugin-test-runner": "7.0.0-beta.55"
|
||||
"@babel/helper-plugin-test-runner": "^7.0.0-rc.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,16 @@
|
||||
// @flow
|
||||
|
||||
import template from "@babel/template";
|
||||
|
||||
const helpers = {};
|
||||
const helpers = Object.create(null);
|
||||
export default helpers;
|
||||
|
||||
helpers.typeof = () => template.program.ast`
|
||||
const helper = (minVersion: string) => tpl => ({
|
||||
minVersion,
|
||||
ast: () => template.program.ast(tpl),
|
||||
});
|
||||
|
||||
helpers.typeof = helper("7.0.0-beta.0")`
|
||||
export default function _typeof(obj) {
|
||||
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
|
||||
_typeof = function (obj) { return typeof obj; };
|
||||
@@ -19,7 +26,7 @@ helpers.typeof = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.jsx = () => template.program.ast`
|
||||
helpers.jsx = helper("7.0.0-beta.0")`
|
||||
var REACT_ELEMENT_TYPE;
|
||||
|
||||
export default function _createRawReactElement(type, props, key, children) {
|
||||
@@ -70,7 +77,7 @@ helpers.jsx = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.asyncIterator = () => template.program.ast`
|
||||
helpers.asyncIterator = helper("7.0.0-beta.0")`
|
||||
export default function _asyncIterator(iterable) {
|
||||
var method
|
||||
if (typeof Symbol === "function") {
|
||||
@@ -87,13 +94,13 @@ helpers.asyncIterator = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.AwaitValue = () => template.program.ast`
|
||||
helpers.AwaitValue = helper("7.0.0-beta.0")`
|
||||
export default function _AwaitValue(value) {
|
||||
this.wrapped = value;
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.AsyncGenerator = () => template.program.ast`
|
||||
helpers.AsyncGenerator = helper("7.0.0-beta.0")`
|
||||
import AwaitValue from "AwaitValue";
|
||||
|
||||
export default function AsyncGenerator(gen) {
|
||||
@@ -177,7 +184,7 @@ helpers.AsyncGenerator = () => template.program.ast`
|
||||
AsyncGenerator.prototype.return = function (arg) { return this._invoke("return", arg); };
|
||||
`;
|
||||
|
||||
helpers.wrapAsyncGenerator = () => template.program.ast`
|
||||
helpers.wrapAsyncGenerator = helper("7.0.0-beta.0")`
|
||||
import AsyncGenerator from "AsyncGenerator";
|
||||
|
||||
export default function _wrapAsyncGenerator(fn) {
|
||||
@@ -187,7 +194,7 @@ helpers.wrapAsyncGenerator = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.awaitAsyncGenerator = () => template.program.ast`
|
||||
helpers.awaitAsyncGenerator = helper("7.0.0-beta.0")`
|
||||
import AwaitValue from "AwaitValue";
|
||||
|
||||
export default function _awaitAsyncGenerator(value) {
|
||||
@@ -195,7 +202,7 @@ helpers.awaitAsyncGenerator = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.asyncGeneratorDelegate = () => template.program.ast`
|
||||
helpers.asyncGeneratorDelegate = helper("7.0.0-beta.0")`
|
||||
export default function _asyncGeneratorDelegate(inner, awaitWrap) {
|
||||
var iter = {}, waiting = false;
|
||||
|
||||
@@ -237,7 +244,7 @@ helpers.asyncGeneratorDelegate = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.asyncToGenerator = () => template.program.ast`
|
||||
helpers.asyncToGenerator = helper("7.0.0-beta.0")`
|
||||
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
||||
try {
|
||||
var info = gen[key](arg);
|
||||
@@ -272,7 +279,7 @@ helpers.asyncToGenerator = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.classCallCheck = () => template.program.ast`
|
||||
helpers.classCallCheck = helper("7.0.0-beta.0")`
|
||||
export default function _classCallCheck(instance, Constructor) {
|
||||
if (!(instance instanceof Constructor)) {
|
||||
throw new TypeError("Cannot call a class as a function");
|
||||
@@ -280,7 +287,7 @@ helpers.classCallCheck = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.createClass = () => template.program.ast`
|
||||
helpers.createClass = helper("7.0.0-beta.0")`
|
||||
function _defineProperties(target, props) {
|
||||
for (var i = 0; i < props.length; i ++) {
|
||||
var descriptor = props[i];
|
||||
@@ -298,7 +305,7 @@ helpers.createClass = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.defineEnumerableProperties = () => template.program.ast`
|
||||
helpers.defineEnumerableProperties = helper("7.0.0-beta.0")`
|
||||
export default function _defineEnumerableProperties(obj, descs) {
|
||||
for (var key in descs) {
|
||||
var desc = descs[key];
|
||||
@@ -324,7 +331,7 @@ helpers.defineEnumerableProperties = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.defaults = () => template.program.ast`
|
||||
helpers.defaults = helper("7.0.0-beta.0")`
|
||||
export default function _defaults(obj, defaults) {
|
||||
var keys = Object.getOwnPropertyNames(defaults);
|
||||
for (var i = 0; i < keys.length; i++) {
|
||||
@@ -338,7 +345,7 @@ helpers.defaults = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.defineProperty = () => template.program.ast`
|
||||
helpers.defineProperty = helper("7.0.0-beta.0")`
|
||||
export default function _defineProperty(obj, key, value) {
|
||||
// Shortcircuit the slow defineProperty path when possible.
|
||||
// We are trying to avoid issues where setters defined on the
|
||||
@@ -359,7 +366,7 @@ helpers.defineProperty = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.extends = () => template.program.ast`
|
||||
helpers.extends = helper("7.0.0-beta.0")`
|
||||
export default function _extends() {
|
||||
_extends = Object.assign || function (target) {
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
@@ -377,7 +384,7 @@ helpers.extends = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.objectSpread = () => template.program.ast`
|
||||
helpers.objectSpread = helper("7.0.0-beta.0")`
|
||||
import defineProperty from "defineProperty";
|
||||
|
||||
export default function _objectSpread(target) {
|
||||
@@ -397,7 +404,7 @@ helpers.objectSpread = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.inherits = () => template.program.ast`
|
||||
helpers.inherits = helper("7.0.0-beta.0")`
|
||||
import setPrototypeOf from "setPrototypeOf";
|
||||
|
||||
export default function _inherits(subClass, superClass) {
|
||||
@@ -415,7 +422,7 @@ helpers.inherits = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.inheritsLoose = () => template.program.ast`
|
||||
helpers.inheritsLoose = helper("7.0.0-beta.0")`
|
||||
export default function _inheritsLoose(subClass, superClass) {
|
||||
subClass.prototype = Object.create(superClass.prototype);
|
||||
subClass.prototype.constructor = subClass;
|
||||
@@ -423,7 +430,7 @@ helpers.inheritsLoose = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.getPrototypeOf = () => template.program.ast`
|
||||
helpers.getPrototypeOf = helper("7.0.0-beta.0")`
|
||||
export default function _getPrototypeOf(o) {
|
||||
_getPrototypeOf = Object.setPrototypeOf
|
||||
? Object.getPrototypeOf
|
||||
@@ -434,7 +441,7 @@ helpers.getPrototypeOf = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.setPrototypeOf = () => template.program.ast`
|
||||
helpers.setPrototypeOf = helper("7.0.0-beta.0")`
|
||||
export default function _setPrototypeOf(o, p) {
|
||||
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
|
||||
o.__proto__ = p;
|
||||
@@ -444,7 +451,7 @@ helpers.setPrototypeOf = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.construct = () => template.program.ast`
|
||||
helpers.construct = helper("7.0.0-beta.0")`
|
||||
import setPrototypeOf from "setPrototypeOf";
|
||||
|
||||
function isNativeReflectConstruct() {
|
||||
@@ -476,6 +483,8 @@ helpers.construct = () => template.program.ast`
|
||||
if (isNativeReflectConstruct()) {
|
||||
_construct = Reflect.construct;
|
||||
} else {
|
||||
// NOTE: If Parent !== Class, the correct __proto__ is set *after*
|
||||
// calling the constructor.
|
||||
_construct = function _construct(Parent, args, Class) {
|
||||
var a = [null];
|
||||
a.push.apply(a, args);
|
||||
@@ -491,17 +500,25 @@ helpers.construct = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.isNativeFunction = helper("7.0.0-beta.0")`
|
||||
export default function _isNativeFunction(fn) {
|
||||
// Note: This function returns "true" for core-js functions.
|
||||
return Function.toString.call(fn).indexOf("[native code]") !== -1;
|
||||
}
|
||||
`;
|
||||
|
||||
// Based on https://github.com/WebReflection/babel-plugin-transform-builtin-classes
|
||||
helpers.wrapNativeSuper = () => template.program.ast`
|
||||
helpers.wrapNativeSuper = helper("7.0.0-beta.0")`
|
||||
import getPrototypeOf from "getPrototypeOf";
|
||||
import setPrototypeOf from "setPrototypeOf";
|
||||
import isNativeFunction from "isNativeFunction";
|
||||
import construct from "construct";
|
||||
|
||||
export default function _wrapNativeSuper(Class) {
|
||||
var _cache = typeof Map === "function" ? new Map() : undefined;
|
||||
|
||||
_wrapNativeSuper = function _wrapNativeSuper(Class) {
|
||||
if (Class === null) return null;
|
||||
if (Class === null || !isNativeFunction(Class)) return Class;
|
||||
if (typeof Class !== "function") {
|
||||
throw new TypeError("Super expression must either be null or a function");
|
||||
}
|
||||
@@ -528,7 +545,7 @@ helpers.wrapNativeSuper = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.instanceof = () => template.program.ast`
|
||||
helpers.instanceof = helper("7.0.0-beta.0")`
|
||||
export default function _instanceof(left, right) {
|
||||
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
||||
return right[Symbol.hasInstance](left);
|
||||
@@ -538,13 +555,13 @@ helpers.instanceof = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.interopRequireDefault = () => template.program.ast`
|
||||
helpers.interopRequireDefault = helper("7.0.0-beta.0")`
|
||||
export default function _interopRequireDefault(obj) {
|
||||
return obj && obj.__esModule ? obj : { default: obj };
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.interopRequireWildcard = () => template.program.ast`
|
||||
helpers.interopRequireWildcard = helper("7.0.0-beta.0")`
|
||||
export default function _interopRequireWildcard(obj) {
|
||||
if (obj && obj.__esModule) {
|
||||
return obj;
|
||||
@@ -570,7 +587,7 @@ helpers.interopRequireWildcard = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.newArrowCheck = () => template.program.ast`
|
||||
helpers.newArrowCheck = helper("7.0.0-beta.0")`
|
||||
export default function _newArrowCheck(innerThis, boundThis) {
|
||||
if (innerThis !== boundThis) {
|
||||
throw new TypeError("Cannot instantiate an arrow function");
|
||||
@@ -578,13 +595,13 @@ helpers.newArrowCheck = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.objectDestructuringEmpty = () => template.program.ast`
|
||||
helpers.objectDestructuringEmpty = helper("7.0.0-beta.0")`
|
||||
export default function _objectDestructuringEmpty(obj) {
|
||||
if (obj == null) throw new TypeError("Cannot destructure undefined");
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.objectWithoutPropertiesLoose = () => template.program.ast`
|
||||
helpers.objectWithoutPropertiesLoose = helper("7.0.0-beta.0")`
|
||||
export default function _objectWithoutPropertiesLoose(source, excluded) {
|
||||
if (source == null) return {};
|
||||
|
||||
@@ -602,7 +619,7 @@ helpers.objectWithoutPropertiesLoose = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.objectWithoutProperties = () => template.program.ast`
|
||||
helpers.objectWithoutProperties = helper("7.0.0-beta.0")`
|
||||
import objectWithoutPropertiesLoose from "objectWithoutPropertiesLoose";
|
||||
|
||||
export default function _objectWithoutProperties(source, excluded) {
|
||||
@@ -625,7 +642,7 @@ helpers.objectWithoutProperties = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.assertThisInitialized = () => template.program.ast`
|
||||
helpers.assertThisInitialized = helper("7.0.0-beta.0")`
|
||||
export default function _assertThisInitialized(self) {
|
||||
if (self === void 0) {
|
||||
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
||||
@@ -634,7 +651,7 @@ helpers.assertThisInitialized = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.possibleConstructorReturn = () => template.program.ast`
|
||||
helpers.possibleConstructorReturn = helper("7.0.0-beta.0")`
|
||||
import assertThisInitialized from "assertThisInitialized";
|
||||
|
||||
export default function _possibleConstructorReturn(self, call) {
|
||||
@@ -645,7 +662,7 @@ helpers.possibleConstructorReturn = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.superPropBase = () => template.program.ast`
|
||||
helpers.superPropBase = helper("7.0.0-beta.0")`
|
||||
import getPrototypeOf from "getPrototypeOf";
|
||||
|
||||
export default function _superPropBase(object, property) {
|
||||
@@ -658,7 +675,7 @@ helpers.superPropBase = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.get = () => template.program.ast`
|
||||
helpers.get = helper("7.0.0-beta.0")`
|
||||
import getPrototypeOf from "getPrototypeOf";
|
||||
import superPropBase from "superPropBase";
|
||||
|
||||
@@ -683,7 +700,7 @@ helpers.get = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.set = () => template.program.ast`
|
||||
helpers.set = helper("7.0.0-beta.0")`
|
||||
import getPrototypeOf from "getPrototypeOf";
|
||||
import superPropBase from "superPropBase";
|
||||
import defineProperty from "defineProperty";
|
||||
@@ -741,7 +758,7 @@ helpers.set = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.taggedTemplateLiteral = () => template.program.ast`
|
||||
helpers.taggedTemplateLiteral = helper("7.0.0-beta.0")`
|
||||
export default function _taggedTemplateLiteral(strings, raw) {
|
||||
if (!raw) { raw = strings.slice(0); }
|
||||
return Object.freeze(Object.defineProperties(strings, {
|
||||
@@ -750,7 +767,7 @@ helpers.taggedTemplateLiteral = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.taggedTemplateLiteralLoose = () => template.program.ast`
|
||||
helpers.taggedTemplateLiteralLoose = helper("7.0.0-beta.0")`
|
||||
export default function _taggedTemplateLiteralLoose(strings, raw) {
|
||||
if (!raw) { raw = strings.slice(0); }
|
||||
strings.raw = raw;
|
||||
@@ -758,7 +775,7 @@ helpers.taggedTemplateLiteralLoose = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.temporalRef = () => template.program.ast`
|
||||
helpers.temporalRef = helper("7.0.0-beta.0")`
|
||||
import undef from "temporalUndefined";
|
||||
|
||||
export default function _temporalRef(val, name) {
|
||||
@@ -770,23 +787,23 @@ helpers.temporalRef = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.readOnlyError = () => template.program.ast`
|
||||
helpers.readOnlyError = helper("7.0.0-beta.0")`
|
||||
export default function _readOnlyError(name) {
|
||||
throw new Error("\\"" + name + "\\" is read-only");
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.classNameTDZError = () => template.program.ast`
|
||||
helpers.classNameTDZError = helper("7.0.0-beta.0")`
|
||||
export default function _classNameTDZError(name) {
|
||||
throw new Error("Class \\"" + name + "\\" cannot be referenced in computed property keys.");
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.temporalUndefined = () => template.program.ast`
|
||||
helpers.temporalUndefined = helper("7.0.0-beta.0")`
|
||||
export default {};
|
||||
`;
|
||||
|
||||
helpers.slicedToArray = () => template.program.ast`
|
||||
helpers.slicedToArray = helper("7.0.0-beta.0")`
|
||||
import arrayWithHoles from "arrayWithHoles";
|
||||
import iterableToArrayLimit from "iterableToArrayLimit";
|
||||
import nonIterableRest from "nonIterableRest";
|
||||
@@ -796,7 +813,7 @@ helpers.slicedToArray = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.slicedToArrayLoose = () => template.program.ast`
|
||||
helpers.slicedToArrayLoose = helper("7.0.0-beta.0")`
|
||||
import arrayWithHoles from "arrayWithHoles";
|
||||
import iterableToArrayLimitLoose from "iterableToArrayLimitLoose";
|
||||
import nonIterableRest from "nonIterableRest";
|
||||
@@ -806,7 +823,7 @@ helpers.slicedToArrayLoose = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.toArray = () => template.program.ast`
|
||||
helpers.toArray = helper("7.0.0-beta.0")`
|
||||
import arrayWithHoles from "arrayWithHoles";
|
||||
import iterableToArray from "iterableToArray";
|
||||
import nonIterableRest from "nonIterableRest";
|
||||
@@ -816,7 +833,7 @@ helpers.toArray = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.toConsumableArray = () => template.program.ast`
|
||||
helpers.toConsumableArray = helper("7.0.0-beta.0")`
|
||||
import arrayWithoutHoles from "arrayWithoutHoles";
|
||||
import iterableToArray from "iterableToArray";
|
||||
import nonIterableSpread from "nonIterableSpread";
|
||||
@@ -826,7 +843,7 @@ helpers.toConsumableArray = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.arrayWithoutHoles = () => template.program.ast`
|
||||
helpers.arrayWithoutHoles = helper("7.0.0-beta.0")`
|
||||
export default function _arrayWithoutHoles(arr) {
|
||||
if (Array.isArray(arr)) {
|
||||
for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];
|
||||
@@ -835,13 +852,13 @@ helpers.arrayWithoutHoles = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.arrayWithHoles = () => template.program.ast`
|
||||
helpers.arrayWithHoles = helper("7.0.0-beta.0")`
|
||||
export default function _arrayWithHoles(arr) {
|
||||
if (Array.isArray(arr)) return arr;
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.iterableToArray = () => template.program.ast`
|
||||
helpers.iterableToArray = helper("7.0.0-beta.0")`
|
||||
export default function _iterableToArray(iter) {
|
||||
if (
|
||||
Symbol.iterator in Object(iter) ||
|
||||
@@ -850,7 +867,7 @@ helpers.iterableToArray = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.iterableToArrayLimit = () => template.program.ast`
|
||||
helpers.iterableToArrayLimit = helper("7.0.0-beta.0")`
|
||||
export default function _iterableToArrayLimit(arr, i) {
|
||||
// this is an expanded form of \`for...of\` that properly supports abrupt completions of
|
||||
// iterators etc. variable names have been minimised to reduce the size of this massive
|
||||
@@ -885,7 +902,7 @@ helpers.iterableToArrayLimit = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.iterableToArrayLimitLoose = () => template.program.ast`
|
||||
helpers.iterableToArrayLimitLoose = helper("7.0.0-beta.0")`
|
||||
export default function _iterableToArrayLimitLoose(arr, i) {
|
||||
var _arr = [];
|
||||
for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) {
|
||||
@@ -896,19 +913,19 @@ helpers.iterableToArrayLimitLoose = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.nonIterableSpread = () => template.program.ast`
|
||||
helpers.nonIterableSpread = helper("7.0.0-beta.0")`
|
||||
export default function _nonIterableSpread() {
|
||||
throw new TypeError("Invalid attempt to spread non-iterable instance");
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.nonIterableRest = () => template.program.ast`
|
||||
helpers.nonIterableRest = helper("7.0.0-beta.0")`
|
||||
export default function _nonIterableRest() {
|
||||
throw new TypeError("Invalid attempt to destructure non-iterable instance");
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.skipFirstGeneratorNext = () => template.program.ast`
|
||||
helpers.skipFirstGeneratorNext = helper("7.0.0-beta.0")`
|
||||
export default function _skipFirstGeneratorNext(fn) {
|
||||
return function () {
|
||||
var it = fn.apply(this, arguments);
|
||||
@@ -918,7 +935,7 @@ helpers.skipFirstGeneratorNext = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.toPropertyKey = () => template.program.ast`
|
||||
helpers.toPropertyKey = helper("7.0.0-beta.0")`
|
||||
export default function _toPropertyKey(key) {
|
||||
if (typeof key === "symbol") {
|
||||
return key;
|
||||
@@ -932,7 +949,7 @@ helpers.toPropertyKey = () => template.program.ast`
|
||||
* Add a helper that will throw a useful error if the transform fails to detect the class
|
||||
* property assignment, so users know something failed.
|
||||
*/
|
||||
helpers.initializerWarningHelper = () => template.program.ast`
|
||||
helpers.initializerWarningHelper = helper("7.0.0-beta.0")`
|
||||
export default function _initializerWarningHelper(descriptor, context){
|
||||
throw new Error(
|
||||
'Decorating class property failed. Please ensure that ' +
|
||||
@@ -946,7 +963,7 @@ helpers.initializerWarningHelper = () => template.program.ast`
|
||||
/**
|
||||
* Add a helper to call as a replacement for class property definition.
|
||||
*/
|
||||
helpers.initializerDefineProperty = () => template.program.ast`
|
||||
helpers.initializerDefineProperty = helper("7.0.0-beta.0")`
|
||||
export default function _initializerDefineProperty(target, property, descriptor, context){
|
||||
if (!descriptor) return;
|
||||
|
||||
@@ -963,7 +980,7 @@ helpers.initializerDefineProperty = () => template.program.ast`
|
||||
* Add a helper to take an initial descriptor, apply some decorators to it, and optionally
|
||||
* define the property.
|
||||
*/
|
||||
helpers.applyDecoratedDescriptor = () => template.program.ast`
|
||||
helpers.applyDecoratedDescriptor = helper("7.0.0-beta.0")`
|
||||
export default function _applyDecoratedDescriptor(target, property, decorators, descriptor, context){
|
||||
var desc = {};
|
||||
Object['ke' + 'ys'](descriptor).forEach(function(key){
|
||||
@@ -995,14 +1012,14 @@ helpers.applyDecoratedDescriptor = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.classPrivateFieldLooseKey = () => template.program.ast`
|
||||
helpers.classPrivateFieldLooseKey = helper("7.0.0-beta.0")`
|
||||
var id = 0;
|
||||
export default function _classPrivateFieldKey(name) {
|
||||
return "__private_" + (id++) + "_" + name;
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.classPrivateFieldLooseBase = () => template.program.ast`
|
||||
helpers.classPrivateFieldLooseBase = helper("7.0.0-beta.0")`
|
||||
export default function _classPrivateFieldBase(receiver, privateKey) {
|
||||
if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
|
||||
throw new TypeError("attempted to use private field on non-instance");
|
||||
@@ -1011,7 +1028,7 @@ helpers.classPrivateFieldLooseBase = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.classPrivateFieldGet = () => template.program.ast`
|
||||
helpers.classPrivateFieldGet = helper("7.0.0-beta.0")`
|
||||
export default function _classPrivateFieldGet(receiver, privateMap) {
|
||||
if (!privateMap.has(receiver)) {
|
||||
throw new TypeError("attempted to get private field on non-instance");
|
||||
@@ -1020,7 +1037,7 @@ helpers.classPrivateFieldGet = () => template.program.ast`
|
||||
}
|
||||
`;
|
||||
|
||||
helpers.classPrivateFieldSet = () => template.program.ast`
|
||||
helpers.classPrivateFieldSet = helper("7.0.0-beta.0")`
|
||||
export default function _classPrivateFieldSet(receiver, privateMap, value) {
|
||||
if (!privateMap.has(receiver)) {
|
||||
throw new TypeError("attempted to set private field on non-instance");
|
||||
|
||||
@@ -226,13 +226,19 @@ function permuteHelperAST(file, metadata, id, localBindings, getDependency) {
|
||||
});
|
||||
}
|
||||
|
||||
const helperData = {};
|
||||
const helperData = Object.create(null);
|
||||
function loadHelper(name) {
|
||||
if (!helperData[name]) {
|
||||
if (!helpers[name]) throw new ReferenceError(`Unknown helper ${name}`);
|
||||
const helper = helpers[name];
|
||||
if (!helper) {
|
||||
throw Object.assign(new ReferenceError(`Unknown helper ${name}`), {
|
||||
code: "BABEL_HELPER_UNKNOWN",
|
||||
helper: name,
|
||||
});
|
||||
}
|
||||
|
||||
const fn = () => {
|
||||
return t.file(helpers[name]());
|
||||
return t.file(helper.ast());
|
||||
};
|
||||
|
||||
const metadata = getHelperMetadata(fn());
|
||||
@@ -247,6 +253,9 @@ function loadHelper(name) {
|
||||
globals: metadata.globals,
|
||||
};
|
||||
},
|
||||
minVersion() {
|
||||
return helper.minVersion;
|
||||
},
|
||||
dependencies: metadata.dependencies,
|
||||
};
|
||||
}
|
||||
@@ -263,6 +272,10 @@ export function get(
|
||||
return loadHelper(name).build(getDependency, id, localBindings);
|
||||
}
|
||||
|
||||
export function minVersion(name: string) {
|
||||
return loadHelper(name).minVersion();
|
||||
}
|
||||
|
||||
export function getDependencies(name: string): $ReadOnlyArray<string> {
|
||||
return Array.from(loadHelper(name).dependencies.values());
|
||||
}
|
||||
|
||||
@@ -17,7 +17,10 @@ export default function defineHelper(
|
||||
throw new Error(`The ${id} helper is already defined.`);
|
||||
}
|
||||
Object.defineProperty(helpers, id, {
|
||||
value: template.program(code),
|
||||
value: {
|
||||
minVersion: "7.0.0-beta.0",
|
||||
ast: template.program(code),
|
||||
},
|
||||
});
|
||||
return id;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@babel/highlight",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Syntax highlight JavaScript strings for output in terminals.",
|
||||
"author": "suchipi <me@suchipi.com>",
|
||||
"homepage": "https://babeljs.io/",
|
||||
@@ -10,7 +10,7 @@
|
||||
"dependencies": {
|
||||
"chalk": "^2.0.0",
|
||||
"esutils": "^2.0.2",
|
||||
"js-tokens": "^3.0.0"
|
||||
"js-tokens": "^4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"strip-ansi": "^4.0.0"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@babel/node",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "Babel command line",
|
||||
"author": "Sebastian McKenzie <sebmck@gmail.com>",
|
||||
"homepage": "https://babeljs.io/",
|
||||
@@ -16,8 +16,8 @@
|
||||
"compiler"
|
||||
],
|
||||
"dependencies": {
|
||||
"@babel/polyfill": "7.0.0-beta.55",
|
||||
"@babel/register": "7.0.0-beta.55",
|
||||
"@babel/polyfill": "^7.0.0-rc.4",
|
||||
"@babel/register": "^7.0.0-rc.4",
|
||||
"commander": "^2.8.1",
|
||||
"fs-readdir-recursive": "^1.0.0",
|
||||
"lodash": "^4.17.10",
|
||||
@@ -25,11 +25,11 @@
|
||||
"v8flags": "^3.1.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@babel/core": ">=7.0.0-beta.50 <7.0.0-rc.0"
|
||||
"@babel/core": "^7.0.0-0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "7.0.0-beta.55",
|
||||
"@babel/helper-fixtures": "7.0.0-beta.55"
|
||||
"@babel/core": "^7.0.0-rc.4",
|
||||
"@babel/helper-fixtures": "^7.0.0-rc.4"
|
||||
},
|
||||
"bin": {
|
||||
"babel-node": "./bin/babel-node.js"
|
||||
|
||||
@@ -60,6 +60,9 @@ program.usage("[options] [ -e script | script.js ] [arguments]");
|
||||
program.parse(process.argv);
|
||||
|
||||
register({
|
||||
caller: {
|
||||
name: "@babel/node",
|
||||
},
|
||||
extensions: program.extensions,
|
||||
ignore: program.ignore,
|
||||
only: program.only,
|
||||
|
||||
@@ -47,6 +47,7 @@ getV8Flags(function(err, v8Flags) {
|
||||
case "--debug-brk":
|
||||
case "--inspect":
|
||||
case "--inspect-brk":
|
||||
case "--experimental-modules":
|
||||
args.unshift(arg);
|
||||
break;
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@babel/parser",
|
||||
"version": "7.0.0-beta.55",
|
||||
"version": "7.0.0-rc.4",
|
||||
"description": "A JavaScript parser",
|
||||
"author": "Sebastian McKenzie <sebmck@gmail.com>",
|
||||
"homepage": "https://babeljs.io/",
|
||||
@@ -23,7 +23,7 @@
|
||||
"node": ">=6.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/helper-fixtures": "7.0.0-beta.55",
|
||||
"@babel/helper-fixtures": "^7.0.0-rc.4",
|
||||
"charcodes": "0.1.0",
|
||||
"unicode-11.0.0": "^0.7.7"
|
||||
},
|
||||
|
||||
@@ -122,6 +122,15 @@ export default class CommentsParser extends BaseParser {
|
||||
lastComment.end <= node.end
|
||||
) {
|
||||
if (this.state.commentPreviousNode) {
|
||||
for (j = 0; j < this.state.leadingComments.length; j++) {
|
||||
if (
|
||||
this.state.leadingComments[j].end <
|
||||
this.state.commentPreviousNode.end
|
||||
) {
|
||||
this.state.leadingComments.splice(j, 1);
|
||||
j--;
|
||||
}
|
||||
}
|
||||
if (this.state.leadingComments.length > 0) {
|
||||
lastArg.trailingComments = this.state.leadingComments;
|
||||
this.state.leadingComments = [];
|
||||
|
||||
@@ -41,13 +41,26 @@ export function getPluginOption(
|
||||
const PIPELINE_PROPOSALS = ["minimal"];
|
||||
|
||||
export function validatePlugins(plugins: PluginList) {
|
||||
if (
|
||||
hasPlugin(plugins, "decorators") &&
|
||||
hasPlugin(plugins, "decorators-legacy")
|
||||
) {
|
||||
throw new Error(
|
||||
"Cannot use the decorators and decorators-legacy plugin together",
|
||||
if (hasPlugin(plugins, "decorators")) {
|
||||
if (hasPlugin(plugins, "decorators-legacy")) {
|
||||
throw new Error(
|
||||
"Cannot use the decorators and decorators-legacy plugin together",
|
||||
);
|
||||
}
|
||||
|
||||
const decoratorsBeforeExport = getPluginOption(
|
||||
plugins,
|
||||
"decorators",
|
||||
"decoratorsBeforeExport",
|
||||
);
|
||||
if (decoratorsBeforeExport == null) {
|
||||
throw new Error(
|
||||
"The 'decorators' plugin requires a" +
|
||||
" 'decoratorsBeforeExport' option, whose value must be a boolean.",
|
||||
);
|
||||
} else if (typeof decoratorsBeforeExport !== "boolean") {
|
||||
throw new Error("'decoratorsBeforeExport' must be a boolean.");
|
||||
}
|
||||
}
|
||||
|
||||
if (hasPlugin(plugins, "flow") && hasPlugin(plugins, "typescript")) {
|
||||
|
||||
@@ -1917,6 +1917,15 @@ export default (superClass: Class<Parser>): Class<Parser> =>
|
||||
return super.parseClassProperty(node);
|
||||
}
|
||||
|
||||
parseClassPrivateProperty(
|
||||
node: N.ClassPrivateProperty,
|
||||
): N.ClassPrivateProperty {
|
||||
if (this.match(tt.colon)) {
|
||||
node.typeAnnotation = this.flowParseTypeAnnotation();
|
||||
}
|
||||
return super.parseClassPrivateProperty(node);
|
||||
}
|
||||
|
||||
// determine whether or not we're currently in the position where a class method would appear
|
||||
isClassMethod(): boolean {
|
||||
return this.isRelational("<") || super.isClassMethod();
|
||||
|
||||
@@ -1535,6 +1535,19 @@ export default (superClass: Class<Parser>): Class<Parser> =>
|
||||
cls.abstract = true;
|
||||
return cls;
|
||||
}
|
||||
|
||||
// export default interface allowed in:
|
||||
// https://github.com/Microsoft/TypeScript/pull/16040
|
||||
if (this.state.value === "interface") {
|
||||
const result = this.tsParseDeclaration(
|
||||
this.startNode(),
|
||||
this.state.value,
|
||||
true,
|
||||
);
|
||||
|
||||
if (result) return result;
|
||||
}
|
||||
|
||||
return super.parseExportDefaultExpression();
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ import {
|
||||
lineBreak,
|
||||
lineBreakG,
|
||||
isNewLine,
|
||||
nonASCIIwhitespace,
|
||||
isWhitespace,
|
||||
} from "../util/whitespace";
|
||||
import State from "./state";
|
||||
|
||||
@@ -110,18 +110,6 @@ export class Token {
|
||||
|
||||
// ## Tokenizer
|
||||
|
||||
function codePointToString(code: number): string {
|
||||
// UTF-16 Decoding
|
||||
if (code <= 0xffff) {
|
||||
return String.fromCharCode(code);
|
||||
} else {
|
||||
return String.fromCharCode(
|
||||
((code - 0x10000) >> 10) + 0xd800,
|
||||
((code - 0x10000) & 1023) + 0xdc00,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default class Tokenizer extends LocationParser {
|
||||
// Forward-declarations
|
||||
// parser/util.js
|
||||
@@ -226,7 +214,7 @@ export default class Tokenizer extends LocationParser {
|
||||
if (curContext.override) {
|
||||
curContext.override(this);
|
||||
} else {
|
||||
this.readToken(this.fullCharCodeAtPos());
|
||||
this.readToken(this.input.codePointAt(this.state.pos));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -240,14 +228,6 @@ export default class Tokenizer extends LocationParser {
|
||||
}
|
||||
}
|
||||
|
||||
fullCharCodeAtPos(): number {
|
||||
const code = this.input.charCodeAt(this.state.pos);
|
||||
if (code <= 0xd7ff || code >= 0xe000) return code;
|
||||
|
||||
const next = this.input.charCodeAt(this.state.pos + 1);
|
||||
return (code << 10) + next - 0x35fdc00;
|
||||
}
|
||||
|
||||
pushComment(
|
||||
block: boolean,
|
||||
text: string,
|
||||
@@ -331,11 +311,6 @@ export default class Tokenizer extends LocationParser {
|
||||
loop: while (this.state.pos < this.input.length) {
|
||||
const ch = this.input.charCodeAt(this.state.pos);
|
||||
switch (ch) {
|
||||
case charCodes.space:
|
||||
case charCodes.nonBreakingSpace:
|
||||
++this.state.pos;
|
||||
break;
|
||||
|
||||
case charCodes.carriageReturn:
|
||||
if (
|
||||
this.input.charCodeAt(this.state.pos + 1) === charCodes.lineFeed
|
||||
@@ -367,11 +342,7 @@ export default class Tokenizer extends LocationParser {
|
||||
break;
|
||||
|
||||
default:
|
||||
if (
|
||||
(ch > charCodes.backSpace && ch < charCodes.shiftOut) ||
|
||||
(ch >= charCodes.oghamSpaceMark &&
|
||||
nonASCIIwhitespace.test(String.fromCharCode(ch)))
|
||||
) {
|
||||
if (isWhitespace(ch)) {
|
||||
++this.state.pos;
|
||||
} else {
|
||||
break loop;
|
||||
@@ -667,7 +638,7 @@ export default class Tokenizer extends LocationParser {
|
||||
} else {
|
||||
this.raise(
|
||||
this.state.pos,
|
||||
`Unexpected character '${codePointToString(code)}'`,
|
||||
`Unexpected character '${String.fromCodePoint(code)}'`,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -829,7 +800,7 @@ export default class Tokenizer extends LocationParser {
|
||||
|
||||
this.raise(
|
||||
this.state.pos,
|
||||
`Unexpected character '${codePointToString(code)}'`,
|
||||
`Unexpected character '${String.fromCodePoint(code)}'`,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -871,7 +842,7 @@ export default class Tokenizer extends LocationParser {
|
||||
|
||||
while (this.state.pos < this.input.length) {
|
||||
const char = this.input[this.state.pos];
|
||||
const charCode = this.fullCharCodeAtPos();
|
||||
const charCode = this.input.codePointAt(this.state.pos);
|
||||
|
||||
if (VALID_REGEX_FLAGS.indexOf(char) > -1) {
|
||||
if (mods.indexOf(char) > -1) {
|
||||
@@ -983,7 +954,7 @@ export default class Tokenizer extends LocationParser {
|
||||
}
|
||||
}
|
||||
|
||||
if (isIdentifierStart(this.fullCharCodeAtPos())) {
|
||||
if (isIdentifierStart(this.input.codePointAt(this.state.pos))) {
|
||||
this.raise(this.state.pos, "Identifier directly after number");
|
||||
}
|
||||
|
||||
@@ -1039,7 +1010,7 @@ export default class Tokenizer extends LocationParser {
|
||||
}
|
||||
}
|
||||
|
||||
if (isIdentifierStart(this.fullCharCodeAtPos())) {
|
||||
if (isIdentifierStart(this.input.codePointAt(this.state.pos))) {
|
||||
this.raise(this.state.pos, "Identifier directly after number");
|
||||
}
|
||||
|
||||
@@ -1208,7 +1179,7 @@ export default class Tokenizer extends LocationParser {
|
||||
}
|
||||
case charCodes.lowercaseU: {
|
||||
const code = this.readCodePoint(throwOnInvalid);
|
||||
return code === null ? null : codePointToString(code);
|
||||
return code === null ? null : String.fromCodePoint(code);
|
||||
}
|
||||
case charCodes.lowercaseT:
|
||||
return "\t";
|
||||
@@ -1286,7 +1257,7 @@ export default class Tokenizer extends LocationParser {
|
||||
first = true,
|
||||
chunkStart = this.state.pos;
|
||||
while (this.state.pos < this.input.length) {
|
||||
const ch = this.fullCharCodeAtPos();
|
||||
const ch = this.input.codePointAt(this.state.pos);
|
||||
if (isIdentifierChar(ch)) {
|
||||
this.state.pos += ch <= 0xffff ? 1 : 2;
|
||||
} else if (this.state.isIterator && ch === charCodes.atSign) {
|
||||
@@ -1312,7 +1283,7 @@ export default class Tokenizer extends LocationParser {
|
||||
}
|
||||
|
||||
// $FlowFixMe
|
||||
word += codePointToString(esc);
|
||||
word += String.fromCodePoint(esc);
|
||||
chunkStart = this.state.pos;
|
||||
} else {
|
||||
break;
|
||||
|
||||
@@ -66,18 +66,12 @@ export class TokenType {
|
||||
}
|
||||
}
|
||||
|
||||
class KeywordTokenType extends TokenType {
|
||||
constructor(name: string, options: TokenOptions = {}) {
|
||||
options.keyword = name;
|
||||
|
||||
super(name, options);
|
||||
}
|
||||
function KeywordTokenType(keyword: string, options: TokenOptions = {}) {
|
||||
return new TokenType(keyword, { ...options, keyword });
|
||||
}
|
||||
|
||||
export class BinopTokenType extends TokenType {
|
||||
constructor(name: string, prec: number) {
|
||||
super(name, { beforeExpr, binop: prec });
|
||||
}
|
||||
function BinopTokenType(name: string, binop: number) {
|
||||
return new TokenType(name, { beforeExpr, binop });
|
||||
}
|
||||
|
||||
export const types: { [name: string]: TokenType } = {
|
||||
|
||||
@@ -717,6 +717,7 @@ export type ClassPrivateProperty = NodeBase & {
|
||||
value: ?Expression, // TODO: Not in spec that this is nullable.
|
||||
static: boolean,
|
||||
computed: false,
|
||||
typeAnnotation?: ?TypeAnnotation, // TODO: Not in spec
|
||||
};
|
||||
|
||||
export type OptClassDeclaration = ClassBase &
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user