rollup-plugin-data-qa
Version:
[](https://www.npmjs.com/package/rollup-plugin-data-qa) [](https://github.com/semantic-releas
2 lines (1 loc) • 4.11 kB
JavaScript
import{createFilter as t}from"@rollup/pluginutils";import{walk as o}from"estree-walker";import e from"magic-string";import n from"lodash/isArray.js";import r from"lodash/isNaN.js";import i from"lodash/isNil.js";import*as s from"change-case";import a from"lodash/head.js";import l from"lodash/isEmpty.js";const d="process.env.E2E_ENABLED === 'true'",u="data-qa",p=["jsxDEV","jsx","_jsx","jsxs","_jsxs"],c=["Fragment","_Fragment"];function v(t,o){return s[o](t)}function m(t){var o,e;return c.includes(null===(e=null===(o=null==t?void 0:t.arguments)||void 0===o?void 0:o[0])||void 0===e?void 0:e.name)}function f(t){var o,e,n,r,i;const s="React"===(null===(e=null===(o=null==t?void 0:t.callee)||void 0===o?void 0:o.object)||void 0===e?void 0:e.name)&&"createElement"===(null===(r=null===(n=null==t?void 0:t.callee)||void 0===n?void 0:n.property)||void 0===r?void 0:r.name),a=p.includes(null===(i=null==t?void 0:t.callee)||void 0===i?void 0:i.name)&&!m(t);return s||a}function y({code:t,startPosition:o,attrs:e}){t.appendLeft(o,`...(${d} && ${JSON.stringify(e)}),`)}function h({code:t,node:o,attrs:e}){"ObjectExpression"===(null==o?void 0:o.type)&&t.appendLeft(o.start+1,`...(${d} && ${JSON.stringify(e)}),`)}function g({node:t,code:o,componentName:e}){if(!f(t))return!1;const n=t.arguments[1];if(!(null==n?void 0:n.start)&&l(n.properties))return!1;if(!(null!==n.value))return function({code:t,attrs:o,startPosition:e,endPosition:n}){t.overwrite(e,n,`{...(${d} && ${JSON.stringify(o)})}`)}({code:o,startPosition:n.start,endPosition:n.end,attrs:{[u]:e}}),!0;if(function(t){var o,e,n,r;return"Object"===(null===(e=null===(o=t.callee)||void 0===o?void 0:o.object)||void 0===e?void 0:e.name)&&"assign"===(null===(r=null===(n=t.callee)||void 0===n?void 0:n.property)||void 0===r?void 0:r.name)}(n)){const t=a(n.arguments);return!!t&&(h({code:o,node:t,attrs:{[u]:e}}),!0)}if(l(n.properties))return h({code:o,node:n,attrs:{[u]:e}}),!0;const r=a(n.properties);return!!r&&(y({code:o,startPosition:r.start,attrs:{[u]:e}}),!0)}function j({styledComponentName:t,node:o,parent:e,code:n}){var r,i,s,p,c,v;if("MemberExpression"===(null==o?void 0:o.type)&&"styled"===(null==o?void 0:o.object.name)&&"attrs"!==(null===(r=null==e?void 0:e.property)||void 0===r?void 0:r.name))return function({code:t,attrs:o,functionName:e,startPosition:n}){t.appendRight(n,`.${e}(props => ({...(${d} && ${JSON.stringify(o)}),...props}))`)}({code:n,startPosition:null===(i=o.property)||void 0===i?void 0:i.end,functionName:"attrs",attrs:{[u]:t}}),!0;if("attrs"===(null===(p=null===(s=null==e?void 0:e.callee)||void 0===s?void 0:s.property)||void 0===p?void 0:p.name)&&"ArrowFunctionExpression"===o.type&&!l(o.body.properties)){const e=o.body.properties;return y({code:n,startPosition:a(e).start,attrs:{[u]:t}}),!0}if("attrs"===(null===(v=null===(c=null==e?void 0:e.callee)||void 0===c?void 0:c.property)||void 0===v?void 0:v.name)&&"ObjectExpression"===o.type&&!l(o.properties)){const e=o.properties;return y({code:n,startPosition:a(e).start,attrs:{[u]:t}}),!0}return!1}let b=[];const N=({format:s="paramCase",include:a=[],exclude:l=[],options:{disabledReactFunctionComponent:d,disabledStyledComponent:u}={}}={})=>({name:"rollup-plugin-data-qa",options:t=>(b=t.input?Object.values(t.input):[],t),transform(p,c){b||this.error("not found input");var y;if(!t([...b,...(y=a,r(y)||i(y)?[]:n(y)?y:[y])],l)(c))return null;try{const t=this.parse.bind(this)(p),n=new e(p);if(!d){const e=(t,r,i)=>{o(t,{enter(t){var o;if(i===t.start)return;if(m(t)||"ObjectExpression"===t.type)return this.skip();if(f(t)&&r){const o=v(r,s);return g({code:n,componentName:o,node:t}),this.skip()}const a=null===(o=t.id)||void 0===o?void 0:o.name;a&&e(t,a,t.start)}})};e(t)}if(!u){let e="";o(t,{enter(t,o){if(f(t))return this.skip();if(e=function(t){return"VariableDeclarator"===t.type&&t.id?t.id.name:""}(t)||e,e){const r=v(e,s);if(j({code:n,styledComponentName:r,node:t,parent:o}))return e="",this.skip()}}})}return n.hasChanged()?{code:n.toString(),map:n.generateMap({file:c,includeContent:!0,hires:!0})}:null}catch(t){this.warn(`${c} - ${t}`)}}});export{N as injectDataQa};