@flight-framework/core 0.3.2 → 0.5.0

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.
Files changed (141) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +541 -541
  3. package/dist/actions/index.js +1 -1
  4. package/dist/adapters/index.d.ts +260 -1
  5. package/dist/adapters/index.js +1 -1
  6. package/dist/cache/index.js +1 -1
  7. package/dist/{chunk-3UQJE3XZ.js → chunk-2F2QU6RC.js} +2 -2
  8. package/dist/chunk-2F2QU6RC.js.map +1 -0
  9. package/dist/{chunk-4U7CJVNQ.js → chunk-3KRBRSRJ.js} +2 -2
  10. package/dist/chunk-3KRBRSRJ.js.map +1 -0
  11. package/dist/{chunk-OZ3EXPLE.js → chunk-3QP3E7HS.js} +2 -2
  12. package/dist/chunk-3QP3E7HS.js.map +1 -0
  13. package/dist/{chunk-CKJHJPKQ.js → chunk-62C7LX2E.js} +2 -2
  14. package/dist/chunk-62C7LX2E.js.map +1 -0
  15. package/dist/{chunk-YNTMYL36.js → chunk-6BDCTUQY.js} +3 -3
  16. package/dist/chunk-6BDCTUQY.js.map +1 -0
  17. package/dist/chunk-77MJZCYD.js +354 -0
  18. package/dist/chunk-77MJZCYD.js.map +1 -0
  19. package/dist/{chunk-KDEA64UX.js → chunk-EGB7C73X.js} +5 -5
  20. package/dist/chunk-EGB7C73X.js.map +1 -0
  21. package/dist/{chunk-2JVEH76V.js → chunk-FSJNOPYE.js} +3 -3
  22. package/dist/chunk-FSJNOPYE.js.map +1 -0
  23. package/dist/{chunk-ARBKF6VI.js → chunk-GCQZ4FHI.js} +2 -2
  24. package/dist/{chunk-ARBKF6VI.js.map → chunk-GCQZ4FHI.js.map} +1 -1
  25. package/dist/{chunk-EHVUAFNH.js → chunk-IXMD5QH2.js} +2 -2
  26. package/dist/chunk-IXMD5QH2.js.map +1 -0
  27. package/dist/{chunk-6GI6HFSQ.js → chunk-K2CQZPCG.js} +2 -2
  28. package/dist/chunk-K2CQZPCG.js.map +1 -0
  29. package/dist/{chunk-6IG6XIXU.js → chunk-LNV47HGV.js} +2 -2
  30. package/dist/chunk-LNV47HGV.js.map +1 -0
  31. package/dist/{chunk-65JYF3DJ.js → chunk-MDQNNIHH.js} +2 -2
  32. package/dist/chunk-MDQNNIHH.js.map +1 -0
  33. package/dist/{chunk-GNS2FGPC.js → chunk-MQQLYWZZ.js} +2 -2
  34. package/dist/chunk-MQQLYWZZ.js.map +1 -0
  35. package/dist/{chunk-LAKHYTHL.js → chunk-NWMJYTMB.js} +3 -3
  36. package/dist/chunk-NWMJYTMB.js.map +1 -0
  37. package/dist/{chunk-R7MEVVA4.js → chunk-OYF2OAKS.js} +2 -2
  38. package/dist/chunk-OYF2OAKS.js.map +1 -0
  39. package/dist/{chunk-FRAH5QNY.js → chunk-P6WSBVDT.js} +4 -4
  40. package/dist/chunk-P6WSBVDT.js.map +1 -0
  41. package/dist/{chunk-5XHOLZBJ.js → chunk-PDW5WCMW.js} +2 -2
  42. package/dist/chunk-PDW5WCMW.js.map +1 -0
  43. package/dist/{chunk-A2QRUBVE.js → chunk-PVUMB632.js} +2 -2
  44. package/dist/chunk-PVUMB632.js.map +1 -0
  45. package/dist/{chunk-LKOPJ3GS.js → chunk-R7SQAREQ.js} +2 -2
  46. package/dist/chunk-R7SQAREQ.js.map +1 -0
  47. package/dist/{chunk-CNY3ZUVG.js → chunk-RSVA2EYO.js} +2 -2
  48. package/dist/chunk-RSVA2EYO.js.map +1 -0
  49. package/dist/{chunk-PAVI5W6M.js → chunk-T4Z4HM4W.js} +3 -3
  50. package/dist/chunk-T4Z4HM4W.js.map +1 -0
  51. package/dist/{chunk-HNPO6LFW.js → chunk-TASAT7KB.js} +2 -2
  52. package/dist/chunk-TASAT7KB.js.map +1 -0
  53. package/dist/{chunk-3N5ZBVZJ.js → chunk-VPFMHGEV.js} +2 -2
  54. package/dist/chunk-VPFMHGEV.js.map +1 -0
  55. package/dist/{chunk-A4TKWQBU.js → chunk-W6D62JCI.js} +2 -2
  56. package/dist/chunk-W6D62JCI.js.map +1 -0
  57. package/dist/{chunk-UFWGOJL7.js → chunk-WFAWAHJH.js} +2 -2
  58. package/dist/chunk-WFAWAHJH.js.map +1 -0
  59. package/dist/{chunk-NZS2YJ43.js → chunk-WOEIJWGJ.js} +2 -2
  60. package/dist/chunk-WOEIJWGJ.js.map +1 -0
  61. package/dist/{chunk-VNO2YUVD.js → chunk-XOIYNY4I.js} +2 -2
  62. package/dist/chunk-XOIYNY4I.js.map +1 -0
  63. package/dist/{chunk-PO7IHPFF.js → chunk-XSY5AAXT.js} +2 -2
  64. package/dist/chunk-XSY5AAXT.js.map +1 -0
  65. package/dist/{chunk-OZBPR27I.js → chunk-YHEVHRLH.js} +2 -2
  66. package/dist/chunk-YHEVHRLH.js.map +1 -0
  67. package/dist/{chunk-XU6MRYG2.js → chunk-ZIE56LCA.js} +3 -3
  68. package/dist/chunk-ZIE56LCA.js.map +1 -0
  69. package/dist/{chunk-B2LPSCES.js → chunk-ZVC3ZWLM.js} +2 -2
  70. package/dist/chunk-ZVC3ZWLM.js.map +1 -0
  71. package/dist/client.js +8 -8
  72. package/dist/client.js.map +1 -1
  73. package/dist/config/index.js +1 -1
  74. package/dist/errors/index.js +2 -2
  75. package/dist/file-router/index.js +1 -1
  76. package/dist/file-router/streaming-hints.js +1 -1
  77. package/dist/handlers/index.js +1 -1
  78. package/dist/index.js +30 -30
  79. package/dist/index.js.map +1 -1
  80. package/dist/islands/index.js +1 -1
  81. package/dist/middleware/index.js +1 -1
  82. package/dist/react/index.js +2 -2
  83. package/dist/react/index.js.map +1 -1
  84. package/dist/render/index.js +1 -1
  85. package/dist/router/index.js +1 -1
  86. package/dist/rsc/adapters/index.js +4 -4
  87. package/dist/rsc/adapters/preact.js +1 -1
  88. package/dist/rsc/adapters/react.js +1 -1
  89. package/dist/rsc/adapters/solid.js +1 -1
  90. package/dist/rsc/adapters/vue.js +1 -1
  91. package/dist/rsc/boundaries.js +1 -1
  92. package/dist/rsc/context.js +1 -1
  93. package/dist/rsc/index.js +11 -11
  94. package/dist/rsc/legacy.js +1 -1
  95. package/dist/rsc/payload.js +1 -1
  96. package/dist/rsc/plugins/esbuild.js +2 -2
  97. package/dist/rsc/plugins/index.js +4 -4
  98. package/dist/rsc/plugins/rollup.js +2 -2
  99. package/dist/rsc/renderer.js +3 -3
  100. package/dist/rsc/stream.js +1 -1
  101. package/dist/rsc/vite-plugin.js +2 -2
  102. package/dist/server/index.js +4 -4
  103. package/dist/streaming/adapters/index.js +1 -1
  104. package/dist/streaming/conditional.js +1 -1
  105. package/dist/streaming/index.js +1 -1
  106. package/dist/streaming/observability.js +2 -2
  107. package/dist/streaming/priority.js +1 -1
  108. package/dist/utils/index.js +1 -1
  109. package/package.json +1 -1
  110. package/dist/chunk-2JVEH76V.js.map +0 -1
  111. package/dist/chunk-3N5ZBVZJ.js.map +0 -1
  112. package/dist/chunk-3UQJE3XZ.js.map +0 -1
  113. package/dist/chunk-4U7CJVNQ.js.map +0 -1
  114. package/dist/chunk-5XHOLZBJ.js.map +0 -1
  115. package/dist/chunk-65JYF3DJ.js.map +0 -1
  116. package/dist/chunk-6GI6HFSQ.js.map +0 -1
  117. package/dist/chunk-6IG6XIXU.js.map +0 -1
  118. package/dist/chunk-A2QRUBVE.js.map +0 -1
  119. package/dist/chunk-A4TKWQBU.js.map +0 -1
  120. package/dist/chunk-B2LPSCES.js.map +0 -1
  121. package/dist/chunk-CKJHJPKQ.js.map +0 -1
  122. package/dist/chunk-CNY3ZUVG.js.map +0 -1
  123. package/dist/chunk-EHVUAFNH.js.map +0 -1
  124. package/dist/chunk-FRAH5QNY.js.map +0 -1
  125. package/dist/chunk-GNS2FGPC.js.map +0 -1
  126. package/dist/chunk-HNPO6LFW.js.map +0 -1
  127. package/dist/chunk-KDEA64UX.js.map +0 -1
  128. package/dist/chunk-LAKHYTHL.js.map +0 -1
  129. package/dist/chunk-LKOPJ3GS.js.map +0 -1
  130. package/dist/chunk-NZS2YJ43.js.map +0 -1
  131. package/dist/chunk-OZ3EXPLE.js.map +0 -1
  132. package/dist/chunk-OZBPR27I.js.map +0 -1
  133. package/dist/chunk-PAVI5W6M.js.map +0 -1
  134. package/dist/chunk-PO7IHPFF.js.map +0 -1
  135. package/dist/chunk-QK6UEQ75.js +0 -13
  136. package/dist/chunk-QK6UEQ75.js.map +0 -1
  137. package/dist/chunk-R7MEVVA4.js.map +0 -1
  138. package/dist/chunk-UFWGOJL7.js.map +0 -1
  139. package/dist/chunk-VNO2YUVD.js.map +0 -1
  140. package/dist/chunk-XU6MRYG2.js.map +0 -1
  141. package/dist/chunk-YNTMYL36.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/.pnpm/radix3@1.1.2/node_modules/radix3/dist/index.mjs","../src/router/index.ts"],"names":["createRouter"],"mappings":";AAAA,IAAM,UAAA,GAAa;AAAA,EACjB,MAAA,EAAQ,CAAA;AAAA,EACR,QAAA,EAAU,CAAA;AAAA,EACV,WAAA,EAAa;AACf,CAAA;AAEA,SAAS,YAAA,CAAa,OAAA,GAAU,EAAC,EAAG;AAClC,EAAA,MAAM,GAAA,GAAM;AAAA,IACV,OAAA;AAAA,IACA,UAAU,eAAA,EAAgB;AAAA,IAC1B,iBAAiB;AAAC,GACpB;AACA,EAAA,MAAM,sBAAA,GAAyB,CAAC,CAAA,KAAM,OAAA,CAAQ,mBAAA,GAAsB,IAAI,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,IAAK,GAAA;AAChG,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,KAAA,MAAW,IAAA,IAAQ,QAAQ,MAAA,EAAQ;AACjC,MAAA,MAAA,CAAO,KAAK,sBAAA,CAAuB,IAAI,GAAG,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IAChE;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,GAAA;AAAA,IACA,QAAQ,CAAC,IAAA,KAAS,OAAO,GAAA,EAAK,sBAAA,CAAuB,IAAI,CAAC,CAAA;AAAA,IAC1D,MAAA,EAAQ,CAAC,IAAA,EAAM,IAAA,KAAS,OAAO,GAAA,EAAK,sBAAA,CAAuB,IAAI,CAAA,EAAG,IAAI,CAAA;AAAA,IACtE,QAAQ,CAAC,IAAA,KAAS,OAAO,GAAA,EAAK,sBAAA,CAAuB,IAAI,CAAC;AAAA,GAC5D;AACF;AACA,SAAS,MAAA,CAAO,KAAK,IAAA,EAAM;AACzB,EAAA,MAAM,cAAA,GAAiB,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAA;AAC/C,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,OAAO,cAAA,CAAe,IAAA;AAAA,EACxB;AACA,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC/B,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,IAAI,WAAA,GAAc,KAAA;AAClB,EAAA,IAAI,YAAA,GAAe,IAAA;AACnB,EAAA,IAAI,OAAO,GAAA,CAAI,QAAA;AACf,EAAA,IAAI,aAAA,GAAgB,IAAA;AACpB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACxC,IAAA,MAAM,OAAA,GAAU,SAAS,CAAC,CAAA;AAC1B,IAAA,IAAI,IAAA,CAAK,sBAAsB,IAAA,EAAM;AACnC,MAAA,YAAA,GAAe,IAAA,CAAK,iBAAA;AACpB,MAAA,aAAA,GAAgB,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,IAC5C;AACA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AAC1C,IAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,MAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,mBAAA,CAAoB,MAAA,GAAS,CAAA,EAAG;AAC/C,QAAA,MAAM,SAAA,GAAY,SAAS,MAAA,GAAS,CAAA;AACpC,QAAA,IAAA,GAAO,IAAA,CAAK,oBAAoB,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,QAAA,KAAa,SAAS,CAAA,IAAK,IAAA;AAAA,MAC3E,CAAA,MAAO;AACL,QAAA,IAAA,GAAO,IAAA,CAAK,mBAAA,CAAoB,CAAC,CAAA,IAAK,IAAA;AAAA,MACxC;AACA,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA;AAAA,MACF;AACA,MAAA,IAAI,KAAK,SAAA,EAAW;AAClB,QAAA,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA,GAAI,OAAA;AAAA,MAC3B;AACA,MAAA,WAAA,GAAc,IAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,IAAA,GAAO,QAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,IAAA,CAAK,SAAS,IAAA,IAAQ,IAAA,CAAK,IAAA,KAAS,IAAA,KAAS,iBAAiB,IAAA,EAAM;AAClE,IAAA,IAAA,GAAO,YAAA;AACP,IAAA,MAAA,CAAO,IAAA,CAAK,SAAA,IAAa,GAAG,CAAA,GAAI,aAAA;AAChC,IAAA,WAAA,GAAc,IAAA;AAAA,EAChB;AACA,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,OAAO;AAAA,MACL,GAAG,IAAA,CAAK,IAAA;AAAA,MACR,MAAA,EAAQ,cAAc,MAAA,GAAS;AAAA,KACjC;AAAA,EACF;AACA,EAAA,OAAO,IAAA,CAAK,IAAA;AACd;AACA,SAAS,MAAA,CAAO,GAAA,EAAK,IAAA,EAAM,IAAA,EAAM;AAC/B,EAAA,IAAI,aAAA,GAAgB,IAAA;AACpB,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC/B,EAAA,IAAI,OAAO,GAAA,CAAI,QAAA;AACf,EAAA,IAAI,sBAAA,GAAyB,CAAA;AAC7B,EAAA,MAAM,YAAA,GAAe,CAAC,IAAI,CAAA;AAC1B,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI,SAAA,GAAY,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA,EAAG;AAC1C,MAAA,IAAA,GAAO,SAAA;AAAA,IACT,CAAA,MAAO;AACL,MAAA,MAAM,IAAA,GAAO,YAAY,OAAO,CAAA;AAChC,MAAA,SAAA,GAAY,eAAA,CAAgB,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAA;AAClD,MAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,OAAA,EAAS,SAAS,CAAA;AACpC,MAAA,IAAI,IAAA,KAAS,WAAW,WAAA,EAAa;AACnC,QAAA,SAAA,CAAU,SAAA,GAAY,YAAY,GAAA,GAAM,CAAA,CAAA,EAAI,wBAAwB,CAAA,CAAA,GAAK,OAAA,CAAQ,MAAM,CAAC,CAAA;AACxF,QAAA,IAAA,CAAK,mBAAA,CAAoB,KAAK,SAAS,CAAA;AACvC,QAAA,aAAA,GAAgB,KAAA;AAAA,MAClB,CAAA,MAAA,IAAW,IAAA,KAAS,UAAA,CAAW,QAAA,EAAU;AACvC,QAAA,IAAA,CAAK,iBAAA,GAAoB,SAAA;AACzB,QAAA,SAAA,CAAU,YAAY,OAAA,CAAQ,KAAA;AAAA,UAC5B;AAAA;AAAA,SAEF,IAAK,GAAA;AACL,QAAA,aAAA,GAAgB,KAAA;AAAA,MAClB;AACA,MAAA,YAAA,CAAa,KAAK,SAAS,CAAA;AAC3B,MAAA,IAAA,GAAO,SAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,KAAK,CAAA,IAAK,YAAA,CAAa,SAAQ,EAAG;AACnD,IAAA,KAAA,CAAM,QAAA,GAAW,KAAK,GAAA,CAAI,YAAA,CAAa,SAAS,KAAA,EAAO,KAAA,CAAM,YAAY,CAAC,CAAA;AAAA,EAC5E;AACA,EAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,EAAA,IAAI,kBAAkB,IAAA,EAAM;AAC1B,IAAA,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAA,GAAI,IAAA;AAAA,EAC9B;AACA,EAAA,OAAO,IAAA;AACT;AACA,SAAS,MAAA,CAAO,KAAK,IAAA,EAAM;AACzB,EAAA,IAAI,OAAA,GAAU,KAAA;AACd,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC/B,EAAA,IAAI,OAAO,GAAA,CAAI,QAAA;AACf,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AAChC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAO,OAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,IAAI,KAAK,IAAA,EAAM;AACb,IAAA,MAAM,WAAA,GAAc,QAAA,CAAS,EAAA,CAAG,EAAE,CAAA,IAAK,EAAA;AACvC,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAI,MAAA,CAAO,KAAK,IAAA,CAAK,QAAQ,EAAE,MAAA,KAAW,CAAA,IAAK,KAAK,MAAA,EAAQ;AAC1D,MAAA,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,WAAW,CAAA;AACvC,MAAA,IAAA,CAAK,OAAO,iBAAA,GAAoB,IAAA;AAChC,MAAA,IAAA,CAAK,MAAA,CAAO,sBAAsB,EAAC;AAAA,IACrC;AACA,IAAA,OAAA,GAAU,IAAA;AAAA,EACZ;AACA,EAAA,OAAO,OAAA;AACT;AACA,SAAS,eAAA,CAAgB,OAAA,GAAU,EAAC,EAAG;AACrC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA,CAAQ,IAAA,IAAQ,UAAA,CAAW,MAAA;AAAA,IACjC,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ,QAAQ,MAAA,IAAU,IAAA;AAAA,IAC1B,QAAA,sBAA8B,GAAA,EAAI;AAAA,IAClC,IAAA,EAAM,QAAQ,IAAA,IAAQ,IAAA;AAAA,IACtB,SAAA,EAAW,QAAQ,SAAA,IAAa,IAAA;AAAA,IAChC,iBAAA,EAAmB,IAAA;AAAA,IACnB,qBAAqB;AAAC,GACxB;AACF;AACA,SAAS,YAAY,GAAA,EAAK;AACxB,EAAA,IAAI,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA,EAAG;AACxB,IAAA,OAAO,UAAA,CAAW,QAAA;AAAA,EACpB;AACA,EAAA,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,IAAO,QAAQ,GAAA,EAAK;AACjC,IAAA,OAAO,UAAA,CAAW,WAAA;AAAA,EACpB;AACA,EAAA,OAAO,UAAA,CAAW,MAAA;AACpB;;;ACtGA,SAAS,eAAe,OAAA,EAAyB;AAC7C,EAAA,OAAO,QAEF,OAAA,CAAQ,kBAAA,EAAoB,OAAO,CAAA,CAEnC,OAAA,CAAQ,cAAc,KAAK,CAAA;AACpC;AAKO,SAASA,aAAAA,GAAuC;AACnD,EAAA,MAAM,QAA+B,YAAA,EAAkB;AACvD,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAsB;AAE3C,EAAA,OAAO;AAAA,IACH,IAAI,KAAA,EAAuB;AACvB,MAAA,MAAM,SAAA,GAAY,cAAA,CAAe,KAAA,CAAM,IAAI,CAAA;AAC3C,MAAA,KAAA,CAAM,MAAA,CAAO,WAAW,KAAK,CAAA;AAC7B,MAAA,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,IAAA,EAAM,KAAK,CAAA;AAAA,IAClC,CAAA;AAAA,IAEA,OAAO,MAAA,EAA0B;AAC7B,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AACxB,QAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,MAClB;AAAA,IACJ,CAAA;AAAA,IAEA,MAAM,IAAA,EAAoC;AACtC,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAEhC,MAAA,IAAI,CAAC,MAAA,EAAQ;AACT,QAAA,OAAO,IAAA;AAAA,MACX;AAGA,MAAA,MAAM,SAAsB,EAAC;AAC7B,MAAA,IAAI,OAAO,MAAA,EAAQ;AACf,QAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,EAAG;AACtD,UAAA,IAAI,UAAU,MAAA,EAAW;AACrB,YAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,UAClB;AAAA,QACJ;AAAA,MACJ;AAEA,MAAA,OAAO;AAAA,QACH,KAAA,EAAO,MAAA;AAAA,QACP,MAAA;AAAA,QACA;AAAA,OACJ;AAAA,IACJ,CAAA;AAAA,IAEA,MAAA,GAAqB;AACjB,MAAA,OAAO,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,MAAA,EAAQ,CAAA;AAAA,IACvC,CAAA;AAAA,IAEA,OAAO,IAAA,EAAuB;AAC1B,MAAA,IAAI,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA,EAAG;AACpB,QAAA,MAAM,SAAA,GAAY,eAAe,IAAI,CAAA;AACrC,QAAA,KAAA,CAAM,OAAO,SAAS,CAAA;AACtB,QAAA,QAAA,CAAS,OAAO,IAAI,CAAA;AACpB,QAAA,OAAO,IAAA;AAAA,MACX;AACA,MAAA,OAAO,KAAA;AAAA,IACX;AAAA,GACJ;AACJ;AAwBO,SAAS,oBAAoB,QAAA,EAA0B;AAC1D,EAAA,IAAI,SAAA,GAAY,SAEX,OAAA,CAAQ,iCAAA,EAAmC,EAAE,CAAA,CAE7C,OAAA,CAAQ,YAAY,EAAE,CAAA,CACtB,QAAQ,SAAA,EAAW,EAAE,EAErB,OAAA,CAAQ,cAAA,EAAgB,EAAE,CAAA,CAC1B,OAAA,CAAQ,gBAAgB,EAAE,CAAA;AAG/B,EAAA,IAAI,CAAC,SAAA,CAAU,UAAA,CAAW,GAAG,CAAA,EAAG;AAC5B,IAAA,SAAA,GAAY,GAAA,GAAM,SAAA;AAAA,EACtB;AAGA,EAAA,IAAI,cAAc,GAAA,EAAK;AACnB,IAAA,OAAO,GAAA;AAAA,EACX;AAGA,EAAA,OAAO,SAAA,CAAU,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACtC;AAMO,SAAS,WAAc,MAAA,EAAgC;AAC1D,EAAA,OAAO,CAAC,GAAG,MAAM,EAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AAC9B,IAAA,MAAM,SAAA,GAAY,CAAA,CAAE,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAClC,IAAA,MAAM,SAAA,GAAY,CAAA,CAAE,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAGlC,IAAA,MAAM,QAAA,GAAW,SAAA,CAAU,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,UAAA,CAAW,GAAG,CAAA,IAAK,CAAA,CAAE,UAAA,CAAW,GAAG,CAAC,CAAA,CAAE,MAAA;AAC/E,IAAA,MAAM,QAAA,GAAW,SAAA,CAAU,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,UAAA,CAAW,GAAG,CAAA,IAAK,CAAA,CAAE,UAAA,CAAW,GAAG,CAAC,CAAA,CAAE,MAAA;AAG/E,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,SAAA,CAAU,MAAA,EAAQ;AACvC,MAAA,OAAO,SAAA,CAAU,SAAS,SAAA,CAAU,MAAA;AAAA,IACxC;AAGA,IAAA,IAAI,aAAa,QAAA,EAAU;AACvB,MAAA,OAAO,QAAA,GAAW,QAAA;AAAA,IACtB;AAGA,IAAA,MAAM,SAAA,GAAY,CAAA,CAAE,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA;AACxC,IAAA,MAAM,SAAA,GAAY,CAAA,CAAE,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA;AACxC,IAAA,IAAI,cAAc,SAAA,EAAW;AACzB,MAAA,OAAO,YAAY,CAAA,GAAI,EAAA;AAAA,IAC3B;AAGA,IAAA,OAAO,CAAA,CAAE,IAAA,CAAK,aAAA,CAAc,CAAA,CAAE,IAAI,CAAA;AAAA,EACtC,CAAC,CAAA;AACL","file":"chunk-ARBKF6VI.js","sourcesContent":["const NODE_TYPES = {\n NORMAL: 0,\n WILDCARD: 1,\n PLACEHOLDER: 2\n};\n\nfunction createRouter(options = {}) {\n const ctx = {\n options,\n rootNode: createRadixNode(),\n staticRoutesMap: {}\n };\n const normalizeTrailingSlash = (p) => options.strictTrailingSlash ? p : p.replace(/\\/$/, \"\") || \"/\";\n if (options.routes) {\n for (const path in options.routes) {\n insert(ctx, normalizeTrailingSlash(path), options.routes[path]);\n }\n }\n return {\n ctx,\n lookup: (path) => lookup(ctx, normalizeTrailingSlash(path)),\n insert: (path, data) => insert(ctx, normalizeTrailingSlash(path), data),\n remove: (path) => remove(ctx, normalizeTrailingSlash(path))\n };\n}\nfunction lookup(ctx, path) {\n const staticPathNode = ctx.staticRoutesMap[path];\n if (staticPathNode) {\n return staticPathNode.data;\n }\n const sections = path.split(\"/\");\n const params = {};\n let paramsFound = false;\n let wildcardNode = null;\n let node = ctx.rootNode;\n let wildCardParam = null;\n for (let i = 0; i < sections.length; i++) {\n const section = sections[i];\n if (node.wildcardChildNode !== null) {\n wildcardNode = node.wildcardChildNode;\n wildCardParam = sections.slice(i).join(\"/\");\n }\n const nextNode = node.children.get(section);\n if (nextNode === void 0) {\n if (node && node.placeholderChildren.length > 1) {\n const remaining = sections.length - i;\n node = node.placeholderChildren.find((c) => c.maxDepth === remaining) || null;\n } else {\n node = node.placeholderChildren[0] || null;\n }\n if (!node) {\n break;\n }\n if (node.paramName) {\n params[node.paramName] = section;\n }\n paramsFound = true;\n } else {\n node = nextNode;\n }\n }\n if ((node === null || node.data === null) && wildcardNode !== null) {\n node = wildcardNode;\n params[node.paramName || \"_\"] = wildCardParam;\n paramsFound = true;\n }\n if (!node) {\n return null;\n }\n if (paramsFound) {\n return {\n ...node.data,\n params: paramsFound ? params : void 0\n };\n }\n return node.data;\n}\nfunction insert(ctx, path, data) {\n let isStaticRoute = true;\n const sections = path.split(\"/\");\n let node = ctx.rootNode;\n let _unnamedPlaceholderCtr = 0;\n const matchedNodes = [node];\n for (const section of sections) {\n let childNode;\n if (childNode = node.children.get(section)) {\n node = childNode;\n } else {\n const type = getNodeType(section);\n childNode = createRadixNode({ type, parent: node });\n node.children.set(section, childNode);\n if (type === NODE_TYPES.PLACEHOLDER) {\n childNode.paramName = section === \"*\" ? `_${_unnamedPlaceholderCtr++}` : section.slice(1);\n node.placeholderChildren.push(childNode);\n isStaticRoute = false;\n } else if (type === NODE_TYPES.WILDCARD) {\n node.wildcardChildNode = childNode;\n childNode.paramName = section.slice(\n 3\n /* \"**:\" */\n ) || \"_\";\n isStaticRoute = false;\n }\n matchedNodes.push(childNode);\n node = childNode;\n }\n }\n for (const [depth, node2] of matchedNodes.entries()) {\n node2.maxDepth = Math.max(matchedNodes.length - depth, node2.maxDepth || 0);\n }\n node.data = data;\n if (isStaticRoute === true) {\n ctx.staticRoutesMap[path] = node;\n }\n return node;\n}\nfunction remove(ctx, path) {\n let success = false;\n const sections = path.split(\"/\");\n let node = ctx.rootNode;\n for (const section of sections) {\n node = node.children.get(section);\n if (!node) {\n return success;\n }\n }\n if (node.data) {\n const lastSection = sections.at(-1) || \"\";\n node.data = null;\n if (Object.keys(node.children).length === 0 && node.parent) {\n node.parent.children.delete(lastSection);\n node.parent.wildcardChildNode = null;\n node.parent.placeholderChildren = [];\n }\n success = true;\n }\n return success;\n}\nfunction createRadixNode(options = {}) {\n return {\n type: options.type || NODE_TYPES.NORMAL,\n maxDepth: 0,\n parent: options.parent || null,\n children: /* @__PURE__ */ new Map(),\n data: options.data || null,\n paramName: options.paramName || null,\n wildcardChildNode: null,\n placeholderChildren: []\n };\n}\nfunction getNodeType(str) {\n if (str.startsWith(\"**\")) {\n return NODE_TYPES.WILDCARD;\n }\n if (str[0] === \":\" || str === \"*\") {\n return NODE_TYPES.PLACEHOLDER;\n }\n return NODE_TYPES.NORMAL;\n}\n\nfunction toRouteMatcher(router) {\n const table = _routerNodeToTable(\"\", router.ctx.rootNode);\n return _createMatcher(table, router.ctx.options.strictTrailingSlash);\n}\nfunction _createMatcher(table, strictTrailingSlash) {\n return {\n ctx: { table },\n matchAll: (path) => _matchRoutes(path, table, strictTrailingSlash)\n };\n}\nfunction _createRouteTable() {\n return {\n static: /* @__PURE__ */ new Map(),\n wildcard: /* @__PURE__ */ new Map(),\n dynamic: /* @__PURE__ */ new Map()\n };\n}\nfunction _exportMatcherFromTable(table) {\n const obj = /* @__PURE__ */ Object.create(null);\n for (const property in table) {\n obj[property] = property === \"dynamic\" ? Object.fromEntries(\n [...table[property].entries()].map(([key, value]) => [\n key,\n _exportMatcherFromTable(value)\n ])\n ) : Object.fromEntries(table[property].entries());\n }\n return obj;\n}\nfunction exportMatcher(matcher) {\n return _exportMatcherFromTable(matcher.ctx.table);\n}\nfunction _createTableFromExport(matcherExport) {\n const table = {};\n for (const property in matcherExport) {\n table[property] = property === \"dynamic\" ? new Map(\n Object.entries(matcherExport[property]).map(([key, value]) => [\n key,\n _createTableFromExport(value)\n ])\n ) : new Map(\n Object.entries(matcherExport[property])\n );\n }\n return table;\n}\nfunction createMatcherFromExport(matcherExport) {\n return _createMatcher(_createTableFromExport(matcherExport));\n}\nfunction _matchRoutes(path, table, strictTrailingSlash) {\n if (strictTrailingSlash !== true && path.endsWith(\"/\")) {\n path = path.slice(0, -1) || \"/\";\n }\n const matches = [];\n for (const [key, value] of _sortRoutesMap(table.wildcard)) {\n if (path === key || path.startsWith(key + \"/\")) {\n matches.push(value);\n }\n }\n for (const [key, value] of _sortRoutesMap(table.dynamic)) {\n if (path.startsWith(key + \"/\")) {\n const subPath = \"/\" + path.slice(key.length).split(\"/\").splice(2).join(\"/\");\n matches.push(..._matchRoutes(subPath, value));\n }\n }\n const staticMatch = table.static.get(path);\n if (staticMatch) {\n matches.push(staticMatch);\n }\n return matches.filter(Boolean);\n}\nfunction _sortRoutesMap(m) {\n return [...m.entries()].sort((a, b) => a[0].length - b[0].length);\n}\nfunction _routerNodeToTable(initialPath, initialNode) {\n const table = _createRouteTable();\n function _addNode(path, node) {\n if (path) {\n if (node.type === NODE_TYPES.NORMAL && !(path.includes(\"*\") || path.includes(\":\"))) {\n if (node.data) {\n table.static.set(path, node.data);\n }\n } else if (node.type === NODE_TYPES.WILDCARD) {\n table.wildcard.set(path.replace(\"/**\", \"\"), node.data);\n } else if (node.type === NODE_TYPES.PLACEHOLDER) {\n const subTable = _routerNodeToTable(\"\", node);\n if (node.data) {\n subTable.static.set(\"/\", node.data);\n }\n table.dynamic.set(path.replace(/\\/\\*|\\/:\\w+/, \"\"), subTable);\n return;\n }\n }\n for (const [childPath, child] of node.children.entries()) {\n _addNode(`${path}/${childPath}`.replace(\"//\", \"/\"), child);\n }\n }\n _addNode(initialPath, initialNode);\n return table;\n}\n\nexport { NODE_TYPES, createMatcherFromExport, createRouter, exportMatcher, toRouteMatcher };\n","/**\n * Flight Router - File-based routing with dynamic patterns\n */\n\nimport { createRouter as createRadixRouter, type RadixRouter } from 'radix3';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface RouteParams {\n [key: string]: string | string[];\n}\n\nexport interface Route<T = unknown> {\n /** Route path pattern (e.g., '/blog/[slug]', '/api/[...path]') */\n path: string;\n /** Handler or component for this route */\n handler: T;\n /** Rendering mode for this route */\n mode?: 'ssr' | 'ssg' | 'csr' | 'isr';\n /** Metadata for the route */\n meta?: Record<string, unknown>;\n}\n\nexport interface RouteMatch<T = unknown> {\n /** The matched route */\n route: Route<T>;\n /** Extracted parameters from the URL */\n params: RouteParams;\n /** The original path that was matched */\n path: string;\n}\n\nexport interface Router<T = unknown> {\n /** Add a route to the router */\n add(route: Route<T>): void;\n /** Add multiple routes */\n addAll(routes: Route<T>[]): void;\n /** Match a path against registered routes */\n match(path: string): RouteMatch<T> | null;\n /** Get all registered routes */\n routes(): Route<T>[];\n /** Remove a route by path */\n remove(path: string): boolean;\n}\n\n// ============================================================================\n// Implementation\n// ============================================================================\n\n/**\n * Convert Flight route pattern to radix3 pattern\n * Flight: /blog/[slug] -> radix3: /blog/:slug\n * Flight: /api/[...path] -> radix3: /api/**:path\n */\nfunction convertPattern(pattern: string): string {\n return pattern\n // Convert catch-all [...param] to **:param\n .replace(/\\[\\.\\.\\.(\\w+)\\]/g, '**:$1')\n // Convert dynamic [param] to :param\n .replace(/\\[(\\w+)\\]/g, ':$1');\n}\n\n/**\n * Create a new Flight router instance\n */\nexport function createRouter<T = unknown>(): Router<T> {\n const radix: RadixRouter<Route<T>> = createRadixRouter();\n const routeMap = new Map<string, Route<T>>();\n\n return {\n add(route: Route<T>): void {\n const radixPath = convertPattern(route.path);\n radix.insert(radixPath, route);\n routeMap.set(route.path, route);\n },\n\n addAll(routes: Route<T>[]): void {\n for (const route of routes) {\n this.add(route);\n }\n },\n\n match(path: string): RouteMatch<T> | null {\n const result = radix.lookup(path);\n\n if (!result) {\n return null;\n }\n\n // Extract params from radix3 result\n const params: RouteParams = {};\n if (result.params) {\n for (const [key, value] of Object.entries(result.params)) {\n if (value !== undefined) {\n params[key] = value as string | string[];\n }\n }\n }\n\n return {\n route: result,\n params,\n path,\n };\n },\n\n routes(): Route<T>[] {\n return Array.from(routeMap.values());\n },\n\n remove(path: string): boolean {\n if (routeMap.has(path)) {\n const radixPath = convertPattern(path);\n radix.remove(radixPath);\n routeMap.delete(path);\n return true;\n }\n return false;\n },\n };\n}\n\n// ============================================================================\n// File System Router Utilities\n// ============================================================================\n\nexport interface FileRoute {\n /** File path relative to routes directory */\n filePath: string;\n /** Generated route path */\n routePath: string;\n}\n\n/**\n * Convert a file path to a route path\n * \n * Examples:\n * - index.tsx -> /\n * - about.tsx -> /about\n * - blog/index.tsx -> /blog\n * - blog/[slug].tsx -> /blog/[slug]\n * - api/[...path].ts -> /api/[...path]\n * - (group)/settings.tsx -> /settings (groups are ignored)\n */\nexport function filePathToRoutePath(filePath: string): string {\n let routePath = filePath\n // Remove file extension\n .replace(/\\.(tsx?|jsx?|vue|svelte|astro)$/, '')\n // Remove index files\n .replace(/\\/index$/, '')\n .replace(/^index$/, '')\n // Remove route groups (parentheses)\n .replace(/\\([^)]+\\)\\//g, '')\n .replace(/\\/\\([^)]+\\)/g, '');\n\n // Ensure path starts with /\n if (!routePath.startsWith('/')) {\n routePath = '/' + routePath;\n }\n\n // Handle root\n if (routePath === '/') {\n return '/';\n }\n\n // Remove trailing slash\n return routePath.replace(/\\/$/, '');\n}\n\n/**\n * Sort routes by specificity (most specific first)\n * Static routes come before dynamic routes\n */\nexport function sortRoutes<T>(routes: Route<T>[]): Route<T>[] {\n return [...routes].sort((a, b) => {\n const aSegments = a.path.split('/');\n const bSegments = b.path.split('/');\n\n // Count dynamic segments\n const aDynamic = aSegments.filter(s => s.startsWith('[') || s.startsWith(':')).length;\n const bDynamic = bSegments.filter(s => s.startsWith('[') || s.startsWith(':')).length;\n\n // More segments = more specific\n if (aSegments.length !== bSegments.length) {\n return bSegments.length - aSegments.length;\n }\n\n // Fewer dynamic segments = more specific\n if (aDynamic !== bDynamic) {\n return aDynamic - bDynamic;\n }\n\n // Catch-all routes are less specific\n const aCatchAll = a.path.includes('[...');\n const bCatchAll = b.path.includes('[...');\n if (aCatchAll !== bCatchAll) {\n return aCatchAll ? 1 : -1;\n }\n\n // Alphabetical for consistency\n return a.path.localeCompare(b.path);\n });\n}\n"]}
1
+ {"version":3,"sources":["../../../node_modules/.pnpm/radix3@1.1.2/node_modules/radix3/dist/index.mjs","../src/router/index.ts"],"names":["createRouter"],"mappings":"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","file":"chunk-GCQZ4FHI.js","sourcesContent":["const NODE_TYPES = {\n NORMAL: 0,\n WILDCARD: 1,\n PLACEHOLDER: 2\n};\n\nfunction createRouter(options = {}) {\n const ctx = {\n options,\n rootNode: createRadixNode(),\n staticRoutesMap: {}\n };\n const normalizeTrailingSlash = (p) => options.strictTrailingSlash ? p : p.replace(/\\/$/, \"\") || \"/\";\n if (options.routes) {\n for (const path in options.routes) {\n insert(ctx, normalizeTrailingSlash(path), options.routes[path]);\n }\n }\n return {\n ctx,\n lookup: (path) => lookup(ctx, normalizeTrailingSlash(path)),\n insert: (path, data) => insert(ctx, normalizeTrailingSlash(path), data),\n remove: (path) => remove(ctx, normalizeTrailingSlash(path))\n };\n}\nfunction lookup(ctx, path) {\n const staticPathNode = ctx.staticRoutesMap[path];\n if (staticPathNode) {\n return staticPathNode.data;\n }\n const sections = path.split(\"/\");\n const params = {};\n let paramsFound = false;\n let wildcardNode = null;\n let node = ctx.rootNode;\n let wildCardParam = null;\n for (let i = 0; i < sections.length; i++) {\n const section = sections[i];\n if (node.wildcardChildNode !== null) {\n wildcardNode = node.wildcardChildNode;\n wildCardParam = sections.slice(i).join(\"/\");\n }\n const nextNode = node.children.get(section);\n if (nextNode === void 0) {\n if (node && node.placeholderChildren.length > 1) {\n const remaining = sections.length - i;\n node = node.placeholderChildren.find((c) => c.maxDepth === remaining) || null;\n } else {\n node = node.placeholderChildren[0] || null;\n }\n if (!node) {\n break;\n }\n if (node.paramName) {\n params[node.paramName] = section;\n }\n paramsFound = true;\n } else {\n node = nextNode;\n }\n }\n if ((node === null || node.data === null) && wildcardNode !== null) {\n node = wildcardNode;\n params[node.paramName || \"_\"] = wildCardParam;\n paramsFound = true;\n }\n if (!node) {\n return null;\n }\n if (paramsFound) {\n return {\n ...node.data,\n params: paramsFound ? params : void 0\n };\n }\n return node.data;\n}\nfunction insert(ctx, path, data) {\n let isStaticRoute = true;\n const sections = path.split(\"/\");\n let node = ctx.rootNode;\n let _unnamedPlaceholderCtr = 0;\n const matchedNodes = [node];\n for (const section of sections) {\n let childNode;\n if (childNode = node.children.get(section)) {\n node = childNode;\n } else {\n const type = getNodeType(section);\n childNode = createRadixNode({ type, parent: node });\n node.children.set(section, childNode);\n if (type === NODE_TYPES.PLACEHOLDER) {\n childNode.paramName = section === \"*\" ? `_${_unnamedPlaceholderCtr++}` : section.slice(1);\n node.placeholderChildren.push(childNode);\n isStaticRoute = false;\n } else if (type === NODE_TYPES.WILDCARD) {\n node.wildcardChildNode = childNode;\n childNode.paramName = section.slice(\n 3\n /* \"**:\" */\n ) || \"_\";\n isStaticRoute = false;\n }\n matchedNodes.push(childNode);\n node = childNode;\n }\n }\n for (const [depth, node2] of matchedNodes.entries()) {\n node2.maxDepth = Math.max(matchedNodes.length - depth, node2.maxDepth || 0);\n }\n node.data = data;\n if (isStaticRoute === true) {\n ctx.staticRoutesMap[path] = node;\n }\n return node;\n}\nfunction remove(ctx, path) {\n let success = false;\n const sections = path.split(\"/\");\n let node = ctx.rootNode;\n for (const section of sections) {\n node = node.children.get(section);\n if (!node) {\n return success;\n }\n }\n if (node.data) {\n const lastSection = sections.at(-1) || \"\";\n node.data = null;\n if (Object.keys(node.children).length === 0 && node.parent) {\n node.parent.children.delete(lastSection);\n node.parent.wildcardChildNode = null;\n node.parent.placeholderChildren = [];\n }\n success = true;\n }\n return success;\n}\nfunction createRadixNode(options = {}) {\n return {\n type: options.type || NODE_TYPES.NORMAL,\n maxDepth: 0,\n parent: options.parent || null,\n children: /* @__PURE__ */ new Map(),\n data: options.data || null,\n paramName: options.paramName || null,\n wildcardChildNode: null,\n placeholderChildren: []\n };\n}\nfunction getNodeType(str) {\n if (str.startsWith(\"**\")) {\n return NODE_TYPES.WILDCARD;\n }\n if (str[0] === \":\" || str === \"*\") {\n return NODE_TYPES.PLACEHOLDER;\n }\n return NODE_TYPES.NORMAL;\n}\n\nfunction toRouteMatcher(router) {\n const table = _routerNodeToTable(\"\", router.ctx.rootNode);\n return _createMatcher(table, router.ctx.options.strictTrailingSlash);\n}\nfunction _createMatcher(table, strictTrailingSlash) {\n return {\n ctx: { table },\n matchAll: (path) => _matchRoutes(path, table, strictTrailingSlash)\n };\n}\nfunction _createRouteTable() {\n return {\n static: /* @__PURE__ */ new Map(),\n wildcard: /* @__PURE__ */ new Map(),\n dynamic: /* @__PURE__ */ new Map()\n };\n}\nfunction _exportMatcherFromTable(table) {\n const obj = /* @__PURE__ */ Object.create(null);\n for (const property in table) {\n obj[property] = property === \"dynamic\" ? Object.fromEntries(\n [...table[property].entries()].map(([key, value]) => [\n key,\n _exportMatcherFromTable(value)\n ])\n ) : Object.fromEntries(table[property].entries());\n }\n return obj;\n}\nfunction exportMatcher(matcher) {\n return _exportMatcherFromTable(matcher.ctx.table);\n}\nfunction _createTableFromExport(matcherExport) {\n const table = {};\n for (const property in matcherExport) {\n table[property] = property === \"dynamic\" ? new Map(\n Object.entries(matcherExport[property]).map(([key, value]) => [\n key,\n _createTableFromExport(value)\n ])\n ) : new Map(\n Object.entries(matcherExport[property])\n );\n }\n return table;\n}\nfunction createMatcherFromExport(matcherExport) {\n return _createMatcher(_createTableFromExport(matcherExport));\n}\nfunction _matchRoutes(path, table, strictTrailingSlash) {\n if (strictTrailingSlash !== true && path.endsWith(\"/\")) {\n path = path.slice(0, -1) || \"/\";\n }\n const matches = [];\n for (const [key, value] of _sortRoutesMap(table.wildcard)) {\n if (path === key || path.startsWith(key + \"/\")) {\n matches.push(value);\n }\n }\n for (const [key, value] of _sortRoutesMap(table.dynamic)) {\n if (path.startsWith(key + \"/\")) {\n const subPath = \"/\" + path.slice(key.length).split(\"/\").splice(2).join(\"/\");\n matches.push(..._matchRoutes(subPath, value));\n }\n }\n const staticMatch = table.static.get(path);\n if (staticMatch) {\n matches.push(staticMatch);\n }\n return matches.filter(Boolean);\n}\nfunction _sortRoutesMap(m) {\n return [...m.entries()].sort((a, b) => a[0].length - b[0].length);\n}\nfunction _routerNodeToTable(initialPath, initialNode) {\n const table = _createRouteTable();\n function _addNode(path, node) {\n if (path) {\n if (node.type === NODE_TYPES.NORMAL && !(path.includes(\"*\") || path.includes(\":\"))) {\n if (node.data) {\n table.static.set(path, node.data);\n }\n } else if (node.type === NODE_TYPES.WILDCARD) {\n table.wildcard.set(path.replace(\"/**\", \"\"), node.data);\n } else if (node.type === NODE_TYPES.PLACEHOLDER) {\n const subTable = _routerNodeToTable(\"\", node);\n if (node.data) {\n subTable.static.set(\"/\", node.data);\n }\n table.dynamic.set(path.replace(/\\/\\*|\\/:\\w+/, \"\"), subTable);\n return;\n }\n }\n for (const [childPath, child] of node.children.entries()) {\n _addNode(`${path}/${childPath}`.replace(\"//\", \"/\"), child);\n }\n }\n _addNode(initialPath, initialNode);\n return table;\n}\n\nexport { NODE_TYPES, createMatcherFromExport, createRouter, exportMatcher, toRouteMatcher };\n","/**\r\n * Flight Router - File-based routing with dynamic patterns\r\n */\r\n\r\nimport { createRouter as createRadixRouter, type RadixRouter } from 'radix3';\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\nexport interface RouteParams {\r\n [key: string]: string | string[];\r\n}\r\n\r\nexport interface Route<T = unknown> {\r\n /** Route path pattern (e.g., '/blog/[slug]', '/api/[...path]') */\r\n path: string;\r\n /** Handler or component for this route */\r\n handler: T;\r\n /** Rendering mode for this route */\r\n mode?: 'ssr' | 'ssg' | 'csr' | 'isr';\r\n /** Metadata for the route */\r\n meta?: Record<string, unknown>;\r\n}\r\n\r\nexport interface RouteMatch<T = unknown> {\r\n /** The matched route */\r\n route: Route<T>;\r\n /** Extracted parameters from the URL */\r\n params: RouteParams;\r\n /** The original path that was matched */\r\n path: string;\r\n}\r\n\r\nexport interface Router<T = unknown> {\r\n /** Add a route to the router */\r\n add(route: Route<T>): void;\r\n /** Add multiple routes */\r\n addAll(routes: Route<T>[]): void;\r\n /** Match a path against registered routes */\r\n match(path: string): RouteMatch<T> | null;\r\n /** Get all registered routes */\r\n routes(): Route<T>[];\r\n /** Remove a route by path */\r\n remove(path: string): boolean;\r\n}\r\n\r\n// ============================================================================\r\n// Implementation\r\n// ============================================================================\r\n\r\n/**\r\n * Convert Flight route pattern to radix3 pattern\r\n * Flight: /blog/[slug] -> radix3: /blog/:slug\r\n * Flight: /api/[...path] -> radix3: /api/**:path\r\n */\r\nfunction convertPattern(pattern: string): string {\r\n return pattern\r\n // Convert catch-all [...param] to **:param\r\n .replace(/\\[\\.\\.\\.(\\w+)\\]/g, '**:$1')\r\n // Convert dynamic [param] to :param\r\n .replace(/\\[(\\w+)\\]/g, ':$1');\r\n}\r\n\r\n/**\r\n * Create a new Flight router instance\r\n */\r\nexport function createRouter<T = unknown>(): Router<T> {\r\n const radix: RadixRouter<Route<T>> = createRadixRouter();\r\n const routeMap = new Map<string, Route<T>>();\r\n\r\n return {\r\n add(route: Route<T>): void {\r\n const radixPath = convertPattern(route.path);\r\n radix.insert(radixPath, route);\r\n routeMap.set(route.path, route);\r\n },\r\n\r\n addAll(routes: Route<T>[]): void {\r\n for (const route of routes) {\r\n this.add(route);\r\n }\r\n },\r\n\r\n match(path: string): RouteMatch<T> | null {\r\n const result = radix.lookup(path);\r\n\r\n if (!result) {\r\n return null;\r\n }\r\n\r\n // Extract params from radix3 result\r\n const params: RouteParams = {};\r\n if (result.params) {\r\n for (const [key, value] of Object.entries(result.params)) {\r\n if (value !== undefined) {\r\n params[key] = value as string | string[];\r\n }\r\n }\r\n }\r\n\r\n return {\r\n route: result,\r\n params,\r\n path,\r\n };\r\n },\r\n\r\n routes(): Route<T>[] {\r\n return Array.from(routeMap.values());\r\n },\r\n\r\n remove(path: string): boolean {\r\n if (routeMap.has(path)) {\r\n const radixPath = convertPattern(path);\r\n radix.remove(radixPath);\r\n routeMap.delete(path);\r\n return true;\r\n }\r\n return false;\r\n },\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// File System Router Utilities\r\n// ============================================================================\r\n\r\nexport interface FileRoute {\r\n /** File path relative to routes directory */\r\n filePath: string;\r\n /** Generated route path */\r\n routePath: string;\r\n}\r\n\r\n/**\r\n * Convert a file path to a route path\r\n * \r\n * Examples:\r\n * - index.tsx -> /\r\n * - about.tsx -> /about\r\n * - blog/index.tsx -> /blog\r\n * - blog/[slug].tsx -> /blog/[slug]\r\n * - api/[...path].ts -> /api/[...path]\r\n * - (group)/settings.tsx -> /settings (groups are ignored)\r\n */\r\nexport function filePathToRoutePath(filePath: string): string {\r\n let routePath = filePath\r\n // Remove file extension\r\n .replace(/\\.(tsx?|jsx?|vue|svelte|astro)$/, '')\r\n // Remove index files\r\n .replace(/\\/index$/, '')\r\n .replace(/^index$/, '')\r\n // Remove route groups (parentheses)\r\n .replace(/\\([^)]+\\)\\//g, '')\r\n .replace(/\\/\\([^)]+\\)/g, '');\r\n\r\n // Ensure path starts with /\r\n if (!routePath.startsWith('/')) {\r\n routePath = '/' + routePath;\r\n }\r\n\r\n // Handle root\r\n if (routePath === '/') {\r\n return '/';\r\n }\r\n\r\n // Remove trailing slash\r\n return routePath.replace(/\\/$/, '');\r\n}\r\n\r\n/**\r\n * Sort routes by specificity (most specific first)\r\n * Static routes come before dynamic routes\r\n */\r\nexport function sortRoutes<T>(routes: Route<T>[]): Route<T>[] {\r\n return [...routes].sort((a, b) => {\r\n const aSegments = a.path.split('/');\r\n const bSegments = b.path.split('/');\r\n\r\n // Count dynamic segments\r\n const aDynamic = aSegments.filter(s => s.startsWith('[') || s.startsWith(':')).length;\r\n const bDynamic = bSegments.filter(s => s.startsWith('[') || s.startsWith(':')).length;\r\n\r\n // More segments = more specific\r\n if (aSegments.length !== bSegments.length) {\r\n return bSegments.length - aSegments.length;\r\n }\r\n\r\n // Fewer dynamic segments = more specific\r\n if (aDynamic !== bDynamic) {\r\n return aDynamic - bDynamic;\r\n }\r\n\r\n // Catch-all routes are less specific\r\n const aCatchAll = a.path.includes('[...');\r\n const bCatchAll = b.path.includes('[...');\r\n if (aCatchAll !== bCatchAll) {\r\n return aCatchAll ? 1 : -1;\r\n }\r\n\r\n // Alphabetical for consistency\r\n return a.path.localeCompare(b.path);\r\n });\r\n}\r\n"]}
@@ -92,5 +92,5 @@ async function loadConfig(root = process.cwd()) {
92
92
  }
93
93
 
94
94
  export { defineConfig, findConfigFile, loadConfig, resolveConfig };
95
- //# sourceMappingURL=chunk-EHVUAFNH.js.map
96
- //# sourceMappingURL=chunk-EHVUAFNH.js.map
95
+ //# sourceMappingURL=chunk-IXMD5QH2.js.map
96
+ //# sourceMappingURL=chunk-IXMD5QH2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/config/index.ts"],"names":[],"mappings":"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","file":"chunk-IXMD5QH2.js","sourcesContent":["/**\r\n * Flight Configuration - User configuration system\r\n */\r\n\r\nimport type { RenderMode } from '../render/index.js';\r\nimport type { FlightAdapter } from '../adapters/index.js';\r\n\r\n// ============================================================================\r\n// Bundler Types (from @flight-framework/bundler)\r\n// ============================================================================\r\n\r\n/**\r\n * Bundler adapter interface.\r\n * Import the full type from @flight-framework/bundler for implementation.\r\n */\r\nexport interface BundlerAdapter {\r\n /** Adapter identifier */\r\n name: string;\r\n /** Bundler name (vite, esbuild, rolldown, etc.) */\r\n bundler: string;\r\n /** Bundler-specific options */\r\n options?: Record<string, unknown>;\r\n /** Create dev server */\r\n createDevServer(config: FlightConfig): Promise<unknown>;\r\n /** Build for production */\r\n build(config: FlightConfig): Promise<unknown>;\r\n}\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\n/** UI Framework configuration */\r\nexport interface UIConfig {\r\n /** The UI framework to use */\r\n framework?: 'react' | 'vue' | 'svelte' | 'solid' | 'preact' | 'vanilla' | string;\r\n /** Framework-specific options */\r\n options?: Record<string, unknown>;\r\n}\r\n\r\n/** Rendering configuration */\r\nexport interface RenderConfig {\r\n /** Default render mode */\r\n default?: RenderMode;\r\n /** Per-route render mode overrides */\r\n routes?: Record<string, RenderMode>;\r\n}\r\n\r\n/** Development server options */\r\nexport interface DevConfig {\r\n /** Port to run dev server on */\r\n port?: number;\r\n /** Host to bind to */\r\n host?: string | boolean;\r\n /** Open browser on start */\r\n open?: boolean;\r\n /** HTTPS configuration */\r\n https?: boolean | {\r\n key?: string;\r\n cert?: string;\r\n };\r\n /** Proxy configuration */\r\n proxy?: Record<string, string | {\r\n target: string;\r\n changeOrigin?: boolean;\r\n rewrite?: (path: string) => string;\r\n }>;\r\n}\r\n\r\n/** Build configuration */\r\nexport interface BuildConfig {\r\n /** Output directory */\r\n outDir?: string;\r\n /** Source directory */\r\n srcDir?: string;\r\n /** Public assets directory */\r\n publicDir?: string;\r\n /** Routes directory */\r\n routesDir?: string;\r\n /** Generate sourcemaps */\r\n sourcemap?: boolean | 'inline' | 'hidden';\r\n /** Minify output */\r\n minify?: boolean | 'terser' | 'esbuild';\r\n /** Target environments */\r\n target?: string | string[];\r\n}\r\n\r\n/** Full Flight configuration (resolved) */\r\nexport interface FlightConfig {\r\n /** Root directory */\r\n root: string;\r\n /** Deployment adapter */\r\n adapter: FlightAdapter | null;\r\n /** Bundler adapter (Vite, esbuild, Rolldown, etc.) */\r\n bundler: BundlerAdapter | null;\r\n /** UI framework configuration */\r\n ui: UIConfig;\r\n /** Rendering configuration */\r\n rendering: RenderConfig;\r\n /** Development server options */\r\n dev: Required<DevConfig>;\r\n /** Build configuration */\r\n build: Required<BuildConfig>;\r\n /** Bundler-specific configuration (passed to adapter) */\r\n bundlerOptions?: Record<string, unknown>;\r\n /** @deprecated Use bundler adapter instead */\r\n vite?: Record<string, unknown>;\r\n /** Plugin configurations */\r\n plugins: FlightPlugin[];\r\n}\r\n\r\n/** Flight plugin interface */\r\nexport interface FlightPlugin {\r\n /** Plugin name */\r\n name: string;\r\n /** Hook into config resolution */\r\n config?: (config: FlightConfig) => FlightConfig | void | Promise<FlightConfig | void>;\r\n /** Hook into build start */\r\n buildStart?: () => void | Promise<void>;\r\n /** Hook into build end */\r\n buildEnd?: () => void | Promise<void>;\r\n /** Hook into dev server start */\r\n devStart?: () => void | Promise<void>;\r\n}\r\n\r\n/** User-provided configuration (partial) */\r\nexport interface FlightUserConfig {\r\n /** Root directory (defaults to process.cwd()) */\r\n root?: string;\r\n /** Deployment adapter */\r\n adapter?: FlightAdapter;\r\n /** Bundler adapter (Vite, esbuild, Rolldown, etc.) */\r\n bundler?: BundlerAdapter;\r\n /** UI framework configuration */\r\n ui?: UIConfig;\r\n /** Rendering configuration */\r\n rendering?: RenderConfig;\r\n /** Development server options */\r\n dev?: DevConfig;\r\n /** Build configuration */\r\n build?: BuildConfig;\r\n /** Bundler-specific configuration */\r\n bundlerOptions?: Record<string, unknown>;\r\n /** @deprecated Use bundler adapter instead */\r\n vite?: Record<string, unknown>;\r\n /** Plugins */\r\n plugins?: FlightPlugin[];\r\n}\r\n\r\n// ============================================================================\r\n// Configuration Factory\r\n// ============================================================================\r\n\r\n/** Default configuration values */\r\nconst DEFAULT_CONFIG: Omit<FlightConfig, 'root'> = {\r\n adapter: null,\r\n bundler: null,\r\n ui: {\r\n framework: 'vanilla',\r\n },\r\n rendering: {\r\n default: 'ssr',\r\n routes: {},\r\n },\r\n dev: {\r\n port: 5173,\r\n host: 'localhost',\r\n open: false,\r\n https: false,\r\n proxy: {},\r\n },\r\n build: {\r\n outDir: 'dist',\r\n srcDir: 'src',\r\n publicDir: 'public',\r\n routesDir: 'src/routes',\r\n sourcemap: false,\r\n minify: true,\r\n target: 'es2022',\r\n },\r\n plugins: [],\r\n};\r\n\r\n/**\r\n * Define Flight configuration\r\n * \r\n * @example\r\n * ```typescript\r\n * // flight.config.ts\r\n * import { defineConfig } from '@flight-framework/core';\r\n * import node from '@flight-framework/adapter-node';\r\n * \r\n * export default defineConfig({\r\n * adapter: node(),\r\n * ui: { framework: 'react' },\r\n * rendering: {\r\n * default: 'ssr',\r\n * routes: {\r\n * '/blog/*': 'ssg',\r\n * '/app/*': 'csr',\r\n * },\r\n * },\r\n * });\r\n * ```\r\n */\r\nexport function defineConfig(config: FlightUserConfig): FlightUserConfig {\r\n return config;\r\n}\r\n\r\n/**\r\n * Resolve user config to full config with defaults\r\n */\r\nexport function resolveConfig(userConfig: FlightUserConfig = {}): FlightConfig {\r\n return {\r\n root: userConfig.root ?? process.cwd(),\r\n adapter: userConfig.adapter ?? DEFAULT_CONFIG.adapter,\r\n bundler: userConfig.bundler ?? DEFAULT_CONFIG.bundler,\r\n ui: {\r\n ...DEFAULT_CONFIG.ui,\r\n ...userConfig.ui,\r\n },\r\n rendering: {\r\n ...DEFAULT_CONFIG.rendering,\r\n ...userConfig.rendering,\r\n },\r\n dev: {\r\n ...DEFAULT_CONFIG.dev,\r\n ...userConfig.dev,\r\n } as Required<DevConfig>,\r\n build: {\r\n ...DEFAULT_CONFIG.build,\r\n ...userConfig.build,\r\n } as Required<BuildConfig>,\r\n bundlerOptions: userConfig.bundlerOptions,\r\n vite: userConfig.vite,\r\n plugins: userConfig.plugins ?? [],\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Config Loading\r\n// ============================================================================\r\n\r\nconst CONFIG_FILES = [\r\n 'flight.config.ts',\r\n 'flight.config.js',\r\n 'flight.config.mjs',\r\n 'flight.config.mts',\r\n];\r\n\r\n/**\r\n * Find the config file in a directory\r\n */\r\nexport async function findConfigFile(root: string): Promise<string | null> {\r\n // Dynamic import for Node.js fs\r\n const { existsSync } = await import('node:fs');\r\n const { join } = await import('node:path');\r\n\r\n for (const file of CONFIG_FILES) {\r\n const path = join(root, file);\r\n if (existsSync(path)) {\r\n return path;\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Load configuration from file\r\n */\r\nexport async function loadConfig(root: string = process.cwd()): Promise<FlightConfig> {\r\n const configFile = await findConfigFile(root);\r\n\r\n if (!configFile) {\r\n return resolveConfig({ root });\r\n }\r\n\r\n try {\r\n // Use dynamic import for the config file\r\n // On Windows, we need to convert the path to a file:// URL\r\n const { pathToFileURL } = await import('node:url');\r\n const configUrl = pathToFileURL(configFile).href;\r\n const module = await import(configUrl);\r\n const userConfig = module.default as FlightUserConfig;\r\n\r\n return resolveConfig({\r\n ...userConfig,\r\n root,\r\n });\r\n } catch (error) {\r\n console.error(`Failed to load config from ${configFile}:`, error);\r\n return resolveConfig({ root });\r\n }\r\n}\r\n"]}
@@ -253,5 +253,5 @@ var FlightPayloadError = class extends Error {
253
253
  };
254
254
 
255
255
  export { FlightPayloadError, FlightSerializationError, clientRef, createActionChunk, createClientChunk, createErrorChunk, createHintChunk, createServerChunk, deserialize, fragment, generateChunkId, h, isFlightElement, resetChunkIdCounter, serialize, suspense, text, toFlightElement };
256
- //# sourceMappingURL=chunk-6GI6HFSQ.js.map
257
- //# sourceMappingURL=chunk-6GI6HFSQ.js.map
256
+ //# sourceMappingURL=chunk-K2CQZPCG.js.map
257
+ //# sourceMappingURL=chunk-K2CQZPCG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/rsc/payload.ts"],"names":[],"mappings":"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","file":"chunk-K2CQZPCG.js","sourcesContent":["/**\r\n * @flight-framework/core - Flight Payload System\r\n * \r\n * Formato de serialización agnóstico para Server Components.\r\n * Diseñado para máxima debuggabilidad y compatibilidad multi-framework.\r\n * \r\n * Filosofía Flight:\r\n * - Formato documentado y abierto (NDJSON)\r\n * - No depende de internals de React\r\n * - Extensible para cualquier UI framework\r\n * - Zero vendor lock-in\r\n * \r\n * @module @flight-framework/core/rsc/payload\r\n */\r\n\r\n// ============================================================================\r\n// Chunk Types - El corazón del streaming protocol\r\n// ============================================================================\r\n\r\n/**\r\n * Union type de todos los chunks que pueden enviarse en un FlightStream\r\n */\r\nexport type FlightChunk =\r\n | ServerComponentChunk\r\n | ClientReferenceChunk\r\n | ServerReferenceChunk\r\n | ErrorBoundaryChunk\r\n | HintChunk\r\n | MetaChunk;\r\n\r\n/**\r\n * Chunk de Server Component renderizado\r\n * Contiene el árbol virtual de elementos\r\n */\r\nexport interface ServerComponentChunk {\r\n /** Discriminator */\r\n readonly type: 'S';\r\n /** Unique chunk ID */\r\n readonly id: string;\r\n /** Virtual element tree */\r\n readonly tree: FlightElement;\r\n /** IDs de chunks que este depende (para streaming ordenado) */\r\n readonly awaiting?: readonly string[];\r\n /** Timestamp para debugging/observability */\r\n readonly ts?: number;\r\n}\r\n\r\n/**\r\n * Referencia a un Client Component\r\n * El cliente cargará el módulo y lo hidratará\r\n */\r\nexport interface ClientReferenceChunk {\r\n /** Discriminator */\r\n readonly type: 'C';\r\n /** Reference ID */\r\n readonly id: string;\r\n /** Module specifier (relativo al manifest) */\r\n readonly module: string;\r\n /** Export name */\r\n readonly export: string;\r\n /** Serialized props */\r\n readonly props: SerializedValue;\r\n /** Fallback HTML para SSR (opcional) */\r\n readonly fallback?: string;\r\n}\r\n\r\n/**\r\n * Referencia a una Server Function (Action)\r\n * El cliente la invocará via RPC\r\n */\r\nexport interface ServerReferenceChunk {\r\n /** Discriminator */\r\n readonly type: 'A';\r\n /** Action ID */\r\n readonly id: string;\r\n /** Bound arguments (pre-bound via .bind()) */\r\n readonly bound?: readonly SerializedValue[];\r\n}\r\n\r\n/**\r\n * Error en un boundary específico\r\n */\r\nexport interface ErrorBoundaryChunk {\r\n /** Discriminator */\r\n readonly type: 'E';\r\n /** Boundary ID where error occurred */\r\n readonly boundary: string;\r\n /** Safe error message for client */\r\n readonly message: string;\r\n /** Error digest for server-side correlation */\r\n readonly digest: string;\r\n /** Component stack for development */\r\n readonly stack?: string;\r\n}\r\n\r\n/**\r\n * Hints para el cliente (preload, prefetch, etc.)\r\n */\r\nexport interface HintChunk {\r\n /** Discriminator */\r\n readonly type: 'H';\r\n /** Hint type */\r\n readonly hint: 'preload' | 'prefetch' | 'dns-prefetch' | 'preconnect' | 'modulepreload';\r\n /** Resource URL */\r\n readonly href: string;\r\n /** Resource type (for preload) */\r\n readonly as?: 'script' | 'style' | 'image' | 'font' | 'fetch';\r\n /** Crossorigin attribute */\r\n readonly crossorigin?: 'anonymous' | 'use-credentials';\r\n}\r\n\r\n/**\r\n * Metadata chunk (para SSR head injection)\r\n */\r\nexport interface MetaChunk {\r\n /** Discriminator */\r\n readonly type: 'M';\r\n /** Meta type */\r\n readonly meta: 'title' | 'description' | 'og' | 'twitter' | 'link' | 'script';\r\n /** Content */\r\n readonly content: string | Record<string, string>;\r\n}\r\n\r\n// ============================================================================\r\n// Flight Element - Virtual DOM agnóstico\r\n// ============================================================================\r\n\r\n/**\r\n * Virtual element que puede representar cualquier UI framework\r\n */\r\nexport type FlightElement =\r\n | FlightHostElement\r\n | FlightTextElement\r\n | FlightFragmentElement\r\n | FlightSuspenseElement\r\n | FlightClientElement\r\n | FlightLazyElement\r\n | FlightNullElement;\r\n\r\n/**\r\n * Host element (div, span, etc.)\r\n */\r\nexport interface FlightHostElement {\r\n readonly $$type: 'host';\r\n readonly tag: string;\r\n readonly key?: string | number;\r\n readonly props: Readonly<Record<string, SerializedValue>>;\r\n readonly children: readonly FlightElement[];\r\n}\r\n\r\n/**\r\n * Text node\r\n */\r\nexport interface FlightTextElement {\r\n readonly $$type: 'text';\r\n readonly value: string;\r\n}\r\n\r\n/**\r\n * Fragment (multiple children, no wrapper)\r\n */\r\nexport interface FlightFragmentElement {\r\n readonly $$type: 'fragment';\r\n readonly children: readonly FlightElement[];\r\n}\r\n\r\n/**\r\n * Suspense boundary\r\n */\r\nexport interface FlightSuspenseElement {\r\n readonly $$type: 'suspense';\r\n readonly id: string;\r\n readonly fallback: FlightElement;\r\n readonly children: readonly FlightElement[];\r\n}\r\n\r\n/**\r\n * Client component reference\r\n */\r\nexport interface FlightClientElement {\r\n readonly $$type: 'client';\r\n /** Reference to ClientReferenceChunk ID */\r\n readonly ref: string;\r\n /** Pre-rendered fallback HTML */\r\n readonly ssr?: string;\r\n}\r\n\r\n/**\r\n * Lazy/async element (pending resolution)\r\n */\r\nexport interface FlightLazyElement {\r\n readonly $$type: 'lazy';\r\n readonly id: string;\r\n readonly fallback?: FlightElement;\r\n}\r\n\r\n/**\r\n * Null/empty element\r\n */\r\nexport interface FlightNullElement {\r\n readonly $$type: 'null';\r\n}\r\n\r\n// ============================================================================\r\n// Serializable Values\r\n// ============================================================================\r\n\r\n/**\r\n * Valores que pueden cruzar el boundary server/client\r\n */\r\nexport type SerializedValue =\r\n | string\r\n | number\r\n | boolean\r\n | null\r\n | undefined\r\n | readonly SerializedValue[]\r\n | { readonly [key: string]: SerializedValue }\r\n | SerializedSpecialValue;\r\n\r\n/**\r\n * Tipos especiales que requieren serialización custom\r\n */\r\nexport interface SerializedSpecialValue {\r\n readonly $$flight: SpecialValueType;\r\n readonly value: string | readonly unknown[];\r\n}\r\n\r\nexport type SpecialValueType =\r\n | 'date'\r\n | 'bigint'\r\n | 'map'\r\n | 'set'\r\n | 'undefined'\r\n | 'symbol'\r\n | 'regexp'\r\n | 'url'\r\n | 'error'\r\n | 'formdata'\r\n | 'blob'\r\n | 'arraybuffer';\r\n\r\n// ============================================================================\r\n// Serialization Functions\r\n// ============================================================================\r\n\r\n/**\r\n * Serializa un valor para transmisión a través de FlightStream\r\n */\r\nexport function serialize(value: unknown): SerializedValue {\r\n return serializeValue(value, new WeakSet());\r\n}\r\n\r\nfunction serializeValue(value: unknown, seen: WeakSet<object>): SerializedValue {\r\n // Primitives\r\n if (value === null) return null;\r\n if (value === undefined) return { $$flight: 'undefined', value: '' };\r\n if (typeof value === 'string') return value;\r\n if (typeof value === 'number') {\r\n if (Number.isNaN(value)) return { $$flight: 'undefined', value: 'NaN' };\r\n if (!Number.isFinite(value)) return { $$flight: 'undefined', value: value > 0 ? 'Infinity' : '-Infinity' };\r\n return value;\r\n }\r\n if (typeof value === 'boolean') return value;\r\n if (typeof value === 'bigint') return { $$flight: 'bigint', value: value.toString() };\r\n if (typeof value === 'symbol') return { $$flight: 'symbol', value: value.description ?? '' };\r\n\r\n // Functions cannot be serialized\r\n if (typeof value === 'function') {\r\n throw new FlightSerializationError(\r\n 'Functions cannot be passed from Server to Client Components. ' +\r\n 'If you need to pass a function, use a Server Action instead.'\r\n );\r\n }\r\n\r\n // Circular reference detection\r\n if (typeof value === 'object') {\r\n if (seen.has(value)) {\r\n throw new FlightSerializationError('Circular references are not supported in Flight payloads.');\r\n }\r\n seen.add(value);\r\n }\r\n\r\n // Special objects\r\n if (value instanceof Date) {\r\n return { $$flight: 'date', value: value.toISOString() };\r\n }\r\n if (value instanceof RegExp) {\r\n return { $$flight: 'regexp', value: value.toString() };\r\n }\r\n if (value instanceof URL) {\r\n return { $$flight: 'url', value: value.href };\r\n }\r\n if (value instanceof Map) {\r\n const entries: [SerializedValue, SerializedValue][] = [];\r\n for (const [k, v] of value) {\r\n entries.push([serializeValue(k, seen), serializeValue(v, seen)]);\r\n }\r\n return { $$flight: 'map', value: entries as unknown as string };\r\n }\r\n if (value instanceof Set) {\r\n const items: SerializedValue[] = [];\r\n for (const v of value) {\r\n items.push(serializeValue(v, seen));\r\n }\r\n return { $$flight: 'set', value: items as unknown as string };\r\n }\r\n if (value instanceof Error) {\r\n return {\r\n $$flight: 'error',\r\n value: JSON.stringify({ name: value.name, message: value.message })\r\n };\r\n }\r\n\r\n // Arrays\r\n if (Array.isArray(value)) {\r\n return value.map(v => serializeValue(v, seen));\r\n }\r\n\r\n // Plain objects\r\n if (isPlainObject(value)) {\r\n const result: Record<string, SerializedValue> = {};\r\n for (const [k, v] of Object.entries(value)) {\r\n result[k] = serializeValue(v, seen);\r\n }\r\n return result;\r\n }\r\n\r\n // Unknown object type - try JSON serialization\r\n try {\r\n return JSON.parse(JSON.stringify(value)) as SerializedValue;\r\n } catch {\r\n throw new FlightSerializationError(\r\n `Cannot serialize value of type ${value?.constructor?.name ?? typeof value}. ` +\r\n 'Only serializable values can be passed to Client Components.'\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Deserializa un valor recibido de FlightStream\r\n */\r\nexport function deserialize<T = unknown>(value: SerializedValue): T {\r\n return deserializeValue(value) as T;\r\n}\r\n\r\nfunction deserializeValue(value: SerializedValue): unknown {\r\n if (value === null || value === undefined) return value;\r\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\r\n return value;\r\n }\r\n\r\n // Special values\r\n if (isSpecialValue(value)) {\r\n switch (value.$$flight) {\r\n case 'undefined':\r\n if (value.value === 'NaN') return NaN;\r\n if (value.value === 'Infinity') return Infinity;\r\n if (value.value === '-Infinity') return -Infinity;\r\n return undefined;\r\n case 'date':\r\n return new Date(value.value as string);\r\n case 'bigint':\r\n return BigInt(value.value as string);\r\n case 'symbol':\r\n return Symbol(value.value as string);\r\n case 'regexp': {\r\n const match = (value.value as string).match(/^\\/(.*)\\/([gimsuy]*)$/);\r\n if (match) return new RegExp(match[1]!, match[2]);\r\n return new RegExp(value.value as string);\r\n }\r\n case 'url':\r\n return new URL(value.value as string);\r\n case 'map':\r\n return new Map((value.value as unknown as [SerializedValue, SerializedValue][])\r\n .map(([k, v]) => [deserializeValue(k), deserializeValue(v)]));\r\n case 'set':\r\n return new Set((value.value as unknown as SerializedValue[])\r\n .map(v => deserializeValue(v)));\r\n case 'error': {\r\n const { name, message } = JSON.parse(value.value as string);\r\n const error = new Error(message);\r\n error.name = name;\r\n return error;\r\n }\r\n }\r\n }\r\n\r\n // Arrays\r\n if (Array.isArray(value)) {\r\n return value.map(deserializeValue);\r\n }\r\n\r\n // Objects\r\n if (typeof value === 'object') {\r\n const result: Record<string, unknown> = {};\r\n for (const [k, v] of Object.entries(value)) {\r\n result[k] = deserializeValue(v);\r\n }\r\n return result;\r\n }\r\n\r\n return value;\r\n}\r\n\r\n// ============================================================================\r\n// Helper Functions\r\n// ============================================================================\r\n\r\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\r\n if (typeof value !== 'object' || value === null) return false;\r\n const proto = Object.getPrototypeOf(value);\r\n return proto === null || proto === Object.prototype;\r\n}\r\n\r\nfunction isSpecialValue(value: unknown): value is SerializedSpecialValue {\r\n return typeof value === 'object' && value !== null && '$$flight' in value;\r\n}\r\n\r\n// ============================================================================\r\n// Flight Element Builders\r\n// ============================================================================\r\n\r\n/**\r\n * Create a host element\r\n */\r\nexport function h(\r\n tag: string,\r\n props: Record<string, unknown> | null,\r\n ...children: unknown[]\r\n): FlightHostElement {\r\n const serializedProps: Record<string, SerializedValue> = {};\r\n\r\n if (props) {\r\n for (const [key, value] of Object.entries(props)) {\r\n if (key !== 'children') {\r\n serializedProps[key] = serialize(value);\r\n }\r\n }\r\n }\r\n\r\n return {\r\n $$type: 'host',\r\n tag,\r\n props: serializedProps,\r\n children: children.flat().map(child => toFlightElement(child)),\r\n };\r\n}\r\n\r\n/**\r\n * Create a text element\r\n */\r\nexport function text(value: string): FlightTextElement {\r\n return { $$type: 'text', value };\r\n}\r\n\r\n/**\r\n * Create a fragment\r\n */\r\nexport function fragment(...children: unknown[]): FlightFragmentElement {\r\n return {\r\n $$type: 'fragment',\r\n children: children.flat().map(child => toFlightElement(child)),\r\n };\r\n}\r\n\r\n/**\r\n * Create a suspense boundary\r\n */\r\nexport function suspense(\r\n id: string,\r\n fallback: FlightElement,\r\n children: FlightElement[]\r\n): FlightSuspenseElement {\r\n return { $$type: 'suspense', id, fallback, children };\r\n}\r\n\r\n/**\r\n * Create a client component reference\r\n */\r\nexport function clientRef(refId: string, ssrHtml?: string): FlightClientElement {\r\n return { $$type: 'client', ref: refId, ssr: ssrHtml };\r\n}\r\n\r\n/**\r\n * Convert any value to a FlightElement\r\n */\r\nexport function toFlightElement(value: unknown): FlightElement {\r\n if (value === null || value === undefined || typeof value === 'boolean') {\r\n return { $$type: 'null' };\r\n }\r\n if (typeof value === 'string' || typeof value === 'number') {\r\n return { $$type: 'text', value: String(value) };\r\n }\r\n if (isFlightElement(value)) {\r\n return value;\r\n }\r\n // Unknown - render as null\r\n return { $$type: 'null' };\r\n}\r\n\r\n/**\r\n * Type guard for FlightElement\r\n */\r\nexport function isFlightElement(value: unknown): value is FlightElement {\r\n return typeof value === 'object' && value !== null && '$$type' in value;\r\n}\r\n\r\n// ============================================================================\r\n// Chunk Builders\r\n// ============================================================================\r\n\r\nlet chunkIdCounter = 0;\r\n\r\n/**\r\n * Generate unique chunk ID\r\n */\r\nexport function generateChunkId(prefix = 'c'): string {\r\n return `${prefix}${chunkIdCounter++}`;\r\n}\r\n\r\n/**\r\n * Reset chunk ID counter (for testing)\r\n */\r\nexport function resetChunkIdCounter(): void {\r\n chunkIdCounter = 0;\r\n}\r\n\r\n/**\r\n * Create a server component chunk\r\n */\r\nexport function createServerChunk(\r\n id: string,\r\n tree: FlightElement,\r\n awaiting?: string[]\r\n): ServerComponentChunk {\r\n return {\r\n type: 'S',\r\n id,\r\n tree,\r\n awaiting,\r\n ts: Date.now(),\r\n };\r\n}\r\n\r\n/**\r\n * Create a client reference chunk\r\n */\r\nexport function createClientChunk(\r\n id: string,\r\n module: string,\r\n exportName: string,\r\n props: unknown,\r\n fallback?: string\r\n): ClientReferenceChunk {\r\n return {\r\n type: 'C',\r\n id,\r\n module,\r\n export: exportName,\r\n props: serialize(props),\r\n fallback,\r\n };\r\n}\r\n\r\n/**\r\n * Create a server reference (action) chunk\r\n */\r\nexport function createActionChunk(\r\n id: string,\r\n boundArgs?: unknown[]\r\n): ServerReferenceChunk {\r\n return {\r\n type: 'A',\r\n id,\r\n bound: boundArgs?.map(serialize),\r\n };\r\n}\r\n\r\n/**\r\n * Create an error chunk\r\n */\r\nexport function createErrorChunk(\r\n boundary: string,\r\n error: Error,\r\n includeStack = false\r\n): ErrorBoundaryChunk {\r\n return {\r\n type: 'E',\r\n boundary,\r\n message: error.message,\r\n digest: generateErrorDigest(error),\r\n stack: includeStack ? error.stack : undefined,\r\n };\r\n}\r\n\r\n/**\r\n * Create a hint chunk\r\n */\r\nexport function createHintChunk(\r\n hint: HintChunk['hint'],\r\n href: string,\r\n options?: { as?: HintChunk['as']; crossorigin?: HintChunk['crossorigin'] }\r\n): HintChunk {\r\n return {\r\n type: 'H',\r\n hint,\r\n href,\r\n ...options,\r\n };\r\n}\r\n\r\n/**\r\n * Generate error digest for correlation\r\n */\r\nfunction generateErrorDigest(error: Error): string {\r\n const str = `${error.name}:${error.message}:${Date.now()}`;\r\n // Simple hash for digest\r\n let hash = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n const char = str.charCodeAt(i);\r\n hash = ((hash << 5) - hash) + char;\r\n hash = hash & hash;\r\n }\r\n return Math.abs(hash).toString(36);\r\n}\r\n\r\n// ============================================================================\r\n// Custom Errors\r\n// ============================================================================\r\n\r\n/**\r\n * Error thrown during serialization\r\n */\r\nexport class FlightSerializationError extends Error {\r\n constructor(message: string) {\r\n super(message);\r\n this.name = 'FlightSerializationError';\r\n }\r\n}\r\n\r\n/**\r\n * Error thrown during payload processing\r\n */\r\nexport class FlightPayloadError extends Error {\r\n constructor(message: string, public readonly chunk?: FlightChunk) {\r\n super(message);\r\n this.name = 'FlightPayloadError';\r\n }\r\n}\r\n"]}
@@ -196,5 +196,5 @@ function isRedirectError(error) {
196
196
  }
197
197
 
198
198
  export { composeComponents, createAsyncComponent, createClientBoundary, createRenderContext, deserializeProps, executeServerComponent, isNotFoundError, isRedirectError, notFound, redirect, revalidatePath, revalidateTag, serializeProps, serverFetch, withAsyncErrorBoundary, withErrorBoundary };
199
- //# sourceMappingURL=chunk-6IG6XIXU.js.map
200
- //# sourceMappingURL=chunk-6IG6XIXU.js.map
199
+ //# sourceMappingURL=chunk-LNV47HGV.js.map
200
+ //# sourceMappingURL=chunk-LNV47HGV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/rsc/legacy.ts"],"names":[],"mappings":"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","file":"chunk-LNV47HGV.js","sourcesContent":["/**\r\n * @flight-framework/core - Legacy RSC Support\r\n * \r\n * Backward compatibility module for the original RSC implementation.\r\n * Use the new API from './index.js' for new features.\r\n * \r\n * @deprecated Use the new RSC API instead\r\n * @module @flight-framework/core/rsc/legacy\r\n */\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\n/**\r\n * Component rendering context\r\n * @deprecated Use ServerContext from './context.js' instead\r\n */\r\nexport interface RenderContext {\r\n /** Current request */\r\n request: Request;\r\n /** Route params */\r\n params: Record<string, string>;\r\n /** Search params */\r\n searchParams: URLSearchParams;\r\n /** Request headers */\r\n headers: Headers;\r\n /** Cookies */\r\n cookies: Map<string, string>;\r\n}\r\n\r\n/**\r\n * Server component definition\r\n * @deprecated Use ServerComponentFn from './index.js' instead\r\n */\r\nexport interface ServerComponent<P = unknown> {\r\n (props: P, context: RenderContext): Promise<string> | string;\r\n /** Mark as server component */\r\n __flight_server?: true;\r\n /** Dependencies for hydration */\r\n __flight_deps?: string[];\r\n}\r\n\r\n/**\r\n * Client component definition\r\n * @deprecated Use ClientReference from './boundaries.js' instead\r\n */\r\nexport interface ClientComponent<P = unknown> {\r\n (props: P): unknown;\r\n /** Mark as client component */\r\n __flight_client?: true;\r\n /** Client bundle path */\r\n __flight_bundle?: string;\r\n}\r\n\r\n/**\r\n * Component type detection\r\n */\r\nexport type ComponentType = 'server' | 'client' | 'hybrid';\r\n\r\n// ============================================================================\r\n// Server Component Execution\r\n// ============================================================================\r\n\r\n/**\r\n * Execute an async server component\r\n * @deprecated Use the new rendering pipeline instead\r\n */\r\nexport async function executeServerComponent<P>(\r\n component: ServerComponent<P>,\r\n props: P,\r\n context: RenderContext\r\n): Promise<string> {\r\n try {\r\n const result = await component(props, context);\r\n return result;\r\n } catch (error) {\r\n console.error('[Flight] Server component error:', error);\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * Create a render context from a Request\r\n * @deprecated Use createServerContext from './context.js' instead\r\n */\r\nexport function createRenderContext(request: Request, params: Record<string, string> = {}): RenderContext {\r\n const url = new URL(request.url);\r\n\r\n // Parse cookies\r\n const cookies = new Map<string, string>();\r\n const cookieHeader = request.headers.get('cookie') || '';\r\n cookieHeader.split(';').forEach(cookie => {\r\n const [key, value] = cookie.trim().split('=');\r\n if (key && value) cookies.set(key, value);\r\n });\r\n\r\n return {\r\n request,\r\n params,\r\n searchParams: url.searchParams,\r\n headers: request.headers,\r\n cookies,\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Data Fetching Helpers\r\n// ============================================================================\r\n\r\n/**\r\n * Cache for server-side fetch requests\r\n */\r\nconst fetchCache = new Map<string, { data: unknown; timestamp: number }>();\r\n\r\n/**\r\n * Server-side fetch with automatic caching\r\n */\r\nexport async function serverFetch<T>(\r\n url: string,\r\n options: RequestInit & {\r\n revalidate?: number | false;\r\n tags?: string[];\r\n } = {}\r\n): Promise<T> {\r\n const { revalidate = 60, ...fetchOptions } = options;\r\n const cacheKey = `${url}:${JSON.stringify(fetchOptions)}`;\r\n\r\n // Check cache\r\n const cached = fetchCache.get(cacheKey);\r\n if (cached) {\r\n const age = Date.now() - cached.timestamp;\r\n if (revalidate === false || age < (revalidate * 1000)) {\r\n return cached.data as T;\r\n }\r\n }\r\n\r\n // Fetch fresh data\r\n const response = await fetch(url, fetchOptions);\r\n\r\n if (!response.ok) {\r\n throw new Error(`Fetch failed: ${response.status} ${response.statusText}`);\r\n }\r\n\r\n const data = await response.json();\r\n\r\n // Cache the result\r\n if (revalidate !== false) {\r\n fetchCache.set(cacheKey, {\r\n data,\r\n timestamp: Date.now(),\r\n });\r\n }\r\n\r\n return data as T;\r\n}\r\n\r\n/**\r\n * Invalidate cache by tag\r\n */\r\nexport function revalidateTag(tag: string): void {\r\n console.log(`[Flight] Revalidating tag: ${tag}`);\r\n}\r\n\r\n/**\r\n * Invalidate cache by path\r\n */\r\nexport function revalidatePath(path: string): void {\r\n console.log(`[Flight] Revalidating path: ${path}`);\r\n}\r\n\r\n// ============================================================================\r\n// Component Serialization\r\n// ============================================================================\r\n\r\n/**\r\n * Serialize props for transmission to client\r\n * @deprecated Use serialize from './payload.js' instead\r\n */\r\nexport function serializeProps(props: unknown): string {\r\n function preProcess(value: unknown): unknown {\r\n if (value instanceof Date) {\r\n return { __type: 'Date', value: value.toISOString() };\r\n }\r\n if (value instanceof Map) {\r\n return { __type: 'Map', value: Array.from(value.entries()).map(([k, v]) => [preProcess(k), preProcess(v)]) };\r\n }\r\n if (value instanceof Set) {\r\n return { __type: 'Set', value: Array.from(value).map(preProcess) };\r\n }\r\n if (typeof value === 'bigint') {\r\n return { __type: 'BigInt', value: value.toString() };\r\n }\r\n if (typeof value === 'function') {\r\n return undefined;\r\n }\r\n if (Array.isArray(value)) {\r\n return value.map(preProcess);\r\n }\r\n if (value && typeof value === 'object') {\r\n const result: Record<string, unknown> = {};\r\n for (const [k, v] of Object.entries(value)) {\r\n result[k] = preProcess(v);\r\n }\r\n return result;\r\n }\r\n return value;\r\n }\r\n\r\n return JSON.stringify(preProcess(props));\r\n}\r\n\r\n/**\r\n * Deserialize props on client\r\n * @deprecated Use deserialize from './payload.js' instead\r\n */\r\nexport function deserializeProps<T>(serialized: string): T {\r\n return JSON.parse(serialized, (_key, value) => {\r\n if (value && typeof value === 'object' && '__type' in value) {\r\n switch (value.__type) {\r\n case 'Date':\r\n return new Date(value.value);\r\n case 'Map':\r\n return new Map(value.value);\r\n case 'Set':\r\n return new Set(value.value);\r\n case 'BigInt':\r\n return BigInt(value.value);\r\n }\r\n }\r\n return value;\r\n });\r\n}\r\n\r\n// ============================================================================\r\n// Client Component Boundary\r\n// ============================================================================\r\n\r\n/**\r\n * Create a client boundary placeholder\r\n * @deprecated Use clientRef from './payload.js' instead\r\n */\r\nexport function createClientBoundary(\r\n componentId: string,\r\n props: unknown,\r\n fallback?: string\r\n): string {\r\n const serializedProps = serializeProps(props);\r\n\r\n return `\r\n<!--flight-client:${componentId}-->\r\n<div data-flight-component=\"${componentId}\" data-flight-props='${serializedProps.replace(/'/g, \"&#39;\")}'>\r\n ${fallback || '<div>Loading...</div>'}\r\n</div>\r\n<!--/flight-client-->\r\n<script type=\"module\">\r\n(async function() {\r\n const component = await import('/_flight/components/${componentId}.js');\r\n const props = JSON.parse('${serializedProps.replace(/'/g, \"\\\\'\")}');\r\n const container = document.querySelector('[data-flight-component=\"${componentId}\"]');\r\n if (container && component.default) {\r\n if (typeof component.hydrate === 'function') {\r\n component.hydrate(container, props);\r\n }\r\n }\r\n})();\r\n</script>`;\r\n}\r\n\r\n// ============================================================================\r\n// Async Component Helpers\r\n// ============================================================================\r\n\r\n/**\r\n * Helper to create an async server component\r\n * @deprecated Use async Server Components directly\r\n */\r\nexport function createAsyncComponent<P, T>(\r\n fetcher: (props: P, context: RenderContext) => Promise<T>,\r\n renderer: (data: T, props: P) => string\r\n): ServerComponent<P> {\r\n const component: ServerComponent<P> = async (props, context) => {\r\n const data = await fetcher(props, context);\r\n return renderer(data, props);\r\n };\r\n component.__flight_server = true;\r\n return component;\r\n}\r\n\r\n/**\r\n * Compose multiple server components\r\n * @deprecated Use Promise.all with async components\r\n */\r\nexport function composeComponents(\r\n ...components: Array<() => Promise<string> | string>\r\n): () => Promise<string> {\r\n return async () => {\r\n const results = await Promise.all(\r\n components.map(async (comp) => await comp())\r\n );\r\n return results.join('');\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Error Boundary for Server Components\r\n// ============================================================================\r\n\r\n/**\r\n * Options for async error boundary\r\n */\r\nexport interface AsyncErrorBoundaryOptions<P, R> {\r\n /** Fallback to render on error */\r\n fallback: (error: Error, props: P) => R;\r\n /** Optional callback when error occurs */\r\n onError?: (error: Error, props: P, context: RenderContext) => void;\r\n /** Whether to rethrow certain errors (e.g., redirects, not found) */\r\n rethrowNavigation?: boolean;\r\n}\r\n\r\n/**\r\n * Wrap an async server component with comprehensive error handling.\r\n *\r\n * @example\r\n * ```typescript\r\n * const SafeUserPage = withAsyncErrorBoundary(UserPage, {\r\n * fallback: (error, props) => `<div>Error loading user ${props.id}</div>`,\r\n * onError: (error, props) => console.error(`Failed to load user ${props.id}:`, error),\r\n * rethrowNavigation: true,\r\n * });\r\n * ```\r\n */\r\nexport function withAsyncErrorBoundary<P, R = string>(\r\n component: (props: P, context: RenderContext) => Promise<R> | R,\r\n options: AsyncErrorBoundaryOptions<P, R>\r\n): (props: P, context: RenderContext) => Promise<R> {\r\n const { fallback, onError, rethrowNavigation = true } = options;\r\n\r\n return async (props: P, context: RenderContext): Promise<R> => {\r\n try {\r\n return await component(props, context);\r\n } catch (error) {\r\n // Rethrow navigation errors if configured\r\n if (rethrowNavigation) {\r\n if (isNotFoundError(error)) {\r\n throw error;\r\n }\r\n if (isRedirectError(error)) {\r\n throw error;\r\n }\r\n }\r\n\r\n // Call error callback if provided\r\n if (onError) {\r\n try {\r\n onError(error as Error, props, context);\r\n } catch (callbackError) {\r\n console.error('[Flight] Error in onError callback:', callbackError);\r\n }\r\n }\r\n\r\n // Log error\r\n console.error('[Flight] Async component error:', error);\r\n\r\n // Return fallback\r\n return fallback(error as Error, props);\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Wrap a server component with error handling\r\n * @deprecated Use withAsyncErrorBoundary instead\r\n */\r\nexport function withErrorBoundary<P>(\r\n component: ServerComponent<P>,\r\n errorFallback: (error: Error) => string\r\n): ServerComponent<P> {\r\n return async (props: P, context: RenderContext) => {\r\n try {\r\n return await component(props, context);\r\n } catch (error) {\r\n console.error('[Flight] Server component error:', error);\r\n return errorFallback(error as Error);\r\n }\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Not Found / Redirect Helpers\r\n// ============================================================================\r\n\r\n/**\r\n * Throw a not found error\r\n * @deprecated Use notFound from './context.js' instead\r\n */\r\nexport function notFound(): never {\r\n const error = new Error('Not Found');\r\n (error as Error & { __flight_not_found: boolean }).__flight_not_found = true;\r\n throw error;\r\n}\r\n\r\n/**\r\n * Check if error is not found\r\n * @deprecated Use isNotFoundError from './context.js' instead\r\n */\r\nexport function isNotFoundError(error: unknown): boolean {\r\n return error instanceof Error && (error as Error & { __flight_not_found?: boolean }).__flight_not_found === true;\r\n}\r\n\r\n/**\r\n * Server-side redirect\r\n * @deprecated Use redirect from './context.js' instead\r\n */\r\nexport function redirect(url: string, type: 'replace' | 'push' = 'replace'): never {\r\n const error = new Error(`Redirect: ${url}`);\r\n (error as Error & { __flight_redirect: { url: string; type: string } }).__flight_redirect = { url, type };\r\n throw error;\r\n}\r\n\r\n/**\r\n * Check if error is redirect\r\n * @deprecated Use isRedirectError from './context.js' instead\r\n */\r\nexport function isRedirectError(error: unknown): { url: string; type: string } | null {\r\n if (error instanceof Error && (error as Error & { __flight_redirect?: unknown }).__flight_redirect) {\r\n return (error as Error & { __flight_redirect: { url: string; type: string } }).__flight_redirect;\r\n }\r\n return null;\r\n}\r\n"]}
@@ -225,5 +225,5 @@ function lazy(loader) {
225
225
  }
226
226
 
227
227
  export { createPreactAdapter, createPreactConsumer, lazy, markAsPreactClientComponent };
228
- //# sourceMappingURL=chunk-65JYF3DJ.js.map
229
- //# sourceMappingURL=chunk-65JYF3DJ.js.map
228
+ //# sourceMappingURL=chunk-MDQNNIHH.js.map
229
+ //# sourceMappingURL=chunk-MDQNNIHH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/rsc/adapters/preact.ts"],"names":[],"mappings":"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","file":"chunk-MDQNNIHH.js","sourcesContent":["/**\r\n * @flight-framework/core - Preact UI Adapter\r\n * \r\n * Adapter for using Preact with Flight Server Components.\r\n * Enables Flight to render Preact components without tight coupling.\r\n * \r\n * Philosophy: Zero lock-in - Preact is optional, user decides.\r\n * \r\n * @module @flight-framework/core/rsc/adapters/preact\r\n */\r\n\r\nimport type { UIAdapter, ElementTypeInfo } from '../renderer.js';\r\n\r\n// ============================================================================\r\n// Preact Symbols\r\n// ============================================================================\r\n\r\n// Flight reference symbols\r\nconst CLIENT_REFERENCE = Symbol.for('flight.client.reference');\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\n/**\r\n * Minimal Preact VNode interface\r\n */\r\ninterface PreactVNode {\r\n type: unknown;\r\n props: Record<string, unknown>;\r\n key: string | number | null;\r\n ref: unknown;\r\n __?: unknown; // parent\r\n __k?: unknown[]; // children\r\n __b?: number; // depth\r\n __e?: unknown; // dom\r\n __c?: unknown; // component\r\n}\r\n\r\n/**\r\n * Preact dependencies (user provides these)\r\n */\r\nexport interface PreactDependencies {\r\n /** preact module */\r\n preact: {\r\n h: (type: unknown, props?: unknown, ...children: unknown[]) => PreactVNode;\r\n Fragment?: unknown;\r\n Component?: unknown;\r\n isValidElement?: (value: unknown) => boolean;\r\n cloneElement?: (vnode: PreactVNode, props?: unknown) => PreactVNode;\r\n };\r\n /** preact-render-to-string module (optional - for SSR) */\r\n renderToString?: (vnode: PreactVNode) => string;\r\n /** preact/hooks module (optional) */\r\n hooks?: {\r\n useState: <T>(initial: T) => [T, (v: T) => void];\r\n useEffect: (fn: () => void | (() => void), deps?: unknown[]) => void;\r\n useMemo: <T>(fn: () => T, deps: unknown[]) => T;\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Adapter Implementation\r\n// ============================================================================\r\n\r\n/**\r\n * Create Preact UI Adapter\r\n * \r\n * @example\r\n * ```typescript\r\n * import { createPreactAdapter } from '@flight-framework/core/rsc/adapters/preact';\r\n * import * as preact from 'preact';\r\n * import renderToString from 'preact-render-to-string';\r\n * \r\n * const adapter = createPreactAdapter({\r\n * preact,\r\n * renderToString,\r\n * });\r\n * \r\n * const renderer = createRenderer(adapter);\r\n * ```\r\n */\r\nexport function createPreactAdapter(deps?: PreactDependencies): UIAdapter {\r\n const { preact, renderToString } = deps || {};\r\n\r\n return {\r\n name: 'preact',\r\n\r\n isElement(value: unknown): boolean {\r\n if (preact?.isValidElement) {\r\n return preact.isValidElement(value);\r\n }\r\n // Fallback: check for VNode structure\r\n return (\r\n typeof value === 'object' &&\r\n value !== null &&\r\n 'type' in value &&\r\n 'props' in value\r\n );\r\n },\r\n\r\n getElementType(element: unknown): ElementTypeInfo {\r\n const vnode = element as PreactVNode;\r\n const type = vnode.type;\r\n\r\n // Null type (text or null node)\r\n if (type === null) {\r\n const props = vnode.props;\r\n if (typeof props === 'string' || typeof props === 'number') {\r\n return { kind: 'text', value: String(props) };\r\n }\r\n return { kind: 'null' };\r\n }\r\n\r\n // String = host element (div, span, etc.)\r\n if (typeof type === 'string') {\r\n return { kind: 'host', tag: type };\r\n }\r\n\r\n // Fragment\r\n if (type === preact?.Fragment) {\r\n return { kind: 'fragment' };\r\n }\r\n\r\n // Function component\r\n if (typeof type === 'function') {\r\n const fn = type as ((props: Record<string, unknown>) => unknown) & {\r\n displayName?: string;\r\n name?: string;\r\n };\r\n\r\n // Check for class component (extends Component)\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\r\n if (preact?.Component && type.prototype instanceof (preact.Component as unknown as Function)) {\r\n return {\r\n kind: 'component',\r\n fn: (props) => {\r\n // Class components need instantiation\r\n const Component = type as new (props: unknown) => { render: () => unknown };\r\n const instance = new Component(props);\r\n return instance.render();\r\n },\r\n name: fn.displayName || fn.name || 'PreactComponent',\r\n };\r\n }\r\n\r\n return {\r\n kind: 'component',\r\n fn,\r\n name: fn.displayName || fn.name || 'Component'\r\n };\r\n }\r\n\r\n return { kind: 'null' };\r\n },\r\n\r\n getProps(element: unknown): Record<string, unknown> {\r\n return (element as PreactVNode).props || {};\r\n },\r\n\r\n getChildren(element: unknown): unknown[] {\r\n const props = (element as PreactVNode).props;\r\n const children = props?.children;\r\n\r\n if (children === undefined || children === null) {\r\n return [];\r\n }\r\n\r\n if (Array.isArray(children)) {\r\n return children.flat();\r\n }\r\n\r\n return [children];\r\n },\r\n\r\n getKey(element: unknown): string | number | undefined {\r\n const key = (element as PreactVNode).key;\r\n return key !== null ? key : undefined;\r\n },\r\n\r\n isClientBoundary(component: unknown): boolean {\r\n if (typeof component !== 'function') return false;\r\n\r\n const comp = component as {\r\n $$typeof?: symbol;\r\n __flight_client?: boolean;\r\n };\r\n\r\n // Check for Flight client marker\r\n if (comp.__flight_client === true) return true;\r\n\r\n // Check for client reference symbol\r\n if (comp.$$typeof === CLIENT_REFERENCE) return true;\r\n\r\n return false;\r\n },\r\n\r\n createElement(\r\n component: (props: Record<string, unknown>) => unknown,\r\n props: Record<string, unknown>\r\n ): unknown {\r\n // Create a Preact VNode using h() if available\r\n if (preact?.h) {\r\n return preact.h(component, props);\r\n }\r\n\r\n // Fallback: create VNode structure directly\r\n return {\r\n type: component,\r\n props,\r\n key: null,\r\n ref: null,\r\n } as PreactVNode;\r\n },\r\n\r\n async renderToString(element: unknown): Promise<string> {\r\n if (renderToString) {\r\n return renderToString(element as PreactVNode);\r\n }\r\n throw new Error(\r\n 'renderToString not provided. Pass preact-render-to-string when creating the adapter: ' +\r\n 'createPreactAdapter({ preact, renderToString })'\r\n );\r\n },\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Preact Client Consumer\r\n// ============================================================================\r\n\r\n/**\r\n * Options for Preact consumer\r\n */\r\nexport interface PreactConsumerOptions {\r\n /** Registry of client components */\r\n registry?: Map<string, () => Promise<unknown>>;\r\n}\r\n\r\n/**\r\n * Create a Preact client-side consumer for Flight payloads\r\n */\r\nexport function createPreactConsumer(\r\n deps: PreactDependencies,\r\n options: PreactConsumerOptions = {}\r\n) {\r\n const { preact } = deps;\r\n const { registry = new Map() } = options;\r\n\r\n return {\r\n /**\r\n * Register a client component\r\n */\r\n register(id: string, loader: () => Promise<unknown>): void {\r\n registry.set(id, loader);\r\n },\r\n\r\n /**\r\n * Convert Flight elements to Preact VNodes\r\n */\r\n toPreactElement(element: import('../payload.js').FlightElement): unknown {\r\n switch (element.$$type) {\r\n case 'null':\r\n return null;\r\n\r\n case 'text':\r\n return element.value;\r\n\r\n case 'host': {\r\n const children = element.children.map(c => this.toPreactElement(c));\r\n return preact.h(\r\n element.tag,\r\n { ...element.props, key: element.key },\r\n ...children\r\n );\r\n }\r\n\r\n case 'fragment': {\r\n const children = element.children.map(c => this.toPreactElement(c));\r\n return preact.h(preact.Fragment!, null, ...children);\r\n }\r\n\r\n case 'suspense': {\r\n // Preact doesn't have built-in Suspense, use fragment\r\n const children = element.children.map(c => this.toPreactElement(c));\r\n return preact.h(preact.Fragment!, null, ...children);\r\n }\r\n\r\n case 'client': {\r\n const loader = registry.get(element.ref);\r\n if (!loader) {\r\n console.warn(`[Flight] Client component not registered: ${element.ref}`);\r\n if (element.ssr) {\r\n return preact.h('div', {\r\n dangerouslySetInnerHTML: { __html: element.ssr }\r\n });\r\n }\r\n return null;\r\n }\r\n\r\n // Create lazy loading wrapper\r\n // Preact doesn't have React.lazy, so we create a simple async loader\r\n const LazyWrapper = (props: Record<string, unknown>) => {\r\n // This is a simplified version - in production use @preact/signals\r\n // or a state management solution\r\n const loadedRef = { current: null as unknown };\r\n\r\n loader().then((mod: { default?: unknown }) => {\r\n loadedRef.current = mod.default ?? mod;\r\n });\r\n\r\n if (loadedRef.current) {\r\n return preact.h(loadedRef.current as string, props);\r\n }\r\n\r\n // Return SSR placeholder\r\n if (element.ssr) {\r\n return preact.h('div', {\r\n dangerouslySetInnerHTML: { __html: element.ssr }\r\n });\r\n }\r\n\r\n return preact.h('div', { 'data-flight-loading': element.ref });\r\n };\r\n\r\n return preact.h(LazyWrapper, {});\r\n }\r\n\r\n case 'lazy': {\r\n if (element.fallback) {\r\n return this.toPreactElement(element.fallback);\r\n }\r\n return preact.h('div', { 'data-flight-pending': element.id });\r\n }\r\n\r\n default:\r\n return null;\r\n }\r\n },\r\n\r\n /**\r\n * Hydrate Flight payload into DOM\r\n */\r\n hydrate(\r\n chunks: import('../payload.js').FlightChunk[],\r\n container: Element,\r\n hydrateFn?: (vnode: unknown, container: Element) => void\r\n ): void {\r\n const rootChunk = chunks.find(c => c.type === 'S' && c.id === 'root');\r\n if (!rootChunk || rootChunk.type !== 'S') {\r\n throw new Error('[Flight] No root chunk found');\r\n }\r\n\r\n // Register client components\r\n for (const chunk of chunks) {\r\n if (chunk.type === 'C') {\r\n if (!registry.has(chunk.id)) {\r\n registry.set(chunk.id, () => import(/* webpackIgnore: true */ chunk.module));\r\n }\r\n }\r\n }\r\n\r\n const element = this.toPreactElement(rootChunk.tree);\r\n\r\n if (hydrateFn) {\r\n hydrateFn(element, container);\r\n } else {\r\n // Fallback: use preact.render (not ideal for SSR)\r\n const { render } = deps?.preact as { render?: (vnode: unknown, container: Element) => void } || {};\r\n if (render) {\r\n render(element, container);\r\n } else {\r\n throw new Error('[Flight] No hydrate or render function provided');\r\n }\r\n }\r\n },\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Utility Types\r\n// ============================================================================\r\n\r\n/**\r\n * Type helper for Preact Server Component\r\n */\r\nexport type PreactServerComponent<P = Record<string, unknown>> = (\r\n props: P,\r\n ctx: import('../context.js').ServerContext\r\n) => Promise<PreactVNode> | PreactVNode;\r\n\r\n/**\r\n * Mark a Preact component as a client component\r\n */\r\nexport function markAsPreactClientComponent<T extends (...args: unknown[]) => unknown>(\r\n component: T,\r\n moduleId: string,\r\n exportName = 'default'\r\n): T {\r\n const marked = component as T & {\r\n $$typeof: symbol;\r\n __flight_client: boolean;\r\n __flight_module: string;\r\n __flight_export: string;\r\n };\r\n\r\n marked.$$typeof = CLIENT_REFERENCE;\r\n marked.__flight_client = true;\r\n marked.__flight_module = moduleId;\r\n marked.__flight_export = exportName;\r\n\r\n return marked;\r\n}\r\n\r\n/**\r\n * Create a lazy-loading component for Preact\r\n */\r\nexport function lazy<T extends (...args: unknown[]) => unknown>(\r\n loader: () => Promise<{ default: T }>\r\n): T {\r\n let Component: T | null = null;\r\n let promise: Promise<{ default: T }> | null = null;\r\n\r\n const LazyComponent = ((props: unknown) => {\r\n if (Component) {\r\n return Component(props);\r\n }\r\n\r\n if (!promise) {\r\n promise = loader().then(mod => {\r\n Component = mod.default;\r\n return mod;\r\n });\r\n }\r\n\r\n throw promise; // Suspense-style\r\n }) as T;\r\n\r\n return LazyComponent;\r\n}\r\n"]}
@@ -284,5 +284,5 @@ function createStreamAdapter(framework, options) {
284
284
  }
285
285
 
286
286
  export { createHTMXStreamAdapter, createReactStreamAdapter, createSolidStreamAdapter, createStreamAdapter, createSvelteStreamAdapter, createVueStreamAdapter };
287
- //# sourceMappingURL=chunk-GNS2FGPC.js.map
288
- //# sourceMappingURL=chunk-GNS2FGPC.js.map
287
+ //# sourceMappingURL=chunk-MQQLYWZZ.js.map
288
+ //# sourceMappingURL=chunk-MQQLYWZZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/streaming/adapters/index.ts"],"names":[],"mappings":"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","file":"chunk-MQQLYWZZ.js","sourcesContent":["/**\r\n * @flight-framework/core - Multi-Framework Streaming Adapters\r\n * \r\n * Streaming SSR adapters for React, Vue, Svelte, Solid, and HTMX.\r\n * Uses dependency injection pattern for optional framework dependencies.\r\n * \r\n * Best Practices 2026:\r\n * - Dependency injection for optional peer dependencies\r\n * - Support both Node.js and Edge runtimes \r\n * - Progressive hydration support\r\n * - Error boundary integration\r\n * \r\n * @example\r\n * ```typescript\r\n * // React adapter with your imports\r\n * import { renderToReadableStream } from 'react-dom/server';\r\n * \r\n * const adapter = createReactStreamAdapter({\r\n * renderToReadableStream,\r\n * bootstrapModules: ['/client.js'],\r\n * });\r\n * ```\r\n */\r\n\r\nimport type { StreamingRenderOptions, StreamingRenderResult } from '../index.js';\r\n\r\n// ============================================================================\r\n// Common Types\r\n// ============================================================================\r\n\r\n/**\r\n * Framework-specific streaming adapter\r\n */\r\nexport interface StreamingAdapter<TComponent = unknown> {\r\n /** Adapter name */\r\n readonly name: string;\r\n /** Framework version support */\r\n readonly framework: string;\r\n /** Runtime support */\r\n readonly runtime: 'universal' | 'node' | 'edge';\r\n\r\n /**\r\n * Create a streaming response from a component\r\n */\r\n stream(\r\n component: TComponent,\r\n options?: StreamingRenderOptions\r\n ): Promise<StreamingRenderResult>;\r\n\r\n /**\r\n * Render to static string (for comparison/fallback)\r\n */\r\n renderToString?(component: TComponent): Promise<string>;\r\n}\r\n\r\n/**\r\n * Common adapter options\r\n */\r\nexport interface AdapterOptions {\r\n /** Enable streaming (default: true) */\r\n streaming?: boolean;\r\n /** Scripts to bootstrap on client */\r\n bootstrapScripts?: string[];\r\n /** Modules to bootstrap on client */\r\n bootstrapModules?: string[];\r\n /** Error handling strategy */\r\n onError?: (error: Error) => void;\r\n /** Shell ready callback */\r\n onShellReady?: () => void;\r\n /** All content ready callback */\r\n onAllReady?: () => void;\r\n}\r\n\r\n// ============================================================================\r\n// React Adapter (Dependency Injection Pattern)\r\n// ============================================================================\r\n\r\n/**\r\n * React streaming adapter options with required dependencies\r\n */\r\nexport interface ReactAdapterOptions extends AdapterOptions {\r\n /** React's renderToReadableStream (for Edge) */\r\n renderToReadableStream?: (\r\n element: unknown,\r\n options?: {\r\n bootstrapScripts?: string[];\r\n bootstrapModules?: string[];\r\n identifierPrefix?: string;\r\n signal?: AbortSignal;\r\n onError?: (error: unknown) => void;\r\n }\r\n ) => Promise<ReadableStream<Uint8Array> & { allReady: Promise<void> }>;\r\n\r\n /** React's renderToString (for static fallback) */\r\n renderToString?: (element: unknown) => string;\r\n\r\n /** Custom identifier prefix */\r\n identifierPrefix?: string;\r\n /** Abort signal */\r\n signal?: AbortSignal;\r\n}\r\n\r\n/**\r\n * Create a React streaming adapter\r\n * \r\n * @example\r\n * ```typescript\r\n * import { renderToReadableStream, renderToString } from 'react-dom/server';\r\n * \r\n * const adapter = createReactStreamAdapter({\r\n * renderToReadableStream,\r\n * renderToString,\r\n * bootstrapModules: ['/client.js'],\r\n * });\r\n * \r\n * const result = await adapter.stream(<App />);\r\n * ```\r\n */\r\nexport function createReactStreamAdapter(options: ReactAdapterOptions): StreamingAdapter {\r\n if (!options.renderToReadableStream) {\r\n throw new Error(\r\n '[Flight] createReactStreamAdapter requires renderToReadableStream. ' +\r\n 'Import it from react-dom/server and pass it in options.'\r\n );\r\n }\r\n\r\n return {\r\n name: 'react',\r\n framework: 'react@18+',\r\n runtime: 'edge',\r\n\r\n async stream(component, streamOptions = {}) {\r\n const mergedOptions = { ...options, ...streamOptions };\r\n\r\n let resolveShell: () => void;\r\n let resolveAll: () => void;\r\n const shellReady = new Promise<void>((r) => { resolveShell = r; });\r\n const allReady = new Promise<void>((r) => { resolveAll = r; });\r\n\r\n const stream = await options.renderToReadableStream!(component, {\r\n bootstrapScripts: mergedOptions.bootstrapScripts,\r\n bootstrapModules: mergedOptions.bootstrapModules,\r\n identifierPrefix: mergedOptions.identifierPrefix,\r\n signal: mergedOptions.signal,\r\n onError: (error: unknown) => {\r\n mergedOptions.onError?.(error as Error);\r\n },\r\n });\r\n\r\n // Shell is ready when stream is created\r\n resolveShell!();\r\n mergedOptions.onShellReady?.();\r\n\r\n // Track all ready via stream completion\r\n stream.allReady.then(() => {\r\n resolveAll!();\r\n mergedOptions.onAllReady?.();\r\n });\r\n\r\n return {\r\n stream,\r\n abort: () => { /* stream handles abort via signal */ },\r\n shellReady,\r\n allReady,\r\n };\r\n },\r\n\r\n async renderToString(component) {\r\n if (!options.renderToString) {\r\n throw new Error('[Flight] renderToString not provided to adapter');\r\n }\r\n return options.renderToString(component);\r\n },\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Vue Adapter (Dependency Injection Pattern)\r\n// ============================================================================\r\n\r\n/**\r\n * Vue streaming adapter options\r\n */\r\nexport interface VueAdapterOptions extends AdapterOptions {\r\n /** Vue's renderToWebStream */\r\n renderToWebStream?: (app: unknown, context?: Record<string, unknown>) => ReadableStream;\r\n /** Vue's renderToString */\r\n renderToString?: (app: unknown) => Promise<string>;\r\n /** Vue app context */\r\n context?: Record<string, unknown>;\r\n}\r\n\r\n/**\r\n * Create a Vue 3 streaming adapter\r\n * \r\n * @example\r\n * ```typescript\r\n * import { renderToWebStream, renderToString } from 'vue/server-renderer';\r\n * \r\n * const adapter = createVueStreamAdapter({\r\n * renderToWebStream,\r\n * renderToString,\r\n * });\r\n * \r\n * const result = await adapter.stream(createSSRApp(App));\r\n * ```\r\n */\r\nexport function createVueStreamAdapter(options: VueAdapterOptions): StreamingAdapter {\r\n if (!options.renderToWebStream) {\r\n throw new Error(\r\n '[Flight] createVueStreamAdapter requires renderToWebStream. ' +\r\n 'Import it from vue/server-renderer and pass it in options.'\r\n );\r\n }\r\n\r\n return {\r\n name: 'vue',\r\n framework: 'vue@3+',\r\n runtime: 'universal',\r\n\r\n async stream(app, streamOptions = {}) {\r\n const mergedOptions = { ...options, ...streamOptions };\r\n\r\n let resolveShell: () => void;\r\n let resolveAll: () => void;\r\n const shellReady = new Promise<void>((r) => { resolveShell = r; });\r\n const allReady = new Promise<void>((r) => { resolveAll = r; });\r\n\r\n try {\r\n const stream = options.renderToWebStream!(app, mergedOptions.context);\r\n\r\n // Vue streams shell immediately\r\n resolveShell!();\r\n mergedOptions.onShellReady?.();\r\n\r\n // Wrap to detect completion\r\n const reader = stream.getReader();\r\n\r\n const wrappedStream = new ReadableStream<Uint8Array>({\r\n async pull(controller) {\r\n const { done, value } = await reader.read();\r\n if (done) {\r\n resolveAll!();\r\n mergedOptions.onAllReady?.();\r\n controller.close();\r\n } else {\r\n controller.enqueue(value);\r\n }\r\n },\r\n });\r\n\r\n return {\r\n stream: wrappedStream,\r\n abort: () => reader.cancel(),\r\n shellReady,\r\n allReady,\r\n };\r\n } catch (error) {\r\n mergedOptions.onError?.(error as Error);\r\n throw error;\r\n }\r\n },\r\n\r\n async renderToString(app) {\r\n if (!options.renderToString) {\r\n throw new Error('[Flight] renderToString not provided to adapter');\r\n }\r\n return options.renderToString(app);\r\n },\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Solid Adapter (Dependency Injection Pattern)\r\n// ============================================================================\r\n\r\n/**\r\n * Solid streaming adapter options\r\n */\r\nexport interface SolidAdapterOptions extends AdapterOptions {\r\n /** Solid's renderToStream */\r\n renderToStream?: (\r\n fn: () => unknown,\r\n options?: {\r\n nonce?: string;\r\n onCompleteShell?: () => void;\r\n onCompleteAll?: () => void;\r\n }\r\n ) => { pipeTo: (writable: WritableStream) => void };\r\n /** Solid's renderToString */\r\n renderToString?: (fn: () => unknown) => string;\r\n /** Nonce for CSP */\r\n nonce?: string;\r\n}\r\n\r\n/**\r\n * Create a Solid.js streaming adapter\r\n * \r\n * @example\r\n * ```typescript\r\n * import { renderToStream, renderToString } from 'solid-js/web';\r\n * \r\n * const adapter = createSolidStreamAdapter({\r\n * renderToStream,\r\n * renderToString,\r\n * });\r\n * \r\n * const result = await adapter.stream(() => <App />);\r\n * ```\r\n */\r\nexport function createSolidStreamAdapter(options: SolidAdapterOptions): StreamingAdapter {\r\n if (!options.renderToStream) {\r\n throw new Error(\r\n '[Flight] createSolidStreamAdapter requires renderToStream. ' +\r\n 'Import it from solid-js/web and pass it in options.'\r\n );\r\n }\r\n\r\n return {\r\n name: 'solid',\r\n framework: 'solid-js@1+',\r\n runtime: 'universal',\r\n\r\n async stream(component, streamOptions = {}) {\r\n const mergedOptions = { ...options, ...streamOptions };\r\n\r\n let resolveShell: () => void;\r\n let resolveAll: () => void;\r\n const shellReady = new Promise<void>((r) => { resolveShell = r; });\r\n const allReady = new Promise<void>((r) => { resolveAll = r; });\r\n\r\n try {\r\n const { readable, writable } = new TransformStream<Uint8Array, Uint8Array>();\r\n\r\n // Solid's renderToStream with async options\r\n const result = options.renderToStream!(component as () => unknown, {\r\n nonce: mergedOptions.nonce,\r\n onCompleteShell: () => {\r\n resolveShell!();\r\n mergedOptions.onShellReady?.();\r\n },\r\n onCompleteAll: () => {\r\n resolveAll!();\r\n mergedOptions.onAllReady?.();\r\n },\r\n });\r\n\r\n // Pipe to transform stream\r\n result.pipeTo(writable);\r\n\r\n return {\r\n stream: readable,\r\n abort: () => writable.abort(),\r\n shellReady,\r\n allReady,\r\n };\r\n } catch (error) {\r\n mergedOptions.onError?.(error as Error);\r\n throw error;\r\n }\r\n },\r\n\r\n async renderToString(component) {\r\n if (!options.renderToString) {\r\n throw new Error('[Flight] renderToString not provided to adapter');\r\n }\r\n return options.renderToString(component as () => unknown);\r\n },\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Svelte Adapter (Dependency Injection Pattern)\r\n// ============================================================================\r\n\r\n/**\r\n * Svelte streaming adapter options\r\n */\r\nexport interface SvelteAdapterOptions extends AdapterOptions {\r\n /** Svelte's render function */\r\n render?: (\r\n component: unknown,\r\n options?: { props?: Record<string, unknown> }\r\n ) => { body: string; head?: string };\r\n /** Props for the component */\r\n props?: Record<string, unknown>;\r\n}\r\n\r\n/**\r\n * Create a Svelte 5 streaming adapter\r\n * Note: Svelte's SSR is primarily string-based, streaming is simulated\r\n * \r\n * @example\r\n * ```typescript\r\n * import { render } from 'svelte/server';\r\n * \r\n * const adapter = createSvelteStreamAdapter({\r\n * render,\r\n * props: { name: 'World' },\r\n * });\r\n * \r\n * const result = await adapter.stream(App);\r\n * ```\r\n */\r\nexport function createSvelteStreamAdapter(options: SvelteAdapterOptions): StreamingAdapter {\r\n if (!options.render) {\r\n throw new Error(\r\n '[Flight] createSvelteStreamAdapter requires render. ' +\r\n 'Import it from svelte/server and pass it in options.'\r\n );\r\n }\r\n\r\n return {\r\n name: 'svelte',\r\n framework: 'svelte@5+',\r\n runtime: 'universal',\r\n\r\n async stream(component, streamOptions = {}) {\r\n const mergedOptions = { ...options, ...streamOptions };\r\n\r\n let resolveShell: () => void;\r\n let resolveAll: () => void;\r\n const shellReady = new Promise<void>((r) => { resolveShell = r; });\r\n const allReady = new Promise<void>((r) => { resolveAll = r; });\r\n\r\n try {\r\n // Render to string first\r\n const result = options.render!(component, { props: mergedOptions.props || {} });\r\n const html = result.body;\r\n\r\n // Convert to stream\r\n const encoder = new TextEncoder();\r\n const stream = new ReadableStream<Uint8Array>({\r\n start(controller) {\r\n // Send head/css first\r\n if (result.head) {\r\n controller.enqueue(encoder.encode(result.head));\r\n }\r\n\r\n resolveShell!();\r\n mergedOptions.onShellReady?.();\r\n\r\n // Send body\r\n controller.enqueue(encoder.encode(html));\r\n\r\n resolveAll!();\r\n mergedOptions.onAllReady?.();\r\n controller.close();\r\n },\r\n });\r\n\r\n return {\r\n stream,\r\n abort: () => { },\r\n shellReady,\r\n allReady,\r\n };\r\n } catch (error) {\r\n mergedOptions.onError?.(error as Error);\r\n throw error;\r\n }\r\n },\r\n\r\n async renderToString(component) {\r\n const result = options.render!(component, { props: options?.props || {} });\r\n return result.body;\r\n },\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// HTMX Streaming Adapter (SSE-based)\r\n// ============================================================================\r\n\r\n/**\r\n * HTMX streaming adapter options\r\n */\r\nexport interface HTMXAdapterOptions extends AdapterOptions {\r\n /** Event name for SSE */\r\n eventName?: string;\r\n /** Retry interval for SSE */\r\n retryMs?: number;\r\n}\r\n\r\n/**\r\n * Create an HTMX SSE streaming adapter\r\n * Uses Server-Sent Events for progressive updates\r\n * \r\n * @example\r\n * ```typescript\r\n * const adapter = createHTMXStreamAdapter({\r\n * eventName: 'update',\r\n * retryMs: 3000,\r\n * });\r\n * \r\n * const result = await adapter.stream(['<div>Part 1</div>', '<div>Part 2</div>']);\r\n * ```\r\n */\r\nexport function createHTMXStreamAdapter(options?: HTMXAdapterOptions): StreamingAdapter<string[]> {\r\n return {\r\n name: 'htmx',\r\n framework: 'htmx@2+',\r\n runtime: 'universal',\r\n\r\n async stream(htmlChunks, streamOptions = {}) {\r\n const mergedOptions = { ...options, ...streamOptions };\r\n const eventName = mergedOptions.eventName || 'message';\r\n const retryMs = mergedOptions.retryMs || 3000;\r\n\r\n let resolveShell: () => void;\r\n let resolveAll: () => void;\r\n const shellReady = new Promise<void>((r) => { resolveShell = r; });\r\n const allReady = new Promise<void>((r) => { resolveAll = r; });\r\n\r\n const encoder = new TextEncoder();\r\n let chunkIndex = 0;\r\n\r\n const stream = new ReadableStream<Uint8Array>({\r\n start(controller) {\r\n // Send retry configuration\r\n controller.enqueue(encoder.encode(`retry: ${retryMs}\\n\\n`));\r\n resolveShell!();\r\n mergedOptions.onShellReady?.();\r\n },\r\n\r\n async pull(controller) {\r\n if (chunkIndex >= htmlChunks.length) {\r\n resolveAll!();\r\n mergedOptions.onAllReady?.();\r\n controller.close();\r\n return;\r\n }\r\n\r\n const chunk = htmlChunks[chunkIndex++];\r\n const sseData = `event: ${eventName}\\ndata: ${JSON.stringify(chunk)}\\n\\n`;\r\n controller.enqueue(encoder.encode(sseData));\r\n },\r\n });\r\n\r\n return {\r\n stream,\r\n abort: () => { },\r\n shellReady,\r\n allReady,\r\n };\r\n },\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Adapter Factory\r\n// ============================================================================\r\n\r\nexport type FrameworkType = 'react' | 'vue' | 'solid' | 'svelte' | 'htmx';\r\n\r\n/**\r\n * Create a streaming adapter for any supported framework\r\n * Note: For react, vue, solid, svelte you need to pass the required dependencies\r\n */\r\nexport function createStreamAdapter(\r\n framework: FrameworkType,\r\n options?: AdapterOptions & Record<string, unknown>\r\n): StreamingAdapter {\r\n switch (framework) {\r\n case 'react':\r\n return createReactStreamAdapter(options as ReactAdapterOptions);\r\n case 'vue':\r\n return createVueStreamAdapter(options as VueAdapterOptions);\r\n case 'solid':\r\n return createSolidStreamAdapter(options as SolidAdapterOptions);\r\n case 'svelte':\r\n return createSvelteStreamAdapter(options as SvelteAdapterOptions);\r\n case 'htmx':\r\n return createHTMXStreamAdapter(options as HTMXAdapterOptions);\r\n default:\r\n throw new Error(`[Flight] Unknown framework: ${framework}`);\r\n }\r\n}\r\n"]}
@@ -1,4 +1,4 @@
1
- import { analyzeModule, hasUseClientDirective, hasUseServerDirective, detectInlineServerActions } from './chunk-5XHOLZBJ.js';
1
+ import { analyzeModule, hasUseClientDirective, hasUseServerDirective, detectInlineServerActions } from './chunk-PDW5WCMW.js';
2
2
 
3
3
  // src/rsc/plugins/rollup.ts
4
4
  function flightRSCRollup(options = {}) {
@@ -296,5 +296,5 @@ function extractExportNames(code) {
296
296
  var rollup_default = flightRSCRollup;
297
297
 
298
298
  export { flightRSCRollup, rollup_default };
299
- //# sourceMappingURL=chunk-LAKHYTHL.js.map
300
- //# sourceMappingURL=chunk-LAKHYTHL.js.map
299
+ //# sourceMappingURL=chunk-NWMJYTMB.js.map
300
+ //# sourceMappingURL=chunk-NWMJYTMB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/rsc/plugins/rollup.ts"],"names":["exports"],"mappings":"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","file":"chunk-NWMJYTMB.js","sourcesContent":["/**\r\n * @flight-framework/core - Rollup Plugin for RSC\r\n * \r\n * Rollup plugin for Flight Server Components.\r\n * Transforms 'use client' and 'use server' directives at build time.\r\n * \r\n * Philosophy: Zero lock-in - Rollup is optional, user decides bundler.\r\n * \r\n * @module @flight-framework/core/rsc/plugins/rollup\r\n */\r\n\r\nimport {\r\n analyzeModule,\r\n hasUseClientDirective,\r\n hasUseServerDirective,\r\n detectInlineServerActions,\r\n} from '../boundaries.js';\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\n/**\r\n * Rollup Plugin interface (minimal)\r\n * We define our own to avoid requiring rollup as dependency\r\n */\r\nexport interface RollupPlugin {\r\n name: string;\r\n buildStart?: (options: unknown) => void | Promise<void>;\r\n resolveId?: (\r\n source: string,\r\n importer: string | undefined,\r\n options: { isEntry: boolean }\r\n ) => string | null | undefined | { id: string; external?: boolean } | Promise<string | null | undefined | { id: string; external?: boolean }>;\r\n load?: (id: string) => string | null | undefined | { code: string; map?: unknown } | Promise<string | null | undefined | { code: string; map?: unknown }>;\r\n transform?: (\r\n code: string,\r\n id: string\r\n ) => string | null | undefined | { code: string; map?: unknown } | Promise<string | null | undefined | { code: string; map?: unknown }>;\r\n generateBundle?: (\r\n options: unknown,\r\n bundle: Record<string, unknown>\r\n ) => void | Promise<void>;\r\n buildEnd?: (error?: Error) => void | Promise<void>;\r\n}\r\n\r\nexport interface RollupPluginContext {\r\n emitFile: (file: { type: 'asset' | 'chunk'; fileName?: string; source?: string; id?: string }) => string;\r\n warn: (message: string) => void;\r\n error: (message: string) => never;\r\n}\r\n\r\n/**\r\n * Plugin configuration\r\n */\r\nexport interface FlightRollupPluginOptions {\r\n /** Include patterns (regex or function) */\r\n include?: RegExp | ((id: string) => boolean);\r\n\r\n /** Exclude patterns (regex or function) */\r\n exclude?: RegExp | ((id: string) => boolean);\r\n\r\n /** Server actions endpoint */\r\n actionsEndpoint?: string;\r\n\r\n /** Client manifest filename */\r\n clientManifest?: string;\r\n\r\n /** Server manifest filename */\r\n serverManifest?: string;\r\n\r\n /** Is this for SSR build? */\r\n ssr?: boolean;\r\n\r\n /** Dev mode */\r\n dev?: boolean;\r\n}\r\n\r\n/**\r\n * Manifest entry\r\n */\r\nexport interface ManifestEntry {\r\n id: string;\r\n file: string;\r\n exports: string[];\r\n}\r\n\r\n// ============================================================================\r\n// Plugin State\r\n// ============================================================================\r\n\r\ninterface PluginState {\r\n clientModules: Map<string, ManifestEntry>;\r\n serverActions: Map<string, ManifestEntry>;\r\n}\r\n\r\n// ============================================================================\r\n// Plugin Implementation\r\n// ============================================================================\r\n\r\n/**\r\n * Flight RSC Rollup Plugin\r\n * \r\n * @example\r\n * ```typescript\r\n * // rollup.config.js\r\n * import { flightRSCRollup } from '@flight-framework/core/rsc/plugins/rollup';\r\n * \r\n * export default {\r\n * input: 'src/index.tsx',\r\n * output: { dir: 'dist', format: 'esm' },\r\n * plugins: [\r\n * flightRSCRollup({\r\n * ssr: true,\r\n * actionsEndpoint: '/_flight/action',\r\n * }),\r\n * ],\r\n * };\r\n * ```\r\n */\r\nexport function flightRSCRollup(options: FlightRollupPluginOptions = {}): RollupPlugin {\r\n const {\r\n include = /\\.(tsx?|jsx?)$/,\r\n exclude = /node_modules/,\r\n actionsEndpoint = '/_flight/action',\r\n clientManifest = '.flight/client-manifest.json',\r\n serverManifest = '.flight/server-manifest.json',\r\n ssr = false,\r\n dev = false,\r\n } = options;\r\n\r\n const state: PluginState = {\r\n clientModules: new Map(),\r\n serverActions: new Map(),\r\n };\r\n\r\n const shouldInclude = (id: string): boolean => {\r\n if (typeof include === 'function') return include(id);\r\n return include.test(id);\r\n };\r\n\r\n const shouldExclude = (id: string): boolean => {\r\n if (typeof exclude === 'function') return exclude(id);\r\n return exclude.test(id);\r\n };\r\n\r\n return {\r\n name: 'flight-rsc',\r\n\r\n // ================================================================\r\n // buildStart: Reset state\r\n // ================================================================\r\n buildStart() {\r\n state.clientModules.clear();\r\n state.serverActions.clear();\r\n\r\n if (dev) {\r\n console.log(`[Flight RSC Rollup] Build started (SSR: ${ssr})`);\r\n }\r\n },\r\n\r\n // ================================================================\r\n // transform: Analyze and transform modules\r\n // ================================================================\r\n transform(code: string, id: string) {\r\n // Skip non-matching files\r\n if (!shouldInclude(id) || shouldExclude(id)) {\r\n return null;\r\n }\r\n\r\n // Analyze module\r\n const analysis = analyzeModule(code, id);\r\n const moduleId = createModuleId(id);\r\n\r\n // Track client modules\r\n if (analysis.fileDirective === 'client') {\r\n state.clientModules.set(id, {\r\n id: moduleId,\r\n file: id,\r\n exports: analysis.clientComponents,\r\n });\r\n }\r\n\r\n // Track server actions\r\n if (analysis.fileDirective === 'server' || analysis.serverActions.length > 0) {\r\n state.serverActions.set(id, {\r\n id: moduleId,\r\n file: id,\r\n exports: analysis.serverActions.length > 0\r\n ? analysis.serverActions\r\n : extractExportNames(code),\r\n });\r\n }\r\n\r\n // Transform based on build type\r\n if (ssr) {\r\n // SSR build: Transform 'use client' to references\r\n if (hasUseClientDirective(code)) {\r\n return {\r\n code: transformClientForSSR(code, moduleId),\r\n map: null,\r\n };\r\n }\r\n } else {\r\n // Client build: Transform 'use server' to RPC calls\r\n if (hasUseServerDirective(code)) {\r\n return {\r\n code: transformServerForClient(code, moduleId, actionsEndpoint),\r\n map: null,\r\n };\r\n }\r\n\r\n // Transform inline server actions\r\n const inlineActions = detectInlineServerActions(code);\r\n if (inlineActions.length > 0) {\r\n return {\r\n code: transformInlineActions(code, moduleId, inlineActions, actionsEndpoint),\r\n map: null,\r\n };\r\n }\r\n }\r\n\r\n return null;\r\n },\r\n\r\n // ================================================================\r\n // generateBundle: Emit manifests\r\n // ================================================================\r\n generateBundle(this: RollupPluginContext) {\r\n // Emit client manifest\r\n if (state.clientModules.size > 0) {\r\n const manifest = Object.fromEntries(state.clientModules);\r\n this.emitFile({\r\n type: 'asset',\r\n fileName: clientManifest,\r\n source: JSON.stringify(manifest, null, 2),\r\n });\r\n }\r\n\r\n // Emit server manifest\r\n if (state.serverActions.size > 0) {\r\n const manifest = Object.fromEntries(state.serverActions);\r\n this.emitFile({\r\n type: 'asset',\r\n fileName: serverManifest,\r\n source: JSON.stringify(manifest, null, 2),\r\n });\r\n }\r\n\r\n if (dev) {\r\n console.log(`[Flight RSC Rollup] Client modules: ${state.clientModules.size}`);\r\n console.log(`[Flight RSC Rollup] Server actions: ${state.serverActions.size}`);\r\n }\r\n },\r\n\r\n // ================================================================\r\n // buildEnd: Cleanup\r\n // ================================================================\r\n buildEnd(error?: Error) {\r\n if (error && dev) {\r\n console.error('[Flight RSC Rollup] Build failed:', error.message);\r\n }\r\n },\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Transform Functions\r\n// ============================================================================\r\n\r\n/**\r\n * Transform 'use client' module for SSR build\r\n */\r\nfunction transformClientForSSR(code: string, moduleId: string): string {\r\n const exports = extractExportNames(code);\r\n\r\n let transformed = `\r\n// Flight RSC: Client Component Reference (Rollup)\r\n// Original module: ${moduleId}\r\n\r\nconst __flight_module_id = ${JSON.stringify(moduleId)};\r\n\r\n`;\r\n\r\n for (const exportName of exports) {\r\n if (exportName === 'default') {\r\n transformed += `\r\nconst __flight_default = Object.assign(\r\n function() {\r\n throw new Error('Client Component cannot be called on the server. Module: ' + __flight_module_id);\r\n },\r\n {\r\n $$typeof: Symbol.for('flight.client.reference'),\r\n $$id: __flight_module_id + '#default',\r\n $$async: false,\r\n __flight_client: true,\r\n __flight_module: __flight_module_id,\r\n __flight_export: 'default',\r\n }\r\n);\r\nexport default __flight_default;\r\n`;\r\n } else {\r\n transformed += `\r\nexport const ${exportName} = Object.assign(\r\n function() {\r\n throw new Error('Client Component cannot be called on the server. Module: ' + __flight_module_id);\r\n },\r\n {\r\n $$typeof: Symbol.for('flight.client.reference'),\r\n $$id: __flight_module_id + '#${exportName}',\r\n $$async: false,\r\n __flight_client: true,\r\n __flight_module: __flight_module_id,\r\n __flight_export: '${exportName}',\r\n }\r\n);\r\n`;\r\n }\r\n }\r\n\r\n return transformed;\r\n}\r\n\r\n/**\r\n * Transform 'use server' module for client build\r\n */\r\nfunction transformServerForClient(code: string, moduleId: string, endpoint: string): string {\r\n const exports = extractExportNames(code);\r\n\r\n let transformed = `\r\n// Flight RSC: Server Actions RPC Proxies (Rollup)\r\n// Original module: ${moduleId}\r\n\r\nconst __flight_endpoint = ${JSON.stringify(endpoint)};\r\nconst __flight_module_id = ${JSON.stringify(moduleId)};\r\n\r\nasync function __flight_rpc(actionId, args) {\r\n const response = await fetch(__flight_endpoint, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-Flight-Action': actionId,\r\n },\r\n body: JSON.stringify({ actionId, args }),\r\n });\r\n \r\n if (!response.ok) {\r\n const error = await response.json().catch(() => ({ message: 'Server action failed' }));\r\n throw new Error(error.message || 'Server action failed');\r\n }\r\n \r\n return response.json();\r\n}\r\n\r\n`;\r\n\r\n for (const exportName of exports) {\r\n const actionId = `${moduleId}#${exportName}`;\r\n if (exportName === 'default') {\r\n transformed += `\r\nexport default async function(...args) {\r\n return __flight_rpc(${JSON.stringify(actionId)}, args);\r\n}\r\n`;\r\n } else {\r\n transformed += `\r\nexport async function ${exportName}(...args) {\r\n return __flight_rpc(${JSON.stringify(actionId)}, args);\r\n}\r\n`;\r\n }\r\n }\r\n\r\n return transformed;\r\n}\r\n\r\n/**\r\n * Transform inline server actions\r\n */\r\nfunction transformInlineActions(\r\n code: string,\r\n moduleId: string,\r\n actions: string[],\r\n endpoint: string\r\n): string {\r\n let transformed = code;\r\n\r\n // Add RPC helper\r\n const rpcHelper = `\r\n// Flight RSC: Inline Server Action Helpers (Rollup)\r\nconst __flight_inline_endpoint = ${JSON.stringify(endpoint)};\r\nasync function __flight_inline_rpc(actionId, args) {\r\n const response = await fetch(__flight_inline_endpoint, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json', 'X-Flight-Action': actionId },\r\n body: JSON.stringify({ actionId, args }),\r\n });\r\n if (!response.ok) throw new Error('Server action failed');\r\n return response.json();\r\n}\r\n`;\r\n\r\n // Insert after imports\r\n const lastImportMatch = code.match(/^import\\s.+$/gm);\r\n if (lastImportMatch) {\r\n const lastImport = lastImportMatch[lastImportMatch.length - 1] || '';\r\n const insertPos = code.indexOf(lastImport) + lastImport.length;\r\n transformed = code.slice(0, insertPos) + '\\n' + rpcHelper + code.slice(insertPos);\r\n } else {\r\n transformed = rpcHelper + code;\r\n }\r\n\r\n // Transform action functions\r\n for (const actionName of actions) {\r\n const actionId = `${moduleId}#${actionName}`;\r\n\r\n const patterns = [\r\n new RegExp(\r\n `async\\\\s+function\\\\s+${actionName}\\\\s*\\\\([^)]*\\\\)\\\\s*\\\\{[\\\\s\\\\S]*?['\"]use server['\"][\\\\s\\\\S]*?\\\\}`,\r\n 'g'\r\n ),\r\n new RegExp(\r\n `const\\\\s+${actionName}\\\\s*=\\\\s*async\\\\s*\\\\([^)]*\\\\)\\\\s*=>\\\\s*\\\\{[\\\\s\\\\S]*?['\"]use server['\"][\\\\s\\\\S]*?\\\\}`,\r\n 'g'\r\n ),\r\n ];\r\n\r\n for (const pattern of patterns) {\r\n transformed = transformed.replace(\r\n pattern,\r\n `async function ${actionName}(...args) { return __flight_inline_rpc(${JSON.stringify(actionId)}, args); }`\r\n );\r\n }\r\n }\r\n\r\n return transformed;\r\n}\r\n\r\n// ============================================================================\r\n// Helper Functions\r\n// ============================================================================\r\n\r\n/**\r\n * Create module ID from file path\r\n */\r\nfunction createModuleId(filePath: string): string {\r\n let id = filePath.replace(/\\\\/g, '/');\r\n\r\n const prefixes = ['/src/', 'src/', 'packages/', '/packages/'];\r\n for (const prefix of prefixes) {\r\n const idx = id.indexOf(prefix);\r\n if (idx !== -1) {\r\n id = id.slice(idx);\r\n break;\r\n }\r\n }\r\n\r\n if (!id.startsWith('/')) {\r\n id = '/' + id;\r\n }\r\n\r\n return id;\r\n}\r\n\r\n/**\r\n * Extract export names from source code\r\n */\r\nfunction extractExportNames(code: string): string[] {\r\n const exports: string[] = [];\r\n\r\n if (/export\\s+default\\s+/.test(code)) {\r\n exports.push('default');\r\n }\r\n\r\n const namedPattern = /export\\s+(?:async\\s+)?(?:function|const|let|var|class)\\s+(\\w+)/g;\r\n let match;\r\n while ((match = namedPattern.exec(code)) !== null) {\r\n if (match[1] && match[1] !== 'default') {\r\n exports.push(match[1]);\r\n }\r\n }\r\n\r\n const bracketPattern = /export\\s*\\{\\s*([^}]+)\\s*\\}/g;\r\n while ((match = bracketPattern.exec(code)) !== null) {\r\n if (match[1]) {\r\n const names = match[1].split(',').map(n => {\r\n const parts = n.trim().split(/\\s+as\\s+/);\r\n return parts[parts.length - 1]?.trim() || '';\r\n });\r\n exports.push(...names.filter(n => n && n !== 'default'));\r\n }\r\n }\r\n\r\n return [...new Set(exports)];\r\n}\r\n\r\nexport default flightRSCRollup;\r\n"]}
@@ -390,5 +390,5 @@ function compose(...middlewares) {
390
390
  }
391
391
 
392
392
  export { compose, compress, cors, createContextFromRequest, createMiddlewareChain, createResponseFromContext, errorHandler, logger, securityHeaders };
393
- //# sourceMappingURL=chunk-R7MEVVA4.js.map
394
- //# sourceMappingURL=chunk-R7MEVVA4.js.map
393
+ //# sourceMappingURL=chunk-OYF2OAKS.js.map
394
+ //# sourceMappingURL=chunk-OYF2OAKS.js.map