@absolutejs/absolute 0.19.0-beta.807 → 0.19.0-beta.809

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 (260) hide show
  1. package/dist/angular/browser.js +9801 -57
  2. package/dist/angular/browser.js.map +246 -4
  3. package/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
  4. package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
  5. package/dist/angular/index.js +14877 -60
  6. package/dist/angular/index.js.map +281 -4
  7. package/dist/angular/server.js +5610 -45
  8. package/dist/angular/server.js.map +51 -3
  9. package/dist/build.js +18092 -45
  10. package/dist/build.js.map +99 -3
  11. package/dist/cli/index.js +317 -86
  12. package/dist/client/index.js +1091 -70
  13. package/dist/client/index.js.map +24 -4
  14. package/dist/core/streamingSlotRegistrar.js +108 -11
  15. package/dist/core/streamingSlotRegistrar.js.map +4 -3
  16. package/dist/core/streamingSlotRegistry.js +169 -7
  17. package/dist/core/streamingSlotRegistry.js.map +5 -3
  18. package/dist/index.js +19957 -547
  19. package/dist/index.js.map +116 -3
  20. package/dist/islands/browser.js +228 -9
  21. package/dist/islands/browser.js.map +9 -4
  22. package/dist/islands/index.js +1908 -17
  23. package/dist/islands/index.js.map +27 -3
  24. package/dist/react/browser.js +328 -12
  25. package/dist/react/browser.js.map +12 -4
  26. package/dist/react/components/index.js +167 -16
  27. package/dist/react/components/index.js.map +6 -3
  28. package/dist/react/hooks/index.js +183 -8
  29. package/dist/react/hooks/index.js.map +7 -3
  30. package/dist/react/index.js +3627 -36
  31. package/dist/react/index.js.map +45 -4
  32. package/dist/react/jsxDevRuntimeCompat.js +61 -2
  33. package/dist/react/jsxDevRuntimeCompat.js.map +2 -2
  34. package/dist/react/server.js +1789 -18
  35. package/dist/react/server.js.map +21 -3
  36. package/dist/src/angular/injectorPatch.d.ts +1 -0
  37. package/dist/src/angular/islands.d.ts +1 -0
  38. package/dist/src/client/hydrators/react.d.ts +3 -0
  39. package/dist/src/client/hydrators/svelte.d.ts +2 -0
  40. package/dist/src/client/hydrators/vue.d.ts +2 -0
  41. package/dist/src/index.d.ts +1 -0
  42. package/dist/svelte/browser.js +247 -12
  43. package/dist/svelte/browser.js.map +10 -3
  44. package/dist/svelte/index.js +3732 -37
  45. package/dist/svelte/index.js.map +47 -4
  46. package/dist/svelte/server.js +2794 -21
  47. package/dist/svelte/server.js.map +27 -3
  48. package/dist/vue/browser.js +348 -12
  49. package/dist/vue/browser.js.map +12 -4
  50. package/dist/vue/components/Image.js +240 -7
  51. package/dist/vue/components/Image.js.map +6 -3
  52. package/dist/vue/components/index.js +544 -11
  53. package/dist/vue/components/index.js.map +9 -3
  54. package/dist/vue/index.js +4212 -52
  55. package/dist/vue/index.js.map +50 -4
  56. package/dist/vue/server.js +1849 -18
  57. package/dist/vue/server.js.map +21 -3
  58. package/package.json +1 -1
  59. package/dist/chunk-0867j0r0.js +0 -136
  60. package/dist/chunk-0867j0r0.js.map +0 -10
  61. package/dist/chunk-102fp7xe.js +0 -63
  62. package/dist/chunk-102fp7xe.js.map +0 -10
  63. package/dist/chunk-11zpfqz6.js +0 -19
  64. package/dist/chunk-11zpfqz6.js.map +0 -10
  65. package/dist/chunk-1rfh7hw9.js +0 -319
  66. package/dist/chunk-1rfh7hw9.js.map +0 -11
  67. package/dist/chunk-1x4fxm57.js +0 -51
  68. package/dist/chunk-1x4fxm57.js.map +0 -9
  69. package/dist/chunk-25v9t56f.js +0 -29
  70. package/dist/chunk-25v9t56f.js.map +0 -11
  71. package/dist/chunk-2f21eenc.js +0 -21
  72. package/dist/chunk-2f21eenc.js.map +0 -10
  73. package/dist/chunk-2ga2znex.js +0 -13
  74. package/dist/chunk-2ga2znex.js.map +0 -9
  75. package/dist/chunk-30yrw0f6.js +0 -33
  76. package/dist/chunk-30yrw0f6.js.map +0 -10
  77. package/dist/chunk-3g91wb4f.js +0 -358
  78. package/dist/chunk-3g91wb4f.js.map +0 -10
  79. package/dist/chunk-3rea1gam.js +0 -4403
  80. package/dist/chunk-3rea1gam.js.map +0 -28
  81. package/dist/chunk-3yjzpcne.js +0 -34
  82. package/dist/chunk-3yjzpcne.js.map +0 -10
  83. package/dist/chunk-41bf6aqt.js +0 -17
  84. package/dist/chunk-41bf6aqt.js.map +0 -9
  85. package/dist/chunk-4d39r92n.js +0 -81
  86. package/dist/chunk-4d39r92n.js.map +0 -10
  87. package/dist/chunk-5003emhv.js +0 -17
  88. package/dist/chunk-5003emhv.js.map +0 -10
  89. package/dist/chunk-5f67rsed.js +0 -466
  90. package/dist/chunk-5f67rsed.js.map +0 -10
  91. package/dist/chunk-5fhp1jap.js +0 -9169
  92. package/dist/chunk-5fhp1jap.js.map +0 -236
  93. package/dist/chunk-629x0yh4.js +0 -20
  94. package/dist/chunk-629x0yh4.js.map +0 -9
  95. package/dist/chunk-6pdj08z3.js +0 -73
  96. package/dist/chunk-6pdj08z3.js.map +0 -12
  97. package/dist/chunk-6qjbrt0k.js +0 -13
  98. package/dist/chunk-6qjbrt0k.js.map +0 -9
  99. package/dist/chunk-6sccb4jr.js +0 -14
  100. package/dist/chunk-6sccb4jr.js.map +0 -9
  101. package/dist/chunk-798spvzv.js +0 -50
  102. package/dist/chunk-798spvzv.js.map +0 -10
  103. package/dist/chunk-7fw6x3js.js +0 -131
  104. package/dist/chunk-7fw6x3js.js.map +0 -11
  105. package/dist/chunk-7kjj42xm.js +0 -11
  106. package/dist/chunk-7kjj42xm.js.map +0 -10
  107. package/dist/chunk-7mtstdqn.js +0 -90
  108. package/dist/chunk-7mtstdqn.js.map +0 -10
  109. package/dist/chunk-851whwc7.js +0 -17
  110. package/dist/chunk-851whwc7.js.map +0 -10
  111. package/dist/chunk-85n68sy6.js +0 -103
  112. package/dist/chunk-85n68sy6.js.map +0 -10
  113. package/dist/chunk-8kcfffry.js +0 -35
  114. package/dist/chunk-8kcfffry.js.map +0 -10
  115. package/dist/chunk-92fsjfpp.js +0 -1731
  116. package/dist/chunk-92fsjfpp.js.map +0 -11
  117. package/dist/chunk-93sqk7be.js +0 -139
  118. package/dist/chunk-93sqk7be.js.map +0 -12
  119. package/dist/chunk-9c5tj4k3.js +0 -130
  120. package/dist/chunk-9c5tj4k3.js.map +0 -10
  121. package/dist/chunk-9j59emg3.js +0 -184
  122. package/dist/chunk-9j59emg3.js.map +0 -11
  123. package/dist/chunk-9ve9jq72.js +0 -203
  124. package/dist/chunk-9ve9jq72.js.map +0 -10
  125. package/dist/chunk-9xrsjeem.js +0 -12
  126. package/dist/chunk-9xrsjeem.js.map +0 -9
  127. package/dist/chunk-a9mvyp04.js +0 -87
  128. package/dist/chunk-a9mvyp04.js.map +0 -10
  129. package/dist/chunk-b3gbnrwe.js +0 -21
  130. package/dist/chunk-b3gbnrwe.js.map +0 -10
  131. package/dist/chunk-bgb8k1qs.js +0 -672
  132. package/dist/chunk-bgb8k1qs.js.map +0 -15
  133. package/dist/chunk-bmgqm774.js +0 -65
  134. package/dist/chunk-bmgqm774.js.map +0 -9
  135. package/dist/chunk-bxfghpma.js +0 -69
  136. package/dist/chunk-bxfghpma.js.map +0 -10
  137. package/dist/chunk-c1jfjnka.js +0 -74
  138. package/dist/chunk-c1jfjnka.js.map +0 -10
  139. package/dist/chunk-cbkrwmvh.js +0 -80
  140. package/dist/chunk-cbkrwmvh.js.map +0 -10
  141. package/dist/chunk-cdxd7sy2.js +0 -71
  142. package/dist/chunk-cdxd7sy2.js.map +0 -10
  143. package/dist/chunk-cg95827x.js +0 -21
  144. package/dist/chunk-cg95827x.js.map +0 -10
  145. package/dist/chunk-cm0g4q6w.js +0 -149
  146. package/dist/chunk-cm0g4q6w.js.map +0 -10
  147. package/dist/chunk-d7mwkzry.js +0 -261
  148. package/dist/chunk-d7mwkzry.js.map +0 -10
  149. package/dist/chunk-d9c0am65.js +0 -12
  150. package/dist/chunk-d9c0am65.js.map +0 -10
  151. package/dist/chunk-daqghmg8.js +0 -12
  152. package/dist/chunk-daqghmg8.js.map +0 -9
  153. package/dist/chunk-e3r9fxaa.js +0 -149
  154. package/dist/chunk-e3r9fxaa.js.map +0 -10
  155. package/dist/chunk-e8eecyrq.js +0 -244
  156. package/dist/chunk-e8eecyrq.js.map +0 -10
  157. package/dist/chunk-ex2hxe0v.js +0 -160
  158. package/dist/chunk-ex2hxe0v.js.map +0 -11
  159. package/dist/chunk-fak944et.js +0 -91
  160. package/dist/chunk-fak944et.js.map +0 -10
  161. package/dist/chunk-fygx2ymm.js +0 -118
  162. package/dist/chunk-fygx2ymm.js.map +0 -12
  163. package/dist/chunk-g15qj669.js +0 -271
  164. package/dist/chunk-g15qj669.js.map +0 -11
  165. package/dist/chunk-gd6wmknh.js +0 -121
  166. package/dist/chunk-gd6wmknh.js.map +0 -11
  167. package/dist/chunk-gf0ygptk.js +0 -85
  168. package/dist/chunk-gf0ygptk.js.map +0 -11
  169. package/dist/chunk-gytkmthr.js +0 -220
  170. package/dist/chunk-gytkmthr.js.map +0 -10
  171. package/dist/chunk-h5bbfn3n.js +0 -28
  172. package/dist/chunk-h5bbfn3n.js.map +0 -11
  173. package/dist/chunk-h6mye9r3.js +0 -93
  174. package/dist/chunk-h6mye9r3.js.map +0 -10
  175. package/dist/chunk-hcsmxw1v.js +0 -85
  176. package/dist/chunk-hcsmxw1v.js.map +0 -10
  177. package/dist/chunk-hyjs4bqs.js +0 -8
  178. package/dist/chunk-hyjs4bqs.js.map +0 -10
  179. package/dist/chunk-jn91vzkh.js +0 -66
  180. package/dist/chunk-jn91vzkh.js.map +0 -10
  181. package/dist/chunk-jpkjdgsk.js +0 -167
  182. package/dist/chunk-jpkjdgsk.js.map +0 -11
  183. package/dist/chunk-jwxt8gnp.js +0 -13
  184. package/dist/chunk-jwxt8gnp.js.map +0 -9
  185. package/dist/chunk-kk8w9rh5.js +0 -195
  186. package/dist/chunk-kk8w9rh5.js.map +0 -10
  187. package/dist/chunk-kwgh8rmg.js +0 -426
  188. package/dist/chunk-kwgh8rmg.js.map +0 -14
  189. package/dist/chunk-m97ze5hz.js +0 -46
  190. package/dist/chunk-m97ze5hz.js.map +0 -10
  191. package/dist/chunk-mbazhahf.js +0 -60
  192. package/dist/chunk-mbazhahf.js.map +0 -10
  193. package/dist/chunk-mgfwq18r.js +0 -15
  194. package/dist/chunk-mgfwq18r.js.map +0 -9
  195. package/dist/chunk-mtgf69xn.js +0 -88
  196. package/dist/chunk-mtgf69xn.js.map +0 -10
  197. package/dist/chunk-mtxzyxpg.js +0 -102
  198. package/dist/chunk-mtxzyxpg.js.map +0 -10
  199. package/dist/chunk-nehhtthw.js +0 -225
  200. package/dist/chunk-nehhtthw.js.map +0 -10
  201. package/dist/chunk-p5504p14.js +0 -16
  202. package/dist/chunk-p5504p14.js.map +0 -10
  203. package/dist/chunk-p5zgj77m.js +0 -184
  204. package/dist/chunk-p5zgj77m.js.map +0 -10
  205. package/dist/chunk-pnscgw95.js +0 -90
  206. package/dist/chunk-pnscgw95.js.map +0 -10
  207. package/dist/chunk-pvpp4pvs.js +0 -17
  208. package/dist/chunk-pvpp4pvs.js.map +0 -10
  209. package/dist/chunk-qh75agse.js +0 -95
  210. package/dist/chunk-qh75agse.js.map +0 -10
  211. package/dist/chunk-qxq2zcty.js +0 -52
  212. package/dist/chunk-qxq2zcty.js.map +0 -10
  213. package/dist/chunk-r6e8pytx.js +0 -22
  214. package/dist/chunk-r6e8pytx.js.map +0 -9
  215. package/dist/chunk-r7jmgqnw.js +0 -114
  216. package/dist/chunk-r7jmgqnw.js.map +0 -10
  217. package/dist/chunk-s6defjk2.js +0 -116
  218. package/dist/chunk-s6defjk2.js.map +0 -10
  219. package/dist/chunk-sd39p726.js +0 -619
  220. package/dist/chunk-sd39p726.js.map +0 -10
  221. package/dist/chunk-swrnzs4c.js +0 -63
  222. package/dist/chunk-swrnzs4c.js.map +0 -10
  223. package/dist/chunk-tfe3sb44.js +0 -33
  224. package/dist/chunk-tfe3sb44.js.map +0 -10
  225. package/dist/chunk-tjr0kcev.js +0 -41
  226. package/dist/chunk-tjr0kcev.js.map +0 -9
  227. package/dist/chunk-tx9edm1x.js +0 -34
  228. package/dist/chunk-tx9edm1x.js.map +0 -10
  229. package/dist/chunk-txhm2vb5.js +0 -18
  230. package/dist/chunk-txhm2vb5.js.map +0 -9
  231. package/dist/chunk-v5vmsxmy.js +0 -526
  232. package/dist/chunk-v5vmsxmy.js.map +0 -12
  233. package/dist/chunk-vjhxm8n2.js +0 -29
  234. package/dist/chunk-vjhxm8n2.js.map +0 -9
  235. package/dist/chunk-vkrpm7kc.js +0 -247
  236. package/dist/chunk-vkrpm7kc.js.map +0 -12
  237. package/dist/chunk-w3m4m5we.js +0 -4925
  238. package/dist/chunk-w3m4m5we.js.map +0 -12
  239. package/dist/chunk-wrxtn9ve.js +0 -18
  240. package/dist/chunk-wrxtn9ve.js.map +0 -10
  241. package/dist/chunk-x09cskqd.js +0 -377
  242. package/dist/chunk-x09cskqd.js.map +0 -10
  243. package/dist/chunk-xnt8c6h2.js +0 -576
  244. package/dist/chunk-xnt8c6h2.js.map +0 -10
  245. package/dist/chunk-xw0tx842.js +0 -13
  246. package/dist/chunk-xw0tx842.js.map +0 -9
  247. package/dist/chunk-xx5b6b9m.js +0 -69
  248. package/dist/chunk-xx5b6b9m.js.map +0 -10
  249. package/dist/chunk-xz1kdswj.js +0 -21
  250. package/dist/chunk-xz1kdswj.js.map +0 -9
  251. package/dist/chunk-y84qnsd3.js +0 -32
  252. package/dist/chunk-y84qnsd3.js.map +0 -10
  253. package/dist/chunk-ywjn0rad.js +0 -14
  254. package/dist/chunk-ywjn0rad.js.map +0 -9
  255. package/dist/chunk-z9nvhm6r.js +0 -13
  256. package/dist/chunk-z9nvhm6r.js.map +0 -9
  257. package/dist/chunk-zhmvdpk6.js +0 -15
  258. package/dist/chunk-zhmvdpk6.js.map +0 -9
  259. package/dist/chunk-zrg9d4zw.js +0 -784
  260. package/dist/chunk-zrg9d4zw.js.map +0 -10
@@ -1,9 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sourcesContent": [
5
- ],
6
- "mappings": "",
7
- "debugId": "D58DF931EFDC61C964756E2164756E21",
8
- "names": []
9
- }
@@ -1,33 +0,0 @@
1
- // @bun
2
- import"./chunk-bmgqm774.js";
3
-
4
- // src/dev/simpleHTMLHMR.ts
5
- import { resolve } from "path";
6
- var handleHTMLUpdate = async (htmlFilePath) => {
7
- let htmlContent;
8
- try {
9
- const resolvedPath = resolve(htmlFilePath);
10
- const file = Bun.file(resolvedPath);
11
- if (!await file.exists()) {
12
- return null;
13
- }
14
- htmlContent = await file.text();
15
- } catch {
16
- return null;
17
- }
18
- const headMatch = htmlContent.match(/<head[^>]*>([\s\S]*?)<\/head>/i);
19
- const bodyMatch = htmlContent.match(/<body[^>]*>([\s\S]*)<\/body>/i);
20
- if (bodyMatch && bodyMatch[1]) {
21
- return {
22
- body: bodyMatch[1].trim(),
23
- head: headMatch && headMatch[1] ? headMatch[1].trim() : null
24
- };
25
- }
26
- return htmlContent;
27
- };
28
- export {
29
- handleHTMLUpdate
30
- };
31
-
32
- //# debugId=7F537141C136B47F64756E2164756E21
33
- //# sourceMappingURL=chunk-30yrw0f6.js.map
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/dev/simpleHTMLHMR.ts"],
4
- "sourcesContent": [
5
- "/* Simple HTML HMR Implementation\n Lightweight approach: read HTML file → send HTML patch */\n\nimport { resolve } from 'node:path';\n\n/* Simple HTML HMR handler for server-side\n When an HTML file changes:\n 1. Read the HTML file\n 2. Extract body content (or return full HTML)\n 3. Return the HTML for patching */\nexport const handleHTMLUpdate = async (htmlFilePath: string) => {\n\tlet htmlContent: string;\n\ttry {\n\t\tconst resolvedPath = resolve(htmlFilePath);\n\t\tconst file = Bun.file(resolvedPath);\n\t\tif (!(await file.exists())) {\n\t\t\treturn null;\n\t\t}\n\t\thtmlContent = await file.text();\n\t} catch {\n\t\treturn null;\n\t}\n\n\tconst headMatch = htmlContent.match(/<head[^>]*>([\\s\\S]*?)<\\/head>/i);\n\tconst bodyMatch = htmlContent.match(/<body[^>]*>([\\s\\S]*)<\\/body>/i);\n\n\tif (bodyMatch && bodyMatch[1]) {\n\t\treturn {\n\t\t\tbody: bodyMatch[1].trim(),\n\t\t\thead: headMatch && headMatch[1] ? headMatch[1].trim() : null\n\t\t};\n\t}\n\n\treturn htmlContent;\n};\n"
6
- ],
7
- "mappings": ";;;;AAGA;AAOO,IAAM,mBAAmB,OAAO,iBAAyB;AAAA,EAC/D,IAAI;AAAA,EACJ,IAAI;AAAA,IACH,MAAM,eAAe,QAAQ,YAAY;AAAA,IACzC,MAAM,OAAO,IAAI,KAAK,YAAY;AAAA,IAClC,IAAI,CAAE,MAAM,KAAK,OAAO,GAAI;AAAA,MAC3B,OAAO;AAAA,IACR;AAAA,IACA,cAAc,MAAM,KAAK,KAAK;AAAA,IAC7B,MAAM;AAAA,IACP,OAAO;AAAA;AAAA,EAGR,MAAM,YAAY,YAAY,MAAM,gCAAgC;AAAA,EACpE,MAAM,YAAY,YAAY,MAAM,+BAA+B;AAAA,EAEnE,IAAI,aAAa,UAAU,IAAI;AAAA,IAC9B,OAAO;AAAA,MACN,MAAM,UAAU,GAAG,KAAK;AAAA,MACxB,MAAM,aAAa,UAAU,KAAK,UAAU,GAAG,KAAK,IAAI;AAAA,IACzD;AAAA,EACD;AAAA,EAEA,OAAO;AAAA;",
8
- "debugId": "7F537141C136B47F64756E2164756E21",
9
- "names": []
10
- }
@@ -1,358 +0,0 @@
1
- // @bun
2
- import {
3
- toPascal
4
- } from "./chunk-p5504p14.js";
5
-
6
- // src/build/generateReactIndexes.ts
7
- import { existsSync, mkdirSync } from "fs";
8
- import { readdir, rm, writeFile } from "fs/promises";
9
- import { basename, join, relative, resolve, sep } from "path";
10
- var {Glob } = globalThis.Bun;
11
- var indexContentCache = new Map;
12
- var resolveDevClientDir = () => {
13
- const projectRoot = process.cwd();
14
- const fromSource = resolve(import.meta.dir, "../dev/client");
15
- if (existsSync(fromSource) && fromSource.startsWith(projectRoot)) {
16
- return fromSource;
17
- }
18
- const fromNodeModules = resolve(projectRoot, "node_modules/@absolutejs/absolute/dist/dev/client");
19
- if (existsSync(fromNodeModules))
20
- return fromNodeModules;
21
- return resolve(import.meta.dir, "./dev/client");
22
- };
23
- var devClientDir = resolveDevClientDir();
24
- var errorOverlayPath = join(devClientDir, "errorOverlay.ts").replace(/\\/g, "/");
25
- var hmrClientPath = join(devClientDir, "hmrClient.ts").replace(/\\/g, "/");
26
- var refreshSetupPath = join(devClientDir, "reactRefreshSetup.ts").replace(/\\/g, "/");
27
- var generateReactIndexFiles = async (reactPagesDirectory, reactIndexesDirectory, isDev = false) => {
28
- if (!existsSync(reactIndexesDirectory)) {
29
- mkdirSync(reactIndexesDirectory, { recursive: true });
30
- }
31
- const CONVENTION_RE = /^(?:(.+)\.)?(error|loading|not-found)\.[^.]+$/;
32
- const pagesGlob = new Glob("*.{jsx,tsx}");
33
- const files = [];
34
- for await (const file of pagesGlob.scan({ cwd: reactPagesDirectory })) {
35
- if (CONVENTION_RE.test(file))
36
- continue;
37
- files.push(file);
38
- }
39
- const currentPageNames = new Set(files.map((file) => basename(file).split(".")[0]));
40
- const emptyStringArray = [];
41
- const existingIndexes = await readdir(reactIndexesDirectory).catch(() => emptyStringArray);
42
- const staleIndexes = existingIndexes.filter((indexFile) => {
43
- const indexName = indexFile.replace(/\.tsx$/, "");
44
- return indexName !== "_refresh" && !currentPageNames.has(indexName);
45
- });
46
- if (staleIndexes.length > 0) {
47
- await Promise.all(staleIndexes.map((indexFile) => {
48
- indexContentCache.delete(join(reactIndexesDirectory, indexFile));
49
- return rm(join(reactIndexesDirectory, indexFile), {
50
- force: true
51
- });
52
- }));
53
- }
54
- const pagesRelPath = relative(resolve(reactIndexesDirectory), resolve(reactPagesDirectory)).split(sep).join("/");
55
- const promises = files.map(async (file) => {
56
- const fileName = basename(file);
57
- const componentName = fileName.split(".")[0];
58
- const pascalComponentName = toPascal(componentName);
59
- const hmrPreamble = isDev ? [
60
- `window.__HMR_FRAMEWORK__ = "react";`,
61
- `window.__REACT_COMPONENT_KEY__ = "${componentName}Index";`,
62
- `import '${refreshSetupPath}';`,
63
- `import '${hmrClientPath}';`,
64
- `import { showErrorOverlay, hideErrorOverlay } from '${errorOverlayPath}';
65
- `
66
- ] : [];
67
- const reactImports = isDev ? [
68
- `import { hydrateRoot, createRoot } from 'react-dom/client';`,
69
- `import { createElement, Component } from 'react';`
70
- ] : [
71
- `import { hydrateRoot, createRoot } from 'react-dom/client';`,
72
- `import { createElement } from 'react';`
73
- ];
74
- const errorBoundaryDef = isDev ? [
75
- `
76
- // Dev-only Error Boundary to catch React render errors`,
77
- `class ErrorBoundary extends Component {`,
78
- ` constructor(props) {`,
79
- ` super(props);`,
80
- ` this.state = { hasError: false };`,
81
- ` window.__ERROR_BOUNDARY__ = this;`,
82
- ` }`,
83
- ` static getDerivedStateFromError() {`,
84
- ` return { hasError: true };`,
85
- ` }`,
86
- ` componentDidCatch(error) {`,
87
- ` showErrorOverlay({`,
88
- ` framework: 'react',`,
89
- ` kind: 'runtime',`,
90
- ` message: error && error.stack ? error.stack : String(error)`,
91
- ` });`,
92
- ` }`,
93
- ` componentDidUpdate(prevProps, prevState) {`,
94
- ` if (prevState.hasError && !this.state.hasError) {`,
95
- ` hideErrorOverlay();`,
96
- ` }`,
97
- ` }`,
98
- ` reset() {`,
99
- ` this.setState({ hasError: false });`,
100
- ` }`,
101
- ` render() {`,
102
- ` if (this.state.hasError) return null;`,
103
- ``,
104
- ` return this.props.children;`,
105
- ` }`,
106
- `}
107
- `
108
- ] : [];
109
- const content = [
110
- ...hmrPreamble,
111
- ...reactImports,
112
- `import * as PageModule from '${pagesRelPath}/${componentName}';
113
- `,
114
- ...errorBoundaryDef,
115
- `// Hydration with error handling and fallback`,
116
- `const isDev = ${isDev};`,
117
- `const componentPath = '${pagesRelPath}/${componentName}';
118
- `,
119
- `function resolvePageComponent(module, candidateNames) {`,
120
- ` for (const name of candidateNames) {`,
121
- ` const value = module[name];`,
122
- ` if (typeof value === 'function' || (value && typeof value === 'object')) return value;`,
123
- ` }`,
124
- ` for (const [name, value] of Object.entries(module)) {`,
125
- ` if (!/^[A-Z]/.test(name)) continue;`,
126
- ` if (typeof value === 'function' || (value && typeof value === 'object')) return value;`,
127
- ` }`,
128
- ` throw new Error('React page module ' + componentPath + ' does not export a component. Expected default, ${pascalComponentName}, ${componentName}, or any PascalCase export.');`,
129
- `}`,
130
- `const PageComponent = resolvePageComponent(PageModule, ['default', '${pascalComponentName}', '${componentName}']);
131
- `,
132
- `function isHydrationError(error) {`,
133
- ` if (!error) return false;`,
134
- ` const errorMessage = error instanceof Error ? error.message : String(error);`,
135
- ` const errorString = String(error);`,
136
- ` const fullMessage = errorMessage + ' ' + errorString;`,
137
- ` const hydrationKeywords = ['hydration', 'Hydration', 'mismatch', 'Mismatch', 'did not match', 'server rendered HTML', 'server HTML', 'client HTML', 'Hydration failed'];`,
138
- ` const isHydration = hydrationKeywords.some(keyword => fullMessage.includes(keyword));`,
139
- ` `,
140
- ` // Ignore whitespace-only mismatches in <head> - these are harmless formatting differences`,
141
- ` // The error often shows: + <link...> vs - {"\\n "} which is just formatting`,
142
- ` if (isHydration) {`,
143
- ` // Check if this is a head/link/stylesheet related mismatch`,
144
- ` const isHeadRelated = fullMessage.includes('<head') || fullMessage.includes('</head>') || fullMessage.includes('head>') || fullMessage.includes('<link') || fullMessage.includes('link>') || fullMessage.includes('stylesheet') || fullMessage.includes('fonts.googleapis') || fullMessage.includes('rel="stylesheet"');`,
145
- ` `,
146
- ` // Check if the mismatch involves only whitespace/newlines`,
147
- ` // Pattern: looks for {"\\n"} or {"\\n "} or similar whitespace-only content`,
148
- ` // Also check for patterns like: - {"\\n "} or + <link...>`,
149
- ` const hasWhitespacePattern = /\\{\\s*["']\\\\n[^"']*["']\\s*\\}/.test(fullMessage) || /\\{\\s*["'][\\\\n\\\\r\\\\s]+["']\\s*\\}/.test(fullMessage) || /-\\s*\\{\\s*["'][\\\\n\\\\r\\\\s]+["']\\s*\\}/.test(fullMessage);`,
150
- ` const isWhitespaceOnly = /^[\\s\\n\\r]*$/.test(errorString) || /^[\\s\\n\\r]*$/.test(errorMessage);`,
151
- ` const hasNewlinePattern = fullMessage.includes('\\\\n') || fullMessage.includes('\\\\r') || fullMessage.includes('\\n') || fullMessage.includes('\\r');`,
152
- ` `,
153
- ` // If it's head-related and involves whitespace/newlines, ignore it`,
154
- ` if (isHeadRelated && (hasWhitespacePattern || isWhitespaceOnly || hasNewlinePattern)) {`,
155
- ` return false; // Don't treat whitespace-only head mismatches as errors`,
156
- ` }`,
157
- ` }`,
158
- ` return isHydration;`,
159
- `}
160
- `,
161
- `function logHydrationError(error, componentName) {`,
162
- ` if (!isDev) return;`,
163
- ` if (window.__HMR_WS__ && window.__HMR_WS__.readyState === WebSocket.OPEN) {`,
164
- ` try {`,
165
- ` window.__HMR_WS__.send(JSON.stringify({`,
166
- ` type: 'hydration-error',`,
167
- ` data: {`,
168
- ` componentName: '${componentName}',`,
169
- ` componentPath: componentPath,`,
170
- ` error: error instanceof Error ? error.message : String(error),`,
171
- ` timestamp: Date.now()`,
172
- ` }`,
173
- ` }));`,
174
- ` } catch (err) {}`,
175
- ` }`,
176
- `}
177
- `,
178
- `// Track if we've already switched to client-only mode`,
179
- `let hasSwitchedToClientOnly = false;`,
180
- `let hydrationErrorDetected = false;
181
- `,
182
- `function handleHydrationFallback(error) {`,
183
- ` if (hasSwitchedToClientOnly) return; // Already handled`,
184
- ` hasSwitchedToClientOnly = true;`,
185
- ` hydrationErrorDetected = true;
186
- `,
187
- ` logHydrationError(error, '${componentName}');
188
- `,
189
- ` // Fallback: client-only render (no hydration)`,
190
- ` try {`,
191
- ` // Unmount existing root if it exists`,
192
- ` if (window.__REACT_ROOT__ && typeof window.__REACT_ROOT__.unmount === 'function') {`,
193
- ` try {`,
194
- ` window.__REACT_ROOT__.unmount();`,
195
- ` } catch (e) {`,
196
- ` // Ignore unmount errors`,
197
- ` }`,
198
- ` }
199
- `,
200
- ` // Render into the same root container when falling back to client-only`,
201
- ` const root = createRoot(container);`,
202
- ` root.render(${isDev ? `createElement(ErrorBoundary, null, createElement(PageComponent, mergedProps))` : `createElement(PageComponent, mergedProps)`});`,
203
- ` window.__REACT_ROOT__ = root;`,
204
- ` window.__HMR_CLIENT_ONLY_MODE__ = true;`,
205
- ` } catch (fallbackError) {`,
206
- ` window.location.reload();`,
207
- ` }`,
208
- `}
209
- `,
210
- `// HMR State Preservation: Check for preserved state and merge with initial props`,
211
- `// This allows state to be preserved across HMR updates without modifying component files`,
212
- `let preservedState = (typeof window !== 'undefined' && window.__HMR_PRESERVED_STATE__) ? window.__HMR_PRESERVED_STATE__ : {};
213
- `,
214
- `// Also check sessionStorage for state that survived a page reload (for React HMR)`,
215
- `if (typeof window !== 'undefined' && typeof sessionStorage !== 'undefined') {`,
216
- ` const hmrStateJson = sessionStorage.getItem('__REACT_HMR_STATE__');`,
217
- ` if (hmrStateJson) {`,
218
- ` try {`,
219
- ` const hmrState = JSON.parse(hmrStateJson);`,
220
- ` preservedState = { ...preservedState, ...hmrState };`,
221
- ` sessionStorage.removeItem('__REACT_HMR_STATE__');`,
222
- ` } catch (e) {}`,
223
- ` }`,
224
- `}
225
- `,
226
- `const mergedProps = { ...(window.__INITIAL_PROPS__ || {}), ...preservedState };`,
227
- `// Clear preserved state after using it (so it doesn't persist across multiple updates)`,
228
- `if (typeof window !== 'undefined') {`,
229
- ` window.__HMR_PRESERVED_STATE__ = undefined;`,
230
- `}
231
- `,
232
- `// Attempt hydration with error handling`,
233
- `// Use document (not document.body) when the page renders <html><head><body>`,
234
- `// to avoid "In HTML, <html> cannot be a child of <body>" hydration error`,
235
- `const container = typeof document !== 'undefined' ? document : null;`,
236
- `if (!container) {`,
237
- ` throw new Error('React root container not found: document is null');`,
238
- `}
239
- `,
240
- `// Guard: only hydrate on first load. During HMR re-imports, skip hydration`,
241
- `// so React Fast Refresh can swap components in-place and preserve state.`,
242
- `if (!window.__REACT_ROOT__) {`,
243
- ` let root;`,
244
- ` // After HMR, SSR is skipped to avoid stale content flash \u2014 render client-only`,
245
- ` if (window.__SSR_DIRTY__) {`,
246
- ` root = createRoot(container);`,
247
- ` root.render(${isDev ? `createElement(ErrorBoundary, null, createElement(PageComponent, mergedProps))` : `createElement(PageComponent, mergedProps)`});`,
248
- ` window.__REACT_ROOT__ = root;`,
249
- ` } else {`,
250
- ` try {`,
251
- ` // Use onRecoverableError to catch hydration errors (React 19)`,
252
- ` root = hydrateRoot(`,
253
- ` container,`,
254
- ` ${isDev ? `createElement(ErrorBoundary, null, createElement(PageComponent, mergedProps))` : `createElement(PageComponent, mergedProps)`},`,
255
- ` {`,
256
- ` onRecoverableError: (error) => {`,
257
- ` // Check if this is a hydration error (isHydrationError filters out whitespace-only head mismatches)`,
258
- ` if (isDev && isHydrationError(error)) {`,
259
- ` // Real hydration error - handle it`,
260
- ` handleHydrationFallback(error);`,
261
- ` } else {`,
262
- ` // Not a hydration error, or it's a whitespace-only mismatch that was filtered out`,
263
- ` // Check if it's a whitespace-only head mismatch using the same logic as isHydrationError`,
264
- ` const errorMessage = error instanceof Error ? error.message : String(error);`,
265
- ` const errorString = String(error);`,
266
- ` const fullMessage = errorMessage + ' ' + errorString;`,
267
- ` const hydrationKeywords = ['hydration', 'Hydration', 'mismatch', 'Mismatch', 'did not match', 'server rendered HTML', 'server HTML', 'client HTML', 'Hydration failed'];`,
268
- ` const isHydration = hydrationKeywords.some(keyword => fullMessage.includes(keyword));`,
269
- ` if (isHydration) {`,
270
- ` // Check if this is a head/link/stylesheet related mismatch`,
271
- ` const isHeadRelated = fullMessage.includes('<head') || fullMessage.includes('</head>') || fullMessage.includes('head>') || fullMessage.includes('<link') || fullMessage.includes('link>') || fullMessage.includes('stylesheet') || fullMessage.includes('fonts.googleapis') || fullMessage.includes('rel="stylesheet"');`,
272
- ` // Check if the mismatch involves only whitespace/newlines`,
273
- ` const hasWhitespacePattern = /\\{\\s*["']\\\\n[^"']*["']\\s*\\}/.test(fullMessage) || /\\{\\s*["'][\\\\n\\\\r\\\\s]+["']\\s*\\}/.test(fullMessage) || /-\\s*\\{\\s*["'][\\\\n\\\\r\\\\s]+["']\\s*\\}/.test(fullMessage);`,
274
- ` const isWhitespaceOnly = /^[\\s\\n\\r]*$/.test(errorString) || /^[\\s\\n\\r]*$/.test(errorMessage);`,
275
- ` const hasNewlinePattern = fullMessage.includes('\\\\n') || fullMessage.includes('\\\\r') || fullMessage.includes('\\n') || fullMessage.includes('\\r');`,
276
- ` // If it's head-related and involves whitespace/newlines, silently ignore it`,
277
- ` if (isHeadRelated && (hasWhitespacePattern || isWhitespaceOnly || hasNewlinePattern)) {`,
278
- ` // Already logged by isHydrationError, just return silently`,
279
- ` return;`,
280
- ` }`,
281
- ` }`,
282
- ` // Log other recoverable errors`,
283
- ` console.error('React recoverable error:', error);`,
284
- ` }`,
285
- ` }`,
286
- ` }`,
287
- ` );`,
288
- ` window.__REACT_ROOT__ = root;`,
289
- ` } catch (error) {`,
290
- ` // Catch synchronous errors (shouldn't happen with hydrateRoot, but safety net)`,
291
- ` if (isDev && isHydrationError(error)) {`,
292
- ` handleHydrationFallback(error);`,
293
- ` } else {`,
294
- ` throw error;`,
295
- ` }`,
296
- ` }`,
297
- ` } // end else (normal hydration path)
298
- `,
299
- ` // Also listen for hydration errors via console.error (React logs them there)`,
300
- ` if (isDev) {`,
301
- ` const originalError = console.error;`,
302
- ` console.error = function(...args) {`,
303
- ` const errorMessage = args.map(arg => {`,
304
- ` if (arg instanceof Error) return arg.message;`,
305
- ` return String(arg);`,
306
- ` }).join(' ');`,
307
- ` `,
308
- ` // Check if this is a hydration error`,
309
- ` if (isHydrationError({ message: errorMessage }) && !hydrationErrorDetected) {`,
310
- ` hydrationErrorDetected = true;`,
311
- ` // Create a synthetic error for fallback`,
312
- ` const syntheticError = new Error(errorMessage);`,
313
- ` // Use setTimeout to ensure this happens after React's error handling`,
314
- ` setTimeout(() => {`,
315
- ` handleHydrationFallback(syntheticError);`,
316
- ` }, 0);`,
317
- ` }`,
318
- ` `,
319
- ` // Call original console.error`,
320
- ` originalError.apply(console, args);`,
321
- ` };`,
322
- ` }`,
323
- `}`,
324
- ...isDev ? [
325
- `
326
- // Pre-warm: import the page module from the module server`,
327
- `// immediately so the browser caches all /@src/ URLs.`,
328
- `import('/@src/${relative(process.cwd(), resolve(reactPagesDirectory, `${componentName}.tsx`)).replace(/\\/g, "/")}').catch(() => {});`
329
- ] : []
330
- ].join(`
331
- `);
332
- const indexPath = join(reactIndexesDirectory, `${componentName}.tsx`);
333
- const hasher = new Bun.CryptoHasher("md5");
334
- hasher.update(content);
335
- const contentHash = hasher.digest("hex");
336
- if (indexContentCache.get(indexPath) === contentHash && existsSync(indexPath)) {
337
- return;
338
- }
339
- indexContentCache.set(indexPath, contentHash);
340
- await writeFile(indexPath, content);
341
- });
342
- await Promise.all(promises);
343
- if (!isDev) {
344
- return;
345
- }
346
- const refreshPath = join(reactIndexesDirectory, "_refresh.tsx");
347
- if (!existsSync(refreshPath)) {
348
- await writeFile(refreshPath, `import '${refreshSetupPath}';
349
- import 'react';
350
- import 'react-dom/client';
351
- `);
352
- }
353
- };
354
-
355
- export { generateReactIndexFiles };
356
-
357
- //# debugId=3CD4375ABE2D804864756E2164756E21
358
- //# sourceMappingURL=chunk-3g91wb4f.js.map
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/build/generateReactIndexes.ts"],
4
- "sourcesContent": [
5
- "import { existsSync, mkdirSync } from 'fs';\nimport { readdir, rm, writeFile } from 'fs/promises';\nimport { basename, join, relative, resolve, sep } from 'path';\nimport { Glob } from 'bun';\nimport { toPascal } from '../utils/stringModifiers';\n\nconst indexContentCache = new Map<string, string>();\n\nconst resolveDevClientDir = () => {\n\tconst projectRoot = process.cwd();\n\tconst fromSource = resolve(import.meta.dir, '../dev/client');\n\n\t// Only use the source path if it exists AND is within the project root\n\t// (i.e., we're developing absolutejs itself, not using it as a dependency)\n\tif (existsSync(fromSource) && fromSource.startsWith(projectRoot)) {\n\t\treturn fromSource;\n\t}\n\n\t// When running from a published npm package, use the installed copy\n\tconst fromNodeModules = resolve(\n\t\tprojectRoot,\n\t\t'node_modules/@absolutejs/absolute/dist/dev/client'\n\t);\n\tif (existsSync(fromNodeModules)) return fromNodeModules;\n\n\treturn resolve(import.meta.dir, './dev/client');\n};\n\nconst devClientDir = resolveDevClientDir();\n\nconst errorOverlayPath = join(devClientDir, 'errorOverlay.ts').replace(\n\t/\\\\/g,\n\t'/'\n);\n\nconst hmrClientPath = join(devClientDir, 'hmrClient.ts').replace(/\\\\/g, '/');\n\nconst refreshSetupPath = join(devClientDir, 'reactRefreshSetup.ts').replace(\n\t/\\\\/g,\n\t'/'\n);\n\nexport const generateReactIndexFiles = async (\n\treactPagesDirectory: string,\n\treactIndexesDirectory: string,\n\tisDev = false\n) => {\n\tif (!existsSync(reactIndexesDirectory)) {\n\t\tmkdirSync(reactIndexesDirectory, { recursive: true });\n\t}\n\n\tconst CONVENTION_RE = /^(?:(.+)\\.)?(error|loading|not-found)\\.[^.]+$/;\n\tconst pagesGlob = new Glob('*.{jsx,tsx}');\n\tconst files: string[] = [];\n\tfor await (const file of pagesGlob.scan({ cwd: reactPagesDirectory })) {\n\t\tif (CONVENTION_RE.test(file)) continue;\n\t\tfiles.push(file);\n\t}\n\n\t// Remove stale indexes whose source pages no longer exist\n\tconst currentPageNames = new Set(\n\t\tfiles.map((file) => basename(file).split('.')[0])\n\t);\n\n\tconst emptyStringArray: string[] = [];\n\n\tconst existingIndexes = await readdir(reactIndexesDirectory).catch(\n\t\t() => emptyStringArray\n\t);\n\n\tconst staleIndexes = existingIndexes.filter((indexFile) => {\n\t\tconst indexName = indexFile.replace(/\\.tsx$/, '');\n\n\t\treturn indexName !== '_refresh' && !currentPageNames.has(indexName);\n\t});\n\n\tif (staleIndexes.length > 0) {\n\t\tawait Promise.all(\n\t\t\tstaleIndexes.map((indexFile) => {\n\t\t\t\tindexContentCache.delete(\n\t\t\t\t\tjoin(reactIndexesDirectory, indexFile)\n\t\t\t\t);\n\n\t\t\t\treturn rm(join(reactIndexesDirectory, indexFile), {\n\t\t\t\t\tforce: true\n\t\t\t\t});\n\t\t\t})\n\t\t);\n\t}\n\n\t// Compute relative path from indexes dir to pages dir for imports\n\tconst pagesRelPath = relative(\n\t\tresolve(reactIndexesDirectory),\n\t\tresolve(reactPagesDirectory)\n\t)\n\t\t.split(sep)\n\t\t.join('/');\n\n\tconst promises = files.map(async (file) => {\n\t\tconst fileName = basename(file);\n\t\tconst componentName = fileName.split('.')[0]!;\n\t\tconst pascalComponentName = toPascal(componentName);\n\n\t\tconst hmrPreamble = isDev\n\t\t\t? [\n\t\t\t\t\t`window.__HMR_FRAMEWORK__ = \"react\";`,\n\t\t\t\t\t`window.__REACT_COMPONENT_KEY__ = \"${componentName}Index\";`,\n\t\t\t\t\t`import '${refreshSetupPath}';`,\n\t\t\t\t\t`import '${hmrClientPath}';`,\n\t\t\t\t\t`import { showErrorOverlay, hideErrorOverlay } from '${errorOverlayPath}';\\n`\n\t\t\t\t]\n\t\t\t: [];\n\n\t\tconst reactImports = isDev\n\t\t\t? [\n\t\t\t\t\t`import { hydrateRoot, createRoot } from 'react-dom/client';`,\n\t\t\t\t\t`import { createElement, Component } from 'react';`\n\t\t\t\t]\n\t\t\t: [\n\t\t\t\t\t`import { hydrateRoot, createRoot } from 'react-dom/client';`,\n\t\t\t\t\t`import { createElement } from 'react';`\n\t\t\t\t];\n\n\t\tconst errorBoundaryDef = isDev\n\t\t\t? [\n\t\t\t\t\t`\\n// Dev-only Error Boundary to catch React render errors`,\n\t\t\t\t\t`class ErrorBoundary extends Component {`,\n\t\t\t\t\t`\\tconstructor(props) {`,\n\t\t\t\t\t`\\t\\tsuper(props);`,\n\t\t\t\t\t`\\t\\tthis.state = { hasError: false };`,\n\t\t\t\t\t`\\t\\twindow.__ERROR_BOUNDARY__ = this;`,\n\t\t\t\t\t`\\t}`,\n\t\t\t\t\t`\\tstatic getDerivedStateFromError() {`,\n\t\t\t\t\t`\\t\\treturn { hasError: true };`,\n\t\t\t\t\t`\\t}`,\n\t\t\t\t\t`\\tcomponentDidCatch(error) {`,\n\t\t\t\t\t`\\t\\tshowErrorOverlay({`,\n\t\t\t\t\t`\\t\\t\\tframework: 'react',`,\n\t\t\t\t\t`\\t\\t\\tkind: 'runtime',`,\n\t\t\t\t\t`\\t\\t\\tmessage: error && error.stack ? error.stack : String(error)`,\n\t\t\t\t\t`\\t\\t});`,\n\t\t\t\t\t`\\t}`,\n\t\t\t\t\t`\\tcomponentDidUpdate(prevProps, prevState) {`,\n\t\t\t\t\t`\\t\\tif (prevState.hasError && !this.state.hasError) {`,\n\t\t\t\t\t`\\t\\t\\thideErrorOverlay();`,\n\t\t\t\t\t`\\t\\t}`,\n\t\t\t\t\t`\\t}`,\n\t\t\t\t\t`\\treset() {`,\n\t\t\t\t\t`\\t\\tthis.setState({ hasError: false });`,\n\t\t\t\t\t`\\t}`,\n\t\t\t\t\t`\\trender() {`,\n\t\t\t\t\t`\\t\\tif (this.state.hasError) return null;`,\n\t\t\t\t\t``,\n\t\t\t\t\t`\\t\\treturn this.props.children;`,\n\t\t\t\t\t`\\t}`,\n\t\t\t\t\t`}\\n`\n\t\t\t\t]\n\t\t\t: [];\n\n\t\tconst content = [\n\t\t\t...hmrPreamble,\n\t\t\t...reactImports,\n\t\t\t`import * as PageModule from '${pagesRelPath}/${componentName}';\\n`,\n\t\t\t...errorBoundaryDef,\n\t\t\t`// Hydration with error handling and fallback`,\n\t\t\t`const isDev = ${isDev};`,\n\t\t\t`const componentPath = '${pagesRelPath}/${componentName}';\\n`,\n\t\t\t`function resolvePageComponent(module, candidateNames) {`,\n\t\t\t`\\tfor (const name of candidateNames) {`,\n\t\t\t`\\t\\tconst value = module[name];`,\n\t\t\t`\\t\\tif (typeof value === 'function' || (value && typeof value === 'object')) return value;`,\n\t\t\t`\\t}`,\n\t\t\t`\\tfor (const [name, value] of Object.entries(module)) {`,\n\t\t\t`\\t\\tif (!/^[A-Z]/.test(name)) continue;`,\n\t\t\t`\\t\\tif (typeof value === 'function' || (value && typeof value === 'object')) return value;`,\n\t\t\t`\\t}`,\n\t\t\t`\\tthrow new Error('React page module ' + componentPath + ' does not export a component. Expected default, ${pascalComponentName}, ${componentName}, or any PascalCase export.');`,\n\t\t\t`}`,\n\t\t\t`const PageComponent = resolvePageComponent(PageModule, ['default', '${pascalComponentName}', '${componentName}']);\\n`,\n\t\t\t`function isHydrationError(error) {`,\n\t\t\t`\\tif (!error) return false;`,\n\t\t\t`\\tconst errorMessage = error instanceof Error ? error.message : String(error);`,\n\t\t\t`\\tconst errorString = String(error);`,\n\t\t\t`\\tconst fullMessage = errorMessage + ' ' + errorString;`,\n\t\t\t`\\tconst hydrationKeywords = ['hydration', 'Hydration', 'mismatch', 'Mismatch', 'did not match', 'server rendered HTML', 'server HTML', 'client HTML', 'Hydration failed'];`,\n\t\t\t`\\tconst isHydration = hydrationKeywords.some(keyword => fullMessage.includes(keyword));`,\n\t\t\t`\\t`,\n\t\t\t`\\t// Ignore whitespace-only mismatches in <head> - these are harmless formatting differences`,\n\t\t\t`\\t// The error often shows: + <link...> vs - {\"\\\\n \"} which is just formatting`,\n\t\t\t`\\tif (isHydration) {`,\n\t\t\t`\\t\\t// Check if this is a head/link/stylesheet related mismatch`,\n\t\t\t`\\t\\tconst isHeadRelated = fullMessage.includes('<head') || fullMessage.includes('</head>') || fullMessage.includes('head>') || fullMessage.includes('<link') || fullMessage.includes('link>') || fullMessage.includes('stylesheet') || fullMessage.includes('fonts.googleapis') || fullMessage.includes('rel=\"stylesheet\"');`,\n\t\t\t`\\t\\t`,\n\t\t\t`\\t\\t// Check if the mismatch involves only whitespace/newlines`,\n\t\t\t`\\t\\t// Pattern: looks for {\"\\\\n\"} or {\"\\\\n \"} or similar whitespace-only content`,\n\t\t\t`\\t\\t// Also check for patterns like: - {\"\\\\n \"} or + <link...>`,\n\t\t\t`\\t\\tconst hasWhitespacePattern = /\\\\{\\\\s*[\"']\\\\\\\\n[^\"']*[\"']\\\\s*\\\\}/.test(fullMessage) || /\\\\{\\\\s*[\"'][\\\\\\\\n\\\\\\\\r\\\\\\\\s]+[\"']\\\\s*\\\\}/.test(fullMessage) || /-\\\\s*\\\\{\\\\s*[\"'][\\\\\\\\n\\\\\\\\r\\\\\\\\s]+[\"']\\\\s*\\\\}/.test(fullMessage);`,\n\t\t\t`\\t\\tconst isWhitespaceOnly = /^[\\\\s\\\\n\\\\r]*$/.test(errorString) || /^[\\\\s\\\\n\\\\r]*$/.test(errorMessage);`,\n\t\t\t`\\t\\tconst hasNewlinePattern = fullMessage.includes('\\\\\\\\n') || fullMessage.includes('\\\\\\\\r') || fullMessage.includes('\\\\n') || fullMessage.includes('\\\\r');`,\n\t\t\t`\\t\\t`,\n\t\t\t`\\t\\t// If it's head-related and involves whitespace/newlines, ignore it`,\n\t\t\t`\\t\\tif (isHeadRelated && (hasWhitespacePattern || isWhitespaceOnly || hasNewlinePattern)) {`,\n\t\t\t`\\t\\t\\treturn false; // Don't treat whitespace-only head mismatches as errors`,\n\t\t\t`\\t\\t}`,\n\t\t\t`\\t}`,\n\t\t\t`\\treturn isHydration;`,\n\t\t\t`}\\n`,\n\t\t\t`function logHydrationError(error, componentName) {`,\n\t\t\t`\\tif (!isDev) return;`,\n\t\t\t`\\tif (window.__HMR_WS__ && window.__HMR_WS__.readyState === WebSocket.OPEN) {`,\n\t\t\t`\\t\\ttry {`,\n\t\t\t`\\t\\t\\twindow.__HMR_WS__.send(JSON.stringify({`,\n\t\t\t`\\t\\t\\t\\ttype: 'hydration-error',`,\n\t\t\t`\\t\\t\\t\\tdata: {`,\n\t\t\t`\\t\\t\\t\\t\\tcomponentName: '${componentName}',`,\n\t\t\t`\\t\\t\\t\\t\\tcomponentPath: componentPath,`,\n\t\t\t`\\t\\t\\t\\t\\terror: error instanceof Error ? error.message : String(error),`,\n\t\t\t`\\t\\t\\t\\t\\ttimestamp: Date.now()`,\n\t\t\t`\\t\\t\\t\\t}`,\n\t\t\t`\\t\\t\\t}));`,\n\t\t\t`\\t\\t} catch (err) {}`,\n\t\t\t`\\t}`,\n\t\t\t`}\\n`,\n\t\t\t`// Track if we've already switched to client-only mode`,\n\t\t\t`let hasSwitchedToClientOnly = false;`,\n\t\t\t`let hydrationErrorDetected = false;\\n`,\n\t\t\t`function handleHydrationFallback(error) {`,\n\t\t\t`\\tif (hasSwitchedToClientOnly) return; // Already handled`,\n\t\t\t`\\thasSwitchedToClientOnly = true;`,\n\t\t\t`\\thydrationErrorDetected = true;\\n`,\n\t\t\t`\\tlogHydrationError(error, '${componentName}');\\n`,\n\t\t\t`\\t// Fallback: client-only render (no hydration)`,\n\t\t\t`\\ttry {`,\n\t\t\t`\\t\\t// Unmount existing root if it exists`,\n\t\t\t`\\t\\tif (window.__REACT_ROOT__ && typeof window.__REACT_ROOT__.unmount === 'function') {`,\n\t\t\t`\\t\\t\\ttry {`,\n\t\t\t`\\t\\t\\twindow.__REACT_ROOT__.unmount();`,\n\t\t\t`\\t\\t\\t} catch (e) {`,\n\t\t\t`\\t\\t\\t\\t// Ignore unmount errors`,\n\t\t\t`\\t\\t\\t}`,\n\t\t\t`\\t\\t}\\n`,\n\t\t\t`\\t\\t// Render into the same root container when falling back to client-only`,\n\t\t\t`\\t\\tconst root = createRoot(container);`,\n\t\t\t`\\t\\troot.render(${isDev ? `createElement(ErrorBoundary, null, createElement(PageComponent, mergedProps))` : `createElement(PageComponent, mergedProps)`});`,\n\t\t\t`\\t\\twindow.__REACT_ROOT__ = root;`,\n\t\t\t`\\t\\twindow.__HMR_CLIENT_ONLY_MODE__ = true;`,\n\t\t\t`\\t} catch (fallbackError) {`,\n\t\t\t`\\t\\twindow.location.reload();`,\n\t\t\t`\\t}`,\n\t\t\t`}\\n`,\n\t\t\t`// HMR State Preservation: Check for preserved state and merge with initial props`,\n\t\t\t`// This allows state to be preserved across HMR updates without modifying component files`,\n\t\t\t`let preservedState = (typeof window !== 'undefined' && window.__HMR_PRESERVED_STATE__) ? window.__HMR_PRESERVED_STATE__ : {};\\n`,\n\t\t\t`// Also check sessionStorage for state that survived a page reload (for React HMR)`,\n\t\t\t`if (typeof window !== 'undefined' && typeof sessionStorage !== 'undefined') {`,\n\t\t\t`\\tconst hmrStateJson = sessionStorage.getItem('__REACT_HMR_STATE__');`,\n\t\t\t`\\tif (hmrStateJson) {`,\n\t\t\t`\\t\\ttry {`,\n\t\t\t`\\t\\t\\tconst hmrState = JSON.parse(hmrStateJson);`,\n\t\t\t`\\t\\t\\tpreservedState = { ...preservedState, ...hmrState };`,\n\t\t\t`\\t\\t\\tsessionStorage.removeItem('__REACT_HMR_STATE__');`,\n\t\t\t`\\t\\t} catch (e) {}`,\n\t\t\t`\\t}`,\n\t\t\t`}\\n`,\n\t\t\t`const mergedProps = { ...(window.__INITIAL_PROPS__ || {}), ...preservedState };`,\n\t\t\t`// Clear preserved state after using it (so it doesn't persist across multiple updates)`,\n\t\t\t`if (typeof window !== 'undefined') {`,\n\t\t\t`\\twindow.__HMR_PRESERVED_STATE__ = undefined;`,\n\t\t\t`}\\n`,\n\t\t\t`// Attempt hydration with error handling`,\n\t\t\t`// Use document (not document.body) when the page renders <html><head><body>`,\n\t\t\t`// to avoid \"In HTML, <html> cannot be a child of <body>\" hydration error`,\n\t\t\t`const container = typeof document !== 'undefined' ? document : null;`,\n\t\t\t`if (!container) {`,\n\t\t\t`\\tthrow new Error('React root container not found: document is null');`,\n\t\t\t`}\\n`,\n\t\t\t`// Guard: only hydrate on first load. During HMR re-imports, skip hydration`,\n\t\t\t`// so React Fast Refresh can swap components in-place and preserve state.`,\n\t\t\t`if (!window.__REACT_ROOT__) {`,\n\t\t\t`\\tlet root;`,\n\t\t\t`\\t// After HMR, SSR is skipped to avoid stale content flash — render client-only`,\n\t\t\t`\\tif (window.__SSR_DIRTY__) {`,\n\t\t\t`\\t\\troot = createRoot(container);`,\n\t\t\t`\\t\\troot.render(${isDev ? `createElement(ErrorBoundary, null, createElement(PageComponent, mergedProps))` : `createElement(PageComponent, mergedProps)`});`,\n\t\t\t`\\t\\twindow.__REACT_ROOT__ = root;`,\n\t\t\t`\\t} else {`,\n\t\t\t`\\ttry {`,\n\t\t\t`\\t\\t// Use onRecoverableError to catch hydration errors (React 19)`,\n\t\t\t`\\t\\troot = hydrateRoot(`,\n\t\t\t`\\t\\t\\tcontainer,`,\n\t\t\t`\\t\\t\\t${isDev ? `createElement(ErrorBoundary, null, createElement(PageComponent, mergedProps))` : `createElement(PageComponent, mergedProps)`},`,\n\t\t\t`\\t\\t\\t{`,\n\t\t\t`\\t\\t\\t\\tonRecoverableError: (error) => {`,\n\t\t\t`\\t\\t\\t\\t\\t// Check if this is a hydration error (isHydrationError filters out whitespace-only head mismatches)`,\n\t\t\t`\\t\\t\\t\\t\\tif (isDev && isHydrationError(error)) {`,\n\t\t\t`\\t\\t\\t\\t\\t\\t// Real hydration error - handle it`,\n\t\t\t`\\t\\t\\t\\t\\t\\thandleHydrationFallback(error);`,\n\t\t\t`\\t\\t\\t\\t\\t} else {`,\n\t\t\t`\\t\\t\\t\\t\\t\\t// Not a hydration error, or it's a whitespace-only mismatch that was filtered out`,\n\t\t\t`\\t\\t\\t\\t\\t\\t// Check if it's a whitespace-only head mismatch using the same logic as isHydrationError`,\n\t\t\t`\\t\\t\\t\\t\\t\\tconst errorMessage = error instanceof Error ? error.message : String(error);`,\n\t\t\t`\\t\\t\\t\\t\\t\\tconst errorString = String(error);`,\n\t\t\t`\\t\\t\\t\\t\\t\\tconst fullMessage = errorMessage + ' ' + errorString;`,\n\t\t\t`\\t\\t\\t\\t\\t\\tconst hydrationKeywords = ['hydration', 'Hydration', 'mismatch', 'Mismatch', 'did not match', 'server rendered HTML', 'server HTML', 'client HTML', 'Hydration failed'];`,\n\t\t\t`\\t\\t\\t\\t\\t\\tconst isHydration = hydrationKeywords.some(keyword => fullMessage.includes(keyword));`,\n\t\t\t`\\t\\t\\t\\t\\t\\tif (isHydration) {`,\n\t\t\t`\\t\\t\\t\\t\\t\\t\\t// Check if this is a head/link/stylesheet related mismatch`,\n\t\t\t`\\t\\t\\t\\t\\t\\t\\tconst isHeadRelated = fullMessage.includes('<head') || fullMessage.includes('</head>') || fullMessage.includes('head>') || fullMessage.includes('<link') || fullMessage.includes('link>') || fullMessage.includes('stylesheet') || fullMessage.includes('fonts.googleapis') || fullMessage.includes('rel=\"stylesheet\"');`,\n\t\t\t`\\t\\t\\t\\t\\t\\t\\t// Check if the mismatch involves only whitespace/newlines`,\n\t\t\t`\\t\\t\\t\\t\\t\\t\\tconst hasWhitespacePattern = /\\\\{\\\\s*[\"']\\\\\\\\n[^\"']*[\"']\\\\s*\\\\}/.test(fullMessage) || /\\\\{\\\\s*[\"'][\\\\\\\\n\\\\\\\\r\\\\\\\\s]+[\"']\\\\s*\\\\}/.test(fullMessage) || /-\\\\s*\\\\{\\\\s*[\"'][\\\\\\\\n\\\\\\\\r\\\\\\\\s]+[\"']\\\\s*\\\\}/.test(fullMessage);`,\n\t\t\t`\\t\\t\\t\\t\\t\\t\\tconst isWhitespaceOnly = /^[\\\\s\\\\n\\\\r]*$/.test(errorString) || /^[\\\\s\\\\n\\\\r]*$/.test(errorMessage);`,\n\t\t\t`\\t\\t\\t\\t\\t\\t\\tconst hasNewlinePattern = fullMessage.includes('\\\\\\\\n') || fullMessage.includes('\\\\\\\\r') || fullMessage.includes('\\\\n') || fullMessage.includes('\\\\r');`,\n\t\t\t`\\t\\t\\t\\t\\t\\t\\t// If it's head-related and involves whitespace/newlines, silently ignore it`,\n\t\t\t`\\t\\t\\t\\t\\t\\t\\tif (isHeadRelated && (hasWhitespacePattern || isWhitespaceOnly || hasNewlinePattern)) {`,\n\t\t\t`\\t\\t\\t\\t\\t\\t\\t\\t// Already logged by isHydrationError, just return silently`,\n\t\t\t`\\t\\t\\t\\t\\t\\t\\t\\treturn;`,\n\t\t\t`\\t\\t\\t\\t\\t\\t\\t}`,\n\t\t\t`\\t\\t\\t\\t\\t\\t}`,\n\t\t\t`\\t\\t\\t\\t\\t\\t// Log other recoverable errors`,\n\t\t\t`\\t\\t\\t\\t\\t\\tconsole.error('React recoverable error:', error);`,\n\t\t\t`\\t\\t\\t\\t\\t}`,\n\t\t\t`\\t\\t\\t\\t}`,\n\t\t\t`\\t\\t\\t}`,\n\t\t\t`\\t\\t);`,\n\t\t\t`\\t\\twindow.__REACT_ROOT__ = root;`,\n\t\t\t`\\t} catch (error) {`,\n\t\t\t`\\t\\t// Catch synchronous errors (shouldn't happen with hydrateRoot, but safety net)`,\n\t\t\t`\\t\\tif (isDev && isHydrationError(error)) {`,\n\t\t\t`\\t\\t\\thandleHydrationFallback(error);`,\n\t\t\t`\\t\\t} else {`,\n\t\t\t`\\t\\t\\tthrow error;`,\n\t\t\t`\\t\\t}`,\n\t\t\t`\\t}`,\n\t\t\t`\\t} // end else (normal hydration path)\\n`,\n\t\t\t`\\t// Also listen for hydration errors via console.error (React logs them there)`,\n\t\t\t`\\tif (isDev) {`,\n\t\t\t`\\t\\tconst originalError = console.error;`,\n\t\t\t`\\t\\tconsole.error = function(...args) {`,\n\t\t\t`\\t\\t\\tconst errorMessage = args.map(arg => {`,\n\t\t\t`\\t\\t\\t\\tif (arg instanceof Error) return arg.message;`,\n\t\t\t`\\t\\t\\t\\treturn String(arg);`,\n\t\t\t`\\t\\t\\t}).join(' ');`,\n\t\t\t`\\t\\t\\t`,\n\t\t\t`\\t\\t\\t// Check if this is a hydration error`,\n\t\t\t`\\t\\t\\tif (isHydrationError({ message: errorMessage }) && !hydrationErrorDetected) {`,\n\t\t\t`\\t\\t\\t\\thydrationErrorDetected = true;`,\n\t\t\t`\\t\\t\\t\\t// Create a synthetic error for fallback`,\n\t\t\t`\\t\\t\\t\\tconst syntheticError = new Error(errorMessage);`,\n\t\t\t`\\t\\t\\t\\t// Use setTimeout to ensure this happens after React's error handling`,\n\t\t\t`\\t\\t\\t\\tsetTimeout(() => {`,\n\t\t\t`\\t\\t\\t\\t\\thandleHydrationFallback(syntheticError);`,\n\t\t\t`\\t\\t\\t\\t}, 0);`,\n\t\t\t`\\t\\t\\t}`,\n\t\t\t`\\t\\t\\t`,\n\t\t\t`\\t\\t\\t// Call original console.error`,\n\t\t\t`\\t\\t\\toriginalError.apply(console, args);`,\n\t\t\t`\\t\\t};`,\n\t\t\t`\\t}`,\n\t\t\t`}`,\n\t\t\t...(isDev\n\t\t\t\t? [\n\t\t\t\t\t\t`\\n// Pre-warm: import the page module from the module server`,\n\t\t\t\t\t\t`// immediately so the browser caches all /@src/ URLs.`,\n\t\t\t\t\t\t`import('/@src/${relative(process.cwd(), resolve(reactPagesDirectory, `${componentName}.tsx`)).replace(/\\\\/g, '/')}').catch(() => {});`\n\t\t\t\t\t]\n\t\t\t\t: [])\n\t\t].join('\\n');\n\n\t\tconst indexPath = join(reactIndexesDirectory, `${componentName}.tsx`);\n\t\tconst hasher = new Bun.CryptoHasher('md5');\n\t\thasher.update(content);\n\t\tconst contentHash = hasher.digest('hex');\n\n\t\tif (\n\t\t\tindexContentCache.get(indexPath) === contentHash &&\n\t\t\texistsSync(indexPath)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tindexContentCache.set(indexPath, contentHash);\n\t\tawait writeFile(indexPath, content);\n\t});\n\tawait Promise.all(promises);\n\n\t// Generate a dummy entry that imports React so code splitting extracts\n\t// React into a shared chunk. This lets HMR re-import component entries\n\t// without creating a duplicate React instance.\n\t// IMPORTANT: reactRefreshSetup MUST be imported BEFORE react so that\n\t// injectIntoGlobalHook patches window.__REACT_DEVTOOLS_GLOBAL_HOOK__\n\t// before React initializes and checks it. Without this, the Refresh\n\t// Runtime can't reach React's reconciler and performReactRefresh()\n\t// silently does nothing.\n\tif (!isDev) {\n\t\treturn;\n\t}\n\n\tconst refreshPath = join(reactIndexesDirectory, '_refresh.tsx');\n\n\tif (!existsSync(refreshPath)) {\n\t\tawait writeFile(\n\t\t\trefreshPath,\n\t\t\t`import '${refreshSetupPath}';\\nimport 'react';\\nimport 'react-dom/client';\\n`\n\t\t);\n\t}\n};\n"
6
- ],
7
- "mappings": ";;;;;;AAAA;AACA;AACA;AACA;AAGA,IAAM,oBAAoB,IAAI;AAE9B,IAAM,sBAAsB,MAAM;AAAA,EACjC,MAAM,cAAc,QAAQ,IAAI;AAAA,EAChC,MAAM,aAAa,QAAQ,YAAY,KAAK,eAAe;AAAA,EAI3D,IAAI,WAAW,UAAU,KAAK,WAAW,WAAW,WAAW,GAAG;AAAA,IACjE,OAAO;AAAA,EACR;AAAA,EAGA,MAAM,kBAAkB,QACvB,aACA,mDACD;AAAA,EACA,IAAI,WAAW,eAAe;AAAA,IAAG,OAAO;AAAA,EAExC,OAAO,QAAQ,YAAY,KAAK,cAAc;AAAA;AAG/C,IAAM,eAAe,oBAAoB;AAEzC,IAAM,mBAAmB,KAAK,cAAc,iBAAiB,EAAE,QAC9D,OACA,GACD;AAEA,IAAM,gBAAgB,KAAK,cAAc,cAAc,EAAE,QAAQ,OAAO,GAAG;AAE3E,IAAM,mBAAmB,KAAK,cAAc,sBAAsB,EAAE,QACnE,OACA,GACD;AAEO,IAAM,0BAA0B,OACtC,qBACA,uBACA,QAAQ,UACJ;AAAA,EACJ,IAAI,CAAC,WAAW,qBAAqB,GAAG;AAAA,IACvC,UAAU,uBAAuB,EAAE,WAAW,KAAK,CAAC;AAAA,EACrD;AAAA,EAEA,MAAM,gBAAgB;AAAA,EACtB,MAAM,YAAY,IAAI,KAAK,aAAa;AAAA,EACxC,MAAM,QAAkB,CAAC;AAAA,EACzB,iBAAiB,QAAQ,UAAU,KAAK,EAAE,KAAK,oBAAoB,CAAC,GAAG;AAAA,IACtE,IAAI,cAAc,KAAK,IAAI;AAAA,MAAG;AAAA,IAC9B,MAAM,KAAK,IAAI;AAAA,EAChB;AAAA,EAGA,MAAM,mBAAmB,IAAI,IAC5B,MAAM,IAAI,CAAC,SAAS,SAAS,IAAI,EAAE,MAAM,GAAG,EAAE,EAAE,CACjD;AAAA,EAEA,MAAM,mBAA6B,CAAC;AAAA,EAEpC,MAAM,kBAAkB,MAAM,QAAQ,qBAAqB,EAAE,MAC5D,MAAM,gBACP;AAAA,EAEA,MAAM,eAAe,gBAAgB,OAAO,CAAC,cAAc;AAAA,IAC1D,MAAM,YAAY,UAAU,QAAQ,UAAU,EAAE;AAAA,IAEhD,OAAO,cAAc,cAAc,CAAC,iBAAiB,IAAI,SAAS;AAAA,GAClE;AAAA,EAED,IAAI,aAAa,SAAS,GAAG;AAAA,IAC5B,MAAM,QAAQ,IACb,aAAa,IAAI,CAAC,cAAc;AAAA,MAC/B,kBAAkB,OACjB,KAAK,uBAAuB,SAAS,CACtC;AAAA,MAEA,OAAO,GAAG,KAAK,uBAAuB,SAAS,GAAG;AAAA,QACjD,OAAO;AAAA,MACR,CAAC;AAAA,KACD,CACF;AAAA,EACD;AAAA,EAGA,MAAM,eAAe,SACpB,QAAQ,qBAAqB,GAC7B,QAAQ,mBAAmB,CAC5B,EACE,MAAM,GAAG,EACT,KAAK,GAAG;AAAA,EAEV,MAAM,WAAW,MAAM,IAAI,OAAO,SAAS;AAAA,IAC1C,MAAM,WAAW,SAAS,IAAI;AAAA,IAC9B,MAAM,gBAAgB,SAAS,MAAM,GAAG,EAAE;AAAA,IAC1C,MAAM,sBAAsB,SAAS,aAAa;AAAA,IAElD,MAAM,cAAc,QACjB;AAAA,MACA;AAAA,MACA,qCAAqC;AAAA,MACrC,WAAW;AAAA,MACX,WAAW;AAAA,MACX,uDAAuD;AAAA;AAAA,IACxD,IACC,CAAC;AAAA,IAEJ,MAAM,eAAe,QAClB;AAAA,MACA;AAAA,MACA;AAAA,IACD,IACC;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IAEF,MAAM,mBAAmB,QACtB;AAAA,MACA;AAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,IACD,IACC,CAAC;AAAA,IAEJ,MAAM,UAAU;AAAA,MACf,GAAG;AAAA,MACH,GAAG;AAAA,MACH,gCAAgC,gBAAgB;AAAA;AAAA,MAChD,GAAG;AAAA,MACH;AAAA,MACA,iBAAiB;AAAA,MACjB,0BAA0B,gBAAgB;AAAA;AAAA,MAC1C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,4GAA6G,wBAAwB;AAAA,MACrI;AAAA,MACA,uEAAuE,0BAA0B;AAAA;AAAA,MACjG;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,wBAA6B;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MACA,8BAA+B;AAAA;AAAA,MAC/B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA,iBAAmB,QAAQ,kFAAkF;AAAA,MAC7G;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,iBAAmB,QAAQ,kFAAkF;AAAA,MAC7G;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAS,QAAQ,kFAAkF;AAAA,MACnG;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAI,QACD;AAAA,QACA;AAAA;AAAA,QACA;AAAA,QACA,iBAAiB,SAAS,QAAQ,IAAI,GAAG,QAAQ,qBAAqB,GAAG,mBAAmB,CAAC,EAAE,QAAQ,OAAO,GAAG;AAAA,MAClH,IACC,CAAC;AAAA,IACL,EAAE,KAAK;AAAA,CAAI;AAAA,IAEX,MAAM,YAAY,KAAK,uBAAuB,GAAG,mBAAmB;AAAA,IACpE,MAAM,SAAS,IAAI,IAAI,aAAa,KAAK;AAAA,IACzC,OAAO,OAAO,OAAO;AAAA,IACrB,MAAM,cAAc,OAAO,OAAO,KAAK;AAAA,IAEvC,IACC,kBAAkB,IAAI,SAAS,MAAM,eACrC,WAAW,SAAS,GACnB;AAAA,MACD;AAAA,IACD;AAAA,IAEA,kBAAkB,IAAI,WAAW,WAAW;AAAA,IAC5C,MAAM,UAAU,WAAW,OAAO;AAAA,GAClC;AAAA,EACD,MAAM,QAAQ,IAAI,QAAQ;AAAA,EAU1B,IAAI,CAAC,OAAO;AAAA,IACX;AAAA,EACD;AAAA,EAEA,MAAM,cAAc,KAAK,uBAAuB,cAAc;AAAA,EAE9D,IAAI,CAAC,WAAW,WAAW,GAAG;AAAA,IAC7B,MAAM,UACL,aACA,WAAW;AAAA;AAAA;AAAA,CACZ;AAAA,EACD;AAAA;",
8
- "debugId": "3CD4375ABE2D804864756E2164756E21",
9
- "names": []
10
- }