sdin
Version:
JavaScript package builder.
2 lines • 1.26 kB
JavaScript
import{valueToNode as s}from"@babel/types";import{mapValues as t}from"lodash";import{executeCode as i}from"../utils/string";function e(){return{name:"code-definition",pre(){var e;this.opts._init||(this.opts._init=!0,e=null!=(e=this.opts.definitions)?e:{},this.opts.definitions=t(e,e=>i(e)),this.opts.definitionKeys=Object.keys(e).sort((e,t)=>t.length-e.length))},visitor:{MemberExpression:n,Identifier:o,UnaryExpression:r}}}function n(t,e){a(t,e,e=>t.matchesPattern(e))}function o(t,e){if(!t.scope.getBinding(t.node.name)){if(t.container&&"type"in t.container){var i=t.container.type;if("ImportDefaultSpecifier"===i||"ImportSpecifier"===i)return}"computed"in t.parent&&!1===t.parent.computed&&("key"===t.key||"property"===t.key)||a(t,e,e=>t.node.name===e)}}function r(e,i){if("typeof"===e.node.operator&&"name"in e.node.argument){let t="typeof "+e.node.argument.name;a(e,i,e=>t===e)}}function a(e,t,i){let n,o=void 0,r=void 0;for(var a of t.opts.definitionKeys)if(i(a)){o=a,r=t.opts.definitions[a];break}var p;o&&(e.replaceWith(s(r)),null!=(n=e.parentPath))&&n.isBinaryExpression()&&(p=e.parentPath.evaluate()).confident&&e.parentPath.replaceWith(s(p.value))}export{e as codeDefinitionBabelPlugin};
//# sourceMappingURL=babel-plugin-code-definition.js.map