Files
add-and-commit/node_modules/babel-plugin-minify-replace/lib/index.js
Federico Grandi f118062594 Update with working working version (#12)
* Fix workflow

* Trigger

* [auto] Update compiled version

* [auto] Commit modules

* Push Windows changes

* Fix

* [auto] Update compiled version

* Try removing cwd

* [auto] Update compiled version

* Try with path module

* [auto] Update compiled version

* Fix path

* [auto] Update compiled version

* Use raw path

* [auto] Update compiled version

* Other path

* [auto] Update compiled version

* Avoid @action/exec

* [auto] Update compiled version

* test

* [auto] Update compiled version

* test

* [auto] Update compiled version

* test

* [auto] Update compiled version

* test

* [auto] Update compiled version

* Try with shelljs

* [auto] Update compiled version

* Fix my stupidity

* Copy scripts to local dir

* [auto] Update compiled version

* Still use path

* [auto] Update compiled version

* Delete entrypoint.sh

* [auto] Update compiled version

* Make file executable

* [auto] Update compiled version

* Try using bash

* [auto] Update compiled version
2019-12-14 21:47:13 +01:00

100 lines
2.3 KiB
JavaScript

"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
});
}
}
};
};