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,10 +1,5 @@
1
1
  import { describe, test, expect } from 'bun:test';
2
- import {
3
- validatePropDefinition,
4
- validateComponentNode,
5
- validateOrThrow,
6
- type ValidationResult,
7
- } from './validators';
2
+ import { validatePropDefinition, validateComponentNode, validateOrThrow, type ValidationResult } from './validators';
8
3
  import { NODE_TYPE } from '../constants';
9
4
 
10
5
  describe('validators', () => {
@@ -90,7 +85,7 @@ describe('validators', () => {
90
85
  });
91
86
 
92
87
  test('throws on invalid input', () => {
93
- const validator = (data: unknown): ValidationResult<string> => ({
88
+ const validator = (_data: unknown): ValidationResult<string> => ({
94
89
  valid: false,
95
90
  errors: [{ path: 'root', message: 'Invalid' }],
96
91
  });
@@ -98,7 +93,7 @@ describe('validators', () => {
98
93
  });
99
94
 
100
95
  test('includes custom error message', () => {
101
- const validator = (data: unknown): ValidationResult<string> => ({
96
+ const validator = (_data: unknown): ValidationResult<string> => ({
102
97
  valid: false,
103
98
  errors: [{ path: 'field', message: 'Required' }],
104
99
  });
@@ -5,7 +5,13 @@
5
5
  */
6
6
 
7
7
  import type { ZodError, ZodType } from 'zod';
8
- import type { PropDefinition, ComponentDefinition, StructuredComponentDefinition, PageData, PageDataWithComponent } from '../types/components';
8
+ import type {
9
+ PropDefinition,
10
+ ComponentDefinition,
11
+ StructuredComponentDefinition,
12
+ PageData,
13
+ PageDataWithComponent,
14
+ } from '../types/components';
9
15
  import type { ComponentNode } from '../types/nodes';
10
16
  import type { PageMetaData } from '../types/api';
11
17
  import type { CMSSchema, CMSItem } from '../types/cms';
@@ -34,15 +40,13 @@ export interface ValidationError {
34
40
  /**
35
41
  * Validation result type - always includes error details on failure
36
42
  */
37
- export type ValidationResult<T> =
38
- | { valid: true; data: T }
39
- | { valid: false; errors: ValidationError[] };
43
+ export type ValidationResult<T> = { valid: true; data: T } | { valid: false; errors: ValidationError[] };
40
44
 
41
45
  /**
42
46
  * Convert Zod errors to ValidationError format
43
47
  */
44
48
  function zodToValidationErrors(zodError: ZodError): ValidationError[] {
45
- return zodError.errors.map(err => ({
49
+ return zodError.errors.map((err) => ({
46
50
  path: err.path.join('.') || 'root',
47
51
  message: err.message,
48
52
  code: 'INVALID_TYPE' as const,
@@ -55,11 +59,11 @@ function zodToValidationErrors(zodError: ZodError): ValidationError[] {
55
59
  export function validateOrThrow<T>(
56
60
  data: unknown,
57
61
  validator: (data: unknown) => ValidationResult<T>,
58
- errorMessage?: string
62
+ errorMessage?: string,
59
63
  ): T {
60
64
  const result = validator(data);
61
65
  if (!result.valid) {
62
- const details = result.errors.map(e => `${e.path}: ${e.message}`).join('; ');
66
+ const details = result.errors.map((e) => `${e.path}: ${e.message}`).join('; ');
63
67
  throw new Error(errorMessage ? `${errorMessage}: ${details}` : details);
64
68
  }
65
69
  return result.data;
@@ -79,11 +83,13 @@ export function validatePropDefinition(propDef: unknown): ValidationResult<PropD
79
83
  } catch (error) {
80
84
  return {
81
85
  valid: false,
82
- errors: [{
83
- path: 'root',
84
- message: error instanceof Error ? error.message : 'Unknown validation error',
85
- code: 'UNKNOWN',
86
- }],
86
+ errors: [
87
+ {
88
+ path: 'root',
89
+ message: error instanceof Error ? error.message : 'Unknown validation error',
90
+ code: 'UNKNOWN',
91
+ },
92
+ ],
87
93
  };
88
94
  }
89
95
  }
@@ -102,11 +108,13 @@ export function validateComponentNode(node: unknown): ValidationResult<Component
102
108
  } catch (error) {
103
109
  return {
104
110
  valid: false,
105
- errors: [{
106
- path: 'root',
107
- message: error instanceof Error ? error.message : 'Unknown validation error',
108
- code: 'UNKNOWN',
109
- }],
111
+ errors: [
112
+ {
113
+ path: 'root',
114
+ message: error instanceof Error ? error.message : 'Unknown validation error',
115
+ code: 'UNKNOWN',
116
+ },
117
+ ],
110
118
  };
111
119
  }
112
120
  }
@@ -125,11 +133,13 @@ export function validateStructuredComponentDefinition(def: unknown): ValidationR
125
133
  } catch (error) {
126
134
  return {
127
135
  valid: false,
128
- errors: [{
129
- path: 'root',
130
- message: error instanceof Error ? error.message : 'Unknown validation error',
131
- code: 'UNKNOWN',
132
- }],
136
+ errors: [
137
+ {
138
+ path: 'root',
139
+ message: error instanceof Error ? error.message : 'Unknown validation error',
140
+ code: 'UNKNOWN',
141
+ },
142
+ ],
133
143
  };
134
144
  }
135
145
  }
@@ -148,11 +158,13 @@ export function validateComponentDefinition(def: unknown): ValidationResult<Comp
148
158
  } catch (error) {
149
159
  return {
150
160
  valid: false,
151
- errors: [{
152
- path: 'root',
153
- message: error instanceof Error ? error.message : 'Unknown validation error',
154
- code: 'UNKNOWN',
155
- }],
161
+ errors: [
162
+ {
163
+ path: 'root',
164
+ message: error instanceof Error ? error.message : 'Unknown validation error',
165
+ code: 'UNKNOWN',
166
+ },
167
+ ],
156
168
  };
157
169
  }
158
170
  }
@@ -171,11 +183,13 @@ export function validatePageData(data: unknown): ValidationResult<PageData> {
171
183
  } catch (error) {
172
184
  return {
173
185
  valid: false,
174
- errors: [{
175
- path: 'root',
176
- message: error instanceof Error ? error.message : 'Unknown validation error',
177
- code: 'UNKNOWN',
178
- }],
186
+ errors: [
187
+ {
188
+ path: 'root',
189
+ message: error instanceof Error ? error.message : 'Unknown validation error',
190
+ code: 'UNKNOWN',
191
+ },
192
+ ],
179
193
  };
180
194
  }
181
195
  }
@@ -194,11 +208,13 @@ export function validatePageDataWithComponent(data: unknown): ValidationResult<P
194
208
  } catch (error) {
195
209
  return {
196
210
  valid: false,
197
- errors: [{
198
- path: 'root',
199
- message: error instanceof Error ? error.message : 'Unknown validation error',
200
- code: 'UNKNOWN',
201
- }],
211
+ errors: [
212
+ {
213
+ path: 'root',
214
+ message: error instanceof Error ? error.message : 'Unknown validation error',
215
+ code: 'UNKNOWN',
216
+ },
217
+ ],
202
218
  };
203
219
  }
204
220
  }
@@ -217,11 +233,13 @@ export function validatePageMetaData(data: unknown): ValidationResult<PageMetaDa
217
233
  } catch (error) {
218
234
  return {
219
235
  valid: false,
220
- errors: [{
221
- path: 'root',
222
- message: error instanceof Error ? error.message : 'Unknown validation error',
223
- code: 'UNKNOWN',
224
- }],
236
+ errors: [
237
+ {
238
+ path: 'root',
239
+ message: error instanceof Error ? error.message : 'Unknown validation error',
240
+ code: 'UNKNOWN',
241
+ },
242
+ ],
225
243
  };
226
244
  }
227
245
  }
@@ -230,10 +248,7 @@ export function validatePageMetaData(data: unknown): ValidationResult<PageMetaDa
230
248
  * Validate with detailed error information using a custom schema
231
249
  * @returns ValidationResult with error details on failure
232
250
  */
233
- export function validateWithDetails<T>(
234
- data: unknown,
235
- schema: ZodType<T>
236
- ): ValidationResult<T> {
251
+ export function validateWithDetails<T>(data: unknown, schema: ZodType<T>): ValidationResult<T> {
237
252
  try {
238
253
  const result = schema.safeParse(data);
239
254
  if (result.success) {
@@ -243,11 +258,13 @@ export function validateWithDetails<T>(
243
258
  } catch (error) {
244
259
  return {
245
260
  valid: false,
246
- errors: [{
247
- path: 'root',
248
- message: error instanceof Error ? error.message : 'Unknown validation error',
249
- code: 'UNKNOWN',
250
- }],
261
+ errors: [
262
+ {
263
+ path: 'root',
264
+ message: error instanceof Error ? error.message : 'Unknown validation error',
265
+ code: 'UNKNOWN',
266
+ },
267
+ ],
251
268
  };
252
269
  }
253
270
  }
@@ -270,11 +287,13 @@ export function validateCMSSchema(data: unknown): ValidationResult<CMSSchema> {
270
287
  } catch (error) {
271
288
  return {
272
289
  valid: false,
273
- errors: [{
274
- path: 'root',
275
- message: error instanceof Error ? error.message : 'Unknown validation error',
276
- code: 'UNKNOWN',
277
- }],
290
+ errors: [
291
+ {
292
+ path: 'root',
293
+ message: error instanceof Error ? error.message : 'Unknown validation error',
294
+ code: 'UNKNOWN',
295
+ },
296
+ ],
278
297
  };
279
298
  }
280
299
  }
@@ -293,11 +312,13 @@ export function validateCMSItem(data: unknown): ValidationResult<CMSItem> {
293
312
  } catch (error) {
294
313
  return {
295
314
  valid: false,
296
- errors: [{
297
- path: 'root',
298
- message: error instanceof Error ? error.message : 'Unknown validation error',
299
- code: 'UNKNOWN',
300
- }],
315
+ errors: [
316
+ {
317
+ path: 'root',
318
+ message: error instanceof Error ? error.message : 'Unknown validation error',
319
+ code: 'UNKNOWN',
320
+ },
321
+ ],
301
322
  };
302
323
  }
303
324
  }
@@ -317,13 +338,13 @@ export function validateCMSDraftItem(data: unknown): ValidationResult<CMSItem> {
317
338
  } catch (error) {
318
339
  return {
319
340
  valid: false,
320
- errors: [{
321
- path: 'root',
322
- message: error instanceof Error ? error.message : 'Unknown validation error',
323
- code: 'UNKNOWN',
324
- }],
341
+ errors: [
342
+ {
343
+ path: 'root',
344
+ message: error instanceof Error ? error.message : 'Unknown validation error',
345
+ code: 'UNKNOWN',
346
+ },
347
+ ],
325
348
  };
326
349
  }
327
350
  }
328
-
329
-
@@ -9,11 +9,13 @@ describe('viewport-unit rewrite — user-bug repro path', () => {
9
9
  // { style: { base: { backgroundColor: "var(--bg)", minHeight: "100vh" } } }
10
10
  // Studio collects this into the InteractiveStyles map keyed by the element
11
11
  // class, and generateInteractiveCSS emits the CSS that ships to the iframe.
12
- const interactiveStyles: InteractiveStyles = [{
13
- prefix: '',
14
- postfix: '',
15
- style: { base: { minHeight: '100vh', backgroundColor: 'var(--bg)' } },
16
- }];
12
+ const interactiveStyles: InteractiveStyles = [
13
+ {
14
+ prefix: '',
15
+ postfix: '',
16
+ style: { base: { minHeight: '100vh', backgroundColor: 'var(--bg)' } },
17
+ },
18
+ ];
17
19
  const map = new Map<string, InteractiveStyles>([['c_layout_root', interactiveStyles]]);
18
20
 
19
21
  const css = generateAllInteractiveCSS(map);
@@ -28,11 +30,13 @@ describe('viewport-unit rewrite — user-bug repro path', () => {
28
30
  });
29
31
 
30
32
  it('leaves non-vh values in the same rule untouched', () => {
31
- const interactiveStyles: InteractiveStyles = [{
32
- prefix: '',
33
- postfix: '',
34
- style: { base: { minHeight: '100vh', padding: '24px', color: 'red' } },
35
- }];
33
+ const interactiveStyles: InteractiveStyles = [
34
+ {
35
+ prefix: '',
36
+ postfix: '',
37
+ style: { base: { minHeight: '100vh', padding: '24px', color: 'red' } },
38
+ },
39
+ ];
36
40
  const map = new Map<string, InteractiveStyles>([['c_a', interactiveStyles]]);
37
41
  const rewritten = rewriteViewportUnits(generateAllInteractiveCSS(map));
38
42
 
@@ -3,47 +3,37 @@ import { rewriteViewportUnits } from './viewportUnits';
3
3
 
4
4
  describe('rewriteViewportUnits', () => {
5
5
  it('rewrites basic vh values in declarations', () => {
6
- expect(rewriteViewportUnits('min-height: 100vh;')).toBe(
7
- 'min-height: calc(var(--design-vh, 1vh) * 100);'
8
- );
6
+ expect(rewriteViewportUnits('min-height: 100vh;')).toBe('min-height: calc(var(--design-vh, 1vh) * 100);');
9
7
  });
10
8
 
11
9
  it('rewrites vw values', () => {
12
- expect(rewriteViewportUnits('width: 50vw;')).toBe(
13
- 'width: calc(var(--design-vw, 1vw) * 50);'
14
- );
10
+ expect(rewriteViewportUnits('width: 50vw;')).toBe('width: calc(var(--design-vw, 1vw) * 50);');
15
11
  });
16
12
 
17
13
  it('handles negative values', () => {
18
- expect(rewriteViewportUnits('top: -100vh;')).toBe(
19
- 'top: calc(var(--design-vh, 1vh) * -100);'
20
- );
14
+ expect(rewriteViewportUnits('top: -100vh;')).toBe('top: calc(var(--design-vh, 1vh) * -100);');
21
15
  });
22
16
 
23
17
  it('handles decimal values', () => {
24
- expect(rewriteViewportUnits('height: 33.5vh;')).toBe(
25
- 'height: calc(var(--design-vh, 1vh) * 33.5);'
26
- );
27
- expect(rewriteViewportUnits('height: .5vh;')).toBe(
28
- 'height: calc(var(--design-vh, 1vh) * .5);'
29
- );
18
+ expect(rewriteViewportUnits('height: 33.5vh;')).toBe('height: calc(var(--design-vh, 1vh) * 33.5);');
19
+ expect(rewriteViewportUnits('height: .5vh;')).toBe('height: calc(var(--design-vh, 1vh) * .5);');
30
20
  });
31
21
 
32
22
  it('handles small/large/dynamic viewport units', () => {
33
23
  expect(rewriteViewportUnits('h: 100svh; w: 100lvw; x: 100dvh;')).toBe(
34
- 'h: calc(var(--design-svh, 1svh) * 100); w: calc(var(--design-lvw, 1lvw) * 100); x: calc(var(--design-dvh, 1dvh) * 100);'
24
+ 'h: calc(var(--design-svh, 1svh) * 100); w: calc(var(--design-lvw, 1lvw) * 100); x: calc(var(--design-dvh, 1dvh) * 100);',
35
25
  );
36
26
  });
37
27
 
38
28
  it('preserves vh inside calc()', () => {
39
29
  expect(rewriteViewportUnits('height: calc(100vh - 20px);')).toBe(
40
- 'height: calc(calc(var(--design-vh, 1vh) * 100) - 20px);'
30
+ 'height: calc(calc(var(--design-vh, 1vh) * 100) - 20px);',
41
31
  );
42
32
  });
43
33
 
44
34
  it('rewrites vh inside transform functions', () => {
45
35
  expect(rewriteViewportUnits('transform: translateY(-100vh);')).toBe(
46
- 'transform: translateY(calc(var(--design-vh, 1vh) * -100));'
36
+ 'transform: translateY(calc(var(--design-vh, 1vh) * -100));',
47
37
  );
48
38
  });
49
39
 
@@ -60,15 +50,28 @@ describe('rewriteViewportUnits', () => {
60
50
  expect(rewriteViewportUnits('.foo-100vh-bar')).toBe('.foo-100vh-bar');
61
51
  });
62
52
 
53
+ it('preserves arbitrary-value class selectors, rewriting only the value', () => {
54
+ // `.min-h-[100svh]` is the literal class on the element; the `[` before the
55
+ // value blocks the selector rewrite, so the rule still matches and its
56
+ // design-mode viewport pin works (`svh`/`dvh`/arbitrary `vh` all hit this —
57
+ // `100vh` dodged the bug only by mapping to the bracket-free `min-h-screen`).
58
+ expect(rewriteViewportUnits('.min-h-\\[100svh\\] { min-height: 100svh; }')).toBe(
59
+ '.min-h-\\[100svh\\] { min-height: calc(var(--design-svh, 1svh) * 100); }',
60
+ );
61
+ expect(rewriteViewportUnits('.h-\\[50dvh\\] { height: calc(50dvh - 1rem); }')).toBe(
62
+ '.h-\\[50dvh\\] { height: calc(calc(var(--design-dvh, 1dvh) * 50) - 1rem); }',
63
+ );
64
+ });
65
+
63
66
  it('does NOT rewrite px / em / rem / % values', () => {
64
67
  expect(rewriteViewportUnits('padding: 10px; margin: 1em; height: 50%;')).toBe(
65
- 'padding: 10px; margin: 1em; height: 50%;'
68
+ 'padding: 10px; margin: 1em; height: 50%;',
66
69
  );
67
70
  });
68
71
 
69
72
  it('handles multiple values in one rule', () => {
70
73
  expect(rewriteViewportUnits('inset: 10vh 5vw 20vh 5vw;')).toBe(
71
- 'inset: calc(var(--design-vh, 1vh) * 10) calc(var(--design-vw, 1vw) * 5) calc(var(--design-vh, 1vh) * 20) calc(var(--design-vw, 1vw) * 5);'
74
+ 'inset: calc(var(--design-vh, 1vh) * 10) calc(var(--design-vw, 1vw) * 5) calc(var(--design-vh, 1vh) * 20) calc(var(--design-vw, 1vw) * 5);',
72
75
  );
73
76
  });
74
77
 
@@ -96,8 +99,6 @@ describe('rewriteViewportUnits', () => {
96
99
  });
97
100
 
98
101
  it('handles 0vh (zero with unit) without producing invalid output', () => {
99
- expect(rewriteViewportUnits('top: 0vh;')).toBe(
100
- 'top: calc(var(--design-vh, 1vh) * 0);'
101
- );
102
+ expect(rewriteViewportUnits('top: 0vh;')).toBe('top: calc(var(--design-vh, 1vh) * 0);');
102
103
  });
103
104
  });
@@ -26,11 +26,18 @@
26
26
  */
27
27
 
28
28
  // A number (possibly negative, with optional decimal), an optional size keyword
29
- // (s/l/d), and `vh` or `vw` as a complete token. The negative lookbehind on
30
- // `[\w-]` rejects matches that sit inside identifiers e.g. utility class
31
- // names like `.mh-100vh` keep their literal name in the selector even though
32
- // the same string appears as a value elsewhere in the stylesheet.
33
- const VIEWPORT_UNIT_RE = /(?<![\w-])(-?\d*\.?\d+)(s|l|d)?(vh|vw)\b/g;
29
+ // (s/l/d), and `vh` or `vw` as a complete token. The negative lookbehind rejects
30
+ // matches that sit inside a utility-class identifier, so a class SELECTOR keeps
31
+ // its literal name while only the declaration VALUE is rewritten:
32
+ // - `\w-` covers dash identifiers, e.g. `.mh-100vh`.
33
+ // - `\[` covers arbitrary-value classes, e.g. `.min-h-[100svh]`, where the
34
+ // `100svh` sits right after the `[`. Without this the selector would be
35
+ // rewritten to `.min-h-[calc(...)]` and no longer match the element's
36
+ // `class="min-h-[100svh]"` — the rule (and the design-mode viewport pin it
37
+ // carries) would silently break, so `min-height:100svh` couples to the
38
+ // iframe viewport and a hero blows up to the full design-frame height.
39
+ // (`100vh` dodged this only because it maps to the bracket-free `min-h-screen`.)
40
+ const VIEWPORT_UNIT_RE = /(?<![\w\-[])(-?\d*\.?\d+)(s|l|d)?(vh|vw)\b/g;
34
41
 
35
42
  /**
36
43
  * Rewrite viewport-relative lengths inside any CSS-shaped string (full
@@ -38,6 +38,7 @@ globalAny.DocumentFragment = window.DocumentFragment;
38
38
  globalAny.KeyboardEvent = window.KeyboardEvent;
39
39
  globalAny.MouseEvent = window.MouseEvent;
40
40
  globalAny.CustomEvent = window.CustomEvent;
41
+ globalAny.MessageEvent = window.MessageEvent;
41
42
  globalAny.Event = window.Event;
42
43
  globalAny.getComputedStyle = window.getComputedStyle.bind(window);
43
44
  globalAny.requestAnimationFrame = window.requestAnimationFrame.bind(window);
@@ -46,7 +47,6 @@ globalAny.MutationObserver = window.MutationObserver;
46
47
  globalAny.ResizeObserver = window.ResizeObserver;
47
48
  globalAny.IntersectionObserver = window.IntersectionObserver;
48
49
 
49
-
50
50
  // Export for manual usage if needed
51
51
  export function setupDOM() {
52
52
  // Already set up on import
@@ -39,12 +39,12 @@ export function createTypedConsoleSpy(): TypedConsoleSpy {
39
39
  };
40
40
 
41
41
  const mocks = {
42
- log: mock((...args: unknown[]) => {}),
43
- warn: mock((...args: unknown[]) => {}),
44
- error: mock((...args: unknown[]) => {}),
45
- info: mock((...args: unknown[]) => {}),
46
- debug: mock((...args: unknown[]) => {}),
47
- trace: mock((...args: unknown[]) => {}),
42
+ log: mock((..._args: unknown[]) => {}),
43
+ warn: mock((..._args: unknown[]) => {}),
44
+ error: mock((..._args: unknown[]) => {}),
45
+ info: mock((..._args: unknown[]) => {}),
46
+ debug: mock((..._args: unknown[]) => {}),
47
+ trace: mock((..._args: unknown[]) => {}),
48
48
  };
49
49
 
50
50
  // Replace console methods
@@ -77,7 +77,7 @@ export function createTypedConsoleSpy(): TypedConsoleSpy {
77
77
  return arg.test(call[i] as string);
78
78
  }
79
79
  return call[i] === arg;
80
- })
80
+ }),
81
81
  );
82
82
  },
83
83
  clearCalls: () => {
@@ -102,9 +102,7 @@ export function suppressConsole(): () => void {
102
102
  /**
103
103
  * Capture console output for specific methods only
104
104
  */
105
- export function captureConsole(
106
- methods: ConsoleMethods[]
107
- ): TypedConsoleSpy & { only: ConsoleMethods[] } {
105
+ export function captureConsole(methods: ConsoleMethods[]): TypedConsoleSpy & { only: ConsoleMethods[] } {
108
106
  const spy = createTypedConsoleSpy();
109
107
 
110
108
  // Restore methods we don't want to capture
@@ -112,7 +110,7 @@ export function captureConsole(
112
110
  for (const method of allMethods) {
113
111
  if (!methods.includes(method)) {
114
112
  // Restore this method to original
115
- const original = {
113
+ const _original = {
116
114
  log: console.log,
117
115
  warn: console.warn,
118
116
  error: console.error,
@@ -187,9 +185,7 @@ export function createPassthroughConsoleSpy(): TypedConsoleSpy {
187
185
  },
188
186
  wasCalledWith: (method: ConsoleMethods, ...args: unknown[]) => {
189
187
  const calls = mocks[method] as unknown as { mock: { calls: unknown[][] } };
190
- return (calls.mock?.calls || []).some((call) =>
191
- args.every((arg, i) => call[i] === arg)
192
- );
188
+ return (calls.mock?.calls || []).some((call) => args.every((arg, i) => call[i] === arg));
193
189
  },
194
190
  clearCalls: () => {
195
191
  for (const method of Object.values(mocks)) {
@@ -59,9 +59,7 @@ export function createMockDOMRect(overrides?: Partial<MockDOMRect>): DOMRect {
59
59
 
60
60
  // ========== CSSStyleDeclaration ==========
61
61
 
62
- export function createMockCSSStyleDeclaration(
63
- initial?: Partial<CSSStyleDeclaration>
64
- ): CSSStyleDeclaration {
62
+ export function createMockCSSStyleDeclaration(initial?: Partial<CSSStyleDeclaration>): CSSStyleDeclaration {
65
63
  const styles: Record<string, string> = {};
66
64
 
67
65
  // Copy initial values
@@ -74,7 +72,7 @@ export function createMockCSSStyleDeclaration(
74
72
  }
75
73
 
76
74
  return new Proxy(styles as unknown as CSSStyleDeclaration, {
77
- get(target, prop: string) {
75
+ get(_target, prop: string) {
78
76
  if (prop === 'setProperty') {
79
77
  return (name: string, value: string) => {
80
78
  styles[name] = value;
@@ -139,12 +137,8 @@ export interface TypedMockHTMLElement {
139
137
  _eventListeners: Map<string, EventListener[]>;
140
138
  }
141
139
 
142
- export function createTypedMockHTMLElement(
143
- options: MockHTMLElementOptions = {}
144
- ): TypedMockHTMLElement {
145
- const attributes = new Map<string, string>(
146
- Object.entries(options.attributes || {})
147
- );
140
+ export function createTypedMockHTMLElement(options: MockHTMLElementOptions = {}): TypedMockHTMLElement {
141
+ const attributes = new Map<string, string>(Object.entries(options.attributes || {}));
148
142
  const eventListeners = new Map<string, EventListener[]>();
149
143
  const childNodes: Node[] = [];
150
144
 
@@ -185,7 +179,9 @@ export function createTypedMockHTMLElement(
185
179
  }),
186
180
  dispatchEvent: mock((event: Event) => {
187
181
  const listeners = eventListeners.get(event.type);
188
- listeners?.forEach((l) => l(event));
182
+ listeners?.forEach((l) => {
183
+ l(event);
184
+ });
189
185
  return true;
190
186
  }),
191
187
 
@@ -248,9 +244,7 @@ export interface TypedMockLocation {
248
244
  toString: () => string;
249
245
  }
250
246
 
251
- export function createTypedMockLocation(
252
- overrides?: Partial<Location>
253
- ): TypedMockLocation {
247
+ export function createTypedMockLocation(overrides?: Partial<Location>): TypedMockLocation {
254
248
  const base = {
255
249
  href: 'http://localhost/',
256
250
  pathname: '/',
@@ -333,9 +327,7 @@ export interface TypedMockWindow {
333
327
  _eventListeners: Map<string, EventListener[]>;
334
328
  }
335
329
 
336
- export function createTypedMockWindow(
337
- options: MockWindowOptions = {}
338
- ): TypedMockWindow {
330
+ export function createTypedMockWindow(options: MockWindowOptions = {}): TypedMockWindow {
339
331
  const eventListeners = new Map<string, EventListener[]>();
340
332
  const location = createTypedMockLocation(options.location);
341
333
  const history = createTypedMockHistory();
@@ -361,7 +353,9 @@ export function createTypedMockWindow(
361
353
  }),
362
354
  dispatchEvent: mock((event: Event) => {
363
355
  const listeners = eventListeners.get(event.type);
364
- listeners?.forEach((l) => l(event));
356
+ listeners?.forEach((l) => {
357
+ l(event);
358
+ });
365
359
  return true;
366
360
  }),
367
361
 
@@ -400,9 +394,7 @@ export interface TypedMockDocument {
400
394
  _eventListeners: Map<string, EventListener[]>;
401
395
  }
402
396
 
403
- export function createTypedMockDocument(
404
- options: MockDocumentOptions = {}
405
- ): TypedMockDocument {
397
+ export function createTypedMockDocument(options: MockDocumentOptions = {}): TypedMockDocument {
406
398
  const registeredElements = new Map<string, TypedMockHTMLElement>();
407
399
  const createdElements: TypedMockHTMLElement[] = [];
408
400
  const eventListeners = new Map<string, EventListener[]>();
@@ -439,7 +431,9 @@ export function createTypedMockDocument(
439
431
  }),
440
432
  dispatchEvent: mock((event: Event) => {
441
433
  const listeners = eventListeners.get(event.type);
442
- listeners?.forEach((l) => l(event));
434
+ listeners?.forEach((l) => {
435
+ l(event);
436
+ });
443
437
  return true;
444
438
  }),
445
439
 
@@ -465,7 +459,7 @@ export interface DomMockInstallation {
465
459
  * Install mock DOM globally and return cleanup function
466
460
  */
467
461
  export function installMockDom(
468
- options: { window?: MockWindowOptions; document?: MockDocumentOptions } = {}
462
+ options: { window?: MockWindowOptions; document?: MockDocumentOptions } = {},
469
463
  ): DomMockInstallation {
470
464
  const originalWindow = (globalThis as any).window;
471
465
  const originalDocument = (globalThis as any).document;