@ecopages/radiant 0.3.0-alpha.8 → 0.3.0-beta.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 (213) hide show
  1. package/dist/README.md +315 -0
  2. package/dist/client/app-bootstrap.d.ts +19 -0
  3. package/dist/client/app-bootstrap.js +3 -0
  4. package/dist/client/app-bootstrap.js.map +10 -0
  5. package/dist/context/decorators/consume-context.js +2 -2
  6. package/dist/context/decorators/consume-context.js.map +4 -4
  7. package/dist/context/decorators/context-selector.js +2 -2
  8. package/dist/context/decorators/context-selector.js.map +8 -7
  9. package/dist/context/decorators/legacy/consume-context.js +2 -2
  10. package/dist/context/decorators/legacy/consume-context.js.map +4 -4
  11. package/dist/context/decorators/legacy/context-selector-field.js +2 -2
  12. package/dist/context/decorators/legacy/context-selector-field.js.map +4 -4
  13. package/dist/context/decorators/legacy/context-selector.js +2 -2
  14. package/dist/context/decorators/legacy/context-selector.js.map +4 -4
  15. package/dist/context/decorators/legacy/provide-context.js +2 -2
  16. package/dist/context/decorators/legacy/provide-context.js.map +4 -4
  17. package/dist/context/decorators/on-context-update.js +2 -2
  18. package/dist/context/decorators/on-context-update.js.map +4 -4
  19. package/dist/context/decorators/provide-context.js +2 -2
  20. package/dist/context/decorators/provide-context.js.map +4 -4
  21. package/dist/context/decorators/standard-legacy-dispatch.d.ts +6 -0
  22. package/dist/context/decorators/standard-legacy-dispatch.js +3 -0
  23. package/dist/context/decorators/standard-legacy-dispatch.js.map +10 -0
  24. package/dist/context/index.js +2 -2
  25. package/dist/context/index.js.map +11 -10
  26. package/dist/controller-registry.js +2 -2
  27. package/dist/controller-registry.js.map +3 -3
  28. package/dist/core/event-subscription-registry.d.ts +16 -0
  29. package/dist/core/event-subscription-registry.js +3 -0
  30. package/dist/core/event-subscription-registry.js.map +10 -0
  31. package/dist/core/host-ssr-registry.d.ts +13 -0
  32. package/dist/core/host-ssr-registry.js +3 -0
  33. package/dist/core/host-ssr-registry.js.map +10 -0
  34. package/dist/core/hydration-capable-host.d.ts +8 -0
  35. package/dist/core/hydration-capable-host.js +3 -0
  36. package/dist/core/hydration-capable-host.js.map +10 -0
  37. package/dist/core/radiant-controller.d.ts +36 -15
  38. package/dist/core/radiant-controller.js +2 -2
  39. package/dist/core/radiant-controller.js.map +13 -6
  40. package/dist/core/{radiant-component-ssr.d.ts → radiant-element-ssr-host.d.ts} +16 -16
  41. package/dist/core/radiant-element-ssr-host.js +3 -0
  42. package/dist/core/radiant-element-ssr-host.js.map +10 -0
  43. package/dist/core/radiant-element-ssr-registry.d.ts +18 -0
  44. package/dist/core/radiant-element-ssr-registry.js +3 -0
  45. package/dist/core/radiant-element-ssr-registry.js.map +10 -0
  46. package/dist/core/radiant-element.d.ts +38 -138
  47. package/dist/core/radiant-element.js +2 -2
  48. package/dist/core/radiant-element.js.map +21 -10
  49. package/dist/core/reactive-host.d.ts +3 -16
  50. package/dist/core/reactive-host.js +2 -2
  51. package/dist/core/reactive-host.js.map +7 -4
  52. package/dist/core/reactive-jsx-value.d.ts +2 -1
  53. package/dist/core/reactive-jsx-value.js.map +2 -2
  54. package/dist/core/reactive-prop-core.d.ts +44 -0
  55. package/dist/core/reactive-prop-core.js +3 -0
  56. package/dist/core/reactive-prop-core.js.map +11 -0
  57. package/dist/core/reactive-prop-metadata.d.ts +1 -1
  58. package/dist/core/reactive-prop-metadata.js +2 -2
  59. package/dist/core/reactive-prop-metadata.js.map +2 -2
  60. package/dist/core/reactive-property-state.d.ts +17 -0
  61. package/dist/core/reactive-property-state.js +3 -0
  62. package/dist/core/reactive-property-state.js.map +12 -0
  63. package/dist/core/reactivity-adapter.d.ts +8 -0
  64. package/dist/core/reactivity-adapter.js +3 -0
  65. package/dist/core/reactivity-adapter.js.map +12 -0
  66. package/dist/core/reactivity-contract.d.ts +39 -0
  67. package/dist/core/reactivity-contract.js +2 -0
  68. package/dist/core/reactivity-contract.js.map +9 -0
  69. package/dist/core/reactivity-runtime.d.ts +18 -0
  70. package/dist/core/reactivity-runtime.js +3 -0
  71. package/dist/core/reactivity-runtime.js.map +11 -0
  72. package/dist/core/reactivity-signals.d.ts +10 -0
  73. package/dist/core/reactivity-signals.js +3 -0
  74. package/dist/core/reactivity-signals.js.map +10 -0
  75. package/dist/core/render-runtime.d.ts +28 -0
  76. package/dist/core/render-runtime.js +3 -0
  77. package/dist/core/render-runtime.js.map +16 -0
  78. package/dist/core/render-scheduler.d.ts +22 -0
  79. package/dist/core/render-scheduler.js +3 -0
  80. package/dist/core/render-scheduler.js.map +10 -0
  81. package/dist/core/slot-projection-runtime.js +2 -2
  82. package/dist/core/slot-projection-runtime.js.map +3 -3
  83. package/dist/decorators/attr.js +2 -2
  84. package/dist/decorators/attr.js.map +6 -5
  85. package/dist/decorators/controller.js +2 -2
  86. package/dist/decorators/controller.js.map +3 -3
  87. package/dist/decorators/event.js +2 -2
  88. package/dist/decorators/event.js.map +3 -3
  89. package/dist/decorators/legacy/attr.js +2 -2
  90. package/dist/decorators/legacy/attr.js.map +6 -5
  91. package/dist/decorators/legacy/event.js +2 -2
  92. package/dist/decorators/legacy/event.js.map +3 -3
  93. package/dist/decorators/legacy/host-readiness.d.ts +8 -0
  94. package/dist/decorators/legacy/host-readiness.js +3 -0
  95. package/dist/decorators/legacy/host-readiness.js.map +11 -0
  96. package/dist/decorators/legacy/instance-initializers.d.ts +16 -0
  97. package/dist/decorators/legacy/instance-initializers.js +2 -2
  98. package/dist/decorators/legacy/instance-initializers.js.map +3 -3
  99. package/dist/decorators/legacy/on-event.js +2 -2
  100. package/dist/decorators/legacy/on-event.js.map +6 -5
  101. package/dist/decorators/legacy/on-updated.d.ts +1 -1
  102. package/dist/decorators/legacy/on-updated.js +2 -2
  103. package/dist/decorators/legacy/on-updated.js.map +4 -4
  104. package/dist/decorators/legacy/query-slot.js +2 -2
  105. package/dist/decorators/legacy/query-slot.js.map +5 -5
  106. package/dist/decorators/legacy/query.js +2 -2
  107. package/dist/decorators/legacy/query.js.map +3 -3
  108. package/dist/decorators/legacy/reactive-field.js +2 -2
  109. package/dist/decorators/legacy/reactive-field.js.map +3 -3
  110. package/dist/decorators/legacy/reactive-prop.d.ts +1 -1
  111. package/dist/decorators/legacy/reactive-prop.js +2 -2
  112. package/dist/decorators/legacy/reactive-prop.js.map +7 -6
  113. package/dist/decorators/legacy/signal.d.ts +1 -1
  114. package/dist/decorators/legacy/signal.js +2 -2
  115. package/dist/decorators/legacy/signal.js.map +6 -5
  116. package/dist/decorators/on-event.js +2 -2
  117. package/dist/decorators/on-event.js.map +6 -5
  118. package/dist/decorators/on-updated.js +2 -2
  119. package/dist/decorators/on-updated.js.map +4 -4
  120. package/dist/decorators/prop.d.ts +1 -1
  121. package/dist/decorators/prop.js +2 -2
  122. package/dist/decorators/prop.js.map +9 -8
  123. package/dist/decorators/query-slot.js +2 -2
  124. package/dist/decorators/query-slot.js.map +6 -6
  125. package/dist/decorators/query.js +2 -2
  126. package/dist/decorators/query.js.map +3 -3
  127. package/dist/decorators/shared/reactive-attr.d.ts +1 -1
  128. package/dist/decorators/shared/reactive-attr.js +2 -2
  129. package/dist/decorators/shared/reactive-attr.js.map +5 -4
  130. package/dist/decorators/signal.js +2 -2
  131. package/dist/decorators/signal.js.map +7 -6
  132. package/dist/decorators/standard/attr.js +2 -2
  133. package/dist/decorators/standard/attr.js.map +5 -4
  134. package/dist/decorators/standard/on-event.js +2 -2
  135. package/dist/decorators/standard/on-event.js.map +5 -4
  136. package/dist/decorators/standard/query-slot.d.ts +0 -1
  137. package/dist/decorators/standard/query-slot.js +2 -2
  138. package/dist/decorators/standard/query-slot.js.map +4 -4
  139. package/dist/decorators/standard/reactive-field.js +2 -2
  140. package/dist/decorators/standard/reactive-field.js.map +3 -3
  141. package/dist/decorators/standard/reactive-prop.d.ts +1 -1
  142. package/dist/decorators/standard/reactive-prop.js +2 -2
  143. package/dist/decorators/standard/reactive-prop.js.map +6 -5
  144. package/dist/decorators/standard/signal.d.ts +1 -1
  145. package/dist/decorators/standard/signal.js +2 -2
  146. package/dist/decorators/standard/signal.js.map +5 -4
  147. package/dist/decorators/state.js +2 -2
  148. package/dist/decorators/state.js.map +4 -4
  149. package/dist/helpers/create-event-listener.js +2 -2
  150. package/dist/helpers/create-event-listener.js.map +5 -4
  151. package/dist/helpers/create-query-slot.d.ts +0 -1
  152. package/dist/helpers/create-query-slot.js +2 -2
  153. package/dist/helpers/create-query-slot.js.map +3 -3
  154. package/dist/helpers/index.js +2 -2
  155. package/dist/helpers/index.js.map +6 -5
  156. package/dist/index.js +2 -2
  157. package/dist/index.js.map +37 -25
  158. package/dist/package.json +209 -0
  159. package/dist/server/host-attribute-serialization.d.ts +46 -0
  160. package/dist/server/host-attribute-serialization.js +3 -0
  161. package/dist/server/host-attribute-serialization.js.map +12 -0
  162. package/dist/server/host-script-composition.d.ts +42 -0
  163. package/dist/server/host-script-composition.js +3 -0
  164. package/dist/server/host-script-composition.js.map +10 -0
  165. package/dist/server/install-light-dom-shim.js +2 -2
  166. package/dist/server/install-light-dom-shim.js.map +3 -3
  167. package/dist/server/internal-radiant-host.d.ts +2 -0
  168. package/dist/server/internal-radiant-host.js +3 -0
  169. package/dist/server/internal-radiant-host.js.map +9 -0
  170. package/dist/server/light-dom-shim.d.ts +9 -0
  171. package/dist/server/light-dom-shim.js +2 -2
  172. package/dist/server/light-dom-shim.js.map +3 -3
  173. package/dist/server/radiant-element-ssr-bridge.d.ts +21 -0
  174. package/dist/server/radiant-element-ssr-bridge.js +3 -0
  175. package/dist/server/radiant-element-ssr-bridge.js.map +24 -0
  176. package/dist/server/radiant-element-ssr-extractor.d.ts +2 -0
  177. package/dist/server/radiant-element-ssr-extractor.js +3 -0
  178. package/dist/server/radiant-element-ssr-extractor.js.map +12 -0
  179. package/dist/server/radiant-element-ssr-service.d.ts +13 -0
  180. package/dist/server/radiant-element-ssr-service.js +3 -0
  181. package/dist/server/radiant-element-ssr-service.js.map +22 -0
  182. package/dist/server/radiant-element-ssr.d.ts +1 -0
  183. package/dist/server/radiant-element-ssr.js +3 -0
  184. package/dist/server/radiant-element-ssr.js.map +24 -0
  185. package/dist/server/render-component.d.ts +3 -9
  186. package/dist/server/render-component.js +2 -2
  187. package/dist/server/render-component.js.map +17 -9
  188. package/dist/server/render-controller.js +2 -2
  189. package/dist/server/render-controller.js.map +19 -11
  190. package/dist/server/render-fragment.d.ts +7 -0
  191. package/dist/server/render-fragment.js +3 -0
  192. package/dist/server/render-fragment.js.map +10 -0
  193. package/dist/server/slot-projection-html.js +2 -2
  194. package/dist/server/slot-projection-html.js.map +3 -3
  195. package/dist/tools/escape-css-identifier.d.ts +1 -0
  196. package/dist/tools/escape-css-identifier.js +3 -0
  197. package/dist/tools/escape-css-identifier.js.map +10 -0
  198. package/dist/tools/index.d.ts +1 -0
  199. package/dist/tools/index.js +2 -2
  200. package/dist/tools/index.js.map +4 -3
  201. package/dist/utils/escape-html-attribute.d.ts +2 -0
  202. package/dist/utils/escape-html-attribute.js +3 -0
  203. package/dist/utils/escape-html-attribute.js.map +10 -0
  204. package/package.json +12 -5
  205. package/dist/core/radiant-component-ssr-registry.d.ts +0 -54
  206. package/dist/core/radiant-component-ssr-registry.js +0 -3
  207. package/dist/core/radiant-component-ssr-registry.js.map +0 -10
  208. package/dist/core/radiant-component-ssr.js +0 -3
  209. package/dist/core/radiant-component-ssr.js.map +0 -14
  210. package/dist/server/radiant-component-ssr-runtime.d.ts +0 -9
  211. package/dist/server/radiant-component-ssr-runtime.js +0 -3
  212. package/dist/server/radiant-component-ssr-runtime.js.map +0 -17
  213. package/size-budget.json +0 -25
@@ -0,0 +1,7 @@
1
+ import type { RenderedComponent, RenderedComponentPayload, RenderedComponentWithPreview } from './render-component';
2
+ /** Returns the current time for deterministic SSR metadata in tests. */
3
+ export declare function createDefaultRenderTimestamp(): Date;
4
+ /** Converts a canonical render result into a flat transport payload. */
5
+ export declare function toRenderedComponentPayload(render: RenderedComponentWithPreview | RenderedComponent): RenderedComponentPayload;
6
+ /** Adds preview fields to a canonical render result. */
7
+ export declare function toRenderedComponentWithPreview(render: RenderedComponent): RenderedComponentWithPreview;
@@ -0,0 +1,3 @@
1
+ var j=((b)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(b,{get:(h,g)=>(typeof require<"u"?require:h)[g]}):b)(function(b){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+b+'" is not supported')});function m(){return new Date}function q(b){if("metadata"in b)return{assets:b.metadata.assets,clientModuleSrc:b.metadata.clientModuleUrl,generatedAt:b.metadata.generatedAt,markup:b.markup,tagName:b.metadata.tagName};let{preview:h,...g}=b;return g}function x(b){return{assets:b.metadata.assets,clientModuleSrc:b.metadata.clientModuleUrl,generatedAt:b.metadata.generatedAt,markup:b.markup,preview:b.preview,tagName:b.metadata.tagName}}export{x as toRenderedComponentWithPreview,q as toRenderedComponentPayload,m as createDefaultRenderTimestamp};
2
+
3
+ //# debugId=1D60F7A89089275364756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/server/render-fragment.ts"],
4
+ "sourcesContent": [
5
+ "import type {\n\tRenderedComponent,\n\tRenderedComponentPayload,\n\tRenderedComponentWithPreview,\n} from './render-component';\n\n/** Returns the current time for deterministic SSR metadata in tests. */\nexport function createDefaultRenderTimestamp(): Date {\n\treturn new Date();\n}\n\n/** Converts a canonical render result into a flat transport payload. */\nexport function toRenderedComponentPayload(\n\trender: RenderedComponentWithPreview | RenderedComponent,\n): RenderedComponentPayload {\n\tif ('metadata' in render) {\n\t\treturn {\n\t\t\tassets: render.metadata.assets,\n\t\t\tclientModuleSrc: render.metadata.clientModuleUrl,\n\t\t\tgeneratedAt: render.metadata.generatedAt,\n\t\t\tmarkup: render.markup,\n\t\t\ttagName: render.metadata.tagName,\n\t\t};\n\t}\n\n\tconst { preview: _preview, ...payload } = render;\n\treturn payload;\n}\n\n/** Adds preview fields to a canonical render result. */\nexport function toRenderedComponentWithPreview(render: RenderedComponent): RenderedComponentWithPreview {\n\treturn {\n\t\tassets: render.metadata.assets,\n\t\tclientModuleSrc: render.metadata.clientModuleUrl,\n\t\tgeneratedAt: render.metadata.generatedAt,\n\t\tmarkup: render.markup,\n\t\tpreview: render.preview,\n\t\ttagName: render.metadata.tagName,\n\t};\n}\n"
6
+ ],
7
+ "mappings": "2PAOO,SAAS,CAA4B,EAAS,CACpD,OAAO,IAAI,KAIL,SAAS,CAA0B,CACzC,EAC2B,CAC3B,GAAI,aAAc,EACjB,MAAO,CACN,OAAQ,EAAO,SAAS,OACxB,gBAAiB,EAAO,SAAS,gBACjC,YAAa,EAAO,SAAS,YAC7B,OAAQ,EAAO,OACf,QAAS,EAAO,SAAS,OAC1B,EAGD,IAAQ,QAAS,KAAa,GAAY,EAC1C,OAAO,EAID,SAAS,CAA8B,CAAC,EAAyD,CACvG,MAAO,CACN,OAAQ,EAAO,SAAS,OACxB,gBAAiB,EAAO,SAAS,gBACjC,YAAa,EAAO,SAAS,YAC7B,OAAQ,EAAO,OACf,QAAS,EAAO,QAChB,QAAS,EAAO,SAAS,OAC1B",
8
+ "debugId": "1D60F7A89089275364756E2164756E21",
9
+ "names": []
10
+ }
@@ -1,3 +1,3 @@
1
- var o=((i)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(i,{get:(s,f)=>(typeof require<"u"?require:s)[f]}):i)(function(i){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+i+'" is not supported')});function P(i){return i.replace(/&/g,"\\u0026").replace(/</g,"\\u003c").replace(/>/g,"\\u003e").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}var q="data-hydration",B="data-hydration-type",z="data-hydration-key";function r(i){let s=i.hydrationKey?` ${z}="${p(i.hydrationKey)}"`:"";return`<script type="application/json" ${q} ${B}="${i.type}"${s}>${i.serializedValue}</script>`}function l(i){return P(i)}function a(i,s){let f=i.textContent;if(!f)return s;try{return JSON.parse(f)}catch{if(typeof console<"u")console.warn(`[@ecopages/radiant] Failed to parse hydration payload from <script ${q}>:`,f.slice(0,120));return s}}function e(i,s,f){let w=i.children;if(!w||w.length===0){let x=i.childNodes;if(!x||x.length===0)return null;for(let W=0;W<x.length;W+=1){let Q=x[W];if(Q.nodeType!==1)continue;let $=Q;if(H($,s,f))return $}return null}for(let x=0;x<w.length;x+=1)if(H(w[x],s,f))return w[x];return null}function H(i,s,f){if(i.tagName!=="SCRIPT"||!i.hasAttribute(q)||i.getAttribute(B)!==s)return!1;if(f!==void 0)return i.getAttribute(z)===f;return!i.hasAttribute(z)}function p(i){return i.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}import{createMarkupNodeLike as A,isKeyedJsxValue as O,isSlotJsxValue as E}from"@ecopages/jsx";var Z="",k="data-radiant-slot-projection";function wi(i){let s=new Map;for(let f of Array.from(i.childNodes)){if(R(f))continue;_(s,I(f),f)}return s}function xi(i){let s;try{s=JSON.parse(i)}catch{if(typeof console<"u")console.warn("[@ecopages/radiant] Failed to parse slot projection payload:",i.slice(0,120));return new Map}let f=new Map;for(let[w,x]of Object.entries(s)){if(!Array.isArray(x)||x.length===0)continue;f.set(g(w),x.map((W)=>A(W)))}return f}function Wi(i){let s=Array.from(i.childNodes).filter((f)=>U(f)).map((f)=>G(f)??"").filter((f)=>f!=="");return s.length>0?s.join(""):void 0}function Qi(i){let s={};for(let[f,w]of i.entries()){let x=w.map((W)=>G(W)).filter((W)=>W!==void 0&&W!=="");if(x.length>0)s[f]=x}return Object.keys(s).length>0?JSON.stringify(s):void 0}function $i(i,s){let f=!1,w=(W)=>{if(E(W))return f=!0,N(W,s,w);if(O(W))return C(W,w(W.value));if(j(W))return{_$rType$:1,rootLocalName:W.rootLocalName,strings:W.strings,values:W.values.map((Q)=>w(Q))};if(D(W))return Array.from(W,(Q)=>w(Q));return W},x=w(i);return{containsSlots:f,value:x}}function qi(i){for(let s of Array.from(i.childNodes)){if(!M(s))continue;let f=s.textContent??void 0;return s.parentNode?.removeChild(s),f}return}function _(i,s,f){let w=i.get(s);if(w){w.push(f);return}i.set(s,[f])}function C(i,s){return{...i,value:s}}function I(i){if(i instanceof Element)return g(i.getAttribute("slot"));return Z}function D(i){return typeof i!=="string"&&typeof i==="object"&&i!==null&&Symbol.iterator in i}function M(i){return i instanceof HTMLScriptElement&&i.hasAttribute(k)}function U(i){return i instanceof HTMLScriptElement&&i.hasAttribute(q)}function R(i){return M(i)||U(i)}function j(i){return typeof i==="object"&&i!==null&&i._$rType$===1&&Array.isArray(i.strings)&&Array.isArray(i.values)}function g(i){return i??Z}function G(i){if(i===void 0||i===null||i===!1||i===!0)return;if(typeof Node<"u"&&i instanceof Node){if(i.nodeType===Node.TEXT_NODE)return i.textContent??"";return i.outerHTML??i.textContent??void 0}if(O(i))return G(i.value);if(typeof i==="string"||typeof i==="number"||typeof i==="bigint")return String(i);if(typeof i==="object"&&i!==null&&"outerHTML"in i)return typeof i.outerHTML==="string"?i.outerHTML:i.textContent??void 0;if(D(i))return Array.from(i,(s)=>G(s)??"").join("");return}function N(i,s,f){let w=s.get(g(i.name));if(w&&w.length>0)return w.length===1?w[0]:w;if(i.fallback===void 0)return"";return f(i.fallback)}var X=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function J(i){let s=[],f=0;while(f<i.length){let w=f;if(i.startsWith("<!--",f)){let Q=i.indexOf("-->",f+4);f=Q===-1?i.length:Q+3,s.push(i.slice(w,f));continue}if(i[f]!=="<"){let Q=i.indexOf("<",f);f=Q===-1?i.length:Q,s.push(i.slice(w,f));continue}let x=L(i,f);if(!x){s.push(i.slice(w));break}if(x.type!=="open"||x.selfClosing||X.has(x.tagName)){f=x.end,s.push(i.slice(w,f));continue}f=x.end;let W=1;while(f<i.length&&W>0){let Q=i.indexOf("<",f);if(Q===-1){f=i.length;break}let $=L(i,Q);if(!$){f=i.length;break}if(f=$.end,$.type==="comment"||$.type==="declaration")continue;if($.type==="open"&&!$.selfClosing&&!X.has($.tagName)){W+=1;continue}if($.type==="close")W-=1}s.push(i.slice(w,f))}return s.filter((w)=>w!=="")}function y(i,s){let f;for(let w=s+1;w<i.length;w+=1){let x=i[w];if(f){if(x===f)f=void 0;continue}if(x==='"'||x==="'"){f=x;continue}if(x===">")return w+1}return i.length}function V(i){let s={},f=/([:^@A-Za-z0-9_.-]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>/]+)))?/g;for(let w of i.matchAll(f)){let[,x,W,Q,$]=w;if(!x)continue;s[x]=W??Q??$??""}return s}function L(i,s){if(i.startsWith("<!--",s)){let F=i.indexOf("-->",s+4);return{end:F===-1?i.length:F+3,type:"comment"}}let f=y(i,s),w=i.slice(s+1,f-1).trim();if(w==="")return;if(w.startsWith("!")||w.startsWith("?"))return{end:f,type:"declaration"};if(w.startsWith("/"))return{end:f,type:"close"};let x=/\/\s*$/.test(w),W=x?w.replace(/\/\s*$/,"").trim():w,Q=W.split(/[\s/>]/,1)[0]?.toLowerCase()??"",$=Q.length,c=W.slice($).trim(),S=x||X.has(Q)?"":u(i,s,f,Q);return{attributes:V(c),end:f,innerHtml:S,selfClosing:x,tagName:Q,type:"open"}}function u(i,s,f,w){let x=f,W=1;while(x<i.length&&W>0){let Q=i.indexOf("<",x);if(Q===-1)return i.slice(f);let $=L(i,Q);if(!$)return i.slice(f);if($.type==="open"&&$.tagName===w&&!$.selfClosing&&!X.has(w))W+=1;if($.type==="close"){if(i.slice(Q+2,$.end-1).trim().toLowerCase()===w){if(W-=1,W===0)return i.slice(f,Q)}}x=$.end}return i.slice(f)}import{createMarkupNodeLike as v}from"@ecopages/jsx";function Li(i){let s=new Map;for(let f of J(i)){if(b(f))continue;T(s,h(f),v(f))}return s}function Ji(i){let s=J(i).filter((f)=>Y(f));return s.length>0?s.join(""):void 0}function T(i,s,f){let w=i.get(s);if(w){w.push(f);return}i.set(s,[f])}function h(i){let s=/^<([A-Za-z][^\s/>]*)([^>]*)>/s.exec(i);if(!s)return Z;let f=s[2]??"",w=/\sslot\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s>]+))/i.exec(f);return w?.[1]??w?.[2]??w?.[3]??Z}function b(i){return m(i)||Y(i)}function m(i){let s=/^<script\b([^>]*)>/i.exec(i);if(!s)return!1;return K(s[1]??"",k)}function Y(i){let s=/^<script\b([^>]*)>/i.exec(i);if(!s)return!1;return K(s[1]??"",q)}function K(i,s){return new RegExp(`(?:^|\\s)${s}(?:\\s*=\\s*(?:"[^"]*"|'[^']*'|[^\\s>]+))?`,"i").test(i)}export{Li as parseProjectedSlotRenderablesFromHtml,Ji as collectAuthoredHydrationScriptMarkupFromHtml};
1
+ var o=((i)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(i,{get:(s,f)=>(typeof require<"u"?require:s)[f]}):i)(function(i){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+i+'" is not supported')});function H(i){return i.replace(/&/g,"\\u0026").replace(/</g,"\\u003c").replace(/>/g,"\\u003e").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}var q="data-hydration",B="data-hydration-type",z="data-hydration-key";function r(i){let s=i.hydrationKey?` ${z}="${p(i.hydrationKey)}"`:"";return`<script type="application/json" ${q} ${B}="${i.type}"${s}>${i.serializedValue}</script>`}function l(i){return H(i)}function a(i,s){let f=i.textContent;if(!f)return s;try{return JSON.parse(f)}catch{if(typeof console<"u")console.warn(`[@ecopages/radiant] Failed to parse hydration payload from <script ${q}>:`,f.slice(0,120));return s}}function e(i,s,f){let w=i.children;if(!w||w.length===0){let x=i.childNodes;if(!x||x.length===0)return null;for(let W=0;W<x.length;W+=1){let Q=x[W];if(Q.nodeType!==1)continue;let $=Q;if(c($,s,f))return $}return null}for(let x=0;x<w.length;x+=1)if(c(w[x],s,f))return w[x];return null}function c(i,s,f){if(i.tagName!=="SCRIPT"||!i.hasAttribute(q)||i.getAttribute(B)!==s)return!1;if(f!==void 0)return i.getAttribute(z)===f;return!i.hasAttribute(z)}function p(i){return i.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}import{createMarkupNodeLike as A,isKeyedJsxValue as O,isSlotJsxValue as E}from"@ecopages/jsx";var Z="",k="data-radiant-slot-projection";function wi(i){let s=new Map;for(let f of Array.from(i.childNodes)){if(R(f))continue;_(s,I(f),f)}return s}function xi(i){let s;try{s=JSON.parse(i)}catch{if(typeof console<"u")console.warn("[@ecopages/radiant] Failed to parse slot projection payload:",i.slice(0,120));return new Map}let f=new Map;for(let[w,x]of Object.entries(s)){if(!Array.isArray(x)||x.length===0)continue;f.set(g(w),x.map((W)=>A(W)))}return f}function Wi(i){let s=Array.from(i.childNodes).filter((f)=>U(f)).map((f)=>G(f)??"").filter((f)=>f!=="");return s.length>0?s.join(""):void 0}function Qi(i){let s={};for(let[f,w]of i.entries()){let x=w.map((W)=>G(W)).filter((W)=>W!==void 0&&W!=="");if(x.length>0)s[f]=x}return Object.keys(s).length>0?JSON.stringify(s):void 0}function $i(i,s){let f=!1,w=(W)=>{if(E(W))return f=!0,N(W,s,w);if(O(W))return C(W,w(W.value));if(j(W))return{_$rType$:1,rootLocalName:W.rootLocalName,ssrIntrinsicProps:W.ssrIntrinsicProps,strings:W.strings,values:W.values.map((Q)=>w(Q))};if(D(W))return Array.from(W,(Q)=>w(Q));return W},x=w(i);return{containsSlots:f,value:x}}function qi(i){for(let s of Array.from(i.childNodes)){if(!M(s))continue;let f=s.textContent??void 0;return s.parentNode?.removeChild(s),f}return}function _(i,s,f){let w=i.get(s);if(w){w.push(f);return}i.set(s,[f])}function C(i,s){return{...i,value:s}}function I(i){if(i instanceof Element)return g(i.getAttribute("slot"));return Z}function D(i){return typeof i!=="string"&&typeof i==="object"&&i!==null&&Symbol.iterator in i}function M(i){return i instanceof HTMLScriptElement&&i.hasAttribute(k)}function U(i){return i instanceof HTMLScriptElement&&i.hasAttribute(q)}function R(i){return M(i)||U(i)}function j(i){return typeof i==="object"&&i!==null&&i._$rType$===1&&Array.isArray(i.strings)&&Array.isArray(i.values)}function g(i){return i??Z}function G(i){if(i===void 0||i===null||i===!1||i===!0)return;if(typeof Node<"u"&&i instanceof Node){if(i.nodeType===Node.TEXT_NODE)return i.textContent??"";return i.outerHTML??i.textContent??void 0}if(O(i))return G(i.value);if(typeof i==="string"||typeof i==="number"||typeof i==="bigint")return String(i);if(typeof i==="object"&&i!==null&&"outerHTML"in i)return typeof i.outerHTML==="string"?i.outerHTML:i.textContent??void 0;if(D(i))return Array.from(i,(s)=>G(s)??"").join("");return}function N(i,s,f){let w=s.get(g(i.name));if(w&&w.length>0)return w.length===1?w[0]:w;if(i.fallback===void 0)return"";return f(i.fallback)}var X=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function J(i){let s=[],f=0;while(f<i.length){let w=f;if(i.startsWith("<!--",f)){let Q=i.indexOf("-->",f+4);f=Q===-1?i.length:Q+3,s.push(i.slice(w,f));continue}if(i[f]!=="<"){let Q=i.indexOf("<",f);f=Q===-1?i.length:Q,s.push(i.slice(w,f));continue}let x=L(i,f);if(!x){s.push(i.slice(w));break}if(x.type!=="open"||x.selfClosing||X.has(x.tagName)){f=x.end,s.push(i.slice(w,f));continue}f=x.end;let W=1;while(f<i.length&&W>0){let Q=i.indexOf("<",f);if(Q===-1){f=i.length;break}let $=L(i,Q);if(!$){f=i.length;break}if(f=$.end,$.type==="comment"||$.type==="declaration")continue;if($.type==="open"&&!$.selfClosing&&!X.has($.tagName)){W+=1;continue}if($.type==="close")W-=1}s.push(i.slice(w,f))}return s.filter((w)=>w!=="")}function y(i,s){let f;for(let w=s+1;w<i.length;w+=1){let x=i[w];if(f){if(x===f)f=void 0;continue}if(x==='"'||x==="'"){f=x;continue}if(x===">")return w+1}return i.length}function v(i){let s={},f=/([:^@A-Za-z0-9_.-]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>/]+)))?/g;for(let w of i.matchAll(f)){let[,x,W,Q,$]=w;if(!x)continue;s[x]=W??Q??$??""}return s}function L(i,s){if(i.startsWith("<!--",s)){let P=i.indexOf("-->",s+4);return{end:P===-1?i.length:P+3,type:"comment"}}let f=y(i,s),w=i.slice(s+1,f-1).trim();if(w==="")return;if(w.startsWith("!")||w.startsWith("?"))return{end:f,type:"declaration"};if(w.startsWith("/"))return{end:f,type:"close"};let x=/\/\s*$/.test(w),W=x?w.replace(/\/\s*$/,"").trim():w,Q=W.split(/[\s/>]/,1)[0]?.toLowerCase()??"",$=Q.length,F=W.slice($).trim(),S=x||X.has(Q)?"":T(i,s,f,Q);return{attributes:v(F),end:f,innerHtml:S,selfClosing:x,tagName:Q,type:"open"}}function T(i,s,f,w){let x=f,W=1;while(x<i.length&&W>0){let Q=i.indexOf("<",x);if(Q===-1)return i.slice(f);let $=L(i,Q);if(!$)return i.slice(f);if($.type==="open"&&$.tagName===w&&!$.selfClosing&&!X.has(w))W+=1;if($.type==="close"){if(i.slice(Q+2,$.end-1).trim().toLowerCase()===w){if(W-=1,W===0)return i.slice(f,Q)}}x=$.end}return i.slice(f)}import{createMarkupNodeLike as V}from"@ecopages/jsx";function Li(i){let s=new Map;for(let f of J(i)){if(b(f))continue;u(s,h(f),V(f))}return s}function Ji(i){let s=J(i).filter((f)=>Y(f));return s.length>0?s.join(""):void 0}function u(i,s,f){let w=i.get(s);if(w){w.push(f);return}i.set(s,[f])}function h(i){let s=/^<([A-Za-z][^\s/>]*)([^>]*)>/s.exec(i);if(!s)return Z;let f=s[2]??"",w=/\sslot\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s>]+))/i.exec(f);return w?.[1]??w?.[2]??w?.[3]??Z}function b(i){return m(i)||Y(i)}function m(i){let s=/^<script\b([^>]*)>/i.exec(i);if(!s)return!1;return K(s[1]??"",k)}function Y(i){let s=/^<script\b([^>]*)>/i.exec(i);if(!s)return!1;return K(s[1]??"",q)}function K(i,s){return new RegExp(`(?:^|\\s)${s}(?:\\s*=\\s*(?:"[^"]*"|'[^']*'|[^\\s>]+))?`,"i").test(i)}export{Li as parseProjectedSlotRenderablesFromHtml,Ji as collectAuthoredHydrationScriptMarkupFromHtml};
2
2
 
3
- //# debugId=611384E09FC6415064756E2164756E21
3
+ //# debugId=F9345781EBD4DFC564756E2164756E21
@@ -4,11 +4,11 @@
4
4
  "sourcesContent": [
5
5
  "/**\n * Escapes serialized JSON so it remains safe when embedded inside an HTML\n * `<script>` tag.\n */\nexport function escapeScriptJson(value: string): string {\n\treturn value\n\t\t.replace(/&/g, '\\\\u0026')\n\t\t.replace(/</g, '\\\\u003c')\n\t\t.replace(/>/g, '\\\\u003e')\n\t\t.replace(/\\u2028/g, '\\\\u2028')\n\t\t.replace(/\\u2029/g, '\\\\u2029');\n}\n",
6
6
  "import { escapeScriptJson } from '../tools/escape-script-json';\n\n/** Attribute marker used to identify hydration payloads inside a host. */\nexport const HYDRATION_ATTRIBUTE = 'data-hydration';\n/** Discriminator that scopes a hydration payload to a specific feature. */\nexport const HYDRATION_TYPE_ATTRIBUTE = 'data-hydration-type';\n/** Optional key that scopes a hydration payload to a specific decorated field. */\nexport const HYDRATION_KEY_ATTRIBUTE = 'data-hydration-key';\n\nexport type HydrationPayloadType = 'signal' | 'context';\n\ntype HydrationScriptHost = {\n\tchildren?: ArrayLike<Element> | undefined;\n\tchildNodes?: ArrayLike<{ nodeType: number }> | undefined;\n};\n\n/** Creates a `<script type=\"application/json\">` tag for a hydration payload. */\nexport function createHydrationScriptTag(options: {\n\ttype: HydrationPayloadType;\n\thydrationKey?: string;\n\tserializedValue: string;\n}): string {\n\tconst keyAttribute = options.hydrationKey\n\t\t? ` ${HYDRATION_KEY_ATTRIBUTE}=\"${escapeHtmlAttribute(options.hydrationKey)}\"`\n\t\t: '';\n\n\treturn `<script type=\"application/json\" ${HYDRATION_ATTRIBUTE} ${HYDRATION_TYPE_ATTRIBUTE}=\"${options.type}\"${keyAttribute}>${options.serializedValue}</script>`;\n}\n\n/** Escapes serialized JSON so it remains safe inside an HTML script tag. */\nexport function escapeHydrationJson(value: string): string {\n\treturn escapeScriptJson(value);\n}\n\n/** Parses JSON from a hydration script element, returning the fallback on failure. */\nexport function parseHydrationPayload<T>(element: Element, fallback: T): T {\n\tconst textContent = element.textContent;\n\n\tif (!textContent) {\n\t\treturn fallback;\n\t}\n\n\ttry {\n\t\treturn JSON.parse(textContent) as T;\n\t} catch {\n\t\tif (typeof console !== 'undefined') {\n\t\t\tconsole.warn(\n\t\t\t\t`[@ecopages/radiant] Failed to parse hydration payload from <script ${HYDRATION_ATTRIBUTE}>:`,\n\t\t\t\ttextContent.slice(0, 120),\n\t\t\t);\n\t\t}\n\t\treturn fallback;\n\t}\n}\n\n/**\n * Finds a hydration script element inside a host by type and optional key.\n *\n * When a key is provided, looks for an exact `data-hydration-key` match.\n * Otherwise, returns the first unkeyed script matching the type.\n */\nexport function findHydrationScript(\n\thost: HydrationScriptHost,\n\ttype: HydrationPayloadType,\n\thydrationKey?: string,\n): Element | null {\n\tconst children = host.children;\n\n\tif (!children || children.length === 0) {\n\t\tconst childNodes = (host as Partial<{ childNodes: ArrayLike<{ nodeType: number }> }>).childNodes;\n\n\t\tif (!childNodes || childNodes.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tfor (let i = 0; i < childNodes.length; i += 1) {\n\t\t\tconst node = childNodes[i]!;\n\n\t\t\tif (node.nodeType !== 1) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst element = node as unknown as Element;\n\n\t\t\tif (matchesHydrationScript(element, type, hydrationKey)) {\n\t\t\t\treturn element;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfor (let i = 0; i < children.length; i += 1) {\n\t\tif (matchesHydrationScript(children[i]!, type, hydrationKey)) {\n\t\t\treturn children[i]!;\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction matchesHydrationScript(element: Element, type: HydrationPayloadType, hydrationKey?: string): boolean {\n\tif (\n\t\telement.tagName !== 'SCRIPT' ||\n\t\t!element.hasAttribute(HYDRATION_ATTRIBUTE) ||\n\t\telement.getAttribute(HYDRATION_TYPE_ATTRIBUTE) !== type\n\t) {\n\t\treturn false;\n\t}\n\n\tif (hydrationKey !== undefined) {\n\t\treturn element.getAttribute(HYDRATION_KEY_ATTRIBUTE) === hydrationKey;\n\t}\n\n\treturn !element.hasAttribute(HYDRATION_KEY_ATTRIBUTE);\n}\n\nfunction escapeHtmlAttribute(value: string): string {\n\treturn value.replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n",
7
- "import {\n\tcreateMarkupNodeLike,\n\tisKeyedJsxValue,\n\tisSlotJsxValue,\n\ttype JsxRenderable,\n\ttype KeyedJsxValue,\n\ttype SlotJsxValue,\n\ttype TemplateResultLike,\n} from '@ecopages/jsx';\n\nimport { HYDRATION_ATTRIBUTE } from './hydration-codec';\n\nexport const DEFAULT_SLOT_NAME = '';\nexport const SLOT_PROJECTION_SCRIPT_ATTRIBUTE = 'data-radiant-slot-projection';\n\ntype ResolvedSlotProjection = {\n\tcontainsSlots: boolean;\n\tvalue: JsxRenderable;\n};\n\nexport function captureProjectedSlotRenderables(host: HTMLElement): Map<string, JsxRenderable[]> {\n\tconst projectedContent = new Map<string, JsxRenderable[]>();\n\n\tfor (const node of Array.from(host.childNodes)) {\n\t\tif (isIgnoredProjectedNode(node)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tappendProjectedRenderable(projectedContent, getNodeSlotName(node), node);\n\t}\n\n\treturn projectedContent;\n}\n\nexport function deserializeProjectedSlotRenderables(payload: string): Map<string, JsxRenderable[]> {\n\tlet parsedPayload: Record<string, string[]>;\n\n\ttry {\n\t\tparsedPayload = JSON.parse(payload) as Record<string, string[]>;\n\t} catch {\n\t\tif (typeof console !== 'undefined') {\n\t\t\tconsole.warn('[@ecopages/radiant] Failed to parse slot projection payload:', payload.slice(0, 120));\n\t\t}\n\t\treturn new Map();\n\t}\n\n\tconst projectedContent = new Map<string, JsxRenderable[]>();\n\n\tfor (const [slotName, fragments] of Object.entries(parsedPayload)) {\n\t\tif (!Array.isArray(fragments) || fragments.length === 0) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tprojectedContent.set(\n\t\t\tnormalizeSlotName(slotName),\n\t\t\tfragments.map((fragment) => createMarkupNodeLike(fragment)),\n\t\t);\n\t}\n\n\treturn projectedContent;\n}\n\nexport function collectAuthoredHydrationScriptMarkup(host: HTMLElement): string | undefined {\n\tconst fragments = Array.from(host.childNodes)\n\t\t.filter((node): node is HTMLScriptElement => isHydrationScriptNode(node))\n\t\t.map((node) => renderableToHtmlFragment(node) ?? '')\n\t\t.filter((fragment) => fragment !== '');\n\n\treturn fragments.length > 0 ? fragments.join('') : undefined;\n}\n\nexport function serializeProjectedSlotRenderables(\n\tprojectedContent: ReadonlyMap<string, readonly JsxRenderable[]>,\n): string | undefined {\n\tconst payload: Record<string, string[]> = {};\n\n\tfor (const [slotName, renderables] of projectedContent.entries()) {\n\t\tconst fragments = renderables\n\t\t\t.map((renderable) => renderableToHtmlFragment(renderable))\n\t\t\t.filter((fragment): fragment is string => fragment !== undefined && fragment !== '');\n\n\t\tif (fragments.length > 0) {\n\t\t\tpayload[slotName] = fragments;\n\t\t}\n\t}\n\n\treturn Object.keys(payload).length > 0 ? JSON.stringify(payload) : undefined;\n}\n\nexport function resolveSlotProjection(\n\tvalue: JsxRenderable,\n\tprojectedContent: ReadonlyMap<string, readonly JsxRenderable[]>,\n): ResolvedSlotProjection {\n\tlet containsSlots = false;\n\n\tconst resolveValue = (currentValue: JsxRenderable): JsxRenderable => {\n\t\tif (isSlotJsxValue(currentValue)) {\n\t\t\tcontainsSlots = true;\n\t\t\treturn resolveSlotValue(currentValue, projectedContent, resolveValue);\n\t\t}\n\n\t\tif (isKeyedJsxValue(currentValue)) {\n\t\t\treturn cloneKeyedJsxValue(currentValue, resolveValue(currentValue.value));\n\t\t}\n\n\t\tif (isTemplateResultLike(currentValue)) {\n\t\t\treturn {\n\t\t\t\t_$rType$: 1,\n\t\t\t\trootLocalName: currentValue.rootLocalName,\n\t\t\t\tstrings: currentValue.strings,\n\t\t\t\tvalues: currentValue.values.map((entry) => resolveValue(entry as JsxRenderable)),\n\t\t\t} satisfies TemplateResultLike;\n\t\t}\n\n\t\tif (isIterableRenderable(currentValue)) {\n\t\t\treturn Array.from(currentValue, (entry) => resolveValue(entry as JsxRenderable));\n\t\t}\n\n\t\treturn currentValue;\n\t};\n\n\tconst resolvedValue = resolveValue(value);\n\n\treturn {\n\t\tcontainsSlots,\n\t\tvalue: resolvedValue,\n\t};\n}\n\nexport function takeSlotProjectionScriptPayload(host: HTMLElement): string | undefined {\n\tfor (const node of Array.from(host.childNodes)) {\n\t\tif (!isSlotProjectionScriptNode(node)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst payload = node.textContent ?? undefined;\n\t\tnode.parentNode?.removeChild(node);\n\t\treturn payload;\n\t}\n\n\treturn undefined;\n}\n\nfunction appendProjectedRenderable(\n\tprojectedContent: Map<string, JsxRenderable[]>,\n\tslotName: string,\n\trenderable: JsxRenderable,\n): void {\n\tconst existingRenderables = projectedContent.get(slotName);\n\n\tif (existingRenderables) {\n\t\texistingRenderables.push(renderable);\n\t\treturn;\n\t}\n\n\tprojectedContent.set(slotName, [renderable]);\n}\n\nfunction cloneKeyedJsxValue(value: KeyedJsxValue, nextValue: JsxRenderable): KeyedJsxValue {\n\treturn {\n\t\t...value,\n\t\tvalue: nextValue,\n\t};\n}\n\nfunction getNodeSlotName(node: Node): string {\n\tif (node instanceof Element) {\n\t\treturn normalizeSlotName(node.getAttribute('slot'));\n\t}\n\n\treturn DEFAULT_SLOT_NAME;\n}\n\nfunction isIterableRenderable(value: JsxRenderable): value is Iterable<JsxRenderable> {\n\treturn typeof value !== 'string' && typeof value === 'object' && value !== null && Symbol.iterator in value;\n}\n\nfunction isSlotProjectionScriptNode(node: Node): node is HTMLScriptElement {\n\treturn node instanceof HTMLScriptElement && node.hasAttribute(SLOT_PROJECTION_SCRIPT_ATTRIBUTE);\n}\n\nfunction isHydrationScriptNode(node: Node): node is HTMLScriptElement {\n\treturn node instanceof HTMLScriptElement && node.hasAttribute(HYDRATION_ATTRIBUTE);\n}\n\nfunction isIgnoredProjectedNode(node: Node): boolean {\n\treturn isSlotProjectionScriptNode(node) || isHydrationScriptNode(node);\n}\n\nfunction isTemplateResultLike(value: JsxRenderable): value is TemplateResultLike {\n\treturn (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\t(value as Partial<TemplateResultLike>)['_$rType$'] === 1 &&\n\t\tArray.isArray((value as Partial<TemplateResultLike>).strings) &&\n\t\tArray.isArray((value as Partial<TemplateResultLike>).values)\n\t);\n}\n\nfunction normalizeSlotName(name: string | undefined | null): string {\n\treturn name ?? DEFAULT_SLOT_NAME;\n}\n\nfunction renderableToHtmlFragment(renderable: JsxRenderable): string | undefined {\n\tif (renderable === undefined || renderable === null || renderable === false || renderable === true) {\n\t\treturn undefined;\n\t}\n\n\tif (typeof Node !== 'undefined' && renderable instanceof Node) {\n\t\tif (renderable.nodeType === Node.TEXT_NODE) {\n\t\t\treturn renderable.textContent ?? '';\n\t\t}\n\n\t\treturn (renderable as Element).outerHTML ?? renderable.textContent ?? undefined;\n\t}\n\n\tif (isKeyedJsxValue(renderable)) {\n\t\treturn renderableToHtmlFragment(renderable.value);\n\t}\n\n\tif (typeof renderable === 'string' || typeof renderable === 'number' || typeof renderable === 'bigint') {\n\t\treturn String(renderable);\n\t}\n\n\tif (typeof renderable === 'object' && renderable !== null && 'outerHTML' in renderable) {\n\t\treturn typeof renderable.outerHTML === 'string' ? renderable.outerHTML : (renderable.textContent ?? undefined);\n\t}\n\n\tif (isIterableRenderable(renderable)) {\n\t\treturn Array.from(renderable, (entry) => renderableToHtmlFragment(entry as JsxRenderable) ?? '').join('');\n\t}\n\n\treturn undefined;\n}\n\nfunction resolveSlotValue(\n\tvalue: SlotJsxValue,\n\tprojectedContent: ReadonlyMap<string, readonly JsxRenderable[]>,\n\tresolveValue: (value: JsxRenderable) => JsxRenderable,\n): JsxRenderable {\n\tconst assignedContent = projectedContent.get(normalizeSlotName(value.name));\n\n\tif (assignedContent && assignedContent.length > 0) {\n\t\treturn assignedContent.length === 1 ? assignedContent[0] : (assignedContent as JsxRenderable);\n\t}\n\n\tif (value.fallback === undefined) {\n\t\treturn '';\n\t}\n\n\treturn resolveValue(value.fallback);\n}\n",
7
+ "import {\n\tcreateMarkupNodeLike,\n\tisKeyedJsxValue,\n\tisSlotJsxValue,\n\ttype JsxRenderable,\n\ttype KeyedJsxValue,\n\ttype SlotJsxValue,\n\ttype TemplateResultLike,\n} from '@ecopages/jsx';\n\nimport { HYDRATION_ATTRIBUTE } from './hydration-codec';\n\nexport const DEFAULT_SLOT_NAME = '';\nexport const SLOT_PROJECTION_SCRIPT_ATTRIBUTE = 'data-radiant-slot-projection';\n\ntype ResolvedSlotProjection = {\n\tcontainsSlots: boolean;\n\tvalue: JsxRenderable;\n};\n\nexport function captureProjectedSlotRenderables(host: HTMLElement): Map<string, JsxRenderable[]> {\n\tconst projectedContent = new Map<string, JsxRenderable[]>();\n\n\tfor (const node of Array.from(host.childNodes)) {\n\t\tif (isIgnoredProjectedNode(node)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tappendProjectedRenderable(projectedContent, getNodeSlotName(node), node);\n\t}\n\n\treturn projectedContent;\n}\n\nexport function deserializeProjectedSlotRenderables(payload: string): Map<string, JsxRenderable[]> {\n\tlet parsedPayload: Record<string, string[]>;\n\n\ttry {\n\t\tparsedPayload = JSON.parse(payload) as Record<string, string[]>;\n\t} catch {\n\t\tif (typeof console !== 'undefined') {\n\t\t\tconsole.warn('[@ecopages/radiant] Failed to parse slot projection payload:', payload.slice(0, 120));\n\t\t}\n\t\treturn new Map();\n\t}\n\n\tconst projectedContent = new Map<string, JsxRenderable[]>();\n\n\tfor (const [slotName, fragments] of Object.entries(parsedPayload)) {\n\t\tif (!Array.isArray(fragments) || fragments.length === 0) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tprojectedContent.set(\n\t\t\tnormalizeSlotName(slotName),\n\t\t\tfragments.map((fragment) => createMarkupNodeLike(fragment)),\n\t\t);\n\t}\n\n\treturn projectedContent;\n}\n\nexport function collectAuthoredHydrationScriptMarkup(host: HTMLElement): string | undefined {\n\tconst fragments = Array.from(host.childNodes)\n\t\t.filter((node): node is HTMLScriptElement => isHydrationScriptNode(node))\n\t\t.map((node) => renderableToHtmlFragment(node) ?? '')\n\t\t.filter((fragment) => fragment !== '');\n\n\treturn fragments.length > 0 ? fragments.join('') : undefined;\n}\n\nexport function serializeProjectedSlotRenderables(\n\tprojectedContent: ReadonlyMap<string, readonly JsxRenderable[]>,\n): string | undefined {\n\tconst payload: Record<string, string[]> = {};\n\n\tfor (const [slotName, renderables] of projectedContent.entries()) {\n\t\tconst fragments = renderables\n\t\t\t.map((renderable) => renderableToHtmlFragment(renderable))\n\t\t\t.filter((fragment): fragment is string => fragment !== undefined && fragment !== '');\n\n\t\tif (fragments.length > 0) {\n\t\t\tpayload[slotName] = fragments;\n\t\t}\n\t}\n\n\treturn Object.keys(payload).length > 0 ? JSON.stringify(payload) : undefined;\n}\n\nexport function resolveSlotProjection(\n\tvalue: JsxRenderable,\n\tprojectedContent: ReadonlyMap<string, readonly JsxRenderable[]>,\n): ResolvedSlotProjection {\n\tlet containsSlots = false;\n\n\tconst resolveValue = (currentValue: JsxRenderable): JsxRenderable => {\n\t\tif (isSlotJsxValue(currentValue)) {\n\t\t\tcontainsSlots = true;\n\t\t\treturn resolveSlotValue(currentValue, projectedContent, resolveValue);\n\t\t}\n\n\t\tif (isKeyedJsxValue(currentValue)) {\n\t\t\treturn cloneKeyedJsxValue(currentValue, resolveValue(currentValue.value));\n\t\t}\n\n\t\tif (isTemplateResultLike(currentValue)) {\n\t\t\treturn {\n\t\t\t\t_$rType$: 1,\n\t\t\t\trootLocalName: currentValue.rootLocalName,\n\t\t\t\tssrIntrinsicProps: currentValue.ssrIntrinsicProps,\n\t\t\t\tstrings: currentValue.strings,\n\t\t\t\tvalues: currentValue.values.map((entry) => resolveValue(entry as JsxRenderable)),\n\t\t\t} satisfies TemplateResultLike;\n\t\t}\n\n\t\tif (isIterableRenderable(currentValue)) {\n\t\t\treturn Array.from(currentValue, (entry) => resolveValue(entry as JsxRenderable));\n\t\t}\n\n\t\treturn currentValue;\n\t};\n\n\tconst resolvedValue = resolveValue(value);\n\n\treturn {\n\t\tcontainsSlots,\n\t\tvalue: resolvedValue,\n\t};\n}\n\nexport function takeSlotProjectionScriptPayload(host: HTMLElement): string | undefined {\n\tfor (const node of Array.from(host.childNodes)) {\n\t\tif (!isSlotProjectionScriptNode(node)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst payload = node.textContent ?? undefined;\n\t\tnode.parentNode?.removeChild(node);\n\t\treturn payload;\n\t}\n\n\treturn undefined;\n}\n\nfunction appendProjectedRenderable(\n\tprojectedContent: Map<string, JsxRenderable[]>,\n\tslotName: string,\n\trenderable: JsxRenderable,\n): void {\n\tconst existingRenderables = projectedContent.get(slotName);\n\n\tif (existingRenderables) {\n\t\texistingRenderables.push(renderable);\n\t\treturn;\n\t}\n\n\tprojectedContent.set(slotName, [renderable]);\n}\n\nfunction cloneKeyedJsxValue(value: KeyedJsxValue, nextValue: JsxRenderable): KeyedJsxValue {\n\treturn {\n\t\t...value,\n\t\tvalue: nextValue,\n\t};\n}\n\nfunction getNodeSlotName(node: Node): string {\n\tif (node instanceof Element) {\n\t\treturn normalizeSlotName(node.getAttribute('slot'));\n\t}\n\n\treturn DEFAULT_SLOT_NAME;\n}\n\nfunction isIterableRenderable(value: JsxRenderable): value is Iterable<JsxRenderable> {\n\treturn typeof value !== 'string' && typeof value === 'object' && value !== null && Symbol.iterator in value;\n}\n\nfunction isSlotProjectionScriptNode(node: Node): node is HTMLScriptElement {\n\treturn node instanceof HTMLScriptElement && node.hasAttribute(SLOT_PROJECTION_SCRIPT_ATTRIBUTE);\n}\n\nfunction isHydrationScriptNode(node: Node): node is HTMLScriptElement {\n\treturn node instanceof HTMLScriptElement && node.hasAttribute(HYDRATION_ATTRIBUTE);\n}\n\nfunction isIgnoredProjectedNode(node: Node): boolean {\n\treturn isSlotProjectionScriptNode(node) || isHydrationScriptNode(node);\n}\n\nfunction isTemplateResultLike(value: JsxRenderable): value is TemplateResultLike {\n\treturn (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\t(value as Partial<TemplateResultLike>)['_$rType$'] === 1 &&\n\t\tArray.isArray((value as Partial<TemplateResultLike>).strings) &&\n\t\tArray.isArray((value as Partial<TemplateResultLike>).values)\n\t);\n}\n\nfunction normalizeSlotName(name: string | undefined | null): string {\n\treturn name ?? DEFAULT_SLOT_NAME;\n}\n\nfunction renderableToHtmlFragment(renderable: JsxRenderable): string | undefined {\n\tif (renderable === undefined || renderable === null || renderable === false || renderable === true) {\n\t\treturn undefined;\n\t}\n\n\tif (typeof Node !== 'undefined' && renderable instanceof Node) {\n\t\tif (renderable.nodeType === Node.TEXT_NODE) {\n\t\t\treturn renderable.textContent ?? '';\n\t\t}\n\n\t\treturn (renderable as Element).outerHTML ?? renderable.textContent ?? undefined;\n\t}\n\n\tif (isKeyedJsxValue(renderable)) {\n\t\treturn renderableToHtmlFragment(renderable.value);\n\t}\n\n\tif (typeof renderable === 'string' || typeof renderable === 'number' || typeof renderable === 'bigint') {\n\t\treturn String(renderable);\n\t}\n\n\tif (typeof renderable === 'object' && renderable !== null && 'outerHTML' in renderable) {\n\t\treturn typeof renderable.outerHTML === 'string' ? renderable.outerHTML : (renderable.textContent ?? undefined);\n\t}\n\n\tif (isIterableRenderable(renderable)) {\n\t\treturn Array.from(renderable, (entry) => renderableToHtmlFragment(entry as JsxRenderable) ?? '').join('');\n\t}\n\n\treturn undefined;\n}\n\nfunction resolveSlotValue(\n\tvalue: SlotJsxValue,\n\tprojectedContent: ReadonlyMap<string, readonly JsxRenderable[]>,\n\tresolveValue: (value: JsxRenderable) => JsxRenderable,\n): JsxRenderable {\n\tconst assignedContent = projectedContent.get(normalizeSlotName(value.name));\n\n\tif (assignedContent && assignedContent.length > 0) {\n\t\treturn assignedContent.length === 1 ? assignedContent[0] : (assignedContent as JsxRenderable);\n\t}\n\n\tif (value.fallback === undefined) {\n\t\treturn '';\n\t}\n\n\treturn resolveValue(value.fallback);\n}\n",
8
8
  "export type ParsedHtmlTag = {\n\tattributes: Record<string, string>;\n\tend: number;\n\tinnerHtml: string;\n\tselfClosing: boolean;\n\ttagName: string;\n\ttype: 'open';\n};\n\nexport type ParsedHtmlToken =\n\t| ParsedHtmlTag\n\t| {\n\t\t\tend: number;\n\t\t\ttype: 'close';\n\t }\n\t| {\n\t\t\tend: number;\n\t\t\ttype: 'comment' | 'declaration';\n\t };\n\nexport const voidElementNames = new Set([\n\t'area',\n\t'base',\n\t'br',\n\t'col',\n\t'embed',\n\t'hr',\n\t'img',\n\t'input',\n\t'link',\n\t'meta',\n\t'param',\n\t'source',\n\t'track',\n\t'wbr',\n]);\n\nexport function collectTopLevelHtmlFragments(html: string): string[] {\n\tconst fragments: string[] = [];\n\tlet index = 0;\n\n\twhile (index < html.length) {\n\t\tconst fragmentStart = index;\n\n\t\tif (html.startsWith('<!--', index)) {\n\t\t\tconst commentEnd = html.indexOf('-->', index + 4);\n\t\t\tindex = commentEnd === -1 ? html.length : commentEnd + 3;\n\t\t\tfragments.push(html.slice(fragmentStart, index));\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (html[index] !== '<') {\n\t\t\tconst nextTagIndex = html.indexOf('<', index);\n\t\t\tindex = nextTagIndex === -1 ? html.length : nextTagIndex;\n\t\t\tfragments.push(html.slice(fragmentStart, index));\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst token = parseHtmlTagToken(html, index);\n\n\t\tif (!token) {\n\t\t\tfragments.push(html.slice(fragmentStart));\n\t\t\tbreak;\n\t\t}\n\n\t\tif (token.type !== 'open' || token.selfClosing || voidElementNames.has(token.tagName)) {\n\t\t\tindex = token.end;\n\t\t\tfragments.push(html.slice(fragmentStart, index));\n\t\t\tcontinue;\n\t\t}\n\n\t\tindex = token.end;\n\t\tlet depth = 1;\n\n\t\twhile (index < html.length && depth > 0) {\n\t\t\tconst nextTagIndex = html.indexOf('<', index);\n\n\t\t\tif (nextTagIndex === -1) {\n\t\t\t\tindex = html.length;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst nestedToken = parseHtmlTagToken(html, nextTagIndex);\n\n\t\t\tif (!nestedToken) {\n\t\t\t\tindex = html.length;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tindex = nestedToken.end;\n\n\t\t\tif (nestedToken.type === 'comment' || nestedToken.type === 'declaration') {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (nestedToken.type === 'open' && !nestedToken.selfClosing && !voidElementNames.has(nestedToken.tagName)) {\n\t\t\t\tdepth += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (nestedToken.type === 'close') {\n\t\t\t\tdepth -= 1;\n\t\t\t}\n\t\t}\n\n\t\tfragments.push(html.slice(fragmentStart, index));\n\t}\n\n\treturn fragments.filter((fragment) => fragment !== '');\n}\n\nexport function findHtmlTagEnd(html: string, startIndex: number): number {\n\tlet quote: '\"' | \"'\" | undefined;\n\n\tfor (let index = startIndex + 1; index < html.length; index += 1) {\n\t\tconst character = html[index];\n\n\t\tif (quote) {\n\t\t\tif (character === quote) {\n\t\t\t\tquote = undefined;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (character === '\"' || character === \"'\") {\n\t\t\tquote = character;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (character === '>') {\n\t\t\treturn index + 1;\n\t\t}\n\t}\n\n\treturn html.length;\n}\n\nexport function parseAttributes(rawAttributes: string): Record<string, string> {\n\tconst attributes: Record<string, string> = {};\n\tconst attributePattern = /([:^@A-Za-z0-9_.-]+)(?:\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|([^\\s\"'>/]+)))?/g;\n\n\tfor (const match of rawAttributes.matchAll(attributePattern)) {\n\t\tconst [, name, doubleQuoted, singleQuoted, bareValue] = match;\n\n\t\tif (!name) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tattributes[name] = doubleQuoted ?? singleQuoted ?? bareValue ?? '';\n\t}\n\n\treturn attributes;\n}\n\nexport function parseHtmlTagToken(html: string, startIndex: number): ParsedHtmlToken | undefined {\n\tif (html.startsWith('<!--', startIndex)) {\n\t\tconst endIndex = html.indexOf('-->', startIndex + 4);\n\t\treturn {\n\t\t\tend: endIndex === -1 ? html.length : endIndex + 3,\n\t\t\ttype: 'comment',\n\t\t};\n\t}\n\n\tconst endIndex = findHtmlTagEnd(html, startIndex);\n\tconst rawToken = html.slice(startIndex + 1, endIndex - 1).trim();\n\n\tif (rawToken === '') {\n\t\treturn undefined;\n\t}\n\n\tif (rawToken.startsWith('!') || rawToken.startsWith('?')) {\n\t\treturn {\n\t\t\tend: endIndex,\n\t\t\ttype: 'declaration',\n\t\t};\n\t}\n\n\tif (rawToken.startsWith('/')) {\n\t\treturn {\n\t\t\tend: endIndex,\n\t\t\ttype: 'close',\n\t\t};\n\t}\n\n\tconst selfClosing = /\\/\\s*$/.test(rawToken);\n\tconst tagBody = selfClosing ? rawToken.replace(/\\/\\s*$/, '').trim() : rawToken;\n\tconst tagName = tagBody.split(/[\\s/>]/, 1)[0]?.toLowerCase() ?? '';\n\tconst attributesStart = tagName.length;\n\tconst rawAttributes = tagBody.slice(attributesStart).trim();\n\tconst innerHtml =\n\t\tselfClosing || voidElementNames.has(tagName)\n\t\t\t? ''\n\t\t\t: extractInnerHtmlFragment(html, startIndex, endIndex, tagName);\n\n\treturn {\n\t\tattributes: parseAttributes(rawAttributes),\n\t\tend: endIndex,\n\t\tinnerHtml,\n\t\tselfClosing,\n\t\ttagName,\n\t\ttype: 'open',\n\t};\n}\n\nexport function extractInnerHtmlFragment(\n\thtml: string,\n\tstartIndex: number,\n\ttagEndIndex: number,\n\ttagName: string,\n): string {\n\tlet index = tagEndIndex;\n\tlet depth = 1;\n\n\twhile (index < html.length && depth > 0) {\n\t\tconst nextTagIndex = html.indexOf('<', index);\n\n\t\tif (nextTagIndex === -1) {\n\t\t\treturn html.slice(tagEndIndex);\n\t\t}\n\n\t\tconst nextTag = parseHtmlTagToken(html, nextTagIndex);\n\n\t\tif (!nextTag) {\n\t\t\treturn html.slice(tagEndIndex);\n\t\t}\n\n\t\tif (\n\t\t\tnextTag.type === 'open' &&\n\t\t\tnextTag.tagName === tagName &&\n\t\t\t!nextTag.selfClosing &&\n\t\t\t!voidElementNames.has(tagName)\n\t\t) {\n\t\t\tdepth += 1;\n\t\t}\n\n\t\tif (nextTag.type === 'close') {\n\t\t\tconst closingName = html\n\t\t\t\t.slice(nextTagIndex + 2, nextTag.end - 1)\n\t\t\t\t.trim()\n\t\t\t\t.toLowerCase();\n\n\t\t\tif (closingName === tagName) {\n\t\t\t\tdepth -= 1;\n\n\t\t\t\tif (depth === 0) {\n\t\t\t\t\treturn html.slice(tagEndIndex, nextTagIndex);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tindex = nextTag.end;\n\t}\n\n\treturn html.slice(tagEndIndex);\n}\n",
9
9
  "import { createMarkupNodeLike, type JsxRenderable } from '@ecopages/jsx';\n\nimport { HYDRATION_ATTRIBUTE } from '../core/hydration-codec';\nimport { DEFAULT_SLOT_NAME, SLOT_PROJECTION_SCRIPT_ATTRIBUTE } from '../core/slot-projection-runtime';\nimport { collectTopLevelHtmlFragments } from './html-parser';\n\nexport function parseProjectedSlotRenderablesFromHtml(html: string): Map<string, JsxRenderable[]> {\n\tconst projectedContent = new Map<string, JsxRenderable[]>();\n\n\tfor (const fragment of collectTopLevelHtmlFragments(html)) {\n\t\tif (isIgnoredProjectedHtmlFragment(fragment)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tappendProjectedRenderable(\n\t\t\tprojectedContent,\n\t\t\tgetSlotNameFromHtmlFragment(fragment),\n\t\t\tcreateMarkupNodeLike(fragment),\n\t\t);\n\t}\n\n\treturn projectedContent;\n}\n\nexport function collectAuthoredHydrationScriptMarkupFromHtml(html: string): string | undefined {\n\tconst fragments = collectTopLevelHtmlFragments(html).filter((fragment) => isHydrationScriptHtmlFragment(fragment));\n\n\treturn fragments.length > 0 ? fragments.join('') : undefined;\n}\n\nfunction appendProjectedRenderable(\n\tprojectedContent: Map<string, JsxRenderable[]>,\n\tslotName: string,\n\trenderable: JsxRenderable,\n): void {\n\tconst existingRenderables = projectedContent.get(slotName);\n\n\tif (existingRenderables) {\n\t\texistingRenderables.push(renderable);\n\t\treturn;\n\t}\n\n\tprojectedContent.set(slotName, [renderable]);\n}\n\nfunction getSlotNameFromHtmlFragment(fragment: string): string {\n\tconst openingTagMatch = /^<([A-Za-z][^\\s/>]*)([^>]*)>/s.exec(fragment);\n\n\tif (!openingTagMatch) {\n\t\treturn DEFAULT_SLOT_NAME;\n\t}\n\n\tconst attributes = openingTagMatch[2] ?? '';\n\tconst slotMatch = /\\sslot\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|([^\\s>]+))/i.exec(attributes);\n\n\treturn slotMatch?.[1] ?? slotMatch?.[2] ?? slotMatch?.[3] ?? DEFAULT_SLOT_NAME;\n}\n\nfunction isIgnoredProjectedHtmlFragment(fragment: string): boolean {\n\treturn isSlotProjectionScriptHtmlFragment(fragment) || isHydrationScriptHtmlFragment(fragment);\n}\n\nfunction isSlotProjectionScriptHtmlFragment(fragment: string): boolean {\n\tconst openingTagMatch = /^<script\\b([^>]*)>/i.exec(fragment);\n\n\tif (!openingTagMatch) {\n\t\treturn false;\n\t}\n\n\treturn hasScriptAttribute(openingTagMatch[1] ?? '', SLOT_PROJECTION_SCRIPT_ATTRIBUTE);\n}\n\nfunction isHydrationScriptHtmlFragment(fragment: string): boolean {\n\tconst openingTagMatch = /^<script\\b([^>]*)>/i.exec(fragment);\n\n\tif (!openingTagMatch) {\n\t\treturn false;\n\t}\n\n\treturn hasScriptAttribute(openingTagMatch[1] ?? '', HYDRATION_ATTRIBUTE);\n}\n\nfunction hasScriptAttribute(attributes: string, attributeName: string): boolean {\n\treturn new RegExp(`(?:^|\\\\s)${attributeName}(?:\\\\s*=\\\\s*(?:\"[^\"]*\"|'[^']*'|[^\\\\s>]+))?`, 'i').test(attributes);\n}\n"
10
10
  ],
11
- "mappings": "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",
12
- "debugId": "611384E09FC6415064756E2164756E21",
11
+ "mappings": "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",
12
+ "debugId": "F9345781EBD4DFC564756E2164756E21",
13
13
  "names": []
14
14
  }
@@ -0,0 +1 @@
1
+ export declare function escapeCssIdentifier(value: string): string;
@@ -0,0 +1,3 @@
1
+ var f=((n)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(c,e)=>(typeof require<"u"?require:c)[e]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});function p(n){let c=globalThis.CSS;if(typeof c?.escape==="function")return c.escape(n);let e="";for(let s=0;s<n.length;s+=1){let i=n[s]??"",t=i.codePointAt(0)??0;if(t===0){e+="�";continue}let o=t>=1&&t<=31||t===127,r=s===0&&t>=48&&t<=57,x=s===1&&t>=48&&t<=57&&(n[0]??"")==="-",a=s===0&&i==="-"&&n.length===1;if(o||r||x){e+=`\\${t.toString(16)} `;continue}if(t>=128||i==="-"||i==="_"||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122){e+=a?`\\${i}`:i;continue}e+=`\\${i}`}return e}export{p as escapeCssIdentifier};
2
+
3
+ //# debugId=BF095F02FC2877E864756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/tools/escape-css-identifier.ts"],
4
+ "sourcesContent": [
5
+ "export function escapeCssIdentifier(value: string): string {\n\tconst cssNamespace = globalThis.CSS as { escape?: (value: string) => string } | undefined;\n\n\tif (typeof cssNamespace?.escape === 'function') {\n\t\treturn cssNamespace.escape(value);\n\t}\n\n\tlet escaped = '';\n\n\tfor (let index = 0; index < value.length; index += 1) {\n\t\tconst character = value[index] ?? '';\n\t\tconst codePoint = character.codePointAt(0) ?? 0;\n\n\t\tif (codePoint === 0) {\n\t\t\tescaped += '\\uFFFD';\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst isControlCharacter = (codePoint >= 0x0001 && codePoint <= 0x001f) || codePoint === 0x007f;\n\t\tconst startsWithDigit = index === 0 && codePoint >= 0x0030 && codePoint <= 0x0039;\n\t\tconst startsWithHyphenDigit =\n\t\t\tindex === 1 && codePoint >= 0x0030 && codePoint <= 0x0039 && (value[0] ?? '') === '-';\n\t\tconst isSingleHyphen = index === 0 && character === '-' && value.length === 1;\n\n\t\tif (isControlCharacter || startsWithDigit || startsWithHyphenDigit) {\n\t\t\tescaped += `\\\\${codePoint.toString(16)} `;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (\n\t\t\tcodePoint >= 0x0080 ||\n\t\t\tcharacter === '-' ||\n\t\t\tcharacter === '_' ||\n\t\t\t(codePoint >= 0x0030 && codePoint <= 0x0039) ||\n\t\t\t(codePoint >= 0x0041 && codePoint <= 0x005a) ||\n\t\t\t(codePoint >= 0x0061 && codePoint <= 0x007a)\n\t\t) {\n\t\t\tescaped += isSingleHyphen ? `\\\\${character}` : character;\n\t\t\tcontinue;\n\t\t}\n\n\t\tescaped += `\\\\${character}`;\n\t}\n\n\treturn escaped;\n}\n"
6
+ ],
7
+ "mappings": "2PAAO,SAAS,CAAmB,CAAC,EAAuB,CAC1D,IAAM,EAAe,WAAW,IAEhC,GAAI,OAAO,GAAc,SAAW,WACnC,OAAO,EAAa,OAAO,CAAK,EAGjC,IAAI,EAAU,GAEd,QAAS,EAAQ,EAAG,EAAQ,EAAM,OAAQ,GAAS,EAAG,CACrD,IAAM,EAAY,EAAM,IAAU,GAC5B,EAAY,EAAU,YAAY,CAAC,GAAK,EAE9C,GAAI,IAAc,EAAG,CACpB,GAAW,IACX,SAGD,IAAM,EAAsB,GAAa,GAAU,GAAa,IAAW,IAAc,IACnF,EAAkB,IAAU,GAAK,GAAa,IAAU,GAAa,GACrE,EACL,IAAU,GAAK,GAAa,IAAU,GAAa,KAAW,EAAM,IAAM,MAAQ,IAC7E,EAAiB,IAAU,GAAK,IAAc,KAAO,EAAM,SAAW,EAE5E,GAAI,GAAsB,GAAmB,EAAuB,CACnE,GAAW,KAAK,EAAU,SAAS,EAAE,KACrC,SAGD,GACC,GAAa,KACb,IAAc,KACd,IAAc,KACb,GAAa,IAAU,GAAa,IACpC,GAAa,IAAU,GAAa,IACpC,GAAa,IAAU,GAAa,IACpC,CACD,GAAW,EAAiB,KAAK,IAAc,EAC/C,SAGD,GAAW,KAAK,IAGjB,OAAO",
8
+ "debugId": "BF095F02FC2877E864756E2164756E21",
9
+ "names": []
10
+ }
@@ -1,3 +1,4 @@
1
1
  export * from './event-emitter';
2
2
  export * from './render-jsx-template';
3
+ export * from './escape-css-identifier';
3
4
  export * from './escape-script-json';
@@ -1,3 +1,3 @@
1
- var f=((r)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(u,c)=>(typeof require<"u"?require:u)[c]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});function H(r){return r.replace(/&/g,"\\u0026").replace(/</g,"\\u003c").replace(/>/g,"\\u003e").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}class p{host;eventConfig;constructor(r,u){this.host=r,this.eventConfig=u}emit(r){let u=new CustomEvent(this.eventConfig.name,{detail:r,bubbles:this.eventConfig.bubbles,cancelable:this.eventConfig.cancelable,composed:this.eventConfig.composed});this.host.dispatchEvent(u)}}import{render as x}from"@ecopages/jsx";function N(r,u){x(r,u)}export{N as renderJsxTemplate,H as escapeScriptJson,p as EventEmitter};
1
+ var g=((n)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(c,s)=>(typeof require<"u"?require:c)[s]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});function S(n){return n.replace(/&/g,"\\u0026").replace(/</g,"\\u003c").replace(/>/g,"\\u003e").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}class f{host;eventConfig;constructor(n,c){this.host=n,this.eventConfig=c}emit(n){let c=new CustomEvent(this.eventConfig.name,{detail:n,bubbles:this.eventConfig.bubbles,cancelable:this.eventConfig.cancelable,composed:this.eventConfig.composed});this.host.dispatchEvent(c)}}function H(n){let c=globalThis.CSS;if(typeof c?.escape==="function")return c.escape(n);let s="";for(let o=0;o<n.length;o+=1){let i=n[o]??"",r=i.codePointAt(0)??0;if(r===0){s+="�";continue}let x=r>=1&&r<=31||r===127,t=o===0&&r>=48&&r<=57,e=o===1&&r>=48&&r<=57&&(n[0]??"")==="-",p=o===0&&i==="-"&&n.length===1;if(x||t||e){s+=`\\${r.toString(16)} `;continue}if(r>=128||i==="-"||i==="_"||r>=48&&r<=57||r>=65&&r<=90||r>=97&&r<=122){s+=p?`\\${i}`:i;continue}s+=`\\${i}`}return s}import{render as u}from"@ecopages/jsx";function h(n,c){u(n,c)}export{h as renderJsxTemplate,S as escapeScriptJson,H as escapeCssIdentifier,f as EventEmitter};
2
2
 
3
- //# debugId=829CAA7160F78EF264756E2164756E21
3
+ //# debugId=19BB6D9EC62E3A1564756E2164756E21
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/tools/escape-script-json.ts", "../src/tools/event-emitter.ts", "../src/tools/render-jsx-template.ts"],
3
+ "sources": ["../src/tools/escape-script-json.ts", "../src/tools/event-emitter.ts", "../src/tools/escape-css-identifier.ts", "../src/tools/render-jsx-template.ts"],
4
4
  "sourcesContent": [
5
5
  "/**\n * Escapes serialized JSON so it remains safe when embedded inside an HTML\n * `<script>` tag.\n */\nexport function escapeScriptJson(value: string): string {\n\treturn value\n\t\t.replace(/&/g, '\\\\u0026')\n\t\t.replace(/</g, '\\\\u003c')\n\t\t.replace(/>/g, '\\\\u003e')\n\t\t.replace(/\\u2028/g, '\\\\u2028')\n\t\t.replace(/\\u2029/g, '\\\\u2029');\n}\n",
6
6
  "import type { RadiantElement } from '../core/radiant-element';\n\nexport interface EventEmitterConfig {\n\tname: string;\n\tbubbles?: boolean;\n\tcancelable?: boolean;\n\tcomposed?: boolean;\n}\n\n/**\n * A generic event emitter class that allows emitting custom events.\n *\n * @template T - The type of the event detail.\n */\nexport class EventEmitter<T = unknown> {\n\tprivate host: RadiantElement;\n\tprivate eventConfig: EventEmitterConfig;\n\n\t/**\n\t * Constructs a new instance of the EventEmitter class.\n\t *\n\t * @param host - The host element on which the events will be dispatched.\n\t * @param eventConfig - The configuration for the event.\n\t */\n\tconstructor(host: RadiantElement, eventConfig: EventEmitterConfig) {\n\t\tthis.host = host;\n\t\tthis.eventConfig = eventConfig;\n\t}\n\n\t/**\n\t * Emits a custom event with the specified detail.\n\t *\n\t * @param detail - The detail object to be passed along with the event.\n\t */\n\temit(detail?: T) {\n\t\tconst event = new CustomEvent(this.eventConfig.name, {\n\t\t\tdetail: detail,\n\t\t\tbubbles: this.eventConfig.bubbles,\n\t\t\tcancelable: this.eventConfig.cancelable,\n\t\t\tcomposed: this.eventConfig.composed,\n\t\t});\n\t\tthis.host.dispatchEvent(event);\n\t}\n}\n",
7
+ "export function escapeCssIdentifier(value: string): string {\n\tconst cssNamespace = globalThis.CSS as { escape?: (value: string) => string } | undefined;\n\n\tif (typeof cssNamespace?.escape === 'function') {\n\t\treturn cssNamespace.escape(value);\n\t}\n\n\tlet escaped = '';\n\n\tfor (let index = 0; index < value.length; index += 1) {\n\t\tconst character = value[index] ?? '';\n\t\tconst codePoint = character.codePointAt(0) ?? 0;\n\n\t\tif (codePoint === 0) {\n\t\t\tescaped += '\\uFFFD';\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst isControlCharacter = (codePoint >= 0x0001 && codePoint <= 0x001f) || codePoint === 0x007f;\n\t\tconst startsWithDigit = index === 0 && codePoint >= 0x0030 && codePoint <= 0x0039;\n\t\tconst startsWithHyphenDigit =\n\t\t\tindex === 1 && codePoint >= 0x0030 && codePoint <= 0x0039 && (value[0] ?? '') === '-';\n\t\tconst isSingleHyphen = index === 0 && character === '-' && value.length === 1;\n\n\t\tif (isControlCharacter || startsWithDigit || startsWithHyphenDigit) {\n\t\t\tescaped += `\\\\${codePoint.toString(16)} `;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (\n\t\t\tcodePoint >= 0x0080 ||\n\t\t\tcharacter === '-' ||\n\t\t\tcharacter === '_' ||\n\t\t\t(codePoint >= 0x0030 && codePoint <= 0x0039) ||\n\t\t\t(codePoint >= 0x0041 && codePoint <= 0x005a) ||\n\t\t\t(codePoint >= 0x0061 && codePoint <= 0x007a)\n\t\t) {\n\t\t\tescaped += isSingleHyphen ? `\\\\${character}` : character;\n\t\t\tcontinue;\n\t\t}\n\n\t\tescaped += `\\\\${character}`;\n\t}\n\n\treturn escaped;\n}\n",
7
8
  "import { render, type TemplateResultLike } from '@ecopages/jsx';\n\n/**\n * Renders a JSX template result into a target element by replacing its children.\n */\nexport function renderJsxTemplate(template: TemplateResultLike, target: HTMLElement): void {\n\trender(template, target);\n}\n"
8
9
  ],
9
- "mappings": "2PAIO,SAAS,CAAgB,CAAC,EAAuB,CACvD,OAAO,EACL,QAAQ,KAAM,SAAS,EACvB,QAAQ,KAAM,SAAS,EACvB,QAAQ,KAAM,SAAS,EACvB,QAAQ,UAAW,SAAS,EAC5B,QAAQ,UAAW,SAAS,ECIxB,MAAM,CAA0B,CAC9B,KACA,YAQR,WAAW,CAAC,EAAsB,EAAiC,CAClE,KAAK,KAAO,EACZ,KAAK,YAAc,EAQpB,IAAI,CAAC,EAAY,CAChB,IAAM,EAAQ,IAAI,YAAY,KAAK,YAAY,KAAM,CACpD,OAAQ,EACR,QAAS,KAAK,YAAY,QAC1B,WAAY,KAAK,YAAY,WAC7B,SAAU,KAAK,YAAY,QAC5B,CAAC,EACD,KAAK,KAAK,cAAc,CAAK,EAE/B,CC3CA,iBAAS,sBAKF,SAAS,CAAiB,CAAC,EAA8B,EAA2B,CAC1F,EAAO,EAAU,CAAM",
10
- "debugId": "829CAA7160F78EF264756E2164756E21",
10
+ "mappings": "2PAIO,SAAS,CAAgB,CAAC,EAAuB,CACvD,OAAO,EACL,QAAQ,KAAM,SAAS,EACvB,QAAQ,KAAM,SAAS,EACvB,QAAQ,KAAM,SAAS,EACvB,QAAQ,UAAW,SAAS,EAC5B,QAAQ,UAAW,SAAS,ECIxB,MAAM,CAA0B,CAC9B,KACA,YAQR,WAAW,CAAC,EAAsB,EAAiC,CAClE,KAAK,KAAO,EACZ,KAAK,YAAc,EAQpB,IAAI,CAAC,EAAY,CAChB,IAAM,EAAQ,IAAI,YAAY,KAAK,YAAY,KAAM,CACpD,OAAQ,EACR,QAAS,KAAK,YAAY,QAC1B,WAAY,KAAK,YAAY,WAC7B,SAAU,KAAK,YAAY,QAC5B,CAAC,EACD,KAAK,KAAK,cAAc,CAAK,EAE/B,CC3CO,SAAS,CAAmB,CAAC,EAAuB,CAC1D,IAAM,EAAe,WAAW,IAEhC,GAAI,OAAO,GAAc,SAAW,WACnC,OAAO,EAAa,OAAO,CAAK,EAGjC,IAAI,EAAU,GAEd,QAAS,EAAQ,EAAG,EAAQ,EAAM,OAAQ,GAAS,EAAG,CACrD,IAAM,EAAY,EAAM,IAAU,GAC5B,EAAY,EAAU,YAAY,CAAC,GAAK,EAE9C,GAAI,IAAc,EAAG,CACpB,GAAW,IACX,SAGD,IAAM,EAAsB,GAAa,GAAU,GAAa,IAAW,IAAc,IACnF,EAAkB,IAAU,GAAK,GAAa,IAAU,GAAa,GACrE,EACL,IAAU,GAAK,GAAa,IAAU,GAAa,KAAW,EAAM,IAAM,MAAQ,IAC7E,EAAiB,IAAU,GAAK,IAAc,KAAO,EAAM,SAAW,EAE5E,GAAI,GAAsB,GAAmB,EAAuB,CACnE,GAAW,KAAK,EAAU,SAAS,EAAE,KACrC,SAGD,GACC,GAAa,KACb,IAAc,KACd,IAAc,KACb,GAAa,IAAU,GAAa,IACpC,GAAa,IAAU,GAAa,IACpC,GAAa,IAAU,GAAa,IACpC,CACD,GAAW,EAAiB,KAAK,IAAc,EAC/C,SAGD,GAAW,KAAK,IAGjB,OAAO,EC5CR,iBAAS,sBAKF,SAAS,CAAiB,CAAC,EAA8B,EAA2B,CAC1F,EAAO,EAAU,CAAM",
11
+ "debugId": "19BB6D9EC62E3A1564756E2164756E21",
11
12
  "names": []
12
13
  }
@@ -0,0 +1,2 @@
1
+ /** Escapes a string for safe interpolation inside a double-quoted HTML attribute value. */
2
+ export declare function escapeHtmlAttribute(value: string): string;
@@ -0,0 +1,3 @@
1
+ var a=((e)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});function l(e){return e.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}export{l as escapeHtmlAttribute};
2
+
3
+ //# debugId=4674D9C57A19905064756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/utils/escape-html-attribute.ts"],
4
+ "sourcesContent": [
5
+ "/** Escapes a string for safe interpolation inside a double-quoted HTML attribute value. */\nexport function escapeHtmlAttribute(value: string): string {\n\treturn value.replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n"
6
+ ],
7
+ "mappings": "2PACO,SAAS,CAAmB,CAAC,EAAuB,CAC1D,OAAO,EAAM,QAAQ,KAAM,OAAO,EAAE,QAAQ,KAAM,QAAQ,EAAE,QAAQ,KAAM,MAAM,EAAE,QAAQ,KAAM,MAAM",
8
+ "debugId": "4674D9C57A19905064756E2164756E21",
9
+ "names": []
10
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ecopages/radiant",
3
- "version": "0.3.0-alpha.8",
3
+ "version": "0.3.0-beta.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/ecopages/radiant.git"
@@ -11,6 +11,10 @@
11
11
  "main": "dist/index.js",
12
12
  "module": "dist/index.js",
13
13
  "types": "dist/index.d.ts",
14
+ "publishConfig": {
15
+ "access": "public",
16
+ "directory": "dist"
17
+ },
14
18
  "scripts": {
15
19
  "build:lib": "bun run clean && bun run build:files && bun run build:types",
16
20
  "build:files": "bun run ./build.ts",
@@ -40,12 +44,11 @@
40
44
  "vitest": "^3.2.4"
41
45
  },
42
46
  "peerDependencies": {
43
- "@ecopages/jsx": ">=0.3.0-alpha.0 <1.0.0",
44
- "@ecopages/signals": ">=0.3.0-alpha.0 <1.0.0"
47
+ "@ecopages/jsx": ">=0.3.0-beta.0 <1.0.0",
48
+ "@ecopages/signals": ">=0.3.0-beta.0 <1.0.0"
45
49
  },
46
50
  "files": [
47
- "/dist/*",
48
- "size-budget.json"
51
+ "dist/**"
49
52
  ],
50
53
  "sideEffects": [
51
54
  "./dist/client/install-hydrator.js",
@@ -111,6 +114,10 @@
111
114
  "types": "./dist/client/hydrator.d.ts",
112
115
  "import": "./dist/client/hydrator.js"
113
116
  },
117
+ "./client/app-bootstrap": {
118
+ "types": "./dist/client/app-bootstrap.d.ts",
119
+ "import": "./dist/client/app-bootstrap.js"
120
+ },
114
121
  "./client/install-hydrator": {
115
122
  "types": "./dist/client/install-hydrator.d.ts",
116
123
  "import": "./dist/client/install-hydrator.js"
@@ -1,54 +0,0 @@
1
- import type { JsxRenderable } from '@ecopages/jsx';
2
- import type { RenderToStringOptions } from '@ecopages/jsx/server';
3
- /**
4
- * Optional SSR hooks exposed by `RadiantElement` instances to the shared
5
- * server runtime.
6
- *
7
- * The bridge lets the runtime detect whether a component is still using the
8
- * inherited host SSR implementation or has taken ownership of host rendering
9
- * through explicit overrides.
10
- */
11
- export type RadiantElementRenderBridge = {
12
- renderHost?: () => JsxRenderable;
13
- renderHostToString?: (options?: RenderToStringOptions) => string;
14
- };
15
- /**
16
- * Runtime shape required by the shared Radiant SSR helpers.
17
- *
18
- * This is intentionally narrower than `RadiantElement` itself so the server
19
- * runtime can stay decoupled from the full client base-class implementation.
20
- */
21
- export type RadiantElementSsrCapable = HTMLElement & {
22
- resolveSsrRenderBridge?: () => RadiantElementRenderBridge;
23
- getHostSsrAttributes?: () => Record<string, string>;
24
- renderToString(options?: RenderToStringOptions): string;
25
- renderHost?(): JsxRenderable;
26
- renderHostToString(options?: RenderToStringOptions): string;
27
- };
28
- /**
29
- * Shared SSR runtime contract registered on `globalThis`.
30
- *
31
- * Server entrypoints install one implementation that both direct component SSR
32
- * and nested JSX custom-element SSR can reuse without importing client-only
33
- * internals into every call site.
34
- */
35
- export type RadiantElementSsrRuntime = {
36
- getHostAttributes(component: RadiantElementSsrCapable): Record<string, string>;
37
- renderHost(component: RadiantElementSsrCapable): JsxRenderable;
38
- renderHostToString(component: RadiantElementSsrCapable, options?: RenderToStringOptions): string;
39
- resolveRenderBridge(component: RadiantElementSsrCapable): RadiantElementRenderBridge | undefined;
40
- renderView(component: RadiantElementSsrCapable, options?: RenderToStringOptions): string;
41
- };
42
- /**
43
- * Reads the currently registered Radiant SSR runtime from `globalThis`.
44
- *
45
- * Returns `undefined` when no server entrypoint has installed the runtime yet.
46
- */
47
- export declare function getRadiantElementSsrRuntime(): RadiantElementSsrRuntime | undefined;
48
- /**
49
- * Registers the shared Radiant SSR runtime on `globalThis`.
50
- *
51
- * The latest registration wins, which keeps server adapters free to install
52
- * the runtime eagerly from their own explicit entrypoint.
53
- */
54
- export declare function registerRadiantElementSsrRuntime(runtime: RadiantElementSsrRuntime): void;
@@ -1,3 +0,0 @@
1
- var f=((a)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(a,{get:(c,d)=>(typeof require<"u"?require:c)[d]}):a)(function(a){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+a+'" is not supported')});var b=Symbol.for("@ecopages/radiant.component-ssr-runtime");function h(){return globalThis[b]}function j(a){globalThis[b]=a}export{j as registerRadiantElementSsrRuntime,h as getRadiantElementSsrRuntime};
2
-
3
- //# debugId=7A43EF7E4BF0DC2964756E2164756E21
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/core/radiant-component-ssr-registry.ts"],
4
- "sourcesContent": [
5
- "import type { JsxRenderable } from '@ecopages/jsx';\nimport type { RenderToStringOptions } from '@ecopages/jsx/server';\n\n/**\n * Optional SSR hooks exposed by `RadiantElement` instances to the shared\n * server runtime.\n *\n * The bridge lets the runtime detect whether a component is still using the\n * inherited host SSR implementation or has taken ownership of host rendering\n * through explicit overrides.\n */\nexport type RadiantElementRenderBridge = {\n\trenderHost?: () => JsxRenderable;\n\trenderHostToString?: (options?: RenderToStringOptions) => string;\n};\n\n/**\n * Runtime shape required by the shared Radiant SSR helpers.\n *\n * This is intentionally narrower than `RadiantElement` itself so the server\n * runtime can stay decoupled from the full client base-class implementation.\n */\nexport type RadiantElementSsrCapable = HTMLElement & {\n\tresolveSsrRenderBridge?: () => RadiantElementRenderBridge;\n\tgetHostSsrAttributes?: () => Record<string, string>;\n\trenderToString(options?: RenderToStringOptions): string;\n\trenderHost?(): JsxRenderable;\n\trenderHostToString(options?: RenderToStringOptions): string;\n};\n\n/**\n * Shared SSR runtime contract registered on `globalThis`.\n *\n * Server entrypoints install one implementation that both direct component SSR\n * and nested JSX custom-element SSR can reuse without importing client-only\n * internals into every call site.\n */\nexport type RadiantElementSsrRuntime = {\n\tgetHostAttributes(component: RadiantElementSsrCapable): Record<string, string>;\n\trenderHost(component: RadiantElementSsrCapable): JsxRenderable;\n\trenderHostToString(component: RadiantElementSsrCapable, options?: RenderToStringOptions): string;\n\tresolveRenderBridge(component: RadiantElementSsrCapable): RadiantElementRenderBridge | undefined;\n\trenderView(component: RadiantElementSsrCapable, options?: RenderToStringOptions): string;\n};\n\nconst RADIANT_COMPONENT_SSR_RUNTIME_SYMBOL = Symbol.for('@ecopages/radiant.component-ssr-runtime');\n\ntype GlobalSsrRuntimeState = typeof globalThis & {\n\t[RADIANT_COMPONENT_SSR_RUNTIME_SYMBOL]?: RadiantElementSsrRuntime;\n};\n\n/**\n * Reads the currently registered Radiant SSR runtime from `globalThis`.\n *\n * Returns `undefined` when no server entrypoint has installed the runtime yet.\n */\nexport function getRadiantElementSsrRuntime(): RadiantElementSsrRuntime | undefined {\n\treturn (globalThis as GlobalSsrRuntimeState)[RADIANT_COMPONENT_SSR_RUNTIME_SYMBOL];\n}\n\n/**\n * Registers the shared Radiant SSR runtime on `globalThis`.\n *\n * The latest registration wins, which keeps server adapters free to install\n * the runtime eagerly from their own explicit entrypoint.\n */\nexport function registerRadiantElementSsrRuntime(runtime: RadiantElementSsrRuntime): void {\n\t(globalThis as GlobalSsrRuntimeState)[RADIANT_COMPONENT_SSR_RUNTIME_SYMBOL] = runtime;\n}\n"
6
- ],
7
- "mappings": "2PA6CA,IAAM,EAAuC,OAAO,IAAI,yCAAyC,EAW1F,SAAS,CAA2B,EAAyC,CACnF,OAAQ,WAAqC,GASvC,SAAS,CAAgC,CAAC,EAAyC,CACxF,WAAqC,GAAwC",
8
- "debugId": "7A43EF7E4BF0DC2964756E2164756E21",
9
- "names": []
10
- }
@@ -1,3 +0,0 @@
1
- var x=((t)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(n,i)=>(typeof require<"u"?require:n)[i]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});function p(t){switch(t){case Array:return"array";case Boolean:return"boolean";case Number:return"number";case Object:return"object";case String:return"string"}}function Q(t){switch(typeof t){case"boolean":return"boolean";case"number":return"number";case"string":return"string"}if(Array.isArray(t))return"array";if(Object.prototype.toString.call(t)==="[object Object]")return"object"}function W(t){switch(t){case Number:return 0;case String:return"";case Boolean:return!1;default:return null}}function Z(t){try{return JSON.parse(t)}catch{throw TypeError("Invalid JSON string")}}var C={array(t){let n=Z(t);if(!Array.isArray(n))throw TypeError(`Expected an array but got a value of type "${typeof n}"`);return n},boolean(t){return!(t==="0"||String(t).toLowerCase()==="false")},number(t){return Number(t.replace(/_/g,""))},object(t){let n=JSON.parse(t);if(n===null||typeof n!=="object"||Array.isArray(n))throw TypeError(`expected value of type "object" but instead got value "${t}" of type "${Q(n)}"`);return n},string(t){return t}},c={default:H,array:h,object:h};function h(t){return JSON.stringify(t)}function H(t){return`${t}`}function d(t,n){let i=p(n);if(!i)throw TypeError(`[radiant-element] Unknown type "${n}"`);return C[i](t)}function P(t,n){let i=p(n);if(!i)throw TypeError(`[radiant-element] Unknown type "${n}"`);return(c[i]??c.default??H)(t)}function J(t){return typeof t==="boolean"}function k(t){return typeof t==="number"}function I(t){return typeof t==="string"}function U(t){return Array.isArray(t)}function y(t){return typeof t==="object"&&!Array.isArray(t)&&t!==null}function G(t,n){switch(t){case Boolean:return J(n);case Number:return k(n);case String:return I(n);case Array:return U(n);case Object:return y(n);default:return!1}}var X=(t,n,i,r)=>{if(n===Boolean){let s=t.getAttribute(i);if(s===null)return r;return s===""?!0:d(s,n)}let o=t.getAttribute(i);return o!==null?d(o,n):r??W(n)};var e=Symbol.for("@ecopages/radiant.customElementTagName");function N(t,n){t[e]=n}function $(t){return t[e]}var f=Symbol.for("@ecopages/radiant.ssr-context-provider-resolver");function b(){return globalThis}function z(t){b()[f]=t}function K(t){return b()[f]?.(t)}var g;function S(){if(g!==void 0)return g;try{let{AsyncLocalStorage:t}=(()=>{throw new Error("Cannot require module "+"node:async_hooks");})();return g=new t,g}catch{return g=null,null}}var R=Symbol.for("@ecopages/radiant.ssr-context-fallback-stack");function j(){let t=globalThis;return t[R]??=[],t[R]}function q(t){if(t.length===0)return()=>{return};let n=new Map;for(let o of t)n.set(o.getContextKey(),o);let i=S();if(i){let o=i.getStore()??[],s=[...o,n];return i.enterWith(s),()=>{i.enterWith(o)}}let r=j();return r.push(n),()=>{let o=r.lastIndexOf(n);if(o>=0)r.splice(o,1)}}function D(t){let n=S()?.getStore()??j();for(let i=n.length-1;i>=0;i-=1){let r=n[i]?.get(t);if(r)return r}return}function L(t){let n=D(t);if(!n)return;return n.getContext()}z((t)=>D(t));class B{host;constructor(t){this.host=t}renderHost(){return{nodeType:1,outerHTML:this.renderHostToString({mode:"hydrate"})}}renderHostToString(t={},n=this.getHostAttributes()){let i=this.getTagName(),r=q(this.host.getContextProviders());try{return`<${i}${F(n)}>${this.renderHostContent(t)}</${i}>`}finally{r()}}renderHostContent(t){let n=this.host.renderToString(t),i=this.host.getAuthoredHydrationScriptMarkup?.()??"",r=this.host.getSlotProjectionScriptTag?.()??"";if(!(t.mode==="hydrate"||t.mode===void 0&&t.hydrate===!0))return`${n}${i}${r}`;let s=this.host.getHydrationBindings().map((m)=>m.renderHydrationScriptTag()).filter((m)=>typeof m==="string").join("");return`${n}${r}${s}`}getHostAttributes(){let t={},n=new Set;for(let i of this.host.getReactiveProperties()){let r=this.host.getPropertyValue(i.name);if(r===void 0||r===null||r===!1)continue;t[i.attribute]=String(i.converter.toAttribute(r)),n.add(i.attribute)}for(let i of this.host.getReactivePropDefinitions()){let r=i.options.attribute??i.name;if(n.has(r))continue;let o=this.host.getPropertyValue(i.name);if(o===void 0||o===null||o===!1)continue;t[r]=String(P(o,i.options.type)),n.add(r)}for(let i of this.host.listAttributeNames()){let r=this.host.getAttributeValue(i);if(r!==null)t[i]=r}return t}getTagName(){let t=$(this.host.constructor);if(!t)throw Error(`${this.host.constructor.name} is missing @customElement metadata.`);return t}}function F(t){return Object.entries(t).map(([n,i])=>` ${n}="${w(i)}"`).join("")}function w(t){return t.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}export{B as RadiantElementSsrService};
2
-
3
- //# debugId=53C9F45CFD02739C64756E2164756E21
@@ -1,14 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/utils/attribute-utils.ts", "../src/core/custom-element-metadata.ts", "../src/context/context-ssr-bridge.ts", "../src/server/context-ssr.ts", "../src/core/radiant-component-ssr.ts"],
4
- "sourcesContent": [
5
- "import type { RadiantElement } from '../core/radiant-element';\n\nexport type AttributeTypeConstant = typeof Array | typeof Boolean | typeof Number | typeof Object | typeof String;\n\nexport type AttributeTypeDefault = Array<unknown> | boolean | number | Record<string, unknown> | string;\n\n/**\n * Parses the given attribute type constant and returns its corresponding string representation.\n *\n * @param constant - The attribute type constant to parse.\n * @returns The string representation of the attribute type constant.\n */\nexport function parseAttributeTypeConstant(constant?: AttributeTypeConstant) {\n\tswitch (constant) {\n\t\tcase Array:\n\t\t\treturn 'array';\n\t\tcase Boolean:\n\t\t\treturn 'boolean';\n\t\tcase Number:\n\t\t\treturn 'number';\n\t\tcase Object:\n\t\t\treturn 'object';\n\t\tcase String:\n\t\t\treturn 'string';\n\t}\n}\n\n/**\n * Parses the attribute type default value and returns its type as a string.\n *\n * @param defaultValue - The default value of the attribute type.\n * @returns The type of the default value as a string.\n */\nexport function parseAttributeTypeDefault(defaultValue?: AttributeTypeDefault) {\n\tswitch (typeof defaultValue) {\n\t\tcase 'boolean':\n\t\t\treturn 'boolean';\n\t\tcase 'number':\n\t\t\treturn 'number';\n\t\tcase 'string':\n\t\t\treturn 'string';\n\t}\n\n\tif (Array.isArray(defaultValue)) return 'array';\n\tif (Object.prototype.toString.call(defaultValue) === '[object Object]') return 'object';\n}\n\n/**\n * Returns the default value for a given attribute type.\n *\n * @param type - The attribute type constant.\n * @returns The default value for the specified attribute type.\n */\nexport function defaultValueForType(type: AttributeTypeConstant): unknown {\n\tswitch (type) {\n\t\tcase Number:\n\t\t\treturn 0;\n\t\tcase String:\n\t\t\treturn '';\n\t\tcase Boolean:\n\t\t\treturn false;\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\ntype Reader = (value: string) => number | string | boolean | object | unknown[];\n\n/**\n * Utility function to parse a JSON string safely\n */\nfunction parseJSON<T>(value: string): T {\n\ttry {\n\t\treturn JSON.parse(value);\n\t} catch {\n\t\tthrow new TypeError('Invalid JSON string');\n\t}\n}\n\n/**\n * Object that maps attribute types to reader functions.\n * @type {Object.<string, Reader>}\n */\nconst readers: { [type: string]: Reader } = {\n\tarray(value: string): unknown[] {\n\t\tconst array = parseJSON<unknown[]>(value);\n\t\tif (!Array.isArray(array)) {\n\t\t\tthrow new TypeError(`Expected an array but got a value of type \"${typeof array}\"`);\n\t\t}\n\t\treturn array;\n\t},\n\n\tboolean(value: string): boolean {\n\t\treturn !(value === '0' || String(value).toLowerCase() === 'false');\n\t},\n\n\tnumber(value: string): number {\n\t\tconst number = Number(value.replace(/_/g, ''));\n\t\treturn number;\n\t},\n\n\tobject(value: string): object {\n\t\tconst object = JSON.parse(value);\n\t\tif (object === null || typeof object !== 'object' || Array.isArray(object)) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseAttributeTypeDefault(\n\t\t\t\t\tobject,\n\t\t\t\t)}\"`,\n\t\t\t);\n\t\t}\n\t\treturn object;\n\t},\n\n\tstring(value: string): string {\n\t\treturn value;\n\t},\n};\n\ntype Writer = (value: unknown) => string;\n\n/**\n * Object that maps attribute types to writer functions.\n * @type {Object.<string, Writer>}\n */\nconst writers: { [type: string]: Writer } = {\n\tdefault: writeString,\n\tarray: writeJSON,\n\tobject: writeJSON,\n};\n\nfunction writeJSON(value: unknown) {\n\treturn JSON.stringify(value);\n}\n\nfunction writeString(value: unknown) {\n\treturn `${value}`;\n}\n\n/**\n * Reads the attribute value based on the provided type.\n * @param value - The attribute value to be read.\n * @param type - The type of the attribute.\n * @returns The parsed attribute value.\n * @throws {TypeError} If the provided type is unknown.\n */\nexport function readAttributeValue(value: string, type: AttributeTypeConstant) {\n\tconst readerType = parseAttributeTypeConstant(type);\n\tif (!readerType) throw new TypeError(`[radiant-element] Unknown type \"${type}\"`);\n\treturn readers[readerType]!(value);\n}\n\nexport type ReadAttributeValueReturnType = ReturnType<typeof readAttributeValue>;\n\n/**\n * Writes the attribute value based on the provided type.\n *\n * @param value - The value to be written.\n * @param type - The type of the attribute.\n * @returns The written attribute value.\n * @throws {TypeError} If the provided type is unknown.\n */\nexport function writeAttributeValue(value: unknown, type: AttributeTypeConstant) {\n\tconst writerType = parseAttributeTypeConstant(type);\n\tif (!writerType) throw new TypeError(`[radiant-element] Unknown type \"${type}\"`);\n\tconst writer: Writer = writers[writerType] ?? writers.default ?? writeString;\n\treturn writer(value);\n}\n\nexport type WriteAttributeValueReturnType = ReturnType<typeof writeAttributeValue>;\n\n/*\n * Type guard functions for each type in AttributeTypeConstant\n */\nfunction isBoolean(value: unknown): value is boolean {\n\treturn typeof value === 'boolean';\n}\n\nfunction isNumber(value: unknown): value is number {\n\treturn typeof value === 'number';\n}\n\nfunction isString(value: unknown): value is string {\n\treturn typeof value === 'string';\n}\n\nfunction isArray(value: unknown): value is Array<unknown> {\n\treturn Array.isArray(value);\n}\n\nfunction isObject(value: unknown): value is object {\n\treturn typeof value === 'object' && !Array.isArray(value) && value !== null;\n}\n\n/*\n * Check function to ensure defaultValue matches the type\n */\nexport function isValueOfType(type: AttributeTypeConstant, defaultValue: unknown): boolean {\n\tswitch (type) {\n\t\tcase Boolean:\n\t\t\treturn isBoolean(defaultValue);\n\t\tcase Number:\n\t\t\treturn isNumber(defaultValue);\n\t\tcase String:\n\t\t\treturn isString(defaultValue);\n\t\tcase Array:\n\t\t\treturn isArray(defaultValue);\n\t\tcase Object:\n\t\t\treturn isObject(defaultValue);\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nexport const getInitialValue = (\n\ttarget: RadiantElement,\n\ttype: AttributeTypeConstant,\n\tattributeKey: string,\n\tdefaultValue: unknown,\n) => {\n\tif (type === Boolean) {\n\t\tconst attributeValue = target.getAttribute(attributeKey);\n\t\tif (attributeValue === null) {\n\t\t\treturn defaultValue;\n\t\t}\n\n\t\treturn attributeValue === '' ? true : readAttributeValue(attributeValue, type);\n\t}\n\n\tconst attributeValue = target.getAttribute(attributeKey);\n\treturn attributeValue !== null\n\t\t? readAttributeValue(attributeValue, type)\n\t\t: (defaultValue ?? (defaultValueForType(type) as typeof defaultValue));\n};\n",
6
- "export const CUSTOM_ELEMENT_TAG_NAME = Symbol.for('@ecopages/radiant.customElementTagName');\n\ntype CustomElementConstructorWithMetadata = CustomElementConstructor & {\n\t[CUSTOM_ELEMENT_TAG_NAME]?: string;\n};\n\n/**\n * Sets the custom element tag name for a given constructor.\n * This is used internally to associate a class with its custom element tag, which is necessary for features like hydration and SSR support.\n * @param target The constructor of the custom element.\n * @param tagName The tag name to associate with the custom element.\n */\nexport function setCustomElementTagName(target: CustomElementConstructor, tagName: string): void {\n\t(target as CustomElementConstructorWithMetadata)[CUSTOM_ELEMENT_TAG_NAME] = tagName;\n}\n\n/**\n * Retrieves the custom element tag name associated with a given constructor.\n * @param target The constructor of the custom element.\n * @returns The tag name associated with the custom element, or `undefined` if not set.\n */\nexport function getCustomElementTagName(target: CustomElementConstructor): string | undefined {\n\treturn (target as CustomElementConstructorWithMetadata)[CUSTOM_ELEMENT_TAG_NAME];\n}\n",
7
- "import type { SsrSerializableContextProvider } from './context-provider';\nimport type { UnknownContext } from './types';\n\ntype SsrContextProviderResolver = (context: UnknownContext) => SsrSerializableContextProvider | undefined;\n\nconst SSR_CONTEXT_PROVIDER_RESOLVER_SYMBOL = Symbol.for('@ecopages/radiant.ssr-context-provider-resolver');\n\ntype GlobalResolverScope = typeof globalThis & {\n\t[SSR_CONTEXT_PROVIDER_RESOLVER_SYMBOL]?: SsrContextProviderResolver;\n};\n\nfunction getGlobalResolverScope(): GlobalResolverScope {\n\treturn globalThis as GlobalResolverScope;\n}\n\n/**\n * Installs the ambient SSR provider resolver used by shared context runtime helpers.\n *\n * Server-side rendering infrastructure owns the actual provider stack storage and\n * publishes a lookup function here so client/runtime code does not need to import\n * server-oriented modules.\n */\nexport function installSsrContextProviderResolver(resolver: SsrContextProviderResolver): void {\n\tgetGlobalResolverScope()[SSR_CONTEXT_PROVIDER_RESOLVER_SYMBOL] = resolver;\n}\n\n/**\n * Resolves an ambient SSR provider when a server render has published one.\n */\nexport function resolveAmbientSsrContextProvider(context: UnknownContext): SsrSerializableContextProvider | undefined {\n\treturn getGlobalResolverScope()[SSR_CONTEXT_PROVIDER_RESOLVER_SYMBOL]?.(context);\n}\n",
8
- "import type { AsyncLocalStorage } from 'node:async_hooks';\nimport type { SsrSerializableContextProvider } from '../context/context-provider';\nimport { installSsrContextProviderResolver } from '../context/context-ssr-bridge';\nimport type { ContextType, UnknownContext } from '../context/types';\n\ntype ProviderFrame = Map<UnknownContext, SsrSerializableContextProvider>;\ntype ProviderStack = ProviderFrame[];\n\nlet resolvedAsyncLocalStorage: AsyncLocalStorage<ProviderStack> | null | undefined;\n\n/**\n * Lazily resolves `AsyncLocalStorage` from `node:async_hooks`.\n *\n * The dynamic `require` is necessary because browser-based SSR tests import\n * this server-oriented module directly. A top-level static import would break\n * those browser bundles even though normal application SSR runs on the server.\n *\n * On the server (Node.js, Bun, Cloudflare Workers) the import always succeeds.\n * In browser test environments where SSR rendering is exercised without a real\n * server, the fallback global stack is used instead.\n */\nfunction getAsyncLocalStorage(): AsyncLocalStorage<ProviderStack> | null {\n\tif (resolvedAsyncLocalStorage !== undefined) {\n\t\treturn resolvedAsyncLocalStorage;\n\t}\n\n\ttry {\n\t\tconst { AsyncLocalStorage: ALS } = require('node:async_hooks') as typeof import('node:async_hooks');\n\t\tresolvedAsyncLocalStorage = new ALS<ProviderStack>();\n\t\treturn resolvedAsyncLocalStorage;\n\t} catch {\n\t\tresolvedAsyncLocalStorage = null;\n\t\treturn null;\n\t}\n}\n\nconst SSR_CONTEXT_FALLBACK_STACK_SYMBOL = Symbol.for('@ecopages/radiant.ssr-context-fallback-stack');\n\nfunction getFallbackStack(): ProviderStack {\n\tconst g = globalThis as typeof globalThis & { [SSR_CONTEXT_FALLBACK_STACK_SYMBOL]?: ProviderStack };\n\tg[SSR_CONTEXT_FALLBACK_STACK_SYMBOL] ??= [];\n\treturn g[SSR_CONTEXT_FALLBACK_STACK_SYMBOL];\n}\n\n/**\n * Pushes a temporary provider frame onto the SSR context stack.\n *\n * On the server, each call creates an isolated `AsyncLocalStorage` context so\n * concurrent renders cannot corrupt each other.\n *\n * In browser test environments where `AsyncLocalStorage` is unavailable, a\n * synchronous global stack is used as a fallback.\n */\nexport function withSsrContextProviders(providers: readonly SsrSerializableContextProvider[]): () => void {\n\tif (providers.length === 0) {\n\t\treturn () => undefined;\n\t}\n\n\tconst frame = new Map<UnknownContext, SsrSerializableContextProvider>();\n\n\tfor (const provider of providers) {\n\t\tframe.set(provider.getContextKey(), provider);\n\t}\n\n\tconst als = getAsyncLocalStorage();\n\n\tif (als) {\n\t\tconst parentStack = als.getStore() ?? [];\n\t\tconst childStack = [...parentStack, frame];\n\t\tals.enterWith(childStack);\n\n\t\treturn () => {\n\t\t\tals.enterWith(parentStack);\n\t\t};\n\t}\n\n\tconst stack = getFallbackStack();\n\tstack.push(frame);\n\n\treturn () => {\n\t\tconst index = stack.lastIndexOf(frame);\n\t\tif (index >= 0) stack.splice(index, 1);\n\t};\n}\n\n/**\n * Resolves the nearest SSR-visible provider for a given context token.\n *\n * Lookup walks the provider frames from innermost to outermost so nested host\n * serialization behaves the same way as runtime context resolution in the DOM.\n */\nexport function resolveSsrContextProvider<T extends UnknownContext>(\n\tcontext: T,\n): SsrSerializableContextProvider | undefined {\n\tconst store = getAsyncLocalStorage()?.getStore() ?? getFallbackStack();\n\n\tfor (let index = store.length - 1; index >= 0; index -= 1) {\n\t\tconst provider = store[index]?.get(context);\n\n\t\tif (provider) {\n\t\t\treturn provider;\n\t\t}\n\t}\n\n\treturn undefined;\n}\n\n/**\n * Resolves the current SSR-visible value for a given context token.\n *\n * This is the ergonomic helper consumed by SSR-aware decorators and component\n * render paths when they only need the context payload instead of the full\n * provider instance.\n */\nexport function resolveSsrContextValue<T extends UnknownContext>(context: T): ContextType<T> | undefined {\n\tconst provider = resolveSsrContextProvider(context);\n\n\tif (!provider) {\n\t\treturn undefined;\n\t}\n\n\treturn provider.getContext() as ContextType<T>;\n}\n\ninstallSsrContextProviderResolver((context) => resolveSsrContextProvider(context));\n",
9
- "import type { JsxRenderable } from '@ecopages/jsx';\nimport type { RenderToStringOptions } from '@ecopages/jsx/server';\nimport type { SsrSerializableContextProvider } from '../context/context-provider';\nimport { withSsrContextProviders } from '../server/context-ssr';\nimport { getCustomElementTagName } from './custom-element-metadata';\nimport type { ReactiveProperty } from './radiant-element';\nimport type { ReactivePropDefinition } from './reactive-prop-metadata';\nimport type { SsrSerializableHydrationBinding } from './ssr-hydration-binding';\nimport { writeAttributeValue } from '../utils/attribute-utils';\n\ntype RadiantElementSsrHost = {\n\tconstructor: CustomElementConstructor;\n\tgetAuthoredHydrationScriptMarkup?: () => string | undefined;\n\tgetContextProviders: () => SsrSerializableContextProvider[];\n\tgetHydrationBindings: () => SsrSerializableHydrationBinding[];\n\tgetSlotProjectionScriptTag?: () => string | undefined;\n\trenderToString: (options?: RenderToStringOptions) => string;\n\tgetReactiveProperties: () => ReactiveProperty[];\n\tgetReactivePropDefinitions: () => ReactivePropDefinition[];\n\tgetPropertyValue: (name: string) => unknown;\n\tlistAttributeNames: () => string[];\n\tgetAttributeValue: (name: string) => string | null;\n};\n\nexport class RadiantElementSsrService {\n\tconstructor(private readonly host: RadiantElementSsrHost) {}\n\n\tpublic renderHost(): JsxRenderable {\n\t\treturn {\n\t\t\tnodeType: 1,\n\t\t\touterHTML: this.renderHostToString({ mode: 'hydrate' }),\n\t\t};\n\t}\n\n\tpublic renderHostToString(options: RenderToStringOptions = {}, attributes = this.getHostAttributes()): string {\n\t\tconst tagName = this.getTagName();\n\t\tconst restoreSsrContexts = withSsrContextProviders(this.host.getContextProviders());\n\n\t\ttry {\n\t\t\treturn `<${tagName}${serializeHostAttributes(attributes)}>${this.renderHostContent(options)}</${tagName}>`;\n\t\t} finally {\n\t\t\trestoreSsrContexts();\n\t\t}\n\t}\n\n\tprivate renderHostContent(options: RenderToStringOptions): string {\n\t\tconst hostContent = this.host.renderToString(options);\n\t\tconst authoredHydrationMarkup = this.host.getAuthoredHydrationScriptMarkup?.() ?? '';\n\t\tconst slotProjectionScript = this.host.getSlotProjectionScriptTag?.() ?? '';\n\t\tconst hydrate = options.mode === 'hydrate' || (options.mode === undefined && options.hydrate === true);\n\n\t\tif (!hydrate) {\n\t\t\treturn `${hostContent}${authoredHydrationMarkup}${slotProjectionScript}`;\n\t\t}\n\n\t\tconst hydrationScripts = this.host\n\t\t\t.getHydrationBindings()\n\t\t\t.map((binding) => binding.renderHydrationScriptTag())\n\t\t\t.filter((markup): markup is string => typeof markup === 'string')\n\t\t\t.join('');\n\n\t\treturn `${hostContent}${slotProjectionScript}${hydrationScripts}`;\n\t}\n\n\tpublic getHostAttributes(): Record<string, string> {\n\t\tconst attributes: Record<string, string> = {};\n\t\tconst seenAttributes = new Set<string>();\n\n\t\tfor (const property of this.host.getReactiveProperties()) {\n\t\t\tconst currentValue = this.host.getPropertyValue(property.name);\n\t\t\tif (currentValue === undefined || currentValue === null || currentValue === false) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tattributes[property.attribute] = String(property.converter.toAttribute(currentValue));\n\t\t\tseenAttributes.add(property.attribute);\n\t\t}\n\n\t\tfor (const definition of this.host.getReactivePropDefinitions()) {\n\t\t\tconst attributeName = definition.options.attribute ?? definition.name;\n\n\t\t\tif (seenAttributes.has(attributeName)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst currentValue = this.host.getPropertyValue(definition.name);\n\n\t\t\tif (currentValue === undefined || currentValue === null || currentValue === false) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tattributes[attributeName] = String(writeAttributeValue(currentValue, definition.options.type));\n\t\t\tseenAttributes.add(attributeName);\n\t\t}\n\n\t\tfor (const attributeName of this.host.listAttributeNames()) {\n\t\t\tconst attributeValue = this.host.getAttributeValue(attributeName);\n\t\t\tif (attributeValue !== null) {\n\t\t\t\tattributes[attributeName] = attributeValue;\n\t\t\t}\n\t\t}\n\n\t\treturn attributes;\n\t}\n\n\tprivate getTagName(): string {\n\t\tconst tagName = getCustomElementTagName(this.host.constructor);\n\n\t\tif (!tagName) {\n\t\t\tthrow new Error(`${this.host.constructor.name} is missing @customElement metadata.`);\n\t\t}\n\n\t\treturn tagName;\n\t}\n}\n\nfunction serializeHostAttributes(attributes: Record<string, string>): string {\n\treturn Object.entries(attributes)\n\t\t.map(([name, value]) => ` ${name}=\"${escapeAttribute(value)}\"`)\n\t\t.join('');\n}\n\nfunction escapeAttribute(value: string): string {\n\treturn value.replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n"
10
- ],
11
- "mappings": "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",
12
- "debugId": "53C9F45CFD02739C64756E2164756E21",
13
- "names": []
14
- }
@@ -1,9 +0,0 @@
1
- import { type RadiantElementSsrRuntime } from '../core/radiant-component-ssr-registry';
2
- /**
3
- * Registers the shared Radiant SSR runtime if it is not already present.
4
- *
5
- * Server entrypoints call this eagerly so instance SSR methods, nested JSX
6
- * custom-element SSR, and portable server helpers all share one implementation
7
- * and one bridge-resolution strategy.
8
- */
9
- export declare function ensureRadiantElementSsrRuntimeRegistered(): RadiantElementSsrRuntime;
@@ -1,3 +0,0 @@
1
- var G=((t)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(i,r)=>(typeof require<"u"?require:i)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var H=Symbol.for("@ecopages/radiant.component-ssr-runtime");function R(){return globalThis[H]}function $(t){globalThis[H]=t}function D(t){switch(t){case Array:return"array";case Boolean:return"boolean";case Number:return"number";case Object:return"object";case String:return"string"}}function U(t){switch(typeof t){case"boolean":return"boolean";case"number":return"number";case"string":return"string"}if(Array.isArray(t))return"array";if(Object.prototype.toString.call(t)==="[object Object]")return"object"}function X(t){switch(t){case Number:return 0;case String:return"";case Boolean:return!1;default:return null}}function A(t){try{return JSON.parse(t)}catch{throw TypeError("Invalid JSON string")}}var Y={array(t){let i=A(t);if(!Array.isArray(i))throw TypeError(`Expected an array but got a value of type "${typeof i}"`);return i},boolean(t){return!(t==="0"||String(t).toLowerCase()==="false")},number(t){return Number(t.replace(/_/g,""))},object(t){let i=JSON.parse(t);if(i===null||typeof i!=="object"||Array.isArray(i))throw TypeError(`expected value of type "object" but instead got value "${t}" of type "${U(i)}"`);return i},string(t){return t}},p={default:z,array:m,object:m};function m(t){return JSON.stringify(t)}function z(t){return`${t}`}function d(t,i){let r=D(i);if(!r)throw TypeError(`[radiant-element] Unknown type "${i}"`);return Y[r](t)}function j(t,i){let r=D(i);if(!r)throw TypeError(`[radiant-element] Unknown type "${i}"`);return(p[r]??p.default??z)(t)}function B(t){return typeof t==="boolean"}function K(t){return typeof t==="number"}function E(t){return typeof t==="string"}function N(t){return Array.isArray(t)}function M(t){return typeof t==="object"&&!Array.isArray(t)&&t!==null}function rt(t,i){switch(t){case Boolean:return B(i);case Number:return K(i);case String:return E(i);case Array:return N(i);case Object:return M(i);default:return!1}}var nt=(t,i,r,n)=>{if(i===Boolean){let s=t.getAttribute(r);if(s===null)return n;return s===""?!0:d(s,i)}let o=t.getAttribute(r);return o!==null?d(o,i):n??X(i)};var C=Symbol.for("@ecopages/radiant.customElementTagName");function st(t,i){t[C]=i}function W(t){return t[C]}var h=Symbol.for("@ecopages/radiant.reactivePropDefinitions");function gt(t,i,r){let n=t.constructor,o=n[h]??[];if(o.some((s)=>s.name===i))return;o.push({name:i,options:r}),n[h]=o}function I(t){return(t.constructor[h]??[]).slice()}var q=Symbol.for("@ecopages/radiant.ssr-context-provider-resolver");function x(){return globalThis}function y(t){x()[q]=t}function Pt(t){return x()[q]?.(t)}var c;function Q(){if(c!==void 0)return c;try{let{AsyncLocalStorage:t}=(()=>{throw new Error("Cannot require module "+"node:async_hooks");})();return c=new t,c}catch{return c=null,null}}var k=Symbol.for("@ecopages/radiant.ssr-context-fallback-stack");function Z(){let t=globalThis;return t[k]??=[],t[k]}function F(t){if(t.length===0)return()=>{return};let i=new Map;for(let o of t)i.set(o.getContextKey(),o);let r=Q();if(r){let o=r.getStore()??[],s=[...o,i];return r.enterWith(s),()=>{r.enterWith(o)}}let n=Z();return n.push(i),()=>{let o=n.lastIndexOf(i);if(o>=0)n.splice(o,1)}}function J(t){let i=Q()?.getStore()??Z();for(let r=i.length-1;r>=0;r-=1){let n=i[r]?.get(t);if(n)return n}return}function Rt(t){let i=J(t);if(!i)return;return i.getContext()}y((t)=>J(t));class P{host;constructor(t){this.host=t}renderHost(){return{nodeType:1,outerHTML:this.renderHostToString({mode:"hydrate"})}}renderHostToString(t={},i=this.getHostAttributes()){let r=this.getTagName(),n=F(this.host.getContextProviders());try{return`<${r}${O(i)}>${this.renderHostContent(t)}</${r}>`}finally{n()}}renderHostContent(t){let i=this.host.renderToString(t),r=this.host.getAuthoredHydrationScriptMarkup?.()??"",n=this.host.getSlotProjectionScriptTag?.()??"";if(!(t.mode==="hydrate"||t.mode===void 0&&t.hydrate===!0))return`${i}${r}${n}`;let s=this.host.getHydrationBindings().map((g)=>g.renderHydrationScriptTag()).filter((g)=>typeof g==="string").join("");return`${i}${n}${s}`}getHostAttributes(){let t={},i=new Set;for(let r of this.host.getReactiveProperties()){let n=this.host.getPropertyValue(r.name);if(n===void 0||n===null||n===!1)continue;t[r.attribute]=String(r.converter.toAttribute(n)),i.add(r.attribute)}for(let r of this.host.getReactivePropDefinitions()){let n=r.options.attribute??r.name;if(i.has(n))continue;let o=this.host.getPropertyValue(r.name);if(o===void 0||o===null||o===!1)continue;t[n]=String(j(o,r.options.type)),i.add(n)}for(let r of this.host.listAttributeNames()){let n=this.host.getAttributeValue(r);if(n!==null)t[r]=n}return t}getTagName(){let t=W(this.host.constructor);if(!t)throw Error(`${this.host.constructor.name} is missing @customElement metadata.`);return t}}function O(t){return Object.entries(t).map(([i,r])=>` ${i}="${T(r)}"`).join("")}function T(t){return t.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}import{renderToString as L}from"@ecopages/jsx/server";import{withServerCustomElementRenderHook as v}from"@ecopages/jsx/server";var V=Symbol.for("@ecopages/jsx.active-ssr-hydrate"),f=new WeakSet;function _(t){return{nodeType:1,outerHTML:S(t,{mode:"hydrate"})}}function S(t,i={}){return w(t).renderHostToString(i,e(t))}function e(t){let i=t;if(f.has(t))return w(t).getHostAttributes();f.add(t);try{return i.getHostSsrAttributes()}finally{f.delete(t)}}function w(t){let i=t;return new P({constructor:i.constructor,getAuthoredHydrationScriptMarkup:()=>i.getAuthoredHydrationScriptMarkup(),getHydrationBindings:()=>i.getHydrationBindings(),getSlotProjectionScriptTag:()=>i.getSlotProjectionScriptTag(),renderToString:(r)=>i.renderToString(r),getContextProviders:()=>i.getContextProviders(),getReactiveProperties:()=>i.getReactiveProperties(),getReactivePropDefinitions:()=>I(t),getPropertyValue:(r)=>i[r],listAttributeNames:()=>typeof i.getAttributeNames==="function"?i.getAttributeNames():[],getAttributeValue:(r)=>i.getAttribute(r)})}function a(t){return v(({instance:i})=>{let r=b(i);if(!r?.renderHostToString)return;let n=r.renderHostToString;return{nodeType:1,get outerHTML(){let o=u();return n({hydrate:o,mode:o?"hydrate":"plain"})}}},t)}function b(t){return t.resolveSsrRenderBridge?.()}function u(){return globalThis[V]===!0}function l(){let t=R();if(t)return t;let i={getHostAttributes:e,renderHost:_,renderHostToString:S,resolveRenderBridge:b,renderView:(r,n={})=>{let o=r;return a(()=>L(o.resolveTrackedRenderOutput().value,n))}};return $(i),i}l();export{l as ensureRadiantElementSsrRuntimeRegistered};
2
-
3
- //# debugId=B689DC1F8CF2629364756E2164756E21