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
@@ -34,9 +34,7 @@ export interface ServerOptions {
34
34
  wsPath?: string;
35
35
  }
36
36
 
37
- export async function createRuntimeServer(
38
- options: ServerOptions,
39
- ): Promise<RuntimeServer> {
37
+ export async function createRuntimeServer(options: ServerOptions): Promise<RuntimeServer> {
40
38
  if (isBun) {
41
39
  return createBunServer(options);
42
40
  }
@@ -46,7 +44,7 @@ export async function createRuntimeServer(
46
44
  // ── Bun implementation ───────────────────────────────────────────────
47
45
 
48
46
  function createBunServer(options: ServerOptions): RuntimeServer {
49
- const { port, hostname, fetch, websocket, wsPath } = options;
47
+ const { port, hostname, fetch, websocket, wsPath: _wsPath } = options;
50
48
 
51
49
  const bunConfig: any = {
52
50
  port,
@@ -91,7 +89,7 @@ function createBunServer(options: ServerOptions): RuntimeServer {
91
89
 
92
90
  async function createNodeServer(options: ServerOptions): Promise<RuntimeServer> {
93
91
  const { port, hostname, fetch, websocket, wsPath } = options;
94
- const http = await import('http');
92
+ const http = await import('node:http');
95
93
 
96
94
  const server = http.createServer(async (nodeReq, nodeRes) => {
97
95
  try {
@@ -110,7 +108,7 @@ async function createNodeServer(options: ServerOptions): Promise<RuntimeServer>
110
108
 
111
109
  let body: ReadableStream | null = null;
112
110
  if (nodeReq.method !== 'GET' && nodeReq.method !== 'HEAD') {
113
- const { Readable } = await import('stream');
111
+ const { Readable } = await import('node:stream');
114
112
  body = Readable.toWeb(nodeReq) as unknown as ReadableStream;
115
113
  }
116
114
 
@@ -118,7 +116,7 @@ async function createNodeServer(options: ServerOptions): Promise<RuntimeServer>
118
116
  method: nodeReq.method || 'GET',
119
117
  headers,
120
118
  body,
121
- // @ts-ignore - duplex is needed for streaming request bodies in Node
119
+ // @ts-expect-error - duplex is needed for streaming request bodies in Node
122
120
  duplex: body ? 'half' : undefined,
123
121
  });
124
122
 
@@ -171,10 +169,7 @@ async function createNodeServer(options: ServerOptions): Promise<RuntimeServer>
171
169
  const wss = new WebSocketServer({ noServer: true });
172
170
 
173
171
  server.on('upgrade', (request, socket, head) => {
174
- const pathname = new URL(
175
- request.url || '/',
176
- `http://${hostname || 'localhost'}:${port}`,
177
- ).pathname;
172
+ const pathname = new URL(request.url || '/', `http://${hostname || 'localhost'}:${port}`).pathname;
178
173
 
179
174
  if (pathname === wsPath) {
180
175
  wss.handleUpgrade(request, socket, head, (ws) => {
@@ -188,7 +183,8 @@ async function createNodeServer(options: ServerOptions): Promise<RuntimeServer>
188
183
  wss.on('connection', (ws) => {
189
184
  const client: RuntimeWSClient = {
190
185
  send(data) {
191
- if (ws.readyState === 1) { // OPEN
186
+ if (ws.readyState === 1) {
187
+ // OPEN
192
188
  ws.send(data);
193
189
  }
194
190
  },
@@ -1,6 +1,6 @@
1
1
  import { describe, test, expect, beforeEach, afterEach } from 'bun:test';
2
- import { join } from 'path';
3
- import { mkdirSync, rmSync, writeFileSync, existsSync } from 'fs';
2
+ import { join } from 'node:path';
3
+ import { mkdirSync, rmSync, writeFileSync, existsSync } from 'node:fs';
4
4
  import { setProjectRoot, getProjectRoot } from '../projectContext';
5
5
  import { ColorService } from './ColorService';
6
6
  import type { ThemeConfig } from '../../shared/types';
@@ -54,7 +54,7 @@ describe('ColorService', () => {
54
54
  writeColors(VALID_CONFIG);
55
55
  const config = await service.loadThemeConfig();
56
56
  expect(config.default).toBe('light');
57
- expect(config.themes.light.colors.primary).toBe('#0066ff');
57
+ expect(config.themes.light!.colors.primary).toBe('#0066ff');
58
58
  });
59
59
 
60
60
  test('returns defaults when file missing', async () => {
@@ -9,6 +9,9 @@ import type { ColorVariables, ColorVariableEntry, ThemeConfig, ThemeEntry } from
9
9
  import { resolvePaletteColor } from '../../shared/types';
10
10
  import { CachedConfigLoader } from './CachedConfigLoader';
11
11
  import { writeFile } from '../runtime';
12
+ import { createLogger } from '../../shared/logger';
13
+
14
+ const log = createLogger('ColorService');
12
15
 
13
16
  export class ColorService extends CachedConfigLoader<ThemeConfig> {
14
17
  /**
@@ -31,7 +34,7 @@ export class ColorService extends CachedConfigLoader<ThemeConfig> {
31
34
  }
32
35
  }
33
36
  } catch (error) {
34
- console.warn('Failed to load colors.json:', error);
37
+ log.warn('Failed to load colors.json:', error);
35
38
  }
36
39
 
37
40
  // Return default theme config if file not found or invalid
@@ -48,44 +51,44 @@ export class ColorService extends CachedConfigLoader<ThemeConfig> {
48
51
  dark: {
49
52
  label: 'Dark',
50
53
  colors: {
51
- 'primary': '#007acc',
54
+ primary: '#007acc',
52
55
  'primary-light': '#0099ff',
53
56
  'primary-dark': '#005a99',
54
- 'secondary': '#6c757d',
55
- 'success': '#28a745',
56
- 'warning': '#ffc107',
57
- 'danger': '#dc3545',
58
- 'error': '#d32f2f',
59
- 'info': '#17a2b8',
60
- 'light': '#f8f9fa',
61
- 'dark': '#343a40',
62
- 'text': '#cccccc',
57
+ secondary: '#6c757d',
58
+ success: '#28a745',
59
+ warning: '#ffc107',
60
+ danger: '#dc3545',
61
+ error: '#d32f2f',
62
+ info: '#17a2b8',
63
+ light: '#f8f9fa',
64
+ dark: '#343a40',
65
+ text: '#cccccc',
63
66
  'text-dark': '#1e1e1e',
64
- 'background': '#1e1e1e',
67
+ background: '#1e1e1e',
65
68
  'background-light': '#252526',
66
- 'border': '#444444',
69
+ border: '#444444',
67
70
  'border-light': '#d0d0d0',
68
71
  },
69
72
  },
70
73
  light: {
71
74
  label: 'Light',
72
75
  colors: {
73
- 'primary': '#0066ff',
76
+ primary: '#0066ff',
74
77
  'primary-light': '#3385ff',
75
78
  'primary-dark': '#0052cc',
76
- 'secondary': '#888888',
77
- 'success': '#22c55e',
78
- 'warning': '#f59e0b',
79
- 'danger': '#ef4444',
80
- 'error': '#dc2626',
81
- 'info': '#06b6d4',
82
- 'light': '#f8f9fa',
83
- 'dark': '#1f2937',
84
- 'text': '#1f2937',
79
+ secondary: '#888888',
80
+ success: '#22c55e',
81
+ warning: '#f59e0b',
82
+ danger: '#ef4444',
83
+ error: '#dc2626',
84
+ info: '#06b6d4',
85
+ light: '#f8f9fa',
86
+ dark: '#1f2937',
87
+ text: '#1f2937',
85
88
  'text-dark': '#ffffff',
86
- 'background': '#ffffff',
89
+ background: '#ffffff',
87
90
  'background-light': '#f3f4f6',
88
- 'border': '#d1d5db',
91
+ border: '#d1d5db',
89
92
  'border-light': '#e5e7eb',
90
93
  },
91
94
  },
@@ -103,8 +106,8 @@ export class ColorService extends CachedConfigLoader<ThemeConfig> {
103
106
  default: {
104
107
  label: 'Default',
105
108
  colors: {
106
- 'background': '#1e1e1e',
107
- 'text': '#cccccc',
109
+ background: '#1e1e1e',
110
+ text: '#cccccc',
108
111
  },
109
112
  },
110
113
  },
@@ -131,7 +134,12 @@ export class ColorService extends CachedConfigLoader<ThemeConfig> {
131
134
  if (data && typeof data === 'object' && 'themes' in data && 'default' in data) {
132
135
  return { status: 'valid', config: data as ThemeConfig, filePath };
133
136
  }
134
- return { status: 'invalid', config: this.getMinimalConfig(), error: 'Invalid structure: missing "themes" or "default" property', filePath };
137
+ return {
138
+ status: 'invalid',
139
+ config: this.getMinimalConfig(),
140
+ error: 'Invalid structure: missing "themes" or "default" property',
141
+ filePath,
142
+ };
135
143
  } catch (error) {
136
144
  return {
137
145
  status: 'invalid',
@@ -149,7 +157,7 @@ export class ColorService extends CachedConfigLoader<ThemeConfig> {
149
157
  const config = await this.loadThemeConfig();
150
158
  const theme = themeName && config.themes[themeName] ? config.themes[themeName] : config.themes[config.default];
151
159
  const resolvedColors: Record<string, string> = {};
152
- for (const [name, value] of Object.entries(theme.colors)) {
160
+ for (const [name, value] of Object.entries(theme?.colors ?? {})) {
153
161
  resolvedColors[name] = resolvePaletteColor(value, config.palette);
154
162
  }
155
163
  return { colors: resolvedColors };
@@ -1,6 +1,6 @@
1
1
  import { describe, test, expect, beforeEach, afterEach } from 'bun:test';
2
- import { join } from 'path';
3
- import { mkdirSync, rmSync, writeFileSync, existsSync } from 'fs';
2
+ import { join } from 'node:path';
3
+ import { mkdirSync, rmSync, writeFileSync, existsSync } from 'node:fs';
4
4
  import { setProjectRoot, getProjectRoot } from '../projectContext';
5
5
  import { EnumService } from './EnumService';
6
6
  import type { EnumsConfig } from '../../shared/types';
@@ -68,11 +68,7 @@ describe('EnumService', () => {
68
68
 
69
69
  test('deduplicates concurrent calls', async () => {
70
70
  writeEnums(VALID_CONFIG);
71
- const [a, b, c] = await Promise.all([
72
- service.loadConfig(),
73
- service.loadConfig(),
74
- service.loadConfig(),
75
- ]);
71
+ const [a, b, c] = await Promise.all([service.loadConfig(), service.loadConfig(), service.loadConfig()]);
76
72
  expect(a).toBe(b);
77
73
  expect(b).toBe(c);
78
74
  });
@@ -94,7 +90,7 @@ describe('EnumService', () => {
94
90
  invalid_number: [1, 2, 3],
95
91
  invalid_mixed: ['a', 1],
96
92
  invalid_string: 'not-array',
97
- })
93
+ }),
98
94
  );
99
95
  const config = await service.loadConfig();
100
96
  expect(config.valid).toEqual(['a', 'b']);
@@ -8,6 +8,9 @@ import { projectPaths } from '../projectContext';
8
8
  import type { EnumsConfig } from '../../shared/types';
9
9
  import { CachedConfigLoader } from './CachedConfigLoader';
10
10
  import { writeFile } from '../runtime';
11
+ import { createLogger } from '../../shared/logger';
12
+
13
+ const log = createLogger('EnumService');
11
14
 
12
15
  export class EnumService extends CachedConfigLoader<EnumsConfig> {
13
16
  /**
@@ -32,7 +35,7 @@ export class EnumService extends CachedConfigLoader<EnumsConfig> {
32
35
  return this.validateEnums(data as Record<string, unknown>);
33
36
  }
34
37
  } catch (error) {
35
- console.warn('Failed to parse enums.json:', error);
38
+ log.warn('Failed to parse enums.json:', error);
36
39
  }
37
40
  }
38
41
 
@@ -64,7 +67,7 @@ export class EnumService extends CachedConfigLoader<EnumsConfig> {
64
67
  private validateEnums(data: Record<string, unknown>): EnumsConfig {
65
68
  const result: Record<string, string[]> = {};
66
69
  for (const [key, value] of Object.entries(data)) {
67
- if (Array.isArray(value) && value.every(item => typeof item === 'string')) {
70
+ if (Array.isArray(value) && value.every((item) => typeof item === 'string')) {
68
71
  result[key] = value;
69
72
  }
70
73
  }
@@ -97,7 +100,12 @@ export class EnumService extends CachedConfigLoader<EnumsConfig> {
97
100
  if (data && typeof data === 'object' && !Array.isArray(data)) {
98
101
  return { status: 'valid', config: this.validateEnums(data as Record<string, unknown>), filePath };
99
102
  }
100
- return { status: 'invalid', config: this.getDefaultConfig(), error: 'Invalid structure: expected Record<string, string[]>', filePath };
103
+ return {
104
+ status: 'invalid',
105
+ config: this.getDefaultConfig(),
106
+ error: 'Invalid structure: expected Record<string, string[]>',
107
+ filePath,
108
+ };
101
109
  } catch (error) {
102
110
  return {
103
111
  status: 'invalid',
@@ -1,6 +1,6 @@
1
1
  import { describe, test, expect, beforeEach, afterEach } from 'bun:test';
2
- import { join } from 'path';
3
- import { mkdirSync, rmSync, writeFileSync, existsSync } from 'fs';
2
+ import { join } from 'node:path';
3
+ import { mkdirSync, rmSync, writeFileSync, existsSync } from 'node:fs';
4
4
  import { setProjectRoot, getProjectRoot } from '../projectContext';
5
5
  import { VariableService } from './VariableService';
6
6
  import type { VariablesConfig } from '../../shared/types';
@@ -47,7 +47,7 @@ describe('VariableService', () => {
47
47
  writeVariables(VALID_CONFIG);
48
48
  const config = await service.loadConfig();
49
49
  expect(config.variables).toHaveLength(2);
50
- expect(config.variables[0].name).toBe('heading-size');
50
+ expect(config.variables[0]!.name).toBe('heading-size');
51
51
  });
52
52
 
53
53
  test('returns defaults when file missing', async () => {
@@ -67,11 +67,7 @@ describe('VariableService', () => {
67
67
 
68
68
  test('deduplicates concurrent calls', async () => {
69
69
  writeVariables(VALID_CONFIG);
70
- const [a, b, c] = await Promise.all([
71
- service.loadConfig(),
72
- service.loadConfig(),
73
- service.loadConfig(),
74
- ]);
70
+ const [a, b, c] = await Promise.all([service.loadConfig(), service.loadConfig(), service.loadConfig()]);
75
71
  expect(a).toBe(b);
76
72
  expect(b).toBe(c);
77
73
  });
@@ -92,9 +88,9 @@ describe('VariableService', () => {
92
88
  };
93
89
  writeVariables(legacyConfig);
94
90
  const config = await service.loadConfig();
95
- expect(config.variables[0].group).toBe('margin');
96
- expect(config.variables[1].group).toBe('gap');
97
- expect(config.variables[2].group).toBe('padding'); // default fallback
91
+ expect(config.variables[0]!.group).toBe('margin');
92
+ expect(config.variables[1]!.group).toBe('gap');
93
+ expect(config.variables[2]!.group).toBe('padding'); // default fallback
98
94
  });
99
95
  });
100
96
 
@@ -177,7 +173,7 @@ describe('VariableService', () => {
177
173
  writeVariables(legacyConfig);
178
174
  const result = await service.getConfigWithStatus();
179
175
  expect(result.status).toBe('valid');
180
- expect(result.config.variables[0].group).toBe('margin');
176
+ expect(result.config.variables[0]!.group).toBe('margin');
181
177
  });
182
178
  });
183
179
  });
@@ -8,6 +8,9 @@ import { projectPaths } from '../projectContext';
8
8
  import type { VariablesConfig } from '../../shared/types';
9
9
  import { CachedConfigLoader } from './CachedConfigLoader';
10
10
  import { writeFile } from '../runtime';
11
+ import { createLogger } from '../../shared/logger';
12
+
13
+ const log = createLogger('VariableService');
11
14
 
12
15
  export class VariableService extends CachedConfigLoader<VariablesConfig> {
13
16
  /**
@@ -27,7 +30,7 @@ export class VariableService extends CachedConfigLoader<VariablesConfig> {
27
30
  }
28
31
  }
29
32
  } catch (error) {
30
- console.warn('Failed to load variables.json:', error);
33
+ log.warn('Failed to load variables.json:', error);
31
34
  }
32
35
 
33
36
  return this.getDefaultConfig();
@@ -43,7 +46,7 @@ export class VariableService extends CachedConfigLoader<VariablesConfig> {
43
46
  private migrateConfig(config: VariablesConfig): VariablesConfig {
44
47
  for (const variable of config.variables) {
45
48
  if ((variable.group as string) === 'spacing') {
46
- const lower = (variable.cssVar + ' ' + variable.name).toLowerCase();
49
+ const lower = `${variable.cssVar} ${variable.name}`.toLowerCase();
47
50
  if (lower.includes('margin')) {
48
51
  variable.group = 'margin';
49
52
  } else if (lower.includes('gap')) {
@@ -75,7 +78,12 @@ export class VariableService extends CachedConfigLoader<VariablesConfig> {
75
78
  if (data && typeof data === 'object' && 'variables' in data && Array.isArray(data.variables)) {
76
79
  return { status: 'valid', config: this.migrateConfig(data as VariablesConfig), filePath };
77
80
  }
78
- return { status: 'invalid', config: this.getDefaultConfig(), error: 'Invalid structure: missing "variables" array', filePath };
81
+ return {
82
+ status: 'invalid',
83
+ config: this.getDefaultConfig(),
84
+ error: 'Invalid structure: missing "variables" array',
85
+ filePath,
86
+ };
79
87
  } catch (error) {
80
88
  return {
81
89
  status: 'invalid',