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
|
@@ -16,8 +16,8 @@ import { isComponentNode, isSlotMarker, isLocaleListNode, isCMSListNode, isListN
|
|
|
16
16
|
* Node path data containing both logical and rendered paths
|
|
17
17
|
*/
|
|
18
18
|
export interface NodePathData {
|
|
19
|
-
path: Path;
|
|
20
|
-
renderedPath: Path;
|
|
19
|
+
path: Path; // Logical path in data structure
|
|
20
|
+
renderedPath: Path; // Path adjusted for component structure wrapping
|
|
21
21
|
/**
|
|
22
22
|
* For slot markers being edited from inside their host component: the
|
|
23
23
|
* page-absolute rendered paths of every DOM position the slot occupies
|
|
@@ -50,6 +50,9 @@ function findSlotMarkerPath(structure: any, currentPath: Path = [0]): Path | nul
|
|
|
50
50
|
for (let i = 0; i < structure.children.length; i++) {
|
|
51
51
|
const child = structure.children[i];
|
|
52
52
|
|
|
53
|
+
// Text children can't be (or contain) slot markers
|
|
54
|
+
if (typeof child === 'string') continue;
|
|
55
|
+
|
|
53
56
|
if (isSlotMarker(child)) {
|
|
54
57
|
return [...currentPath, i];
|
|
55
58
|
}
|
|
@@ -86,7 +89,7 @@ function calculateRenderedPath(
|
|
|
86
89
|
logicalPath: Path,
|
|
87
90
|
currentNode: any,
|
|
88
91
|
globalComponentRegistry: any,
|
|
89
|
-
navigationHistory?: NavigationContext[]
|
|
92
|
+
navigationHistory?: NavigationContext[],
|
|
90
93
|
): Path {
|
|
91
94
|
if (!currentNode || logicalPath.length === 0) {
|
|
92
95
|
return logicalPath;
|
|
@@ -107,7 +110,7 @@ function calculateRenderedPath(
|
|
|
107
110
|
// Use the most recent (current) navigation context's instanceChildren
|
|
108
111
|
// When editing nested components A > B, we need B's instanceChildren, not A's
|
|
109
112
|
const currentContext = navigationHistory[navigationHistory.length - 1];
|
|
110
|
-
const instanceChildren = currentContext
|
|
113
|
+
const instanceChildren = currentContext?.instanceChildren;
|
|
111
114
|
const instanceChildrenCount = Array.isArray(instanceChildren) ? instanceChildren.length : 0;
|
|
112
115
|
|
|
113
116
|
if (instanceChildrenCount > 0) {
|
|
@@ -117,8 +120,8 @@ function calculateRenderedPath(
|
|
|
117
120
|
// Check if this path is for an element AFTER the slot marker
|
|
118
121
|
const markerDepth = rootSlotPath.length - 1;
|
|
119
122
|
if (logicalPath.length > markerDepth) {
|
|
120
|
-
const indexAtMarkerLevel = logicalPath[markerDepth];
|
|
121
|
-
const markerIndex = rootSlotPath[markerDepth];
|
|
123
|
+
const indexAtMarkerLevel = logicalPath[markerDepth] ?? 0;
|
|
124
|
+
const markerIndex = rootSlotPath[markerDepth] ?? 0;
|
|
122
125
|
|
|
123
126
|
if (indexAtMarkerLevel > markerIndex) {
|
|
124
127
|
// This path is after the slot marker in the structure
|
|
@@ -135,10 +138,11 @@ function calculateRenderedPath(
|
|
|
135
138
|
// Build rendered path incrementally by walking through the logical path
|
|
136
139
|
// and checking if each parent is a component with a nested slot
|
|
137
140
|
let renderedPath: Path = [0];
|
|
138
|
-
let node = currentNode;
|
|
141
|
+
let node: ComponentNode | null | undefined = currentNode;
|
|
139
142
|
|
|
140
143
|
for (let i = 1; i < logicalPath.length; i++) {
|
|
141
|
-
|
|
144
|
+
const originalIndex = logicalPath[i] ?? 0;
|
|
145
|
+
let childIndex = originalIndex;
|
|
142
146
|
|
|
143
147
|
// Apply post-slot offset at the appropriate depth
|
|
144
148
|
// This handles elements that come AFTER a slot marker in the component structure
|
|
@@ -149,7 +153,7 @@ function calculateRenderedPath(
|
|
|
149
153
|
if (!node || !hasChildren(node)) break;
|
|
150
154
|
|
|
151
155
|
const children = node.children;
|
|
152
|
-
const childNode = children[
|
|
156
|
+
const childNode = children[originalIndex]; // Use original index for traversal
|
|
153
157
|
|
|
154
158
|
// Check if current node (the parent) is a component
|
|
155
159
|
if (isComponentNode(node)) {
|
|
@@ -164,7 +168,7 @@ function calculateRenderedPath(
|
|
|
164
168
|
// prefix = path from component root to slot's parent container
|
|
165
169
|
// For [0, 0, 0]: prefix = [0] (the middle elements, excluding root and slot index)
|
|
166
170
|
const prefix = slotPath.slice(1, -1);
|
|
167
|
-
const slotIndex = slotPath[slotPath.length - 1];
|
|
171
|
+
const slotIndex = slotPath[slotPath.length - 1] ?? 0;
|
|
168
172
|
|
|
169
173
|
// Child renders at: currentRenderedPath + prefix + (slotIndex + adjustedChildIndex)
|
|
170
174
|
renderedPath = [...renderedPath, ...prefix, slotIndex + childIndex];
|
|
@@ -181,7 +185,9 @@ function calculateRenderedPath(
|
|
|
181
185
|
renderedPath = [...renderedPath, childIndex];
|
|
182
186
|
}
|
|
183
187
|
|
|
184
|
-
|
|
188
|
+
// Text children have no children of their own — the next iteration's
|
|
189
|
+
// hasChildren() check breaks out, same as before, but keep `node` typed.
|
|
190
|
+
node = typeof childNode === 'string' ? undefined : childNode;
|
|
185
191
|
}
|
|
186
192
|
|
|
187
193
|
return renderedPath;
|
|
@@ -197,16 +203,16 @@ function calculateRenderedPath(
|
|
|
197
203
|
* CMS item context for elements inside CMS List(s)
|
|
198
204
|
*/
|
|
199
205
|
export interface CMSItemContext {
|
|
200
|
-
itemIndexPath: number[];
|
|
201
|
-
listPaths: Path[];
|
|
206
|
+
itemIndexPath: number[]; // e.g., [0] for single list, [0, 2] for nested
|
|
207
|
+
listPaths: Path[]; // Parallel array of list node paths
|
|
202
208
|
}
|
|
203
209
|
|
|
204
210
|
export interface NavigationContext {
|
|
205
|
-
file?: any;
|
|
211
|
+
file?: any; // FileItem - optional as not all contexts have file
|
|
206
212
|
componentInstancePath: Path | null;
|
|
207
|
-
componentInstanceRenderedPath?: Path | null;
|
|
208
|
-
instanceChildren?: Array<ComponentNode | string>;
|
|
209
|
-
cmsItemContext?: CMSItemContext | null;
|
|
213
|
+
componentInstanceRenderedPath?: Path | null; // Rendered path for accurate DOM queries
|
|
214
|
+
instanceChildren?: Array<ComponentNode | string>; // Children of the component instance (for path offset calculation)
|
|
215
|
+
cmsItemContext?: CMSItemContext | null; // CMS context when editing component inside CMS List
|
|
210
216
|
}
|
|
211
217
|
|
|
212
218
|
/**
|
|
@@ -218,16 +224,14 @@ export interface NavigationContext {
|
|
|
218
224
|
* buildTreePathsWithRendered prepends, and to know how many leading elements
|
|
219
225
|
* to strip when extracting a component-internal path back out.
|
|
220
226
|
*/
|
|
221
|
-
export function computeCumulativeInstancePath(
|
|
222
|
-
navigationHistory: NavigationContext[] | undefined,
|
|
223
|
-
): Path | null {
|
|
227
|
+
export function computeCumulativeInstancePath(navigationHistory: NavigationContext[] | undefined): Path | null {
|
|
224
228
|
if (!navigationHistory || navigationHistory.length === 0) return null;
|
|
225
229
|
let cumulative: Path | null =
|
|
226
|
-
navigationHistory[0]
|
|
230
|
+
navigationHistory[0]?.componentInstanceRenderedPath ?? navigationHistory[0]?.componentInstancePath ?? null;
|
|
227
231
|
if (!cumulative) return null;
|
|
228
232
|
for (let i = 1; i < navigationHistory.length; i++) {
|
|
229
|
-
const
|
|
230
|
-
|
|
233
|
+
const entry = navigationHistory[i];
|
|
234
|
+
const next = entry?.componentInstanceRenderedPath ?? entry?.componentInstancePath;
|
|
231
235
|
if (next) {
|
|
232
236
|
cumulative = [...cumulative, ...next.slice(1)];
|
|
233
237
|
}
|
|
@@ -264,7 +268,7 @@ export function computeCumulativeInstancePath(
|
|
|
264
268
|
export function buildTreePathsWithRendered(
|
|
265
269
|
pageData: PageData,
|
|
266
270
|
globalComponentRegistry?: any,
|
|
267
|
-
navigationHistory?: NavigationContext[]
|
|
271
|
+
navigationHistory?: NavigationContext[],
|
|
268
272
|
): NodePathData[] {
|
|
269
273
|
const rootData = getRootData(pageData);
|
|
270
274
|
if (!rootData) return [];
|
|
@@ -281,9 +285,9 @@ export function buildTreePathsWithRendered(
|
|
|
281
285
|
// post-slot offset (the LAST navigation entry's instanceChildren).
|
|
282
286
|
const hostInstanceChildrenCount =
|
|
283
287
|
navigationHistory && navigationHistory.length > 0
|
|
284
|
-
?
|
|
285
|
-
|
|
286
|
-
|
|
288
|
+
? Array.isArray(navigationHistory[navigationHistory.length - 1]?.instanceChildren)
|
|
289
|
+
? navigationHistory[navigationHistory.length - 1]!.instanceChildren!.length
|
|
290
|
+
: 0
|
|
287
291
|
: 0;
|
|
288
292
|
|
|
289
293
|
function traverse(node: ComponentNode, currentPath: Path = [0]): void {
|
|
@@ -308,8 +312,8 @@ export function buildTreePathsWithRendered(
|
|
|
308
312
|
: undefined;
|
|
309
313
|
|
|
310
314
|
result.push({
|
|
311
|
-
path: currentPath,
|
|
312
|
-
renderedPath: adjustedRenderedPath,
|
|
315
|
+
path: currentPath, // Keep logical path component-relative
|
|
316
|
+
renderedPath: adjustedRenderedPath, // Adjust rendered path for page-relative queries
|
|
313
317
|
...(slotRenderedPaths ? { slotRenderedPaths } : {}),
|
|
314
318
|
});
|
|
315
319
|
|
|
@@ -321,7 +325,15 @@ export function buildTreePathsWithRendered(
|
|
|
321
325
|
if (
|
|
322
326
|
typeof child === 'object' &&
|
|
323
327
|
child !== null &&
|
|
324
|
-
('tag' in child ||
|
|
328
|
+
('tag' in child ||
|
|
329
|
+
'component' in child ||
|
|
330
|
+
'html' in child ||
|
|
331
|
+
'src' in child ||
|
|
332
|
+
'href' in child ||
|
|
333
|
+
isLocaleListNode(child) ||
|
|
334
|
+
isCMSListNode(child) ||
|
|
335
|
+
isListNode(child) ||
|
|
336
|
+
(cumulativeInstancePath && isSlotMarker(child)))
|
|
325
337
|
) {
|
|
326
338
|
const childPath = [...currentPath, index];
|
|
327
339
|
traverse(child as ComponentNode, childPath);
|
|
@@ -343,7 +355,7 @@ export function buildTreePathsWithRendered(
|
|
|
343
355
|
function expandSlotRenderedPaths(slotRenderedPath: Path, instanceChildrenCount: number): Path[] {
|
|
344
356
|
if (instanceChildrenCount <= 0 || slotRenderedPath.length === 0) return [];
|
|
345
357
|
const prefix = slotRenderedPath.slice(0, -1);
|
|
346
|
-
const slotIdx = slotRenderedPath[slotRenderedPath.length - 1];
|
|
358
|
+
const slotIdx = slotRenderedPath[slotRenderedPath.length - 1] ?? 0;
|
|
347
359
|
const out: Path[] = [];
|
|
348
360
|
for (let i = 0; i < instanceChildrenCount; i++) {
|
|
349
361
|
out.push([...prefix, slotIdx + i]);
|
|
@@ -365,7 +377,7 @@ function expandSlotRenderedPaths(slotRenderedPath: Path, instanceChildrenCount:
|
|
|
365
377
|
export function buildComponentTreePaths(
|
|
366
378
|
componentStructure: ComponentNode,
|
|
367
379
|
globalComponentRegistry?: any,
|
|
368
|
-
navigationHistory?: NavigationContext[]
|
|
380
|
+
navigationHistory?: NavigationContext[],
|
|
369
381
|
): NodePathData[] {
|
|
370
382
|
const result: NodePathData[] = [];
|
|
371
383
|
|
|
@@ -374,9 +386,9 @@ export function buildComponentTreePaths(
|
|
|
374
386
|
|
|
375
387
|
const hostInstanceChildrenCount =
|
|
376
388
|
navigationHistory && navigationHistory.length > 0
|
|
377
|
-
?
|
|
378
|
-
|
|
379
|
-
|
|
389
|
+
? Array.isArray(navigationHistory[navigationHistory.length - 1]?.instanceChildren)
|
|
390
|
+
? navigationHistory[navigationHistory.length - 1]!.instanceChildren!.length
|
|
391
|
+
: 0
|
|
380
392
|
: 0;
|
|
381
393
|
|
|
382
394
|
function traverse(node: ComponentNode, currentPath: Path = [0]): void {
|
|
@@ -409,7 +421,15 @@ export function buildComponentTreePaths(
|
|
|
409
421
|
if (
|
|
410
422
|
typeof child === 'object' &&
|
|
411
423
|
child !== null &&
|
|
412
|
-
('tag' in child ||
|
|
424
|
+
('tag' in child ||
|
|
425
|
+
'component' in child ||
|
|
426
|
+
'html' in child ||
|
|
427
|
+
'src' in child ||
|
|
428
|
+
'href' in child ||
|
|
429
|
+
isLocaleListNode(child) ||
|
|
430
|
+
isCMSListNode(child) ||
|
|
431
|
+
isListNode(child) ||
|
|
432
|
+
isSlotMarker(child))
|
|
413
433
|
) {
|
|
414
434
|
const childPath = [...currentPath, index];
|
|
415
435
|
traverse(child as ComponentNode, childPath);
|
|
@@ -425,24 +445,16 @@ export function buildComponentTreePaths(
|
|
|
425
445
|
/**
|
|
426
446
|
* Find NodePathData by logical path
|
|
427
447
|
*/
|
|
428
|
-
export function findPathData(
|
|
429
|
-
pathsData: NodePathData[],
|
|
430
|
-
searchPath: Path
|
|
431
|
-
): NodePathData | undefined {
|
|
448
|
+
export function findPathData(pathsData: NodePathData[], searchPath: Path): NodePathData | undefined {
|
|
432
449
|
return pathsData.find(
|
|
433
|
-
(item) =>
|
|
434
|
-
item.path.length === searchPath.length &&
|
|
435
|
-
item.path.every((val, idx) => val === searchPath[idx])
|
|
450
|
+
(item) => item.path.length === searchPath.length && item.path.every((val, idx) => val === searchPath[idx]),
|
|
436
451
|
);
|
|
437
452
|
}
|
|
438
453
|
|
|
439
454
|
/**
|
|
440
455
|
* Get all ancestors for a path (including the path itself)
|
|
441
456
|
*/
|
|
442
|
-
export function getPathAncestors(
|
|
443
|
-
pathsData: NodePathData[],
|
|
444
|
-
searchPath: Path
|
|
445
|
-
): NodePathData[] {
|
|
457
|
+
export function getPathAncestors(pathsData: NodePathData[], searchPath: Path): NodePathData[] {
|
|
446
458
|
const ancestors: NodePathData[] = [];
|
|
447
459
|
|
|
448
460
|
for (let i = 1; i <= searchPath.length; i++) {
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
isComponentNodeParent,
|
|
17
17
|
getParentChildren,
|
|
18
18
|
setParentChildren,
|
|
19
|
+
findPathToNodeByReference,
|
|
19
20
|
} from './treePathUtils';
|
|
20
21
|
import type { ComponentNode, PageData, JSONPage, PageDataWithComponent, HtmlNode } from './types';
|
|
21
22
|
import { NODE_TYPE } from './constants';
|
|
@@ -243,11 +244,7 @@ describe('extractStructureWithoutStyles', () => {
|
|
|
243
244
|
});
|
|
244
245
|
|
|
245
246
|
describe('calculateInsertionIndex', () => {
|
|
246
|
-
const mockChildren = [
|
|
247
|
-
createNode({ tag: 'p' }),
|
|
248
|
-
createNode({ tag: 'span' }),
|
|
249
|
-
createNode({ tag: 'div' }),
|
|
250
|
-
];
|
|
247
|
+
const mockChildren = [createNode({ tag: 'p' }), createNode({ tag: 'span' }), createNode({ tag: 'div' })];
|
|
251
248
|
const emptyNodeDataMap = new Map<string, ComponentNode | string>();
|
|
252
249
|
|
|
253
250
|
test('should use childIndex when provided', () => {
|
|
@@ -280,7 +277,7 @@ describe('calculateInsertionIndex', () => {
|
|
|
280
277
|
|
|
281
278
|
test('should handle childAfterItem with nodeDataMap', () => {
|
|
282
279
|
const nodeDataMap = new Map<string, ComponentNode | string>();
|
|
283
|
-
nodeDataMap.set('path_0', mockChildren[0]);
|
|
280
|
+
nodeDataMap.set('path_0', mockChildren[0]!);
|
|
284
281
|
|
|
285
282
|
const target = { childAfterItem: { index: 'path_0' } };
|
|
286
283
|
expect(calculateInsertionIndex(target, mockChildren, nodeDataMap)).toBe(1);
|
|
@@ -288,7 +285,7 @@ describe('calculateInsertionIndex', () => {
|
|
|
288
285
|
|
|
289
286
|
test('should handle childBeforeItem with nodeDataMap', () => {
|
|
290
287
|
const nodeDataMap = new Map<string, ComponentNode | string>();
|
|
291
|
-
nodeDataMap.set('path_1', mockChildren[1]);
|
|
288
|
+
nodeDataMap.set('path_1', mockChildren[1]!);
|
|
292
289
|
|
|
293
290
|
const target = { childBeforeItem: { index: 'path_1' } };
|
|
294
291
|
expect(calculateInsertionIndex(target, mockChildren, nodeDataMap)).toBe(1);
|
|
@@ -411,6 +408,16 @@ describe('isComponentNodeParent', () => {
|
|
|
411
408
|
expect(isComponentNodeParent(node)).toBe(true);
|
|
412
409
|
});
|
|
413
410
|
|
|
411
|
+
test('should return true for CustomNode', () => {
|
|
412
|
+
const node = { type: NODE_TYPE.CUSTOM, src: 'Callout.astro' } as ComponentNode;
|
|
413
|
+
expect(isComponentNodeParent(node)).toBe(true);
|
|
414
|
+
});
|
|
415
|
+
|
|
416
|
+
test('should return true for IslandNode', () => {
|
|
417
|
+
const node = { type: NODE_TYPE.ISLAND, src: 'Chart.tsx' } as ComponentNode;
|
|
418
|
+
expect(isComponentNodeParent(node)).toBe(true);
|
|
419
|
+
});
|
|
420
|
+
|
|
414
421
|
test('should return false for PageData', () => {
|
|
415
422
|
const pageData = createPageData();
|
|
416
423
|
expect(isComponentNodeParent(pageData)).toBe(false);
|
|
@@ -521,11 +528,7 @@ describe('edge cases', () => {
|
|
|
521
528
|
|
|
522
529
|
test('should handle mixed children (nodes and strings)', () => {
|
|
523
530
|
const pageData = createPageData({
|
|
524
|
-
children: [
|
|
525
|
-
'text before',
|
|
526
|
-
createNode({ tag: 'span' }),
|
|
527
|
-
'text after',
|
|
528
|
-
],
|
|
531
|
+
children: ['text before', createNode({ tag: 'span' }), 'text after'],
|
|
529
532
|
});
|
|
530
533
|
|
|
531
534
|
// Path to span should work
|
|
@@ -537,3 +540,39 @@ describe('edge cases', () => {
|
|
|
537
540
|
expect(textResult).toBeNull();
|
|
538
541
|
});
|
|
539
542
|
});
|
|
543
|
+
|
|
544
|
+
describe('findPathToNodeByReference', () => {
|
|
545
|
+
test('finds a nested node by reference and returns its [0, ...] path', () => {
|
|
546
|
+
const target: ComponentNode = { type: NODE_TYPE.NODE, tag: 'section', children: ['Nav'] };
|
|
547
|
+
const pageData: PageData = {
|
|
548
|
+
root: {
|
|
549
|
+
type: NODE_TYPE.NODE,
|
|
550
|
+
tag: 'div',
|
|
551
|
+
children: [
|
|
552
|
+
{ type: NODE_TYPE.NODE, tag: 'header', children: ['Promo'] },
|
|
553
|
+
{ type: NODE_TYPE.NODE, tag: 'main', children: [target] },
|
|
554
|
+
],
|
|
555
|
+
},
|
|
556
|
+
};
|
|
557
|
+
|
|
558
|
+
expect(findPathToNodeByReference(pageData, target)).toEqual([0, 1, 0]);
|
|
559
|
+
});
|
|
560
|
+
|
|
561
|
+
test('returns [0] when the target is the root node', () => {
|
|
562
|
+
const root: ComponentNode = { type: NODE_TYPE.NODE, tag: 'div', children: [] };
|
|
563
|
+
expect(findPathToNodeByReference({ root }, root)).toEqual([0]);
|
|
564
|
+
});
|
|
565
|
+
|
|
566
|
+
test('returns null for a structurally-equal but non-identical node', () => {
|
|
567
|
+
const pageData: PageData = {
|
|
568
|
+
root: { type: NODE_TYPE.NODE, tag: 'div', children: [{ type: NODE_TYPE.NODE, tag: 'p', children: ['hi'] }] },
|
|
569
|
+
};
|
|
570
|
+
// Same shape, different reference -> not found (reference identity only).
|
|
571
|
+
const lookalike: ComponentNode = { type: NODE_TYPE.NODE, tag: 'p', children: ['hi'] };
|
|
572
|
+
expect(findPathToNodeByReference(pageData, lookalike)).toBeNull();
|
|
573
|
+
});
|
|
574
|
+
|
|
575
|
+
test('returns null when there is no root', () => {
|
|
576
|
+
expect(findPathToNodeByReference({} as PageData, { type: NODE_TYPE.NODE, tag: 'div' })).toBeNull();
|
|
577
|
+
});
|
|
578
|
+
});
|