Compare commits
No commits in common. "initializers-fix" and "v7.6.4" have entirely different histories.
initialize
...
v7.6.4
@ -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
2
.gitignore
vendored
@ -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
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
132
CHANGELOG.md
132
CHANGELOG.md
@ -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(babel‑helpers/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
|
||||||
|
|||||||
9
Makefile
9
Makefile
@ -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
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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",
|
||||||
|
|||||||
@ -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",
|
||||||
|
|||||||
@ -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"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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__)/",
|
||||||
|
|||||||
@ -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": {
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
@ -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";
|
||||||
|
|||||||
@ -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,
|
||||||
},
|
},
|
||||||
|
|||||||
@ -1 +0,0 @@
|
|||||||
arr.map(x => x * MULTIPLIER);
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"args": ["script.js", "--out-file", "folder/nested/script.js"]
|
|
||||||
}
|
|
||||||
@ -1,5 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
arr.map(function (x) {
|
|
||||||
return x * MULTIPLIER;
|
|
||||||
});
|
|
||||||
@ -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;
|
||||||
|
|
||||||
|
|||||||
@ -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",
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
|
|||||||
@ -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 },
|
||||||
);
|
);
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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", () => {
|
||||||
|
|||||||
@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"comments": true
|
|
||||||
}
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
comments: true
|
|
||||||
};
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
comments: true
|
|
||||||
};
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
comments: true
|
|
||||||
};
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
comments: true
|
|
||||||
};
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"comments": true
|
|
||||||
}
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
module.exports = function() {
|
|
||||||
throw new Error("Babelrc threw an error");
|
|
||||||
};
|
|
||||||
3
packages/babel-core/test/fixtures/config/config-files/babelrc-js/.babelrc.js
vendored
Normal file
3
packages/babel-core/test/fixtures/config/config-files/babelrc-js/.babelrc.js
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
module.exports = {
|
||||||
|
comments: true,
|
||||||
|
};
|
||||||
3
packages/babel-core/test/fixtures/config/config-files/babelrc/.babelrc
vendored
Normal file
3
packages/babel-core/test/fixtures/config/config-files/babelrc/.babelrc
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
comments: true,
|
||||||
|
}
|
||||||
1
packages/babel-core/test/fixtures/config/config-files/both-babelrc/.babelrc
vendored
Normal file
1
packages/babel-core/test/fixtures/config/config-files/both-babelrc/.babelrc
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{}
|
||||||
1
packages/babel-core/test/fixtures/config/config-files/both-babelrc/.babelrc.js
vendored
Normal file
1
packages/babel-core/test/fixtures/config/config-files/both-babelrc/.babelrc.js
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
module.exports = {};
|
||||||
1
packages/babel-core/test/fixtures/config/config-files/pkg-babelrc-js/.babelrc.js
vendored
Normal file
1
packages/babel-core/test/fixtures/config/config-files/pkg-babelrc-js/.babelrc.js
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
module.exports = {};
|
||||||
3
packages/babel-core/test/fixtures/config/config-files/pkg-babelrc-js/package.json
vendored
Normal file
3
packages/babel-core/test/fixtures/config/config-files/pkg-babelrc-js/package.json
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"babel": {}
|
||||||
|
}
|
||||||
1
packages/babel-core/test/fixtures/config/config-files/pkg-babelrc/.babelrc
vendored
Normal file
1
packages/babel-core/test/fixtures/config/config-files/pkg-babelrc/.babelrc
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{}
|
||||||
3
packages/babel-core/test/fixtures/config/config-files/pkg-babelrc/package.json
vendored
Normal file
3
packages/babel-core/test/fixtures/config/config-files/pkg-babelrc/package.json
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"babel": {}
|
||||||
|
}
|
||||||
@ -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,
|
||||||
|
|||||||
@ -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\(\) {}/);
|
|
||||||
|
|||||||
3
packages/babel-core/test/fixtures/plugins/build-code-frame-error/options.json
vendored
Normal file
3
packages/babel-core/test/fixtures/plugins/build-code-frame-error/options.json
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"throws": "unknown: someMsg\n> 1 | function f() {}"
|
||||||
|
}
|
||||||
@ -1,5 +0,0 @@
|
|||||||
var foo = function () {
|
|
||||||
return 4;
|
|
||||||
};
|
|
||||||
|
|
||||||
//# sourceMappingURL=input.js.map
|
|
||||||
@ -1 +0,0 @@
|
|||||||
{"version":3,"sources":["original.js"],"names":[],"mappings":"AAAA,UAAU,Y;SAAM,C;CAAC","sourcesContent":["var foo = () => 4;"]}
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"inputSourceMap": true
|
|
||||||
}
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
var foo = function () {
|
|
||||||
return 4;
|
|
||||||
};
|
|
||||||
@ -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
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@ -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]))
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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];
|
|
||||||
|
|||||||
@ -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];
|
|
||||||
|
|||||||
@ -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,
|
|
||||||
}
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"plugins": [["flow", { "enums": true }]]
|
|
||||||
}
|
|
||||||
@ -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,
|
|
||||||
}
|
|
||||||
@ -1,2 +0,0 @@
|
|||||||
(x: any): asserts x => true;
|
|
||||||
(x: any): asserts x is boolean => true;
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
(x: any): asserts x => true;
|
|
||||||
|
|
||||||
(x: any): asserts x is boolean => true;
|
|
||||||
@ -1,5 +0,0 @@
|
|||||||
class A {
|
|
||||||
declare foo;
|
|
||||||
declare bar: string;
|
|
||||||
declare readonly bax: number;
|
|
||||||
}
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"sourceType": "module",
|
|
||||||
"plugins": ["typescript", "classProperties"]
|
|
||||||
}
|
|
||||||
@ -1,5 +0,0 @@
|
|||||||
class A {
|
|
||||||
declare foo;
|
|
||||||
declare bar: string;
|
|
||||||
declare readonly bax: number;
|
|
||||||
}
|
|
||||||
@ -1,2 +0,0 @@
|
|||||||
function f(x: any): asserts x {}
|
|
||||||
(function(x: any): asserts x is boolean {})
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
function f(x: any): asserts x {}
|
|
||||||
|
|
||||||
(function (x: any): asserts x is boolean {});
|
|
||||||
@ -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,
|
||||||
|
|||||||
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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)) {
|
||||||
|
|||||||
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
@ -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({
|
||||||
|
|||||||
@ -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`,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
src
|
|
||||||
test
|
|
||||||
*.log
|
|
||||||
@ -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
|
|
||||||
```
|
|
||||||
@ -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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -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);
|
|
||||||
}
|
|
||||||
@ -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" })
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@ -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,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@ -1 +0,0 @@
|
|||||||
/\p{Script_Extensions=Wancho}/u
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"plugins": [
|
|
||||||
["proposal-unicode-property-regex", { "useUnicodeFlag": false }, "name 1"],
|
|
||||||
["proposal-unicode-property-regex", { "useUnicodeFlag": true }, "name 2"]
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1 +0,0 @@
|
|||||||
/(?:\uD838[\uDEC0-\uDEF9\uDEFF])/;
|
|
||||||
@ -1 +0,0 @@
|
|||||||
/(?<year>\d{4})/
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"plugins": [
|
|
||||||
["transform-named-capturing-groups-regex", { "runtime": false }, "name 1"],
|
|
||||||
["transform-named-capturing-groups-regex", { "runtime": true }, "name 2"]
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1 +0,0 @@
|
|||||||
/([0-9]{4})/;
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
import runner from "@babel/helper-plugin-test-runner";
|
|
||||||
|
|
||||||
runner(__dirname);
|
|
||||||
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
Loading…
x
Reference in New Issue
Block a user