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-property-literals | |
| parent | 43acceb75957c880a5ba5a31aae221394a36d5f6 (diff) | |
node fixes, updates
Diffstat (limited to 'node_modules/babel-plugin-transform-property-literals')
5 files changed, 242 insertions, 0 deletions
diff --git a/node_modules/babel-plugin-transform-property-literals/README.md b/node_modules/babel-plugin-transform-property-literals/README.md new file mode 100644 index 00000000..5136e102 --- /dev/null +++ b/node_modules/babel-plugin-transform-property-literals/README.md @@ -0,0 +1,65 @@ +# babel-plugin-transform-property-literals + +This plugin allows Babel to transform valid identifier property key literals into identifiers. + +## Example + +**In** + +```javascript +var foo = { + // changed + "bar": function () {}, + "1": function () {}, + + // not changed + "default": 1, + [a]: 2, + foo: 1 +}; +``` + +**Out** + +```javascript +var foo = { + bar: function () {}, + 1: function () {}, + + "default": 1, + [a]: 2, + foo: 1 +}; +``` + +## Installation + +```sh +npm install babel-plugin-transform-property-literals --save-dev +``` + +## Usage + +### Via `.babelrc` (Recommended) + +**.babelrc** + +```json +{ + "plugins": ["transform-property-literals"] +} +``` + +### Via CLI + +```sh +babel --plugins transform-property-literals script.js +``` + +### Via Node API + +```javascript +require("@babel/core").transform("code", { + plugins: ["transform-property-literals"] +}); +``` diff --git a/node_modules/babel-plugin-transform-property-literals/lib/escape-string-literal.js b/node_modules/babel-plugin-transform-property-literals/lib/escape-string-literal.js new file mode 100644 index 00000000..49881711 --- /dev/null +++ b/node_modules/babel-plugin-transform-property-literals/lib/escape-string-literal.js @@ -0,0 +1,80 @@ +"use strict"; +/** + * Original Source: + * https://github.com/shapesecurity/shift-codegen-js/blob/0d09bd8a/src/coderep.js#L122 + * + * The following function is an exact copy of the original implementation + * + * LICENSE + +Copyright 2014 Shape Security, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + */ + +module.exports = function escapeStringLiteral(stringValue) { + let result = ""; + let nSingle = 0, + nDouble = 0; + + for (let i = 0, l = stringValue.length; i < l; ++i) { + let ch = stringValue[i]; + + if (ch === '"') { + ++nDouble; + } else if (ch === "'") { + ++nSingle; + } + } + + let delim = nDouble > nSingle ? "'" : '"'; + result += delim; + + for (let i = 0; i < stringValue.length; i++) { + let ch = stringValue.charAt(i); + + switch (ch) { + case delim: + result += "\\" + delim; + break; + + case "\n": + result += "\\n"; + break; + + case "\r": + result += "\\r"; + break; + + case "\\": + result += "\\\\"; + break; + + case "\u2028": + result += "\\u2028"; + break; + + case "\u2029": + result += "\\u2029"; + break; + + default: + result += ch; + break; + } + } + + result += delim; + return result; +};
\ No newline at end of file diff --git a/node_modules/babel-plugin-transform-property-literals/lib/index.js b/node_modules/babel-plugin-transform-property-literals/lib/index.js new file mode 100644 index 00000000..964f9096 --- /dev/null +++ b/node_modules/babel-plugin-transform-property-literals/lib/index.js @@ -0,0 +1,30 @@ +"use strict"; + +const _require = require("./property-name"), + reduceStaticPropertyNameES5 = _require.reduceStaticPropertyNameES5; + +module.exports = function ({ + types: t +}) { + return { + name: "transform-property-literals", + visitor: { + // { 'foo': 'bar' } -> { foo: 'bar' } + ObjectProperty: { + exit(path) { + const key = path.get("key"); + + if (!key.isStringLiteral()) { + return; + } + + const newNode = t.clone(path.node); + newNode.key = reduceStaticPropertyNameES5(t, key.node); + newNode.computed = false; + path.replaceWith(newNode); + } + + } + } + }; +};
\ No newline at end of file diff --git a/node_modules/babel-plugin-transform-property-literals/lib/property-name.js b/node_modules/babel-plugin-transform-property-literals/lib/property-name.js new file mode 100644 index 00000000..794e4dc1 --- /dev/null +++ b/node_modules/babel-plugin-transform-property-literals/lib/property-name.js @@ -0,0 +1,50 @@ +"use strict"; + +const _require = require("esutils"), + keyword = _require.keyword; + +const escapeStringLiteral = require("./escape-string-literal"); + +module.exports = { + reduceStaticPropertyNameES5 +}; +/** + * + * Original Source: + * https://github.com/shapesecurity/shift-codegen-js/blob/0d09bd8a/src/minimal-codegen.js#L635 + * + * This implementation modifies the original source in the following ways + * + Check for ES5 Identifier name instead of ES6 Identifier name + * + Use Babel-Types & Babel's AST instead of ShiftAST + * + * LICENSE + +Copyright 2014 Shape Security, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + */ + +function reduceStaticPropertyNameES5(t, node) { + if (keyword.isIdentifierNameES5(node.value)) { + return t.Identifier(node.value); + } + + let n = parseFloat(node.value); + + if (n >= 0 && n.toString() === node.value) { + return t.NumericLiteral(n); + } + + return t.Identifier(escapeStringLiteral(node.value)); +}
\ No newline at end of file diff --git a/node_modules/babel-plugin-transform-property-literals/package.json b/node_modules/babel-plugin-transform-property-literals/package.json new file mode 100644 index 00000000..a1de52dd --- /dev/null +++ b/node_modules/babel-plugin-transform-property-literals/package.json @@ -0,0 +1,17 @@ +{ + "name": "babel-plugin-transform-property-literals", + "version": "6.9.4", + "description": "Turn valid property key literals to plain identifiers", + "keywords": [ + "babel-plugin" + ], + "homepage": "https://github.com/babel/minify#readme", + "bugs": "https://github.com/babel/minify/issues", + "license": "MIT", + "author": "amasad", + "main": "lib/index.js", + "repository": "https://github.com/babel/minify/tree/master/packages/babel-plugin-transform-property-literals", + "dependencies": { + "esutils": "^2.0.2" + } +} |
