meno-core 1.0.53 → 1.0.54
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 +48 -57
- package/build-astro.ts +131 -113
- package/build-next.ts +109 -96
- package/build-static.test.ts +39 -10
- package/build-static.ts +120 -122
- package/dist/bin/cli.js +34 -38
- package/dist/bin/cli.js.map +2 -2
- package/dist/build-static.js +12 -11
- package/dist/chunks/chunk-2AR55GYH.js +42 -0
- package/dist/chunks/chunk-2AR55GYH.js.map +7 -0
- package/dist/chunks/{chunk-IGYR22T6.js → chunk-2FN4UOVO.js} +512 -239
- package/dist/chunks/chunk-2FN4UOVO.js.map +7 -0
- package/dist/chunks/chunk-3XER4E5W.js +168 -0
- package/dist/chunks/chunk-3XER4E5W.js.map +7 -0
- package/dist/chunks/{chunk-X754AHS5.js → chunk-5ETZFREW.js} +9 -12
- package/dist/chunks/chunk-5ETZFREW.js.map +7 -0
- package/dist/chunks/{chunk-2MHDV5BF.js → chunk-7E4IF5L7.js} +15 -21
- package/dist/chunks/chunk-7E4IF5L7.js.map +7 -0
- package/dist/chunks/{chunk-JGWFTO6P.js → chunk-7HWQUVTU.js} +1578 -1349
- package/dist/chunks/chunk-7HWQUVTU.js.map +7 -0
- package/dist/chunks/{chunk-O3NAGJP4.js → chunk-AE3QK5QW.js} +110 -21
- package/dist/chunks/chunk-AE3QK5QW.js.map +7 -0
- package/dist/chunks/{chunk-GZHGVVW3.js → chunk-F6KTJYGV.js} +7 -7
- package/dist/chunks/chunk-F6KTJYGV.js.map +7 -0
- package/dist/chunks/{chunk-WQFG7PAH.js → chunk-FZITJSSS.js} +2 -6
- package/dist/chunks/chunk-FZITJSSS.js.map +7 -0
- package/dist/chunks/{chunk-QB2LNO4W.js → chunk-GSYYA5GX.js} +2 -2
- package/dist/chunks/chunk-GSYYA5GX.js.map +7 -0
- package/dist/chunks/{chunk-YBLHKYFF.js → chunk-HIZMY3EP.js} +1 -1
- package/dist/chunks/chunk-HIZMY3EP.js.map +7 -0
- package/dist/chunks/{chunk-AZQYF6KE.js → chunk-I2WEGYA7.js} +41 -176
- package/dist/chunks/chunk-I2WEGYA7.js.map +7 -0
- package/dist/chunks/{chunk-I7YIGZXT.js → chunk-JNO3CNLJ.js} +6 -9
- package/dist/chunks/chunk-JNO3CNLJ.js.map +7 -0
- package/dist/chunks/{chunk-UB44F4Z2.js → chunk-NVRBTSQG.js} +2 -4
- package/dist/chunks/chunk-NVRBTSQG.js.map +7 -0
- package/dist/chunks/{chunk-JGP5A3Y5.js → chunk-Q4OBWKXG.js} +40 -33
- package/dist/chunks/chunk-Q4OBWKXG.js.map +7 -0
- package/dist/chunks/{chunk-R6XHAFBF.js → chunk-QTE32Y53.js} +250 -242
- package/dist/chunks/chunk-QTE32Y53.js.map +7 -0
- package/dist/chunks/{chunk-H3GJ4H2U.js → chunk-STDY3OVM.js} +214 -85
- package/dist/chunks/chunk-STDY3OVM.js.map +7 -0
- package/dist/chunks/configService-PRJZF7Y6.js +14 -0
- package/dist/chunks/{constants-STK2YBIW.js → constants-KIQEYMAM.js} +2 -2
- package/dist/chunks/{fs-JGINUXGL.js → fs-ZI5JEU7V.js} +2 -2
- package/dist/entries/server-router.js +14 -19
- package/dist/entries/server-router.js.map +2 -2
- package/dist/lib/client/index.js +638 -332
- package/dist/lib/client/index.js.map +2 -2
- package/dist/lib/server/index.js +177 -235
- package/dist/lib/server/index.js.map +2 -2
- package/dist/lib/shared/index.js +80 -44
- package/dist/lib/shared/index.js.map +2 -2
- package/dist/lib/shared/richtext/index.js +1 -1
- package/dist/lib/test-utils/index.js +38 -60
- package/dist/lib/test-utils/index.js.map +2 -2
- package/entries/client-router.tsx +10 -8
- package/entries/server-router.tsx +1 -7
- package/lib/client/ClientInitializer.ts +8 -8
- package/lib/client/ErrorBoundary.test.tsx +146 -143
- package/lib/client/ErrorBoundary.tsx +175 -127
- package/lib/client/componentRegistry.test.ts +96 -108
- package/lib/client/componentRegistry.ts +1 -2
- package/lib/client/contexts/ThemeContext.tsx +3 -2
- package/lib/client/core/ComponentBuilder.test.ts +513 -560
- package/lib/client/core/ComponentBuilder.ts +318 -146
- package/lib/client/core/ComponentRenderer.test.tsx +1 -2
- package/lib/client/core/ComponentRenderer.tsx +46 -33
- package/lib/client/core/builders/embedBuilder.ts +241 -53
- package/lib/client/core/builders/linkBuilder.ts +71 -44
- package/lib/client/core/builders/linkNodeBuilder.ts +78 -53
- package/lib/client/core/builders/listBuilder.ts +115 -86
- package/lib/client/core/builders/localeListBuilder.ts +95 -60
- package/lib/client/core/builders/types.ts +5 -5
- package/lib/client/core/cmsTemplateProcessor.ts +7 -7
- 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 +8 -0
- package/lib/client/hmrCssReload.ts +14 -8
- package/lib/client/hmrWebSocket.ts +9 -14
- package/lib/client/hooks/useColorVariables.test.ts +21 -21
- package/lib/client/hooks/useColorVariables.ts +12 -10
- package/lib/client/hooks/usePropertyAutocomplete.ts +3 -5
- package/lib/client/hooks/useVariables.ts +4 -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 +19 -21
- package/lib/client/meno-filter/MenoFilter.ts +5 -9
- package/lib/client/meno-filter/bindings.ts +15 -40
- package/lib/client/meno-filter/init.ts +1 -1
- package/lib/client/meno-filter/renderer.ts +23 -29
- package/lib/client/meno-filter/script.generated.ts +1 -3
- package/lib/client/meno-filter/ui.ts +3 -5
- package/lib/client/meno-filter/updates.ts +15 -21
- package/lib/client/navigation.test.ts +159 -159
- package/lib/client/navigation.ts +0 -1
- package/lib/client/responsiveStyleResolver.test.ts +230 -228
- package/lib/client/responsiveStyleResolver.ts +13 -16
- package/lib/client/routing/RouteLoader.test.ts +23 -24
- package/lib/client/routing/RouteLoader.ts +22 -35
- package/lib/client/routing/Router.tsx +31 -3
- package/lib/client/scripts/ScriptExecutor.test.ts +157 -158
- package/lib/client/scripts/ScriptExecutor.ts +15 -33
- package/lib/client/services/PrefetchService.test.ts +2 -2
- package/lib/client/services/PrefetchService.ts +10 -24
- package/lib/client/styleProcessor.test.ts +9 -9
- package/lib/client/styleProcessor.ts +18 -15
- package/lib/client/styles/StyleInjector.test.ts +122 -115
- package/lib/client/styles/StyleInjector.ts +9 -6
- package/lib/client/styles/UtilityClassCollector.ts +19 -26
- package/lib/client/styles/cspNonce.test.ts +2 -5
- package/lib/client/templateEngine.test.ts +554 -482
- package/lib/client/templateEngine.ts +200 -64
- 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 +2 -5
- package/lib/server/__integration__/ssr-rendering.test.ts +47 -37
- package/lib/server/__integration__/static-assets.test.ts +1 -1
- package/lib/server/__integration__/test-helpers.ts +84 -70
- package/lib/server/ab/generateFunctions.ts +12 -10
- package/lib/server/astro/cmsPageEmitter.ts +23 -38
- package/lib/server/astro/componentEmitter.ts +25 -36
- package/lib/server/astro/cssCollector.ts +10 -26
- package/lib/server/astro/nodeToAstro.test.ts +1750 -30
- package/lib/server/astro/nodeToAstro.ts +198 -187
- package/lib/server/astro/normalizeOrphanTemplateProps.test.ts +105 -109
- package/lib/server/astro/normalizeOrphanTemplateProps.ts +4 -12
- 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 +14 -17
- package/lib/server/createServer.ts +5 -17
- package/lib/server/cssGenerator.test.ts +35 -44
- package/lib/server/cssGenerator.ts +6 -17
- package/lib/server/fileWatcher.test.ts +124 -10
- package/lib/server/fileWatcher.ts +124 -118
- package/lib/server/index.ts +7 -1
- package/lib/server/jsonLoader.test.ts +39 -2
- package/lib/server/jsonLoader.ts +33 -31
- package/lib/server/middleware/cors.test.ts +20 -20
- package/lib/server/middleware/cors.ts +28 -4
- package/lib/server/middleware/errorHandler.test.ts +5 -3
- package/lib/server/middleware/errorHandler.ts +3 -8
- package/lib/server/middleware/index.ts +0 -1
- package/lib/server/middleware/logger.test.ts +7 -5
- package/lib/server/middleware/logger.ts +10 -22
- package/lib/server/pageCache.test.ts +76 -77
- package/lib/server/pageCache.ts +0 -1
- package/lib/server/projectContext.ts +4 -3
- package/lib/server/providers/fileSystemCMSProvider.test.ts +124 -95
- package/lib/server/providers/fileSystemCMSProvider.ts +35 -20
- package/lib/server/providers/fileSystemPageProvider.test.ts +84 -0
- package/lib/server/providers/fileSystemPageProvider.ts +31 -12
- package/lib/server/routes/api/cms.test.ts +26 -14
- package/lib/server/routes/api/cms.ts +9 -14
- package/lib/server/routes/api/components.ts +30 -34
- package/lib/server/routes/api/config.ts +0 -1
- package/lib/server/routes/api/core-routes.ts +47 -74
- package/lib/server/routes/api/functions.ts +8 -16
- 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 +1 -3
- package/lib/server/routes/api/variables.ts +1 -1
- package/lib/server/routes/index.ts +23 -26
- package/lib/server/routes/pages.ts +34 -29
- package/lib/server/routes/static.ts +16 -4
- package/lib/server/runtime/bundler.ts +47 -32
- package/lib/server/runtime/fs.ts +3 -13
- package/lib/server/runtime/httpServer.ts +5 -9
- package/lib/server/services/ColorService.ts +32 -27
- package/lib/server/services/EnumService.test.ts +2 -6
- package/lib/server/services/EnumService.ts +7 -2
- package/lib/server/services/VariableService.test.ts +1 -5
- package/lib/server/services/VariableService.ts +6 -1
- package/lib/server/services/cmsService.test.ts +116 -78
- package/lib/server/services/cmsService.ts +24 -54
- package/lib/server/services/componentService.test.ts +122 -36
- package/lib/server/services/componentService.ts +54 -38
- package/lib/server/services/configService.test.ts +9 -31
- package/lib/server/services/configService.ts +20 -27
- package/lib/server/services/fileWatcherService.ts +40 -6
- package/lib/server/services/index.ts +0 -1
- package/lib/server/services/pageService.test.ts +1 -3
- package/lib/server/services/pageService.ts +14 -13
- package/lib/server/ssr/attributeBuilder.ts +16 -6
- package/lib/server/ssr/buildErrorOverlay.ts +11 -12
- package/lib/server/ssr/clientDataInjector.ts +7 -21
- package/lib/server/ssr/cmsSSRProcessor.ts +3 -6
- 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 +3 -9
- package/lib/server/ssr/htmlGenerator.test.ts +120 -43
- package/lib/server/ssr/htmlGenerator.ts +120 -85
- package/lib/server/ssr/imageMetadata.test.ts +3 -1
- package/lib/server/ssr/imageMetadata.ts +25 -19
- package/lib/server/ssr/jsCollector.test.ts +3 -13
- package/lib/server/ssr/jsCollector.ts +3 -8
- package/lib/server/ssr/liveReloadIntegration.test.ts +69 -28
- 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 +196 -246
- package/lib/server/ssr/ssrRenderer.ts +609 -225
- package/lib/server/ssrRenderer.test.ts +1044 -950
- package/lib/server/utils/jsonLineMapper.test.ts +28 -28
- package/lib/server/utils/jsonLineMapper.ts +1 -1
- package/lib/server/validateStyleCoverage.ts +18 -20
- package/lib/server/webflow/buildWebflow.ts +41 -53
- package/lib/server/webflow/nodeToWebflow.test.ts +150 -218
- package/lib/server/webflow/nodeToWebflow.ts +195 -258
- package/lib/server/webflow/styleMapper.test.ts +15 -56
- package/lib/server/webflow/styleMapper.ts +33 -41
- package/lib/server/webflow/types.ts +1 -8
- package/lib/server/websocketManager.ts +16 -19
- package/lib/shared/attributeNodeUtils.test.ts +15 -15
- package/lib/shared/attributeNodeUtils.ts +5 -12
- package/lib/shared/breakpoints.ts +4 -11
- package/lib/shared/cmsQueryParser.test.ts +50 -42
- package/lib/shared/cmsQueryParser.ts +49 -31
- package/lib/shared/colorVariableUtils.test.ts +5 -5
- package/lib/shared/colorVariableUtils.ts +3 -8
- package/lib/shared/componentRefs.ts +1 -5
- package/lib/shared/constants.test.ts +3 -3
- package/lib/shared/constants.ts +4 -8
- package/lib/shared/cssGeneration.test.ts +262 -144
- package/lib/shared/cssGeneration.ts +189 -516
- package/lib/shared/cssNamedColors.ts +152 -30
- package/lib/shared/cssProperties.test.ts +5 -6
- package/lib/shared/cssProperties.ts +296 -112
- package/lib/shared/elementClassName.test.ts +109 -109
- package/lib/shared/elementClassName.ts +1 -1
- package/lib/shared/elementUtils.ts +12 -16
- 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 +119 -0
- package/lib/shared/expressionEvaluator.ts +43 -24
- package/lib/shared/fontLoader.test.ts +19 -5
- package/lib/shared/friendlyError.ts +2 -3
- package/lib/shared/gradientUtils.test.ts +1 -5
- package/lib/shared/gradientUtils.ts +2 -6
- package/lib/shared/hrefRefs.ts +2 -10
- package/lib/shared/i18n.test.ts +1 -1
- package/lib/shared/i18n.ts +13 -34
- package/lib/shared/index.ts +4 -0
- package/lib/shared/inlineSvgStyleRules.ts +2 -4
- package/lib/shared/interactiveStyleMappings.test.ts +11 -33
- package/lib/shared/interactiveStyleMappings.ts +9 -16
- package/lib/shared/interactiveStyles.test.ts +165 -188
- package/lib/shared/interfaces/contentProvider.ts +1 -1
- package/lib/shared/itemTemplateUtils.test.ts +6 -12
- package/lib/shared/itemTemplateUtils.ts +19 -35
- package/lib/shared/jsonRepair.ts +8 -2
- package/lib/shared/libraryLoader.test.ts +15 -49
- package/lib/shared/libraryLoader.ts +7 -22
- package/lib/shared/netlifyLocale404.test.ts +179 -0
- package/lib/shared/netlifyLocale404.ts +110 -0
- package/lib/shared/nodeUtils.test.ts +24 -16
- package/lib/shared/nodeUtils.ts +49 -19
- package/lib/shared/pathArrayUtils.test.ts +1 -2
- package/lib/shared/pathArrayUtils.ts +1 -1
- package/lib/shared/pathSecurity.ts +1 -1
- package/lib/shared/pathUtils.test.ts +4 -6
- package/lib/shared/pathUtils.ts +42 -48
- 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 +14 -17
- package/lib/shared/paths/PathUtils.ts +9 -10
- package/lib/shared/paths/PathValidator.test.ts +2 -15
- package/lib/shared/paths/PathValidator.ts +11 -9
- package/lib/shared/paths/index.ts +1 -2
- package/lib/shared/propResolver.test.ts +240 -244
- package/lib/shared/propResolver.ts +14 -25
- package/lib/shared/pxToRem.test.ts +7 -6
- package/lib/shared/pxToRem.ts +2 -5
- package/lib/shared/registry/BaseNodeTypeRegistry.test.ts +9 -5
- package/lib/shared/registry/ClientRegistry.ts +0 -1
- package/lib/shared/registry/ComponentRegistry.test.ts +43 -29
- package/lib/shared/registry/ComponentRegistry.ts +9 -11
- package/lib/shared/registry/NodeTypeDefinition.ts +15 -8
- package/lib/shared/registry/RegistryManager.ts +1 -2
- package/lib/shared/registry/SSRRegistry.ts +0 -1
- package/lib/shared/registry/createNodeType.ts +7 -9
- package/lib/shared/registry/defineNodeType.ts +2 -6
- package/lib/shared/registry/index.ts +0 -1
- package/lib/shared/registry/nodeTypes/ComponentInstanceNodeType.ts +14 -15
- package/lib/shared/registry/nodeTypes/EmbedNodeType.ts +18 -11
- package/lib/shared/registry/nodeTypes/HtmlNodeType.ts +47 -18
- package/lib/shared/registry/nodeTypes/LinkNodeType.ts +21 -19
- package/lib/shared/registry/nodeTypes/ListNodeType.ts +78 -74
- package/lib/shared/registry/nodeTypes/LocaleListNodeType.ts +27 -21
- package/lib/shared/registry/nodeTypes/SlotMarkerType.ts +6 -7
- package/lib/shared/registry/nodeTypes/index.ts +10 -2
- package/lib/shared/responsiveScaling.test.ts +15 -31
- package/lib/shared/responsiveScaling.ts +55 -37
- package/lib/shared/responsiveStyleUtils.ts +11 -13
- package/lib/shared/richtext/htmlToTiptap.test.ts +23 -14
- package/lib/shared/richtext/htmlToTiptap.ts +1 -3
- 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 +5 -10
- package/lib/shared/styleUtils.test.ts +87 -61
- package/lib/shared/styleUtils.ts +5 -6
- package/lib/shared/themeDefaults.test.ts +11 -11
- package/lib/shared/themeDefaults.ts +3 -4
- package/lib/shared/tree/PathBuilder.test.ts +62 -138
- package/lib/shared/tree/PathBuilder.ts +49 -39
- package/lib/shared/treePathUtils.test.ts +2 -10
- package/lib/shared/treePathUtils.ts +54 -59
- package/lib/shared/types/api.ts +1 -2
- package/lib/shared/types/cms.ts +25 -21
- package/lib/shared/types/comment.ts +49 -16
- package/lib/shared/types/components.ts +27 -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 +2 -2
- package/lib/shared/types/styles.ts +0 -1
- package/lib/shared/types/variables.test.ts +4 -13
- package/lib/shared/types/variables.ts +48 -27
- package/lib/shared/types.ts +1 -2
- package/lib/shared/utilityClassConfig.ts +648 -321
- package/lib/shared/utilityClassMapper.test.ts +203 -92
- package/lib/shared/utilityClassMapper.ts +188 -246
- package/lib/shared/utilityClassNames.ts +326 -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/propValidator.test.ts +18 -20
- package/lib/shared/validation/propValidator.ts +12 -17
- package/lib/shared/validation/schemas.test.ts +24 -33
- package/lib/shared/validation/schemas.ts +469 -344
- package/lib/shared/validation/validators.test.ts +1 -6
- package/lib/shared/validation/validators.ts +89 -68
- package/lib/shared/viewportUnits.integration.test.ts +14 -10
- package/lib/shared/viewportUnits.test.ts +11 -23
- package/lib/test-utils/dom-setup.ts +1 -1
- package/lib/test-utils/factories/ConsoleMockFactory.ts +3 -7
- package/lib/test-utils/factories/DomMockFactory.ts +7 -19
- 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 +5 -9
- package/lib/test-utils/factories/StoreMockFactory.ts +14 -25
- 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 +12 -18
- package/lib/test-utils/mocks.ts +4 -2
- package/package.json +1 -1
- package/scripts/build-meno-filter.ts +1 -4
- package/vite.config.ts +4 -4
- package/dist/chunks/chunk-2MHDV5BF.js.map +0 -7
- package/dist/chunks/chunk-AZQYF6KE.js.map +0 -7
- package/dist/chunks/chunk-GZHGVVW3.js.map +0 -7
- package/dist/chunks/chunk-H3GJ4H2U.js.map +0 -7
- package/dist/chunks/chunk-I7YIGZXT.js.map +0 -7
- package/dist/chunks/chunk-IGYR22T6.js.map +0 -7
- 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.map +0 -7
- 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 → configService-PRJZF7Y6.js.map} +0 -0
- /package/dist/chunks/{constants-STK2YBIW.js.map → constants-KIQEYMAM.js.map} +0 -0
- /package/dist/chunks/{fs-JGINUXGL.js.map → fs-ZI5JEU7V.js.map} +0 -0
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import { describe, test, expect } from 'bun:test';
|
|
2
|
-
import {
|
|
3
|
-
validatePropDefinition,
|
|
4
|
-
validateComponentNode,
|
|
5
|
-
validateOrThrow,
|
|
6
|
-
type ValidationResult,
|
|
7
|
-
} from './validators';
|
|
2
|
+
import { validatePropDefinition, validateComponentNode, validateOrThrow, type ValidationResult } from './validators';
|
|
8
3
|
import { NODE_TYPE } from '../constants';
|
|
9
4
|
|
|
10
5
|
describe('validators', () => {
|
|
@@ -5,7 +5,13 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import type { ZodError, ZodType } from 'zod';
|
|
8
|
-
import type {
|
|
8
|
+
import type {
|
|
9
|
+
PropDefinition,
|
|
10
|
+
ComponentDefinition,
|
|
11
|
+
StructuredComponentDefinition,
|
|
12
|
+
PageData,
|
|
13
|
+
PageDataWithComponent,
|
|
14
|
+
} from '../types/components';
|
|
9
15
|
import type { ComponentNode } from '../types/nodes';
|
|
10
16
|
import type { PageMetaData } from '../types/api';
|
|
11
17
|
import type { CMSSchema, CMSItem } from '../types/cms';
|
|
@@ -34,15 +40,13 @@ export interface ValidationError {
|
|
|
34
40
|
/**
|
|
35
41
|
* Validation result type - always includes error details on failure
|
|
36
42
|
*/
|
|
37
|
-
export type ValidationResult<T> =
|
|
38
|
-
| { valid: true; data: T }
|
|
39
|
-
| { valid: false; errors: ValidationError[] };
|
|
43
|
+
export type ValidationResult<T> = { valid: true; data: T } | { valid: false; errors: ValidationError[] };
|
|
40
44
|
|
|
41
45
|
/**
|
|
42
46
|
* Convert Zod errors to ValidationError format
|
|
43
47
|
*/
|
|
44
48
|
function zodToValidationErrors(zodError: ZodError): ValidationError[] {
|
|
45
|
-
return zodError.errors.map(err => ({
|
|
49
|
+
return zodError.errors.map((err) => ({
|
|
46
50
|
path: err.path.join('.') || 'root',
|
|
47
51
|
message: err.message,
|
|
48
52
|
code: 'INVALID_TYPE' as const,
|
|
@@ -55,11 +59,11 @@ function zodToValidationErrors(zodError: ZodError): ValidationError[] {
|
|
|
55
59
|
export function validateOrThrow<T>(
|
|
56
60
|
data: unknown,
|
|
57
61
|
validator: (data: unknown) => ValidationResult<T>,
|
|
58
|
-
errorMessage?: string
|
|
62
|
+
errorMessage?: string,
|
|
59
63
|
): T {
|
|
60
64
|
const result = validator(data);
|
|
61
65
|
if (!result.valid) {
|
|
62
|
-
const details = result.errors.map(e => `${e.path}: ${e.message}`).join('; ');
|
|
66
|
+
const details = result.errors.map((e) => `${e.path}: ${e.message}`).join('; ');
|
|
63
67
|
throw new Error(errorMessage ? `${errorMessage}: ${details}` : details);
|
|
64
68
|
}
|
|
65
69
|
return result.data;
|
|
@@ -79,11 +83,13 @@ export function validatePropDefinition(propDef: unknown): ValidationResult<PropD
|
|
|
79
83
|
} catch (error) {
|
|
80
84
|
return {
|
|
81
85
|
valid: false,
|
|
82
|
-
errors: [
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
86
|
+
errors: [
|
|
87
|
+
{
|
|
88
|
+
path: 'root',
|
|
89
|
+
message: error instanceof Error ? error.message : 'Unknown validation error',
|
|
90
|
+
code: 'UNKNOWN',
|
|
91
|
+
},
|
|
92
|
+
],
|
|
87
93
|
};
|
|
88
94
|
}
|
|
89
95
|
}
|
|
@@ -102,11 +108,13 @@ export function validateComponentNode(node: unknown): ValidationResult<Component
|
|
|
102
108
|
} catch (error) {
|
|
103
109
|
return {
|
|
104
110
|
valid: false,
|
|
105
|
-
errors: [
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
111
|
+
errors: [
|
|
112
|
+
{
|
|
113
|
+
path: 'root',
|
|
114
|
+
message: error instanceof Error ? error.message : 'Unknown validation error',
|
|
115
|
+
code: 'UNKNOWN',
|
|
116
|
+
},
|
|
117
|
+
],
|
|
110
118
|
};
|
|
111
119
|
}
|
|
112
120
|
}
|
|
@@ -125,11 +133,13 @@ export function validateStructuredComponentDefinition(def: unknown): ValidationR
|
|
|
125
133
|
} catch (error) {
|
|
126
134
|
return {
|
|
127
135
|
valid: false,
|
|
128
|
-
errors: [
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
136
|
+
errors: [
|
|
137
|
+
{
|
|
138
|
+
path: 'root',
|
|
139
|
+
message: error instanceof Error ? error.message : 'Unknown validation error',
|
|
140
|
+
code: 'UNKNOWN',
|
|
141
|
+
},
|
|
142
|
+
],
|
|
133
143
|
};
|
|
134
144
|
}
|
|
135
145
|
}
|
|
@@ -148,11 +158,13 @@ export function validateComponentDefinition(def: unknown): ValidationResult<Comp
|
|
|
148
158
|
} catch (error) {
|
|
149
159
|
return {
|
|
150
160
|
valid: false,
|
|
151
|
-
errors: [
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
161
|
+
errors: [
|
|
162
|
+
{
|
|
163
|
+
path: 'root',
|
|
164
|
+
message: error instanceof Error ? error.message : 'Unknown validation error',
|
|
165
|
+
code: 'UNKNOWN',
|
|
166
|
+
},
|
|
167
|
+
],
|
|
156
168
|
};
|
|
157
169
|
}
|
|
158
170
|
}
|
|
@@ -171,11 +183,13 @@ export function validatePageData(data: unknown): ValidationResult<PageData> {
|
|
|
171
183
|
} catch (error) {
|
|
172
184
|
return {
|
|
173
185
|
valid: false,
|
|
174
|
-
errors: [
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
186
|
+
errors: [
|
|
187
|
+
{
|
|
188
|
+
path: 'root',
|
|
189
|
+
message: error instanceof Error ? error.message : 'Unknown validation error',
|
|
190
|
+
code: 'UNKNOWN',
|
|
191
|
+
},
|
|
192
|
+
],
|
|
179
193
|
};
|
|
180
194
|
}
|
|
181
195
|
}
|
|
@@ -194,11 +208,13 @@ export function validatePageDataWithComponent(data: unknown): ValidationResult<P
|
|
|
194
208
|
} catch (error) {
|
|
195
209
|
return {
|
|
196
210
|
valid: false,
|
|
197
|
-
errors: [
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
211
|
+
errors: [
|
|
212
|
+
{
|
|
213
|
+
path: 'root',
|
|
214
|
+
message: error instanceof Error ? error.message : 'Unknown validation error',
|
|
215
|
+
code: 'UNKNOWN',
|
|
216
|
+
},
|
|
217
|
+
],
|
|
202
218
|
};
|
|
203
219
|
}
|
|
204
220
|
}
|
|
@@ -217,11 +233,13 @@ export function validatePageMetaData(data: unknown): ValidationResult<PageMetaDa
|
|
|
217
233
|
} catch (error) {
|
|
218
234
|
return {
|
|
219
235
|
valid: false,
|
|
220
|
-
errors: [
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
236
|
+
errors: [
|
|
237
|
+
{
|
|
238
|
+
path: 'root',
|
|
239
|
+
message: error instanceof Error ? error.message : 'Unknown validation error',
|
|
240
|
+
code: 'UNKNOWN',
|
|
241
|
+
},
|
|
242
|
+
],
|
|
225
243
|
};
|
|
226
244
|
}
|
|
227
245
|
}
|
|
@@ -230,10 +248,7 @@ export function validatePageMetaData(data: unknown): ValidationResult<PageMetaDa
|
|
|
230
248
|
* Validate with detailed error information using a custom schema
|
|
231
249
|
* @returns ValidationResult with error details on failure
|
|
232
250
|
*/
|
|
233
|
-
export function validateWithDetails<T>(
|
|
234
|
-
data: unknown,
|
|
235
|
-
schema: ZodType<T>
|
|
236
|
-
): ValidationResult<T> {
|
|
251
|
+
export function validateWithDetails<T>(data: unknown, schema: ZodType<T>): ValidationResult<T> {
|
|
237
252
|
try {
|
|
238
253
|
const result = schema.safeParse(data);
|
|
239
254
|
if (result.success) {
|
|
@@ -243,11 +258,13 @@ export function validateWithDetails<T>(
|
|
|
243
258
|
} catch (error) {
|
|
244
259
|
return {
|
|
245
260
|
valid: false,
|
|
246
|
-
errors: [
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
261
|
+
errors: [
|
|
262
|
+
{
|
|
263
|
+
path: 'root',
|
|
264
|
+
message: error instanceof Error ? error.message : 'Unknown validation error',
|
|
265
|
+
code: 'UNKNOWN',
|
|
266
|
+
},
|
|
267
|
+
],
|
|
251
268
|
};
|
|
252
269
|
}
|
|
253
270
|
}
|
|
@@ -270,11 +287,13 @@ export function validateCMSSchema(data: unknown): ValidationResult<CMSSchema> {
|
|
|
270
287
|
} catch (error) {
|
|
271
288
|
return {
|
|
272
289
|
valid: false,
|
|
273
|
-
errors: [
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
290
|
+
errors: [
|
|
291
|
+
{
|
|
292
|
+
path: 'root',
|
|
293
|
+
message: error instanceof Error ? error.message : 'Unknown validation error',
|
|
294
|
+
code: 'UNKNOWN',
|
|
295
|
+
},
|
|
296
|
+
],
|
|
278
297
|
};
|
|
279
298
|
}
|
|
280
299
|
}
|
|
@@ -293,11 +312,13 @@ export function validateCMSItem(data: unknown): ValidationResult<CMSItem> {
|
|
|
293
312
|
} catch (error) {
|
|
294
313
|
return {
|
|
295
314
|
valid: false,
|
|
296
|
-
errors: [
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
315
|
+
errors: [
|
|
316
|
+
{
|
|
317
|
+
path: 'root',
|
|
318
|
+
message: error instanceof Error ? error.message : 'Unknown validation error',
|
|
319
|
+
code: 'UNKNOWN',
|
|
320
|
+
},
|
|
321
|
+
],
|
|
301
322
|
};
|
|
302
323
|
}
|
|
303
324
|
}
|
|
@@ -317,13 +338,13 @@ export function validateCMSDraftItem(data: unknown): ValidationResult<CMSItem> {
|
|
|
317
338
|
} catch (error) {
|
|
318
339
|
return {
|
|
319
340
|
valid: false,
|
|
320
|
-
errors: [
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
341
|
+
errors: [
|
|
342
|
+
{
|
|
343
|
+
path: 'root',
|
|
344
|
+
message: error instanceof Error ? error.message : 'Unknown validation error',
|
|
345
|
+
code: 'UNKNOWN',
|
|
346
|
+
},
|
|
347
|
+
],
|
|
325
348
|
};
|
|
326
349
|
}
|
|
327
350
|
}
|
|
328
|
-
|
|
329
|
-
|
|
@@ -9,11 +9,13 @@ describe('viewport-unit rewrite — user-bug repro path', () => {
|
|
|
9
9
|
// { style: { base: { backgroundColor: "var(--bg)", minHeight: "100vh" } } }
|
|
10
10
|
// Studio collects this into the InteractiveStyles map keyed by the element
|
|
11
11
|
// class, and generateInteractiveCSS emits the CSS that ships to the iframe.
|
|
12
|
-
const interactiveStyles: InteractiveStyles = [
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
const interactiveStyles: InteractiveStyles = [
|
|
13
|
+
{
|
|
14
|
+
prefix: '',
|
|
15
|
+
postfix: '',
|
|
16
|
+
style: { base: { minHeight: '100vh', backgroundColor: 'var(--bg)' } },
|
|
17
|
+
},
|
|
18
|
+
];
|
|
17
19
|
const map = new Map<string, InteractiveStyles>([['c_layout_root', interactiveStyles]]);
|
|
18
20
|
|
|
19
21
|
const css = generateAllInteractiveCSS(map);
|
|
@@ -28,11 +30,13 @@ describe('viewport-unit rewrite — user-bug repro path', () => {
|
|
|
28
30
|
});
|
|
29
31
|
|
|
30
32
|
it('leaves non-vh values in the same rule untouched', () => {
|
|
31
|
-
const interactiveStyles: InteractiveStyles = [
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
const interactiveStyles: InteractiveStyles = [
|
|
34
|
+
{
|
|
35
|
+
prefix: '',
|
|
36
|
+
postfix: '',
|
|
37
|
+
style: { base: { minHeight: '100vh', padding: '24px', color: 'red' } },
|
|
38
|
+
},
|
|
39
|
+
];
|
|
36
40
|
const map = new Map<string, InteractiveStyles>([['c_a', interactiveStyles]]);
|
|
37
41
|
const rewritten = rewriteViewportUnits(generateAllInteractiveCSS(map));
|
|
38
42
|
|
|
@@ -3,47 +3,37 @@ import { rewriteViewportUnits } from './viewportUnits';
|
|
|
3
3
|
|
|
4
4
|
describe('rewriteViewportUnits', () => {
|
|
5
5
|
it('rewrites basic vh values in declarations', () => {
|
|
6
|
-
expect(rewriteViewportUnits('min-height: 100vh;')).toBe(
|
|
7
|
-
'min-height: calc(var(--design-vh, 1vh) * 100);'
|
|
8
|
-
);
|
|
6
|
+
expect(rewriteViewportUnits('min-height: 100vh;')).toBe('min-height: calc(var(--design-vh, 1vh) * 100);');
|
|
9
7
|
});
|
|
10
8
|
|
|
11
9
|
it('rewrites vw values', () => {
|
|
12
|
-
expect(rewriteViewportUnits('width: 50vw;')).toBe(
|
|
13
|
-
'width: calc(var(--design-vw, 1vw) * 50);'
|
|
14
|
-
);
|
|
10
|
+
expect(rewriteViewportUnits('width: 50vw;')).toBe('width: calc(var(--design-vw, 1vw) * 50);');
|
|
15
11
|
});
|
|
16
12
|
|
|
17
13
|
it('handles negative values', () => {
|
|
18
|
-
expect(rewriteViewportUnits('top: -100vh;')).toBe(
|
|
19
|
-
'top: calc(var(--design-vh, 1vh) * -100);'
|
|
20
|
-
);
|
|
14
|
+
expect(rewriteViewportUnits('top: -100vh;')).toBe('top: calc(var(--design-vh, 1vh) * -100);');
|
|
21
15
|
});
|
|
22
16
|
|
|
23
17
|
it('handles decimal values', () => {
|
|
24
|
-
expect(rewriteViewportUnits('height: 33.5vh;')).toBe(
|
|
25
|
-
|
|
26
|
-
);
|
|
27
|
-
expect(rewriteViewportUnits('height: .5vh;')).toBe(
|
|
28
|
-
'height: calc(var(--design-vh, 1vh) * .5);'
|
|
29
|
-
);
|
|
18
|
+
expect(rewriteViewportUnits('height: 33.5vh;')).toBe('height: calc(var(--design-vh, 1vh) * 33.5);');
|
|
19
|
+
expect(rewriteViewportUnits('height: .5vh;')).toBe('height: calc(var(--design-vh, 1vh) * .5);');
|
|
30
20
|
});
|
|
31
21
|
|
|
32
22
|
it('handles small/large/dynamic viewport units', () => {
|
|
33
23
|
expect(rewriteViewportUnits('h: 100svh; w: 100lvw; x: 100dvh;')).toBe(
|
|
34
|
-
'h: calc(var(--design-svh, 1svh) * 100); w: calc(var(--design-lvw, 1lvw) * 100); x: calc(var(--design-dvh, 1dvh) * 100);'
|
|
24
|
+
'h: calc(var(--design-svh, 1svh) * 100); w: calc(var(--design-lvw, 1lvw) * 100); x: calc(var(--design-dvh, 1dvh) * 100);',
|
|
35
25
|
);
|
|
36
26
|
});
|
|
37
27
|
|
|
38
28
|
it('preserves vh inside calc()', () => {
|
|
39
29
|
expect(rewriteViewportUnits('height: calc(100vh - 20px);')).toBe(
|
|
40
|
-
'height: calc(calc(var(--design-vh, 1vh) * 100) - 20px);'
|
|
30
|
+
'height: calc(calc(var(--design-vh, 1vh) * 100) - 20px);',
|
|
41
31
|
);
|
|
42
32
|
});
|
|
43
33
|
|
|
44
34
|
it('rewrites vh inside transform functions', () => {
|
|
45
35
|
expect(rewriteViewportUnits('transform: translateY(-100vh);')).toBe(
|
|
46
|
-
'transform: translateY(calc(var(--design-vh, 1vh) * -100));'
|
|
36
|
+
'transform: translateY(calc(var(--design-vh, 1vh) * -100));',
|
|
47
37
|
);
|
|
48
38
|
});
|
|
49
39
|
|
|
@@ -62,13 +52,13 @@ describe('rewriteViewportUnits', () => {
|
|
|
62
52
|
|
|
63
53
|
it('does NOT rewrite px / em / rem / % values', () => {
|
|
64
54
|
expect(rewriteViewportUnits('padding: 10px; margin: 1em; height: 50%;')).toBe(
|
|
65
|
-
'padding: 10px; margin: 1em; height: 50%;'
|
|
55
|
+
'padding: 10px; margin: 1em; height: 50%;',
|
|
66
56
|
);
|
|
67
57
|
});
|
|
68
58
|
|
|
69
59
|
it('handles multiple values in one rule', () => {
|
|
70
60
|
expect(rewriteViewportUnits('inset: 10vh 5vw 20vh 5vw;')).toBe(
|
|
71
|
-
'inset: calc(var(--design-vh, 1vh) * 10) calc(var(--design-vw, 1vw) * 5) calc(var(--design-vh, 1vh) * 20) calc(var(--design-vw, 1vw) * 5);'
|
|
61
|
+
'inset: calc(var(--design-vh, 1vh) * 10) calc(var(--design-vw, 1vw) * 5) calc(var(--design-vh, 1vh) * 20) calc(var(--design-vw, 1vw) * 5);',
|
|
72
62
|
);
|
|
73
63
|
});
|
|
74
64
|
|
|
@@ -96,8 +86,6 @@ describe('rewriteViewportUnits', () => {
|
|
|
96
86
|
});
|
|
97
87
|
|
|
98
88
|
it('handles 0vh (zero with unit) without producing invalid output', () => {
|
|
99
|
-
expect(rewriteViewportUnits('top: 0vh;')).toBe(
|
|
100
|
-
'top: calc(var(--design-vh, 1vh) * 0);'
|
|
101
|
-
);
|
|
89
|
+
expect(rewriteViewportUnits('top: 0vh;')).toBe('top: calc(var(--design-vh, 1vh) * 0);');
|
|
102
90
|
});
|
|
103
91
|
});
|
|
@@ -38,6 +38,7 @@ globalAny.DocumentFragment = window.DocumentFragment;
|
|
|
38
38
|
globalAny.KeyboardEvent = window.KeyboardEvent;
|
|
39
39
|
globalAny.MouseEvent = window.MouseEvent;
|
|
40
40
|
globalAny.CustomEvent = window.CustomEvent;
|
|
41
|
+
globalAny.MessageEvent = window.MessageEvent;
|
|
41
42
|
globalAny.Event = window.Event;
|
|
42
43
|
globalAny.getComputedStyle = window.getComputedStyle.bind(window);
|
|
43
44
|
globalAny.requestAnimationFrame = window.requestAnimationFrame.bind(window);
|
|
@@ -46,7 +47,6 @@ globalAny.MutationObserver = window.MutationObserver;
|
|
|
46
47
|
globalAny.ResizeObserver = window.ResizeObserver;
|
|
47
48
|
globalAny.IntersectionObserver = window.IntersectionObserver;
|
|
48
49
|
|
|
49
|
-
|
|
50
50
|
// Export for manual usage if needed
|
|
51
51
|
export function setupDOM() {
|
|
52
52
|
// Already set up on import
|
|
@@ -77,7 +77,7 @@ export function createTypedConsoleSpy(): TypedConsoleSpy {
|
|
|
77
77
|
return arg.test(call[i] as string);
|
|
78
78
|
}
|
|
79
79
|
return call[i] === arg;
|
|
80
|
-
})
|
|
80
|
+
}),
|
|
81
81
|
);
|
|
82
82
|
},
|
|
83
83
|
clearCalls: () => {
|
|
@@ -102,9 +102,7 @@ export function suppressConsole(): () => void {
|
|
|
102
102
|
/**
|
|
103
103
|
* Capture console output for specific methods only
|
|
104
104
|
*/
|
|
105
|
-
export function captureConsole(
|
|
106
|
-
methods: ConsoleMethods[]
|
|
107
|
-
): TypedConsoleSpy & { only: ConsoleMethods[] } {
|
|
105
|
+
export function captureConsole(methods: ConsoleMethods[]): TypedConsoleSpy & { only: ConsoleMethods[] } {
|
|
108
106
|
const spy = createTypedConsoleSpy();
|
|
109
107
|
|
|
110
108
|
// Restore methods we don't want to capture
|
|
@@ -187,9 +185,7 @@ export function createPassthroughConsoleSpy(): TypedConsoleSpy {
|
|
|
187
185
|
},
|
|
188
186
|
wasCalledWith: (method: ConsoleMethods, ...args: unknown[]) => {
|
|
189
187
|
const calls = mocks[method] as unknown as { mock: { calls: unknown[][] } };
|
|
190
|
-
return (calls.mock?.calls || []).some((call) =>
|
|
191
|
-
args.every((arg, i) => call[i] === arg)
|
|
192
|
-
);
|
|
188
|
+
return (calls.mock?.calls || []).some((call) => args.every((arg, i) => call[i] === arg));
|
|
193
189
|
},
|
|
194
190
|
clearCalls: () => {
|
|
195
191
|
for (const method of Object.values(mocks)) {
|
|
@@ -59,9 +59,7 @@ export function createMockDOMRect(overrides?: Partial<MockDOMRect>): DOMRect {
|
|
|
59
59
|
|
|
60
60
|
// ========== CSSStyleDeclaration ==========
|
|
61
61
|
|
|
62
|
-
export function createMockCSSStyleDeclaration(
|
|
63
|
-
initial?: Partial<CSSStyleDeclaration>
|
|
64
|
-
): CSSStyleDeclaration {
|
|
62
|
+
export function createMockCSSStyleDeclaration(initial?: Partial<CSSStyleDeclaration>): CSSStyleDeclaration {
|
|
65
63
|
const styles: Record<string, string> = {};
|
|
66
64
|
|
|
67
65
|
// Copy initial values
|
|
@@ -139,12 +137,8 @@ export interface TypedMockHTMLElement {
|
|
|
139
137
|
_eventListeners: Map<string, EventListener[]>;
|
|
140
138
|
}
|
|
141
139
|
|
|
142
|
-
export function createTypedMockHTMLElement(
|
|
143
|
-
|
|
144
|
-
): TypedMockHTMLElement {
|
|
145
|
-
const attributes = new Map<string, string>(
|
|
146
|
-
Object.entries(options.attributes || {})
|
|
147
|
-
);
|
|
140
|
+
export function createTypedMockHTMLElement(options: MockHTMLElementOptions = {}): TypedMockHTMLElement {
|
|
141
|
+
const attributes = new Map<string, string>(Object.entries(options.attributes || {}));
|
|
148
142
|
const eventListeners = new Map<string, EventListener[]>();
|
|
149
143
|
const childNodes: Node[] = [];
|
|
150
144
|
|
|
@@ -248,9 +242,7 @@ export interface TypedMockLocation {
|
|
|
248
242
|
toString: () => string;
|
|
249
243
|
}
|
|
250
244
|
|
|
251
|
-
export function createTypedMockLocation(
|
|
252
|
-
overrides?: Partial<Location>
|
|
253
|
-
): TypedMockLocation {
|
|
245
|
+
export function createTypedMockLocation(overrides?: Partial<Location>): TypedMockLocation {
|
|
254
246
|
const base = {
|
|
255
247
|
href: 'http://localhost/',
|
|
256
248
|
pathname: '/',
|
|
@@ -333,9 +325,7 @@ export interface TypedMockWindow {
|
|
|
333
325
|
_eventListeners: Map<string, EventListener[]>;
|
|
334
326
|
}
|
|
335
327
|
|
|
336
|
-
export function createTypedMockWindow(
|
|
337
|
-
options: MockWindowOptions = {}
|
|
338
|
-
): TypedMockWindow {
|
|
328
|
+
export function createTypedMockWindow(options: MockWindowOptions = {}): TypedMockWindow {
|
|
339
329
|
const eventListeners = new Map<string, EventListener[]>();
|
|
340
330
|
const location = createTypedMockLocation(options.location);
|
|
341
331
|
const history = createTypedMockHistory();
|
|
@@ -400,9 +390,7 @@ export interface TypedMockDocument {
|
|
|
400
390
|
_eventListeners: Map<string, EventListener[]>;
|
|
401
391
|
}
|
|
402
392
|
|
|
403
|
-
export function createTypedMockDocument(
|
|
404
|
-
options: MockDocumentOptions = {}
|
|
405
|
-
): TypedMockDocument {
|
|
393
|
+
export function createTypedMockDocument(options: MockDocumentOptions = {}): TypedMockDocument {
|
|
406
394
|
const registeredElements = new Map<string, TypedMockHTMLElement>();
|
|
407
395
|
const createdElements: TypedMockHTMLElement[] = [];
|
|
408
396
|
const eventListeners = new Map<string, EventListener[]>();
|
|
@@ -465,7 +453,7 @@ export interface DomMockInstallation {
|
|
|
465
453
|
* Install mock DOM globally and return cleanup function
|
|
466
454
|
*/
|
|
467
455
|
export function installMockDom(
|
|
468
|
-
options: { window?: MockWindowOptions; document?: MockDocumentOptions } = {}
|
|
456
|
+
options: { window?: MockWindowOptions; document?: MockDocumentOptions } = {},
|
|
469
457
|
): DomMockInstallation {
|
|
470
458
|
const originalWindow = (globalThis as any).window;
|
|
471
459
|
const originalDocument = (globalThis as any).document;
|
|
@@ -51,7 +51,7 @@ export interface TypedMockMouseEvent extends MouseEvent {
|
|
|
51
51
|
|
|
52
52
|
export function createTypedKeyboardEvent(
|
|
53
53
|
type: 'keydown' | 'keyup' | 'keypress',
|
|
54
|
-
options: MockKeyboardEventOptions
|
|
54
|
+
options: MockKeyboardEventOptions,
|
|
55
55
|
): TypedMockKeyboardEvent {
|
|
56
56
|
const event = new KeyboardEvent(type, {
|
|
57
57
|
key: options.key,
|
|
@@ -118,8 +118,7 @@ export const KeyboardShortcuts = {
|
|
|
118
118
|
delete: () => createTypedKeyboardEvent('keydown', { key: 'Backspace' }),
|
|
119
119
|
enter: () => createTypedKeyboardEvent('keydown', { key: 'Enter' }),
|
|
120
120
|
escape: () => createTypedKeyboardEvent('keydown', { key: 'Escape' }),
|
|
121
|
-
tab: (shift = false) =>
|
|
122
|
-
createTypedKeyboardEvent('keydown', { key: 'Tab', shiftKey: shift }),
|
|
121
|
+
tab: (shift = false) => createTypedKeyboardEvent('keydown', { key: 'Tab', shiftKey: shift }),
|
|
123
122
|
arrowUp: () => createTypedKeyboardEvent('keydown', { key: 'ArrowUp' }),
|
|
124
123
|
arrowDown: () => createTypedKeyboardEvent('keydown', { key: 'ArrowDown' }),
|
|
125
124
|
arrowLeft: () => createTypedKeyboardEvent('keydown', { key: 'ArrowLeft' }),
|
|
@@ -140,7 +139,7 @@ export function createTypedMouseEvent(
|
|
|
140
139
|
| 'mouseover'
|
|
141
140
|
| 'mouseout'
|
|
142
141
|
| 'contextmenu',
|
|
143
|
-
options: MockMouseEventOptions = {}
|
|
142
|
+
options: MockMouseEventOptions = {},
|
|
144
143
|
): TypedMockMouseEvent {
|
|
145
144
|
const event = new MouseEvent(type, {
|
|
146
145
|
button: options.button ?? 0,
|
|
@@ -176,7 +175,7 @@ export function createTypedMouseEvent(
|
|
|
176
175
|
export function createTypedCustomEvent<T = unknown>(
|
|
177
176
|
type: string,
|
|
178
177
|
detail?: T,
|
|
179
|
-
options: { bubbles?: boolean; cancelable?: boolean } = {}
|
|
178
|
+
options: { bubbles?: boolean; cancelable?: boolean } = {},
|
|
180
179
|
): CustomEvent<T> {
|
|
181
180
|
return new CustomEvent(type, {
|
|
182
181
|
detail,
|
|
@@ -199,9 +198,7 @@ export interface MockMessageEventOptions<T = unknown> {
|
|
|
199
198
|
source?: MessageEventSource | null;
|
|
200
199
|
}
|
|
201
200
|
|
|
202
|
-
export function createTypedMessageEvent<T = unknown>(
|
|
203
|
-
options: MockMessageEventOptions<T>
|
|
204
|
-
): MessageEvent<T> {
|
|
201
|
+
export function createTypedMessageEvent<T = unknown>(options: MockMessageEventOptions<T>): MessageEvent<T> {
|
|
205
202
|
return new MessageEvent('message', {
|
|
206
203
|
data: options.data,
|
|
207
204
|
origin: options.origin ?? 'http://localhost',
|
|
@@ -213,7 +210,7 @@ export function createTypedMessageEvent<T = unknown>(
|
|
|
213
210
|
|
|
214
211
|
export function createTypedFocusEvent(
|
|
215
212
|
type: 'focus' | 'blur' | 'focusin' | 'focusout',
|
|
216
|
-
options: { relatedTarget?: EventTarget | null } = {}
|
|
213
|
+
options: { relatedTarget?: EventTarget | null } = {},
|
|
217
214
|
): FocusEvent {
|
|
218
215
|
return new FocusEvent(type, {
|
|
219
216
|
bubbles: type === 'focusin' || type === 'focusout',
|
|
@@ -230,10 +227,7 @@ export interface MockInputEventOptions {
|
|
|
230
227
|
isComposing?: boolean;
|
|
231
228
|
}
|
|
232
229
|
|
|
233
|
-
export function createTypedInputEvent(
|
|
234
|
-
type: 'input' | 'beforeinput',
|
|
235
|
-
options: MockInputEventOptions = {}
|
|
236
|
-
): InputEvent {
|
|
230
|
+
export function createTypedInputEvent(type: 'input' | 'beforeinput', options: MockInputEventOptions = {}): InputEvent {
|
|
237
231
|
return new InputEvent(type, {
|
|
238
232
|
data: options.data ?? null,
|
|
239
233
|
inputType: options.inputType ?? 'insertText',
|