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-minify-replace/lib | |
| parent | 43acceb75957c880a5ba5a31aae221394a36d5f6 (diff) | |
node fixes, updates
Diffstat (limited to 'node_modules/babel-plugin-minify-replace/lib')
| -rw-r--r-- | node_modules/babel-plugin-minify-replace/lib/index.js | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/node_modules/babel-plugin-minify-replace/lib/index.js b/node_modules/babel-plugin-minify-replace/lib/index.js new file mode 100644 index 00000000..afc88a25 --- /dev/null +++ b/node_modules/babel-plugin-minify-replace/lib/index.js @@ -0,0 +1,100 @@ +"use strict"; + +module.exports = ({ + types: t +}) => { + const NO_MEMBER = Symbol("no member"); + const replaceVisitor = { + ReferencedIdentifier(path) { + const _path = path, + node = _path.node; + const optionsMap = this.replacements[node.name]; + + if (!optionsMap) { + return; + } + + let options; + + if (path.parentPath.isMemberExpression({ + object: node + })) { + const property = path.parent.property; + const key = t.isIdentifier(property) && property.name; + + if (typeof key === "string") { + options = optionsMap[key]; + path = path.parentPath; + } + } + + if (!options) { + options = optionsMap[NO_MEMBER]; + } + + if (!options) { + return; + } + + path.replaceWith(options.node); + } + + }; + return { + name: "minify-replace", + visitor: { + Program(path) { + /** + Replacements is an array of objects like this: + { + identifierName: 'console', + member: 'log', // optional + replacement: { + type: 'identifier', + value: '', + }, + } + **/ + if (!this.opts.replacements) { + // No replacements. Bail. + return; + } + + const map = Object.create(null); + this.opts.replacements.forEach(({ + identifierName, + replacement, + member + }) => { + if (path.scope.globals[identifierName]) { + // Convert to a node, we only allow identifiers and literals as replacements + if (!replacement.type.match(/literal|identifier/i)) { + throw new Error("Only literals and identifier are supported as replacements"); + } + + const node = t[replacement.type](replacement.value); + const options = { + identifierName, + node, + member + }; + + if (!map[identifierName]) { + map[identifierName] = {}; + } + + if (member && map[identifierName][member]) { + throw new Error(`Replacement collision ${identifierName}.${member}`); + } + + map[identifierName][member || NO_MEMBER] = options; + } + }); + path.traverse(replaceVisitor, { + replacements: map + }); + } + + } + }; +};
\ No newline at end of file |
