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
@@ -250,7 +250,7 @@ function parseParagraph(element: HTMLElement): TiptapNode {
250
250
  }
251
251
 
252
252
  function parseHeading(element: HTMLElement): TiptapNode {
253
- const level = parseInt(element.tagName[1], 10);
253
+ const level = parseInt(element.tagName[1] ?? '', 10);
254
254
  const content = parseInlineChildren(element);
255
255
  const node: TiptapNode = {
256
256
  type: 'heading',
@@ -403,9 +403,7 @@ function parseTable(element: HTMLElement): TiptapNode {
403
403
  }
404
404
 
405
405
  // Also check direct tr children
406
- const directRows = Array.from(element.children).filter(
407
- (child) => child.tagName.toLowerCase() === 'tr'
408
- );
406
+ const directRows = Array.from(element.children).filter((child) => child.tagName.toLowerCase() === 'tr');
409
407
  for (const tr of directRows) {
410
408
  const row = parseTableRow(tr as HTMLElement);
411
409
  if (row) rows.push(row);
@@ -220,11 +220,7 @@ describe('tiptapToHtml', () => {
220
220
  content: [
221
221
  {
222
222
  type: 'paragraph',
223
- content: [
224
- { type: 'text', text: 'Line 1' },
225
- { type: 'hardBreak' },
226
- { type: 'text', text: 'Line 2' },
227
- ],
223
+ content: [{ type: 'text', text: 'Line 1' }, { type: 'hardBreak' }, { type: 'text', text: 'Line 2' }],
228
224
  },
229
225
  ],
230
226
  };
@@ -243,7 +239,10 @@ describe('tiptapToHtml', () => {
243
239
  {
244
240
  type: 'tableRow',
245
241
  content: [
246
- { type: 'tableHeader', content: [{ type: 'paragraph', content: [{ type: 'text', text: 'Header' }] }] },
242
+ {
243
+ type: 'tableHeader',
244
+ content: [{ type: 'paragraph', content: [{ type: 'text', text: 'Header' }] }],
245
+ },
247
246
  ],
248
247
  },
249
248
  {
@@ -76,11 +76,4 @@ export type TiptapNodeType =
76
76
  /**
77
77
  * Known Tiptap mark types
78
78
  */
79
- export type TiptapMarkType =
80
- | 'bold'
81
- | 'italic'
82
- | 'underline'
83
- | 'strike'
84
- | 'code'
85
- | 'link'
86
- | 'textStyle';
79
+ export type TiptapMarkType = 'bold' | 'italic' | 'underline' | 'strike' | 'code' | 'link' | 'textStyle';
@@ -251,23 +251,23 @@ describe('slugTranslator', () => {
251
251
 
252
252
  test('should include correct locale codes', () => {
253
253
  const links = getLocaleLinks('/about', 'en', i18nConfig, slugIndex);
254
- const codes = links.map(link => link.locale);
254
+ const codes = links.map((link) => link.locale);
255
255
  expect(codes).toEqual(['en', 'pl', 'de']);
256
256
  });
257
257
 
258
258
  test('should include correct native names', () => {
259
259
  const links = getLocaleLinks('/about', 'en', i18nConfig, slugIndex);
260
- const names = links.map(link => link.nativeName);
260
+ const names = links.map((link) => link.nativeName);
261
261
  expect(names).toEqual(['English', 'Polski', 'Deutsch']);
262
262
  });
263
263
 
264
264
  test('should mark current locale correctly', () => {
265
265
  const links = getLocaleLinks('/about', 'pl', i18nConfig, slugIndex);
266
- const currentLink = links.find(link => link.locale === 'pl');
266
+ const currentLink = links.find((link) => link.locale === 'pl');
267
267
  expect(currentLink?.isCurrent).toBe(true);
268
268
 
269
- const otherLinks = links.filter(link => link.locale !== 'pl');
270
- otherLinks.forEach(link => {
269
+ const otherLinks = links.filter((link) => link.locale !== 'pl');
270
+ otherLinks.forEach((link) => {
271
271
  expect(link.isCurrent).toBe(false);
272
272
  });
273
273
  });
@@ -275,36 +275,36 @@ describe('slugTranslator', () => {
275
275
  test('should translate paths correctly for each locale', () => {
276
276
  const links = getLocaleLinks('/about', 'en', i18nConfig, slugIndex);
277
277
 
278
- const enLink = links.find(link => link.locale === 'en');
278
+ const enLink = links.find((link) => link.locale === 'en');
279
279
  expect(enLink?.path).toBe('/about');
280
280
 
281
- const plLink = links.find(link => link.locale === 'pl');
281
+ const plLink = links.find((link) => link.locale === 'pl');
282
282
  expect(plLink?.path).toBe('/pl/o-nas');
283
283
 
284
- const deLink = links.find(link => link.locale === 'de');
284
+ const deLink = links.find((link) => link.locale === 'de');
285
285
  expect(deLink?.path).toBe('/de/uber');
286
286
  });
287
287
 
288
288
  test('should handle root path', () => {
289
289
  const links = getLocaleLinks('/', 'en', i18nConfig, slugIndex);
290
290
 
291
- const enLink = links.find(link => link.locale === 'en');
291
+ const enLink = links.find((link) => link.locale === 'en');
292
292
  expect(enLink?.path).toBe('/');
293
293
 
294
- const plLink = links.find(link => link.locale === 'pl');
294
+ const plLink = links.find((link) => link.locale === 'pl');
295
295
  expect(plLink?.path).toBe('/pl');
296
296
 
297
- const deLink = links.find(link => link.locale === 'de');
297
+ const deLink = links.find((link) => link.locale === 'de');
298
298
  expect(deLink?.path).toBe('/de');
299
299
  });
300
300
 
301
301
  test('should handle Polish path', () => {
302
302
  const links = getLocaleLinks('/pl/o-nas', 'pl', i18nConfig, slugIndex);
303
303
 
304
- const enLink = links.find(link => link.locale === 'en');
304
+ const enLink = links.find((link) => link.locale === 'en');
305
305
  expect(enLink?.path).toBe('/about');
306
306
 
307
- const plLink = links.find(link => link.locale === 'pl');
307
+ const plLink = links.find((link) => link.locale === 'pl');
308
308
  expect(plLink?.path).toBe('/pl/o-nas');
309
309
  });
310
310
  });
@@ -49,7 +49,7 @@ export function buildSlugIndex(mappings: SlugMap[]): Map<string, SlugIndexEntry>
49
49
  export function findPageBySlug(
50
50
  slug: string,
51
51
  locale: string,
52
- index: Map<string, SlugIndexEntry>
52
+ index: Map<string, SlugIndexEntry>,
53
53
  ): SlugIndexEntry | undefined {
54
54
  const key = `${locale}:${slug}`;
55
55
  return index.get(key);
@@ -70,7 +70,7 @@ export function translatePath(
70
70
  targetLocale: string,
71
71
  currentLocale: string,
72
72
  defaultLocale: string,
73
- index: Map<string, SlugIndexEntry>
73
+ index: Map<string, SlugIndexEntry>,
74
74
  ): string {
75
75
  // Extract slug from current path (remove locale prefix if present)
76
76
  let slug = currentPath;
@@ -127,12 +127,12 @@ export function translatePath(
127
127
  * Locale link information for locale switcher
128
128
  */
129
129
  export interface LocaleLink {
130
- locale: string; // Locale code (e.g., "pl")
131
- langTag: string; // BCP 47 language tag (e.g., "pl-PL")
132
- name: string; // English name (e.g., "Polish")
133
- nativeName: string; // Display name in native language (e.g., "Polski")
134
- path: string; // Translated path for this locale
135
- isCurrent: boolean; // Whether this is the current locale
130
+ locale: string; // Locale code (e.g., "pl")
131
+ langTag: string; // BCP 47 language tag (e.g., "pl-PL")
132
+ name: string; // English name (e.g., "Polish")
133
+ nativeName: string; // Display name in native language (e.g., "Polski")
134
+ path: string; // Translated path for this locale
135
+ isCurrent: boolean; // Whether this is the current locale
136
136
  }
137
137
 
138
138
  /**
@@ -149,9 +149,9 @@ export function getLocaleLinks(
149
149
  currentPath: string,
150
150
  currentLocale: string,
151
151
  i18nConfig: I18nConfig,
152
- index: Map<string, SlugIndexEntry>
152
+ index: Map<string, SlugIndexEntry>,
153
153
  ): LocaleLink[] {
154
- return i18nConfig.locales.map(localeConfig => ({
154
+ return i18nConfig.locales.map((localeConfig) => ({
155
155
  locale: localeConfig.code,
156
156
  langTag: localeConfig.langTag,
157
157
  name: localeConfig.name,
@@ -173,11 +173,7 @@ export function getLocaleLinks(
173
173
  * Used by the slug/page-rename flow to compute the (old, new) href pair
174
174
  * for cascade rewrites in incoming links.
175
175
  */
176
- export function buildPageUrlForLocale(
177
- slug: string,
178
- locale: string,
179
- defaultLocale: string,
180
- ): string {
176
+ export function buildPageUrlForLocale(slug: string, locale: string, defaultLocale: string): string {
181
177
  const cleanSlug = slug.replace(/^\/+/, '');
182
178
  if (locale === defaultLocale) {
183
179
  return cleanSlug === '' ? '/' : `/${cleanSlug}`;
@@ -196,7 +192,7 @@ export function buildPageUrlForLocale(
196
192
  export function resolveSlugToPageId(
197
193
  slug: string,
198
194
  locale: string,
199
- index: Map<string, SlugIndexEntry>
195
+ index: Map<string, SlugIndexEntry>,
200
196
  ): string | undefined {
201
197
  const entry = findPageBySlug(slug, locale, index);
202
198
  return entry?.pageId;
@@ -17,13 +17,13 @@ export function slugify(text: string): string {
17
17
 
18
18
  return text
19
19
  .toLowerCase()
20
- .normalize('NFD') // Decompose accented chars (é -> e + ́)
21
- .replace(/[\u0300-\u036f]/g, '') // Remove diacritics
22
- .replace(/[^a-z0-9\s-]/g, '') // Remove special chars
20
+ .normalize('NFD') // Decompose accented chars (é -> e + ́)
21
+ .replace(/[\u0300-\u036f]/g, '') // Remove diacritics
22
+ .replace(/[^a-z0-9\s-]/g, '') // Remove special chars
23
23
  .trim()
24
- .replace(/\s+/g, '-') // Replace spaces with hyphens
25
- .replace(/-+/g, '-') // Collapse multiple hyphens
26
- .replace(/^-|-$/g, ''); // Remove leading/trailing hyphens
24
+ .replace(/\s+/g, '-') // Replace spaces with hyphens
25
+ .replace(/-+/g, '-') // Collapse multiple hyphens
26
+ .replace(/^-|-$/g, ''); // Remove leading/trailing hyphens
27
27
  }
28
28
 
29
29
  /**
@@ -34,10 +34,7 @@ export function slugify(text: string): string {
34
34
  * @param defaultLocale - Locale to use for i18n extraction (default: 'en')
35
35
  * @returns Extracted string value
36
36
  */
37
- export function extractStringValue(
38
- value: unknown,
39
- defaultLocale: string = 'en'
40
- ): string {
37
+ export function extractStringValue(value: unknown, defaultLocale: string = 'en'): string {
41
38
  // Direct string
42
39
  if (typeof value === 'string') {
43
40
  return value;
@@ -69,10 +66,7 @@ export function extractStringValue(
69
66
  * @param existingFilenames - Array of existing filenames to check against
70
67
  * @returns Unique filename
71
68
  */
72
- export function generateUniqueFilename(
73
- baseSlug: string,
74
- existingFilenames: string[]
75
- ): string {
69
+ export function generateUniqueFilename(baseSlug: string, existingFilenames: string[]): string {
76
70
  if (!baseSlug) {
77
71
  baseSlug = 'untitled';
78
72
  }
@@ -107,7 +101,7 @@ export function generateFilenameFromItem(
107
101
  item: Record<string, unknown>,
108
102
  titleField: string = 'title',
109
103
  existingFilenames: string[] = [],
110
- defaultLocale: string = 'en'
104
+ defaultLocale: string = 'en',
111
105
  ): string {
112
106
  // Try to get title from specified field
113
107
  const titleValue = item[titleField];
@@ -52,7 +52,7 @@ describe('styleNodeUtils', () => {
52
52
  type: NODE_TYPE.NODE,
53
53
  tag: 'div',
54
54
  children: [],
55
- style: { color: 'blue' }
55
+ style: { color: 'blue' },
56
56
  };
57
57
  const instanceStyles = { fontSize: '16px' };
58
58
  const result = mergeNodeStyles(node, instanceStyles);
@@ -63,7 +63,7 @@ describe('styleNodeUtils', () => {
63
63
  const node: ComponentInstanceNode = {
64
64
  type: NODE_TYPE.COMPONENT,
65
65
  component: 'Button',
66
- props: { style: { color: 'blue' } }
66
+ props: { style: { color: 'blue' } },
67
67
  };
68
68
  const instanceStyles = { padding: '10px' };
69
69
  const result = mergeNodeStyles(node, instanceStyles);
@@ -75,7 +75,7 @@ describe('styleNodeUtils', () => {
75
75
  type: NODE_TYPE.NODE,
76
76
  tag: 'div',
77
77
  children: [],
78
- style: { color: 'blue', fontSize: '14px' }
78
+ style: { color: 'blue', fontSize: '14px' },
79
79
  };
80
80
  const instanceStyles = { fontSize: '16px' };
81
81
  const result = mergeNodeStyles(node, instanceStyles);
@@ -100,7 +100,7 @@ describe('styleNodeUtils', () => {
100
100
  type: NODE_TYPE.LINK,
101
101
  href: '/foo',
102
102
  children: [],
103
- style: { color: '#000000', backgroundColor: '#ffffff' }
103
+ style: { color: '#000000', backgroundColor: '#ffffff' },
104
104
  };
105
105
  const instanceStyles = { backgroundColor: '#252525', color: '#ffffff' };
106
106
  const result = mergeNodeStyles(node, instanceStyles);
@@ -112,7 +112,7 @@ describe('styleNodeUtils', () => {
112
112
  type: NODE_TYPE.LINK,
113
113
  href: '/foo',
114
114
  children: [],
115
- style: { base: { color: '#000', padding: '8px' }, tablet: { fontSize: '14px' }, mobile: {} }
115
+ style: { base: { color: '#000', padding: '8px' }, tablet: { fontSize: '14px' }, mobile: {} },
116
116
  };
117
117
  const instanceStyles = { base: { backgroundColor: '#252525', color: '#fff' }, tablet: {}, mobile: {} };
118
118
  const result = mergeNodeStyles(node, instanceStyles);
@@ -130,7 +130,7 @@ describe('styleNodeUtils', () => {
130
130
  type: NODE_TYPE.NODE,
131
131
  tag: 'div',
132
132
  children: [],
133
- style: { color: 'red', fontSize: '16px' }
133
+ style: { color: 'red', fontSize: '16px' },
134
134
  };
135
135
  const styles = extractStylesFromNode(node);
136
136
  expect(styles).toEqual({ color: 'red', fontSize: '16px' });
@@ -140,7 +140,7 @@ describe('styleNodeUtils', () => {
140
140
  const node: ComponentInstanceNode = {
141
141
  type: NODE_TYPE.COMPONENT,
142
142
  component: 'Button',
143
- props: { style: { padding: '10px' } }
143
+ props: { style: { padding: '10px' } },
144
144
  };
145
145
  const styles = extractStylesFromNode(node);
146
146
  expect(styles).toEqual({ padding: '10px' });
@@ -169,7 +169,7 @@ describe('styleNodeUtils', () => {
169
169
  type: NODE_TYPE.LINK,
170
170
  href: '/foo',
171
171
  children: [],
172
- style: { backgroundColor: '#252525' }
172
+ style: { backgroundColor: '#252525' },
173
173
  };
174
174
  const styles = extractStylesFromNode(node);
175
175
  expect(styles).toEqual({ backgroundColor: '#252525' });
@@ -3,7 +3,7 @@
3
3
  * Provides helper functions for applying and merging styles based on node type
4
4
  */
5
5
 
6
- import type { ComponentNode, HtmlNode, ComponentInstanceNode, StyleValue, ResponsiveStyleObject } from './types';
6
+ import type { ComponentNode, StyleValue } from './types';
7
7
  import { isComponentNode, isHtmlNode, isEmbedNode, isListNode, isLinkNode } from './nodeUtils';
8
8
  import { isResponsiveStyle } from './styleUtils';
9
9
 
@@ -15,7 +15,7 @@ import { isResponsiveStyle } from './styleUtils';
15
15
  export function applyStylesToNode(
16
16
  node: ComponentNode,
17
17
  styles: StyleValue | Record<string, string | number> | null | undefined,
18
- viewportWidth?: number
18
+ _viewportWidth?: number,
19
19
  ): ComponentNode {
20
20
  if (!styles) return node;
21
21
 
@@ -44,31 +44,33 @@ export function applyStylesToNode(
44
44
  * exporter can replicate SSR's instance-into-root style merge at build time.
45
45
  */
46
46
  export function deepMergeStyles(
47
- existing: StyleValue | Record<string, any>,
48
- instance: StyleValue | Record<string, any> | null | undefined
47
+ existing: StyleValue | Record<string, unknown>,
48
+ instance: StyleValue | Record<string, unknown> | null | undefined,
49
49
  ): StyleValue {
50
50
  if (!instance) return existing as StyleValue;
51
51
 
52
- const bothResponsive =
53
- isResponsiveStyle(existing as StyleValue) && isResponsiveStyle(instance as StyleValue);
52
+ const bothResponsive = isResponsiveStyle(existing as StyleValue) && isResponsiveStyle(instance as StyleValue);
54
53
 
55
54
  if (bothResponsive) {
56
- const e = existing as Record<string, any>;
57
- const i = instance as Record<string, any>;
58
- const merged: Record<string, any> = {};
55
+ const e = existing as Record<string, unknown>;
56
+ const i = instance as Record<string, unknown>;
57
+ const merged: Record<string, unknown> = {};
59
58
  const keys = new Set([...Object.keys(e), ...Object.keys(i)]);
60
59
  for (const key of keys) {
61
- if (e[key] && i[key] && typeof e[key] === 'object' && typeof i[key] === 'object') {
62
- merged[key] = { ...e[key], ...i[key] };
60
+ // Capture the indexed values so `typeof` narrows them for the object spread.
61
+ const ev = e[key];
62
+ const iv = i[key];
63
+ if (ev && iv && typeof ev === 'object' && typeof iv === 'object') {
64
+ merged[key] = { ...(ev as object), ...(iv as object) };
63
65
  } else {
64
- merged[key] = i[key] !== undefined ? i[key] : e[key];
66
+ merged[key] = iv !== undefined ? iv : ev;
65
67
  }
66
68
  }
67
69
  return merged as StyleValue;
68
70
  }
69
71
 
70
72
  // Flat styles: shallow merge (instance overrides)
71
- return { ...(existing as Record<string, any>), ...(instance as Record<string, any>) } as StyleValue;
73
+ return { ...(existing as Record<string, unknown>), ...(instance as Record<string, unknown>) } as StyleValue;
72
74
  }
73
75
 
74
76
  /**
@@ -78,7 +80,7 @@ export function deepMergeStyles(
78
80
  export function mergeNodeStyles(
79
81
  node: ComponentNode,
80
82
  instanceStyles: StyleValue | Record<string, string | number> | null | undefined,
81
- viewportWidth?: number
83
+ _viewportWidth?: number,
82
84
  ): ComponentNode {
83
85
  if (!instanceStyles) return node;
84
86
 
@@ -86,7 +88,7 @@ export function mergeNodeStyles(
86
88
  // For HTML nodes, Embed nodes, List nodes, and Link nodes: merge instance styles with existing top-level styles
87
89
  const existingStyle = node.style;
88
90
  if (existingStyle && typeof existingStyle === 'object') {
89
- node.style = deepMergeStyles(existingStyle, instanceStyles);
91
+ node.style = deepMergeStyles(existingStyle as Record<string, unknown>, instanceStyles);
90
92
  } else {
91
93
  node.style = instanceStyles as StyleValue;
92
94
  }
@@ -110,10 +112,7 @@ export function mergeNodeStyles(
110
112
  * Extract styles from a ComponentNode based on its type
111
113
  * Returns a flat style object ready for React props
112
114
  */
113
- export function extractStylesFromNode(
114
- node: ComponentNode,
115
- viewportWidth?: number
116
- ): Record<string, string | number> {
115
+ export function extractStylesFromNode(node: ComponentNode, _viewportWidth?: number): Record<string, string | number> {
117
116
  if (isComponentNode(node)) {
118
117
  // Component instance: styles are in props.style
119
118
  const style = node.props?.style;
@@ -130,4 +129,3 @@ export function extractStylesFromNode(
130
129
 
131
130
  return {};
132
131
  }
133
-
@@ -21,11 +21,13 @@ describe('styleUtils', () => {
21
21
  });
22
22
 
23
23
  test('should return true for object with multiple responsive keys', () => {
24
- expect(isResponsiveStyle({
25
- base: { color: 'red' },
26
- tablet: { color: 'blue' },
27
- mobile: { color: 'green' },
28
- })).toBe(true);
24
+ expect(
25
+ isResponsiveStyle({
26
+ base: { color: 'red' },
27
+ tablet: { color: 'blue' },
28
+ mobile: { color: 'green' },
29
+ }),
30
+ ).toBe(true);
29
31
  });
30
32
 
31
33
  test('should return false for regular style object', () => {
@@ -58,10 +60,12 @@ describe('styleUtils', () => {
58
60
  });
59
61
 
60
62
  test('should handle object with base key and other properties', () => {
61
- expect(isResponsiveStyle({
62
- base: { color: 'red' },
63
- customProp: 'value',
64
- } as any)).toBe(true);
63
+ expect(
64
+ isResponsiveStyle({
65
+ base: { color: 'red' },
66
+ customProp: 'value',
67
+ } as any),
68
+ ).toBe(true);
65
69
  });
66
70
  });
67
71
 
@@ -71,41 +75,51 @@ describe('styleUtils', () => {
71
75
  });
72
76
 
73
77
  test('should return true for style object with string values', () => {
74
- expect(isStyleObject({
75
- color: 'red',
76
- backgroundColor: 'blue',
77
- padding: '10px',
78
- })).toBe(true);
78
+ expect(
79
+ isStyleObject({
80
+ color: 'red',
81
+ backgroundColor: 'blue',
82
+ padding: '10px',
83
+ }),
84
+ ).toBe(true);
79
85
  });
80
86
 
81
87
  test('should return true for style object with number values', () => {
82
- expect(isStyleObject({
83
- width: 100,
84
- height: 200,
85
- opacity: 0.5,
86
- })).toBe(true);
88
+ expect(
89
+ isStyleObject({
90
+ width: 100,
91
+ height: 200,
92
+ opacity: 0.5,
93
+ }),
94
+ ).toBe(true);
87
95
  });
88
96
 
89
97
  test('should return true for style object with mixed string and number', () => {
90
- expect(isStyleObject({
91
- color: 'red',
92
- width: 100,
93
- fontSize: '16px',
94
- opacity: 0.8,
95
- })).toBe(true);
98
+ expect(
99
+ isStyleObject({
100
+ color: 'red',
101
+ width: 100,
102
+ fontSize: '16px',
103
+ opacity: 0.8,
104
+ }),
105
+ ).toBe(true);
96
106
  });
97
107
 
98
108
  test('should return true for style object with _mapping property', () => {
99
- expect(isStyleObject({
100
- color: { _mapping: 'theme.colors.primary' },
101
- })).toBe(true);
109
+ expect(
110
+ isStyleObject({
111
+ color: { _mapping: 'theme.colors.primary' },
112
+ }),
113
+ ).toBe(true);
102
114
  });
103
115
 
104
116
  test('should return false for responsive style object', () => {
105
- expect(isStyleObject({
106
- base: { color: 'red' },
107
- tablet: { color: 'blue' },
108
- })).toBe(false);
117
+ expect(
118
+ isStyleObject({
119
+ base: { color: 'red' },
120
+ tablet: { color: 'blue' },
121
+ }),
122
+ ).toBe(false);
109
123
  });
110
124
 
111
125
  test('should return false for object with only base key', () => {
@@ -138,25 +152,31 @@ describe('styleUtils', () => {
138
152
  });
139
153
 
140
154
  test('should return false for object with invalid value types', () => {
141
- expect(isStyleObject({
142
- color: 'red',
143
- invalid: [],
144
- })).toBe(false);
155
+ expect(
156
+ isStyleObject({
157
+ color: 'red',
158
+ invalid: [],
159
+ }),
160
+ ).toBe(false);
145
161
  });
146
162
 
147
163
  test('should return false for object with nested objects without _mapping', () => {
148
- expect(isStyleObject({
149
- color: 'red',
150
- nested: { prop: 'value' },
151
- })).toBe(false);
164
+ expect(
165
+ isStyleObject({
166
+ color: 'red',
167
+ nested: { prop: 'value' },
168
+ }),
169
+ ).toBe(false);
152
170
  });
153
171
 
154
172
  test('should handle complex StyleMapping objects', () => {
155
- expect(isStyleObject({
156
- color: { _mapping: 'colors.primary' },
157
- fontSize: '16px',
158
- width: 100,
159
- })).toBe(true);
173
+ expect(
174
+ isStyleObject({
175
+ color: { _mapping: 'colors.primary' },
176
+ fontSize: '16px',
177
+ width: 100,
178
+ }),
179
+ ).toBe(true);
160
180
  });
161
181
  });
162
182
 
@@ -166,10 +186,12 @@ describe('styleUtils', () => {
166
186
  });
167
187
 
168
188
  test('should return true for responsive style object', () => {
169
- expect(isStyleValue({
170
- base: { color: 'red' },
171
- tablet: { color: 'blue' },
172
- })).toBe(true);
189
+ expect(
190
+ isStyleValue({
191
+ base: { color: 'red' },
192
+ tablet: { color: 'blue' },
193
+ }),
194
+ ).toBe(true);
173
195
  });
174
196
 
175
197
  test('should return true for object with base key', () => {
@@ -218,21 +240,25 @@ describe('styleUtils', () => {
218
240
  });
219
241
 
220
242
  test('should handle complex responsive styles', () => {
221
- expect(isStyleValue({
222
- base: { color: 'red', fontSize: '18px' },
223
- tablet: { color: 'blue', fontSize: '16px' },
224
- mobile: { color: 'green', fontSize: '14px' },
225
- })).toBe(true);
243
+ expect(
244
+ isStyleValue({
245
+ base: { color: 'red', fontSize: '18px' },
246
+ tablet: { color: 'blue', fontSize: '16px' },
247
+ mobile: { color: 'green', fontSize: '14px' },
248
+ }),
249
+ ).toBe(true);
226
250
  });
227
251
 
228
252
  test('should handle complex style objects', () => {
229
- expect(isStyleValue({
230
- color: 'red',
231
- fontSize: '16px',
232
- width: 100,
233
- height: 200,
234
- opacity: 0.8,
235
- })).toBe(true);
253
+ expect(
254
+ isStyleValue({
255
+ color: 'red',
256
+ fontSize: '16px',
257
+ width: 100,
258
+ height: 200,
259
+ opacity: 0.8,
260
+ }),
261
+ ).toBe(true);
236
262
  });
237
263
  });
238
264
  });