@bcts/envelope-pattern 1.0.0-alpha.12
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/LICENSE +48 -0
- package/README.md +13 -0
- package/dist/index.cjs +6781 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +2628 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.mts +2628 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.iife.js +6781 -0
- package/dist/index.iife.js.map +1 -0
- package/dist/index.mjs +6545 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +77 -0
- package/src/error.ts +262 -0
- package/src/format.ts +375 -0
- package/src/index.ts +27 -0
- package/src/parse/index.ts +923 -0
- package/src/parse/token.ts +906 -0
- package/src/parse/utils.ts +339 -0
- package/src/pattern/index.ts +719 -0
- package/src/pattern/leaf/array-pattern.ts +273 -0
- package/src/pattern/leaf/bool-pattern.ts +140 -0
- package/src/pattern/leaf/byte-string-pattern.ts +172 -0
- package/src/pattern/leaf/cbor-pattern.ts +355 -0
- package/src/pattern/leaf/date-pattern.ts +178 -0
- package/src/pattern/leaf/index.ts +280 -0
- package/src/pattern/leaf/known-value-pattern.ts +192 -0
- package/src/pattern/leaf/map-pattern.ts +152 -0
- package/src/pattern/leaf/null-pattern.ts +110 -0
- package/src/pattern/leaf/number-pattern.ts +248 -0
- package/src/pattern/leaf/tagged-pattern.ts +228 -0
- package/src/pattern/leaf/text-pattern.ts +165 -0
- package/src/pattern/matcher.ts +88 -0
- package/src/pattern/meta/and-pattern.ts +109 -0
- package/src/pattern/meta/any-pattern.ts +81 -0
- package/src/pattern/meta/capture-pattern.ts +111 -0
- package/src/pattern/meta/group-pattern.ts +110 -0
- package/src/pattern/meta/index.ts +269 -0
- package/src/pattern/meta/not-pattern.ts +91 -0
- package/src/pattern/meta/or-pattern.ts +146 -0
- package/src/pattern/meta/search-pattern.ts +201 -0
- package/src/pattern/meta/traverse-pattern.ts +146 -0
- package/src/pattern/structure/assertions-pattern.ts +244 -0
- package/src/pattern/structure/digest-pattern.ts +225 -0
- package/src/pattern/structure/index.ts +272 -0
- package/src/pattern/structure/leaf-structure-pattern.ts +85 -0
- package/src/pattern/structure/node-pattern.ts +188 -0
- package/src/pattern/structure/object-pattern.ts +149 -0
- package/src/pattern/structure/obscured-pattern.ts +159 -0
- package/src/pattern/structure/predicate-pattern.ts +151 -0
- package/src/pattern/structure/subject-pattern.ts +152 -0
- package/src/pattern/structure/wrapped-pattern.ts +195 -0
- package/src/pattern/vm.ts +1021 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["#indent","#elementFormat","#lastElementOnly","summary: string","lines: string[]","result: string[]","createLeafBoolPattern: ((pattern: BoolPattern) => Pattern) | undefined","#inner","cbor","dcborBoolPatternPaths","createLeafNullPattern: ((pattern: NullPattern) => Pattern) | undefined","#inner","#instance","cbor","dcborNullPatternPaths","createLeafNumberPattern: ((pattern: NumberPattern) => Pattern) | undefined","#inner","cbor","dcborNumberPatternPaths","createLeafTextPattern: ((pattern: TextPattern) => Pattern) | undefined","#inner","cbor","dcborTextPatternPaths","createLeafByteStringPattern: ((pattern: ByteStringPattern) => Pattern) | undefined","#inner","cbor","dcborByteStringPatternPaths","createLeafDatePattern: ((pattern: DatePattern) => Pattern) | undefined","#inner","date","cbor","dcborDatePatternPaths","createLeafArrayPattern: ((pattern: ArrayPattern) => Pattern) | undefined","#pattern","Interval","cbor","dcborPatternPathsWithCaptures","envelopePaths: Path[]","envPath: Path","envCapturePaths: Path[]","dcborPatternDisplay","simpleStringHash","createLeafMapPattern: ((pattern: MapPattern) => Pattern) | undefined","#pattern","Interval","cbor","map","createLeafKnownValuePattern: ((pattern: KnownValuePattern) => Pattern) | undefined","#inner","leafCbor","simpleStringHash","createLeafTaggedPattern: ((pattern: TaggedPattern) => Pattern) | undefined","#inner","cbor","envelopePaths: Path[]","envPath: Path","envCapturePaths: Path[]","simpleStringHash","createLeafCBORPattern: ((pattern: CBORPattern) => Pattern) | undefined","#pattern","toCbor","envelopeCapturePaths: Path[]","#convertDcborPathToEnvelopePath","envelopePath: Envelope[]","dcborPatternDisplay","dcborPatternPathsWithCaptures","basePath: Path","#convertDcborCapturesToEnvelopeCaptures","leafCbor","captureNames: string[]","#collectDcborCaptureNames","createStructureLeafPattern: ((pattern: LeafStructurePattern) => Pattern) | undefined","createStructureSubjectPattern: ((pattern: SubjectPattern) => Pattern) | undefined","#pattern","subject","paths: Path[]","createStructurePredicatePattern: ((pattern: PredicatePattern) => Pattern) | undefined","#pattern","predicate","paths: Path[]","createStructureObjectPattern: ((pattern: ObjectPattern) => Pattern) | undefined","#pattern","object","paths: Path[]","createStructureAssertionsPattern: ((pattern: AssertionsPattern) => Pattern) | undefined","#pattern","paths: Path[]","predicate","object","createStructureDigestPattern: ((pattern: DigestPattern) => Pattern) | undefined","#pattern","digest","createStructureNodePattern: ((pattern: NodePattern) => Pattern) | undefined","#pattern","Interval","createStructureObscuredPattern: ((pattern: ObscuredPattern) => Pattern) | undefined","#pattern","createStructureWrappedPattern: ((pattern: WrappedPattern) => Pattern) | undefined","#pattern","subject","paths: Path[]","createMetaAnyPattern: ((pattern: AnyPattern) => Pattern) | undefined","createMetaAndPattern: ((pattern: AndPattern) => Pattern) | undefined","#patterns","createMetaOrPattern: ((pattern: OrPattern) => Pattern) | undefined","#patterns","splits: number[]","jumps: number[]","createMetaNotPattern: ((pattern: NotPattern) => Pattern) | undefined","#pattern","createMetaCapturePattern: ((pattern: CapturePattern) => Pattern) | undefined","#name","#pattern","createMetaSearchPattern: ((pattern: SearchPattern) => Pattern) | undefined","#pattern","resultPaths: Path[]","#walkEnvelope","newPath: Envelope[]","patternPaths","uniquePaths: Path[]","subject","predicate","object","innerNames: string[]","captureMap: [string, number][]","collectCaptureNames","createMetaTraversePattern: ((pattern: TraversePattern) => Pattern) | undefined","#first","#rest","result: Pattern[]","result: Path[]","createMetaGroupPattern: ((pattern: GroupPattern) => Pattern) | undefined","#pattern","#quantifier","Quantifier","_patternPathsWithCaptures: (pattern: Pattern, env: Envelope) => [Path[], Map<string, Path[]>]","_patternMatches: (pattern: Pattern, env: Envelope) => boolean","_patternPaths: (pattern: Pattern, env: Envelope) => Path[]","subject","states: [Envelope, Path][][]","next: [Envelope, Path][]","zeroRepResult: [Envelope, Path][]","counts: number[]","Reluctance","out: [Envelope, Path][]","stack: Thread[]","distributedCaptures: Map<string, Path[]>[]","allChildren: Envelope[]","out: [Path, Path[][]][]","map","code: Instr[]","literals: Pattern[]","captureNames: string[]","anyPattern: Pattern","jumpAddresses: number[]","innerCaptureNames: string[]","captureMap: [string, number][]","leaf","KNOWN_VALUE_UNIT","Reluctance","Quantifier","Interval","#source","#position","#peekedToken","#tokenStart","max: number | undefined","mode: Reluctance","Reluctance","Quantifier","value","#skipWhitespace","#parseHexBinaryRegex","#parseHexPattern","#parseSingleQuotedRegex","#parseStringLiteral","#parseRegex","#parseRange","#parseSingleQuotedPattern","#parseDatePattern","#parseNumber","parseDcborPattern","patterns: Pattern[]","quantifier: Quantifier | undefined","Quantifier","Reluctance","endValue: number","value: number"],"sources":["../src/error.ts","../src/format.ts","../src/pattern/matcher.ts","../src/pattern/leaf/bool-pattern.ts","../src/pattern/leaf/null-pattern.ts","../src/pattern/leaf/number-pattern.ts","../src/pattern/leaf/text-pattern.ts","../src/pattern/leaf/byte-string-pattern.ts","../src/pattern/leaf/date-pattern.ts","../src/pattern/leaf/array-pattern.ts","../src/pattern/leaf/map-pattern.ts","../src/pattern/leaf/known-value-pattern.ts","../src/pattern/leaf/tagged-pattern.ts","../src/pattern/leaf/cbor-pattern.ts","../src/pattern/leaf/index.ts","../src/pattern/structure/leaf-structure-pattern.ts","../src/pattern/structure/subject-pattern.ts","../src/pattern/structure/predicate-pattern.ts","../src/pattern/structure/object-pattern.ts","../src/pattern/structure/assertions-pattern.ts","../src/pattern/structure/digest-pattern.ts","../src/pattern/structure/node-pattern.ts","../src/pattern/structure/obscured-pattern.ts","../src/pattern/structure/wrapped-pattern.ts","../src/pattern/structure/index.ts","../src/pattern/meta/any-pattern.ts","../src/pattern/meta/and-pattern.ts","../src/pattern/meta/or-pattern.ts","../src/pattern/meta/not-pattern.ts","../src/pattern/meta/capture-pattern.ts","../src/pattern/meta/search-pattern.ts","../src/pattern/meta/traverse-pattern.ts","../src/pattern/meta/group-pattern.ts","../src/pattern/meta/index.ts","../src/pattern/vm.ts","../src/pattern/index.ts","../src/parse/token.ts","../src/parse/index.ts","../src/index.ts"],"sourcesContent":["/**\n * @bcts/envelope-pattern - Error types for envelope pattern parsing\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust error.rs\n *\n * @module envelope-pattern/error\n */\n\nimport type { Token } from \"./parse/token\";\n\n/**\n * Span represents a range in the source input.\n */\nexport interface Span {\n readonly start: number;\n readonly end: number;\n}\n\n/**\n * Error types that can occur during parsing of Envelope patterns.\n *\n * Corresponds to the Rust `Error` enum in error.rs\n */\nexport type EnvelopePatternError =\n | { readonly type: \"EmptyInput\" }\n | { readonly type: \"UnexpectedEndOfInput\" }\n | { readonly type: \"ExtraData\"; readonly span: Span }\n | { readonly type: \"UnexpectedToken\"; readonly token: Token; readonly span: Span }\n | { readonly type: \"UnrecognizedToken\"; readonly span: Span }\n | { readonly type: \"InvalidRegex\"; readonly span: Span }\n | { readonly type: \"UnterminatedRegex\"; readonly span: Span }\n | { readonly type: \"InvalidRange\"; readonly span: Span }\n | { readonly type: \"InvalidHexString\"; readonly span: Span }\n | { readonly type: \"InvalidDateFormat\"; readonly span: Span }\n | { readonly type: \"InvalidNumberFormat\"; readonly span: Span }\n | { readonly type: \"InvalidUr\"; readonly message: string; readonly span: Span }\n | { readonly type: \"ExpectedOpenParen\"; readonly span: Span }\n | { readonly type: \"ExpectedCloseParen\"; readonly span: Span }\n | { readonly type: \"ExpectedOpenBracket\"; readonly span: Span }\n | { readonly type: \"ExpectedCloseBracket\"; readonly span: Span }\n | { readonly type: \"ExpectedPattern\"; readonly span: Span }\n | { readonly type: \"UnmatchedParentheses\"; readonly span: Span }\n | { readonly type: \"UnmatchedBraces\"; readonly span: Span }\n | { readonly type: \"InvalidCaptureGroupName\"; readonly name: string; readonly span: Span }\n | { readonly type: \"InvalidPattern\"; readonly span: Span }\n | { readonly type: \"Unknown\" }\n | { readonly type: \"DCBORPatternError\"; readonly error: unknown };\n\n/**\n * Result type specialized for envelope pattern parsing.\n */\nexport type Result<T> =\n | { readonly ok: true; readonly value: T }\n | { readonly ok: false; readonly error: EnvelopePatternError };\n\n/**\n * Creates a successful result.\n */\nexport function ok<T>(value: T): Result<T> {\n return { ok: true, value };\n}\n\n/**\n * Creates a failed result.\n */\nexport function err<T>(error: EnvelopePatternError): Result<T> {\n return { ok: false, error };\n}\n\n/**\n * Type guard for successful results.\n */\nexport function isOk<T>(result: Result<T>): result is { readonly ok: true; readonly value: T } {\n return result.ok;\n}\n\n/**\n * Type guard for failed results.\n */\nexport function isErr<T>(\n result: Result<T>,\n): result is { readonly ok: false; readonly error: EnvelopePatternError } {\n return !result.ok;\n}\n\n/**\n * Unwraps a successful result or throws the error.\n */\nexport function unwrap<T>(result: Result<T>): T {\n if (result.ok) {\n return result.value;\n }\n throw new Error(formatError(result.error));\n}\n\n/**\n * Unwraps a successful result or returns a default value.\n */\nexport function unwrapOr<T>(result: Result<T>, defaultValue: T): T {\n if (result.ok) {\n return result.value;\n }\n return defaultValue;\n}\n\n/**\n * Maps a successful result value.\n */\nexport function map<T, U>(result: Result<T>, fn: (value: T) => U): Result<U> {\n if (result.ok) {\n return ok(fn(result.value));\n }\n return result as Result<U>;\n}\n\n/**\n * Formats an error for display.\n */\nexport function formatError(error: EnvelopePatternError): string {\n switch (error.type) {\n case \"EmptyInput\":\n return \"Empty input\";\n case \"UnexpectedEndOfInput\":\n return \"Unexpected end of input\";\n case \"ExtraData\":\n return `Extra data at end of input at position ${error.span.start}-${error.span.end}`;\n case \"UnexpectedToken\":\n return `Unexpected token ${JSON.stringify(error.token)} at position ${error.span.start}-${error.span.end}`;\n case \"UnrecognizedToken\":\n return `Unrecognized token at position ${error.span.start}-${error.span.end}`;\n case \"InvalidRegex\":\n return `Invalid regex pattern at position ${error.span.start}-${error.span.end}`;\n case \"UnterminatedRegex\":\n return `Unterminated regex pattern at position ${error.span.start}-${error.span.end}`;\n case \"InvalidRange\":\n return `Invalid range at position ${error.span.start}-${error.span.end}`;\n case \"InvalidHexString\":\n return `Invalid hex string at position ${error.span.start}-${error.span.end}`;\n case \"InvalidDateFormat\":\n return `Invalid date format at position ${error.span.start}-${error.span.end}`;\n case \"InvalidNumberFormat\":\n return `Invalid number format at position ${error.span.start}-${error.span.end}`;\n case \"InvalidUr\":\n return `Invalid UR: ${error.message} at position ${error.span.start}-${error.span.end}`;\n case \"ExpectedOpenParen\":\n return `Expected opening parenthesis at position ${error.span.start}-${error.span.end}`;\n case \"ExpectedCloseParen\":\n return `Expected closing parenthesis at position ${error.span.start}-${error.span.end}`;\n case \"ExpectedOpenBracket\":\n return `Expected opening bracket at position ${error.span.start}-${error.span.end}`;\n case \"ExpectedCloseBracket\":\n return `Expected closing bracket at position ${error.span.start}-${error.span.end}`;\n case \"ExpectedPattern\":\n return `Expected pattern after operator at position ${error.span.start}-${error.span.end}`;\n case \"UnmatchedParentheses\":\n return `Unmatched parentheses at position ${error.span.start}-${error.span.end}`;\n case \"UnmatchedBraces\":\n return `Unmatched braces at position ${error.span.start}-${error.span.end}`;\n case \"InvalidCaptureGroupName\":\n return `Invalid capture group name '${error.name}' at position ${error.span.start}-${error.span.end}`;\n case \"InvalidPattern\":\n return `Invalid pattern at position ${error.span.start}-${error.span.end}`;\n case \"Unknown\":\n return \"Unknown error\";\n case \"DCBORPatternError\":\n return `DCBOR pattern error: ${String(error.error)}`;\n }\n}\n\n// Error factory functions for convenience\n\nexport function emptyInput(): EnvelopePatternError {\n return { type: \"EmptyInput\" };\n}\n\nexport function unexpectedEndOfInput(): EnvelopePatternError {\n return { type: \"UnexpectedEndOfInput\" };\n}\n\nexport function extraData(span: Span): EnvelopePatternError {\n return { type: \"ExtraData\", span };\n}\n\nexport function unexpectedToken(token: Token, span: Span): EnvelopePatternError {\n return { type: \"UnexpectedToken\", token, span };\n}\n\nexport function unrecognizedToken(span: Span): EnvelopePatternError {\n return { type: \"UnrecognizedToken\", span };\n}\n\nexport function invalidRegex(span: Span): EnvelopePatternError {\n return { type: \"InvalidRegex\", span };\n}\n\nexport function unterminatedRegex(span: Span): EnvelopePatternError {\n return { type: \"UnterminatedRegex\", span };\n}\n\nexport function invalidRange(span: Span): EnvelopePatternError {\n return { type: \"InvalidRange\", span };\n}\n\nexport function invalidHexString(span: Span): EnvelopePatternError {\n return { type: \"InvalidHexString\", span };\n}\n\nexport function invalidDateFormat(span: Span): EnvelopePatternError {\n return { type: \"InvalidDateFormat\", span };\n}\n\nexport function invalidNumberFormat(span: Span): EnvelopePatternError {\n return { type: \"InvalidNumberFormat\", span };\n}\n\nexport function invalidUr(message: string, span: Span): EnvelopePatternError {\n return { type: \"InvalidUr\", message, span };\n}\n\nexport function expectedOpenParen(span: Span): EnvelopePatternError {\n return { type: \"ExpectedOpenParen\", span };\n}\n\nexport function expectedCloseParen(span: Span): EnvelopePatternError {\n return { type: \"ExpectedCloseParen\", span };\n}\n\nexport function expectedOpenBracket(span: Span): EnvelopePatternError {\n return { type: \"ExpectedOpenBracket\", span };\n}\n\nexport function expectedCloseBracket(span: Span): EnvelopePatternError {\n return { type: \"ExpectedCloseBracket\", span };\n}\n\nexport function expectedPattern(span: Span): EnvelopePatternError {\n return { type: \"ExpectedPattern\", span };\n}\n\nexport function unmatchedParentheses(span: Span): EnvelopePatternError {\n return { type: \"UnmatchedParentheses\", span };\n}\n\nexport function unmatchedBraces(span: Span): EnvelopePatternError {\n return { type: \"UnmatchedBraces\", span };\n}\n\nexport function invalidCaptureGroupName(name: string, span: Span): EnvelopePatternError {\n return { type: \"InvalidCaptureGroupName\", name, span };\n}\n\nexport function invalidPattern(span: Span): EnvelopePatternError {\n return { type: \"InvalidPattern\", span };\n}\n\nexport function unknown(): EnvelopePatternError {\n return { type: \"Unknown\" };\n}\n\nexport function dcborPatternError(error: unknown): EnvelopePatternError {\n return { type: \"DCBORPatternError\", error };\n}\n","/**\n * @bcts/envelope-pattern - Path formatting utilities\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust format.rs\n *\n * @module envelope-pattern/format\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\n\n/**\n * A path is a sequence of envelopes from root to a matched element.\n */\nexport type Path = Envelope[];\n\n/**\n * Format options for each path element.\n *\n * Corresponds to the Rust `PathElementFormat` enum in format.rs\n */\nexport type PathElementFormat =\n | { readonly type: \"Summary\"; readonly maxLength?: number }\n | { readonly type: \"EnvelopeUR\" }\n | { readonly type: \"DigestUR\" };\n\n/**\n * Creates a Summary format.\n */\nexport function summaryFormat(maxLength?: number): PathElementFormat {\n if (maxLength !== undefined) {\n return { type: \"Summary\", maxLength };\n }\n return { type: \"Summary\" };\n}\n\n/**\n * Creates an EnvelopeUR format.\n */\nexport function envelopeURFormat(): PathElementFormat {\n return { type: \"EnvelopeUR\" };\n}\n\n/**\n * Creates a DigestUR format.\n */\nexport function digestURFormat(): PathElementFormat {\n return { type: \"DigestUR\" };\n}\n\n/**\n * Default path element format.\n */\nexport function defaultPathElementFormat(): PathElementFormat {\n return summaryFormat(undefined);\n}\n\n/**\n * Options for formatting paths.\n *\n * Corresponds to the Rust `FormatPathsOpts` struct in format.rs\n */\nexport interface FormatPathsOpts {\n /**\n * Whether to indent each path element.\n * If true, each element will be indented by 4 spaces per level.\n * Default: true\n */\n readonly indent: boolean;\n\n /**\n * Format for each path element.\n * Default: Summary(None)\n */\n readonly elementFormat: PathElementFormat;\n\n /**\n * If true, only the last element of each path will be formatted.\n * This is useful for displaying only the final destination of a path.\n * If false, all elements will be formatted.\n * Default: false\n */\n readonly lastElementOnly: boolean;\n}\n\n/**\n * Creates default formatting options.\n */\nexport function defaultFormatPathsOpts(): FormatPathsOpts {\n return {\n indent: true,\n elementFormat: defaultPathElementFormat(),\n lastElementOnly: false,\n };\n}\n\n/**\n * Builder for FormatPathsOpts.\n */\nexport class FormatPathsOptsBuilder {\n #indent = true;\n #elementFormat: PathElementFormat = defaultPathElementFormat();\n #lastElementOnly = false;\n\n /**\n * Sets whether to indent each path element.\n */\n indent(indent: boolean): this {\n this.#indent = indent;\n return this;\n }\n\n /**\n * Sets the format for each path element.\n */\n elementFormat(format: PathElementFormat): this {\n this.#elementFormat = format;\n return this;\n }\n\n /**\n * Sets whether to format only the last element of each path.\n */\n lastElementOnly(lastElementOnly: boolean): this {\n this.#lastElementOnly = lastElementOnly;\n return this;\n }\n\n /**\n * Builds the FormatPathsOpts.\n */\n build(): FormatPathsOpts {\n return {\n indent: this.#indent,\n elementFormat: this.#elementFormat,\n lastElementOnly: this.#lastElementOnly,\n };\n }\n}\n\n/**\n * Creates a new FormatPathsOptsBuilder.\n */\nexport function formatPathsOpts(): FormatPathsOptsBuilder {\n return new FormatPathsOptsBuilder();\n}\n\n/**\n * Gets a summary of an envelope for display.\n *\n * @param env - The envelope to summarize\n * @returns A string summary of the envelope\n */\nexport function envelopeSummary(env: Envelope): string {\n const id = env.shortId(\"short\");\n const c = env.case();\n\n let summary: string;\n switch (c.type) {\n case \"node\":\n summary = `NODE ${env.summary(Number.MAX_SAFE_INTEGER)}`;\n break;\n case \"leaf\":\n summary = `LEAF ${env.summary(Number.MAX_SAFE_INTEGER)}`;\n break;\n case \"wrapped\":\n summary = `WRAPPED ${env.summary(Number.MAX_SAFE_INTEGER)}`;\n break;\n case \"assertion\":\n summary = `ASSERTION ${env.summary(Number.MAX_SAFE_INTEGER)}`;\n break;\n case \"elided\":\n summary = \"ELIDED\";\n break;\n case \"knownValue\":\n summary = `KNOWN_VALUE '${c.value.name()}'`;\n break;\n case \"encrypted\":\n summary = \"ENCRYPTED\";\n break;\n case \"compressed\":\n summary = \"COMPRESSED\";\n break;\n default:\n summary = \"UNKNOWN\";\n }\n\n return `${id} ${summary}`;\n}\n\n/**\n * Truncates a string to the specified maximum length, appending an ellipsis if truncated.\n *\n * @param s - The string to truncate\n * @param maxLength - Optional maximum length\n * @returns The truncated string\n */\nfunction truncateWithEllipsis(s: string, maxLength?: number): string {\n if (maxLength === undefined) {\n return s;\n }\n if (s.length > maxLength) {\n if (maxLength > 1) {\n return `${s.substring(0, maxLength - 1)}…`;\n }\n return \"…\";\n }\n return s;\n}\n\n/**\n * Format a single path element on its own line with custom options.\n *\n * @param path - The path to format\n * @param opts - Formatting options\n * @returns The formatted path string\n */\nexport function formatPathOpt(\n path: Path,\n opts: FormatPathsOpts = defaultFormatPathsOpts(),\n): string {\n if (opts.lastElementOnly) {\n // Only format the last element, no indentation\n const element = path[path.length - 1];\n if (element === undefined) {\n return \"\";\n }\n\n switch (opts.elementFormat.type) {\n case \"Summary\": {\n const summary = envelopeSummary(element);\n return truncateWithEllipsis(summary, opts.elementFormat.maxLength);\n }\n case \"EnvelopeUR\":\n // TODO: Implement proper UR string format when available\n return element.digest().toString();\n case \"DigestUR\":\n return element.digest().toString();\n }\n }\n\n switch (opts.elementFormat.type) {\n case \"Summary\": {\n // Multi-line output with indentation for summaries\n const lines: string[] = [];\n for (let index = 0; index < path.length; index++) {\n const element = path[index];\n if (element === undefined) continue;\n\n const indent = opts.indent ? \" \".repeat(index * 4) : \"\";\n const summary = envelopeSummary(element);\n const content = truncateWithEllipsis(summary, opts.elementFormat.maxLength);\n lines.push(`${indent}${content}`);\n }\n return lines.join(\"\\n\");\n }\n case \"EnvelopeUR\":\n // TODO: Implement proper UR string format when available\n return path.map((element) => element.digest().toString()).join(\" \");\n case \"DigestUR\":\n // Single-line, space-separated digest strings\n return path.map((element) => element.digest().toString()).join(\" \");\n }\n}\n\n/**\n * Format a single path with default options.\n *\n * @param path - The path to format\n * @returns The formatted path string\n */\nexport function formatPath(path: Path): string {\n return formatPathOpt(path, defaultFormatPathsOpts());\n}\n\n/**\n * Format multiple paths with captures and custom options.\n *\n * Captures come first, sorted lexicographically by name, with their name\n * prefixed by '@'. Regular paths follow after all captures.\n *\n * @param paths - The paths to format\n * @param captures - Map of capture name to captured paths\n * @param opts - Formatting options\n * @returns The formatted string\n */\nexport function formatPathsWithCapturesOpt(\n paths: Path[],\n captures: Map<string, Path[]>,\n opts: FormatPathsOpts = defaultFormatPathsOpts(),\n): string {\n const result: string[] = [];\n\n // First, format all captures, sorted lexicographically by name\n const captureNames = Array.from(captures.keys()).sort();\n\n for (const captureName of captureNames) {\n const capturePaths = captures.get(captureName);\n if (capturePaths === undefined) continue;\n\n result.push(`@${captureName}`);\n for (const path of capturePaths) {\n const formattedPath = formatPathOpt(path, opts);\n // Add indentation to each line of the formatted path\n for (const line of formattedPath.split(\"\\n\")) {\n if (line.length > 0) {\n result.push(` ${line}`);\n }\n }\n }\n }\n\n // Then, format all regular paths\n switch (opts.elementFormat.type) {\n case \"EnvelopeUR\":\n case \"DigestUR\": {\n // For UR formats, join paths with spaces on same line\n if (paths.length > 0) {\n const formattedPaths = paths.map((path) => formatPathOpt(path, opts)).join(\" \");\n if (formattedPaths.length > 0) {\n result.push(formattedPaths);\n }\n }\n break;\n }\n case \"Summary\": {\n // For summary format, format each path separately\n for (const path of paths) {\n const formattedPath = formatPathOpt(path, opts);\n for (const line of formattedPath.split(\"\\n\")) {\n if (line.length > 0) {\n result.push(line);\n }\n }\n }\n break;\n }\n }\n\n return result.join(\"\\n\");\n}\n\n/**\n * Format multiple paths with captures using default options.\n *\n * @param paths - The paths to format\n * @param captures - Map of capture name to captured paths\n * @returns The formatted string\n */\nexport function formatPathsWithCaptures(paths: Path[], captures: Map<string, Path[]>): string {\n return formatPathsWithCapturesOpt(paths, captures, defaultFormatPathsOpts());\n}\n\n/**\n * Format multiple paths with custom options.\n *\n * @param paths - The paths to format\n * @param opts - Formatting options\n * @returns The formatted string\n */\nexport function formatPathsOpt(\n paths: Path[],\n opts: FormatPathsOpts = defaultFormatPathsOpts(),\n): string {\n return formatPathsWithCapturesOpt(paths, new Map(), opts);\n}\n\n/**\n * Format multiple paths with default options.\n *\n * @param paths - The paths to format\n * @returns The formatted string\n */\nexport function formatPaths(paths: Path[]): string {\n return formatPathsOpt(paths, defaultFormatPathsOpts());\n}\n","/**\n * @bcts/envelope-pattern - Matcher interface\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust matcher.rs\n *\n * @module envelope-pattern/pattern/matcher\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport type { Path } from \"../format\";\nimport type { Pattern } from \"./index\";\nimport type { Instr } from \"./vm\";\n\n/**\n * Matcher interface for pattern matching against envelopes.\n *\n * Corresponds to the Rust `Matcher` trait in matcher.rs\n */\nexport interface Matcher {\n /**\n * Return all matching paths along with any named captures.\n */\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>];\n\n /**\n * Return only the matching paths, discarding any captures.\n */\n paths(haystack: Envelope): Path[];\n\n /**\n * Returns true if the pattern matches the haystack.\n */\n matches(haystack: Envelope): boolean;\n\n /**\n * Compile this pattern to bytecode.\n */\n compile(code: Instr[], literals: Pattern[], captures: string[]): void;\n\n /**\n * Returns true if the Display of the matcher is complex,\n * i.e. contains nested patterns or other complex structures\n * that require its text rendering to be surrounded by grouping\n * parentheses.\n */\n isComplex(): boolean;\n}\n\n/**\n * Default implementations for Matcher methods.\n */\nexport const MatcherDefaults = {\n /**\n * Default implementation of paths() - calls pathsWithCaptures and discards captures.\n */\n paths(matcher: Matcher, haystack: Envelope): Path[] {\n return matcher.pathsWithCaptures(haystack)[0];\n },\n\n /**\n * Default implementation of matches() - checks if paths() returns any results.\n */\n matches(matcher: Matcher, haystack: Envelope): boolean {\n return matcher.paths(haystack).length > 0;\n },\n\n /**\n * Default implementation of isComplex() - returns false.\n */\n isComplex(): boolean {\n return false;\n },\n};\n\n/**\n * Helper to compile a pattern as an atomic predicate match.\n * Pushes the pattern into literals and emits a single MatchPredicate instruction.\n */\nexport function compileAsAtomic(\n pat: Pattern,\n code: Instr[],\n literals: Pattern[],\n _captures: string[],\n): void {\n const idx = literals.length;\n literals.push(pat);\n code.push({ type: \"MatchPredicate\", literalIndex: idx });\n}\n","/**\n * @bcts/envelope-pattern - Boolean pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust bool_pattern.rs\n *\n * @module envelope-pattern/pattern/leaf/bool-pattern\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport {\n type BoolPattern as DCBORBoolPattern,\n boolPatternAny,\n boolPatternValue,\n boolPatternPaths as dcborBoolPatternPaths,\n boolPatternDisplay,\n} from \"@bcts/dcbor-pattern\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport { compileAsAtomic } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory\nlet createLeafBoolPattern: ((pattern: BoolPattern) => Pattern) | undefined;\n\nexport function registerBoolPatternFactory(factory: (pattern: BoolPattern) => Pattern): void {\n createLeafBoolPattern = factory;\n}\n\n/**\n * Pattern for matching boolean values.\n *\n * This is a wrapper around dcbor_pattern::BoolPattern that provides\n * envelope-specific integration.\n *\n * Corresponds to the Rust `BoolPattern` struct in bool_pattern.rs\n */\nexport class BoolPattern implements Matcher {\n readonly #inner: DCBORBoolPattern;\n\n private constructor(inner: DCBORBoolPattern) {\n this.#inner = inner;\n }\n\n /**\n * Creates a new BoolPattern that matches any boolean value.\n */\n static any(): BoolPattern {\n return new BoolPattern(boolPatternAny());\n }\n\n /**\n * Creates a new BoolPattern that matches the specific boolean value.\n */\n static value(value: boolean): BoolPattern {\n return new BoolPattern(boolPatternValue(value));\n }\n\n /**\n * Creates a new BoolPattern from a dcbor-pattern BoolPattern.\n */\n static fromDcborPattern(dcborPattern: DCBORBoolPattern): BoolPattern {\n return new BoolPattern(dcborPattern);\n }\n\n /**\n * Gets the underlying dcbor-pattern BoolPattern.\n */\n get inner(): DCBORBoolPattern {\n return this.#inner;\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n // For leaf envelopes, extract the CBOR and delegate to dcbor-pattern\n const cbor = haystack.asLeaf();\n if (cbor !== undefined) {\n // Delegate to dcbor-pattern for CBOR matching\n const dcborPaths = dcborBoolPatternPaths(this.#inner, cbor);\n\n // For simple leaf patterns, if dcbor-pattern found matches, return the envelope\n if (dcborPaths.length > 0) {\n const envelopePaths: Path[] = [[haystack]];\n const envelopeCaptures = new Map<string, Path[]>();\n return [envelopePaths, envelopeCaptures];\n }\n }\n\n // Not a leaf envelope or no match\n return [[], new Map<string, Path[]>()];\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], captures: string[]): void {\n if (createLeafBoolPattern === undefined) {\n throw new Error(\"BoolPattern factory not registered\");\n }\n compileAsAtomic(createLeafBoolPattern(this), code, literals, captures);\n }\n\n isComplex(): boolean {\n return false;\n }\n\n toString(): string {\n return boolPatternDisplay(this.#inner);\n }\n\n /**\n * Equality comparison.\n */\n equals(other: BoolPattern): boolean {\n // Compare by variant and value\n if (this.#inner.variant !== other.#inner.variant) {\n return false;\n }\n if (this.#inner.variant === \"Value\" && other.#inner.variant === \"Value\") {\n return this.#inner.value === other.#inner.value;\n }\n return true;\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n // Simple hash based on variant and value\n let hash = this.#inner.variant === \"Any\" ? 0 : 1;\n if (this.#inner.variant === \"Value\") {\n hash = hash * 31 + (this.#inner.value ? 1 : 0);\n }\n return hash;\n }\n}\n","/**\n * @bcts/envelope-pattern - Null pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust null_pattern.rs\n *\n * @module envelope-pattern/pattern/leaf/null-pattern\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport {\n type NullPattern as DCBORNullPattern,\n nullPatternPaths as dcborNullPatternPaths,\n nullPatternDisplay,\n} from \"@bcts/dcbor-pattern\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport { compileAsAtomic } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory\nlet createLeafNullPattern: ((pattern: NullPattern) => Pattern) | undefined;\n\nexport function registerNullPatternFactory(factory: (pattern: NullPattern) => Pattern): void {\n createLeafNullPattern = factory;\n}\n\n/**\n * Pattern for matching null values.\n *\n * This is a wrapper around dcbor_pattern::NullPattern that provides\n * envelope-specific functionality.\n *\n * Corresponds to the Rust `NullPattern` struct in null_pattern.rs\n */\nexport class NullPattern implements Matcher {\n readonly #inner: DCBORNullPattern;\n static readonly #instance = new NullPattern();\n\n private constructor() {\n // Create the NullPattern directly - it's just { variant: \"Null\" }\n this.#inner = { variant: \"Null\" };\n }\n\n /**\n * Creates a new NullPattern (returns singleton).\n */\n static new(): NullPattern {\n return NullPattern.#instance;\n }\n\n /**\n * Gets the underlying dcbor-pattern NullPattern.\n */\n get inner(): DCBORNullPattern {\n return this.#inner;\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n // For leaf envelopes, extract the CBOR and delegate to dcbor-pattern\n const cbor = haystack.asLeaf();\n if (cbor !== undefined) {\n // Delegate to dcbor-pattern for CBOR matching\n const dcborPaths = dcborNullPatternPaths(this.#inner, cbor);\n\n if (dcborPaths.length > 0) {\n return [[[haystack]], new Map<string, Path[]>()];\n }\n }\n\n return [[], new Map<string, Path[]>()];\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], captures: string[]): void {\n if (createLeafNullPattern === undefined) {\n throw new Error(\"NullPattern factory not registered\");\n }\n compileAsAtomic(createLeafNullPattern(this), code, literals, captures);\n }\n\n isComplex(): boolean {\n return false;\n }\n\n toString(): string {\n return nullPatternDisplay(this.#inner);\n }\n\n /**\n * Equality comparison.\n */\n equals(other: NullPattern): boolean {\n return other instanceof NullPattern;\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n return 0; // All NullPatterns are equal\n }\n}\n","/**\n * @bcts/envelope-pattern - Number pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust number_pattern.rs\n *\n * @module envelope-pattern/pattern/leaf/number-pattern\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport {\n type NumberPattern as DCBORNumberPattern,\n numberPatternAny,\n numberPatternValue,\n numberPatternRange,\n numberPatternGreaterThan,\n numberPatternGreaterThanOrEqual,\n numberPatternLessThan,\n numberPatternLessThanOrEqual,\n numberPatternNaN,\n numberPatternInfinity,\n numberPatternNegInfinity,\n numberPatternPaths as dcborNumberPatternPaths,\n numberPatternDisplay,\n} from \"@bcts/dcbor-pattern\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport { compileAsAtomic } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory\nlet createLeafNumberPattern: ((pattern: NumberPattern) => Pattern) | undefined;\n\nexport function registerNumberPatternFactory(factory: (pattern: NumberPattern) => Pattern): void {\n createLeafNumberPattern = factory;\n}\n\n/**\n * Pattern for matching number values.\n *\n * This is a wrapper around dcbor_pattern::NumberPattern that provides\n * envelope-specific integration.\n *\n * Corresponds to the Rust `NumberPattern` struct in number_pattern.rs\n */\nexport class NumberPattern implements Matcher {\n readonly #inner: DCBORNumberPattern;\n\n private constructor(inner: DCBORNumberPattern) {\n this.#inner = inner;\n }\n\n /**\n * Creates a new NumberPattern that matches any number.\n */\n static any(): NumberPattern {\n return new NumberPattern(numberPatternAny());\n }\n\n /**\n * Creates a new NumberPattern that matches the exact number.\n */\n static exact(value: number): NumberPattern {\n return new NumberPattern(numberPatternValue(value));\n }\n\n /**\n * Creates a new NumberPattern that matches numbers within the specified range.\n */\n static range(min: number, max: number): NumberPattern {\n return new NumberPattern(numberPatternRange(min, max));\n }\n\n /**\n * Creates a new NumberPattern that matches numbers greater than the specified value.\n */\n static greaterThan(value: number): NumberPattern {\n return new NumberPattern(numberPatternGreaterThan(value));\n }\n\n /**\n * Creates a new NumberPattern that matches numbers greater than or equal to the specified value.\n */\n static greaterThanOrEqual(value: number): NumberPattern {\n return new NumberPattern(numberPatternGreaterThanOrEqual(value));\n }\n\n /**\n * Creates a new NumberPattern that matches numbers less than the specified value.\n */\n static lessThan(value: number): NumberPattern {\n return new NumberPattern(numberPatternLessThan(value));\n }\n\n /**\n * Creates a new NumberPattern that matches numbers less than or equal to the specified value.\n */\n static lessThanOrEqual(value: number): NumberPattern {\n return new NumberPattern(numberPatternLessThanOrEqual(value));\n }\n\n /**\n * Creates a new NumberPattern that matches NaN values.\n */\n static nan(): NumberPattern {\n return new NumberPattern(numberPatternNaN());\n }\n\n /**\n * Creates a new NumberPattern that matches positive infinity.\n */\n static infinity(): NumberPattern {\n return new NumberPattern(numberPatternInfinity());\n }\n\n /**\n * Creates a new NumberPattern that matches negative infinity.\n */\n static negInfinity(): NumberPattern {\n return new NumberPattern(numberPatternNegInfinity());\n }\n\n /**\n * Creates a new NumberPattern from a dcbor-pattern NumberPattern.\n */\n static fromDcborPattern(dcborPattern: DCBORNumberPattern): NumberPattern {\n return new NumberPattern(dcborPattern);\n }\n\n /**\n * Gets the underlying dcbor-pattern NumberPattern.\n */\n get inner(): DCBORNumberPattern {\n return this.#inner;\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n // For leaf envelopes, extract the CBOR and delegate to dcbor-pattern\n const cbor = haystack.asLeaf();\n if (cbor !== undefined) {\n // Delegate to dcbor-pattern for CBOR matching\n const dcborPaths = dcborNumberPatternPaths(this.#inner, cbor);\n\n // For simple leaf patterns, if dcbor-pattern found matches, return the envelope\n if (dcborPaths.length > 0) {\n const envelopePaths: Path[] = [[haystack]];\n return [envelopePaths, new Map<string, Path[]>()];\n }\n }\n\n return [[], new Map<string, Path[]>()];\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], captures: string[]): void {\n if (createLeafNumberPattern === undefined) {\n throw new Error(\"NumberPattern factory not registered\");\n }\n compileAsAtomic(createLeafNumberPattern(this), code, literals, captures);\n }\n\n isComplex(): boolean {\n return false;\n }\n\n toString(): string {\n return numberPatternDisplay(this.#inner);\n }\n\n /**\n * Equality comparison.\n */\n equals(other: NumberPattern): boolean {\n // Compare by variant and values\n if (this.#inner.variant !== other.#inner.variant) {\n return false;\n }\n switch (this.#inner.variant) {\n case \"Any\":\n case \"NaN\":\n case \"Infinity\":\n case \"NegInfinity\":\n return true;\n case \"Value\":\n case \"GreaterThan\":\n case \"GreaterThanOrEqual\":\n case \"LessThan\":\n case \"LessThanOrEqual\":\n return (\n (this.#inner as { value: number }).value === (other.#inner as { value: number }).value\n );\n case \"Range\":\n return (\n (this.#inner as { min: number; max: number }).min ===\n (other.#inner as { min: number; max: number }).min &&\n (this.#inner as { min: number; max: number }).max ===\n (other.#inner as { min: number; max: number }).max\n );\n }\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n let hash = 0;\n switch (this.#inner.variant) {\n case \"Any\":\n hash = 1;\n break;\n case \"Value\":\n hash = 2 * 31 + (this.#inner as { value: number }).value;\n break;\n case \"Range\":\n hash = 3 * 31 + (this.#inner as { min: number }).min + (this.#inner as { max: number }).max;\n break;\n case \"GreaterThan\":\n hash = 4 * 31 + (this.#inner as { value: number }).value;\n break;\n case \"GreaterThanOrEqual\":\n hash = 5 * 31 + (this.#inner as { value: number }).value;\n break;\n case \"LessThan\":\n hash = 6 * 31 + (this.#inner as { value: number }).value;\n break;\n case \"LessThanOrEqual\":\n hash = 7 * 31 + (this.#inner as { value: number }).value;\n break;\n case \"NaN\":\n hash = 8;\n break;\n case \"Infinity\":\n hash = 9;\n break;\n case \"NegInfinity\":\n hash = 10;\n break;\n }\n return hash;\n }\n}\n","/**\n * @bcts/envelope-pattern - Text pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust text_pattern.rs\n *\n * @module envelope-pattern/pattern/leaf/text-pattern\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport {\n type TextPattern as DCBORTextPattern,\n textPatternAny,\n textPatternValue,\n textPatternRegex,\n textPatternPaths as dcborTextPatternPaths,\n textPatternDisplay,\n} from \"@bcts/dcbor-pattern\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport { compileAsAtomic } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory\nlet createLeafTextPattern: ((pattern: TextPattern) => Pattern) | undefined;\n\nexport function registerTextPatternFactory(factory: (pattern: TextPattern) => Pattern): void {\n createLeafTextPattern = factory;\n}\n\n/**\n * Pattern for matching text values.\n *\n * This is a wrapper around dcbor_pattern::TextPattern that provides\n * envelope-specific integration.\n *\n * Corresponds to the Rust `TextPattern` struct in text_pattern.rs\n */\nexport class TextPattern implements Matcher {\n readonly #inner: DCBORTextPattern;\n\n private constructor(inner: DCBORTextPattern) {\n this.#inner = inner;\n }\n\n /**\n * Creates a new TextPattern that matches any text.\n */\n static any(): TextPattern {\n return new TextPattern(textPatternAny());\n }\n\n /**\n * Creates a new TextPattern that matches the specific text.\n */\n static value(value: string): TextPattern {\n return new TextPattern(textPatternValue(value));\n }\n\n /**\n * Creates a new TextPattern that matches text matching the regex.\n */\n static regex(pattern: RegExp): TextPattern {\n return new TextPattern(textPatternRegex(pattern));\n }\n\n /**\n * Creates a new TextPattern from a dcbor-pattern TextPattern.\n */\n static fromDcborPattern(dcborPattern: DCBORTextPattern): TextPattern {\n return new TextPattern(dcborPattern);\n }\n\n /**\n * Gets the underlying dcbor-pattern TextPattern.\n */\n get inner(): DCBORTextPattern {\n return this.#inner;\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n // For leaf envelopes, extract the CBOR and delegate to dcbor-pattern\n const cbor = haystack.asLeaf();\n if (cbor !== undefined) {\n // Delegate to dcbor-pattern for CBOR matching\n const dcborPaths = dcborTextPatternPaths(this.#inner, cbor);\n\n // For simple leaf patterns, if dcbor-pattern found matches, return the envelope\n if (dcborPaths.length > 0) {\n const envelopePaths: Path[] = [[haystack]];\n return [envelopePaths, new Map<string, Path[]>()];\n }\n }\n\n return [[], new Map<string, Path[]>()];\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], captures: string[]): void {\n if (createLeafTextPattern === undefined) {\n throw new Error(\"TextPattern factory not registered\");\n }\n compileAsAtomic(createLeafTextPattern(this), code, literals, captures);\n }\n\n isComplex(): boolean {\n return false;\n }\n\n toString(): string {\n return textPatternDisplay(this.#inner);\n }\n\n /**\n * Equality comparison.\n */\n equals(other: TextPattern): boolean {\n if (this.#inner.variant !== other.#inner.variant) {\n return false;\n }\n switch (this.#inner.variant) {\n case \"Any\":\n return true;\n case \"Value\":\n return (\n (this.#inner as { value: string }).value === (other.#inner as { value: string }).value\n );\n case \"Regex\":\n return (\n (this.#inner as { pattern: RegExp }).pattern.source ===\n (other.#inner as { pattern: RegExp }).pattern.source\n );\n }\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n let hash = 0;\n switch (this.#inner.variant) {\n case \"Any\":\n hash = 1;\n break;\n case \"Value\": {\n const val = (this.#inner as { value: string }).value;\n for (let i = 0; i < val.length; i++) {\n hash = hash * 31 + val.charCodeAt(i);\n }\n break;\n }\n case \"Regex\":\n hash = 3 * 31 + (this.#inner as { pattern: RegExp }).pattern.source.length;\n break;\n }\n return hash;\n }\n}\n","/**\n * @bcts/envelope-pattern - Byte string pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust byte_string_pattern.rs\n *\n * @module envelope-pattern/pattern/leaf/byte-string-pattern\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport {\n type ByteStringPattern as DCBORByteStringPattern,\n byteStringPatternAny,\n byteStringPatternValue,\n byteStringPatternBinaryRegex,\n byteStringPatternPaths as dcborByteStringPatternPaths,\n byteStringPatternDisplay,\n} from \"@bcts/dcbor-pattern\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport { compileAsAtomic } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory\nlet createLeafByteStringPattern: ((pattern: ByteStringPattern) => Pattern) | undefined;\n\nexport function registerByteStringPatternFactory(\n factory: (pattern: ByteStringPattern) => Pattern,\n): void {\n createLeafByteStringPattern = factory;\n}\n\n/**\n * Pattern for matching byte string values.\n *\n * This is a wrapper around dcbor_pattern::ByteStringPattern that provides\n * envelope-specific integration.\n *\n * Corresponds to the Rust `ByteStringPattern` struct in byte_string_pattern.rs\n */\nexport class ByteStringPattern implements Matcher {\n readonly #inner: DCBORByteStringPattern;\n\n private constructor(inner: DCBORByteStringPattern) {\n this.#inner = inner;\n }\n\n /**\n * Creates a new ByteStringPattern that matches any byte string.\n */\n static any(): ByteStringPattern {\n return new ByteStringPattern(byteStringPatternAny());\n }\n\n /**\n * Creates a new ByteStringPattern that matches the specific byte string.\n */\n static value(value: Uint8Array): ByteStringPattern {\n return new ByteStringPattern(byteStringPatternValue(value));\n }\n\n /**\n * Creates a new ByteStringPattern that matches byte strings matching the binary regex.\n */\n static regex(pattern: RegExp): ByteStringPattern {\n return new ByteStringPattern(byteStringPatternBinaryRegex(pattern));\n }\n\n /**\n * Creates a new ByteStringPattern from a dcbor-pattern ByteStringPattern.\n */\n static fromDcborPattern(dcborPattern: DCBORByteStringPattern): ByteStringPattern {\n return new ByteStringPattern(dcborPattern);\n }\n\n /**\n * Gets the underlying dcbor-pattern ByteStringPattern.\n */\n get inner(): DCBORByteStringPattern {\n return this.#inner;\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n // For leaf envelopes, extract the CBOR and delegate to dcbor-pattern\n const cbor = haystack.asLeaf();\n if (cbor !== undefined) {\n // Delegate to dcbor-pattern for CBOR matching\n const dcborPaths = dcborByteStringPatternPaths(this.#inner, cbor);\n\n // For simple leaf patterns, if dcbor-pattern found matches, return the envelope\n if (dcborPaths.length > 0) {\n const envelopePaths: Path[] = [[haystack]];\n return [envelopePaths, new Map<string, Path[]>()];\n }\n }\n\n return [[], new Map<string, Path[]>()];\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], captures: string[]): void {\n if (createLeafByteStringPattern === undefined) {\n throw new Error(\"ByteStringPattern factory not registered\");\n }\n compileAsAtomic(createLeafByteStringPattern(this), code, literals, captures);\n }\n\n isComplex(): boolean {\n return false;\n }\n\n toString(): string {\n return byteStringPatternDisplay(this.#inner);\n }\n\n /**\n * Equality comparison.\n */\n equals(other: ByteStringPattern): boolean {\n if (this.#inner.variant !== other.#inner.variant) {\n return false;\n }\n switch (this.#inner.variant) {\n case \"Any\":\n return true;\n case \"Value\": {\n const a = (this.#inner as { value: Uint8Array }).value;\n const b = (other.#inner as { value: Uint8Array }).value;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n }\n case \"BinaryRegex\":\n return (\n (this.#inner as { pattern: RegExp }).pattern.source ===\n (other.#inner as { pattern: RegExp }).pattern.source\n );\n }\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n let hash = 0;\n switch (this.#inner.variant) {\n case \"Any\":\n hash = 1;\n break;\n case \"Value\": {\n const val = (this.#inner as { value: Uint8Array }).value;\n for (const byte of val) {\n hash = hash * 31 + byte;\n }\n break;\n }\n case \"BinaryRegex\":\n hash = 3 * 31 + (this.#inner as { pattern: RegExp }).pattern.source.length;\n break;\n }\n return hash;\n }\n}\n","/**\n * @bcts/envelope-pattern - Date pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust date_pattern.rs\n *\n * @module envelope-pattern/pattern/leaf/date-pattern\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport type { CborDate } from \"@bcts/dcbor\";\nimport {\n type DatePattern as DCBORDatePattern,\n datePatternAny,\n datePatternValue,\n datePatternRange,\n datePatternEarliest,\n datePatternLatest,\n datePatternStringValue,\n datePatternRegex,\n datePatternPaths as dcborDatePatternPaths,\n datePatternDisplay,\n} from \"@bcts/dcbor-pattern\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport { compileAsAtomic } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory\nlet createLeafDatePattern: ((pattern: DatePattern) => Pattern) | undefined;\n\nexport function registerDatePatternFactory(factory: (pattern: DatePattern) => Pattern): void {\n createLeafDatePattern = factory;\n}\n\n/**\n * Pattern for matching date values.\n *\n * This is a wrapper around dcbor_pattern::DatePattern that provides\n * envelope-specific integration.\n *\n * Corresponds to the Rust `DatePattern` struct in date_pattern.rs\n */\nexport class DatePattern implements Matcher {\n readonly #inner: DCBORDatePattern;\n\n private constructor(inner: DCBORDatePattern) {\n this.#inner = inner;\n }\n\n /**\n * Creates a new DatePattern that matches any date.\n */\n static any(): DatePattern {\n return new DatePattern(datePatternAny());\n }\n\n /**\n * Creates a new DatePattern that matches the specific date.\n */\n static value(date: CborDate): DatePattern {\n return new DatePattern(datePatternValue(date));\n }\n\n /**\n * Creates a new DatePattern that matches dates within a range (inclusive).\n */\n static range(start: CborDate, end: CborDate): DatePattern {\n return new DatePattern(datePatternRange(start, end));\n }\n\n /**\n * Creates a new DatePattern that matches dates on or after the specified date.\n */\n static earliest(date: CborDate): DatePattern {\n return new DatePattern(datePatternEarliest(date));\n }\n\n /**\n * Creates a new DatePattern that matches dates on or before the specified date.\n */\n static latest(date: CborDate): DatePattern {\n return new DatePattern(datePatternLatest(date));\n }\n\n /**\n * Creates a new DatePattern that matches dates by their ISO-8601 string representation.\n */\n static string(isoString: string): DatePattern {\n return new DatePattern(datePatternStringValue(isoString));\n }\n\n /**\n * Creates a new DatePattern that matches dates whose ISO-8601 string representation\n * matches the given regular expression.\n */\n static regex(pattern: RegExp): DatePattern {\n return new DatePattern(datePatternRegex(pattern));\n }\n\n /**\n * Creates a new DatePattern from a dcbor-pattern DatePattern.\n */\n static fromDcborPattern(dcborPattern: DCBORDatePattern): DatePattern {\n return new DatePattern(dcborPattern);\n }\n\n /**\n * Gets the underlying dcbor-pattern DatePattern.\n */\n get inner(): DCBORDatePattern {\n return this.#inner;\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n // For leaf envelopes, extract the CBOR and delegate to dcbor-pattern\n const cbor = haystack.asLeaf();\n if (cbor !== undefined) {\n // Delegate to dcbor-pattern for CBOR matching\n const dcborPaths = dcborDatePatternPaths(this.#inner, cbor);\n\n // For simple leaf patterns, if dcbor-pattern found matches, return the envelope\n if (dcborPaths.length > 0) {\n const envelopePaths: Path[] = [[haystack]];\n return [envelopePaths, new Map<string, Path[]>()];\n }\n }\n\n return [[], new Map<string, Path[]>()];\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], captures: string[]): void {\n if (createLeafDatePattern === undefined) {\n throw new Error(\"DatePattern factory not registered\");\n }\n compileAsAtomic(createLeafDatePattern(this), code, literals, captures);\n }\n\n isComplex(): boolean {\n return false;\n }\n\n toString(): string {\n return datePatternDisplay(this.#inner);\n }\n\n /**\n * Equality comparison.\n */\n equals(other: DatePattern): boolean {\n if (this.#inner.variant !== other.#inner.variant) {\n return false;\n }\n // Simplified equality - compare variant names\n return JSON.stringify(this.#inner) === JSON.stringify(other.#inner);\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n // Simple hash based on variant\n let hash = 0;\n const str = this.#inner.variant;\n for (let i = 0; i < str.length; i++) {\n hash = hash * 31 + str.charCodeAt(i);\n }\n return hash;\n }\n}\n","/**\n * @bcts/envelope-pattern - Array pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust array_pattern.rs\n *\n * @module envelope-pattern/pattern/leaf/array-pattern\n */\n\nimport { Envelope } from \"@bcts/envelope\";\nimport { asCborArray, type Cbor } from \"@bcts/dcbor\";\nimport {\n type Pattern as DCBORPattern,\n Interval,\n patternPathsWithCaptures as dcborPatternPathsWithCaptures,\n patternDisplay as dcborPatternDisplay,\n} from \"@bcts/dcbor-pattern\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport { compileAsAtomic } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory\nlet createLeafArrayPattern: ((pattern: ArrayPattern) => Pattern) | undefined;\n\nexport function registerArrayPatternFactory(factory: (pattern: ArrayPattern) => Pattern): void {\n createLeafArrayPattern = factory;\n}\n\n/**\n * Pattern for matching array values.\n *\n * Corresponds to the Rust `ArrayPattern` enum in array_pattern.rs\n */\nexport type ArrayPatternType =\n | { readonly type: \"Any\" }\n | { readonly type: \"Interval\"; readonly interval: Interval }\n | { readonly type: \"DCBORPattern\"; readonly pattern: DCBORPattern }\n | { readonly type: \"WithPatterns\"; readonly patterns: Pattern[] };\n\n/**\n * Pattern for matching array values in envelope leaf nodes.\n *\n * Corresponds to the Rust `ArrayPattern` struct in array_pattern.rs\n */\nexport class ArrayPattern implements Matcher {\n readonly #pattern: ArrayPatternType;\n\n private constructor(pattern: ArrayPatternType) {\n this.#pattern = pattern;\n }\n\n /**\n * Creates a new ArrayPattern that matches any array.\n */\n static any(): ArrayPattern {\n return new ArrayPattern({ type: \"Any\" });\n }\n\n /**\n * Creates a new ArrayPattern that matches arrays with a specific length.\n */\n static count(count: number): ArrayPattern {\n return new ArrayPattern({\n type: \"Interval\",\n interval: Interval.exactly(count),\n });\n }\n\n /**\n * Creates a new ArrayPattern that matches arrays within a length range.\n */\n static interval(min: number, max?: number): ArrayPattern {\n const interval = max !== undefined ? Interval.from(min, max) : Interval.atLeast(min);\n return new ArrayPattern({ type: \"Interval\", interval });\n }\n\n /**\n * Creates a new ArrayPattern from a dcbor-pattern.\n */\n static fromDcborPattern(dcborPattern: DCBORPattern): ArrayPattern {\n return new ArrayPattern({ type: \"DCBORPattern\", pattern: dcborPattern });\n }\n\n /**\n * Creates a new ArrayPattern with envelope patterns for element matching.\n */\n static withPatterns(patterns: Pattern[]): ArrayPattern {\n return new ArrayPattern({ type: \"WithPatterns\", patterns });\n }\n\n /**\n * Gets the pattern type.\n */\n get pattern(): ArrayPatternType {\n return this.#pattern;\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n // Try to extract CBOR from the envelope\n const cbor = haystack.asLeaf();\n if (cbor === undefined) {\n return [[], new Map<string, Path[]>()];\n }\n\n // Check if it's an array\n const array = asCborArray(cbor);\n if (array === undefined) {\n return [[], new Map<string, Path[]>()];\n }\n\n switch (this.#pattern.type) {\n case \"Any\":\n return [[[haystack]], new Map<string, Path[]>()];\n\n case \"Interval\": {\n const length = array.length;\n if (this.#pattern.interval.contains(length)) {\n return [[[haystack]], new Map<string, Path[]>()];\n }\n return [[], new Map<string, Path[]>()];\n }\n\n case \"DCBORPattern\": {\n // Delegate to dcbor-pattern for matching\n const { paths: dcborPaths, captures: dcborCaptures } = dcborPatternPathsWithCaptures(\n this.#pattern.pattern,\n cbor,\n );\n\n if (dcborPaths.length > 0) {\n // Convert dcbor paths to envelope paths\n const envelopePaths: Path[] = dcborPaths.map((dcborPath: Cbor[]) => {\n const envPath: Path = [haystack];\n // Skip the first element (root) and convert rest to envelopes\n for (let i = 1; i < dcborPath.length; i++) {\n const elem = dcborPath[i];\n if (elem !== undefined) {\n envPath.push(Envelope.newLeaf(elem));\n }\n }\n return envPath;\n });\n\n // Convert dcbor captures to envelope captures\n const envelopeCaptures = new Map<string, Path[]>();\n for (const [name, capturePaths] of dcborCaptures) {\n const envCapturePaths: Path[] = capturePaths.map((dcborPath: Cbor[]) => {\n const envPath: Path = [haystack];\n for (let i = 1; i < dcborPath.length; i++) {\n const elem = dcborPath[i];\n if (elem !== undefined) {\n envPath.push(Envelope.newLeaf(elem));\n }\n }\n return envPath;\n });\n envelopeCaptures.set(name, envCapturePaths);\n }\n\n return [envelopePaths, envelopeCaptures];\n }\n\n return [[], new Map<string, Path[]>()];\n }\n\n case \"WithPatterns\":\n // For envelope patterns, match if array length equals patterns count\n // Full element-by-element matching would require additional implementation\n if (array.length === this.#pattern.patterns.length) {\n return [[[haystack]], new Map<string, Path[]>()];\n }\n return [[], new Map<string, Path[]>()];\n }\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], captures: string[]): void {\n if (createLeafArrayPattern === undefined) {\n throw new Error(\"ArrayPattern factory not registered\");\n }\n compileAsAtomic(createLeafArrayPattern(this), code, literals, captures);\n }\n\n isComplex(): boolean {\n return false;\n }\n\n toString(): string {\n switch (this.#pattern.type) {\n case \"Any\":\n return \"[*]\";\n case \"Interval\":\n return `[{${this.#pattern.interval.toString()}}]`;\n case \"DCBORPattern\":\n return dcborPatternDisplay(this.#pattern.pattern);\n case \"WithPatterns\":\n return `[${this.#pattern.patterns.map(String).join(\", \")}]`;\n }\n }\n\n /**\n * Equality comparison.\n */\n equals(other: ArrayPattern): boolean {\n if (this.#pattern.type !== other.#pattern.type) {\n return false;\n }\n switch (this.#pattern.type) {\n case \"Any\":\n return true;\n case \"Interval\":\n return this.#pattern.interval.equals(\n (other.#pattern as { type: \"Interval\"; interval: Interval }).interval,\n );\n case \"DCBORPattern\":\n // Compare using display representation\n return (\n dcborPatternDisplay(this.#pattern.pattern) ===\n dcborPatternDisplay(\n (other.#pattern as { type: \"DCBORPattern\"; pattern: DCBORPattern }).pattern,\n )\n );\n case \"WithPatterns\": {\n const otherPatterns = (other.#pattern as { type: \"WithPatterns\"; patterns: Pattern[] })\n .patterns;\n if (this.#pattern.patterns.length !== otherPatterns.length) return false;\n for (let i = 0; i < this.#pattern.patterns.length; i++) {\n if (this.#pattern.patterns[i] !== otherPatterns[i]) return false;\n }\n return true;\n }\n }\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n switch (this.#pattern.type) {\n case \"Any\":\n return 0;\n case \"Interval\":\n // Simple hash based on min/max\n return this.#pattern.interval.min() * 31 + (this.#pattern.interval.max() ?? 0);\n case \"DCBORPattern\":\n // Simple hash based on display string\n return simpleStringHash(dcborPatternDisplay(this.#pattern.pattern));\n case \"WithPatterns\":\n return this.#pattern.patterns.length;\n }\n }\n}\n\n/**\n * Simple string hash function for hashCode implementations.\n */\nfunction simpleStringHash(str: string): number {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n return hash;\n}\n","/**\n * @bcts/envelope-pattern - Map pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust map_pattern.rs\n *\n * @module envelope-pattern/pattern/leaf/map-pattern\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport { asCborMap } from \"@bcts/dcbor\";\nimport { Interval } from \"@bcts/dcbor-pattern\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport { compileAsAtomic } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory\nlet createLeafMapPattern: ((pattern: MapPattern) => Pattern) | undefined;\n\nexport function registerMapPatternFactory(factory: (pattern: MapPattern) => Pattern): void {\n createLeafMapPattern = factory;\n}\n\n/**\n * Pattern for matching map values.\n *\n * Corresponds to the Rust `MapPattern` enum in map_pattern.rs\n */\nexport type MapPatternType =\n | { readonly type: \"Any\" }\n | { readonly type: \"Interval\"; readonly interval: Interval };\n\n/**\n * Pattern for matching map values in envelope leaf nodes.\n *\n * Corresponds to the Rust `MapPattern` struct in map_pattern.rs\n */\nexport class MapPattern implements Matcher {\n readonly #pattern: MapPatternType;\n\n private constructor(pattern: MapPatternType) {\n this.#pattern = pattern;\n }\n\n /**\n * Creates a new MapPattern that matches any map.\n */\n static any(): MapPattern {\n return new MapPattern({ type: \"Any\" });\n }\n\n /**\n * Creates a new MapPattern that matches maps within a size range.\n */\n static interval(min: number, max?: number): MapPattern {\n const interval = max !== undefined ? Interval.from(min, max) : Interval.atLeast(min);\n return new MapPattern({ type: \"Interval\", interval });\n }\n\n /**\n * Gets the pattern type.\n */\n get pattern(): MapPatternType {\n return this.#pattern;\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n // Try to extract CBOR from the envelope\n const cbor = haystack.asLeaf();\n if (cbor === undefined) {\n return [[], new Map<string, Path[]>()];\n }\n\n // Check if it's a map\n const map = asCborMap(cbor);\n if (map === undefined) {\n return [[], new Map<string, Path[]>()];\n }\n\n switch (this.#pattern.type) {\n case \"Any\":\n return [[[haystack]], new Map<string, Path[]>()];\n\n case \"Interval\": {\n const size = map.size;\n if (this.#pattern.interval.contains(size)) {\n return [[[haystack]], new Map<string, Path[]>()];\n }\n return [[], new Map<string, Path[]>()];\n }\n }\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], captures: string[]): void {\n if (createLeafMapPattern === undefined) {\n throw new Error(\"MapPattern factory not registered\");\n }\n compileAsAtomic(createLeafMapPattern(this), code, literals, captures);\n }\n\n isComplex(): boolean {\n return false;\n }\n\n toString(): string {\n switch (this.#pattern.type) {\n case \"Any\":\n return \"{*}\";\n case \"Interval\":\n return `{{${this.#pattern.interval.toString()}}}`;\n }\n }\n\n /**\n * Equality comparison.\n */\n equals(other: MapPattern): boolean {\n if (this.#pattern.type !== other.#pattern.type) {\n return false;\n }\n switch (this.#pattern.type) {\n case \"Any\":\n return true;\n case \"Interval\":\n return this.#pattern.interval.equals(\n (other.#pattern as { type: \"Interval\"; interval: Interval }).interval,\n );\n }\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n switch (this.#pattern.type) {\n case \"Any\":\n return 0;\n case \"Interval\":\n // Simple hash based on interval min/max\n return this.#pattern.interval.min() * 31 + (this.#pattern.interval.max() ?? 0);\n }\n }\n}\n","/**\n * @bcts/envelope-pattern - Known value pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust known_value_pattern.rs\n *\n * @module envelope-pattern/pattern/leaf/known-value-pattern\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport { type KnownValue } from \"@bcts/known-values\";\nimport {\n type KnownValuePattern as DCBORKnownValuePattern,\n knownValuePatternAny,\n knownValuePatternValue,\n knownValuePatternNamed,\n knownValuePatternRegex,\n knownValuePatternMatches,\n knownValuePatternDisplay,\n} from \"@bcts/dcbor-pattern\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport { compileAsAtomic } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory\nlet createLeafKnownValuePattern: ((pattern: KnownValuePattern) => Pattern) | undefined;\n\nexport function registerKnownValuePatternFactory(\n factory: (pattern: KnownValuePattern) => Pattern,\n): void {\n createLeafKnownValuePattern = factory;\n}\n\n/**\n * Pattern for matching known values.\n *\n * This is a wrapper around dcbor_pattern::KnownValuePattern that provides\n * envelope-specific integration.\n *\n * Corresponds to the Rust `KnownValuePattern` struct in known_value_pattern.rs\n */\nexport class KnownValuePattern implements Matcher {\n readonly #inner: DCBORKnownValuePattern;\n\n private constructor(inner: DCBORKnownValuePattern) {\n this.#inner = inner;\n }\n\n /**\n * Creates a new KnownValuePattern that matches any known value.\n */\n static any(): KnownValuePattern {\n return new KnownValuePattern(knownValuePatternAny());\n }\n\n /**\n * Creates a new KnownValuePattern that matches the specific known value.\n */\n static value(value: KnownValue): KnownValuePattern {\n return new KnownValuePattern(knownValuePatternValue(value));\n }\n\n /**\n * Creates a new KnownValuePattern that matches known values by name.\n */\n static named(name: string): KnownValuePattern {\n return new KnownValuePattern(knownValuePatternNamed(name));\n }\n\n /**\n * Creates a new KnownValuePattern that matches known values by regex on their name.\n */\n static regex(regex: RegExp): KnownValuePattern {\n return new KnownValuePattern(knownValuePatternRegex(regex));\n }\n\n /**\n * Creates a new KnownValuePattern from a dcbor-pattern KnownValuePattern.\n */\n static fromDcborPattern(dcborPattern: DCBORKnownValuePattern): KnownValuePattern {\n return new KnownValuePattern(dcborPattern);\n }\n\n /**\n * Gets the underlying dcbor-pattern KnownValuePattern.\n */\n get inner(): DCBORKnownValuePattern {\n return this.#inner;\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n // Check if the envelope is a known value via case()\n const envCase = haystack.case();\n\n if (envCase.type === \"knownValue\") {\n // Get the KnownValue and create CBOR for pattern matching\n const knownValueCbor = envCase.value.taggedCbor();\n if (knownValuePatternMatches(this.#inner, knownValueCbor)) {\n return [[[haystack]], new Map<string, Path[]>()];\n }\n }\n\n // Also try matching as a leaf (for tagged CBOR containing known values)\n const leafCbor = haystack.asLeaf();\n if (leafCbor !== undefined) {\n if (knownValuePatternMatches(this.#inner, leafCbor)) {\n return [[[haystack]], new Map<string, Path[]>()];\n }\n }\n\n return [[], new Map<string, Path[]>()];\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], captures: string[]): void {\n if (createLeafKnownValuePattern === undefined) {\n throw new Error(\"KnownValuePattern factory not registered\");\n }\n compileAsAtomic(createLeafKnownValuePattern(this), code, literals, captures);\n }\n\n isComplex(): boolean {\n return false;\n }\n\n toString(): string {\n return knownValuePatternDisplay(this.#inner);\n }\n\n /**\n * Equality comparison.\n */\n equals(other: KnownValuePattern): boolean {\n // Compare by variant type and values\n if (this.#inner.variant !== other.#inner.variant) {\n return false;\n }\n switch (this.#inner.variant) {\n case \"Any\":\n return true;\n case \"Value\":\n return (\n this.#inner.value.valueBigInt() ===\n (other.#inner as { variant: \"Value\"; value: KnownValue }).value.valueBigInt()\n );\n case \"Named\":\n return this.#inner.name === (other.#inner as { variant: \"Named\"; name: string }).name;\n case \"Regex\":\n return (\n this.#inner.pattern.source ===\n (other.#inner as { variant: \"Regex\"; pattern: RegExp }).pattern.source\n );\n }\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n switch (this.#inner.variant) {\n case \"Any\":\n return 0;\n case \"Value\":\n return Number(this.#inner.value.valueBigInt() & BigInt(0xffffffff));\n case \"Named\":\n return simpleStringHash(this.#inner.name);\n case \"Regex\":\n return simpleStringHash(this.#inner.pattern.source);\n }\n }\n}\n\n/**\n * Simple string hash function for hashCode implementations.\n */\nfunction simpleStringHash(str: string): number {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n return hash;\n}\n","/**\n * @bcts/envelope-pattern - Tagged pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust tagged_pattern.rs\n *\n * @module envelope-pattern/pattern/leaf/tagged-pattern\n */\n\nimport { Envelope } from \"@bcts/envelope\";\nimport type { Tag, Cbor } from \"@bcts/dcbor\";\nimport {\n type TaggedPattern as DCBORTaggedPattern,\n type Pattern as DCBORPattern,\n taggedPatternAny,\n taggedPatternWithTag,\n taggedPatternWithName,\n taggedPatternWithRegex,\n taggedPatternPathsWithCaptures,\n taggedPatternDisplay,\n patternDisplay,\n} from \"@bcts/dcbor-pattern\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport { compileAsAtomic } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory\nlet createLeafTaggedPattern: ((pattern: TaggedPattern) => Pattern) | undefined;\n\nexport function registerTaggedPatternFactory(factory: (pattern: TaggedPattern) => Pattern): void {\n createLeafTaggedPattern = factory;\n}\n\n/**\n * Pattern for matching tagged CBOR values.\n *\n * This is a wrapper around dcbor_pattern::TaggedPattern that provides\n * envelope-specific integration.\n *\n * Corresponds to the Rust `TaggedPattern` struct in tagged_pattern.rs\n */\nexport class TaggedPattern implements Matcher {\n readonly #inner: DCBORTaggedPattern;\n\n private constructor(inner: DCBORTaggedPattern) {\n this.#inner = inner;\n }\n\n /**\n * Creates a new TaggedPattern that matches any tagged value.\n */\n static any(): TaggedPattern {\n return new TaggedPattern(taggedPatternAny());\n }\n\n /**\n * Creates a new TaggedPattern with a specific tag and content pattern.\n */\n static withTag(tag: Tag, pattern: DCBORPattern): TaggedPattern {\n return new TaggedPattern(taggedPatternWithTag(tag, pattern));\n }\n\n /**\n * Creates a new TaggedPattern with a specific tag name and content pattern.\n */\n static withName(name: string, pattern: DCBORPattern): TaggedPattern {\n return new TaggedPattern(taggedPatternWithName(name, pattern));\n }\n\n /**\n * Creates a new TaggedPattern with a tag name matching regex and content pattern.\n */\n static withRegex(regex: RegExp, pattern: DCBORPattern): TaggedPattern {\n return new TaggedPattern(taggedPatternWithRegex(regex, pattern));\n }\n\n /**\n * Creates a new TaggedPattern from a dcbor-pattern TaggedPattern.\n */\n static fromDcborPattern(dcborPattern: DCBORTaggedPattern): TaggedPattern {\n return new TaggedPattern(dcborPattern);\n }\n\n /**\n * Gets the underlying dcbor-pattern TaggedPattern.\n */\n get inner(): DCBORTaggedPattern {\n return this.#inner;\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n // Try to extract CBOR from the envelope\n const subject = haystack.subject();\n const cbor = subject.asLeaf();\n\n if (cbor !== undefined) {\n // Delegate to dcbor-pattern for CBOR matching\n const [dcborPaths, dcborCaptures] = taggedPatternPathsWithCaptures(this.#inner, cbor);\n\n if (dcborPaths.length > 0) {\n // Convert dcbor paths to envelope paths\n const envelopePaths: Path[] = dcborPaths.map((dcborPath: Cbor[]) => {\n const envPath: Path = [haystack];\n // Skip the first element (root) and convert rest to envelopes\n for (let i = 1; i < dcborPath.length; i++) {\n const elem = dcborPath[i];\n if (elem !== undefined) {\n envPath.push(Envelope.newLeaf(elem));\n }\n }\n return envPath;\n });\n\n // Convert dcbor captures to envelope captures\n const envelopeCaptures = new Map<string, Path[]>();\n for (const [name, paths] of dcborCaptures) {\n const envCapturePaths: Path[] = paths.map((dcborPath: Cbor[]) => {\n const envPath: Path = [haystack];\n for (let i = 1; i < dcborPath.length; i++) {\n const elem = dcborPath[i];\n if (elem !== undefined) {\n envPath.push(Envelope.newLeaf(elem));\n }\n }\n return envPath;\n });\n envelopeCaptures.set(name, envCapturePaths);\n }\n\n return [envelopePaths, envelopeCaptures];\n }\n }\n\n return [[], new Map<string, Path[]>()];\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], captures: string[]): void {\n if (createLeafTaggedPattern === undefined) {\n throw new Error(\"TaggedPattern factory not registered\");\n }\n compileAsAtomic(createLeafTaggedPattern(this), code, literals, captures);\n }\n\n isComplex(): boolean {\n return false;\n }\n\n toString(): string {\n return taggedPatternDisplay(this.#inner, patternDisplay);\n }\n\n /**\n * Equality comparison.\n */\n equals(other: TaggedPattern): boolean {\n // Compare by variant type and values\n if (this.#inner.variant !== other.#inner.variant) {\n return false;\n }\n switch (this.#inner.variant) {\n case \"Any\":\n return true;\n case \"Tag\": {\n const otherTag = other.#inner as { variant: \"Tag\"; tag: Tag; pattern: DCBORPattern };\n return (\n this.#inner.tag.value === otherTag.tag.value &&\n patternDisplay(this.#inner.pattern) === patternDisplay(otherTag.pattern)\n );\n }\n case \"Name\": {\n const otherName = other.#inner as { variant: \"Name\"; name: string; pattern: DCBORPattern };\n return (\n this.#inner.name === otherName.name &&\n patternDisplay(this.#inner.pattern) === patternDisplay(otherName.pattern)\n );\n }\n case \"Regex\": {\n const otherRegex = other.#inner as {\n variant: \"Regex\";\n regex: RegExp;\n pattern: DCBORPattern;\n };\n return (\n this.#inner.regex.source === otherRegex.regex.source &&\n patternDisplay(this.#inner.pattern) === patternDisplay(otherRegex.pattern)\n );\n }\n }\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n switch (this.#inner.variant) {\n case \"Any\":\n return 0;\n case \"Tag\":\n return Number(BigInt(this.#inner.tag.value) & BigInt(0xffffffff));\n case \"Name\":\n return simpleStringHash(this.#inner.name);\n case \"Regex\":\n return simpleStringHash(this.#inner.regex.source);\n }\n }\n}\n\n/**\n * Simple string hash function for hashCode implementations.\n */\nfunction simpleStringHash(str: string): number {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n return hash;\n}\n","/**\n * @bcts/envelope-pattern - CBOR pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust cbor_pattern.rs\n *\n * @module envelope-pattern/pattern/leaf/cbor-pattern\n */\n\nimport { Envelope } from \"@bcts/envelope\";\nimport type { Cbor } from \"@bcts/dcbor\";\nimport { cbor as toCbor, type CborInput } from \"@bcts/dcbor\";\nimport {\n type Pattern as DCBORPattern,\n patternPathsWithCaptures as dcborPatternPathsWithCaptures,\n patternDisplay as dcborPatternDisplay,\n} from \"@bcts/dcbor-pattern\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport { compileAsAtomic } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory\nlet createLeafCBORPattern: ((pattern: CBORPattern) => Pattern) | undefined;\n\nexport function registerCBORPatternFactory(factory: (pattern: CBORPattern) => Pattern): void {\n createLeafCBORPattern = factory;\n}\n\n/**\n * Pattern type for CBOR pattern matching.\n *\n * Corresponds to the Rust `CBORPattern` enum in cbor_pattern.rs\n */\nexport type CBORPatternType =\n | { readonly type: \"Any\" }\n | { readonly type: \"Value\"; readonly cbor: Cbor }\n | { readonly type: \"Pattern\"; readonly pattern: DCBORPattern };\n\n/**\n * Pattern for matching CBOR values with support for exact values and advanced pattern matching.\n *\n * Corresponds to the Rust `CBORPattern` enum in cbor_pattern.rs\n */\nexport class CBORPattern implements Matcher {\n readonly #pattern: CBORPatternType;\n\n private constructor(pattern: CBORPatternType) {\n this.#pattern = pattern;\n }\n\n /**\n * Creates a new CBORPattern that matches any CBOR value.\n */\n static any(): CBORPattern {\n return new CBORPattern({ type: \"Any\" });\n }\n\n /**\n * Creates a new CBORPattern that matches a specific CBOR value.\n */\n static value(value: CborInput): CBORPattern {\n return new CBORPattern({ type: \"Value\", cbor: toCbor(value) });\n }\n\n /**\n * Creates a new CBORPattern that matches CBOR values using dcbor-pattern expressions.\n */\n static pattern(dcborPattern: DCBORPattern): CBORPattern {\n return new CBORPattern({ type: \"Pattern\", pattern: dcborPattern });\n }\n\n /**\n * Creates a new CBORPattern from a dcbor-pattern Pattern.\n */\n static fromDcborPattern(dcborPattern: DCBORPattern): CBORPattern {\n return new CBORPattern({ type: \"Pattern\", pattern: dcborPattern });\n }\n\n /**\n * Gets the pattern type.\n */\n get pattern(): CBORPatternType {\n return this.#pattern;\n }\n\n /**\n * Convert dcbor captures to envelope captures.\n */\n #convertDcborCapturesToEnvelopeCaptures(\n dcborCaptures: Map<string, Cbor[][]>,\n baseEnvelope: Envelope,\n baseCbor: Cbor,\n ): Map<string, Path[]> {\n const envelopeCaptures = new Map<string, Path[]>();\n\n for (const [captureName, dcborCapturePaths] of dcborCaptures) {\n const envelopeCapturePaths: Path[] = dcborCapturePaths.map((dcborPath) =>\n this.#convertDcborPathToEnvelopePath(dcborPath, baseEnvelope, baseCbor),\n );\n envelopeCaptures.set(captureName, envelopeCapturePaths);\n }\n\n return envelopeCaptures;\n }\n\n /**\n * Convert a single dcbor path to an envelope path.\n */\n #convertDcborPathToEnvelopePath(\n dcborPath: Cbor[],\n baseEnvelope: Envelope,\n baseCbor: Cbor,\n ): Envelope[] {\n const envelopePath: Envelope[] = [baseEnvelope];\n\n // Skip first element if it matches the base envelope's CBOR content (compare by diagnostic)\n const skipFirst =\n dcborPath.length > 0 && dcborPath[0]?.toDiagnostic() === baseCbor.toDiagnostic();\n\n const elementsToAdd = skipFirst ? dcborPath.slice(1) : dcborPath;\n\n for (const cborElement of elementsToAdd) {\n // Use newLeaf to create envelope from CBOR value\n envelopePath.push(Envelope.newLeaf(cborElement));\n }\n\n return envelopePath;\n }\n\n /**\n * Collect capture names from a dcbor pattern.\n */\n #collectDcborCaptureNames(dcborPattern: DCBORPattern, names: string[]): void {\n // Parse the pattern string to extract capture names\n const patternStr = dcborPatternDisplay(dcborPattern);\n\n // Simple parsing to find @name( patterns\n let i = 0;\n while (i < patternStr.length) {\n if (patternStr[i] === \"@\") {\n i++;\n let name = \"\";\n // Collect characters until we hit '('\n while (i < patternStr.length && patternStr[i] !== \"(\") {\n name += patternStr[i];\n i++;\n }\n if (name.length > 0 && !names.includes(name)) {\n names.push(name);\n }\n } else {\n i++;\n }\n }\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n const envCase = haystack.case();\n\n // Special case for KnownValue envelope\n if (envCase.type === \"knownValue\") {\n const knownValue = envCase.value;\n const knownValueCbor = knownValue.taggedCbor();\n\n switch (this.#pattern.type) {\n case \"Any\":\n return [[[haystack]], new Map<string, Path[]>()];\n case \"Value\": {\n // Compare using diagnostic representation\n if (knownValueCbor.toDiagnostic() === this.#pattern.cbor.toDiagnostic()) {\n return [[[haystack]], new Map<string, Path[]>()];\n }\n return [[], new Map<string, Path[]>()];\n }\n case \"Pattern\": {\n const { paths: dcborPaths, captures: dcborCaptures } = dcborPatternPathsWithCaptures(\n this.#pattern.pattern,\n knownValueCbor,\n );\n\n if (dcborPaths.length > 0) {\n const basePath: Path = [haystack];\n const envelopePaths: Path[] = dcborPaths.map((dcborPath: Cbor[]) => {\n const extendedPath = [...basePath];\n // Skip the first element as it represents the root CBOR\n for (let i = 1; i < dcborPath.length; i++) {\n const elem = dcborPath[i];\n if (elem !== undefined) {\n extendedPath.push(Envelope.newLeaf(elem));\n }\n }\n return extendedPath;\n });\n\n const envelopeCaptures = this.#convertDcborCapturesToEnvelopeCaptures(\n dcborCaptures,\n haystack,\n knownValueCbor,\n );\n return [envelopePaths, envelopeCaptures];\n }\n return [[], new Map<string, Path[]>()];\n }\n }\n }\n\n // Standard case for CBOR leaf\n const leafCbor = haystack.asLeaf();\n if (leafCbor === undefined) {\n return [[], new Map<string, Path[]>()];\n }\n\n switch (this.#pattern.type) {\n case \"Any\":\n return [[[haystack]], new Map<string, Path[]>()];\n\n case \"Value\":\n // Compare using diagnostic representation\n if (leafCbor.toDiagnostic() === this.#pattern.cbor.toDiagnostic()) {\n return [[[haystack]], new Map<string, Path[]>()];\n }\n return [[], new Map<string, Path[]>()];\n\n case \"Pattern\": {\n const { paths: dcborPaths, captures: dcborCaptures } = dcborPatternPathsWithCaptures(\n this.#pattern.pattern,\n leafCbor,\n );\n\n if (dcborPaths.length > 0) {\n const basePath: Path = [haystack];\n\n const envelopePaths: Path[] = dcborPaths.map((dcborPath: Cbor[]) => {\n const extendedPath = [...basePath];\n // Skip the first element only if it exactly matches our root CBOR\n const skipFirst =\n dcborPath.length > 0 && dcborPath[0]?.toDiagnostic() === leafCbor.toDiagnostic();\n\n const elementsToAdd = skipFirst ? dcborPath.slice(1) : dcborPath;\n\n for (const cborElement of elementsToAdd) {\n extendedPath.push(Envelope.newLeaf(cborElement));\n }\n return extendedPath;\n });\n\n const envelopeCaptures = this.#convertDcborCapturesToEnvelopeCaptures(\n dcborCaptures,\n haystack,\n leafCbor,\n );\n return [envelopePaths, envelopeCaptures];\n }\n return [[], new Map<string, Path[]>()];\n }\n }\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], captures: string[]): void {\n // Register any capture names from this CBOR pattern\n if (this.#pattern.type === \"Pattern\") {\n const captureNames: string[] = [];\n this.#collectDcborCaptureNames(this.#pattern.pattern, captureNames);\n for (const name of captureNames) {\n if (!captures.includes(name)) {\n captures.push(name);\n }\n }\n }\n\n if (createLeafCBORPattern === undefined) {\n throw new Error(\"CBORPattern factory not registered\");\n }\n compileAsAtomic(createLeafCBORPattern(this), code, literals, captures);\n }\n\n isComplex(): boolean {\n return false;\n }\n\n toString(): string {\n switch (this.#pattern.type) {\n case \"Any\":\n return \"cbor\";\n case \"Value\":\n return `cbor(${this.#pattern.cbor.toDiagnostic()})`;\n case \"Pattern\":\n return `cbor(/${dcborPatternDisplay(this.#pattern.pattern)}/)`;\n }\n }\n\n /**\n * Equality comparison.\n */\n equals(other: CBORPattern): boolean {\n if (this.#pattern.type !== other.#pattern.type) {\n return false;\n }\n switch (this.#pattern.type) {\n case \"Any\":\n return true;\n case \"Value\":\n // Compare using diagnostic representation\n return (\n this.#pattern.cbor.toDiagnostic() ===\n (other.#pattern as { type: \"Value\"; cbor: Cbor }).cbor.toDiagnostic()\n );\n case \"Pattern\":\n // Compare using display representation\n return (\n dcborPatternDisplay(this.#pattern.pattern) ===\n dcborPatternDisplay(\n (other.#pattern as { type: \"Pattern\"; pattern: DCBORPattern }).pattern,\n )\n );\n }\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n switch (this.#pattern.type) {\n case \"Any\":\n return 0;\n case \"Value\":\n // Simple hash based on diagnostic string\n return simpleStringHash(this.#pattern.cbor.toDiagnostic());\n case \"Pattern\":\n // Simple hash based on display string\n return simpleStringHash(dcborPatternDisplay(this.#pattern.pattern));\n }\n }\n}\n\n/**\n * Simple string hash function for hashCode implementations.\n */\nfunction simpleStringHash(str: string): number {\n let hash = 0;\n for (const char of str) {\n hash = (hash << 5) - hash + char.charCodeAt(0);\n hash = hash & hash; // Convert to 32-bit integer\n }\n return hash;\n}\n","/**\n * @bcts/envelope-pattern - Leaf patterns module\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust pattern/leaf/mod.rs\n *\n * @module envelope-pattern/pattern/leaf\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport type { Path } from \"../../format\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Re-export all leaf pattern types\nexport { BoolPattern, registerBoolPatternFactory } from \"./bool-pattern\";\nexport { NullPattern, registerNullPatternFactory } from \"./null-pattern\";\nexport { NumberPattern, registerNumberPatternFactory } from \"./number-pattern\";\nexport { TextPattern, registerTextPatternFactory } from \"./text-pattern\";\nexport { ByteStringPattern, registerByteStringPatternFactory } from \"./byte-string-pattern\";\nexport { DatePattern, registerDatePatternFactory } from \"./date-pattern\";\nexport { ArrayPattern, type ArrayPatternType, registerArrayPatternFactory } from \"./array-pattern\";\nexport { MapPattern, type MapPatternType, registerMapPatternFactory } from \"./map-pattern\";\nexport { KnownValuePattern, registerKnownValuePatternFactory } from \"./known-value-pattern\";\nexport { TaggedPattern, registerTaggedPatternFactory } from \"./tagged-pattern\";\nexport { CBORPattern, type CBORPatternType, registerCBORPatternFactory } from \"./cbor-pattern\";\n\n// Import concrete types for use in LeafPattern\nimport { type BoolPattern } from \"./bool-pattern\";\nimport { type NullPattern } from \"./null-pattern\";\nimport { type NumberPattern } from \"./number-pattern\";\nimport { type TextPattern } from \"./text-pattern\";\nimport { type ByteStringPattern } from \"./byte-string-pattern\";\nimport { type DatePattern } from \"./date-pattern\";\nimport { type ArrayPattern } from \"./array-pattern\";\nimport { type MapPattern } from \"./map-pattern\";\nimport { type KnownValuePattern } from \"./known-value-pattern\";\nimport { type TaggedPattern } from \"./tagged-pattern\";\nimport { type CBORPattern } from \"./cbor-pattern\";\n\n/**\n * Union type for all leaf patterns.\n *\n * Corresponds to the Rust `LeafPattern` enum in pattern/leaf/mod.rs\n */\nexport type LeafPattern =\n | { readonly type: \"Cbor\"; readonly pattern: CBORPattern }\n | { readonly type: \"Number\"; readonly pattern: NumberPattern }\n | { readonly type: \"Text\"; readonly pattern: TextPattern }\n | { readonly type: \"ByteString\"; readonly pattern: ByteStringPattern }\n | { readonly type: \"Tag\"; readonly pattern: TaggedPattern }\n | { readonly type: \"Array\"; readonly pattern: ArrayPattern }\n | { readonly type: \"Map\"; readonly pattern: MapPattern }\n | { readonly type: \"Bool\"; readonly pattern: BoolPattern }\n | { readonly type: \"Null\"; readonly pattern: NullPattern }\n | { readonly type: \"Date\"; readonly pattern: DatePattern }\n | { readonly type: \"KnownValue\"; readonly pattern: KnownValuePattern };\n\n/**\n * Creates a CBOR leaf pattern.\n */\nexport function leafCbor(pattern: CBORPattern): LeafPattern {\n return { type: \"Cbor\", pattern };\n}\n\n/**\n * Creates a Number leaf pattern.\n */\nexport function leafNumber(pattern: NumberPattern): LeafPattern {\n return { type: \"Number\", pattern };\n}\n\n/**\n * Creates a Text leaf pattern.\n */\nexport function leafText(pattern: TextPattern): LeafPattern {\n return { type: \"Text\", pattern };\n}\n\n/**\n * Creates a ByteString leaf pattern.\n */\nexport function leafByteString(pattern: ByteStringPattern): LeafPattern {\n return { type: \"ByteString\", pattern };\n}\n\n/**\n * Creates a Tag leaf pattern.\n */\nexport function leafTag(pattern: TaggedPattern): LeafPattern {\n return { type: \"Tag\", pattern };\n}\n\n/**\n * Creates an Array leaf pattern.\n */\nexport function leafArray(pattern: ArrayPattern): LeafPattern {\n return { type: \"Array\", pattern };\n}\n\n/**\n * Creates a Map leaf pattern.\n */\nexport function leafMap(pattern: MapPattern): LeafPattern {\n return { type: \"Map\", pattern };\n}\n\n/**\n * Creates a Bool leaf pattern.\n */\nexport function leafBool(pattern: BoolPattern): LeafPattern {\n return { type: \"Bool\", pattern };\n}\n\n/**\n * Creates a Null leaf pattern.\n */\nexport function leafNull(pattern: NullPattern): LeafPattern {\n return { type: \"Null\", pattern };\n}\n\n/**\n * Creates a Date leaf pattern.\n */\nexport function leafDate(pattern: DatePattern): LeafPattern {\n return { type: \"Date\", pattern };\n}\n\n/**\n * Creates a KnownValue leaf pattern.\n */\nexport function leafKnownValue(pattern: KnownValuePattern): LeafPattern {\n return { type: \"KnownValue\", pattern };\n}\n\n/**\n * Gets paths with captures for a leaf pattern.\n */\nexport function leafPatternPathsWithCaptures(\n pattern: LeafPattern,\n haystack: Envelope,\n): [Path[], Map<string, Path[]>] {\n switch (pattern.type) {\n case \"Cbor\":\n // CBOR patterns from dcbor-pattern need special handling\n return [[], new Map<string, Path[]>()];\n case \"Number\":\n return pattern.pattern.pathsWithCaptures(haystack);\n case \"Text\":\n return pattern.pattern.pathsWithCaptures(haystack);\n case \"ByteString\":\n return pattern.pattern.pathsWithCaptures(haystack);\n case \"Tag\":\n return pattern.pattern.pathsWithCaptures(haystack);\n case \"Array\":\n return pattern.pattern.pathsWithCaptures(haystack);\n case \"Map\":\n return pattern.pattern.pathsWithCaptures(haystack);\n case \"Bool\":\n return pattern.pattern.pathsWithCaptures(haystack);\n case \"Null\":\n return pattern.pattern.pathsWithCaptures(haystack);\n case \"Date\":\n return pattern.pattern.pathsWithCaptures(haystack);\n case \"KnownValue\":\n return pattern.pattern.pathsWithCaptures(haystack);\n }\n}\n\n/**\n * Gets paths for a leaf pattern.\n */\nexport function leafPatternPaths(pattern: LeafPattern, haystack: Envelope): Path[] {\n return leafPatternPathsWithCaptures(pattern, haystack)[0];\n}\n\n/**\n * Compiles a leaf pattern to bytecode.\n */\nexport function leafPatternCompile(\n pattern: LeafPattern,\n code: Instr[],\n literals: Pattern[],\n captures: string[],\n): void {\n switch (pattern.type) {\n case \"Cbor\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"Number\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"Text\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"ByteString\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"Tag\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"Array\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"Map\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"Bool\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"Null\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"Date\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"KnownValue\":\n pattern.pattern.compile(code, literals, captures);\n break;\n }\n}\n\n/**\n * Checks if a leaf pattern is complex.\n */\nexport function leafPatternIsComplex(pattern: LeafPattern): boolean {\n switch (pattern.type) {\n case \"Cbor\":\n return pattern.pattern.isComplex();\n case \"Number\":\n return pattern.pattern.isComplex();\n case \"Text\":\n return pattern.pattern.isComplex();\n case \"ByteString\":\n return pattern.pattern.isComplex();\n case \"Tag\":\n return pattern.pattern.isComplex();\n case \"Array\":\n return pattern.pattern.isComplex();\n case \"Map\":\n return pattern.pattern.isComplex();\n case \"Bool\":\n return pattern.pattern.isComplex();\n case \"Null\":\n return pattern.pattern.isComplex();\n case \"Date\":\n return pattern.pattern.isComplex();\n case \"KnownValue\":\n return pattern.pattern.isComplex();\n }\n}\n\n/**\n * Converts a leaf pattern to string.\n */\nexport function leafPatternToString(pattern: LeafPattern): string {\n switch (pattern.type) {\n case \"Cbor\":\n return pattern.pattern.toString();\n case \"Number\":\n return pattern.pattern.toString();\n case \"Text\":\n return pattern.pattern.toString();\n case \"ByteString\":\n return pattern.pattern.toString();\n case \"Tag\":\n return pattern.pattern.toString();\n case \"Array\":\n return pattern.pattern.toString();\n case \"Map\":\n return pattern.pattern.toString();\n case \"Bool\":\n return pattern.pattern.toString();\n case \"Null\":\n return pattern.pattern.toString();\n case \"Date\":\n return pattern.pattern.toString();\n case \"KnownValue\":\n return pattern.pattern.toString();\n }\n}\n","/**\n * @bcts/envelope-pattern - Leaf structure pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust leaf_structure_pattern.rs\n *\n * @module envelope-pattern/pattern/structure/leaf-structure-pattern\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport { compileAsAtomic } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory\nlet createStructureLeafPattern: ((pattern: LeafStructurePattern) => Pattern) | undefined;\n\nexport function registerLeafStructurePatternFactory(\n factory: (pattern: LeafStructurePattern) => Pattern,\n): void {\n createStructureLeafPattern = factory;\n}\n\n/**\n * Pattern for matching leaf envelopes (terminal nodes in the envelope tree).\n *\n * Corresponds to the Rust `LeafStructurePattern` struct in leaf_structure_pattern.rs\n */\nexport class LeafStructurePattern implements Matcher {\n private constructor() {\n // Empty constructor - LeafStructurePattern is a singleton-like pattern with no state\n }\n\n /**\n * Creates a new LeafStructurePattern.\n */\n static new(): LeafStructurePattern {\n return new LeafStructurePattern();\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n const envCase = haystack.case();\n const isLeafOrKnownValue = envCase.type === \"leaf\" || envCase.type === \"knownValue\";\n const paths = isLeafOrKnownValue ? [[haystack]] : [];\n return [paths, new Map<string, Path[]>()];\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], captures: string[]): void {\n if (createStructureLeafPattern === undefined) {\n throw new Error(\"LeafStructurePattern factory not registered\");\n }\n compileAsAtomic(createStructureLeafPattern(this), code, literals, captures);\n }\n\n isComplex(): boolean {\n return false;\n }\n\n toString(): string {\n return \"leaf\";\n }\n\n /**\n * Equality comparison.\n */\n equals(_other: LeafStructurePattern): boolean {\n return true; // All LeafStructurePattern instances are equal\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n return 0;\n }\n}\n","/**\n * @bcts/envelope-pattern - Subject pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust subject_pattern.rs\n *\n * @module envelope-pattern/pattern/structure/subject-pattern\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory (used for late binding)\nexport let createStructureSubjectPattern: ((pattern: SubjectPattern) => Pattern) | undefined;\n\nexport function registerSubjectPatternFactory(factory: (pattern: SubjectPattern) => Pattern): void {\n createStructureSubjectPattern = factory;\n}\n\n/**\n * Pattern type for subject pattern matching.\n *\n * Corresponds to the Rust `SubjectPattern` enum in subject_pattern.rs\n */\nexport type SubjectPatternType =\n | { readonly type: \"Any\" }\n | { readonly type: \"Pattern\"; readonly pattern: Pattern };\n\n/**\n * Pattern for matching subjects in envelopes.\n *\n * Corresponds to the Rust `SubjectPattern` enum in subject_pattern.rs\n */\nexport class SubjectPattern implements Matcher {\n readonly #pattern: SubjectPatternType;\n\n private constructor(pattern: SubjectPatternType) {\n this.#pattern = pattern;\n }\n\n /**\n * Creates a new SubjectPattern that matches any subject.\n */\n static any(): SubjectPattern {\n return new SubjectPattern({ type: \"Any\" });\n }\n\n /**\n * Creates a new SubjectPattern that matches subjects matching the given pattern.\n */\n static pattern(pattern: Pattern): SubjectPattern {\n return new SubjectPattern({ type: \"Pattern\", pattern });\n }\n\n /**\n * Gets the pattern type.\n */\n get patternType(): SubjectPatternType {\n return this.#pattern;\n }\n\n /**\n * Gets the inner pattern if this is a Pattern type, undefined otherwise.\n */\n innerPattern(): Pattern | undefined {\n return this.#pattern.type === \"Pattern\" ? this.#pattern.pattern : undefined;\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n const subject = haystack.subject();\n let paths: Path[];\n\n switch (this.#pattern.type) {\n case \"Any\":\n paths = [[subject]];\n break;\n case \"Pattern\": {\n const innerMatcher = this.#pattern.pattern as unknown as Matcher;\n if (innerMatcher.matches(subject)) {\n paths = [[subject]];\n } else {\n paths = [];\n }\n break;\n }\n }\n\n return [paths, new Map<string, Path[]>()];\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], captures: string[]): void {\n switch (this.#pattern.type) {\n case \"Any\":\n code.push({ type: \"NavigateSubject\" });\n break;\n case \"Pattern\":\n // Navigate to the subject first\n code.push({ type: \"NavigateSubject\" });\n // Save the path and run the inner pattern relative to the subject\n code.push({ type: \"ExtendTraversal\" });\n (this.#pattern.pattern as unknown as Matcher).compile(code, literals, captures);\n code.push({ type: \"CombineTraversal\" });\n break;\n }\n }\n\n isComplex(): boolean {\n return false;\n }\n\n toString(): string {\n switch (this.#pattern.type) {\n case \"Any\":\n return \"subj\";\n case \"Pattern\":\n return `subj(${(this.#pattern.pattern as unknown as { toString(): string }).toString()})`;\n }\n }\n\n /**\n * Equality comparison.\n */\n equals(other: SubjectPattern): boolean {\n if (this.#pattern.type !== other.#pattern.type) {\n return false;\n }\n if (this.#pattern.type === \"Any\") {\n return true;\n }\n // For Pattern type, compare the inner patterns\n const thisPattern = (this.#pattern as { type: \"Pattern\"; pattern: Pattern }).pattern;\n const otherPattern = (other.#pattern as { type: \"Pattern\"; pattern: Pattern }).pattern;\n return thisPattern === otherPattern; // Reference equality for now\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n return this.#pattern.type === \"Any\" ? 0 : 1;\n }\n}\n","/**\n * @bcts/envelope-pattern - Predicate pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust predicate_pattern.rs\n *\n * @module envelope-pattern/pattern/structure/predicate-pattern\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory\nlet createStructurePredicatePattern: ((pattern: PredicatePattern) => Pattern) | undefined;\n\nexport function registerPredicatePatternFactory(\n factory: (pattern: PredicatePattern) => Pattern,\n): void {\n createStructurePredicatePattern = factory;\n}\n\n/**\n * Pattern type for predicate pattern matching.\n *\n * Corresponds to the Rust `PredicatePattern` enum in predicate_pattern.rs\n */\nexport type PredicatePatternType =\n | { readonly type: \"Any\" }\n | { readonly type: \"Pattern\"; readonly pattern: Pattern };\n\n/**\n * Pattern for matching predicates in envelopes.\n *\n * Corresponds to the Rust `PredicatePattern` enum in predicate_pattern.rs\n */\nexport class PredicatePattern implements Matcher {\n readonly #pattern: PredicatePatternType;\n\n private constructor(pattern: PredicatePatternType) {\n this.#pattern = pattern;\n }\n\n /**\n * Creates a new PredicatePattern that matches any predicate.\n */\n static any(): PredicatePattern {\n return new PredicatePattern({ type: \"Any\" });\n }\n\n /**\n * Creates a new PredicatePattern that matches predicates matching the given pattern.\n */\n static pattern(pattern: Pattern): PredicatePattern {\n return new PredicatePattern({ type: \"Pattern\", pattern });\n }\n\n /**\n * Gets the pattern type.\n */\n get patternType(): PredicatePatternType {\n return this.#pattern;\n }\n\n /**\n * Gets the inner pattern if this is a Pattern type, undefined otherwise.\n */\n innerPattern(): Pattern | undefined {\n return this.#pattern.type === \"Pattern\" ? this.#pattern.pattern : undefined;\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n const predicate = haystack.asPredicate?.();\n\n if (predicate === undefined) {\n return [[], new Map<string, Path[]>()];\n }\n\n let paths: Path[];\n\n switch (this.#pattern.type) {\n case \"Any\":\n paths = [[predicate]];\n break;\n case \"Pattern\": {\n const innerMatcher = this.#pattern.pattern as unknown as Matcher;\n if (innerMatcher.matches(predicate)) {\n paths = [[predicate]];\n } else {\n paths = [];\n }\n break;\n }\n }\n\n return [paths, new Map<string, Path[]>()];\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], _captures: string[]): void {\n if (createStructurePredicatePattern === undefined) {\n throw new Error(\"PredicatePattern factory not registered\");\n }\n const idx = literals.length;\n literals.push(createStructurePredicatePattern(this));\n code.push({ type: \"MatchStructure\", literalIndex: idx });\n }\n\n isComplex(): boolean {\n return false;\n }\n\n toString(): string {\n switch (this.#pattern.type) {\n case \"Any\":\n return \"pred\";\n case \"Pattern\":\n return `pred(${(this.#pattern.pattern as unknown as { toString(): string }).toString()})`;\n }\n }\n\n /**\n * Equality comparison.\n */\n equals(other: PredicatePattern): boolean {\n if (this.#pattern.type !== other.#pattern.type) {\n return false;\n }\n if (this.#pattern.type === \"Any\") {\n return true;\n }\n const thisPattern = (this.#pattern as { type: \"Pattern\"; pattern: Pattern }).pattern;\n const otherPattern = (other.#pattern as { type: \"Pattern\"; pattern: Pattern }).pattern;\n return thisPattern === otherPattern;\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n return this.#pattern.type === \"Any\" ? 0 : 1;\n }\n}\n","/**\n * @bcts/envelope-pattern - Object pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust object_pattern.rs\n *\n * @module envelope-pattern/pattern/structure/object-pattern\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory\nlet createStructureObjectPattern: ((pattern: ObjectPattern) => Pattern) | undefined;\n\nexport function registerObjectPatternFactory(factory: (pattern: ObjectPattern) => Pattern): void {\n createStructureObjectPattern = factory;\n}\n\n/**\n * Pattern type for object pattern matching.\n *\n * Corresponds to the Rust `ObjectPattern` enum in object_pattern.rs\n */\nexport type ObjectPatternType =\n | { readonly type: \"Any\" }\n | { readonly type: \"Pattern\"; readonly pattern: Pattern };\n\n/**\n * Pattern for matching objects in envelopes.\n *\n * Corresponds to the Rust `ObjectPattern` enum in object_pattern.rs\n */\nexport class ObjectPattern implements Matcher {\n readonly #pattern: ObjectPatternType;\n\n private constructor(pattern: ObjectPatternType) {\n this.#pattern = pattern;\n }\n\n /**\n * Creates a new ObjectPattern that matches any object.\n */\n static any(): ObjectPattern {\n return new ObjectPattern({ type: \"Any\" });\n }\n\n /**\n * Creates a new ObjectPattern that matches objects matching the given pattern.\n */\n static pattern(pattern: Pattern): ObjectPattern {\n return new ObjectPattern({ type: \"Pattern\", pattern });\n }\n\n /**\n * Gets the pattern type.\n */\n get patternType(): ObjectPatternType {\n return this.#pattern;\n }\n\n /**\n * Gets the inner pattern if this is a Pattern type, undefined otherwise.\n */\n innerPattern(): Pattern | undefined {\n return this.#pattern.type === \"Pattern\" ? this.#pattern.pattern : undefined;\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n const object = haystack.asObject?.();\n\n if (object === undefined) {\n return [[], new Map<string, Path[]>()];\n }\n\n let paths: Path[];\n\n switch (this.#pattern.type) {\n case \"Any\":\n paths = [[object]];\n break;\n case \"Pattern\": {\n const innerMatcher = this.#pattern.pattern as unknown as Matcher;\n if (innerMatcher.matches(object)) {\n paths = [[object]];\n } else {\n paths = [];\n }\n break;\n }\n }\n\n return [paths, new Map<string, Path[]>()];\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], _captures: string[]): void {\n if (createStructureObjectPattern === undefined) {\n throw new Error(\"ObjectPattern factory not registered\");\n }\n const idx = literals.length;\n literals.push(createStructureObjectPattern(this));\n code.push({ type: \"MatchStructure\", literalIndex: idx });\n }\n\n isComplex(): boolean {\n return false;\n }\n\n toString(): string {\n switch (this.#pattern.type) {\n case \"Any\":\n return \"obj\";\n case \"Pattern\":\n return `obj(${(this.#pattern.pattern as unknown as { toString(): string }).toString()})`;\n }\n }\n\n /**\n * Equality comparison.\n */\n equals(other: ObjectPattern): boolean {\n if (this.#pattern.type !== other.#pattern.type) {\n return false;\n }\n if (this.#pattern.type === \"Any\") {\n return true;\n }\n const thisPattern = (this.#pattern as { type: \"Pattern\"; pattern: Pattern }).pattern;\n const otherPattern = (other.#pattern as { type: \"Pattern\"; pattern: Pattern }).pattern;\n return thisPattern === otherPattern;\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n return this.#pattern.type === \"Any\" ? 0 : 1;\n }\n}\n","/**\n * @bcts/envelope-pattern - Assertions pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust assertions_pattern.rs\n *\n * @module envelope-pattern/pattern/structure/assertions-pattern\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory\nlet createStructureAssertionsPattern: ((pattern: AssertionsPattern) => Pattern) | undefined;\n\nexport function registerAssertionsPatternFactory(\n factory: (pattern: AssertionsPattern) => Pattern,\n): void {\n createStructureAssertionsPattern = factory;\n}\n\n/**\n * Pattern type for assertions pattern matching.\n *\n * Corresponds to the Rust `AssertionsPattern` enum in assertions_pattern.rs\n */\nexport type AssertionsPatternType =\n | { readonly type: \"Any\" }\n | { readonly type: \"WithPredicate\"; readonly pattern: Pattern }\n | { readonly type: \"WithObject\"; readonly pattern: Pattern }\n | {\n readonly type: \"WithBoth\";\n readonly predicatePattern: Pattern;\n readonly objectPattern: Pattern;\n };\n\n/**\n * Pattern for matching assertions in envelopes.\n *\n * Corresponds to the Rust `AssertionsPattern` enum in assertions_pattern.rs\n */\nexport class AssertionsPattern implements Matcher {\n readonly #pattern: AssertionsPatternType;\n\n private constructor(pattern: AssertionsPatternType) {\n this.#pattern = pattern;\n }\n\n /**\n * Creates a new AssertionsPattern that matches any assertion.\n */\n static any(): AssertionsPattern {\n return new AssertionsPattern({ type: \"Any\" });\n }\n\n /**\n * Creates a new AssertionsPattern that matches assertions with predicates\n * that match a specific pattern.\n */\n static withPredicate(pattern: Pattern): AssertionsPattern {\n return new AssertionsPattern({ type: \"WithPredicate\", pattern });\n }\n\n /**\n * Creates a new AssertionsPattern that matches assertions with objects\n * that match a specific pattern.\n */\n static withObject(pattern: Pattern): AssertionsPattern {\n return new AssertionsPattern({ type: \"WithObject\", pattern });\n }\n\n /**\n * Creates a new AssertionsPattern that matches assertions with both\n * predicate and object patterns.\n */\n static withBoth(predicatePattern: Pattern, objectPattern: Pattern): AssertionsPattern {\n return new AssertionsPattern({ type: \"WithBoth\", predicatePattern, objectPattern });\n }\n\n /**\n * Gets the pattern type.\n */\n get patternType(): AssertionsPatternType {\n return this.#pattern;\n }\n\n /**\n * Gets the predicate pattern if this has one, undefined otherwise.\n */\n predicatePattern(): Pattern | undefined {\n if (this.#pattern.type === \"WithPredicate\") {\n return this.#pattern.pattern;\n }\n if (this.#pattern.type === \"WithBoth\") {\n return this.#pattern.predicatePattern;\n }\n return undefined;\n }\n\n /**\n * Gets the object pattern if this has one, undefined otherwise.\n */\n objectPattern(): Pattern | undefined {\n if (this.#pattern.type === \"WithObject\") {\n return this.#pattern.pattern;\n }\n if (this.#pattern.type === \"WithBoth\") {\n return this.#pattern.objectPattern;\n }\n return undefined;\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n const paths: Path[] = [];\n\n for (const assertion of haystack.assertions()) {\n switch (this.#pattern.type) {\n case \"Any\":\n paths.push([assertion]);\n break;\n case \"WithPredicate\": {\n const predicate = assertion.asPredicate?.();\n if (predicate !== undefined) {\n const innerMatcher = this.#pattern.pattern as unknown as Matcher;\n if (innerMatcher.matches(predicate)) {\n paths.push([assertion]);\n }\n }\n break;\n }\n case \"WithObject\": {\n const object = assertion.asObject?.();\n if (object !== undefined) {\n const innerMatcher = this.#pattern.pattern as unknown as Matcher;\n if (innerMatcher.matches(object)) {\n paths.push([assertion]);\n }\n }\n break;\n }\n case \"WithBoth\": {\n const predicate = assertion.asPredicate?.();\n const object = assertion.asObject?.();\n if (predicate !== undefined && object !== undefined) {\n const predMatcher = this.#pattern.predicatePattern as unknown as Matcher;\n const objMatcher = this.#pattern.objectPattern as unknown as Matcher;\n if (predMatcher.matches(predicate) && objMatcher.matches(object)) {\n paths.push([assertion]);\n }\n }\n break;\n }\n }\n }\n\n return [paths, new Map<string, Path[]>()];\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], _captures: string[]): void {\n if (createStructureAssertionsPattern === undefined) {\n throw new Error(\"AssertionsPattern factory not registered\");\n }\n const idx = literals.length;\n literals.push(createStructureAssertionsPattern(this));\n code.push({ type: \"MatchStructure\", literalIndex: idx });\n }\n\n isComplex(): boolean {\n return false;\n }\n\n toString(): string {\n switch (this.#pattern.type) {\n case \"Any\":\n return \"assert\";\n case \"WithPredicate\":\n return `assertpred(${(this.#pattern.pattern as unknown as { toString(): string }).toString()})`;\n case \"WithObject\":\n return `assertobj(${(this.#pattern.pattern as unknown as { toString(): string }).toString()})`;\n case \"WithBoth\":\n return `assert(${(this.#pattern.predicatePattern as unknown as { toString(): string }).toString()}, ${(this.#pattern.objectPattern as unknown as { toString(): string }).toString()})`;\n }\n }\n\n /**\n * Equality comparison.\n */\n equals(other: AssertionsPattern): boolean {\n if (this.#pattern.type !== other.#pattern.type) {\n return false;\n }\n switch (this.#pattern.type) {\n case \"Any\":\n return true;\n case \"WithPredicate\":\n case \"WithObject\": {\n const thisPattern = (\n this.#pattern as { type: \"WithPredicate\" | \"WithObject\"; pattern: Pattern }\n ).pattern;\n const otherPattern = (\n other.#pattern as { type: \"WithPredicate\" | \"WithObject\"; pattern: Pattern }\n ).pattern;\n return thisPattern === otherPattern;\n }\n case \"WithBoth\": {\n const otherBoth = other.#pattern as {\n type: \"WithBoth\";\n predicatePattern: Pattern;\n objectPattern: Pattern;\n };\n return (\n this.#pattern.predicatePattern === otherBoth.predicatePattern &&\n this.#pattern.objectPattern === otherBoth.objectPattern\n );\n }\n }\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n switch (this.#pattern.type) {\n case \"Any\":\n return 0;\n case \"WithPredicate\":\n return 1;\n case \"WithObject\":\n return 2;\n case \"WithBoth\":\n return 3;\n }\n }\n}\n","/**\n * @bcts/envelope-pattern - Digest pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust digest_pattern.rs\n *\n * @module envelope-pattern/pattern/structure/digest-pattern\n */\n\nimport type { Envelope, Digest } from \"@bcts/envelope\";\nimport { bytesToHex } from \"@bcts/dcbor\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport { compileAsAtomic } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory\nlet createStructureDigestPattern: ((pattern: DigestPattern) => Pattern) | undefined;\n\nexport function registerDigestPatternFactory(factory: (pattern: DigestPattern) => Pattern): void {\n createStructureDigestPattern = factory;\n}\n\n/**\n * Helper to convert bytes to Latin-1 string for regex matching.\n */\nfunction bytesToLatin1(bytes: Uint8Array): string {\n let result = \"\";\n for (const byte of bytes) {\n result += String.fromCharCode(byte);\n }\n return result;\n}\n\n/**\n * Pattern type for digest pattern matching.\n *\n * Corresponds to the Rust `DigestPattern` enum in digest_pattern.rs\n */\nexport type DigestPatternType =\n | { readonly type: \"Any\" }\n | { readonly type: \"Digest\"; readonly digest: Digest }\n | { readonly type: \"Prefix\"; readonly prefix: Uint8Array }\n | { readonly type: \"BinaryRegex\"; readonly regex: RegExp };\n\n/**\n * Pattern for matching envelopes by their digest.\n *\n * Corresponds to the Rust `DigestPattern` enum in digest_pattern.rs\n */\nexport class DigestPattern implements Matcher {\n readonly #pattern: DigestPatternType;\n\n private constructor(pattern: DigestPatternType) {\n this.#pattern = pattern;\n }\n\n /**\n * Creates a new DigestPattern that matches any digest.\n */\n static any(): DigestPattern {\n return new DigestPattern({ type: \"Any\" });\n }\n\n /**\n * Creates a new DigestPattern that matches the exact digest.\n */\n static digest(digest: Digest): DigestPattern {\n return new DigestPattern({ type: \"Digest\", digest });\n }\n\n /**\n * Creates a new DigestPattern that matches the prefix of a digest.\n */\n static prefix(prefix: Uint8Array): DigestPattern {\n return new DigestPattern({ type: \"Prefix\", prefix });\n }\n\n /**\n * Creates a new DigestPattern that matches the binary regex for a digest.\n */\n static binaryRegex(regex: RegExp): DigestPattern {\n return new DigestPattern({ type: \"BinaryRegex\", regex });\n }\n\n /**\n * Gets the pattern type.\n */\n get patternType(): DigestPatternType {\n return this.#pattern;\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n const digest = haystack.digest();\n const digestData = digest.data();\n let isHit = false;\n\n switch (this.#pattern.type) {\n case \"Any\":\n // Any digest matches - every envelope has a digest\n isHit = true;\n break;\n case \"Digest\":\n isHit = digest.equals(this.#pattern.digest);\n break;\n case \"Prefix\": {\n const prefix = this.#pattern.prefix;\n if (digestData.length >= prefix.length) {\n isHit = true;\n for (let i = 0; i < prefix.length; i++) {\n if (digestData[i] !== prefix[i]) {\n isHit = false;\n break;\n }\n }\n }\n break;\n }\n case \"BinaryRegex\": {\n const latin1 = bytesToLatin1(digestData);\n isHit = this.#pattern.regex.test(latin1);\n break;\n }\n }\n\n const paths = isHit ? [[haystack]] : [];\n return [paths, new Map<string, Path[]>()];\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], captures: string[]): void {\n if (createStructureDigestPattern === undefined) {\n throw new Error(\"DigestPattern factory not registered\");\n }\n compileAsAtomic(createStructureDigestPattern(this), code, literals, captures);\n }\n\n isComplex(): boolean {\n return false;\n }\n\n toString(): string {\n switch (this.#pattern.type) {\n case \"Any\":\n return \"digest\";\n case \"Digest\":\n return `digest(${this.#pattern.digest.hex()})`;\n case \"Prefix\":\n return `digest(${bytesToHex(this.#pattern.prefix)})`;\n case \"BinaryRegex\":\n return `digest(/${this.#pattern.regex.source}/)`;\n }\n }\n\n /**\n * Equality comparison.\n */\n equals(other: DigestPattern): boolean {\n if (this.#pattern.type !== other.#pattern.type) {\n return false;\n }\n switch (this.#pattern.type) {\n case \"Any\":\n return true;\n case \"Digest\":\n return this.#pattern.digest.equals(\n (other.#pattern as { type: \"Digest\"; digest: Digest }).digest,\n );\n case \"Prefix\": {\n const thisPrefix = this.#pattern.prefix;\n const otherPrefix = (other.#pattern as { type: \"Prefix\"; prefix: Uint8Array }).prefix;\n if (thisPrefix.length !== otherPrefix.length) return false;\n for (let i = 0; i < thisPrefix.length; i++) {\n if (thisPrefix[i] !== otherPrefix[i]) return false;\n }\n return true;\n }\n case \"BinaryRegex\":\n return (\n this.#pattern.regex.source ===\n (other.#pattern as { type: \"BinaryRegex\"; regex: RegExp }).regex.source\n );\n }\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n switch (this.#pattern.type) {\n case \"Any\":\n return 0;\n case \"Digest\": {\n // Hash based on first few bytes of digest\n const data = this.#pattern.digest.data().slice(0, 8);\n let hash = 0;\n for (const byte of data) {\n hash = (hash * 31 + byte) | 0;\n }\n return hash;\n }\n case \"Prefix\": {\n let hash = 0;\n for (const byte of this.#pattern.prefix) {\n hash = (hash * 31 + byte) | 0;\n }\n return hash;\n }\n case \"BinaryRegex\": {\n let hash = 0;\n for (const char of this.#pattern.regex.source) {\n hash = (hash * 31 + char.charCodeAt(0)) | 0;\n }\n return hash;\n }\n }\n }\n}\n","/**\n * @bcts/envelope-pattern - Node pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust node_pattern.rs\n *\n * @module envelope-pattern/pattern/structure/node-pattern\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport { Interval } from \"@bcts/dcbor-pattern\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport { compileAsAtomic } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory\nlet createStructureNodePattern: ((pattern: NodePattern) => Pattern) | undefined;\n\nexport function registerNodePatternFactory(factory: (pattern: NodePattern) => Pattern): void {\n createStructureNodePattern = factory;\n}\n\n/**\n * Pattern type for node pattern matching.\n *\n * Corresponds to the Rust `NodePattern` enum in node_pattern.rs\n */\nexport type NodePatternType =\n | { readonly type: \"Any\" }\n | { readonly type: \"AssertionsInterval\"; readonly interval: Interval }\n | { readonly type: \"WithSubject\"; readonly subjectPattern: Pattern };\n\n/**\n * Pattern for matching node envelopes.\n *\n * Corresponds to the Rust `NodePattern` enum in node_pattern.rs\n */\nexport class NodePattern implements Matcher {\n readonly #pattern: NodePatternType;\n\n private constructor(pattern: NodePatternType) {\n this.#pattern = pattern;\n }\n\n /**\n * Creates a new NodePattern that matches any node.\n */\n static any(): NodePattern {\n return new NodePattern({ type: \"Any\" });\n }\n\n /**\n * Creates a new NodePattern that matches a node with the specified count of assertions.\n */\n static interval(min: number, max?: number): NodePattern {\n const interval = max !== undefined ? Interval.from(min, max) : Interval.atLeast(min);\n return new NodePattern({ type: \"AssertionsInterval\", interval });\n }\n\n /**\n * Creates a new NodePattern from an Interval.\n */\n static fromInterval(interval: Interval): NodePattern {\n return new NodePattern({ type: \"AssertionsInterval\", interval });\n }\n\n /**\n * Creates a new NodePattern with a subject pattern constraint.\n */\n static withSubject(subjectPattern: Pattern): NodePattern {\n return new NodePattern({ type: \"WithSubject\", subjectPattern });\n }\n\n /**\n * Gets the pattern type.\n */\n get patternType(): NodePatternType {\n return this.#pattern;\n }\n\n /**\n * Gets the subject pattern if this is a WithSubject type, undefined otherwise.\n */\n subjectPattern(): Pattern | undefined {\n return this.#pattern.type === \"WithSubject\" ? this.#pattern.subjectPattern : undefined;\n }\n\n /**\n * Gets the assertion patterns (empty array if none).\n */\n assertionPatterns(): Pattern[] {\n // NodePattern doesn't support assertion patterns directly; return empty array\n return [];\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n if (!haystack.isNode()) {\n return [[], new Map<string, Path[]>()];\n }\n\n let isHit = false;\n\n switch (this.#pattern.type) {\n case \"Any\":\n isHit = true;\n break;\n case \"AssertionsInterval\":\n isHit = this.#pattern.interval.contains(haystack.assertions().length);\n break;\n case \"WithSubject\":\n // For WithSubject, we match if the node exists (subject pattern matching done at higher level)\n isHit = true;\n break;\n }\n\n const paths = isHit ? [[haystack]] : [];\n return [paths, new Map<string, Path[]>()];\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], captures: string[]): void {\n if (createStructureNodePattern === undefined) {\n throw new Error(\"NodePattern factory not registered\");\n }\n compileAsAtomic(createStructureNodePattern(this), code, literals, captures);\n }\n\n isComplex(): boolean {\n return false;\n }\n\n toString(): string {\n switch (this.#pattern.type) {\n case \"Any\":\n return \"node\";\n case \"AssertionsInterval\":\n return `node(${this.#pattern.interval.toString()})`;\n case \"WithSubject\":\n return `node(${(this.#pattern.subjectPattern as unknown as { toString(): string }).toString()})`;\n }\n }\n\n /**\n * Equality comparison.\n */\n equals(other: NodePattern): boolean {\n if (this.#pattern.type !== other.#pattern.type) {\n return false;\n }\n switch (this.#pattern.type) {\n case \"Any\":\n return true;\n case \"AssertionsInterval\":\n return this.#pattern.interval.equals(\n (other.#pattern as { type: \"AssertionsInterval\"; interval: Interval }).interval,\n );\n case \"WithSubject\":\n // Simple reference equality for pattern (could be improved with deep equality)\n return (\n this.#pattern.subjectPattern ===\n (other.#pattern as { type: \"WithSubject\"; subjectPattern: Pattern }).subjectPattern\n );\n }\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n switch (this.#pattern.type) {\n case \"Any\":\n return 0;\n case \"AssertionsInterval\":\n // Simple hash based on interval min/max\n return this.#pattern.interval.min() * 31 + (this.#pattern.interval.max() ?? 0);\n case \"WithSubject\":\n return 1;\n }\n }\n}\n","/**\n * @bcts/envelope-pattern - Obscured pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust obscured_pattern.rs\n *\n * @module envelope-pattern/pattern/structure/obscured-pattern\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport { compileAsAtomic } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory\nlet createStructureObscuredPattern: ((pattern: ObscuredPattern) => Pattern) | undefined;\n\nexport function registerObscuredPatternFactory(\n factory: (pattern: ObscuredPattern) => Pattern,\n): void {\n createStructureObscuredPattern = factory;\n}\n\n/**\n * Pattern type for obscured pattern matching.\n *\n * Corresponds to the Rust `ObscuredPattern` enum in obscured_pattern.rs\n */\nexport type ObscuredPatternType =\n | { readonly type: \"Any\" }\n | { readonly type: \"Elided\" }\n | { readonly type: \"Encrypted\" }\n | { readonly type: \"Compressed\" };\n\n/**\n * Pattern for matching obscured elements.\n *\n * Corresponds to the Rust `ObscuredPattern` enum in obscured_pattern.rs\n */\nexport class ObscuredPattern implements Matcher {\n readonly #pattern: ObscuredPatternType;\n\n private constructor(pattern: ObscuredPatternType) {\n this.#pattern = pattern;\n }\n\n /**\n * Creates a new ObscuredPattern that matches any obscured element.\n */\n static any(): ObscuredPattern {\n return new ObscuredPattern({ type: \"Any\" });\n }\n\n /**\n * Creates a new ObscuredPattern that matches any elided element.\n */\n static elided(): ObscuredPattern {\n return new ObscuredPattern({ type: \"Elided\" });\n }\n\n /**\n * Creates a new ObscuredPattern that matches any encrypted element.\n */\n static encrypted(): ObscuredPattern {\n return new ObscuredPattern({ type: \"Encrypted\" });\n }\n\n /**\n * Creates a new ObscuredPattern that matches any compressed element.\n */\n static compressed(): ObscuredPattern {\n return new ObscuredPattern({ type: \"Compressed\" });\n }\n\n /**\n * Gets the pattern type.\n */\n get patternType(): ObscuredPatternType {\n return this.#pattern;\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n let isHit = false;\n\n switch (this.#pattern.type) {\n case \"Any\":\n isHit = haystack.isObscured();\n break;\n case \"Elided\":\n isHit = haystack.isElided();\n break;\n case \"Encrypted\":\n isHit = haystack.isEncrypted();\n break;\n case \"Compressed\":\n isHit = haystack.isCompressed();\n break;\n }\n\n const paths = isHit ? [[haystack]] : [];\n return [paths, new Map<string, Path[]>()];\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], captures: string[]): void {\n if (createStructureObscuredPattern === undefined) {\n throw new Error(\"ObscuredPattern factory not registered\");\n }\n compileAsAtomic(createStructureObscuredPattern(this), code, literals, captures);\n }\n\n isComplex(): boolean {\n return false;\n }\n\n toString(): string {\n switch (this.#pattern.type) {\n case \"Any\":\n return \"obscured\";\n case \"Elided\":\n return \"elided\";\n case \"Encrypted\":\n return \"encrypted\";\n case \"Compressed\":\n return \"compressed\";\n }\n }\n\n /**\n * Equality comparison.\n */\n equals(other: ObscuredPattern): boolean {\n return this.#pattern.type === other.#pattern.type;\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n switch (this.#pattern.type) {\n case \"Any\":\n return 0;\n case \"Elided\":\n return 1;\n case \"Encrypted\":\n return 2;\n case \"Compressed\":\n return 3;\n }\n }\n}\n","/**\n * @bcts/envelope-pattern - Wrapped pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust wrapped_pattern.rs\n *\n * @module envelope-pattern/pattern/structure/wrapped-pattern\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport type { Instr, Axis } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory\nlet createStructureWrappedPattern: ((pattern: WrappedPattern) => Pattern) | undefined;\n\nexport function registerWrappedPatternFactory(factory: (pattern: WrappedPattern) => Pattern): void {\n createStructureWrappedPattern = factory;\n}\n\n/**\n * Pattern type for wrapped pattern matching.\n *\n * Corresponds to the Rust `WrappedPattern` enum in wrapped_pattern.rs\n */\nexport type WrappedPatternType =\n | { readonly type: \"Any\" }\n | { readonly type: \"Unwrap\"; readonly pattern: Pattern };\n\n/**\n * Represents patterns for matching wrapped envelopes.\n *\n * Corresponds to the Rust `WrappedPattern` enum in wrapped_pattern.rs\n */\nexport class WrappedPattern implements Matcher {\n readonly #pattern: WrappedPatternType;\n\n private constructor(pattern: WrappedPatternType) {\n this.#pattern = pattern;\n }\n\n /**\n * Creates a new WrappedPattern that matches any wrapped envelope without descending.\n */\n static new(): WrappedPattern {\n return new WrappedPattern({ type: \"Any\" });\n }\n\n /**\n * Creates a new WrappedPattern that matches a wrapped envelope and also matches\n * on its unwrapped content.\n */\n static unwrapMatching(pattern: Pattern): WrappedPattern {\n return new WrappedPattern({ type: \"Unwrap\", pattern });\n }\n\n /**\n * Creates a new WrappedPattern that matches any wrapped envelope and descends into it.\n * Note: This requires Pattern.any() to be available, so it's set up during registration.\n */\n static unwrap(): WrappedPattern {\n // This will be filled in when Pattern.any() is available\n // For now, create a placeholder that will be replaced\n return new WrappedPattern({ type: \"Any\" }); // Will be overwritten\n }\n\n /**\n * Gets the pattern type.\n */\n get patternType(): WrappedPatternType {\n return this.#pattern;\n }\n\n /**\n * Gets the inner pattern if this is an Unwrap type, undefined otherwise.\n */\n innerPattern(): Pattern | undefined {\n return this.#pattern.type === \"Unwrap\" ? this.#pattern.pattern : undefined;\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n const subject = haystack.subject();\n\n if (!subject.isWrapped()) {\n return [[], new Map<string, Path[]>()];\n }\n\n let paths: Path[];\n\n switch (this.#pattern.type) {\n case \"Any\":\n // Just match the wrapped envelope itself, don't descend\n paths = [[haystack]];\n break;\n case \"Unwrap\": {\n // Match the content of the wrapped envelope\n const unwrapped = subject.tryUnwrap?.();\n if (unwrapped !== undefined) {\n const innerMatcher = this.#pattern.pattern as unknown as Matcher;\n const innerPaths = innerMatcher.paths(unwrapped);\n paths = innerPaths.map((path) => {\n // Add the current envelope to the path\n return [haystack, ...path];\n });\n } else {\n paths = [];\n }\n break;\n }\n }\n\n return [paths, new Map<string, Path[]>()];\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], captures: string[]): void {\n if (createStructureWrappedPattern === undefined) {\n throw new Error(\"WrappedPattern factory not registered\");\n }\n\n switch (this.#pattern.type) {\n case \"Any\": {\n // Just match the wrapped envelope itself, don't descend\n const idx = literals.length;\n literals.push(createStructureWrappedPattern(this));\n code.push({ type: \"MatchStructure\", literalIndex: idx });\n break;\n }\n case \"Unwrap\": {\n // First match that it's wrapped\n const idx = literals.length;\n literals.push(createStructureWrappedPattern(WrappedPattern.new()));\n code.push({ type: \"MatchStructure\", literalIndex: idx });\n\n // Then move into inner envelope\n const axis: Axis = \"Wrapped\";\n code.push({ type: \"PushAxis\", axis });\n\n // Then match the pattern\n const innerMatcher = this.#pattern.pattern as unknown as Matcher;\n innerMatcher.compile(code, literals, captures);\n break;\n }\n }\n }\n\n isComplex(): boolean {\n return false;\n }\n\n toString(): string {\n switch (this.#pattern.type) {\n case \"Any\":\n return \"wrapped\";\n case \"Unwrap\": {\n // Check if it's the \"any\" pattern by string comparison\n const patternStr = (this.#pattern.pattern as unknown as { toString(): string }).toString();\n if (patternStr === \"*\") {\n return \"unwrap\";\n }\n return `unwrap(${patternStr})`;\n }\n }\n }\n\n /**\n * Equality comparison.\n */\n equals(other: WrappedPattern): boolean {\n if (this.#pattern.type !== other.#pattern.type) {\n return false;\n }\n if (this.#pattern.type === \"Any\") {\n return true;\n }\n const thisPattern = (this.#pattern as { type: \"Unwrap\"; pattern: Pattern }).pattern;\n const otherPattern = (other.#pattern as { type: \"Unwrap\"; pattern: Pattern }).pattern;\n return thisPattern === otherPattern;\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n return this.#pattern.type === \"Any\" ? 0 : 1;\n }\n}\n","/**\n * @bcts/envelope-pattern - Structure patterns module\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust pattern/structure/mod.rs\n *\n * @module envelope-pattern/pattern/structure\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport type { Path } from \"../../format\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Re-export all structure pattern types\nexport {\n LeafStructurePattern,\n registerLeafStructurePatternFactory,\n} from \"./leaf-structure-pattern\";\nexport {\n SubjectPattern,\n type SubjectPatternType,\n registerSubjectPatternFactory,\n} from \"./subject-pattern\";\nexport {\n PredicatePattern,\n type PredicatePatternType,\n registerPredicatePatternFactory,\n} from \"./predicate-pattern\";\nexport {\n ObjectPattern,\n type ObjectPatternType,\n registerObjectPatternFactory,\n} from \"./object-pattern\";\nexport {\n AssertionsPattern,\n type AssertionsPatternType,\n registerAssertionsPatternFactory,\n} from \"./assertions-pattern\";\nexport {\n DigestPattern,\n type DigestPatternType,\n registerDigestPatternFactory,\n} from \"./digest-pattern\";\nexport { NodePattern, type NodePatternType, registerNodePatternFactory } from \"./node-pattern\";\nexport {\n ObscuredPattern,\n type ObscuredPatternType,\n registerObscuredPatternFactory,\n} from \"./obscured-pattern\";\nexport {\n WrappedPattern,\n type WrappedPatternType,\n registerWrappedPatternFactory,\n} from \"./wrapped-pattern\";\n\n// Import concrete types for use in StructurePattern\nimport { type LeafStructurePattern } from \"./leaf-structure-pattern\";\nimport { type SubjectPattern } from \"./subject-pattern\";\nimport { type PredicatePattern } from \"./predicate-pattern\";\nimport { type ObjectPattern } from \"./object-pattern\";\nimport { type AssertionsPattern } from \"./assertions-pattern\";\nimport { type DigestPattern } from \"./digest-pattern\";\nimport { type NodePattern } from \"./node-pattern\";\nimport { type ObscuredPattern } from \"./obscured-pattern\";\nimport { type WrappedPattern } from \"./wrapped-pattern\";\n\n/**\n * Union type for all structure patterns.\n *\n * Corresponds to the Rust `StructurePattern` enum in pattern/structure/mod.rs\n */\nexport type StructurePattern =\n | { readonly type: \"Leaf\"; readonly pattern: LeafStructurePattern }\n | { readonly type: \"Subject\"; readonly pattern: SubjectPattern }\n | { readonly type: \"Predicate\"; readonly pattern: PredicatePattern }\n | { readonly type: \"Object\"; readonly pattern: ObjectPattern }\n | { readonly type: \"Assertions\"; readonly pattern: AssertionsPattern }\n | { readonly type: \"Digest\"; readonly pattern: DigestPattern }\n | { readonly type: \"Node\"; readonly pattern: NodePattern }\n | { readonly type: \"Obscured\"; readonly pattern: ObscuredPattern }\n | { readonly type: \"Wrapped\"; readonly pattern: WrappedPattern };\n\n/**\n * Creates a Leaf structure pattern.\n */\nexport function structureLeaf(pattern: LeafStructurePattern): StructurePattern {\n return { type: \"Leaf\", pattern };\n}\n\n/**\n * Creates a Subject structure pattern.\n */\nexport function structureSubject(pattern: SubjectPattern): StructurePattern {\n return { type: \"Subject\", pattern };\n}\n\n/**\n * Creates a Predicate structure pattern.\n */\nexport function structurePredicate(pattern: PredicatePattern): StructurePattern {\n return { type: \"Predicate\", pattern };\n}\n\n/**\n * Creates an Object structure pattern.\n */\nexport function structureObject(pattern: ObjectPattern): StructurePattern {\n return { type: \"Object\", pattern };\n}\n\n/**\n * Creates an Assertions structure pattern.\n */\nexport function structureAssertions(pattern: AssertionsPattern): StructurePattern {\n return { type: \"Assertions\", pattern };\n}\n\n/**\n * Creates a Digest structure pattern.\n */\nexport function structureDigest(pattern: DigestPattern): StructurePattern {\n return { type: \"Digest\", pattern };\n}\n\n/**\n * Creates a Node structure pattern.\n */\nexport function structureNode(pattern: NodePattern): StructurePattern {\n return { type: \"Node\", pattern };\n}\n\n/**\n * Creates an Obscured structure pattern.\n */\nexport function structureObscured(pattern: ObscuredPattern): StructurePattern {\n return { type: \"Obscured\", pattern };\n}\n\n/**\n * Creates a Wrapped structure pattern.\n */\nexport function structureWrapped(pattern: WrappedPattern): StructurePattern {\n return { type: \"Wrapped\", pattern };\n}\n\n/**\n * Gets paths with captures for a structure pattern.\n */\nexport function structurePatternPathsWithCaptures(\n pattern: StructurePattern,\n haystack: Envelope,\n): [Path[], Map<string, Path[]>] {\n switch (pattern.type) {\n case \"Leaf\":\n return pattern.pattern.pathsWithCaptures(haystack);\n case \"Subject\":\n return pattern.pattern.pathsWithCaptures(haystack);\n case \"Predicate\":\n return pattern.pattern.pathsWithCaptures(haystack);\n case \"Object\":\n return pattern.pattern.pathsWithCaptures(haystack);\n case \"Assertions\":\n return pattern.pattern.pathsWithCaptures(haystack);\n case \"Digest\":\n return pattern.pattern.pathsWithCaptures(haystack);\n case \"Node\":\n return pattern.pattern.pathsWithCaptures(haystack);\n case \"Obscured\":\n return pattern.pattern.pathsWithCaptures(haystack);\n case \"Wrapped\":\n return pattern.pattern.pathsWithCaptures(haystack);\n }\n}\n\n/**\n * Gets paths for a structure pattern.\n */\nexport function structurePatternPaths(pattern: StructurePattern, haystack: Envelope): Path[] {\n return structurePatternPathsWithCaptures(pattern, haystack)[0];\n}\n\n/**\n * Compiles a structure pattern to bytecode.\n */\nexport function structurePatternCompile(\n pattern: StructurePattern,\n code: Instr[],\n literals: Pattern[],\n captures: string[],\n): void {\n switch (pattern.type) {\n case \"Leaf\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"Subject\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"Predicate\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"Object\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"Assertions\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"Digest\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"Node\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"Obscured\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"Wrapped\":\n pattern.pattern.compile(code, literals, captures);\n break;\n }\n}\n\n/**\n * Checks if a structure pattern is complex.\n */\nexport function structurePatternIsComplex(pattern: StructurePattern): boolean {\n switch (pattern.type) {\n case \"Leaf\":\n return pattern.pattern.isComplex();\n case \"Subject\":\n return pattern.pattern.isComplex();\n case \"Predicate\":\n return pattern.pattern.isComplex();\n case \"Object\":\n return pattern.pattern.isComplex();\n case \"Assertions\":\n return pattern.pattern.isComplex();\n case \"Digest\":\n return pattern.pattern.isComplex();\n case \"Node\":\n return pattern.pattern.isComplex();\n case \"Obscured\":\n return pattern.pattern.isComplex();\n case \"Wrapped\":\n return pattern.pattern.isComplex();\n }\n}\n\n/**\n * Converts a structure pattern to string.\n */\nexport function structurePatternToString(pattern: StructurePattern): string {\n switch (pattern.type) {\n case \"Leaf\":\n return pattern.pattern.toString();\n case \"Subject\":\n return pattern.pattern.toString();\n case \"Predicate\":\n return pattern.pattern.toString();\n case \"Object\":\n return pattern.pattern.toString();\n case \"Assertions\":\n return pattern.pattern.toString();\n case \"Digest\":\n return pattern.pattern.toString();\n case \"Node\":\n return pattern.pattern.toString();\n case \"Obscured\":\n return pattern.pattern.toString();\n case \"Wrapped\":\n return pattern.pattern.toString();\n }\n}\n","/**\n * @bcts/envelope-pattern - Any pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust any_pattern.rs\n *\n * @module envelope-pattern/pattern/meta/any-pattern\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport { compileAsAtomic } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory\nlet createMetaAnyPattern: ((pattern: AnyPattern) => Pattern) | undefined;\n\nexport function registerAnyPatternFactory(factory: (pattern: AnyPattern) => Pattern): void {\n createMetaAnyPattern = factory;\n}\n\n/**\n * A pattern that matches any element.\n *\n * Corresponds to the Rust `AnyPattern` struct in any_pattern.rs\n */\nexport class AnyPattern implements Matcher {\n private constructor() {\n // Empty constructor - AnyPattern is a singleton-like pattern with no state\n }\n\n /**\n * Creates a new AnyPattern.\n */\n static new(): AnyPattern {\n return new AnyPattern();\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n // Always return a path containing the envelope itself.\n return [[[haystack]], new Map<string, Path[]>()];\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(_haystack: Envelope): boolean {\n return true;\n }\n\n compile(code: Instr[], literals: Pattern[], captures: string[]): void {\n if (createMetaAnyPattern === undefined) {\n throw new Error(\"AnyPattern factory not registered\");\n }\n compileAsAtomic(createMetaAnyPattern(this), code, literals, captures);\n }\n\n isComplex(): boolean {\n return false;\n }\n\n toString(): string {\n return \"*\";\n }\n\n /**\n * Equality comparison.\n */\n equals(_other: AnyPattern): boolean {\n return true; // All AnyPattern instances are equal\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n return 0;\n }\n}\n","/**\n * @bcts/envelope-pattern - And pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust and_pattern.rs\n *\n * @module envelope-pattern/pattern/meta/and-pattern\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory (used for late binding)\nexport let createMetaAndPattern: ((pattern: AndPattern) => Pattern) | undefined;\n\nexport function registerAndPatternFactory(factory: (pattern: AndPattern) => Pattern): void {\n createMetaAndPattern = factory;\n}\n\n/**\n * A pattern that matches if all contained patterns match.\n *\n * Corresponds to the Rust `AndPattern` struct in and_pattern.rs\n */\nexport class AndPattern implements Matcher {\n readonly #patterns: Pattern[];\n\n private constructor(patterns: Pattern[]) {\n this.#patterns = patterns;\n }\n\n /**\n * Creates a new AndPattern with the given patterns.\n */\n static new(patterns: Pattern[]): AndPattern {\n return new AndPattern(patterns);\n }\n\n /**\n * Gets the patterns.\n */\n patterns(): Pattern[] {\n return this.#patterns;\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n const allMatch = this.#patterns.every((pattern) => {\n const matcher = pattern as unknown as Matcher;\n return matcher.matches(haystack);\n });\n\n const paths = allMatch ? [[haystack]] : [];\n return [paths, new Map<string, Path[]>()];\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], captures: string[]): void {\n // Each pattern must match at this position\n for (const pattern of this.#patterns) {\n const matcher = pattern as unknown as Matcher;\n matcher.compile(code, literals, captures);\n }\n }\n\n isComplex(): boolean {\n // The pattern is complex if it contains more than one pattern, or if\n // the one pattern is complex itself.\n return (\n this.#patterns.length > 1 || this.#patterns.some((p) => (p as unknown as Matcher).isComplex())\n );\n }\n\n toString(): string {\n return this.#patterns\n .map((p) => (p as unknown as { toString(): string }).toString())\n .join(\" & \");\n }\n\n /**\n * Equality comparison.\n */\n equals(other: AndPattern): boolean {\n if (this.#patterns.length !== other.#patterns.length) {\n return false;\n }\n for (let i = 0; i < this.#patterns.length; i++) {\n if (this.#patterns[i] !== other.#patterns[i]) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n return this.#patterns.length;\n }\n}\n","/**\n * @bcts/envelope-pattern - Or pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust or_pattern.rs\n *\n * @module envelope-pattern/pattern/meta/or-pattern\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory (used for late binding)\nexport let createMetaOrPattern: ((pattern: OrPattern) => Pattern) | undefined;\n\nexport function registerOrPatternFactory(factory: (pattern: OrPattern) => Pattern): void {\n createMetaOrPattern = factory;\n}\n\n/**\n * A pattern that matches if any contained pattern matches.\n *\n * Corresponds to the Rust `OrPattern` struct in or_pattern.rs\n */\nexport class OrPattern implements Matcher {\n readonly #patterns: Pattern[];\n\n private constructor(patterns: Pattern[]) {\n this.#patterns = patterns;\n }\n\n /**\n * Creates a new OrPattern with the given patterns.\n */\n static new(patterns: Pattern[]): OrPattern {\n return new OrPattern(patterns);\n }\n\n /**\n * Gets the patterns.\n */\n patterns(): Pattern[] {\n return this.#patterns;\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n const anyMatch = this.#patterns.some((pattern) => {\n const matcher = pattern as unknown as Matcher;\n return matcher.matches(haystack);\n });\n\n const paths = anyMatch ? [[haystack]] : [];\n return [paths, new Map<string, Path[]>()];\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], captures: string[]): void {\n if (this.#patterns.length === 0) {\n return;\n }\n\n // For N patterns: Split(p1, Split(p2, ... Split(pN-1, pN)))\n const splits: number[] = [];\n\n // Generate splits for all but the last pattern\n for (let i = 0; i < this.#patterns.length - 1; i++) {\n splits.push(code.length);\n code.push({ type: \"Split\", a: 0, b: 0 }); // Placeholder\n }\n\n // Track jump instructions that need patching\n const jumps: number[] = [];\n\n // Now fill in the actual split targets\n for (let i = 0; i < this.#patterns.length; i++) {\n const patternStart = code.length;\n\n // Compile this pattern\n const pattern = this.#patterns[i];\n const matcher = pattern as unknown as Matcher;\n matcher.compile(code, literals, captures);\n\n // This pattern will jump to the end if it matches\n const jumpPastAll = code.length;\n code.push({ type: \"Jump\", address: 0 }); // Placeholder\n jumps.push(jumpPastAll);\n\n // If there's a next pattern, update the split to point here\n if (i < this.#patterns.length - 1) {\n const nextPattern = code.length;\n code[splits[i]] = { type: \"Split\", a: patternStart, b: nextPattern };\n }\n }\n\n // Now patch all the jumps to point past all the patterns\n const pastAll = code.length;\n for (const jumpIdx of jumps) {\n code[jumpIdx] = { type: \"Jump\", address: pastAll };\n }\n }\n\n isComplex(): boolean {\n // The pattern is complex if it contains more than one pattern, or if\n // the one pattern is complex itself.\n return (\n this.#patterns.length > 1 || this.#patterns.some((p) => (p as unknown as Matcher).isComplex())\n );\n }\n\n toString(): string {\n return this.#patterns\n .map((p) => (p as unknown as { toString(): string }).toString())\n .join(\" | \");\n }\n\n /**\n * Equality comparison.\n */\n equals(other: OrPattern): boolean {\n if (this.#patterns.length !== other.#patterns.length) {\n return false;\n }\n for (let i = 0; i < this.#patterns.length; i++) {\n if (this.#patterns[i] !== other.#patterns[i]) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n return this.#patterns.length;\n }\n}\n","/**\n * @bcts/envelope-pattern - Not pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust not_pattern.rs\n *\n * @module envelope-pattern/pattern/meta/not-pattern\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory (used for late binding)\nexport let createMetaNotPattern: ((pattern: NotPattern) => Pattern) | undefined;\n\nexport function registerNotPatternFactory(factory: (pattern: NotPattern) => Pattern): void {\n createMetaNotPattern = factory;\n}\n\n/**\n * A pattern that negates another pattern; matches when the inner pattern does not match.\n *\n * Corresponds to the Rust `NotPattern` struct in not_pattern.rs\n */\nexport class NotPattern implements Matcher {\n readonly #pattern: Pattern;\n\n private constructor(pattern: Pattern) {\n this.#pattern = pattern;\n }\n\n /**\n * Creates a new NotPattern with the given pattern.\n */\n static new(pattern: Pattern): NotPattern {\n return new NotPattern(pattern);\n }\n\n /**\n * Gets the inner pattern.\n */\n pattern(): Pattern {\n return this.#pattern;\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n // If the inner pattern doesn't match, then we return the current envelope as a match\n const matcher = this.#pattern as unknown as Matcher;\n const paths = !matcher.matches(haystack) ? [[haystack]] : [];\n return [paths, new Map<string, Path[]>()];\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], _captures: string[]): void {\n // NOT = check that pattern doesn't match\n const idx = literals.length;\n literals.push(this.#pattern);\n code.push({ type: \"NotMatch\", patternIndex: idx });\n }\n\n isComplex(): boolean {\n return false;\n }\n\n toString(): string {\n return `!${(this.#pattern as unknown as { toString(): string }).toString()}`;\n }\n\n /**\n * Equality comparison.\n */\n equals(other: NotPattern): boolean {\n return this.#pattern === other.#pattern;\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n return 1;\n }\n}\n","/**\n * @bcts/envelope-pattern - Capture pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust capture_pattern.rs\n *\n * @module envelope-pattern/pattern/meta/capture-pattern\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory (used for late binding)\nexport let createMetaCapturePattern: ((pattern: CapturePattern) => Pattern) | undefined;\n\nexport function registerCapturePatternFactory(factory: (pattern: CapturePattern) => Pattern): void {\n createMetaCapturePattern = factory;\n}\n\n/**\n * A pattern that captures a match with a name.\n *\n * Corresponds to the Rust `CapturePattern` struct in capture_pattern.rs\n */\nexport class CapturePattern implements Matcher {\n readonly #name: string;\n readonly #pattern: Pattern;\n\n private constructor(name: string, pattern: Pattern) {\n this.#name = name;\n this.#pattern = pattern;\n }\n\n /**\n * Creates a new CapturePattern with the given name and pattern.\n */\n static new(name: string, pattern: Pattern): CapturePattern {\n return new CapturePattern(name, pattern);\n }\n\n /**\n * Gets the name of the capture.\n */\n name(): string {\n return this.#name;\n }\n\n /**\n * Gets the inner pattern.\n */\n pattern(): Pattern {\n return this.#pattern;\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n const matcher = this.#pattern as unknown as Matcher;\n const [paths, caps] = matcher.pathsWithCaptures(haystack);\n\n if (paths.length > 0) {\n const existing = caps.get(this.#name) ?? [];\n caps.set(this.#name, [...existing, ...paths]);\n }\n\n return [paths, caps];\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], captures: string[]): void {\n const id = captures.length;\n captures.push(this.#name);\n code.push({ type: \"CaptureStart\", captureIndex: id });\n const matcher = this.#pattern as unknown as Matcher;\n matcher.compile(code, literals, captures);\n code.push({ type: \"CaptureEnd\", captureIndex: id });\n }\n\n isComplex(): boolean {\n return false;\n }\n\n toString(): string {\n return `@${this.#name}(${(this.#pattern as unknown as { toString(): string }).toString()})`;\n }\n\n /**\n * Equality comparison.\n */\n equals(other: CapturePattern): boolean {\n return this.#name === other.#name && this.#pattern === other.#pattern;\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n let hash = 0;\n for (const char of this.#name) {\n hash = (hash * 31 + char.charCodeAt(0)) | 0;\n }\n return hash;\n }\n}\n","/**\n * @bcts/envelope-pattern - Search pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust search_pattern.rs\n *\n * @module envelope-pattern/pattern/meta/search-pattern\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory (used for late binding)\nexport let createMetaSearchPattern: ((pattern: SearchPattern) => Pattern) | undefined;\n\nexport function registerSearchPatternFactory(factory: (pattern: SearchPattern) => Pattern): void {\n createMetaSearchPattern = factory;\n}\n\n/**\n * A pattern that searches the entire envelope tree for matches.\n *\n * Corresponds to the Rust `SearchPattern` struct in search_pattern.rs\n */\nexport class SearchPattern implements Matcher {\n readonly #pattern: Pattern;\n\n private constructor(pattern: Pattern) {\n this.#pattern = pattern;\n }\n\n /**\n * Creates a new SearchPattern with the given pattern.\n */\n static new(pattern: Pattern): SearchPattern {\n return new SearchPattern(pattern);\n }\n\n /**\n * Gets the inner pattern.\n */\n pattern(): Pattern {\n return this.#pattern;\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n const resultPaths: Path[] = [];\n const matcher = this.#pattern as unknown as Matcher;\n\n // Walk the envelope tree\n this.#walkEnvelope(haystack, [], (currentEnvelope, pathToCurrent) => {\n // Create the path to this node\n const newPath: Envelope[] = [...pathToCurrent, currentEnvelope];\n\n // Test the pattern against this node\n const patternPaths = matcher.paths(currentEnvelope);\n\n // If the pattern matches, emit the full paths\n for (const patternPath of patternPaths) {\n const fullPath = [...newPath];\n // If the pattern path has elements beyond just the current envelope,\n // extend with those additional elements.\n if (patternPath.length > 1) {\n fullPath.push(...patternPath.slice(1));\n } else if (patternPath.length === 1) {\n const firstEnv = patternPath[0];\n if (firstEnv !== undefined && !firstEnv.digest().equals(currentEnvelope.digest())) {\n // Pattern found a different element, add it to the path\n fullPath.push(...patternPath);\n }\n }\n resultPaths.push(fullPath);\n }\n });\n\n // Deduplicate paths by digest\n const seen = new Set<string>();\n const uniquePaths: Path[] = [];\n for (const path of resultPaths) {\n const digestPath = path.map((e) => e.digest().hex()).join(\",\");\n if (!seen.has(digestPath)) {\n seen.add(digestPath);\n uniquePaths.push(path);\n }\n }\n\n return [uniquePaths, new Map<string, Path[]>()];\n }\n\n /**\n * Walk the envelope tree recursively.\n */\n #walkEnvelope(\n envelope: Envelope,\n pathToCurrent: Envelope[],\n visitor: (envelope: Envelope, path: Envelope[]) => void,\n ): void {\n // Visit this node\n visitor(envelope, pathToCurrent);\n\n // Get the subject\n const subject = envelope.subject();\n const newPath = [...pathToCurrent, envelope];\n\n // Walk subject if it's different from this envelope\n if (!subject.digest().equals(envelope.digest())) {\n this.#walkEnvelope(subject, newPath, visitor);\n }\n\n // Walk assertions\n for (const assertion of envelope.assertions()) {\n this.#walkEnvelope(assertion, newPath, visitor);\n\n // Walk predicate and object if available\n const predicate = assertion.asPredicate?.();\n if (predicate !== undefined) {\n const assertionPath = [...newPath, assertion];\n this.#walkEnvelope(predicate, assertionPath, visitor);\n }\n\n const object = assertion.asObject?.();\n if (object !== undefined) {\n const assertionPath = [...newPath, assertion];\n this.#walkEnvelope(object, assertionPath, visitor);\n }\n }\n\n // Walk wrapped content if present\n if (subject.isWrapped()) {\n const unwrapped = subject.tryUnwrap?.();\n if (unwrapped !== undefined) {\n this.#walkEnvelope(unwrapped, newPath, visitor);\n }\n }\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], captures: string[]): void {\n const idx = literals.length;\n literals.push(this.#pattern);\n\n // Collect capture names from inner pattern\n const innerNames: string[] = [];\n collectCaptureNames(this.#pattern, innerNames);\n\n const captureMap: [string, number][] = [];\n for (const name of innerNames) {\n let pos = captures.indexOf(name);\n if (pos === -1) {\n pos = captures.length;\n captures.push(name);\n }\n captureMap.push([name, pos]);\n }\n\n code.push({ type: \"Search\", patternIndex: idx, captureMap });\n }\n\n isComplex(): boolean {\n return true;\n }\n\n toString(): string {\n return `search(${(this.#pattern as unknown as { toString(): string }).toString()})`;\n }\n\n /**\n * Equality comparison.\n */\n equals(other: SearchPattern): boolean {\n return this.#pattern === other.#pattern;\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n return 1;\n }\n}\n\n/**\n * Collect capture names from a pattern.\n */\nfunction collectCaptureNames(pattern: Pattern, out: string[]): void {\n // This will be properly implemented when Pattern type is fully defined\n // For now, we check if it has a collectCaptureNames method\n const p = pattern as unknown as { collectCaptureNames?: (out: string[]) => void };\n if (p.collectCaptureNames !== undefined) {\n p.collectCaptureNames(out);\n }\n}\n","/**\n * @bcts/envelope-pattern - Traverse pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust traverse_pattern.rs\n *\n * @module envelope-pattern/pattern/meta/traverse-pattern\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory (used for late binding)\nexport let createMetaTraversePattern: ((pattern: TraversePattern) => Pattern) | undefined;\n\nexport function registerTraversePatternFactory(\n factory: (pattern: TraversePattern) => Pattern,\n): void {\n createMetaTraversePattern = factory;\n}\n\n/**\n * A pattern that matches a traversal order of patterns.\n *\n * Corresponds to the Rust `TraversePattern` struct in traverse_pattern.rs\n */\nexport class TraversePattern implements Matcher {\n readonly #first: Pattern;\n readonly #rest: TraversePattern | undefined;\n\n private constructor(first: Pattern, rest: TraversePattern | undefined) {\n this.#first = first;\n this.#rest = rest;\n }\n\n /**\n * Creates a new TraversePattern with the given patterns.\n */\n static new(patterns: Pattern[]): TraversePattern {\n if (patterns.length === 0) {\n throw new Error(\"TraversePattern requires at least one pattern\");\n }\n\n const firstPat = patterns[0];\n const restPatterns = patterns.slice(1);\n const rest = restPatterns.length === 0 ? undefined : TraversePattern.new(restPatterns);\n return new TraversePattern(firstPat, rest);\n }\n\n /**\n * Gets all patterns in this traversal.\n */\n patterns(): Pattern[] {\n const result: Pattern[] = [this.#first];\n if (this.#rest !== undefined) {\n result.push(...this.#rest.patterns());\n }\n return result;\n }\n\n pathsWithCaptures(haystack: Envelope): [Path[], Map<string, Path[]>] {\n const firstMatcher = this.#first as unknown as Matcher;\n const headPaths = firstMatcher.paths(haystack);\n\n // If there's no further traversal, return head paths\n if (this.#rest === undefined) {\n return [headPaths, new Map<string, Path[]>()];\n }\n\n const result: Path[] = [];\n for (const path of headPaths) {\n const lastEnv = path[path.length - 1];\n if (lastEnv !== undefined) {\n // Recursively match the rest of the traversal\n const tailPaths = this.#rest.paths(lastEnv);\n for (const tailPath of tailPaths) {\n const combined = [...path, ...tailPath];\n result.push(combined);\n }\n }\n }\n\n return [result, new Map<string, Path[]>()];\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n return this.paths(haystack).length > 0;\n }\n\n compile(code: Instr[], literals: Pattern[], captures: string[]): void {\n // Compile the first pattern\n const firstMatcher = this.#first as unknown as Matcher;\n firstMatcher.compile(code, literals, captures);\n\n if (this.#rest !== undefined) {\n // Save the current path and switch to last envelope\n code.push({ type: \"ExtendTraversal\" });\n // Compile the rest of the traversal\n this.#rest.compile(code, literals, captures);\n // Combine the paths correctly\n code.push({ type: \"CombineTraversal\" });\n }\n }\n\n isComplex(): boolean {\n // A traversal is complex if `first` is complex, or it has more than one pattern\n const firstMatcher = this.#first as unknown as Matcher;\n return firstMatcher.isComplex() || this.#rest !== undefined;\n }\n\n toString(): string {\n return this.patterns()\n .map((p) => (p as unknown as { toString(): string }).toString())\n .join(\" -> \");\n }\n\n /**\n * Equality comparison.\n */\n equals(other: TraversePattern): boolean {\n const thisPatterns = this.patterns();\n const otherPatterns = other.patterns();\n if (thisPatterns.length !== otherPatterns.length) {\n return false;\n }\n for (let i = 0; i < thisPatterns.length; i++) {\n if (thisPatterns[i] !== otherPatterns[i]) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n return this.patterns().length;\n }\n}\n","/**\n * @bcts/envelope-pattern - Group/repeat pattern matching\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust repeat_pattern.rs\n *\n * @module envelope-pattern/pattern/meta/group-pattern\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport { Quantifier } from \"@bcts/dcbor-pattern\";\nimport type { Path } from \"../../format\";\nimport type { Matcher } from \"../matcher\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Forward declaration for Pattern factory (used for late binding)\nexport let createMetaGroupPattern: ((pattern: GroupPattern) => Pattern) | undefined;\n\nexport function registerGroupPatternFactory(factory: (pattern: GroupPattern) => Pattern): void {\n createMetaGroupPattern = factory;\n}\n\n/**\n * A pattern that matches with repetition.\n *\n * Corresponds to the Rust `GroupPattern` struct in repeat_pattern.rs\n */\nexport class GroupPattern implements Matcher {\n readonly #pattern: Pattern;\n readonly #quantifier: Quantifier;\n\n private constructor(pattern: Pattern, quantifier: Quantifier) {\n this.#pattern = pattern;\n this.#quantifier = quantifier;\n }\n\n /**\n * Creates a new GroupPattern with the specified sub-pattern and quantifier.\n */\n static repeat(pattern: Pattern, quantifier: Quantifier): GroupPattern {\n return new GroupPattern(pattern, quantifier);\n }\n\n /**\n * Creates a new GroupPattern with a quantifier that matches exactly once.\n */\n static new(pattern: Pattern): GroupPattern {\n return new GroupPattern(pattern, Quantifier.exactly(1));\n }\n\n /**\n * Gets the sub-pattern of this group pattern.\n */\n pattern(): Pattern {\n return this.#pattern;\n }\n\n /**\n * Gets the quantifier of this group pattern.\n */\n quantifier(): Quantifier {\n return this.#quantifier;\n }\n\n pathsWithCaptures(_haystack: Envelope): [Path[], Map<string, Path[]>] {\n throw new Error(\n \"GroupPattern does not support pathsWithCaptures directly; use compile instead\",\n );\n }\n\n paths(haystack: Envelope): Path[] {\n return this.pathsWithCaptures(haystack)[0];\n }\n\n matches(haystack: Envelope): boolean {\n // GroupPattern needs VM execution\n const matcher = this.#pattern as unknown as Matcher;\n return matcher.matches(haystack);\n }\n\n compile(code: Instr[], literals: Pattern[], _captures: string[]): void {\n const idx = literals.length;\n literals.push(this.#pattern);\n code.push({ type: \"Repeat\", patternIndex: idx, quantifier: this.#quantifier });\n }\n\n isComplex(): boolean {\n return true;\n }\n\n toString(): string {\n const formattedRange = this.#quantifier.toString();\n return `(${(this.#pattern as unknown as { toString(): string }).toString()})${formattedRange}`;\n }\n\n /**\n * Equality comparison.\n */\n equals(other: GroupPattern): boolean {\n return this.#pattern === other.#pattern && this.#quantifier.equals(other.#quantifier);\n }\n\n /**\n * Hash code for use in Maps/Sets.\n */\n hashCode(): number {\n // Simple hash based on quantifier min/max\n return this.#quantifier.min() * 31 + (this.#quantifier.max() ?? 0);\n }\n}\n","/**\n * @bcts/envelope-pattern - Meta patterns module\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust pattern/meta/mod.rs\n *\n * @module envelope-pattern/pattern/meta\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport type { Path } from \"../../format\";\nimport type { Instr } from \"../vm\";\nimport type { Pattern } from \"../index\";\n\n// Re-export all meta pattern types\nexport { AnyPattern, registerAnyPatternFactory } from \"./any-pattern\";\nexport { AndPattern, registerAndPatternFactory } from \"./and-pattern\";\nexport { OrPattern, registerOrPatternFactory } from \"./or-pattern\";\nexport { NotPattern, registerNotPatternFactory } from \"./not-pattern\";\nexport { CapturePattern, registerCapturePatternFactory } from \"./capture-pattern\";\nexport { SearchPattern, registerSearchPatternFactory } from \"./search-pattern\";\nexport { TraversePattern, registerTraversePatternFactory } from \"./traverse-pattern\";\nexport { GroupPattern, registerGroupPatternFactory } from \"./group-pattern\";\n\n// Import concrete types for use in MetaPattern\nimport { type AnyPattern } from \"./any-pattern\";\nimport { type AndPattern } from \"./and-pattern\";\nimport { type OrPattern } from \"./or-pattern\";\nimport { type NotPattern } from \"./not-pattern\";\nimport { type CapturePattern } from \"./capture-pattern\";\nimport { type SearchPattern } from \"./search-pattern\";\nimport { type TraversePattern } from \"./traverse-pattern\";\nimport { type GroupPattern } from \"./group-pattern\";\n\n/**\n * Union type for all meta patterns.\n *\n * Corresponds to the Rust `MetaPattern` enum in pattern/meta/mod.rs\n */\nexport type MetaPattern =\n | { readonly type: \"Any\"; readonly pattern: AnyPattern }\n | { readonly type: \"And\"; readonly pattern: AndPattern }\n | { readonly type: \"Or\"; readonly pattern: OrPattern }\n | { readonly type: \"Not\"; readonly pattern: NotPattern }\n | { readonly type: \"Capture\"; readonly pattern: CapturePattern }\n | { readonly type: \"Search\"; readonly pattern: SearchPattern }\n | { readonly type: \"Traverse\"; readonly pattern: TraversePattern }\n | { readonly type: \"Group\"; readonly pattern: GroupPattern };\n\n/**\n * Creates an Any meta pattern.\n */\nexport function metaAny(pattern: AnyPattern): MetaPattern {\n return { type: \"Any\", pattern };\n}\n\n/**\n * Creates an And meta pattern.\n */\nexport function metaAnd(pattern: AndPattern): MetaPattern {\n return { type: \"And\", pattern };\n}\n\n/**\n * Creates an Or meta pattern.\n */\nexport function metaOr(pattern: OrPattern): MetaPattern {\n return { type: \"Or\", pattern };\n}\n\n/**\n * Creates a Not meta pattern.\n */\nexport function metaNot(pattern: NotPattern): MetaPattern {\n return { type: \"Not\", pattern };\n}\n\n/**\n * Creates a Capture meta pattern.\n */\nexport function metaCapture(pattern: CapturePattern): MetaPattern {\n return { type: \"Capture\", pattern };\n}\n\n/**\n * Creates a Search meta pattern.\n */\nexport function metaSearch(pattern: SearchPattern): MetaPattern {\n return { type: \"Search\", pattern };\n}\n\n/**\n * Creates a Traverse meta pattern.\n */\nexport function metaTraverse(pattern: TraversePattern): MetaPattern {\n return { type: \"Traverse\", pattern };\n}\n\n/**\n * Creates a Group meta pattern.\n */\nexport function metaGroup(pattern: GroupPattern): MetaPattern {\n return { type: \"Group\", pattern };\n}\n\n/**\n * Gets paths with captures for a meta pattern.\n */\nexport function metaPatternPathsWithCaptures(\n pattern: MetaPattern,\n haystack: Envelope,\n): [Path[], Map<string, Path[]>] {\n switch (pattern.type) {\n case \"Any\":\n return pattern.pattern.pathsWithCaptures(haystack);\n case \"And\":\n return pattern.pattern.pathsWithCaptures(haystack);\n case \"Or\":\n return pattern.pattern.pathsWithCaptures(haystack);\n case \"Not\":\n return pattern.pattern.pathsWithCaptures(haystack);\n case \"Capture\":\n return pattern.pattern.pathsWithCaptures(haystack);\n case \"Search\":\n return pattern.pattern.pathsWithCaptures(haystack);\n case \"Traverse\":\n return pattern.pattern.pathsWithCaptures(haystack);\n case \"Group\":\n return pattern.pattern.pathsWithCaptures(haystack);\n }\n}\n\n/**\n * Compiles a meta pattern to bytecode.\n */\nexport function metaPatternCompile(\n pattern: MetaPattern,\n code: Instr[],\n literals: Pattern[],\n captures: string[],\n): void {\n switch (pattern.type) {\n case \"Any\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"And\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"Or\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"Not\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"Capture\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"Search\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"Traverse\":\n pattern.pattern.compile(code, literals, captures);\n break;\n case \"Group\":\n pattern.pattern.compile(code, literals, captures);\n break;\n }\n}\n\n/**\n * Checks if a meta pattern is complex.\n */\nexport function metaPatternIsComplex(pattern: MetaPattern): boolean {\n switch (pattern.type) {\n case \"Any\":\n return pattern.pattern.isComplex();\n case \"And\":\n return pattern.pattern.isComplex();\n case \"Or\":\n return pattern.pattern.isComplex();\n case \"Not\":\n return pattern.pattern.isComplex();\n case \"Capture\":\n return pattern.pattern.isComplex();\n case \"Search\":\n return pattern.pattern.isComplex();\n case \"Traverse\":\n return pattern.pattern.isComplex();\n case \"Group\":\n return pattern.pattern.isComplex();\n }\n}\n\n/**\n * Converts a meta pattern to string.\n */\nexport function metaPatternToString(pattern: MetaPattern): string {\n switch (pattern.type) {\n case \"Any\":\n return pattern.pattern.toString();\n case \"And\":\n return pattern.pattern.toString();\n case \"Or\":\n return pattern.pattern.toString();\n case \"Not\":\n return pattern.pattern.toString();\n case \"Capture\":\n return pattern.pattern.toString();\n case \"Search\":\n return pattern.pattern.toString();\n case \"Traverse\":\n return pattern.pattern.toString();\n case \"Group\":\n return pattern.pattern.toString();\n }\n}\n\n/**\n * Collects capture names from a meta pattern.\n */\nexport function metaPatternCollectCaptureNames(pattern: MetaPattern, out: string[]): void {\n switch (pattern.type) {\n case \"Any\":\n // No captures\n break;\n case \"And\":\n for (const pat of pattern.pattern.patterns()) {\n collectCaptureNamesFromPattern(pat, out);\n }\n break;\n case \"Or\":\n for (const pat of pattern.pattern.patterns()) {\n collectCaptureNamesFromPattern(pat, out);\n }\n break;\n case \"Not\":\n collectCaptureNamesFromPattern(pattern.pattern.pattern(), out);\n break;\n case \"Capture\": {\n const name = pattern.pattern.name();\n if (!out.includes(name)) {\n out.push(name);\n }\n collectCaptureNamesFromPattern(pattern.pattern.pattern(), out);\n break;\n }\n case \"Search\":\n collectCaptureNamesFromPattern(pattern.pattern.pattern(), out);\n break;\n case \"Traverse\":\n for (const pat of pattern.pattern.patterns()) {\n collectCaptureNamesFromPattern(pat, out);\n }\n break;\n case \"Group\":\n collectCaptureNamesFromPattern(pattern.pattern.pattern(), out);\n break;\n }\n}\n\n/**\n * Helper to collect capture names from any Pattern.\n */\nfunction collectCaptureNamesFromPattern(pattern: Pattern, out: string[]): void {\n // This will be properly implemented when Pattern type is fully defined\n const p = pattern as unknown as { collectCaptureNames?: (out: string[]) => void };\n if (p.collectCaptureNames !== undefined) {\n p.collectCaptureNames(out);\n }\n}\n","/**\n * @bcts/envelope-pattern - VM instructions and executor\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust vm.rs\n * Tiny Thompson-style VM for walking Gordian Envelope trees.\n *\n * @module envelope-pattern/pattern/vm\n */\n\nimport type { Envelope } from \"@bcts/envelope\";\nimport type { Quantifier } from \"@bcts/dcbor-pattern\";\nimport { Reluctance } from \"@bcts/dcbor-pattern\";\nimport type { Path } from \"../format\";\n\n// Forward declaration - will be set by pattern/index.ts to avoid circular deps\nlet _patternPathsWithCaptures: (pattern: Pattern, env: Envelope) => [Path[], Map<string, Path[]>];\nlet _patternMatches: (pattern: Pattern, env: Envelope) => boolean;\nlet _patternPaths: (pattern: Pattern, env: Envelope) => Path[];\n\n/**\n * Register the pattern matching functions to resolve circular dependencies.\n */\nexport function registerVMPatternFunctions(\n pathsWithCaptures: (pattern: Pattern, env: Envelope) => [Path[], Map<string, Path[]>],\n matches: (pattern: Pattern, env: Envelope) => boolean,\n paths: (pattern: Pattern, env: Envelope) => Path[],\n): void {\n _patternPathsWithCaptures = pathsWithCaptures;\n _patternMatches = matches;\n _patternPaths = paths;\n}\n\n// Import Pattern type - this creates a circular dependency that we resolve via registration\nimport type { Pattern } from \"./index\";\nimport { leafPatternPathsWithCaptures } from \"./leaf\";\nimport { structurePatternPathsWithCaptures, structurePatternPaths } from \"./structure\";\n\n/**\n * Axis for envelope traversal.\n *\n * Corresponds to the Rust `Axis` enum in vm.rs\n */\nexport type Axis = \"Subject\" | \"Assertion\" | \"Predicate\" | \"Object\" | \"Wrapped\";\n\n/**\n * Edge type for envelope traversal.\n */\nexport type EdgeType = \"Subject\" | \"Assertion\" | \"Predicate\" | \"Object\" | \"Content\";\n\n/**\n * Returns (child, EdgeType) pairs reachable from env via this axis.\n */\nexport function axisChildren(axis: Axis, env: Envelope): [Envelope, EdgeType][] {\n const envCase = env.case();\n\n switch (axis) {\n case \"Subject\": {\n if (envCase.type === \"node\") {\n return [[envCase.subject, \"Subject\"]];\n }\n return [];\n }\n case \"Assertion\": {\n if (envCase.type === \"node\") {\n return envCase.assertions.map((a) => [a, \"Assertion\"] as [Envelope, EdgeType]);\n }\n return [];\n }\n case \"Predicate\": {\n if (envCase.type === \"assertion\") {\n return [[envCase.assertion.predicate(), \"Predicate\"]];\n }\n return [];\n }\n case \"Object\": {\n if (envCase.type === \"assertion\") {\n return [[envCase.assertion.object(), \"Object\"]];\n }\n return [];\n }\n case \"Wrapped\": {\n if (envCase.type === \"node\") {\n const subject = envCase.subject;\n if (subject.isWrapped()) {\n const unwrapped = subject.unwrap();\n if (unwrapped !== undefined) {\n return [[unwrapped, \"Content\"]];\n }\n }\n } else if (envCase.type === \"wrapped\") {\n return [[envCase.envelope, \"Content\"]];\n }\n return [];\n }\n }\n}\n\n/**\n * VM instructions for pattern matching.\n *\n * Corresponds to the Rust `Instr` enum in vm.rs\n */\nexport type Instr =\n | { readonly type: \"MatchPredicate\"; readonly literalIndex: number }\n | { readonly type: \"MatchStructure\"; readonly literalIndex: number }\n | { readonly type: \"Split\"; readonly a: number; readonly b: number }\n | { readonly type: \"Jump\"; readonly address: number }\n | { readonly type: \"PushAxis\"; readonly axis: Axis }\n | { readonly type: \"Pop\" }\n | { readonly type: \"Save\" }\n | { readonly type: \"Accept\" }\n | {\n readonly type: \"Search\";\n readonly patternIndex: number;\n readonly captureMap: [string, number][];\n }\n | { readonly type: \"ExtendTraversal\" }\n | { readonly type: \"CombineTraversal\" }\n | { readonly type: \"NavigateSubject\" }\n | { readonly type: \"NotMatch\"; readonly patternIndex: number }\n | { readonly type: \"Repeat\"; readonly patternIndex: number; readonly quantifier: Quantifier }\n | { readonly type: \"CaptureStart\"; readonly captureIndex: number }\n | { readonly type: \"CaptureEnd\"; readonly captureIndex: number };\n\n/**\n * Compiled program for the VM.\n */\nexport interface Program {\n readonly code: Instr[];\n readonly literals: Pattern[];\n readonly captureNames: string[];\n}\n\n/**\n * Internal back-tracking state.\n */\ninterface Thread {\n pc: number;\n env: Envelope;\n path: Path;\n savedPaths: Path[];\n captures: Path[][];\n captureStack: number[][];\n seen: Set<string>;\n}\n\n/**\n * Clone a thread for forking.\n */\nfunction cloneThread(th: Thread): Thread {\n return {\n pc: th.pc,\n env: th.env,\n path: [...th.path],\n savedPaths: th.savedPaths.map((p) => [...p]),\n captures: th.captures.map((c) => c.map((p) => [...p])),\n captureStack: th.captureStack.map((s) => [...s]),\n seen: new Set(th.seen),\n };\n}\n\n/**\n * Get a unique key for a path based on envelope digests.\n */\nfunction pathKey(path: Path): string {\n return path.map((e) => e.digest().hex()).join(\",\");\n}\n\n/**\n * Match atomic patterns without recursion into the VM.\n *\n * This function handles only the patterns that are safe to use in\n * MatchPredicate instructions - Leaf, Structure, Any patterns.\n */\nfunction atomicPathsWithCaptures(p: Pattern, env: Envelope): [Path[], Map<string, Path[]>] {\n switch (p.type) {\n case \"Leaf\":\n return leafPatternPathsWithCaptures(p.pattern, env);\n case \"Structure\":\n return structurePatternPathsWithCaptures(p.pattern, env);\n case \"Meta\":\n if (p.pattern.type === \"Any\") {\n return p.pattern.pattern.pathsWithCaptures(env);\n }\n if (p.pattern.type === \"Search\") {\n throw new Error(\n \"SearchPattern should be compiled to Search instruction, not MatchPredicate\",\n );\n }\n throw new Error(`non-atomic meta pattern used in MatchPredicate: ${p.pattern.type}`);\n }\n}\n\n/**\n * Execute repeat pattern matching.\n */\nfunction repeatPaths(\n pat: Pattern,\n env: Envelope,\n path: Path,\n quantifier: Quantifier,\n): [Envelope, Path][] {\n // Build states for all possible repetition counts\n const states: [Envelope, Path][][] = [[[env, [...path]]]];\n const bound = quantifier.max() ?? Number.MAX_SAFE_INTEGER;\n\n // Try matching the pattern repeatedly\n for (let i = 0; i < bound; i++) {\n const next: [Envelope, Path][] = [];\n const lastState = states[states.length - 1];\n\n for (const [e, pth] of lastState) {\n const subPaths = _patternPaths(pat, e);\n for (const subPath of subPaths) {\n const last = subPath[subPath.length - 1];\n if (last?.digest().hex() === e.digest().hex()) {\n continue; // Avoid infinite loops\n }\n if (last !== undefined) {\n const combined = [...pth];\n if (subPath[0]?.digest().hex() === e.digest().hex()) {\n combined.push(...subPath.slice(1));\n } else {\n combined.push(...subPath);\n }\n next.push([last, combined]);\n }\n }\n }\n\n if (next.length === 0) {\n break; // No more matches possible\n }\n states.push(next);\n }\n\n // Zero repetition case\n const hasZeroRep = quantifier.min() === 0;\n const zeroRepResult: [Envelope, Path][] = hasZeroRep ? [[env, [...path]]] : [];\n\n // Calculate maximum allowed repetitions\n const maxPossible = states.length - 1;\n const maxAllowed = Math.min(bound, maxPossible);\n\n // Check if we can satisfy the minimum repetition requirement\n if (maxAllowed < quantifier.min() && quantifier.min() > 0) {\n return [];\n }\n\n // Calculate the range of repetition counts based on min and max\n const minCount = quantifier.min() === 0 ? 1 : quantifier.min();\n if (maxAllowed < minCount) {\n return zeroRepResult;\n }\n const maxCount = maxAllowed;\n\n // Generate list of counts to try based on reluctance\n let counts: number[];\n switch (quantifier.reluctance()) {\n case Reluctance.Greedy: {\n counts = [];\n for (let c = maxCount; c >= minCount; c--) {\n counts.push(c);\n }\n break;\n }\n case Reluctance.Lazy: {\n counts = [];\n for (let c = minCount; c <= maxCount; c++) {\n counts.push(c);\n }\n break;\n }\n case Reluctance.Possessive: {\n counts = maxCount >= minCount ? [maxCount] : [];\n break;\n }\n }\n\n // Collect results based on the counts determined above\n const out: [Envelope, Path][] = [];\n\n if (quantifier.reluctance() === Reluctance.Greedy) {\n // Include results from counts determined by reluctance\n for (const c of counts) {\n const list = states[c];\n if (list !== undefined) {\n out.push(...list);\n }\n }\n\n // For greedy matching, add zero repetition case at the end if applicable\n if (hasZeroRep && out.length === 0) {\n out.push([env, [...path]]);\n }\n } else {\n // For lazy/possessive, include zero repetition first if applicable\n if (hasZeroRep) {\n out.push([env, [...path]]);\n }\n\n // Then include results from counts determined by reluctance\n for (const c of counts) {\n const list = states[c];\n if (list !== undefined) {\n out.push(...list);\n }\n }\n }\n\n return out;\n}\n\n/**\n * Execute a single thread until it halts.\n * Returns true if any paths were produced.\n */\nfunction runThread(prog: Program, start: Thread, out: [Path, Path[][]][]): boolean {\n let produced = false;\n const stack: Thread[] = [start];\n\n while (stack.length > 0) {\n const th = stack.pop();\n if (th === undefined) break;\n\n while (true) {\n const instr = prog.code[th.pc];\n\n switch (instr.type) {\n case \"MatchPredicate\": {\n const [paths, patternCaptures] = atomicPathsWithCaptures(\n prog.literals[instr.literalIndex],\n th.env,\n );\n\n if (paths.length === 0) {\n break; // Kill thread\n }\n\n th.pc += 1;\n\n // Distribute captures fairly across paths\n const distributedCaptures: Map<string, Path[]>[] = paths.map(\n () => new Map<string, Path[]>(),\n );\n\n for (const [name, capturePaths] of patternCaptures) {\n if (capturePaths.length === paths.length) {\n // Distribute 1:1\n for (let pathIdx = 0; pathIdx < capturePaths.length; pathIdx++) {\n if (pathIdx < distributedCaptures.length) {\n const existing = distributedCaptures[pathIdx].get(name) ?? [];\n existing.push(capturePaths[pathIdx]);\n distributedCaptures[pathIdx].set(name, existing);\n }\n }\n } else {\n // Fallback: give all captures to the first path\n if (distributedCaptures.length > 0) {\n const existing = distributedCaptures[0].get(name) ?? [];\n existing.push(...capturePaths);\n distributedCaptures[0].set(name, existing);\n }\n }\n }\n\n // Use first path for current thread\n const firstPath = paths[0];\n if (firstPath.length === 1 && firstPath[0].digest().hex() === th.env.digest().hex()) {\n // Simple atomic match - keep existing path and environment\n } else {\n // Extended path - use the full extended path\n th.path = [...firstPath];\n const lastEnv = firstPath[firstPath.length - 1];\n if (lastEnv !== undefined) {\n th.env = lastEnv;\n }\n }\n\n // Add distributed captures for this path\n const pathCaptures = distributedCaptures[0];\n if (pathCaptures !== undefined) {\n for (const [name, capPaths] of pathCaptures) {\n const captureIdx = prog.captureNames.indexOf(name);\n if (captureIdx >= 0 && captureIdx < th.captures.length) {\n th.captures[captureIdx].push(...capPaths);\n }\n }\n }\n\n // Spawn threads for remaining paths in reverse order\n for (let i = paths.length - 1; i >= 1; i--) {\n const fork = cloneThread(th);\n // Reset captures for the fork\n for (const captureVec of fork.captures) {\n captureVec.length = 0;\n }\n const pathI = paths[i];\n if (pathI === undefined) continue;\n fork.path = [...pathI];\n const lastEnv = pathI[pathI.length - 1];\n if (lastEnv !== undefined) {\n fork.env = lastEnv;\n }\n\n // Add distributed captures for this path\n const forkCaptures = distributedCaptures[i];\n if (forkCaptures !== undefined) {\n for (const [name, capPaths] of forkCaptures) {\n const captureIdx = prog.captureNames.indexOf(name);\n if (captureIdx >= 0 && captureIdx < fork.captures.length) {\n fork.captures[captureIdx].push(...capPaths);\n }\n }\n }\n\n stack.push(fork);\n }\n continue;\n }\n\n case \"MatchStructure\": {\n const literal = prog.literals[instr.literalIndex];\n if (literal.type !== \"Structure\") {\n throw new Error(\"MatchStructure used with non-structure pattern\");\n }\n\n const structurePaths = structurePatternPaths(literal.pattern, th.env);\n\n if (structurePaths.length === 0) {\n break; // Kill thread\n }\n\n th.pc += 1;\n\n // Use first path for current thread\n const firstStructPath = structurePaths[0];\n if (firstStructPath !== undefined) {\n th.path = [...firstStructPath];\n const firstLast = firstStructPath[firstStructPath.length - 1];\n if (firstLast !== undefined) {\n th.env = firstLast;\n }\n }\n\n // Spawn threads for remaining paths\n for (let i = structurePaths.length - 1; i >= 1; i--) {\n const structPathI = structurePaths[i];\n if (structPathI === undefined) continue;\n const fork = cloneThread(th);\n fork.path = [...structPathI];\n const lastEnv = structPathI[structPathI.length - 1];\n if (lastEnv !== undefined) {\n fork.env = lastEnv;\n }\n stack.push(fork);\n }\n continue;\n }\n\n case \"Split\": {\n const fork = cloneThread(th);\n fork.pc = instr.a;\n stack.push(fork);\n th.pc = instr.b;\n continue;\n }\n\n case \"Jump\": {\n th.pc = instr.address;\n continue;\n }\n\n case \"PushAxis\": {\n th.pc += 1;\n const children = axisChildren(instr.axis, th.env);\n for (const [child, _edge] of children) {\n const fork = cloneThread(th);\n fork.env = child;\n fork.path.push(child);\n stack.push(fork);\n }\n break; // Parent path stops here\n }\n\n case \"Pop\": {\n th.path.pop();\n th.pc += 1;\n continue;\n }\n\n case \"Save\": {\n out.push([[...th.path], th.captures.map((c) => c.map((p) => [...p]))]);\n produced = true;\n th.pc += 1;\n continue;\n }\n\n case \"Accept\": {\n out.push([[...th.path], th.captures.map((c) => c.map((p) => [...p]))]);\n produced = true;\n break; // Halt thread\n }\n\n case \"Search\": {\n const inner = prog.literals[instr.patternIndex];\n if (inner === undefined) break;\n const [foundPaths, caps] = _patternPathsWithCaptures(inner, th.env);\n\n if (foundPaths.length > 0) {\n produced = true;\n for (const foundPath of foundPaths) {\n const resultPath = [...th.path];\n if (foundPath[0]?.digest().hex() === th.env.digest().hex()) {\n resultPath.push(...foundPath.slice(1));\n } else {\n resultPath.push(...foundPath);\n }\n\n const resultCaps = th.captures.map((c) => c.map((p) => [...p]));\n for (const [name, idx] of instr.captureMap) {\n const pths = caps.get(name);\n if (pths !== undefined) {\n resultCaps[idx].push(...pths);\n }\n }\n\n const key = pathKey(resultPath);\n if (!th.seen.has(key)) {\n th.seen.add(key);\n out.push([resultPath, resultCaps]);\n }\n }\n }\n\n // Always walk children (same traversal as Envelope::walk)\n const allChildren: Envelope[] = [];\n const envCase = th.env.case();\n\n switch (envCase.type) {\n case \"node\": {\n allChildren.push(envCase.subject);\n for (const assertion of envCase.assertions) {\n allChildren.push(assertion);\n }\n break;\n }\n case \"wrapped\": {\n allChildren.push(envCase.envelope);\n break;\n }\n case \"assertion\": {\n allChildren.push(envCase.assertion.predicate());\n allChildren.push(envCase.assertion.object());\n break;\n }\n case \"elided\":\n case \"encrypted\":\n case \"compressed\":\n case \"leaf\":\n case \"knownValue\":\n // These envelope types have no children to traverse\n break;\n }\n\n // Push child threads in reverse order\n for (let i = allChildren.length - 1; i >= 0; i--) {\n const child = allChildren[i];\n if (child === undefined) continue;\n const fork = cloneThread(th);\n fork.env = child;\n fork.path.push(child);\n stack.push(fork);\n }\n\n break; // This thread is done\n }\n\n case \"ExtendTraversal\": {\n const lastEnv = th.path[th.path.length - 1];\n if (lastEnv !== undefined) {\n th.savedPaths.push([...th.path]);\n th.env = lastEnv;\n th.path = [lastEnv]; // Start fresh path from the last envelope\n }\n th.pc += 1;\n continue;\n }\n\n case \"CombineTraversal\": {\n const savedPath = th.savedPaths.pop();\n if (savedPath !== undefined) {\n const combined = [...savedPath];\n const savedLast = savedPath[savedPath.length - 1];\n\n if (\n savedLast?.digest().hex() === th.path[0]?.digest().hex() &&\n savedLast !== undefined\n ) {\n // Skip first element to avoid duplication\n combined.push(...th.path.slice(1));\n } else {\n combined.push(...th.path);\n }\n\n th.path = combined;\n }\n th.pc += 1;\n continue;\n }\n\n case \"NavigateSubject\": {\n if (th.env.isNode()) {\n const subject = th.env.subject();\n th.env = subject;\n th.path.push(subject);\n }\n th.pc += 1;\n continue;\n }\n\n case \"NotMatch\": {\n const pattern = prog.literals[instr.patternIndex];\n const patternMatches = _patternMatches(pattern, th.env);\n\n if (patternMatches) {\n // Inner pattern matches, so NOT pattern fails - kill thread\n break;\n } else {\n // Inner pattern doesn't match, so NOT pattern succeeds\n th.pc += 1;\n continue;\n }\n }\n\n case \"Repeat\": {\n const pat = prog.literals[instr.patternIndex];\n const results = repeatPaths(pat, th.env, th.path, instr.quantifier);\n\n if (results.length === 0) {\n break; // Kill thread\n }\n\n const nextPc = th.pc + 1;\n let success = false;\n\n for (const [envAfter, pathAfter] of results) {\n const fork = cloneThread(th);\n fork.pc = nextPc;\n fork.env = envAfter;\n fork.path = pathAfter;\n\n if (runThread(prog, fork, out)) {\n produced = true;\n success = true;\n break;\n }\n }\n\n if (!success) {\n // None of the repetition counts allowed the rest to match\n }\n break;\n }\n\n case \"CaptureStart\": {\n const id = instr.captureIndex;\n if (id < th.captureStack.length) {\n th.captureStack[id].push(th.path.length - 1);\n }\n th.pc += 1;\n continue;\n }\n\n case \"CaptureEnd\": {\n const id = instr.captureIndex;\n if (id < th.captureStack.length) {\n const startIdx = th.captureStack[id].pop();\n if (startIdx !== undefined && id < th.captures.length) {\n let end = th.path.length;\n // Check if next instruction is ExtendTraversal\n const nextInstr = prog.code[th.pc + 1];\n if (nextInstr?.type === \"ExtendTraversal\") {\n end = Math.max(0, end - 1);\n }\n const cap = th.path.slice(startIdx, end);\n th.captures[id].push(cap);\n }\n }\n th.pc += 1;\n continue;\n }\n }\n\n // If we get here without continue, break out of the inner loop\n break;\n }\n }\n\n return produced;\n}\n\n/**\n * Execute prog starting at root.\n * Every time SAVE or ACCEPT executes, the current path is pushed into the result.\n */\nexport function run(prog: Program, root: Envelope): [Path, Map<string, Path[]>][] {\n const out: [Path, Path[][]][] = [];\n\n const start: Thread = {\n pc: 0,\n env: root,\n path: [root],\n savedPaths: [],\n captures: prog.captureNames.map(() => []),\n captureStack: prog.captureNames.map(() => []),\n seen: new Set(),\n };\n\n runThread(prog, start, out);\n\n return out.map(([path, caps]) => {\n const map = new Map<string, Path[]>();\n for (let i = 0; i < caps.length; i++) {\n const paths = caps[i];\n if (paths.length > 0) {\n map.set(prog.captureNames[i], paths);\n }\n }\n return [path, map];\n });\n}\n\n/**\n * Compile a pattern to bytecode program.\n */\nexport function compile(pattern: Pattern): Program {\n const code: Instr[] = [];\n const literals: Pattern[] = [];\n const captureNames: string[] = [];\n\n // Collect capture names first\n collectCaptureNames(pattern, captureNames);\n\n // Compile the pattern\n compilePattern(pattern, code, literals, captureNames);\n\n // Add final Accept instruction\n code.push({ type: \"Accept\" });\n\n return { code, literals, captureNames };\n}\n\n/**\n * Collect capture names from a pattern recursively.\n */\nfunction collectCaptureNames(pattern: Pattern, out: string[]): void {\n switch (pattern.type) {\n case \"Leaf\":\n // Leaf patterns don't have captures\n break;\n case \"Structure\":\n // Structure patterns may have nested patterns with captures\n collectStructureCaptureNames(pattern.pattern, out);\n break;\n case \"Meta\":\n collectMetaCaptureNames(pattern.pattern, out);\n break;\n }\n}\n\nimport type { StructurePattern } from \"./structure\";\nimport type { MetaPattern } from \"./meta\";\n\nfunction collectStructureCaptureNames(pattern: StructurePattern, out: string[]): void {\n switch (pattern.type) {\n case \"Subject\": {\n const inner = pattern.pattern.innerPattern();\n if (inner !== undefined) {\n collectCaptureNames(inner, out);\n }\n break;\n }\n case \"Predicate\": {\n const inner = pattern.pattern.innerPattern();\n if (inner !== undefined) {\n collectCaptureNames(inner, out);\n }\n break;\n }\n case \"Object\": {\n const inner = pattern.pattern.innerPattern();\n if (inner !== undefined) {\n collectCaptureNames(inner, out);\n }\n break;\n }\n case \"Assertions\": {\n const predPat = pattern.pattern.predicatePattern();\n if (predPat !== undefined) {\n collectCaptureNames(predPat, out);\n }\n const objPat = pattern.pattern.objectPattern();\n if (objPat !== undefined) {\n collectCaptureNames(objPat, out);\n }\n break;\n }\n case \"Node\": {\n const subjPat = pattern.pattern.subjectPattern();\n if (subjPat !== undefined) {\n collectCaptureNames(subjPat, out);\n }\n for (const assertionPat of pattern.pattern.assertionPatterns()) {\n collectCaptureNames(assertionPat, out);\n }\n break;\n }\n case \"Wrapped\": {\n const inner = pattern.pattern.innerPattern();\n if (inner !== undefined) {\n collectCaptureNames(inner, out);\n }\n break;\n }\n case \"Digest\":\n case \"Obscured\":\n case \"Leaf\":\n // These don't have nested patterns\n break;\n }\n}\n\nfunction collectMetaCaptureNames(pattern: MetaPattern, out: string[]): void {\n switch (pattern.type) {\n case \"Any\":\n // No captures\n break;\n case \"And\":\n for (const p of pattern.pattern.patterns()) {\n collectCaptureNames(p, out);\n }\n break;\n case \"Or\":\n for (const p of pattern.pattern.patterns()) {\n collectCaptureNames(p, out);\n }\n break;\n case \"Not\":\n collectCaptureNames(pattern.pattern.pattern(), out);\n break;\n case \"Capture\": {\n const name = pattern.pattern.name();\n if (!out.includes(name)) {\n out.push(name);\n }\n collectCaptureNames(pattern.pattern.pattern(), out);\n break;\n }\n case \"Search\":\n collectCaptureNames(pattern.pattern.pattern(), out);\n break;\n case \"Traverse\":\n for (const p of pattern.pattern.patterns()) {\n collectCaptureNames(p, out);\n }\n break;\n case \"Group\":\n collectCaptureNames(pattern.pattern.pattern(), out);\n break;\n }\n}\n\n/**\n * Compile a pattern to bytecode.\n */\nfunction compilePattern(\n pattern: Pattern,\n code: Instr[],\n literals: Pattern[],\n captureNames: string[],\n): void {\n switch (pattern.type) {\n case \"Leaf\":\n case \"Structure\":\n // Atomic patterns use MatchPredicate\n literals.push(pattern);\n code.push({ type: \"MatchPredicate\", literalIndex: literals.length - 1 });\n break;\n case \"Meta\":\n compileMetaPattern(pattern.pattern, code, literals, captureNames);\n break;\n }\n}\n\nfunction compileMetaPattern(\n pattern: MetaPattern,\n code: Instr[],\n literals: Pattern[],\n captureNames: string[],\n): void {\n switch (pattern.type) {\n case \"Any\": {\n // Any matches everything - add as atomic\n const anyPattern: Pattern = { type: \"Meta\", pattern };\n literals.push(anyPattern);\n code.push({ type: \"MatchPredicate\", literalIndex: literals.length - 1 });\n break;\n }\n case \"And\": {\n // All patterns must match at the same position\n const patterns = pattern.pattern.patterns();\n for (const p of patterns) {\n compilePattern(p, code, literals, captureNames);\n }\n break;\n }\n case \"Or\": {\n // Try each pattern with Split/Jump\n const patterns = pattern.pattern.patterns();\n if (patterns.length === 0) return;\n if (patterns.length === 1) {\n compilePattern(patterns[0], code, literals, captureNames);\n return;\n }\n\n // Create split chain\n const jumpAddresses: number[] = [];\n for (let i = 0; i < patterns.length - 1; i++) {\n const splitAddr = code.length;\n code.push({ type: \"Split\", a: 0, b: 0 }); // Placeholder\n\n // First branch\n const aStart = code.length;\n compilePattern(patterns[i], code, literals, captureNames);\n jumpAddresses.push(code.length);\n code.push({ type: \"Jump\", address: 0 }); // Placeholder\n\n // Update split to point to first branch and next split\n const bStart = code.length;\n (code[splitAddr] as { type: \"Split\"; a: number; b: number }).a = aStart;\n (code[splitAddr] as { type: \"Split\"; a: number; b: number }).b = bStart;\n }\n\n // Last pattern (no split needed)\n compilePattern(patterns[patterns.length - 1], code, literals, captureNames);\n\n // Update all jumps to point after the Or\n const endAddr = code.length;\n for (const jumpAddr of jumpAddresses) {\n (code[jumpAddr] as { type: \"Jump\"; address: number }).address = endAddr;\n }\n break;\n }\n case \"Not\": {\n // Use NotMatch instruction\n const innerPattern = pattern.pattern.pattern();\n literals.push(innerPattern);\n code.push({ type: \"NotMatch\", patternIndex: literals.length - 1 });\n break;\n }\n case \"Capture\": {\n const name = pattern.pattern.name();\n const captureIndex = captureNames.indexOf(name);\n\n code.push({ type: \"CaptureStart\", captureIndex });\n compilePattern(pattern.pattern.pattern(), code, literals, captureNames);\n code.push({ type: \"CaptureEnd\", captureIndex });\n break;\n }\n case \"Search\": {\n // Build capture map\n const innerCaptureNames: string[] = [];\n collectCaptureNames(pattern.pattern.pattern(), innerCaptureNames);\n\n const captureMap: [string, number][] = innerCaptureNames.map((name) => {\n const idx = captureNames.indexOf(name);\n return [name, idx >= 0 ? idx : 0];\n });\n\n literals.push(pattern.pattern.pattern());\n code.push({\n type: \"Search\",\n patternIndex: literals.length - 1,\n captureMap,\n });\n break;\n }\n case \"Traverse\": {\n const patterns = pattern.pattern.patterns();\n for (let i = 0; i < patterns.length; i++) {\n const pat = patterns[i];\n if (pat === undefined) continue;\n compilePattern(pat, code, literals, captureNames);\n if (i < patterns.length - 1) {\n code.push({ type: \"ExtendTraversal\" });\n }\n }\n if (patterns.length > 1) {\n code.push({ type: \"CombineTraversal\" });\n }\n break;\n }\n case \"Group\": {\n const quantifier = pattern.pattern.quantifier();\n if (quantifier !== undefined) {\n // Repeat pattern\n literals.push(pattern.pattern.pattern());\n code.push({\n type: \"Repeat\",\n patternIndex: literals.length - 1,\n quantifier,\n });\n } else {\n // Simple grouping\n compilePattern(pattern.pattern.pattern(), code, literals, captureNames);\n }\n break;\n }\n }\n}\n","/**\n * @bcts/envelope-pattern - Pattern module\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust pattern/mod.rs\n *\n * @module envelope-pattern/pattern\n */\n\nimport type { Envelope, Digest } from \"@bcts/envelope\";\nimport type { CborInput, CborDate, Tag } from \"@bcts/dcbor\";\nimport type { KnownValue } from \"@bcts/known-values\";\nimport { UNIT as KNOWN_VALUE_UNIT } from \"@bcts/known-values\";\nimport {\n type Pattern as DCBORPattern,\n Quantifier,\n Interval,\n Reluctance,\n} from \"@bcts/dcbor-pattern\";\n\nimport type { Path } from \"../format\";\nimport type { Instr } from \"./vm\";\n\n// Re-export sub-modules\nexport * from \"./leaf\";\nexport * from \"./structure\";\nexport * from \"./meta\";\nexport * from \"./matcher\";\nexport * from \"./vm\";\n\n// Import leaf patterns\nimport {\n type LeafPattern,\n leafCbor,\n leafNumber,\n leafText,\n leafByteString,\n leafTag,\n leafArray,\n leafMap,\n leafBool,\n leafNull,\n leafDate,\n leafKnownValue,\n leafPatternPathsWithCaptures,\n leafPatternCompile,\n leafPatternIsComplex,\n leafPatternToString,\n CBORPattern,\n BoolPattern,\n NullPattern,\n NumberPattern,\n TextPattern,\n ByteStringPattern,\n DatePattern,\n ArrayPattern,\n MapPattern,\n KnownValuePattern,\n TaggedPattern,\n registerBoolPatternFactory,\n registerNullPatternFactory,\n registerNumberPatternFactory,\n registerTextPatternFactory,\n registerByteStringPatternFactory,\n registerDatePatternFactory,\n registerArrayPatternFactory,\n registerMapPatternFactory,\n registerKnownValuePatternFactory,\n registerTaggedPatternFactory,\n registerCBORPatternFactory,\n} from \"./leaf\";\n\n// Import structure patterns\nimport {\n type StructurePattern,\n structureLeaf,\n structureSubject,\n structurePredicate,\n structureObject,\n structureAssertions,\n structureDigest,\n structureNode,\n structureObscured,\n structureWrapped,\n structurePatternPathsWithCaptures,\n structurePatternCompile,\n structurePatternIsComplex,\n structurePatternToString,\n LeafStructurePattern,\n SubjectPattern,\n PredicatePattern,\n ObjectPattern,\n AssertionsPattern,\n DigestPattern,\n NodePattern,\n ObscuredPattern,\n WrappedPattern,\n registerLeafStructurePatternFactory,\n registerSubjectPatternFactory,\n registerPredicatePatternFactory,\n registerObjectPatternFactory,\n registerAssertionsPatternFactory,\n registerDigestPatternFactory,\n registerNodePatternFactory,\n registerObscuredPatternFactory,\n registerWrappedPatternFactory,\n} from \"./structure\";\n\n// Import meta patterns\nimport {\n type MetaPattern,\n metaAny,\n metaAnd,\n metaOr,\n metaNot,\n metaCapture,\n metaSearch,\n metaTraverse,\n metaGroup,\n metaPatternPathsWithCaptures,\n metaPatternCompile,\n metaPatternIsComplex,\n metaPatternToString,\n metaPatternCollectCaptureNames,\n AnyPattern,\n AndPattern,\n OrPattern,\n NotPattern,\n CapturePattern,\n SearchPattern,\n TraversePattern,\n GroupPattern,\n registerAnyPatternFactory,\n registerAndPatternFactory,\n registerOrPatternFactory,\n registerNotPatternFactory,\n registerCapturePatternFactory,\n registerSearchPatternFactory,\n registerTraversePatternFactory,\n registerGroupPatternFactory,\n} from \"./meta\";\n\n/**\n * The main pattern type used for matching envelopes.\n *\n * Corresponds to the Rust `Pattern` enum in pattern/mod.rs\n */\nexport type Pattern =\n | { readonly type: \"Leaf\"; readonly pattern: LeafPattern }\n | { readonly type: \"Structure\"; readonly pattern: StructurePattern }\n | { readonly type: \"Meta\"; readonly pattern: MetaPattern };\n\n// Pattern factory functions\n/**\n * Creates a Leaf pattern.\n */\nexport function patternLeaf(leaf: LeafPattern): Pattern {\n return { type: \"Leaf\", pattern: leaf };\n}\n\n/**\n * Creates a Structure pattern.\n */\nexport function patternStructure(structure: StructurePattern): Pattern {\n return { type: \"Structure\", pattern: structure };\n}\n\n/**\n * Creates a Meta pattern.\n */\nexport function patternMeta(meta: MetaPattern): Pattern {\n return { type: \"Meta\", pattern: meta };\n}\n\n// ============================================================================\n// Pattern Matcher Implementation\n// ============================================================================\n\n/**\n * Gets paths with captures for a pattern.\n */\nexport function patternPathsWithCaptures(\n pattern: Pattern,\n haystack: Envelope,\n): [Path[], Map<string, Path[]>] {\n switch (pattern.type) {\n case \"Leaf\":\n return leafPatternPathsWithCaptures(pattern.pattern, haystack);\n case \"Structure\":\n return structurePatternPathsWithCaptures(pattern.pattern, haystack);\n case \"Meta\":\n return metaPatternPathsWithCaptures(pattern.pattern, haystack);\n }\n}\n\n/**\n * Gets paths for a pattern.\n */\nexport function patternPaths(pattern: Pattern, haystack: Envelope): Path[] {\n return patternPathsWithCaptures(pattern, haystack)[0];\n}\n\n/**\n * Checks if a pattern matches.\n */\nexport function patternMatches(pattern: Pattern, haystack: Envelope): boolean {\n return patternPaths(pattern, haystack).length > 0;\n}\n\n/**\n * Checks if a pattern is complex.\n */\nexport function patternIsComplex(pattern: Pattern): boolean {\n switch (pattern.type) {\n case \"Leaf\":\n return leafPatternIsComplex(pattern.pattern);\n case \"Structure\":\n return structurePatternIsComplex(pattern.pattern);\n case \"Meta\":\n return metaPatternIsComplex(pattern.pattern);\n }\n}\n\n/**\n * Compiles a pattern to bytecode.\n */\nexport function patternCompile(\n pattern: Pattern,\n code: Instr[],\n literals: Pattern[],\n captures: string[],\n): void {\n switch (pattern.type) {\n case \"Leaf\":\n leafPatternCompile(pattern.pattern, code, literals, captures);\n break;\n case \"Structure\":\n structurePatternCompile(pattern.pattern, code, literals, captures);\n break;\n case \"Meta\":\n metaPatternCompile(pattern.pattern, code, literals, captures);\n break;\n }\n}\n\n/**\n * Converts a pattern to string.\n */\nexport function patternToString(pattern: Pattern): string {\n switch (pattern.type) {\n case \"Leaf\":\n return leafPatternToString(pattern.pattern);\n case \"Structure\":\n return structurePatternToString(pattern.pattern);\n case \"Meta\":\n return metaPatternToString(pattern.pattern);\n }\n}\n\n/**\n * Collects capture names from a pattern.\n */\nexport function patternCollectCaptureNames(pattern: Pattern, out: string[]): void {\n if (pattern.type === \"Meta\") {\n metaPatternCollectCaptureNames(pattern.pattern, out);\n }\n}\n\n// ============================================================================\n// Convenience Constructors - Leaf Patterns\n// ============================================================================\n\n/**\n * Creates a new Pattern that matches any CBOR value.\n */\nexport function anyCbor(): Pattern {\n return patternLeaf(leafCbor(CBORPattern.any()));\n}\n\n/**\n * Creates a new Pattern that matches a specific CBOR value.\n */\nexport function cborValue(value: CborInput): Pattern {\n return patternLeaf(leafCbor(CBORPattern.value(value)));\n}\n\n/**\n * Creates a new Pattern that matches CBOR values using dcbor-pattern expressions.\n */\nexport function cborPattern(pattern: DCBORPattern): Pattern {\n return patternLeaf(leafCbor(CBORPattern.pattern(pattern)));\n}\n\n/**\n * Creates a new Pattern that matches any boolean value.\n */\nexport function anyBool(): Pattern {\n return patternLeaf(leafBool(BoolPattern.any()));\n}\n\n/**\n * Creates a new Pattern that matches a specific boolean value.\n */\nexport function bool(b: boolean): Pattern {\n return patternLeaf(leafBool(BoolPattern.value(b)));\n}\n\n/**\n * Creates a new Pattern that matches any text value.\n */\nexport function anyText(): Pattern {\n return patternLeaf(leafText(TextPattern.any()));\n}\n\n/**\n * Creates a new Pattern that matches a specific text value.\n */\nexport function text(value: string): Pattern {\n return patternLeaf(leafText(TextPattern.value(value)));\n}\n\n/**\n * Creates a new Pattern that matches text values that match the given regex.\n */\nexport function textRegex(regex: RegExp): Pattern {\n return patternLeaf(leafText(TextPattern.regex(regex)));\n}\n\n/**\n * Creates a new Pattern that matches any Date value.\n */\nexport function anyDate(): Pattern {\n return patternLeaf(leafDate(DatePattern.any()));\n}\n\n/**\n * Creates a new Pattern that matches a specific Date value.\n */\nexport function date(d: CborDate): Pattern {\n return patternLeaf(leafDate(DatePattern.value(d)));\n}\n\n/**\n * Creates a new Pattern that matches Date values within a specified range.\n */\nexport function dateRange(earliest: CborDate, latest: CborDate): Pattern {\n return patternLeaf(leafDate(DatePattern.range(earliest, latest)));\n}\n\n/**\n * Creates a new Pattern that matches any number value.\n */\nexport function anyNumber(): Pattern {\n return patternLeaf(leafNumber(NumberPattern.any()));\n}\n\n/**\n * Creates a new Pattern that matches a specific number value.\n */\nexport function number(value: number): Pattern {\n return patternLeaf(leafNumber(NumberPattern.exact(value)));\n}\n\n/**\n * Creates a new Pattern that matches number values within a range.\n */\nexport function numberRange(min: number, max: number): Pattern {\n return patternLeaf(leafNumber(NumberPattern.range(min, max)));\n}\n\n/**\n * Creates a new Pattern that matches number values greater than the specified value.\n */\nexport function numberGreaterThan(value: number): Pattern {\n return patternLeaf(leafNumber(NumberPattern.greaterThan(value)));\n}\n\n/**\n * Creates a new Pattern that matches number values less than the specified value.\n */\nexport function numberLessThan(value: number): Pattern {\n return patternLeaf(leafNumber(NumberPattern.lessThan(value)));\n}\n\n/**\n * Creates a new Pattern that matches any byte string value.\n */\nexport function anyByteString(): Pattern {\n return patternLeaf(leafByteString(ByteStringPattern.any()));\n}\n\n/**\n * Creates a new Pattern that matches a specific byte string value.\n */\nexport function byteString(value: Uint8Array): Pattern {\n return patternLeaf(leafByteString(ByteStringPattern.value(value)));\n}\n\n/**\n * Creates a new Pattern that matches any known value.\n */\nexport function anyKnownValue(): Pattern {\n return patternLeaf(leafKnownValue(KnownValuePattern.any()));\n}\n\n/**\n * Creates a new Pattern that matches a specific known value.\n */\nexport function knownValue(value: KnownValue): Pattern {\n return patternLeaf(leafKnownValue(KnownValuePattern.value(value)));\n}\n\n/**\n * Creates a new Pattern that matches the unit known value.\n */\nexport function unit(): Pattern {\n return knownValue(KNOWN_VALUE_UNIT);\n}\n\n/**\n * Creates a new Pattern that matches any array.\n */\nexport function anyArray(): Pattern {\n return patternLeaf(leafArray(ArrayPattern.any()));\n}\n\n/**\n * Creates a new Pattern that matches any map.\n */\nexport function anyMap(): Pattern {\n return patternLeaf(leafMap(MapPattern.any()));\n}\n\n/**\n * Creates a new Pattern that matches null.\n */\nexport function nullPattern(): Pattern {\n return patternLeaf(leafNull(NullPattern.new()));\n}\n\n/**\n * Creates a new Pattern that matches any tagged value.\n */\nexport function anyTag(): Pattern {\n return patternLeaf(leafTag(TaggedPattern.any()));\n}\n\n/**\n * Creates a new Pattern that matches a specific tagged value.\n */\nexport function tagged(tag: Tag, pattern: DCBORPattern): Pattern {\n return patternLeaf(leafTag(TaggedPattern.withTag(tag, pattern)));\n}\n\n// ============================================================================\n// Convenience Constructors - Structure Patterns\n// ============================================================================\n\n/**\n * Creates a new Pattern that matches leaf envelopes.\n */\nexport function leaf(): Pattern {\n return patternStructure(structureLeaf(LeafStructurePattern.new()));\n}\n\n/**\n * Creates a new Pattern that matches any assertion.\n */\nexport function anyAssertion(): Pattern {\n return patternStructure(structureAssertions(AssertionsPattern.any()));\n}\n\n/**\n * Creates a new Pattern that matches assertions with predicates matching pattern.\n */\nexport function assertionWithPredicate(pattern: Pattern): Pattern {\n return patternStructure(structureAssertions(AssertionsPattern.withPredicate(pattern)));\n}\n\n/**\n * Creates a new Pattern that matches assertions with objects matching pattern.\n */\nexport function assertionWithObject(pattern: Pattern): Pattern {\n return patternStructure(structureAssertions(AssertionsPattern.withObject(pattern)));\n}\n\n/**\n * Creates a new Pattern that matches any subject.\n */\nexport function anySubject(): Pattern {\n return patternStructure(structureSubject(SubjectPattern.any()));\n}\n\n/**\n * Creates a new Pattern that matches subjects matching pattern.\n */\nexport function subject(pattern: Pattern): Pattern {\n return patternStructure(structureSubject(SubjectPattern.pattern(pattern)));\n}\n\n/**\n * Creates a new Pattern that matches any predicate.\n */\nexport function anyPredicate(): Pattern {\n return patternStructure(structurePredicate(PredicatePattern.any()));\n}\n\n/**\n * Creates a new Pattern that matches predicates matching pattern.\n */\nexport function predicate(pattern: Pattern): Pattern {\n return patternStructure(structurePredicate(PredicatePattern.pattern(pattern)));\n}\n\n/**\n * Creates a new Pattern that matches any object.\n */\nexport function anyObject(): Pattern {\n return patternStructure(structureObject(ObjectPattern.any()));\n}\n\n/**\n * Creates a new Pattern that matches objects matching pattern.\n */\nexport function object(pattern: Pattern): Pattern {\n return patternStructure(structureObject(ObjectPattern.pattern(pattern)));\n}\n\n/**\n * Creates a new Pattern that matches a specific digest.\n */\nexport function digest(d: Digest): Pattern {\n return patternStructure(structureDigest(DigestPattern.digest(d)));\n}\n\n/**\n * Creates a new Pattern that matches digests with a prefix.\n */\nexport function digestPrefix(prefix: Uint8Array): Pattern {\n return patternStructure(structureDigest(DigestPattern.prefix(prefix)));\n}\n\n/**\n * Creates a new Pattern that matches any node.\n */\nexport function anyNode(): Pattern {\n return patternStructure(structureNode(NodePattern.any()));\n}\n\n/**\n * Creates a new Pattern that matches any obscured element.\n */\nexport function obscured(): Pattern {\n return patternStructure(structureObscured(ObscuredPattern.any()));\n}\n\n/**\n * Creates a new Pattern that matches elided elements.\n */\nexport function elided(): Pattern {\n return patternStructure(structureObscured(ObscuredPattern.elided()));\n}\n\n/**\n * Creates a new Pattern that matches encrypted elements.\n */\nexport function encrypted(): Pattern {\n return patternStructure(structureObscured(ObscuredPattern.encrypted()));\n}\n\n/**\n * Creates a new Pattern that matches compressed elements.\n */\nexport function compressed(): Pattern {\n return patternStructure(structureObscured(ObscuredPattern.compressed()));\n}\n\n/**\n * Creates a new Pattern that matches wrapped envelopes.\n */\nexport function wrapped(): Pattern {\n return patternStructure(structureWrapped(WrappedPattern.new()));\n}\n\n/**\n * Creates a new Pattern that matches wrapped envelopes and descends.\n * Named `unwrapEnvelope` to avoid conflict with Result.unwrap.\n */\nexport function unwrapEnvelope(): Pattern {\n return patternStructure(structureWrapped(WrappedPattern.unwrapMatching(any())));\n}\n\n/**\n * Creates a new Pattern that matches wrapped envelopes matching pattern.\n */\nexport function unwrapMatching(pattern: Pattern): Pattern {\n return patternStructure(structureWrapped(WrappedPattern.unwrapMatching(pattern)));\n}\n\n// ============================================================================\n// Convenience Constructors - Meta Patterns\n// ============================================================================\n\n/**\n * Creates a new Pattern that matches any element.\n */\nexport function any(): Pattern {\n return patternMeta(metaAny(AnyPattern.new()));\n}\n\n/**\n * Creates a new Pattern that matches if all patterns match.\n */\nexport function and(patterns: Pattern[]): Pattern {\n return patternMeta(metaAnd(AndPattern.new(patterns)));\n}\n\n/**\n * Creates a new Pattern that matches if any pattern matches.\n */\nexport function or(patterns: Pattern[]): Pattern {\n return patternMeta(metaOr(OrPattern.new(patterns)));\n}\n\n/**\n * Creates a new Pattern that matches if the pattern does not match.\n */\nexport function notMatching(pattern: Pattern): Pattern {\n return patternMeta(metaNot(NotPattern.new(pattern)));\n}\n\n/**\n * Creates a new Pattern that captures a match with a name.\n */\nexport function capture(name: string, pattern: Pattern): Pattern {\n return patternMeta(metaCapture(CapturePattern.new(name, pattern)));\n}\n\n/**\n * Creates a new Pattern that searches for matches in the envelope tree.\n */\nexport function search(pattern: Pattern): Pattern {\n return patternMeta(metaSearch(SearchPattern.new(pattern)));\n}\n\n/**\n * Creates a new Pattern that matches a traversal order of patterns.\n */\nexport function traverse(patterns: Pattern[]): Pattern {\n return patternMeta(metaTraverse(TraversePattern.new(patterns)));\n}\n\n/**\n * Creates a new Pattern that matches with repetition.\n */\nexport function repeat(\n pattern: Pattern,\n min: number,\n max?: number,\n reluctance: Reluctance = Reluctance.Greedy,\n): Pattern {\n const interval = max !== undefined ? Interval.from(min, max) : Interval.atLeast(min);\n const quantifier = new Quantifier(interval, reluctance);\n return patternMeta(metaGroup(GroupPattern.repeat(pattern, quantifier)));\n}\n\n/**\n * Creates a new Pattern for grouping.\n */\nexport function group(pattern: Pattern): Pattern {\n return patternMeta(metaGroup(GroupPattern.new(pattern)));\n}\n\n// ============================================================================\n// Factory Registration\n// ============================================================================\n\n// Register all pattern factories to resolve circular dependencies\nfunction registerAllFactories(): void {\n // Leaf pattern factories\n registerBoolPatternFactory((p) => patternLeaf(leafBool(p)));\n registerNullPatternFactory((p) => patternLeaf(leafNull(p)));\n registerNumberPatternFactory((p) => patternLeaf(leafNumber(p)));\n registerTextPatternFactory((p) => patternLeaf(leafText(p)));\n registerByteStringPatternFactory((p) => patternLeaf(leafByteString(p)));\n registerDatePatternFactory((p) => patternLeaf(leafDate(p)));\n registerArrayPatternFactory((p) => patternLeaf(leafArray(p)));\n registerMapPatternFactory((p) => patternLeaf(leafMap(p)));\n registerKnownValuePatternFactory((p) => patternLeaf(leafKnownValue(p)));\n registerTaggedPatternFactory((p) => patternLeaf(leafTag(p)));\n registerCBORPatternFactory((p) => patternLeaf(leafCbor(p)));\n\n // Structure pattern factories\n registerLeafStructurePatternFactory((p) => patternStructure(structureLeaf(p)));\n registerSubjectPatternFactory((p) => patternStructure(structureSubject(p)));\n registerPredicatePatternFactory((p) => patternStructure(structurePredicate(p)));\n registerObjectPatternFactory((p) => patternStructure(structureObject(p)));\n registerAssertionsPatternFactory((p) => patternStructure(structureAssertions(p)));\n registerDigestPatternFactory((p) => patternStructure(structureDigest(p)));\n registerNodePatternFactory((p) => patternStructure(structureNode(p)));\n registerObscuredPatternFactory((p) => patternStructure(structureObscured(p)));\n registerWrappedPatternFactory((p) => patternStructure(structureWrapped(p)));\n\n // Meta pattern factories\n registerAnyPatternFactory((p) => patternMeta(metaAny(p)));\n registerAndPatternFactory((p) => patternMeta(metaAnd(p)));\n registerOrPatternFactory((p) => patternMeta(metaOr(p)));\n registerNotPatternFactory((p) => patternMeta(metaNot(p)));\n registerCapturePatternFactory((p) => patternMeta(metaCapture(p)));\n registerSearchPatternFactory((p) => patternMeta(metaSearch(p)));\n registerTraversePatternFactory((p) => patternMeta(metaTraverse(p)));\n registerGroupPatternFactory((p) => patternMeta(metaGroup(p)));\n}\n\n// Register factories immediately on module load\nregisterAllFactories();\n\n// Register VM pattern functions to resolve circular dependencies\nimport { registerVMPatternFunctions } from \"./vm\";\nregisterVMPatternFunctions(patternPathsWithCaptures, patternMatches, patternPaths);\n","/**\n * @bcts/envelope-pattern - Token types and Lexer\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust token.rs\n * Uses a manual lexer implementation instead of logos.\n *\n * @module envelope-pattern/parse/token\n */\n\nimport { Quantifier, Reluctance } from \"@bcts/dcbor-pattern\";\nimport {\n type Span,\n type Result,\n type EnvelopePatternError,\n ok,\n err,\n invalidRegex,\n unterminatedRegex,\n invalidRange,\n invalidHexString,\n unexpectedEndOfInput,\n invalidNumberFormat,\n} from \"../error\";\n\n/**\n * Token types for the Gordian Envelope pattern syntax.\n *\n * Corresponds to the Rust `Token` enum in token.rs\n */\nexport type Token =\n // Meta Pattern Operators\n | { readonly type: \"And\" }\n | { readonly type: \"Or\" }\n | { readonly type: \"Not\" }\n | { readonly type: \"Traverse\" }\n | { readonly type: \"RepeatZeroOrMore\" }\n | { readonly type: \"RepeatZeroOrMoreLazy\" }\n | { readonly type: \"RepeatZeroOrMorePossessive\" }\n | { readonly type: \"RepeatOneOrMore\" }\n | { readonly type: \"RepeatOneOrMoreLazy\" }\n | { readonly type: \"RepeatOneOrMorePossessive\" }\n | { readonly type: \"RepeatZeroOrOne\" }\n | { readonly type: \"RepeatZeroOrOneLazy\" }\n | { readonly type: \"RepeatZeroOrOnePossessive\" }\n // Structure Pattern Keywords\n | { readonly type: \"Assertion\" }\n | { readonly type: \"AssertionPred\" }\n | { readonly type: \"AssertionObj\" }\n | { readonly type: \"Digest\" }\n | { readonly type: \"Node\" }\n | { readonly type: \"Obj\" }\n | { readonly type: \"Obscured\" }\n | { readonly type: \"Elided\" }\n | { readonly type: \"Encrypted\" }\n | { readonly type: \"Compressed\" }\n | { readonly type: \"Pred\" }\n | { readonly type: \"Subject\" }\n | { readonly type: \"Wrapped\" }\n | { readonly type: \"Unwrap\" }\n | { readonly type: \"Search\" }\n // Leaf Pattern Keywords\n | { readonly type: \"ByteString\" }\n | { readonly type: \"Leaf\" }\n | { readonly type: \"Cbor\" }\n | { readonly type: \"DateKeyword\" }\n | { readonly type: \"Known\" }\n | { readonly type: \"Null\" }\n | { readonly type: \"NumberKeyword\" }\n | { readonly type: \"Tagged\" }\n // Special literals\n | { readonly type: \"BoolKeyword\" }\n | { readonly type: \"BoolTrue\" }\n | { readonly type: \"BoolFalse\" }\n | { readonly type: \"TextKeyword\" }\n | { readonly type: \"NaN\" }\n | { readonly type: \"StringLiteral\"; readonly value: Result<string> }\n // Grouping and Range delimiters\n | { readonly type: \"ParenOpen\" }\n | { readonly type: \"ParenClose\" }\n | { readonly type: \"BracketOpen\" }\n | { readonly type: \"BracketClose\" }\n | { readonly type: \"Comma\" }\n | { readonly type: \"Ellipsis\" }\n | { readonly type: \"GreaterThanOrEqual\" }\n | { readonly type: \"LessThanOrEqual\" }\n | { readonly type: \"GreaterThan\" }\n | { readonly type: \"LessThan\" }\n // Numbers\n | { readonly type: \"Integer\"; readonly value: Result<number> }\n | { readonly type: \"UnsignedInteger\"; readonly value: Result<number> }\n | { readonly type: \"Float\"; readonly value: Result<number> }\n | { readonly type: \"Infinity\" }\n | { readonly type: \"NegativeInfinity\" }\n // Complex tokens\n | { readonly type: \"GroupName\"; readonly name: string }\n | { readonly type: \"Regex\"; readonly value: Result<string> }\n | { readonly type: \"HexPattern\"; readonly value: Result<Uint8Array> }\n | { readonly type: \"HexBinaryRegex\"; readonly value: Result<string> }\n | { readonly type: \"DatePattern\"; readonly value: Result<string> }\n | { readonly type: \"Range\"; readonly value: Result<Quantifier> }\n | { readonly type: \"SingleQuotedPattern\"; readonly value: Result<string> }\n | { readonly type: \"SingleQuotedRegex\"; readonly value: Result<string> };\n\n/**\n * Keyword to token type mapping.\n */\nconst KEYWORDS = new Map<string, Token>([\n // Meta Pattern Operators\n [\"&\", { type: \"And\" }],\n [\"|\", { type: \"Or\" }],\n [\"!\", { type: \"Not\" }],\n // Structure Pattern Keywords\n [\"assert\", { type: \"Assertion\" }],\n [\"assertpred\", { type: \"AssertionPred\" }],\n [\"assertobj\", { type: \"AssertionObj\" }],\n [\"digest\", { type: \"Digest\" }],\n [\"node\", { type: \"Node\" }],\n [\"obj\", { type: \"Obj\" }],\n [\"obscured\", { type: \"Obscured\" }],\n [\"elided\", { type: \"Elided\" }],\n [\"encrypted\", { type: \"Encrypted\" }],\n [\"compressed\", { type: \"Compressed\" }],\n [\"pred\", { type: \"Pred\" }],\n [\"subj\", { type: \"Subject\" }],\n [\"wrapped\", { type: \"Wrapped\" }],\n [\"unwrap\", { type: \"Unwrap\" }],\n [\"search\", { type: \"Search\" }],\n // Leaf Pattern Keywords\n [\"bstr\", { type: \"ByteString\" }],\n [\"leaf\", { type: \"Leaf\" }],\n [\"cbor\", { type: \"Cbor\" }],\n [\"date\", { type: \"DateKeyword\" }],\n [\"known\", { type: \"Known\" }],\n [\"null\", { type: \"Null\" }],\n [\"number\", { type: \"NumberKeyword\" }],\n [\"tagged\", { type: \"Tagged\" }],\n // Special literals\n [\"bool\", { type: \"BoolKeyword\" }],\n [\"true\", { type: \"BoolTrue\" }],\n [\"false\", { type: \"BoolFalse\" }],\n [\"text\", { type: \"TextKeyword\" }],\n [\"NaN\", { type: \"NaN\" }],\n [\"Infinity\", { type: \"Infinity\" }],\n [\"-Infinity\", { type: \"NegativeInfinity\" }],\n]);\n\n/**\n * Checks if a character is whitespace.\n */\nfunction isWhitespace(ch: string): boolean {\n return ch === \" \" || ch === \"\\t\" || ch === \"\\n\" || ch === \"\\r\" || ch === \"\\f\";\n}\n\n/**\n * Checks if a character can start an identifier.\n */\nfunction isIdentStart(ch: string): boolean {\n return (ch >= \"a\" && ch <= \"z\") || (ch >= \"A\" && ch <= \"Z\") || ch === \"_\";\n}\n\n/**\n * Checks if a character can continue an identifier.\n */\nfunction isIdentContinue(ch: string): boolean {\n return isIdentStart(ch) || (ch >= \"0\" && ch <= \"9\");\n}\n\n/**\n * Checks if a character is a digit.\n */\nfunction isDigit(ch: string): boolean {\n return ch >= \"0\" && ch <= \"9\";\n}\n\n/**\n * Checks if a character is a hex digit.\n */\nfunction isHexDigit(ch: string): boolean {\n return (ch >= \"0\" && ch <= \"9\") || (ch >= \"a\" && ch <= \"f\") || (ch >= \"A\" && ch <= \"F\");\n}\n\n/**\n * Lexer for Gordian Envelope pattern syntax.\n */\nexport class Lexer {\n readonly #source: string;\n #position = 0;\n #tokenStart = 0;\n #peekedToken: { token: Token; span: Span } | undefined = undefined;\n\n constructor(source: string) {\n this.#source = source;\n }\n\n /**\n * Gets the current position in the source.\n */\n get position(): number {\n return this.#position;\n }\n\n /**\n * Peeks at the next token without consuming it.\n */\n peekToken(): { token: Token; span: Span } | undefined {\n if (this.#peekedToken !== undefined) {\n return this.#peekedToken;\n }\n const result = this.next();\n this.#peekedToken = result;\n return result;\n }\n\n /**\n * Gets the current span (from token start to current position).\n */\n span(): Span {\n return { start: this.#tokenStart, end: this.#position };\n }\n\n /**\n * Gets the remaining source string.\n */\n remainder(): string {\n return this.#source.slice(this.#position);\n }\n\n /**\n * Peeks at the current character without consuming it.\n */\n peek(): string | undefined {\n if (this.#position >= this.#source.length) {\n return undefined;\n }\n return this.#source[this.#position];\n }\n\n /**\n * Peeks at the next character without consuming current.\n */\n peekNext(): string | undefined {\n if (this.#position + 1 >= this.#source.length) {\n return undefined;\n }\n return this.#source[this.#position + 1];\n }\n\n /**\n * Advances the position by n characters.\n */\n bump(n = 1): void {\n this.#position = Math.min(this.#position + n, this.#source.length);\n }\n\n /**\n * Skips whitespace.\n */\n #skipWhitespace(): void {\n while (this.#position < this.#source.length) {\n const ch = this.#source[this.#position];\n if (ch !== undefined && isWhitespace(ch)) {\n this.#position++;\n } else {\n break;\n }\n }\n }\n\n /**\n * Parses a string literal (after the opening quote).\n */\n #parseStringLiteral(): Result<string> {\n const src = this.remainder();\n let escape = false;\n let content = \"\";\n\n for (let i = 0; i < src.length; i++) {\n const b = src[i];\n if (b === undefined) break;\n\n if (b === '\"' && !escape) {\n // End of string\n this.bump(i + 1);\n return ok(content);\n }\n\n if (b === \"\\\\\" && !escape) {\n escape = true;\n continue;\n }\n\n if (escape) {\n switch (b) {\n case \"n\":\n content += \"\\n\";\n break;\n case \"t\":\n content += \"\\t\";\n break;\n case \"r\":\n content += \"\\r\";\n break;\n case \"\\\\\":\n content += \"\\\\\";\n break;\n case '\"':\n content += '\"';\n break;\n default:\n // Invalid escape sequence, but we'll be lenient\n content += \"\\\\\";\n content += b;\n }\n escape = false;\n } else {\n content += b;\n }\n }\n\n return err(unexpectedEndOfInput());\n }\n\n /**\n * Parses a regex pattern (after the opening slash).\n */\n #parseRegex(): Result<string> {\n const src = this.remainder();\n let escape = false;\n\n for (let i = 0; i < src.length; i++) {\n const ch = src[i];\n if (ch === undefined) break;\n\n if (ch === \"\\\\\" && !escape) {\n escape = true;\n continue;\n }\n\n if (ch === \"/\" && !escape) {\n // Found the closing delimiter\n this.bump(i + 1);\n const content = src.slice(0, i);\n // Validate regex\n try {\n new RegExp(content);\n return ok(content);\n } catch {\n return err(invalidRegex(this.span()));\n }\n }\n\n escape = false;\n }\n\n return err(unterminatedRegex(this.span()));\n }\n\n /**\n * Parses a hex pattern (after h').\n */\n #parseHexPattern(): Result<Uint8Array> {\n const src = this.remainder();\n\n for (let i = 0; i < src.length; i++) {\n const ch = src[i];\n if (ch === undefined) break;\n\n if (ch === \"'\") {\n // Found the closing delimiter\n const hexStr = src.slice(0, i);\n this.bump(i + 1);\n\n // Validate and decode hex\n if (hexStr.length % 2 !== 0) {\n return err(invalidHexString(this.span()));\n }\n\n const bytes = new Uint8Array(hexStr.length / 2);\n for (let j = 0; j < hexStr.length; j += 2) {\n const byte = parseInt(hexStr.slice(j, j + 2), 16);\n if (Number.isNaN(byte)) {\n return err(invalidHexString(this.span()));\n }\n bytes[j / 2] = byte;\n }\n return ok(bytes);\n }\n\n if (!isHexDigit(ch)) {\n return err(invalidHexString(this.span()));\n }\n }\n\n return err(invalidHexString(this.span()));\n }\n\n /**\n * Parses a hex binary regex (after h'/).\n */\n #parseHexBinaryRegex(): Result<string> {\n const src = this.remainder();\n let escape = false;\n\n for (let i = 0; i < src.length; i++) {\n const ch = src[i];\n if (ch === undefined) break;\n\n if (ch === \"\\\\\" && !escape) {\n escape = true;\n continue;\n }\n\n if (ch === \"/\" && !escape) {\n // Found the closing delimiter\n this.bump(i + 1);\n // Check for optional closing '\n if (this.peek() === \"'\") {\n this.bump(1);\n }\n const regexStr = src.slice(0, i);\n // Validate regex\n try {\n new RegExp(regexStr);\n return ok(regexStr);\n } catch {\n return err(invalidRegex(this.span()));\n }\n }\n\n escape = false;\n }\n\n return err(unterminatedRegex(this.span()));\n }\n\n /**\n * Parses a date pattern (after date').\n */\n #parseDatePattern(): Result<string> {\n const src = this.remainder();\n\n for (let i = 0; i < src.length; i++) {\n const ch = src[i];\n if (ch === \"'\") {\n // Found the closing delimiter\n const content = src.slice(0, i);\n this.bump(i + 1);\n return ok(content);\n }\n }\n\n return err(unterminatedRegex(this.span()));\n }\n\n /**\n * Parses a range pattern (after {).\n */\n #parseRange(): Result<Quantifier> {\n const src = this.remainder();\n let pos = 0;\n\n // Skip whitespace\n while (pos < src.length && src[pos] !== undefined && isWhitespace(src[pos])) {\n pos++;\n }\n\n // Parse minimum value\n const minStart = pos;\n while (pos < src.length && src[pos] !== undefined && isDigit(src[pos])) {\n pos++;\n }\n if (minStart === pos) {\n return err(invalidRange(this.span()));\n }\n const min = parseInt(src.slice(minStart, pos), 10);\n if (Number.isNaN(min)) {\n return err(invalidRange(this.span()));\n }\n\n // Skip whitespace\n while (pos < src.length && src[pos] !== undefined && isWhitespace(src[pos])) {\n pos++;\n }\n\n let max: number | undefined;\n const ch = src[pos];\n\n if (ch === \",\") {\n pos++;\n // Skip whitespace\n while (pos < src.length && src[pos] !== undefined && isWhitespace(src[pos])) {\n pos++;\n }\n\n const nextCh = src[pos];\n if (nextCh === \"}\") {\n // {n,} - open ended\n pos++;\n max = undefined;\n } else if (nextCh !== undefined && isDigit(nextCh)) {\n // {n,m} - range\n const maxStart = pos;\n while (pos < src.length && src[pos] !== undefined && isDigit(src[pos])) {\n pos++;\n }\n max = parseInt(src.slice(maxStart, pos), 10);\n if (Number.isNaN(max)) {\n return err(invalidRange(this.span()));\n }\n\n // Skip whitespace\n while (pos < src.length && src[pos] !== undefined && isWhitespace(src[pos])) {\n pos++;\n }\n\n if (src[pos] !== \"}\") {\n return err(invalidRange(this.span()));\n }\n pos++;\n } else {\n return err(invalidRange(this.span()));\n }\n } else if (ch === \"}\") {\n // {n} - exact\n pos++;\n max = min;\n } else {\n return err(invalidRange(this.span()));\n }\n\n // Determine greediness\n let mode: Reluctance = Reluctance.Greedy;\n const modeChar = src[pos];\n if (modeChar === \"?\") {\n pos++;\n mode = Reluctance.Lazy;\n } else if (modeChar === \"+\") {\n pos++;\n mode = Reluctance.Possessive;\n }\n\n this.bump(pos);\n\n if (max !== undefined && min > max) {\n return err(invalidRange(this.span()));\n }\n\n if (max !== undefined) {\n return ok(Quantifier.between(min, max, mode));\n }\n return ok(Quantifier.atLeast(min, mode));\n }\n\n /**\n * Parses a single quoted pattern (after ').\n */\n #parseSingleQuotedPattern(): Result<string> {\n const src = this.remainder();\n\n for (let i = 0; i < src.length; i++) {\n const ch = src[i];\n if (ch === \"'\") {\n // Found the closing delimiter\n const content = src.slice(0, i);\n this.bump(i + 1);\n return ok(content);\n }\n }\n\n return err(unterminatedRegex(this.span()));\n }\n\n /**\n * Parses a single quoted regex (after '/).\n */\n #parseSingleQuotedRegex(): Result<string> {\n const src = this.remainder();\n let escape = false;\n\n for (let i = 0; i < src.length; i++) {\n const ch = src[i];\n if (ch === undefined) break;\n\n if (ch === \"\\\\\" && !escape) {\n escape = true;\n continue;\n }\n\n if (ch === \"/\" && !escape) {\n // Found the closing delimiter\n this.bump(i + 1);\n // Check for optional closing '\n if (this.peek() === \"'\") {\n this.bump(1);\n }\n const regexStr = src.slice(0, i);\n // Validate regex\n try {\n new RegExp(regexStr);\n return ok(regexStr);\n } catch {\n return err(invalidRegex(this.span()));\n }\n }\n\n escape = false;\n }\n\n return err(unterminatedRegex(this.span()));\n }\n\n /**\n * Parses a number (integer or float).\n */\n #parseNumber(): Token {\n const startPos = this.#position;\n let isFloat = false;\n let isNegative = false;\n\n // Check for negative sign\n if (this.peek() === \"-\") {\n isNegative = true;\n this.bump(1);\n }\n\n // Parse integer part\n let c = this.peek();\n while (c !== undefined && isDigit(c)) {\n this.bump(1);\n c = this.peek();\n }\n\n // Check for decimal point\n const nextC = this.peekNext();\n if (this.peek() === \".\" && nextC !== undefined && isDigit(nextC)) {\n isFloat = true;\n this.bump(1); // consume '.'\n\n // Parse fractional part\n c = this.peek();\n while (c !== undefined && isDigit(c)) {\n this.bump(1);\n c = this.peek();\n }\n }\n\n // Check for exponent\n if (this.peek() === \"e\" || this.peek() === \"E\") {\n isFloat = true;\n this.bump(1);\n\n // Check for sign\n if (this.peek() === \"+\" || this.peek() === \"-\") {\n this.bump(1);\n }\n\n // Parse exponent digits\n c = this.peek();\n while (c !== undefined && isDigit(c)) {\n this.bump(1);\n c = this.peek();\n }\n }\n\n const numStr = this.#source.slice(startPos, this.#position);\n\n if (isFloat) {\n const value = parseFloat(numStr);\n if (Number.isNaN(value)) {\n return { type: \"Float\", value: err(invalidNumberFormat(this.span())) };\n }\n return { type: \"Float\", value: ok(value) };\n }\n\n const value = parseInt(numStr, 10);\n if (Number.isNaN(value)) {\n return { type: \"Integer\", value: err(invalidNumberFormat(this.span())) };\n }\n\n if (isNegative) {\n return { type: \"Integer\", value: ok(value) };\n }\n return { type: \"UnsignedInteger\", value: ok(value) };\n }\n\n /**\n * Gets the next token from the input.\n */\n next(): { token: Token; span: Span } | undefined {\n // Return peeked token if available\n if (this.#peekedToken !== undefined) {\n const peeked = this.#peekedToken;\n this.#peekedToken = undefined;\n return peeked;\n }\n\n this.#skipWhitespace();\n this.#tokenStart = this.#position;\n\n if (this.#position >= this.#source.length) {\n return undefined;\n }\n\n const ch = this.#source[this.#position];\n if (ch === undefined) return undefined;\n\n // Check for two-character operators first\n const twoChar = this.#source.slice(this.#position, this.#position + 2);\n const threeChar = this.#source.slice(this.#position, this.#position + 3);\n\n // Check for ... (ellipsis)\n if (threeChar === \"...\") {\n this.bump(3);\n return { token: { type: \"Ellipsis\" }, span: this.span() };\n }\n\n // Check for -Infinity\n if (this.#source.slice(this.#position, this.#position + 9) === \"-Infinity\") {\n this.bump(9);\n return { token: { type: \"NegativeInfinity\" }, span: this.span() };\n }\n\n // Check for two-character operators\n switch (twoChar) {\n case \"->\":\n this.bump(2);\n return { token: { type: \"Traverse\" }, span: this.span() };\n case \"*?\":\n this.bump(2);\n return { token: { type: \"RepeatZeroOrMoreLazy\" }, span: this.span() };\n case \"*+\":\n this.bump(2);\n return { token: { type: \"RepeatZeroOrMorePossessive\" }, span: this.span() };\n case \"+?\":\n this.bump(2);\n return { token: { type: \"RepeatOneOrMoreLazy\" }, span: this.span() };\n case \"++\":\n this.bump(2);\n return { token: { type: \"RepeatOneOrMorePossessive\" }, span: this.span() };\n case \"??\":\n this.bump(2);\n return { token: { type: \"RepeatZeroOrOneLazy\" }, span: this.span() };\n case \"?+\":\n this.bump(2);\n return { token: { type: \"RepeatZeroOrOnePossessive\" }, span: this.span() };\n case \">=\":\n this.bump(2);\n return { token: { type: \"GreaterThanOrEqual\" }, span: this.span() };\n case \"<=\":\n this.bump(2);\n return { token: { type: \"LessThanOrEqual\" }, span: this.span() };\n case \"h'\": {\n this.bump(2);\n // Check if followed by / for HexBinaryRegex\n if (this.peek() === \"/\") {\n this.bump(1);\n return {\n token: { type: \"HexBinaryRegex\", value: this.#parseHexBinaryRegex() },\n span: this.span(),\n };\n }\n return { token: { type: \"HexPattern\", value: this.#parseHexPattern() }, span: this.span() };\n }\n case \"'/\":\n this.bump(2);\n return {\n token: { type: \"SingleQuotedRegex\", value: this.#parseSingleQuotedRegex() },\n span: this.span(),\n };\n }\n\n // Check for single character operators\n switch (ch) {\n case \"&\":\n this.bump(1);\n return { token: { type: \"And\" }, span: this.span() };\n case \"|\":\n this.bump(1);\n return { token: { type: \"Or\" }, span: this.span() };\n case \"!\":\n this.bump(1);\n return { token: { type: \"Not\" }, span: this.span() };\n case \"*\":\n this.bump(1);\n return { token: { type: \"RepeatZeroOrMore\" }, span: this.span() };\n case \"+\":\n this.bump(1);\n return { token: { type: \"RepeatOneOrMore\" }, span: this.span() };\n case \"?\":\n this.bump(1);\n return { token: { type: \"RepeatZeroOrOne\" }, span: this.span() };\n case \"(\":\n this.bump(1);\n return { token: { type: \"ParenOpen\" }, span: this.span() };\n case \")\":\n this.bump(1);\n return { token: { type: \"ParenClose\" }, span: this.span() };\n case \"[\":\n this.bump(1);\n return { token: { type: \"BracketOpen\" }, span: this.span() };\n case \"]\":\n this.bump(1);\n return { token: { type: \"BracketClose\" }, span: this.span() };\n case \",\":\n this.bump(1);\n return { token: { type: \"Comma\" }, span: this.span() };\n case \">\":\n this.bump(1);\n return { token: { type: \"GreaterThan\" }, span: this.span() };\n case \"<\":\n this.bump(1);\n return { token: { type: \"LessThan\" }, span: this.span() };\n case '\"':\n this.bump(1);\n return {\n token: { type: \"StringLiteral\", value: this.#parseStringLiteral() },\n span: this.span(),\n };\n case \"/\":\n this.bump(1);\n return { token: { type: \"Regex\", value: this.#parseRegex() }, span: this.span() };\n case \"{\":\n this.bump(1);\n return { token: { type: \"Range\", value: this.#parseRange() }, span: this.span() };\n case \"'\":\n this.bump(1);\n return {\n token: { type: \"SingleQuotedPattern\", value: this.#parseSingleQuotedPattern() },\n span: this.span(),\n };\n case \"@\": {\n // Group name\n this.bump(1);\n const start = this.#position;\n let gc = this.peek();\n if (gc !== undefined && isIdentStart(gc)) {\n gc = this.peek();\n while (gc !== undefined && isIdentContinue(gc)) {\n this.bump(1);\n gc = this.peek();\n }\n const name = this.#source.slice(start, this.#position);\n return { token: { type: \"GroupName\", name }, span: this.span() };\n }\n // Invalid group name, return as error token\n return { token: { type: \"GroupName\", name: \"\" }, span: this.span() };\n }\n }\n\n // Check for date' pattern\n if (this.#source.slice(this.#position, this.#position + 5) === \"date'\") {\n this.bump(5);\n return { token: { type: \"DatePattern\", value: this.#parseDatePattern() }, span: this.span() };\n }\n\n // Check for number (including negative)\n const nextChar = this.peekNext();\n if (isDigit(ch) || (ch === \"-\" && nextChar !== undefined && isDigit(nextChar))) {\n return { token: this.#parseNumber(), span: this.span() };\n }\n\n // Check for identifier/keyword\n if (isIdentStart(ch)) {\n const start = this.#position;\n let ic = this.peek();\n while (ic !== undefined && isIdentContinue(ic)) {\n this.bump(1);\n ic = this.peek();\n }\n const ident = this.#source.slice(start, this.#position);\n\n // Check for keywords\n const keyword = KEYWORDS.get(ident);\n if (keyword !== undefined) {\n return { token: keyword, span: this.span() };\n }\n\n // Unknown identifier - treat as error\n return undefined;\n }\n\n // Unknown character\n this.bump(1);\n return undefined;\n }\n\n /**\n * Iterates over all tokens.\n */\n *[Symbol.iterator](): Iterator<\n { token: Token; span: Span } | { error: EnvelopePatternError; span: Span }\n > {\n let result = this.next();\n while (result !== undefined) {\n yield result;\n result = this.next();\n }\n }\n}\n\n/**\n * Creates a new lexer for the given source.\n */\nexport function lexer(source: string): Lexer {\n return new Lexer(source);\n}\n","/**\n * @bcts/envelope-pattern - Parser entry point\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust parse/mod.rs\n * Recursive descent parser for Gordian Envelope pattern syntax.\n *\n * @module envelope-pattern/parse\n */\n\nimport { parse as parseDcborPattern } from \"@bcts/dcbor-pattern\";\nimport { Lexer } from \"./token\";\nimport {\n type Result,\n type Span,\n ok,\n err,\n unexpectedEndOfInput,\n extraData,\n invalidRegex,\n unexpectedToken,\n} from \"../error\";\nimport {\n type Pattern,\n // Leaf pattern constructors\n any,\n anyBool,\n bool,\n anyText,\n text,\n textRegex,\n anyNumber,\n number,\n numberRange,\n numberGreaterThan,\n numberLessThan,\n anyByteString,\n byteString,\n anyDate,\n date,\n anyKnownValue,\n knownValue,\n anyArray,\n anyTag,\n nullPattern,\n // Structure pattern constructors\n leaf,\n anyAssertion,\n assertionWithPredicate,\n assertionWithObject,\n anySubject,\n subject,\n anyPredicate,\n predicate,\n anyObject,\n object,\n digestPrefix,\n anyNode,\n obscured,\n elided,\n encrypted,\n compressed,\n wrapped,\n unwrapEnvelope,\n unwrapMatching,\n // Meta pattern constructors\n and,\n or,\n notMatching,\n capture,\n search,\n traverse,\n repeat,\n group,\n // Pattern types\n patternLeaf,\n patternStructure,\n // Specific pattern classes\n NumberPattern,\n ByteStringPattern,\n KnownValuePattern,\n ArrayPattern,\n TaggedPattern,\n DigestPattern,\n NodePattern,\n AssertionsPattern,\n leafNumber,\n leafByteString,\n leafKnownValue,\n leafArray,\n leafTag,\n structureDigest,\n structureNode,\n structureAssertions,\n} from \"../pattern\";\nimport { Quantifier, Reluctance } from \"@bcts/dcbor-pattern\";\nimport { type KnownValue as KnownValueType } from \"@bcts/known-values\";\nimport { CborDate } from \"@bcts/dcbor\";\n\n// Re-export token types\nexport { type Token, Lexer } from \"./token\";\n\n/**\n * Parse a pattern expression string into a Pattern.\n */\nexport function parse(input: string): Result<Pattern> {\n const lexer = new Lexer(input);\n\n // Try envelope-pattern parsing first\n const result = parseOr(lexer);\n if (!result.ok) {\n // If envelope-pattern parsing failed, try dcbor-pattern as fallback\n const dcborResult = parseDcborPattern(input);\n if (dcborResult.ok) {\n return convertDcborPatternToEnvelopePattern(dcborResult.value);\n }\n // Both parsers failed, return the original envelope error\n return result;\n }\n\n // Check for extra data\n const next = lexer.next();\n if (next !== undefined) {\n return err(extraData(next.span));\n }\n\n return result;\n}\n\n/**\n * Parse a pattern, allowing extra data after the pattern.\n */\nexport function parsePartial(input: string): Result<[Pattern, number]> {\n const lexer = new Lexer(input);\n const result = parseOr(lexer);\n if (!result.ok) {\n return result as Result<[Pattern, number]>;\n }\n return ok([result.value, lexer.position]);\n}\n\n/**\n * Convert a dcbor-pattern Pattern to an envelope-pattern Pattern.\n */\nfunction convertDcborPatternToEnvelopePattern(_dcborPattern: unknown): Result<Pattern> {\n // For now, wrap dcbor patterns as CBOR patterns\n // This is a simplified conversion - the dcbor pattern is matched by the any() pattern\n return ok(any());\n}\n\n// ============================================================================\n// Recursive Descent Parser\n// ============================================================================\n\n/**\n * Parse an Or expression: expr (| expr)*\n */\nfunction parseOr(lexer: Lexer): Result<Pattern> {\n const patterns: Pattern[] = [];\n\n const first = parseTraverse(lexer);\n if (!first.ok) return first;\n patterns.push(first.value);\n\n while (true) {\n const next = lexer.peekToken();\n if (next?.token.type !== \"Or\") {\n break;\n }\n lexer.next(); // consume the |\n\n const nextExpr = parseTraverse(lexer);\n if (!nextExpr.ok) return nextExpr;\n patterns.push(nextExpr.value);\n }\n\n if (patterns.length === 1) {\n return ok(patterns[0]);\n }\n return ok(or(patterns));\n}\n\n/**\n * Parse a Traverse expression: expr (-> expr)*\n */\nfunction parseTraverse(lexer: Lexer): Result<Pattern> {\n const patterns: Pattern[] = [];\n\n const first = parseAnd(lexer);\n if (!first.ok) return first;\n patterns.push(first.value);\n\n while (true) {\n const next = lexer.peekToken();\n if (next?.token.type !== \"Traverse\") {\n break;\n }\n lexer.next(); // consume the ->\n\n const nextExpr = parseAnd(lexer);\n if (!nextExpr.ok) return nextExpr;\n patterns.push(nextExpr.value);\n }\n\n if (patterns.length === 1) {\n return ok(patterns[0]);\n }\n return ok(traverse(patterns));\n}\n\n/**\n * Parse an And expression: expr (& expr)*\n */\nfunction parseAnd(lexer: Lexer): Result<Pattern> {\n const patterns: Pattern[] = [];\n\n const first = parseNot(lexer);\n if (!first.ok) return first;\n patterns.push(first.value);\n\n while (true) {\n const next = lexer.peekToken();\n if (next?.token.type !== \"And\") {\n break;\n }\n lexer.next(); // consume the &\n\n const nextExpr = parseNot(lexer);\n if (!nextExpr.ok) return nextExpr;\n patterns.push(nextExpr.value);\n }\n\n if (patterns.length === 1) {\n return ok(patterns[0]);\n }\n return ok(and(patterns));\n}\n\n/**\n * Parse a Not expression: !? group\n */\nfunction parseNot(lexer: Lexer): Result<Pattern> {\n const next = lexer.peekToken();\n if (next?.token.type === \"Not\") {\n lexer.next(); // consume the !\n const inner = parseGroup(lexer);\n if (!inner.ok) return inner;\n return ok(notMatching(inner.value));\n }\n return parseGroup(lexer);\n}\n\n/**\n * Parse a Group expression: primary quantifier?\n */\nfunction parseGroup(lexer: Lexer): Result<Pattern> {\n const primary = parsePrimary(lexer);\n if (!primary.ok) return primary;\n\n // Check for quantifier\n const next = lexer.peekToken();\n if (next === undefined) {\n return primary;\n }\n\n const tokenType = next.token.type;\n let quantifier: Quantifier | undefined;\n\n if (tokenType === \"RepeatZeroOrMore\") {\n lexer.next();\n quantifier = Quantifier.zeroOrMore(Reluctance.Greedy);\n } else if (tokenType === \"RepeatZeroOrMoreLazy\") {\n lexer.next();\n quantifier = Quantifier.zeroOrMore(Reluctance.Lazy);\n } else if (tokenType === \"RepeatZeroOrMorePossessive\") {\n lexer.next();\n quantifier = Quantifier.zeroOrMore(Reluctance.Possessive);\n } else if (tokenType === \"RepeatOneOrMore\") {\n lexer.next();\n quantifier = Quantifier.oneOrMore(Reluctance.Greedy);\n } else if (tokenType === \"RepeatOneOrMoreLazy\") {\n lexer.next();\n quantifier = Quantifier.oneOrMore(Reluctance.Lazy);\n } else if (tokenType === \"RepeatOneOrMorePossessive\") {\n lexer.next();\n quantifier = Quantifier.oneOrMore(Reluctance.Possessive);\n } else if (tokenType === \"RepeatZeroOrOne\") {\n lexer.next();\n quantifier = Quantifier.zeroOrOne(Reluctance.Greedy);\n } else if (tokenType === \"RepeatZeroOrOneLazy\") {\n lexer.next();\n quantifier = Quantifier.zeroOrOne(Reluctance.Lazy);\n } else if (tokenType === \"RepeatZeroOrOnePossessive\") {\n lexer.next();\n quantifier = Quantifier.zeroOrOne(Reluctance.Possessive);\n } else if (tokenType === \"Range\") {\n lexer.next();\n if (!next.token.value.ok) {\n return err(next.token.value.error);\n }\n quantifier = next.token.value.value;\n } else {\n // No quantifier found, return the primary expression as-is\n return primary;\n }\n\n return ok(repeat(primary.value, quantifier.min(), quantifier.max(), quantifier.reluctance()));\n}\n\n/**\n * Parse a primary expression (atoms and structure keywords).\n */\nfunction parsePrimary(lexer: Lexer): Result<Pattern> {\n const tokenResult = lexer.next();\n if (tokenResult === undefined) {\n return err(unexpectedEndOfInput());\n }\n\n const { token, span } = tokenResult;\n\n switch (token.type) {\n // Envelope-specific structure patterns\n case \"Search\":\n return parseSearch(lexer);\n case \"Node\":\n return parseNode(lexer);\n case \"Assertion\":\n return parseAssertion(lexer);\n case \"AssertionPred\":\n return parseAssertionPred(lexer);\n case \"AssertionObj\":\n return parseAssertionObj(lexer);\n case \"Digest\":\n return parseDigest(lexer);\n case \"Obj\":\n return parseObject(lexer);\n case \"Obscured\":\n return ok(obscured());\n case \"Elided\":\n return ok(elided());\n case \"Encrypted\":\n return ok(encrypted());\n case \"Compressed\":\n return ok(compressed());\n case \"Pred\":\n return parsePredicate(lexer);\n case \"Subject\":\n return parseSubject(lexer);\n case \"Wrapped\":\n return ok(wrapped());\n case \"Unwrap\":\n return parseUnwrap(lexer);\n case \"Leaf\":\n return ok(leaf());\n\n // Capture group\n case \"GroupName\":\n return parseCapture(lexer, token.name);\n\n // Grouping with parentheses\n case \"ParenOpen\":\n return parseParenGroup(lexer);\n\n // CBOR pattern\n case \"Cbor\":\n return parseCbor(lexer);\n\n // Simple patterns\n case \"RepeatZeroOrMore\":\n return ok(any()); // * means any\n case \"BoolKeyword\":\n return ok(anyBool());\n case \"BoolTrue\":\n return ok(bool(true));\n case \"BoolFalse\":\n return ok(bool(false));\n case \"NumberKeyword\":\n return ok(anyNumber());\n case \"TextKeyword\":\n return ok(anyText());\n case \"StringLiteral\":\n if (!token.value.ok) return err(token.value.error);\n return ok(text(token.value.value));\n case \"UnsignedInteger\":\n if (!token.value.ok) return err(token.value.error);\n return parseNumberRangeOrComparison(lexer, token.value.value);\n case \"Integer\":\n if (!token.value.ok) return err(token.value.error);\n return parseNumberRangeOrComparison(lexer, token.value.value);\n case \"Float\":\n if (!token.value.ok) return err(token.value.error);\n return parseNumberRangeOrComparison(lexer, token.value.value);\n case \"GreaterThanOrEqual\":\n return parseComparisonNumber(lexer, \">=\");\n case \"LessThanOrEqual\":\n return parseComparisonNumber(lexer, \"<=\");\n case \"GreaterThan\":\n return parseComparisonNumber(lexer, \">\");\n case \"LessThan\":\n return parseComparisonNumber(lexer, \"<\");\n case \"NaN\":\n return ok(patternLeaf(leafNumber(NumberPattern.nan())));\n case \"Infinity\":\n return ok(number(Infinity));\n case \"NegativeInfinity\":\n return ok(number(-Infinity));\n case \"Regex\":\n if (!token.value.ok) return err(token.value.error);\n try {\n return ok(textRegex(new RegExp(token.value.value)));\n } catch {\n return err(invalidRegex(span));\n }\n case \"BracketOpen\":\n return parseArray(lexer);\n case \"ByteString\":\n return ok(anyByteString());\n case \"HexPattern\":\n if (!token.value.ok) return err(token.value.error);\n return ok(byteString(token.value.value));\n case \"HexBinaryRegex\":\n if (!token.value.ok) return err(token.value.error);\n try {\n return ok(\n patternLeaf(leafByteString(ByteStringPattern.regex(new RegExp(token.value.value)))),\n );\n } catch {\n return err(invalidRegex(span));\n }\n case \"DateKeyword\":\n return ok(anyDate());\n case \"DatePattern\":\n if (!token.value.ok) return err(token.value.error);\n return parseDateContent(token.value.value, span);\n case \"Tagged\":\n return parseTag(lexer);\n case \"Known\":\n return ok(anyKnownValue());\n case \"SingleQuotedPattern\":\n if (!token.value.ok) return err(token.value.error);\n return parseKnownValueContent(token.value.value);\n case \"SingleQuotedRegex\":\n if (!token.value.ok) return err(token.value.error);\n try {\n return ok(\n patternLeaf(leafKnownValue(KnownValuePattern.regex(new RegExp(token.value.value)))),\n );\n } catch {\n return err(invalidRegex(span));\n }\n case \"Null\":\n return ok(nullPattern());\n\n // These tokens are not valid as primary expressions\n // They are handled by other parsers or are structural tokens\n case \"And\":\n case \"Or\":\n case \"Not\":\n case \"Traverse\":\n case \"RepeatZeroOrMoreLazy\":\n case \"RepeatZeroOrMorePossessive\":\n case \"RepeatOneOrMore\":\n case \"RepeatOneOrMoreLazy\":\n case \"RepeatOneOrMorePossessive\":\n case \"RepeatZeroOrOne\":\n case \"RepeatZeroOrOneLazy\":\n case \"RepeatZeroOrOnePossessive\":\n case \"ParenClose\":\n case \"BracketClose\":\n case \"Comma\":\n case \"Ellipsis\":\n case \"Range\":\n return err(unexpectedToken(token, span));\n }\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Parse a parenthesized group expression.\n */\nfunction parseParenGroup(lexer: Lexer): Result<Pattern> {\n const inner = parseOr(lexer);\n if (!inner.ok) return inner;\n\n const close = lexer.next();\n if (close?.token.type !== \"ParenClose\") {\n return err({ type: \"ExpectedCloseParen\", span: lexer.span() });\n }\n\n return ok(group(inner.value));\n}\n\n/**\n * Parse a capture group: @name pattern\n */\nfunction parseCapture(lexer: Lexer, name: string): Result<Pattern> {\n const inner = parseGroup(lexer);\n if (!inner.ok) return inner;\n return ok(capture(name, inner.value));\n}\n\n/**\n * Parse a search pattern: search(pattern)\n */\nfunction parseSearch(lexer: Lexer): Result<Pattern> {\n const open = lexer.next();\n if (open?.token.type !== \"ParenOpen\") {\n return err({ type: \"ExpectedOpenParen\", span: lexer.span() });\n }\n\n const inner = parseOr(lexer);\n if (!inner.ok) return inner;\n\n const close = lexer.next();\n if (close?.token.type !== \"ParenClose\") {\n return err({ type: \"ExpectedCloseParen\", span: lexer.span() });\n }\n\n return ok(search(inner.value));\n}\n\n/**\n * Parse number with possible range or comparison.\n */\nfunction parseNumberRangeOrComparison(lexer: Lexer, firstValue: number): Result<Pattern> {\n const next = lexer.peekToken();\n if (next === undefined) {\n return ok(number(firstValue));\n }\n\n if (next.token.type === \"Ellipsis\") {\n lexer.next(); // consume ...\n const endToken = lexer.next();\n if (endToken === undefined) {\n return err(unexpectedEndOfInput());\n }\n\n let endValue: number;\n if (endToken.token.type === \"UnsignedInteger\" || endToken.token.type === \"Integer\") {\n if (!endToken.token.value.ok) return err(endToken.token.value.error);\n endValue = endToken.token.value.value;\n } else if (endToken.token.type === \"Float\") {\n if (!endToken.token.value.ok) return err(endToken.token.value.error);\n endValue = endToken.token.value.value;\n } else {\n return err(unexpectedToken(endToken.token, endToken.span));\n }\n\n return ok(numberRange(firstValue, endValue));\n }\n\n return ok(number(firstValue));\n}\n\n/**\n * Parse comparison number: >=n, <=n, >n, <n\n */\nfunction parseComparisonNumber(lexer: Lexer, op: string): Result<Pattern> {\n const numToken = lexer.next();\n if (numToken === undefined) {\n return err(unexpectedEndOfInput());\n }\n\n let value: number;\n if (numToken.token.type === \"UnsignedInteger\" || numToken.token.type === \"Integer\") {\n if (!numToken.token.value.ok) return err(numToken.token.value.error);\n value = numToken.token.value.value;\n } else if (numToken.token.type === \"Float\") {\n if (!numToken.token.value.ok) return err(numToken.token.value.error);\n value = numToken.token.value.value;\n } else {\n return err(unexpectedToken(numToken.token, numToken.span));\n }\n\n switch (op) {\n case \">=\":\n return ok(patternLeaf(leafNumber(NumberPattern.greaterThanOrEqual(value))));\n case \"<=\":\n return ok(patternLeaf(leafNumber(NumberPattern.lessThanOrEqual(value))));\n case \">\":\n return ok(numberGreaterThan(value));\n case \"<\":\n return ok(numberLessThan(value));\n default:\n return ok(number(value));\n }\n}\n\n/**\n * Parse an array pattern.\n */\nfunction parseArray(lexer: Lexer): Result<Pattern> {\n // Check for empty array or simple patterns\n const first = lexer.peekToken();\n if (first === undefined) {\n return err(unexpectedEndOfInput());\n }\n\n if (first.token.type === \"BracketClose\") {\n lexer.next(); // consume ]\n return ok(patternLeaf(leafArray(ArrayPattern.count(0))));\n }\n\n if (first.token.type === \"RepeatZeroOrMore\") {\n lexer.next(); // consume *\n const close = lexer.next();\n if (close?.token.type !== \"BracketClose\") {\n return err({ type: \"ExpectedCloseBracket\", span: lexer.span() });\n }\n return ok(anyArray());\n }\n\n // Parse the inner pattern(s)\n const patterns: Pattern[] = [];\n\n while (true) {\n const next = lexer.peekToken();\n if (next === undefined) {\n return err(unexpectedEndOfInput());\n }\n\n if (next.token.type === \"BracketClose\") {\n lexer.next(); // consume ]\n break;\n }\n\n const pattern = parseOr(lexer);\n if (!pattern.ok) return pattern;\n patterns.push(pattern.value);\n\n const afterPattern = lexer.peekToken();\n if (afterPattern === undefined) {\n return err(unexpectedEndOfInput());\n }\n\n if (afterPattern.token.type === \"Comma\") {\n lexer.next(); // consume ,\n } else if (afterPattern.token.type !== \"BracketClose\") {\n return err(unexpectedToken(afterPattern.token, afterPattern.span));\n }\n }\n\n if (patterns.length === 0) {\n return ok(patternLeaf(leafArray(ArrayPattern.count(0))));\n }\n\n return ok(patternLeaf(leafArray(ArrayPattern.withPatterns(patterns))));\n}\n\n/**\n * Parse a tag pattern.\n */\nfunction parseTag(lexer: Lexer): Result<Pattern> {\n const open = lexer.next();\n if (open?.token.type !== \"ParenOpen\") {\n return ok(anyTag());\n }\n\n // Parse tag number or pattern\n const tagToken = lexer.next();\n if (tagToken === undefined) {\n return err(unexpectedEndOfInput());\n }\n\n if (tagToken.token.type !== \"UnsignedInteger\") {\n return err(unexpectedToken(tagToken.token, tagToken.span));\n }\n\n if (!tagToken.token.value.ok) return err(tagToken.token.value.error);\n // tagToken.token.value.value contains the tag number for future tag-specific matching\n\n const close = lexer.next();\n if (close?.token.type !== \"ParenClose\") {\n return err({ type: \"ExpectedCloseParen\", span: lexer.span() });\n }\n\n // Create a tagged pattern with the specific tag\n // For now, just match the tag number\n return ok(anyTag()); // Simplified - full implementation would match specific tag\n}\n\n/**\n * Parse date content from date'...' pattern.\n */\nfunction parseDateContent(content: string, span: Span): Result<Pattern> {\n // Try to parse as ISO date\n const parsed = Date.parse(content);\n if (isNaN(parsed)) {\n return err({ type: \"InvalidDateFormat\", span });\n }\n\n const cborDate = CborDate.fromDatetime(new Date(parsed));\n return ok(date(cborDate));\n}\n\n/**\n * Parse known value content from '...' pattern.\n */\nfunction parseKnownValueContent(content: string): Result<Pattern> {\n // Try to parse as number first\n const numValue = parseInt(content, 10);\n if (!isNaN(numValue)) {\n const kv = { value: () => BigInt(numValue) } as unknown as KnownValueType;\n return ok(knownValue(kv));\n }\n\n // Try to find by name in known values\n // For now, just create a named pattern\n return ok(patternLeaf(leafKnownValue(KnownValuePattern.named(content))));\n}\n\n/**\n * Parse CBOR pattern.\n */\nfunction parseCbor(lexer: Lexer): Result<Pattern> {\n // Check for optional content in parentheses\n const next = lexer.peekToken();\n if (next?.token.type !== \"ParenOpen\") {\n return ok(patternLeaf(leafTag(TaggedPattern.any()))); // cbor matches any CBOR\n }\n\n lexer.next(); // consume (\n\n // Parse inner content - this is a dcbor-pattern expression\n const inner = parseOr(lexer);\n if (!inner.ok) return inner;\n\n const close = lexer.next();\n if (close?.token.type !== \"ParenClose\") {\n return err({ type: \"ExpectedCloseParen\", span: lexer.span() });\n }\n\n return inner;\n}\n\n// ============================================================================\n// Structure Pattern Parsers\n// ============================================================================\n\nfunction parseNode(lexer: Lexer): Result<Pattern> {\n const next = lexer.peekToken();\n if (next?.token.type !== \"ParenOpen\") {\n return ok(anyNode());\n }\n\n lexer.next(); // consume (\n const inner = parseOr(lexer);\n if (!inner.ok) return inner;\n\n const close = lexer.next();\n if (close?.token.type !== \"ParenClose\") {\n return err({ type: \"ExpectedCloseParen\", span: lexer.span() });\n }\n\n return ok(patternStructure(structureNode(NodePattern.withSubject(inner.value))));\n}\n\nfunction parseAssertion(lexer: Lexer): Result<Pattern> {\n const next = lexer.peekToken();\n if (next?.token.type !== \"ParenOpen\") {\n return ok(anyAssertion());\n }\n\n lexer.next(); // consume (\n\n // Parse predicate pattern\n const pred = parseOr(lexer);\n if (!pred.ok) return pred;\n\n const comma = lexer.next();\n if (comma?.token.type !== \"Comma\") {\n return err(unexpectedToken(comma?.token ?? { type: \"Null\" }, comma?.span ?? lexer.span()));\n }\n\n // Parse object pattern\n const obj = parseOr(lexer);\n if (!obj.ok) return obj;\n\n const close = lexer.next();\n if (close?.token.type !== \"ParenClose\") {\n return err({ type: \"ExpectedCloseParen\", span: lexer.span() });\n }\n\n return ok(\n patternStructure(structureAssertions(AssertionsPattern.withBoth(pred.value, obj.value))),\n );\n}\n\nfunction parseAssertionPred(lexer: Lexer): Result<Pattern> {\n const next = lexer.peekToken();\n if (next?.token.type !== \"ParenOpen\") {\n return ok(anyAssertion());\n }\n\n lexer.next(); // consume (\n const inner = parseOr(lexer);\n if (!inner.ok) return inner;\n\n const close = lexer.next();\n if (close?.token.type !== \"ParenClose\") {\n return err({ type: \"ExpectedCloseParen\", span: lexer.span() });\n }\n\n return ok(assertionWithPredicate(inner.value));\n}\n\nfunction parseAssertionObj(lexer: Lexer): Result<Pattern> {\n const next = lexer.peekToken();\n if (next?.token.type !== \"ParenOpen\") {\n return ok(anyAssertion());\n }\n\n lexer.next(); // consume (\n const inner = parseOr(lexer);\n if (!inner.ok) return inner;\n\n const close = lexer.next();\n if (close?.token.type !== \"ParenClose\") {\n return err({ type: \"ExpectedCloseParen\", span: lexer.span() });\n }\n\n return ok(assertionWithObject(inner.value));\n}\n\nfunction parseDigest(lexer: Lexer): Result<Pattern> {\n const next = lexer.peekToken();\n if (next?.token.type !== \"ParenOpen\") {\n return ok(patternStructure(structureDigest(DigestPattern.any())));\n }\n\n lexer.next(); // consume (\n\n // Parse digest hex pattern\n const digestToken = lexer.next();\n if (digestToken === undefined) {\n return err(unexpectedEndOfInput());\n }\n\n if (digestToken.token.type === \"HexPattern\") {\n if (!digestToken.token.value.ok) return err(digestToken.token.value.error);\n const close = lexer.next();\n if (close?.token.type !== \"ParenClose\") {\n return err({ type: \"ExpectedCloseParen\", span: lexer.span() });\n }\n return ok(digestPrefix(digestToken.token.value.value));\n }\n\n return err(unexpectedToken(digestToken.token, digestToken.span));\n}\n\nfunction parseObject(lexer: Lexer): Result<Pattern> {\n const next = lexer.peekToken();\n if (next?.token.type !== \"ParenOpen\") {\n return ok(anyObject());\n }\n\n lexer.next(); // consume (\n const inner = parseOr(lexer);\n if (!inner.ok) return inner;\n\n const close = lexer.next();\n if (close?.token.type !== \"ParenClose\") {\n return err({ type: \"ExpectedCloseParen\", span: lexer.span() });\n }\n\n return ok(object(inner.value));\n}\n\nfunction parsePredicate(lexer: Lexer): Result<Pattern> {\n const next = lexer.peekToken();\n if (next?.token.type !== \"ParenOpen\") {\n return ok(anyPredicate());\n }\n\n lexer.next(); // consume (\n const inner = parseOr(lexer);\n if (!inner.ok) return inner;\n\n const close = lexer.next();\n if (close?.token.type !== \"ParenClose\") {\n return err({ type: \"ExpectedCloseParen\", span: lexer.span() });\n }\n\n return ok(predicate(inner.value));\n}\n\nfunction parseSubject(lexer: Lexer): Result<Pattern> {\n const next = lexer.peekToken();\n if (next?.token.type !== \"ParenOpen\") {\n return ok(anySubject());\n }\n\n lexer.next(); // consume (\n const inner = parseOr(lexer);\n if (!inner.ok) return inner;\n\n const close = lexer.next();\n if (close?.token.type !== \"ParenClose\") {\n return err({ type: \"ExpectedCloseParen\", span: lexer.span() });\n }\n\n return ok(subject(inner.value));\n}\n\nfunction parseUnwrap(lexer: Lexer): Result<Pattern> {\n const next = lexer.peekToken();\n if (next?.token.type !== \"ParenOpen\") {\n return ok(unwrapEnvelope());\n }\n\n lexer.next(); // consume (\n const inner = parseOr(lexer);\n if (!inner.ok) return inner;\n\n const close = lexer.next();\n if (close?.token.type !== \"ParenClose\") {\n return err({ type: \"ExpectedCloseParen\", span: lexer.span() });\n }\n\n return ok(unwrapMatching(inner.value));\n}\n","/**\n * @bcts/envelope-pattern - Pattern matching for Gordian Envelope structures\n *\n * This is a 1:1 TypeScript port of bc-envelope-pattern-rust.\n *\n * @module envelope-pattern\n */\n\n// Re-export types from dcbor-pattern that are used in this package\nexport { Interval, Quantifier, Reluctance } from \"@bcts/dcbor-pattern\";\n\n// Error types\nexport * from \"./error\";\n\n// Format utilities\nexport * from \"./format\";\n\n// Pattern types and matching\nexport * from \"./pattern\";\n\n// Parsing\nexport * from \"./parse\";\n\n/**\n * Package version.\n */\nexport const VERSION = \"1.0.0-alpha.11\";\n"],"mappings":"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"}
|