diff --git a/packages/babel-plugin-transform-dotall-regex/README.md b/packages/babel-plugin-transform-dotall-regex/README.md new file mode 100644 index 0000000000..d180193c86 --- /dev/null +++ b/packages/babel-plugin-transform-dotall-regex/README.md @@ -0,0 +1,69 @@ +# @babel/plugin-transform-dotall-regex + +> Compile regular expressions using [the `s` (`dotAll`) flag](https://github.com/tc39/proposal-regexp-dotall-flag) to ES5 that works in today’s environments. + +## Example + +**In** + +```js +/./s +``` + +**Out** + +```js +/[\0-\uFFFF]/ +``` + +**In** + +```js +/./su +``` + +**Out** + +```js +/[\0-\u{10FFFF}]/u +``` + +[Here’s an online demo.](https://mothereff.in/regexpu#input=const+regex+%3D+/foo.bar/s%3B%0Aconsole.log%28%0A++regex.test%28%27foo%5Cnbar%27%29%0A%29%3B%0A//+%E2%86%92+true&dotAllFlag=1) + +## Installation + +```sh +npm install --save-dev @babel/plugin-transform-dotall-regex +``` + +## Usage + +### Via `.babelrc` (recommended) + +`.babelrc` + +```json +{ + "plugins": ["@babel/plugin-transform-dotall-regex"] +} +``` + +### Via CLI + +```sh +$ babel --plugins @babel/plugin-transform-dotall-regex script.js +``` + +### Via Node.js API + +```js +require('@babel/core').transform(code, { + 'plugins': ['@babel/plugin-transform-dotall-regex'] +}); +``` + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | diff --git a/packages/babel-plugin-transform-dotall-regex/package.json b/packages/babel-plugin-transform-dotall-regex/package.json new file mode 100644 index 0000000000..ea09a1639d --- /dev/null +++ b/packages/babel-plugin-transform-dotall-regex/package.json @@ -0,0 +1,34 @@ +{ + "name": "@babel/plugin-transform-dotall-regex", + "version": "7.0.0-beta.35", + "description": "Compile regular expressions using the `s` (`dotAll`) flag to ES5.", + "homepage": "https://babeljs.io/", + "license": "MIT", + "main": "lib/index.js", + "engines": { + "node": ">=4" + }, + "keywords": [ + "babel-plugin", + "regex", + "regexp", + "regular expressions", + "dotall" + ], + "repository": { + "type": "git", + "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-dotall-regex.git" + }, + "bugs": "https://github.com/babel/babel/issues", + "dependencies": { + "@babel/helper-regex": "7.0.0-beta.35", + "regexpu-core": "^4.1.3" + }, + "peerDependencies": { + "@babel/core": "7.0.0-beta.35" + }, + "devDependencies": { + "@babel/core": "7.0.0-beta.35", + "@babel/helper-plugin-test-runner": "7.0.0-beta.35" + } +} diff --git a/packages/babel-plugin-transform-dotall-regex/src/index.js b/packages/babel-plugin-transform-dotall-regex/src/index.js new file mode 100644 index 0000000000..4a25982031 --- /dev/null +++ b/packages/babel-plugin-transform-dotall-regex/src/index.js @@ -0,0 +1,20 @@ +import rewritePattern from "regexpu-core"; +import * as regex from "@babel/helper-regex"; + +export default function() { + return { + visitor: { + RegExpLiteral(path) { + const node = path.node; + if (!regex.is(node, "s")) { + return; + } + node.pattern = rewritePattern(node.pattern, node.flags, { + dotAllFlag: true, + useUnicodeFlag: regex.is(node, "u"), + }); + regex.pullFlag(node, "s"); + }, + }, + }; +} diff --git a/packages/babel-plugin-transform-dotall-regex/test/fixtures/dotall-regex/options.json b/packages/babel-plugin-transform-dotall-regex/test/fixtures/dotall-regex/options.json new file mode 100644 index 0000000000..971351e11b --- /dev/null +++ b/packages/babel-plugin-transform-dotall-regex/test/fixtures/dotall-regex/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["transform-dotall-regex"] +} diff --git a/packages/babel-plugin-transform-dotall-regex/test/fixtures/dotall-regex/simple/actual.js b/packages/babel-plugin-transform-dotall-regex/test/fixtures/dotall-regex/simple/actual.js new file mode 100644 index 0000000000..bf1243961a --- /dev/null +++ b/packages/babel-plugin-transform-dotall-regex/test/fixtures/dotall-regex/simple/actual.js @@ -0,0 +1,2 @@ +var a = /./; +var b = /./s; diff --git a/packages/babel-plugin-transform-dotall-regex/test/fixtures/dotall-regex/simple/expected.js b/packages/babel-plugin-transform-dotall-regex/test/fixtures/dotall-regex/simple/expected.js new file mode 100644 index 0000000000..dec3432575 --- /dev/null +++ b/packages/babel-plugin-transform-dotall-regex/test/fixtures/dotall-regex/simple/expected.js @@ -0,0 +1,2 @@ +var a = /./; +var b = /[\0-\uFFFF]/; diff --git a/packages/babel-plugin-transform-dotall-regex/test/fixtures/dotall-regex/with-unicode-flag/actual.js b/packages/babel-plugin-transform-dotall-regex/test/fixtures/dotall-regex/with-unicode-flag/actual.js new file mode 100644 index 0000000000..9ca7da3e38 --- /dev/null +++ b/packages/babel-plugin-transform-dotall-regex/test/fixtures/dotall-regex/with-unicode-flag/actual.js @@ -0,0 +1,2 @@ +var a = /./u; +var b = /./su; diff --git a/packages/babel-plugin-transform-dotall-regex/test/fixtures/dotall-regex/with-unicode-flag/expected.js b/packages/babel-plugin-transform-dotall-regex/test/fixtures/dotall-regex/with-unicode-flag/expected.js new file mode 100644 index 0000000000..bb1b222ac4 --- /dev/null +++ b/packages/babel-plugin-transform-dotall-regex/test/fixtures/dotall-regex/with-unicode-flag/expected.js @@ -0,0 +1,2 @@ +var a = /./u; +var b = /[\0-\u{10FFFF}]/u; diff --git a/packages/babel-plugin-transform-dotall-regex/test/index.js b/packages/babel-plugin-transform-dotall-regex/test/index.js new file mode 100644 index 0000000000..8c71ab59f5 --- /dev/null +++ b/packages/babel-plugin-transform-dotall-regex/test/index.js @@ -0,0 +1,2 @@ +import runner from "@babel/helper-plugin-test-runner"; +runner(__dirname);