meno-core 1.0.53 → 1.0.54

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 (387) hide show
  1. package/.claude/settings.local.json +1 -3
  2. package/bin/cli.ts +48 -57
  3. package/build-astro.ts +131 -113
  4. package/build-next.ts +109 -96
  5. package/build-static.test.ts +39 -10
  6. package/build-static.ts +120 -122
  7. package/dist/bin/cli.js +34 -38
  8. package/dist/bin/cli.js.map +2 -2
  9. package/dist/build-static.js +12 -11
  10. package/dist/chunks/chunk-2AR55GYH.js +42 -0
  11. package/dist/chunks/chunk-2AR55GYH.js.map +7 -0
  12. package/dist/chunks/{chunk-IGYR22T6.js → chunk-2FN4UOVO.js} +512 -239
  13. package/dist/chunks/chunk-2FN4UOVO.js.map +7 -0
  14. package/dist/chunks/chunk-3XER4E5W.js +168 -0
  15. package/dist/chunks/chunk-3XER4E5W.js.map +7 -0
  16. package/dist/chunks/{chunk-X754AHS5.js → chunk-5ETZFREW.js} +9 -12
  17. package/dist/chunks/chunk-5ETZFREW.js.map +7 -0
  18. package/dist/chunks/{chunk-2MHDV5BF.js → chunk-7E4IF5L7.js} +15 -21
  19. package/dist/chunks/chunk-7E4IF5L7.js.map +7 -0
  20. package/dist/chunks/{chunk-JGWFTO6P.js → chunk-7HWQUVTU.js} +1578 -1349
  21. package/dist/chunks/chunk-7HWQUVTU.js.map +7 -0
  22. package/dist/chunks/{chunk-O3NAGJP4.js → chunk-AE3QK5QW.js} +110 -21
  23. package/dist/chunks/chunk-AE3QK5QW.js.map +7 -0
  24. package/dist/chunks/{chunk-GZHGVVW3.js → chunk-F6KTJYGV.js} +7 -7
  25. package/dist/chunks/chunk-F6KTJYGV.js.map +7 -0
  26. package/dist/chunks/{chunk-WQFG7PAH.js → chunk-FZITJSSS.js} +2 -6
  27. package/dist/chunks/chunk-FZITJSSS.js.map +7 -0
  28. package/dist/chunks/{chunk-QB2LNO4W.js → chunk-GSYYA5GX.js} +2 -2
  29. package/dist/chunks/chunk-GSYYA5GX.js.map +7 -0
  30. package/dist/chunks/{chunk-YBLHKYFF.js → chunk-HIZMY3EP.js} +1 -1
  31. package/dist/chunks/chunk-HIZMY3EP.js.map +7 -0
  32. package/dist/chunks/{chunk-AZQYF6KE.js → chunk-I2WEGYA7.js} +41 -176
  33. package/dist/chunks/chunk-I2WEGYA7.js.map +7 -0
  34. package/dist/chunks/{chunk-I7YIGZXT.js → chunk-JNO3CNLJ.js} +6 -9
  35. package/dist/chunks/chunk-JNO3CNLJ.js.map +7 -0
  36. package/dist/chunks/{chunk-UB44F4Z2.js → chunk-NVRBTSQG.js} +2 -4
  37. package/dist/chunks/chunk-NVRBTSQG.js.map +7 -0
  38. package/dist/chunks/{chunk-JGP5A3Y5.js → chunk-Q4OBWKXG.js} +40 -33
  39. package/dist/chunks/chunk-Q4OBWKXG.js.map +7 -0
  40. package/dist/chunks/{chunk-R6XHAFBF.js → chunk-QTE32Y53.js} +250 -242
  41. package/dist/chunks/chunk-QTE32Y53.js.map +7 -0
  42. package/dist/chunks/{chunk-H3GJ4H2U.js → chunk-STDY3OVM.js} +214 -85
  43. package/dist/chunks/chunk-STDY3OVM.js.map +7 -0
  44. package/dist/chunks/configService-PRJZF7Y6.js +14 -0
  45. package/dist/chunks/{constants-STK2YBIW.js → constants-KIQEYMAM.js} +2 -2
  46. package/dist/chunks/{fs-JGINUXGL.js → fs-ZI5JEU7V.js} +2 -2
  47. package/dist/entries/server-router.js +14 -19
  48. package/dist/entries/server-router.js.map +2 -2
  49. package/dist/lib/client/index.js +638 -332
  50. package/dist/lib/client/index.js.map +2 -2
  51. package/dist/lib/server/index.js +177 -235
  52. package/dist/lib/server/index.js.map +2 -2
  53. package/dist/lib/shared/index.js +80 -44
  54. package/dist/lib/shared/index.js.map +2 -2
  55. package/dist/lib/shared/richtext/index.js +1 -1
  56. package/dist/lib/test-utils/index.js +38 -60
  57. package/dist/lib/test-utils/index.js.map +2 -2
  58. package/entries/client-router.tsx +10 -8
  59. package/entries/server-router.tsx +1 -7
  60. package/lib/client/ClientInitializer.ts +8 -8
  61. package/lib/client/ErrorBoundary.test.tsx +146 -143
  62. package/lib/client/ErrorBoundary.tsx +175 -127
  63. package/lib/client/componentRegistry.test.ts +96 -108
  64. package/lib/client/componentRegistry.ts +1 -2
  65. package/lib/client/contexts/ThemeContext.tsx +3 -2
  66. package/lib/client/core/ComponentBuilder.test.ts +513 -560
  67. package/lib/client/core/ComponentBuilder.ts +318 -146
  68. package/lib/client/core/ComponentRenderer.test.tsx +1 -2
  69. package/lib/client/core/ComponentRenderer.tsx +46 -33
  70. package/lib/client/core/builders/embedBuilder.ts +241 -53
  71. package/lib/client/core/builders/linkBuilder.ts +71 -44
  72. package/lib/client/core/builders/linkNodeBuilder.ts +78 -53
  73. package/lib/client/core/builders/listBuilder.ts +115 -86
  74. package/lib/client/core/builders/localeListBuilder.ts +95 -60
  75. package/lib/client/core/builders/types.ts +5 -5
  76. package/lib/client/core/cmsTemplateProcessor.ts +7 -7
  77. package/lib/client/elementRegistry.ts +3 -3
  78. package/lib/client/fontFamiliesService.test.ts +2 -10
  79. package/lib/client/fontFamiliesService.ts +3 -3
  80. package/lib/client/hmr/HMRManager.tsx +8 -0
  81. package/lib/client/hmrCssReload.ts +14 -8
  82. package/lib/client/hmrWebSocket.ts +9 -14
  83. package/lib/client/hooks/useColorVariables.test.ts +21 -21
  84. package/lib/client/hooks/useColorVariables.ts +12 -10
  85. package/lib/client/hooks/usePropertyAutocomplete.ts +3 -5
  86. package/lib/client/hooks/useVariables.ts +4 -4
  87. package/lib/client/hydration/HydrationUtils.test.ts +24 -25
  88. package/lib/client/hydration/HydrationUtils.ts +3 -4
  89. package/lib/client/i18nConfigService.test.ts +2 -7
  90. package/lib/client/i18nConfigService.ts +2 -2
  91. package/lib/client/meno-filter/MenoFilter.test.ts +19 -21
  92. package/lib/client/meno-filter/MenoFilter.ts +5 -9
  93. package/lib/client/meno-filter/bindings.ts +15 -40
  94. package/lib/client/meno-filter/init.ts +1 -1
  95. package/lib/client/meno-filter/renderer.ts +23 -29
  96. package/lib/client/meno-filter/script.generated.ts +1 -3
  97. package/lib/client/meno-filter/ui.ts +3 -5
  98. package/lib/client/meno-filter/updates.ts +15 -21
  99. package/lib/client/navigation.test.ts +159 -159
  100. package/lib/client/navigation.ts +0 -1
  101. package/lib/client/responsiveStyleResolver.test.ts +230 -228
  102. package/lib/client/responsiveStyleResolver.ts +13 -16
  103. package/lib/client/routing/RouteLoader.test.ts +23 -24
  104. package/lib/client/routing/RouteLoader.ts +22 -35
  105. package/lib/client/routing/Router.tsx +31 -3
  106. package/lib/client/scripts/ScriptExecutor.test.ts +157 -158
  107. package/lib/client/scripts/ScriptExecutor.ts +15 -33
  108. package/lib/client/services/PrefetchService.test.ts +2 -2
  109. package/lib/client/services/PrefetchService.ts +10 -24
  110. package/lib/client/styleProcessor.test.ts +9 -9
  111. package/lib/client/styleProcessor.ts +18 -15
  112. package/lib/client/styles/StyleInjector.test.ts +122 -115
  113. package/lib/client/styles/StyleInjector.ts +9 -6
  114. package/lib/client/styles/UtilityClassCollector.ts +19 -26
  115. package/lib/client/styles/cspNonce.test.ts +2 -5
  116. package/lib/client/templateEngine.test.ts +554 -482
  117. package/lib/client/templateEngine.ts +200 -64
  118. package/lib/client/theme.ts +0 -1
  119. package/lib/client/utils/toast.ts +0 -1
  120. package/lib/server/__integration__/api-routes.test.ts +8 -4
  121. package/lib/server/__integration__/cms-integration.test.ts +1 -4
  122. package/lib/server/__integration__/server-lifecycle.test.ts +2 -5
  123. package/lib/server/__integration__/ssr-rendering.test.ts +47 -37
  124. package/lib/server/__integration__/static-assets.test.ts +1 -1
  125. package/lib/server/__integration__/test-helpers.ts +84 -70
  126. package/lib/server/ab/generateFunctions.ts +12 -10
  127. package/lib/server/astro/cmsPageEmitter.ts +23 -38
  128. package/lib/server/astro/componentEmitter.ts +25 -36
  129. package/lib/server/astro/cssCollector.ts +10 -26
  130. package/lib/server/astro/nodeToAstro.test.ts +1750 -30
  131. package/lib/server/astro/nodeToAstro.ts +198 -187
  132. package/lib/server/astro/normalizeOrphanTemplateProps.test.ts +105 -109
  133. package/lib/server/astro/normalizeOrphanTemplateProps.ts +4 -12
  134. package/lib/server/astro/pageEmitter.ts +9 -13
  135. package/lib/server/astro/tailwindMapper.test.ts +10 -37
  136. package/lib/server/astro/tailwindMapper.ts +33 -40
  137. package/lib/server/astro/templateTransformer.ts +14 -17
  138. package/lib/server/createServer.ts +5 -17
  139. package/lib/server/cssGenerator.test.ts +35 -44
  140. package/lib/server/cssGenerator.ts +6 -17
  141. package/lib/server/fileWatcher.test.ts +124 -10
  142. package/lib/server/fileWatcher.ts +124 -118
  143. package/lib/server/index.ts +7 -1
  144. package/lib/server/jsonLoader.test.ts +39 -2
  145. package/lib/server/jsonLoader.ts +33 -31
  146. package/lib/server/middleware/cors.test.ts +20 -20
  147. package/lib/server/middleware/cors.ts +28 -4
  148. package/lib/server/middleware/errorHandler.test.ts +5 -3
  149. package/lib/server/middleware/errorHandler.ts +3 -8
  150. package/lib/server/middleware/index.ts +0 -1
  151. package/lib/server/middleware/logger.test.ts +7 -5
  152. package/lib/server/middleware/logger.ts +10 -22
  153. package/lib/server/pageCache.test.ts +76 -77
  154. package/lib/server/pageCache.ts +0 -1
  155. package/lib/server/projectContext.ts +4 -3
  156. package/lib/server/providers/fileSystemCMSProvider.test.ts +124 -95
  157. package/lib/server/providers/fileSystemCMSProvider.ts +35 -20
  158. package/lib/server/providers/fileSystemPageProvider.test.ts +84 -0
  159. package/lib/server/providers/fileSystemPageProvider.ts +31 -12
  160. package/lib/server/routes/api/cms.test.ts +26 -14
  161. package/lib/server/routes/api/cms.ts +9 -14
  162. package/lib/server/routes/api/components.ts +30 -34
  163. package/lib/server/routes/api/config.ts +0 -1
  164. package/lib/server/routes/api/core-routes.ts +47 -74
  165. package/lib/server/routes/api/functions.ts +8 -16
  166. package/lib/server/routes/api/index.ts +3 -6
  167. package/lib/server/routes/api/pages.ts +8 -11
  168. package/lib/server/routes/api/shared.test.ts +1 -1
  169. package/lib/server/routes/api/shared.ts +12 -9
  170. package/lib/server/routes/api/variables.test.ts +1 -3
  171. package/lib/server/routes/api/variables.ts +1 -1
  172. package/lib/server/routes/index.ts +23 -26
  173. package/lib/server/routes/pages.ts +34 -29
  174. package/lib/server/routes/static.ts +16 -4
  175. package/lib/server/runtime/bundler.ts +47 -32
  176. package/lib/server/runtime/fs.ts +3 -13
  177. package/lib/server/runtime/httpServer.ts +5 -9
  178. package/lib/server/services/ColorService.ts +32 -27
  179. package/lib/server/services/EnumService.test.ts +2 -6
  180. package/lib/server/services/EnumService.ts +7 -2
  181. package/lib/server/services/VariableService.test.ts +1 -5
  182. package/lib/server/services/VariableService.ts +6 -1
  183. package/lib/server/services/cmsService.test.ts +116 -78
  184. package/lib/server/services/cmsService.ts +24 -54
  185. package/lib/server/services/componentService.test.ts +122 -36
  186. package/lib/server/services/componentService.ts +54 -38
  187. package/lib/server/services/configService.test.ts +9 -31
  188. package/lib/server/services/configService.ts +20 -27
  189. package/lib/server/services/fileWatcherService.ts +40 -6
  190. package/lib/server/services/index.ts +0 -1
  191. package/lib/server/services/pageService.test.ts +1 -3
  192. package/lib/server/services/pageService.ts +14 -13
  193. package/lib/server/ssr/attributeBuilder.ts +16 -6
  194. package/lib/server/ssr/buildErrorOverlay.ts +11 -12
  195. package/lib/server/ssr/clientDataInjector.ts +7 -21
  196. package/lib/server/ssr/cmsSSRProcessor.ts +3 -6
  197. package/lib/server/ssr/cssCollector.ts +1 -1
  198. package/lib/server/ssr/errorOverlay.test.ts +1 -1
  199. package/lib/server/ssr/errorOverlay.ts +3 -9
  200. package/lib/server/ssr/htmlGenerator.nonce.test.ts +3 -9
  201. package/lib/server/ssr/htmlGenerator.test.ts +120 -43
  202. package/lib/server/ssr/htmlGenerator.ts +120 -85
  203. package/lib/server/ssr/imageMetadata.test.ts +3 -1
  204. package/lib/server/ssr/imageMetadata.ts +25 -19
  205. package/lib/server/ssr/jsCollector.test.ts +3 -13
  206. package/lib/server/ssr/jsCollector.ts +3 -8
  207. package/lib/server/ssr/liveReloadIntegration.test.ts +69 -28
  208. package/lib/server/ssr/metaTagGenerator.ts +2 -2
  209. package/lib/server/ssr/ssrRenderer.branches.test.ts +1103 -0
  210. package/lib/server/ssr/ssrRenderer.test.ts +196 -246
  211. package/lib/server/ssr/ssrRenderer.ts +609 -225
  212. package/lib/server/ssrRenderer.test.ts +1044 -950
  213. package/lib/server/utils/jsonLineMapper.test.ts +28 -28
  214. package/lib/server/utils/jsonLineMapper.ts +1 -1
  215. package/lib/server/validateStyleCoverage.ts +18 -20
  216. package/lib/server/webflow/buildWebflow.ts +41 -53
  217. package/lib/server/webflow/nodeToWebflow.test.ts +150 -218
  218. package/lib/server/webflow/nodeToWebflow.ts +195 -258
  219. package/lib/server/webflow/styleMapper.test.ts +15 -56
  220. package/lib/server/webflow/styleMapper.ts +33 -41
  221. package/lib/server/webflow/types.ts +1 -8
  222. package/lib/server/websocketManager.ts +16 -19
  223. package/lib/shared/attributeNodeUtils.test.ts +15 -15
  224. package/lib/shared/attributeNodeUtils.ts +5 -12
  225. package/lib/shared/breakpoints.ts +4 -11
  226. package/lib/shared/cmsQueryParser.test.ts +50 -42
  227. package/lib/shared/cmsQueryParser.ts +49 -31
  228. package/lib/shared/colorVariableUtils.test.ts +5 -5
  229. package/lib/shared/colorVariableUtils.ts +3 -8
  230. package/lib/shared/componentRefs.ts +1 -5
  231. package/lib/shared/constants.test.ts +3 -3
  232. package/lib/shared/constants.ts +4 -8
  233. package/lib/shared/cssGeneration.test.ts +262 -144
  234. package/lib/shared/cssGeneration.ts +189 -516
  235. package/lib/shared/cssNamedColors.ts +152 -30
  236. package/lib/shared/cssProperties.test.ts +5 -6
  237. package/lib/shared/cssProperties.ts +296 -112
  238. package/lib/shared/elementClassName.test.ts +109 -109
  239. package/lib/shared/elementClassName.ts +1 -1
  240. package/lib/shared/elementUtils.ts +12 -16
  241. package/lib/shared/errorLogger.ts +2 -10
  242. package/lib/shared/errors.test.ts +2 -13
  243. package/lib/shared/errors.ts +2 -8
  244. package/lib/shared/expressionEvaluator.test.ts +119 -0
  245. package/lib/shared/expressionEvaluator.ts +43 -24
  246. package/lib/shared/fontLoader.test.ts +19 -5
  247. package/lib/shared/friendlyError.ts +2 -3
  248. package/lib/shared/gradientUtils.test.ts +1 -5
  249. package/lib/shared/gradientUtils.ts +2 -6
  250. package/lib/shared/hrefRefs.ts +2 -10
  251. package/lib/shared/i18n.test.ts +1 -1
  252. package/lib/shared/i18n.ts +13 -34
  253. package/lib/shared/index.ts +4 -0
  254. package/lib/shared/inlineSvgStyleRules.ts +2 -4
  255. package/lib/shared/interactiveStyleMappings.test.ts +11 -33
  256. package/lib/shared/interactiveStyleMappings.ts +9 -16
  257. package/lib/shared/interactiveStyles.test.ts +165 -188
  258. package/lib/shared/interfaces/contentProvider.ts +1 -1
  259. package/lib/shared/itemTemplateUtils.test.ts +6 -12
  260. package/lib/shared/itemTemplateUtils.ts +19 -35
  261. package/lib/shared/jsonRepair.ts +8 -2
  262. package/lib/shared/libraryLoader.test.ts +15 -49
  263. package/lib/shared/libraryLoader.ts +7 -22
  264. package/lib/shared/netlifyLocale404.test.ts +179 -0
  265. package/lib/shared/netlifyLocale404.ts +110 -0
  266. package/lib/shared/nodeUtils.test.ts +24 -16
  267. package/lib/shared/nodeUtils.ts +49 -19
  268. package/lib/shared/pathArrayUtils.test.ts +1 -2
  269. package/lib/shared/pathArrayUtils.ts +1 -1
  270. package/lib/shared/pathSecurity.ts +1 -1
  271. package/lib/shared/pathUtils.test.ts +4 -6
  272. package/lib/shared/pathUtils.ts +42 -48
  273. package/lib/shared/paths/Path.test.ts +2 -2
  274. package/lib/shared/paths/Path.ts +0 -1
  275. package/lib/shared/paths/PathConverter.test.ts +1 -1
  276. package/lib/shared/paths/PathConverter.ts +14 -17
  277. package/lib/shared/paths/PathUtils.ts +9 -10
  278. package/lib/shared/paths/PathValidator.test.ts +2 -15
  279. package/lib/shared/paths/PathValidator.ts +11 -9
  280. package/lib/shared/paths/index.ts +1 -2
  281. package/lib/shared/propResolver.test.ts +240 -244
  282. package/lib/shared/propResolver.ts +14 -25
  283. package/lib/shared/pxToRem.test.ts +7 -6
  284. package/lib/shared/pxToRem.ts +2 -5
  285. package/lib/shared/registry/BaseNodeTypeRegistry.test.ts +9 -5
  286. package/lib/shared/registry/ClientRegistry.ts +0 -1
  287. package/lib/shared/registry/ComponentRegistry.test.ts +43 -29
  288. package/lib/shared/registry/ComponentRegistry.ts +9 -11
  289. package/lib/shared/registry/NodeTypeDefinition.ts +15 -8
  290. package/lib/shared/registry/RegistryManager.ts +1 -2
  291. package/lib/shared/registry/SSRRegistry.ts +0 -1
  292. package/lib/shared/registry/createNodeType.ts +7 -9
  293. package/lib/shared/registry/defineNodeType.ts +2 -6
  294. package/lib/shared/registry/index.ts +0 -1
  295. package/lib/shared/registry/nodeTypes/ComponentInstanceNodeType.ts +14 -15
  296. package/lib/shared/registry/nodeTypes/EmbedNodeType.ts +18 -11
  297. package/lib/shared/registry/nodeTypes/HtmlNodeType.ts +47 -18
  298. package/lib/shared/registry/nodeTypes/LinkNodeType.ts +21 -19
  299. package/lib/shared/registry/nodeTypes/ListNodeType.ts +78 -74
  300. package/lib/shared/registry/nodeTypes/LocaleListNodeType.ts +27 -21
  301. package/lib/shared/registry/nodeTypes/SlotMarkerType.ts +6 -7
  302. package/lib/shared/registry/nodeTypes/index.ts +10 -2
  303. package/lib/shared/responsiveScaling.test.ts +15 -31
  304. package/lib/shared/responsiveScaling.ts +55 -37
  305. package/lib/shared/responsiveStyleUtils.ts +11 -13
  306. package/lib/shared/richtext/htmlToTiptap.test.ts +23 -14
  307. package/lib/shared/richtext/htmlToTiptap.ts +1 -3
  308. package/lib/shared/richtext/tiptapToHtml.test.ts +5 -6
  309. package/lib/shared/richtext/types.ts +1 -8
  310. package/lib/shared/slugTranslator.test.ts +13 -13
  311. package/lib/shared/slugTranslator.ts +12 -16
  312. package/lib/shared/slugify.ts +9 -15
  313. package/lib/shared/styleNodeUtils.test.ts +8 -8
  314. package/lib/shared/styleNodeUtils.ts +5 -10
  315. package/lib/shared/styleUtils.test.ts +87 -61
  316. package/lib/shared/styleUtils.ts +5 -6
  317. package/lib/shared/themeDefaults.test.ts +11 -11
  318. package/lib/shared/themeDefaults.ts +3 -4
  319. package/lib/shared/tree/PathBuilder.test.ts +62 -138
  320. package/lib/shared/tree/PathBuilder.ts +49 -39
  321. package/lib/shared/treePathUtils.test.ts +2 -10
  322. package/lib/shared/treePathUtils.ts +54 -59
  323. package/lib/shared/types/api.ts +1 -2
  324. package/lib/shared/types/cms.ts +25 -21
  325. package/lib/shared/types/comment.ts +49 -16
  326. package/lib/shared/types/components.ts +27 -25
  327. package/lib/shared/types/errors.test.ts +1 -6
  328. package/lib/shared/types/errors.ts +3 -7
  329. package/lib/shared/types/experiments.ts +28 -28
  330. package/lib/shared/types/index.ts +2 -2
  331. package/lib/shared/types/styles.ts +0 -1
  332. package/lib/shared/types/variables.test.ts +4 -13
  333. package/lib/shared/types/variables.ts +48 -27
  334. package/lib/shared/types.ts +1 -2
  335. package/lib/shared/utilityClassConfig.ts +648 -321
  336. package/lib/shared/utilityClassMapper.test.ts +203 -92
  337. package/lib/shared/utilityClassMapper.ts +188 -246
  338. package/lib/shared/utilityClassNames.ts +326 -0
  339. package/lib/shared/utils.test.ts +2 -10
  340. package/lib/shared/utils.ts +19 -10
  341. package/lib/shared/validation/cmsValidators.ts +2 -1
  342. package/lib/shared/validation/commentValidators.test.ts +53 -0
  343. package/lib/shared/validation/commentValidators.ts +12 -1
  344. package/lib/shared/validation/propValidator.test.ts +18 -20
  345. package/lib/shared/validation/propValidator.ts +12 -17
  346. package/lib/shared/validation/schemas.test.ts +24 -33
  347. package/lib/shared/validation/schemas.ts +469 -344
  348. package/lib/shared/validation/validators.test.ts +1 -6
  349. package/lib/shared/validation/validators.ts +89 -68
  350. package/lib/shared/viewportUnits.integration.test.ts +14 -10
  351. package/lib/shared/viewportUnits.test.ts +11 -23
  352. package/lib/test-utils/dom-setup.ts +1 -1
  353. package/lib/test-utils/factories/ConsoleMockFactory.ts +3 -7
  354. package/lib/test-utils/factories/DomMockFactory.ts +7 -19
  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 +5 -9
  358. package/lib/test-utils/factories/StoreMockFactory.ts +14 -25
  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 +12 -18
  365. package/lib/test-utils/mocks.ts +4 -2
  366. package/package.json +1 -1
  367. package/scripts/build-meno-filter.ts +1 -4
  368. package/vite.config.ts +4 -4
  369. package/dist/chunks/chunk-2MHDV5BF.js.map +0 -7
  370. package/dist/chunks/chunk-AZQYF6KE.js.map +0 -7
  371. package/dist/chunks/chunk-GZHGVVW3.js.map +0 -7
  372. package/dist/chunks/chunk-H3GJ4H2U.js.map +0 -7
  373. package/dist/chunks/chunk-I7YIGZXT.js.map +0 -7
  374. package/dist/chunks/chunk-IGYR22T6.js.map +0 -7
  375. package/dist/chunks/chunk-JGP5A3Y5.js.map +0 -7
  376. package/dist/chunks/chunk-JGWFTO6P.js.map +0 -7
  377. package/dist/chunks/chunk-O3NAGJP4.js.map +0 -7
  378. package/dist/chunks/chunk-QB2LNO4W.js.map +0 -7
  379. package/dist/chunks/chunk-R6XHAFBF.js.map +0 -7
  380. package/dist/chunks/chunk-UB44F4Z2.js.map +0 -7
  381. package/dist/chunks/chunk-WQFG7PAH.js.map +0 -7
  382. package/dist/chunks/chunk-X754AHS5.js.map +0 -7
  383. package/dist/chunks/chunk-YBLHKYFF.js.map +0 -7
  384. package/dist/chunks/configService-R3OGU2UD.js +0 -13
  385. /package/dist/chunks/{configService-R3OGU2UD.js.map → configService-PRJZF7Y6.js.map} +0 -0
  386. /package/dist/chunks/{constants-STK2YBIW.js.map → constants-KIQEYMAM.js.map} +0 -0
  387. /package/dist/chunks/{fs-JGINUXGL.js.map → fs-ZI5JEU7V.js.map} +0 -0
@@ -19,20 +19,15 @@ export interface ScriptExecutorConfig {
19
19
  /**
20
20
  * Generate destructure statement for defineVars
21
21
  */
22
- function generateDestructure(
23
- defineVars: true | string[],
24
- interfaceDef?: Record<string, PropDefinition>
25
- ): string {
26
- const vars = defineVars === true
27
- ? Object.keys(interfaceDef || {})
28
- : defineVars;
22
+ function generateDestructure(defineVars: true | string[], interfaceDef?: Record<string, PropDefinition>): string {
23
+ const vars = defineVars === true ? Object.keys(interfaceDef || {}) : defineVars;
29
24
  if (vars.length === 0) return '';
30
25
  return `var {${vars.join(', ')}} = props;`;
31
26
  }
32
27
 
33
28
  /**
34
29
  * ScriptExecutor manages JavaScript execution from components
35
- *
30
+ *
36
31
  * Features:
37
32
  * - Executes JavaScript from all registered components
38
33
  * - Processes templates per component instance when needed
@@ -59,8 +54,10 @@ export class ScriptExecutor {
59
54
  // wrapper degrades gracefully when the hook is absent (e.g. direct
60
55
  // <script> use outside the runtime) — see executeWithInitPattern.
61
56
  if (typeof window !== 'undefined') {
62
- (window as { __menoShouldBind?: (el: Element, name: string) => boolean }).__menoShouldBind =
63
- (el: Element, name: string) => this.shouldBind(el, name);
57
+ (window as { __menoShouldBind?: (el: Element, name: string) => boolean }).__menoShouldBind = (
58
+ el: Element,
59
+ name: string,
60
+ ) => this.shouldBind(el, name);
64
61
  }
65
62
  }
66
63
 
@@ -155,7 +152,7 @@ export class ScriptExecutor {
155
152
  componentName: string,
156
153
  js: string,
157
154
  defineVars: true | string[],
158
- interfaceDef?: Record<string, PropDefinition>
155
+ interfaceDef?: Record<string, PropDefinition>,
159
156
  ): void {
160
157
  const destructure = generateDestructure(defineVars, interfaceDef);
161
158
 
@@ -218,12 +215,7 @@ export class ScriptExecutor {
218
215
  if (defineVars) {
219
216
  // Use initComponent pattern - queries all instances and initializes each with props
220
217
  if (!executedComponents.has(componentName)) {
221
- this.executeWithInitPattern(
222
- componentName,
223
- originalJS,
224
- defineVars,
225
- component.component.interface
226
- );
218
+ this.executeWithInitPattern(componentName, originalJS, defineVars, component.component.interface);
227
219
  executedComponents.add(componentName);
228
220
  }
229
221
  } else if (hasTemplates(originalJS)) {
@@ -281,12 +273,7 @@ export class ScriptExecutor {
281
273
 
282
274
  // Check if component uses defineVars (Astro-style prop injection)
283
275
  if (defineVars) {
284
- this.executeWithInitPattern(
285
- componentName,
286
- originalJS,
287
- defineVars,
288
- component.component.interface
289
- );
276
+ this.executeWithInitPattern(componentName, originalJS, defineVars, component.component.interface);
290
277
  } else if (hasTemplates(originalJS)) {
291
278
  // Legacy: Process and execute JS per instance (templates need instance-specific props)
292
279
  const componentRootPaths = this.elementRegistry.getComponentRootPaths(componentName);
@@ -315,11 +302,7 @@ export class ScriptExecutor {
315
302
  * @param element - The DOM element to re-execute for
316
303
  * @param newProps - New props to inject
317
304
  */
318
- executeForElement(
319
- componentName: string,
320
- element: HTMLElement,
321
- newProps: Record<string, unknown>
322
- ): void {
305
+ executeForElement(componentName: string, element: HTMLElement, newProps: Record<string, unknown>): void {
323
306
  try {
324
307
  const component = this.componentRegistry.get(componentName);
325
308
  if (!component?.component?.javascript) return;
@@ -331,9 +314,7 @@ export class ScriptExecutor {
331
314
  const destructure = generateDestructure(defineVars, component.component.interface);
332
315
 
333
316
  // Update data-props attribute (keyed by component name)
334
- const varsToExpose = defineVars === true
335
- ? Object.keys(component.component.interface || {})
336
- : defineVars;
317
+ const varsToExpose = defineVars === true ? Object.keys(component.component.interface || {}) : defineVars;
337
318
 
338
319
  const propsForJS: Record<string, unknown> = {};
339
320
  for (const varName of varsToExpose) {
@@ -346,7 +327,9 @@ export class ScriptExecutor {
346
327
  let allProps: Record<string, unknown> = {};
347
328
  const existingStr = element.getAttribute('data-props');
348
329
  if (existingStr) {
349
- try { allProps = JSON.parse(existingStr); } catch {}
330
+ try {
331
+ allProps = JSON.parse(existingStr);
332
+ } catch {}
350
333
  }
351
334
  allProps[componentName] = propsForJS;
352
335
  element.setAttribute('data-props', JSON.stringify(allProps));
@@ -368,4 +351,3 @@ export class ScriptExecutor {
368
351
  }
369
352
  }
370
353
  }
371
-
@@ -19,7 +19,7 @@ describe('PrefetchService', () => {
19
19
  Promise.resolve({
20
20
  ok: true,
21
21
  json: () => Promise.resolve({ root: { type: 'node', tag: 'div' } }),
22
- } as Response)
22
+ } as Response),
23
23
  ) as unknown as typeof fetch;
24
24
 
25
25
  // Create service with enabled config
@@ -166,7 +166,7 @@ describe('PrefetchService', () => {
166
166
  Promise.resolve({
167
167
  ok: false,
168
168
  status: 404,
169
- } as Response)
169
+ } as Response),
170
170
  ) as unknown as typeof fetch;
171
171
 
172
172
  await service.prefetch('/nonexistent');
@@ -10,12 +10,7 @@
10
10
  */
11
11
 
12
12
  import { API_ROUTES } from '../../shared/constants';
13
- import type {
14
- PrefetchConfig,
15
- PrefetchStrategy,
16
- CachedPageEntry,
17
- ConnectionInfo,
18
- } from '../../shared/types/prefetch';
13
+ import type { PrefetchConfig, PrefetchStrategy, CachedPageEntry, ConnectionInfo } from '../../shared/types/prefetch';
19
14
  import { DEFAULT_PREFETCH_CONFIG } from '../../shared/types/prefetch';
20
15
 
21
16
  export interface PrefetchServiceConfig {
@@ -52,9 +47,7 @@ export class PrefetchService {
52
47
 
53
48
  return {
54
49
  saveData: connection?.saveData ?? false,
55
- effectiveType:
56
- (connection?.effectiveType as ConnectionInfo['effectiveType']) ??
57
- 'unknown',
50
+ effectiveType: (connection?.effectiveType as ConnectionInfo['effectiveType']) ?? 'unknown',
58
51
  downlink: connection?.downlink ?? Infinity,
59
52
  };
60
53
  }
@@ -62,9 +55,7 @@ export class PrefetchService {
62
55
  /**
63
56
  * Determine effective strategy based on connection quality
64
57
  */
65
- private getEffectiveStrategy(
66
- requestedStrategy: PrefetchStrategy
67
- ): PrefetchStrategy {
58
+ private getEffectiveStrategy(requestedStrategy: PrefetchStrategy): PrefetchStrategy {
68
59
  if (!this.config.respectSaveData) return requestedStrategy;
69
60
 
70
61
  const { saveData, effectiveType, downlink } = this.getConnectionInfo();
@@ -110,9 +101,7 @@ export class PrefetchService {
110
101
  if (this.cache.size <= this.config.maxCacheSize) return;
111
102
 
112
103
  // Get oldest entries and remove them
113
- const entries = Array.from(this.cache.entries()).sort(
114
- (a, b) => a[1].timestamp - b[1].timestamp
115
- );
104
+ const entries = Array.from(this.cache.entries()).sort((a, b) => a[1].timestamp - b[1].timestamp);
116
105
 
117
106
  const toRemove = this.cache.size - this.config.maxCacheSize;
118
107
  for (let i = 0; i < toRemove; i++) {
@@ -133,14 +122,11 @@ export class PrefetchService {
133
122
 
134
123
  try {
135
124
  // Fetch page data (same endpoint RouteLoader uses)
136
- const response = await fetch(
137
- `${API_ROUTES.PAGE_CONTENT}?page=${encodeURIComponent(path)}`,
138
- {
139
- signal: abortController.signal,
140
- // Allow browser caching for prefetched content
141
- cache: 'default',
142
- }
143
- );
125
+ const response = await fetch(`${API_ROUTES.PAGE_CONTENT}?page=${encodeURIComponent(path)}`, {
126
+ signal: abortController.signal,
127
+ // Allow browser caching for prefetched content
128
+ cache: 'default',
129
+ });
144
130
 
145
131
  if (!response.ok) {
146
132
  this.pendingPrefetches.delete(path);
@@ -248,7 +234,7 @@ export class PrefetchService {
248
234
  }
249
235
  });
250
236
  },
251
- { rootMargin: '50px' } // Start prefetching slightly before visible
237
+ { rootMargin: '50px' }, // Start prefetching slightly before visible
252
238
  );
253
239
  }
254
240
 
@@ -11,7 +11,7 @@ describe('styleProcessor', () => {
11
11
  expect(result).toEqual({
12
12
  color: 'red',
13
13
  fontSize: '16px',
14
- padding: '10px'
14
+ padding: '10px',
15
15
  });
16
16
  });
17
17
 
@@ -22,7 +22,7 @@ describe('styleProcessor', () => {
22
22
  expect(result).toEqual({
23
23
  color: 'blue',
24
24
  fontSize: '16px',
25
- padding: '10px'
25
+ padding: '10px',
26
26
  });
27
27
  });
28
28
 
@@ -31,7 +31,7 @@ describe('styleProcessor', () => {
31
31
  const result = mergeStyles(style1, undefined, { fontSize: '16px' });
32
32
  expect(result).toEqual({
33
33
  color: 'red',
34
- fontSize: '16px'
34
+ fontSize: '16px',
35
35
  });
36
36
  });
37
37
 
@@ -49,15 +49,15 @@ describe('styleProcessor', () => {
49
49
  const style1: StyleObject = {
50
50
  display: 'flex',
51
51
  flexDirection: 'column',
52
- padding: '20px'
52
+ padding: '20px',
53
53
  };
54
54
  const style2: StyleObject = {
55
55
  backgroundColor: '#f0f0f0',
56
- border: '1px solid #ccc'
56
+ border: '1px solid #ccc',
57
57
  };
58
58
  const style3: StyleObject = {
59
59
  padding: '30px',
60
- margin: '10px'
60
+ margin: '10px',
61
61
  };
62
62
  const result = mergeStyles(style1, style2, style3);
63
63
  expect(result).toEqual({
@@ -66,7 +66,7 @@ describe('styleProcessor', () => {
66
66
  padding: '30px',
67
67
  backgroundColor: '#f0f0f0',
68
68
  border: '1px solid #ccc',
69
- margin: '10px'
69
+ margin: '10px',
70
70
  });
71
71
  });
72
72
 
@@ -108,7 +108,7 @@ describe('styleProcessor', () => {
108
108
  expect(result).toEqual({
109
109
  opacity: 0.5,
110
110
  zIndex: 20,
111
- fontSize: 16
111
+ fontSize: 16,
112
112
  });
113
113
  });
114
114
 
@@ -119,7 +119,7 @@ describe('styleProcessor', () => {
119
119
  expect(result).toEqual({
120
120
  opacity: 0,
121
121
  margin: '0',
122
- padding: '0px'
122
+ padding: '0px',
123
123
  });
124
124
  });
125
125
  });
@@ -12,10 +12,7 @@ type ComponentProps = Record<string, unknown>;
12
12
  * Merge component styles from structured component definition
13
13
  * Returns merged props with all applicable styles
14
14
  */
15
- export function mergeComponentStyles(
16
- componentDef: ComponentDefinition,
17
- props: ComponentProps
18
- ): ComponentProps {
15
+ export function mergeComponentStyles(componentDef: ComponentDefinition, props: ComponentProps): ComponentProps {
19
16
  try {
20
17
  // Start with base props from component definition
21
18
  let mergedProps: ComponentProps = { ...(componentDef.props || {}) };
@@ -43,28 +40,35 @@ export function mergeComponentStyles(
43
40
  // processStructure now reads from structure.style and merges into props.style
44
41
  try {
45
42
  if (structuredComponentDef.structure) {
46
- const processed = processStructure(structuredComponentDef.structure, { props: effectiveInputProps, componentDef: structuredComponentDef });
43
+ const processed = processStructure(structuredComponentDef.structure, {
44
+ props: effectiveInputProps,
45
+ componentDef: structuredComponentDef,
46
+ });
47
47
  // Type guard: ensure processed is a ComponentNode with props
48
48
  if (processed && typeof processed === 'object' && !Array.isArray(processed) && 'props' in processed) {
49
49
  const processedProps = processed.props as Record<string, unknown> | undefined;
50
- const structureStyle = (processedProps?.style && typeof processedProps.style === 'object' && processedProps.style !== null && !Array.isArray(processedProps.style))
51
- ? processedProps.style as Record<string, unknown>
52
- : {};
53
- const currentStyle = typeof mergedProps.style === 'object' && mergedProps.style !== null && !Array.isArray(mergedProps.style)
54
- ? { ...mergedProps.style as Record<string, unknown> }
55
- : {};
50
+ const structureStyle =
51
+ processedProps?.style &&
52
+ typeof processedProps.style === 'object' &&
53
+ processedProps.style !== null &&
54
+ !Array.isArray(processedProps.style)
55
+ ? (processedProps.style as Record<string, unknown>)
56
+ : {};
57
+ const currentStyle =
58
+ typeof mergedProps.style === 'object' && mergedProps.style !== null && !Array.isArray(mergedProps.style)
59
+ ? { ...(mergedProps.style as Record<string, unknown>) }
60
+ : {};
56
61
  mergedProps.style = { ...currentStyle, ...structureStyle };
57
62
  }
58
63
  }
59
- } catch (e) {
60
- }
64
+ } catch (e) {}
61
65
 
62
66
  // Merge with instance props (allows overrides)
63
67
  // Normalize responsive styles to flat StyleObject
64
68
  const restProps = props || {};
65
69
  const normalizedMergedStyle = normalizeStyle(mergedProps.style as StyleValue) || {};
66
70
  const normalizedRestStyle = normalizeStyle(restProps?.style as StyleValue) || {};
67
-
71
+
68
72
  mergedProps = {
69
73
  ...mergedProps,
70
74
  ...restProps,
@@ -90,4 +94,3 @@ export function mergeStyles(...styles: (StyleObject | undefined)[]): StyleObject
90
94
  return { ...acc, ...style };
91
95
  }, {});
92
96
  }
93
-