From eac1703467d941f3efc501a777436e63dbc36393 Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Fri, 13 Nov 2020 22:18:45 -0500 Subject: [PATCH] fix(external): execute transforms before JSX transform (#677) --- src/babel.js | 8 ++++---- test/external.js | 25 +++++++++++++++++++++++++ test/snapshots/external.js.md | 17 +++++++++++++++++ test/snapshots/external.js.snap | Bin 1653 -> 1812 bytes 4 files changed, 46 insertions(+), 4 deletions(-) diff --git a/src/babel.js b/src/babel.js index 8c01155d..9b3b0268 100644 --- a/src/babel.js +++ b/src/babel.js @@ -290,6 +290,9 @@ export default function({ types: t }) { // possibly others so we traverse from here or else // dynamic values in classNames could be incorrect path.traverse(jsxVisitors, state) + + // Transpile external styles + path.traverse(externalStylesVisitor, state) }, exit({ node, scope }, state) { if ( @@ -306,10 +309,7 @@ export default function({ types: t }) { const importDeclaration = createReactComponentImportDeclaration(state) node.body.unshift(importDeclaration) } - }, - - // Transpile external styles - ...externalStylesVisitor + } } } diff --git a/test/external.js b/test/external.js index 78e3b33a..eb962738 100644 --- a/test/external.js +++ b/test/external.js @@ -113,3 +113,28 @@ test('Makes sure that style nodes are not re-used', async t => { t.snapshot(code) }) + +test('Make sure that it works with the new automatic transform', async t => { + const { code } = await transformSource( + ` + import { css } from "styled-jsx/css"; + + const A = css.resolve\` + div { + color: green; + } + \`; + + export default function IndexPage() { + return JSON.stringify(A); + } + `, + { + babelrc: false, + presets: [['@babel/preset-react', { runtime: 'automatic' }]], + plugins: [plugin] + } + ) + + t.snapshot(code) +}) diff --git a/test/snapshots/external.js.md b/test/snapshots/external.js.md index e1f84dcb..96dbe47e 100644 --- a/test/snapshots/external.js.md +++ b/test/snapshots/external.js.md @@ -225,3 +225,20 @@ Generated by [AVA](https://ava.li).

test

␊ <_JSXStyle id={styles.__hash}>{styles}␊ );` + +## Make sure that it works with the new automatic transform + +> Snapshot 1 + + `import { jsx as _jsx } from "react/jsx-runtime";␊ + import _JSXStyle from "styled-jsx/style";␊ + const A = {␊ + styles: /*#__PURE__*/_jsx(_JSXStyle, {␊ + id: "2723508961",␊ + children: "div.jsx-2723508961{color:green;}"␊ + }),␊ + className: "jsx-2723508961"␊ + };␊ + export default function IndexPage() {␊ + return JSON.stringify(A);␊ + }` diff --git a/test/snapshots/external.js.snap b/test/snapshots/external.js.snap index 7508bf73683026ec8937912412e7c27edd783679..f546171740b53e3745fd8359da7c6cc6b000da25 100644 GIT binary patch literal 1812 zcmV+v2kZDjRzV_7ic0Kzm1|!$#00?e3)Lbw_SSg*Y;Ownn;hY zq^SG4&z;|UJ@x&`i-Ui^`PW+$G?51Hps3T~yC%Ol>%08<`{~WEq$Y3BM0y^*K8RdC zdUN@Pi_v=T&DXf2ztco|_)dzt`)d2@pxpMy$EQyuFJEDPrit{cc8WT;;<2Mo>?obM zF?8whv8N}F(?oi8HAOx5bIe5J;)y{jjg4qTd3Per0C_;s%0Nhe5EQ%3dn64 z+B2k#mmwII#0p?!{JGe(UmgpPk4)0z8LkNhg%<^&Kw0s2fw~6(Fa8Gr86)?Bl!e0= z`|AuFkH@0HNQ@0KYP!x8`B6WD?6Ji4f>;)%J_#0+Dx;bLarg)MSY4k@$jwjUMGBkR#@Sevsn@1xjLdCp=K&CAbL=bG5SKm9($k zsa|(=84v^2stW*r0FCo&(a@C5ptVpH_w7fK1QJwgk^s;*ux=fG^XGC<-YOPr$nXtB z-iL-2HLX4(P?JDym|&Nc6&)>w;+-a8#D6I*41OJhBnZ1@2+)irPA;K5HA-<#Y5RnS~;u-rfWoi`R!mLFvKxePLKZrG`?2^mLbzI%ADxEZ{>^ftw>8YK6o# zK8UdiHW3ep%^5g5e%_AXQO9p8o+XcFfn$2Oux1S-A`cwmVNsk4sl|d#Boe`RgzeRr zT!;3qYT!t*(Nc3TGLA%*Nd^s*doUH~X+s|TKTJmSpqX487q|*vK!$5mg8npd!R}CNm%?E-ig6>zB?GL# zo|$TY*6=u&!`2YI9$leFhGke#L}@1fUFf!mhAkfEBfk#f&14!q@quOzWV2nE_>&}h zdhHvGHeJ?H+=HPI8;vAvS+~T_gPlk8206@>!IacA!lsA z7C0H7@oj2$^NzGKFXP52#50Rv(;3>>AY@tJ6H2gLcC#5EjXcT^GF@L(mc;;@jO)si zpAF$+L;|Nx+XsxoP%RjvI9<&SKvjS005px$rr*UYq{Y+rPk$+t_n0bp@p)|U(O`8f zX(~IUa>mKJLb%~bVM01m=GDE#IWt!^ z;u1pVu}CbI=w;bBV8D8i$1=2WYuH9}2^yt_Ft2J&WvaT6plCQllo;eDqBwkOkqT57 zV=6U$P!t=$?M$nO-s-P)fsH3yD~6ql;UW=;L?m4a1Pz2I*dk)909;joK;m_a*kcFv~Y7xiz5YW zvl7LJr7|3aWt5K)Y6$K9(_k4^wDU^7)KMqn@X5@&GByUxShNYHl2XndZ0G`cjLizObEMG+J5ZlX!qrrG07Gm^vu*8>(5){xgv!gJ_IM|T< z0@AF(YCy$Zp`%93Uko-2ML4zt9Z>B*8*CZczRfR_UW*?d_YUA6S^fbJf{g=o8vp>> Ca&+tf literal 1653 zcmV-*28#JXRzVFQ;w!67ZE}Pq?v~~rB*2`9D2_cy#XE!OyOgb~!b{j^~ zQrL=0`=AIGtF-Eaf|ZK+poq2=ZCzzW#J7T?h*d$*m+hjS%Um*(WOw%F>Oyvsf6o8? z*YllA56dv?nO}16-KA{#YV_L4t`{%v-VjDY^f!$@PjyW`_VVd-dmkyj!`%3ae1#>_ zht@Dm&u>qEb};+%ch9~dGT+QTT40HEVjaVrQQnlk{V2VDU$^}JuidY)ERmkPnPKkU za^d2>YpL%~UmpJZt-s!$WQjCz3&WfZ-8TE>`TnUdK1kp9YHD_dCDM!N^I>@E`1Q5h zE=L-J*IyTo|IQNW(OVhj_N(0+14`E)pPW6FoSNo-Vu|$YZiczA{_*2aK3F<6GjiqV ziDxEHvP61yBf~uZ!%H(4e8=8>Vt8NIrR)ReSt1?3gJC}3@h6wr6q!Er>DHZ>Uby!; zmPmiRlVNUP){%U$YncseK4!|*nk1_rcmK%V5p|*h!Kf@%0jJ>a#eoCLVL$oGB|V!)lk_c3&sNO!%@BrY&{{SFklmtjwIOXC{gX3edXe1Dh@&QguH@ISX+=n0sEODbC zRU|nf!(vk7w3Oe}PxlkxLPb!N-9i;60B6_a(0i>f>CtQf9b~z>0+By*xu9aF#|0VW zhrU>J`;1)1ThfsQda1i0!qS3jm)Vjq}lLP-Qb|9aN?L z2T&$~4Ar_U0`v=P-i#lYbsvxRLZ_-1))1jygy{KPI;eG*&M0f~{psI^wUaQT5;o#t4oR7vDqmrl&VEjY~ zR#B^=(jYxOWTehnV>t`>NGouAq$8b>gyt7fKF-Hup^#}ou;b_L_&p8$(6E&}vH}n5 z>B5?IjEEv|h({%<6_VzHkH_PISePHwr(6$xY7`tPHhXFgMy`@6-f4mdLwr1nf*p+D z32s`m#CB_nZ%l?z^i|4ZB^8+#+K(o5kZ+*_CmA#u_h2f}%Z4KOf4Ge3fx29r5QS>F zfE=eL!BConU=OHsNTCoP!MI@*k^wf<$h7*OH6qUCur~y6Kvx)0UPGnwW{`a!z@ve`aN{7I5Mz4r}9o2%+5?}1>DkA&m4s#{{`#I8Btw@jOP zi``@sxohLen^ub_Gj7;1>zW-iZ8(Lz>N~zVT$ouR8PY7cCB!y4`Oh$-#S5J&5jl{bpBCpY{2aV^f}wTJ=@AUmcslIw z5O;(l(O9tU{?22^uupGY4^8hX*<<@?;uO5cx2f6PJJ!j)j2ovA&#Zt?=U8KbP!xSl zD8Wj_&0>Hw@~A$@b$wD<9s}$$?ki7zA%u$&2^=+>07heI7L3uHuB-!4)89G(P3Nfj zJ!O>~@#y;LD+Ti&Qw2{xj}1N&s2xsP%G*UrEkW79AWxKi6^g~YjBD?vYUD zMJVD9Ku0gcRHcVN}y|Al>H%@twnlsC~$TZ_b>z?B)>AvJYa9ArP3K{?a`1LVv