@reckona/mreact-compiler 0.0.131 → 0.0.134
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-client.js +6 -1
- package/dist/emit-client.js.map +1 -1
- package/dist/emit-server-shared.d.ts +1 -0
- package/dist/emit-server-shared.d.ts.map +1 -1
- package/dist/emit-server-shared.js +11 -0
- package/dist/emit-server-shared.js.map +1 -1
- package/dist/emit-server-stream.d.ts.map +1 -1
- package/dist/emit-server-stream.js +18 -6
- package/dist/emit-server-stream.js.map +1 -1
- package/dist/emit-server.d.ts.map +1 -1
- package/dist/emit-server.js +18 -6
- package/dist/emit-server.js.map +1 -1
- package/package.json +2 -2
- package/src/emit-client.ts +6 -1
- package/src/emit-server-shared.ts +15 -0
- package/src/emit-server-stream.ts +19 -5
- package/src/emit-server.ts +19 -5
package/dist/emit-client.js
CHANGED
|
@@ -179,7 +179,12 @@ function emitClientBoundaryHelper(name) {
|
|
|
179
179
|
propsElement.type = "application/json";
|
|
180
180
|
propsElement.setAttribute("data-mreact-client-boundary-props", name);
|
|
181
181
|
try {
|
|
182
|
-
propsElement.textContent = JSON.stringify(props ?? {})
|
|
182
|
+
propsElement.textContent = JSON.stringify(props ?? {})
|
|
183
|
+
.replaceAll("&", "\\\\u0026")
|
|
184
|
+
.replaceAll("<", "\\\\u003c")
|
|
185
|
+
.replaceAll(">", "\\\\u003e")
|
|
186
|
+
.replaceAll("\\u2028", "\\\\u2028")
|
|
187
|
+
.replaceAll("\\u2029", "\\\\u2029");
|
|
183
188
|
} catch {
|
|
184
189
|
placeholder.setAttribute("data-mreact-client-boundary-nonserializable", "true");
|
|
185
190
|
propsElement.textContent = "{}";
|
package/dist/emit-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit-client.js","sourceRoot":"","sources":["../src/emit-client.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,mBAAmB,IAAI,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAOvF,MAAM,UAAU,UAAU,CAAC,EAAY;IACrC,MAAM,OAAO,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,WAAW,GAAG,0BAA0B,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC;IACjF,MAAM,UAAU,GACd,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACzF,MAAM,WAAW,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;IACxC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAChD,MAAM,wBAAwB,GAAG,uBAAuB,CAAC,EAAE,CAAC;QAC1D,CAAC,CAAC,eAAe,CAAC,wBAAwB,EAAE,EAAE,CAAC,kBAAkB,CAAC;QAClE,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,oBAAoB,GACxB,wBAAwB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,wBAAwB,CAAC,wBAAwB,CAAC,CAAC;IACnG,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU;SAC7B,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CACjB,aAAa,CAAC,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,wBAAwB,CAAC,CACjF;SACA,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhB,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,oBAAoB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,UAAU,IAAI;QAC1H,OAAO;KACR,CAAC;AACJ,CAAC;AAcD,SAAS,0BAA0B,CACjC,EAAY,EACZ,UAA6B;IAE7B,MAAM,SAAS,GAAG,mBAAmB,CAAC;QACpC,GAAG,EAAE,CAAC,kBAAkB;QACxB,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC;YACtC,SAAS,CAAC,IAAI;YACd,SAAS,CAAC,UAAU;YACpB,GAAG,SAAS,CAAC,YAAY;SAC1B,CAAC;KACH,CAAC,CAAC;IACH,MAAM,WAAW,GAAuB;QACtC,QAAQ,EAAE,UAAU;QACpB,SAAS,EAAE,WAAW;QACtB,QAAQ,EAAE,UAAU;QACpB,eAAe,EAAE,iBAAiB;QAClC,QAAQ,EAAE,UAAU;QACpB,UAAU,EAAE,YAAY;QACxB,cAAc,EAAE,gBAAgB;QAChC,aAAa,EAAE,eAAe;KAC/B,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,SAA8B,CAAC;QAE9C,IAAI,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3C,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,qBAAqB,CAC5B,OAAwB,EACxB,WAA+B;IAE/B,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;QACjD,MAAM,MAAM,GAAG,SAA8B,CAAC;QAC9C,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAEtC,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,OAAO,SAAS,EAAE,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,OAAO,YAAY,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,yCAAyC,CAAC;AACvF,CAAC;AAED,SAAS,eAAe,CAAC,EAAY;IACnC,OAAO,EAAE,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,oBAAoB,CAAC,EAAY;IACxC,OAAO,EAAE,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,cAAc,CAAC,EAAY;IAClC,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEvD,KAAK,MAAM,SAAS,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;QACtC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;YAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACzB,UAAU,CAAC,GAAG,CACZ,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAC7D,CAAC;YACJ,CAAC;YAED,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBAChC,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAClC,CAAC;YAED,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACzB,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC7B,CAAC;YAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC5B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACnC,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;wBACjC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBAC7B,CAAC;oBAED,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;wBAChC,UAAU,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;oBACpC,CAAC;oBAED,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBAC1B,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;oBAC9B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,uBAAuB,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,OAAO;QACL;YACE,MAAM,EAAE,8BAA8B;YACtC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE;SAC1C;KACF,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAe;IAC9C,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACxD,OAAO,6BAA6B,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9B,OAAO,2BAA2B,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAe;IAC1C,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9B,OAAO,2BAA2B,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO,gCAAgC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAChC,OAAO,6BAA6B,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACnC,OAAO,CACL,gCAAgC,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC/C,gCAAgC,CAAC,IAAI,CAAC,mBAAmB,IAAI,EAAE,CAAC;YAChE,gCAAgC,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAC3D,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gCAAgC,CAAC,QAA8B;IACtE,OAAO,QAAQ,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,6BAA6B,CAAC,IAAe;IACpD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAChC,OAAO,CACL,gCAAgC,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC/C,gCAAgC,CAAC,IAAI,CAAC,SAAS,CAAC,CACjD,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC7B,OAAO,gCAAgC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9B,OAAO,2BAA2B,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,2BAA2B,CAAC,IAA+C;IAClF,OAAO,CACL,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACvB,IAAI,CAAC,IAAI,KAAK,aAAa;QAC3B,gCAAgC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAChD;QACD,gCAAgC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAChD,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,EAAY;IAC3C,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;QACtC,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;YAC7B,IACE,IAAI,CAAC,IAAI,KAAK,WAAW;gBACzB,IAAI,CAAC,eAAe,KAAK,SAAS;gBAClC,+BAA+B,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAC9D,CAAC;gBACD,KAAK,GAAG,IAAI,CAAC;YACf,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAY;IAC5C,OAAO,YAAY,IAAI;;;;;;;;;;;;;;;EAevB,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CACpB,SAAsB,EACtB,eAA8B,EAC9B,WAA+B,EAC/B,wBAA4C;IAE5C,MAAM,YAAY,GAAG,eAAe,CAClC,QAAQ,GAAG,SAAS,CAAC,IAAI,EACzB,SAAS,CAAC,YAAY,CACvB,CAAC;IACF,MAAM,SAAS,GAAG,mBAAmB,CAAC,CAAC,GAAG,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;IACjF,MAAM,IAAI,GAAG,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC;IAC3E,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEnD,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,wBAAwB,EAAE,CAAC;QAC/F,OAAO;YACL,GAAG,SAAS,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,YAAY,SAAS,CAAC,IAAI,IAAI,UAAU,KAAK;YAC7F,GAAG,IAAI;YACP,YAAY,iBAAiB,CAC3B,SAAS,CAAC,IAAI,CAAC,IAAI,EACnB,SAAS,CAAC,IAAI,CAAC,KAAK,EACpB,SAAS,CAAC,IAAI,CAAC,QAAQ,EACvB,KAAK,EACL,SAAS,CAAC,IAAI,CAAC,eAAe,KAAK,SAAS;gBAC1C,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CACrF,GAAG;YACJ,GAAG;SACJ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,wBAAwB,EAAE,CAAC;QAC/F,MAAM,YAAY,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QACxC,OAAO;YACL,GAAG,SAAS,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,YAAY,SAAS,CAAC,IAAI,IAAI,UAAU,KAAK;YACpJ,GAAG,IAAI;YACP,WAAW,YAAY,uCAAuC;YAC9D,WAAW,UAAU,gCAAgC;YACrD,KAAK,YAAY,WAAW,UAAU,IAAI;YAC1C,KAAK,WAAW,CAAC,aAAa,IAAI,YAAY,KAAK,UAAU,WAAW,6BAA6B,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChI,YAAY,YAAY,GAAG;YAC3B,GAAG;SACJ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED,MAAM,YAAY,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE;QAChD,YAAY,EAAE,SAAS;QACvB,SAAS,EAAE,CAAC;QACZ,WAAW;QACX,wBAAwB;KACzB,CAAC,CAAC;IACH,OAAO;QACL,SAAS,YAAY,MAAM,WAAW,CAAC,cAAc,IAAI,YAAY,IAAI;QACzE,GAAG,SAAS,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,YAAY,SAAS,CAAC,IAAI,IAAI,UAAU,KAAK;QACpJ,GAAG,IAAI;QACP,WAAW,YAAY,MAAM,YAAY,KAAK;QAC9C,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU;YAChC,CAAC,CAAC,WAAW,QAAQ,MAAM,YAAY,GAAG;YAC1C,CAAC,CAAC,WAAW,QAAQ,MAAM,YAAY,cAAc;QACvD,KAAK;QACL,YAAY,QAAQ,GAAG;QACvB,GAAG;KACJ;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAe;IACvC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACxD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACnC,OAAO,8BAA8B,CAAC;IACxC,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC;SAC7C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;SAC1D,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE9D,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG,KAAK,IAAI,QAAQ,KAAK,IAAI,CAAC,OAAO,GAAG,CAAC;AAClE,CAAC;AASD,SAAS,SAAS,CAChB,IAAe,EACf,IAAY,EACZ,KAAqB;IAErB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IACE,IAAI,CAAC,IAAI,KAAK,SAAS;QACvB,IAAI,CAAC,IAAI,KAAK,UAAU;QACxB,IAAI,CAAC,IAAI,KAAK,WAAW,EACzB,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9B,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACtD,KAAK,CAAC,IAAI,CACR,WAAW,YAAY,MAAM,iBAAiB,CAC5C,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,QAAQ,EACb,KAAK,EACL,IAAI,CAAC,eAAe,KAAK,SAAS;YAChC,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CACjE,GAAG,CACL,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,SAAS,YAAY,sBAAsB,YAAY,mBAAmB,CAAC,CAAC;QACvF,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,YAAY,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,gBAAgB,YAAY,IAAI,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACjC,KAAK,CAAC,IAAI,CACR,KAAK,KAAK,CAAC,WAAW,CAAC,QAAQ,IAAI,IAAI,MAAM,IAAI,CAAC,IAAI,aAAa,IAAI,CAAC,IAAI,KAAK,CAClF,CAAC;YACJ,CAAC;YAED,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBAChC,KAAK,CAAC,IAAI,CACR,KAAK,KAAK,CAAC,WAAW,CAAC,eAAe,IAAI,IAAI,YAAY,IAAI,CAAC,IAAI,KAAK,CACzE,CAAC;YACJ,CAAC;YAED,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC1B,KAAK,CAAC,IAAI,CACR,KAAK,KAAK,CAAC,WAAW,CAAC,SAAS,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,MAAM,IAAI,CAAC,IAAI,IAAI,CAChF,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC/B,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,QAAQ,CAAC;QAC3D,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC;QACjC,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,WAAW,kBAAkB,iBAAiB,IAAI,eAAe,CAAC,CAAC;IAChF,CAAC;IAED,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,oBAAoB,GAAG,KAAK,CAAC;IAEjC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,aAAa,GAAG,IAAI,CAAC;YACrB,UAAU,IAAI,CAAC,CAAC;YAChB,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GACb,kBAAkB,KAAK,SAAS;YAChC,CACE,KAAK,CAAC,IAAI,KAAK,WAAW;gBAC1B,CAAC,oBAAoB;gBACrB,uBAAuB,CAAC,KAAK,CAAC;gBAC9B,CAAC,aAAa,CACf;YACC,CAAC,CAAC,GAAG,IAAI,eAAe,UAAU,GAAG;YACrC,CAAC,CAAC,GAAG,kBAAkB,IAAI,UAAU,GAAG,CAAC;QAE7C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBACnC,KAAK,CAAC,IAAI,CACR,KAAK,KAAK,CAAC,WAAW,CAAC,aAAa,IAAI,IAAI,KAAK,SAAS,YAAY,KAAK,CAAC,IAAI,KAAK,CACtF,CAAC;gBACF,UAAU,IAAI,CAAC,CAAC;gBAChB,SAAS;YACX,CAAC;YAED,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,SAAS,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;YAC/D,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,WAAW,OAAO,iCAAiC,CAAC,CAAC;YAChE,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,gBAAgB,OAAO,IAAI,CAAC,CAAC;YACtD,KAAK,CAAC,IAAI,CACR,KAAK,KAAK,CAAC,WAAW,CAAC,QAAQ,IAAI,OAAO,YAAY,KAAK,CAAC,IAAI,KAAK,CACtE,CAAC;YACF,UAAU,IAAI,CAAC,CAAC;YAChB,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CACR,KAAK,KAAK,CAAC,WAAW,CAAC,aAAa,IAAI,IAAI,KAAK,SAAS,WAAW,oCAAoC,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAC5H,CAAC;YACF,UAAU,IAAI,CAAC,CAAC;YAChB,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC7C,MAAM,aAAa,GAAa,EAAE,CAAC;YAEnC,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAChC,aAAa,CAAC,IAAI,CAAC,SAAS,UAAU,SAAS,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;YACnE,CAAC;YAED,IACE,KAAK,CAAC,OAAO,KAAK,SAAS;gBAC3B,yBAAyB,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,EAChD,CAAC;gBACD,aAAa,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YACnD,CAAC;YAED,MAAM,OAAO,GACX,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACxE,KAAK,CAAC,IAAI,CACR,KAAK,KAAK,CAAC,WAAW,CAAC,QAAQ,IAAI,IAAI,KAAK,SAAS,YAAY,KAAK,CAAC,SAAS,MAAM,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,GAAG,OAAO,IAAI,CAC/I,CAAC;YACF,UAAU,IAAI,CAAC,CAAC;YAChB,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;YAC5D,UAAU,IAAI,CAAC,CAAC;YAChB,SAAS;QACX,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/B,oBAAoB,GAAG,IAAI,CAAC;QAC9B,CAAC;QACD,UAAU,IAAI,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,yBAAyB,CAChC,IAA0C,EAC1C,QAAgB;IAEhB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,yBAAyB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAe,EAAE,QAAgB;IAClE,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,CACL,yBAAyB,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;gBACjD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;oBACjC,IAAI,SAAS,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;wBACrC,OAAO,yBAAyB,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAC7D,CAAC;oBAED,IAAI,SAAS,CAAC,IAAI,KAAK,cAAc,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBACpE,OAAO,yBAAyB,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAC7D,CAAC;oBAED,OAAO,KAAK,CAAC;gBACf,CAAC,CAAC;gBACF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,yBAAyB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAC1E,CAAC;QACJ,KAAK,WAAW;YACd,OAAO,CACL,yBAAyB,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;gBACjD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;oBACvB,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;wBAChC,OAAO,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBACxD,CAAC;oBAED,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;wBAChC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,yBAAyB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;oBACnF,CAAC;oBAED,OAAO,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACxD,CAAC,CAAC;gBACF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,yBAAyB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAC1E,CAAC;QACJ,KAAK,UAAU;YACb,OAAO,CACL,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CACtC,yBAAyB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAC/C,KAAK,IAAI;gBACV,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,yBAAyB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAC1E,CAAC;QACJ,KAAK,aAAa;YAChB,OAAO,CACL,yBAAyB,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;gBACvD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,yBAAyB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBACzE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,yBAAyB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAC3E,CAAC;QACJ,KAAK,MAAM;YACT,OAAO,CACL,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC;gBACnD,yBAAyB,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;gBACjD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,yBAAyB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAC1E,CAAC;QACJ,KAAK,MAAM;YACT,OAAO,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACxD,KAAK,gBAAgB;YACnB,OAAO,CACL,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC;gBACnD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,yBAAyB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBACzE,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CACxC,yBAAyB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAC3C,IAAI,KAAK,CAAC;gBACX,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAClC,yBAAyB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAC3C,IAAI,KAAK,CAAC,CACZ,CAAC;QACJ,KAAK,MAAM;YACT,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAChC,IAAwB,EACxB,QAAgB;IAEhB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACxE,OAAO,IAAI,MAAM,CAAC,MAAM,eAAe,8BAA8B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAgB;IAC/C,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,WAAW;QAC1B,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC;QACzD,KAAK,CAAC,IAAI,KAAK,aAAa;QAC5B,KAAK,CAAC,IAAI,KAAK,MAAM;QACrB,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAChC,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,QAA8B;IAC9D,OAAO,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,yBAAyB,CAChC,QAAqB,EACrB,KAAqB;IAErB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,6BAA6B,CAAC,QAAQ,CAAC,CAAC,CAAc,EAAE,KAAK,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,IAAI,QAAQ;SAChB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,6BAA6B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;SAC3D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACnB,CAAC;AAED,SAAS,sBAAsB,CAC7B,IAAoD,EACpD,SAAiB,EACjB,KAAqB;IAErB,uEAAuE;IACvE,0EAA0E;IAC1E,0EAA0E;IAC1E,2EAA2E;IAC3E,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACjC,MAAM,cAAc,GAAG,yBAAyB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvE,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEpD,OAAO;QACL,KAAK;QACL,uDAAuD;QACvD,+EAA+E,cAAc,IAAI;QACjG,sCAAsC;QACtC,eAAe,SAAS,uBAAuB;QAC/C,uCAAuC,cAAc,GAAG;QACxD,4CAA4C;QAC5C,WAAW,SAAS,sCAAsC;QAC1D,SAAS;QACT,OAAO;QACP,KAAK;KACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,6BAA6B,CACpC,IAAe,EACf,KAAqB;IAErB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC;IAC1B,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9B,OAAO,iBAAiB,CACtB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,QAAQ,EACb,KAAK,EACL,IAAI,CAAC,eAAe,KAAK,SAAS;YAChC,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CACjE,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxE,MAAM,eAAe,GAAG,yBAAyB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAExE,OAAO;gBACL,UAAU;gBACV,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC3D,YAAY,eAAe,GAAG;gBAC9B,MAAM;aACP,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;QAED,OAAO,yBAAyB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAChC,OAAO,oCAAoC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAElD,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,UAAU,WAAW,IAAI,CAAC,SAAS,MAAM,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,GAAG,OAAO,GAAG,CAAC;IAC9H,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEzD,OAAO;QACL,UAAU;QACV,WAAW,YAAY,MAAM,KAAK,CAAC,WAAW,CAAC,cAAc,IAAI,YAAY,IAAI;QACjF,WAAW,YAAY,MAAM,YAAY,KAAK;QAC9C,WAAW,QAAQ,MAAM,YAAY,cAAc;QACnD,GAAG,UAAU;QACb,YAAY,QAAQ,GAAG;QACvB,MAAM;KACP,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,oCAAoC,CAC3C,IAAiD,EACjD,KAAqB;IAErB,MAAM,QAAQ,GAAG,yBAAyB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAEnE,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,KAAK,IAAI,CAAC,aAAa,OAAO,QAAQ,MAAM,SAAS,GAAG,CAAC;IAClE,CAAC;IAED,OAAO,kBAAkB,IAAI,CAAC,kBAAkB,OAAO,IAAI,CAAC,aAAa,aAAa,IAAI,CAAC,kBAAkB,MAAM,QAAQ,MAAM,SAAS,QAAQ,CAAC;AACrJ,CAAC;AAED,SAAS,gBAAgB,CACvB,IAA0C,EAC1C,UAAkB,EAClB,KAAqB;IAErB,MAAM,eAAe,GAAG,yBAAyB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAExE,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1E,OAAO,IAAI,UAAU,QAAQ,eAAe,EAAE,CAAC;IACjD,CAAC;IAED,OAAO,IAAI,UAAU,WAAW,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,eAAe,QAAQ,CAAC;AAC/I,CAAC;AAED,SAAS,eAAe,CACtB,IAA0C,EAC1C,UAAkB;IAElB,MAAM,aAAa,GAAa,EAAE,CAAC;IAEnC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,aAAa,CAAC,IAAI,CAAC,SAAS,UAAU,SAAS,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IAClE,CAAC;IAED,IACE,IAAI,CAAC,OAAO,KAAK,SAAS;QAC1B,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EAC9C,CAAC;QACD,aAAa,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/E,CAAC;AAED,SAAS,kBAAkB,CAAC,IAA0C;IACpE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC;SACnD,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC;SACpD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CACxB,IAAY,EACZ,KAAwB,EACxB,QAAqB,EACrB,KAAqB,EACrB,eAAgE;IAEhE,IACE,eAAe,KAAK,SAAS;QAC7B,KAAK,CAAC,wBAAwB,KAAK,SAAS;QAC5C,+BAA+B,CAAC,eAAe,CAAC,QAAQ,CAAC,EACzD,CAAC;QACD,OAAO,GAAG,KAAK,CAAC,wBAAwB,IAAI,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC;IAClI,CAAC;IAED,OAAO,GAAG,IAAI,IAAI,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC;AAC/D,CAAC;AAED,SAAS,eAAe,CACtB,KAAwB,EACxB,QAAqB,EACrB,KAAqB;IAErB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACjC,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YAChC,OAAO,OAAO,IAAI,CAAC,IAAI,GAAG,CAAC;QAC7B,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YAChC,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,yBAAyB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;QAC1F,CAAC;QAED,IAAI,qCAAqC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrD,OAAO,OAAO,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,MAAM,CAAC;QAC7E,CAAC;QAED,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,aAAa,yBAAyB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACrC,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,OAAO,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9E,CAAC;AAED,SAAS,qCAAqC,CAAC,IAAY;IACzD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CAAC,qEAAqE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3F,CAAC;AAED,SAAS,mBAAmB,CAC1B,aAAgC;IAEhC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IAEzC,OAAO,CAAC,QAAgB,EAAE,qBAAwC,EAAE,EAAU,EAAE;QAC9E,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAClD,IAAI,IAAI,GAAG,QAAQ,CAAC;QACpB,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACtD,IAAI,GAAG,GAAG,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC9B,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;QAED,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,+BAA+B,CAAC,QAAgB;IACvD,OAAO,2CAA2C,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACpE,CAAC;AAOD,SAAS,KAAK,CAAC,IAAe,EAAE,EAA6B;IAC3D,EAAE,CAAC,IAAI,CAAC,CAAC;IAET,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAChC,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1D,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBAChC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAClC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACxD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,wEAAwE;IACxE,yEAAyE;IACzE,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACnB,CAAC;QACD,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;YAC3C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC7C,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACrC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import type {\n ComponentPropIr,\n ComponentIr,\n JsxNodeIr,\n ModuleIr,\n} from \"./ir.js\";\nimport type { RuntimeImport } from \"./types.js\";\nimport { escapeHtmlAttribute as escapeHtml } from \"@reckona/mreact-shared/html-escape\";\n\nexport interface EmitResult {\n code: string;\n imports: RuntimeImport[];\n}\n\nexport function emitClient(ir: ModuleIr): EmitResult {\n const imports = collectImports(ir);\n const helperNames = allocateRuntimeHelperNames(ir, imports[0]?.specifiers ?? []);\n const importLine =\n imports[0]?.specifiers.length === 0 ? \"\" : emitRuntimeImportLine(imports, helperNames);\n const userImports = emitUserImports(ir);\n const moduleStatements = emitModuleStatements(ir);\n const moduleAllocator = createNameAllocator([]);\n const clientBoundaryHelperName = hasClientReferenceNodes(ir)\n ? moduleAllocator(\"__mreactClientBoundary\", ir.moduleBindingNames)\n : undefined;\n const clientBoundaryHelper =\n clientBoundaryHelperName === undefined ? \"\" : emitClientBoundaryHelper(clientBoundaryHelperName);\n const components = ir.components\n .map((component) =>\n emitComponent(component, moduleAllocator, helperNames, clientBoundaryHelperName),\n )\n .join(\"\\n\\n\");\n\n return {\n code: `${[importLine, userImports, moduleStatements, clientBoundaryHelper].filter(Boolean).join(\"\\n\")}\\n\\n${components}\\n`,\n imports,\n };\n}\n\ntype RuntimeHelperName =\n | \"bindList\"\n | \"bindEvent\"\n | \"bindProp\"\n | \"bindSpreadProps\"\n | \"bindText\"\n | \"createList\"\n | \"createTemplate\"\n | \"insertDynamic\";\n\ntype RuntimeHelperNames = Record<RuntimeHelperName, string>;\n\nfunction allocateRuntimeHelperNames(\n ir: ModuleIr,\n specifiers: readonly string[],\n): RuntimeHelperNames {\n const allocator = createNameAllocator([\n ...ir.moduleBindingNames,\n ...ir.components.flatMap((component) => [\n component.name,\n component.exportName,\n ...component.bindingNames,\n ]),\n ]);\n const helperNames: RuntimeHelperNames = {\n bindList: \"bindList\",\n bindEvent: \"bindEvent\",\n bindProp: \"bindProp\",\n bindSpreadProps: \"bindSpreadProps\",\n bindText: \"bindText\",\n createList: \"createList\",\n createTemplate: \"createTemplate\",\n insertDynamic: \"insertDynamic\",\n };\n\n for (const specifier of specifiers) {\n const helper = specifier as RuntimeHelperName;\n\n if (ir.moduleBindingNames.includes(helper)) {\n helperNames[helper] = allocator(`_${helper}`);\n }\n }\n\n return helperNames;\n}\n\nfunction emitRuntimeImportLine(\n imports: RuntimeImport[],\n helperNames: RuntimeHelperNames,\n): string {\n const specifiers = imports[0]?.specifiers ?? [\"createTemplate\"];\n const importedNames = specifiers.map((specifier) => {\n const helper = specifier as RuntimeHelperName;\n const localName = helperNames[helper];\n\n return localName === specifier ? specifier : `${specifier} as ${localName}`;\n });\n\n return `import { ${importedNames.join(\", \")} } from \"@reckona/mreact-reactive-dom\";`;\n}\n\nfunction emitUserImports(ir: ModuleIr): string {\n return ir.components.length === 0 ? \"\" : ir.userImports.join(\"\\n\");\n}\n\nfunction emitModuleStatements(ir: ModuleIr): string {\n return ir.components.length === 0 ? \"\" : ir.moduleStatements.join(\"\\n\");\n}\n\nfunction collectImports(ir: ModuleIr): RuntimeImport[] {\n if (ir.components.length === 0) {\n return [];\n }\n\n const specifiers = new Set<string>([\"createTemplate\"]);\n\n for (const component of ir.components) {\n visit(component.root, (node) => {\n if (node.kind === \"expr\") {\n specifiers.add(\n node.renderMode === \"dynamic\" ? \"insertDynamic\" : \"bindText\",\n );\n }\n\n if (node.kind === \"conditional\") {\n specifiers.add(\"insertDynamic\");\n }\n\n if (node.kind === \"list\") {\n specifiers.add(\"bindList\");\n }\n\n if (node.kind === \"element\") {\n for (const attr of node.attributes) {\n if (attr.kind === \"dynamic-attr\") {\n specifiers.add(\"bindProp\");\n }\n\n if (attr.kind === \"spread-attr\") {\n specifiers.add(\"bindSpreadProps\");\n }\n\n if (attr.kind === \"event\") {\n specifiers.add(\"bindEvent\");\n }\n }\n }\n });\n\n if (componentUsesCreateList(component.root)) {\n specifiers.add(\"createList\");\n }\n }\n\n return [\n {\n source: \"@reckona/mreact-reactive-dom\",\n specifiers: Array.from(specifiers).sort(),\n },\n ];\n}\n\nfunction componentUsesCreateList(node: JsxNodeIr): boolean {\n if (node.kind === \"conditional\" || node.kind === \"list\") {\n return renderValueNodeUsesCreateList(node);\n }\n\n if (node.kind === \"component\") {\n return componentCallUsesCreateList(node);\n }\n\n return setupUsesCreateList(node);\n}\n\nfunction setupUsesCreateList(node: JsxNodeIr): boolean {\n if (node.kind === \"component\") {\n return componentCallUsesCreateList(node);\n }\n\n if (node.kind === \"list\") {\n return renderValueChildrenUseCreateList(node.children);\n }\n\n if (node.kind === \"conditional\") {\n return renderValueNodeUsesCreateList(node);\n }\n\n if (node.kind === \"async-boundary\") {\n return (\n renderValueChildrenUseCreateList(node.children) ||\n renderValueChildrenUseCreateList(node.placeholderChildren ?? []) ||\n renderValueChildrenUseCreateList(node.catchChildren ?? [])\n );\n }\n\n if (node.kind === \"element\" || node.kind === \"fragment\") {\n return node.children.some(setupUsesCreateList);\n }\n\n return false;\n}\n\nfunction renderValueChildrenUseCreateList(children: readonly JsxNodeIr[]): boolean {\n return children.some(renderValueNodeUsesCreateList);\n}\n\nfunction renderValueNodeUsesCreateList(node: JsxNodeIr): boolean {\n if (node.kind === \"list\") {\n return true;\n }\n\n if (node.kind === \"conditional\") {\n return (\n renderValueChildrenUseCreateList(node.whenTrue) ||\n renderValueChildrenUseCreateList(node.whenFalse)\n );\n }\n\n if (node.kind === \"fragment\") {\n return renderValueChildrenUseCreateList(node.children);\n }\n\n if (node.kind === \"component\") {\n return componentCallUsesCreateList(node);\n }\n\n if (node.kind === \"element\") {\n return setupUsesCreateList(node);\n }\n\n return false;\n}\n\nfunction componentCallUsesCreateList(node: Extract<JsxNodeIr, { kind: \"component\" }>): boolean {\n return (\n node.props.some((prop) =>\n prop.kind === \"render-prop\" &&\n renderValueChildrenUseCreateList(prop.children),\n ) ||\n renderValueChildrenUseCreateList(node.children)\n );\n}\n\nfunction hasClientReferenceNodes(ir: ModuleIr): boolean {\n return ir.components.some((component) => {\n let found = false;\n visit(component.root, (node) => {\n if (\n node.kind === \"component\" &&\n node.clientReference !== undefined &&\n isCompatClientReferenceModuleId(node.clientReference.moduleId)\n ) {\n found = true;\n }\n });\n return found;\n });\n}\n\nfunction emitClientBoundaryHelper(name: string): string {\n return `function ${name}(name, props) {\n const fragment = document.createDocumentFragment();\n const placeholder = document.createElement(\"template\");\n placeholder.setAttribute(\"data-mreact-client-boundary\", name);\n const propsElement = document.createElement(\"script\");\n propsElement.type = \"application/json\";\n propsElement.setAttribute(\"data-mreact-client-boundary-props\", name);\n try {\n propsElement.textContent = JSON.stringify(props ?? {}).replaceAll(\"<\", \"\\\\\\\\u003c\");\n } catch {\n placeholder.setAttribute(\"data-mreact-client-boundary-nonserializable\", \"true\");\n propsElement.textContent = \"{}\";\n }\n fragment.append(placeholder, propsElement);\n return fragment;\n}`;\n}\n\nfunction emitComponent(\n component: ComponentIr,\n moduleAllocator: NameAllocator,\n helperNames: RuntimeHelperNames,\n clientBoundaryHelperName: string | undefined,\n): string {\n const templateName = moduleAllocator(\n \"_tmpl_\" + component.name,\n component.bindingNames,\n );\n const allocator = createNameAllocator([...component.bindingNames, templateName]);\n const body = component.bodyStatements.map((statement) => ` ${statement}`);\n const parameters = component.parameters.join(\", \");\n\n if (component.root.kind === \"component\") {\n const state = { allocateName: allocator, textIndex: 0, helperNames, clientBoundaryHelperName };\n return [\n `${component.exported === false ? \"\" : \"export \"}function ${component.name}(${parameters}) {`,\n ...body,\n ` return ${emitComponentCall(\n component.root.name,\n component.root.props,\n component.root.children,\n state,\n component.root.clientReference === undefined\n ? undefined\n : { moduleId: component.root.clientReference.moduleId, name: component.root.name },\n )};`,\n `}`,\n ].join(\"\\n\");\n }\n\n if (component.root.kind === \"conditional\") {\n const state = { allocateName: allocator, textIndex: 0, helperNames, clientBoundaryHelperName };\n const fragmentName = allocator(\"_fragment\");\n const markerName = allocator(\"_marker\");\n return [\n `${component.exportDefault === true ? \"export default \" : component.exported === false ? \"\" : \"export \"}function ${component.name}(${parameters}) {`,\n ...body,\n ` const ${fragmentName} = document.createDocumentFragment();`,\n ` const ${markerName} = document.createComment(\"\");`,\n ` ${fragmentName}.append(${markerName});`,\n ` ${helperNames.insertDynamic}(${fragmentName}, ${markerName}, () => ${emitNodeRenderValueExpression(component.root, state)});`,\n ` return ${fragmentName};`,\n `}`,\n ].join(\"\\n\");\n }\n\n const fragmentName = allocator(\"_fragment\");\n const rootName = allocator(\"_root\");\n const templateHtml = JSON.stringify(renderStaticHtml(component.root));\n const setup = emitSetup(component.root, rootName, {\n allocateName: allocator,\n textIndex: 0,\n helperNames,\n clientBoundaryHelperName,\n });\n return [\n `const ${templateName} = ${helperNames.createTemplate}(${templateHtml});`,\n `${component.exportDefault === true ? \"export default \" : component.exported === false ? \"\" : \"export \"}function ${component.name}(${parameters}) {`,\n ...body,\n ` const ${fragmentName} = ${templateName}();`,\n component.root.kind === \"fragment\"\n ? ` const ${rootName} = ${fragmentName};`\n : ` const ${rootName} = ${fragmentName}.firstChild;`,\n setup,\n ` return ${rootName};`,\n `}`,\n ]\n .filter(Boolean)\n .join(\"\\n\");\n}\n\nfunction renderStaticHtml(node: JsxNodeIr): string {\n if (node.kind === \"text\") {\n return escapeHtml(node.value);\n }\n\n if (node.kind === \"expr\") {\n return \"<!---->\";\n }\n\n if (node.kind === \"conditional\" || node.kind === \"list\") {\n return \"<!---->\";\n }\n\n if (node.kind === \"fragment\") {\n return node.children.map(renderStaticHtml).join(\"\");\n }\n\n if (node.kind === \"component\") {\n return \"<!---->\";\n }\n\n if (node.kind === \"async-boundary\") {\n return \"<!--mreact-async-boundary-->\";\n }\n\n const attrs = node.attributes\n .filter((attr) => attr.kind === \"static-attr\")\n .map((attr) => ` ${attr.name}=\"${escapeHtml(attr.value)}\"`)\n .join(\"\");\n const children = node.children.map(renderStaticHtml).join(\"\");\n\n return `<${node.tagName}${attrs}>${children}</${node.tagName}>`;\n}\n\ninterface EmitSetupState {\n allocateName: (baseName: string) => string;\n textIndex: number;\n helperNames: RuntimeHelperNames;\n clientBoundaryHelperName?: string | undefined;\n}\n\nfunction emitSetup(\n node: JsxNodeIr,\n path: string,\n state: EmitSetupState,\n): string {\n const lines: string[] = [];\n\n if (\n node.kind !== \"element\" &&\n node.kind !== \"fragment\" &&\n node.kind !== \"component\"\n ) {\n return \"\";\n }\n\n if (node.kind === \"component\") {\n const componentVar = state.allocateName(\"_component\");\n lines.push(\n ` const ${componentVar} = ${emitComponentCall(\n node.name,\n node.props,\n node.children,\n state,\n node.clientReference === undefined\n ? undefined\n : { moduleId: node.clientReference.moduleId, name: node.name },\n )};`,\n );\n lines.push(` if (${componentVar} == null || typeof ${componentVar} === \"boolean\") {`);\n lines.push(` ${path}.remove();`);\n lines.push(` } else {`);\n lines.push(` ${path}.replaceWith(${componentVar});`);\n lines.push(` }`);\n return lines.join(\"\\n\");\n }\n\n if (node.kind === \"element\") {\n for (const attr of node.attributes) {\n if (attr.kind === \"dynamic-attr\") {\n lines.push(\n ` ${state.helperNames.bindProp}(${path}, \"${attr.name}\", () => (${attr.code}));`,\n );\n }\n\n if (attr.kind === \"spread-attr\") {\n lines.push(\n ` ${state.helperNames.bindSpreadProps}(${path}, () => (${attr.code}));`,\n );\n }\n\n if (attr.kind === \"event\") {\n lines.push(\n ` ${state.helperNames.bindEvent}(${path}, \"${attr.eventName}\", ${attr.code});`,\n );\n }\n }\n }\n\n const children = node.children;\n const stableChildrenName = hasLiveChildListMutation(children)\n ? state.allocateName(\"_children\")\n : undefined;\n let childIndex = 0;\n\n if (stableChildrenName !== undefined) {\n lines.push(` const ${stableChildrenName} = Array.from(${path}.childNodes);`);\n }\n\n let sawStaticText = false;\n let sawComponentMutation = false;\n\n for (const child of children) {\n if (child.kind === \"text\") {\n sawStaticText = true;\n childIndex += 1;\n continue;\n }\n\n const childPath =\n stableChildrenName === undefined ||\n (\n child.kind !== \"component\" &&\n !sawComponentMutation &&\n usesLiveInsertionAnchor(child) &&\n !sawStaticText\n )\n ? `${path}.childNodes[${childIndex}]`\n : `${stableChildrenName}[${childIndex}]`;\n\n if (child.kind === \"expr\") {\n if (child.renderMode === \"dynamic\") {\n lines.push(\n ` ${state.helperNames.insertDynamic}(${path}, ${childPath}, () => (${child.code}));`,\n );\n childIndex += 1;\n continue;\n }\n\n const textVar = state.allocateName(`_text_${state.textIndex}`);\n state.textIndex += 1;\n lines.push(` const ${textVar} = document.createTextNode(\"\");`);\n lines.push(` ${childPath}.replaceWith(${textVar});`);\n lines.push(\n ` ${state.helperNames.bindText}(${textVar}, () => (${child.code}));`,\n );\n childIndex += 1;\n continue;\n }\n\n if (child.kind === \"conditional\") {\n lines.push(\n ` ${state.helperNames.insertDynamic}(${path}, ${childPath}, () => ${emitConditionalRenderValueExpression(child, state)});`,\n );\n childIndex += 1;\n continue;\n }\n\n if (child.kind === \"list\") {\n const parameters = emitListParameters(child);\n const optionEntries: string[] = [];\n\n if (child.keyCode !== undefined) {\n optionEntries.push(`key: (${parameters}) => (${child.keyCode})`);\n }\n\n if (\n child.keyCode !== undefined &&\n listReadsNestedItemObject(child, child.itemName)\n ) {\n optionEntries.push(\"nestedObjectFallback: true\");\n }\n\n const options =\n optionEntries.length === 0 ? \"\" : `, { ${optionEntries.join(\", \")} }`;\n lines.push(\n ` ${state.helperNames.bindList}(${path}, ${childPath}, () => (${child.itemsCode}), ${emitListRenderer(child, parameters, state)}${options});`,\n );\n childIndex += 1;\n continue;\n }\n\n if (child.kind === \"async-boundary\") {\n lines.push(emitAsyncBoundarySetup(child, childPath, state));\n childIndex += 1;\n continue;\n }\n\n lines.push(emitSetup(child, childPath, state));\n if (child.kind === \"component\") {\n sawComponentMutation = true;\n }\n childIndex += 1;\n }\n\n return lines.filter(Boolean).join(\"\\n\");\n}\n\nfunction listReadsNestedItemObject(\n node: Extract<JsxNodeIr, { kind: \"list\" }>,\n itemName: string,\n): boolean {\n return node.children.some((child) => nodeReadsNestedItemObject(child, itemName));\n}\n\nfunction nodeReadsNestedItemObject(node: JsxNodeIr, itemName: string): boolean {\n switch (node.kind) {\n case \"element\":\n return (\n codeReadsNestedItemObject(node.keyCode, itemName) ||\n node.attributes.some((attribute) => {\n if (attribute.kind === \"spread-attr\") {\n return codeReadsNestedItemObject(attribute.code, itemName);\n }\n\n if (attribute.kind === \"dynamic-attr\" || attribute.kind === \"event\") {\n return codeReadsNestedItemObject(attribute.code, itemName);\n }\n\n return false;\n }) ||\n node.children.some((child) => nodeReadsNestedItemObject(child, itemName))\n );\n case \"component\":\n return (\n codeReadsNestedItemObject(node.keyCode, itemName) ||\n node.props.some((prop) => {\n if (prop.kind === \"spread-prop\") {\n return codeReadsNestedItemObject(prop.code, itemName);\n }\n\n if (prop.kind === \"render-prop\") {\n return prop.children.some((child) => nodeReadsNestedItemObject(child, itemName));\n }\n\n return codeReadsNestedItemObject(prop.code, itemName);\n }) ||\n node.children.some((child) => nodeReadsNestedItemObject(child, itemName))\n );\n case \"fragment\":\n return (\n node.bodyStatements?.some((statement) =>\n codeReadsNestedItemObject(statement, itemName),\n ) === true ||\n node.children.some((child) => nodeReadsNestedItemObject(child, itemName))\n );\n case \"conditional\":\n return (\n codeReadsNestedItemObject(node.conditionCode, itemName) ||\n node.whenTrue.some((child) => nodeReadsNestedItemObject(child, itemName)) ||\n node.whenFalse.some((child) => nodeReadsNestedItemObject(child, itemName))\n );\n case \"list\":\n return (\n codeReadsNestedItemObject(node.itemsCode, itemName) ||\n codeReadsNestedItemObject(node.keyCode, itemName) ||\n node.children.some((child) => nodeReadsNestedItemObject(child, itemName))\n );\n case \"expr\":\n return codeReadsNestedItemObject(node.code, itemName);\n case \"async-boundary\":\n return (\n codeReadsNestedItemObject(node.valueCode, itemName) ||\n node.children.some((child) => nodeReadsNestedItemObject(child, itemName)) ||\n (node.placeholderChildren?.some((child) =>\n nodeReadsNestedItemObject(child, itemName),\n ) ?? false) ||\n (node.catchChildren?.some((child) =>\n nodeReadsNestedItemObject(child, itemName),\n ) ?? false)\n );\n case \"text\":\n return false;\n }\n}\n\nfunction codeReadsNestedItemObject(\n code: string | undefined,\n itemName: string,\n): boolean {\n if (code === undefined || code.length === 0) {\n return false;\n }\n\n const escapedItemName = itemName.replace(/[\\\\^$.*+?()[\\]{}|]/g, \"\\\\$&\");\n return new RegExp(`\\\\b${escapedItemName}(?:\\\\.[A-Za-z_$][\\\\w$]*){2,}`).test(code);\n}\n\nfunction usesLiveInsertionAnchor(child: JsxNodeIr): boolean {\n return (\n child.kind === \"component\" ||\n (child.kind === \"expr\" && child.renderMode === \"dynamic\") ||\n child.kind === \"conditional\" ||\n child.kind === \"list\" ||\n child.kind === \"async-boundary\"\n );\n}\n\nfunction hasLiveChildListMutation(children: readonly JsxNodeIr[]): boolean {\n return children.some(usesLiveInsertionAnchor);\n}\n\nfunction emitRenderValueExpression(\n children: JsxNodeIr[],\n state: EmitSetupState,\n): string {\n if (children.length === 0) {\n return \"null\";\n }\n\n if (children.length === 1) {\n return emitNodeRenderValueExpression(children[0] as JsxNodeIr, state);\n }\n\n return `[${children\n .map((child) => emitNodeRenderValueExpression(child, state))\n .join(\", \")}]`;\n}\n\nfunction emitAsyncBoundarySetup(\n node: Extract<JsxNodeIr, { kind: \"async-boundary\" }>,\n childPath: string,\n state: EmitSetupState,\n): string {\n // Without a stable id the server has no way to tell the client what it\n // resolved. Leave the placeholder comment in place so the server-rendered\n // subtree (preserved via the hydration marker skip) remains the source of\n // truth. The resolved buttons inside it stay non-interactive in that case.\n if (node.awaitId === undefined) {\n return \"\";\n }\n\n const valueName = node.valueName;\n const renderChildren = emitRenderValueExpression(node.children, state);\n const awaitIdLiteral = JSON.stringify(node.awaitId);\n\n return [\n ` {`,\n ` const _awaitStore = globalThis.__mreactAwaitData;`,\n ` const _awaitEntry = _awaitStore === undefined ? undefined : _awaitStore[${awaitIdLiteral}];`,\n ` if (_awaitEntry !== undefined) {`,\n ` const ${valueName} = _awaitEntry.value;`,\n ` const _resolvedAwaitContent = ${renderChildren};`,\n ` if (_resolvedAwaitContent != null) {`,\n ` ${childPath}.replaceWith(_resolvedAwaitContent);`,\n ` }`,\n ` }`,\n ` }`,\n ].join(\"\\n\");\n}\n\nfunction emitNodeRenderValueExpression(\n node: JsxNodeIr,\n state: EmitSetupState,\n): 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 === \"component\") {\n return emitComponentCall(\n node.name,\n node.props,\n node.children,\n state,\n node.clientReference === undefined\n ? undefined\n : { moduleId: node.clientReference.moduleId, name: node.name },\n );\n }\n\n if (node.kind === \"fragment\") {\n if (node.bodyStatements !== undefined && node.bodyStatements.length > 0) {\n const valueExpression = emitRenderValueExpression(node.children, state);\n\n return [\n \"(() => {\",\n ...node.bodyStatements.map((statement) => ` ${statement}`),\n ` return ${valueExpression};`,\n \"})()\",\n ].join(\"\\n\");\n }\n\n return emitRenderValueExpression(node.children, state);\n }\n\n if (node.kind === \"conditional\") {\n return emitConditionalRenderValueExpression(node, state);\n }\n\n if (node.kind === \"list\") {\n const parameters = emitListParameters(node);\n const options = emitListOptions(node, parameters);\n\n return `${state.helperNames.createList}(() => (${node.itemsCode}), ${emitListRenderer(node, parameters, state)}${options})`;\n }\n\n if (node.kind === \"async-boundary\") {\n return \"null\";\n }\n\n const templateName = state.allocateName(\"_dynamicTemplate\");\n const fragmentName = state.allocateName(\"_dynamicFragment\");\n const rootName = state.allocateName(\"_dynamicRoot\");\n const templateHtml = JSON.stringify(renderStaticHtml(node));\n const setup = emitSetup(node, rootName, state);\n const setupLines = setup === \"\" ? [] : setup.split(\"\\n\");\n\n return [\n \"(() => {\",\n ` const ${templateName} = ${state.helperNames.createTemplate}(${templateHtml});`,\n ` const ${fragmentName} = ${templateName}();`,\n ` const ${rootName} = ${fragmentName}.firstChild;`,\n ...setupLines,\n ` return ${rootName};`,\n \"})()\",\n ].join(\"\\n\");\n}\n\nfunction emitConditionalRenderValueExpression(\n node: Extract<JsxNodeIr, { kind: \"conditional\" }>,\n state: EmitSetupState,\n): string {\n const whenTrue = emitRenderValueExpression(node.whenTrue, state);\n const whenFalse = emitRenderValueExpression(node.whenFalse, state);\n\n if (node.conditionValueName === undefined) {\n return `((${node.conditionCode}) ? ${whenTrue} : ${whenFalse})`;\n }\n\n return `(() => { const ${node.conditionValueName} = (${node.conditionCode}); return ${node.conditionValueName} ? ${whenTrue} : ${whenFalse}; })()`;\n}\n\nfunction emitListRenderer(\n node: Extract<JsxNodeIr, { kind: \"list\" }>,\n parameters: string,\n state: EmitSetupState,\n): string {\n const valueExpression = emitRenderValueExpression(node.children, state);\n\n if (node.bodyStatements === undefined || node.bodyStatements.length === 0) {\n return `(${parameters}) => ${valueExpression}`;\n }\n\n return `(${parameters}) => {\\n${node.bodyStatements.map((statement) => ` ${statement}`).join(\"\\n\")}\\n return ${valueExpression};\\n }`;\n}\n\nfunction emitListOptions(\n node: Extract<JsxNodeIr, { kind: \"list\" }>,\n parameters: string,\n): string {\n const optionEntries: string[] = [];\n\n if (node.keyCode !== undefined) {\n optionEntries.push(`key: (${parameters}) => (${node.keyCode})`);\n }\n\n if (\n node.keyCode !== undefined &&\n listReadsNestedItemObject(node, node.itemName)\n ) {\n optionEntries.push(\"nestedObjectFallback: true\");\n }\n\n return optionEntries.length === 0 ? \"\" : `, { ${optionEntries.join(\", \")} }`;\n}\n\nfunction emitListParameters(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 emitComponentCall(\n name: string,\n props: ComponentPropIr[],\n children: JsxNodeIr[],\n state: EmitSetupState,\n clientReference?: { moduleId: string; name: string } | undefined,\n): string {\n if (\n clientReference !== undefined &&\n state.clientBoundaryHelperName !== undefined &&\n isCompatClientReferenceModuleId(clientReference.moduleId)\n ) {\n return `${state.clientBoundaryHelperName}(${JSON.stringify(clientReference.name)}, ${emitPropsObject(props, children, state)})`;\n }\n\n return `${name}(${emitPropsObject(props, children, state)})`;\n}\n\nfunction emitPropsObject(\n props: ComponentPropIr[],\n children: JsxNodeIr[],\n state: EmitSetupState,\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 `${emitPropName(prop.name)}: ${emitRenderValueExpression(prop.children, state)}`;\n }\n\n if (shouldEmitReactiveComponentPropGetter(prop.code)) {\n return `get ${emitGetterPropName(prop.name)}() { return (${prop.code}); }`;\n }\n\n return `${emitPropName(prop.name)}: (${prop.code})`;\n });\n\n if (children.length > 0) {\n entries.push(`children: ${emitRenderValueExpression(children, state)}`);\n }\n\n return `{ ${entries.join(\", \")} }`;\n}\n\nfunction emitPropName(name: string): string {\n return /^[A-Za-z_$][\\w$]*$/.test(name) ? name : JSON.stringify(name);\n}\n\nfunction emitGetterPropName(name: string): string {\n return /^[A-Za-z_$][\\w$]*$/.test(name) ? name : `[${JSON.stringify(name)}]`;\n}\n\nfunction shouldEmitReactiveComponentPropGetter(code: string): boolean {\n if (!/\\.\\s*get\\s*\\(/.test(code)) {\n return false;\n }\n\n return !/^\\s*(?:async\\s*)?(?:function\\b|(?:\\([^)]*\\)|[A-Za-z_$][\\w$]*)\\s*=>)/.test(code);\n}\n\nfunction createNameAllocator(\n reservedNames: readonly string[],\n): NameAllocator {\n const usedNames = new Set(reservedNames);\n\n return (baseName: string, extraReservedNames: readonly string[] = []): string => {\n const reservedNames = new Set(extraReservedNames);\n let name = baseName;\n let index = 1;\n\n while (usedNames.has(name) || reservedNames.has(name)) {\n name = `${baseName}$${index}`;\n index += 1;\n }\n\n usedNames.add(name);\n return name;\n };\n}\n\nfunction isCompatClientReferenceModuleId(moduleId: string): boolean {\n return /\\.compat(?:\\.mreact)?(?:\\.[cm]?[jt]sx?)?$/.test(moduleId);\n}\n\ntype NameAllocator = (\n baseName: string,\n extraReservedNames?: readonly string[],\n) => string;\n\nfunction visit(node: JsxNodeIr, fn: (node: JsxNodeIr) => void): void {\n fn(node);\n\n if (node.kind === \"conditional\") {\n for (const child of [...node.whenTrue, ...node.whenFalse]) {\n visit(child, fn);\n }\n }\n\n if (node.kind === \"list\") {\n for (const child of node.children) {\n visit(child, fn);\n }\n }\n\n if (node.kind === \"component\") {\n for (const prop of node.props) {\n if (prop.kind === \"render-prop\") {\n for (const child of prop.children) {\n visit(child, fn);\n }\n }\n }\n\n for (const child of node.children) {\n visit(child, fn);\n }\n }\n\n if (node.kind === \"element\" || node.kind === \"fragment\") {\n for (const child of node.children) {\n visit(child, fn);\n }\n }\n\n // Async-boundary children participate in client-side rendering when the\n // boundary has an awaitId (hydration data path). Traverse them so their\n // runtime imports (bindList / bindText / bindEvent / etc.) are included.\n if (node.kind === \"async-boundary\") {\n for (const child of node.children) {\n visit(child, fn);\n }\n if (node.placeholderChildren !== undefined) {\n for (const child of node.placeholderChildren) {\n visit(child, fn);\n }\n }\n if (node.catchChildren !== undefined) {\n for (const child of node.catchChildren) {\n visit(child, fn);\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"emit-client.js","sourceRoot":"","sources":["../src/emit-client.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ComponentPropIr,\n ComponentIr,\n JsxNodeIr,\n ModuleIr,\n} from \"./ir.js\";\nimport type { RuntimeImport } from \"./types.js\";\nimport { escapeHtmlAttribute as escapeHtml } from \"@reckona/mreact-shared/html-escape\";\n\nexport interface EmitResult {\n code: string;\n imports: RuntimeImport[];\n}\n\nexport function emitClient(ir: ModuleIr): EmitResult {\n const imports = collectImports(ir);\n const helperNames = allocateRuntimeHelperNames(ir, imports[0]?.specifiers ?? []);\n const importLine =\n imports[0]?.specifiers.length === 0 ? \"\" : emitRuntimeImportLine(imports, helperNames);\n const userImports = emitUserImports(ir);\n const moduleStatements = emitModuleStatements(ir);\n const moduleAllocator = createNameAllocator([]);\n const clientBoundaryHelperName = hasClientReferenceNodes(ir)\n ? moduleAllocator(\"__mreactClientBoundary\", ir.moduleBindingNames)\n : undefined;\n const clientBoundaryHelper =\n clientBoundaryHelperName === undefined ? \"\" : emitClientBoundaryHelper(clientBoundaryHelperName);\n const components = ir.components\n .map((component) =>\n emitComponent(component, moduleAllocator, helperNames, clientBoundaryHelperName),\n )\n .join(\"\\n\\n\");\n\n return {\n code: `${[importLine, userImports, moduleStatements, clientBoundaryHelper].filter(Boolean).join(\"\\n\")}\\n\\n${components}\\n`,\n imports,\n };\n}\n\ntype RuntimeHelperName =\n | \"bindList\"\n | \"bindEvent\"\n | \"bindProp\"\n | \"bindSpreadProps\"\n | \"bindText\"\n | \"createList\"\n | \"createTemplate\"\n | \"insertDynamic\";\n\ntype RuntimeHelperNames = Record<RuntimeHelperName, string>;\n\nfunction allocateRuntimeHelperNames(\n ir: ModuleIr,\n specifiers: readonly string[],\n): RuntimeHelperNames {\n const allocator = createNameAllocator([\n ...ir.moduleBindingNames,\n ...ir.components.flatMap((component) => [\n component.name,\n component.exportName,\n ...component.bindingNames,\n ]),\n ]);\n const helperNames: RuntimeHelperNames = {\n bindList: \"bindList\",\n bindEvent: \"bindEvent\",\n bindProp: \"bindProp\",\n bindSpreadProps: \"bindSpreadProps\",\n bindText: \"bindText\",\n createList: \"createList\",\n createTemplate: \"createTemplate\",\n insertDynamic: \"insertDynamic\",\n };\n\n for (const specifier of specifiers) {\n const helper = specifier as RuntimeHelperName;\n\n if (ir.moduleBindingNames.includes(helper)) {\n helperNames[helper] = allocator(`_${helper}`);\n }\n }\n\n return helperNames;\n}\n\nfunction emitRuntimeImportLine(\n imports: RuntimeImport[],\n helperNames: RuntimeHelperNames,\n): string {\n const specifiers = imports[0]?.specifiers ?? [\"createTemplate\"];\n const importedNames = specifiers.map((specifier) => {\n const helper = specifier as RuntimeHelperName;\n const localName = helperNames[helper];\n\n return localName === specifier ? specifier : `${specifier} as ${localName}`;\n });\n\n return `import { ${importedNames.join(\", \")} } from \"@reckona/mreact-reactive-dom\";`;\n}\n\nfunction emitUserImports(ir: ModuleIr): string {\n return ir.components.length === 0 ? \"\" : ir.userImports.join(\"\\n\");\n}\n\nfunction emitModuleStatements(ir: ModuleIr): string {\n return ir.components.length === 0 ? \"\" : ir.moduleStatements.join(\"\\n\");\n}\n\nfunction collectImports(ir: ModuleIr): RuntimeImport[] {\n if (ir.components.length === 0) {\n return [];\n }\n\n const specifiers = new Set<string>([\"createTemplate\"]);\n\n for (const component of ir.components) {\n visit(component.root, (node) => {\n if (node.kind === \"expr\") {\n specifiers.add(\n node.renderMode === \"dynamic\" ? \"insertDynamic\" : \"bindText\",\n );\n }\n\n if (node.kind === \"conditional\") {\n specifiers.add(\"insertDynamic\");\n }\n\n if (node.kind === \"list\") {\n specifiers.add(\"bindList\");\n }\n\n if (node.kind === \"element\") {\n for (const attr of node.attributes) {\n if (attr.kind === \"dynamic-attr\") {\n specifiers.add(\"bindProp\");\n }\n\n if (attr.kind === \"spread-attr\") {\n specifiers.add(\"bindSpreadProps\");\n }\n\n if (attr.kind === \"event\") {\n specifiers.add(\"bindEvent\");\n }\n }\n }\n });\n\n if (componentUsesCreateList(component.root)) {\n specifiers.add(\"createList\");\n }\n }\n\n return [\n {\n source: \"@reckona/mreact-reactive-dom\",\n specifiers: Array.from(specifiers).sort(),\n },\n ];\n}\n\nfunction componentUsesCreateList(node: JsxNodeIr): boolean {\n if (node.kind === \"conditional\" || node.kind === \"list\") {\n return renderValueNodeUsesCreateList(node);\n }\n\n if (node.kind === \"component\") {\n return componentCallUsesCreateList(node);\n }\n\n return setupUsesCreateList(node);\n}\n\nfunction setupUsesCreateList(node: JsxNodeIr): boolean {\n if (node.kind === \"component\") {\n return componentCallUsesCreateList(node);\n }\n\n if (node.kind === \"list\") {\n return renderValueChildrenUseCreateList(node.children);\n }\n\n if (node.kind === \"conditional\") {\n return renderValueNodeUsesCreateList(node);\n }\n\n if (node.kind === \"async-boundary\") {\n return (\n renderValueChildrenUseCreateList(node.children) ||\n renderValueChildrenUseCreateList(node.placeholderChildren ?? []) ||\n renderValueChildrenUseCreateList(node.catchChildren ?? [])\n );\n }\n\n if (node.kind === \"element\" || node.kind === \"fragment\") {\n return node.children.some(setupUsesCreateList);\n }\n\n return false;\n}\n\nfunction renderValueChildrenUseCreateList(children: readonly JsxNodeIr[]): boolean {\n return children.some(renderValueNodeUsesCreateList);\n}\n\nfunction renderValueNodeUsesCreateList(node: JsxNodeIr): boolean {\n if (node.kind === \"list\") {\n return true;\n }\n\n if (node.kind === \"conditional\") {\n return (\n renderValueChildrenUseCreateList(node.whenTrue) ||\n renderValueChildrenUseCreateList(node.whenFalse)\n );\n }\n\n if (node.kind === \"fragment\") {\n return renderValueChildrenUseCreateList(node.children);\n }\n\n if (node.kind === \"component\") {\n return componentCallUsesCreateList(node);\n }\n\n if (node.kind === \"element\") {\n return setupUsesCreateList(node);\n }\n\n return false;\n}\n\nfunction componentCallUsesCreateList(node: Extract<JsxNodeIr, { kind: \"component\" }>): boolean {\n return (\n node.props.some((prop) =>\n prop.kind === \"render-prop\" &&\n renderValueChildrenUseCreateList(prop.children),\n ) ||\n renderValueChildrenUseCreateList(node.children)\n );\n}\n\nfunction hasClientReferenceNodes(ir: ModuleIr): boolean {\n return ir.components.some((component) => {\n let found = false;\n visit(component.root, (node) => {\n if (\n node.kind === \"component\" &&\n node.clientReference !== undefined &&\n isCompatClientReferenceModuleId(node.clientReference.moduleId)\n ) {\n found = true;\n }\n });\n return found;\n });\n}\n\nfunction emitClientBoundaryHelper(name: string): string {\n return `function ${name}(name, props) {\n const fragment = document.createDocumentFragment();\n const placeholder = document.createElement(\"template\");\n placeholder.setAttribute(\"data-mreact-client-boundary\", name);\n const propsElement = document.createElement(\"script\");\n propsElement.type = \"application/json\";\n propsElement.setAttribute(\"data-mreact-client-boundary-props\", name);\n try {\n propsElement.textContent = JSON.stringify(props ?? {})\n .replaceAll(\"&\", \"\\\\\\\\u0026\")\n .replaceAll(\"<\", \"\\\\\\\\u003c\")\n .replaceAll(\">\", \"\\\\\\\\u003e\")\n .replaceAll(\"\\\\u2028\", \"\\\\\\\\u2028\")\n .replaceAll(\"\\\\u2029\", \"\\\\\\\\u2029\");\n } catch {\n placeholder.setAttribute(\"data-mreact-client-boundary-nonserializable\", \"true\");\n propsElement.textContent = \"{}\";\n }\n fragment.append(placeholder, propsElement);\n return fragment;\n}`;\n}\n\nfunction emitComponent(\n component: ComponentIr,\n moduleAllocator: NameAllocator,\n helperNames: RuntimeHelperNames,\n clientBoundaryHelperName: string | undefined,\n): string {\n const templateName = moduleAllocator(\n \"_tmpl_\" + component.name,\n component.bindingNames,\n );\n const allocator = createNameAllocator([...component.bindingNames, templateName]);\n const body = component.bodyStatements.map((statement) => ` ${statement}`);\n const parameters = component.parameters.join(\", \");\n\n if (component.root.kind === \"component\") {\n const state = { allocateName: allocator, textIndex: 0, helperNames, clientBoundaryHelperName };\n return [\n `${component.exported === false ? \"\" : \"export \"}function ${component.name}(${parameters}) {`,\n ...body,\n ` return ${emitComponentCall(\n component.root.name,\n component.root.props,\n component.root.children,\n state,\n component.root.clientReference === undefined\n ? undefined\n : { moduleId: component.root.clientReference.moduleId, name: component.root.name },\n )};`,\n `}`,\n ].join(\"\\n\");\n }\n\n if (component.root.kind === \"conditional\") {\n const state = { allocateName: allocator, textIndex: 0, helperNames, clientBoundaryHelperName };\n const fragmentName = allocator(\"_fragment\");\n const markerName = allocator(\"_marker\");\n return [\n `${component.exportDefault === true ? \"export default \" : component.exported === false ? \"\" : \"export \"}function ${component.name}(${parameters}) {`,\n ...body,\n ` const ${fragmentName} = document.createDocumentFragment();`,\n ` const ${markerName} = document.createComment(\"\");`,\n ` ${fragmentName}.append(${markerName});`,\n ` ${helperNames.insertDynamic}(${fragmentName}, ${markerName}, () => ${emitNodeRenderValueExpression(component.root, state)});`,\n ` return ${fragmentName};`,\n `}`,\n ].join(\"\\n\");\n }\n\n const fragmentName = allocator(\"_fragment\");\n const rootName = allocator(\"_root\");\n const templateHtml = JSON.stringify(renderStaticHtml(component.root));\n const setup = emitSetup(component.root, rootName, {\n allocateName: allocator,\n textIndex: 0,\n helperNames,\n clientBoundaryHelperName,\n });\n return [\n `const ${templateName} = ${helperNames.createTemplate}(${templateHtml});`,\n `${component.exportDefault === true ? \"export default \" : component.exported === false ? \"\" : \"export \"}function ${component.name}(${parameters}) {`,\n ...body,\n ` const ${fragmentName} = ${templateName}();`,\n component.root.kind === \"fragment\"\n ? ` const ${rootName} = ${fragmentName};`\n : ` const ${rootName} = ${fragmentName}.firstChild;`,\n setup,\n ` return ${rootName};`,\n `}`,\n ]\n .filter(Boolean)\n .join(\"\\n\");\n}\n\nfunction renderStaticHtml(node: JsxNodeIr): string {\n if (node.kind === \"text\") {\n return escapeHtml(node.value);\n }\n\n if (node.kind === \"expr\") {\n return \"<!---->\";\n }\n\n if (node.kind === \"conditional\" || node.kind === \"list\") {\n return \"<!---->\";\n }\n\n if (node.kind === \"fragment\") {\n return node.children.map(renderStaticHtml).join(\"\");\n }\n\n if (node.kind === \"component\") {\n return \"<!---->\";\n }\n\n if (node.kind === \"async-boundary\") {\n return \"<!--mreact-async-boundary-->\";\n }\n\n const attrs = node.attributes\n .filter((attr) => attr.kind === \"static-attr\")\n .map((attr) => ` ${attr.name}=\"${escapeHtml(attr.value)}\"`)\n .join(\"\");\n const children = node.children.map(renderStaticHtml).join(\"\");\n\n return `<${node.tagName}${attrs}>${children}</${node.tagName}>`;\n}\n\ninterface EmitSetupState {\n allocateName: (baseName: string) => string;\n textIndex: number;\n helperNames: RuntimeHelperNames;\n clientBoundaryHelperName?: string | undefined;\n}\n\nfunction emitSetup(\n node: JsxNodeIr,\n path: string,\n state: EmitSetupState,\n): string {\n const lines: string[] = [];\n\n if (\n node.kind !== \"element\" &&\n node.kind !== \"fragment\" &&\n node.kind !== \"component\"\n ) {\n return \"\";\n }\n\n if (node.kind === \"component\") {\n const componentVar = state.allocateName(\"_component\");\n lines.push(\n ` const ${componentVar} = ${emitComponentCall(\n node.name,\n node.props,\n node.children,\n state,\n node.clientReference === undefined\n ? undefined\n : { moduleId: node.clientReference.moduleId, name: node.name },\n )};`,\n );\n lines.push(` if (${componentVar} == null || typeof ${componentVar} === \"boolean\") {`);\n lines.push(` ${path}.remove();`);\n lines.push(` } else {`);\n lines.push(` ${path}.replaceWith(${componentVar});`);\n lines.push(` }`);\n return lines.join(\"\\n\");\n }\n\n if (node.kind === \"element\") {\n for (const attr of node.attributes) {\n if (attr.kind === \"dynamic-attr\") {\n lines.push(\n ` ${state.helperNames.bindProp}(${path}, \"${attr.name}\", () => (${attr.code}));`,\n );\n }\n\n if (attr.kind === \"spread-attr\") {\n lines.push(\n ` ${state.helperNames.bindSpreadProps}(${path}, () => (${attr.code}));`,\n );\n }\n\n if (attr.kind === \"event\") {\n lines.push(\n ` ${state.helperNames.bindEvent}(${path}, \"${attr.eventName}\", ${attr.code});`,\n );\n }\n }\n }\n\n const children = node.children;\n const stableChildrenName = hasLiveChildListMutation(children)\n ? state.allocateName(\"_children\")\n : undefined;\n let childIndex = 0;\n\n if (stableChildrenName !== undefined) {\n lines.push(` const ${stableChildrenName} = Array.from(${path}.childNodes);`);\n }\n\n let sawStaticText = false;\n let sawComponentMutation = false;\n\n for (const child of children) {\n if (child.kind === \"text\") {\n sawStaticText = true;\n childIndex += 1;\n continue;\n }\n\n const childPath =\n stableChildrenName === undefined ||\n (\n child.kind !== \"component\" &&\n !sawComponentMutation &&\n usesLiveInsertionAnchor(child) &&\n !sawStaticText\n )\n ? `${path}.childNodes[${childIndex}]`\n : `${stableChildrenName}[${childIndex}]`;\n\n if (child.kind === \"expr\") {\n if (child.renderMode === \"dynamic\") {\n lines.push(\n ` ${state.helperNames.insertDynamic}(${path}, ${childPath}, () => (${child.code}));`,\n );\n childIndex += 1;\n continue;\n }\n\n const textVar = state.allocateName(`_text_${state.textIndex}`);\n state.textIndex += 1;\n lines.push(` const ${textVar} = document.createTextNode(\"\");`);\n lines.push(` ${childPath}.replaceWith(${textVar});`);\n lines.push(\n ` ${state.helperNames.bindText}(${textVar}, () => (${child.code}));`,\n );\n childIndex += 1;\n continue;\n }\n\n if (child.kind === \"conditional\") {\n lines.push(\n ` ${state.helperNames.insertDynamic}(${path}, ${childPath}, () => ${emitConditionalRenderValueExpression(child, state)});`,\n );\n childIndex += 1;\n continue;\n }\n\n if (child.kind === \"list\") {\n const parameters = emitListParameters(child);\n const optionEntries: string[] = [];\n\n if (child.keyCode !== undefined) {\n optionEntries.push(`key: (${parameters}) => (${child.keyCode})`);\n }\n\n if (\n child.keyCode !== undefined &&\n listReadsNestedItemObject(child, child.itemName)\n ) {\n optionEntries.push(\"nestedObjectFallback: true\");\n }\n\n const options =\n optionEntries.length === 0 ? \"\" : `, { ${optionEntries.join(\", \")} }`;\n lines.push(\n ` ${state.helperNames.bindList}(${path}, ${childPath}, () => (${child.itemsCode}), ${emitListRenderer(child, parameters, state)}${options});`,\n );\n childIndex += 1;\n continue;\n }\n\n if (child.kind === \"async-boundary\") {\n lines.push(emitAsyncBoundarySetup(child, childPath, state));\n childIndex += 1;\n continue;\n }\n\n lines.push(emitSetup(child, childPath, state));\n if (child.kind === \"component\") {\n sawComponentMutation = true;\n }\n childIndex += 1;\n }\n\n return lines.filter(Boolean).join(\"\\n\");\n}\n\nfunction listReadsNestedItemObject(\n node: Extract<JsxNodeIr, { kind: \"list\" }>,\n itemName: string,\n): boolean {\n return node.children.some((child) => nodeReadsNestedItemObject(child, itemName));\n}\n\nfunction nodeReadsNestedItemObject(node: JsxNodeIr, itemName: string): boolean {\n switch (node.kind) {\n case \"element\":\n return (\n codeReadsNestedItemObject(node.keyCode, itemName) ||\n node.attributes.some((attribute) => {\n if (attribute.kind === \"spread-attr\") {\n return codeReadsNestedItemObject(attribute.code, itemName);\n }\n\n if (attribute.kind === \"dynamic-attr\" || attribute.kind === \"event\") {\n return codeReadsNestedItemObject(attribute.code, itemName);\n }\n\n return false;\n }) ||\n node.children.some((child) => nodeReadsNestedItemObject(child, itemName))\n );\n case \"component\":\n return (\n codeReadsNestedItemObject(node.keyCode, itemName) ||\n node.props.some((prop) => {\n if (prop.kind === \"spread-prop\") {\n return codeReadsNestedItemObject(prop.code, itemName);\n }\n\n if (prop.kind === \"render-prop\") {\n return prop.children.some((child) => nodeReadsNestedItemObject(child, itemName));\n }\n\n return codeReadsNestedItemObject(prop.code, itemName);\n }) ||\n node.children.some((child) => nodeReadsNestedItemObject(child, itemName))\n );\n case \"fragment\":\n return (\n node.bodyStatements?.some((statement) =>\n codeReadsNestedItemObject(statement, itemName),\n ) === true ||\n node.children.some((child) => nodeReadsNestedItemObject(child, itemName))\n );\n case \"conditional\":\n return (\n codeReadsNestedItemObject(node.conditionCode, itemName) ||\n node.whenTrue.some((child) => nodeReadsNestedItemObject(child, itemName)) ||\n node.whenFalse.some((child) => nodeReadsNestedItemObject(child, itemName))\n );\n case \"list\":\n return (\n codeReadsNestedItemObject(node.itemsCode, itemName) ||\n codeReadsNestedItemObject(node.keyCode, itemName) ||\n node.children.some((child) => nodeReadsNestedItemObject(child, itemName))\n );\n case \"expr\":\n return codeReadsNestedItemObject(node.code, itemName);\n case \"async-boundary\":\n return (\n codeReadsNestedItemObject(node.valueCode, itemName) ||\n node.children.some((child) => nodeReadsNestedItemObject(child, itemName)) ||\n (node.placeholderChildren?.some((child) =>\n nodeReadsNestedItemObject(child, itemName),\n ) ?? false) ||\n (node.catchChildren?.some((child) =>\n nodeReadsNestedItemObject(child, itemName),\n ) ?? false)\n );\n case \"text\":\n return false;\n }\n}\n\nfunction codeReadsNestedItemObject(\n code: string | undefined,\n itemName: string,\n): boolean {\n if (code === undefined || code.length === 0) {\n return false;\n }\n\n const escapedItemName = itemName.replace(/[\\\\^$.*+?()[\\]{}|]/g, \"\\\\$&\");\n return new RegExp(`\\\\b${escapedItemName}(?:\\\\.[A-Za-z_$][\\\\w$]*){2,}`).test(code);\n}\n\nfunction usesLiveInsertionAnchor(child: JsxNodeIr): boolean {\n return (\n child.kind === \"component\" ||\n (child.kind === \"expr\" && child.renderMode === \"dynamic\") ||\n child.kind === \"conditional\" ||\n child.kind === \"list\" ||\n child.kind === \"async-boundary\"\n );\n}\n\nfunction hasLiveChildListMutation(children: readonly JsxNodeIr[]): boolean {\n return children.some(usesLiveInsertionAnchor);\n}\n\nfunction emitRenderValueExpression(\n children: JsxNodeIr[],\n state: EmitSetupState,\n): string {\n if (children.length === 0) {\n return \"null\";\n }\n\n if (children.length === 1) {\n return emitNodeRenderValueExpression(children[0] as JsxNodeIr, state);\n }\n\n return `[${children\n .map((child) => emitNodeRenderValueExpression(child, state))\n .join(\", \")}]`;\n}\n\nfunction emitAsyncBoundarySetup(\n node: Extract<JsxNodeIr, { kind: \"async-boundary\" }>,\n childPath: string,\n state: EmitSetupState,\n): string {\n // Without a stable id the server has no way to tell the client what it\n // resolved. Leave the placeholder comment in place so the server-rendered\n // subtree (preserved via the hydration marker skip) remains the source of\n // truth. The resolved buttons inside it stay non-interactive in that case.\n if (node.awaitId === undefined) {\n return \"\";\n }\n\n const valueName = node.valueName;\n const renderChildren = emitRenderValueExpression(node.children, state);\n const awaitIdLiteral = JSON.stringify(node.awaitId);\n\n return [\n ` {`,\n ` const _awaitStore = globalThis.__mreactAwaitData;`,\n ` const _awaitEntry = _awaitStore === undefined ? undefined : _awaitStore[${awaitIdLiteral}];`,\n ` if (_awaitEntry !== undefined) {`,\n ` const ${valueName} = _awaitEntry.value;`,\n ` const _resolvedAwaitContent = ${renderChildren};`,\n ` if (_resolvedAwaitContent != null) {`,\n ` ${childPath}.replaceWith(_resolvedAwaitContent);`,\n ` }`,\n ` }`,\n ` }`,\n ].join(\"\\n\");\n}\n\nfunction emitNodeRenderValueExpression(\n node: JsxNodeIr,\n state: EmitSetupState,\n): 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 === \"component\") {\n return emitComponentCall(\n node.name,\n node.props,\n node.children,\n state,\n node.clientReference === undefined\n ? undefined\n : { moduleId: node.clientReference.moduleId, name: node.name },\n );\n }\n\n if (node.kind === \"fragment\") {\n if (node.bodyStatements !== undefined && node.bodyStatements.length > 0) {\n const valueExpression = emitRenderValueExpression(node.children, state);\n\n return [\n \"(() => {\",\n ...node.bodyStatements.map((statement) => ` ${statement}`),\n ` return ${valueExpression};`,\n \"})()\",\n ].join(\"\\n\");\n }\n\n return emitRenderValueExpression(node.children, state);\n }\n\n if (node.kind === \"conditional\") {\n return emitConditionalRenderValueExpression(node, state);\n }\n\n if (node.kind === \"list\") {\n const parameters = emitListParameters(node);\n const options = emitListOptions(node, parameters);\n\n return `${state.helperNames.createList}(() => (${node.itemsCode}), ${emitListRenderer(node, parameters, state)}${options})`;\n }\n\n if (node.kind === \"async-boundary\") {\n return \"null\";\n }\n\n const templateName = state.allocateName(\"_dynamicTemplate\");\n const fragmentName = state.allocateName(\"_dynamicFragment\");\n const rootName = state.allocateName(\"_dynamicRoot\");\n const templateHtml = JSON.stringify(renderStaticHtml(node));\n const setup = emitSetup(node, rootName, state);\n const setupLines = setup === \"\" ? [] : setup.split(\"\\n\");\n\n return [\n \"(() => {\",\n ` const ${templateName} = ${state.helperNames.createTemplate}(${templateHtml});`,\n ` const ${fragmentName} = ${templateName}();`,\n ` const ${rootName} = ${fragmentName}.firstChild;`,\n ...setupLines,\n ` return ${rootName};`,\n \"})()\",\n ].join(\"\\n\");\n}\n\nfunction emitConditionalRenderValueExpression(\n node: Extract<JsxNodeIr, { kind: \"conditional\" }>,\n state: EmitSetupState,\n): string {\n const whenTrue = emitRenderValueExpression(node.whenTrue, state);\n const whenFalse = emitRenderValueExpression(node.whenFalse, state);\n\n if (node.conditionValueName === undefined) {\n return `((${node.conditionCode}) ? ${whenTrue} : ${whenFalse})`;\n }\n\n return `(() => { const ${node.conditionValueName} = (${node.conditionCode}); return ${node.conditionValueName} ? ${whenTrue} : ${whenFalse}; })()`;\n}\n\nfunction emitListRenderer(\n node: Extract<JsxNodeIr, { kind: \"list\" }>,\n parameters: string,\n state: EmitSetupState,\n): string {\n const valueExpression = emitRenderValueExpression(node.children, state);\n\n if (node.bodyStatements === undefined || node.bodyStatements.length === 0) {\n return `(${parameters}) => ${valueExpression}`;\n }\n\n return `(${parameters}) => {\\n${node.bodyStatements.map((statement) => ` ${statement}`).join(\"\\n\")}\\n return ${valueExpression};\\n }`;\n}\n\nfunction emitListOptions(\n node: Extract<JsxNodeIr, { kind: \"list\" }>,\n parameters: string,\n): string {\n const optionEntries: string[] = [];\n\n if (node.keyCode !== undefined) {\n optionEntries.push(`key: (${parameters}) => (${node.keyCode})`);\n }\n\n if (\n node.keyCode !== undefined &&\n listReadsNestedItemObject(node, node.itemName)\n ) {\n optionEntries.push(\"nestedObjectFallback: true\");\n }\n\n return optionEntries.length === 0 ? \"\" : `, { ${optionEntries.join(\", \")} }`;\n}\n\nfunction emitListParameters(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 emitComponentCall(\n name: string,\n props: ComponentPropIr[],\n children: JsxNodeIr[],\n state: EmitSetupState,\n clientReference?: { moduleId: string; name: string } | undefined,\n): string {\n if (\n clientReference !== undefined &&\n state.clientBoundaryHelperName !== undefined &&\n isCompatClientReferenceModuleId(clientReference.moduleId)\n ) {\n return `${state.clientBoundaryHelperName}(${JSON.stringify(clientReference.name)}, ${emitPropsObject(props, children, state)})`;\n }\n\n return `${name}(${emitPropsObject(props, children, state)})`;\n}\n\nfunction emitPropsObject(\n props: ComponentPropIr[],\n children: JsxNodeIr[],\n state: EmitSetupState,\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 `${emitPropName(prop.name)}: ${emitRenderValueExpression(prop.children, state)}`;\n }\n\n if (shouldEmitReactiveComponentPropGetter(prop.code)) {\n return `get ${emitGetterPropName(prop.name)}() { return (${prop.code}); }`;\n }\n\n return `${emitPropName(prop.name)}: (${prop.code})`;\n });\n\n if (children.length > 0) {\n entries.push(`children: ${emitRenderValueExpression(children, state)}`);\n }\n\n return `{ ${entries.join(\", \")} }`;\n}\n\nfunction emitPropName(name: string): string {\n return /^[A-Za-z_$][\\w$]*$/.test(name) ? name : JSON.stringify(name);\n}\n\nfunction emitGetterPropName(name: string): string {\n return /^[A-Za-z_$][\\w$]*$/.test(name) ? name : `[${JSON.stringify(name)}]`;\n}\n\nfunction shouldEmitReactiveComponentPropGetter(code: string): boolean {\n if (!/\\.\\s*get\\s*\\(/.test(code)) {\n return false;\n }\n\n return !/^\\s*(?:async\\s*)?(?:function\\b|(?:\\([^)]*\\)|[A-Za-z_$][\\w$]*)\\s*=>)/.test(code);\n}\n\nfunction createNameAllocator(\n reservedNames: readonly string[],\n): NameAllocator {\n const usedNames = new Set(reservedNames);\n\n return (baseName: string, extraReservedNames: readonly string[] = []): string => {\n const reservedNames = new Set(extraReservedNames);\n let name = baseName;\n let index = 1;\n\n while (usedNames.has(name) || reservedNames.has(name)) {\n name = `${baseName}$${index}`;\n index += 1;\n }\n\n usedNames.add(name);\n return name;\n };\n}\n\nfunction isCompatClientReferenceModuleId(moduleId: string): boolean {\n return /\\.compat(?:\\.mreact)?(?:\\.[cm]?[jt]sx?)?$/.test(moduleId);\n}\n\ntype NameAllocator = (\n baseName: string,\n extraReservedNames?: readonly string[],\n) => string;\n\nfunction visit(node: JsxNodeIr, fn: (node: JsxNodeIr) => void): void {\n fn(node);\n\n if (node.kind === \"conditional\") {\n for (const child of [...node.whenTrue, ...node.whenFalse]) {\n visit(child, fn);\n }\n }\n\n if (node.kind === \"list\") {\n for (const child of node.children) {\n visit(child, fn);\n }\n }\n\n if (node.kind === \"component\") {\n for (const prop of node.props) {\n if (prop.kind === \"render-prop\") {\n for (const child of prop.children) {\n visit(child, fn);\n }\n }\n }\n\n for (const child of node.children) {\n visit(child, fn);\n }\n }\n\n if (node.kind === \"element\" || node.kind === \"fragment\") {\n for (const child of node.children) {\n visit(child, fn);\n }\n }\n\n // Async-boundary children participate in client-side rendering when the\n // boundary has an awaitId (hydration data path). Traverse them so their\n // runtime imports (bindList / bindText / bindEvent / etc.) are included.\n if (node.kind === \"async-boundary\") {\n for (const child of node.children) {\n visit(child, fn);\n }\n if (node.placeholderChildren !== undefined) {\n for (const child of node.placeholderChildren) {\n visit(child, fn);\n }\n }\n if (node.catchChildren !== undefined) {\n for (const child of node.catchChildren) {\n visit(child, fn);\n }\n }\n }\n}\n"]}
|
|
@@ -10,4 +10,5 @@ export declare function parseStyleLiteralValue(code: string): string | number |
|
|
|
10
10
|
export declare function parseStaticStyleObjectLiteral(code: string): StaticStyleObjectEntry[] | undefined;
|
|
11
11
|
export declare function simpleSideEffectFreeExpression(code: string): string | undefined;
|
|
12
12
|
export declare function htmlAttributeName(name: string): string;
|
|
13
|
+
export declare function isBooleanishStringAttribute(name: string): boolean;
|
|
13
14
|
//# sourceMappingURL=emit-server-shared.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit-server-shared.d.ts","sourceRoot":"","sources":["../src/emit-server-shared.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAiED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAiB3E;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAwBvF;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,GACX,sBAAsB,EAAE,GAAG,SAAS,CAStC;AA0HD,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA0B/E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD"}
|
|
1
|
+
{"version":3,"file":"emit-server-shared.d.ts","sourceRoot":"","sources":["../src/emit-server-shared.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAiED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAiB3E;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAwBvF;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,GACX,sBAAsB,EAAE,GAAG,SAAS,CAStC;AA0HD,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA0B/E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOjE"}
|
|
@@ -220,6 +220,17 @@ export function simpleSideEffectFreeExpression(code) {
|
|
|
220
220
|
export function htmlAttributeName(name) {
|
|
221
221
|
return HTML_ATTRIBUTE_ALIASES[name] ?? name;
|
|
222
222
|
}
|
|
223
|
+
export function isBooleanishStringAttribute(name) {
|
|
224
|
+
const attributeName = htmlAttributeName(name).toLowerCase();
|
|
225
|
+
return (attributeName.startsWith("aria-") ||
|
|
226
|
+
attributeName.startsWith("data-") ||
|
|
227
|
+
BOOLEANISH_STRING_ATTRIBUTES.has(attributeName));
|
|
228
|
+
}
|
|
229
|
+
const BOOLEANISH_STRING_ATTRIBUTES = new Set([
|
|
230
|
+
"contenteditable",
|
|
231
|
+
"draggable",
|
|
232
|
+
"spellcheck",
|
|
233
|
+
]);
|
|
223
234
|
function unwrapParenthesized(code) {
|
|
224
235
|
let current = code;
|
|
225
236
|
while (current.startsWith("(") && current.endsWith(")") && findMatchingClose(current, 0) === current.length - 1) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit-server-shared.js","sourceRoot":"","sources":["../src/emit-server-shared.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseSync } from \"oxc-parser\";\nimport { readArray, readObject, unwrapOxcParentheses } from \"./oxc-node-utils.js\";\n\nexport interface StaticStyleObjectEntry {\n cssName: string;\n valueCode: string;\n}\n\nconst URL_ATTRIBUTE_NAMES = new Set([\n \"href\",\n \"src\",\n \"action\",\n \"formaction\",\n \"xlink:href\",\n \"ping\",\n \"poster\",\n \"background\",\n \"manifest\",\n]);\n\nconst DANGEROUS_HTML_ATTRIBUTE_NAMES = new Set([\"srcdoc\"]);\n\nconst VOID_HTML_ELEMENT_NAMES = new Set([\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\n\nconst SIMPLE_IDENT_CHAIN_RE = /^(this|[A-Za-z_$][\\w$]*)(\\.[A-Za-z_$][\\w$]*)*$/;\nconst NUMERIC_LITERAL_RE = /^-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)$/;\nconst SIMPLE_STRING_LITERAL_RE = /^\"(?:[^\"\\\\]|\\\\.)*\"$/;\nconst SIMPLE_SINGLE_QUOTE_RE = /^'(?:[^'\\\\]|\\\\.)*'$/;\n\nconst 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 readOnly: \"readonly\",\n rowSpan: \"rowspan\",\n spellCheck: \"spellcheck\",\n srcDoc: \"srcdoc\",\n srcSet: \"srcset\",\n tabIndex: \"tabindex\",\n useMap: \"usemap\",\n};\n\nexport function isUrlAttribute(name: string): boolean {\n return URL_ATTRIBUTE_NAMES.has(name);\n}\n\nexport function isDangerousHtmlAttribute(name: string): boolean {\n return DANGEROUS_HTML_ATTRIBUTE_NAMES.has(name);\n}\n\nexport function isVoidHtmlElement(tagName: string): boolean {\n return VOID_HTML_ELEMENT_NAMES.has(tagName);\n}\n\nexport function isStaticUrlValueUnsafe(name: string, value: string): boolean {\n let start = 0;\n\n while (start < value.length && value.charCodeAt(start) <= 0x20) {\n start += 1;\n }\n\n const canonical = value.slice(start).replace(/[\\t\\r\\n]/g, \"\");\n const match = /^([a-zA-Z][a-zA-Z0-9+.-]*):/.exec(canonical);\n if (match === null || match[1] === undefined) return false;\n const scheme = match[1].toLowerCase();\n if (scheme === \"javascript\" || scheme === \"vbscript\" || scheme === \"livescript\" || scheme === \"mhtml\" || scheme === \"file\") return true;\n if (scheme === \"data\") {\n if ((name === \"src\" || name === \"poster\") && /^data:image\\/(?!svg\\+xml(?:[;,]|$))/i.test(canonical)) return false;\n return true;\n }\n return false;\n}\n\nexport function parseStyleLiteralValue(code: string): string | number | null | undefined {\n const trimmed = unwrapParenthesized(code.trim());\n\n if (trimmed === \"null\" || trimmed === \"false\" || trimmed === \"undefined\") {\n return null;\n }\n\n if (trimmed === \"true\") {\n return \"\";\n }\n\n if (NUMERIC_LITERAL_RE.test(trimmed)) {\n return Number(trimmed);\n }\n\n if (SIMPLE_STRING_LITERAL_RE.test(trimmed)) {\n return JSON.parse(trimmed) as string;\n }\n\n if (SIMPLE_SINGLE_QUOTE_RE.test(trimmed)) {\n return JSON.parse(`\"${trimmed.slice(1, -1).replaceAll('\"', '\\\\\"')}\"`) as string;\n }\n\n return undefined;\n}\n\nexport function parseStaticStyleObjectLiteral(\n code: string,\n): StaticStyleObjectEntry[] | undefined {\n const objectCode = unwrapParenthesized(code.trim());\n const stringParsedEntries = parseStaticStyleObjectLiteralFromString(objectCode);\n\n if (stringParsedEntries !== undefined) {\n return stringParsedEntries;\n }\n\n return parseStaticStyleObjectLiteralWithOxc(objectCode);\n}\n\nfunction parseStaticStyleObjectLiteralFromString(\n objectCode: string,\n): StaticStyleObjectEntry[] | undefined {\n if (!objectCode.startsWith(\"{\") || !objectCode.endsWith(\"}\")) {\n return undefined;\n }\n\n const body = objectCode.slice(1, -1).trim();\n\n if (body === \"\") {\n return [];\n }\n\n const entries: StaticStyleObjectEntry[] = [];\n\n for (const property of splitTopLevel(body, \",\")) {\n const trimmed = property.trim();\n\n if (trimmed === \"\" || trimmed.startsWith(\"...\") || trimmed.startsWith(\"[\")) {\n return undefined;\n }\n\n const colonIndex = findTopLevelColon(trimmed);\n\n if (colonIndex < 0) {\n return undefined;\n }\n\n const rawKey = trimmed.slice(0, colonIndex).trim();\n const valueCode = trimmed.slice(colonIndex + 1).trim();\n const key = parseStaticObjectKey(rawKey);\n\n if (key === undefined || valueCode === \"\") {\n return undefined;\n }\n\n entries.push({ cssName: cssPropertyName(key), valueCode });\n }\n\n return entries;\n}\n\nfunction parseStaticStyleObjectLiteralWithOxc(\n objectCode: string,\n): StaticStyleObjectEntry[] | undefined {\n if (!objectCode.startsWith(\"{\") || !objectCode.endsWith(\"}\")) {\n return undefined;\n }\n\n const prefix = \"const __mreactStyle = \";\n const source = `${prefix}${objectCode};`;\n const parsed = parseSync(\"style-object.tsx\", source, {\n lang: \"tsx\",\n sourceType: \"module\",\n astType: \"ts\",\n });\n\n if (parsed.errors.length > 0) {\n return undefined;\n }\n\n const body = readArray(readObject(parsed.program).body);\n const declaration = readArray(readObject(body[0]).declarations)[0];\n const init = unwrapOxcParentheses(readObject(readObject(declaration).init));\n\n if (init.type !== \"ObjectExpression\") {\n return undefined;\n }\n\n const entries: StaticStyleObjectEntry[] = [];\n\n for (const property of readArray(init.properties)) {\n const propertyObject = readObject(property);\n\n if (\n propertyObject.type !== \"Property\" ||\n propertyObject.kind !== \"init\" ||\n propertyObject.method === true ||\n propertyObject.computed === true ||\n propertyObject.shorthand === true\n ) {\n return undefined;\n }\n\n const key = readStaticOxcObjectKey(propertyObject.key);\n const value = readObject(propertyObject.value);\n const start = readNumber(value.start);\n const end = readNumber(value.end);\n\n if (key === undefined || start < prefix.length || end < start) {\n return undefined;\n }\n\n entries.push({\n cssName: cssPropertyName(key),\n valueCode: source.slice(start, end),\n });\n }\n\n return entries;\n}\n\nfunction readStaticOxcObjectKey(node: unknown): string | undefined {\n const key = readObject(node);\n\n if (key.type === \"Identifier\") {\n return typeof key.name === \"string\" ? key.name : undefined;\n }\n\n if (key.type === \"Literal\") {\n return typeof key.value === \"string\" ? key.value : undefined;\n }\n\n return undefined;\n}\n\nfunction readNumber(value: unknown): number {\n return typeof value === \"number\" ? value : -1;\n}\n\nexport function simpleSideEffectFreeExpression(code: string): string | undefined {\n const trimmed = unwrapParenthesized(code.trim());\n\n if (trimmed === \"\") {\n return undefined;\n }\n\n if (\n trimmed === \"true\" ||\n trimmed === \"false\" ||\n trimmed === \"null\" ||\n trimmed === \"undefined\"\n ) {\n return trimmed;\n }\n\n if (\n NUMERIC_LITERAL_RE.test(trimmed) ||\n SIMPLE_STRING_LITERAL_RE.test(trimmed) ||\n SIMPLE_SINGLE_QUOTE_RE.test(trimmed) ||\n SIMPLE_IDENT_CHAIN_RE.test(trimmed)\n ) {\n return trimmed;\n }\n\n return undefined;\n}\n\nexport function htmlAttributeName(name: string): string {\n return HTML_ATTRIBUTE_ALIASES[name] ?? name;\n}\n\nfunction unwrapParenthesized(code: string): string {\n let current = code;\n\n while (current.startsWith(\"(\") && current.endsWith(\")\") && findMatchingClose(current, 0) === current.length - 1) {\n current = current.slice(1, -1).trim();\n }\n\n return current;\n}\n\nfunction splitTopLevel(code: string, separator: string): string[] {\n const parts: string[] = [];\n let start = 0;\n let depth = 0;\n let quote: string | undefined;\n\n for (let index = 0; index < code.length; index += 1) {\n const char = code[index];\n\n if (quote !== undefined) {\n if (char === \"\\\\\") {\n index += 1;\n } else if (char === quote) {\n quote = undefined;\n }\n continue;\n }\n\n if (char === \"\\\"\" || char === \"'\" || char === \"`\") {\n quote = char;\n continue;\n }\n\n if (char === \"{\" || char === \"[\" || char === \"(\") {\n depth += 1;\n continue;\n }\n\n if (char === \"}\" || char === \"]\" || char === \")\") {\n depth -= 1;\n continue;\n }\n\n if (depth === 0 && char === separator) {\n parts.push(code.slice(start, index));\n start = index + 1;\n }\n }\n\n parts.push(code.slice(start));\n return parts;\n}\n\nfunction findTopLevelColon(code: string): number {\n return splitTopLevel(code, \":\")[0]?.length ?? -1;\n}\n\nfunction findMatchingClose(code: string, openIndex: number): number {\n let depth = 0;\n let quote: string | undefined;\n\n for (let index = openIndex; index < code.length; index += 1) {\n const char = code[index];\n\n if (quote !== undefined) {\n if (char === \"\\\\\") {\n index += 1;\n } else if (char === quote) {\n quote = undefined;\n }\n continue;\n }\n\n if (char === \"\\\"\" || char === \"'\" || char === \"`\") {\n quote = char;\n continue;\n }\n\n if (char === \"(\") {\n depth += 1;\n } else if (char === \")\") {\n depth -= 1;\n\n if (depth === 0) {\n return index;\n }\n }\n }\n\n return -1;\n}\n\nfunction parseStaticObjectKey(rawKey: string): string | undefined {\n if (/^[A-Za-z_$][\\w$-]*$/.test(rawKey)) {\n return rawKey;\n }\n\n if (\n (rawKey.startsWith(\"\\\"\") && rawKey.endsWith(\"\\\"\")) ||\n (rawKey.startsWith(\"'\") && rawKey.endsWith(\"'\"))\n ) {\n return rawKey.slice(1, -1);\n }\n\n return undefined;\n}\n\nfunction cssPropertyName(name: string): string {\n return name.startsWith(\"--\")\n ? name\n : name.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"emit-server-shared.js","sourceRoot":"","sources":["../src/emit-server-shared.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseSync } from \"oxc-parser\";\nimport { readArray, readObject, unwrapOxcParentheses } from \"./oxc-node-utils.js\";\n\nexport interface StaticStyleObjectEntry {\n cssName: string;\n valueCode: string;\n}\n\nconst URL_ATTRIBUTE_NAMES = new Set([\n \"href\",\n \"src\",\n \"action\",\n \"formaction\",\n \"xlink:href\",\n \"ping\",\n \"poster\",\n \"background\",\n \"manifest\",\n]);\n\nconst DANGEROUS_HTML_ATTRIBUTE_NAMES = new Set([\"srcdoc\"]);\n\nconst VOID_HTML_ELEMENT_NAMES = new Set([\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\n\nconst SIMPLE_IDENT_CHAIN_RE = /^(this|[A-Za-z_$][\\w$]*)(\\.[A-Za-z_$][\\w$]*)*$/;\nconst NUMERIC_LITERAL_RE = /^-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)$/;\nconst SIMPLE_STRING_LITERAL_RE = /^\"(?:[^\"\\\\]|\\\\.)*\"$/;\nconst SIMPLE_SINGLE_QUOTE_RE = /^'(?:[^'\\\\]|\\\\.)*'$/;\n\nconst 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 readOnly: \"readonly\",\n rowSpan: \"rowspan\",\n spellCheck: \"spellcheck\",\n srcDoc: \"srcdoc\",\n srcSet: \"srcset\",\n tabIndex: \"tabindex\",\n useMap: \"usemap\",\n};\n\nexport function isUrlAttribute(name: string): boolean {\n return URL_ATTRIBUTE_NAMES.has(name);\n}\n\nexport function isDangerousHtmlAttribute(name: string): boolean {\n return DANGEROUS_HTML_ATTRIBUTE_NAMES.has(name);\n}\n\nexport function isVoidHtmlElement(tagName: string): boolean {\n return VOID_HTML_ELEMENT_NAMES.has(tagName);\n}\n\nexport function isStaticUrlValueUnsafe(name: string, value: string): boolean {\n let start = 0;\n\n while (start < value.length && value.charCodeAt(start) <= 0x20) {\n start += 1;\n }\n\n const canonical = value.slice(start).replace(/[\\t\\r\\n]/g, \"\");\n const match = /^([a-zA-Z][a-zA-Z0-9+.-]*):/.exec(canonical);\n if (match === null || match[1] === undefined) return false;\n const scheme = match[1].toLowerCase();\n if (scheme === \"javascript\" || scheme === \"vbscript\" || scheme === \"livescript\" || scheme === \"mhtml\" || scheme === \"file\") return true;\n if (scheme === \"data\") {\n if ((name === \"src\" || name === \"poster\") && /^data:image\\/(?!svg\\+xml(?:[;,]|$))/i.test(canonical)) return false;\n return true;\n }\n return false;\n}\n\nexport function parseStyleLiteralValue(code: string): string | number | null | undefined {\n const trimmed = unwrapParenthesized(code.trim());\n\n if (trimmed === \"null\" || trimmed === \"false\" || trimmed === \"undefined\") {\n return null;\n }\n\n if (trimmed === \"true\") {\n return \"\";\n }\n\n if (NUMERIC_LITERAL_RE.test(trimmed)) {\n return Number(trimmed);\n }\n\n if (SIMPLE_STRING_LITERAL_RE.test(trimmed)) {\n return JSON.parse(trimmed) as string;\n }\n\n if (SIMPLE_SINGLE_QUOTE_RE.test(trimmed)) {\n return JSON.parse(`\"${trimmed.slice(1, -1).replaceAll('\"', '\\\\\"')}\"`) as string;\n }\n\n return undefined;\n}\n\nexport function parseStaticStyleObjectLiteral(\n code: string,\n): StaticStyleObjectEntry[] | undefined {\n const objectCode = unwrapParenthesized(code.trim());\n const stringParsedEntries = parseStaticStyleObjectLiteralFromString(objectCode);\n\n if (stringParsedEntries !== undefined) {\n return stringParsedEntries;\n }\n\n return parseStaticStyleObjectLiteralWithOxc(objectCode);\n}\n\nfunction parseStaticStyleObjectLiteralFromString(\n objectCode: string,\n): StaticStyleObjectEntry[] | undefined {\n if (!objectCode.startsWith(\"{\") || !objectCode.endsWith(\"}\")) {\n return undefined;\n }\n\n const body = objectCode.slice(1, -1).trim();\n\n if (body === \"\") {\n return [];\n }\n\n const entries: StaticStyleObjectEntry[] = [];\n\n for (const property of splitTopLevel(body, \",\")) {\n const trimmed = property.trim();\n\n if (trimmed === \"\" || trimmed.startsWith(\"...\") || trimmed.startsWith(\"[\")) {\n return undefined;\n }\n\n const colonIndex = findTopLevelColon(trimmed);\n\n if (colonIndex < 0) {\n return undefined;\n }\n\n const rawKey = trimmed.slice(0, colonIndex).trim();\n const valueCode = trimmed.slice(colonIndex + 1).trim();\n const key = parseStaticObjectKey(rawKey);\n\n if (key === undefined || valueCode === \"\") {\n return undefined;\n }\n\n entries.push({ cssName: cssPropertyName(key), valueCode });\n }\n\n return entries;\n}\n\nfunction parseStaticStyleObjectLiteralWithOxc(\n objectCode: string,\n): StaticStyleObjectEntry[] | undefined {\n if (!objectCode.startsWith(\"{\") || !objectCode.endsWith(\"}\")) {\n return undefined;\n }\n\n const prefix = \"const __mreactStyle = \";\n const source = `${prefix}${objectCode};`;\n const parsed = parseSync(\"style-object.tsx\", source, {\n lang: \"tsx\",\n sourceType: \"module\",\n astType: \"ts\",\n });\n\n if (parsed.errors.length > 0) {\n return undefined;\n }\n\n const body = readArray(readObject(parsed.program).body);\n const declaration = readArray(readObject(body[0]).declarations)[0];\n const init = unwrapOxcParentheses(readObject(readObject(declaration).init));\n\n if (init.type !== \"ObjectExpression\") {\n return undefined;\n }\n\n const entries: StaticStyleObjectEntry[] = [];\n\n for (const property of readArray(init.properties)) {\n const propertyObject = readObject(property);\n\n if (\n propertyObject.type !== \"Property\" ||\n propertyObject.kind !== \"init\" ||\n propertyObject.method === true ||\n propertyObject.computed === true ||\n propertyObject.shorthand === true\n ) {\n return undefined;\n }\n\n const key = readStaticOxcObjectKey(propertyObject.key);\n const value = readObject(propertyObject.value);\n const start = readNumber(value.start);\n const end = readNumber(value.end);\n\n if (key === undefined || start < prefix.length || end < start) {\n return undefined;\n }\n\n entries.push({\n cssName: cssPropertyName(key),\n valueCode: source.slice(start, end),\n });\n }\n\n return entries;\n}\n\nfunction readStaticOxcObjectKey(node: unknown): string | undefined {\n const key = readObject(node);\n\n if (key.type === \"Identifier\") {\n return typeof key.name === \"string\" ? key.name : undefined;\n }\n\n if (key.type === \"Literal\") {\n return typeof key.value === \"string\" ? key.value : undefined;\n }\n\n return undefined;\n}\n\nfunction readNumber(value: unknown): number {\n return typeof value === \"number\" ? value : -1;\n}\n\nexport function simpleSideEffectFreeExpression(code: string): string | undefined {\n const trimmed = unwrapParenthesized(code.trim());\n\n if (trimmed === \"\") {\n return undefined;\n }\n\n if (\n trimmed === \"true\" ||\n trimmed === \"false\" ||\n trimmed === \"null\" ||\n trimmed === \"undefined\"\n ) {\n return trimmed;\n }\n\n if (\n NUMERIC_LITERAL_RE.test(trimmed) ||\n SIMPLE_STRING_LITERAL_RE.test(trimmed) ||\n SIMPLE_SINGLE_QUOTE_RE.test(trimmed) ||\n SIMPLE_IDENT_CHAIN_RE.test(trimmed)\n ) {\n return trimmed;\n }\n\n return undefined;\n}\n\nexport function htmlAttributeName(name: string): string {\n return HTML_ATTRIBUTE_ALIASES[name] ?? name;\n}\n\nexport function isBooleanishStringAttribute(name: string): boolean {\n const attributeName = htmlAttributeName(name).toLowerCase();\n return (\n attributeName.startsWith(\"aria-\") ||\n attributeName.startsWith(\"data-\") ||\n BOOLEANISH_STRING_ATTRIBUTES.has(attributeName)\n );\n}\n\nconst BOOLEANISH_STRING_ATTRIBUTES = new Set<string>([\n \"contenteditable\",\n \"draggable\",\n \"spellcheck\",\n]);\n\nfunction unwrapParenthesized(code: string): string {\n let current = code;\n\n while (current.startsWith(\"(\") && current.endsWith(\")\") && findMatchingClose(current, 0) === current.length - 1) {\n current = current.slice(1, -1).trim();\n }\n\n return current;\n}\n\nfunction splitTopLevel(code: string, separator: string): string[] {\n const parts: string[] = [];\n let start = 0;\n let depth = 0;\n let quote: string | undefined;\n\n for (let index = 0; index < code.length; index += 1) {\n const char = code[index];\n\n if (quote !== undefined) {\n if (char === \"\\\\\") {\n index += 1;\n } else if (char === quote) {\n quote = undefined;\n }\n continue;\n }\n\n if (char === \"\\\"\" || char === \"'\" || char === \"`\") {\n quote = char;\n continue;\n }\n\n if (char === \"{\" || char === \"[\" || char === \"(\") {\n depth += 1;\n continue;\n }\n\n if (char === \"}\" || char === \"]\" || char === \")\") {\n depth -= 1;\n continue;\n }\n\n if (depth === 0 && char === separator) {\n parts.push(code.slice(start, index));\n start = index + 1;\n }\n }\n\n parts.push(code.slice(start));\n return parts;\n}\n\nfunction findTopLevelColon(code: string): number {\n return splitTopLevel(code, \":\")[0]?.length ?? -1;\n}\n\nfunction findMatchingClose(code: string, openIndex: number): number {\n let depth = 0;\n let quote: string | undefined;\n\n for (let index = openIndex; index < code.length; index += 1) {\n const char = code[index];\n\n if (quote !== undefined) {\n if (char === \"\\\\\") {\n index += 1;\n } else if (char === quote) {\n quote = undefined;\n }\n continue;\n }\n\n if (char === \"\\\"\" || char === \"'\" || char === \"`\") {\n quote = char;\n continue;\n }\n\n if (char === \"(\") {\n depth += 1;\n } else if (char === \")\") {\n depth -= 1;\n\n if (depth === 0) {\n return index;\n }\n }\n }\n\n return -1;\n}\n\nfunction parseStaticObjectKey(rawKey: string): string | undefined {\n if (/^[A-Za-z_$][\\w$-]*$/.test(rawKey)) {\n return rawKey;\n }\n\n if (\n (rawKey.startsWith(\"\\\"\") && rawKey.endsWith(\"\\\"\")) ||\n (rawKey.startsWith(\"'\") && rawKey.endsWith(\"'\"))\n ) {\n return rawKey.slice(1, -1);\n }\n\n return undefined;\n}\n\nfunction cssPropertyName(name: string): string {\n return name.startsWith(\"--\")\n ? name\n : name.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit-server-stream.d.ts","sourceRoot":"","sources":["../src/emit-server-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAMV,QAAQ,EACT,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"emit-server-stream.d.ts","sourceRoot":"","sources":["../src/emit-server-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAMV,QAAQ,EACT,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AA0B1F,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,MAAM,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACzC,4BAA4B,CAAC,EAAE,MAAM,CAAC;CACvC;AAcD,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,EACZ,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,CAsIxB"}
|
|
@@ -2,7 +2,7 @@ import { emitEscapeHtmlHelper } from "./emit-escape-helper.js";
|
|
|
2
2
|
import { createCodeBuilder } from "./emit-code-builder.js";
|
|
3
3
|
import { emitAsyncBoundary as emitLoweredAsyncBoundary, emitOutOfOrderBoundary as emitLoweredOutOfOrderBoundary, emitReactSuspenseBoundary as emitLoweredReactSuspenseBoundary, emitReactSuspenseOutOfOrderBoundary as emitLoweredReactSuspenseOutOfOrderBoundary, } from "./emit-boundary-lowering.js";
|
|
4
4
|
import { escapeHtmlAttribute as escapeHtml } from "@reckona/mreact-shared/html-escape";
|
|
5
|
-
import { htmlAttributeName, isDangerousHtmlAttribute, isStaticUrlValueUnsafe, isUrlAttribute, isVoidHtmlElement, parseStaticStyleObjectLiteral, parseStyleLiteralValue, simpleSideEffectFreeExpression, } from "./emit-server-shared.js";
|
|
5
|
+
import { htmlAttributeName, isBooleanishStringAttribute, isDangerousHtmlAttribute, isStaticUrlValueUnsafe, isUrlAttribute, isVoidHtmlElement, parseStaticStyleObjectLiteral, parseStyleLiteralValue, simpleSideEffectFreeExpression, } from "./emit-server-shared.js";
|
|
6
6
|
import { emitOxcCompatObjectChildren, oxcServerStringReactNodeRenderHelperPlaceholder, } from "./oxc-runtime-emit.js";
|
|
7
7
|
let currentUrlSafeHelperName = "_urlAttrSafe";
|
|
8
8
|
let currentClientBoundaryHelperName;
|
|
@@ -199,7 +199,12 @@ function emitClientBoundaryHelper(name) {
|
|
|
199
199
|
` const _props = props ?? {};`,
|
|
200
200
|
` const _nonSerializable = ${propsHelperName}(_props);`,
|
|
201
201
|
` const _nonSerializableAttr = _nonSerializable ? ' data-mreact-client-boundary-nonserializable="true"' : "";`,
|
|
202
|
-
` const _json = (JSON.stringify(_props) ?? "{}")
|
|
202
|
+
` const _json = (JSON.stringify(_props) ?? "{}")`,
|
|
203
|
+
` .replaceAll("&", "\\\\u0026")`,
|
|
204
|
+
` .replaceAll("<", "\\\\u003c")`,
|
|
205
|
+
` .replaceAll(">", "\\\\u003e")`,
|
|
206
|
+
` .replaceAll("\\u2028", "\\\\u2028")`,
|
|
207
|
+
` .replaceAll("\\u2029", "\\\\u2029");`,
|
|
203
208
|
` return \`<template data-mreact-client-boundary="\${_escapedName}"\${_nonSerializableAttr}></template>\${childrenHtml}<script type="application/json" data-mreact-client-boundary-props="\${_escapedName}">\${_json}</script>\`;`,
|
|
204
209
|
`}`,
|
|
205
210
|
].join("\n");
|
|
@@ -264,11 +269,13 @@ function emitSpreadAttributesHelper(name, escapeHelperName, urlSafeHelperName) {
|
|
|
264
269
|
` let _out = "";`,
|
|
265
270
|
` for (const _rawName of Object.keys(props)) {`,
|
|
266
271
|
` let _value = props[_rawName];`,
|
|
267
|
-
` if (_value == null
|
|
272
|
+
` if (_value == null) continue;`,
|
|
268
273
|
` if (_rawName === "key" || _rawName === "ref" || _rawName === "children") continue;`,
|
|
269
274
|
` if (/^on[A-Za-z]/.test(_rawName)) continue;`,
|
|
270
275
|
` let _name = tagName === "input" && _rawName === "defaultValue" ? "value" : tagName === "input" && _rawName === "defaultChecked" ? "checked" : (${name}$aliases[_rawName] ?? _rawName);`,
|
|
271
276
|
` if (!/^[A-Za-z_:][A-Za-z0-9:_.-]*$/.test(_name)) continue;`,
|
|
277
|
+
` const _booleanish = _name.startsWith("aria-") || _name.startsWith("data-") || _name === "contenteditable" || _name === "draggable" || _name === "spellcheck";`,
|
|
278
|
+
` if (_value === false && !_booleanish) continue;`,
|
|
272
279
|
` if (_name === "style") {`,
|
|
273
280
|
` const _style = ${name}$style(_value);`,
|
|
274
281
|
` if (_style !== "") _out += " style=\\"" + ${escapeHelperName}(_style) + "\\"";`,
|
|
@@ -284,7 +291,7 @@ function emitSpreadAttributesHelper(name, escapeHelperName, urlSafeHelperName) {
|
|
|
284
291
|
` _value = ${urlSafeHelperName}(_name, _value === true ? "" : _value);`,
|
|
285
292
|
` if (_value === undefined) continue;`,
|
|
286
293
|
` }`,
|
|
287
|
-
` _out += " " + _name + "=\\"" + ${escapeHelperName}(_value === true ? "" : _value) + "\\"";`,
|
|
294
|
+
` _out += " " + _name + "=\\"" + ${escapeHelperName}(_value === true && !_booleanish ? "" : _value) + "\\"";`,
|
|
288
295
|
` }`,
|
|
289
296
|
` return _out;`,
|
|
290
297
|
`}`,
|
|
@@ -1047,15 +1054,20 @@ function readFormValueAttributeCode(attr) {
|
|
|
1047
1054
|
return attr.kind === "static-attr" ? stringLiteral(attr.value) : `(${attr.code})`;
|
|
1048
1055
|
}
|
|
1049
1056
|
function emitDynamicAttributeExpression(name, code, escapeHelperName) {
|
|
1057
|
+
const booleanishString = isBooleanishStringAttribute(name);
|
|
1050
1058
|
if (isUrlAttribute(name)) {
|
|
1051
1059
|
return `(() => { const _value = (${code}); if (_value == null || _value === false) return ""; const _checked = ${currentUrlSafeHelperName}(${stringLiteral(name)}, _value === true ? "" : _value); return _checked === undefined ? "" : ${stringLiteral(` ${name}="`)} + ${escapeHelperName}(_checked) + ${stringLiteral('"')}; })()`;
|
|
1052
1060
|
}
|
|
1053
1061
|
const inlineExpr = simpleSideEffectFreeExpression(code);
|
|
1054
1062
|
if (inlineExpr !== undefined) {
|
|
1055
1063
|
// Inline 3 evaluations to avoid per-attribute IIFE closure allocation.
|
|
1056
|
-
return
|
|
1064
|
+
return booleanishString
|
|
1065
|
+
? `(${inlineExpr} == null ? "" : ${stringLiteral(` ${name}="`)} + ${escapeHelperName}(${inlineExpr}) + ${stringLiteral('"')})`
|
|
1066
|
+
: `(${inlineExpr} == null || ${inlineExpr} === false ? "" : ${stringLiteral(` ${name}="`)} + ${escapeHelperName}(${inlineExpr} === true ? "" : ${inlineExpr}) + ${stringLiteral('"')})`;
|
|
1057
1067
|
}
|
|
1058
|
-
return
|
|
1068
|
+
return booleanishString
|
|
1069
|
+
? `(() => { const _value = (${code}); return _value == null ? "" : ${stringLiteral(` ${name}="`)} + ${escapeHelperName}(_value) + ${stringLiteral('"')}; })()`
|
|
1070
|
+
: `(() => { const _value = (${code}); return _value == null || _value === false ? "" : ${stringLiteral(` ${name}="`)} + ${escapeHelperName}(_value === true ? "" : _value) + ${stringLiteral('"')}; })()`;
|
|
1059
1071
|
}
|
|
1060
1072
|
function emitDynamicStyleAttributeExpression(code, escapeHelperName, escapeBatchHelperName) {
|
|
1061
1073
|
const staticStyleExpression = emitStaticStyleObjectAttributeExpression(code, escapeHelperName);
|