@reckona/mreact-compiler 0.0.152 → 0.0.154
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/emit-server-shared.js +1 -1
- package/dist/emit-server-shared.js.map +1 -1
- package/dist/emit-server.d.ts.map +1 -1
- package/dist/emit-server.js +81 -8
- package/dist/emit-server.js.map +1 -1
- package/dist/ir.d.ts +2 -1
- package/dist/ir.d.ts.map +1 -1
- package/dist/ir.js.map +1 -1
- package/dist/oxc-bindings.d.ts.map +1 -1
- package/dist/oxc-bindings.js +28 -1
- package/dist/oxc-bindings.js.map +1 -1
- package/dist/oxc-compat-create-element.d.ts +11 -0
- package/dist/oxc-compat-create-element.d.ts.map +1 -0
- package/dist/oxc-compat-create-element.js +489 -0
- package/dist/oxc-compat-create-element.js.map +1 -0
- package/dist/oxc-dom-lowering.js +1 -1
- package/dist/oxc-dom-lowering.js.map +1 -1
- package/dist/oxc-render-values.js +8 -0
- package/dist/oxc-render-values.js.map +1 -1
- package/dist/oxc-runtime-emit.d.ts.map +1 -1
- package/dist/oxc-runtime-emit.js +5 -1
- package/dist/oxc-runtime-emit.js.map +1 -1
- package/dist/oxc-transform.d.ts.map +1 -1
- package/dist/oxc-transform.js +6 -0
- package/dist/oxc-transform.js.map +1 -1
- package/dist/oxc.d.ts.map +1 -1
- package/dist/oxc.js +79 -11
- package/dist/oxc.js.map +1 -1
- package/dist/transform.d.ts +1 -0
- package/dist/transform.d.ts.map +1 -1
- package/dist/transform.js +8 -5
- package/dist/transform.js.map +1 -1
- package/package.json +2 -2
- package/src/emit-server-shared.ts +1 -1
- package/src/emit-server.ts +103 -4
- package/src/ir.ts +4 -1
- package/src/oxc-bindings.ts +36 -1
- package/src/oxc-compat-create-element.ts +705 -0
- package/src/oxc-dom-lowering.ts +1 -1
- package/src/oxc-render-values.ts +10 -0
- package/src/oxc-runtime-emit.ts +6 -1
- package/src/oxc-transform.ts +6 -0
- package/src/oxc.ts +130 -4
- package/src/transform.ts +9 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oxc-compat-create-element.js","sourceRoot":"","sources":["../src/oxc-compat-create-element.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE9F,4EAA4E;AAC5E,4EAA4E;AAC5E,6EAA6E;AAC7E,qEAAqE;AACrE,gDAAgD;AAEhD,MAAM,6BAA6B,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC,CAAC;AAEnF,MAAM,UAAU,+BAA+B,CAAC,OAAgB;IAC9D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5D,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QAE1C,IAAI,WAAW,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YAC7C,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE9C,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACzF,SAAS;QACX,CAAC;QAED,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1D,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;YAE9C,IAAI,eAAe,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBAC/C,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,UAAU,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACtD,MAAM,KAAK,GAAG,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAEhD,IAAI,QAAQ,CAAC,IAAI,KAAK,eAAe,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACxE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6EAA6E;AAC7E,yEAAyE;AACzE,0EAA0E;AAC1E,MAAM,6BAA6B,GAA2B;IAC5D,aAAa,EAAE,gBAAgB;IAC/B,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,OAAO;IAClB,OAAO,EAAE,SAAS;IAClB,eAAe,EAAE,iBAAiB;IAClC,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,YAAY;IACvB,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,YAAY;IACxB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF,MAAM,mCAAmC,GAAG,IAAI,GAAG,CAAC;IAClD,iBAAiB;IACjB,WAAW;IACX,YAAY;CACb,CAAC,CAAC;AAEH,6EAA6E;AAC7E,oEAAoE;AACpE,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,QAAQ;IACR,YAAY;IACZ,MAAM;IACN,KAAK;IACL,QAAQ;IACR,YAAY;CACb,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAOpD,SAAS,yBAAyB,CAAC,KAA+B,EAAE,IAAY;IAC9E,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY;IAC1C,OAAO,CACL,IAAI,CAAC,MAAM,GAAG,CAAC;QACf,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG;QACjC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,CAClC,CAAC;AACJ,CAAC;AAED,SAAS,+BAA+B,CAAC,aAAqB;IAC5D,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;IAC/C,OAAO,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,mCAAmC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,mBAAmB,CAAC,aAAqB;IAChD,OAAO,aAAa,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAiC;IAC9D,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAErC,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9D,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5D,OAAO,GAAG,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAMD,SAAS,iBAAiB,CAAC,UAAmC;IAC5D,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;QAE/B,IACE,KAAK,KAAK,IAAI;YACd,OAAO,KAAK,KAAK,QAAQ;YACzB,OAAO,KAAK,KAAK,QAAQ;YACzB,OAAO,KAAK,KAAK,SAAS,EAC1B,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAClC,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,KAAK,YAAY,IAAI,UAAU,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACxE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAC/B,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAC1C,MAAM,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAE5C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpD,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;YAE9D,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAQD,SAAS,uBAAuB,CAC9B,IAAY,EACZ,aAAkD;IAElD,IACE,aAAa,KAAK,SAAS;QAC3B,CAAC,aAAa,CAAC,IAAI,KAAK,SAAS,IAAI,aAAa,CAAC,KAAK,KAAK,IAAI,CAAC;QAClE,CAAC,aAAa,CAAC,IAAI,KAAK,YAAY,IAAI,aAAa,CAAC,IAAI,KAAK,WAAW,CAAC,EAC3E,CAAC;QACD,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAC5B,CAAC;IAED,IAAI,aAAa,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QAC9C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,UAAU,GAAkB,EAAE,CAAC;IACrC,IAAI,OAA2B,CAAC;IAChC,IAAI,YAAiD,CAAC;IAEtD,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3D,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QAE5C,IACE,cAAc,CAAC,IAAI,KAAK,UAAU;YAClC,cAAc,CAAC,IAAI,KAAK,MAAM;YAC9B,cAAc,CAAC,MAAM,KAAK,IAAI;YAC9B,cAAc,CAAC,SAAS,KAAK,IAAI,EACjC,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,IAAI,GAAG,qBAAqB,CAAC,cAAc,CAAC,CAAC;QAEnD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,KAAK,GAAG,oBAAoB,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QAErE,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAClC,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,KAAK,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,YAAY,GAAG,KAAK,CAAC;YACrB,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,yBAAyB,IAAI,IAAI,KAAK,0BAA0B,EAAE,CAAC;YAC9E,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAE9C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,IAAI,SAAS,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBACtC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACvC,CAAC;YACD,SAAS;QACX,CAAC;QAED,MAAM,aAAa,GAAG,6BAA6B,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;QAElE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,sBAAsB,CAAC,aAAa,CAAC,EAAE,CAAC;YACvF,kEAAkE;YAClE,qCAAqC;YACrC,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAEzC,IAAI,OAAO,KAAK,SAAS,IAAI,mBAAmB,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YAClF,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;gBAC7B,aAAa,EAAE,QAAQ;aACxB,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,MAAM,eAAe,GAAG,8BAA8B,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAE/E,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YAClC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,OAAO;QACL,UAAU;QACV,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;QAC7C,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;KACxD,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B,CACrC,aAAqB,EACrB,OAAsB;IAEtB,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QAC3D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAE5B,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,+BAA+B,CAAC,aAAa,CAAC,IAAI,mBAAmB,CAAC,aAAa,CAAC,EAAE,CAAC;YACzF,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACvF,CAAC;QAED,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACrF,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AAC5E,CAAC;AAED,2EAA2E;AAC3E,SAAS,cAAc,CACrB,IAAY,EACZ,KAA8B;IAE9B,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QACtC,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACnD,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;YAE5C,IACE,cAAc,CAAC,IAAI,KAAK,UAAU;gBAClC,cAAc,CAAC,IAAI,KAAK,MAAM;gBAC9B,cAAc,CAAC,QAAQ,KAAK,IAAI;gBAChC,cAAc,CAAC,MAAM,KAAK,IAAI;gBAC9B,qBAAqB,CAAC,cAAc,CAAC,KAAK,SAAS,EACnD,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QAED,OAAO;YACL,SAAS,EAAE;gBACT,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;gBAC7B,aAAa,EAAE,QAAQ;aACxB;SACF,CAAC;IACJ,CAAC;IAED,yEAAyE;IACzE,wEAAwE;IACxE,qCAAqC;IACrC,IAAI,iBAAiB,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;QAC3C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO;QACL,SAAS,EAAE;YACT,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;YAC7B,aAAa,EAAE,QAAQ;SACxB;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,IAAY,EACZ,UAAmC,EACnC,KAA+B;IAE/B,OAAO,sBAAsB,CAAC,IAAI,EAAE,oBAAoB,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,sBAAsB,CAC7B,IAAY,EACZ,UAAmC,EACnC,KAA+B;IAE/B,IAAI,UAAU,CAAC,IAAI,KAAK,gBAAgB,IAAI,UAAU,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QACzE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAE7C,IACE,MAAM,CAAC,IAAI,KAAK,YAAY;QAC5B,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;QAC/B,CAAC,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,EAC9C,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAE7C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,IAAI,EAAE,CAAC;QAC5B,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YAClD,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9D,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,WAAW,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5E,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,uBAAuB,CACnC,IAAI,EACJ,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CACxE,CAAC;IAEF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,oBAAoB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnG,MAAM,YAAY,GAChB,cAAc,CAAC,MAAM,GAAG,CAAC;QACvB,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS;YAChC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC7B,MAAM,QAAQ,GAAgB,EAAE,CAAC;IAEjC,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAE5D,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO;QACL,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,WAAW,CAAC,KAAK;QAC1B,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAClE,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAC9B,IAAY,EACZ,KAA8B,EAC9B,KAA+B;IAE/B,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAEzC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACjG,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAgB,EAAE,CAAC;QAEjC,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChD,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;YAE1C,IAAI,aAAa,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBAC3C,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,EAAE,oBAAoB,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC;YAE1F,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAExC,IACE,MAAM,CAAC,IAAI,KAAK,YAAY;YAC5B,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAC/B,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,EAC7C,CAAC;YACD,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAC3D,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,IAAI,GAAG,0BAA0B,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAE5D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,0DAA0D;IAC1D,IAAI,0BAA0B,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;QAC7C,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,0EAA0E;IAC1E,yEAAyE;IACzE,kEAAkE;IAClE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC;AACvF,CAAC;AAED,SAAS,0BAA0B,CACjC,UAAmC,EACnC,KAA+B;IAE/B,IAAI,UAAU,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,KAAK,gBAAgB,IAAI,UAAU,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QACzE,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAE7C,OAAO,CACL,MAAM,CAAC,IAAI,KAAK,YAAY;YAC5B,MAAM,CAAC,IAAI,KAAK,QAAQ;YACxB,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC7B,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC;YAC5C,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,eAAe,CACxE,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,KAAK,kBAAkB,IAAI,UAAU,CAAC,QAAQ,KAAK,GAAG,EAAE,CAAC;QAC1E,OAAO,CACL,0BAA0B,CAAC,oBAAoB,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC;YACpF,0BAA0B,CAAC,oBAAoB,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CACtF,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,OAAO,UAAU,CAAC,KAAK,KAAK,QAAQ,CAAC;IAC9C,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,0BAA0B,CACjC,IAAY,EACZ,UAAmC,EACnC,KAA+B;IAE/B,IAAI,UAAU,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QACjC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAE7C,IACE,MAAM,CAAC,IAAI,KAAK,kBAAkB;QAClC,MAAM,CAAC,QAAQ,KAAK,IAAI;QACxB,MAAM,CAAC,QAAQ,KAAK,IAAI;QACxB,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,KAAK,EAC1C,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAE7C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAErC,IAAI,QAAQ,CAAC,IAAI,KAAK,yBAAyB,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QAC3E,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IAExF,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE,CAAC;QACpE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CACpE,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAChE,CAAC;IAEF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,aAAa,GAA6B;QAC9C,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,QAAQ,EAAE,IAAI,GAAG,CAAC;YAChB,GAAG,KAAK,CAAC,QAAQ;YACjB,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC;SACzF,CAAC;KACH,CAAC;IACF,MAAM,IAAI,GAAG,oBAAoB,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAE7D,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACnC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;IAEnE,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC1D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,SAAS,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtD,QAAQ;QACR,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;QACjD,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;QACjD,GAAG,CAAC,QAAQ,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxE,QAAQ,EAAE,CAAC,QAAQ,CAAC;KACrB,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,4EAA4E;AAC5E,2DAA2D;AAC3D,MAAM,UAAU,qCAAqC,CACnD,IAAY,EACZ,YAAqC,EACrC,KAA0B;IAE1B,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,QAAQ,GAAG,4BAA4B,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IACnE,MAAM,KAAK,GAA6B,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC5D,MAAM,IAAI,GAAG,oBAAoB,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAEjE,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACnC,OAAO,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,SAAS,CAAC;IACjE,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QAE9C,IAAI,eAAe,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC/C,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,oBAAoB,CAAC,UAAU,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE5E,OAAO,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,SAAS,CAAC;IACrE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,YAAqC,EACrC,KAA0B;IAE1B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAEnC,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QACvD,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QAE9C,IAAI,eAAe,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,eAAe,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtF,IAAI,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC;YACD,SAAS;QACX,CAAC;QAED,qEAAqE;QACrE,sDAAsD;QACtD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAE3C,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACnC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QAE9C,IAAI,eAAe,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;YACnD,KAAK,MAAM,UAAU,IAAI,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,CAAC;gBACjE,MAAM,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;gBAEjD,IAAI,EAAE,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBAClF,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QAED,IACE,eAAe,CAAC,IAAI,KAAK,qBAAqB;YAC9C,OAAO,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,QAAQ;YACvD,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,IAAc,CAAC,EACxD,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,IAAc,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["import type { AttributeIr, JsxNodeIr } from \"./ir.js\";\nimport { readArray, readObject, readSource, unwrapOxcParentheses } from \"./oxc-node-utils.js\";\n\n// Lowers statically analyzable react-compat createElement() call trees into\n// the element IR so they compile through the server string pipeline instead\n// of being interpreted per request. Any unsupported shape anywhere in a tree\n// bails the WHOLE tree out (callers keep the source verbatim) so the\n// interpreter semantics never get half-applied.\n\nconst COMPAT_CREATE_ELEMENT_SOURCES = new Set([\"react\", \"@reckona/mreact-compat\"]);\n\nexport function collectCompatCreateElementNames(program: unknown): Set<string> {\n const names = new Set<string>();\n\n for (const statement of readArray(readObject(program).body)) {\n const declaration = readObject(statement);\n\n if (declaration.type !== \"ImportDeclaration\") {\n continue;\n }\n\n const source = readObject(declaration.source);\n\n if (typeof source.value !== \"string\" || !COMPAT_CREATE_ELEMENT_SOURCES.has(source.value)) {\n continue;\n }\n\n for (const specifier of readArray(declaration.specifiers)) {\n const specifierObject = readObject(specifier);\n\n if (specifierObject.type !== \"ImportSpecifier\") {\n continue;\n }\n\n const imported = readObject(specifierObject.imported);\n const local = readObject(specifierObject.local);\n\n if (imported.name === \"createElement\" && typeof local.name === \"string\") {\n names.add(local.name);\n }\n }\n }\n\n return names;\n}\n\n// Mirrors packages/react-compat/src/server-render.ts attribute serialization\n// for compile-time-known prop values. Keep these tables in sync with the\n// interpreter; parity tests compare emitted bytes against renderToString.\nconst COMPAT_HTML_ATTRIBUTE_ALIASES: Record<string, string> = {\n acceptCharset: \"accept-charset\",\n autoFocus: \"autofocus\",\n autoPlay: \"autoplay\",\n charSet: \"charset\",\n className: \"class\",\n colSpan: \"colspan\",\n contentEditable: \"contenteditable\",\n crossOrigin: \"crossorigin\",\n encType: \"enctype\",\n formAction: \"formaction\",\n frameBorder: \"frameborder\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\",\n maxLength: \"maxlength\",\n minLength: \"minlength\",\n noValidate: \"novalidate\",\n playsInline: \"playsinline\",\n rowSpan: \"rowspan\",\n spellCheck: \"spellcheck\",\n srcDoc: \"srcdoc\",\n srcSet: \"srcset\",\n tabIndex: \"tabindex\",\n useMap: \"usemap\",\n};\n\nconst COMPAT_BOOLEANISH_STRING_ATTRIBUTES = new Set([\n \"contenteditable\",\n \"draggable\",\n \"spellcheck\",\n]);\n\n// URL-bearing attributes always emit through the dynamic path so the runtime\n// scheme guard applies; static literal lowering must not bypass it.\nconst URL_ATTRIBUTE_NAMES = new Set([\n \"action\",\n \"formaction\",\n \"href\",\n \"src\",\n \"srcset\",\n \"xlink:href\",\n]);\n\nconst VALID_ATTRIBUTE_NAME = /^[A-Za-z_][\\w.\\-:]*$/;\n\ninterface CompatCreateElementScope {\n names: ReadonlySet<string>;\n shadowed: ReadonlySet<string>;\n}\n\nfunction isActiveCreateElementName(scope: CompatCreateElementScope, name: string): boolean {\n return scope.names.has(name) && !scope.shadowed.has(name);\n}\n\nfunction isEventHandlerPropName(name: string): boolean {\n return (\n name.length > 1 &&\n (name.charCodeAt(0) | 32) === 111 &&\n (name.charCodeAt(1) | 32) === 110\n );\n}\n\nfunction isBooleanishStringAttributeName(attributeName: string): boolean {\n const lowerCased = attributeName.toLowerCase();\n return lowerCased.startsWith(\"aria-\") || COMPAT_BOOLEANISH_STRING_ATTRIBUTES.has(lowerCased);\n}\n\nfunction isDataAttributeName(attributeName: string): boolean {\n return attributeName.toLowerCase().startsWith(\"data-\");\n}\n\nfunction readStaticPropertyKey(property: Record<string, unknown>): string | undefined {\n if (property.computed === true) {\n return undefined;\n }\n\n const key = readObject(property.key);\n\n if (key.type === \"Identifier\" && typeof key.name === \"string\") {\n return key.name;\n }\n\n if (key.type === \"Literal\" && typeof key.value === \"string\") {\n return key.value;\n }\n\n return undefined;\n}\n\ntype StaticLiteral =\n | { kind: \"value\"; value: string | number | boolean | null }\n | { kind: \"undefined\" };\n\nfunction readStaticLiteral(expression: Record<string, unknown>): StaticLiteral | undefined {\n if (expression.type === \"Literal\") {\n const value = expression.value;\n\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return { kind: \"value\", value };\n }\n\n return undefined;\n }\n\n if (expression.type === \"Identifier\" && expression.name === \"undefined\") {\n return { kind: \"undefined\" };\n }\n\n if (expression.type === \"TemplateLiteral\") {\n const expressions = readArray(expression.expressions);\n const quasis = readArray(expression.quasis);\n\n if (expressions.length === 0 && quasis.length === 1) {\n const cooked = readObject(readObject(quasis[0]).value).cooked;\n\n if (typeof cooked === \"string\") {\n return { kind: \"value\", value: cooked };\n }\n }\n }\n\n return undefined;\n}\n\ninterface LoweredProps {\n attributes: AttributeIr[];\n keyCode?: string;\n childrenProp?: Record<string, unknown>;\n}\n\nfunction lowerCreateElementProps(\n code: string,\n propsArgument: Record<string, unknown> | undefined,\n): LoweredProps | undefined {\n if (\n propsArgument === undefined ||\n (propsArgument.type === \"Literal\" && propsArgument.value === null) ||\n (propsArgument.type === \"Identifier\" && propsArgument.name === \"undefined\")\n ) {\n return { attributes: [] };\n }\n\n if (propsArgument.type !== \"ObjectExpression\") {\n return undefined;\n }\n\n const attributes: AttributeIr[] = [];\n let keyCode: string | undefined;\n let childrenProp: Record<string, unknown> | undefined;\n\n for (const property of readArray(propsArgument.properties)) {\n const propertyObject = readObject(property);\n\n if (\n propertyObject.type !== \"Property\" ||\n propertyObject.kind !== \"init\" ||\n propertyObject.method === true ||\n propertyObject.shorthand === true\n ) {\n return undefined;\n }\n\n const name = readStaticPropertyKey(propertyObject);\n\n if (name === undefined) {\n return undefined;\n }\n\n const value = unwrapOxcParentheses(readObject(propertyObject.value));\n\n if (name === \"key\") {\n keyCode = readSource(code, value);\n continue;\n }\n\n if (name === \"ref\" || isEventHandlerPropName(name)) {\n continue;\n }\n\n if (name === \"children\") {\n childrenProp = value;\n continue;\n }\n\n if (name === \"dangerouslySetInnerHTML\" || name === \"suppressHydrationWarning\") {\n return undefined;\n }\n\n if (name === \"style\") {\n const styleProp = lowerStyleProp(code, value);\n\n if (styleProp === undefined) {\n return undefined;\n }\n\n if (styleProp.attribute !== undefined) {\n attributes.push(styleProp.attribute);\n }\n continue;\n }\n\n const attributeName = COMPAT_HTML_ATTRIBUTE_ALIASES[name] ?? name;\n\n if (!VALID_ATTRIBUTE_NAME.test(attributeName) || isEventHandlerPropName(attributeName)) {\n // The interpreter drops these at runtime; keeping them out of the\n // compiled output matches its bytes.\n continue;\n }\n\n const literal = readStaticLiteral(value);\n\n if (literal === undefined || URL_ATTRIBUTE_NAMES.has(attributeName.toLowerCase())) {\n attributes.push({\n kind: \"dynamic-attr\",\n name: attributeName,\n code: readSource(code, value),\n serialization: \"compat\",\n });\n continue;\n }\n\n const staticAttribute = serializeStaticCompatAttribute(attributeName, literal);\n\n if (staticAttribute !== undefined) {\n attributes.push(staticAttribute);\n }\n }\n\n return {\n attributes,\n ...(keyCode === undefined ? {} : { keyCode }),\n ...(childrenProp === undefined ? {} : { childrenProp }),\n };\n}\n\nfunction serializeStaticCompatAttribute(\n attributeName: string,\n literal: StaticLiteral,\n): AttributeIr | undefined {\n if (literal.kind === \"undefined\" || literal.value === null) {\n return undefined;\n }\n\n const value = literal.value;\n\n if (typeof value === \"boolean\") {\n if (isBooleanishStringAttributeName(attributeName) || isDataAttributeName(attributeName)) {\n return { kind: \"static-attr\", name: attributeName, value: value ? \"true\" : \"false\" };\n }\n\n return value ? { kind: \"static-attr\", name: attributeName, value: \"\" } : undefined;\n }\n\n return { kind: \"static-attr\", name: attributeName, value: String(value) };\n}\n\n// undefined bails the whole tree; { attribute: undefined } drops the prop.\nfunction lowerStyleProp(\n code: string,\n value: Record<string, unknown>,\n): { attribute?: AttributeIr } | undefined {\n if (value.type === \"ObjectExpression\") {\n for (const property of readArray(value.properties)) {\n const propertyObject = readObject(property);\n\n if (\n propertyObject.type !== \"Property\" ||\n propertyObject.kind !== \"init\" ||\n propertyObject.computed === true ||\n propertyObject.method === true ||\n readStaticPropertyKey(propertyObject) === undefined\n ) {\n return undefined;\n }\n }\n\n return {\n attribute: {\n kind: \"dynamic-attr\",\n name: \"style\",\n code: readSource(code, value),\n serialization: \"compat\",\n },\n };\n }\n\n // The interpreter's renderStyleAttribute only serializes objects; string\n // and other primitive style values are dropped, so match those bytes by\n // dropping them at compile time too.\n if (readStaticLiteral(value) !== undefined) {\n return {};\n }\n\n return {\n attribute: {\n kind: \"dynamic-attr\",\n name: \"style\",\n code: readSource(code, value),\n serialization: \"compat\",\n },\n };\n}\n\nexport function analyzeCompatCreateElementRoot(\n code: string,\n expression: Record<string, unknown>,\n scope: CompatCreateElementScope,\n): JsxNodeIr | undefined {\n return lowerCreateElementCall(code, unwrapOxcParentheses(expression), scope);\n}\n\nfunction lowerCreateElementCall(\n code: string,\n expression: Record<string, unknown>,\n scope: CompatCreateElementScope,\n): JsxNodeIr | undefined {\n if (expression.type !== \"CallExpression\" || expression.optional === true) {\n return undefined;\n }\n\n const callee = readObject(expression.callee);\n\n if (\n callee.type !== \"Identifier\" ||\n typeof callee.name !== \"string\" ||\n !isActiveCreateElementName(scope, callee.name)\n ) {\n return undefined;\n }\n\n const args = readArray(expression.arguments);\n\n if (args.length === 0) {\n return undefined;\n }\n\n for (const argument of args) {\n if (readObject(argument).type === \"SpreadElement\") {\n return undefined;\n }\n }\n\n const tagArgument = unwrapOxcParentheses(readObject(args[0]));\n\n if (tagArgument.type !== \"Literal\" || typeof tagArgument.value !== \"string\") {\n return undefined;\n }\n\n const props = lowerCreateElementProps(\n code,\n args.length > 1 ? unwrapOxcParentheses(readObject(args[1])) : undefined,\n );\n\n if (props === undefined) {\n return undefined;\n }\n\n const childArguments = args.slice(2).map((argument) => unwrapOxcParentheses(readObject(argument)));\n const childSources =\n childArguments.length > 0\n ? childArguments\n : props.childrenProp === undefined\n ? []\n : [props.childrenProp];\n const children: JsxNodeIr[] = [];\n\n for (const child of childSources) {\n const lowered = lowerCreateElementChild(code, child, scope);\n\n if (lowered === undefined) {\n return undefined;\n }\n\n children.push(...lowered);\n }\n\n return {\n kind: \"element\",\n tagName: tagArgument.value,\n ...(props.keyCode === undefined ? {} : { keyCode: props.keyCode }),\n attributes: props.attributes,\n children,\n };\n}\n\nfunction lowerCreateElementChild(\n code: string,\n child: Record<string, unknown>,\n scope: CompatCreateElementScope,\n): JsxNodeIr[] | undefined {\n const literal = readStaticLiteral(child);\n\n if (literal !== undefined) {\n if (literal.kind === \"undefined\" || literal.value === null || typeof literal.value === \"boolean\") {\n return [];\n }\n\n return [{ kind: \"text\", value: String(literal.value) }];\n }\n\n if (child.type === \"ArrayExpression\") {\n const children: JsxNodeIr[] = [];\n\n for (const element of readArray(child.elements)) {\n const elementObject = readObject(element);\n\n if (elementObject.type === \"SpreadElement\") {\n return undefined;\n }\n\n const lowered = lowerCreateElementChild(code, unwrapOxcParentheses(elementObject), scope);\n\n if (lowered === undefined) {\n return undefined;\n }\n\n children.push(...lowered);\n }\n\n return children;\n }\n\n if (child.type === \"CallExpression\") {\n const callee = readObject(child.callee);\n\n if (\n callee.type === \"Identifier\" &&\n typeof callee.name === \"string\" &&\n isActiveCreateElementName(scope, callee.name)\n ) {\n const lowered = lowerCreateElementCall(code, child, scope);\n return lowered === undefined ? undefined : [lowered];\n }\n\n const list = lowerCreateElementListCall(code, child, scope);\n\n if (list !== undefined) {\n return [list];\n }\n }\n\n // Provably-string expressions escape directly (and stay batchable); the\n // interpreter would emit the same escaped bytes for them.\n if (isProvablyStringExpression(child, scope)) {\n return [{ kind: \"expr\", code: readSource(code, child) }];\n }\n\n // Unknown expressions stay dynamic: the runtime helper escapes primitives\n // and falls back to the interpreter for element values, so children that\n // evaluate to react nodes keep rendering instead of stringifying.\n return [{ kind: \"expr\", code: readSource(code, child), renderMode: \"compat-child\" }];\n}\n\nfunction isProvablyStringExpression(\n expression: Record<string, unknown>,\n scope: CompatCreateElementScope,\n): boolean {\n if (expression.type === \"TemplateLiteral\") {\n return true;\n }\n\n if (expression.type === \"CallExpression\" && expression.optional !== true) {\n const callee = readObject(expression.callee);\n\n return (\n callee.type === \"Identifier\" &&\n callee.name === \"String\" &&\n !scope.shadowed.has(\"String\") &&\n readArray(expression.arguments).length === 1 &&\n readObject(readArray(expression.arguments)[0]).type !== \"SpreadElement\"\n );\n }\n\n if (expression.type === \"BinaryExpression\" && expression.operator === \"+\") {\n return (\n isProvablyStringExpression(unwrapOxcParentheses(readObject(expression.left)), scope) ||\n isProvablyStringExpression(unwrapOxcParentheses(readObject(expression.right)), scope)\n );\n }\n\n if (expression.type === \"Literal\") {\n return typeof expression.value === \"string\";\n }\n\n return false;\n}\n\nfunction lowerCreateElementListCall(\n code: string,\n expression: Record<string, unknown>,\n scope: CompatCreateElementScope,\n): JsxNodeIr | undefined {\n if (expression.optional === true) {\n return undefined;\n }\n\n const callee = readObject(expression.callee);\n\n if (\n callee.type !== \"MemberExpression\" ||\n callee.computed === true ||\n callee.optional === true ||\n readObject(callee.property).name !== \"map\"\n ) {\n return undefined;\n }\n\n const args = readArray(expression.arguments);\n\n if (args.length !== 1) {\n return undefined;\n }\n\n const renderer = readObject(args[0]);\n\n if (renderer.type !== \"ArrowFunctionExpression\" || renderer.async === true) {\n return undefined;\n }\n\n const parameters = readArray(renderer.params).map((parameter) => readObject(parameter));\n\n if (parameters.some((parameter) => parameter.type !== \"Identifier\")) {\n return undefined;\n }\n\n const [itemName, indexName, arrayName] = parameters.map((parameter) =>\n typeof parameter.name === \"string\" ? parameter.name : undefined,\n );\n\n if (itemName === undefined) {\n return undefined;\n }\n\n const rendererScope: CompatCreateElementScope = {\n names: scope.names,\n shadowed: new Set([\n ...scope.shadowed,\n ...[itemName, indexName, arrayName].filter((name): name is string => name !== undefined),\n ]),\n };\n const body = unwrapOxcParentheses(readObject(renderer.body));\n\n if (body.type === \"BlockStatement\") {\n return undefined;\n }\n\n const rendered = lowerCreateElementCall(code, body, rendererScope);\n\n if (rendered === undefined || rendered.kind !== \"element\") {\n return undefined;\n }\n\n return {\n kind: \"list\",\n itemsCode: readSource(code, readObject(callee.object)),\n itemName,\n ...(indexName === undefined ? {} : { indexName }),\n ...(arrayName === undefined ? {} : { arrayName }),\n ...(rendered.keyCode === undefined ? {} : { keyCode: rendered.keyCode }),\n children: [rendered],\n };\n}\n\n// Detection-side predicate: a direct `return createElement(...)` (or arrow\n// implicit body) that the converter can fully lower. Detection and lowering\n// share lowerCreateElementCall so they can never disagree.\nexport function hasLowerableCompatCreateElementReturn(\n code: string,\n functionLike: Record<string, unknown>,\n names: ReadonlySet<string>,\n): boolean {\n if (names.size === 0) {\n return false;\n }\n\n const shadowed = collectFunctionShadowedNames(functionLike, names);\n const scope: CompatCreateElementScope = { names, shadowed };\n const body = unwrapOxcParentheses(readObject(functionLike.body));\n\n if (body.type !== \"BlockStatement\") {\n return lowerCreateElementCall(code, body, scope) !== undefined;\n }\n\n for (const statement of readArray(body.body)) {\n const statementObject = readObject(statement);\n\n if (statementObject.type !== \"ReturnStatement\") {\n continue;\n }\n\n const argument = unwrapOxcParentheses(readObject(statementObject.argument));\n\n return lowerCreateElementCall(code, argument, scope) !== undefined;\n }\n\n return false;\n}\n\nexport function collectFunctionShadowedNames(\n functionLike: Record<string, unknown>,\n names: ReadonlySet<string>,\n): Set<string> {\n const shadowed = new Set<string>();\n\n for (const parameter of readArray(functionLike.params)) {\n const parameterObject = readObject(parameter);\n\n if (parameterObject.type === \"Identifier\" && typeof parameterObject.name === \"string\") {\n if (names.has(parameterObject.name)) {\n shadowed.add(parameterObject.name);\n }\n continue;\n }\n\n // Destructured parameters could shadow anything; treat every tracked\n // name as shadowed rather than analyzing the pattern.\n for (const name of names) {\n shadowed.add(name);\n }\n }\n\n const body = readObject(functionLike.body);\n\n if (body.type !== \"BlockStatement\") {\n return shadowed;\n }\n\n for (const statement of readArray(body.body)) {\n const statementObject = readObject(statement);\n\n if (statementObject.type === \"VariableDeclaration\") {\n for (const declarator of readArray(statementObject.declarations)) {\n const id = readObject(readObject(declarator).id);\n\n if (id.type === \"Identifier\" && typeof id.name === \"string\" && names.has(id.name)) {\n shadowed.add(id.name);\n }\n }\n }\n\n if (\n statementObject.type === \"FunctionDeclaration\" &&\n typeof readObject(statementObject.id).name === \"string\" &&\n names.has(readObject(statementObject.id).name as string)\n ) {\n shadowed.add(readObject(statementObject.id).name as string);\n }\n }\n\n return shadowed;\n}\n"]}
|
package/dist/oxc-dom-lowering.js
CHANGED
|
@@ -17,7 +17,7 @@ export function lowerOxcDomNodeExpression(code, node) {
|
|
|
17
17
|
}
|
|
18
18
|
if (right !== undefined && unwrapped.operator === "||") {
|
|
19
19
|
const left = readSource(code, readObject(unwrapped.left));
|
|
20
|
-
return `((${left}) ?
|
|
20
|
+
return `(() => { const _left = (${left}); return _left ? _left : ${right}; })()`;
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
if (unwrapped.type === "ArrayExpression") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oxc-dom-lowering.js","sourceRoot":"","sources":["../src/oxc-dom-lowering.ts"],"names":[],"mappings":"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","sourcesContent":["import { readArray, readObject, readSource, unwrapOxcParentheses } from \"./oxc-node-utils.js\";\nimport { readOxcJsxTagName } from \"./oxc-jsx-attributes.js\";\nimport { normalizeOxcJsxText } from \"./oxc-jsx-text.js\";\n\nexport function lowerOxcDomNodeExpression(\n code: string,\n node: Record<string, unknown>,\n): string | undefined {\n const unwrapped = unwrapOxcParentheses(node);\n\n if (unwrapped.type === \"ConditionalExpression\") {\n const whenTrue = lowerOxcDomNodeExpression(code, readObject(unwrapped.consequent));\n const whenFalse = lowerOxcDomNodeExpression(code, readObject(unwrapped.alternate));\n\n if (whenTrue !== undefined && whenFalse !== undefined) {\n return `((${readSource(code, readObject(unwrapped.test))}) ? ${whenTrue} : ${whenFalse})`;\n }\n }\n\n if (unwrapped.type === \"LogicalExpression\") {\n const right = lowerOxcDomNodeExpression(code, readObject(unwrapped.right));\n\n if (right !== undefined && unwrapped.operator === \"&&\") {\n return `((${readSource(code, readObject(unwrapped.left))}) ? ${right} : false)`;\n }\n\n if (right !== undefined && unwrapped.operator === \"||\") {\n const left = readSource(code, readObject(unwrapped.left));\n return `((${left}) ? ${left} : ${right})`;\n }\n }\n\n if (unwrapped.type === \"ArrayExpression\") {\n return `[${readArray(unwrapped.elements).map((element) => {\n const object = readObject(element);\n return Object.keys(object).length === 0\n ? \"undefined\"\n : (lowerOxcDomNodeExpression(code, object) ?? readSource(code, object));\n }).join(\", \")}]`;\n }\n\n if (unwrapped.type === \"Literal\" && (unwrapped.value === null || unwrapped.value === false)) {\n return 'document.createTextNode(\"\")';\n }\n\n node = unwrapped;\n\n if (node.type !== \"JSXElement\") {\n return undefined;\n }\n\n const openingElement = readObject(node.openingElement);\n const tagName = readOxcJsxTagName(readObject(openingElement.name));\n\n if (!/^[a-z]/.test(tagName)) {\n return undefined;\n }\n\n return [\n \"(() => {\",\n ` const _node = document.createElement(${JSON.stringify(tagName)});`,\n ...lowerOxcDomAttributes(code, readArray(openingElement.attributes)),\n ...lowerOxcDomChildren(code, readArray(node.children)),\n \" return _node;\",\n \"})()\",\n ].join(\"\\n\");\n}\n\nfunction lowerOxcDomAttributes(code: string, attributes: readonly unknown[]): string[] {\n return attributes.flatMap((attribute): string[] => {\n const object = readObject(attribute);\n\n if (object.type !== \"JSXAttribute\") {\n return [];\n }\n\n const name = String(readObject(object.name).name);\n const domName = htmlAttributeAliases[name] ?? name;\n const value = readObject(object.value);\n\n if (name === \"key\") {\n return [];\n }\n\n if (/^on[A-Z]/.test(name)) {\n if (value.type !== \"JSXExpressionContainer\") {\n return [];\n }\n\n return [\n ` _node.addEventListener(${JSON.stringify(name.slice(2).toLowerCase())}, ${readSource(code, readObject(value.expression))});`,\n ];\n }\n\n if (Object.keys(value).length === 0) {\n return [` _node.setAttribute(${JSON.stringify(domName)}, \"\");`];\n }\n\n if (value.type === \"Literal\") {\n return [` _node.setAttribute(${JSON.stringify(domName)}, ${JSON.stringify(value.value)});`];\n }\n\n if (value.type === \"JSXExpressionContainer\") {\n return [\n ` _node.setAttribute(${JSON.stringify(domName)}, String(${readSource(code, readObject(value.expression))}));`,\n ];\n }\n\n return [];\n });\n}\n\nconst htmlAttributeAliases: Record<string, string> = {\n acceptCharset: \"accept-charset\",\n autoFocus: \"autofocus\",\n autoPlay: \"autoplay\",\n charSet: \"charset\",\n className: \"class\",\n colSpan: \"colspan\",\n contentEditable: \"contenteditable\",\n crossOrigin: \"crossorigin\",\n encType: \"enctype\",\n formAction: \"formaction\",\n frameBorder: \"frameborder\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\",\n maxLength: \"maxlength\",\n minLength: \"minlength\",\n noValidate: \"novalidate\",\n playsInline: \"playsinline\",\n readOnly: \"readonly\",\n rowSpan: \"rowspan\",\n spellCheck: \"spellcheck\",\n srcDoc: \"srcdoc\",\n srcSet: \"srcset\",\n tabIndex: \"tabindex\",\n useMap: \"usemap\",\n};\n\nfunction lowerOxcDomChildren(code: string, children: readonly unknown[]): string[] {\n return children.flatMap((child, index): string[] => {\n const object = readObject(child);\n\n if (object.type === \"JSXText\") {\n const value =\n typeof object.value === \"string\"\n ? normalizeOxcJsxText(object.value, children, index)\n : \"\";\n return value === \"\" ? [] : [` _node.append(${JSON.stringify(value)});`];\n }\n\n if (object.type === \"JSXExpressionContainer\") {\n return [` _node.append(String(${readSource(code, readObject(object.expression))}));`];\n }\n\n if (object.type === \"JSXElement\") {\n const lowered = lowerOxcDomNodeExpression(code, object);\n return lowered === undefined ? [] : [` _node.append(${lowered});`];\n }\n\n return [];\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"oxc-dom-lowering.js","sourceRoot":"","sources":["../src/oxc-dom-lowering.ts"],"names":[],"mappings":"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","sourcesContent":["import { readArray, readObject, readSource, unwrapOxcParentheses } from \"./oxc-node-utils.js\";\nimport { readOxcJsxTagName } from \"./oxc-jsx-attributes.js\";\nimport { normalizeOxcJsxText } from \"./oxc-jsx-text.js\";\n\nexport function lowerOxcDomNodeExpression(\n code: string,\n node: Record<string, unknown>,\n): string | undefined {\n const unwrapped = unwrapOxcParentheses(node);\n\n if (unwrapped.type === \"ConditionalExpression\") {\n const whenTrue = lowerOxcDomNodeExpression(code, readObject(unwrapped.consequent));\n const whenFalse = lowerOxcDomNodeExpression(code, readObject(unwrapped.alternate));\n\n if (whenTrue !== undefined && whenFalse !== undefined) {\n return `((${readSource(code, readObject(unwrapped.test))}) ? ${whenTrue} : ${whenFalse})`;\n }\n }\n\n if (unwrapped.type === \"LogicalExpression\") {\n const right = lowerOxcDomNodeExpression(code, readObject(unwrapped.right));\n\n if (right !== undefined && unwrapped.operator === \"&&\") {\n return `((${readSource(code, readObject(unwrapped.left))}) ? ${right} : false)`;\n }\n\n if (right !== undefined && unwrapped.operator === \"||\") {\n const left = readSource(code, readObject(unwrapped.left));\n return `(() => { const _left = (${left}); return _left ? _left : ${right}; })()`;\n }\n }\n\n if (unwrapped.type === \"ArrayExpression\") {\n return `[${readArray(unwrapped.elements).map((element) => {\n const object = readObject(element);\n return Object.keys(object).length === 0\n ? \"undefined\"\n : (lowerOxcDomNodeExpression(code, object) ?? readSource(code, object));\n }).join(\", \")}]`;\n }\n\n if (unwrapped.type === \"Literal\" && (unwrapped.value === null || unwrapped.value === false)) {\n return 'document.createTextNode(\"\")';\n }\n\n node = unwrapped;\n\n if (node.type !== \"JSXElement\") {\n return undefined;\n }\n\n const openingElement = readObject(node.openingElement);\n const tagName = readOxcJsxTagName(readObject(openingElement.name));\n\n if (!/^[a-z]/.test(tagName)) {\n return undefined;\n }\n\n return [\n \"(() => {\",\n ` const _node = document.createElement(${JSON.stringify(tagName)});`,\n ...lowerOxcDomAttributes(code, readArray(openingElement.attributes)),\n ...lowerOxcDomChildren(code, readArray(node.children)),\n \" return _node;\",\n \"})()\",\n ].join(\"\\n\");\n}\n\nfunction lowerOxcDomAttributes(code: string, attributes: readonly unknown[]): string[] {\n return attributes.flatMap((attribute): string[] => {\n const object = readObject(attribute);\n\n if (object.type !== \"JSXAttribute\") {\n return [];\n }\n\n const name = String(readObject(object.name).name);\n const domName = htmlAttributeAliases[name] ?? name;\n const value = readObject(object.value);\n\n if (name === \"key\") {\n return [];\n }\n\n if (/^on[A-Z]/.test(name)) {\n if (value.type !== \"JSXExpressionContainer\") {\n return [];\n }\n\n return [\n ` _node.addEventListener(${JSON.stringify(name.slice(2).toLowerCase())}, ${readSource(code, readObject(value.expression))});`,\n ];\n }\n\n if (Object.keys(value).length === 0) {\n return [` _node.setAttribute(${JSON.stringify(domName)}, \"\");`];\n }\n\n if (value.type === \"Literal\") {\n return [` _node.setAttribute(${JSON.stringify(domName)}, ${JSON.stringify(value.value)});`];\n }\n\n if (value.type === \"JSXExpressionContainer\") {\n return [\n ` _node.setAttribute(${JSON.stringify(domName)}, String(${readSource(code, readObject(value.expression))}));`,\n ];\n }\n\n return [];\n });\n}\n\nconst htmlAttributeAliases: Record<string, string> = {\n acceptCharset: \"accept-charset\",\n autoFocus: \"autofocus\",\n autoPlay: \"autoplay\",\n charSet: \"charset\",\n className: \"class\",\n colSpan: \"colspan\",\n contentEditable: \"contenteditable\",\n crossOrigin: \"crossorigin\",\n encType: \"enctype\",\n formAction: \"formaction\",\n frameBorder: \"frameborder\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\",\n maxLength: \"maxlength\",\n minLength: \"minlength\",\n noValidate: \"novalidate\",\n playsInline: \"playsinline\",\n readOnly: \"readonly\",\n rowSpan: \"rowspan\",\n spellCheck: \"spellcheck\",\n srcDoc: \"srcdoc\",\n srcSet: \"srcset\",\n tabIndex: \"tabindex\",\n useMap: \"usemap\",\n};\n\nfunction lowerOxcDomChildren(code: string, children: readonly unknown[]): string[] {\n return children.flatMap((child, index): string[] => {\n const object = readObject(child);\n\n if (object.type === \"JSXText\") {\n const value =\n typeof object.value === \"string\"\n ? normalizeOxcJsxText(object.value, children, index)\n : \"\";\n return value === \"\" ? [] : [` _node.append(${JSON.stringify(value)});`];\n }\n\n if (object.type === \"JSXExpressionContainer\") {\n return [` _node.append(String(${readSource(code, readObject(object.expression))}));`];\n }\n\n if (object.type === \"JSXElement\") {\n const lowered = lowerOxcDomNodeExpression(code, object);\n return lowered === undefined ? [] : [` _node.append(${lowered});`];\n }\n\n return [];\n });\n}\n"]}
|
|
@@ -559,6 +559,9 @@ function analyzeOxcReactiveAliasExpression(expression) {
|
|
|
559
559
|
return { reactive: false, safe: false };
|
|
560
560
|
}
|
|
561
561
|
function containsAssignmentTo(node, name) {
|
|
562
|
+
if (isOxcFunctionNode(node) && oxcFunctionShadowsName(node, name)) {
|
|
563
|
+
return false;
|
|
564
|
+
}
|
|
562
565
|
if (node.type === "AssignmentExpression") {
|
|
563
566
|
const left = readObject(node.left);
|
|
564
567
|
if (left.type === "Identifier" && left.name === name)
|
|
@@ -586,6 +589,11 @@ function containsAssignmentTo(node, name) {
|
|
|
586
589
|
}
|
|
587
590
|
return false;
|
|
588
591
|
}
|
|
592
|
+
function oxcFunctionShadowsName(functionNode, name) {
|
|
593
|
+
const localBindings = new Set();
|
|
594
|
+
collectOxcFunctionLocalBindings(functionNode, localBindings);
|
|
595
|
+
return localBindings.has(name);
|
|
596
|
+
}
|
|
589
597
|
function collectOxcPushJsxBindingNames(statements, names) {
|
|
590
598
|
for (const statement of statements) {
|
|
591
599
|
const object = readObject(statement);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oxc-render-values.js","sourceRoot":"","sources":["../src/oxc-render-values.ts"],"names":[],"mappings":"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","sourcesContent":["import type { JsxNodeIr } from \"./ir.js\";\nimport { readArray, readObject, readSource, unwrapOxcParentheses } from \"./oxc-node-utils.js\";\n\ninterface ReactiveAliasReplacement {\n end: number;\n start: number;\n text: string;\n}\n\ninterface ReactiveAliasExpressionState {\n reactive: boolean;\n safe: boolean;\n}\n\nexport function collectOxcBodyJsxBindingNames(statements: readonly unknown[]): Set<string> {\n const names = new Set<string>();\n\n for (const statement of statements) {\n const object = readObject(statement);\n\n if (object.type === \"ForOfStatement\" || object.type === \"ForStatement\") {\n collectOxcPushJsxBindingNames(readArray(readObject(object.body).body), names);\n continue;\n }\n\n if (object.type !== \"VariableDeclaration\") {\n continue;\n }\n\n const declarationKind = typeof object.kind === \"string\" ? object.kind : \"let\";\n const isImmutableBinding = declarationKind === \"const\";\n\n for (const declarationValue of readArray(object.declarations)) {\n const declaration = readObject(declarationValue);\n const id = readObject(declaration.id);\n const initializer = unwrapOxcParentheses(readObject(declaration.init));\n\n if (typeof id.name !== \"string\") continue;\n if (!containsOxcJsxSyntax(initializer)) continue;\n if (!isJsxLikeInitializer(initializer)) continue;\n if (!isImmutableBinding && isBindingReassigned(statements, id.name)) {\n continue;\n }\n names.add(id.name);\n }\n }\n\n return names;\n}\n\nexport function collectOxcReactiveReadAliases(\n code: string,\n statements: readonly unknown[],\n reactiveDerivedFunctions: ReadonlySet<string> = new Set(),\n): Map<string, string> {\n const aliases = new Map<string, string>();\n\n for (const statement of statements) {\n const object = readObject(statement);\n\n if (object.type !== \"VariableDeclaration\" || object.kind !== \"const\") {\n continue;\n }\n\n for (const declarationValue of readArray(object.declarations)) {\n const declaration = readObject(declarationValue);\n const id = readObject(declaration.id);\n const initializer = unwrapOxcParentheses(readObject(declaration.init));\n\n if (typeof id.name !== \"string\") continue;\n if (\n !isOxcReactiveAliasExpression(initializer) &&\n !isOxcReactiveDerivedAliasExpression(initializer, reactiveDerivedFunctions)\n ) {\n continue;\n }\n\n aliases.set(id.name, readSource(code, initializer));\n }\n }\n\n return aliases;\n}\n\nexport function collectOxcReactiveDerivedFunctionNames(\n statements: readonly unknown[],\n): Set<string> {\n const names = new Set<string>();\n\n for (const statementValue of statements) {\n const statement = readObject(statementValue);\n\n if (statement.type === \"FunctionDeclaration\") {\n const id = readObject(statement.id);\n if (typeof id.name === \"string\" && isOxcReactiveDerivedFunction(statement)) {\n names.add(id.name);\n }\n continue;\n }\n\n if (statement.type !== \"VariableDeclaration\" || statement.kind !== \"const\") {\n continue;\n }\n\n for (const declarationValue of readArray(statement.declarations)) {\n const declaration = readObject(declarationValue);\n const id = readObject(declaration.id);\n const initializer = unwrapOxcParentheses(readObject(declaration.init));\n\n if (\n typeof id.name === \"string\" &&\n (initializer.type === \"FunctionExpression\" ||\n initializer.type === \"ArrowFunctionExpression\") &&\n isOxcReactiveDerivedFunction(initializer)\n ) {\n names.add(id.name);\n }\n }\n }\n\n return names;\n}\n\nexport function rewriteOxcReactiveAliasExpressionCode(\n code: string,\n expression: Record<string, unknown>,\n aliases: ReadonlyMap<string, string> | undefined,\n): string | undefined {\n if (aliases === undefined || aliases.size === 0) {\n return undefined;\n }\n\n const expressionStart = readNumber(expression.start);\n const expressionEnd = readNumber(expression.end);\n\n if (expressionStart === undefined || expressionEnd === undefined) {\n return undefined;\n }\n\n const replacements: ReactiveAliasReplacement[] = [];\n collectOxcReactiveAliasReplacements(\n expression,\n undefined,\n undefined,\n aliases,\n new Set(),\n replacements,\n );\n\n if (replacements.length === 0) {\n return undefined;\n }\n\n let source = readSource(code, expression);\n\n for (const replacement of replacements.sort((left, right) => right.start - left.start)) {\n const start = replacement.start - expressionStart;\n const end = replacement.end - expressionStart;\n\n if (start < 0 || end > source.length || start > end) {\n return undefined;\n }\n\n source = `${source.slice(0, start)}${replacement.text}${source.slice(end)}`;\n }\n\n return source;\n}\n\nfunction collectOxcReactiveAliasReplacements(\n node: unknown,\n parent: Record<string, unknown> | undefined,\n parentKey: string | undefined,\n aliases: ReadonlyMap<string, string>,\n shadowed: ReadonlySet<string>,\n replacements: ReactiveAliasReplacement[],\n): void {\n const object = readObject(node);\n\n if (typeof object.type !== \"string\") {\n return;\n }\n\n if (object.type.startsWith(\"TS\")) {\n return;\n }\n\n if (\n object.type === \"Identifier\" &&\n typeof object.name === \"string\" &&\n !shadowed.has(object.name) &&\n isOxcReactiveAliasReference(object, parent, parentKey)\n ) {\n const replacement = aliases.get(object.name);\n const start = readNumber(object.start);\n const end = readNumber(object.end);\n\n if (replacement !== undefined && start !== undefined && end !== undefined) {\n replacements.push({\n end,\n start,\n text: isOxcShorthandPropertyValue(object, parent)\n ? `${object.name}: (${replacement})`\n : `(${replacement})`,\n });\n }\n return;\n }\n\n if (isOxcFunctionNode(object)) {\n const functionShadowed = new Set(shadowed);\n collectOxcBindingNames(object.id, functionShadowed);\n for (const parameter of readArray(object.params)) {\n collectOxcBindingNames(parameter, functionShadowed);\n }\n collectOxcReactiveAliasReplacements(\n object.body,\n object,\n \"body\",\n aliases,\n addOxcBlockBindingNames(object.body, functionShadowed),\n replacements,\n );\n return;\n }\n\n const childShadowed =\n object.type === \"BlockStatement\" || object.type === \"Program\"\n ? addOxcBlockBindingNames(object, new Set(shadowed))\n : shadowed;\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n if (key === \"id\" && isOxcDeclarationWithId(object)) {\n continue;\n }\n\n if (key === \"params\" && isOxcFunctionNode(object)) {\n continue;\n }\n\n if (key === \"key\" && isOxcNonComputedKey(object)) {\n continue;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n collectOxcReactiveAliasReplacements(\n item,\n object,\n key,\n aliases,\n childShadowed,\n replacements,\n );\n }\n continue;\n }\n\n if (typeof value === \"object\" && value !== null) {\n collectOxcReactiveAliasReplacements(value, object, key, aliases, childShadowed, replacements);\n }\n }\n}\n\nfunction isOxcReactiveAliasReference(\n node: Record<string, unknown>,\n parent: Record<string, unknown> | undefined,\n parentKey: string | undefined,\n): boolean {\n if (parent === undefined) {\n return true;\n }\n\n if (parent.type === \"MemberExpression\" && parentKey === \"property\" && parent.computed !== true) {\n return false;\n }\n\n if (parentKey === \"id\" && isOxcDeclarationWithId(parent)) {\n return false;\n }\n\n if (parentKey === \"params\" && isOxcFunctionNode(parent)) {\n return false;\n }\n\n if (parentKey === \"key\" && isOxcNonComputedKey(parent)) {\n return isOxcShorthandPropertyValue(node, parent);\n }\n\n if (\n (parent.type === \"BreakStatement\" ||\n parent.type === \"ContinueStatement\" ||\n parent.type === \"LabeledStatement\") &&\n parentKey === \"label\"\n ) {\n return false;\n }\n\n return true;\n}\n\nfunction isOxcShorthandPropertyValue(\n node: Record<string, unknown>,\n parent: Record<string, unknown> | undefined,\n): boolean {\n const key = readObject(parent?.key);\n return (\n parent !== undefined &&\n (parent.type === \"Property\" || parent.type === \"ObjectProperty\") &&\n parent.shorthand === true &&\n parent.value === node &&\n readNumber(key.start) === readNumber(node.start) &&\n readNumber(key.end) === readNumber(node.end)\n );\n}\n\nfunction isOxcNonComputedKey(node: Record<string, unknown>): boolean {\n return (\n (node.type === \"Property\" ||\n node.type === \"ObjectProperty\" ||\n node.type === \"PropertyDefinition\" ||\n node.type === \"MethodDefinition\") &&\n node.computed !== true\n );\n}\n\nfunction isOxcDeclarationWithId(node: Record<string, unknown>): boolean {\n return (\n node.type === \"VariableDeclarator\" ||\n node.type === \"FunctionDeclaration\" ||\n node.type === \"FunctionExpression\" ||\n node.type === \"ClassDeclaration\" ||\n node.type === \"ClassExpression\"\n );\n}\n\nfunction isOxcFunctionNode(node: Record<string, unknown>): boolean {\n return (\n node.type === \"ArrowFunctionExpression\" ||\n node.type === \"FunctionDeclaration\" ||\n node.type === \"FunctionExpression\"\n );\n}\n\nfunction addOxcBlockBindingNames(node: unknown, shadowed: Set<string>): ReadonlySet<string> {\n const object = readObject(node);\n const body = readArray(object.body);\n\n if (body.length === 0) {\n return shadowed;\n }\n\n for (const statement of body) {\n collectOxcStatementBindingNames(statement, shadowed);\n }\n\n return shadowed;\n}\n\nfunction collectOxcStatementBindingNames(node: unknown, names: Set<string>): void {\n const object = readObject(node);\n\n if (object.type === \"VariableDeclaration\") {\n for (const declaration of readArray(object.declarations)) {\n collectOxcBindingNames(readObject(declaration).id, names);\n }\n return;\n }\n\n if (object.type === \"FunctionDeclaration\" || object.type === \"ClassDeclaration\") {\n collectOxcBindingNames(object.id, names);\n }\n}\n\nfunction collectOxcBindingNames(node: unknown, names: Set<string>): void {\n const object = readObject(node);\n\n if (object.type === \"Identifier\" && typeof object.name === \"string\") {\n names.add(object.name);\n return;\n }\n\n if (object.type === \"RestElement\") {\n collectOxcBindingNames(object.argument, names);\n return;\n }\n\n if (object.type === \"AssignmentPattern\") {\n collectOxcBindingNames(object.left, names);\n return;\n }\n\n if (object.type === \"ArrayPattern\") {\n for (const element of readArray(object.elements)) {\n collectOxcBindingNames(element, names);\n }\n return;\n }\n\n if (object.type === \"ObjectPattern\") {\n for (const property of readArray(object.properties)) {\n collectOxcBindingNames(readObject(property).value ?? readObject(property).argument, names);\n }\n }\n}\n\nfunction collectOxcFunctionLocalBindings(\n functionNode: Record<string, unknown>,\n names: Set<string>,\n): void {\n collectOxcBindingNames(functionNode.id, names);\n\n for (const parameter of readArray(functionNode.params)) {\n collectOxcBindingNames(parameter, names);\n }\n\n collectOxcLocalBindingsFromNode(readObject(functionNode.body), names);\n}\n\nfunction collectOxcLocalBindingsFromNode(node: unknown, names: Set<string>): void {\n const object = readObject(node);\n\n if (typeof object.type !== \"string\" || object.type.startsWith(\"TS\")) {\n return;\n }\n\n if (object.type === \"VariableDeclaration\") {\n for (const declaration of readArray(object.declarations)) {\n collectOxcBindingNames(readObject(declaration).id, names);\n }\n } else if (object.type === \"FunctionDeclaration\" || object.type === \"ClassDeclaration\") {\n collectOxcBindingNames(object.id, names);\n return;\n } else if (object.type === \"ForOfStatement\" || object.type === \"ForInStatement\") {\n const left = readObject(object.left);\n const declarations = readArray(left.declarations);\n collectOxcBindingNames(\n declarations.length > 0 ? readObject(declarations[0]).id : object.left,\n names,\n );\n } else if (object.type === \"ForStatement\") {\n collectOxcLocalBindingsFromNode(object.init, names);\n } else if (isOxcFunctionNode(object)) {\n return;\n }\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n collectOxcLocalBindingsFromNode(item, names);\n }\n continue;\n }\n\n if (typeof value === \"object\" && value !== null) {\n collectOxcLocalBindingsFromNode(value, names);\n }\n }\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" ? value : undefined;\n}\n\nexport function markOxcRenderValueExpressions(\n nodes: readonly JsxNodeIr[],\n names: Set<string>,\n renderMode: \"dynamic\" | \"html\" = \"dynamic\",\n): void {\n if (names.size === 0) {\n return;\n }\n\n for (const node of nodes) {\n if (node.kind === \"expr\" && names.has(node.code)) {\n node.renderMode = renderMode;\n continue;\n }\n\n if (node.kind === \"conditional\") {\n markOxcRenderValueExpressions(node.whenTrue, names, renderMode);\n markOxcRenderValueExpressions(node.whenFalse, names, renderMode);\n continue;\n }\n\n if (node.kind === \"list\") {\n markOxcRenderValueExpressions(node.children, names, renderMode);\n continue;\n }\n\n if (node.kind === \"fragment\" || node.kind === \"element\" || node.kind === \"component\") {\n markOxcRenderValueExpressions(node.children, names, renderMode);\n }\n }\n}\n\nexport function isOxcRenderValueExpression(expression: Record<string, unknown>): boolean {\n if (isOxcRendererCallExpression(expression)) {\n return true;\n }\n\n if (expression.type !== \"MemberExpression\") {\n return false;\n }\n\n const object = readObject(expression.object);\n const property = readObject(expression.property);\n\n return (\n object.type === \"Identifier\" &&\n object.name === \"props\" &&\n typeof property.name === \"string\" &&\n [\"children\", \"fallback\", \"header\", \"sidebar\", \"element\"].includes(property.name)\n );\n}\n\nfunction isOxcRendererCallExpression(expression: Record<string, unknown>): boolean {\n if (expression.type !== \"CallExpression\") {\n return false;\n }\n\n const callee = readObject(expression.callee);\n\n return (\n callee.type === \"Identifier\" &&\n typeof callee.name === \"string\" &&\n /^render[A-Z0-9_$]/.test(callee.name)\n );\n}\n\nexport function containsOxcJsxSyntax(node: Record<string, unknown>): boolean {\n if (node.type === \"JSXElement\" || node.type === \"JSXFragment\") {\n return true;\n }\n\n return Object.values(node).some((value) =>\n Array.isArray(value)\n ? value.some((item) => containsOxcJsxSyntax(readObject(item)))\n : typeof value === \"object\" && value !== null && containsOxcJsxSyntax(readObject(value)),\n );\n}\n\nfunction isJsxLikeInitializer(node: Record<string, unknown>): boolean {\n if (node.type === \"JSXElement\" || node.type === \"JSXFragment\") return true;\n if (node.type === \"ConditionalExpression\") {\n return (\n isJsxLikeInitializer(readObject(node.consequent)) ||\n isJsxLikeInitializer(readObject(node.alternate))\n );\n }\n if (node.type === \"LogicalExpression\") {\n return (\n isJsxLikeInitializer(readObject(node.left)) || isJsxLikeInitializer(readObject(node.right))\n );\n }\n if (node.type === \"ArrayExpression\") {\n return readArray(node.elements).some((element) => {\n const object = readObject(element);\n return Object.keys(object).length > 0 && isJsxLikeInitializer(object);\n });\n }\n if (node.type === \"ObjectExpression\") {\n return false;\n }\n return containsOxcJsxSyntax(node);\n}\n\nfunction isBindingReassigned(statements: readonly unknown[], name: string): boolean {\n for (const statement of statements) {\n if (containsAssignmentTo(readObject(statement), name)) return true;\n }\n return false;\n}\n\nfunction isOxcReactiveReadExpression(expression: Record<string, unknown>): boolean {\n if (expression.type !== \"CallExpression\") {\n return false;\n }\n\n const callee = readObject(expression.callee);\n\n if (callee.type !== \"MemberExpression\" || callee.computed === true || callee.optional === true) {\n return false;\n }\n\n const property = readObject(callee.property);\n\n return property.type === \"Identifier\" && property.name === \"get\";\n}\n\nfunction isOxcReactiveAliasExpression(expression: Record<string, unknown>): boolean {\n const state = analyzeOxcReactiveAliasExpression(expression);\n return state.safe && state.reactive;\n}\n\nfunction isOxcReactiveDerivedAliasExpression(\n expression: Record<string, unknown>,\n reactiveDerivedFunctions: ReadonlySet<string>,\n): boolean {\n if (reactiveDerivedFunctions.size === 0) {\n return false;\n }\n\n const unwrappedExpression = unwrapOxcParentheses(expression);\n\n if (unwrappedExpression.type !== \"CallExpression\") {\n return false;\n }\n\n if (readArray(unwrappedExpression.arguments).length !== 0) {\n return false;\n }\n\n const callee = readObject(unwrappedExpression.callee);\n\n return (\n callee.type === \"Identifier\" &&\n typeof callee.name === \"string\" &&\n reactiveDerivedFunctions.has(callee.name)\n );\n}\n\nfunction isOxcReactiveDerivedFunction(functionNode: Record<string, unknown>): boolean {\n if (readArray(functionNode.params).length !== 0) {\n return false;\n }\n\n const localBindings = new Set<string>();\n collectOxcFunctionLocalBindings(functionNode, localBindings);\n const usage = analyzeOxcReactiveDerivedFunctionUsage(\n readObject(functionNode.body),\n localBindings,\n );\n\n return usage.reactive && usage.safe;\n}\n\nfunction analyzeOxcReactiveDerivedFunctionUsage(\n node: unknown,\n localBindings: ReadonlySet<string>,\n): ReactiveAliasExpressionState {\n const object = readObject(node);\n\n if (typeof object.type !== \"string\" || object.type.startsWith(\"TS\")) {\n return { reactive: false, safe: true };\n }\n\n if (isOxcFunctionNode(object)) {\n return { reactive: false, safe: true };\n }\n\n if (object.type === \"CallExpression\") {\n const callee = readObject(object.callee);\n const member = callee.type === \"MemberExpression\" ? callee : undefined;\n const property = readObject(member?.property);\n const owner = readObject(member?.object);\n const propertyName =\n member?.computed === true\n ? undefined\n : typeof property.name === \"string\"\n ? property.name\n : undefined;\n const ownerName = owner.type === \"Identifier\" ? owner.name : undefined;\n\n if (propertyName === \"get\" && typeof ownerName === \"string\" && !localBindings.has(ownerName)) {\n return mergeReactiveAliasStates([\n { reactive: true, safe: true },\n ...readArray(object.arguments).map((argument) =>\n analyzeOxcReactiveDerivedFunctionUsage(argument, localBindings),\n ),\n ]);\n }\n\n if (\n propertyName !== undefined &&\n typeof ownerName === \"string\" &&\n !localBindings.has(ownerName) &&\n isLikelyMutatingMethodName(propertyName)\n ) {\n return { reactive: false, safe: false };\n }\n }\n\n const states: ReactiveAliasExpressionState[] = [];\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n if (Array.isArray(value)) {\n states.push(\n ...value.map((item) => analyzeOxcReactiveDerivedFunctionUsage(item, localBindings)),\n );\n continue;\n }\n\n if (typeof value === \"object\" && value !== null) {\n states.push(analyzeOxcReactiveDerivedFunctionUsage(value, localBindings));\n }\n }\n\n return mergeReactiveAliasStates(states);\n}\n\nfunction mergeReactiveAliasStates(\n states: readonly ReactiveAliasExpressionState[],\n): ReactiveAliasExpressionState {\n return states.reduce<ReactiveAliasExpressionState>(\n (merged, state) => ({\n reactive: merged.reactive || state.reactive,\n safe: merged.safe && state.safe,\n }),\n { reactive: false, safe: true },\n );\n}\n\nfunction isLikelyMutatingMethodName(name: string): boolean {\n return (\n name === \"set\" ||\n name === \"delete\" ||\n name === \"clear\" ||\n name === \"push\" ||\n name === \"pop\" ||\n name === \"shift\" ||\n name === \"unshift\" ||\n name === \"splice\" ||\n name === \"sort\" ||\n name === \"reverse\"\n );\n}\n\nfunction analyzeOxcReactiveAliasExpression(\n expression: Record<string, unknown>,\n): ReactiveAliasExpressionState {\n const unwrappedExpression = unwrapOxcParentheses(expression);\n\n if (\n unwrappedExpression.type === \"Literal\" ||\n unwrappedExpression.type === \"Identifier\" ||\n unwrappedExpression.type === \"ThisExpression\"\n ) {\n return { reactive: false, safe: true };\n }\n\n if (isOxcReactiveReadExpression(unwrappedExpression)) {\n return { reactive: true, safe: true };\n }\n\n if (unwrappedExpression.type === \"ChainExpression\") {\n return analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.expression));\n }\n\n if (\n unwrappedExpression.type === \"TSAsExpression\" ||\n unwrappedExpression.type === \"TSSatisfiesExpression\" ||\n unwrappedExpression.type === \"TSNonNullExpression\" ||\n unwrappedExpression.type === \"TSInstantiationExpression\" ||\n unwrappedExpression.type === \"TypeCastExpression\"\n ) {\n return analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.expression));\n }\n\n if (unwrappedExpression.type === \"MemberExpression\") {\n const objectState = analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.object));\n const propertyState =\n unwrappedExpression.computed === true\n ? analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.property))\n : { reactive: false, safe: true };\n\n return {\n reactive: objectState.reactive || propertyState.reactive,\n safe: objectState.safe && propertyState.safe,\n };\n }\n\n if (unwrappedExpression.type === \"UnaryExpression\") {\n return analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.argument));\n }\n\n if (\n unwrappedExpression.type === \"BinaryExpression\" ||\n unwrappedExpression.type === \"LogicalExpression\"\n ) {\n const leftState = analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.left));\n const rightState = analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.right));\n\n return {\n reactive: leftState.reactive || rightState.reactive,\n safe: leftState.safe && rightState.safe,\n };\n }\n\n if (unwrappedExpression.type === \"ConditionalExpression\") {\n const testState = analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.test));\n const consequentState = analyzeOxcReactiveAliasExpression(\n readObject(unwrappedExpression.consequent),\n );\n const alternateState = analyzeOxcReactiveAliasExpression(\n readObject(unwrappedExpression.alternate),\n );\n\n return {\n reactive: testState.reactive || consequentState.reactive || alternateState.reactive,\n safe: testState.safe && consequentState.safe && alternateState.safe,\n };\n }\n\n return { reactive: false, safe: false };\n}\n\nfunction containsAssignmentTo(node: Record<string, unknown>, name: string): boolean {\n if (node.type === \"AssignmentExpression\") {\n const left = readObject(node.left);\n if (left.type === \"Identifier\" && left.name === name) return true;\n }\n if (node.type === \"UpdateExpression\") {\n const argument = readObject(node.argument);\n if (argument.type === \"Identifier\" && argument.name === name) return true;\n }\n for (const value of Object.values(node)) {\n if (Array.isArray(value)) {\n for (const item of value) {\n if (\n typeof item === \"object\" &&\n item !== null &&\n containsAssignmentTo(readObject(item), name)\n ) {\n return true;\n }\n }\n } else if (typeof value === \"object\" && value !== null) {\n if (containsAssignmentTo(readObject(value), name)) return true;\n }\n }\n return false;\n}\n\nfunction collectOxcPushJsxBindingNames(statements: readonly unknown[], names: Set<string>): void {\n for (const statement of statements) {\n const object = readObject(statement);\n\n if (object.type === \"ForOfStatement\" || object.type === \"ForStatement\") {\n collectOxcPushJsxBindingNames(readArray(readObject(object.body).body), names);\n continue;\n }\n\n const expression = readObject(object.expression);\n\n if (object.type !== \"ExpressionStatement\" || expression.type !== \"CallExpression\") {\n continue;\n }\n\n const callee = readObject(expression.callee);\n const argument = unwrapOxcParentheses(readObject(readArray(expression.arguments)[0]));\n\n if (\n callee.type !== \"MemberExpression\" ||\n readObject(callee.property).name !== \"push\" ||\n !containsOxcJsxSyntax(argument)\n ) {\n continue;\n }\n\n const target = readObject(callee.object);\n\n if (typeof target.name === \"string\") {\n names.add(target.name);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"oxc-render-values.js","sourceRoot":"","sources":["../src/oxc-render-values.ts"],"names":[],"mappings":"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","sourcesContent":["import type { JsxNodeIr } from \"./ir.js\";\nimport { readArray, readObject, readSource, unwrapOxcParentheses } from \"./oxc-node-utils.js\";\n\ninterface ReactiveAliasReplacement {\n end: number;\n start: number;\n text: string;\n}\n\ninterface ReactiveAliasExpressionState {\n reactive: boolean;\n safe: boolean;\n}\n\nexport function collectOxcBodyJsxBindingNames(statements: readonly unknown[]): Set<string> {\n const names = new Set<string>();\n\n for (const statement of statements) {\n const object = readObject(statement);\n\n if (object.type === \"ForOfStatement\" || object.type === \"ForStatement\") {\n collectOxcPushJsxBindingNames(readArray(readObject(object.body).body), names);\n continue;\n }\n\n if (object.type !== \"VariableDeclaration\") {\n continue;\n }\n\n const declarationKind = typeof object.kind === \"string\" ? object.kind : \"let\";\n const isImmutableBinding = declarationKind === \"const\";\n\n for (const declarationValue of readArray(object.declarations)) {\n const declaration = readObject(declarationValue);\n const id = readObject(declaration.id);\n const initializer = unwrapOxcParentheses(readObject(declaration.init));\n\n if (typeof id.name !== \"string\") continue;\n if (!containsOxcJsxSyntax(initializer)) continue;\n if (!isJsxLikeInitializer(initializer)) continue;\n if (!isImmutableBinding && isBindingReassigned(statements, id.name)) {\n continue;\n }\n names.add(id.name);\n }\n }\n\n return names;\n}\n\nexport function collectOxcReactiveReadAliases(\n code: string,\n statements: readonly unknown[],\n reactiveDerivedFunctions: ReadonlySet<string> = new Set(),\n): Map<string, string> {\n const aliases = new Map<string, string>();\n\n for (const statement of statements) {\n const object = readObject(statement);\n\n if (object.type !== \"VariableDeclaration\" || object.kind !== \"const\") {\n continue;\n }\n\n for (const declarationValue of readArray(object.declarations)) {\n const declaration = readObject(declarationValue);\n const id = readObject(declaration.id);\n const initializer = unwrapOxcParentheses(readObject(declaration.init));\n\n if (typeof id.name !== \"string\") continue;\n if (\n !isOxcReactiveAliasExpression(initializer) &&\n !isOxcReactiveDerivedAliasExpression(initializer, reactiveDerivedFunctions)\n ) {\n continue;\n }\n\n aliases.set(id.name, readSource(code, initializer));\n }\n }\n\n return aliases;\n}\n\nexport function collectOxcReactiveDerivedFunctionNames(\n statements: readonly unknown[],\n): Set<string> {\n const names = new Set<string>();\n\n for (const statementValue of statements) {\n const statement = readObject(statementValue);\n\n if (statement.type === \"FunctionDeclaration\") {\n const id = readObject(statement.id);\n if (typeof id.name === \"string\" && isOxcReactiveDerivedFunction(statement)) {\n names.add(id.name);\n }\n continue;\n }\n\n if (statement.type !== \"VariableDeclaration\" || statement.kind !== \"const\") {\n continue;\n }\n\n for (const declarationValue of readArray(statement.declarations)) {\n const declaration = readObject(declarationValue);\n const id = readObject(declaration.id);\n const initializer = unwrapOxcParentheses(readObject(declaration.init));\n\n if (\n typeof id.name === \"string\" &&\n (initializer.type === \"FunctionExpression\" ||\n initializer.type === \"ArrowFunctionExpression\") &&\n isOxcReactiveDerivedFunction(initializer)\n ) {\n names.add(id.name);\n }\n }\n }\n\n return names;\n}\n\nexport function rewriteOxcReactiveAliasExpressionCode(\n code: string,\n expression: Record<string, unknown>,\n aliases: ReadonlyMap<string, string> | undefined,\n): string | undefined {\n if (aliases === undefined || aliases.size === 0) {\n return undefined;\n }\n\n const expressionStart = readNumber(expression.start);\n const expressionEnd = readNumber(expression.end);\n\n if (expressionStart === undefined || expressionEnd === undefined) {\n return undefined;\n }\n\n const replacements: ReactiveAliasReplacement[] = [];\n collectOxcReactiveAliasReplacements(\n expression,\n undefined,\n undefined,\n aliases,\n new Set(),\n replacements,\n );\n\n if (replacements.length === 0) {\n return undefined;\n }\n\n let source = readSource(code, expression);\n\n for (const replacement of replacements.sort((left, right) => right.start - left.start)) {\n const start = replacement.start - expressionStart;\n const end = replacement.end - expressionStart;\n\n if (start < 0 || end > source.length || start > end) {\n return undefined;\n }\n\n source = `${source.slice(0, start)}${replacement.text}${source.slice(end)}`;\n }\n\n return source;\n}\n\nfunction collectOxcReactiveAliasReplacements(\n node: unknown,\n parent: Record<string, unknown> | undefined,\n parentKey: string | undefined,\n aliases: ReadonlyMap<string, string>,\n shadowed: ReadonlySet<string>,\n replacements: ReactiveAliasReplacement[],\n): void {\n const object = readObject(node);\n\n if (typeof object.type !== \"string\") {\n return;\n }\n\n if (object.type.startsWith(\"TS\")) {\n return;\n }\n\n if (\n object.type === \"Identifier\" &&\n typeof object.name === \"string\" &&\n !shadowed.has(object.name) &&\n isOxcReactiveAliasReference(object, parent, parentKey)\n ) {\n const replacement = aliases.get(object.name);\n const start = readNumber(object.start);\n const end = readNumber(object.end);\n\n if (replacement !== undefined && start !== undefined && end !== undefined) {\n replacements.push({\n end,\n start,\n text: isOxcShorthandPropertyValue(object, parent)\n ? `${object.name}: (${replacement})`\n : `(${replacement})`,\n });\n }\n return;\n }\n\n if (isOxcFunctionNode(object)) {\n const functionShadowed = new Set(shadowed);\n collectOxcBindingNames(object.id, functionShadowed);\n for (const parameter of readArray(object.params)) {\n collectOxcBindingNames(parameter, functionShadowed);\n }\n collectOxcReactiveAliasReplacements(\n object.body,\n object,\n \"body\",\n aliases,\n addOxcBlockBindingNames(object.body, functionShadowed),\n replacements,\n );\n return;\n }\n\n const childShadowed =\n object.type === \"BlockStatement\" || object.type === \"Program\"\n ? addOxcBlockBindingNames(object, new Set(shadowed))\n : shadowed;\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n if (key === \"id\" && isOxcDeclarationWithId(object)) {\n continue;\n }\n\n if (key === \"params\" && isOxcFunctionNode(object)) {\n continue;\n }\n\n if (key === \"key\" && isOxcNonComputedKey(object)) {\n continue;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n collectOxcReactiveAliasReplacements(\n item,\n object,\n key,\n aliases,\n childShadowed,\n replacements,\n );\n }\n continue;\n }\n\n if (typeof value === \"object\" && value !== null) {\n collectOxcReactiveAliasReplacements(value, object, key, aliases, childShadowed, replacements);\n }\n }\n}\n\nfunction isOxcReactiveAliasReference(\n node: Record<string, unknown>,\n parent: Record<string, unknown> | undefined,\n parentKey: string | undefined,\n): boolean {\n if (parent === undefined) {\n return true;\n }\n\n if (parent.type === \"MemberExpression\" && parentKey === \"property\" && parent.computed !== true) {\n return false;\n }\n\n if (parentKey === \"id\" && isOxcDeclarationWithId(parent)) {\n return false;\n }\n\n if (parentKey === \"params\" && isOxcFunctionNode(parent)) {\n return false;\n }\n\n if (parentKey === \"key\" && isOxcNonComputedKey(parent)) {\n return isOxcShorthandPropertyValue(node, parent);\n }\n\n if (\n (parent.type === \"BreakStatement\" ||\n parent.type === \"ContinueStatement\" ||\n parent.type === \"LabeledStatement\") &&\n parentKey === \"label\"\n ) {\n return false;\n }\n\n return true;\n}\n\nfunction isOxcShorthandPropertyValue(\n node: Record<string, unknown>,\n parent: Record<string, unknown> | undefined,\n): boolean {\n const key = readObject(parent?.key);\n return (\n parent !== undefined &&\n (parent.type === \"Property\" || parent.type === \"ObjectProperty\") &&\n parent.shorthand === true &&\n parent.value === node &&\n readNumber(key.start) === readNumber(node.start) &&\n readNumber(key.end) === readNumber(node.end)\n );\n}\n\nfunction isOxcNonComputedKey(node: Record<string, unknown>): boolean {\n return (\n (node.type === \"Property\" ||\n node.type === \"ObjectProperty\" ||\n node.type === \"PropertyDefinition\" ||\n node.type === \"MethodDefinition\") &&\n node.computed !== true\n );\n}\n\nfunction isOxcDeclarationWithId(node: Record<string, unknown>): boolean {\n return (\n node.type === \"VariableDeclarator\" ||\n node.type === \"FunctionDeclaration\" ||\n node.type === \"FunctionExpression\" ||\n node.type === \"ClassDeclaration\" ||\n node.type === \"ClassExpression\"\n );\n}\n\nfunction isOxcFunctionNode(node: Record<string, unknown>): boolean {\n return (\n node.type === \"ArrowFunctionExpression\" ||\n node.type === \"FunctionDeclaration\" ||\n node.type === \"FunctionExpression\"\n );\n}\n\nfunction addOxcBlockBindingNames(node: unknown, shadowed: Set<string>): ReadonlySet<string> {\n const object = readObject(node);\n const body = readArray(object.body);\n\n if (body.length === 0) {\n return shadowed;\n }\n\n for (const statement of body) {\n collectOxcStatementBindingNames(statement, shadowed);\n }\n\n return shadowed;\n}\n\nfunction collectOxcStatementBindingNames(node: unknown, names: Set<string>): void {\n const object = readObject(node);\n\n if (object.type === \"VariableDeclaration\") {\n for (const declaration of readArray(object.declarations)) {\n collectOxcBindingNames(readObject(declaration).id, names);\n }\n return;\n }\n\n if (object.type === \"FunctionDeclaration\" || object.type === \"ClassDeclaration\") {\n collectOxcBindingNames(object.id, names);\n }\n}\n\nfunction collectOxcBindingNames(node: unknown, names: Set<string>): void {\n const object = readObject(node);\n\n if (object.type === \"Identifier\" && typeof object.name === \"string\") {\n names.add(object.name);\n return;\n }\n\n if (object.type === \"RestElement\") {\n collectOxcBindingNames(object.argument, names);\n return;\n }\n\n if (object.type === \"AssignmentPattern\") {\n collectOxcBindingNames(object.left, names);\n return;\n }\n\n if (object.type === \"ArrayPattern\") {\n for (const element of readArray(object.elements)) {\n collectOxcBindingNames(element, names);\n }\n return;\n }\n\n if (object.type === \"ObjectPattern\") {\n for (const property of readArray(object.properties)) {\n collectOxcBindingNames(readObject(property).value ?? readObject(property).argument, names);\n }\n }\n}\n\nfunction collectOxcFunctionLocalBindings(\n functionNode: Record<string, unknown>,\n names: Set<string>,\n): void {\n collectOxcBindingNames(functionNode.id, names);\n\n for (const parameter of readArray(functionNode.params)) {\n collectOxcBindingNames(parameter, names);\n }\n\n collectOxcLocalBindingsFromNode(readObject(functionNode.body), names);\n}\n\nfunction collectOxcLocalBindingsFromNode(node: unknown, names: Set<string>): void {\n const object = readObject(node);\n\n if (typeof object.type !== \"string\" || object.type.startsWith(\"TS\")) {\n return;\n }\n\n if (object.type === \"VariableDeclaration\") {\n for (const declaration of readArray(object.declarations)) {\n collectOxcBindingNames(readObject(declaration).id, names);\n }\n } else if (object.type === \"FunctionDeclaration\" || object.type === \"ClassDeclaration\") {\n collectOxcBindingNames(object.id, names);\n return;\n } else if (object.type === \"ForOfStatement\" || object.type === \"ForInStatement\") {\n const left = readObject(object.left);\n const declarations = readArray(left.declarations);\n collectOxcBindingNames(\n declarations.length > 0 ? readObject(declarations[0]).id : object.left,\n names,\n );\n } else if (object.type === \"ForStatement\") {\n collectOxcLocalBindingsFromNode(object.init, names);\n } else if (isOxcFunctionNode(object)) {\n return;\n }\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n collectOxcLocalBindingsFromNode(item, names);\n }\n continue;\n }\n\n if (typeof value === \"object\" && value !== null) {\n collectOxcLocalBindingsFromNode(value, names);\n }\n }\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" ? value : undefined;\n}\n\nexport function markOxcRenderValueExpressions(\n nodes: readonly JsxNodeIr[],\n names: Set<string>,\n renderMode: \"dynamic\" | \"html\" = \"dynamic\",\n): void {\n if (names.size === 0) {\n return;\n }\n\n for (const node of nodes) {\n if (node.kind === \"expr\" && names.has(node.code)) {\n node.renderMode = renderMode;\n continue;\n }\n\n if (node.kind === \"conditional\") {\n markOxcRenderValueExpressions(node.whenTrue, names, renderMode);\n markOxcRenderValueExpressions(node.whenFalse, names, renderMode);\n continue;\n }\n\n if (node.kind === \"list\") {\n markOxcRenderValueExpressions(node.children, names, renderMode);\n continue;\n }\n\n if (node.kind === \"fragment\" || node.kind === \"element\" || node.kind === \"component\") {\n markOxcRenderValueExpressions(node.children, names, renderMode);\n }\n }\n}\n\nexport function isOxcRenderValueExpression(expression: Record<string, unknown>): boolean {\n if (isOxcRendererCallExpression(expression)) {\n return true;\n }\n\n if (expression.type !== \"MemberExpression\") {\n return false;\n }\n\n const object = readObject(expression.object);\n const property = readObject(expression.property);\n\n return (\n object.type === \"Identifier\" &&\n object.name === \"props\" &&\n typeof property.name === \"string\" &&\n [\"children\", \"fallback\", \"header\", \"sidebar\", \"element\"].includes(property.name)\n );\n}\n\nfunction isOxcRendererCallExpression(expression: Record<string, unknown>): boolean {\n if (expression.type !== \"CallExpression\") {\n return false;\n }\n\n const callee = readObject(expression.callee);\n\n return (\n callee.type === \"Identifier\" &&\n typeof callee.name === \"string\" &&\n /^render[A-Z0-9_$]/.test(callee.name)\n );\n}\n\nexport function containsOxcJsxSyntax(node: Record<string, unknown>): boolean {\n if (node.type === \"JSXElement\" || node.type === \"JSXFragment\") {\n return true;\n }\n\n return Object.values(node).some((value) =>\n Array.isArray(value)\n ? value.some((item) => containsOxcJsxSyntax(readObject(item)))\n : typeof value === \"object\" && value !== null && containsOxcJsxSyntax(readObject(value)),\n );\n}\n\nfunction isJsxLikeInitializer(node: Record<string, unknown>): boolean {\n if (node.type === \"JSXElement\" || node.type === \"JSXFragment\") return true;\n if (node.type === \"ConditionalExpression\") {\n return (\n isJsxLikeInitializer(readObject(node.consequent)) ||\n isJsxLikeInitializer(readObject(node.alternate))\n );\n }\n if (node.type === \"LogicalExpression\") {\n return (\n isJsxLikeInitializer(readObject(node.left)) || isJsxLikeInitializer(readObject(node.right))\n );\n }\n if (node.type === \"ArrayExpression\") {\n return readArray(node.elements).some((element) => {\n const object = readObject(element);\n return Object.keys(object).length > 0 && isJsxLikeInitializer(object);\n });\n }\n if (node.type === \"ObjectExpression\") {\n return false;\n }\n return containsOxcJsxSyntax(node);\n}\n\nfunction isBindingReassigned(statements: readonly unknown[], name: string): boolean {\n for (const statement of statements) {\n if (containsAssignmentTo(readObject(statement), name)) return true;\n }\n return false;\n}\n\nfunction isOxcReactiveReadExpression(expression: Record<string, unknown>): boolean {\n if (expression.type !== \"CallExpression\") {\n return false;\n }\n\n const callee = readObject(expression.callee);\n\n if (callee.type !== \"MemberExpression\" || callee.computed === true || callee.optional === true) {\n return false;\n }\n\n const property = readObject(callee.property);\n\n return property.type === \"Identifier\" && property.name === \"get\";\n}\n\nfunction isOxcReactiveAliasExpression(expression: Record<string, unknown>): boolean {\n const state = analyzeOxcReactiveAliasExpression(expression);\n return state.safe && state.reactive;\n}\n\nfunction isOxcReactiveDerivedAliasExpression(\n expression: Record<string, unknown>,\n reactiveDerivedFunctions: ReadonlySet<string>,\n): boolean {\n if (reactiveDerivedFunctions.size === 0) {\n return false;\n }\n\n const unwrappedExpression = unwrapOxcParentheses(expression);\n\n if (unwrappedExpression.type !== \"CallExpression\") {\n return false;\n }\n\n if (readArray(unwrappedExpression.arguments).length !== 0) {\n return false;\n }\n\n const callee = readObject(unwrappedExpression.callee);\n\n return (\n callee.type === \"Identifier\" &&\n typeof callee.name === \"string\" &&\n reactiveDerivedFunctions.has(callee.name)\n );\n}\n\nfunction isOxcReactiveDerivedFunction(functionNode: Record<string, unknown>): boolean {\n if (readArray(functionNode.params).length !== 0) {\n return false;\n }\n\n const localBindings = new Set<string>();\n collectOxcFunctionLocalBindings(functionNode, localBindings);\n const usage = analyzeOxcReactiveDerivedFunctionUsage(\n readObject(functionNode.body),\n localBindings,\n );\n\n return usage.reactive && usage.safe;\n}\n\nfunction analyzeOxcReactiveDerivedFunctionUsage(\n node: unknown,\n localBindings: ReadonlySet<string>,\n): ReactiveAliasExpressionState {\n const object = readObject(node);\n\n if (typeof object.type !== \"string\" || object.type.startsWith(\"TS\")) {\n return { reactive: false, safe: true };\n }\n\n if (isOxcFunctionNode(object)) {\n return { reactive: false, safe: true };\n }\n\n if (object.type === \"CallExpression\") {\n const callee = readObject(object.callee);\n const member = callee.type === \"MemberExpression\" ? callee : undefined;\n const property = readObject(member?.property);\n const owner = readObject(member?.object);\n const propertyName =\n member?.computed === true\n ? undefined\n : typeof property.name === \"string\"\n ? property.name\n : undefined;\n const ownerName = owner.type === \"Identifier\" ? owner.name : undefined;\n\n if (propertyName === \"get\" && typeof ownerName === \"string\" && !localBindings.has(ownerName)) {\n return mergeReactiveAliasStates([\n { reactive: true, safe: true },\n ...readArray(object.arguments).map((argument) =>\n analyzeOxcReactiveDerivedFunctionUsage(argument, localBindings),\n ),\n ]);\n }\n\n if (\n propertyName !== undefined &&\n typeof ownerName === \"string\" &&\n !localBindings.has(ownerName) &&\n isLikelyMutatingMethodName(propertyName)\n ) {\n return { reactive: false, safe: false };\n }\n }\n\n const states: ReactiveAliasExpressionState[] = [];\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n if (Array.isArray(value)) {\n states.push(\n ...value.map((item) => analyzeOxcReactiveDerivedFunctionUsage(item, localBindings)),\n );\n continue;\n }\n\n if (typeof value === \"object\" && value !== null) {\n states.push(analyzeOxcReactiveDerivedFunctionUsage(value, localBindings));\n }\n }\n\n return mergeReactiveAliasStates(states);\n}\n\nfunction mergeReactiveAliasStates(\n states: readonly ReactiveAliasExpressionState[],\n): ReactiveAliasExpressionState {\n return states.reduce<ReactiveAliasExpressionState>(\n (merged, state) => ({\n reactive: merged.reactive || state.reactive,\n safe: merged.safe && state.safe,\n }),\n { reactive: false, safe: true },\n );\n}\n\nfunction isLikelyMutatingMethodName(name: string): boolean {\n return (\n name === \"set\" ||\n name === \"delete\" ||\n name === \"clear\" ||\n name === \"push\" ||\n name === \"pop\" ||\n name === \"shift\" ||\n name === \"unshift\" ||\n name === \"splice\" ||\n name === \"sort\" ||\n name === \"reverse\"\n );\n}\n\nfunction analyzeOxcReactiveAliasExpression(\n expression: Record<string, unknown>,\n): ReactiveAliasExpressionState {\n const unwrappedExpression = unwrapOxcParentheses(expression);\n\n if (\n unwrappedExpression.type === \"Literal\" ||\n unwrappedExpression.type === \"Identifier\" ||\n unwrappedExpression.type === \"ThisExpression\"\n ) {\n return { reactive: false, safe: true };\n }\n\n if (isOxcReactiveReadExpression(unwrappedExpression)) {\n return { reactive: true, safe: true };\n }\n\n if (unwrappedExpression.type === \"ChainExpression\") {\n return analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.expression));\n }\n\n if (\n unwrappedExpression.type === \"TSAsExpression\" ||\n unwrappedExpression.type === \"TSSatisfiesExpression\" ||\n unwrappedExpression.type === \"TSNonNullExpression\" ||\n unwrappedExpression.type === \"TSInstantiationExpression\" ||\n unwrappedExpression.type === \"TypeCastExpression\"\n ) {\n return analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.expression));\n }\n\n if (unwrappedExpression.type === \"MemberExpression\") {\n const objectState = analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.object));\n const propertyState =\n unwrappedExpression.computed === true\n ? analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.property))\n : { reactive: false, safe: true };\n\n return {\n reactive: objectState.reactive || propertyState.reactive,\n safe: objectState.safe && propertyState.safe,\n };\n }\n\n if (unwrappedExpression.type === \"UnaryExpression\") {\n return analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.argument));\n }\n\n if (\n unwrappedExpression.type === \"BinaryExpression\" ||\n unwrappedExpression.type === \"LogicalExpression\"\n ) {\n const leftState = analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.left));\n const rightState = analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.right));\n\n return {\n reactive: leftState.reactive || rightState.reactive,\n safe: leftState.safe && rightState.safe,\n };\n }\n\n if (unwrappedExpression.type === \"ConditionalExpression\") {\n const testState = analyzeOxcReactiveAliasExpression(readObject(unwrappedExpression.test));\n const consequentState = analyzeOxcReactiveAliasExpression(\n readObject(unwrappedExpression.consequent),\n );\n const alternateState = analyzeOxcReactiveAliasExpression(\n readObject(unwrappedExpression.alternate),\n );\n\n return {\n reactive: testState.reactive || consequentState.reactive || alternateState.reactive,\n safe: testState.safe && consequentState.safe && alternateState.safe,\n };\n }\n\n return { reactive: false, safe: false };\n}\n\nfunction containsAssignmentTo(node: Record<string, unknown>, name: string): boolean {\n if (isOxcFunctionNode(node) && oxcFunctionShadowsName(node, name)) {\n return false;\n }\n\n if (node.type === \"AssignmentExpression\") {\n const left = readObject(node.left);\n if (left.type === \"Identifier\" && left.name === name) return true;\n }\n if (node.type === \"UpdateExpression\") {\n const argument = readObject(node.argument);\n if (argument.type === \"Identifier\" && argument.name === name) return true;\n }\n for (const value of Object.values(node)) {\n if (Array.isArray(value)) {\n for (const item of value) {\n if (\n typeof item === \"object\" &&\n item !== null &&\n containsAssignmentTo(readObject(item), name)\n ) {\n return true;\n }\n }\n } else if (typeof value === \"object\" && value !== null) {\n if (containsAssignmentTo(readObject(value), name)) return true;\n }\n }\n return false;\n}\n\nfunction oxcFunctionShadowsName(functionNode: Record<string, unknown>, name: string): boolean {\n const localBindings = new Set<string>();\n collectOxcFunctionLocalBindings(functionNode, localBindings);\n return localBindings.has(name);\n}\n\nfunction collectOxcPushJsxBindingNames(statements: readonly unknown[], names: Set<string>): void {\n for (const statement of statements) {\n const object = readObject(statement);\n\n if (object.type === \"ForOfStatement\" || object.type === \"ForStatement\") {\n collectOxcPushJsxBindingNames(readArray(readObject(object.body).body), names);\n continue;\n }\n\n const expression = readObject(object.expression);\n\n if (object.type !== \"ExpressionStatement\" || expression.type !== \"CallExpression\") {\n continue;\n }\n\n const callee = readObject(expression.callee);\n const argument = unwrapOxcParentheses(readObject(readArray(expression.arguments)[0]));\n\n if (\n callee.type !== \"MemberExpression\" ||\n readObject(callee.property).name !== \"push\" ||\n !containsOxcJsxSyntax(argument)\n ) {\n continue;\n }\n\n const target = readObject(callee.object);\n\n if (typeof target.name === \"string\") {\n names.add(target.name);\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oxc-runtime-emit.d.ts","sourceRoot":"","sources":["../src/oxc-runtime-emit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgC,SAAS,EAAE,MAAM,SAAS,CAAC;AAUvE,eAAO,MAAM,+CAA+C,oCACzB,CAAC;AAIpC,wBAAgB,mCAAmC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEtE;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,CAMlF;
|
|
1
|
+
{"version":3,"file":"oxc-runtime-emit.d.ts","sourceRoot":"","sources":["../src/oxc-runtime-emit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgC,SAAS,EAAE,MAAM,SAAS,CAAC;AAUvE,eAAO,MAAM,+CAA+C,oCACzB,CAAC;AAIpC,wBAAgB,mCAAmC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEtE;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,CAMlF;AAuLD,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,CAUlF"}
|
package/dist/oxc-runtime-emit.js
CHANGED
|
@@ -27,7 +27,11 @@ function emitOxcServerStringNode(node) {
|
|
|
27
27
|
}
|
|
28
28
|
if (node.kind === "list") {
|
|
29
29
|
const parameters = emitOxcListParameters(node);
|
|
30
|
-
|
|
30
|
+
const valueExpression = emitOxcServerStringChildren(node.children);
|
|
31
|
+
if (node.bodyStatements === undefined || node.bodyStatements.length === 0) {
|
|
32
|
+
return `(${node.itemsCode}).map((${parameters}) => ${valueExpression}).join("")`;
|
|
33
|
+
}
|
|
34
|
+
return `(${node.itemsCode}).map((${parameters}) => {\n${node.bodyStatements.map((statement) => ` ${statement}`).join("\n")}\n return ${valueExpression};\n}).join("")`;
|
|
31
35
|
}
|
|
32
36
|
if (node.kind === "fragment") {
|
|
33
37
|
return emitOxcServerStringChildren(node.children);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oxc-runtime-emit.js","sourceRoot":"","sources":["../src/oxc-runtime-emit.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AttributeIr, ComponentPropIr, JsxNodeIr } from \"./ir.js\";\nimport {\n htmlAttributeName,\n isDangerousHtmlAttribute,\n isStaticUrlValueUnsafe,\n isUrlAttribute,\n isVoidHtmlElement,\n} from \"./emit-server-shared.js\";\nimport { escapeHtmlAttribute } from \"@reckona/mreact-shared/html-escape\";\n\nexport const oxcServerStringReactNodeRenderHelperPlaceholder =\n \"__mreactRenderReactNodeToString\";\n\nlet currentOxcServerStringUrlSafeHelperName = \"_urlAttrSafe\";\n\nexport function setOxcServerStringUrlSafeHelperName(name: string): void {\n currentOxcServerStringUrlSafeHelperName = name;\n}\n\nexport function emitOxcServerStringChildren(children: readonly JsxNodeIr[]): string {\n if (children.length === 0) {\n return '\"\"';\n }\n\n return children.map(emitOxcServerStringNode).join(\" + \");\n}\n\nfunction emitOxcServerStringNode(node: JsxNodeIr): string {\n if (node.kind === \"text\") {\n return JSON.stringify(node.value);\n }\n\n if (node.kind === \"expr\") {\n return `_escapeHtml(${node.code})`;\n }\n\n if (node.kind === \"conditional\") {\n const whenTrue = emitOxcServerStringChildren(node.whenTrue);\n const whenFalse = emitOxcServerStringChildren(node.whenFalse);\n\n return node.conditionValueName === undefined\n ? `((${node.conditionCode}) ? ${whenTrue} : ${whenFalse})`\n : `(() => { const ${node.conditionValueName} = (${node.conditionCode}); return ${node.conditionValueName} ? ${whenTrue} : ${whenFalse}; })()`;\n }\n\n if (node.kind === \"list\") {\n const parameters = emitOxcListParameters(node);\n return `(${node.itemsCode}).map((${parameters}) => ${emitOxcServerStringChildren(node.children)}).join(\"\")`;\n }\n\n if (node.kind === \"fragment\") {\n return emitOxcServerStringChildren(node.children);\n }\n\n if (node.kind === \"component\") {\n const props = emitOxcServerComponentProps(node.props, node.children);\n if (node.runtime === \"compat\") {\n return `${oxcServerStringReactNodeRenderHelperPlaceholder}(${node.name}, ${props})`;\n }\n return `${node.name}(${props})`;\n }\n\n if (node.kind === \"async-boundary\") {\n return '\"\"';\n }\n\n const attrs = node.attributes\n .map((attr) => emitOxcServerAttribute(node.tagName, attr))\n .join(\" + \");\n const open =\n attrs === \"\"\n ? JSON.stringify(`<${node.tagName}>`)\n : `${JSON.stringify(`<${node.tagName}`)} + ${attrs} + \">\"`;\n if (isVoidHtmlElement(node.tagName)) {\n return open;\n }\n\n return `${open} + ${emitOxcServerStringChildren(node.children)} + ${JSON.stringify(`</${node.tagName}>`)}`;\n}\n\nfunction emitOxcServerComponentProps(\n props: readonly ComponentPropIr[],\n children: readonly JsxNodeIr[],\n): string {\n const entries = props.map((prop) => {\n if (prop.kind === \"spread-prop\") {\n return `...(${prop.code})`;\n }\n\n if (prop.kind === \"render-prop\") {\n return `${emitOxcCompatObjectPropName(prop.name)}: ${emitOxcServerStringChildren(prop.children)}`;\n }\n\n return `${emitOxcCompatObjectPropName(prop.name)}: (${prop.code})`;\n });\n\n if (children.length > 0) {\n entries.push(`children: ${emitOxcServerStringChildren(children)}`);\n }\n\n return `{ ${entries.join(\", \")} }`;\n}\n\nfunction emitOxcServerAttribute(tagName: string, attr: AttributeIr): string {\n if (attr.kind === \"spread-attr\" || attr.kind === \"event\") {\n return '\"\"';\n }\n\n if (attr.name === \"key\" || attr.name === \"dangerouslySetInnerHTML\") {\n return '\"\"';\n }\n\n const htmlName = htmlAttributeNameForElement(tagName, attr.name);\n\n if (attr.kind === \"static-attr\") {\n if (isUrlAttribute(htmlName) && isStaticUrlValueUnsafe(htmlName, attr.value)) {\n return '\"\"';\n }\n\n if (isDangerousHtmlAttribute(htmlName)) {\n return '\"\"';\n }\n\n return JSON.stringify(` ${htmlName}=\"${escapeHtmlAttribute(attr.value)}\"`);\n }\n\n if (attr.kind === \"dynamic-attr\") {\n if (isDangerousHtmlAttribute(htmlName)) {\n return `(() => { const _value = (${attr.code}); if (_value == null || _value === false) return \"\"; if (typeof _value === \"object\" && _value !== null && typeof _value.__html === \"string\") return ${JSON.stringify(` ${htmlName}=\"`)} + _escapeHtml(_value.__html) + ${JSON.stringify('\"')}; return \"\"; })()`;\n }\n\n if (isUrlAttribute(htmlName)) {\n return `(() => { const _value = (${attr.code}); if (_value == null || _value === false) return \"\"; const _checked = ${currentOxcServerStringUrlSafeHelperName}(${JSON.stringify(htmlName)}, _value === true ? \"\" : _value); return _checked === undefined ? \"\" : ${JSON.stringify(` ${htmlName}=\"`)} + _escapeHtml(_checked) + ${JSON.stringify('\"')}; })()`;\n }\n\n return `${JSON.stringify(` ${htmlName}=\"`)} + _escapeHtml(${attr.code}) + ${JSON.stringify('\"')}`;\n }\n\n return '\"\"';\n}\n\nfunction htmlAttributeNameForElement(tagName: string, name: string): string {\n if (tagName === \"input\") {\n if (name === \"defaultValue\") {\n return \"value\";\n }\n\n if (name === \"defaultChecked\") {\n return \"checked\";\n }\n }\n\n return htmlAttributeName(name);\n}\n\nfunction emitOxcCompatObjectNode(node: JsxNodeIr): string {\n if (node.kind === \"text\") {\n return JSON.stringify(node.value);\n }\n\n if (node.kind === \"expr\") {\n return `(${node.code})`;\n }\n\n if (node.kind === \"conditional\") {\n const whenTrue = emitOxcCompatObjectChildren(node.whenTrue);\n const whenFalse = emitOxcCompatObjectChildren(node.whenFalse);\n\n return node.conditionValueName === undefined\n ? `(${node.conditionCode}) ? ${whenTrue} : ${whenFalse}`\n : `(() => { const ${node.conditionValueName} = (${node.conditionCode}); return ${node.conditionValueName} ? ${whenTrue} : ${whenFalse}; })()`;\n }\n\n if (node.kind === \"list\") {\n const parameters = emitOxcListParameters(node);\n return `(${node.itemsCode}).map((${parameters}) => ${emitOxcCompatObjectChildren(node.children)})`;\n }\n\n if (node.kind === \"fragment\") {\n return emitOxcCompatObjectElement('Symbol.for(\"react.fragment\")', [], node.children);\n }\n\n if (node.kind === \"component\") {\n return emitOxcCompatObjectElement(\n node.name,\n node.props.map(emitOxcCompatObjectComponentProp),\n node.children,\n node.keyCode,\n );\n }\n\n if (node.kind === \"async-boundary\") {\n return \"null\";\n }\n\n return emitOxcCompatObjectElement(\n JSON.stringify(node.tagName),\n node.attributes.map(emitOxcCompatObjectAttribute),\n node.children,\n node.keyCode,\n );\n}\n\nexport function emitOxcCompatObjectChildren(children: readonly JsxNodeIr[]): string {\n if (children.length === 0) {\n return \"null\";\n }\n\n if (children.length === 1) {\n return emitOxcCompatObjectNode(children[0] as JsxNodeIr);\n }\n\n return `[${children.map(emitOxcCompatObjectNode).join(\", \")}]`;\n}\n\nfunction emitOxcCompatObjectElement(\n typeCode: string,\n propEntries: readonly string[],\n children: readonly JsxNodeIr[],\n explicitKeyCode?: string,\n): string {\n const entries = [...propEntries];\n\n if (children.length > 0) {\n entries.push(`children: ${emitOxcCompatObjectChildren(children)}`);\n }\n\n const keyExpression =\n explicitKeyCode === undefined\n ? \"_props.key === undefined ? null : String(_props.key)\"\n : `String(${explicitKeyCode})`;\n\n return [\n \"(() => {\",\n ` const _props = { ${entries.join(\", \")} };`,\n ` const _key = ${keyExpression};`,\n \" const _ref = _props.ref ?? null;\",\n \" delete _props.key;\",\n \" delete _props.ref;\",\n ' return { $$typeof: Symbol.for(\"react.transitional.element\"),',\n ` type: ${typeCode},`,\n \" key: _key,\",\n \" ref: _ref,\",\n \" props: _props };\",\n \"})()\",\n ].join(\"\\n\");\n}\n\nfunction emitOxcListParameters(node: Extract<JsxNodeIr, { kind: \"list\" }>): string {\n return [node.itemName, node.indexName, node.arrayName]\n .filter((name): name is string => name !== undefined)\n .join(\", \");\n}\n\nfunction emitOxcCompatObjectAttribute(attr: AttributeIr): string {\n if (attr.kind === \"spread-attr\") {\n return `...(${attr.code})`;\n }\n\n if (attr.kind === \"static-attr\") {\n return `${emitOxcCompatObjectPropName(attr.name)}: ${JSON.stringify(attr.value)}`;\n }\n\n if (attr.kind === \"dynamic-attr\") {\n return `${emitOxcCompatObjectPropName(attr.name)}: (${attr.code})`;\n }\n\n return `${emitOxcCompatObjectPropName(attr.name)}: ${attr.code}`;\n}\n\nfunction emitOxcCompatObjectComponentProp(prop: ComponentPropIr): string {\n if (prop.kind === \"spread-prop\") {\n return `...(${prop.code})`;\n }\n\n if (prop.kind === \"render-prop\") {\n return `${emitOxcCompatObjectPropName(prop.name)}: ${emitOxcCompatObjectChildren(prop.children)}`;\n }\n\n return `${emitOxcCompatObjectPropName(prop.name)}: (${prop.code})`;\n}\n\nfunction emitOxcCompatObjectPropName(name: string): string {\n return /^[A-Za-z_$][\\w$]*$/.test(name) ? name : JSON.stringify(name);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"oxc-runtime-emit.js","sourceRoot":"","sources":["../src/oxc-runtime-emit.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AttributeIr, ComponentPropIr, JsxNodeIr } from \"./ir.js\";\nimport {\n htmlAttributeName,\n isDangerousHtmlAttribute,\n isStaticUrlValueUnsafe,\n isUrlAttribute,\n isVoidHtmlElement,\n} from \"./emit-server-shared.js\";\nimport { escapeHtmlAttribute } from \"@reckona/mreact-shared/html-escape\";\n\nexport const oxcServerStringReactNodeRenderHelperPlaceholder =\n \"__mreactRenderReactNodeToString\";\n\nlet currentOxcServerStringUrlSafeHelperName = \"_urlAttrSafe\";\n\nexport function setOxcServerStringUrlSafeHelperName(name: string): void {\n currentOxcServerStringUrlSafeHelperName = name;\n}\n\nexport function emitOxcServerStringChildren(children: readonly JsxNodeIr[]): string {\n if (children.length === 0) {\n return '\"\"';\n }\n\n return children.map(emitOxcServerStringNode).join(\" + \");\n}\n\nfunction emitOxcServerStringNode(node: JsxNodeIr): string {\n if (node.kind === \"text\") {\n return JSON.stringify(node.value);\n }\n\n if (node.kind === \"expr\") {\n return `_escapeHtml(${node.code})`;\n }\n\n if (node.kind === \"conditional\") {\n const whenTrue = emitOxcServerStringChildren(node.whenTrue);\n const whenFalse = emitOxcServerStringChildren(node.whenFalse);\n\n return node.conditionValueName === undefined\n ? `((${node.conditionCode}) ? ${whenTrue} : ${whenFalse})`\n : `(() => { const ${node.conditionValueName} = (${node.conditionCode}); return ${node.conditionValueName} ? ${whenTrue} : ${whenFalse}; })()`;\n }\n\n if (node.kind === \"list\") {\n const parameters = emitOxcListParameters(node);\n const valueExpression = emitOxcServerStringChildren(node.children);\n if (node.bodyStatements === undefined || node.bodyStatements.length === 0) {\n return `(${node.itemsCode}).map((${parameters}) => ${valueExpression}).join(\"\")`;\n }\n\n return `(${node.itemsCode}).map((${parameters}) => {\\n${node.bodyStatements.map((statement) => ` ${statement}`).join(\"\\n\")}\\n return ${valueExpression};\\n}).join(\"\")`;\n }\n\n if (node.kind === \"fragment\") {\n return emitOxcServerStringChildren(node.children);\n }\n\n if (node.kind === \"component\") {\n const props = emitOxcServerComponentProps(node.props, node.children);\n if (node.runtime === \"compat\") {\n return `${oxcServerStringReactNodeRenderHelperPlaceholder}(${node.name}, ${props})`;\n }\n return `${node.name}(${props})`;\n }\n\n if (node.kind === \"async-boundary\") {\n return '\"\"';\n }\n\n const attrs = node.attributes\n .map((attr) => emitOxcServerAttribute(node.tagName, attr))\n .join(\" + \");\n const open =\n attrs === \"\"\n ? JSON.stringify(`<${node.tagName}>`)\n : `${JSON.stringify(`<${node.tagName}`)} + ${attrs} + \">\"`;\n if (isVoidHtmlElement(node.tagName)) {\n return open;\n }\n\n return `${open} + ${emitOxcServerStringChildren(node.children)} + ${JSON.stringify(`</${node.tagName}>`)}`;\n}\n\nfunction emitOxcServerComponentProps(\n props: readonly ComponentPropIr[],\n children: readonly JsxNodeIr[],\n): string {\n const entries = props.map((prop) => {\n if (prop.kind === \"spread-prop\") {\n return `...(${prop.code})`;\n }\n\n if (prop.kind === \"render-prop\") {\n return `${emitOxcCompatObjectPropName(prop.name)}: ${emitOxcServerStringChildren(prop.children)}`;\n }\n\n return `${emitOxcCompatObjectPropName(prop.name)}: (${prop.code})`;\n });\n\n if (children.length > 0) {\n entries.push(`children: ${emitOxcServerStringChildren(children)}`);\n }\n\n return `{ ${entries.join(\", \")} }`;\n}\n\nfunction emitOxcServerAttribute(tagName: string, attr: AttributeIr): string {\n if (attr.kind === \"spread-attr\" || attr.kind === \"event\") {\n return '\"\"';\n }\n\n if (attr.name === \"key\" || attr.name === \"dangerouslySetInnerHTML\") {\n return '\"\"';\n }\n\n const htmlName = htmlAttributeNameForElement(tagName, attr.name);\n\n if (attr.kind === \"static-attr\") {\n if (isUrlAttribute(htmlName) && isStaticUrlValueUnsafe(htmlName, attr.value)) {\n return '\"\"';\n }\n\n if (isDangerousHtmlAttribute(htmlName)) {\n return '\"\"';\n }\n\n return JSON.stringify(` ${htmlName}=\"${escapeHtmlAttribute(attr.value)}\"`);\n }\n\n if (attr.kind === \"dynamic-attr\") {\n if (isDangerousHtmlAttribute(htmlName)) {\n return `(() => { const _value = (${attr.code}); if (_value == null || _value === false) return \"\"; if (typeof _value === \"object\" && _value !== null && typeof _value.__html === \"string\") return ${JSON.stringify(` ${htmlName}=\"`)} + _escapeHtml(_value.__html) + ${JSON.stringify('\"')}; return \"\"; })()`;\n }\n\n if (isUrlAttribute(htmlName)) {\n return `(() => { const _value = (${attr.code}); if (_value == null || _value === false) return \"\"; const _checked = ${currentOxcServerStringUrlSafeHelperName}(${JSON.stringify(htmlName)}, _value === true ? \"\" : _value); return _checked === undefined ? \"\" : ${JSON.stringify(` ${htmlName}=\"`)} + _escapeHtml(_checked) + ${JSON.stringify('\"')}; })()`;\n }\n\n return `${JSON.stringify(` ${htmlName}=\"`)} + _escapeHtml(${attr.code}) + ${JSON.stringify('\"')}`;\n }\n\n return '\"\"';\n}\n\nfunction htmlAttributeNameForElement(tagName: string, name: string): string {\n if (tagName === \"input\") {\n if (name === \"defaultValue\") {\n return \"value\";\n }\n\n if (name === \"defaultChecked\") {\n return \"checked\";\n }\n }\n\n return htmlAttributeName(name);\n}\n\nfunction emitOxcCompatObjectNode(node: JsxNodeIr): string {\n if (node.kind === \"text\") {\n return JSON.stringify(node.value);\n }\n\n if (node.kind === \"expr\") {\n return `(${node.code})`;\n }\n\n if (node.kind === \"conditional\") {\n const whenTrue = emitOxcCompatObjectChildren(node.whenTrue);\n const whenFalse = emitOxcCompatObjectChildren(node.whenFalse);\n\n return node.conditionValueName === undefined\n ? `(${node.conditionCode}) ? ${whenTrue} : ${whenFalse}`\n : `(() => { const ${node.conditionValueName} = (${node.conditionCode}); return ${node.conditionValueName} ? ${whenTrue} : ${whenFalse}; })()`;\n }\n\n if (node.kind === \"list\") {\n const parameters = emitOxcListParameters(node);\n return `(${node.itemsCode}).map((${parameters}) => ${emitOxcCompatObjectChildren(node.children)})`;\n }\n\n if (node.kind === \"fragment\") {\n return emitOxcCompatObjectElement('Symbol.for(\"react.fragment\")', [], node.children);\n }\n\n if (node.kind === \"component\") {\n return emitOxcCompatObjectElement(\n node.name,\n node.props.map(emitOxcCompatObjectComponentProp),\n node.children,\n node.keyCode,\n );\n }\n\n if (node.kind === \"async-boundary\") {\n return \"null\";\n }\n\n return emitOxcCompatObjectElement(\n JSON.stringify(node.tagName),\n node.attributes.map(emitOxcCompatObjectAttribute),\n node.children,\n node.keyCode,\n );\n}\n\nexport function emitOxcCompatObjectChildren(children: readonly JsxNodeIr[]): string {\n if (children.length === 0) {\n return \"null\";\n }\n\n if (children.length === 1) {\n return emitOxcCompatObjectNode(children[0] as JsxNodeIr);\n }\n\n return `[${children.map(emitOxcCompatObjectNode).join(\", \")}]`;\n}\n\nfunction emitOxcCompatObjectElement(\n typeCode: string,\n propEntries: readonly string[],\n children: readonly JsxNodeIr[],\n explicitKeyCode?: string,\n): string {\n const entries = [...propEntries];\n\n if (children.length > 0) {\n entries.push(`children: ${emitOxcCompatObjectChildren(children)}`);\n }\n\n const keyExpression =\n explicitKeyCode === undefined\n ? \"_props.key === undefined ? null : String(_props.key)\"\n : `String(${explicitKeyCode})`;\n\n return [\n \"(() => {\",\n ` const _props = { ${entries.join(\", \")} };`,\n ` const _key = ${keyExpression};`,\n \" const _ref = _props.ref ?? null;\",\n \" delete _props.key;\",\n \" delete _props.ref;\",\n ' return { $$typeof: Symbol.for(\"react.transitional.element\"),',\n ` type: ${typeCode},`,\n \" key: _key,\",\n \" ref: _ref,\",\n \" props: _props };\",\n \"})()\",\n ].join(\"\\n\");\n}\n\nfunction emitOxcListParameters(node: Extract<JsxNodeIr, { kind: \"list\" }>): string {\n return [node.itemName, node.indexName, node.arrayName]\n .filter((name): name is string => name !== undefined)\n .join(\", \");\n}\n\nfunction emitOxcCompatObjectAttribute(attr: AttributeIr): string {\n if (attr.kind === \"spread-attr\") {\n return `...(${attr.code})`;\n }\n\n if (attr.kind === \"static-attr\") {\n return `${emitOxcCompatObjectPropName(attr.name)}: ${JSON.stringify(attr.value)}`;\n }\n\n if (attr.kind === \"dynamic-attr\") {\n return `${emitOxcCompatObjectPropName(attr.name)}: (${attr.code})`;\n }\n\n return `${emitOxcCompatObjectPropName(attr.name)}: ${attr.code}`;\n}\n\nfunction emitOxcCompatObjectComponentProp(prop: ComponentPropIr): string {\n if (prop.kind === \"spread-prop\") {\n return `...(${prop.code})`;\n }\n\n if (prop.kind === \"render-prop\") {\n return `${emitOxcCompatObjectPropName(prop.name)}: ${emitOxcCompatObjectChildren(prop.children)}`;\n }\n\n return `${emitOxcCompatObjectPropName(prop.name)}: (${prop.code})`;\n}\n\nfunction emitOxcCompatObjectPropName(name: string): string {\n return /^[A-Za-z_$][\\w$]*$/.test(name) ? name : JSON.stringify(name);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oxc-transform.d.ts","sourceRoot":"","sources":["../src/oxc-transform.ts"],"names":[],"mappings":"AAKA,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA0B7D;
|
|
1
|
+
{"version":3,"file":"oxc-transform.d.ts","sourceRoot":"","sources":["../src/oxc-transform.ts"],"names":[],"mappings":"AAKA,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA0B7D;AA+BD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAmB1D;AAED,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAoBzE"}
|
package/dist/oxc-transform.js
CHANGED
|
@@ -32,11 +32,17 @@ function rememberStrippedTypeScript(source, stripped) {
|
|
|
32
32
|
stripTypeScriptCache.set(source, stripped);
|
|
33
33
|
}
|
|
34
34
|
function needsTypeScriptStripping(source) {
|
|
35
|
+
// This is intentionally an over-approximation: false positives cost an oxc
|
|
36
|
+
// pass, but false negatives leak TypeScript syntax into emitted JavaScript.
|
|
35
37
|
return (/\bimport\s+type\b/.test(source) ||
|
|
38
|
+
/\bexport\s+type\b/.test(source) ||
|
|
36
39
|
/\btype\s+[A-Za-z_$][\w$]*\b/.test(source) ||
|
|
37
40
|
/\binterface\s+[A-Za-z_$][\w$]*\b/.test(source) ||
|
|
41
|
+
/<[^>\n]+\bextends\b[^>\n]*>\s*\(/.test(source) ||
|
|
38
42
|
/\b[A-Za-z_$][\w$.]*\s*<[^>\n]+>\s*\(/.test(source) ||
|
|
39
43
|
/\bas\s+(?:const|[A-Za-z_$][\w$]*)\b/.test(source) ||
|
|
44
|
+
/\bsatisfies\s+[A-Za-z_$][\w$<>,\s|&.[\]?]*/.test(source) ||
|
|
45
|
+
/[A-Za-z_$)\]}]\s*!\s*(?=[,.;)\]}])/.test(source) ||
|
|
40
46
|
/:\s*[A-Za-z_$][\w$<>,\s|&.[\]?]*(?=[,)=;{])/.test(source));
|
|
41
47
|
}
|
|
42
48
|
export function transformJsxWithOxc(source) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oxc-transform.js","sourceRoot":"","sources":["../src/oxc-transform.ts"],"names":[],"mappings":"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","sourcesContent":["import { transformSync } from \"oxc-transform\";\n\nconst stripTypeScriptCache = new Map<string, string>();\nconst stripTypeScriptCacheLimit = 512;\n\nexport function stripTypeScriptWithOxc(source: string): string {\n if (!needsTypeScriptStripping(source)) {\n return source.trimEnd();\n }\n\n const cached = stripTypeScriptCache.get(source);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const result = transformSync(\"snippet.tsx\", source, {\n lang: \"tsx\",\n sourceType: \"module\",\n target: \"es2022\",\n jsx: \"preserve\",\n typescript: {\n onlyRemoveTypeImports: true,\n },\n });\n\n const stripped = result.errors.length > 0 ? source.trimEnd() : result.code.trimEnd();\n\n rememberStrippedTypeScript(source, stripped);\n\n return stripped;\n}\n\nfunction rememberStrippedTypeScript(source: string, stripped: string): void {\n if (stripTypeScriptCache.size >= stripTypeScriptCacheLimit) {\n const first = stripTypeScriptCache.keys().next().value;\n\n if (first !== undefined) {\n stripTypeScriptCache.delete(first);\n }\n }\n\n stripTypeScriptCache.set(source, stripped);\n}\n\nfunction needsTypeScriptStripping(source: string): boolean {\n return (\n /\\bimport\\s+type\\b/.test(source) ||\n /\\btype\\s+[A-Za-z_$][\\w$]*\\b/.test(source) ||\n /\\binterface\\s+[A-Za-z_$][\\w$]*\\b/.test(source) ||\n /\\b[A-Za-z_$][\\w$.]*\\s*<[^>\\n]+>\\s*\\(/.test(source) ||\n /\\bas\\s+(?:const|[A-Za-z_$][\\w$]*)\\b/.test(source) ||\n /:\\s*[A-Za-z_$][\\w$<>,\\s|&.[\\]?]*(?=[,)=;{])/.test(source)\n );\n}\n\nexport function transformJsxWithOxc(source: string): string {\n const result = transformSync(\"snippet.tsx\", source, {\n lang: \"tsx\",\n sourceType: \"module\",\n target: \"es2022\",\n jsx: {\n runtime: \"automatic\",\n importSource: \"@reckona/mreact-compat\",\n },\n typescript: {\n onlyRemoveTypeImports: true,\n },\n });\n\n if (result.errors.length > 0 && result.code === \"\") {\n return stripTypeScriptWithOxc(source);\n }\n\n return result.code.trimEnd();\n}\n\nexport function transformJsxToCreateElementWithOxc(source: string): string {\n const result = transformSync(\"snippet.tsx\", source, {\n lang: \"tsx\",\n sourceType: \"module\",\n target: \"es2022\",\n jsx: {\n runtime: \"classic\",\n pragma: \"createElement\",\n pragmaFrag: \"Fragment\",\n },\n typescript: {\n onlyRemoveTypeImports: true,\n },\n });\n\n if (result.errors.length > 0 && result.code === \"\") {\n return stripTypeScriptWithOxc(source);\n }\n\n return result.code.trimEnd();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"oxc-transform.js","sourceRoot":"","sources":["../src/oxc-transform.ts"],"names":[],"mappings":"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","sourcesContent":["import { transformSync } from \"oxc-transform\";\n\nconst stripTypeScriptCache = new Map<string, string>();\nconst stripTypeScriptCacheLimit = 512;\n\nexport function stripTypeScriptWithOxc(source: string): string {\n if (!needsTypeScriptStripping(source)) {\n return source.trimEnd();\n }\n\n const cached = stripTypeScriptCache.get(source);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const result = transformSync(\"snippet.tsx\", source, {\n lang: \"tsx\",\n sourceType: \"module\",\n target: \"es2022\",\n jsx: \"preserve\",\n typescript: {\n onlyRemoveTypeImports: true,\n },\n });\n\n const stripped = result.errors.length > 0 ? source.trimEnd() : result.code.trimEnd();\n\n rememberStrippedTypeScript(source, stripped);\n\n return stripped;\n}\n\nfunction rememberStrippedTypeScript(source: string, stripped: string): void {\n if (stripTypeScriptCache.size >= stripTypeScriptCacheLimit) {\n const first = stripTypeScriptCache.keys().next().value;\n\n if (first !== undefined) {\n stripTypeScriptCache.delete(first);\n }\n }\n\n stripTypeScriptCache.set(source, stripped);\n}\n\nfunction needsTypeScriptStripping(source: string): boolean {\n // This is intentionally an over-approximation: false positives cost an oxc\n // pass, but false negatives leak TypeScript syntax into emitted JavaScript.\n return (\n /\\bimport\\s+type\\b/.test(source) ||\n /\\bexport\\s+type\\b/.test(source) ||\n /\\btype\\s+[A-Za-z_$][\\w$]*\\b/.test(source) ||\n /\\binterface\\s+[A-Za-z_$][\\w$]*\\b/.test(source) ||\n /<[^>\\n]+\\bextends\\b[^>\\n]*>\\s*\\(/.test(source) ||\n /\\b[A-Za-z_$][\\w$.]*\\s*<[^>\\n]+>\\s*\\(/.test(source) ||\n /\\bas\\s+(?:const|[A-Za-z_$][\\w$]*)\\b/.test(source) ||\n /\\bsatisfies\\s+[A-Za-z_$][\\w$<>,\\s|&.[\\]?]*/.test(source) ||\n /[A-Za-z_$)\\]}]\\s*!\\s*(?=[,.;)\\]}])/.test(source) ||\n /:\\s*[A-Za-z_$][\\w$<>,\\s|&.[\\]?]*(?=[,)=;{])/.test(source)\n );\n}\n\nexport function transformJsxWithOxc(source: string): string {\n const result = transformSync(\"snippet.tsx\", source, {\n lang: \"tsx\",\n sourceType: \"module\",\n target: \"es2022\",\n jsx: {\n runtime: \"automatic\",\n importSource: \"@reckona/mreact-compat\",\n },\n typescript: {\n onlyRemoveTypeImports: true,\n },\n });\n\n if (result.errors.length > 0 && result.code === \"\") {\n return stripTypeScriptWithOxc(source);\n }\n\n return result.code.trimEnd();\n}\n\nexport function transformJsxToCreateElementWithOxc(source: string): string {\n const result = transformSync(\"snippet.tsx\", source, {\n lang: \"tsx\",\n sourceType: \"module\",\n target: \"es2022\",\n jsx: {\n runtime: \"classic\",\n pragma: \"createElement\",\n pragmaFrag: \"Fragment\",\n },\n typescript: {\n onlyRemoveTypeImports: true,\n },\n });\n\n if (result.errors.length > 0 && result.code === \"\") {\n return stripTypeScriptWithOxc(source);\n }\n\n return result.code.trimEnd();\n}\n"]}
|