meno-core 1.0.53 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (415) hide show
  1. package/.claude/settings.local.json +1 -3
  2. package/bin/cli.ts +66 -261
  3. package/build-astro.ts +150 -128
  4. package/dist/bin/cli.js +42 -185
  5. package/dist/bin/cli.js.map +2 -2
  6. package/dist/chunks/chunk-2AR55GYH.js +42 -0
  7. package/dist/chunks/chunk-2AR55GYH.js.map +7 -0
  8. package/dist/chunks/{chunk-JGWFTO6P.js → chunk-2IIQK7T3.js} +2624 -1389
  9. package/dist/chunks/chunk-2IIQK7T3.js.map +7 -0
  10. package/dist/chunks/chunk-4ZRU52J2.js +169 -0
  11. package/dist/chunks/chunk-4ZRU52J2.js.map +7 -0
  12. package/dist/chunks/{chunk-UB44F4Z2.js → chunk-5X4HCN7J.js} +5 -7
  13. package/dist/chunks/chunk-5X4HCN7J.js.map +7 -0
  14. package/dist/chunks/{chunk-WQFG7PAH.js → chunk-7CCVOL5M.js} +15 -19
  15. package/dist/chunks/chunk-7CCVOL5M.js.map +7 -0
  16. package/dist/chunks/{chunk-YBLHKYFF.js → chunk-AR7LHIFY.js} +8 -2
  17. package/dist/chunks/chunk-AR7LHIFY.js.map +7 -0
  18. package/dist/chunks/{chunk-O3NAGJP4.js → chunk-NUP7H7D3.js} +135 -41
  19. package/dist/chunks/chunk-NUP7H7D3.js.map +7 -0
  20. package/dist/chunks/{chunk-X754AHS5.js → chunk-QWTQZHG3.js} +194 -90
  21. package/dist/chunks/chunk-QWTQZHG3.js.map +7 -0
  22. package/dist/chunks/{chunk-H3GJ4H2U.js → chunk-XTKNX4FW.js} +216 -87
  23. package/dist/chunks/chunk-XTKNX4FW.js.map +7 -0
  24. package/dist/chunks/{fs-JGINUXGL.js → fs-G3ANWEFP.js} +2 -2
  25. package/dist/lib/client/index.js +1003 -475
  26. package/dist/lib/client/index.js.map +3 -3
  27. package/dist/lib/server/index.js +14393 -6371
  28. package/dist/lib/server/index.js.map +4 -4
  29. package/dist/lib/shared/index.js +342 -101
  30. package/dist/lib/shared/index.js.map +4 -4
  31. package/dist/lib/shared/richtext/index.js +1 -1
  32. package/dist/lib/test-utils/index.js +64 -80
  33. package/dist/lib/test-utils/index.js.map +2 -2
  34. package/entries/client-router.tsx +10 -8
  35. package/lib/client/ClientInitializer.ts +8 -8
  36. package/lib/client/ErrorBoundary.test.tsx +246 -186
  37. package/lib/client/ErrorBoundary.tsx +183 -132
  38. package/lib/client/componentRegistry.test.ts +96 -108
  39. package/lib/client/componentRegistry.ts +1 -3
  40. package/lib/client/contexts/ThemeContext.tsx +3 -2
  41. package/lib/client/core/ComponentBuilder.test.ts +663 -560
  42. package/lib/client/core/ComponentBuilder.ts +427 -155
  43. package/lib/client/core/ComponentRenderer.test.tsx +2 -4
  44. package/lib/client/core/ComponentRenderer.tsx +46 -33
  45. package/lib/client/core/builders/embedBuilder.ts +242 -54
  46. package/lib/client/core/builders/linkBuilder.ts +72 -45
  47. package/lib/client/core/builders/linkNodeBuilder.ts +79 -54
  48. package/lib/client/core/builders/listBuilder.ts +155 -89
  49. package/lib/client/core/builders/localeListBuilder.ts +97 -62
  50. package/lib/client/core/builders/types.ts +5 -5
  51. package/lib/client/core/cmsTemplateProcessor.ts +8 -9
  52. package/lib/client/elementRegistry.ts +3 -3
  53. package/lib/client/fontFamiliesService.test.ts +2 -10
  54. package/lib/client/fontFamiliesService.ts +3 -3
  55. package/lib/client/hmr/HMRManager.tsx +47 -30
  56. package/lib/client/hmrCssReload.ts +49 -14
  57. package/lib/client/hmrWebSocket.ts +14 -19
  58. package/lib/client/hooks/useColorVariables.test.ts +21 -21
  59. package/lib/client/hooks/useColorVariables.ts +23 -18
  60. package/lib/client/hooks/usePropertyAutocomplete.ts +4 -6
  61. package/lib/client/hooks/useVariables.ts +6 -4
  62. package/lib/client/hydration/HydrationUtils.test.ts +24 -25
  63. package/lib/client/hydration/HydrationUtils.ts +3 -4
  64. package/lib/client/i18nConfigService.test.ts +2 -7
  65. package/lib/client/i18nConfigService.ts +2 -2
  66. package/lib/client/meno-filter/MenoFilter.test.ts +47 -49
  67. package/lib/client/meno-filter/MenoFilter.ts +14 -15
  68. package/lib/client/meno-filter/bindings.ts +18 -43
  69. package/lib/client/meno-filter/init.ts +4 -4
  70. package/lib/client/meno-filter/renderer.ts +30 -32
  71. package/lib/client/meno-filter/script.generated.ts +1 -3
  72. package/lib/client/meno-filter/ui.ts +4 -6
  73. package/lib/client/meno-filter/updates.ts +18 -23
  74. package/lib/client/meno-filter/utils.ts +1 -1
  75. package/lib/client/navigation.test.ts +174 -178
  76. package/lib/client/navigation.ts +0 -1
  77. package/lib/client/responsiveStyleResolver.knownTokens.test.ts +71 -0
  78. package/lib/client/responsiveStyleResolver.test.ts +234 -232
  79. package/lib/client/responsiveStyleResolver.ts +74 -20
  80. package/lib/client/routing/RouteLoader.test.ts +24 -25
  81. package/lib/client/routing/RouteLoader.ts +27 -35
  82. package/lib/client/routing/Router.tsx +210 -153
  83. package/lib/client/scripts/ScriptExecutor.test.ts +157 -158
  84. package/lib/client/scripts/ScriptExecutor.ts +18 -36
  85. package/lib/client/services/PrefetchService.test.ts +3 -3
  86. package/lib/client/services/PrefetchService.ts +23 -29
  87. package/lib/client/styleProcessor.test.ts +9 -9
  88. package/lib/client/styleProcessor.ts +24 -15
  89. package/lib/client/styles/StyleInjector.test.ts +122 -115
  90. package/lib/client/styles/StyleInjector.ts +10 -7
  91. package/lib/client/styles/UtilityClassCollector.ts +62 -28
  92. package/lib/client/styles/cspNonce.test.ts +2 -5
  93. package/lib/client/templateEngine.test.ts +554 -488
  94. package/lib/client/templateEngine.ts +203 -73
  95. package/lib/client/theme.test.ts +1 -1
  96. package/lib/client/theme.ts +0 -1
  97. package/lib/client/utils/toast.ts +0 -1
  98. package/lib/server/__integration__/api-routes.test.ts +8 -4
  99. package/lib/server/__integration__/cms-integration.test.ts +1 -4
  100. package/lib/server/__integration__/server-lifecycle.test.ts +4 -5
  101. package/lib/server/__integration__/ssr-rendering.test.ts +47 -37
  102. package/lib/server/__integration__/static-assets.test.ts +3 -3
  103. package/lib/server/__integration__/test-helpers.ts +87 -74
  104. package/lib/server/ab/generateFunctions.ts +12 -10
  105. package/lib/server/astro/cmsPageEmitter.ts +26 -42
  106. package/lib/server/astro/componentEmitter.ts +35 -43
  107. package/lib/server/astro/cssCollector.ts +10 -26
  108. package/lib/server/astro/nodeToAstro.test.ts +1754 -34
  109. package/lib/server/astro/nodeToAstro.ts +232 -216
  110. package/lib/server/astro/normalizeOrphanTemplateProps.test.ts +115 -119
  111. package/lib/server/astro/normalizeOrphanTemplateProps.ts +11 -18
  112. package/lib/server/astro/pageEmitter.ts +9 -13
  113. package/lib/server/astro/tailwindMapper.test.ts +10 -37
  114. package/lib/server/astro/tailwindMapper.ts +33 -40
  115. package/lib/server/astro/templateTransformer.ts +17 -20
  116. package/lib/server/createServer.ts +7 -19
  117. package/lib/server/cssGenerator.test.ts +35 -44
  118. package/lib/server/cssGenerator.ts +8 -19
  119. package/lib/server/fileWatcher.test.ts +164 -13
  120. package/lib/server/fileWatcher.ts +209 -124
  121. package/lib/server/index.ts +14 -17
  122. package/lib/server/jsonLoader.test.ts +39 -2
  123. package/lib/server/jsonLoader.ts +39 -34
  124. package/lib/server/middleware/cors.test.ts +21 -21
  125. package/lib/server/middleware/cors.ts +28 -4
  126. package/lib/server/middleware/errorHandler.test.ts +7 -5
  127. package/lib/server/middleware/errorHandler.ts +3 -8
  128. package/lib/server/middleware/index.ts +0 -1
  129. package/lib/server/middleware/logger.test.ts +10 -8
  130. package/lib/server/middleware/logger.ts +17 -29
  131. package/lib/server/migrateTemplates.ts +3 -3
  132. package/lib/server/pageCache.test.ts +76 -77
  133. package/lib/server/pageCache.ts +0 -1
  134. package/lib/server/projectContext.ts +5 -4
  135. package/lib/server/providers/fileSystemCMSProvider.test.ts +142 -99
  136. package/lib/server/providers/fileSystemCMSProvider.ts +62 -38
  137. package/lib/server/routes/api/cms.test.ts +26 -14
  138. package/lib/server/routes/api/cms.ts +9 -14
  139. package/lib/server/routes/api/colors.test.ts +2 -2
  140. package/lib/server/routes/api/components.ts +31 -35
  141. package/lib/server/routes/api/config.ts +3 -4
  142. package/lib/server/routes/api/core-routes.ts +49 -76
  143. package/lib/server/routes/api/enums.test.ts +2 -2
  144. package/lib/server/routes/api/functions.ts +9 -17
  145. package/lib/server/routes/api/index.ts +3 -6
  146. package/lib/server/routes/api/pages.ts +8 -11
  147. package/lib/server/routes/api/shared.test.ts +1 -1
  148. package/lib/server/routes/api/shared.ts +12 -9
  149. package/lib/server/routes/api/variables.test.ts +3 -5
  150. package/lib/server/routes/api/variables.ts +1 -1
  151. package/lib/server/routes/index.ts +25 -28
  152. package/lib/server/routes/pages.ts +35 -31
  153. package/lib/server/routes/static.ts +17 -6
  154. package/lib/server/runtime/bundler.ts +98 -61
  155. package/lib/server/runtime/fs.ts +16 -26
  156. package/lib/server/runtime/httpServer.ts +8 -12
  157. package/lib/server/services/ColorService.test.ts +3 -3
  158. package/lib/server/services/ColorService.ts +37 -29
  159. package/lib/server/services/EnumService.test.ts +4 -8
  160. package/lib/server/services/EnumService.ts +11 -3
  161. package/lib/server/services/VariableService.test.ts +8 -12
  162. package/lib/server/services/VariableService.ts +11 -3
  163. package/lib/server/services/cmsService.test.ts +158 -120
  164. package/lib/server/services/cmsService.ts +36 -146
  165. package/lib/server/services/componentService.test.ts +125 -45
  166. package/lib/server/services/componentService.ts +70 -46
  167. package/lib/server/services/configService.test.ts +22 -45
  168. package/lib/server/services/configService.ts +50 -27
  169. package/lib/server/services/fileWatcherService.ts +42 -8
  170. package/lib/server/services/index.ts +0 -1
  171. package/lib/server/services/pageService.test.ts +8 -10
  172. package/lib/server/services/pageService.ts +32 -18
  173. package/lib/server/ssr/attributeBuilder.ts +18 -8
  174. package/lib/server/ssr/buildErrorOverlay.ts +11 -12
  175. package/lib/server/ssr/clientDataInjector.ts +7 -21
  176. package/lib/server/ssr/cmsSSRProcessor.ts +4 -8
  177. package/lib/server/ssr/cssCollector.ts +1 -1
  178. package/lib/server/ssr/errorOverlay.test.ts +1 -1
  179. package/lib/server/ssr/errorOverlay.ts +3 -9
  180. package/lib/server/ssr/htmlGenerator.nonce.test.ts +9 -14
  181. package/lib/server/ssr/htmlGenerator.test.ts +120 -44
  182. package/lib/server/ssr/htmlGenerator.ts +126 -91
  183. package/lib/server/ssr/imageMetadata.test.ts +3 -1
  184. package/lib/server/ssr/imageMetadata.ts +27 -21
  185. package/lib/server/ssr/jsCollector.test.ts +8 -18
  186. package/lib/server/ssr/jsCollector.ts +3 -8
  187. package/lib/server/ssr/liveReloadIntegration.test.ts +76 -36
  188. package/lib/server/ssr/metaTagGenerator.ts +2 -2
  189. package/lib/server/ssr/ssrRenderer.branches.test.ts +1103 -0
  190. package/lib/server/ssr/ssrRenderer.test.ts +316 -256
  191. package/lib/server/ssr/ssrRenderer.ts +795 -243
  192. package/lib/server/ssrRenderer.test.ts +1048 -954
  193. package/lib/server/utils/jsonLineMapper.test.ts +28 -28
  194. package/lib/server/utils/jsonLineMapper.ts +7 -7
  195. package/lib/server/validateStyleCoverage.ts +18 -21
  196. package/lib/server/websocketManager.ts +28 -19
  197. package/lib/shared/attributeNodeUtils.test.ts +15 -15
  198. package/lib/shared/attributeNodeUtils.ts +5 -12
  199. package/lib/shared/breakpoints.test.ts +5 -5
  200. package/lib/shared/breakpoints.ts +4 -11
  201. package/lib/shared/cmsQuery.test.ts +81 -0
  202. package/lib/shared/cmsQuery.ts +92 -0
  203. package/lib/shared/cmsQueryParser.test.ts +50 -42
  204. package/lib/shared/cmsQueryParser.ts +60 -38
  205. package/lib/shared/colorConversions.ts +9 -9
  206. package/lib/shared/colorVariableUtils.test.ts +27 -5
  207. package/lib/shared/colorVariableUtils.ts +21 -12
  208. package/lib/shared/componentRefs.ts +1 -5
  209. package/lib/shared/constants.test.ts +3 -3
  210. package/lib/shared/constants.ts +8 -8
  211. package/lib/shared/cssGeneration.test.ts +285 -144
  212. package/lib/shared/cssGeneration.ts +217 -531
  213. package/lib/shared/cssNamedColors.ts +152 -30
  214. package/lib/shared/cssProperties.test.ts +69 -70
  215. package/lib/shared/cssProperties.ts +298 -114
  216. package/lib/shared/elementClassName.test.ts +109 -109
  217. package/lib/shared/elementClassName.ts +3 -3
  218. package/lib/shared/elementUtils.ts +12 -16
  219. package/lib/shared/errorLogger.test.ts +12 -12
  220. package/lib/shared/errorLogger.ts +2 -10
  221. package/lib/shared/errors.test.ts +2 -13
  222. package/lib/shared/errors.ts +2 -8
  223. package/lib/shared/expressionEvaluator.test.ts +145 -0
  224. package/lib/shared/expressionEvaluator.ts +52 -24
  225. package/lib/shared/fontLoader.test.ts +32 -18
  226. package/lib/shared/fontLoader.ts +2 -2
  227. package/lib/shared/friendlyError.ts +2 -3
  228. package/lib/shared/gradientUtils.test.ts +3 -7
  229. package/lib/shared/gradientUtils.ts +17 -14
  230. package/lib/shared/hrefRefs.test.ts +2 -2
  231. package/lib/shared/hrefRefs.ts +2 -10
  232. package/lib/shared/i18n.test.ts +4 -4
  233. package/lib/shared/i18n.ts +18 -38
  234. package/lib/shared/index.ts +27 -0
  235. package/lib/shared/inlineSvgStyleRules.ts +14 -13
  236. package/lib/shared/interactiveStyleMappings.test.ts +32 -54
  237. package/lib/shared/interactiveStyleMappings.ts +11 -24
  238. package/lib/shared/interactiveStyles.test.ts +165 -188
  239. package/lib/shared/interfaces/contentProvider.ts +1 -1
  240. package/lib/shared/itemTemplateUtils.test.ts +11 -17
  241. package/lib/shared/itemTemplateUtils.ts +27 -39
  242. package/lib/shared/jsonRepair.ts +16 -10
  243. package/lib/shared/libraryLoader.test.ts +21 -55
  244. package/lib/shared/libraryLoader.ts +7 -22
  245. package/lib/shared/linkUtils.ts +1 -1
  246. package/lib/shared/logger.test.ts +66 -0
  247. package/lib/shared/logger.ts +94 -0
  248. package/lib/shared/markdown.ts +25 -0
  249. package/lib/shared/netlifyLocale404.test.ts +179 -0
  250. package/lib/shared/netlifyLocale404.ts +110 -0
  251. package/lib/shared/nodeUtils.test.ts +28 -16
  252. package/lib/shared/nodeUtils.ts +76 -23
  253. package/lib/shared/pathArrayUtils.test.ts +1 -2
  254. package/lib/shared/pathArrayUtils.ts +1 -1
  255. package/lib/shared/pathSecurity.ts +2 -2
  256. package/lib/shared/pathUtils.test.ts +4 -6
  257. package/lib/shared/pathUtils.ts +42 -49
  258. package/lib/shared/paths/Path.test.ts +2 -2
  259. package/lib/shared/paths/Path.ts +0 -1
  260. package/lib/shared/paths/PathConverter.test.ts +1 -1
  261. package/lib/shared/paths/PathConverter.ts +17 -20
  262. package/lib/shared/paths/PathUtils.ts +13 -13
  263. package/lib/shared/paths/PathValidator.test.ts +2 -15
  264. package/lib/shared/paths/PathValidator.ts +12 -10
  265. package/lib/shared/paths/index.ts +1 -2
  266. package/lib/shared/permissions.test.ts +168 -0
  267. package/lib/shared/permissions.ts +162 -0
  268. package/lib/shared/propResolver.test.ts +240 -244
  269. package/lib/shared/propResolver.ts +15 -26
  270. package/lib/shared/pxToRem.test.ts +7 -6
  271. package/lib/shared/pxToRem.ts +2 -5
  272. package/lib/shared/registry/BaseNodeTypeRegistry.test.ts +12 -6
  273. package/lib/shared/registry/ClientRegistry.ts +0 -2
  274. package/lib/shared/registry/ComponentRegistry.test.ts +46 -32
  275. package/lib/shared/registry/ComponentRegistry.ts +12 -9
  276. package/lib/shared/registry/NodeTypeDefinition.ts +16 -9
  277. package/lib/shared/registry/RegistryManager.ts +1 -2
  278. package/lib/shared/registry/SSRRegistry.ts +0 -2
  279. package/lib/shared/registry/createNodeType.ts +7 -9
  280. package/lib/shared/registry/defineNodeType.ts +2 -6
  281. package/lib/shared/registry/fieldPresets.ts +3 -1
  282. package/lib/shared/registry/index.ts +0 -1
  283. package/lib/shared/registry/nodeTypes/ComponentInstanceNodeType.ts +14 -15
  284. package/lib/shared/registry/nodeTypes/CustomNodeType.ts +103 -0
  285. package/lib/shared/registry/nodeTypes/EmbedNodeType.ts +18 -11
  286. package/lib/shared/registry/nodeTypes/HtmlNodeType.ts +48 -19
  287. package/lib/shared/registry/nodeTypes/IslandNodeType.ts +129 -0
  288. package/lib/shared/registry/nodeTypes/LinkNodeType.ts +21 -19
  289. package/lib/shared/registry/nodeTypes/ListNodeType.ts +117 -77
  290. package/lib/shared/registry/nodeTypes/LocaleListNodeType.ts +27 -21
  291. package/lib/shared/registry/nodeTypes/MarkdownNodeType.ts +78 -0
  292. package/lib/shared/registry/nodeTypes/SlotMarkerType.ts +12 -8
  293. package/lib/shared/registry/nodeTypes/index.ts +26 -3
  294. package/lib/shared/responsiveScaling.test.ts +16 -34
  295. package/lib/shared/responsiveScaling.ts +61 -42
  296. package/lib/shared/responsiveStyleUtils.test.ts +0 -1
  297. package/lib/shared/responsiveStyleUtils.ts +11 -13
  298. package/lib/shared/richtext/htmlToTiptap.test.ts +139 -130
  299. package/lib/shared/richtext/htmlToTiptap.ts +2 -4
  300. package/lib/shared/richtext/tiptapToHtml.test.ts +5 -6
  301. package/lib/shared/richtext/types.ts +1 -8
  302. package/lib/shared/slugTranslator.test.ts +13 -13
  303. package/lib/shared/slugTranslator.ts +12 -16
  304. package/lib/shared/slugify.ts +9 -15
  305. package/lib/shared/styleNodeUtils.test.ts +8 -8
  306. package/lib/shared/styleNodeUtils.ts +18 -20
  307. package/lib/shared/styleUtils.test.ts +87 -61
  308. package/lib/shared/styleUtils.ts +5 -6
  309. package/lib/shared/themeDefaults.test.ts +11 -14
  310. package/lib/shared/themeDefaults.ts +3 -4
  311. package/lib/shared/tree/PathBuilder.test.ts +63 -145
  312. package/lib/shared/tree/PathBuilder.ts +59 -47
  313. package/lib/shared/treePathUtils.test.ts +51 -12
  314. package/lib/shared/treePathUtils.ts +91 -60
  315. package/lib/shared/types/api.ts +105 -8
  316. package/lib/shared/types/cms.test.ts +34 -0
  317. package/lib/shared/types/cms.ts +90 -34
  318. package/lib/shared/types/comment.ts +49 -16
  319. package/lib/shared/types/components.ts +51 -25
  320. package/lib/shared/types/errors.test.ts +1 -6
  321. package/lib/shared/types/errors.ts +3 -7
  322. package/lib/shared/types/experiments.ts +28 -28
  323. package/lib/shared/types/index.ts +25 -2
  324. package/lib/shared/types/permissions.ts +139 -0
  325. package/lib/shared/types/styles.ts +0 -1
  326. package/lib/shared/types/variables.test.ts +4 -13
  327. package/lib/shared/types/variables.ts +51 -30
  328. package/lib/shared/types.ts +1 -2
  329. package/lib/shared/utilityClassConfig.ts +751 -321
  330. package/lib/shared/utilityClassMapper.durability.test.ts +117 -0
  331. package/lib/shared/utilityClassMapper.test.ts +433 -95
  332. package/lib/shared/utilityClassMapper.ts +322 -249
  333. package/lib/shared/utilityClassNames.test.ts +38 -0
  334. package/lib/shared/utilityClassNames.ts +458 -0
  335. package/lib/shared/utils.test.ts +2 -10
  336. package/lib/shared/utils.ts +19 -10
  337. package/lib/shared/validation/cmsValidators.ts +2 -1
  338. package/lib/shared/validation/commentValidators.test.ts +53 -0
  339. package/lib/shared/validation/commentValidators.ts +12 -1
  340. package/lib/shared/validation/index.ts +1 -0
  341. package/lib/shared/validation/permissionsValidators.test.ts +49 -0
  342. package/lib/shared/validation/permissionsValidators.ts +49 -0
  343. package/lib/shared/validation/propValidator.test.ts +19 -21
  344. package/lib/shared/validation/propValidator.ts +13 -18
  345. package/lib/shared/validation/schemas.test.ts +64 -32
  346. package/lib/shared/validation/schemas.ts +616 -345
  347. package/lib/shared/validation/validators.test.ts +3 -8
  348. package/lib/shared/validation/validators.ts +89 -68
  349. package/lib/shared/viewportUnits.integration.test.ts +14 -10
  350. package/lib/shared/viewportUnits.test.ts +24 -23
  351. package/lib/shared/viewportUnits.ts +12 -5
  352. package/lib/test-utils/dom-setup.ts +1 -1
  353. package/lib/test-utils/factories/ConsoleMockFactory.ts +10 -14
  354. package/lib/test-utils/factories/DomMockFactory.ts +17 -23
  355. package/lib/test-utils/factories/EventMockFactory.ts +7 -13
  356. package/lib/test-utils/factories/FetchMockFactory.ts +39 -57
  357. package/lib/test-utils/factories/ServerMockFactory.ts +6 -10
  358. package/lib/test-utils/factories/StoreMockFactory.ts +18 -29
  359. package/lib/test-utils/fixtures.ts +45 -45
  360. package/lib/test-utils/helpers/asyncHelpers.test.ts +15 -18
  361. package/lib/test-utils/helpers/asyncHelpers.ts +11 -20
  362. package/lib/test-utils/helpers.ts +1 -5
  363. package/lib/test-utils/index.ts +0 -4
  364. package/lib/test-utils/mockFactories.ts +13 -19
  365. package/lib/test-utils/mocks.ts +6 -4
  366. package/package.json +3 -5
  367. package/scripts/build-for-publish.mjs +2 -4
  368. package/scripts/build-meno-filter.ts +4 -7
  369. package/tsconfig.json +1 -0
  370. package/vite.config.ts +4 -4
  371. package/build-next.ts +0 -1361
  372. package/build-static.test.ts +0 -424
  373. package/build-static.ts +0 -1074
  374. package/dist/build-static.js +0 -36
  375. package/dist/chunks/chunk-2MHDV5BF.js +0 -251
  376. package/dist/chunks/chunk-2MHDV5BF.js.map +0 -7
  377. package/dist/chunks/chunk-AZQYF6KE.js +0 -559
  378. package/dist/chunks/chunk-AZQYF6KE.js.map +0 -7
  379. package/dist/chunks/chunk-GZHGVVW3.js +0 -322
  380. package/dist/chunks/chunk-GZHGVVW3.js.map +0 -7
  381. package/dist/chunks/chunk-H3GJ4H2U.js.map +0 -7
  382. package/dist/chunks/chunk-I7YIGZXT.js +0 -467
  383. package/dist/chunks/chunk-I7YIGZXT.js.map +0 -7
  384. package/dist/chunks/chunk-IGYR22T6.js +0 -6192
  385. package/dist/chunks/chunk-IGYR22T6.js.map +0 -7
  386. package/dist/chunks/chunk-JGP5A3Y5.js +0 -1136
  387. package/dist/chunks/chunk-JGP5A3Y5.js.map +0 -7
  388. package/dist/chunks/chunk-JGWFTO6P.js.map +0 -7
  389. package/dist/chunks/chunk-O3NAGJP4.js.map +0 -7
  390. package/dist/chunks/chunk-QB2LNO4W.js +0 -77
  391. package/dist/chunks/chunk-QB2LNO4W.js.map +0 -7
  392. package/dist/chunks/chunk-R6XHAFBF.js +0 -3821
  393. package/dist/chunks/chunk-R6XHAFBF.js.map +0 -7
  394. package/dist/chunks/chunk-UB44F4Z2.js.map +0 -7
  395. package/dist/chunks/chunk-WQFG7PAH.js.map +0 -7
  396. package/dist/chunks/chunk-X754AHS5.js.map +0 -7
  397. package/dist/chunks/chunk-YBLHKYFF.js.map +0 -7
  398. package/dist/chunks/configService-R3OGU2UD.js +0 -13
  399. package/dist/chunks/configService-R3OGU2UD.js.map +0 -7
  400. package/dist/chunks/constants-STK2YBIW.js +0 -46
  401. package/dist/chunks/constants-STK2YBIW.js.map +0 -7
  402. package/dist/chunks/fs-JGINUXGL.js.map +0 -7
  403. package/dist/entries/server-router.js +0 -67
  404. package/dist/entries/server-router.js.map +0 -7
  405. package/entries/server-router.tsx +0 -81
  406. package/lib/server/providers/fileSystemPageProvider.ts +0 -160
  407. package/lib/server/webflow/buildWebflow.ts +0 -635
  408. package/lib/server/webflow/index.ts +0 -23
  409. package/lib/server/webflow/nodeToWebflow.test.ts +0 -3170
  410. package/lib/server/webflow/nodeToWebflow.ts +0 -2435
  411. package/lib/server/webflow/styleMapper.test.ts +0 -389
  412. package/lib/server/webflow/styleMapper.ts +0 -695
  413. package/lib/server/webflow/templateWrapper.ts +0 -49
  414. package/lib/server/webflow/types.ts +0 -396
  415. /package/dist/{build-static.js.map → chunks/fs-G3ANWEFP.js.map} +0 -0
@@ -1,7 +1,5 @@
1
1
  {
2
2
  "permissions": {
3
- "allow": [
4
- "Bash(npx tsc:*)"
5
- ]
3
+ "allow": ["Bash(npx tsc:*)"]
6
4
  }
7
5
  }
package/bin/cli.ts CHANGED
@@ -1,21 +1,24 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
3
  * meno CLI
4
- * Commands: dev, build, init
4
+ *
5
+ * The bespoke JSON renderer (`meno dev`/`build`/`serve`) has been retired — Meno
6
+ * targets Astro exclusively now. The only remaining command is `init` (scaffold a
7
+ * project). To run/build a project, convert it to meno-astro and use the Astro
8
+ * toolchain (`@meno/studio` in the editor, or `astro dev`/`astro build`).
5
9
  */
6
10
 
7
- import { resolve, join } from 'path';
8
- import { existsSync, mkdirSync, writeFileSync, cpSync, readFileSync } from 'fs';
9
- import { setProjectRoot } from '../lib/server/projectContext';
10
- import { generateBuildErrorPage, type BuildErrorsData } from '../lib/server/ssr/buildErrorOverlay';
11
- import { createRuntimeServer, serveFile, fileExists as runtimeFileExists } from '../lib/server/runtime';
11
+ import { resolve, join } from 'node:path';
12
+ import { existsSync, mkdirSync, writeFileSync, cpSync } from 'node:fs';
13
+ import { migrateI18nConfig } from '../lib/shared/i18n';
14
+ import { syncNetlifyLocale404Block } from '../lib/shared/netlifyLocale404';
12
15
 
13
16
  const args = process.argv.slice(2);
14
17
  const command = args[0];
15
18
 
16
19
  function printHelp() {
17
20
  console.log(`
18
- meno - Visual editor for JSON-based pages
21
+ meno - Visual editor for websites (meno-astro)
19
22
 
20
23
  Requirements:
21
24
  - Bun or Node.js 18+
@@ -24,207 +27,20 @@ Usage:
24
27
  meno <command> [options]
25
28
 
26
29
  Commands:
27
- dev Start development server with hot reload
28
- build Build static HTML files for production
29
- serve Serve built files from ./dist on port 8080
30
30
  init Initialize a new project
31
31
 
32
- Options:
33
- build --dev Include draft pages in build (for local preview)
32
+ Note:
33
+ The legacy JSON runtime (dev/build/serve) has been retired. Convert a JSON
34
+ project to meno-astro and use the Astro toolchain instead.
34
35
 
35
36
  Examples:
36
- meno dev Start dev server in current directory
37
- meno build Build static files to ./dist (excludes drafts)
38
- meno build --dev Build including draft pages
39
- meno serve Serve built files on port 8080
40
37
  meno init my-project Create new project in ./my-project
41
38
  `);
42
39
  }
43
40
 
44
- // Parse _headers file (Netlify/Cloudflare format)
45
- function parseHeadersFile(distPath: string): Map<string, Record<string, string>> {
46
- const headersPath = join(distPath, '_headers');
47
- const headers = new Map<string, Record<string, string>>();
48
-
49
- if (!existsSync(headersPath)) return headers;
50
-
51
- const content = readFileSync(headersPath, 'utf-8');
52
- let currentPath = '';
53
-
54
- for (const line of content.split('\n')) {
55
- const trimmed = line.trim();
56
- if (!trimmed || trimmed.startsWith('#')) continue;
57
-
58
- if (!line.startsWith(' ') && !line.startsWith('\t')) {
59
- // Path line
60
- currentPath = trimmed;
61
- if (!headers.has(currentPath)) {
62
- headers.set(currentPath, {});
63
- }
64
- } else if (currentPath && trimmed.includes(':')) {
65
- // Header line
66
- const colonIndex = trimmed.indexOf(':');
67
- const name = trimmed.substring(0, colonIndex).trim();
68
- const value = trimmed.substring(colonIndex + 1).trim();
69
- headers.get(currentPath)![name] = value;
70
- }
71
- }
72
-
73
- return headers;
74
- }
75
-
76
- // Get headers matching a pathname
77
- function getMatchingHeaders(
78
- pathname: string,
79
- headersMap: Map<string, Record<string, string>>
80
- ): Record<string, string> {
81
- const result: Record<string, string> = {};
82
-
83
- headersMap.forEach((headers, pattern) => {
84
- if (pattern === pathname || pattern === '/*') {
85
- Object.assign(result, headers);
86
- } else if (pattern.endsWith('/*')) {
87
- const prefix = pattern.slice(0, -1);
88
- if (pathname.startsWith(prefix)) {
89
- Object.assign(result, headers);
90
- }
91
- }
92
- });
93
-
94
- return result;
95
- }
96
-
97
- // Start static file server on port 8080 (non-blocking)
98
- async function startStaticServer(distPath: string) {
99
- const { SERVE_PORT } = await import('../lib/shared/constants');
100
-
101
- // Parse _headers file once on startup
102
- const headersMap = parseHeadersFile(distPath);
103
-
104
- const server = await createRuntimeServer({
105
- port: SERVE_PORT,
106
- hostname: 'localhost',
107
- async fetch(req: Request) {
108
- const url = new URL(req.url);
109
- let pathname = url.pathname;
110
-
111
- // Check for build errors and show overlay (except for _errors.json itself)
112
- if (pathname !== '/_errors.json') {
113
- const errorsPath = join(distPath, '_errors.json');
114
- if (existsSync(errorsPath)) {
115
- try {
116
- const errorsData: BuildErrorsData = JSON.parse(readFileSync(errorsPath, 'utf-8'));
117
- return new Response(generateBuildErrorPage(errorsData), {
118
- headers: { 'Content-Type': 'text/html; charset=utf-8' },
119
- });
120
- } catch {
121
- // If we can't parse errors file, continue normally
122
- }
123
- }
124
- }
125
-
126
- // Default to index.html for root
127
- if (pathname === '/') {
128
- pathname = '/index.html';
129
- }
130
-
131
- // Get custom headers for this path
132
- const customHeaders = getMatchingHeaders(pathname, headersMap);
133
-
134
- // Try to serve the file
135
- const filePath = join(distPath, pathname);
136
-
137
- // Check if file exists and serve it
138
- if (await runtimeFileExists(filePath)) {
139
- return await serveFile(filePath, customHeaders);
140
- }
141
-
142
- // Try with .html extension for clean URLs
143
- const htmlPath = filePath.endsWith('.html') ? filePath : `${filePath}.html`;
144
- if (await runtimeFileExists(htmlPath)) {
145
- return await serveFile(htmlPath, customHeaders);
146
- }
147
-
148
- // Try index.html in directory
149
- const indexPath = join(filePath, 'index.html');
150
- if (await runtimeFileExists(indexPath)) {
151
- return await serveFile(indexPath, customHeaders);
152
- }
153
-
154
- return new Response('Not Found', { status: 404 });
155
- },
156
- });
157
-
158
- return server;
159
- }
160
-
161
- async function runDev() {
162
- const projectRoot = process.cwd();
163
-
164
- // Validate project structure
165
- if (!existsSync(join(projectRoot, 'pages'))) {
166
- console.error('❌ No pages directory found. Are you in a valid project directory?');
167
- console.error(' Run "meno init <project-name>" to create a new project.');
168
- process.exit(1);
169
- }
170
-
171
- // Set project root for path resolution
172
- setProjectRoot(projectRoot);
173
-
174
- console.log(`📁 Project root: ${projectRoot}`);
175
-
176
- // Start static server on 8080 if dist exists
177
- const distPath = join(projectRoot, 'dist');
178
- if (existsSync(distPath)) {
179
- const staticServer = await startStaticServer(distPath);
180
- console.log(`🚀 Static server running at http://localhost:${staticServer.port}`);
181
- }
182
-
183
- // Import and run the dev server (it handles all initialization internally)
184
- await import('../entries/server-router');
185
- }
186
-
187
- async function runBuild(isDev: boolean = false) {
188
- const projectRoot = process.cwd();
189
-
190
- // Validate project structure
191
- if (!existsSync(join(projectRoot, 'pages'))) {
192
- console.error('❌ No pages directory found. Are you in a valid project directory?');
193
- process.exit(1);
194
- }
195
-
196
- // Set project root for path resolution
197
- setProjectRoot(projectRoot);
198
-
199
- // Set dev mode environment variable (drafts are built in dev mode)
200
- if (isDev) {
201
- process.env.MENO_DEV_BUILD = 'true';
202
- }
203
-
204
- console.log(`📁 Building project: ${projectRoot}${isDev ? ' (dev mode - including drafts)' : ''}`);
205
-
206
- // Import and run build
207
- const { buildStaticPages } = await import('../build-static.ts');
208
- await buildStaticPages();
209
- }
210
-
211
- async function runServe() {
212
- const projectRoot = process.cwd();
213
- const distPath = join(projectRoot, 'dist');
214
-
215
- // Validate dist directory exists
216
- if (!existsSync(distPath)) {
217
- console.error('❌ No dist directory found. Run "meno build" first.');
218
- process.exit(1);
219
- }
220
-
221
- console.log(`📁 Serving built files from: ${distPath}`);
222
- const server = await startStaticServer(distPath);
223
- console.log(`🚀 Static server running at http://localhost:${server.port}`);
224
-
225
- // Keep the process alive
226
- await new Promise(() => {});
227
- }
41
+ const RETIRED_NOTICE = `The legacy JSON "${command}" command has been retired.
42
+ Meno targets Astro exclusively now. Convert this project to meno-astro and use the
43
+ Astro toolchain instead (open it in @meno/studio, or run "astro dev" / "astro build").`;
228
44
 
229
45
  async function runInit(projectName?: string) {
230
46
  if (!projectName) {
@@ -252,13 +68,10 @@ async function runInit(projectName?: string) {
252
68
  const defaultConfig = {
253
69
  fonts: [],
254
70
  editor: {
255
- theme: 'dark'
256
- }
71
+ theme: 'dark',
72
+ },
257
73
  };
258
- writeFileSync(
259
- join(projectPath, 'project.config.json'),
260
- JSON.stringify(defaultConfig, null, 2)
261
- );
74
+ writeFileSync(join(projectPath, 'project.config.json'), JSON.stringify(defaultConfig, null, 2));
262
75
 
263
76
  // Create default colors.json
264
77
  const defaultColors = {
@@ -268,15 +81,12 @@ async function runInit(projectName?: string) {
268
81
  label: 'Light',
269
82
  colors: {
270
83
  text: '#1f2937',
271
- bg: '#ffffff'
272
- }
273
- }
274
- }
84
+ bg: '#ffffff',
85
+ },
86
+ },
87
+ },
275
88
  };
276
- writeFileSync(
277
- join(projectPath, 'colors.json'),
278
- JSON.stringify(defaultColors, null, 2)
279
- );
89
+ writeFileSync(join(projectPath, 'colors.json'), JSON.stringify(defaultColors, null, 2));
280
90
 
281
91
  // Create package.json for deployment
282
92
  const packageJson = {
@@ -288,18 +98,24 @@ async function runInit(projectName?: string) {
288
98
  build: 'meno build',
289
99
  },
290
100
  dependencies: {
291
- 'meno-core': '^1.0.0'
292
- }
101
+ 'meno-core': '^1.0.0',
102
+ },
293
103
  };
294
- writeFileSync(
295
- join(projectPath, 'package.json'),
296
- JSON.stringify(packageJson, null, 2)
297
- );
104
+ writeFileSync(join(projectPath, 'package.json'), JSON.stringify(packageJson, null, 2));
298
105
 
299
106
  // Create .claude/tools/ with screenshot tool
300
107
  mkdirSync(join(projectPath, '.claude', 'tools'), { recursive: true });
301
108
 
302
- const screenshotToolSrc = join(import.meta.dirname, '..', '..', '..', 'example', '.claude', 'tools', 'screenshot.mjs');
109
+ const screenshotToolSrc = join(
110
+ import.meta.dirname,
111
+ '..',
112
+ '..',
113
+ '..',
114
+ 'example',
115
+ '.claude',
116
+ 'tools',
117
+ 'screenshot.mjs',
118
+ );
303
119
  if (existsSync(screenshotToolSrc)) {
304
120
  cpSync(screenshotToolSrc, join(projectPath, '.claude', 'tools', 'screenshot.mjs'));
305
121
  }
@@ -335,34 +151,32 @@ dist/
335
151
  # OS files
336
152
  .DS_Store
337
153
  `;
338
- writeFileSync(
339
- join(projectPath, '.gitignore'),
340
- gitignore
341
- );
342
-
343
- // Create netlify.toml
344
- const netlifyConfig = `[build]
154
+ writeFileSync(join(projectPath, '.gitignore'), gitignore);
155
+
156
+ // Create netlify.toml. Routed through the shared locale-404 sync for uniformity
157
+ // with the other netlify.toml producers — a no-op here (new projects are
158
+ // single-locale with no 404 page), but the managed block appears automatically
159
+ // if this scaffold ever grows locales/404 defaults.
160
+ const netlifyConfig = syncNetlifyLocale404Block(
161
+ `[build]
345
162
  command = "bun install && bun run build"
346
163
  publish = "dist"
347
164
 
348
165
  [build.environment]
349
166
  BUN_VERSION = "1"
350
- `;
351
- writeFileSync(
352
- join(projectPath, 'netlify.toml'),
353
- netlifyConfig
167
+ `,
168
+ migrateI18nConfig((defaultConfig as { i18n?: unknown }).i18n),
169
+ false, // the scaffold ships pages/index.json only — no 404 page
354
170
  );
171
+ writeFileSync(join(projectPath, 'netlify.toml'), netlifyConfig);
355
172
 
356
173
  // Create vercel.json
357
174
  const vercelConfig = {
358
175
  buildCommand: 'bun run build',
359
176
  outputDirectory: 'dist',
360
- installCommand: 'bun install'
177
+ installCommand: 'bun install',
361
178
  };
362
- writeFileSync(
363
- join(projectPath, 'vercel.json'),
364
- JSON.stringify(vercelConfig, null, 2)
365
- );
179
+ writeFileSync(join(projectPath, 'vercel.json'), JSON.stringify(vercelConfig, null, 2));
366
180
 
367
181
  // Create wrangler.toml for Cloudflare Pages
368
182
  const cloudflareConfig = `name = "${projectName}"
@@ -372,10 +186,7 @@ pages_build_output_dir = "dist"
372
186
  [build]
373
187
  command = "bun install && bun run build"
374
188
  `;
375
- writeFileSync(
376
- join(projectPath, 'wrangler.toml'),
377
- cloudflareConfig
378
- );
189
+ writeFileSync(join(projectPath, 'wrangler.toml'), cloudflareConfig);
379
190
 
380
191
  // Create default index page
381
192
  const defaultPage = {
@@ -385,34 +196,31 @@ command = "bun install && bun run build"
385
196
  keywords: '',
386
197
  ogTitle: 'Your Project Title',
387
198
  ogDescription: 'Your Project Description',
388
- ogType: 'website'
199
+ ogType: 'website',
389
200
  },
390
201
  root: {
391
202
  type: 'node',
392
203
  tag: 'div',
393
204
  style: {
394
205
  base: {
395
- padding: '40px'
206
+ padding: '40px',
396
207
  },
397
208
  tablet: {},
398
- mobile: {}
209
+ mobile: {},
399
210
  },
400
211
  children: [
401
212
  {
402
213
  type: 'node',
403
214
  tag: 'h1',
404
215
  style: {
405
- base: {}
216
+ base: {},
406
217
  },
407
- children: 'Hello'
408
- }
409
- ]
410
- }
218
+ children: 'Hello',
219
+ },
220
+ ],
221
+ },
411
222
  };
412
- writeFileSync(
413
- join(projectPath, 'pages', 'index.json'),
414
- JSON.stringify(defaultPage, null, 2)
415
- );
223
+ writeFileSync(join(projectPath, 'pages', 'index.json'), JSON.stringify(defaultPage, null, 2));
416
224
 
417
225
  console.log('✅ Created project structure:');
418
226
  console.log(` ${projectName}/`);
@@ -449,17 +257,14 @@ command = "bun install && bun run build"
449
257
 
450
258
  // Main
451
259
  switch (command) {
452
- case 'dev':
453
- runDev();
260
+ case 'init':
261
+ runInit(args[1]);
454
262
  break;
263
+ case 'dev':
455
264
  case 'build':
456
- runBuild(args.includes('--dev'));
457
- break;
458
265
  case 'serve':
459
- runServe();
460
- break;
461
- case 'init':
462
- runInit(args[1]);
266
+ console.error(RETIRED_NOTICE);
267
+ process.exit(1);
463
268
  break;
464
269
  case '--help':
465
270
  case '-h':