frontend-hamroun 1.2.79 → 1.2.80

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 (219) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +129 -1513
  3. package/bin/cli.js +505 -144
  4. package/dist/index.cjs +2 -0
  5. package/dist/index.cjs.map +1 -0
  6. package/dist/index.client.cjs +2 -0
  7. package/dist/index.client.cjs.map +1 -0
  8. package/dist/index.client.js +26 -0
  9. package/dist/index.client.js.map +1 -0
  10. package/dist/index.js +298 -1
  11. package/dist/index.js.map +1 -0
  12. package/dist/jsx-runtime.cjs +2 -0
  13. package/dist/jsx-runtime.cjs.map +1 -0
  14. package/dist/jsx-runtime.js +93 -1
  15. package/dist/jsx-runtime.js.map +1 -0
  16. package/dist/renderer-Bo9zkUZ_.js +52 -0
  17. package/dist/renderer-Bo9zkUZ_.js.map +1 -0
  18. package/dist/renderer-Din1y3YM.cjs +2 -0
  19. package/dist/renderer-Din1y3YM.cjs.map +1 -0
  20. package/dist/server-renderer-CqIpQ-od.cjs +2 -0
  21. package/dist/server-renderer-CqIpQ-od.cjs.map +1 -0
  22. package/dist/server-renderer-QHt45Ip2.js +255 -0
  23. package/dist/server-renderer-QHt45Ip2.js.map +1 -0
  24. package/dist/server-renderer.cjs +2 -0
  25. package/dist/server-renderer.cjs.map +1 -0
  26. package/dist/server-renderer.js +5 -1
  27. package/dist/server-renderer.js.map +1 -0
  28. package/package.json +77 -120
  29. package/templates/basic-app/build.js +22 -0
  30. package/templates/basic-app/bun.lock +196 -0
  31. package/templates/basic-app/dev.js +27 -0
  32. package/templates/basic-app/docs/rapport_pfe.aux +27 -27
  33. package/templates/basic-app/docs/rapport_pfe.out +10 -10
  34. package/templates/basic-app/docs/rapport_pfe.toc +14 -14
  35. package/templates/basic-app/esbuild.config.js +28 -0
  36. package/templates/basic-app/index.html +1 -1
  37. package/templates/{fullstack-app → basic-app}/package-lock.json +4185 -5094
  38. package/templates/basic-app/package.json +29 -28
  39. package/templates/basic-app/server.js +24 -0
  40. package/templates/basic-app/src/App.tsx +26 -0
  41. package/templates/basic-app/src/client.tsx +11 -0
  42. package/templates/basic-app/src/components/Counter.tsx +18 -0
  43. package/templates/basic-app/src/jsx-shim.ts +4 -0
  44. package/templates/basic-app/src/main.tsx +0 -1
  45. package/templates/basic-app/src/server.ts +52 -0
  46. package/templates/basic-app/tsconfig.server.json +11 -0
  47. package/templates/fullstack-app/build/main.css +874 -874
  48. package/templates/fullstack-app/build/main.css.map +7 -7
  49. package/templates/fullstack-app/build/main.js +967 -967
  50. package/templates/fullstack-app/build/main.js.map +7 -7
  51. package/templates/fullstack-app/public/styles.css +768 -768
  52. package/templates/go/example.go +99 -154
  53. package/templates/go-wasm-app/babel.config.js +2 -8
  54. package/templates/go-wasm-app/package.json +12 -21
  55. package/templates/go-wasm-app/public/wasm/wasm_exec.js +561 -561
  56. package/templates/go-wasm-app/public/wasm/wasm_exec_node.js +39 -39
  57. package/templates/go-wasm-app/server.js +510 -59
  58. package/templates/go-wasm-app/src/app.js +2 -22
  59. package/templates/go-wasm-app/src/wasm/example.go +75 -75
  60. package/templates/go-wasm-app/vite.config.js +5 -16
  61. package/templates/ssr-template/server.js +2 -2
  62. package/templates/ssr-template/vite.config.js +5 -16
  63. package/dist/Counter.d.ts +0 -0
  64. package/dist/batch/package.json +0 -16
  65. package/dist/client-router/package.json +0 -16
  66. package/dist/component/package.json +0 -16
  67. package/dist/context/package.json +0 -16
  68. package/dist/event-bus/package.json +0 -16
  69. package/dist/forms/package.json +0 -16
  70. package/dist/hooks/package.json +0 -16
  71. package/dist/hooks-0728361a.cjs +0 -1
  72. package/dist/hooks-b58f947c.js +0 -133
  73. package/dist/hooks.js +0 -1
  74. package/dist/hooks.mjs +0 -13
  75. package/dist/index.mjs +0 -137
  76. package/dist/jsx-runtime/package.json +0 -16
  77. package/dist/jsx-runtime.mjs +0 -64
  78. package/dist/lifecycle-events/package.json +0 -16
  79. package/dist/package.json +0 -71
  80. package/dist/render-component/package.json +0 -16
  81. package/dist/renderer/package.json +0 -16
  82. package/dist/renderer.js +0 -1
  83. package/dist/renderer.mjs +0 -27
  84. package/dist/router/package.json +0 -16
  85. package/dist/server/package.json +0 -17
  86. package/dist/server/src/batch.d.ts +0 -3
  87. package/dist/server/src/batch.js +0 -23
  88. package/dist/server/src/batch.js.map +0 -1
  89. package/dist/server/src/client-router.d.ts +0 -60
  90. package/dist/server/src/client-router.js +0 -210
  91. package/dist/server/src/client-router.js.map +0 -1
  92. package/dist/server/src/component.d.ts +0 -14
  93. package/dist/server/src/component.js +0 -106
  94. package/dist/server/src/component.js.map +0 -1
  95. package/dist/server/src/context.d.ts +0 -13
  96. package/dist/server/src/context.js +0 -21
  97. package/dist/server/src/context.js.map +0 -1
  98. package/dist/server/src/event-bus.d.ts +0 -23
  99. package/dist/server/src/event-bus.js +0 -75
  100. package/dist/server/src/event-bus.js.map +0 -1
  101. package/dist/server/src/forms.d.ts +0 -40
  102. package/dist/server/src/forms.js +0 -148
  103. package/dist/server/src/forms.js.map +0 -1
  104. package/dist/server/src/hooks.d.ts +0 -12
  105. package/dist/server/src/hooks.js +0 -170
  106. package/dist/server/src/hooks.js.map +0 -1
  107. package/dist/server/src/index.client.d.ts +0 -12
  108. package/dist/server/src/index.client.js +0 -14
  109. package/dist/server/src/index.client.js.map +0 -1
  110. package/dist/server/src/index.d.ts +0 -88
  111. package/dist/server/src/index.js +0 -79
  112. package/dist/server/src/index.js.map +0 -1
  113. package/dist/server/src/jsx-runtime/jsx-dev-runtime.d.ts +0 -1
  114. package/dist/server/src/jsx-runtime/jsx-dev-runtime.js +0 -2
  115. package/dist/server/src/jsx-runtime/jsx-dev-runtime.js.map +0 -1
  116. package/dist/server/src/jsx-runtime/jsx-runtime.d.ts +0 -4
  117. package/dist/server/src/jsx-runtime/jsx-runtime.js +0 -41
  118. package/dist/server/src/jsx-runtime/jsx-runtime.js.map +0 -1
  119. package/dist/server/src/jsx-runtime.d.ts +0 -20
  120. package/dist/server/src/jsx-runtime.js +0 -105
  121. package/dist/server/src/jsx-runtime.js.map +0 -1
  122. package/dist/server/src/lifecycle-events.d.ts +0 -108
  123. package/dist/server/src/lifecycle-events.js +0 -177
  124. package/dist/server/src/lifecycle-events.js.map +0 -1
  125. package/dist/server/src/renderComponent.d.ts +0 -13
  126. package/dist/server/src/renderComponent.js +0 -30
  127. package/dist/server/src/renderComponent.js.map +0 -1
  128. package/dist/server/src/renderer.d.ts +0 -2
  129. package/dist/server/src/renderer.js +0 -31
  130. package/dist/server/src/renderer.js.map +0 -1
  131. package/dist/server/src/router.d.ts +0 -55
  132. package/dist/server/src/router.js +0 -166
  133. package/dist/server/src/router.js.map +0 -1
  134. package/dist/server/src/server/api-router.d.ts +0 -15
  135. package/dist/server/src/server/api-router.js +0 -111
  136. package/dist/server/src/server/api-router.js.map +0 -1
  137. package/dist/server/src/server/auth.d.ts +0 -32
  138. package/dist/server/src/server/auth.js +0 -80
  139. package/dist/server/src/server/auth.js.map +0 -1
  140. package/dist/server/src/server/database.d.ts +0 -24
  141. package/dist/server/src/server/database.js +0 -135
  142. package/dist/server/src/server/database.js.map +0 -1
  143. package/dist/server/src/server/index.d.ts +0 -116
  144. package/dist/server/src/server/index.js +0 -508
  145. package/dist/server/src/server/index.js.map +0 -1
  146. package/dist/server/src/server/middleware.d.ts +0 -11
  147. package/dist/server/src/server/middleware.js +0 -46
  148. package/dist/server/src/server/middleware.js.map +0 -1
  149. package/dist/server/src/server/server.d.ts +0 -9
  150. package/dist/server/src/server/server.js +0 -87
  151. package/dist/server/src/server/server.js.map +0 -1
  152. package/dist/server/src/server/templates.d.ts +0 -30
  153. package/dist/server/src/server/templates.js +0 -208
  154. package/dist/server/src/server/templates.js.map +0 -1
  155. package/dist/server/src/server/types.d.ts +0 -38
  156. package/dist/server/src/server/types.js +0 -4
  157. package/dist/server/src/server/types.js.map +0 -1
  158. package/dist/server/src/server/utils.d.ts +0 -70
  159. package/dist/server/src/server/utils.js +0 -156
  160. package/dist/server/src/server/utils.js.map +0 -1
  161. package/dist/server/src/server/wasm.d.ts +0 -9
  162. package/dist/server/src/server/wasm.js +0 -117
  163. package/dist/server/src/server/wasm.js.map +0 -1
  164. package/dist/server/src/server-renderer.d.ts +0 -5
  165. package/dist/server/src/server-renderer.js +0 -106
  166. package/dist/server/src/server-renderer.js.map +0 -1
  167. package/dist/server/src/server-types.d.ts +0 -42
  168. package/dist/server/src/server-types.js +0 -6
  169. package/dist/server/src/server-types.js.map +0 -1
  170. package/dist/server/src/store.d.ts +0 -41
  171. package/dist/server/src/store.js +0 -99
  172. package/dist/server/src/store.js.map +0 -1
  173. package/dist/server/src/types.d.ts +0 -19
  174. package/dist/server/src/types.js +0 -2
  175. package/dist/server/src/types.js.map +0 -1
  176. package/dist/server/src/utils.d.ts +0 -46
  177. package/dist/server/src/utils.js +0 -144
  178. package/dist/server/src/utils.js.map +0 -1
  179. package/dist/server/src/vdom.d.ts +0 -8
  180. package/dist/server/src/vdom.js +0 -22
  181. package/dist/server/src/vdom.js.map +0 -1
  182. package/dist/server/src/wasm.d.ts +0 -36
  183. package/dist/server/src/wasm.js +0 -159
  184. package/dist/server/src/wasm.js.map +0 -1
  185. package/dist/server/tsconfig.server.tsbuildinfo +0 -1
  186. package/dist/server-renderer/package.json +0 -16
  187. package/dist/server-renderer.mjs +0 -64
  188. package/dist/store/package.json +0 -16
  189. package/dist/types/package.json +0 -16
  190. package/dist/utils/package.json +0 -16
  191. package/dist/vdom/package.json +0 -16
  192. package/dist/wasm/package.json +0 -16
  193. package/dist/wasm.js +0 -1
  194. package/dist/wasm.mjs +0 -103
  195. package/templates/basic-app/docs/rapport_pfe.log +0 -399
  196. package/templates/complete-app/client.js +0 -58
  197. package/templates/complete-app/package-lock.json +0 -2536
  198. package/templates/complete-app/package.json +0 -17
  199. package/templates/complete-app/pages/about.js +0 -119
  200. package/templates/complete-app/pages/index.js +0 -157
  201. package/templates/complete-app/pages/wasm-demo.js +0 -290
  202. package/templates/complete-app/public/client.js +0 -80
  203. package/templates/complete-app/public/index.html +0 -47
  204. package/templates/complete-app/public/styles.css +0 -579
  205. package/templates/complete-app/readme.md +0 -188
  206. package/templates/complete-app/server.js +0 -417
  207. package/templates/complete-app/server.ts +0 -275
  208. package/templates/complete-app/src/App.tsx +0 -59
  209. package/templates/complete-app/src/client.ts +0 -61
  210. package/templates/complete-app/src/client.tsx +0 -18
  211. package/templates/complete-app/src/pages/index.tsx +0 -51
  212. package/templates/complete-app/src/server.ts +0 -218
  213. package/templates/complete-app/tsconfig.json +0 -22
  214. package/templates/complete-app/tsconfig.server.json +0 -19
  215. package/templates/complete-app/vite.config.js +0 -57
  216. package/templates/complete-app/vite.config.ts +0 -30
  217. package/templates/go-wasm-app/build.config.js +0 -62
  218. package/templates/go-wasm-app/build.js +0 -218
  219. package/templates/go-wasm-app/package-lock.json +0 -3732
@@ -0,0 +1,52 @@
1
+ import { createElement } from "./jsx-runtime.js";
2
+ import { b as batchUpdates, p as prepareRender, s as setRenderCallback, f as finishRender } from "./server-renderer-QHt45Ip2.js";
3
+ function createContext(defaultValue) {
4
+ const context = {
5
+ Provider: ({ value, children }) => {
6
+ return children;
7
+ },
8
+ Consumer: ({ children }) => {
9
+ return children(defaultValue);
10
+ },
11
+ _id: Symbol(),
12
+ useSelector: (selector) => {
13
+ return selector(defaultValue);
14
+ }
15
+ };
16
+ return context;
17
+ }
18
+ function useContext(context) {
19
+ return context;
20
+ }
21
+ let isHydrating = false;
22
+ async function hydrate(element, container) {
23
+ isHydrating = true;
24
+ try {
25
+ await render(element, container);
26
+ } finally {
27
+ isHydrating = false;
28
+ }
29
+ }
30
+ async function render(element, container) {
31
+ console.log("Rendering to:", container.id);
32
+ batchUpdates(async () => {
33
+ const rendererId = prepareRender();
34
+ try {
35
+ setRenderCallback(render, element, container);
36
+ const domNode = await createElement(element);
37
+ if (!isHydrating) {
38
+ container.innerHTML = "";
39
+ }
40
+ container.appendChild(domNode);
41
+ } finally {
42
+ finishRender();
43
+ }
44
+ });
45
+ }
46
+ export {
47
+ createContext as c,
48
+ hydrate as h,
49
+ render as r,
50
+ useContext as u
51
+ };
52
+ //# sourceMappingURL=renderer-Bo9zkUZ_.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer-Bo9zkUZ_.js","sources":["../src/context.ts","../src/renderer.ts"],"sourcesContent":["\r\n\r\nconst contexts = new Map<symbol, any>();\r\nlet currentRender: Function | null = null;\r\n\r\nexport interface Context<T> {\r\n Provider: (props: { value: T; children?: any }) => any;\r\n Consumer: (props: { children: (value: T) => any }) => any;\r\n _id: symbol;\r\n useSelector: <S>(selector: (state: T) => S) => S;\r\n}\r\n\r\nexport function createContext<T>(defaultValue: T): Context<T> {\r\n const context = {\r\n Provider: ({ value, children }: { value: T, children?: any }) => {\r\n return children;\r\n },\r\n Consumer: ({ children }: { children: (value: T) => any }) => {\r\n return children(defaultValue);\r\n },\r\n _id: Symbol(),\r\n useSelector: <S>(selector: (state: T) => S) => {\r\n return selector(defaultValue);\r\n }\r\n };\r\n\r\n return context;\r\n}\r\n\r\nexport function useContext<T>(context: any): T {\r\n return context;\r\n}\r\n","import { createElement } from './jsx-runtime.js';\r\nimport { prepareRender, finishRender, setRenderCallback } from './hooks.js';\r\nimport { batchUpdates } from './batch.js';\r\n\r\nlet isHydrating = false;\r\n\r\nexport async function hydrate(element: any, container: HTMLElement) {\r\n isHydrating = true;\r\n try {\r\n await render(element, container);\r\n } finally {\r\n isHydrating = false;\r\n }\r\n}\r\n\r\nexport async function render(element: any, container: HTMLElement) {\r\n console.log('Rendering to:', container.id);\r\n \r\n batchUpdates(async () => {\r\n const rendererId = prepareRender();\r\n try {\r\n setRenderCallback(render, element, container);\r\n const domNode = await createElement(element);\r\n \r\n if (!isHydrating) {\r\n container.innerHTML = '';\r\n }\r\n container.appendChild(domNode);\r\n \r\n } finally {\r\n finishRender();\r\n }\r\n });\r\n}\r\n"],"names":[],"mappings":";;AAYO,SAAS,cAAiB,cAA6B;AAC5D,QAAM,UAAU;AAAA,IACd,UAAU,CAAC,EAAE,OAAO,eAA6C;AACxD,aAAA;AAAA,IACT;AAAA,IACA,UAAU,CAAC,EAAE,eAAgD;AAC3D,aAAO,SAAS,YAAY;AAAA,IAC9B;AAAA,IACA,KAAK,OAAO;AAAA,IACZ,aAAa,CAAI,aAA8B;AAC7C,aAAO,SAAS,YAAY;AAAA,IAAA;AAAA,EAEhC;AAEO,SAAA;AACT;AAEO,SAAS,WAAc,SAAiB;AACtC,SAAA;AACT;AC3BA,IAAI,cAAc;AAEI,eAAA,QAAQ,SAAc,WAAwB;AACpD,gBAAA;AACV,MAAA;AACI,UAAA,OAAO,SAAS,SAAS;AAAA,EAAA,UAC/B;AACc,kBAAA;AAAA,EAAA;AAElB;AAEsB,eAAA,OAAO,SAAc,WAAwB;AACzD,UAAA,IAAI,iBAAiB,UAAU,EAAE;AAEzC,eAAa,YAAY;AACvB,UAAM,aAAa,cAAc;AAC7B,QAAA;AACgB,wBAAA,QAAQ,SAAS,SAAS;AACtC,YAAA,UAAU,MAAM,cAAc,OAAO;AAE3C,UAAI,CAAC,aAAa;AAChB,kBAAU,YAAY;AAAA,MAAA;AAExB,gBAAU,YAAY,OAAO;AAAA,IAAA,UAE7B;AACa,mBAAA;AAAA,IAAA;AAAA,EACf,CACD;AACH;"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("./jsx-runtime.cjs"),r=require("./server-renderer-CqIpQ-od.cjs");let n=!1;async function t(i,s){console.log("Rendering to:",s.id),r.batchUpdates((async()=>{r.prepareRender();try{r.setRenderCallback(t,i,s);const c=await e.createElement(i);n||(s.innerHTML=""),s.appendChild(c)}finally{r.finishRender()}}))}exports.createContext=function(e){return{Provider:({value:e,children:r})=>r,Consumer:({children:r})=>r(e),_id:Symbol(),useSelector:r=>r(e)}},exports.hydrate=async function(e,r){n=!0;try{await t(e,r)}finally{n=!1}},exports.render=t,exports.useContext=function(e){return e};
2
+ //# sourceMappingURL=renderer-Din1y3YM.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer-Din1y3YM.cjs","sources":["../src/renderer.ts","../src/context.ts"],"sourcesContent":["import { createElement } from './jsx-runtime.js';\r\nimport { prepareRender, finishRender, setRenderCallback } from './hooks.js';\r\nimport { batchUpdates } from './batch.js';\r\n\r\nlet isHydrating = false;\r\n\r\nexport async function hydrate(element: any, container: HTMLElement) {\r\n isHydrating = true;\r\n try {\r\n await render(element, container);\r\n } finally {\r\n isHydrating = false;\r\n }\r\n}\r\n\r\nexport async function render(element: any, container: HTMLElement) {\r\n console.log('Rendering to:', container.id);\r\n \r\n batchUpdates(async () => {\r\n const rendererId = prepareRender();\r\n try {\r\n setRenderCallback(render, element, container);\r\n const domNode = await createElement(element);\r\n \r\n if (!isHydrating) {\r\n container.innerHTML = '';\r\n }\r\n container.appendChild(domNode);\r\n \r\n } finally {\r\n finishRender();\r\n }\r\n });\r\n}\r\n","\r\n\r\nconst contexts = new Map<symbol, any>();\r\nlet currentRender: Function | null = null;\r\n\r\nexport interface Context<T> {\r\n Provider: (props: { value: T; children?: any }) => any;\r\n Consumer: (props: { children: (value: T) => any }) => any;\r\n _id: symbol;\r\n useSelector: <S>(selector: (state: T) => S) => S;\r\n}\r\n\r\nexport function createContext<T>(defaultValue: T): Context<T> {\r\n const context = {\r\n Provider: ({ value, children }: { value: T, children?: any }) => {\r\n return children;\r\n },\r\n Consumer: ({ children }: { children: (value: T) => any }) => {\r\n return children(defaultValue);\r\n },\r\n _id: Symbol(),\r\n useSelector: <S>(selector: (state: T) => S) => {\r\n return selector(defaultValue);\r\n }\r\n };\r\n\r\n return context;\r\n}\r\n\r\nexport function useContext<T>(context: any): T {\r\n return context;\r\n}\r\n"],"names":["isHydrating","async","render","element","container","console","log","id","batchUpdates","prepareRender","domNode","createElement","innerHTML","appendChild","finishRender","defaultValue","Provider","value","children","Consumer","_id","Symbol","useSelector","selector","context"],"mappings":"8FAIA,IAAIA,GAAc,EAWIC,eAAAC,EAAOC,EAAcC,GACjCC,QAAAC,IAAI,gBAAiBF,EAAUG,IAEvCC,EAAAA,cAAaP,UACQQ,EAAAA,gBACf,wBACgBP,EAAQC,EAASC,GAC7B,MAAAM,QAAgBC,EAAAA,cAAcR,GAE/BH,IACHI,EAAUQ,UAAY,IAExBR,EAAUS,YAAYH,EAAO,CAE7B,QACaI,gBAAA,IAGnB,uBCrBO,SAA0BC,GAcxB,MAbS,CACdC,SAAU,EAAGC,QAAOC,cACXA,EAETC,SAAU,EAAGD,cACJA,EAASH,GAElBK,IAAKC,SACLC,YAAiBC,GACRA,EAASR,GAKtB,kBDrBsBd,eAAQE,EAAcC,GAC5BJ,GAAA,EACV,UACIE,EAAOC,EAASC,EAAS,CAC/B,QACcJ,GAAA,CAAA,CAElB,sCCgBO,SAAuBwB,GACrB,OAAAA,CACT"}
@@ -0,0 +1,2 @@
1
+ "use strict";exports.isBatching=!1;const e=[];function t(t){if(exports.isBatching)e.push(t);else{exports.isBatching=!0;try{for(t();e.length>0;){const t=e.shift();t?.()}}finally{exports.isBatching=!1}}}let r=0;const n=new Map,s=new Map,o=new Map,c=new Map,i=new Map,p="undefined"==typeof window,u=new Map;let a=null,l=null,f=null;function h(){return r++,s.set(r,0),r}function d(){p&&u.delete(r),r=0}function g(e){if(!r)throw new Error("useState must be called within a render");if(p){u.has(r)||u.set(r,new Map);const t=u.get(r),n=s.get(r)||0;t.has(n)||t.set(n,e);const o=t.get(n),c=e=>{};return s.set(r,n+1),[o,c]}n.has(r)||n.set(r,[]);const o=n.get(r),c=s.get(r)||0;c>=o.length&&o.push(e);const i=o[c];return s.set(r,c+1),[i,e=>{const n="function"==typeof e?e(o[c]):e;o[c]!==n&&(o[c]=n,exports.isBatching?t((()=>y(r))):y(r))}]}async function y(e){try{const t=o.get(e);t&&(t.forEach((e=>{e.cleanup&&e.cleanup()})),o.set(e,[])),a&&l&&f&&await a(f,l)}catch(t){console.error("Error during rerender:",t)}}function w(e){if(null==e)return"";if("boolean"==typeof e)return"";if("number"==typeof e||"string"==typeof e)return m(String(e));if("function"==typeof e.type){return w((0,e.type)(e.props||{}))}if("string"==typeof e.type){const t=e.type;let r="",n="";if(e.props)for(const[o,c]of Object.entries(e.props))"children"!==o&&(o.startsWith("on")||("className"!==o?"string"==typeof c||"number"==typeof c?r+=` ${o}="${m(String(c))}"`:!0===c&&(r+=` ${o}`):r+=` class="${m(c)}"`));const s=e.props?.children?Array.isArray(e.props.children)?e.props.children:[e.props.children]:[];for(const e of s)n+=w(e);return["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"].includes(t)?`<${t}${r}/>`:`<${t}${r}>${n}</${t}>`}if(e.type===Symbol.for("react.fragment")){let t="";const r=Array.isArray(e.props?.children)?e.props.children:e.props?.children?[e.props.children]:[];for(const e of r)t+=w(e);return t}return console.warn("Unknown vnode type:",e.type),""}function m(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}exports.batchUpdates=t,exports.finishRender=d,exports.getIsBatching=function(){return exports.isBatching},exports.prepareRender=h,exports.renderToString=function(e){h();const t=w(e);return d(),t},exports.setRenderCallback=function(e,t,r){a=e,l=r,f=t},exports.useEffect=function(e,t){if(!r)throw new Error("useEffect must be called within a render");if(p){const e=s.get(r)||0;return void s.set(r,e+1)}const n=s.get(r)||0;o.has(r)||o.set(r,[]);const c=o.get(r),i=c[n];i&&t&&i.deps&&!t.some(((e,t)=>e!==i.deps[t]))||(i?.cleanup&&i.cleanup(),queueMicrotask((()=>{const r=e()||void 0;c[n]={cleanup:r,deps:t||[]}}))),s.set(r,n+1)},exports.useErrorBoundary=function(){const[e,t]=g(null);return[e,()=>t(null)]},exports.useMemo=function(e,t){if(!r)throw new Error("useMemo must be called within a render");const n=s.get(r)||0;c.has(r)||c.set(r,[]);const o=c.get(r),i=o[n];if(!i||t&&t.some(((e,t)=>!Object.is(e,i.deps[t])))){const c=e();return o[n]={value:c,deps:t||[]},s.set(r,n+1),c}return s.set(r,n+1),i.value},exports.useRef=function(e){if(!r)throw new Error("useRef must be called within a render");const t=s.get(r)||0;i.has(r)||i.set(r,[]);const n=i.get(r);if(t>=n.length){const o={current:e};return n.push(o),s.set(r,t+1),o}const o=n[t];return s.set(r,t+1),o},exports.useState=g;
2
+ //# sourceMappingURL=server-renderer-CqIpQ-od.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-renderer-CqIpQ-od.cjs","sources":["../src/batch.ts","../src/hooks.ts","../src/server-renderer.ts"],"sourcesContent":["export let isBatching = false;\r\nconst queue: Function[] = [];\r\n\r\nexport function batchUpdates(fn: Function) {\r\n if (isBatching) {\r\n queue.push(fn);\r\n return;\r\n }\r\n\r\n isBatching = true;\r\n try {\r\n fn();\r\n while (queue.length > 0) {\r\n const nextFn = queue.shift();\r\n nextFn?.();\r\n }\r\n } finally {\r\n isBatching = false;\r\n }\r\n}\r\n\r\nexport function getIsBatching() {\r\n return isBatching;\r\n}\r\n","import { createElement } from './jsx-runtime.js';\r\nimport { batchUpdates, isBatching } from './batch.js';\r\nimport { diff } from './vdom.js';\r\nimport { createContext, useContext } from './context.js';\r\n\r\n// Current render ID counter\r\nlet currentRender = 0;\r\n\r\n// State storage\r\nconst states = new Map<number, any[]>();\r\nconst stateIndices = new Map<number, number>();\r\nconst effects = new Map<number, any[]>();\r\nconst memos = new Map<number, any[]>();\r\nconst refs = new Map<number, any[]>();\r\n\r\n// Server-side rendering detection\r\nconst isServer = typeof window === 'undefined';\r\nconst serverStates = new Map<number, Map<number, any>>();\r\n\r\n// Rendering callbacks\r\nlet globalRenderCallback: any = null;\r\nlet globalContainer: any = null;\r\nlet currentElement: any = null;\r\n\r\nexport function setRenderCallback(callback: any, element: any, container: any): void {\r\n globalRenderCallback = callback;\r\n globalContainer = container;\r\n currentElement = element;\r\n}\r\n\r\nexport function prepareRender(): number {\r\n currentRender++;\r\n stateIndices.set(currentRender, 0);\r\n return currentRender;\r\n}\r\n\r\nexport function finishRender(): void {\r\n if (isServer) {\r\n serverStates.delete(currentRender);\r\n }\r\n currentRender = 0;\r\n}\r\n\r\nexport function useState<T>(initial: T): [T, (newValue: T | ((prev: T) => T)) => void] {\r\n if (!currentRender) {\r\n throw new Error(\"useState must be called within a render\");\r\n }\r\n\r\n // Handle server-side rendering separately\r\n if (isServer) {\r\n if (!serverStates.has(currentRender)) {\r\n serverStates.set(currentRender, new Map());\r\n }\r\n const componentState = serverStates.get(currentRender)!;\r\n const index = stateIndices.get(currentRender) || 0;\r\n \r\n if (!componentState.has(index)) {\r\n componentState.set(index, initial);\r\n }\r\n \r\n const state = componentState.get(index);\r\n // In SSR, setState is a no-op\r\n const setState = (_newValue: T | ((prev: T) => T)) => {};\r\n \r\n stateIndices.set(currentRender, index + 1);\r\n return [state, setState];\r\n }\r\n\r\n // Client-side implementation\r\n if (!states.has(currentRender)) {\r\n states.set(currentRender, []);\r\n }\r\n \r\n const componentStates = states.get(currentRender)!;\r\n const index = stateIndices.get(currentRender) || 0;\r\n \r\n if (index >= componentStates.length) {\r\n componentStates.push(initial);\r\n }\r\n \r\n const state = componentStates[index];\r\n \r\n const setState = (newValue: T | ((prev: T) => T)) => {\r\n const nextValue = typeof newValue === 'function'\r\n ? (newValue as ((prev: T) => T))(componentStates[index])\r\n : newValue;\r\n \r\n if (componentStates[index] === nextValue) return;\r\n \r\n componentStates[index] = nextValue;\r\n \r\n if (isBatching) {\r\n batchUpdates(() => rerender(currentRender));\r\n } else {\r\n rerender(currentRender);\r\n }\r\n };\r\n \r\n stateIndices.set(currentRender, index + 1);\r\n return [state, setState];\r\n}\r\n\r\nexport function useEffect(callback: () => void | (() => void), deps?: any[]): void {\r\n if (!currentRender) throw new Error(\"useEffect must be called within a render\");\r\n\r\n // Skip effects on server\r\n if (isServer) {\r\n const effectIndex = stateIndices.get(currentRender) || 0;\r\n stateIndices.set(currentRender, effectIndex + 1);\r\n return;\r\n }\r\n\r\n const effectIndex = stateIndices.get(currentRender) || 0;\r\n \r\n if (!effects.has(currentRender)) {\r\n effects.set(currentRender, []);\r\n }\r\n \r\n const componentEffects = effects.get(currentRender)!;\r\n const prevEffect = componentEffects[effectIndex];\r\n \r\n if (!prevEffect || !deps || !prevEffect.deps || deps.some((dep, i) => dep !== prevEffect.deps[i])) {\r\n if (prevEffect?.cleanup) {\r\n prevEffect.cleanup();\r\n }\r\n \r\n // Schedule effect execution after render is complete\r\n queueMicrotask(() => {\r\n const cleanup = callback() || undefined;\r\n componentEffects[effectIndex] = { cleanup, deps: deps || [] };\r\n });\r\n }\r\n \r\n stateIndices.set(currentRender, effectIndex + 1);\r\n}\r\n\r\nexport function useMemo<T>(factory: () => T, deps?: any[]): T {\r\n if (!currentRender) throw new Error(\"useMemo must be called within a render\");\r\n \r\n const memoIndex = stateIndices.get(currentRender) || 0;\r\n \r\n if (!memos.has(currentRender)) {\r\n memos.set(currentRender, []);\r\n }\r\n \r\n const componentMemos = memos.get(currentRender)!;\r\n const prevMemo = componentMemos[memoIndex];\r\n \r\n if (!prevMemo || (deps && deps.some((dep, i) => !Object.is(dep, prevMemo.deps[i])))) {\r\n const value = factory();\r\n componentMemos[memoIndex] = { value, deps: deps || [] };\r\n stateIndices.set(currentRender, memoIndex + 1);\r\n return value;\r\n }\r\n \r\n stateIndices.set(currentRender, memoIndex + 1);\r\n return prevMemo.value;\r\n}\r\n\r\nexport function useRef<T>(initial: T): { current: T } {\r\n if (!currentRender) throw new Error(\"useRef must be called within a render\");\r\n \r\n const refIndex = stateIndices.get(currentRender) || 0;\r\n \r\n if (!refs.has(currentRender)) {\r\n refs.set(currentRender, []);\r\n }\r\n \r\n const componentRefs = refs.get(currentRender)!;\r\n \r\n if (refIndex >= componentRefs.length) {\r\n const ref = { current: initial };\r\n componentRefs.push(ref);\r\n stateIndices.set(currentRender, refIndex + 1);\r\n return ref;\r\n }\r\n \r\n const ref = componentRefs[refIndex];\r\n stateIndices.set(currentRender, refIndex + 1);\r\n return ref;\r\n}\r\n\r\nasync function rerender(rendererId: number): Promise<void> {\r\n try {\r\n // Clean up effects\r\n const componentEffects = effects.get(rendererId);\r\n if (componentEffects) {\r\n componentEffects.forEach(effect => {\r\n if (effect.cleanup) effect.cleanup();\r\n });\r\n effects.set(rendererId, []);\r\n }\r\n \r\n // Trigger re-render\r\n if (globalRenderCallback && globalContainer && currentElement) {\r\n await globalRenderCallback(currentElement, globalContainer);\r\n }\r\n } catch (error) {\r\n console.error('Error during rerender:', error);\r\n }\r\n}\r\n\r\nexport function useErrorBoundary() {\r\n const [error, setError] = useState(null);\r\n return [error, () => setError(null)];\r\n}\r\n\r\n// Re-export from context to match index.js\r\nexport { createContext, useContext };\r\n","import { VNode } from './types.js';\r\nimport { prepareRender, finishRender } from './hooks.js';\r\n\r\ntype Component = (props: any) => any;\r\n\r\n/**\r\n * Renders a virtual DOM tree to an HTML string\r\n */\r\nexport function renderToString(vnode: VNode): string {\r\n // Reset hook state for this render\r\n prepareRender();\r\n \r\n // Render the tree to HTML\r\n const html = renderNodeToString(vnode);\r\n \r\n // Clean up after rendering\r\n finishRender();\r\n \r\n return html;\r\n}\r\n\r\n/**\r\n * Internal function to convert a virtual node to an HTML string\r\n */\r\nfunction renderNodeToString(vnode: VNode | string | number | boolean | null | undefined): string {\r\n // Handle primitive values\r\n if (vnode === null || vnode === undefined) return '';\r\n if (typeof vnode === 'boolean') return '';\r\n if (typeof vnode === 'number' || typeof vnode === 'string') return escapeHtml(String(vnode));\r\n \r\n // Handle function components\r\n if (typeof vnode.type === 'function') {\r\n const Component = vnode.type as Component;\r\n const renderedNode = Component(vnode.props || {});\r\n return renderNodeToString(renderedNode);\r\n }\r\n \r\n // Handle intrinsic elements (regular HTML tags)\r\n if (typeof vnode.type === 'string') {\r\n const tag = vnode.type;\r\n let attrs = '';\r\n let children = '';\r\n \r\n // Convert props to HTML attributes\r\n if (vnode.props) {\r\n for (const [key, value] of Object.entries(vnode.props)) {\r\n // Skip children prop as we handle it separately\r\n if (key === 'children') continue;\r\n \r\n // Skip event handlers (they start with 'on')\r\n if (key.startsWith('on')) continue;\r\n \r\n // Handle the className prop specially\r\n if (key === 'className') {\r\n attrs += ` class=\"${escapeHtml(value as string)}\"`;\r\n continue;\r\n }\r\n \r\n // Handle other attributes\r\n if (typeof value === 'string' || typeof value === 'number') {\r\n attrs += ` ${key}=\"${escapeHtml(String(value))}\"`;\r\n } else if (value === true) {\r\n // Boolean attributes\r\n attrs += ` ${key}`;\r\n }\r\n }\r\n }\r\n \r\n // Process children\r\n const childrenArray = (vnode.props?.children) \r\n ? Array.isArray(vnode.props.children) \r\n ? vnode.props.children \r\n : [vnode.props.children]\r\n : [];\r\n \r\n for (const child of childrenArray) {\r\n children += renderNodeToString(child);\r\n }\r\n \r\n // Self-closing tags\r\n const selfClosing = [\r\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\r\n 'link', 'meta', 'param', 'source', 'track', 'wbr'\r\n ];\r\n \r\n if (selfClosing.includes(tag)) {\r\n return `<${tag}${attrs}/>`;\r\n }\r\n \r\n // Regular tags with closing\r\n return `<${tag}${attrs}>${children}</${tag}>`;\r\n }\r\n \r\n // Handle fragments\r\n if (vnode.type === Symbol.for('react.fragment')) {\r\n let fragmentOutput = '';\r\n const children = Array.isArray(vnode.props?.children)\r\n ? vnode.props.children\r\n : vnode.props?.children ? [vnode.props.children] : [];\r\n \r\n for (const child of children) {\r\n fragmentOutput += renderNodeToString(child);\r\n }\r\n \r\n return fragmentOutput;\r\n }\r\n \r\n // Fallback for unknown node types\r\n console.warn('Unknown vnode type:', vnode.type);\r\n return '';\r\n}\r\n\r\n/**\r\n * Escape HTML special characters to prevent XSS\r\n */\r\nfunction escapeHtml(text: string): string {\r\n return text\r\n .replace(/&/g, '&amp;')\r\n .replace(/</g, '&lt;')\r\n .replace(/>/g, '&gt;')\r\n .replace(/\"/g, '&quot;')\r\n .replace(/'/g, '&#039;');\r\n}\r\n"],"names":["isBatching","queue","batchUpdates","fn","push","length","nextFn","shift","currentRender","states","Map","stateIndices","effects","memos","refs","isServer","window","serverStates","globalRenderCallback","globalContainer","currentElement","prepareRender","set","finishRender","delete","useState","initial","Error","has","componentState","get","index","state","setState","_newValue","componentStates","newValue","nextValue","rerender","async","rendererId","componentEffects","forEach","effect","cleanup","error","console","renderNodeToString","vnode","escapeHtml","String","type","Component","props","tag","attrs","children","key","value","Object","entries","startsWith","childrenArray","Array","isArray","child","includes","Symbol","for","fragmentOutput","warn","text","replace","html","callback","element","container","deps","effectIndex","prevEffect","some","dep","i","queueMicrotask","setError","factory","memoIndex","componentMemos","prevMemo","is","refIndex","componentRefs","ref","current"],"mappings":"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"}
@@ -0,0 +1,255 @@
1
+ let isBatching = false;
2
+ const queue = [];
3
+ function batchUpdates(fn) {
4
+ if (isBatching) {
5
+ queue.push(fn);
6
+ return;
7
+ }
8
+ isBatching = true;
9
+ try {
10
+ fn();
11
+ while (queue.length > 0) {
12
+ const nextFn = queue.shift();
13
+ nextFn?.();
14
+ }
15
+ } finally {
16
+ isBatching = false;
17
+ }
18
+ }
19
+ function getIsBatching() {
20
+ return isBatching;
21
+ }
22
+ let currentRender = 0;
23
+ const states = /* @__PURE__ */ new Map();
24
+ const stateIndices = /* @__PURE__ */ new Map();
25
+ const effects = /* @__PURE__ */ new Map();
26
+ const memos = /* @__PURE__ */ new Map();
27
+ const refs = /* @__PURE__ */ new Map();
28
+ const isServer = typeof window === "undefined";
29
+ const serverStates = /* @__PURE__ */ new Map();
30
+ let globalRenderCallback = null;
31
+ let globalContainer = null;
32
+ let currentElement = null;
33
+ function setRenderCallback(callback, element, container) {
34
+ globalRenderCallback = callback;
35
+ globalContainer = container;
36
+ currentElement = element;
37
+ }
38
+ function prepareRender() {
39
+ currentRender++;
40
+ stateIndices.set(currentRender, 0);
41
+ return currentRender;
42
+ }
43
+ function finishRender() {
44
+ if (isServer) {
45
+ serverStates.delete(currentRender);
46
+ }
47
+ currentRender = 0;
48
+ }
49
+ function useState(initial) {
50
+ if (!currentRender) {
51
+ throw new Error("useState must be called within a render");
52
+ }
53
+ if (isServer) {
54
+ if (!serverStates.has(currentRender)) {
55
+ serverStates.set(currentRender, /* @__PURE__ */ new Map());
56
+ }
57
+ const componentState = serverStates.get(currentRender);
58
+ const index2 = stateIndices.get(currentRender) || 0;
59
+ if (!componentState.has(index2)) {
60
+ componentState.set(index2, initial);
61
+ }
62
+ const state2 = componentState.get(index2);
63
+ const setState2 = (_newValue) => {
64
+ };
65
+ stateIndices.set(currentRender, index2 + 1);
66
+ return [state2, setState2];
67
+ }
68
+ if (!states.has(currentRender)) {
69
+ states.set(currentRender, []);
70
+ }
71
+ const componentStates = states.get(currentRender);
72
+ const index = stateIndices.get(currentRender) || 0;
73
+ if (index >= componentStates.length) {
74
+ componentStates.push(initial);
75
+ }
76
+ const state = componentStates[index];
77
+ const setState = (newValue) => {
78
+ const nextValue = typeof newValue === "function" ? newValue(componentStates[index]) : newValue;
79
+ if (componentStates[index] === nextValue) return;
80
+ componentStates[index] = nextValue;
81
+ if (isBatching) {
82
+ batchUpdates(() => rerender(currentRender));
83
+ } else {
84
+ rerender(currentRender);
85
+ }
86
+ };
87
+ stateIndices.set(currentRender, index + 1);
88
+ return [state, setState];
89
+ }
90
+ function useEffect(callback, deps) {
91
+ if (!currentRender) throw new Error("useEffect must be called within a render");
92
+ if (isServer) {
93
+ const effectIndex2 = stateIndices.get(currentRender) || 0;
94
+ stateIndices.set(currentRender, effectIndex2 + 1);
95
+ return;
96
+ }
97
+ const effectIndex = stateIndices.get(currentRender) || 0;
98
+ if (!effects.has(currentRender)) {
99
+ effects.set(currentRender, []);
100
+ }
101
+ const componentEffects = effects.get(currentRender);
102
+ const prevEffect = componentEffects[effectIndex];
103
+ if (!prevEffect || !deps || !prevEffect.deps || deps.some((dep, i) => dep !== prevEffect.deps[i])) {
104
+ if (prevEffect?.cleanup) {
105
+ prevEffect.cleanup();
106
+ }
107
+ queueMicrotask(() => {
108
+ const cleanup = callback() || void 0;
109
+ componentEffects[effectIndex] = { cleanup, deps: deps || [] };
110
+ });
111
+ }
112
+ stateIndices.set(currentRender, effectIndex + 1);
113
+ }
114
+ function useMemo(factory, deps) {
115
+ if (!currentRender) throw new Error("useMemo must be called within a render");
116
+ const memoIndex = stateIndices.get(currentRender) || 0;
117
+ if (!memos.has(currentRender)) {
118
+ memos.set(currentRender, []);
119
+ }
120
+ const componentMemos = memos.get(currentRender);
121
+ const prevMemo = componentMemos[memoIndex];
122
+ if (!prevMemo || deps && deps.some((dep, i) => !Object.is(dep, prevMemo.deps[i]))) {
123
+ const value = factory();
124
+ componentMemos[memoIndex] = { value, deps: deps || [] };
125
+ stateIndices.set(currentRender, memoIndex + 1);
126
+ return value;
127
+ }
128
+ stateIndices.set(currentRender, memoIndex + 1);
129
+ return prevMemo.value;
130
+ }
131
+ function useRef(initial) {
132
+ if (!currentRender) throw new Error("useRef must be called within a render");
133
+ const refIndex = stateIndices.get(currentRender) || 0;
134
+ if (!refs.has(currentRender)) {
135
+ refs.set(currentRender, []);
136
+ }
137
+ const componentRefs = refs.get(currentRender);
138
+ if (refIndex >= componentRefs.length) {
139
+ const ref2 = { current: initial };
140
+ componentRefs.push(ref2);
141
+ stateIndices.set(currentRender, refIndex + 1);
142
+ return ref2;
143
+ }
144
+ const ref = componentRefs[refIndex];
145
+ stateIndices.set(currentRender, refIndex + 1);
146
+ return ref;
147
+ }
148
+ async function rerender(rendererId) {
149
+ try {
150
+ const componentEffects = effects.get(rendererId);
151
+ if (componentEffects) {
152
+ componentEffects.forEach((effect) => {
153
+ if (effect.cleanup) effect.cleanup();
154
+ });
155
+ effects.set(rendererId, []);
156
+ }
157
+ if (globalRenderCallback && globalContainer && currentElement) {
158
+ await globalRenderCallback(currentElement, globalContainer);
159
+ }
160
+ } catch (error) {
161
+ console.error("Error during rerender:", error);
162
+ }
163
+ }
164
+ function useErrorBoundary() {
165
+ const [error, setError] = useState(null);
166
+ return [error, () => setError(null)];
167
+ }
168
+ function renderToString(vnode) {
169
+ prepareRender();
170
+ const html = renderNodeToString(vnode);
171
+ finishRender();
172
+ return html;
173
+ }
174
+ function renderNodeToString(vnode) {
175
+ if (vnode === null || vnode === void 0) return "";
176
+ if (typeof vnode === "boolean") return "";
177
+ if (typeof vnode === "number" || typeof vnode === "string") return escapeHtml(String(vnode));
178
+ if (typeof vnode.type === "function") {
179
+ const Component = vnode.type;
180
+ const renderedNode = Component(vnode.props || {});
181
+ return renderNodeToString(renderedNode);
182
+ }
183
+ if (typeof vnode.type === "string") {
184
+ const tag = vnode.type;
185
+ let attrs = "";
186
+ let children = "";
187
+ if (vnode.props) {
188
+ for (const [key, value] of Object.entries(vnode.props)) {
189
+ if (key === "children") continue;
190
+ if (key.startsWith("on")) continue;
191
+ if (key === "className") {
192
+ attrs += ` class="${escapeHtml(value)}"`;
193
+ continue;
194
+ }
195
+ if (typeof value === "string" || typeof value === "number") {
196
+ attrs += ` ${key}="${escapeHtml(String(value))}"`;
197
+ } else if (value === true) {
198
+ attrs += ` ${key}`;
199
+ }
200
+ }
201
+ }
202
+ const childrenArray = vnode.props?.children ? Array.isArray(vnode.props.children) ? vnode.props.children : [vnode.props.children] : [];
203
+ for (const child of childrenArray) {
204
+ children += renderNodeToString(child);
205
+ }
206
+ const selfClosing = [
207
+ "area",
208
+ "base",
209
+ "br",
210
+ "col",
211
+ "embed",
212
+ "hr",
213
+ "img",
214
+ "input",
215
+ "link",
216
+ "meta",
217
+ "param",
218
+ "source",
219
+ "track",
220
+ "wbr"
221
+ ];
222
+ if (selfClosing.includes(tag)) {
223
+ return `<${tag}${attrs}/>`;
224
+ }
225
+ return `<${tag}${attrs}>${children}</${tag}>`;
226
+ }
227
+ if (vnode.type === Symbol.for("react.fragment")) {
228
+ let fragmentOutput = "";
229
+ const children = Array.isArray(vnode.props?.children) ? vnode.props.children : vnode.props?.children ? [vnode.props.children] : [];
230
+ for (const child of children) {
231
+ fragmentOutput += renderNodeToString(child);
232
+ }
233
+ return fragmentOutput;
234
+ }
235
+ console.warn("Unknown vnode type:", vnode.type);
236
+ return "";
237
+ }
238
+ function escapeHtml(text) {
239
+ return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;");
240
+ }
241
+ export {
242
+ useRef as a,
243
+ batchUpdates as b,
244
+ useMemo as c,
245
+ useEffect as d,
246
+ useState as e,
247
+ finishRender as f,
248
+ getIsBatching as g,
249
+ isBatching as i,
250
+ prepareRender as p,
251
+ renderToString as r,
252
+ setRenderCallback as s,
253
+ useErrorBoundary as u
254
+ };
255
+ //# sourceMappingURL=server-renderer-QHt45Ip2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-renderer-QHt45Ip2.js","sources":["../src/batch.ts","../src/hooks.ts","../src/server-renderer.ts"],"sourcesContent":["export let isBatching = false;\r\nconst queue: Function[] = [];\r\n\r\nexport function batchUpdates(fn: Function) {\r\n if (isBatching) {\r\n queue.push(fn);\r\n return;\r\n }\r\n\r\n isBatching = true;\r\n try {\r\n fn();\r\n while (queue.length > 0) {\r\n const nextFn = queue.shift();\r\n nextFn?.();\r\n }\r\n } finally {\r\n isBatching = false;\r\n }\r\n}\r\n\r\nexport function getIsBatching() {\r\n return isBatching;\r\n}\r\n","import { createElement } from './jsx-runtime.js';\r\nimport { batchUpdates, isBatching } from './batch.js';\r\nimport { diff } from './vdom.js';\r\nimport { createContext, useContext } from './context.js';\r\n\r\n// Current render ID counter\r\nlet currentRender = 0;\r\n\r\n// State storage\r\nconst states = new Map<number, any[]>();\r\nconst stateIndices = new Map<number, number>();\r\nconst effects = new Map<number, any[]>();\r\nconst memos = new Map<number, any[]>();\r\nconst refs = new Map<number, any[]>();\r\n\r\n// Server-side rendering detection\r\nconst isServer = typeof window === 'undefined';\r\nconst serverStates = new Map<number, Map<number, any>>();\r\n\r\n// Rendering callbacks\r\nlet globalRenderCallback: any = null;\r\nlet globalContainer: any = null;\r\nlet currentElement: any = null;\r\n\r\nexport function setRenderCallback(callback: any, element: any, container: any): void {\r\n globalRenderCallback = callback;\r\n globalContainer = container;\r\n currentElement = element;\r\n}\r\n\r\nexport function prepareRender(): number {\r\n currentRender++;\r\n stateIndices.set(currentRender, 0);\r\n return currentRender;\r\n}\r\n\r\nexport function finishRender(): void {\r\n if (isServer) {\r\n serverStates.delete(currentRender);\r\n }\r\n currentRender = 0;\r\n}\r\n\r\nexport function useState<T>(initial: T): [T, (newValue: T | ((prev: T) => T)) => void] {\r\n if (!currentRender) {\r\n throw new Error(\"useState must be called within a render\");\r\n }\r\n\r\n // Handle server-side rendering separately\r\n if (isServer) {\r\n if (!serverStates.has(currentRender)) {\r\n serverStates.set(currentRender, new Map());\r\n }\r\n const componentState = serverStates.get(currentRender)!;\r\n const index = stateIndices.get(currentRender) || 0;\r\n \r\n if (!componentState.has(index)) {\r\n componentState.set(index, initial);\r\n }\r\n \r\n const state = componentState.get(index);\r\n // In SSR, setState is a no-op\r\n const setState = (_newValue: T | ((prev: T) => T)) => {};\r\n \r\n stateIndices.set(currentRender, index + 1);\r\n return [state, setState];\r\n }\r\n\r\n // Client-side implementation\r\n if (!states.has(currentRender)) {\r\n states.set(currentRender, []);\r\n }\r\n \r\n const componentStates = states.get(currentRender)!;\r\n const index = stateIndices.get(currentRender) || 0;\r\n \r\n if (index >= componentStates.length) {\r\n componentStates.push(initial);\r\n }\r\n \r\n const state = componentStates[index];\r\n \r\n const setState = (newValue: T | ((prev: T) => T)) => {\r\n const nextValue = typeof newValue === 'function'\r\n ? (newValue as ((prev: T) => T))(componentStates[index])\r\n : newValue;\r\n \r\n if (componentStates[index] === nextValue) return;\r\n \r\n componentStates[index] = nextValue;\r\n \r\n if (isBatching) {\r\n batchUpdates(() => rerender(currentRender));\r\n } else {\r\n rerender(currentRender);\r\n }\r\n };\r\n \r\n stateIndices.set(currentRender, index + 1);\r\n return [state, setState];\r\n}\r\n\r\nexport function useEffect(callback: () => void | (() => void), deps?: any[]): void {\r\n if (!currentRender) throw new Error(\"useEffect must be called within a render\");\r\n\r\n // Skip effects on server\r\n if (isServer) {\r\n const effectIndex = stateIndices.get(currentRender) || 0;\r\n stateIndices.set(currentRender, effectIndex + 1);\r\n return;\r\n }\r\n\r\n const effectIndex = stateIndices.get(currentRender) || 0;\r\n \r\n if (!effects.has(currentRender)) {\r\n effects.set(currentRender, []);\r\n }\r\n \r\n const componentEffects = effects.get(currentRender)!;\r\n const prevEffect = componentEffects[effectIndex];\r\n \r\n if (!prevEffect || !deps || !prevEffect.deps || deps.some((dep, i) => dep !== prevEffect.deps[i])) {\r\n if (prevEffect?.cleanup) {\r\n prevEffect.cleanup();\r\n }\r\n \r\n // Schedule effect execution after render is complete\r\n queueMicrotask(() => {\r\n const cleanup = callback() || undefined;\r\n componentEffects[effectIndex] = { cleanup, deps: deps || [] };\r\n });\r\n }\r\n \r\n stateIndices.set(currentRender, effectIndex + 1);\r\n}\r\n\r\nexport function useMemo<T>(factory: () => T, deps?: any[]): T {\r\n if (!currentRender) throw new Error(\"useMemo must be called within a render\");\r\n \r\n const memoIndex = stateIndices.get(currentRender) || 0;\r\n \r\n if (!memos.has(currentRender)) {\r\n memos.set(currentRender, []);\r\n }\r\n \r\n const componentMemos = memos.get(currentRender)!;\r\n const prevMemo = componentMemos[memoIndex];\r\n \r\n if (!prevMemo || (deps && deps.some((dep, i) => !Object.is(dep, prevMemo.deps[i])))) {\r\n const value = factory();\r\n componentMemos[memoIndex] = { value, deps: deps || [] };\r\n stateIndices.set(currentRender, memoIndex + 1);\r\n return value;\r\n }\r\n \r\n stateIndices.set(currentRender, memoIndex + 1);\r\n return prevMemo.value;\r\n}\r\n\r\nexport function useRef<T>(initial: T): { current: T } {\r\n if (!currentRender) throw new Error(\"useRef must be called within a render\");\r\n \r\n const refIndex = stateIndices.get(currentRender) || 0;\r\n \r\n if (!refs.has(currentRender)) {\r\n refs.set(currentRender, []);\r\n }\r\n \r\n const componentRefs = refs.get(currentRender)!;\r\n \r\n if (refIndex >= componentRefs.length) {\r\n const ref = { current: initial };\r\n componentRefs.push(ref);\r\n stateIndices.set(currentRender, refIndex + 1);\r\n return ref;\r\n }\r\n \r\n const ref = componentRefs[refIndex];\r\n stateIndices.set(currentRender, refIndex + 1);\r\n return ref;\r\n}\r\n\r\nasync function rerender(rendererId: number): Promise<void> {\r\n try {\r\n // Clean up effects\r\n const componentEffects = effects.get(rendererId);\r\n if (componentEffects) {\r\n componentEffects.forEach(effect => {\r\n if (effect.cleanup) effect.cleanup();\r\n });\r\n effects.set(rendererId, []);\r\n }\r\n \r\n // Trigger re-render\r\n if (globalRenderCallback && globalContainer && currentElement) {\r\n await globalRenderCallback(currentElement, globalContainer);\r\n }\r\n } catch (error) {\r\n console.error('Error during rerender:', error);\r\n }\r\n}\r\n\r\nexport function useErrorBoundary() {\r\n const [error, setError] = useState(null);\r\n return [error, () => setError(null)];\r\n}\r\n\r\n// Re-export from context to match index.js\r\nexport { createContext, useContext };\r\n","import { VNode } from './types.js';\r\nimport { prepareRender, finishRender } from './hooks.js';\r\n\r\ntype Component = (props: any) => any;\r\n\r\n/**\r\n * Renders a virtual DOM tree to an HTML string\r\n */\r\nexport function renderToString(vnode: VNode): string {\r\n // Reset hook state for this render\r\n prepareRender();\r\n \r\n // Render the tree to HTML\r\n const html = renderNodeToString(vnode);\r\n \r\n // Clean up after rendering\r\n finishRender();\r\n \r\n return html;\r\n}\r\n\r\n/**\r\n * Internal function to convert a virtual node to an HTML string\r\n */\r\nfunction renderNodeToString(vnode: VNode | string | number | boolean | null | undefined): string {\r\n // Handle primitive values\r\n if (vnode === null || vnode === undefined) return '';\r\n if (typeof vnode === 'boolean') return '';\r\n if (typeof vnode === 'number' || typeof vnode === 'string') return escapeHtml(String(vnode));\r\n \r\n // Handle function components\r\n if (typeof vnode.type === 'function') {\r\n const Component = vnode.type as Component;\r\n const renderedNode = Component(vnode.props || {});\r\n return renderNodeToString(renderedNode);\r\n }\r\n \r\n // Handle intrinsic elements (regular HTML tags)\r\n if (typeof vnode.type === 'string') {\r\n const tag = vnode.type;\r\n let attrs = '';\r\n let children = '';\r\n \r\n // Convert props to HTML attributes\r\n if (vnode.props) {\r\n for (const [key, value] of Object.entries(vnode.props)) {\r\n // Skip children prop as we handle it separately\r\n if (key === 'children') continue;\r\n \r\n // Skip event handlers (they start with 'on')\r\n if (key.startsWith('on')) continue;\r\n \r\n // Handle the className prop specially\r\n if (key === 'className') {\r\n attrs += ` class=\"${escapeHtml(value as string)}\"`;\r\n continue;\r\n }\r\n \r\n // Handle other attributes\r\n if (typeof value === 'string' || typeof value === 'number') {\r\n attrs += ` ${key}=\"${escapeHtml(String(value))}\"`;\r\n } else if (value === true) {\r\n // Boolean attributes\r\n attrs += ` ${key}`;\r\n }\r\n }\r\n }\r\n \r\n // Process children\r\n const childrenArray = (vnode.props?.children) \r\n ? Array.isArray(vnode.props.children) \r\n ? vnode.props.children \r\n : [vnode.props.children]\r\n : [];\r\n \r\n for (const child of childrenArray) {\r\n children += renderNodeToString(child);\r\n }\r\n \r\n // Self-closing tags\r\n const selfClosing = [\r\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\r\n 'link', 'meta', 'param', 'source', 'track', 'wbr'\r\n ];\r\n \r\n if (selfClosing.includes(tag)) {\r\n return `<${tag}${attrs}/>`;\r\n }\r\n \r\n // Regular tags with closing\r\n return `<${tag}${attrs}>${children}</${tag}>`;\r\n }\r\n \r\n // Handle fragments\r\n if (vnode.type === Symbol.for('react.fragment')) {\r\n let fragmentOutput = '';\r\n const children = Array.isArray(vnode.props?.children)\r\n ? vnode.props.children\r\n : vnode.props?.children ? [vnode.props.children] : [];\r\n \r\n for (const child of children) {\r\n fragmentOutput += renderNodeToString(child);\r\n }\r\n \r\n return fragmentOutput;\r\n }\r\n \r\n // Fallback for unknown node types\r\n console.warn('Unknown vnode type:', vnode.type);\r\n return '';\r\n}\r\n\r\n/**\r\n * Escape HTML special characters to prevent XSS\r\n */\r\nfunction escapeHtml(text: string): string {\r\n return text\r\n .replace(/&/g, '&amp;')\r\n .replace(/</g, '&lt;')\r\n .replace(/>/g, '&gt;')\r\n .replace(/\"/g, '&quot;')\r\n .replace(/'/g, '&#039;');\r\n}\r\n"],"names":["index","state","setState","effectIndex","ref"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./server-renderer-CqIpQ-od.cjs");exports.renderToString=e.renderToString;
2
+ //# sourceMappingURL=server-renderer.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-renderer.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1 +1,5 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./hooks-0728361a.cjs");function y(r){a.prepareRender();const p=s(r);return a.finishRender(),p}function s(r){var p,l,f;if(r==null||typeof r=="boolean")return"";if(typeof r=="number"||typeof r=="string")return o(String(r));if(typeof r.type=="function"){const e=r.type,t=e(r.props||{});return s(t)}if(typeof r.type=="string"){const e=r.type;let t="",c="";if(r.props){for(const[n,i]of Object.entries(r.props))if(n!=="children"&&!n.startsWith("on")){if(n==="className"){t+=` class="${o(i)}"`;continue}typeof i=="string"||typeof i=="number"?t+=` ${n}="${o(String(i))}"`:i===!0&&(t+=` ${n}`)}}const u=(p=r.props)!=null&&p.children?Array.isArray(r.props.children)?r.props.children:[r.props.children]:[];for(const n of u)c+=s(n);return["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"].includes(e)?`<${e}${t}/>`:`<${e}${t}>${c}</${e}>`}if(r.type===Symbol.for("react.fragment")){let e="";const t=Array.isArray((l=r.props)==null?void 0:l.children)?r.props.children:(f=r.props)!=null&&f.children?[r.props.children]:[];for(const c of t)e+=s(c);return e}return console.warn("Unknown vnode type:",r.type),""}function o(r){return r.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}exports.renderToString=y;
1
+ import { r } from "./server-renderer-QHt45Ip2.js";
2
+ export {
3
+ r as renderToString
4
+ };
5
+ //# sourceMappingURL=server-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-renderer.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}