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
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
import { test, expect, describe } from 'bun:test';
|
|
12
12
|
import { Window } from 'happy-dom';
|
|
13
|
-
import * as fs from 'fs';
|
|
14
|
-
import * as path from 'path';
|
|
13
|
+
import * as fs from 'node:fs';
|
|
14
|
+
import * as path from 'node:path';
|
|
15
15
|
|
|
16
16
|
function loadLiveReloadScript(): string {
|
|
17
17
|
const src = fs.readFileSync(path.join(import.meta.dir, 'htmlGenerator.ts'), 'utf8');
|
|
@@ -23,8 +23,9 @@ function loadLiveReloadScript(): string {
|
|
|
23
23
|
if (!match) throw new Error('liveReloadScript script tag not found');
|
|
24
24
|
// The script lives inside a TS template literal; reverse the template's
|
|
25
25
|
// runtime transformations so the executable form matches what a browser sees.
|
|
26
|
-
return match[1]
|
|
27
|
-
.split('\\\\')
|
|
26
|
+
return match[1]!
|
|
27
|
+
.split('\\\\')
|
|
28
|
+
.join('\\')
|
|
28
29
|
.replace(/\$\{wsUrl\}/g, "'ws://localhost:3000/hmr'");
|
|
29
30
|
}
|
|
30
31
|
|
|
@@ -56,40 +57,61 @@ function setupHarness(initialBodyHtml: string): Harness {
|
|
|
56
57
|
window,
|
|
57
58
|
document,
|
|
58
59
|
capturedHandler: null,
|
|
59
|
-
setFetch: (fn) => {
|
|
60
|
+
setFetch: (fn) => {
|
|
61
|
+
(window as any).fetch = fn;
|
|
62
|
+
},
|
|
60
63
|
triggerHmr: () => {
|
|
61
64
|
if (!harness.capturedHandler) throw new Error('WebSocket handler not captured');
|
|
62
65
|
harness.capturedHandler({ data: JSON.stringify({ type: 'hmr:update' }) });
|
|
63
66
|
},
|
|
64
|
-
flush: () => new Promise(r => setTimeout(r, 100)),
|
|
67
|
+
flush: () => new Promise((r) => setTimeout(r, 100)),
|
|
65
68
|
reloadCalls: 0,
|
|
66
69
|
dispatchedDOMContentLoaded: 0,
|
|
67
70
|
};
|
|
68
71
|
|
|
69
72
|
(window as any).WebSocket = class {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
+
set onmessage(fn: any) {
|
|
74
|
+
harness.capturedHandler = fn;
|
|
75
|
+
}
|
|
76
|
+
get onmessage() {
|
|
77
|
+
return harness.capturedHandler;
|
|
78
|
+
}
|
|
73
79
|
onclose: any = null;
|
|
74
80
|
};
|
|
75
81
|
|
|
76
82
|
// Track dispatched DOMContentLoaded (the IIFE fires this on document)
|
|
77
|
-
document.addEventListener('DOMContentLoaded', () => {
|
|
83
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
84
|
+
harness.dispatchedDOMContentLoaded += 1;
|
|
85
|
+
});
|
|
78
86
|
|
|
79
87
|
const dynamicFetch = (...args: any[]) => (window as any).fetch(...args);
|
|
80
88
|
const fn = new Function(
|
|
81
|
-
'document',
|
|
82
|
-
'
|
|
83
|
-
|
|
89
|
+
'document',
|
|
90
|
+
'WebSocket',
|
|
91
|
+
'fetch',
|
|
92
|
+
'setTimeout',
|
|
93
|
+
'clearTimeout',
|
|
94
|
+
'DOMParser',
|
|
95
|
+
'Event',
|
|
96
|
+
'window',
|
|
97
|
+
'location',
|
|
98
|
+
script,
|
|
84
99
|
);
|
|
85
100
|
fn(
|
|
86
|
-
document,
|
|
87
|
-
|
|
88
|
-
|
|
101
|
+
document,
|
|
102
|
+
(window as any).WebSocket,
|
|
103
|
+
dynamicFetch,
|
|
104
|
+
setTimeout,
|
|
105
|
+
clearTimeout,
|
|
106
|
+
(window as any).DOMParser,
|
|
107
|
+
(window as any).Event,
|
|
108
|
+
window,
|
|
89
109
|
{
|
|
90
110
|
href: 'http://localhost/',
|
|
91
|
-
reload: () => {
|
|
92
|
-
|
|
111
|
+
reload: () => {
|
|
112
|
+
harness.reloadCalls += 1;
|
|
113
|
+
},
|
|
114
|
+
},
|
|
93
115
|
);
|
|
94
116
|
|
|
95
117
|
return harness;
|
|
@@ -98,7 +120,9 @@ function setupHarness(initialBodyHtml: string): Harness {
|
|
|
98
120
|
function makeServerHtml(rootInner: string, scriptHash = 'abc'): string {
|
|
99
121
|
return [
|
|
100
122
|
'<!DOCTYPE html><html lang="en" theme="light"><head></head><body>',
|
|
101
|
-
'<div id="root">',
|
|
123
|
+
'<div id="root">',
|
|
124
|
+
rootInner,
|
|
125
|
+
'</div>',
|
|
102
126
|
'<style id="meno-styles">.dummy{color:red}</style>',
|
|
103
127
|
`<script src="/_scripts/${scriptHash}.js" defer></script>`,
|
|
104
128
|
'</body></html>',
|
|
@@ -117,7 +141,9 @@ describe('live reload IIFE', () => {
|
|
|
117
141
|
</div>
|
|
118
142
|
</header>
|
|
119
143
|
`;
|
|
120
|
-
const harness = setupHarness(
|
|
144
|
+
const harness = setupHarness(
|
|
145
|
+
`<div id="root">${initialRootInner}</div><style id="meno-styles">.t-bg-red{background:red}</style><script src="/_scripts/v1.js" defer></script>`,
|
|
146
|
+
);
|
|
121
147
|
|
|
122
148
|
// User opens dropdown via JS — adds runtime class + initialization marker.
|
|
123
149
|
const container = harness.document.querySelector('[data-element-path="0,0"]')!;
|
|
@@ -153,7 +179,9 @@ describe('live reload IIFE', () => {
|
|
|
153
179
|
|
|
154
180
|
test('re-dispatches DOMContentLoaded only when /_scripts/ hash changes', async () => {
|
|
155
181
|
const initialRootInner = `<header data-element-path="0"><span data-element-path="0,0">hi</span></header>`;
|
|
156
|
-
const harness = setupHarness(
|
|
182
|
+
const harness = setupHarness(
|
|
183
|
+
`<div id="root">${initialRootInner}</div><style id="meno-styles">.x{}</style><script src="/_scripts/v1.js" defer></script>`,
|
|
184
|
+
);
|
|
157
185
|
|
|
158
186
|
// Edit that changes user JS → new content-hash on /_scripts/
|
|
159
187
|
const newRootInner = `<header data-element-path="0"><span data-element-path="0,0">hi</span></header>`;
|
|
@@ -162,7 +190,7 @@ describe('live reload IIFE', () => {
|
|
|
162
190
|
harness.triggerHmr();
|
|
163
191
|
await harness.flush();
|
|
164
192
|
// Wait a beat for the dynamically-appended script's onload to (try to) fire.
|
|
165
|
-
await new Promise(r => setTimeout(r, 50));
|
|
193
|
+
await new Promise((r) => setTimeout(r, 50));
|
|
166
194
|
|
|
167
195
|
// The hash changed, so the IIFE removed the old /_scripts/ tag and appended
|
|
168
196
|
// a new one. happy-dom's appended <script src> won't actually load over the
|
|
@@ -174,13 +202,15 @@ describe('live reload IIFE', () => {
|
|
|
174
202
|
// new one was appended.
|
|
175
203
|
const scripts = Array.from(harness.document.querySelectorAll('script[src^="/_scripts/"]'));
|
|
176
204
|
expect(scripts.length).toBe(1);
|
|
177
|
-
expect(scripts[0]
|
|
205
|
+
expect(scripts[0]!.getAttribute('src') || '').toContain('/_scripts/v2.js');
|
|
178
206
|
expect(harness.reloadCalls).toBe(0);
|
|
179
207
|
});
|
|
180
208
|
|
|
181
209
|
test('hard-resets (#root innerHTML replace + script re-run) on a server structure change', async () => {
|
|
182
210
|
const initialRootInner = `<header data-element-path="0"><span data-element-path="0,0">a</span></header>`;
|
|
183
|
-
const harness = setupHarness(
|
|
211
|
+
const harness = setupHarness(
|
|
212
|
+
`<div id="root">${initialRootInner}</div><style id="meno-styles">.x{}</style><script src="/_scripts/v1.js" defer></script>`,
|
|
213
|
+
);
|
|
184
214
|
|
|
185
215
|
// The editor added a node: the new SERVER markup has an extra [data-element-path]
|
|
186
216
|
// (a genuine structure change, independent of any runtime JS mutation). The
|
|
@@ -198,7 +228,7 @@ describe('live reload IIFE', () => {
|
|
|
198
228
|
// because #root was rebuilt and JS state is gone (slider-revert guard).
|
|
199
229
|
const scripts = Array.from(harness.document.querySelectorAll('script[src^="/_scripts/"]'));
|
|
200
230
|
expect(scripts.length).toBe(1);
|
|
201
|
-
expect(scripts[0]
|
|
231
|
+
expect(scripts[0]!.getAttribute('src') || '').toContain('_r=');
|
|
202
232
|
expect(harness.reloadCalls).toBe(0);
|
|
203
233
|
});
|
|
204
234
|
|
|
@@ -209,7 +239,9 @@ describe('live reload IIFE', () => {
|
|
|
209
239
|
// only styles/classes update. (Structure is judged old-server vs new-server, which
|
|
210
240
|
// are identical here — not live-vs-server, which the clone perturbed.)
|
|
211
241
|
const initialRootInner = `<div data-element-path="0" data-component="Slider"><span data-element-path="0,0" class="slide t-op-50">slide</span></div>`;
|
|
212
|
-
const harness = setupHarness(
|
|
242
|
+
const harness = setupHarness(
|
|
243
|
+
`<div id="root">${initialRootInner}</div><style id="meno-styles">.t-op-50{opacity:.5}</style><script src="/_scripts/v1.js" defer></script>`,
|
|
244
|
+
);
|
|
213
245
|
|
|
214
246
|
// Slider JS cloned a slide + recorded an init marker on the live DOM.
|
|
215
247
|
const slider = harness.document.querySelector('[data-element-path="0"]')!;
|
|
@@ -236,7 +268,7 @@ describe('live reload IIFE', () => {
|
|
|
236
268
|
// /_scripts NOT re-appended and no DOMContentLoaded re-dispatch.
|
|
237
269
|
const scripts = Array.from(harness.document.querySelectorAll('script[src^="/_scripts/"]'));
|
|
238
270
|
expect(scripts.length).toBe(1);
|
|
239
|
-
expect(scripts[0]
|
|
271
|
+
expect(scripts[0]!.getAttribute('src')).toBe('/_scripts/v1.js');
|
|
240
272
|
expect(harness.dispatchedDOMContentLoaded).toBe(0);
|
|
241
273
|
// The style edit still applied: new class on the slide + stylesheet swapped in place.
|
|
242
274
|
expect(original.classList.contains('t-op-100')).toBe(true);
|
|
@@ -247,7 +279,9 @@ describe('live reload IIFE', () => {
|
|
|
247
279
|
|
|
248
280
|
test('a soft update preserves a runtime attribute mutation (aria-expanded)', async () => {
|
|
249
281
|
const initialRootInner = `<button data-element-path="0" aria-expanded="false" class="t-c-red">Menu</button>`;
|
|
250
|
-
const harness = setupHarness(
|
|
282
|
+
const harness = setupHarness(
|
|
283
|
+
`<div id="root">${initialRootInner}</div><style id="meno-styles">.t-c-red{color:red}</style><script src="/_scripts/v1.js" defer></script>`,
|
|
284
|
+
);
|
|
251
285
|
|
|
252
286
|
// JS opened the menu at runtime: aria-expanded false -> true (an ATTRIBUTE, not a class).
|
|
253
287
|
const btn = harness.document.querySelector('[data-element-path="0"]')!;
|
|
@@ -261,16 +295,18 @@ describe('live reload IIFE', () => {
|
|
|
261
295
|
await harness.flush();
|
|
262
296
|
|
|
263
297
|
const after = harness.document.querySelector('[data-element-path="0"]')!;
|
|
264
|
-
expect(after).toBe(btn);
|
|
265
|
-
expect(after.getAttribute('aria-expanded')).toBe('true');
|
|
266
|
-
expect(after.classList.contains('t-c-blue')).toBe(true);
|
|
298
|
+
expect(after).toBe(btn); // identity preserved (soft)
|
|
299
|
+
expect(after.getAttribute('aria-expanded')).toBe('true'); // runtime mutation kept (menu stays open)
|
|
300
|
+
expect(after.classList.contains('t-c-blue')).toBe(true); // editor style applied
|
|
267
301
|
expect(after.classList.contains('t-c-red')).toBe(false);
|
|
268
302
|
expect(harness.dispatchedDOMContentLoaded).toBe(0);
|
|
269
303
|
});
|
|
270
304
|
|
|
271
305
|
test('a soft update still applies a genuine editor attribute edit (server value wins)', async () => {
|
|
272
306
|
const initialRootInner = `<a data-element-path="0" href="/old" class="t-c-red">x</a>`;
|
|
273
|
-
const harness = setupHarness(
|
|
307
|
+
const harness = setupHarness(
|
|
308
|
+
`<div id="root">${initialRootInner}</div><style id="meno-styles">.x{}</style><script src="/_scripts/v1.js" defer></script>`,
|
|
309
|
+
);
|
|
274
310
|
const link = harness.document.querySelector('[data-element-path="0"]')!;
|
|
275
311
|
|
|
276
312
|
// Editor changed href in the markup (server /old -> /new); same structure & hash.
|
|
@@ -281,13 +317,15 @@ describe('live reload IIFE', () => {
|
|
|
281
317
|
await harness.flush();
|
|
282
318
|
|
|
283
319
|
expect(harness.document.querySelector('[data-element-path="0"]')).toBe(link); // soft, identity kept
|
|
284
|
-
expect(link.getAttribute('href')).toBe('/new');
|
|
320
|
+
expect(link.getAttribute('href')).toBe('/new'); // editor edit wins
|
|
285
321
|
expect(harness.dispatchedDOMContentLoaded).toBe(0);
|
|
286
322
|
});
|
|
287
323
|
|
|
288
324
|
test('a JS edit (changed /_scripts hash) hard-resets the DOM and re-runs the script', async () => {
|
|
289
325
|
const initialRootInner = `<div data-element-path="0"><span data-element-path="0,0">x</span></div>`;
|
|
290
|
-
const harness = setupHarness(
|
|
326
|
+
const harness = setupHarness(
|
|
327
|
+
`<div id="root">${initialRootInner}</div><style id="meno-styles">.x{}</style><script src="/_scripts/v1.js" defer></script>`,
|
|
328
|
+
);
|
|
291
329
|
|
|
292
330
|
// Runtime mutation: JS set a flag + injected a node (no data-element-path).
|
|
293
331
|
const root0 = harness.document.querySelector('[data-element-path="0"]')!;
|
|
@@ -307,13 +345,15 @@ describe('live reload IIFE', () => {
|
|
|
307
345
|
// Script re-appended with cache-bust (clean re-run on a clean DOM).
|
|
308
346
|
const scripts = Array.from(harness.document.querySelectorAll('script[src^="/_scripts/"]'));
|
|
309
347
|
expect(scripts.length).toBe(1);
|
|
310
|
-
expect(scripts[0]
|
|
348
|
+
expect(scripts[0]!.getAttribute('src') || '').toContain('/_scripts/v2.js');
|
|
311
349
|
expect(harness.reloadCalls).toBe(0);
|
|
312
350
|
});
|
|
313
351
|
|
|
314
352
|
test('updates lang/theme only when they actually differ', async () => {
|
|
315
353
|
const initialRootInner = `<span data-element-path="0">hi</span>`;
|
|
316
|
-
const harness = setupHarness(
|
|
354
|
+
const harness = setupHarness(
|
|
355
|
+
`<div id="root">${initialRootInner}</div><style id="meno-styles">.x{}</style><script src="/_scripts/v1.js" defer></script>`,
|
|
356
|
+
);
|
|
317
357
|
const beforeLang = harness.document.documentElement.getAttribute('lang');
|
|
318
358
|
|
|
319
359
|
// Same lang/theme as initial document
|
|
@@ -83,7 +83,7 @@ export function generateMetaTags(
|
|
|
83
83
|
url: string = '',
|
|
84
84
|
locale: string = 'en',
|
|
85
85
|
config: I18nConfig = DEFAULT_I18N_CONFIG,
|
|
86
|
-
options?: MetaTagOptions
|
|
86
|
+
options?: MetaTagOptions,
|
|
87
87
|
): string {
|
|
88
88
|
const tags: string[] = [];
|
|
89
89
|
|
|
@@ -174,7 +174,7 @@ export function generateMetaTags(
|
|
|
174
174
|
}
|
|
175
175
|
|
|
176
176
|
// Add x-default pointing to default locale version
|
|
177
|
-
const defaultLink = localeLinks.find(l => l.locale === config.defaultLocale);
|
|
177
|
+
const defaultLink = localeLinks.find((l) => l.locale === config.defaultLocale);
|
|
178
178
|
if (defaultLink) {
|
|
179
179
|
const xDefaultUrl = baseUrl ? `${baseUrl}${defaultLink.path}` : defaultLink.path;
|
|
180
180
|
tags.push(`<link rel="alternate" hreflang="x-default" href="${escapeHtml(xDefaultUrl)}" />`);
|