@babel/plugin-transform-react-jsx
Advanced tools
Comparing version 7.0.0-beta.5 to 7.0.0-beta.31
@@ -14,5 +14,18 @@ "use strict"; | ||
var t = _ref.types; | ||
var pragma = options.pragma || "React.createElement"; | ||
var throwIfNamespace = options.throwIfNamespace === undefined ? true : !!options.throwIfNamespace; | ||
var THROW_IF_NAMESPACE = options.throwIfNamespace === undefined ? true : !!options.throwIfNamespace; | ||
var PRAGMA_DEFAULT = options.pragma || "React.createElement"; | ||
var PRAGMA_FRAG_DEFAULT = options.pragmaFrag || "React.Fragment"; | ||
var JSX_ANNOTATION_REGEX = /\*?\s*@jsx\s+([^\s]+)/; | ||
var JSX_FRAG_ANNOTATION_REGEX = /\*?\s*@jsxFrag\s+([^\s]+)/; | ||
var createIdentifierParser = function createIdentifierParser(id) { | ||
return function () { | ||
return id.split(".").map(function (name) { | ||
return t.identifier(name); | ||
}).reduce(function (object, property) { | ||
return t.memberExpression(object, property); | ||
}); | ||
}; | ||
}; | ||
var visitor = (0, _helperBuilderReactJsx.default)({ | ||
@@ -32,27 +45,41 @@ pre: function pre(state) { | ||
}, | ||
throwIfNamespace: throwIfNamespace | ||
throwIfNamespace: THROW_IF_NAMESPACE | ||
}); | ||
visitor.Program = { | ||
enter: function enter(path, state) { | ||
var file = state.file; | ||
var pragma = PRAGMA_DEFAULT; | ||
var pragmaFrag = PRAGMA_FRAG_DEFAULT; | ||
var pragmaSet = !!options.pragma; | ||
var pragmaFragSet = !!options.pragmaFrag; | ||
var _arr = file.ast.comments; | ||
visitor.Program = function (path, state) { | ||
var file = state.file; | ||
var id = pragma; | ||
var _arr = file.ast.comments; | ||
for (var _i = 0; _i < _arr.length; _i++) { | ||
var comment = _arr[_i]; | ||
var jsxMatches = JSX_ANNOTATION_REGEX.exec(comment.value); | ||
for (var _i = 0; _i < _arr.length; _i++) { | ||
var comment = _arr[_i]; | ||
var matches = JSX_ANNOTATION_REGEX.exec(comment.value); | ||
if (jsxMatches) { | ||
pragma = jsxMatches[1]; | ||
pragmaSet = true; | ||
} | ||
if (matches) { | ||
id = matches[1]; | ||
break; | ||
var jsxFragMatches = JSX_FRAG_ANNOTATION_REGEX.exec(comment.value); | ||
if (jsxFragMatches) { | ||
pragmaFrag = jsxFragMatches[1]; | ||
pragmaFragSet = true; | ||
} | ||
} | ||
state.set("jsxIdentifier", createIdentifierParser(pragma)); | ||
state.set("jsxFragIdentifier", createIdentifierParser(pragmaFrag)); | ||
state.set("usedFragment", false); | ||
state.set("pragmaSet", pragmaSet); | ||
state.set("pragmaFragSet", pragmaFragSet); | ||
}, | ||
exit: function exit(path, state) { | ||
if (state.get("pragmaSet") && state.get("usedFragment") && !state.get("pragmaFragSet")) { | ||
throw new Error("transform-react-jsx: pragma has been set but " + "pragmafrag has not been set"); | ||
} | ||
} | ||
state.set("jsxIdentifier", function () { | ||
return id.split(".").map(function (name) { | ||
return t.identifier(name); | ||
}).reduce(function (object, property) { | ||
return t.memberExpression(object, property); | ||
}); | ||
}); | ||
}; | ||
@@ -59,0 +86,0 @@ |
{ | ||
"name": "@babel/plugin-transform-react-jsx", | ||
"version": "7.0.0-beta.5", | ||
"version": "7.0.0-beta.31", | ||
"description": "Turn JSX into React function calls", | ||
@@ -12,11 +12,12 @@ "repository": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-react-jsx", | ||
"dependencies": { | ||
"@babel/helper-builder-react-jsx": "7.0.0-beta.5", | ||
"@babel/plugin-syntax-jsx": "7.0.0-beta.5" | ||
"@babel/helper-builder-react-jsx": "7.0.0-beta.31", | ||
"@babel/plugin-syntax-jsx": "7.0.0-beta.31" | ||
}, | ||
"peerDependencies": { | ||
"@babel/core": ">=7.0.0-beta.4 <7.0.0-rc.0" | ||
"@babel/core": "7.0.0-beta.31" | ||
}, | ||
"devDependencies": { | ||
"@babel/helper-plugin-test-runner": "7.0.0-beta.5" | ||
"@babel/core": "7.0.0-beta.31", | ||
"@babel/helper-plugin-test-runner": "7.0.0-beta.31" | ||
} | ||
} |
@@ -49,3 +49,3 @@ # @babel/plugin-transform-react-jsx | ||
var profile = dom( "div", null, | ||
var profile = dom("div", null, | ||
dom("img", { src: "avatar.png", className: "profile" }), | ||
@@ -56,2 +56,66 @@ dom("h3", null, [user.firstName, user.lastName].join(" ")) | ||
### Fragments | ||
Fragments are a feature available in React 16.2.0+. | ||
#### React | ||
**In** | ||
```javascript | ||
var descriptions = items.map(item => ( | ||
<> | ||
<dt>{item.name}</dt> | ||
<dd>{item.value}</dd> | ||
</> | ||
)); | ||
``` | ||
**Out** | ||
```javascript | ||
var descriptions = items.map(item => React.createElement( | ||
React.Fragment, | ||
null, | ||
React.createElement("dt", null, item.name), | ||
React.createElement("dd", null, item.value) | ||
)); | ||
``` | ||
#### Custom | ||
**In** | ||
```javascript | ||
/** @jsx dom */ | ||
/** @jsxFrag DomFrag */ | ||
var { dom, DomFrag } = require("deku"); // DomFrag is fictional! | ||
var descriptions = items.map(item => ( | ||
<> | ||
<dt>{item.name}</dt> | ||
<dd>{item.value}</dd> | ||
</> | ||
)); | ||
``` | ||
**Out** | ||
```javascript | ||
/** @jsx dom */ | ||
/** @jsxFrag DomFrag */ | ||
var { dom, DomFrag } = require("deku"); // DomFrag is fictional! | ||
var descriptions = items.map(item => dom( | ||
DomFrag, | ||
null, | ||
dom("dt", null, item.name), | ||
dom("dd", null, item.value) | ||
)); | ||
``` | ||
Note that if a custom pragma is specified, then a custom fragment pragma must also be specified if the `<></>` is used. Otherwise, an error will be thrown. | ||
## Installation | ||
@@ -84,2 +148,3 @@ | ||
"pragma": "dom", // default pragma is React.createElement | ||
"pragmaFrag": "DomFrag", // default is React.Fragment | ||
"throwIfNamespace": false // defaults to true | ||
@@ -115,2 +180,8 @@ }] | ||
### `pragmaFrag` | ||
`string`, defaults to `React.Fragment`. | ||
Replace the component used when compiling JSX fragments. | ||
### `useBuiltIns` | ||
@@ -117,0 +188,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
7133
79
198
2
+ Added@babel/code-frame@7.0.0-beta.31(transitive)
+ Added@babel/core@7.0.0-beta.31(transitive)
+ Added@babel/generator@7.0.0-beta.31(transitive)
+ Added@babel/helper-builder-react-jsx@7.0.0-beta.31(transitive)
+ Added@babel/helper-function-name@7.0.0-beta.31(transitive)
+ Added@babel/helper-get-function-arity@7.0.0-beta.31(transitive)
+ Added@babel/helpers@7.0.0-beta.31(transitive)
+ Added@babel/plugin-syntax-jsx@7.0.0-beta.31(transitive)
+ Added@babel/template@7.0.0-beta.31(transitive)
+ Added@babel/traverse@7.0.0-beta.31(transitive)
+ Added@babel/types@7.0.0-beta.31(transitive)
+ Addedarr-diff@2.0.0(transitive)
+ Addedarr-flatten@1.1.0(transitive)
+ Addedarray-unique@0.2.1(transitive)
+ Addedbabylon@7.0.0-beta.31(transitive)
+ Addedbraces@1.8.5(transitive)
+ Addedexpand-brackets@0.1.5(transitive)
+ Addedexpand-range@1.8.2(transitive)
+ Addedextglob@0.3.2(transitive)
+ Addedfilename-regex@2.0.1(transitive)
+ Addedfill-range@2.2.4(transitive)
+ Addedfor-in@1.0.2(transitive)
+ Addedfor-own@0.1.5(transitive)
+ Addedglob-base@0.3.0(transitive)
+ Addedglob-parent@2.0.0(transitive)
+ Addedglobals@10.4.0(transitive)
+ Addedinvariant@2.2.4(transitive)
+ Addedis-buffer@1.1.6(transitive)
+ Addedis-dotfile@1.0.3(transitive)
+ Addedis-equal-shallow@0.1.3(transitive)
+ Addedis-extendable@0.1.1(transitive)
+ Addedis-extglob@1.0.0(transitive)
+ Addedis-glob@2.0.1(transitive)
+ Addedis-number@2.1.04.0.0(transitive)
+ Addedis-posix-bracket@0.1.1(transitive)
+ Addedis-primitive@2.0.0(transitive)
+ Addedisarray@1.0.0(transitive)
+ Addedisobject@2.1.0(transitive)
+ Addedkind-of@3.2.26.0.3(transitive)
+ Addedloose-envify@1.4.0(transitive)
+ Addedmath-random@1.0.4(transitive)
+ Addedmicromatch@2.3.11(transitive)
+ Addednormalize-path@2.1.1(transitive)
+ Addedobject.omit@2.0.1(transitive)
+ Addedparse-glob@3.0.4(transitive)
+ Addedpreserve@0.2.0(transitive)
+ Addedrandomatic@3.1.1(transitive)
+ Addedregex-cache@0.4.4(transitive)
+ Addedremove-trailing-separator@1.1.0(transitive)
+ Addedrepeat-element@1.1.4(transitive)
+ Addedrepeat-string@1.6.1(transitive)
- Removed@babel/code-frame@7.0.0-beta.56(transitive)
- Removed@babel/core@7.0.0-beta.56(transitive)
- Removed@babel/generator@7.0.0-beta.56(transitive)
- Removed@babel/helper-builder-react-jsx@7.0.0-beta.5(transitive)
- Removed@babel/helper-function-name@7.0.0-beta.56(transitive)
- Removed@babel/helper-get-function-arity@7.0.0-beta.56(transitive)
- Removed@babel/helper-split-export-declaration@7.0.0-beta.56(transitive)
- Removed@babel/helpers@7.0.0-beta.56(transitive)
- Removed@babel/highlight@7.0.0-beta.56(transitive)
- Removed@babel/parser@7.0.0-beta.56(transitive)
- Removed@babel/plugin-syntax-jsx@7.0.0-beta.5(transitive)
- Removed@babel/template@7.0.0-beta.56(transitive)
- Removed@babel/traverse@7.0.0-beta.56(transitive)
- Removed@babel/types@7.0.0-beta.56(transitive)
- Removedglobals@11.12.0(transitive)
- Removedsemver@5.7.2(transitive)