@reifydb/core 0.9.3 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +210 -113
- package/dist/index.js +1054 -544
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constant.ts","../src/value/blob.ts","../src/value/boolean.ts","../src/value/date.ts","../src/value/time.ts","../src/value/datetime.ts","../src/value/decimal.ts","../src/value/float4.ts","../src/value/float8.ts","../src/value/int1.ts","../src/value/int2.ts","../src/value/int4.ts","../src/value/int8.ts","../src/value/int16.ts","../src/value/duration.ts","../src/value/uint1.ts","../src/value/uint2.ts","../src/value/uint4.ts","../src/value/uint8.ts","../src/value/uint16.ts","../src/value/none.ts","../src/present/value.ts","../src/value/option.ts","../src/value/utf8.ts","../src/value/uuid4.ts","../src/value/uuid7.ts","../src/value/identityid.ts","../src/value/wire-type.ts","../src/value/index.ts","../src/decoder.ts","../src/encoder.ts","../src/type-code.ts","../src/shape/builder.ts","../src/shape/parser.ts","../src/shape/validator.ts","../src/shape/widen.ts","../src/shape/check.ts","../src/shape/transform.ts","../src/present/width.ts","../src/present/table.ts","../src/syntax/keyword.ts","../src/syntax/tokenizer.ts","../src/types.ts"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nexport const NONE_VALUE = \"⟪none⟫\";\n\nconst NONE_MARKER_OPEN = NONE_VALUE.slice(0, -1);\nconst NONE_MARKER_CLOSE = NONE_VALUE.slice(-1);\n\nexport function noneMarker(depth: number): string {\n return depth === 0 ? NONE_VALUE : `${NONE_MARKER_OPEN}:${depth}${NONE_MARKER_CLOSE}`;\n}\n\nexport function noneMarkerDepth(payload: string): number | undefined {\n if (payload === NONE_VALUE) {\n return 0;\n }\n if (!payload.startsWith(`${NONE_MARKER_OPEN}:`) || !payload.endsWith(NONE_MARKER_CLOSE)) {\n return undefined;\n }\n const digits = payload.slice(NONE_MARKER_OPEN.length + 1, -NONE_MARKER_CLOSE.length);\n return /^[1-9][0-9]*$/.test(digits) ? Number(digits) : undefined;\n}\n\nexport const ROW_NUMBER_KEY = \"#rownum\";\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\n/**\n * A binary large object (BLOB) value that can hold arbitrary byte data.\n */\nexport class BlobValue implements Value {\n readonly type: Type = \"Blob\" as const;\n private readonly bytes?: Uint8Array;\n\n constructor(value?: Uint8Array | ArrayBuffer | string | number[]) {\n if (value !== undefined) {\n if (value instanceof Uint8Array) {\n this.bytes = new Uint8Array(value);\n } else if (value instanceof ArrayBuffer) {\n this.bytes = new Uint8Array(value);\n } else if (typeof value === 'string') {\n // Try to parse as hex or base64\n const parsed = BlobValue.parseString(value);\n if (parsed === null) {\n throw new Error(`Invalid blob string: ${value}`);\n }\n this.bytes = parsed;\n } else if (Array.isArray(value)) {\n // Array of numbers (bytes)\n for (const byte of value) {\n if (!Number.isInteger(byte) || byte < 0 || byte > 255) {\n throw new Error(`Invalid byte value: ${byte}`);\n }\n }\n this.bytes = new Uint8Array(value);\n } else {\n throw new Error(`Blob value must be a Uint8Array, ArrayBuffer, string, or number[], got ${typeof value}`);\n }\n } else {\n this.bytes = undefined;\n }\n }\n\n /**\n * Create a new BLOB from raw bytes\n */\n static new(bytes: Uint8Array | number[]): BlobValue {\n return new BlobValue(bytes);\n }\n\n /**\n * Create an empty BLOB\n */\n static empty(): BlobValue {\n return new BlobValue(new Uint8Array(0));\n }\n\n /**\n * Create a BLOB from a byte array\n */\n static fromBytes(bytes: number[]): BlobValue {\n return new BlobValue(bytes);\n }\n\n /**\n * Create a BLOB from a hex string\n */\n static fromHex(hex: string): BlobValue {\n // Remove 0x prefix if present\n const cleanHex = hex.startsWith('0x') || hex.startsWith('0X')\n ? hex.substring(2)\n : hex;\n\n if (cleanHex.length % 2 !== 0) {\n throw new Error(`Invalid hex string: odd length`);\n }\n\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n const byte = parseInt(cleanHex.substring(i, i + 2), 16);\n if (isNaN(byte)) {\n throw new Error(`Invalid hex string: ${hex}`);\n }\n bytes[i / 2] = byte;\n }\n return new BlobValue(bytes);\n }\n\n /**\n * Create a BLOB from a base64 string\n */\n static fromBase64(base64: string): BlobValue {\n // Validate base64 format\n if (!/^[A-Za-z0-9+/]*={0,2}$/.test(base64)) {\n throw new Error(`Invalid base64 string: ${base64}`);\n }\n\n try {\n if (typeof Buffer !== 'undefined') {\n // Node.js environment\n const buffer = Buffer.from(base64, 'base64');\n return new BlobValue(new Uint8Array(buffer));\n } else {\n // Browser environment\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return new BlobValue(bytes);\n }\n } catch (e) {\n throw new Error(`Invalid base64 string: ${base64}`);\n }\n }\n\n /**\n * Create a BLOB from a UTF-8 string\n */\n static fromUtf8(str: string): BlobValue {\n const encoder = new TextEncoder();\n return new BlobValue(encoder.encode(str));\n }\n\n /**\n * Parse a blob string (hex or undefined)\n */\n static parse(str: string): BlobValue {\n const trimmed = str.trim();\n\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new BlobValue(undefined);\n }\n\n const parsed = BlobValue.parseString(trimmed);\n if (parsed === null) {\n throw new Error(`Cannot parse \"${str}\" as Blob`);\n }\n\n return new BlobValue(parsed);\n }\n\n /**\n * Get the raw bytes\n */\n asBytes(): Uint8Array | undefined {\n return this.bytes ? new Uint8Array(this.bytes) : undefined;\n }\n\n /**\n * Get the length in bytes\n */\n length(): number {\n return this.bytes?.length ?? 0;\n }\n\n /**\n * Check if the BLOB is empty\n */\n isEmpty(): boolean {\n return this.bytes?.length === 0;\n }\n\n /**\n * Convert to hex string with 0x prefix\n */\n toHex(): string | undefined {\n if (this.bytes === undefined) return undefined;\n\n const hex = Array.from(this.bytes)\n .map(byte => byte.toString(16).padStart(2, '0'))\n .join('');\n return '0x' + hex;\n }\n\n /**\n * Convert to base64 string\n */\n toBase64(): string | undefined {\n if (this.bytes === undefined) return undefined;\n\n if (typeof Buffer !== 'undefined') {\n // Node.js environment\n return Buffer.from(this.bytes).toString('base64');\n } else {\n // Browser environment\n const binaryString = Array.from(this.bytes)\n .map(byte => String.fromCharCode(byte))\n .join('');\n return btoa(binaryString);\n }\n }\n\n /**\n * Convert to UTF-8 string\n */\n toUtf8(): string | undefined {\n if (this.bytes === undefined) return undefined;\n\n const decoder = new TextDecoder();\n return decoder.decode(this.bytes);\n }\n\n /**\n * Format as hex string with 0x prefix\n */\n toString(): string {\n if (this.bytes === undefined) {\n return 'none';\n }\n return this.toHex()!;\n }\n\n valueOf(): Uint8Array | undefined {\n return this.bytes ? new Uint8Array(this.bytes) : undefined;\n }\n\n /**\n * Get the internal representation\n */\n get value(): Uint8Array | undefined {\n return this.valueOf();\n }\n\n /**\n * Compare two blobs for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherBlob = other as BlobValue;\n if (this.bytes === undefined || otherBlob.bytes === undefined) {\n return this.bytes === otherBlob.bytes;\n }\n\n if (this.bytes.length !== otherBlob.bytes.length) {\n return false;\n }\n\n for (let i = 0; i < this.bytes.length; i++) {\n if (this.bytes[i] !== otherBlob.bytes[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Helper to parse a string as hex\n */\n private static parseString(str: string): Uint8Array | null {\n // Try hex first (with or without 0x prefix)\n if (str.startsWith('0x') || str.startsWith('0X')) {\n try {\n return BlobValue.fromHex(str).bytes!;\n } catch {\n return null;\n }\n }\n\n // Check if it looks like hex (all hex digits)\n if (/^[0-9a-fA-F]+$/.test(str) && str.length % 2 === 0) {\n try {\n return BlobValue.fromHex(str).bytes!;\n } catch {\n return null;\n }\n }\n\n return null;\n }\n\n toJSON(): string | null {\n return this.bytes === undefined ? null : this.toHex()!;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class BooleanValue implements Value {\n readonly type: Type = \"Boolean\" as const;\n public readonly value?: boolean;\n\n constructor(value?: boolean) {\n if (value !== undefined) {\n if (typeof value !== 'boolean') {\n throw new Error(`Boolean value must be a boolean, got ${typeof value}`);\n }\n this.value = value;\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): BooleanValue {\n const trimmed = str.trim().toLowerCase();\n\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new BooleanValue(undefined);\n }\n\n if (trimmed === 'true') {\n return new BooleanValue(true);\n }\n\n if (trimmed === 'false') {\n return new BooleanValue(false);\n }\n\n throw new Error(`Cannot parse \"${str}\" as Boolean`);\n }\n\n valueOf(): boolean | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two boolean values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherBoolean = other as BooleanValue;\n return this.value === otherBoolean.value;\n }\n\n toJSON(): boolean | null {\n return this.value ?? null;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\n/**\n * A date value representing a calendar date (year, month, day) without time information.\n * Always interpreted in UTC.\n * Internally stored as months and days.\n */\nexport class DateValue implements Value {\n readonly type: Type = \"Date\" as const;\n private readonly months?: number; // years*12 + months\n private readonly days?: number; // day of month (1-31)\n\n constructor(value?: Date | string | number) {\n if (value !== undefined) {\n if (value instanceof Date) {\n // Remove time component - set to UTC midnight\n const year = value.getUTCFullYear();\n const month = value.getUTCMonth() + 1; // Convert to 1-based\n const day = value.getUTCDate();\n \n this.months = year * 12 + (month - 1);\n this.days = day;\n } else if (typeof value === 'string') {\n // Parse YYYY-MM-DD format\n const parsed = DateValue.parseDate(value);\n if (!parsed) {\n throw new Error(`Invalid date string: ${value}`);\n }\n this.months = parsed.months;\n this.days = parsed.days;\n } else if (typeof value === 'number') {\n // Interpret as days since epoch\n const date = DateValue.fromDaysSinceEpochToComponents(value);\n if (!date) {\n throw new Error(`Invalid days since epoch: ${value}`);\n }\n this.months = date.months;\n this.days = date.days;\n } else {\n throw new Error(`Date value must be a Date, string, or number, got ${typeof value}`);\n }\n } else {\n this.months = undefined;\n this.days = undefined;\n }\n }\n\n /**\n * Create a DateValue from year, month (1-12), and day (1-31)\n */\n static fromYMD(year: number, month: number, day: number): DateValue {\n // Validate the date is valid\n if (!DateValue.isValidDate(year, month, day)) {\n throw new Error(`Invalid date: ${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`);\n }\n \n const result = new DateValue(undefined);\n (result as any).months = year * 12 + (month - 1);\n (result as any).days = day;\n return result;\n }\n\n /**\n * Get today's date (in UTC)\n */\n static today(): DateValue {\n const now = new Date();\n return DateValue.fromYMD(\n now.getUTCFullYear(),\n now.getUTCMonth() + 1,\n now.getUTCDate()\n );\n }\n\n /**\n * Parse a date string in YYYY-MM-DD format\n */\n static parse(str: string): DateValue {\n const trimmed = str.trim();\n \n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new DateValue(undefined);\n }\n\n const parsed = DateValue.parseDate(trimmed);\n if (!parsed) {\n throw new Error(`Cannot parse \"${str}\" as Date`);\n }\n\n const result = new DateValue(undefined);\n (result as any).months = parsed.months;\n (result as any).days = parsed.days;\n return result;\n }\n\n /**\n * Convert to days since Unix epoch (1970-01-01) for storage\n */\n toDaysSinceEpoch(): number | undefined {\n if (this.months === undefined || this.days === undefined) {\n return undefined;\n }\n \n const year = Math.floor(this.months / 12);\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n const month = m + 1;\n \n // Create date with special handling for years < 100\n let date: Date;\n if (year >= 0 && year < 100) {\n date = new Date(Date.UTC(2000, month - 1, this.days));\n date.setUTCFullYear(year);\n } else {\n date = new Date(Date.UTC(year, month - 1, this.days));\n }\n \n const epoch = new Date(Date.UTC(1970, 0, 1));\n const diffMs = date.getTime() - epoch.getTime();\n return Math.floor(diffMs / (1000 * 60 * 60 * 24));\n }\n\n /**\n * Create from days since Unix epoch\n */\n static fromDaysSinceEpochToComponents(days: number): { months: number; days: number } | null {\n const epoch = new Date(Date.UTC(1970, 0, 1));\n const ms = days * 24 * 60 * 60 * 1000;\n const date = new Date(epoch.getTime() + ms);\n \n // Check for valid date\n if (!isFinite(date.getTime())) {\n return null;\n }\n \n const year = date.getUTCFullYear();\n const month = date.getUTCMonth() + 1;\n const day = date.getUTCDate();\n \n return {\n months: year * 12 + (month - 1),\n days: day\n };\n }\n\n /**\n * Get the year component\n */\n year(): number | undefined {\n if (this.months === undefined) return undefined;\n return Math.floor(this.months / 12);\n }\n\n /**\n * Get the month component (1-12)\n */\n month(): number | undefined {\n if (this.months === undefined) return undefined;\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n return m + 1;\n }\n\n /**\n * Get the day component (1-31)\n */\n day(): number | undefined {\n return this.days;\n }\n\n /**\n * Format as YYYY-MM-DD string\n */\n toString(): string {\n if (this.months === undefined || this.days === undefined) {\n return 'none';\n }\n\n const year = Math.floor(this.months / 12);\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n const month = String(m + 1).padStart(2, '0');\n const day = String(this.days).padStart(2, '0');\n \n // Handle negative years (BC dates)\n if (year < 0) {\n const absYear = Math.abs(year);\n return `-${String(absYear).padStart(4, '0')}-${month}-${day}`;\n } else {\n return `${String(year).padStart(4, '0')}-${month}-${day}`;\n }\n }\n\n valueOf(): Date | undefined {\n if (this.months === undefined || this.days === undefined) {\n return undefined;\n }\n \n const year = Math.floor(this.months / 12);\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n const month = m + 1;\n \n // Handle years < 100 specially\n let date: Date;\n if (year >= 0 && year < 100) {\n date = new Date(Date.UTC(2000, month - 1, this.days));\n date.setUTCFullYear(year);\n } else {\n date = new Date(Date.UTC(year, month - 1, this.days));\n }\n \n return date;\n }\n \n /**\n * Get the internal representation\n */\n get value(): Date | undefined {\n return this.valueOf();\n }\n\n /**\n * Helper to parse YYYY-MM-DD format\n */\n private static parseDate(str: string): { months: number; days: number } | null {\n // Match YYYY-MM-DD format, including negative years\n const match = str.match(/^(-?\\d{1,4})-(\\d{2})-(\\d{2})$/);\n if (!match) {\n return null;\n }\n\n const year = parseInt(match[1], 10);\n const month = parseInt(match[2], 10);\n const day = parseInt(match[3], 10);\n\n // Validate month and day ranges\n if (month < 1 || month > 12) {\n return null;\n }\n if (day < 1 || day > 31) {\n return null;\n }\n\n // Validate the date is valid (e.g., no Feb 30)\n if (!DateValue.isValidDate(year, month, day)) {\n return null;\n }\n\n return {\n months: year * 12 + (month - 1),\n days: day\n };\n }\n \n /**\n * Helper to validate a date\n */\n private static isValidDate(year: number, month: number, day: number): boolean {\n // Create a date and check if components match\n let date: Date;\n if (year >= 0 && year < 100) {\n date = new Date(Date.UTC(2000, month - 1, day));\n date.setUTCFullYear(year);\n } else {\n date = new Date(Date.UTC(year, month - 1, day));\n }\n \n return date.getUTCFullYear() === year &&\n date.getUTCMonth() === month - 1 &&\n date.getUTCDate() === day;\n }\n\n /**\n * Compare two dates for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherDate = other as DateValue;\n if (this.months === undefined || otherDate.months === undefined) {\n return this.months === otherDate.months && this.days === otherDate.days;\n }\n \n return this.months === otherDate.months && this.days === otherDate.days;\n }\n\n toJSON(): string | null {\n if (this.months === undefined || this.days === undefined) {\n return null;\n }\n return this.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport { Type, Value, TypeValuePair } from \".\";\nimport { NONE_VALUE } from \"../constant\";\n\n/**\n * A time value representing time of day (hour, minute, second, nanosecond) without date information.\n * Internally stored as nanoseconds since midnight.\n */\nexport class TimeValue implements Value {\n readonly type: Type = \"Time\" as const;\n public readonly value?: bigint; // nanoseconds since midnight\n\n private static readonly NANOS_PER_SECOND = 1_000_000_000n;\n private static readonly NANOS_PER_MINUTE = 60_000_000_000n;\n private static readonly NANOS_PER_HOUR = 3_600_000_000_000n;\n private static readonly NANOS_PER_DAY = 86_400_000_000_000n;\n\n constructor(value?: bigint | string | number) {\n if (value !== undefined) {\n if (typeof value === 'bigint') {\n // Validate range (0 to 24 hours in nanoseconds)\n if (value < 0n || value >= TimeValue.NANOS_PER_DAY) {\n throw new Error(`Time value must be between 0 and ${TimeValue.NANOS_PER_DAY - 1n} nanoseconds`);\n }\n this.value = value;\n } else if (typeof value === 'string') {\n // Parse HH:MM:SS[.nnnnnnnnn] format\n const parsed = TimeValue.parseTime(value);\n if (parsed === null) {\n throw new Error(`Invalid time string: ${value}`);\n }\n this.value = parsed;\n } else if (typeof value === 'number') {\n // Accept number as nanoseconds since midnight\n const bigintValue = BigInt(Math.floor(value));\n if (bigintValue < 0n || bigintValue >= TimeValue.NANOS_PER_DAY) {\n throw new Error(`Time value must be between 0 and ${TimeValue.NANOS_PER_DAY - 1n} nanoseconds`);\n }\n this.value = bigintValue;\n } else {\n throw new Error(`Time value must be a bigint, string, or number, got ${typeof value}`);\n }\n } else {\n this.value = undefined;\n }\n }\n\n /**\n * Create a TimeValue from hour, minute, second, and nanosecond\n */\n static fromHMSN(hour: number, minute: number, second: number, nano: number = 0): TimeValue {\n // Validate inputs\n if (hour < 0 || hour > 23) {\n throw new Error(`Invalid hour: ${hour}`);\n }\n if (minute < 0 || minute > 59) {\n throw new Error(`Invalid minute: ${minute}`);\n }\n if (second < 0 || second > 59) {\n throw new Error(`Invalid second: ${second}`);\n }\n if (nano < 0 || nano > 999_999_999) {\n throw new Error(`Invalid nanosecond: ${nano}`);\n }\n\n const nanos = BigInt(hour) * TimeValue.NANOS_PER_HOUR +\n BigInt(minute) * TimeValue.NANOS_PER_MINUTE +\n BigInt(second) * TimeValue.NANOS_PER_SECOND +\n BigInt(nano);\n\n return new TimeValue(nanos);\n }\n\n /**\n * Create a TimeValue from hour, minute, and second (no fractional seconds)\n */\n static fromHMS(hour: number, minute: number, second: number): TimeValue {\n return TimeValue.fromHMSN(hour, minute, second, 0);\n }\n\n /**\n * Create midnight (00:00:00.000000000)\n */\n static midnight(): TimeValue {\n return new TimeValue(0n);\n }\n\n /**\n * Create noon (12:00:00.000000000)\n */\n static noon(): TimeValue {\n return new TimeValue(12n * TimeValue.NANOS_PER_HOUR);\n }\n\n /**\n * Parse a time string in HH:MM:SS[.nnnnnnnnn] format\n */\n static parse(str: string): TimeValue {\n const trimmed = str.trim();\n \n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new TimeValue(undefined);\n }\n\n const parsed = TimeValue.parseTime(trimmed);\n if (parsed === null) {\n throw new Error(`Cannot parse \"${str}\" as Time`);\n }\n\n return new TimeValue(parsed);\n }\n\n /**\n * Get the hour component (0-23)\n */\n hour(): number | undefined {\n if (this.value === undefined) return undefined;\n return Number(this.value / TimeValue.NANOS_PER_HOUR);\n }\n\n /**\n * Get the minute component (0-59)\n */\n minute(): number | undefined {\n if (this.value === undefined) return undefined;\n const remainingAfterHours = this.value % TimeValue.NANOS_PER_HOUR;\n return Number(remainingAfterHours / TimeValue.NANOS_PER_MINUTE);\n }\n\n /**\n * Get the second component (0-59)\n */\n second(): number | undefined {\n if (this.value === undefined) return undefined;\n const remainingAfterHours = this.value % TimeValue.NANOS_PER_HOUR;\n const remainingAfterMinutes = remainingAfterHours % TimeValue.NANOS_PER_MINUTE;\n return Number(remainingAfterMinutes / TimeValue.NANOS_PER_SECOND);\n }\n\n /**\n * Get the nanosecond component (0-999999999)\n */\n nanosecond(): number | undefined {\n if (this.value === undefined) return undefined;\n return Number(this.value % TimeValue.NANOS_PER_SECOND);\n }\n\n /**\n * Convert to nanoseconds since midnight for storage\n */\n toNanosSinceMidnight(): bigint | undefined {\n return this.value;\n }\n\n /**\n * Create from nanoseconds since midnight\n */\n static fromNanosSinceMidnight(nanos: bigint | number): TimeValue {\n return new TimeValue(typeof nanos === 'number' ? BigInt(nanos) : nanos);\n }\n\n /**\n * Format as HH:MM:SS.nnnnnnnnn string\n */\n toString(): string {\n if (this.value === undefined) {\n return 'none';\n }\n\n const hour = this.hour()!;\n const minute = this.minute()!;\n const second = this.second()!;\n const nano = this.nanosecond()!;\n\n const hourStr = String(hour).padStart(2, '0');\n const minuteStr = String(minute).padStart(2, '0');\n const secondStr = String(second).padStart(2, '0');\n const nanoStr = String(nano).padStart(9, '0');\n\n return `${hourStr}:${minuteStr}:${secondStr}.${nanoStr}`;\n }\n\n valueOf(): bigint | undefined {\n return this.value;\n }\n\n /**\n * Helper to parse HH:MM:SS[.nnnnnnnnn] format\n */\n private static parseTime(str: string): bigint | null {\n // Match HH:MM:SS or HH:MM:SS.fractional\n const match = str.match(/^(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{1,9}))?$/);\n if (!match) {\n return null;\n }\n\n const hour = parseInt(match[1], 10);\n const minute = parseInt(match[2], 10);\n const second = parseInt(match[3], 10);\n \n // Parse fractional seconds if present\n let nano = 0;\n if (match[4]) {\n // Pad or truncate to 9 digits\n const fracStr = match[4].padEnd(9, '0').substring(0, 9);\n nano = parseInt(fracStr, 10);\n }\n\n // Validate ranges\n if (hour < 0 || hour > 23) {\n return null;\n }\n if (minute < 0 || minute > 59) {\n return null;\n }\n if (second < 0 || second > 59) {\n return null;\n }\n\n const nanos = BigInt(hour) * TimeValue.NANOS_PER_HOUR +\n BigInt(minute) * TimeValue.NANOS_PER_MINUTE +\n BigInt(second) * TimeValue.NANOS_PER_SECOND +\n BigInt(nano);\n\n return nanos;\n }\n\n /**\n * Compare two Time values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherTime = other as TimeValue;\n return this.value === otherTime.value;\n }\n\n toJSON(): string | null {\n return this.value === undefined ? null : this.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\nimport {DateValue} from \"./date\";\nimport {TimeValue} from \"./time\";\n\n/**\n * A date and time value with nanosecond precision.\n * Always in UTC timezone.\n * Internally stored as months, days, and nanoseconds.\n */\nexport class DateTimeValue implements Value {\n readonly type: Type = \"DateTime\" as const;\n private readonly months?: number; // years*12 + months \n private readonly days?: number; // day of month (1-31)\n private readonly nanos?: bigint; // nanoseconds since midnight\n\n constructor(value?: Date | string | number | bigint) {\n if (value !== undefined) {\n if (value instanceof Date) {\n // Store as UTC with millisecond precision from Date\n const year = value.getUTCFullYear();\n const month = value.getUTCMonth() + 1;\n const day = value.getUTCDate();\n const hour = value.getUTCHours();\n const minute = value.getUTCMinutes();\n const second = value.getUTCSeconds();\n const millis = value.getUTCMilliseconds();\n\n this.months = year * 12 + (month - 1);\n this.days = day;\n this.nanos = BigInt(hour) * 3_600_000_000_000n +\n BigInt(minute) * 60_000_000_000n +\n BigInt(second) * 1_000_000_000n +\n BigInt(millis) * 1_000_000n;\n } else if (typeof value === 'string') {\n // Parse ISO 8601 format\n const parsed = DateTimeValue.parseDateTime(value);\n if (!parsed) {\n throw new Error(`Invalid datetime string: ${value}`);\n }\n this.months = parsed.months;\n this.days = parsed.days;\n this.nanos = parsed.nanos;\n } else if (typeof value === 'number') {\n // Interpret as milliseconds since epoch\n const date = new Date(value);\n const year = date.getUTCFullYear();\n const month = date.getUTCMonth() + 1;\n const day = date.getUTCDate();\n const hour = date.getUTCHours();\n const minute = date.getUTCMinutes();\n const second = date.getUTCSeconds();\n const millis = date.getUTCMilliseconds();\n\n this.months = year * 12 + (month - 1);\n this.days = day;\n this.nanos = BigInt(hour) * 3_600_000_000_000n +\n BigInt(minute) * 60_000_000_000n +\n BigInt(second) * 1_000_000_000n +\n BigInt(millis) * 1_000_000n;\n } else if (typeof value === 'bigint') {\n // Interpret as nanoseconds since epoch\n const millis = Number(value / 1_000_000n);\n const extraNanos = value % 1_000_000n;\n const date = new Date(millis);\n\n const year = date.getUTCFullYear();\n const month = date.getUTCMonth() + 1;\n const day = date.getUTCDate();\n const hour = date.getUTCHours();\n const minute = date.getUTCMinutes();\n const second = date.getUTCSeconds();\n const dateMillis = date.getUTCMilliseconds();\n\n this.months = year * 12 + (month - 1);\n this.days = day;\n this.nanos = BigInt(hour) * 3_600_000_000_000n +\n BigInt(minute) * 60_000_000_000n +\n BigInt(second) * 1_000_000_000n +\n BigInt(dateMillis) * 1_000_000n +\n extraNanos;\n } else {\n throw new Error(`DateTime value must be a Date, string, number, or bigint, got ${typeof value}`);\n }\n } else {\n this.months = undefined;\n this.days = undefined;\n this.nanos = undefined;\n }\n }\n\n /**\n * Create a DateTimeValue from year, month, day, hour, minute, second, nanosecond\n */\n static fromYMDHMSN(\n year: number,\n month: number,\n day: number,\n hour: number,\n minute: number,\n second: number,\n nano: number = 0\n ): DateTimeValue {\n // Validate inputs\n if (hour < 0 || hour > 23) {\n throw new Error(`Invalid hour: ${hour}`);\n }\n if (minute < 0 || minute > 59) {\n throw new Error(`Invalid minute: ${minute}`);\n }\n if (second < 0 || second > 59) {\n throw new Error(`Invalid second: ${second}`);\n }\n if (nano < 0 || nano > 999_999_999) {\n throw new Error(`Invalid nanosecond: ${nano}`);\n }\n\n // Validate the date\n if (!DateTimeValue.isValidDate(year, month, day)) {\n throw new Error(`Invalid datetime: ${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')} ${String(hour).padStart(2, '0')}:${String(minute).padStart(2, '0')}:${String(second).padStart(2, '0')}`);\n }\n\n const result = new DateTimeValue(undefined);\n (result as any).months = year * 12 + (month - 1);\n (result as any).days = day;\n (result as any).nanos = BigInt(hour) * 3_600_000_000_000n +\n BigInt(minute) * 60_000_000_000n +\n BigInt(second) * 1_000_000_000n +\n BigInt(nano);\n return result;\n }\n\n /**\n * Create a DateTimeValue from year, month, day, hour, minute, second (no fractional)\n */\n static fromYMDHMS(\n year: number,\n month: number,\n day: number,\n hour: number,\n minute: number,\n second: number\n ): DateTimeValue {\n return DateTimeValue.fromYMDHMSN(year, month, day, hour, minute, second, 0);\n }\n\n /**\n * Create from Unix timestamp in seconds\n */\n static fromTimestamp(seconds: number): DateTimeValue {\n return new DateTimeValue(seconds * 1000);\n }\n\n /**\n * Create from Unix timestamp in milliseconds\n */\n static fromTimestampMillis(millis: number): DateTimeValue {\n return new DateTimeValue(millis);\n }\n\n /**\n * Create from nanoseconds since Unix epoch\n */\n static fromNanosSinceEpoch(nanos: bigint): DateTimeValue {\n return new DateTimeValue(nanos);\n }\n\n /**\n * Create from separate seconds and nanoseconds\n */\n static fromParts(seconds: number, nanos: number): DateTimeValue {\n if (nanos < 0 || nanos > 999_999_999) {\n throw new Error(`Invalid nanoseconds: ${nanos}`);\n }\n const millis = seconds * 1000 + Math.floor(nanos / 1_000_000);\n const extraNanos = nanos % 1_000_000;\n const result = new DateTimeValue(millis);\n\n // Add the extra nanoseconds\n if (result.nanos !== undefined) {\n (result as any).nanos = result.nanos + BigInt(extraNanos);\n }\n return result;\n }\n\n /**\n * Get current datetime\n */\n static now(): DateTimeValue {\n return new DateTimeValue(new Date());\n }\n\n /**\n * Get default datetime (Unix epoch)\n */\n static default(): DateTimeValue {\n return DateTimeValue.fromYMDHMS(1970, 1, 1, 0, 0, 0);\n }\n\n /**\n * Parse a datetime string in ISO 8601 format\n */\n static parse(str: string): DateTimeValue {\n const trimmed = str.trim();\n\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new DateTimeValue(undefined);\n }\n\n const parsed = DateTimeValue.parseDateTime(trimmed);\n if (!parsed) {\n throw new Error(`Cannot parse \"${str}\" as DateTime`);\n }\n\n const result = new DateTimeValue(undefined);\n (result as any).months = parsed.months;\n (result as any).days = parsed.days;\n (result as any).nanos = parsed.nanos;\n return result;\n }\n\n /**\n * Get Unix timestamp in seconds\n */\n toEpochSecs(): number | undefined {\n const date = this.valueOf();\n if (date === undefined) return undefined;\n return Math.floor(date.getTime() / 1000);\n }\n\n /**\n * Get Unix timestamp in nanoseconds\n */\n timestampNanos(): bigint | undefined {\n const date = this.valueOf();\n if (date === undefined || this.nanos === undefined) return undefined;\n\n // Convert date to epoch nanoseconds\n const epochNanos = BigInt(date.getTime()) * 1_000_000n;\n\n // The nanos field stores time-of-day, but we already included millis in epochNanos\n // So we need to add only the sub-millisecond portion\n const subMillisNanos = this.nanos % 1_000_000n;\n\n return epochNanos + subMillisNanos;\n }\n\n /**\n * Convert to nanoseconds since Unix epoch for storage\n */\n toNanosSinceEpoch(): bigint | undefined {\n return this.timestampNanos();\n }\n\n /**\n * Get separate seconds and nanoseconds for storage\n */\n toParts(): [number, number] | undefined {\n const date = this.valueOf();\n if (date === undefined || this.nanos === undefined) return undefined;\n\n const seconds = Math.floor(date.getTime() / 1000);\n const millis = date.getTime() % 1000;\n const subMillisNanos = Number(this.nanos % 1_000_000n);\n const nanos = millis * 1_000_000 + subMillisNanos;\n return [seconds, nanos];\n }\n\n /**\n * Get the date component\n */\n date(): DateValue | undefined {\n if (this.months === undefined || this.days === undefined) return undefined;\n const year = Math.floor(this.months / 12);\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n const month = m + 1;\n return DateValue.fromYMD(year, month, this.days);\n }\n\n /**\n * Get the time component\n */\n time(): TimeValue | undefined {\n if (this.nanos === undefined) return undefined;\n return new TimeValue(this.nanos);\n }\n\n /**\n * Format as ISO 8601 string with nanosecond precision and Z suffix\n */\n toString(): string {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return 'none';\n }\n\n const year = Math.floor(this.months / 12);\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n const month = String(m + 1).padStart(2, '0');\n const day = String(this.days).padStart(2, '0');\n\n // Extract time components from nanos\n const totalNanos = this.nanos;\n const hours = totalNanos / 3_600_000_000_000n;\n const remainingAfterHours = totalNanos % 3_600_000_000_000n;\n const minutes = remainingAfterHours / 60_000_000_000n;\n const remainingAfterMinutes = remainingAfterHours % 60_000_000_000n;\n const seconds = remainingAfterMinutes / 1_000_000_000n;\n const nanosFraction = remainingAfterMinutes % 1_000_000_000n;\n\n const hour = String(Number(hours)).padStart(2, '0');\n const minute = String(Number(minutes)).padStart(2, '0');\n const second = String(Number(seconds)).padStart(2, '0');\n const nanoStr = String(Number(nanosFraction)).padStart(9, '0');\n\n // Handle negative years (BC dates)\n let yearStr: string;\n if (year < 0) {\n const absYear = Math.abs(year);\n yearStr = `-${String(absYear).padStart(4, '0')}`;\n } else {\n yearStr = String(year).padStart(4, '0');\n }\n\n return `${yearStr}-${month}-${day}T${hour}:${minute}:${second}.${nanoStr}Z`;\n }\n\n valueOf(): Date | undefined {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return undefined;\n }\n\n const year = Math.floor(this.months / 12);\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n const month = m + 1;\n\n // Extract time components\n const totalNanos = this.nanos;\n const hours = Number(totalNanos / 3_600_000_000_000n);\n const remainingAfterHours = totalNanos % 3_600_000_000_000n;\n const minutes = Number(remainingAfterHours / 60_000_000_000n);\n const remainingAfterMinutes = remainingAfterHours % 60_000_000_000n;\n const seconds = Number(remainingAfterMinutes / 1_000_000_000n);\n const nanosFraction = remainingAfterMinutes % 1_000_000_000n;\n const millis = Number(nanosFraction / 1_000_000n);\n\n // Handle years < 100 specially\n let date: Date;\n if (year >= 0 && year < 100) {\n date = new Date(Date.UTC(2000, month - 1, this.days, hours, minutes, seconds, millis));\n date.setUTCFullYear(year);\n } else {\n date = new Date(Date.UTC(year, month - 1, this.days, hours, minutes, seconds, millis));\n }\n\n return date;\n }\n\n /**\n * Get the internal representation as a Date\n */\n get value(): Date | undefined {\n return this.valueOf();\n }\n\n /**\n * Helper to parse ISO 8601 datetime format\n */\n private static parseDateTime(str: string): { months: number; days: number; nanos: bigint } | null {\n // Match ISO 8601 format: YYYY-MM-DDTHH:MM:SS[.nnnnnnnnn]Z\n const match = str.match(/^(-?\\d{1,4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{1,9}))?Z$/);\n if (!match) {\n return null;\n }\n\n const year = parseInt(match[1], 10);\n const month = parseInt(match[2], 10);\n const day = parseInt(match[3], 10);\n const hour = parseInt(match[4], 10);\n const minute = parseInt(match[5], 10);\n const second = parseInt(match[6], 10);\n\n // Parse fractional seconds if present\n let nanosFraction = 0n;\n if (match[7]) {\n // Pad or truncate to 9 digits\n const fracStr = match[7].padEnd(9, '0').substring(0, 9);\n nanosFraction = BigInt(fracStr);\n }\n\n // Validate ranges\n if (month < 1 || month > 12) {\n return null;\n }\n if (day < 1 || day > 31) {\n return null;\n }\n if (hour < 0 || hour > 23) {\n return null;\n }\n if (minute < 0 || minute > 59) {\n return null;\n }\n if (second < 0 || second > 59) {\n return null;\n }\n\n // Validate the date is valid\n if (!DateTimeValue.isValidDate(year, month, day)) {\n return null;\n }\n\n const months = year * 12 + (month - 1);\n const nanos = BigInt(hour) * 3_600_000_000_000n +\n BigInt(minute) * 60_000_000_000n +\n BigInt(second) * 1_000_000_000n +\n nanosFraction;\n\n return {months, days: day, nanos};\n }\n\n /**\n * Helper to validate a date\n */\n private static isValidDate(year: number, month: number, day: number): boolean {\n // Create a date and check if components match\n let date: Date;\n if (year >= 0 && year < 100) {\n date = new Date(Date.UTC(2000, month - 1, day));\n date.setUTCFullYear(year);\n } else {\n date = new Date(Date.UTC(year, month - 1, day));\n }\n\n return date.getUTCFullYear() === year &&\n date.getUTCMonth() === month - 1 &&\n date.getUTCDate() === day;\n }\n\n /**\n * Compare two datetimes for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherDateTime = other as DateTimeValue;\n if (this.months === undefined || otherDateTime.months === undefined) {\n return this.months === otherDateTime.months && \n this.days === otherDateTime.days && \n this.nanos === otherDateTime.nanos;\n }\n \n return this.months === otherDateTime.months && \n this.days === otherDateTime.days && \n this.nanos === otherDateTime.nanos;\n }\n\n toJSON(): string | null {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return null;\n }\n return this.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class DecimalValue implements Value {\n readonly type: Type = \"Decimal\" as const;\n public readonly value?: string;\n\n constructor(value?: string) {\n if (value !== undefined) {\n if (typeof value !== 'string') {\n throw new Error(`Decimal value must be a string, got ${typeof value}`);\n }\n this.value = value;\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): DecimalValue {\n if (str === NONE_VALUE) {\n return new DecimalValue(undefined);\n }\n \n return new DecimalValue(str);\n }\n\n valueOf(): string | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value;\n }\n\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherDecimal = other as DecimalValue;\n return this.value === otherDecimal.value;\n }\n\n toJSON(): string | null {\n return this.value ?? null;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Float4Value implements Value {\n\n private static readonly MAX_VALUE = 3.4028235e+38;\n private static readonly MIN_VALUE = -3.4028235e+38;\n private static readonly MIN_POSITIVE = 1.175494e-38;\n\n readonly type: Type = \"Float4\" as const;\n public readonly value?: number;\n\n constructor(value?: number) {\n if (value !== undefined) {\n if (typeof value !== 'number') {\n throw new Error(`Float4 value must be a number, got ${typeof value}`);\n }\n\n if (Number.isNaN(value) || !Number.isFinite(value)) {\n this.value = undefined;\n } else {\n // Clamp to Float32 range\n if (value !== 0 && Math.abs(value) < Float4Value.MIN_POSITIVE) {\n // Underflow to zero\n this.value = 0;\n } else if (value > Float4Value.MAX_VALUE) {\n throw new Error(`Float4 overflow: value ${value} exceeds maximum ${Float4Value.MAX_VALUE}`);\n } else if (value < Float4Value.MIN_VALUE) {\n throw new Error(`Float4 underflow: value ${value} exceeds minimum ${Float4Value.MIN_VALUE}`);\n } else {\n // Convert to Float32 precision\n const float32Array = new Float32Array(1);\n float32Array[0] = value;\n this.value = float32Array[0];\n }\n }\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): Float4Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Float4Value(undefined);\n }\n\n const num = Number(trimmed);\n\n if (Number.isNaN(num) && trimmed.toLowerCase() !== 'nan') {\n throw new Error(`Cannot parse \"${str}\" as Float4`);\n }\n\n return new Float4Value(num);\n }\n\n valueOf(): number | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Float4 values for equality with limited precision\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherFloat = other as Float4Value;\n if (this.value === undefined || otherFloat.value === undefined) {\n return this.value === otherFloat.value;\n }\n \n // For Float4, use approximate comparison due to limited precision\n const epsilon = 1e-6; // Float32 has about 7 decimal digits of precision\n return Math.abs(this.value - otherFloat.value) <= epsilon;\n }\n\n toJSON(): string | null {\n return this.value === undefined ? null : this.value.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Float8Value implements Value {\n readonly type: Type = \"Float8\" as const;\n public readonly value?: number;\n\n constructor(value?: number) {\n if (value !== undefined) {\n if (typeof value !== 'number') {\n throw new Error(`Float8 value must be a number, got ${typeof value}`);\n }\n this.value = value;\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): Float8Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Float8Value(undefined);\n }\n\n const num = Number(trimmed);\n\n if (Number.isNaN(num) && trimmed.toLowerCase() !== 'nan') {\n throw new Error(`Cannot parse \"${str}\" as Float8`);\n }\n\n return new Float8Value(num);\n }\n\n valueOf(): number | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Float8 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n\n const otherFloat = other as Float8Value;\n if (this.value === undefined || otherFloat.value === undefined) {\n return this.value === otherFloat.value;\n }\n const epsilon = 1e-14;\n return Math.abs(this.value - otherFloat.value) <= epsilon;\n }\n\n toJSON(): string | null {\n return this.value === undefined ? null : this.value.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Int1Value implements Value {\n readonly type: Type = \"Int1\" as const;\n public readonly value?: number;\n\n private static readonly MIN_VALUE = -128;\n private static readonly MAX_VALUE = 127;\n\n constructor(value?: number) {\n if (value !== undefined) {\n if (!Number.isInteger(value)) {\n throw new Error(`Int1 value must be an integer, got ${value}`);\n }\n if (value < Int1Value.MIN_VALUE || value > Int1Value.MAX_VALUE) {\n throw new Error(`Int1 value must be between ${Int1Value.MIN_VALUE} and ${Int1Value.MAX_VALUE}, got ${value}`);\n }\n }\n this.value = value;\n }\n\n static parse(str: string): Int1Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Int1Value(undefined);\n }\n \n const num = Number(trimmed);\n \n if (isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Int1`);\n }\n \n return new Int1Value(num);\n }\n\n valueOf(): number | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Int1 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherInt = other as Int1Value;\n return this.value === otherInt.value;\n }\n\n toJSON(): string | null {\n return this.value === undefined ? null : this.value.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Int2Value implements Value {\n readonly type: Type = \"Int2\" as const;\n public readonly value?: number;\n\n private static readonly MIN_VALUE = -32768;\n private static readonly MAX_VALUE = 32767;\n\n constructor(value?: number) {\n if (value !== undefined) {\n if (!Number.isInteger(value)) {\n throw new Error(`Int2 value must be an integer, got ${value}`);\n }\n if (value < Int2Value.MIN_VALUE || value > Int2Value.MAX_VALUE) {\n throw new Error(`Int2 value must be between ${Int2Value.MIN_VALUE} and ${Int2Value.MAX_VALUE}, got ${value}`);\n }\n }\n this.value = value;\n }\n\n static parse(str: string): Int2Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Int2Value(undefined);\n }\n \n const num = Number(trimmed);\n \n if (isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Int2`);\n }\n \n return new Int2Value(num);\n }\n\n valueOf(): number | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Int2 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherInt = other as Int2Value;\n return this.value === otherInt.value;\n }\n\n toJSON(): string | null {\n return this.value === undefined ? null : this.value.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Int4Value implements Value {\n readonly type: Type = \"Int4\" as const;\n public readonly value?: number;\n\n private static readonly MIN_VALUE = -2147483648;\n private static readonly MAX_VALUE = 2147483647;\n\n constructor(value?: number) {\n if (value !== undefined) {\n if (!Number.isInteger(value)) {\n throw new Error(`Int4 value must be an integer, got ${value}`);\n }\n if (value < Int4Value.MIN_VALUE || value > Int4Value.MAX_VALUE) {\n throw new Error(`Int4 value must be between ${Int4Value.MIN_VALUE} and ${Int4Value.MAX_VALUE}, got ${value}`);\n }\n }\n this.value = value;\n }\n\n static parse(str: string): Int4Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Int4Value(undefined);\n }\n \n const num = Number(trimmed);\n \n if (isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Int4`);\n }\n \n return new Int4Value(num);\n }\n\n valueOf(): number | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Int4 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherInt = other as Int4Value;\n return this.value === otherInt.value;\n }\n\n toJSON(): string | null {\n return this.value === undefined ? null : this.value.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Int8Value implements Value {\n readonly type: Type = \"Int8\" as const;\n public readonly value?: bigint;\n\n private static readonly MIN_VALUE = BigInt(\"-9223372036854775808\");\n private static readonly MAX_VALUE = BigInt(\"9223372036854775807\");\n\n constructor(value?: bigint | number) {\n if (value !== undefined) {\n const bigintValue = typeof value === 'number' ? BigInt(Math.trunc(value)) : value;\n \n if (bigintValue < Int8Value.MIN_VALUE || bigintValue > Int8Value.MAX_VALUE) {\n throw new Error(`Int8 value must be between ${Int8Value.MIN_VALUE} and ${Int8Value.MAX_VALUE}, got ${bigintValue}`);\n }\n this.value = bigintValue;\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): Int8Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Int8Value(undefined);\n }\n \n let value: bigint;\n try {\n value = BigInt(trimmed);\n } catch (e) {\n throw new Error(`Cannot parse \"${str}\" as Int8`);\n }\n \n if (value < Int8Value.MIN_VALUE || value > Int8Value.MAX_VALUE) {\n throw new Error(`Int8 value must be between ${Int8Value.MIN_VALUE} and ${Int8Value.MAX_VALUE}, got ${value}`);\n }\n \n return new Int8Value(value);\n }\n\n valueOf(): bigint | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Int8 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherInt = other as Int8Value;\n return this.value === otherInt.value;\n }\n\n toJSON(): string | null {\n return this.value === undefined ? null : this.value.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Int16Value implements Value {\n readonly type: Type = \"Int16\" as const;\n public readonly value?: bigint;\n\n private static readonly MIN_VALUE = BigInt(\"-170141183460469231731687303715884105728\");\n private static readonly MAX_VALUE = BigInt(\"170141183460469231731687303715884105727\");\n\n constructor(value?: bigint | number | string) {\n if (value !== undefined) {\n let bigintValue: bigint;\n \n if (typeof value === 'string') {\n try {\n bigintValue = BigInt(value);\n } catch (e) {\n throw new Error(`Int16 value must be a valid integer, got ${value}`);\n }\n } else if (typeof value === 'number') {\n bigintValue = BigInt(Math.trunc(value));\n } else {\n bigintValue = value;\n }\n \n if (bigintValue < Int16Value.MIN_VALUE || bigintValue > Int16Value.MAX_VALUE) {\n throw new Error(`Int16 value must be between ${Int16Value.MIN_VALUE} and ${Int16Value.MAX_VALUE}, got ${bigintValue}`);\n }\n this.value = bigintValue;\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): Int16Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Int16Value(undefined);\n }\n \n let value: bigint;\n try {\n value = BigInt(trimmed);\n } catch (e) {\n throw new Error(`Cannot parse \"${str}\" as Int16`);\n }\n \n if (value < Int16Value.MIN_VALUE || value > Int16Value.MAX_VALUE) {\n throw new Error(`Int16 value must be between ${Int16Value.MIN_VALUE} and ${Int16Value.MAX_VALUE}, got ${value}`);\n }\n \n return new Int16Value(value);\n }\n\n valueOf(): bigint | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Int16 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherInt = other as Int16Value;\n return this.value === otherInt.value;\n }\n\n toJSON(): string | null {\n return this.value === undefined ? null : this.value.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport { Type, Value, TypeValuePair } from \".\";\nimport { NONE_VALUE } from \"../constant\";\n\n/**\n * A duration value representing a time span or elapsed time.\n * Internally stored as months, days, and nanoseconds.\n */\nexport class DurationValue implements Value {\n readonly type: Type = \"Duration\" as const;\n private readonly months?: number; // years*12 + months\n private readonly days?: number; // separate days (don't normalize due to variable month length)\n private readonly nanos?: bigint; // all time components as nanoseconds\n\n constructor(value?: { months: number; days: number; nanos: bigint } | string) {\n if (value !== undefined) {\n if (typeof value === 'string') {\n // Parse ISO 8601 duration format\n const parsed = DurationValue.parseDuration(value);\n if (!parsed) {\n throw new Error(`Invalid duration string: ${value}`);\n }\n this.months = parsed.months;\n this.days = parsed.days;\n this.nanos = parsed.nanos;\n } else if (typeof value === 'object' && value !== null) {\n this.months = value.months;\n this.days = value.days;\n this.nanos = value.nanos;\n } else {\n throw new Error(`Duration value must be an object or string, got ${typeof value}`);\n }\n } else {\n this.months = undefined;\n this.days = undefined;\n this.nanos = undefined;\n }\n }\n\n /**\n * Create a new duration from months, days, and nanoseconds\n */\n static new(months: number, days: number, nanos: bigint): DurationValue {\n return new DurationValue({ months, days, nanos });\n }\n\n /**\n * Create a duration from seconds\n */\n static fromSeconds(seconds: number): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: BigInt(seconds) * 1_000_000_000n });\n }\n\n /**\n * Create a duration from milliseconds\n */\n static fromMilliseconds(milliseconds: number): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: BigInt(milliseconds) * 1_000_000n });\n }\n\n /**\n * Create a duration from microseconds\n */\n static fromMicroseconds(microseconds: number): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: BigInt(microseconds) * 1_000n });\n }\n\n /**\n * Create a duration from nanoseconds\n */\n static fromNanoseconds(nanoseconds: bigint): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: nanoseconds });\n }\n\n /**\n * Create a duration from minutes\n */\n static fromMinutes(minutes: number): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: BigInt(minutes) * 60n * 1_000_000_000n });\n }\n\n /**\n * Create a duration from hours\n */\n static fromHours(hours: number): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: BigInt(hours) * 60n * 60n * 1_000_000_000n });\n }\n\n /**\n * Create a duration from days\n */\n static fromDays(days: number): DurationValue {\n return new DurationValue({ months: 0, days, nanos: 0n });\n }\n\n /**\n * Create a duration from weeks\n */\n static fromWeeks(weeks: number): DurationValue {\n return new DurationValue({ months: 0, days: weeks * 7, nanos: 0n });\n }\n\n /**\n * Create a duration from months\n */\n static fromMonths(months: number): DurationValue {\n return new DurationValue({ months, days: 0, nanos: 0n });\n }\n\n /**\n * Create a duration from years\n */\n static fromYears(years: number): DurationValue {\n return new DurationValue({ months: years * 12, days: 0, nanos: 0n });\n }\n\n /**\n * Create a zero duration\n */\n static zero(): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: 0n });\n }\n\n /**\n * Get default duration (zero)\n */\n static default(): DurationValue {\n return DurationValue.zero();\n }\n\n /**\n * Parse a duration string in ISO 8601 duration format\n */\n static parse(str: string): DurationValue {\n const trimmed = str.trim();\n \n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new DurationValue(undefined);\n }\n\n const parsed = DurationValue.parseDuration(trimmed);\n if (!parsed) {\n throw new Error(`Cannot parse \"${str}\" as Duration`);\n }\n\n return new DurationValue({ months: parsed.months, days: parsed.days, nanos: parsed.nanos });\n }\n\n /**\n * Get total seconds (truncated)\n */\n seconds(): bigint | undefined {\n if (this.nanos === undefined) return undefined;\n return this.nanos / 1_000_000_000n;\n }\n\n /**\n * Get total milliseconds (truncated)\n */\n milliseconds(): bigint | undefined {\n if (this.nanos === undefined) return undefined;\n return this.nanos / 1_000_000n;\n }\n\n /**\n * Get total microseconds (truncated)\n */\n microseconds(): bigint | undefined {\n if (this.nanos === undefined) return undefined;\n return this.nanos / 1_000n;\n }\n\n /**\n * Get total nanoseconds\n */\n nanoseconds(): bigint | undefined {\n return this.nanos;\n }\n\n /**\n * Get months component\n */\n getMonths(): number | undefined {\n return this.months;\n }\n\n /**\n * Get days component\n */\n getDays(): number | undefined {\n return this.days;\n }\n\n /**\n * Get nanoseconds component\n */\n getNanos(): bigint | undefined {\n return this.nanos;\n }\n\n /**\n * Check if duration is positive (any component > 0)\n */\n isPositive(): boolean {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return false;\n }\n return this.months > 0 || this.days > 0 || this.nanos > 0n;\n }\n\n /**\n * Check if duration is negative (any component < 0)\n */\n isNegative(): boolean {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return false;\n }\n return this.months < 0 || this.days < 0 || this.nanos < 0n;\n }\n\n /**\n * Get absolute value of duration\n */\n abs(): DurationValue {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return new DurationValue(undefined);\n }\n return new DurationValue({\n months: Math.abs(this.months),\n days: Math.abs(this.days),\n nanos: this.nanos < 0n ? -this.nanos : this.nanos\n });\n }\n\n /**\n * Negate the duration\n */\n negate(): DurationValue {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return new DurationValue(undefined);\n }\n return new DurationValue({\n months: -this.months,\n days: -this.days,\n nanos: -this.nanos\n });\n }\n\n /**\n * Format as ISO 8601 duration string\n */\n toIsoString(): string {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return 'none';\n }\n\n // Handle zero duration\n if (this.months === 0 && this.days === 0 && this.nanos === 0n) {\n return 'PT0S';\n }\n\n let result = 'P';\n\n // Extract years and months\n const years = Math.floor(this.months / 12);\n const months = this.months % 12;\n\n if (years !== 0) {\n result += `${years}Y`;\n }\n\n if (months !== 0) {\n result += `${months}M`;\n }\n\n // Time components from nanos with normalization\n const totalSeconds = this.nanos / 1_000_000_000n;\n const remainingNanos = this.nanos % 1_000_000_000n;\n\n // Normalize to days if hours >= 24\n const extraDays = totalSeconds / 86400n; // 24 * 60 * 60\n const remainingSeconds = totalSeconds % 86400n;\n\n const displayDays = this.days + Number(extraDays);\n const hours = remainingSeconds / 3600n;\n const minutes = (remainingSeconds % 3600n) / 60n;\n const seconds = remainingSeconds % 60n;\n\n if (displayDays !== 0) {\n result += `${displayDays}D`;\n }\n\n // Add time components if any\n if (hours !== 0n || minutes !== 0n || seconds !== 0n || remainingNanos !== 0n) {\n result += 'T';\n\n if (hours !== 0n) {\n result += `${hours}H`;\n }\n\n if (minutes !== 0n) {\n result += `${minutes}M`;\n }\n\n if (seconds !== 0n || remainingNanos !== 0n) {\n if (remainingNanos !== 0n) {\n // Format fractional seconds with trailing zeros removed\n const fractional = Number(remainingNanos) / 1_000_000_000;\n const totalSecondsFloat = Number(seconds) + fractional;\n // Format with 9 decimal places then remove trailing zeros\n const formatted = totalSecondsFloat.toFixed(9).replace(/0+$/, '').replace(/\\.$/, '');\n result += `${formatted}S`;\n } else {\n result += `${seconds}S`;\n }\n }\n }\n\n return result;\n }\n\n /**\n * Format as compact human-readable duration string\n * Examples: \"1y2mo3d4h5m6s\", \"1d2h\", \"30s\", \"500ms\", \"0s\"\n */\n toString(): string {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return 'none';\n }\n\n if (this.months === 0 && this.days === 0 && this.nanos === 0n) {\n return '0s';\n }\n\n let result = '';\n\n const years = Math.floor(this.months / 12);\n const months = this.months % 12;\n\n const totalSeconds = this.nanos / 1_000_000_000n;\n const remainingNanos = this.nanos % 1_000_000_000n;\n\n const extraDays = totalSeconds / 86400n;\n const remainingSeconds = totalSeconds % 86400n;\n\n const displayDays = this.days + Number(extraDays);\n const hours = remainingSeconds / 3600n;\n const minutes = (remainingSeconds % 3600n) / 60n;\n const seconds = remainingSeconds % 60n;\n\n const absRemaining = remainingNanos < 0n ? -remainingNanos : remainingNanos;\n const ms = absRemaining / 1_000_000n;\n const us = (absRemaining % 1_000_000n) / 1_000n;\n const ns = absRemaining % 1_000n;\n\n if (years !== 0) result += `${years}y`;\n if (months !== 0) result += `${months}mo`;\n if (displayDays !== 0) result += `${displayDays}d`;\n if (hours !== 0n) result += `${hours}h`;\n if (minutes !== 0n) result += `${minutes}m`;\n if (seconds !== 0n) result += `${seconds}s`;\n\n if (ms !== 0n || us !== 0n || ns !== 0n) {\n if (remainingNanos < 0n && seconds === 0n && hours === 0n && minutes === 0n\n && displayDays === 0 && years === 0 && months === 0) {\n result += '-';\n }\n if (ms !== 0n) result += `${ms}ms`;\n if (us !== 0n) result += `${us}us`;\n if (ns !== 0n) result += `${ns}ns`;\n }\n\n return result;\n }\n\n valueOf(): { months: number; days: number; nanos: bigint } | undefined {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return undefined;\n }\n return { months: this.months, days: this.days, nanos: this.nanos };\n }\n\n /**\n * Get the internal representation\n */\n get value(): { months: number; days: number; nanos: bigint } | undefined {\n return this.valueOf();\n }\n\n /**\n * Helper to parse duration format (human-readable or ISO 8601)\n */\n private static parseDuration(str: string): { months: number; days: number; nanos: bigint } | null {\n const negative = str.startsWith('-');\n const cleanStr = negative ? str.substring(1) : str;\n\n // Try ISO 8601 format first (starts with P)\n if (cleanStr.startsWith('P')) {\n return DurationValue.parseIsoDuration(cleanStr, negative);\n }\n\n // Try human-readable format: 1y2mo3d4h5m6s500ms100us50ns\n return DurationValue.parseHumanDuration(cleanStr, negative);\n }\n\n /**\n * Parse ISO 8601 duration format: P[n]Y[n]M[n]DT[n]H[n]M[n.n]S\n */\n private static parseIsoDuration(str: string, negative: boolean): { months: number; days: number; nanos: bigint } | null {\n const match = str.match(/^P(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)D)?(?:T(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+(?:\\.\\d+)?)S)?)?$/);\n if (!match) {\n return null;\n }\n\n // Check if the match has at least one value\n if (!match[1] && !match[2] && !match[3] && !match[4] && !match[5] && !match[6]) {\n return null; // Invalid: P without any values\n }\n\n const years = parseInt(match[1] || '0', 10);\n const months = parseInt(match[2] || '0', 10);\n const days = parseInt(match[3] || '0', 10);\n const hours = parseInt(match[4] || '0', 10);\n const minutes = parseInt(match[5] || '0', 10);\n const secondsStr = match[6] || '0';\n\n // Parse seconds and fractional seconds\n const secondsParts = secondsStr.split('.');\n const wholeSeconds = parseInt(secondsParts[0] || '0', 10);\n let fracNanos = 0n;\n if (secondsParts.length > 1) {\n // Pad fractional part to 9 digits\n const fracStr = secondsParts[1].padEnd(9, '0').substring(0, 9);\n fracNanos = BigInt(fracStr);\n }\n\n // Calculate total nanoseconds\n const totalNanos = BigInt(hours) * 3600n * 1_000_000_000n +\n BigInt(minutes) * 60n * 1_000_000_000n +\n BigInt(wholeSeconds) * 1_000_000_000n +\n fracNanos;\n\n const totalMonths = years * 12 + months;\n\n if (negative) {\n return { months: -totalMonths, days: -days, nanos: -totalNanos };\n }\n return { months: totalMonths, days: days, nanos: totalNanos };\n }\n\n /**\n * Parse human-readable duration format: 1y2mo3d4h5m6s500ms100us50ns\n */\n private static parseHumanDuration(str: string, negative: boolean): { months: number; days: number; nanos: bigint } | null {\n // Match components: years, months, days, hours, minutes, seconds, ms, us, ns\n // Order matters: 'mo' before 'm', 'ms' before 'm', 'us' before 'u', 'ns' before 'n'\n const pattern = /^(?:(\\d+)y)?(?:(\\d+)mo)?(?:(\\d+)d)?(?:(\\d+)h)?(?:(\\d+)m(?!s|o))?(?:(\\d+)s(?!$)?)?(?:(\\d+)ms)?(?:(\\d+)us)?(?:(\\d+)ns)?$/;\n const match = str.match(pattern);\n if (!match) {\n return null;\n }\n\n // Check if the match has at least one value\n if (!match[1] && !match[2] && !match[3] && !match[4] && !match[5] && !match[6] && !match[7] && !match[8] && !match[9]) {\n return null;\n }\n\n const years = parseInt(match[1] || '0', 10);\n const months = parseInt(match[2] || '0', 10);\n const days = parseInt(match[3] || '0', 10);\n const hours = parseInt(match[4] || '0', 10);\n const minutes = parseInt(match[5] || '0', 10);\n const seconds = parseInt(match[6] || '0', 10);\n const ms = parseInt(match[7] || '0', 10);\n const us = parseInt(match[8] || '0', 10);\n const ns = parseInt(match[9] || '0', 10);\n\n const totalNanos = BigInt(hours) * 3600n * 1_000_000_000n +\n BigInt(minutes) * 60n * 1_000_000_000n +\n BigInt(seconds) * 1_000_000_000n +\n BigInt(ms) * 1_000_000n +\n BigInt(us) * 1_000n +\n BigInt(ns);\n\n const totalMonths = years * 12 + months;\n\n if (negative) {\n return { months: -totalMonths, days: -days, nanos: -totalNanos };\n }\n return { months: totalMonths, days: days, nanos: totalNanos };\n }\n\n /**\n * Compare two durations for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherDuration = other as DurationValue;\n if (this.months === undefined || otherDuration.months === undefined) {\n return this.months === otherDuration.months && \n this.days === otherDuration.days && \n this.nanos === otherDuration.nanos;\n }\n \n return this.months === otherDuration.months && \n this.days === otherDuration.days && \n this.nanos === otherDuration.nanos;\n }\n\n toJSON(): string | null {\n return this.months === undefined ? null : this.toIsoString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toIsoString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Uint1Value implements Value {\n readonly type: Type = \"Uint1\" as const;\n public readonly value?: number;\n\n private static readonly MIN_VALUE = 0;\n private static readonly MAX_VALUE = 255;\n\n constructor(value?: number) {\n if (value !== undefined) {\n if (!Number.isInteger(value)) {\n throw new Error(`Uint1 value must be an integer, got ${value}`);\n }\n if (value < Uint1Value.MIN_VALUE || value > Uint1Value.MAX_VALUE) {\n throw new Error(`Uint1 value must be between ${Uint1Value.MIN_VALUE} and ${Uint1Value.MAX_VALUE}, got ${value}`);\n }\n }\n this.value = value;\n }\n\n static parse(str: string): Uint1Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Uint1Value(undefined);\n }\n \n const num = Number(trimmed);\n \n if (isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Uint1`);\n }\n \n return new Uint1Value(num);\n }\n\n valueOf(): number | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Uint1 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUint = other as Uint1Value;\n return this.value === otherUint.value;\n }\n\n toJSON(): string | null {\n return this.value === undefined ? null : this.value.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Uint2Value implements Value {\n readonly type: Type = \"Uint2\" as const;\n public readonly value?: number;\n\n private static readonly MIN_VALUE = 0;\n private static readonly MAX_VALUE = 65535;\n\n constructor(value?: number) {\n if (value !== undefined) {\n if (!Number.isInteger(value)) {\n throw new Error(`Uint2 value must be an integer, got ${value}`);\n }\n if (value < Uint2Value.MIN_VALUE || value > Uint2Value.MAX_VALUE) {\n throw new Error(`Uint2 value must be between ${Uint2Value.MIN_VALUE} and ${Uint2Value.MAX_VALUE}, got ${value}`);\n }\n }\n this.value = value;\n }\n\n static parse(str: string): Uint2Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Uint2Value(undefined);\n }\n \n const num = Number(trimmed);\n \n if (isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Uint2`);\n }\n \n return new Uint2Value(num);\n }\n\n valueOf(): number | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Uint2 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUint = other as Uint2Value;\n return this.value === otherUint.value;\n }\n\n toJSON(): string | null {\n return this.value === undefined ? null : this.value.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Uint4Value implements Value {\n readonly type: Type = \"Uint4\" as const;\n public readonly value?: number;\n\n private static readonly MIN_VALUE = 0;\n private static readonly MAX_VALUE = 4294967295;\n\n constructor(value?: number) {\n if (value !== undefined) {\n if (!Number.isInteger(value)) {\n throw new Error(`Uint4 value must be an integer, got ${value}`);\n }\n if (value < Uint4Value.MIN_VALUE || value > Uint4Value.MAX_VALUE) {\n throw new Error(`Uint4 value must be between ${Uint4Value.MIN_VALUE} and ${Uint4Value.MAX_VALUE}, got ${value}`);\n }\n }\n this.value = value;\n }\n\n static parse(str: string): Uint4Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Uint4Value(undefined);\n }\n \n const num = Number(trimmed);\n \n if (isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Uint4`);\n }\n \n return new Uint4Value(num);\n }\n\n valueOf(): number | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Uint4 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUint = other as Uint4Value;\n return this.value === otherUint.value;\n }\n\n toJSON(): string | null {\n return this.value === undefined ? null : this.value.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Uint8Value implements Value {\n readonly type: Type = \"Uint8\" as const;\n public readonly value?: bigint;\n\n private static readonly MIN_VALUE = BigInt(0);\n private static readonly MAX_VALUE = BigInt(\"18446744073709551615\");\n\n constructor(value?: bigint | number) {\n if (value !== undefined) {\n const bigintValue = typeof value === 'number' ? BigInt(Math.trunc(value)) : value;\n \n if (bigintValue < Uint8Value.MIN_VALUE || bigintValue > Uint8Value.MAX_VALUE) {\n throw new Error(`Uint8 value must be between ${Uint8Value.MIN_VALUE} and ${Uint8Value.MAX_VALUE}, got ${bigintValue}`);\n }\n this.value = bigintValue;\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): Uint8Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Uint8Value(undefined);\n }\n \n let value: bigint;\n try {\n value = BigInt(trimmed);\n } catch (e) {\n throw new Error(`Cannot parse \"${str}\" as Uint8`);\n }\n \n if (value < Uint8Value.MIN_VALUE || value > Uint8Value.MAX_VALUE) {\n throw new Error(`Uint8 value must be between ${Uint8Value.MIN_VALUE} and ${Uint8Value.MAX_VALUE}, got ${value}`);\n }\n \n return new Uint8Value(value);\n }\n\n valueOf(): bigint | undefined {\n return this.value;\n }\n\n toNumber(): number | undefined {\n if (this.value === undefined) return undefined;\n return Number(this.value);\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Uint8 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUint = other as Uint8Value;\n return this.value === otherUint.value;\n }\n\n toJSON(): string | null {\n return this.value === undefined ? null : this.value.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Uint16Value implements Value {\n readonly type: Type = \"Uint16\" as const;\n public readonly value?: bigint;\n\n private static readonly MIN_VALUE = BigInt(0);\n private static readonly MAX_VALUE = BigInt(\"340282366920938463463374607431768211455\");\n\n constructor(value?: bigint | number | string) {\n if (value !== undefined) {\n let bigintValue: bigint;\n \n if (typeof value === 'string') {\n try {\n bigintValue = BigInt(value);\n } catch (e) {\n throw new Error(`Uint16 value must be a valid integer, got ${value}`);\n }\n } else if (typeof value === 'number') {\n bigintValue = BigInt(Math.trunc(value));\n } else {\n bigintValue = value;\n }\n \n if (bigintValue < Uint16Value.MIN_VALUE || bigintValue > Uint16Value.MAX_VALUE) {\n throw new Error(`Uint16 value must be between ${Uint16Value.MIN_VALUE} and ${Uint16Value.MAX_VALUE}, got ${bigintValue}`);\n }\n this.value = bigintValue;\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): Uint16Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Uint16Value(undefined);\n }\n \n let value: bigint;\n try {\n value = BigInt(trimmed);\n } catch (e) {\n throw new Error(`Cannot parse \"${str}\" as Uint16`);\n }\n \n if (value < Uint16Value.MIN_VALUE || value > Uint16Value.MAX_VALUE) {\n throw new Error(`Uint16 value must be between ${Uint16Value.MIN_VALUE} and ${Uint16Value.MAX_VALUE}, got ${value}`);\n }\n \n return new Uint16Value(value);\n }\n\n valueOf(): bigint | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value.toString();\n }\n\n /**\n * Compare two Uint16 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUint = other as Uint16Value;\n return this.value === otherUint.value;\n }\n\n toJSON(): string | null {\n return this.value === undefined ? null : this.value.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair, optionDepth} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class NoneValue implements Value {\n readonly type: Type = \"None\" as const;\n public readonly innerType: Type;\n\n constructor(innerType?: Type) {\n this.innerType = innerType ?? \"None\";\n }\n\n static parse(str: string, innerType?: Type): NoneValue {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE || trimmed === 'none') {\n return new NoneValue(innerType);\n }\n throw new Error(`Cannot parse \"${str}\" as None`);\n }\n\n isNone(): boolean {\n return true;\n }\n\n toString(): string {\n return 'none';\n }\n\n valueOf(): undefined {\n return undefined;\n }\n\n get value(): undefined {\n return undefined;\n }\n\n equals(other: Value): boolean {\n if (!(other instanceof NoneValue)) {\n return false;\n }\n return true;\n }\n\n compare(other: NoneValue): number {\n return 0;\n }\n\n toJSON(): null {\n return null;\n }\n\n encode(): TypeValuePair {\n return {\n type: {Option: this.innerType},\n value: NONE_VALUE\n };\n }\n}\n\nexport function noneDepth(v: NoneValue): number {\n return optionDepth(v.innerType) + 1;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\n\nexport interface MissingPresentation {\n text: string;\n italic: boolean;\n muted: boolean;\n}\n\nexport const NONE_PRESENTATION: MissingPresentation = {\n text: 'none',\n italic: true,\n muted: true,\n};\n\nexport type ValueRole =\n | 'none'\n | 'boolean'\n | 'number'\n | 'temporal'\n | 'uuid'\n | 'string'\n | 'blob'\n | 'unknown';\n\nconst ROLE_BY_TYPE: Record<string, ValueRole> = {\n None: 'none',\n Boolean: 'boolean',\n Int1: 'number',\n Int2: 'number',\n Int4: 'number',\n Int8: 'number',\n Int16: 'number',\n Uint1: 'number',\n Uint2: 'number',\n Uint4: 'number',\n Uint8: 'number',\n Uint16: 'number',\n Float4: 'number',\n Float8: 'number',\n Decimal: 'number',\n Date: 'temporal',\n DateTime: 'temporal',\n Time: 'temporal',\n Duration: 'temporal',\n Uuid4: 'uuid',\n Uuid7: 'uuid',\n IdentityId: 'uuid',\n Utf8: 'string',\n Blob: 'blob',\n};\n\nfunction typeName(value: unknown): string | undefined {\n if (value === null || typeof value !== 'object') return undefined;\n const candidate = (value as {type?: unknown}).type;\n return typeof candidate === 'string' ? candidate : undefined;\n}\n\nexport function valueTypeName(value: unknown): string | undefined {\n if (value === null || value === undefined) return 'None';\n return typeName(value);\n}\n\nexport function valueRole(value: unknown): ValueRole {\n if (value === null || value === undefined) return 'none';\n\n const name = typeName(value);\n if (name !== undefined) {\n return ROLE_BY_TYPE[name] ?? 'unknown';\n }\n\n switch (typeof value) {\n case 'number':\n case 'bigint':\n return 'number';\n case 'boolean':\n return 'boolean';\n case 'string':\n return 'string';\n default:\n return 'unknown';\n }\n}\n\nexport function formatValue(value: unknown): string {\n if (value === null || value === undefined) return NONE_PRESENTATION.text;\n if (typeof value === 'bigint') return value.toString();\n\n if (typeof value === 'object') {\n const name = typeName(value);\n if (name === 'None') return NONE_PRESENTATION.text;\n if (name !== undefined) return String(value);\n return JSON.stringify(value) ?? String(value);\n }\n\n return String(value);\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {OptionType, Type, isOptionType} from '.';\nimport {NONE_PRESENTATION} from '../present/value';\n\ntype State<T> = {some: true; value: T} | {some: false; inner: Type};\n\nfunction describeType(t: Type): string {\n return isOptionType(t) ? `Option(${describeType(t.Option)})` : t;\n}\n\nfunction hasType(value: unknown): value is {type: Type} {\n return typeof value === 'object' && value !== null && 'type' in value;\n}\n\nfunction hasToJSON(value: unknown): value is {toJSON(): unknown} {\n return typeof value === 'object' && value !== null && 'toJSON' in value && typeof value.toJSON === 'function';\n}\n\n// a Symbol.for brand survives a second copy of this module, where instanceof would not\nconst OPTION_BRAND = Symbol.for('reifydb.option');\n\nexport function isOption(value: unknown): value is Option<unknown> {\n return typeof value === 'object' && value !== null && (value as Record<symbol, unknown>)[OPTION_BRAND] === true;\n}\n\nexport class Option<T> {\n readonly [OPTION_BRAND] = true;\n\n private constructor(private readonly state: State<T>) {}\n\n static some<T>(value: T): Option<T> {\n return new Option<T>({some: true, value});\n }\n\n static none<T = never>(inner: Type): Option<T> {\n return new Option<T>({some: false, inner});\n }\n\n isSome(): boolean {\n return this.state.some;\n }\n\n isNone(): boolean {\n return !this.state.some;\n }\n\n unwrap(): T {\n if (this.state.some) {\n return this.state.value;\n }\n throw new Error(`unwrap on a None of type ${describeType(this.state.inner)}`);\n }\n\n unwrapOr(fallback: T): T {\n return this.state.some ? this.state.value : fallback;\n }\n\n map<U>(fn: (value: T) => U): Option<U> {\n // a None carries no U, so the missing type stays the one it was created with\n return this.state.some ? Option.some(fn(this.state.value)) : Option.none<U>(this.state.inner);\n }\n\n get type(): OptionType {\n if (!this.state.some) {\n return {Option: this.state.inner};\n }\n if (hasType(this.state.value)) {\n return {Option: this.state.value.type};\n }\n throw new Error(`Option.some over a raw ${typeof this.state.value} has no wire type`);\n }\n\n toString(): string {\n return this.state.some ? String(this.state.value) : NONE_PRESENTATION.text;\n }\n\n toJSON(): unknown {\n if (!this.state.some) {\n return null;\n }\n // JSON.stringify serializes what toJSON returns as is, so nested toJSON must be applied here\n return hasToJSON(this.state.value) ? this.state.value.toJSON() : this.state.value;\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Utf8Value implements Value {\n readonly type: Type = \"Utf8\" as const;\n public readonly value?: string;\n\n constructor(value?: string) {\n if (value !== undefined) {\n if (typeof value !== 'string') {\n throw new Error(`Utf8 value must be a string, got ${typeof value}`);\n }\n this.value = value;\n } else {\n this.value = undefined;\n }\n }\n\n static parse(str: string): Utf8Value {\n if (str === NONE_VALUE) {\n return new Utf8Value(undefined);\n }\n \n return new Utf8Value(str);\n }\n\n valueOf(): string | undefined {\n return this.value;\n }\n\n toString(): string {\n return this.value === undefined ? 'none' : this.value;\n }\n\n /**\n * Compare two Utf8 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUtf8 = other as Utf8Value;\n return this.value === otherUtf8.value;\n }\n\n toJSON(): string | null {\n return this.value ?? null;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport { v4 as uuidv4, NIL as NIL_UUID, validate, version } from 'uuid';\nimport { Type, Value, TypeValuePair } from \".\";\nimport { NONE_VALUE } from \"../constant\";\n\n/**\n * A UUID version 4 (random) value type\n */\nexport class Uuid4Value implements Value {\n readonly type: Type = \"Uuid4\" as const;\n private readonly uuid?: string;\n\n constructor(value?: string) {\n if (value !== undefined) {\n if (typeof value !== 'string') {\n throw new Error(`Uuid4 value must be a string, got ${typeof value}`);\n }\n \n // Validate UUID format\n if (!validate(value)) {\n throw new Error(`Invalid UUID format: ${value}`);\n }\n \n // Check version (allow v4 or nil UUID)\n const ver = version(value);\n if (value !== NIL_UUID && ver !== 4) {\n throw new Error(`Invalid UUID version for Uuid4: expected v4, got v${ver}`);\n }\n \n this.uuid = value.toLowerCase();\n } else {\n this.uuid = undefined;\n }\n }\n\n /**\n * Generate a new random UUID v4\n */\n static generate(): Uuid4Value {\n return new Uuid4Value(uuidv4());\n }\n\n /**\n * Create a new Uuid4Value from a string\n */\n static new(uuid: string): Uuid4Value {\n return new Uuid4Value(uuid);\n }\n\n /**\n * Get the nil UUID (all zeros)\n */\n static nil(): Uuid4Value {\n return new Uuid4Value(NIL_UUID);\n }\n\n /**\n * Get default Uuid4Value (nil UUID)\n */\n static default(): Uuid4Value {\n return Uuid4Value.nil();\n }\n\n /**\n * Parse a UUID string\n */\n static parse(str: string): Uuid4Value {\n const trimmed = str.trim();\n \n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Uuid4Value(undefined);\n }\n\n // Try to parse as UUID\n if (!validate(trimmed)) {\n throw new Error(`Cannot parse \"${str}\" as Uuid4`);\n }\n\n const ver = version(trimmed);\n if (trimmed !== NIL_UUID && ver !== 4) {\n throw new Error(`Cannot parse \"${str}\" as Uuid4: wrong version (v${ver})`);\n }\n\n return new Uuid4Value(trimmed);\n }\n\n /**\n * Get the UUID string\n */\n asString(): string | undefined {\n return this.uuid;\n }\n\n /**\n * Get the UUID as bytes (16-byte array)\n */\n asBytes(): Uint8Array | undefined {\n if (this.uuid === undefined) return undefined;\n \n // Remove hyphens and convert hex to bytes\n const hex = this.uuid.replace(/-/g, '');\n const bytes = new Uint8Array(16);\n for (let i = 0; i < 16; i++) {\n bytes[i] = parseInt(hex.substring(i * 2, i * 2 + 2), 16);\n }\n return bytes;\n }\n\n /**\n * Check if this is the nil UUID\n */\n isNil(): boolean {\n return this.uuid === NIL_UUID;\n }\n\n /**\n * Get the UUID version\n */\n getVersion(): number | undefined {\n if (this.uuid === undefined) return undefined;\n return version(this.uuid);\n }\n\n /**\n * Format as string\n */\n toString(): string {\n if (this.uuid === undefined) {\n return 'none';\n }\n return this.uuid;\n }\n\n valueOf(): string | undefined {\n return this.uuid;\n }\n\n /**\n * Get the internal representation\n */\n get value(): string | undefined {\n return this.valueOf();\n }\n\n /**\n * Compare two UUID4 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUuid = other as Uuid4Value;\n return this.uuid === otherUuid.uuid;\n }\n\n /**\n * Compare two UUID4 values (for ordering)\n */\n compare(other: Uuid4Value): number {\n if (this.uuid === undefined || other.uuid === undefined) {\n if (this.uuid === other.uuid) return 0;\n if (this.uuid === undefined) return -1;\n return 1;\n }\n \n // Compare as bytes for consistent ordering\n const thisBytes = this.asBytes()!;\n const otherBytes = other.asBytes()!;\n \n for (let i = 0; i < 16; i++) {\n if (thisBytes[i] < otherBytes[i]) return -1;\n if (thisBytes[i] > otherBytes[i]) return 1;\n }\n \n return 0;\n }\n\n toJSON(): string | null {\n return this.uuid ?? null;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport { v7 as uuidv7, NIL as NIL_UUID, validate, version } from 'uuid';\nimport { Type, Value, TypeValuePair } from \".\";\nimport { NONE_VALUE } from \"../constant\";\n\n/**\n * A UUID version 7 (timestamp-based) value type\n */\nexport class Uuid7Value implements Value {\n readonly type: Type = \"Uuid7\" as const;\n private readonly uuid?: string;\n\n constructor(value?: string) {\n if (value !== undefined) {\n if (typeof value !== 'string') {\n throw new Error(`Uuid7 value must be a string, got ${typeof value}`);\n }\n \n // Validate UUID format\n if (!validate(value)) {\n throw new Error(`Invalid UUID format: ${value}`);\n }\n \n // Check version (allow v7 or nil UUID)\n const ver = version(value);\n if (value !== NIL_UUID && ver !== 7) {\n throw new Error(`Invalid UUID version for Uuid7: expected v7, got v${ver}`);\n }\n \n this.uuid = value.toLowerCase();\n } else {\n this.uuid = undefined;\n }\n }\n\n /**\n * Generate a new timestamp-based UUID v7\n */\n static generate(): Uuid7Value {\n return new Uuid7Value(uuidv7());\n }\n\n /**\n * Create a new Uuid7Value from a string\n */\n static new(uuid: string): Uuid7Value {\n return new Uuid7Value(uuid);\n }\n\n /**\n * Get the nil UUID (all zeros)\n */\n static nil(): Uuid7Value {\n return new Uuid7Value(NIL_UUID);\n }\n\n /**\n * Get default Uuid7Value (nil UUID)\n */\n static default(): Uuid7Value {\n return Uuid7Value.nil();\n }\n\n /**\n * Parse a UUID string\n */\n static parse(str: string): Uuid7Value {\n const trimmed = str.trim();\n \n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new Uuid7Value(undefined);\n }\n\n // Try to parse as UUID\n if (!validate(trimmed)) {\n throw new Error(`Cannot parse \"${str}\" as Uuid7`);\n }\n\n const ver = version(trimmed);\n if (trimmed !== NIL_UUID && ver !== 7) {\n throw new Error(`Cannot parse \"${str}\" as Uuid7: wrong version (v${ver})`);\n }\n\n return new Uuid7Value(trimmed);\n }\n\n /**\n * Get the UUID string\n */\n asString(): string | undefined {\n return this.uuid;\n }\n\n /**\n * Get the UUID as bytes (16-byte array)\n */\n asBytes(): Uint8Array | undefined {\n if (this.uuid === undefined) return undefined;\n \n // Remove hyphens and convert hex to bytes\n const hex = this.uuid.replace(/-/g, '');\n const bytes = new Uint8Array(16);\n for (let i = 0; i < 16; i++) {\n bytes[i] = parseInt(hex.substring(i * 2, i * 2 + 2), 16);\n }\n return bytes;\n }\n\n /**\n * Extract the timestamp from UUID v7 (milliseconds since Unix epoch)\n */\n getTimestamp(): number | undefined {\n if (this.uuid === undefined || this.uuid === NIL_UUID) return undefined;\n \n // UUID v7 has a 48-bit timestamp in the first 6 bytes\n const hex = this.uuid.replace(/-/g, '');\n const timestampHex = hex.substring(0, 12);\n const timestamp = parseInt(timestampHex, 16);\n return timestamp;\n }\n\n /**\n * Check if this is the nil UUID\n */\n isNil(): boolean {\n return this.uuid === NIL_UUID;\n }\n\n /**\n * Get the UUID version\n */\n getVersion(): number | undefined {\n if (this.uuid === undefined) return undefined;\n return version(this.uuid);\n }\n\n /**\n * Format as string\n */\n toString(): string {\n if (this.uuid === undefined) {\n return 'none';\n }\n return this.uuid;\n }\n\n valueOf(): string | undefined {\n return this.uuid;\n }\n\n /**\n * Get the internal representation\n */\n get value(): string | undefined {\n return this.valueOf();\n }\n\n /**\n * Compare two UUID7 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUuid = other as Uuid7Value;\n return this.uuid === otherUuid.uuid;\n }\n\n /**\n * Compare two UUID7 values (for ordering)\n * UUID v7 has timestamp-based ordering for UUIDs generated close in time\n */\n compare(other: Uuid7Value): number {\n if (this.uuid === undefined || other.uuid === undefined) {\n if (this.uuid === other.uuid) return 0;\n if (this.uuid === undefined) return -1;\n return 1;\n }\n \n // Compare as bytes for consistent ordering\n const thisBytes = this.asBytes()!;\n const otherBytes = other.asBytes()!;\n \n for (let i = 0; i < 16; i++) {\n if (thisBytes[i] < otherBytes[i]) return -1;\n if (thisBytes[i] > otherBytes[i]) return 1;\n }\n \n return 0;\n }\n\n toJSON(): string | null {\n return this.uuid ?? null;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport { v7 as uuidv7, NIL as NIL_UUID, validate, version } from 'uuid';\nimport { Type, Value, TypeValuePair } from \".\";\nimport { NONE_VALUE } from \"../constant\";\n\n/**\n * An IdentityId value type that wraps a UUID v7\n */\nexport class IdentityIdValue implements Value {\n readonly type: Type = \"IdentityId\" as const;\n public readonly value?: string;\n\n constructor(value?: string) {\n if (value !== undefined) {\n if (typeof value !== 'string') {\n throw new Error(`IdentityId value must be a string, got ${typeof value}`);\n }\n \n // Validate UUID format\n if (!validate(value)) {\n throw new Error(`Invalid UUID format for IdentityId: ${value}`);\n }\n \n // Check version (allow v7 or nil UUID)\n const ver = version(value);\n if (value !== NIL_UUID && ver !== 7) {\n throw new Error(`Invalid UUID version for IdentityId: expected v7, got v${ver}`);\n }\n \n this.value = value.toLowerCase();\n } else {\n this.value = undefined;\n }\n }\n\n /**\n * Generate a new IdentityId with a UUID v7\n */\n static generate(): IdentityIdValue {\n return new IdentityIdValue(uuidv7());\n }\n\n /**\n * Get the nil IdentityId (all zeros)\n */\n static nil(): IdentityIdValue {\n return new IdentityIdValue(NIL_UUID);\n }\n\n /**\n * Parse a string as an IdentityId\n */\n static parse(str: string): IdentityIdValue {\n const trimmed = str.trim();\n \n if (trimmed === '' || trimmed === NONE_VALUE) {\n return new IdentityIdValue(undefined);\n }\n\n // Try to parse as UUID\n if (!validate(trimmed)) {\n throw new Error(`Cannot parse \"${str}\" as IdentityId`);\n }\n\n const ver = version(trimmed);\n if (trimmed !== NIL_UUID && ver !== 7) {\n throw new Error(`Cannot parse \"${str}\" as IdentityId: wrong UUID version (v${ver})`);\n }\n\n return new IdentityIdValue(trimmed);\n }\n\n /**\n * Get the UUID string value\n */\n valueOf(): string | undefined {\n return this.value;\n }\n\n /**\n * Format as string\n */\n toString(): string {\n return this.value === undefined ? 'none' : this.value;\n }\n\n /**\n * Extract the timestamp from the UUID v7 (milliseconds since Unix epoch)\n */\n getTimestamp(): number | undefined {\n if (this.value === undefined || this.value === NIL_UUID) return undefined;\n \n // UUID v7 has a 48-bit timestamp in the first 6 bytes\n const hex = this.value.replace(/-/g, '');\n const timestampHex = hex.substring(0, 12);\n const timestamp = parseInt(timestampHex, 16);\n return timestamp;\n }\n\n /**\n * Check if this is the nil UUID\n */\n isNil(): boolean {\n return this.value === NIL_UUID;\n }\n\n /**\n * Compare two IdentityId values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherIdentityId = other as IdentityIdValue;\n return this.value === otherIdentityId.value;\n }\n\n toJSON(): string | null {\n return this.value ?? null;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {NONE_VALUE} from '../constant';\nimport {BaseType, Type, isOptionType} from '.';\n\n/**\n * The wire rendering of a type: an object whose `id` names it, with anything it wraps under `underlying`.\n *\n * The client keeps its own representation, where a base type is the bare string it switches on. These two\n * functions are the only crossing between the two, so a wire descriptor never reaches code that expects\n * `{Option: ...}` and a client type never reaches the server expecting `{id, underlying}`.\n */\nexport interface WireType {\n id: string;\n underlying?: WireType;\n}\n\nexport function typeToWire(type: Type): WireType {\n return isOptionType(type)\n ? {id: 'Option', underlying: typeToWire(type.Option)}\n : {id: type};\n}\n\nexport function typeFromWire(wire: WireType): Type {\n if (!wire || typeof wire !== 'object' || typeof wire.id !== 'string') {\n throw new Error(`Expected a type descriptor object, got ${JSON.stringify(wire)}`);\n }\n if (wire.id === 'Option') {\n if (!wire.underlying) {\n throw new Error('Option type descriptor is missing its underlying type');\n }\n return {Option: typeFromWire(wire.underlying)};\n }\n return wire.id as BaseType;\n}\n\n/** Reads the column types of a frames payload, leaving the rest of the frame untouched. */\nexport function columnsFromWire<T extends {type: any}>(columns: T[]): T[] {\n return columns.map(column => ({...column, type: typeFromWire(column.type)}));\n}\n\nexport function framesFromWire(frames: any[]): any[] {\n return frames.map(frame =>\n frame && frame.columns ? {...frame, columns: columnsFromWire(frame.columns)} : frame\n );\n}\n\n/**\n * Reads a `format=json` frame envelope into the column shape the decoder works on.\n *\n * The rows carry one value per column and the envelope's `types` says what each column is, so the two\n * together hold everything the frames format carries. Turning them back into columns lets the JSON\n * transports run the same decode and the same shape check as every other transport, instead of handing\n * the caller whatever JSON happened to arrive.\n */\nexport function envelopeToColumns(envelope: any): {name: string, type: Type, payload: string[]}[] {\n const types = envelope?.types ?? {};\n const rows: any[] = envelope?.rows ?? [];\n return Object.keys(types).map(name => ({\n name,\n type: typeFromWire(types[name]),\n payload: rows.map(row => payloadOf(row?.[name])),\n }));\n}\n\nexport function envelopesToFrames(envelopes: any): {columns: {name: string, type: Type, payload: string[]}[]}[] {\n return Array.isArray(envelopes) ? envelopes.map(envelope => ({columns: envelopeToColumns(envelope)})) : [];\n}\n\nfunction payloadOf(value: any): string {\n // A none at the outermost layer is JSON's own null; deeper ones already arrive as a marker.\n if (value === null || value === undefined) {\n return NONE_VALUE;\n }\n return typeof value === 'string' ? value : String(value);\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nexport {BlobValue} from './blob';\nexport {BooleanValue} from './boolean';\nexport {DateValue} from './date';\nexport {DateTimeValue} from './datetime';\nexport {DecimalValue} from './decimal';\nexport {Float4Value} from './float4';\nexport {Float8Value} from './float8';\nexport {Int1Value} from './int1';\nexport {Int2Value} from './int2';\nexport {Int4Value} from './int4';\nexport {Int8Value} from './int8';\nexport {Int16Value} from './int16';\nexport {DurationValue} from './duration';\nexport {TimeValue} from './time';\nexport {Uint1Value} from './uint1';\nexport {Uint2Value} from './uint2';\nexport {Uint4Value} from './uint4';\nexport {Uint8Value} from './uint8';\nexport {Uint16Value} from './uint16';\nexport {NoneValue, noneDepth} from './none';\nexport {Option, isOption} from './option';\nexport {Utf8Value} from './utf8';\nexport {Uuid4Value} from './uuid4';\nexport {Uuid7Value} from './uuid7';\nexport {IdentityIdValue} from './identityid';\nexport {WireType, typeToWire, typeFromWire, columnsFromWire, framesFromWire, envelopeToColumns, envelopesToFrames} from './wire-type';\n\nexport type BaseType =\n | \"Blob\"\n | \"Boolean\"\n | \"Decimal\"\n | \"Float4\" | \"Float8\"\n | \"Int1\" | \"Int2\" | \"Int4\" | \"Int8\" | \"Int16\"\n | \"Uint1\" | \"Uint2\" | \"Uint4\" | \"Uint8\" | \"Uint16\"\n | \"Utf8\"\n | \"Date\" | \"DateTime\" | \"Time\" | \"Duration\"\n | \"Uuid4\" | \"Uuid7\"\n | \"IdentityId\"\n | \"None\";\n\nexport interface OptionType { Option: Type }\nexport type Type = BaseType | OptionType;\n\nexport function isOptionType(t: Type): t is OptionType {\n return typeof t === 'object' && t !== null && 'Option' in t;\n}\n\nexport function unwrapOptionType(t: Type): BaseType {\n if (isOptionType(t)) return unwrapOptionType(t.Option);\n return t;\n}\n\nexport function optionDepth(t: Type): number {\n return isOptionType(t) ? optionDepth(t.Option) + 1 : 0;\n}\n\nexport function innerOfOption(t: OptionType): Type {\n return t.Option;\n}\n\nexport interface TypeValuePair {\n type: Type;\n value: string;\n}\n\nexport abstract class Value {\n abstract readonly type: Type;\n\n public abstract encode(): TypeValuePair;\n public abstract equals(other: Value): boolean;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {\n BlobValue, BooleanValue, DateValue, DateTimeValue, DecimalValue, Float4Value, Float8Value,\n Int1Value, Int2Value, Int4Value, Int8Value, Int16Value, DurationValue,\n TimeValue, Uint1Value, Uint2Value, Uint4Value, Uint8Value,\n Uint16Value, NoneValue, Utf8Value, Uuid4Value, Uuid7Value, IdentityIdValue,\n Value, TypeValuePair, Type, isOptionType, unwrapOptionType, optionDepth, innerOfOption\n} from './value';\nimport {noneMarkerDepth} from './constant';\nimport {Column} from './types';\n\n\nfunction stripOptionLayers(type: Type, layers: number): Type {\n return layers === 0 || !isOptionType(type) ? type : stripOptionLayers(innerOfOption(type), layers - 1);\n}\n\nexport function decode(pair: TypeValuePair): Value {\n if (isOptionType(pair.type)) {\n const noneAt = noneMarkerDepth(pair.value);\n if (noneAt === undefined) {\n return decode({type: unwrapOptionType(pair.type), value: pair.value});\n }\n const depth = optionDepth(pair.type);\n if (noneAt >= depth) {\n throw new Error(`none under ${noneAt} Some layers cannot fit an option of depth ${depth}`);\n }\n return new NoneValue(stripOptionLayers(pair.type, noneAt + 1));\n }\n\n switch (pair.type) {\n case \"Blob\":\n return BlobValue.parse(pair.value);\n case \"Boolean\":\n return BooleanValue.parse(pair.value);\n case \"Date\":\n return DateValue.parse(pair.value);\n case \"DateTime\":\n return DateTimeValue.parse(pair.value);\n case \"Decimal\":\n return DecimalValue.parse(pair.value);\n case \"Float4\":\n return Float4Value.parse(pair.value);\n case \"Float8\":\n return Float8Value.parse(pair.value);\n case \"Int1\":\n return Int1Value.parse(pair.value);\n case \"Int2\":\n return Int2Value.parse(pair.value);\n case \"Int4\":\n return Int4Value.parse(pair.value);\n case \"Int8\":\n return Int8Value.parse(pair.value);\n case \"Int16\":\n return Int16Value.parse(pair.value);\n case \"Duration\":\n return DurationValue.parse(pair.value);\n case \"Time\":\n return TimeValue.parse(pair.value);\n case \"Uint1\":\n return Uint1Value.parse(pair.value);\n case \"Uint2\":\n return Uint2Value.parse(pair.value);\n case \"Uint4\":\n return Uint4Value.parse(pair.value);\n case \"Uint8\":\n return Uint8Value.parse(pair.value);\n case \"Uint16\":\n return Uint16Value.parse(pair.value);\n case \"None\":\n return NoneValue.parse(pair.value);\n case \"Utf8\":\n return Utf8Value.parse(pair.value);\n case \"Uuid4\":\n return Uuid4Value.parse(pair.value);\n case \"Uuid7\":\n return Uuid7Value.parse(pair.value);\n case \"IdentityId\":\n return IdentityIdValue.parse(pair.value);\n default:\n throw new Error(`Unsupported type: ${pair.type}`);\n }\n}\n\nexport function columnsToRows(columns: Column[]): Record<string, Value>[] {\n const rowCount = columns[0]?.payload.length ?? 0;\n return Array.from({length: rowCount}, (_, i) => {\n const row: Record<string, Value> = {};\n for (const col of columns) {\n row[col.name] = decode({type: col.type, value: col.payload[i]});\n }\n return row;\n });\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {NONE_VALUE, noneMarker, noneMarkerDepth} from \"./constant\";\nimport {NoneValue, TypeValuePair, WireType, isOption, typeToWire} from \"./value\";\n\nexport function encodeValue(value: any, name: string = '$1'): TypeValuePair {\n\n if (value === null || value === undefined) {\n throw new Error(`parameter ${name} is null or undefined, use Option.none(inner)`);\n }\n\n if (value instanceof NoneValue && value.innerType === 'None') {\n throw new Error(`parameter ${name} is a NoneValue without an inner type, use Option.none(inner)`);\n }\n\n if (isOption(value)) {\n if (value.isNone()) {\n return { type: value.type, value: NONE_VALUE };\n }\n const inner = encodeValue(value.unwrap(), name);\n const noneAt = noneMarkerDepth(inner.value);\n return {\n type: { Option: inner.type },\n value: noneAt === undefined ? inner.value : noneMarker(noneAt + 1),\n };\n }\n\n if (value && typeof value === 'object' && 'encode' in value && typeof value.encode === 'function') {\n return value.encode();\n }\n\n if (typeof value === 'boolean') {\n return { type: 'Boolean', value: value.toString() };\n }\n\n if (typeof value === 'number') {\n if (Number.isInteger(value)) {\n // Choose appropriate integer type based on value range\n if (value >= -128 && value <= 127) {\n return { type: 'Int1', value: value.toString() };\n } else if (value >= -32768 && value <= 32767) {\n return { type: 'Int2', value: value.toString() };\n } else if (value >= -2147483648 && value <= 2147483647) {\n return { type: 'Int4', value: value.toString() };\n } else {\n return { type: 'Int8', value: value.toString() };\n }\n } else {\n // Floating point number\n return { type: 'Float8', value: value.toString() };\n }\n }\n\n if (typeof value === 'string') {\n if (/^[0-9a-f]{8}-[0-9a-f]{4}-[47][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value)) {\n const version = value[14];\n if (version === '4') {\n return { type: 'Uuid4', value: value };\n } else if (version === '7') {\n return { type: 'Uuid7', value: value };\n }\n }\n return { type: 'Utf8', value: value };\n }\n\n if (typeof value === 'bigint') {\n if (value >= BigInt(0)) {\n if (value <= BigInt(255)) {\n return { type: 'Uint1', value: value.toString() };\n } else if (value <= BigInt(65535)) {\n return { type: 'Uint2', value: value.toString() };\n } else if (value <= BigInt(4294967295)) {\n return { type: 'Uint4', value: value.toString() };\n } else if (value <= BigInt('18446744073709551615')) {\n return { type: 'Uint8', value: value.toString() };\n } else {\n return { type: 'Uint16', value: value.toString() };\n }\n } else {\n if (value >= BigInt('-9223372036854775808')) {\n return { type: 'Int8', value: value.toString() };\n } else {\n return { type: 'Int16', value: value.toString() };\n }\n }\n }\n\n if (value instanceof Date) {\n return { type: 'DateTime', value: value.toISOString() };\n }\n\n\n if (value instanceof Uint8Array) {\n const hex = Array.from(value)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('');\n return { type: 'Blob', value: '0x' + hex };\n }\n\n if (value instanceof ArrayBuffer) {\n const uint8Array = new Uint8Array(value);\n const hex = Array.from(uint8Array)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('');\n return { type: 'Blob', value: '0x' + hex };\n }\n\n throw new Error(`Cannot encode value of type ${typeof value}: ${value}`);\n}\n\n/** A parameter as it goes on the wire: the same value, with the type in the wire's own rendering. */\nexport interface WireValue {\n type: WireType;\n value: string;\n}\n\nfunction toWire(pair: TypeValuePair): WireValue {\n return {type: typeToWire(pair.type), value: pair.value};\n}\n\nexport function encodeParams(params: any): WireValue[] | Record<string, WireValue> {\n if (params === undefined || params === null) {\n return [];\n }\n\n if (Array.isArray(params)) {\n return params.map((param, i) => toWire(encodeValue(param, `$${i + 1}`)));\n } else if (typeof params === 'object') {\n const encoded: Record<string, WireValue> = {};\n for (const [key, value] of Object.entries(params)) {\n encoded[key] = toWire(encodeValue(value, `$${key}`));\n }\n return encoded;\n }\n\n throw new Error(`Invalid parameters type: expected array or object, got ${typeof params}`);\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\n\nexport const TYPE_CODE = {\n None: 0,\n Boolean: 1,\n Float4: 2,\n Float8: 3,\n Int1: 4,\n Int2: 5,\n Int4: 6,\n Int8: 7,\n Int16: 8,\n Utf8: 9,\n Uint1: 10,\n Uint2: 11,\n Uint4: 12,\n Uint8: 13,\n Uint16: 14,\n Date: 15,\n DateTime: 16,\n Time: 17,\n Duration: 18,\n IdentityId: 19,\n Uuid4: 20,\n Uuid7: 21,\n Blob: 22,\n Int: 23,\n Uint: 24,\n Decimal: 25,\n Any: 26,\n DictionaryId: 27,\n Type: 28,\n List: 29,\n Record: 30,\n Tuple: 31,\n} as const;\n\nexport type TypeName = keyof typeof TYPE_CODE;\n\nconst CODE_TO_NAME: Record<number, TypeName> = Object.fromEntries(\n Object.entries(TYPE_CODE).map(([k, v]) => [v, k as TypeName])\n);\n\nexport function typeNameFromCode(code: number): TypeName {\n const name = CODE_TO_NAME[code];\n if (!name) throw new Error(`Unknown type code: ${code}`);\n return name;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {\n PrimitiveShapeNode, ObjectShapeNode, ArrayShapeNode,\n OptionShapeNode, ValueShapeNode, ShapeNode\n} from '.';\n\nexport class ShapeBuilder {\n\n static blob(): PrimitiveShapeNode<'Blob'> {\n return {kind: 'primitive', type: 'Blob'};\n }\n\n static bool(): PrimitiveShapeNode<'Boolean'> {\n return {kind: 'primitive', type: 'Boolean'};\n }\n\n static boolean(): PrimitiveShapeNode<'Boolean'> {\n return {kind: 'primitive', type: 'Boolean'};\n }\n\n static decimal(): PrimitiveShapeNode<'Decimal'> {\n return {kind: 'primitive', type: 'Decimal'};\n }\n\n static float4(): PrimitiveShapeNode<'Float4'> {\n return {kind: 'primitive', type: 'Float4'};\n }\n\n static float8(): PrimitiveShapeNode<'Float8'> {\n return {kind: 'primitive', type: 'Float8'};\n }\n\n static float(): PrimitiveShapeNode<'Float8'> {\n return {kind: 'primitive', type: 'Float8'};\n }\n\n static double(): PrimitiveShapeNode<'Float8'> {\n return {kind: 'primitive', type: 'Float8'};\n }\n\n static int1(): PrimitiveShapeNode<'Int1'> {\n return {kind: 'primitive', type: 'Int1'};\n }\n\n static int2(): PrimitiveShapeNode<'Int2'> {\n return {kind: 'primitive', type: 'Int2'};\n }\n\n static int4(): PrimitiveShapeNode<'Int4'> {\n return {kind: 'primitive', type: 'Int4'};\n }\n\n static int8(): PrimitiveShapeNode<'Int8'> {\n return {kind: 'primitive', type: 'Int8'};\n }\n\n static int16(): PrimitiveShapeNode<'Int16'> {\n return {kind: 'primitive', type: 'Int16'};\n }\n\n static int(): PrimitiveShapeNode<'Int4'> {\n return {kind: 'primitive', type: 'Int4'};\n }\n\n static bigint(): PrimitiveShapeNode<'Int8'> {\n return {kind: 'primitive', type: 'Int8'};\n }\n\n static uint1(): PrimitiveShapeNode<'Uint1'> {\n return {kind: 'primitive', type: 'Uint1'};\n }\n\n static uint2(): PrimitiveShapeNode<'Uint2'> {\n return {kind: 'primitive', type: 'Uint2'};\n }\n\n static uint4(): PrimitiveShapeNode<'Uint4'> {\n return {kind: 'primitive', type: 'Uint4'};\n }\n\n static uint8(): PrimitiveShapeNode<'Uint8'> {\n return {kind: 'primitive', type: 'Uint8'};\n }\n\n static uint16(): PrimitiveShapeNode<'Uint16'> {\n return {kind: 'primitive', type: 'Uint16'};\n }\n\n static utf8(): PrimitiveShapeNode<'Utf8'> {\n return {kind: 'primitive', type: 'Utf8'};\n }\n\n static string(): PrimitiveShapeNode<'Utf8'> {\n return {kind: 'primitive', type: 'Utf8'};\n }\n\n static date(): PrimitiveShapeNode<'Date'> {\n return {kind: 'primitive', type: 'Date'};\n }\n\n static datetime(): PrimitiveShapeNode<'DateTime'> {\n return {kind: 'primitive', type: 'DateTime'};\n }\n\n static time(): PrimitiveShapeNode<'Time'> {\n return {kind: 'primitive', type: 'Time'};\n }\n\n static duration(): PrimitiveShapeNode<'Duration'> {\n return {kind: 'primitive', type: 'Duration'};\n }\n\n static uuid4(): PrimitiveShapeNode<'Uuid4'> {\n return {kind: 'primitive', type: 'Uuid4'};\n }\n\n static uuid7(): PrimitiveShapeNode<'Uuid7'> {\n return {kind: 'primitive', type: 'Uuid7'};\n }\n\n static uuid(): PrimitiveShapeNode<'Uuid7'> {\n return {kind: 'primitive', type: 'Uuid7'};\n }\n\n static none(): PrimitiveShapeNode<'None'> {\n return {kind: 'primitive', type: 'None'};\n }\n\n static identityid(): PrimitiveShapeNode<'IdentityId'> {\n return {kind: 'primitive', type: 'IdentityId'};\n }\n\n static object<P extends Record<string, ShapeNode>>(properties: P): ObjectShapeNode<P> {\n return {kind: 'object', properties};\n }\n\n static array<T extends ShapeNode>(items: T): ArrayShapeNode<T> {\n return {kind: 'array', items};\n }\n\n static option<T extends ShapeNode>(inner: T): OptionShapeNode<T> {\n return {kind: 'option', inner};\n }\n\n static number(): PrimitiveShapeNode<'Float8'> {\n return {kind: 'primitive', type: 'Float8'};\n }\n\n static booleanValue(): ValueShapeNode<'Boolean'> {\n return {kind: 'value', type: 'Boolean'};\n }\n\n static decimalValue(): ValueShapeNode<'Decimal'> {\n return {kind: 'value', type: 'Decimal'};\n }\n\n static int1Value(): ValueShapeNode<'Int1'> {\n return {kind: 'value', type: 'Int1'};\n }\n\n static int2Value(): ValueShapeNode<'Int2'> {\n return {kind: 'value', type: 'Int2'};\n }\n\n static int4Value(): ValueShapeNode<'Int4'> {\n return {kind: 'value', type: 'Int4'};\n }\n\n static int8Value(): ValueShapeNode<'Int8'> {\n return {kind: 'value', type: 'Int8'};\n }\n\n static int16Value(): ValueShapeNode<'Int16'> {\n return {kind: 'value', type: 'Int16'};\n }\n\n static uint1Value(): ValueShapeNode<'Uint1'> {\n return {kind: 'value', type: 'Uint1'};\n }\n\n static uint2Value(): ValueShapeNode<'Uint2'> {\n return {kind: 'value', type: 'Uint2'};\n }\n\n static uint4Value(): ValueShapeNode<'Uint4'> {\n return {kind: 'value', type: 'Uint4'};\n }\n\n static uint8Value(): ValueShapeNode<'Uint8'> {\n return {kind: 'value', type: 'Uint8'};\n }\n\n static uint16Value(): ValueShapeNode<'Uint16'> {\n return {kind: 'value', type: 'Uint16'};\n }\n\n static float4Value(): ValueShapeNode<'Float4'> {\n return {kind: 'value', type: 'Float4'};\n }\n\n static float8Value(): ValueShapeNode<'Float8'> {\n return {kind: 'value', type: 'Float8'};\n }\n\n static utf8Value(): ValueShapeNode<'Utf8'> {\n return {kind: 'value', type: 'Utf8'};\n }\n\n static dateValue(): ValueShapeNode<'Date'> {\n return {kind: 'value', type: 'Date'};\n }\n\n static dateTimeValue(): ValueShapeNode<'DateTime'> {\n return {kind: 'value', type: 'DateTime'};\n }\n\n static timeValue(): ValueShapeNode<'Time'> {\n return {kind: 'value', type: 'Time'};\n }\n\n static durationValue(): ValueShapeNode<'Duration'> {\n return {kind: 'value', type: 'Duration'};\n }\n\n static uuid4Value(): ValueShapeNode<'Uuid4'> {\n return {kind: 'value', type: 'Uuid4'};\n }\n\n static uuid7Value(): ValueShapeNode<'Uuid7'> {\n return {kind: 'value', type: 'Uuid7'};\n }\n\n static noneValue(): ValueShapeNode<'None'> {\n return {kind: 'value', type: 'None'};\n }\n\n static blobValue(): ValueShapeNode<'Blob'> {\n return {kind: 'value', type: 'Blob'};\n }\n\n static identityIdValue(): ValueShapeNode<'IdentityId'> {\n return {kind: 'value', type: 'IdentityId'};\n }\n}\n\nexport const Shape = ShapeBuilder;\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {\n BlobValue, BooleanValue, DateValue, DateTimeValue, DecimalValue,\n Float4Value, Float8Value,\n Int1Value, Int2Value, Int4Value, Int8Value, Int16Value,\n DurationValue, TimeValue,\n Uint1Value, Uint2Value, Uint4Value, Uint8Value, Uint16Value,\n NoneValue, Utf8Value,\n Uuid4Value, Uuid7Value, IdentityIdValue,\n Option, BaseType, isOption\n} from '../value';\nimport {ShapeNode} from '.';\nimport {PrimitiveToValue} from './inference';\n\nfunction createValueInstance<T extends BaseType>(type: T, value: any): PrimitiveToValue<T> {\n switch (type) {\n case 'Blob':\n return new BlobValue(value) as PrimitiveToValue<T>;\n case 'Boolean':\n return new BooleanValue(value) as PrimitiveToValue<T>;\n case 'Float4':\n return new Float4Value(value) as PrimitiveToValue<T>;\n case 'Float8':\n return new Float8Value(value) as PrimitiveToValue<T>;\n case 'Int1':\n return new Int1Value(value) as PrimitiveToValue<T>;\n case 'Int2':\n return new Int2Value(value) as PrimitiveToValue<T>;\n case 'Int4':\n return new Int4Value(value) as PrimitiveToValue<T>;\n case 'Int8':\n return new Int8Value(value) as PrimitiveToValue<T>;\n case 'Int16':\n return new Int16Value(value) as PrimitiveToValue<T>;\n case 'Uint1':\n return new Uint1Value(value) as PrimitiveToValue<T>;\n case 'Uint2':\n return new Uint2Value(value) as PrimitiveToValue<T>;\n case 'Uint4':\n return new Uint4Value(value) as PrimitiveToValue<T>;\n case 'Uint8':\n return new Uint8Value(value) as PrimitiveToValue<T>;\n case 'Uint16':\n return new Uint16Value(value) as PrimitiveToValue<T>;\n case 'Utf8':\n return new Utf8Value(value) as PrimitiveToValue<T>;\n case 'Date':\n return new DateValue(value) as PrimitiveToValue<T>;\n case 'DateTime':\n return new DateTimeValue(value) as PrimitiveToValue<T>;\n case 'Time':\n return new TimeValue(value) as PrimitiveToValue<T>;\n case 'Duration':\n return new DurationValue(value) as PrimitiveToValue<T>;\n case 'Uuid4':\n return new Uuid4Value(value) as PrimitiveToValue<T>;\n case 'Uuid7':\n return new Uuid7Value(value) as PrimitiveToValue<T>;\n case 'Decimal':\n return new DecimalValue(value) as PrimitiveToValue<T>;\n case 'IdentityId':\n return new IdentityIdValue(value) as PrimitiveToValue<T>;\n case 'None':\n return new NoneValue() as PrimitiveToValue<T>;\n default:\n throw new Error(`Unknown type: ${type}`);\n }\n}\n\nexport function parseValue(shape: ShapeNode, value: any): any {\n if (shape.kind === 'primitive') {\n if (value === null || value === undefined) {\n return undefined;\n }\n return createValueInstance(shape.type as BaseType, value);\n }\n\n if (shape.kind === 'object') {\n if (value === null || value === undefined) {\n return undefined;\n }\n const result: Record<string, any> = {};\n for (const [key, propShape] of Object.entries(shape.properties)) {\n result[key] = parseValue(propShape, value[key]);\n }\n return result;\n }\n\n if (shape.kind === 'array') {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.map(item => parseValue(shape.items, item));\n }\n\n if (shape.kind === 'option') {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (isOption(value)) {\n return value.map(item => parseValue(shape.inner, item));\n }\n return Option.some(parseValue(shape.inner, value));\n }\n\n if (shape.kind === 'value') {\n if (value === null || value === undefined) {\n return undefined;\n }\n return createValueInstance(shape.type as BaseType, value);\n }\n\n throw new Error(`Unknown shape kind: ${(shape as any).kind}`);\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, isOption} from '../value';\nimport {ShapeNode} from '.';\n\nexport function validateShape(shape: ShapeNode, value: any): boolean {\n if (shape.kind === 'primitive') {\n const objectType = shape.type as Type;\n if (value === null || value === undefined) {\n return objectType === 'None';\n }\n\n switch (objectType) {\n case 'Boolean':\n return typeof value === 'boolean';\n case 'Float4':\n case 'Float8':\n case 'Int1':\n case 'Int2':\n case 'Int4':\n return typeof value === 'number';\n case 'Int8':\n case 'Int16':\n case 'Uint8':\n case 'Uint16':\n return typeof value === 'bigint' || typeof value === 'number';\n case 'Uint1':\n case 'Uint2':\n case 'Uint4':\n return typeof value === 'number' && value >= 0;\n case 'Utf8':\n case 'Time':\n case 'Duration':\n case 'Uuid4':\n case 'Uuid7':\n return typeof value === 'string';\n case 'Date':\n case 'DateTime':\n return value instanceof Date || typeof value === 'string';\n case 'Blob':\n return value instanceof Uint8Array || value instanceof ArrayBuffer;\n case 'None':\n return value === undefined;\n default:\n return false;\n }\n }\n\n if (shape.kind === 'object') {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n for (const [key, propShape] of Object.entries(shape.properties)) {\n if (!validateShape(propShape, value[key])) {\n return false;\n }\n }\n return true;\n }\n\n if (shape.kind === 'array') {\n if (!Array.isArray(value)) {\n return false;\n }\n return value.every(item => validateShape(shape.items, item));\n }\n\n if (shape.kind === 'option') {\n if (!isOption(value)) {\n return false;\n }\n return value.isNone() || validateShape(shape.inner, value.unwrap());\n }\n\n if (shape.kind === 'value') {\n if (value === null || value === undefined) {\n return shape.type === 'None';\n }\n if (typeof value === 'object' && value !== null && 'type' in value && 'encode' in value) {\n return value.type === shape.type;\n }\n return false;\n }\n\n return false;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {decode} from '../decoder';\nimport {Type, Value, isOptionType} from '../value';\n\n// A value shape names the type the caller wants to hold, so it has to accept a column whose type the\n// requested one can represent in full. The server picks the narrowest type a literal fits, so\n// `MAP {n: 1}` arrives as Int1 and a caller asking for an Int4Value would otherwise be refused a\n// value that fits with room to spare. A primitive shape has always tolerated the whole numeric\n// family and coerced into it; this is the same tolerance for value shapes.\n//\n// Only widening is allowed. A narrower target would silently drop range, a float target would claim\n// a precision the integer never had, and a different family would change what the value means.\n\ninterface Numeric {\n kind: 'int' | 'uint' | 'float';\n bits: number;\n}\n\nconst NUMERIC: Readonly<Record<string, Numeric>> = {\n Int1: {kind: 'int', bits: 8},\n Int2: {kind: 'int', bits: 16},\n Int4: {kind: 'int', bits: 32},\n Int8: {kind: 'int', bits: 64},\n Int16: {kind: 'int', bits: 128},\n Uint1: {kind: 'uint', bits: 8},\n Uint2: {kind: 'uint', bits: 16},\n Uint4: {kind: 'uint', bits: 32},\n Uint8: {kind: 'uint', bits: 64},\n Uint16: {kind: 'uint', bits: 128},\n Float4: {kind: 'float', bits: 32},\n Float8: {kind: 'float', bits: 64},\n};\n\n/** Whether every value of `actual` is representable as `target`, the type a value shape names. */\nexport function widens(target: string, actual: Type): boolean {\n if (isOptionType(actual)) {\n return false;\n }\n const t = NUMERIC[target];\n const a = NUMERIC[actual];\n if (!t || !a) {\n return target === actual;\n }\n if (t.kind === 'float' || a.kind === 'float') {\n return t.kind === 'float' && a.kind === 'float' && t.bits >= a.bits;\n }\n if (t.kind === 'uint') {\n return a.kind === 'uint' && t.bits >= a.bits;\n }\n // A signed target holds an unsigned source only when it is strictly wider: Uint1 reaches 255,\n // which an Int1 cannot hold, but an Int2 can.\n return a.kind === 'int' ? t.bits >= a.bits : t.bits > a.bits;\n}\n\n/** Re-reads `value` as `target` when the target is wider; otherwise hands it back untouched. */\nexport function widen(value: any, target: string): any {\n if (!value || typeof value !== 'object' || typeof (value as Value).type !== 'string') {\n return value;\n }\n const actual = (value as Value).type;\n if (actual === target || !widens(target, actual)) {\n return value;\n }\n const inner = (value as any).value;\n if (inner === undefined || inner === null) {\n return value;\n }\n return decode({type: target as Type, value: String(inner)});\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Column, Frame} from '../types';\nimport {Type, isOptionType} from '../value';\nimport {ShapeNode} from '.';\nimport {widens} from './widen';\n\nexport class ShapeMismatch extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ShapeMismatch';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport function checkFrames(frames: Frame[], shapes: readonly ShapeNode[]): void {\n if (shapes.length === 0) {\n return;\n }\n if (frames.length !== shapes.length) {\n throw new ShapeMismatch(`expected ${shapes.length} frames for ${shapes.length} shapes, got ${frames.length}`);\n }\n frames.forEach((frame, i) => checkFrame(frame.columns, shapes[i]));\n}\n\nexport function checkFrame(columns: Column[], shape: ShapeNode): void {\n if (shape.kind !== 'object') {\n throw new ShapeMismatch(`a frame needs an object shape, got ${shape.kind}`);\n }\n for (const [name, propertyShape] of Object.entries(shape.properties)) {\n const column = columns.find(c => c.name === name);\n if (!column) {\n throw new ShapeMismatch(`column \"${name}\": expected ${describe(propertyShape)}, missing from frame`);\n }\n if (!matches(propertyShape, column.type)) {\n throw new ShapeMismatch(`column \"${name}\": expected ${describe(propertyShape)}, got ${typeName(column.type)}`);\n }\n }\n}\n\n// A primitive shape decodes every wire type whose value shares its representation, so drift\n// inside a family (Int4 read as Float8) is not drift; None accepts Option columns because a\n// none payload decodes to NoneValue whatever the inner type is.\nconst FAMILIES: readonly (readonly string[])[] = [\n ['Boolean'],\n ['Int1', 'Int2', 'Int4', 'Int8', 'Int16', 'Uint1', 'Uint2', 'Uint4', 'Uint8', 'Uint16', 'Float4', 'Float8'],\n ['Utf8', 'Decimal', 'Duration', 'Uuid4', 'Uuid7', 'IdentityId'],\n ['Date', 'DateTime', 'Time'],\n ['Blob'],\n ['None'],\n];\n\nfunction familyOf(type: string): readonly string[] {\n return FAMILIES.find(family => family.includes(type)) ?? [type];\n}\n\nfunction matches(shape: ShapeNode, type: Type): boolean {\n switch (shape.kind) {\n case 'primitive':\n if (shape.type === 'None') {\n return type === 'None' || isOptionType(type);\n }\n return !isOptionType(type) && familyOf(shape.type).includes(type);\n case 'value':\n if (shape.type === 'None') {\n return type === 'None' || isOptionType(type);\n }\n return type === shape.type || widens(shape.type, type);\n case 'option':\n return isOptionType(type) && matches(shape.inner, type.Option);\n case 'object':\n case 'array':\n return false;\n }\n}\n\nfunction describe(shape: ShapeNode): string {\n switch (shape.kind) {\n case 'primitive':\n case 'value':\n return shape.type;\n case 'option':\n return `Option(${describe(shape.inner)})`;\n case 'object':\n case 'array':\n return shape.kind;\n }\n}\n\nfunction typeName(type: Type): string {\n return isOptionType(type) ? `Option(${typeName(type.Option)})` : type;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {ShapeNode} from '.';\nimport {ShapeMismatch} from './check';\nimport {widen} from './widen';\nimport {NoneValue, Option, noneDepth} from '../value';\nimport {FrameResults} from '../types';\n\nfunction snakeToCamel(key: string): string {\n return key.replace(/_([a-z0-9])/g, (_, c) => c.toUpperCase());\n}\n\nexport function transformFrames<const S extends readonly ShapeNode[]>(\n frames: any[][],\n shapes: S\n): FrameResults<S> {\n const transformed: any[][] = frames.map((frame: any[], frameIndex: number) => {\n const frameShape = shapes[frameIndex];\n if (!frameShape) {\n return frame;\n }\n return frame.map((row: any) => transformResult(row, frameShape));\n });\n return transformed as FrameResults<S>;\n}\n\nexport function transformResult(row: any, resultShape: any): any {\n if (resultShape && resultShape.kind === 'object' && resultShape.properties) {\n const transformedRow: any = {};\n for (const [key, value] of Object.entries(row)) {\n const propertyShape = resultShape.properties[key];\n const outputKey = snakeToCamel(key);\n if (propertyShape && propertyShape.kind === 'primitive') {\n if (value && typeof value === 'object' && typeof (value as any).valueOf === 'function') {\n const rawValue = (value as any).valueOf();\n transformedRow[outputKey] = coerceToPrimitiveType(rawValue, propertyShape.type);\n } else {\n transformedRow[outputKey] = coerceToPrimitiveType(value, propertyShape.type);\n }\n } else if (propertyShape && propertyShape.kind === 'value') {\n transformedRow[outputKey] = widen(value, propertyShape.type);\n } else {\n transformedRow[outputKey] = propertyShape ? transformResult(value, propertyShape) : value;\n }\n }\n return transformedRow;\n }\n\n if (resultShape && resultShape.kind === 'primitive') {\n if (row && typeof row === 'object' && typeof row.valueOf === 'function') {\n return coerceToPrimitiveType(row.valueOf(), resultShape.type);\n }\n return coerceToPrimitiveType(row, resultShape.type);\n }\n\n if (resultShape && resultShape.kind === 'value') {\n return widen(row, resultShape.type);\n }\n\n if (resultShape && resultShape.kind === 'array') {\n if (Array.isArray(row)) {\n return row.map((item: any) => transformResult(item, resultShape.items));\n }\n return row;\n }\n\n if (resultShape && resultShape.kind === 'option') {\n if (row instanceof NoneValue) {\n const remaining = optionLayers(resultShape);\n const depth = noneDepth(row);\n if (depth > remaining) {\n throw new ShapeMismatch(`a none ${depth} layers deep does not fit a shape with ${remaining} option layers`);\n }\n if (depth === remaining) {\n return Option.none(row.innerType);\n }\n }\n return Option.some(transformResult(row, resultShape.inner));\n }\n\n return row;\n}\n\nfunction optionLayers(shape: ShapeNode): number {\n return shape.kind === 'option' ? optionLayers(shape.inner) + 1 : 0;\n}\n\nfunction coerceToPrimitiveType(value: any, valueType: string): any {\n if (value === undefined || value === null) {\n return value;\n }\n\n const bigintTypes = ['Int8', 'Int16', 'Uint8', 'Uint16'];\n if (bigintTypes.includes(valueType)) {\n if (typeof value === 'bigint') {\n return value;\n }\n if (typeof value === 'number') {\n return BigInt(Math.trunc(value));\n }\n if (typeof value === 'string') {\n return BigInt(value);\n }\n }\n\n return value;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\n\nconst ZERO_WIDTH: ReadonlyArray<readonly [number, number]> = [\n [0x0300, 0x036f],\n [0x0483, 0x0489],\n [0x0591, 0x05bd],\n [0x0610, 0x061a],\n [0x064b, 0x065f],\n [0x0e31, 0x0e31],\n [0x0e34, 0x0e3a],\n [0x0eb1, 0x0eb1],\n [0x0eb4, 0x0eb9],\n [0x200b, 0x200f],\n [0x20d0, 0x20ff],\n [0xfe00, 0xfe0f],\n [0xfe20, 0xfe2f],\n [0xfeff, 0xfeff],\n];\n\nconst WIDE: ReadonlyArray<readonly [number, number]> = [\n [0x1100, 0x115f],\n [0x2329, 0x232a],\n [0x2e80, 0x303e],\n [0x3041, 0x33ff],\n [0x3400, 0x4dbf],\n [0x4e00, 0x9fff],\n [0xa000, 0xa4cf],\n [0xa960, 0xa97f],\n [0xac00, 0xd7a3],\n [0xf900, 0xfaff],\n [0xfe10, 0xfe19],\n [0xfe30, 0xfe6f],\n [0xff00, 0xff60],\n [0xffe0, 0xffe6],\n [0x1f300, 0x1f9ff],\n [0x1fa70, 0x1faff],\n [0x20000, 0x3fffd],\n];\n\nfunction inRanges(code: number, ranges: ReadonlyArray<readonly [number, number]>): boolean {\n let low = 0;\n let high = ranges.length - 1;\n while (low <= high) {\n const middle = (low + high) >> 1;\n const [start, end] = ranges[middle];\n if (code < start) high = middle - 1;\n else if (code > end) low = middle + 1;\n else return true;\n }\n return false;\n}\n\nfunction codePointWidth(code: number): number {\n if (code === 0) return 0;\n if (code < 0x20 || (code >= 0x7f && code < 0xa0)) return 0;\n if (inRanges(code, ZERO_WIDTH)) return 0;\n if (inRanges(code, WIDE)) return 2;\n return 1;\n}\n\ninterface GraphemeSegmenter {\n segment(input: string): Iterable<{segment: string}>;\n}\n\ntype GraphemeSegmenterFactory = new (\n locale: string | undefined,\n options: {granularity: 'grapheme'},\n) => GraphemeSegmenter;\n\nfunction createSegmenter(): GraphemeSegmenter | null {\n if (typeof Intl === 'undefined') return null;\n const factory = (Intl as {Segmenter?: GraphemeSegmenterFactory}).Segmenter;\n if (typeof factory !== 'function') return null;\n return new factory(undefined, {granularity: 'grapheme'});\n}\n\nconst segmenter = createSegmenter();\n\nfunction graphemes(text: string): string[] {\n if (segmenter !== null) {\n return Array.from(segmenter.segment(text), (entry) => entry.segment);\n }\n return Array.from(text);\n}\n\nexport function graphemeWidth(grapheme: string): number {\n let width = 0;\n for (const character of grapheme) {\n width += codePointWidth(character.codePointAt(0) ?? 0);\n }\n return Math.min(width, 2);\n}\n\nexport function displayWidth(text: string): number {\n let width = 0;\n for (const grapheme of graphemes(text)) {\n width += graphemeWidth(grapheme);\n }\n return width;\n}\n\nexport function truncateToWidth(text: string, width: number, ellipsis = '…'): string {\n if (width <= 0) return '';\n if (displayWidth(text) <= width) return text;\n\n const markerWidth = displayWidth(ellipsis);\n if (width <= markerWidth) return ellipsis.slice(0, width);\n\n const budget = width - markerWidth;\n let used = 0;\n let result = '';\n for (const grapheme of graphemes(text)) {\n const next = graphemeWidth(grapheme);\n if (used + next > budget) break;\n result += grapheme;\n used += next;\n }\n\n return result + ellipsis;\n}\n\nexport function padToWidth(text: string, width: number, align: 'left' | 'right' | 'center'): string {\n const padding = width - displayWidth(text);\n if (padding <= 0) return text;\n\n if (align === 'right') return ' '.repeat(padding) + text;\n if (align === 'left') return text + ' '.repeat(padding);\n\n const left = Math.floor(padding / 2);\n return ' '.repeat(left) + text + ' '.repeat(padding - left);\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\n\nimport {formatValue, valueRole, valueTypeName, type ValueRole} from './value';\nimport {displayWidth, truncateToWidth} from './width';\n\nexport type ColumnAlign = 'left' | 'right';\n\nexport interface ResultColumn {\n name: string;\n type?: string;\n role: ValueRole;\n align: ColumnAlign;\n}\n\nexport interface PlannedColumn {\n column: ResultColumn;\n width: number;\n}\n\nexport interface TablePlan {\n columns: PlannedColumn[];\n dropped: ResultColumn[];\n truncated: boolean;\n}\n\nexport interface TableLayoutOptions {\n width?: number;\n maxColumnWidth?: number;\n sample?: number;\n columnOverhead?: number;\n tableOverhead?: number;\n}\n\nconst DEFAULT_MAX_COLUMN_WIDTH = 40;\nconst DEFAULT_COLUMN_OVERHEAD = 3;\nconst DEFAULT_TABLE_OVERHEAD = 1;\n\nexport function inferColumns(rows: ReadonlyArray<Record<string, unknown>>): ResultColumn[] {\n const names: string[] = [];\n const seen = new Set<string>();\n\n for (const row of rows) {\n for (const name of Object.keys(row)) {\n if (seen.has(name)) continue;\n seen.add(name);\n names.push(name);\n }\n }\n\n return names.map((name) => {\n let role: ValueRole = 'unknown';\n let type: string | undefined;\n\n for (const row of rows) {\n const value = row[name];\n const candidate = valueRole(value);\n if (candidate === 'none' || candidate === 'unknown') continue;\n role = candidate;\n type = valueTypeName(value);\n break;\n }\n\n return {name, type, role, align: role === 'number' ? 'right' : 'left'};\n });\n}\n\nexport function planTable(\n rows: ReadonlyArray<Record<string, unknown>>,\n columns: ReadonlyArray<ResultColumn>,\n options: TableLayoutOptions = {},\n): TablePlan {\n const maxColumnWidth = options.maxColumnWidth ?? DEFAULT_MAX_COLUMN_WIDTH;\n const columnOverhead = options.columnOverhead ?? DEFAULT_COLUMN_OVERHEAD;\n const tableOverhead = options.tableOverhead ?? DEFAULT_TABLE_OVERHEAD;\n const sample = options.sample ?? rows.length;\n const measured = rows.slice(0, Math.max(sample, 0));\n\n let truncated = false;\n\n const natural = columns.map((column) => {\n let width = displayWidth(column.name);\n for (const row of measured) {\n width = Math.max(width, displayWidth(formatValue(row[column.name])));\n }\n if (width > maxColumnWidth) truncated = true;\n return {column, width: Math.min(width, maxColumnWidth)};\n });\n\n if (options.width === undefined) {\n return {columns: natural, dropped: [], truncated};\n }\n\n const planned: PlannedColumn[] = [];\n const dropped: ResultColumn[] = [];\n let used = tableOverhead;\n\n for (const entry of natural) {\n const required = entry.width + columnOverhead;\n if (planned.length > 0 && used + required > options.width) {\n dropped.push(entry.column);\n continue;\n }\n if (planned.length === 0 && used + required > options.width) {\n const available = options.width - used - columnOverhead;\n const width = Math.max(available, 1);\n if (width < entry.width) truncated = true;\n planned.push({column: entry.column, width});\n used += width + columnOverhead;\n continue;\n }\n planned.push(entry);\n used += required;\n }\n\n return {columns: planned, dropped, truncated};\n}\n\nexport function cellText(value: unknown, width: number): string {\n return truncateToWidth(formatValue(value), width);\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\n\nconst QUERY_TRANSFORMS = [\n 'map', 'extend', 'by', 'from', 'where', 'aggregate', 'having',\n 'sort', 'distinct', 'take', 'offset',\n];\n\nconst JOINS_AND_SET_OPERATIONS = [\n 'left', 'inner', 'natural', 'join', 'on', 'using', 'intersect', 'except',\n];\n\nconst DML = ['insert', 'into', 'update', 'set', 'delete'];\n\nconst CONTROL_FLOW = [\n 'let', 'if', 'else', 'end', 'loop', 'while', 'break', 'continue', 'return',\n];\n\nconst FUNCTIONS_AND_CASTING = ['fun', 'call', 'apply', 'cast'];\n\nconst DDL_AND_SHAPE = [\n 'describe', 'show', 'create', 'alter', 'drop', 'filter', 'gate', 'flow', 'window',\n 'returning',\n];\n\nconst OPERATOR_KEYWORDS = ['in', 'between', 'like', 'is', 'with'];\n\nconst OBJECT_TYPES = [\n 'namespace', 'sequence', 'series', 'subscription', 'table', 'ringbuffer',\n 'column', 'policy', 'property', 'view', 'deferred', 'transactional',\n];\n\nconst INDEX_AND_CONSTRAINTS = [\n 'index', 'unique', 'primary', 'key', 'asc', 'desc', 'auto', 'increment', 'value',\n];\n\nconst MISC_OPERATIONS = [\n 'exists', 'replace', 'cascade', 'restrict', 'to', 'pause', 'resume',\n 'query', 'rename', 'rownum', 'dictionary', 'for', 'output', 'append',\n 'assert', 'patch',\n];\n\nconst ENUMS_AND_PATTERN_MATCHING = ['enum', 'match'];\n\nconst PROCEDURES_AND_EVENTS = ['procedure', 'event', 'handler', 'dispatch', 'tag'];\n\nconst TESTING = ['test', 'tests', 'run'];\n\nconst ACCESS_CONTROL = [\n 'user', 'role', 'grant', 'revoke', 'password', 'require', 'execute',\n 'access', 'subscribe', 'enable', 'disable',\n];\n\nconst SYSTEM_OBJECTS = ['function', 'session', 'feature'];\n\nconst MIGRATIONS = [\n 'add', 'migration', 'migrate', 'rollback', 'diff', 'version', 'current', 'pending',\n];\n\nconst MISC = ['authentication', 'contains', 'remote', 'error'];\n\nconst ADDITIONAL_CONSTRUCTS = ['derive', 'group', 'union', 'as'];\n\nconst WORD_OPERATORS = ['and', 'or', 'not', 'xor'];\n\nexport const RQL_KEYWORDS: readonly string[] = [\n ...QUERY_TRANSFORMS,\n ...JOINS_AND_SET_OPERATIONS,\n ...DML,\n ...CONTROL_FLOW,\n ...FUNCTIONS_AND_CASTING,\n ...DDL_AND_SHAPE,\n ...OPERATOR_KEYWORDS,\n ...OBJECT_TYPES,\n ...INDEX_AND_CONSTRAINTS,\n ...MISC_OPERATIONS,\n ...ENUMS_AND_PATTERN_MATCHING,\n ...PROCEDURES_AND_EVENTS,\n ...TESTING,\n ...ACCESS_CONTROL,\n ...SYSTEM_OBJECTS,\n ...MIGRATIONS,\n ...MISC,\n ...ADDITIONAL_CONSTRUCTS,\n ...WORD_OPERATORS,\n];\n\nexport const RQL_LITERALS: readonly string[] = ['none', 'true', 'false'];\n\nconst SIGNED_INTEGERS = ['int1', 'int2', 'int4', 'int8', 'int16', 'int'];\n\nconst UNSIGNED_INTEGERS = ['uint1', 'uint2', 'uint4', 'uint8', 'uint16', 'uint'];\n\nconst FLOATING_POINT = ['float4', 'float8'];\n\nconst TEXT_AND_BINARY = ['utf8', 'blob', 'text'];\n\nconst BOOLEAN = ['bool', 'boolean'];\n\nconst NUMERIC = ['decimal'];\n\nconst TEMPORAL = ['date', 'datetime', 'time', 'duration', 'interval'];\n\nconst IDENTIFIERS_AND_UUIDS = [\n 'uuid4', 'uuid7', 'identityid', 'identity_id', 'dictionaryid', 'dictionary_id',\n];\n\nconst CONTAINERS = ['Option', 'List', 'Record', 'Tuple'];\n\nexport const RQL_TYPES: readonly string[] = [\n ...SIGNED_INTEGERS,\n ...UNSIGNED_INTEGERS,\n ...FLOATING_POINT,\n ...TEXT_AND_BINARY,\n ...BOOLEAN,\n ...NUMERIC,\n ...TEMPORAL,\n ...IDENTIFIERS_AND_UUIDS,\n ...CONTAINERS,\n 'any',\n];\n\nexport const RQL_OPERATORS: readonly string[] = [\n '+', '-', '*', '/', '//', '%', '=', '==', '!=', '->', '=>', '>', '<', '>=', '<=',\n '~=', '&&', '||', '??',\n];\n\nexport const RQL_SYSTEM_COLUMNS: readonly string[] = ['rownum', 'created_at', 'updated_at'];\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\n\nimport {RQL_KEYWORDS, RQL_LITERALS, RQL_TYPES} from './keyword';\n\nexport type RqlTokenKind =\n | 'keyword'\n | 'type'\n | 'constant'\n | 'identifier'\n | 'namespace'\n | 'entity'\n | 'function'\n | 'key'\n | 'variable'\n | 'variable.predefined'\n | 'comment'\n | 'string'\n | 'number'\n | 'operator'\n | 'delimiter'\n | 'bracket'\n | 'white';\n\nexport interface RqlToken {\n kind: RqlTokenKind;\n start: number;\n end: number;\n}\n\nconst KEYWORD_SET = new Set(RQL_KEYWORDS.map((entry) => entry.toLowerCase()));\nconst LITERAL_SET = new Set(RQL_LITERALS.map((entry) => entry.toLowerCase()));\nconst TYPE_SET = new Set(RQL_TYPES.map((entry) => entry.toLowerCase()));\n\nconst SYSTEM_COLUMN = /#(?:rownum|created_at|updated_at)\\b/y;\nconst COMMENT = /#.*/y;\nconst NAMESPACE_HEAD = /[a-zA-Z_][\\w$]*(?=\\s*::)/y;\nconst NAMESPACE_SEPARATOR = /::/y;\nconst NAMED_ARGUMENT = /\\w+\\s*:(?!:)/y;\nconst VARIABLE = /\\$[\\w$]+/y;\nconst CALL_NAME = /[a-zA-Z_][\\w$]*(?=\\s*\\()/y;\nconst WORD = /[a-zA-Z_][\\w$]*/y;\nconst WHITESPACE = /[ \\t\\r\\n]+/y;\nconst BRACKET = /[{}()[\\]]/y;\nconst NUMBER = /[+-]?(?:[\\d_]+(?:\\.[\\d_]+)?|\\.[\\d_]+)(?:[eE][+-]?\\d+)?/y;\nconst OPERATOR = /<<|>>|\\.\\.|==|!=|->|=>|>=|<=|~=|:=|&&|\\|\\||\\?\\?|\\/\\/|[+\\-*/%|.=<>!&^?]/y;\nconst DELIMITER = /[;,]/y;\n\nfunction match(pattern: RegExp, source: string, position: number): string | null {\n pattern.lastIndex = position;\n const result = pattern.exec(source);\n return result === null ? null : result[0];\n}\n\nfunction classifyWord(word: string): RqlTokenKind {\n const lowered = word.toLowerCase();\n if (KEYWORD_SET.has(lowered)) return 'keyword';\n if (LITERAL_SET.has(lowered)) return 'constant';\n if (TYPE_SET.has(lowered)) return 'type';\n return 'identifier';\n}\n\nfunction classifyCall(word: string): RqlTokenKind {\n const lowered = word.toLowerCase();\n if (KEYWORD_SET.has(lowered)) return 'keyword';\n if (TYPE_SET.has(lowered)) return 'type';\n return 'function';\n}\n\nfunction scanString(source: string, position: number): number {\n const quote = source[position];\n let index = position + 1;\n while (index < source.length) {\n const char = source[index];\n if (char === '\\\\') {\n index += 2;\n continue;\n }\n index++;\n if (char === quote) break;\n }\n return Math.min(index, source.length);\n}\n\nexport function tokenizeRql(source: string): RqlToken[] {\n const tokens: RqlToken[] = [];\n let position = 0;\n let afterSeparator = false;\n\n const push = (kind: RqlTokenKind, end: number): void => {\n tokens.push({kind, start: position, end});\n position = end;\n };\n\n while (position < source.length) {\n if (afterSeparator) {\n const white = match(WHITESPACE, source, position);\n if (white !== null) {\n push('white', position + white.length);\n continue;\n }\n\n const chained = match(NAMESPACE_HEAD, source, position);\n if (chained !== null) {\n afterSeparator = false;\n push('namespace', position + chained.length);\n continue;\n }\n\n const called = match(CALL_NAME, source, position);\n if (called !== null) {\n afterSeparator = false;\n push('function', position + called.length);\n continue;\n }\n\n const leaf = match(WORD, source, position);\n if (leaf !== null) {\n afterSeparator = false;\n push('entity', position + leaf.length);\n continue;\n }\n\n afterSeparator = false;\n }\n\n const systemColumn = match(SYSTEM_COLUMN, source, position);\n if (systemColumn !== null) {\n push('variable.predefined', position + systemColumn.length);\n continue;\n }\n\n const comment = match(COMMENT, source, position);\n if (comment !== null) {\n push('comment', position + comment.length);\n continue;\n }\n\n const namespace = match(NAMESPACE_HEAD, source, position);\n if (namespace !== null) {\n push('namespace', position + namespace.length);\n continue;\n }\n\n const separator = match(NAMESPACE_SEPARATOR, source, position);\n if (separator !== null) {\n afterSeparator = true;\n push('operator', position + separator.length);\n continue;\n }\n\n const namedArgument = match(NAMED_ARGUMENT, source, position);\n if (namedArgument !== null) {\n push('key', position + namedArgument.length);\n continue;\n }\n\n const variable = match(VARIABLE, source, position);\n if (variable !== null) {\n push('variable', position + variable.length);\n continue;\n }\n\n const call = match(CALL_NAME, source, position);\n if (call !== null) {\n push(classifyCall(call), position + call.length);\n continue;\n }\n\n const word = match(WORD, source, position);\n if (word !== null) {\n push(classifyWord(word), position + word.length);\n continue;\n }\n\n const white = match(WHITESPACE, source, position);\n if (white !== null) {\n push('white', position + white.length);\n continue;\n }\n\n const bracket = match(BRACKET, source, position);\n if (bracket !== null) {\n push('bracket', position + bracket.length);\n continue;\n }\n\n const number = match(NUMBER, source, position);\n if (number !== null) {\n push('number', position + number.length);\n continue;\n }\n\n const char = source[position];\n if (char === '\"' || char === \"'\") {\n push('string', scanString(source, position));\n continue;\n }\n\n const operator = match(OPERATOR, source, position);\n if (operator !== null) {\n push('operator', position + operator.length);\n continue;\n }\n\n const delimiter = match(DELIMITER, source, position);\n if (delimiter !== null) {\n push('delimiter', position + delimiter.length);\n continue;\n }\n\n push('identifier', position + 1);\n }\n\n return tokens;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, TypeValuePair} from './value';\nimport {ShapeNode, InferShape} from './shape';\n\nexport type Params = (TypeValuePair | null)[] | Record<string, TypeValuePair | null>;\n\nexport interface Frame {\n columns: Column[];\n}\n\nexport interface DiagnosticColumn {\n name: string,\n type: Type,\n}\n\nexport interface Fragment {\n text: string\n line?: number,\n column?: number,\n}\n\nexport interface Diagnostic {\n code: string,\n rql?: string;\n message: string,\n column?: DiagnosticColumn,\n fragment?: Fragment,\n label?: string,\n help?: string,\n notes: Array<string>,\n cause?: Diagnostic,\n}\n\nexport interface Column {\n name: string;\n type: Type;\n payload: string[];\n}\n\nexport interface ErrorResponse {\n id: string;\n type: \"Err\";\n payload: {\n diagnostic: Diagnostic;\n };\n}\n\nexport class ReifyError extends Error {\n public readonly code: string;\n public readonly rql?: string;\n public readonly column?: DiagnosticColumn;\n public readonly fragment?: Fragment;\n public readonly label?: string;\n public readonly help?: string;\n public readonly notes: string[];\n public readonly cause?: Diagnostic;\n\n constructor(response: ErrorResponse) {\n const diagnostic = response.payload.diagnostic;\n const message = `[${diagnostic.code}] ${diagnostic.message}` +\n (diagnostic.label ? ` — ${diagnostic.label}` : \"\");\n\n super(message);\n\n this.name = \"ReifyError\";\n this.code = diagnostic.code;\n this.rql = diagnostic.rql;\n this.column = diagnostic.column;\n this.fragment = diagnostic.fragment;\n this.label = diagnostic.label;\n this.help = diagnostic.help;\n this.notes = diagnostic.notes ?? [];\n this.cause = diagnostic.cause;\n\n // Required for instanceof checks to work properly\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n toString(): string {\n const position = this.fragment\n ? `line ${this.fragment.line}, offset ${this.fragment.column}`\n : \"unknown position\";\n\n const notes = this.notes.length\n ? `\\nNotes:\\n- ${this.notes.join(\"\\n- \")}`\n : \"\";\n\n const help = this.help\n ? `\\nHelp: ${this.help}`\n : \"\";\n\n return `${this.name}: ${this.message}\\nAt ${position}${help}${notes}`;\n }\n}\n\n/**\n * Simplified type for inferring frame results to avoid deep instantiation\n * This provides a workaround for TypeScript's limitation with deeply nested types\n */\nexport type FrameResults<S extends readonly ShapeNode[]> =\n S extends readonly [infer First, ...infer Rest]\n ? First extends ShapeNode\n ? Rest extends readonly ShapeNode[]\n ? [InferShape<First>[], ...FrameResults<Rest>]\n : [InferShape<First>[]]\n : never\n : [];\n\n/**\n * Helper type to extract a single frame result\n */\nexport type SingleFrameResult<S extends ShapeNode> = InferShape<S>[];\n\n/**\n * Type-safe cast helper for frame results\n */\nexport function asFrameResults<S extends readonly ShapeNode[]>(\n results: any\n): FrameResults<S> {\n return results as FrameResults<S>;\n}\n"],"mappings":"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","names":["match","match","match","match","NIL_UUID","validate","version","validate","version","NIL_UUID","uuidv7","NIL_UUID","validate","version","validate","version","NIL_UUID","uuidv7","Value","version","typeName","NUMERIC","white"]}
|
|
1
|
+
{"version":3,"sources":["../src/constant.ts","../src/value/blob.ts","../src/value/boolean.ts","../src/value/date.ts","../src/value/time.ts","../src/value/datetime.ts","../src/value/decimal.ts","../src/type-code.ts","../src/value/digest.ts","../src/value/fixed-point.ts","../src/value/float4.ts","../src/value/float8.ts","../src/value/int1.ts","../src/value/int2.ts","../src/value/int4.ts","../src/value/int8.ts","../src/value/int16.ts","../src/value/duration.ts","../src/value/uint1.ts","../src/value/uint2.ts","../src/value/uint4.ts","../src/value/uint8.ts","../src/value/uint16.ts","../src/value/none.ts","../src/present/value.ts","../src/value/option.ts","../src/value/utf8.ts","../src/value/uuid4.ts","../src/value/uuid7.ts","../src/value/identityid.ts","../src/value/list.ts","../src/value/record.ts","../src/value/wire-type.ts","../src/value/index.ts","../src/decoder.ts","../src/encoder.ts","../src/shape/builder.ts","../src/shape/parser.ts","../src/shape/validator.ts","../src/shape/widen.ts","../src/shape/check.ts","../src/shape/transform.ts","../src/present/width.ts","../src/present/table.ts","../src/syntax/keyword.ts","../src/syntax/tokenizer.ts","../src/types.ts"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nexport const NONE_VALUE = \"⟪none⟫\";\n\nconst NONE_MARKER_OPEN = NONE_VALUE.slice(0, -1);\nconst NONE_MARKER_CLOSE = NONE_VALUE.slice(-1);\n\nexport function noneMarker(depth: number): string {\n return depth === 0 ? NONE_VALUE : `${NONE_MARKER_OPEN}:${depth}${NONE_MARKER_CLOSE}`;\n}\n\nexport function noneMarkerDepth(payload: string): number | undefined {\n if (payload === NONE_VALUE) {\n return 0;\n }\n if (!payload.startsWith(`${NONE_MARKER_OPEN}:`) || !payload.endsWith(NONE_MARKER_CLOSE)) {\n return undefined;\n }\n const digits = payload.slice(NONE_MARKER_OPEN.length + 1, -NONE_MARKER_CLOSE.length);\n return /^[1-9][0-9]*$/.test(digits) ? Number(digits) : undefined;\n}\n\nexport const ROW_NUMBER_KEY = \"#rownum\";\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\n/**\n * A binary large object (BLOB) value that can hold arbitrary byte data.\n */\nexport class BlobValue implements Value {\n readonly type: Type = \"Blob\" as const;\n private readonly bytes: Uint8Array;\n\n constructor(value: Uint8Array | ArrayBuffer | string | number[]) {\n if (value === undefined) {\n throw new Error(`Blob value must be defined, a none is carried by NoneValue`);\n }\n if (value instanceof Uint8Array) {\n this.bytes = new Uint8Array(value);\n } else if (value instanceof ArrayBuffer) {\n this.bytes = new Uint8Array(value);\n } else if (typeof value === 'string') {\n // Try to parse as hex or base64\n const parsed = BlobValue.parseString(value);\n if (parsed === null) {\n throw new Error(`Invalid blob string: ${value}`);\n }\n this.bytes = parsed;\n } else if (Array.isArray(value)) {\n // Array of numbers (bytes)\n for (const byte of value) {\n if (!Number.isInteger(byte) || byte < 0 || byte > 255) {\n throw new Error(`Invalid byte value: ${byte}`);\n }\n }\n this.bytes = new Uint8Array(value);\n } else {\n throw new Error(`Blob value must be a Uint8Array, ArrayBuffer, string, or number[], got ${typeof value}`);\n }\n }\n\n /**\n * Create a new BLOB from raw bytes\n */\n static new(bytes: Uint8Array | number[]): BlobValue {\n return new BlobValue(bytes);\n }\n\n /**\n * Create an empty BLOB\n */\n static empty(): BlobValue {\n return new BlobValue(new Uint8Array(0));\n }\n\n /**\n * Create a BLOB from a byte array\n */\n static fromBytes(bytes: number[]): BlobValue {\n return new BlobValue(bytes);\n }\n\n /**\n * Create a BLOB from a hex string\n */\n static fromHex(hex: string): BlobValue {\n // Remove 0x prefix if present\n const cleanHex = hex.startsWith('0x') || hex.startsWith('0X')\n ? hex.substring(2)\n : hex;\n\n if (cleanHex.length % 2 !== 0) {\n throw new Error(`Invalid hex string: odd length`);\n }\n\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n const byte = parseInt(cleanHex.substring(i, i + 2), 16);\n if (isNaN(byte)) {\n throw new Error(`Invalid hex string: ${hex}`);\n }\n bytes[i / 2] = byte;\n }\n return new BlobValue(bytes);\n }\n\n /**\n * Create a BLOB from a base64 string\n */\n static fromBase64(base64: string): BlobValue {\n // Validate base64 format\n if (!/^[A-Za-z0-9+/]*={0,2}$/.test(base64)) {\n throw new Error(`Invalid base64 string: ${base64}`);\n }\n\n try {\n if (typeof Buffer !== 'undefined') {\n // Node.js environment\n const buffer = Buffer.from(base64, 'base64');\n return new BlobValue(new Uint8Array(buffer));\n } else {\n // Browser environment\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return new BlobValue(bytes);\n }\n } catch (e) {\n throw new Error(`Invalid base64 string: ${base64}`);\n }\n }\n\n /**\n * Create a BLOB from a UTF-8 string\n */\n static fromUtf8(str: string): BlobValue {\n const encoder = new TextEncoder();\n return new BlobValue(encoder.encode(str));\n }\n\n /**\n * Parse a blob string (hex or undefined)\n */\n static parse(str: string): BlobValue {\n const trimmed = str.trim();\n\n if (trimmed === '' || trimmed === NONE_VALUE) {\n throw new Error(`Cannot parse \"${str}\" as Blob`);\n }\n\n const parsed = BlobValue.parseString(trimmed);\n if (parsed === null) {\n throw new Error(`Cannot parse \"${str}\" as Blob`);\n }\n\n return new BlobValue(parsed);\n }\n\n /**\n * Get the raw bytes\n */\n asBytes(): Uint8Array | undefined {\n return this.bytes ? new Uint8Array(this.bytes) : undefined;\n }\n\n /**\n * Get the length in bytes\n */\n length(): number {\n return this.bytes?.length ?? 0;\n }\n\n /**\n * Check if the BLOB is empty\n */\n isEmpty(): boolean {\n return this.bytes?.length === 0;\n }\n\n /**\n * Convert to hex string with 0x prefix\n */\n toHex(): string | undefined {\n if (this.bytes === undefined) return undefined;\n\n const hex = Array.from(this.bytes)\n .map(byte => byte.toString(16).padStart(2, '0'))\n .join('');\n return '0x' + hex;\n }\n\n /**\n * Convert to base64 string\n */\n toBase64(): string | undefined {\n if (this.bytes === undefined) return undefined;\n\n if (typeof Buffer !== 'undefined') {\n // Node.js environment\n return Buffer.from(this.bytes).toString('base64');\n } else {\n // Browser environment\n const binaryString = Array.from(this.bytes)\n .map(byte => String.fromCharCode(byte))\n .join('');\n return btoa(binaryString);\n }\n }\n\n /**\n * Convert to UTF-8 string\n */\n toUtf8(): string | undefined {\n if (this.bytes === undefined) return undefined;\n\n const decoder = new TextDecoder();\n return decoder.decode(this.bytes);\n }\n\n /**\n * Format as hex string with 0x prefix\n */\n toString(): string {\n return this.toHex()!;\n }\n\n valueOf(): Uint8Array {\n return new Uint8Array(this.bytes);\n }\n\n /**\n * Get the internal representation\n */\n get value(): Uint8Array | undefined {\n return this.valueOf();\n }\n\n /**\n * Compare two blobs for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherBlob = other as BlobValue;\n if (this.bytes === undefined || otherBlob.bytes === undefined) {\n return this.bytes === otherBlob.bytes;\n }\n\n if (this.bytes.length !== otherBlob.bytes.length) {\n return false;\n }\n\n for (let i = 0; i < this.bytes.length; i++) {\n if (this.bytes[i] !== otherBlob.bytes[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Helper to parse a string as hex\n */\n private static parseString(str: string): Uint8Array | null {\n // Try hex first (with or without 0x prefix)\n if (str.startsWith('0x') || str.startsWith('0X')) {\n try {\n return BlobValue.fromHex(str).bytes!;\n } catch {\n return null;\n }\n }\n\n // Check if it looks like hex (all hex digits)\n if (/^[0-9a-fA-F]+$/.test(str) && str.length % 2 === 0) {\n try {\n return BlobValue.fromHex(str).bytes!;\n } catch {\n return null;\n }\n }\n\n return null;\n }\n\n toJSON(): string {\n return this.toHex()!;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class BooleanValue implements Value {\n readonly type: Type = \"Boolean\" as const;\n public readonly value: boolean;\n\n constructor(value: boolean) {\n if (value === undefined) {\n throw new Error(`Boolean value must be defined, a none is carried by NoneValue`);\n }\n if (typeof value !== 'boolean') {\n throw new Error(`Boolean value must be a boolean, got ${typeof value}`);\n }\n this.value = value;\n }\n\n static parse(str: string): BooleanValue {\n const trimmed = str.trim().toLowerCase();\n\n if (trimmed === '' || trimmed === NONE_VALUE) {\n throw new Error(`Cannot parse \"${str}\" as Boolean`);\n }\n\n if (trimmed === 'true') {\n return new BooleanValue(true);\n }\n\n if (trimmed === 'false') {\n return new BooleanValue(false);\n }\n\n throw new Error(`Cannot parse \"${str}\" as Boolean`);\n }\n\n valueOf(): boolean {\n return this.value;\n }\n\n toString(): string {\n return this.value.toString();\n }\n\n /**\n * Compare two boolean values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherBoolean = other as BooleanValue;\n return this.value === otherBoolean.value;\n }\n\n toJSON(): boolean {\n return this.value ?? null;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\ninterface DateComponents {\n months: number;\n days: number;\n}\n\n/**\n * A date value representing a calendar date (year, month, day) without time information.\n * Always interpreted in UTC.\n * Internally stored as months and days.\n */\nexport class DateValue implements Value {\n readonly type: Type = \"Date\" as const;\n private readonly months: number;\n private readonly days: number;\n\n constructor(value: Date | string | number | DateComponents) {\n if (value === undefined) {\n throw new Error(`Date value must be defined, a none is carried by NoneValue`);\n }\n if (value instanceof Date) {\n const year = value.getUTCFullYear();\n const month = value.getUTCMonth() + 1;\n const day = value.getUTCDate();\n\n this.months = year * 12 + (month - 1);\n this.days = day;\n } else if (typeof value === 'string') {\n const parsed = DateValue.parseDate(value);\n if (!parsed) {\n throw new Error(`Invalid date string: ${value}`);\n }\n this.months = parsed.months;\n this.days = parsed.days;\n } else if (typeof value === 'number') {\n const date = DateValue.fromDaysSinceEpochToComponents(value);\n if (!date) {\n throw new Error(`Invalid days since epoch: ${value}`);\n }\n this.months = date.months;\n this.days = date.days;\n } else if (typeof value === 'object' && 'months' in value && 'days' in value) {\n this.months = value.months;\n this.days = value.days;\n } else {\n throw new Error(`Date value must be a Date, string, or number, got ${typeof value}`);\n }\n }\n\n /**\n * Create a DateValue from year, month (1-12), and day (1-31)\n */\n static fromYMD(year: number, month: number, day: number): DateValue {\n // Validate the date is valid\n if (!DateValue.isValidDate(year, month, day)) {\n throw new Error(`Invalid date: ${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`);\n }\n \n return new DateValue({months: year * 12 + (month - 1), days: day});\n }\n\n /**\n * Get today's date (in UTC)\n */\n static today(): DateValue {\n const now = new Date();\n return DateValue.fromYMD(\n now.getUTCFullYear(),\n now.getUTCMonth() + 1,\n now.getUTCDate()\n );\n }\n\n /**\n * Parse a date string in YYYY-MM-DD format\n */\n static parse(str: string): DateValue {\n const trimmed = str.trim();\n \n if (trimmed === '' || trimmed === NONE_VALUE) {\n throw new Error(`Cannot parse \"${str}\" as Date`);\n }\n\n const parsed = DateValue.parseDate(trimmed);\n if (!parsed) {\n throw new Error(`Cannot parse \"${str}\" as Date`);\n }\n\n return new DateValue(parsed);\n }\n\n /**\n * Convert to days since Unix epoch (1970-01-01) for storage\n */\n toDaysSinceEpoch(): number | undefined {\n if (this.months === undefined || this.days === undefined) {\n return undefined;\n }\n \n const year = Math.floor(this.months / 12);\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n const month = m + 1;\n \n // Create date with special handling for years < 100\n let date: Date;\n if (year >= 0 && year < 100) {\n date = new Date(Date.UTC(2000, month - 1, this.days));\n date.setUTCFullYear(year);\n } else {\n date = new Date(Date.UTC(year, month - 1, this.days));\n }\n \n const epoch = new Date(Date.UTC(1970, 0, 1));\n const diffMs = date.getTime() - epoch.getTime();\n return Math.floor(diffMs / (1000 * 60 * 60 * 24));\n }\n\n /**\n * Create from days since Unix epoch\n */\n static fromDaysSinceEpochToComponents(days: number): { months: number; days: number } | null {\n const epoch = new Date(Date.UTC(1970, 0, 1));\n const ms = days * 24 * 60 * 60 * 1000;\n const date = new Date(epoch.getTime() + ms);\n \n // Check for valid date\n if (!isFinite(date.getTime())) {\n return null;\n }\n \n const year = date.getUTCFullYear();\n const month = date.getUTCMonth() + 1;\n const day = date.getUTCDate();\n \n return {\n months: year * 12 + (month - 1),\n days: day\n };\n }\n\n /**\n * Get the year component\n */\n year(): number | undefined {\n if (this.months === undefined) return undefined;\n return Math.floor(this.months / 12);\n }\n\n /**\n * Get the month component (1-12)\n */\n month(): number | undefined {\n if (this.months === undefined) return undefined;\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n return m + 1;\n }\n\n /**\n * Get the day component (1-31)\n */\n day(): number | undefined {\n return this.days;\n }\n\n /**\n * Format as YYYY-MM-DD string\n */\n toString(): string {\n if (this.months === undefined || this.days === undefined) {\n return 'none';\n }\n\n const year = Math.floor(this.months / 12);\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n const month = String(m + 1).padStart(2, '0');\n const day = String(this.days).padStart(2, '0');\n \n // Handle negative years (BC dates)\n if (year < 0) {\n const absYear = Math.abs(year);\n return `-${String(absYear).padStart(4, '0')}-${month}-${day}`;\n } else {\n return `${String(year).padStart(4, '0')}-${month}-${day}`;\n }\n }\n\n valueOf(): Date | undefined {\n if (this.months === undefined || this.days === undefined) {\n return undefined;\n }\n \n const year = Math.floor(this.months / 12);\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n const month = m + 1;\n \n // Handle years < 100 specially\n let date: Date;\n if (year >= 0 && year < 100) {\n date = new Date(Date.UTC(2000, month - 1, this.days));\n date.setUTCFullYear(year);\n } else {\n date = new Date(Date.UTC(year, month - 1, this.days));\n }\n \n return date;\n }\n \n /**\n * Get the internal representation\n */\n get value(): Date | undefined {\n return this.valueOf();\n }\n\n /**\n * Helper to parse YYYY-MM-DD format\n */\n private static parseDate(str: string): { months: number; days: number } | null {\n // Match YYYY-MM-DD format, including negative years\n const match = str.match(/^(-?\\d{1,4})-(\\d{2})-(\\d{2})$/);\n if (!match) {\n return null;\n }\n\n const year = parseInt(match[1], 10);\n const month = parseInt(match[2], 10);\n const day = parseInt(match[3], 10);\n\n // Validate month and day ranges\n if (month < 1 || month > 12) {\n return null;\n }\n if (day < 1 || day > 31) {\n return null;\n }\n\n // Validate the date is valid (e.g., no Feb 30)\n if (!DateValue.isValidDate(year, month, day)) {\n return null;\n }\n\n return {\n months: year * 12 + (month - 1),\n days: day\n };\n }\n \n /**\n * Helper to validate a date\n */\n private static isValidDate(year: number, month: number, day: number): boolean {\n // Create a date and check if components match\n let date: Date;\n if (year >= 0 && year < 100) {\n date = new Date(Date.UTC(2000, month - 1, day));\n date.setUTCFullYear(year);\n } else {\n date = new Date(Date.UTC(year, month - 1, day));\n }\n \n return date.getUTCFullYear() === year &&\n date.getUTCMonth() === month - 1 &&\n date.getUTCDate() === day;\n }\n\n /**\n * Compare two dates for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherDate = other as DateValue;\n if (this.months === undefined || otherDate.months === undefined) {\n return this.months === otherDate.months && this.days === otherDate.days;\n }\n \n return this.months === otherDate.months && this.days === otherDate.days;\n }\n\n toJSON(): string | null {\n if (this.months === undefined || this.days === undefined) {\n return null;\n }\n return this.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport { Type, Value, TypeValuePair } from \".\";\nimport { NONE_VALUE } from \"../constant\";\n\n/**\n * A time value representing time of day (hour, minute, second, nanosecond) without date information.\n * Internally stored as nanoseconds since midnight.\n */\nexport class TimeValue implements Value {\n readonly type: Type = \"Time\" as const;\n public readonly value: bigint; // nanoseconds since midnight\n\n private static readonly NANOS_PER_SECOND = 1_000_000_000n;\n private static readonly NANOS_PER_MINUTE = 60_000_000_000n;\n private static readonly NANOS_PER_HOUR = 3_600_000_000_000n;\n private static readonly NANOS_PER_DAY = 86_400_000_000_000n;\n\n constructor(value: bigint | string | number) {\n if (value === undefined) {\n throw new Error(`Time value must be defined, a none is carried by NoneValue`);\n }\n if (typeof value === 'bigint') {\n // Validate range (0 to 24 hours in nanoseconds)\n if (value < 0n || value >= TimeValue.NANOS_PER_DAY) {\n throw new Error(`Time value must be between 0 and ${TimeValue.NANOS_PER_DAY - 1n} nanoseconds`);\n }\n this.value = value;\n } else if (typeof value === 'string') {\n // Parse HH:MM:SS[.nnnnnnnnn] format\n const parsed = TimeValue.parseTime(value);\n if (parsed === null) {\n throw new Error(`Invalid time string: ${value}`);\n }\n this.value = parsed;\n } else if (typeof value === 'number') {\n // Accept number as nanoseconds since midnight\n const bigintValue = BigInt(Math.floor(value));\n if (bigintValue < 0n || bigintValue >= TimeValue.NANOS_PER_DAY) {\n throw new Error(`Time value must be between 0 and ${TimeValue.NANOS_PER_DAY - 1n} nanoseconds`);\n }\n this.value = bigintValue;\n } else {\n throw new Error(`Time value must be a bigint, string, or number, got ${typeof value}`);\n }\n }\n\n /**\n * Create a TimeValue from hour, minute, second, and nanosecond\n */\n static fromHMSN(hour: number, minute: number, second: number, nano: number = 0): TimeValue {\n // Validate inputs\n if (hour < 0 || hour > 23) {\n throw new Error(`Invalid hour: ${hour}`);\n }\n if (minute < 0 || minute > 59) {\n throw new Error(`Invalid minute: ${minute}`);\n }\n if (second < 0 || second > 59) {\n throw new Error(`Invalid second: ${second}`);\n }\n if (nano < 0 || nano > 999_999_999) {\n throw new Error(`Invalid nanosecond: ${nano}`);\n }\n\n const nanos = BigInt(hour) * TimeValue.NANOS_PER_HOUR +\n BigInt(minute) * TimeValue.NANOS_PER_MINUTE +\n BigInt(second) * TimeValue.NANOS_PER_SECOND +\n BigInt(nano);\n\n return new TimeValue(nanos);\n }\n\n /**\n * Create a TimeValue from hour, minute, and second (no fractional seconds)\n */\n static fromHMS(hour: number, minute: number, second: number): TimeValue {\n return TimeValue.fromHMSN(hour, minute, second, 0);\n }\n\n /**\n * Create midnight (00:00:00.000000000)\n */\n static midnight(): TimeValue {\n return new TimeValue(0n);\n }\n\n /**\n * Create noon (12:00:00.000000000)\n */\n static noon(): TimeValue {\n return new TimeValue(12n * TimeValue.NANOS_PER_HOUR);\n }\n\n /**\n * Parse a time string in HH:MM:SS[.nnnnnnnnn] format\n */\n static parse(str: string): TimeValue {\n const trimmed = str.trim();\n \n if (trimmed === '' || trimmed === NONE_VALUE) {\n throw new Error(`Cannot parse \"${str}\" as Time`);\n }\n\n const parsed = TimeValue.parseTime(trimmed);\n if (parsed === null) {\n throw new Error(`Cannot parse \"${str}\" as Time`);\n }\n\n return new TimeValue(parsed);\n }\n\n /**\n * Get the hour component (0-23)\n */\n hour(): number | undefined {\n if (this.value === undefined) return undefined;\n return Number(this.value / TimeValue.NANOS_PER_HOUR);\n }\n\n /**\n * Get the minute component (0-59)\n */\n minute(): number | undefined {\n if (this.value === undefined) return undefined;\n const remainingAfterHours = this.value % TimeValue.NANOS_PER_HOUR;\n return Number(remainingAfterHours / TimeValue.NANOS_PER_MINUTE);\n }\n\n /**\n * Get the second component (0-59)\n */\n second(): number | undefined {\n if (this.value === undefined) return undefined;\n const remainingAfterHours = this.value % TimeValue.NANOS_PER_HOUR;\n const remainingAfterMinutes = remainingAfterHours % TimeValue.NANOS_PER_MINUTE;\n return Number(remainingAfterMinutes / TimeValue.NANOS_PER_SECOND);\n }\n\n /**\n * Get the nanosecond component (0-999999999)\n */\n nanosecond(): number | undefined {\n if (this.value === undefined) return undefined;\n return Number(this.value % TimeValue.NANOS_PER_SECOND);\n }\n\n /**\n * Convert to nanoseconds since midnight for storage\n */\n toNanosSinceMidnight(): bigint | undefined {\n return this.value;\n }\n\n /**\n * Create from nanoseconds since midnight\n */\n static fromNanosSinceMidnight(nanos: bigint | number): TimeValue {\n return new TimeValue(typeof nanos === 'number' ? BigInt(nanos) : nanos);\n }\n\n /**\n * Format as HH:MM:SS.nnnnnnnnn string\n */\n toString(): string {\n const hour = this.hour()!;\n const minute = this.minute()!;\n const second = this.second()!;\n const nano = this.nanosecond()!;\n\n const hourStr = String(hour).padStart(2, '0');\n const minuteStr = String(minute).padStart(2, '0');\n const secondStr = String(second).padStart(2, '0');\n const nanoStr = String(nano).padStart(9, '0');\n\n return `${hourStr}:${minuteStr}:${secondStr}.${nanoStr}`;\n }\n\n valueOf(): bigint {\n return this.value;\n }\n\n /**\n * Helper to parse HH:MM:SS[.nnnnnnnnn] format\n */\n private static parseTime(str: string): bigint | null {\n // Match HH:MM:SS or HH:MM:SS.fractional\n const match = str.match(/^(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{1,9}))?$/);\n if (!match) {\n return null;\n }\n\n const hour = parseInt(match[1], 10);\n const minute = parseInt(match[2], 10);\n const second = parseInt(match[3], 10);\n \n // Parse fractional seconds if present\n let nano = 0;\n if (match[4]) {\n // Pad or truncate to 9 digits\n const fracStr = match[4].padEnd(9, '0').substring(0, 9);\n nano = parseInt(fracStr, 10);\n }\n\n // Validate ranges\n if (hour < 0 || hour > 23) {\n return null;\n }\n if (minute < 0 || minute > 59) {\n return null;\n }\n if (second < 0 || second > 59) {\n return null;\n }\n\n const nanos = BigInt(hour) * TimeValue.NANOS_PER_HOUR +\n BigInt(minute) * TimeValue.NANOS_PER_MINUTE +\n BigInt(second) * TimeValue.NANOS_PER_SECOND +\n BigInt(nano);\n\n return nanos;\n }\n\n /**\n * Compare two Time values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherTime = other as TimeValue;\n return this.value === otherTime.value;\n }\n\n toJSON(): string {\n return this.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\nimport {DateValue} from \"./date\";\nimport {TimeValue} from \"./time\";\n\n/**\n * A date and time value with nanosecond precision.\n * Always in UTC timezone.\n * Internally stored as months, days, and nanoseconds.\n */\ninterface DateTimeComponents {\n months: number;\n days: number;\n nanos: bigint;\n}\n\nexport class DateTimeValue implements Value {\n readonly type: Type = \"DateTime\" as const;\n private readonly months: number; \n private readonly days: number; // day of month (1-31)\n private readonly nanos: bigint; // nanoseconds since midnight\n\n constructor(value: Date | string | number | bigint | DateTimeComponents) {\n if (value === undefined) {\n throw new Error(`DateTime value must be defined, a none is carried by NoneValue`);\n }\n if (value instanceof Date) {\n // Store as UTC with millisecond precision from Date\n const year = value.getUTCFullYear();\n const month = value.getUTCMonth() + 1;\n const day = value.getUTCDate();\n const hour = value.getUTCHours();\n const minute = value.getUTCMinutes();\n const second = value.getUTCSeconds();\n const millis = value.getUTCMilliseconds();\n\n this.months = year * 12 + (month - 1);\n this.days = day;\n this.nanos = BigInt(hour) * 3_600_000_000_000n +\n BigInt(minute) * 60_000_000_000n +\n BigInt(second) * 1_000_000_000n +\n BigInt(millis) * 1_000_000n;\n } else if (typeof value === 'string') {\n // Parse ISO 8601 format\n const parsed = DateTimeValue.parseDateTime(value);\n if (!parsed) {\n throw new Error(`Invalid datetime string: ${value}`);\n }\n this.months = parsed.months;\n this.days = parsed.days;\n this.nanos = parsed.nanos;\n } else if (typeof value === 'number') {\n // Interpret as milliseconds since epoch\n const date = new Date(value);\n const year = date.getUTCFullYear();\n const month = date.getUTCMonth() + 1;\n const day = date.getUTCDate();\n const hour = date.getUTCHours();\n const minute = date.getUTCMinutes();\n const second = date.getUTCSeconds();\n const millis = date.getUTCMilliseconds();\n\n this.months = year * 12 + (month - 1);\n this.days = day;\n this.nanos = BigInt(hour) * 3_600_000_000_000n +\n BigInt(minute) * 60_000_000_000n +\n BigInt(second) * 1_000_000_000n +\n BigInt(millis) * 1_000_000n;\n } else if (typeof value === 'bigint') {\n // Interpret as nanoseconds since epoch\n const millis = Number(value / 1_000_000n);\n const extraNanos = value % 1_000_000n;\n const date = new Date(millis);\n\n const year = date.getUTCFullYear();\n const month = date.getUTCMonth() + 1;\n const day = date.getUTCDate();\n const hour = date.getUTCHours();\n const minute = date.getUTCMinutes();\n const second = date.getUTCSeconds();\n const dateMillis = date.getUTCMilliseconds();\n\n this.months = year * 12 + (month - 1);\n this.days = day;\n this.nanos = BigInt(hour) * 3_600_000_000_000n +\n BigInt(minute) * 60_000_000_000n +\n BigInt(second) * 1_000_000_000n +\n BigInt(dateMillis) * 1_000_000n +\n extraNanos;\n } else if (typeof value === 'object' && 'months' in value && 'days' in value && 'nanos' in value) {\n this.months = value.months;\n this.days = value.days;\n this.nanos = value.nanos;\n } else {\n throw new Error(`DateTime value must be a Date, string, number, or bigint, got ${typeof value}`);\n }\n }\n\n /**\n * Create a DateTimeValue from year, month, day, hour, minute, second, nanosecond\n */\n static fromYMDHMSN(\n year: number,\n month: number,\n day: number,\n hour: number,\n minute: number,\n second: number,\n nano: number = 0\n ): DateTimeValue {\n // Validate inputs\n if (hour < 0 || hour > 23) {\n throw new Error(`Invalid hour: ${hour}`);\n }\n if (minute < 0 || minute > 59) {\n throw new Error(`Invalid minute: ${minute}`);\n }\n if (second < 0 || second > 59) {\n throw new Error(`Invalid second: ${second}`);\n }\n if (nano < 0 || nano > 999_999_999) {\n throw new Error(`Invalid nanosecond: ${nano}`);\n }\n\n // Validate the date\n if (!DateTimeValue.isValidDate(year, month, day)) {\n throw new Error(`Invalid datetime: ${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')} ${String(hour).padStart(2, '0')}:${String(minute).padStart(2, '0')}:${String(second).padStart(2, '0')}`);\n }\n\n return new DateTimeValue({\n months: year * 12 + (month - 1),\n days: day,\n nanos: BigInt(hour) * 3_600_000_000_000n +\n BigInt(minute) * 60_000_000_000n +\n BigInt(second) * 1_000_000_000n +\n BigInt(nano),\n });\n }\n\n /**\n * Create a DateTimeValue from year, month, day, hour, minute, second (no fractional)\n */\n static fromYMDHMS(\n year: number,\n month: number,\n day: number,\n hour: number,\n minute: number,\n second: number\n ): DateTimeValue {\n return DateTimeValue.fromYMDHMSN(year, month, day, hour, minute, second, 0);\n }\n\n /**\n * Create from Unix timestamp in seconds\n */\n static fromTimestamp(seconds: number): DateTimeValue {\n return new DateTimeValue(seconds * 1000);\n }\n\n /**\n * Create from Unix timestamp in milliseconds\n */\n static fromTimestampMillis(millis: number): DateTimeValue {\n return new DateTimeValue(millis);\n }\n\n /**\n * Create from nanoseconds since Unix epoch\n */\n static fromNanosSinceEpoch(nanos: bigint): DateTimeValue {\n return new DateTimeValue(nanos);\n }\n\n /**\n * Create from separate seconds and nanoseconds\n */\n static fromParts(seconds: number, nanos: number): DateTimeValue {\n if (nanos < 0 || nanos > 999_999_999) {\n throw new Error(`Invalid nanoseconds: ${nanos}`);\n }\n const millis = seconds * 1000 + Math.floor(nanos / 1_000_000);\n const extraNanos = nanos % 1_000_000;\n const result = new DateTimeValue(millis);\n\n return new DateTimeValue({\n months: result.months,\n days: result.days,\n nanos: result.nanos + BigInt(extraNanos),\n });\n }\n\n /**\n * Get current datetime\n */\n static now(): DateTimeValue {\n return new DateTimeValue(new Date());\n }\n\n /**\n * Get default datetime (Unix epoch)\n */\n static default(): DateTimeValue {\n return DateTimeValue.fromYMDHMS(1970, 1, 1, 0, 0, 0);\n }\n\n /**\n * Parse a datetime string in ISO 8601 format\n */\n static parse(str: string): DateTimeValue {\n const trimmed = str.trim();\n\n if (trimmed === '' || trimmed === NONE_VALUE) {\n throw new Error(`Cannot parse \"${str}\" as DateTime`);\n }\n\n const parsed = DateTimeValue.parseDateTime(trimmed);\n if (!parsed) {\n throw new Error(`Cannot parse \"${str}\" as DateTime`);\n }\n\n return new DateTimeValue(parsed);\n }\n\n /**\n * Get Unix timestamp in seconds\n */\n toEpochSecs(): number | undefined {\n const date = this.valueOf();\n if (date === undefined) return undefined;\n return Math.floor(date.getTime() / 1000);\n }\n\n /**\n * Get Unix timestamp in nanoseconds\n */\n timestampNanos(): bigint | undefined {\n const date = this.valueOf();\n if (date === undefined || this.nanos === undefined) return undefined;\n\n // Convert date to epoch nanoseconds\n const epochNanos = BigInt(date.getTime()) * 1_000_000n;\n\n // The nanos field stores time-of-day, but we already included millis in epochNanos\n // So we need to add only the sub-millisecond portion\n const subMillisNanos = this.nanos % 1_000_000n;\n\n return epochNanos + subMillisNanos;\n }\n\n /**\n * Convert to nanoseconds since Unix epoch for storage\n */\n toNanosSinceEpoch(): bigint | undefined {\n return this.timestampNanos();\n }\n\n /**\n * Get separate seconds and nanoseconds for storage\n */\n toParts(): [number, number] | undefined {\n const date = this.valueOf();\n if (date === undefined || this.nanos === undefined) return undefined;\n\n const seconds = Math.floor(date.getTime() / 1000);\n const millis = date.getTime() % 1000;\n const subMillisNanos = Number(this.nanos % 1_000_000n);\n const nanos = millis * 1_000_000 + subMillisNanos;\n return [seconds, nanos];\n }\n\n /**\n * Get the date component\n */\n date(): DateValue | undefined {\n if (this.months === undefined || this.days === undefined) return undefined;\n const year = Math.floor(this.months / 12);\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n const month = m + 1;\n return DateValue.fromYMD(year, month, this.days);\n }\n\n /**\n * Get the time component\n */\n time(): TimeValue | undefined {\n if (this.nanos === undefined) return undefined;\n return new TimeValue(this.nanos);\n }\n\n /**\n * Format as ISO 8601 string with nanosecond precision and Z suffix\n */\n toString(): string {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return 'none';\n }\n\n const year = Math.floor(this.months / 12);\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n const month = String(m + 1).padStart(2, '0');\n const day = String(this.days).padStart(2, '0');\n\n // Extract time components from nanos\n const totalNanos = this.nanos;\n const hours = totalNanos / 3_600_000_000_000n;\n const remainingAfterHours = totalNanos % 3_600_000_000_000n;\n const minutes = remainingAfterHours / 60_000_000_000n;\n const remainingAfterMinutes = remainingAfterHours % 60_000_000_000n;\n const seconds = remainingAfterMinutes / 1_000_000_000n;\n const nanosFraction = remainingAfterMinutes % 1_000_000_000n;\n\n const hour = String(Number(hours)).padStart(2, '0');\n const minute = String(Number(minutes)).padStart(2, '0');\n const second = String(Number(seconds)).padStart(2, '0');\n const nanoStr = String(Number(nanosFraction)).padStart(9, '0');\n\n // Handle negative years (BC dates)\n let yearStr: string;\n if (year < 0) {\n const absYear = Math.abs(year);\n yearStr = `-${String(absYear).padStart(4, '0')}`;\n } else {\n yearStr = String(year).padStart(4, '0');\n }\n\n return `${yearStr}-${month}-${day}T${hour}:${minute}:${second}.${nanoStr}Z`;\n }\n\n valueOf(): Date {\n const year = Math.floor(this.months / 12);\n // Handle negative months correctly\n let m = this.months % 12;\n if (m < 0) m += 12;\n const month = m + 1;\n\n // Extract time components\n const totalNanos = this.nanos;\n const hours = Number(totalNanos / 3_600_000_000_000n);\n const remainingAfterHours = totalNanos % 3_600_000_000_000n;\n const minutes = Number(remainingAfterHours / 60_000_000_000n);\n const remainingAfterMinutes = remainingAfterHours % 60_000_000_000n;\n const seconds = Number(remainingAfterMinutes / 1_000_000_000n);\n const nanosFraction = remainingAfterMinutes % 1_000_000_000n;\n const millis = Number(nanosFraction / 1_000_000n);\n\n // Handle years < 100 specially\n let date: Date;\n if (year >= 0 && year < 100) {\n date = new Date(Date.UTC(2000, month - 1, this.days, hours, minutes, seconds, millis));\n date.setUTCFullYear(year);\n } else {\n date = new Date(Date.UTC(year, month - 1, this.days, hours, minutes, seconds, millis));\n }\n\n return date;\n }\n\n /**\n * Get the internal representation as a Date\n */\n get value(): Date | undefined {\n return this.valueOf();\n }\n\n /**\n * Helper to parse ISO 8601 datetime format\n */\n private static parseDateTime(str: string): { months: number; days: number; nanos: bigint } | null {\n // Match ISO 8601 format: YYYY-MM-DDTHH:MM:SS[.nnnnnnnnn]Z\n const match = str.match(/^(-?\\d{1,4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{1,9}))?Z$/);\n if (!match) {\n return null;\n }\n\n const year = parseInt(match[1], 10);\n const month = parseInt(match[2], 10);\n const day = parseInt(match[3], 10);\n const hour = parseInt(match[4], 10);\n const minute = parseInt(match[5], 10);\n const second = parseInt(match[6], 10);\n\n // Parse fractional seconds if present\n let nanosFraction = 0n;\n if (match[7]) {\n // Pad or truncate to 9 digits\n const fracStr = match[7].padEnd(9, '0').substring(0, 9);\n nanosFraction = BigInt(fracStr);\n }\n\n // Validate ranges\n if (month < 1 || month > 12) {\n return null;\n }\n if (day < 1 || day > 31) {\n return null;\n }\n if (hour < 0 || hour > 23) {\n return null;\n }\n if (minute < 0 || minute > 59) {\n return null;\n }\n if (second < 0 || second > 59) {\n return null;\n }\n\n // Validate the date is valid\n if (!DateTimeValue.isValidDate(year, month, day)) {\n return null;\n }\n\n const months = year * 12 + (month - 1);\n const nanos = BigInt(hour) * 3_600_000_000_000n +\n BigInt(minute) * 60_000_000_000n +\n BigInt(second) * 1_000_000_000n +\n nanosFraction;\n\n return {months, days: day, nanos};\n }\n\n /**\n * Helper to validate a date\n */\n private static isValidDate(year: number, month: number, day: number): boolean {\n // Create a date and check if components match\n let date: Date;\n if (year >= 0 && year < 100) {\n date = new Date(Date.UTC(2000, month - 1, day));\n date.setUTCFullYear(year);\n } else {\n date = new Date(Date.UTC(year, month - 1, day));\n }\n\n return date.getUTCFullYear() === year &&\n date.getUTCMonth() === month - 1 &&\n date.getUTCDate() === day;\n }\n\n /**\n * Compare two datetimes for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherDateTime = other as DateTimeValue;\n if (this.months === undefined || otherDateTime.months === undefined) {\n return this.months === otherDateTime.months && \n this.days === otherDateTime.days && \n this.nanos === otherDateTime.nanos;\n }\n \n return this.months === otherDateTime.months && \n this.days === otherDateTime.days && \n this.nanos === otherDateTime.nanos;\n }\n\n toJSON(): string {\n return this.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nconst DECIMAL_PATTERN = /^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/;\n\nexport class DecimalValue implements Value {\n readonly type: Type = \"Decimal\" as const;\n public readonly value: string;\n\n constructor(value: string) {\n if (value === undefined) {\n throw new Error(`Decimal value must be defined, a none is carried by NoneValue`);\n }\n if (typeof value !== 'string') {\n throw new Error(`Decimal value must be a string, got ${typeof value}`);\n }\n this.value = value;\n }\n\n static parse(str: string): DecimalValue {\n if (!DECIMAL_PATTERN.test(str)) {\n throw new Error(`Cannot parse \"${str}\" as Decimal`);\n }\n\n return new DecimalValue(str);\n }\n\n valueOf(): string {\n return this.value;\n }\n\n toString(): string {\n return this.value;\n }\n\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherDecimal = other as DecimalValue;\n return this.value === otherDecimal.value;\n }\n\n toJSON(): string {\n return this.value ?? null;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.toString()\n };\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\n\nexport const TYPE_CODE = {\n None: 0,\n Boolean: 1,\n Float4: 2,\n Float8: 3,\n Int1: 4,\n Int2: 5,\n Int4: 6,\n Int8: 7,\n Int16: 8,\n Utf8: 9,\n Uint1: 10,\n Uint2: 11,\n Uint4: 12,\n Uint8: 13,\n Uint16: 14,\n Date: 15,\n DateTime: 16,\n Time: 17,\n Duration: 18,\n IdentityId: 19,\n Uuid4: 20,\n Uuid7: 21,\n Blob: 22,\n Decimal: 23,\n Any: 24,\n DictionaryId: 25,\n Type: 26,\n List: 27,\n Record: 28,\n Tuple: 29,\n Digest: 30,\n} as const;\n\nexport type TypeName = keyof typeof TYPE_CODE;\n\nconst CODE_TO_NAME: Record<number, TypeName> = Object.fromEntries(\n Object.entries(TYPE_CODE).map(([k, v]) => [v, k as TypeName])\n);\n\nexport function typeNameFromCode(code: number): TypeName {\n const name = CODE_TO_NAME[code];\n if (!name) throw new Error(`Unknown type code: ${code}`);\n return name;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {DigestInnerType, DigestType, TypeValuePair, Value} from \".\";\nimport {TYPE_CODE} from \"../type-code\";\n\nconst VERSION = 1n;\nconst MIN_ACCURACY = 1_000;\nconst MAX_ACCURACY = 100_000;\nconst U32_MAX = 0xffff_ffffn;\nconst U64_MAX = 0xffff_ffff_ffff_ffffn;\nconst I32_MAX = 0x7fff_ffffn;\n\nconst INNER_TYPES: readonly DigestInnerType[] = [\n \"Float4\", \"Float8\",\n \"Int1\", \"Int2\", \"Int4\", \"Int8\", \"Int16\",\n \"Uint1\", \"Uint2\", \"Uint4\", \"Uint8\", \"Uint16\",\n \"Duration\",\n];\n\nexport function digestType(inner: string, accuracy: number): DigestType {\n const supported = INNER_TYPES.find(name => name === inner);\n if (supported === undefined) {\n throw new Error(`digest does not support ${inner} input`);\n }\n if (!Number.isInteger(accuracy) || accuracy < MIN_ACCURACY || accuracy > MAX_ACCURACY) {\n throw new Error(`digest accuracy must be a whole number of ppm between ${MIN_ACCURACY} and ${MAX_ACCURACY}, got ${accuracy}`);\n }\n return {Digest: {inner: supported, accuracy}};\n}\n\nexport function digestTypeName(type: DigestType): string {\n const {inner, accuracy} = type.Digest;\n const whole = Math.floor(accuracy / 1_000_000);\n const fraction = accuracy % 1_000_000;\n const text = fraction === 0 ? `${whole}` : `${whole}.${String(fraction).padStart(6, \"0\").replace(/0+$/, \"\")}`;\n return `Digest(${inner}, ${text})`;\n}\n\nexport class DigestValue implements Value {\n readonly type: DigestType;\n readonly inner: DigestInnerType;\n readonly accuracy: number;\n readonly count: bigint;\n private readonly bytes: Uint8Array;\n\n constructor(bytes: Uint8Array) {\n const reader = new DigestReader(bytes);\n const decoded = reader.digest();\n this.bytes = new Uint8Array(bytes);\n this.type = decoded.type;\n this.inner = decoded.type.Digest.inner;\n this.accuracy = decoded.type.Digest.accuracy;\n this.count = decoded.count;\n }\n\n static parse(str: string, type: DigestType): DigestValue {\n if (!/^0x([0-9a-fA-F]{2})*$/.test(str)) {\n throw new Error(`Cannot parse \"${str}\" as ${digestTypeName(type)}`);\n }\n const bytes = new Uint8Array((str.length - 2) / 2);\n for (let i = 0; i < bytes.length; i++) {\n bytes[i] = parseInt(str.substring(2 + i * 2, 4 + i * 2), 16);\n }\n const digest = new DigestValue(bytes);\n if (digest.inner !== type.Digest.inner || digest.accuracy !== type.Digest.accuracy) {\n throw new Error(`digest is ${digestTypeName(digest.type)} but the type is ${digestTypeName(type)}`);\n }\n return digest;\n }\n\n asBytes(): Uint8Array {\n return new Uint8Array(this.bytes);\n }\n\n toString(): string {\n return `digest(n: ${this.count})`;\n }\n\n equals(other: Value): boolean {\n if (!(other instanceof DigestValue) || other.bytes.length !== this.bytes.length) {\n return false;\n }\n return this.bytes.every((byte, i) => byte === other.bytes[i]);\n }\n\n toJSON(): string {\n return hex(this.bytes);\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: hex(this.bytes)\n };\n }\n}\n\nfunction hex(bytes: Uint8Array): string {\n return \"0x\" + Array.from(bytes, byte => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nclass DigestReader {\n private position = 0;\n\n constructor(private readonly bytes: Uint8Array) {}\n\n digest(): {type: DigestType; count: bigint} {\n const version = this.varint();\n if (version !== VERSION) {\n throw new Error(`digest encoding version ${version} is unknown`);\n }\n const tag = this.varint();\n const inner = INNER_TYPES.find(name => BigInt(TYPE_CODE[name]) === tag);\n if (inner === undefined) {\n throw new Error(`digest encoding has unknown inner type tag ${tag}`);\n }\n const accuracy = this.varint();\n if (accuracy > U32_MAX) {\n throw new Error(`digest accuracy must be a whole number of ppm between ${MIN_ACCURACY} and ${MAX_ACCURACY}, got ${accuracy}`);\n }\n const type = digestType(inner, Number(accuracy));\n const zero = this.varint();\n const negativeInfinity = this.varint();\n const positiveInfinity = this.varint();\n const negative = this.store();\n const positive = this.store();\n if (this.position !== this.bytes.length) {\n throw new Error(`digest encoding has ${this.bytes.length - this.position} trailing bytes`);\n }\n if (inner === \"Duration\" && (negativeInfinity !== 0n || positiveInfinity !== 0n)) {\n throw new Error(\"digest of duration cannot hold infinity\");\n }\n const count = zero + negativeInfinity + positiveInfinity + negative + positive;\n if (count > U64_MAX) {\n throw new Error(\"digest encoding counts overflow u64\");\n }\n return {type, count};\n }\n\n private varint(): bigint {\n let value = 0n;\n let shift = 0n;\n for (;;) {\n if (this.position >= this.bytes.length) {\n throw new Error(\"digest encoding ends early\");\n }\n const byte = this.bytes[this.position];\n this.position += 1;\n const low = BigInt(byte & 0x7f);\n if (shift === 63n && low > 1n) {\n throw new Error(\"digest encoding has a varint above u64\");\n }\n value |= low << shift;\n if ((byte & 0x80) === 0) {\n if (byte === 0 && shift > 0n) {\n throw new Error(\"digest encoding has a varint that is not minimal\");\n }\n return value;\n }\n shift += 7n;\n if (shift > 63n) {\n throw new Error(\"digest encoding has a varint above u64\");\n }\n }\n }\n\n private store(): bigint {\n const len = this.varint();\n let total = 0n;\n let previous: bigint | undefined;\n for (let i = 0n; i < len; i++) {\n let index: bigint;\n if (previous === undefined) {\n const encoded = this.varint();\n if (encoded > U32_MAX) {\n throw new Error(\"digest encoding has a bucket index outside i32\");\n }\n index = (encoded >> 1n) ^ -(encoded & 1n);\n } else {\n const delta = this.varint();\n if (delta === 0n) {\n throw new Error(`digest encoding repeats bucket index ${previous}`);\n }\n index = previous + delta;\n if (index > I32_MAX) {\n throw new Error(\"digest encoding has a bucket index outside i32\");\n }\n }\n const count = this.varint();\n if (count === 0n) {\n throw new Error(`digest encoding has a zero count at bucket ${index}`);\n }\n total += count;\n previous = index;\n }\n return total;\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {DecimalType, FixedPointKind, FixedPointType, Type} from '.';\n\nexport const FIXED_POINT_MAX_PRECISION = 76;\nexport const FIXED_POINT_NARROW_PRECISION = 38;\nexport const DECIMAL_DEFAULT_SCALE = 10;\n\nfunction checkPrecision(kind: FixedPointKind, precision: number): void {\n if (!Number.isInteger(precision) || precision < 1 || precision > FIXED_POINT_MAX_PRECISION) {\n throw new Error(`${kind} precision must be a whole number between 1 and ${FIXED_POINT_MAX_PRECISION}, got ${precision}`);\n }\n}\n\nexport function decimalType(precision: number = FIXED_POINT_MAX_PRECISION, scale: number = DECIMAL_DEFAULT_SCALE): DecimalType {\n checkPrecision('Decimal', precision);\n if (!Number.isInteger(scale) || scale < 0 || scale > precision) {\n throw new Error(`Decimal scale must be a whole number between 0 and the precision ${precision}, got ${scale}`);\n }\n return {Decimal: {precision, scale}};\n}\n\nexport function fixedPointType(kind: FixedPointKind, precision: number, scale: number): FixedPointType {\n switch (kind) {\n case 'Decimal':\n return decimalType(precision, scale);\n }\n}\n\nexport function isFixedPointType(t: Type): t is FixedPointType {\n return typeof t === 'object' && t !== null && 'Decimal' in t;\n}\n\nexport function fixedPointKind(t: FixedPointType): FixedPointKind {\n return 'Decimal';\n}\n\nexport function fixedPointPrecision(t: FixedPointType): number {\n return t.Decimal.precision;\n}\n\nexport function fixedPointScale(t: FixedPointType): number {\n return 'Decimal' in t ? t.Decimal.scale : 0;\n}\n\nexport function fixedPointTypeName(t: FixedPointType): string {\n const kind = fixedPointKind(t);\n const precision = fixedPointPrecision(t);\n if (kind === 'Decimal') {\n const scale = fixedPointScale(t);\n return precision === FIXED_POINT_MAX_PRECISION && scale === DECIMAL_DEFAULT_SCALE\n ? kind\n : `${kind}(${precision}, ${scale})`;\n }\n return precision === FIXED_POINT_MAX_PRECISION ? kind : `${kind}(${precision})`;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Float4Value implements Value {\n\n private static readonly MAX_VALUE = 3.4028235e+38;\n private static readonly MIN_VALUE = -3.4028235e+38;\n private static readonly MIN_POSITIVE = 1.175494e-38;\n\n readonly type: Type = \"Float4\" as const;\n public readonly value: number;\n\n constructor(value: number) {\n if (value === undefined) {\n throw new Error(`Float4 value must be defined, a none is carried by NoneValue`);\n }\n if (typeof value !== 'number') {\n throw new Error(`Float4 value must be a number, got ${typeof value}`);\n }\n\n if (Number.isNaN(value) || !Number.isFinite(value)) {\n throw new Error(`Float4 value must be finite, got ${value}`);\n }\n\n if (value !== 0 && Math.abs(value) < Float4Value.MIN_POSITIVE) {\n this.value = 0;\n } else if (value > Float4Value.MAX_VALUE) {\n throw new Error(`Float4 overflow: value ${value} exceeds maximum ${Float4Value.MAX_VALUE}`);\n } else if (value < Float4Value.MIN_VALUE) {\n throw new Error(`Float4 underflow: value ${value} exceeds minimum ${Float4Value.MIN_VALUE}`);\n } else {\n const float32Array = new Float32Array(1);\n float32Array[0] = value;\n this.value = float32Array[0];\n }\n }\n\n static parse(str: string): Float4Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n throw new Error(`Cannot parse \"${str}\" as Float4`);\n }\n\n const num = Number(trimmed);\n\n if (Number.isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Float4`);\n }\n\n return new Float4Value(num);\n }\n\n valueOf(): number {\n return this.value;\n }\n\n toString(): string {\n return this.value.toString();\n }\n\n /**\n * Compare two Float4 values for equality with limited precision\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherFloat = other as Float4Value;\n if (this.value === undefined || otherFloat.value === undefined) {\n return this.value === otherFloat.value;\n }\n \n // For Float4, use approximate comparison due to limited precision\n const epsilon = 1e-6; // Float32 has about 7 decimal digits of precision\n return Math.abs(this.value - otherFloat.value) <= epsilon;\n }\n\n toJSON(): string {\n return this.value.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.toString()\n };\n }\n\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Float8Value implements Value {\n readonly type: Type = \"Float8\" as const;\n public readonly value: number;\n\n constructor(value: number) {\n if (value === undefined) {\n throw new Error(`Float8 value must be defined, a none is carried by NoneValue`);\n }\n if (typeof value !== 'number') {\n throw new Error(`Float8 value must be a number, got ${typeof value}`);\n }\n if (Number.isNaN(value) || !Number.isFinite(value)) {\n throw new Error(`Float8 value must be finite, got ${value}`);\n }\n this.value = value;\n }\n\n static parse(str: string): Float8Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n throw new Error(`Cannot parse \"${str}\" as Float8`);\n }\n\n const num = Number(trimmed);\n\n if (Number.isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Float8`);\n }\n\n return new Float8Value(num);\n }\n\n valueOf(): number {\n return this.value;\n }\n\n toString(): string {\n return this.value.toString();\n }\n\n /**\n * Compare two Float8 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n\n const otherFloat = other as Float8Value;\n if (this.value === undefined || otherFloat.value === undefined) {\n return this.value === otherFloat.value;\n }\n const epsilon = 1e-14;\n return Math.abs(this.value - otherFloat.value) <= epsilon;\n }\n\n toJSON(): string {\n return this.value.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.toString()\n };\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Int1Value implements Value {\n readonly type: Type = \"Int1\" as const;\n public readonly value: number;\n\n private static readonly MIN_VALUE = -128;\n private static readonly MAX_VALUE = 127;\n\n constructor(value: number) {\n if (value === undefined) {\n throw new Error(`Int1 value must be defined, a none is carried by NoneValue`);\n }\n if (!Number.isInteger(value)) {\n throw new Error(`Int1 value must be an integer, got ${value}`);\n }\n if (value < Int1Value.MIN_VALUE || value > Int1Value.MAX_VALUE) {\n throw new Error(`Int1 value must be between ${Int1Value.MIN_VALUE} and ${Int1Value.MAX_VALUE}, got ${value}`);\n }\n this.value = value;\n }\n\n static parse(str: string): Int1Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n throw new Error(`Cannot parse \"${str}\" as Int1`);\n }\n \n const num = Number(trimmed);\n \n if (isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Int1`);\n }\n \n return new Int1Value(num);\n }\n\n valueOf(): number {\n return this.value;\n }\n\n toString(): string {\n return this.value.toString();\n }\n\n /**\n * Compare two Int1 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherInt = other as Int1Value;\n return this.value === otherInt.value;\n }\n\n toJSON(): string {\n return this.value.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Int2Value implements Value {\n readonly type: Type = \"Int2\" as const;\n public readonly value: number;\n\n private static readonly MIN_VALUE = -32768;\n private static readonly MAX_VALUE = 32767;\n\n constructor(value: number) {\n if (value === undefined) {\n throw new Error(`Int2 value must be defined, a none is carried by NoneValue`);\n }\n if (!Number.isInteger(value)) {\n throw new Error(`Int2 value must be an integer, got ${value}`);\n }\n if (value < Int2Value.MIN_VALUE || value > Int2Value.MAX_VALUE) {\n throw new Error(`Int2 value must be between ${Int2Value.MIN_VALUE} and ${Int2Value.MAX_VALUE}, got ${value}`);\n }\n this.value = value;\n }\n\n static parse(str: string): Int2Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n throw new Error(`Cannot parse \"${str}\" as Int2`);\n }\n \n const num = Number(trimmed);\n \n if (isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Int2`);\n }\n \n return new Int2Value(num);\n }\n\n valueOf(): number {\n return this.value;\n }\n\n toString(): string {\n return this.value.toString();\n }\n\n /**\n * Compare two Int2 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherInt = other as Int2Value;\n return this.value === otherInt.value;\n }\n\n toJSON(): string {\n return this.value.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Int4Value implements Value {\n readonly type: Type = \"Int4\" as const;\n public readonly value: number;\n\n private static readonly MIN_VALUE = -2147483648;\n private static readonly MAX_VALUE = 2147483647;\n\n constructor(value: number) {\n if (value === undefined) {\n throw new Error(`Int4 value must be defined, a none is carried by NoneValue`);\n }\n if (!Number.isInteger(value)) {\n throw new Error(`Int4 value must be an integer, got ${value}`);\n }\n if (value < Int4Value.MIN_VALUE || value > Int4Value.MAX_VALUE) {\n throw new Error(`Int4 value must be between ${Int4Value.MIN_VALUE} and ${Int4Value.MAX_VALUE}, got ${value}`);\n }\n this.value = value;\n }\n\n static parse(str: string): Int4Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n throw new Error(`Cannot parse \"${str}\" as Int4`);\n }\n \n const num = Number(trimmed);\n \n if (isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Int4`);\n }\n \n return new Int4Value(num);\n }\n\n valueOf(): number {\n return this.value;\n }\n\n toString(): string {\n return this.value.toString();\n }\n\n /**\n * Compare two Int4 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherInt = other as Int4Value;\n return this.value === otherInt.value;\n }\n\n toJSON(): string {\n return this.value.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Int8Value implements Value {\n readonly type: Type = \"Int8\" as const;\n public readonly value: bigint;\n\n private static readonly MIN_VALUE = BigInt(\"-9223372036854775808\");\n private static readonly MAX_VALUE = BigInt(\"9223372036854775807\");\n\n constructor(value: bigint | number) {\n if (value === undefined) {\n throw new Error(`Int8 value must be defined, a none is carried by NoneValue`);\n }\n const bigintValue = typeof value === 'number' ? BigInt(Math.trunc(value)) : value;\n \n if (bigintValue < Int8Value.MIN_VALUE || bigintValue > Int8Value.MAX_VALUE) {\n throw new Error(`Int8 value must be between ${Int8Value.MIN_VALUE} and ${Int8Value.MAX_VALUE}, got ${bigintValue}`);\n }\n this.value = bigintValue;\n }\n\n static parse(str: string): Int8Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n throw new Error(`Cannot parse \"${str}\" as Int8`);\n }\n \n let value: bigint;\n try {\n value = BigInt(trimmed);\n } catch (e) {\n throw new Error(`Cannot parse \"${str}\" as Int8`);\n }\n \n if (value < Int8Value.MIN_VALUE || value > Int8Value.MAX_VALUE) {\n throw new Error(`Int8 value must be between ${Int8Value.MIN_VALUE} and ${Int8Value.MAX_VALUE}, got ${value}`);\n }\n \n return new Int8Value(value);\n }\n\n valueOf(): bigint {\n return this.value;\n }\n\n toString(): string {\n return this.value.toString();\n }\n\n /**\n * Compare two Int8 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherInt = other as Int8Value;\n return this.value === otherInt.value;\n }\n\n toJSON(): string {\n return this.value.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Int16Value implements Value {\n readonly type: Type = \"Int16\" as const;\n public readonly value: bigint;\n\n private static readonly MIN_VALUE = BigInt(\"-170141183460469231731687303715884105728\");\n private static readonly MAX_VALUE = BigInt(\"170141183460469231731687303715884105727\");\n\n constructor(value: bigint | number | string) {\n if (value === undefined) {\n throw new Error(`Int16 value must be defined, a none is carried by NoneValue`);\n }\n let bigintValue: bigint;\n \n if (typeof value === 'string') {\n try {\n bigintValue = BigInt(value);\n } catch (e) {\n throw new Error(`Int16 value must be a valid integer, got ${value}`);\n }\n } else if (typeof value === 'number') {\n bigintValue = BigInt(Math.trunc(value));\n } else {\n bigintValue = value;\n }\n \n if (bigintValue < Int16Value.MIN_VALUE || bigintValue > Int16Value.MAX_VALUE) {\n throw new Error(`Int16 value must be between ${Int16Value.MIN_VALUE} and ${Int16Value.MAX_VALUE}, got ${bigintValue}`);\n }\n this.value = bigintValue;\n }\n\n static parse(str: string): Int16Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n throw new Error(`Cannot parse \"${str}\" as Int16`);\n }\n \n let value: bigint;\n try {\n value = BigInt(trimmed);\n } catch (e) {\n throw new Error(`Cannot parse \"${str}\" as Int16`);\n }\n \n if (value < Int16Value.MIN_VALUE || value > Int16Value.MAX_VALUE) {\n throw new Error(`Int16 value must be between ${Int16Value.MIN_VALUE} and ${Int16Value.MAX_VALUE}, got ${value}`);\n }\n \n return new Int16Value(value);\n }\n\n valueOf(): bigint {\n return this.value;\n }\n\n toString(): string {\n return this.value.toString();\n }\n\n /**\n * Compare two Int16 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherInt = other as Int16Value;\n return this.value === otherInt.value;\n }\n\n toJSON(): string {\n return this.value.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport { Type, Value, TypeValuePair } from \".\";\nimport { NONE_VALUE } from \"../constant\";\n\n/**\n * A duration value representing a time span or elapsed time.\n * Internally stored as months, days, and nanoseconds.\n */\nexport class DurationValue implements Value {\n readonly type: Type = \"Duration\" as const;\n private readonly months: number; // years*12 + months\n private readonly days: number; // separate days (don't normalize due to variable month length)\n private readonly nanos: bigint; // all time components as nanoseconds\n\n constructor(value: { months: number; days: number; nanos: bigint } | string) {\n if (value === undefined) {\n throw new Error(`Duration value must be defined, a none is carried by NoneValue`);\n }\n if (typeof value === 'string') {\n // Parse ISO 8601 duration format\n const parsed = DurationValue.parseDuration(value);\n if (!parsed) {\n throw new Error(`Invalid duration string: ${value}`);\n }\n this.months = parsed.months;\n this.days = parsed.days;\n this.nanos = parsed.nanos;\n } else if (typeof value === 'object' && value !== null) {\n this.months = value.months;\n this.days = value.days;\n this.nanos = value.nanos;\n } else {\n throw new Error(`Duration value must be an object or string, got ${typeof value}`);\n }\n }\n\n /**\n * Create a new duration from months, days, and nanoseconds\n */\n static new(months: number, days: number, nanos: bigint): DurationValue {\n return new DurationValue({ months, days, nanos });\n }\n\n /**\n * Create a duration from seconds\n */\n static fromSeconds(seconds: number): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: BigInt(seconds) * 1_000_000_000n });\n }\n\n /**\n * Create a duration from milliseconds\n */\n static fromMilliseconds(milliseconds: number): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: BigInt(milliseconds) * 1_000_000n });\n }\n\n /**\n * Create a duration from microseconds\n */\n static fromMicroseconds(microseconds: number): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: BigInt(microseconds) * 1_000n });\n }\n\n /**\n * Create a duration from nanoseconds\n */\n static fromNanoseconds(nanoseconds: bigint): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: nanoseconds });\n }\n\n /**\n * Create a duration from minutes\n */\n static fromMinutes(minutes: number): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: BigInt(minutes) * 60n * 1_000_000_000n });\n }\n\n /**\n * Create a duration from hours\n */\n static fromHours(hours: number): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: BigInt(hours) * 60n * 60n * 1_000_000_000n });\n }\n\n /**\n * Create a duration from days\n */\n static fromDays(days: number): DurationValue {\n return new DurationValue({ months: 0, days, nanos: 0n });\n }\n\n /**\n * Create a duration from weeks\n */\n static fromWeeks(weeks: number): DurationValue {\n return new DurationValue({ months: 0, days: weeks * 7, nanos: 0n });\n }\n\n /**\n * Create a duration from months\n */\n static fromMonths(months: number): DurationValue {\n return new DurationValue({ months, days: 0, nanos: 0n });\n }\n\n /**\n * Create a duration from years\n */\n static fromYears(years: number): DurationValue {\n return new DurationValue({ months: years * 12, days: 0, nanos: 0n });\n }\n\n /**\n * Create a zero duration\n */\n static zero(): DurationValue {\n return new DurationValue({ months: 0, days: 0, nanos: 0n });\n }\n\n /**\n * Get default duration (zero)\n */\n static default(): DurationValue {\n return DurationValue.zero();\n }\n\n /**\n * Parse a duration string in ISO 8601 duration format\n */\n static parse(str: string): DurationValue {\n const trimmed = str.trim();\n \n if (trimmed === '' || trimmed === NONE_VALUE) {\n throw new Error(`Cannot parse \"${str}\" as Duration`);\n }\n\n const parsed = DurationValue.parseDuration(trimmed);\n if (!parsed) {\n throw new Error(`Cannot parse \"${str}\" as Duration`);\n }\n\n return new DurationValue({ months: parsed.months, days: parsed.days, nanos: parsed.nanos });\n }\n\n /**\n * Get total seconds (truncated)\n */\n seconds(): bigint | undefined {\n if (this.nanos === undefined) return undefined;\n return this.nanos / 1_000_000_000n;\n }\n\n /**\n * Get total milliseconds (truncated)\n */\n milliseconds(): bigint | undefined {\n if (this.nanos === undefined) return undefined;\n return this.nanos / 1_000_000n;\n }\n\n /**\n * Get total microseconds (truncated)\n */\n microseconds(): bigint | undefined {\n if (this.nanos === undefined) return undefined;\n return this.nanos / 1_000n;\n }\n\n /**\n * Get total nanoseconds\n */\n nanoseconds(): bigint | undefined {\n return this.nanos;\n }\n\n /**\n * Get months component\n */\n getMonths(): number | undefined {\n return this.months;\n }\n\n /**\n * Get days component\n */\n getDays(): number | undefined {\n return this.days;\n }\n\n /**\n * Get nanoseconds component\n */\n getNanos(): bigint | undefined {\n return this.nanos;\n }\n\n /**\n * Check if duration is positive (any component > 0)\n */\n isPositive(): boolean {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return false;\n }\n return this.months > 0 || this.days > 0 || this.nanos > 0n;\n }\n\n /**\n * Check if duration is negative (any component < 0)\n */\n isNegative(): boolean {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return false;\n }\n return this.months < 0 || this.days < 0 || this.nanos < 0n;\n }\n\n /**\n * Get absolute value of duration\n */\n abs(): DurationValue {\n return new DurationValue({\n months: Math.abs(this.months),\n days: Math.abs(this.days),\n nanos: this.nanos < 0n ? -this.nanos : this.nanos\n });\n }\n\n /**\n * Negate the duration\n */\n negate(): DurationValue {\n return new DurationValue({\n months: -this.months,\n days: -this.days,\n nanos: -this.nanos\n });\n }\n\n /**\n * Format as ISO 8601 duration string\n */\n toIsoString(): string {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return 'none';\n }\n\n // Handle zero duration\n if (this.months === 0 && this.days === 0 && this.nanos === 0n) {\n return 'PT0S';\n }\n\n let result = 'P';\n\n // Extract years and months\n const years = Math.floor(this.months / 12);\n const months = this.months % 12;\n\n if (years !== 0) {\n result += `${years}Y`;\n }\n\n if (months !== 0) {\n result += `${months}M`;\n }\n\n // Time components from nanos with normalization\n const totalSeconds = this.nanos / 1_000_000_000n;\n const remainingNanos = this.nanos % 1_000_000_000n;\n\n // Normalize to days if hours >= 24\n const extraDays = totalSeconds / 86400n; // 24 * 60 * 60\n const remainingSeconds = totalSeconds % 86400n;\n\n const displayDays = this.days + Number(extraDays);\n const hours = remainingSeconds / 3600n;\n const minutes = (remainingSeconds % 3600n) / 60n;\n const seconds = remainingSeconds % 60n;\n\n if (displayDays !== 0) {\n result += `${displayDays}D`;\n }\n\n // Add time components if any\n if (hours !== 0n || minutes !== 0n || seconds !== 0n || remainingNanos !== 0n) {\n result += 'T';\n\n if (hours !== 0n) {\n result += `${hours}H`;\n }\n\n if (minutes !== 0n) {\n result += `${minutes}M`;\n }\n\n if (seconds !== 0n || remainingNanos !== 0n) {\n if (remainingNanos !== 0n) {\n // Format fractional seconds with trailing zeros removed\n const fractional = Number(remainingNanos) / 1_000_000_000;\n const totalSecondsFloat = Number(seconds) + fractional;\n // Format with 9 decimal places then remove trailing zeros\n const formatted = totalSecondsFloat.toFixed(9).replace(/0+$/, '').replace(/\\.$/, '');\n result += `${formatted}S`;\n } else {\n result += `${seconds}S`;\n }\n }\n }\n\n return result;\n }\n\n /**\n * Format as compact human-readable duration string\n * Examples: \"1y2mo3d4h5m6s\", \"1d2h\", \"30s\", \"500ms\", \"0s\"\n */\n toString(): string {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return 'none';\n }\n\n if (this.months === 0 && this.days === 0 && this.nanos === 0n) {\n return '0s';\n }\n\n let result = '';\n\n const years = Math.floor(this.months / 12);\n const months = this.months % 12;\n\n const totalSeconds = this.nanos / 1_000_000_000n;\n const remainingNanos = this.nanos % 1_000_000_000n;\n\n const extraDays = totalSeconds / 86400n;\n const remainingSeconds = totalSeconds % 86400n;\n\n const displayDays = this.days + Number(extraDays);\n const hours = remainingSeconds / 3600n;\n const minutes = (remainingSeconds % 3600n) / 60n;\n const seconds = remainingSeconds % 60n;\n\n const absRemaining = remainingNanos < 0n ? -remainingNanos : remainingNanos;\n const ms = absRemaining / 1_000_000n;\n const us = (absRemaining % 1_000_000n) / 1_000n;\n const ns = absRemaining % 1_000n;\n\n if (years !== 0) result += `${years}y`;\n if (months !== 0) result += `${months}mo`;\n if (displayDays !== 0) result += `${displayDays}d`;\n if (hours !== 0n) result += `${hours}h`;\n if (minutes !== 0n) result += `${minutes}m`;\n if (seconds !== 0n) result += `${seconds}s`;\n\n if (ms !== 0n || us !== 0n || ns !== 0n) {\n if (remainingNanos < 0n && seconds === 0n && hours === 0n && minutes === 0n\n && displayDays === 0 && years === 0 && months === 0) {\n result += '-';\n }\n if (ms !== 0n) result += `${ms}ms`;\n if (us !== 0n) result += `${us}us`;\n if (ns !== 0n) result += `${ns}ns`;\n }\n\n return result;\n }\n\n valueOf(): { months: number; days: number; nanos: bigint } | undefined {\n if (this.months === undefined || this.days === undefined || this.nanos === undefined) {\n return undefined;\n }\n return { months: this.months, days: this.days, nanos: this.nanos };\n }\n\n /**\n * Get the internal representation\n */\n get value(): { months: number; days: number; nanos: bigint } | undefined {\n return this.valueOf();\n }\n\n /**\n * Helper to parse duration format (human-readable or ISO 8601)\n */\n private static parseDuration(str: string): { months: number; days: number; nanos: bigint } | null {\n const negative = str.startsWith('-');\n const cleanStr = negative ? str.substring(1) : str;\n\n // Try ISO 8601 format first (starts with P)\n if (cleanStr.startsWith('P')) {\n return DurationValue.parseIsoDuration(cleanStr, negative);\n }\n\n // Try human-readable format: 1y2mo3d4h5m6s500ms100us50ns\n return DurationValue.parseHumanDuration(cleanStr, negative);\n }\n\n /**\n * Parse ISO 8601 duration format: P[n]Y[n]M[n]DT[n]H[n]M[n.n]S\n */\n private static parseIsoDuration(str: string, negative: boolean): { months: number; days: number; nanos: bigint } | null {\n const match = str.match(/^P(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)D)?(?:T(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+(?:\\.\\d+)?)S)?)?$/);\n if (!match) {\n return null;\n }\n\n // Check if the match has at least one value\n if (!match[1] && !match[2] && !match[3] && !match[4] && !match[5] && !match[6]) {\n return null; // Invalid: P without any values\n }\n\n const years = parseInt(match[1] || '0', 10);\n const months = parseInt(match[2] || '0', 10);\n const days = parseInt(match[3] || '0', 10);\n const hours = parseInt(match[4] || '0', 10);\n const minutes = parseInt(match[5] || '0', 10);\n const secondsStr = match[6] || '0';\n\n // Parse seconds and fractional seconds\n const secondsParts = secondsStr.split('.');\n const wholeSeconds = parseInt(secondsParts[0] || '0', 10);\n let fracNanos = 0n;\n if (secondsParts.length > 1) {\n // Pad fractional part to 9 digits\n const fracStr = secondsParts[1].padEnd(9, '0').substring(0, 9);\n fracNanos = BigInt(fracStr);\n }\n\n // Calculate total nanoseconds\n const totalNanos = BigInt(hours) * 3600n * 1_000_000_000n +\n BigInt(minutes) * 60n * 1_000_000_000n +\n BigInt(wholeSeconds) * 1_000_000_000n +\n fracNanos;\n\n const totalMonths = years * 12 + months;\n\n if (negative) {\n return { months: -totalMonths, days: -days, nanos: -totalNanos };\n }\n return { months: totalMonths, days: days, nanos: totalNanos };\n }\n\n /**\n * Parse human-readable duration format: 1y2mo3d4h5m6s500ms100us50ns\n */\n private static parseHumanDuration(str: string, negative: boolean): { months: number; days: number; nanos: bigint } | null {\n // Match components: years, months, days, hours, minutes, seconds, ms, us, ns\n // Order matters: 'mo' before 'm', 'ms' before 'm', 'us' before 'u', 'ns' before 'n'\n const pattern = /^(?:(\\d+)y)?(?:(\\d+)mo)?(?:(\\d+)d)?(?:(\\d+)h)?(?:(\\d+)m(?!s|o))?(?:(\\d+)s(?!$)?)?(?:(\\d+)ms)?(?:(\\d+)us)?(?:(\\d+)ns)?$/;\n const match = str.match(pattern);\n if (!match) {\n return null;\n }\n\n // Check if the match has at least one value\n if (!match[1] && !match[2] && !match[3] && !match[4] && !match[5] && !match[6] && !match[7] && !match[8] && !match[9]) {\n return null;\n }\n\n const years = parseInt(match[1] || '0', 10);\n const months = parseInt(match[2] || '0', 10);\n const days = parseInt(match[3] || '0', 10);\n const hours = parseInt(match[4] || '0', 10);\n const minutes = parseInt(match[5] || '0', 10);\n const seconds = parseInt(match[6] || '0', 10);\n const ms = parseInt(match[7] || '0', 10);\n const us = parseInt(match[8] || '0', 10);\n const ns = parseInt(match[9] || '0', 10);\n\n const totalNanos = BigInt(hours) * 3600n * 1_000_000_000n +\n BigInt(minutes) * 60n * 1_000_000_000n +\n BigInt(seconds) * 1_000_000_000n +\n BigInt(ms) * 1_000_000n +\n BigInt(us) * 1_000n +\n BigInt(ns);\n\n const totalMonths = years * 12 + months;\n\n if (negative) {\n return { months: -totalMonths, days: -days, nanos: -totalNanos };\n }\n return { months: totalMonths, days: days, nanos: totalNanos };\n }\n\n /**\n * Compare two durations for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherDuration = other as DurationValue;\n if (this.months === undefined || otherDuration.months === undefined) {\n return this.months === otherDuration.months && \n this.days === otherDuration.days && \n this.nanos === otherDuration.nanos;\n }\n \n return this.months === otherDuration.months && \n this.days === otherDuration.days && \n this.nanos === otherDuration.nanos;\n }\n\n toJSON(): string {\n return this.toIsoString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.value === undefined ? NONE_VALUE : this.toIsoString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Uint1Value implements Value {\n readonly type: Type = \"Uint1\" as const;\n public readonly value: number;\n\n private static readonly MIN_VALUE = 0;\n private static readonly MAX_VALUE = 255;\n\n constructor(value: number) {\n if (value === undefined) {\n throw new Error(`Uint1 value must be defined, a none is carried by NoneValue`);\n }\n if (!Number.isInteger(value)) {\n throw new Error(`Uint1 value must be an integer, got ${value}`);\n }\n if (value < Uint1Value.MIN_VALUE || value > Uint1Value.MAX_VALUE) {\n throw new Error(`Uint1 value must be between ${Uint1Value.MIN_VALUE} and ${Uint1Value.MAX_VALUE}, got ${value}`);\n }\n this.value = value;\n }\n\n static parse(str: string): Uint1Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n throw new Error(`Cannot parse \"${str}\" as Uint1`);\n }\n \n const num = Number(trimmed);\n \n if (isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Uint1`);\n }\n \n return new Uint1Value(num);\n }\n\n valueOf(): number {\n return this.value;\n }\n\n toString(): string {\n return this.value.toString();\n }\n\n /**\n * Compare two Uint1 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUint = other as Uint1Value;\n return this.value === otherUint.value;\n }\n\n toJSON(): string {\n return this.value.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Uint2Value implements Value {\n readonly type: Type = \"Uint2\" as const;\n public readonly value: number;\n\n private static readonly MIN_VALUE = 0;\n private static readonly MAX_VALUE = 65535;\n\n constructor(value: number) {\n if (value === undefined) {\n throw new Error(`Uint2 value must be defined, a none is carried by NoneValue`);\n }\n if (!Number.isInteger(value)) {\n throw new Error(`Uint2 value must be an integer, got ${value}`);\n }\n if (value < Uint2Value.MIN_VALUE || value > Uint2Value.MAX_VALUE) {\n throw new Error(`Uint2 value must be between ${Uint2Value.MIN_VALUE} and ${Uint2Value.MAX_VALUE}, got ${value}`);\n }\n this.value = value;\n }\n\n static parse(str: string): Uint2Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n throw new Error(`Cannot parse \"${str}\" as Uint2`);\n }\n \n const num = Number(trimmed);\n \n if (isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Uint2`);\n }\n \n return new Uint2Value(num);\n }\n\n valueOf(): number {\n return this.value;\n }\n\n toString(): string {\n return this.value.toString();\n }\n\n /**\n * Compare two Uint2 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUint = other as Uint2Value;\n return this.value === otherUint.value;\n }\n\n toJSON(): string {\n return this.value.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Uint4Value implements Value {\n readonly type: Type = \"Uint4\" as const;\n public readonly value: number;\n\n private static readonly MIN_VALUE = 0;\n private static readonly MAX_VALUE = 4294967295;\n\n constructor(value: number) {\n if (value === undefined) {\n throw new Error(`Uint4 value must be defined, a none is carried by NoneValue`);\n }\n if (!Number.isInteger(value)) {\n throw new Error(`Uint4 value must be an integer, got ${value}`);\n }\n if (value < Uint4Value.MIN_VALUE || value > Uint4Value.MAX_VALUE) {\n throw new Error(`Uint4 value must be between ${Uint4Value.MIN_VALUE} and ${Uint4Value.MAX_VALUE}, got ${value}`);\n }\n this.value = value;\n }\n\n static parse(str: string): Uint4Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n throw new Error(`Cannot parse \"${str}\" as Uint4`);\n }\n \n const num = Number(trimmed);\n \n if (isNaN(num)) {\n throw new Error(`Cannot parse \"${str}\" as Uint4`);\n }\n \n return new Uint4Value(num);\n }\n\n valueOf(): number {\n return this.value;\n }\n\n toString(): string {\n return this.value.toString();\n }\n\n /**\n * Compare two Uint4 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUint = other as Uint4Value;\n return this.value === otherUint.value;\n }\n\n toJSON(): string {\n return this.value.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Uint8Value implements Value {\n readonly type: Type = \"Uint8\" as const;\n public readonly value: bigint;\n\n private static readonly MIN_VALUE = BigInt(0);\n private static readonly MAX_VALUE = BigInt(\"18446744073709551615\");\n\n constructor(value: bigint | number) {\n if (value === undefined) {\n throw new Error(`Uint8 value must be defined, a none is carried by NoneValue`);\n }\n const bigintValue = typeof value === 'number' ? BigInt(Math.trunc(value)) : value;\n \n if (bigintValue < Uint8Value.MIN_VALUE || bigintValue > Uint8Value.MAX_VALUE) {\n throw new Error(`Uint8 value must be between ${Uint8Value.MIN_VALUE} and ${Uint8Value.MAX_VALUE}, got ${bigintValue}`);\n }\n this.value = bigintValue;\n }\n\n static parse(str: string): Uint8Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n throw new Error(`Cannot parse \"${str}\" as Uint8`);\n }\n \n let value: bigint;\n try {\n value = BigInt(trimmed);\n } catch (e) {\n throw new Error(`Cannot parse \"${str}\" as Uint8`);\n }\n \n if (value < Uint8Value.MIN_VALUE || value > Uint8Value.MAX_VALUE) {\n throw new Error(`Uint8 value must be between ${Uint8Value.MIN_VALUE} and ${Uint8Value.MAX_VALUE}, got ${value}`);\n }\n \n return new Uint8Value(value);\n }\n\n valueOf(): bigint {\n return this.value;\n }\n\n toNumber(): number | undefined {\n if (this.value === undefined) return undefined;\n return Number(this.value);\n }\n\n toString(): string {\n return this.value.toString();\n }\n\n /**\n * Compare two Uint8 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUint = other as Uint8Value;\n return this.value === otherUint.value;\n }\n\n toJSON(): string {\n return this.value.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Uint16Value implements Value {\n readonly type: Type = \"Uint16\" as const;\n public readonly value: bigint;\n\n private static readonly MIN_VALUE = BigInt(0);\n private static readonly MAX_VALUE = BigInt(\"340282366920938463463374607431768211455\");\n\n constructor(value: bigint | number | string) {\n if (value === undefined) {\n throw new Error(`Uint16 value must be defined, a none is carried by NoneValue`);\n }\n let bigintValue: bigint;\n \n if (typeof value === 'string') {\n try {\n bigintValue = BigInt(value);\n } catch (e) {\n throw new Error(`Uint16 value must be a valid integer, got ${value}`);\n }\n } else if (typeof value === 'number') {\n bigintValue = BigInt(Math.trunc(value));\n } else {\n bigintValue = value;\n }\n \n if (bigintValue < Uint16Value.MIN_VALUE || bigintValue > Uint16Value.MAX_VALUE) {\n throw new Error(`Uint16 value must be between ${Uint16Value.MIN_VALUE} and ${Uint16Value.MAX_VALUE}, got ${bigintValue}`);\n }\n this.value = bigintValue;\n }\n\n static parse(str: string): Uint16Value {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE) {\n throw new Error(`Cannot parse \"${str}\" as Uint16`);\n }\n \n let value: bigint;\n try {\n value = BigInt(trimmed);\n } catch (e) {\n throw new Error(`Cannot parse \"${str}\" as Uint16`);\n }\n \n if (value < Uint16Value.MIN_VALUE || value > Uint16Value.MAX_VALUE) {\n throw new Error(`Uint16 value must be between ${Uint16Value.MIN_VALUE} and ${Uint16Value.MAX_VALUE}, got ${value}`);\n }\n \n return new Uint16Value(value);\n }\n\n valueOf(): bigint {\n return this.value;\n }\n\n toString(): string {\n return this.value.toString();\n }\n\n /**\n * Compare two Uint16 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUint = other as Uint16Value;\n return this.value === otherUint.value;\n }\n\n toJSON(): string {\n return this.value.toString();\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair, optionDepth} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class NoneValue implements Value {\n readonly type: Type = \"None\" as const;\n public readonly innerType: Type;\n\n constructor(innerType?: Type) {\n this.innerType = innerType ?? \"None\";\n }\n\n static parse(str: string, innerType?: Type): NoneValue {\n const trimmed = str.trim();\n if (trimmed === '' || trimmed === NONE_VALUE || trimmed === 'none') {\n return new NoneValue(innerType);\n }\n throw new Error(`Cannot parse \"${str}\" as None`);\n }\n\n isNone(): boolean {\n return true;\n }\n\n toString(): string {\n return 'none';\n }\n\n valueOf(): undefined {\n return undefined;\n }\n\n get value(): undefined {\n return undefined;\n }\n\n equals(other: Value): boolean {\n if (!(other instanceof NoneValue)) {\n return false;\n }\n return true;\n }\n\n compare(other: NoneValue): number {\n return 0;\n }\n\n toJSON(): null {\n return null;\n }\n\n encode(): TypeValuePair {\n return {\n type: {Option: this.innerType},\n value: NONE_VALUE\n };\n }\n}\n\nexport function noneDepth(v: NoneValue): number {\n return optionDepth(v.innerType) + 1;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\n\nexport interface MissingPresentation {\n text: string;\n italic: boolean;\n muted: boolean;\n}\n\nexport const NONE_PRESENTATION: MissingPresentation = {\n text: 'none',\n italic: true,\n muted: true,\n};\n\nexport type ValueRole =\n | 'none'\n | 'boolean'\n | 'number'\n | 'temporal'\n | 'uuid'\n | 'string'\n | 'blob'\n | 'unknown';\n\nconst ROLE_BY_TYPE: Record<string, ValueRole> = {\n None: 'none',\n Boolean: 'boolean',\n Int1: 'number',\n Int2: 'number',\n Int4: 'number',\n Int8: 'number',\n Int16: 'number',\n Uint1: 'number',\n Uint2: 'number',\n Uint4: 'number',\n Uint8: 'number',\n Uint16: 'number',\n Float4: 'number',\n Float8: 'number',\n Decimal: 'number',\n Date: 'temporal',\n DateTime: 'temporal',\n Time: 'temporal',\n Duration: 'temporal',\n Uuid4: 'uuid',\n Uuid7: 'uuid',\n IdentityId: 'uuid',\n Utf8: 'string',\n Blob: 'blob',\n};\n\nfunction typeName(value: unknown): string | undefined {\n if (value === null || typeof value !== 'object') return undefined;\n const candidate = (value as {type?: unknown}).type;\n return typeof candidate === 'string' ? candidate : undefined;\n}\n\nexport function valueTypeName(value: unknown): string | undefined {\n if (value === null || value === undefined) return 'None';\n return typeName(value);\n}\n\nexport function valueRole(value: unknown): ValueRole {\n if (value === null || value === undefined) return 'none';\n\n const name = typeName(value);\n if (name !== undefined) {\n return ROLE_BY_TYPE[name] ?? 'unknown';\n }\n\n switch (typeof value) {\n case 'number':\n case 'bigint':\n return 'number';\n case 'boolean':\n return 'boolean';\n case 'string':\n return 'string';\n default:\n return 'unknown';\n }\n}\n\nexport function formatValue(value: unknown): string {\n if (value === null || value === undefined) return NONE_PRESENTATION.text;\n if (typeof value === 'bigint') return value.toString();\n\n if (typeof value === 'object') {\n const name = typeName(value);\n if (name === 'None') return NONE_PRESENTATION.text;\n if (name !== undefined) return String(value);\n return JSON.stringify(value) ?? String(value);\n }\n\n return String(value);\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {OptionType, Type, digestTypeName, fixedPointTypeName, isDigestType, isFixedPointType, isListType, isOptionType, isRecordType} from '.';\nimport {NONE_PRESENTATION} from '../present/value';\n\ntype State<T> = {some: true; value: T} | {some: false; inner: Type};\n\nfunction describeType(t: Type): string {\n if (isDigestType(t)) {\n return digestTypeName(t);\n }\n if (isFixedPointType(t)) {\n return fixedPointTypeName(t);\n }\n if (isOptionType(t)) {\n return `Option(${describeType(t.Option)})`;\n }\n if (isListType(t)) {\n return `List(${describeType(t.List)})`;\n }\n if (isRecordType(t)) {\n return `Record(${t.Record.map(field => `${field.name}: ${describeType(field.type)}`).join(', ')})`;\n }\n return t;\n}\n\nfunction hasType(value: unknown): value is {type: Type} {\n return typeof value === 'object' && value !== null && 'type' in value;\n}\n\nfunction hasToJSON(value: unknown): value is {toJSON(): unknown} {\n return typeof value === 'object' && value !== null && 'toJSON' in value && typeof value.toJSON === 'function';\n}\n\n// a Symbol.for brand survives a second copy of this module, where instanceof would not\nconst OPTION_BRAND = Symbol.for('reifydb.option');\n\nexport function isOption(value: unknown): value is Option<unknown> {\n return typeof value === 'object' && value !== null && (value as Record<symbol, unknown>)[OPTION_BRAND] === true;\n}\n\nexport class Option<T> {\n readonly [OPTION_BRAND] = true;\n\n private constructor(private readonly state: State<T>) {}\n\n static some<T>(value: T): Option<T> {\n return new Option<T>({some: true, value});\n }\n\n static none<T = never>(inner: Type): Option<T> {\n return new Option<T>({some: false, inner});\n }\n\n isSome(): boolean {\n return this.state.some;\n }\n\n isNone(): boolean {\n return !this.state.some;\n }\n\n unwrap(): T {\n if (this.state.some) {\n return this.state.value;\n }\n throw new Error(`unwrap on a None of type ${describeType(this.state.inner)}`);\n }\n\n unwrapOr(fallback: T): T {\n return this.state.some ? this.state.value : fallback;\n }\n\n map<U>(fn: (value: T) => U): Option<U> {\n // a None carries no U, so the missing type stays the one it was created with\n return this.state.some ? Option.some(fn(this.state.value)) : Option.none<U>(this.state.inner);\n }\n\n get type(): OptionType {\n if (!this.state.some) {\n return {Option: this.state.inner};\n }\n if (hasType(this.state.value)) {\n return {Option: this.state.value.type};\n }\n throw new Error(`Option.some over a raw ${typeof this.state.value} has no wire type`);\n }\n\n toString(): string {\n return this.state.some ? String(this.state.value) : NONE_PRESENTATION.text;\n }\n\n toJSON(): unknown {\n if (!this.state.some) {\n return null;\n }\n // JSON.stringify serializes what toJSON returns as is, so nested toJSON must be applied here\n return hasToJSON(this.state.value) ? this.state.value.toJSON() : this.state.value;\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, Value, TypeValuePair} from \".\";\nimport {NONE_VALUE} from \"../constant\";\n\nexport class Utf8Value implements Value {\n readonly type: Type = \"Utf8\" as const;\n public readonly value: string;\n\n constructor(value: string) {\n if (value === undefined) {\n throw new Error(`Utf8 value must be defined, a none is carried by NoneValue`);\n }\n if (typeof value !== 'string') {\n throw new Error(`Utf8 value must be a string, got ${typeof value}`);\n }\n this.value = value;\n }\n\n static parse(str: string): Utf8Value {\n if (str === NONE_VALUE) {\n throw new Error(`Cannot parse \"${str}\" as Utf8`);\n }\n \n return new Utf8Value(str);\n }\n\n valueOf(): string {\n return this.value;\n }\n\n toString(): string {\n return this.value;\n }\n\n /**\n * Compare two Utf8 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUtf8 = other as Utf8Value;\n return this.value === otherUtf8.value;\n }\n\n toJSON(): string {\n return this.value ?? null;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport { v4 as uuidv4, NIL as NIL_UUID, validate, version } from 'uuid';\nimport { Type, Value, TypeValuePair } from \".\";\nimport { NONE_VALUE } from \"../constant\";\n\n/**\n * A UUID version 4 (random) value type\n */\nexport class Uuid4Value implements Value {\n readonly type: Type = \"Uuid4\" as const;\n private readonly uuid: string;\n\n constructor(value: string) {\n if (value === undefined) {\n throw new Error(`Uuid4 value must be defined, a none is carried by NoneValue`);\n }\n if (typeof value !== 'string') {\n throw new Error(`Uuid4 value must be a string, got ${typeof value}`);\n }\n \n // Validate UUID format\n if (!validate(value)) {\n throw new Error(`Invalid UUID format: ${value}`);\n }\n \n // Check version (allow v4 or nil UUID)\n const ver = version(value);\n if (value !== NIL_UUID && ver !== 4) {\n throw new Error(`Invalid UUID version for Uuid4: expected v4, got v${ver}`);\n }\n \n this.uuid = value.toLowerCase();\n }\n\n /**\n * Generate a new random UUID v4\n */\n static generate(): Uuid4Value {\n return new Uuid4Value(uuidv4());\n }\n\n /**\n * Create a new Uuid4Value from a string\n */\n static new(uuid: string): Uuid4Value {\n return new Uuid4Value(uuid);\n }\n\n /**\n * Get the nil UUID (all zeros)\n */\n static nil(): Uuid4Value {\n return new Uuid4Value(NIL_UUID);\n }\n\n /**\n * Get default Uuid4Value (nil UUID)\n */\n static default(): Uuid4Value {\n return Uuid4Value.nil();\n }\n\n /**\n * Parse a UUID string\n */\n static parse(str: string): Uuid4Value {\n const trimmed = str.trim();\n \n if (trimmed === '' || trimmed === NONE_VALUE) {\n throw new Error(`Cannot parse \"${str}\" as Uuid4`);\n }\n\n // Try to parse as UUID\n if (!validate(trimmed)) {\n throw new Error(`Cannot parse \"${str}\" as Uuid4`);\n }\n\n const ver = version(trimmed);\n if (trimmed !== NIL_UUID && ver !== 4) {\n throw new Error(`Cannot parse \"${str}\" as Uuid4: wrong version (v${ver})`);\n }\n\n return new Uuid4Value(trimmed);\n }\n\n /**\n * Get the UUID string\n */\n asString(): string | undefined {\n return this.uuid;\n }\n\n /**\n * Get the UUID as bytes (16-byte array)\n */\n asBytes(): Uint8Array | undefined {\n if (this.uuid === undefined) return undefined;\n \n // Remove hyphens and convert hex to bytes\n const hex = this.uuid.replace(/-/g, '');\n const bytes = new Uint8Array(16);\n for (let i = 0; i < 16; i++) {\n bytes[i] = parseInt(hex.substring(i * 2, i * 2 + 2), 16);\n }\n return bytes;\n }\n\n /**\n * Check if this is the nil UUID\n */\n isNil(): boolean {\n return this.uuid === NIL_UUID;\n }\n\n /**\n * Get the UUID version\n */\n getVersion(): number | undefined {\n if (this.uuid === undefined) return undefined;\n return version(this.uuid);\n }\n\n /**\n * Format as string\n */\n toString(): string {\n if (this.uuid === undefined) {\n return 'none';\n }\n return this.uuid;\n }\n\n valueOf(): string {\n return this.uuid;\n }\n\n /**\n * Get the internal representation\n */\n get value(): string | undefined {\n return this.valueOf();\n }\n\n /**\n * Compare two UUID4 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUuid = other as Uuid4Value;\n return this.uuid === otherUuid.uuid;\n }\n\n /**\n * Compare two UUID4 values (for ordering)\n */\n compare(other: Uuid4Value): number {\n if (this.uuid === undefined || other.uuid === undefined) {\n if (this.uuid === other.uuid) return 0;\n if (this.uuid === undefined) return -1;\n return 1;\n }\n \n // Compare as bytes for consistent ordering\n const thisBytes = this.asBytes()!;\n const otherBytes = other.asBytes()!;\n \n for (let i = 0; i < 16; i++) {\n if (thisBytes[i] < otherBytes[i]) return -1;\n if (thisBytes[i] > otherBytes[i]) return 1;\n }\n \n return 0;\n }\n\n toJSON(): string {\n return this.uuid ?? null;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport { v7 as uuidv7, NIL as NIL_UUID, validate, version } from 'uuid';\nimport { Type, Value, TypeValuePair } from \".\";\nimport { NONE_VALUE } from \"../constant\";\n\n/**\n * A UUID version 7 (timestamp-based) value type\n */\nexport class Uuid7Value implements Value {\n readonly type: Type = \"Uuid7\" as const;\n private readonly uuid: string;\n\n constructor(value: string) {\n if (value === undefined) {\n throw new Error(`Uuid7 value must be defined, a none is carried by NoneValue`);\n }\n if (typeof value !== 'string') {\n throw new Error(`Uuid7 value must be a string, got ${typeof value}`);\n }\n \n // Validate UUID format\n if (!validate(value)) {\n throw new Error(`Invalid UUID format: ${value}`);\n }\n \n // Check version (allow v7 or nil UUID)\n const ver = version(value);\n if (value !== NIL_UUID && ver !== 7) {\n throw new Error(`Invalid UUID version for Uuid7: expected v7, got v${ver}`);\n }\n \n this.uuid = value.toLowerCase();\n }\n\n /**\n * Generate a new timestamp-based UUID v7\n */\n static generate(): Uuid7Value {\n return new Uuid7Value(uuidv7());\n }\n\n /**\n * Create a new Uuid7Value from a string\n */\n static new(uuid: string): Uuid7Value {\n return new Uuid7Value(uuid);\n }\n\n /**\n * Get the nil UUID (all zeros)\n */\n static nil(): Uuid7Value {\n return new Uuid7Value(NIL_UUID);\n }\n\n /**\n * Get default Uuid7Value (nil UUID)\n */\n static default(): Uuid7Value {\n return Uuid7Value.nil();\n }\n\n /**\n * Parse a UUID string\n */\n static parse(str: string): Uuid7Value {\n const trimmed = str.trim();\n \n if (trimmed === '' || trimmed === NONE_VALUE) {\n throw new Error(`Cannot parse \"${str}\" as Uuid7`);\n }\n\n // Try to parse as UUID\n if (!validate(trimmed)) {\n throw new Error(`Cannot parse \"${str}\" as Uuid7`);\n }\n\n const ver = version(trimmed);\n if (trimmed !== NIL_UUID && ver !== 7) {\n throw new Error(`Cannot parse \"${str}\" as Uuid7: wrong version (v${ver})`);\n }\n\n return new Uuid7Value(trimmed);\n }\n\n /**\n * Get the UUID string\n */\n asString(): string | undefined {\n return this.uuid;\n }\n\n /**\n * Get the UUID as bytes (16-byte array)\n */\n asBytes(): Uint8Array | undefined {\n if (this.uuid === undefined) return undefined;\n \n // Remove hyphens and convert hex to bytes\n const hex = this.uuid.replace(/-/g, '');\n const bytes = new Uint8Array(16);\n for (let i = 0; i < 16; i++) {\n bytes[i] = parseInt(hex.substring(i * 2, i * 2 + 2), 16);\n }\n return bytes;\n }\n\n /**\n * Extract the timestamp from UUID v7 (milliseconds since Unix epoch)\n */\n getTimestamp(): number | undefined {\n if (this.uuid === undefined || this.uuid === NIL_UUID) return undefined;\n \n // UUID v7 has a 48-bit timestamp in the first 6 bytes\n const hex = this.uuid.replace(/-/g, '');\n const timestampHex = hex.substring(0, 12);\n const timestamp = parseInt(timestampHex, 16);\n return timestamp;\n }\n\n /**\n * Check if this is the nil UUID\n */\n isNil(): boolean {\n return this.uuid === NIL_UUID;\n }\n\n /**\n * Get the UUID version\n */\n getVersion(): number | undefined {\n if (this.uuid === undefined) return undefined;\n return version(this.uuid);\n }\n\n /**\n * Format as string\n */\n toString(): string {\n if (this.uuid === undefined) {\n return 'none';\n }\n return this.uuid;\n }\n\n valueOf(): string {\n return this.uuid;\n }\n\n /**\n * Get the internal representation\n */\n get value(): string | undefined {\n return this.valueOf();\n }\n\n /**\n * Compare two UUID7 values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherUuid = other as Uuid7Value;\n return this.uuid === otherUuid.uuid;\n }\n\n /**\n * Compare two UUID7 values (for ordering)\n * UUID v7 has timestamp-based ordering for UUIDs generated close in time\n */\n compare(other: Uuid7Value): number {\n if (this.uuid === undefined || other.uuid === undefined) {\n if (this.uuid === other.uuid) return 0;\n if (this.uuid === undefined) return -1;\n return 1;\n }\n \n // Compare as bytes for consistent ordering\n const thisBytes = this.asBytes()!;\n const otherBytes = other.asBytes()!;\n \n for (let i = 0; i < 16; i++) {\n if (thisBytes[i] < otherBytes[i]) return -1;\n if (thisBytes[i] > otherBytes[i]) return 1;\n }\n \n return 0;\n }\n\n toJSON(): string {\n return this.uuid ?? null;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport { v7 as uuidv7, NIL as NIL_UUID, validate, version } from 'uuid';\nimport { Type, Value, TypeValuePair } from \".\";\nimport { NONE_VALUE } from \"../constant\";\n\n/**\n * An IdentityId value type that wraps a UUID v7\n */\nexport class IdentityIdValue implements Value {\n readonly type: Type = \"IdentityId\" as const;\n public readonly value: string;\n\n constructor(value: string) {\n if (value === undefined) {\n throw new Error(`IdentityId value must be defined, a none is carried by NoneValue`);\n }\n if (typeof value !== 'string') {\n throw new Error(`IdentityId value must be a string, got ${typeof value}`);\n }\n \n // Validate UUID format\n if (!validate(value)) {\n throw new Error(`Invalid UUID format for IdentityId: ${value}`);\n }\n \n // Check version (allow v7 or nil UUID)\n const ver = version(value);\n if (value !== NIL_UUID && ver !== 7) {\n throw new Error(`Invalid UUID version for IdentityId: expected v7, got v${ver}`);\n }\n \n this.value = value.toLowerCase();\n }\n\n /**\n * Generate a new IdentityId with a UUID v7\n */\n static generate(): IdentityIdValue {\n return new IdentityIdValue(uuidv7());\n }\n\n /**\n * Get the nil IdentityId (all zeros)\n */\n static nil(): IdentityIdValue {\n return new IdentityIdValue(NIL_UUID);\n }\n\n /**\n * Parse a string as an IdentityId\n */\n static parse(str: string): IdentityIdValue {\n const trimmed = str.trim();\n \n if (trimmed === '' || trimmed === NONE_VALUE) {\n throw new Error(`Cannot parse \"${str}\" as IdentityId`);\n }\n\n // Try to parse as UUID\n if (!validate(trimmed)) {\n throw new Error(`Cannot parse \"${str}\" as IdentityId`);\n }\n\n const ver = version(trimmed);\n if (trimmed !== NIL_UUID && ver !== 7) {\n throw new Error(`Cannot parse \"${str}\" as IdentityId: wrong UUID version (v${ver})`);\n }\n\n return new IdentityIdValue(trimmed);\n }\n\n /**\n * Get the UUID string value\n */\n valueOf(): string {\n return this.value;\n }\n\n /**\n * Format as string\n */\n toString(): string {\n return this.value;\n }\n\n /**\n * Extract the timestamp from the UUID v7 (milliseconds since Unix epoch)\n */\n getTimestamp(): number | undefined {\n if (this.value === undefined || this.value === NIL_UUID) return undefined;\n \n // UUID v7 has a 48-bit timestamp in the first 6 bytes\n const hex = this.value.replace(/-/g, '');\n const timestampHex = hex.substring(0, 12);\n const timestamp = parseInt(timestampHex, 16);\n return timestamp;\n }\n\n /**\n * Check if this is the nil UUID\n */\n isNil(): boolean {\n return this.value === NIL_UUID;\n }\n\n /**\n * Compare two IdentityId values for equality\n */\n equals(other: Value): boolean {\n if (other.type !== this.type) {\n return false;\n }\n \n const otherIdentityId = other as IdentityIdValue;\n return this.value === otherIdentityId.value;\n }\n\n toJSON(): string {\n return this.value ?? null;\n }\n\n encode(): TypeValuePair {\n return {\n type: this.type,\n value: this.toString()\n };\n }\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {ListType, Type, TypeValuePair, Value} from '.';\n\nfunction hasToJSON(value: unknown): value is {toJSON(): unknown} {\n return typeof value === 'object' && value !== null && 'toJSON' in value && typeof (value as {toJSON: unknown}).toJSON === 'function';\n}\n\nexport class ListValue implements Value {\n public readonly items: Value[];\n private readonly elementType?: Type;\n\n constructor(items: Value[], elementType?: Type) {\n if (!Array.isArray(items)) {\n throw new Error(`List value must be an array, got ${typeof items}`);\n }\n if (items.length === 0 && elementType === undefined) {\n throw new Error('An empty List has no element type to infer, pass it explicitly: new ListValue([], elementType)');\n }\n this.items = items;\n this.elementType = elementType;\n }\n\n get type(): ListType {\n return {List: this.elementType ?? this.items[0].type};\n }\n\n equals(other: Value): boolean {\n if (!(other instanceof ListValue) || this.items.length !== other.items.length) {\n return false;\n }\n return this.items.every((item, i) => item.equals(other.items[i]));\n }\n\n toString(): string {\n return `[${this.items.map(item => item.toString()).join(', ')}]`;\n }\n\n toJSON(): unknown {\n return this.items.map(item => (hasToJSON(item) ? item.toJSON() : item));\n }\n\n encode(): TypeValuePair {\n const elementType = this.elementType ?? this.items[0].type;\n return {\n type: {List: elementType},\n value: this.items.map(item => item.encode().value),\n };\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {RecordType, TypeValuePair, Value, WireCellValue} from '.';\n\nfunction hasToJSON(value: unknown): value is {toJSON(): unknown} {\n return typeof value === 'object' && value !== null && 'toJSON' in value && typeof (value as {toJSON: unknown}).toJSON === 'function';\n}\n\nexport class RecordValue implements Value {\n public readonly fields: Record<string, Value>;\n\n constructor(fields: Record<string, Value>) {\n if (typeof fields !== 'object' || fields === null || Array.isArray(fields)) {\n throw new Error(`Record value must be a plain object of fields, got ${typeof fields}`);\n }\n this.fields = fields;\n }\n\n get type(): RecordType {\n return {Record: Object.entries(this.fields).map(([name, value]) => ({name, type: value.encode().type}))};\n }\n\n equals(other: Value): boolean {\n if (!(other instanceof RecordValue)) {\n return false;\n }\n const names = Object.keys(this.fields);\n const otherNames = Object.keys(other.fields);\n if (names.length !== otherNames.length || names.some((name, i) => name !== otherNames[i])) {\n return false;\n }\n return names.every(name => this.fields[name].equals(other.fields[name]));\n }\n\n toString(): string {\n return `{${Object.entries(this.fields).map(([name, value]) => `${name}: ${value.toString()}`).join(', ')}}`;\n }\n\n toJSON(): unknown {\n return Object.fromEntries(Object.entries(this.fields).map(([name, value]) => [name, hasToJSON(value) ? value.toJSON() : value]));\n }\n\n encode(): TypeValuePair {\n const fields = this.type.Record;\n const value: {[key: string]: WireCellValue} = {};\n for (const [name, field] of Object.entries(this.fields)) {\n value[name] = field.encode().value;\n }\n return {type: {Record: fields}, value};\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {NONE_VALUE, ROW_NUMBER_KEY} from '../constant';\nimport {BaseType, Type, WireCellValue, isDigestType, isListType, isOptionType, isRecordType} from '.';\nimport {digestType} from './digest';\nimport {\n DECIMAL_DEFAULT_SCALE, FIXED_POINT_MAX_PRECISION, decimalType, fixedPointKind, fixedPointPrecision,\n fixedPointScale, isFixedPointType,\n} from './fixed-point';\n\nfunction peelOption(type: Type): Type {\n return isOptionType(type) ? peelOption(type.Option) : type;\n}\n\n/**\n * The wire rendering of a type: an object whose `id` names it, with anything it wraps under `underlying`.\n *\n * The client keeps its own representation, where a base type is the bare string it switches on. These two\n * functions are the only crossing between the two, so a wire descriptor never reaches code that expects\n * `{Option: ...}` and a client type never reaches the server expecting `{id, underlying}`.\n */\nexport interface WireRecordField {\n name: string;\n type: WireType;\n}\n\nexport interface WireType {\n id: string;\n underlying?: WireType | WireRecordField[];\n accuracy?: number;\n precision?: number;\n scale?: number;\n}\n\nexport function typeToWire(type: Type): WireType {\n if (isOptionType(type)) {\n return {id: 'Option', underlying: typeToWire(type.Option)};\n }\n if (isDigestType(type)) {\n return {id: 'Digest', underlying: {id: type.Digest.inner}, accuracy: type.Digest.accuracy};\n }\n if (isFixedPointType(type)) {\n const kind = fixedPointKind(type);\n const wire: WireType = {id: kind, precision: fixedPointPrecision(type)};\n if (kind === 'Decimal') wire.scale = fixedPointScale(type);\n return wire;\n }\n if (isListType(type)) {\n return {id: 'List', underlying: typeToWire(type.List)};\n }\n if (isRecordType(type)) {\n return {id: 'Record', underlying: type.Record.map(field => ({name: field.name, type: typeToWire(field.type)}))};\n }\n return {id: type};\n}\n\nexport function typeFromWire(wire: WireType): Type {\n if (!wire || typeof wire !== 'object' || typeof wire.id !== 'string') {\n throw new Error(`Expected a type descriptor object, got ${JSON.stringify(wire)}`);\n }\n if (wire.id === 'Option') {\n if (!wire.underlying || Array.isArray(wire.underlying)) {\n throw new Error('Option type descriptor is missing its underlying type');\n }\n return {Option: typeFromWire(wire.underlying)};\n }\n if (wire.id === 'Digest') {\n const inner = !Array.isArray(wire.underlying) ? wire.underlying?.id : undefined;\n if (typeof inner !== 'string' || typeof wire.accuracy !== 'number') {\n throw new Error(`Digest type descriptor needs an underlying type and a numeric accuracy, got ${JSON.stringify(wire)}`);\n }\n return digestType(inner, wire.accuracy);\n }\n if (wire.id === 'Decimal') {\n const precision = wire.precision ?? FIXED_POINT_MAX_PRECISION;\n return decimalType(precision, wire.scale ?? DECIMAL_DEFAULT_SCALE);\n }\n if (wire.id === 'List') {\n if (!wire.underlying || Array.isArray(wire.underlying)) {\n throw new Error('List type descriptor is missing its underlying type');\n }\n return {List: typeFromWire(wire.underlying)};\n }\n if (wire.id === 'Record') {\n if (!Array.isArray(wire.underlying)) {\n throw new Error('Record type descriptor needs an underlying array of fields');\n }\n return {Record: wire.underlying.map(field => ({name: field.name, type: typeFromWire(field.type)}))};\n }\n return wire.id as BaseType;\n}\n\n/** Reads the column types of a frames payload, leaving the rest of the frame untouched. */\nexport function columnsFromWire<T extends {type: any}>(columns: T[]): T[] {\n return columns.map(column => ({...column, type: typeFromWire(column.type)}));\n}\n\nconst LEGACY_FRAME_KEYS = ['row_numbers', 'created_at', 'updated_at', 'time'];\n\nexport function framesFromWire(frames: any[]): any[] {\n return frames.map(frame => {\n for (const key of LEGACY_FRAME_KEYS) {\n if (Array.isArray(frame?.[key]) && frame[key].length > 0) {\n throw new Error(`frame key ${key} is not supported, system columns travel as # columns`);\n }\n }\n return frame && frame.columns ? {...frame, columns: columnsFromWire(frame.columns)} : frame;\n });\n}\n\n/**\n * Reads a `format=json` frame envelope into the column shape the decoder works on.\n *\n * The rows carry one value per column and the envelope's `types` says what each column is, so the two\n * together hold everything the frames format carries. Turning them back into columns lets the JSON\n * transports run the same decode and the same shape check as every other transport, instead of handing\n * the caller whatever JSON happened to arrive.\n */\nexport function envelopeToColumns(envelope: any): {name: string, type: Type, payload: WireCellValue[]}[] {\n const types = envelope?.types;\n const rows: any[] = envelope?.rows ?? [];\n if (!types || typeof types !== 'object') {\n if (rows.length > 0) {\n throw new Error(`Frame envelope carries rows but no column types, got ${JSON.stringify(envelope)}`);\n }\n return [];\n }\n return Object.keys(types).map(name => {\n const type = typeFromWire(types[name]);\n return {\n name,\n type,\n payload: rows.map(row => payloadOf(row, name, type)),\n };\n });\n}\n\nexport function envelopesToFrames(envelopes: any): {columns: {name: string, type: Type, payload: WireCellValue[]}[], row_numbers?: number[]}[] {\n if (!Array.isArray(envelopes)) {\n throw new Error(`Expected a list of frame envelopes, got ${JSON.stringify(envelopes)}`);\n }\n return envelopes.map(envelope => {\n const rows: any[] = envelope?.rows ?? [];\n return {\n columns: envelopeToColumns(envelope),\n row_numbers: rows.length > 0 && ROW_NUMBER_KEY in rows[0] ? rows.map(row => row[ROW_NUMBER_KEY]) : undefined,\n };\n });\n}\n\nfunction payloadOf(row: any, name: string, type: Type): WireCellValue {\n if (!row || typeof row !== 'object' || !(name in row)) {\n throw new Error(`Row is missing a cell for column ${name}`);\n }\n const value = row[name];\n if (value === null || value === undefined) {\n if (!isOptionType(type)) {\n throw new Error(`A none cell cannot fit the non-option column ${name}`);\n }\n return NONE_VALUE;\n }\n const base = peelOption(type);\n if (isListType(base) || isRecordType(base)) {\n return value as WireCellValue;\n }\n if (base === 'Boolean') {\n if (typeof value !== 'boolean') {\n throw new Error(`Cell for column ${name} must arrive as a boolean, got ${typeof value}`);\n }\n return value;\n }\n if (typeof value !== 'string') {\n throw new Error(`Cell for column ${name} must arrive as text, got ${typeof value}`);\n }\n return value;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nexport {BlobValue} from './blob';\nexport {BooleanValue} from './boolean';\nexport {DateValue} from './date';\nexport {DateTimeValue} from './datetime';\nexport {DecimalValue} from './decimal';\nexport {DigestValue, digestType, digestTypeName} from './digest';\nexport {\n DECIMAL_DEFAULT_SCALE, FIXED_POINT_MAX_PRECISION, FIXED_POINT_NARROW_PRECISION,\n decimalType, fixedPointKind, fixedPointPrecision, fixedPointScale, fixedPointType, fixedPointTypeName,\n isFixedPointType,\n} from './fixed-point';\nexport {Float4Value} from './float4';\nexport {Float8Value} from './float8';\nexport {Int1Value} from './int1';\nexport {Int2Value} from './int2';\nexport {Int4Value} from './int4';\nexport {Int8Value} from './int8';\nexport {Int16Value} from './int16';\nexport {DurationValue} from './duration';\nexport {TimeValue} from './time';\nexport {Uint1Value} from './uint1';\nexport {Uint2Value} from './uint2';\nexport {Uint4Value} from './uint4';\nexport {Uint8Value} from './uint8';\nexport {Uint16Value} from './uint16';\nexport {NoneValue, noneDepth} from './none';\nexport {Option, isOption} from './option';\nexport {Utf8Value} from './utf8';\nexport {Uuid4Value} from './uuid4';\nexport {Uuid7Value} from './uuid7';\nexport {IdentityIdValue} from './identityid';\nexport {ListValue} from './list';\nexport {RecordValue} from './record';\nexport type {WireType} from './wire-type';\nexport {typeToWire, typeFromWire, columnsFromWire, framesFromWire, envelopeToColumns, envelopesToFrames} from './wire-type';\n\nexport type BaseType =\n | \"Blob\"\n | \"Boolean\"\n | \"Decimal\"\n | \"Float4\" | \"Float8\"\n | \"Int1\" | \"Int2\" | \"Int4\" | \"Int8\" | \"Int16\"\n | \"Uint1\" | \"Uint2\" | \"Uint4\" | \"Uint8\" | \"Uint16\"\n | \"Utf8\"\n | \"Date\" | \"DateTime\" | \"Time\" | \"Duration\"\n | \"Uuid4\" | \"Uuid7\"\n | \"IdentityId\"\n | \"None\";\n\nexport interface OptionType { Option: Type }\nexport type DigestInnerType =\n | \"Float4\" | \"Float8\"\n | \"Int1\" | \"Int2\" | \"Int4\" | \"Int8\" | \"Int16\"\n | \"Uint1\" | \"Uint2\" | \"Uint4\" | \"Uint8\" | \"Uint16\"\n | \"Duration\";\n\nexport interface DigestType { Digest: { inner: DigestInnerType; accuracy: number } }\nexport type FixedPointKind = \"Decimal\";\nexport interface DecimalType { Decimal: { precision: number; scale: number } }\nexport type FixedPointType = DecimalType;\nexport interface RecordField { name: string; type: Type }\nexport interface ListType { List: Type }\nexport interface RecordType { Record: RecordField[] }\nexport type Type = BaseType | OptionType | DigestType | FixedPointType | ListType | RecordType;\n\nexport function isOptionType(t: Type): t is OptionType {\n return typeof t === 'object' && t !== null && 'Option' in t;\n}\n\nexport function isDigestType(t: Type): t is DigestType {\n return typeof t === 'object' && t !== null && 'Digest' in t;\n}\n\nexport function isListType(t: Type): t is ListType {\n return typeof t === 'object' && t !== null && 'List' in t;\n}\n\nexport function isRecordType(t: Type): t is RecordType {\n return typeof t === 'object' && t !== null && 'Record' in t;\n}\n\nexport function unwrapOptionType(t: Type): BaseType | DigestType | FixedPointType | ListType | RecordType {\n if (isOptionType(t)) return unwrapOptionType(t.Option);\n return t;\n}\n\nexport function optionDepth(t: Type): number {\n return isOptionType(t) ? optionDepth(t.Option) + 1 : 0;\n}\n\nexport function innerOfOption(t: OptionType): Type {\n return t.Option;\n}\n\n/** A wire cell: a JSON bool for Boolean, a plain string for every other scalar type, or a real JSON array/object for List/Record. */\nexport type WireCellValue = string | boolean | WireCellValue[] | {[key: string]: WireCellValue};\n\nexport interface TypeValuePair {\n type: Type;\n value: WireCellValue;\n}\n\nexport abstract class Value {\n abstract readonly type: Type;\n\n public abstract encode(): TypeValuePair;\n public abstract equals(other: Value): boolean;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {\n BlobValue, BooleanValue, DateValue, DateTimeValue, DecimalValue, DigestValue, Float4Value, Float8Value,\n Int1Value, Int2Value, Int4Value, Int8Value, Int16Value, DurationValue,\n TimeValue, Uint1Value, Uint2Value, Uint4Value, Uint8Value,\n Uint16Value, NoneValue, Utf8Value, Uuid4Value, Uuid7Value, IdentityIdValue,\n ListValue, RecordValue,\n Value, TypeValuePair, Type, WireCellValue, isDigestType, isListType, isOptionType, isRecordType, unwrapOptionType, optionDepth, innerOfOption,\n fixedPointTypeName, isFixedPointType\n} from './value';\nimport {noneMarkerDepth, ROW_NUMBER_KEY} from './constant';\nimport {Column} from './types';\n\n\nfunction stripOptionLayers(type: Type, layers: number): Type {\n return layers === 0 || !isOptionType(type) ? type : stripOptionLayers(innerOfOption(type), layers - 1);\n}\n\nexport function decode(pair: TypeValuePair): Value {\n if (isOptionType(pair.type)) {\n const noneAt = typeof pair.value === 'string' ? noneMarkerDepth(pair.value) : undefined;\n if (noneAt === undefined) {\n return decode({type: unwrapOptionType(pair.type), value: pair.value});\n }\n const depth = optionDepth(pair.type);\n if (noneAt >= depth) {\n throw new Error(`none under ${noneAt} Some layers cannot fit an option of depth ${depth}`);\n }\n return new NoneValue(stripOptionLayers(pair.type, noneAt + 1));\n }\n\n if (isDigestType(pair.type)) {\n return DigestValue.parse(pair.value as string, pair.type);\n }\n\n if (isFixedPointType(pair.type)) {\n if (typeof pair.value !== 'string') {\n throw new Error(`Cell for type ${fixedPointTypeName(pair.type)} must be a JSON string, got ${typeof pair.value}`);\n }\n return DecimalValue.parse(pair.value);\n }\n\n if (isListType(pair.type)) {\n if (!Array.isArray(pair.value)) {\n throw new Error(`List value must be a JSON array, got ${typeof pair.value}`);\n }\n const elementType = pair.type.List;\n return new ListValue(pair.value.map(item => decode({type: elementType, value: item})), elementType);\n }\n\n if (isRecordType(pair.type)) {\n if (typeof pair.value !== 'object' || pair.value === null || Array.isArray(pair.value)) {\n throw new Error(`Record value must be a JSON object, got ${typeof pair.value}`);\n }\n const obj = pair.value;\n const fields: Record<string, Value> = {};\n for (const field of pair.type.Record) {\n if (!(field.name in obj)) {\n throw new Error(`record is missing field '${field.name}'`);\n }\n fields[field.name] = decode({type: field.type, value: obj[field.name]});\n }\n return new RecordValue(fields);\n }\n\n if (pair.type === 'Boolean' && typeof pair.value === 'boolean') {\n return new BooleanValue(pair.value);\n }\n\n if (typeof pair.value !== 'string') {\n throw new Error(`Cell for type ${pair.type} must be a JSON string, got ${typeof pair.value}`);\n }\n const value = pair.value;\n\n switch (pair.type) {\n case \"Blob\":\n return BlobValue.parse(value);\n case \"Boolean\":\n return BooleanValue.parse(value);\n case \"Date\":\n return DateValue.parse(value);\n case \"DateTime\":\n return DateTimeValue.parse(value);\n case \"Decimal\":\n return DecimalValue.parse(value);\n case \"Float4\":\n return Float4Value.parse(value);\n case \"Float8\":\n return Float8Value.parse(value);\n case \"Int1\":\n return Int1Value.parse(value);\n case \"Int2\":\n return Int2Value.parse(value);\n case \"Int4\":\n return Int4Value.parse(value);\n case \"Int8\":\n return Int8Value.parse(value);\n case \"Int16\":\n return Int16Value.parse(value);\n case \"Duration\":\n return DurationValue.parse(value);\n case \"Time\":\n return TimeValue.parse(value);\n case \"Uint1\":\n return Uint1Value.parse(value);\n case \"Uint2\":\n return Uint2Value.parse(value);\n case \"Uint4\":\n return Uint4Value.parse(value);\n case \"Uint8\":\n return Uint8Value.parse(value);\n case \"Uint16\":\n return Uint16Value.parse(value);\n case \"None\":\n return NoneValue.parse(value);\n case \"Utf8\":\n return Utf8Value.parse(value);\n case \"Uuid4\":\n return Uuid4Value.parse(value);\n case \"Uuid7\":\n return Uuid7Value.parse(value);\n case \"IdentityId\":\n return IdentityIdValue.parse(value);\n default:\n throw new Error(`Unsupported type: ${pair.type}`);\n }\n}\n\nfunction rowNumberOf(cell: WireCellValue): number {\n const rowNumber = Number(cell);\n if (!Number.isFinite(rowNumber)) {\n throw new Error(`row number ${JSON.stringify(cell)} is not a number`);\n }\n return rowNumber;\n}\n\nexport function columnsToRows(columns: Column[], rowNumbers?: (string | number)[]): Record<string, Value>[] {\n const rowCount = columns[0]?.payload.length ?? 0;\n for (const column of columns) {\n if (column.payload.length !== rowCount) {\n throw new Error(\n `column ${column.name} carries ${column.payload.length} cells where ${columns[0].name} carries ${rowCount}`\n );\n }\n }\n const hasRowNumbers = rowNumbers !== undefined && rowNumbers.length > 0;\n if (hasRowNumbers && rowNumbers.length !== rowCount) {\n throw new Error(`row numbers cover ${rowNumbers.length} of ${rowCount} rows`);\n }\n return Array.from({length: rowCount}, (_, i) => {\n const row: Record<string, Value> = {};\n for (const col of columns) {\n if (col.name === ROW_NUMBER_KEY) {\n (row as any)[ROW_NUMBER_KEY] = rowNumberOf(col.payload[i]);\n } else {\n row[col.name] = decode({type: col.type, value: col.payload[i]});\n }\n }\n if (hasRowNumbers) {\n (row as any)[ROW_NUMBER_KEY] = Number(rowNumbers![i]);\n }\n return row;\n });\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {NONE_VALUE, noneMarker, noneMarkerDepth} from \"./constant\";\nimport {NoneValue, TypeValuePair, WireCellValue, WireType, isOption, typeToWire} from \"./value\";\n\nexport function encodeValue(value: any, name: string = '$1'): TypeValuePair {\n\n if (value === null || value === undefined) {\n throw new Error(`parameter ${name} is null or undefined, use Option.none(inner)`);\n }\n\n if (value instanceof NoneValue && value.innerType === 'None') {\n throw new Error(`parameter ${name} is a NoneValue without an inner type, use Option.none(inner)`);\n }\n\n if (isOption(value)) {\n if (value.isNone()) {\n return { type: value.type, value: NONE_VALUE };\n }\n const inner = encodeValue(value.unwrap(), name);\n const noneAt = typeof inner.value === 'string' ? noneMarkerDepth(inner.value) : undefined;\n return {\n type: { Option: inner.type },\n value: noneAt === undefined ? inner.value : noneMarker(noneAt + 1),\n };\n }\n\n if (value && typeof value === 'object' && 'encode' in value && typeof value.encode === 'function') {\n return value.encode();\n }\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n throw new Error(`parameter ${name} is an empty array with no element type to infer, use new ListValue([], elementType)`);\n }\n const items = value.map((item, i) => encodeValue(item, `${name}[${i}]`));\n return {\n type: {List: items[0].type},\n value: items.map(item => item.value),\n };\n }\n\n if (typeof value === 'boolean') {\n return { type: 'Boolean', value: value.toString() };\n }\n\n if (typeof value === 'number') {\n if (Number.isInteger(value)) {\n // Choose appropriate integer type based on value range\n if (value >= -128 && value <= 127) {\n return { type: 'Int1', value: value.toString() };\n } else if (value >= -32768 && value <= 32767) {\n return { type: 'Int2', value: value.toString() };\n } else if (value >= -2147483648 && value <= 2147483647) {\n return { type: 'Int4', value: value.toString() };\n } else {\n return { type: 'Int8', value: value.toString() };\n }\n } else {\n // Floating point number\n return { type: 'Float8', value: value.toString() };\n }\n }\n\n if (typeof value === 'string') {\n if (/^[0-9a-f]{8}-[0-9a-f]{4}-[47][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value)) {\n const version = value[14];\n if (version === '4') {\n return { type: 'Uuid4', value: value };\n } else if (version === '7') {\n return { type: 'Uuid7', value: value };\n }\n }\n return { type: 'Utf8', value: value };\n }\n\n if (typeof value === 'bigint') {\n if (value >= BigInt(0)) {\n if (value <= BigInt(255)) {\n return { type: 'Uint1', value: value.toString() };\n } else if (value <= BigInt(65535)) {\n return { type: 'Uint2', value: value.toString() };\n } else if (value <= BigInt(4294967295)) {\n return { type: 'Uint4', value: value.toString() };\n } else if (value <= BigInt('18446744073709551615')) {\n return { type: 'Uint8', value: value.toString() };\n } else {\n return { type: 'Uint16', value: value.toString() };\n }\n } else {\n if (value >= BigInt('-9223372036854775808')) {\n return { type: 'Int8', value: value.toString() };\n } else {\n return { type: 'Int16', value: value.toString() };\n }\n }\n }\n\n if (value instanceof Date) {\n return { type: 'DateTime', value: value.toISOString() };\n }\n\n\n if (value instanceof Uint8Array) {\n const hex = Array.from(value)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('');\n return { type: 'Blob', value: '0x' + hex };\n }\n\n if (value instanceof ArrayBuffer) {\n const uint8Array = new Uint8Array(value);\n const hex = Array.from(uint8Array)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('');\n return { type: 'Blob', value: '0x' + hex };\n }\n\n if (typeof value === 'object' && value.constructor === Object) {\n const rawEntries = Object.entries(value);\n // a method-bearing object is shaped like a Value or Option impostor, never a data record\n if (rawEntries.length > 0 && rawEntries.every(([, v]) => typeof v !== 'function')) {\n const entries = rawEntries.map(([key, v]) => [key, encodeValue(v, `${name}.${key}`)] as const);\n const fields: {[key: string]: WireCellValue} = {};\n for (const [key, pair] of entries) {\n fields[key] = pair.value;\n }\n return {\n type: {Record: entries.map(([key, pair]) => ({name: key, type: pair.type}))},\n value: fields,\n };\n }\n }\n\n throw new Error(`Cannot encode value of type ${typeof value}: ${value}`);\n}\n\n/** A parameter as it goes on the wire: the same value, with the type in the wire's own rendering. */\nexport interface WireValue {\n type: WireType;\n value: WireCellValue;\n}\n\nfunction toWire(pair: TypeValuePair): WireValue {\n return {type: typeToWire(pair.type), value: pair.value};\n}\n\nexport function encodeParams(params: any): WireValue[] | Record<string, WireValue> {\n if (params === undefined || params === null) {\n return [];\n }\n\n if (Array.isArray(params)) {\n return params.map((param, i) => toWire(encodeValue(param, `$${i + 1}`)));\n } else if (typeof params === 'object') {\n const encoded: Record<string, WireValue> = {};\n for (const [key, value] of Object.entries(params)) {\n encoded[key] = toWire(encodeValue(value, `$${key}`));\n }\n return encoded;\n }\n\n throw new Error(`Invalid parameters type: expected array or object, got ${typeof params}`);\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {\n PrimitiveShapeNode, ObjectShapeNode, ArrayShapeNode,\n OptionShapeNode, ValueShapeNode, ShapeNode\n} from '.';\n\nexport class ShapeBuilder {\n\n static blob(): PrimitiveShapeNode<'Blob'> {\n return {kind: 'primitive', type: 'Blob'};\n }\n\n static bool(): PrimitiveShapeNode<'Boolean'> {\n return {kind: 'primitive', type: 'Boolean'};\n }\n\n static boolean(): PrimitiveShapeNode<'Boolean'> {\n return {kind: 'primitive', type: 'Boolean'};\n }\n\n static decimal(): PrimitiveShapeNode<'Decimal'> {\n return {kind: 'primitive', type: 'Decimal'};\n }\n\n static float4(): PrimitiveShapeNode<'Float4'> {\n return {kind: 'primitive', type: 'Float4'};\n }\n\n static float8(): PrimitiveShapeNode<'Float8'> {\n return {kind: 'primitive', type: 'Float8'};\n }\n\n static float(): PrimitiveShapeNode<'Float8'> {\n return {kind: 'primitive', type: 'Float8'};\n }\n\n static double(): PrimitiveShapeNode<'Float8'> {\n return {kind: 'primitive', type: 'Float8'};\n }\n\n static int1(): PrimitiveShapeNode<'Int1'> {\n return {kind: 'primitive', type: 'Int1'};\n }\n\n static int2(): PrimitiveShapeNode<'Int2'> {\n return {kind: 'primitive', type: 'Int2'};\n }\n\n static int4(): PrimitiveShapeNode<'Int4'> {\n return {kind: 'primitive', type: 'Int4'};\n }\n\n static int8(): PrimitiveShapeNode<'Int8'> {\n return {kind: 'primitive', type: 'Int8'};\n }\n\n static int16(): PrimitiveShapeNode<'Int16'> {\n return {kind: 'primitive', type: 'Int16'};\n }\n\n static int(): PrimitiveShapeNode<'Int4'> {\n return {kind: 'primitive', type: 'Int4'};\n }\n\n static bigint(): PrimitiveShapeNode<'Int8'> {\n return {kind: 'primitive', type: 'Int8'};\n }\n\n static uint1(): PrimitiveShapeNode<'Uint1'> {\n return {kind: 'primitive', type: 'Uint1'};\n }\n\n static uint2(): PrimitiveShapeNode<'Uint2'> {\n return {kind: 'primitive', type: 'Uint2'};\n }\n\n static uint4(): PrimitiveShapeNode<'Uint4'> {\n return {kind: 'primitive', type: 'Uint4'};\n }\n\n static uint8(): PrimitiveShapeNode<'Uint8'> {\n return {kind: 'primitive', type: 'Uint8'};\n }\n\n static uint16(): PrimitiveShapeNode<'Uint16'> {\n return {kind: 'primitive', type: 'Uint16'};\n }\n\n static utf8(): PrimitiveShapeNode<'Utf8'> {\n return {kind: 'primitive', type: 'Utf8'};\n }\n\n static string(): PrimitiveShapeNode<'Utf8'> {\n return {kind: 'primitive', type: 'Utf8'};\n }\n\n static date(): PrimitiveShapeNode<'Date'> {\n return {kind: 'primitive', type: 'Date'};\n }\n\n static datetime(): PrimitiveShapeNode<'DateTime'> {\n return {kind: 'primitive', type: 'DateTime'};\n }\n\n static time(): PrimitiveShapeNode<'Time'> {\n return {kind: 'primitive', type: 'Time'};\n }\n\n static duration(): PrimitiveShapeNode<'Duration'> {\n return {kind: 'primitive', type: 'Duration'};\n }\n\n static uuid4(): PrimitiveShapeNode<'Uuid4'> {\n return {kind: 'primitive', type: 'Uuid4'};\n }\n\n static uuid7(): PrimitiveShapeNode<'Uuid7'> {\n return {kind: 'primitive', type: 'Uuid7'};\n }\n\n static uuid(): PrimitiveShapeNode<'Uuid7'> {\n return {kind: 'primitive', type: 'Uuid7'};\n }\n\n static none(): PrimitiveShapeNode<'None'> {\n return {kind: 'primitive', type: 'None'};\n }\n\n static identityid(): PrimitiveShapeNode<'IdentityId'> {\n return {kind: 'primitive', type: 'IdentityId'};\n }\n\n static object<P extends Record<string, ShapeNode>>(properties: P): ObjectShapeNode<P> {\n return {kind: 'object', properties};\n }\n\n static array<T extends ShapeNode>(items: T): ArrayShapeNode<T> {\n return {kind: 'array', items};\n }\n\n static option<T extends ShapeNode>(inner: T): OptionShapeNode<T> {\n return {kind: 'option', inner};\n }\n\n static number(): PrimitiveShapeNode<'Float8'> {\n return {kind: 'primitive', type: 'Float8'};\n }\n\n static booleanValue(): ValueShapeNode<'Boolean'> {\n return {kind: 'value', type: 'Boolean'};\n }\n\n static decimalValue(): ValueShapeNode<'Decimal'> {\n return {kind: 'value', type: 'Decimal'};\n }\n\n static int1Value(): ValueShapeNode<'Int1'> {\n return {kind: 'value', type: 'Int1'};\n }\n\n static int2Value(): ValueShapeNode<'Int2'> {\n return {kind: 'value', type: 'Int2'};\n }\n\n static int4Value(): ValueShapeNode<'Int4'> {\n return {kind: 'value', type: 'Int4'};\n }\n\n static int8Value(): ValueShapeNode<'Int8'> {\n return {kind: 'value', type: 'Int8'};\n }\n\n static int16Value(): ValueShapeNode<'Int16'> {\n return {kind: 'value', type: 'Int16'};\n }\n\n static uint1Value(): ValueShapeNode<'Uint1'> {\n return {kind: 'value', type: 'Uint1'};\n }\n\n static uint2Value(): ValueShapeNode<'Uint2'> {\n return {kind: 'value', type: 'Uint2'};\n }\n\n static uint4Value(): ValueShapeNode<'Uint4'> {\n return {kind: 'value', type: 'Uint4'};\n }\n\n static uint8Value(): ValueShapeNode<'Uint8'> {\n return {kind: 'value', type: 'Uint8'};\n }\n\n static uint16Value(): ValueShapeNode<'Uint16'> {\n return {kind: 'value', type: 'Uint16'};\n }\n\n static float4Value(): ValueShapeNode<'Float4'> {\n return {kind: 'value', type: 'Float4'};\n }\n\n static float8Value(): ValueShapeNode<'Float8'> {\n return {kind: 'value', type: 'Float8'};\n }\n\n static utf8Value(): ValueShapeNode<'Utf8'> {\n return {kind: 'value', type: 'Utf8'};\n }\n\n static dateValue(): ValueShapeNode<'Date'> {\n return {kind: 'value', type: 'Date'};\n }\n\n static dateTimeValue(): ValueShapeNode<'DateTime'> {\n return {kind: 'value', type: 'DateTime'};\n }\n\n static timeValue(): ValueShapeNode<'Time'> {\n return {kind: 'value', type: 'Time'};\n }\n\n static durationValue(): ValueShapeNode<'Duration'> {\n return {kind: 'value', type: 'Duration'};\n }\n\n static uuid4Value(): ValueShapeNode<'Uuid4'> {\n return {kind: 'value', type: 'Uuid4'};\n }\n\n static uuid7Value(): ValueShapeNode<'Uuid7'> {\n return {kind: 'value', type: 'Uuid7'};\n }\n\n static noneValue(): ValueShapeNode<'None'> {\n return {kind: 'value', type: 'None'};\n }\n\n static blobValue(): ValueShapeNode<'Blob'> {\n return {kind: 'value', type: 'Blob'};\n }\n\n static identityIdValue(): ValueShapeNode<'IdentityId'> {\n return {kind: 'value', type: 'IdentityId'};\n }\n}\n\nexport const Shape = ShapeBuilder;\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {\n BlobValue, BooleanValue, DateValue, DateTimeValue, DecimalValue,\n Float4Value, Float8Value,\n Int1Value, Int2Value, Int4Value, Int8Value, Int16Value,\n DurationValue, TimeValue,\n Uint1Value, Uint2Value, Uint4Value, Uint8Value, Uint16Value,\n NoneValue, Utf8Value,\n Uuid4Value, Uuid7Value, IdentityIdValue,\n Option, BaseType, isOption\n} from '../value';\nimport {ShapeNode} from '.';\nimport {PrimitiveToValue} from './inference';\n\nfunction createValueInstance<T extends BaseType>(type: T, value: any): PrimitiveToValue<T> {\n switch (type) {\n case 'Blob':\n return new BlobValue(value) as PrimitiveToValue<T>;\n case 'Boolean':\n return new BooleanValue(value) as PrimitiveToValue<T>;\n case 'Float4':\n return new Float4Value(value) as PrimitiveToValue<T>;\n case 'Float8':\n return new Float8Value(value) as PrimitiveToValue<T>;\n case 'Int1':\n return new Int1Value(value) as PrimitiveToValue<T>;\n case 'Int2':\n return new Int2Value(value) as PrimitiveToValue<T>;\n case 'Int4':\n return new Int4Value(value) as PrimitiveToValue<T>;\n case 'Int8':\n return new Int8Value(value) as PrimitiveToValue<T>;\n case 'Int16':\n return new Int16Value(value) as PrimitiveToValue<T>;\n case 'Uint1':\n return new Uint1Value(value) as PrimitiveToValue<T>;\n case 'Uint2':\n return new Uint2Value(value) as PrimitiveToValue<T>;\n case 'Uint4':\n return new Uint4Value(value) as PrimitiveToValue<T>;\n case 'Uint8':\n return new Uint8Value(value) as PrimitiveToValue<T>;\n case 'Uint16':\n return new Uint16Value(value) as PrimitiveToValue<T>;\n case 'Utf8':\n return new Utf8Value(value) as PrimitiveToValue<T>;\n case 'Date':\n return new DateValue(value) as PrimitiveToValue<T>;\n case 'DateTime':\n return new DateTimeValue(value) as PrimitiveToValue<T>;\n case 'Time':\n return new TimeValue(value) as PrimitiveToValue<T>;\n case 'Duration':\n return new DurationValue(value) as PrimitiveToValue<T>;\n case 'Uuid4':\n return new Uuid4Value(value) as PrimitiveToValue<T>;\n case 'Uuid7':\n return new Uuid7Value(value) as PrimitiveToValue<T>;\n case 'Decimal':\n return new DecimalValue(value) as PrimitiveToValue<T>;\n case 'IdentityId':\n return new IdentityIdValue(value) as PrimitiveToValue<T>;\n case 'None':\n return new NoneValue() as PrimitiveToValue<T>;\n default:\n throw new Error(`Unknown type: ${type}`);\n }\n}\n\nexport function parseValue(shape: ShapeNode, value: any): any {\n if (shape.kind === 'primitive') {\n if (value === null || value === undefined) {\n return undefined;\n }\n return createValueInstance(shape.type as BaseType, value);\n }\n\n if (shape.kind === 'object') {\n if (value === null || value === undefined) {\n return undefined;\n }\n const result: Record<string, any> = {};\n for (const [key, propShape] of Object.entries(shape.properties)) {\n result[key] = parseValue(propShape, value[key]);\n }\n return result;\n }\n\n if (shape.kind === 'array') {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.map(item => parseValue(shape.items, item));\n }\n\n if (shape.kind === 'option') {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (isOption(value)) {\n return value.map(item => parseValue(shape.inner, item));\n }\n return Option.some(parseValue(shape.inner, value));\n }\n\n if (shape.kind === 'value') {\n if (value === null || value === undefined) {\n return undefined;\n }\n return createValueInstance(shape.type as BaseType, value);\n }\n\n throw new Error(`Unknown shape kind: ${(shape as any).kind}`);\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, isOption} from '../value';\nimport {ShapeNode} from '.';\n\nexport function validateShape(shape: ShapeNode, value: any): boolean {\n if (shape.kind === 'primitive') {\n const objectType = shape.type as Type;\n if (value === null || value === undefined) {\n return objectType === 'None';\n }\n\n switch (objectType) {\n case 'Boolean':\n return typeof value === 'boolean';\n case 'Float4':\n case 'Float8':\n case 'Int1':\n case 'Int2':\n case 'Int4':\n return typeof value === 'number';\n case 'Int8':\n case 'Int16':\n case 'Uint8':\n case 'Uint16':\n return typeof value === 'bigint' || typeof value === 'number';\n case 'Uint1':\n case 'Uint2':\n case 'Uint4':\n return typeof value === 'number' && value >= 0;\n case 'Utf8':\n case 'Time':\n case 'Duration':\n case 'Uuid4':\n case 'Uuid7':\n return typeof value === 'string';\n case 'Date':\n case 'DateTime':\n return value instanceof Date || typeof value === 'string';\n case 'Blob':\n return value instanceof Uint8Array || value instanceof ArrayBuffer;\n case 'None':\n return value === undefined;\n default:\n return false;\n }\n }\n\n if (shape.kind === 'object') {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n for (const [key, propShape] of Object.entries(shape.properties)) {\n if (!validateShape(propShape, value[key])) {\n return false;\n }\n }\n return true;\n }\n\n if (shape.kind === 'array') {\n if (!Array.isArray(value)) {\n return false;\n }\n return value.every(item => validateShape(shape.items, item));\n }\n\n if (shape.kind === 'option') {\n if (!isOption(value)) {\n return false;\n }\n return value.isNone() || validateShape(shape.inner, value.unwrap());\n }\n\n if (shape.kind === 'value') {\n if (value === null || value === undefined) {\n return shape.type === 'None';\n }\n if (typeof value === 'object' && value !== null && 'type' in value && 'encode' in value) {\n return value.type === shape.type;\n }\n return false;\n }\n\n return false;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {decode} from '../decoder';\nimport {Type, Value} from '../value';\n\n// A value shape names the type the caller wants to hold, so it has to accept a column whose type the\n// requested one can represent in full. The server picks the narrowest type a literal fits, so\n// `MAP {n: 1}` arrives as Int1 and a caller asking for an Int4Value would otherwise be refused a\n// value that fits with room to spare. A primitive shape has always tolerated the whole numeric\n// family and coerced into it; this is the same tolerance for value shapes.\n//\n// Only widening is allowed. A narrower target would silently drop range, a float target would claim\n// a precision the integer never had, and a different family would change what the value means.\n\ninterface Numeric {\n kind: 'int' | 'uint' | 'float';\n bits: number;\n}\n\nconst NUMERIC: Readonly<Record<string, Numeric>> = {\n Int1: {kind: 'int', bits: 8},\n Int2: {kind: 'int', bits: 16},\n Int4: {kind: 'int', bits: 32},\n Int8: {kind: 'int', bits: 64},\n Int16: {kind: 'int', bits: 128},\n Uint1: {kind: 'uint', bits: 8},\n Uint2: {kind: 'uint', bits: 16},\n Uint4: {kind: 'uint', bits: 32},\n Uint8: {kind: 'uint', bits: 64},\n Uint16: {kind: 'uint', bits: 128},\n Float4: {kind: 'float', bits: 32},\n Float8: {kind: 'float', bits: 64},\n};\n\n/** Whether every value of `actual` is representable as `target`, the type a value shape names. */\nexport function widens(target: string, actual: Type): boolean {\n if (typeof actual !== 'string') {\n return false;\n }\n const t = NUMERIC[target];\n const a = NUMERIC[actual];\n if (!t || !a) {\n return target === actual;\n }\n if (t.kind === 'float' || a.kind === 'float') {\n return t.kind === 'float' && a.kind === 'float' && t.bits >= a.bits;\n }\n if (t.kind === 'uint') {\n return a.kind === 'uint' && t.bits >= a.bits;\n }\n // A signed target holds an unsigned source only when it is strictly wider: Uint1 reaches 255,\n // which an Int1 cannot hold, but an Int2 can.\n return a.kind === 'int' ? t.bits >= a.bits : t.bits > a.bits;\n}\n\n/** Re-reads `value` as `target` when the target is wider; otherwise hands it back untouched. */\nexport function widen(value: any, target: string): any {\n if (!value || typeof value !== 'object' || typeof (value as Value).type !== 'string') {\n return value;\n }\n const actual = (value as Value).type;\n if (actual === target || !widens(target, actual)) {\n return value;\n }\n const inner = (value as any).value;\n if (inner === undefined || inner === null) {\n return value;\n }\n return decode({type: target as Type, value: String(inner)});\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Column, Frame} from '../types';\nimport {\n Type, digestTypeName, fixedPointKind, fixedPointTypeName, isDigestType, isFixedPointType, isListType, isOptionType,\n isRecordType,\n} from '../value';\nimport {ShapeNode} from '.';\nimport {widens} from './widen';\n\nexport class ShapeMismatch extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ShapeMismatch';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport function checkFrames(frames: Frame[], shapes: readonly ShapeNode[]): void {\n if (shapes.length === 0) {\n return;\n }\n if (frames.length !== shapes.length) {\n throw new ShapeMismatch(`expected ${shapes.length} frames for ${shapes.length} shapes, got ${frames.length}`);\n }\n frames.forEach((frame, i) => checkFrame(frame.columns, shapes[i]));\n}\n\nexport function checkFrame(columns: Column[], shape: ShapeNode): void {\n if (shape.kind !== 'object') {\n throw new ShapeMismatch(`a frame needs an object shape, got ${shape.kind}`);\n }\n for (const [name, propertyShape] of Object.entries(shape.properties)) {\n const column = columns.find(c => c.name === name);\n if (!column) {\n throw new ShapeMismatch(`column \"${name}\": expected ${describe(propertyShape)}, missing from frame`);\n }\n if (!matches(propertyShape, column.type)) {\n throw new ShapeMismatch(`column \"${name}\": expected ${describe(propertyShape)}, got ${typeName(column.type)}`);\n }\n }\n}\n\n// A primitive shape decodes every wire type whose value shares its representation, so drift\n// inside a family (Int4 read as Float8) is not drift; None accepts Option columns because a\n// none payload decodes to NoneValue whatever the inner type is.\nconst FAMILIES: readonly (readonly string[])[] = [\n ['Boolean'],\n ['Int1', 'Int2', 'Int4', 'Int8', 'Int16', 'Uint1', 'Uint2', 'Uint4', 'Uint8', 'Uint16', 'Float4', 'Float8'],\n ['Utf8', 'Decimal', 'Duration', 'Uuid4', 'Uuid7', 'IdentityId'],\n ['Date', 'DateTime', 'Time'],\n ['Blob'],\n ['None'],\n];\n\nfunction familyOf(type: string): readonly string[] {\n return FAMILIES.find(family => family.includes(type)) ?? [type];\n}\n\nfunction matches(shape: ShapeNode, type: Type): boolean {\n if (isFixedPointType(type)) {\n const kind = fixedPointKind(type);\n if (shape.kind === 'primitive') return familyOf(shape.type).includes(kind);\n if (shape.kind === 'value') return shape.type === kind;\n return false;\n }\n switch (shape.kind) {\n case 'primitive':\n if (shape.type === 'None') {\n return type === 'None' || isOptionType(type);\n }\n return typeof type === 'string' && familyOf(shape.type).includes(type);\n case 'value':\n if (shape.type === 'None') {\n return type === 'None' || isOptionType(type);\n }\n return type === shape.type || widens(shape.type, type);\n case 'option':\n return isOptionType(type) && matches(shape.inner, type.Option);\n case 'object':\n case 'array':\n return false;\n }\n}\n\nfunction describe(shape: ShapeNode): string {\n switch (shape.kind) {\n case 'primitive':\n case 'value':\n return shape.type;\n case 'option':\n return `Option(${describe(shape.inner)})`;\n case 'object':\n case 'array':\n return shape.kind;\n }\n}\n\nfunction typeName(type: Type): string {\n if (isDigestType(type)) {\n return digestTypeName(type);\n }\n if (isFixedPointType(type)) {\n return fixedPointTypeName(type);\n }\n if (isOptionType(type)) {\n return `Option(${typeName(type.Option)})`;\n }\n if (isListType(type)) {\n return `List(${typeName(type.List)})`;\n }\n if (isRecordType(type)) {\n return `Record(${type.Record.map(field => `${field.name}: ${typeName(field.type)}`).join(', ')})`;\n }\n return type;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {ShapeNode} from '.';\nimport {ShapeMismatch} from './check';\nimport {widen} from './widen';\nimport {NoneValue, Option, noneDepth} from '../value';\nimport {FrameResults} from '../types';\n\nfunction snakeToCamel(key: string): string {\n return key.replace(/_([a-z0-9])/g, (_, c) => c.toUpperCase());\n}\n\nexport function transformFrames<const S extends readonly ShapeNode[]>(\n frames: any[][],\n shapes: S\n): FrameResults<S> {\n const transformed: any[][] = frames.map((frame: any[], frameIndex: number) => {\n const frameShape = shapes[frameIndex];\n if (!frameShape) {\n return frame;\n }\n return frame.map((row: any) => transformResult(row, frameShape));\n });\n return transformed as FrameResults<S>;\n}\n\nexport function transformResult(row: any, resultShape: any): any {\n if (resultShape && resultShape.kind === 'object' && resultShape.properties) {\n const transformedRow: any = {};\n for (const [key, value] of Object.entries(row)) {\n const propertyShape = resultShape.properties[key];\n const outputKey = snakeToCamel(key);\n if (propertyShape && propertyShape.kind === 'primitive') {\n if (value && typeof value === 'object' && typeof (value as any).valueOf === 'function') {\n const rawValue = (value as any).valueOf();\n transformedRow[outputKey] = coerceToPrimitiveType(rawValue, propertyShape.type);\n } else {\n transformedRow[outputKey] = coerceToPrimitiveType(value, propertyShape.type);\n }\n } else if (propertyShape && propertyShape.kind === 'value') {\n transformedRow[outputKey] = widen(value, propertyShape.type);\n } else {\n transformedRow[outputKey] = propertyShape ? transformResult(value, propertyShape) : value;\n }\n }\n return transformedRow;\n }\n\n if (resultShape && resultShape.kind === 'primitive') {\n if (row && typeof row === 'object' && typeof row.valueOf === 'function') {\n return coerceToPrimitiveType(row.valueOf(), resultShape.type);\n }\n return coerceToPrimitiveType(row, resultShape.type);\n }\n\n if (resultShape && resultShape.kind === 'value') {\n return widen(row, resultShape.type);\n }\n\n if (resultShape && resultShape.kind === 'array') {\n if (Array.isArray(row)) {\n return row.map((item: any) => transformResult(item, resultShape.items));\n }\n return row;\n }\n\n if (resultShape && resultShape.kind === 'option') {\n if (row instanceof NoneValue) {\n const remaining = optionLayers(resultShape);\n const depth = noneDepth(row);\n if (depth > remaining) {\n throw new ShapeMismatch(`a none ${depth} layers deep does not fit a shape with ${remaining} option layers`);\n }\n if (depth === remaining) {\n return Option.none(row.innerType);\n }\n }\n return Option.some(transformResult(row, resultShape.inner));\n }\n\n return row;\n}\n\nfunction optionLayers(shape: ShapeNode): number {\n return shape.kind === 'option' ? optionLayers(shape.inner) + 1 : 0;\n}\n\nfunction coerceToPrimitiveType(value: any, valueType: string): any {\n if (value === undefined || value === null) {\n return value;\n }\n\n const bigintTypes = ['Int8', 'Int16', 'Uint8', 'Uint16'];\n if (bigintTypes.includes(valueType)) {\n if (typeof value === 'bigint') {\n return value;\n }\n if (typeof value === 'number') {\n return BigInt(Math.trunc(value));\n }\n if (typeof value === 'string') {\n return BigInt(value);\n }\n }\n\n return value;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\n\nconst ZERO_WIDTH: ReadonlyArray<readonly [number, number]> = [\n [0x0300, 0x036f],\n [0x0483, 0x0489],\n [0x0591, 0x05bd],\n [0x0610, 0x061a],\n [0x064b, 0x065f],\n [0x0e31, 0x0e31],\n [0x0e34, 0x0e3a],\n [0x0eb1, 0x0eb1],\n [0x0eb4, 0x0eb9],\n [0x200b, 0x200f],\n [0x20d0, 0x20ff],\n [0xfe00, 0xfe0f],\n [0xfe20, 0xfe2f],\n [0xfeff, 0xfeff],\n];\n\nconst WIDE: ReadonlyArray<readonly [number, number]> = [\n [0x1100, 0x115f],\n [0x2329, 0x232a],\n [0x2e80, 0x303e],\n [0x3041, 0x33ff],\n [0x3400, 0x4dbf],\n [0x4e00, 0x9fff],\n [0xa000, 0xa4cf],\n [0xa960, 0xa97f],\n [0xac00, 0xd7a3],\n [0xf900, 0xfaff],\n [0xfe10, 0xfe19],\n [0xfe30, 0xfe6f],\n [0xff00, 0xff60],\n [0xffe0, 0xffe6],\n [0x1f300, 0x1f9ff],\n [0x1fa70, 0x1faff],\n [0x20000, 0x3fffd],\n];\n\nfunction inRanges(code: number, ranges: ReadonlyArray<readonly [number, number]>): boolean {\n let low = 0;\n let high = ranges.length - 1;\n while (low <= high) {\n const middle = (low + high) >> 1;\n const [start, end] = ranges[middle];\n if (code < start) high = middle - 1;\n else if (code > end) low = middle + 1;\n else return true;\n }\n return false;\n}\n\nfunction codePointWidth(code: number): number {\n if (code === 0) return 0;\n if (code < 0x20 || (code >= 0x7f && code < 0xa0)) return 0;\n if (inRanges(code, ZERO_WIDTH)) return 0;\n if (inRanges(code, WIDE)) return 2;\n return 1;\n}\n\ninterface GraphemeSegmenter {\n segment(input: string): Iterable<{segment: string}>;\n}\n\ntype GraphemeSegmenterFactory = new (\n locale: string | undefined,\n options: {granularity: 'grapheme'},\n) => GraphemeSegmenter;\n\nfunction createSegmenter(): GraphemeSegmenter | null {\n if (typeof Intl === 'undefined') return null;\n const factory = (Intl as {Segmenter?: GraphemeSegmenterFactory}).Segmenter;\n if (typeof factory !== 'function') return null;\n return new factory(undefined, {granularity: 'grapheme'});\n}\n\nconst segmenter = createSegmenter();\n\nfunction graphemes(text: string): string[] {\n if (segmenter !== null) {\n return Array.from(segmenter.segment(text), (entry) => entry.segment);\n }\n return Array.from(text);\n}\n\nexport function graphemeWidth(grapheme: string): number {\n let width = 0;\n for (const character of grapheme) {\n width += codePointWidth(character.codePointAt(0) ?? 0);\n }\n return Math.min(width, 2);\n}\n\nexport function displayWidth(text: string): number {\n let width = 0;\n for (const grapheme of graphemes(text)) {\n width += graphemeWidth(grapheme);\n }\n return width;\n}\n\nexport function truncateToWidth(text: string, width: number, ellipsis = '…'): string {\n if (width <= 0) return '';\n if (displayWidth(text) <= width) return text;\n\n const markerWidth = displayWidth(ellipsis);\n if (width <= markerWidth) return ellipsis.slice(0, width);\n\n const budget = width - markerWidth;\n let used = 0;\n let result = '';\n for (const grapheme of graphemes(text)) {\n const next = graphemeWidth(grapheme);\n if (used + next > budget) break;\n result += grapheme;\n used += next;\n }\n\n return result + ellipsis;\n}\n\nexport function padToWidth(text: string, width: number, align: 'left' | 'right' | 'center'): string {\n const padding = width - displayWidth(text);\n if (padding <= 0) return text;\n\n if (align === 'right') return ' '.repeat(padding) + text;\n if (align === 'left') return text + ' '.repeat(padding);\n\n const left = Math.floor(padding / 2);\n return ' '.repeat(left) + text + ' '.repeat(padding - left);\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\n\nimport {formatValue, valueRole, valueTypeName, type ValueRole} from './value';\nimport {displayWidth, truncateToWidth} from './width';\n\nexport type ColumnAlign = 'left' | 'right';\n\nexport interface ResultColumn {\n name: string;\n type?: string;\n role: ValueRole;\n align: ColumnAlign;\n}\n\nexport interface PlannedColumn {\n column: ResultColumn;\n width: number;\n}\n\nexport interface TablePlan {\n columns: PlannedColumn[];\n dropped: ResultColumn[];\n truncated: boolean;\n}\n\nexport interface TableLayoutOptions {\n width?: number;\n maxColumnWidth?: number;\n sample?: number;\n columnOverhead?: number;\n tableOverhead?: number;\n}\n\nconst DEFAULT_MAX_COLUMN_WIDTH = 40;\nconst DEFAULT_COLUMN_OVERHEAD = 3;\nconst DEFAULT_TABLE_OVERHEAD = 1;\n\nexport function inferColumns(rows: ReadonlyArray<Record<string, unknown>>): ResultColumn[] {\n const names: string[] = [];\n const seen = new Set<string>();\n\n for (const row of rows) {\n for (const name of Object.keys(row)) {\n if (seen.has(name)) continue;\n seen.add(name);\n names.push(name);\n }\n }\n\n return names.map((name) => {\n let role: ValueRole = 'unknown';\n let type: string | undefined;\n\n for (const row of rows) {\n const value = row[name];\n const candidate = valueRole(value);\n if (candidate === 'none' || candidate === 'unknown') continue;\n role = candidate;\n type = valueTypeName(value);\n break;\n }\n\n return {name, type, role, align: role === 'number' ? 'right' : 'left'};\n });\n}\n\nexport function planTable(\n rows: ReadonlyArray<Record<string, unknown>>,\n columns: ReadonlyArray<ResultColumn>,\n options: TableLayoutOptions = {},\n): TablePlan {\n const maxColumnWidth = options.maxColumnWidth ?? DEFAULT_MAX_COLUMN_WIDTH;\n const columnOverhead = options.columnOverhead ?? DEFAULT_COLUMN_OVERHEAD;\n const tableOverhead = options.tableOverhead ?? DEFAULT_TABLE_OVERHEAD;\n const sample = options.sample ?? rows.length;\n const measured = rows.slice(0, Math.max(sample, 0));\n\n let truncated = false;\n\n const natural = columns.map((column) => {\n let width = displayWidth(column.name);\n for (const row of measured) {\n width = Math.max(width, displayWidth(formatValue(row[column.name])));\n }\n if (width > maxColumnWidth) truncated = true;\n return {column, width: Math.min(width, maxColumnWidth)};\n });\n\n if (options.width === undefined) {\n return {columns: natural, dropped: [], truncated};\n }\n\n const planned: PlannedColumn[] = [];\n const dropped: ResultColumn[] = [];\n let used = tableOverhead;\n\n for (const entry of natural) {\n const required = entry.width + columnOverhead;\n if (planned.length > 0 && used + required > options.width) {\n dropped.push(entry.column);\n continue;\n }\n if (planned.length === 0 && used + required > options.width) {\n const available = options.width - used - columnOverhead;\n const width = Math.max(available, 1);\n if (width < entry.width) truncated = true;\n planned.push({column: entry.column, width});\n used += width + columnOverhead;\n continue;\n }\n planned.push(entry);\n used += required;\n }\n\n return {columns: planned, dropped, truncated};\n}\n\nexport function cellText(value: unknown, width: number): string {\n return truncateToWidth(formatValue(value), width);\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\n\nconst QUERY_TRANSFORMS = [\n 'map', 'extend', 'by', 'from', 'where', 'aggregate', 'having',\n 'sort', 'distinct', 'take', 'offset',\n];\n\nconst JOINS_AND_SET_OPERATIONS = [\n 'left', 'inner', 'natural', 'join', 'on', 'using', 'intersect', 'except',\n];\n\nconst DML = ['insert', 'into', 'update', 'set', 'delete'];\n\nconst CONTROL_FLOW = [\n 'let', 'if', 'else', 'end', 'loop', 'while', 'break', 'continue', 'return',\n];\n\nconst FUNCTIONS_AND_CASTING = ['fun', 'call', 'apply', 'cast'];\n\nconst DDL_AND_SHAPE = [\n 'describe', 'show', 'create', 'alter', 'drop', 'filter', 'gate', 'flow', 'window',\n 'returning',\n];\n\nconst OPERATOR_KEYWORDS = ['in', 'between', 'like', 'is', 'with'];\n\nconst OBJECT_TYPES = [\n 'namespace', 'sequence', 'series', 'subscription', 'table', 'ringbuffer',\n 'column', 'policy', 'property', 'view', 'deferred', 'transactional',\n];\n\nconst INDEX_AND_CONSTRAINTS = [\n 'index', 'unique', 'primary', 'key', 'asc', 'desc', 'auto', 'increment', 'value',\n];\n\nconst MISC_OPERATIONS = [\n 'exists', 'replace', 'cascade', 'restrict', 'to', 'pause', 'resume',\n 'query', 'rename', 'rownum', 'dictionary', 'for', 'output', 'append',\n 'assert', 'patch',\n];\n\nconst ENUMS_AND_PATTERN_MATCHING = ['enum', 'match'];\n\nconst PROCEDURES_AND_EVENTS = ['procedure', 'event', 'handler', 'dispatch', 'tag'];\n\nconst TESTING = ['test', 'tests', 'run'];\n\nconst ACCESS_CONTROL = [\n 'user', 'role', 'grant', 'revoke', 'password', 'require', 'execute',\n 'access', 'subscribe', 'enable', 'disable',\n];\n\nconst SYSTEM_OBJECTS = ['function', 'session', 'feature'];\n\nconst MIGRATIONS = [\n 'add', 'migration', 'migrate', 'rollback', 'diff', 'version', 'current', 'pending',\n];\n\nconst MISC = ['authentication', 'contains', 'remote', 'error'];\n\nconst ADDITIONAL_CONSTRUCTS = ['derive', 'group', 'union', 'as'];\n\nconst WORD_OPERATORS = ['and', 'or', 'not', 'xor'];\n\nexport const RQL_KEYWORDS: readonly string[] = [\n ...QUERY_TRANSFORMS,\n ...JOINS_AND_SET_OPERATIONS,\n ...DML,\n ...CONTROL_FLOW,\n ...FUNCTIONS_AND_CASTING,\n ...DDL_AND_SHAPE,\n ...OPERATOR_KEYWORDS,\n ...OBJECT_TYPES,\n ...INDEX_AND_CONSTRAINTS,\n ...MISC_OPERATIONS,\n ...ENUMS_AND_PATTERN_MATCHING,\n ...PROCEDURES_AND_EVENTS,\n ...TESTING,\n ...ACCESS_CONTROL,\n ...SYSTEM_OBJECTS,\n ...MIGRATIONS,\n ...MISC,\n ...ADDITIONAL_CONSTRUCTS,\n ...WORD_OPERATORS,\n];\n\nexport const RQL_LITERALS: readonly string[] = ['none', 'true', 'false'];\n\nconst SIGNED_INTEGERS = ['int1', 'int2', 'int4', 'int8', 'int16', 'int'];\n\nconst UNSIGNED_INTEGERS = ['uint1', 'uint2', 'uint4', 'uint8', 'uint16', 'uint'];\n\nconst FLOATING_POINT = ['float4', 'float8'];\n\nconst TEXT_AND_BINARY = ['utf8', 'blob', 'text'];\n\nconst BOOLEAN = ['bool', 'boolean'];\n\nconst NUMERIC = ['decimal'];\n\nconst TEMPORAL = ['date', 'datetime', 'time', 'duration', 'interval'];\n\nconst IDENTIFIERS_AND_UUIDS = [\n 'uuid4', 'uuid7', 'identityid', 'identity_id', 'dictionaryid', 'dictionary_id',\n];\n\nconst CONTAINERS = ['Option', 'List', 'Record', 'Tuple'];\n\nexport const RQL_TYPES: readonly string[] = [\n ...SIGNED_INTEGERS,\n ...UNSIGNED_INTEGERS,\n ...FLOATING_POINT,\n ...TEXT_AND_BINARY,\n ...BOOLEAN,\n ...NUMERIC,\n ...TEMPORAL,\n ...IDENTIFIERS_AND_UUIDS,\n ...CONTAINERS,\n 'any',\n];\n\nexport const RQL_OPERATORS: readonly string[] = [\n '+', '-', '*', '/', '//', '%', '=', '==', '!=', '->', '=>', '>', '<', '>=', '<=',\n '~=', '&&', '||', '??',\n];\n\nexport const RQL_SYSTEM_COLUMNS: readonly string[] = ['rownum', 'created_at', 'updated_at'];\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\n\nimport {RQL_KEYWORDS, RQL_LITERALS, RQL_TYPES} from './keyword';\n\nexport type RqlTokenKind =\n | 'keyword'\n | 'type'\n | 'constant'\n | 'identifier'\n | 'namespace'\n | 'entity'\n | 'function'\n | 'key'\n | 'variable'\n | 'variable.predefined'\n | 'comment'\n | 'string'\n | 'number'\n | 'operator'\n | 'delimiter'\n | 'bracket'\n | 'white';\n\nexport interface RqlToken {\n kind: RqlTokenKind;\n start: number;\n end: number;\n}\n\nconst KEYWORD_SET = new Set(RQL_KEYWORDS.map((entry) => entry.toLowerCase()));\nconst LITERAL_SET = new Set(RQL_LITERALS.map((entry) => entry.toLowerCase()));\nconst TYPE_SET = new Set(RQL_TYPES.map((entry) => entry.toLowerCase()));\n\nconst SYSTEM_COLUMN = /#(?:rownum|created_at|updated_at)\\b/y;\nconst COMMENT = /#.*/y;\nconst NAMESPACE_HEAD = /[a-zA-Z_][\\w$]*(?=\\s*::)/y;\nconst NAMESPACE_SEPARATOR = /::/y;\nconst NAMED_ARGUMENT = /\\w+\\s*:(?!:)/y;\nconst VARIABLE = /\\$[\\w$]+/y;\nconst CALL_NAME = /[a-zA-Z_][\\w$]*(?=\\s*\\()/y;\nconst WORD = /[a-zA-Z_][\\w$]*/y;\nconst WHITESPACE = /[ \\t\\r\\n]+/y;\nconst BRACKET = /[{}()[\\]]/y;\nconst NUMBER = /[+-]?(?:[\\d_]+(?:\\.[\\d_]+)?|\\.[\\d_]+)(?:[eE][+-]?\\d+)?/y;\nconst OPERATOR = /<<|>>|\\.\\.|==|!=|->|=>|>=|<=|~=|:=|&&|\\|\\||\\?\\?|\\/\\/|[+\\-*/%|.=<>!&^?]/y;\nconst DELIMITER = /[;,]/y;\n\nfunction match(pattern: RegExp, source: string, position: number): string | null {\n pattern.lastIndex = position;\n const result = pattern.exec(source);\n return result === null ? null : result[0];\n}\n\nfunction classifyWord(word: string): RqlTokenKind {\n const lowered = word.toLowerCase();\n if (KEYWORD_SET.has(lowered)) return 'keyword';\n if (LITERAL_SET.has(lowered)) return 'constant';\n if (TYPE_SET.has(lowered)) return 'type';\n return 'identifier';\n}\n\nfunction classifyCall(word: string): RqlTokenKind {\n const lowered = word.toLowerCase();\n if (KEYWORD_SET.has(lowered)) return 'keyword';\n if (TYPE_SET.has(lowered)) return 'type';\n return 'function';\n}\n\nfunction scanString(source: string, position: number): number {\n const quote = source[position];\n let index = position + 1;\n while (index < source.length) {\n const char = source[index];\n if (char === '\\\\') {\n index += 2;\n continue;\n }\n index++;\n if (char === quote) break;\n }\n return Math.min(index, source.length);\n}\n\nexport function tokenizeRql(source: string): RqlToken[] {\n const tokens: RqlToken[] = [];\n let position = 0;\n let afterSeparator = false;\n\n const push = (kind: RqlTokenKind, end: number): void => {\n tokens.push({kind, start: position, end});\n position = end;\n };\n\n while (position < source.length) {\n if (afterSeparator) {\n const white = match(WHITESPACE, source, position);\n if (white !== null) {\n push('white', position + white.length);\n continue;\n }\n\n const chained = match(NAMESPACE_HEAD, source, position);\n if (chained !== null) {\n afterSeparator = false;\n push('namespace', position + chained.length);\n continue;\n }\n\n const called = match(CALL_NAME, source, position);\n if (called !== null) {\n afterSeparator = false;\n push('function', position + called.length);\n continue;\n }\n\n const leaf = match(WORD, source, position);\n if (leaf !== null) {\n afterSeparator = false;\n push('entity', position + leaf.length);\n continue;\n }\n\n afterSeparator = false;\n }\n\n const systemColumn = match(SYSTEM_COLUMN, source, position);\n if (systemColumn !== null) {\n push('variable.predefined', position + systemColumn.length);\n continue;\n }\n\n const comment = match(COMMENT, source, position);\n if (comment !== null) {\n push('comment', position + comment.length);\n continue;\n }\n\n const namespace = match(NAMESPACE_HEAD, source, position);\n if (namespace !== null) {\n push('namespace', position + namespace.length);\n continue;\n }\n\n const separator = match(NAMESPACE_SEPARATOR, source, position);\n if (separator !== null) {\n afterSeparator = true;\n push('operator', position + separator.length);\n continue;\n }\n\n const namedArgument = match(NAMED_ARGUMENT, source, position);\n if (namedArgument !== null) {\n push('key', position + namedArgument.length);\n continue;\n }\n\n const variable = match(VARIABLE, source, position);\n if (variable !== null) {\n push('variable', position + variable.length);\n continue;\n }\n\n const call = match(CALL_NAME, source, position);\n if (call !== null) {\n push(classifyCall(call), position + call.length);\n continue;\n }\n\n const word = match(WORD, source, position);\n if (word !== null) {\n push(classifyWord(word), position + word.length);\n continue;\n }\n\n const white = match(WHITESPACE, source, position);\n if (white !== null) {\n push('white', position + white.length);\n continue;\n }\n\n const bracket = match(BRACKET, source, position);\n if (bracket !== null) {\n push('bracket', position + bracket.length);\n continue;\n }\n\n const number = match(NUMBER, source, position);\n if (number !== null) {\n push('number', position + number.length);\n continue;\n }\n\n const char = source[position];\n if (char === '\"' || char === \"'\") {\n push('string', scanString(source, position));\n continue;\n }\n\n const operator = match(OPERATOR, source, position);\n if (operator !== null) {\n push('operator', position + operator.length);\n continue;\n }\n\n const delimiter = match(DELIMITER, source, position);\n if (delimiter !== null) {\n push('delimiter', position + delimiter.length);\n continue;\n }\n\n push('identifier', position + 1);\n }\n\n return tokens;\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2026 ReifyDB\nimport {Type, TypeValuePair, WireCellValue} from './value';\nimport {ShapeNode, InferShape} from './shape';\n\nexport type Params = (TypeValuePair | null)[] | Record<string, TypeValuePair | null>;\n\nexport interface Frame {\n columns: Column[];\n}\n\nexport interface DiagnosticColumn {\n name: string,\n type: Type,\n}\n\nexport interface Fragment {\n text: string\n line?: number,\n column?: number,\n}\n\nexport interface Diagnostic {\n code: string,\n rql?: string;\n message: string,\n column?: DiagnosticColumn,\n fragment?: Fragment,\n label?: string,\n help?: string,\n notes: Array<string>,\n cause?: Diagnostic,\n}\n\nexport interface Column {\n name: string;\n type: Type;\n payload: WireCellValue[];\n}\n\nexport interface ErrorResponse {\n id: string;\n type: \"Err\";\n payload: {\n diagnostic: Diagnostic;\n };\n}\n\nexport class ReifyError extends Error {\n public readonly code: string;\n public readonly rql?: string;\n public readonly column?: DiagnosticColumn;\n public readonly fragment?: Fragment;\n public readonly label?: string;\n public readonly help?: string;\n public readonly notes: string[];\n public readonly cause?: Diagnostic;\n\n constructor(response: ErrorResponse) {\n const diagnostic = response.payload.diagnostic;\n const message = `[${diagnostic.code}] ${diagnostic.message}` +\n (diagnostic.label ? ` — ${diagnostic.label}` : \"\");\n\n super(message);\n\n this.name = \"ReifyError\";\n this.code = diagnostic.code;\n this.rql = diagnostic.rql;\n this.column = diagnostic.column;\n this.fragment = diagnostic.fragment;\n this.label = diagnostic.label;\n this.help = diagnostic.help;\n this.notes = diagnostic.notes ?? [];\n this.cause = diagnostic.cause;\n\n // Required for instanceof checks to work properly\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n toString(): string {\n const position = this.fragment\n ? `line ${this.fragment.line}, offset ${this.fragment.column}`\n : \"unknown position\";\n\n const notes = this.notes.length\n ? `\\nNotes:\\n- ${this.notes.join(\"\\n- \")}`\n : \"\";\n\n const help = this.help\n ? `\\nHelp: ${this.help}`\n : \"\";\n\n return `${this.name}: ${this.message}\\nAt ${position}${help}${notes}`;\n }\n}\n\n/**\n * Simplified type for inferring frame results to avoid deep instantiation\n * This provides a workaround for TypeScript's limitation with deeply nested types\n */\nexport type FrameResults<S extends readonly ShapeNode[]> =\n S extends readonly [infer First, ...infer Rest]\n ? First extends ShapeNode\n ? Rest extends readonly ShapeNode[]\n ? [InferShape<First>[], ...FrameResults<Rest>]\n : [InferShape<First>[]]\n : never\n : [];\n\n/**\n * Helper type to extract a single frame result\n */\nexport type SingleFrameResult<S extends ShapeNode> = InferShape<S>[];\n\n/**\n * Type-safe cast helper for frame results\n */\nexport function asFrameResults<S extends readonly ShapeNode[]>(\n results: any\n): FrameResults<S> {\n return results as FrameResults<S>;\n}\n"],"mappings":"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","names":["hex","match","match","match","version","match","hex","NIL_UUID","validate","version","validate","version","NIL_UUID","hex","uuidv7","NIL_UUID","validate","version","validate","version","NIL_UUID","uuidv7","hex","hasToJSON","hasToJSON","Value","version","hex","typeName","NUMERIC","white"]}
|