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
@@ -2,21 +2,85 @@
2
2
  * Tests for htmlGenerator - SSR HTML document generation
3
3
  */
4
4
 
5
- import { describe, test, expect, mock, beforeEach } from 'bun:test';
5
+ import { describe, test, expect, mock, beforeEach, afterAll } from 'bun:test';
6
6
 
7
7
  // ---- Mock all dependencies before importing the module under test ----
8
8
 
9
- const mockRenderPageSSR = mock(async () => ({
10
- html: '<div>Test Content</div>',
11
- meta: '<title>Test Page</title>',
12
- title: 'Test Page',
13
- javascript: '',
14
- componentCSS: '',
15
- locale: 'en',
16
- interactiveStylesMap: new Map(),
17
- preloadImages: [],
18
- neededCollections: new Set<string>(),
19
- }));
9
+ // bun's mock.module() patches are PROCESS-GLOBAL and persist across test
10
+ // files in the same run. Snapshot the real module exports here (imports are
11
+ // evaluated before this module body runs, so these capture the originals)
12
+ // and restore them in afterAll so later test files (e.g.
13
+ // routes/api/colors.test.ts, services/configService.test.ts) see the real
14
+ // implementations.
15
+ import * as realSsrRenderer from './ssrRenderer';
16
+ import * as realConfigServiceModule from '../services/configService';
17
+ import * as realJsonLoader from '../jsonLoader';
18
+ import * as realFontLoader from '../../shared/fontLoader';
19
+ import * as realColorServiceModule from '../services/ColorService';
20
+ import * as realCssGenerator from '../cssGenerator';
21
+ import * as realCssGeneration from '../../shared/cssGeneration';
22
+ import * as realValidateStyleCoverage from '../validateStyleCoverage';
23
+ import * as realFormHandler from '../../client/scripts/formHandler';
24
+ import * as realMenoFilterScript from '../../client/meno-filter/script.generated';
25
+ import * as realClientDataInjector from './clientDataInjector';
26
+ import * as realLibraryLoader from '../../shared/libraryLoader';
27
+
28
+ const REAL_SSR_RENDERER = { ...realSsrRenderer };
29
+ const REAL_CONFIG_SERVICE_MODULE = { ...realConfigServiceModule };
30
+ const REAL_JSON_LOADER = { ...realJsonLoader };
31
+ const REAL_FONT_LOADER = { ...realFontLoader };
32
+ const REAL_COLOR_SERVICE_MODULE = { ...realColorServiceModule };
33
+ const REAL_CSS_GENERATOR = { ...realCssGenerator };
34
+ const REAL_CSS_GENERATION = { ...realCssGeneration };
35
+ const REAL_VALIDATE_STYLE_COVERAGE = { ...realValidateStyleCoverage };
36
+ const REAL_FORM_HANDLER = { ...realFormHandler };
37
+ const REAL_MENO_FILTER_SCRIPT = { ...realMenoFilterScript };
38
+ const REAL_CLIENT_DATA_INJECTOR = { ...realClientDataInjector };
39
+ const REAL_LIBRARY_LOADER = { ...realLibraryLoader };
40
+
41
+ afterAll(() => {
42
+ mock.module('./ssrRenderer', () => REAL_SSR_RENDERER);
43
+ mock.module('../services/configService', () => REAL_CONFIG_SERVICE_MODULE);
44
+ mock.module('../jsonLoader', () => REAL_JSON_LOADER);
45
+ mock.module('../../shared/fontLoader', () => REAL_FONT_LOADER);
46
+ mock.module('../services/ColorService', () => REAL_COLOR_SERVICE_MODULE);
47
+ mock.module('../cssGenerator', () => REAL_CSS_GENERATOR);
48
+ mock.module('../../shared/cssGeneration', () => REAL_CSS_GENERATION);
49
+ mock.module('../validateStyleCoverage', () => REAL_VALIDATE_STYLE_COVERAGE);
50
+ mock.module('../../client/scripts/formHandler', () => REAL_FORM_HANDLER);
51
+ mock.module('../../client/meno-filter/script.generated', () => REAL_MENO_FILTER_SCRIPT);
52
+ mock.module('./clientDataInjector', () => REAL_CLIENT_DATA_INJECTOR);
53
+ mock.module('../../shared/libraryLoader', () => REAL_LIBRARY_LOADER);
54
+ });
55
+
56
+ // Explicit result type for the renderPageSSR mock: keeps array/Map fields
57
+ // wide (PreloadImage[] instead of the inferred never[]) so per-test
58
+ // mockImplementation calls with non-empty fixtures typecheck.
59
+ type MockRenderPageSSRResult = {
60
+ html: string;
61
+ meta: string;
62
+ title: string;
63
+ javascript: string;
64
+ componentCSS: string;
65
+ locale: string;
66
+ interactiveStylesMap: Map<string, InteractiveStyles>;
67
+ preloadImages: PreloadImage[];
68
+ neededCollections: Set<string>;
69
+ };
70
+
71
+ const mockRenderPageSSR = mock(
72
+ async (): Promise<MockRenderPageSSRResult> => ({
73
+ html: '<div>Test Content</div>',
74
+ meta: '<title>Test Page</title>',
75
+ title: 'Test Page',
76
+ javascript: '',
77
+ componentCSS: '',
78
+ locale: 'en',
79
+ interactiveStylesMap: new Map(),
80
+ preloadImages: [],
81
+ neededCollections: new Set<string>(),
82
+ }),
83
+ );
20
84
 
21
85
  mock.module('./ssrRenderer', () => ({
22
86
  renderPageSSR: mockRenderPageSSR,
@@ -97,7 +161,8 @@ mock.module('../../client/meno-filter/script.generated', () => ({
97
161
  }));
98
162
 
99
163
  const mockGenerateAllInlineDataScripts = mock(() => '');
100
- const mockPrepareClientData = mock(() => null);
164
+ // Wide return type so tests can mockReturnValue a real ClientDataCollection.
165
+ const mockPrepareClientData = mock((): ClientDataCollection | null => null);
101
166
 
102
167
  mock.module('./clientDataInjector', () => ({
103
168
  generateAllInlineDataScripts: mockGenerateAllInlineDataScripts,
@@ -111,7 +176,9 @@ mock.module('../../shared/libraryLoader', () => ({
111
176
 
112
177
  // Now import the module under test
113
178
  import { generateSSRHTML } from './htmlGenerator';
114
- import type { GenerateSSRHTMLOptions, SSRHTMLResult } from './htmlGenerator';
179
+ import type { PreloadImage } from './ssrRenderer';
180
+ import type { ClientDataCollection } from './clientDataInjector';
181
+ import type { InteractiveStyles } from '../../shared/types';
115
182
 
116
183
  // ---- Fixtures ----
117
184
 
@@ -223,7 +290,8 @@ describe('generateSSRHTML', () => {
223
290
  describe('CSS injection', () => {
224
291
  test('should contain a style tag with base reset CSS', async () => {
225
292
  const result = (await generateSSRHTML(minimalPage)) as string;
226
- expect(result).toContain('<style>');
293
+ // The main style tag carries id="meno-styles" so hot reload can patch it in place
294
+ expect(result).toContain('<style id="meno-styles">');
227
295
  expect(result).toContain('</style>');
228
296
  // base reset includes the universal selector
229
297
  expect(result).toContain('box-sizing: border-box');
@@ -259,9 +327,7 @@ describe('generateSSRHTML', () => {
259
327
  neededCollections: new Set<string>(),
260
328
  }));
261
329
 
262
- const result = (await generateSSRHTML(
263
- minimalPage, {}, '/', '', true
264
- )) as string;
330
+ const result = (await generateSSRHTML(minimalPage, {}, '/', '', true)) as string;
265
331
 
266
332
  // Minified CSS should not have unnecessary whitespace
267
333
  expect(result).not.toContain('.test {\n color: blue;\n');
@@ -309,8 +375,8 @@ describe('generateSSRHTML', () => {
309
375
  });
310
376
 
311
377
  test('should include interactive CSS when interactiveStylesMap is non-empty', async () => {
312
- const stylesMap = new Map();
313
- stylesMap.set('btn-hover', { hover: { backgroundColor: 'blue' } });
378
+ const stylesMap = new Map<string, InteractiveStyles>();
379
+ stylesMap.set('btn-hover', [{ postfix: ':hover', style: { backgroundColor: 'blue' } }]);
314
380
 
315
381
  mockRenderPageSSR.mockImplementation(async () => ({
316
382
  html: '<div>Content</div>',
@@ -334,9 +400,7 @@ describe('generateSSRHTML', () => {
334
400
 
335
401
  describe('JavaScript handling', () => {
336
402
  test('should not include client script in production mode', async () => {
337
- const result = (await generateSSRHTML(
338
- minimalPage, {}, '/', '', true
339
- )) as string;
403
+ const result = (await generateSSRHTML(minimalPage, {}, '/', '', true)) as string;
340
404
  expect(result).not.toContain('client-router.tsx');
341
405
  });
342
406
 
@@ -397,7 +461,16 @@ describe('generateSSRHTML', () => {
397
461
  }));
398
462
 
399
463
  const result = (await generateSSRHTML(
400
- minimalPage, {}, '/', '', false, undefined, undefined, undefined, undefined, '/_scripts/abc123.js'
464
+ minimalPage,
465
+ {},
466
+ '/',
467
+ '',
468
+ false,
469
+ undefined,
470
+ undefined,
471
+ undefined,
472
+ undefined,
473
+ '/_scripts/abc123.js',
401
474
  )) as string;
402
475
 
403
476
  expect(result).toContain('<script src="/_scripts/abc123.js" defer></script>');
@@ -418,9 +491,9 @@ describe('generateSSRHTML', () => {
418
491
  }));
419
492
 
420
493
  const result = await generateSSRHTML({
421
- pageData: minimalPage as any,
494
+ pageData: minimalPage,
422
495
  returnSeparateJS: true,
423
- } as any) as SSRHTMLResult;
496
+ });
424
497
 
425
498
  expect(result).toHaveProperty('html');
426
499
  expect(result).toHaveProperty('javascript');
@@ -432,9 +505,9 @@ describe('generateSSRHTML', () => {
432
505
 
433
506
  test('should return null javascript when no JS is generated with returnSeparateJS', async () => {
434
507
  const result = await generateSSRHTML({
435
- pageData: minimalPage as any,
508
+ pageData: minimalPage,
436
509
  returnSeparateJS: true,
437
- } as any) as SSRHTMLResult;
510
+ });
438
511
 
439
512
  expect(result.javascript).toBeNull();
440
513
  });
@@ -444,7 +517,7 @@ describe('generateSSRHTML', () => {
444
517
  // Should still have the client router, but no <script> with inline JS
445
518
  const scriptTags = result.match(/<script[^>]*>[\s\S]*?<\/script>/g) || [];
446
519
  const inlineScriptTags = scriptTags.filter(
447
- (s: string) => !s.includes('src=') && !s.includes('type="application/json"')
520
+ (s: string) => !s.includes('src=') && !s.includes('type="application/json"'),
448
521
  );
449
522
  expect(inlineScriptTags.length).toBe(0);
450
523
  });
@@ -573,7 +646,7 @@ describe('generateSSRHTML', () => {
573
646
  });
574
647
 
575
648
  mockGenerateAllInlineDataScripts.mockReturnValue(
576
- '<script type="application/json" id="meno-cms-posts">[{"_id":"1","title":"Test"}]</script>'
649
+ '<script type="application/json" id="meno-cms-posts">[{"_id":"1","title":"Test"}]</script>',
577
650
  );
578
651
 
579
652
  const result = (await generateSSRHTML({
@@ -763,7 +836,7 @@ describe('generateSSRHTML', () => {
763
836
  // and updates attrs/classes/text in place, so event handlers, DOM identity
764
837
  // and JS-built nodes survive.
765
838
  expect(result).toContain('softSync(or,nr,lastSrvRoot)');
766
- expect(result).toContain('querySelectorAll(\'[data-element-path]\')');
839
+ expect(result).toContain("querySelectorAll('[data-element-path]')");
767
840
  });
768
841
 
769
842
  test('preserves runtime-added classes against cached server snapshot', async () => {
@@ -823,16 +896,14 @@ describe('generateSSRHTML', () => {
823
896
  })) as string;
824
897
  // Must not contain the old unconditional pattern where oscr is removed
825
898
  // outside of a hash-mismatch branch.
826
- expect(result).not.toContain('if(nscr){var src=nscr.getAttribute(\'src\');if(oscr)oscr.remove()');
899
+ expect(result).not.toContain("if(nscr){var src=nscr.getAttribute('src');if(oscr)oscr.remove()");
827
900
  });
828
901
  });
829
902
  });
830
903
 
831
904
  describe('Options object vs legacy positional args', () => {
832
905
  test('should work with legacy positional arguments', async () => {
833
- const result = (await generateSSRHTML(
834
- minimalPage, {}, '/about', '', false, 'en'
835
- )) as string;
906
+ const result = (await generateSSRHTML(minimalPage, {}, '/about', '', false, 'en')) as string;
836
907
 
837
908
  expect(typeof result).toBe('string');
838
909
  expect(result).toContain('<!DOCTYPE html>');
@@ -872,6 +943,8 @@ describe('generateSSRHTML', () => {
872
943
  undefined, // slugMappings
873
944
  undefined, // cmsContext
874
945
  undefined, // cmsService
946
+ false, // isProductionBuild (defaults to false)
947
+ false, // injectEditorAttrs (defaults to false)
875
948
  );
876
949
  });
877
950
  });
@@ -967,10 +1040,10 @@ describe('generateSSRHTML', () => {
967
1040
  neededCollections: new Set<string>(),
968
1041
  }));
969
1042
 
970
- const result = (await generateSSRHTML({
971
- pageData: minimalPage as any,
1043
+ const result = await generateSSRHTML({
1044
+ pageData: minimalPage,
972
1045
  returnSeparateJS: true,
973
- } as any)) as SSRHTMLResult;
1046
+ });
974
1047
 
975
1048
  expect(result.javascript).toContain('window.__MENO_CONFIG__=');
976
1049
  expect(result.javascript).toContain('console.log("test")');
@@ -1030,7 +1103,7 @@ describe('generateSSRHTML', () => {
1030
1103
  describe('Font preload tags', () => {
1031
1104
  test('should include font preload tags when present', async () => {
1032
1105
  mockGenerateFontPreloadTags.mockReturnValue(
1033
- '<link rel="preload" href="/font.woff2" as="font" type="font/woff2" crossorigin>'
1106
+ '<link rel="preload" href="/font.woff2" as="font" type="font/woff2" crossorigin>',
1034
1107
  );
1035
1108
 
1036
1109
  const result = (await generateSSRHTML(minimalPage)) as string;
@@ -1064,13 +1137,16 @@ describe('generateSSRHTML', () => {
1064
1137
 
1065
1138
  mockPrepareClientData.mockReturnValue({
1066
1139
  collection: 'categories',
1067
- items: [{ _id: '1', name: 'Tech' }, { _id: '2', name: 'Design' }],
1140
+ items: [
1141
+ { _id: '1', name: 'Tech' },
1142
+ { _id: '2', name: 'Design' },
1143
+ ],
1068
1144
  config: { enabled: true, strategy: 'inline' as const },
1069
1145
  strategy: 'inline' as const,
1070
1146
  });
1071
1147
 
1072
1148
  mockGenerateAllInlineDataScripts.mockReturnValue(
1073
- '<script type="application/json" id="meno-cms-categories">[{"_id":"1"},{"_id":"2"}]</script>'
1149
+ '<script type="application/json" id="meno-cms-categories">[{"_id":"1"},{"_id":"2"}]</script>',
1074
1150
  );
1075
1151
 
1076
1152
  await generateSSRHTML({
@@ -1111,15 +1187,15 @@ describe('generateSSRHTML', () => {
1111
1187
  });
1112
1188
 
1113
1189
  console.warn = originalWarn;
1114
- expect(warnings.some(w => w.includes('events'))).toBe(true);
1115
- expect(warnings.some(w => w.includes('clientData.enabled'))).toBe(true);
1190
+ expect(warnings.some((w) => w.includes('events'))).toBe(true);
1191
+ expect(warnings.some((w) => w.includes('clientData.enabled'))).toBe(true);
1116
1192
  });
1117
1193
  });
1118
1194
 
1119
1195
  describe('Base reset CSS content', () => {
1120
1196
  test('should include body font-family reset', async () => {
1121
1197
  const result = (await generateSSRHTML(minimalPage)) as string;
1122
- expect(result).toContain("font-family: -apple-system");
1198
+ expect(result).toContain('font-family: -apple-system');
1123
1199
  });
1124
1200
 
1125
1201
  test('should include button reset styles', async () => {