Import babel-plugin-transform-unicode-property-regex (#6499)

* Import babel-plugin-transform-unicode-property-regex

Original: https://github.com/mathiasbynens/babel-plugin-transform-unicode-property-regex

Moving it into the official Babel repository makes it easier to maintain the transform.

* Update package.json

* Update README.md

* fixup

* fixup 2
This commit is contained in:
Mathias Bynens 2017-10-18 10:58:44 -07:00 committed by Justin Ridgewell
parent 1b4307205e
commit 5d4c736413
28 changed files with 145 additions and 6 deletions

View File

@ -45,7 +45,7 @@
"@babel/plugin-transform-object-rest-spread": "7.0.0-beta.3",
"@babel/plugin-transform-optional-catch-binding": "7.0.0-beta.3",
"@babel/plugin-transform-regenerator": "7.0.0-beta.3",
"babel-plugin-transform-unicode-property-regex": "^2.0.5",
"@babel/plugin-transform-unicode-property-regex": "7.0.0-beta.3",
"browserslist": "^2.4.0",
"invariant": "^2.2.2",
"semver": "^5.3.0"

View File

@ -33,5 +33,5 @@ export default {
"transform-object-rest-spread": require("@babel/plugin-transform-object-rest-spread"),
"transform-optional-catch-binding": require("@babel/plugin-transform-optional-catch-binding"),
"transform-regenerator": require("@babel/plugin-transform-regenerator"),
"transform-unicode-property-regex": require("babel-plugin-transform-unicode-property-regex"),
"transform-unicode-property-regex": require("@babel/plugin-transform-unicode-property-regex"),
};

View File

@ -0,0 +1,55 @@
# @babel/plugin-transform-unicode-property-regex
Compile [Unicode property escapes](https://github.com/mathiasbynens/regexpu-core/blob/master/property-escapes.md) (`\p{…}` and `\P{…}`) in Unicode regular expressions to ES5 or ES6 that works in todays environments.
**Note:** the Unicode property escape syntax is non-standard and may or may not reflect what eventually gets specified.
[Heres an online demo.](https://mothereff.in/regexpu#input=var+regex+%3D+/%5Cp%7BScript_Extensions%3DGreek%7D/u%3B&unicodePropertyEscape=1)
## Installation
```sh
$ npm install @babel/plugin-transform-unicode-property-regex
```
## Usage
### Via `.babelrc` (recommended)
`.babelrc`
```json
{
"plugins": ["transform-unicode-property-regex"]
}
```
### Via CLI
```sh
$ babel --plugins transform-unicode-property-regex script.js
```
### Via Node.js API
```js
require('@babel/core').transform(code, {
'plugins': ['transform-unicode-property-regex']
});
```
To transpile to ES6/ES2015:
```js
require('@babel/core').transform(code, {
'plugins': [
['transform-unicode-property-regex', { 'useUnicodeFlag': true }]
]
});
```
## Author
| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") |
|---|
| [Mathias Bynens](https://mathiasbynens.be/) |

View File

@ -0,0 +1,27 @@
{
"name": "@babel/plugin-transform-unicode-property-regex",
"version": "7.0.0-beta.3",
"description": "Compile Unicode property escapes in Unicode regular expressions to ES5.",
"homepage": "https://babeljs.io/",
"main": "lib/index.js",
"engines": {
"node": ">=4"
},
"keywords": [
"babel-plugin",
"regex",
"regexp",
"regular expressions",
"unicode properties",
"unicode"
],
"repository": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-unicode-property-regex",
"bugs": "https://github.com/babel/babel/issues",
"dependencies": {
"@babel/helper-regex": "7.0.0-beta.3",
"regexpu-core": "^4.1.3"
},
"devDependencies": {
"@babel/helper-plugin-test-runner": "7.0.0-beta.3"
}
}

View File

@ -0,0 +1,23 @@
import rewritePattern from "regexpu-core";
import * as regex from "babel-helper-regex";
export default function() {
return {
visitor: {
RegExpLiteral(path, state) {
const node = path.node;
if (!regex.is(node, "u")) {
return;
}
const useUnicodeFlag = state.opts.useUnicodeFlag || false;
node.pattern = rewritePattern(node.pattern, node.flags, {
unicodePropertyEscape: true,
useUnicodeFlag: useUnicodeFlag,
});
if (!useUnicodeFlag) {
regex.pullFlag(node, "u");
}
},
},
};
}

View File

@ -0,0 +1,2 @@
var regexEmojiModifier = /\p{Emoji_Modifier}/u;
var regexEmojiComponent = /\p{Emoji_Component}/u;

View File

@ -0,0 +1,2 @@
var regexEmojiModifier = /[\u{1F3FB}-\u{1F3FF}]/u;
var regexEmojiComponent = /[#\*0-9\u200D\u20E3\uFE0F\u{1F1E6}-\u{1F1FF}\u{1F3FB}-\u{1F3FF}\u{E0020}-\u{E007F}]/u;

View File

@ -0,0 +1,7 @@
{
"plugins": [
["transform-unicode-property-regex", {
"useUnicodeFlag": true
}]
]
}

View File

@ -0,0 +1 @@
var regex = /\p{Script_Extensions=Anatolian_Hieroglyphs}/u;

View File

@ -0,0 +1 @@
var regex = /[\u{14400}-\u{14646}]/u;

View File

@ -0,0 +1 @@
var regex = /\p{ASCII_Hex_Digit}/u;

View File

@ -0,0 +1 @@
var regex = /[0-9A-Fa-f]/u;

View File

@ -0,0 +1 @@
var regex = /\p{Regional_Indicator}/u;

View File

@ -0,0 +1 @@
var regex = /[\u{1F1E6}-\u{1F1FF}]/u;

View File

@ -0,0 +1,2 @@
var regexEmojiModifier = /\p{Emoji_Modifier}/u;
var regexEmojiComponent = /\p{Emoji_Component}/u;

View File

@ -0,0 +1,2 @@
var regexEmojiModifier = /(?:\uD83C[\uDFFB-\uDFFF])/;
var regexEmojiComponent = /(?:[#\*0-9\u200D\u20E3\uFE0F]|\uD83C[\uDDE6-\uDDFF\uDFFB-\uDFFF]|\uDB40[\uDC20-\uDC7F])/;

View File

@ -0,0 +1,5 @@
{
"plugins": [
["transform-unicode-property-regex"]
]
}

View File

@ -0,0 +1 @@
var regex = /\p{Script_Extensions=Anatolian_Hieroglyphs}/u;

View File

@ -0,0 +1 @@
var regex = /(?:\uD811[\uDC00-\uDE46])/;

View File

@ -0,0 +1 @@
var regex = /\p{ASCII_Hex_Digit}/u;

View File

@ -0,0 +1 @@
var regex = /[0-9A-Fa-f]/;

View File

@ -0,0 +1 @@
var regex = /\p{Regional_Indicator}/u;

View File

@ -0,0 +1 @@
var regex = /(?:\uD83C[\uDDE6-\uDDFF])/;

View File

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

View File

@ -13,6 +13,6 @@
"@babel/plugin-transform-class-properties": "7.0.0-beta.3",
"@babel/plugin-transform-object-rest-spread": "7.0.0-beta.3",
"@babel/plugin-transform-optional-catch-binding": "7.0.0-beta.3",
"babel-plugin-transform-unicode-property-regex": "^2.0.5"
"@babel/plugin-transform-unicode-property-regex": "7.0.0-beta.3"
}
}

View File

@ -3,7 +3,7 @@ import transformAsyncGeneratorFunctions from "@babel/plugin-transform-async-gene
import transformClassProperties from "@babel/plugin-transform-class-properties";
import transformObjectRestSpread from "@babel/plugin-transform-object-rest-spread";
import transformOptionalCatchBinding from "@babel/plugin-transform-optional-catch-binding";
import transformUnicodePropertyRegex from "babel-plugin-transform-unicode-property-regex";
import transformUnicodePropertyRegex from "@babel/plugin-transform-unicode-property-regex";
export default function() {
return {

View File

@ -78,7 +78,7 @@
"@babel/plugin-transform-regenerator": "7.0.0-beta.3",
"@babel/plugin-transform-runtime": "7.0.0-beta.3",
"@babel/plugin-transform-strict-mode": "7.0.0-beta.3",
"babel-plugin-transform-unicode-property-regex": "^2.0.5",
"@babel/plugin-transform-unicode-property-regex": "7.0.0-beta.3",
"@babel/preset-es2015": "7.0.0-beta.3",
"@babel/preset-es2016": "7.0.0-beta.3",
"@babel/preset-es2017": "7.0.0-beta.3",

View File

@ -205,7 +205,7 @@ registerPlugins({
"transform-regenerator": require("@babel/plugin-transform-regenerator"),
"transform-runtime": require("@babel/plugin-transform-runtime"),
"transform-strict-mode": require("@babel/plugin-transform-strict-mode"),
"transform-unicode-property-regex": require("babel-plugin-transform-unicode-property-regex"),
"transform-unicode-property-regex": require("@babel/plugin-transform-unicode-property-regex"),
});
// All the presets we should bundle