Compare commits
210 Commits
v7.0.0-alp
...
v7.0.0-bet
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1c13250807 | ||
|
|
8742012b5e | ||
|
|
4daf11528c | ||
|
|
c47258d68c | ||
|
|
c4f6a7a06f | ||
|
|
1341e4163b | ||
|
|
b6467a68ca | ||
|
|
5565e1b406 | ||
|
|
6560a29c36 | ||
|
|
4e612058c0 | ||
|
|
4e7961dcf8 | ||
|
|
777a9ae6e4 | ||
|
|
3a2b7fe3cd | ||
|
|
d6ba4d0a24 | ||
|
|
5df70e6a94 | ||
|
|
ca117e08cb | ||
|
|
2dd03e3ee9 | ||
|
|
4f441ff27e | ||
|
|
f7109658f9 | ||
|
|
f39811d271 | ||
|
|
fad9345c85 | ||
|
|
1797ac5015 | ||
|
|
76161e0a73 | ||
|
|
ab30fa54cb | ||
|
|
44f6ff5e85 | ||
|
|
6108bee4f9 | ||
|
|
0189b38702 | ||
|
|
b82b65a31e | ||
|
|
5e7fce3fe0 | ||
|
|
84580cc2d1 | ||
|
|
d70603ffa9 | ||
|
|
d79a7920a1 | ||
|
|
2846e06db1 | ||
|
|
beff7809ea | ||
|
|
0a4f1b0a6e | ||
|
|
75861fac87 | ||
|
|
b2b3d7944a | ||
|
|
827d84536a | ||
|
|
3e487f89ab | ||
|
|
40805894c5 | ||
|
|
95dd16aeeb | ||
|
|
ac6eda2709 | ||
|
|
960151c876 | ||
|
|
7795750862 | ||
|
|
2d8fdf3045 | ||
|
|
a70cda812c | ||
|
|
4b297907d1 | ||
|
|
48c114169f | ||
|
|
68786c4f0f | ||
|
|
1ef5871300 | ||
|
|
c3e8715010 | ||
|
|
d8b4073536 | ||
|
|
3c4f19a28d | ||
|
|
2db0c3ad1d | ||
|
|
4577bd1b7c | ||
|
|
93cf26abca | ||
|
|
62c22c7b5d | ||
|
|
63baaa7148 | ||
|
|
7e726a81e6 | ||
|
|
9e4e64dac9 | ||
|
|
3569cb9922 | ||
|
|
c6a094a9d2 | ||
|
|
cee4cde53e | ||
|
|
aa330999d0 | ||
|
|
5749276d7e | ||
|
|
7b30f77954 | ||
|
|
6ab3b4c0e3 | ||
|
|
70ab2e0620 | ||
|
|
0d16499fc0 | ||
|
|
77bbe20352 | ||
|
|
bd569433c4 | ||
|
|
fffa604023 | ||
|
|
e08ff8e650 | ||
|
|
b660f61b92 | ||
|
|
5fb282f73f | ||
|
|
7cc5580c71 | ||
|
|
2eaff3d01c | ||
|
|
b684699f79 | ||
|
|
f4716dc816 | ||
|
|
d375d80001 | ||
|
|
98824e7cb7 | ||
|
|
c28465e03e | ||
|
|
4ca686b7be | ||
|
|
b84f8e9234 | ||
|
|
9e51038ad9 | ||
|
|
777a8e2bb4 | ||
|
|
ad1f87cf07 | ||
|
|
a04c18af71 | ||
|
|
0538c3cd8c | ||
|
|
cd66657f34 | ||
|
|
9243c78ea2 | ||
|
|
218f191a59 | ||
|
|
3154c2c114 | ||
|
|
4fdd75695b | ||
|
|
9c91e35ce4 | ||
|
|
3a55e1326c | ||
|
|
370559c62f | ||
|
|
a74b307752 | ||
|
|
b41fe4efb1 | ||
|
|
68d2f8d161 | ||
|
|
1c1ce5a9e4 | ||
|
|
ab76cb6b53 | ||
|
|
009d7f0b76 | ||
|
|
f667f07d82 | ||
|
|
94f54da30b | ||
|
|
d85c642617 | ||
|
|
79f4956948 | ||
|
|
7f92e1d9dd | ||
|
|
e37a5eb5eb | ||
|
|
66ec5263a4 | ||
|
|
13d931c417 | ||
|
|
47a9ba3440 | ||
|
|
a1debae8f0 | ||
|
|
30c4d6b456 | ||
|
|
0e58007264 | ||
|
|
577173cc02 | ||
|
|
8c457e9283 | ||
|
|
2a83867436 | ||
|
|
9dd65c809f | ||
|
|
af5f34ace5 | ||
|
|
57da9bdbed | ||
|
|
d86ae2fb84 | ||
|
|
18084db7cf | ||
|
|
8e19a5b057 | ||
|
|
95882d4e5a | ||
|
|
99ab2b206c | ||
|
|
77cfa94682 | ||
|
|
79c6814d65 | ||
|
|
d479673074 | ||
|
|
6630ae9794 | ||
|
|
6bb1486405 | ||
|
|
75808a2d14 | ||
|
|
4e9a25e34a | ||
|
|
0f823beeb1 | ||
|
|
829c75a866 | ||
|
|
9d7c82d869 | ||
|
|
21eeed8a8c | ||
|
|
889f4e7791 | ||
|
|
c5e81516dd | ||
|
|
6d965c0926 | ||
|
|
2dba910b9e | ||
|
|
e32042f353 | ||
|
|
c1d07fd6db | ||
|
|
f83c83d49c | ||
|
|
605adc922d | ||
|
|
593cbc1d53 | ||
|
|
5c45753cd6 | ||
|
|
1563221171 | ||
|
|
b242e0d946 | ||
|
|
9322fd0458 | ||
|
|
f01438e9b1 | ||
|
|
ce5d1d0f59 | ||
|
|
4d51052037 | ||
|
|
fe13ba8fc2 | ||
|
|
81e87b0838 | ||
|
|
72183ff2e9 | ||
|
|
9ad660bbe1 | ||
|
|
48c770e4bb | ||
|
|
3cf4cee40a | ||
|
|
64eafad472 | ||
|
|
3b28bd2cb1 | ||
|
|
fea3a72838 | ||
|
|
1b29ab1289 | ||
|
|
dd82d7a653 | ||
|
|
ccd314cba7 | ||
|
|
82f37841f5 | ||
|
|
bc013e6d34 | ||
|
|
0c8fdc381d | ||
|
|
783d85ee4b | ||
|
|
489cf90d23 | ||
|
|
0230dc5067 | ||
|
|
dcbb6c5ce5 | ||
|
|
b296759852 | ||
|
|
51f3ab45c4 | ||
|
|
5b261849e0 | ||
|
|
58c686378d | ||
|
|
9a92933589 | ||
|
|
5f866f2d92 | ||
|
|
3570ba7c28 | ||
|
|
60adcd68a0 | ||
|
|
412180e203 | ||
|
|
a1a795321a | ||
|
|
11b7db05fb | ||
|
|
ca435b6d48 | ||
|
|
982aba38e4 | ||
|
|
c1b3740707 | ||
|
|
e9bc213b14 | ||
|
|
e2c2d7d742 | ||
|
|
2cb4d08d19 | ||
|
|
149acc40bd | ||
|
|
d40cb31685 | ||
|
|
f8da5e3457 | ||
|
|
fd3a2c285a | ||
|
|
3534bc872d | ||
|
|
66f8546107 | ||
|
|
9b4c33d44e | ||
|
|
60df9f3cad | ||
|
|
f2f226b4f2 | ||
|
|
ddfb6f2c44 | ||
|
|
70354013f1 | ||
|
|
c42e027602 | ||
|
|
18d6ba9947 | ||
|
|
c82b084927 | ||
|
|
45b41740d8 | ||
|
|
b608e28aa7 | ||
|
|
06f67e1ad3 | ||
|
|
b5bb89b30a | ||
|
|
0c2e3b1045 | ||
|
|
9b410be61c | ||
|
|
f81d7496b1 |
@@ -1,3 +1,4 @@
|
||||
# Ensure babel-register won't compile fixtures, or try to recompile compiled code.
|
||||
packages/*/test/fixtures
|
||||
packages/*/lib
|
||||
packages/babel-standalone/babel.js
|
||||
|
||||
28
.babelrc.js
28
.babelrc.js
@@ -6,12 +6,28 @@ let envOpts = {
|
||||
|
||||
module.exports = {
|
||||
comments: false,
|
||||
plugins: [
|
||||
// temp until next release
|
||||
function() {
|
||||
return {
|
||||
visitor: {
|
||||
"Function": function(path) {
|
||||
const node = path.node;
|
||||
for (let i = 0; i < node.params.length; i++) {
|
||||
const param = node.params[i];
|
||||
if (param.type === "AssignmentPattern") {
|
||||
param.left.optional = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
],
|
||||
presets: [
|
||||
[
|
||||
"env", envOpts
|
||||
],
|
||||
["env", envOpts],
|
||||
"stage-0",
|
||||
"flow",
|
||||
"flow"
|
||||
],
|
||||
env: {
|
||||
cov: {
|
||||
@@ -21,9 +37,9 @@ module.exports = {
|
||||
}
|
||||
};
|
||||
|
||||
if (process.env.BABEL_ENV === 'development') {
|
||||
if (process.env.BABEL_ENV === "development") {
|
||||
envOpts.targets = {
|
||||
node: "current"
|
||||
};
|
||||
envOpts.debug = true;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -7,3 +7,9 @@ packages/*/lib
|
||||
packages/*/dist
|
||||
packages/*/test/fixtures
|
||||
packages/*/test/tmp
|
||||
packages/babel-standalone/babel.js
|
||||
packages/babel-standalone/babel.min.js
|
||||
|
||||
# Prettier tries to insert trailing commas in function calls, which Node.js
|
||||
# doesn't natively support. This causes an error when loading the Gulp tasks.
|
||||
packages/babel-standalone/src/gulpTasks.js
|
||||
|
||||
@@ -13,6 +13,5 @@ lib/types.js
|
||||
lib/third-party-libs.js.flow
|
||||
|
||||
[options]
|
||||
strip_root=true
|
||||
suppress_comment= \\(.\\|\n\\)*\\$FlowFixMe
|
||||
suppress_comment= \\(.\\|\n\\)*\\$FlowIssue
|
||||
|
||||
13
.github/PULL_REQUEST_TEMPLATE.md
vendored
13
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -2,20 +2,19 @@
|
||||
Before making a PR please make sure to read our contributing guidelines
|
||||
https://github.com/babel/babel/blob/master/CONTRIBUTING.md
|
||||
|
||||
For any issue references: Add a comma-separated list of a [closing word](https://help.github.com/articles/closing-issues-via-commit-messages/) followed by the ticket number fixed by the PR
|
||||
For any issue references: Add a comma-separated list of a [closing word](https://help.github.com/articles/closing-issues-via-commit-messages/) followed by the ticket number fixed by the PR. It should be underlined in the preview if done correctly.
|
||||
-->
|
||||
|
||||
| Q | A <!--(yes/no) -->
|
||||
| Q | A <!--(can use an emoji 👍 ) -->
|
||||
| ------------------------ | ---
|
||||
| Fixed Issues | `Fixes #1, Fixes #2` <!-- rm the quotes to link the issues -->
|
||||
| Patch: Bug Fix? |
|
||||
| Major: Breaking Change? |
|
||||
| Minor: New Feature? |
|
||||
| Deprecations? |
|
||||
| Spec Compliancy? |
|
||||
| Tests Added/Pass? |
|
||||
| Fixed Tickets | `Fixes #1, Fixes #2` <!-- rm the quotes to link the issues -->
|
||||
| Spec Compliancy? |
|
||||
| License | MIT
|
||||
| Doc PR | <!-- if yes, add `[skip ci]` to your commit message to skip CI builds -->
|
||||
| Dependency Changes |
|
||||
| Doc PR | <!-- if yes, can add `[skip ci]` to your commit message to skip CI builds -->
|
||||
| Any Dependency Changes? |
|
||||
|
||||
<!-- Describe your changes below in as much detail as possible -->
|
||||
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -23,6 +23,9 @@ package-lock.json
|
||||
!/packages/babel-runtime/helpers/es6/toArray.js
|
||||
/packages/babel-register/test/.babel
|
||||
/packages/babel-cli/test/tmp
|
||||
/packages/babel-node/test/tmp
|
||||
/packages/*/lib
|
||||
.nyc_output
|
||||
/babel.sublime-workspace
|
||||
packages/babel-standalone/babel.js
|
||||
packages/babel-standalone/babel.min.js
|
||||
|
||||
10
.travis.yml
10
.travis.yml
@@ -12,9 +12,17 @@ node_js:
|
||||
- '4'
|
||||
|
||||
env:
|
||||
- JOB=test
|
||||
global:
|
||||
- PATH=$HOME/.yarn/bin:$PATH
|
||||
- JOB=test
|
||||
|
||||
before_install:
|
||||
- curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version 0.28.1
|
||||
|
||||
script:
|
||||
# Babel doesn't build correctly with npm v2 (which comes bundled with Node v4)
|
||||
# so we manually upgrade to a known working npm version.
|
||||
- npm install --global npm@4
|
||||
- 'if [ "$JOB" = "test" ]; then make test-ci; fi'
|
||||
- 'if [ "$JOB" = "lint" ]; then make lint && make flow; fi'
|
||||
|
||||
|
||||
137
CHANGELOG.md
137
CHANGELOG.md
@@ -13,6 +13,93 @@ _Note: Gaps between patch versions are faulty, broken or test releases._
|
||||
|
||||
See [CHANGELOG - 6to5](CHANGELOG-6to5.md) for the pre-4.0.0 version changelog.
|
||||
|
||||
## 6.26.0 (2017-08-16)
|
||||
|
||||
> Backports for some folks (also other's when we accidently merged PRs from both 6.x/master)
|
||||
> Lesson learned: just use `master` and backport on another branch.
|
||||
|
||||
#### :eyeglasses: Spec Compliancy
|
||||
* `babel-core`, `babel-generator`, `babel-plugin-transform-flow-comments`, `babel-plugin-transform-flow-strip-types`, `babel-traverse`, `babel-types`
|
||||
* [#6081](https://github.com/babel/babel/pull/6081) Flow opaque type 6.x backport. ([@jbrown215](https://github.com/jbrown215))
|
||||
|
||||
#### :rocket: New Feature
|
||||
* `babel-cli`
|
||||
* [#5796](https://github.com/babel/babel/pull/5796) Allow --inspect-brk option to be used with babel-node [6.x backport]. ([@noinkling](https://github.com/noinkling))
|
||||
|
||||
#### :bug: Bug Fix
|
||||
* `babel-plugin-transform-es2015-modules-commonjs`
|
||||
* [#5811](https://github.com/babel/babel/pull/5811) Fix 5768. ([@joshwnj](https://github.com/joshwnj))
|
||||
* [#5469](https://github.com/babel/babel/pull/5469) Fix commonjs exports with destructuring.. ([@yavorsky](https://github.com/yavorsky))
|
||||
* `babel-types`
|
||||
* [#5693](https://github.com/babel/babel/pull/5693) Hoist toSequenceExpression's convert helper. ([@jridgewell](https://github.com/jridgewell))
|
||||
|
||||
#### :memo: Documentation
|
||||
* `babel-plugin-transform-class-properties`
|
||||
* [#6005](https://github.com/babel/babel/pull/6005) FIX access to the prototype of an instance. ([@shuaibird](https://github.com/shuaibird))
|
||||
* `babel-plugin-transform-runtime`
|
||||
* [#5857](https://github.com/babel/babel/pull/5857) Fix typos in README.md. ([@danny-andrews](https://github.com/danny-andrews))
|
||||
* `babel-plugin-transform-regenerator`
|
||||
* [#5852](https://github.com/babel/babel/pull/5852) Fix babel-plugin-transform-regenerator README. ([@k15a](https://github.com/k15a))
|
||||
* Other
|
||||
* [#5788](https://github.com/babel/babel/pull/5788) Add a section on troubleshooting [skip ci]. ([@peey](https://github.com/peey))
|
||||
* [#5755](https://github.com/babel/babel/pull/5755) Fix broken tables in README.md. ([@u9lyfish](https://github.com/u9lyfish))
|
||||
* `babel-generator`, `babel-plugin-transform-es2015-arrow-functions`, `babel-plugin-transform-es2015-modules-commonjs`, `babel-plugin-transform-es2015-spread`, `babel-plugin-transform-runtime`, `babel-register`
|
||||
* [#5613](https://github.com/babel/babel/pull/5613) Backport doc changes. ([@xtuc](https://github.com/xtuc))
|
||||
|
||||
#### :house: Internal
|
||||
* `babel-traverse`
|
||||
* [#5965](https://github.com/babel/babel/pull/5965) Remove unused functions from renamer.js.. ([@mcav](https://github.com/mcav))
|
||||
* [#5363](https://github.com/babel/babel/pull/5363) Increase the code coverage for traverse evaluation. ([@ssuman](https://github.com/ssuman))
|
||||
* Other
|
||||
* [#5938](https://github.com/babel/babel/pull/5938) Remove codecov node package and use bash uploader. ([@existentialism](https://github.com/existentialism))
|
||||
|
||||
#### Committers: 19
|
||||
- Artem Yavorsky ([yavorsky](https://github.com/yavorsky))
|
||||
- Brian Ng ([existentialism](https://github.com/existentialism))
|
||||
- Danny Andrews ([danny-andrews](https://github.com/danny-andrews))
|
||||
- Henry Zhu ([hzoo](https://github.com/hzoo))
|
||||
- Jeffrey Wear ([wearhere](https://github.com/wearhere))
|
||||
- Jordan Brown ([jbrown215](https://github.com/jbrown215))
|
||||
- Josh Johnston ([joshwnj](https://github.com/joshwnj))
|
||||
- Justin Ridgewell ([jridgewell](https://github.com/jridgewell))
|
||||
- Konstantin Pschera ([k15a](https://github.com/k15a))
|
||||
- Malcolm ([noinkling](https://github.com/noinkling))
|
||||
- Marcus Cavanaugh ([mcav](https://github.com/mcav))
|
||||
- Peeyush Kushwaha ([peey](https://github.com/peey))
|
||||
- Philipp Friedenberger ([MrSpider](https://github.com/MrSpider))
|
||||
- Samuel Reed ([STRML](https://github.com/STRML))
|
||||
- Shuaibird Hwang ([shuaibird](https://github.com/shuaibird))
|
||||
- Suman ([ssuman](https://github.com/ssuman))
|
||||
- Sven SAULEAU ([xtuc](https://github.com/xtuc))
|
||||
- jonathan schatz ([modosc](https://github.com/modosc))
|
||||
- u9lyfish@gmail.com ([u9lyfish](https://github.com/u9lyfish))
|
||||
|
||||
## 6.25.0 (2017-06-08)
|
||||
|
||||
Just backporting a few things.
|
||||
|
||||
#### :rocket: New Feature
|
||||
* `babel-plugin-transform-react-display-name`
|
||||
* [#5780](https://github.com/babel/babel/pull/5780) Backport support for createReactClass with transform-react-display-name. ([@kentor](https://github.com/kentor))
|
||||
* [#5554](https://github.com/babel/babel/pull/5554) Updated transform-react-display-name for createReactClass addon. ([@bvaughn](https://github.com/bvaughn))
|
||||
* `babel-generator`, `babel-plugin-transform-flow-strip-types`, `babel-types`
|
||||
* [#5653](https://github.com/babel/babel/pull/5653) Port flow object spread from #418 to 6.x. ([@kittens](https://github.com/kittens))
|
||||
|
||||
#### :bug: Bug Fix
|
||||
* `babel-types`
|
||||
* [#5770](https://github.com/babel/babel/pull/5770) Backport array & object pattern fixes to 6.x. ([@citycide](https://github.com/citycide))
|
||||
|
||||
#### :nail_care: Polish
|
||||
* `babel-traverse`
|
||||
* [#5615](https://github.com/babel/babel/pull/5615) Update deprecation warning on flow bindings. ([@kassens](https://github.com/kassens))
|
||||
|
||||
#### Committers: 5
|
||||
- Bo Lingen ([citycide](https://github.com/citycide))
|
||||
- Brian Vaughn ([bvaughn](https://github.com/bvaughn))
|
||||
- Jan Kassens ([kassens](https://github.com/kassens))
|
||||
- Kenneth Chung ([kentor](https://github.com/kentor))
|
||||
- Sebastian McKenzie ([kittens](https://github.com/kittens))
|
||||
|
||||
## 6.24.0 (2017-03-13)
|
||||
|
||||
A quick release for 2 features:
|
||||
@@ -263,7 +350,7 @@ New/Expected Behavior
|
||||
|
||||
```js
|
||||
const _ref = foo(); // should only be called once
|
||||
const { x } = _ref;
|
||||
const { x } = _ref;
|
||||
const y = _objectWithoutProperties(_ref, ["x"]);
|
||||
```
|
||||
|
||||
@@ -279,7 +366,7 @@ function fn({a = 1, ...b} = {}) {
|
||||
return {a, b};
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
* `babel-plugin-transform-es2015-destructuring`
|
||||
* [#5093](https://github.com/babel/babel/pull/5093) Ensure array is always copied during destructure. ([@existentialism](https://github.com/existentialism))
|
||||
|
||||
@@ -293,7 +380,7 @@ const arr = [1, 2, 3]
|
||||
assign(arr, 1, 42)
|
||||
console.log(arr) // [1, 2, 3]
|
||||
```
|
||||
|
||||
|
||||
* `babel-plugin-transform-es2015-function-name`
|
||||
* [#5008](https://github.com/babel/babel/pull/5008) Don't try to visit ArrowFunctionExpression, they cannot be named. ([@Kovensky](https://github.com/Kovensky))
|
||||
|
||||
@@ -308,9 +395,9 @@ Output
|
||||
|
||||
```js
|
||||
export const x = ({ x }) => x;
|
||||
export const y = function y() {};
|
||||
export const y = function y() {};
|
||||
```
|
||||
|
||||
|
||||
* `babel-types`
|
||||
* [#5068](https://github.com/babel/babel/pull/5068) Fix getBindingIdentifiers in babel-types. ([@rtsao](https://github.com/rtsao))
|
||||
* `babel-cli`
|
||||
@@ -460,7 +547,7 @@ Will still error with `Spread children are not supported.`
|
||||
```js
|
||||
<div>{...this.props.children}</div>;
|
||||
```
|
||||
|
||||
|
||||
* `babel-plugin-transform-es2015-block-scoping`, `babel-plugin-transform-react-constant-elements`, `babel-traverse`
|
||||
* [#4940](https://github.com/babel/babel/pull/4940) Fix React constant element bugs. ([@appden](https://github.com/appden))
|
||||
|
||||
@@ -469,7 +556,7 @@ When multiple declarators are present in a declaration, we want to insert the co
|
||||
```js
|
||||
function render() {
|
||||
const bar = "bar", renderFoo = () => <foo bar={bar} baz={baz} />, baz = "baz";
|
||||
|
||||
|
||||
return renderFoo();
|
||||
}
|
||||
```
|
||||
@@ -480,12 +567,12 @@ When block scoped variables caused the block to be wrapped in a closure, the var
|
||||
function render(flag) {
|
||||
if (flag) {
|
||||
let bar = "bar";
|
||||
|
||||
|
||||
[].map(() => bar);
|
||||
|
||||
|
||||
return <foo bar={bar} />;
|
||||
}
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
```
|
||||
@@ -526,7 +613,7 @@ for (let a of b) {
|
||||
* [#4999](https://github.com/babel/babel/pull/4999) babel-helper-transform-fixture-test-runner: pass require as a global. ([@hzoo](https://github.com/hzoo))
|
||||
|
||||
Allows running `require()` in exec.js tests like for [babel/babel-preset-env#95](https://github.com/babel/babel-preset-env/pull/95)
|
||||
|
||||
|
||||
* Other
|
||||
* [#5005](https://github.com/babel/babel/pull/5005) internal: don't run watch with the test env (skip building with code …. ([@hzoo](https://github.com/hzoo))
|
||||
|
||||
@@ -648,8 +735,8 @@ try {
|
||||
return x;
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
```
|
||||
|
||||
* `babel-helper-remap-async-to-generator`, `babel-plugin-transform-async-generator-functions`, `babel-plugin-transform-async-to-generator`
|
||||
* [#4901](https://github.com/babel/babel/pull/4901) Only base async fn arity on non-default/non-rest params - Closes [#4891](https://github.com/babel/babel/issues/4891). ([@loganfsmyth](https://github.com/loganfsmyth))
|
||||
|
||||
@@ -660,7 +747,7 @@ console.log(foo.length) // 0
|
||||
const asyncFoo = async (...args) => { }
|
||||
console.log(asyncFoo.length) // 0
|
||||
```
|
||||
|
||||
|
||||
* `babel-generator`, `babel-types`
|
||||
* [#4945](https://github.com/babel/babel/pull/4945) Add `babel-generator` support for `Import`. ([@TheLarkInn](https://github.com/TheLarkInn))
|
||||
|
||||
@@ -669,14 +756,14 @@ console.log(asyncFoo.length) // 0
|
||||
```js
|
||||
import("module.js");
|
||||
```
|
||||
|
||||
|
||||
* `babel-plugin-transform-object-rest-spread`
|
||||
* [#4883](https://github.com/babel/babel/pull/4883) Fix for object-rest with parameters destructuring nested rest. ([@christophehurpeau](https://github.com/christophehurpeau))
|
||||
|
||||
```js
|
||||
function a5({a3, b2: { ba1, ...ba2 }, ...c3}) {}
|
||||
```
|
||||
|
||||
```
|
||||
|
||||
* `babel-traverse`
|
||||
* [#4875](https://github.com/babel/babel/pull/4875) Fix `path.evaluate` for references before declarations. ([@boopathi](https://github.com/boopathi))
|
||||
|
||||
@@ -981,7 +1068,7 @@ function render(_ref) {
|
||||
- Scott Stern ([sstern6](https://github.com/sstern6))
|
||||
- Shine Wang ([shinew](https://github.com/shinew))
|
||||
- lion ([lion-man44](https://github.com/lion-man44))
|
||||
|
||||
|
||||
## v6.18.2 (2016-11-01)
|
||||
|
||||
Weird publishing issue with v6.18.1, same release.
|
||||
@@ -1666,7 +1753,7 @@ export default {
|
||||
#### :bug: Bug Fix
|
||||
* `babel-helpers`, `babel-plugin-transform-es2015-typeof-symbol`
|
||||
* [#3686](https://github.com/babel/babel/pull/3686) Fix `typeof Symbol.prototype`. ([@brainlock](https://github.com/brainlock))
|
||||
|
||||
|
||||
```js
|
||||
// `typeof Symbol.prototype` should be 'object'
|
||||
typeof Symbol.prototype === 'object'
|
||||
@@ -1675,7 +1762,7 @@ typeof Symbol.prototype === 'object'
|
||||
* `babel-cli`
|
||||
* [#3456](https://github.com/babel/babel/pull/3456) Use the real sourcemap API and handle input sourcemaps - Fixes [#7259](https://github.com/babel/babel/issues/7259). ([@loganfsmyth](https://github.com/loganfsmyth))
|
||||
* [#4507](https://github.com/babel/babel/pull/4507) Only set options in cli if different from default. ([@danez](https://github.com/danez))
|
||||
|
||||
|
||||
Fix an issue with defaults not being overidden. This was causing options like `comments: false` not to work correctly.
|
||||
|
||||
* [#4508](https://github.com/babel/babel/pull/4508) Support custom ports for V8 --inspect. ([@andykant](https://github.com/andykant))
|
||||
@@ -1730,7 +1817,7 @@ We noticed that we can not make this optimizations if there are function calls o
|
||||
// was tranforming to
|
||||
x = a();
|
||||
y = obj.x;
|
||||
// now transforms to
|
||||
// now transforms to
|
||||
var _ref = [a(), obj.x];
|
||||
x = _ref[0];
|
||||
y = _ref[1];
|
||||
@@ -1796,7 +1883,7 @@ Cleanup tests, remove various unused dependencies, do not run CI with only readm
|
||||
#### Commiters: 20
|
||||
|
||||
First PRs!
|
||||
- Alberto Piai ([brainlock](https://github.com/brainlock))
|
||||
- Alberto Piai ([brainlock](https://github.com/brainlock))
|
||||
- Andy Kant ([andykant](https://github.com/andykant))
|
||||
- Basil Hosmer ([bhosmer](https://github.com/bhosmer))
|
||||
- Bo Borgerson ([gigabo](https://github.com/gigabo))
|
||||
@@ -1879,7 +1966,7 @@ npm install babel-preset-latest --save-dev
|
||||
{ "presets": [
|
||||
["latest", {
|
||||
"es2015": {
|
||||
"modules": false
|
||||
"modules": false
|
||||
}
|
||||
}]
|
||||
] }
|
||||
@@ -2117,7 +2204,7 @@ Can be `false` to not transform modules, or one of `["amd", "umd", "systemjs", "
|
||||
|
||||
## v6.11.5 (2016-07-23)
|
||||
|
||||
Thanks to Rob Eisenberg ([EisenbergEffect](https://github.com/EisenbergEffect)), Keyan Zhang ([keyanzhang](https://github.com/keyanzhang)), Rolf Timmermans ([rolftimmermans](https://github.com/rolftimmermans)), Thomas Grainger ([graingert](https://github.com/graingert)),
|
||||
Thanks to Rob Eisenberg ([EisenbergEffect](https://github.com/EisenbergEffect)), Keyan Zhang ([keyanzhang](https://github.com/keyanzhang)), Rolf Timmermans ([rolftimmermans](https://github.com/rolftimmermans)), Thomas Grainger ([graingert](https://github.com/graingert)),
|
||||
|
||||
we have few fixes: fix `babel-register` file paths on error, infer class name for classes with class properties, fix `export *` to account for previously compiled modules.
|
||||
|
||||
@@ -2165,7 +2252,7 @@ In this release among other things are some more optimizations for babel-generat
|
||||
|
||||
## v6.11.3 (2016-07-13)
|
||||
|
||||
The main fix is @loganfsmyth's changes of some parts in babel-generator in [#3565](https://github.com/babel/babel/pull/3565) to fix issues with exponential code generation times in certain cases.
|
||||
The main fix is @loganfsmyth's changes of some parts in babel-generator in [#3565](https://github.com/babel/babel/pull/3565) to fix issues with exponential code generation times in certain cases.
|
||||
|
||||
Items: the size of the array being generated
|
||||
Time: The time in ms to generate the code
|
||||
|
||||
@@ -31,6 +31,8 @@ Contributions are always welcome, no matter how large or small.
|
||||
- Check out [the Babel Plugin Handbook](https://github.com/thejameskyle/babel-handbook/blob/master/translations/en/plugin-handbook.md#babel-plugin-handbook) - core plugins are written the same way as any other plugin!
|
||||
- Check out [AST Explorer](http://astexplorer.net/#/scUfOmVOG5) to learn more about ASTs or make your own plugin in the browser
|
||||
- When you feel ready to jump into the Babel source code, a good place to start is to look for issues tagged with [help-wanted](https://github.com/babel/babel/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) and/or [beginner-friendly](https://github.com/babel/babel/issues?q=is%3Aissue+is%3Aopen+label%3A%22beginner-friendly%22).
|
||||
- Follow along with what we are working on by joining our Slack, following our annoucements on [Twitter](https://twitter.com/babeljs), and reading (or participating!) in our [meeting notes](https://github.com/babel/notes).
|
||||
- Check out our [website](http://babeljs.io/) and the [repo](https://github.com/babel/website)
|
||||
|
||||
## Chat
|
||||
|
||||
@@ -40,11 +42,9 @@ Feel free to check out the `#discussion`/`#development` channels on our [Slack](
|
||||
|
||||
**Note:** Versions `< 5.1.10` can't be built.
|
||||
|
||||
Babel is built for Node.js 4 and up but we develop using Node.js 6. Make sure you are on npm 3.
|
||||
Babel is built for Node 4 and up but we develop using Node 8 and yarn. You can check this with `node -v`.
|
||||
|
||||
You can check this with `node -v` and `npm -v`.
|
||||
|
||||
In addition, make sure that Yarn is installed.
|
||||
Make sure that Yarn is installed with version >= `0.28.0`.
|
||||
Installation instructions can be found here: https://yarnpkg.com/en/docs/install.
|
||||
|
||||
### Setup
|
||||
@@ -114,12 +114,25 @@ To run tests for a specific package in [packages](https://github.com/babel/babel
|
||||
$ TEST_ONLY=babel-cli make test
|
||||
```
|
||||
|
||||
`TEST_ONLY` will also match substrings of the package name:
|
||||
|
||||
```sh
|
||||
# Run tests for the babel-plugin-transform-es2015-classes package.
|
||||
$ TEST_ONLY=es2015-class make test
|
||||
```
|
||||
|
||||
Use the `TEST_GREP` variable to run a subset of tests by name:
|
||||
|
||||
```sh
|
||||
$ TEST_GREP=transformation make test
|
||||
```
|
||||
|
||||
Substitute spaces for hyphens and forward slashes when targeting specific test names:
|
||||
|
||||
```sh
|
||||
$ TEST_GREP="arrow functions destructuring parameters" make test
|
||||
```
|
||||
|
||||
To enable the Node.js debugger added in v6.3.0, set the `TEST_DEBUG` environment variable:
|
||||
|
||||
```sh
|
||||
@@ -138,15 +151,15 @@ $ ./scripts/test-cov.sh
|
||||
|
||||
#### Troubleshooting Tests
|
||||
|
||||
In case you're not able to reproduce an error on CI locally, it may be due to
|
||||
In case you're not able to reproduce an error on CI locally, it may be due to
|
||||
|
||||
- Node Version: Travis CI runs the tests against all major node versions. If your tests use JavaScript features unsupported by lower versions of node, then use [minNodeVersion option](#writing-tests) in options.json.
|
||||
- Timeout: Check the CI log and if the only errors are timeout errors and you are sure that it's not related to the changes you made, ask someone in the slack channel to trigger rebuild on the CI build and it might be resolved
|
||||
|
||||
|
||||
In case you're locally getting errors which are not on the CI, it may be due to
|
||||
|
||||
- Updates in Dependencies: Make sure you run `make bootstrap` before you run `make build` or `make watch` before you run the tests.
|
||||
|
||||
|
||||
### Writing tests
|
||||
|
||||
Most packages in [`/packages`](https://github.com/babel/babel/tree/master/packages) have a `test` folder, however some tests might be in other packages or in [`/packages/babel-core`](https://github.com/babel/babel/tree/master/packages/babel-core/test/fixtures).
|
||||
@@ -261,7 +274,7 @@ To start the debugging in Chrome DevTools, open the given URL.
|
||||
The debugger starts at the first executed line of code, which is Mocha's first line by default.
|
||||
Click _Resume script execution_ <img src="https://i.imgur.com/TmYBn9d.png" alt="Resume script execution button." width="16"> to jump to the set breakpoint.
|
||||
Note that the code shown in Chrome DevTools is compiled code and therefore differs.
|
||||
|
||||
|
||||
## Internals
|
||||
- AST spec ([babylon/ast/spec.md](https://github.com/babel/babylon/blob/master/ast/spec.md))
|
||||
- Versioning ([doc/design/versioning.md](https://github.com/babel/babel/blob/master/doc/design/versioning.md)
|
||||
|
||||
13
Makefile
13
Makefile
@@ -8,7 +8,14 @@ export FORCE_COLOR = true
|
||||
.PHONY: build build-dist watch lint fix clean test-clean test-only test test-ci publish bootstrap
|
||||
|
||||
build: clean
|
||||
rm -rf packages/*/lib
|
||||
./node_modules/.bin/gulp build
|
||||
ifneq ($(BABEL_ENV), "cov")
|
||||
make build-standalone
|
||||
endif
|
||||
|
||||
build-standalone:
|
||||
./node_modules/.bin/gulp build-babel-standalone --cwd=packages/babel-standalone/
|
||||
|
||||
build-dist: build
|
||||
cd packages/babel-polyfill; \
|
||||
@@ -22,13 +29,13 @@ watch: clean
|
||||
BABEL_ENV=development ./node_modules/.bin/gulp watch
|
||||
|
||||
lint:
|
||||
./node_modules/.bin/eslint scripts packages *.js --format=codeframe
|
||||
./node_modules/.bin/eslint scripts packages *.js --format=codeframe --rulesdir="./eslint_rules"
|
||||
|
||||
flow:
|
||||
./node_modules/.bin/flow check
|
||||
./node_modules/.bin/flow check --strip-root
|
||||
|
||||
fix:
|
||||
./node_modules/.bin/eslint scripts packages *.js --format=codeframe --fix
|
||||
./node_modules/.bin/eslint scripts packages *.js --format=codeframe --fix --rulesdir="./eslint_rules"
|
||||
|
||||
clean: test-clean
|
||||
rm -rf packages/babel-polyfill/browser*
|
||||
|
||||
@@ -77,7 +77,7 @@ https://phabricator.babeljs.io/T2168 mostly corresponds to https://github.com/ba
|
||||
|
||||
## Want to report an issue with [babeljs.io](https://babeljs.io) (the website)?
|
||||
|
||||
For documentation and website issues please visit the [babel/babel.github.io](https://github.com/babel/babel.github.io) repo.
|
||||
For documentation and website issues please visit the [babel/website](https://github.com/babel/website) repo.
|
||||
|
||||
## Want to contribute to Babel?
|
||||
|
||||
@@ -86,6 +86,7 @@ Check out our [CONTRIBUTING.md](https://github.com/babel/babel/blob/master/CONTR
|
||||
You can also start by checking out the issues with the [help-wanted](https://github.com/babel/babel/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) label.
|
||||
|
||||
Our discussions/notes/roadmap: [babel/notes](https://github.com/babel/notes)
|
||||
Our progress on TC39 proposals: [babel/proposals](https://github.com/babel/proposals)
|
||||
|
||||
## Packages
|
||||
|
||||
|
||||
16
circle.yml
16
circle.yml
@@ -1,11 +1,17 @@
|
||||
general:
|
||||
artifacts:
|
||||
- "packages/babel-standalone/babel.js"
|
||||
- "packages/babel-standalone/babel.min.js"
|
||||
|
||||
machine:
|
||||
node:
|
||||
version:
|
||||
6
|
||||
8
|
||||
|
||||
dependencies:
|
||||
pre:
|
||||
- curl -o- -L https://yarnpkg.com/install.sh | bash
|
||||
# Version number can be removed once 0.28.x or higher is released as stable
|
||||
- curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version 0.28.4
|
||||
cache_directories:
|
||||
- ~/.yarn-cache
|
||||
override:
|
||||
@@ -14,3 +20,9 @@ dependencies:
|
||||
test:
|
||||
override:
|
||||
- make test-ci-coverage
|
||||
# Builds babel-standalone with the regular Babel config
|
||||
- make build
|
||||
# test-ci-coverage doesn't test babel-standalone, as trying to gather coverage
|
||||
# data for a JS file that's several megabytes large is bound to fail. Here,
|
||||
# we just run the babel-standalone test separately.
|
||||
- ./node_modules/mocha/bin/_mocha packages/babel-standalone/test/ --opts test/mocha.opts
|
||||
|
||||
46
eslint_rules/no-undefined-identifier.js
Normal file
46
eslint_rules/no-undefined-identifier.js
Normal file
@@ -0,0 +1,46 @@
|
||||
"use strict";
|
||||
|
||||
function argumentsIsUndefinedString(argumentsArray) {
|
||||
return (
|
||||
argumentsArray.length === 1 &&
|
||||
argumentsArray[0].type === "Literal" &&
|
||||
argumentsArray[0].value === "undefined"
|
||||
);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
meta: {
|
||||
schema: [],
|
||||
},
|
||||
create: function(context) {
|
||||
if (context.getFilename().indexOf("packages/babel-plugin-") === -1) {
|
||||
return {};
|
||||
}
|
||||
|
||||
return {
|
||||
CallExpression: function(node) {
|
||||
const callee = node.callee;
|
||||
|
||||
if (
|
||||
callee.type === "MemberExpression" &&
|
||||
argumentsIsUndefinedString(node.arguments)
|
||||
) {
|
||||
const object = callee.object,
|
||||
property = callee.property;
|
||||
|
||||
if (
|
||||
object.type === "Identifier" &&
|
||||
object.name === "t" &&
|
||||
property.type === "Identifier" &&
|
||||
property.name === "identifier"
|
||||
) {
|
||||
context.report(
|
||||
node,
|
||||
"Use path.scope.buildUndefinedNode() to create an undefined identifier directly."
|
||||
);
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
},
|
||||
};
|
||||
16
lerna.json
16
lerna.json
@@ -1,16 +1,16 @@
|
||||
{
|
||||
"lerna": "2.0.0-rc.4",
|
||||
"version": "7.0.0-alpha.16",
|
||||
"version": "7.0.0-beta.0",
|
||||
"changelog": {
|
||||
"repo": "babel/babel",
|
||||
"labels": {
|
||||
"tag: spec compliancy": ":eyeglasses: Spec Compliancy",
|
||||
"tag: breaking change": ":boom: Breaking Change",
|
||||
"tag: new feature": ":rocket: New Feature",
|
||||
"tag: bug fix": ":bug: Bug Fix",
|
||||
"tag: polish": ":nail_care: Polish",
|
||||
"tag: documentation": ":memo: Documentation",
|
||||
"tag: internal": ":house: Internal"
|
||||
"Tag: Spec Compliancy": ":eyeglasses: Spec Compliancy",
|
||||
"Tag: Breaking Change": ":boom: Breaking Change",
|
||||
"Tag: New Feature": ":rocket: New Feature",
|
||||
"Tag: Bug Fix": ":bug: Bug Fix",
|
||||
"Tag: Polish": ":nail_care: Polish",
|
||||
"Tag: Docs": ":memo: Documentation",
|
||||
"Tag: Internal": ":house: Internal"
|
||||
}
|
||||
},
|
||||
"cacheDir": ".changelog",
|
||||
|
||||
790
lib/types.js
790
lib/types.js
File diff suppressed because it is too large
Load Diff
42
package.json
42
package.json
@@ -11,39 +11,40 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"async": "^1.5.0",
|
||||
"babel-cli": "7.0.0-alpha.15",
|
||||
"babel-core": "7.0.0-alpha.15",
|
||||
"babel-cli": "7.0.0-alpha.18",
|
||||
"babel-core": "7.0.0-alpha.18",
|
||||
"babel-eslint": "8.0.0-alpha.15",
|
||||
"babel-plugin-istanbul": "^4.1.4",
|
||||
"babel-preset-env": "2.0.0-alpha.15",
|
||||
"babel-preset-flow": "7.0.0-alpha.15",
|
||||
"babel-preset-stage-0": "7.0.0-alpha.15",
|
||||
"babel-register": "7.0.0-alpha.15",
|
||||
"babel-preset-env": "2.0.0-alpha.18",
|
||||
"babel-preset-flow": "7.0.0-alpha.18",
|
||||
"babel-preset-stage-0": "7.0.0-alpha.18",
|
||||
"babel-register": "7.0.0-alpha.18",
|
||||
"babylon": "7.0.0-beta.22",
|
||||
"browserify": "^13.1.1",
|
||||
"bundle-collapser": "^1.2.1",
|
||||
"chai": "^4.1.0",
|
||||
"chalk": "^2.0.0",
|
||||
"derequire": "^2.0.2",
|
||||
"eslint": "^3.14.1",
|
||||
"eslint-config-babel": "^7.0.1",
|
||||
"eslint": "^4.5.0",
|
||||
"eslint-config-babel": "^7.0.2",
|
||||
"eslint-plugin-flowtype": "^2.20.0",
|
||||
"eslint-plugin-prettier": "^2.1.2",
|
||||
"flow-bin": "^0.41.0",
|
||||
"eslint-plugin-prettier": "^2.2.0",
|
||||
"flow-bin": "^0.53.1",
|
||||
"gulp": "^3.9.0",
|
||||
"gulp-babel": "babel/gulp-babel#b7-alpha",
|
||||
"gulp-babel": "^7.0.0",
|
||||
"gulp-newer": "^1.0.0",
|
||||
"gulp-plumber": "^1.0.1",
|
||||
"gulp-util": "^3.0.7",
|
||||
"gulp-watch": "^4.3.5",
|
||||
"husky": "^0.13.2",
|
||||
"lerna": "2.0.0-rc.4",
|
||||
"lerna-changelog": "^0.2.0",
|
||||
"lint-staged": "^3.6.1",
|
||||
"husky": "^0.14.3",
|
||||
"lerna": "2.0.0",
|
||||
"lerna-changelog": "^0.5.0",
|
||||
"lint-staged": "^4.0.4",
|
||||
"lodash": "^4.2.0",
|
||||
"mocha": "^3.0.0",
|
||||
"nyc": "^11.0.3",
|
||||
"output-file-sync": "^2.0.0",
|
||||
"prettier": "^1.5.0",
|
||||
"prettier": "^1.6.1",
|
||||
"rimraf": "^2.4.3",
|
||||
"semver": "^5.0.0",
|
||||
"through2": "^2.0.0",
|
||||
@@ -51,21 +52,22 @@
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 4.x <= 8.x",
|
||||
"npm": ">= 2.x <= 5.x"
|
||||
"npm": ">= 2.x <= 5.x",
|
||||
"yarn": ">=0.27.5 || >=1.0.0-20170811"
|
||||
},
|
||||
"nyc": {
|
||||
"all": true,
|
||||
"exclude": [
|
||||
"scripts/*.js",
|
||||
"packages/*/test/**"
|
||||
"packages/*/test/**",
|
||||
"packages/babel-standalone/**"
|
||||
],
|
||||
"sourceMap": false,
|
||||
"instrument": false
|
||||
},
|
||||
"lint-staged": {
|
||||
"*.js": [
|
||||
"eslint --format=codeframe --fix",
|
||||
"git add"
|
||||
"eslint --format=codeframe --rulesdir='./eslint_rules'"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{
|
||||
"rules": {
|
||||
"prettier/prettier": ["error", { "trailingComma": "all" }]
|
||||
"prettier/prettier": ["error", { "trailingComma": "all" }],
|
||||
"no-undefined-identifier": 2
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "babel-cli",
|
||||
"version": "7.0.0-alpha.16",
|
||||
"version": "7.0.0-beta.0",
|
||||
"description": "Babel command line.",
|
||||
"author": "Sebastian McKenzie <sebmck@gmail.com>",
|
||||
"homepage": "https://babeljs.io/",
|
||||
@@ -16,9 +16,9 @@
|
||||
"compiler"
|
||||
],
|
||||
"dependencies": {
|
||||
"babel-core": "7.0.0-alpha.16",
|
||||
"babel-polyfill": "7.0.0-alpha.16",
|
||||
"babel-register": "7.0.0-alpha.16",
|
||||
"babel-core": "7.0.0-beta.0",
|
||||
"babel-polyfill": "7.0.0-beta.0",
|
||||
"babel-register": "7.0.0-beta.0",
|
||||
"commander": "^2.8.1",
|
||||
"convert-source-map": "^1.1.0",
|
||||
"fs-readdir-recursive": "^1.0.0",
|
||||
@@ -33,7 +33,7 @@
|
||||
"chokidar": "^1.6.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"babel-helper-fixtures": "7.0.0-alpha.16"
|
||||
"babel-helper-fixtures": "7.0.0-beta.0"
|
||||
},
|
||||
"bin": {
|
||||
"babel-doctor": "./bin/babel-doctor.js",
|
||||
|
||||
@@ -54,6 +54,10 @@ getV8Flags(function(err, v8Flags) {
|
||||
args.unshift("--expose-gc");
|
||||
break;
|
||||
|
||||
case "--expose-http2":
|
||||
args.unshift("--expose-http2");
|
||||
break;
|
||||
|
||||
case "--nolazy":
|
||||
args.unshift(flag);
|
||||
break;
|
||||
|
||||
@@ -7,15 +7,15 @@ import fs from "fs";
|
||||
import * as util from "./util";
|
||||
|
||||
export default function(commander, filenames, opts) {
|
||||
function write(src, relative) {
|
||||
function write(src, relative, base) {
|
||||
if (!util.isCompilableExtension(relative, commander.extensions)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// remove extension and then append back on .js
|
||||
relative = relative.replace(/\.(\w*?)$/, "") + ".js";
|
||||
relative = util.adjustRelative(relative, commander.keepFileExtension);
|
||||
|
||||
const dest = path.join(commander.outDir, relative);
|
||||
const dest = getDest(commander, relative, base);
|
||||
|
||||
const data = util.compile(
|
||||
src,
|
||||
@@ -45,11 +45,16 @@ export default function(commander, filenames, opts) {
|
||||
return true;
|
||||
}
|
||||
|
||||
function handleFile(src, filename) {
|
||||
const didWrite = write(src, filename);
|
||||
function getDest(commander, filename, base) {
|
||||
if (commander.relative) return path.join(base, commander.outDir, filename);
|
||||
return path.join(commander.outDir, filename);
|
||||
}
|
||||
|
||||
function handleFile(src, filename, base) {
|
||||
const didWrite = write(src, filename, base);
|
||||
|
||||
if (!didWrite && commander.copyFiles) {
|
||||
const dest = path.join(commander.outDir, filename);
|
||||
const dest = getDest(commander, filename, base);
|
||||
outputFileSync(dest, fs.readFileSync(src));
|
||||
util.chmod(src, dest);
|
||||
}
|
||||
@@ -63,12 +68,15 @@ export default function(commander, filenames, opts) {
|
||||
if (stat.isDirectory(filename)) {
|
||||
const dirname = filename;
|
||||
|
||||
if (commander.deleteDirOnStart) {
|
||||
util.deleteDir(commander.outDir);
|
||||
}
|
||||
util.readdir(dirname).forEach(function(filename) {
|
||||
const src = path.join(dirname, filename);
|
||||
handleFile(src, filename);
|
||||
handleFile(src, filename, dirname);
|
||||
});
|
||||
} else {
|
||||
write(filename, filename);
|
||||
write(filename, path.basename(filename), path.dirname(filename));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -48,6 +48,7 @@ commander.option(
|
||||
"comma-separated list of plugin names",
|
||||
collect,
|
||||
);
|
||||
commander.option("--config-file [path]", "Path a to .babelrc file to use");
|
||||
|
||||
// Basic file input configuration.
|
||||
commander.option("--source-type [script|module]", "");
|
||||
@@ -128,6 +129,10 @@ commander.option(
|
||||
"List of extensions to compile when a directory has been input [.es6,.js,.es,.jsx,.mjs]",
|
||||
collect,
|
||||
);
|
||||
commander.option(
|
||||
"--keep-file-extension",
|
||||
"Preserve the file extensions of the input files",
|
||||
);
|
||||
commander.option("-w, --watch", "Recompile files on changes");
|
||||
commander.option(
|
||||
"--skip-initial-build",
|
||||
@@ -141,11 +146,19 @@ commander.option(
|
||||
"-d, --out-dir [out]",
|
||||
"Compile an input directory of modules into an output directory",
|
||||
);
|
||||
commander.option(
|
||||
"--relative",
|
||||
"Compile into an output directory relative to input directory or file. Requires --out-dir [out]",
|
||||
);
|
||||
commander.option(
|
||||
"-D, --copy-files",
|
||||
"When compiling a directory copy over non-compilable files",
|
||||
);
|
||||
commander.option("-q, --quiet", "Don't log anything");
|
||||
commander.option(
|
||||
"--delete-dir-on-start",
|
||||
"Delete's the out directory before compilation",
|
||||
);
|
||||
/* eslint-enable max-len */
|
||||
|
||||
commander.version(pkg.version + " (babel-core " + version + ")");
|
||||
@@ -178,6 +191,10 @@ if (commander.outFile && commander.outDir) {
|
||||
errors.push("cannot have --out-file and --out-dir");
|
||||
}
|
||||
|
||||
if (commander.relative && !commander.outDir) {
|
||||
errors.push("output directory required for --relative");
|
||||
}
|
||||
|
||||
if (commander.watch) {
|
||||
if (!commander.outFile && !commander.outDir) {
|
||||
errors.push("--watch requires --out-file or --out-dir");
|
||||
@@ -191,6 +208,9 @@ if (commander.watch) {
|
||||
if (commander.skipInitialBuild && !commander.watch) {
|
||||
errors.push("--skip-initial-build requires --watch");
|
||||
}
|
||||
if (commander.deleteDirOnStart && !commander.outDir) {
|
||||
errors.push("--delete-dir-on-start requires --out-dir");
|
||||
}
|
||||
|
||||
if (errors.length) {
|
||||
console.error(errors.join(". "));
|
||||
@@ -200,6 +220,10 @@ if (errors.length) {
|
||||
//
|
||||
|
||||
const opts = commander.opts();
|
||||
//the configFile CLI option maps to the extends option in the node API
|
||||
if (opts.configFile) {
|
||||
opts.extends = opts.configFile;
|
||||
}
|
||||
|
||||
// Delete options that are specific to babel-cli and shouldn't be passed to babel-core.
|
||||
delete opts.version;
|
||||
@@ -210,6 +234,9 @@ delete opts.outFile;
|
||||
delete opts.outDir;
|
||||
delete opts.copyFiles;
|
||||
delete opts.quiet;
|
||||
delete opts.configFile;
|
||||
delete opts.deleteDirOnStart;
|
||||
delete opts.keepFileExtension;
|
||||
|
||||
// Commander will default the "--no-" arguments to true, but we want to leave them undefined so that
|
||||
// babel-core can handle the default-assignment logic on its own.
|
||||
|
||||
@@ -58,6 +58,22 @@ export function compile(filename, opts) {
|
||||
}
|
||||
}
|
||||
|
||||
export function deleteDir(path) {
|
||||
if (fs.existsSync(path)) {
|
||||
fs.readdirSync(path).forEach(function(file) {
|
||||
const curPath = path + "/" + file;
|
||||
if (fs.lstatSync(curPath).isDirectory()) {
|
||||
// recurse
|
||||
deleteDir(curPath);
|
||||
} else {
|
||||
// delete file
|
||||
fs.unlinkSync(curPath);
|
||||
}
|
||||
});
|
||||
fs.rmdirSync(path);
|
||||
}
|
||||
}
|
||||
|
||||
function toErrorStack(err) {
|
||||
if (err._babel && err instanceof SyntaxError) {
|
||||
return `${err.name}: ${err.message}\n${err.codeFrame}`;
|
||||
@@ -82,3 +98,10 @@ export function requireChokidar() {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
export function adjustRelative(relative, keepFileExtension) {
|
||||
if (keepFileExtension) {
|
||||
return relative;
|
||||
}
|
||||
return relative.replace(/\.(\w*?)$/, "") + ".js";
|
||||
}
|
||||
|
||||
3
packages/babel-cli/test/.othername_babelrc
Normal file
3
packages/babel-cli/test/.othername_babelrc
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"comments": false
|
||||
}
|
||||
3
packages/babel-cli/test/fixtures/babel/--config-file babelrc nocomment/options.json
vendored
Normal file
3
packages/babel-cli/test/fixtures/babel/--config-file babelrc nocomment/options.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"args": ["--config-file", "../.othername_babelrc"]
|
||||
}
|
||||
7
packages/babel-cli/test/fixtures/babel/--config-file babelrc nocomment/stdin.txt
vendored
Normal file
7
packages/babel-cli/test/fixtures/babel/--config-file babelrc nocomment/stdin.txt
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
Test comment
|
||||
*/
|
||||
|
||||
arr.map(x => x * MULTIPLIER);
|
||||
|
||||
// END OF FILE
|
||||
5
packages/babel-cli/test/fixtures/babel/--config-file babelrc nocomment/stdout.txt
vendored
Normal file
5
packages/babel-cli/test/fixtures/babel/--config-file babelrc nocomment/stdout.txt
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
"use strict";
|
||||
|
||||
arr.map(function (x) {
|
||||
return x * MULTIPLIER;
|
||||
});
|
||||
1
packages/babel-cli/test/fixtures/babel/dir --out-dir --copy-files/in-files/src/bar.json
vendored
Normal file
1
packages/babel-cli/test/fixtures/babel/dir --out-dir --copy-files/in-files/src/bar.json
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
1
packages/babel-cli/test/fixtures/babel/dir --out-dir --copy-files/in-files/src/foo.js
vendored
Normal file
1
packages/babel-cli/test/fixtures/babel/dir --out-dir --copy-files/in-files/src/foo.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
arr.map(x => x * MULTIPLIER);
|
||||
3
packages/babel-cli/test/fixtures/babel/dir --out-dir --copy-files/options.json
vendored
Normal file
3
packages/babel-cli/test/fixtures/babel/dir --out-dir --copy-files/options.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"args": ["src", "--out-dir", "lib", "--copy-files"]
|
||||
}
|
||||
1
packages/babel-cli/test/fixtures/babel/dir --out-dir --copy-files/out-files/lib/bar.json
vendored
Normal file
1
packages/babel-cli/test/fixtures/babel/dir --out-dir --copy-files/out-files/lib/bar.json
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
5
packages/babel-cli/test/fixtures/babel/dir --out-dir --copy-files/out-files/lib/foo.js
vendored
Normal file
5
packages/babel-cli/test/fixtures/babel/dir --out-dir --copy-files/out-files/lib/foo.js
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
"use strict";
|
||||
|
||||
arr.map(function (x) {
|
||||
return x * MULTIPLIER;
|
||||
});
|
||||
1
packages/babel-cli/test/fixtures/babel/dir --out-dir --copy-files/stdout.txt
vendored
Normal file
1
packages/babel-cli/test/fixtures/babel/dir --out-dir --copy-files/stdout.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
src/foo.js -> lib/foo.js
|
||||
@@ -0,0 +1 @@
|
||||
arr.map(x => x / DIVIDER);
|
||||
@@ -0,0 +1 @@
|
||||
arr.map(x => x * MULTIPLIER);
|
||||
3
packages/babel-cli/test/fixtures/babel/dir --out-dir --keep-file-extension/options.json
vendored
Normal file
3
packages/babel-cli/test/fixtures/babel/dir --out-dir --keep-file-extension/options.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"args": ["src", "--out-dir", "lib", "--keep-file-extension"]
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
"use strict";
|
||||
|
||||
arr.map(function (x) {
|
||||
return x / DIVIDER;
|
||||
});
|
||||
@@ -0,0 +1,5 @@
|
||||
"use strict";
|
||||
|
||||
arr.map(function (x) {
|
||||
return x * MULTIPLIER;
|
||||
});
|
||||
2
packages/babel-cli/test/fixtures/babel/dir --out-dir --keep-file-extension/stdout.txt
vendored
Normal file
2
packages/babel-cli/test/fixtures/babel/dir --out-dir --keep-file-extension/stdout.txt
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
src/bar.mjs -> lib/bar.mjs
|
||||
src/foo.js -> lib/foo.js
|
||||
@@ -0,0 +1,3 @@
|
||||
class Test1 {
|
||||
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
arr.map(x => x * MULTIPLIER);
|
||||
@@ -0,0 +1,3 @@
|
||||
class Test2 {
|
||||
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
arr.map(x => x / DIVIDER);
|
||||
3
packages/babel-cli/test/fixtures/babel/dir --out-dir --relative/options.json
vendored
Normal file
3
packages/babel-cli/test/fixtures/babel/dir --out-dir --relative/options.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"args": ["**/src", "--out-dir", "../lib", "--relative"]
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
"use strict";
|
||||
|
||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||||
|
||||
var Test1 = function Test1() {
|
||||
_classCallCheck(this, Test1);
|
||||
};
|
||||
@@ -0,0 +1,5 @@
|
||||
"use strict";
|
||||
|
||||
arr.map(function (x) {
|
||||
return x * MULTIPLIER;
|
||||
});
|
||||
@@ -0,0 +1,7 @@
|
||||
"use strict";
|
||||
|
||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||||
|
||||
var Test2 = function Test2() {
|
||||
_classCallCheck(this, Test2);
|
||||
};
|
||||
@@ -0,0 +1,5 @@
|
||||
"use strict";
|
||||
|
||||
arr.map(function (x) {
|
||||
return x / DIVIDER;
|
||||
});
|
||||
4
packages/babel-cli/test/fixtures/babel/dir --out-dir --relative/stdout.txt
vendored
Normal file
4
packages/babel-cli/test/fixtures/babel/dir --out-dir --relative/stdout.txt
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
package1/src/bar/bar1.js -> package1/lib/bar/bar1.js
|
||||
package1/src/foo1.js -> package1/lib/foo1.js
|
||||
package2/src/bar/bar2.js -> package2/lib/bar/bar2.js
|
||||
package2/src/foo2.js -> package2/lib/foo2.js
|
||||
4
packages/babel-cli/test/fixtures/babel/error --out-dir --out-file/options.json
vendored
Normal file
4
packages/babel-cli/test/fixtures/babel/error --out-dir --out-file/options.json
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"args": ["--out-dir", "lib"],
|
||||
"stderrContains": true
|
||||
}
|
||||
1
packages/babel-cli/test/fixtures/babel/error --out-dir --out-file/stderr.txt
vendored
Normal file
1
packages/babel-cli/test/fixtures/babel/error --out-dir --out-file/stderr.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
filenames required for --out-dir
|
||||
4
packages/babel-cli/test/fixtures/babel/error --out-dir/options.json
vendored
Normal file
4
packages/babel-cli/test/fixtures/babel/error --out-dir/options.json
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"args": ["--out-dir", "lib", "--out-file", "foo.js"],
|
||||
"stderrContains": true
|
||||
}
|
||||
1
packages/babel-cli/test/fixtures/babel/error --out-dir/stderr.txt
vendored
Normal file
1
packages/babel-cli/test/fixtures/babel/error --out-dir/stderr.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
cannot have --out-file and --out-dir
|
||||
4
packages/babel-cli/test/fixtures/babel/error --relative/options.json
vendored
Normal file
4
packages/babel-cli/test/fixtures/babel/error --relative/options.json
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"args": ["--relative"],
|
||||
"stderrContains": true
|
||||
}
|
||||
1
packages/babel-cli/test/fixtures/babel/error --relative/stderr.txt
vendored
Normal file
1
packages/babel-cli/test/fixtures/babel/error --relative/stderr.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
output directory required for --relative
|
||||
4
packages/babel-cli/test/fixtures/babel/error --skip-initial-build/options.json
vendored
Normal file
4
packages/babel-cli/test/fixtures/babel/error --skip-initial-build/options.json
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"args": ["--skip-initial-build"],
|
||||
"stderrContains": true
|
||||
}
|
||||
1
packages/babel-cli/test/fixtures/babel/error --skip-initial-build/stderr.txt
vendored
Normal file
1
packages/babel-cli/test/fixtures/babel/error --skip-initial-build/stderr.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
--skip-initial-build requires --watch
|
||||
4
packages/babel-cli/test/fixtures/babel/error --watch no filename/options.json
vendored
Normal file
4
packages/babel-cli/test/fixtures/babel/error --watch no filename/options.json
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"args": ["--watch"],
|
||||
"stderrContains": true
|
||||
}
|
||||
1
packages/babel-cli/test/fixtures/babel/error --watch no filename/stderr.txt
vendored
Normal file
1
packages/babel-cli/test/fixtures/babel/error --watch no filename/stderr.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
--watch requires filenames
|
||||
4
packages/babel-cli/test/fixtures/babel/error --watch/options.json
vendored
Normal file
4
packages/babel-cli/test/fixtures/babel/error --watch/options.json
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"args": ["--watch"],
|
||||
"stderrContains": true
|
||||
}
|
||||
1
packages/babel-cli/test/fixtures/babel/error --watch/stderr.txt
vendored
Normal file
1
packages/babel-cli/test/fixtures/babel/error --watch/stderr.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
--watch requires --out-file or --out-dir
|
||||
4
packages/babel-cli/test/fixtures/babel/error wrong filename/options.json
vendored
Normal file
4
packages/babel-cli/test/fixtures/babel/error wrong filename/options.json
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"args": ["foo.json"],
|
||||
"stderrContains": true
|
||||
}
|
||||
1
packages/babel-cli/test/fixtures/babel/error wrong filename/stderr.txt
vendored
Normal file
1
packages/babel-cli/test/fixtures/babel/error wrong filename/stderr.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
foo.json doesn't exist
|
||||
1
packages/babel-cli/test/fixtures/babel/filename --out-dir --relative/in-files/src/foo.js
vendored
Normal file
1
packages/babel-cli/test/fixtures/babel/filename --out-dir --relative/in-files/src/foo.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
arr.map(x => x * MULTIPLIER);
|
||||
3
packages/babel-cli/test/fixtures/babel/filename --out-dir --relative/options.json
vendored
Normal file
3
packages/babel-cli/test/fixtures/babel/filename --out-dir --relative/options.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"args": ["src/foo.js", "--out-dir", "../lib", "--relative"]
|
||||
}
|
||||
5
packages/babel-cli/test/fixtures/babel/filename --out-dir --relative/out-files/lib/foo.js
vendored
Normal file
5
packages/babel-cli/test/fixtures/babel/filename --out-dir --relative/out-files/lib/foo.js
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
"use strict";
|
||||
|
||||
arr.map(function (x) {
|
||||
return x * MULTIPLIER;
|
||||
});
|
||||
1
packages/babel-cli/test/fixtures/babel/filename --out-dir --relative/stdout.txt
vendored
Normal file
1
packages/babel-cli/test/fixtures/babel/filename --out-dir --relative/stdout.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
src/foo.js -> lib/foo.js
|
||||
1
packages/babel-cli/test/fixtures/babel/filename --out-dir/in-files/src/foo.js
vendored
Normal file
1
packages/babel-cli/test/fixtures/babel/filename --out-dir/in-files/src/foo.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
arr.map(x => x * MULTIPLIER);
|
||||
3
packages/babel-cli/test/fixtures/babel/filename --out-dir/options.json
vendored
Normal file
3
packages/babel-cli/test/fixtures/babel/filename --out-dir/options.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"args": ["src/foo.js", "--out-dir", "lib"]
|
||||
}
|
||||
5
packages/babel-cli/test/fixtures/babel/filename --out-dir/out-files/lib/foo.js
vendored
Normal file
5
packages/babel-cli/test/fixtures/babel/filename --out-dir/out-files/lib/foo.js
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
"use strict";
|
||||
|
||||
arr.map(function (x) {
|
||||
return x * MULTIPLIER;
|
||||
});
|
||||
1
packages/babel-cli/test/fixtures/babel/filename --out-dir/stdout.txt
vendored
Normal file
1
packages/babel-cli/test/fixtures/babel/filename --out-dir/stdout.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
src/foo.js -> lib/foo.js
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "babel-code-frame",
|
||||
"version": "7.0.0-alpha.16",
|
||||
"version": "7.0.0-beta.0",
|
||||
"description": "Generate errors that contain a code frame that point to source locations.",
|
||||
"author": "Sebastian McKenzie <sebmck@gmail.com>",
|
||||
"homepage": "https://babeljs.io/",
|
||||
|
||||
@@ -51,7 +51,7 @@ const JSX_TAG = /^[a-z][\w-]*$/i;
|
||||
* RegExp to test for the three types of brackets.
|
||||
*/
|
||||
|
||||
const BRACKET = /^[()\[\]{}]$/;
|
||||
const BRACKET = /^[()[\]{}]$/;
|
||||
|
||||
/**
|
||||
* Get the type of token, specifying punctuator type.
|
||||
@@ -94,7 +94,10 @@ function highlight(defs: Object, text: string) {
|
||||
const type = getTokenType(args);
|
||||
const colorize = defs[type];
|
||||
if (colorize) {
|
||||
return args[0].split(NEWLINE).map(str => colorize(str)).join("\n");
|
||||
return args[0]
|
||||
.split(NEWLINE)
|
||||
.map(str => colorize(str))
|
||||
.join("\n");
|
||||
} else {
|
||||
return args[0];
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "babel-core",
|
||||
"version": "7.0.0-alpha.16",
|
||||
"version": "7.0.0-beta.0",
|
||||
"description": "Babel compiler core.",
|
||||
"author": "Sebastian McKenzie <sebmck@gmail.com>",
|
||||
"homepage": "https://babeljs.io/",
|
||||
@@ -25,16 +25,16 @@
|
||||
"./lib/config/loading/files/index.js": "./lib/config/loading/files/index-browser.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"babel-code-frame": "7.0.0-alpha.16",
|
||||
"babel-generator": "7.0.0-alpha.16",
|
||||
"babel-helpers": "7.0.0-alpha.16",
|
||||
"babel-messages": "7.0.0-alpha.16",
|
||||
"babel-template": "7.0.0-alpha.16",
|
||||
"babel-traverse": "7.0.0-alpha.16",
|
||||
"babel-types": "7.0.0-alpha.16",
|
||||
"babylon": "7.0.0-beta.17",
|
||||
"babel-code-frame": "7.0.0-beta.0",
|
||||
"babel-generator": "7.0.0-beta.0",
|
||||
"babel-helpers": "7.0.0-beta.0",
|
||||
"babel-messages": "7.0.0-beta.0",
|
||||
"babel-template": "7.0.0-beta.0",
|
||||
"babel-traverse": "7.0.0-beta.0",
|
||||
"babel-types": "7.0.0-beta.0",
|
||||
"babylon": "7.0.0-beta.22",
|
||||
"convert-source-map": "^1.1.0",
|
||||
"debug": "^2.1.1",
|
||||
"debug": "^3.0.1",
|
||||
"json5": "^0.5.0",
|
||||
"lodash": "^4.2.0",
|
||||
"micromatch": "^2.3.11",
|
||||
@@ -42,7 +42,7 @@
|
||||
"source-map": "^0.5.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"babel-helper-transform-fixture-test-runner": "7.0.0-alpha.16",
|
||||
"babel-register": "7.0.0-alpha.16"
|
||||
"babel-helper-transform-fixture-test-runner": "7.0.0-beta.0",
|
||||
"babel-register": "7.0.0-beta.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
import { getEnv } from "./helpers/environment";
|
||||
import path from "path";
|
||||
import micromatch from "micromatch";
|
||||
import buildDebug from "debug";
|
||||
|
||||
const debug = buildDebug("babel:config:config-chain");
|
||||
|
||||
import { findConfigs, loadConfig } from "./loading/files";
|
||||
|
||||
@@ -67,7 +70,15 @@ class ConfigChainBuilder {
|
||||
);
|
||||
}
|
||||
|
||||
if (this.matchesPatterns(ignore, dirname)) return true;
|
||||
if (this.matchesPatterns(ignore, dirname)) {
|
||||
debug(
|
||||
"Ignored %o because it matched one of %O from %o",
|
||||
this.filename,
|
||||
ignore,
|
||||
dirname,
|
||||
);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (only) {
|
||||
@@ -77,7 +88,15 @@ class ConfigChainBuilder {
|
||||
);
|
||||
}
|
||||
|
||||
if (!this.matchesPatterns(only, dirname)) return true;
|
||||
if (!this.matchesPatterns(only, dirname)) {
|
||||
debug(
|
||||
"Ignored %o because it failed to match one of %O from %o",
|
||||
this.filename,
|
||||
only,
|
||||
dirname,
|
||||
);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
// @flow
|
||||
|
||||
import buildDebug from "debug";
|
||||
import path from "path";
|
||||
import fs from "fs";
|
||||
import json5 from "json5";
|
||||
@@ -7,6 +8,8 @@ import resolve from "resolve";
|
||||
import { getEnv } from "../../helpers/environment";
|
||||
import { makeStrongCache } from "../../caching";
|
||||
|
||||
const debug = buildDebug("babel:config:loading:files:configuration");
|
||||
|
||||
type ConfigFile = {
|
||||
filepath: string,
|
||||
dirname: string,
|
||||
@@ -31,6 +34,7 @@ export function findConfigs(dirname: string): Array<ConfigFile> {
|
||||
const ignore = readIgnoreConfig(ignoreLoc);
|
||||
|
||||
if (ignore) {
|
||||
debug("Found ignore %o from %o.", ignore.filepath, dirname);
|
||||
confs.push(ignore);
|
||||
foundIgnore = true;
|
||||
}
|
||||
@@ -57,6 +61,7 @@ export function findConfigs(dirname: string): Array<ConfigFile> {
|
||||
}, null);
|
||||
|
||||
if (conf) {
|
||||
debug("Found configuration %o from %o.", conf.filepath, dirname);
|
||||
confs.push(conf);
|
||||
foundConfig = true;
|
||||
}
|
||||
@@ -80,6 +85,7 @@ export function loadConfig(name: string, dirname: string): ConfigFile {
|
||||
throw new Error(`Config file ${filepath} contains no configuration data`);
|
||||
}
|
||||
|
||||
debug("Loaded config %o from $o.", name, dirname);
|
||||
return conf;
|
||||
}
|
||||
|
||||
@@ -93,14 +99,31 @@ function readConfig(filepath) {
|
||||
: readConfigFile(filepath);
|
||||
}
|
||||
|
||||
const LOADING_CONFIGS = new Set();
|
||||
const readConfigJS = makeStrongCache((filepath, cache) => {
|
||||
if (!fs.existsSync(filepath)) {
|
||||
cache.forever();
|
||||
return null;
|
||||
}
|
||||
|
||||
// The `require()` call below can make this code reentrant if a require hook like babel-register has been
|
||||
// loaded into the system. That would cause Babel to attempt to compile the `.babelrc.js` file as it loads
|
||||
// below. To cover this case, we auto-ignore re-entrant config processing.
|
||||
if (LOADING_CONFIGS.has(filepath)) {
|
||||
cache.never();
|
||||
|
||||
debug("Auto-ignoring usage of config %o.", filepath);
|
||||
return {
|
||||
filepath,
|
||||
dirname: path.dirname(filepath),
|
||||
options: {},
|
||||
};
|
||||
}
|
||||
|
||||
let options;
|
||||
try {
|
||||
LOADING_CONFIGS.add(filepath);
|
||||
|
||||
// $FlowIssue
|
||||
const configModule = (require(filepath): mixed);
|
||||
options =
|
||||
@@ -110,6 +133,8 @@ const readConfigJS = makeStrongCache((filepath, cache) => {
|
||||
} catch (err) {
|
||||
err.message = `${filepath}: Error while loading config - ${err.message}`;
|
||||
throw err;
|
||||
} finally {
|
||||
LOADING_CONFIGS.delete(filepath);
|
||||
}
|
||||
|
||||
if (typeof options === "function") {
|
||||
|
||||
@@ -4,16 +4,19 @@
|
||||
* This file handles all logic for converting string-based configuration references into loaded objects.
|
||||
*/
|
||||
|
||||
import buildDebug from "debug";
|
||||
import resolve from "resolve";
|
||||
import path from "path";
|
||||
|
||||
const debug = buildDebug("babel:config:loading:files:plugins");
|
||||
|
||||
const EXACT_RE = /^module:/;
|
||||
const BABEL_PLUGIN_PREFIX_RE = /^(?!@|module:|[^/\/]+[/\/]|babel-plugin-)/;
|
||||
const BABEL_PRESET_PREFIX_RE = /^(?!@|module:|[^/\/]+[/\/]|babel-preset-)/;
|
||||
const BABEL_PLUGIN_ORG_RE = /^(@babel[/\/])(?!plugin-|[^/\/]+[/\/])/;
|
||||
const BABEL_PRESET_ORG_RE = /^(@babel[/\/])(?!preset-|[^/\/]+[/\/])/;
|
||||
const OTHER_PLUGIN_ORG_RE = /^(@(?!babel[/\/])[^/\/]+[/\/])(?!babel-plugin-|[^/\/]+[/\/])/;
|
||||
const OTHER_PRESET_ORG_RE = /^(@(?!babel[/\/])[^/\/]+[/\/])(?!babel-preset-|[^/\/]+[/\/])/;
|
||||
const BABEL_PLUGIN_PREFIX_RE = /^(?!@|module:|[^/]+\/|babel-plugin-)/;
|
||||
const BABEL_PRESET_PREFIX_RE = /^(?!@|module:|[^/]+\/|babel-preset-)/;
|
||||
const BABEL_PLUGIN_ORG_RE = /^(@babel\/)(?!plugin-|[^/]+\/)/;
|
||||
const BABEL_PRESET_ORG_RE = /^(@babel\/)(?!preset-|[^/]+\/)/;
|
||||
const OTHER_PLUGIN_ORG_RE = /^(@(?!babel\/)[^/]+\/)(?!babel-plugin-|[^/]+\/)/;
|
||||
const OTHER_PRESET_ORG_RE = /^(@(?!babel\/)[^/]+\/)(?!babel-preset-|[^/]+\/)/;
|
||||
|
||||
export function resolvePlugin(name: string, dirname: string): string | null {
|
||||
return resolveStandardizedName("plugin", name, dirname);
|
||||
@@ -32,10 +35,10 @@ export function loadPlugin(
|
||||
throw new Error(`Plugin ${name} not found relative to ${dirname}`);
|
||||
}
|
||||
|
||||
return {
|
||||
filepath,
|
||||
value: requireModule(filepath),
|
||||
};
|
||||
const value = requireModule("plugin", filepath);
|
||||
debug("Loaded plugin %o from %o.", name, dirname);
|
||||
|
||||
return { filepath, value };
|
||||
}
|
||||
|
||||
export function loadPreset(
|
||||
@@ -47,10 +50,11 @@ export function loadPreset(
|
||||
throw new Error(`Preset ${name} not found relative to ${dirname}`);
|
||||
}
|
||||
|
||||
return {
|
||||
filepath,
|
||||
value: requireModule(filepath),
|
||||
};
|
||||
const value = requireModule("preset", filepath);
|
||||
|
||||
debug("Loaded preset %o from %o.", name, dirname);
|
||||
|
||||
return { filepath, value };
|
||||
}
|
||||
|
||||
export function loadParser(
|
||||
@@ -59,7 +63,7 @@ export function loadParser(
|
||||
): { filepath: string, value: Function } {
|
||||
const filepath = resolve.sync(name, { basedir: dirname });
|
||||
|
||||
const mod = requireModule(filepath);
|
||||
const mod = requireModule("parser", filepath);
|
||||
|
||||
if (!mod) {
|
||||
throw new Error(
|
||||
@@ -71,10 +75,13 @@ export function loadParser(
|
||||
`Parser ${name} relative to ${dirname} does not export a .parse function`,
|
||||
);
|
||||
}
|
||||
const value = mod.parse;
|
||||
|
||||
debug("Loaded parser %o from %o.", name, dirname);
|
||||
|
||||
return {
|
||||
filepath,
|
||||
value: mod.parse,
|
||||
value,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -84,7 +91,7 @@ export function loadGenerator(
|
||||
): { filepath: string, value: Function } {
|
||||
const filepath = resolve.sync(name, { basedir: dirname });
|
||||
|
||||
const mod = requireModule(filepath);
|
||||
const mod = requireModule("generator", filepath);
|
||||
|
||||
if (!mod) {
|
||||
throw new Error(
|
||||
@@ -96,10 +103,13 @@ export function loadGenerator(
|
||||
`Generator ${name} relative to ${dirname} does not export a .print function`,
|
||||
);
|
||||
}
|
||||
const value = mod.print;
|
||||
|
||||
debug("Loaded generator %o from %o.", name, dirname);
|
||||
|
||||
return {
|
||||
filepath,
|
||||
value: mod.print,
|
||||
value,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -185,7 +195,20 @@ function resolveStandardizedName(
|
||||
}
|
||||
}
|
||||
|
||||
function requireModule(name: string): mixed {
|
||||
// $FlowIssue
|
||||
return require(name);
|
||||
const LOADING_MODULES = new Set();
|
||||
function requireModule(type: string, name: string): mixed {
|
||||
if (LOADING_MODULES.has(name)) {
|
||||
throw new Error(
|
||||
// eslint-disable-next-line max-len
|
||||
`Reentrant ${type} detected trying to load "${name}". This module is not ignored and is trying to load itself while compiling itself, leading to a dependency cycle. We recommend adding it to your "ignore" list in your babelrc, or to a .babelignore.`,
|
||||
);
|
||||
}
|
||||
|
||||
try {
|
||||
LOADING_MODULES.add(name);
|
||||
// $FlowIssue
|
||||
return require(name);
|
||||
} finally {
|
||||
LOADING_MODULES.delete(name);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
// @flow
|
||||
|
||||
import * as context from "../index";
|
||||
import Plugin from "./plugin";
|
||||
import * as messages from "babel-messages";
|
||||
@@ -27,6 +25,7 @@ type MergeOptions = {
|
||||
};
|
||||
|
||||
const optionNames = new Set([
|
||||
"relative",
|
||||
"filename",
|
||||
"filenameRelative",
|
||||
"inputSourceMap",
|
||||
|
||||
@@ -4,6 +4,8 @@ import * as messages from "babel-messages";
|
||||
import template from "babel-template";
|
||||
import * as t from "babel-types";
|
||||
|
||||
const keywordHelpers = ["typeof", "extends", "instanceof"];
|
||||
|
||||
const buildUmdWrapper = template(`
|
||||
(function (root, factory) {
|
||||
if (typeof define === "function" && define.amd) {
|
||||
@@ -49,6 +51,44 @@ function buildGlobal(namespace, builder) {
|
||||
return tree;
|
||||
}
|
||||
|
||||
function buildModule(namespace, builder) {
|
||||
const body = [];
|
||||
builder(body);
|
||||
|
||||
const module = body
|
||||
.map(helper => {
|
||||
const originalIdentifier = helper.expression.left.property.name;
|
||||
const isKeywordHelper = keywordHelpers.indexOf(originalIdentifier) !== -1;
|
||||
const helperIndentifier = isKeywordHelper
|
||||
? `_${originalIdentifier}`
|
||||
: originalIdentifier;
|
||||
|
||||
const variableDeclaration = t.variableDeclaration("var", [
|
||||
t.variableDeclarator(
|
||||
t.identifier(helperIndentifier),
|
||||
helper.expression.right,
|
||||
),
|
||||
]);
|
||||
|
||||
return isKeywordHelper
|
||||
? variableDeclaration
|
||||
: t.exportNamedDeclaration(variableDeclaration, []);
|
||||
})
|
||||
.concat(
|
||||
t.exportNamedDeclaration(
|
||||
null,
|
||||
keywordHelpers.map(keywordHelper =>
|
||||
t.exportSpecifier(
|
||||
t.identifier(`_${keywordHelper}`),
|
||||
t.identifier(keywordHelper),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
return t.program(module);
|
||||
}
|
||||
|
||||
function buildUmd(namespace, builder) {
|
||||
const body = [];
|
||||
body.push(
|
||||
@@ -105,7 +145,7 @@ function buildHelpers(body, namespace, whitelist) {
|
||||
}
|
||||
export default function(
|
||||
whitelist?: Array<string>,
|
||||
outputType: "global" | "umd" | "var" = "global",
|
||||
outputType: "global" | "module" | "umd" | "var" = "global",
|
||||
) {
|
||||
const namespace = t.identifier("babelHelpers");
|
||||
|
||||
@@ -117,6 +157,7 @@ export default function(
|
||||
|
||||
const build = {
|
||||
global: buildGlobal,
|
||||
module: buildModule,
|
||||
umd: buildUmd,
|
||||
var: buildVar,
|
||||
}[outputType];
|
||||
|
||||
@@ -180,9 +180,24 @@ export default class File extends Store {
|
||||
|
||||
addImport(
|
||||
source: string,
|
||||
imported: string,
|
||||
imported?: string = "",
|
||||
name?: string = imported,
|
||||
): Object {
|
||||
): Object | null {
|
||||
const prependDeclaration = (
|
||||
specifiers: Array<BabelNodeImportSpecifier>,
|
||||
): void => {
|
||||
const declar = t.importDeclaration(specifiers, t.stringLiteral(source));
|
||||
declar._blockHoist = 3;
|
||||
|
||||
this.path.unshiftContainer("body", declar);
|
||||
};
|
||||
|
||||
// import "module-name";
|
||||
if (!imported) {
|
||||
prependDeclaration([]);
|
||||
return null;
|
||||
}
|
||||
|
||||
const alias = `${source}:${imported}`;
|
||||
let id = this.dynamicImportIds[alias];
|
||||
|
||||
@@ -202,10 +217,7 @@ export default class File extends Store {
|
||||
specifiers.push(t.importSpecifier(id, t.identifier(imported)));
|
||||
}
|
||||
|
||||
const declar = t.importDeclaration(specifiers, t.stringLiteral(source));
|
||||
declar._blockHoist = 3;
|
||||
|
||||
this.path.unshiftContainer("body", declar);
|
||||
prependDeclaration(specifiers);
|
||||
}
|
||||
|
||||
return id;
|
||||
|
||||
30
packages/babel-core/test/fixtures/plugins/file-add-import/exec.js
vendored
Normal file
30
packages/babel-core/test/fixtures/plugins/file-add-import/exec.js
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
var res = transform("", {
|
||||
plugins: [
|
||||
function (b) {
|
||||
return {
|
||||
visitor: {
|
||||
Program: function(path, state) {
|
||||
var file = state.file;
|
||||
file.addImport("import-star", "*", "lib");
|
||||
file.addImport("import-default", "default", "foo");
|
||||
file.addImport("import-alias", "bar", "baz");
|
||||
file.addImport("import-default-alias", "quux");
|
||||
file.addImport("import-empty", "");
|
||||
file.addImport("import-none");
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
var expected = multiline([
|
||||
'import "import-none";',
|
||||
'import "import-empty";',
|
||||
'import { quux as _quux } from "import-default-alias";',
|
||||
'import { bar as _baz } from "import-alias";',
|
||||
'import _foo from "import-default";',
|
||||
'import * as _lib from "import-star";',
|
||||
]);
|
||||
|
||||
assert.equal(res.code, expected);
|
||||
@@ -1,2 +1,2 @@
|
||||
export function foo() {}
|
||||
export function bar() {}
|
||||
export function bar() {}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
var Foo = function (_Bar) {
|
||||
var Foo =
|
||||
/*#__PURE__*/
|
||||
function (_Bar) {
|
||||
babelHelpers.inherits(Foo, _Bar);
|
||||
|
||||
function Foo(options) {
|
||||
@@ -13,4 +15,4 @@ var Foo = function (_Bar) {
|
||||
}
|
||||
|
||||
return Foo;
|
||||
}(Bar);
|
||||
}(Bar);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
function test() {
|
||||
var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "hi";
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,4 +29,4 @@ class Class {
|
||||
})();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,9 +7,13 @@ Object.defineProperty(exports, "__esModule", {
|
||||
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
||||
|
||||
var foo = function () {
|
||||
var _ref2 = _asyncToGenerator(regeneratorRuntime.mark(function _callee3() {
|
||||
var _ref2 = _asyncToGenerator(
|
||||
/*#__PURE__*/
|
||||
regeneratorRuntime.mark(function _callee3() {
|
||||
var bar = function () {
|
||||
var _ref3 = _asyncToGenerator(regeneratorRuntime.mark(function _callee2() {
|
||||
var _ref3 = _asyncToGenerator(
|
||||
/*#__PURE__*/
|
||||
regeneratorRuntime.mark(function _callee2() {
|
||||
var baz;
|
||||
return regeneratorRuntime.wrap(function _callee2$(_context2) {
|
||||
while (1) {
|
||||
@@ -50,7 +54,9 @@ function _asyncToGenerator(fn) { return function () { var _this = this, _argumen
|
||||
|
||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||||
|
||||
var Foo = function () {
|
||||
var Foo =
|
||||
/*#__PURE__*/
|
||||
function () {
|
||||
function Foo() {
|
||||
_classCallCheck(this, Foo);
|
||||
}
|
||||
@@ -58,7 +64,9 @@ var Foo = function () {
|
||||
_createClass(Foo, [{
|
||||
key: "bar",
|
||||
value: function () {
|
||||
var _ref = _asyncToGenerator(regeneratorRuntime.mark(function _callee() {
|
||||
var _ref = _asyncToGenerator(
|
||||
/*#__PURE__*/
|
||||
regeneratorRuntime.mark(function _callee() {
|
||||
var baz;
|
||||
return regeneratorRuntime.wrap(function _callee$(_context) {
|
||||
while (1) {
|
||||
|
||||
@@ -5,4 +5,4 @@ var _fieldName = fieldName;
|
||||
value = _values[_fieldName];
|
||||
rest = babelHelpers.objectWithoutProperties(_values, [_fieldName].map(babelHelpers.toPropertyKey));
|
||||
_values;
|
||||
var error = void 0;
|
||||
var error = void 0;
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
#!/usr/bin/env node
|
||||
foobar();
|
||||
foobar();
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
var Test = function () {
|
||||
var Test =
|
||||
/*#__PURE__*/
|
||||
function () {
|
||||
function Test() {
|
||||
babelHelpers.classCallCheck(this, Test);
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"column": 10
|
||||
},
|
||||
"generated": {
|
||||
"line": 9,
|
||||
"line": 11,
|
||||
"column": 15
|
||||
}
|
||||
}]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "babel-generator",
|
||||
"version": "7.0.0-alpha.16",
|
||||
"version": "7.0.0-beta.0",
|
||||
"description": "Turns an AST into code.",
|
||||
"author": "Sebastian McKenzie <sebmck@gmail.com>",
|
||||
"homepage": "https://babeljs.io/",
|
||||
@@ -11,15 +11,15 @@
|
||||
"lib"
|
||||
],
|
||||
"dependencies": {
|
||||
"babel-messages": "7.0.0-alpha.16",
|
||||
"babel-types": "7.0.0-alpha.16",
|
||||
"babel-messages": "7.0.0-beta.0",
|
||||
"babel-types": "7.0.0-beta.0",
|
||||
"jsesc": "^2.5.1",
|
||||
"lodash": "^4.2.0",
|
||||
"source-map": "^0.5.0",
|
||||
"trim-right": "^1.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"babel-helper-fixtures": "7.0.0-alpha.16",
|
||||
"babylon": "^7.0.0-beta.17"
|
||||
"babel-helper-fixtures": "7.0.0-beta.0",
|
||||
"babylon": "^7.0.0-beta.22"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,18 @@ export function ClassDeclaration(node: Object, parent: Object) {
|
||||
this.printJoin(node.decorators, node);
|
||||
}
|
||||
|
||||
if (node.declare) {
|
||||
// TS
|
||||
this.word("declare");
|
||||
this.space();
|
||||
}
|
||||
|
||||
if (node.abstract) {
|
||||
// TS
|
||||
this.word("abstract");
|
||||
this.space();
|
||||
}
|
||||
|
||||
this.word("class");
|
||||
|
||||
if (node.id) {
|
||||
@@ -59,10 +71,25 @@ export function ClassBody(node: Object) {
|
||||
export function ClassProperty(node: Object) {
|
||||
this.printJoin(node.decorators, node);
|
||||
|
||||
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) {
|
||||
this.token("[");
|
||||
this.print(node.key, node);
|
||||
@@ -71,6 +98,12 @@ export function ClassProperty(node: Object) {
|
||||
this._variance(node);
|
||||
this.print(node.key, node);
|
||||
}
|
||||
|
||||
if (node.optional) {
|
||||
// TS
|
||||
this.token("?");
|
||||
}
|
||||
|
||||
this.print(node.typeAnnotation, node);
|
||||
if (node.value) {
|
||||
this.space();
|
||||
@@ -82,12 +115,30 @@ export function ClassProperty(node: Object) {
|
||||
}
|
||||
|
||||
export function ClassMethod(node: Object) {
|
||||
this._classMethodHead(node);
|
||||
this.space();
|
||||
this.print(node.body, node);
|
||||
}
|
||||
|
||||
export function _classMethodHead(node) {
|
||||
this.printJoin(node.decorators, node);
|
||||
|
||||
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._method(node);
|
||||
this._methodHead(node);
|
||||
}
|
||||
|
||||
@@ -65,6 +65,8 @@ export function NewExpression(node: Object, parent: Object) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.print(node.typeParameters, node); // TS
|
||||
|
||||
if (node.optional) {
|
||||
this.token("?.");
|
||||
}
|
||||
@@ -94,6 +96,8 @@ export function Decorator(node: Object) {
|
||||
export function CallExpression(node: Object) {
|
||||
this.print(node.callee, node);
|
||||
|
||||
this.print(node.typeParameters, node); // TS
|
||||
|
||||
if (node.optional) {
|
||||
this.token("?.");
|
||||
}
|
||||
|
||||
@@ -95,6 +95,14 @@ export function DeclareTypeAlias(node: Object) {
|
||||
this.TypeAlias(node);
|
||||
}
|
||||
|
||||
export function DeclareOpaqueType(node: Object, parent: Object) {
|
||||
if (!t.isDeclareExportDeclaration(parent)) {
|
||||
this.word("declare");
|
||||
this.space();
|
||||
}
|
||||
this.OpaqueType(node);
|
||||
}
|
||||
|
||||
export function DeclareVariable(node: Object, parent: Object) {
|
||||
if (!t.isDeclareExportDeclaration(parent)) {
|
||||
this.word("declare");
|
||||
@@ -303,38 +311,27 @@ export function TypeAlias(node: Object) {
|
||||
this.semicolon();
|
||||
}
|
||||
|
||||
export function TypeAnnotation(node: Object) {
|
||||
this.token(":");
|
||||
export function OpaqueType(node: Object) {
|
||||
this.word("opaque");
|
||||
this.space();
|
||||
if (node.optional) this.token("?");
|
||||
this.print(node.typeAnnotation, node);
|
||||
}
|
||||
|
||||
export function TypeParameter(node: Object) {
|
||||
this._variance(node);
|
||||
|
||||
this.word(node.name);
|
||||
|
||||
if (node.bound) {
|
||||
this.print(node.bound, node);
|
||||
this.word("type");
|
||||
this.space();
|
||||
this.print(node.id, node);
|
||||
this.print(node.typeParameters, node);
|
||||
if (node.supertype) {
|
||||
this.token(":");
|
||||
this.space();
|
||||
this.print(node.supertype, node);
|
||||
}
|
||||
|
||||
if (node.default) {
|
||||
if (node.impltype) {
|
||||
this.space();
|
||||
this.token("=");
|
||||
this.space();
|
||||
this.print(node.default, node);
|
||||
this.print(node.impltype, node);
|
||||
}
|
||||
this.semicolon();
|
||||
}
|
||||
|
||||
export function TypeParameterInstantiation(node: Object) {
|
||||
this.token("<");
|
||||
this.printList(node.params, node, {});
|
||||
this.token(">");
|
||||
}
|
||||
|
||||
export { TypeParameterInstantiation as TypeParameterDeclaration };
|
||||
|
||||
export function ObjectTypeAnnotation(node: Object) {
|
||||
if (node.exact) {
|
||||
this.token("{|");
|
||||
|
||||
@@ -8,3 +8,5 @@ export * from "./types";
|
||||
export * from "./flow";
|
||||
export * from "./base";
|
||||
export * from "./jsx";
|
||||
export * from "./tsFlowCommon";
|
||||
export * from "./typescript";
|
||||
|
||||
@@ -3,20 +3,31 @@ import * as t from "babel-types";
|
||||
export function _params(node: Object) {
|
||||
this.print(node.typeParameters, node);
|
||||
this.token("(");
|
||||
this.printList(node.params, node, {
|
||||
iterator: node => {
|
||||
if (node.optional) this.token("?");
|
||||
this.print(node.typeAnnotation, node);
|
||||
},
|
||||
});
|
||||
this._parameters(node.params, node);
|
||||
this.token(")");
|
||||
|
||||
if (node.returnType) {
|
||||
this.print(node.returnType, node);
|
||||
this.print(node.returnType, node);
|
||||
}
|
||||
|
||||
export function _parameters(parameters, parent) {
|
||||
for (let i = 0; i < parameters.length; i++) {
|
||||
this._param(parameters[i], parent);
|
||||
|
||||
if (i < parameters.length - 1) {
|
||||
this.token(",");
|
||||
this.space();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function _method(node: Object) {
|
||||
export function _param(parameter, parent) {
|
||||
this.printJoin(parameter.decorators, parameter);
|
||||
this.print(parameter, parent);
|
||||
if (parameter.optional) this.token("?"); // TS / flow
|
||||
this.print(parameter.typeAnnotation, parameter); // TS / flow
|
||||
}
|
||||
|
||||
export function _methodHead(node: Object) {
|
||||
const kind = node.kind;
|
||||
const key = node.key;
|
||||
|
||||
@@ -44,9 +55,12 @@ export function _method(node: Object) {
|
||||
this.print(key, node);
|
||||
}
|
||||
|
||||
if (node.optional) {
|
||||
// TS
|
||||
this.token("?");
|
||||
}
|
||||
|
||||
this._params(node);
|
||||
this.space();
|
||||
this.print(node.body, node);
|
||||
}
|
||||
|
||||
export function _predicate(node: Object) {
|
||||
@@ -59,7 +73,7 @@ export function _predicate(node: Object) {
|
||||
}
|
||||
}
|
||||
|
||||
export function FunctionExpression(node: Object) {
|
||||
export function _functionHead(node: Object) {
|
||||
if (node.async) {
|
||||
this.word("async");
|
||||
this.space();
|
||||
@@ -67,16 +81,17 @@ export function FunctionExpression(node: Object) {
|
||||
this.word("function");
|
||||
if (node.generator) this.token("*");
|
||||
|
||||
this.space();
|
||||
if (node.id) {
|
||||
this.space();
|
||||
this.print(node.id, node);
|
||||
} else {
|
||||
this.space();
|
||||
}
|
||||
|
||||
this._params(node);
|
||||
this._predicate(node);
|
||||
}
|
||||
|
||||
export function FunctionExpression(node: Object) {
|
||||
this._functionHead(node);
|
||||
this.space();
|
||||
this.print(node.body, node);
|
||||
}
|
||||
|
||||
@@ -236,6 +236,12 @@ function constDeclarationIndent() {
|
||||
}
|
||||
|
||||
export function VariableDeclaration(node: Object, parent: Object) {
|
||||
if (node.declare) {
|
||||
// TS
|
||||
this.word("declare");
|
||||
this.space();
|
||||
}
|
||||
|
||||
this.word(node.kind);
|
||||
this.space();
|
||||
|
||||
|
||||
38
packages/babel-generator/src/generators/tsFlowCommon.js
Normal file
38
packages/babel-generator/src/generators/tsFlowCommon.js
Normal file
@@ -0,0 +1,38 @@
|
||||
export function TypeAnnotation(node) {
|
||||
this.token(":");
|
||||
this.space();
|
||||
if (node.optional) this.token("?");
|
||||
this.print(node.typeAnnotation, node);
|
||||
}
|
||||
|
||||
export function TypeParameterInstantiation(node): void {
|
||||
this.token("<");
|
||||
this.printList(node.params, node, {});
|
||||
this.token(">");
|
||||
}
|
||||
|
||||
export { TypeParameterInstantiation as TypeParameterDeclaration };
|
||||
|
||||
export function TypeParameter(node) {
|
||||
this._variance(node);
|
||||
|
||||
this.word(node.name);
|
||||
|
||||
if (node.bound) {
|
||||
this.print(node.bound, node);
|
||||
}
|
||||
|
||||
if (node.constraint) {
|
||||
this.space();
|
||||
this.word("extends");
|
||||
this.space();
|
||||
this.print(node.constraint, node);
|
||||
}
|
||||
|
||||
if (node.default) {
|
||||
this.space();
|
||||
this.token("=");
|
||||
this.space();
|
||||
this.print(node.default, node);
|
||||
}
|
||||
}
|
||||
@@ -31,7 +31,9 @@ export { ObjectExpression as ObjectPattern };
|
||||
|
||||
export function ObjectMethod(node: Object) {
|
||||
this.printJoin(node.decorators, node);
|
||||
this._method(node);
|
||||
this._methodHead(node);
|
||||
this.space();
|
||||
this.print(node.body, node);
|
||||
}
|
||||
|
||||
export function ObjectProperty(node: Object) {
|
||||
|
||||
456
packages/babel-generator/src/generators/typescript.js
Normal file
456
packages/babel-generator/src/generators/typescript.js
Normal file
@@ -0,0 +1,456 @@
|
||||
export function TSParameterProperty(node) {
|
||||
if (node.accessibility) {
|
||||
this.word(node.accessibility);
|
||||
this.space();
|
||||
}
|
||||
|
||||
if (node.readonly) {
|
||||
this.word("readonly");
|
||||
this.space();
|
||||
}
|
||||
|
||||
this._param(node.parameter);
|
||||
}
|
||||
|
||||
export function TSDeclareFunction(node) {
|
||||
if (node.declare) {
|
||||
this.word("declare");
|
||||
this.space();
|
||||
}
|
||||
this._functionHead(node);
|
||||
this.token(";");
|
||||
}
|
||||
|
||||
export function TSDeclareMethod(node) {
|
||||
this._classMethodHead(node);
|
||||
this.token(";");
|
||||
}
|
||||
|
||||
export function TSQualifiedName(node) {
|
||||
this.print(node.left, node);
|
||||
this.token(".");
|
||||
this.print(node.right, node);
|
||||
}
|
||||
|
||||
export function TSCallSignatureDeclaration(node) {
|
||||
this.tsPrintSignatureDeclarationBase(node);
|
||||
}
|
||||
|
||||
export function TSConstructSignatureDeclaration(node) {
|
||||
this.word("new");
|
||||
this.space();
|
||||
this.tsPrintSignatureDeclarationBase(node);
|
||||
}
|
||||
|
||||
export function TSPropertySignature(node) {
|
||||
const { readonly, initializer } = node;
|
||||
if (readonly) {
|
||||
this.word("readonly");
|
||||
this.space();
|
||||
}
|
||||
this.tsPrintPropertyOrMethodName(node);
|
||||
this.print(node.typeAnnotation, node);
|
||||
if (initializer) {
|
||||
this.space();
|
||||
this.token("=");
|
||||
this.space();
|
||||
this.print(initializer, node);
|
||||
}
|
||||
this.token(";");
|
||||
}
|
||||
|
||||
export function tsPrintPropertyOrMethodName(node) {
|
||||
if (node.computed) {
|
||||
this.token("[");
|
||||
}
|
||||
this.print(node.key, node);
|
||||
if (node.computed) {
|
||||
this.token("]");
|
||||
}
|
||||
if (node.optional) {
|
||||
this.token("?");
|
||||
}
|
||||
}
|
||||
|
||||
export function TSMethodSignature(node) {
|
||||
this.tsPrintPropertyOrMethodName(node);
|
||||
this.tsPrintSignatureDeclarationBase(node);
|
||||
this.token(";");
|
||||
}
|
||||
|
||||
export function TSIndexSignature(node) {
|
||||
const { readonly } = node;
|
||||
if (readonly) {
|
||||
this.word("readonly");
|
||||
this.space();
|
||||
}
|
||||
this.token("[");
|
||||
this._parameters(node.parameters, node);
|
||||
this.token("]");
|
||||
this.print(node.typeAnnotation, node);
|
||||
this.token(";");
|
||||
}
|
||||
|
||||
export function TSAnyKeyword() {
|
||||
this.word("any");
|
||||
}
|
||||
export function TSNumberKeyword() {
|
||||
this.word("number");
|
||||
}
|
||||
export function TSObjectKeyword() {
|
||||
this.word("object");
|
||||
}
|
||||
export function TSBooleanKeyword() {
|
||||
this.word("boolean");
|
||||
}
|
||||
export function TSStringKeyword() {
|
||||
this.word("string");
|
||||
}
|
||||
export function TSSymbolKeyword() {
|
||||
this.word("symbol");
|
||||
}
|
||||
export function TSVoidKeyword() {
|
||||
this.word("void");
|
||||
}
|
||||
export function TSUndefinedKeyword() {
|
||||
this.word("undefined");
|
||||
}
|
||||
export function TSNullKeyword() {
|
||||
this.word("null");
|
||||
}
|
||||
export function TSNeverKeyword() {
|
||||
this.word("never");
|
||||
}
|
||||
|
||||
export function TSThisType() {
|
||||
this.word("this");
|
||||
}
|
||||
|
||||
export function TSFunctionType(node) {
|
||||
this.tsPrintFunctionOrConstructorType(node);
|
||||
}
|
||||
|
||||
export function TSConstructorType(node) {
|
||||
this.word("new");
|
||||
this.space();
|
||||
this.tsPrintFunctionOrConstructorType(node);
|
||||
}
|
||||
|
||||
export function tsPrintFunctionOrConstructorType(
|
||||
node: FunctionOrConstructorType,
|
||||
) {
|
||||
const { typeParameters, parameters } = node;
|
||||
this.print(typeParameters, node);
|
||||
this.token("(");
|
||||
this._parameters(parameters, node);
|
||||
this.token(")");
|
||||
this.space();
|
||||
this.token("=>");
|
||||
this.space();
|
||||
this.print(node.typeAnnotation.typeAnnotation, node);
|
||||
}
|
||||
|
||||
export function TSTypeReference(node) {
|
||||
this.print(node.typeName, node);
|
||||
this.print(node.typeParameters, node);
|
||||
}
|
||||
|
||||
export function TSTypePredicate(node) {
|
||||
this.print(node.parameterName);
|
||||
this.space();
|
||||
this.word("is");
|
||||
this.space();
|
||||
this.print(node.typeAnnotation.typeAnnotation);
|
||||
}
|
||||
|
||||
export function TSTypeQuery(node) {
|
||||
this.word("typeof");
|
||||
this.space();
|
||||
this.print(node.exprName);
|
||||
}
|
||||
|
||||
export function TSTypeLiteral(node) {
|
||||
this.tsPrintTypeLiteralOrInterfaceBody(node.members, node);
|
||||
}
|
||||
|
||||
export function tsPrintTypeLiteralOrInterfaceBody(members, node) {
|
||||
this.tsPrintBraced(members, node);
|
||||
}
|
||||
|
||||
export function tsPrintBraced(members, node) {
|
||||
this.token("{");
|
||||
if (members.length) {
|
||||
this.indent();
|
||||
this.newline();
|
||||
for (const member of members) {
|
||||
this.print(member, node);
|
||||
//this.token(sep);
|
||||
this.newline();
|
||||
}
|
||||
this.dedent();
|
||||
this.rightBrace();
|
||||
} else {
|
||||
this.token("}");
|
||||
}
|
||||
}
|
||||
|
||||
export function TSArrayType(node) {
|
||||
this.print(node.elementType);
|
||||
this.token("[]");
|
||||
}
|
||||
|
||||
export function TSTupleType(node) {
|
||||
this.token("[");
|
||||
this.printList(node.elementTypes, node);
|
||||
this.token("]");
|
||||
}
|
||||
|
||||
export function TSUnionType(node) {
|
||||
this.tsPrintUnionOrIntersectionType(node, "|");
|
||||
}
|
||||
|
||||
export function TSIntersectionType(node) {
|
||||
this.tsPrintUnionOrIntersectionType(node, "&");
|
||||
}
|
||||
|
||||
export function tsPrintUnionOrIntersectionType(node, sep) {
|
||||
this.printJoin(node.types, node, {
|
||||
separator() {
|
||||
this.space();
|
||||
this.token(sep);
|
||||
this.space();
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export function TSParenthesizedType(node) {
|
||||
this.token("(");
|
||||
this.print(node.typeAnnotation, node);
|
||||
this.token(")");
|
||||
}
|
||||
|
||||
export function TSTypeOperator(node) {
|
||||
this.token(node.operator);
|
||||
this.space();
|
||||
this.print(node.typeAnnotation, node);
|
||||
}
|
||||
|
||||
export function TSIndexedAccessType(node) {
|
||||
this.print(node.objectType, node);
|
||||
this.token("[");
|
||||
this.print(node.indexType, node);
|
||||
this.token("]");
|
||||
}
|
||||
|
||||
export function TSMappedType(node) {
|
||||
const { readonly, typeParameter, optional } = node;
|
||||
this.token("{");
|
||||
this.space();
|
||||
if (readonly) {
|
||||
this.word("readonly");
|
||||
this.space();
|
||||
}
|
||||
|
||||
this.token("[");
|
||||
this.word(typeParameter.name);
|
||||
this.space();
|
||||
this.word("in");
|
||||
this.space();
|
||||
this.print(typeParameter.constraint, typeParameter);
|
||||
this.token("]");
|
||||
|
||||
if (optional) {
|
||||
this.token("?");
|
||||
}
|
||||
this.token(":");
|
||||
this.space();
|
||||
this.print(node.typeAnnotation, node);
|
||||
this.space();
|
||||
this.token("}");
|
||||
}
|
||||
|
||||
export function TSLiteralType(node) {
|
||||
this.print(node.literal, node);
|
||||
}
|
||||
|
||||
export function TSExpressionWithTypeArguments(node) {
|
||||
this.print(node.expression, node);
|
||||
this.print(node.typeParameters, node);
|
||||
}
|
||||
|
||||
export function TSInterfaceDeclaration(node) {
|
||||
const { declare, id, typeParameters, extends: extendz, body } = node;
|
||||
if (declare) {
|
||||
this.word("declare");
|
||||
this.space();
|
||||
}
|
||||
this.word("interface");
|
||||
this.space();
|
||||
this.print(id, node);
|
||||
this.print(typeParameters, node);
|
||||
if (extendz) {
|
||||
this.space();
|
||||
this.word("extends");
|
||||
this.space();
|
||||
this.printList(extendz, node);
|
||||
}
|
||||
this.space();
|
||||
this.print(body, node);
|
||||
}
|
||||
|
||||
export function TSInterfaceBody(node) {
|
||||
this.tsPrintTypeLiteralOrInterfaceBody(node.body, node);
|
||||
}
|
||||
|
||||
export function TSTypeAliasDeclaration(node) {
|
||||
const { declare, id, typeParameters, typeAnnotation } = node;
|
||||
if (declare) {
|
||||
this.word("declare");
|
||||
this.space();
|
||||
}
|
||||
this.word("type");
|
||||
this.space();
|
||||
this.print(id, node);
|
||||
this.print(typeParameters, node);
|
||||
this.space();
|
||||
this.token("=");
|
||||
this.space();
|
||||
this.print(typeAnnotation, node);
|
||||
this.token(";");
|
||||
}
|
||||
|
||||
export function TSAsExpression(node) {
|
||||
const { expression, typeAnnotation } = node;
|
||||
this.print(expression, node);
|
||||
this.space();
|
||||
this.word("as");
|
||||
this.space();
|
||||
this.print(typeAnnotation, node);
|
||||
}
|
||||
|
||||
export function TSTypeAssertion(node) {
|
||||
const { typeAnnotation, expression } = node;
|
||||
this.token("<");
|
||||
this.print(typeAnnotation, node);
|
||||
this.token(">");
|
||||
this.space();
|
||||
this.print(expression, node);
|
||||
}
|
||||
|
||||
export function TSEnumDeclaration(node) {
|
||||
const { declare, const: isConst, id, members } = node;
|
||||
if (declare) {
|
||||
this.word("declare");
|
||||
this.space();
|
||||
}
|
||||
if (isConst) {
|
||||
this.word("const");
|
||||
this.space();
|
||||
}
|
||||
this.word("enum");
|
||||
this.space();
|
||||
this.print(id, node);
|
||||
this.space();
|
||||
this.tsPrintBraced(members, node);
|
||||
}
|
||||
|
||||
export function TSEnumMember(node) {
|
||||
const { id, initializer } = node;
|
||||
this.print(id, node);
|
||||
if (initializer) {
|
||||
this.space();
|
||||
this.token("=");
|
||||
this.space();
|
||||
this.print(initializer, node);
|
||||
}
|
||||
this.token(",");
|
||||
}
|
||||
|
||||
export function TSModuleDeclaration(node) {
|
||||
const { declare, id } = node;
|
||||
|
||||
if (declare) {
|
||||
this.word("declare");
|
||||
this.space();
|
||||
}
|
||||
|
||||
if (!node.global) {
|
||||
this.word(id.type === "Identifier" ? "namespace" : "module");
|
||||
this.space();
|
||||
}
|
||||
this.print(id, node);
|
||||
|
||||
if (!node.body) {
|
||||
this.token(";");
|
||||
return;
|
||||
}
|
||||
|
||||
let body = node.body;
|
||||
while (body.type === "TSModuleDeclaration") {
|
||||
this.token(".");
|
||||
this.print(body.id, body);
|
||||
body = body.body;
|
||||
}
|
||||
|
||||
this.space();
|
||||
this.print(body, node);
|
||||
}
|
||||
|
||||
export function TSModuleBlock(node) {
|
||||
this.tsPrintBraced(node.body, node);
|
||||
}
|
||||
|
||||
export function TSImportEqualsDeclaration(node) {
|
||||
const { isExport, id, moduleReference } = node;
|
||||
if (isExport) {
|
||||
this.word("export");
|
||||
this.space();
|
||||
}
|
||||
this.word("import");
|
||||
this.space();
|
||||
this.print(id, node);
|
||||
this.space();
|
||||
this.token("=");
|
||||
this.space();
|
||||
this.print(moduleReference, node);
|
||||
this.token(";");
|
||||
}
|
||||
|
||||
export function TSExternalModuleReference(node) {
|
||||
this.token("require(");
|
||||
this.print(node.expression, node);
|
||||
this.token(")");
|
||||
}
|
||||
|
||||
export function TSNonNullExpression(node) {
|
||||
this.print(node.expression, node);
|
||||
this.token("!");
|
||||
}
|
||||
|
||||
export function TSExportAssignment(node) {
|
||||
this.word("export");
|
||||
this.space();
|
||||
this.token("=");
|
||||
this.space();
|
||||
this.print(node.expression, node);
|
||||
this.token(";");
|
||||
}
|
||||
|
||||
export function TSNamespaceExportDeclaration(node) {
|
||||
this.word("export");
|
||||
this.space();
|
||||
this.word("as");
|
||||
this.space();
|
||||
this.word("namespace");
|
||||
this.space();
|
||||
this.print(node.id, node);
|
||||
}
|
||||
|
||||
export function tsPrintSignatureDeclarationBase(node) {
|
||||
const { typeParameters, parameters } = node;
|
||||
this.print(typeParameters, node);
|
||||
this.token("(");
|
||||
this._parameters(parameters, node);
|
||||
this.token(")");
|
||||
this.print(node.typeAnnotation, node);
|
||||
}
|
||||
@@ -93,6 +93,14 @@ export function Binary(node: Object, parent: Object): boolean {
|
||||
return false;
|
||||
}
|
||||
|
||||
export function TSAsExpression() {
|
||||
return true;
|
||||
}
|
||||
|
||||
export function TSTypeAssertion() {
|
||||
return true;
|
||||
}
|
||||
|
||||
export function BinaryExpression(node: Object, parent: Object): boolean {
|
||||
// let i = (1 in []);
|
||||
// for ((1 in []);;);
|
||||
@@ -173,7 +181,9 @@ export function ConditionalExpression(node: Object, parent: Object): boolean {
|
||||
t.isBinary(parent) ||
|
||||
t.isConditionalExpression(parent, { test: node }) ||
|
||||
t.isAwaitExpression(parent) ||
|
||||
t.isTaggedTemplateExpression(parent)
|
||||
t.isTaggedTemplateExpression(parent) ||
|
||||
t.isTSTypeAssertion(parent) ||
|
||||
t.isTSAsExpression(parent)
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user