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.
- package/.claude/settings.local.json +1 -3
- package/bin/cli.ts +66 -261
- package/build-astro.ts +150 -128
- package/dist/bin/cli.js +42 -185
- package/dist/bin/cli.js.map +2 -2
- package/dist/chunks/chunk-2AR55GYH.js +42 -0
- package/dist/chunks/chunk-2AR55GYH.js.map +7 -0
- package/dist/chunks/{chunk-JGWFTO6P.js → chunk-2IIQK7T3.js} +2624 -1389
- package/dist/chunks/chunk-2IIQK7T3.js.map +7 -0
- package/dist/chunks/chunk-4ZRU52J2.js +169 -0
- package/dist/chunks/chunk-4ZRU52J2.js.map +7 -0
- package/dist/chunks/{chunk-UB44F4Z2.js → chunk-5X4HCN7J.js} +5 -7
- package/dist/chunks/chunk-5X4HCN7J.js.map +7 -0
- package/dist/chunks/{chunk-WQFG7PAH.js → chunk-7CCVOL5M.js} +15 -19
- package/dist/chunks/chunk-7CCVOL5M.js.map +7 -0
- package/dist/chunks/{chunk-YBLHKYFF.js → chunk-AR7LHIFY.js} +8 -2
- package/dist/chunks/chunk-AR7LHIFY.js.map +7 -0
- package/dist/chunks/{chunk-O3NAGJP4.js → chunk-NUP7H7D3.js} +135 -41
- package/dist/chunks/chunk-NUP7H7D3.js.map +7 -0
- package/dist/chunks/{chunk-X754AHS5.js → chunk-QWTQZHG3.js} +194 -90
- package/dist/chunks/chunk-QWTQZHG3.js.map +7 -0
- package/dist/chunks/{chunk-H3GJ4H2U.js → chunk-XTKNX4FW.js} +216 -87
- package/dist/chunks/chunk-XTKNX4FW.js.map +7 -0
- package/dist/chunks/{fs-JGINUXGL.js → fs-G3ANWEFP.js} +2 -2
- package/dist/lib/client/index.js +1003 -475
- package/dist/lib/client/index.js.map +3 -3
- package/dist/lib/server/index.js +14393 -6371
- package/dist/lib/server/index.js.map +4 -4
- package/dist/lib/shared/index.js +342 -101
- package/dist/lib/shared/index.js.map +4 -4
- package/dist/lib/shared/richtext/index.js +1 -1
- package/dist/lib/test-utils/index.js +64 -80
- package/dist/lib/test-utils/index.js.map +2 -2
- package/entries/client-router.tsx +10 -8
- package/lib/client/ClientInitializer.ts +8 -8
- package/lib/client/ErrorBoundary.test.tsx +246 -186
- package/lib/client/ErrorBoundary.tsx +183 -132
- package/lib/client/componentRegistry.test.ts +96 -108
- package/lib/client/componentRegistry.ts +1 -3
- package/lib/client/contexts/ThemeContext.tsx +3 -2
- package/lib/client/core/ComponentBuilder.test.ts +663 -560
- package/lib/client/core/ComponentBuilder.ts +427 -155
- package/lib/client/core/ComponentRenderer.test.tsx +2 -4
- package/lib/client/core/ComponentRenderer.tsx +46 -33
- package/lib/client/core/builders/embedBuilder.ts +242 -54
- package/lib/client/core/builders/linkBuilder.ts +72 -45
- package/lib/client/core/builders/linkNodeBuilder.ts +79 -54
- package/lib/client/core/builders/listBuilder.ts +155 -89
- package/lib/client/core/builders/localeListBuilder.ts +97 -62
- package/lib/client/core/builders/types.ts +5 -5
- package/lib/client/core/cmsTemplateProcessor.ts +8 -9
- package/lib/client/elementRegistry.ts +3 -3
- package/lib/client/fontFamiliesService.test.ts +2 -10
- package/lib/client/fontFamiliesService.ts +3 -3
- package/lib/client/hmr/HMRManager.tsx +47 -30
- package/lib/client/hmrCssReload.ts +49 -14
- package/lib/client/hmrWebSocket.ts +14 -19
- package/lib/client/hooks/useColorVariables.test.ts +21 -21
- package/lib/client/hooks/useColorVariables.ts +23 -18
- package/lib/client/hooks/usePropertyAutocomplete.ts +4 -6
- package/lib/client/hooks/useVariables.ts +6 -4
- package/lib/client/hydration/HydrationUtils.test.ts +24 -25
- package/lib/client/hydration/HydrationUtils.ts +3 -4
- package/lib/client/i18nConfigService.test.ts +2 -7
- package/lib/client/i18nConfigService.ts +2 -2
- package/lib/client/meno-filter/MenoFilter.test.ts +47 -49
- package/lib/client/meno-filter/MenoFilter.ts +14 -15
- package/lib/client/meno-filter/bindings.ts +18 -43
- package/lib/client/meno-filter/init.ts +4 -4
- package/lib/client/meno-filter/renderer.ts +30 -32
- package/lib/client/meno-filter/script.generated.ts +1 -3
- package/lib/client/meno-filter/ui.ts +4 -6
- package/lib/client/meno-filter/updates.ts +18 -23
- package/lib/client/meno-filter/utils.ts +1 -1
- package/lib/client/navigation.test.ts +174 -178
- package/lib/client/navigation.ts +0 -1
- package/lib/client/responsiveStyleResolver.knownTokens.test.ts +71 -0
- package/lib/client/responsiveStyleResolver.test.ts +234 -232
- package/lib/client/responsiveStyleResolver.ts +74 -20
- package/lib/client/routing/RouteLoader.test.ts +24 -25
- package/lib/client/routing/RouteLoader.ts +27 -35
- package/lib/client/routing/Router.tsx +210 -153
- package/lib/client/scripts/ScriptExecutor.test.ts +157 -158
- package/lib/client/scripts/ScriptExecutor.ts +18 -36
- package/lib/client/services/PrefetchService.test.ts +3 -3
- package/lib/client/services/PrefetchService.ts +23 -29
- package/lib/client/styleProcessor.test.ts +9 -9
- package/lib/client/styleProcessor.ts +24 -15
- package/lib/client/styles/StyleInjector.test.ts +122 -115
- package/lib/client/styles/StyleInjector.ts +10 -7
- package/lib/client/styles/UtilityClassCollector.ts +62 -28
- package/lib/client/styles/cspNonce.test.ts +2 -5
- package/lib/client/templateEngine.test.ts +554 -488
- package/lib/client/templateEngine.ts +203 -73
- package/lib/client/theme.test.ts +1 -1
- package/lib/client/theme.ts +0 -1
- package/lib/client/utils/toast.ts +0 -1
- package/lib/server/__integration__/api-routes.test.ts +8 -4
- package/lib/server/__integration__/cms-integration.test.ts +1 -4
- package/lib/server/__integration__/server-lifecycle.test.ts +4 -5
- package/lib/server/__integration__/ssr-rendering.test.ts +47 -37
- package/lib/server/__integration__/static-assets.test.ts +3 -3
- package/lib/server/__integration__/test-helpers.ts +87 -74
- package/lib/server/ab/generateFunctions.ts +12 -10
- package/lib/server/astro/cmsPageEmitter.ts +26 -42
- package/lib/server/astro/componentEmitter.ts +35 -43
- package/lib/server/astro/cssCollector.ts +10 -26
- package/lib/server/astro/nodeToAstro.test.ts +1754 -34
- package/lib/server/astro/nodeToAstro.ts +232 -216
- package/lib/server/astro/normalizeOrphanTemplateProps.test.ts +115 -119
- package/lib/server/astro/normalizeOrphanTemplateProps.ts +11 -18
- package/lib/server/astro/pageEmitter.ts +9 -13
- package/lib/server/astro/tailwindMapper.test.ts +10 -37
- package/lib/server/astro/tailwindMapper.ts +33 -40
- package/lib/server/astro/templateTransformer.ts +17 -20
- package/lib/server/createServer.ts +7 -19
- package/lib/server/cssGenerator.test.ts +35 -44
- package/lib/server/cssGenerator.ts +8 -19
- package/lib/server/fileWatcher.test.ts +164 -13
- package/lib/server/fileWatcher.ts +209 -124
- package/lib/server/index.ts +14 -17
- package/lib/server/jsonLoader.test.ts +39 -2
- package/lib/server/jsonLoader.ts +39 -34
- package/lib/server/middleware/cors.test.ts +21 -21
- package/lib/server/middleware/cors.ts +28 -4
- package/lib/server/middleware/errorHandler.test.ts +7 -5
- package/lib/server/middleware/errorHandler.ts +3 -8
- package/lib/server/middleware/index.ts +0 -1
- package/lib/server/middleware/logger.test.ts +10 -8
- package/lib/server/middleware/logger.ts +17 -29
- package/lib/server/migrateTemplates.ts +3 -3
- package/lib/server/pageCache.test.ts +76 -77
- package/lib/server/pageCache.ts +0 -1
- package/lib/server/projectContext.ts +5 -4
- package/lib/server/providers/fileSystemCMSProvider.test.ts +142 -99
- package/lib/server/providers/fileSystemCMSProvider.ts +62 -38
- package/lib/server/routes/api/cms.test.ts +26 -14
- package/lib/server/routes/api/cms.ts +9 -14
- package/lib/server/routes/api/colors.test.ts +2 -2
- package/lib/server/routes/api/components.ts +31 -35
- package/lib/server/routes/api/config.ts +3 -4
- package/lib/server/routes/api/core-routes.ts +49 -76
- package/lib/server/routes/api/enums.test.ts +2 -2
- package/lib/server/routes/api/functions.ts +9 -17
- package/lib/server/routes/api/index.ts +3 -6
- package/lib/server/routes/api/pages.ts +8 -11
- package/lib/server/routes/api/shared.test.ts +1 -1
- package/lib/server/routes/api/shared.ts +12 -9
- package/lib/server/routes/api/variables.test.ts +3 -5
- package/lib/server/routes/api/variables.ts +1 -1
- package/lib/server/routes/index.ts +25 -28
- package/lib/server/routes/pages.ts +35 -31
- package/lib/server/routes/static.ts +17 -6
- package/lib/server/runtime/bundler.ts +98 -61
- package/lib/server/runtime/fs.ts +16 -26
- package/lib/server/runtime/httpServer.ts +8 -12
- package/lib/server/services/ColorService.test.ts +3 -3
- package/lib/server/services/ColorService.ts +37 -29
- package/lib/server/services/EnumService.test.ts +4 -8
- package/lib/server/services/EnumService.ts +11 -3
- package/lib/server/services/VariableService.test.ts +8 -12
- package/lib/server/services/VariableService.ts +11 -3
- package/lib/server/services/cmsService.test.ts +158 -120
- package/lib/server/services/cmsService.ts +36 -146
- package/lib/server/services/componentService.test.ts +125 -45
- package/lib/server/services/componentService.ts +70 -46
- package/lib/server/services/configService.test.ts +22 -45
- package/lib/server/services/configService.ts +50 -27
- package/lib/server/services/fileWatcherService.ts +42 -8
- package/lib/server/services/index.ts +0 -1
- package/lib/server/services/pageService.test.ts +8 -10
- package/lib/server/services/pageService.ts +32 -18
- package/lib/server/ssr/attributeBuilder.ts +18 -8
- package/lib/server/ssr/buildErrorOverlay.ts +11 -12
- package/lib/server/ssr/clientDataInjector.ts +7 -21
- package/lib/server/ssr/cmsSSRProcessor.ts +4 -8
- package/lib/server/ssr/cssCollector.ts +1 -1
- package/lib/server/ssr/errorOverlay.test.ts +1 -1
- package/lib/server/ssr/errorOverlay.ts +3 -9
- package/lib/server/ssr/htmlGenerator.nonce.test.ts +9 -14
- package/lib/server/ssr/htmlGenerator.test.ts +120 -44
- package/lib/server/ssr/htmlGenerator.ts +126 -91
- package/lib/server/ssr/imageMetadata.test.ts +3 -1
- package/lib/server/ssr/imageMetadata.ts +27 -21
- package/lib/server/ssr/jsCollector.test.ts +8 -18
- package/lib/server/ssr/jsCollector.ts +3 -8
- package/lib/server/ssr/liveReloadIntegration.test.ts +76 -36
- package/lib/server/ssr/metaTagGenerator.ts +2 -2
- package/lib/server/ssr/ssrRenderer.branches.test.ts +1103 -0
- package/lib/server/ssr/ssrRenderer.test.ts +316 -256
- package/lib/server/ssr/ssrRenderer.ts +795 -243
- package/lib/server/ssrRenderer.test.ts +1048 -954
- package/lib/server/utils/jsonLineMapper.test.ts +28 -28
- package/lib/server/utils/jsonLineMapper.ts +7 -7
- package/lib/server/validateStyleCoverage.ts +18 -21
- package/lib/server/websocketManager.ts +28 -19
- package/lib/shared/attributeNodeUtils.test.ts +15 -15
- package/lib/shared/attributeNodeUtils.ts +5 -12
- package/lib/shared/breakpoints.test.ts +5 -5
- package/lib/shared/breakpoints.ts +4 -11
- package/lib/shared/cmsQuery.test.ts +81 -0
- package/lib/shared/cmsQuery.ts +92 -0
- package/lib/shared/cmsQueryParser.test.ts +50 -42
- package/lib/shared/cmsQueryParser.ts +60 -38
- package/lib/shared/colorConversions.ts +9 -9
- package/lib/shared/colorVariableUtils.test.ts +27 -5
- package/lib/shared/colorVariableUtils.ts +21 -12
- package/lib/shared/componentRefs.ts +1 -5
- package/lib/shared/constants.test.ts +3 -3
- package/lib/shared/constants.ts +8 -8
- package/lib/shared/cssGeneration.test.ts +285 -144
- package/lib/shared/cssGeneration.ts +217 -531
- package/lib/shared/cssNamedColors.ts +152 -30
- package/lib/shared/cssProperties.test.ts +69 -70
- package/lib/shared/cssProperties.ts +298 -114
- package/lib/shared/elementClassName.test.ts +109 -109
- package/lib/shared/elementClassName.ts +3 -3
- package/lib/shared/elementUtils.ts +12 -16
- package/lib/shared/errorLogger.test.ts +12 -12
- package/lib/shared/errorLogger.ts +2 -10
- package/lib/shared/errors.test.ts +2 -13
- package/lib/shared/errors.ts +2 -8
- package/lib/shared/expressionEvaluator.test.ts +145 -0
- package/lib/shared/expressionEvaluator.ts +52 -24
- package/lib/shared/fontLoader.test.ts +32 -18
- package/lib/shared/fontLoader.ts +2 -2
- package/lib/shared/friendlyError.ts +2 -3
- package/lib/shared/gradientUtils.test.ts +3 -7
- package/lib/shared/gradientUtils.ts +17 -14
- package/lib/shared/hrefRefs.test.ts +2 -2
- package/lib/shared/hrefRefs.ts +2 -10
- package/lib/shared/i18n.test.ts +4 -4
- package/lib/shared/i18n.ts +18 -38
- package/lib/shared/index.ts +27 -0
- package/lib/shared/inlineSvgStyleRules.ts +14 -13
- package/lib/shared/interactiveStyleMappings.test.ts +32 -54
- package/lib/shared/interactiveStyleMappings.ts +11 -24
- package/lib/shared/interactiveStyles.test.ts +165 -188
- package/lib/shared/interfaces/contentProvider.ts +1 -1
- package/lib/shared/itemTemplateUtils.test.ts +11 -17
- package/lib/shared/itemTemplateUtils.ts +27 -39
- package/lib/shared/jsonRepair.ts +16 -10
- package/lib/shared/libraryLoader.test.ts +21 -55
- package/lib/shared/libraryLoader.ts +7 -22
- package/lib/shared/linkUtils.ts +1 -1
- package/lib/shared/logger.test.ts +66 -0
- package/lib/shared/logger.ts +94 -0
- package/lib/shared/markdown.ts +25 -0
- package/lib/shared/netlifyLocale404.test.ts +179 -0
- package/lib/shared/netlifyLocale404.ts +110 -0
- package/lib/shared/nodeUtils.test.ts +28 -16
- package/lib/shared/nodeUtils.ts +76 -23
- package/lib/shared/pathArrayUtils.test.ts +1 -2
- package/lib/shared/pathArrayUtils.ts +1 -1
- package/lib/shared/pathSecurity.ts +2 -2
- package/lib/shared/pathUtils.test.ts +4 -6
- package/lib/shared/pathUtils.ts +42 -49
- package/lib/shared/paths/Path.test.ts +2 -2
- package/lib/shared/paths/Path.ts +0 -1
- package/lib/shared/paths/PathConverter.test.ts +1 -1
- package/lib/shared/paths/PathConverter.ts +17 -20
- package/lib/shared/paths/PathUtils.ts +13 -13
- package/lib/shared/paths/PathValidator.test.ts +2 -15
- package/lib/shared/paths/PathValidator.ts +12 -10
- package/lib/shared/paths/index.ts +1 -2
- package/lib/shared/permissions.test.ts +168 -0
- package/lib/shared/permissions.ts +162 -0
- package/lib/shared/propResolver.test.ts +240 -244
- package/lib/shared/propResolver.ts +15 -26
- package/lib/shared/pxToRem.test.ts +7 -6
- package/lib/shared/pxToRem.ts +2 -5
- package/lib/shared/registry/BaseNodeTypeRegistry.test.ts +12 -6
- package/lib/shared/registry/ClientRegistry.ts +0 -2
- package/lib/shared/registry/ComponentRegistry.test.ts +46 -32
- package/lib/shared/registry/ComponentRegistry.ts +12 -9
- package/lib/shared/registry/NodeTypeDefinition.ts +16 -9
- package/lib/shared/registry/RegistryManager.ts +1 -2
- package/lib/shared/registry/SSRRegistry.ts +0 -2
- package/lib/shared/registry/createNodeType.ts +7 -9
- package/lib/shared/registry/defineNodeType.ts +2 -6
- package/lib/shared/registry/fieldPresets.ts +3 -1
- package/lib/shared/registry/index.ts +0 -1
- package/lib/shared/registry/nodeTypes/ComponentInstanceNodeType.ts +14 -15
- package/lib/shared/registry/nodeTypes/CustomNodeType.ts +103 -0
- package/lib/shared/registry/nodeTypes/EmbedNodeType.ts +18 -11
- package/lib/shared/registry/nodeTypes/HtmlNodeType.ts +48 -19
- package/lib/shared/registry/nodeTypes/IslandNodeType.ts +129 -0
- package/lib/shared/registry/nodeTypes/LinkNodeType.ts +21 -19
- package/lib/shared/registry/nodeTypes/ListNodeType.ts +117 -77
- package/lib/shared/registry/nodeTypes/LocaleListNodeType.ts +27 -21
- package/lib/shared/registry/nodeTypes/MarkdownNodeType.ts +78 -0
- package/lib/shared/registry/nodeTypes/SlotMarkerType.ts +12 -8
- package/lib/shared/registry/nodeTypes/index.ts +26 -3
- package/lib/shared/responsiveScaling.test.ts +16 -34
- package/lib/shared/responsiveScaling.ts +61 -42
- package/lib/shared/responsiveStyleUtils.test.ts +0 -1
- package/lib/shared/responsiveStyleUtils.ts +11 -13
- package/lib/shared/richtext/htmlToTiptap.test.ts +139 -130
- package/lib/shared/richtext/htmlToTiptap.ts +2 -4
- package/lib/shared/richtext/tiptapToHtml.test.ts +5 -6
- package/lib/shared/richtext/types.ts +1 -8
- package/lib/shared/slugTranslator.test.ts +13 -13
- package/lib/shared/slugTranslator.ts +12 -16
- package/lib/shared/slugify.ts +9 -15
- package/lib/shared/styleNodeUtils.test.ts +8 -8
- package/lib/shared/styleNodeUtils.ts +18 -20
- package/lib/shared/styleUtils.test.ts +87 -61
- package/lib/shared/styleUtils.ts +5 -6
- package/lib/shared/themeDefaults.test.ts +11 -14
- package/lib/shared/themeDefaults.ts +3 -4
- package/lib/shared/tree/PathBuilder.test.ts +63 -145
- package/lib/shared/tree/PathBuilder.ts +59 -47
- package/lib/shared/treePathUtils.test.ts +51 -12
- package/lib/shared/treePathUtils.ts +91 -60
- package/lib/shared/types/api.ts +105 -8
- package/lib/shared/types/cms.test.ts +34 -0
- package/lib/shared/types/cms.ts +90 -34
- package/lib/shared/types/comment.ts +49 -16
- package/lib/shared/types/components.ts +51 -25
- package/lib/shared/types/errors.test.ts +1 -6
- package/lib/shared/types/errors.ts +3 -7
- package/lib/shared/types/experiments.ts +28 -28
- package/lib/shared/types/index.ts +25 -2
- package/lib/shared/types/permissions.ts +139 -0
- package/lib/shared/types/styles.ts +0 -1
- package/lib/shared/types/variables.test.ts +4 -13
- package/lib/shared/types/variables.ts +51 -30
- package/lib/shared/types.ts +1 -2
- package/lib/shared/utilityClassConfig.ts +751 -321
- package/lib/shared/utilityClassMapper.durability.test.ts +117 -0
- package/lib/shared/utilityClassMapper.test.ts +433 -95
- package/lib/shared/utilityClassMapper.ts +322 -249
- package/lib/shared/utilityClassNames.test.ts +38 -0
- package/lib/shared/utilityClassNames.ts +458 -0
- package/lib/shared/utils.test.ts +2 -10
- package/lib/shared/utils.ts +19 -10
- package/lib/shared/validation/cmsValidators.ts +2 -1
- package/lib/shared/validation/commentValidators.test.ts +53 -0
- package/lib/shared/validation/commentValidators.ts +12 -1
- package/lib/shared/validation/index.ts +1 -0
- package/lib/shared/validation/permissionsValidators.test.ts +49 -0
- package/lib/shared/validation/permissionsValidators.ts +49 -0
- package/lib/shared/validation/propValidator.test.ts +19 -21
- package/lib/shared/validation/propValidator.ts +13 -18
- package/lib/shared/validation/schemas.test.ts +64 -32
- package/lib/shared/validation/schemas.ts +616 -345
- package/lib/shared/validation/validators.test.ts +3 -8
- package/lib/shared/validation/validators.ts +89 -68
- package/lib/shared/viewportUnits.integration.test.ts +14 -10
- package/lib/shared/viewportUnits.test.ts +24 -23
- package/lib/shared/viewportUnits.ts +12 -5
- package/lib/test-utils/dom-setup.ts +1 -1
- package/lib/test-utils/factories/ConsoleMockFactory.ts +10 -14
- package/lib/test-utils/factories/DomMockFactory.ts +17 -23
- package/lib/test-utils/factories/EventMockFactory.ts +7 -13
- package/lib/test-utils/factories/FetchMockFactory.ts +39 -57
- package/lib/test-utils/factories/ServerMockFactory.ts +6 -10
- package/lib/test-utils/factories/StoreMockFactory.ts +18 -29
- package/lib/test-utils/fixtures.ts +45 -45
- package/lib/test-utils/helpers/asyncHelpers.test.ts +15 -18
- package/lib/test-utils/helpers/asyncHelpers.ts +11 -20
- package/lib/test-utils/helpers.ts +1 -5
- package/lib/test-utils/index.ts +0 -4
- package/lib/test-utils/mockFactories.ts +13 -19
- package/lib/test-utils/mocks.ts +6 -4
- package/package.json +3 -5
- package/scripts/build-for-publish.mjs +2 -4
- package/scripts/build-meno-filter.ts +4 -7
- package/tsconfig.json +1 -0
- package/vite.config.ts +4 -4
- package/build-next.ts +0 -1361
- package/build-static.test.ts +0 -424
- package/build-static.ts +0 -1074
- package/dist/build-static.js +0 -36
- package/dist/chunks/chunk-2MHDV5BF.js +0 -251
- package/dist/chunks/chunk-2MHDV5BF.js.map +0 -7
- package/dist/chunks/chunk-AZQYF6KE.js +0 -559
- package/dist/chunks/chunk-AZQYF6KE.js.map +0 -7
- package/dist/chunks/chunk-GZHGVVW3.js +0 -322
- package/dist/chunks/chunk-GZHGVVW3.js.map +0 -7
- package/dist/chunks/chunk-H3GJ4H2U.js.map +0 -7
- package/dist/chunks/chunk-I7YIGZXT.js +0 -467
- package/dist/chunks/chunk-I7YIGZXT.js.map +0 -7
- package/dist/chunks/chunk-IGYR22T6.js +0 -6192
- package/dist/chunks/chunk-IGYR22T6.js.map +0 -7
- package/dist/chunks/chunk-JGP5A3Y5.js +0 -1136
- package/dist/chunks/chunk-JGP5A3Y5.js.map +0 -7
- package/dist/chunks/chunk-JGWFTO6P.js.map +0 -7
- package/dist/chunks/chunk-O3NAGJP4.js.map +0 -7
- package/dist/chunks/chunk-QB2LNO4W.js +0 -77
- package/dist/chunks/chunk-QB2LNO4W.js.map +0 -7
- package/dist/chunks/chunk-R6XHAFBF.js +0 -3821
- package/dist/chunks/chunk-R6XHAFBF.js.map +0 -7
- package/dist/chunks/chunk-UB44F4Z2.js.map +0 -7
- package/dist/chunks/chunk-WQFG7PAH.js.map +0 -7
- package/dist/chunks/chunk-X754AHS5.js.map +0 -7
- package/dist/chunks/chunk-YBLHKYFF.js.map +0 -7
- package/dist/chunks/configService-R3OGU2UD.js +0 -13
- package/dist/chunks/configService-R3OGU2UD.js.map +0 -7
- package/dist/chunks/constants-STK2YBIW.js +0 -46
- package/dist/chunks/constants-STK2YBIW.js.map +0 -7
- package/dist/chunks/fs-JGINUXGL.js.map +0 -7
- package/dist/entries/server-router.js +0 -67
- package/dist/entries/server-router.js.map +0 -7
- package/entries/server-router.tsx +0 -81
- package/lib/server/providers/fileSystemPageProvider.ts +0 -160
- package/lib/server/webflow/buildWebflow.ts +0 -635
- package/lib/server/webflow/index.ts +0 -23
- package/lib/server/webflow/nodeToWebflow.test.ts +0 -3170
- package/lib/server/webflow/nodeToWebflow.ts +0 -2435
- package/lib/server/webflow/styleMapper.test.ts +0 -389
- package/lib/server/webflow/styleMapper.ts +0 -695
- package/lib/server/webflow/templateWrapper.ts +0 -49
- package/lib/server/webflow/types.ts +0 -396
- /package/dist/{build-static.js.map → chunks/fs-G3ANWEFP.js.map} +0 -0
|
@@ -2,21 +2,85 @@
|
|
|
2
2
|
* Tests for htmlGenerator - SSR HTML document generation
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import { describe, test, expect, mock, beforeEach } from 'bun:test';
|
|
5
|
+
import { describe, test, expect, mock, beforeEach, afterAll } from 'bun:test';
|
|
6
6
|
|
|
7
7
|
// ---- Mock all dependencies before importing the module under test ----
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
9
|
+
// bun's mock.module() patches are PROCESS-GLOBAL and persist across test
|
|
10
|
+
// files in the same run. Snapshot the real module exports here (imports are
|
|
11
|
+
// evaluated before this module body runs, so these capture the originals)
|
|
12
|
+
// and restore them in afterAll so later test files (e.g.
|
|
13
|
+
// routes/api/colors.test.ts, services/configService.test.ts) see the real
|
|
14
|
+
// implementations.
|
|
15
|
+
import * as realSsrRenderer from './ssrRenderer';
|
|
16
|
+
import * as realConfigServiceModule from '../services/configService';
|
|
17
|
+
import * as realJsonLoader from '../jsonLoader';
|
|
18
|
+
import * as realFontLoader from '../../shared/fontLoader';
|
|
19
|
+
import * as realColorServiceModule from '../services/ColorService';
|
|
20
|
+
import * as realCssGenerator from '../cssGenerator';
|
|
21
|
+
import * as realCssGeneration from '../../shared/cssGeneration';
|
|
22
|
+
import * as realValidateStyleCoverage from '../validateStyleCoverage';
|
|
23
|
+
import * as realFormHandler from '../../client/scripts/formHandler';
|
|
24
|
+
import * as realMenoFilterScript from '../../client/meno-filter/script.generated';
|
|
25
|
+
import * as realClientDataInjector from './clientDataInjector';
|
|
26
|
+
import * as realLibraryLoader from '../../shared/libraryLoader';
|
|
27
|
+
|
|
28
|
+
const REAL_SSR_RENDERER = { ...realSsrRenderer };
|
|
29
|
+
const REAL_CONFIG_SERVICE_MODULE = { ...realConfigServiceModule };
|
|
30
|
+
const REAL_JSON_LOADER = { ...realJsonLoader };
|
|
31
|
+
const REAL_FONT_LOADER = { ...realFontLoader };
|
|
32
|
+
const REAL_COLOR_SERVICE_MODULE = { ...realColorServiceModule };
|
|
33
|
+
const REAL_CSS_GENERATOR = { ...realCssGenerator };
|
|
34
|
+
const REAL_CSS_GENERATION = { ...realCssGeneration };
|
|
35
|
+
const REAL_VALIDATE_STYLE_COVERAGE = { ...realValidateStyleCoverage };
|
|
36
|
+
const REAL_FORM_HANDLER = { ...realFormHandler };
|
|
37
|
+
const REAL_MENO_FILTER_SCRIPT = { ...realMenoFilterScript };
|
|
38
|
+
const REAL_CLIENT_DATA_INJECTOR = { ...realClientDataInjector };
|
|
39
|
+
const REAL_LIBRARY_LOADER = { ...realLibraryLoader };
|
|
40
|
+
|
|
41
|
+
afterAll(() => {
|
|
42
|
+
mock.module('./ssrRenderer', () => REAL_SSR_RENDERER);
|
|
43
|
+
mock.module('../services/configService', () => REAL_CONFIG_SERVICE_MODULE);
|
|
44
|
+
mock.module('../jsonLoader', () => REAL_JSON_LOADER);
|
|
45
|
+
mock.module('../../shared/fontLoader', () => REAL_FONT_LOADER);
|
|
46
|
+
mock.module('../services/ColorService', () => REAL_COLOR_SERVICE_MODULE);
|
|
47
|
+
mock.module('../cssGenerator', () => REAL_CSS_GENERATOR);
|
|
48
|
+
mock.module('../../shared/cssGeneration', () => REAL_CSS_GENERATION);
|
|
49
|
+
mock.module('../validateStyleCoverage', () => REAL_VALIDATE_STYLE_COVERAGE);
|
|
50
|
+
mock.module('../../client/scripts/formHandler', () => REAL_FORM_HANDLER);
|
|
51
|
+
mock.module('../../client/meno-filter/script.generated', () => REAL_MENO_FILTER_SCRIPT);
|
|
52
|
+
mock.module('./clientDataInjector', () => REAL_CLIENT_DATA_INJECTOR);
|
|
53
|
+
mock.module('../../shared/libraryLoader', () => REAL_LIBRARY_LOADER);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
// Explicit result type for the renderPageSSR mock: keeps array/Map fields
|
|
57
|
+
// wide (PreloadImage[] instead of the inferred never[]) so per-test
|
|
58
|
+
// mockImplementation calls with non-empty fixtures typecheck.
|
|
59
|
+
type MockRenderPageSSRResult = {
|
|
60
|
+
html: string;
|
|
61
|
+
meta: string;
|
|
62
|
+
title: string;
|
|
63
|
+
javascript: string;
|
|
64
|
+
componentCSS: string;
|
|
65
|
+
locale: string;
|
|
66
|
+
interactiveStylesMap: Map<string, InteractiveStyles>;
|
|
67
|
+
preloadImages: PreloadImage[];
|
|
68
|
+
neededCollections: Set<string>;
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const mockRenderPageSSR = mock(
|
|
72
|
+
async (): Promise<MockRenderPageSSRResult> => ({
|
|
73
|
+
html: '<div>Test Content</div>',
|
|
74
|
+
meta: '<title>Test Page</title>',
|
|
75
|
+
title: 'Test Page',
|
|
76
|
+
javascript: '',
|
|
77
|
+
componentCSS: '',
|
|
78
|
+
locale: 'en',
|
|
79
|
+
interactiveStylesMap: new Map(),
|
|
80
|
+
preloadImages: [],
|
|
81
|
+
neededCollections: new Set<string>(),
|
|
82
|
+
}),
|
|
83
|
+
);
|
|
20
84
|
|
|
21
85
|
mock.module('./ssrRenderer', () => ({
|
|
22
86
|
renderPageSSR: mockRenderPageSSR,
|
|
@@ -97,7 +161,8 @@ mock.module('../../client/meno-filter/script.generated', () => ({
|
|
|
97
161
|
}));
|
|
98
162
|
|
|
99
163
|
const mockGenerateAllInlineDataScripts = mock(() => '');
|
|
100
|
-
|
|
164
|
+
// Wide return type so tests can mockReturnValue a real ClientDataCollection.
|
|
165
|
+
const mockPrepareClientData = mock((): ClientDataCollection | null => null);
|
|
101
166
|
|
|
102
167
|
mock.module('./clientDataInjector', () => ({
|
|
103
168
|
generateAllInlineDataScripts: mockGenerateAllInlineDataScripts,
|
|
@@ -111,7 +176,9 @@ mock.module('../../shared/libraryLoader', () => ({
|
|
|
111
176
|
|
|
112
177
|
// Now import the module under test
|
|
113
178
|
import { generateSSRHTML } from './htmlGenerator';
|
|
114
|
-
import type {
|
|
179
|
+
import type { PreloadImage } from './ssrRenderer';
|
|
180
|
+
import type { ClientDataCollection } from './clientDataInjector';
|
|
181
|
+
import type { InteractiveStyles } from '../../shared/types';
|
|
115
182
|
|
|
116
183
|
// ---- Fixtures ----
|
|
117
184
|
|
|
@@ -223,7 +290,8 @@ describe('generateSSRHTML', () => {
|
|
|
223
290
|
describe('CSS injection', () => {
|
|
224
291
|
test('should contain a style tag with base reset CSS', async () => {
|
|
225
292
|
const result = (await generateSSRHTML(minimalPage)) as string;
|
|
226
|
-
|
|
293
|
+
// The main style tag carries id="meno-styles" so hot reload can patch it in place
|
|
294
|
+
expect(result).toContain('<style id="meno-styles">');
|
|
227
295
|
expect(result).toContain('</style>');
|
|
228
296
|
// base reset includes the universal selector
|
|
229
297
|
expect(result).toContain('box-sizing: border-box');
|
|
@@ -259,9 +327,7 @@ describe('generateSSRHTML', () => {
|
|
|
259
327
|
neededCollections: new Set<string>(),
|
|
260
328
|
}));
|
|
261
329
|
|
|
262
|
-
const result = (await generateSSRHTML(
|
|
263
|
-
minimalPage, {}, '/', '', true
|
|
264
|
-
)) as string;
|
|
330
|
+
const result = (await generateSSRHTML(minimalPage, {}, '/', '', true)) as string;
|
|
265
331
|
|
|
266
332
|
// Minified CSS should not have unnecessary whitespace
|
|
267
333
|
expect(result).not.toContain('.test {\n color: blue;\n');
|
|
@@ -309,8 +375,8 @@ describe('generateSSRHTML', () => {
|
|
|
309
375
|
});
|
|
310
376
|
|
|
311
377
|
test('should include interactive CSS when interactiveStylesMap is non-empty', async () => {
|
|
312
|
-
const stylesMap = new Map();
|
|
313
|
-
stylesMap.set('btn-hover', { hover: { backgroundColor: 'blue' } });
|
|
378
|
+
const stylesMap = new Map<string, InteractiveStyles>();
|
|
379
|
+
stylesMap.set('btn-hover', [{ postfix: ':hover', style: { backgroundColor: 'blue' } }]);
|
|
314
380
|
|
|
315
381
|
mockRenderPageSSR.mockImplementation(async () => ({
|
|
316
382
|
html: '<div>Content</div>',
|
|
@@ -334,9 +400,7 @@ describe('generateSSRHTML', () => {
|
|
|
334
400
|
|
|
335
401
|
describe('JavaScript handling', () => {
|
|
336
402
|
test('should not include client script in production mode', async () => {
|
|
337
|
-
const result = (await generateSSRHTML(
|
|
338
|
-
minimalPage, {}, '/', '', true
|
|
339
|
-
)) as string;
|
|
403
|
+
const result = (await generateSSRHTML(minimalPage, {}, '/', '', true)) as string;
|
|
340
404
|
expect(result).not.toContain('client-router.tsx');
|
|
341
405
|
});
|
|
342
406
|
|
|
@@ -397,7 +461,16 @@ describe('generateSSRHTML', () => {
|
|
|
397
461
|
}));
|
|
398
462
|
|
|
399
463
|
const result = (await generateSSRHTML(
|
|
400
|
-
minimalPage,
|
|
464
|
+
minimalPage,
|
|
465
|
+
{},
|
|
466
|
+
'/',
|
|
467
|
+
'',
|
|
468
|
+
false,
|
|
469
|
+
undefined,
|
|
470
|
+
undefined,
|
|
471
|
+
undefined,
|
|
472
|
+
undefined,
|
|
473
|
+
'/_scripts/abc123.js',
|
|
401
474
|
)) as string;
|
|
402
475
|
|
|
403
476
|
expect(result).toContain('<script src="/_scripts/abc123.js" defer></script>');
|
|
@@ -418,9 +491,9 @@ describe('generateSSRHTML', () => {
|
|
|
418
491
|
}));
|
|
419
492
|
|
|
420
493
|
const result = await generateSSRHTML({
|
|
421
|
-
pageData: minimalPage
|
|
494
|
+
pageData: minimalPage,
|
|
422
495
|
returnSeparateJS: true,
|
|
423
|
-
}
|
|
496
|
+
});
|
|
424
497
|
|
|
425
498
|
expect(result).toHaveProperty('html');
|
|
426
499
|
expect(result).toHaveProperty('javascript');
|
|
@@ -432,9 +505,9 @@ describe('generateSSRHTML', () => {
|
|
|
432
505
|
|
|
433
506
|
test('should return null javascript when no JS is generated with returnSeparateJS', async () => {
|
|
434
507
|
const result = await generateSSRHTML({
|
|
435
|
-
pageData: minimalPage
|
|
508
|
+
pageData: minimalPage,
|
|
436
509
|
returnSeparateJS: true,
|
|
437
|
-
}
|
|
510
|
+
});
|
|
438
511
|
|
|
439
512
|
expect(result.javascript).toBeNull();
|
|
440
513
|
});
|
|
@@ -444,7 +517,7 @@ describe('generateSSRHTML', () => {
|
|
|
444
517
|
// Should still have the client router, but no <script> with inline JS
|
|
445
518
|
const scriptTags = result.match(/<script[^>]*>[\s\S]*?<\/script>/g) || [];
|
|
446
519
|
const inlineScriptTags = scriptTags.filter(
|
|
447
|
-
(s: string) => !s.includes('src=') && !s.includes('type="application/json"')
|
|
520
|
+
(s: string) => !s.includes('src=') && !s.includes('type="application/json"'),
|
|
448
521
|
);
|
|
449
522
|
expect(inlineScriptTags.length).toBe(0);
|
|
450
523
|
});
|
|
@@ -573,7 +646,7 @@ describe('generateSSRHTML', () => {
|
|
|
573
646
|
});
|
|
574
647
|
|
|
575
648
|
mockGenerateAllInlineDataScripts.mockReturnValue(
|
|
576
|
-
'<script type="application/json" id="meno-cms-posts">[{"_id":"1","title":"Test"}]</script>'
|
|
649
|
+
'<script type="application/json" id="meno-cms-posts">[{"_id":"1","title":"Test"}]</script>',
|
|
577
650
|
);
|
|
578
651
|
|
|
579
652
|
const result = (await generateSSRHTML({
|
|
@@ -763,7 +836,7 @@ describe('generateSSRHTML', () => {
|
|
|
763
836
|
// and updates attrs/classes/text in place, so event handlers, DOM identity
|
|
764
837
|
// and JS-built nodes survive.
|
|
765
838
|
expect(result).toContain('softSync(or,nr,lastSrvRoot)');
|
|
766
|
-
expect(result).toContain(
|
|
839
|
+
expect(result).toContain("querySelectorAll('[data-element-path]')");
|
|
767
840
|
});
|
|
768
841
|
|
|
769
842
|
test('preserves runtime-added classes against cached server snapshot', async () => {
|
|
@@ -823,16 +896,14 @@ describe('generateSSRHTML', () => {
|
|
|
823
896
|
})) as string;
|
|
824
897
|
// Must not contain the old unconditional pattern where oscr is removed
|
|
825
898
|
// outside of a hash-mismatch branch.
|
|
826
|
-
expect(result).not.toContain(
|
|
899
|
+
expect(result).not.toContain("if(nscr){var src=nscr.getAttribute('src');if(oscr)oscr.remove()");
|
|
827
900
|
});
|
|
828
901
|
});
|
|
829
902
|
});
|
|
830
903
|
|
|
831
904
|
describe('Options object vs legacy positional args', () => {
|
|
832
905
|
test('should work with legacy positional arguments', async () => {
|
|
833
|
-
const result = (await generateSSRHTML(
|
|
834
|
-
minimalPage, {}, '/about', '', false, 'en'
|
|
835
|
-
)) as string;
|
|
906
|
+
const result = (await generateSSRHTML(minimalPage, {}, '/about', '', false, 'en')) as string;
|
|
836
907
|
|
|
837
908
|
expect(typeof result).toBe('string');
|
|
838
909
|
expect(result).toContain('<!DOCTYPE html>');
|
|
@@ -872,6 +943,8 @@ describe('generateSSRHTML', () => {
|
|
|
872
943
|
undefined, // slugMappings
|
|
873
944
|
undefined, // cmsContext
|
|
874
945
|
undefined, // cmsService
|
|
946
|
+
false, // isProductionBuild (defaults to false)
|
|
947
|
+
false, // injectEditorAttrs (defaults to false)
|
|
875
948
|
);
|
|
876
949
|
});
|
|
877
950
|
});
|
|
@@ -967,10 +1040,10 @@ describe('generateSSRHTML', () => {
|
|
|
967
1040
|
neededCollections: new Set<string>(),
|
|
968
1041
|
}));
|
|
969
1042
|
|
|
970
|
-
const result =
|
|
971
|
-
pageData: minimalPage
|
|
1043
|
+
const result = await generateSSRHTML({
|
|
1044
|
+
pageData: minimalPage,
|
|
972
1045
|
returnSeparateJS: true,
|
|
973
|
-
}
|
|
1046
|
+
});
|
|
974
1047
|
|
|
975
1048
|
expect(result.javascript).toContain('window.__MENO_CONFIG__=');
|
|
976
1049
|
expect(result.javascript).toContain('console.log("test")');
|
|
@@ -1030,7 +1103,7 @@ describe('generateSSRHTML', () => {
|
|
|
1030
1103
|
describe('Font preload tags', () => {
|
|
1031
1104
|
test('should include font preload tags when present', async () => {
|
|
1032
1105
|
mockGenerateFontPreloadTags.mockReturnValue(
|
|
1033
|
-
'<link rel="preload" href="/font.woff2" as="font" type="font/woff2" crossorigin>'
|
|
1106
|
+
'<link rel="preload" href="/font.woff2" as="font" type="font/woff2" crossorigin>',
|
|
1034
1107
|
);
|
|
1035
1108
|
|
|
1036
1109
|
const result = (await generateSSRHTML(minimalPage)) as string;
|
|
@@ -1064,13 +1137,16 @@ describe('generateSSRHTML', () => {
|
|
|
1064
1137
|
|
|
1065
1138
|
mockPrepareClientData.mockReturnValue({
|
|
1066
1139
|
collection: 'categories',
|
|
1067
|
-
items: [
|
|
1140
|
+
items: [
|
|
1141
|
+
{ _id: '1', name: 'Tech' },
|
|
1142
|
+
{ _id: '2', name: 'Design' },
|
|
1143
|
+
],
|
|
1068
1144
|
config: { enabled: true, strategy: 'inline' as const },
|
|
1069
1145
|
strategy: 'inline' as const,
|
|
1070
1146
|
});
|
|
1071
1147
|
|
|
1072
1148
|
mockGenerateAllInlineDataScripts.mockReturnValue(
|
|
1073
|
-
'<script type="application/json" id="meno-cms-categories">[{"_id":"1"},{"_id":"2"}]</script>'
|
|
1149
|
+
'<script type="application/json" id="meno-cms-categories">[{"_id":"1"},{"_id":"2"}]</script>',
|
|
1074
1150
|
);
|
|
1075
1151
|
|
|
1076
1152
|
await generateSSRHTML({
|
|
@@ -1111,15 +1187,15 @@ describe('generateSSRHTML', () => {
|
|
|
1111
1187
|
});
|
|
1112
1188
|
|
|
1113
1189
|
console.warn = originalWarn;
|
|
1114
|
-
expect(warnings.some(w => w.includes('events'))).toBe(true);
|
|
1115
|
-
expect(warnings.some(w => w.includes('clientData.enabled'))).toBe(true);
|
|
1190
|
+
expect(warnings.some((w) => w.includes('events'))).toBe(true);
|
|
1191
|
+
expect(warnings.some((w) => w.includes('clientData.enabled'))).toBe(true);
|
|
1116
1192
|
});
|
|
1117
1193
|
});
|
|
1118
1194
|
|
|
1119
1195
|
describe('Base reset CSS content', () => {
|
|
1120
1196
|
test('should include body font-family reset', async () => {
|
|
1121
1197
|
const result = (await generateSSRHTML(minimalPage)) as string;
|
|
1122
|
-
expect(result).toContain(
|
|
1198
|
+
expect(result).toContain('font-family: -apple-system');
|
|
1123
1199
|
});
|
|
1124
1200
|
|
|
1125
1201
|
test('should include button reset styles', async () => {
|