tungsten 0.3.2 → 0.3.4
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 -0
- package/dist/Components.d.ts +6 -1
- package/dist/Components.d.ts.map +1 -1
- package/dist/Components.js +103 -40
- package/dist/DomPointer.d.ts +11 -0
- package/dist/DomPointer.d.ts.map +1 -1
- package/dist/DomPointer.js +15 -0
- package/dist/DomRegion.d.ts +2 -0
- package/dist/DomRegion.d.ts.map +1 -1
- package/dist/DomRegion.js +23 -3
- package/dist/Framework.d.ts +2 -0
- package/dist/Framework.d.ts.map +1 -1
- package/dist/Framework.js +94 -61
- package/dist/FrameworkConfig.d.ts +4 -0
- package/dist/FrameworkConfig.d.ts.map +1 -1
- package/dist/Instance/Instance.d.ts +1 -1
- package/dist/Instance/Instance.d.ts.map +1 -1
- package/dist/Instance/Instance.js +18 -1
- package/dist/Instance/InstanceConfig.d.ts +1 -0
- package/dist/Instance/InstanceConfig.d.ts.map +1 -1
- package/dist/PopMessage.type.d.ts +6 -0
- package/dist/PopMessage.type.d.ts.map +1 -0
- package/dist/PopMessage.type.js +1 -0
- package/dist/Servers/DevServer.d.ts +2 -0
- package/dist/Servers/DevServer.d.ts.map +1 -1
- package/dist/Servers/DevServer.js +87 -11
- package/dist/Servers/MatchedRouteInfo.d.ts +1 -1
- package/dist/Servers/MatchedRouteInfo.d.ts.map +1 -1
- package/dist/Servers/ProdServer.d.ts +2 -1
- package/dist/Servers/ProdServer.d.ts.map +1 -1
- package/dist/Servers/ProdServer.js +92 -8
- package/dist/Servers/hono/DevServerHono.js +25 -29
- package/dist/Servers/hono/ProdServerHono.js +49 -142
- package/dist/Servers/hono/TungstenServerHono.d.ts +1 -1
- package/dist/Servers/hono/TungstenServerHono.d.ts.map +1 -1
- package/dist/Servers/hono/TungstenServerHono.js +12 -29
- package/dist/Servers/loadEnvsDev.d.ts.map +1 -1
- package/dist/Servers/loadEnvsDev.js +16 -5
- package/dist/Servers/routing.d.ts.map +1 -1
- package/dist/Servers/routing.js +10 -6
- package/dist/Servers/tungstenCorePrivateEnvSchema.d.ts +0 -3
- package/dist/Servers/tungstenCorePrivateEnvSchema.d.ts.map +1 -1
- package/dist/Servers/tungstenCorePrivateEnvSchema.js +3 -3
- package/dist/Servers/tungstenCorePublicEnvSchema.d.ts +8 -0
- package/dist/Servers/tungstenCorePublicEnvSchema.d.ts.map +1 -0
- package/dist/Servers/tungstenCorePublicEnvSchema.js +14 -0
- package/dist/Store/InternalStoreSchema.d.ts +2 -0
- package/dist/Store/InternalStoreSchema.d.ts.map +1 -1
- package/dist/Store/InternalStoreSchema.js +1 -0
- package/dist/api/Request.d.ts +1 -1
- package/dist/api/Request.d.ts.map +1 -1
- package/dist/api/Response.d.ts +1 -1
- package/dist/api/Response.d.ts.map +1 -1
- package/dist/babelPlugins/BabelExtractComponentStylesheet.d.ts +13 -0
- package/dist/babelPlugins/BabelExtractComponentStylesheet.d.ts.map +1 -0
- package/dist/babelPlugins/BabelExtractComponentStylesheet.js +24 -0
- package/dist/babelPlugins/BabelTransformComponentStyles.d.ts +2 -0
- package/dist/babelPlugins/BabelTransformComponentStyles.d.ts.map +1 -1
- package/dist/babelPlugins/BabelTransformComponentStyles.js +21 -5
- package/dist/babelPlugins/BabelTransformPackageImports.d.ts +1 -0
- package/dist/babelPlugins/BabelTransformPackageImports.d.ts.map +1 -1
- package/dist/babelPlugins/BabelTransformPackageImports.js +21 -9
- package/dist/babelPlugins/BabelTypes.d.ts +2 -2
- package/dist/babelPlugins/BabelTypes.d.ts.map +1 -1
- package/dist/babelPlugins/BabelTypes.js +0 -1
- package/dist/bin/commands/build.d.ts.map +1 -1
- package/dist/bin/commands/build.js +12 -2
- package/dist/bin/commands/compile.d.ts.map +1 -1
- package/dist/bin/commands/compile.js +7 -2
- package/dist/bin/commands/dev.d.ts.map +1 -1
- package/dist/bin/commands/dev.js +15 -4
- package/dist/bin/commands/devmon.d.ts +2 -0
- package/dist/bin/commands/devmon.d.ts.map +1 -0
- package/dist/bin/commands/devmon.js +66 -0
- package/dist/bin/index.d.ts.map +1 -1
- package/dist/bin/index.js +6 -0
- package/dist/booleanAttributeValue.d.ts +21 -0
- package/dist/booleanAttributeValue.d.ts.map +1 -0
- package/dist/booleanAttributeValue.js +23 -0
- package/dist/build/CompilationInfo.d.ts +1 -0
- package/dist/build/CompilationInfo.d.ts.map +1 -1
- package/dist/build/combineComponentCss.d.ts +1 -1
- package/dist/build/combineComponentCss.d.ts.map +1 -1
- package/dist/build/combineComponentCss.js +3 -3
- package/dist/build/compileJavascript.d.ts.map +1 -1
- package/dist/build/compileJavascript.js +3 -3
- package/dist/build/compileUserApp.d.ts +2 -1
- package/dist/build/compileUserApp.d.ts.map +1 -1
- package/dist/build/compileUserApp.js +18 -8
- package/dist/build/createInstanceConfigFile.js +1 -1
- package/dist/build/frameworkStylesheets.d.ts +5 -0
- package/dist/build/frameworkStylesheets.d.ts.map +1 -0
- package/dist/build/frameworkStylesheets.js +49 -0
- package/dist/build/getPackageDirForFile.d.ts +2 -0
- package/dist/build/getPackageDirForFile.d.ts.map +1 -0
- package/dist/build/getPackageDirForFile.js +11 -0
- package/dist/build/getSxyClientPackageAliases.d.ts.map +1 -1
- package/dist/build/getSxyClientPackageAliases.js +3 -1
- package/dist/build/makeBabelUserDevConfig.d.ts +1 -1
- package/dist/build/makeBabelUserDevConfig.d.ts.map +1 -1
- package/dist/build/makeBabelUserDevConfig.js +3 -2
- package/dist/build/makeBabelUserProdConfig.d.ts +1 -1
- package/dist/build/makeBabelUserProdConfig.d.ts.map +1 -1
- package/dist/build/makeBabelUserProdConfig.js +4 -2
- package/dist/build/rollup.user.prod.config.d.ts.map +1 -1
- package/dist/build/rollup.user.prod.config.js +4 -1
- package/dist/build/rollupExtractComponentStylesheets.d.ts +12 -0
- package/dist/build/rollupExtractComponentStylesheets.d.ts.map +1 -0
- package/dist/build/rollupExtractComponentStylesheets.js +35 -0
- package/dist/compat/context.d.ts +1 -1
- package/dist/compat/context.d.ts.map +1 -1
- package/dist/compat/types.d.ts +1 -1
- package/dist/compat/types.d.ts.map +1 -1
- package/dist/componentCss/i/T-components-library-RichTextEditor-RichTextEditor.css +115 -0
- package/dist/componentCss/i/T-components-library-__StatefulMessage-StatefulMessage.css +25 -0
- package/dist/componentCss/tungsten.css +2 -0
- package/dist/componentProxyHandlers.d.ts +2 -1
- package/dist/componentProxyHandlers.d.ts.map +1 -1
- package/dist/componentProxyHandlers.js +45 -9
- package/dist/components/GoToComponent.d.ts +1 -1
- package/dist/components/GoToComponent.d.ts.map +1 -1
- package/dist/components/PopMessages.d.ts +12 -0
- package/dist/components/PopMessages.d.ts.map +1 -0
- package/dist/components/PopMessages.js +45 -0
- package/dist/components/_GoToComponent.d.ts +10 -0
- package/dist/components/_GoToComponent.d.ts.map +1 -0
- package/dist/components/_GoToComponent.js +13 -0
- package/dist/components/library/RichTextEditor/RichTextEditor.d.ts +50 -0
- package/dist/components/library/RichTextEditor/RichTextEditor.d.ts.map +1 -0
- package/dist/components/library/RichTextEditor/RichTextEditor.js +458 -0
- package/dist/components/library/RichTextEditor/StoredContentNode.d.ts +5 -0
- package/dist/components/library/RichTextEditor/StoredContentNode.d.ts.map +1 -0
- package/dist/components/library/RichTextEditor/StoredContentNode.js +1 -0
- package/dist/components/library/RichTextEditor/activeFormats.d.ts +20 -0
- package/dist/components/library/RichTextEditor/activeFormats.d.ts.map +1 -0
- package/dist/components/library/RichTextEditor/activeFormats.js +48 -0
- package/dist/components/library/RichTextEditor/contentTree.d.ts +30 -0
- package/dist/components/library/RichTextEditor/contentTree.d.ts.map +1 -0
- package/dist/components/library/RichTextEditor/contentTree.js +81 -0
- package/dist/components/library/RichTextEditor/sanitizeAuthoredHtml.d.ts +30 -0
- package/dist/components/library/RichTextEditor/sanitizeAuthoredHtml.d.ts.map +1 -0
- package/dist/components/library/RichTextEditor/sanitizeAuthoredHtml.js +97 -0
- package/dist/components/library/__StatefulMessage/MessageData.d.ts +7 -0
- package/dist/components/library/__StatefulMessage/MessageData.d.ts.map +1 -0
- package/dist/components/library/__StatefulMessage/MessageData.js +1 -0
- package/dist/components/library/__StatefulMessage/StatefulMessage.d.ts +22 -0
- package/dist/components/library/__StatefulMessage/StatefulMessage.d.ts.map +1 -0
- package/dist/components/library/__StatefulMessage/StatefulMessage.js +88 -0
- package/dist/components/library/index.d.ts +5 -0
- package/dist/components/library/index.d.ts.map +1 -0
- package/dist/components/library/index.js +7 -0
- package/dist/defaultConfig.d.ts +2 -0
- package/dist/defaultConfig.d.ts.map +1 -1
- package/dist/defaultConfig.js +3 -1
- package/dist/env/Interfaces.d.ts +2 -1
- package/dist/env/Interfaces.d.ts.map +1 -1
- package/dist/env/getEnvSchemas.d.ts +1 -1
- package/dist/env/getEnvSchemas.d.ts.map +1 -1
- package/dist/env/injectEnv.d.ts +1 -1
- package/dist/env/injectEnv.d.ts.map +1 -1
- package/dist/env/injectEnv.js +16 -6
- package/dist/env/publicEnv.d.ts.map +1 -1
- package/dist/env/publicEnv.js +4 -1
- package/dist/findUserConfig.d.ts +1 -1
- package/dist/frameworkConfigSchema.d.ts +4 -0
- package/dist/frameworkConfigSchema.d.ts.map +1 -1
- package/dist/frameworkConfigSchema.js +2 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/useInstance.d.ts +3 -0
- package/dist/hooks/useInstance.d.ts.map +1 -0
- package/dist/hooks/useInstance.js +4 -0
- package/dist/hydrate/hydrate.d.ts +6 -4
- package/dist/hydrate/hydrate.d.ts.map +1 -1
- package/dist/hydrate/hydrate.js +51 -13
- package/dist/hydrate/reconcileHydratedAttributes.d.ts.map +1 -1
- package/dist/hydrate/reconcileHydratedAttributes.js +4 -3
- package/dist/hydrate/renderHydrationMismatchBanner.d.ts +7 -0
- package/dist/hydrate/renderHydrationMismatchBanner.d.ts.map +1 -0
- package/dist/hydrate/renderHydrationMismatchBanner.js +69 -0
- package/dist/indexInner.d.ts +13 -5
- package/dist/indexInner.d.ts.map +1 -1
- package/dist/indexInner.js +9 -2
- package/dist/makeInstanceConfigFromFrameworkConfig.d.ts.map +1 -1
- package/dist/makeInstanceConfigFromFrameworkConfig.js +2 -1
- package/dist/pop.d.ts +10 -0
- package/dist/pop.d.ts.map +1 -0
- package/dist/pop.js +49 -0
- package/dist/postcssPlugins/TransformCssNames.d.ts.map +1 -1
- package/dist/postcssPlugins/TransformCssNames.js +10 -2
- package/dist/propsAreEqual.d.ts +8 -0
- package/dist/propsAreEqual.d.ts.map +1 -0
- package/dist/propsAreEqual.js +97 -0
- package/dist/rawHtml/filterContentNode.d.ts +20 -0
- package/dist/rawHtml/filterContentNode.d.ts.map +1 -0
- package/dist/rawHtml/filterContentNode.js +96 -0
- package/dist/rawHtml/parseHtml.d.ts +14 -0
- package/dist/rawHtml/parseHtml.d.ts.map +1 -1
- package/dist/rawHtml/parseHtml.js +4 -4
- package/dist/rawHtml/sanitizeHtml.d.ts +17 -0
- package/dist/rawHtml/sanitizeHtml.d.ts.map +1 -0
- package/dist/rawHtml/sanitizeHtml.js +19 -0
- package/dist/render/HeadData.d.ts +2 -0
- package/dist/render/HeadData.d.ts.map +1 -1
- package/dist/render/contentNodeToHtml.d.ts +18 -0
- package/dist/render/contentNodeToHtml.d.ts.map +1 -0
- package/dist/render/contentNodeToHtml.js +66 -0
- package/dist/render/contentToHtml.d.ts.map +1 -1
- package/dist/render/contentToHtml.js +3 -1
- package/dist/render/instantiateClassComponent.d.ts.map +1 -1
- package/dist/render/instantiateClassComponent.js +4 -0
- package/dist/render/processHead.d.ts.map +1 -1
- package/dist/render/processHead.js +22 -3
- package/dist/render/renderingTreeToHtml.d.ts.map +1 -1
- package/dist/render/renderingTreeToHtml.js +8 -1
- package/dist/routing/ErrorRouteType.d.ts +6 -0
- package/dist/routing/ErrorRouteType.d.ts.map +1 -0
- package/dist/routing/ErrorRouteType.js +1 -0
- package/dist/routing/RouteTypes.d.ts +2 -1
- package/dist/routing/RouteTypes.d.ts.map +1 -1
- package/dist/routing/Routes.d.ts +5 -0
- package/dist/routing/Routes.d.ts.map +1 -1
- package/dist/routing/TungstenErrorInfo.d.ts +6 -0
- package/dist/routing/TungstenErrorInfo.d.ts.map +1 -0
- package/dist/routing/TungstenErrorInfo.js +6 -0
- package/dist/settings.d.ts +2 -0
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +3 -0
- package/dist/stateTracking.d.ts +47 -0
- package/dist/stateTracking.d.ts.map +1 -0
- package/dist/stateTracking.js +83 -0
- package/dist/staticGen/staticGen.d.ts.map +1 -1
- package/dist/staticGen/staticGen.js +117 -107
- package/dist/style/styleContentSxy.js +21 -0
- package/dist/testing/hydrateTestApp.d.ts +38 -0
- package/dist/testing/hydrateTestApp.d.ts.map +1 -0
- package/dist/testing/hydrateTestApp.js +242 -0
- package/dist/testing/index.d.ts +4 -3
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +16 -2
- package/dist/testing/installTestStyleProcessors.d.ts +2 -0
- package/dist/testing/installTestStyleProcessors.d.ts.map +1 -0
- package/dist/testing/installTestStyleProcessors.js +21 -0
- package/dist/testing/temp/componentPackageMock.d.ts +18 -0
- package/dist/testing/temp/componentPackageMock.d.ts.map +1 -0
- package/dist/testing/temp/componentPackageMock.js +37 -0
- package/dist/testing/temp/contentHtmlElements.d.ts +3 -0
- package/dist/testing/temp/contentHtmlElements.d.ts.map +1 -0
- package/dist/testing/temp/contentHtmlElements.js +12 -0
- package/dist/timeProfiler.d.ts +6 -0
- package/dist/timeProfiler.d.ts.map +1 -0
- package/dist/timeProfiler.js +31 -0
- package/dist/update/integrateUpdateVdom.d.ts +11 -0
- package/dist/update/integrateUpdateVdom.d.ts.map +1 -1
- package/dist/update/integrateUpdateVdom.js +169 -54
- package/dist/update/pendingMounts.d.ts +25 -0
- package/dist/update/pendingMounts.d.ts.map +1 -0
- package/dist/update/pendingMounts.js +55 -0
- package/dist/warnOnFrameworkChange.d.ts.map +1 -1
- package/dist/warnOnFrameworkChange.js +8 -8
- package/package.json +21 -17
- package/dist/FunctionComponentStandIn.sxyt.d.ts +0 -2
- package/dist/FunctionComponentStandIn.sxyt.d.ts.map +0 -1
- package/dist/FunctionComponentStandIn.sxyt.js +0 -52
- package/dist/Instance/gotoRedirect.sxyt.d.ts +0 -2
- package/dist/Instance/gotoRedirect.sxyt.d.ts.map +0 -1
- package/dist/Instance/gotoRedirect.sxyt.js +0 -148
- package/dist/Instance/runTrackedWork.sxyt.d.ts +0 -2
- package/dist/Instance/runTrackedWork.sxyt.d.ts.map +0 -1
- package/dist/Instance/runTrackedWork.sxyt.js +0 -35
- package/dist/Servers/devErrorPageAutoRetry.sxyt.d.ts +0 -2
- package/dist/Servers/devErrorPageAutoRetry.sxyt.d.ts.map +0 -1
- package/dist/Servers/devErrorPageAutoRetry.sxyt.js +0 -117
- package/dist/_client/cjsHelpers.sxyt.d.ts +0 -2
- package/dist/_client/cjsHelpers.sxyt.d.ts.map +0 -1
- package/dist/_client/cjsHelpers.sxyt.js +0 -45
- package/dist/auth/passwordHashing.sxyt.d.ts +0 -2
- package/dist/auth/passwordHashing.sxyt.d.ts.map +0 -1
- package/dist/auth/passwordHashing.sxyt.js +0 -46
- package/dist/auth/ref/checkPasswordResetToken.sxyt.d.ts +0 -2
- package/dist/auth/ref/checkPasswordResetToken.sxyt.d.ts.map +0 -1
- package/dist/auth/ref/checkPasswordResetToken.sxyt.js +0 -40
- package/dist/auth/ref/createPasswordResetToken.sxyt.d.ts +0 -2
- package/dist/auth/ref/createPasswordResetToken.sxyt.d.ts.map +0 -1
- package/dist/auth/ref/createPasswordResetToken.sxyt.js +0 -10
- package/dist/babelPlugins/BabelAddDevCacheBust.sxyt.d.ts +0 -2
- package/dist/babelPlugins/BabelAddDevCacheBust.sxyt.d.ts.map +0 -1
- package/dist/babelPlugins/BabelAddDevCacheBust.sxyt.js +0 -138
- package/dist/babelPlugins/fixImportsInSassErrorMessage.sxyt.d.ts +0 -2
- package/dist/babelPlugins/fixImportsInSassErrorMessage.sxyt.d.ts.map +0 -1
- package/dist/babelPlugins/fixImportsInSassErrorMessage.sxyt.js +0 -108
- package/dist/babelPlugins/transformPackageImports/resolveBareImport.sxyt.d.ts +0 -2
- package/dist/babelPlugins/transformPackageImports/resolveBareImport.sxyt.d.ts.map +0 -1
- package/dist/babelPlugins/transformPackageImports/resolveBareImport.sxyt.js +0 -104
- package/dist/bin/commands/compile.sxyt.d.ts +0 -2
- package/dist/bin/commands/compile.sxyt.d.ts.map +0 -1
- package/dist/bin/commands/compile.sxyt.js +0 -255
- package/dist/build/modifySassImports.sxyt.d.ts +0 -2
- package/dist/build/modifySassImports.sxyt.d.ts.map +0 -1
- package/dist/build/modifySassImports.sxyt.js +0 -55
- package/dist/build/sassImportParser.sxyt.d.ts +0 -2
- package/dist/build/sassImportParser.sxyt.d.ts.map +0 -1
- package/dist/build/sassImportParser.sxyt.js +0 -110
- package/dist/build/scssImportParserChatgpt.sxyt.d.ts +0 -2
- package/dist/build/scssImportParserChatgpt.sxyt.d.ts.map +0 -1
- package/dist/build/scssImportParserChatgpt.sxyt.js +0 -120
- package/dist/clone.sxyt.d.ts +0 -2
- package/dist/clone.sxyt.d.ts.map +0 -1
- package/dist/clone.sxyt.js +0 -24
- package/dist/componentProxyHandlers.sxyt.d.ts +0 -2
- package/dist/componentProxyHandlers.sxyt.d.ts.map +0 -1
- package/dist/componentProxyHandlers.sxyt.js +0 -130
- package/dist/components/RawHtml.sxyt.d.ts +0 -2
- package/dist/components/RawHtml.sxyt.d.ts.map +0 -1
- package/dist/components/RawHtml.sxyt.js +0 -104
- package/dist/components/bindable/BindableSelect.sxyt.d.ts +0 -2
- package/dist/components/bindable/BindableSelect.sxyt.d.ts.map +0 -1
- package/dist/components/bindable/BindableSelect.sxyt.js +0 -186
- package/dist/env/injectEnv.sxyt.d.ts +0 -2
- package/dist/env/injectEnv.sxyt.d.ts.map +0 -1
- package/dist/env/injectEnv.sxyt.js +0 -20
- package/dist/env/parseEnv.d.ts +0 -2
- package/dist/env/parseEnv.d.ts.map +0 -1
- package/dist/env/parseEnv.js +0 -14
- package/dist/env/parseEnv.sxyt.d.ts +0 -2
- package/dist/env/parseEnv.sxyt.d.ts.map +0 -1
- package/dist/env/parseEnv.sxyt.js +0 -11
- package/dist/findProjectDir.sxyt.d.ts +0 -2
- package/dist/findProjectDir.sxyt.d.ts.map +0 -1
- package/dist/findProjectDir.sxyt.js +0 -82
- package/dist/hmr/applyHmrModule.sxyt.d.ts +0 -2
- package/dist/hmr/applyHmrModule.sxyt.d.ts.map +0 -1
- package/dist/hmr/applyHmrModule.sxyt.js +0 -182
- package/dist/hmr/instanceRegistry.sxyt.d.ts +0 -2
- package/dist/hmr/instanceRegistry.sxyt.d.ts.map +0 -1
- package/dist/hmr/instanceRegistry.sxyt.js +0 -24
- package/dist/hmr/refreshStylesheets.sxyt.d.ts +0 -2
- package/dist/hmr/refreshStylesheets.sxyt.d.ts.map +0 -1
- package/dist/hmr/refreshStylesheets.sxyt.js +0 -46
- package/dist/hydrate/hydrate.sxyt.d.ts +0 -2
- package/dist/hydrate/hydrate.sxyt.d.ts.map +0 -1
- package/dist/hydrate/hydrate.sxyt.js +0 -302
- package/dist/hydrate/reconcileHydratedAttributes.sxyt.d.ts +0 -2
- package/dist/hydrate/reconcileHydratedAttributes.sxyt.d.ts.map +0 -1
- package/dist/hydrate/reconcileHydratedAttributes.sxyt.js +0 -190
- package/dist/importDevModuleWithRetry.sxyt.d.ts +0 -2
- package/dist/importDevModuleWithRetry.sxyt.d.ts.map +0 -1
- package/dist/importDevModuleWithRetry.sxyt.js +0 -104
- package/dist/innerHtmlFromProps.sxyt.d.ts +0 -2
- package/dist/innerHtmlFromProps.sxyt.d.ts.map +0 -1
- package/dist/innerHtmlFromProps.sxyt.js +0 -99
- package/dist/postcssPlugins/parseSelectors.sxyt.d.ts +0 -2
- package/dist/postcssPlugins/parseSelectors.sxyt.d.ts.map +0 -1
- package/dist/postcssPlugins/parseSelectors.sxyt.js +0 -62
- package/dist/postcssPlugins/parseSelectorsRich.sxyt.d.ts +0 -2
- package/dist/postcssPlugins/parseSelectorsRich.sxyt.d.ts.map +0 -1
- package/dist/postcssPlugins/parseSelectorsRich.sxyt.js +0 -155
- package/dist/rawHtml/parseHtml.sxyt.d.ts +0 -2
- package/dist/rawHtml/parseHtml.sxyt.d.ts.map +0 -1
- package/dist/rawHtml/parseHtml.sxyt.js +0 -239
- package/dist/render/getFunctionBodyAsString.sxyt.d.ts +0 -2
- package/dist/render/getFunctionBodyAsString.sxyt.d.ts.map +0 -1
- package/dist/render/getFunctionBodyAsString.sxyt.js +0 -37
- package/dist/render/processHead.sxyt.d.ts +0 -2
- package/dist/render/processHead.sxyt.d.ts.map +0 -1
- package/dist/render/processHead.sxyt.js +0 -93
- package/dist/render/processProps.sxyt.d.ts +0 -2
- package/dist/render/processProps.sxyt.d.ts.map +0 -1
- package/dist/render/processProps.sxyt.js +0 -90
- package/dist/routing/compareRequestToRegex.sxyt.d.ts +0 -2
- package/dist/routing/compareRequestToRegex.sxyt.d.ts.map +0 -1
- package/dist/routing/compareRequestToRegex.sxyt.js +0 -65
- package/dist/routing/getPathPriority.sxyt.d.ts +0 -2
- package/dist/routing/getPathPriority.sxyt.d.ts.map +0 -1
- package/dist/routing/getPathPriority.sxyt.js +0 -24
- package/dist/routing/matchPath.sxyt.d.ts +0 -2
- package/dist/routing/matchPath.sxyt.d.ts.map +0 -1
- package/dist/routing/matchPath.sxyt.js +0 -41
- package/dist/routing/patternToRegex.sxyt.d.ts +0 -2
- package/dist/routing/patternToRegex.sxyt.d.ts.map +0 -1
- package/dist/routing/patternToRegex.sxyt.js +0 -69
- package/dist/routing/splitRequest.sxyt.d.ts +0 -2
- package/dist/routing/splitRequest.sxyt.d.ts.map +0 -1
- package/dist/routing/splitRequest.sxyt.js +0 -47
- package/dist/style/jssToCss.sxyt.d.ts +0 -2
- package/dist/style/jssToCss.sxyt.d.ts.map +0 -1
- package/dist/style/jssToCss.sxyt.js +0 -17
- package/dist/testing/createTestApp.sxyt.d.ts +0 -2
- package/dist/testing/createTestApp.sxyt.d.ts.map +0 -1
- package/dist/testing/createTestApp.sxyt.js +0 -470
- package/dist/testing/ensureTestEnvLoaded.sxyt.d.ts +0 -2
- package/dist/testing/ensureTestEnvLoaded.sxyt.d.ts.map +0 -1
- package/dist/testing/ensureTestEnvLoaded.sxyt.js +0 -20
- package/dist/update/hotSwap.sxyt.d.ts +0 -2
- package/dist/update/hotSwap.sxyt.d.ts.map +0 -1
- package/dist/update/hotSwap.sxyt.js +0 -252
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
import { describe } from 'sxy-test-runner';
|
|
2
|
-
import { expect } from 'chai';
|
|
3
|
-
import { Window } from 'happy-dom';
|
|
4
|
-
import { reconcileHydratedAttributes } from "./reconcileHydratedAttributes.js";
|
|
5
|
-
import { $props, $type } from "../contentNodeSymbols.js";
|
|
6
|
-
const window = new Window();
|
|
7
|
-
const node = (type, props) => ({
|
|
8
|
-
[$type]: type,
|
|
9
|
-
[$props]: props
|
|
10
|
-
});
|
|
11
|
-
/** Builds an element from markup the server could have produced. */
|
|
12
|
-
const element = html => {
|
|
13
|
-
const host = window.document.createElement('div');
|
|
14
|
-
host.innerHTML = html;
|
|
15
|
-
// eslint-disable-next-line no-type-assertion/no-type-assertion
|
|
16
|
-
return host.firstElementChild;
|
|
17
|
-
};
|
|
18
|
-
const attributesOf = domNode => Object.fromEntries([...domNode.attributes].map(attribute => [attribute.name, attribute.value]));
|
|
19
|
-
/** Reconciles and returns what changed. */
|
|
20
|
-
const reconcile = (type, props, html) => {
|
|
21
|
-
const domNode = element(html);
|
|
22
|
-
const mismatches = [];
|
|
23
|
-
reconcileHydratedAttributes(node(type, props), domNode, mismatch => mismatches.push(mismatch));
|
|
24
|
-
return {
|
|
25
|
-
domNode,
|
|
26
|
-
mismatches,
|
|
27
|
-
attributes: attributesOf(domNode)
|
|
28
|
-
};
|
|
29
|
-
};
|
|
30
|
-
describe('reconcileHydratedAttributes()', ({
|
|
31
|
-
it
|
|
32
|
-
}) => {
|
|
33
|
-
it('patches an attribute whose rendered value differs from the markup', () => {
|
|
34
|
-
const {
|
|
35
|
-
attributes,
|
|
36
|
-
mismatches
|
|
37
|
-
} = reconcile('div', {
|
|
38
|
-
style: {
|
|
39
|
-
backgroundColor: '#123456'
|
|
40
|
-
}
|
|
41
|
-
}, '<div style="background-color: #bae3ff;"></div>');
|
|
42
|
-
expect(attributes.style).to.equal('background-color: #123456;');
|
|
43
|
-
expect(mismatches.map(mismatch => mismatch.name)).to.deep.equal(['style']);
|
|
44
|
-
});
|
|
45
|
-
it('leaves a matching attribute untouched and reports nothing', () => {
|
|
46
|
-
const {
|
|
47
|
-
attributes,
|
|
48
|
-
mismatches
|
|
49
|
-
} = reconcile('input', {
|
|
50
|
-
name: 'ref',
|
|
51
|
-
title: 'Reference'
|
|
52
|
-
}, '<input name="ref" title="Reference">');
|
|
53
|
-
expect(attributes).to.deep.equal({
|
|
54
|
-
name: 'ref',
|
|
55
|
-
title: 'Reference'
|
|
56
|
-
});
|
|
57
|
-
expect(mismatches).to.deep.equal([]);
|
|
58
|
-
});
|
|
59
|
-
it('adds an attribute the markup is missing', () => {
|
|
60
|
-
const {
|
|
61
|
-
attributes
|
|
62
|
-
} = reconcile('a', {
|
|
63
|
-
href: '/x',
|
|
64
|
-
title: 't'
|
|
65
|
-
}, '<a href="/x"></a>');
|
|
66
|
-
expect(attributes).to.deep.equal({
|
|
67
|
-
href: '/x',
|
|
68
|
-
title: 't'
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
it('removes an attribute the render no longer produces', () => {
|
|
72
|
-
const {
|
|
73
|
-
attributes,
|
|
74
|
-
mismatches
|
|
75
|
-
} = reconcile('a', {
|
|
76
|
-
href: '/x'
|
|
77
|
-
}, '<a href="/x" title="gone"></a>');
|
|
78
|
-
expect(attributes).to.deep.equal({
|
|
79
|
-
href: '/x'
|
|
80
|
-
});
|
|
81
|
-
expect(mismatches.map(mismatch => mismatch.name)).to.deep.equal(['title']);
|
|
82
|
-
});
|
|
83
|
-
it('treats a true boolean as a present, empty attribute', () => {
|
|
84
|
-
expect(reconcile('button', {
|
|
85
|
-
disabled: true
|
|
86
|
-
}, '<button></button>').attributes).to.deep.equal({
|
|
87
|
-
disabled: ''
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
it('removes an attribute whose rendered value is false, null or undefined', () => {
|
|
91
|
-
expect(reconcile('button', {
|
|
92
|
-
disabled: false
|
|
93
|
-
}, '<button disabled></button>').attributes).to.deep.equal({});
|
|
94
|
-
expect(reconcile('a', {
|
|
95
|
-
href: null
|
|
96
|
-
}, '<a href="/x"></a>').attributes).to.deep.equal({});
|
|
97
|
-
expect(reconcile('a', {
|
|
98
|
-
href: undefined
|
|
99
|
-
}, '<a href="/x"></a>').attributes).to.deep.equal({});
|
|
100
|
-
});
|
|
101
|
-
// The comparison has to apply the same transformation the server used, or
|
|
102
|
-
// every element looks mismatched and the whole document gets rewritten.
|
|
103
|
-
it('applies the server prop transform, so className compares against class', () => {
|
|
104
|
-
const {
|
|
105
|
-
attributes,
|
|
106
|
-
mismatches
|
|
107
|
-
} = reconcile('div', {
|
|
108
|
-
className: 'frame Qtc_frame'
|
|
109
|
-
}, '<div class="frame Qtc_frame"></div>');
|
|
110
|
-
expect(attributes).to.deep.equal({
|
|
111
|
-
class: 'frame Qtc_frame'
|
|
112
|
-
});
|
|
113
|
-
expect(mismatches).to.deep.equal([]);
|
|
114
|
-
});
|
|
115
|
-
it('ignores event handlers rather than writing them as attributes', () => {
|
|
116
|
-
const {
|
|
117
|
-
attributes,
|
|
118
|
-
mismatches
|
|
119
|
-
} = reconcile('input', {
|
|
120
|
-
name: 'a',
|
|
121
|
-
onInput: () => undefined,
|
|
122
|
-
onClick: () => undefined
|
|
123
|
-
}, '<input name="a">');
|
|
124
|
-
expect(attributes).to.deep.equal({
|
|
125
|
-
name: 'a'
|
|
126
|
-
});
|
|
127
|
-
expect(mismatches).to.deep.equal([]);
|
|
128
|
-
});
|
|
129
|
-
it('ignores props that are instructions to Tungsten', () => {
|
|
130
|
-
const {
|
|
131
|
-
attributes,
|
|
132
|
-
mismatches
|
|
133
|
-
} = reconcile('div', {
|
|
134
|
-
__opaque: true,
|
|
135
|
-
dangerouslySetInnerHTML: {
|
|
136
|
-
__html: '<b>x</b>'
|
|
137
|
-
},
|
|
138
|
-
id: 'd'
|
|
139
|
-
}, '<div id="d"></div>');
|
|
140
|
-
expect(attributes).to.deep.equal({
|
|
141
|
-
id: 'd'
|
|
142
|
-
});
|
|
143
|
-
expect(mismatches).to.deep.equal([]);
|
|
144
|
-
});
|
|
145
|
-
// children is rendered content, not an attribute - the server renderer and the client
|
|
146
|
-
// update path both strip it before comparing/writing attributes, and hydration has to
|
|
147
|
-
// match or it writes the stringified child list (e.g. "[object Object],[object Object]")
|
|
148
|
-
// onto every element in the page as a literal "children" attribute.
|
|
149
|
-
it('does not write children as an attribute', () => {
|
|
150
|
-
const {
|
|
151
|
-
attributes,
|
|
152
|
-
mismatches
|
|
153
|
-
} = reconcile('div', {
|
|
154
|
-
id: 'd',
|
|
155
|
-
children: ['a', 'b']
|
|
156
|
-
}, '<div id="d"></div>');
|
|
157
|
-
expect(attributes).to.deep.equal({
|
|
158
|
-
id: 'd'
|
|
159
|
-
});
|
|
160
|
-
expect(mismatches).to.deep.equal([]);
|
|
161
|
-
});
|
|
162
|
-
it('reports what changed, for a dev-mode warning', () => {
|
|
163
|
-
const {
|
|
164
|
-
mismatches
|
|
165
|
-
} = reconcile('a', {
|
|
166
|
-
href: '/new'
|
|
167
|
-
}, '<a href="/old" title="stale"></a>');
|
|
168
|
-
expect(mismatches).to.deep.include({
|
|
169
|
-
name: 'href',
|
|
170
|
-
expected: '/new',
|
|
171
|
-
actual: '/old'
|
|
172
|
-
});
|
|
173
|
-
expect(mismatches).to.deep.include({
|
|
174
|
-
name: 'title',
|
|
175
|
-
expected: null,
|
|
176
|
-
actual: 'stale'
|
|
177
|
-
});
|
|
178
|
-
});
|
|
179
|
-
it('clears the checked property when removing a checked attribute', () => {
|
|
180
|
-
const domNode = element('<input type="checkbox" checked>');
|
|
181
|
-
// eslint-disable-next-line no-type-assertion/no-type-assertion
|
|
182
|
-
const checkbox = domNode;
|
|
183
|
-
expect(checkbox.checked).to.equal(true);
|
|
184
|
-
reconcileHydratedAttributes(node('input', {
|
|
185
|
-
type: 'checkbox'
|
|
186
|
-
}), domNode);
|
|
187
|
-
expect(checkbox.checked).to.equal(false);
|
|
188
|
-
expect(domNode.hasAttribute('checked')).to.equal(false);
|
|
189
|
-
});
|
|
190
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"importDevModuleWithRetry.sxyt.d.ts","sourceRoot":"","sources":["../src/importDevModuleWithRetry.sxyt.ts"],"names":[],"mappings":""}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { expect } from 'chai';
|
|
2
|
-
import { describe } from 'sxy-test-runner';
|
|
3
|
-
import { mkdtemp, rm, writeFile } from 'fs/promises';
|
|
4
|
-
import { tmpdir } from 'os';
|
|
5
|
-
import { join } from 'path';
|
|
6
|
-
import { importDevModuleWithRetry, isTransientDevModuleError } from "./importDevModuleWithRetry.js";
|
|
7
|
-
function delay(ms) {
|
|
8
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
9
|
-
}
|
|
10
|
-
async function makeFixture() {
|
|
11
|
-
const dir = await mkdtemp(join(tmpdir(), 'tungsten-import-dev-module-retry-'));
|
|
12
|
-
const depPath = join(dir, 'dep.mjs');
|
|
13
|
-
const entryPath = join(dir, 'entry.mjs');
|
|
14
|
-
// dep.mjs never changes - it's the entry file itself that's momentarily
|
|
15
|
-
// stale on disk, exactly like Home.js briefly still reading its
|
|
16
|
-
// pre-rename import statement while Button.js has already been rewritten
|
|
17
|
-
await writeFile(depPath, `export const NewName = 2\n`);
|
|
18
|
-
await writeFile(entryPath, `export { OldName as NewName } from './dep.mjs'\n`);
|
|
19
|
-
return {
|
|
20
|
-
dir,
|
|
21
|
-
depPath,
|
|
22
|
-
entryPath
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
describe('importDevModuleWithRetry()', ({
|
|
26
|
-
it
|
|
27
|
-
}) => {
|
|
28
|
-
it(`rides out a transient module-shape mismatch, succeeding once the entry file itself catches up`, async () => {
|
|
29
|
-
const {
|
|
30
|
-
dir,
|
|
31
|
-
entryPath
|
|
32
|
-
} = await makeFixture();
|
|
33
|
-
try {
|
|
34
|
-
// simulate the entry file's own recompile (e.g. babel finishing
|
|
35
|
-
// its pass over Home.tsx) landing a little after this request
|
|
36
|
-
// started - the exact race this helper exists for
|
|
37
|
-
void delay(150).then(() => writeFile(entryPath, `export { NewName } from './dep.mjs'\n`));
|
|
38
|
-
const module = await importDevModuleWithRetry(`file://${entryPath}`, 10, 50);
|
|
39
|
-
expect(module.NewName).to.equal(2);
|
|
40
|
-
} finally {
|
|
41
|
-
await rm(dir, {
|
|
42
|
-
recursive: true,
|
|
43
|
-
force: true
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
it(`gives up and throws the real error once attempts are exhausted`, async () => {
|
|
48
|
-
const {
|
|
49
|
-
dir,
|
|
50
|
-
entryPath
|
|
51
|
-
} = await makeFixture();
|
|
52
|
-
try {
|
|
53
|
-
let threw = false;
|
|
54
|
-
try {
|
|
55
|
-
await importDevModuleWithRetry(`file://${entryPath}`, 3, 20);
|
|
56
|
-
} catch (e) {
|
|
57
|
-
threw = true;
|
|
58
|
-
expect(String(e)).to.contain('does not provide an export');
|
|
59
|
-
}
|
|
60
|
-
expect(threw).to.equal(true);
|
|
61
|
-
} finally {
|
|
62
|
-
await rm(dir, {
|
|
63
|
-
recursive: true,
|
|
64
|
-
force: true
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
it(`does not retry a genuine, unrelated error - so real bugs still surface immediately`, async () => {
|
|
69
|
-
const dir = await mkdtemp(join(tmpdir(), 'tungsten-import-dev-module-retry-real-error-'));
|
|
70
|
-
try {
|
|
71
|
-
const brokenPath = join(dir, 'broken.mjs');
|
|
72
|
-
await writeFile(brokenPath, `this is not valid javascript {{{\n`);
|
|
73
|
-
const start = Date.now();
|
|
74
|
-
let threw = false;
|
|
75
|
-
try {
|
|
76
|
-
await importDevModuleWithRetry(`file://${brokenPath}`, 10, 200);
|
|
77
|
-
} catch {
|
|
78
|
-
threw = true;
|
|
79
|
-
}
|
|
80
|
-
expect(threw).to.equal(true);
|
|
81
|
-
// a real syntax error must not be retried - if it were, this would
|
|
82
|
-
// take multiple * 200ms delays instead of failing on the first attempt
|
|
83
|
-
expect(Date.now() - start).to.be.lessThan(200);
|
|
84
|
-
} finally {
|
|
85
|
-
await rm(dir, {
|
|
86
|
-
recursive: true,
|
|
87
|
-
force: true
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
describe('isTransientDevModuleError()', ({
|
|
93
|
-
it
|
|
94
|
-
}) => {
|
|
95
|
-
it(`recognizes a bare "X is not defined" ReferenceError - the within-file version of the same race, seen live when a file's JSX still referenced a just-renamed import mid-multi-step-edit`, () => {
|
|
96
|
-
expect(isTransientDevModuleError(new ReferenceError('Button is not defined'))).to.equal(true);
|
|
97
|
-
});
|
|
98
|
-
it('does not match a differently-shaped ReferenceError, to stay a narrow signal', () => {
|
|
99
|
-
expect(isTransientDevModuleError(new ReferenceError('Cannot access X before initialization'))).to.equal(false);
|
|
100
|
-
});
|
|
101
|
-
it('does not match an unrelated TypeError', () => {
|
|
102
|
-
expect(isTransientDevModuleError(new TypeError(`Cannot read properties of undefined (reading 'foo')`))).to.equal(false);
|
|
103
|
-
});
|
|
104
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"innerHtmlFromProps.sxyt.d.ts","sourceRoot":"","sources":["../src/innerHtmlFromProps.sxyt.ts"],"names":[],"mappings":""}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { describe } from 'sxy-test-runner';
|
|
2
|
-
import { expect } from 'chai';
|
|
3
|
-
import { innerHtmlFromProps } from "./innerHtmlFromProps.js";
|
|
4
|
-
import { renderingNodeToHtml } from "./render/renderingTreeToHtml.js";
|
|
5
|
-
import { $props, $type } from "./contentNodeSymbols.js";
|
|
6
|
-
const props = value => value;
|
|
7
|
-
// `found: true` short-circuits the <head> handling, which is all these
|
|
8
|
-
// element-level tests need from HeadData.
|
|
9
|
-
// eslint-disable-next-line no-type-assertion/no-type-assertion
|
|
10
|
-
const noHeadData = {
|
|
11
|
-
found: true
|
|
12
|
-
};
|
|
13
|
-
const renderHtml = (type, nodeProps) => renderingNodeToHtml(
|
|
14
|
-
// eslint-disable-next-line no-type-assertion/no-type-assertion
|
|
15
|
-
{
|
|
16
|
-
[$type]: type,
|
|
17
|
-
[$props]: nodeProps
|
|
18
|
-
}, false, noHeadData, null);
|
|
19
|
-
describe('innerHtmlFromProps()', ({
|
|
20
|
-
it
|
|
21
|
-
}) => {
|
|
22
|
-
it('returns null when the element does not use dangerouslySetInnerHTML', () => {
|
|
23
|
-
expect(innerHtmlFromProps('div', props({
|
|
24
|
-
children: 'hello'
|
|
25
|
-
}), true)).to.equal(null);
|
|
26
|
-
});
|
|
27
|
-
it('returns the raw markup', () => {
|
|
28
|
-
expect(innerHtmlFromProps('div', props({
|
|
29
|
-
dangerouslySetInnerHTML: {
|
|
30
|
-
__html: '<b>hi</b>'
|
|
31
|
-
}
|
|
32
|
-
}), false)).to.equal('<b>hi</b>');
|
|
33
|
-
});
|
|
34
|
-
it('rejects an element carrying both raw markup and children', () => {
|
|
35
|
-
expect(() => innerHtmlFromProps('div', props({
|
|
36
|
-
dangerouslySetInnerHTML: {
|
|
37
|
-
__html: '<b>hi</b>'
|
|
38
|
-
},
|
|
39
|
-
children: 'hello'
|
|
40
|
-
}), true)).to.throw(/both dangerouslySetInnerHTML and children/);
|
|
41
|
-
});
|
|
42
|
-
it('rejects a prop that is not of the form { __html }', () => {
|
|
43
|
-
// eslint-disable-next-line no-type-assertion/no-type-assertion
|
|
44
|
-
const bad = {
|
|
45
|
-
dangerouslySetInnerHTML: '<b>hi</b>'
|
|
46
|
-
};
|
|
47
|
-
expect(() => innerHtmlFromProps('div', bad, false)).to.throw(/{ __html: '...' }/);
|
|
48
|
-
});
|
|
49
|
-
it('rejects a null or undefined __html', () => {
|
|
50
|
-
// eslint-disable-next-line no-type-assertion/no-type-assertion
|
|
51
|
-
const nulled = {
|
|
52
|
-
dangerouslySetInnerHTML: {
|
|
53
|
-
__html: null
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
expect(() => innerHtmlFromProps('div', nulled, false)).to.throw(/__html is null/);
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
describe('dangerouslySetInnerHTML rendering', ({
|
|
60
|
-
it
|
|
61
|
-
}) => {
|
|
62
|
-
it('writes the markup into the element unescaped', async () => {
|
|
63
|
-
expect(await renderHtml('div', {
|
|
64
|
-
dangerouslySetInnerHTML: {
|
|
65
|
-
__html: '<p>Bonuses.</p>'
|
|
66
|
-
}
|
|
67
|
-
})).to.equal('<div><p>Bonuses.</p></div>');
|
|
68
|
-
});
|
|
69
|
-
it('does not leak the prop into the markup as an attribute', async () => {
|
|
70
|
-
const html = await renderHtml('div', {
|
|
71
|
-
id: 'tip',
|
|
72
|
-
dangerouslySetInnerHTML: {
|
|
73
|
-
__html: '<b>hi</b>'
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
expect(html).to.not.include('dangerouslySetInnerHTML');
|
|
77
|
-
expect(html).to.not.include('[object Object]');
|
|
78
|
-
expect(html).to.equal('<div id="tip"><b>hi</b></div>');
|
|
79
|
-
});
|
|
80
|
-
it('escapes ordinary children, so the switch is per element', async () => {
|
|
81
|
-
expect(await renderHtml('div', {
|
|
82
|
-
children: '<p>Bonuses.</p>'
|
|
83
|
-
})).to.equal('<div><p>Bonuses.</p></div>');
|
|
84
|
-
});
|
|
85
|
-
it('rejects raw markup on a void element', async () => {
|
|
86
|
-
let thrown = null;
|
|
87
|
-
try {
|
|
88
|
-
await renderHtml('br', {
|
|
89
|
-
dangerouslySetInnerHTML: {
|
|
90
|
-
__html: '<b>hi</b>'
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
} catch (error) {
|
|
94
|
-
thrown = error;
|
|
95
|
-
}
|
|
96
|
-
expect(thrown).to.be.an('error');
|
|
97
|
-
expect(thrown.message).to.include('void type');
|
|
98
|
-
});
|
|
99
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parseSelectors.sxyt.d.ts","sourceRoot":"","sources":["../../src/postcssPlugins/parseSelectors.sxyt.ts"],"names":[],"mappings":""}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { describe } from 'sxy-test-runner';
|
|
2
|
-
import { parseSelectors } from "./parseSelectors.js";
|
|
3
|
-
describe('parseSelectors()', ({
|
|
4
|
-
it
|
|
5
|
-
}) => {
|
|
6
|
-
const input = 'html';
|
|
7
|
-
it(`parses out a tag selector from '${input}'`, () => {
|
|
8
|
-
const selectors = parseSelectors(input);
|
|
9
|
-
selectors.should.deep.equal(['html']);
|
|
10
|
-
});
|
|
11
|
-
const input2 = 'html body';
|
|
12
|
-
it(`parses out two tag selectors from '${input2}'`, () => {
|
|
13
|
-
const selectors = parseSelectors(input2);
|
|
14
|
-
selectors.should.deep.equal(['html', 'body']);
|
|
15
|
-
});
|
|
16
|
-
const input3 = '.foo';
|
|
17
|
-
it(`parses out a class selector from '${input3}'`, () => {
|
|
18
|
-
const selectors = parseSelectors(input3);
|
|
19
|
-
selectors.should.deep.equal(['.foo']);
|
|
20
|
-
});
|
|
21
|
-
const input4 = ' .foo ';
|
|
22
|
-
it(`parses out a class selector with whitespace from '${input4}'`, () => {
|
|
23
|
-
const selectors = parseSelectors(input4);
|
|
24
|
-
selectors.should.deep.equal(['.foo']);
|
|
25
|
-
});
|
|
26
|
-
const input5 = '.foo .bar';
|
|
27
|
-
it(`parses out a two class selectors from '${input5}'`, () => {
|
|
28
|
-
const selectors = parseSelectors(input5);
|
|
29
|
-
selectors.should.deep.equal(['.foo', '.bar']);
|
|
30
|
-
});
|
|
31
|
-
const input6 = 'html.bar';
|
|
32
|
-
it(`parses out connected tag and class '${input6}'`, () => {
|
|
33
|
-
const selectors = parseSelectors(input6);
|
|
34
|
-
selectors.should.deep.equal(['html', '.bar']);
|
|
35
|
-
});
|
|
36
|
-
const input7 = '.foo.bar';
|
|
37
|
-
it(`parses out connected classes '${input7}'`, () => {
|
|
38
|
-
const selectors = parseSelectors(input7);
|
|
39
|
-
selectors.should.deep.equal(['.foo', '.bar']);
|
|
40
|
-
});
|
|
41
|
-
const input8 = 'html#foo.bar';
|
|
42
|
-
it(`parses out connected tag, id and class '${input8}'`, () => {
|
|
43
|
-
const selectors = parseSelectors(input8);
|
|
44
|
-
selectors.should.deep.equal(['html', '#foo', '.bar']);
|
|
45
|
-
});
|
|
46
|
-
const input9 = 'html[lang="en"]';
|
|
47
|
-
it(`parses out tag with attribute selector from '${input9}'`, () => {
|
|
48
|
-
const selectors = parseSelectors(input9);
|
|
49
|
-
selectors.should.deep.equal(['html', '[lang="en"]']);
|
|
50
|
-
});
|
|
51
|
-
const input10 = ':i(div)';
|
|
52
|
-
it(`parses out :i pseudo '${input10}'`, () => {
|
|
53
|
-
const selectors = parseSelectors(input10);
|
|
54
|
-
selectors.should.deep.equal([':i(div)']);
|
|
55
|
-
});
|
|
56
|
-
const input11 = 'html :i(div)';
|
|
57
|
-
it(`parses out tag then :i pseudo '${input11}'`, () => {
|
|
58
|
-
const selectors = parseSelectors(input11);
|
|
59
|
-
//console.log('selectors', selectors)
|
|
60
|
-
selectors.should.deep.equal(['html', ':i(div)']);
|
|
61
|
-
});
|
|
62
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parseSelectorsRich.sxyt.d.ts","sourceRoot":"","sources":["../../src/postcssPlugins/parseSelectorsRich.sxyt.ts"],"names":[],"mappings":""}
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
import { describe } from 'sxy-test-runner';
|
|
2
|
-
import { parseSelectorsRich } from "./parseSelectorsRich.js";
|
|
3
|
-
function tagSelector(tag) {
|
|
4
|
-
return {
|
|
5
|
-
type: 'tag',
|
|
6
|
-
content: tag,
|
|
7
|
-
valid: true
|
|
8
|
-
};
|
|
9
|
-
}
|
|
10
|
-
function idSelector(id) {
|
|
11
|
-
return {
|
|
12
|
-
type: 'id',
|
|
13
|
-
content: id,
|
|
14
|
-
valid: true
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
function classSelector(className) {
|
|
18
|
-
return {
|
|
19
|
-
type: 'class',
|
|
20
|
-
content: className,
|
|
21
|
-
valid: true
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
function pseudoSelector(pesudo) {
|
|
25
|
-
return {
|
|
26
|
-
type: 'pseudo-class',
|
|
27
|
-
content: pesudo,
|
|
28
|
-
valid: true
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
function pseudoElementSelector(pseudoElement) {
|
|
32
|
-
return {
|
|
33
|
-
type: 'pseudo-element',
|
|
34
|
-
content: pseudoElement,
|
|
35
|
-
valid: true
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
function attributeSelector(attribute) {
|
|
39
|
-
return {
|
|
40
|
-
type: 'attribute',
|
|
41
|
-
content: attribute,
|
|
42
|
-
valid: true
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
function whitespace() {
|
|
46
|
-
return {
|
|
47
|
-
type: 'whitespace',
|
|
48
|
-
content: ' ',
|
|
49
|
-
valid: true
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
describe('parseSelectorsRich()', ({
|
|
53
|
-
it
|
|
54
|
-
}) => {
|
|
55
|
-
const input = 'html';
|
|
56
|
-
it(`parses out a tag selector from '${input}'`, () => {
|
|
57
|
-
const selectors = parseSelectorsRich(input);
|
|
58
|
-
selectors.should.deep.equal([tagSelector('html')]);
|
|
59
|
-
});
|
|
60
|
-
const input2 = 'html body';
|
|
61
|
-
it(`parses out two tag selectors from '${input2}'`, () => {
|
|
62
|
-
const selectors = parseSelectorsRich(input2);
|
|
63
|
-
// console.log('selectors', selectors)
|
|
64
|
-
// console.log('expected', [
|
|
65
|
-
// tagSelector('html'),
|
|
66
|
-
// tagSelector('body')
|
|
67
|
-
// ])
|
|
68
|
-
selectors.should.deep.equal([tagSelector('html'), whitespace(), tagSelector('body')]);
|
|
69
|
-
});
|
|
70
|
-
const input3 = '.foo';
|
|
71
|
-
it(`parses out a class selector from '${input3}'`, () => {
|
|
72
|
-
const selectors = parseSelectorsRich(input3);
|
|
73
|
-
selectors.should.deep.equal([classSelector('.foo')]);
|
|
74
|
-
});
|
|
75
|
-
const input4 = ' .foo ';
|
|
76
|
-
it(`parses out a class selector with whitespace from '${input4}'`, () => {
|
|
77
|
-
const selectors = parseSelectorsRich(input4);
|
|
78
|
-
selectors.should.deep.equal([whitespace(), classSelector('.foo'), whitespace()]);
|
|
79
|
-
});
|
|
80
|
-
const input5 = '.foo .bar';
|
|
81
|
-
it(`parses out a two class selectors from '${input5}'`, () => {
|
|
82
|
-
const selectors = parseSelectorsRich(input5);
|
|
83
|
-
selectors.should.deep.equal([classSelector('.foo'), whitespace(), classSelector('.bar')]);
|
|
84
|
-
});
|
|
85
|
-
const input6 = 'html.bar';
|
|
86
|
-
it(`parses out connected tag and class '${input6}'`, () => {
|
|
87
|
-
const selectors = parseSelectorsRich(input6);
|
|
88
|
-
selectors.should.deep.equal([tagSelector('html'), classSelector('.bar')]);
|
|
89
|
-
});
|
|
90
|
-
const input7 = '.foo.bar';
|
|
91
|
-
it(`parses out connected classes '${input7}'`, () => {
|
|
92
|
-
const selectors = parseSelectorsRich(input7);
|
|
93
|
-
selectors.should.deep.equal([classSelector('.foo'), classSelector('.bar')]);
|
|
94
|
-
});
|
|
95
|
-
const input8 = 'html#foo.bar';
|
|
96
|
-
it(`parses out connected tag, id and class '${input8}'`, () => {
|
|
97
|
-
const selectors = parseSelectorsRich(input8);
|
|
98
|
-
selectors.should.deep.equal([tagSelector('html'), idSelector('#foo'), classSelector('.bar')]);
|
|
99
|
-
});
|
|
100
|
-
const input9 = 'html[lang="en"]';
|
|
101
|
-
it(`parses out tag with attribute selector from '${input9}'`, () => {
|
|
102
|
-
const selectors = parseSelectorsRich(input9);
|
|
103
|
-
// console.log(JSON.stringify(selectors))
|
|
104
|
-
// console.log(JSON.stringify([
|
|
105
|
-
// tagSelector('html'),
|
|
106
|
-
// attributeSelector('[lang="en"]')
|
|
107
|
-
// ]))
|
|
108
|
-
selectors.should.deep.equal([tagSelector('html'), attributeSelector('[lang="en"]')]);
|
|
109
|
-
});
|
|
110
|
-
const input10 = 'html[lang="en"]';
|
|
111
|
-
it(`parses out tag with attribute selector from '${input10}'`, () => {
|
|
112
|
-
const selectors = parseSelectorsRich(input10);
|
|
113
|
-
// console.log(JSON.stringify(selectors))
|
|
114
|
-
// console.log(JSON.stringify([
|
|
115
|
-
// tagSelector('html'),
|
|
116
|
-
// attributeSelector('[lang="en"]')
|
|
117
|
-
// ]))
|
|
118
|
-
selectors.should.deep.equal([tagSelector('html'), attributeSelector('[lang="en"]')]);
|
|
119
|
-
});
|
|
120
|
-
const input11 = 'a:hover';
|
|
121
|
-
it(`parses out :hover pseudo on an anchor in '${input11}'`, () => {
|
|
122
|
-
const selectors = parseSelectorsRich(input11);
|
|
123
|
-
// console.log(JSON.stringify(selectors))
|
|
124
|
-
// console.log(JSON.stringify([
|
|
125
|
-
// tagSelector('a'),
|
|
126
|
-
// pseudoSelector(':hover')
|
|
127
|
-
// ]))
|
|
128
|
-
selectors.should.deep.equal([tagSelector('a'), pseudoSelector(':hover')]);
|
|
129
|
-
});
|
|
130
|
-
const input12 = ':i(div)';
|
|
131
|
-
it(`parses out :i pseudo '${input12}'`, () => {
|
|
132
|
-
const selectors = parseSelectorsRich(input12);
|
|
133
|
-
selectors.should.deep.equal([pseudoSelector(':i(div)')]);
|
|
134
|
-
});
|
|
135
|
-
const input13 = 'html :i(div)';
|
|
136
|
-
it(`parses out tag then :i pseudo '${input13}'`, () => {
|
|
137
|
-
const selectors = parseSelectorsRich(input13);
|
|
138
|
-
selectors.should.deep.equal([tagSelector('html'), whitespace(), pseudoSelector(':i(div)')]);
|
|
139
|
-
});
|
|
140
|
-
const input14 = 'summary::before';
|
|
141
|
-
it(`parses out a pseudo-element from '${input14}'`, () => {
|
|
142
|
-
const selectors = parseSelectorsRich(input14);
|
|
143
|
-
selectors.should.deep.equal([tagSelector('summary'), pseudoElementSelector('::before')]);
|
|
144
|
-
});
|
|
145
|
-
const input15 = 'summary::-webkit-details-marker';
|
|
146
|
-
it(`parses out a vendor prefixed pseudo-element from '${input15}'`, () => {
|
|
147
|
-
const selectors = parseSelectorsRich(input15);
|
|
148
|
-
selectors.should.deep.equal([tagSelector('summary'), pseudoElementSelector('::-webkit-details-marker')]);
|
|
149
|
-
});
|
|
150
|
-
const input16 = 'input:-moz-focusring';
|
|
151
|
-
it(`parses out a vendor prefixed pseudo-class from '${input16}'`, () => {
|
|
152
|
-
const selectors = parseSelectorsRich(input16);
|
|
153
|
-
selectors.should.deep.equal([tagSelector('input'), pseudoSelector(':-moz-focusring')]);
|
|
154
|
-
});
|
|
155
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parseHtml.sxyt.d.ts","sourceRoot":"","sources":["../../src/rawHtml/parseHtml.sxyt.ts"],"names":[],"mappings":""}
|