@wix/web5-core 1.56.0 → 1.57.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/client/wixAuthFetch.js +2 -2
- package/dist/cjs/client/wixAuthFetch.js.map +1 -1
- package/dist/cjs/component/componentDefinitions/HeroEntitySectionDefinition.js +20 -15
- package/dist/cjs/component/componentDefinitions/HeroEntitySectionDefinition.js.map +1 -1
- package/dist/cjs/component/componentDefinitions/HeroSectionDefinition.js +12 -4
- package/dist/cjs/component/componentDefinitions/HeroSectionDefinition.js.map +1 -1
- package/dist/cjs/component/componentDefinitions/listItemsSectionDefinition.js +24 -29
- package/dist/cjs/component/componentDefinitions/listItemsSectionDefinition.js.map +1 -1
- package/dist/cjs/component/componentParser.js +8 -1
- package/dist/cjs/component/componentParser.js.map +1 -1
- package/dist/cjs/component/types.js.map +1 -1
- package/dist/cjs/components/placement/PlacementResponseRenderer.css +0 -4
- package/dist/cjs/components/placement/PlacementResponseRenderer.js +11 -33
- package/dist/cjs/components/placement/PlacementResponseRenderer.js.map +1 -1
- package/dist/cjs/components/placement/buildPlacementDependencies.js.map +1 -1
- package/dist/cjs/components/ui/OptimizedImage.js +59 -14
- package/dist/cjs/components/ui/OptimizedImage.js.map +1 -1
- package/dist/cjs/components/ui/SectionSkeleton.css +19 -0
- package/dist/cjs/components/ui/SectionSkeleton.js +8 -4
- package/dist/cjs/components/ui/SectionSkeleton.js.map +1 -1
- package/dist/cjs/components/ui/UserQuery.css +72 -0
- package/dist/cjs/components/ui/UserQuery.js +131 -37
- package/dist/cjs/components/ui/UserQuery.js.map +1 -1
- package/dist/cjs/context/UserQueryContext.js +34 -0
- package/dist/cjs/context/UserQueryContext.js.map +1 -0
- package/dist/cjs/entity/defaultExtractor.js +9 -2
- package/dist/cjs/entity/defaultExtractor.js.map +1 -1
- package/dist/cjs/entity/fetchEntityListData.js +13 -26
- package/dist/cjs/entity/fetchEntityListData.js.map +1 -1
- package/dist/cjs/entity/index.js +5 -1
- package/dist/cjs/entity/index.js.map +1 -1
- package/dist/cjs/entity/listEntityItems.js +90 -0
- package/dist/cjs/entity/listEntityItems.js.map +1 -0
- package/dist/cjs/hostScope.js +63 -0
- package/dist/cjs/hostScope.js.map +1 -0
- package/dist/cjs/index.js +38 -13
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/patternValidator/validator.test.js +61 -61
- package/dist/cjs/patternValidator/validator.test.js.map +1 -1
- package/dist/cjs/registry/ComponentRegistry.js +22 -2
- package/dist/cjs/registry/ComponentRegistry.js.map +1 -1
- package/dist/cjs/registry/index.js +1 -3
- package/dist/cjs/registry/index.js.map +1 -1
- package/dist/cjs/registry/types.js.map +1 -1
- package/dist/cjs/styles/base-utilities.css +35 -0
- package/dist/cjs/styles/components.css +1 -0
- package/dist/cjs/styles/host-reset.css +81 -0
- package/dist/cjs/styles/tailwind-theme.css +6 -6
- package/dist/cjs/utils/backendEnvironment.js +78 -0
- package/dist/cjs/utils/backendEnvironment.js.map +1 -0
- package/dist/cjs/utils/entityLinkParser.js +3 -1
- package/dist/cjs/utils/entityLinkParser.js.map +1 -1
- package/dist/cjs/utils/imageBackdrop.js +269 -0
- package/dist/cjs/utils/imageBackdrop.js.map +1 -0
- package/dist/cjs/utils/intentExtractor.js +20 -9
- package/dist/cjs/utils/intentExtractor.js.map +1 -1
- package/dist/cjs/utils/productBackHandoff.js +106 -0
- package/dist/cjs/utils/productBackHandoff.js.map +1 -0
- package/dist/cjs/utils/refreshPrompts.js +72 -0
- package/dist/cjs/utils/refreshPrompts.js.map +1 -0
- package/dist/esm/client/wixAuthFetch.js +2 -2
- package/dist/esm/client/wixAuthFetch.js.map +1 -1
- package/dist/esm/component/componentDefinitions/HeroEntitySectionDefinition.js +20 -15
- package/dist/esm/component/componentDefinitions/HeroEntitySectionDefinition.js.map +1 -1
- package/dist/esm/component/componentDefinitions/HeroSectionDefinition.js +12 -4
- package/dist/esm/component/componentDefinitions/HeroSectionDefinition.js.map +1 -1
- package/dist/esm/component/componentDefinitions/listItemsSectionDefinition.js +25 -30
- package/dist/esm/component/componentDefinitions/listItemsSectionDefinition.js.map +1 -1
- package/dist/esm/component/componentParser.js +8 -1
- package/dist/esm/component/componentParser.js.map +1 -1
- package/dist/esm/component/types.js.map +1 -1
- package/dist/esm/components/placement/PlacementResponseRenderer.css +0 -4
- package/dist/esm/components/placement/PlacementResponseRenderer.js +1 -16
- package/dist/esm/components/placement/PlacementResponseRenderer.js.map +1 -1
- package/dist/esm/components/placement/buildPlacementDependencies.js.map +1 -1
- package/dist/esm/components/ui/OptimizedImage.js +50 -5
- package/dist/esm/components/ui/OptimizedImage.js.map +1 -1
- package/dist/esm/components/ui/SectionSkeleton.css +19 -0
- package/dist/esm/components/ui/SectionSkeleton.js +5 -1
- package/dist/esm/components/ui/SectionSkeleton.js.map +1 -1
- package/dist/esm/components/ui/UserQuery.css +72 -0
- package/dist/esm/components/ui/UserQuery.js +52 -6
- package/dist/esm/components/ui/UserQuery.js.map +1 -1
- package/dist/esm/context/UserQueryContext.js +21 -0
- package/dist/esm/context/UserQueryContext.js.map +1 -0
- package/dist/esm/entity/defaultExtractor.js +9 -2
- package/dist/esm/entity/defaultExtractor.js.map +1 -1
- package/dist/esm/entity/fetchEntityListData.js +14 -26
- package/dist/esm/entity/fetchEntityListData.js.map +1 -1
- package/dist/esm/entity/index.js +1 -0
- package/dist/esm/entity/index.js.map +1 -1
- package/dist/esm/entity/listEntityItems.js +85 -0
- package/dist/esm/entity/listEntityItems.js.map +1 -0
- package/dist/esm/hostScope.js +59 -0
- package/dist/esm/hostScope.js.map +1 -0
- package/dist/esm/index.js +13 -4
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/patternValidator/validator.test.js +61 -61
- package/dist/esm/patternValidator/validator.test.js.map +1 -1
- package/dist/esm/registry/ComponentRegistry.js +22 -2
- package/dist/esm/registry/ComponentRegistry.js.map +1 -1
- package/dist/esm/registry/index.js +0 -1
- package/dist/esm/registry/index.js.map +1 -1
- package/dist/esm/registry/types.js.map +1 -1
- package/dist/esm/styles/base-utilities.css +35 -0
- package/dist/esm/styles/components.css +1 -0
- package/dist/esm/styles/host-reset.css +81 -0
- package/dist/esm/styles/tailwind-theme.css +6 -6
- package/dist/esm/utils/backendEnvironment.js +71 -0
- package/dist/esm/utils/backendEnvironment.js.map +1 -0
- package/dist/esm/utils/entityLinkParser.js +3 -1
- package/dist/esm/utils/entityLinkParser.js.map +1 -1
- package/dist/esm/utils/imageBackdrop.js +262 -0
- package/dist/esm/utils/imageBackdrop.js.map +1 -0
- package/dist/esm/utils/intentExtractor.js +21 -12
- package/dist/esm/utils/intentExtractor.js.map +1 -1
- package/dist/esm/utils/productBackHandoff.js +100 -0
- package/dist/esm/utils/productBackHandoff.js.map +1 -0
- package/dist/esm/utils/refreshPrompts.js +67 -0
- package/dist/esm/utils/refreshPrompts.js.map +1 -0
- package/dist/types/component/componentDefinitions/HeroEntitySectionDefinition.d.ts.map +1 -1
- package/dist/types/component/componentDefinitions/HeroSectionDefinition.d.ts.map +1 -1
- package/dist/types/component/componentDefinitions/listItemsSectionDefinition.d.ts +2 -2
- package/dist/types/component/componentDefinitions/listItemsSectionDefinition.d.ts.map +1 -1
- package/dist/types/component/componentParser.d.ts.map +1 -1
- package/dist/types/component/types.d.ts +1 -5
- package/dist/types/component/types.d.ts.map +1 -1
- package/dist/types/components/placement/PlacementResponseRenderer.d.ts +1 -1
- package/dist/types/components/placement/PlacementResponseRenderer.d.ts.map +1 -1
- package/dist/types/components/placement/buildPlacementDependencies.d.ts +1 -2
- package/dist/types/components/placement/buildPlacementDependencies.d.ts.map +1 -1
- package/dist/types/components/ui/OptimizedImage.d.ts +9 -0
- package/dist/types/components/ui/OptimizedImage.d.ts.map +1 -1
- package/dist/types/components/ui/SectionSkeleton.d.ts.map +1 -1
- package/dist/types/components/ui/UserQuery.d.ts +21 -0
- package/dist/types/components/ui/UserQuery.d.ts.map +1 -1
- package/dist/types/context/UserQueryContext.d.ts +12 -0
- package/dist/types/context/UserQueryContext.d.ts.map +1 -0
- package/dist/types/entity/defaultExtractor.d.ts.map +1 -1
- package/dist/types/entity/fetchEntityListData.d.ts +0 -2
- package/dist/types/entity/fetchEntityListData.d.ts.map +1 -1
- package/dist/types/entity/index.d.ts +1 -0
- package/dist/types/entity/index.d.ts.map +1 -1
- package/dist/types/entity/listEntityItems.d.ts +40 -0
- package/dist/types/entity/listEntityItems.d.ts.map +1 -0
- package/dist/types/hostScope.d.ts +83 -0
- package/dist/types/hostScope.d.ts.map +1 -0
- package/dist/types/index.d.ts +11 -7
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/registry/ComponentRegistry.d.ts +8 -0
- package/dist/types/registry/ComponentRegistry.d.ts.map +1 -1
- package/dist/types/registry/index.d.ts +0 -1
- package/dist/types/registry/index.d.ts.map +1 -1
- package/dist/types/registry/types.d.ts +5 -6
- package/dist/types/registry/types.d.ts.map +1 -1
- package/dist/types/utils/backendEnvironment.d.ts +30 -0
- package/dist/types/utils/backendEnvironment.d.ts.map +1 -0
- package/dist/types/utils/entityLinkParser.d.ts.map +1 -1
- package/dist/types/utils/imageBackdrop.d.ts +102 -0
- package/dist/types/utils/imageBackdrop.d.ts.map +1 -0
- package/dist/types/utils/intentExtractor.d.ts +21 -4
- package/dist/types/utils/intentExtractor.d.ts.map +1 -1
- package/dist/types/utils/productBackHandoff.d.ts +43 -0
- package/dist/types/utils/productBackHandoff.d.ts.map +1 -0
- package/dist/types/utils/refreshPrompts.d.ts +32 -0
- package/dist/types/utils/refreshPrompts.d.ts.map +1 -0
- package/package.json +4 -3
- package/src/components/placement/PlacementResponseRenderer.css +265 -0
- package/src/components/ui/Disclaimer.css +35 -0
- package/src/components/ui/FeedbackBar.css +267 -0
- package/src/components/ui/PlacementLoader.css +101 -0
- package/src/components/ui/PromptEntryEmptyState.css +172 -0
- package/src/components/ui/SearchSection.css +538 -0
- package/src/components/ui/SectionSkeleton.css +128 -0
- package/src/components/ui/UserQuery.css +72 -0
- package/src/styles/base-utilities.css +35 -0
- package/src/styles/components.css +1 -0
- package/src/styles/host-reset.css +81 -0
- package/src/styles/tailwind-theme.css +6 -6
- package/dist/cjs/registry/Intent.js +0 -19
- package/dist/cjs/registry/Intent.js.map +0 -1
- package/dist/cjs/utils/conversationApi.js +0 -52
- package/dist/cjs/utils/conversationApi.js.map +0 -1
- package/dist/cjs/utils/conversationMode.js +0 -23
- package/dist/cjs/utils/conversationMode.js.map +0 -1
- package/dist/esm/registry/Intent.js +0 -15
- package/dist/esm/registry/Intent.js.map +0 -1
- package/dist/esm/utils/conversationApi.js +0 -45
- package/dist/esm/utils/conversationApi.js.map +0 -1
- package/dist/esm/utils/conversationMode.js +0 -18
- package/dist/esm/utils/conversationMode.js.map +0 -1
- package/dist/types/registry/Intent.d.ts +0 -12
- package/dist/types/registry/Intent.d.ts.map +0 -1
- package/dist/types/utils/conversationApi.d.ts +0 -26
- package/dist/types/utils/conversationApi.d.ts.map +0 -1
- package/dist/types/utils/conversationMode.d.ts +0 -16
- package/dist/types/utils/conversationMode.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["validatePattern","validatePatternSyntax","createMockAstNodes","blockElements","map","element","startsWith","listPattern","slice","items","itemMatches","match","itemMatch","itemContent","itemElements","split","e","trim","paragraphs","currentParagraphChildren","lastWasText","itemElement","length","push","type","children","value","url","alt","ordered","start","spread","elementStr","String","parts","entityType","entityId","iconName","imageType","imageName","depth","align","describe","it","expect","valid","toBe","result","error","toContain","nodes1","nodes2","result1","result2","endIndex","nodes3","result3","nodes4","nodes5","result4","result5","result6","nodes","pattern","nodes6","blocks","properPattern","patternWithItemValidation","patternWithRange","console","log","iconNodes","regularNodes","comment","content","astEndIndex"],"sources":["../../../src/patternValidator/validator.test.ts"],"sourcesContent":["import { validatePattern, validatePatternSyntax } from './index';\nimport type { RootContent, ListItem } from 'mdast';\nimport type { BlockElement } from './types';\n\n/**\n * Helper function to convert block element strings to mock AST nodes for testing\n * Accepts BlockElement or list pattern strings like 'list{[t], [t]}'\n */\nfunction createMockAstNodes(\n blockElements: (BlockElement | string)[],\n): RootContent[] {\n return blockElements.map((element) => {\n // Handle list patterns like 'list{[t], [t, link]}'\n if (typeof element === 'string' && element.startsWith('list{')) {\n // Parse list pattern: list{[t], [t, link]} -> [[t], [t, link]]\n const listPattern = element.slice(5, -1); // Remove 'list{' and '}'\n const items: ListItem[] = [];\n\n // Parse items: [t], [t, link] -> ['t'], ['t', 'link']\n const itemMatches = listPattern.match(/\\[([^\\]]+)\\]/g) || [];\n for (const itemMatch of itemMatches) {\n const itemContent = itemMatch.slice(1, -1); // Remove '[' and ']'\n const itemElements = itemContent.split(',').map((e) => e.trim());\n\n // Convert item elements to paragraph children\n // To get multiple 't' elements, we need to break up text nodes\n // We'll create separate paragraphs for consecutive 't' elements, or use separators\n const paragraphs: any[] = [];\n let currentParagraphChildren: any[] = [];\n let lastWasText = false;\n\n for (const itemElement of itemElements) {\n if (itemElement === 't') {\n // If previous was text, start a new paragraph to prevent merging\n // Or add a separator to force text splitting\n if (lastWasText && currentParagraphChildren.length > 0) {\n // Finish current paragraph and start new one\n paragraphs.push({\n type: 'paragraph',\n children: [...currentParagraphChildren],\n });\n currentParagraphChildren = [{ type: 'text', value: 'Text' }];\n } else {\n currentParagraphChildren.push({ type: 'text', value: 'Text' });\n }\n lastWasText = true;\n } else if (itemElement === 'link') {\n currentParagraphChildren.push({\n type: 'link',\n url: 'http://example.com',\n children: [{ type: 'text', value: 'Link' }],\n });\n lastWasText = false;\n } else if (itemElement === 'image') {\n currentParagraphChildren.push({\n type: 'image',\n url: 'http://example.com/image.jpg',\n alt: 'Image',\n });\n lastWasText = false;\n } else if (itemElement === 'web5_icon') {\n currentParagraphChildren.push({\n type: 'image',\n url: 'web5://icon/dollar',\n alt: '',\n });\n lastWasText = false;\n }\n }\n\n // Add final paragraph if it has children\n if (currentParagraphChildren.length > 0) {\n paragraphs.push({\n type: 'paragraph',\n children: currentParagraphChildren,\n });\n }\n\n items.push({\n type: 'listItem',\n children: paragraphs.length > 0 ? paragraphs : [],\n });\n }\n\n return {\n type: 'list',\n ordered: false,\n start: null,\n spread: false,\n children: items,\n } as RootContent;\n }\n\n // Handle entity links for testing (e.g., 'entity_link:blog_post:abc123')\n const elementStr = String(element);\n if (elementStr.startsWith('entity_link:')) {\n const parts = elementStr.slice('entity_link:'.length).split(':');\n const entityType = parts[0] || 'default_type';\n const entityId = parts[1] || 'default_id';\n return {\n type: 'paragraph',\n children: [\n {\n type: 'link',\n url: `web5://entity/${entityType}/${entityId}`,\n children: [{ type: 'text', value: 'Entity Link' }],\n },\n ],\n } as RootContent;\n }\n\n // Handle web5 icon images for testing (e.g., 'web5_icon:dollar')\n if (elementStr.startsWith('web5_icon:')) {\n const iconName = elementStr.slice('web5_icon:'.length);\n return {\n type: 'paragraph',\n children: [\n {\n type: 'image',\n url: `web5://icon/${iconName}`,\n alt: '',\n },\n ],\n } as RootContent;\n }\n\n // Handle web5 images with custom type for testing (e.g., 'web5_image:illustration:chart')\n if (elementStr.startsWith('web5_image:')) {\n const parts = elementStr.slice('web5_image:'.length).split(':');\n const imageType = parts[0] || 'default';\n const imageName = parts[1] || 'default';\n return {\n type: 'paragraph',\n children: [\n {\n type: 'image',\n url: `web5://${imageType}/${imageName}`,\n alt: '',\n },\n ],\n } as RootContent;\n }\n\n // Handle http links for testing (e.g., 'http_link')\n if (elementStr === 'http_link') {\n return {\n type: 'paragraph',\n children: [\n {\n type: 'link',\n url: 'http://example.com/page',\n children: [{ type: 'text', value: 'HTTP Link' }],\n },\n ],\n } as RootContent;\n }\n\n // Handle https links for testing (e.g., 'https_link')\n if (elementStr === 'https_link') {\n return {\n type: 'paragraph',\n children: [\n {\n type: 'link',\n url: 'https://example.com/page',\n children: [{ type: 'text', value: 'HTTPS Link' }],\n },\n ],\n } as RootContent;\n }\n\n switch (element) {\n case 'h1':\n return {\n type: 'heading',\n depth: 1,\n children: [{ type: 'text', value: 'Heading 1' }],\n } as RootContent;\n case 'h2':\n return {\n type: 'heading',\n depth: 2,\n children: [{ type: 'text', value: 'Heading 2' }],\n } as RootContent;\n case 'h3':\n return {\n type: 'heading',\n depth: 3,\n children: [{ type: 'text', value: 'Heading 3' }],\n } as RootContent;\n case 'h4':\n return {\n type: 'heading',\n depth: 4,\n children: [{ type: 'text', value: 'Heading 4' }],\n } as RootContent;\n case 'h5':\n return {\n type: 'heading',\n depth: 5,\n children: [{ type: 'text', value: 'Heading 5' }],\n } as RootContent;\n case 'h6':\n return {\n type: 'heading',\n depth: 6,\n children: [{ type: 'text', value: 'Heading 6' }],\n } as RootContent;\n case 't':\n return {\n type: 'paragraph',\n children: [{ type: 'text', value: 'Text content' }],\n } as RootContent;\n case 'link':\n return {\n type: 'paragraph',\n children: [\n {\n type: 'link',\n url: 'http://example.com',\n children: [{ type: 'text', value: 'Link' }],\n },\n ],\n } as RootContent;\n case 'image':\n return {\n type: 'paragraph',\n children: [\n {\n type: 'image',\n url: 'http://example.com/image.jpg',\n alt: 'Image',\n },\n ],\n } as RootContent;\n case 'html_comment':\n return { type: 'html', value: '<!-- comment -->' } as RootContent;\n case 'table':\n return { type: 'table', align: [], children: [] } as RootContent;\n case 'callout':\n return { type: 'blockquote', children: [] } as RootContent;\n case 'thematicBreak':\n return { type: 'thematicBreak' } as RootContent;\n default:\n // For other types, create a simple paragraph\n return {\n type: 'paragraph',\n children: [{ type: 'text', value: String(element) }],\n } as RootContent;\n }\n });\n}\n\ndescribe('Pattern Validator', () => {\n describe('Pattern Syntax Validation', () => {\n it('validates correct patterns', () => {\n expect(validatePatternSyntax('h2 > t').valid).toBe(true);\n expect(validatePatternSyntax('t+').valid).toBe(true);\n expect(validatePatternSyntax('(t | image)*').valid).toBe(true);\n expect(validatePatternSyntax('h2 > t[1-3] > link?').valid).toBe(true);\n expect(validatePatternSyntax('(h2 > t)+').valid).toBe(true);\n });\n\n it('detects invalid elements', () => {\n const result = validatePatternSyntax('h2 > invalid');\n expect(result.valid).toBe(false);\n expect(result.error).toContain('Invalid element');\n });\n\n it('detects empty patterns', () => {\n const result = validatePatternSyntax('');\n expect(result.valid).toBe(false);\n expect(result.error).toBe('Pattern rule is empty');\n });\n\n it('detects syntax errors', () => {\n expect(validatePatternSyntax('h2 >').valid).toBe(false);\n expect(validatePatternSyntax('(h2 > t').valid).toBe(false);\n expect(validatePatternSyntax('h2 [').valid).toBe(false);\n });\n\n it('detects unexpected characters', () => {\n const result = validatePatternSyntax('h2 @ t');\n expect(result.valid).toBe(false);\n expect(result.error).toContain('Unexpected character');\n });\n });\n\n describe('Basic sequences', () => {\n it('matches simple sequence', () => {\n const nodes1 = createMockAstNodes(['h2', 't']);\n const nodes2 = createMockAstNodes(['h2', 'image']);\n const result1 = validatePattern(nodes1, 'h2 > t');\n const result2 = validatePattern(nodes2, 'h2 > t');\n expect(result1.valid).toBe(true);\n expect(result1.endIndex).toBe(1); // Matched both h2 and t\n // nodes2 matches h2 (partial match), so valid is true but endIndex is 0\n expect(result2.valid).toBe(false);\n expect(result2.endIndex).toBe(0); // Only matched h2\n });\n\n it('matches longer sequence', () => {\n const nodes1 = createMockAstNodes(['h2', 't', 'link']);\n const nodes2 = createMockAstNodes(['h2', 't']);\n const result1 = validatePattern(nodes1, 'h2 > t > link');\n const result2 = validatePattern(nodes2, 'h2 > t > link');\n expect(result1.valid).toBe(true);\n expect(result1.endIndex).toBe(2); // Matched all three\n // nodes2 matches h2 > t (partial match), so valid is true but endIndex is 1\n expect(result2.valid).toBe(false);\n expect(result2.endIndex).toBe(1); // Only matched h2 and t\n });\n });\n\n describe('Quantifiers', () => {\n it('matches star quantifier (0 or more)', () => {\n const nodes1 = createMockAstNodes(['h2']);\n const nodes2 = createMockAstNodes(['h2', 't']);\n const nodes3 = createMockAstNodes(['h2', 't', 't', 't']);\n expect(validatePattern(nodes1, 'h2 > t*').valid).toBe(true);\n expect(validatePattern(nodes2, 'h2 > t*').valid).toBe(true);\n expect(validatePattern(nodes3, 'h2 > t*').valid).toBe(true);\n });\n\n it('matches plus quantifier (1 or more)', () => {\n const nodes1 = createMockAstNodes(['h2']);\n const nodes2 = createMockAstNodes(['h2', 't']);\n const nodes3 = createMockAstNodes(['h2', 't', 't']);\n const result1 = validatePattern(nodes1, 'h2 > t+');\n const result2 = validatePattern(nodes2, 'h2 > t+');\n const result3 = validatePattern(nodes3, 'h2 > t+');\n // nodes1 matches h2 (partial match), so valid is true but endIndex is 0\n expect(result1.valid).toBe(false);\n expect(result1.endIndex).toBe(0); // Only matched h2\n expect(result2.valid).toBe(true);\n expect(result2.endIndex).toBe(1); // Matched h2 and t\n expect(result3.valid).toBe(true);\n expect(result3.endIndex).toBe(2); // Matched h2, t, t\n });\n\n it('matches optional quantifier', () => {\n const nodes1 = createMockAstNodes(['h2']);\n const nodes2 = createMockAstNodes(['h2', 't']);\n const nodes3 = createMockAstNodes(['h2', 't', 't']);\n const result1 = validatePattern(nodes1, 'h2 > t?');\n const result2 = validatePattern(nodes2, 'h2 > t?');\n const result3 = validatePattern(nodes3, 'h2 > t?');\n expect(result1.valid).toBe(true);\n expect(result1.endIndex).toBe(0); // Matched h2 (t is optional)\n expect(result2.valid).toBe(true);\n expect(result2.endIndex).toBe(1); // Matched h2 and t\n // nodes3 matches h2 > t (partial match), so valid is true but endIndex is 1\n expect(result3.valid).toBe(true);\n expect(result3.endIndex).toBe(1); // Only matched h2 and first t\n });\n\n it('matches exact count', () => {\n const nodes1 = createMockAstNodes(['h2', 't', 't']);\n const nodes2 = createMockAstNodes(['h2', 't']);\n const nodes3 = createMockAstNodes(['h2', 't', 't', 't']);\n const result1 = validatePattern(nodes1, 'h2 > t[2]');\n const result2 = validatePattern(nodes2, 'h2 > t[2]');\n const result3 = validatePattern(nodes3, 'h2 > t[2]');\n expect(result1.valid).toBe(true);\n expect(result1.endIndex).toBe(2); // Matched h2, t, t\n // nodes2 matches h2 > t (partial match), so valid is true but endIndex is 1\n expect(result2.valid).toBe(false);\n expect(result2.endIndex).toBe(1); // Only matched h2 and t\n // nodes3 matches h2 > t[2] (partial match), so valid is true but endIndex is 2\n expect(result3.valid).toBe(true);\n expect(result3.endIndex).toBe(2); // Matched h2, t, t (third t not matched)\n });\n\n it('matches range quantifier', () => {\n const nodes1 = createMockAstNodes(['h2', 't']);\n const nodes2 = createMockAstNodes(['h2', 't', 't']);\n const nodes3 = createMockAstNodes(['h2', 't', 't', 't']);\n const nodes4 = createMockAstNodes(['h2']);\n const nodes5 = createMockAstNodes(['h2', 't', 't', 't', 't']);\n const result1 = validatePattern(nodes1, 'h2 > t[1-3]');\n const result2 = validatePattern(nodes2, 'h2 > t[1-3]');\n const result3 = validatePattern(nodes3, 'h2 > t[1-3]');\n const result4 = validatePattern(nodes4, 'h2 > t[1-3]');\n const result5 = validatePattern(nodes5, 'h2 > t[1-3]');\n expect(result1.valid).toBe(true);\n expect(result1.endIndex).toBe(1); // Matched h2, t\n expect(result2.valid).toBe(true);\n expect(result2.endIndex).toBe(2); // Matched h2, t, t\n expect(result3.valid).toBe(true);\n expect(result3.endIndex).toBe(3); // Matched h2, t, t, t\n // nodes4 matches h2 (partial match), so valid is true but endIndex is 0\n expect(result4.valid).toBe(false);\n expect(result4.endIndex).toBe(0); // Only matched h2\n // nodes5 matches h2 > t[1-3] (partial match), so valid is true but endIndex is 3\n expect(result5.valid).toBe(true);\n expect(result5.endIndex).toBe(3); // Matched h2, t, t, t (fourth t not matched)\n });\n\n it('matches up-to quantifier', () => {\n const nodes1 = createMockAstNodes(['h2']);\n const nodes2 = createMockAstNodes(['h2', 't']);\n const nodes3 = createMockAstNodes(['h2', 't', 't']);\n const nodes4 = createMockAstNodes(['h2', 't', 't', 't']);\n const result1 = validatePattern(nodes1, 'h2 > t[-2]');\n const result2 = validatePattern(nodes2, 'h2 > t[-2]');\n const result3 = validatePattern(nodes3, 'h2 > t[-2]');\n const result4 = validatePattern(nodes4, 'h2 > t[-2]');\n expect(result1.valid).toBe(true);\n expect(result1.endIndex).toBe(0); // Matched h2\n expect(result2.valid).toBe(true);\n expect(result2.endIndex).toBe(1); // Matched h2, t\n expect(result3.valid).toBe(true);\n expect(result3.endIndex).toBe(2); // Matched h2, t, t\n // nodes4 matches h2 > t[-2] (partial match), so valid is true but endIndex is 2\n expect(result4.valid).toBe(true);\n expect(result4.endIndex).toBe(2); // Matched h2, t, t (third t not matched)\n });\n });\n\n describe('Alternation', () => {\n it('matches simple alternation', () => {\n const nodes1 = createMockAstNodes(['h2', 't']);\n const nodes2 = createMockAstNodes(['h2', 'image']);\n const nodes3 = createMockAstNodes(['h2', 'link']);\n const result1 = validatePattern(nodes1, 'h2 > (t | image)');\n const result2 = validatePattern(nodes2, 'h2 > (t | image)');\n const result3 = validatePattern(nodes3, 'h2 > (t | image)');\n expect(result1.valid).toBe(true);\n expect(result1.endIndex).toBe(1); // Matched h2, t\n expect(result2.valid).toBe(true);\n expect(result2.endIndex).toBe(1); // Matched h2, image\n // nodes3 matches h2 (partial match), so valid is true but endIndex is 0\n expect(result3.valid).toBe(false);\n expect(result3.endIndex).toBe(0); // Only matched h2\n });\n\n it('matches alternation with quantifier', () => {\n const nodes1 = createMockAstNodes(['h2']);\n const nodes2 = createMockAstNodes(['h2', 't']);\n const nodes3 = createMockAstNodes(['h2', 't', 'image', 't']);\n expect(validatePattern(nodes1, 'h2 > (t | image)*').valid).toBe(true);\n expect(validatePattern(nodes2, 'h2 > (t | image)*').valid).toBe(true);\n expect(validatePattern(nodes3, 'h2 > (t | image)*').valid).toBe(true);\n });\n });\n\n describe('Groups', () => {\n it('matches group with quantifier', () => {\n const nodes1: RootContent[] = [];\n const nodes2 = createMockAstNodes(['h2', 't']);\n const nodes3 = createMockAstNodes(['h2', 't', 'h2', 't']);\n const nodes4 = createMockAstNodes(['h2']);\n const result1 = validatePattern(nodes1, '(h2 > t)*');\n const result2 = validatePattern(nodes2, '(h2 > t)*');\n const result3 = validatePattern(nodes3, '(h2 > t)*');\n const result4 = validatePattern(nodes4, '(h2 > t)*');\n const result5 = validatePattern(nodes1, '(h2 > t)+');\n const result6 = validatePattern(nodes2, '(h2 > t)+');\n expect(result1.valid).toBe(true); // 0 repetitions\n expect(result1.endIndex).toBe(-1); // No match\n expect(result2.valid).toBe(true); // 1 repetition\n expect(result2.endIndex).toBe(1); // Matched h2, t\n expect(result3.valid).toBe(true); // 2 repetitions\n expect(result3.endIndex).toBe(3); // Matched h2, t, h2, t\n // nodes4 matches h2 (partial match), so valid is true but endIndex is 0\n expect(result4.valid).toBe(false); // partial match\n expect(result4.endIndex).toBe(0); // Matched h2\n // nodes1 with + requires at least 1, empty array doesn't match, so valid is false\n expect(result5.valid).toBe(false); // no match (empty array with + quantifier)\n expect(result5.endIndex).toBe(-1); // No match\n expect(result6.valid).toBe(true); // exactly 1\n expect(result6.endIndex).toBe(1); // Matched h2, t\n });\n });\n\n describe('ThematicBreak', () => {\n it('matches single thematicBreak', () => {\n const nodes = createMockAstNodes(['thematicBreak']);\n const result = validatePattern(nodes, 'thematicBreak');\n expect(result.valid).toBe(true);\n expect(result.endIndex).toBe(0);\n });\n\n it('matches thematicBreak with quantifiers', () => {\n const nodes1 = createMockAstNodes(['h1', 'thematicBreak']);\n const nodes2 = createMockAstNodes([\n 'h1',\n 'thematicBreak',\n 'thematicBreak',\n ]);\n const nodes3 = createMockAstNodes(['h1']);\n\n // Optional thematicBreak\n expect(validatePattern(nodes1, 'h1 > thematicBreak?').valid).toBe(true);\n expect(validatePattern(nodes3, 'h1 > thematicBreak?').valid).toBe(true);\n\n // One or more thematicBreak\n expect(validatePattern(nodes1, 'h1 > thematicBreak+').valid).toBe(true);\n expect(validatePattern(nodes2, 'h1 > thematicBreak+').valid).toBe(true);\n expect(validatePattern(nodes3, 'h1 > thematicBreak+').valid).toBe(false);\n\n // Zero or more thematicBreak\n expect(validatePattern(nodes1, 'h1 > thematicBreak*').valid).toBe(true);\n expect(validatePattern(nodes2, 'h1 > thematicBreak*').valid).toBe(true);\n expect(validatePattern(nodes3, 'h1 > thematicBreak*').valid).toBe(true);\n });\n\n it('matches thematicBreak in sequences', () => {\n const nodes1 = createMockAstNodes(['h1', 'thematicBreak', 't']);\n const nodes2 = createMockAstNodes(['h2', 'thematicBreak', 't', 'link']);\n\n expect(validatePattern(nodes1, 'h1 > thematicBreak > t').valid).toBe(\n true,\n );\n expect(\n validatePattern(nodes2, 'h2 > thematicBreak > t > link').valid,\n ).toBe(true);\n });\n\n it('matches thematicBreak in alternation', () => {\n const nodes1 = createMockAstNodes(['h2', 'thematicBreak', 't']);\n const nodes2 = createMockAstNodes(['h2', 'callout', 't']);\n const nodes3 = createMockAstNodes(['h2', 't']);\n\n expect(\n validatePattern(nodes1, 'h2 > (thematicBreak | callout) > t').valid,\n ).toBe(true);\n expect(\n validatePattern(nodes2, 'h2 > (thematicBreak | callout) > t').valid,\n ).toBe(true);\n expect(\n validatePattern(nodes3, 'h2 > (thematicBreak | callout) > t').valid,\n ).toBe(false);\n });\n\n it('validates thematicBreak pattern syntax', () => {\n expect(validatePatternSyntax('thematicBreak').valid).toBe(true);\n expect(validatePatternSyntax('h1 > thematicBreak').valid).toBe(true);\n expect(validatePatternSyntax('thematicBreak+').valid).toBe(true);\n expect(validatePatternSyntax('thematicBreak?').valid).toBe(true);\n expect(validatePatternSyntax('thematicBreak*').valid).toBe(true);\n });\n });\n\n describe('Complex patterns', () => {\n it('matches nested patterns', () => {\n const nodes1 = createMockAstNodes(['h2', 'link', 'image']);\n const nodes2 = createMockAstNodes([\n 'h2',\n 'link',\n 'image',\n 'link',\n 'image',\n ]);\n expect(validatePattern(nodes1, 'h2 > (link > image)*').valid).toBe(true);\n expect(validatePattern(nodes2, 'h2 > (link > image)*').valid).toBe(true);\n });\n\n it('matches multiple quantifiers', () => {\n const nodes1 = createMockAstNodes(['h2', 't', 't', 'link']);\n const nodes2 = createMockAstNodes(['h2', 't', 't', 'link', 'link']);\n expect(validatePattern(nodes1, 'h2 > t+ > link*').valid).toBe(true);\n expect(validatePattern(nodes2, 'h2 > t+ > link*').valid).toBe(true);\n });\n });\n\n describe('Lists', () => {\n it('matches simple list', () => {\n const nodes = createMockAstNodes(['list{[t], [t]}' as BlockElement]);\n expect(validatePattern(nodes, 'list').valid).toBe(true);\n });\n\n it('validates list item count', () => {\n // list{item[-2]:...} means up to 2 items\n const nodes1 = createMockAstNodes(['list{[t]}' as BlockElement]);\n const nodes2 = createMockAstNodes(['list{[t], [t]}' as BlockElement]);\n const nodes3 = createMockAstNodes([\n 'list{[t], [t], [t]}' as BlockElement,\n ]);\n expect(validatePattern(nodes1, 'list{item[-2]:t}').valid).toBe(true);\n expect(validatePattern(nodes2, 'list{item[-2]:t}').valid).toBe(true);\n expect(validatePattern(nodes3, 'list{item[-2]:t}').valid).toBe(false);\n });\n\n it('validates list item structure', () => {\n // Each item should have: t > image > t+ > link*\n const pattern = 'list{item[-2]:t > image > t+ > link*}';\n\n // Valid: 1 item with t, image, t\n const nodes1 = createMockAstNodes([\n 'list{[t, image, t]}' as BlockElement,\n ]);\n expect(validatePattern(nodes1, pattern).valid).toBe(true);\n\n // Valid: 1 item with t, image, t, t (multiple t's with t+)\n const nodes2 = createMockAstNodes([\n 'list{[t, image, t, t]}' as BlockElement,\n ]);\n expect(validatePattern(nodes2, pattern).valid).toBe(true);\n\n // Valid: 1 item with t, image, t, link\n const nodes3 = createMockAstNodes([\n 'list{[t, image, t, link]}' as BlockElement,\n ]);\n expect(validatePattern(nodes3, pattern).valid).toBe(true);\n\n // Valid: 2 items\n const nodes4 = createMockAstNodes([\n 'list{[t, image, t], [t, image, t, t, link]}' as BlockElement,\n ]);\n expect(validatePattern(nodes4, pattern).valid).toBe(true);\n\n // Invalid: missing image\n const nodes5 = createMockAstNodes(['list{[t, t]}' as BlockElement]);\n expect(validatePattern(nodes5, pattern).valid).toBe(false);\n\n // Invalid: wrong order\n const nodes6 = createMockAstNodes([\n 'list{[image, t, t]}' as BlockElement,\n ]);\n expect(validatePattern(nodes6, pattern).valid).toBe(false);\n });\n\n it('validates complex pattern with list', () => {\n const pattern =\n 'h2 > (link > image > t > list{item[-2]:t > image > t+ > link*})*';\n\n // h2 alone (0 repetitions of group)\n const nodes1 = createMockAstNodes(['h2']);\n expect(validatePattern(nodes1, pattern).valid).toBe(true);\n\n // h2 > link > image > t > list with valid items\n const nodes2 = createMockAstNodes([\n 'h2',\n 'link',\n 'image',\n 't',\n 'list{[t, image, t, link]}' as BlockElement,\n ]);\n expect(validatePattern(nodes2, pattern).valid).toBe(true);\n });\n\n it('validates real-world complex pattern from user', () => {\n const blocks: (BlockElement | string)[] = [\n 'h2', // 1\n 'link', // 2\n 't', // 3\n 'link', // 4\n 't', // 5\n 'link', // 6\n 't', // 7\n 'link', // 8\n 'html_comment', // 9\n 'link', // 10\n 'image', // 11\n 't', // 12\n 'list{[t, t]}', // 13 - list with 1 item containing ['t', 't']\n 'html_comment', // 14\n 'link', // 15\n 'image', // 16\n 't', // 17\n 'list{[t, t]}', // 18 - list with 1 item containing ['t', 't']\n ];\n\n const nodes = createMockAstNodes(blocks);\n\n // Pattern breakdown:\n // h2 -> matches position 1\n // (link > t)* -> matches positions 2-7 (3 repetitions: 2-3, 4-5, 6-7)\n // link -> matches position 8\n // (html_comment > link > image > t > list{item[1]:t > t})* -> matches 9-18 (2 repetitions)\n // First repetition: 9-13\n // Second repetition: 14-18\n //\n // list{[t, t]} means: 1 item with elements ['t', 't']\n\n // Now with proper implementation, we can use quantifiers on groups with lists!\n const properPattern =\n 'h2 > (link > t)* > link > (html_comment > link > image > t > list)*';\n expect(validatePattern(nodes, properPattern).valid).toBe(true);\n\n // Also test with item structure validation\n const patternWithItemValidation =\n 'h2 > (link > t)* > link > (html_comment > link > image > t > list{item[1]:t > t})*';\n expect(validatePattern(nodes, patternWithItemValidation).valid).toBe(\n true,\n );\n });\n\n // TDD Tests for proper list validation implementation\n describe('Advanced list validation (TDD)', () => {\n it('Test 1: validates list in simple repetitive pattern', () => {\n const blocks: (BlockElement | string)[] = [\n 't',\n 'list{[t]}',\n 't',\n 'list{[t]}',\n 't',\n 'list{[t]}',\n ];\n const nodes = createMockAstNodes(blocks);\n\n // Pattern: t > list repeated 3 times\n const pattern = '(t > list)*';\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n });\n\n it('Test 2: validates list in complex group repetition', () => {\n const blocks: (BlockElement | string)[] = [\n 'h2',\n 'html_comment',\n 'link',\n 'list{[t]}',\n 'html_comment',\n 'link',\n 'list{[t]}',\n ];\n const nodes = createMockAstNodes(blocks);\n\n // Pattern: h2 followed by repeated groups\n const pattern = 'h2 > (html_comment > link > list)*';\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n });\n\n it('Test 3: validates list with simple item structure', () => {\n const nodes1 = createMockAstNodes(['list{[t, t]}' as BlockElement]);\n const nodes2 = createMockAstNodes(['list{[t]}' as BlockElement]);\n\n // Pattern: list with 1 item containing 2 't' elements in sequence\n const pattern = 'list{item[1]:t > t}';\n const result1 = validatePattern(nodes1, pattern);\n const result2 = validatePattern(nodes2, pattern);\n\n expect(result1.valid).toBe(true);\n expect(result1.endIndex).toBe(0); // Matched the list\n\n // nodes2 has list{[t]} but pattern expects list{item[1]:t > t} (1 item with 2 t's)\n // The list structure doesn't match (only 1 t instead of 2), so it should fail\n expect(result2.valid).toBe(false); // Structure doesn't match\n expect(result2.endIndex).toBe(-1); // No match\n });\n\n it('Test 4: validates list with complex item structure using quantifiers', () => {\n const nodes1 = createMockAstNodes([\n 'list{[t, t, t, link, link]}' as BlockElement,\n ]);\n const nodes2 = createMockAstNodes([\n 'list{[t, t, link]}' as BlockElement,\n ]);\n const nodes3 = createMockAstNodes([\n 'list{[link, link]}' as BlockElement,\n ]);\n\n // Pattern: list with 1 item containing 1+ t's followed by exactly 2 links\n // link[2] should expand to link > link\n const pattern = 'list{item[1]:t+ > link[2]}';\n expect(validatePattern(nodes1, pattern).valid).toBe(true);\n\n // Should fail with wrong number of links\n expect(validatePattern(nodes2, pattern).valid).toBe(false);\n\n // Should fail with no t at start\n expect(validatePattern(nodes3, pattern).valid).toBe(false);\n });\n it('Test 5: validates list with variable item counts and quantifiers', () => {\n // Test data has 2 lists:\n // 1st list: 1 item with 2 't' elements\n // 2nd list: 3 items, each with 2 't' elements\n const blocks: (BlockElement | string)[] = [\n 'h2',\n 'link',\n 't',\n 'link',\n 't',\n 'link',\n 't',\n 'link',\n 'html_comment',\n 'link',\n 'image',\n 't',\n 'list{[t, t]}', // 1 item: ['t', 't']\n 'html_comment',\n 'link',\n 'image',\n 't',\n 'list{[t, t], [t, t], [t, t]}', // 3 items: ['t', 't'], ['t', 't'], ['t', 't']\n ];\n const nodes = createMockAstNodes(blocks);\n\n // Pattern: list with 1+ items, each item has 1+ 't' elements\n // Use + quantifier for \"1 or more\"\n const pattern =\n 'h2 > (link > t)* > link > (html_comment > link > image > t > list{item+:t+})*';\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n\n // Should also work with explicit range [1-] for \"1 or more\"\n const patternWithRange =\n 'h2 > (link > t)* > link > (html_comment > link > image > t > list{item[1-]:t+})*';\n expect(validatePattern(nodes, patternWithRange).valid).toBe(true);\n });\n });\n\n describe('Super Complex Patterns (8 Advanced Cases)', () => {\n it('Complex 1: Multiple lists with wildcards', () => {\n // Real-world: Product specifications with flexible structure\n const blocks: (BlockElement | string)[] = [\n 'h2',\n 'list{[t, t, link]}',\n 'list{[t, link, link, link]}',\n 'list{[t]}',\n ];\n const nodes = createMockAstNodes(blocks);\n\n const pattern = 'h2 > list{item+:t+ > link*}+';\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n });\n\n it('Complex 2: Deeply nested groups with quantifiers', () => {\n // Real-world: Blog post with multiple paragraphs, each with optional formatting\n const blocks: (BlockElement | string)[] = [\n 'h2',\n 't',\n 'link',\n 't',\n 't',\n 'image',\n 't',\n 't',\n 'link',\n 't',\n ];\n const nodes = createMockAstNodes(blocks);\n\n const pattern = 'h2 > (t > (link | image) > t)+';\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n });\n\n it('Complex 3: Lists with complex quantified item structures', () => {\n // Real-world: Feature comparison table with variable columns\n const blocks: (BlockElement | string)[] = [\n 'h3',\n 'list{[t, t, t, link, link, image]}',\n 'list{[t, link, image], [t, t, link, link]}',\n 'list{[t, image]}',\n ];\n const nodes = createMockAstNodes(blocks);\n\n const pattern = 'h3 > list{item+:t+ > link* > image?}+';\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n });\n\n it('Complex 4: Alternation with lists', () => {\n // Real-world: Flexible content sections\n const blocks: (BlockElement | string)[] = [\n 'h2',\n 't',\n 'list{[t, t]}',\n 'list{[t, link, link]}',\n ];\n const nodes = createMockAstNodes(blocks);\n\n const pattern = 'h2 > t > list{item+:t+ > link*}+';\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n });\n\n it('Complex 5: Optional groups with mandatory list validation', () => {\n // Real-world: Product page with optional gallery but required specs\n const blocks: (BlockElement | string)[] = [\n 'h1',\n 't',\n 'image',\n 'image',\n 'image',\n 'h2',\n 'list{[t, t, link]}',\n 'list{[t, link], [t, t, link]}',\n ];\n const nodes = createMockAstNodes(blocks);\n\n const pattern = 'h1 > t > image* > h2 > list{item+:t+ > link}+';\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n });\n\n it('Complex 6: Optional elements throughout', () => {\n // Real-world: Blog post with optional media\n const blocks: (BlockElement | string)[] = [\n 'h1',\n 't',\n 'image',\n 'list{[t, link]}',\n 'callout',\n 'link',\n ];\n const nodes = createMockAstNodes(blocks);\n\n const pattern =\n 'h1 > t > image? > list{item+:t+ > link*} > callout? > link?';\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n });\n\n it('Complex 7: Complex alternation with exact quantifiers', () => {\n // Real-world: Structured data with specific format requirements\n const blocks: (BlockElement | string)[] = [\n 'h3',\n 'link',\n 'link',\n 'link',\n 't',\n 't',\n 'image',\n 'list{[t, link]}',\n 'list{[t, link, link]}',\n 'callout',\n ];\n const nodes = createMockAstNodes(blocks);\n\n const pattern =\n 'h3 > link[3] > t[2] > image > list{item+:t > link*}+ > callout';\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n });\n\n it('Complex 8: Nested alternation in list items', () => {\n // Real-world: Flexible content blocks in CMS\n const blocks: (BlockElement | string)[] = [\n 'h2',\n 'list{[t, link], [image, t], [link, image, t]}',\n 'list{[t], [link, link], [image]}',\n ];\n const nodes = createMockAstNodes(blocks);\n\n const pattern = 'h2 > list{item[1-5]:(t | image | link)+}+';\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n });\n\n it('Complex 9: Nested list with quantifiers', () => {\n const blocks: (BlockElement | string)[] = [\n 'h1',\n 't',\n 'h2',\n 't',\n 't',\n 't',\n 'image',\n 'image',\n 'list{[t], [t]}',\n 'h2',\n 't',\n 't',\n 't',\n 'image',\n 'image',\n 'list{[t], [t]}',\n ];\n const nodes = createMockAstNodes(blocks);\n\n // Test with error details to debug\n const pattern = 'h1 > t? > (h2 > t+ > image[2] > list{item+:t})[1-3]';\n const result = validatePattern(nodes, pattern);\n if (!result.valid) {\n console.log('Complex 9 Error:', result.error);\n }\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n });\n });\n\n describe('Error Messages', () => {\n it('provides detailed error for wrong item count', () => {\n const nodes = createMockAstNodes([\n 'h2',\n 'list{[t], [t], [t]}' as BlockElement,\n ]);\n const pattern = 'h2 > list{item[2]:t}';\n\n const result = validatePattern(nodes, pattern);\n // With new behavior, partial matches are valid, but we still get error messages\n expect(result.valid).toBe(false);\n expect(result.endIndex).toBe(0); // Matched h2\n // Error message should indicate wrong item count\n if (result.error) {\n expect(result.error).toContain('Expected exactly 2 items');\n expect(result.error).toContain('got 3 items');\n }\n });\n\n it('provides detailed error for item structure mismatch', () => {\n const nodes = createMockAstNodes([\n 'h2',\n 'list{[t, link, link]}' as BlockElement,\n ]);\n const pattern = 'h2 > list{item[1]:t > link}'; // Expects exactly 2 elements but got 3\n\n const result = validatePattern(nodes, pattern);\n // With new behavior, partial matches are valid, but we still get an error message\n // The pattern matches h2 (partial match), so valid is true, but error indicates structure mismatch\n expect(result.valid).toBe(false); // Partial match is valid\n // Error message should indicate structure mismatch\n if (result.error) {\n expect(result.error).toContain('Item #1');\n expect(result.error).toContain('does not match');\n }\n });\n\n it('provides detailed error for unexpected element', () => {\n const nodes = createMockAstNodes(['h2', 'image', 't']);\n const pattern = 'h2 > t > link';\n\n const result = validatePattern(nodes, pattern);\n // With new behavior, partial matches are valid, but we still get an error message\n // The pattern matches h2 (partial match), so valid is true, but error indicates unexpected element\n expect(result.valid).toBe(false); // Partial match is valid\n expect(result.endIndex).toBe(0); // Matched up to index 0 (h2)\n // Error message should indicate unexpected element\n if (result.error) {\n expect(result.error).toContain('Unexpected element');\n expect(result.error).toContain('image');\n expect(result.error).toContain('position 2');\n }\n });\n\n it('provides detailed error for incomplete pattern', () => {\n const nodes = createMockAstNodes(['h2', 't']);\n const pattern = 'h2 > t > link > image';\n\n const result = validatePattern(nodes, pattern);\n // With new behavior, partial matches are valid, but we still get an error message\n // The pattern matches h2 > t (partial match), so valid is true, but error indicates incomplete\n expect(result.valid).toBe(false); // Partial match is valid\n expect(result.endIndex).toBe(1); // Matched up to index 1 (h2, t)\n // Error message should indicate incomplete pattern\n if (result.error) {\n expect(result.error).toContain('incomplete');\n expect(result.error).toContain('Expected more elements');\n }\n });\n });\n });\n\n describe('Entity Link Patterns', () => {\n describe('Pattern Syntax Validation', () => {\n it('validates link attribute selector syntax', () => {\n // Basic attribute selectors\n expect(validatePatternSyntax('link[entityType]').valid).toBe(true);\n expect(\n validatePatternSyntax('link[entityType=\"blog_post\"]').valid,\n ).toBe(true);\n expect(validatePatternSyntax('link[protocol=\"entity\"]').valid).toBe(\n true,\n );\n expect(validatePatternSyntax('link[entityId=\"abc123\"]').valid).toBe(\n true,\n );\n });\n\n it('validates link attribute operators', () => {\n // Contains operator\n expect(validatePatternSyntax('link[entityType*=\"post\"]').valid).toBe(\n true,\n );\n // Starts with operator\n expect(validatePatternSyntax('link[entityType^=\"blog\"]').valid).toBe(\n true,\n );\n // Ends with operator\n expect(validatePatternSyntax('link[entityId$=\"123\"]').valid).toBe(true);\n });\n\n it('validates multiple link attributes', () => {\n expect(\n validatePatternSyntax('link[entityType=\"blog_post\"][entityId]').valid,\n ).toBe(true);\n expect(\n validatePatternSyntax('link[protocol=\"entity\"][entityType=\"product\"]')\n .valid,\n ).toBe(true);\n });\n\n it('validates link attributes with quantifiers', () => {\n expect(\n validatePatternSyntax('link[entityType=\"blog_post\"]?').valid,\n ).toBe(true);\n expect(\n validatePatternSyntax('link[entityType=\"blog_post\"]*').valid,\n ).toBe(true);\n expect(\n validatePatternSyntax('link[entityType=\"blog_post\"]+').valid,\n ).toBe(true);\n expect(\n validatePatternSyntax('link[entityType=\"blog_post\"][2]').valid,\n ).toBe(true);\n expect(\n validatePatternSyntax('link[entityType=\"blog_post\"][1-3]').valid,\n ).toBe(true);\n });\n\n it('validates link attributes in sequences', () => {\n expect(\n validatePatternSyntax('h2 > link[entityType=\"blog_post\"] > t').valid,\n ).toBe(true);\n expect(\n validatePatternSyntax('link[protocol=\"entity\"] > image > t').valid,\n ).toBe(true);\n });\n\n it('validates link attributes in groups and alternation', () => {\n expect(\n validatePatternSyntax(\n '(link[entityType=\"blog_post\"] | link[entityType=\"product\"])',\n ).valid,\n ).toBe(true);\n expect(validatePatternSyntax('(t > link[entityType])+').valid).toBe(\n true,\n );\n });\n });\n\n describe('Entity Link Matching', () => {\n it('matches entity link with exact entityType', () => {\n const nodes = createMockAstNodes([\n 'entity_link:blog_post:abc123' as BlockElement,\n 't',\n ]);\n const result = validatePattern(\n nodes,\n 'link[entityType=\"blog_post\"] > t',\n );\n expect(result.valid).toBe(true);\n expect(result.endIndex).toBe(1);\n });\n\n it('does not match entity link with different entityType', () => {\n const nodes = createMockAstNodes([\n 'entity_link:product:xyz789' as BlockElement,\n 't',\n ]);\n const result = validatePattern(\n nodes,\n 'link[entityType=\"blog_post\"] > t',\n );\n expect(result.valid).toBe(false);\n });\n\n it('matches entity link with entityType exists check', () => {\n const nodes = createMockAstNodes([\n 'entity_link:any_type:any_id' as BlockElement,\n 't',\n ]);\n const result = validatePattern(nodes, 'link[entityType] > t');\n expect(result.valid).toBe(true);\n });\n\n it('does not match http link when entityType is required', () => {\n const nodes = createMockAstNodes(['http_link' as BlockElement, 't']);\n const result = validatePattern(nodes, 'link[entityType] > t');\n expect(result.valid).toBe(false);\n });\n\n it('matches entity link with exact entityId', () => {\n const nodes = createMockAstNodes([\n 'entity_link:blog_post:abc123' as BlockElement,\n 't',\n ]);\n const result = validatePattern(nodes, 'link[entityId=\"abc123\"] > t');\n expect(result.valid).toBe(true);\n });\n\n it('matches entity link with protocol=\"web5\"', () => {\n const nodes = createMockAstNodes([\n 'entity_link:blog_post:abc123' as BlockElement,\n 't',\n ]);\n const result = validatePattern(nodes, 'link[protocol=\"web5\"] > t');\n expect(result.valid).toBe(true);\n });\n\n it('does not match entity link when http protocol is required', () => {\n const nodes = createMockAstNodes([\n 'entity_link:blog_post:abc123' as BlockElement,\n 't',\n ]);\n const result = validatePattern(nodes, 'link[protocol=\"http\"] > t');\n expect(result.valid).toBe(false);\n });\n\n it('matches http link with protocol=\"http\"', () => {\n const nodes = createMockAstNodes(['http_link' as BlockElement, 't']);\n const result = validatePattern(nodes, 'link[protocol=\"http\"] > t');\n expect(result.valid).toBe(true);\n });\n\n it('matches https link with protocol=\"https\"', () => {\n const nodes = createMockAstNodes(['https_link' as BlockElement, 't']);\n const result = validatePattern(nodes, 'link[protocol=\"https\"] > t');\n expect(result.valid).toBe(true);\n });\n });\n\n describe('Entity Link Attribute Operators', () => {\n it('matches entityType containing substring (*=)', () => {\n const nodes = createMockAstNodes([\n 'entity_link:blog_post:abc123' as BlockElement,\n 't',\n ]);\n expect(\n validatePattern(nodes, 'link[entityType*=\"blog\"] > t').valid,\n ).toBe(true);\n expect(\n validatePattern(nodes, 'link[entityType*=\"post\"] > t').valid,\n ).toBe(true);\n expect(\n validatePattern(nodes, 'link[entityType*=\"log_po\"] > t').valid,\n ).toBe(true);\n expect(\n validatePattern(nodes, 'link[entityType*=\"product\"] > t').valid,\n ).toBe(false);\n });\n\n it('matches entityType starting with prefix (^=)', () => {\n const nodes = createMockAstNodes([\n 'entity_link:blog_post:abc123' as BlockElement,\n 't',\n ]);\n expect(\n validatePattern(nodes, 'link[entityType^=\"blog\"] > t').valid,\n ).toBe(true);\n expect(\n validatePattern(nodes, 'link[entityType^=\"blog_\"] > t').valid,\n ).toBe(true);\n expect(\n validatePattern(nodes, 'link[entityType^=\"post\"] > t').valid,\n ).toBe(false);\n });\n\n it('matches entityType ending with suffix ($=)', () => {\n const nodes = createMockAstNodes([\n 'entity_link:blog_post:abc123' as BlockElement,\n 't',\n ]);\n expect(\n validatePattern(nodes, 'link[entityType$=\"post\"] > t').valid,\n ).toBe(true);\n expect(\n validatePattern(nodes, 'link[entityType$=\"_post\"] > t').valid,\n ).toBe(true);\n expect(\n validatePattern(nodes, 'link[entityType$=\"blog\"] > t').valid,\n ).toBe(false);\n });\n\n it('matches entityId ending with suffix ($=)', () => {\n const nodes = createMockAstNodes([\n 'entity_link:blog_post:post123' as BlockElement,\n 't',\n ]);\n expect(validatePattern(nodes, 'link[entityId$=\"123\"] > t').valid).toBe(\n true,\n );\n expect(validatePattern(nodes, 'link[entityId$=\"789\"] > t').valid).toBe(\n false,\n );\n });\n });\n\n describe('Multiple Link Attributes', () => {\n it('matches with both entityType and entityId', () => {\n const nodes = createMockAstNodes([\n 'entity_link:blog_post:abc123' as BlockElement,\n 't',\n ]);\n const result = validatePattern(\n nodes,\n 'link[entityType=\"blog_post\"][entityId=\"abc123\"] > t',\n );\n expect(result.valid).toBe(true);\n });\n\n it('does not match if one attribute fails', () => {\n const nodes = createMockAstNodes([\n 'entity_link:blog_post:abc123' as BlockElement,\n 't',\n ]);\n const result = validatePattern(\n nodes,\n 'link[entityType=\"blog_post\"][entityId=\"xyz789\"] > t',\n );\n expect(result.valid).toBe(false);\n });\n\n it('matches with protocol and entityType', () => {\n const nodes = createMockAstNodes([\n 'entity_link:product:xyz789' as BlockElement,\n 't',\n ]);\n const result = validatePattern(\n nodes,\n 'link[protocol=\"web5\"][entityType=\"product\"] > t',\n );\n expect(result.valid).toBe(true);\n });\n });\n\n describe('Optional Entity Links', () => {\n it('matches pattern without link when optional', () => {\n const nodes = createMockAstNodes(['h2', 't']);\n const result = validatePattern(\n nodes,\n 'h2 > link[entityType=\"blog_post\"]? > t',\n );\n expect(result.valid).toBe(true);\n expect(result.endIndex).toBe(1);\n });\n\n it('matches pattern with matching link when optional', () => {\n const nodes = createMockAstNodes([\n 'h2',\n 'entity_link:blog_post:abc123' as BlockElement,\n 't',\n ]);\n const result = validatePattern(\n nodes,\n 'h2 > link[entityType=\"blog_post\"]? > t',\n );\n expect(result.valid).toBe(true);\n expect(result.endIndex).toBe(2);\n });\n\n it('skips non-matching optional entity link', () => {\n // When optional entity link doesn't match, pattern should try to match without it\n const nodes = createMockAstNodes([\n 'h2',\n 'http_link' as BlockElement,\n 't',\n ]);\n const result = validatePattern(\n nodes,\n 'h2 > link[entityType=\"blog_post\"]? > link > t',\n );\n expect(result.valid).toBe(true);\n });\n });\n\n describe('Entity Links with Quantifiers', () => {\n it('matches zero or more entity links (*)', () => {\n const nodes1 = createMockAstNodes(['h2', 't']);\n const nodes2 = createMockAstNodes([\n 'h2',\n 'entity_link:blog_post:1' as BlockElement,\n 't',\n ]);\n const nodes3 = createMockAstNodes([\n 'h2',\n 'entity_link:blog_post:1' as BlockElement,\n 'entity_link:blog_post:2' as BlockElement,\n 't',\n ]);\n\n expect(\n validatePattern(nodes1, 'h2 > link[entityType=\"blog_post\"]* > t')\n .valid,\n ).toBe(true);\n expect(\n validatePattern(nodes2, 'h2 > link[entityType=\"blog_post\"]* > t')\n .valid,\n ).toBe(true);\n expect(\n validatePattern(nodes3, 'h2 > link[entityType=\"blog_post\"]* > t')\n .valid,\n ).toBe(true);\n });\n\n it('matches one or more entity links (+)', () => {\n const nodes1 = createMockAstNodes(['h2', 't']);\n const nodes2 = createMockAstNodes([\n 'h2',\n 'entity_link:blog_post:1' as BlockElement,\n 't',\n ]);\n const nodes3 = createMockAstNodes([\n 'h2',\n 'entity_link:blog_post:1' as BlockElement,\n 'entity_link:blog_post:2' as BlockElement,\n 't',\n ]);\n\n expect(\n validatePattern(nodes1, 'h2 > link[entityType=\"blog_post\"]+ > t')\n .valid,\n ).toBe(false);\n expect(\n validatePattern(nodes2, 'h2 > link[entityType=\"blog_post\"]+ > t')\n .valid,\n ).toBe(true);\n expect(\n validatePattern(nodes3, 'h2 > link[entityType=\"blog_post\"]+ > t')\n .valid,\n ).toBe(true);\n });\n\n it('matches exact count of entity links ([N])', () => {\n const nodes = createMockAstNodes([\n 'h2',\n 'entity_link:blog_post:1' as BlockElement,\n 'entity_link:blog_post:2' as BlockElement,\n 't',\n ]);\n\n expect(\n validatePattern(nodes, 'h2 > link[entityType=\"blog_post\"][2] > t')\n .valid,\n ).toBe(true);\n expect(\n validatePattern(nodes, 'h2 > link[entityType=\"blog_post\"][3] > t')\n .valid,\n ).toBe(false);\n });\n });\n\n describe('Backward Compatibility', () => {\n it('plain link matches entity links', () => {\n const nodes = createMockAstNodes([\n 'entity_link:blog_post:abc123' as BlockElement,\n 't',\n ]);\n const result = validatePattern(nodes, 'link > t');\n expect(result.valid).toBe(true);\n });\n\n it('plain link matches http links', () => {\n const nodes = createMockAstNodes(['http_link' as BlockElement, 't']);\n const result = validatePattern(nodes, 'link > t');\n expect(result.valid).toBe(true);\n });\n\n it('plain link with quantifiers works as before', () => {\n const nodes = createMockAstNodes(['link', 'link', 't']);\n expect(validatePattern(nodes, 'link+ > t').valid).toBe(true);\n expect(validatePattern(nodes, 'link* > t').valid).toBe(true);\n expect(validatePattern(nodes, 'link? > link > t').valid).toBe(true);\n });\n });\n\n describe('Complex Entity Link Patterns', () => {\n it('matches mixed entity and regular links in sequence', () => {\n const nodes = createMockAstNodes([\n 'entity_link:blog_post:abc123' as BlockElement,\n 't',\n 'http_link' as BlockElement,\n 't',\n ]);\n const result = validatePattern(\n nodes,\n 'link[protocol=\"web5\"] > t > link[protocol=\"http\"] > t',\n );\n expect(result.valid).toBe(true);\n });\n\n it('matches entity links in alternation', () => {\n const nodes1 = createMockAstNodes([\n 'h2',\n 'entity_link:blog_post:1' as BlockElement,\n 't',\n ]);\n const nodes2 = createMockAstNodes([\n 'h2',\n 'entity_link:product:1' as BlockElement,\n 't',\n ]);\n\n const pattern =\n 'h2 > (link[entityType=\"blog_post\"] | link[entityType=\"product\"]) > t';\n expect(validatePattern(nodes1, pattern).valid).toBe(true);\n expect(validatePattern(nodes2, pattern).valid).toBe(true);\n });\n\n it('matches entity links in groups with quantifiers', () => {\n const nodes = createMockAstNodes([\n 'h2',\n 'entity_link:blog_post:1' as BlockElement,\n 't',\n 'entity_link:blog_post:2' as BlockElement,\n 't',\n ]);\n const result = validatePattern(\n nodes,\n 'h2 > (link[entityType=\"blog_post\"] > t)+',\n );\n expect(result.valid).toBe(true);\n expect(result.endIndex).toBe(4);\n });\n\n it('matches real-world blog post pattern with entity links', () => {\n const nodes = createMockAstNodes([\n 'h2',\n 't',\n 'entity_link:blog_post:123' as BlockElement,\n 'image',\n 't',\n 'entity_link:blog_post:456' as BlockElement,\n 'image',\n 't',\n ]);\n const pattern = 'h2 > t > (link[entityType=\"blog_post\"] > image > t)+';\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n });\n\n it('matches pattern with entity type prefix matching', () => {\n const nodes = createMockAstNodes([\n 'entity_link:blog_post:1' as BlockElement,\n 'entity_link:blog_article:2' as BlockElement,\n 't',\n ]);\n // Match any link where entityType starts with \"blog\"\n const result = validatePattern(nodes, 'link[entityType^=\"blog\"]+ > t');\n expect(result.valid).toBe(true);\n });\n });\n\n describe('Image Attribute Selectors', () => {\n describe('Pattern Syntax Validation', () => {\n it('validates image attribute selector syntax', () => {\n expect(validatePatternSyntax('image[type]').valid).toBe(true);\n expect(validatePatternSyntax('image[type=\"icon\"]').valid).toBe(true);\n expect(validatePatternSyntax('image[src]').valid).toBe(true);\n expect(validatePatternSyntax('image[alt=\"money\"]').valid).toBe(true);\n });\n\n it('validates image attribute operators', () => {\n expect(validatePatternSyntax('image[src*=\"web5\"]').valid).toBe(true);\n expect(validatePatternSyntax('image[src^=\"web5://\"]').valid).toBe(\n true,\n );\n expect(validatePatternSyntax('image[alt$=\"icon\"]').valid).toBe(true);\n });\n\n it('validates multiple image attributes', () => {\n expect(validatePatternSyntax('image[type=\"icon\"][alt]').valid).toBe(\n true,\n );\n });\n\n it('validates image attributes with quantifiers', () => {\n expect(validatePatternSyntax('image[type=\"icon\"]?').valid).toBe(true);\n expect(validatePatternSyntax('image[type=\"icon\"]*').valid).toBe(true);\n expect(validatePatternSyntax('image[type=\"icon\"]+').valid).toBe(true);\n expect(validatePatternSyntax('image[type=\"icon\"][2]').valid).toBe(\n true,\n );\n expect(validatePatternSyntax('image[type=\"icon\"][1-3]').valid).toBe(\n true,\n );\n });\n\n it('validates image attributes in sequences', () => {\n expect(\n validatePatternSyntax('h2 > image[type=\"icon\"] > t').valid,\n ).toBe(true);\n });\n\n it('validates image attributes in groups and alternation', () => {\n expect(\n validatePatternSyntax(\n '(image[type=\"icon\"] | image[type=\"illustration\"])',\n ).valid,\n ).toBe(true);\n expect(validatePatternSyntax('(t > image[type=\"icon\"])+').valid).toBe(\n true,\n );\n });\n\n it('validates image attributes in list item patterns', () => {\n expect(\n validatePatternSyntax(\n 'h2 > list{item[2-]:(image[type=\"icon\"] | h3 | t | link)* > t+}',\n ).valid,\n ).toBe(true);\n });\n });\n\n describe('Image Attribute Matching', () => {\n it('matches web5 illustration with type=\"illustration\"', () => {\n const nodes = createMockAstNodes([\n 'web5_image:illustration:chart' as BlockElement,\n 't',\n ]);\n const result = validatePattern(\n nodes,\n 'image[type=\"illustration\"] > t',\n );\n expect(result.valid).toBe(true);\n });\n\n it('does not match regular image when type is required', () => {\n const nodes = createMockAstNodes(['image', 't']);\n const result = validatePattern(nodes, 'image[type] > t');\n expect(result.valid).toBe(false);\n });\n\n it('does not match regular image with src starts-with web5://', () => {\n const nodes = createMockAstNodes(['image', 't']);\n const result = validatePattern(nodes, 'image[src^=\"web5://\"] > t');\n expect(result.valid).toBe(false);\n });\n\n it('plain image pattern does not match icon element', () => {\n const iconNodes = createMockAstNodes([\n 'web5_icon:dollar' as BlockElement,\n 't',\n ]);\n expect(validatePattern(iconNodes, 'image > t').valid).toBe(false);\n\n const regularNodes = createMockAstNodes(['image', 't']);\n expect(validatePattern(regularNodes, 'image > t').valid).toBe(true);\n });\n });\n\n describe('Icon BlockElement Matching', () => {\n it('matches web5 icon with icon pattern', () => {\n const nodes = createMockAstNodes([\n 'web5_icon:dollar' as BlockElement,\n 't',\n ]);\n const result = validatePattern(nodes, 'icon > t');\n expect(result.valid).toBe(true);\n });\n\n it('does not match regular image with icon pattern', () => {\n const nodes = createMockAstNodes(['image', 't']);\n const result = validatePattern(nodes, 'icon > t');\n expect(result.valid).toBe(false);\n });\n });\n\n describe('Icon in List Items', () => {\n it('matches list items with icons using icon pattern', () => {\n const nodes = createMockAstNodes([\n 'h2',\n 'list{[web5_icon, t], [web5_icon, t]}',\n ]);\n const result = validatePattern(nodes, 'h2 > list{item[2-]:icon > t}');\n expect(result.valid).toBe(true);\n });\n\n it('rejects list items with regular images when icon is required', () => {\n const nodes = createMockAstNodes([\n 'h2',\n 'list{[image, t], [image, t]}',\n ]);\n const result = validatePattern(nodes, 'h2 > list{item[2-]:icon > t}');\n expect(result.valid).toBe(false);\n });\n\n it('matches FeatureSection9Plus pattern with icons in list items', () => {\n const nodes = createMockAstNodes([\n 'h2',\n 'list{[web5_icon, t, t], [web5_icon, t, t]}',\n ]);\n const result = validatePattern(\n nodes,\n 'h2 > list{item[2-]:(icon | h3 | t | link)* > t+}',\n );\n expect(result.valid).toBe(true);\n });\n\n it('matches FeatureSection9Plus pattern without icons (backward compat)', () => {\n const nodes = createMockAstNodes(['h2', 'list{[t, t], [t, t]}']);\n const result = validatePattern(\n nodes,\n 'h2 > list{item[2-]:(icon | h3 | t | link)* > t+}',\n );\n expect(result.valid).toBe(true);\n });\n\n it('matches alternation of icon and text in list items', () => {\n const nodes = createMockAstNodes([\n 'h2',\n 'list{[web5_icon, t, link], [t, link]}',\n ]);\n const result = validatePattern(\n nodes,\n 'h2 > list{item[1-]:(icon | t)* > (t? > link)+}',\n );\n expect(result.valid).toBe(true);\n });\n });\n });\n });\n});\n\ndescribe('Stop clause (~)', () => {\n const comment = (content: string): RootContent =>\n ({ type: 'html', value: `<!-- ${content} -->` } as RootContent);\n\n describe('Syntax validation', () => {\n it('accepts a bare stop element', () => {\n expect(\n validatePatternSyntax('html_comment > t* ~ html_comment').valid,\n ).toBe(true);\n });\n\n it('accepts a stop element with attributes', () => {\n expect(\n validatePatternSyntax(\n 'html_comment > (t | list)* ~ html_comment[type=\"end\"]',\n ).valid,\n ).toBe(true);\n expect(\n validatePatternSyntax('h2 > t* ~ link[entityType=\"solution\"]').valid,\n ).toBe(true);\n expect(validatePatternSyntax('h2 > t* ~ image[type=\"icon\"]').valid).toBe(\n true,\n );\n });\n\n it('rejects a trailing ~ with no element', () => {\n const result = validatePatternSyntax('h2 > t* ~');\n expect(result.valid).toBe(false);\n expect(result.error).toContain(\"Expected a single element after '~'\");\n });\n\n it('rejects quantifiers on the stop element', () => {\n expect(validatePatternSyntax('h2 > t* ~ html_comment+').valid).toBe(\n false,\n );\n expect(validatePatternSyntax('h2 > t* ~ html_comment*').valid).toBe(\n false,\n );\n expect(validatePatternSyntax('h2 > t* ~ html_comment[2]').valid).toBe(\n false,\n );\n });\n\n it('rejects groups after ~', () => {\n expect(validatePatternSyntax('h2 > t* ~ (h2 | t)').valid).toBe(false);\n });\n\n it('rejects a second ~', () => {\n expect(validatePatternSyntax('h2 > t* ~ html_comment ~ t').valid).toBe(\n false,\n );\n });\n\n it('rejects tokens after the stop clause', () => {\n expect(validatePatternSyntax('h2 > t* ~ html_comment > t').valid).toBe(\n false,\n );\n });\n });\n\n describe('Matching', () => {\n it('stops before an attribute-matched end comment even when the loop accepts comments', () => {\n const nodes: RootContent[] = [\n comment('semantic: intro'),\n ...createMockAstNodes(['t', 't']),\n comment('type: end'),\n ];\n const result = validatePattern(\n nodes,\n 'html_comment > (t | html_comment)* ~ html_comment[type=\"end\"]',\n );\n expect(result.valid).toBe(true);\n expect(result.astEndIndex).toBe(2); // end comment (index 3) excluded\n });\n\n it('consumes the end comment without a stop clause (baseline greedy behavior)', () => {\n const nodes: RootContent[] = [\n comment('semantic: intro'),\n ...createMockAstNodes(['t', 't']),\n comment('type: end'),\n ];\n const result = validatePattern(\n nodes,\n 'html_comment > (t | html_comment)*',\n );\n expect(result.valid).toBe(true);\n expect(result.astEndIndex).toBe(3);\n });\n\n it('stops before an identical end comment (candidate retry)', () => {\n const nodes = createMockAstNodes([\n 'html_comment',\n 't',\n 't',\n 'html_comment',\n ]);\n const result = validatePattern(nodes, 'html_comment > t* ~ html_comment');\n expect(result.valid).toBe(true);\n expect(result.astEndIndex).toBe(2);\n });\n\n it('matches at end-of-input when the stop marker is absent (streaming)', () => {\n const nodes: RootContent[] = [\n comment('semantic: intro'),\n ...createMockAstNodes(['t', 't']),\n ];\n const result = validatePattern(\n nodes,\n 'html_comment > t* ~ html_comment[type=\"end\"]',\n );\n expect(result.valid).toBe(true);\n expect(result.astEndIndex).toBe(2);\n });\n\n it('fails when the marker is present but no valid prefix exists', () => {\n const nodes = createMockAstNodes(['t', 't', 'html_comment']);\n const result = validatePattern(nodes, 'h2 > t* ~ html_comment');\n expect(result.valid).toBe(false);\n expect(result.error).toContain('stop marker');\n });\n\n it('does not match through a marker even if the full input would match', () => {\n const nodes = createMockAstNodes([\n 'html_comment',\n 't',\n 'html_comment',\n 't',\n ]);\n // Without the stop clause the full input matches\n expect(\n validatePattern(nodes, 'html_comment > t > html_comment > t').valid,\n ).toBe(true);\n const result = validatePattern(\n nodes,\n 'html_comment > t > html_comment > t ~ html_comment',\n );\n expect(result.valid).toBe(false);\n });\n\n it('fails when the only marker is at the start (empty prefix)', () => {\n const nodes = createMockAstNodes(['html_comment', 't']);\n const result = validatePattern(nodes, 't ~ html_comment');\n expect(result.valid).toBe(false);\n });\n\n it('keeps extra-elements-before-marker semantics', () => {\n const nodes = createMockAstNodes(['h2', 't', 't', 'html_comment']);\n const result = validatePattern(nodes, 'h2 > t ~ html_comment');\n expect(result.valid).toBe(true);\n expect(result.astEndIndex).toBe(1); // second t is extra, marker untouched\n });\n\n it('supports stopping at non-comment elements', () => {\n const nodes = createMockAstNodes(['h2', 't', 't', 'h2', 't']);\n const result = validatePattern(nodes, 'h2 > t+ ~ h2');\n expect(result.valid).toBe(true);\n expect(result.astEndIndex).toBe(2);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["validatePattern","validatePatternSyntax","createMockAstNodes","blockElements","map","element","startsWith","listPattern","slice","items","itemMatches","match","itemMatch","itemContent","itemElements","split","e","trim","paragraphs","currentParagraphChildren","lastWasText","itemElement","length","push","type","children","value","url","alt","ordered","start","spread","elementStr","String","parts","entityType","entityId","iconName","imageType","imageName","depth","align","describe","it","expect","valid","toBe","result","error","toContain","nodes1","nodes2","result1","result2","endIndex","nodes3","result3","nodes4","nodes5","result4","result5","result6","nodes","pattern","nodes6","blocks","properPattern","patternWithItemValidation","patternWithRange","console","log","iconNodes","regularNodes","comment","content","astEndIndex"],"sources":["../../../src/patternValidator/validator.test.ts"],"sourcesContent":["import { validatePattern, validatePatternSyntax } from './index';\nimport type { RootContent, ListItem } from 'mdast';\nimport type { BlockElement } from './types';\n\n/**\n * Helper function to convert block element strings to mock AST nodes for testing\n * Accepts BlockElement or list pattern strings like 'list{[t], [t]}'\n */\nfunction createMockAstNodes(\n blockElements: (BlockElement | string)[],\n): RootContent[] {\n return blockElements.map((element) => {\n // Handle list patterns like 'list{[t], [t, link]}'\n if (typeof element === 'string' && element.startsWith('list{')) {\n // Parse list pattern: list{[t], [t, link]} -> [[t], [t, link]]\n const listPattern = element.slice(5, -1); // Remove 'list{' and '}'\n const items: ListItem[] = [];\n\n // Parse items: [t], [t, link] -> ['t'], ['t', 'link']\n const itemMatches = listPattern.match(/\\[([^\\]]+)\\]/g) || [];\n for (const itemMatch of itemMatches) {\n const itemContent = itemMatch.slice(1, -1); // Remove '[' and ']'\n const itemElements = itemContent.split(',').map((e) => e.trim());\n\n // Convert item elements to paragraph children\n // To get multiple 't' elements, we need to break up text nodes\n // We'll create separate paragraphs for consecutive 't' elements, or use separators\n const paragraphs: any[] = [];\n let currentParagraphChildren: any[] = [];\n let lastWasText = false;\n\n for (const itemElement of itemElements) {\n if (itemElement === 't') {\n // If previous was text, start a new paragraph to prevent merging\n // Or add a separator to force text splitting\n if (lastWasText && currentParagraphChildren.length > 0) {\n // Finish current paragraph and start new one\n paragraphs.push({\n type: 'paragraph',\n children: [...currentParagraphChildren],\n });\n currentParagraphChildren = [{ type: 'text', value: 'Text' }];\n } else {\n currentParagraphChildren.push({ type: 'text', value: 'Text' });\n }\n lastWasText = true;\n } else if (itemElement === 'link') {\n currentParagraphChildren.push({\n type: 'link',\n url: 'http://example.com',\n children: [{ type: 'text', value: 'Link' }],\n });\n lastWasText = false;\n } else if (itemElement === 'image') {\n currentParagraphChildren.push({\n type: 'image',\n url: 'http://example.com/image.jpg',\n alt: 'Image',\n });\n lastWasText = false;\n } else if (itemElement === 'web5_icon') {\n currentParagraphChildren.push({\n type: 'image',\n url: 'web5://icon/dollar',\n alt: '',\n });\n lastWasText = false;\n }\n }\n\n // Add final paragraph if it has children\n if (currentParagraphChildren.length > 0) {\n paragraphs.push({\n type: 'paragraph',\n children: currentParagraphChildren,\n });\n }\n\n items.push({\n type: 'listItem',\n children: paragraphs.length > 0 ? paragraphs : [],\n });\n }\n\n return {\n type: 'list',\n ordered: false,\n start: null,\n spread: false,\n children: items,\n } as RootContent;\n }\n\n // Handle entity links for testing (e.g., 'entity_link:news_item:abc123')\n const elementStr = String(element);\n if (elementStr.startsWith('entity_link:')) {\n const parts = elementStr.slice('entity_link:'.length).split(':');\n const entityType = parts[0] || 'default_type';\n const entityId = parts[1] || 'default_id';\n return {\n type: 'paragraph',\n children: [\n {\n type: 'link',\n url: `web5://entity/${entityType}/${entityId}`,\n children: [{ type: 'text', value: 'Entity Link' }],\n },\n ],\n } as RootContent;\n }\n\n // Handle web5 icon images for testing (e.g., 'web5_icon:dollar')\n if (elementStr.startsWith('web5_icon:')) {\n const iconName = elementStr.slice('web5_icon:'.length);\n return {\n type: 'paragraph',\n children: [\n {\n type: 'image',\n url: `web5://icon/${iconName}`,\n alt: '',\n },\n ],\n } as RootContent;\n }\n\n // Handle web5 images with custom type for testing (e.g., 'web5_image:illustration:chart')\n if (elementStr.startsWith('web5_image:')) {\n const parts = elementStr.slice('web5_image:'.length).split(':');\n const imageType = parts[0] || 'default';\n const imageName = parts[1] || 'default';\n return {\n type: 'paragraph',\n children: [\n {\n type: 'image',\n url: `web5://${imageType}/${imageName}`,\n alt: '',\n },\n ],\n } as RootContent;\n }\n\n // Handle http links for testing (e.g., 'http_link')\n if (elementStr === 'http_link') {\n return {\n type: 'paragraph',\n children: [\n {\n type: 'link',\n url: 'http://example.com/page',\n children: [{ type: 'text', value: 'HTTP Link' }],\n },\n ],\n } as RootContent;\n }\n\n // Handle https links for testing (e.g., 'https_link')\n if (elementStr === 'https_link') {\n return {\n type: 'paragraph',\n children: [\n {\n type: 'link',\n url: 'https://example.com/page',\n children: [{ type: 'text', value: 'HTTPS Link' }],\n },\n ],\n } as RootContent;\n }\n\n switch (element) {\n case 'h1':\n return {\n type: 'heading',\n depth: 1,\n children: [{ type: 'text', value: 'Heading 1' }],\n } as RootContent;\n case 'h2':\n return {\n type: 'heading',\n depth: 2,\n children: [{ type: 'text', value: 'Heading 2' }],\n } as RootContent;\n case 'h3':\n return {\n type: 'heading',\n depth: 3,\n children: [{ type: 'text', value: 'Heading 3' }],\n } as RootContent;\n case 'h4':\n return {\n type: 'heading',\n depth: 4,\n children: [{ type: 'text', value: 'Heading 4' }],\n } as RootContent;\n case 'h5':\n return {\n type: 'heading',\n depth: 5,\n children: [{ type: 'text', value: 'Heading 5' }],\n } as RootContent;\n case 'h6':\n return {\n type: 'heading',\n depth: 6,\n children: [{ type: 'text', value: 'Heading 6' }],\n } as RootContent;\n case 't':\n return {\n type: 'paragraph',\n children: [{ type: 'text', value: 'Text content' }],\n } as RootContent;\n case 'link':\n return {\n type: 'paragraph',\n children: [\n {\n type: 'link',\n url: 'http://example.com',\n children: [{ type: 'text', value: 'Link' }],\n },\n ],\n } as RootContent;\n case 'image':\n return {\n type: 'paragraph',\n children: [\n {\n type: 'image',\n url: 'http://example.com/image.jpg',\n alt: 'Image',\n },\n ],\n } as RootContent;\n case 'html_comment':\n return { type: 'html', value: '<!-- comment -->' } as RootContent;\n case 'table':\n return { type: 'table', align: [], children: [] } as RootContent;\n case 'callout':\n return { type: 'blockquote', children: [] } as RootContent;\n case 'thematicBreak':\n return { type: 'thematicBreak' } as RootContent;\n default:\n // For other types, create a simple paragraph\n return {\n type: 'paragraph',\n children: [{ type: 'text', value: String(element) }],\n } as RootContent;\n }\n });\n}\n\ndescribe('Pattern Validator', () => {\n describe('Pattern Syntax Validation', () => {\n it('validates correct patterns', () => {\n expect(validatePatternSyntax('h2 > t').valid).toBe(true);\n expect(validatePatternSyntax('t+').valid).toBe(true);\n expect(validatePatternSyntax('(t | image)*').valid).toBe(true);\n expect(validatePatternSyntax('h2 > t[1-3] > link?').valid).toBe(true);\n expect(validatePatternSyntax('(h2 > t)+').valid).toBe(true);\n });\n\n it('detects invalid elements', () => {\n const result = validatePatternSyntax('h2 > invalid');\n expect(result.valid).toBe(false);\n expect(result.error).toContain('Invalid element');\n });\n\n it('detects empty patterns', () => {\n const result = validatePatternSyntax('');\n expect(result.valid).toBe(false);\n expect(result.error).toBe('Pattern rule is empty');\n });\n\n it('detects syntax errors', () => {\n expect(validatePatternSyntax('h2 >').valid).toBe(false);\n expect(validatePatternSyntax('(h2 > t').valid).toBe(false);\n expect(validatePatternSyntax('h2 [').valid).toBe(false);\n });\n\n it('detects unexpected characters', () => {\n const result = validatePatternSyntax('h2 @ t');\n expect(result.valid).toBe(false);\n expect(result.error).toContain('Unexpected character');\n });\n });\n\n describe('Basic sequences', () => {\n it('matches simple sequence', () => {\n const nodes1 = createMockAstNodes(['h2', 't']);\n const nodes2 = createMockAstNodes(['h2', 'image']);\n const result1 = validatePattern(nodes1, 'h2 > t');\n const result2 = validatePattern(nodes2, 'h2 > t');\n expect(result1.valid).toBe(true);\n expect(result1.endIndex).toBe(1); // Matched both h2 and t\n // nodes2 matches h2 (partial match), so valid is true but endIndex is 0\n expect(result2.valid).toBe(false);\n expect(result2.endIndex).toBe(0); // Only matched h2\n });\n\n it('matches longer sequence', () => {\n const nodes1 = createMockAstNodes(['h2', 't', 'link']);\n const nodes2 = createMockAstNodes(['h2', 't']);\n const result1 = validatePattern(nodes1, 'h2 > t > link');\n const result2 = validatePattern(nodes2, 'h2 > t > link');\n expect(result1.valid).toBe(true);\n expect(result1.endIndex).toBe(2); // Matched all three\n // nodes2 matches h2 > t (partial match), so valid is true but endIndex is 1\n expect(result2.valid).toBe(false);\n expect(result2.endIndex).toBe(1); // Only matched h2 and t\n });\n });\n\n describe('Quantifiers', () => {\n it('matches star quantifier (0 or more)', () => {\n const nodes1 = createMockAstNodes(['h2']);\n const nodes2 = createMockAstNodes(['h2', 't']);\n const nodes3 = createMockAstNodes(['h2', 't', 't', 't']);\n expect(validatePattern(nodes1, 'h2 > t*').valid).toBe(true);\n expect(validatePattern(nodes2, 'h2 > t*').valid).toBe(true);\n expect(validatePattern(nodes3, 'h2 > t*').valid).toBe(true);\n });\n\n it('matches plus quantifier (1 or more)', () => {\n const nodes1 = createMockAstNodes(['h2']);\n const nodes2 = createMockAstNodes(['h2', 't']);\n const nodes3 = createMockAstNodes(['h2', 't', 't']);\n const result1 = validatePattern(nodes1, 'h2 > t+');\n const result2 = validatePattern(nodes2, 'h2 > t+');\n const result3 = validatePattern(nodes3, 'h2 > t+');\n // nodes1 matches h2 (partial match), so valid is true but endIndex is 0\n expect(result1.valid).toBe(false);\n expect(result1.endIndex).toBe(0); // Only matched h2\n expect(result2.valid).toBe(true);\n expect(result2.endIndex).toBe(1); // Matched h2 and t\n expect(result3.valid).toBe(true);\n expect(result3.endIndex).toBe(2); // Matched h2, t, t\n });\n\n it('matches optional quantifier', () => {\n const nodes1 = createMockAstNodes(['h2']);\n const nodes2 = createMockAstNodes(['h2', 't']);\n const nodes3 = createMockAstNodes(['h2', 't', 't']);\n const result1 = validatePattern(nodes1, 'h2 > t?');\n const result2 = validatePattern(nodes2, 'h2 > t?');\n const result3 = validatePattern(nodes3, 'h2 > t?');\n expect(result1.valid).toBe(true);\n expect(result1.endIndex).toBe(0); // Matched h2 (t is optional)\n expect(result2.valid).toBe(true);\n expect(result2.endIndex).toBe(1); // Matched h2 and t\n // nodes3 matches h2 > t (partial match), so valid is true but endIndex is 1\n expect(result3.valid).toBe(true);\n expect(result3.endIndex).toBe(1); // Only matched h2 and first t\n });\n\n it('matches exact count', () => {\n const nodes1 = createMockAstNodes(['h2', 't', 't']);\n const nodes2 = createMockAstNodes(['h2', 't']);\n const nodes3 = createMockAstNodes(['h2', 't', 't', 't']);\n const result1 = validatePattern(nodes1, 'h2 > t[2]');\n const result2 = validatePattern(nodes2, 'h2 > t[2]');\n const result3 = validatePattern(nodes3, 'h2 > t[2]');\n expect(result1.valid).toBe(true);\n expect(result1.endIndex).toBe(2); // Matched h2, t, t\n // nodes2 matches h2 > t (partial match), so valid is true but endIndex is 1\n expect(result2.valid).toBe(false);\n expect(result2.endIndex).toBe(1); // Only matched h2 and t\n // nodes3 matches h2 > t[2] (partial match), so valid is true but endIndex is 2\n expect(result3.valid).toBe(true);\n expect(result3.endIndex).toBe(2); // Matched h2, t, t (third t not matched)\n });\n\n it('matches range quantifier', () => {\n const nodes1 = createMockAstNodes(['h2', 't']);\n const nodes2 = createMockAstNodes(['h2', 't', 't']);\n const nodes3 = createMockAstNodes(['h2', 't', 't', 't']);\n const nodes4 = createMockAstNodes(['h2']);\n const nodes5 = createMockAstNodes(['h2', 't', 't', 't', 't']);\n const result1 = validatePattern(nodes1, 'h2 > t[1-3]');\n const result2 = validatePattern(nodes2, 'h2 > t[1-3]');\n const result3 = validatePattern(nodes3, 'h2 > t[1-3]');\n const result4 = validatePattern(nodes4, 'h2 > t[1-3]');\n const result5 = validatePattern(nodes5, 'h2 > t[1-3]');\n expect(result1.valid).toBe(true);\n expect(result1.endIndex).toBe(1); // Matched h2, t\n expect(result2.valid).toBe(true);\n expect(result2.endIndex).toBe(2); // Matched h2, t, t\n expect(result3.valid).toBe(true);\n expect(result3.endIndex).toBe(3); // Matched h2, t, t, t\n // nodes4 matches h2 (partial match), so valid is true but endIndex is 0\n expect(result4.valid).toBe(false);\n expect(result4.endIndex).toBe(0); // Only matched h2\n // nodes5 matches h2 > t[1-3] (partial match), so valid is true but endIndex is 3\n expect(result5.valid).toBe(true);\n expect(result5.endIndex).toBe(3); // Matched h2, t, t, t (fourth t not matched)\n });\n\n it('matches up-to quantifier', () => {\n const nodes1 = createMockAstNodes(['h2']);\n const nodes2 = createMockAstNodes(['h2', 't']);\n const nodes3 = createMockAstNodes(['h2', 't', 't']);\n const nodes4 = createMockAstNodes(['h2', 't', 't', 't']);\n const result1 = validatePattern(nodes1, 'h2 > t[-2]');\n const result2 = validatePattern(nodes2, 'h2 > t[-2]');\n const result3 = validatePattern(nodes3, 'h2 > t[-2]');\n const result4 = validatePattern(nodes4, 'h2 > t[-2]');\n expect(result1.valid).toBe(true);\n expect(result1.endIndex).toBe(0); // Matched h2\n expect(result2.valid).toBe(true);\n expect(result2.endIndex).toBe(1); // Matched h2, t\n expect(result3.valid).toBe(true);\n expect(result3.endIndex).toBe(2); // Matched h2, t, t\n // nodes4 matches h2 > t[-2] (partial match), so valid is true but endIndex is 2\n expect(result4.valid).toBe(true);\n expect(result4.endIndex).toBe(2); // Matched h2, t, t (third t not matched)\n });\n });\n\n describe('Alternation', () => {\n it('matches simple alternation', () => {\n const nodes1 = createMockAstNodes(['h2', 't']);\n const nodes2 = createMockAstNodes(['h2', 'image']);\n const nodes3 = createMockAstNodes(['h2', 'link']);\n const result1 = validatePattern(nodes1, 'h2 > (t | image)');\n const result2 = validatePattern(nodes2, 'h2 > (t | image)');\n const result3 = validatePattern(nodes3, 'h2 > (t | image)');\n expect(result1.valid).toBe(true);\n expect(result1.endIndex).toBe(1); // Matched h2, t\n expect(result2.valid).toBe(true);\n expect(result2.endIndex).toBe(1); // Matched h2, image\n // nodes3 matches h2 (partial match), so valid is true but endIndex is 0\n expect(result3.valid).toBe(false);\n expect(result3.endIndex).toBe(0); // Only matched h2\n });\n\n it('matches alternation with quantifier', () => {\n const nodes1 = createMockAstNodes(['h2']);\n const nodes2 = createMockAstNodes(['h2', 't']);\n const nodes3 = createMockAstNodes(['h2', 't', 'image', 't']);\n expect(validatePattern(nodes1, 'h2 > (t | image)*').valid).toBe(true);\n expect(validatePattern(nodes2, 'h2 > (t | image)*').valid).toBe(true);\n expect(validatePattern(nodes3, 'h2 > (t | image)*').valid).toBe(true);\n });\n });\n\n describe('Groups', () => {\n it('matches group with quantifier', () => {\n const nodes1: RootContent[] = [];\n const nodes2 = createMockAstNodes(['h2', 't']);\n const nodes3 = createMockAstNodes(['h2', 't', 'h2', 't']);\n const nodes4 = createMockAstNodes(['h2']);\n const result1 = validatePattern(nodes1, '(h2 > t)*');\n const result2 = validatePattern(nodes2, '(h2 > t)*');\n const result3 = validatePattern(nodes3, '(h2 > t)*');\n const result4 = validatePattern(nodes4, '(h2 > t)*');\n const result5 = validatePattern(nodes1, '(h2 > t)+');\n const result6 = validatePattern(nodes2, '(h2 > t)+');\n expect(result1.valid).toBe(true); // 0 repetitions\n expect(result1.endIndex).toBe(-1); // No match\n expect(result2.valid).toBe(true); // 1 repetition\n expect(result2.endIndex).toBe(1); // Matched h2, t\n expect(result3.valid).toBe(true); // 2 repetitions\n expect(result3.endIndex).toBe(3); // Matched h2, t, h2, t\n // nodes4 matches h2 (partial match), so valid is true but endIndex is 0\n expect(result4.valid).toBe(false); // partial match\n expect(result4.endIndex).toBe(0); // Matched h2\n // nodes1 with + requires at least 1, empty array doesn't match, so valid is false\n expect(result5.valid).toBe(false); // no match (empty array with + quantifier)\n expect(result5.endIndex).toBe(-1); // No match\n expect(result6.valid).toBe(true); // exactly 1\n expect(result6.endIndex).toBe(1); // Matched h2, t\n });\n });\n\n describe('ThematicBreak', () => {\n it('matches single thematicBreak', () => {\n const nodes = createMockAstNodes(['thematicBreak']);\n const result = validatePattern(nodes, 'thematicBreak');\n expect(result.valid).toBe(true);\n expect(result.endIndex).toBe(0);\n });\n\n it('matches thematicBreak with quantifiers', () => {\n const nodes1 = createMockAstNodes(['h1', 'thematicBreak']);\n const nodes2 = createMockAstNodes([\n 'h1',\n 'thematicBreak',\n 'thematicBreak',\n ]);\n const nodes3 = createMockAstNodes(['h1']);\n\n // Optional thematicBreak\n expect(validatePattern(nodes1, 'h1 > thematicBreak?').valid).toBe(true);\n expect(validatePattern(nodes3, 'h1 > thematicBreak?').valid).toBe(true);\n\n // One or more thematicBreak\n expect(validatePattern(nodes1, 'h1 > thematicBreak+').valid).toBe(true);\n expect(validatePattern(nodes2, 'h1 > thematicBreak+').valid).toBe(true);\n expect(validatePattern(nodes3, 'h1 > thematicBreak+').valid).toBe(false);\n\n // Zero or more thematicBreak\n expect(validatePattern(nodes1, 'h1 > thematicBreak*').valid).toBe(true);\n expect(validatePattern(nodes2, 'h1 > thematicBreak*').valid).toBe(true);\n expect(validatePattern(nodes3, 'h1 > thematicBreak*').valid).toBe(true);\n });\n\n it('matches thematicBreak in sequences', () => {\n const nodes1 = createMockAstNodes(['h1', 'thematicBreak', 't']);\n const nodes2 = createMockAstNodes(['h2', 'thematicBreak', 't', 'link']);\n\n expect(validatePattern(nodes1, 'h1 > thematicBreak > t').valid).toBe(\n true,\n );\n expect(\n validatePattern(nodes2, 'h2 > thematicBreak > t > link').valid,\n ).toBe(true);\n });\n\n it('matches thematicBreak in alternation', () => {\n const nodes1 = createMockAstNodes(['h2', 'thematicBreak', 't']);\n const nodes2 = createMockAstNodes(['h2', 'callout', 't']);\n const nodes3 = createMockAstNodes(['h2', 't']);\n\n expect(\n validatePattern(nodes1, 'h2 > (thematicBreak | callout) > t').valid,\n ).toBe(true);\n expect(\n validatePattern(nodes2, 'h2 > (thematicBreak | callout) > t').valid,\n ).toBe(true);\n expect(\n validatePattern(nodes3, 'h2 > (thematicBreak | callout) > t').valid,\n ).toBe(false);\n });\n\n it('validates thematicBreak pattern syntax', () => {\n expect(validatePatternSyntax('thematicBreak').valid).toBe(true);\n expect(validatePatternSyntax('h1 > thematicBreak').valid).toBe(true);\n expect(validatePatternSyntax('thematicBreak+').valid).toBe(true);\n expect(validatePatternSyntax('thematicBreak?').valid).toBe(true);\n expect(validatePatternSyntax('thematicBreak*').valid).toBe(true);\n });\n });\n\n describe('Complex patterns', () => {\n it('matches nested patterns', () => {\n const nodes1 = createMockAstNodes(['h2', 'link', 'image']);\n const nodes2 = createMockAstNodes([\n 'h2',\n 'link',\n 'image',\n 'link',\n 'image',\n ]);\n expect(validatePattern(nodes1, 'h2 > (link > image)*').valid).toBe(true);\n expect(validatePattern(nodes2, 'h2 > (link > image)*').valid).toBe(true);\n });\n\n it('matches multiple quantifiers', () => {\n const nodes1 = createMockAstNodes(['h2', 't', 't', 'link']);\n const nodes2 = createMockAstNodes(['h2', 't', 't', 'link', 'link']);\n expect(validatePattern(nodes1, 'h2 > t+ > link*').valid).toBe(true);\n expect(validatePattern(nodes2, 'h2 > t+ > link*').valid).toBe(true);\n });\n });\n\n describe('Lists', () => {\n it('matches simple list', () => {\n const nodes = createMockAstNodes(['list{[t], [t]}' as BlockElement]);\n expect(validatePattern(nodes, 'list').valid).toBe(true);\n });\n\n it('validates list item count', () => {\n // list{item[-2]:...} means up to 2 items\n const nodes1 = createMockAstNodes(['list{[t]}' as BlockElement]);\n const nodes2 = createMockAstNodes(['list{[t], [t]}' as BlockElement]);\n const nodes3 = createMockAstNodes([\n 'list{[t], [t], [t]}' as BlockElement,\n ]);\n expect(validatePattern(nodes1, 'list{item[-2]:t}').valid).toBe(true);\n expect(validatePattern(nodes2, 'list{item[-2]:t}').valid).toBe(true);\n expect(validatePattern(nodes3, 'list{item[-2]:t}').valid).toBe(false);\n });\n\n it('validates list item structure', () => {\n // Each item should have: t > image > t+ > link*\n const pattern = 'list{item[-2]:t > image > t+ > link*}';\n\n // Valid: 1 item with t, image, t\n const nodes1 = createMockAstNodes([\n 'list{[t, image, t]}' as BlockElement,\n ]);\n expect(validatePattern(nodes1, pattern).valid).toBe(true);\n\n // Valid: 1 item with t, image, t, t (multiple t's with t+)\n const nodes2 = createMockAstNodes([\n 'list{[t, image, t, t]}' as BlockElement,\n ]);\n expect(validatePattern(nodes2, pattern).valid).toBe(true);\n\n // Valid: 1 item with t, image, t, link\n const nodes3 = createMockAstNodes([\n 'list{[t, image, t, link]}' as BlockElement,\n ]);\n expect(validatePattern(nodes3, pattern).valid).toBe(true);\n\n // Valid: 2 items\n const nodes4 = createMockAstNodes([\n 'list{[t, image, t], [t, image, t, t, link]}' as BlockElement,\n ]);\n expect(validatePattern(nodes4, pattern).valid).toBe(true);\n\n // Invalid: missing image\n const nodes5 = createMockAstNodes(['list{[t, t]}' as BlockElement]);\n expect(validatePattern(nodes5, pattern).valid).toBe(false);\n\n // Invalid: wrong order\n const nodes6 = createMockAstNodes([\n 'list{[image, t, t]}' as BlockElement,\n ]);\n expect(validatePattern(nodes6, pattern).valid).toBe(false);\n });\n\n it('validates complex pattern with list', () => {\n const pattern =\n 'h2 > (link > image > t > list{item[-2]:t > image > t+ > link*})*';\n\n // h2 alone (0 repetitions of group)\n const nodes1 = createMockAstNodes(['h2']);\n expect(validatePattern(nodes1, pattern).valid).toBe(true);\n\n // h2 > link > image > t > list with valid items\n const nodes2 = createMockAstNodes([\n 'h2',\n 'link',\n 'image',\n 't',\n 'list{[t, image, t, link]}' as BlockElement,\n ]);\n expect(validatePattern(nodes2, pattern).valid).toBe(true);\n });\n\n it('validates real-world complex pattern from user', () => {\n const blocks: (BlockElement | string)[] = [\n 'h2', // 1\n 'link', // 2\n 't', // 3\n 'link', // 4\n 't', // 5\n 'link', // 6\n 't', // 7\n 'link', // 8\n 'html_comment', // 9\n 'link', // 10\n 'image', // 11\n 't', // 12\n 'list{[t, t]}', // 13 - list with 1 item containing ['t', 't']\n 'html_comment', // 14\n 'link', // 15\n 'image', // 16\n 't', // 17\n 'list{[t, t]}', // 18 - list with 1 item containing ['t', 't']\n ];\n\n const nodes = createMockAstNodes(blocks);\n\n // Pattern breakdown:\n // h2 -> matches position 1\n // (link > t)* -> matches positions 2-7 (3 repetitions: 2-3, 4-5, 6-7)\n // link -> matches position 8\n // (html_comment > link > image > t > list{item[1]:t > t})* -> matches 9-18 (2 repetitions)\n // First repetition: 9-13\n // Second repetition: 14-18\n //\n // list{[t, t]} means: 1 item with elements ['t', 't']\n\n // Now with proper implementation, we can use quantifiers on groups with lists!\n const properPattern =\n 'h2 > (link > t)* > link > (html_comment > link > image > t > list)*';\n expect(validatePattern(nodes, properPattern).valid).toBe(true);\n\n // Also test with item structure validation\n const patternWithItemValidation =\n 'h2 > (link > t)* > link > (html_comment > link > image > t > list{item[1]:t > t})*';\n expect(validatePattern(nodes, patternWithItemValidation).valid).toBe(\n true,\n );\n });\n\n // TDD Tests for proper list validation implementation\n describe('Advanced list validation (TDD)', () => {\n it('Test 1: validates list in simple repetitive pattern', () => {\n const blocks: (BlockElement | string)[] = [\n 't',\n 'list{[t]}',\n 't',\n 'list{[t]}',\n 't',\n 'list{[t]}',\n ];\n const nodes = createMockAstNodes(blocks);\n\n // Pattern: t > list repeated 3 times\n const pattern = '(t > list)*';\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n });\n\n it('Test 2: validates list in complex group repetition', () => {\n const blocks: (BlockElement | string)[] = [\n 'h2',\n 'html_comment',\n 'link',\n 'list{[t]}',\n 'html_comment',\n 'link',\n 'list{[t]}',\n ];\n const nodes = createMockAstNodes(blocks);\n\n // Pattern: h2 followed by repeated groups\n const pattern = 'h2 > (html_comment > link > list)*';\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n });\n\n it('Test 3: validates list with simple item structure', () => {\n const nodes1 = createMockAstNodes(['list{[t, t]}' as BlockElement]);\n const nodes2 = createMockAstNodes(['list{[t]}' as BlockElement]);\n\n // Pattern: list with 1 item containing 2 't' elements in sequence\n const pattern = 'list{item[1]:t > t}';\n const result1 = validatePattern(nodes1, pattern);\n const result2 = validatePattern(nodes2, pattern);\n\n expect(result1.valid).toBe(true);\n expect(result1.endIndex).toBe(0); // Matched the list\n\n // nodes2 has list{[t]} but pattern expects list{item[1]:t > t} (1 item with 2 t's)\n // The list structure doesn't match (only 1 t instead of 2), so it should fail\n expect(result2.valid).toBe(false); // Structure doesn't match\n expect(result2.endIndex).toBe(-1); // No match\n });\n\n it('Test 4: validates list with complex item structure using quantifiers', () => {\n const nodes1 = createMockAstNodes([\n 'list{[t, t, t, link, link]}' as BlockElement,\n ]);\n const nodes2 = createMockAstNodes([\n 'list{[t, t, link]}' as BlockElement,\n ]);\n const nodes3 = createMockAstNodes([\n 'list{[link, link]}' as BlockElement,\n ]);\n\n // Pattern: list with 1 item containing 1+ t's followed by exactly 2 links\n // link[2] should expand to link > link\n const pattern = 'list{item[1]:t+ > link[2]}';\n expect(validatePattern(nodes1, pattern).valid).toBe(true);\n\n // Should fail with wrong number of links\n expect(validatePattern(nodes2, pattern).valid).toBe(false);\n\n // Should fail with no t at start\n expect(validatePattern(nodes3, pattern).valid).toBe(false);\n });\n it('Test 5: validates list with variable item counts and quantifiers', () => {\n // Test data has 2 lists:\n // 1st list: 1 item with 2 't' elements\n // 2nd list: 3 items, each with 2 't' elements\n const blocks: (BlockElement | string)[] = [\n 'h2',\n 'link',\n 't',\n 'link',\n 't',\n 'link',\n 't',\n 'link',\n 'html_comment',\n 'link',\n 'image',\n 't',\n 'list{[t, t]}', // 1 item: ['t', 't']\n 'html_comment',\n 'link',\n 'image',\n 't',\n 'list{[t, t], [t, t], [t, t]}', // 3 items: ['t', 't'], ['t', 't'], ['t', 't']\n ];\n const nodes = createMockAstNodes(blocks);\n\n // Pattern: list with 1+ items, each item has 1+ 't' elements\n // Use + quantifier for \"1 or more\"\n const pattern =\n 'h2 > (link > t)* > link > (html_comment > link > image > t > list{item+:t+})*';\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n\n // Should also work with explicit range [1-] for \"1 or more\"\n const patternWithRange =\n 'h2 > (link > t)* > link > (html_comment > link > image > t > list{item[1-]:t+})*';\n expect(validatePattern(nodes, patternWithRange).valid).toBe(true);\n });\n });\n\n describe('Super Complex Patterns (8 Advanced Cases)', () => {\n it('Complex 1: Multiple lists with wildcards', () => {\n // Real-world: Product specifications with flexible structure\n const blocks: (BlockElement | string)[] = [\n 'h2',\n 'list{[t, t, link]}',\n 'list{[t, link, link, link]}',\n 'list{[t]}',\n ];\n const nodes = createMockAstNodes(blocks);\n\n const pattern = 'h2 > list{item+:t+ > link*}+';\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n });\n\n it('Complex 2: Deeply nested groups with quantifiers', () => {\n // Real-world: Blog post with multiple paragraphs, each with optional formatting\n const blocks: (BlockElement | string)[] = [\n 'h2',\n 't',\n 'link',\n 't',\n 't',\n 'image',\n 't',\n 't',\n 'link',\n 't',\n ];\n const nodes = createMockAstNodes(blocks);\n\n const pattern = 'h2 > (t > (link | image) > t)+';\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n });\n\n it('Complex 3: Lists with complex quantified item structures', () => {\n // Real-world: Feature comparison table with variable columns\n const blocks: (BlockElement | string)[] = [\n 'h3',\n 'list{[t, t, t, link, link, image]}',\n 'list{[t, link, image], [t, t, link, link]}',\n 'list{[t, image]}',\n ];\n const nodes = createMockAstNodes(blocks);\n\n const pattern = 'h3 > list{item+:t+ > link* > image?}+';\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n });\n\n it('Complex 4: Alternation with lists', () => {\n // Real-world: Flexible content sections\n const blocks: (BlockElement | string)[] = [\n 'h2',\n 't',\n 'list{[t, t]}',\n 'list{[t, link, link]}',\n ];\n const nodes = createMockAstNodes(blocks);\n\n const pattern = 'h2 > t > list{item+:t+ > link*}+';\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n });\n\n it('Complex 5: Optional groups with mandatory list validation', () => {\n // Real-world: Product page with optional gallery but required specs\n const blocks: (BlockElement | string)[] = [\n 'h1',\n 't',\n 'image',\n 'image',\n 'image',\n 'h2',\n 'list{[t, t, link]}',\n 'list{[t, link], [t, t, link]}',\n ];\n const nodes = createMockAstNodes(blocks);\n\n const pattern = 'h1 > t > image* > h2 > list{item+:t+ > link}+';\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n });\n\n it('Complex 6: Optional elements throughout', () => {\n // Real-world: Blog post with optional media\n const blocks: (BlockElement | string)[] = [\n 'h1',\n 't',\n 'image',\n 'list{[t, link]}',\n 'callout',\n 'link',\n ];\n const nodes = createMockAstNodes(blocks);\n\n const pattern =\n 'h1 > t > image? > list{item+:t+ > link*} > callout? > link?';\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n });\n\n it('Complex 7: Complex alternation with exact quantifiers', () => {\n // Real-world: Structured data with specific format requirements\n const blocks: (BlockElement | string)[] = [\n 'h3',\n 'link',\n 'link',\n 'link',\n 't',\n 't',\n 'image',\n 'list{[t, link]}',\n 'list{[t, link, link]}',\n 'callout',\n ];\n const nodes = createMockAstNodes(blocks);\n\n const pattern =\n 'h3 > link[3] > t[2] > image > list{item+:t > link*}+ > callout';\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n });\n\n it('Complex 8: Nested alternation in list items', () => {\n // Real-world: Flexible content blocks in CMS\n const blocks: (BlockElement | string)[] = [\n 'h2',\n 'list{[t, link], [image, t], [link, image, t]}',\n 'list{[t], [link, link], [image]}',\n ];\n const nodes = createMockAstNodes(blocks);\n\n const pattern = 'h2 > list{item[1-5]:(t | image | link)+}+';\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n });\n\n it('Complex 9: Nested list with quantifiers', () => {\n const blocks: (BlockElement | string)[] = [\n 'h1',\n 't',\n 'h2',\n 't',\n 't',\n 't',\n 'image',\n 'image',\n 'list{[t], [t]}',\n 'h2',\n 't',\n 't',\n 't',\n 'image',\n 'image',\n 'list{[t], [t]}',\n ];\n const nodes = createMockAstNodes(blocks);\n\n // Test with error details to debug\n const pattern = 'h1 > t? > (h2 > t+ > image[2] > list{item+:t})[1-3]';\n const result = validatePattern(nodes, pattern);\n if (!result.valid) {\n console.log('Complex 9 Error:', result.error);\n }\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n });\n });\n\n describe('Error Messages', () => {\n it('provides detailed error for wrong item count', () => {\n const nodes = createMockAstNodes([\n 'h2',\n 'list{[t], [t], [t]}' as BlockElement,\n ]);\n const pattern = 'h2 > list{item[2]:t}';\n\n const result = validatePattern(nodes, pattern);\n // With new behavior, partial matches are valid, but we still get error messages\n expect(result.valid).toBe(false);\n expect(result.endIndex).toBe(0); // Matched h2\n // Error message should indicate wrong item count\n if (result.error) {\n expect(result.error).toContain('Expected exactly 2 items');\n expect(result.error).toContain('got 3 items');\n }\n });\n\n it('provides detailed error for item structure mismatch', () => {\n const nodes = createMockAstNodes([\n 'h2',\n 'list{[t, link, link]}' as BlockElement,\n ]);\n const pattern = 'h2 > list{item[1]:t > link}'; // Expects exactly 2 elements but got 3\n\n const result = validatePattern(nodes, pattern);\n // With new behavior, partial matches are valid, but we still get an error message\n // The pattern matches h2 (partial match), so valid is true, but error indicates structure mismatch\n expect(result.valid).toBe(false); // Partial match is valid\n // Error message should indicate structure mismatch\n if (result.error) {\n expect(result.error).toContain('Item #1');\n expect(result.error).toContain('does not match');\n }\n });\n\n it('provides detailed error for unexpected element', () => {\n const nodes = createMockAstNodes(['h2', 'image', 't']);\n const pattern = 'h2 > t > link';\n\n const result = validatePattern(nodes, pattern);\n // With new behavior, partial matches are valid, but we still get an error message\n // The pattern matches h2 (partial match), so valid is true, but error indicates unexpected element\n expect(result.valid).toBe(false); // Partial match is valid\n expect(result.endIndex).toBe(0); // Matched up to index 0 (h2)\n // Error message should indicate unexpected element\n if (result.error) {\n expect(result.error).toContain('Unexpected element');\n expect(result.error).toContain('image');\n expect(result.error).toContain('position 2');\n }\n });\n\n it('provides detailed error for incomplete pattern', () => {\n const nodes = createMockAstNodes(['h2', 't']);\n const pattern = 'h2 > t > link > image';\n\n const result = validatePattern(nodes, pattern);\n // With new behavior, partial matches are valid, but we still get an error message\n // The pattern matches h2 > t (partial match), so valid is true, but error indicates incomplete\n expect(result.valid).toBe(false); // Partial match is valid\n expect(result.endIndex).toBe(1); // Matched up to index 1 (h2, t)\n // Error message should indicate incomplete pattern\n if (result.error) {\n expect(result.error).toContain('incomplete');\n expect(result.error).toContain('Expected more elements');\n }\n });\n });\n });\n\n describe('Entity Link Patterns', () => {\n describe('Pattern Syntax Validation', () => {\n it('validates link attribute selector syntax', () => {\n // Basic attribute selectors\n expect(validatePatternSyntax('link[entityType]').valid).toBe(true);\n expect(\n validatePatternSyntax('link[entityType=\"news_item\"]').valid,\n ).toBe(true);\n expect(validatePatternSyntax('link[protocol=\"entity\"]').valid).toBe(\n true,\n );\n expect(validatePatternSyntax('link[entityId=\"abc123\"]').valid).toBe(\n true,\n );\n });\n\n it('validates link attribute operators', () => {\n // Contains operator\n expect(validatePatternSyntax('link[entityType*=\"post\"]').valid).toBe(\n true,\n );\n // Starts with operator\n expect(validatePatternSyntax('link[entityType^=\"blog\"]').valid).toBe(\n true,\n );\n // Ends with operator\n expect(validatePatternSyntax('link[entityId$=\"123\"]').valid).toBe(true);\n });\n\n it('validates multiple link attributes', () => {\n expect(\n validatePatternSyntax('link[entityType=\"news_item\"][entityId]').valid,\n ).toBe(true);\n expect(\n validatePatternSyntax('link[protocol=\"entity\"][entityType=\"product\"]')\n .valid,\n ).toBe(true);\n });\n\n it('validates link attributes with quantifiers', () => {\n expect(\n validatePatternSyntax('link[entityType=\"news_item\"]?').valid,\n ).toBe(true);\n expect(\n validatePatternSyntax('link[entityType=\"news_item\"]*').valid,\n ).toBe(true);\n expect(\n validatePatternSyntax('link[entityType=\"news_item\"]+').valid,\n ).toBe(true);\n expect(\n validatePatternSyntax('link[entityType=\"news_item\"][2]').valid,\n ).toBe(true);\n expect(\n validatePatternSyntax('link[entityType=\"news_item\"][1-3]').valid,\n ).toBe(true);\n });\n\n it('validates link attributes in sequences', () => {\n expect(\n validatePatternSyntax('h2 > link[entityType=\"news_item\"] > t').valid,\n ).toBe(true);\n expect(\n validatePatternSyntax('link[protocol=\"entity\"] > image > t').valid,\n ).toBe(true);\n });\n\n it('validates link attributes in groups and alternation', () => {\n expect(\n validatePatternSyntax(\n '(link[entityType=\"news_item\"] | link[entityType=\"product\"])',\n ).valid,\n ).toBe(true);\n expect(validatePatternSyntax('(t > link[entityType])+').valid).toBe(\n true,\n );\n });\n });\n\n describe('Entity Link Matching', () => {\n it('matches entity link with exact entityType', () => {\n const nodes = createMockAstNodes([\n 'entity_link:news_item:abc123' as BlockElement,\n 't',\n ]);\n const result = validatePattern(\n nodes,\n 'link[entityType=\"news_item\"] > t',\n );\n expect(result.valid).toBe(true);\n expect(result.endIndex).toBe(1);\n });\n\n it('does not match entity link with different entityType', () => {\n const nodes = createMockAstNodes([\n 'entity_link:product:xyz789' as BlockElement,\n 't',\n ]);\n const result = validatePattern(\n nodes,\n 'link[entityType=\"news_item\"] > t',\n );\n expect(result.valid).toBe(false);\n });\n\n it('matches entity link with entityType exists check', () => {\n const nodes = createMockAstNodes([\n 'entity_link:any_type:any_id' as BlockElement,\n 't',\n ]);\n const result = validatePattern(nodes, 'link[entityType] > t');\n expect(result.valid).toBe(true);\n });\n\n it('does not match http link when entityType is required', () => {\n const nodes = createMockAstNodes(['http_link' as BlockElement, 't']);\n const result = validatePattern(nodes, 'link[entityType] > t');\n expect(result.valid).toBe(false);\n });\n\n it('matches entity link with exact entityId', () => {\n const nodes = createMockAstNodes([\n 'entity_link:news_item:abc123' as BlockElement,\n 't',\n ]);\n const result = validatePattern(nodes, 'link[entityId=\"abc123\"] > t');\n expect(result.valid).toBe(true);\n });\n\n it('matches entity link with protocol=\"web5\"', () => {\n const nodes = createMockAstNodes([\n 'entity_link:news_item:abc123' as BlockElement,\n 't',\n ]);\n const result = validatePattern(nodes, 'link[protocol=\"web5\"] > t');\n expect(result.valid).toBe(true);\n });\n\n it('does not match entity link when http protocol is required', () => {\n const nodes = createMockAstNodes([\n 'entity_link:news_item:abc123' as BlockElement,\n 't',\n ]);\n const result = validatePattern(nodes, 'link[protocol=\"http\"] > t');\n expect(result.valid).toBe(false);\n });\n\n it('matches http link with protocol=\"http\"', () => {\n const nodes = createMockAstNodes(['http_link' as BlockElement, 't']);\n const result = validatePattern(nodes, 'link[protocol=\"http\"] > t');\n expect(result.valid).toBe(true);\n });\n\n it('matches https link with protocol=\"https\"', () => {\n const nodes = createMockAstNodes(['https_link' as BlockElement, 't']);\n const result = validatePattern(nodes, 'link[protocol=\"https\"] > t');\n expect(result.valid).toBe(true);\n });\n });\n\n describe('Entity Link Attribute Operators', () => {\n it('matches entityType containing substring (*=)', () => {\n const nodes = createMockAstNodes([\n 'entity_link:news_item:abc123' as BlockElement,\n 't',\n ]);\n expect(\n validatePattern(nodes, 'link[entityType*=\"news\"] > t').valid,\n ).toBe(true);\n expect(\n validatePattern(nodes, 'link[entityType*=\"item\"] > t').valid,\n ).toBe(true);\n expect(\n validatePattern(nodes, 'link[entityType*=\"ws_it\"] > t').valid,\n ).toBe(true);\n expect(\n validatePattern(nodes, 'link[entityType*=\"product\"] > t').valid,\n ).toBe(false);\n });\n\n it('matches entityType starting with prefix (^=)', () => {\n const nodes = createMockAstNodes([\n 'entity_link:news_item:abc123' as BlockElement,\n 't',\n ]);\n expect(\n validatePattern(nodes, 'link[entityType^=\"news\"] > t').valid,\n ).toBe(true);\n expect(\n validatePattern(nodes, 'link[entityType^=\"news_\"] > t').valid,\n ).toBe(true);\n expect(\n validatePattern(nodes, 'link[entityType^=\"item\"] > t').valid,\n ).toBe(false);\n });\n\n it('matches entityType ending with suffix ($=)', () => {\n const nodes = createMockAstNodes([\n 'entity_link:news_item:abc123' as BlockElement,\n 't',\n ]);\n expect(\n validatePattern(nodes, 'link[entityType$=\"item\"] > t').valid,\n ).toBe(true);\n expect(\n validatePattern(nodes, 'link[entityType$=\"_item\"] > t').valid,\n ).toBe(true);\n expect(\n validatePattern(nodes, 'link[entityType$=\"news\"] > t').valid,\n ).toBe(false);\n });\n\n it('matches entityId ending with suffix ($=)', () => {\n const nodes = createMockAstNodes([\n 'entity_link:news_item:post123' as BlockElement,\n 't',\n ]);\n expect(validatePattern(nodes, 'link[entityId$=\"123\"] > t').valid).toBe(\n true,\n );\n expect(validatePattern(nodes, 'link[entityId$=\"789\"] > t').valid).toBe(\n false,\n );\n });\n });\n\n describe('Multiple Link Attributes', () => {\n it('matches with both entityType and entityId', () => {\n const nodes = createMockAstNodes([\n 'entity_link:news_item:abc123' as BlockElement,\n 't',\n ]);\n const result = validatePattern(\n nodes,\n 'link[entityType=\"news_item\"][entityId=\"abc123\"] > t',\n );\n expect(result.valid).toBe(true);\n });\n\n it('does not match if one attribute fails', () => {\n const nodes = createMockAstNodes([\n 'entity_link:news_item:abc123' as BlockElement,\n 't',\n ]);\n const result = validatePattern(\n nodes,\n 'link[entityType=\"news_item\"][entityId=\"xyz789\"] > t',\n );\n expect(result.valid).toBe(false);\n });\n\n it('matches with protocol and entityType', () => {\n const nodes = createMockAstNodes([\n 'entity_link:product:xyz789' as BlockElement,\n 't',\n ]);\n const result = validatePattern(\n nodes,\n 'link[protocol=\"web5\"][entityType=\"product\"] > t',\n );\n expect(result.valid).toBe(true);\n });\n });\n\n describe('Optional Entity Links', () => {\n it('matches pattern without link when optional', () => {\n const nodes = createMockAstNodes(['h2', 't']);\n const result = validatePattern(\n nodes,\n 'h2 > link[entityType=\"news_item\"]? > t',\n );\n expect(result.valid).toBe(true);\n expect(result.endIndex).toBe(1);\n });\n\n it('matches pattern with matching link when optional', () => {\n const nodes = createMockAstNodes([\n 'h2',\n 'entity_link:news_item:abc123' as BlockElement,\n 't',\n ]);\n const result = validatePattern(\n nodes,\n 'h2 > link[entityType=\"news_item\"]? > t',\n );\n expect(result.valid).toBe(true);\n expect(result.endIndex).toBe(2);\n });\n\n it('skips non-matching optional entity link', () => {\n // When optional entity link doesn't match, pattern should try to match without it\n const nodes = createMockAstNodes([\n 'h2',\n 'http_link' as BlockElement,\n 't',\n ]);\n const result = validatePattern(\n nodes,\n 'h2 > link[entityType=\"news_item\"]? > link > t',\n );\n expect(result.valid).toBe(true);\n });\n });\n\n describe('Entity Links with Quantifiers', () => {\n it('matches zero or more entity links (*)', () => {\n const nodes1 = createMockAstNodes(['h2', 't']);\n const nodes2 = createMockAstNodes([\n 'h2',\n 'entity_link:news_item:1' as BlockElement,\n 't',\n ]);\n const nodes3 = createMockAstNodes([\n 'h2',\n 'entity_link:news_item:1' as BlockElement,\n 'entity_link:news_item:2' as BlockElement,\n 't',\n ]);\n\n expect(\n validatePattern(nodes1, 'h2 > link[entityType=\"news_item\"]* > t')\n .valid,\n ).toBe(true);\n expect(\n validatePattern(nodes2, 'h2 > link[entityType=\"news_item\"]* > t')\n .valid,\n ).toBe(true);\n expect(\n validatePattern(nodes3, 'h2 > link[entityType=\"news_item\"]* > t')\n .valid,\n ).toBe(true);\n });\n\n it('matches one or more entity links (+)', () => {\n const nodes1 = createMockAstNodes(['h2', 't']);\n const nodes2 = createMockAstNodes([\n 'h2',\n 'entity_link:news_item:1' as BlockElement,\n 't',\n ]);\n const nodes3 = createMockAstNodes([\n 'h2',\n 'entity_link:news_item:1' as BlockElement,\n 'entity_link:news_item:2' as BlockElement,\n 't',\n ]);\n\n expect(\n validatePattern(nodes1, 'h2 > link[entityType=\"news_item\"]+ > t')\n .valid,\n ).toBe(false);\n expect(\n validatePattern(nodes2, 'h2 > link[entityType=\"news_item\"]+ > t')\n .valid,\n ).toBe(true);\n expect(\n validatePattern(nodes3, 'h2 > link[entityType=\"news_item\"]+ > t')\n .valid,\n ).toBe(true);\n });\n\n it('matches exact count of entity links ([N])', () => {\n const nodes = createMockAstNodes([\n 'h2',\n 'entity_link:news_item:1' as BlockElement,\n 'entity_link:news_item:2' as BlockElement,\n 't',\n ]);\n\n expect(\n validatePattern(nodes, 'h2 > link[entityType=\"news_item\"][2] > t')\n .valid,\n ).toBe(true);\n expect(\n validatePattern(nodes, 'h2 > link[entityType=\"news_item\"][3] > t')\n .valid,\n ).toBe(false);\n });\n });\n\n describe('Backward Compatibility', () => {\n it('plain link matches entity links', () => {\n const nodes = createMockAstNodes([\n 'entity_link:news_item:abc123' as BlockElement,\n 't',\n ]);\n const result = validatePattern(nodes, 'link > t');\n expect(result.valid).toBe(true);\n });\n\n it('plain link matches http links', () => {\n const nodes = createMockAstNodes(['http_link' as BlockElement, 't']);\n const result = validatePattern(nodes, 'link > t');\n expect(result.valid).toBe(true);\n });\n\n it('plain link with quantifiers works as before', () => {\n const nodes = createMockAstNodes(['link', 'link', 't']);\n expect(validatePattern(nodes, 'link+ > t').valid).toBe(true);\n expect(validatePattern(nodes, 'link* > t').valid).toBe(true);\n expect(validatePattern(nodes, 'link? > link > t').valid).toBe(true);\n });\n });\n\n describe('Complex Entity Link Patterns', () => {\n it('matches mixed entity and regular links in sequence', () => {\n const nodes = createMockAstNodes([\n 'entity_link:news_item:abc123' as BlockElement,\n 't',\n 'http_link' as BlockElement,\n 't',\n ]);\n const result = validatePattern(\n nodes,\n 'link[protocol=\"web5\"] > t > link[protocol=\"http\"] > t',\n );\n expect(result.valid).toBe(true);\n });\n\n it('matches entity links in alternation', () => {\n const nodes1 = createMockAstNodes([\n 'h2',\n 'entity_link:news_item:1' as BlockElement,\n 't',\n ]);\n const nodes2 = createMockAstNodes([\n 'h2',\n 'entity_link:product:1' as BlockElement,\n 't',\n ]);\n\n const pattern =\n 'h2 > (link[entityType=\"news_item\"] | link[entityType=\"product\"]) > t';\n expect(validatePattern(nodes1, pattern).valid).toBe(true);\n expect(validatePattern(nodes2, pattern).valid).toBe(true);\n });\n\n it('matches entity links in groups with quantifiers', () => {\n const nodes = createMockAstNodes([\n 'h2',\n 'entity_link:news_item:1' as BlockElement,\n 't',\n 'entity_link:news_item:2' as BlockElement,\n 't',\n ]);\n const result = validatePattern(\n nodes,\n 'h2 > (link[entityType=\"news_item\"] > t)+',\n );\n expect(result.valid).toBe(true);\n expect(result.endIndex).toBe(4);\n });\n\n it('matches real-world blog post pattern with entity links', () => {\n const nodes = createMockAstNodes([\n 'h2',\n 't',\n 'entity_link:news_item:123' as BlockElement,\n 'image',\n 't',\n 'entity_link:news_item:456' as BlockElement,\n 'image',\n 't',\n ]);\n const pattern = 'h2 > t > (link[entityType=\"news_item\"] > image > t)+';\n expect(validatePattern(nodes, pattern).valid).toBe(true);\n });\n\n it('matches pattern with entity type prefix matching', () => {\n const nodes = createMockAstNodes([\n 'entity_link:news_item:1' as BlockElement,\n 'entity_link:news_flash:2' as BlockElement,\n 't',\n ]);\n // Match any link where entityType starts with \"news\"\n const result = validatePattern(nodes, 'link[entityType^=\"news\"]+ > t');\n expect(result.valid).toBe(true);\n });\n });\n\n describe('Image Attribute Selectors', () => {\n describe('Pattern Syntax Validation', () => {\n it('validates image attribute selector syntax', () => {\n expect(validatePatternSyntax('image[type]').valid).toBe(true);\n expect(validatePatternSyntax('image[type=\"icon\"]').valid).toBe(true);\n expect(validatePatternSyntax('image[src]').valid).toBe(true);\n expect(validatePatternSyntax('image[alt=\"money\"]').valid).toBe(true);\n });\n\n it('validates image attribute operators', () => {\n expect(validatePatternSyntax('image[src*=\"web5\"]').valid).toBe(true);\n expect(validatePatternSyntax('image[src^=\"web5://\"]').valid).toBe(\n true,\n );\n expect(validatePatternSyntax('image[alt$=\"icon\"]').valid).toBe(true);\n });\n\n it('validates multiple image attributes', () => {\n expect(validatePatternSyntax('image[type=\"icon\"][alt]').valid).toBe(\n true,\n );\n });\n\n it('validates image attributes with quantifiers', () => {\n expect(validatePatternSyntax('image[type=\"icon\"]?').valid).toBe(true);\n expect(validatePatternSyntax('image[type=\"icon\"]*').valid).toBe(true);\n expect(validatePatternSyntax('image[type=\"icon\"]+').valid).toBe(true);\n expect(validatePatternSyntax('image[type=\"icon\"][2]').valid).toBe(\n true,\n );\n expect(validatePatternSyntax('image[type=\"icon\"][1-3]').valid).toBe(\n true,\n );\n });\n\n it('validates image attributes in sequences', () => {\n expect(\n validatePatternSyntax('h2 > image[type=\"icon\"] > t').valid,\n ).toBe(true);\n });\n\n it('validates image attributes in groups and alternation', () => {\n expect(\n validatePatternSyntax(\n '(image[type=\"icon\"] | image[type=\"illustration\"])',\n ).valid,\n ).toBe(true);\n expect(validatePatternSyntax('(t > image[type=\"icon\"])+').valid).toBe(\n true,\n );\n });\n\n it('validates image attributes in list item patterns', () => {\n expect(\n validatePatternSyntax(\n 'h2 > list{item[2-]:(image[type=\"icon\"] | h3 | t | link)* > t+}',\n ).valid,\n ).toBe(true);\n });\n });\n\n describe('Image Attribute Matching', () => {\n it('matches web5 illustration with type=\"illustration\"', () => {\n const nodes = createMockAstNodes([\n 'web5_image:illustration:chart' as BlockElement,\n 't',\n ]);\n const result = validatePattern(\n nodes,\n 'image[type=\"illustration\"] > t',\n );\n expect(result.valid).toBe(true);\n });\n\n it('does not match regular image when type is required', () => {\n const nodes = createMockAstNodes(['image', 't']);\n const result = validatePattern(nodes, 'image[type] > t');\n expect(result.valid).toBe(false);\n });\n\n it('does not match regular image with src starts-with web5://', () => {\n const nodes = createMockAstNodes(['image', 't']);\n const result = validatePattern(nodes, 'image[src^=\"web5://\"] > t');\n expect(result.valid).toBe(false);\n });\n\n it('plain image pattern does not match icon element', () => {\n const iconNodes = createMockAstNodes([\n 'web5_icon:dollar' as BlockElement,\n 't',\n ]);\n expect(validatePattern(iconNodes, 'image > t').valid).toBe(false);\n\n const regularNodes = createMockAstNodes(['image', 't']);\n expect(validatePattern(regularNodes, 'image > t').valid).toBe(true);\n });\n });\n\n describe('Icon BlockElement Matching', () => {\n it('matches web5 icon with icon pattern', () => {\n const nodes = createMockAstNodes([\n 'web5_icon:dollar' as BlockElement,\n 't',\n ]);\n const result = validatePattern(nodes, 'icon > t');\n expect(result.valid).toBe(true);\n });\n\n it('does not match regular image with icon pattern', () => {\n const nodes = createMockAstNodes(['image', 't']);\n const result = validatePattern(nodes, 'icon > t');\n expect(result.valid).toBe(false);\n });\n });\n\n describe('Icon in List Items', () => {\n it('matches list items with icons using icon pattern', () => {\n const nodes = createMockAstNodes([\n 'h2',\n 'list{[web5_icon, t], [web5_icon, t]}',\n ]);\n const result = validatePattern(nodes, 'h2 > list{item[2-]:icon > t}');\n expect(result.valid).toBe(true);\n });\n\n it('rejects list items with regular images when icon is required', () => {\n const nodes = createMockAstNodes([\n 'h2',\n 'list{[image, t], [image, t]}',\n ]);\n const result = validatePattern(nodes, 'h2 > list{item[2-]:icon > t}');\n expect(result.valid).toBe(false);\n });\n\n it('matches FeatureSection9Plus pattern with icons in list items', () => {\n const nodes = createMockAstNodes([\n 'h2',\n 'list{[web5_icon, t, t], [web5_icon, t, t]}',\n ]);\n const result = validatePattern(\n nodes,\n 'h2 > list{item[2-]:(icon | h3 | t | link)* > t+}',\n );\n expect(result.valid).toBe(true);\n });\n\n it('matches FeatureSection9Plus pattern without icons (backward compat)', () => {\n const nodes = createMockAstNodes(['h2', 'list{[t, t], [t, t]}']);\n const result = validatePattern(\n nodes,\n 'h2 > list{item[2-]:(icon | h3 | t | link)* > t+}',\n );\n expect(result.valid).toBe(true);\n });\n\n it('matches alternation of icon and text in list items', () => {\n const nodes = createMockAstNodes([\n 'h2',\n 'list{[web5_icon, t, link], [t, link]}',\n ]);\n const result = validatePattern(\n nodes,\n 'h2 > list{item[1-]:(icon | t)* > (t? > link)+}',\n );\n expect(result.valid).toBe(true);\n });\n });\n });\n });\n});\n\ndescribe('Stop clause (~)', () => {\n const comment = (content: string): RootContent =>\n ({ type: 'html', value: `<!-- ${content} -->` } as RootContent);\n\n describe('Syntax validation', () => {\n it('accepts a bare stop element', () => {\n expect(\n validatePatternSyntax('html_comment > t* ~ html_comment').valid,\n ).toBe(true);\n });\n\n it('accepts a stop element with attributes', () => {\n expect(\n validatePatternSyntax(\n 'html_comment > (t | list)* ~ html_comment[type=\"end\"]',\n ).valid,\n ).toBe(true);\n expect(\n validatePatternSyntax('h2 > t* ~ link[entityType=\"solution\"]').valid,\n ).toBe(true);\n expect(validatePatternSyntax('h2 > t* ~ image[type=\"icon\"]').valid).toBe(\n true,\n );\n });\n\n it('rejects a trailing ~ with no element', () => {\n const result = validatePatternSyntax('h2 > t* ~');\n expect(result.valid).toBe(false);\n expect(result.error).toContain(\"Expected a single element after '~'\");\n });\n\n it('rejects quantifiers on the stop element', () => {\n expect(validatePatternSyntax('h2 > t* ~ html_comment+').valid).toBe(\n false,\n );\n expect(validatePatternSyntax('h2 > t* ~ html_comment*').valid).toBe(\n false,\n );\n expect(validatePatternSyntax('h2 > t* ~ html_comment[2]').valid).toBe(\n false,\n );\n });\n\n it('rejects groups after ~', () => {\n expect(validatePatternSyntax('h2 > t* ~ (h2 | t)').valid).toBe(false);\n });\n\n it('rejects a second ~', () => {\n expect(validatePatternSyntax('h2 > t* ~ html_comment ~ t').valid).toBe(\n false,\n );\n });\n\n it('rejects tokens after the stop clause', () => {\n expect(validatePatternSyntax('h2 > t* ~ html_comment > t').valid).toBe(\n false,\n );\n });\n });\n\n describe('Matching', () => {\n it('stops before an attribute-matched end comment even when the loop accepts comments', () => {\n const nodes: RootContent[] = [\n comment('semantic: intro'),\n ...createMockAstNodes(['t', 't']),\n comment('type: end'),\n ];\n const result = validatePattern(\n nodes,\n 'html_comment > (t | html_comment)* ~ html_comment[type=\"end\"]',\n );\n expect(result.valid).toBe(true);\n expect(result.astEndIndex).toBe(2); // end comment (index 3) excluded\n });\n\n it('consumes the end comment without a stop clause (baseline greedy behavior)', () => {\n const nodes: RootContent[] = [\n comment('semantic: intro'),\n ...createMockAstNodes(['t', 't']),\n comment('type: end'),\n ];\n const result = validatePattern(\n nodes,\n 'html_comment > (t | html_comment)*',\n );\n expect(result.valid).toBe(true);\n expect(result.astEndIndex).toBe(3);\n });\n\n it('stops before an identical end comment (candidate retry)', () => {\n const nodes = createMockAstNodes([\n 'html_comment',\n 't',\n 't',\n 'html_comment',\n ]);\n const result = validatePattern(nodes, 'html_comment > t* ~ html_comment');\n expect(result.valid).toBe(true);\n expect(result.astEndIndex).toBe(2);\n });\n\n it('matches at end-of-input when the stop marker is absent (streaming)', () => {\n const nodes: RootContent[] = [\n comment('semantic: intro'),\n ...createMockAstNodes(['t', 't']),\n ];\n const result = validatePattern(\n nodes,\n 'html_comment > t* ~ html_comment[type=\"end\"]',\n );\n expect(result.valid).toBe(true);\n expect(result.astEndIndex).toBe(2);\n });\n\n it('fails when the marker is present but no valid prefix exists', () => {\n const nodes = createMockAstNodes(['t', 't', 'html_comment']);\n const result = validatePattern(nodes, 'h2 > t* ~ html_comment');\n expect(result.valid).toBe(false);\n expect(result.error).toContain('stop marker');\n });\n\n it('does not match through a marker even if the full input would match', () => {\n const nodes = createMockAstNodes([\n 'html_comment',\n 't',\n 'html_comment',\n 't',\n ]);\n // Without the stop clause the full input matches\n expect(\n validatePattern(nodes, 'html_comment > t > html_comment > t').valid,\n ).toBe(true);\n const result = validatePattern(\n nodes,\n 'html_comment > t > html_comment > t ~ html_comment',\n );\n expect(result.valid).toBe(false);\n });\n\n it('fails when the only marker is at the start (empty prefix)', () => {\n const nodes = createMockAstNodes(['html_comment', 't']);\n const result = validatePattern(nodes, 't ~ html_comment');\n expect(result.valid).toBe(false);\n });\n\n it('keeps extra-elements-before-marker semantics', () => {\n const nodes = createMockAstNodes(['h2', 't', 't', 'html_comment']);\n const result = validatePattern(nodes, 'h2 > t ~ html_comment');\n expect(result.valid).toBe(true);\n expect(result.astEndIndex).toBe(1); // second t is extra, marker untouched\n });\n\n it('supports stopping at non-comment elements', () => {\n const nodes = createMockAstNodes(['h2', 't', 't', 'h2', 't']);\n const result = validatePattern(nodes, 'h2 > t+ ~ h2');\n expect(result.valid).toBe(true);\n expect(result.astEndIndex).toBe(2);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|