meno-core 1.0.53 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (415) hide show
  1. package/.claude/settings.local.json +1 -3
  2. package/bin/cli.ts +66 -261
  3. package/build-astro.ts +150 -128
  4. package/dist/bin/cli.js +42 -185
  5. package/dist/bin/cli.js.map +2 -2
  6. package/dist/chunks/chunk-2AR55GYH.js +42 -0
  7. package/dist/chunks/chunk-2AR55GYH.js.map +7 -0
  8. package/dist/chunks/{chunk-JGWFTO6P.js → chunk-2IIQK7T3.js} +2624 -1389
  9. package/dist/chunks/chunk-2IIQK7T3.js.map +7 -0
  10. package/dist/chunks/chunk-4ZRU52J2.js +169 -0
  11. package/dist/chunks/chunk-4ZRU52J2.js.map +7 -0
  12. package/dist/chunks/{chunk-UB44F4Z2.js → chunk-5X4HCN7J.js} +5 -7
  13. package/dist/chunks/chunk-5X4HCN7J.js.map +7 -0
  14. package/dist/chunks/{chunk-WQFG7PAH.js → chunk-7CCVOL5M.js} +15 -19
  15. package/dist/chunks/chunk-7CCVOL5M.js.map +7 -0
  16. package/dist/chunks/{chunk-YBLHKYFF.js → chunk-AR7LHIFY.js} +8 -2
  17. package/dist/chunks/chunk-AR7LHIFY.js.map +7 -0
  18. package/dist/chunks/{chunk-O3NAGJP4.js → chunk-NUP7H7D3.js} +135 -41
  19. package/dist/chunks/chunk-NUP7H7D3.js.map +7 -0
  20. package/dist/chunks/{chunk-X754AHS5.js → chunk-QWTQZHG3.js} +194 -90
  21. package/dist/chunks/chunk-QWTQZHG3.js.map +7 -0
  22. package/dist/chunks/{chunk-H3GJ4H2U.js → chunk-XTKNX4FW.js} +216 -87
  23. package/dist/chunks/chunk-XTKNX4FW.js.map +7 -0
  24. package/dist/chunks/{fs-JGINUXGL.js → fs-G3ANWEFP.js} +2 -2
  25. package/dist/lib/client/index.js +1003 -475
  26. package/dist/lib/client/index.js.map +3 -3
  27. package/dist/lib/server/index.js +14393 -6371
  28. package/dist/lib/server/index.js.map +4 -4
  29. package/dist/lib/shared/index.js +342 -101
  30. package/dist/lib/shared/index.js.map +4 -4
  31. package/dist/lib/shared/richtext/index.js +1 -1
  32. package/dist/lib/test-utils/index.js +64 -80
  33. package/dist/lib/test-utils/index.js.map +2 -2
  34. package/entries/client-router.tsx +10 -8
  35. package/lib/client/ClientInitializer.ts +8 -8
  36. package/lib/client/ErrorBoundary.test.tsx +246 -186
  37. package/lib/client/ErrorBoundary.tsx +183 -132
  38. package/lib/client/componentRegistry.test.ts +96 -108
  39. package/lib/client/componentRegistry.ts +1 -3
  40. package/lib/client/contexts/ThemeContext.tsx +3 -2
  41. package/lib/client/core/ComponentBuilder.test.ts +663 -560
  42. package/lib/client/core/ComponentBuilder.ts +427 -155
  43. package/lib/client/core/ComponentRenderer.test.tsx +2 -4
  44. package/lib/client/core/ComponentRenderer.tsx +46 -33
  45. package/lib/client/core/builders/embedBuilder.ts +242 -54
  46. package/lib/client/core/builders/linkBuilder.ts +72 -45
  47. package/lib/client/core/builders/linkNodeBuilder.ts +79 -54
  48. package/lib/client/core/builders/listBuilder.ts +155 -89
  49. package/lib/client/core/builders/localeListBuilder.ts +97 -62
  50. package/lib/client/core/builders/types.ts +5 -5
  51. package/lib/client/core/cmsTemplateProcessor.ts +8 -9
  52. package/lib/client/elementRegistry.ts +3 -3
  53. package/lib/client/fontFamiliesService.test.ts +2 -10
  54. package/lib/client/fontFamiliesService.ts +3 -3
  55. package/lib/client/hmr/HMRManager.tsx +47 -30
  56. package/lib/client/hmrCssReload.ts +49 -14
  57. package/lib/client/hmrWebSocket.ts +14 -19
  58. package/lib/client/hooks/useColorVariables.test.ts +21 -21
  59. package/lib/client/hooks/useColorVariables.ts +23 -18
  60. package/lib/client/hooks/usePropertyAutocomplete.ts +4 -6
  61. package/lib/client/hooks/useVariables.ts +6 -4
  62. package/lib/client/hydration/HydrationUtils.test.ts +24 -25
  63. package/lib/client/hydration/HydrationUtils.ts +3 -4
  64. package/lib/client/i18nConfigService.test.ts +2 -7
  65. package/lib/client/i18nConfigService.ts +2 -2
  66. package/lib/client/meno-filter/MenoFilter.test.ts +47 -49
  67. package/lib/client/meno-filter/MenoFilter.ts +14 -15
  68. package/lib/client/meno-filter/bindings.ts +18 -43
  69. package/lib/client/meno-filter/init.ts +4 -4
  70. package/lib/client/meno-filter/renderer.ts +30 -32
  71. package/lib/client/meno-filter/script.generated.ts +1 -3
  72. package/lib/client/meno-filter/ui.ts +4 -6
  73. package/lib/client/meno-filter/updates.ts +18 -23
  74. package/lib/client/meno-filter/utils.ts +1 -1
  75. package/lib/client/navigation.test.ts +174 -178
  76. package/lib/client/navigation.ts +0 -1
  77. package/lib/client/responsiveStyleResolver.knownTokens.test.ts +71 -0
  78. package/lib/client/responsiveStyleResolver.test.ts +234 -232
  79. package/lib/client/responsiveStyleResolver.ts +74 -20
  80. package/lib/client/routing/RouteLoader.test.ts +24 -25
  81. package/lib/client/routing/RouteLoader.ts +27 -35
  82. package/lib/client/routing/Router.tsx +210 -153
  83. package/lib/client/scripts/ScriptExecutor.test.ts +157 -158
  84. package/lib/client/scripts/ScriptExecutor.ts +18 -36
  85. package/lib/client/services/PrefetchService.test.ts +3 -3
  86. package/lib/client/services/PrefetchService.ts +23 -29
  87. package/lib/client/styleProcessor.test.ts +9 -9
  88. package/lib/client/styleProcessor.ts +24 -15
  89. package/lib/client/styles/StyleInjector.test.ts +122 -115
  90. package/lib/client/styles/StyleInjector.ts +10 -7
  91. package/lib/client/styles/UtilityClassCollector.ts +62 -28
  92. package/lib/client/styles/cspNonce.test.ts +2 -5
  93. package/lib/client/templateEngine.test.ts +554 -488
  94. package/lib/client/templateEngine.ts +203 -73
  95. package/lib/client/theme.test.ts +1 -1
  96. package/lib/client/theme.ts +0 -1
  97. package/lib/client/utils/toast.ts +0 -1
  98. package/lib/server/__integration__/api-routes.test.ts +8 -4
  99. package/lib/server/__integration__/cms-integration.test.ts +1 -4
  100. package/lib/server/__integration__/server-lifecycle.test.ts +4 -5
  101. package/lib/server/__integration__/ssr-rendering.test.ts +47 -37
  102. package/lib/server/__integration__/static-assets.test.ts +3 -3
  103. package/lib/server/__integration__/test-helpers.ts +87 -74
  104. package/lib/server/ab/generateFunctions.ts +12 -10
  105. package/lib/server/astro/cmsPageEmitter.ts +26 -42
  106. package/lib/server/astro/componentEmitter.ts +35 -43
  107. package/lib/server/astro/cssCollector.ts +10 -26
  108. package/lib/server/astro/nodeToAstro.test.ts +1754 -34
  109. package/lib/server/astro/nodeToAstro.ts +232 -216
  110. package/lib/server/astro/normalizeOrphanTemplateProps.test.ts +115 -119
  111. package/lib/server/astro/normalizeOrphanTemplateProps.ts +11 -18
  112. package/lib/server/astro/pageEmitter.ts +9 -13
  113. package/lib/server/astro/tailwindMapper.test.ts +10 -37
  114. package/lib/server/astro/tailwindMapper.ts +33 -40
  115. package/lib/server/astro/templateTransformer.ts +17 -20
  116. package/lib/server/createServer.ts +7 -19
  117. package/lib/server/cssGenerator.test.ts +35 -44
  118. package/lib/server/cssGenerator.ts +8 -19
  119. package/lib/server/fileWatcher.test.ts +164 -13
  120. package/lib/server/fileWatcher.ts +209 -124
  121. package/lib/server/index.ts +14 -17
  122. package/lib/server/jsonLoader.test.ts +39 -2
  123. package/lib/server/jsonLoader.ts +39 -34
  124. package/lib/server/middleware/cors.test.ts +21 -21
  125. package/lib/server/middleware/cors.ts +28 -4
  126. package/lib/server/middleware/errorHandler.test.ts +7 -5
  127. package/lib/server/middleware/errorHandler.ts +3 -8
  128. package/lib/server/middleware/index.ts +0 -1
  129. package/lib/server/middleware/logger.test.ts +10 -8
  130. package/lib/server/middleware/logger.ts +17 -29
  131. package/lib/server/migrateTemplates.ts +3 -3
  132. package/lib/server/pageCache.test.ts +76 -77
  133. package/lib/server/pageCache.ts +0 -1
  134. package/lib/server/projectContext.ts +5 -4
  135. package/lib/server/providers/fileSystemCMSProvider.test.ts +142 -99
  136. package/lib/server/providers/fileSystemCMSProvider.ts +62 -38
  137. package/lib/server/routes/api/cms.test.ts +26 -14
  138. package/lib/server/routes/api/cms.ts +9 -14
  139. package/lib/server/routes/api/colors.test.ts +2 -2
  140. package/lib/server/routes/api/components.ts +31 -35
  141. package/lib/server/routes/api/config.ts +3 -4
  142. package/lib/server/routes/api/core-routes.ts +49 -76
  143. package/lib/server/routes/api/enums.test.ts +2 -2
  144. package/lib/server/routes/api/functions.ts +9 -17
  145. package/lib/server/routes/api/index.ts +3 -6
  146. package/lib/server/routes/api/pages.ts +8 -11
  147. package/lib/server/routes/api/shared.test.ts +1 -1
  148. package/lib/server/routes/api/shared.ts +12 -9
  149. package/lib/server/routes/api/variables.test.ts +3 -5
  150. package/lib/server/routes/api/variables.ts +1 -1
  151. package/lib/server/routes/index.ts +25 -28
  152. package/lib/server/routes/pages.ts +35 -31
  153. package/lib/server/routes/static.ts +17 -6
  154. package/lib/server/runtime/bundler.ts +98 -61
  155. package/lib/server/runtime/fs.ts +16 -26
  156. package/lib/server/runtime/httpServer.ts +8 -12
  157. package/lib/server/services/ColorService.test.ts +3 -3
  158. package/lib/server/services/ColorService.ts +37 -29
  159. package/lib/server/services/EnumService.test.ts +4 -8
  160. package/lib/server/services/EnumService.ts +11 -3
  161. package/lib/server/services/VariableService.test.ts +8 -12
  162. package/lib/server/services/VariableService.ts +11 -3
  163. package/lib/server/services/cmsService.test.ts +158 -120
  164. package/lib/server/services/cmsService.ts +36 -146
  165. package/lib/server/services/componentService.test.ts +125 -45
  166. package/lib/server/services/componentService.ts +70 -46
  167. package/lib/server/services/configService.test.ts +22 -45
  168. package/lib/server/services/configService.ts +50 -27
  169. package/lib/server/services/fileWatcherService.ts +42 -8
  170. package/lib/server/services/index.ts +0 -1
  171. package/lib/server/services/pageService.test.ts +8 -10
  172. package/lib/server/services/pageService.ts +32 -18
  173. package/lib/server/ssr/attributeBuilder.ts +18 -8
  174. package/lib/server/ssr/buildErrorOverlay.ts +11 -12
  175. package/lib/server/ssr/clientDataInjector.ts +7 -21
  176. package/lib/server/ssr/cmsSSRProcessor.ts +4 -8
  177. package/lib/server/ssr/cssCollector.ts +1 -1
  178. package/lib/server/ssr/errorOverlay.test.ts +1 -1
  179. package/lib/server/ssr/errorOverlay.ts +3 -9
  180. package/lib/server/ssr/htmlGenerator.nonce.test.ts +9 -14
  181. package/lib/server/ssr/htmlGenerator.test.ts +120 -44
  182. package/lib/server/ssr/htmlGenerator.ts +126 -91
  183. package/lib/server/ssr/imageMetadata.test.ts +3 -1
  184. package/lib/server/ssr/imageMetadata.ts +27 -21
  185. package/lib/server/ssr/jsCollector.test.ts +8 -18
  186. package/lib/server/ssr/jsCollector.ts +3 -8
  187. package/lib/server/ssr/liveReloadIntegration.test.ts +76 -36
  188. package/lib/server/ssr/metaTagGenerator.ts +2 -2
  189. package/lib/server/ssr/ssrRenderer.branches.test.ts +1103 -0
  190. package/lib/server/ssr/ssrRenderer.test.ts +316 -256
  191. package/lib/server/ssr/ssrRenderer.ts +795 -243
  192. package/lib/server/ssrRenderer.test.ts +1048 -954
  193. package/lib/server/utils/jsonLineMapper.test.ts +28 -28
  194. package/lib/server/utils/jsonLineMapper.ts +7 -7
  195. package/lib/server/validateStyleCoverage.ts +18 -21
  196. package/lib/server/websocketManager.ts +28 -19
  197. package/lib/shared/attributeNodeUtils.test.ts +15 -15
  198. package/lib/shared/attributeNodeUtils.ts +5 -12
  199. package/lib/shared/breakpoints.test.ts +5 -5
  200. package/lib/shared/breakpoints.ts +4 -11
  201. package/lib/shared/cmsQuery.test.ts +81 -0
  202. package/lib/shared/cmsQuery.ts +92 -0
  203. package/lib/shared/cmsQueryParser.test.ts +50 -42
  204. package/lib/shared/cmsQueryParser.ts +60 -38
  205. package/lib/shared/colorConversions.ts +9 -9
  206. package/lib/shared/colorVariableUtils.test.ts +27 -5
  207. package/lib/shared/colorVariableUtils.ts +21 -12
  208. package/lib/shared/componentRefs.ts +1 -5
  209. package/lib/shared/constants.test.ts +3 -3
  210. package/lib/shared/constants.ts +8 -8
  211. package/lib/shared/cssGeneration.test.ts +285 -144
  212. package/lib/shared/cssGeneration.ts +217 -531
  213. package/lib/shared/cssNamedColors.ts +152 -30
  214. package/lib/shared/cssProperties.test.ts +69 -70
  215. package/lib/shared/cssProperties.ts +298 -114
  216. package/lib/shared/elementClassName.test.ts +109 -109
  217. package/lib/shared/elementClassName.ts +3 -3
  218. package/lib/shared/elementUtils.ts +12 -16
  219. package/lib/shared/errorLogger.test.ts +12 -12
  220. package/lib/shared/errorLogger.ts +2 -10
  221. package/lib/shared/errors.test.ts +2 -13
  222. package/lib/shared/errors.ts +2 -8
  223. package/lib/shared/expressionEvaluator.test.ts +145 -0
  224. package/lib/shared/expressionEvaluator.ts +52 -24
  225. package/lib/shared/fontLoader.test.ts +32 -18
  226. package/lib/shared/fontLoader.ts +2 -2
  227. package/lib/shared/friendlyError.ts +2 -3
  228. package/lib/shared/gradientUtils.test.ts +3 -7
  229. package/lib/shared/gradientUtils.ts +17 -14
  230. package/lib/shared/hrefRefs.test.ts +2 -2
  231. package/lib/shared/hrefRefs.ts +2 -10
  232. package/lib/shared/i18n.test.ts +4 -4
  233. package/lib/shared/i18n.ts +18 -38
  234. package/lib/shared/index.ts +27 -0
  235. package/lib/shared/inlineSvgStyleRules.ts +14 -13
  236. package/lib/shared/interactiveStyleMappings.test.ts +32 -54
  237. package/lib/shared/interactiveStyleMappings.ts +11 -24
  238. package/lib/shared/interactiveStyles.test.ts +165 -188
  239. package/lib/shared/interfaces/contentProvider.ts +1 -1
  240. package/lib/shared/itemTemplateUtils.test.ts +11 -17
  241. package/lib/shared/itemTemplateUtils.ts +27 -39
  242. package/lib/shared/jsonRepair.ts +16 -10
  243. package/lib/shared/libraryLoader.test.ts +21 -55
  244. package/lib/shared/libraryLoader.ts +7 -22
  245. package/lib/shared/linkUtils.ts +1 -1
  246. package/lib/shared/logger.test.ts +66 -0
  247. package/lib/shared/logger.ts +94 -0
  248. package/lib/shared/markdown.ts +25 -0
  249. package/lib/shared/netlifyLocale404.test.ts +179 -0
  250. package/lib/shared/netlifyLocale404.ts +110 -0
  251. package/lib/shared/nodeUtils.test.ts +28 -16
  252. package/lib/shared/nodeUtils.ts +76 -23
  253. package/lib/shared/pathArrayUtils.test.ts +1 -2
  254. package/lib/shared/pathArrayUtils.ts +1 -1
  255. package/lib/shared/pathSecurity.ts +2 -2
  256. package/lib/shared/pathUtils.test.ts +4 -6
  257. package/lib/shared/pathUtils.ts +42 -49
  258. package/lib/shared/paths/Path.test.ts +2 -2
  259. package/lib/shared/paths/Path.ts +0 -1
  260. package/lib/shared/paths/PathConverter.test.ts +1 -1
  261. package/lib/shared/paths/PathConverter.ts +17 -20
  262. package/lib/shared/paths/PathUtils.ts +13 -13
  263. package/lib/shared/paths/PathValidator.test.ts +2 -15
  264. package/lib/shared/paths/PathValidator.ts +12 -10
  265. package/lib/shared/paths/index.ts +1 -2
  266. package/lib/shared/permissions.test.ts +168 -0
  267. package/lib/shared/permissions.ts +162 -0
  268. package/lib/shared/propResolver.test.ts +240 -244
  269. package/lib/shared/propResolver.ts +15 -26
  270. package/lib/shared/pxToRem.test.ts +7 -6
  271. package/lib/shared/pxToRem.ts +2 -5
  272. package/lib/shared/registry/BaseNodeTypeRegistry.test.ts +12 -6
  273. package/lib/shared/registry/ClientRegistry.ts +0 -2
  274. package/lib/shared/registry/ComponentRegistry.test.ts +46 -32
  275. package/lib/shared/registry/ComponentRegistry.ts +12 -9
  276. package/lib/shared/registry/NodeTypeDefinition.ts +16 -9
  277. package/lib/shared/registry/RegistryManager.ts +1 -2
  278. package/lib/shared/registry/SSRRegistry.ts +0 -2
  279. package/lib/shared/registry/createNodeType.ts +7 -9
  280. package/lib/shared/registry/defineNodeType.ts +2 -6
  281. package/lib/shared/registry/fieldPresets.ts +3 -1
  282. package/lib/shared/registry/index.ts +0 -1
  283. package/lib/shared/registry/nodeTypes/ComponentInstanceNodeType.ts +14 -15
  284. package/lib/shared/registry/nodeTypes/CustomNodeType.ts +103 -0
  285. package/lib/shared/registry/nodeTypes/EmbedNodeType.ts +18 -11
  286. package/lib/shared/registry/nodeTypes/HtmlNodeType.ts +48 -19
  287. package/lib/shared/registry/nodeTypes/IslandNodeType.ts +129 -0
  288. package/lib/shared/registry/nodeTypes/LinkNodeType.ts +21 -19
  289. package/lib/shared/registry/nodeTypes/ListNodeType.ts +117 -77
  290. package/lib/shared/registry/nodeTypes/LocaleListNodeType.ts +27 -21
  291. package/lib/shared/registry/nodeTypes/MarkdownNodeType.ts +78 -0
  292. package/lib/shared/registry/nodeTypes/SlotMarkerType.ts +12 -8
  293. package/lib/shared/registry/nodeTypes/index.ts +26 -3
  294. package/lib/shared/responsiveScaling.test.ts +16 -34
  295. package/lib/shared/responsiveScaling.ts +61 -42
  296. package/lib/shared/responsiveStyleUtils.test.ts +0 -1
  297. package/lib/shared/responsiveStyleUtils.ts +11 -13
  298. package/lib/shared/richtext/htmlToTiptap.test.ts +139 -130
  299. package/lib/shared/richtext/htmlToTiptap.ts +2 -4
  300. package/lib/shared/richtext/tiptapToHtml.test.ts +5 -6
  301. package/lib/shared/richtext/types.ts +1 -8
  302. package/lib/shared/slugTranslator.test.ts +13 -13
  303. package/lib/shared/slugTranslator.ts +12 -16
  304. package/lib/shared/slugify.ts +9 -15
  305. package/lib/shared/styleNodeUtils.test.ts +8 -8
  306. package/lib/shared/styleNodeUtils.ts +18 -20
  307. package/lib/shared/styleUtils.test.ts +87 -61
  308. package/lib/shared/styleUtils.ts +5 -6
  309. package/lib/shared/themeDefaults.test.ts +11 -14
  310. package/lib/shared/themeDefaults.ts +3 -4
  311. package/lib/shared/tree/PathBuilder.test.ts +63 -145
  312. package/lib/shared/tree/PathBuilder.ts +59 -47
  313. package/lib/shared/treePathUtils.test.ts +51 -12
  314. package/lib/shared/treePathUtils.ts +91 -60
  315. package/lib/shared/types/api.ts +105 -8
  316. package/lib/shared/types/cms.test.ts +34 -0
  317. package/lib/shared/types/cms.ts +90 -34
  318. package/lib/shared/types/comment.ts +49 -16
  319. package/lib/shared/types/components.ts +51 -25
  320. package/lib/shared/types/errors.test.ts +1 -6
  321. package/lib/shared/types/errors.ts +3 -7
  322. package/lib/shared/types/experiments.ts +28 -28
  323. package/lib/shared/types/index.ts +25 -2
  324. package/lib/shared/types/permissions.ts +139 -0
  325. package/lib/shared/types/styles.ts +0 -1
  326. package/lib/shared/types/variables.test.ts +4 -13
  327. package/lib/shared/types/variables.ts +51 -30
  328. package/lib/shared/types.ts +1 -2
  329. package/lib/shared/utilityClassConfig.ts +751 -321
  330. package/lib/shared/utilityClassMapper.durability.test.ts +117 -0
  331. package/lib/shared/utilityClassMapper.test.ts +433 -95
  332. package/lib/shared/utilityClassMapper.ts +322 -249
  333. package/lib/shared/utilityClassNames.test.ts +38 -0
  334. package/lib/shared/utilityClassNames.ts +458 -0
  335. package/lib/shared/utils.test.ts +2 -10
  336. package/lib/shared/utils.ts +19 -10
  337. package/lib/shared/validation/cmsValidators.ts +2 -1
  338. package/lib/shared/validation/commentValidators.test.ts +53 -0
  339. package/lib/shared/validation/commentValidators.ts +12 -1
  340. package/lib/shared/validation/index.ts +1 -0
  341. package/lib/shared/validation/permissionsValidators.test.ts +49 -0
  342. package/lib/shared/validation/permissionsValidators.ts +49 -0
  343. package/lib/shared/validation/propValidator.test.ts +19 -21
  344. package/lib/shared/validation/propValidator.ts +13 -18
  345. package/lib/shared/validation/schemas.test.ts +64 -32
  346. package/lib/shared/validation/schemas.ts +616 -345
  347. package/lib/shared/validation/validators.test.ts +3 -8
  348. package/lib/shared/validation/validators.ts +89 -68
  349. package/lib/shared/viewportUnits.integration.test.ts +14 -10
  350. package/lib/shared/viewportUnits.test.ts +24 -23
  351. package/lib/shared/viewportUnits.ts +12 -5
  352. package/lib/test-utils/dom-setup.ts +1 -1
  353. package/lib/test-utils/factories/ConsoleMockFactory.ts +10 -14
  354. package/lib/test-utils/factories/DomMockFactory.ts +17 -23
  355. package/lib/test-utils/factories/EventMockFactory.ts +7 -13
  356. package/lib/test-utils/factories/FetchMockFactory.ts +39 -57
  357. package/lib/test-utils/factories/ServerMockFactory.ts +6 -10
  358. package/lib/test-utils/factories/StoreMockFactory.ts +18 -29
  359. package/lib/test-utils/fixtures.ts +45 -45
  360. package/lib/test-utils/helpers/asyncHelpers.test.ts +15 -18
  361. package/lib/test-utils/helpers/asyncHelpers.ts +11 -20
  362. package/lib/test-utils/helpers.ts +1 -5
  363. package/lib/test-utils/index.ts +0 -4
  364. package/lib/test-utils/mockFactories.ts +13 -19
  365. package/lib/test-utils/mocks.ts +6 -4
  366. package/package.json +3 -5
  367. package/scripts/build-for-publish.mjs +2 -4
  368. package/scripts/build-meno-filter.ts +4 -7
  369. package/tsconfig.json +1 -0
  370. package/vite.config.ts +4 -4
  371. package/build-next.ts +0 -1361
  372. package/build-static.test.ts +0 -424
  373. package/build-static.ts +0 -1074
  374. package/dist/build-static.js +0 -36
  375. package/dist/chunks/chunk-2MHDV5BF.js +0 -251
  376. package/dist/chunks/chunk-2MHDV5BF.js.map +0 -7
  377. package/dist/chunks/chunk-AZQYF6KE.js +0 -559
  378. package/dist/chunks/chunk-AZQYF6KE.js.map +0 -7
  379. package/dist/chunks/chunk-GZHGVVW3.js +0 -322
  380. package/dist/chunks/chunk-GZHGVVW3.js.map +0 -7
  381. package/dist/chunks/chunk-H3GJ4H2U.js.map +0 -7
  382. package/dist/chunks/chunk-I7YIGZXT.js +0 -467
  383. package/dist/chunks/chunk-I7YIGZXT.js.map +0 -7
  384. package/dist/chunks/chunk-IGYR22T6.js +0 -6192
  385. package/dist/chunks/chunk-IGYR22T6.js.map +0 -7
  386. package/dist/chunks/chunk-JGP5A3Y5.js +0 -1136
  387. package/dist/chunks/chunk-JGP5A3Y5.js.map +0 -7
  388. package/dist/chunks/chunk-JGWFTO6P.js.map +0 -7
  389. package/dist/chunks/chunk-O3NAGJP4.js.map +0 -7
  390. package/dist/chunks/chunk-QB2LNO4W.js +0 -77
  391. package/dist/chunks/chunk-QB2LNO4W.js.map +0 -7
  392. package/dist/chunks/chunk-R6XHAFBF.js +0 -3821
  393. package/dist/chunks/chunk-R6XHAFBF.js.map +0 -7
  394. package/dist/chunks/chunk-UB44F4Z2.js.map +0 -7
  395. package/dist/chunks/chunk-WQFG7PAH.js.map +0 -7
  396. package/dist/chunks/chunk-X754AHS5.js.map +0 -7
  397. package/dist/chunks/chunk-YBLHKYFF.js.map +0 -7
  398. package/dist/chunks/configService-R3OGU2UD.js +0 -13
  399. package/dist/chunks/configService-R3OGU2UD.js.map +0 -7
  400. package/dist/chunks/constants-STK2YBIW.js +0 -46
  401. package/dist/chunks/constants-STK2YBIW.js.map +0 -7
  402. package/dist/chunks/fs-JGINUXGL.js.map +0 -7
  403. package/dist/entries/server-router.js +0 -67
  404. package/dist/entries/server-router.js.map +0 -7
  405. package/entries/server-router.tsx +0 -81
  406. package/lib/server/providers/fileSystemPageProvider.ts +0 -160
  407. package/lib/server/webflow/buildWebflow.ts +0 -635
  408. package/lib/server/webflow/index.ts +0 -23
  409. package/lib/server/webflow/nodeToWebflow.test.ts +0 -3170
  410. package/lib/server/webflow/nodeToWebflow.ts +0 -2435
  411. package/lib/server/webflow/styleMapper.test.ts +0 -389
  412. package/lib/server/webflow/styleMapper.ts +0 -695
  413. package/lib/server/webflow/templateWrapper.ts +0 -49
  414. package/lib/server/webflow/types.ts +0 -396
  415. /package/dist/{build-static.js.map → chunks/fs-G3ANWEFP.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../lib/test-utils/mocks.ts", "../../../lib/test-utils/helpers.ts", "../../../lib/test-utils/mockFactories.ts", "../../../lib/test-utils/factories/DomMockFactory.ts", "../../../lib/test-utils/factories/FetchMockFactory.ts", "../../../lib/test-utils/factories/EventMockFactory.ts", "../../../lib/test-utils/factories/StoreMockFactory.ts", "../../../lib/test-utils/factories/ConsoleMockFactory.ts", "../../../lib/test-utils/factories/ServerMockFactory.ts", "../../../lib/test-utils/helpers/asyncHelpers.ts"],
4
- "sourcesContent": ["/**\n * Mock Factories\n * Factory functions for creating mock objects used in tests\n */\n\nimport { mock } from 'bun:test';\nimport type { ComponentRegistry } from '../client/componentRegistry';\nimport type { ComponentNode, ComponentDefinition, JSONPage, PageDataWithComponent } from '../shared/types';\nimport type { ElementRegistry } from '../client/elementRegistry';\n\n// HighlightManager interface (module was removed, keeping type for mock compatibility)\ninterface HighlightManager {\n highlightElements: (paths: string[]) => void;\n setHoveredElement: (path: string | null) => void;\n clearHover: () => void;\n clearAll: () => void;\n}\nimport { NODE_TYPE } from '../shared/constants';\n\n/**\n * Create a mock ComponentRegistry\n */\nexport function createMockComponentRegistry(): ComponentRegistry {\n return {\n has: mock(() => false),\n get: mock(() => undefined),\n set: mock(() => {}),\n delete: mock(() => {}),\n clear: mock(() => {}),\n getAll: mock(() => ({})),\n } as any;\n}\n\n/**\n * Create a mock ComponentNode\n */\nexport function createMockComponentNode(overrides?: Partial<ComponentNode>): ComponentNode {\n return {\n type: NODE_TYPE.NODE,\n tag: 'div',\n children: [],\n ...overrides,\n } as ComponentNode;\n}\n\n/**\n * Create a mock ComponentDefinition\n */\nexport function createMockComponentDefinition(name: string, overrides?: Partial<ComponentDefinition>): ComponentDefinition {\n return {\n component: {\n interface: {},\n structure: {\n type: NODE_TYPE.NODE,\n tag: 'div',\n children: [],\n },\n },\n ...overrides,\n } as ComponentDefinition;\n}\n\n/**\n * Create a mock PageData\n */\nexport function createMockPageData(overrides?: Partial<JSONPage>): JSONPage {\n return {\n meta: {\n title: 'Test Page',\n },\n root: {\n type: NODE_TYPE.NODE,\n tag: 'div',\n children: [],\n },\n ...overrides,\n } as JSONPage;\n}\n\n/**\n * Create a mock PageDataWithComponent\n */\nexport function createMockPageDataWithComponent(overrides?: Partial<PageDataWithComponent>): PageDataWithComponent {\n return {\n component: {\n interface: {},\n structure: {\n type: NODE_TYPE.NODE,\n tag: 'div',\n children: [],\n },\n javascript: '',\n css: '',\n ...overrides?.component,\n },\n } as PageDataWithComponent;\n}\n\n/**\n * Create a mock HighlightManager\n */\nexport function createMockHighlightManager(): HighlightManager {\n return {\n highlightElements: mock(() => {}),\n setHoveredElement: mock(() => {}),\n clearHover: mock(() => {}),\n clearAll: mock(() => {}),\n } as any;\n}\n\n/**\n * Create a mock ElementRegistry\n */\nexport function createMockElementRegistry(): ElementRegistry {\n return {\n register: mock(() => {}),\n get: mock(() => null),\n getAllComponentNames: mock(() => []),\n getComponentRootPaths: mock(() => []),\n getComponentProps: mock(() => undefined),\n clear: mock(() => {}),\n } as any;\n}\n\n/**\n * Create a mock EditorStore\n */\nexport function createMockEditorStore() {\n return {\n files: [],\n selectedFile: null,\n pageData: null,\n selectedTreeItem: null,\n setFiles: mock(() => {}),\n setSelectedFile: mock(() => {}),\n setPageData: mock(() => {}),\n setSelectedTreeItem: mock(() => {}),\n updateProp: mock(() => Promise.resolve()),\n // Async file operations are now in editorServices.fileStoreService\n } as any;\n}\n\n/**\n * Create a mock editorServices object with all services mocked\n */\nexport function createMockEditorServices() {\n return {\n fileService: {\n loadAllFiles: mock(() => Promise.resolve({ pages: [], components: [] })),\n loadFileData: mock(() => Promise.resolve({ component: { type: 'div', children: [] } })),\n saveFileData: mock(() => Promise.resolve()),\n saveComponentJS: mock(() => Promise.resolve()),\n saveComponentCSS: mock(() => Promise.resolve()),\n },\n nodeService: {\n addElement: mock(() => Promise.resolve()),\n deleteElement: mock(() => Promise.resolve()),\n moveElement: mock(() => Promise.resolve()),\n },\n componentService: {\n loadComponentDefinition: mock(() => Promise.resolve()),\n createFromSelection: mock(() => Promise.resolve()),\n },\n fileStoreService: {\n loadFiles: mock(() => Promise.resolve()),\n selectFile: mock(() => Promise.resolve({ component: { type: 'div', children: [] } })),\n reloadSelectedFilePreservingSelection: mock(() => Promise.resolve({ component: { type: 'div', children: [] } })),\n },\n } as any;\n}\n\n/**\n * Create a mock Window object\n */\nexport function createMockWindow(): Window {\n return {\n location: {\n href: 'http://localhost/',\n pathname: '/',\n search: '',\n hash: '',\n assign: mock(() => {}),\n replace: mock(() => {}),\n reload: mock(() => {}),\n },\n history: {\n pushState: mock(() => {}),\n replaceState: mock(() => {}),\n go: mock(() => {}),\n back: mock(() => {}),\n forward: mock(() => {}),\n length: 1,\n state: null,\n scrollRestoration: 'auto',\n },\n addEventListener: mock(() => {}),\n removeEventListener: mock(() => {}),\n dispatchEvent: mock(() => true),\n } as unknown as Window;\n}\n\n/**\n * Create a mock Document object\n */\nexport function createMockDocument(): Document {\n return {\n createElement: mock(() => createMockHTMLElement()),\n getElementById: mock(() => null),\n querySelector: mock(() => null),\n querySelectorAll: mock(() => []),\n addEventListener: mock(() => {}),\n removeEventListener: mock(() => {}),\n dispatchEvent: mock(() => true),\n } as unknown as Document;\n}\n\n/**\n * Create a mock HTMLElement\n */\nexport function createMockHTMLElement(): HTMLElement {\n return {\n tagName: 'DIV',\n id: '',\n className: '',\n textContent: '',\n innerHTML: '',\n style: {} as CSSStyleDeclaration,\n getAttribute: mock(() => null),\n setAttribute: mock(() => {}),\n removeAttribute: mock(() => {}),\n addEventListener: mock(() => {}),\n removeEventListener: mock(() => {}),\n dispatchEvent: mock(() => true),\n getBoundingClientRect: mock(() => ({\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n width: 0,\n height: 0,\n x: 0,\n y: 0,\n toJSON: mock(() => ({})),\n })),\n } as unknown as HTMLElement;\n}\n\n/**\n * Create a mock PageProvider for testing PageService\n * @param pages - Initial page content map (path -> content)\n */\nexport function createMockPageProvider(pages: Record<string, string> = {}) {\n const pageStore = { ...pages };\n\n return {\n loadAll: mock(async () => {\n return new Map(Object.entries(pageStore));\n }),\n get: mock(async (path: string) => {\n return pageStore[path] ?? null;\n }),\n save: mock(async (path: string, content: string) => {\n pageStore[path] = content;\n }),\n delete: mock(async (path: string) => {\n delete pageStore[path];\n }),\n exists: mock(async (path: string) => {\n return path in pageStore;\n }),\n // Expose internal store for test assertions\n _pages: pageStore,\n };\n}\n\n/**\n * Create a mock fs/promises module for testing file operations\n * @param files - Initial file content map (path -> content)\n */\nexport function createMockFs(files: Record<string, string> = {}) {\n const fileSystem = { ...files };\n\n return {\n readFile: mock(async (path: string, encoding?: string) => {\n if (path in fileSystem) {\n return fileSystem[path];\n }\n const error = new Error(`ENOENT: no such file or directory, open '${path}'`);\n (error as any).code = 'ENOENT';\n throw error;\n }),\n writeFile: mock(async (path: string, content: string) => {\n fileSystem[path] = content;\n }),\n unlink: mock(async (path: string) => {\n if (!(path in fileSystem)) {\n const error = new Error(`ENOENT: no such file or directory, unlink '${path}'`);\n (error as any).code = 'ENOENT';\n throw error;\n }\n delete fileSystem[path];\n }),\n readdir: mock(async (dir: string) => {\n const normalizedDir = dir.endsWith('/') ? dir : dir + '/';\n const entries = new Set<string>();\n for (const path of Object.keys(fileSystem)) {\n if (path.startsWith(normalizedDir)) {\n const relativePath = path.slice(normalizedDir.length);\n const firstSegment = relativePath.split('/')[0];\n if (firstSegment) {\n entries.add(firstSegment);\n }\n }\n }\n return Array.from(entries);\n }),\n stat: mock(async (path: string) => ({\n isDirectory: () => !path.includes('.') || path.endsWith('/'),\n isFile: () => path.includes('.') && !path.endsWith('/'),\n })),\n access: mock(async (path: string) => {\n if (!(path in fileSystem)) {\n const error = new Error(`ENOENT: no such file or directory, access '${path}'`);\n (error as any).code = 'ENOENT';\n throw error;\n }\n }),\n mkdir: mock(async () => {}),\n rm: mock(async (path: string) => {\n // Remove all files under this path\n for (const filePath of Object.keys(fileSystem)) {\n if (filePath.startsWith(path)) {\n delete fileSystem[filePath];\n }\n }\n }),\n // Expose internal file system for test assertions\n _files: fileSystem,\n };\n}\n\n", "/**\n * Test Helpers\n * Helper functions for common test scenarios\n */\n\nimport type { ComponentNode } from '../shared/types';\nimport { NODE_TYPE } from '../shared/constants';\n\n/**\n * Create a simple DOM mock for testing\n */\nexport function setupDOMMock() {\n const mockElement = {\n id: '',\n textContent: '',\n style: {} as CSSStyleDeclaration,\n remove: () => {},\n appendChild: () => {},\n addEventListener: () => {},\n removeEventListener: () => {},\n };\n\n global.document = {\n getElementById: () => null,\n createElement: () => mockElement as any,\n head: {\n appendChild: () => {},\n } as any,\n body: {\n appendChild: () => {},\n } as any,\n } as any;\n\n global.window = {\n location: {\n pathname: '/',\n href: 'http://localhost:3000/',\n },\n innerWidth: 1920,\n addEventListener: () => {},\n removeEventListener: () => {},\n } as any;\n}\n\n/**\n * Create a simple tree structure for testing\n */\nexport function createTestTree(depth: number = 2, childrenPerNode: number = 2): ComponentNode {\n if (depth === 0) {\n return {\n type: NODE_TYPE.NODE,\n tag: 'div',\n children: [],\n };\n }\n\n const children: ComponentNode[] = [];\n for (let i = 0; i < childrenPerNode; i++) {\n children.push(createTestTree(depth - 1, childrenPerNode));\n }\n\n return {\n type: NODE_TYPE.NODE,\n tag: 'div',\n children,\n };\n}\n\n/**\n * Wait for async operations to complete\n */\nexport function wait(ms: number = 0): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n/**\n * Create a mock fetch response\n */\nexport function createMockFetchResponse(data: any, options: { ok?: boolean; status?: number } = {}) {\n return Promise.resolve({\n ok: options.ok !== false,\n status: options.status || 200,\n json: () => Promise.resolve(data),\n text: () => Promise.resolve(typeof data === 'string' ? data : JSON.stringify(data)),\n } as Response);\n}\n\n\n\n\n", "/**\n * Test Utilities - Mock Factories\n * Factory functions for creating common test objects\n */\n\nimport type { Path } from \"../shared/pathArrayUtils\";\n\n/**\n * Create a mock HTMLElement for testing\n */\nexport function createMockElement(\n overrides: Partial<HTMLElement> = {}\n): HTMLElement {\n const element = document.createElement(\"div\");\n element.scrollIntoView = (() => {}) as any;\n return Object.assign(element, overrides) as HTMLElement;\n}\n\n/**\n * Create a mock component structure for testing\n */\nexport function createMockComponentStructure(\n overrides: Partial<any> = {}\n): any {\n return {\n type: \"div\",\n props: {\n className: \"test-component\",\n },\n children: [],\n ...overrides,\n };\n}\n\n/**\n * Create a mock path for testing\n */\nexport function createMockPath(depth: number = 2): Path {\n return Array.from({ length: depth }, (_, i) => i);\n}\n\n/**\n * Create mock component props\n */\nexport function createMockComponentProps(\n overrides: Record<string, unknown> = {}\n): Record<string, unknown> {\n return {\n variant: \"primary\",\n size: \"medium\",\n disabled: false,\n ...overrides,\n };\n}\n\n/**\n * Create mock page structure\n */\nexport function createMockPageStructure(overrides: Partial<any> = {}): any {\n return {\n root: {\n type: \"div\",\n props: {\n className: \"page-container\",\n },\n children: [],\n },\n components: {},\n ...overrides,\n };\n}\n\n/**\n * Create test container for DOM tests\n */\nexport function createTestContainer(): HTMLElement {\n const container = document.createElement(\"div\");\n container.id = `test-container-${Date.now()}`;\n document.body.appendChild(container);\n return container;\n}\n\n/**\n * Clean up test container\n */\nexport function cleanupTestContainer(container: HTMLElement): void {\n try {\n document.body.removeChild(container);\n } catch (e) {\n // Already removed\n }\n}\n", "/**\n * DOM Mock Factory\n * Properly typed mock factories for Window, Document, and HTMLElement\n */\n\nimport { mock } from 'bun:test';\n\n// ========== Types ==========\n\nexport interface MockDOMRect {\n top: number;\n left: number;\n right: number;\n bottom: number;\n width: number;\n height: number;\n x: number;\n y: number;\n toJSON: () => object;\n}\n\nexport interface MockHTMLElementOptions {\n tagName?: string;\n id?: string;\n className?: string;\n textContent?: string;\n innerHTML?: string;\n style?: Partial<CSSStyleDeclaration>;\n dataset?: Record<string, string>;\n attributes?: Record<string, string>;\n}\n\nexport interface MockWindowOptions {\n location?: Partial<Location>;\n innerWidth?: number;\n innerHeight?: number;\n}\n\nexport interface MockDocumentOptions {\n elements?: Map<string, HTMLElement>;\n}\n\n// ========== DOMRect ==========\n\nexport function createMockDOMRect(overrides?: Partial<MockDOMRect>): DOMRect {\n return {\n top: 0,\n left: 0,\n right: 100,\n bottom: 100,\n width: 100,\n height: 100,\n x: 0,\n y: 0,\n toJSON: () => ({}),\n ...overrides,\n } as DOMRect;\n}\n\n// ========== CSSStyleDeclaration ==========\n\nexport function createMockCSSStyleDeclaration(\n initial?: Partial<CSSStyleDeclaration>\n): CSSStyleDeclaration {\n const styles: Record<string, string> = {};\n\n // Copy initial values\n if (initial) {\n for (const [key, value] of Object.entries(initial)) {\n if (typeof value === 'string') {\n styles[key] = value;\n }\n }\n }\n\n return new Proxy(styles as unknown as CSSStyleDeclaration, {\n get(target, prop: string) {\n if (prop === 'setProperty') {\n return (name: string, value: string) => {\n styles[name] = value;\n };\n }\n if (prop === 'getPropertyValue') {\n return (name: string) => styles[name] || '';\n }\n if (prop === 'removeProperty') {\n return (name: string) => {\n const old = styles[name];\n delete styles[name];\n return old || '';\n };\n }\n return styles[prop] ?? '';\n },\n set(_, prop: string, value: string) {\n styles[prop] = value;\n return true;\n },\n });\n}\n\n// ========== HTMLElement ==========\n\nexport interface TypedMockHTMLElement {\n tagName: string;\n id: string;\n className: string;\n textContent: string;\n innerHTML: string;\n style: CSSStyleDeclaration;\n dataset: DOMStringMap;\n childNodes: Node[];\n children: Element[];\n parentNode: Node | null;\n parentElement: HTMLElement | null;\n getAttribute: ReturnType<typeof mock>;\n setAttribute: ReturnType<typeof mock>;\n removeAttribute: ReturnType<typeof mock>;\n hasAttribute: ReturnType<typeof mock>;\n addEventListener: ReturnType<typeof mock>;\n removeEventListener: ReturnType<typeof mock>;\n dispatchEvent: ReturnType<typeof mock>;\n appendChild: ReturnType<typeof mock>;\n removeChild: ReturnType<typeof mock>;\n insertBefore: ReturnType<typeof mock>;\n contains: ReturnType<typeof mock>;\n matches: ReturnType<typeof mock>;\n querySelector: ReturnType<typeof mock>;\n querySelectorAll: ReturnType<typeof mock>;\n closest: ReturnType<typeof mock>;\n getBoundingClientRect: ReturnType<typeof mock>;\n remove: ReturnType<typeof mock>;\n cloneNode: ReturnType<typeof mock>;\n focus: ReturnType<typeof mock>;\n blur: ReturnType<typeof mock>;\n scrollIntoView: ReturnType<typeof mock>;\n // Expose for assertions\n _attributes: Map<string, string>;\n _eventListeners: Map<string, EventListener[]>;\n}\n\nexport function createTypedMockHTMLElement(\n options: MockHTMLElementOptions = {}\n): TypedMockHTMLElement {\n const attributes = new Map<string, string>(\n Object.entries(options.attributes || {})\n );\n const eventListeners = new Map<string, EventListener[]>();\n const childNodes: Node[] = [];\n\n const element: TypedMockHTMLElement = {\n tagName: (options.tagName || 'DIV').toUpperCase(),\n id: options.id || '',\n className: options.className || '',\n textContent: options.textContent || '',\n innerHTML: options.innerHTML || '',\n style: createMockCSSStyleDeclaration(options.style),\n dataset: (options.dataset || {}) as DOMStringMap,\n childNodes,\n children: childNodes as unknown as Element[],\n parentNode: null,\n parentElement: null,\n\n getAttribute: mock((name: string) => attributes.get(name) ?? null),\n setAttribute: mock((name: string, value: string) => {\n attributes.set(name, value);\n }),\n removeAttribute: mock((name: string) => {\n attributes.delete(name);\n }),\n hasAttribute: mock((name: string) => attributes.has(name)),\n\n addEventListener: mock((type: string, listener: EventListener) => {\n if (!eventListeners.has(type)) {\n eventListeners.set(type, []);\n }\n eventListeners.get(type)!.push(listener);\n }),\n removeEventListener: mock((type: string, listener: EventListener) => {\n const listeners = eventListeners.get(type);\n if (listeners) {\n const index = listeners.indexOf(listener);\n if (index > -1) listeners.splice(index, 1);\n }\n }),\n dispatchEvent: mock((event: Event) => {\n const listeners = eventListeners.get(event.type);\n listeners?.forEach((l) => l(event));\n return true;\n }),\n\n appendChild: mock((child: Node) => {\n childNodes.push(child);\n return child;\n }),\n removeChild: mock((child: Node) => {\n const index = childNodes.indexOf(child);\n if (index > -1) childNodes.splice(index, 1);\n return child;\n }),\n insertBefore: mock((newNode: Node, refNode: Node | null) => {\n if (refNode === null) {\n childNodes.push(newNode);\n } else {\n const index = childNodes.indexOf(refNode);\n if (index > -1) {\n childNodes.splice(index, 0, newNode);\n }\n }\n return newNode;\n }),\n\n contains: mock(() => false),\n matches: mock(() => false),\n querySelector: mock(() => null),\n querySelectorAll: mock(() => [] as unknown as NodeListOf<Element>),\n closest: mock(() => null),\n getBoundingClientRect: mock(() => createMockDOMRect()),\n remove: mock(() => {}),\n cloneNode: mock(() => createTypedMockHTMLElement(options) as unknown as Node),\n focus: mock(() => {}),\n blur: mock(() => {}),\n scrollIntoView: mock(() => {}),\n\n // Internal state for assertions\n _attributes: attributes,\n _eventListeners: eventListeners,\n };\n\n return element;\n}\n\n// ========== Location ==========\n\nexport interface TypedMockLocation {\n href: string;\n pathname: string;\n search: string;\n hash: string;\n host: string;\n hostname: string;\n port: string;\n protocol: string;\n origin: string;\n assign: ReturnType<typeof mock>;\n replace: ReturnType<typeof mock>;\n reload: ReturnType<typeof mock>;\n toString: () => string;\n}\n\nexport function createTypedMockLocation(\n overrides?: Partial<Location>\n): TypedMockLocation {\n const base = {\n href: 'http://localhost/',\n pathname: '/',\n search: '',\n hash: '',\n host: 'localhost',\n hostname: 'localhost',\n port: '',\n protocol: 'http:',\n origin: 'http://localhost',\n ...overrides,\n };\n\n return {\n ...base,\n assign: mock(() => {}),\n replace: mock(() => {}),\n reload: mock(() => {}),\n toString: () => base.href,\n };\n}\n\n// ========== History ==========\n\nexport interface TypedMockHistory {\n length: number;\n state: unknown;\n scrollRestoration: ScrollRestoration;\n pushState: ReturnType<typeof mock>;\n replaceState: ReturnType<typeof mock>;\n go: ReturnType<typeof mock>;\n back: ReturnType<typeof mock>;\n forward: ReturnType<typeof mock>;\n // Internal state for assertions\n _stateStack: Array<{ state: unknown; title: string; url: string }>;\n}\n\nexport function createTypedMockHistory(): TypedMockHistory {\n const stateStack: Array<{ state: unknown; title: string; url: string }> = [];\n\n return {\n length: 1,\n state: null,\n scrollRestoration: 'auto',\n pushState: mock((state: unknown, title: string, url?: string | null) => {\n stateStack.push({ state, title, url: url || '' });\n }),\n replaceState: mock((state: unknown, title: string, url?: string | null) => {\n if (stateStack.length > 0) {\n stateStack[stateStack.length - 1] = { state, title, url: url || '' };\n } else {\n stateStack.push({ state, title, url: url || '' });\n }\n }),\n go: mock(() => {}),\n back: mock(() => {}),\n forward: mock(() => {}),\n _stateStack: stateStack,\n };\n}\n\n// ========== Window ==========\n\nexport interface TypedMockWindow {\n location: TypedMockLocation;\n history: TypedMockHistory;\n innerWidth: number;\n innerHeight: number;\n addEventListener: ReturnType<typeof mock>;\n removeEventListener: ReturnType<typeof mock>;\n dispatchEvent: ReturnType<typeof mock>;\n getComputedStyle: ReturnType<typeof mock>;\n requestAnimationFrame: ReturnType<typeof mock>;\n cancelAnimationFrame: ReturnType<typeof mock>;\n setTimeout: typeof globalThis.setTimeout;\n clearTimeout: typeof globalThis.clearTimeout;\n setInterval: typeof globalThis.setInterval;\n clearInterval: typeof globalThis.clearInterval;\n // Internal state\n _eventListeners: Map<string, EventListener[]>;\n}\n\nexport function createTypedMockWindow(\n options: MockWindowOptions = {}\n): TypedMockWindow {\n const eventListeners = new Map<string, EventListener[]>();\n const location = createTypedMockLocation(options.location);\n const history = createTypedMockHistory();\n\n return {\n location,\n history,\n innerWidth: options.innerWidth ?? 1920,\n innerHeight: options.innerHeight ?? 1080,\n\n addEventListener: mock((type: string, listener: EventListener) => {\n if (!eventListeners.has(type)) {\n eventListeners.set(type, []);\n }\n eventListeners.get(type)!.push(listener);\n }),\n removeEventListener: mock((type: string, listener: EventListener) => {\n const listeners = eventListeners.get(type);\n if (listeners) {\n const index = listeners.indexOf(listener);\n if (index > -1) listeners.splice(index, 1);\n }\n }),\n dispatchEvent: mock((event: Event) => {\n const listeners = eventListeners.get(event.type);\n listeners?.forEach((l) => l(event));\n return true;\n }),\n\n getComputedStyle: mock(() => createMockCSSStyleDeclaration()),\n requestAnimationFrame: mock((cb: FrameRequestCallback) => {\n setTimeout(() => cb(performance.now()), 0);\n return 1;\n }),\n cancelAnimationFrame: mock(() => {}),\n\n setTimeout: globalThis.setTimeout,\n clearTimeout: globalThis.clearTimeout,\n setInterval: globalThis.setInterval,\n clearInterval: globalThis.clearInterval,\n\n _eventListeners: eventListeners,\n };\n}\n\n// ========== Document ==========\n\nexport interface TypedMockDocument {\n createElement: ReturnType<typeof mock>;\n getElementById: ReturnType<typeof mock>;\n querySelector: ReturnType<typeof mock>;\n querySelectorAll: ReturnType<typeof mock>;\n addEventListener: ReturnType<typeof mock>;\n removeEventListener: ReturnType<typeof mock>;\n dispatchEvent: ReturnType<typeof mock>;\n head: TypedMockHTMLElement;\n body: TypedMockHTMLElement;\n documentElement: TypedMockHTMLElement;\n // Internal state\n _createdElements: TypedMockHTMLElement[];\n _registeredElements: Map<string, TypedMockHTMLElement>;\n _eventListeners: Map<string, EventListener[]>;\n}\n\nexport function createTypedMockDocument(\n options: MockDocumentOptions = {}\n): TypedMockDocument {\n const registeredElements = new Map<string, TypedMockHTMLElement>();\n const createdElements: TypedMockHTMLElement[] = [];\n const eventListeners = new Map<string, EventListener[]>();\n\n // Convert any provided elements\n if (options.elements) {\n for (const [id, el] of options.elements) {\n registeredElements.set(id, el as unknown as TypedMockHTMLElement);\n }\n }\n\n return {\n createElement: mock((tag: string) => {\n const el = createTypedMockHTMLElement({ tagName: tag });\n createdElements.push(el);\n return el;\n }),\n getElementById: mock((id: string) => registeredElements.get(id) ?? null),\n querySelector: mock(() => null),\n querySelectorAll: mock(() => [] as unknown as NodeListOf<Element>),\n\n addEventListener: mock((type: string, listener: EventListener) => {\n if (!eventListeners.has(type)) {\n eventListeners.set(type, []);\n }\n eventListeners.get(type)!.push(listener);\n }),\n removeEventListener: mock((type: string, listener: EventListener) => {\n const listeners = eventListeners.get(type);\n if (listeners) {\n const index = listeners.indexOf(listener);\n if (index > -1) listeners.splice(index, 1);\n }\n }),\n dispatchEvent: mock((event: Event) => {\n const listeners = eventListeners.get(event.type);\n listeners?.forEach((l) => l(event));\n return true;\n }),\n\n head: createTypedMockHTMLElement({ tagName: 'HEAD' }),\n body: createTypedMockHTMLElement({ tagName: 'BODY' }),\n documentElement: createTypedMockHTMLElement({ tagName: 'HTML' }),\n\n _createdElements: createdElements,\n _registeredElements: registeredElements,\n _eventListeners: eventListeners,\n };\n}\n\n// ========== Global Installation Helpers ==========\n\nexport interface DomMockInstallation {\n window: TypedMockWindow;\n document: TypedMockDocument;\n cleanup: () => void;\n}\n\n/**\n * Install mock DOM globally and return cleanup function\n */\nexport function installMockDom(\n options: { window?: MockWindowOptions; document?: MockDocumentOptions } = {}\n): DomMockInstallation {\n const originalWindow = (globalThis as any).window;\n const originalDocument = (globalThis as any).document;\n\n const mockWindow = createTypedMockWindow(options.window);\n const mockDocument = createTypedMockDocument(options.document);\n\n (globalThis as any).window = mockWindow;\n (globalThis as any).document = mockDocument;\n\n return {\n window: mockWindow,\n document: mockDocument,\n cleanup: () => {\n (globalThis as any).window = originalWindow;\n (globalThis as any).document = originalDocument;\n },\n };\n}\n", "/**\n * Fetch Mock Factory\n * Properly typed mock factory for fetch with URL pattern matching\n */\n\nimport { mock } from 'bun:test';\n\n// ========== Types ==========\n\nexport interface MockFetchResponse {\n status?: number;\n statusText?: string;\n ok?: boolean;\n headers?: Record<string, string>;\n json?: () => Promise<unknown>;\n text?: () => Promise<string>;\n blob?: () => Promise<Blob>;\n}\n\nexport interface FetchMockConfig {\n /** URL pattern to response mapping */\n responses?: Map<string | RegExp, MockFetchResponse | (() => MockFetchResponse)>;\n /** Default response for unmatched URLs */\n defaultResponse?: MockFetchResponse;\n /** Whether to throw on unmatched URLs */\n throwOnUnmatched?: boolean;\n /** Delay in ms before resolving */\n delay?: number;\n}\n\nexport interface TypedFetchMock {\n (input: RequestInfo | URL, init?: RequestInit): Promise<Response>;\n /** Recorded calls for assertions */\n _calls: Array<{ url: string; options?: RequestInit }>;\n /** Reset call history */\n _reset: () => void;\n /** Add a response for a URL pattern */\n _addResponse: (\n pattern: string | RegExp,\n response: MockFetchResponse | (() => MockFetchResponse)\n ) => void;\n}\n\n// ========== Response Factory ==========\n\nfunction createMockResponse(config: MockFetchResponse): Response {\n const status = config.status ?? 200;\n const ok = config.ok ?? (status >= 200 && status < 300);\n\n return {\n status,\n statusText: config.statusText ?? (ok ? 'OK' : 'Error'),\n ok,\n headers: new Headers(config.headers),\n json: config.json ?? (() => Promise.resolve({})),\n text: config.text ?? (() => Promise.resolve('')),\n blob: config.blob ?? (() => Promise.resolve(new Blob())),\n clone: function () {\n return createMockResponse(config);\n },\n arrayBuffer: () => Promise.resolve(new ArrayBuffer(0)),\n formData: () => Promise.resolve(new FormData()),\n body: null,\n bodyUsed: false,\n redirected: false,\n type: 'basic',\n url: '',\n } as Response;\n}\n\n// ========== Main Factory ==========\n\nexport function createTypedFetchMock(config: FetchMockConfig = {}): TypedFetchMock {\n const calls: Array<{ url: string; options?: RequestInit }> = [];\n const responses = new Map(config.responses || []);\n\n const mockFn = mock(\n async (input: RequestInfo | URL, init?: RequestInit): Promise<Response> => {\n const url = typeof input === 'string' ? input : input.toString();\n calls.push({ url, options: init });\n\n if (config.delay) {\n await new Promise((resolve) => setTimeout(resolve, config.delay));\n }\n\n // Find matching response\n let responseConfig:\n | MockFetchResponse\n | (() => MockFetchResponse)\n | undefined;\n\n for (const [pattern, response] of responses) {\n if (typeof pattern === 'string' && url === pattern) {\n responseConfig = response;\n break;\n }\n if (typeof pattern === 'string' && url.includes(pattern)) {\n responseConfig = response;\n break;\n }\n if (pattern instanceof RegExp && pattern.test(url)) {\n responseConfig = response;\n break;\n }\n }\n\n if (!responseConfig && config.defaultResponse) {\n responseConfig = config.defaultResponse;\n }\n\n if (!responseConfig) {\n if (config.throwOnUnmatched) {\n throw new Error(`Unmatched fetch request: ${url}`);\n }\n return createMockResponse({ status: 404, ok: false });\n }\n\n const resolvedConfig =\n typeof responseConfig === 'function'\n ? responseConfig()\n : responseConfig;\n\n return createMockResponse(resolvedConfig);\n }\n ) as unknown as TypedFetchMock;\n\n mockFn._calls = calls;\n mockFn._reset = () => {\n calls.length = 0;\n };\n mockFn._addResponse = (pattern, response) => {\n responses.set(pattern, response);\n };\n\n return mockFn;\n}\n\n// ========== Convenience Factories ==========\n\n/**\n * Create a fetch mock that returns JSON data\n */\nexport function createJsonFetchMock<T>(\n responseData: T,\n options: Partial<MockFetchResponse> = {}\n): TypedFetchMock {\n return createTypedFetchMock({\n defaultResponse: {\n status: 200,\n ok: true,\n json: () => Promise.resolve(responseData),\n text: () => Promise.resolve(JSON.stringify(responseData)),\n ...options,\n },\n });\n}\n\n/**\n * Create a fetch mock that returns an error\n */\nexport function createErrorFetchMock(\n error: Error | string = 'Network error'\n): TypedFetchMock {\n const mockFn = mock(() =>\n Promise.reject(typeof error === 'string' ? new Error(error) : error)\n ) as unknown as TypedFetchMock;\n\n mockFn._calls = [];\n mockFn._reset = () => {};\n mockFn._addResponse = () => {};\n\n return mockFn;\n}\n\n/**\n * Create a fetch mock that returns different responses based on URL\n */\nexport function createRoutedFetchMock(\n routes: Record<string, MockFetchResponse | (() => MockFetchResponse)>\n): TypedFetchMock {\n const responses = new Map<string, MockFetchResponse | (() => MockFetchResponse)>();\n for (const [url, response] of Object.entries(routes)) {\n responses.set(url, response);\n }\n return createTypedFetchMock({ responses });\n}\n\n// ========== Global Installation ==========\n\nexport interface FetchMockInstallation {\n fetch: TypedFetchMock;\n cleanup: () => void;\n}\n\n/**\n * Install mock fetch globally and return cleanup function\n */\nexport function installMockFetch(config: FetchMockConfig = {}): FetchMockInstallation {\n const originalFetch = globalThis.fetch;\n const mockFetch = createTypedFetchMock(config);\n\n globalThis.fetch = mockFetch as unknown as typeof fetch;\n\n return {\n fetch: mockFetch,\n cleanup: () => {\n globalThis.fetch = originalFetch;\n },\n };\n}\n", "/**\n * Event Mock Factory\n * Properly typed mock factories for Keyboard, Mouse, and Custom events\n */\n\nimport { mock } from 'bun:test';\n\n// ========== Types ==========\n\nexport interface MockKeyboardEventOptions {\n key: string;\n code?: string;\n ctrlKey?: boolean;\n metaKey?: boolean;\n shiftKey?: boolean;\n altKey?: boolean;\n repeat?: boolean;\n bubbles?: boolean;\n cancelable?: boolean;\n}\n\nexport interface MockMouseEventOptions {\n button?: number;\n buttons?: number;\n clientX?: number;\n clientY?: number;\n screenX?: number;\n screenY?: number;\n ctrlKey?: boolean;\n metaKey?: boolean;\n shiftKey?: boolean;\n altKey?: boolean;\n target?: EventTarget | null;\n bubbles?: boolean;\n cancelable?: boolean;\n}\n\nexport interface TypedMockKeyboardEvent extends KeyboardEvent {\n preventDefault: ReturnType<typeof mock>;\n stopPropagation: ReturnType<typeof mock>;\n stopImmediatePropagation: ReturnType<typeof mock>;\n}\n\nexport interface TypedMockMouseEvent extends MouseEvent {\n preventDefault: ReturnType<typeof mock>;\n stopPropagation: ReturnType<typeof mock>;\n stopImmediatePropagation: ReturnType<typeof mock>;\n}\n\n// ========== Keyboard Events ==========\n\nexport function createTypedKeyboardEvent(\n type: 'keydown' | 'keyup' | 'keypress',\n options: MockKeyboardEventOptions\n): TypedMockKeyboardEvent {\n const event = new KeyboardEvent(type, {\n key: options.key,\n code: options.code ?? options.key,\n ctrlKey: options.ctrlKey ?? false,\n metaKey: options.metaKey ?? false,\n shiftKey: options.shiftKey ?? false,\n altKey: options.altKey ?? false,\n repeat: options.repeat ?? false,\n bubbles: options.bubbles ?? true,\n cancelable: options.cancelable ?? true,\n });\n\n // Create mock functions for event methods\n const preventDefaultMock = mock(() => {});\n const stopPropagationMock = mock(() => {});\n const stopImmediatePropagationMock = mock(() => {});\n\n // Override methods with mocks\n Object.defineProperties(event, {\n preventDefault: { value: preventDefaultMock, writable: true },\n stopPropagation: { value: stopPropagationMock, writable: true },\n stopImmediatePropagation: { value: stopImmediatePropagationMock, writable: true },\n });\n\n return event as TypedMockKeyboardEvent;\n}\n\n/**\n * Convenience function for creating common keyboard shortcuts\n */\nexport const KeyboardShortcuts = {\n copy: (meta = true) =>\n createTypedKeyboardEvent('keydown', {\n key: 'c',\n metaKey: meta,\n ctrlKey: !meta,\n }),\n paste: (meta = true) =>\n createTypedKeyboardEvent('keydown', {\n key: 'v',\n metaKey: meta,\n ctrlKey: !meta,\n }),\n cut: (meta = true) =>\n createTypedKeyboardEvent('keydown', {\n key: 'x',\n metaKey: meta,\n ctrlKey: !meta,\n }),\n undo: (meta = true) =>\n createTypedKeyboardEvent('keydown', {\n key: 'z',\n metaKey: meta,\n ctrlKey: !meta,\n }),\n redo: (meta = true) =>\n createTypedKeyboardEvent('keydown', {\n key: 'z',\n metaKey: meta,\n ctrlKey: !meta,\n shiftKey: true,\n }),\n delete: () => createTypedKeyboardEvent('keydown', { key: 'Backspace' }),\n enter: () => createTypedKeyboardEvent('keydown', { key: 'Enter' }),\n escape: () => createTypedKeyboardEvent('keydown', { key: 'Escape' }),\n tab: (shift = false) =>\n createTypedKeyboardEvent('keydown', { key: 'Tab', shiftKey: shift }),\n arrowUp: () => createTypedKeyboardEvent('keydown', { key: 'ArrowUp' }),\n arrowDown: () => createTypedKeyboardEvent('keydown', { key: 'ArrowDown' }),\n arrowLeft: () => createTypedKeyboardEvent('keydown', { key: 'ArrowLeft' }),\n arrowRight: () => createTypedKeyboardEvent('keydown', { key: 'ArrowRight' }),\n};\n\n// ========== Mouse Events ==========\n\nexport function createTypedMouseEvent(\n type:\n | 'click'\n | 'dblclick'\n | 'mousedown'\n | 'mouseup'\n | 'mousemove'\n | 'mouseenter'\n | 'mouseleave'\n | 'mouseover'\n | 'mouseout'\n | 'contextmenu',\n options: MockMouseEventOptions = {}\n): TypedMockMouseEvent {\n const event = new MouseEvent(type, {\n button: options.button ?? 0,\n buttons: options.buttons ?? 0,\n clientX: options.clientX ?? 0,\n clientY: options.clientY ?? 0,\n screenX: options.screenX ?? options.clientX ?? 0,\n screenY: options.screenY ?? options.clientY ?? 0,\n ctrlKey: options.ctrlKey ?? false,\n metaKey: options.metaKey ?? false,\n shiftKey: options.shiftKey ?? false,\n altKey: options.altKey ?? false,\n bubbles: options.bubbles ?? true,\n cancelable: options.cancelable ?? true,\n });\n\n const preventDefaultMock = mock(() => {});\n const stopPropagationMock = mock(() => {});\n const stopImmediatePropagationMock = mock(() => {});\n\n Object.defineProperties(event, {\n preventDefault: { value: preventDefaultMock, writable: true },\n stopPropagation: { value: stopPropagationMock, writable: true },\n stopImmediatePropagation: { value: stopImmediatePropagationMock, writable: true },\n target: { value: options.target ?? null, writable: true },\n });\n\n return event as TypedMockMouseEvent;\n}\n\n// ========== Custom Events ==========\n\nexport function createTypedCustomEvent<T = unknown>(\n type: string,\n detail?: T,\n options: { bubbles?: boolean; cancelable?: boolean } = {}\n): CustomEvent<T> {\n return new CustomEvent(type, {\n detail,\n bubbles: options.bubbles ?? true,\n cancelable: options.cancelable ?? true,\n });\n}\n\n// ========== PopState Event ==========\n\nexport function createTypedPopStateEvent(state?: unknown): PopStateEvent {\n return new PopStateEvent('popstate', { state });\n}\n\n// ========== Message Event ==========\n\nexport interface MockMessageEventOptions<T = unknown> {\n data: T;\n origin?: string;\n source?: MessageEventSource | null;\n}\n\nexport function createTypedMessageEvent<T = unknown>(\n options: MockMessageEventOptions<T>\n): MessageEvent<T> {\n return new MessageEvent('message', {\n data: options.data,\n origin: options.origin ?? 'http://localhost',\n source: options.source ?? null,\n });\n}\n\n// ========== Focus Events ==========\n\nexport function createTypedFocusEvent(\n type: 'focus' | 'blur' | 'focusin' | 'focusout',\n options: { relatedTarget?: EventTarget | null } = {}\n): FocusEvent {\n return new FocusEvent(type, {\n bubbles: type === 'focusin' || type === 'focusout',\n cancelable: false,\n relatedTarget: options.relatedTarget ?? null,\n });\n}\n\n// ========== Input Events ==========\n\nexport interface MockInputEventOptions {\n data?: string | null;\n inputType?: string;\n isComposing?: boolean;\n}\n\nexport function createTypedInputEvent(\n type: 'input' | 'beforeinput',\n options: MockInputEventOptions = {}\n): InputEvent {\n return new InputEvent(type, {\n data: options.data ?? null,\n inputType: options.inputType ?? 'insertText',\n isComposing: options.isComposing ?? false,\n bubbles: true,\n cancelable: type === 'beforeinput',\n });\n}\n", "/**\n * Store Mock Factory\n * Properly typed mock factories for Zustand stores\n */\n\nimport { mock } from 'bun:test';\nimport type { ComponentNode, JSONPage, PageData } from '../../shared/types';\nimport type { Path } from '../../shared/pathArrayUtils';\n\n// ========== FileStore Types ==========\n\nexport interface FileItem {\n name: string;\n path: string;\n type: 'page' | 'component';\n}\n\nexport interface NavigationContext {\n path: string;\n selectedTreeItem: Path | null;\n}\n\nexport interface ApiError {\n message: string;\n code?: string;\n status?: number;\n}\n\nexport interface MockFileStoreState {\n files: FileItem[];\n selectedFile: FileItem | null;\n navigationHistory: NavigationContext[];\n iframeUrl: string;\n lastError: ApiError | null;\n isRecoverable: boolean;\n pendingOperation: 'loading' | 'saving' | null;\n}\n\nexport interface MockFileStoreActions {\n setFiles: ReturnType<typeof mock>;\n setSelectedFile: ReturnType<typeof mock>;\n setIframeUrl: ReturnType<typeof mock>;\n pushNavigationHistory: ReturnType<typeof mock>;\n popNavigationHistory: ReturnType<typeof mock>;\n clearNavigationHistory: ReturnType<typeof mock>;\n setLastError: ReturnType<typeof mock>;\n setPendingOperation: ReturnType<typeof mock>;\n clearError: ReturnType<typeof mock>;\n}\n\nexport type TypedMockFileStore = MockFileStoreState & MockFileStoreActions & {\n /** Get current state (for assertions) */\n getState: () => MockFileStoreState;\n};\n\nexport function createTypedMockFileStore(\n initialState: Partial<MockFileStoreState> = {}\n): TypedMockFileStore {\n const state: MockFileStoreState = {\n files: [],\n selectedFile: null,\n navigationHistory: [],\n iframeUrl: '/',\n lastError: null,\n isRecoverable: false,\n pendingOperation: null,\n ...initialState,\n };\n\n const store: TypedMockFileStore = {\n ...state,\n setFiles: mock((files: FileItem[]) => {\n state.files = files;\n store.files = files;\n }),\n setSelectedFile: mock((file: FileItem | null) => {\n state.selectedFile = file;\n store.selectedFile = file;\n }),\n setIframeUrl: mock((url: string) => {\n state.iframeUrl = url;\n store.iframeUrl = url;\n }),\n pushNavigationHistory: mock((context: NavigationContext) => {\n state.navigationHistory.push(context);\n }),\n popNavigationHistory: mock(() => {\n return state.navigationHistory.pop() ?? null;\n }),\n clearNavigationHistory: mock(() => {\n state.navigationHistory = [];\n }),\n setLastError: mock((error: ApiError | null, isRecoverable = false) => {\n state.lastError = error;\n state.isRecoverable = isRecoverable;\n store.lastError = error;\n store.isRecoverable = isRecoverable;\n }),\n setPendingOperation: mock((op: 'loading' | 'saving' | null) => {\n state.pendingOperation = op;\n store.pendingOperation = op;\n }),\n clearError: mock(() => {\n state.lastError = null;\n state.isRecoverable = false;\n store.lastError = null;\n store.isRecoverable = false;\n }),\n getState: () => ({ ...state }),\n };\n\n return store;\n}\n\n// ========== SelectionStore Types ==========\n\nexport interface MockSelectionStoreState {\n selectedTreeItem: Path | null;\n selectedItemData: ComponentNode | null;\n clipboard: ComponentNode | null;\n hoveredPath: Path | null;\n}\n\nexport interface MockSelectionStoreActions {\n setSelectedTreeItem: ReturnType<typeof mock>;\n setSelectedItemData: ReturnType<typeof mock>;\n setClipboard: ReturnType<typeof mock>;\n setHoveredPath: ReturnType<typeof mock>;\n clearSelection: ReturnType<typeof mock>;\n copyNode: ReturnType<typeof mock>;\n pasteNode: ReturnType<typeof mock>;\n}\n\nexport type TypedMockSelectionStore = MockSelectionStoreState &\n MockSelectionStoreActions & {\n getState: () => MockSelectionStoreState;\n };\n\nexport function createTypedMockSelectionStore(\n initialState: Partial<MockSelectionStoreState> = {}\n): TypedMockSelectionStore {\n const state: MockSelectionStoreState = {\n selectedTreeItem: null,\n selectedItemData: null,\n clipboard: null,\n hoveredPath: null,\n ...initialState,\n };\n\n const store: TypedMockSelectionStore = {\n ...state,\n setSelectedTreeItem: mock((path: Path | null) => {\n state.selectedTreeItem = path;\n store.selectedTreeItem = path;\n }),\n setSelectedItemData: mock((data: ComponentNode | null) => {\n state.selectedItemData = data;\n store.selectedItemData = data;\n }),\n setClipboard: mock((node: ComponentNode | null) => {\n state.clipboard = node;\n store.clipboard = node;\n }),\n setHoveredPath: mock((path: Path | null) => {\n state.hoveredPath = path;\n store.hoveredPath = path;\n }),\n clearSelection: mock(() => {\n state.selectedTreeItem = null;\n state.selectedItemData = null;\n store.selectedTreeItem = null;\n store.selectedItemData = null;\n }),\n copyNode: mock(() => {\n if (state.selectedItemData) {\n state.clipboard = structuredClone(state.selectedItemData);\n store.clipboard = state.clipboard;\n }\n }),\n pasteNode: mock(() => {\n return state.clipboard ? structuredClone(state.clipboard) : null;\n }),\n getState: () => ({ ...state }),\n };\n\n return store;\n}\n\n// ========== NodeStore Types ==========\n\nexport interface MockNodeStoreState {\n pageData: PageData | null;\n isDirty: boolean;\n}\n\nexport interface MockNodeStoreActions {\n setPageData: ReturnType<typeof mock>;\n updateNode: ReturnType<typeof mock>;\n deleteNode: ReturnType<typeof mock>;\n addNode: ReturnType<typeof mock>;\n moveNode: ReturnType<typeof mock>;\n markDirty: ReturnType<typeof mock>;\n markClean: ReturnType<typeof mock>;\n}\n\nexport type TypedMockNodeStore = MockNodeStoreState &\n MockNodeStoreActions & {\n getState: () => MockNodeStoreState;\n };\n\nexport function createTypedMockNodeStore(\n initialState: Partial<MockNodeStoreState> = {}\n): TypedMockNodeStore {\n const state: MockNodeStoreState = {\n pageData: null,\n isDirty: false,\n ...initialState,\n };\n\n const store: TypedMockNodeStore = {\n ...state,\n setPageData: mock((data: PageData | null) => {\n state.pageData = data;\n store.pageData = data;\n state.isDirty = false;\n store.isDirty = false;\n }),\n updateNode: mock((path: Path, updates: Partial<ComponentNode>) => {\n state.isDirty = true;\n store.isDirty = true;\n }),\n deleteNode: mock((path: Path) => {\n state.isDirty = true;\n store.isDirty = true;\n }),\n addNode: mock((parentPath: Path, node: ComponentNode, index?: number) => {\n state.isDirty = true;\n store.isDirty = true;\n }),\n moveNode: mock((fromPath: Path, toPath: Path) => {\n state.isDirty = true;\n store.isDirty = true;\n }),\n markDirty: mock(() => {\n state.isDirty = true;\n store.isDirty = true;\n }),\n markClean: mock(() => {\n state.isDirty = false;\n store.isDirty = false;\n }),\n getState: () => ({ ...state }),\n };\n\n return store;\n}\n\n// ========== ComponentStore Types ==========\n\nexport interface MockComponentStoreState {\n components: Map<string, unknown>;\n loading: boolean;\n}\n\nexport interface MockComponentStoreActions {\n setComponents: ReturnType<typeof mock>;\n getComponent: ReturnType<typeof mock>;\n hasComponent: ReturnType<typeof mock>;\n setLoading: ReturnType<typeof mock>;\n}\n\nexport type TypedMockComponentStore = MockComponentStoreState &\n MockComponentStoreActions & {\n getState: () => MockComponentStoreState;\n };\n\nexport function createTypedMockComponentStore(\n initialState: Partial<MockComponentStoreState> = {}\n): TypedMockComponentStore {\n const state: MockComponentStoreState = {\n components: new Map(),\n loading: false,\n ...initialState,\n };\n\n const store: TypedMockComponentStore = {\n ...state,\n setComponents: mock((components: Map<string, unknown>) => {\n state.components = components;\n store.components = components;\n }),\n getComponent: mock((name: string) => {\n return state.components.get(name);\n }),\n hasComponent: mock((name: string) => {\n return state.components.has(name);\n }),\n setLoading: mock((loading: boolean) => {\n state.loading = loading;\n store.loading = loading;\n }),\n getState: () => ({ ...state }),\n };\n\n return store;\n}\n\n// ========== EditorServices Mock ==========\n\nexport interface TypedMockEditorServices {\n fileService: {\n loadAllFiles: ReturnType<typeof mock>;\n loadFileData: ReturnType<typeof mock>;\n saveFileData: ReturnType<typeof mock>;\n saveComponentJS: ReturnType<typeof mock>;\n saveComponentCSS: ReturnType<typeof mock>;\n };\n nodeService: {\n addElement: ReturnType<typeof mock>;\n deleteElement: ReturnType<typeof mock>;\n moveElement: ReturnType<typeof mock>;\n copyNode: ReturnType<typeof mock>;\n pasteNode: ReturnType<typeof mock>;\n };\n componentService: {\n loadComponentDefinition: ReturnType<typeof mock>;\n createFromSelection: ReturnType<typeof mock>;\n };\n fileStoreService: {\n loadFiles: ReturnType<typeof mock>;\n selectFile: ReturnType<typeof mock>;\n reloadSelectedFilePreservingSelection: ReturnType<typeof mock>;\n };\n}\n\nexport function createTypedMockEditorServices(): TypedMockEditorServices {\n return {\n fileService: {\n loadAllFiles: mock(() =>\n Promise.resolve({ pages: [], components: [] })\n ),\n loadFileData: mock(() =>\n Promise.resolve({ component: { type: 'div', children: [] } })\n ),\n saveFileData: mock(() => Promise.resolve()),\n saveComponentJS: mock(() => Promise.resolve()),\n saveComponentCSS: mock(() => Promise.resolve()),\n },\n nodeService: {\n addElement: mock(() => Promise.resolve()),\n deleteElement: mock(() => Promise.resolve()),\n moveElement: mock(() => Promise.resolve()),\n copyNode: mock(() => Promise.resolve()),\n pasteNode: mock(() => Promise.resolve()),\n },\n componentService: {\n loadComponentDefinition: mock(() => Promise.resolve()),\n createFromSelection: mock(() => Promise.resolve()),\n },\n fileStoreService: {\n loadFiles: mock(() => Promise.resolve()),\n selectFile: mock(() =>\n Promise.resolve({ component: { type: 'div', children: [] } })\n ),\n reloadSelectedFilePreservingSelection: mock(() =>\n Promise.resolve({ component: { type: 'div', children: [] } })\n ),\n },\n };\n}\n", "/**\n * Console Mock Factory\n * Utilities for mocking and spying on console methods\n */\n\nimport { mock } from 'bun:test';\n\n// ========== Types ==========\n\nexport type ConsoleMethods = 'log' | 'warn' | 'error' | 'info' | 'debug' | 'trace';\n\nexport interface TypedConsoleSpy {\n log: ReturnType<typeof mock>;\n warn: ReturnType<typeof mock>;\n error: ReturnType<typeof mock>;\n info: ReturnType<typeof mock>;\n debug: ReturnType<typeof mock>;\n trace: ReturnType<typeof mock>;\n /** Restore original console methods */\n restore: () => void;\n /** Get all calls to a specific method */\n getCalls: (method: ConsoleMethods) => unknown[][];\n /** Check if a method was called with specific arguments */\n wasCalledWith: (method: ConsoleMethods, ...args: unknown[]) => boolean;\n /** Clear all call history */\n clearCalls: () => void;\n}\n\n// ========== Main Factory ==========\n\nexport function createTypedConsoleSpy(): TypedConsoleSpy {\n const originalConsole = {\n log: console.log,\n warn: console.warn,\n error: console.error,\n info: console.info,\n debug: console.debug,\n trace: console.trace,\n };\n\n const mocks = {\n log: mock((...args: unknown[]) => {}),\n warn: mock((...args: unknown[]) => {}),\n error: mock((...args: unknown[]) => {}),\n info: mock((...args: unknown[]) => {}),\n debug: mock((...args: unknown[]) => {}),\n trace: mock((...args: unknown[]) => {}),\n };\n\n // Replace console methods\n console.log = mocks.log;\n console.warn = mocks.warn;\n console.error = mocks.error;\n console.info = mocks.info;\n console.debug = mocks.debug;\n console.trace = mocks.trace;\n\n return {\n ...mocks,\n restore: () => {\n console.log = originalConsole.log;\n console.warn = originalConsole.warn;\n console.error = originalConsole.error;\n console.info = originalConsole.info;\n console.debug = originalConsole.debug;\n console.trace = originalConsole.trace;\n },\n getCalls: (method: ConsoleMethods) => {\n const mockFn = mocks[method] as unknown as { mock: { calls: unknown[][] } };\n return mockFn.mock?.calls || [];\n },\n wasCalledWith: (method: ConsoleMethods, ...args: unknown[]) => {\n const calls = mocks[method] as unknown as { mock: { calls: unknown[][] } };\n return (calls.mock?.calls || []).some((call) =>\n args.every((arg, i) => {\n if (arg instanceof RegExp && typeof call[i] === 'string') {\n return arg.test(call[i] as string);\n }\n return call[i] === arg;\n })\n );\n },\n clearCalls: () => {\n for (const method of Object.values(mocks)) {\n (method as unknown as { mock: { calls: unknown[][] } }).mock.calls = [];\n }\n },\n };\n}\n\n// ========== Convenience Functions ==========\n\n/**\n * Suppress all console output during test execution\n * Returns a cleanup function to restore console\n */\nexport function suppressConsole(): () => void {\n const spy = createTypedConsoleSpy();\n return spy.restore;\n}\n\n/**\n * Capture console output for specific methods only\n */\nexport function captureConsole(\n methods: ConsoleMethods[]\n): TypedConsoleSpy & { only: ConsoleMethods[] } {\n const spy = createTypedConsoleSpy();\n\n // Restore methods we don't want to capture\n const allMethods: ConsoleMethods[] = ['log', 'warn', 'error', 'info', 'debug', 'trace'];\n for (const method of allMethods) {\n if (!methods.includes(method)) {\n // Restore this method to original\n const original = {\n log: console.log,\n warn: console.warn,\n error: console.error,\n info: console.info,\n debug: console.debug,\n trace: console.trace,\n };\n // The spy already replaced these, so we get the mocked version\n // We need to set them back to the pre-spy originals\n }\n }\n\n return { ...spy, only: methods };\n}\n\n/**\n * Create a console spy that passes through to original console\n * Useful when you want to see output while also capturing it\n */\nexport function createPassthroughConsoleSpy(): TypedConsoleSpy {\n const originalConsole = {\n log: console.log,\n warn: console.warn,\n error: console.error,\n info: console.info,\n debug: console.debug,\n trace: console.trace,\n };\n\n const mocks = {\n log: mock((...args: unknown[]) => {\n originalConsole.log(...args);\n }),\n warn: mock((...args: unknown[]) => {\n originalConsole.warn(...args);\n }),\n error: mock((...args: unknown[]) => {\n originalConsole.error(...args);\n }),\n info: mock((...args: unknown[]) => {\n originalConsole.info(...args);\n }),\n debug: mock((...args: unknown[]) => {\n originalConsole.debug(...args);\n }),\n trace: mock((...args: unknown[]) => {\n originalConsole.trace(...args);\n }),\n };\n\n // Replace console methods\n console.log = mocks.log;\n console.warn = mocks.warn;\n console.error = mocks.error;\n console.info = mocks.info;\n console.debug = mocks.debug;\n console.trace = mocks.trace;\n\n return {\n ...mocks,\n restore: () => {\n console.log = originalConsole.log;\n console.warn = originalConsole.warn;\n console.error = originalConsole.error;\n console.info = originalConsole.info;\n console.debug = originalConsole.debug;\n console.trace = originalConsole.trace;\n },\n getCalls: (method: ConsoleMethods) => {\n const mockFn = mocks[method] as unknown as { mock: { calls: unknown[][] } };\n return mockFn.mock?.calls || [];\n },\n wasCalledWith: (method: ConsoleMethods, ...args: unknown[]) => {\n const calls = mocks[method] as unknown as { mock: { calls: unknown[][] } };\n return (calls.mock?.calls || []).some((call) =>\n args.every((arg, i) => call[i] === arg)\n );\n },\n clearCalls: () => {\n for (const method of Object.values(mocks)) {\n (method as unknown as { mock: { calls: unknown[][] } }).mock.calls = [];\n }\n },\n };\n}\n", "/**\n * Server Mock Factory\n * Properly typed mock factories for server-side services\n */\n\nimport { mock } from 'bun:test';\nimport type { PageProvider, ComponentProvider } from '../../shared/interfaces/contentProvider';\nimport type { ComponentServiceFs, ComponentLoader } from '../../server/services/componentService';\nimport type { ComponentDefinition } from '../../shared/types';\n\n// ========== PageProvider Mock ==========\n\nexport interface TypedMockPageProvider extends PageProvider {\n loadAll: ReturnType<typeof mock>;\n get: ReturnType<typeof mock>;\n save: ReturnType<typeof mock>;\n delete: ReturnType<typeof mock>;\n exists: ReturnType<typeof mock>;\n // Internal state for assertions\n _pages: Record<string, string>;\n}\n\n/**\n * Create a typed mock PageProvider\n * @param initialPages - Initial page content map (path -> content)\n */\nexport function createTypedMockPageProvider(\n initialPages: Record<string, string> = {}\n): TypedMockPageProvider {\n const pages = { ...initialPages };\n\n const provider: TypedMockPageProvider = {\n loadAll: mock(async () => new Map(Object.entries(pages))),\n get: mock(async (path: string) => pages[path] ?? null),\n save: mock(async (path: string, content: string) => {\n pages[path] = content;\n }),\n delete: mock(async (path: string) => {\n delete pages[path];\n }),\n exists: mock(async (path: string) => path in pages),\n _pages: pages,\n };\n\n return provider;\n}\n\n// ========== ComponentProvider Mock ==========\n\nexport interface TypedMockComponentProvider extends ComponentProvider {\n loadAll: ReturnType<typeof mock>;\n get: ReturnType<typeof mock>;\n getJS: ReturnType<typeof mock>;\n getCSS: ReturnType<typeof mock>;\n save: ReturnType<typeof mock>;\n // Internal state for assertions\n _components: Map<string, ComponentDefinition>;\n _js: Map<string, string>;\n _css: Map<string, string>;\n}\n\n/**\n * Create a typed mock ComponentProvider\n */\nexport function createTypedMockComponentProvider(\n initialComponents: Map<string, ComponentDefinition> = new Map()\n): TypedMockComponentProvider {\n const components = new Map(initialComponents);\n const js = new Map<string, string>();\n const css = new Map<string, string>();\n\n const provider: TypedMockComponentProvider = {\n loadAll: mock(async () => new Map(components)),\n get: mock(async (name: string) => components.get(name) ?? null),\n getJS: mock(async (name: string) => js.get(name) ?? null),\n getCSS: mock(async (name: string) => css.get(name) ?? null),\n save: mock(async (name: string, definition: ComponentDefinition) => {\n components.set(name, definition);\n }),\n _components: components,\n _js: js,\n _css: css,\n };\n\n return provider;\n}\n\n// ========== ComponentServiceFs Mock ==========\n\nexport interface TypedMockComponentServiceFs extends ComponentServiceFs {\n writeFile: ReturnType<typeof mock>;\n readFile: ReturnType<typeof mock>;\n // Internal state for assertions\n _files: Record<string, string>;\n}\n\n/**\n * Create a typed mock file system for ComponentService\n */\nexport function createTypedMockComponentServiceFs(\n initialFiles: Record<string, string> = {}\n): TypedMockComponentServiceFs {\n const files = { ...initialFiles };\n\n const fs: TypedMockComponentServiceFs = {\n writeFile: mock(async (path: string, content: string) => {\n files[path] = content;\n }),\n readFile: mock(async (path: string) => files[path] ?? null),\n _files: files,\n };\n\n return fs;\n}\n\n// ========== ComponentLoader Mock ==========\n\nexport interface TypedMockComponentLoader extends ComponentLoader {\n loadDirectory: ReturnType<typeof mock>;\n loadFile: ReturnType<typeof mock>;\n // Internal state for assertions\n _components: Map<string, ComponentDefinition>;\n}\n\n/**\n * Create a typed mock component loader\n */\nexport function createTypedMockComponentLoader(\n components: Map<string, ComponentDefinition> = new Map()\n): TypedMockComponentLoader {\n const storedComponents = new Map(components);\n\n const loader: TypedMockComponentLoader = {\n loadDirectory: mock(async () => new Map(storedComponents)),\n loadFile: mock(async () => null),\n _components: storedComponents,\n };\n\n return loader;\n}\n\n// ========== Full-stack file system mock ==========\n\nexport interface TypedMockFs {\n readFile: ReturnType<typeof mock>;\n writeFile: ReturnType<typeof mock>;\n unlink: ReturnType<typeof mock>;\n readdir: ReturnType<typeof mock>;\n stat: ReturnType<typeof mock>;\n access: ReturnType<typeof mock>;\n mkdir: ReturnType<typeof mock>;\n rm: ReturnType<typeof mock>;\n // Internal state for assertions\n _files: Record<string, string>;\n}\n\n/**\n * Create a comprehensive mock file system (similar to fs/promises)\n * @param initialFiles - Initial file content map (path -> content)\n */\nexport function createTypedMockFs(\n initialFiles: Record<string, string> = {}\n): TypedMockFs {\n const files = { ...initialFiles };\n\n const makeError = (code: string, message: string) => {\n const error = new Error(message);\n (error as NodeJS.ErrnoException).code = code;\n return error;\n };\n\n const fs: TypedMockFs = {\n readFile: mock(async (path: string) => {\n if (path in files) {\n return files[path];\n }\n throw makeError('ENOENT', `ENOENT: no such file or directory, open '${path}'`);\n }),\n writeFile: mock(async (path: string, content: string) => {\n files[path] = content;\n }),\n unlink: mock(async (path: string) => {\n if (!(path in files)) {\n throw makeError('ENOENT', `ENOENT: no such file or directory, unlink '${path}'`);\n }\n delete files[path];\n }),\n readdir: mock(async (dir: string) => {\n const normalizedDir = dir.endsWith('/') ? dir : dir + '/';\n const entries = new Set<string>();\n for (const path of Object.keys(files)) {\n if (path.startsWith(normalizedDir)) {\n const relativePath = path.slice(normalizedDir.length);\n const firstSegment = relativePath.split('/')[0];\n if (firstSegment) {\n entries.add(firstSegment);\n }\n }\n }\n return Array.from(entries);\n }),\n stat: mock(async (path: string) => ({\n isDirectory: () => !path.includes('.') || path.endsWith('/'),\n isFile: () => path.includes('.') && !path.endsWith('/'),\n })),\n access: mock(async (path: string) => {\n if (!(path in files)) {\n throw makeError('ENOENT', `ENOENT: no such file or directory, access '${path}'`);\n }\n }),\n mkdir: mock(async () => {}),\n rm: mock(async (path: string) => {\n for (const filePath of Object.keys(files)) {\n if (filePath.startsWith(path)) {\n delete files[filePath];\n }\n }\n }),\n _files: files,\n };\n\n return fs;\n}\n", "/**\n * Async Testing Helpers\n * Utilities for handling async operations in tests\n */\n\nimport { mock } from 'bun:test';\n\n/**\n * Wait for a condition to be true\n * @param condition - Function that returns boolean or Promise<boolean>\n * @param options - timeout and interval in ms\n */\nexport async function waitFor(\n condition: () => boolean | Promise<boolean>,\n options: { timeout?: number; interval?: number } = {}\n): Promise<void> {\n const { timeout = 5000, interval = 50 } = options;\n const start = Date.now();\n\n while (Date.now() - start < timeout) {\n const result = await condition();\n if (result) return;\n await new Promise((resolve) => setTimeout(resolve, interval));\n }\n\n throw new Error(`waitFor timed out after ${timeout}ms`);\n}\n\n/**\n * Wait for a mock function to be called\n * @param mockFn - The mock function to wait for\n * @param options - timeout and minimum call count\n */\nexport async function waitForMockCall(\n mockFn: ReturnType<typeof mock>,\n options: { timeout?: number; callCount?: number } = {}\n): Promise<void> {\n const { timeout = 5000, callCount = 1 } = options;\n\n await waitFor(\n () => {\n const calls = (mockFn as unknown as { mock: { calls: unknown[][] } }).mock\n ?.calls;\n return (calls?.length ?? 0) >= callCount;\n },\n { timeout }\n );\n}\n\n/**\n * Flush all pending promises (microtask queue)\n */\nexport async function flushPromises(): Promise<void> {\n await new Promise((resolve) => setTimeout(resolve, 0));\n}\n\n/**\n * Flush multiple times to handle nested promises\n * @param count - Number of flush cycles\n */\nexport async function flushPromisesDeep(count: number = 3): Promise<void> {\n for (let i = 0; i < count; i++) {\n await flushPromises();\n }\n}\n\n/**\n * Run a function and wait for its async effects\n * Similar to React's act() but framework-agnostic\n */\nexport async function actAsync(fn: () => Promise<void> | void): Promise<void> {\n await fn();\n await flushPromises();\n}\n\n/**\n * Wait for a specific amount of time\n * @param ms - Milliseconds to wait\n */\nexport function wait(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Create a deferred promise that can be resolved/rejected externally\n */\nexport interface Deferred<T> {\n promise: Promise<T>;\n resolve: (value: T) => void;\n reject: (reason?: unknown) => void;\n}\n\nexport function createDeferred<T>(): Deferred<T> {\n let resolve!: (value: T) => void;\n let reject!: (reason?: unknown) => void;\n\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n return { promise, resolve, reject };\n}\n\n/**\n * Wait for an element to appear in the DOM\n * @param selector - CSS selector\n * @param options - container and timeout\n */\nexport async function waitForElement(\n selector: string,\n options: { container?: Element; timeout?: number } = {}\n): Promise<Element> {\n const { container = document, timeout = 5000 } = options;\n\n await waitFor(\n () => container.querySelector(selector) !== null,\n { timeout }\n );\n\n const element = container.querySelector(selector);\n if (!element) {\n throw new Error(`Element not found: ${selector}`);\n }\n\n return element;\n}\n\n/**\n * Wait for an element to be removed from the DOM\n * @param selector - CSS selector\n * @param options - container and timeout\n */\nexport async function waitForElementToBeRemoved(\n selector: string,\n options: { container?: Element; timeout?: number } = {}\n): Promise<void> {\n const { container = document, timeout = 5000 } = options;\n\n await waitFor(\n () => container.querySelector(selector) === null,\n { timeout }\n );\n}\n\n/**\n * Retry a function until it succeeds or times out\n * @param fn - Function to retry\n * @param options - max attempts and delay between attempts\n */\nexport async function retry<T>(\n fn: () => T | Promise<T>,\n options: { maxAttempts?: number; delay?: number } = {}\n): Promise<T> {\n const { maxAttempts = 3, delay = 100 } = options;\n\n let lastError: unknown;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error;\n if (attempt < maxAttempts) {\n await wait(delay);\n }\n }\n }\n\n throw lastError;\n}\n\n/**\n * Create a function that resolves after being called N times\n * Useful for waiting for multiple async operations\n */\nexport function createCallCounter(\n targetCount: number\n): { increment: () => void; promise: Promise<void> } {\n let count = 0;\n let resolve!: () => void;\n\n const promise = new Promise<void>((res) => {\n resolve = res;\n });\n\n return {\n increment: () => {\n count++;\n if (count >= targetCount) {\n resolve();\n }\n },\n promise,\n };\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * Mock Factories\n * Factory functions for creating mock objects used in tests\n */\n\nimport { mock } from 'bun:test';\nimport type { ComponentRegistry } from '../client/componentRegistry';\nimport type { ComponentNode, ComponentDefinition, JSONPage, PageDataWithComponent } from '../shared/types';\nimport type { ElementRegistry } from '../client/elementRegistry';\n\n// HighlightManager interface (module was removed, keeping type for mock compatibility)\ninterface HighlightManager {\n highlightElements: (paths: string[]) => void;\n setHoveredElement: (path: string | null) => void;\n clearHover: () => void;\n clearAll: () => void;\n}\nimport { NODE_TYPE } from '../shared/constants';\n\n/**\n * Create a mock ComponentRegistry\n */\nexport function createMockComponentRegistry(): ComponentRegistry {\n return {\n has: mock(() => false),\n get: mock(() => undefined),\n set: mock(() => {}),\n delete: mock(() => {}),\n clear: mock(() => {}),\n getAll: mock(() => ({})),\n } as any;\n}\n\n/**\n * Create a mock ComponentNode\n */\nexport function createMockComponentNode(overrides?: Partial<ComponentNode>): ComponentNode {\n return {\n type: NODE_TYPE.NODE,\n tag: 'div',\n children: [],\n ...overrides,\n } as ComponentNode;\n}\n\n/**\n * Create a mock ComponentDefinition\n */\nexport function createMockComponentDefinition(\n _name: string,\n overrides?: Partial<ComponentDefinition>,\n): ComponentDefinition {\n return {\n component: {\n interface: {},\n structure: {\n type: NODE_TYPE.NODE,\n tag: 'div',\n children: [],\n },\n },\n ...overrides,\n } as ComponentDefinition;\n}\n\n/**\n * Create a mock PageData\n */\nexport function createMockPageData(overrides?: Partial<JSONPage>): JSONPage {\n return {\n meta: {\n title: 'Test Page',\n },\n root: {\n type: NODE_TYPE.NODE,\n tag: 'div',\n children: [],\n },\n ...overrides,\n } as JSONPage;\n}\n\n/**\n * Create a mock PageDataWithComponent\n */\nexport function createMockPageDataWithComponent(overrides?: Partial<PageDataWithComponent>): PageDataWithComponent {\n return {\n component: {\n interface: {},\n structure: {\n type: NODE_TYPE.NODE,\n tag: 'div',\n children: [],\n },\n javascript: '',\n css: '',\n ...overrides?.component,\n },\n } as PageDataWithComponent;\n}\n\n/**\n * Create a mock HighlightManager\n */\nexport function createMockHighlightManager(): HighlightManager {\n return {\n highlightElements: mock(() => {}),\n setHoveredElement: mock(() => {}),\n clearHover: mock(() => {}),\n clearAll: mock(() => {}),\n } as any;\n}\n\n/**\n * Create a mock ElementRegistry\n */\nexport function createMockElementRegistry(): ElementRegistry {\n return {\n register: mock(() => {}),\n get: mock(() => null),\n getAllComponentNames: mock(() => []),\n getComponentRootPaths: mock(() => []),\n getComponentProps: mock(() => undefined),\n clear: mock(() => {}),\n } as any;\n}\n\n/**\n * Create a mock EditorStore\n */\nexport function createMockEditorStore() {\n return {\n files: [],\n selectedFile: null,\n pageData: null,\n selectedTreeItem: null,\n setFiles: mock(() => {}),\n setSelectedFile: mock(() => {}),\n setPageData: mock(() => {}),\n setSelectedTreeItem: mock(() => {}),\n updateProp: mock(() => Promise.resolve()),\n // Async file operations are now in editorServices.fileStoreService\n } as any;\n}\n\n/**\n * Create a mock editorServices object with all services mocked\n */\nexport function createMockEditorServices() {\n return {\n fileService: {\n loadAllFiles: mock(() => Promise.resolve({ pages: [], components: [] })),\n loadFileData: mock(() => Promise.resolve({ component: { type: 'div', children: [] } })),\n saveFileData: mock(() => Promise.resolve()),\n saveComponentJS: mock(() => Promise.resolve()),\n saveComponentCSS: mock(() => Promise.resolve()),\n },\n nodeService: {\n addElement: mock(() => Promise.resolve()),\n deleteElement: mock(() => Promise.resolve()),\n moveElement: mock(() => Promise.resolve()),\n },\n componentService: {\n loadComponentDefinition: mock(() => Promise.resolve()),\n createFromSelection: mock(() => Promise.resolve()),\n },\n fileStoreService: {\n loadFiles: mock(() => Promise.resolve()),\n selectFile: mock(() => Promise.resolve({ component: { type: 'div', children: [] } })),\n reloadSelectedFilePreservingSelection: mock(() => Promise.resolve({ component: { type: 'div', children: [] } })),\n },\n } as any;\n}\n\n/**\n * Create a mock Window object\n */\nexport function createMockWindow(): Window {\n return {\n location: {\n href: 'http://localhost/',\n pathname: '/',\n search: '',\n hash: '',\n assign: mock(() => {}),\n replace: mock(() => {}),\n reload: mock(() => {}),\n },\n history: {\n pushState: mock(() => {}),\n replaceState: mock(() => {}),\n go: mock(() => {}),\n back: mock(() => {}),\n forward: mock(() => {}),\n length: 1,\n state: null,\n scrollRestoration: 'auto',\n },\n addEventListener: mock(() => {}),\n removeEventListener: mock(() => {}),\n dispatchEvent: mock(() => true),\n } as unknown as Window;\n}\n\n/**\n * Create a mock Document object\n */\nexport function createMockDocument(): Document {\n return {\n createElement: mock(() => createMockHTMLElement()),\n getElementById: mock(() => null),\n querySelector: mock(() => null),\n querySelectorAll: mock(() => []),\n addEventListener: mock(() => {}),\n removeEventListener: mock(() => {}),\n dispatchEvent: mock(() => true),\n } as unknown as Document;\n}\n\n/**\n * Create a mock HTMLElement\n */\nexport function createMockHTMLElement(): HTMLElement {\n return {\n tagName: 'DIV',\n id: '',\n className: '',\n textContent: '',\n innerHTML: '',\n style: {} as CSSStyleDeclaration,\n getAttribute: mock(() => null),\n setAttribute: mock(() => {}),\n removeAttribute: mock(() => {}),\n addEventListener: mock(() => {}),\n removeEventListener: mock(() => {}),\n dispatchEvent: mock(() => true),\n getBoundingClientRect: mock(() => ({\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n width: 0,\n height: 0,\n x: 0,\n y: 0,\n toJSON: mock(() => ({})),\n })),\n } as unknown as HTMLElement;\n}\n\n/**\n * Create a mock PageProvider for testing PageService\n * @param pages - Initial page content map (path -> content)\n */\nexport function createMockPageProvider(pages: Record<string, string> = {}) {\n const pageStore = { ...pages };\n\n return {\n loadAll: mock(async () => {\n return new Map(Object.entries(pageStore));\n }),\n get: mock(async (path: string) => {\n return pageStore[path] ?? null;\n }),\n save: mock(async (path: string, content: string) => {\n pageStore[path] = content;\n }),\n delete: mock(async (path: string) => {\n delete pageStore[path];\n }),\n exists: mock(async (path: string) => {\n return path in pageStore;\n }),\n // Expose internal store for test assertions\n _pages: pageStore,\n };\n}\n\n/**\n * Create a mock fs/promises module for testing file operations\n * @param files - Initial file content map (path -> content)\n */\nexport function createMockFs(files: Record<string, string> = {}) {\n const fileSystem = { ...files };\n\n return {\n readFile: mock(async (path: string, _encoding?: string) => {\n if (path in fileSystem) {\n return fileSystem[path];\n }\n const error = new Error(`ENOENT: no such file or directory, open '${path}'`);\n (error as any).code = 'ENOENT';\n throw error;\n }),\n writeFile: mock(async (path: string, content: string) => {\n fileSystem[path] = content;\n }),\n unlink: mock(async (path: string) => {\n if (!(path in fileSystem)) {\n const error = new Error(`ENOENT: no such file or directory, unlink '${path}'`);\n (error as any).code = 'ENOENT';\n throw error;\n }\n delete fileSystem[path];\n }),\n readdir: mock(async (dir: string) => {\n const normalizedDir = dir.endsWith('/') ? dir : `${dir}/`;\n const entries = new Set<string>();\n for (const path of Object.keys(fileSystem)) {\n if (path.startsWith(normalizedDir)) {\n const relativePath = path.slice(normalizedDir.length);\n const firstSegment = relativePath.split('/')[0];\n if (firstSegment) {\n entries.add(firstSegment);\n }\n }\n }\n return Array.from(entries);\n }),\n stat: mock(async (path: string) => ({\n isDirectory: () => !path.includes('.') || path.endsWith('/'),\n isFile: () => path.includes('.') && !path.endsWith('/'),\n })),\n access: mock(async (path: string) => {\n if (!(path in fileSystem)) {\n const error = new Error(`ENOENT: no such file or directory, access '${path}'`);\n (error as any).code = 'ENOENT';\n throw error;\n }\n }),\n mkdir: mock(async () => {}),\n rm: mock(async (path: string) => {\n // Remove all files under this path\n for (const filePath of Object.keys(fileSystem)) {\n if (filePath.startsWith(path)) {\n delete fileSystem[filePath];\n }\n }\n }),\n // Expose internal file system for test assertions\n _files: fileSystem,\n };\n}\n", "/**\n * Test Helpers\n * Helper functions for common test scenarios\n */\n\nimport type { ComponentNode } from '../shared/types';\nimport { NODE_TYPE } from '../shared/constants';\n\n/**\n * Create a simple DOM mock for testing\n */\nexport function setupDOMMock() {\n const mockElement = {\n id: '',\n textContent: '',\n style: {} as CSSStyleDeclaration,\n remove: () => {},\n appendChild: () => {},\n addEventListener: () => {},\n removeEventListener: () => {},\n };\n\n global.document = {\n getElementById: () => null,\n createElement: () => mockElement as any,\n head: {\n appendChild: () => {},\n } as any,\n body: {\n appendChild: () => {},\n } as any,\n } as any;\n\n global.window = {\n location: {\n pathname: '/',\n href: 'http://localhost:3000/',\n },\n innerWidth: 1920,\n addEventListener: () => {},\n removeEventListener: () => {},\n } as any;\n}\n\n/**\n * Create a simple tree structure for testing\n */\nexport function createTestTree(depth: number = 2, childrenPerNode: number = 2): ComponentNode {\n if (depth === 0) {\n return {\n type: NODE_TYPE.NODE,\n tag: 'div',\n children: [],\n };\n }\n\n const children: ComponentNode[] = [];\n for (let i = 0; i < childrenPerNode; i++) {\n children.push(createTestTree(depth - 1, childrenPerNode));\n }\n\n return {\n type: NODE_TYPE.NODE,\n tag: 'div',\n children,\n };\n}\n\n/**\n * Wait for async operations to complete\n */\nexport function wait(ms: number = 0): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Create a mock fetch response\n */\nexport function createMockFetchResponse(data: any, options: { ok?: boolean; status?: number } = {}) {\n return Promise.resolve({\n ok: options.ok !== false,\n status: options.status || 200,\n json: () => Promise.resolve(data),\n text: () => Promise.resolve(typeof data === 'string' ? data : JSON.stringify(data)),\n } as Response);\n}\n", "/**\n * Test Utilities - Mock Factories\n * Factory functions for creating common test objects\n */\n\nimport type { Path } from '../shared/pathArrayUtils';\n\n/**\n * Create a mock HTMLElement for testing\n */\nexport function createMockElement(overrides: Partial<HTMLElement> = {}): HTMLElement {\n const element = document.createElement('div');\n element.scrollIntoView = (() => {}) as any;\n return Object.assign(element, overrides) as HTMLElement;\n}\n\n/**\n * Create a mock component structure for testing\n */\nexport function createMockComponentStructure(overrides: Partial<any> = {}): any {\n return {\n type: 'div',\n props: {\n className: 'test-component',\n },\n children: [],\n ...overrides,\n };\n}\n\n/**\n * Create a mock path for testing\n */\nexport function createMockPath(depth: number = 2): Path {\n return Array.from({ length: depth }, (_, i) => i);\n}\n\n/**\n * Create mock component props\n */\nexport function createMockComponentProps(overrides: Record<string, unknown> = {}): Record<string, unknown> {\n return {\n variant: 'primary',\n size: 'medium',\n disabled: false,\n ...overrides,\n };\n}\n\n/**\n * Create mock page structure\n */\nexport function createMockPageStructure(overrides: Partial<any> = {}): any {\n return {\n root: {\n type: 'div',\n props: {\n className: 'page-container',\n },\n children: [],\n },\n components: {},\n ...overrides,\n };\n}\n\n/**\n * Create test container for DOM tests\n */\nexport function createTestContainer(): HTMLElement {\n const container = document.createElement('div');\n container.id = `test-container-${Date.now()}`;\n document.body.appendChild(container);\n return container;\n}\n\n/**\n * Clean up test container\n */\nexport function cleanupTestContainer(container: HTMLElement): void {\n try {\n document.body.removeChild(container);\n } catch (_e) {\n // Already removed\n }\n}\n", "/**\n * DOM Mock Factory\n * Properly typed mock factories for Window, Document, and HTMLElement\n */\n\nimport { mock } from 'bun:test';\n\n// ========== Types ==========\n\nexport interface MockDOMRect {\n top: number;\n left: number;\n right: number;\n bottom: number;\n width: number;\n height: number;\n x: number;\n y: number;\n toJSON: () => object;\n}\n\nexport interface MockHTMLElementOptions {\n tagName?: string;\n id?: string;\n className?: string;\n textContent?: string;\n innerHTML?: string;\n style?: Partial<CSSStyleDeclaration>;\n dataset?: Record<string, string>;\n attributes?: Record<string, string>;\n}\n\nexport interface MockWindowOptions {\n location?: Partial<Location>;\n innerWidth?: number;\n innerHeight?: number;\n}\n\nexport interface MockDocumentOptions {\n elements?: Map<string, HTMLElement>;\n}\n\n// ========== DOMRect ==========\n\nexport function createMockDOMRect(overrides?: Partial<MockDOMRect>): DOMRect {\n return {\n top: 0,\n left: 0,\n right: 100,\n bottom: 100,\n width: 100,\n height: 100,\n x: 0,\n y: 0,\n toJSON: () => ({}),\n ...overrides,\n } as DOMRect;\n}\n\n// ========== CSSStyleDeclaration ==========\n\nexport function createMockCSSStyleDeclaration(initial?: Partial<CSSStyleDeclaration>): CSSStyleDeclaration {\n const styles: Record<string, string> = {};\n\n // Copy initial values\n if (initial) {\n for (const [key, value] of Object.entries(initial)) {\n if (typeof value === 'string') {\n styles[key] = value;\n }\n }\n }\n\n return new Proxy(styles as unknown as CSSStyleDeclaration, {\n get(_target, prop: string) {\n if (prop === 'setProperty') {\n return (name: string, value: string) => {\n styles[name] = value;\n };\n }\n if (prop === 'getPropertyValue') {\n return (name: string) => styles[name] || '';\n }\n if (prop === 'removeProperty') {\n return (name: string) => {\n const old = styles[name];\n delete styles[name];\n return old || '';\n };\n }\n return styles[prop] ?? '';\n },\n set(_, prop: string, value: string) {\n styles[prop] = value;\n return true;\n },\n });\n}\n\n// ========== HTMLElement ==========\n\nexport interface TypedMockHTMLElement {\n tagName: string;\n id: string;\n className: string;\n textContent: string;\n innerHTML: string;\n style: CSSStyleDeclaration;\n dataset: DOMStringMap;\n childNodes: Node[];\n children: Element[];\n parentNode: Node | null;\n parentElement: HTMLElement | null;\n getAttribute: ReturnType<typeof mock>;\n setAttribute: ReturnType<typeof mock>;\n removeAttribute: ReturnType<typeof mock>;\n hasAttribute: ReturnType<typeof mock>;\n addEventListener: ReturnType<typeof mock>;\n removeEventListener: ReturnType<typeof mock>;\n dispatchEvent: ReturnType<typeof mock>;\n appendChild: ReturnType<typeof mock>;\n removeChild: ReturnType<typeof mock>;\n insertBefore: ReturnType<typeof mock>;\n contains: ReturnType<typeof mock>;\n matches: ReturnType<typeof mock>;\n querySelector: ReturnType<typeof mock>;\n querySelectorAll: ReturnType<typeof mock>;\n closest: ReturnType<typeof mock>;\n getBoundingClientRect: ReturnType<typeof mock>;\n remove: ReturnType<typeof mock>;\n cloneNode: ReturnType<typeof mock>;\n focus: ReturnType<typeof mock>;\n blur: ReturnType<typeof mock>;\n scrollIntoView: ReturnType<typeof mock>;\n // Expose for assertions\n _attributes: Map<string, string>;\n _eventListeners: Map<string, EventListener[]>;\n}\n\nexport function createTypedMockHTMLElement(options: MockHTMLElementOptions = {}): TypedMockHTMLElement {\n const attributes = new Map<string, string>(Object.entries(options.attributes || {}));\n const eventListeners = new Map<string, EventListener[]>();\n const childNodes: Node[] = [];\n\n const element: TypedMockHTMLElement = {\n tagName: (options.tagName || 'DIV').toUpperCase(),\n id: options.id || '',\n className: options.className || '',\n textContent: options.textContent || '',\n innerHTML: options.innerHTML || '',\n style: createMockCSSStyleDeclaration(options.style),\n dataset: (options.dataset || {}) as DOMStringMap,\n childNodes,\n children: childNodes as unknown as Element[],\n parentNode: null,\n parentElement: null,\n\n getAttribute: mock((name: string) => attributes.get(name) ?? null),\n setAttribute: mock((name: string, value: string) => {\n attributes.set(name, value);\n }),\n removeAttribute: mock((name: string) => {\n attributes.delete(name);\n }),\n hasAttribute: mock((name: string) => attributes.has(name)),\n\n addEventListener: mock((type: string, listener: EventListener) => {\n if (!eventListeners.has(type)) {\n eventListeners.set(type, []);\n }\n eventListeners.get(type)!.push(listener);\n }),\n removeEventListener: mock((type: string, listener: EventListener) => {\n const listeners = eventListeners.get(type);\n if (listeners) {\n const index = listeners.indexOf(listener);\n if (index > -1) listeners.splice(index, 1);\n }\n }),\n dispatchEvent: mock((event: Event) => {\n const listeners = eventListeners.get(event.type);\n listeners?.forEach((l) => {\n l(event);\n });\n return true;\n }),\n\n appendChild: mock((child: Node) => {\n childNodes.push(child);\n return child;\n }),\n removeChild: mock((child: Node) => {\n const index = childNodes.indexOf(child);\n if (index > -1) childNodes.splice(index, 1);\n return child;\n }),\n insertBefore: mock((newNode: Node, refNode: Node | null) => {\n if (refNode === null) {\n childNodes.push(newNode);\n } else {\n const index = childNodes.indexOf(refNode);\n if (index > -1) {\n childNodes.splice(index, 0, newNode);\n }\n }\n return newNode;\n }),\n\n contains: mock(() => false),\n matches: mock(() => false),\n querySelector: mock(() => null),\n querySelectorAll: mock(() => [] as unknown as NodeListOf<Element>),\n closest: mock(() => null),\n getBoundingClientRect: mock(() => createMockDOMRect()),\n remove: mock(() => {}),\n cloneNode: mock(() => createTypedMockHTMLElement(options) as unknown as Node),\n focus: mock(() => {}),\n blur: mock(() => {}),\n scrollIntoView: mock(() => {}),\n\n // Internal state for assertions\n _attributes: attributes,\n _eventListeners: eventListeners,\n };\n\n return element;\n}\n\n// ========== Location ==========\n\nexport interface TypedMockLocation {\n href: string;\n pathname: string;\n search: string;\n hash: string;\n host: string;\n hostname: string;\n port: string;\n protocol: string;\n origin: string;\n assign: ReturnType<typeof mock>;\n replace: ReturnType<typeof mock>;\n reload: ReturnType<typeof mock>;\n toString: () => string;\n}\n\nexport function createTypedMockLocation(overrides?: Partial<Location>): TypedMockLocation {\n const base = {\n href: 'http://localhost/',\n pathname: '/',\n search: '',\n hash: '',\n host: 'localhost',\n hostname: 'localhost',\n port: '',\n protocol: 'http:',\n origin: 'http://localhost',\n ...overrides,\n };\n\n return {\n ...base,\n assign: mock(() => {}),\n replace: mock(() => {}),\n reload: mock(() => {}),\n toString: () => base.href,\n };\n}\n\n// ========== History ==========\n\nexport interface TypedMockHistory {\n length: number;\n state: unknown;\n scrollRestoration: ScrollRestoration;\n pushState: ReturnType<typeof mock>;\n replaceState: ReturnType<typeof mock>;\n go: ReturnType<typeof mock>;\n back: ReturnType<typeof mock>;\n forward: ReturnType<typeof mock>;\n // Internal state for assertions\n _stateStack: Array<{ state: unknown; title: string; url: string }>;\n}\n\nexport function createTypedMockHistory(): TypedMockHistory {\n const stateStack: Array<{ state: unknown; title: string; url: string }> = [];\n\n return {\n length: 1,\n state: null,\n scrollRestoration: 'auto',\n pushState: mock((state: unknown, title: string, url?: string | null) => {\n stateStack.push({ state, title, url: url || '' });\n }),\n replaceState: mock((state: unknown, title: string, url?: string | null) => {\n if (stateStack.length > 0) {\n stateStack[stateStack.length - 1] = { state, title, url: url || '' };\n } else {\n stateStack.push({ state, title, url: url || '' });\n }\n }),\n go: mock(() => {}),\n back: mock(() => {}),\n forward: mock(() => {}),\n _stateStack: stateStack,\n };\n}\n\n// ========== Window ==========\n\nexport interface TypedMockWindow {\n location: TypedMockLocation;\n history: TypedMockHistory;\n innerWidth: number;\n innerHeight: number;\n addEventListener: ReturnType<typeof mock>;\n removeEventListener: ReturnType<typeof mock>;\n dispatchEvent: ReturnType<typeof mock>;\n getComputedStyle: ReturnType<typeof mock>;\n requestAnimationFrame: ReturnType<typeof mock>;\n cancelAnimationFrame: ReturnType<typeof mock>;\n setTimeout: typeof globalThis.setTimeout;\n clearTimeout: typeof globalThis.clearTimeout;\n setInterval: typeof globalThis.setInterval;\n clearInterval: typeof globalThis.clearInterval;\n // Internal state\n _eventListeners: Map<string, EventListener[]>;\n}\n\nexport function createTypedMockWindow(options: MockWindowOptions = {}): TypedMockWindow {\n const eventListeners = new Map<string, EventListener[]>();\n const location = createTypedMockLocation(options.location);\n const history = createTypedMockHistory();\n\n return {\n location,\n history,\n innerWidth: options.innerWidth ?? 1920,\n innerHeight: options.innerHeight ?? 1080,\n\n addEventListener: mock((type: string, listener: EventListener) => {\n if (!eventListeners.has(type)) {\n eventListeners.set(type, []);\n }\n eventListeners.get(type)!.push(listener);\n }),\n removeEventListener: mock((type: string, listener: EventListener) => {\n const listeners = eventListeners.get(type);\n if (listeners) {\n const index = listeners.indexOf(listener);\n if (index > -1) listeners.splice(index, 1);\n }\n }),\n dispatchEvent: mock((event: Event) => {\n const listeners = eventListeners.get(event.type);\n listeners?.forEach((l) => {\n l(event);\n });\n return true;\n }),\n\n getComputedStyle: mock(() => createMockCSSStyleDeclaration()),\n requestAnimationFrame: mock((cb: FrameRequestCallback) => {\n setTimeout(() => cb(performance.now()), 0);\n return 1;\n }),\n cancelAnimationFrame: mock(() => {}),\n\n setTimeout: globalThis.setTimeout,\n clearTimeout: globalThis.clearTimeout,\n setInterval: globalThis.setInterval,\n clearInterval: globalThis.clearInterval,\n\n _eventListeners: eventListeners,\n };\n}\n\n// ========== Document ==========\n\nexport interface TypedMockDocument {\n createElement: ReturnType<typeof mock>;\n getElementById: ReturnType<typeof mock>;\n querySelector: ReturnType<typeof mock>;\n querySelectorAll: ReturnType<typeof mock>;\n addEventListener: ReturnType<typeof mock>;\n removeEventListener: ReturnType<typeof mock>;\n dispatchEvent: ReturnType<typeof mock>;\n head: TypedMockHTMLElement;\n body: TypedMockHTMLElement;\n documentElement: TypedMockHTMLElement;\n // Internal state\n _createdElements: TypedMockHTMLElement[];\n _registeredElements: Map<string, TypedMockHTMLElement>;\n _eventListeners: Map<string, EventListener[]>;\n}\n\nexport function createTypedMockDocument(options: MockDocumentOptions = {}): TypedMockDocument {\n const registeredElements = new Map<string, TypedMockHTMLElement>();\n const createdElements: TypedMockHTMLElement[] = [];\n const eventListeners = new Map<string, EventListener[]>();\n\n // Convert any provided elements\n if (options.elements) {\n for (const [id, el] of options.elements) {\n registeredElements.set(id, el as unknown as TypedMockHTMLElement);\n }\n }\n\n return {\n createElement: mock((tag: string) => {\n const el = createTypedMockHTMLElement({ tagName: tag });\n createdElements.push(el);\n return el;\n }),\n getElementById: mock((id: string) => registeredElements.get(id) ?? null),\n querySelector: mock(() => null),\n querySelectorAll: mock(() => [] as unknown as NodeListOf<Element>),\n\n addEventListener: mock((type: string, listener: EventListener) => {\n if (!eventListeners.has(type)) {\n eventListeners.set(type, []);\n }\n eventListeners.get(type)!.push(listener);\n }),\n removeEventListener: mock((type: string, listener: EventListener) => {\n const listeners = eventListeners.get(type);\n if (listeners) {\n const index = listeners.indexOf(listener);\n if (index > -1) listeners.splice(index, 1);\n }\n }),\n dispatchEvent: mock((event: Event) => {\n const listeners = eventListeners.get(event.type);\n listeners?.forEach((l) => {\n l(event);\n });\n return true;\n }),\n\n head: createTypedMockHTMLElement({ tagName: 'HEAD' }),\n body: createTypedMockHTMLElement({ tagName: 'BODY' }),\n documentElement: createTypedMockHTMLElement({ tagName: 'HTML' }),\n\n _createdElements: createdElements,\n _registeredElements: registeredElements,\n _eventListeners: eventListeners,\n };\n}\n\n// ========== Global Installation Helpers ==========\n\nexport interface DomMockInstallation {\n window: TypedMockWindow;\n document: TypedMockDocument;\n cleanup: () => void;\n}\n\n/**\n * Install mock DOM globally and return cleanup function\n */\nexport function installMockDom(\n options: { window?: MockWindowOptions; document?: MockDocumentOptions } = {},\n): DomMockInstallation {\n const originalWindow = (globalThis as any).window;\n const originalDocument = (globalThis as any).document;\n\n const mockWindow = createTypedMockWindow(options.window);\n const mockDocument = createTypedMockDocument(options.document);\n\n (globalThis as any).window = mockWindow;\n (globalThis as any).document = mockDocument;\n\n return {\n window: mockWindow,\n document: mockDocument,\n cleanup: () => {\n (globalThis as any).window = originalWindow;\n (globalThis as any).document = originalDocument;\n },\n };\n}\n", "/**\n * Fetch Mock Factory\n * Properly typed mock factory for fetch with URL pattern matching\n */\n\nimport { mock } from 'bun:test';\n\n// ========== Types ==========\n\nexport interface MockFetchResponse {\n status?: number;\n statusText?: string;\n ok?: boolean;\n headers?: Record<string, string>;\n json?: () => Promise<unknown>;\n text?: () => Promise<string>;\n blob?: () => Promise<Blob>;\n}\n\nexport interface FetchMockConfig {\n /** URL pattern to response mapping */\n responses?: Map<string | RegExp, MockFetchResponse | (() => MockFetchResponse)>;\n /** Default response for unmatched URLs */\n defaultResponse?: MockFetchResponse;\n /** Whether to throw on unmatched URLs */\n throwOnUnmatched?: boolean;\n /** Delay in ms before resolving */\n delay?: number;\n}\n\nexport interface TypedFetchMock {\n (input: RequestInfo | URL, init?: RequestInit): Promise<Response>;\n /** Recorded calls for assertions */\n _calls: Array<{ url: string; options?: RequestInit }>;\n /** Reset call history */\n _reset: () => void;\n /** Add a response for a URL pattern */\n _addResponse: (pattern: string | RegExp, response: MockFetchResponse | (() => MockFetchResponse)) => void;\n}\n\n// ========== Response Factory ==========\n\nfunction createMockResponse(config: MockFetchResponse): Response {\n const status = config.status ?? 200;\n const ok = config.ok ?? (status >= 200 && status < 300);\n\n return {\n status,\n statusText: config.statusText ?? (ok ? 'OK' : 'Error'),\n ok,\n headers: new Headers(config.headers),\n json: config.json ?? (() => Promise.resolve({})),\n text: config.text ?? (() => Promise.resolve('')),\n blob: config.blob ?? (() => Promise.resolve(new Blob())),\n clone: () => createMockResponse(config),\n arrayBuffer: () => Promise.resolve(new ArrayBuffer(0)),\n formData: () => Promise.resolve(new FormData()),\n body: null,\n bodyUsed: false,\n redirected: false,\n type: 'basic',\n url: '',\n } as Response;\n}\n\n// ========== Main Factory ==========\n\nexport function createTypedFetchMock(config: FetchMockConfig = {}): TypedFetchMock {\n const calls: Array<{ url: string; options?: RequestInit }> = [];\n const responses = new Map(config.responses || []);\n\n const mockFn = mock(async (input: RequestInfo | URL, init?: RequestInit): Promise<Response> => {\n const url = typeof input === 'string' ? input : input.toString();\n calls.push({ url, options: init });\n\n if (config.delay) {\n await new Promise((resolve) => setTimeout(resolve, config.delay));\n }\n\n // Find matching response\n let responseConfig: MockFetchResponse | (() => MockFetchResponse) | undefined;\n\n for (const [pattern, response] of responses) {\n if (typeof pattern === 'string' && url === pattern) {\n responseConfig = response;\n break;\n }\n if (typeof pattern === 'string' && url.includes(pattern)) {\n responseConfig = response;\n break;\n }\n if (pattern instanceof RegExp && pattern.test(url)) {\n responseConfig = response;\n break;\n }\n }\n\n if (!responseConfig && config.defaultResponse) {\n responseConfig = config.defaultResponse;\n }\n\n if (!responseConfig) {\n if (config.throwOnUnmatched) {\n throw new Error(`Unmatched fetch request: ${url}`);\n }\n return createMockResponse({ status: 404, ok: false });\n }\n\n const resolvedConfig = typeof responseConfig === 'function' ? responseConfig() : responseConfig;\n\n return createMockResponse(resolvedConfig);\n }) as unknown as TypedFetchMock;\n\n mockFn._calls = calls;\n mockFn._reset = () => {\n calls.length = 0;\n };\n mockFn._addResponse = (pattern, response) => {\n responses.set(pattern, response);\n };\n\n return mockFn;\n}\n\n// ========== Convenience Factories ==========\n\n/**\n * Create a fetch mock that returns JSON data\n */\nexport function createJsonFetchMock<T>(responseData: T, options: Partial<MockFetchResponse> = {}): TypedFetchMock {\n return createTypedFetchMock({\n defaultResponse: {\n status: 200,\n ok: true,\n json: () => Promise.resolve(responseData),\n text: () => Promise.resolve(JSON.stringify(responseData)),\n ...options,\n },\n });\n}\n\n/**\n * Create a fetch mock that returns an error\n */\nexport function createErrorFetchMock(error: Error | string = 'Network error'): TypedFetchMock {\n const mockFn = mock(() =>\n Promise.reject(typeof error === 'string' ? new Error(error) : error),\n ) as unknown as TypedFetchMock;\n\n mockFn._calls = [];\n mockFn._reset = () => {};\n mockFn._addResponse = () => {};\n\n return mockFn;\n}\n\n/**\n * Create a fetch mock that returns different responses based on URL\n */\nexport function createRoutedFetchMock(\n routes: Record<string, MockFetchResponse | (() => MockFetchResponse)>,\n): TypedFetchMock {\n const responses = new Map<string, MockFetchResponse | (() => MockFetchResponse)>();\n for (const [url, response] of Object.entries(routes)) {\n responses.set(url, response);\n }\n return createTypedFetchMock({ responses });\n}\n\n// ========== Global Installation ==========\n\nexport interface FetchMockInstallation {\n fetch: TypedFetchMock;\n cleanup: () => void;\n}\n\n/**\n * Install mock fetch globally and return cleanup function\n */\nexport function installMockFetch(config: FetchMockConfig = {}): FetchMockInstallation {\n const originalFetch = globalThis.fetch;\n const mockFetch = createTypedFetchMock(config);\n\n globalThis.fetch = mockFetch as unknown as typeof fetch;\n\n return {\n fetch: mockFetch,\n cleanup: () => {\n globalThis.fetch = originalFetch;\n },\n };\n}\n", "/**\n * Event Mock Factory\n * Properly typed mock factories for Keyboard, Mouse, and Custom events\n */\n\nimport { mock } from 'bun:test';\n\n// ========== Types ==========\n\nexport interface MockKeyboardEventOptions {\n key: string;\n code?: string;\n ctrlKey?: boolean;\n metaKey?: boolean;\n shiftKey?: boolean;\n altKey?: boolean;\n repeat?: boolean;\n bubbles?: boolean;\n cancelable?: boolean;\n}\n\nexport interface MockMouseEventOptions {\n button?: number;\n buttons?: number;\n clientX?: number;\n clientY?: number;\n screenX?: number;\n screenY?: number;\n ctrlKey?: boolean;\n metaKey?: boolean;\n shiftKey?: boolean;\n altKey?: boolean;\n target?: EventTarget | null;\n bubbles?: boolean;\n cancelable?: boolean;\n}\n\nexport interface TypedMockKeyboardEvent extends KeyboardEvent {\n preventDefault: ReturnType<typeof mock>;\n stopPropagation: ReturnType<typeof mock>;\n stopImmediatePropagation: ReturnType<typeof mock>;\n}\n\nexport interface TypedMockMouseEvent extends MouseEvent {\n preventDefault: ReturnType<typeof mock>;\n stopPropagation: ReturnType<typeof mock>;\n stopImmediatePropagation: ReturnType<typeof mock>;\n}\n\n// ========== Keyboard Events ==========\n\nexport function createTypedKeyboardEvent(\n type: 'keydown' | 'keyup' | 'keypress',\n options: MockKeyboardEventOptions,\n): TypedMockKeyboardEvent {\n const event = new KeyboardEvent(type, {\n key: options.key,\n code: options.code ?? options.key,\n ctrlKey: options.ctrlKey ?? false,\n metaKey: options.metaKey ?? false,\n shiftKey: options.shiftKey ?? false,\n altKey: options.altKey ?? false,\n repeat: options.repeat ?? false,\n bubbles: options.bubbles ?? true,\n cancelable: options.cancelable ?? true,\n });\n\n // Create mock functions for event methods\n const preventDefaultMock = mock(() => {});\n const stopPropagationMock = mock(() => {});\n const stopImmediatePropagationMock = mock(() => {});\n\n // Override methods with mocks\n Object.defineProperties(event, {\n preventDefault: { value: preventDefaultMock, writable: true },\n stopPropagation: { value: stopPropagationMock, writable: true },\n stopImmediatePropagation: { value: stopImmediatePropagationMock, writable: true },\n });\n\n return event as TypedMockKeyboardEvent;\n}\n\n/**\n * Convenience function for creating common keyboard shortcuts\n */\nexport const KeyboardShortcuts = {\n copy: (meta = true) =>\n createTypedKeyboardEvent('keydown', {\n key: 'c',\n metaKey: meta,\n ctrlKey: !meta,\n }),\n paste: (meta = true) =>\n createTypedKeyboardEvent('keydown', {\n key: 'v',\n metaKey: meta,\n ctrlKey: !meta,\n }),\n cut: (meta = true) =>\n createTypedKeyboardEvent('keydown', {\n key: 'x',\n metaKey: meta,\n ctrlKey: !meta,\n }),\n undo: (meta = true) =>\n createTypedKeyboardEvent('keydown', {\n key: 'z',\n metaKey: meta,\n ctrlKey: !meta,\n }),\n redo: (meta = true) =>\n createTypedKeyboardEvent('keydown', {\n key: 'z',\n metaKey: meta,\n ctrlKey: !meta,\n shiftKey: true,\n }),\n delete: () => createTypedKeyboardEvent('keydown', { key: 'Backspace' }),\n enter: () => createTypedKeyboardEvent('keydown', { key: 'Enter' }),\n escape: () => createTypedKeyboardEvent('keydown', { key: 'Escape' }),\n tab: (shift = false) => createTypedKeyboardEvent('keydown', { key: 'Tab', shiftKey: shift }),\n arrowUp: () => createTypedKeyboardEvent('keydown', { key: 'ArrowUp' }),\n arrowDown: () => createTypedKeyboardEvent('keydown', { key: 'ArrowDown' }),\n arrowLeft: () => createTypedKeyboardEvent('keydown', { key: 'ArrowLeft' }),\n arrowRight: () => createTypedKeyboardEvent('keydown', { key: 'ArrowRight' }),\n};\n\n// ========== Mouse Events ==========\n\nexport function createTypedMouseEvent(\n type:\n | 'click'\n | 'dblclick'\n | 'mousedown'\n | 'mouseup'\n | 'mousemove'\n | 'mouseenter'\n | 'mouseleave'\n | 'mouseover'\n | 'mouseout'\n | 'contextmenu',\n options: MockMouseEventOptions = {},\n): TypedMockMouseEvent {\n const event = new MouseEvent(type, {\n button: options.button ?? 0,\n buttons: options.buttons ?? 0,\n clientX: options.clientX ?? 0,\n clientY: options.clientY ?? 0,\n screenX: options.screenX ?? options.clientX ?? 0,\n screenY: options.screenY ?? options.clientY ?? 0,\n ctrlKey: options.ctrlKey ?? false,\n metaKey: options.metaKey ?? false,\n shiftKey: options.shiftKey ?? false,\n altKey: options.altKey ?? false,\n bubbles: options.bubbles ?? true,\n cancelable: options.cancelable ?? true,\n });\n\n const preventDefaultMock = mock(() => {});\n const stopPropagationMock = mock(() => {});\n const stopImmediatePropagationMock = mock(() => {});\n\n Object.defineProperties(event, {\n preventDefault: { value: preventDefaultMock, writable: true },\n stopPropagation: { value: stopPropagationMock, writable: true },\n stopImmediatePropagation: { value: stopImmediatePropagationMock, writable: true },\n target: { value: options.target ?? null, writable: true },\n });\n\n return event as TypedMockMouseEvent;\n}\n\n// ========== Custom Events ==========\n\nexport function createTypedCustomEvent<T = unknown>(\n type: string,\n detail?: T,\n options: { bubbles?: boolean; cancelable?: boolean } = {},\n): CustomEvent<T> {\n return new CustomEvent(type, {\n detail,\n bubbles: options.bubbles ?? true,\n cancelable: options.cancelable ?? true,\n });\n}\n\n// ========== PopState Event ==========\n\nexport function createTypedPopStateEvent(state?: unknown): PopStateEvent {\n return new PopStateEvent('popstate', { state });\n}\n\n// ========== Message Event ==========\n\nexport interface MockMessageEventOptions<T = unknown> {\n data: T;\n origin?: string;\n source?: MessageEventSource | null;\n}\n\nexport function createTypedMessageEvent<T = unknown>(options: MockMessageEventOptions<T>): MessageEvent<T> {\n return new MessageEvent('message', {\n data: options.data,\n origin: options.origin ?? 'http://localhost',\n source: options.source ?? null,\n });\n}\n\n// ========== Focus Events ==========\n\nexport function createTypedFocusEvent(\n type: 'focus' | 'blur' | 'focusin' | 'focusout',\n options: { relatedTarget?: EventTarget | null } = {},\n): FocusEvent {\n return new FocusEvent(type, {\n bubbles: type === 'focusin' || type === 'focusout',\n cancelable: false,\n relatedTarget: options.relatedTarget ?? null,\n });\n}\n\n// ========== Input Events ==========\n\nexport interface MockInputEventOptions {\n data?: string | null;\n inputType?: string;\n isComposing?: boolean;\n}\n\nexport function createTypedInputEvent(type: 'input' | 'beforeinput', options: MockInputEventOptions = {}): InputEvent {\n return new InputEvent(type, {\n data: options.data ?? null,\n inputType: options.inputType ?? 'insertText',\n isComposing: options.isComposing ?? false,\n bubbles: true,\n cancelable: type === 'beforeinput',\n });\n}\n", "/**\n * Store Mock Factory\n * Properly typed mock factories for Zustand stores\n */\n\nimport { mock } from 'bun:test';\nimport type { ComponentNode, PageData } from '../../shared/types';\nimport type { Path } from '../../shared/pathArrayUtils';\n\n// ========== FileStore Types ==========\n\nexport interface FileItem {\n name: string;\n path: string;\n type: 'page' | 'component';\n}\n\nexport interface NavigationContext {\n path: string;\n selectedTreeItem: Path | null;\n}\n\nexport interface ApiError {\n message: string;\n code?: string;\n status?: number;\n}\n\nexport interface MockFileStoreState {\n files: FileItem[];\n selectedFile: FileItem | null;\n navigationHistory: NavigationContext[];\n iframeUrl: string;\n lastError: ApiError | null;\n isRecoverable: boolean;\n pendingOperation: 'loading' | 'saving' | null;\n}\n\nexport interface MockFileStoreActions {\n setFiles: ReturnType<typeof mock>;\n setSelectedFile: ReturnType<typeof mock>;\n setIframeUrl: ReturnType<typeof mock>;\n pushNavigationHistory: ReturnType<typeof mock>;\n popNavigationHistory: ReturnType<typeof mock>;\n clearNavigationHistory: ReturnType<typeof mock>;\n setLastError: ReturnType<typeof mock>;\n setPendingOperation: ReturnType<typeof mock>;\n clearError: ReturnType<typeof mock>;\n}\n\nexport type TypedMockFileStore = MockFileStoreState &\n MockFileStoreActions & {\n /** Get current state (for assertions) */\n getState: () => MockFileStoreState;\n };\n\nexport function createTypedMockFileStore(initialState: Partial<MockFileStoreState> = {}): TypedMockFileStore {\n const state: MockFileStoreState = {\n files: [],\n selectedFile: null,\n navigationHistory: [],\n iframeUrl: '/',\n lastError: null,\n isRecoverable: false,\n pendingOperation: null,\n ...initialState,\n };\n\n const store: TypedMockFileStore = {\n ...state,\n setFiles: mock((files: FileItem[]) => {\n state.files = files;\n store.files = files;\n }),\n setSelectedFile: mock((file: FileItem | null) => {\n state.selectedFile = file;\n store.selectedFile = file;\n }),\n setIframeUrl: mock((url: string) => {\n state.iframeUrl = url;\n store.iframeUrl = url;\n }),\n pushNavigationHistory: mock((context: NavigationContext) => {\n state.navigationHistory.push(context);\n }),\n popNavigationHistory: mock(() => {\n return state.navigationHistory.pop() ?? null;\n }),\n clearNavigationHistory: mock(() => {\n state.navigationHistory = [];\n }),\n setLastError: mock((error: ApiError | null, isRecoverable = false) => {\n state.lastError = error;\n state.isRecoverable = isRecoverable;\n store.lastError = error;\n store.isRecoverable = isRecoverable;\n }),\n setPendingOperation: mock((op: 'loading' | 'saving' | null) => {\n state.pendingOperation = op;\n store.pendingOperation = op;\n }),\n clearError: mock(() => {\n state.lastError = null;\n state.isRecoverable = false;\n store.lastError = null;\n store.isRecoverable = false;\n }),\n getState: () => ({ ...state }),\n };\n\n return store;\n}\n\n// ========== SelectionStore Types ==========\n\nexport interface MockSelectionStoreState {\n selectedTreeItem: Path | null;\n selectedItemData: ComponentNode | null;\n clipboard: ComponentNode | null;\n hoveredPath: Path | null;\n}\n\nexport interface MockSelectionStoreActions {\n setSelectedTreeItem: ReturnType<typeof mock>;\n setSelectedItemData: ReturnType<typeof mock>;\n setClipboard: ReturnType<typeof mock>;\n setHoveredPath: ReturnType<typeof mock>;\n clearSelection: ReturnType<typeof mock>;\n copyNode: ReturnType<typeof mock>;\n pasteNode: ReturnType<typeof mock>;\n}\n\nexport type TypedMockSelectionStore = MockSelectionStoreState &\n MockSelectionStoreActions & {\n getState: () => MockSelectionStoreState;\n };\n\nexport function createTypedMockSelectionStore(\n initialState: Partial<MockSelectionStoreState> = {},\n): TypedMockSelectionStore {\n const state: MockSelectionStoreState = {\n selectedTreeItem: null,\n selectedItemData: null,\n clipboard: null,\n hoveredPath: null,\n ...initialState,\n };\n\n const store: TypedMockSelectionStore = {\n ...state,\n setSelectedTreeItem: mock((path: Path | null) => {\n state.selectedTreeItem = path;\n store.selectedTreeItem = path;\n }),\n setSelectedItemData: mock((data: ComponentNode | null) => {\n state.selectedItemData = data;\n store.selectedItemData = data;\n }),\n setClipboard: mock((node: ComponentNode | null) => {\n state.clipboard = node;\n store.clipboard = node;\n }),\n setHoveredPath: mock((path: Path | null) => {\n state.hoveredPath = path;\n store.hoveredPath = path;\n }),\n clearSelection: mock(() => {\n state.selectedTreeItem = null;\n state.selectedItemData = null;\n store.selectedTreeItem = null;\n store.selectedItemData = null;\n }),\n copyNode: mock(() => {\n if (state.selectedItemData) {\n state.clipboard = structuredClone(state.selectedItemData);\n store.clipboard = state.clipboard;\n }\n }),\n pasteNode: mock(() => {\n return state.clipboard ? structuredClone(state.clipboard) : null;\n }),\n getState: () => ({ ...state }),\n };\n\n return store;\n}\n\n// ========== NodeStore Types ==========\n\nexport interface MockNodeStoreState {\n pageData: PageData | null;\n isDirty: boolean;\n}\n\nexport interface MockNodeStoreActions {\n setPageData: ReturnType<typeof mock>;\n updateNode: ReturnType<typeof mock>;\n deleteNode: ReturnType<typeof mock>;\n addNode: ReturnType<typeof mock>;\n moveNode: ReturnType<typeof mock>;\n markDirty: ReturnType<typeof mock>;\n markClean: ReturnType<typeof mock>;\n}\n\nexport type TypedMockNodeStore = MockNodeStoreState &\n MockNodeStoreActions & {\n getState: () => MockNodeStoreState;\n };\n\nexport function createTypedMockNodeStore(initialState: Partial<MockNodeStoreState> = {}): TypedMockNodeStore {\n const state: MockNodeStoreState = {\n pageData: null,\n isDirty: false,\n ...initialState,\n };\n\n const store: TypedMockNodeStore = {\n ...state,\n setPageData: mock((data: PageData | null) => {\n state.pageData = data;\n store.pageData = data;\n state.isDirty = false;\n store.isDirty = false;\n }),\n updateNode: mock((_path: Path, _updates: Partial<ComponentNode>) => {\n state.isDirty = true;\n store.isDirty = true;\n }),\n deleteNode: mock((_path: Path) => {\n state.isDirty = true;\n store.isDirty = true;\n }),\n addNode: mock((_parentPath: Path, _node: ComponentNode, _index?: number) => {\n state.isDirty = true;\n store.isDirty = true;\n }),\n moveNode: mock((_fromPath: Path, _toPath: Path) => {\n state.isDirty = true;\n store.isDirty = true;\n }),\n markDirty: mock(() => {\n state.isDirty = true;\n store.isDirty = true;\n }),\n markClean: mock(() => {\n state.isDirty = false;\n store.isDirty = false;\n }),\n getState: () => ({ ...state }),\n };\n\n return store;\n}\n\n// ========== ComponentStore Types ==========\n\nexport interface MockComponentStoreState {\n components: Map<string, unknown>;\n loading: boolean;\n}\n\nexport interface MockComponentStoreActions {\n setComponents: ReturnType<typeof mock>;\n getComponent: ReturnType<typeof mock>;\n hasComponent: ReturnType<typeof mock>;\n setLoading: ReturnType<typeof mock>;\n}\n\nexport type TypedMockComponentStore = MockComponentStoreState &\n MockComponentStoreActions & {\n getState: () => MockComponentStoreState;\n };\n\nexport function createTypedMockComponentStore(\n initialState: Partial<MockComponentStoreState> = {},\n): TypedMockComponentStore {\n const state: MockComponentStoreState = {\n components: new Map(),\n loading: false,\n ...initialState,\n };\n\n const store: TypedMockComponentStore = {\n ...state,\n setComponents: mock((components: Map<string, unknown>) => {\n state.components = components;\n store.components = components;\n }),\n getComponent: mock((name: string) => {\n return state.components.get(name);\n }),\n hasComponent: mock((name: string) => {\n return state.components.has(name);\n }),\n setLoading: mock((loading: boolean) => {\n state.loading = loading;\n store.loading = loading;\n }),\n getState: () => ({ ...state }),\n };\n\n return store;\n}\n\n// ========== EditorServices Mock ==========\n\nexport interface TypedMockEditorServices {\n fileService: {\n loadAllFiles: ReturnType<typeof mock>;\n loadFileData: ReturnType<typeof mock>;\n saveFileData: ReturnType<typeof mock>;\n saveComponentJS: ReturnType<typeof mock>;\n saveComponentCSS: ReturnType<typeof mock>;\n };\n nodeService: {\n addElement: ReturnType<typeof mock>;\n deleteElement: ReturnType<typeof mock>;\n moveElement: ReturnType<typeof mock>;\n copyNode: ReturnType<typeof mock>;\n pasteNode: ReturnType<typeof mock>;\n };\n componentService: {\n loadComponentDefinition: ReturnType<typeof mock>;\n createFromSelection: ReturnType<typeof mock>;\n };\n fileStoreService: {\n loadFiles: ReturnType<typeof mock>;\n selectFile: ReturnType<typeof mock>;\n reloadSelectedFilePreservingSelection: ReturnType<typeof mock>;\n };\n}\n\nexport function createTypedMockEditorServices(): TypedMockEditorServices {\n return {\n fileService: {\n loadAllFiles: mock(() => Promise.resolve({ pages: [], components: [] })),\n loadFileData: mock(() => Promise.resolve({ component: { type: 'div', children: [] } })),\n saveFileData: mock(() => Promise.resolve()),\n saveComponentJS: mock(() => Promise.resolve()),\n saveComponentCSS: mock(() => Promise.resolve()),\n },\n nodeService: {\n addElement: mock(() => Promise.resolve()),\n deleteElement: mock(() => Promise.resolve()),\n moveElement: mock(() => Promise.resolve()),\n copyNode: mock(() => Promise.resolve()),\n pasteNode: mock(() => Promise.resolve()),\n },\n componentService: {\n loadComponentDefinition: mock(() => Promise.resolve()),\n createFromSelection: mock(() => Promise.resolve()),\n },\n fileStoreService: {\n loadFiles: mock(() => Promise.resolve()),\n selectFile: mock(() => Promise.resolve({ component: { type: 'div', children: [] } })),\n reloadSelectedFilePreservingSelection: mock(() => Promise.resolve({ component: { type: 'div', children: [] } })),\n },\n };\n}\n", "/**\n * Console Mock Factory\n * Utilities for mocking and spying on console methods\n */\n\nimport { mock } from 'bun:test';\n\n// ========== Types ==========\n\nexport type ConsoleMethods = 'log' | 'warn' | 'error' | 'info' | 'debug' | 'trace';\n\nexport interface TypedConsoleSpy {\n log: ReturnType<typeof mock>;\n warn: ReturnType<typeof mock>;\n error: ReturnType<typeof mock>;\n info: ReturnType<typeof mock>;\n debug: ReturnType<typeof mock>;\n trace: ReturnType<typeof mock>;\n /** Restore original console methods */\n restore: () => void;\n /** Get all calls to a specific method */\n getCalls: (method: ConsoleMethods) => unknown[][];\n /** Check if a method was called with specific arguments */\n wasCalledWith: (method: ConsoleMethods, ...args: unknown[]) => boolean;\n /** Clear all call history */\n clearCalls: () => void;\n}\n\n// ========== Main Factory ==========\n\nexport function createTypedConsoleSpy(): TypedConsoleSpy {\n const originalConsole = {\n log: console.log,\n warn: console.warn,\n error: console.error,\n info: console.info,\n debug: console.debug,\n trace: console.trace,\n };\n\n const mocks = {\n log: mock((..._args: unknown[]) => {}),\n warn: mock((..._args: unknown[]) => {}),\n error: mock((..._args: unknown[]) => {}),\n info: mock((..._args: unknown[]) => {}),\n debug: mock((..._args: unknown[]) => {}),\n trace: mock((..._args: unknown[]) => {}),\n };\n\n // Replace console methods\n console.log = mocks.log;\n console.warn = mocks.warn;\n console.error = mocks.error;\n console.info = mocks.info;\n console.debug = mocks.debug;\n console.trace = mocks.trace;\n\n return {\n ...mocks,\n restore: () => {\n console.log = originalConsole.log;\n console.warn = originalConsole.warn;\n console.error = originalConsole.error;\n console.info = originalConsole.info;\n console.debug = originalConsole.debug;\n console.trace = originalConsole.trace;\n },\n getCalls: (method: ConsoleMethods) => {\n const mockFn = mocks[method] as unknown as { mock: { calls: unknown[][] } };\n return mockFn.mock?.calls || [];\n },\n wasCalledWith: (method: ConsoleMethods, ...args: unknown[]) => {\n const calls = mocks[method] as unknown as { mock: { calls: unknown[][] } };\n return (calls.mock?.calls || []).some((call) =>\n args.every((arg, i) => {\n if (arg instanceof RegExp && typeof call[i] === 'string') {\n return arg.test(call[i] as string);\n }\n return call[i] === arg;\n }),\n );\n },\n clearCalls: () => {\n for (const method of Object.values(mocks)) {\n (method as unknown as { mock: { calls: unknown[][] } }).mock.calls = [];\n }\n },\n };\n}\n\n// ========== Convenience Functions ==========\n\n/**\n * Suppress all console output during test execution\n * Returns a cleanup function to restore console\n */\nexport function suppressConsole(): () => void {\n const spy = createTypedConsoleSpy();\n return spy.restore;\n}\n\n/**\n * Capture console output for specific methods only\n */\nexport function captureConsole(methods: ConsoleMethods[]): TypedConsoleSpy & { only: ConsoleMethods[] } {\n const spy = createTypedConsoleSpy();\n\n // Restore methods we don't want to capture\n const allMethods: ConsoleMethods[] = ['log', 'warn', 'error', 'info', 'debug', 'trace'];\n for (const method of allMethods) {\n if (!methods.includes(method)) {\n // Restore this method to original\n const _original = {\n log: console.log,\n warn: console.warn,\n error: console.error,\n info: console.info,\n debug: console.debug,\n trace: console.trace,\n };\n // The spy already replaced these, so we get the mocked version\n // We need to set them back to the pre-spy originals\n }\n }\n\n return { ...spy, only: methods };\n}\n\n/**\n * Create a console spy that passes through to original console\n * Useful when you want to see output while also capturing it\n */\nexport function createPassthroughConsoleSpy(): TypedConsoleSpy {\n const originalConsole = {\n log: console.log,\n warn: console.warn,\n error: console.error,\n info: console.info,\n debug: console.debug,\n trace: console.trace,\n };\n\n const mocks = {\n log: mock((...args: unknown[]) => {\n originalConsole.log(...args);\n }),\n warn: mock((...args: unknown[]) => {\n originalConsole.warn(...args);\n }),\n error: mock((...args: unknown[]) => {\n originalConsole.error(...args);\n }),\n info: mock((...args: unknown[]) => {\n originalConsole.info(...args);\n }),\n debug: mock((...args: unknown[]) => {\n originalConsole.debug(...args);\n }),\n trace: mock((...args: unknown[]) => {\n originalConsole.trace(...args);\n }),\n };\n\n // Replace console methods\n console.log = mocks.log;\n console.warn = mocks.warn;\n console.error = mocks.error;\n console.info = mocks.info;\n console.debug = mocks.debug;\n console.trace = mocks.trace;\n\n return {\n ...mocks,\n restore: () => {\n console.log = originalConsole.log;\n console.warn = originalConsole.warn;\n console.error = originalConsole.error;\n console.info = originalConsole.info;\n console.debug = originalConsole.debug;\n console.trace = originalConsole.trace;\n },\n getCalls: (method: ConsoleMethods) => {\n const mockFn = mocks[method] as unknown as { mock: { calls: unknown[][] } };\n return mockFn.mock?.calls || [];\n },\n wasCalledWith: (method: ConsoleMethods, ...args: unknown[]) => {\n const calls = mocks[method] as unknown as { mock: { calls: unknown[][] } };\n return (calls.mock?.calls || []).some((call) => args.every((arg, i) => call[i] === arg));\n },\n clearCalls: () => {\n for (const method of Object.values(mocks)) {\n (method as unknown as { mock: { calls: unknown[][] } }).mock.calls = [];\n }\n },\n };\n}\n", "/**\n * Server Mock Factory\n * Properly typed mock factories for server-side services\n */\n\nimport { mock } from 'bun:test';\nimport type { PageProvider, ComponentProvider } from '../../shared/interfaces/contentProvider';\nimport type { ComponentServiceFs, ComponentLoader } from '../../server/services/componentService';\nimport type { ComponentDefinition } from '../../shared/types';\n\n// ========== PageProvider Mock ==========\n\nexport interface TypedMockPageProvider extends PageProvider {\n loadAll: ReturnType<typeof mock>;\n get: ReturnType<typeof mock>;\n save: ReturnType<typeof mock>;\n delete: ReturnType<typeof mock>;\n exists: ReturnType<typeof mock>;\n // Internal state for assertions\n _pages: Record<string, string>;\n}\n\n/**\n * Create a typed mock PageProvider\n * @param initialPages - Initial page content map (path -> content)\n */\nexport function createTypedMockPageProvider(initialPages: Record<string, string> = {}): TypedMockPageProvider {\n const pages = { ...initialPages };\n\n const provider: TypedMockPageProvider = {\n loadAll: mock(async () => new Map(Object.entries(pages))),\n get: mock(async (path: string) => pages[path] ?? null),\n save: mock(async (path: string, content: string) => {\n pages[path] = content;\n }),\n delete: mock(async (path: string) => {\n delete pages[path];\n }),\n exists: mock(async (path: string) => path in pages),\n _pages: pages,\n };\n\n return provider;\n}\n\n// ========== ComponentProvider Mock ==========\n\nexport interface TypedMockComponentProvider extends ComponentProvider {\n loadAll: ReturnType<typeof mock>;\n get: ReturnType<typeof mock>;\n getJS: ReturnType<typeof mock>;\n getCSS: ReturnType<typeof mock>;\n save: ReturnType<typeof mock>;\n // Internal state for assertions\n _components: Map<string, ComponentDefinition>;\n _js: Map<string, string>;\n _css: Map<string, string>;\n}\n\n/**\n * Create a typed mock ComponentProvider\n */\nexport function createTypedMockComponentProvider(\n initialComponents: Map<string, ComponentDefinition> = new Map(),\n): TypedMockComponentProvider {\n const components = new Map(initialComponents);\n const js = new Map<string, string>();\n const css = new Map<string, string>();\n\n const provider: TypedMockComponentProvider = {\n loadAll: mock(async () => new Map(components)),\n get: mock(async (name: string) => components.get(name) ?? null),\n getJS: mock(async (name: string) => js.get(name) ?? null),\n getCSS: mock(async (name: string) => css.get(name) ?? null),\n save: mock(async (name: string, definition: ComponentDefinition) => {\n components.set(name, definition);\n }),\n _components: components,\n _js: js,\n _css: css,\n };\n\n return provider;\n}\n\n// ========== ComponentServiceFs Mock ==========\n\nexport interface TypedMockComponentServiceFs extends ComponentServiceFs {\n writeFile: ReturnType<typeof mock>;\n readFile: ReturnType<typeof mock>;\n // Internal state for assertions\n _files: Record<string, string>;\n}\n\n/**\n * Create a typed mock file system for ComponentService\n */\nexport function createTypedMockComponentServiceFs(\n initialFiles: Record<string, string> = {},\n): TypedMockComponentServiceFs {\n const files = { ...initialFiles };\n\n const fs: TypedMockComponentServiceFs = {\n writeFile: mock(async (path: string, content: string) => {\n files[path] = content;\n }),\n readFile: mock(async (path: string) => files[path] ?? null),\n _files: files,\n };\n\n return fs;\n}\n\n// ========== ComponentLoader Mock ==========\n\nexport interface TypedMockComponentLoader extends ComponentLoader {\n loadDirectory: ReturnType<typeof mock>;\n loadFile: ReturnType<typeof mock>;\n // Internal state for assertions\n _components: Map<string, ComponentDefinition>;\n}\n\n/**\n * Create a typed mock component loader\n */\nexport function createTypedMockComponentLoader(\n components: Map<string, ComponentDefinition> = new Map(),\n): TypedMockComponentLoader {\n const storedComponents = new Map(components);\n\n const loader: TypedMockComponentLoader = {\n loadDirectory: mock(async () => new Map(storedComponents)),\n loadFile: mock(async () => null),\n _components: storedComponents,\n };\n\n return loader;\n}\n\n// ========== Full-stack file system mock ==========\n\nexport interface TypedMockFs {\n readFile: ReturnType<typeof mock>;\n writeFile: ReturnType<typeof mock>;\n unlink: ReturnType<typeof mock>;\n readdir: ReturnType<typeof mock>;\n stat: ReturnType<typeof mock>;\n access: ReturnType<typeof mock>;\n mkdir: ReturnType<typeof mock>;\n rm: ReturnType<typeof mock>;\n // Internal state for assertions\n _files: Record<string, string>;\n}\n\n/**\n * Create a comprehensive mock file system (similar to fs/promises)\n * @param initialFiles - Initial file content map (path -> content)\n */\nexport function createTypedMockFs(initialFiles: Record<string, string> = {}): TypedMockFs {\n const files = { ...initialFiles };\n\n const makeError = (code: string, message: string) => {\n const error = new Error(message);\n (error as NodeJS.ErrnoException).code = code;\n return error;\n };\n\n const fs: TypedMockFs = {\n readFile: mock(async (path: string) => {\n if (path in files) {\n return files[path];\n }\n throw makeError('ENOENT', `ENOENT: no such file or directory, open '${path}'`);\n }),\n writeFile: mock(async (path: string, content: string) => {\n files[path] = content;\n }),\n unlink: mock(async (path: string) => {\n if (!(path in files)) {\n throw makeError('ENOENT', `ENOENT: no such file or directory, unlink '${path}'`);\n }\n delete files[path];\n }),\n readdir: mock(async (dir: string) => {\n const normalizedDir = dir.endsWith('/') ? dir : `${dir}/`;\n const entries = new Set<string>();\n for (const path of Object.keys(files)) {\n if (path.startsWith(normalizedDir)) {\n const relativePath = path.slice(normalizedDir.length);\n const firstSegment = relativePath.split('/')[0];\n if (firstSegment) {\n entries.add(firstSegment);\n }\n }\n }\n return Array.from(entries);\n }),\n stat: mock(async (path: string) => ({\n isDirectory: () => !path.includes('.') || path.endsWith('/'),\n isFile: () => path.includes('.') && !path.endsWith('/'),\n })),\n access: mock(async (path: string) => {\n if (!(path in files)) {\n throw makeError('ENOENT', `ENOENT: no such file or directory, access '${path}'`);\n }\n }),\n mkdir: mock(async () => {}),\n rm: mock(async (path: string) => {\n for (const filePath of Object.keys(files)) {\n if (filePath.startsWith(path)) {\n delete files[filePath];\n }\n }\n }),\n _files: files,\n };\n\n return fs;\n}\n", "/**\n * Async Testing Helpers\n * Utilities for handling async operations in tests\n */\n\nimport type { mock } from 'bun:test';\n\n/**\n * Wait for a condition to be true\n * @param condition - Function that returns boolean or Promise<boolean>\n * @param options - timeout and interval in ms\n */\nexport async function waitFor(\n condition: () => boolean | Promise<boolean>,\n options: { timeout?: number; interval?: number } = {},\n): Promise<void> {\n const { timeout = 5000, interval = 50 } = options;\n const start = Date.now();\n\n while (Date.now() - start < timeout) {\n const result = await condition();\n if (result) return;\n await new Promise((resolve) => setTimeout(resolve, interval));\n }\n\n throw new Error(`waitFor timed out after ${timeout}ms`);\n}\n\n/**\n * Wait for a mock function to be called\n * @param mockFn - The mock function to wait for\n * @param options - timeout and minimum call count\n */\nexport async function waitForMockCall(\n mockFn: ReturnType<typeof mock>,\n options: { timeout?: number; callCount?: number } = {},\n): Promise<void> {\n const { timeout = 5000, callCount = 1 } = options;\n\n await waitFor(\n () => {\n const calls = (mockFn as unknown as { mock: { calls: unknown[][] } }).mock?.calls;\n return (calls?.length ?? 0) >= callCount;\n },\n { timeout },\n );\n}\n\n/**\n * Flush all pending promises (microtask queue)\n */\nexport async function flushPromises(): Promise<void> {\n await new Promise((resolve) => setTimeout(resolve, 0));\n}\n\n/**\n * Flush multiple times to handle nested promises\n * @param count - Number of flush cycles\n */\nexport async function flushPromisesDeep(count: number = 3): Promise<void> {\n for (let i = 0; i < count; i++) {\n await flushPromises();\n }\n}\n\n/**\n * Run a function and wait for its async effects\n * Similar to React's act() but framework-agnostic\n */\nexport async function actAsync(fn: () => Promise<void> | void): Promise<void> {\n await fn();\n await flushPromises();\n}\n\n/**\n * Wait for a specific amount of time\n * @param ms - Milliseconds to wait\n */\nexport function wait(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Create a deferred promise that can be resolved/rejected externally\n */\nexport interface Deferred<T> {\n promise: Promise<T>;\n resolve: (value: T) => void;\n reject: (reason?: unknown) => void;\n}\n\nexport function createDeferred<T>(): Deferred<T> {\n let resolve!: (value: T) => void;\n let reject!: (reason?: unknown) => void;\n\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n return { promise, resolve, reject };\n}\n\n/**\n * Wait for an element to appear in the DOM\n * @param selector - CSS selector\n * @param options - container and timeout\n */\nexport async function waitForElement(\n selector: string,\n options: { container?: Element; timeout?: number } = {},\n): Promise<Element> {\n const { container = document, timeout = 5000 } = options;\n\n await waitFor(() => container.querySelector(selector) !== null, { timeout });\n\n const element = container.querySelector(selector);\n if (!element) {\n throw new Error(`Element not found: ${selector}`);\n }\n\n return element;\n}\n\n/**\n * Wait for an element to be removed from the DOM\n * @param selector - CSS selector\n * @param options - container and timeout\n */\nexport async function waitForElementToBeRemoved(\n selector: string,\n options: { container?: Element; timeout?: number } = {},\n): Promise<void> {\n const { container = document, timeout = 5000 } = options;\n\n await waitFor(() => container.querySelector(selector) === null, { timeout });\n}\n\n/**\n * Retry a function until it succeeds or times out\n * @param fn - Function to retry\n * @param options - max attempts and delay between attempts\n */\nexport async function retry<T>(\n fn: () => T | Promise<T>,\n options: { maxAttempts?: number; delay?: number } = {},\n): Promise<T> {\n const { maxAttempts = 3, delay = 100 } = options;\n\n let lastError: unknown;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error;\n if (attempt < maxAttempts) {\n await wait(delay);\n }\n }\n }\n\n throw lastError;\n}\n\n/**\n * Create a function that resolves after being called N times\n * Useful for waiting for multiple async operations\n */\nexport function createCallCounter(targetCount: number): { increment: () => void; promise: Promise<void> } {\n let count = 0;\n let resolve!: () => void;\n\n const promise = new Promise<void>((res) => {\n resolve = res;\n });\n\n return {\n increment: () => {\n count++;\n if (count >= targetCount) {\n resolve();\n }\n },\n promise,\n };\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["mock", "mock", "mock", "mock", "mock", "mock"]
7
7
  }
@@ -1,8 +1,8 @@
1
- import { createElement as h } from "react";
2
- import { createRoot } from "react-dom/client";
3
- import { Router, type RouterProps } from "../lib/client/routing/Router";
4
- import { setupCssHmrListeners } from "../lib/client/hmrCssReload";
5
- import type { PrefetchConfig } from "../lib/shared/types/prefetch";
1
+ import { createElement as h } from 'react';
2
+ import { createRoot } from 'react-dom/client';
3
+ import { Router, type RouterProps } from '../lib/client/routing/Router';
4
+ import { setupCssHmrListeners } from '../lib/client/hmrCssReload';
5
+ import type { PrefetchConfig } from '../lib/shared/types/prefetch';
6
6
 
7
7
  // Extend Window interface for config
8
8
  declare global {
@@ -35,9 +35,11 @@ if (rootElement) {
35
35
  defaultStrategy: 'hover' as const,
36
36
  };
37
37
 
38
- root.render(h<RouterProps>(Router, {
39
- prefetch: prefetchConfig
40
- }));
38
+ root.render(
39
+ h<RouterProps>(Router, {
40
+ prefetch: prefetchConfig,
41
+ }),
42
+ );
41
43
  }
42
44
 
43
45
  // Bun's HMR API
@@ -4,14 +4,14 @@
4
4
  * For editor functionality, use @meno/studio's ClientInitializer.
5
5
  */
6
6
 
7
- import { ComponentRegistry, globalComponentRegistry } from "./componentRegistry";
8
- import { ComponentBuilder } from "./core/ComponentBuilder";
9
- import { StyleInjector } from "./styles/StyleInjector";
10
- import { ScriptExecutor } from "./scripts/ScriptExecutor";
11
- import { PrefetchService } from "./services/PrefetchService";
12
- import { elementRegistry } from "./elementRegistry";
13
- import { setGlobalTemplateContext } from "../shared/globalTemplateContext";
14
- import type { PrefetchConfig } from "../shared/types/prefetch";
7
+ import { type ComponentRegistry, globalComponentRegistry } from './componentRegistry';
8
+ import { ComponentBuilder } from './core/ComponentBuilder';
9
+ import { StyleInjector } from './styles/StyleInjector';
10
+ import { ScriptExecutor } from './scripts/ScriptExecutor';
11
+ import { PrefetchService } from './services/PrefetchService';
12
+ import { elementRegistry } from './elementRegistry';
13
+ import { setGlobalTemplateContext } from '../shared/globalTemplateContext';
14
+ import type { PrefetchConfig } from '../shared/types/prefetch';
15
15
 
16
16
  /**
17
17
  * Client initialization options