@wix/web5-core 1.56.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/README.md +8 -0
- package/dist/cjs/client/clientBundleOverride.js +48 -0
- package/dist/cjs/client/clientBundleOverride.js.map +1 -0
- package/dist/cjs/client/devEnvironment.js +4 -0
- package/dist/cjs/client/devEnvironment.js.map +1 -0
- package/dist/cjs/client/loadClientBundle.js +85 -0
- package/dist/cjs/client/loadClientBundle.js.map +1 -0
- package/dist/cjs/client/wixAuthFetch.js +73 -0
- package/dist/cjs/client/wixAuthFetch.js.map +1 -0
- package/dist/cjs/clients.js +15 -0
- package/dist/cjs/clients.js.map +1 -0
- package/dist/cjs/color/colorUtils.js +126 -0
- package/dist/cjs/color/colorUtils.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/CalloutSectionDefinition.js +67 -0
- package/dist/cjs/component/componentDefinitions/CalloutSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/ComparisonSectionDefinition.js +141 -0
- package/dist/cjs/component/componentDefinitions/ComparisonSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/CtaBannerSectionDefinition.js +85 -0
- package/dist/cjs/component/componentDefinitions/CtaBannerSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/EntitySectionDefinition.js +171 -0
- package/dist/cjs/component/componentDefinitions/EntitySectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/ErrorSectionDefinition.js +81 -0
- package/dist/cjs/component/componentDefinitions/ErrorSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/FallbackSectionDefinition.js +29 -0
- package/dist/cjs/component/componentDefinitions/FallbackSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/FeatureCardsSectionDefinition.js +119 -0
- package/dist/cjs/component/componentDefinitions/FeatureCardsSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/FeatureSection9PlusDefinition.js +75 -0
- package/dist/cjs/component/componentDefinitions/FeatureSection9PlusDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/HeroEntitySectionDefinition.js +124 -0
- package/dist/cjs/component/componentDefinitions/HeroEntitySectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/HeroSectionDefinition.js +209 -0
- package/dist/cjs/component/componentDefinitions/HeroSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/HtmlCommentSectionDefinition.js +19 -0
- package/dist/cjs/component/componentDefinitions/HtmlCommentSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/KpiSectionDefinition.js +114 -0
- package/dist/cjs/component/componentDefinitions/KpiSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/NextStepsSectionDefinition.js +136 -0
- package/dist/cjs/component/componentDefinitions/NextStepsSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/SearchSectionDefinition.js +18 -0
- package/dist/cjs/component/componentDefinitions/SearchSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/SkipNodesSectionDefinition.js +20 -0
- package/dist/cjs/component/componentDefinitions/SkipNodesSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/TextBlockSectionDefinition.js +65 -0
- package/dist/cjs/component/componentDefinitions/TextBlockSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/index.js +48 -0
- package/dist/cjs/component/componentDefinitions/index.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/listItemsSectionDefinition.js +86 -0
- package/dist/cjs/component/componentDefinitions/listItemsSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/parse-utils.js +434 -0
- package/dist/cjs/component/componentDefinitions/parse-utils.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/specHelpers.js +36 -0
- package/dist/cjs/component/componentDefinitions/specHelpers.js.map +1 -0
- package/dist/cjs/component/componentParser.js +365 -0
- package/dist/cjs/component/componentParser.js.map +1 -0
- package/dist/cjs/component/diagnosticTypes.js +30 -0
- package/dist/cjs/component/diagnosticTypes.js.map +1 -0
- package/dist/cjs/component/parser-types.js +4 -0
- package/dist/cjs/component/parser-types.js.map +1 -0
- package/dist/cjs/component/section-definition.js +4 -0
- package/dist/cjs/component/section-definition.js.map +1 -0
- package/dist/cjs/component/types.js +4 -0
- package/dist/cjs/component/types.js.map +1 -0
- package/dist/cjs/components/placement/PlacementPayloadContext.js +29 -0
- package/dist/cjs/components/placement/PlacementPayloadContext.js.map +1 -0
- package/dist/cjs/components/placement/PlacementResponseRenderer.css +269 -0
- package/dist/cjs/components/placement/PlacementResponseRenderer.js +259 -0
- package/dist/cjs/components/placement/PlacementResponseRenderer.js.map +1 -0
- package/dist/cjs/components/placement/buildPlacementDependencies.js +214 -0
- package/dist/cjs/components/placement/buildPlacementDependencies.js.map +1 -0
- package/dist/cjs/components/ui/BottomContainer.js +26 -0
- package/dist/cjs/components/ui/BottomContainer.js.map +1 -0
- package/dist/cjs/components/ui/CalloutBlock.js +156 -0
- package/dist/cjs/components/ui/CalloutBlock.js.map +1 -0
- package/dist/cjs/components/ui/Disclaimer.css +35 -0
- package/dist/cjs/components/ui/Disclaimer.js +56 -0
- package/dist/cjs/components/ui/Disclaimer.js.map +1 -0
- package/dist/cjs/components/ui/FeedbackBar.css +267 -0
- package/dist/cjs/components/ui/FeedbackBar.js +417 -0
- package/dist/cjs/components/ui/FeedbackBar.js.map +1 -0
- package/dist/cjs/components/ui/Loader.js +73 -0
- package/dist/cjs/components/ui/Loader.js.map +1 -0
- package/dist/cjs/components/ui/MarkdownText.js +419 -0
- package/dist/cjs/components/ui/MarkdownText.js.map +1 -0
- package/dist/cjs/components/ui/OptimizedImage.js +414 -0
- package/dist/cjs/components/ui/OptimizedImage.js.map +1 -0
- package/dist/cjs/components/ui/PlacementLoader.css +101 -0
- package/dist/cjs/components/ui/PlacementLoader.js +62 -0
- package/dist/cjs/components/ui/PlacementLoader.js.map +1 -0
- package/dist/cjs/components/ui/PromptEntryEmptyState.css +172 -0
- package/dist/cjs/components/ui/PromptEntryEmptyState.js +96 -0
- package/dist/cjs/components/ui/PromptEntryEmptyState.js.map +1 -0
- package/dist/cjs/components/ui/SearchSection.css +538 -0
- package/dist/cjs/components/ui/SearchSection.js +550 -0
- package/dist/cjs/components/ui/SearchSection.js.map +1 -0
- package/dist/cjs/components/ui/SectionSkeleton.css +109 -0
- package/dist/cjs/components/ui/SectionSkeleton.js +190 -0
- package/dist/cjs/components/ui/SectionSkeleton.js.map +1 -0
- package/dist/cjs/components/ui/SmartIcon.js +122 -0
- package/dist/cjs/components/ui/SmartIcon.js.map +1 -0
- package/dist/cjs/components/ui/UnifiedLink.js +169 -0
- package/dist/cjs/components/ui/UnifiedLink.js.map +1 -0
- package/dist/cjs/components/ui/UserQuery.js +348 -0
- package/dist/cjs/components/ui/UserQuery.js.map +1 -0
- package/dist/cjs/components/ui/icons/ArrowTopRightIcon.js +37 -0
- package/dist/cjs/components/ui/icons/ArrowTopRightIcon.js.map +1 -0
- package/dist/cjs/components/ui/icons/ArrowUpIcon.js +61 -0
- package/dist/cjs/components/ui/icons/ArrowUpIcon.js.map +1 -0
- package/dist/cjs/components/ui/icons/CheckIcon.js +37 -0
- package/dist/cjs/components/ui/icons/CheckIcon.js.map +1 -0
- package/dist/cjs/components/ui/icons/CommentIcon.js +34 -0
- package/dist/cjs/components/ui/icons/CommentIcon.js.map +1 -0
- package/dist/cjs/components/ui/icons/PlusIcon.js +51 -0
- package/dist/cjs/components/ui/icons/PlusIcon.js.map +1 -0
- package/dist/cjs/components/ui/icons/RedoIcon.js +51 -0
- package/dist/cjs/components/ui/icons/RedoIcon.js.map +1 -0
- package/dist/cjs/components/ui/icons/ShareIcon.js +81 -0
- package/dist/cjs/components/ui/icons/ShareIcon.js.map +1 -0
- package/dist/cjs/components/ui/icons/UndoIcon.js +51 -0
- package/dist/cjs/components/ui/icons/UndoIcon.js.map +1 -0
- package/dist/cjs/components/ui/table.js +159 -0
- package/dist/cjs/components/ui/table.js.map +1 -0
- package/dist/cjs/context/ChipsContext.js +12 -0
- package/dist/cjs/context/ChipsContext.js.map +1 -0
- package/dist/cjs/context/ComponentDependenciesContext.js +32 -0
- package/dist/cjs/context/ComponentDependenciesContext.js.map +1 -0
- package/dist/cjs/entity/defaultExtractor.js +117 -0
- package/dist/cjs/entity/defaultExtractor.js.map +1 -0
- package/dist/cjs/entity/enrichEntitiesFromPayload.js +39 -0
- package/dist/cjs/entity/enrichEntitiesFromPayload.js.map +1 -0
- package/dist/cjs/entity/fetchEntityListData.js +78 -0
- package/dist/cjs/entity/fetchEntityListData.js.map +1 -0
- package/dist/cjs/entity/index.js +41 -0
- package/dist/cjs/entity/index.js.map +1 -0
- package/dist/cjs/entity/types.js +4 -0
- package/dist/cjs/entity/types.js.map +1 -0
- package/dist/cjs/errors/conversationErrorTypes.js +56 -0
- package/dist/cjs/errors/conversationErrorTypes.js.map +1 -0
- package/dist/cjs/errors/errorTemplates.js +86 -0
- package/dist/cjs/errors/errorTemplates.js.map +1 -0
- package/dist/cjs/errors/index.js +13 -0
- package/dist/cjs/errors/index.js.map +1 -0
- package/dist/cjs/external-types.d.js +2 -0
- package/dist/cjs/external-types.d.js.map +1 -0
- package/dist/cjs/featureToggles/FeatureToggleContext.js +44 -0
- package/dist/cjs/featureToggles/FeatureToggleContext.js.map +1 -0
- package/dist/cjs/hooks/useConversation.js +10 -0
- package/dist/cjs/hooks/useConversation.js.map +1 -0
- package/dist/cjs/hooks/useDebugImageContext.js +10 -0
- package/dist/cjs/hooks/useDebugImageContext.js.map +1 -0
- package/dist/cjs/hooks/useEntityTransforms.js +10 -0
- package/dist/cjs/hooks/useEntityTransforms.js.map +1 -0
- package/dist/cjs/hooks/useMarkdownUtils.js +10 -0
- package/dist/cjs/hooks/useMarkdownUtils.js.map +1 -0
- package/dist/cjs/hooks/useResolveGenericEntityData.js +10 -0
- package/dist/cjs/hooks/useResolveGenericEntityData.js.map +1 -0
- package/dist/cjs/hooks/useResolveSearchSpringEntityData.js +146 -0
- package/dist/cjs/hooks/useResolveSearchSpringEntityData.js.map +1 -0
- package/dist/cjs/hooks/useResolveShopifyEntityData.js +190 -0
- package/dist/cjs/hooks/useResolveShopifyEntityData.js.map +1 -0
- package/dist/cjs/hooks/useResolvedImageSources.js +160 -0
- package/dist/cjs/hooks/useResolvedImageSources.js.map +1 -0
- package/dist/cjs/hooks/useWeb5Link.js +10 -0
- package/dist/cjs/hooks/useWeb5Link.js.map +1 -0
- package/dist/cjs/image/contextualImageTypes.js +4 -0
- package/dist/cjs/image/contextualImageTypes.js.map +1 -0
- package/dist/cjs/image/imageSearchFilterTypes.js +19 -0
- package/dist/cjs/image/imageSearchFilterTypes.js.map +1 -0
- package/dist/cjs/image/imageSearchFilters.js +22 -0
- package/dist/cjs/image/imageSearchFilters.js.map +1 -0
- package/dist/cjs/index.js +285 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/lib/utils.js +33 -0
- package/dist/cjs/lib/utils.js.map +1 -0
- package/dist/cjs/markdownBlocks.js +645 -0
- package/dist/cjs/markdownBlocks.js.map +1 -0
- package/dist/cjs/match/astToParts.js +374 -0
- package/dist/cjs/match/astToParts.js.map +1 -0
- package/dist/cjs/match/extractProps.js +654 -0
- package/dist/cjs/match/extractProps.js.map +1 -0
- package/dist/cjs/match/index.js +11 -0
- package/dist/cjs/match/index.js.map +1 -0
- package/dist/cjs/match/matchAllSections.js +34 -0
- package/dist/cjs/match/matchAllSections.js.map +1 -0
- package/dist/cjs/match/matchMarkdown.js +39 -0
- package/dist/cjs/match/matchMarkdown.js.map +1 -0
- package/dist/cjs/parts/parts.js +183 -0
- package/dist/cjs/parts/parts.js.map +1 -0
- package/dist/cjs/patternAnalyzer/conflictDetector.js +103 -0
- package/dist/cjs/patternAnalyzer/conflictDetector.js.map +1 -0
- package/dist/cjs/patternAnalyzer/index.js +40 -0
- package/dist/cjs/patternAnalyzer/index.js.map +1 -0
- package/dist/cjs/patternAnalyzer/markdownGenerator.js +347 -0
- package/dist/cjs/patternAnalyzer/markdownGenerator.js.map +1 -0
- package/dist/cjs/patternAnalyzer/mergeDetector.js +505 -0
- package/dist/cjs/patternAnalyzer/mergeDetector.js.map +1 -0
- package/dist/cjs/patternAnalyzer/parserValidator.js +56 -0
- package/dist/cjs/patternAnalyzer/parserValidator.js.map +1 -0
- package/dist/cjs/patternAnalyzer/patternWriter.js +106 -0
- package/dist/cjs/patternAnalyzer/patternWriter.js.map +1 -0
- package/dist/cjs/patternAnalyzer/run.js +140 -0
- package/dist/cjs/patternAnalyzer/run.js.map +1 -0
- package/dist/cjs/patternAnalyzer/types.js +4 -0
- package/dist/cjs/patternAnalyzer/types.js.map +1 -0
- package/dist/cjs/patternValidator/ERROR_MESSAGES.md +110 -0
- package/dist/cjs/patternValidator/README.md +757 -0
- package/dist/cjs/patternValidator/automaton.js +349 -0
- package/dist/cjs/patternValidator/automaton.js.map +1 -0
- package/dist/cjs/patternValidator/index.js +196 -0
- package/dist/cjs/patternValidator/index.js.map +1 -0
- package/dist/cjs/patternValidator/lexer.js +218 -0
- package/dist/cjs/patternValidator/lexer.js.map +1 -0
- package/dist/cjs/patternValidator/matcher.js +722 -0
- package/dist/cjs/patternValidator/matcher.js.map +1 -0
- package/dist/cjs/patternValidator/parser.js +533 -0
- package/dist/cjs/patternValidator/parser.js.map +1 -0
- package/dist/cjs/patternValidator/types.js +4 -0
- package/dist/cjs/patternValidator/types.js.map +1 -0
- package/dist/cjs/patternValidator/validator.test.js +1277 -0
- package/dist/cjs/patternValidator/validator.test.js.map +1 -0
- package/dist/cjs/registry/ComponentRegistry.js +438 -0
- package/dist/cjs/registry/ComponentRegistry.js.map +1 -0
- package/dist/cjs/registry/Intent.js +19 -0
- package/dist/cjs/registry/Intent.js.map +1 -0
- package/dist/cjs/registry/index.js +9 -0
- package/dist/cjs/registry/index.js.map +1 -0
- package/dist/cjs/registry/types.js +4 -0
- package/dist/cjs/registry/types.js.map +1 -0
- package/dist/cjs/services/cart/addToCart.js +147 -0
- package/dist/cjs/services/cart/addToCart.js.map +1 -0
- package/dist/cjs/services/cart/index.js +7 -0
- package/dist/cjs/services/cart/index.js.map +1 -0
- package/dist/cjs/services/searchspring/index.js +10 -0
- package/dist/cjs/services/searchspring/index.js.map +1 -0
- package/dist/cjs/services/searchspring/searchSpringClient.js +49 -0
- package/dist/cjs/services/searchspring/searchSpringClient.js.map +1 -0
- package/dist/cjs/services/searchspring/transformSSProduct.js +70 -0
- package/dist/cjs/services/searchspring/transformSSProduct.js.map +1 -0
- package/dist/cjs/services/searchspring/types.js +4 -0
- package/dist/cjs/services/searchspring/types.js.map +1 -0
- package/dist/cjs/services/shopify/globals.d.js +4 -0
- package/dist/cjs/services/shopify/globals.d.js.map +1 -0
- package/dist/cjs/services/shopify/index.js +22 -0
- package/dist/cjs/services/shopify/index.js.map +1 -0
- package/dist/cjs/services/shopify/queries.js +214 -0
- package/dist/cjs/services/shopify/queries.js.map +1 -0
- package/dist/cjs/services/shopify/resolveStoreDomain.js +28 -0
- package/dist/cjs/services/shopify/resolveStoreDomain.js.map +1 -0
- package/dist/cjs/services/shopify/shopifyEntityResolver.js +109 -0
- package/dist/cjs/services/shopify/shopifyEntityResolver.js.map +1 -0
- package/dist/cjs/services/shopify/shopifyStorefrontClient.js +58 -0
- package/dist/cjs/services/shopify/shopifyStorefrontClient.js.map +1 -0
- package/dist/cjs/services/shopify/transformShopifyEntity.js +137 -0
- package/dist/cjs/services/shopify/transformShopifyEntity.js.map +1 -0
- package/dist/cjs/services/shopify/types.js +4 -0
- package/dist/cjs/services/shopify/types.js.map +1 -0
- package/dist/cjs/styles/base-tokens.css +152 -0
- package/dist/cjs/styles/base-utilities.css +424 -0
- package/dist/cjs/styles/components.css +6 -0
- package/dist/cjs/styles/prompt-input-tokens.css +136 -0
- package/dist/cjs/styles/tailwind-theme.css +138 -0
- package/dist/cjs/test-types.d.js +2 -0
- package/dist/cjs/test-types.d.js.map +1 -0
- package/dist/cjs/testUtils.js +25 -0
- package/dist/cjs/testUtils.js.map +1 -0
- package/dist/cjs/types/answerUpdatedEvent.js +20 -0
- package/dist/cjs/types/answerUpdatedEvent.js.map +1 -0
- package/dist/cjs/types/blog.js +4 -0
- package/dist/cjs/types/blog.js.map +1 -0
- package/dist/cjs/types/callout.js +6 -0
- package/dist/cjs/types/callout.js.map +1 -0
- package/dist/cjs/types/dependencies.js +4 -0
- package/dist/cjs/types/dependencies.js.map +1 -0
- package/dist/cjs/types/entity.js +4 -0
- package/dist/cjs/types/entity.js.map +1 -0
- package/dist/cjs/types/link-types.js +62 -0
- package/dist/cjs/types/link-types.js.map +1 -0
- package/dist/cjs/types/page-section.js +4 -0
- package/dist/cjs/types/page-section.js.map +1 -0
- package/dist/cjs/types/placement.js +4 -0
- package/dist/cjs/types/placement.js.map +1 -0
- package/dist/cjs/types/redirectEvent.js +27 -0
- package/dist/cjs/types/redirectEvent.js.map +1 -0
- package/dist/cjs/types/userQueryEvent.js +19 -0
- package/dist/cjs/types/userQueryEvent.js.map +1 -0
- package/dist/cjs/utils/analyticsEvents.js +91 -0
- package/dist/cjs/utils/analyticsEvents.js.map +1 -0
- package/dist/cjs/utils/componentTracking.js +90 -0
- package/dist/cjs/utils/componentTracking.js.map +1 -0
- package/dist/cjs/utils/contentKeywordMatcher.js +56 -0
- package/dist/cjs/utils/contentKeywordMatcher.js.map +1 -0
- package/dist/cjs/utils/conversationApi.js +52 -0
- package/dist/cjs/utils/conversationApi.js.map +1 -0
- package/dist/cjs/utils/conversationMode.js +23 -0
- package/dist/cjs/utils/conversationMode.js.map +1 -0
- package/dist/cjs/utils/diagnosticsCollector.js +58 -0
- package/dist/cjs/utils/diagnosticsCollector.js.map +1 -0
- package/dist/cjs/utils/entityLinkParser.js +256 -0
- package/dist/cjs/utils/entityLinkParser.js.map +1 -0
- package/dist/cjs/utils/htmlCommentParser.js +122 -0
- package/dist/cjs/utils/htmlCommentParser.js.map +1 -0
- package/dist/cjs/utils/image-utils.js +49 -0
- package/dist/cjs/utils/image-utils.js.map +1 -0
- package/dist/cjs/utils/intentExtractor.js +47 -0
- package/dist/cjs/utils/intentExtractor.js.map +1 -0
- package/dist/cjs/utils/markdownPreprocessor.js +268 -0
- package/dist/cjs/utils/markdownPreprocessor.js.map +1 -0
- package/dist/cjs/utils/navigationStack.js +35 -0
- package/dist/cjs/utils/navigationStack.js.map +1 -0
- package/dist/cjs/utils/nodeMatchers.js +43 -0
- package/dist/cjs/utils/nodeMatchers.js.map +1 -0
- package/dist/cjs/utils/propsExtractor.js +66 -0
- package/dist/cjs/utils/propsExtractor.js.map +1 -0
- package/dist/cjs/utils/sessionManager.js +161 -0
- package/dist/cjs/utils/sessionManager.js.map +1 -0
- package/dist/cjs/utils/unifiedMarkdownParser.js +44 -0
- package/dist/cjs/utils/unifiedMarkdownParser.js.map +1 -0
- package/dist/cjs/utils/web5LinkValidator.js +56 -0
- package/dist/cjs/utils/web5LinkValidator.js.map +1 -0
- package/dist/cjs/utils/web5LinkValidator.test.js +115 -0
- package/dist/cjs/utils/web5LinkValidator.test.js.map +1 -0
- package/dist/esm/client/clientBundleOverride.js +43 -0
- package/dist/esm/client/clientBundleOverride.js.map +1 -0
- package/dist/esm/client/devEnvironment.js +2 -0
- package/dist/esm/client/devEnvironment.js.map +1 -0
- package/dist/esm/client/loadClientBundle.js +82 -0
- package/dist/esm/client/loadClientBundle.js.map +1 -0
- package/dist/esm/client/wixAuthFetch.js +68 -0
- package/dist/esm/client/wixAuthFetch.js.map +1 -0
- package/dist/esm/clients.js +11 -0
- package/dist/esm/clients.js.map +1 -0
- package/dist/esm/color/colorUtils.js +118 -0
- package/dist/esm/color/colorUtils.js.map +1 -0
- package/dist/esm/component/componentDefinitions/CalloutSectionDefinition.js +61 -0
- package/dist/esm/component/componentDefinitions/CalloutSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/ComparisonSectionDefinition.js +135 -0
- package/dist/esm/component/componentDefinitions/ComparisonSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/CtaBannerSectionDefinition.js +79 -0
- package/dist/esm/component/componentDefinitions/CtaBannerSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/EntitySectionDefinition.js +165 -0
- package/dist/esm/component/componentDefinitions/EntitySectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/ErrorSectionDefinition.js +75 -0
- package/dist/esm/component/componentDefinitions/ErrorSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/FallbackSectionDefinition.js +23 -0
- package/dist/esm/component/componentDefinitions/FallbackSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/FeatureCardsSectionDefinition.js +113 -0
- package/dist/esm/component/componentDefinitions/FeatureCardsSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/FeatureSection9PlusDefinition.js +69 -0
- package/dist/esm/component/componentDefinitions/FeatureSection9PlusDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/HeroEntitySectionDefinition.js +119 -0
- package/dist/esm/component/componentDefinitions/HeroEntitySectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/HeroSectionDefinition.js +203 -0
- package/dist/esm/component/componentDefinitions/HeroSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/HtmlCommentSectionDefinition.js +13 -0
- package/dist/esm/component/componentDefinitions/HtmlCommentSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/KpiSectionDefinition.js +108 -0
- package/dist/esm/component/componentDefinitions/KpiSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/NextStepsSectionDefinition.js +130 -0
- package/dist/esm/component/componentDefinitions/NextStepsSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/SearchSectionDefinition.js +12 -0
- package/dist/esm/component/componentDefinitions/SearchSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/SkipNodesSectionDefinition.js +14 -0
- package/dist/esm/component/componentDefinitions/SkipNodesSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/TextBlockSectionDefinition.js +59 -0
- package/dist/esm/component/componentDefinitions/TextBlockSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/index.js +45 -0
- package/dist/esm/component/componentDefinitions/index.js.map +1 -0
- package/dist/esm/component/componentDefinitions/listItemsSectionDefinition.js +80 -0
- package/dist/esm/component/componentDefinitions/listItemsSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/parse-utils.js +412 -0
- package/dist/esm/component/componentDefinitions/parse-utils.js.map +1 -0
- package/dist/esm/component/componentDefinitions/specHelpers.js +31 -0
- package/dist/esm/component/componentDefinitions/specHelpers.js.map +1 -0
- package/dist/esm/component/componentParser.js +358 -0
- package/dist/esm/component/componentParser.js.map +1 -0
- package/dist/esm/component/diagnosticTypes.js +26 -0
- package/dist/esm/component/diagnosticTypes.js.map +1 -0
- package/dist/esm/component/parser-types.js +2 -0
- package/dist/esm/component/parser-types.js.map +1 -0
- package/dist/esm/component/section-definition.js +2 -0
- package/dist/esm/component/section-definition.js.map +1 -0
- package/dist/esm/component/types.js +2 -0
- package/dist/esm/component/types.js.map +1 -0
- package/dist/esm/components/placement/PlacementPayloadContext.js +24 -0
- package/dist/esm/components/placement/PlacementPayloadContext.js.map +1 -0
- package/dist/esm/components/placement/PlacementResponseRenderer.css +269 -0
- package/dist/esm/components/placement/PlacementResponseRenderer.js +173 -0
- package/dist/esm/components/placement/PlacementResponseRenderer.js.map +1 -0
- package/dist/esm/components/placement/buildPlacementDependencies.js +212 -0
- package/dist/esm/components/placement/buildPlacementDependencies.js.map +1 -0
- package/dist/esm/components/ui/BottomContainer.js +14 -0
- package/dist/esm/components/ui/BottomContainer.js.map +1 -0
- package/dist/esm/components/ui/CalloutBlock.js +118 -0
- package/dist/esm/components/ui/CalloutBlock.js.map +1 -0
- package/dist/esm/components/ui/Disclaimer.css +35 -0
- package/dist/esm/components/ui/Disclaimer.js +32 -0
- package/dist/esm/components/ui/Disclaimer.js.map +1 -0
- package/dist/esm/components/ui/FeedbackBar.css +267 -0
- package/dist/esm/components/ui/FeedbackBar.js +221 -0
- package/dist/esm/components/ui/FeedbackBar.js.map +1 -0
- package/dist/esm/components/ui/Loader.js +43 -0
- package/dist/esm/components/ui/Loader.js.map +1 -0
- package/dist/esm/components/ui/MarkdownText.js +283 -0
- package/dist/esm/components/ui/MarkdownText.js.map +1 -0
- package/dist/esm/components/ui/OptimizedImage.js +354 -0
- package/dist/esm/components/ui/OptimizedImage.js.map +1 -0
- package/dist/esm/components/ui/PlacementLoader.css +101 -0
- package/dist/esm/components/ui/PlacementLoader.js +28 -0
- package/dist/esm/components/ui/PlacementLoader.js.map +1 -0
- package/dist/esm/components/ui/PromptEntryEmptyState.css +172 -0
- package/dist/esm/components/ui/PromptEntryEmptyState.js +36 -0
- package/dist/esm/components/ui/PromptEntryEmptyState.js.map +1 -0
- package/dist/esm/components/ui/SearchSection.css +538 -0
- package/dist/esm/components/ui/SearchSection.js +317 -0
- package/dist/esm/components/ui/SearchSection.js.map +1 -0
- package/dist/esm/components/ui/SectionSkeleton.css +109 -0
- package/dist/esm/components/ui/SectionSkeleton.js +100 -0
- package/dist/esm/components/ui/SectionSkeleton.js.map +1 -0
- package/dist/esm/components/ui/SmartIcon.js +91 -0
- package/dist/esm/components/ui/SmartIcon.js.map +1 -0
- package/dist/esm/components/ui/UnifiedLink.js +105 -0
- package/dist/esm/components/ui/UnifiedLink.js.map +1 -0
- package/dist/esm/components/ui/UserQuery.js +167 -0
- package/dist/esm/components/ui/UserQuery.js.map +1 -0
- package/dist/esm/components/ui/icons/ArrowTopRightIcon.js +17 -0
- package/dist/esm/components/ui/icons/ArrowTopRightIcon.js.map +1 -0
- package/dist/esm/components/ui/icons/ArrowUpIcon.js +29 -0
- package/dist/esm/components/ui/icons/ArrowUpIcon.js.map +1 -0
- package/dist/esm/components/ui/icons/CheckIcon.js +17 -0
- package/dist/esm/components/ui/icons/CheckIcon.js.map +1 -0
- package/dist/esm/components/ui/icons/CommentIcon.js +15 -0
- package/dist/esm/components/ui/icons/CommentIcon.js.map +1 -0
- package/dist/esm/components/ui/icons/PlusIcon.js +25 -0
- package/dist/esm/components/ui/icons/PlusIcon.js.map +1 -0
- package/dist/esm/components/ui/icons/RedoIcon.js +25 -0
- package/dist/esm/components/ui/icons/RedoIcon.js.map +1 -0
- package/dist/esm/components/ui/icons/ShareIcon.js +37 -0
- package/dist/esm/components/ui/icons/ShareIcon.js.map +1 -0
- package/dist/esm/components/ui/icons/UndoIcon.js +25 -0
- package/dist/esm/components/ui/icons/UndoIcon.js.map +1 -0
- package/dist/esm/components/ui/table.js +92 -0
- package/dist/esm/components/ui/table.js.map +1 -0
- package/dist/esm/context/ChipsContext.js +7 -0
- package/dist/esm/context/ChipsContext.js.map +1 -0
- package/dist/esm/context/ComponentDependenciesContext.js +19 -0
- package/dist/esm/context/ComponentDependenciesContext.js.map +1 -0
- package/dist/esm/entity/defaultExtractor.js +111 -0
- package/dist/esm/entity/defaultExtractor.js.map +1 -0
- package/dist/esm/entity/enrichEntitiesFromPayload.js +35 -0
- package/dist/esm/entity/enrichEntitiesFromPayload.js.map +1 -0
- package/dist/esm/entity/fetchEntityListData.js +76 -0
- package/dist/esm/entity/fetchEntityListData.js.map +1 -0
- package/dist/esm/entity/index.js +29 -0
- package/dist/esm/entity/index.js.map +1 -0
- package/dist/esm/entity/types.js +2 -0
- package/dist/esm/entity/types.js.map +1 -0
- package/dist/esm/errors/conversationErrorTypes.js +50 -0
- package/dist/esm/errors/conversationErrorTypes.js.map +1 -0
- package/dist/esm/errors/errorTemplates.js +81 -0
- package/dist/esm/errors/errorTemplates.js.map +1 -0
- package/dist/esm/errors/index.js +3 -0
- package/dist/esm/errors/index.js.map +1 -0
- package/dist/esm/external-types.d.js +2 -0
- package/dist/esm/external-types.d.js.map +1 -0
- package/dist/esm/featureToggles/FeatureToggleContext.js +30 -0
- package/dist/esm/featureToggles/FeatureToggleContext.js.map +1 -0
- package/dist/esm/hooks/useConversation.js +6 -0
- package/dist/esm/hooks/useConversation.js.map +1 -0
- package/dist/esm/hooks/useDebugImageContext.js +6 -0
- package/dist/esm/hooks/useDebugImageContext.js.map +1 -0
- package/dist/esm/hooks/useEntityTransforms.js +6 -0
- package/dist/esm/hooks/useEntityTransforms.js.map +1 -0
- package/dist/esm/hooks/useMarkdownUtils.js +6 -0
- package/dist/esm/hooks/useMarkdownUtils.js.map +1 -0
- package/dist/esm/hooks/useResolveGenericEntityData.js +6 -0
- package/dist/esm/hooks/useResolveGenericEntityData.js.map +1 -0
- package/dist/esm/hooks/useResolveSearchSpringEntityData.js +146 -0
- package/dist/esm/hooks/useResolveSearchSpringEntityData.js.map +1 -0
- package/dist/esm/hooks/useResolveShopifyEntityData.js +191 -0
- package/dist/esm/hooks/useResolveShopifyEntityData.js.map +1 -0
- package/dist/esm/hooks/useResolvedImageSources.js +169 -0
- package/dist/esm/hooks/useResolvedImageSources.js.map +1 -0
- package/dist/esm/hooks/useWeb5Link.js +6 -0
- package/dist/esm/hooks/useWeb5Link.js.map +1 -0
- package/dist/esm/image/contextualImageTypes.js +2 -0
- package/dist/esm/image/contextualImageTypes.js.map +1 -0
- package/dist/esm/image/imageSearchFilterTypes.js +15 -0
- package/dist/esm/image/imageSearchFilterTypes.js.map +1 -0
- package/dist/esm/image/imageSearchFilters.js +18 -0
- package/dist/esm/image/imageSearchFilters.js.map +1 -0
- package/dist/esm/index.js +152 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/utils.js +33 -0
- package/dist/esm/lib/utils.js.map +1 -0
- package/dist/esm/markdownBlocks.js +641 -0
- package/dist/esm/markdownBlocks.js.map +1 -0
- package/dist/esm/match/astToParts.js +371 -0
- package/dist/esm/match/astToParts.js.map +1 -0
- package/dist/esm/match/extractProps.js +634 -0
- package/dist/esm/match/extractProps.js.map +1 -0
- package/dist/esm/match/index.js +4 -0
- package/dist/esm/match/index.js.map +1 -0
- package/dist/esm/match/matchAllSections.js +31 -0
- package/dist/esm/match/matchAllSections.js.map +1 -0
- package/dist/esm/match/matchMarkdown.js +36 -0
- package/dist/esm/match/matchMarkdown.js.map +1 -0
- package/dist/esm/parts/parts.js +171 -0
- package/dist/esm/parts/parts.js.map +1 -0
- package/dist/esm/patternAnalyzer/conflictDetector.js +99 -0
- package/dist/esm/patternAnalyzer/conflictDetector.js.map +1 -0
- package/dist/esm/patternAnalyzer/index.js +36 -0
- package/dist/esm/patternAnalyzer/index.js.map +1 -0
- package/dist/esm/patternAnalyzer/markdownGenerator.js +344 -0
- package/dist/esm/patternAnalyzer/markdownGenerator.js.map +1 -0
- package/dist/esm/patternAnalyzer/mergeDetector.js +504 -0
- package/dist/esm/patternAnalyzer/mergeDetector.js.map +1 -0
- package/dist/esm/patternAnalyzer/parserValidator.js +52 -0
- package/dist/esm/patternAnalyzer/parserValidator.js.map +1 -0
- package/dist/esm/patternAnalyzer/patternWriter.js +102 -0
- package/dist/esm/patternAnalyzer/patternWriter.js.map +1 -0
- package/dist/esm/patternAnalyzer/run.js +138 -0
- package/dist/esm/patternAnalyzer/run.js.map +1 -0
- package/dist/esm/patternAnalyzer/types.js +2 -0
- package/dist/esm/patternAnalyzer/types.js.map +1 -0
- package/dist/esm/patternValidator/ERROR_MESSAGES.md +110 -0
- package/dist/esm/patternValidator/README.md +757 -0
- package/dist/esm/patternValidator/automaton.js +345 -0
- package/dist/esm/patternValidator/automaton.js.map +1 -0
- package/dist/esm/patternValidator/index.js +190 -0
- package/dist/esm/patternValidator/index.js.map +1 -0
- package/dist/esm/patternValidator/lexer.js +214 -0
- package/dist/esm/patternValidator/lexer.js.map +1 -0
- package/dist/esm/patternValidator/matcher.js +717 -0
- package/dist/esm/patternValidator/matcher.js.map +1 -0
- package/dist/esm/patternValidator/parser.js +531 -0
- package/dist/esm/patternValidator/parser.js.map +1 -0
- package/dist/esm/patternValidator/types.js +2 -0
- package/dist/esm/patternValidator/types.js.map +1 -0
- package/dist/esm/patternValidator/validator.test.js +1275 -0
- package/dist/esm/patternValidator/validator.test.js.map +1 -0
- package/dist/esm/registry/ComponentRegistry.js +435 -0
- package/dist/esm/registry/ComponentRegistry.js.map +1 -0
- package/dist/esm/registry/Intent.js +15 -0
- package/dist/esm/registry/Intent.js.map +1 -0
- package/dist/esm/registry/index.js +3 -0
- package/dist/esm/registry/index.js.map +1 -0
- package/dist/esm/registry/types.js +2 -0
- package/dist/esm/registry/types.js.map +1 -0
- package/dist/esm/services/cart/addToCart.js +146 -0
- package/dist/esm/services/cart/addToCart.js.map +1 -0
- package/dist/esm/services/cart/index.js +2 -0
- package/dist/esm/services/cart/index.js.map +1 -0
- package/dist/esm/services/searchspring/index.js +3 -0
- package/dist/esm/services/searchspring/index.js.map +1 -0
- package/dist/esm/services/searchspring/searchSpringClient.js +44 -0
- package/dist/esm/services/searchspring/searchSpringClient.js.map +1 -0
- package/dist/esm/services/searchspring/transformSSProduct.js +66 -0
- package/dist/esm/services/searchspring/transformSSProduct.js.map +1 -0
- package/dist/esm/services/searchspring/types.js +2 -0
- package/dist/esm/services/searchspring/types.js.map +1 -0
- package/dist/esm/services/shopify/globals.d.js +7 -0
- package/dist/esm/services/shopify/globals.d.js.map +1 -0
- package/dist/esm/services/shopify/index.js +6 -0
- package/dist/esm/services/shopify/index.js.map +1 -0
- package/dist/esm/services/shopify/queries.js +210 -0
- package/dist/esm/services/shopify/queries.js.map +1 -0
- package/dist/esm/services/shopify/resolveStoreDomain.js +25 -0
- package/dist/esm/services/shopify/resolveStoreDomain.js.map +1 -0
- package/dist/esm/services/shopify/shopifyEntityResolver.js +105 -0
- package/dist/esm/services/shopify/shopifyEntityResolver.js.map +1 -0
- package/dist/esm/services/shopify/shopifyStorefrontClient.js +52 -0
- package/dist/esm/services/shopify/shopifyStorefrontClient.js.map +1 -0
- package/dist/esm/services/shopify/transformShopifyEntity.js +130 -0
- package/dist/esm/services/shopify/transformShopifyEntity.js.map +1 -0
- package/dist/esm/services/shopify/types.js +2 -0
- package/dist/esm/services/shopify/types.js.map +1 -0
- package/dist/esm/styles/base-tokens.css +152 -0
- package/dist/esm/styles/base-utilities.css +424 -0
- package/dist/esm/styles/components.css +6 -0
- package/dist/esm/styles/prompt-input-tokens.css +136 -0
- package/dist/esm/styles/tailwind-theme.css +138 -0
- package/dist/esm/test-types.d.js +2 -0
- package/dist/esm/test-types.d.js.map +1 -0
- package/dist/esm/testUtils.js +20 -0
- package/dist/esm/testUtils.js.map +1 -0
- package/dist/esm/types/answerUpdatedEvent.js +16 -0
- package/dist/esm/types/answerUpdatedEvent.js.map +1 -0
- package/dist/esm/types/blog.js +2 -0
- package/dist/esm/types/blog.js.map +1 -0
- package/dist/esm/types/callout.js +2 -0
- package/dist/esm/types/callout.js.map +1 -0
- package/dist/esm/types/dependencies.js +2 -0
- package/dist/esm/types/dependencies.js.map +1 -0
- package/dist/esm/types/entity.js +2 -0
- package/dist/esm/types/entity.js.map +1 -0
- package/dist/esm/types/link-types.js +52 -0
- package/dist/esm/types/link-types.js.map +1 -0
- package/dist/esm/types/page-section.js +2 -0
- package/dist/esm/types/page-section.js.map +1 -0
- package/dist/esm/types/placement.js +2 -0
- package/dist/esm/types/placement.js.map +1 -0
- package/dist/esm/types/redirectEvent.js +23 -0
- package/dist/esm/types/redirectEvent.js.map +1 -0
- package/dist/esm/types/userQueryEvent.js +15 -0
- package/dist/esm/types/userQueryEvent.js.map +1 -0
- package/dist/esm/utils/analyticsEvents.js +84 -0
- package/dist/esm/utils/analyticsEvents.js.map +1 -0
- package/dist/esm/utils/componentTracking.js +84 -0
- package/dist/esm/utils/componentTracking.js.map +1 -0
- package/dist/esm/utils/contentKeywordMatcher.js +50 -0
- package/dist/esm/utils/contentKeywordMatcher.js.map +1 -0
- package/dist/esm/utils/conversationApi.js +45 -0
- package/dist/esm/utils/conversationApi.js.map +1 -0
- package/dist/esm/utils/conversationMode.js +18 -0
- package/dist/esm/utils/conversationMode.js.map +1 -0
- package/dist/esm/utils/diagnosticsCollector.js +52 -0
- package/dist/esm/utils/diagnosticsCollector.js.map +1 -0
- package/dist/esm/utils/entityLinkParser.js +246 -0
- package/dist/esm/utils/entityLinkParser.js.map +1 -0
- package/dist/esm/utils/htmlCommentParser.js +117 -0
- package/dist/esm/utils/htmlCommentParser.js.map +1 -0
- package/dist/esm/utils/image-utils.js +45 -0
- package/dist/esm/utils/image-utils.js.map +1 -0
- package/dist/esm/utils/intentExtractor.js +45 -0
- package/dist/esm/utils/intentExtractor.js.map +1 -0
- package/dist/esm/utils/markdownPreprocessor.js +257 -0
- package/dist/esm/utils/markdownPreprocessor.js.map +1 -0
- package/dist/esm/utils/navigationStack.js +27 -0
- package/dist/esm/utils/navigationStack.js.map +1 -0
- package/dist/esm/utils/nodeMatchers.js +38 -0
- package/dist/esm/utils/nodeMatchers.js.map +1 -0
- package/dist/esm/utils/propsExtractor.js +58 -0
- package/dist/esm/utils/propsExtractor.js.map +1 -0
- package/dist/esm/utils/sessionManager.js +151 -0
- package/dist/esm/utils/sessionManager.js.map +1 -0
- package/dist/esm/utils/unifiedMarkdownParser.js +36 -0
- package/dist/esm/utils/unifiedMarkdownParser.js.map +1 -0
- package/dist/esm/utils/web5LinkValidator.js +52 -0
- package/dist/esm/utils/web5LinkValidator.js.map +1 -0
- package/dist/esm/utils/web5LinkValidator.test.js +113 -0
- package/dist/esm/utils/web5LinkValidator.test.js.map +1 -0
- package/dist/types/client/clientBundleOverride.d.ts +26 -0
- package/dist/types/client/clientBundleOverride.d.ts.map +1 -0
- package/dist/types/client/devEnvironment.d.ts +24 -0
- package/dist/types/client/devEnvironment.d.ts.map +1 -0
- package/dist/types/client/loadClientBundle.d.ts +27 -0
- package/dist/types/client/loadClientBundle.d.ts.map +1 -0
- package/dist/types/client/wixAuthFetch.d.ts +12 -0
- package/dist/types/client/wixAuthFetch.d.ts.map +1 -0
- package/dist/types/clients.d.ts +10 -0
- package/dist/types/clients.d.ts.map +1 -0
- package/dist/types/color/colorUtils.d.ts +9 -0
- package/dist/types/color/colorUtils.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/CalloutSectionDefinition.d.ts +11 -0
- package/dist/types/component/componentDefinitions/CalloutSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/ComparisonSectionDefinition.d.ts +11 -0
- package/dist/types/component/componentDefinitions/ComparisonSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/CtaBannerSectionDefinition.d.ts +11 -0
- package/dist/types/component/componentDefinitions/CtaBannerSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/EntitySectionDefinition.d.ts +11 -0
- package/dist/types/component/componentDefinitions/EntitySectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/ErrorSectionDefinition.d.ts +12 -0
- package/dist/types/component/componentDefinitions/ErrorSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/FallbackSectionDefinition.d.ts +16 -0
- package/dist/types/component/componentDefinitions/FallbackSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/FeatureCardsSectionDefinition.d.ts +11 -0
- package/dist/types/component/componentDefinitions/FeatureCardsSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/FeatureSection9PlusDefinition.d.ts +11 -0
- package/dist/types/component/componentDefinitions/FeatureSection9PlusDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/HeroEntitySectionDefinition.d.ts +23 -0
- package/dist/types/component/componentDefinitions/HeroEntitySectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/HeroSectionDefinition.d.ts +12 -0
- package/dist/types/component/componentDefinitions/HeroSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/HtmlCommentSectionDefinition.d.ts +11 -0
- package/dist/types/component/componentDefinitions/HtmlCommentSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/KpiSectionDefinition.d.ts +11 -0
- package/dist/types/component/componentDefinitions/KpiSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/NextStepsSectionDefinition.d.ts +11 -0
- package/dist/types/component/componentDefinitions/NextStepsSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/SearchSectionDefinition.d.ts +10 -0
- package/dist/types/component/componentDefinitions/SearchSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/SkipNodesSectionDefinition.d.ts +12 -0
- package/dist/types/component/componentDefinitions/SkipNodesSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/TextBlockSectionDefinition.d.ts +11 -0
- package/dist/types/component/componentDefinitions/TextBlockSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/index.d.ts +26 -0
- package/dist/types/component/componentDefinitions/index.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/listItemsSectionDefinition.d.ts +11 -0
- package/dist/types/component/componentDefinitions/listItemsSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/parse-utils.d.ts +88 -0
- package/dist/types/component/componentDefinitions/parse-utils.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/specHelpers.d.ts +16 -0
- package/dist/types/component/componentDefinitions/specHelpers.d.ts.map +1 -0
- package/dist/types/component/componentParser.d.ts +63 -0
- package/dist/types/component/componentParser.d.ts.map +1 -0
- package/dist/types/component/diagnosticTypes.d.ts +23 -0
- package/dist/types/component/diagnosticTypes.d.ts.map +1 -0
- package/dist/types/component/parser-types.d.ts +71 -0
- package/dist/types/component/parser-types.d.ts.map +1 -0
- package/dist/types/component/section-definition.d.ts +32 -0
- package/dist/types/component/section-definition.d.ts.map +1 -0
- package/dist/types/component/types.d.ts +315 -0
- package/dist/types/component/types.d.ts.map +1 -0
- package/dist/types/components/placement/PlacementPayloadContext.d.ts +20 -0
- package/dist/types/components/placement/PlacementPayloadContext.d.ts.map +1 -0
- package/dist/types/components/placement/PlacementResponseRenderer.d.ts +106 -0
- package/dist/types/components/placement/PlacementResponseRenderer.d.ts.map +1 -0
- package/dist/types/components/placement/buildPlacementDependencies.d.ts +44 -0
- package/dist/types/components/placement/buildPlacementDependencies.d.ts.map +1 -0
- package/dist/types/components/ui/BottomContainer.d.ts +9 -0
- package/dist/types/components/ui/BottomContainer.d.ts.map +1 -0
- package/dist/types/components/ui/CalloutBlock.d.ts +9 -0
- package/dist/types/components/ui/CalloutBlock.d.ts.map +1 -0
- package/dist/types/components/ui/Disclaimer.d.ts +21 -0
- package/dist/types/components/ui/Disclaimer.d.ts.map +1 -0
- package/dist/types/components/ui/FeedbackBar.d.ts +41 -0
- package/dist/types/components/ui/FeedbackBar.d.ts.map +1 -0
- package/dist/types/components/ui/Loader.d.ts +9 -0
- package/dist/types/components/ui/Loader.d.ts.map +1 -0
- package/dist/types/components/ui/MarkdownText.d.ts +9 -0
- package/dist/types/components/ui/MarkdownText.d.ts.map +1 -0
- package/dist/types/components/ui/OptimizedImage.d.ts +59 -0
- package/dist/types/components/ui/OptimizedImage.d.ts.map +1 -0
- package/dist/types/components/ui/PlacementLoader.d.ts +15 -0
- package/dist/types/components/ui/PlacementLoader.d.ts.map +1 -0
- package/dist/types/components/ui/PromptEntryEmptyState.d.ts +21 -0
- package/dist/types/components/ui/PromptEntryEmptyState.d.ts.map +1 -0
- package/dist/types/components/ui/SearchSection.d.ts +37 -0
- package/dist/types/components/ui/SearchSection.d.ts.map +1 -0
- package/dist/types/components/ui/SectionSkeleton.d.ts +27 -0
- package/dist/types/components/ui/SectionSkeleton.d.ts.map +1 -0
- package/dist/types/components/ui/SmartIcon.d.ts +19 -0
- package/dist/types/components/ui/SmartIcon.d.ts.map +1 -0
- package/dist/types/components/ui/UnifiedLink.d.ts +22 -0
- package/dist/types/components/ui/UnifiedLink.d.ts.map +1 -0
- package/dist/types/components/ui/UserQuery.d.ts +33 -0
- package/dist/types/components/ui/UserQuery.d.ts.map +1 -0
- package/dist/types/components/ui/icons/ArrowTopRightIcon.d.ts +3 -0
- package/dist/types/components/ui/icons/ArrowTopRightIcon.d.ts.map +1 -0
- package/dist/types/components/ui/icons/ArrowUpIcon.d.ts +3 -0
- package/dist/types/components/ui/icons/ArrowUpIcon.d.ts.map +1 -0
- package/dist/types/components/ui/icons/CheckIcon.d.ts +3 -0
- package/dist/types/components/ui/icons/CheckIcon.d.ts.map +1 -0
- package/dist/types/components/ui/icons/CommentIcon.d.ts +3 -0
- package/dist/types/components/ui/icons/CommentIcon.d.ts.map +1 -0
- package/dist/types/components/ui/icons/PlusIcon.d.ts +3 -0
- package/dist/types/components/ui/icons/PlusIcon.d.ts.map +1 -0
- package/dist/types/components/ui/icons/RedoIcon.d.ts +3 -0
- package/dist/types/components/ui/icons/RedoIcon.d.ts.map +1 -0
- package/dist/types/components/ui/icons/ShareIcon.d.ts +3 -0
- package/dist/types/components/ui/icons/ShareIcon.d.ts.map +1 -0
- package/dist/types/components/ui/icons/UndoIcon.d.ts +3 -0
- package/dist/types/components/ui/icons/UndoIcon.d.ts.map +1 -0
- package/dist/types/components/ui/table.d.ts +11 -0
- package/dist/types/components/ui/table.d.ts.map +1 -0
- package/dist/types/context/ChipsContext.d.ts +8 -0
- package/dist/types/context/ChipsContext.d.ts.map +1 -0
- package/dist/types/context/ComponentDependenciesContext.d.ts +8 -0
- package/dist/types/context/ComponentDependenciesContext.d.ts.map +1 -0
- package/dist/types/entity/defaultExtractor.d.ts +14 -0
- package/dist/types/entity/defaultExtractor.d.ts.map +1 -0
- package/dist/types/entity/enrichEntitiesFromPayload.d.ts +27 -0
- package/dist/types/entity/enrichEntitiesFromPayload.d.ts.map +1 -0
- package/dist/types/entity/fetchEntityListData.d.ts +20 -0
- package/dist/types/entity/fetchEntityListData.d.ts.map +1 -0
- package/dist/types/entity/index.d.ts +16 -0
- package/dist/types/entity/index.d.ts.map +1 -0
- package/dist/types/entity/types.d.ts +13 -0
- package/dist/types/entity/types.d.ts.map +1 -0
- package/dist/types/errors/conversationErrorTypes.d.ts +20 -0
- package/dist/types/errors/conversationErrorTypes.d.ts.map +1 -0
- package/dist/types/errors/errorTemplates.d.ts +27 -0
- package/dist/types/errors/errorTemplates.d.ts.map +1 -0
- package/dist/types/errors/index.d.ts +3 -0
- package/dist/types/errors/index.d.ts.map +1 -0
- package/dist/types/featureToggles/FeatureToggleContext.d.ts +18 -0
- package/dist/types/featureToggles/FeatureToggleContext.d.ts.map +1 -0
- package/dist/types/hooks/useConversation.d.ts +3 -0
- package/dist/types/hooks/useConversation.d.ts.map +1 -0
- package/dist/types/hooks/useDebugImageContext.d.ts +2 -0
- package/dist/types/hooks/useDebugImageContext.d.ts.map +1 -0
- package/dist/types/hooks/useEntityTransforms.d.ts +3 -0
- package/dist/types/hooks/useEntityTransforms.d.ts.map +1 -0
- package/dist/types/hooks/useMarkdownUtils.d.ts +3 -0
- package/dist/types/hooks/useMarkdownUtils.d.ts.map +1 -0
- package/dist/types/hooks/useResolveGenericEntityData.d.ts +11 -0
- package/dist/types/hooks/useResolveGenericEntityData.d.ts.map +1 -0
- package/dist/types/hooks/useResolveSearchSpringEntityData.d.ts +20 -0
- package/dist/types/hooks/useResolveSearchSpringEntityData.d.ts.map +1 -0
- package/dist/types/hooks/useResolveShopifyEntityData.d.ts +21 -0
- package/dist/types/hooks/useResolveShopifyEntityData.d.ts.map +1 -0
- package/dist/types/hooks/useResolvedImageSources.d.ts +6 -0
- package/dist/types/hooks/useResolvedImageSources.d.ts.map +1 -0
- package/dist/types/hooks/useWeb5Link.d.ts +3 -0
- package/dist/types/hooks/useWeb5Link.d.ts.map +1 -0
- package/dist/types/image/contextualImageTypes.d.ts +17 -0
- package/dist/types/image/contextualImageTypes.d.ts.map +1 -0
- package/dist/types/image/imageSearchFilterTypes.d.ts +14 -0
- package/dist/types/image/imageSearchFilterTypes.d.ts.map +1 -0
- package/dist/types/image/imageSearchFilters.d.ts +16 -0
- package/dist/types/image/imageSearchFilters.d.ts.map +1 -0
- package/dist/types/index.d.ts +88 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/lib/utils.d.ts +3 -0
- package/dist/types/lib/utils.d.ts.map +1 -0
- package/dist/types/markdownBlocks.d.ts +44 -0
- package/dist/types/markdownBlocks.d.ts.map +1 -0
- package/dist/types/match/astToParts.d.ts +15 -0
- package/dist/types/match/astToParts.d.ts.map +1 -0
- package/dist/types/match/extractProps.d.ts +207 -0
- package/dist/types/match/extractProps.d.ts.map +1 -0
- package/dist/types/match/index.d.ts +4 -0
- package/dist/types/match/index.d.ts.map +1 -0
- package/dist/types/match/matchAllSections.d.ts +15 -0
- package/dist/types/match/matchAllSections.d.ts.map +1 -0
- package/dist/types/match/matchMarkdown.d.ts +25 -0
- package/dist/types/match/matchMarkdown.d.ts.map +1 -0
- package/dist/types/parts/parts.d.ts +144 -0
- package/dist/types/parts/parts.d.ts.map +1 -0
- package/dist/types/patternAnalyzer/conflictDetector.d.ts +19 -0
- package/dist/types/patternAnalyzer/conflictDetector.d.ts.map +1 -0
- package/dist/types/patternAnalyzer/index.d.ts +10 -0
- package/dist/types/patternAnalyzer/index.d.ts.map +1 -0
- package/dist/types/patternAnalyzer/markdownGenerator.d.ts +9 -0
- package/dist/types/patternAnalyzer/markdownGenerator.d.ts.map +1 -0
- package/dist/types/patternAnalyzer/mergeDetector.d.ts +14 -0
- package/dist/types/patternAnalyzer/mergeDetector.d.ts.map +1 -0
- package/dist/types/patternAnalyzer/parserValidator.d.ts +13 -0
- package/dist/types/patternAnalyzer/parserValidator.d.ts.map +1 -0
- package/dist/types/patternAnalyzer/patternWriter.d.ts +8 -0
- package/dist/types/patternAnalyzer/patternWriter.d.ts.map +1 -0
- package/dist/types/patternAnalyzer/run.d.ts +2 -0
- package/dist/types/patternAnalyzer/run.d.ts.map +1 -0
- package/dist/types/patternAnalyzer/types.d.ts +59 -0
- package/dist/types/patternAnalyzer/types.d.ts.map +1 -0
- package/dist/types/patternValidator/automaton.d.ts +3 -0
- package/dist/types/patternValidator/automaton.d.ts.map +1 -0
- package/dist/types/patternValidator/index.d.ts +48 -0
- package/dist/types/patternValidator/index.d.ts.map +1 -0
- package/dist/types/patternValidator/lexer.d.ts +3 -0
- package/dist/types/patternValidator/lexer.d.ts.map +1 -0
- package/dist/types/patternValidator/matcher.d.ts +14 -0
- package/dist/types/patternValidator/matcher.d.ts.map +1 -0
- package/dist/types/patternValidator/parser.d.ts +14 -0
- package/dist/types/patternValidator/parser.d.ts.map +1 -0
- package/dist/types/patternValidator/types.d.ts +125 -0
- package/dist/types/patternValidator/types.d.ts.map +1 -0
- package/dist/types/patternValidator/validator.test.d.ts +2 -0
- package/dist/types/patternValidator/validator.test.d.ts.map +1 -0
- package/dist/types/registry/ComponentRegistry.d.ts +64 -0
- package/dist/types/registry/ComponentRegistry.d.ts.map +1 -0
- package/dist/types/registry/Intent.d.ts +12 -0
- package/dist/types/registry/Intent.d.ts.map +1 -0
- package/dist/types/registry/index.d.ts +4 -0
- package/dist/types/registry/index.d.ts.map +1 -0
- package/dist/types/registry/types.d.ts +99 -0
- package/dist/types/registry/types.d.ts.map +1 -0
- package/dist/types/services/cart/addToCart.d.ts +26 -0
- package/dist/types/services/cart/addToCart.d.ts.map +1 -0
- package/dist/types/services/cart/index.d.ts +2 -0
- package/dist/types/services/cart/index.d.ts.map +1 -0
- package/dist/types/services/searchspring/index.d.ts +4 -0
- package/dist/types/services/searchspring/index.d.ts.map +1 -0
- package/dist/types/services/searchspring/searchSpringClient.d.ts +13 -0
- package/dist/types/services/searchspring/searchSpringClient.d.ts.map +1 -0
- package/dist/types/services/searchspring/transformSSProduct.d.ts +7 -0
- package/dist/types/services/searchspring/transformSSProduct.d.ts.map +1 -0
- package/dist/types/services/searchspring/types.d.ts +48 -0
- package/dist/types/services/searchspring/types.d.ts.map +1 -0
- package/dist/types/services/shopify/index.d.ts +7 -0
- package/dist/types/services/shopify/index.d.ts.map +1 -0
- package/dist/types/services/shopify/queries.d.ts +13 -0
- package/dist/types/services/shopify/queries.d.ts.map +1 -0
- package/dist/types/services/shopify/resolveStoreDomain.d.ts +14 -0
- package/dist/types/services/shopify/resolveStoreDomain.d.ts.map +1 -0
- package/dist/types/services/shopify/shopifyEntityResolver.d.ts +21 -0
- package/dist/types/services/shopify/shopifyEntityResolver.d.ts.map +1 -0
- package/dist/types/services/shopify/shopifyStorefrontClient.d.ts +19 -0
- package/dist/types/services/shopify/shopifyStorefrontClient.d.ts.map +1 -0
- package/dist/types/services/shopify/transformShopifyEntity.d.ts +11 -0
- package/dist/types/services/shopify/transformShopifyEntity.d.ts.map +1 -0
- package/dist/types/services/shopify/types.d.ts +109 -0
- package/dist/types/services/shopify/types.d.ts.map +1 -0
- package/dist/types/testUtils.d.ts +7 -0
- package/dist/types/testUtils.d.ts.map +1 -0
- package/dist/types/types/answerUpdatedEvent.d.ts +29 -0
- package/dist/types/types/answerUpdatedEvent.d.ts.map +1 -0
- package/dist/types/types/blog.d.ts +22 -0
- package/dist/types/types/blog.d.ts.map +1 -0
- package/dist/types/types/callout.d.ts +7 -0
- package/dist/types/types/callout.d.ts.map +1 -0
- package/dist/types/types/dependencies.d.ts +191 -0
- package/dist/types/types/dependencies.d.ts.map +1 -0
- package/dist/types/types/entity.d.ts +38 -0
- package/dist/types/types/entity.d.ts.map +1 -0
- package/dist/types/types/link-types.d.ts +38 -0
- package/dist/types/types/link-types.d.ts.map +1 -0
- package/dist/types/types/page-section.d.ts +27 -0
- package/dist/types/types/page-section.d.ts.map +1 -0
- package/dist/types/types/placement.d.ts +94 -0
- package/dist/types/types/placement.d.ts.map +1 -0
- package/dist/types/types/redirectEvent.d.ts +42 -0
- package/dist/types/types/redirectEvent.d.ts.map +1 -0
- package/dist/types/types/userQueryEvent.d.ts +24 -0
- package/dist/types/types/userQueryEvent.d.ts.map +1 -0
- package/dist/types/utils/analyticsEvents.d.ts +24 -0
- package/dist/types/utils/analyticsEvents.d.ts.map +1 -0
- package/dist/types/utils/componentTracking.d.ts +55 -0
- package/dist/types/utils/componentTracking.d.ts.map +1 -0
- package/dist/types/utils/contentKeywordMatcher.d.ts +14 -0
- package/dist/types/utils/contentKeywordMatcher.d.ts.map +1 -0
- package/dist/types/utils/conversationApi.d.ts +26 -0
- package/dist/types/utils/conversationApi.d.ts.map +1 -0
- package/dist/types/utils/conversationMode.d.ts +16 -0
- package/dist/types/utils/conversationMode.d.ts.map +1 -0
- package/dist/types/utils/diagnosticsCollector.d.ts +33 -0
- package/dist/types/utils/diagnosticsCollector.d.ts.map +1 -0
- package/dist/types/utils/entityLinkParser.d.ts +97 -0
- package/dist/types/utils/entityLinkParser.d.ts.map +1 -0
- package/dist/types/utils/htmlCommentParser.d.ts +13 -0
- package/dist/types/utils/htmlCommentParser.d.ts.map +1 -0
- package/dist/types/utils/image-utils.d.ts +10 -0
- package/dist/types/utils/image-utils.d.ts.map +1 -0
- package/dist/types/utils/intentExtractor.d.ts +11 -0
- package/dist/types/utils/intentExtractor.d.ts.map +1 -0
- package/dist/types/utils/markdownPreprocessor.d.ts +95 -0
- package/dist/types/utils/markdownPreprocessor.d.ts.map +1 -0
- package/dist/types/utils/navigationStack.d.ts +6 -0
- package/dist/types/utils/navigationStack.d.ts.map +1 -0
- package/dist/types/utils/nodeMatchers.d.ts +10 -0
- package/dist/types/utils/nodeMatchers.d.ts.map +1 -0
- package/dist/types/utils/propsExtractor.d.ts +51 -0
- package/dist/types/utils/propsExtractor.d.ts.map +1 -0
- package/dist/types/utils/sessionManager.d.ts +57 -0
- package/dist/types/utils/sessionManager.d.ts.map +1 -0
- package/dist/types/utils/unifiedMarkdownParser.d.ts +9 -0
- package/dist/types/utils/unifiedMarkdownParser.d.ts.map +1 -0
- package/dist/types/utils/web5LinkValidator.d.ts +14 -0
- package/dist/types/utils/web5LinkValidator.d.ts.map +1 -0
- package/dist/types/utils/web5LinkValidator.test.d.ts +2 -0
- package/dist/types/utils/web5LinkValidator.test.d.ts.map +1 -0
- package/package.json +103 -0
- package/src/styles/base-tokens.css +152 -0
- package/src/styles/base-utilities.css +424 -0
- package/src/styles/components.css +6 -0
- package/src/styles/prompt-input-tokens.css +136 -0
- package/src/styles/tailwind-theme.css +138 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["buildAutomaton","parseListFromElement","element","elementStr","startsWith","listMatch","match","content","items","i","length","depth","itemContent","elements","split","map","e","trim","filter","push","findAllListPatterns","node","listPatterns","Map","traverse","n","kind","key","has","set","children","forEach","choices","pattern","validateListItems","itemCount","itemStructure","enrichedItems","min","max","Infinity","minStr","toString","maxStr","rangeStr","valid","error","startIndex","endIndex","enrichedItem","result","validateItemStructure","item","itemIndex","automaton","isValid","matchResult","matchSimple","patternStr","formatPatternNode","join","formatQuantifier","quantifier","type","undefined","epsilonClosure","stateIds","closure","Set","stack","Array","from","state","pop","transition","transitions","condition","to","add","getNextStates","currentStates","nextStates","matchesCondition","startState","size","acceptStates","validateLinkAttributes","metadata","requiredAttrs","availableAttrs","url","protocol","web5Type","entityType","entityId","attr","value","operator","_attr$value","toLowerCase","includes","endsWith","validateImageAttributes","src","alt","validateHtmlCommentAttributes","elementMatchesStop","enrichedElement","stop","elementType","htmlCommentAttrs","htmlCommentMetadata","linkAttrs","linkMetadata","imageAttrs","imageMetadata","ast","patternNode","_patternNode","findAllPatternNodesForElement","results","child","choice","findPatternNodeForElement","matchingNodes","defaultListPattern","get","elementIndex","lastValidIndex","lastAcceptStateIndex","isInAcceptState","wasInAcceptStateBefore","listItems","validationResult","listItemsEnriched","listPatternNode","astNodeIndex","elementPatternNode"],"sources":["../../../src/patternValidator/matcher.ts"],"sourcesContent":["import type {\n Automaton,\n BlockElement,\n TransitionCondition,\n PatternNode,\n EnrichedBlockElement,\n HtmlCommentAttribute,\n LinkAttribute,\n ImageAttribute,\n LinkMetadata,\n ImageMetadata,\n StopCondition,\n} from './types';\nimport { buildAutomaton } from './automaton';\n\nexport type MatchResult = {\n valid: boolean;\n error?: string;\n startIndex: number;\n endIndex: number;\n};\n\nfunction parseListFromElement(element: BlockElement): string[][] | null {\n const elementStr = element as string;\n if (!elementStr.startsWith('list{')) {\n return null;\n }\n\n const listMatch = elementStr.match(/^list\\{(.+)\\}$/);\n if (!listMatch) {\n return null;\n }\n\n const content = listMatch[1];\n const items: string[][] = [];\n let i = 0;\n\n // Handle double bracket format: [[item1], [item2]]\n while (i < content.length) {\n if (content[i] === '[') {\n i++; // skip first [\n let depth = 1;\n let itemContent = '';\n\n while (i < content.length && depth > 0) {\n if (content[i] === '[') {\n depth++;\n }\n if (content[i] === ']') {\n depth--;\n }\n if (depth > 0) {\n itemContent += content[i];\n }\n i++;\n }\n\n const elements = itemContent\n .split(',')\n .map((e) => e.trim())\n .filter((e) => e);\n if (elements.length > 0) {\n items.push(elements);\n }\n } else {\n i++;\n }\n }\n\n return items.length > 0 ? items : null;\n}\n\nfunction findAllListPatterns(\n node: PatternNode,\n): Map<string, PatternNode & { kind: 'list' }> {\n // Create a map of list element signatures to their pattern nodes\n // This handles lists that appear multiple times due to quantifiers\n const listPatterns = new Map<string, PatternNode & { kind: 'list' }>();\n\n function traverse(n: PatternNode): void {\n if (n.kind === 'list') {\n // Use the list structure as a key (simplified - in reality all lists use same structure)\n const key = 'list';\n if (!listPatterns.has(key)) {\n listPatterns.set(key, n);\n }\n } else if (n.kind === 'sequence') {\n n.children.forEach(traverse);\n } else if (n.kind === 'alternation') {\n n.choices.forEach(traverse);\n } else if (n.kind === 'group') {\n traverse(n.pattern);\n }\n }\n\n traverse(node);\n return listPatterns;\n}\n\nfunction validateListItems(\n items: string[][],\n itemCount?: { min?: number; max?: number },\n itemStructure?: PatternNode,\n enrichedItems?: EnrichedBlockElement[][],\n): MatchResult {\n // Validate item count\n if (itemCount) {\n const min = itemCount.min ?? 0;\n const max = itemCount.max ?? Infinity;\n if (items.length < min || items.length > max) {\n const minStr = min === 0 ? '0' : min.toString();\n const maxStr = max === Infinity ? 'unlimited' : max.toString();\n const rangeStr =\n min === max ? `exactly ${min}` : `between ${minStr} and ${maxStr}`;\n return {\n valid: false,\n error: `Expected ${rangeStr} items in list, but got ${items.length} items`,\n startIndex: 0,\n endIndex: -1,\n };\n }\n }\n\n // Validate each item structure\n if (itemStructure) {\n for (let i = 0; i < items.length; i++) {\n const enrichedItem = enrichedItems?.[i];\n const result = validateItemStructure(\n items[i],\n itemStructure,\n i,\n enrichedItem,\n );\n if (!result.valid) {\n return result;\n }\n }\n }\n\n return {\n valid: true,\n startIndex: 0,\n endIndex: items.length > 0 ? items.length - 1 : -1,\n };\n}\n\nfunction validateItemStructure(\n item: string[],\n pattern: PatternNode,\n itemIndex: number,\n enrichedItem?: EnrichedBlockElement[],\n): MatchResult {\n // Build automaton for the item pattern\n const automaton = buildAutomaton(pattern);\n\n let isValid: boolean;\n if (enrichedItem) {\n // Use full match with metadata for attribute checking (e.g., link[entityType=\"solution\"])\n const matchResult = match(automaton, enrichedItem, pattern);\n // Require full match: all elements must be consumed (no extra trailing elements)\n isValid =\n matchResult.valid && matchResult.endIndex === enrichedItem.length - 1;\n } else {\n // Fallback: use simple matching without metadata\n isValid = matchSimple(automaton, item as BlockElement[]);\n }\n\n if (!isValid) {\n const patternStr = formatPatternNode(pattern);\n return {\n valid: false,\n error: `Item #${itemIndex + 1} [${item.join(\n ', ',\n )}] does not match expected pattern: ${patternStr}`,\n startIndex: 0,\n endIndex: -1,\n };\n }\n\n return {\n valid: true,\n startIndex: 0,\n endIndex: item.length > 0 ? item.length - 1 : -1,\n };\n}\n\nfunction formatPatternNode(node: PatternNode): string {\n switch (node.kind) {\n case 'element':\n return node.element + formatQuantifier(node.quantifier);\n case 'sequence':\n return node.children.map(formatPatternNode).join(' > ');\n case 'alternation':\n return node.choices.map(formatPatternNode).join(' | ');\n case 'group':\n return (\n '(' +\n formatPatternNode(node.pattern) +\n ')' +\n formatQuantifier(node.quantifier)\n );\n case 'list':\n return 'list{...}';\n default:\n return '?';\n }\n}\n\nfunction formatQuantifier(quantifier?: {\n type: string;\n min?: number;\n max?: number;\n}): string {\n if (!quantifier) {\n return '';\n }\n switch (quantifier.type) {\n case 'star':\n return '*';\n case 'plus':\n return '+';\n case 'optional':\n return '?';\n case 'exact':\n return `[${quantifier.min}]`;\n case 'range':\n if (quantifier.min === undefined) {\n return `[-${quantifier.max}]`;\n }\n if (quantifier.max === undefined) {\n return `[${quantifier.min}-]`;\n }\n return `[${quantifier.min}-${quantifier.max}]`;\n default:\n return '';\n }\n}\n\nfunction matchSimple(automaton: Automaton, elements: BlockElement[]): boolean {\n function epsilonClosure(stateIds: Set<string>): Set<string> {\n const closure = new Set(stateIds);\n const stack = Array.from(stateIds);\n\n while (stack.length > 0) {\n const state = stack.pop()!;\n for (const transition of automaton.transitions) {\n if (\n transition.from === state &&\n transition.condition.type === 'epsilon' &&\n !closure.has(transition.to)\n ) {\n closure.add(transition.to);\n stack.push(transition.to);\n }\n }\n }\n\n return closure;\n }\n\n function getNextStates(\n currentStates: Set<string>,\n element: BlockElement,\n ): Set<string> {\n const nextStates = new Set<string>();\n\n for (const state of currentStates) {\n for (const transition of automaton.transitions) {\n if (\n transition.from === state &&\n matchesCondition(transition.condition, element)\n ) {\n nextStates.add(transition.to);\n }\n }\n }\n\n return nextStates;\n }\n\n function matchesCondition(\n condition: TransitionCondition,\n element: BlockElement,\n ): boolean {\n if (condition.type === 'element') {\n return condition.element === element;\n }\n return false;\n }\n\n let currentStates = epsilonClosure(new Set([automaton.startState]));\n\n for (const element of elements) {\n const nextStates = getNextStates(currentStates, element);\n if (nextStates.size === 0) {\n return false;\n }\n currentStates = epsilonClosure(nextStates);\n }\n\n for (const state of currentStates) {\n if (automaton.acceptStates.has(state)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction validateLinkAttributes(\n metadata: LinkMetadata | undefined,\n requiredAttrs: LinkAttribute[],\n): boolean {\n if (!metadata) {\n // If metadata is missing but attributes are required, return false\n return requiredAttrs.length === 0;\n }\n\n // Build a record of all available attributes from LinkMetadata\n const availableAttrs: Record<string, string | undefined> = {\n url: metadata.url,\n protocol: metadata.protocol,\n web5Type: metadata.web5Type,\n entityType: metadata.entityType,\n entityId: metadata.entityId,\n };\n\n // Validate each required attribute\n for (const attr of requiredAttrs) {\n const value = availableAttrs[attr.key];\n\n switch (attr.operator) {\n case 'exists':\n // Check if key exists and has a non-undefined value\n if (value === undefined) {\n return false;\n }\n break;\n case 'equals':\n // Case-insensitive comparison for entityType, exact match for others\n if (attr.key === 'entityType') {\n if (value?.toLowerCase() !== attr.value?.toLowerCase()) {\n return false;\n }\n } else if (value !== attr.value) {\n return false;\n }\n break;\n case 'contains':\n // Check if value contains substring\n if (value === undefined || !attr.value || !value.includes(attr.value)) {\n return false;\n }\n break;\n case 'startsWith':\n // Check if value starts with prefix\n if (\n value === undefined ||\n !attr.value ||\n !value.startsWith(attr.value)\n ) {\n return false;\n }\n break;\n case 'endsWith':\n // Check if value ends with suffix\n if (value === undefined || !attr.value || !value.endsWith(attr.value)) {\n return false;\n }\n break;\n }\n }\n\n return true;\n}\n\nfunction validateImageAttributes(\n metadata: ImageMetadata | undefined,\n requiredAttrs: ImageAttribute[],\n): boolean {\n if (!metadata) {\n return requiredAttrs.length === 0;\n }\n\n const availableAttrs: Record<string, string | undefined> = {\n src: metadata.src,\n alt: metadata.alt,\n type: metadata.type,\n };\n\n for (const attr of requiredAttrs) {\n const value = availableAttrs[attr.key];\n\n switch (attr.operator) {\n case 'exists':\n if (value === undefined) {\n return false;\n }\n break;\n case 'equals':\n if (value !== attr.value) {\n return false;\n }\n break;\n case 'contains':\n if (value === undefined || !attr.value || !value.includes(attr.value)) {\n return false;\n }\n break;\n case 'startsWith':\n if (\n value === undefined ||\n !attr.value ||\n !value.startsWith(attr.value)\n ) {\n return false;\n }\n break;\n case 'endsWith':\n if (value === undefined || !attr.value || !value.endsWith(attr.value)) {\n return false;\n }\n break;\n }\n }\n\n return true;\n}\n\nfunction validateHtmlCommentAttributes(\n metadata: Record<string, string> | undefined,\n requiredAttrs: HtmlCommentAttribute[],\n): boolean {\n if (!metadata) {\n // If metadata is missing, no attributes can exist\n return requiredAttrs.length === 0;\n }\n\n // Validate each required attribute\n for (const attr of requiredAttrs) {\n const value = metadata[attr.key];\n\n switch (attr.operator) {\n case 'exists':\n // Check if key exists in metadata\n if (!(attr.key in metadata)) {\n return false;\n }\n break;\n case 'equals':\n // Check if value equals exactly\n if (value !== attr.value) {\n return false;\n }\n break;\n case 'contains':\n // Check if value contains substring\n if (!value || !attr.value || !value.includes(attr.value)) {\n return false;\n }\n break;\n case 'startsWith':\n // Check if value starts with prefix\n if (!value || !attr.value || !value.startsWith(attr.value)) {\n return false;\n }\n break;\n case 'endsWith':\n // Check if value ends with suffix\n if (!value || !attr.value || !value.endsWith(attr.value)) {\n return false;\n }\n break;\n }\n }\n\n return true;\n}\n\n/**\n * Checks whether an enriched block element satisfies a pattern's `~` stop\n * condition (element type plus optional attribute selectors).\n */\nexport function elementMatchesStop(\n enrichedElement: EnrichedBlockElement,\n stop: StopCondition,\n): boolean {\n // List elements may carry an inline structure (e.g. 'list{[t],[t]}')\n const elementType = (enrichedElement.element as string).startsWith('list')\n ? 'list'\n : enrichedElement.element;\n\n if (elementType !== stop.element) {\n return false;\n }\n\n if (stop.htmlCommentAttrs) {\n return validateHtmlCommentAttributes(\n enrichedElement.htmlCommentMetadata,\n stop.htmlCommentAttrs,\n );\n }\n if (stop.linkAttrs) {\n return validateLinkAttributes(enrichedElement.linkMetadata, stop.linkAttrs);\n }\n if (stop.imageAttrs) {\n return validateImageAttributes(\n enrichedElement.imageMetadata,\n stop.imageAttrs,\n );\n }\n\n return true;\n}\n\nexport function match(\n automaton: Automaton,\n elements: EnrichedBlockElement[],\n ast?: PatternNode,\n): MatchResult {\n function epsilonClosure(stateIds: Set<string>): Set<string> {\n const closure = new Set(stateIds);\n const stack = Array.from(stateIds);\n\n while (stack.length > 0) {\n const state = stack.pop()!;\n for (const transition of automaton.transitions) {\n if (\n transition.from === state &&\n transition.condition.type === 'epsilon' &&\n !closure.has(transition.to)\n ) {\n closure.add(transition.to);\n stack.push(transition.to);\n }\n }\n }\n\n return closure;\n }\n\n function getNextStates(\n currentStates: Set<string>,\n enrichedElement: EnrichedBlockElement,\n patternNode?: PatternNode,\n ): Set<string> {\n const nextStates = new Set<string>();\n\n for (const state of currentStates) {\n for (const transition of automaton.transitions) {\n if (\n transition.from === state &&\n matchesCondition(transition.condition, enrichedElement, patternNode)\n ) {\n nextStates.add(transition.to);\n }\n }\n }\n\n return nextStates;\n }\n\n function matchesCondition(\n condition: TransitionCondition,\n enrichedElement: EnrichedBlockElement,\n _patternNode?: PatternNode,\n ): boolean {\n if (condition.type === 'element') {\n const element = enrichedElement.element;\n\n // Check if element type matches\n if (condition.element !== element) {\n return false;\n }\n\n // If this is an html_comment element, check HTML comment attributes from the transition\n if (element === 'html_comment' && condition.htmlCommentAttrs) {\n return validateHtmlCommentAttributes(\n enrichedElement.htmlCommentMetadata,\n condition.htmlCommentAttrs,\n );\n }\n\n // If this is a link element, check link attributes from the transition\n if (element === 'link' && condition.linkAttrs) {\n return validateLinkAttributes(\n enrichedElement.linkMetadata,\n condition.linkAttrs,\n );\n }\n\n // If this is an image element, check image attributes from the transition\n if (element === 'image' && condition.imageAttrs) {\n return validateImageAttributes(\n enrichedElement.imageMetadata,\n condition.imageAttrs,\n );\n }\n\n return true;\n }\n return false;\n }\n\n // Helper function to find all pattern nodes for a given element type\n function findAllPatternNodesForElement(\n elementType: BlockElement,\n pattern: PatternNode,\n ): PatternNode[] {\n const results: PatternNode[] = [];\n function traverse(node: PatternNode): void {\n if (node.kind === 'element' && node.element === elementType) {\n results.push(node);\n }\n if (node.kind === 'sequence') {\n for (const child of node.children) {\n traverse(child);\n }\n }\n if (node.kind === 'alternation') {\n for (const choice of node.choices) {\n traverse(choice);\n }\n }\n if (node.kind === 'group') {\n traverse(node.pattern);\n }\n }\n traverse(pattern);\n return results;\n }\n\n // Helper function to find the first matching pattern node for an element\n // If multiple exist, we check them all and return the first that matches attributes (if any)\n function findPatternNodeForElement(\n elementType: BlockElement,\n pattern: PatternNode,\n enrichedElement: EnrichedBlockElement,\n ): PatternNode | undefined {\n const matchingNodes = findAllPatternNodesForElement(elementType, pattern);\n if (matchingNodes.length === 0) {\n return undefined;\n }\n if (matchingNodes.length === 1) {\n return matchingNodes[0];\n }\n // If multiple pattern nodes exist, find one that matches attributes (if element has attributes)\n if (elementType === 'html_comment' && enrichedElement.htmlCommentMetadata) {\n for (const node of matchingNodes) {\n if (node.kind === 'element' && node.htmlCommentAttrs) {\n if (\n validateHtmlCommentAttributes(\n enrichedElement.htmlCommentMetadata,\n node.htmlCommentAttrs,\n )\n ) {\n return node;\n }\n }\n }\n }\n // If multiple pattern nodes exist for link, find one that matches link attributes\n if (elementType === 'link' && enrichedElement.linkMetadata) {\n for (const node of matchingNodes) {\n if (node.kind === 'element' && node.linkAttrs) {\n if (\n validateLinkAttributes(enrichedElement.linkMetadata, node.linkAttrs)\n ) {\n return node;\n }\n }\n }\n }\n // If multiple pattern nodes exist for image, find one that matches image attributes\n if (elementType === 'image' && enrichedElement.imageMetadata) {\n for (const node of matchingNodes) {\n if (node.kind === 'element' && node.imageAttrs) {\n if (\n validateImageAttributes(\n enrichedElement.imageMetadata,\n node.imageAttrs,\n )\n ) {\n return node;\n }\n }\n }\n }\n // Return first matching node if no attribute match found\n return matchingNodes[0];\n }\n\n // Extract list patterns from AST if provided\n // Use a map so the same pattern applies to all list instances\n const listPatterns = ast ? findAllListPatterns(ast) : new Map();\n const defaultListPattern = listPatterns.get('list');\n\n let currentStates = epsilonClosure(new Set([automaton.startState]));\n let elementIndex = 0;\n let lastValidIndex = -1; // Track the last successfully matched element index\n let lastAcceptStateIndex = -1; // Track when we were last in an accept state\n\n // Handle empty array case\n if (elements.length === 0) {\n // Check if empty array is acceptable (pattern allows zero elements)\n for (const state of currentStates) {\n if (automaton.acceptStates.has(state)) {\n return { valid: true, startIndex: 0, endIndex: -1 };\n }\n }\n return {\n valid: false,\n error: 'Empty array does not match pattern',\n startIndex: 0,\n endIndex: -1,\n };\n }\n\n for (const enrichedElement of elements) {\n // Check if we're already in an accept state before processing this element\n // If so, this element is extra and we can accept it\n let isInAcceptState = false;\n for (const state of currentStates) {\n if (automaton.acceptStates.has(state)) {\n isInAcceptState = true;\n break;\n }\n }\n\n // Also check if we were in an accept state before starting to match incomplete elements\n // This handles cases where we matched some elements after being in an accept state,\n // but those elements didn't complete the pattern\n const wasInAcceptStateBefore =\n lastAcceptStateIndex >= 0 && elementIndex > lastAcceptStateIndex;\n\n const element = enrichedElement.element;\n // Check if this is a list element\n const listItems = parseListFromElement(element);\n if (listItems !== null && defaultListPattern) {\n // Validate list items using the pattern\n const validationResult = validateListItems(\n listItems,\n defaultListPattern.itemCount,\n defaultListPattern.itemStructure,\n enrichedElement.listItemsEnriched,\n );\n if (!validationResult.valid) {\n return {\n valid: false,\n error: `List at position ${elementIndex + 1} failed validation: ${\n validationResult.error\n }`,\n startIndex: 0,\n endIndex: lastValidIndex,\n };\n }\n\n // Continue matching with 'list' as element type\n const listPatternNode = ast\n ? findPatternNodeForElement('list', ast, {\n element: 'list',\n astNodeIndex: enrichedElement.astNodeIndex,\n })\n : undefined;\n const nextStates = getNextStates(\n currentStates,\n { element: 'list', astNodeIndex: enrichedElement.astNodeIndex },\n listPatternNode,\n );\n if (nextStates.size === 0) {\n // No transitions - if we were already in accept state, extra elements are OK\n if (isInAcceptState || wasInAcceptStateBefore) {\n // Pattern was fully matched, extra elements are OK\n return {\n valid: true,\n startIndex: 0,\n endIndex:\n lastAcceptStateIndex >= 0 ? lastAcceptStateIndex : lastValidIndex,\n };\n }\n\n return {\n valid: false,\n error: `Unexpected list at position ${\n elementIndex + 1\n }. Pattern does not expect a list here.`,\n startIndex: 0,\n endIndex: lastValidIndex,\n };\n }\n currentStates = epsilonClosure(nextStates);\n // Successfully matched this element\n lastValidIndex = elementIndex;\n\n // Check if we're now in an accept state (after matching list)\n for (const state of currentStates) {\n if (automaton.acceptStates.has(state)) {\n lastAcceptStateIndex = elementIndex;\n break;\n }\n }\n } else if (listItems !== null) {\n // List without validation pattern - just match as 'list'\n const listPatternNode = ast\n ? findPatternNodeForElement('list', ast, {\n element: 'list',\n astNodeIndex: enrichedElement.astNodeIndex,\n })\n : undefined;\n const nextStates = getNextStates(\n currentStates,\n { element: 'list', astNodeIndex: enrichedElement.astNodeIndex },\n listPatternNode,\n );\n if (nextStates.size === 0) {\n // No transitions - if we were already in accept state, extra elements are OK\n if (isInAcceptState || wasInAcceptStateBefore) {\n // Pattern was fully matched, extra elements are OK\n return {\n valid: true,\n startIndex: 0,\n endIndex:\n lastAcceptStateIndex >= 0 ? lastAcceptStateIndex : lastValidIndex,\n };\n }\n\n return {\n valid: false,\n error: `Unexpected list at position ${\n elementIndex + 1\n }. Pattern does not expect a list here.`,\n startIndex: 0,\n endIndex: lastValidIndex,\n };\n }\n currentStates = epsilonClosure(nextStates);\n // Successfully matched this element\n lastValidIndex = elementIndex;\n\n // Check if we're now in an accept state (after matching list without pattern)\n for (const state of currentStates) {\n if (automaton.acceptStates.has(state)) {\n lastAcceptStateIndex = elementIndex;\n break;\n }\n }\n } else {\n // Regular element matching\n const elementPatternNode = ast\n ? findPatternNodeForElement(element, ast, enrichedElement)\n : undefined;\n const nextStates = getNextStates(\n currentStates,\n enrichedElement,\n elementPatternNode,\n );\n\n if (nextStates.size === 0) {\n // No transitions - if we were already in accept state, extra elements are OK\n if (isInAcceptState || wasInAcceptStateBefore) {\n // Pattern was fully matched, extra elements are OK\n return {\n valid: true,\n startIndex: 0,\n endIndex:\n lastAcceptStateIndex >= 0 ? lastAcceptStateIndex : lastValidIndex,\n };\n }\n\n return {\n valid: false,\n error: `Unexpected element '${element}' at position ${\n elementIndex + 1\n }. Pattern does not match.`,\n startIndex: 0,\n endIndex: lastValidIndex,\n };\n }\n\n // If we're in an accept state and the element matches, check if matching it\n // leads to a state that can eventually complete the pattern\n if (isInAcceptState) {\n // Check if any of the next states are accept states, or can reach accept states\n // via epsilon transitions (which we already did with epsilonClosure)\n // If matching this element doesn't immediately lead to an accept state,\n // it might still be valid if it's part of a larger pattern. But if we're\n // already in an accept state and this element starts a new pattern that\n // can't complete, we should treat it as extra.\n // For now, we'll continue matching and let the pattern fail naturally if incomplete.\n // The key is that we're in an accept state, so if matching fails, we can backtrack.\n void epsilonClosure(nextStates);\n }\n\n currentStates = epsilonClosure(nextStates);\n // Successfully matched this element\n lastValidIndex = elementIndex;\n\n // Check if we're now in an accept state (after matching list or any element)\n for (const state of currentStates) {\n if (automaton.acceptStates.has(state)) {\n lastAcceptStateIndex = elementIndex;\n break;\n }\n }\n }\n\n elementIndex++;\n }\n\n // Check if any current state is an accept state\n for (const state of currentStates) {\n if (automaton.acceptStates.has(state)) {\n // Complete match - all elements matched\n return {\n valid: true,\n startIndex: 0,\n endIndex: elements.length - 1,\n };\n }\n }\n\n // Incomplete match - pattern expects more elements but we've processed all\n // If we were in an accept state at some point, and the incomplete part started\n // after that point, treat the incomplete part as extra elements\n if (lastAcceptStateIndex >= 0 && lastValidIndex > lastAcceptStateIndex) {\n // We were in an accept state, then matched more elements that didn't complete\n // Treat this as a complete match with extra elements\n return {\n valid: true,\n startIndex: 0,\n endIndex: lastAcceptStateIndex,\n };\n }\n\n return {\n valid: false,\n error: `Pattern matching incomplete. Expected more elements after position ${elementIndex}.`,\n startIndex: 0,\n endIndex: lastValidIndex,\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,531 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses a pattern, returning only the structural pattern node.
|
|
3
|
+
* A trailing `~ <element>` stop clause is validated but discarded —
|
|
4
|
+
* callers that only care about pattern structure stay compatible
|
|
5
|
+
* with patterns that use a stop clause.
|
|
6
|
+
*/
|
|
7
|
+
export function parse(tokens) {
|
|
8
|
+
return parseWithStop(tokens).pattern;
|
|
9
|
+
}
|
|
10
|
+
export function parseWithStop(tokens) {
|
|
11
|
+
let position = 0;
|
|
12
|
+
function current() {
|
|
13
|
+
return tokens[position];
|
|
14
|
+
}
|
|
15
|
+
function peek(offset) {
|
|
16
|
+
if (offset === void 0) {
|
|
17
|
+
offset = 1;
|
|
18
|
+
}
|
|
19
|
+
return tokens[position + offset] || {
|
|
20
|
+
type: 'EOF'
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function consume(expected) {
|
|
24
|
+
if (expected && current().type !== expected) {
|
|
25
|
+
throw new Error(`Expected ${expected}, got ${current().type}`);
|
|
26
|
+
}
|
|
27
|
+
return tokens[position++];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Check if the current LBRACKET starts a quantifier (e.g., [2], [1-3], [-5])
|
|
31
|
+
// vs an attribute selector (e.g., [entityType], [entityType="value"])
|
|
32
|
+
function isQuantifierBracket() {
|
|
33
|
+
if (current().type !== 'LBRACKET') {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
const nextToken = peek(1);
|
|
37
|
+
// Quantifier brackets start with NUMBER or DASH
|
|
38
|
+
return nextToken.type === 'NUMBER' || nextToken.type === 'DASH';
|
|
39
|
+
}
|
|
40
|
+
function parseQuantifier() {
|
|
41
|
+
if (current().type === 'STAR') {
|
|
42
|
+
consume('STAR');
|
|
43
|
+
return {
|
|
44
|
+
type: 'star',
|
|
45
|
+
min: 0,
|
|
46
|
+
max: undefined
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
if (current().type === 'PLUS') {
|
|
50
|
+
consume('PLUS');
|
|
51
|
+
return {
|
|
52
|
+
type: 'plus',
|
|
53
|
+
min: 1,
|
|
54
|
+
max: undefined
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
if (current().type === 'QUESTION') {
|
|
58
|
+
consume('QUESTION');
|
|
59
|
+
return {
|
|
60
|
+
type: 'optional',
|
|
61
|
+
min: 0,
|
|
62
|
+
max: 1
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
if (current().type === 'LBRACKET') {
|
|
66
|
+
consume('LBRACKET');
|
|
67
|
+
if (current().type === 'DASH') {
|
|
68
|
+
// [-M] means 0 to M
|
|
69
|
+
consume('DASH');
|
|
70
|
+
const max = parseInt(consume('NUMBER').value, 10);
|
|
71
|
+
consume('RBRACKET');
|
|
72
|
+
return {
|
|
73
|
+
type: 'range',
|
|
74
|
+
min: 0,
|
|
75
|
+
max
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
const first = parseInt(consume('NUMBER').value, 10);
|
|
79
|
+
if (current().type === 'DASH') {
|
|
80
|
+
consume('DASH');
|
|
81
|
+
if (current().type === 'RBRACKET') {
|
|
82
|
+
// [N-] means N or more (open-ended)
|
|
83
|
+
consume('RBRACKET');
|
|
84
|
+
return {
|
|
85
|
+
type: 'range',
|
|
86
|
+
min: first,
|
|
87
|
+
max: undefined
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
// [N-M] means between N and M
|
|
91
|
+
const second = parseInt(consume('NUMBER').value, 10);
|
|
92
|
+
consume('RBRACKET');
|
|
93
|
+
return {
|
|
94
|
+
type: 'range',
|
|
95
|
+
min: first,
|
|
96
|
+
max: second
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
consume('RBRACKET');
|
|
100
|
+
return {
|
|
101
|
+
type: 'exact',
|
|
102
|
+
min: first,
|
|
103
|
+
max: first
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
throw new Error('Expected quantifier');
|
|
107
|
+
}
|
|
108
|
+
function parseHtmlCommentAttributes() {
|
|
109
|
+
const attributes = [];
|
|
110
|
+
|
|
111
|
+
// Parse one or more attribute selectors: [key], [key=value], [key*=value], etc.
|
|
112
|
+
// Stop when we encounter a quantifier bracket (e.g., [2], [1-3])
|
|
113
|
+
while (current().type === 'LBRACKET' && !isQuantifierBracket()) {
|
|
114
|
+
consume('LBRACKET');
|
|
115
|
+
|
|
116
|
+
// Parse attribute key (identifier or element)
|
|
117
|
+
let key = '';
|
|
118
|
+
if (current().type === 'ELEMENT' || current().type === 'IDENTIFIER') {
|
|
119
|
+
key = current().value;
|
|
120
|
+
consume();
|
|
121
|
+
} else {
|
|
122
|
+
throw new Error(`Expected attribute key, got ${current().type}`);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Check for operator
|
|
126
|
+
if (current().type === 'EQUALS') {
|
|
127
|
+
consume('EQUALS');
|
|
128
|
+
// Check for wildcard
|
|
129
|
+
if (current().type === 'STAR') {
|
|
130
|
+
consume('STAR');
|
|
131
|
+
attributes.push({
|
|
132
|
+
key,
|
|
133
|
+
operator: 'exists'
|
|
134
|
+
});
|
|
135
|
+
} else {
|
|
136
|
+
// Parse value (identifier, element, or string)
|
|
137
|
+
let value = '';
|
|
138
|
+
if (current().type === 'ELEMENT' || current().type === 'IDENTIFIER' || current().type === 'STRING') {
|
|
139
|
+
value = current().value;
|
|
140
|
+
consume();
|
|
141
|
+
} else {
|
|
142
|
+
throw new Error(`Expected attribute value, got ${current().type}`);
|
|
143
|
+
}
|
|
144
|
+
attributes.push({
|
|
145
|
+
key,
|
|
146
|
+
operator: 'equals',
|
|
147
|
+
value
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
} else if (current().type === 'CONTAINS_OP') {
|
|
151
|
+
consume('CONTAINS_OP');
|
|
152
|
+
let value = '';
|
|
153
|
+
if (current().type === 'ELEMENT' || current().type === 'IDENTIFIER' || current().type === 'STRING') {
|
|
154
|
+
value = current().value;
|
|
155
|
+
consume();
|
|
156
|
+
} else {
|
|
157
|
+
throw new Error(`Expected attribute value, got ${current().type}`);
|
|
158
|
+
}
|
|
159
|
+
attributes.push({
|
|
160
|
+
key,
|
|
161
|
+
operator: 'contains',
|
|
162
|
+
value
|
|
163
|
+
});
|
|
164
|
+
} else if (current().type === 'STARTS_WITH_OP') {
|
|
165
|
+
consume('STARTS_WITH_OP');
|
|
166
|
+
let value = '';
|
|
167
|
+
if (current().type === 'ELEMENT' || current().type === 'IDENTIFIER' || current().type === 'STRING') {
|
|
168
|
+
value = current().value;
|
|
169
|
+
consume();
|
|
170
|
+
} else {
|
|
171
|
+
throw new Error(`Expected attribute value, got ${current().type}`);
|
|
172
|
+
}
|
|
173
|
+
attributes.push({
|
|
174
|
+
key,
|
|
175
|
+
operator: 'startsWith',
|
|
176
|
+
value
|
|
177
|
+
});
|
|
178
|
+
} else if (current().type === 'ENDS_WITH_OP') {
|
|
179
|
+
consume('ENDS_WITH_OP');
|
|
180
|
+
let value = '';
|
|
181
|
+
if (current().type === 'ELEMENT' || current().type === 'IDENTIFIER' || current().type === 'STRING') {
|
|
182
|
+
value = current().value;
|
|
183
|
+
consume();
|
|
184
|
+
} else {
|
|
185
|
+
throw new Error(`Expected attribute value, got ${current().type}`);
|
|
186
|
+
}
|
|
187
|
+
attributes.push({
|
|
188
|
+
key,
|
|
189
|
+
operator: 'endsWith',
|
|
190
|
+
value
|
|
191
|
+
});
|
|
192
|
+
} else {
|
|
193
|
+
// No operator means "exists"
|
|
194
|
+
attributes.push({
|
|
195
|
+
key,
|
|
196
|
+
operator: 'exists'
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
consume('RBRACKET');
|
|
200
|
+
}
|
|
201
|
+
return attributes;
|
|
202
|
+
}
|
|
203
|
+
function parseLinkAttributes() {
|
|
204
|
+
const attributes = [];
|
|
205
|
+
|
|
206
|
+
// Parse one or more attribute selectors: [key], [key=value], [key*=value], etc.
|
|
207
|
+
// Stop when we encounter a quantifier bracket (e.g., [2], [1-3])
|
|
208
|
+
while (current().type === 'LBRACKET' && !isQuantifierBracket()) {
|
|
209
|
+
consume('LBRACKET');
|
|
210
|
+
|
|
211
|
+
// Parse attribute key (identifier or element)
|
|
212
|
+
let key = '';
|
|
213
|
+
if (current().type === 'ELEMENT' || current().type === 'IDENTIFIER') {
|
|
214
|
+
key = current().value;
|
|
215
|
+
consume();
|
|
216
|
+
} else {
|
|
217
|
+
throw new Error(`Expected attribute key, got ${current().type}`);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// Check for operator
|
|
221
|
+
if (current().type === 'EQUALS') {
|
|
222
|
+
consume('EQUALS');
|
|
223
|
+
// Check for wildcard
|
|
224
|
+
if (current().type === 'STAR') {
|
|
225
|
+
consume('STAR');
|
|
226
|
+
attributes.push({
|
|
227
|
+
key,
|
|
228
|
+
operator: 'exists'
|
|
229
|
+
});
|
|
230
|
+
} else {
|
|
231
|
+
// Parse value (identifier, element, or string)
|
|
232
|
+
let value = '';
|
|
233
|
+
if (current().type === 'ELEMENT' || current().type === 'IDENTIFIER' || current().type === 'STRING') {
|
|
234
|
+
value = current().value;
|
|
235
|
+
consume();
|
|
236
|
+
} else {
|
|
237
|
+
throw new Error(`Expected attribute value, got ${current().type}`);
|
|
238
|
+
}
|
|
239
|
+
attributes.push({
|
|
240
|
+
key,
|
|
241
|
+
operator: 'equals',
|
|
242
|
+
value
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
} else if (current().type === 'CONTAINS_OP') {
|
|
246
|
+
consume('CONTAINS_OP');
|
|
247
|
+
let value = '';
|
|
248
|
+
if (current().type === 'ELEMENT' || current().type === 'IDENTIFIER' || current().type === 'STRING') {
|
|
249
|
+
value = current().value;
|
|
250
|
+
consume();
|
|
251
|
+
} else {
|
|
252
|
+
throw new Error(`Expected attribute value, got ${current().type}`);
|
|
253
|
+
}
|
|
254
|
+
attributes.push({
|
|
255
|
+
key,
|
|
256
|
+
operator: 'contains',
|
|
257
|
+
value
|
|
258
|
+
});
|
|
259
|
+
} else if (current().type === 'STARTS_WITH_OP') {
|
|
260
|
+
consume('STARTS_WITH_OP');
|
|
261
|
+
let value = '';
|
|
262
|
+
if (current().type === 'ELEMENT' || current().type === 'IDENTIFIER' || current().type === 'STRING') {
|
|
263
|
+
value = current().value;
|
|
264
|
+
consume();
|
|
265
|
+
} else {
|
|
266
|
+
throw new Error(`Expected attribute value, got ${current().type}`);
|
|
267
|
+
}
|
|
268
|
+
attributes.push({
|
|
269
|
+
key,
|
|
270
|
+
operator: 'startsWith',
|
|
271
|
+
value
|
|
272
|
+
});
|
|
273
|
+
} else if (current().type === 'ENDS_WITH_OP') {
|
|
274
|
+
consume('ENDS_WITH_OP');
|
|
275
|
+
let value = '';
|
|
276
|
+
if (current().type === 'ELEMENT' || current().type === 'IDENTIFIER' || current().type === 'STRING') {
|
|
277
|
+
value = current().value;
|
|
278
|
+
consume();
|
|
279
|
+
} else {
|
|
280
|
+
throw new Error(`Expected attribute value, got ${current().type}`);
|
|
281
|
+
}
|
|
282
|
+
attributes.push({
|
|
283
|
+
key,
|
|
284
|
+
operator: 'endsWith',
|
|
285
|
+
value
|
|
286
|
+
});
|
|
287
|
+
} else {
|
|
288
|
+
// No operator means "exists"
|
|
289
|
+
attributes.push({
|
|
290
|
+
key,
|
|
291
|
+
operator: 'exists'
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
consume('RBRACKET');
|
|
295
|
+
}
|
|
296
|
+
return attributes;
|
|
297
|
+
}
|
|
298
|
+
function parseImageAttributes() {
|
|
299
|
+
const attributes = [];
|
|
300
|
+
while (current().type === 'LBRACKET' && !isQuantifierBracket()) {
|
|
301
|
+
consume('LBRACKET');
|
|
302
|
+
let key = '';
|
|
303
|
+
if (current().type === 'ELEMENT' || current().type === 'IDENTIFIER') {
|
|
304
|
+
key = current().value;
|
|
305
|
+
consume();
|
|
306
|
+
} else {
|
|
307
|
+
throw new Error(`Expected attribute key, got ${current().type}`);
|
|
308
|
+
}
|
|
309
|
+
if (current().type === 'EQUALS') {
|
|
310
|
+
consume('EQUALS');
|
|
311
|
+
if (current().type === 'STAR') {
|
|
312
|
+
consume('STAR');
|
|
313
|
+
attributes.push({
|
|
314
|
+
key,
|
|
315
|
+
operator: 'exists'
|
|
316
|
+
});
|
|
317
|
+
} else {
|
|
318
|
+
let value = '';
|
|
319
|
+
if (current().type === 'ELEMENT' || current().type === 'IDENTIFIER' || current().type === 'STRING') {
|
|
320
|
+
value = current().value;
|
|
321
|
+
consume();
|
|
322
|
+
} else {
|
|
323
|
+
throw new Error(`Expected attribute value, got ${current().type}`);
|
|
324
|
+
}
|
|
325
|
+
attributes.push({
|
|
326
|
+
key,
|
|
327
|
+
operator: 'equals',
|
|
328
|
+
value
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
} else if (current().type === 'CONTAINS_OP') {
|
|
332
|
+
consume('CONTAINS_OP');
|
|
333
|
+
let value = '';
|
|
334
|
+
if (current().type === 'ELEMENT' || current().type === 'IDENTIFIER' || current().type === 'STRING') {
|
|
335
|
+
value = current().value;
|
|
336
|
+
consume();
|
|
337
|
+
} else {
|
|
338
|
+
throw new Error(`Expected attribute value, got ${current().type}`);
|
|
339
|
+
}
|
|
340
|
+
attributes.push({
|
|
341
|
+
key,
|
|
342
|
+
operator: 'contains',
|
|
343
|
+
value
|
|
344
|
+
});
|
|
345
|
+
} else if (current().type === 'STARTS_WITH_OP') {
|
|
346
|
+
consume('STARTS_WITH_OP');
|
|
347
|
+
let value = '';
|
|
348
|
+
if (current().type === 'ELEMENT' || current().type === 'IDENTIFIER' || current().type === 'STRING') {
|
|
349
|
+
value = current().value;
|
|
350
|
+
consume();
|
|
351
|
+
} else {
|
|
352
|
+
throw new Error(`Expected attribute value, got ${current().type}`);
|
|
353
|
+
}
|
|
354
|
+
attributes.push({
|
|
355
|
+
key,
|
|
356
|
+
operator: 'startsWith',
|
|
357
|
+
value
|
|
358
|
+
});
|
|
359
|
+
} else if (current().type === 'ENDS_WITH_OP') {
|
|
360
|
+
consume('ENDS_WITH_OP');
|
|
361
|
+
let value = '';
|
|
362
|
+
if (current().type === 'ELEMENT' || current().type === 'IDENTIFIER' || current().type === 'STRING') {
|
|
363
|
+
value = current().value;
|
|
364
|
+
consume();
|
|
365
|
+
} else {
|
|
366
|
+
throw new Error(`Expected attribute value, got ${current().type}`);
|
|
367
|
+
}
|
|
368
|
+
attributes.push({
|
|
369
|
+
key,
|
|
370
|
+
operator: 'endsWith',
|
|
371
|
+
value
|
|
372
|
+
});
|
|
373
|
+
} else {
|
|
374
|
+
attributes.push({
|
|
375
|
+
key,
|
|
376
|
+
operator: 'exists'
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
consume('RBRACKET');
|
|
380
|
+
}
|
|
381
|
+
return attributes;
|
|
382
|
+
}
|
|
383
|
+
function parseElement() {
|
|
384
|
+
const token = consume('ELEMENT');
|
|
385
|
+
const node = {
|
|
386
|
+
kind: 'element',
|
|
387
|
+
element: token.value
|
|
388
|
+
};
|
|
389
|
+
|
|
390
|
+
// Check if this is html_comment and if it has attribute selectors
|
|
391
|
+
if (node.element === 'html_comment' && current().type === 'LBRACKET') {
|
|
392
|
+
node.htmlCommentAttrs = parseHtmlCommentAttributes();
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
// Check if this is link and if it has attribute selectors
|
|
396
|
+
if (node.element === 'link' && current().type === 'LBRACKET') {
|
|
397
|
+
node.linkAttrs = parseLinkAttributes();
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
// Check if this is image and if it has attribute selectors
|
|
401
|
+
if (node.element === 'image' && current().type === 'LBRACKET') {
|
|
402
|
+
node.imageAttrs = parseImageAttributes();
|
|
403
|
+
}
|
|
404
|
+
if (['STAR', 'PLUS', 'QUESTION', 'LBRACKET'].includes(current().type)) {
|
|
405
|
+
node.quantifier = parseQuantifier();
|
|
406
|
+
}
|
|
407
|
+
return node;
|
|
408
|
+
}
|
|
409
|
+
function parseGroup() {
|
|
410
|
+
consume('LPAREN');
|
|
411
|
+
const pattern = parseSequence();
|
|
412
|
+
consume('RPAREN');
|
|
413
|
+
const node = {
|
|
414
|
+
kind: 'group',
|
|
415
|
+
pattern
|
|
416
|
+
};
|
|
417
|
+
if (['STAR', 'PLUS', 'QUESTION', 'LBRACKET'].includes(current().type)) {
|
|
418
|
+
node.quantifier = parseQuantifier();
|
|
419
|
+
}
|
|
420
|
+
return node;
|
|
421
|
+
}
|
|
422
|
+
function parseList() {
|
|
423
|
+
consume('KEYWORD'); // consume 'list'
|
|
424
|
+
const node = {
|
|
425
|
+
kind: 'list'
|
|
426
|
+
};
|
|
427
|
+
if (current().type === 'LBRACE') {
|
|
428
|
+
consume('LBRACE');
|
|
429
|
+
if (current().type === 'KEYWORD' && current().value === 'item') {
|
|
430
|
+
consume('KEYWORD'); // consume 'item'
|
|
431
|
+
|
|
432
|
+
// Check for quantifier on item: item+, item*, item?, item[N], item[N-M]
|
|
433
|
+
if (['STAR', 'PLUS', 'QUESTION', 'LBRACKET'].includes(current().type)) {
|
|
434
|
+
node.itemCount = parseQuantifier();
|
|
435
|
+
}
|
|
436
|
+
if (current().type === 'COLON') {
|
|
437
|
+
consume('COLON');
|
|
438
|
+
node.itemStructure = parseSequence();
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
consume('RBRACE');
|
|
442
|
+
}
|
|
443
|
+
if (['STAR', 'PLUS', 'QUESTION', 'LBRACKET'].includes(current().type)) {
|
|
444
|
+
node.quantifier = parseQuantifier();
|
|
445
|
+
}
|
|
446
|
+
return node;
|
|
447
|
+
}
|
|
448
|
+
function parsePrimary() {
|
|
449
|
+
if (current().type === 'LPAREN') {
|
|
450
|
+
return parseGroup();
|
|
451
|
+
}
|
|
452
|
+
if (current().type === 'KEYWORD' && current().value === 'list') {
|
|
453
|
+
return parseList();
|
|
454
|
+
}
|
|
455
|
+
if (current().type === 'ELEMENT') {
|
|
456
|
+
return parseElement();
|
|
457
|
+
}
|
|
458
|
+
if (current().type === 'IDENTIFIER') {
|
|
459
|
+
throw new Error(`Invalid element: ${current().value}`);
|
|
460
|
+
}
|
|
461
|
+
throw new Error(`Unexpected token: ${current().type}`);
|
|
462
|
+
}
|
|
463
|
+
function parseAlternation() {
|
|
464
|
+
const choices = [parsePrimary()];
|
|
465
|
+
while (current().type === 'PIPE') {
|
|
466
|
+
consume('PIPE');
|
|
467
|
+
choices.push(parsePrimary());
|
|
468
|
+
}
|
|
469
|
+
if (choices.length === 1) {
|
|
470
|
+
return choices[0];
|
|
471
|
+
}
|
|
472
|
+
const node = {
|
|
473
|
+
kind: 'alternation',
|
|
474
|
+
choices
|
|
475
|
+
};
|
|
476
|
+
if (['STAR', 'PLUS', 'QUESTION', 'LBRACKET'].includes(current().type)) {
|
|
477
|
+
node.quantifier = parseQuantifier();
|
|
478
|
+
}
|
|
479
|
+
return node;
|
|
480
|
+
}
|
|
481
|
+
function parseSequence() {
|
|
482
|
+
const children = [parseAlternation()];
|
|
483
|
+
while (current().type === 'ARROW') {
|
|
484
|
+
consume('ARROW');
|
|
485
|
+
children.push(parseAlternation());
|
|
486
|
+
}
|
|
487
|
+
if (children.length === 1) {
|
|
488
|
+
return children[0];
|
|
489
|
+
}
|
|
490
|
+
return {
|
|
491
|
+
kind: 'sequence',
|
|
492
|
+
children
|
|
493
|
+
};
|
|
494
|
+
}
|
|
495
|
+
function parseStopCondition() {
|
|
496
|
+
if (current().type !== 'ELEMENT') {
|
|
497
|
+
throw new Error(`Expected a single element after '~', got ${current().type}`);
|
|
498
|
+
}
|
|
499
|
+
const token = consume('ELEMENT');
|
|
500
|
+
const stop = {
|
|
501
|
+
element: token.value
|
|
502
|
+
};
|
|
503
|
+
if (stop.element === 'html_comment' && current().type === 'LBRACKET') {
|
|
504
|
+
stop.htmlCommentAttrs = parseHtmlCommentAttributes();
|
|
505
|
+
}
|
|
506
|
+
if (stop.element === 'link' && current().type === 'LBRACKET') {
|
|
507
|
+
stop.linkAttrs = parseLinkAttributes();
|
|
508
|
+
}
|
|
509
|
+
if (stop.element === 'image' && current().type === 'LBRACKET') {
|
|
510
|
+
stop.imageAttrs = parseImageAttributes();
|
|
511
|
+
}
|
|
512
|
+
if (['STAR', 'PLUS', 'QUESTION'].includes(current().type) || isQuantifierBracket()) {
|
|
513
|
+
throw new Error("Quantifiers are not allowed on the '~' stop element");
|
|
514
|
+
}
|
|
515
|
+
return stop;
|
|
516
|
+
}
|
|
517
|
+
const result = parseSequence();
|
|
518
|
+
let stopAt;
|
|
519
|
+
if (current().type === 'TILDE') {
|
|
520
|
+
consume('TILDE');
|
|
521
|
+
stopAt = parseStopCondition();
|
|
522
|
+
}
|
|
523
|
+
if (current().type !== 'EOF') {
|
|
524
|
+
throw new Error('Unexpected token after pattern');
|
|
525
|
+
}
|
|
526
|
+
return {
|
|
527
|
+
pattern: result,
|
|
528
|
+
stopAt
|
|
529
|
+
};
|
|
530
|
+
}
|
|
531
|
+
//# sourceMappingURL=parser.js.map
|