Compare commits

..

No commits in common. "initializers-fix" and "v7.6.4" have entirely different histories.

2974 changed files with 5247 additions and 173416 deletions

View File

@ -30,20 +30,11 @@ aliases:
- &artifact_env_min - &artifact_env_min
path: ~/babel/packages/babel-preset-env-standalone/babel-preset-env.min.js path: ~/babel/packages/babel-preset-env-standalone/babel-preset-env.min.js
- &test262_workdir
working_directory: ~/babel/babel-test262-runner
- &artifact_test262_tap
path: ~/test262.tap
- &artifact_test262_xunit
path: ~/test-results
jobs: jobs:
test: build:
working_directory: ~/babel working_directory: ~/babel
docker: docker:
- image: circleci/node:13 - image: circleci/node:12
steps: steps:
- checkout - checkout
- restore-cache: *restore-yarn-cache - restore-cache: *restore-yarn-cache
@ -63,59 +54,3 @@ jobs:
- store_artifacts: *artifact_env_min - store_artifacts: *artifact_env_min
- save_cache: *save-node-modules-cache - save_cache: *save-node-modules-cache
- save_cache: *save-yarn-cache - save_cache: *save-yarn-cache
test262:
working_directory: ~/babel
docker:
- image: circleci/node:12
steps:
- checkout
- restore-cache: *restore-yarn-cache
- restore-cache: *restore-node-modules-cache
- run:
name: Build Babel
command: BABEL_ENV=test make bootstrap
- run:
name: Link Babel
command: |
cd packages
for package in */; do
cd $package
yarn link
cd ..
done
- run:
name: Setup Test Runner
command: |
git clone --recurse-submodules https://github.com/babel/babel-test262-runner
cd babel-test262-runner
yarn
yarn add tap-mocha-reporter --dev
curl -L https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64 > jq
chmod +x ./jq
for package in ../packages/*/package.json; do
yarn link $(./jq -j ".name" $package)
done
node lib/download-node
- run:
name: Run Test262
command: node lib/run-tests I_AM_SURE | tee ~/test262.tap
<<: *test262_workdir
- store_artifacts: *artifact_test262_tap
- run:
name: Output test262 results
command: |
cat ~/test262.tap | $(npm bin)/tap-mocha-reporter spec || true
<<: *test262_workdir
workflows:
version: 2
test:
jobs:
- test
master:
jobs:
- test262:
filters:
branches:
only:
- master

2
.gitignore vendored
View File

@ -35,7 +35,7 @@ package-lock.json
!/packages/babel-runtime-corejs2/helpers/temporalRef.js !/packages/babel-runtime-corejs2/helpers/temporalRef.js
/packages/babel-runtime-corejs2/helpers/esm/*.js /packages/babel-runtime-corejs2/helpers/esm/*.js
!/packages/babel-runtime-corejs2/helpers/esm/toArray.js !/packages/babel-runtime-corejs2/helpers/esm/toArray.js
/packages/babel-runtime-corejs2/helpers/esm/iterableToArray.js !/packages/babel-runtime-corejs2/helpers/esm/iterableToArray.js
!/packages/babel-runtime-corejs2/helpers/esm/temporalRef.js !/packages/babel-runtime-corejs2/helpers/esm/temporalRef.js
/packages/babel-runtime-corejs2/core-js/**/*.js /packages/babel-runtime-corejs2/core-js/**/*.js
!/packages/babel-runtime-corejs2/core-js/map.js !/packages/babel-runtime-corejs2/core-js/map.js

View File

@ -28,7 +28,7 @@ matrix:
- node_js: "node" - node_js: "node"
env: JOB=lint env: JOB=lint
# We test the latest version on circleci # We test the latest version on circleci
- node_js: "12" - node_js: "11"
# Move `windows` build to be the third since it is slow # Move `windows` build to be the third since it is slow
- os: windows - os: windows
node_js: "node" node_js: "node"

View File

@ -17,138 +17,6 @@ See [Babylon's CHANGELOG](packages/babylon/CHANGELOG.md) for the Babylon pre-7.0
<!-- DO NOT CHANGE THESE COMMENTS - See .github/actions/trigger-github-release/update-changelog.js --> <!-- DO NOT CHANGE THESE COMMENTS - See .github/actions/trigger-github-release/update-changelog.js -->
<!-- insert-new-changelog-here --> <!-- insert-new-changelog-here -->
## v7.7.3 (2019-11-08)
#### :bug: Bug Fix
* `babel-parser`
* [#10682](https://github.com/babel/babel/pull/10682) Don't recover from "adjacent jsx elements" parser error ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo))
## v7.7.2 (2019-11-07)
#### :bug: Bug Fix
* `babel-parser`
* [#10669](https://github.com/babel/babel/pull/10669) Parse arrows with params annotations in conditional expressions ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo))
* `babel-plugin-transform-typescript`
* [#10658](https://github.com/babel/babel/pull/10658) fix: remove accessibility of constructor ([@JLHwung](https://github.com/JLHwung))
* `babel-traverse`
* [#10656](https://github.com/babel/babel/pull/10656) fix: add inList setter for compatibility with babel-minify ([@JLHwung](https://github.com/JLHwung))
## v7.7.1 (2019-11-05)
#### :bug: Bug Fix
* `babel-types`
* [#10650](https://github.com/babel/babel/pull/10650) Revert "throw a TypeError if identifier validation fails (#10621)" ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo))
* `babel-preset-env`
* [#10649](https://github.com/babel/babel/pull/10649) Fix(babel-preset-env): check api.caller is a function to avoid to thr… ([@love2me](https://github.com/love2me))
## v7.7.0 (2019-11-05)
#### :eyeglasses: Spec Compliance
* `babel-types`
* [#10621](https://github.com/babel/babel/pull/10621) throw a TypeError if identifier validation fails. ([@dentrado](https://github.com/dentrado))
* `babel-parser`
* [#10559](https://github.com/babel/babel/pull/10559) fix: Exclude catch clause from let identifier error. ([@gonzarodriguezt](https://github.com/gonzarodriguezt))
* [#10567](https://github.com/babel/babel/pull/10567) [parser] Exception to 8 and 9 in tagged template. ([@pnowak](https://github.com/pnowak))
* [#10532](https://github.com/babel/babel/pull/10532) Allow duplicate __proto__ keys in patterns, simple case (#6705). ([@alejo90](https://github.com/alejo90))
#### :rocket: New Feature
* `babel-generator`, `babel-helper-create-class-features-plugin`, `babel-parser`, `babel-plugin-transform-typescript`, `babel-preset-typescript`, `babel-types`
* [#10545](https://github.com/babel/babel/pull/10545) Add support for TS declare modifier on fields. ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo))
* `babel-core`, `babel-parser`, `babel-preset-typescript`
* [#10363](https://github.com/babel/babel/pull/10363) @babel/parser error recovery. ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo))
* `babel-core`
* [#10599](https://github.com/babel/babel/pull/10599) Add support for .cjs config files. ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo))
* [#10501](https://github.com/babel/babel/pull/10501) Add support for babel.config.json. ([@devongovett](https://github.com/devongovett))
* [#10361](https://github.com/babel/babel/pull/10361) feat: if code frame error is on a single line, highlight the whole path. ([@SimenB](https://github.com/SimenB))
* `babel-plugin-syntax-top-level-await`, `babel-preset-env`
* [#10573](https://github.com/babel/babel/pull/10573) Create @babel/plugin-syntax-top-level-await. ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo))
* `babel-helper-builder-react-jsx`, `babel-plugin-transform-react-jsx`, `babel-preset-react`
* [#10572](https://github.com/babel/babel/pull/10572) [transform-react-jsx] Add useSpread option to transform JSX. ([@ivandevp](https://github.com/ivandevp))
* `babel-generator`, `babel-parser`, `babel-plugin-proposal-decorators`, `babel-plugin-syntax-flow`, `babel-types`
* [#10344](https://github.com/babel/babel/pull/10344) Flow enums parsing. ([@gkz](https://github.com/gkz))
* `babel-plugin-transform-function-name`, `babel-plugin-transform-modules-umd`, `babel-preset-env`
* [#10477](https://github.com/babel/babel/pull/10477) Changes UMD callsite to be more likely to pass in the intended object.. ([@MicahZoltu](https://github.com/MicahZoltu))
* `babel-parser`
* [#10449](https://github.com/babel/babel/pull/10449) Create parser plugin "topLevelAwait". ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo))
* [#10521](https://github.com/babel/babel/pull/10521) [parser] Enable "exportNamespaceFrom" by default. ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo))
* [#10483](https://github.com/babel/babel/pull/10483) [parser] Add support for private fields in TypeScript. ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo))
* `babel-generator`, `babel-parser`, `babel-types`
* [#10543](https://github.com/babel/babel/pull/10543) add assertions signature for TypeScript. ([@tanhauhau](https://github.com/tanhauhau))
* `babel-cli`, `babel-register`
* [#8622](https://github.com/babel/babel/pull/8622) Make dir for babel --out-file. ([@TrySound](https://github.com/TrySound))
* `babel-cli`
* [#10399](https://github.com/babel/babel/pull/10399) Closes [#8326](https://github.com/babel/babel/issues/8326), add back --quiet option.. ([@chris-peng-1244](https://github.com/chris-peng-1244))
#### :bug: Bug Fix
* `babel-helpers`, `babel-plugin-proposal-async-generator-functions`, `babel-plugin-proposal-function-sent`, `babel-preset-env`
* [#10422](https://github.com/babel/babel/pull/10422) Correctly delegate .return() in async generator. ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo))
* `babel-helper-module-transforms`, `babel-plugin-transform-modules-commonjs`
* [#10628](https://github.com/babel/babel/pull/10628) Don't throw when destructuring into a var named as an import. ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo))
* `babel-plugin-transform-modules-systemjs`
* [#10638](https://github.com/babel/babel/pull/10638) fix: remove ExportNamedDeclaration when the specifier is empty. ([@JLHwung](https://github.com/JLHwung))
* `babel-parser`
* [#10631](https://github.com/babel/babel/pull/10631) [TS] Parse calls with type args in optional chains. ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo))
* [#10607](https://github.com/babel/babel/pull/10607) fixed missing errors on assignment pattern in object expression. ([@vivek12345](https://github.com/vivek12345))
* [#10594](https://github.com/babel/babel/pull/10594) [parser] Parse only modifiers of actual methods. ([@gonzarodriguezt](https://github.com/gonzarodriguezt))
* `babel-plugin-transform-typescript`
* [#10555](https://github.com/babel/babel/pull/10555) [TS] Correctly transform computed strings and templates in enums. ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo))
* `babel-core`
* [#10623](https://github.com/babel/babel/pull/10623) Fix: inputSourceMap should work when it is an external file. ([@JLHwung](https://github.com/JLHwung))
* [#10539](https://github.com/babel/babel/pull/10539) fix: remove filename annotation in buildCodeFrameError. ([@JLHwung](https://github.com/JLHwung))
* `babel-plugin-proposal-decorators`
* [#10578](https://github.com/babel/babel/pull/10578) [decorators] fix: support string literal properties. ([@mwhitworth](https://github.com/mwhitworth))
* `babel-helpers`, `babel-plugin-proposal-dynamic-import`, `babel-plugin-transform-modules-commonjs`, `babel-preset-env`
* [#10574](https://github.com/babel/babel/pull/10574) fix: _interopRequireWildcard should only cache objects. ([@samMeow](https://github.com/samMeow))
* `babel-traverse`
* [#9777](https://github.com/babel/babel/pull/9777) [traverse] Allow skipping nodes inserted with .replaceWith(). ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo))
* `babel-preset-env`
* [#10146](https://github.com/babel/babel/pull/10146) Inject core-js@3 imports in Program:exit instead of on post(). ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo))
* `babel-generator`
* [#10519](https://github.com/babel/babel/pull/10519) Fix generator missing parens around an arrow returning function type. ([@existentialism](https://github.com/existentialism))
* `babel-plugin-transform-async-to-generator`, `babel-preset-env`, `babel-traverse`
* [#9939](https://github.com/babel/babel/pull/9939) Don't use args rest/spread to hoist super method calls. ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo))
#### :nail_care: Polish
* `babel-plugin-transform-classes`, `babel-plugin-transform-regenerator`, `babel-preset-env`
* [#9481](https://github.com/babel/babel/pull/9481) [preset-env] Don't use async-to-generator when already using regenerator. ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo))
* `babel-helpers`, `babel-plugin-transform-modules-commonjs`, `babel-preset-env`
* [#10585](https://github.com/babel/babel/pull/10585) fix(babelhelpers/interopRequireWildcard): Avoid double nullish check. ([@ExE-Boss](https://github.com/ExE-Boss))
* `babel-register`
* [#10557](https://github.com/babel/babel/pull/10557) fix: disable caching when babel could not read/write cache. ([@JLHwung](https://github.com/JLHwung))
#### :house: Internal
* `babel-cli`, `babel-node`
* [#10619](https://github.com/babel/babel/pull/10619) chore: remove output-file-sync dependency. ([@JLHwung](https://github.com/JLHwung))
* `babel-register`
* [#10614](https://github.com/babel/babel/pull/10614) chore: bump source-map-support to 0.5.14. ([@JLHwung](https://github.com/JLHwung))
* `babel-helper-create-regexp-features-plugin`, `babel-plugin-proposal-unicode-property-regex`, `babel-plugin-transform-dotall-regex`, `babel-plugin-transform-named-capturing-groups-regex`, `babel-plugin-transform-unicode-regex`, `babel-preset-env`
* [#10447](https://github.com/babel/babel/pull/10447) Merge multiple regex transform plugin. ([@JLHwung](https://github.com/JLHwung))
* `babel-preset-env`
* [#10612](https://github.com/babel/babel/pull/10612) chore: update web.immediate support fixtures. ([@JLHwung](https://github.com/JLHwung))
* `babel-helper-module-imports`
* [#10608](https://github.com/babel/babel/pull/10608) Use .find instead of .filter to get targetPath in ImportInjector. ([@Andarist](https://github.com/Andarist))
* Other
* [#10600](https://github.com/babel/babel/pull/10600) Test node@13 on circle. ([@existentialism](https://github.com/existentialism))
* [#10593](https://github.com/babel/babel/pull/10593) chore: replace outdated travis-ci.org badges [ci skip]. ([@JLHwung](https://github.com/JLHwung))
* [#10591](https://github.com/babel/babel/pull/10591) chore: test against Node.js 13. ([@JLHwung](https://github.com/JLHwung))
* [#10556](https://github.com/babel/babel/pull/10556) Add master branch workflow for test262 tests. ([@jbhoosreddy](https://github.com/jbhoosreddy))
* [#10553](https://github.com/babel/babel/pull/10553) chore: introduce envinfo into environment section. ([@JLHwung](https://github.com/JLHwung))
* `babel-runtime`
* [#10418](https://github.com/babel/babel/pull/10418) docs: add homepage link. ([@DanArthurGallagher](https://github.com/DanArthurGallagher))
* `babel-helper-annotate-as-pure`, `babel-helper-bindify-decorators`, `babel-helper-builder-binary-assignment-operator-visitor`, `babel-helper-builder-react-jsx`, `babel-helper-call-delegate`, `babel-helper-define-map`, `babel-helper-explode-assignable-expression`, `babel-helper-explode-class`, `babel-helper-function-name`, `babel-helper-get-function-arity`, `babel-helper-hoist-variables`, `babel-helper-member-expression-to-functions`, `babel-helper-module-imports`, `babel-helper-module-transforms`, `babel-helper-optimise-call-expression`, `babel-helper-remap-async-to-generator`, `babel-helper-replace-supers`, `babel-helper-simple-access`, `babel-helper-split-export-declaration`, `babel-helper-wrap-function`, `babel-helpers`, `babel-template`
* [#10568](https://github.com/babel/babel/pull/10568) Bump babel-types to ^7.6.3. ([@JLHwung](https://github.com/JLHwung))
#### :running_woman: Performance
* `babel-traverse`
* [#10480](https://github.com/babel/babel/pull/10480) Traverse performance. ([@JLHwung](https://github.com/JLHwung))
## v7.6.4 (2019-10-10)
#### :eyeglasses: Spec Compliance
* `babel-parser`
* [#10491](https://github.com/babel/babel/pull/10491) Trailing comma after rest - The final fix ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo))
#### :bug: Bug Fix
* `babel-cli`, `babel-core`, `babel-generator`, `babel-helper-transform-fixture-test-runner`
* [#10536](https://github.com/babel/babel/pull/10536) Revert "chore: Upgrade source-map to 0.6.1 (#10446)" ([@nicolo-ribaudo](https://github.com/nicolo-ribaudo))
## v7.6.3 (2019-10-08) ## v7.6.3 (2019-10-08)
#### :eyeglasses: Spec Compliance #### :eyeglasses: Spec Compliance

View File

@ -191,12 +191,9 @@ new-version:
git pull --rebase git pull --rebase
yarn lerna version --force-publish="@babel/runtime,@babel/runtime-corejs2,@babel/runtime-corejs3,@babel/standalone,@babel/preset-env-standalone" yarn lerna version --force-publish="@babel/runtime,@babel/runtime-corejs2,@babel/runtime-corejs3,@babel/standalone,@babel/preset-env-standalone"
publish-cerxes: prepublish
yarn lerna publish --registry="https://npm.cerxes.net" --force-publish --allow-branch initializers-fix --canary --preid csx --dist-tag csx
# NOTE: Run make new-version first # NOTE: Run make new-version first
publish: prepublish publish: prepublish
yarn lerna publish from-git yarn lerna publish from-git --require-scripts
$(MAKE) clean $(MAKE) clean
publish-ci: prepublish publish-ci: prepublish
@ -206,7 +203,7 @@ else
echo "Missing NPM_TOKEN env var" echo "Missing NPM_TOKEN env var"
exit 1 exit 1
endif endif
yarn lerna publish from-git --yes yarn lerna publish from-git --require-scripts --yes
rm -f .npmrc rm -f .npmrc
$(MAKE) clean $(MAKE) clean
@ -216,7 +213,7 @@ yarn-install: clean-all
yarn --ignore-engines yarn --ignore-engines
lerna-bootstrap: yarn-install lerna-bootstrap: yarn-install
yarn lerna bootstrap yarn lerna bootstrap -- --ignore-engines
bootstrap: bootstrap-only bootstrap: bootstrap-only
$(MAKE) build $(MAKE) build

View File

@ -4,23 +4,16 @@
</a> </a>
</p> </p>
<p align="center">
<span style="color:darkred">
<b><i>WARNING</i> This is a fork of babel to test a fix for initializer-variables with class-properties (proposals-stuff)</b>
</span>
</p>
<p align="center"> <p align="center">
The compiler for writing next generation JavaScript. The compiler for writing next generation JavaScript.
</p> </p>
<p align="center"> <p align="center">
<a href="https://www.npmjs.com/package/@babel/core"><img alt="v7 npm Downloads" src="https://img.shields.io/npm/dm/@babel/core.svg?maxAge=43200&label=v7%20downloads"></a> <a href="https://www.npmjs.com/package/@babel/core"><img alt="v7 npm Downloads" src="https://img.shields.io/npm/dm/@babel/core.svg?maxAge=43200&label=v7%20downloads"></a>
<a href="https://www.npmjs.com/package/babel-core"><img alt="v6 npm Downloads" src="https://img.shields.io/npm/dm/babel-core.svg?maxAge=43200&label=v6%20downloads"></a> <a href="https://www.npmjs.com/package/babel-core"><img alt="v6 npm Downloads" src="https://img.shields.io/npm/dm/babel-core.svg?maxAge=43200&label=v6%20downloads"></a>
</p> </p>
<p align="center"> <p align="center">
<a href="https://travis-ci.com/babel/babel"><img alt="Travis Status" src="https://img.shields.io/travis/com/babel/babel/master.svg?label=travis&maxAge=43200"></a> <a href="https://travis-ci.org/babel/babel"><img alt="Travis Status" src="https://img.shields.io/travis/babel/babel/master.svg?label=travis&maxAge=43200"></a>
<a href="https://circleci.com/gh/babel/babel"><img alt="CircleCI Status" src="https://img.shields.io/circleci/project/github/babel/babel/master.svg?label=circle&maxAge=43200"></a> <a href="https://circleci.com/gh/babel/babel"><img alt="CircleCI Status" src="https://img.shields.io/circleci/project/github/babel/babel/master.svg?label=circle&maxAge=43200"></a>
<a href="https://codecov.io/github/babel/babel"><img alt="Coverage Status" src="https://img.shields.io/codecov/c/github/babel/babel/master.svg?maxAge=43200"></a> <a href="https://codecov.io/github/babel/babel"><img alt="Coverage Status" src="https://img.shields.io/codecov/c/github/babel/babel/master.svg?maxAge=43200"></a>
<a href="https://slack.babeljs.io/"><img alt="Slack Status" src="https://slack.babeljs.io/badge.svg"></a> <a href="https://slack.babeljs.io/"><img alt="Slack Status" src="https://slack.babeljs.io/badge.svg"></a>

View File

@ -16,7 +16,7 @@
"@babel/plugin-syntax-object-rest-spread": "^7.0.0" "@babel/plugin-syntax-object-rest-spread": "^7.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@babel/core": "^7.0.0-0 || csx" "@babel/core": "^7.0.0-0"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.0.0", "@babel/core": "^7.0.0",

View File

@ -16,7 +16,7 @@
"@babel/plugin-syntax-optional-catch-binding": "^7.0.0" "@babel/plugin-syntax-optional-catch-binding": "^7.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@babel/core": "^7.0.0-0 || csx" "@babel/core": "^7.0.0-0"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.0.0", "@babel/core": "^7.0.0",

View File

@ -1,5 +1,5 @@
{ {
"version": "7.7.3", "version": "7.6.4",
"changelog": { "changelog": {
"repo": "babel/babel", "repo": "babel/babel",
"cacheDir": ".changelog", "cacheDir": ".changelog",
@ -33,8 +33,5 @@
"npmClient": "yarn", "npmClient": "yarn",
"npmClientArgs": [ "npmClientArgs": [
"--no-lockfile" "--no-lockfile"
], ]
"publishConfig": {
"registry": "https://npm.cerxes.net"
}
} }

View File

@ -76,7 +76,7 @@
"@lerna/**/@lerna/collect-updates": "https://github.com/babel/lerna.git#babel-collect-updates" "@lerna/**/@lerna/collect-updates": "https://github.com/babel/lerna.git#babel-collect-updates"
}, },
"engines": { "engines": {
"node": ">= 6.9.0 < 14.0.0", "node": ">= 6.9.0 < 13.0.0",
"npm": ">= 3.x <= 6.x", "npm": ">= 3.x <= 6.x",
"yarn": ">=0.27.5 || >=1.0.0-20170811" "yarn": ">=0.27.5 || >=1.0.0-20170811"
}, },
@ -116,7 +116,6 @@
], ],
"transformIgnorePatterns": [ "transformIgnorePatterns": [
"/node_modules/", "/node_modules/",
"/packages/babel-standalone/babel.js",
"<rootDir>/packages/babel-standalone/babel(\\.min)?\\.js", "<rootDir>/packages/babel-standalone/babel(\\.min)?\\.js",
"<rootDir>/packages/babel-preset-env-standalone/babel-preset-env(\\.min)?\\.js", "<rootDir>/packages/babel-preset-env-standalone/babel-preset-env(\\.min)?\\.js",
"/test/(fixtures|tmp|__data__)/", "/test/(fixtures|tmp|__data__)/",

View File

@ -1,6 +1,6 @@
{ {
"name": "@babel/cli", "name": "@babel/cli",
"version": "7.7.0", "version": "7.6.4",
"description": "Babel command line.", "description": "Babel command line.",
"author": "Sebastian McKenzie <sebmck@gmail.com>", "author": "Sebastian McKenzie <sebmck@gmail.com>",
"homepage": "https://babeljs.io/", "homepage": "https://babeljs.io/",
@ -24,7 +24,8 @@
"fs-readdir-recursive": "^1.1.0", "fs-readdir-recursive": "^1.1.0",
"glob": "^7.0.0", "glob": "^7.0.0",
"lodash": "^4.17.13", "lodash": "^4.17.13",
"make-dir": "^2.1.0", "mkdirp": "^0.5.1",
"output-file-sync": "^2.0.0",
"slash": "^2.0.0", "slash": "^2.0.0",
"source-map": "^0.5.0" "source-map": "^0.5.0"
}, },
@ -32,10 +33,10 @@
"chokidar": "^2.1.8" "chokidar": "^2.1.8"
}, },
"peerDependencies": { "peerDependencies": {
"@babel/core": "^7.0.0-0 || csx" "@babel/core": "^7.0.0-0"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.7.0", "@babel/core": "^7.6.4",
"@babel/helper-fixtures": "^7.6.3" "@babel/helper-fixtures": "^7.6.3"
}, },
"bin": { "bin": {

View File

@ -1,7 +1,8 @@
// @flow // @flow
import defaults from "lodash/defaults"; import defaults from "lodash/defaults";
import { sync as makeDirSync } from "make-dir"; import outputFileSync from "output-file-sync";
import { sync as mkdirpSync } from "mkdirp";
import slash from "slash"; import slash from "slash";
import path from "path"; import path from "path";
import fs from "fs"; import fs from "fs";
@ -9,11 +10,6 @@ import fs from "fs";
import * as util from "./util"; import * as util from "./util";
import { type CmdOptions } from "./options"; import { type CmdOptions } from "./options";
function outputFileSync(filePath: string, data: string | Buffer): void {
makeDirSync(path.dirname(filePath));
fs.writeFileSync(filePath, data);
}
export default async function({ export default async function({
cliOptions, cliOptions,
babelOptions, babelOptions,
@ -126,21 +122,19 @@ export default async function({
util.deleteDir(cliOptions.outDir); util.deleteDir(cliOptions.outDir);
} }
makeDirSync(cliOptions.outDir); mkdirpSync(cliOptions.outDir);
let compiledFiles = 0; let compiledFiles = 0;
for (const filename of cliOptions.filenames) { for (const filename of cliOptions.filenames) {
compiledFiles += await handle(filename); compiledFiles += await handle(filename);
} }
if (!cliOptions.quiet) {
console.log( console.log(
`Successfully compiled ${compiledFiles} ${ `Successfully compiled ${compiledFiles} ${
compiledFiles !== 1 ? "files" : "file" compiledFiles !== 1 ? "files" : "file"
} with Babel.`, } with Babel.`,
); );
} }
}
if (cliOptions.watch) { if (cliOptions.watch) {
const chokidar = util.requireChokidar(); const chokidar = util.requireChokidar();

View File

@ -4,7 +4,6 @@ import convertSourceMap from "convert-source-map";
import defaults from "lodash/defaults"; import defaults from "lodash/defaults";
import sourceMap from "source-map"; import sourceMap from "source-map";
import slash from "slash"; import slash from "slash";
import { sync as makeDirSync } from "make-dir";
import path from "path"; import path from "path";
import fs from "fs"; import fs from "fs";
@ -90,8 +89,6 @@ export default async function({
const result = buildResult(fileResults); const result = buildResult(fileResults);
if (cliOptions.outFile) { if (cliOptions.outFile) {
makeDirSync(path.dirname(cliOptions.outFile));
// we've requested for a sourcemap to be written to disk // we've requested for a sourcemap to be written to disk
if (babelOptions.sourceMaps && babelOptions.sourceMaps !== "inline") { if (babelOptions.sourceMaps && babelOptions.sourceMaps !== "inline") {
const mapLoc = cliOptions.outFile + ".map"; const mapLoc = cliOptions.outFile + ".map";

View File

@ -12,19 +12,19 @@ import pkg from "../../package.json";
// Standard Babel input configs. // Standard Babel input configs.
commander.option( commander.option(
"-f, --filename [filename]", "-f, --filename [filename]",
"The filename to use when reading from stdin. This will be used in source-maps, errors etc.", "filename to use when reading from stdin - this will be used in source-maps, errors etc",
); );
commander.option( commander.option(
"--presets [list]", "--presets [list]",
"A comma-separated list of preset names.", "comma-separated list of preset names",
collect, collect,
); );
commander.option( commander.option(
"--plugins [list]", "--plugins [list]",
"A comma-separated list of plugin names.", "comma-separated list of plugin names",
collect, collect,
); );
commander.option("--config-file [path]", "Path to a .babelrc file to use."); commander.option("--config-file [path]", "Path to a .babelrc file to use");
commander.option( commander.option(
"--env-name [name]", "--env-name [name]",
"The name of the 'env' to use when loading configs and plugins. " + "The name of the 'env' to use when loading configs and plugins. " +
@ -40,101 +40,97 @@ commander.option(
commander.option("--source-type [script|module]", ""); commander.option("--source-type [script|module]", "");
commander.option( commander.option(
"--no-babelrc", "--no-babelrc",
"Whether or not to look up .babelrc and .babelignore files.", "Whether or not to look up .babelrc and .babelignore files",
); );
commander.option( commander.option(
"--ignore [list]", "--ignore [list]",
"List of glob paths to **not** compile.", "list of glob paths to **not** compile",
collect, collect,
); );
commander.option( commander.option(
"--only [list]", "--only [list]",
"List of glob paths to **only** compile.", "list of glob paths to **only** compile",
collect, collect,
); );
// Misc babel config. // Misc babel config.
commander.option( commander.option(
"--no-highlight-code", "--no-highlight-code",
"Enable or disable ANSI syntax highlighting of code frames. (on by default)", "enable/disable ANSI syntax highlighting of code frames (on by default)",
); );
// General output formatting. // General output formatting.
commander.option( commander.option(
"--no-comments", "--no-comments",
"Write comments to generated output. (true by default)", "write comments to generated output (true by default)",
); );
commander.option( commander.option(
"--retain-lines", "--retain-lines",
"Retain line numbers. This will result in really ugly code.", "retain line numbers - will result in really ugly code",
); );
commander.option( commander.option(
"--compact [true|false|auto]", "--compact [true|false|auto]",
"Do not include superfluous whitespace characters and line terminators.", "do not include superfluous whitespace characters and line terminators",
booleanify, booleanify,
); );
commander.option( commander.option("--minified", "save as much bytes when printing [true|false]");
"--minified [true|false]",
"Save as many bytes when printing.",
);
commander.option( commander.option(
"--auxiliary-comment-before [string]", "--auxiliary-comment-before [string]",
"Print a comment before any injected non-user code.", "print a comment before any injected non-user code",
); );
commander.option( commander.option(
"--auxiliary-comment-after [string]", "--auxiliary-comment-after [string]",
"Print a comment after any injected non-user code.", "print a comment after any injected non-user code",
); );
// General source map formatting. // General source map formatting.
commander.option("-s, --source-maps [true|false|inline|both]", "", booleanify); commander.option("-s, --source-maps [true|false|inline|both]", "", booleanify);
commander.option( commander.option(
"--source-map-target [string]", "--source-map-target [string]",
"Set `file` on returned source map.", "set `file` on returned source map",
); );
commander.option( commander.option(
"--source-file-name [string]", "--source-file-name [string]",
"Set `sources[0]` on returned source map.", "set `sources[0]` on returned source map",
); );
commander.option( commander.option(
"--source-root [filename]", "--source-root [filename]",
"The root from which all sources are relative.", "the root from which all sources are relative",
); );
// Config params for certain module output formats. // Config params for certain module output formats.
commander.option( commander.option(
"--module-root [filename]", "--module-root [filename]",
// eslint-disable-next-line max-len "optional prefix for the AMD module formatter that will be prepend to the filename on module definitions",
"Optional prefix for the AMD module formatter that will be prepended to the filename on module definitions.",
); );
commander.option("-M, --module-ids", "Insert an explicit id for modules."); commander.option("-M, --module-ids", "insert an explicit id for modules");
commander.option( commander.option(
"--module-id [string]", "--module-id [string]",
"Specify a custom name for module ids.", "specify a custom name for module ids",
); );
// "babel" command specific arguments that are not passed to @babel/core. // "babel" command specific arguments that are not passed to @babel/core.
commander.option( commander.option(
"-x, --extensions [extensions]", "-x, --extensions [extensions]",
"List of extensions to compile when a directory has been the input. [.es6,.js,.es,.jsx,.mjs]", "List of extensions to compile when a directory has been input [.es6,.js,.es,.jsx,.mjs]",
collect, collect,
); );
commander.option( commander.option(
"--keep-file-extension", "--keep-file-extension",
"Preserve the file extensions of the input files.", "Preserve the file extensions of the input files",
); );
commander.option("-w, --watch", "Recompile files on changes."); commander.option("-w, --watch", "Recompile files on changes");
commander.option( commander.option(
"--skip-initial-build", "--skip-initial-build",
"Do not compile files before watching.", "Do not compile files before watching",
); );
commander.option( commander.option(
"-o, --out-file [out]", "-o, --out-file [out]",
"Compile all input files into a single file.", "Compile all input files into a single file",
); );
commander.option( commander.option(
"-d, --out-dir [out]", "-d, --out-dir [out]",
"Compile an input directory of modules into an output directory.", "Compile an input directory of modules into an output directory",
); );
commander.option( commander.option(
"--relative", "--relative",
@ -142,23 +138,16 @@ commander.option(
); );
commander.option( commander.option(
"-D, --copy-files", "-D, --copy-files",
"When compiling a directory copy over non-compilable files.", "When compiling a directory copy over non-compilable files",
); );
commander.option( commander.option(
"--include-dotfiles", "--include-dotfiles",
"Include dotfiles when compiling and copying non-compilable files.", "Include dotfiles when compiling and copying non-compilable files",
);
commander.option(
"--verbose",
"Log everything. This option conflicts with --quiet",
);
commander.option(
"--quiet",
"Don't log anything. This option conflicts with --verbose",
); );
commander.option("--verbose", "Log everything");
commander.option( commander.option(
"--delete-dir-on-start", "--delete-dir-on-start",
"Delete the out directory before compilation.", "Delete the out directory before compilation",
); );
commander.version(pkg.version + " (@babel/core " + version + ")"); commander.version(pkg.version + " (@babel/core " + version + ")");
@ -218,10 +207,6 @@ export default function parseArgv(args: Array<string>): CmdOptions | null {
errors.push("--delete-dir-on-start requires --out-dir"); errors.push("--delete-dir-on-start requires --out-dir");
} }
if (commander.verbose && commander.quiet) {
errors.push("--verbose and --quiet cannot be used together");
}
if ( if (
!commander.outDir && !commander.outDir &&
filenames.length === 0 && filenames.length === 0 &&
@ -297,7 +282,6 @@ export default function parseArgv(args: Array<string>): CmdOptions | null {
copyFiles: opts.copyFiles, copyFiles: opts.copyFiles,
includeDotfiles: opts.includeDotfiles, includeDotfiles: opts.includeDotfiles,
verbose: opts.verbose, verbose: opts.verbose,
quiet: opts.quiet,
deleteDirOnStart: opts.deleteDirOnStart, deleteDirOnStart: opts.deleteDirOnStart,
sourceMapTarget: opts.sourceMapTarget, sourceMapTarget: opts.sourceMapTarget,
}, },

View File

@ -1 +0,0 @@
arr.map(x => x * MULTIPLIER);

View File

@ -1,3 +0,0 @@
{
"args": ["script.js", "--out-file", "folder/nested/script.js"]
}

View File

@ -1,5 +0,0 @@
"use strict";
arr.map(function (x) {
return x * MULTIPLIER;
});

View File

@ -1,7 +1,7 @@
const readdir = require("fs-readdir-recursive"); const readdir = require("fs-readdir-recursive");
const helper = require("@babel/helper-fixtures"); const helper = require("@babel/helper-fixtures");
const rimraf = require("rimraf"); const rimraf = require("rimraf");
const { sync: makeDirSync } = require("make-dir"); const outputFileSync = require("output-file-sync");
const child = require("child_process"); const child = require("child_process");
const merge = require("lodash/merge"); const merge = require("lodash/merge");
const path = require("path"); const path = require("path");
@ -14,11 +14,6 @@ const fileFilter = function(x) {
return x !== ".DS_Store"; return x !== ".DS_Store";
}; };
const outputFileSync = function(filePath, data) {
makeDirSync(path.dirname(filePath));
fs.writeFileSync(filePath, data);
};
const presetLocs = [path.join(__dirname, "../../babel-preset-react")]; const presetLocs = [path.join(__dirname, "../../babel-preset-react")];
const pluginLocs = [ const pluginLocs = [
@ -120,6 +115,13 @@ const buildTest = function(binName, testName, opts) {
const binLoc = path.join(__dirname, "../lib", binName); const binLoc = path.join(__dirname, "../lib", binName);
return function(callback) { return function(callback) {
const dir = process.cwd();
process.chdir(__dirname);
if (fs.existsSync(tmpLoc)) rimraf.sync(tmpLoc);
fs.mkdirSync(tmpLoc);
process.chdir(tmpLoc);
saveInFiles(opts.inFiles); saveInFiles(opts.inFiles);
let args = [binLoc]; let args = [binLoc];
@ -157,6 +159,7 @@ const buildTest = function(binName, testName, opts) {
args.map(arg => `"${arg}"`).join(" ") + ": " + err.message; args.map(arg => `"${arg}"`).join(" ") + ": " + err.message;
} }
process.chdir(dir);
callback(err); callback(err);
}); });
@ -172,26 +175,6 @@ fs.readdirSync(fixtureLoc).forEach(function(binName) {
const suiteLoc = path.join(fixtureLoc, binName); const suiteLoc = path.join(fixtureLoc, binName);
describe("bin/" + binName, function() { describe("bin/" + binName, function() {
let cwd;
beforeEach(() => {
cwd = process.cwd();
if (fs.existsSync(tmpLoc)) {
for (const child of fs.readdirSync(tmpLoc)) {
rimraf.sync(path.join(tmpLoc, child));
}
} else {
fs.mkdirSync(tmpLoc);
}
process.chdir(tmpLoc);
});
afterEach(() => {
process.chdir(cwd);
});
fs.readdirSync(suiteLoc).forEach(function(testName) { fs.readdirSync(suiteLoc).forEach(function(testName) {
if (testName.startsWith(".")) return; if (testName.startsWith(".")) return;

View File

@ -1,6 +1,6 @@
{ {
"name": "@babel/core", "name": "@babel/core",
"version": "7.7.2", "version": "7.6.4",
"description": "Babel compiler core.", "description": "Babel compiler core.",
"main": "lib/index.js", "main": "lib/index.js",
"author": "Sebastian McKenzie <sebmck@gmail.com>", "author": "Sebastian McKenzie <sebmck@gmail.com>",
@ -34,13 +34,13 @@
}, },
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.5.5", "@babel/code-frame": "^7.5.5",
"@babel/generator": "^7.7.2", "@babel/generator": "^7.6.4",
"@babel/helpers": "^7.7.0", "@babel/helpers": "^7.6.2",
"@babel/parser": "^7.7.2", "@babel/parser": "^7.6.4",
"@babel/template": "^7.7.0", "@babel/template": "^7.6.0",
"@babel/traverse": "^7.7.2", "@babel/traverse": "^7.6.3",
"@babel/types": "^7.7.2", "@babel/types": "^7.6.3",
"convert-source-map": "^1.7.0", "convert-source-map": "^1.1.0",
"debug": "^4.1.0", "debug": "^4.1.0",
"json5": "^2.1.0", "json5": "^2.1.0",
"lodash": "^4.17.13", "lodash": "^4.17.13",

View File

@ -18,22 +18,18 @@ import type { CallerMetadata } from "../validation/options";
const debug = buildDebug("babel:config:loading:files:configuration"); const debug = buildDebug("babel:config:loading:files:configuration");
const ROOT_CONFIG_FILENAMES = [ const BABEL_CONFIG_JS_FILENAME = "babel.config.js";
"babel.config.js",
"babel.config.cjs",
"babel.config.json",
];
const RELATIVE_CONFIG_FILENAMES = [".babelrc", ".babelrc.js", ".babelrc.cjs"];
const BABELRC_FILENAME = ".babelrc";
const BABELRC_JS_FILENAME = ".babelrc.js";
const BABELIGNORE_FILENAME = ".babelignore"; const BABELIGNORE_FILENAME = ".babelignore";
export function findConfigUpwards(rootDir: string): string | null { export function findConfigUpwards(rootDir: string): string | null {
let dirname = rootDir; let dirname = rootDir;
while (true) { while (true) {
const configFileFound = ROOT_CONFIG_FILENAMES.some(filename => if (fs.existsSync(path.join(dirname, BABEL_CONFIG_JS_FILENAME))) {
fs.existsSync(path.join(dirname, filename)), return dirname;
); }
if (configFileFound) return dirname;
const nextDir = path.dirname(dirname); const nextDir = path.dirname(dirname);
if (dirname === nextDir) break; if (dirname === nextDir) break;
@ -55,16 +51,46 @@ export function findRelativeConfig(
for (const loc of packageData.directories) { for (const loc of packageData.directories) {
if (!config) { if (!config) {
config = loadOneConfig( config = [BABELRC_FILENAME, BABELRC_JS_FILENAME].reduce(
RELATIVE_CONFIG_FILENAMES, (previousConfig: ConfigFile | null, name) => {
loc, const filepath = path.join(loc, name);
envName, const config = readConfig(filepath, envName, caller);
caller,
if (config && previousConfig) {
throw new Error(
`Multiple configuration files found. Please remove one:\n` +
` - ${path.basename(previousConfig.filepath)}\n` +
` - ${name}\n` +
`from ${loc}`,
);
}
return config || previousConfig;
},
null,
);
const pkgConfig =
packageData.pkg && packageData.pkg.dirname === loc packageData.pkg && packageData.pkg.dirname === loc
? packageToBabelConfig(packageData.pkg) ? packageToBabelConfig(packageData.pkg)
: null, : null;
if (pkgConfig) {
if (config) {
throw new Error(
`Multiple configuration files found. Please remove one:\n` +
` - ${path.basename(pkgConfig.filepath)}#babel\n` +
` - ${path.basename(config.filepath)}\n` +
`from ${loc}`,
); );
} }
config = pkgConfig;
}
if (config) {
debug("Found configuration %o from %o.", config.filepath, dirname);
}
}
if (!ignore) { if (!ignore) {
const ignoreLoc = path.join(loc, BABELIGNORE_FILENAME); const ignoreLoc = path.join(loc, BABELIGNORE_FILENAME);
@ -84,36 +110,13 @@ export function findRootConfig(
envName: string, envName: string,
caller: CallerMetadata | void, caller: CallerMetadata | void,
): ConfigFile | null { ): ConfigFile | null {
return loadOneConfig(ROOT_CONFIG_FILENAMES, dirname, envName, caller); const filepath = path.resolve(dirname, BABEL_CONFIG_JS_FILENAME);
}
function loadOneConfig( const conf = readConfig(filepath, envName, caller);
names: string[], if (conf) {
dirname: string, debug("Found root config %o in %o.", BABEL_CONFIG_JS_FILENAME, dirname);
envName: string,
caller: CallerMetadata | void,
previousConfig?: ConfigFile | null = null,
): ConfigFile | null {
const config = names.reduce((previousConfig: ConfigFile | null, name) => {
const filepath = path.resolve(dirname, name);
const config = readConfig(filepath, envName, caller);
if (config && previousConfig) {
throw new Error(
`Multiple configuration files found. Please remove one:\n` +
` - ${path.basename(previousConfig.filepath)}\n` +
` - ${name}\n` +
`from ${dirname}`,
);
} }
return conf;
return config || previousConfig;
}, previousConfig);
if (config) {
debug("Found configuration %o from %o.", config.filepath, dirname);
}
return config;
} }
export function loadConfig( export function loadConfig(
@ -138,8 +141,7 @@ export function loadConfig(
* throw if there are parsing errors while loading a config. * throw if there are parsing errors while loading a config.
*/ */
function readConfig(filepath, envName, caller): ConfigFile | null { function readConfig(filepath, envName, caller): ConfigFile | null {
const ext = path.extname(filepath); return path.extname(filepath) === ".js"
return ext === ".js" || ext === ".cjs"
? readConfigJS(filepath, { envName, caller }) ? readConfigJS(filepath, { envName, caller })
: readConfigJSON5(filepath); : readConfigJSON5(filepath);
} }

View File

@ -70,7 +70,7 @@ function assertVersion(range: string | number): void {
throw new Error("Expected string or integer value."); throw new Error("Expected string or integer value.");
} }
if (semver.satisfies(semver.coerce(coreVersion).raw, range)) return; if (semver.satisfies(coreVersion, range)) return;
const limit = Error.stackTraceLimit; const limit = Error.stackTraceLimit;

View File

@ -19,17 +19,6 @@ const errorVisitor = {
}, },
}; };
export type NodeLocation = {
loc?: {
end?: { line: number, column: number },
start: { line: number, column: number },
},
_loc?: {
end?: { line: number, column: number },
start: { line: number, column: number },
},
};
export default class File { export default class File {
_map: Map<any, any> = new Map(); _map: Map<any, any> = new Map();
opts: Object; opts: Object;
@ -261,12 +250,17 @@ export default class File {
} }
buildCodeFrameError( buildCodeFrameError(
node: ?NodeLocation, node: ?{
loc?: { start: { line: number, column: number } },
_loc?: { start: { line: number, column: number } },
},
msg: string, msg: string,
Error: typeof Error = SyntaxError, Error: typeof Error = SyntaxError,
): Error { ): Error {
let loc = node && (node.loc || node._loc); let loc = node && (node.loc || node._loc);
msg = `${this.opts.filename ?? "unknown"}: ${msg}`;
if (!loc && node) { if (!loc && node) {
const state = { const state = {
loc: null, loc: null,
@ -293,13 +287,6 @@ export default class File {
line: loc.start.line, line: loc.start.line,
column: loc.start.column + 1, column: loc.start.column + 1,
}, },
end:
loc.end && loc.start.line === loc.end.line
? {
line: loc.end.line,
column: loc.end.column + 1,
}
: undefined,
}, },
{ highlightCode }, { highlightCode },
); );

View File

@ -65,8 +65,7 @@ export default function normalizeFile(
if (typeof options.filename === "string" && lastComment) { if (typeof options.filename === "string" && lastComment) {
try { try {
inputMap = convertSourceMap.fromMapFileComment( inputMap = convertSourceMap.fromMapFileComment(
// fromMapFileComment requires the whole comment block lastComment,
`//${lastComment}`,
path.dirname(options.filename), path.dirname(options.filename),
); );
} catch (err) { } catch (err) {
@ -157,7 +156,7 @@ function parser(
// eslint-disable-next-line max-len // eslint-disable-next-line max-len
const INLINE_SOURCEMAP_REGEX = /^[@#]\s+sourceMappingURL=data:(?:application|text)\/json;(?:charset[:=]\S+?;)?base64,(?:.*)$/; const INLINE_SOURCEMAP_REGEX = /^[@#]\s+sourceMappingURL=data:(?:application|text)\/json;(?:charset[:=]\S+?;)?base64,(?:.*)$/;
const EXTERNAL_SOURCEMAP_REGEX = /^[@#][ \t]+sourceMappingURL=(?:[^\s'"`]+?)[ \t]*$/; const EXTERNAL_SOURCEMAP_REGEX = /^[@#][ \t]+sourceMappingURL=([^\s'"`]+?)[ \t]*$/;
function extractCommentsFromList(regex, comments, lastComment) { function extractCommentsFromList(regex, comments, lastComment) {
if (comments) { if (comments) {

View File

@ -1,7 +1,6 @@
// @flow // @flow
import type File from "./file/file"; import type File from "./file/file";
import type NodeLocation from "./file/file";
export default class PluginPass { export default class PluginPass {
_map: Map<mixed, mixed> = new Map(); _map: Map<mixed, mixed> = new Map();
@ -48,7 +47,14 @@ export default class PluginPass {
return this.file.getModuleName(); return this.file.getModuleName();
} }
buildCodeFrameError(node: ?NodeLocation, msg: string, Error?: typeof Error) { buildCodeFrameError(
node: ?{
loc?: { start: { line: number, column: number } },
_loc?: { start: { line: number, column: number } },
},
msg: string,
Error?: typeof Error,
) {
return this.file.buildCodeFrameError(node, msg, Error); return this.file.buildCodeFrameError(node, msg, Error);
} }
} }

View File

@ -1,44 +1,8 @@
import fs from "fs"; import fs from "fs";
import os from "os";
import path from "path"; import path from "path";
import escapeRegExp from "lodash/escapeRegExp"; import escapeRegExp from "lodash/escapeRegExp";
import { loadOptions as loadOptionsOrig } from "../lib"; import { loadOptions as loadOptionsOrig } from "../lib";
// TODO: In Babel 8, we can directly uses fs.promises which is supported by
// node 8+
const pfs =
fs.promises ??
new Proxy(fs, {
get(target, name) {
if (name === "copyFile") {
// fs.copyFile is only supported since node 8.5
// https://stackoverflow.com/a/30405105/2359289
return function copyFile(source, target) {
const rd = fs.createReadStream(source);
const wr = fs.createWriteStream(target);
return new Promise(function(resolve, reject) {
rd.on("error", reject);
wr.on("error", reject);
wr.on("finish", resolve);
rd.pipe(wr);
}).catch(function(error) {
rd.destroy();
wr.end();
throw error;
});
};
}
return (...args) =>
new Promise((resolve, reject) =>
target[name](...args, (error, result) => {
if (error) reject(error);
else resolve(result);
}),
);
},
});
function fixture(...args) { function fixture(...args) {
return path.join(__dirname, "fixtures", "config", ...args); return path.join(__dirname, "fixtures", "config", ...args);
} }
@ -50,24 +14,6 @@ function loadOptions(opts) {
}); });
} }
function pairs(items) {
const pairs = [];
for (let i = 0; i < items.length - 1; i++) {
for (let j = i + 1; j < items.length; j++) {
pairs.push([items[i], items[j]]);
}
}
return pairs;
}
async function getTemp(name) {
const cwd = await pfs.mkdtemp(os.tmpdir() + path.sep + name);
const tmp = name => path.join(cwd, name);
const config = name =>
pfs.copyFile(fixture("config-files-templates", name), tmp(name));
return { cwd, tmp, config };
}
describe("buildConfigChain", function() { describe("buildConfigChain", function() {
describe("test", () => { describe("test", () => {
describe("single", () => { describe("single", () => {
@ -998,93 +944,75 @@ describe("buildConfigChain", function() {
} }
}); });
describe("root", () => { it("should load .babelrc", () => {
test.each(["babel.config.json", "babel.config.js", "babel.config.cjs"])( const filename = fixture("config-files", "babelrc", "src.js");
"should load %s",
async name => {
const { cwd, tmp, config } = await getTemp(
`babel-test-load-config-${name}`,
);
const filename = tmp("src.js");
await config(name);
expect( expect(
loadOptions({ loadOptions({
filename, filename,
cwd, cwd: path.dirname(filename),
}), }),
).toEqual({ ).toEqual({
...getDefaults(), ...getDefaults(),
filename, filename: filename,
cwd, cwd: path.dirname(filename),
root: cwd, root: path.dirname(filename),
comments: true, comments: true,
}); });
},
);
test.each(
pairs(["babel.config.json", "babel.config.js", "babel.config.cjs"]),
)("should throw if both %s and %s are used", async (name1, name2) => {
const { cwd, tmp, config } = await getTemp(
`babel-test-dup-config-${name1}-${name2}`,
);
await Promise.all([config(name1), config(name2)]);
expect(() => loadOptions({ filename: tmp("src.js"), cwd })).toThrow(
/Multiple configuration files found/,
);
});
}); });
describe("relative", () => { it("should load .babelrc.js", () => {
test.each(["package.json", ".babelrc", ".babelrc.js", ".babelrc.cjs"])( const filename = fixture("config-files", "babelrc-js", "src.js");
"should load %s",
async name => {
const { cwd, tmp, config } = await getTemp(
`babel-test-load-config-${name}`,
);
const filename = tmp("src.js");
await config(name); expect(loadOptions({ filename, cwd: path.dirname(filename) })).toEqual({
expect(
loadOptions({
filename,
cwd,
}),
).toEqual({
...getDefaults(), ...getDefaults(),
filename, filename: filename,
cwd, cwd: path.dirname(filename),
root: cwd, root: path.dirname(filename),
comments: true, comments: true,
}); });
}, });
);
it("should load package.json#babel", () => {
const filename = fixture("config-files", "pkg", "src.js");
expect(loadOptions({ filename, cwd: path.dirname(filename) })).toEqual({
...getDefaults(),
filename: filename,
cwd: path.dirname(filename),
root: path.dirname(filename),
comments: true,
});
});
it("should load .babelignore", () => { it("should load .babelignore", () => {
const filename = fixture("config-files", "babelignore", "src.js"); const filename = fixture("config-files", "babelignore", "src.js");
expect( expect(loadOptions({ filename, cwd: path.dirname(filename) })).toBeNull();
loadOptions({ filename, cwd: path.dirname(filename) }),
).toBeNull();
}); });
test.each( it("should throw if there are both .babelrc and .babelrc.js", () => {
pairs(["package.json", ".babelrc", ".babelrc.js", ".babelrc.cjs"]), const filename = fixture("config-files", "both-babelrc", "src.js");
)("should throw if both %s and %s are used", async (name1, name2) => {
const { cwd, tmp, config } = await getTemp(
`babel-test-dup-config-${name1}-${name2}`,
);
await Promise.all([config(name1), config(name2)]); expect(() =>
loadOptions({ filename, cwd: path.dirname(filename) }),
).toThrow(/Multiple configuration files found/);
});
expect(() => loadOptions({ filename: tmp("src.js"), cwd })).toThrow( it("should throw if there are both .babelrc and package.json", () => {
/Multiple configuration files found/, const filename = fixture("config-files", "pkg-babelrc", "src.js");
);
expect(() =>
loadOptions({ filename, cwd: path.dirname(filename) }),
).toThrow(/Multiple configuration files found/);
});
it("should throw if there are both .babelrc.js and package.json", () => {
const filename = fixture("config-files", "pkg-babelrc-js", "src.js");
expect(() =>
loadOptions({ filename, cwd: path.dirname(filename) }),
).toThrow(/Multiple configuration files found/);
}); });
it("should ignore package.json without a 'babel' property", () => { it("should ignore package.json without a 'babel' property", () => {
@ -1099,19 +1027,28 @@ describe("buildConfigChain", function() {
}); });
}); });
test.each` it("should show helpful errors for .babelrc", () => {
config | dir | error const filename = fixture("config-files", "babelrc-error", "src.js");
${".babelrc"} | ${"babelrc-error"} | ${/Error while parsing config - /}
${".babelrc.js"} | ${"babelrc-js-error"} | ${/Babelrc threw an error/}
${".babelrc.cjs"} | ${"babelrc-cjs-error"} | ${/Babelrc threw an error/}
${"package.json"} | ${"pkg-error"} | ${/Error while parsing JSON - /}
`("should show helpful errors for $config", ({ dir, error }) => {
const filename = fixture("config-files", dir, "src.js");
expect(() => expect(() =>
loadOptions({ filename, cwd: path.dirname(filename) }), loadOptions({ filename, cwd: path.dirname(filename) }),
).toThrow(error); ).toThrow(/Error while parsing config - /);
}); });
it("should show helpful errors for .babelrc.js", () => {
const filename = fixture("config-files", "babelrc-js-error", "src.js");
expect(() =>
loadOptions({ filename, cwd: path.dirname(filename) }),
).toThrow(/Babelrc threw an error/);
});
it("should show helpful errors for package.json", () => {
const filename = fixture("config-files", "pkg-error", "src.js");
expect(() =>
loadOptions({ filename, cwd: path.dirname(filename) }),
).toThrow(/Error while parsing JSON - /);
}); });
it("should throw when `test` presents but `filename` is not passed", () => { it("should throw when `test` presents but `filename` is not passed", () => {

View File

@ -1,3 +0,0 @@
{
"comments": true
}

View File

@ -1,3 +0,0 @@
module.exports = {
comments: true
};

View File

@ -1,3 +0,0 @@
module.exports = {
comments: true
};

View File

@ -1,3 +0,0 @@
module.exports = {
comments: true
};

View File

@ -1,3 +0,0 @@
module.exports = {
comments: true
};

View File

@ -1,3 +0,0 @@
{
"comments": true
}

View File

@ -1,3 +0,0 @@
module.exports = function() {
throw new Error("Babelrc threw an error");
};

View File

@ -0,0 +1,3 @@
module.exports = {
comments: true,
};

View File

@ -0,0 +1,3 @@
{
comments: true,
}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
module.exports = {};

View File

@ -0,0 +1 @@
module.exports = {};

View File

@ -0,0 +1,3 @@
{
"babel": {}
}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1,3 @@
{
"babel": {}
}

View File

@ -2,7 +2,6 @@
"type": "File", "type": "File",
"start": 0, "start": 0,
"end": 91, "end": 91,
"errors": [],
"loc": { "loc": {
"start": { "start": {
"line": 1, "line": 1,

View File

@ -1,6 +1,5 @@
expect(() => { var code = "function f() {}";
var code = "function f() {}"; transform(code, {
transform(code, {
plugins: [ plugins: [
function() { function() {
return { return {
@ -14,5 +13,4 @@ expect(() => {
], ],
// hard to assert on ANSI escape codes // hard to assert on ANSI escape codes
highlightCode: false, highlightCode: false,
}); });
}).toThrow(/^unknown: someMsg\s+> 1 \| function f\(\) {}/);

View File

@ -0,0 +1,3 @@
{
"throws": "unknown: someMsg\n> 1 | function f() {}"
}

View File

@ -1,5 +0,0 @@
var foo = function () {
return 4;
};
//# sourceMappingURL=input.js.map

View File

@ -1 +0,0 @@
{"version":3,"sources":["original.js"],"names":[],"mappings":"AAAA,UAAU,Y;SAAM,C;CAAC","sourcesContent":["var foo = () => 4;"]}

View File

@ -1,3 +0,0 @@
{
"inputSourceMap": true
}

View File

@ -1,3 +0,0 @@
var foo = function () {
return 4;
};

View File

@ -1,7 +0,0 @@
{
"mappings": "AAAA,IAAA,GAAA,GAAU,Y;SAAM,C;AAAC,CAAjB",
"names": [],
"sources": ["original.js"],
"sourcesContent": ["var foo = () => 4;"],
"version": 3
}

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{ {
"name": "@babel/generator", "name": "@babel/generator",
"version": "7.7.2", "version": "7.6.4",
"description": "Turns an AST into code.", "description": "Turns an AST into code.",
"author": "Sebastian McKenzie <sebmck@gmail.com>", "author": "Sebastian McKenzie <sebmck@gmail.com>",
"homepage": "https://babeljs.io/", "homepage": "https://babeljs.io/",
@ -14,13 +14,13 @@
"lib" "lib"
], ],
"dependencies": { "dependencies": {
"@babel/types": "^7.7.2", "@babel/types": "^7.6.3",
"jsesc": "^2.5.1", "jsesc": "^2.5.1",
"lodash": "^4.17.13", "lodash": "^4.17.13",
"source-map": "^0.5.0" "source-map": "^0.5.0"
}, },
"devDependencies": { "devDependencies": {
"@babel/helper-fixtures": "^7.6.3", "@babel/helper-fixtures": "^7.6.3",
"@babel/parser": "^7.7.2" "@babel/parser": "^7.6.4"
} }
} }

View File

@ -71,8 +71,26 @@ export function ClassBody(node: Object) {
export function ClassProperty(node: Object) { export function ClassProperty(node: Object) {
this.printJoin(node.decorators, node); this.printJoin(node.decorators, node);
this.tsPrintClassMemberModifiers(node, /* isField */ true);
if (node.accessibility) {
// TS
this.word(node.accessibility);
this.space();
}
if (node.static) {
this.word("static");
this.space();
}
if (node.abstract) {
// TS
this.word("abstract");
this.space();
}
if (node.readonly) {
// TS
this.word("readonly");
this.space();
}
if (node.computed) { if (node.computed) {
this.token("["); this.token("[");
this.print(node.key, node); this.print(node.key, node);
@ -130,6 +148,23 @@ export function ClassPrivateMethod(node: Object) {
export function _classMethodHead(node) { export function _classMethodHead(node) {
this.printJoin(node.decorators, node); this.printJoin(node.decorators, node);
this.tsPrintClassMemberModifiers(node, /* isField */ false);
if (node.accessibility) {
// TS
this.word(node.accessibility);
this.space();
}
if (node.abstract) {
// TS
this.word("abstract");
this.space();
}
if (node.static) {
this.word("static");
this.space();
}
this._methodHead(node); this._methodHead(node);
} }

View File

@ -134,92 +134,6 @@ export function DeclareExportAllDeclaration(/*node: Object*/) {
ExportAllDeclaration.apply(this, arguments); ExportAllDeclaration.apply(this, arguments);
} }
export function EnumDeclaration(node: Object) {
const { id, body } = node;
this.word("enum");
this.space();
this.print(id, node);
this.print(body, node);
}
function enumExplicitType(
context: Object,
name: string,
hasExplicitType: boolean,
) {
if (hasExplicitType) {
context.space();
context.word("of");
context.space();
context.word(name);
}
context.space();
}
function enumBody(context: Object, node: Object) {
const { members } = node;
context.token("{");
context.indent();
context.newline();
for (const member of members) {
context.print(member, node);
context.newline();
}
context.dedent();
context.token("}");
}
export function EnumBooleanBody(node: Object) {
const { explicitType } = node;
enumExplicitType(this, "boolean", explicitType);
enumBody(this, node);
}
export function EnumNumberBody(node: Object) {
const { explicitType } = node;
enumExplicitType(this, "number", explicitType);
enumBody(this, node);
}
export function EnumStringBody(node: Object) {
const { explicitType } = node;
enumExplicitType(this, "string", explicitType);
enumBody(this, node);
}
export function EnumSymbolBody(node: Object) {
enumExplicitType(this, "symbol", true);
enumBody(this, node);
}
export function EnumDefaultedMember(node: Object) {
const { id } = node;
this.print(id, node);
this.token(",");
}
function enumInitializedMember(context: Object, node: Object) {
const { id, init } = node;
context.print(id, node);
context.space();
context.token("=");
context.space();
context.print(init, node);
context.token(",");
}
export function EnumBooleanMember(node: Object) {
enumInitializedMember(this, node);
}
export function EnumNumberMember(node: Object) {
enumInitializedMember(this, node);
}
export function EnumStringMember(node: Object) {
enumInitializedMember(this, node);
}
function FlowExportDeclaration(node: Object) { function FlowExportDeclaration(node: Object) {
if (node.declaration) { if (node.declaration) {
const declar = node.declaration; const declar = node.declaration;

View File

@ -197,17 +197,11 @@ export function TSTypeReference(node) {
} }
export function TSTypePredicate(node) { export function TSTypePredicate(node) {
if (node.asserts) {
this.word("asserts");
this.space();
}
this.print(node.parameterName); this.print(node.parameterName);
if (node.typeAnnotation) {
this.space(); this.space();
this.word("is"); this.word("is");
this.space(); this.space();
this.print(node.typeAnnotation.typeAnnotation); this.print(node.typeAnnotation.typeAnnotation);
}
} }
export function TSTypeQuery(node) { export function TSTypeQuery(node) {
@ -556,26 +550,3 @@ export function tsPrintSignatureDeclarationBase(node) {
this.token(")"); this.token(")");
this.print(node.typeAnnotation, node); this.print(node.typeAnnotation, node);
} }
export function tsPrintClassMemberModifiers(node, isField) {
if (isField && node.declare) {
this.word("declare");
this.space();
}
if (node.accessibility) {
this.word(node.accessibility);
this.space();
}
if (node.static) {
this.word("static");
this.space();
}
if (node.abstract) {
this.word("abstract");
this.space();
}
if (isField && node.readonly) {
this.word("readonly");
this.space();
}
}

View File

@ -35,22 +35,14 @@ export function NullableTypeAnnotation(node: Object, parent: Object): boolean {
return t.isArrayTypeAnnotation(parent); return t.isArrayTypeAnnotation(parent);
} }
export function FunctionTypeAnnotation( export function FunctionTypeAnnotation(node: Object, parent: Object): boolean {
node: Object,
parent: Object,
printStack: Array<Object>,
): boolean {
return ( return (
// (() => A) | (() => B) // (() => A) | (() => B)
t.isUnionTypeAnnotation(parent) || t.isUnionTypeAnnotation(parent) ||
// (() => A) & (() => B) // (() => A) & (() => B)
t.isIntersectionTypeAnnotation(parent) || t.isIntersectionTypeAnnotation(parent) ||
// (() => A)[] // (() => A)[]
t.isArrayTypeAnnotation(parent) || t.isArrayTypeAnnotation(parent)
// <T>(A: T): (T => T[]) => B => [A, B]
(t.isTypeAnnotation(parent) &&
// Check grandparent
t.isArrowFunctionExpression(printStack[printStack.length - 3]))
); );
} }

View File

@ -5,4 +5,3 @@ const bar4 = x => {};
const bar5 = (x): string => {}; const bar5 = (x): string => {};
const bar6 = (x: number) => {}; const bar6 = (x: number) => {};
const bar7 = <T>(x) => {}; const bar7 = <T>(x) => {};
const bar8 = <T>(x: T): (T => T[]) => y => [x, y];

View File

@ -11,5 +11,3 @@ const bar5 = (x): string => {};
const bar6 = (x: number) => {}; const bar6 = (x: number) => {};
const bar7 = <T>(x) => {}; const bar7 = <T>(x) => {};
const bar8 = <T>(x: T): ((T) => T[]) => y => [x, y];

View File

@ -1,36 +0,0 @@
enum E {
A = true,
B = false,
}
enum E of boolean {
A = true,
B = false,
}
enum E {
A = 1,
B = 2,
}
enum E of number {
A = 1,
B = 2,
}
enum E {
A,
B,
}
enum E of string {
A,
B,
}
enum E {
A = "a",
B = "b",
}
enum E of string {
A = "a",
B = "b",
}
enum E of symbol {
A,
B,
}

View File

@ -1,3 +0,0 @@
{
"plugins": [["flow", { "enums": true }]]
}

View File

@ -1,36 +0,0 @@
enum E {
A = true,
B = false,
}
enum E of boolean {
A = true,
B = false,
}
enum E {
A = 1,
B = 2,
}
enum E of number {
A = 1,
B = 2,
}
enum E {
A,
B,
}
enum E of string {
A,
B,
}
enum E {
A = "a",
B = "b",
}
enum E of string {
A = "a",
B = "b",
}
enum E of symbol {
A,
B,
}

View File

@ -1,2 +0,0 @@
(x: any): asserts x => true;
(x: any): asserts x is boolean => true;

View File

@ -1,3 +0,0 @@
(x: any): asserts x => true;
(x: any): asserts x is boolean => true;

View File

@ -1,5 +0,0 @@
class A {
declare foo;
declare bar: string;
declare readonly bax: number;
}

View File

@ -1,4 +0,0 @@
{
"sourceType": "module",
"plugins": ["typescript", "classProperties"]
}

View File

@ -1,5 +0,0 @@
class A {
declare foo;
declare bar: string;
declare readonly bax: number;
}

View File

@ -1,2 +0,0 @@
function f(x: any): asserts x {}
(function(x: any): asserts x is boolean {})

View File

@ -1,3 +0,0 @@
function f(x: any): asserts x {}
(function (x: any): asserts x is boolean {});

View File

@ -197,7 +197,7 @@ describe("generation", function() {
const id2 = fn.body.body[0].expression; const id2 = fn.body.body[0].expression;
id2.name += "2"; id2.name += "2";
id2.loc.identifierName = "bar"; id2.loc.identiferName = "bar";
const generated = generate( const generated = generate(
ast, ast,

View File

@ -1,6 +1,6 @@
{ {
"name": "@babel/helper-annotate-as-pure", "name": "@babel/helper-annotate-as-pure",
"version": "7.7.0", "version": "7.0.0",
"description": "Helper function to annotate paths and nodes with #__PURE__ comment", "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", "repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-annotate-as-pure",
"license": "MIT", "license": "MIT",
@ -9,6 +9,6 @@
}, },
"main": "lib/index.js", "main": "lib/index.js",
"dependencies": { "dependencies": {
"@babel/types": "^7.7.0" "@babel/types": "^7.0.0"
} }
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "@babel/helper-bindify-decorators", "name": "@babel/helper-bindify-decorators",
"version": "7.7.0", "version": "7.1.0",
"description": "Helper function to bindify decorators", "description": "Helper function to bindify decorators",
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-bindify-decorators", "repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-bindify-decorators",
"license": "MIT", "license": "MIT",
@ -9,7 +9,7 @@
}, },
"main": "lib/index.js", "main": "lib/index.js",
"dependencies": { "dependencies": {
"@babel/traverse": "^7.7.0", "@babel/traverse": "^7.1.0",
"@babel/types": "^7.7.0" "@babel/types": "^7.0.0"
} }
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "@babel/helper-builder-binary-assignment-operator-visitor", "name": "@babel/helper-builder-binary-assignment-operator-visitor",
"version": "7.7.0", "version": "7.1.0",
"description": "Helper function to build binary assignment operator visitors", "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", "repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-builder-binary-assignment-operator-visitor",
"license": "MIT", "license": "MIT",
@ -9,7 +9,7 @@
}, },
"main": "lib/index.js", "main": "lib/index.js",
"dependencies": { "dependencies": {
"@babel/helper-explode-assignable-expression": "^7.7.0", "@babel/helper-explode-assignable-expression": "^7.1.0",
"@babel/types": "^7.7.0" "@babel/types": "^7.0.0"
} }
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "@babel/helper-builder-react-jsx", "name": "@babel/helper-builder-react-jsx",
"version": "7.7.0", "version": "7.3.0",
"description": "Helper function to build react jsx", "description": "Helper function to build react jsx",
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-builder-react-jsx", "repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-builder-react-jsx",
"license": "MIT", "license": "MIT",
@ -9,7 +9,7 @@
}, },
"main": "lib/index.js", "main": "lib/index.js",
"dependencies": { "dependencies": {
"@babel/types": "^7.7.0", "@babel/types": "^7.3.0",
"esutils": "^2.0.0" "esutils": "^2.0.0"
} }
} }

View File

@ -87,15 +87,13 @@ You can turn on the 'throwIfNamespace' flag to bypass this warning.`,
function convertAttribute(node) { function convertAttribute(node) {
const value = convertAttributeValue(node.value || t.booleanLiteral(true)); const value = convertAttributeValue(node.value || t.booleanLiteral(true));
if (t.isJSXSpreadAttribute(node)) {
return t.spreadElement(node.argument);
}
if (t.isStringLiteral(value) && !t.isJSXExpressionContainer(node.value)) { if (t.isStringLiteral(value) && !t.isJSXExpressionContainer(node.value)) {
value.value = value.value.replace(/\n\s+/g, " "); value.value = value.value.replace(/\n\s+/g, " ");
// "raw" JSXText should not be used from a StringLiteral because it needs to be escaped. // "raw" JSXText should not be used from a StringLiteral because it needs to be escaped.
delete value.extra?.raw; if (value.extra && value.extra.raw) {
delete value.extra.raw;
}
} }
if (t.isJSXNamespacedName(node.name)) { if (t.isJSXNamespacedName(node.name)) {
@ -174,14 +172,6 @@ You can turn on the 'throwIfNamespace' flag to bypass this warning.`,
let _props = []; let _props = [];
const objs = []; const objs = [];
const { useSpread = false } = file.opts;
if (typeof useSpread !== "boolean") {
throw new Error(
"transform-react-jsx currently only accepts a boolean option for " +
"useSpread (defaults to false)",
);
}
const useBuiltIns = file.opts.useBuiltIns || false; const useBuiltIns = file.opts.useBuiltIns || false;
if (typeof useBuiltIns !== "boolean") { if (typeof useBuiltIns !== "boolean") {
throw new Error( throw new Error(
@ -190,18 +180,6 @@ You can turn on the 'throwIfNamespace' flag to bypass this warning.`,
); );
} }
if (useSpread && useBuiltIns) {
throw new Error(
"transform-react-jsx currently only accepts useBuiltIns or useSpread " +
"but not both",
);
}
if (useSpread) {
const props = attribs.map(convertAttribute);
return t.objectExpression(props);
}
while (attribs.length) { while (attribs.length) {
const prop = attribs.shift(); const prop = attribs.shift();
if (t.isJSXSpreadAttribute(prop)) { if (t.isJSXSpreadAttribute(prop)) {

View File

@ -1,6 +1,6 @@
{ {
"name": "@babel/helper-call-delegate", "name": "@babel/helper-call-delegate",
"version": "7.7.0", "version": "7.4.4",
"description": "Helper function to call delegate", "description": "Helper function to call delegate",
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-call-delegate", "repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-call-delegate",
"license": "MIT", "license": "MIT",
@ -9,8 +9,8 @@
}, },
"main": "lib/index.js", "main": "lib/index.js",
"dependencies": { "dependencies": {
"@babel/helper-hoist-variables": "^7.7.0", "@babel/helper-hoist-variables": "^7.4.4",
"@babel/traverse": "^7.7.0", "@babel/traverse": "^7.4.4",
"@babel/types": "^7.7.0" "@babel/types": "^7.4.4"
} }
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "@babel/helper-create-class-features-plugin", "name": "@babel/helper-create-class-features-plugin",
"version": "7.7.0", "version": "7.6.0",
"author": "The Babel Team (https://babeljs.io/team)", "author": "The Babel Team (https://babeljs.io/team)",
"license": "MIT", "license": "MIT",
"description": "Compile class public and private fields, private methods and decorators to ES6", "description": "Compile class public and private fields, private methods and decorators to ES6",
@ -14,19 +14,18 @@
"babel-plugin" "babel-plugin"
], ],
"dependencies": { "dependencies": {
"@babel/helper-function-name": "^7.7.0", "@babel/helper-function-name": "^7.1.0",
"@babel/helper-member-expression-to-functions": "^7.7.0", "@babel/helper-member-expression-to-functions": "^7.5.5",
"@babel/helper-optimise-call-expression": "^7.7.0", "@babel/helper-optimise-call-expression": "^7.0.0",
"@babel/helper-plugin-utils": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0",
"@babel/helper-replace-supers": "^7.7.0", "@babel/helper-replace-supers": "^7.5.5",
"@babel/helper-split-export-declaration": "^7.7.0", "@babel/helper-split-export-declaration": "^7.4.4"
"semver": "^5.5.0"
}, },
"peerDependencies": { "peerDependencies": {
"@babel/core": "^7.0.0 || csx" "@babel/core": "^7.0.0"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.7.0", "@babel/core": "^7.6.0",
"@babel/helper-plugin-test-runner": "^7.0.0" "@babel/helper-plugin-test-runner": "^7.0.0"
} }
} }

View File

@ -5,8 +5,6 @@ import ReplaceSupers, {
import memberExpressionToFunctions from "@babel/helper-member-expression-to-functions"; import memberExpressionToFunctions from "@babel/helper-member-expression-to-functions";
import optimiseCall from "@babel/helper-optimise-call-expression"; import optimiseCall from "@babel/helper-optimise-call-expression";
import * as ts from "./typescript";
export function buildPrivateNamesMap(props) { export function buildPrivateNamesMap(props) {
const privateNamesMap = new Map(); const privateNamesMap = new Map();
for (const prop of props) { for (const prop of props) {
@ -558,8 +556,6 @@ export function buildFieldsInitNodes(
let needsClassRef = false; let needsClassRef = false;
for (const prop of props) { for (const prop of props) {
ts.assertFieldTransformed(prop);
const isStatic = prop.node.static; const isStatic = prop.node.static;
const isInstance = !isStatic; const isInstance = !isStatic;
const isPrivate = prop.isPrivate(); const isPrivate = prop.isPrivate();

View File

@ -1,6 +1,5 @@
import nameFunction from "@babel/helper-function-name"; import nameFunction from "@babel/helper-function-name";
import splitExportDeclaration from "@babel/helper-split-export-declaration"; import splitExportDeclaration from "@babel/helper-split-export-declaration";
import semver from "semver";
import { import {
buildPrivateNamesNodes, buildPrivateNamesNodes,
buildPrivateNamesMap, buildPrivateNamesMap,
@ -28,10 +27,7 @@ export { FEATURES, injectInitialization };
// as 70000100005. This method is easier than using a semver-parsing // as 70000100005. This method is easier than using a semver-parsing
// package, but it breaks if we release x.y.z where x, y or z are // package, but it breaks if we release x.y.z where x, y or z are
// greater than 99_999. // greater than 99_999.
const version = semver const version = pkg.version.split(".").reduce((v, x) => v * 1e5 + +x, 0);
.coerce(pkg.version)
.raw.split(".")
.reduce((v, x) => v * 1e5 + +x, 0);
const versionKey = "@babel/plugin-class-features/version"; const versionKey = "@babel/plugin-class-features/version";
export function createClassFeaturePlugin({ export function createClassFeaturePlugin({

View File

@ -1,19 +0,0 @@
// @flow
import type { NodePath } from "@babel/traverse";
export function assertFieldTransformed(path: NodePath) {
// TODO (Babel 8): Also check path.node.definite
if (path.node.declare) {
throw path.buildCodeFrameError(
`TypeScript 'declare' fields must first be transformed by ` +
`@babel/plugin-transform-typescript.\n` +
`If you have already enabled that plugin (or '@babel/preset-typescript'), make sure ` +
`that it runs before any plugin related to additional class features:\n` +
` - @babel/plugin-proposal-class-properties\n` +
` - @babel/plugin-proposal-private-methods\n` +
` - @babel/plugin-proposal-decorators`,
);
}
}

View File

@ -1,3 +0,0 @@
src
test
*.log

View File

@ -1,19 +0,0 @@
# @babel/helper-create-regexp-features-plugin
> Compile ESNext Regular Expressions to ES5
See our website [@babel/helper-create-regexp-features-plugin](https://babeljs.io/docs/en/next/babel-helper-create-regexp-features-plugin.html) for more information.
## Install
Using npm:
```sh
npm install --save-dev @babel/helper-create-regexp-features-plugin
```
or using yarn:
```sh
yarn add @babel/helper-create-regexp-features-plugin --dev
```

View File

@ -1,32 +0,0 @@
{
"name": "@babel/helper-create-regexp-features-plugin",
"version": "7.7.2",
"author": "The Babel Team (https://babeljs.io/team)",
"license": "MIT",
"description": "Compile ESNext Regular Expressions to ES5",
"repository": {
"type": "git",
"url": "https://github.com/babel/babel",
"directory": "packages/babel-helper-create-regexp-features-plugin"
},
"main": "lib/index.js",
"publishConfig": {
"access": "public"
},
"keywords": [
"babel",
"babel-plugin"
],
"dependencies": {
"@babel/helper-regex": "^7.4.4",
"regexpu-core": "^4.6.0",
"semver": "^5.5.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0 || csx"
},
"devDependencies": {
"@babel/core": "^7.7.2",
"@babel/helper-plugin-test-runner": "^7.0.0"
}
}

View File

@ -1,27 +0,0 @@
// @flow
export const FEATURES = Object.freeze({
unicodeFlag: 1 << 0,
dotAllFlag: 1 << 1,
unicodePropertyEscape: 1 << 2,
namedCaptureGroups: 1 << 3,
});
// We can't use a symbol because this needs to always be the same, even if
// this package isn't deduped by npm. e.g.
// - node_modules/
// - @babel/plugin-regexp-features
// - @babel/plugin-proposal-unicode-property-regex
// - node_modules
// - @babel-plugin-regexp-features
export const featuresKey = "@babel/plugin-regexp-features/featuresKey";
export const runtimeKey = "@babel/plugin-regexp-features/runtimeKey";
type FeatureType = $Values<typeof FEATURES>;
export function enableFeature(features: number, feature: FeatureType): number {
return features | feature;
}
export function hasFeature(features: number, feature: FeatureType) {
return !!(features & feature);
}

View File

@ -1,100 +0,0 @@
import semver from "semver";
import rewritePattern from "regexpu-core";
import {
featuresKey,
FEATURES,
enableFeature,
runtimeKey,
hasFeature,
} from "./features";
import { generateRegexpuOptions } from "./util";
import pkg from "../package.json";
import { types as t } from "@babel/core";
import { pullFlag } from "@babel/helper-regex";
// Note: Versions are represented as an integer. e.g. 7.1.5 is represented
// as 70000100005. This method is easier than using a semver-parsing
// package, but it breaks if we release x.y.z where x, y or z are
// greater than 99_999.
const version = semver
.coerce(pkg.version)
.raw.split(".")
.reduce((v, x) => v * 1e5 + +x, 0);
const versionKey = "@babel/plugin-regexp-features/version";
export function createRegExpFeaturePlugin({ name, feature, options = {} }) {
return {
name,
pre() {
const { file } = this;
const features = file.get(featuresKey) ?? 0;
let newFeatures = enableFeature(features, FEATURES[feature]);
const { useUnicodeFlag, runtime = true } = options;
if (useUnicodeFlag === false) {
newFeatures = enableFeature(newFeatures, FEATURES.unicodeFlag);
}
if (newFeatures !== features) {
file.set(featuresKey, newFeatures);
}
if (!runtime) {
file.set(runtimeKey, false);
}
if (!file.has(versionKey) || file.get(versionKey) < version) {
file.set(versionKey, version);
}
},
visitor: {
RegExpLiteral(path) {
const { node } = path;
const { file } = this;
const features = file.get(featuresKey);
const runtime = file.get(runtimeKey) ?? true;
const regexpuOptions = generateRegexpuOptions(node, features);
if (regexpuOptions === null) {
return;
}
const namedCaptureGroups = {};
if (regexpuOptions.namedGroup) {
regexpuOptions.onNamedGroup = (name, index) => {
namedCaptureGroups[name] = index;
};
}
node.pattern = rewritePattern(node.pattern, node.flags, regexpuOptions);
if (
regexpuOptions.namedGroup &&
Object.keys(namedCaptureGroups).length > 0 &&
runtime &&
!isRegExpTest(path)
) {
path.replaceWith(
t.callExpression(this.addHelper("wrapRegExp"), [
node,
t.valueToNode(namedCaptureGroups),
]),
);
}
if (hasFeature(features, FEATURES.unicodeFlag)) {
pullFlag(node, "u");
}
if (hasFeature(features, FEATURES.dotAllFlag)) {
pullFlag(node, "s");
}
},
},
};
}
function isRegExpTest(path) {
return (
path.parentPath.isMemberExpression({
object: path.node,
computed: false,
}) && path.parentPath.get("property").isIdentifier({ name: "test" })
);
}

View File

@ -1,56 +0,0 @@
import { FEATURES, hasFeature } from "./features";
export function generateRegexpuOptions(node, features) {
let useUnicodeFlag = false,
dotAllFlag = false,
unicodePropertyEscape = false,
namedGroup = false;
const { flags, pattern } = node;
const flagsIncludesU = flags.includes("u");
if (flagsIncludesU) {
if (!hasFeature(features, FEATURES.unicodeFlag)) {
useUnicodeFlag = true;
}
if (
hasFeature(features, FEATURES.unicodePropertyEscape) &&
/\\[pP]{/.test(pattern)
) {
unicodePropertyEscape = true;
}
}
if (hasFeature(features, FEATURES.dotAllFlag) && flags.indexOf("s") >= 0) {
dotAllFlag = true;
}
if (
hasFeature(features, FEATURES.namedCaptureGroups) &&
/\(\?<(?![=!])/.test(pattern)
) {
namedGroup = true;
}
if (
!namedGroup &&
!unicodePropertyEscape &&
!dotAllFlag &&
(!flagsIncludesU || useUnicodeFlag)
) {
return null;
}
// Now we have to feed regexpu-core the regex
if (flagsIncludesU && flags.indexOf("s") >= 0) {
// When flags includes u, `config.unicode` will be enabled even if `u` is supported natively.
// In this case we have to enable dotAllFlag, otherwise `rewritePattern(/./su)` will return
// incorrect result
// https://github.com/mathiasbynens/regexpu-core/blob/v4.6.0/rewrite-pattern.js#L191
dotAllFlag = true;
}
return {
useUnicodeFlag,
onNamedGroup: () => {},
namedGroup,
unicodePropertyEscape,
dotAllFlag,
lookbehind: true,
};
}

View File

@ -1,6 +0,0 @@
{
"plugins": [
["proposal-unicode-property-regex", { "useUnicodeFlag": false }, "name 1"],
["proposal-unicode-property-regex", { "useUnicodeFlag": true }, "name 2"]
]
}

View File

@ -1,6 +0,0 @@
{
"plugins": [
["transform-named-capturing-groups-regex", { "runtime": false }, "name 1"],
["transform-named-capturing-groups-regex", { "runtime": true }, "name 2"]
]
}

View File

@ -1,3 +0,0 @@
import runner from "@babel/helper-plugin-test-runner";
runner(__dirname);

View File

@ -1,6 +1,6 @@
{ {
"name": "@babel/helper-define-map", "name": "@babel/helper-define-map",
"version": "7.7.0", "version": "7.5.5",
"description": "Helper function to define a map", "description": "Helper function to define a map",
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-define-map", "repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-define-map",
"license": "MIT", "license": "MIT",
@ -9,8 +9,8 @@
}, },
"main": "lib/index.js", "main": "lib/index.js",
"dependencies": { "dependencies": {
"@babel/helper-function-name": "^7.7.0", "@babel/helper-function-name": "^7.1.0",
"@babel/types": "^7.7.0", "@babel/types": "^7.5.5",
"lodash": "^4.17.13" "lodash": "^4.17.13"
} }
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "@babel/helper-explode-assignable-expression", "name": "@babel/helper-explode-assignable-expression",
"version": "7.7.0", "version": "7.1.0",
"description": "Helper function to explode an assignable expression", "description": "Helper function to explode an assignable expression",
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-explode-assignable-expression", "repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-explode-assignable-expression",
"license": "MIT", "license": "MIT",
@ -9,7 +9,7 @@
}, },
"main": "lib/index.js", "main": "lib/index.js",
"dependencies": { "dependencies": {
"@babel/traverse": "^7.7.0", "@babel/traverse": "^7.1.0",
"@babel/types": "^7.7.0" "@babel/types": "^7.0.0"
} }
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "@babel/helper-explode-class", "name": "@babel/helper-explode-class",
"version": "7.7.0", "version": "7.1.0",
"description": "Helper function to explode class", "description": "Helper function to explode class",
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-explode-class", "repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-explode-class",
"license": "MIT", "license": "MIT",
@ -9,8 +9,8 @@
}, },
"main": "lib/index.js", "main": "lib/index.js",
"dependencies": { "dependencies": {
"@babel/helper-bindify-decorators": "^7.7.0", "@babel/helper-bindify-decorators": "^7.1.0",
"@babel/traverse": "^7.7.0", "@babel/traverse": "^7.1.0",
"@babel/types": "^7.7.0" "@babel/types": "^7.0.0"
} }
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "@babel/helper-function-name", "name": "@babel/helper-function-name",
"version": "7.7.0", "version": "7.1.0",
"description": "Helper function to change the property 'name' of every function", "description": "Helper function to change the property 'name' of every function",
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-function-name", "repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-function-name",
"license": "MIT", "license": "MIT",
@ -9,8 +9,8 @@
}, },
"main": "lib/index.js", "main": "lib/index.js",
"dependencies": { "dependencies": {
"@babel/helper-get-function-arity": "^7.7.0", "@babel/helper-get-function-arity": "^7.0.0",
"@babel/template": "^7.7.0", "@babel/template": "^7.1.0",
"@babel/types": "^7.7.0" "@babel/types": "^7.0.0"
} }
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "@babel/helper-get-function-arity", "name": "@babel/helper-get-function-arity",
"version": "7.7.0", "version": "7.0.0",
"description": "Helper function to get function arity", "description": "Helper function to get function arity",
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-get-function-arity", "repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-get-function-arity",
"license": "MIT", "license": "MIT",
@ -9,6 +9,6 @@
}, },
"main": "lib/index.js", "main": "lib/index.js",
"dependencies": { "dependencies": {
"@babel/types": "^7.7.0" "@babel/types": "^7.0.0"
} }
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "@babel/helper-hoist-variables", "name": "@babel/helper-hoist-variables",
"version": "7.7.0", "version": "7.4.4",
"description": "Helper function to hoist variables", "description": "Helper function to hoist variables",
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-hoist-variables", "repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-hoist-variables",
"license": "MIT", "license": "MIT",
@ -9,6 +9,6 @@
}, },
"main": "lib/index.js", "main": "lib/index.js",
"dependencies": { "dependencies": {
"@babel/types": "^7.7.0" "@babel/types": "^7.4.4"
} }
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "@babel/helper-member-expression-to-functions", "name": "@babel/helper-member-expression-to-functions",
"version": "7.7.0", "version": "7.5.5",
"description": "Helper function to replace certain member expressions with function calls", "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", "repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-member-expression-to-functions",
"license": "MIT", "license": "MIT",
@ -10,6 +10,6 @@
"main": "lib/index.js", "main": "lib/index.js",
"author": "Justin Ridgewell <justin@ridgewell.name>", "author": "Justin Ridgewell <justin@ridgewell.name>",
"dependencies": { "dependencies": {
"@babel/types": "^7.7.0" "@babel/types": "^7.5.5"
} }
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "@babel/helper-module-imports", "name": "@babel/helper-module-imports",
"version": "7.7.0", "version": "7.0.0",
"description": "Babel helper functions for inserting module loads", "description": "Babel helper functions for inserting module loads",
"author": "Logan Smyth <loganfsmyth@gmail.com>", "author": "Logan Smyth <loganfsmyth@gmail.com>",
"homepage": "https://babeljs.io/", "homepage": "https://babeljs.io/",
@ -11,9 +11,9 @@
"repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-module-imports", "repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-module-imports",
"main": "lib/index.js", "main": "lib/index.js",
"dependencies": { "dependencies": {
"@babel/types": "^7.7.0" "@babel/types": "^7.0.0"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.7.0" "@babel/core": "^7.0.0"
} }
} }

View File

@ -417,10 +417,10 @@ export default class ImportInjector {
node._blockHoist = blockHoist; node._blockHoist = blockHoist;
}); });
const targetPath = this._programPath.get("body").find(p => { const targetPath = this._programPath.get("body").filter(p => {
const val = p.node._blockHoist; const val = p.node._blockHoist;
return Number.isFinite(val) && val < 4; return Number.isFinite(val) && val < 4;
}); })[0];
if (targetPath) { if (targetPath) {
targetPath.insertBefore(statements); targetPath.insertBefore(statements);

Some files were not shown because too many files have changed in this diff Show More