tungsten 0.6.2 → 0.7.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/dist/.build-complete +1 -1
- package/dist/Brands.d.ts +16 -0
- package/dist/Brands.d.ts.map +1 -0
- package/dist/Brands.js +22 -0
- package/dist/Components.d.ts +4 -1
- package/dist/Components.d.ts.map +1 -1
- package/dist/Components.js +24 -6
- package/dist/ContentNode.d.ts +3 -2
- package/dist/ContentNode.d.ts.map +1 -1
- package/dist/ContentNode.js +11 -0
- package/dist/Framework.d.ts.map +1 -1
- package/dist/Framework.js +23 -4
- package/dist/FrameworkConfig.d.ts +7 -1
- package/dist/FrameworkConfig.d.ts.map +1 -1
- package/dist/FunctionComponent.d.ts +1 -0
- package/dist/FunctionComponent.d.ts.map +1 -1
- package/dist/FunctionComponentStandIn.d.ts.map +1 -1
- package/dist/Instance/Instance.d.ts +29 -12
- package/dist/Instance/Instance.d.ts.map +1 -1
- package/dist/Instance/Instance.js +59 -21
- package/dist/Instance/InstanceConfig.d.ts +2 -1
- package/dist/Instance/InstanceConfig.d.ts.map +1 -1
- package/dist/RenderedContentNode.d.ts.map +1 -1
- package/dist/RenderingNode.d.ts.map +1 -1
- package/dist/Servers/DevServer.d.ts +4 -2
- package/dist/Servers/DevServer.d.ts.map +1 -1
- package/dist/Servers/DevServer.js +62 -20
- package/dist/Servers/ProdServer.d.ts +4 -2
- package/dist/Servers/ProdServer.d.ts.map +1 -1
- package/dist/Servers/ProdServer.js +77 -18
- package/dist/Servers/StaticSiteServer.d.ts +1 -1
- package/dist/Servers/StaticSiteServer.d.ts.map +1 -1
- package/dist/Servers/TungstenServer.d.ts +2 -1
- package/dist/Servers/TungstenServer.d.ts.map +1 -1
- package/dist/Servers/TungstenServer.js +7 -0
- package/dist/Servers/cacheVersioned.d.ts +3 -0
- package/dist/Servers/cacheVersioned.d.ts.map +1 -0
- package/dist/Servers/cacheVersioned.js +23 -0
- package/dist/Servers/devErrorPageAutoRetry.d.ts.map +1 -1
- package/dist/Servers/devErrorPageAutoRetry.js +1 -0
- package/dist/Servers/initStores.d.ts +4 -4
- package/dist/Servers/initStores.d.ts.map +1 -1
- package/dist/Servers/initStores.js +2 -2
- package/dist/Servers/loadEnvsDev.d.ts.map +1 -1
- package/dist/Servers/loadEnvsDev.js +7 -6
- package/dist/Servers/resetRegistrations.d.ts +2 -0
- package/dist/Servers/resetRegistrations.d.ts.map +1 -0
- package/dist/Servers/resetRegistrations.js +13 -0
- package/dist/Servers/routing.d.ts +3 -2
- package/dist/Servers/routing.d.ts.map +1 -1
- package/dist/Servers/routing.js +3 -2
- package/dist/Store/InternalStoreSchema.d.ts +1 -1
- package/dist/Store/Store.js +2 -1
- package/dist/Store/StoreSchemaClass.d.ts +6 -3
- package/dist/Store/StoreSchemaClass.d.ts.map +1 -1
- package/dist/Store/StoreSchemaClass.js +8 -1
- package/dist/Store/TypeSafeStore.js +2 -1
- package/dist/Store/createStores.d.ts +3 -3
- package/dist/Store/createStores.d.ts.map +1 -1
- package/dist/Store/createStores.js +7 -2
- package/dist/Store/getInternalStore.d.ts.map +1 -1
- package/dist/Store/registerStore.d.ts.map +1 -1
- package/dist/Store/registerStore.js +2 -2
- package/dist/Store/storeCreators.d.ts +2 -2
- package/dist/Store/storeCreators.d.ts.map +1 -1
- package/dist/TungstenApp.d.ts +3 -3
- package/dist/TungstenApp.d.ts.map +1 -1
- package/dist/_client/cjsHelpers.d.ts.map +1 -1
- package/dist/_client/cjsHelpers.js +5 -3
- package/dist/_client/client.d.ts +2 -0
- package/dist/_client/client.d.ts.map +1 -1
- package/dist/_client/client.js +10 -3
- package/dist/api/getApiRoutes.d.ts.map +1 -1
- package/dist/api/getExport.d.ts +1 -1
- package/dist/api/getExport.d.ts.map +1 -1
- package/dist/api/getExport.js +2 -1
- package/dist/api/getExportDev.d.ts +1 -1
- package/dist/api/getExportDev.d.ts.map +1 -1
- package/dist/appBuilder.d.ts +69 -0
- package/dist/appBuilder.d.ts.map +1 -0
- package/dist/appBuilder.js +98 -0
- package/dist/appBuilder.types.test.d.ts +110 -0
- package/dist/appBuilder.types.test.d.ts.map +1 -0
- package/dist/appBuilder.types.test.js +240 -0
- package/dist/babelPlugins/BabelTransformBindDirect.js +7 -7
- package/dist/babelPlugins/BabelTransformBindVar.js +7 -7
- package/dist/babelPlugins/BabelTransformComponentState.d.ts.map +1 -1
- package/dist/babelPlugins/BabelTransformComponentStyles.d.ts.map +1 -1
- package/dist/babelPlugins/BabelTransformComponentStyles.js +5 -5
- package/dist/babelPlugins/BabelTransformCssImports.d.ts.map +1 -1
- package/dist/babelPlugins/BabelTransformCssImports.js +2 -2
- package/dist/babelPlugins/BabelTransformDeproxyState.d.ts.map +1 -1
- package/dist/babelPlugins/BabelTransformPackageImports.d.ts.map +1 -1
- package/dist/babelPlugins/BabelTransformPackageImports.js +11 -6
- package/dist/babelPlugins/BabelTransformRemoveDevBlocks.d.ts.map +1 -1
- package/dist/babelPlugins/BabelTransformRemoveServerBlocks.d.ts.map +1 -1
- package/dist/babelPlugins/BabelTypes.d.ts.map +1 -1
- package/dist/babelPlugins/transformPackageImports/BabelTransformDependencyImportsCjs.d.ts.map +1 -1
- package/dist/babelPlugins/transformPackageImports/BabelTransformDependencyImportsCjs.js +1 -1
- package/dist/babelPlugins/transformPackageImports/BabelTransformDependencyImportsEsm.d.ts.map +1 -1
- package/dist/babelPlugins/transformPackageImports/BabelTransformDependencyImportsEsm.js +2 -2
- package/dist/bin/commands/compile.d.ts.map +1 -1
- package/dist/bin/commands/compile.js +2 -1
- package/dist/build/CompilationInfo.d.ts +3 -0
- package/dist/build/CompilationInfo.d.ts.map +1 -1
- package/dist/build/assetVersions.d.ts +9 -0
- package/dist/build/assetVersions.d.ts.map +1 -0
- package/dist/build/assetVersions.js +39 -0
- package/dist/build/babel.user.common.config.d.ts.map +1 -1
- package/dist/build/bundle.d.ts.map +1 -1
- package/dist/build/bundle.js +2 -1
- package/dist/build/bundleBabelOptions.d.ts.map +1 -1
- package/dist/build/clientRoutesFile.d.ts +2 -0
- package/dist/build/clientRoutesFile.d.ts.map +1 -0
- package/dist/build/clientRoutesFile.js +13 -0
- package/dist/build/compileJavascript.d.ts.map +1 -1
- package/dist/build/compileJavascript.js +4 -3
- package/dist/build/compileStyles.d.ts +2 -1
- package/dist/build/compileStyles.d.ts.map +1 -1
- package/dist/build/compileStyles.js +38 -83
- package/dist/build/compileUserApp.d.ts.map +1 -1
- package/dist/build/componentStylesCache.d.ts.map +1 -1
- package/dist/build/componentStylesCache.js +3 -2
- package/dist/build/copyAssets.d.ts.map +1 -1
- package/dist/build/copyAssets.js +2 -1
- package/dist/build/copyPackageModulesToPackagesFolder.d.ts.map +1 -1
- package/dist/build/copyPackageModulesToPackagesFolder.js +1 -1
- package/dist/build/copyPublicFiles.d.ts.map +1 -1
- package/dist/build/copyPublicFiles.js +2 -1
- package/dist/build/createClientFiles.d.ts.map +1 -1
- package/dist/build/createClientFiles.js +9 -5
- package/dist/build/createInstanceConfigFile.d.ts +1 -1
- package/dist/build/createInstanceConfigFile.d.ts.map +1 -1
- package/dist/build/createInstanceConfigFile.js +9 -3
- package/dist/build/frameworkDestLocation.d.ts.map +1 -1
- package/dist/build/frameworkDestLocation.js +5 -6
- package/dist/build/frameworkStylesheets.d.ts.map +1 -1
- package/dist/build/frameworkStylesheets.js +1 -1
- package/dist/build/makeBabelRawConfig.d.ts.map +1 -1
- package/dist/build/makeBabelUserDevConfig.d.ts +2 -2
- package/dist/build/makeBabelUserDevConfig.d.ts.map +1 -1
- package/dist/build/makeBabelUserProdConfig.d.ts.map +1 -1
- package/dist/build/rollup.user.prod.config.d.ts.map +1 -1
- package/dist/build/rollup.user.prod.config.js +5 -3
- package/dist/build/rollupProdConstants.d.ts +5 -0
- package/dist/build/rollupProdConstants.d.ts.map +1 -0
- package/dist/build/rollupProdConstants.js +21 -0
- package/dist/cacheControl.d.ts +13 -0
- package/dist/cacheControl.d.ts.map +1 -0
- package/dist/cacheControl.js +22 -0
- package/dist/compat/types.d.ts +1 -1
- package/dist/compat/types.d.ts.map +1 -1
- package/dist/componentHelpers.d.ts +18 -0
- package/dist/componentHelpers.d.ts.map +1 -0
- package/dist/componentHelpers.js +28 -0
- package/dist/componentProxyHandlers.d.ts.map +1 -1
- package/dist/components/Fragment.d.ts +8 -0
- package/dist/components/Fragment.d.ts.map +1 -0
- package/dist/components/Fragment.js +10 -0
- package/dist/components/Link.d.ts +4 -3
- package/dist/components/Link.d.ts.map +1 -1
- package/dist/components/Link.js +1 -0
- package/dist/components/NoEscape.d.ts +8 -0
- package/dist/components/NoEscape.d.ts.map +1 -0
- package/dist/components/NoEscape.js +6 -0
- package/dist/components/RouteRedirectComponent.d.ts.map +1 -1
- package/dist/components/RouteRedirectComponent.js +1 -1
- package/dist/components/WebRedirectComponent.d.ts.map +1 -1
- package/dist/components/WebRedirectComponent.js +1 -1
- package/dist/components/bindable/BindVariable.d.ts +1 -0
- package/dist/components/bindable/BindVariable.d.ts.map +1 -1
- package/dist/components/bindable/BindableCheckbox.d.ts +7 -7
- package/dist/components/bindable/BindableCheckbox.d.ts.map +1 -1
- package/dist/components/bindable/BindableInput.d.ts +7 -7
- package/dist/components/bindable/BindableInput.d.ts.map +1 -1
- package/dist/components/bindable/BindableInputNonString.d.ts +2 -2
- package/dist/components/bindable/BindableInputNonString.d.ts.map +1 -1
- package/dist/components/bindable/BindableInputString.d.ts +2 -2
- package/dist/components/bindable/BindableInputString.d.ts.map +1 -1
- package/dist/components/bindable/BindableInputTyped.d.ts +3 -3
- package/dist/components/bindable/BindableInputTyped.d.ts.map +1 -1
- package/dist/components/bindable/BindableInputTypedLegacy.d.ts +3 -3
- package/dist/components/bindable/BindableInputTypedLegacy.d.ts.map +1 -1
- package/dist/components/bindable/BindableRadio.js +2 -2
- package/dist/components/bindable/BindableSelect.d.ts +13 -10
- package/dist/components/bindable/BindableSelect.d.ts.map +1 -1
- package/dist/components/bindable/BindableSelectNaive.js +3 -3
- package/dist/components/bindable/BindableTextarea.d.ts +7 -7
- package/dist/components/bindable/BindableTextarea.d.ts.map +1 -1
- package/dist/components/bindable/bindableCandidates.comparison.d.ts +136 -0
- package/dist/components/bindable/bindableCandidates.comparison.d.ts.map +1 -0
- package/dist/components/bindable/bindableCandidates.comparison.js +268 -0
- package/dist/components/bindable/bindableProps.types.test.d.ts +50 -0
- package/dist/components/bindable/bindableProps.types.test.d.ts.map +1 -0
- package/dist/components/bindable/bindableProps.types.test.js +252 -0
- package/dist/components/library/RichTextEditor/RichTextEditor.d.ts.map +1 -1
- package/dist/components/library/RichTextEditor/contentTree.d.ts.map +1 -1
- package/dist/components/makeTypedLink.d.ts +9 -0
- package/dist/components/makeTypedLink.d.ts.map +1 -0
- package/dist/components/makeTypedLink.js +15 -0
- package/dist/context/registerContext.d.ts +22 -0
- package/dist/context/registerContext.d.ts.map +1 -0
- package/dist/context/registerContext.js +18 -0
- package/dist/env/getEnvSchemas.d.ts.map +1 -1
- package/dist/env/getEnvSchemas.js +2 -1
- package/dist/fileVersions.d.ts +9 -0
- package/dist/fileVersions.d.ts.map +1 -0
- package/dist/fileVersions.js +28 -0
- package/dist/findUserConfig.d.ts +1 -1
- package/dist/findUserConfig.d.ts.map +1 -1
- package/dist/findUserConfig.js +2 -1
- package/dist/frameworkConfigSchema.d.ts +14 -2
- package/dist/frameworkConfigSchema.d.ts.map +1 -1
- package/dist/frameworkConfigSchema.js +11 -2
- package/dist/getComponent.d.ts.map +1 -1
- package/dist/getComponent.js +4 -3
- package/dist/getRoutes.d.ts.map +1 -1
- package/dist/getRoutes.js +9 -8
- package/dist/hmr/applyHmrModule.d.ts.map +1 -1
- package/dist/hmr/componentIdentity.js +1 -1
- package/dist/hooks/getCurrentComponent.d.ts +1 -1
- package/dist/hooks/getCurrentComponent.d.ts.map +1 -1
- package/dist/hydrate/hydrate.d.ts +5 -1
- package/dist/hydrate/hydrate.d.ts.map +1 -1
- package/dist/hydrate/hydrate.js +59 -46
- package/dist/hydrate/hydrateGlobalData.d.ts +4 -3
- package/dist/hydrate/hydrateGlobalData.d.ts.map +1 -1
- package/dist/hydrate/reconcileHydratedAttributes.d.ts +2 -1
- package/dist/hydrate/reconcileHydratedAttributes.d.ts.map +1 -1
- package/dist/hydrate/reconcileHydratedAttributes.js +4 -3
- package/dist/hydrate/renderHydrationMismatchBanner.d.ts.map +1 -1
- package/dist/hydrate/renderHydrationMismatchBanner.js +2 -1
- package/dist/importDevModuleWithRetry.d.ts +2 -1
- package/dist/importDevModuleWithRetry.d.ts.map +1 -1
- package/dist/importDevModuleWithRetry.js +2 -1
- package/dist/importModule.d.ts +3 -0
- package/dist/importModule.d.ts.map +1 -0
- package/dist/importModule.js +4 -0
- package/dist/index.js +2 -1
- package/dist/indexInner.d.ts +30 -7
- package/dist/indexInner.d.ts.map +1 -1
- package/dist/indexInner.js +37 -2
- package/dist/json.d.ts +12 -0
- package/dist/json.d.ts.map +1 -0
- package/dist/json.js +8 -0
- package/dist/jsxHelpers.d.ts +3 -0
- package/dist/jsxHelpers.d.ts.map +1 -0
- package/dist/jsxHelpers.js +6 -0
- package/dist/jsxRuntime.d.ts +1 -0
- package/dist/jsxRuntime.d.ts.map +1 -1
- package/dist/jsxRuntime.js +3 -1
- package/dist/jsxRuntimeSignals.d.ts.map +1 -1
- package/dist/jsxRuntimeSignals.js +1 -0
- package/dist/makeInstanceConfigFromFrameworkConfig.d.ts.map +1 -1
- package/dist/makeInstanceConfigFromFrameworkConfig.js +1 -0
- package/dist/mergeConfigs.d.ts.map +1 -1
- package/dist/mergeConfigs.js +2 -6
- package/dist/nbsp.d.ts +1 -2
- package/dist/nbsp.d.ts.map +1 -1
- package/dist/nbsp.js +3 -7
- package/dist/objectMap.d.ts +1 -1
- package/dist/objectMap.d.ts.map +1 -1
- package/dist/pipeline/PipelineRequestHandler.d.ts +25 -0
- package/dist/pipeline/PipelineRequestHandler.d.ts.map +1 -0
- package/dist/pipeline/PipelineRequestHandler.js +96 -0
- package/dist/pipeline/contextStore.d.ts +12 -0
- package/dist/pipeline/contextStore.d.ts.map +1 -0
- package/dist/pipeline/contextStore.js +13 -0
- package/dist/pipeline/hydratePipeline.d.ts +4 -0
- package/dist/pipeline/hydratePipeline.d.ts.map +1 -0
- package/dist/pipeline/hydratePipeline.js +64 -0
- package/dist/pipeline/importRoutesModule.d.ts +6 -0
- package/dist/pipeline/importRoutesModule.d.ts.map +1 -0
- package/dist/pipeline/importRoutesModule.js +33 -0
- package/dist/pipeline/networkedTransport.d.ts +11 -0
- package/dist/pipeline/networkedTransport.d.ts.map +1 -0
- package/dist/pipeline/networkedTransport.js +54 -0
- package/dist/pipeline/pipeline.d.ts +105 -0
- package/dist/pipeline/pipeline.d.ts.map +1 -0
- package/dist/pipeline/pipeline.js +108 -0
- package/dist/pipeline/pipeline.types.test.d.ts +650 -0
- package/dist/pipeline/pipeline.types.test.d.ts.map +1 -0
- package/dist/pipeline/pipeline.types.test.js +342 -0
- package/dist/pipeline/pipelineDefinition.d.ts +67 -0
- package/dist/pipeline/pipelineDefinition.d.ts.map +1 -0
- package/dist/pipeline/pipelineDefinition.js +11 -0
- package/dist/pipeline/pipelineSplit.types.test.d.ts +1971 -0
- package/dist/pipeline/pipelineSplit.types.test.d.ts.map +1 -0
- package/dist/pipeline/pipelineSplit.types.test.js +440 -0
- package/dist/pipeline/runPipeline.d.ts +31 -0
- package/dist/pipeline/runPipeline.d.ts.map +1 -0
- package/dist/pipeline/runPipeline.js +71 -0
- package/dist/pipeline/runSplitPipeline.d.ts +10 -0
- package/dist/pipeline/runSplitPipeline.d.ts.map +1 -0
- package/dist/pipeline/runSplitPipeline.js +48 -0
- package/dist/pipeline/splitPipeline.d.ts +62 -0
- package/dist/pipeline/splitPipeline.d.ts.map +1 -0
- package/dist/pipeline/splitPipeline.js +76 -0
- package/dist/pop.js +1 -1
- package/dist/rawHtml/filterContentNode.d.ts.map +1 -1
- package/dist/render/HeadData.d.ts +3 -1
- package/dist/render/HeadData.d.ts.map +1 -1
- package/dist/render/classComponentNodeToRenderingTree.d.ts.map +1 -1
- package/dist/render/componentNodeToRenderingTree.d.ts.map +1 -1
- package/dist/render/contentToHtml.d.ts +2 -2
- package/dist/render/contentToHtml.d.ts.map +1 -1
- package/dist/render/contentToHtml.js +2 -1
- package/dist/render/contentToHtmlDev.d.ts +1 -1
- package/dist/render/contentToHtmlDev.d.ts.map +1 -1
- package/dist/render/contentTreeToRenderingTree.d.ts.map +1 -1
- package/dist/render/contentTreeToRenderingTree.js +2 -1
- package/dist/render/functionComponentNodeToRenderingTree.d.ts.map +1 -1
- package/dist/render/functionComponentNodeToRenderingTree.js +2 -2
- package/dist/render/instantiateComponent.d.ts.map +1 -1
- package/dist/render/processHead.d.ts.map +1 -1
- package/dist/render/processHead.js +12 -18
- package/dist/render/renderingTreeToHtml.d.ts.map +1 -1
- package/dist/render/renderingTreeToHtml.js +6 -3
- package/dist/render/rootToHtml.d.ts +2 -2
- package/dist/render/rootToHtml.d.ts.map +1 -1
- package/dist/requests/fetch/delete.d.ts.map +1 -1
- package/dist/requests/fetch/delete.js +5 -2
- package/dist/requests/fetch/get.js +1 -1
- package/dist/requests/fetch/patch.d.ts.map +1 -1
- package/dist/requests/fetch/patch.js +5 -2
- package/dist/requests/fetch/post.d.ts.map +1 -1
- package/dist/requests/fetch/post.js +5 -2
- package/dist/requests/fetch/put.d.ts.map +1 -1
- package/dist/requests/fetch/put.js +5 -2
- package/dist/routesLocationParts.d.ts +6 -0
- package/dist/routesLocationParts.d.ts.map +1 -0
- package/dist/routesLocationParts.js +10 -0
- package/dist/routing/AppRoutes.d.ts +5 -3
- package/dist/routing/AppRoutes.d.ts.map +1 -1
- package/dist/routing/MatchedRouteInfo.d.ts +11 -0
- package/dist/routing/MatchedRouteInfo.d.ts.map +1 -0
- package/dist/routing/RouteContentFunction.d.ts +1 -2
- package/dist/routing/RouteContentFunction.d.ts.map +1 -1
- package/dist/routing/RouteDataFunction.type.d.ts +4 -2
- package/dist/routing/RouteDataFunction.type.d.ts.map +1 -1
- package/dist/routing/RoutePaths.d.ts +12 -0
- package/dist/routing/RoutePaths.d.ts.map +1 -0
- package/dist/routing/RoutePaths.js +1 -0
- package/dist/routing/RouteTypes.d.ts +6 -4
- package/dist/routing/RouteTypes.d.ts.map +1 -1
- package/dist/routing/Routes.d.ts +17 -11
- package/dist/routing/Routes.d.ts.map +1 -1
- package/dist/routing/RoutesFunction.d.ts +11 -2
- package/dist/routing/RoutesFunction.d.ts.map +1 -1
- package/dist/routing/Serializable.d.ts +5 -0
- package/dist/routing/Serializable.d.ts.map +1 -0
- package/dist/routing/Serializable.js +1 -0
- package/dist/routing/builder.d.ts +99 -0
- package/dist/routing/builder.d.ts.map +1 -0
- package/dist/routing/builder.js +213 -0
- package/dist/routing/builder.trial.d.ts +2 -0
- package/dist/routing/builder.trial.d.ts.map +1 -0
- package/dist/routing/builder.trial.js +85 -0
- package/dist/routing/defineRoutes.d.ts +8 -0
- package/dist/routing/defineRoutes.d.ts.map +1 -0
- package/dist/routing/defineRoutes.js +3 -0
- package/dist/routing/pyramidRouting.d.ts +2 -0
- package/dist/routing/pyramidRouting.d.ts.map +1 -0
- package/dist/routing/pyramidRouting.js +13 -0
- package/dist/routing/registerGlobalData.d.ts +11 -3
- package/dist/routing/registerGlobalData.d.ts.map +1 -1
- package/dist/routing/registerGlobalData.js +6 -0
- package/dist/routing/registerParts.types.test.d.ts +2 -0
- package/dist/routing/registerParts.types.test.d.ts.map +1 -0
- package/dist/routing/registerParts.types.test.js +139 -0
- package/dist/routing/registerRoutes.d.ts +10 -0
- package/dist/routing/registerRoutes.d.ts.map +1 -0
- package/dist/routing/registerRoutes.js +9 -0
- package/dist/routing/registerRouting.d.ts +36 -0
- package/dist/routing/registerRouting.d.ts.map +1 -0
- package/dist/routing/registerRouting.js +34 -0
- package/dist/routing/registerRouting.types.test.d.ts +80 -0
- package/dist/routing/registerRouting.types.test.d.ts.map +1 -0
- package/dist/routing/registerRouting.types.test.js +120 -0
- package/dist/routing/registrationTypes.d.ts +11 -0
- package/dist/routing/registrationTypes.d.ts.map +1 -0
- package/dist/routing/registrationTypes.js +1 -0
- package/dist/routing/resolveAppRoutes.d.ts +5 -0
- package/dist/routing/resolveAppRoutes.d.ts.map +1 -0
- package/dist/routing/resolveAppRoutes.js +25 -0
- package/dist/routing/routeUrl.d.ts +4 -0
- package/dist/routing/routeUrl.d.ts.map +1 -1
- package/dist/routing/routeUrl.js +4 -0
- package/dist/routing/routesArray.d.ts +23 -0
- package/dist/routing/routesArray.d.ts.map +1 -0
- package/dist/routing/routesArray.js +20 -0
- package/dist/routing/routesArray.types.test.d.ts +2 -0
- package/dist/routing/routesArray.types.test.d.ts.map +1 -0
- package/dist/routing/routesArray.types.test.js +132 -0
- package/dist/routing/routingBuilder.d.ts +34 -0
- package/dist/routing/routingBuilder.d.ts.map +1 -0
- package/dist/routing/routingBuilder.js +33 -0
- package/dist/routing/routingBuilder.types.test.d.ts +2 -0
- package/dist/routing/routingBuilder.types.test.d.ts.map +1 -0
- package/dist/routing/routingBuilder.types.test.js +171 -0
- package/dist/routing/routingRegistry.d.ts +19 -0
- package/dist/routing/routingRegistry.d.ts.map +1 -0
- package/dist/routing/routingRegistry.js +29 -0
- package/dist/staticGen/getAppRoutes.d.ts +2 -2
- package/dist/staticGen/getAppRoutes.d.ts.map +1 -1
- package/dist/staticGen/getAppRoutes.js +9 -6
- package/dist/staticGen/staticGen.d.ts.map +1 -1
- package/dist/staticGen/staticGen.js +8 -2
- package/dist/style/styleContentSxy.d.ts.map +1 -1
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +2 -0
- package/dist/syncServer/index.cjs +1 -2
- package/dist/syncServer/preload.js +2 -0
- package/dist/testing/createTestApp.d.ts +25 -1
- package/dist/testing/createTestApp.d.ts.map +1 -1
- package/dist/testing/createTestApp.js +12 -3
- package/dist/testing/createTestPipelineApp.d.ts +25 -0
- package/dist/testing/createTestPipelineApp.d.ts.map +1 -0
- package/dist/testing/createTestPipelineApp.js +153 -0
- package/dist/testing/ensure.d.ts +108 -0
- package/dist/testing/ensure.d.ts.map +1 -0
- package/dist/testing/ensure.js +522 -0
- package/dist/testing/ensure.trial.d.ts +2 -0
- package/dist/testing/ensure.trial.d.ts.map +1 -0
- package/dist/testing/ensure.trial.js +9 -0
- package/dist/testing/helpers/contentHtmlElements.d.ts.map +1 -1
- package/dist/testing/host.d.ts +80 -9
- package/dist/testing/host.d.ts.map +1 -1
- package/dist/testing/host.js +81 -20
- package/dist/testing/hostPipeline.d.ts +157 -0
- package/dist/testing/hostPipeline.d.ts.map +1 -0
- package/dist/testing/hostPipeline.js +341 -0
- package/dist/testing/hydrateTestApp.d.ts +17 -0
- package/dist/testing/hydrateTestApp.d.ts.map +1 -1
- package/dist/testing/hydrateTestApp.js +26 -6
- package/dist/testing/hydrateTestPipelineApp.d.ts +30 -0
- package/dist/testing/hydrateTestPipelineApp.d.ts.map +1 -0
- package/dist/testing/hydrateTestPipelineApp.js +190 -0
- package/dist/testing/index.d.ts +6 -3
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +4 -1
- package/dist/testing/resolveContent.d.ts +16 -0
- package/dist/testing/resolveContent.d.ts.map +1 -0
- package/dist/testing/resolveContent.js +65 -0
- package/dist/testing/testingComponentPackage.d.ts +3 -1
- package/dist/testing/testingComponentPackage.d.ts.map +1 -1
- package/dist/testing/testingComponentPackage.js +16 -1
- package/dist/update/integrateUpdateVdom.d.ts.map +1 -1
- package/dist/update/integrateUpdateVdom.js +35 -31
- package/dist/update/integrateUpdateVdomPrebuild.js +20 -20
- package/dist/validChildren.d.ts.map +1 -1
- package/dist/zones/react.d.ts.map +1 -1
- package/package.json +20 -18
- package/types/helpers.d.ts +11 -2
- package/types/jsx/html.d.ts +29 -25
- package/types/jsx/jsx.d.ts +8 -8
- package/types/modules.d.ts +14 -3
- package/types/testing.d.ts +0 -0
- package/vendor/babel-core.js +5 -5
- package/vendor/babel-parser.js +1 -1
- package/vendor/babel-preset-react.js +32 -34
- package/vendor/babel-preset-typescript.js +5 -5
- package/vendor/chalk-extensions.js +3 -146
- package/vendor/chokidar.js +311 -5
- package/vendor/chunk-B34JUlnS.js +169 -0
- package/vendor/{chunk-Bu8ZRE-c.js → chunk-B9ttgKqg.js} +28 -25
- package/vendor/{chunk-D2EnpcLg.js → chunk-BGvapINa.js} +3 -164
- package/vendor/{chunk-Cqrj-Zqr.js → chunk-BmAiqUzD.js} +22 -8
- package/vendor/{chunk-BiUcnLhT.js → chunk-But4T5N_.js} +8 -3
- package/vendor/{chunk-OUnVY4Wm.js → chunk-DuR6SGzI.js} +162 -35
- package/vendor/dotenv.js +2 -2
- package/vendor/express.js +61 -10
- package/vendor/manifest.json +2 -2
- package/vendor/postcss.js +1 -1
- package/vendor/precinct.js +5914 -3591
- package/vendor/valibot.js +418 -504
- package/dist/Servers/MatchedRouteInfo.d.ts +0 -11
- package/dist/Servers/MatchedRouteInfo.d.ts.map +0 -1
- package/dist/routing/__fluentRouteBuilder.d.ts +0 -80
- package/dist/routing/__fluentRouteBuilder.d.ts.map +0 -1
- package/dist/routing/__fluentRouteBuilder.js +0 -183
- package/dist/routing/__fluentRoutes.d.ts +0 -2
- package/dist/routing/__fluentRoutes.d.ts.map +0 -1
- package/dist/routing/__fluentRoutes.js +0 -59
- package/vendor/chunk-Hy-cCmu-.js +0 -23
- /package/dist/{Servers → routing}/MatchedRouteInfo.js +0 -0
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
import { TungstenBaseComponent, TungstenBaseSimpleStoreComponent, TungstenBaseStatefulStoreComponent, TungstenBaseStoreComponent, TungstenSimpleComponent } from "../Components.js";
|
|
2
|
+
import { ContentNodeComponentIsClassComponent, ContentNodeElementIsComponent } from '../ContentNode.js';
|
|
3
|
+
import { $props, $type } from '../contentNodeSymbols.js';
|
|
4
|
+
import { componentTypeIdentityKey } from '../hmr/componentIdentity.js';
|
|
5
|
+
import { makeStore } from '../Store/makeStore.js';
|
|
6
|
+
import { routing } from "../Servers/routing.js";
|
|
7
|
+
import { resolveContent } from './resolveContent.js';
|
|
8
|
+
import { missingStoreValue, testingComponentPackage } from './testingComponentPackage.js';
|
|
9
|
+
const isPromise = value => value instanceof Promise || typeof value === 'object' && value !== null && 'then' in value;
|
|
10
|
+
// The same list at runtime. Underscore-prefixed members are excluded by rule
|
|
11
|
+
// (the framework's naming scheme), so only the plain-named ones are listed, and
|
|
12
|
+
// frameworkMembersAreComplete below fails to compile if one is ever missed.
|
|
13
|
+
const frameworkMemberNames = ['props', 'routeParams', 'routeData', 'parentComponent', 'childComponents', 'globalData', 'state', 'storeData', 'style', 'title', 'content', 'render', 'init', 'clientInit', 'serverInit', 'componentDidMount', 'componentDidHydrate', 'componentDidUpdate', 'componentDidRender', 'componentWillUnmount', 'componentDidUnmount', 'shouldStoreComponentUpdate', 'setState', 'triggerUpdate', 'pickProps', 'pickState', 'using', 'reactive', 'setTimeout', 'setInterval', 'clearTimeout', 'clearInterval', 'tungsten'];
|
|
14
|
+
const frameworkMembers = new Set(frameworkMemberNames);
|
|
15
|
+
// a key the store does not hold names itself when it is read, rather than coming back undefined
|
|
16
|
+
const namingMissingKeys = store => new Proxy(store, {
|
|
17
|
+
get: (target, key) => typeof key === 'symbol' || key in target ? Reflect.get(target, key) : missingStoreValue(`store.${key}`)
|
|
18
|
+
});
|
|
19
|
+
const isStoreComponent = component => component instanceof TungstenBaseStoreComponent || component instanceof TungstenBaseSimpleStoreComponent || component instanceof TungstenBaseStatefulStoreComponent;
|
|
20
|
+
// Runs routing only when asked: a unit test otherwise states the route itself.
|
|
21
|
+
async function hostedRouting(options, context, networkedData) {
|
|
22
|
+
if (options.routing === true) {
|
|
23
|
+
const routes = typeof options.routes === 'function' ? options.routes(null, context, networkedData) : options.routes;
|
|
24
|
+
return {
|
|
25
|
+
routes,
|
|
26
|
+
internalStore: {
|
|
27
|
+
location: options.location,
|
|
28
|
+
matchedRouteInfo: await routing(options.location, routes, context, networkedData),
|
|
29
|
+
popMessages: []
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const {
|
|
34
|
+
location,
|
|
35
|
+
matchedRoute
|
|
36
|
+
} = options;
|
|
37
|
+
const matchedRouteInfo = matchedRoute === undefined ? undefined : {
|
|
38
|
+
key: matchedRoute.key,
|
|
39
|
+
params: matchedRoute.params ?? {},
|
|
40
|
+
content: null,
|
|
41
|
+
...('data' in matchedRoute ? {
|
|
42
|
+
data: matchedRoute.data
|
|
43
|
+
} : {})
|
|
44
|
+
};
|
|
45
|
+
return {
|
|
46
|
+
routes: options.routes,
|
|
47
|
+
internalStore: {
|
|
48
|
+
...(location !== undefined ? {
|
|
49
|
+
location
|
|
50
|
+
} : {}),
|
|
51
|
+
...(matchedRouteInfo !== undefined ? {
|
|
52
|
+
matchedRouteInfo
|
|
53
|
+
} : {}),
|
|
54
|
+
popMessages: []
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Constructs a component outside of any app and drives it the way the framework
|
|
60
|
+
* does - init, then the mount lifecycles - calling its content function with
|
|
61
|
+
* whatever arguments its flavour takes, so tests don't have to match the
|
|
62
|
+
* (props) / (props, state) signature themselves.
|
|
63
|
+
*
|
|
64
|
+
* No DOM: content is returned as a content node tree, unstyled, and never
|
|
65
|
+
* reconciled. createTestApp() is the harness for anything that needs a document
|
|
66
|
+
* or app state. Lifecycle failures are thrown rather than only reported, so a
|
|
67
|
+
* test can't pass over one.
|
|
68
|
+
*
|
|
69
|
+
* State is not proxied (the construct package is marked `hosted`), so nothing
|
|
70
|
+
* re-renders on its own: updateProps() and updateState() are the renders.
|
|
71
|
+
*
|
|
72
|
+
* Store components have a structural overload: Schema is its own parameter, inferred from
|
|
73
|
+
* the class, so a generic wrapper (`Component extends { store: ComponentStore<S> }`) can
|
|
74
|
+
* call through without a cast. HostArgs is a conditional on Component, and a conditional
|
|
75
|
+
* on a type parameter is deferred, so nothing is assignable to it inside such a wrapper.
|
|
76
|
+
*/
|
|
77
|
+
// resolve: false has its own overloads, the content coming back as the component's own function
|
|
78
|
+
// returns it; the rest resolve, so the content is always a promise
|
|
79
|
+
// export async function host<
|
|
80
|
+
// Props extends TungstenComponentPropsBase,
|
|
81
|
+
// Schema extends object,
|
|
82
|
+
// Component extends TungstenBaseComponent<any, any> & { store: ComponentStore<Schema> },
|
|
83
|
+
// >(
|
|
84
|
+
// ComponentType: TungstenComponentClass<Props, Component> & (new (...args: any) => { store: ComponentStore<Schema> }),
|
|
85
|
+
// props: Props,
|
|
86
|
+
// options: NoInfer<
|
|
87
|
+
// [Schema] extends [InternalStoreSchema] ? never : HostStoreOptions<Schema> & Unresolved
|
|
88
|
+
// >,
|
|
89
|
+
// ): Promise<Hosted<Component>>
|
|
90
|
+
// export async function host<
|
|
91
|
+
// Props extends TungstenComponentPropsBase,
|
|
92
|
+
// Component extends TungstenBaseComponent<any, any>,
|
|
93
|
+
// >(
|
|
94
|
+
// ComponentType: TungstenComponentClass<Props, Component>,
|
|
95
|
+
// props: Props | undefined,
|
|
96
|
+
// options: HostOptions<Component> & Unresolved,
|
|
97
|
+
// ): Promise<Hosted<Component>>
|
|
98
|
+
// export async function host<
|
|
99
|
+
// Props extends TungstenComponentPropsBase,
|
|
100
|
+
// Schema extends object,
|
|
101
|
+
// Component extends TungstenBaseComponent<any, any> & { store: ComponentStore<Schema> },
|
|
102
|
+
// >(
|
|
103
|
+
// ComponentType: TungstenComponentClass<Props, Component> & (new (...args: any) => { store: ComponentStore<Schema> }),
|
|
104
|
+
// props: Props,
|
|
105
|
+
// // NoInfer: Schema comes from the class alone, so a partial storeData can't widen it
|
|
106
|
+
// options: NoInfer<
|
|
107
|
+
// [Schema] extends [InternalStoreSchema] ? never : HostStoreOptions<Schema> & Resolved
|
|
108
|
+
// >,
|
|
109
|
+
// ): Promise<HostedResolved<Component>>
|
|
110
|
+
// // The general form: props optional only when none are required, options only without a store.
|
|
111
|
+
// export async function host<
|
|
112
|
+
// Props extends TungstenComponentPropsBase,
|
|
113
|
+
// // not <Props, any>: the base is invariant in Props, so that rejects props narrower than the component's
|
|
114
|
+
// Component extends TungstenBaseComponent<any, any>,
|
|
115
|
+
// >(
|
|
116
|
+
// ComponentType: TungstenComponentClass<Props, Component>,
|
|
117
|
+
// ...[props, options]: HostArgs<Props, Component>
|
|
118
|
+
// ): Promise<HostedResolved<Component>>
|
|
119
|
+
// actual
|
|
120
|
+
export async function hostPipeline(ComponentType, props,
|
|
121
|
+
// unknown, not a loose object type: the general overload's rest tuple can't be related to one
|
|
122
|
+
options) {
|
|
123
|
+
const stored = options ?? {};
|
|
124
|
+
const storeData = stored.storeData ?? stored.partialStoreData;
|
|
125
|
+
const store = stored.store ?? stored.partialStore ?? (storeData === undefined ? undefined : makeStore(storeData, new Map()));
|
|
126
|
+
const partial = stored.partialStore !== undefined || stored.partialStoreData !== undefined;
|
|
127
|
+
// a partial store holds only the keys supplied, so name any other one read. On the store the
|
|
128
|
+
// instance shares, so a component resolve: true constructs is named it the same way
|
|
129
|
+
const shared = partial && store !== undefined ? namingMissingKeys(store) : store;
|
|
130
|
+
// one object each, so the routes function, the data function and the component see the same
|
|
131
|
+
// ones, as a request's do. Branded here, as the framework brands what it builds
|
|
132
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
133
|
+
const context = stored.context ?? {};
|
|
134
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
135
|
+
const networkedData = stored.networkedData ?? {};
|
|
136
|
+
const route = await hostedRouting(stored, context, networkedData);
|
|
137
|
+
const pending = [];
|
|
138
|
+
const failures = [];
|
|
139
|
+
// Instance.trackWork's no-scheduler path, except the work is kept so host
|
|
140
|
+
// can await it and the failure is re-thrown rather than logged.
|
|
141
|
+
const trackWork = (task, description) => {
|
|
142
|
+
const fail = error => {
|
|
143
|
+
failures.push(error instanceof Error ? new Error(`${description}: ${error.message}`, {
|
|
144
|
+
cause: error
|
|
145
|
+
}) : error);
|
|
146
|
+
};
|
|
147
|
+
let result;
|
|
148
|
+
try {
|
|
149
|
+
result = task();
|
|
150
|
+
} catch (error) {
|
|
151
|
+
fail(error);
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
if (isPromise(result)) pending.push(Promise.resolve(result).catch(fail));
|
|
155
|
+
};
|
|
156
|
+
const settle = async () => {
|
|
157
|
+
while (pending.length > 0) await Promise.all(pending.splice(0));
|
|
158
|
+
if (failures.length > 0) throw failures[0];
|
|
159
|
+
};
|
|
160
|
+
let title;
|
|
161
|
+
const navigations = [];
|
|
162
|
+
// kept, not inlined: its instance is what resolving renders the rest of the tree against
|
|
163
|
+
const constructPackage = testingComponentPackage(
|
|
164
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- an absent props object is only reachable when Props allows {}
|
|
165
|
+
props ?? {}, {
|
|
166
|
+
...(shared !== undefined ? {
|
|
167
|
+
store: shared
|
|
168
|
+
} : {}),
|
|
169
|
+
...(route.routes !== undefined ? {
|
|
170
|
+
routes: route.routes
|
|
171
|
+
} : {}),
|
|
172
|
+
internalStore: route.internalStore,
|
|
173
|
+
context,
|
|
174
|
+
networkedData,
|
|
175
|
+
...(stored.globalData !== undefined ? {
|
|
176
|
+
globalData: stored.globalData
|
|
177
|
+
} : {}),
|
|
178
|
+
trackWork,
|
|
179
|
+
// setState's work, run and awaited here rather than left to a timer
|
|
180
|
+
queueTask: (task, description) => {
|
|
181
|
+
trackWork(task, description);
|
|
182
|
+
return true;
|
|
183
|
+
},
|
|
184
|
+
setTitle: newTitle => {
|
|
185
|
+
title = newTitle;
|
|
186
|
+
},
|
|
187
|
+
// recorded, not carried out - navigating needs an app
|
|
188
|
+
goto: async to => {
|
|
189
|
+
navigations.push({
|
|
190
|
+
kind: 'goto',
|
|
191
|
+
to
|
|
192
|
+
});
|
|
193
|
+
},
|
|
194
|
+
redirect: to => {
|
|
195
|
+
navigations.push({
|
|
196
|
+
kind: 'redirect',
|
|
197
|
+
to
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
const component = new ComponentType(constructPackage);
|
|
202
|
+
// the component's own store is built at construction, from the keys there were: guard it too
|
|
203
|
+
if (partial && isStoreComponent(component)) component.store = namingMissingKeys(component.store);
|
|
204
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- state isn't on the base class, see StateOf
|
|
205
|
+
const stateful = component;
|
|
206
|
+
const simple = component instanceof TungstenSimpleComponent;
|
|
207
|
+
// Not awaited here: what the component's own content function returns is
|
|
208
|
+
// what comes back, so its declared type tells a test whether to await.
|
|
209
|
+
const ownContent = () => {
|
|
210
|
+
const contentFunction = component.content ?? component.render;
|
|
211
|
+
if (contentFunction === undefined) {
|
|
212
|
+
throw new Error(`host(): ${ComponentType.name} has no content or render function.`);
|
|
213
|
+
}
|
|
214
|
+
const call = contentFunction;
|
|
215
|
+
const result = simple ? call(component.props) : call(component.props, stateful.state);
|
|
216
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- ContentOf recovers the concrete component's own return type
|
|
217
|
+
return result;
|
|
218
|
+
};
|
|
219
|
+
// resolve: the tree the app would render - every component in it constructed and asked for its
|
|
220
|
+
// content - so it is awaited whatever the hosted component's own content function returns
|
|
221
|
+
const guardPartialStore = built => {
|
|
222
|
+
if (isStoreComponent(built)) built.store = namingMissingKeys(built.store);
|
|
223
|
+
};
|
|
224
|
+
const resolved = async () => resolveContent(
|
|
225
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- ContentOf stays unresolved inside the generic; a content function returns a content tree
|
|
226
|
+
await ownContent(), component, constructPackage.instance, partial ? guardPartialStore : undefined);
|
|
227
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- resolving has its own overloads, whose content this is
|
|
228
|
+
const content = stored.resolve === false ? ownContent : resolved;
|
|
229
|
+
await component.__init();
|
|
230
|
+
component.__didMount();
|
|
231
|
+
await settle();
|
|
232
|
+
const core = {
|
|
233
|
+
get component() {
|
|
234
|
+
return component;
|
|
235
|
+
},
|
|
236
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- any from the constraint, see above
|
|
237
|
+
get props() {
|
|
238
|
+
return component.props;
|
|
239
|
+
},
|
|
240
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- as above
|
|
241
|
+
get state() {
|
|
242
|
+
return stateful.state;
|
|
243
|
+
},
|
|
244
|
+
get title() {
|
|
245
|
+
return title;
|
|
246
|
+
},
|
|
247
|
+
get navigations() {
|
|
248
|
+
return navigations;
|
|
249
|
+
},
|
|
250
|
+
content,
|
|
251
|
+
updateProps: async newProps => {
|
|
252
|
+
component.props = newProps;
|
|
253
|
+
// content first, then the completion lifecycles - the order
|
|
254
|
+
// __updateAndReturnContent() and its complete() callback run in.
|
|
255
|
+
const rendered = await content();
|
|
256
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- see UpdateCompletion
|
|
257
|
+
const completion = component;
|
|
258
|
+
// the framework passes the props the render saw, not the previous
|
|
259
|
+
// ones, despite componentDidUpdate's parameter name
|
|
260
|
+
if (simple) completion.__newUpdateCompleted(component.props);else completion.__newUpdateCompleted(component.props, stateful.state);
|
|
261
|
+
await settle();
|
|
262
|
+
return rendered;
|
|
263
|
+
},
|
|
264
|
+
updateState: async setter => {
|
|
265
|
+
if (stateful.state === undefined) {
|
|
266
|
+
throw new Error(`host(): ${ComponentType.name} has no state to update.`);
|
|
267
|
+
}
|
|
268
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- as above
|
|
269
|
+
const next = setter(stateful.state);
|
|
270
|
+
// a setter that mutated and returned nothing has already done the work
|
|
271
|
+
if (next !== undefined) {
|
|
272
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- StateOf is the component's own state type
|
|
273
|
+
stateful.state = next;
|
|
274
|
+
}
|
|
275
|
+
const rendered = await content();
|
|
276
|
+
await settle();
|
|
277
|
+
return rendered;
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- componentApi() collects exactly the members ComponentApi describes
|
|
281
|
+
return Object.assign(core, componentApi(component, core));
|
|
282
|
+
}
|
|
283
|
+
// export function hostPipelineGeneric<
|
|
284
|
+
// Props extends TungstenComponentPropsBase,
|
|
285
|
+
// Component extends TungstenBaseComponent<any, any>,
|
|
286
|
+
// >(
|
|
287
|
+
// ComponentType: TungstenComponentClass<Props, Component>,
|
|
288
|
+
// ...args: HostGenericArgs<Component>
|
|
289
|
+
// ): (props: Props) => Promise<HostedResolved<Component>>
|
|
290
|
+
export function hostPipelineGeneric(ComponentType, options) {
|
|
291
|
+
// host()'s args are a conditional on Component, which stays deferred in a generic
|
|
292
|
+
// wrapper, so nothing is assignable to it here - the implementation signature is
|
|
293
|
+
// what this is calling
|
|
294
|
+
const call = hostPipeline;
|
|
295
|
+
return async props => call(ComponentType, props, options);
|
|
296
|
+
}
|
|
297
|
+
export async function hostPipelineJsx(element,
|
|
298
|
+
// unknown: the overloads' options are conditional on Component, which nothing satisfies here
|
|
299
|
+
options) {
|
|
300
|
+
if (!ContentNodeElementIsComponent(element) || !ContentNodeComponentIsClassComponent(element)) {
|
|
301
|
+
throw new Error(`hostJsx(): ${described(element)} is not a class component element.` + ' Give host() a component class; a function component is a function - call it.');
|
|
302
|
+
}
|
|
303
|
+
const ComponentType = element[$type]; // eslint-disable-line @typescript-eslint/no-unsafe-type-assertion -- the element's own class, which the call names when it wants the wrapper typed
|
|
304
|
+
return hostPipeline(ComponentType, element[$props], options); // eslint-disable-line @typescript-eslint/no-unsafe-type-assertion
|
|
305
|
+
}
|
|
306
|
+
// an html tag as written, a fragment as <>, a function component by name
|
|
307
|
+
function described(element) {
|
|
308
|
+
const type = element[$type];
|
|
309
|
+
if (typeof type === 'string') return `<${type}>`;
|
|
310
|
+
if (typeof type === 'function') return `<${componentTypeIdentityKey(type)}>`;
|
|
311
|
+
return '<>';
|
|
312
|
+
}
|
|
313
|
+
// the variants hang off host() too, so a test reaches for one name
|
|
314
|
+
hostPipeline.generic = hostPipelineGeneric;
|
|
315
|
+
hostPipeline.jsx = hostPipelineJsx;
|
|
316
|
+
// The component's own function members, bound and ready to call. Framework
|
|
317
|
+
// members and anything the wrapper already provides are left out; the framework
|
|
318
|
+
// keeps its internals under an underscore, which is the rest of the rule.
|
|
319
|
+
function componentApi(component, core) {
|
|
320
|
+
const api = {};
|
|
321
|
+
const add = (name, descriptor) => {
|
|
322
|
+
if (descriptor === undefined || typeof descriptor.value !== 'function') return;
|
|
323
|
+
if (name.startsWith('_') || frameworkMembers.has(name)) return;
|
|
324
|
+
if (name in core || name in api) return;
|
|
325
|
+
const method = descriptor.value; // eslint-disable-line @typescript-eslint/no-unsafe-type-assertion -- guarded by the typeof above
|
|
326
|
+
// looked up only when called: a proxy field (a tRPC client) reads .bind as a procedure
|
|
327
|
+
api[name] = (...args) => Reflect.apply(method, component, args);
|
|
328
|
+
};
|
|
329
|
+
for (const name of Object.getOwnPropertyNames(component)) {
|
|
330
|
+
add(name, Object.getOwnPropertyDescriptor(component, name));
|
|
331
|
+
}
|
|
332
|
+
let prototype = Object.getPrototypeOf(component); // eslint-disable-line @typescript-eslint/no-unsafe-type-assertion
|
|
333
|
+
while (prototype !== null && prototype !== TungstenBaseComponent.prototype) {
|
|
334
|
+
for (const name of Object.getOwnPropertyNames(prototype)) {
|
|
335
|
+
if (name === 'constructor') continue;
|
|
336
|
+
add(name, Object.getOwnPropertyDescriptor(prototype, name));
|
|
337
|
+
}
|
|
338
|
+
prototype = Object.getPrototypeOf(prototype); // eslint-disable-line @typescript-eslint/no-unsafe-type-assertion
|
|
339
|
+
}
|
|
340
|
+
return api;
|
|
341
|
+
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { ConstructPackage, TungstenBaseComponent, TungstenComponentPropsBase } from '../Components.jsx';
|
|
2
2
|
import type { TaggedAttributeMismatch } from '../hydrate/renderHydrationMismatchBanner.js';
|
|
3
3
|
import type { TestAppOptions } from './createTestApp.js';
|
|
4
|
+
import { Instance } from '../Instance/Instance.js';
|
|
5
|
+
import { UpdateScheduler } from '../update/UpdateScheduler.js';
|
|
4
6
|
export type HydrateTestAppOptions<Props extends object> = TestAppOptions<Props> & {
|
|
5
7
|
serverProps?: Props;
|
|
6
8
|
csr?: boolean;
|
|
@@ -19,6 +21,21 @@ export type HydrateTestApp<Component extends TungstenBaseComponent> = {
|
|
|
19
21
|
unmount(): Promise<void>;
|
|
20
22
|
[Symbol.asyncDispose](): Promise<void>;
|
|
21
23
|
};
|
|
24
|
+
export declare function requireClient(harness: string): void;
|
|
25
|
+
export declare function bridgeHappyDomGlobals(document: Document): void;
|
|
26
|
+
export declare class HydrateTestAppImplementation<Component extends TungstenBaseComponent> implements HydrateTestApp<Component> {
|
|
27
|
+
#private;
|
|
28
|
+
readonly document: Document;
|
|
29
|
+
readonly container: HTMLElement;
|
|
30
|
+
readonly component: Component;
|
|
31
|
+
readonly html: string;
|
|
32
|
+
readonly mismatches: readonly TaggedAttributeMismatch[];
|
|
33
|
+
constructor(document: Document, container: HTMLElement, component: Component, instance: Instance, scheduler: UpdateScheduler, ownsContainer: boolean, html: string, mismatches: readonly TaggedAttributeMismatch[]);
|
|
34
|
+
resolved: () => Promise<void>;
|
|
35
|
+
setProps: (props: Component["props"]) => Promise<void>;
|
|
36
|
+
[Symbol.asyncDispose]: () => Promise<void>;
|
|
37
|
+
unmount: () => Promise<void>;
|
|
38
|
+
}
|
|
22
39
|
/**
|
|
23
40
|
* The hydration round trip createTestApp() deliberately doesn't cover: render a component to
|
|
24
41
|
* HTML the way a real server would, parse it with a real HTML parser, hydrate a fresh client
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydrateTestApp.d.ts","sourceRoot":"","sources":["../../src/testing/hydrateTestApp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,gBAAgB,
|
|
1
|
+
{"version":3,"file":"hydrateTestApp.d.ts","sourceRoot":"","sources":["../../src/testing/hydrateTestApp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,gBAAgB,EAAE,qBAAqB,EAAE,0BAA0B,EACtE,MAAM,mBAAmB,CAAA;AAI1B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAA;AAI1F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAKxD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAUlD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAM9D,MAAM,MAAM,qBAAqB,CAAC,KAAK,SAAS,MAAM,IAAI,cAAc,CAAC,KAAK,CAAC,GAAG;IAM9E,WAAW,CAAC,EAAE,KAAK,CAAA;IAEnB,GAAG,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,KAAK,kBAAkB,CAAC,KAAK,SAAS,MAAM,IAAI,MAAM,SAAS,KAAK,GAC9D,CAAC,OAAO,CAAC,EAAE,qBAAqB,CAAC,KAAK,CAAC,CAAC,GACxC,MAAM,KAAK,SAAS,KAAK,GACrB,CAAC,OAAO,CAAC,EAAE,qBAAqB,CAAC,KAAK,CAAC,CAAC,GACxC,CAAC,OAAO,EAAE,qBAAqB,CAAC,KAAK,CAAC,GAAG;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC,CAAA;AAEpE,MAAM,MAAM,cAAc,CAAC,SAAS,SAAS,qBAAqB,IAAI;IAClE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAA;IAC/B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAG7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAIrB,QAAQ,CAAC,UAAU,EAAE,SAAS,uBAAuB,EAAE,CAAA;IAEvD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAExB,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzC,CAAA;AAcD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAQnD;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAY9D;AAED,qBAAa,4BAA4B,CAAC,SAAS,SAAS,qBAAqB,CACjF,YAAW,cAAc,CAAC,SAAS,CAAC;;IAChC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAA;IAC/B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,UAAU,EAAE,SAAS,uBAAuB,EAAE,CAAA;gBAOnD,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,WAAW,EACtB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,eAAe,EAC1B,aAAa,EAAE,OAAO,EACtB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,SAAS,uBAAuB,EAAE;IAYlD,QAAQ,QAAa,OAAO,CAAC,IAAI,CAAC,CAEjC;IAED,QAAQ,GAAU,OAAO,SAAS,CAAC,OAAO,CAAC,KAAG,OAAO,CAAC,IAAI,CAAC,CAK1D;IAED,CAAC,MAAM,CAAC,YAAY,CAAC,QAAa,OAAO,CAAC,IAAI,CAAC,CAE9C;IAED,OAAO,QAAa,OAAO,CAAC,IAAI,CAAC,CA0BhC;CACJ;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,cAAc,CAChC,KAAK,SAAS,0BAA0B,EACxC,SAAS,SAAS,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,EACjD,SAAS,GAAG,SAAS,EAErB,aAAa,EAAE,KAAK,GAAG,EAAE,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,SAAS,EACzE,GAAG,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,GACnC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAiJpC"}
|
|
@@ -8,6 +8,7 @@ function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a),
|
|
|
8
8
|
function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
|
|
9
9
|
import { $props, $type } from '../contentNodeSymbols.js';
|
|
10
10
|
import { Instance } from '../Instance/Instance.js';
|
|
11
|
+
import { toRoutes } from '../routing/routesArray.js';
|
|
11
12
|
import { hydrateRootComponent, makeDefaultHydrateMeta } from "../hydrate/hydrate.js";
|
|
12
13
|
import { contentTreeToRenderingTree } from '../render/contentTreeToRenderingTree.js';
|
|
13
14
|
import { renderingNodeToHtml } from '../render/renderingTreeToHtml.js';
|
|
@@ -15,13 +16,21 @@ import { initStores } from '../Servers/initStores.js';
|
|
|
15
16
|
import { deleteNodeIfRendered } from '../update/integrateUpdateVdom.js';
|
|
16
17
|
import { UpdateScheduler } from '../update/UpdateScheduler.js';
|
|
17
18
|
import { DomPointer } from '../DomPointer.js';
|
|
19
|
+
import { isClient } from '../isClient.js';
|
|
18
20
|
import { waitForEnvIfLoading } from './loadEnv.js';
|
|
19
21
|
// hydrate.tsx references several DOM globals directly (Node.COMMENT_NODE, `instanceof Text`, the
|
|
20
22
|
// bare `document`) the way real browser code always can - happy-dom only puts these on its own
|
|
21
23
|
// Window, not on Node.js's global scope. Every hand-written hydration test before this harness
|
|
22
24
|
// bridged them manually; a caller of hydrateTestApp() shouldn't need to know that hydrate() was
|
|
23
25
|
// written assuming a real browser to begin with.
|
|
24
|
-
|
|
26
|
+
// Hydration is browser code: isClient decides what tungsten's modules do from the moment they load,
|
|
27
|
+
// so a node-only run would take server paths and fail far from here
|
|
28
|
+
export function requireClient(harness) {
|
|
29
|
+
if (!isClient) {
|
|
30
|
+
throw new Error(`${harness} needs a browser-like environment, and isClient is false: no global window` + ` existed when tungsten loaded. Run it in a DOM test suite whose setup puts happy-dom's` + ` window on the global before the tests are imported.`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export function bridgeHappyDomGlobals(document) {
|
|
25
34
|
const window = document.defaultView;
|
|
26
35
|
if (window === null) return;
|
|
27
36
|
const globals = globalThis; // eslint-disable-line @typescript-eslint/no-unsafe-type-assertion -- bridging happy-dom's globals onto the global scope
|
|
@@ -38,7 +47,7 @@ var _instance = /*#__PURE__*/new WeakMap();
|
|
|
38
47
|
var _scheduler = /*#__PURE__*/new WeakMap();
|
|
39
48
|
var _ownsContainer = /*#__PURE__*/new WeakMap();
|
|
40
49
|
var _unmounted = /*#__PURE__*/new WeakMap();
|
|
41
|
-
class HydrateTestAppImplementation {
|
|
50
|
+
export class HydrateTestAppImplementation {
|
|
42
51
|
constructor(document, container, component, instance, scheduler, ownsContainer, html, mismatches) {
|
|
43
52
|
_defineProperty(this, "document", void 0);
|
|
44
53
|
_defineProperty(this, "container", void 0);
|
|
@@ -111,6 +120,7 @@ class HydrateTestAppImplementation {
|
|
|
111
120
|
* client hydrator does, so a caller reproducing that class of bug should assert on the rejection.
|
|
112
121
|
*/
|
|
113
122
|
export async function hydrateTestApp(RootComponent, ...args) {
|
|
123
|
+
requireClient('hydrateTestApp()');
|
|
114
124
|
await waitForEnvIfLoading();
|
|
115
125
|
const options = args[0];
|
|
116
126
|
const suppliedDocument = options?.document ?? globalThis.document;
|
|
@@ -137,7 +147,7 @@ export async function hydrateTestApp(RootComponent, ...args) {
|
|
|
137
147
|
const clientProps = options?.props ?? {}; // eslint-disable-line @typescript-eslint/no-unsafe-type-assertion
|
|
138
148
|
const serverProps = options?.serverProps ?? clientProps;
|
|
139
149
|
const location = options?.location ?? '/';
|
|
140
|
-
const globalData = options?.globalData
|
|
150
|
+
const globalData = options?.globalData ? options.globalData : {};
|
|
141
151
|
const matchedRouteInfo = {
|
|
142
152
|
key: null,
|
|
143
153
|
params: options?.routeParams ?? {},
|
|
@@ -157,7 +167,11 @@ export async function hydrateTestApp(RootComponent, ...args) {
|
|
|
157
167
|
// routing() falls back to the built-in 404 when neither '404' nor 'default' is given
|
|
158
168
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
159
169
|
const appRoutes = options?.routes ?? {};
|
|
160
|
-
const
|
|
170
|
+
const context = options?.context ?? {};
|
|
171
|
+
// one object for both passes: the server's is serialized into the page and carried to the client
|
|
172
|
+
const networkedData = options?.networkedData ?? {};
|
|
173
|
+
// dev, so a path given twice fails the test
|
|
174
|
+
const routes = toRoutes(typeof appRoutes === 'function' ? appRoutes(null, context, networkedData) : appRoutes, true);
|
|
161
175
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- rootToHtml.ts builds a root content node the same way
|
|
162
176
|
const componentNode = {
|
|
163
177
|
[$type]: RootComponent,
|
|
@@ -172,13 +186,16 @@ export async function hydrateTestApp(RootComponent, ...args) {
|
|
|
172
186
|
internalStore,
|
|
173
187
|
stores,
|
|
174
188
|
storeSubscriptions
|
|
175
|
-
} = initStores(location, null, globalData, matchedRouteInfo);
|
|
189
|
+
} = initStores(location, null, globalData, matchedRouteInfo, null, context, networkedData);
|
|
176
190
|
const ssrInstance = new Instance(location, instanceConfig, null, appRoutes, routes, internalStore, stores, storeSubscriptions, globalData, matchedRouteInfo, {
|
|
177
191
|
document,
|
|
178
192
|
window: document.defaultView,
|
|
179
193
|
scheduler: ssrScheduler,
|
|
180
194
|
navigation: false
|
|
181
195
|
});
|
|
196
|
+
ssrInstance.fileVersions = options?.fileVersions;
|
|
197
|
+
ssrInstance.context = context;
|
|
198
|
+
ssrInstance.networkedData = networkedData;
|
|
182
199
|
for (const override of options?.stores ?? []) {
|
|
183
200
|
const store = override.registration.getStore(ssrInstance.stores);
|
|
184
201
|
await override.initialize(store);
|
|
@@ -210,7 +227,7 @@ export async function hydrateTestApp(RootComponent, ...args) {
|
|
|
210
227
|
internalStore,
|
|
211
228
|
stores,
|
|
212
229
|
storeSubscriptions
|
|
213
|
-
} = initStores(location, null, globalData, matchedRouteInfo);
|
|
230
|
+
} = initStores(location, null, globalData, matchedRouteInfo, null, context, networkedData);
|
|
214
231
|
const runtimeContext = {
|
|
215
232
|
document,
|
|
216
233
|
window: document.defaultView,
|
|
@@ -218,6 +235,9 @@ export async function hydrateTestApp(RootComponent, ...args) {
|
|
|
218
235
|
navigation: false
|
|
219
236
|
};
|
|
220
237
|
const instance = new Instance(location, instanceConfig, null, appRoutes, routes, internalStore, stores, storeSubscriptions, globalData, matchedRouteInfo, runtimeContext);
|
|
238
|
+
instance.fileVersions = options?.fileVersions;
|
|
239
|
+
instance.context = context;
|
|
240
|
+
instance.networkedData = networkedData;
|
|
221
241
|
try {
|
|
222
242
|
for (const override of options?.stores ?? []) {
|
|
223
243
|
const store = override.registration.getStore(instance.stores);
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ConstructPackage, TungstenBaseComponent, TungstenComponentPropsBase } from '../Components.jsx';
|
|
2
|
+
import type { ReqRes } from '../ReqRes.js';
|
|
3
|
+
import type { PipelineApp } from '../pipeline/pipelineDefinition.js';
|
|
4
|
+
import type { TestStoreOverride } from './createTestApp.js';
|
|
5
|
+
import type { HydrateTestApp } from './hydrateTestApp.js';
|
|
6
|
+
export type HydrateTestPipelineAppOptions<Props extends object> = {
|
|
7
|
+
document?: Document;
|
|
8
|
+
props?: Props;
|
|
9
|
+
serverProps?: Props;
|
|
10
|
+
container?: HTMLElement;
|
|
11
|
+
location?: string;
|
|
12
|
+
reqRes?: ReqRes;
|
|
13
|
+
stores?: readonly TestStoreOverride<any>[];
|
|
14
|
+
fileVersions?: Record<string, string>;
|
|
15
|
+
csr?: boolean;
|
|
16
|
+
};
|
|
17
|
+
export type HydrateTestPipelineApp<Component extends TungstenBaseComponent> = HydrateTestApp<Component>;
|
|
18
|
+
type HydrateTestPipelineAppArgs<Props extends object> = object extends Props ? [options?: HydrateTestPipelineAppOptions<Props>] : keyof Props extends never ? [options?: HydrateTestPipelineAppOptions<Props>] : [options: HydrateTestPipelineAppOptions<Props> & {
|
|
19
|
+
props: Props;
|
|
20
|
+
}];
|
|
21
|
+
/**
|
|
22
|
+
* hydrateTestApp() for an app built with pipeline() or splitPipeline(): the server pass runs the
|
|
23
|
+
* app's server stages, as a request does, and renders; the page carries the all-routes data and
|
|
24
|
+
* the networked data; the client pass runs the app's client stages, as hydratePipeline() does, and
|
|
25
|
+
* hydrates the parsed HTML. So a component whose markup depends on a context only one side makes
|
|
26
|
+
* shows up in `mismatches`, or throws on a structural difference.
|
|
27
|
+
*/
|
|
28
|
+
export declare function hydrateTestPipelineApp<Props extends TungstenComponentPropsBase, Component extends TungstenBaseComponent<any, any>, RouteData = undefined>(app: PipelineApp<any>, RootComponent: new (pkg: ConstructPackage<Props, RouteData>) => Component, ...args: HydrateTestPipelineAppArgs<Props>): Promise<HydrateTestPipelineApp<Component>>;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=hydrateTestPipelineApp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hydrateTestPipelineApp.d.ts","sourceRoot":"","sources":["../../src/testing/hydrateTestPipelineApp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,gBAAgB,EAAE,qBAAqB,EAAE,0BAA0B,EACtE,MAAM,mBAAmB,CAAA;AAI1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAI1C,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,mCAAmC,CAAA;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAyBzD,MAAM,MAAM,6BAA6B,CAAC,KAAK,SAAS,MAAM,IAAI;IAC9D,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,KAAK,CAAC,EAAE,KAAK,CAAA;IAEb,WAAW,CAAC,EAAE,KAAK,CAAA;IACnB,SAAS,CAAC,EAAE,WAAW,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,SAAS,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAA;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,GAAG,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,sBAAsB,CAAC,SAAS,SAAS,qBAAqB,IACpE,cAAc,CAAC,SAAS,CAAC,CAAA;AAE/B,KAAK,0BAA0B,CAAC,KAAK,SAAS,MAAM,IAAI,MAAM,SAAS,KAAK,GACtE,CAAC,OAAO,CAAC,EAAE,6BAA6B,CAAC,KAAK,CAAC,CAAC,GAChD,MAAM,KAAK,SAAS,KAAK,GACrB,CAAC,OAAO,CAAC,EAAE,6BAA6B,CAAC,KAAK,CAAC,CAAC,GAChD,CAAC,OAAO,EAAE,6BAA6B,CAAC,KAAK,CAAC,GAAG;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC,CAAA;AAiB5E;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CACxC,KAAK,SAAS,0BAA0B,EACxC,SAAS,SAAS,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,EACjD,SAAS,GAAG,SAAS,EAErB,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,EACrB,aAAa,EAAE,KAAK,GAAG,EAAE,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,SAAS,EACzE,GAAG,IAAI,EAAE,0BAA0B,CAAC,KAAK,CAAC,GAC3C,OAAO,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CA+I5C"}
|