diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2024-08-30 17:21:18 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2024-08-30 17:21:18 +0800 |
| commit | efbc2ffe6a1ee5ec38a4396305561d6515d0943e (patch) | |
| tree | 2b4c94f18f2c792dfda813050755d5c0273fae22 /node_modules/babel-plugin-transform-regexp-constructors | |
| parent | 43acceb75957c880a5ba5a31aae221394a36d5f6 (diff) | |
node fixes, updates
Diffstat (limited to 'node_modules/babel-plugin-transform-regexp-constructors')
3 files changed, 118 insertions, 0 deletions
diff --git a/node_modules/babel-plugin-transform-regexp-constructors/README.md b/node_modules/babel-plugin-transform-regexp-constructors/README.md new file mode 100644 index 00000000..037522e6 --- /dev/null +++ b/node_modules/babel-plugin-transform-regexp-constructors/README.md @@ -0,0 +1,51 @@ +# babel-plugin-transform-regexp-constructors + +This changes RegExp constructors into literals if the RegExp arguments are strings. + +## Example + +**In** + +```javascript +const foo = 'ab+'; +var a = new RegExp(foo+'c', 'i'); +``` + +**Out** + +```javascript +const foo = 'ab+'; +var a = /ab+c/i; +``` + +## Installation + +```sh +npm install babel-plugin-transform-regexp-constructors --save-dev +``` + +## Usage + +### Via `.babelrc` (Recommended) + +**.babelrc** + +```json +{ + "plugins": ["transform-regexp-constructors"] +} +``` + +### Via CLI + +```sh +babel --plugins transform-regexp-constructors script.js +``` + +### Via Node API + +```javascript +require("@babel/core").transform("code", { + plugins: ["transform-regexp-constructors"] +}); +``` diff --git a/node_modules/babel-plugin-transform-regexp-constructors/lib/index.js b/node_modules/babel-plugin-transform-regexp-constructors/lib/index.js new file mode 100644 index 00000000..be79d8df --- /dev/null +++ b/node_modules/babel-plugin-transform-regexp-constructors/lib/index.js @@ -0,0 +1,53 @@ +"use strict"; + +function createRegExpLiteral(args, prettify, t) { + const evaluatedArgs = args.map(a => a.evaluate()); + + if (!evaluatedArgs.every(a => a.confident && typeof a.value === "string")) { + return; + } + + let pattern = evaluatedArgs.length >= 1 && evaluatedArgs[0].value !== "" ? evaluatedArgs[0].value : "(?:)"; + const flags = evaluatedArgs.length >= 2 ? evaluatedArgs[1].value : ""; + pattern = new RegExp(pattern).source; + + if (prettify) { + pattern = pattern.replace(/\n/g, "\\n").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029").replace(/[\b]/g, "[\\b]").replace(/\v/g, "\\v").replace(/\f/g, "\\f").replace(/\r/g, "\\r"); + } + + pattern = pattern.replace(/\0/g, "\\0"); + return t.regExpLiteral(pattern, flags); +} + +function maybeReplaceWithRegExpLiteral(path, t) { + if (!t.isIdentifier(path.node.callee, { + name: "RegExp" + })) { + return; + } + + const regExpLiteral = createRegExpLiteral(path.get("arguments"), true, t); + + if (regExpLiteral) { + path.replaceWith(regExpLiteral); + } +} + +module.exports = function ({ + types: t +}) { + return { + name: "transform-regexp-constructors", + visitor: { + NewExpression(path) { + maybeReplaceWithRegExpLiteral(path, t); + }, + + CallExpression(path) { + // equivalent to `new RegExp()` according to ยง21.2.3 + maybeReplaceWithRegExpLiteral(path, t); + } + + } + }; +};
\ No newline at end of file diff --git a/node_modules/babel-plugin-transform-regexp-constructors/package.json b/node_modules/babel-plugin-transform-regexp-constructors/package.json new file mode 100644 index 00000000..6942db3e --- /dev/null +++ b/node_modules/babel-plugin-transform-regexp-constructors/package.json @@ -0,0 +1,14 @@ +{ + "name": "babel-plugin-transform-regexp-constructors", + "version": "0.4.3", + "description": "This changes RegExp constructors into literals if the RegExp arguments are strings.", + "keywords": [ + "babel-plugin" + ], + "homepage": "https://github.com/babel/minify#readme", + "bugs": "https://github.com/babel/minify/issues", + "license": "MIT", + "author": "shinew", + "main": "lib/index.js", + "repository": "https://github.com/babel/minify/tree/master/packages/babel-plugin-transform-regexp-constructors" +} |
