@query-farm/vgi 0.20.0 → 0.22.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/arrow/impl-arrowjs/index.d.ts +7 -0
- package/dist/arrow/impl-flechette/arrowjs-shape.d.ts +16 -0
- package/dist/arrow/impl-flechette/compat.d.ts +22 -0
- package/dist/arrow/impl-flechette/index.d.ts +2 -0
- package/dist/arrow/impl-flechette/ipc.d.ts +1 -1
- package/dist/arrow/index.d.ts +2 -2
- package/dist/arrow/predicates.d.ts +16 -0
- package/dist/cache-control.d.ts +33 -0
- package/dist/catalog/composite.d.ts +2 -0
- package/dist/catalog/interface.d.ts +11 -0
- package/dist/client-entry.js +9 -3
- package/dist/client-entry.js.map +7 -7
- package/dist/functions/registry.d.ts +31 -0
- package/dist/functions/scalar.d.ts +7 -3
- package/dist/generated/vgi-client.d.ts +16 -0
- package/dist/index.core.d.ts +2 -2
- package/dist/index.js +175 -19
- package/dist/index.js.map +19 -19
- package/dist/protocol/handlers/function.d.ts +8 -0
- package/dist/protocol/handlers/shared.d.ts +4 -0
- package/dist/protocol/types.d.ts +8 -0
- package/dist/serve-entry.js +40 -13
- package/dist/serve-entry.js.map +10 -10
- package/dist/util/arrow/index.d.ts +1 -1
- package/dist/worker-cf-entry.js +167 -17
- package/dist/worker-cf-entry.js.map +17 -17
- package/dist/worker.d.ts +9 -0
- package/package.json +5 -5
- package/src/arrow/impl-arrowjs/index.ts +10 -0
- package/src/arrow/impl-flechette/arrowjs-shape.ts +78 -0
- package/src/arrow/impl-flechette/canonical.ts +19 -0
- package/src/arrow/impl-flechette/compat.ts +254 -0
- package/src/arrow/impl-flechette/empty.ts +5 -1
- package/src/arrow/impl-flechette/index.ts +8 -0
- package/src/arrow/impl-flechette/ipc.ts +72 -6
- package/src/arrow/impl-flechette/normalize-type.ts +10 -2
- package/src/arrow/impl-flechette/schema.ts +13 -9
- package/src/arrow/index.ts +3 -0
- package/src/arrow/predicates.ts +59 -0
- package/src/cache-control.ts +35 -0
- package/src/catalog/composite.ts +9 -0
- package/src/catalog/interface.ts +15 -0
- package/src/catalog/read-only.ts +13 -0
- package/src/functions/registry.ts +127 -5
- package/src/functions/scalar.ts +10 -5
- package/src/generated/vgi-client.ts +17 -1
- package/src/index.core.ts +4 -0
- package/src/protocol/dispatch.ts +1 -0
- package/src/protocol/handlers/function.ts +38 -9
- package/src/protocol/handlers/shared.ts +25 -1
- package/src/protocol/serializers/bind.ts +7 -0
- package/src/protocol/types.ts +8 -0
- package/src/util/arrow/index.ts +1 -0
- package/src/worker.ts +15 -1
package/dist/index.js.map
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/arrow/predicates.ts", "../src/arrow/impl-arrowjs/schema.ts", "../src/arrow/impl-arrowjs/empty.ts", "../src/arrow/codec/registry.ts", "../src/arrow/impl-arrowjs/canonical.ts", "../src/arrow/impl-arrowjs/build.ts", "../src/arrow/impl-arrowjs/iterate.ts", "../src/arrow/impl-arrowjs/filter.ts", "../src/arrow/impl-arrowjs/project.ts", "../src/arrow/impl-arrowjs/metadata.ts", "../src/arrow/impl-arrowjs/ipc.ts", "../src/arrow/impl-arrowjs/statistics.ts", "../src/arrow/impl-arrowjs/index.ts", "../src/arrow/schema-types.ts", "../src/arrow/codec/branded.ts", "../src/arrow/index.ts", "../src/functions/storage-cf-do.ts", "../src/functions/storage.ts", "../src/cache-control.ts", "../src/functions/scalar.ts", "../src/types.ts", "../src/errors.ts", "../src/arguments/argument-spec.ts", "../src/util/arrow/index.ts", "../src/functions/table.ts", "../src/filter-pushdown/types.ts", "../src/filter-pushdown/evaluate.ts", "../src/filter-pushdown/deserialize.ts", "../src/filter-pushdown/collector.ts", "../src/functions/aggregate.ts", "../src/functions/table-in-out.ts", "../src/protocol/state-serializer.ts", "../src/util/bytes.ts", "../src/functions/table-buffering.ts", "../src/protocol/serializers/arguments.ts", "../src/arguments/arguments.ts", "../src/protocol/serializers/bind.ts", "../src/protocol/serializers/shared.ts", "../src/protocol/serializers/init.ts", "../src/protocol/serializers/cardinality.ts", "../src/functions/copy-from.ts", "../src/functions/copy-to.ts", "../src/codec/asd.ts", "../src/generated/vgi-protocol-schemas.ts", "../src/generated/vgi-client.ts", "../src/catalog/interface.ts", "../src/catalog/read-only.ts", "../src/util/statistics.ts", "../src/metadata/types.ts", "../src/metadata/resolve.ts", "../src/catalog/composite.ts", "../src/functions/registry.ts", "../src/metadata/serialize.ts", "../src/protocol/dispatch.ts", "../src/protocol/handlers/function.ts", "../src/protocol/handlers/shared.ts", "../src/protocol/handlers/catalog/shared.ts", "../node_modules/@noble/ciphers/utils.js", "../node_modules/@noble/ciphers/_arx.js", "../node_modules/@noble/ciphers/_poly1305.js", "../node_modules/@noble/ciphers/chacha.js", "../src/crypto.ts", "../src/protocol/handlers/aggregate.ts", "../src/protocol/handlers/table-buffering.ts", "../src/protocol/handlers/catalog/admin.ts", "../src/protocol/handlers/catalog/table.ts", "../src/protocol/handlers/catalog/view.ts", "../src/protocol/handlers/catalog/macro.ts", "../src/protocol/handlers/catalog/index_methods.ts", "../src/protocol/handlers/catalog/index.ts", "../src/http/describe-json.ts", "../src/catalog/attach-option.ts", "../src/secrets/helpers.ts", "../src/index.core.ts", "../src/client/client.ts", "../src/client/protocol.ts", "../src/catalog/attach-options.ts", "../src/client/errors.ts", "../src/client/helpers.ts", "../src/worker.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Backend-agnostic Arrow type predicates. Both arrow-js and flechette\n// expose `typeId` on every DataType with identical numeric values, so a\n// single `t.typeId === N` check works regardless of the active backend.\n\nimport type { VgiDataType } from \"./types.js\";\n\nexport const TypeId = {\n Null: 1,\n Int: 2,\n Float: 3,\n Binary: 4,\n Utf8: 5,\n Bool: 6,\n Decimal: 7,\n Date: 8,\n Time: 9,\n Timestamp: 10,\n Interval: 11,\n List: 12,\n Struct: 13,\n Union: 14,\n FixedSizeBinary: 15,\n FixedSizeList: 16,\n Map: 17,\n Duration: 18,\n LargeBinary: 19,\n LargeUtf8: 20,\n Dictionary: -1,\n} as const;\n\nexport function isNull(t: VgiDataType): boolean { return t.typeId === TypeId.Null; }\nexport function isInt(t: VgiDataType): boolean { return t.typeId === TypeId.Int; }\nexport function isFloat(t: VgiDataType): boolean { return t.typeId === TypeId.Float; }\nexport function isBinary(t: VgiDataType): boolean {\n return t.typeId === TypeId.Binary || t.typeId === TypeId.LargeBinary;\n}\nexport function isUtf8(t: VgiDataType): boolean {\n return t.typeId === TypeId.Utf8 || t.typeId === TypeId.LargeUtf8;\n}\nexport function isBool(t: VgiDataType): boolean { return t.typeId === TypeId.Bool; }\nexport function isDecimal(t: VgiDataType): boolean { return t.typeId === TypeId.Decimal; }\nexport function isDate(t: VgiDataType): boolean { return t.typeId === TypeId.Date; }\nexport function isTime(t: VgiDataType): boolean { return t.typeId === TypeId.Time; }\nexport function isTimestamp(t: VgiDataType): boolean { return t.typeId === TypeId.Timestamp; }\nexport function isInterval(t: VgiDataType): boolean { return t.typeId === TypeId.Interval; }\nexport function isList(t: VgiDataType): boolean { return t.typeId === TypeId.List; }\nexport function isStruct(t: VgiDataType): boolean { return t.typeId === TypeId.Struct; }\nexport function isUnion(t: VgiDataType): boolean { return t.typeId === TypeId.Union; }\nexport function isFixedSizeBinary(t: VgiDataType): boolean { return t.typeId === TypeId.FixedSizeBinary; }\nexport function isFixedSizeList(t: VgiDataType): boolean { return t.typeId === TypeId.FixedSizeList; }\nexport function isMap(t: VgiDataType): boolean { return t.typeId === TypeId.Map; }\nexport function isDuration(t: VgiDataType): boolean { return t.typeId === TypeId.Duration; }\nexport function isDictionary(t: VgiDataType): boolean { return t.typeId === TypeId.Dictionary; }\n\n/** Runtime check: does `x` quack like a VgiBatch? Used at API boundaries\n * where callers may pass either a batch or a plain column dict. Duck-typed\n * because arrow-js and flechette use unrelated classes. */\nexport function isBatch(x: unknown): x is import(\"./types.js\").VgiBatch {\n return (\n x != null &&\n typeof (x as any).numRows === \"number\" &&\n (x as any).schema != null &&\n Array.isArray((x as any).schema.fields)\n );\n}\n",
|
|
5
|
+
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Backend-agnostic Arrow type predicates. Both arrow-js and flechette\n// expose `typeId` on every DataType with identical numeric values, so a\n// single `t.typeId === N` check works regardless of the active backend.\n\nimport type { VgiDataType } from \"./types.js\";\n\nexport const TypeId = {\n Null: 1,\n Int: 2,\n Float: 3,\n Binary: 4,\n Utf8: 5,\n Bool: 6,\n Decimal: 7,\n Date: 8,\n Time: 9,\n Timestamp: 10,\n Interval: 11,\n List: 12,\n Struct: 13,\n Union: 14,\n FixedSizeBinary: 15,\n FixedSizeList: 16,\n Map: 17,\n Duration: 18,\n LargeBinary: 19,\n LargeUtf8: 20,\n Dictionary: -1,\n} as const;\n\nexport function isNull(t: VgiDataType): boolean { return t.typeId === TypeId.Null; }\nexport function isInt(t: VgiDataType): boolean { return t.typeId === TypeId.Int; }\nexport function isFloat(t: VgiDataType): boolean { return t.typeId === TypeId.Float; }\nexport function isBinary(t: VgiDataType): boolean {\n return t.typeId === TypeId.Binary || t.typeId === TypeId.LargeBinary;\n}\nexport function isUtf8(t: VgiDataType): boolean {\n return t.typeId === TypeId.Utf8 || t.typeId === TypeId.LargeUtf8;\n}\nexport function isBool(t: VgiDataType): boolean { return t.typeId === TypeId.Bool; }\nexport function isDecimal(t: VgiDataType): boolean { return t.typeId === TypeId.Decimal; }\nexport function isDate(t: VgiDataType): boolean { return t.typeId === TypeId.Date; }\nexport function isTime(t: VgiDataType): boolean { return t.typeId === TypeId.Time; }\nexport function isTimestamp(t: VgiDataType): boolean { return t.typeId === TypeId.Timestamp; }\nexport function isInterval(t: VgiDataType): boolean { return t.typeId === TypeId.Interval; }\nexport function isList(t: VgiDataType): boolean { return t.typeId === TypeId.List; }\nexport function isStruct(t: VgiDataType): boolean { return t.typeId === TypeId.Struct; }\nexport function isUnion(t: VgiDataType): boolean { return t.typeId === TypeId.Union; }\nexport function isFixedSizeBinary(t: VgiDataType): boolean { return t.typeId === TypeId.FixedSizeBinary; }\nexport function isFixedSizeList(t: VgiDataType): boolean { return t.typeId === TypeId.FixedSizeList; }\nexport function isMap(t: VgiDataType): boolean { return t.typeId === TypeId.Map; }\nexport function isDuration(t: VgiDataType): boolean { return t.typeId === TypeId.Duration; }\nexport function isDictionary(t: VgiDataType): boolean { return t.typeId === TypeId.Dictionary; }\n\n/**\n * Stable structural identity for an Arrow type, usable for equality.\n *\n * `String(type)` is NOT usable for this: arrow-js DataTypes are class\n * instances with a meaningful `toString()` (\"Int64\", \"Utf8\", …), while\n * flechette types are plain object literals that stringify to\n * \"[object Object]\". Comparing with `toString()` therefore reports *every*\n * flechette type as equal to every other, and never equal to a declared\n * arrow-js type — which collapsed overload resolution to a first-match tie\n * (`type_info(42::BIGINT)` picked the INTEGER overload).\n *\n * Both libraries agree on `typeId` and on the parameter *values*; they differ\n * only on a few property names, so those are read under both spellings. The\n * output is an opaque key — compare it, don't display it.\n */\nexport function typeSignature(t: VgiDataType | null | undefined): string {\n if (t == null) return \"null\";\n const a = t as any;\n const kids = (): string =>\n Array.isArray(a.children)\n ? a.children.map((c: any) => `${c?.name ?? \"\"}:${typeSignature(c?.type ?? c)}`).join(\",\")\n : \"\";\n switch (t.typeId) {\n case TypeId.Int:\n return `int${a.bitWidth}${(a.isSigned ?? a.signed ?? true) ? \"\" : \"u\"}`;\n case TypeId.Float:\n return `float${a.precision}`;\n case TypeId.Decimal:\n return `decimal${a.bitWidth ?? 128}(${a.precision},${a.scale})`;\n case TypeId.Date:\n case TypeId.Time:\n case TypeId.Duration:\n return `${t.typeId}[${a.unit}]`;\n case TypeId.Timestamp:\n return `ts[${a.unit},${a.timezone ?? \"\"}]`;\n case TypeId.Interval:\n return `iv[${a.unit}]`;\n case TypeId.FixedSizeBinary:\n return `fsb(${a.byteWidth ?? a.stride})`;\n case TypeId.FixedSizeList:\n return `fsl(${a.listSize ?? a.stride},${kids()})`;\n case TypeId.List:\n case TypeId.Struct:\n case TypeId.Map:\n return `${t.typeId}<${kids()}>`;\n case TypeId.Union:\n return `union(${a.mode},${kids()})`;\n case TypeId.Dictionary:\n return `dict(${typeSignature(a.dictionary)},${typeSignature(a.indices)},${\n a.ordered ?? a.isOrdered ?? false\n })`;\n default:\n // Covers the parameterless types (Null, Bool, Utf8, Binary and their\n // Large variants) plus anything not enumerated above; children are\n // folded in when present so a nested type still differentiates.\n return Array.isArray(a.children) ? `${t.typeId}<${kids()}>` : String(t.typeId);\n }\n}\n\n/** Runtime check: does `x` quack like a VgiBatch? Used at API boundaries\n * where callers may pass either a batch or a plain column dict. Duck-typed\n * because arrow-js and flechette use unrelated classes. */\nexport function isBatch(x: unknown): x is import(\"./types.js\").VgiBatch {\n return (\n x != null &&\n typeof (x as any).numRows === \"number\" &&\n (x as any).schema != null &&\n Array.isArray((x as any).schema.fields)\n );\n}\n",
|
|
6
6
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Factory-style constructors for arrow-js Schema/Field/DataType values.\n// Mirrors flechette's API so internal code can call the same factory\n// regardless of the active backend.\n\nimport {\n Schema as A_Schema,\n Field as A_Field,\n Null as A_Null,\n Bool as A_Bool,\n Int8 as A_Int8,\n Int16 as A_Int16,\n Int32 as A_Int32,\n Int64 as A_Int64,\n Uint8 as A_Uint8,\n Uint16 as A_Uint16,\n Uint32 as A_Uint32,\n Uint64 as A_Uint64,\n Float16 as A_Float16,\n Float32 as A_Float32,\n Float64 as A_Float64,\n Utf8 as A_Utf8,\n Binary as A_Binary,\n Decimal as A_Decimal,\n Date_ as A_Date,\n Time as A_Time,\n Timestamp as A_Timestamp,\n Duration as A_Duration,\n Interval as A_Interval,\n List as A_List,\n Struct as A_Struct,\n Map_ as A_Map,\n Dictionary as A_Dictionary,\n SparseUnion as A_SparseUnion,\n DenseUnion as A_DenseUnion,\n FixedSizeBinary as A_FixedSizeBinary,\n FixedSizeList as A_FixedSizeList,\n DateUnit as A_DateUnit,\n TimeUnit as A_TimeUnit,\n IntervalUnit as A_IntervalUnit,\n UnionMode as A_UnionMode,\n type DataType,\n} from \"@query-farm/apache-arrow\";\n\nimport type { VgiField, VgiSchema, VgiDataType } from \"../types.js\";\n\n// ----- TimeUnit / DateUnit / UnionMode constants ---------------------------\n// Numeric values match the Arrow IPC spec; both arrow-js and flechette\n// use the same integers, so internal code can freely cross backends.\n\nexport const TimeUnit = {\n SECOND: A_TimeUnit.SECOND,\n MILLISECOND: A_TimeUnit.MILLISECOND,\n MICROSECOND: A_TimeUnit.MICROSECOND,\n NANOSECOND: A_TimeUnit.NANOSECOND,\n} as const;\n\nexport const DateUnit = {\n DAY: A_DateUnit.DAY,\n MILLISECOND: A_DateUnit.MILLISECOND,\n} as const;\n\nexport const IntervalUnit = {\n YEAR_MONTH: A_IntervalUnit.YEAR_MONTH,\n DAY_TIME: A_IntervalUnit.DAY_TIME,\n MONTH_DAY_NANO: A_IntervalUnit.MONTH_DAY_NANO,\n} as const;\n\nexport const UnionMode = {\n Sparse: A_UnionMode.Sparse,\n Dense: A_UnionMode.Dense,\n} as const;\n\n// ----- Schema / Field ------------------------------------------------------\n\nexport function schema(\n fields: readonly VgiField[],\n metadata?: Map<string, string>,\n): VgiSchema {\n return new A_Schema(\n fields as A_Field[],\n metadata ?? new Map(),\n ) as unknown as VgiSchema;\n}\n\nexport function field(\n name: string,\n type: VgiDataType,\n nullable = true,\n metadata?: Map<string, string>,\n): VgiField {\n return new A_Field(\n name,\n type as DataType,\n nullable,\n metadata ?? new Map(),\n ) as unknown as VgiField;\n}\n\n// ----- Primitive types -----------------------------------------------------\n\nexport const nullType = (): VgiDataType => new A_Null() as unknown as VgiDataType;\nexport const bool = (): VgiDataType => new A_Bool() as unknown as VgiDataType;\n\nexport const int8 = (): VgiDataType => new A_Int8() as unknown as VgiDataType;\nexport const int16 = (): VgiDataType => new A_Int16() as unknown as VgiDataType;\nexport const int32 = (): VgiDataType => new A_Int32() as unknown as VgiDataType;\nexport const int64 = (): VgiDataType => new A_Int64() as unknown as VgiDataType;\nexport const uint8 = (): VgiDataType => new A_Uint8() as unknown as VgiDataType;\nexport const uint16 = (): VgiDataType => new A_Uint16() as unknown as VgiDataType;\nexport const uint32 = (): VgiDataType => new A_Uint32() as unknown as VgiDataType;\nexport const uint64 = (): VgiDataType => new A_Uint64() as unknown as VgiDataType;\nexport function int(bitWidth: 8 | 16 | 32 | 64 = 32, signed = true): VgiDataType {\n if (signed) {\n switch (bitWidth) {\n case 8: return int8();\n case 16: return int16();\n case 32: return int32();\n case 64: return int64();\n }\n } else {\n switch (bitWidth) {\n case 8: return uint8();\n case 16: return uint16();\n case 32: return uint32();\n case 64: return uint64();\n }\n }\n throw new Error(`int: unsupported bitWidth ${bitWidth}`);\n}\n\nexport const float16 = (): VgiDataType => new A_Float16() as unknown as VgiDataType;\nexport const float32 = (): VgiDataType => new A_Float32() as unknown as VgiDataType;\nexport const float64 = (): VgiDataType => new A_Float64() as unknown as VgiDataType;\n\nexport const utf8 = (): VgiDataType => new A_Utf8() as unknown as VgiDataType;\nexport const binary = (): VgiDataType => new A_Binary() as unknown as VgiDataType;\nexport const fixedSizeBinary = (byteWidth: number): VgiDataType =>\n new A_FixedSizeBinary(byteWidth) as unknown as VgiDataType;\n\n// ----- Decimal -------------------------------------------------------------\n\nexport function decimal(\n precision: number,\n scale: number,\n bitWidth: 32 | 64 | 128 | 256 = 128,\n): VgiDataType {\n // arrow-js's Decimal constructor signature is (scale, precision, bitWidth) —\n // the OPPOSITE order of our facade (precision, scale). Passing them in facade\n // order made arrow-js report `.precision`/`.scale` swapped versus flechette.\n // Swap here so a facade-built decimal reports identical precision/scale on\n // both backends.\n return new A_Decimal(scale, precision, bitWidth) as unknown as VgiDataType;\n}\nexport const decimal128 = (precision: number, scale: number): VgiDataType =>\n decimal(precision, scale, 128);\nexport const decimal256 = (precision: number, scale: number): VgiDataType =>\n decimal(precision, scale, 256);\n\n// ----- Date / Time / Timestamp / Duration / Interval -----------------------\n\nexport const date = (unit: number = A_DateUnit.MILLISECOND): VgiDataType =>\n new A_Date(unit) as unknown as VgiDataType;\nexport const dateDay = (): VgiDataType => date(A_DateUnit.DAY);\nexport const dateMillisecond = (): VgiDataType => date(A_DateUnit.MILLISECOND);\n\nexport function time(unit: number = A_TimeUnit.MILLISECOND, bitWidth?: 32 | 64): VgiDataType {\n const bw = bitWidth ?? (unit <= A_TimeUnit.MILLISECOND ? 32 : 64);\n return new A_Time(unit, bw) as unknown as VgiDataType;\n}\nexport const timeSecond = (): VgiDataType => time(A_TimeUnit.SECOND, 32);\nexport const timeMillisecond = (): VgiDataType => time(A_TimeUnit.MILLISECOND, 32);\nexport const timeMicrosecond = (): VgiDataType => time(A_TimeUnit.MICROSECOND, 64);\nexport const timeNanosecond = (): VgiDataType => time(A_TimeUnit.NANOSECOND, 64);\n\nexport const timestamp = (\n unit: number = A_TimeUnit.MILLISECOND,\n timezone: string | null = null,\n): VgiDataType => new A_Timestamp(unit, timezone) as unknown as VgiDataType;\n\nexport const duration = (unit: number = A_TimeUnit.MILLISECOND): VgiDataType =>\n new A_Duration(unit) as unknown as VgiDataType;\n\nexport const interval = (unit: number = A_IntervalUnit.MONTH_DAY_NANO): VgiDataType =>\n new A_Interval(unit) as unknown as VgiDataType;\n\n// ----- Nested types --------------------------------------------------------\n\nexport function list(child: VgiField | VgiDataType): VgiDataType {\n const childField = isField(child) ? child : field(\"item\", child as VgiDataType, true);\n return new A_List(childField as A_Field) as unknown as VgiDataType;\n}\n\nexport function fixedSizeList(child: VgiField | VgiDataType, listSize: number): VgiDataType {\n const childField = isField(child) ? child : field(\"item\", child as VgiDataType, true);\n return new A_FixedSizeList(listSize, childField as A_Field) as unknown as VgiDataType;\n}\n\nexport function struct(children: readonly VgiField[]): VgiDataType {\n return new A_Struct(children as A_Field[]) as unknown as VgiDataType;\n}\n\nexport function map(\n keyField: VgiField | VgiDataType,\n valueField: VgiField | VgiDataType,\n keysSorted = false,\n): VgiDataType {\n const k = isField(keyField) ? keyField : field(\"key\", keyField as VgiDataType, false);\n const v = isField(valueField) ? valueField : field(\"value\", valueField as VgiDataType, true);\n // arrow-js Map_ takes a Field whose type is Struct{key,value}\n const entries = field(\"entries\", struct([k, v]), false);\n return new A_Map(entries as A_Field, keysSorted) as unknown as VgiDataType;\n}\n\nexport function dictionary(\n valueType: VgiDataType,\n indexType: VgiDataType = int16(),\n ordered = false,\n id?: number,\n): VgiDataType {\n return new A_Dictionary(\n valueType as DataType,\n indexType as any,\n id,\n ordered,\n ) as unknown as VgiDataType;\n}\n\nexport function union(\n mode: number,\n children: readonly (VgiField | VgiDataType)[],\n typeIds?: number[],\n): VgiDataType {\n const childFields = children.map((c, i) =>\n isField(c) ? c : field(String(i), c as VgiDataType, true),\n );\n const ids = typeIds ?? childFields.map((_, i) => i);\n const Ctor = mode === A_UnionMode.Dense ? A_DenseUnion : A_SparseUnion;\n return new Ctor(ids, childFields as A_Field[]) as unknown as VgiDataType;\n}\n\nexport const sparseUnion = (\n children: readonly (VgiField | VgiDataType)[],\n typeIds?: number[],\n): VgiDataType => union(A_UnionMode.Sparse, children, typeIds);\n\nexport const denseUnion = (\n children: readonly (VgiField | VgiDataType)[],\n typeIds?: number[],\n): VgiDataType => union(A_UnionMode.Dense, children, typeIds);\n\n// Utility: distinguish Field from DataType. arrow-js Fields have `name` and\n// `type`; bare DataTypes only have `typeId` (and class-specific props).\nfunction isField(x: VgiField | VgiDataType): x is VgiField {\n return typeof (x as VgiField).name === \"string\" && (x as VgiField).type != null;\n}\n",
|
|
7
7
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Empty (0-row) Arrow batch construction. Handles complex types (List, Map,\n// Struct) that need child data to round-trip through Arrow IPC serialization.\n\nimport {\n RecordBatch,\n Schema,\n Field,\n Struct,\n List,\n DataType,\n makeData,\n Map_,\n} from \"@query-farm/apache-arrow\";\n\n/**\n * Create empty (0-length) data for any Arrow type, handling complex types\n * that need child data (List, Map, Struct) to be serializable.\n */\nfunction emptyData(field: Field): any {\n const type = field.type;\n\n if (DataType.isList(type)) {\n const childField = (type as List).children[0];\n return makeData({\n type,\n length: 0,\n nullCount: 0,\n child: emptyData(childField),\n valueOffsets: new Int32Array([0]),\n });\n }\n\n if (DataType.isMap(type)) {\n const entriesField = (type as Map_).children[0];\n return makeData({\n type,\n length: 0,\n nullCount: 0,\n child: emptyData(entriesField),\n valueOffsets: new Int32Array([0]),\n });\n }\n\n if (DataType.isStruct(type)) {\n const children = type.children.map((child: Field) => emptyData(child));\n return makeData({ type, length: 0, nullCount: 0, children });\n }\n\n return makeData({ type, length: 0, nullCount: 0 });\n}\n\nimport type { VgiSchema } from \"../types.js\";\n\n/**\n * Create an empty (0-row) batch with the given schema. Accepts arrow-js\n * `Schema` or facade `VgiSchema` (cast at the boundary).\n */\nexport function emptyBatch(schema: Schema | VgiSchema): RecordBatch {\n const a = schema as Schema;\n const children = a.fields.map((f: Field) => emptyData(f));\n\n const structType = new Struct(a.fields);\n const data = makeData({\n type: structType,\n length: 0,\n children,\n nullCount: 0,\n });\n\n return new RecordBatch(a, data);\n}\n",
|
|
8
8
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n//\n// Codec registry — the single source of truth for how each Arrow type is\n// represented as a JS value in this SDK.\n//\n// Three layers of representation are in scope for the codec design (phase 1\n// implements the first two; the third is reserved for a later phase):\n//\n// - canonical: the internal pivot. One lossless JS value per Arrow type that\n// mirrors the raw Arrow wire unit. This is what the per-backend\n// `writeCanonicalColumn` / `readCanonicalValue` produce and consume, so it\n// is identical across the arrow-js and flechette backends.\n// - rich: the default author-facing value. Identical to canonical for\n// every type EXCEPT date32 / date64, which surface as a JS `Date` (lossless\n// in both directions). All temporal sub-second precision types stay\n// numeric/bigint because `Date` can't hold us/ns losslessly.\n// - raw: (reserved) a branded-primitive view layered on canonical. Not\n// built in phase 1; the `Codec` interface leaves room for it so a later\n// phase can add `rawToCanonical` / `canonicalToRaw` without reshaping this\n// module.\n//\n// Canonical representation per Arrow type:\n// bool -> boolean\n// int8/16/32, uint8/16/32, float* -> number\n// int64/uint64 -> bigint\n// utf8 / largeUtf8 -> string\n// binary / largeBinary / fsb -> Uint8Array\n// date32 -> number (days since epoch)\n// date64 -> bigint (ms since epoch)\n// time32 -> number (raw unit: s or ms)\n// time64 -> bigint (raw unit: us or ns)\n// timestamp[s/ms/us/ns] -> bigint (raw unit)\n// duration[*] -> bigint (raw unit)\n// decimal128/256 -> bigint (UNSCALED integer)\n// struct -> { field: canonical }\n// list / largeList / fixedSizeList -> canonical[]\n// map -> Array<[keyCanonical, valueCanonical]>\n// dictionary -> the decoded value's canonical\n//\n// rich differs from canonical ONLY for date32 / date64 (both -> Date).\n//\n// Validation: every codec method validates its input and throws a clear error\n// on invalid or lossy data (non-integer where an int is required, a bigint that\n// overflows Number when narrowing, an out-of-range Date, etc.). null/undefined\n// pass straight through as null.\n\nimport type { VgiDataType } from \"../types.js\";\nimport { TypeId } from \"../predicates.js\";\n\nconst MS_PER_DAY = 86_400_000;\n\n/** Codec for a single Arrow type. Converts between the author-facing rich\n * representation and the internal canonical pivot. Both directions validate\n * and throw on invalid/lossy input. null/undefined pass through as null.\n *\n * (Raw<->canonical conversions are reserved for a later phase. When added they\n * belong here as `rawToCanonical` / `canonicalToRaw`.) */\nexport interface Codec {\n /** Human-readable type label, used in error messages. */\n readonly label: string;\n /** rich author value -> canonical pivot. */\n richToCanonical(value: unknown): unknown;\n /** canonical pivot -> rich author value. */\n canonicalToRich(value: unknown): unknown;\n /** branded raw author value -> canonical pivot. Largely identity on the\n * underlying number/bigint (raw === canonical for every type), but validates\n * and unbrands. Date32/Date64 raw values are plain day-number / ms-bigint,\n * so this differs from richToCanonical only in NOT accepting a JS Date. */\n rawToCanonical(value: unknown): unknown;\n /** canonical pivot -> branded raw author value. Validates and brands\n * (identity at runtime). */\n canonicalToRaw(value: unknown): unknown;\n}\n\nfunction isNullish(v: unknown): boolean {\n return v === null || v === undefined;\n}\n\nfunction err(label: string, msg: string, value: unknown): never {\n let shown: string;\n try {\n shown =\n typeof value === \"bigint\"\n ? `${value}n`\n : typeof value === \"object\"\n ? Object.prototype.toString.call(value)\n : String(value);\n } catch {\n shown = \"<unprintable>\";\n }\n throw new TypeError(`codec[${label}]: ${msg} (got ${typeof value}: ${shown})`);\n}\n\n// ---------------------------------------------------------------------------\n// Scalar codec builders\n// ---------------------------------------------------------------------------\n\n/** Identity codec: rich === canonical === raw. Validates with `check`. */\nfunction identity(label: string, check: (v: unknown) => void): Codec {\n const conv = (value: unknown): unknown => {\n if (isNullish(value)) return null;\n check(value);\n return value;\n };\n return {\n label,\n richToCanonical: conv,\n canonicalToRich: conv,\n rawToCanonical: conv,\n canonicalToRaw: conv,\n };\n}\n\nfunction checkBoolean(label: string) {\n return (v: unknown) => {\n if (typeof v !== \"boolean\") err(label, \"expected boolean\", v);\n };\n}\n\n/** Integer-valued `number` within [min,max]. Accepts a bigint that fits. */\nfunction checkIntNumber(label: string, min: number, max: number) {\n return (v: unknown) => {\n let n: number;\n if (typeof v === \"number\") n = v;\n else if (typeof v === \"bigint\") {\n if (v < BigInt(min) || v > BigInt(max)) err(label, `bigint out of ${label} range`, v);\n return;\n } else return err(label, \"expected number\", v);\n if (!Number.isInteger(n)) err(label, \"expected an integer\", v);\n if (n < min || n > max) err(label, `value out of ${label} range [${min}, ${max}]`, v);\n };\n}\n\nfunction checkFloat(label: string) {\n return (v: unknown) => {\n if (typeof v === \"number\") return;\n if (typeof v === \"bigint\") return; // a bigint is acceptable for a float slot\n err(label, \"expected number\", v);\n };\n}\n\nfunction checkBigInt(label: string, bits: number, signed: boolean) {\n const max = signed ? (1n << BigInt(bits - 1)) - 1n : (1n << BigInt(bits)) - 1n;\n const min = signed ? -(1n << BigInt(bits - 1)) : 0n;\n return (v: unknown) => {\n let b: bigint;\n if (typeof v === \"bigint\") b = v;\n else if (typeof v === \"number\") {\n if (!Number.isInteger(v)) err(label, \"expected an integer\", v);\n b = BigInt(v);\n } else return err(label, \"expected bigint\", v);\n if (b < min || b > max) err(label, `value out of ${label} range`, v);\n };\n}\n\nfunction checkString(label: string) {\n return (v: unknown) => {\n if (typeof v !== \"string\") err(label, \"expected string\", v);\n };\n}\n\n/** Coerce a number/bigint to a bigint, requiring integral input. */\nfunction toBigIntStrict(label: string, v: unknown): bigint {\n if (typeof v === \"bigint\") return v;\n if (typeof v === \"number\") {\n if (!Number.isInteger(v)) err(label, \"expected an integer value\", v);\n return BigInt(v);\n }\n return err(label, \"expected number or bigint\", v);\n}\n\n/** Narrow a bigint to a number, throwing if it can't be held losslessly. */\nfunction bigIntToSafeNumber(label: string, b: bigint): number {\n if (b < -9007199254740991n || b > 9007199254740991n) {\n err(label, \"bigint overflows the safe-integer range when narrowing to number\", b);\n }\n return Number(b);\n}\n\n// ---------------------------------------------------------------------------\n// Date codecs (the only types where rich != canonical)\n// ---------------------------------------------------------------------------\n\n/** date32: canonical = number (days since epoch); rich = Date. */\nfunction dateDayCodec(): Codec {\n const label = \"date32\";\n return {\n label,\n richToCanonical(value) {\n if (isNullish(value)) return null;\n if (value instanceof Date) {\n const ms = value.getTime();\n if (Number.isNaN(ms)) err(label, \"invalid Date\", value);\n if (ms % MS_PER_DAY !== 0) {\n // Tolerate any Date by flooring to whole days — DuckDB DATE has no\n // sub-day component, so a Date with a time-of-day maps to its day.\n return Math.floor(ms / MS_PER_DAY);\n }\n return ms / MS_PER_DAY;\n }\n if (typeof value === \"number\") {\n if (!Number.isInteger(value)) err(label, \"day-number must be an integer\", value);\n return value;\n }\n if (typeof value === \"bigint\") return bigIntToSafeNumber(label, value);\n return err(label, \"expected Date, number (days), or bigint\", value);\n },\n canonicalToRich(value) {\n if (isNullish(value)) return null;\n let days: number;\n if (typeof value === \"number\") {\n if (!Number.isInteger(value)) err(label, \"canonical day-number must be an integer\", value);\n days = value;\n } else if (typeof value === \"bigint\") {\n days = bigIntToSafeNumber(label, value);\n } else if (value instanceof Date) {\n return value;\n } else return err(label, \"expected number (days) canonical\", value);\n const ms = days * MS_PER_DAY;\n const d = new Date(ms);\n if (Number.isNaN(d.getTime())) err(label, \"day-number produces an invalid Date\", value);\n return d;\n },\n // raw date32 IS the day-number (no Date involved).\n rawToCanonical(value) {\n if (isNullish(value)) return null;\n if (typeof value === \"number\") {\n if (!Number.isInteger(value)) err(label, \"raw day-number must be an integer\", value);\n return value;\n }\n if (typeof value === \"bigint\") return bigIntToSafeNumber(label, value);\n return err(label, \"expected branded Date32 (day-number)\", value);\n },\n canonicalToRaw(value) {\n if (isNullish(value)) return null;\n if (typeof value === \"number\") {\n if (!Number.isInteger(value)) err(label, \"canonical day-number must be an integer\", value);\n return value;\n }\n if (typeof value === \"bigint\") return bigIntToSafeNumber(label, value);\n if (value instanceof Date) {\n const ms = value.getTime();\n if (Number.isNaN(ms)) err(label, \"invalid Date\", value);\n return Math.floor(ms / MS_PER_DAY);\n }\n return err(label, \"expected number (days) canonical\", value);\n },\n };\n}\n\n/** date64: canonical = bigint (ms since epoch); rich = Date. */\nfunction dateMillisCodec(): Codec {\n const label = \"date64\";\n return {\n label,\n richToCanonical(value) {\n if (isNullish(value)) return null;\n if (value instanceof Date) {\n const ms = value.getTime();\n if (Number.isNaN(ms)) err(label, \"invalid Date\", value);\n return BigInt(ms);\n }\n if (typeof value === \"bigint\") return value;\n if (typeof value === \"number\") {\n if (!Number.isInteger(value)) err(label, \"ms value must be an integer\", value);\n return BigInt(value);\n }\n return err(label, \"expected Date, bigint (ms), or number\", value);\n },\n canonicalToRich(value) {\n if (isNullish(value)) return null;\n if (value instanceof Date) return value;\n const ms = toBigIntStrict(label, value);\n const n = bigIntToSafeNumber(label, ms);\n const d = new Date(n);\n if (Number.isNaN(d.getTime())) err(label, \"ms value produces an invalid Date\", value);\n return d;\n },\n // raw date64 IS the ms-bigint (no Date involved).\n rawToCanonical(value) {\n if (isNullish(value)) return null;\n if (value instanceof Date) return err(label, \"raw Date64Ms must be a bigint (ms), not a Date\", value);\n return toBigIntStrict(label, value);\n },\n canonicalToRaw(value) {\n if (isNullish(value)) return null;\n if (value instanceof Date) return BigInt(value.getTime());\n return toBigIntStrict(label, value);\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// Temporal codecs where rich == canonical (no Date — would be lossy)\n// ---------------------------------------------------------------------------\n\n/** time32: canonical/rich/raw = number (raw unit). */\nfunction time32Codec(): Codec {\n const label = \"time32\";\n const toCanon = (value: unknown): unknown => {\n if (isNullish(value)) return null;\n if (typeof value === \"number\") {\n if (!Number.isInteger(value)) err(label, \"time32 value must be an integer\", value);\n return value;\n }\n if (typeof value === \"bigint\") return bigIntToSafeNumber(label, value);\n return err(label, \"expected number (raw time unit)\", value);\n };\n const fromCanon = (value: unknown): unknown => {\n if (isNullish(value)) return null;\n if (typeof value === \"number\") return value;\n if (typeof value === \"bigint\") return bigIntToSafeNumber(label, value);\n return err(label, \"expected number canonical\", value);\n };\n return {\n label,\n richToCanonical: toCanon,\n canonicalToRich: fromCanon,\n rawToCanonical: toCanon,\n canonicalToRaw: fromCanon,\n };\n}\n\n/** time64/timestamp/duration: canonical/rich/raw = bigint (raw unit). */\nfunction bigIntUnitCodec(label: string): Codec {\n const conv = (value: unknown): unknown => {\n if (isNullish(value)) return null;\n return toBigIntStrict(label, value);\n };\n return {\n label,\n richToCanonical: conv,\n canonicalToRich: conv,\n rawToCanonical: conv,\n canonicalToRaw: conv,\n };\n}\n\n/** Decode a little-endian two's-complement byte view to a signed bigint. */\nfunction decimalViewToBigInt(view: ArrayBufferView): bigint {\n const u8 = new Uint8Array(view.buffer, view.byteOffset, view.byteLength);\n let bi = 0n;\n for (let i = u8.length - 1; i >= 0; i--) bi = (bi << 8n) | BigInt(u8[i]);\n if (u8.length > 0 && (u8[u8.length - 1] & 0x80)) bi -= 1n << BigInt(u8.length * 8);\n return bi;\n}\n\n/** decimal128/256: canonical/rich = bigint (UNSCALED integer). Producers may\n * also pass the raw little-endian byte view that an Arrow decimal scalar\n * exposes (Uint32Array / Uint8Array); decode it to the unscaled bigint. */\nfunction decimalCodec(): Codec {\n const label = \"decimal\";\n const toCanon = (value: unknown): unknown => {\n if (isNullish(value)) return null;\n if (typeof value === \"bigint\") return value;\n if (typeof value === \"number\") return toBigIntStrict(label, value);\n if (ArrayBuffer.isView(value)) return decimalViewToBigInt(value as ArrayBufferView);\n return err(label, \"expected bigint, number, or decimal byte view\", value);\n };\n const fromCanon = (value: unknown): unknown => {\n if (isNullish(value)) return null;\n return toCanon(value);\n };\n return {\n label,\n richToCanonical: toCanon,\n canonicalToRich: fromCanon,\n rawToCanonical: toCanon,\n canonicalToRaw: fromCanon,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Composite codecs\n// ---------------------------------------------------------------------------\n\nfunction structCodec(type: VgiDataType): Codec {\n const children = (type as any).children as Array<{ name: string; type: VgiDataType }>;\n const childCodecs = children.map((c) => ({ name: c.name, codec: codecFor(c.type) }));\n const label = \"struct\";\n return {\n label,\n richToCanonical(value) {\n if (isNullish(value)) return null;\n if (typeof value !== \"object\") err(label, \"expected an object\", value);\n const obj = value as any;\n const out: Record<string, unknown> = {};\n for (const { name, codec } of childCodecs) {\n out[name] = codec.richToCanonical(obj[name] ?? null);\n }\n return out;\n },\n canonicalToRich(value) {\n if (isNullish(value)) return null;\n if (typeof value !== \"object\") err(label, \"expected an object\", value);\n const obj = value as any;\n const out: Record<string, unknown> = {};\n for (const { name, codec } of childCodecs) {\n out[name] = codec.canonicalToRich(obj[name] ?? null);\n }\n return out;\n },\n rawToCanonical(value) {\n if (isNullish(value)) return null;\n if (typeof value !== \"object\") err(label, \"expected an object\", value);\n const obj = value as any;\n const out: Record<string, unknown> = {};\n for (const { name, codec } of childCodecs) {\n out[name] = codec.rawToCanonical(obj[name] ?? null);\n }\n return out;\n },\n canonicalToRaw(value) {\n if (isNullish(value)) return null;\n if (typeof value !== \"object\") err(label, \"expected an object\", value);\n const obj = value as any;\n const out: Record<string, unknown> = {};\n for (const { name, codec } of childCodecs) {\n out[name] = codec.canonicalToRaw(obj[name] ?? null);\n }\n return out;\n },\n };\n}\n\nfunction listCodec(type: VgiDataType): Codec {\n const childField = (type as any).children?.[0];\n if (!childField) throw new Error(\"codec[list]: list type has no child field\");\n const child = codecFor(childField.type as VgiDataType);\n const label = \"list\";\n const toArray = (value: unknown): unknown[] => {\n if (Array.isArray(value)) return value;\n if (value != null && typeof (value as any)[Symbol.iterator] === \"function\") {\n return Array.from(value as Iterable<unknown>);\n }\n return err(label, \"expected an array or iterable\", value);\n };\n return {\n label,\n richToCanonical(value) {\n if (isNullish(value)) return null;\n return toArray(value).map((v) => child.richToCanonical(v));\n },\n canonicalToRich(value) {\n if (isNullish(value)) return null;\n return toArray(value).map((v) => child.canonicalToRich(v));\n },\n rawToCanonical(value) {\n if (isNullish(value)) return null;\n return toArray(value).map((v) => child.rawToCanonical(v));\n },\n canonicalToRaw(value) {\n if (isNullish(value)) return null;\n return toArray(value).map((v) => child.canonicalToRaw(v));\n },\n };\n}\n\nfunction mapCodec(type: VgiDataType): Codec {\n // children[0] is the \"entries\" struct field holding [key, value].\n const entries = (type as any).children?.[0];\n const entryChildren = entries?.type?.children;\n if (!entryChildren || entryChildren.length < 2) {\n throw new Error(\"codec[map]: map type has no key/value entry fields\");\n }\n const keyCodec = codecFor(entryChildren[0].type as VgiDataType);\n const valueCodec = codecFor(entryChildren[1].type as VgiDataType);\n const label = \"map\";\n /** Normalize a rich map value into an array of [k, v] pairs. */\n const toPairs = (value: unknown): Array<[unknown, unknown]> => {\n if (Array.isArray(value)) return value as Array<[unknown, unknown]>;\n if (value instanceof Map) return Array.from(value.entries());\n if (value != null && typeof (value as any)[Symbol.iterator] === \"function\") {\n return Array.from(value as Iterable<[unknown, unknown]>);\n }\n if (value != null && typeof value === \"object\") {\n return Object.entries(value as Record<string, unknown>);\n }\n return err(label, \"expected Map, array of pairs, or object\", value);\n };\n return {\n label,\n richToCanonical(value) {\n if (isNullish(value)) return null;\n return toPairs(value).map(([k, v]) => [\n keyCodec.richToCanonical(k),\n valueCodec.richToCanonical(v),\n ]);\n },\n canonicalToRich(value) {\n if (isNullish(value)) return null;\n return toPairs(value).map(([k, v]) => [\n keyCodec.canonicalToRich(k),\n valueCodec.canonicalToRich(v),\n ]);\n },\n rawToCanonical(value) {\n if (isNullish(value)) return null;\n return toPairs(value).map(([k, v]) => [\n keyCodec.rawToCanonical(k),\n valueCodec.rawToCanonical(v),\n ]);\n },\n canonicalToRaw(value) {\n if (isNullish(value)) return null;\n return toPairs(value).map(([k, v]) => [\n keyCodec.canonicalToRaw(k),\n valueCodec.canonicalToRaw(v),\n ]);\n },\n };\n}\n\nfunction dictionaryCodec(type: VgiDataType): Codec {\n // The decoded value's type lives on `type.dictionary` (both backends).\n const valueType = (type as any).dictionary as VgiDataType;\n if (!valueType) throw new Error(\"codec[dictionary]: missing dictionary value type\");\n // Delegate entirely to the decoded value's codec — canonical for a\n // dictionary IS the decoded value's canonical.\n const inner = codecFor(valueType);\n return {\n label: `dictionary<${inner.label}>`,\n richToCanonical: (v) => inner.richToCanonical(v),\n canonicalToRich: (v) => inner.canonicalToRich(v),\n rawToCanonical: (v) => inner.rawToCanonical(v),\n canonicalToRaw: (v) => inner.canonicalToRaw(v),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Resolver\n// ---------------------------------------------------------------------------\n\nconst INT8 = identity(\"int8\", checkIntNumber(\"int8\", -128, 127));\nconst INT16 = identity(\"int16\", checkIntNumber(\"int16\", -32768, 32767));\nconst INT32 = identity(\"int32\", checkIntNumber(\"int32\", -2147483648, 2147483647));\nconst UINT8 = identity(\"uint8\", checkIntNumber(\"uint8\", 0, 255));\nconst UINT16 = identity(\"uint16\", checkIntNumber(\"uint16\", 0, 65535));\nconst UINT32 = identity(\"uint32\", checkIntNumber(\"uint32\", 0, 4294967295));\nconst INT64 = identity(\"int64\", checkBigInt(\"int64\", 64, true));\nconst UINT64 = identity(\"uint64\", checkBigInt(\"uint64\", 64, false));\nconst FLOAT = identity(\"float\", checkFloat(\"float\"));\nconst BOOL = identity(\"bool\", checkBoolean(\"bool\"));\n/** utf8: canonical/rich = string. A string passes through; any other non-null\n * value is stringified — this preserves the long-standing behavior where a\n * foreign scalar fed to a utf8 column (e.g. an Int32Array INTERVAL quad that\n * arrow-js surfaced as \"m,d,lo,hi\") was coerced to its string form. */\nconst UTF8: Codec = {\n label: \"utf8\",\n richToCanonical(value) {\n if (isNullish(value)) return null;\n return typeof value === \"string\" ? value : String(value);\n },\n canonicalToRich(value) {\n if (isNullish(value)) return null;\n checkString(\"utf8\")(value);\n return value;\n },\n rawToCanonical(value) {\n if (isNullish(value)) return null;\n return typeof value === \"string\" ? value : String(value);\n },\n canonicalToRaw(value) {\n if (isNullish(value)) return null;\n checkString(\"utf8\")(value);\n return value;\n },\n};\n\n/** Normalize any ArrayBuffer view to a Uint8Array over the same bytes. */\nfunction toCanonBytes(label: string, fixedWidth?: number) {\n return (value: unknown): unknown => {\n if (isNullish(value)) return null;\n let u8: Uint8Array;\n if (value instanceof Uint8Array) u8 = value;\n else if (ArrayBuffer.isView(value)) {\n const v = value as ArrayBufferView;\n u8 = new Uint8Array(v.buffer, v.byteOffset, v.byteLength);\n } else return err(label, \"expected Uint8Array\", value);\n if (fixedWidth != null && u8.length !== fixedWidth) {\n err(label, `expected exactly ${fixedWidth} bytes`, value);\n }\n return u8;\n };\n}\n\nfunction bytesCodec(label: string, fixedWidth?: number): Codec {\n const conv = toCanonBytes(label, fixedWidth);\n return {\n label,\n richToCanonical: conv,\n canonicalToRich: conv,\n rawToCanonical: conv,\n canonicalToRaw: conv,\n };\n}\n\nconst BINARY = bytesCodec(\"binary\");\nconst NULL_CODEC: Codec = {\n label: \"null\",\n richToCanonical: () => null,\n canonicalToRich: () => null,\n rawToCanonical: () => null,\n canonicalToRaw: () => null,\n};\n\n/**\n * Resolve the {@link Codec} for an Arrow type. Dispatches by `typeId` and\n * reads unit / bitWidth / scale off the type. Composite types recurse into\n * their child codecs.\n */\nexport function codecFor(type: VgiDataType): Codec {\n switch (type.typeId) {\n case TypeId.Null:\n return NULL_CODEC;\n case TypeId.Bool:\n return BOOL;\n case TypeId.Int: {\n const bw = (type as any).bitWidth ?? 32;\n const signed = (type as any).isSigned ?? (type as any).signed ?? true;\n if (bw === 64) return signed ? INT64 : UINT64;\n if (signed) {\n if (bw === 8) return INT8;\n if (bw === 16) return INT16;\n return INT32;\n }\n if (bw === 8) return UINT8;\n if (bw === 16) return UINT16;\n return UINT32;\n }\n case TypeId.Float:\n return FLOAT;\n case TypeId.Utf8:\n case TypeId.LargeUtf8:\n return UTF8;\n case TypeId.Binary:\n case TypeId.LargeBinary:\n return BINARY;\n case TypeId.FixedSizeBinary:\n return bytesCodec(\"fixedSizeBinary\", (type as any).byteWidth ?? (type as any).stride);\n case TypeId.Decimal:\n return decimalCodec();\n case TypeId.Date:\n // unit DAY=0 -> date32 (days, number); MILLISECOND=1 -> date64 (ms, bigint)\n return (type as any).unit === 0 ? dateDayCodec() : dateMillisCodec();\n case TypeId.Time:\n // bitWidth 32 -> number (raw s/ms); 64 -> bigint (raw us/ns)\n return ((type as any).bitWidth ?? 32) === 64 ? bigIntUnitCodec(\"time64\") : time32Codec();\n case TypeId.Timestamp:\n return bigIntUnitCodec(\"timestamp\");\n case TypeId.Duration:\n return bigIntUnitCodec(\"duration\");\n case TypeId.Struct:\n return structCodec(type);\n case TypeId.Union:\n // The canonical readers decode a union into a TaggedUnion { tag, value }.\n // That shape is already the rich representation, so pass it through.\n return identity(\"union\", () => {});\n case TypeId.List:\n case TypeId.FixedSizeList:\n return listCodec(type);\n case TypeId.Map:\n return mapCodec(type);\n case TypeId.Dictionary:\n return dictionaryCodec(type);\n case TypeId.Interval:\n // Interval is not in the phase-1 canonical spec; pass through unchanged.\n return identity(\"interval\", () => {});\n default:\n // Unknown / not-yet-modeled types pass through unchanged so the suite\n // stays green; a later phase can add explicit codecs.\n return identity(`type#${type.typeId}`, () => {});\n }\n}\n",
|
|
@@ -14,18 +14,18 @@
|
|
|
14
14
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Per-record-batch metadata attachment (arrow-js backend).\n\nimport { RecordBatch } from \"@query-farm/apache-arrow\";\nimport type { VgiBatch } from \"../types.js\";\n\n/**\n * Re-emit a batch with a different per-record-batch metadata map (same schema\n * + data, no copy). The @query-farm/apache-arrow fork's RecordBatch carries\n * the map through IPC as the Message's `custom_metadata` field.\n *\n * Mirrors vgi-rpc's arrow facade helper of the same name — needed here so a\n * worker can bake metadata into the batch object itself (vgi-rpc's HTTP\n * exchange dispatch drops the separate emit-metadata argument for 0-row\n * batches; a batch-carried map survives).\n */\nexport function withBatchMetadata(batch: VgiBatch, metadata: Map<string, string>): VgiBatch {\n const a = batch as unknown as RecordBatch;\n return new RecordBatch(a.schema, a.data, metadata) as unknown as VgiBatch;\n}\n",
|
|
15
15
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Arrow IPC stream serialization/deserialization for schemas and batches.\n\nimport {\n RecordBatch,\n Schema,\n RecordBatchStreamWriter,\n RecordBatchReader,\n} from \"@query-farm/apache-arrow\";\nimport type { VgiSchema, VgiBatch } from \"../types.js\";\nimport { emptyBatch } from \"./empty.js\";\n\n/**\n * Serialize a Schema to Arrow IPC bytes. Accepts arrow-js `Schema` or\n * facade `VgiSchema` (the latter is satisfied structurally by arrow-js\n * Schema instances at runtime).\n */\nexport function serializeSchema(schema: Schema | VgiSchema): Uint8Array {\n const writer = new RecordBatchStreamWriter();\n writer.reset(undefined, schema as Schema);\n writer.close();\n return writer.toUint8Array(true);\n}\n\n/**\n * Deserialize an Arrow Schema from IPC bytes.\n * Note: In Bun, reader.schema is always undefined, so we must read from the batch.\n *\n * Returns arrow-js's `Schema` (which structurally satisfies VgiSchema).\n */\nexport function deserializeSchema(bytes: Uint8Array): Schema {\n const reader = RecordBatchReader.from(bytes);\n const batches = [...reader];\n if (batches.length > 0) {\n return batches[0].schema;\n }\n if (reader.schema) return reader.schema;\n throw new Error(\"Cannot deserialize schema from empty IPC stream\");\n}\n\n/**\n * Serialize a RecordBatch to Arrow IPC bytes. Accepts arrow-js `RecordBatch`\n * or facade `VgiBatch`.\n */\nexport function serializeBatch(batch: RecordBatch | VgiBatch): Uint8Array {\n const a = batch as RecordBatch;\n const writer = new RecordBatchStreamWriter();\n writer.reset(undefined, a.schema);\n // Use _writeRecordBatch to bypass schema comparison bug\n // (public write() silently drops batches on nullability mismatch)\n (writer as any)._writeRecordBatch(a);\n writer.close();\n return writer.toUint8Array(true);\n}\n\n/**\n * Deserialize a RecordBatch from Arrow IPC bytes.\n */\nexport function deserializeBatch(bytes: Uint8Array): RecordBatch {\n const reader = RecordBatchReader.from(bytes);\n const batches = [...reader];\n if (batches.length === 0) {\n const sch = reader.schema ?? new Schema([]);\n return emptyBatch(sch);\n }\n return batches[0];\n}\n",
|
|
16
16
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// arrow-js impl of column-statistics serialization. Builds a sparse-union\n// column manually with `makeData` + `typeIds` buffer + per-type children.\n// This is the only spot in vgi-typescript that touches makeData directly,\n// because flechette's union-column API takes a fundamentally different\n// shape (typeIdForValue closure).\n\nimport {\n Field,\n Null,\n makeData,\n RecordBatch,\n Struct,\n SparseUnion,\n Schema,\n Utf8,\n Bool,\n Int64,\n Uint64,\n type DataType,\n} from \"@query-farm/apache-arrow\";\nimport type {\n VgiBatch,\n VgiDataType,\n} from \"../types.js\";\nimport { codecFor } from \"../codec/registry.js\";\nimport { writeCanonicalColumn } from \"./canonical.js\";\n\nexport interface ColumnStatistics {\n columnName: string;\n arrowType: VgiDataType;\n min: any;\n max: any;\n hasNull: boolean;\n hasNotNull: boolean;\n distinctCount: bigint | number | null;\n containsUnicode: boolean | null;\n maxStringLength: bigint | number | null;\n}\n\n// Stable, backend-agnostic type key. Dispatch on the structural fields\n// (typeId + unit + bitWidth + precision/scale + byteWidth) rather than\n// `.toString()`, so the union-child grouping matches the flechette backend\n// exactly and never collapses distinct types into one child.\nfunction typeKey(t: VgiDataType): string {\n const a = t as any;\n return [\n t.typeId,\n a.unit ?? \"\",\n a.bitWidth ?? \"\",\n a.precision ?? \"\",\n a.scale ?? \"\",\n a.byteWidth ?? \"\",\n ].join(\":\");\n}\n\n/**\n * Build an arrow-js column `Data` node for `type` from RICH values, routed\n * through the codec (rich -> canonical) and the canonical writer — the same\n * path the public column-build uses. This guarantees a date/timestamp/decimal\n * min/max is represented identically to ordinary column data and identically\n * across both backends.\n */\nfunction buildTypedColumnData(values: any[], type: VgiDataType): any {\n const a = type as DataType;\n if (a.typeId === 1 /* Null */) {\n return makeData({ type: a, length: values.length, nullCount: values.length });\n }\n const codec = codecFor(type);\n const canonical = values.map((v) => codec.richToCanonical(v));\n return writeCanonicalColumn(type, canonical);\n}\n\nexport function buildStatisticsBatch(stats: ColumnStatistics[]): VgiBatch {\n if (stats.length === 0) {\n // Minimal empty batch: sparse_union with a single null child. Matches\n // Python's empty serialization — DuckDB tolerates this and reads zero\n // rows of stats.\n const nullField = new Field(\"0\", new Null(), true);\n const unionType = new SparseUnion([0], [nullField]);\n const minData = makeData({\n type: unionType,\n length: 0,\n typeIds: new Int8Array(0),\n children: [makeData({ type: new Null(), length: 0, nullCount: 0 })],\n } as any);\n const maxData = makeData({\n type: unionType,\n length: 0,\n typeIds: new Int8Array(0),\n children: [makeData({ type: new Null(), length: 0, nullCount: 0 })],\n } as any);\n return assemble([], minData, maxData, [], [], [], [], [], unionType) as unknown as VgiBatch;\n }\n\n // Group distinct Arrow types in stable insertion order to assign type codes.\n const typeOrder: VgiDataType[] = [];\n const typeIdMap = new Map<string, number>();\n const rowTypeCodes: number[] = [];\n for (const s of stats) {\n const key = typeKey(s.arrowType);\n let code = typeIdMap.get(key);\n if (code === undefined) {\n code = typeOrder.length;\n typeIdMap.set(key, code);\n typeOrder.push(s.arrowType);\n }\n rowTypeCodes.push(code);\n }\n\n const unionFields: Field[] = [];\n const minChildren: any[] = [];\n const maxChildren: any[] = [];\n const typeIds: number[] = [];\n\n for (const [code, arrowType] of typeOrder.entries()) {\n unionFields.push(new Field(String(code), arrowType as DataType, true));\n typeIds.push(code);\n const minVals = stats.map((s, i) => (rowTypeCodes[i] === code ? s.min : null));\n const maxVals = stats.map((s, i) => (rowTypeCodes[i] === code ? s.max : null));\n minChildren.push(buildTypedColumnData(minVals, arrowType));\n maxChildren.push(buildTypedColumnData(maxVals, arrowType));\n }\n\n const unionType = new SparseUnion(typeIds, unionFields);\n const typeIdsBuf = Int8Array.from(rowTypeCodes);\n\n const minData = makeData({\n type: unionType, length: stats.length, typeIds: typeIdsBuf, children: minChildren,\n } as any);\n const maxData = makeData({\n type: unionType, length: stats.length, typeIds: typeIdsBuf, children: maxChildren,\n } as any);\n\n return assemble(\n stats.map((s) => s.columnName),\n minData,\n maxData,\n stats.map((s) => s.hasNull),\n stats.map((s) => s.hasNotNull),\n stats.map((s) => (s.distinctCount == null ? null : BigInt(s.distinctCount))),\n stats.map((s) => s.containsUnicode),\n stats.map((s) => (s.maxStringLength == null ? null : BigInt(s.maxStringLength))),\n unionType,\n ) as unknown as VgiBatch;\n}\n\nfunction assemble(\n columnNames: string[],\n minData: any,\n maxData: any,\n hasNull: boolean[],\n hasNotNull: boolean[],\n distinctCount: (bigint | null)[],\n containsUnicode: (boolean | null)[],\n maxStringLength: (bigint | null)[],\n unionType: SparseUnion,\n): RecordBatch {\n const schema = new Schema([\n new Field(\"column_name\", new Utf8(), false),\n new Field(\"min\", unionType, true),\n new Field(\"max\", unionType, true),\n new Field(\"has_null\", new Bool(), false),\n new Field(\"has_not_null\", new Bool(), false),\n new Field(\"distinct_count\", new Int64(), true),\n new Field(\"contains_unicode\", new Bool(), true),\n new Field(\"max_string_length\", new Uint64(), true),\n ]);\n\n const n = columnNames.length;\n const children = [\n buildTypedColumnData(columnNames, new Utf8() as unknown as VgiDataType),\n minData,\n maxData,\n buildTypedColumnData(hasNull, new Bool() as unknown as VgiDataType),\n buildTypedColumnData(hasNotNull, new Bool() as unknown as VgiDataType),\n buildTypedColumnData(distinctCount, new Int64() as unknown as VgiDataType),\n buildTypedColumnData(containsUnicode, new Bool() as unknown as VgiDataType),\n buildTypedColumnData(maxStringLength, new Uint64() as unknown as VgiDataType),\n ];\n\n const structType = new Struct(schema.fields);\n const data = makeData({ type: structType, length: n, children, nullCount: 0 });\n return new RecordBatch(schema, data);\n}\n",
|
|
17
|
-
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// arrow-js backend for the vgi-typescript Arrow facade.\n// Default backend (Bun worker, Node) — selected via `#arrow-impl` resolution\n// when no `worker`/`workerd`/`browser` condition is active.\n\nimport type { VgiBackendInfo } from \"../types.js\";\n\nexport const backend: VgiBackendInfo = { name: \"arrow-js\" };\n\n// Schema / Field / DataType factories\nexport {\n schema,\n field,\n nullType,\n bool,\n int,\n int8, int16, int32, int64,\n uint8, uint16, uint32, uint64,\n float16, float32, float64,\n utf8, binary, fixedSizeBinary,\n decimal, decimal128, decimal256,\n date, dateDay, dateMillisecond,\n time, timeSecond, timeMillisecond, timeMicrosecond, timeNanosecond,\n timestamp, duration, interval,\n list, fixedSizeList, struct, map,\n dictionary,\n union, sparseUnion, denseUnion,\n TimeUnit, DateUnit, IntervalUnit, UnionMode,\n} from \"./schema.js\";\n\n// Batch construction / iteration / utilities\nexport { emptyBatch } from \"./empty.js\";\nexport { batchFromRows, batchFromColumns, columnFromArray } from \"./build.js\";\nexport {\n iterRows,\n batchToScalarDict,\n batchToSecretDict,\n safeNumber,\n decodeDictValue,\n} from \"./iterate.js\";\nexport { filterBatch } from \"./filter.js\";\nexport { projectSchema, projectBatch } from \"./project.js\";\nexport { readCanonicalValue } from \"./canonical.js\";\nexport { withBatchMetadata } from \"./metadata.js\";\n\n// IPC\nexport {\n serializeSchema,\n deserializeSchema,\n serializeBatch,\n deserializeBatch,\n} from \"./ipc.js\";\n\n// Column statistics (sparse-union heavy — backend-specific).\nexport { buildStatisticsBatch, type ColumnStatistics } from \"./statistics.js\";\n",
|
|
17
|
+
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// arrow-js backend for the vgi-typescript Arrow facade.\n// Default backend (Bun worker, Node) — selected via `#arrow-impl` resolution\n// when no `worker`/`workerd`/`browser` condition is active.\n\nimport type { VgiBackendInfo } from \"../types.js\";\n\nexport const backend: VgiBackendInfo = { name: \"arrow-js\" };\n\n// Schema / Field / DataType factories\nexport {\n schema,\n field,\n nullType,\n bool,\n int,\n int8, int16, int32, int64,\n uint8, uint16, uint32, uint64,\n float16, float32, float64,\n utf8, binary, fixedSizeBinary,\n decimal, decimal128, decimal256,\n date, dateDay, dateMillisecond,\n time, timeSecond, timeMillisecond, timeMicrosecond, timeNanosecond,\n timestamp, duration, interval,\n list, fixedSizeList, struct, map,\n dictionary,\n union, sparseUnion, denseUnion,\n TimeUnit, DateUnit, IntervalUnit, UnionMode,\n} from \"./schema.js\";\n\n// Batch construction / iteration / utilities\nexport { emptyBatch } from \"./empty.js\";\nexport { batchFromRows, batchFromColumns, columnFromArray } from \"./build.js\";\nexport {\n iterRows,\n batchToScalarDict,\n batchToSecretDict,\n safeNumber,\n decodeDictValue,\n} from \"./iterate.js\";\nexport { filterBatch } from \"./filter.js\";\nexport { projectSchema, projectBatch } from \"./project.js\";\nexport { readCanonicalValue } from \"./canonical.js\";\nexport { withBatchMetadata } from \"./metadata.js\";\n\n// IPC\nexport {\n serializeSchema,\n deserializeSchema,\n serializeBatch,\n deserializeBatch,\n} from \"./ipc.js\";\n\n// Column statistics (sparse-union heavy — backend-specific).\nexport { buildStatisticsBatch, type ColumnStatistics } from \"./statistics.js\";\n\n/**\n * No-op on this backend: arrow-js `RecordBatch`/`Vector` already expose the\n * full API worker code uses, and arrow-js is a peer dependency, so there is\n * only ever one copy. Present so both backends satisfy one facade interface —\n * see impl-flechette/compat.ts for what this does there.\n */\nexport function adoptArrowJsShape<T>(batch: T): T {\n return batch;\n}\n",
|
|
18
18
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n//\n// Typed facade type-factories — phase 3 (the KEY ENABLER for static typing).\n//\n// The per-backend `schema.ts` factories build a runtime `VgiDataType` but only\n// declare their return as `VgiDataType` (`{ readonly typeId }`), which is too\n// coarse for the type-level value mapping in ./codec/repr.ts. This module wraps\n// each factory and casts the (unchanged) runtime value to the PRECISE nominal\n// descriptor from ./codec/type-descriptors.ts — e.g. `dateDay(): Date32Type`,\n// `timestamp(u): TimestampType<...>`, `struct(children)` preserving its field\n// tuple. Both backends route through the same `#arrow-impl` runtime, so they\n// report IDENTICAL static types from the facade.\n//\n// Runtime behavior is identical to the backend factories (these are pure casts\n// plus, for the unit-overloaded factories, a literal-unit overload set that\n// maps the integer TimeUnit to the descriptor's string-literal unit).\n\nimport * as impl from \"#arrow-impl\";\nimport type { VgiField, VgiDataType } from \"./types.js\";\nimport type {\n NullDescriptor,\n BoolType,\n Int8Type, Int16Type, Int32Type, Int64Type,\n Uint8Type, Uint16Type, Uint32Type, Uint64Type,\n IntType,\n FloatType,\n Utf8Type,\n BinaryType,\n FixedSizeBinaryType,\n DecimalType,\n Date32Type, Date64Type,\n Time32Type, Time64Type,\n TimestampType,\n DurationType,\n IntervalType,\n ListType, FixedSizeListType,\n StructType,\n MapType,\n DictionaryType,\n UnionType,\n TypedField,\n TUnit,\n} from \"./codec/type-descriptors.js\";\n\n// Re-export the runtime unit/mode enums and schema/field helpers untouched.\nexport const { TimeUnit, DateUnit, IntervalUnit, UnionMode, schema } = impl;\n\n/** field(): preserve the precise name + type so struct() can carry a typed\n * child tuple. Runtime is the backend `field`. */\nexport function field<Name extends string, T extends VgiDataType>(\n name: Name,\n type: T,\n nullable?: boolean,\n metadata?: Map<string, string>,\n): TypedField<Name, T> {\n return impl.field(name, type as any, nullable, metadata) as unknown as TypedField<Name, T>;\n}\n\n// ----- Primitives ----------------------------------------------------------\n\nexport const nullType = (): NullDescriptor => impl.nullType() as unknown as NullDescriptor;\nexport const bool = (): BoolType => impl.bool() as unknown as BoolType;\n\nexport const int8 = (): Int8Type => impl.int8() as unknown as Int8Type;\nexport const int16 = (): Int16Type => impl.int16() as unknown as Int16Type;\nexport const int32 = (): Int32Type => impl.int32() as unknown as Int32Type;\nexport const int64 = (): Int64Type => impl.int64() as unknown as Int64Type;\nexport const uint8 = (): Uint8Type => impl.uint8() as unknown as Uint8Type;\nexport const uint16 = (): Uint16Type => impl.uint16() as unknown as Uint16Type;\nexport const uint32 = (): Uint32Type => impl.uint32() as unknown as Uint32Type;\nexport const uint64 = (): Uint64Type => impl.uint64() as unknown as Uint64Type;\n\n// int(bitWidth, signed): bitWidth/signedness aren't statically known from a\n// runtime `number`, so this degrades to the generic IntType (rich/raw fall back\n// to number/bigint per the width literal when callers pass a literal). Prefer\n// the named factories (int32(), int64(), …) for precise typing.\nexport function int(bitWidth?: 8 | 16 | 32 | 64, signed?: boolean): IntType<8 | 16 | 32 | 64, boolean> {\n return impl.int(bitWidth, signed) as unknown as IntType<8 | 16 | 32 | 64, boolean>;\n}\n\nexport const float16 = (): FloatType => impl.float16() as unknown as FloatType;\nexport const float32 = (): FloatType => impl.float32() as unknown as FloatType;\nexport const float64 = (): FloatType => impl.float64() as unknown as FloatType;\n\nexport const utf8 = (): Utf8Type => impl.utf8() as unknown as Utf8Type;\nexport const binary = (): BinaryType => impl.binary() as unknown as BinaryType;\nexport const fixedSizeBinary = (byteWidth: number): FixedSizeBinaryType =>\n impl.fixedSizeBinary(byteWidth) as unknown as FixedSizeBinaryType;\n\n// ----- Decimal -------------------------------------------------------------\n\nexport const decimal = (precision: number, scale: number, bitWidth?: 32 | 64 | 128 | 256): DecimalType =>\n impl.decimal(precision, scale, bitWidth) as unknown as DecimalType;\nexport const decimal128 = (precision: number, scale: number): DecimalType =>\n impl.decimal128(precision, scale) as unknown as DecimalType;\nexport const decimal256 = (precision: number, scale: number): DecimalType =>\n impl.decimal256(precision, scale) as unknown as DecimalType;\n\n// ----- Date / Time / Timestamp / Duration / Interval -----------------------\n\n// `date(unit)` with a runtime unit isn't statically resolvable; it widens to\n// Date64Type (ms) — the default. Use dateDay()/dateMillisecond() for precision.\nexport const date = (unit?: number): Date64Type => impl.date(unit) as unknown as Date64Type;\nexport const dateDay = (): Date32Type => impl.dateDay() as unknown as Date32Type;\nexport const dateMillisecond = (): Date64Type => impl.dateMillisecond() as unknown as Date64Type;\n\nexport const timeSecond = (): Time32Type<\"s\"> => impl.timeSecond() as unknown as Time32Type<\"s\">;\nexport const timeMillisecond = (): Time32Type<\"ms\"> => impl.timeMillisecond() as unknown as Time32Type<\"ms\">;\nexport const timeMicrosecond = (): Time64Type<\"us\"> => impl.timeMicrosecond() as unknown as Time64Type<\"us\">;\nexport const timeNanosecond = (): Time64Type<\"ns\"> => impl.timeNanosecond() as unknown as Time64Type<\"ns\">;\n\n// Generic time(unit, bitWidth): degrades to a union of the precise time types.\nexport function time(unit?: number, bitWidth?: 32 | 64): Time32Type<\"s\" | \"ms\"> | Time64Type<\"us\" | \"ns\"> {\n return impl.time(unit, bitWidth) as unknown as Time32Type<\"s\" | \"ms\"> | Time64Type<\"us\" | \"ns\">;\n}\n\nconst UNIT_TO_TAG: Record<number, TUnit> = {\n [impl.TimeUnit.SECOND]: \"s\",\n [impl.TimeUnit.MILLISECOND]: \"ms\",\n [impl.TimeUnit.MICROSECOND]: \"us\",\n [impl.TimeUnit.NANOSECOND]: \"ns\",\n};\n\n/** timestamp(unit): when called with a literal unit constant the result type\n * carries that unit; with a runtime number it widens to TimestampType<TUnit>. */\nexport function timestamp<U extends TUnit = TUnit>(\n unit?: number,\n timezone?: string | null,\n): TimestampType<U> {\n return impl.timestamp(unit, timezone ?? null) as unknown as TimestampType<U>;\n}\n\nexport function duration<U extends TUnit = TUnit>(unit?: number): DurationType<U> {\n return impl.duration(unit) as unknown as DurationType<U>;\n}\n\n// Unit-precise convenience factories — these carry the wire unit in the static\n// type without the caller needing an explicit type argument, so raw-mode\n// branded typing is automatic. (The generic timestamp()/duration() above\n// can't infer the unit from a runtime `number`, so prefer these.)\nexport const timestampSeconds = (timezone?: string | null): TimestampType<\"s\"> =>\n impl.timestamp(impl.TimeUnit.SECOND, timezone ?? null) as unknown as TimestampType<\"s\">;\nexport const timestampMillis = (timezone?: string | null): TimestampType<\"ms\"> =>\n impl.timestamp(impl.TimeUnit.MILLISECOND, timezone ?? null) as unknown as TimestampType<\"ms\">;\nexport const timestampMicros = (timezone?: string | null): TimestampType<\"us\"> =>\n impl.timestamp(impl.TimeUnit.MICROSECOND, timezone ?? null) as unknown as TimestampType<\"us\">;\nexport const timestampNanos = (timezone?: string | null): TimestampType<\"ns\"> =>\n impl.timestamp(impl.TimeUnit.NANOSECOND, timezone ?? null) as unknown as TimestampType<\"ns\">;\n\nexport const durationSeconds = (): DurationType<\"s\"> =>\n impl.duration(impl.TimeUnit.SECOND) as unknown as DurationType<\"s\">;\nexport const durationMillis = (): DurationType<\"ms\"> =>\n impl.duration(impl.TimeUnit.MILLISECOND) as unknown as DurationType<\"ms\">;\nexport const durationMicros = (): DurationType<\"us\"> =>\n impl.duration(impl.TimeUnit.MICROSECOND) as unknown as DurationType<\"us\">;\nexport const durationNanos = (): DurationType<\"ns\"> =>\n impl.duration(impl.TimeUnit.NANOSECOND) as unknown as DurationType<\"ns\">;\n\nexport const interval = (unit?: number): IntervalType => impl.interval(unit) as unknown as IntervalType;\n\n// ----- Nested --------------------------------------------------------------\n\nexport function list<T extends VgiDataType>(child: TypedField<string, T> | T): ListType<T> {\n return impl.list(child as any) as unknown as ListType<T>;\n}\n\nexport function fixedSizeList<T extends VgiDataType>(\n child: TypedField<string, T> | T,\n listSize: number,\n): FixedSizeListType<T> {\n return impl.fixedSizeList(child as any, listSize) as unknown as FixedSizeListType<T>;\n}\n\nexport function struct<const C extends readonly TypedField<string, VgiDataType>[]>(\n children: C,\n): StructType<C> {\n return impl.struct(children as unknown as readonly VgiField[]) as unknown as StructType<C>;\n}\n\nexport function map<K extends VgiDataType, V extends VgiDataType>(\n keyField: TypedField<string, K> | K,\n valueField: TypedField<string, V> | V,\n keysSorted?: boolean,\n): MapType<K, V> {\n return impl.map(keyField as any, valueField as any, keysSorted) as unknown as MapType<K, V>;\n}\n\nexport function dictionary<V extends VgiDataType>(\n valueType: V,\n indexType?: VgiDataType,\n ordered?: boolean,\n id?: number,\n): DictionaryType<V> {\n return impl.dictionary(valueType as any, indexType as any, ordered, id) as unknown as DictionaryType<V>;\n}\n\nexport function union(\n mode: number,\n children: readonly (VgiField | VgiDataType)[],\n typeIds?: number[],\n): UnionType {\n return impl.union(mode, children as any, typeIds) as unknown as UnionType;\n}\n\nexport const sparseUnion = (\n children: readonly (VgiField | VgiDataType)[],\n typeIds?: number[],\n): UnionType => impl.sparseUnion(children as any, typeIds) as unknown as UnionType;\n\nexport const denseUnion = (\n children: readonly (VgiField | VgiDataType)[],\n typeIds?: number[],\n): UnionType => impl.denseUnion(children as any, typeIds) as unknown as UnionType;\n",
|
|
19
19
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n//\n// Branded \"raw\" scalar types — phase 3.\n//\n// The `raw` representation is a branded view layered directly on top of the\n// CANONICAL value (see ./registry.ts). A branded raw value is, at runtime,\n// exactly the underlying canonical primitive (a `number` or a `bigint`); the\n// brand exists only at the type level so the compiler can distinguish, say, a\n// `Date32` (days since epoch) from a plain `number` or a `TimestampMicros`\n// (raw us) from a plain `bigint`. This carries the WIRE UNIT in the type and\n// makes a wrong-unit mix-up a compile error in `raw` mode.\n//\n// Constructors (`asDate32`, `asTimestampMicros`, …) validate the underlying\n// value by reusing the codec's validation (so a raw constructor enforces the\n// same range/integrality rules as building a column) and then brand it.\n// Unwrappers (`fromBranded`) strip the brand back to the plain primitive; they\n// are identity at runtime.\n//\n// Rich mode (the phase-1 default) uses JS `Date` for date32/date64 and plain\n// number/bigint everywhere else. Raw mode replaces those with the branded\n// aliases below so every temporal/decimal/64-bit-int slot is unit-tagged.\n\nimport {\n int32 as int32Type,\n int64 as int64Type,\n uint64 as uint64Type,\n decimal128 as decimal128Type,\n TimeUnit,\n} from \"../schema-types.js\";\nimport { codecFor } from \"./registry.js\";\n\n// ---------------------------------------------------------------------------\n// Brand machinery\n// ---------------------------------------------------------------------------\n\ndeclare const __brand: unique symbol;\n\n/** A nominal brand over a base primitive. `Branded<number, 'date32'>` is a\n * `number` at runtime but a distinct type at compile time. */\nexport type Branded<Base, Tag extends string> = Base & {\n readonly [__brand]: Tag;\n};\n\n// ---------------------------------------------------------------------------\n// Branded scalar aliases (over the CANONICAL value, carrying unit info)\n// ---------------------------------------------------------------------------\n\n/** date32 raw: days since the Unix epoch. */\nexport type Date32 = Branded<number, \"date32\">;\n/** date64 raw: milliseconds since the Unix epoch. */\nexport type Date64Ms = Branded<bigint, \"date64ms\">;\n\n/** time32[s] raw: seconds since midnight. */\nexport type Time32S = Branded<number, \"time32s\">;\n/** time32[ms] raw: milliseconds since midnight. */\nexport type Time32Ms = Branded<number, \"time32ms\">;\n/** time64[us] raw: microseconds since midnight. */\nexport type Time64Us = Branded<bigint, \"time64us\">;\n/** time64[ns] raw: nanoseconds since midnight. */\nexport type Time64Ns = Branded<bigint, \"time64ns\">;\n\n/** timestamp[s] raw. */\nexport type TimestampSeconds = Branded<bigint, \"ts_s\">;\n/** timestamp[ms] raw. */\nexport type TimestampMillis = Branded<bigint, \"ts_ms\">;\n/** timestamp[us] raw. */\nexport type TimestampMicros = Branded<bigint, \"ts_us\">;\n/** timestamp[ns] raw. */\nexport type TimestampNanos = Branded<bigint, \"ts_ns\">;\n\n/** duration[s] raw. */\nexport type DurationSeconds = Branded<bigint, \"dur_s\">;\n/** duration[ms] raw. */\nexport type DurationMillis = Branded<bigint, \"dur_ms\">;\n/** duration[us] raw. */\nexport type DurationMicros = Branded<bigint, \"dur_us\">;\n/** duration[ns] raw. */\nexport type DurationNanos = Branded<bigint, \"dur_ns\">;\n\n/** A decimal's UNSCALED integer (the on-wire representation). */\nexport type UnscaledDecimal = Branded<bigint, \"decimal_unscaled\">;\n\n/** int64 raw. (Rich int64 is already a plain bigint; the brand makes the\n * declared width explicit in raw mode.) */\nexport type Int64 = Branded<bigint, \"int64\">;\n/** uint64 raw. */\nexport type Uint64 = Branded<bigint, \"uint64\">;\n\n// ---------------------------------------------------------------------------\n// Validation-reusing constructors\n// ---------------------------------------------------------------------------\n\n// One codec instance per branded type, reused for validation. `richToCanonical`\n// is the validating canonical-producer; for these scalar types rich===canonical\n// (except date, which the raw constructor sidesteps by validating the numeric\n// directly), so this is exactly the right range/integrality check.\n\nconst dec128Codec = codecFor(decimal128Type(38, 0));\n\n/** Validate `n` against int32 integrality/range, returning it unbranded. */\nfunction validateInt32(n: number): number {\n codecFor(int32Type()).richToCanonical(n);\n return n;\n}\n\nfunction validateBigInt(\n codecType: ReturnType<typeof int64Type> | ReturnType<typeof uint64Type>,\n b: bigint,\n): bigint {\n codecFor(codecType).richToCanonical(b);\n return b;\n}\n\n/** date32 days: validated as a 32-bit integer day-number, then branded. */\nexport function asDate32(days: number): Date32 {\n if (!Number.isInteger(days)) {\n throw new TypeError(`asDate32: expected an integer day-number, got ${days}`);\n }\n return validateInt32(days) as Date32;\n}\n\n/** date64 ms: validated as a 64-bit integer, then branded. */\nexport function asDate64Ms(ms: bigint): Date64Ms {\n return validateBigInt(int64Type(), ms) as unknown as Date64Ms;\n}\n\nfunction asTime32(label: string, n: number): number {\n if (!Number.isInteger(n)) {\n throw new TypeError(`${label}: expected an integer, got ${n}`);\n }\n return validateInt32(n);\n}\n\n/** time32[s]. */\nexport const asTime32S = (n: number): Time32S => asTime32(\"asTime32S\", n) as Time32S;\n/** time32[ms]. */\nexport const asTime32Ms = (n: number): Time32Ms => asTime32(\"asTime32Ms\", n) as Time32Ms;\n\n/** time64[us]. */\nexport const asTime64Us = (b: bigint): Time64Us =>\n validateBigInt(int64Type(), b) as unknown as Time64Us;\n/** time64[ns]. */\nexport const asTime64Ns = (b: bigint): Time64Ns =>\n validateBigInt(int64Type(), b) as unknown as Time64Ns;\n\n/** timestamp[s]. */\nexport const asTimestampSeconds = (b: bigint): TimestampSeconds =>\n validateBigInt(int64Type(), b) as unknown as TimestampSeconds;\n/** timestamp[ms]. */\nexport const asTimestampMillis = (b: bigint): TimestampMillis =>\n validateBigInt(int64Type(), b) as unknown as TimestampMillis;\n/** timestamp[us]. */\nexport const asTimestampMicros = (b: bigint): TimestampMicros =>\n validateBigInt(int64Type(), b) as unknown as TimestampMicros;\n/** timestamp[ns]. */\nexport const asTimestampNanos = (b: bigint): TimestampNanos =>\n validateBigInt(int64Type(), b) as unknown as TimestampNanos;\n\n/** duration[s]. */\nexport const asDurationSeconds = (b: bigint): DurationSeconds =>\n validateBigInt(int64Type(), b) as unknown as DurationSeconds;\n/** duration[ms]. */\nexport const asDurationMillis = (b: bigint): DurationMillis =>\n validateBigInt(int64Type(), b) as unknown as DurationMillis;\n/** duration[us]. */\nexport const asDurationMicros = (b: bigint): DurationMicros =>\n validateBigInt(int64Type(), b) as unknown as DurationMicros;\n/** duration[ns]. */\nexport const asDurationNanos = (b: bigint): DurationNanos =>\n validateBigInt(int64Type(), b) as unknown as DurationNanos;\n\n/** A decimal's unscaled integer (validated as a bigint, then branded). */\nexport function asUnscaledDecimal(unscaled: bigint): UnscaledDecimal {\n dec128Codec.richToCanonical(unscaled);\n return unscaled as unknown as UnscaledDecimal;\n}\n\n/** int64 (validated for signed 64-bit range). */\nexport const asInt64 = (b: bigint): Int64 =>\n validateBigInt(int64Type(), b) as unknown as Int64;\n/** uint64 (validated for unsigned 64-bit range). */\nexport const asUint64 = (b: bigint): Uint64 =>\n validateBigInt(uint64Type(), b) as unknown as Uint64;\n\n// ---------------------------------------------------------------------------\n// Unwrappers — strip the brand back to the plain primitive (identity at runtime)\n// ---------------------------------------------------------------------------\n\n/** Strip a numeric brand, returning the plain `number`. */\nexport function fromBrandedNumber(v: Branded<number, string>): number {\n return v as number;\n}\n\n/** Strip a bigint brand, returning the plain `bigint`. */\nexport function fromBrandedBigInt(v: Branded<bigint, string>): bigint {\n return v as bigint;\n}\n\n/** Generic unbrand for either base type. */\nexport function fromBranded<Base, Tag extends string>(v: Branded<Base, Tag>): Base {\n return v as Base;\n}\n\n// Re-export TimeUnit for callers that want to pick a timestamp/duration unit\n// when constructing facade types alongside branded values.\nexport { TimeUnit };\n",
|
|
20
|
-
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Public facade. Internal vgi-typescript code imports Arrow operations\n// from here; the active backend is selected at module-resolution time\n// via the `#arrow-impl` subpath in package.json's `imports` field.\n//\n// Selection conditions:\n// workerd / worker / browser -> impl-flechette (Cloudflare Workers, etc.)\n// default -> impl-arrowjs (Bun worker, Node)\n\n// Backend-agnostic types (defined in this package, satisfied structurally\n// by both arrow-js and flechette native values).\nexport type {\n VgiTypeId,\n VgiDataType,\n VgiField,\n VgiSchema,\n VgiColumn,\n VgiColumnData,\n VgiBatch,\n VgiBackendInfo,\n TaggedUnion,\n} from \"./types.js\";\n\n// Backend-agnostic predicates.\nexport {\n TypeId,\n isNull,\n isInt,\n isFloat,\n isBinary,\n isUtf8,\n isBool,\n isDecimal,\n isDate,\n isTime,\n isTimestamp,\n isInterval,\n isList,\n isStruct,\n isUnion,\n isFixedSizeBinary,\n isFixedSizeList,\n isMap,\n isDuration,\n isDictionary,\n isBatch,\n} from \"./predicates.js\";\n\n// Active backend's surface (IPC, build, iterate, utilities).\nexport {\n backend,\n // batch utilities\n emptyBatch, batchFromRows, batchFromColumns, columnFromArray,\n iterRows, batchToScalarDict, batchToSecretDict, safeNumber, decodeDictValue,\n filterBatch, projectSchema, projectBatch,\n // per-record-batch metadata attachment\n withBatchMetadata,\n // canonical single-value read (backend-agnostic, lossless)\n readCanonicalValue,\n // IPC\n serializeSchema, deserializeSchema, serializeBatch, deserializeBatch,\n // Column statistics\n buildStatisticsBatch,\n} from \"#arrow-impl\";\n\nexport type { ColumnStatistics } from \"#arrow-impl\";\n\n// Type factories — exported from the TYPED facade layer (schema-types.ts) so\n// every factory carries a PRECISE nominal static descriptor (Date32Type,\n// TimestampType<'us'>, StructType<...>, …). Runtime values are identical to the\n// backend factories; the typed layer only refines the static return type, which\n// is what makes the rich/raw value mapping (RichValue/RawValue/ValueFor) and\n// the statically-typed define* author API work. Both backends report the same\n// static types from here.\nexport {\n schema, field,\n nullType, bool,\n int, int8, int16, int32, int64,\n uint8, uint16, uint32, uint64,\n float16, float32, float64,\n utf8, binary, fixedSizeBinary,\n decimal, decimal128, decimal256,\n date, dateDay, dateMillisecond,\n time, timeSecond, timeMillisecond, timeMicrosecond, timeNanosecond,\n timestamp, duration, interval,\n timestampSeconds, timestampMillis, timestampMicros, timestampNanos,\n durationSeconds, durationMillis, durationMicros, durationNanos,\n list, fixedSizeList, struct, map,\n dictionary,\n union, sparseUnion, denseUnion,\n TimeUnit, DateUnit, IntervalUnit, UnionMode,\n} from \"./schema-types.js\";\n\n// Precise nominal type descriptors (the static face of the factory returns).\nexport type {\n NullDescriptor,\n BoolType,\n IntType, Int8Type, Int16Type, Int32Type, Int64Type,\n Uint8Type, Uint16Type, Uint32Type, Uint64Type,\n FloatType, Utf8Type, LargeUtf8Type, BinaryType, LargeBinaryType,\n FixedSizeBinaryType, DecimalType,\n Date32Type, Date64Type, Time32Type, Time64Type,\n TimestampType, DurationType, IntervalType,\n ListType, FixedSizeListType, StructType, MapType, DictionaryType, UnionType,\n TypedField, TUnit,\n} from \"./codec/type-descriptors.js\";\n\n// Rich/raw value mapping.\nexport type { RichValue, RawValue, ValueFor, Repr } from \"./codec/repr.js\";\n\n// Codec registry (single value rich<->canonical<->raw converters for manual use).\nexport { codecFor } from \"./codec/registry.js\";\nexport type { Codec } from \"./codec/registry.js\";\n\n// Branded raw scalar types + validating constructors / unwrappers.\nexport type {\n Branded,\n Date32, Date64Ms,\n Time32S, Time32Ms, Time64Us, Time64Ns,\n TimestampSeconds, TimestampMillis, TimestampMicros, TimestampNanos,\n DurationSeconds, DurationMillis, DurationMicros, DurationNanos,\n UnscaledDecimal, Int64 as Int64Raw, Uint64 as Uint64Raw,\n} from \"./codec/branded.js\";\nexport {\n asDate32, asDate64Ms,\n asTime32S, asTime32Ms, asTime64Us, asTime64Ns,\n asTimestampSeconds, asTimestampMillis, asTimestampMicros, asTimestampNanos,\n asDurationSeconds, asDurationMillis, asDurationMicros, asDurationNanos,\n asUnscaledDecimal, asInt64, asUint64,\n fromBranded, fromBrandedNumber, fromBrandedBigInt,\n} from \"./codec/branded.js\";\n",
|
|
20
|
+
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Public facade. Internal vgi-typescript code imports Arrow operations\n// from here; the active backend is selected at module-resolution time\n// via the `#arrow-impl` subpath in package.json's `imports` field.\n//\n// Selection conditions:\n// workerd / worker / browser -> impl-flechette (Cloudflare Workers, etc.)\n// default -> impl-arrowjs (Bun worker, Node)\n\n// Backend-agnostic types (defined in this package, satisfied structurally\n// by both arrow-js and flechette native values).\nexport type {\n VgiTypeId,\n VgiDataType,\n VgiField,\n VgiSchema,\n VgiColumn,\n VgiColumnData,\n VgiBatch,\n VgiBackendInfo,\n TaggedUnion,\n} from \"./types.js\";\n\n// Backend-agnostic predicates.\nexport {\n TypeId,\n isNull,\n isInt,\n isFloat,\n isBinary,\n isUtf8,\n isBool,\n isDecimal,\n isDate,\n isTime,\n isTimestamp,\n isInterval,\n isList,\n isStruct,\n isUnion,\n isFixedSizeBinary,\n isFixedSizeList,\n isMap,\n isDuration,\n isDictionary,\n isBatch,\n typeSignature,\n} from \"./predicates.js\";\n\n// Active backend's surface (IPC, build, iterate, utilities).\nexport {\n backend,\n // batch utilities\n emptyBatch, batchFromRows, batchFromColumns, columnFromArray,\n iterRows, batchToScalarDict, batchToSecretDict, safeNumber, decodeDictValue,\n filterBatch, projectSchema, projectBatch,\n // per-record-batch metadata attachment\n withBatchMetadata,\n // arrow-js method shape for batches decoded outside this module's backend copy\n adoptArrowJsShape,\n // canonical single-value read (backend-agnostic, lossless)\n readCanonicalValue,\n // IPC\n serializeSchema, deserializeSchema, serializeBatch, deserializeBatch,\n // Column statistics\n buildStatisticsBatch,\n} from \"#arrow-impl\";\n\nexport type { ColumnStatistics } from \"#arrow-impl\";\n\n// Type factories — exported from the TYPED facade layer (schema-types.ts) so\n// every factory carries a PRECISE nominal static descriptor (Date32Type,\n// TimestampType<'us'>, StructType<...>, …). Runtime values are identical to the\n// backend factories; the typed layer only refines the static return type, which\n// is what makes the rich/raw value mapping (RichValue/RawValue/ValueFor) and\n// the statically-typed define* author API work. Both backends report the same\n// static types from here.\nexport {\n schema, field,\n nullType, bool,\n int, int8, int16, int32, int64,\n uint8, uint16, uint32, uint64,\n float16, float32, float64,\n utf8, binary, fixedSizeBinary,\n decimal, decimal128, decimal256,\n date, dateDay, dateMillisecond,\n time, timeSecond, timeMillisecond, timeMicrosecond, timeNanosecond,\n timestamp, duration, interval,\n timestampSeconds, timestampMillis, timestampMicros, timestampNanos,\n durationSeconds, durationMillis, durationMicros, durationNanos,\n list, fixedSizeList, struct, map,\n dictionary,\n union, sparseUnion, denseUnion,\n TimeUnit, DateUnit, IntervalUnit, UnionMode,\n} from \"./schema-types.js\";\n\n// Precise nominal type descriptors (the static face of the factory returns).\nexport type {\n NullDescriptor,\n BoolType,\n IntType, Int8Type, Int16Type, Int32Type, Int64Type,\n Uint8Type, Uint16Type, Uint32Type, Uint64Type,\n FloatType, Utf8Type, LargeUtf8Type, BinaryType, LargeBinaryType,\n FixedSizeBinaryType, DecimalType,\n Date32Type, Date64Type, Time32Type, Time64Type,\n TimestampType, DurationType, IntervalType,\n ListType, FixedSizeListType, StructType, MapType, DictionaryType, UnionType,\n TypedField, TUnit,\n} from \"./codec/type-descriptors.js\";\n\n// Rich/raw value mapping.\nexport type { RichValue, RawValue, ValueFor, Repr } from \"./codec/repr.js\";\n\n// Codec registry (single value rich<->canonical<->raw converters for manual use).\nexport { codecFor } from \"./codec/registry.js\";\nexport type { Codec } from \"./codec/registry.js\";\n\n// Branded raw scalar types + validating constructors / unwrappers.\nexport type {\n Branded,\n Date32, Date64Ms,\n Time32S, Time32Ms, Time64Us, Time64Ns,\n TimestampSeconds, TimestampMillis, TimestampMicros, TimestampNanos,\n DurationSeconds, DurationMillis, DurationMicros, DurationNanos,\n UnscaledDecimal, Int64 as Int64Raw, Uint64 as Uint64Raw,\n} from \"./codec/branded.js\";\nexport {\n asDate32, asDate64Ms,\n asTime32S, asTime32Ms, asTime64Us, asTime64Ns,\n asTimestampSeconds, asTimestampMillis, asTimestampMicros, asTimestampNanos,\n asDurationSeconds, asDurationMillis, asDurationMicros, asDurationNanos,\n asUnscaledDecimal, asInt64, asUint64,\n fromBranded, fromBrandedNumber, fromBrandedBigInt,\n} from \"./codec/branded.js\";\n",
|
|
21
21
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Cloudflare Durable Object storage for VGI function state.\n//\n// Port of vgi-python's vgi/function_storage_cf_do.py. Talks the Cloudflare\n// Worker + Durable Object's unified state_* / queue_* protocol\n// (vgi-cloudflare-durable-object-storage/src/index.ts). Every request carries\n// the per-attach `shard_key` (set via forShard); destructive ops carry a fresh\n// 32-hex `attempt_id`. The DO is single-threaded SQLite, so ops are atomic.\n//\n// Usage:\n// Set `VGI_WORKER_SHARED_STORAGE=cloudflare-do` plus `VGI_CF_DO_URL`.\n// Optionally set `VGI_CF_DO_TOKEN` for bearer auth.\n\nimport type { FunctionStorage } from \"./storage.js\";\nimport { UnknownInvocationError } from \"./storage.js\";\n\n/** Minimal fetch signature satisfied by both the global `fetch` and a\n * Cloudflare service-binding Fetcher (`env.<BINDING>`). */\nexport type FetchLike = (\n input: string,\n init?: { method?: string; headers?: Record<string, string>; body?: string },\n) => Promise<Response>;\n\n// Namespaces under the unified state_* table for the legacy worker/queue\n// families the DO no longer has dedicated endpoints for.\nconst NS_WORKER = new TextEncoder().encode(\"worker\");\n\nexport class FunctionStorageCfDo implements FunctionStorage {\n private readonly _baseUrl: string;\n private readonly _token: string | null;\n /** Per-attach routing key (att-<hex uuid>); \"\" until pinned via forShard. */\n private readonly _shardKey: string;\n /** Fetch implementation. Defaults to the global `fetch`; pass a Cloudflare\n * service-binding Fetcher (env.<BINDING>) when the storage worker lives on\n * the same account/zone — a same-zone public-URL fetch is rejected (CF\n * error 1042), but a service binding routes worker-to-worker directly. */\n private readonly _fetch: FetchLike;\n\n constructor(opts: {\n url: string;\n token?: string | null;\n shardKey?: string;\n fetch?: FetchLike;\n }) {\n // Strip trailing slash so endpoint paths can be appended unconditionally.\n this._baseUrl = opts.url.replace(/\\/+$/, \"\");\n this._token = opts.token ?? null;\n this._shardKey = opts.shardKey ?? \"\";\n this._fetch = opts.fetch ?? ((input, init) => fetch(input as any, init));\n }\n\n /** Build an instance from environment variables. */\n static fromEnv(): FunctionStorageCfDo {\n const url = process.env.VGI_CF_DO_URL;\n if (!url) {\n throw new Error(\n \"VGI_CF_DO_URL environment variable is required when \" +\n \"VGI_WORKER_SHARED_STORAGE=cloudflare-do\",\n );\n }\n return new FunctionStorageCfDo({\n url,\n token: process.env.VGI_CF_DO_TOKEN || null,\n });\n }\n\n /**\n * Return a view of this backend pinned to one shard key, so callers can route\n * per logical ATTACH. Shares the URL/token; only the shard key differs.\n */\n forShard(shardKey: string): FunctionStorageCfDo {\n return new FunctionStorageCfDo({\n url: this._baseUrl,\n token: this._token,\n shardKey,\n fetch: this._fetch,\n });\n }\n\n // --- Worker state → ns=worker, key = int64(worker_id) ---\n\n async workerPut(executionId: Uint8Array, workerId: number, state: Uint8Array): Promise<void> {\n await this._statePutMany(executionId, NS_WORKER, [[int64Key(workerId), state]]);\n }\n\n async workerCollect(executionId: Uint8Array): Promise<Uint8Array[]> {\n const rows = await this._statePaged(\"state_drain\", executionId, NS_WORKER, newAttemptId());\n return rows.map(([, v]) => v);\n }\n\n async workerScan(executionId: Uint8Array): Promise<Array<[number, Uint8Array]>> {\n const rows = await this._statePaged(\"state_scan\", executionId, NS_WORKER, null);\n return rows.map(([k, v]) => [int64FromKey(k), v]);\n }\n\n // --- Work queue ---\n\n async queuePush(executionId: Uint8Array, items: Uint8Array[]): Promise<number> {\n const data = await this._post<{ count: number }>(\"queue_push\", {\n execution_id: bytesToB64(executionId),\n items: items.map(bytesToB64),\n attempt_id: newAttemptId(),\n });\n return Number(data.count);\n }\n\n async queuePop(executionId: Uint8Array): Promise<Uint8Array | null> {\n const data = await this._post<{ item: string | null }>(\"queue_pop\", {\n execution_id: bytesToB64(executionId),\n attempt_id: newAttemptId(),\n });\n return data.item ? b64ToBytes(data.item) : null;\n }\n\n async queueClear(executionId: Uint8Array): Promise<number> {\n const data = await this._post<{ cleared: number }>(\"queue_clear\", {\n execution_id: bytesToB64(executionId),\n attempt_id: newAttemptId(),\n });\n return Number(data.cleared);\n }\n\n // --- Namespaced key/value state ---\n\n async stateGet(scopeId: Uint8Array, ns: Uint8Array, key: Uint8Array): Promise<Uint8Array | null> {\n const data = await this._post<{ rows: Array<{ value: string } | null> }>(\"state_get_many\", {\n scope_id: bytesToB64(scopeId),\n ns: bytesToB64(ns),\n keys: [bytesToB64(key)],\n });\n const row = (data.rows ?? [])[0];\n return row ? b64ToBytes(row.value) : null;\n }\n\n async statePut(scopeId: Uint8Array, ns: Uint8Array, key: Uint8Array, value: Uint8Array): Promise<void> {\n await this._statePutMany(scopeId, ns, [[key, value]]);\n }\n\n // --- Append-only log ---\n\n async stateAppend(scopeId: Uint8Array, ns: Uint8Array, key: Uint8Array, item: Uint8Array): Promise<number> {\n const data = await this._post<{ ordinal: number }>(\"state_append\", {\n scope_id: bytesToB64(scopeId),\n ns: bytesToB64(ns),\n key: bytesToB64(key),\n item: bytesToB64(item),\n attempt_id: newAttemptId(),\n });\n return Number(data.ordinal);\n }\n\n async stateLogScan(\n scopeId: Uint8Array,\n ns: Uint8Array,\n key: Uint8Array,\n afterId: number = -1,\n limit: number | null = null,\n ): Promise<Array<[number, Uint8Array]>> {\n const body: Record<string, unknown> = {\n scope_id: bytesToB64(scopeId),\n ns: bytesToB64(ns),\n key: bytesToB64(key),\n after_id: afterId,\n };\n if (limit != null && limit > 0) body.limit = limit;\n const data = await this._post<{ rows: Array<{ id: number; value: string }> }>(\"state_log_scan\", body);\n return (data.rows ?? []).map((r) => [Number(r.id), b64ToBytes(r.value)]);\n }\n\n async executionClear(scopeId: Uint8Array): Promise<number> {\n const data = await this._post<{ deleted: number }>(\"execution_clear\", {\n scope_id: bytesToB64(scopeId),\n attempt_id: newAttemptId(),\n });\n return Number(data.deleted);\n }\n\n // --- unified state_* helpers ---\n\n private async _statePutMany(\n scopeId: Uint8Array,\n ns: Uint8Array,\n items: Array<[Uint8Array, Uint8Array]>,\n ): Promise<void> {\n await this._post(\"state_put_many\", {\n scope_id: bytesToB64(scopeId),\n ns: bytesToB64(ns),\n items: items.map(([k, v]) => ({ key: bytesToB64(k), value: bytesToB64(v) })),\n attempt_id: newAttemptId(),\n });\n }\n\n /** Drive state_scan / state_drain across pages. attemptId is null for scan. */\n private async _statePaged(\n endpoint: string,\n scopeId: Uint8Array,\n ns: Uint8Array,\n attemptId: string | null,\n ): Promise<Array<[Uint8Array, Uint8Array]>> {\n const out: Array<[Uint8Array, Uint8Array]> = [];\n let afterKey: string | undefined;\n for (;;) {\n const body: Record<string, unknown> = { scope_id: bytesToB64(scopeId), ns: bytesToB64(ns) };\n if (afterKey != null) body.after_key = afterKey;\n if (attemptId != null) body.attempt_id = attemptId;\n const data = await this._post<{ rows: Array<{ key: string; value: string }>; next_after?: string }>(\n endpoint,\n body,\n );\n for (const r of data.rows ?? []) out.push([b64ToBytes(r.key), b64ToBytes(r.value)]);\n if (!data.next_after) break;\n afterKey = data.next_after;\n }\n return out;\n }\n\n // --- HTTP plumbing ---\n\n private async _post<T = Record<string, unknown>>(\n endpoint: string,\n body: Record<string, unknown>,\n ): Promise<T> {\n const url = `${this._baseUrl}/${endpoint}`;\n const headers: Record<string, string> = { \"Content-Type\": \"application/json\" };\n if (this._token) headers[\"Authorization\"] = `Bearer ${this._token}`;\n // The Worker routes on shard_key (idFromName) and rejects requests without\n // one — always splice it in.\n const payload = JSON.stringify({ ...body, shard_key: this._shardKey });\n\n let lastErr: unknown;\n // One retry on transport-level failures, matching the python client.\n for (let attempt = 0; attempt < 2; attempt++) {\n let resp: Response;\n try {\n resp = await this._fetch(url, { method: \"POST\", headers, body: payload });\n } catch (err) {\n lastErr = err;\n continue;\n }\n\n let data: any;\n try {\n data = await resp.json();\n } catch {\n if (!resp.ok) {\n throw new Error(`CF DO storage error ${resp.status} on ${endpoint}: <non-json body>`);\n }\n return {} as T;\n }\n\n if (resp.status === 404 && data?.error === \"unknown_invocation\") {\n throw new UnknownInvocationError(\n data.message ??\n \"Invocation is not registered. Call queuePush first to register the invocation.\",\n );\n }\n if (resp.status === 401) {\n throw new Error(`Authentication failed: ${data?.error ?? \"unauthorized\"}`);\n }\n if (!resp.ok) {\n throw new Error(`CF DO storage error ${resp.status} on ${endpoint}: ${JSON.stringify(data)}`);\n }\n return data as T;\n }\n throw lastErr instanceof Error\n ? lastErr\n : new Error(`CF DO storage transport error on ${endpoint}: ${String(lastErr)}`);\n }\n}\n\n/** Fresh 32-char lowercase-hex idempotency token (the DO's attempt_id shape). */\nfunction newAttemptId(): string {\n const b = new Uint8Array(16);\n crypto.getRandomValues(b);\n let s = \"\";\n for (let i = 0; i < 16; i++) s += b[i].toString(16).padStart(2, \"0\");\n return s;\n}\n\n/** Encode an int64 worker/group id as an 8-byte big-endian state key. */\nfunction int64Key(v: number): Uint8Array {\n const b = new Uint8Array(8);\n new DataView(b.buffer).setBigInt64(0, BigInt(v), false);\n return b;\n}\n\nfunction int64FromKey(b: Uint8Array): number {\n if (b.length !== 8) return 0;\n return Number(new DataView(b.buffer, b.byteOffset, 8).getBigInt64(0, false));\n}\n\nfunction bytesToB64(buf: Uint8Array): string {\n let binary = \"\";\n for (let i = 0; i < buf.length; i++) binary += String.fromCharCode(buf[i]);\n return btoa(binary);\n}\n\nfunction b64ToBytes(b64: string): Uint8Array {\n const binary = atob(b64);\n const out = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) out[i] = binary.charCodeAt(i);\n return out;\n}\n",
|
|
22
22
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Storage for VGI function state.\n// Provides shared state across worker processes for distributed execution.\n// Port of vgi-python's vgi/function_storage.py.\n//\n// The interface is async so HTTP-backed implementations (Cloudflare DO,\n// Azure SQL, etc.) can use fetch/network drivers without sync hacks.\n// FunctionStorageSqlite wraps bun:sqlite's sync calls in resolved promises.\n\n// FunctionStorageSqlite is the only thing in this module that needs Bun + node:*\n// modules. Workers (Cloudflare workerd / browsers) should use\n// FunctionStorageCfDo (HTTP-backed) instead — they never reach this class.\n// We resolve all node:* and bun:* dependencies through indirect string\n// variables that esbuild can't trace statically, so workerd bundles cleanly\n// without nodejs_compat polyfills for paths we never run.\ntype Database = any;\nconst _BUN_SQLITE_MOD = \"bun:sqlite\";\nconst _NODE_OS_MOD = \"node:os\";\nconst _NODE_PATH_MOD = \"node:path\";\nconst _NODE_FS_MOD = \"node:fs\";\nlet _Database: any = null;\nfunction _req(): any {\n const req: any = (import.meta as any).require ?? (globalThis as any).require ?? null;\n if (!req) {\n throw new Error(\n \"FunctionStorageSqlite requires Node.js or Bun (bun:sqlite + node:os/path/fs). \" +\n \"Use FunctionStorageCfDo on non-Bun runtimes.\",\n );\n }\n return req;\n}\nfunction _loadDatabase(): any {\n if (_Database) return _Database;\n try {\n _Database = _req()(_BUN_SQLITE_MOD).Database;\n return _Database;\n } catch (e: any) {\n throw new Error(\n `FunctionStorageSqlite: failed to load bun:sqlite — ${e?.message ?? e}`,\n );\n }\n}\nfunction _loadNodeIo(): {\n homedir: () => string;\n platform: () => string;\n join: (...parts: string[]) => string;\n mkdirSync: (path: string, opts?: any) => void;\n} {\n const r = _req();\n return {\n homedir: r(_NODE_OS_MOD).homedir,\n platform: r(_NODE_OS_MOD).platform,\n join: r(_NODE_PATH_MOD).join,\n mkdirSync: r(_NODE_FS_MOD).mkdirSync,\n };\n}\n\n// ============================================================================\n// Errors\n// ============================================================================\n\nexport class UnknownInvocationError extends Error {\n constructor(message?: string | Uint8Array) {\n let text: string;\n if (message instanceof Uint8Array) {\n text =\n `Invocation ${hexEncode(message)} is not registered. ` +\n \"Call queuePush first to register the invocation.\";\n } else {\n text =\n message ??\n \"Invocation is not registered. Call queuePush first to register the invocation.\";\n }\n super(text);\n this.name = \"UnknownInvocationError\";\n }\n}\n\nfunction hexEncode(buf: Uint8Array): string {\n return Array.from(buf, (b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\n// ============================================================================\n// FunctionStorage interface\n// ============================================================================\n\nexport interface FunctionStorage {\n workerPut(executionId: Uint8Array, workerId: number, state: Uint8Array): Promise<void>;\n workerCollect(executionId: Uint8Array): Promise<Uint8Array[]>;\n workerScan(executionId: Uint8Array): Promise<Array<[number, Uint8Array]>>;\n queuePush(executionId: Uint8Array, items: Uint8Array[]): Promise<number>;\n queuePop(executionId: Uint8Array): Promise<Uint8Array | null>;\n queueClear(executionId: Uint8Array): Promise<number>;\n // --- Namespaced key/value state (scoped by execution_id) ---\n stateGet(scopeId: Uint8Array, ns: Uint8Array, key: Uint8Array): Promise<Uint8Array | null>;\n statePut(scopeId: Uint8Array, ns: Uint8Array, key: Uint8Array, value: Uint8Array): Promise<void>;\n // --- Append-only log (scoped by execution_id) ---\n stateAppend(scopeId: Uint8Array, ns: Uint8Array, key: Uint8Array, item: Uint8Array): Promise<number>;\n stateLogScan(\n scopeId: Uint8Array,\n ns: Uint8Array,\n key: Uint8Array,\n afterId?: number,\n limit?: number | null,\n ): Promise<Array<[number, Uint8Array]>>;\n /** Wipe all state + log rows for a scope across every namespace. */\n executionClear(scopeId: Uint8Array): Promise<number>;\n /** Optional cleanup hook. Implementations holding a connection should release it here. */\n close?(): Promise<void> | void;\n}\n\n// FrameworkNS — namespaces the framework itself uses (mirrors Python's\n// FrameworkNS enum). User code picks its own arbitrary namespace bytes.\nexport const FrameworkNS = {\n BUFFERING_INIT: textBytes(\"_vgi/buffering_init\"),\n STREAMING_FINALIZE: textBytes(\"_vgi/streaming_finalize\"),\n} as const;\n\nfunction textBytes(s: string): Uint8Array {\n return new TextEncoder().encode(s);\n}\n\n/** Encode an int as 8-byte little-endian, matching Python's pack_int_key. */\nexport function packIntKey(i: number | bigint): Uint8Array {\n const buf = new ArrayBuffer(8);\n new DataView(buf).setBigInt64(0, BigInt(i), true);\n return new Uint8Array(buf);\n}\n\n// ============================================================================\n// FunctionStorageSqlite\n// ============================================================================\n\nfunction getDefaultDbPath(): string {\n // VGI_WORKER_SQLITE_PATH=\":memory:\" picks an in-process backend used by\n // single-process test fixtures (notably the HTTP server fixture) to avoid\n // per-op WAL fsync cost. Mirrors vgi-python's same env var.\n const override = process.env.VGI_WORKER_SQLITE_PATH;\n if (override) return override;\n const { homedir, platform, join, mkdirSync } = _loadNodeIo();\n const home = homedir();\n const stateDir =\n platform() === \"darwin\"\n ? join(home, \"Library\", \"Application Support\", \"vgi\")\n : join(home, \".local\", \"state\", \"vgi\");\n mkdirSync(stateDir, { recursive: true });\n return join(stateDir, \"vgi_storage.db\");\n}\n\n// Worker state rides the unified function_state table under a reserved\n// namespace, keyed by the worker/process id (8-byte big-endian) — exactly the\n// mapping the Cloudflare DO client uses, so both backends share one schema.\nconst NS_WORKER = new TextEncoder().encode(\"worker\");\n\n/** Encode an int64 worker id as an 8-byte big-endian state key. */\nfunction int64Key(v: number): Uint8Array {\n const b = new Uint8Array(8);\n new DataView(b.buffer).setBigInt64(0, BigInt(v), false);\n return b;\n}\n\nfunction int64FromKey(b: Uint8Array): number {\n if (b.length !== 8) return 0;\n return Number(new DataView(b.buffer, b.byteOffset, 8).getBigInt64(0, false));\n}\n\nexport class FunctionStorageSqlite implements FunctionStorage {\n readonly dbPath: string;\n private _db: Database;\n\n constructor(dbPath?: string) {\n this.dbPath = dbPath ?? getDefaultDbPath();\n // Persistent connection for the lifetime of this storage instance.\n // Bun is single-threaded, so one connection is the analogue of\n // Python's per-thread persistent connection. WAL still coordinates\n // writes across processes via file locking.\n const Db = _loadDatabase();\n this._db = new Db(this.dbPath);\n this._db.exec(\"PRAGMA journal_mode=WAL\");\n this._db.exec(\"PRAGMA synchronous=NORMAL\");\n this._db.exec(\"PRAGMA busy_timeout=30000\");\n this._db.exec(\"PRAGMA temp_store=MEMORY\");\n this._db.exec(\"PRAGMA cache_size=-65536\");\n this._ensureTables();\n }\n\n close(): void {\n this._db.close();\n }\n\n private _ensureTables(): void {\n const db = this._db;\n // Self-heal an older on-disk DB to the unified minimal schema. The local\n // SQLite tier carries none of the DO's HTTP idempotency machinery and no\n // created_at, so drop any table left over with those columns; all of this\n // is ephemeral in-progress state, so dropping + recreating is safe.\n for (const [table, staleCol] of [\n [\"function_state\", \"created_at\"],\n [\"function_state_log\", \"created_at\"],\n [\"work_queue\", \"created_at\"],\n ] as const) {\n const info = db.prepare(`PRAGMA table_info(${table})`).all() as Array<{ name: string }>;\n if (info.some((row) => row.name === staleCol)) {\n db.exec(`DROP TABLE IF EXISTS ${table}`);\n }\n }\n // Tables eliminated by the unified schema: worker collect now rides\n // function_state (ns=worker), and the queue carries no registration.\n for (const dead of [\"global_state_storage\", \"worker_state\", \"invocation_registry\", \"init_storage\"]) {\n db.exec(`DROP TABLE IF EXISTS ${dead}`);\n }\n\n // Unified schema — the same three tables every backend uses (the Durable\n // Object adds an HTTP-idempotency column layer on top).\n db.exec(`\n CREATE TABLE IF NOT EXISTS work_queue (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n execution_id BLOB NOT NULL,\n work_item BLOB NOT NULL\n )\n `);\n db.exec(`\n CREATE INDEX IF NOT EXISTS idx_work_queue_execution\n ON work_queue(execution_id, id)\n `);\n // Composite-key K/V over (scope_id, ns, key): the single home for\n // per-execution / per-transaction / per-group / per-worker state.\n db.exec(`\n CREATE TABLE IF NOT EXISTS function_state (\n scope_id BLOB NOT NULL,\n ns BLOB NOT NULL,\n key BLOB NOT NULL,\n value BLOB NOT NULL,\n PRIMARY KEY (scope_id, ns, key)\n )\n `);\n // Append-only log keyed by (scope, ns, key); the AUTOINCREMENT id is the\n // globally-monotonic scan cursor.\n db.exec(`\n CREATE TABLE IF NOT EXISTS function_state_log (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n scope_id BLOB NOT NULL,\n ns BLOB NOT NULL,\n key BLOB NOT NULL,\n value BLOB NOT NULL\n )\n `);\n db.exec(`\n CREATE INDEX IF NOT EXISTS idx_function_state_log_lookup\n ON function_state_log(scope_id, ns, key, id)\n `);\n }\n\n async stateGet(scopeId: Uint8Array, ns: Uint8Array, key: Uint8Array): Promise<Uint8Array | null> {\n const row = this._db\n .prepare(\"SELECT value FROM function_state WHERE scope_id = ? AND ns = ? AND key = ?\")\n .get(bufferArg(scopeId), bufferArg(ns), bufferArg(key)) as { value: Uint8Array } | null;\n return row ? new Uint8Array(row.value) : null;\n }\n\n async statePut(scopeId: Uint8Array, ns: Uint8Array, key: Uint8Array, value: Uint8Array): Promise<void> {\n this._db\n .prepare(\n \"INSERT OR REPLACE INTO function_state (scope_id, ns, key, value) VALUES (?, ?, ?, ?)\",\n )\n .run(bufferArg(scopeId), bufferArg(ns), bufferArg(key), bufferArg(value));\n }\n\n async stateAppend(scopeId: Uint8Array, ns: Uint8Array, key: Uint8Array, item: Uint8Array): Promise<number> {\n const res = this._db\n .prepare(\"INSERT INTO function_state_log (scope_id, ns, key, value) VALUES (?, ?, ?, ?)\")\n .run(bufferArg(scopeId), bufferArg(ns), bufferArg(key), bufferArg(item));\n return Number(res.lastInsertRowid);\n }\n\n async stateLogScan(\n scopeId: Uint8Array,\n ns: Uint8Array,\n key: Uint8Array,\n afterId: number = -1,\n limit: number | null = null,\n ): Promise<Array<[number, Uint8Array]>> {\n let sql =\n \"SELECT id, value FROM function_state_log \" +\n \"WHERE scope_id = ? AND ns = ? AND key = ? AND id > ? ORDER BY id ASC\";\n const args: any[] = [bufferArg(scopeId), bufferArg(ns), bufferArg(key), afterId];\n if (limit != null) {\n sql += \" LIMIT ?\";\n args.push(limit);\n }\n const rows = this._db.prepare(sql).all(...args) as Array<{ id: number; value: Uint8Array }>;\n return rows.map((r) => [Number(r.id), new Uint8Array(r.value)]);\n }\n\n async executionClear(scopeId: Uint8Array): Promise<number> {\n const eid = bufferArg(scopeId);\n let total = 0;\n total += (this._db.prepare(\"DELETE FROM function_state WHERE scope_id = ?\").run(eid).changes as number);\n total += (this._db.prepare(\"DELETE FROM function_state_log WHERE scope_id = ?\").run(eid).changes as number);\n return total;\n }\n\n // Worker state rides function_state under ns=worker, keyed by worker id.\n\n async workerPut(\n executionId: Uint8Array,\n workerId: number,\n state: Uint8Array\n ): Promise<void> {\n this._db\n .prepare(\n \"INSERT OR REPLACE INTO function_state (scope_id, ns, key, value) VALUES (?, ?, ?, ?)\"\n )\n .run(bufferArg(executionId), bufferArg(NS_WORKER), bufferArg(int64Key(workerId)), bufferArg(state));\n }\n\n async workerCollect(executionId: Uint8Array): Promise<Uint8Array[]> {\n const rows = this._db\n .prepare(\n \"DELETE FROM function_state WHERE scope_id = ? AND ns = ? RETURNING value\"\n )\n .all(bufferArg(executionId), bufferArg(NS_WORKER)) as Array<{ value: Uint8Array }>;\n return rows.map((row) => new Uint8Array(row.value));\n }\n\n async workerScan(executionId: Uint8Array): Promise<Array<[number, Uint8Array]>> {\n const rows = this._db\n .prepare(\n \"SELECT key, value FROM function_state WHERE scope_id = ? AND ns = ?\"\n )\n .all(bufferArg(executionId), bufferArg(NS_WORKER)) as Array<{\n key: Uint8Array;\n value: Uint8Array;\n }>;\n return rows.map((row) => [int64FromKey(new Uint8Array(row.key)), new Uint8Array(row.value)]);\n }\n\n async queuePush(executionId: Uint8Array, items: Uint8Array[]): Promise<number> {\n const eidBuf = bufferArg(executionId);\n this._db.exec(\"BEGIN\");\n try {\n const insert = this._db.prepare(\n \"INSERT INTO work_queue (execution_id, work_item) VALUES (?, ?)\"\n );\n for (const item of items) {\n insert.run(eidBuf, bufferArg(item));\n }\n this._db.exec(\"COMMIT\");\n } catch (e) {\n this._db.exec(\"ROLLBACK\");\n throw e;\n }\n return items.length;\n }\n\n async queuePop(executionId: Uint8Array): Promise<Uint8Array | null> {\n // No registration: an empty or never-pushed queue both return null,\n // matching the Durable Object.\n const row = this._db\n .prepare(\n \"DELETE FROM work_queue WHERE id = (\" +\n \" SELECT id FROM work_queue WHERE execution_id = ? ORDER BY id ASC LIMIT 1\" +\n \") RETURNING work_item\"\n )\n .get(bufferArg(executionId)) as { work_item: Uint8Array } | null;\n\n return row ? new Uint8Array(row.work_item) : null;\n }\n\n async queueClear(executionId: Uint8Array): Promise<number> {\n return this._db\n .prepare(\"DELETE FROM work_queue WHERE execution_id = ?\")\n .run(bufferArg(executionId)).changes;\n }\n}\n\n// ============================================================================\n// BoundStorage\n// ============================================================================\n\nexport class BoundStorage {\n private _base: FunctionStorage;\n private _executionId: Uint8Array;\n\n constructor(storage: FunctionStorage, executionId: Uint8Array) {\n this._base = storage;\n this._executionId = executionId;\n }\n\n put(state: Uint8Array): Promise<void> {\n return this._base.workerPut(this._executionId, process.pid, state);\n }\n\n collect(): Promise<Uint8Array[]> {\n return this._base.workerCollect(this._executionId);\n }\n\n workerScan(): Promise<Array<[number, Uint8Array]>> {\n return this._base.workerScan(this._executionId);\n }\n\n queuePush(items: Uint8Array[]): Promise<number> {\n return this._base.queuePush(this._executionId, items);\n }\n\n queuePop(): Promise<Uint8Array | null> {\n return this._base.queuePop(this._executionId);\n }\n\n queueClear(): Promise<number> {\n return this._base.queueClear(this._executionId);\n }\n\n stateGet(ns: Uint8Array, key: Uint8Array): Promise<Uint8Array | null> {\n return this._base.stateGet(this._executionId, ns, key);\n }\n\n statePut(ns: Uint8Array, key: Uint8Array, value: Uint8Array): Promise<void> {\n return this._base.statePut(this._executionId, ns, key, value);\n }\n\n stateAppend(ns: Uint8Array, key: Uint8Array, item: Uint8Array): Promise<number> {\n return this._base.stateAppend(this._executionId, ns, key, item);\n }\n\n stateLogScan(\n ns: Uint8Array,\n key: Uint8Array,\n afterId: number = -1,\n limit: number | null = null,\n ): Promise<Array<[number, Uint8Array]>> {\n return this._base.stateLogScan(this._executionId, ns, key, afterId, limit);\n }\n\n executionClear(): Promise<number> {\n return this._base.executionClear(this._executionId);\n }\n\n static packIntKey(i: number | bigint): Uint8Array {\n return packIntKey(i);\n }\n}\n\n// ============================================================================\n// Backend factory + lazy default storage\n// ============================================================================\n\n/**\n * Resolve the FunctionStorage backend from environment variables.\n *\n * Mirrors vgi-python's `_resolve_storage` in `vgi/function.py`.\n *\n * `VGI_WORKER_SHARED_STORAGE` selects the backend (default: `sqlite`):\n * - `memory` — `FunctionStorageSqlite` at `:memory:`. Process-local\n * with no cross-process coordination — single-process\n * deployments only. Ignores `VGI_WORKER_SQLITE_PATH`.\n * - `sqlite` — `FunctionStorageSqlite`. Honors `VGI_WORKER_SQLITE_PATH`\n * (including `:memory:`).\n * - `cloudflare-do` — `FunctionStorageCfDo`. Requires `VGI_CF_DO_URL`;\n * optional `VGI_CF_DO_TOKEN` for bearer auth.\n */\nexport function resolveStorageFromEnv(): FunctionStorage {\n const backend = (process.env.VGI_WORKER_SHARED_STORAGE ?? \"sqlite\").toLowerCase();\n if (backend === \"memory\") {\n return new FunctionStorageSqlite(\":memory:\");\n }\n if (backend === \"sqlite\") {\n return new FunctionStorageSqlite();\n }\n if (backend === \"cloudflare-do\") {\n // Lazy require to avoid loading the CF client when sqlite is in use.\n const { FunctionStorageCfDo } = require(\"./storage-cf-do.js\") as typeof import(\"./storage-cf-do.js\");\n return FunctionStorageCfDo.fromEnv();\n }\n throw new Error(\n `Unknown VGI_WORKER_SHARED_STORAGE backend: '${backend}'. Supported: 'memory', 'sqlite', 'cloudflare-do'.`,\n );\n}\n\n// Module-level proxy that lazy-resolves the configured backend on first use.\n// Importing this module no longer opens a SQLite connection — that happens\n// the first time anyone touches a storage method. Matches Python's\n// _DefaultStorageDescriptor lazy attribute pattern.\nlet _resolved: FunctionStorage | null = null;\nfunction getDefaultStorage(): FunctionStorage {\n if (_resolved == null) _resolved = resolveStorageFromEnv();\n return _resolved;\n}\n\n/**\n * Override the default backend used by the `storage` singleton. Call once at\n * worker startup to inject a pre-built backend that env-driven selection can't\n * construct — notably a `FunctionStorageCfDo` wired to a Cloudflare\n * service-binding Fetcher (the binding lives on `env`, not `process.env`, and a\n * same-zone public-URL fetch is rejected with CF error 1042). Takes precedence\n * over `VGI_WORKER_SHARED_STORAGE`.\n */\nexport function setStorage(impl: FunctionStorage): void {\n _resolved = impl;\n}\n\n/** Default FunctionStorage instance. Backend is selected via env on first access. */\nexport const storage: FunctionStorage = new Proxy(\n {} as FunctionStorage,\n {\n get(_t, prop, _r) {\n const inst = getDefaultStorage() as any;\n const v = inst[prop];\n return typeof v === \"function\" ? v.bind(inst) : v;\n },\n },\n);\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/** bun:sqlite needs Buffer for blob params */\nfunction bufferArg(data: Uint8Array): Buffer {\n return Buffer.from(data.buffer, data.byteOffset, data.byteLength);\n}\n",
|
|
23
|
-
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n\n/**\n * Result-cache control metadata (`vgi.cache.*`).\n *\n * A table function can advertise that its result is cacheable by the client\n * (the DuckDB extension) by attaching `vgi.cache.*` metadata to the **first**\n * data batch it emits. The vocabulary mirrors HTTP caching (RFC 9111/9110): a\n * freshness lifetime (`ttl` / `expires`), a reuse `scope`, validators\n * (ETag / Last-Modified) for conditional revalidation, and stale-serving grace\n * windows.\n *\n * The key strings are the single source of truth shared with the C++ extension\n * (which reads them by string). {@link cacheControlMetadata} renders a\n * {@link CacheControl} to the `Map<string, string>` of `vgi.cache.*` keys that\n * rides on batch metadata:\n *\n * ```ts\n * out.emit(firstBatch, cacheControlMetadata({ ttl: 300 }));\n * ```\n *\n * Pass `extra` to merge in metadata a function already emits per batch (for\n * example `vgi_batch_index`); the rendered cache keys win on collision.\n *\n * Booleans render as `\"1\"` and are omitted when false; timestamps are RFC 3339\n * UTC strings; durations are whole seconds.\n *\n * Ports `vgi/cache_control.py` from vgi-python.\n */\n\n// --- Response-side metadata keys (worker -> client) -------------------------\n// Defined once here; the C++ extension reads these exact strings.\n\nexport const CACHE_TTL_KEY = \"vgi.cache.ttl\";\nexport const CACHE_EXPIRES_KEY = \"vgi.cache.expires\";\nexport const CACHE_NO_STORE_KEY = \"vgi.cache.no_store\";\nexport const CACHE_SCOPE_KEY = \"vgi.cache.scope\";\nexport const CACHE_ETAG_KEY = \"vgi.cache.etag\";\nexport const CACHE_LAST_MODIFIED_KEY = \"vgi.cache.last_modified\";\nexport const CACHE_REVALIDATABLE_KEY = \"vgi.cache.revalidatable\";\nexport const CACHE_STALE_WHILE_REVALIDATE_KEY = \"vgi.cache.stale_while_revalidate\";\nexport const CACHE_STALE_IF_ERROR_KEY = \"vgi.cache.stale_if_error\";\nexport const CACHE_NOT_MODIFIED_KEY = \"vgi.cache.not_modified\";\n\n// --- Request-side metadata keys (client -> worker) --------------------------\n// Ride on the first producer tick; surfaced as `TableProcessParams.ifNoneMatch`\n// / `.ifModifiedSince`.\n\nexport const CACHE_IF_NONE_MATCH_KEY = \"vgi.cache.if_none_match\";\nexport const CACHE_IF_MODIFIED_SINCE_KEY = \"vgi.cache.if_modified_since\";\n\n// --- Reuse-scope values -----------------------------------------------------\n\nexport const CACHE_SCOPE_CATALOG = \"catalog\";\nexport const CACHE_SCOPE_TRANSACTION = \"transaction\";\n\n/** Reuse scope for a cacheable result. */\nexport type CacheScope = typeof CACHE_SCOPE_CATALOG | typeof CACHE_SCOPE_TRANSACTION;\n\n/**\n * Cacheability advertised by a table function on its first result batch.\n *\n * Presence of `ttl` **or** `expires` is what makes a result cacheable;\n * `noStore` overrides any freshness key.\n */\nexport interface CacheControl {\n /** Freshness lifetime in whole seconds, relative to full-result receipt\n * (skew-immune; wins over `expires`). */\n ttl?: number;\n /** Absolute RFC 3339 UTC deadline. Lifetime is `expires - now` at receipt. */\n expires?: string;\n /** Reuse scope — `\"catalog\"` (default; reusable across transactions within\n * the calling catalog identity) or `\"transaction\"` (reused only within the\n * same transaction). */\n scope?: CacheScope;\n /** Explicit \"never cache\"; overrides any freshness key. */\n noStore?: boolean;\n /** Strong validator (opaque quoted string) for conditional revalidation. */\n etag?: string;\n /** Weaker RFC 3339 UTC validator; fallback when no ETag. */\n lastModified?: string;\n /** The worker can check freshness cheaply without recomputing; gates whether\n * the client ever sends a conditional request. */\n revalidatable?: boolean;\n /** Grace window (seconds) to serve stale immediately while revalidating in\n * the background. */\n staleWhileRevalidate?: number;\n /** Grace window (seconds) to serve stale if a revalidation RPC fails. */\n staleIfError?: number;\n /** 304-equivalent — set on a 0-row batch in reply to a conditional request to\n * assert the client's stored payload is still fresh (the client reuses it\n * instead of re-streaming). */\n notModified?: boolean;\n}\n\nconst VALID_SCOPES: readonly string[] = [CACHE_SCOPE_CATALOG, CACHE_SCOPE_TRANSACTION];\n\n/**\n * Render a {@link CacheControl} to the `vgi.cache.*` batch-metadata map.\n *\n * `scope` is always emitted so the client never has to infer the default.\n * Unset optional fields are omitted; false booleans are omitted. Entries from\n * `extra` are written first, so a rendered cache key wins on collision.\n *\n * Throws when `scope` is unrecognized or a duration is negative — a silently\n * ignored advertisement is far harder to debug than a stack trace at the\n * offending `emit()`.\n */\nexport function cacheControlMetadata(cc: CacheControl, extra?: Map<string, string>): Map<string, string> {\n const scope = cc.scope ?? CACHE_SCOPE_CATALOG;\n if (!VALID_SCOPES.includes(scope)) {\n throw new Error(`CacheControl.scope must be one of ${VALID_SCOPES.join(\", \")}, got ${JSON.stringify(scope)}`);\n }\n for (const name of [\"ttl\", \"staleWhileRevalidate\", \"staleIfError\"] as const) {\n const value = cc[name];\n if (value !== undefined && value < 0) {\n throw new Error(`CacheControl.${name} must be >= 0, got ${value}`);\n }\n }\n\n const md = new Map<string, string>(extra ?? []);\n if (cc.ttl !== undefined) md.set(CACHE_TTL_KEY, String(cc.ttl));\n if (cc.expires !== undefined) md.set(CACHE_EXPIRES_KEY, cc.expires);\n if (cc.noStore) md.set(CACHE_NO_STORE_KEY, \"1\");\n md.set(CACHE_SCOPE_KEY, scope);\n if (cc.etag !== undefined) md.set(CACHE_ETAG_KEY, cc.etag);\n if (cc.lastModified !== undefined) md.set(CACHE_LAST_MODIFIED_KEY, cc.lastModified);\n if (cc.revalidatable) md.set(CACHE_REVALIDATABLE_KEY, \"1\");\n if (cc.staleWhileRevalidate !== undefined) md.set(CACHE_STALE_WHILE_REVALIDATE_KEY, String(cc.staleWhileRevalidate));\n if (cc.staleIfError !== undefined) md.set(CACHE_STALE_IF_ERROR_KEY, String(cc.staleIfError));\n if (cc.notModified) md.set(CACHE_NOT_MODIFIED_KEY, \"1\");\n return md;\n}\n",
|
|
24
|
-
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Scalar function implementation.\n// Scalar functions receive columnar input and produce a single output column\n// with 1:1 row mapping.\n\nimport {\n type VgiSchema,\n type VgiField,\n type VgiBatch,\n type VgiDataType,\n type ValueFor,\n type Repr,\n schema as makeSchema,\n field,\n nullType,\n isNull,\n isBatch,\n} from \"../arrow/index.js\";\nimport type { OutputCollector, AuthContext } from \"@query-farm/vgi-rpc\";\nimport {\n FunctionType,\n FunctionStability,\n NullHandling,\n DEFAULT_MAX_WORKERS,\n} from \"../types.js\";\nimport { RowCountMismatchError } from \"../errors.js\";\nimport type {\n BindRequest,\n BindResponse,\n InitRequest,\n GlobalInitResponse,\n} from \"../protocol/types.js\";\nimport type {\n VgiFunction,\n FunctionMeta,\n StreamHandlers,\n FunctionExample,\n} from \"./types.js\";\nimport type { ArgumentSpec } from \"../arguments/argument-spec.js\";\nimport {\n argumentSpecsToSchema,\n constraintSpecFields,\n validateConstConstraints,\n type ArgumentConstraints,\n} from \"../arguments/argument-spec.js\";\nimport { batchToScalarDict, batchToSecretDict, batchFromColumns, projectBatch, safeNumber } from \"../util/arrow/index.js\";\nimport { cacheControlMetadata, type CacheControl } from \"../cache-control.js\";\n\n// ============================================================================\n// Scalar Bind Parameters\n// ============================================================================\n\nexport interface ScalarBindParameters {\n /** Constant argument values (resolved at bind time) */\n constArgs: Record<string, any>;\n /** Schema of all arguments including columnar params */\n argumentsSchema: VgiSchema;\n /** Settings from DuckDB */\n settings: Record<string, any>;\n /** Secrets from DuckDB */\n secrets: Record<string, Record<string, any>>;\n /** Original bind request — exposes attach_opaque_data, transaction_opaque_data, function_type, etc. */\n bindCall: BindRequest;\n}\n\n// ============================================================================\n// Functional API\n// ============================================================================\n\n/** Ordered parameter definition for scalar functions. */\nexport interface ScalarParameterDef {\n name: string;\n type: VgiDataType;\n /** If true, this is a constant parameter (scalar value resolved at bind time). */\n const?: boolean;\n /** If true, this parameter accepts variable number of arguments. */\n varargs?: boolean;\n /** Human-readable per-argument description (surfaced as `vgi_doc`). */\n doc?: string;\n // Discovery-facing validation constraints (surfaced via\n // `vgi_function_arguments()`). All optional; see `ArgumentConstraints`.\n /** Closed set of allowed values (surfaced as `vgi_choices`). */\n choices?: readonly unknown[];\n /** Inclusive lower bound, `>=` (folded into `vgi_range`). */\n ge?: number;\n /** Inclusive upper bound, `<=` (folded into `vgi_range`). */\n le?: number;\n /** Exclusive lower bound, `>` (folded into `vgi_range`). */\n gt?: number;\n /** Exclusive upper bound, `<` (folded into `vgi_range`). */\n lt?: number;\n /** Regex the value must match (surfaced as `vgi_pattern`). */\n pattern?: string;\n /** Default value (surfaced as `vgi_default`, JSON-encoded). */\n default?: unknown;\n}\n\n/**\n * The typed compute row for a scalar function: one property per declared\n * columnar param, valued in the representation (`rich` / `raw`) selected by the\n * function's `repr`. (Provided as a convenience type for authors who build rows\n * out of the input batch.)\n */\nexport type ScalarComputeRow<\n P extends Record<string, VgiDataType>,\n M extends Repr,\n> = { [K in keyof P]: ValueFor<P[K], M> | null };\n\n/** A single output value for a scalar function under representation `M`. */\nexport type ScalarOutputValue<R extends VgiDataType, M extends Repr> =\n ValueFor<R, M> | null;\n\n/**\n * Accepted compute return shapes: an array (or iterable) of output values in\n * the declared representation, or a pre-built VgiBatch. The representation is\n * enforced statically — returning a `Date` under `repr: 'raw'` (which expects a\n * branded `Date32`/`Date64Ms`), or a branded value under `repr: 'rich'` (which\n * expects a `Date`), is a COMPILE error.\n */\nexport type ScalarComputeResult<R extends VgiDataType, M extends Repr> =\n | Array<ScalarOutputValue<R, M>>\n | Iterable<ScalarOutputValue<R, M>>\n | VgiBatch;\n\nexport interface ScalarFunctionConfig<\n P extends Record<string, VgiDataType> = Record<string, VgiDataType>,\n R extends VgiDataType = VgiDataType,\n M extends Repr = \"rich\",\n> {\n name: string;\n description?: string;\n /** Columnar params (receive Arrow arrays at process time) */\n params?: P;\n /** Constant params (receive scalar values resolved at bind time) */\n constParams?: Record<string, VgiDataType>;\n /**\n * Per-argument descriptions keyed by param name, surfaced as `vgi_doc` field\n * metadata (and via the extension's `vgi_function_arguments()`). Applies to\n * `params` and `constParams`; for the ordered `parameters` list use each\n * entry's `doc` field instead.\n */\n argDocs?: Record<string, string>;\n /**\n * Ordered parameter list. When provided, overrides `params` and `constParams`.\n * Use this when parameters need non-default ordering (e.g. const, param, const).\n */\n parameters?: ScalarParameterDef[];\n /** Output type (static) */\n returns?: R;\n /** Dynamic output type at bind time */\n outputType?: (params: ScalarBindParameters) => VgiDataType | Promise<VgiDataType>;\n /**\n * Value representation for compute I/O. `'rich'` (default) uses JS `Date` for\n * date32/date64 and plain number/bigint elsewhere. `'raw'` uses the branded\n * unit-carrying aliases (Date32, TimestampMicros, UnscaledDecimal, …). The\n * choice flows into compute()'s statically-checked return type and selects\n * the runtime converter used to build the output column.\n */\n repr?: M;\n /**\n * Process: receives the columnar input batch + const values, returns the\n * output column as an array/iterable of values (statically typed from\n * `returns` and `repr`) or a pre-built VgiBatch.\n */\n compute: (\n batch: VgiBatch,\n consts: Record<string, any>,\n info: {\n settings: Record<string, any>;\n secrets: Record<string, Record<string, any>>;\n auth: AuthContext;\n }\n // NoInfer pins R/M from `returns`/`repr` so the compute return type is\n // CHECKED against them rather than widening them to fit a wrong value.\n ) => ScalarComputeResult<NoInfer<R>, NoInfer<M>>;\n // Metadata\n stability?: FunctionStability;\n nullHandling?: NullHandling;\n examples?: FunctionExample[];\n categories?: string[];\n tags?: Record<string, string>;\n maxWorkers?: number;\n requiredSettings?: string[];\n requiredSecrets?: string[];\n /**\n * Result-cache opt-in: when set, this CacheControl's `vgi.cache.*` metadata\n * rides every output batch's custom metadata (per-batch — NOT the schema,\n * which the IPC stream fixes at open), so the extension can memoize the\n * scalar's output per distinct input value. A pure, deterministic scalar\n * only — advertising this on a non-pure scalar serves stale rows. Mirrors\n * vgi-python's `ScalarFunction.CACHE_CONTROL`.\n */\n cacheControl?: CacheControl;\n}\n\nexport function defineScalarFunction<\n P extends Record<string, VgiDataType> = Record<string, VgiDataType>,\n R extends VgiDataType = VgiDataType,\n M extends Repr = \"rich\",\n>(config: ScalarFunctionConfig<P, R, M>): VgiFunction {\n const repr: Repr = config.repr ?? \"rich\";\n // Build argument specs\n const specs: ArgumentSpec[] = [];\n\n if (config.parameters) {\n // Ordered parameter list — supports arbitrary interleaving of const/non-const\n for (const [idx, p] of config.parameters.entries()) {\n const isAny = isNull(p.type);\n specs.push({\n name: p.name,\n position: idx,\n arrowType: isAny ? nullType() : p.type,\n isAnyType: isAny,\n isConst: p.const,\n isVarargs: p.varargs,\n doc: p.doc,\n ...constraintSpecFields(p),\n });\n }\n } else {\n // Legacy: params first, then constParams\n let posIdx = 0;\n\n if (config.params) {\n for (const [name, type] of Object.entries(config.params)) {\n const isAny = isNull(type);\n specs.push({\n name,\n position: posIdx++,\n arrowType: isAny ? nullType() : type,\n isAnyType: isAny,\n doc: config.argDocs?.[name],\n });\n }\n }\n\n if (config.constParams) {\n for (const [name, type] of Object.entries(config.constParams)) {\n specs.push({\n name,\n position: posIdx++,\n arrowType: type,\n isConst: true,\n doc: config.argDocs?.[name],\n });\n }\n }\n }\n\n // Raw const-arg constraints for bind-time enforcement, keyed by arg name.\n // Only the ordered `parameters` API carries constraints (the legacy\n // params/constParams path does not), so only its const params appear here.\n const constConstraints = new Map<string, ArgumentConstraints>();\n if (config.parameters) {\n for (const p of config.parameters) {\n if (\n p.const &&\n (p.choices !== undefined ||\n p.ge !== undefined ||\n p.le !== undefined ||\n p.gt !== undefined ||\n p.lt !== undefined ||\n p.pattern !== undefined)\n ) {\n constConstraints.set(p.name, p);\n }\n }\n }\n\n const meta: FunctionMeta = {\n name: config.name,\n description: config.description,\n stability: config.stability,\n nullHandling: config.nullHandling,\n examples: config.examples,\n categories: config.categories,\n tags: config.tags,\n maxWorkers: config.maxWorkers,\n requiredSettings: config.requiredSettings,\n requiredSecrets: config.requiredSecrets,\n };\n\n // Default output schema for catalog registration.\n // Static returns: use the declared type.\n // Dynamic outputType: use null with vgi:any metadata (matches Python convention).\n const defaultOutputSchema = config.returns\n ? makeSchema([field(\"result\", config.returns, true)])\n : makeSchema([field(\"result\", nullType(), true, new Map([[\"vgi:any\", \"true\"]]))]);\n\n return {\n kind: \"scalar\",\n meta,\n argumentSpecs: specs,\n defaultOutputSchema,\n\n async bind(request: BindRequest): Promise<BindResponse> {\n const settings = batchToScalarDict(request.settings);\n const secrets = batchToSecretDict(request.secrets);\n\n // Extract constant args from the Arguments.\n // DuckDB only sends const arg values in Arguments (column args are in inputSchema).\n // Arguments are indexed sequentially (0, 1, ...) for const args only.\n const constArgs: Record<string, any> = {};\n {\n let constIdx = 0;\n for (const spec of specs) {\n if (spec.isConst) {\n const value = request.arguments.get(constIdx, undefined);\n constArgs[spec.name] = value;\n // Enforce declared const-arg constraints at bind (choices/range/pattern).\n const constraints = constConstraints.get(spec.name);\n if (constraints) validateConstConstraints(spec.name, constraints, value);\n constIdx++;\n }\n }\n }\n\n // Determine output type\n let outputType: VgiDataType;\n if (config.outputType) {\n outputType = await config.outputType({\n constArgs,\n argumentsSchema: request.input_schema ?? makeSchema([]),\n settings,\n secrets,\n bindCall: request,\n });\n } else if (config.returns) {\n outputType = config.returns;\n } else {\n throw new Error(\n `Scalar function '${config.name}' must specify either 'returns' or 'outputType'`\n );\n }\n\n const outputSchema = makeSchema([\n field(\"result\", outputType, true),\n ]);\n\n return { output_schema: outputSchema, opaque_data: null };\n },\n\n globalInit(request: InitRequest): GlobalInitResponse {\n const executionId = new Uint8Array(16);\n crypto.getRandomValues(executionId);\n return {\n max_workers: config.maxWorkers ?? DEFAULT_MAX_WORKERS,\n execution_id: executionId,\n opaque_data: null,\n };\n },\n\n createStreamHandlers(\n request: InitRequest,\n response: GlobalInitResponse\n ): StreamHandlers {\n const outputSchema = request.output_schema;\n const settings = batchToScalarDict(request.bind_call.settings);\n const secrets = batchToSecretDict(request.bind_call.secrets);\n\n // Extract const args (DuckDB only sends const values, indexed sequentially)\n const constArgs: Record<string, any> = {};\n let constIdx = 0;\n for (const spec of specs) {\n if (spec.isConst) {\n constArgs[spec.name] = request.bind_call.arguments.get(constIdx, undefined);\n constIdx++;\n }\n }\n\n const inputSchema = request.bind_call.input_schema;\n\n return {\n outputSchema,\n inputSchema: inputSchema ?? undefined,\n exchangeInit: () => ({}),\n exchangeFn: (state: any, input: VgiBatch, out: OutputCollector) => {\n const result = config.compute(input as any, constArgs, { settings, secrets, auth: out.auth });\n\n // Build output batch\n let outputBatch: VgiBatch;\n if (isBatch(result)) {\n outputBatch = result as VgiBatch;\n } else if (Array.isArray(result)) {\n // Array of values -> single column. Route through batchFromColumns\n // so complex types (Decimal, BigInt-backed Timestamp/Duration,\n // List, Map, Struct) are built via our buildColumnData. The `repr`\n // selects raw<->canonical (branded) vs rich<->canonical conversion.\n const fieldName = outputSchema.fields[0].name;\n outputBatch = batchFromColumns({ [fieldName]: result }, outputSchema, repr);\n } else {\n // User returned an Arrow Vector / typed-array-shaped column. Iterate\n // it into a JS array and re-route through batchFromColumns. Adds an\n // O(n) copy but matches both backends' contract.\n const fieldName = outputSchema.fields[0].name;\n outputBatch = batchFromColumns({ [fieldName]: [...(result as Iterable<any>)] }, outputSchema, repr);\n }\n\n // Validate row count\n if (outputBatch.numRows !== input.numRows) {\n throw new RowCountMismatchError(\n input.numRows,\n outputBatch.numRows\n );\n }\n\n // Result-cache opt-in: a scalar declaring cacheControl rides its\n // vgi.cache.* keys on the emit path's per-batch custom metadata so\n // the extension can memoize the output per distinct input value.\n out.emit(\n outputBatch,\n config.cacheControl ? cacheControlMetadata(config.cacheControl) : undefined,\n );\n },\n };\n },\n };\n}\n",
|
|
23
|
+
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n\n/**\n * Result-cache control metadata (`vgi.cache.*`).\n *\n * A table function can advertise that its result is cacheable by the client\n * (the DuckDB extension) by attaching `vgi.cache.*` metadata to the **first**\n * data batch it emits. The vocabulary mirrors HTTP caching (RFC 9111/9110): a\n * freshness lifetime (`ttl` / `expires`), a reuse `scope`, validators\n * (ETag / Last-Modified) for conditional revalidation, and stale-serving grace\n * windows.\n *\n * The key strings are the single source of truth shared with the C++ extension\n * (which reads them by string). {@link cacheControlMetadata} renders a\n * {@link CacheControl} to the `Map<string, string>` of `vgi.cache.*` keys that\n * rides on batch metadata:\n *\n * ```ts\n * out.emit(firstBatch, cacheControlMetadata({ ttl: 300 }));\n * ```\n *\n * Pass `extra` to merge in metadata a function already emits per batch (for\n * example `vgi_batch_index`); the rendered cache keys win on collision.\n *\n * Booleans render as `\"1\"` and are omitted when false; timestamps are RFC 3339\n * UTC strings; durations are whole seconds.\n *\n * Ports `vgi/cache_control.py` from vgi-python.\n */\n\n// --- Response-side metadata keys (worker -> client) -------------------------\n// Defined once here; the C++ extension reads these exact strings.\n\nexport const CACHE_TTL_KEY = \"vgi.cache.ttl\";\nexport const CACHE_EXPIRES_KEY = \"vgi.cache.expires\";\nexport const CACHE_NO_STORE_KEY = \"vgi.cache.no_store\";\nexport const CACHE_SCOPE_KEY = \"vgi.cache.scope\";\nexport const CACHE_ETAG_KEY = \"vgi.cache.etag\";\nexport const CACHE_LAST_MODIFIED_KEY = \"vgi.cache.last_modified\";\nexport const CACHE_REVALIDATABLE_KEY = \"vgi.cache.revalidatable\";\nexport const CACHE_STALE_WHILE_REVALIDATE_KEY = \"vgi.cache.stale_while_revalidate\";\nexport const CACHE_STALE_IF_ERROR_KEY = \"vgi.cache.stale_if_error\";\nexport const CACHE_NOT_MODIFIED_KEY = \"vgi.cache.not_modified\";\nexport const CACHE_PARTITION_SCOPE_KEY = \"vgi.cache.partition_scope\";\nexport const CACHE_PER_VALUE_KEY = \"vgi.cache.per_value\";\n\n// --- Request-side metadata keys (client -> worker) --------------------------\n// Ride on the first producer tick; surfaced as `TableProcessParams.ifNoneMatch`\n// / `.ifModifiedSince`.\n\nexport const CACHE_IF_NONE_MATCH_KEY = \"vgi.cache.if_none_match\";\nexport const CACHE_IF_MODIFIED_SINCE_KEY = \"vgi.cache.if_modified_since\";\n\n// --- Reuse-scope values -----------------------------------------------------\n\nexport const CACHE_SCOPE_CATALOG = \"catalog\";\nexport const CACHE_SCOPE_TRANSACTION = \"transaction\";\n\n/** Reuse scope for a cacheable result. */\nexport type CacheScope = typeof CACHE_SCOPE_CATALOG | typeof CACHE_SCOPE_TRANSACTION;\n\n/**\n * Cacheability advertised by a table function on its first result batch.\n *\n * Presence of `ttl` **or** `expires` is what makes a result cacheable;\n * `noStore` overrides any freshness key.\n */\nexport interface CacheControl {\n /** Freshness lifetime in whole seconds, relative to full-result receipt\n * (skew-immune; wins over `expires`). */\n ttl?: number;\n /** Absolute RFC 3339 UTC deadline. Lifetime is `expires - now` at receipt. */\n expires?: string;\n /** Reuse scope — `\"catalog\"` (default; reusable across transactions within\n * the calling catalog identity) or `\"transaction\"` (reused only within the\n * same transaction). */\n scope?: CacheScope;\n /** Explicit \"never cache\"; overrides any freshness key. */\n noStore?: boolean;\n /** Strong validator (opaque quoted string) for conditional revalidation. */\n etag?: string;\n /** Weaker RFC 3339 UTC validator; fallback when no ETag. */\n lastModified?: string;\n /** The worker can check freshness cheaply without recomputing; gates whether\n * the client ever sends a conditional request. */\n revalidatable?: boolean;\n /** Grace window (seconds) to serve stale immediately while revalidating in\n * the background. */\n staleWhileRevalidate?: number;\n /** Grace window (seconds) to serve stale if a revalidation RPC fails. */\n staleIfError?: number;\n /** 304-equivalent — set on a 0-row batch in reply to a conditional request to\n * assert the client's stored payload is still fresh (the client reuses it\n * instead of re-streaming). */\n notModified?: boolean;\n /** Opt in to per-PARTITION caching: in addition to the whole-scan entry, the\n * client stores the result split by distinct partition tuple, so a later\n * `=`/`IN`-filtered scan on the partition column(s) can serve the requested\n * partitions without calling the worker. Only meaningful for a\n * `SINGLE_VALUE_PARTITIONS` table function; purely additive. */\n partitionScope?: boolean;\n /**\n * Opt in to per-VALUE memoization: in addition to the whole-result entry, the\n * client memoizes each distinct worker-input tuple's output keyed on that\n * tuple, so the same value is served without calling the worker on a later\n * chunk or a later query. Only meaningful for an exchange-mode MAP — a\n * scalar, or a blended table-in-out invoked through a correlated `LATERAL`.\n *\n * **Default off, and it should stay off unless one call is genuinely\n * expensive.** This is not a free win: serving a value from the memo costs a\n * key probe, a decode and a per-value assembly step, and that only pays back\n * when it is cheaper than asking you for the answer. For a cheap map —\n * arithmetic, a string tweak, a lookup in a table the worker already has in\n * memory — it is a large net loss (the engine measures a per-value serve at\n * roughly 50x the cost of just calling the worker for a simple arithmetic\n * map). Only the function author knows which side of that line a call falls\n * on, which is why the engine will not guess: turn it on for model\n * inference, geocoding, an external API call, or anything rate-limited or\n * billed per request.\n *\n * Independent of freshness: `ttl`/`expires` make a result cacheable at all,\n * while this decides whether the per-value tier is additionally populated.\n * Requires a deterministic, side-effect-free function, exactly like the rest\n * of the result cache.\n */\n perValue?: boolean;\n}\n\nconst VALID_SCOPES: readonly string[] = [CACHE_SCOPE_CATALOG, CACHE_SCOPE_TRANSACTION];\n\n/**\n * Render a {@link CacheControl} to the `vgi.cache.*` batch-metadata map.\n *\n * `scope` is always emitted so the client never has to infer the default.\n * Unset optional fields are omitted; false booleans are omitted. Entries from\n * `extra` are written first, so a rendered cache key wins on collision.\n *\n * Throws when `scope` is unrecognized or a duration is negative — a silently\n * ignored advertisement is far harder to debug than a stack trace at the\n * offending `emit()`.\n */\nexport function cacheControlMetadata(cc: CacheControl, extra?: Map<string, string>): Map<string, string> {\n const scope = cc.scope ?? CACHE_SCOPE_CATALOG;\n if (!VALID_SCOPES.includes(scope)) {\n throw new Error(`CacheControl.scope must be one of ${VALID_SCOPES.join(\", \")}, got ${JSON.stringify(scope)}`);\n }\n for (const name of [\"ttl\", \"staleWhileRevalidate\", \"staleIfError\"] as const) {\n const value = cc[name];\n if (value !== undefined && value < 0) {\n throw new Error(`CacheControl.${name} must be >= 0, got ${value}`);\n }\n }\n\n const md = new Map<string, string>(extra ?? []);\n if (cc.ttl !== undefined) md.set(CACHE_TTL_KEY, String(cc.ttl));\n if (cc.expires !== undefined) md.set(CACHE_EXPIRES_KEY, cc.expires);\n if (cc.noStore) md.set(CACHE_NO_STORE_KEY, \"1\");\n md.set(CACHE_SCOPE_KEY, scope);\n if (cc.etag !== undefined) md.set(CACHE_ETAG_KEY, cc.etag);\n if (cc.lastModified !== undefined) md.set(CACHE_LAST_MODIFIED_KEY, cc.lastModified);\n if (cc.revalidatable) md.set(CACHE_REVALIDATABLE_KEY, \"1\");\n if (cc.staleWhileRevalidate !== undefined) md.set(CACHE_STALE_WHILE_REVALIDATE_KEY, String(cc.staleWhileRevalidate));\n if (cc.staleIfError !== undefined) md.set(CACHE_STALE_IF_ERROR_KEY, String(cc.staleIfError));\n if (cc.notModified) md.set(CACHE_NOT_MODIFIED_KEY, \"1\");\n if (cc.partitionScope) md.set(CACHE_PARTITION_SCOPE_KEY, \"1\");\n if (cc.perValue) md.set(CACHE_PER_VALUE_KEY, \"1\");\n return md;\n}\n",
|
|
24
|
+
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Scalar function implementation.\n// Scalar functions receive columnar input and produce a single output column\n// with 1:1 row mapping.\n\nimport {\n type VgiSchema,\n type VgiField,\n type VgiBatch,\n type VgiDataType,\n type ValueFor,\n type Repr,\n schema as makeSchema,\n field,\n nullType,\n isNull,\n isBatch,\n} from \"../arrow/index.js\";\nimport type { OutputCollector, AuthContext } from \"@query-farm/vgi-rpc\";\nimport {\n FunctionType,\n FunctionStability,\n NullHandling,\n DEFAULT_MAX_WORKERS,\n} from \"../types.js\";\nimport { RowCountMismatchError } from \"../errors.js\";\nimport type {\n BindRequest,\n BindResponse,\n InitRequest,\n GlobalInitResponse,\n} from \"../protocol/types.js\";\nimport type {\n VgiFunction,\n FunctionMeta,\n StreamHandlers,\n FunctionExample,\n} from \"./types.js\";\nimport type { ArgumentSpec } from \"../arguments/argument-spec.js\";\nimport {\n argumentSpecsToSchema,\n constraintSpecFields,\n validateConstConstraints,\n type ArgumentConstraints,\n} from \"../arguments/argument-spec.js\";\nimport { batchToScalarDict, batchToSecretDict, batchFromColumns, projectBatch, safeNumber } from \"../util/arrow/index.js\";\nimport { cacheControlMetadata, type CacheControl } from \"../cache-control.js\";\n\n// ============================================================================\n// Scalar Bind Parameters\n// ============================================================================\n\nexport interface ScalarBindParameters {\n /** Constant argument values (resolved at bind time) */\n constArgs: Record<string, any>;\n /** Schema of all arguments including columnar params */\n argumentsSchema: VgiSchema;\n /** Settings from DuckDB */\n settings: Record<string, any>;\n /** Secrets from DuckDB */\n secrets: Record<string, Record<string, any>>;\n /** Original bind request — exposes attach_opaque_data, transaction_opaque_data, function_type, etc. */\n bindCall: BindRequest;\n}\n\n// ============================================================================\n// Functional API\n// ============================================================================\n\n/** Ordered parameter definition for scalar functions. */\nexport interface ScalarParameterDef {\n name: string;\n type: VgiDataType;\n /** If true, this is a constant parameter (scalar value resolved at bind time). */\n const?: boolean;\n /** If true, this parameter accepts variable number of arguments. */\n varargs?: boolean;\n /** Human-readable per-argument description (surfaced as `vgi_doc`). */\n doc?: string;\n // Discovery-facing validation constraints (surfaced via\n // `vgi_function_arguments()`). All optional; see `ArgumentConstraints`.\n /** Closed set of allowed values (surfaced as `vgi_choices`). */\n choices?: readonly unknown[];\n /** Inclusive lower bound, `>=` (folded into `vgi_range`). */\n ge?: number;\n /** Inclusive upper bound, `<=` (folded into `vgi_range`). */\n le?: number;\n /** Exclusive lower bound, `>` (folded into `vgi_range`). */\n gt?: number;\n /** Exclusive upper bound, `<` (folded into `vgi_range`). */\n lt?: number;\n /** Regex the value must match (surfaced as `vgi_pattern`). */\n pattern?: string;\n /** Default value (surfaced as `vgi_default`, JSON-encoded). */\n default?: unknown;\n}\n\n/**\n * The typed compute row for a scalar function: one property per declared\n * columnar param, valued in the representation (`rich` / `raw`) selected by the\n * function's `repr`. (Provided as a convenience type for authors who build rows\n * out of the input batch.)\n */\nexport type ScalarComputeRow<\n P extends Record<string, VgiDataType>,\n M extends Repr,\n> = { [K in keyof P]: ValueFor<P[K], M> | null };\n\n/** A single output value for a scalar function under representation `M`. */\nexport type ScalarOutputValue<R extends VgiDataType, M extends Repr> =\n ValueFor<R, M> | null;\n\n/**\n * Accepted compute return shapes: an array (or iterable) of output values in\n * the declared representation, or a pre-built VgiBatch. The representation is\n * enforced statically — returning a `Date` under `repr: 'raw'` (which expects a\n * branded `Date32`/`Date64Ms`), or a branded value under `repr: 'rich'` (which\n * expects a `Date`), is a COMPILE error.\n */\nexport type ScalarComputeResult<R extends VgiDataType, M extends Repr> =\n | Array<ScalarOutputValue<R, M>>\n | Iterable<ScalarOutputValue<R, M>>\n | VgiBatch;\n\nexport interface ScalarFunctionConfig<\n P extends Record<string, VgiDataType> = Record<string, VgiDataType>,\n R extends VgiDataType = VgiDataType,\n M extends Repr = \"rich\",\n> {\n name: string;\n description?: string;\n /** Columnar params (receive Arrow arrays at process time) */\n params?: P;\n /** Constant params (receive scalar values resolved at bind time) */\n constParams?: Record<string, VgiDataType>;\n /**\n * Per-argument descriptions keyed by param name, surfaced as `vgi_doc` field\n * metadata (and via the extension's `vgi_function_arguments()`). Applies to\n * `params` and `constParams`; for the ordered `parameters` list use each\n * entry's `doc` field instead.\n */\n argDocs?: Record<string, string>;\n /**\n * Ordered parameter list. When provided, overrides `params` and `constParams`.\n * Use this when parameters need non-default ordering (e.g. const, param, const).\n */\n parameters?: ScalarParameterDef[];\n /** Output type (static) */\n returns?: R;\n /** Dynamic output type at bind time */\n outputType?: (params: ScalarBindParameters) => VgiDataType | Promise<VgiDataType>;\n /**\n * Value representation for compute I/O. `'rich'` (default) uses JS `Date` for\n * date32/date64 and plain number/bigint elsewhere. `'raw'` uses the branded\n * unit-carrying aliases (Date32, TimestampMicros, UnscaledDecimal, …). The\n * choice flows into compute()'s statically-checked return type and selects\n * the runtime converter used to build the output column.\n */\n repr?: M;\n /**\n * Process: receives the columnar input batch + const values, returns the\n * output column as an array/iterable of values (statically typed from\n * `returns` and `repr`) or a pre-built VgiBatch.\n */\n compute: (\n batch: VgiBatch,\n consts: Record<string, any>,\n info: {\n settings: Record<string, any>;\n secrets: Record<string, Record<string, any>>;\n auth: AuthContext;\n }\n // NoInfer pins R/M from `returns`/`repr` so the compute return type is\n // CHECKED against them rather than widening them to fit a wrong value.\n ) => ScalarComputeResult<NoInfer<R>, NoInfer<M>>;\n // Metadata\n stability?: FunctionStability;\n nullHandling?: NullHandling;\n examples?: FunctionExample[];\n categories?: string[];\n tags?: Record<string, string>;\n maxWorkers?: number;\n requiredSettings?: string[];\n requiredSecrets?: string[];\n /**\n * Result-cache opt-in: when set, this CacheControl's `vgi.cache.*` metadata\n * rides every output batch's custom metadata (per-batch — NOT the schema,\n * which the IPC stream fixes at open). A pure, deterministic scalar only —\n * advertising this on a non-pure scalar serves stale rows. Mirrors\n * vgi-python's `ScalarFunction.CACHE_CONTROL`.\n *\n * Per-VALUE memoization (the extension remembering one output per distinct\n * input value) additionally requires `perValue: true`, which is off by\n * default because a memo serve only beats a worker call when the call is\n * expensive — see {@link CacheControl.perValue}.\n */\n cacheControl?: CacheControl;\n}\n\nexport function defineScalarFunction<\n P extends Record<string, VgiDataType> = Record<string, VgiDataType>,\n R extends VgiDataType = VgiDataType,\n M extends Repr = \"rich\",\n>(config: ScalarFunctionConfig<P, R, M>): VgiFunction {\n const repr: Repr = config.repr ?? \"rich\";\n // Build argument specs\n const specs: ArgumentSpec[] = [];\n\n if (config.parameters) {\n // Ordered parameter list — supports arbitrary interleaving of const/non-const\n for (const [idx, p] of config.parameters.entries()) {\n const isAny = isNull(p.type);\n specs.push({\n name: p.name,\n position: idx,\n arrowType: isAny ? nullType() : p.type,\n isAnyType: isAny,\n isConst: p.const,\n isVarargs: p.varargs,\n doc: p.doc,\n ...constraintSpecFields(p),\n });\n }\n } else {\n // Legacy: params first, then constParams\n let posIdx = 0;\n\n if (config.params) {\n for (const [name, type] of Object.entries(config.params)) {\n const isAny = isNull(type);\n specs.push({\n name,\n position: posIdx++,\n arrowType: isAny ? nullType() : type,\n isAnyType: isAny,\n doc: config.argDocs?.[name],\n });\n }\n }\n\n if (config.constParams) {\n for (const [name, type] of Object.entries(config.constParams)) {\n specs.push({\n name,\n position: posIdx++,\n arrowType: type,\n isConst: true,\n doc: config.argDocs?.[name],\n });\n }\n }\n }\n\n // Raw const-arg constraints for bind-time enforcement, keyed by arg name.\n // Only the ordered `parameters` API carries constraints (the legacy\n // params/constParams path does not), so only its const params appear here.\n const constConstraints = new Map<string, ArgumentConstraints>();\n if (config.parameters) {\n for (const p of config.parameters) {\n if (\n p.const &&\n (p.choices !== undefined ||\n p.ge !== undefined ||\n p.le !== undefined ||\n p.gt !== undefined ||\n p.lt !== undefined ||\n p.pattern !== undefined)\n ) {\n constConstraints.set(p.name, p);\n }\n }\n }\n\n const meta: FunctionMeta = {\n name: config.name,\n description: config.description,\n stability: config.stability,\n nullHandling: config.nullHandling,\n examples: config.examples,\n categories: config.categories,\n tags: config.tags,\n maxWorkers: config.maxWorkers,\n requiredSettings: config.requiredSettings,\n requiredSecrets: config.requiredSecrets,\n };\n\n // Default output schema for catalog registration.\n // Static returns: use the declared type.\n // Dynamic outputType: use null with vgi:any metadata (matches Python convention).\n const defaultOutputSchema = config.returns\n ? makeSchema([field(\"result\", config.returns, true)])\n : makeSchema([field(\"result\", nullType(), true, new Map([[\"vgi:any\", \"true\"]]))]);\n\n return {\n kind: \"scalar\",\n meta,\n argumentSpecs: specs,\n defaultOutputSchema,\n\n async bind(request: BindRequest): Promise<BindResponse> {\n const settings = batchToScalarDict(request.settings);\n const secrets = batchToSecretDict(request.secrets);\n\n // Extract constant args from the Arguments.\n // DuckDB only sends const arg values in Arguments (column args are in inputSchema).\n // Arguments are indexed sequentially (0, 1, ...) for const args only.\n const constArgs: Record<string, any> = {};\n {\n let constIdx = 0;\n for (const spec of specs) {\n if (spec.isConst) {\n const value = request.arguments.get(constIdx, undefined);\n constArgs[spec.name] = value;\n // Enforce declared const-arg constraints at bind (choices/range/pattern).\n const constraints = constConstraints.get(spec.name);\n if (constraints) validateConstConstraints(spec.name, constraints, value);\n constIdx++;\n }\n }\n }\n\n // Determine output type\n let outputType: VgiDataType;\n if (config.outputType) {\n outputType = await config.outputType({\n constArgs,\n argumentsSchema: request.input_schema ?? makeSchema([]),\n settings,\n secrets,\n bindCall: request,\n });\n } else if (config.returns) {\n outputType = config.returns;\n } else {\n throw new Error(\n `Scalar function '${config.name}' must specify either 'returns' or 'outputType'`\n );\n }\n\n const outputSchema = makeSchema([\n field(\"result\", outputType, true),\n ]);\n\n return { output_schema: outputSchema, opaque_data: null };\n },\n\n globalInit(request: InitRequest): GlobalInitResponse {\n const executionId = new Uint8Array(16);\n crypto.getRandomValues(executionId);\n return {\n max_workers: config.maxWorkers ?? DEFAULT_MAX_WORKERS,\n execution_id: executionId,\n opaque_data: null,\n };\n },\n\n createStreamHandlers(\n request: InitRequest,\n response: GlobalInitResponse\n ): StreamHandlers {\n const outputSchema = request.output_schema;\n const settings = batchToScalarDict(request.bind_call.settings);\n const secrets = batchToSecretDict(request.bind_call.secrets);\n\n // Extract const args (DuckDB only sends const values, indexed sequentially)\n const constArgs: Record<string, any> = {};\n let constIdx = 0;\n for (const spec of specs) {\n if (spec.isConst) {\n constArgs[spec.name] = request.bind_call.arguments.get(constIdx, undefined);\n constIdx++;\n }\n }\n\n const inputSchema = request.bind_call.input_schema;\n\n return {\n outputSchema,\n inputSchema: inputSchema ?? undefined,\n exchangeInit: () => ({}),\n exchangeFn: (state: any, input: VgiBatch, out: OutputCollector) => {\n const result = config.compute(input as any, constArgs, { settings, secrets, auth: out.auth });\n\n // Build output batch\n let outputBatch: VgiBatch;\n if (isBatch(result)) {\n outputBatch = result as VgiBatch;\n } else if (Array.isArray(result)) {\n // Array of values -> single column. Route through batchFromColumns\n // so complex types (Decimal, BigInt-backed Timestamp/Duration,\n // List, Map, Struct) are built via our buildColumnData. The `repr`\n // selects raw<->canonical (branded) vs rich<->canonical conversion.\n const fieldName = outputSchema.fields[0].name;\n outputBatch = batchFromColumns({ [fieldName]: result }, outputSchema, repr);\n } else {\n // User returned an Arrow Vector / typed-array-shaped column. Iterate\n // it into a JS array and re-route through batchFromColumns. Adds an\n // O(n) copy but matches both backends' contract.\n const fieldName = outputSchema.fields[0].name;\n outputBatch = batchFromColumns({ [fieldName]: [...(result as Iterable<any>)] }, outputSchema, repr);\n }\n\n // Validate row count\n if (outputBatch.numRows !== input.numRows) {\n throw new RowCountMismatchError(\n input.numRows,\n outputBatch.numRows\n );\n }\n\n // Result-cache opt-in: a scalar declaring cacheControl rides its\n // vgi.cache.* keys on the emit path's per-batch custom metadata. The\n // per-value memo tier is only populated when that CacheControl also\n // sets `perValue` (default off — it costs more than a cheap call).\n out.emit(\n outputBatch,\n config.cacheControl ? cacheControlMetadata(config.cacheControl) : undefined,\n );\n },\n };\n },\n };\n}\n",
|
|
25
25
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// VGI core types - enums and constants matching Python wire format exactly.\n\nexport enum FunctionType {\n SCALAR = \"scalar\",\n TABLE = \"table\",\n AGGREGATE = \"aggregate\",\n}\n\nexport enum FunctionStability {\n CONSISTENT = \"CONSISTENT\",\n VOLATILE = \"VOLATILE\",\n CONSISTENT_WITHIN_QUERY = \"CONSISTENT_WITHIN_QUERY\",\n}\n\nexport enum NullHandling {\n DEFAULT = \"DEFAULT\",\n SPECIAL = \"SPECIAL\",\n}\n\nexport enum OrderPreservation {\n /** Output rows are in same order as input rows (DuckDB INSERTION_ORDER). */\n PRESERVES_ORDER = \"PRESERVES_ORDER\",\n /** Output order is undefined; may be reordered (DuckDB NO_ORDER). */\n NO_ORDER_GUARANTEE = \"NO_ORDER_GUARANTEE\",\n /** Output is in a fixed mandatory order; DuckDB serialises the pipeline\n * (single worker) to preserve it (DuckDB FIXED_ORDER). */\n FIXED_ORDER = \"FIXED_ORDER\",\n}\n\nexport enum OrderDependence {\n ORDER_DEPENDENT = \"ORDER_DEPENDENT\",\n NOT_ORDER_DEPENDENT = \"NOT_ORDER_DEPENDENT\",\n}\n\nexport enum DistinctDependence {\n DISTINCT_DEPENDENT = \"DISTINCT_DEPENDENT\",\n NOT_DISTINCT_DEPENDENT = \"NOT_DISTINCT_DEPENDENT\",\n}\n\nexport enum TableInOutPhase {\n INPUT = \"INPUT\",\n FINALIZE = \"FINALIZE\",\n // Sink+Source (TableBufferingFunction) init phases. TABLE_BUFFERING is the\n // sink-side init (persist init metadata so any pool worker can serve\n // process/combine); TABLE_BUFFERING_FINALIZE is the per-finalize_state_id\n // Source-stream init.\n TABLE_BUFFERING = \"TABLE_BUFFERING\",\n TABLE_BUFFERING_FINALIZE = \"TABLE_BUFFERING_FINALIZE\",\n}\n\n// Arrow schema metadata keys (must match Python exactly - bytes in Python, strings in TS)\nexport const VGI_ARG_KEY = \"vgi_arg\";\nexport const VGI_ARG_NAMED = \"named\";\nexport const VGI_TYPE_KEY = \"vgi_type\";\nexport const VGI_TYPE_TABLE = \"table\";\nexport const VGI_TYPE_ANY = \"any\";\nexport const VGI_VARARGS_KEY = \"vgi_varargs\";\nexport const VGI_VARARGS_TRUE = \"true\";\nexport const VGI_CONST_KEY = \"vgi_const\";\nexport const VGI_CONST_TRUE = \"true\";\n// Per-argument description (UTF-8; presence-only). `vgi_doc_*` prefix reserved.\nexport const VGI_DOC_KEY = \"vgi_doc\";\n\n// Per-argument constraint metadata for agent discovery. All presence-only\n// (omitted when absent) and value-encoded as UTF-8 so the surfaced column type\n// stays uniform regardless of the arg's value type:\n// vgi_default — JSON scalar (the arg's default value; optional args only)\n// vgi_choices — JSON array (the closed set of allowed values)\n// vgi_range — interval notation built from ge/le/gt/lt (e.g. \"[0, 100]\",\n// \"(0, +inf)\", \"[1, 10)\"); a discovery surface, not raw bounds\n// vgi_pattern — raw regex the value must match (open set)\n// Kept byte-for-byte in sync with the C++ reader and the Python/other SDKs.\nexport const VGI_DEFAULT_KEY = \"vgi_default\";\nexport const VGI_CHOICES_KEY = \"vgi_choices\";\nexport const VGI_RANGE_KEY = \"vgi_range\";\nexport const VGI_PATTERN_KEY = \"vgi_pattern\";\n\nexport interface TableCardinality {\n estimate: number | null;\n max: number | null;\n}\n\n// Default max workers (matches Python DEFAULT_MAX_WORKERS = 99999)\nexport const DEFAULT_MAX_WORKERS = 99999;\n",
|
|
26
26
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// VGI-specific error classes.\n\nexport class VgiError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"VgiError\";\n }\n}\n\nexport class RowCountMismatchError extends VgiError {\n constructor(expected: number, actual: number) {\n super(\n `Scalar function output row count (${actual}) does not match ` +\n `input row count (${expected})`\n );\n this.name = \"RowCountMismatchError\";\n }\n}\n\nexport class FunctionNotFoundError extends VgiError {\n constructor(name: string, available?: string[]) {\n super(`Unknown function '${name}'`);\n this.name = \"FunctionNotFoundError\";\n }\n}\n\nexport class CatalogReadOnlyError extends VgiError {\n constructor(operation: string) {\n super(`catalog is read-only: ${operation} is not supported`);\n this.name = \"CatalogReadOnlyError\";\n }\n}\n\nexport class CatalogNotFoundError extends VgiError {\n constructor(entity: string, name: string) {\n super(`${entity} '${name}' not found`);\n this.name = \"CatalogNotFoundError\";\n }\n}\n\nexport class CatalogAlreadyExistsError extends VgiError {\n constructor(entity: string, name: string) {\n super(`${entity} '${name}' already exists`);\n this.name = \"CatalogAlreadyExistsError\";\n }\n}\n\nexport class ArgumentValidationError extends VgiError {\n constructor(message: string) {\n super(message);\n this.name = \"ArgumentValidationError\";\n }\n}\n\nexport class NoCatalogError extends VgiError {\n constructor() {\n super(\"No catalog is configured for this worker\");\n this.name = \"NoCatalogError\";\n }\n}\n",
|
|
27
27
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// ArgumentSpec: converts function argument definitions to Arrow schema with VGI metadata keys.\n// Must produce byte-identical schemas to Python's argument_specs_to_schema().\n\nimport { type VgiSchema, schema as schema_, type VgiField, field as field_, type VgiDataType, nullType, deserializeBatch } from \"../arrow/index.js\";\nimport {\n VGI_ARG_KEY,\n VGI_ARG_NAMED,\n VGI_TYPE_KEY,\n VGI_TYPE_TABLE,\n VGI_TYPE_ANY,\n VGI_VARARGS_KEY,\n VGI_VARARGS_TRUE,\n VGI_CONST_KEY,\n VGI_CONST_TRUE,\n VGI_DOC_KEY,\n VGI_DEFAULT_KEY,\n VGI_CHOICES_KEY,\n VGI_RANGE_KEY,\n VGI_PATTERN_KEY,\n} from \"../types.js\";\nimport { ArgumentValidationError } from \"../errors.js\";\n\nexport interface ArgumentSpec {\n name: string;\n position: number | string;\n arrowType: VgiDataType;\n isTableInput?: boolean;\n isAnyType?: boolean;\n isVarargs?: boolean;\n isConst?: boolean;\n doc?: string;\n /**\n * Discovery-facing constraint metadata, pre-encoded to their surfaced UTF-8\n * forms (presence-only — `undefined` means the constraint is absent and the\n * corresponding field-metadata key is omitted entirely). Mirrors Python's\n * `ArgumentSpec.default_json` / `choices_json` / `range_notation` / `pattern`\n * so `argumentSpecsToSchema`/`schemaToArgumentSpecs` round-trip symmetrically.\n */\n defaultJson?: string;\n choicesJson?: string;\n rangeNotation?: string;\n pattern?: string;\n}\n\n/**\n * Raw per-argument constraint declarations, as authored on a function's\n * argument descriptor. Encoded into the pre-computed {@link ArgumentSpec}\n * constraint fields via {@link constraintSpecFields}.\n */\nexport interface ArgumentConstraints {\n /** Closed set of allowed values (JSON-encoded into `vgi_choices`). */\n choices?: readonly unknown[];\n /** Inclusive lower bound (`>=`). */\n ge?: number;\n /** Inclusive upper bound (`<=`). */\n le?: number;\n /** Exclusive lower bound (`>`). */\n gt?: number;\n /** Exclusive upper bound (`<`). */\n lt?: number;\n /** Regex the value must match (surfaced as `vgi_pattern`, as-is). */\n pattern?: string;\n /** Default value (JSON-encoded into `vgi_default`); optional args only. */\n default?: unknown;\n}\n\n/** `JSON.stringify`, falling back to the value's string form when unserializable. */\nfunction safeJson(value: unknown): string {\n try {\n const encoded = JSON.stringify(value);\n // JSON.stringify returns undefined for functions/symbols/undefined.\n if (encoded === undefined) {\n return JSON.stringify(String(value));\n }\n return encoded;\n } catch {\n return JSON.stringify(String(value));\n }\n}\n\n/**\n * Build interval notation from an argument's numeric bounds.\n *\n * Inclusive bounds (`ge`/`le`) render as square brackets, exclusive bounds\n * (`gt`/`lt`) as parentheses, and an open side as `-inf`/`+inf`. Returns\n * `undefined` when the argument has no numeric bound at all.\n *\n * Examples: `ge=0,le=10` -> `\"[0, 10]\"`; `gt=0` -> `\"(0, +inf)\"`;\n * `ge=1,lt=10` -> `\"[1, 10)\"`.\n */\nexport function formatRange(\n ge?: number,\n le?: number,\n gt?: number,\n lt?: number,\n): string | undefined {\n if (ge === undefined && le === undefined && gt === undefined && lt === undefined) {\n return undefined;\n }\n let low: string;\n if (gt !== undefined) {\n low = `(${gt}`;\n } else if (ge !== undefined) {\n low = `[${ge}`;\n } else {\n low = \"(-inf\";\n }\n let high: string;\n if (lt !== undefined) {\n high = `${lt})`;\n } else if (le !== undefined) {\n high = `${le}]`;\n } else {\n high = \"+inf)\";\n }\n return `${low}, ${high}`;\n}\n\n/**\n * Encode raw {@link ArgumentConstraints} into the pre-computed constraint\n * fields of an {@link ArgumentSpec} (presence-only — absent constraints yield\n * no field). Mirrors Python's `_constraint_kwargs`.\n */\nexport function constraintSpecFields(\n constraints: ArgumentConstraints | undefined,\n): Pick<ArgumentSpec, \"defaultJson\" | \"choicesJson\" | \"rangeNotation\" | \"pattern\"> {\n const fields: Pick<\n ArgumentSpec,\n \"defaultJson\" | \"choicesJson\" | \"rangeNotation\" | \"pattern\"\n > = {};\n if (constraints === undefined) return fields;\n\n if (\"default\" in constraints && constraints.default !== undefined) {\n fields.defaultJson = safeJson(constraints.default);\n }\n if (constraints.choices !== undefined) {\n fields.choicesJson = safeJson([...constraints.choices]);\n }\n const range = formatRange(\n constraints.ge,\n constraints.le,\n constraints.gt,\n constraints.lt,\n );\n if (range !== undefined) {\n fields.rangeNotation = range;\n }\n if (constraints.pattern !== undefined) {\n fields.pattern = constraints.pattern;\n }\n return fields;\n}\n\n/** Coerce a numeric const value (number or int64 `bigint`) to `number`. */\nfunction toNumber(value: unknown): number | undefined {\n if (typeof value === \"number\") return value;\n if (typeof value === \"bigint\") return Number(value);\n return undefined;\n}\n\n/** Equality for a choice comparison, coercing numeric/bigint operands. */\nfunction choiceEquals(choice: unknown, value: unknown): boolean {\n const cn = toNumber(choice);\n const vn = toNumber(value);\n if (cn !== undefined && vn !== undefined) return cn === vn;\n return choice === value;\n}\n\n/**\n * Enforce a bind-time const value against its declared {@link ArgumentConstraints},\n * throwing {@link ArgumentValidationError} on violation. Mirrors the Python SDK's\n * `Arg._validate`: numeric range (`ge`/`le`/`gt`/`lt`), closed choice set, and\n * regex `pattern`. A `null`/`undefined` value skips its value constraints.\n */\nexport function validateConstConstraints(\n name: string,\n constraints: ArgumentConstraints,\n value: unknown,\n): void {\n if (value === null || value === undefined) return;\n\n const num = toNumber(value);\n if (num !== undefined) {\n if (constraints.ge !== undefined && num < constraints.ge) {\n throw new ArgumentValidationError(`argument '${name}' must be >= ${constraints.ge}`);\n }\n if (constraints.le !== undefined && num > constraints.le) {\n throw new ArgumentValidationError(`argument '${name}' must be <= ${constraints.le}`);\n }\n if (constraints.gt !== undefined && num <= constraints.gt) {\n throw new ArgumentValidationError(`argument '${name}' must be > ${constraints.gt}`);\n }\n if (constraints.lt !== undefined && num >= constraints.lt) {\n throw new ArgumentValidationError(`argument '${name}' must be < ${constraints.lt}`);\n }\n }\n\n if (constraints.choices !== undefined && constraints.choices.length > 0) {\n if (!constraints.choices.some((c) => choiceEquals(c, value))) {\n throw new ArgumentValidationError(\n `argument '${name}' must be one of ${JSON.stringify([...constraints.choices])}`,\n );\n }\n }\n\n if (constraints.pattern !== undefined && typeof value === \"string\") {\n let re: RegExp | undefined;\n try {\n re = new RegExp(constraints.pattern);\n } catch {\n re = undefined; // an invalid declared regex must not reject the caller\n }\n if (re !== undefined && !re.test(value)) {\n throw new ArgumentValidationError(\n `argument '${name}' must match pattern ${JSON.stringify(constraints.pattern)}`,\n );\n }\n }\n}\n\nfunction argumentSpecSortKey(spec: ArgumentSpec): [number, number | string] {\n if (typeof spec.position === \"number\") {\n return [0, spec.position];\n }\n return [1, spec.position];\n}\n\n/**\n * Convert ArgumentSpecs to an Arrow Schema with VGI metadata keys.\n * Positional arguments come first (in order), named arguments follow.\n */\nexport function argumentSpecsToSchema(specs: ArgumentSpec[]): VgiSchema {\n const sorted = [...specs].sort((a, b) => {\n const ka = argumentSpecSortKey(a);\n const kb = argumentSpecSortKey(b);\n if (ka[0] !== kb[0]) return ka[0] - kb[0];\n if (typeof ka[1] === \"number\" && typeof kb[1] === \"number\") {\n return ka[1] - kb[1];\n }\n return String(ka[1]).localeCompare(String(kb[1]));\n });\n\n const fields: VgiField[] = [];\n for (const spec of sorted) {\n const metadata: Map<string, string> = new Map();\n\n if (typeof spec.position === \"string\") {\n metadata.set(VGI_ARG_KEY, VGI_ARG_NAMED);\n }\n\n if (spec.isTableInput) {\n metadata.set(VGI_TYPE_KEY, VGI_TYPE_TABLE);\n } else if (spec.isAnyType) {\n metadata.set(VGI_TYPE_KEY, VGI_TYPE_ANY);\n }\n\n if (spec.isVarargs) {\n metadata.set(VGI_VARARGS_KEY, VGI_VARARGS_TRUE);\n }\n\n if (spec.isConst) {\n metadata.set(VGI_CONST_KEY, VGI_CONST_TRUE);\n }\n\n // Per-argument description (UTF-8; presence-only — omit when empty).\n if (spec.doc) {\n metadata.set(VGI_DOC_KEY, spec.doc);\n }\n\n // Per-argument constraint metadata (presence-only; already value-encoded).\n if (spec.defaultJson !== undefined) {\n metadata.set(VGI_DEFAULT_KEY, spec.defaultJson);\n }\n if (spec.choicesJson !== undefined) {\n metadata.set(VGI_CHOICES_KEY, spec.choicesJson);\n }\n if (spec.rangeNotation !== undefined) {\n metadata.set(VGI_RANGE_KEY, spec.rangeNotation);\n }\n if (spec.pattern !== undefined) {\n metadata.set(VGI_PATTERN_KEY, spec.pattern);\n }\n\n const field = field_(\n spec.name,\n spec.arrowType,\n true,\n metadata.size > 0 ? metadata : undefined\n );\n fields.push(field);\n }\n\n return schema_(fields);\n}\n\n// =============================================================================\n// Macro Argument Schemas\n// =============================================================================\n\n/**\n * Build a macro `arguments_schema` describing macro parameters.\n *\n * Mirrors the function `arguments_schema` mechanism: one Arrow field per macro\n * parameter, in `parameters` order, each nullable. The per-parameter\n * description is carried via the same `vgi_doc` field-metadata key functions use\n * (UTF-8, presence-only — the key is omitted entirely when there is no doc). A\n * parameter's field type is the type of its default value when one is known\n * (decoded from `parameterDefaultValues`, a one-row RecordBatch serialized as\n * IPC bytes), else `nullType()`.\n *\n * @param parameters Ordered list of macro parameter names.\n * @param parameterDefaultValues Optional one-row RecordBatch (IPC bytes) whose\n * columns are parameter names with typed default values; used to infer each\n * parameter's field type.\n * @param parameterDocs Optional mapping of parameter name to description. Empty\n * or missing descriptions yield no `vgi_doc` metadata on the field.\n * @returns Arrow schema with one nullable field per parameter, in order.\n */\nexport function macroArgumentsSchema(\n parameters: string[],\n parameterDefaultValues?: Uint8Array | null,\n parameterDocs?: Record<string, string>,\n): VgiSchema {\n const docs = parameterDocs ?? {};\n\n // Map parameter name -> Arrow type from the typed default values, if any.\n const defaultTypes: Map<string, VgiDataType> = new Map();\n if (parameterDefaultValues && parameterDefaultValues.length > 0) {\n const batch = deserializeBatch(parameterDefaultValues);\n for (const f of batch.schema.fields) {\n defaultTypes.set(f.name, f.type);\n }\n }\n\n const fields: VgiField[] = [];\n for (const name of parameters) {\n const metadata: Map<string, string> = new Map();\n const doc = docs[name];\n if (doc) {\n metadata.set(VGI_DOC_KEY, doc);\n }\n const fieldType = defaultTypes.get(name) ?? nullType();\n fields.push(field_(name, fieldType, true, metadata.size > 0 ? metadata : undefined));\n }\n\n return schema_(fields);\n}\n\n/**\n * Extract per-parameter descriptions from a macro `arguments_schema`.\n *\n * Inverse of {@link macroArgumentsSchema}'s `vgi_doc` handling: reads the\n * `vgi_doc` field metadata (UTF-8) for each field. Fields without the key\n * (undocumented) are omitted from the result.\n *\n * @param schema A macro `arguments_schema` (one field per parameter).\n * @returns Mapping of parameter name to description, for documented parameters only.\n */\nexport function macroParameterDocsFromSchema(schema: VgiSchema): Record<string, string> {\n const docs: Record<string, string> = {};\n for (const field of schema.fields) {\n const doc = field.metadata.get(VGI_DOC_KEY);\n if (doc) {\n docs[field.name] = doc;\n }\n }\n return docs;\n}\n\n/**\n * Convert an Arrow Schema back to ArgumentSpecs.\n */\nexport function schemaToArgumentSpecs(schema: VgiSchema): ArgumentSpec[] {\n const specs: ArgumentSpec[] = [];\n let positionIndex = 0;\n\n for (const field of schema.fields) {\n const metadata = field.metadata;\n\n const isNamed = metadata.get(VGI_ARG_KEY) === VGI_ARG_NAMED;\n const position: number | string = isNamed\n ? field.name\n : positionIndex++;\n\n const vgiType = metadata.get(VGI_TYPE_KEY);\n const isTableInput = vgiType === VGI_TYPE_TABLE;\n const isAnyType = vgiType === VGI_TYPE_ANY;\n const isVarargs = metadata.get(VGI_VARARGS_KEY) === VGI_VARARGS_TRUE;\n const isConst = metadata.get(VGI_CONST_KEY) === VGI_CONST_TRUE;\n const doc = metadata.get(VGI_DOC_KEY) ?? \"\";\n\n // Per-argument constraint metadata (absent key -> undefined).\n const defaultJson = metadata.get(VGI_DEFAULT_KEY);\n const choicesJson = metadata.get(VGI_CHOICES_KEY);\n const rangeNotation = metadata.get(VGI_RANGE_KEY);\n const pattern = metadata.get(VGI_PATTERN_KEY);\n\n specs.push({\n name: field.name,\n position,\n arrowType: field.type,\n isTableInput,\n isAnyType,\n isVarargs,\n isConst,\n doc,\n defaultJson,\n choicesJson,\n rangeNotation,\n pattern,\n });\n }\n\n return specs;\n}\n",
|
|
28
|
-
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Back-compat shim. Arrow utilities have moved to src/arrow/ (the backend\n// facade). This file is kept so existing imports of `../util/arrow/index.js`\n// continue to work during step 2 of the facade migration. Once all callers\n// have switched to `../arrow/index.js`, this file can be deleted.\n\nexport {\n emptyBatch,\n batchFromRows,\n batchFromColumns,\n iterRows,\n batchToScalarDict,\n batchToSecretDict,\n safeNumber,\n decodeDictValue,\n filterBatch,\n projectSchema,\n projectBatch,\n serializeSchema,\n deserializeSchema,\n serializeBatch,\n deserializeBatch,\n} from \"../../arrow/index.js\";\n",
|
|
28
|
+
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Back-compat shim. Arrow utilities have moved to src/arrow/ (the backend\n// facade). This file is kept so existing imports of `../util/arrow/index.js`\n// continue to work during step 2 of the facade migration. Once all callers\n// have switched to `../arrow/index.js`, this file can be deleted.\n\nexport {\n emptyBatch,\n batchFromRows,\n batchFromColumns,\n iterRows,\n batchToScalarDict,\n batchToSecretDict,\n safeNumber,\n decodeDictValue,\n filterBatch,\n projectSchema,\n projectBatch,\n serializeSchema,\n deserializeSchema,\n serializeBatch,\n deserializeBatch,\n adoptArrowJsShape,\n} from \"../../arrow/index.js\";\n",
|
|
29
29
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Table function implementation.\n// Table functions produce output batches from arguments (no streaming input).\n\nimport {\n type VgiSchema,\n type VgiBatch,\n type VgiDataType,\n isBatch,\n isNull,\n nullType,\n deserializeBatch,\n readCanonicalValue,\n} from \"../arrow/index.js\";\nimport { codecFor } from \"../arrow/codec/registry.js\";\nimport type { OutputCollector } from \"@query-farm/vgi-rpc\";\nimport { DEFAULT_MAX_WORKERS } from \"../types.js\";\nimport type {\n BindRequest,\n BindResponse,\n InitRequest,\n GlobalInitResponse,\n TableFunctionCardinalityRequest,\n TableCardinality,\n} from \"../protocol/types.js\";\nimport type {\n VgiFunction,\n FunctionMeta,\n StreamHandlers,\n FunctionExample,\n} from \"./types.js\";\nimport {\n constraintSpecFields,\n validateConstConstraints,\n type ArgumentSpec,\n type ArgumentConstraints,\n} from \"../arguments/argument-spec.js\";\nimport { batchToScalarDict, batchToSecretDict, projectSchema, safeNumber } from \"../util/arrow/index.js\";\nimport {\n buildJoinKeysLookup,\n deserializeFilters,\n FilteringOutputCollector,\n type PushdownFilters,\n} from \"../filter-pushdown/index.js\";\nimport type { ColumnStatistics } from \"../util/statistics.js\";\nimport {\n FunctionStability,\n type NullHandling,\n type OrderPreservation,\n type OrderDependence,\n type DistinctDependence,\n} from \"../types.js\";\nimport { BoundStorage, storage as globalStorage } from \"./storage.js\";\nimport { CACHE_IF_MODIFIED_SINCE_KEY, CACHE_IF_NONE_MATCH_KEY } from \"../cache-control.js\";\n\n// Base64-decode a string into raw bytes. Used to unpack the dynamic filter\n// update DuckDB attaches to each tick batch's custom metadata.\nfunction base64Decode(s: string): Uint8Array {\n const bin = (globalThis as any).atob ? (globalThis as any).atob(s) : Buffer.from(s, \"base64\").toString(\"binary\");\n const out = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);\n return out;\n}\n\n// Read the first RecordBatch from an Arrow IPC stream buffer. Returns null if\n// the stream has no batches.\nfunction deserializeFilterBatch(bytes: Uint8Array): VgiBatch | null {\n if (!bytes || bytes.length === 0) return null;\n const batch = deserializeBatch(bytes);\n return batch.numRows === 0 && batch.schema.fields.length === 0 ? null : batch;\n}\n\n// Wrap an OutputCollector so each emitted RecordBatch is projected-by-name\n// to the bound outputSchema before forwarding. Lenient: workers can emit\n// over-wide batches (full declared schema) and the framework drops the\n// columns DuckDB didn't ask for. Field name mismatches yield null columns\n// rather than wrong-position reads. Field types must already match.\nfunction makeProjectingCollector(inner: OutputCollector, targetSchema: VgiSchema): OutputCollector {\n // Single-pass guard: don't project when a batch already matches.\n function alreadyMatches(batch: VgiBatch): boolean {\n if (batch.schema.fields.length !== targetSchema.fields.length) return false;\n for (let i = 0; i < targetSchema.fields.length; i++) {\n if (batch.schema.fields[i].name !== targetSchema.fields[i].name) return false;\n }\n return true;\n }\n function project(batch: VgiBatch): VgiBatch {\n if (alreadyMatches(batch)) return batch;\n const { batchFromColumns } = require(\"../arrow/index.js\");\n const cols: Record<string, any[]> = {};\n for (const f of targetSchema.fields) {\n const src = batch.getChild(f.name);\n if (src) {\n // Canonical read -> rich so the rebuild goes through the codec path\n // (backend-agnostic, lossless) rather than the raw `.get(i)`.\n const type = f.type as VgiDataType;\n const codec = codecFor(type);\n const arr: any[] = [];\n for (let i = 0; i < batch.numRows; i++) {\n arr.push(codec.canonicalToRich(readCanonicalValue(type, src, i)));\n }\n cols[f.name] = arr;\n } else {\n cols[f.name] = new Array(batch.numRows).fill(null);\n }\n }\n return batchFromColumns(cols, targetSchema);\n }\n return new Proxy(inner, {\n get(target, prop, receiver) {\n if (prop === \"emit\") {\n return function (this: OutputCollector, batchOrColumns: VgiBatch | Record<string, any[]>, metadata?: Map<string, string>) {\n if (isBatch(batchOrColumns)) {\n return (target as any).emit(project(batchOrColumns), metadata);\n }\n // Object form: vgi-rpc itself converts to a batch via outputSchema,\n // and the user passed columns by name — already aligned.\n return (target as any).emit(batchOrColumns, metadata);\n };\n }\n const v = Reflect.get(target, prop, receiver);\n return typeof v === \"function\" ? v.bind(target) : v;\n },\n });\n}\n\n// ============================================================================\n// Table function parameter bundles\n// ============================================================================\n\nexport interface TableBindParams<TArgs = Record<string, any>> {\n args: TArgs;\n bindCall: BindRequest;\n settings: Record<string, any>;\n secrets: Record<string, Record<string, any>>;\n resolvedSecretsProvided: boolean;\n}\n\nexport interface TableProcessParams<TArgs = Record<string, any>> {\n args: TArgs;\n initCall: InitRequest;\n initResponse: GlobalInitResponse;\n outputSchema: VgiSchema;\n settings: Record<string, any>;\n secrets: Record<string, Record<string, any>>;\n pushdownFilters?: PushdownFilters;\n storage?: BoundStorage;\n /**\n * AT (TIMESTAMP|VERSION) clause for this scan, or `undefined` when the scan\n * has no AT clause. Carried on the per-scan bind embedded in the init request\n * (`initCall.bind_call.at_unit` / `.at_value`), so function-backed tables can\n * read time travel at init alongside their pushdown filters. Mirrors\n * vgi-python's `ProcessParams.at_unit` / `.at_value`. See `BindRequest.at_unit`.\n */\n atUnit?: string;\n atValue?: string;\n /**\n * Conditional-revalidation validator (the client's stored ETag). Set when the\n * client holds a stale-but-revalidatable cached result and asks the worker to\n * confirm freshness cheaply; a worker that advertised `revalidatable` compares\n * it and, if unchanged, emits a 0-row batch tagged\n * `cacheControlMetadata({ notModified: true })` instead of re-streaming.\n * Undefined on a normal call.\n */\n ifNoneMatch?: string;\n /** Conditional-revalidation validator (the client's stored Last-Modified).\n * Companion to {@link ifNoneMatch}. Undefined on a normal call. */\n ifModifiedSince?: string;\n}\n\n// ============================================================================\n// Functional API\n// ============================================================================\n\nexport interface TableFunctionConfig<\n TArgs = Record<string, any>,\n TState = null,\n> {\n name: string;\n description?: string;\n /** Argument schema (positional args) */\n args?: Record<string, VgiDataType>;\n /** Argument docs */\n argDocs?: Record<string, string>;\n /** Argument defaults */\n argDefaults?: Record<string, any>;\n /**\n * Per-argument discovery constraints (choices / ge / le / gt / lt / pattern),\n * keyed by argument name. Surfaced via `vgi_function_arguments()` for agent\n * discovery AND enforced at bind: a value violating a declared constraint\n * fails the bind with an ArgumentValidationError.\n */\n argConstraints?: Record<string, ArgumentConstraints>;\n /** Names of args that accept variable number of arguments */\n varargs?: string[];\n /** Bind: return output schema. May be async — handlers `await` the result. */\n onBind: (params: TableBindParams<TArgs>) =>\n | {\n outputSchema: VgiSchema;\n opaqueData?: Uint8Array;\n lookupSecretTypes?: string[];\n lookupScopes?: string[];\n lookupNames?: string[];\n }\n | Promise<{\n outputSchema: VgiSchema;\n opaqueData?: Uint8Array;\n lookupSecretTypes?: string[];\n lookupScopes?: string[];\n lookupNames?: string[];\n }>;\n /** Init (optional). May be async — common when storage is HTTP-backed. */\n onInit?: (params: {\n args: TArgs;\n initCall: InitRequest;\n outputSchema: VgiSchema;\n executionId: Uint8Array;\n storage: BoundStorage;\n }) => GlobalInitResponse | Promise<GlobalInitResponse>;\n /** State factory */\n initialState?: (params: TableProcessParams<TArgs>) => TState;\n /** Process: emit batches via out, call out.finish() when done */\n process: (\n params: TableProcessParams<TArgs>,\n state: TState,\n out: OutputCollector\n ) => void | Promise<void>;\n /** Cardinality hints */\n cardinality?: (params: TableBindParams<TArgs>) => TableCardinality | Promise<TableCardinality>;\n /**\n * Per-column statistics for the function's output. Returned to DuckDB via\n * the `table_function_statistics` RPC; the optimizer uses min/max to\n * eliminate impossible filters at plan time (folding scans to\n * EMPTY_RESULT). Return `null` or an empty array when bounds are unknown.\n */\n statistics?: (params: TableBindParams<TArgs>) => ColumnStatistics[] | null;\n /**\n * Per-execution diagnostics surfaced under EXPLAIN ANALYZE. DuckDB calls\n * this once per parallel scan thread at pipeline FinishSource via the\n * `table_function_dynamic_to_string` RPC. Return ordered key→value\n * strings; the C++ extension merges these with the intrinsic keys\n * (Function, Rows Read, Threads). The framework provides a BoundStorage\n * keyed by the global execution_id so process() can persist counters\n * that this callback then reads back — see profiling_demo for the\n * canonical pattern.\n */\n dynamicToString?: (\n params: TableBindParams<TArgs>,\n executionId: Uint8Array,\n storage: BoundStorage,\n ) => Record<string, string> | Promise<Record<string, string>>;\n // Metadata\n projectionPushdown?: boolean;\n filterPushdown?: boolean;\n samplingPushdown?: boolean;\n /** Opt in to DuckDB's late-materialization SEMI-join rewrite; requires a\n * UNIQUE, snapshot-stable rowid column. FunctionInfo.late_materialization. */\n lateMaterialization?: boolean;\n supportedExpressionFilters?: string[];\n autoApplyFilters?: boolean;\n stability?: FunctionStability;\n examples?: FunctionExample[];\n categories?: string[];\n tags?: Record<string, string>;\n maxWorkers?: number;\n requiredSettings?: string[];\n requiredSecrets?: string[];\n /** Row-order preservation behavior; flows to DuckDB's\n * TableFunction::order_preservation_type. */\n preservesOrder?: OrderPreservation;\n nullHandling?: NullHandling;\n orderDependent?: OrderDependence;\n distinctDependent?: DistinctDependence;\n /** Emit per-batch `vgi_batch_index`; FunctionInfo.supports_batch_index. */\n supportsBatchIndex?: boolean;\n /** Hive-style partition-columns mode; FunctionInfo.partition_kind. */\n partitionKind?: \"NOT_PARTITIONED\" | \"SINGLE_VALUE_PARTITIONS\" | \"OVERLAPPING_PARTITIONS\" | \"DISJOINT_PARTITIONS\";\n}\n\nexport function defineTableFunction<\n TArgs = Record<string, any>,\n TState = null,\n>(config: TableFunctionConfig<TArgs, TState>): VgiFunction {\n // Build argument specs\n const specs: ArgumentSpec[] = [];\n let posIdx = 0;\n\n if (config.args) {\n const varargsSet = new Set(config.varargs ?? []);\n for (const [name, type] of Object.entries(config.args)) {\n const isAny = isNull(type);\n const hasDefault = config.argDefaults?.[name] !== undefined;\n specs.push({\n name,\n // Args with defaults are named (string position), others are positional\n position: hasDefault ? name : posIdx++,\n arrowType: isAny ? nullType() : type,\n isAnyType: isAny,\n isVarargs: varargsSet.has(name),\n doc: config.argDocs?.[name],\n ...constraintSpecFields(config.argConstraints?.[name]),\n });\n }\n }\n\n const meta: FunctionMeta = {\n name: config.name,\n description: config.description,\n stability: config.stability,\n projectionPushdown: config.projectionPushdown,\n filterPushdown: config.filterPushdown,\n samplingPushdown: config.samplingPushdown,\n lateMaterialization: config.lateMaterialization,\n supportedExpressionFilters: config.supportedExpressionFilters,\n autoApplyFilters: config.autoApplyFilters,\n examples: config.examples,\n categories: config.categories,\n tags: config.tags,\n maxWorkers: config.maxWorkers,\n requiredSettings: config.requiredSettings,\n requiredSecrets: config.requiredSecrets,\n preservesOrder: config.preservesOrder,\n nullHandling: config.nullHandling,\n orderDependent: config.orderDependent,\n distinctDependent: config.distinctDependent,\n supportsBatchIndex: config.supportsBatchIndex,\n partitionKind: config.partitionKind,\n };\n\n function extractArgs(request: BindRequest): TArgs {\n const args: Record<string, any> = {};\n for (const spec of specs) {\n const defaultVal =\n config.argDefaults?.[spec.name] !== undefined\n ? config.argDefaults[spec.name]\n : undefined;\n let val: any;\n try {\n val = request.arguments.get(spec.position, defaultVal);\n } catch {\n // Fallback: try by name (for scan function tables where DuckDB\n // converts positional args to named args)\n val = request.arguments.get(spec.name, defaultVal);\n }\n // Arrow Int64 values come through as BigInt — coerce to number\n if (typeof val === \"bigint\") val = safeNumber(val);\n // Enforce declared constraints at bind (table args are all bind-time).\n const constraints = config.argConstraints?.[spec.name];\n if (constraints) validateConstConstraints(spec.name, constraints, val);\n args[spec.name] = val;\n }\n return args as TArgs;\n }\n\n return {\n kind: \"table\",\n meta,\n argumentSpecs: specs,\n\n async bind(request: BindRequest): Promise<BindResponse> {\n const args = extractArgs(request);\n const settings = batchToScalarDict(request.settings);\n const secrets = batchToSecretDict(request.secrets);\n const result = await config.onBind({\n args, bindCall: request, settings, secrets,\n resolvedSecretsProvided: request.resolved_secrets_provided ?? false,\n });\n return {\n output_schema: result.outputSchema,\n opaque_data: result.opaqueData ?? null,\n lookup_secret_types: result.lookupSecretTypes,\n lookup_scopes: result.lookupScopes,\n lookup_names: result.lookupNames,\n };\n },\n\n async globalInit(request: InitRequest): Promise<GlobalInitResponse> {\n const executionId = new Uint8Array(16);\n crypto.getRandomValues(executionId);\n\n if (request.execution_id) {\n // Secondary init - reuse execution ID\n return {\n max_workers: config.maxWorkers ?? 1,\n execution_id: request.execution_id,\n opaque_data: null,\n };\n }\n\n if (config.onInit) {\n const args = extractArgs(request.bind_call);\n const boundStorage = new BoundStorage(globalStorage, executionId);\n return await config.onInit({\n args,\n initCall: request,\n outputSchema: request.output_schema,\n executionId,\n storage: boundStorage,\n });\n }\n\n return {\n max_workers: config.maxWorkers ?? 1,\n execution_id: executionId,\n opaque_data: null,\n };\n },\n\n createStreamHandlers(\n request: InitRequest,\n response: GlobalInitResponse\n ): StreamHandlers {\n const args = extractArgs(request.bind_call);\n const settings = batchToScalarDict(request.bind_call.settings);\n const secrets = batchToSecretDict(request.bind_call.secrets);\n\n // Apply projection pushdown only if the function supports it\n const projIds = request.projection_ids && meta.projectionPushdown\n ? request.projection_ids\n : null;\n const outputSchema = projIds\n ? projectSchema(projIds, request.output_schema)\n : request.output_schema;\n\n // Deserialize pushdown filters. Pass a join-keys column lookup so that\n // filters DuckDB promoted to join_keys (IN/OR lists, etc.) are\n // materialized as InFilters rather than silently dropped.\n const joinKeysLookup = buildJoinKeysLookup(request.join_keys);\n const pushdownFilters = request.pushdown_filters\n ? deserializeFilters(request.pushdown_filters, joinKeysLookup)\n : undefined;\n\n const boundStorage = new BoundStorage(globalStorage, response.execution_id);\n\n const processParams: TableProcessParams<TArgs> = {\n args,\n initCall: request,\n initResponse: response,\n outputSchema,\n settings,\n secrets,\n pushdownFilters,\n storage: boundStorage,\n atUnit: request.bind_call.at_unit ?? undefined,\n atValue: request.bind_call.at_value ?? undefined,\n };\n\n const state = config.initialState\n ? config.initialState(processParams)\n : (null as TState);\n\n return {\n outputSchema,\n producerInit: () => ({ state, processParams }),\n onTick: (\n pState: { state: TState; processParams: TableProcessParams<TArgs> },\n tickMetadata: Map<string, string> | undefined,\n ) => {\n if (!tickMetadata) return;\n\n // Conditional-revalidation validators: the client holds a stale\n // cached result and asks the worker to confirm freshness cheaply.\n // Over subprocess these ride the first producer tick; over HTTP the\n // first tick folds into the /init request, whose metadata vgi-rpc\n // surfaces here.\n const ifNoneMatch = tickMetadata.get(CACHE_IF_NONE_MATCH_KEY);\n const ifModifiedSince = tickMetadata.get(CACHE_IF_MODIFIED_SINCE_KEY);\n if (ifNoneMatch !== undefined) pState.processParams.ifNoneMatch = ifNoneMatch;\n if (ifModifiedSince !== undefined) pState.processParams.ifModifiedSince = ifModifiedSince;\n\n // Dynamic filter pushdown: DuckDB's Top-N optimizer tightens filters\n // between ticks and serializes the current filter into the tick\n // batch's custom metadata under `vgi_pushdown_filters` (base64 of a\n // filter IPC stream). Decode and overwrite the current pushdown\n // filters so process() sees the updated value.\n const encoded = tickMetadata.get(\"vgi_pushdown_filters\");\n if (!encoded) return;\n try {\n const bytes = base64Decode(encoded);\n const filterBatch = deserializeFilterBatch(bytes);\n if (filterBatch) {\n const updated = deserializeFilters(filterBatch, joinKeysLookup);\n pState.processParams.pushdownFilters = updated;\n }\n } catch {\n // Malformed dynamic-filter update: keep the previous filter. Not\n // fatal — this is a best-effort optimization hint from DuckDB.\n }\n },\n producerFn: async (\n pState: { state: TState; processParams: TableProcessParams<TArgs> },\n out: OutputCollector\n ) => {\n const current = pState.processParams.pushdownFilters;\n // Auto-project: workers may emit a batch with the function's full\n // declared schema even when DuckDB only requested a subset. Wrap\n // the OutputCollector so each emit() projects-by-name to the\n // bound outputSchema. Lenient: absent fields become null columns.\n let wrappedOut: OutputCollector =\n outputSchema && projIds\n ? makeProjectingCollector(out, outputSchema)\n : out;\n if (config.autoApplyFilters && current) {\n wrappedOut = new FilteringOutputCollector(wrappedOut, current) as unknown as OutputCollector;\n }\n await config.process(pState.processParams, pState.state, wrappedOut);\n },\n };\n },\n\n cardinality: config.cardinality\n ? (request: TableFunctionCardinalityRequest) => {\n const args = extractArgs(request.bind_call);\n const settings = batchToScalarDict(request.bind_call.settings);\n const secrets = batchToSecretDict(request.bind_call.secrets);\n return config.cardinality!({\n args,\n bindCall: request.bind_call,\n settings,\n secrets,\n resolvedSecretsProvided: request.bind_call.resolved_secrets_provided ?? false,\n });\n }\n : undefined,\n\n statistics: config.statistics\n ? (request: TableFunctionCardinalityRequest) => {\n const args = extractArgs(request.bind_call);\n const settings = batchToScalarDict(request.bind_call.settings);\n const secrets = batchToSecretDict(request.bind_call.secrets);\n return config.statistics!({\n args,\n bindCall: request.bind_call,\n settings,\n secrets,\n resolvedSecretsProvided: request.bind_call.resolved_secrets_provided ?? false,\n });\n }\n : undefined,\n\n dynamicToString: config.dynamicToString\n ? (request) => {\n const args = extractArgs(request.bindCall);\n const settings = batchToScalarDict(request.bindCall.settings);\n const secrets = batchToSecretDict(request.bindCall.secrets);\n const storage = new BoundStorage(globalStorage, request.globalExecutionId);\n return config.dynamicToString!(\n {\n args,\n bindCall: request.bindCall,\n settings,\n secrets,\n resolvedSecretsProvided: request.bindCall.resolved_secrets_provided ?? false,\n },\n request.globalExecutionId,\n storage,\n );\n }\n : undefined,\n };\n}\n",
|
|
30
30
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Filter pushdown type definitions.\n\nexport enum ComparisonOp {\n EQ = \"eq\",\n NE = \"ne\",\n GT = \"gt\",\n GE = \"ge\",\n LT = \"lt\",\n LE = \"le\",\n}\n\nexport interface ConstantFilter {\n type: \"constant\";\n columnName: string;\n columnIndex: number;\n op: ComparisonOp;\n value: any;\n}\n\nexport interface IsNullFilter {\n type: \"is_null\";\n columnName: string;\n columnIndex: number;\n}\n\nexport interface IsNotNullFilter {\n type: \"is_not_null\";\n columnName: string;\n columnIndex: number;\n}\n\nexport interface InFilter {\n type: \"in\";\n columnName: string;\n columnIndex: number;\n values: Set<any>;\n}\n\nexport interface AndFilter {\n type: \"and\";\n columnName: string;\n columnIndex: number;\n children: Filter[];\n}\n\nexport interface OrFilter {\n type: \"or\";\n columnName: string;\n columnIndex: number;\n children: Filter[];\n}\n\nexport interface StructFilter {\n type: \"struct\";\n columnName: string;\n columnIndex: number;\n childIndex: number;\n childName: string;\n childFilter: Filter;\n}\n\nexport type Filter =\n | ConstantFilter\n | IsNullFilter\n | IsNotNullFilter\n | InFilter\n | AndFilter\n | OrFilter\n | StructFilter\n | ExpressionFilter;\n\n/**\n * Expression-tree filter. The expr is a parsed AST; evaluation matches\n * DuckDB's semantics for the function names the table function advertises in\n * `supportedExpressionFilters` (e.g. list_contains, starts_with, contains,\n * &&/st_intersects_extent for spatial).\n */\nexport interface ExpressionFilter {\n type: \"expression\";\n columnName: string;\n columnIndex: number;\n expr: ExprNode;\n}\n\nexport type ExprNode =\n | { expr_type: \"column_ref\"; index: number }\n | { expr_type: \"constant\"; value: any }\n | { expr_type: \"function\"; function_name: string; children: ExprNode[] }\n | { expr_type: \"comparison\"; op: ComparisonOp; left: ExprNode; right: ExprNode }\n | { expr_type: \"conjunction\"; conjunction_type: \"and\" | \"or\"; children: ExprNode[] };\n",
|
|
31
31
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Filter pushdown evaluation: row-by-row predicate evaluation against\n// Arrow RecordBatches, plus the PushdownFilters class that owns a parsed\n// filter set and applies it to batches.\n\nimport {\n type VgiBatch,\n type VgiSchema,\n type VgiDataType,\n schema,\n readCanonicalValue,\n} from \"../arrow/index.js\";\nimport { batchFromColumns, filterBatch } from \"../util/arrow/index.js\";\nimport { codecFor } from \"../arrow/codec/registry.js\";\nimport {\n ComparisonOp,\n type AndFilter,\n type ConstantFilter,\n type ExpressionFilter,\n type ExprNode,\n type Filter,\n type InFilter,\n type IsNotNullFilter,\n type IsNullFilter,\n type OrFilter,\n type StructFilter,\n} from \"./types.js\";\n\n// ============================================================================\n// Comparison helpers\n// ============================================================================\n\nfunction compare(a: any, b: any, op: ComparisonOp): boolean {\n switch (op) {\n case ComparisonOp.EQ: return a === b;\n case ComparisonOp.NE: return a !== b;\n case ComparisonOp.GT: return a > b;\n case ComparisonOp.GE: return a >= b;\n case ComparisonOp.LT: return a < b;\n case ComparisonOp.LE: return a <= b;\n }\n}\n\n/**\n * Read a column cell at `index` in CANONICAL form (the same representation the\n * filter literals are deserialized into — see deserialize.ts `getValue`). Going\n * through the per-backend canonical reader makes this work on BOTH Arrow\n * backends (arrow-js's `col.get` and flechette's `col.at` are not interchange-\n * able) and guarantees temporal/decimal cells and literals compare like-for-\n * like (e.g. timestamp -> bigint on both sides). `colIndex` resolves the field\n * type from the batch schema.\n */\nfunction readCell(batch: VgiBatch, colIndex: number, index: number): any {\n const col = batch.getChildAt(colIndex);\n if (!col) return null;\n const type = batch.schema.fields[colIndex].type as unknown as VgiDataType;\n return readCanonicalValue(type, col, index);\n}\n\n// ============================================================================\n// Filter evaluation (row-by-row)\n// ============================================================================\n\nfunction evaluateFilter(\n filter: Filter,\n batch: VgiBatch,\n mask: Uint8Array,\n): void {\n switch (filter.type) {\n case \"constant\":\n evaluateConstant(filter, batch, mask);\n break;\n case \"is_null\":\n evaluateIsNull(filter, batch, mask);\n break;\n case \"is_not_null\":\n evaluateIsNotNull(filter, batch, mask);\n break;\n case \"in\":\n evaluateIn(filter, batch, mask);\n break;\n case \"and\":\n evaluateAnd(filter, batch, mask);\n break;\n case \"or\":\n evaluateOr(filter, batch, mask);\n break;\n case \"struct\":\n evaluateStruct(filter, batch, mask);\n break;\n case \"expression\":\n evaluateExpression(filter, batch, mask);\n break;\n }\n}\n\n// Recursively evaluate an expression AST against a row of the batch, returning\n// the scalar value it produces. column_ref reads from the batch using the\n// caller-supplied remap (DuckDB rewrites column refs inside an ExpressionFilter\n// so index=0 means \"this filter's column\"); constant returns its pre-resolved\n// JS value; function dispatches on function_name; comparison/conjunction\n// combine children.\nfunction evaluateExpr(\n node: ExprNode,\n batch: VgiBatch,\n rowIndex: number,\n colRefToBatchIndex: (index: number) => number,\n): any {\n switch (node.expr_type) {\n case \"column_ref\":\n return readCell(batch, colRefToBatchIndex(node.index), rowIndex);\n case \"constant\":\n return node.value;\n case \"function\":\n return evalFunction(\n node.function_name,\n node.children.map((c) => evaluateExpr(c, batch, rowIndex, colRefToBatchIndex)),\n );\n case \"comparison\": {\n const left = evaluateExpr(node.left, batch, rowIndex, colRefToBatchIndex);\n const right = evaluateExpr(node.right, batch, rowIndex, colRefToBatchIndex);\n if (left == null || right == null) return null;\n return compare(left, right, node.op);\n }\n case \"conjunction\": {\n if (node.conjunction_type === \"and\") {\n for (const c of node.children) {\n const v = evaluateExpr(c, batch, rowIndex, colRefToBatchIndex);\n if (v !== true) return v === false ? false : null;\n }\n return true;\n }\n let sawNull = false;\n for (const c of node.children) {\n const v = evaluateExpr(c, batch, rowIndex, colRefToBatchIndex);\n if (v === true) return true;\n if (v == null) sawNull = true;\n }\n return sawNull ? null : false;\n }\n }\n}\n\n// Dispatch DuckDB scalar-function names we support as pushdown filters.\n// Return null for any missing argument (SQL three-valued logic).\nfunction evalFunction(name: string, args: any[]): any {\n if (args.some((a) => a == null)) return null;\n switch (name) {\n case \"list_contains\":\n case \"array_contains\": {\n // args[0] is an Arrow ListVector row (iterable), args[1] is the needle.\n const [list, needle] = args;\n if (!list || typeof list[Symbol.iterator] !== \"function\") return false;\n for (const v of list) {\n if (v === needle) return true;\n }\n return false;\n }\n case \"starts_with\":\n case \"prefix\": {\n const [hay, needle] = args;\n return typeof hay === \"string\" && typeof needle === \"string\"\n ? hay.startsWith(needle) : false;\n }\n case \"contains\": {\n const [hay, needle] = args;\n return typeof hay === \"string\" && typeof needle === \"string\"\n ? hay.includes(needle) : false;\n }\n case \"&&\":\n case \"st_intersects_extent\": {\n // Bounding-box intersection between two WKB geometries. Parses each\n // geometry's XY bbox and checks for overlap in both dimensions.\n const [a, b] = args;\n const ba = wkbBBox(a);\n const bb = wkbBBox(b);\n if (!ba || !bb) return false;\n return !(ba.maxX < bb.minX || ba.minX > bb.maxX ||\n ba.maxY < bb.minY || ba.minY > bb.maxY);\n }\n default:\n // Unsupported functions shouldn't make it past the C++-side\n // `ExpressionTreeIsSupported` gate, but be defensive: evaluate to null\n // so the row is filtered out conservatively rather than silently\n // producing wrong results.\n return null;\n }\n}\n\n// Parse the XY bounding box of a WKB geometry. Supports Point and Polygon for\n// ST_MakeEnvelope output; extend as new geometry kinds are needed.\nfunction wkbBBox(bytes: any): { minX: number; minY: number; maxX: number; maxY: number } | null {\n if (!(bytes instanceof Uint8Array)) return null;\n if (bytes.length < 5) return null;\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n const le = view.getUint8(0) === 1;\n const type = view.getUint32(1, le);\n // Point (type=1): 21 bytes total (5 header + 8+8 coords)\n if (type === 1 && bytes.length >= 21) {\n const x = view.getFloat64(5, le);\n const y = view.getFloat64(13, le);\n return { minX: x, minY: y, maxX: x, maxY: y };\n }\n // Polygon (type=3): used by ST_MakeEnvelope. One ring, 4 points, close.\n // Header 5 + num_rings 4 + num_points 4 + 4*16 coord bytes = 81 bytes.\n if (type === 3 && bytes.length >= 81) {\n const numRings = view.getUint32(5, le);\n if (numRings < 1) return null;\n const numPoints = view.getUint32(9, le);\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n let off = 13;\n for (let i = 0; i < numPoints && off + 16 <= bytes.length; i++, off += 16) {\n const x = view.getFloat64(off, le);\n const y = view.getFloat64(off + 8, le);\n if (x < minX) minX = x;\n if (x > maxX) maxX = x;\n if (y < minY) minY = y;\n if (y > maxY) maxY = y;\n }\n if (minX === Infinity) return null;\n return { minX, minY, maxX, maxY };\n }\n return null;\n}\n\nfunction evaluateExpression(\n filter: ExpressionFilter,\n batch: VgiBatch,\n mask: Uint8Array,\n): void {\n const n = batch.numRows;\n // DuckDB's FilterSerializer rewrites bound references inside an\n // ExpressionFilter so that column_ref index 0 refers to the filter's own\n // column (see ReplaceWithBoundReference in DuckDB's optimizer). Higher\n // indices on the same filter aren't produced — the filter is always\n // scoped to a single column in the outer batch — so we map every\n // column_ref back to `filter.columnIndex` by name, resolving through the\n // current batch in case projection reordered columns.\n const colName = filter.columnName;\n let targetIdx = batch.schema.fields.findIndex((f) => f.name === colName);\n if (targetIdx < 0) targetIdx = filter.columnIndex;\n const colRef = (_nodeIndex: number) => targetIdx;\n for (let i = 0; i < n; i++) {\n if (!mask[i]) continue;\n const v = evaluateExpr(filter.expr, batch, i, colRef);\n mask[i] = v === true ? 1 : 0;\n }\n}\n\nfunction evaluateConstant(\n filter: ConstantFilter,\n batch: VgiBatch,\n mask: Uint8Array,\n): void {\n const n = batch.numRows;\n for (let i = 0; i < n; i++) {\n if (!mask[i]) continue;\n const cell = readCell(batch, filter.columnIndex, i);\n if (cell === null) {\n mask[i] = 0;\n } else {\n mask[i] = compare(cell, filter.value, filter.op) ? 1 : 0;\n }\n }\n}\n\nfunction evaluateIsNull(\n filter: IsNullFilter,\n batch: VgiBatch,\n mask: Uint8Array,\n): void {\n const n = batch.numRows;\n for (let i = 0; i < n; i++) {\n if (!mask[i]) continue;\n mask[i] = (readCell(batch, filter.columnIndex, i) !== null) ? 0 : 1;\n }\n}\n\nfunction evaluateIsNotNull(\n filter: IsNotNullFilter,\n batch: VgiBatch,\n mask: Uint8Array,\n): void {\n const n = batch.numRows;\n for (let i = 0; i < n; i++) {\n if (!mask[i]) continue;\n mask[i] = (readCell(batch, filter.columnIndex, i) !== null) ? 1 : 0;\n }\n}\n\nfunction evaluateIn(\n filter: InFilter,\n batch: VgiBatch,\n mask: Uint8Array,\n): void {\n const n = batch.numRows;\n for (let i = 0; i < n; i++) {\n if (!mask[i]) continue;\n const cell = readCell(batch, filter.columnIndex, i);\n if (cell === null) {\n mask[i] = 0;\n } else {\n mask[i] = filter.values.has(cell) ? 1 : 0;\n }\n }\n}\n\nfunction evaluateAnd(\n filter: AndFilter,\n batch: VgiBatch,\n mask: Uint8Array,\n): void {\n // AND: start with all-pass, then narrow with each child\n const n = batch.numRows;\n const childMask = new Uint8Array(n);\n\n for (const child of filter.children) {\n childMask.fill(1);\n evaluateFilter(child, batch, childMask);\n for (let i = 0; i < n; i++) {\n mask[i] &= childMask[i];\n }\n }\n}\n\nfunction evaluateOr(\n filter: OrFilter,\n batch: VgiBatch,\n mask: Uint8Array,\n): void {\n // OR: start with all-fail, then widen with each child\n const n = batch.numRows;\n const result = new Uint8Array(n); // all zeros\n const childMask = new Uint8Array(n);\n\n for (const child of filter.children) {\n childMask.fill(1);\n evaluateFilter(child, batch, childMask);\n for (let i = 0; i < n; i++) {\n result[i] |= childMask[i];\n }\n }\n\n // Combine with incoming mask\n for (let i = 0; i < n; i++) {\n mask[i] &= result[i];\n }\n}\n\nfunction evaluateStruct(\n filter: StructFilter,\n batch: VgiBatch,\n mask: Uint8Array,\n): void {\n const structType = batch.schema.fields[filter.columnIndex].type as unknown as VgiDataType;\n const childField = (structType as any).children?.[filter.childIndex];\n if (!childField) {\n // Child field not found — fail all rows\n mask.fill(0);\n return;\n }\n const childType = childField.type as VgiDataType;\n\n // Read the struct column in canonical form (backend-agnostic), pull out the\n // target child's canonical value per row, and rebuild a single-column child\n // batch via batchFromColumns (which re-runs canonical writes). Filter literals\n // are compared in canonical form too (see deserialize.ts), so the child column\n // cells and literals stay in matching representations across both backends.\n const childCanonical = Array.from({ length: batch.numRows }, (_, i) => {\n const structVal = readCell(batch, filter.columnIndex, i) as Record<string, unknown> | null;\n return structVal == null ? null : (structVal[childField.name] ?? null);\n });\n // batchFromColumns expects RICH values; map canonical -> rich for the child.\n const childCodec = codecFor(childType);\n const childRich = childCanonical.map((v) => childCodec.canonicalToRich(v));\n\n const childSchema = schema([\n (structType as any).children[filter.childIndex],\n ]);\n const childBatch = batchFromColumns(\n { [filter.childName]: childRich },\n childSchema,\n );\n\n // Remap child filter's columnIndex to 0 for the wrapper batch\n const remapped = { ...filter.childFilter, columnIndex: 0 };\n evaluateFilter(remapped, childBatch, mask);\n}\n\n// ============================================================================\n// SQL formatting\n// ============================================================================\n\nconst OP_SYMBOLS: Record<ComparisonOp, string> = {\n [ComparisonOp.EQ]: \"=\",\n [ComparisonOp.NE]: \"!=\",\n [ComparisonOp.GT]: \">\",\n [ComparisonOp.GE]: \">=\",\n [ComparisonOp.LT]: \"<\",\n [ComparisonOp.LE]: \"<=\",\n};\n\nfunction formatValue(v: any): string {\n if (typeof v === \"string\") return `'${v}'`;\n if (typeof v === \"bigint\") return String(v);\n return String(v);\n}\n\nfunction filterToSql(f: Filter): string {\n const col = f.columnName;\n\n switch (f.type) {\n case \"constant\":\n return `${col} ${OP_SYMBOLS[f.op]} ${formatValue(f.value)}`;\n case \"is_null\":\n return `${col} IS NULL`;\n case \"is_not_null\":\n return `${col} IS NOT NULL`;\n case \"in\": {\n // Match Python's repr: summarize large lists as `N values`, otherwise\n // render each element. Threshold matches vgi-python's InFilter.__repr__.\n const size = f.values.size;\n if (size > 20) {\n return `${col} IN (${size} values)`;\n }\n const vals = [...f.values].map(formatValue).join(\", \");\n return `${col} IN (${vals})`;\n }\n case \"and\": {\n const parts = f.children.map(filterToSql);\n return `(${parts.join(\" AND \")})`;\n }\n case \"or\": {\n const parts = f.children.map(filterToSql);\n return `(${parts.join(\" OR \")})`;\n }\n case \"struct\": {\n const nested = `${f.columnName}.${f.childName}`;\n const remapped = { ...f.childFilter, columnName: nested };\n return filterToSql(remapped);\n }\n case \"expression\":\n // Expression filters don't have a natural SQL rendering here — the\n // tree came from DuckDB's bound-expression serializer. Use a generic\n // placeholder so debug output stays readable.\n return `${f.columnName} MATCHES (expression)`;\n }\n}\n\n// ============================================================================\n// PushdownFilters\n// ============================================================================\n\nexport class PushdownFilters {\n constructor(\n readonly filters: Filter[],\n readonly version: string,\n ) {}\n\n /** Convert filters to a human-readable SQL-like string. */\n toSql(): string {\n if (this.filters.length === 0) return \"\";\n return this.filters.map(filterToSql).join(\" AND \");\n }\n\n /** Evaluate filters against a batch, returning a Uint8Array mask (0=fail, 1=pass). */\n evaluate(batch: VgiBatch): Uint8Array {\n const n = batch.numRows;\n const mask = new Uint8Array(n);\n mask.fill(1);\n\n for (const filter of this.filters) {\n evaluateFilter(filter, batch, mask);\n }\n\n return mask;\n }\n\n /** Apply filters to a batch, returning only passing rows. */\n apply(batch: VgiBatch): VgiBatch {\n if (batch.numRows === 0 || this.filters.length === 0) return batch;\n\n const mask = this.evaluate(batch);\n // filterBatch rebuilds via the codec/canonical path (backend-agnostic,\n // lossless), including its own all-pass / all-fail fast paths.\n return filterBatch(batch, mask);\n }\n\n /**\n * The set of column names referenced by the pushed-down filters, sorted\n * ascending. Descends one level into AndFilter children (DuckDB pushes\n * `col IN (...) AND col>=min` as a single AndFilter), consistent with\n * `getColumnValues` / `hasFilterForColumn`. Mirrors the cross-language\n * `filtered_columns` accessor (vgi-python / vgi-go / vgi-rust).\n */\n filteredColumns(): string[] {\n const cols = new Set<string>();\n for (const f of this.filters) {\n if (f.type === \"and\") {\n for (const c of f.children) cols.add(c.columnName);\n } else {\n cols.add(f.columnName);\n }\n }\n return Array.from(cols).sort();\n }\n\n /**\n * Whether any pushed-down filter references `columnName`. Mirrors the\n * cross-language `has_filter_for_column` accessor.\n */\n hasFilterForColumn(columnName: string): boolean {\n return this.collectColumnFilters(columnName).length > 0;\n }\n\n /**\n * Discrete values a column could take, from equality (`=`) or `IN` filters.\n * Useful for partition pruning (resolve the key set up front, fetch only\n * those keys). Returns null when the predicate is not enumerable — no\n * filter, a bare range, or an OR with a non-discrete branch.\n *\n * Mirrors vgi-python's `PushdownFilters.get_column_values`: descends one\n * level into an AndFilter (DuckDB pushes `col IN (...) AND col>=min AND\n * col<=max` as a single AndFilter from a semi-join), and unions OR branches\n * only when every branch pins the column to discrete values.\n */\n getColumnValues(columnName: string): any[] | null {\n for (const f of this.collectColumnFilters(columnName)) {\n if (f.type === \"constant\" && f.op === ComparisonOp.EQ) {\n return [f.value];\n } else if (f.type === \"in\") {\n return Array.from(f.values);\n } else if (f.type === \"or\") {\n const union = this.orDiscreteValues(f, columnName);\n if (union !== null) return union;\n }\n }\n return null;\n }\n\n /**\n * Union of discrete values for `columnName` across all OR branches, iff every\n * child constrains it to discrete values (`=` or `IN`); otherwise null (the\n * column could take any value through a non-discrete branch). Returning one\n * branch's values would be an unsafe subset.\n */\n private orDiscreteValues(orFilter: OrFilter, columnName: string): any[] | null {\n const values: any[] = [];\n for (const child of orFilter.children) {\n if (child.columnName !== columnName) return null;\n if (child.type === \"constant\" && child.op === ComparisonOp.EQ) {\n values.push(child.value);\n } else if (child.type === \"in\") {\n for (const v of child.values) values.push(v);\n } else {\n return null;\n }\n }\n if (values.length === 0) return null;\n // Deduplicate, preserving first-seen order for stable output.\n const seen = new Set<any>();\n const deduped: any[] = [];\n for (const v of values) {\n if (!seen.has(v)) {\n seen.add(v);\n deduped.push(v);\n }\n }\n return deduped;\n }\n\n /**\n * Collect filters for a column from the top level and direct AND children\n * (one level of descent, consistent with the Python accessor). Deeply nested\n * AND/AND is not traversed.\n */\n private collectColumnFilters(columnName: string): Filter[] {\n const result: Filter[] = [];\n for (const f of this.filters) {\n if (f.columnName !== columnName) continue;\n if (f.type === \"and\") {\n for (const c of f.children) {\n if (c.columnName === columnName) result.push(c);\n }\n } else {\n result.push(f);\n }\n }\n return result;\n }\n}\n",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Table sink+source (\"table_buffering\") function implementation.\n//\n// Three phases, mirroring the C++ PhysicalVgiTableBuffering Sink+Source\n// operator:\n// 1. Sink — process(batch, params) -> state_id (bytes), one per input\n// batch. Driven by the unary `table_buffering_process` RPC.\n// 2. Combine — combine(state_ids, params) -> finalize_state_ids (bytes[]),\n// once on the coordinator. Driven by `table_buffering_combine`.\n// 3. Source — finalize(params, fid, state, out) producer-mode streaming,\n// one batch per tick. Driven by an init() stream with\n// phase=TABLE_BUFFERING_FINALIZE.\n//\n// CROSS-PROCESS INVARIANT: state written in process() that finalize() reads\n// MUST live in cross-process storage scoped by execution_id (BoundStorage).\n// The Source phase may route a finalize_state_id to a worker process that\n// did NOT run the corresponding process() calls.\n\nimport {\n type VgiSchema,\n schema,\n type VgiDataType,\n type VgiBatch,\n nullType,\n} from \"../arrow/index.js\";\nimport type { OutputCollector } from \"@query-farm/vgi-rpc\";\nimport { DEFAULT_MAX_WORKERS, TableInOutPhase } from \"../types.js\";\nimport type {\n BindRequest,\n BindResponse,\n InitRequest,\n GlobalInitResponse,\n TableFunctionCardinalityRequest,\n} from \"../protocol/types.js\";\nimport type { TableCardinality } from \"../types.js\";\nimport type {\n VgiFunction,\n FunctionMeta,\n StreamHandlers,\n FunctionExample,\n} from \"./types.js\";\nimport type { ArgumentSpec } from \"../arguments/argument-spec.js\";\nimport { batchToScalarDict, batchToSecretDict, projectSchema } from \"../util/arrow/index.js\";\nimport { batchFromColumns, readCanonicalValue } from \"../arrow/index.js\";\nimport { codecFor } from \"../arrow/codec/registry.js\";\nimport {\n buildJoinKeysLookup,\n deserializeFilters,\n FilteringOutputCollector,\n type PushdownFilters,\n} from \"../filter-pushdown/index.js\";\nimport { FunctionStability } from \"../types.js\";\nimport { BoundStorage, storage as defaultStorage, FrameworkNS } from \"./storage.js\";\nimport {\n serializeInitRequest,\n deserializeInitRequest,\n serializeGlobalInitResponse,\n} from \"../protocol/serialize.js\";\nimport { serializeBatch, deserializeBatch } from \"../util/arrow/index.js\";\n\n// ============================================================================\n// Parameter bundles\n// ============================================================================\n\nexport interface TableBufferingBindParams<TArgs = Record<string, any>> {\n args: TArgs;\n bindCall: BindRequest;\n settings: Record<string, any>;\n secrets: Record<string, Record<string, any>>;\n /** True on the second bind pass, after the connector resolved the secrets\n * requested via the onBind `lookupSecret*` return fields on the first pass. */\n resolvedSecretsProvided: boolean;\n}\n\nexport interface TableBufferingParams<TArgs = Record<string, any>> {\n args: TArgs;\n initCall: InitRequest;\n outputSchema: VgiSchema;\n settings: Record<string, any>;\n secrets: Record<string, Record<string, any>>;\n /** Shared cross-process storage scoped by execution_id. */\n storage: BoundStorage;\n /** Stable across coordinator + secondary workers for one DuckDB execution. */\n executionId: Uint8Array;\n /** Catalog attach identity (plaintext bytes). */\n attachId: Uint8Array;\n /** Hex/raw VGI transaction id, or null. */\n transactionId: Uint8Array | null;\n function_name: string;\n /** Per-chunk batch_index when requiresInputBatchIndex=true; else null. */\n batchIndex: number | null;\n /** In-band log sink for the unary process()/combine() RPCs. */\n clientLog: (level: string, message: string) => void;\n}\n\n// ============================================================================\n// Functional API config\n// ============================================================================\n\nexport interface TableBufferingConfig<\n TArgs = Record<string, any>,\n TState = any,\n> {\n name: string;\n description?: string;\n args?: Record<string, VgiDataType>;\n namedArgs?: Record<string, VgiDataType>;\n argDefaults?: Record<string, any>;\n /** Bind: default passes through input schema. May be async. Return non-empty\n * `lookupSecret*` lists on the first pass to request DuckDB secrets; the\n * connector then re-binds with `resolvedSecretsProvided` and the resolved\n * values are available in the process/finalize params' `secrets`. */\n onBind?: (params: TableBufferingBindParams<TArgs>) =>\n | {\n outputSchema: VgiSchema;\n opaqueData?: Uint8Array;\n lookupSecretTypes?: string[];\n lookupScopes?: string[];\n lookupNames?: string[];\n }\n | Promise<{\n outputSchema: VgiSchema;\n opaqueData?: Uint8Array;\n lookupSecretTypes?: string[];\n lookupScopes?: string[];\n lookupNames?: string[];\n }>;\n /** Sink: ingest one batch, return an opaque state_id. */\n process: (\n batch: VgiBatch,\n params: TableBufferingParams<TArgs>,\n ) => Uint8Array | Promise<Uint8Array>;\n /** Combine: group/merge state_ids, return finalize_state_ids. */\n combine: (\n stateIds: Uint8Array[],\n params: TableBufferingParams<TArgs>,\n ) => Uint8Array[] | Promise<Uint8Array[]>;\n /** Build the initial per-tick finalize state for a finalize_state_id. */\n initialFinalizeState?: (\n finalizeStateId: Uint8Array,\n params: TableBufferingParams<TArgs>,\n ) => TState | Promise<TState>;\n /** Source tick: emit one batch via out.emit / signal EOS via out.finish. */\n finalize: (\n params: TableBufferingParams<TArgs>,\n finalizeStateId: Uint8Array,\n state: TState,\n out: OutputCollector,\n ) => void | Promise<void>;\n cardinality?: (\n params: TableBufferingBindParams<TArgs>,\n ) => TableCardinality | Promise<TableCardinality>;\n // Metadata\n projectionPushdown?: boolean;\n filterPushdown?: boolean;\n autoApplyFilters?: boolean;\n /** Force ParallelSink=false in the C++ operator (single-thread ingest). */\n sinkOrderDependent?: boolean;\n /** Force serial Source drain in finalize_queue order. */\n sourceOrderDependent?: boolean;\n /** Thread DuckDB's per-chunk batch_index into every process() call. */\n requiresInputBatchIndex?: boolean;\n stability?: FunctionStability;\n examples?: FunctionExample[];\n categories?: string[];\n tags?: Record<string, string>;\n maxWorkers?: number;\n requiredSettings?: string[];\n requiredSecrets?: string[];\n}\n\n/**\n * A table_buffering VgiFunction also carries its callback config so the\n * protocol's unary handlers (process/combine/destructor) can reach it.\n */\nexport interface TableBufferingVgiFunction extends VgiFunction {\n bufferingConfig: TableBufferingConfig<any, any>;\n bufferingExtractArgs: (request: BindRequest) => any;\n}\n\nexport function defineTableBufferingFunction<\n TArgs = Record<string, any>,\n TState = any,\n>(config: TableBufferingConfig<TArgs, TState>): TableBufferingVgiFunction {\n if (config.sinkOrderDependent && config.requiresInputBatchIndex) {\n throw new Error(\n `${config.name}: sinkOrderDependent and requiresInputBatchIndex are ` +\n `mutually exclusive — single-thread sink already orders input.`,\n );\n }\n\n const specs: ArgumentSpec[] = [];\n let posIdx = 0;\n if (config.args) {\n for (const [name, type] of Object.entries(config.args)) {\n specs.push({ name, position: posIdx++, arrowType: type });\n }\n }\n specs.push({\n name: \"data\",\n position: posIdx++,\n arrowType: nullType(),\n isTableInput: true,\n });\n if (config.namedArgs) {\n for (const [name, type] of Object.entries(config.namedArgs)) {\n specs.push({ name, position: name, arrowType: type });\n }\n }\n\n const meta: FunctionMeta = {\n name: config.name,\n description: config.description,\n stability: config.stability,\n projectionPushdown: config.projectionPushdown,\n filterPushdown: config.filterPushdown,\n autoApplyFilters: config.autoApplyFilters,\n examples: config.examples,\n categories: config.categories,\n tags: config.tags,\n maxWorkers: config.maxWorkers,\n requiredSettings: config.requiredSettings,\n requiredSecrets: config.requiredSecrets,\n // The Source phase always runs (it's how output is produced), so a\n // table_buffering function always advertises has_finalize.\n hasFinalize: true,\n sinkOrderDependent: config.sinkOrderDependent,\n sourceOrderDependent: config.sourceOrderDependent,\n requiresInputBatchIndex: config.requiresInputBatchIndex,\n };\n\n function extractArgs(request: BindRequest): TArgs {\n const args: Record<string, any> = {};\n for (const spec of specs) {\n if (spec.isTableInput) continue;\n const defaultVal =\n config.argDefaults?.[spec.name] !== undefined\n ? config.argDefaults[spec.name]\n : undefined;\n let val = request.arguments.get(spec.position, defaultVal);\n if (typeof val === \"bigint\") val = Number(val);\n args[spec.name] = val;\n }\n return args as TArgs;\n }\n\n const func: TableBufferingVgiFunction = {\n kind: \"table_buffering\" as any,\n meta,\n argumentSpecs: specs,\n bufferingConfig: config as TableBufferingConfig<any, any>,\n bufferingExtractArgs: extractArgs as any,\n\n async bind(request: BindRequest): Promise<BindResponse> {\n if (config.onBind) {\n const args = extractArgs(request);\n const settings = batchToScalarDict(request.settings);\n const secrets = batchToSecretDict(request.secrets);\n const result = await config.onBind({\n args,\n bindCall: request,\n settings,\n secrets,\n resolvedSecretsProvided: request.resolved_secrets_provided ?? false,\n });\n return {\n output_schema: result.outputSchema,\n opaque_data: result.opaqueData ?? null,\n lookup_secret_types: result.lookupSecretTypes,\n lookup_scopes: result.lookupScopes,\n lookup_names: result.lookupNames,\n };\n }\n return {\n output_schema: request.input_schema ?? schema([]),\n opaque_data: null,\n };\n },\n\n async globalInit(request: InitRequest): Promise<GlobalInitResponse> {\n // Mint a stable execution_id for the primary; secondary inits reuse it.\n let executionId: Uint8Array;\n if (request.execution_id) {\n executionId = request.execution_id;\n } else {\n executionId = new Uint8Array(16);\n crypto.getRandomValues(executionId);\n }\n const response: GlobalInitResponse = {\n max_workers: config.maxWorkers ?? DEFAULT_MAX_WORKERS,\n execution_id: executionId,\n opaque_data: null,\n };\n\n // On the sink-side init, persist init metadata so any pool worker can\n // cold-load it when serving subsequent process()/combine() unary RPCs\n // (which carry no init context themselves). Mirrors Python's\n // FrameworkNS.BUFFERING_INIT state_put.\n if (request.phase === TableInOutPhase.TABLE_BUFFERING) {\n const bound = new BoundStorage(defaultStorage, executionId);\n await bound.statePut(\n FrameworkNS.BUFFERING_INIT,\n BoundStorage.packIntKey(-1),\n encodeBufferingInit(request, response),\n );\n }\n return response;\n },\n\n createStreamHandlers(\n request: InitRequest,\n response: GlobalInitResponse,\n _accumulatedState?: any,\n ): StreamHandlers {\n const args = extractArgs(request.bind_call);\n const settings = batchToScalarDict(request.bind_call.settings);\n const secrets = batchToSecretDict(request.bind_call.secrets);\n\n const projIds = request.projection_ids && meta.projectionPushdown\n ? request.projection_ids\n : null;\n const outputSchema = projIds\n ? projectSchema(projIds, request.output_schema)\n : request.output_schema;\n\n const joinKeysLookup = buildJoinKeysLookup(request.join_keys);\n const pushdownFilters = request.pushdown_filters\n ? deserializeFilters(request.pushdown_filters, joinKeysLookup)\n : undefined;\n\n const bound = new BoundStorage(\n defaultStorage,\n response.execution_id ?? new Uint8Array(16),\n );\n\n const params: TableBufferingParams<TArgs> = {\n args,\n initCall: request,\n outputSchema,\n settings,\n secrets,\n storage: bound,\n executionId: response.execution_id,\n attachId: request.bind_call.attach_opaque_data ?? new Uint8Array(0),\n transactionId: request.bind_call.transaction_opaque_data ?? null,\n function_name: request.bind_call.function_name,\n batchIndex: null,\n clientLog: () => {},\n };\n\n if (request.phase === TableInOutPhase.TABLE_BUFFERING_FINALIZE) {\n // SOURCE phase: producer-mode streaming, one batch per tick.\n const finalizeStateId = request.finalize_state_id ?? new Uint8Array(0);\n return {\n outputSchema,\n producerInit: () => ({ state: { __tbf_uninit: true } as any }),\n producerFn: async (\n pState: { state: any },\n out: OutputCollector,\n ) => {\n // Lazily build the user's per-tick state on the first tick.\n // pState.state round-trips through the HTTP exchange-state token\n // between ticks; `__tbf_uninit` marks \"not yet initialized\".\n let userState: any = pState.state;\n if (userState && userState.__tbf_uninit) {\n userState = config.initialFinalizeState\n ? await config.initialFinalizeState(finalizeStateId, params)\n : null;\n pState.state = userState ?? null;\n } else {\n userState = pState.state;\n }\n\n // Narrow each emitted (full-width) buffered batch to the projected\n // output schema, then auto-apply pushdown filters. Mirrors the\n // streaming TableFunctionGenerator path: project first, filter\n // second.\n let wrappedOut: OutputCollector = projIds\n ? makeProjectingCollector(out, outputSchema)\n : out;\n if (config.autoApplyFilters && pushdownFilters) {\n wrappedOut = new FilteringOutputCollector(wrappedOut, pushdownFilters) as unknown as OutputCollector;\n }\n\n await config.finalize(params, finalizeStateId, userState, wrappedOut);\n\n // Persist the (possibly mutated) user state for the next tick.\n pState.state = userState ?? null;\n },\n };\n }\n\n // SINK-init phase (TABLE_BUFFERING): the C++ side opens the init stream\n // in exchange mode, immediately sends EOS, and drains output to EOS.\n // We produce nothing — the real sink traffic is the separate unary\n // table_buffering_process / _combine RPCs.\n return {\n outputSchema,\n inputSchema: request.bind_call.input_schema ?? undefined,\n exchangeInit: () => ({ state: null }),\n exchangeFn: async (\n _state: any,\n _input: VgiBatch,\n _out: OutputCollector,\n ) => {\n // No-op: no per-batch output on the sink-init stream.\n },\n };\n },\n };\n\n if (config.cardinality) {\n func.cardinality = async (request: TableFunctionCardinalityRequest) => {\n const args = extractArgs(request.bind_call);\n const settings = batchToScalarDict(request.bind_call.settings);\n const secrets = batchToSecretDict(request.bind_call.secrets);\n return config.cardinality!({\n args,\n bindCall: request.bind_call,\n settings,\n secrets,\n resolvedSecretsProvided: request.bind_call.resolved_secrets_provided ?? false,\n });\n };\n }\n\n return func;\n}\n\n// Wrap an OutputCollector so each emitted batch is projected-by-name to the\n// target (narrowed) output schema before forwarding. Mirrors table.ts's\n// makeProjectingCollector — buffered batches are stored full-width, so the\n// Source phase narrows them per-tick to the projected columns.\nfunction makeProjectingCollector(\n inner: OutputCollector,\n targetSchema: VgiSchema,\n): OutputCollector {\n function alreadyMatches(batch: VgiBatch): boolean {\n if (batch.schema.fields.length !== targetSchema.fields.length) return false;\n for (let i = 0; i < targetSchema.fields.length; i++) {\n if (batch.schema.fields[i].name !== targetSchema.fields[i].name) return false;\n }\n return true;\n }\n function project(batch: VgiBatch): VgiBatch {\n if (alreadyMatches(batch)) return batch;\n const cols: Record<string, any[]> = {};\n for (const f of targetSchema.fields) {\n const src = batch.getChild(f.name);\n if (src) {\n // Canonical read -> rich so the rebuild goes through the codec path\n // (backend-agnostic, lossless) rather than the raw `.get(i)`.\n const type = f.type as VgiDataType;\n const codec = codecFor(type);\n const arr: any[] = [];\n for (let i = 0; i < batch.numRows; i++) {\n arr.push(codec.canonicalToRich(readCanonicalValue(type, src, i)));\n }\n cols[f.name] = arr;\n } else {\n cols[f.name] = new Array(batch.numRows).fill(null);\n }\n }\n return batchFromColumns(cols, targetSchema);\n }\n return new Proxy(inner, {\n get(target, prop, receiver) {\n if (prop === \"emit\") {\n return function (\n this: OutputCollector,\n batchOrColumns: VgiBatch | Record<string, any[]>,\n metadata?: Map<string, string>,\n ) {\n if (batchOrColumns && typeof (batchOrColumns as any).getChild === \"function\") {\n return (target as any).emit(project(batchOrColumns as VgiBatch), metadata);\n }\n return (target as any).emit(batchOrColumns, metadata);\n };\n }\n const v = Reflect.get(target, prop, receiver);\n return typeof v === \"function\" ? v.bind(target) : v;\n },\n });\n}\n\n// ============================================================================\n// Init-metadata persistence (mirrors Python _encode/_decode_table_buffering_init)\n// ============================================================================\n\nexport function encodeBufferingInit(\n request: InitRequest,\n response: GlobalInitResponse,\n): Uint8Array {\n // Serialize the InitRequest batch and the GlobalInitResponse so any pool\n // worker can cold-rebuild params when serving a process()/combine() RPC.\n const initBatch = serializeInitRequest(request);\n const initBytes = serializeBatch(initBatch);\n const respBatch = serializeGlobalInitResponse(response);\n // GlobalInitResponse serializer returns a plain dict; rebuild a 1-row batch.\n // Simpler: re-serialize as a length-prefixed pair of byte blobs.\n const respBytes = encodeGlobalInitResponse(respBatch);\n return concatLenPrefixed([initBytes, respBytes]);\n}\n\nexport function decodeBufferingInit(\n payload: Uint8Array,\n): { request: InitRequest; response: GlobalInitResponse } {\n const [initBytes, respBytes] = splitLenPrefixed(payload, 2);\n const initBatch = deserializeBatch(initBytes);\n const initDict = batchToScalarDict(initBatch);\n const request = deserializeInitRequest(initDict);\n const response = decodeGlobalInitResponse(respBytes);\n return { request, response };\n}\n\nfunction encodeGlobalInitResponse(dict: Record<string, any>): Uint8Array {\n // Encode { execution_id, opaque_data, max_workers } as length-prefixed blobs.\n const eid: Uint8Array = dict.execution_id ?? new Uint8Array(0);\n const opaque: Uint8Array | null = dict.opaque_data ?? null;\n const maxWorkers = Number(dict.max_workers ?? 1);\n const mwBuf = new Uint8Array(8);\n new DataView(mwBuf.buffer).setBigInt64(0, BigInt(maxWorkers), true);\n return concatLenPrefixed([eid, opaque ?? new Uint8Array(0), mwBuf]);\n}\n\nfunction decodeGlobalInitResponse(bytes: Uint8Array): GlobalInitResponse {\n const [eid, opaque, mwBuf] = splitLenPrefixed(bytes, 3);\n const maxWorkers = Number(new DataView(mwBuf.buffer, mwBuf.byteOffset, 8).getBigInt64(0, true));\n return {\n execution_id: eid,\n opaque_data: opaque.length > 0 ? opaque : null,\n max_workers: maxWorkers,\n };\n}\n\nfunction concatLenPrefixed(parts: Uint8Array[]): Uint8Array {\n let total = 0;\n for (const p of parts) total += 4 + p.length;\n const out = new Uint8Array(total);\n const dv = new DataView(out.buffer);\n let off = 0;\n for (const p of parts) {\n dv.setUint32(off, p.length, true);\n off += 4;\n out.set(p, off);\n off += p.length;\n }\n return out;\n}\n\nfunction splitLenPrefixed(buf: Uint8Array, count: number): Uint8Array[] {\n const dv = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n const parts: Uint8Array[] = [];\n let off = 0;\n for (let i = 0; i < count; i++) {\n const len = dv.getUint32(off, true);\n off += 4;\n parts.push(buf.subarray(off, off + len));\n off += len;\n }\n return parts;\n}\n",
|
|
39
39
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Arguments wire format — single-row Arrow batch with one \"args\" Struct\n// column whose children are named `positional_<i>` / `named_<name>`.\n// Matches Python's Arguments.serialize_to_bytes().\n\nimport {\n type VgiDataType,\n type VgiField,\n schema as makeSchema,\n field,\n struct as makeStruct,\n utf8,\n binary,\n int64,\n bool,\n nullType,\n isInt,\n batchFromColumns,\n serializeBatch,\n deserializeBatch,\n readCanonicalValue,\n} from \"../../arrow/index.js\";\nimport { codecFor } from \"../../arrow/codec/registry.js\";\nimport { Arguments } from \"../../arguments/arguments.js\";\n\nexport function serializeArguments(args: Arguments): Uint8Array {\n // Arguments are serialized as a single-row batch with one \"args\" Struct column.\n // The struct has fields: \"positional_0\", \"positional_1\", ... and \"named_<name>\".\n\n const structFields: VgiField[] = [];\n const structValues: Record<string, any> = {};\n\n for (let i = 0; i < args.positional.length; i++) {\n const val = args.positional[i];\n const fieldName = `positional_${i}`;\n structFields.push(field(fieldName, inferScalarType(val), true));\n structValues[fieldName] = val;\n }\n\n for (const [name, val] of args.named) {\n const fieldName = `named_${name}`;\n structFields.push(field(fieldName, inferScalarType(val), true));\n structValues[fieldName] = val;\n }\n\n const structType = makeStruct(structFields);\n const sch = makeSchema([field(\"args\", structType, true)]);\n\n // Coerce JS numbers to BigInt for Int64 children — both backends require\n // BigInt at 64-bit width.\n const structRow: Record<string, any> = {};\n for (const f of structFields) {\n let val = structValues[f.name];\n if (isInt(f.type) && (f.type as any).bitWidth === 64 && typeof val === \"number\") {\n val = BigInt(val);\n }\n structRow[f.name] = val;\n }\n\n const batch = batchFromColumns({ args: [structRow] }, sch);\n return serializeBatch(batch);\n}\n\nfunction inferScalarType(val: any): VgiDataType {\n if (val === null || val === undefined) return nullType();\n if (typeof val === \"string\") return utf8();\n if (typeof val === \"boolean\") return bool();\n if (typeof val === \"number\") return int64();\n if (typeof val === \"bigint\") return int64();\n if (val instanceof Uint8Array || val instanceof ArrayBuffer) return binary();\n return utf8(); // fallback (e.g. an Int32Array INTERVAL quad -> stringified)\n}\n\nexport function deserializeArguments(bytes: Uint8Array): Arguments {\n if (!bytes || bytes.length === 0) return new Arguments();\n\n // Ensure we have a clean copy (not a view into a larger buffer)\n const cleanBytes = bytes.byteOffset !== 0 || bytes.byteLength !== bytes.buffer.byteLength\n ? new Uint8Array(bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength))\n : bytes;\n\n const batch = deserializeBatch(cleanBytes);\n const positional: any[] = [];\n const named = new Map<string, any>();\n\n if (batch.numRows === 0) {\n return new Arguments(positional, named);\n }\n\n // Arguments are serialized as a single \"args\" Struct column.\n // The struct has fields named \"positional_0\", \"positional_1\", etc.\n // for positional args, and \"named_<name>\" for named args.\n const argsCol = batch.getChild(\"args\");\n if (argsCol) {\n // Extract per-positional types from the struct's children\n const argsStructType = argsCol.type as any;\n const structSchema = argsStructType.children\n ? makeSchema(argsStructType.children)\n : batch.schema;\n\n // Read the args struct via the codec/canonical path (backend-agnostic,\n // lossless, RICH) — surfaces as a plain { field: value } object.\n const structType = argsCol.type as unknown as VgiDataType;\n const structVal = codecFor(structType).canonicalToRich(\n readCanonicalValue(structType, argsCol, 0),\n ) as any;\n if (structVal && typeof structVal === \"object\") {\n const dict: Record<string, any> = structVal;\n for (const [key, value] of Object.entries(dict)) {\n if (key.startsWith(\"positional_\")) {\n const idx = parseInt(key.slice(\"positional_\".length), 10);\n while (positional.length <= idx) positional.push(null);\n positional[idx] = value;\n } else if (key.startsWith(\"named_\")) {\n const name = key.slice(\"named_\".length);\n named.set(name, value);\n }\n }\n }\n return new Arguments(positional, named, structSchema);\n }\n\n // Fallback: flat columns (legacy format - each field is a column)\n const sch = batch.schema;\n if (!sch || sch.fields.length === 0) {\n return new Arguments(positional, named);\n }\n\n for (const f of sch.fields) {\n const col = batch.getChild(f.name);\n const ftype = f.type as unknown as VgiDataType;\n const val = col\n ? codecFor(ftype).canonicalToRich(readCanonicalValue(ftype, col, 0))\n : null;\n\n if (f.name.startsWith(\"positional_\")) {\n const idx = parseInt(f.name.slice(\"positional_\".length), 10);\n while (positional.length <= idx) positional.push(null);\n positional[idx] = val;\n } else if (f.name.startsWith(\"named_\")) {\n const name = f.name.slice(\"named_\".length);\n named.set(name, val);\n } else {\n // Try numeric field name (old format)\n const metadata = f.metadata;\n const isNamed = metadata?.get?.(\"vgi_arg\") === \"named\";\n if (isNamed) {\n named.set(f.name, val);\n } else {\n const idx = parseInt(f.name, 10);\n if (!isNaN(idx)) {\n while (positional.length <= idx) positional.push(null);\n positional[idx] = val;\n }\n }\n }\n }\n\n return new Arguments(positional, named, sch);\n}\n",
|
|
40
40
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Arguments container for VGI function invocations.\n// Holds positional and named scalar values from DuckDB.\n\nimport type { VgiSchema } from \"../arrow/index.js\";\nimport { safeNumber } from \"../util/arrow/index.js\";\n\nexport class Arguments {\n readonly positional: (any | null)[];\n readonly named: Map<string, any | null>;\n /** Schema of the arguments batch (preserves original Arrow types). */\n readonly argumentsSchema: VgiSchema | null;\n\n constructor(\n positional: (any | null)[] = [],\n named: Map<string, any | null> = new Map(),\n argumentsSchema: VgiSchema | null = null,\n ) {\n this.positional = positional;\n this.named = named;\n this.argumentsSchema = argumentsSchema;\n }\n\n /**\n * Get an argument by position (number) or name (string).\n */\n get(position: number | string, defaultValue?: any): any {\n if (typeof position === \"number\") {\n if (position < this.positional.length) {\n const val = this.positional[position];\n if (val === null || val === undefined) {\n return defaultValue !== undefined ? defaultValue : null;\n }\n return unwrapScalar(val);\n }\n if (defaultValue !== undefined) return defaultValue;\n throw new Error(`Positional argument ${position} not found`);\n }\n if (this.named.has(position)) {\n const val = this.named.get(position);\n if (val === null || val === undefined) {\n return defaultValue !== undefined ? defaultValue : null;\n }\n return unwrapScalar(val);\n }\n if (defaultValue !== undefined) return defaultValue;\n throw new Error(`Named argument '${position}' not found`);\n }\n\n get length(): number {\n return this.positional.length;\n }\n}\n\n/**\n * Unwrap an Arrow Scalar to a plain JS value.\n */\nfunction unwrapScalar(val: any): any {\n if (val === null || val === undefined) return null;\n // If it's already a primitive, return it\n if (typeof val !== \"object\") return val;\n // Arrow Scalar objects have a valueOf() method\n if (typeof val.valueOf === \"function\") {\n let v: any;\n try {\n v = val.valueOf();\n } catch {\n // valueOf() may throw for large Decimal values (e.g. HUGEINT)\n return val;\n }\n // BigInt -> Number for safe integers\n if (typeof v === \"bigint\") {\n if (v >= Number.MIN_SAFE_INTEGER && v <= Number.MAX_SAFE_INTEGER) {\n return Number(v);\n }\n return v;\n }\n return v;\n }\n return val;\n}\n",
|
|
41
|
-
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// BindRequest / BindResponse wire serialization. Schemas mirror Python's\n// ArrowSerializableDataclass field declaration order so the format is\n// positional-compatible with the Python reader.\n\nimport { type VgiSchema, schema, type VgiField, field, type VgiBatch, type VgiDataType, utf8, binary, bool, list, struct } from \"../../arrow/index.js\";\nimport { Arguments } from \"../../arguments/arguments.js\";\nimport { FunctionType } from \"../../types.js\";\nimport type { BindRequest, BindResponse, CopyFromContext, CopyToContext } from \"../types.js\";\nimport {\n serializeSchema,\n deserializeSchema,\n serializeBatch,\n deserializeBatch,\n} from \"../../util/arrow/index.js\";\nimport { toUint8Array, buildSingleRowBatch } from \"./shared.js\";\nimport { serializeArguments, deserializeArguments } from \"./arguments.js\";\n\nconst BIND_REQUEST_SCHEMA = schema([\n field(\"function_name\", utf8(), false),\n field(\"arguments\", binary(), false),\n field(\"function_type\", utf8(), false),\n field(\"input_schema\", binary(), true),\n field(\"settings\", binary(), true),\n field(\"secrets\", binary(), true),\n field(\"attach_opaque_data\", binary(), true),\n field(\"transaction_opaque_data\", binary(), true),\n field(\"resolved_secrets_provided\", bool(), false),\n // Time travel AT clause (additive, nullable, name-keyed -> wire-compatible).\n // Both null when the scan has no AT clause. See BindRequest.at_unit.\n field(\"at_unit\", utf8(), true),\n field(\"at_value\", utf8(), true),\n]);\n\n// COPY ... FROM context — a nullable nested struct<format, file_path,\n// expected_schema>. Byte-for-byte the shape the C++ extension builds in\n// vgi_rpc_types.cpp (BuildBindRequest's copy_from branch) and the Python\n// BindRequest.copy_from field. Only appended to the serialized batch when the\n// bind actually opens a COPY scan, so ordinary scans keep the legacy wire shape.\nconst COPY_FROM_STRUCT_TYPE = struct([\n field(\"format\", utf8(), false),\n field(\"file_path\", utf8(), false),\n field(\"expected_schema\", binary(), false),\n]);\nconst COPY_FROM_FIELD = field(\"copy_from\", COPY_FROM_STRUCT_TYPE, true);\n\n// COPY ... TO context — a nullable nested struct<format, file_path>.\n// Byte-for-byte the shape the C++ extension builds in vgi_rpc_types.cpp\n// (BuildBindRequest's copy_to branch) and the Python BindRequest.copy_to field.\n// Only appended to the serialized batch when the bind actually opens a COPY TO\n// sink, so ordinary scans keep the legacy wire shape.\nconst COPY_TO_STRUCT_TYPE = struct([\n field(\"format\", utf8(), false),\n field(\"file_path\", utf8(), false),\n]);\nconst COPY_TO_FIELD = field(\"copy_to\", COPY_TO_STRUCT_TYPE, true);\n\nconst BIND_RESPONSE_SCHEMA = schema([\n field(\"output_schema\", binary(), false),\n field(\"opaque_data\", binary(), true),\n field(\"lookup_secret_types\", list(field(\"item\", utf8(), true)), false),\n field(\"lookup_scopes\", list(field(\"item\", utf8(), true)), false),\n field(\"lookup_names\", list(field(\"item\", utf8(), true)), false),\n]);\n\nexport function serializeBindRequest(req: BindRequest): VgiBatch {\n const row: Record<string, any> = {\n function_name: req.function_name,\n arguments: serializeArguments(req.arguments),\n function_type: req.function_type,\n input_schema: req.input_schema ? serializeSchema(req.input_schema) : null,\n settings: req.settings ? serializeBatch(req.settings) : null,\n secrets: req.secrets ? serializeBatch(req.secrets) : null,\n attach_opaque_data: req.attach_opaque_data ?? null,\n transaction_opaque_data: req.transaction_opaque_data ?? null,\n resolved_secrets_provided: req.resolved_secrets_provided ?? false,\n at_unit: req.at_unit ?? null,\n at_value: req.at_value ?? null,\n };\n // Append the copy_from / copy_to struct columns only for COPY scans/sinks, so\n // non-COPY binds serialize to the exact legacy shape (fields matched by name\n // on the reader). At most one is present in practice, but both are handled\n // generically so the wire stays additive either way.\n const extraFields: VgiField[] = [];\n if (req.copy_from) {\n extraFields.push(COPY_FROM_FIELD);\n row.copy_from = {\n format: req.copy_from.format,\n file_path: req.copy_from.file_path,\n expected_schema: serializeSchema(req.copy_from.expected_schema),\n };\n }\n if (req.copy_to) {\n extraFields.push(COPY_TO_FIELD);\n row.copy_to = {\n format: req.copy_to.format,\n file_path: req.copy_to.file_path,\n };\n }\n if (extraFields.length > 0) {\n const schemaWithCopy = schema([...BIND_REQUEST_SCHEMA.fields, ...extraFields]);\n return buildSingleRowBatch(schemaWithCopy, row);\n }\n return buildSingleRowBatch(BIND_REQUEST_SCHEMA, row);\n}\n\nfunction parseCopyFromContext(raw: any): CopyFromContext | null {\n // The struct column decodes to a plain { format, file_path, expected_schema }\n // object via the codec/canonical path (expected_schema is binary -> Uint8Array).\n if (raw == null) return null;\n const format = raw.format;\n const filePath = raw.file_path;\n const schemaBytes = raw.expected_schema;\n if (format == null || filePath == null || schemaBytes == null) return null;\n return {\n format: String(format),\n file_path: String(filePath),\n expected_schema: deserializeSchema(toUint8Array(schemaBytes)),\n };\n}\n\nfunction parseCopyToContext(raw: any): CopyToContext | null {\n // The struct column decodes to a plain { format, file_path } object via the\n // codec/canonical path.\n if (raw == null) return null;\n const format = raw.format;\n const filePath = raw.file_path;\n if (format == null || filePath == null) return null;\n return { format: String(format), file_path: String(filePath) };\n}\n\nexport function deserializeBindRequest(\n params: Record<string, any>\n): BindRequest {\n // params come from the RPC layer - already extracted from a single-row batch\n // arguments may be null/undefined when DuckDB sends empty args\n const args = params.arguments\n ? deserializeArguments(toUint8Array(params.arguments))\n : new Arguments();\n\n // function_type might be a string directly or enum name\n let functionType: FunctionType;\n const ftStr = String(params.function_type);\n if (ftStr === \"scalar\" || ftStr === \"SCALAR\") {\n functionType = FunctionType.SCALAR;\n } else if (ftStr === \"table\" || ftStr === \"TABLE\") {\n functionType = FunctionType.TABLE;\n } else if (ftStr === \"aggregate\" || ftStr === \"AGGREGATE\") {\n functionType = FunctionType.AGGREGATE;\n } else {\n functionType = ftStr as FunctionType;\n }\n\n return {\n function_name: params.function_name,\n arguments: args,\n function_type: functionType,\n input_schema: params.input_schema\n ? deserializeSchema(toUint8Array(params.input_schema))\n : null,\n settings: params.settings\n ? deserializeBatch(toUint8Array(params.settings))\n : null,\n secrets: params.secrets\n ? deserializeBatch(toUint8Array(params.secrets))\n : null,\n attach_opaque_data: params.attach_opaque_data ? toUint8Array(params.attach_opaque_data) : null,\n transaction_opaque_data: params.transaction_opaque_data\n ? toUint8Array(params.transaction_opaque_data)\n : null,\n resolved_secrets_provided: params.resolved_secrets_provided ?? false,\n // Empty string -> null (matches the C++ BuildBindRequest convention).\n at_unit: params.at_unit ? String(params.at_unit) : null,\n at_value: params.at_value ? String(params.at_value) : null,\n // COPY ... FROM context — absent for ordinary scans (params.copy_from\n // undefined -> null). The struct column decodes to a plain object.\n copy_from: parseCopyFromContext(params.copy_from),\n // COPY ... TO context — absent for ordinary scans / COPY FROM.\n copy_to: parseCopyToContext(params.copy_to),\n };\n}\n\nexport function serializeBindResponse(\n resp: BindResponse\n): Record<string, any> {\n return {\n output_schema: serializeSchema(resp.output_schema),\n opaque_data: resp.opaque_data ?? null,\n lookup_secret_types: resp.lookup_secret_types ?? [],\n lookup_scopes: resp.lookup_scopes ?? [],\n lookup_names: resp.lookup_names ?? [],\n };\n}\n\nexport function deserializeBindResponse(\n params: Record<string, any>\n): BindResponse {\n const toStrArray = (val: any): string[] => {\n if (!val) return [];\n const arr = Array.isArray(val) ? val : [...val];\n return arr.filter((v: any) => v != null).map(String);\n };\n return {\n output_schema: deserializeSchema(toUint8Array(params.output_schema)),\n opaque_data: params.opaque_data ? toUint8Array(params.opaque_data) : null,\n lookup_secret_types: toStrArray(params.lookup_secret_types),\n lookup_scopes: toStrArray(params.lookup_scopes),\n lookup_names: toStrArray(params.lookup_names),\n };\n}\n\nexport { BIND_REQUEST_SCHEMA, BIND_RESPONSE_SCHEMA };\n",
|
|
41
|
+
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// BindRequest / BindResponse wire serialization. Schemas mirror Python's\n// ArrowSerializableDataclass field declaration order so the format is\n// positional-compatible with the Python reader.\n\nimport { type VgiSchema, schema, type VgiField, field, type VgiBatch, type VgiDataType, utf8, binary, bool, list, struct } from \"../../arrow/index.js\";\nimport { Arguments } from \"../../arguments/arguments.js\";\nimport { FunctionType } from \"../../types.js\";\nimport type { BindRequest, BindResponse, CopyFromContext, CopyToContext } from \"../types.js\";\nimport {\n serializeSchema,\n deserializeSchema,\n serializeBatch,\n deserializeBatch,\n} from \"../../util/arrow/index.js\";\nimport { toUint8Array, buildSingleRowBatch } from \"./shared.js\";\nimport { serializeArguments, deserializeArguments } from \"./arguments.js\";\n\nconst BIND_REQUEST_SCHEMA = schema([\n field(\"function_name\", utf8(), false),\n field(\"arguments\", binary(), false),\n field(\"function_type\", utf8(), false),\n field(\"input_schema\", binary(), true),\n field(\"settings\", binary(), true),\n field(\"secrets\", binary(), true),\n field(\"attach_opaque_data\", binary(), true),\n field(\"transaction_opaque_data\", binary(), true),\n field(\"resolved_secrets_provided\", bool(), false),\n // Time travel AT clause (additive, nullable, name-keyed -> wire-compatible).\n // Both null when the scan has no AT clause. See BindRequest.at_unit.\n field(\"at_unit\", utf8(), true),\n field(\"at_value\", utf8(), true),\n // Catalog schema owning the function. A worker may register one name in\n // several schemas, so the bare name is not a unique key — resolution is by\n // (schema_name, function_name). Null for callers with no catalog context.\n field(\"schema_name\", utf8(), true),\n]);\n\n// COPY ... FROM context — a nullable nested struct<format, file_path,\n// expected_schema>. Byte-for-byte the shape the C++ extension builds in\n// vgi_rpc_types.cpp (BuildBindRequest's copy_from branch) and the Python\n// BindRequest.copy_from field. Only appended to the serialized batch when the\n// bind actually opens a COPY scan, so ordinary scans keep the legacy wire shape.\nconst COPY_FROM_STRUCT_TYPE = struct([\n field(\"format\", utf8(), false),\n field(\"file_path\", utf8(), false),\n field(\"expected_schema\", binary(), false),\n]);\nconst COPY_FROM_FIELD = field(\"copy_from\", COPY_FROM_STRUCT_TYPE, true);\n\n// COPY ... TO context — a nullable nested struct<format, file_path>.\n// Byte-for-byte the shape the C++ extension builds in vgi_rpc_types.cpp\n// (BuildBindRequest's copy_to branch) and the Python BindRequest.copy_to field.\n// Only appended to the serialized batch when the bind actually opens a COPY TO\n// sink, so ordinary scans keep the legacy wire shape.\nconst COPY_TO_STRUCT_TYPE = struct([\n field(\"format\", utf8(), false),\n field(\"file_path\", utf8(), false),\n]);\nconst COPY_TO_FIELD = field(\"copy_to\", COPY_TO_STRUCT_TYPE, true);\n\nconst BIND_RESPONSE_SCHEMA = schema([\n field(\"output_schema\", binary(), false),\n field(\"opaque_data\", binary(), true),\n field(\"lookup_secret_types\", list(field(\"item\", utf8(), true)), false),\n field(\"lookup_scopes\", list(field(\"item\", utf8(), true)), false),\n field(\"lookup_names\", list(field(\"item\", utf8(), true)), false),\n]);\n\nexport function serializeBindRequest(req: BindRequest): VgiBatch {\n const row: Record<string, any> = {\n function_name: req.function_name,\n arguments: serializeArguments(req.arguments),\n function_type: req.function_type,\n input_schema: req.input_schema ? serializeSchema(req.input_schema) : null,\n settings: req.settings ? serializeBatch(req.settings) : null,\n secrets: req.secrets ? serializeBatch(req.secrets) : null,\n attach_opaque_data: req.attach_opaque_data ?? null,\n transaction_opaque_data: req.transaction_opaque_data ?? null,\n resolved_secrets_provided: req.resolved_secrets_provided ?? false,\n at_unit: req.at_unit ?? null,\n at_value: req.at_value ?? null,\n schema_name: req.schema_name ?? null,\n };\n // Append the copy_from / copy_to struct columns only for COPY scans/sinks, so\n // non-COPY binds serialize to the exact legacy shape (fields matched by name\n // on the reader). At most one is present in practice, but both are handled\n // generically so the wire stays additive either way.\n const extraFields: VgiField[] = [];\n if (req.copy_from) {\n extraFields.push(COPY_FROM_FIELD);\n row.copy_from = {\n format: req.copy_from.format,\n file_path: req.copy_from.file_path,\n expected_schema: serializeSchema(req.copy_from.expected_schema),\n };\n }\n if (req.copy_to) {\n extraFields.push(COPY_TO_FIELD);\n row.copy_to = {\n format: req.copy_to.format,\n file_path: req.copy_to.file_path,\n };\n }\n if (extraFields.length > 0) {\n const schemaWithCopy = schema([...BIND_REQUEST_SCHEMA.fields, ...extraFields]);\n return buildSingleRowBatch(schemaWithCopy, row);\n }\n return buildSingleRowBatch(BIND_REQUEST_SCHEMA, row);\n}\n\nfunction parseCopyFromContext(raw: any): CopyFromContext | null {\n // The struct column decodes to a plain { format, file_path, expected_schema }\n // object via the codec/canonical path (expected_schema is binary -> Uint8Array).\n if (raw == null) return null;\n const format = raw.format;\n const filePath = raw.file_path;\n const schemaBytes = raw.expected_schema;\n if (format == null || filePath == null || schemaBytes == null) return null;\n return {\n format: String(format),\n file_path: String(filePath),\n expected_schema: deserializeSchema(toUint8Array(schemaBytes)),\n };\n}\n\nfunction parseCopyToContext(raw: any): CopyToContext | null {\n // The struct column decodes to a plain { format, file_path } object via the\n // codec/canonical path.\n if (raw == null) return null;\n const format = raw.format;\n const filePath = raw.file_path;\n if (format == null || filePath == null) return null;\n return { format: String(format), file_path: String(filePath) };\n}\n\nexport function deserializeBindRequest(\n params: Record<string, any>\n): BindRequest {\n // params come from the RPC layer - already extracted from a single-row batch\n // arguments may be null/undefined when DuckDB sends empty args\n const args = params.arguments\n ? deserializeArguments(toUint8Array(params.arguments))\n : new Arguments();\n\n // function_type might be a string directly or enum name\n let functionType: FunctionType;\n const ftStr = String(params.function_type);\n if (ftStr === \"scalar\" || ftStr === \"SCALAR\") {\n functionType = FunctionType.SCALAR;\n } else if (ftStr === \"table\" || ftStr === \"TABLE\") {\n functionType = FunctionType.TABLE;\n } else if (ftStr === \"aggregate\" || ftStr === \"AGGREGATE\") {\n functionType = FunctionType.AGGREGATE;\n } else {\n functionType = ftStr as FunctionType;\n }\n\n return {\n function_name: params.function_name,\n arguments: args,\n function_type: functionType,\n input_schema: params.input_schema\n ? deserializeSchema(toUint8Array(params.input_schema))\n : null,\n settings: params.settings\n ? deserializeBatch(toUint8Array(params.settings))\n : null,\n secrets: params.secrets\n ? deserializeBatch(toUint8Array(params.secrets))\n : null,\n attach_opaque_data: params.attach_opaque_data ? toUint8Array(params.attach_opaque_data) : null,\n transaction_opaque_data: params.transaction_opaque_data\n ? toUint8Array(params.transaction_opaque_data)\n : null,\n resolved_secrets_provided: params.resolved_secrets_provided ?? false,\n // Empty string -> null (matches the C++ BuildBindRequest convention).\n at_unit: params.at_unit ? String(params.at_unit) : null,\n at_value: params.at_value ? String(params.at_value) : null,\n // Empty string -> null, same convention as at_unit/at_value.\n schema_name: params.schema_name ? String(params.schema_name) : null,\n // COPY ... FROM context — absent for ordinary scans (params.copy_from\n // undefined -> null). The struct column decodes to a plain object.\n copy_from: parseCopyFromContext(params.copy_from),\n // COPY ... TO context — absent for ordinary scans / COPY FROM.\n copy_to: parseCopyToContext(params.copy_to),\n };\n}\n\nexport function serializeBindResponse(\n resp: BindResponse\n): Record<string, any> {\n return {\n output_schema: serializeSchema(resp.output_schema),\n opaque_data: resp.opaque_data ?? null,\n lookup_secret_types: resp.lookup_secret_types ?? [],\n lookup_scopes: resp.lookup_scopes ?? [],\n lookup_names: resp.lookup_names ?? [],\n };\n}\n\nexport function deserializeBindResponse(\n params: Record<string, any>\n): BindResponse {\n const toStrArray = (val: any): string[] => {\n if (!val) return [];\n const arr = Array.isArray(val) ? val : [...val];\n return arr.filter((v: any) => v != null).map(String);\n };\n return {\n output_schema: deserializeSchema(toUint8Array(params.output_schema)),\n opaque_data: params.opaque_data ? toUint8Array(params.opaque_data) : null,\n lookup_secret_types: toStrArray(params.lookup_secret_types),\n lookup_scopes: toStrArray(params.lookup_scopes),\n lookup_names: toStrArray(params.lookup_names),\n };\n}\n\nexport { BIND_REQUEST_SCHEMA, BIND_RESPONSE_SCHEMA };\n",
|
|
42
42
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Shared helpers for protocol wire serialization.\n\nimport {\n type VgiSchema,\n type VgiBatch,\n isInt,\n batchFromColumns,\n} from \"../../arrow/index.js\";\nimport { toUint8Array as toUint8ArrayBase } from \"../../util/bytes.js\";\n\n/**\n * Coerce a wire value (string / Uint8Array / Buffer / etc.) to a Uint8Array.\n * Throws when the input is non-null but produces zero bytes — that signals a\n * truly unsupported shape, distinct from a legitimate empty Uint8Array.\n */\nexport function toUint8Array(val: any): Uint8Array {\n if (typeof val === \"string\") return new TextEncoder().encode(val);\n const result = toUint8ArrayBase(val);\n if (result.length === 0 && val != null) {\n throw new Error(`Cannot convert ${typeof val} to Uint8Array`);\n }\n return result;\n}\n\n/**\n * Build a single-row RecordBatch from a {fieldName: value} dict matching the\n * given schema. Auto-coerces JS numbers to BigInt for Int64 fields.\n */\nexport function buildSingleRowBatch(\n schema: VgiSchema,\n values: Record<string, any>,\n): VgiBatch {\n // Build column dict, coercing Int64 numbers to BigInt where the schema\n // declares one — vectorFromArray/columnFromArray rejects plain Number for\n // 64-bit ints under both backends.\n const cols: Record<string, any[]> = {};\n for (const f of schema.fields) {\n let val = values[f.name];\n if (isInt(f.type) && (f.type as any).bitWidth === 64 && typeof val === \"number\") {\n val = BigInt(val);\n }\n cols[f.name] = [val];\n }\n return batchFromColumns(cols, schema);\n}\n",
|
|
43
43
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// InitRequest / GlobalInitResponse wire serialization. Schema mirrors\n// vgi-python's InitRequest dataclass — outer wire shape:\n// bind_call: binary (nested IPC of BindRequest)\n// output_schema: binary (nullable serialized Schema)\n// bind_opaque_data: binary (nullable)\n// projection_ids: list<int64> (nullable)\n// pushdown_filters: large_binary (nullable) — nested IPC of filter batch\n// join_keys: list<large_binary> (non-null list of IPC-serialized batches)\n// phase: utf8 (nullable) — dictionary(int16,string) in Python\n// execution_id: binary (nullable)\n// init_opaque_data: binary (nullable)\n// Order pushdown hints + TABLESAMPLE pushdown hints follow.\n\nimport {\n type VgiBatch,\n schema as makeSchema,\n field,\n utf8,\n binary,\n int64,\n float64,\n list,\n} from \"../../arrow/index.js\";\n// RecordBatch type alias kept for the joinKeys closure below — it's a runtime\n// value that lands in BindRequest, not a wire shape.\ntype RecordBatch = VgiBatch;\nimport { TableInOutPhase } from \"../../types.js\";\nimport {\n OrderByDirection,\n OrderByNullOrder,\n type InitRequest,\n type GlobalInitResponse,\n} from \"../types.js\";\nimport {\n serializeSchema,\n deserializeSchema,\n serializeBatch,\n deserializeBatch,\n batchToScalarDict,\n} from \"../../util/arrow/index.js\";\nimport { toUint8Array, buildSingleRowBatch } from \"./shared.js\";\nimport { serializeBindRequest, deserializeBindRequest } from \"./bind.js\";\nimport { decodeDictValue } from \"../../util/arrow/index.js\";\n\nconst INIT_REQUEST_SCHEMA = makeSchema([\n field(\"bind_call\", binary(), false),\n field(\"output_schema\", binary(), false),\n field(\"bind_opaque_data\", binary(), true),\n field(\"projection_ids\", list(field(\"item\", int64(), false)), true),\n field(\"pushdown_filters\", binary(), true),\n field(\"join_keys\", list(field(\"item\", binary(), true)), false),\n field(\"phase\", utf8(), true),\n field(\"execution_id\", binary(), true),\n field(\"init_opaque_data\", binary(), true),\n // Per-substream identity for parallel streaming table-in-out (client-minted,\n // stable across this substream's init/process/finalize; null when absent).\n field(\"substream_id\", binary(), true),\n // Order pushdown hints from DuckDB's RowGroupPruner (all null when no hint).\n field(\"order_by_column_name\", utf8(), true),\n field(\"order_by_direction\", utf8(), true),\n field(\"order_by_null_order\", utf8(), true),\n field(\"order_by_limit\", int64(), true),\n // TABLESAMPLE pushdown hints from DuckDB's SamplingPushdown optimizer.\n field(\"tablesample_percentage\", float64(), true),\n field(\"tablesample_seed\", int64(), true),\n // Buffered-table finalize stream identifier — C++ appends this last.\n field(\"finalize_state_id\", binary(), true),\n]);\n\nconst GLOBAL_INIT_RESPONSE_SCHEMA = makeSchema([\n field(\"execution_id\", binary(), false),\n field(\"opaque_data\", binary(), true),\n field(\"max_workers\", int64(), false),\n]);\n\nexport function serializeInitRequest(req: InitRequest): VgiBatch {\n const bindCallBatch = serializeBindRequest(req.bind_call);\n const bindCallBytes = serializeBatch(bindCallBatch);\n\n const row: Record<string, any> = {\n bind_call: bindCallBytes,\n output_schema: serializeSchema(req.output_schema),\n bind_opaque_data: req.bind_opaque_data ?? null,\n projection_ids: req.projection_ids?.map((n) => BigInt(n)) ?? null,\n pushdown_filters: req.pushdown_filters\n ? serializeBatch(req.pushdown_filters)\n : null,\n join_keys: (req.join_keys ?? []).map((b) => serializeBatch(b)),\n phase: req.phase ?? null,\n execution_id: req.execution_id ?? null,\n init_opaque_data: req.init_opaque_data ?? null,\n substream_id: req.substream_id ?? null,\n order_by_column_name: req.order_by_column_name ?? null,\n order_by_direction: req.order_by_direction ?? null,\n order_by_null_order: req.order_by_null_order ?? null,\n order_by_limit: req.order_by_limit ?? null,\n tablesample_percentage: req.tablesample_percentage ?? null,\n tablesample_seed: req.tablesample_seed ?? null,\n finalize_state_id: req.finalize_state_id ?? null,\n };\n return buildSingleRowBatch(INIT_REQUEST_SCHEMA, row);\n}\n\nexport function deserializeInitRequest(\n params: Record<string, any>\n): InitRequest {\n const bindCallBytes = toUint8Array(params.bind_call);\n const bindCallBatch = deserializeBatch(bindCallBytes);\n // Extract the single row as params via the codec/canonical path.\n const bindParams = batchToScalarDict(bindCallBatch);\n\n const bindCall = deserializeBindRequest(bindParams);\n\n // Parse projection_ids - may be a list/array of Int32\n let projectionIds: number[] | null = null;\n if (params.projection_ids != null) {\n const raw = params.projection_ids;\n if (Array.isArray(raw)) {\n projectionIds = raw.map(Number);\n } else if (raw && typeof raw[Symbol.iterator] === \"function\") {\n projectionIds = [...raw].map(Number);\n }\n }\n\n // Parse phase. DuckDB sends this as a Dictionary on the wire; vgi-rpc's\n // row extractor doesn't auto-decode dictionaries, so values come in as raw\n // Arrow Data objects. decodeDictValue resolves them to the underlying string.\n let phase: TableInOutPhase | null = null;\n const phaseRaw = decodeDictValue(params.phase);\n if (phaseRaw != null) {\n const phaseStr = String(phaseRaw);\n if (phaseStr === \"INPUT\") {\n phase = TableInOutPhase.INPUT;\n } else if (phaseStr === \"FINALIZE\") {\n phase = TableInOutPhase.FINALIZE;\n } else if (phaseStr === \"TABLE_BUFFERING\") {\n phase = TableInOutPhase.TABLE_BUFFERING;\n } else if (phaseStr === \"TABLE_BUFFERING_FINALIZE\") {\n phase = TableInOutPhase.TABLE_BUFFERING_FINALIZE;\n }\n }\n\n // Parse join_keys - list of IPC-serialized RecordBatches\n const joinKeys: RecordBatch[] = [];\n if (params.join_keys != null) {\n const raw = params.join_keys;\n const iter: Iterable<any> = Array.isArray(raw)\n ? raw\n : typeof raw[Symbol.iterator] === \"function\"\n ? raw\n : [];\n for (const entry of iter) {\n if (entry == null) continue;\n try {\n joinKeys.push(deserializeBatch(toUint8Array(entry)));\n } catch {\n // Skip malformed batches rather than failing init.\n }\n }\n }\n\n return {\n bind_call: bindCall,\n output_schema: deserializeSchema(toUint8Array(params.output_schema)),\n bind_opaque_data: params.bind_opaque_data\n ? toUint8Array(params.bind_opaque_data)\n : null,\n projection_ids: projectionIds,\n pushdown_filters: params.pushdown_filters\n ? deserializeBatch(toUint8Array(params.pushdown_filters))\n : null,\n join_keys: joinKeys,\n phase,\n finalize_state_id: params.finalize_state_id\n ? toUint8Array(params.finalize_state_id)\n : null,\n execution_id: params.execution_id\n ? toUint8Array(params.execution_id)\n : null,\n init_opaque_data: params.init_opaque_data\n ? toUint8Array(params.init_opaque_data)\n : null,\n substream_id: params.substream_id\n ? toUint8Array(params.substream_id)\n : null,\n order_by_column_name: parseEnum(decodeDictValue(params.order_by_column_name)) ?? null,\n order_by_direction: parseDirection(decodeDictValue(params.order_by_direction)),\n order_by_null_order: parseNullOrder(decodeDictValue(params.order_by_null_order)),\n order_by_limit: parseBigInt(params.order_by_limit),\n tablesample_percentage: parseNumber(params.tablesample_percentage),\n tablesample_seed: parseBigInt(params.tablesample_seed),\n };\n}\n\nfunction parseEnum(v: any): string | null {\n if (v === null || v === undefined) return null;\n return String(v);\n}\nfunction parseDirection(v: any): OrderByDirection | null {\n if (v === null || v === undefined) return null;\n const s = String(v);\n if (s === \"ASC\") return OrderByDirection.ASC;\n if (s === \"DESC\") return OrderByDirection.DESC;\n return null;\n}\nfunction parseNullOrder(v: any): OrderByNullOrder | null {\n if (v === null || v === undefined) return null;\n const s = String(v);\n if (s === \"NULLS_FIRST\") return OrderByNullOrder.NULLS_FIRST;\n if (s === \"NULLS_LAST\") return OrderByNullOrder.NULLS_LAST;\n return null;\n}\nfunction parseBigInt(v: any): bigint | null {\n if (v === null || v === undefined) return null;\n if (typeof v === \"bigint\") return v;\n if (typeof v === \"number\") return BigInt(v);\n try {\n return BigInt(String(v));\n } catch {\n return null;\n }\n}\nfunction parseNumber(v: any): number | null {\n if (v === null || v === undefined) return null;\n if (typeof v === \"number\") return v;\n if (typeof v === \"bigint\") return Number(v);\n const n = Number(v);\n return Number.isNaN(n) ? null : n;\n}\n\nexport function serializeGlobalInitResponse(\n resp: GlobalInitResponse\n): Record<string, any> {\n return {\n execution_id: resp.execution_id,\n opaque_data: resp.opaque_data ?? null,\n max_workers: resp.max_workers,\n };\n}\n\nexport function deserializeGlobalInitResponse(\n params: Record<string, any>\n): GlobalInitResponse {\n return {\n execution_id: toUint8Array(params.execution_id),\n opaque_data: params.opaque_data\n ? toUint8Array(params.opaque_data)\n : null,\n max_workers: Number(params.max_workers),\n };\n}\n\nexport { INIT_REQUEST_SCHEMA, GLOBAL_INIT_RESPONSE_SCHEMA };\n",
|
|
44
44
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// TableFunctionCardinalityRequest / TableCardinality wire serialization.\n\nimport { type VgiSchema, schema, type VgiField, field, type VgiDataType, binary, int64 } from \"../../arrow/index.js\";\nimport type { TableFunctionCardinalityRequest, TableCardinality } from \"../types.js\";\nimport { deserializeBatch, batchToScalarDict } from \"../../util/arrow/index.js\";\nimport { toUint8Array } from \"./shared.js\";\nimport { deserializeBindRequest } from \"./bind.js\";\n\nconst TABLE_CARDINALITY_SCHEMA = schema([\n field(\"estimate\", int64(), true),\n field(\"max\", int64(), true),\n]);\n\nconst TABLE_FUNCTION_CARDINALITY_REQUEST_SCHEMA = schema([\n field(\"bind_call\", binary(), false),\n field(\"bind_opaque_data\", binary(), true),\n]);\n\nexport function deserializeCardinalityRequest(\n params: Record<string, any>\n): TableFunctionCardinalityRequest {\n const bindCallBytes = toUint8Array(params.bind_call);\n const bindCallBatch = deserializeBatch(bindCallBytes);\n const bindParams = batchToScalarDict(bindCallBatch);\n const bindCall = deserializeBindRequest(bindParams);\n\n return {\n bind_call: bindCall,\n bind_opaque_data: params.bind_opaque_data\n ? toUint8Array(params.bind_opaque_data)\n : null,\n };\n}\n\nexport function serializeTableCardinality(\n card: TableCardinality\n): Record<string, any> {\n return {\n estimate: card.estimate,\n max: card.max,\n };\n}\n\nexport { TABLE_CARDINALITY_SCHEMA, TABLE_FUNCTION_CARDINALITY_REQUEST_SCHEMA };\n",
|
|
@@ -46,18 +46,18 @@
|
|
|
46
46
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Custom `COPY ... TO` format writer.\n//\n// A CopyToFunction lets a VGI catalog act as a remote sink: the user runs\n// `COPY (query|table) TO 'path' (FORMAT <name>, opt val, ...)` and DuckDB\n// streams the source rows out to the worker, which writes them to a\n// destination. The worker reports the row count; there is no Source phase.\n//\n// Mechanically a COPY-TO writer is a buffered (Sink+Combine) function with NO\n// Source phase — it reuses the entire table_buffering_process /\n// table_buffering_combine machinery on both sides:\n// * `write` is called once per input batch (the buffered process() step,\n// fanned out across DuckDB's sink threads / per-thread workers). Persist the\n// batch to a shard via `params.storage` (execution_id-scoped).\n// * `close` is called exactly once on the coordinator worker (the buffered\n// combine() step, driven by DuckDB's once-only copy_to_finalize). Read the\n// shards back and perform the terminal write+flush+close of the destination.\n//\n// There is no finalize/drain phase, so the destination MUST be fully written and\n// closed inside `close` — a writer that forgets leaves a silent partial file.\n//\n// CROSS-PROCESS INVARIANT: write() and close() may run on different worker\n// processes (pool rotation / HTTP). Any shard state close() needs MUST live in\n// cross-process storage scoped by params.executionId (params.storage), not on\n// `self` / module globals.\n//\n// What makes it a COPY format is twofold:\n// * it sets `meta.copyToFormat` to the SQL FORMAT identifier, and\n// * the catalog advertises it via `copyFromFormats()` (the\n// `catalog_copy_from_formats` RPC returns all directions), so the VGI DuckDB\n// extension registers a DuckDB CopyFunction for it.\n//\n// The destination path + format arrive on the bind through `BindRequest.copy_to`\n// (CopyToContext). The COPY options arrive as the function's normal named\n// arguments. The source schema rides `BindRequest.input_schema`. Mirrors\n// vgi-python's `vgi.copy_to_function.CopyToFunction`.\n\nimport { type VgiSchema, schema, type VgiBatch, type VgiDataType } from \"../arrow/index.js\";\nimport type { BindRequest } from \"../protocol/types.js\";\nimport type { FunctionMeta, FunctionExample } from \"./types.js\";\nimport { safeNumber } from \"../util/arrow/index.js\";\nimport {\n defineTableBufferingFunction,\n type TableBufferingParams,\n type TableBufferingVgiFunction,\n} from \"./table-buffering.js\";\n\n/**\n * A single secret to resolve via the two-phase secret bind, returned from a COPY\n * format's `onSecrets` hook. Mirrors a vgi-python `SecretLookupEntry`.\n */\nexport interface CopySecretLookup {\n /** DuckDB secret type to resolve (e.g. `\"s3\"`, `\"vgi_example\"`). */\n secretType: string;\n /** Optional scope for longest-prefix matching — typically the COPY path. */\n scope?: string;\n /** Optional secret name for name-based lookup. */\n name?: string;\n}\n\n/** Declaration of a single COPY option (a named function argument). */\nexport interface CopyToOption {\n /** Arrow type of the option value (e.g. `utf8()`, `int64()`). */\n type: VgiDataType;\n /** Per-option description, surfaced by `vgi_copy_formats()`. */\n doc?: string;\n /**\n * Default value. When omitted the option is REQUIRED — the worker throws a\n * clear error at COPY bind if the user does not supply it. Mirrors\n * vgi-python's `Arg(..., default=...)` (no default => required).\n */\n default?: unknown;\n /**\n * Optional allowed value set, validated worker-side at bind. Mirrors\n * vgi-python's `Arg(..., choices=[...])`.\n */\n choices?: unknown[];\n /**\n * Optional inclusive lower bound for numeric options, validated worker-side at\n * bind. Mirrors vgi-python's `Arg(..., ge=...)`.\n */\n ge?: number;\n /**\n * Optional inclusive upper bound for numeric options, validated worker-side at\n * bind. Mirrors vgi-python's `Arg(..., le=...)`.\n */\n le?: number;\n}\n\n/** Parameters for the per-batch `write` hook. */\nexport interface CopyToWriteParams<TArgs = Record<string, unknown>> {\n /** One input batch from the COPY source. */\n batch: VgiBatch;\n /** Parsed COPY options (defaults applied). */\n options: TArgs;\n /** Destination path from the `COPY ... TO 'path'` statement. */\n filePath: string;\n /** Full buffering parameters (settings, secrets, storage, executionId). */\n params: TableBufferingParams<TArgs>;\n}\n\n/** Parameters for the terminal `close` hook. */\nexport interface CopyToCloseParams<TArgs = Record<string, unknown>> {\n /** Parsed COPY options (defaults applied). */\n options: TArgs;\n /** Destination path from the `COPY ... TO 'path'` statement. */\n filePath: string;\n /** Full buffering parameters (settings, secrets, storage, executionId). */\n params: TableBufferingParams<TArgs>;\n}\n\nexport interface CopyToFunctionConfig<TArgs = Record<string, unknown>> {\n /** Handler name (the function's registered name; `Meta.name`). */\n name: string;\n /** SQL `FORMAT` identifier users type, e.g. `COPY t TO 'x' (FORMAT myfmt)`. */\n format: string;\n /** Function description (intrinsic documentation; `Meta.description`). */\n description?: string;\n /** Optional free-text comment surfaced by `vgi_copy_formats()`. */\n comment?: string | null;\n /** COPY direction; only `\"to\"` is supported here. */\n direction?: string;\n /**\n * When true, the writer requires rows in source order — discovery advertises\n * `ordered=true` and the extension uses a single-threaded sink\n * (`REGULAR_COPY_TO_FILE`) so one worker receives every batch in source\n * order. Mirrors vgi-python's `Meta.sink_order_dependent`.\n */\n ordered?: boolean;\n /** COPY options, keyed by option name. The `file_path` is NOT an option. */\n options?: Record<string, CopyToOption>;\n categories?: string[];\n tags?: Record<string, string>;\n examples?: FunctionExample[];\n requiredSettings?: string[];\n requiredSecrets?: string[];\n /**\n * Optional secret-bind hook: forward CREATE SECRET credentials for\n * secret-backed cloud writes (S3/GCS/HTTP/…). Called during bind (only on the\n * first pass); return the secrets to resolve — typically scoped by the\n * destination `filePath`. The framework's two-phase secret bind resolves each\n * lookup from the caller's SecretManager and surfaces the resolved values on\n * `params.secrets` at `write`/`close` time. Mirrors vgi-python's\n * `CopyToFunction.on_secrets`.\n */\n onSecrets?: (params: {\n options: TArgs;\n filePath: string;\n bindCall: BindRequest;\n }) => CopySecretLookup[] | void;\n /** Persist one input `batch` to a shard (called per sink batch). */\n write: (params: CopyToWriteParams<TArgs>) => void | Promise<void>;\n /**\n * Write the destination and close it, once (called on the coordinator). Read\n * the shards persisted by `write` and perform the terminal write. Called even\n * for empty input. Return the row count (informational).\n */\n close: (params: CopyToCloseParams<TArgs>) => number | void | Promise<number | void>;\n}\n\n/**\n * Define a custom `COPY ... TO` format writer, returned as a\n * `TableBufferingVgiFunction` (kind `\"table_buffering\"`) carrying the\n * `copyToFormat` metadata marker. Register it in the catalog's function list\n * like any function; the catalog's `copyFromFormats()` introspection picks it\n * up and advertises the format (direction `\"to\"`). The worker's\n * `table_buffering_process` / `table_buffering_combine` RPCs drive write/close.\n */\nexport function defineCopyToFunction<TArgs = Record<string, unknown>>(\n config: CopyToFunctionConfig<TArgs>,\n): TableBufferingVgiFunction {\n const options = config.options ?? {};\n\n // Named-argument types + defaults for the buffering function. COPY passes\n // options by name, so each option is a named argument.\n const namedArgs: Record<string, VgiDataType> = {};\n const argDefaults: Record<string, unknown> = {};\n for (const [name, opt] of Object.entries(options)) {\n namedArgs[name] = opt.type;\n if (\"default\" in opt) argDefaults[name] = opt.default;\n }\n\n // Extract + validate the COPY options. Required options (no default) must be\n // present; `choices` are enforced worker-side. Mirrors copy-from.ts.\n function extractOptions(request: BindRequest): TArgs {\n const args: Record<string, unknown> = {};\n for (const [name, opt] of Object.entries(options)) {\n const hasDefault = \"default\" in opt;\n let val: unknown;\n try {\n val = request.arguments.get(name, hasDefault ? opt.default : undefined);\n } catch {\n val = hasDefault ? opt.default : undefined;\n }\n if (val === undefined || val === null) {\n if (!hasDefault) {\n throw new Error(\n `COPY (FORMAT ${config.format}): missing required option '${name}'`,\n );\n }\n val = opt.default;\n }\n if (typeof val === \"bigint\") val = safeNumber(val);\n if (opt.choices && !opt.choices.includes(val)) {\n throw new Error(\n `COPY (FORMAT ${config.format}): option '${name}' value ${JSON.stringify(val)} ` +\n `is not one of ${JSON.stringify(opt.choices)}`,\n );\n }\n if (typeof val === \"number\") {\n if (opt.ge !== undefined && val < opt.ge) {\n throw new Error(\n `COPY (FORMAT ${config.format}): option '${name}' value ${val} ` +\n `is below the minimum ${opt.ge}`,\n );\n }\n if (opt.le !== undefined && val > opt.le) {\n throw new Error(\n `COPY (FORMAT ${config.format}): option '${name}' value ${val} ` +\n `is above the maximum ${opt.le}`,\n );\n }\n }\n args[name] = val;\n }\n return args as TArgs;\n }\n\n function requireCopyTo(params: TableBufferingParams<TArgs>): string {\n const ct = params.initCall.bind_call.copy_to;\n if (ct == null) {\n throw new Error(\n `${config.name} is a COPY TO format writer; invoke it via ` +\n `COPY <source> TO '<path>' (FORMAT ${config.format}), not as a function.`,\n );\n }\n return ct.file_path;\n }\n\n const func = defineTableBufferingFunction<TArgs, null>({\n name: config.name,\n description: config.description,\n namedArgs,\n argDefaults,\n categories: config.categories,\n tags: config.tags,\n examples: config.examples,\n requiredSettings: config.requiredSettings,\n requiredSecrets: config.requiredSecrets,\n // A sink produces no rows — bind to an empty output schema. Validate the\n // options eagerly so a missing/invalid option fails at COPY bind. If the\n // writer declared an onSecrets hook, forward its requested lookups on the\n // first bind pass so the two-phase secret bind resolves them (the resolved\n // values reach write/close via params.secrets).\n onBind: ({ bindCall, resolvedSecretsProvided }) => {\n const opts = extractOptions(bindCall);\n if (config.onSecrets && !resolvedSecretsProvided) {\n const lookups =\n config.onSecrets({\n options: opts,\n filePath: bindCall.copy_to?.file_path ?? \"\",\n bindCall,\n }) ?? [];\n if (lookups.length > 0) {\n return {\n outputSchema: schema([]),\n lookupSecretTypes: lookups.map((l) => l.secretType),\n lookupScopes: lookups.map((l) => l.scope ?? \"\"),\n lookupNames: lookups.map((l) => l.name ?? \"\"),\n };\n }\n }\n return { outputSchema: schema([]) };\n },\n // SINK: persist one batch to a shard, bucket by execution_id.\n process: async (batch, params) => {\n const opts = extractOptions(params.initCall.bind_call);\n await config.write({\n batch,\n options: opts,\n filePath: requireCopyTo(params),\n params,\n });\n return params.executionId;\n },\n // COMBINE: terminal write+close, once on the coordinator. No finalize ids,\n // so the COPY path never drains output.\n combine: async (_stateIds, params) => {\n const opts = extractOptions(params.initCall.bind_call);\n await config.close({\n options: opts,\n filePath: requireCopyTo(params),\n params,\n });\n return [];\n },\n // Never invoked on the COPY-TO path (combine returns no finalize ids).\n finalize: (_params, _fid, _state, out) => {\n out.finish();\n },\n // Ordered writers need a single-thread sink (REGULAR_COPY_TO_FILE).\n sinkOrderDependent: config.ordered === true,\n });\n\n // Decorate the function's metadata with the COPY-TO format markers + attach\n // per-option docs to the argument specs so `vgi_copy_formats()` surfaces the\n // option descriptions (the buffering builder doesn't carry option docs).\n const meta = func.meta as FunctionMeta;\n meta.copyToFormat = config.format;\n meta.copyToDirection = config.direction ?? \"to\";\n meta.copyToComment = config.comment ?? null;\n for (const spec of func.argumentSpecs) {\n if (spec.isTableInput) continue;\n const opt = options[spec.name];\n if (opt?.doc) spec.doc = opt.doc;\n }\n\n return func;\n}\n",
|
|
47
47
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// SPDX-License-Identifier: LicenseRef-QueryFarm-Source-Available-1.0\n\n/**\n * Generic ArrowSerializableDataclass (ASD) codec.\n *\n * Bridges between typed TS objects (snake_case, matching vgi-python dataclass\n * field names) and Arrow IPC bytes (single-row batch with the dataclass'\n * ARROW_SCHEMA). Used by the generated vgi-client.ts encode<X>/decode<X>\n * wrappers to make the typed client interfaces honest at the wire boundary.\n *\n * Encoding delegates to the facade's `batchFromRows` (which handles the\n * complex types — Decimal/BigInt/List/Map/Struct/Dictionary — uniformly\n * across both arrow-js and flechette backends). Decoding pulls each field's\n * value with `batchToScalarDict`, then runs `normalizeValue` to convert\n * Arrow representations (MapRow, BigInt, etc.) back into plain JS shapes.\n */\n\nimport {\n type VgiSchema,\n type VgiField,\n type VgiDataType,\n isBinary,\n isBool,\n isDictionary,\n isInt,\n isList,\n isMap,\n isStruct,\n batchFromRows,\n serializeBatch,\n deserializeBatch,\n} from \"../arrow/index.js\";\n\n/**\n * Encode a typed object as a single-row Arrow IPC stream using `schema`.\n * Matches Python's `ArrowSerializableDataclass.serialize_to_bytes()`.\n */\nexport function encodeASD(\n schema: VgiSchema,\n obj: Record<string, any>,\n): Uint8Array {\n return serializeBatch(batchFromRows([obj], schema));\n}\n\n/**\n * Decode a single-row Arrow IPC stream into a typed object using `schema`.\n * Matches Python's `ArrowSerializableDataclass.deserialize_from_bytes()`.\n */\nexport function decodeASD<T>(\n schema: VgiSchema,\n bytes: Uint8Array,\n): T {\n const batch = deserializeBatch(bytes);\n if (batch.numRows === 0) {\n const names = schema.fields.map((f) => f.name).join(\",\");\n throw new Error(`decodeASD: empty batch (expected 1 row for ${names})`);\n }\n const out: Record<string, any> = {};\n for (const field of schema.fields) {\n const col = batch.getChild(field.name);\n const raw = col ? col.get(0) : null;\n out[field.name] = normalizeValue(raw, field.type);\n }\n return out as T;\n}\n\n// --------------------------------------------------------------------------- //\n// Decode side: Arrow value -> normalized JS value\n// --------------------------------------------------------------------------- //\n\nfunction normalizeValue(raw: any, type: VgiDataType): any {\n if (raw == null) return null;\n\n if (isList(type)) {\n const childType = (type as any).children[0].type as VgiDataType;\n const out: any[] = [];\n for (const item of raw) out.push(normalizeValue(item, childType));\n return out;\n }\n\n if (isMap(type)) {\n const out: Record<string, string> = {};\n // arrow-js MapRow is iterable of [k,v]; flechette returns [[k,v],...] arrays.\n if (raw[Symbol.iterator]) {\n for (const entry of raw) {\n if (Array.isArray(entry)) {\n out[String(entry[0])] = String(entry[1] ?? \"\");\n } else if (entry && typeof entry === \"object\") {\n const k = entry.key ?? entry[0];\n const v = entry.value ?? entry[1];\n out[String(k)] = v == null ? \"\" : String(v);\n }\n }\n } else if (typeof raw === \"object\") {\n // Plain-object map (flechette without useMap): Object.entries fallback\n for (const [k, v] of Object.entries(raw)) {\n out[String(k)] = v == null ? \"\" : String(v);\n }\n }\n return out;\n }\n\n if (isStruct(type)) {\n const childFields = (type as any).children as VgiField[];\n const out: Record<string, any> = {};\n for (const cf of childFields) {\n out[cf.name] = normalizeValue(raw[cf.name], cf.type);\n }\n return out;\n }\n\n if (isDictionary(type)) {\n return raw == null ? null : String(raw);\n }\n\n if (isBinary(type)) {\n return toUint8Array(raw);\n }\n\n if (isInt(type) && (type as any).bitWidth === 64) {\n // Prefer number when representable; callers that need BigInt can convert.\n if (typeof raw === \"bigint\") {\n if (raw >= BigInt(Number.MIN_SAFE_INTEGER) && raw <= BigInt(Number.MAX_SAFE_INTEGER)) {\n return Number(raw);\n }\n return raw;\n }\n return raw;\n }\n\n if (isBool(type)) {\n return Boolean(raw);\n }\n\n // Utf8, Int8/16/32, Float32/64 — pass through as-is.\n return raw;\n}\n\nfunction toUint8Array(val: any): Uint8Array {\n if (val instanceof Uint8Array) return val;\n if (val instanceof ArrayBuffer) return new Uint8Array(val);\n if (val && val.buffer instanceof ArrayBuffer) {\n return new Uint8Array(val.buffer, val.byteOffset, val.byteLength);\n }\n return new Uint8Array(0);\n}\n",
|
|
48
48
|
"// ============================================================================\n// GENERATED by vgi.codegen.ts_schemas. DO NOT EDIT BY HAND.\n//\n// Generator: vgi-gen-ts-schemas v2\n// Content hash: 214d149e8f9c\n//\n// To regenerate:\n// uv run --project ~/Development/vgi-python vgi-gen-ts-schemas \\\n// > ~/Development/vgi-typescript/src/generated/vgi-protocol-schemas.ts\n// ============================================================================\n\nimport {\n TimeUnit,\n binary,\n bool,\n dictionary,\n field,\n int16,\n int32,\n int64,\n list,\n map,\n schema,\n struct,\n timestamp,\n utf8,\n} from \"../arrow/index.js\";\n\n// Origin: CatalogInfo\nexport const CatalogInfoSchema = schema([\n field(\"name\", utf8(), false),\n field(\"implementation_version\", utf8(), true),\n field(\"data_version_spec\", utf8(), true),\n field(\"attach_option_specs\", list(field(\"item\", binary(), true)), false),\n field(\"releases\", list(field(\"item\", struct([field(\"version\", utf8(), false), field(\"released_at\", timestamp(TimeUnit.MICROSECOND, \"UTC\"), false), field(\"summary\", utf8(), false), field(\"notes_url\", utf8(), true)]), true)), false),\n field(\"source_url\", utf8(), true),\n]);\n\n// Origin: SchemaInfo\nexport const SchemaInfoSchema = schema([\n field(\"comment\", utf8(), true),\n field(\"tags\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n field(\"attach_opaque_data\", binary(), false),\n field(\"name\", utf8(), false),\n field(\"estimated_object_count\", map(field(\"key\", utf8(), false), field(\"value\", int64(), true), false), true),\n]);\n\n// Origin: TableInfo\nexport const TableInfoSchema = schema([\n field(\"comment\", utf8(), true),\n field(\"tags\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n field(\"name\", utf8(), false),\n field(\"schema_name\", utf8(), false),\n field(\"columns\", binary(), false),\n field(\"not_null_constraints\", list(field(\"item\", int32(), true)), false),\n field(\"unique_constraints\", list(field(\"item\", list(field(\"item\", int32(), true)), true)), false),\n field(\"check_constraints\", list(field(\"item\", utf8(), true)), false),\n field(\"primary_key_constraints\", list(field(\"item\", list(field(\"item\", int32(), true)), true)), false),\n field(\"foreign_key_constraints\", list(field(\"item\", binary(), true)), false),\n field(\"supports_insert\", bool(), false),\n field(\"supports_update\", bool(), false),\n field(\"supports_delete\", bool(), false),\n field(\"supports_returning\", bool(), false),\n field(\"supports_column_statistics\", bool(), false),\n field(\"scan_function\", binary(), false),\n field(\"insert_function\", binary(), false),\n field(\"update_function\", binary(), false),\n field(\"delete_function\", binary(), false),\n field(\"cardinality_estimate\", int64(), false),\n field(\"cardinality_max\", int64(), false),\n field(\"column_statistics\", binary(), false),\n field(\"bind_result\", binary(), false),\n field(\"required_filters\", list(field(\"item\", list(field(\"item\", utf8(), true)), true)), false),\n]);\n\n// Origin: ViewInfo\nexport const ViewInfoSchema = schema([\n field(\"comment\", utf8(), true),\n field(\"tags\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n field(\"name\", utf8(), false),\n field(\"schema_name\", utf8(), false),\n field(\"definition\", utf8(), false),\n field(\"column_comments\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n]);\n\n// Origin: FunctionInfo\nexport const FunctionInfoSchema = schema([\n field(\"comment\", utf8(), true),\n field(\"tags\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n field(\"name\", utf8(), false),\n field(\"schema_name\", utf8(), false),\n field(\"function_type\", dictionary(utf8(), int16()), false),\n field(\"arguments\", binary(), false),\n field(\"output_schema\", binary(), false),\n field(\"stability\", dictionary(utf8(), int16()), true),\n field(\"null_handling\", dictionary(utf8(), int16()), true),\n field(\"description\", utf8(), false),\n field(\"examples\", list(field(\"item\", struct([field(\"sql\", utf8(), false), field(\"description\", utf8(), false), field(\"expected_output\", utf8(), true)]), true)), false),\n field(\"categories\", list(field(\"item\", utf8(), true)), false),\n field(\"projection_pushdown\", bool(), true),\n field(\"filter_pushdown\", bool(), true),\n field(\"sampling_pushdown\", bool(), true),\n field(\"late_materialization\", bool(), true),\n field(\"supported_expression_filters\", list(field(\"item\", utf8(), true)), false),\n field(\"order_preservation\", dictionary(utf8(), int16()), true),\n field(\"max_workers\", int32(), false),\n field(\"supports_batch_index\", bool(), false),\n field(\"partition_kind\", dictionary(utf8(), int16()), false),\n field(\"order_dependent\", dictionary(utf8(), int16()), false),\n field(\"distinct_dependent\", dictionary(utf8(), int16()), false),\n field(\"supports_window\", bool(), false),\n field(\"streaming_partitioned\", bool(), false),\n field(\"has_finalize\", bool(), false),\n field(\"source_order_dependent\", bool(), false),\n field(\"sink_order_dependent\", bool(), false),\n field(\"requires_input_batch_index\", bool(), false),\n field(\"input_from_args\", bool(), false),\n field(\"required_settings\", list(field(\"item\", utf8(), true)), false),\n field(\"required_secrets\", list(field(\"item\", struct([field(\"secret_type\", utf8(), false), field(\"scope\", utf8(), true), field(\"secret_name\", utf8(), true)]), true)), false),\n]);\n\n// Origin: MacroInfo\nexport const MacroInfoSchema = schema([\n field(\"comment\", utf8(), true),\n field(\"tags\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n field(\"name\", utf8(), false),\n field(\"schema_name\", utf8(), false),\n field(\"macro_type\", dictionary(utf8(), int16()), false),\n field(\"parameters\", list(field(\"item\", utf8(), true)), false),\n field(\"parameter_default_values\", binary(), false),\n field(\"definition\", utf8(), false),\n field(\"arguments_schema\", binary(), false),\n]);\n\n// Origin: IndexInfo\nexport const IndexInfoSchema = schema([\n field(\"comment\", utf8(), true),\n field(\"tags\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n field(\"name\", utf8(), false),\n field(\"schema_name\", utf8(), false),\n field(\"table_name\", utf8(), false),\n field(\"index_type\", utf8(), false),\n field(\"constraint_type\", dictionary(utf8(), int16()), false),\n field(\"expressions\", list(field(\"item\", utf8(), true)), false),\n field(\"options\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n]);\n\n// Origin: CopyFromFormatInfo\nexport const CopyFromFormatInfoSchema = schema([\n field(\"comment\", utf8(), true),\n field(\"tags\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n field(\"format_name\", utf8(), false),\n field(\"handler\", utf8(), false),\n field(\"options\", binary(), false),\n field(\"direction\", utf8(), false),\n field(\"description\", utf8(), false),\n field(\"ordered\", bool(), false),\n]);\n\n// Origin: ScanFunctionResult\nexport const ScanFunctionResultSchema = schema([\n field(\"function_name\", utf8(), false),\n field(\"arguments\", binary(), false),\n field(\"required_extensions\", list(field(\"item\", utf8(), true)), false),\n]);\n\n// Origin: ScanBranchesResult\nexport const ScanBranchesResultSchema = schema([\n field(\"branches\", list(field(\"item\", binary(), true)), false),\n field(\"required_extensions\", list(field(\"item\", utf8(), true)), false),\n]);\n\n// Origin: ScanBranch\nexport const ScanBranchSchema = schema([\n field(\"function_name\", utf8(), false),\n field(\"arguments\", binary(), false),\n field(\"branch_filter\", utf8(), true),\n field(\"writable\", bool(), false),\n field(\"source_catalog\", utf8(), true),\n field(\"source_schema\", utf8(), true),\n field(\"source_table\", utf8(), true),\n]);\n\n// Origin: AttachCatalogInfo\nexport const AttachCatalogInfoSchema = schema([\n field(\"alias\", utf8(), false),\n field(\"target\", utf8(), false),\n field(\"db_type\", utf8(), false),\n field(\"options\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n field(\"hidden\", bool(), false),\n field(\"required\", bool(), false),\n field(\"secret_ref\", utf8(), false),\n]);\n\n// Origin: method 'aggregate_bind' result\nexport const AggregateBindResultSchema = schema([\n field(\"output_schema\", binary(), false),\n field(\"execution_id\", binary(), false),\n]);\n\n// Origin: method 'aggregate_combine' result\nexport const AggregateCombineResultSchema = schema([]);\n\n// Origin: method 'aggregate_destructor' result\nexport const AggregateDestructorResultSchema = schema([]);\n\n// Origin: method 'aggregate_finalize' result\nexport const AggregateFinalizeResultSchema = schema([\n field(\"result_batch\", binary(), false),\n]);\n\n// Origin: method 'aggregate_streaming_chunk' result\nexport const AggregateStreamingChunkResultSchema = schema([\n field(\"result_batch\", binary(), false),\n]);\n\n// Origin: method 'aggregate_streaming_close' result\nexport const AggregateStreamingCloseResultSchema = schema([]);\n\n// Origin: method 'aggregate_streaming_open' result\nexport const AggregateStreamingOpenResultSchema = schema([\n field(\"execution_id\", binary(), false),\n]);\n\n// Origin: method 'aggregate_update' result\nexport const AggregateUpdateResultSchema = schema([]);\n\n// Origin: method 'aggregate_window' result\nexport const AggregateWindowResultSchema = schema([\n field(\"result_batch\", binary(), false),\n]);\n\n// Origin: method 'aggregate_window_batch' result\nexport const AggregateWindowBatchResultSchema = schema([\n field(\"result_batch\", binary(), false),\n]);\n\n// Origin: method 'aggregate_window_destructor' result\nexport const AggregateWindowDestructorResultSchema = schema([]);\n\n// Origin: method 'aggregate_window_init' result\nexport const AggregateWindowInitResultSchema = schema([]);\n\n// Origin: method 'bind' result\nexport const BindResultSchema = schema([\n field(\"output_schema\", binary(), false),\n field(\"opaque_data\", binary(), false),\n field(\"lookup_secret_types\", list(field(\"item\", utf8(), true)), false),\n field(\"lookup_scopes\", list(field(\"item\", utf8(), true)), false),\n field(\"lookup_names\", list(field(\"item\", utf8(), true)), false),\n]);\n\n// Origin: method 'catalog_attach' result\nexport const CatalogAttachResultSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"supports_transactions\", bool(), false),\n field(\"supports_time_travel\", bool(), false),\n field(\"catalog_version_frozen\", bool(), false),\n field(\"catalog_version\", int64(), false),\n field(\"attach_opaque_data_required\", bool(), false),\n field(\"default_schema\", utf8(), false),\n field(\"settings\", list(field(\"item\", binary(), true)), false),\n field(\"secret_types\", list(field(\"item\", binary(), true)), false),\n field(\"attach_catalogs\", list(field(\"item\", binary(), true)), false),\n field(\"comment\", utf8(), true),\n field(\"tags\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n field(\"supports_column_statistics\", bool(), false),\n field(\"resolved_data_version\", utf8(), true),\n field(\"resolved_implementation_version\", utf8(), true),\n]);\n\n// Origin: method 'catalog_catalogs' result\nexport const CatalogCatalogsResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'catalog_copy_from_formats' result\nexport const CatalogCopyFromFormatsResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'catalog_index_get' result\nexport const CatalogIndexGetResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'catalog_macro_get' result\nexport const CatalogMacroGetResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'catalog_schema_contents_functions' result\nexport const CatalogSchemaContentsFunctionsResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'catalog_schema_contents_indexes' result\nexport const CatalogSchemaContentsIndexesResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'catalog_schema_contents_macros' result\nexport const CatalogSchemaContentsMacrosResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'catalog_schema_contents_tables' result\nexport const CatalogSchemaContentsTablesResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'catalog_schema_contents_views' result\nexport const CatalogSchemaContentsViewsResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'catalog_schema_get' result\nexport const CatalogSchemaGetResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'catalog_schemas' result\nexport const CatalogSchemasResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'catalog_table_get' result\nexport const CatalogTableGetResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'catalog_transaction_begin' result\nexport const CatalogTransactionBeginResultSchema = schema([\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_version' result\nexport const CatalogVersionResultSchema = schema([\n field(\"version\", int64(), false),\n]);\n\n// Origin: method 'catalog_view_get' result\nexport const CatalogViewGetResultSchema = schema([\n field(\"items\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'table_buffering_combine' result\nexport const TableBufferingCombineResultSchema = schema([\n field(\"finalize_state_ids\", list(field(\"item\", binary(), true)), false),\n]);\n\n// Origin: method 'table_buffering_destructor' result\nexport const TableBufferingDestructorResultSchema = schema([]);\n\n// Origin: method 'table_buffering_process' result\nexport const TableBufferingProcessResultSchema = schema([\n field(\"state_id\", binary(), false),\n]);\n\n// Origin: method 'table_function_cardinality' result\nexport const TableFunctionCardinalityResultSchema = schema([\n field(\"estimate\", int64(), true),\n field(\"max\", int64(), true),\n]);\n\n// Origin: method 'table_function_dynamic_to_string' result\nexport const TableFunctionDynamicToStringResultSchema = schema([\n field(\"keys\", list(field(\"item\", utf8(), true)), false),\n field(\"values\", list(field(\"item\", utf8(), true)), false),\n]);\n\n// Origin: method 'aggregate_bind' params\nexport const AggregateBindParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'aggregate_combine' params\nexport const AggregateCombineParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'aggregate_destructor' params\nexport const AggregateDestructorParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'aggregate_finalize' params\nexport const AggregateFinalizeParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'aggregate_streaming_chunk' params\nexport const AggregateStreamingChunkParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'aggregate_streaming_close' params\nexport const AggregateStreamingCloseParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'aggregate_streaming_open' params\nexport const AggregateStreamingOpenParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'aggregate_update' params\nexport const AggregateUpdateParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'aggregate_window' params\nexport const AggregateWindowParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'aggregate_window_batch' params\nexport const AggregateWindowBatchParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'aggregate_window_destructor' params\nexport const AggregateWindowDestructorParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'aggregate_window_init' params\nexport const AggregateWindowInitParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'bind' params\nexport const BindParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'catalog_attach' params\nexport const CatalogAttachParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'catalog_catalogs' params\nexport const CatalogCatalogsParamsSchema = schema([]);\n\n// Origin: method 'catalog_copy_from_formats' params\nexport const CatalogCopyFromFormatsParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_create' params\nexport const CatalogCreateParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'catalog_detach' params\nexport const CatalogDetachParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n]);\n\n// Origin: method 'catalog_drop' params\nexport const CatalogDropParamsSchema = schema([\n field(\"name\", utf8(), false),\n]);\n\n// Origin: method 'catalog_index_create' params\nexport const CatalogIndexCreateParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'catalog_index_drop' params\nexport const CatalogIndexDropParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"cascade\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_index_get' params\nexport const CatalogIndexGetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_macro_create' params\nexport const CatalogMacroCreateParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'catalog_macro_drop' params\nexport const CatalogMacroDropParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_macro_get' params\nexport const CatalogMacroGetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_schema_contents_functions' params\nexport const CatalogSchemaContentsFunctionsParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"name\", utf8(), false),\n field(\"type\", dictionary(utf8(), int16()), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_schema_contents_indexes' params\nexport const CatalogSchemaContentsIndexesParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"name\", utf8(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_schema_contents_macros' params\nexport const CatalogSchemaContentsMacrosParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"name\", utf8(), false),\n field(\"type\", dictionary(utf8(), int16()), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_schema_contents_tables' params\nexport const CatalogSchemaContentsTablesParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"name\", utf8(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_schema_contents_views' params\nexport const CatalogSchemaContentsViewsParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"name\", utf8(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_schema_create' params\nexport const CatalogSchemaCreateParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"name\", utf8(), false),\n field(\"on_conflict\", dictionary(utf8(), int16()), false),\n field(\"comment\", utf8(), true),\n field(\"tags\", map(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), true),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_schema_drop' params\nexport const CatalogSchemaDropParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"name\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"cascade\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_schema_get' params\nexport const CatalogSchemaGetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"name\", utf8(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_schemas' params\nexport const CatalogSchemasParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_column_add' params\nexport const CatalogTableColumnAddParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"column_definition\", binary(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"if_column_not_exists\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_column_comment_set' params\nexport const CatalogTableColumnCommentSetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"column_name\", utf8(), false),\n field(\"comment\", utf8(), true),\n field(\"ignore_not_found\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_column_default_drop' params\nexport const CatalogTableColumnDefaultDropParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"column_name\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_column_default_set' params\nexport const CatalogTableColumnDefaultSetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"column_name\", utf8(), false),\n field(\"expression\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_column_drop' params\nexport const CatalogTableColumnDropParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"column_name\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"if_column_exists\", bool(), false),\n field(\"cascade\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_column_rename' params\nexport const CatalogTableColumnRenameParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"column_name\", utf8(), false),\n field(\"new_column_name\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_column_statistics_get' params\nexport const CatalogTableColumnStatisticsGetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_column_type_change' params\nexport const CatalogTableColumnTypeChangeParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"column_definition\", binary(), false),\n field(\"expression\", utf8(), true),\n field(\"ignore_not_found\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_comment_set' params\nexport const CatalogTableCommentSetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"comment\", utf8(), true),\n field(\"ignore_not_found\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_create' params\nexport const CatalogTableCreateParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'catalog_table_delete_function_get' params\nexport const CatalogTableDeleteFunctionGetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_drop' params\nexport const CatalogTableDropParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"cascade\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_get' params\nexport const CatalogTableGetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"at_unit\", utf8(), true),\n field(\"at_value\", utf8(), true),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_insert_function_get' params\nexport const CatalogTableInsertFunctionGetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"transaction_opaque_data\", binary(), true),\n field(\"writable_branch_function_name\", utf8(), true),\n]);\n\n// Origin: method 'catalog_table_not_null_drop' params\nexport const CatalogTableNotNullDropParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"column_name\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_not_null_set' params\nexport const CatalogTableNotNullSetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"column_name\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_rename' params\nexport const CatalogTableRenameParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"new_name\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_scan_branches_get' params\nexport const CatalogTableScanBranchesGetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"at_unit\", utf8(), true),\n field(\"at_value\", utf8(), true),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_scan_function_get' params\nexport const CatalogTableScanFunctionGetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"at_unit\", utf8(), true),\n field(\"at_value\", utf8(), true),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_table_update_function_get' params\nexport const CatalogTableUpdateFunctionGetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_transaction_begin' params\nexport const CatalogTransactionBeginParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n]);\n\n// Origin: method 'catalog_transaction_commit' params\nexport const CatalogTransactionCommitParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"transaction_opaque_data\", binary(), false),\n]);\n\n// Origin: method 'catalog_transaction_rollback' params\nexport const CatalogTransactionRollbackParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"transaction_opaque_data\", binary(), false),\n]);\n\n// Origin: method 'catalog_version' params\nexport const CatalogVersionParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_view_comment_set' params\nexport const CatalogViewCommentSetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"comment\", utf8(), true),\n field(\"ignore_not_found\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_view_create' params\nexport const CatalogViewCreateParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"definition\", utf8(), false),\n field(\"on_conflict\", dictionary(utf8(), int16()), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_view_drop' params\nexport const CatalogViewDropParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"cascade\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_view_get' params\nexport const CatalogViewGetParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'catalog_view_rename' params\nexport const CatalogViewRenameParamsSchema = schema([\n field(\"attach_opaque_data\", binary(), false),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"new_name\", utf8(), false),\n field(\"ignore_not_found\", bool(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\n// Origin: method 'init' params\nexport const InitParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'table_buffering_combine' params\nexport const TableBufferingCombineParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'table_buffering_destructor' params\nexport const TableBufferingDestructorParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'table_buffering_process' params\nexport const TableBufferingProcessParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'table_function_cardinality' params\nexport const TableFunctionCardinalityParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'table_function_dynamic_to_string' params\nexport const TableFunctionDynamicToStringParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n// Origin: method 'table_function_statistics' params\nexport const TableFunctionStatisticsParamsSchema = schema([\n field(\"request\", binary(), false),\n]);\n\n",
|
|
49
|
-
"// ============================================================================\n// GENERATED by vgi.codegen.ts_client. DO NOT EDIT BY HAND.\n//\n// Generator: vgi-gen-ts-client v1\n// Content hash: 226553bd666c\n//\n// To regenerate:\n// uv run --project ~/Development/vgi-python vgi-gen-ts-client \\\n// > ~/Development/vgi-typescript/src/generated/vgi-client.ts\n// ============================================================================\n\nimport { encodeASD, decodeASD } from \"../codec/asd.js\";\nimport {\n CatalogInfoSchema,\n FunctionInfoSchema,\n IndexInfoSchema,\n MacroInfoSchema,\n SchemaInfoSchema,\n TableInfoSchema,\n ViewInfoSchema,\n} from \"./vgi-protocol-schemas.js\";\n\nexport type DistinctDependence = \"DISTINCT_DEPENDENT\" | \"NOT_DISTINCT_DEPENDENT\";\nexport type FunctionStability = \"CONSISTENT\" | \"VOLATILE\" | \"CONSISTENT_WITHIN_QUERY\";\nexport type FunctionType = \"SCALAR\" | \"TABLE\" | \"TABLE_BUFFERING\" | \"AGGREGATE\";\nexport type IndexConstraintType = \"NONE\" | \"UNIQUE\" | \"PRIMARY\";\nexport type InvocationFunctionType = \"AGGREGATE\" | \"SCALAR\" | \"TABLE\" | \"TABLE_BUFFERING\";\nexport type MacroType = \"SCALAR\" | \"TABLE\";\nexport type NullHandling = \"DEFAULT\" | \"SPECIAL\";\nexport type OnConflict = \"ERROR\" | \"IGNORE\" | \"REPLACE\";\nexport type OrderByDirection = \"ASC\" | \"DESC\";\nexport type OrderByNullOrder = \"NULLS_FIRST\" | \"NULLS_LAST\";\nexport type OrderDependence = \"ORDER_DEPENDENT\" | \"NOT_ORDER_DEPENDENT\";\nexport type OrderPreservation = \"PRESERVES_ORDER\" | \"NO_ORDER_GUARANTEE\" | \"FIXED_ORDER\";\nexport type PartitionKind = \"NOT_PARTITIONED\" | \"SINGLE_VALUE_PARTITIONS\" | \"OVERLAPPING_PARTITIONS\" | \"DISJOINT_PARTITIONS\";\nexport type SchemaObjectType = \"TABLE\" | \"VIEW\" | \"SCALAR_FUNCTION\" | \"TABLE_FUNCTION\" | \"AGGREGATE_FUNCTION\" | \"SCALAR_MACRO\" | \"TABLE_MACRO\" | \"INDEX\";\nexport type TableInOutFunctionInitPhase = \"INPUT\" | \"FINALIZE\" | \"TABLE_BUFFERING\" | \"TABLE_BUFFERING_FINALIZE\";\n\nexport interface CatalogDataVersionRelease {\n version: string;\n released_at?: bigint | null;\n summary: string;\n notes_url?: string | null;\n}\n\nexport interface CatalogInfo {\n name: string;\n implementation_version?: string | null;\n data_version_spec?: string | null;\n attach_option_specs: Uint8Array[];\n releases: CatalogDataVersionRelease[];\n source_url?: string | null;\n}\n\nexport interface SchemaInfo {\n comment?: string | null;\n tags: Record<string, string>;\n attach_opaque_data: Uint8Array;\n name: string;\n estimated_object_count?: Record<string, number> | null;\n}\n\nexport interface TableInfo {\n comment?: string | null;\n tags: Record<string, string>;\n name: string;\n schema_name: string;\n columns: Uint8Array;\n not_null_constraints: number[];\n unique_constraints: number[][];\n check_constraints: string[];\n primary_key_constraints: number[][];\n foreign_key_constraints: Uint8Array[];\n supports_insert: boolean;\n supports_update: boolean;\n supports_delete: boolean;\n supports_returning: boolean;\n supports_column_statistics: boolean;\n scan_function?: Uint8Array | null;\n insert_function?: Uint8Array | null;\n update_function?: Uint8Array | null;\n delete_function?: Uint8Array | null;\n cardinality_estimate?: number | null;\n cardinality_max?: number | null;\n column_statistics?: Uint8Array | null;\n bind_result?: Uint8Array | null;\n required_filters: string[][];\n}\n\nexport interface ViewInfo {\n comment?: string | null;\n tags: Record<string, string>;\n name: string;\n schema_name: string;\n definition: string;\n column_comments: Record<string, string>;\n}\n\nexport interface CatalogExample {\n sql: string;\n description: string;\n expected_output?: string | null;\n}\n\nexport interface SecretLookupEntry {\n secret_type: string;\n scope?: string | null;\n secret_name?: string | null;\n}\n\nexport interface FunctionInfo {\n comment?: string | null;\n tags: Record<string, string>;\n name: string;\n schema_name: string;\n function_type: FunctionType;\n arguments: Uint8Array;\n output_schema: Uint8Array;\n stability?: FunctionStability | null;\n null_handling?: NullHandling | null;\n description: string;\n examples: CatalogExample[];\n categories: string[];\n projection_pushdown?: boolean | null;\n filter_pushdown?: boolean | null;\n sampling_pushdown?: boolean | null;\n late_materialization?: boolean | null;\n supported_expression_filters: string[];\n order_preservation?: OrderPreservation | null;\n max_workers?: number | null;\n supports_batch_index: boolean;\n partition_kind: PartitionKind;\n order_dependent: OrderDependence;\n distinct_dependent: DistinctDependence;\n supports_window: boolean;\n streaming_partitioned: boolean;\n has_finalize: boolean;\n source_order_dependent: boolean;\n sink_order_dependent: boolean;\n requires_input_batch_index: boolean;\n input_from_args: boolean;\n required_settings: string[];\n required_secrets: SecretLookupEntry[];\n}\n\nexport interface MacroInfo {\n comment?: string | null;\n tags: Record<string, string>;\n name: string;\n schema_name: string;\n macro_type: MacroType;\n parameters: string[];\n parameter_default_values?: /** @record-batch */ Uint8Array | null;\n definition: string;\n arguments_schema?: /** @arrow-schema */ Uint8Array | null;\n}\n\nexport interface IndexInfo {\n comment?: string | null;\n tags: Record<string, string>;\n name: string;\n schema_name: string;\n table_name: string;\n index_type: string;\n constraint_type: IndexConstraintType;\n expressions: string[];\n options: Record<string, string>;\n}\n\nexport interface AggregateBindRequest {\n function_name: string;\n arguments: /** @vgi-arguments */ Uint8Array;\n input_schema?: /** @arrow-schema */ Uint8Array | null;\n settings?: /** @record-batch */ Uint8Array | null;\n secrets?: /** @record-batch */ Uint8Array | null;\n attach_opaque_data?: Uint8Array | null;\n}\n\nexport interface AggregateBindResponse {\n output_schema: /** @arrow-schema */ Uint8Array;\n execution_id: Uint8Array;\n}\n\nexport interface AggregateCombineRequest {\n function_name: string;\n execution_id: Uint8Array;\n merge_batch: Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n}\n\nexport interface AggregateCombineResponse {\n}\n\nexport interface AggregateDestructorRequest {\n function_name: string;\n execution_id: Uint8Array;\n group_ids_batch: Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n}\n\nexport interface AggregateDestructorResponse {\n}\n\nexport interface AggregateFinalizeRequest {\n function_name: string;\n execution_id: Uint8Array;\n group_ids_batch: Uint8Array;\n output_schema: /** @arrow-schema */ Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n}\n\nexport interface AggregateFinalizeResponse {\n result_batch: Uint8Array;\n}\n\nexport interface AggregateStreamingChunkRequest {\n function_name: string;\n execution_id: Uint8Array;\n input_batch: Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n}\n\nexport interface AggregateStreamingChunkResponse {\n result_batch: Uint8Array;\n}\n\nexport interface AggregateStreamingCloseRequest {\n function_name: string;\n execution_id: Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n}\n\nexport interface AggregateStreamingCloseResponse {\n}\n\nexport interface AggregateStreamingOpenRequest {\n function_name: string;\n arguments: /** @vgi-arguments */ Uint8Array;\n input_schema: /** @arrow-schema */ Uint8Array;\n partition_key_count: number;\n order_key_count: number;\n output_schema: /** @arrow-schema */ Uint8Array;\n settings?: /** @record-batch */ Uint8Array | null;\n secrets?: /** @record-batch */ Uint8Array | null;\n attach_opaque_data?: Uint8Array | null;\n}\n\nexport interface AggregateStreamingOpenResponse {\n execution_id: Uint8Array;\n}\n\nexport interface AggregateUpdateRequest {\n function_name: string;\n execution_id: Uint8Array;\n input_batch: Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n}\n\nexport interface AggregateUpdateResponse {\n}\n\nexport interface AggregateWindowRequest {\n function_name: string;\n execution_id: Uint8Array;\n partition_id: number;\n rid: number;\n frame_starts: number[];\n frame_ends: number[];\n attach_opaque_data?: Uint8Array | null;\n}\n\nexport interface AggregateWindowResponse {\n result_batch: Uint8Array;\n}\n\nexport interface AggregateWindowBatchRequest {\n function_name: string;\n execution_id: Uint8Array;\n partition_id: number;\n row_idx: number;\n count: number;\n frames_per_row: number[];\n frame_starts: number[];\n frame_ends: number[];\n attach_opaque_data?: Uint8Array | null;\n}\n\nexport interface AggregateWindowBatchResponse {\n result_batch: Uint8Array;\n}\n\nexport interface AggregateWindowDestructorRequest {\n function_name: string;\n execution_id: Uint8Array;\n partition_id: number;\n attach_opaque_data?: Uint8Array | null;\n}\n\nexport interface AggregateWindowDestructorResponse {\n}\n\nexport interface AggregateWindowInitRequest {\n function_name: string;\n execution_id: Uint8Array;\n partition_id: number;\n row_count: number;\n partition_batch: Uint8Array;\n output_schema: /** @arrow-schema */ Uint8Array;\n filter_mask: Uint8Array;\n frame_stats: Uint8Array;\n all_valid: Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n}\n\nexport interface AggregateWindowInitResponse {\n}\n\nexport interface CopyFromContext {\n format: string;\n file_path: string;\n expected_schema: /** @arrow-schema */ Uint8Array;\n}\n\nexport interface CopyToContext {\n format: string;\n file_path: string;\n}\n\nexport interface BindRequest {\n function_name: string;\n arguments: /** @vgi-arguments */ Uint8Array;\n function_type: InvocationFunctionType;\n input_schema?: /** @arrow-schema */ Uint8Array | null;\n settings?: /** @record-batch */ Uint8Array | null;\n secrets?: /** @record-batch */ Uint8Array | null;\n attach_opaque_data?: Uint8Array | null;\n transaction_opaque_data?: Uint8Array | null;\n resolved_secrets_provided: boolean;\n at_unit?: string | null;\n at_value?: string | null;\n copy_from?: CopyFromContext | null;\n copy_to?: CopyToContext | null;\n}\n\nexport interface BindResponse {\n output_schema: /** @arrow-schema */ Uint8Array;\n opaque_data?: Uint8Array | null;\n lookup_secret_types: string[];\n lookup_scopes: string[];\n lookup_names: string[];\n}\n\nexport interface CatalogAttachRequest {\n name: string;\n options?: /** @record-batch */ Uint8Array | null;\n data_version_spec?: string | null;\n implementation_version?: string | null;\n}\n\nexport interface CatalogAttachResult {\n attach_opaque_data: Uint8Array;\n supports_transactions: boolean;\n supports_time_travel: boolean;\n catalog_version_frozen: boolean;\n catalog_version: number;\n attach_opaque_data_required: boolean;\n default_schema: string;\n settings: Uint8Array[];\n secret_types: Uint8Array[];\n attach_catalogs: Uint8Array[];\n comment?: string | null;\n tags: Record<string, string>;\n supports_column_statistics: boolean;\n resolved_data_version?: string | null;\n resolved_implementation_version?: string | null;\n}\n\nexport interface CatalogsResponse {\n items: CatalogInfo[];\n}\n\nexport interface CopyFromFormatsResponse {\n items: Uint8Array[];\n}\n\nexport interface CatalogCreateRequest {\n name: string;\n on_conflict: OnConflict;\n options?: /** @record-batch */ Uint8Array | null;\n}\n\nexport interface IndexCreateRequest {\n attach_opaque_data: Uint8Array;\n schema_name: string;\n name: string;\n table_name: string;\n index_type: string;\n constraint_type: IndexConstraintType;\n expressions: string[];\n on_conflict: OnConflict;\n options: Record<string, string>;\n transaction_opaque_data?: Uint8Array | null;\n}\n\nexport interface IndexesResponse {\n items: IndexInfo[];\n}\n\nexport interface MacroCreateRequest {\n attach_opaque_data: Uint8Array;\n schema_name: string;\n name: string;\n macro_type: MacroType;\n parameters: string[];\n definition: string;\n on_conflict: OnConflict;\n parameter_default_values?: /** @record-batch */ Uint8Array | null;\n arguments_schema?: /** @arrow-schema */ Uint8Array | null;\n transaction_opaque_data?: Uint8Array | null;\n}\n\nexport interface MacrosResponse {\n items: MacroInfo[];\n}\n\nexport interface FunctionsResponse {\n items: FunctionInfo[];\n}\n\nexport interface TablesResponse {\n items: TableInfo[];\n}\n\nexport interface ViewsResponse {\n items: ViewInfo[];\n}\n\nexport interface SchemasResponse {\n items: SchemaInfo[];\n}\n\nexport interface TableCreateRequest {\n attach_opaque_data: Uint8Array;\n schema_name: string;\n name: string;\n columns: Uint8Array;\n on_conflict: OnConflict;\n not_null_constraints: number[];\n unique_constraints: number[][];\n check_constraints: string[];\n primary_key_constraints: number[][];\n foreign_key_constraints: Uint8Array[];\n transaction_opaque_data?: Uint8Array | null;\n}\n\nexport interface TransactionBeginResponse {\n transaction_opaque_data?: Uint8Array | null;\n}\n\nexport interface CatalogVersionResponse {\n version: number;\n}\n\nexport interface InitRequest {\n bind_call: BindRequest;\n output_schema: /** @arrow-schema */ Uint8Array;\n bind_opaque_data?: Uint8Array | null;\n projection_ids?: number[] | null;\n pushdown_filters?: /** @record-batch */ Uint8Array | null;\n join_keys?: /** @record-batch */ Uint8Array[] | null;\n phase?: TableInOutFunctionInitPhase | null;\n finalize_state_id?: Uint8Array | null;\n execution_id?: Uint8Array | null;\n init_opaque_data?: Uint8Array | null;\n substream_id?: Uint8Array | null;\n order_by_column_name?: string | null;\n order_by_direction?: OrderByDirection | null;\n order_by_null_order?: OrderByNullOrder | null;\n order_by_limit?: number | null;\n tablesample_percentage?: number | null;\n tablesample_seed?: number | null;\n}\n\nexport interface TableBufferingCombineRequest {\n function_name: string;\n execution_id: Uint8Array;\n state_ids: Uint8Array[];\n attach_opaque_data?: Uint8Array | null;\n transaction_id?: Uint8Array | null;\n}\n\nexport interface TableBufferingCombineResponse {\n finalize_state_ids: Uint8Array[];\n}\n\nexport interface TableBufferingDestructorRequest {\n function_name: string;\n execution_id: Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n transaction_id?: Uint8Array | null;\n}\n\nexport interface TableBufferingDestructorResponse {\n}\n\nexport interface TableBufferingProcessRequest {\n function_name: string;\n execution_id: Uint8Array;\n input_batch: Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n transaction_id?: Uint8Array | null;\n batch_index?: number | null;\n}\n\nexport interface TableBufferingProcessResponse {\n state_id: Uint8Array;\n}\n\nexport interface TableFunctionCardinalityRequest {\n bind_call: BindRequest;\n bind_opaque_data?: Uint8Array | null;\n}\n\nexport interface TableCardinality {\n estimate?: number | null;\n max?: number | null;\n}\n\nexport interface TableFunctionDynamicToStringRequest {\n bind_call: BindRequest;\n bind_opaque_data?: Uint8Array | null;\n global_execution_id: Uint8Array;\n}\n\nexport interface TableFunctionDynamicToStringResponse {\n keys: string[];\n values: string[];\n}\n\nexport interface TableFunctionStatisticsRequest {\n bind_call: BindRequest;\n bind_opaque_data?: Uint8Array | null;\n}\n\n// ----------------------------------------------------------------------------\n// Codec wrappers: turn the typed interfaces above into actual wire bytes.\n// ----------------------------------------------------------------------------\n\nexport const encodeCatalogInfo = (v: CatalogInfo): Uint8Array => encodeASD(CatalogInfoSchema, v);\nexport const decodeCatalogInfo = (b: Uint8Array): CatalogInfo => decodeASD<CatalogInfo>(CatalogInfoSchema, b);\nexport const encodeFunctionInfo = (v: FunctionInfo): Uint8Array => encodeASD(FunctionInfoSchema, v);\nexport const decodeFunctionInfo = (b: Uint8Array): FunctionInfo => decodeASD<FunctionInfo>(FunctionInfoSchema, b);\nexport const encodeIndexInfo = (v: IndexInfo): Uint8Array => encodeASD(IndexInfoSchema, v);\nexport const decodeIndexInfo = (b: Uint8Array): IndexInfo => decodeASD<IndexInfo>(IndexInfoSchema, b);\nexport const encodeMacroInfo = (v: MacroInfo): Uint8Array => encodeASD(MacroInfoSchema, v);\nexport const decodeMacroInfo = (b: Uint8Array): MacroInfo => decodeASD<MacroInfo>(MacroInfoSchema, b);\nexport const encodeSchemaInfo = (v: SchemaInfo): Uint8Array => encodeASD(SchemaInfoSchema, v);\nexport const decodeSchemaInfo = (b: Uint8Array): SchemaInfo => decodeASD<SchemaInfo>(SchemaInfoSchema, b);\nexport const encodeTableInfo = (v: TableInfo): Uint8Array => encodeASD(TableInfoSchema, v);\nexport const decodeTableInfo = (b: Uint8Array): TableInfo => decodeASD<TableInfo>(TableInfoSchema, b);\nexport const encodeViewInfo = (v: ViewInfo): Uint8Array => encodeASD(ViewInfoSchema, v);\nexport const decodeViewInfo = (b: Uint8Array): ViewInfo => decodeASD<ViewInfo>(ViewInfoSchema, b);\n\n",
|
|
50
|
-
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// CatalogInterface abstract class with ~35 methods.\n// Matching Python's vgi/catalog/catalog_interface.py\n\nimport { CatalogReadOnlyError } from \"../errors.js\";\n\nexport type AttachOpaqueData = Uint8Array;\nexport type TransactionOpaqueData = Uint8Array;\n\n// Wire-encoded string union (matches Python's CatalogMacroType enum names).\nimport type { MacroType } from \"../generated/vgi-client.js\";\nexport type { MacroType };\n\n// CatalogAttachResult is the generated snake_case wire shape.\n// The `supports_column_statistics` field is a catalog-level opt-in for the\n// catalog_table_column_statistics_get RPC — defaults to true when unspecified;\n// individual tables still need to set TableInfo.supports_column_statistics\n// before DuckDB will actually call it.\nimport type { CatalogAttachResult } from \"../generated/vgi-client.js\";\nexport type { CatalogAttachResult };\n\n// ============================================================================\n// Serializable info types\n// ============================================================================\n\n// These serialize themselves to Arrow IPC bytes for catalog responses\n\n// SchemaInfo is the generated interface (snake_case wire shape).\n// Codecs live in ../generated/vgi-client.ts — no class needed.\nimport type { SchemaInfo } from \"../generated/vgi-client.js\";\nexport type { SchemaInfo };\nexport { encodeSchemaInfo, decodeSchemaInfo } from \"../generated/vgi-client.js\";\n\n// CatalogInfo — advertised by workers per catalog (name + versions).\nimport type { CatalogInfo } from \"../generated/vgi-client.js\";\nexport type { CatalogInfo };\nexport { encodeCatalogInfo, decodeCatalogInfo } from \"../generated/vgi-client.js\";\n\n// TableInfo is the generated interface (snake_case wire shape).\nimport type { TableInfo } from \"../generated/vgi-client.js\";\nexport type { TableInfo };\nexport { encodeTableInfo, decodeTableInfo } from \"../generated/vgi-client.js\";\n\n// ViewInfo is the generated interface (snake_case wire shape).\nimport type { ViewInfo } from \"../generated/vgi-client.js\";\nexport type { ViewInfo };\nexport { encodeViewInfo, decodeViewInfo } from \"../generated/vgi-client.js\";\n\n// FunctionInfo is the generated interface (snake_case wire shape).\n// FunctionInfoOptions was the camelCase constructor bag for the old class —\n// callers now use object literals matching the wire shape directly.\nimport type { FunctionInfo } from \"../generated/vgi-client.js\";\nexport type { FunctionInfo };\n/** @deprecated Use the FunctionInfo interface (snake_case) directly. */\nexport type FunctionInfoOptions = FunctionInfo;\nexport { encodeFunctionInfo, decodeFunctionInfo } from \"../generated/vgi-client.js\";\n\n// MacroInfo is the generated interface (snake_case wire shape).\nimport type { MacroInfo } from \"../generated/vgi-client.js\";\nexport type { MacroInfo };\nexport { encodeMacroInfo, decodeMacroInfo } from \"../generated/vgi-client.js\";\n\n// IndexInfo wire shape — declarative indexes a worker advertises and DuckDB\n// surfaces under duckdb_indexes(). Constraint type maps to is_unique /\n// is_primary on the DuckDB side.\nimport type { IndexInfo, IndexConstraintType } from \"../generated/vgi-client.js\";\nexport type { IndexInfo, IndexConstraintType };\nexport { encodeIndexInfo, decodeIndexInfo } from \"../generated/vgi-client.js\";\n\n// CopyFromFormatInfo — a custom `COPY ... FROM` format a VGI catalog advertises.\n// The wire shape matches the generated CopyFromFormatInfoSchema; the codegen\n// does not emit a dedicated interface/encoder for it (it's an items-list type\n// carried as binary), so we declare the snake_case interface here and reuse the\n// generic ASD codec with the generated schema. Mirrors vgi-python's\n// catalog_interface.CopyFromFormatInfo.\nimport { encodeASD } from \"../codec/asd.js\";\nimport {\n AttachCatalogInfoSchema,\n CopyFromFormatInfoSchema,\n} from \"../generated/vgi-protocol-schemas.js\";\n\nexport interface CopyFromFormatInfo {\n /** Free-text comment (CopyFromFunction's `copyFromComment`). */\n comment?: string | null;\n /** Function/format tags. */\n tags: Record<string, string>;\n /** The `FORMAT` identifier users type (single global namespace). */\n format_name: string;\n /** Registered name of the worker function that performs the read. */\n handler: string;\n /**\n * Serialized Arrow schema of the format's options (same encoding as\n * `FunctionInfo.arguments`), each field carrying type / `vgi_doc` description.\n */\n options: Uint8Array;\n /** `\"from\"` / `\"to\"` / `\"both\"` — the COPY direction this format serves. */\n direction: string;\n /** Intrinsic documentation from the handler's description. */\n description: string;\n /**\n * COPY ... TO only — when true the writer requires rows in source order, so\n * the extension uses a single-threaded sink (`REGULAR_COPY_TO_FILE`) instead\n * of the default parallel sharded write. Set via `Meta.sinkOrderDependent`\n * on a CopyToFunction; always false for readers. Mirrors vgi-python's\n * `CopyFromFormatInfo.ordered`.\n */\n ordered: boolean;\n}\n\n/** Encode a CopyFromFormatInfo to Arrow IPC bytes (single-row batch). */\nexport const encodeCopyFromFormatInfo = (v: CopyFromFormatInfo): Uint8Array =>\n encodeASD(CopyFromFormatInfoSchema, {\n comment: v.comment ?? null,\n tags: v.tags ?? {},\n format_name: v.format_name,\n handler: v.handler,\n options: v.options,\n direction: v.direction ?? \"from\",\n description: v.description ?? \"\",\n ordered: v.ordered ?? false,\n });\n\n/**\n * A companion catalog the client should ATTACH when this VGI catalog attaches\n * (lakehouse federation). Serialized into `CatalogAttachResult.attach_catalogs`;\n * the C++ VGI extension attaches each at VGI-attach time so multi-branch\n * catalog-table branches can resolve tables in a companion DuckLake / Iceberg /\n * Postgres / DuckDB.\n */\nexport interface AttachCatalogInfo {\n /** ATTACH alias; also a catalog-table ScanBranch's `sourceCatalog`. */\n alias: string;\n /** ATTACH target — a path or DSN (e.g. `ducklake:sqlite:/data/meta.sqlite`). */\n target: string;\n /** DuckDB db type; empty => inferred from the target scheme prefix. */\n db_type?: string;\n /** Extra ATTACH options forwarded verbatim (e.g. DuckLake DATA_PATH). */\n options?: Record<string, string>;\n /** Attach hidden (excluded from duckdb_databases()); still resolvable. */\n hidden?: boolean;\n /** When true, attach failure fails the whole VGI ATTACH. */\n required?: boolean;\n /** Optional named secret to inject into the companion's ATTACH options. */\n secret_ref?: string;\n}\n\n/** Encode an AttachCatalogInfo to Arrow IPC bytes (single-row batch). */\nexport const encodeAttachCatalogInfo = (v: AttachCatalogInfo): Uint8Array =>\n encodeASD(AttachCatalogInfoSchema, {\n alias: v.alias,\n target: v.target,\n db_type: v.db_type ?? \"\",\n options: v.options ?? {},\n hidden: v.hidden ?? false,\n required: v.required ?? false,\n secret_ref: v.secret_ref ?? \"\",\n });\n\n// ============================================================================\n// ScanFunctionResult — typed result for catalog_table_scan_function_get.\n// Mirrors vgi-python's ScanFunctionResult (catalog_interface.py:380).\n// ============================================================================\n\nimport { deserializeBatch, serializeBatch, batchFromColumns } from \"../util/arrow/index.js\";\nimport { schema as schema_, field as field_, type VgiDataType, type VgiField } from \"../arrow/index.js\";\nimport { toUint8Array } from \"../util/bytes.js\";\nimport { ScanBranchSchema } from \"../generated/vgi-protocol-schemas.js\";\n\n/**\n * Result from `tableScanFunctionGet` — tells the VGI DuckDB extension which\n * DuckDB function to call to obtain the data for a table.\n */\nexport interface ScanFunctionResult {\n /** The DuckDB function to call (e.g. \"read_parquet\"). */\n functionName: string;\n /** Positional arguments, decoded from the inner Arrow batch. */\n positionalArguments: unknown[];\n /** Named arguments, decoded from the inner Arrow batch. */\n namedArguments: Record<string, unknown>;\n /** DuckDB extensions to load before calling the function. */\n requiredExtensions: string[];\n}\n\n/**\n * Decode a ScanFunctionResult from a wire-shape inner result dict.\n *\n * The wire shape (per ScanFunctionResultSchema) is\n * `{ function_name: utf8, arguments: binary, required_extensions: list<utf8> }`,\n * where `arguments` is a serialized single-row batch with one column per\n * argument: `arg_<index>` for positional args, the bare name for named args.\n */\nexport function decodeScanFunctionResult(inner: Record<string, unknown>): ScanFunctionResult {\n const argsBytes = inner.arguments;\n const positionalArguments: unknown[] = [];\n const namedArguments: Record<string, unknown> = {};\n\n if (argsBytes != null) {\n const batch = deserializeBatch(toUint8Array(argsBytes));\n for (const field of batch.schema.fields) {\n const col = batch.getChild(field.name);\n const value = col ? col.get(0) : null;\n if (field.name.startsWith(\"arg_\")) {\n const idx = parseInt(field.name.slice(4), 10);\n while (positionalArguments.length <= idx) positionalArguments.push(null);\n positionalArguments[idx] = value;\n } else {\n namedArguments[field.name] = value;\n }\n }\n }\n\n const exts = inner.required_extensions;\n const requiredExtensions: string[] = exts == null\n ? []\n : (Array.isArray(exts) ? exts : [...(exts as Iterable<unknown>)])\n .filter((v) => v != null)\n .map(String);\n\n return {\n functionName: String(inner.function_name ?? \"\"),\n positionalArguments,\n namedArguments,\n requiredExtensions,\n };\n}\n\n/**\n * Synthesise a one-branch `ScanBranchesResult` wire dict from a legacy\n * `tableScanFunctionGet` wire result. Mirrors vgi-python's default\n * `table_scan_branches_get` (catalog_interface.py): a single-source worker is\n * automatically compatible with the branches-aware C++ side.\n *\n * Each branch is its own IPC stream carried in a `list<binary>` column. The\n * legacy result's `arguments` field is already the nested-IPC form\n * `ScanBranch` expects, so it passes through untouched.\n */\nexport function singleBranchResult(\n legacy: { function_name: string; arguments: unknown; required_extensions?: string[] },\n): { branches: Uint8Array[]; required_extensions: string[] } {\n const branchBatch = batchFromColumns(\n {\n function_name: [legacy.function_name],\n arguments: [toUint8Array(legacy.arguments)],\n branch_filter: [null],\n writable: [false],\n source_catalog: [null],\n source_schema: [null],\n source_table: [null],\n },\n ScanBranchSchema as any,\n );\n return {\n branches: [serializeBatch(branchBatch)],\n required_extensions: legacy.required_extensions ?? [],\n };\n}\n\n/**\n * One physical source backing a multi-branch scan, in the shape the\n * `buildScanBranchesResult` helper consumes. Mirrors vgi-python's\n * `ScanBranch` (catalog_interface.py).\n *\n * Each scalar argument carries an explicit Arrow `type` so the nested\n * arguments batch is built with the wire type the C++ binder expects\n * (e.g. utf8 for file paths, int64 for counts).\n */\nexport interface ScanBranchInput {\n /** DuckDB function to call for this branch (e.g. \"sequence\", \"read_parquet\"). */\n functionName: string;\n /** Positional scalar arguments, each with its Arrow type. */\n positionalArguments?: { value: unknown; type: VgiDataType }[];\n /** Named scalar arguments, each with its Arrow type. */\n namedArguments?: Record<string, { value: unknown; type: VgiDataType }>;\n /** Optional SQL filter text AND'd into every scan of this branch. */\n branchFilter?: string | null;\n /** Declares this branch as the INSERT target (at most one per table). */\n writable?: boolean;\n /**\n * Catalog-table branch (lakehouse federation): leave `functionName` empty and\n * set these to scan the base table\n * `sourceCatalog.sourceSchema.sourceTable` in a companion catalog instead of\n * calling a table function.\n */\n sourceCatalog?: string | null;\n sourceSchema?: string | null;\n sourceTable?: string | null;\n}\n\n/**\n * Serialize a single branch's arguments to the nested-IPC form `ScanBranch`\n * expects: a 1-row batch with one column per argument — `arg_<index>` for\n * positional args, the bare name for named args. Mirrors Python's\n * `ScanBranch.to_row_dict` argument handling.\n */\nfunction serializeBranchArguments(branch: ScanBranchInput): Uint8Array {\n const fields: VgiField[] = [];\n const values: Record<string, unknown[]> = {};\n\n const positional = branch.positionalArguments ?? [];\n positional.forEach((arg, index) => {\n const name = `arg_${index}`;\n fields.push(field_(name, arg.type, true));\n values[name] = [arg.value];\n });\n\n for (const [name, arg] of Object.entries(branch.namedArguments ?? {})) {\n fields.push(field_(name, arg.type, true));\n values[name] = [arg.value];\n }\n\n const batchSchema = schema_(fields);\n // batchFromColumns handles the zero-column case by producing a 1-row\n // empty batch — same as Python's RecordBatch.from_pylist([{}]).\n return serializeBatch(batchFromColumns(values, batchSchema));\n}\n\n/**\n * Build a multi-branch `ScanBranchesResult` wire dict from explicit branch\n * definitions. Each branch becomes its own 1-row `ScanBranchSchema` IPC\n * stream carried in the `branches` list<binary> column. Mirrors vgi-python's\n * `ScanBranchesResult` construction in the test fixture's\n * `table_scan_branches_get`.\n *\n * An empty `branches` list is serialized verbatim — the C++ side loud-fails\n * on it (that asymmetry is exercised by multi_branch_empty_branches.test).\n */\nexport function buildScanBranchesResult(\n branches: ScanBranchInput[],\n requiredExtensions: string[] = [],\n): { branches: Uint8Array[]; required_extensions: string[] } {\n const serializedBranches = branches.map((branch) => {\n const branchBatch = batchFromColumns(\n {\n function_name: [branch.functionName],\n arguments: [serializeBranchArguments(branch)],\n branch_filter: [branch.branchFilter ?? null],\n writable: [branch.writable ?? false],\n source_catalog: [branch.sourceCatalog ?? null],\n source_schema: [branch.sourceSchema ?? null],\n source_table: [branch.sourceTable ?? null],\n },\n ScanBranchSchema as any,\n );\n return serializeBatch(branchBatch);\n });\n return {\n branches: serializedBranches,\n required_extensions: requiredExtensions,\n };\n}\n\n// ============================================================================\n// CatalogInterface abstract class\n// ============================================================================\n\n/**\n * Catalog method return type — sync `T` or `Promise<T>`. The framework's\n * dispatch handlers `await` every catalog call, so async overrides work\n * out of the box. Default impls return sync values.\n */\ntype Awaitable<T> = T | Promise<T>;\n\nfunction isPromise<T>(v: Awaitable<T>): v is Promise<T> {\n return v != null && typeof (v as any).then === \"function\";\n}\n\nexport abstract class CatalogInterface {\n // Required overrides\n abstract catalogs(): string[];\n /**\n * Attach this catalog. The framework already validates ATTACH options\n * (name + type) against the specs the worker advertises in\n * `catalogsInfo().attach_option_specs`, so `options` arrives as a\n * validated, decoded `{name: value}` dict with typed column values.\n * Use `{}` if no options were supplied.\n */\n abstract attach(\n name: string,\n options?: Record<string, unknown>,\n dataVersionSpec?: string | null,\n implementationVersion?: string | null,\n ): Awaitable<CatalogAttachResult>;\n /**\n * List the catalogs this worker exposes with their version metadata. The\n * `implementation_version` / `data_version_spec` come from the CatalogInfo\n * returned by the read-only catalogs() signature below — a versioned worker\n * overrides `catalogs()` / `catalogsInfo()` to advertise real values; the\n * default derives them from the registered descriptor(s).\n */\n catalogsInfo?(): Awaitable<import(\"../generated/vgi-client.js\").CatalogInfo[]>;\n abstract detach(attachOpaqueData: AttachOpaqueData): Awaitable<void>;\n abstract version(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<number>;\n abstract schemas(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<SchemaInfo[]>;\n\n // Default implementations (throw CatalogReadOnlyError)\n create(name: string, onConflict: string, options?: any): Awaitable<void> {\n throw new CatalogReadOnlyError(\"create\");\n }\n drop(name: string): Awaitable<void> {\n throw new CatalogReadOnlyError(\"drop\");\n }\n schemaGet(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<SchemaInfo | null> {\n const all = this.schemas(attachOpaqueData, transactionOpaqueData);\n if (isPromise(all)) {\n return all.then((arr) => arr.find((s) => s.name === name) ?? null);\n }\n return all.find((s) => s.name === name) ?? null;\n }\n schemaCreate(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n comment?: string | null,\n tags?: any,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"schema_create\");\n }\n schemaDrop(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n ignoreNotFound?: boolean,\n cascade?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"schema_drop\");\n }\n schemaContentsTables(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<TableInfo[]> {\n return [];\n }\n schemaContentsViews(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<ViewInfo[]> {\n return [];\n }\n schemaContentsFunctions(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n type: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<FunctionInfo[]> {\n return [];\n }\n tableGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n atUnit?: string,\n atValue?: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<TableInfo | null> {\n return null;\n }\n tableCreate(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columns: Uint8Array,\n onConflict: string,\n notNullConstraints?: number[],\n uniqueConstraints?: number[][],\n checkConstraints?: string[],\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"table_create\");\n }\n tableDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"table_drop\");\n }\n tableScanFunctionGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n atUnit?: string,\n atValue?: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<any> {\n throw new CatalogReadOnlyError(\"table_scan_function_get\");\n }\n /**\n * Return the scan branches for a (possibly multi-source) table. Default\n * delegates to `tableScanFunctionGet` and wraps the single result as a\n * one-branch list, so every single-source catalog is compatible with the\n * branches-aware C++ extension. Override for genuine multi-source tables.\n */\n tableScanBranchesGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n atUnit?: string,\n atValue?: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<any> {\n const legacy = this.tableScanFunctionGet(\n attachOpaqueData, schemaName, name, atUnit, atValue, transactionOpaqueData,\n );\n return isPromise(legacy)\n ? legacy.then((r) => singleBranchResult(r))\n : singleBranchResult(legacy);\n }\n /**\n * Return serialized column statistics for a table, or null if none are\n * available. The result is the IPC bytes of a ColumnStatistics RecordBatch\n * (see src/util/statistics.ts for the schema) wrapped with an optional\n * cache TTL. Callers typically override this to pull stats from a\n * descriptor. Returning null signals \"no stats\" so DuckDB falls back to\n * the function-level `table_function_statistics` path.\n */\n tableColumnStatisticsGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Awaitable<{ bytes: Uint8Array; cacheMaxAgeSeconds: number | null } | null> {\n return null;\n }\n tableCommentSet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n comment?: string | null,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"table_comment_set\");\n }\n tableRename(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n newName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"table_rename\");\n }\n tableColumnAdd(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n columnType: string,\n defaultValue?: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"table_column_add\");\n }\n tableColumnDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"table_column_drop\");\n }\n tableColumnRename(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n newName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"table_column_rename\");\n }\n tableColumnDefaultSet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n defaultValue: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"table_column_default_set\");\n }\n tableColumnDefaultDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"table_column_default_drop\");\n }\n tableColumnTypeChange(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n newType: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"table_column_type_change\");\n }\n tableNotNullSet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"table_not_null_set\");\n }\n tableNotNullDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"table_not_null_drop\");\n }\n viewGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<ViewInfo | null> {\n return null;\n }\n viewCreate(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n definition: string,\n onConflict: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"view_create\");\n }\n viewDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"view_drop\");\n }\n viewRename(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n newName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"view_rename\");\n }\n viewCommentSet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n comment?: string | null,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"view_comment_set\");\n }\n macroGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<MacroInfo | null> {\n return null;\n }\n macroCreate(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n macroType: MacroType,\n parameters: string[],\n definition: string,\n onConflict: string,\n parameterDefaultValues?: Uint8Array | null,\n /**\n * Optional Arrow schema (one nullable field per parameter, in `parameters`\n * order) serialized as IPC bytes, carrying per-parameter descriptions via the\n * `vgi_doc` field metadata key. `null`/omitted when no per-parameter docs are\n * supplied. Build with `macroArgumentsSchema` + `serializeSchema`.\n */\n argumentsSchema?: Uint8Array | null,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"macro_create\");\n }\n macroDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"macro_drop\");\n }\n schemaContentsMacros(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n type: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<MacroInfo[]> {\n return [];\n }\n schemaContentsIndexes(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<IndexInfo[]> {\n return [];\n }\n indexGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<IndexInfo | null> {\n return null;\n }\n /**\n * List custom `COPY ... FROM` formats advertised by this catalog. Catalog-level\n * (not schema-scoped). The default returns an empty list, so catalogs that\n * don't define COPY formats are unaffected. The VGI extension treats an empty\n * list (or a not-implemented method) as \"no custom formats\". Mirrors\n * vgi-python's `CatalogInterface.copy_from_formats`.\n */\n copyFromFormats(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Awaitable<CopyFromFormatInfo[]> {\n return [];\n }\n transactionBegin(attachOpaqueData: AttachOpaqueData): Awaitable<Uint8Array | null> {\n return null;\n }\n transactionCommit(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData: TransactionOpaqueData\n ): Awaitable<void> {}\n transactionRollback(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData: TransactionOpaqueData\n ): Awaitable<void> {}\n}\n\n",
|
|
51
|
-
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// ReadOnlyCatalogInterface: derives catalog from registered functions + descriptors.\n\nimport { type VgiSchema, schema as schema_, type VgiField, field, type VgiDataType, int64, utf8, binary, bool, nullType, list, isInt } from \"../arrow/index.js\";\nimport {\n CatalogInterface,\n type AttachOpaqueData,\n type TransactionOpaqueData,\n type CatalogAttachResult,\n type SchemaInfo,\n type CatalogInfo,\n type TableInfo,\n type ViewInfo,\n type FunctionInfo,\n type MacroInfo,\n type IndexInfo,\n type IndexConstraintType,\n type CopyFromFormatInfo,\n encodeAttachCatalogInfo,\n} from \"./interface.js\";\nimport type { CatalogDescriptor, SchemaDescriptor, TableDescriptor, ViewDescriptor, MacroDescriptor, SettingDescriptor, SecretTypeDescriptor, ForeignKeyDef, DefaultValue } from \"./descriptors.js\";\nimport { serializeColumnStatistics } from \"../util/statistics.js\";\nimport type { VgiFunction } from \"../functions/types.js\";\nimport type { FunctionRegistry } from \"../functions/registry.js\";\nimport { argumentSpecsToSchema, macroArgumentsSchema } from \"../arguments/argument-spec.js\";\nimport { serializeSchema, serializeBatch, emptyBatch, batchFromColumns } from \"../util/arrow/index.js\";\nimport { resolveMetadata } from \"../metadata/resolve.js\";\nimport { FunctionStability, NullHandling, OrderPreservation, DEFAULT_MAX_WORKERS } from \"../types.js\";\nimport { Arguments } from \"../arguments/arguments.js\";\n\nexport class ReadOnlyCatalogInterface extends CatalogInterface {\n private _descriptor: CatalogDescriptor;\n private _registry: FunctionRegistry;\n private _attachments = new Map<string, AttachOpaqueData>();\n private _version = 1;\n\n constructor(descriptor: CatalogDescriptor, registry: FunctionRegistry) {\n super();\n this._descriptor = descriptor;\n this._registry = registry;\n }\n\n catalogs(): string[] {\n return [this._descriptor.name];\n }\n\n // Advertise the catalog's discovery record. The declarative path carries no\n // version metadata or attach option specs, but it does surface the optional\n // `source_url` from the descriptor so it flows through `catalog_catalogs`\n // (DuckDB's `duckdb_databases()`).\n override catalogsInfo(): CatalogInfo[] {\n return [{\n name: this._descriptor.name,\n implementation_version: null,\n data_version_spec: null,\n attach_option_specs: [],\n releases: [],\n source_url: this._descriptor.sourceUrl ?? null,\n }];\n }\n\n attach(\n name: string,\n options?: Record<string, unknown>,\n dataVersionSpec?: string | null,\n implementationVersion?: string | null,\n ): CatalogAttachResult | Promise<CatalogAttachResult> {\n if (!this.catalogs().includes(name)) {\n throw new Error(`No worker handles catalog '${name}'`);\n }\n\n const attachOpaqueData = new Uint8Array(16);\n crypto.getRandomValues(attachOpaqueData);\n this._attachments.set(name, attachOpaqueData);\n\n const settings = (this._descriptor.settings ?? []).map((s) =>\n serializeSetting(s)\n );\n\n const secretTypes = (this._descriptor.secretTypes ?? []).map((s) =>\n serializeSecretType(s)\n );\n\n const attachCatalogs = (this._descriptor.attachCatalogs ?? []).map((c) =>\n encodeAttachCatalogInfo(c)\n );\n\n // Auto-derive supportsTimeTravel from table descriptors\n const hasTimeTravel = this._descriptor.schemas.some(\n (s) => s.tables?.some((t) => t.supportsTimeTravel) ?? false\n );\n\n return {\n attach_opaque_data: attachOpaqueData,\n supports_transactions: false,\n supports_time_travel: hasTimeTravel,\n catalog_version_frozen: true,\n catalog_version: this._version,\n attach_opaque_data_required: true,\n default_schema: this._descriptor.defaultSchema ?? \"main\",\n settings,\n secret_types: secretTypes,\n attach_catalogs: attachCatalogs,\n comment: this._descriptor.comment ?? null,\n tags: this._descriptor.tags ?? {},\n // Advertise true so DuckDB routes catalog_table_column_statistics_get\n // for tables whose TableInfo.supports_column_statistics is also true.\n supports_column_statistics: true,\n resolved_data_version: null,\n resolved_implementation_version: null,\n };\n }\n\n detach(attachOpaqueData: AttachOpaqueData): void {\n // Remove attachment\n for (const [name, id] of this._attachments) {\n if (bufferEquals(id, attachOpaqueData)) {\n this._attachments.delete(name);\n break;\n }\n }\n }\n\n version(attachOpaqueData: AttachOpaqueData, transactionOpaqueData?: TransactionOpaqueData): number | Promise<number> {\n return this._version;\n }\n\n schemas(attachOpaqueData: AttachOpaqueData, transactionOpaqueData?: TransactionOpaqueData): SchemaInfo[] {\n return this._descriptor.schemas.map((s) => ({\n attach_opaque_data: attachOpaqueData,\n name: s.name,\n comment: s.comment ?? null,\n tags: s.tags ?? {},\n estimated_object_count: this._estimatedObjectCount(s),\n }));\n }\n\n // Compute per-kind object counts so the C++ extension's eager-load gate\n // can skip bulk RPCs for empty kinds. Zero is load-bearing — absence\n // would read as \"unknown=1\" and suppress the bypass. Function counts are\n // partitioned by kind to match python's behavior.\n private _estimatedObjectCount(s: SchemaDescriptor): Record<string, number> {\n let scalar = 0, aggregate = 0, table = 0;\n for (const f of s.functions ?? []) {\n if (f.kind === \"scalar\") scalar++;\n else if ((f.kind as string) === \"aggregate\") aggregate++;\n else table++; // \"table\" and \"table_in_out\"\n }\n return {\n table: s.tables?.length ?? 0,\n view: s.views?.length ?? 0,\n scalar_function: scalar,\n aggregate_function: aggregate,\n table_function: table,\n macro: s.macros?.length ?? 0,\n index: s.indexes?.length ?? 0,\n };\n }\n\n override schemaGet(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): SchemaInfo | null {\n const desc = this._descriptor.schemas.find((s) => s.name === name);\n if (!desc) return null;\n return {\n attach_opaque_data: attachOpaqueData,\n name: desc.name,\n comment: desc.comment ?? null,\n tags: desc.tags ?? {},\n estimated_object_count: this._estimatedObjectCount(desc),\n };\n }\n\n override async schemaContentsTables(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Promise<TableInfo[]> {\n const schema = this._descriptor.schemas.find((s) => s.name === name);\n if (!schema || !schema.tables) return [];\n\n return await Promise.all(schema.tables.map(async (t) => {\n // Resolve the column schema\n let colSchema: VgiSchema;\n if (t.columns) {\n colSchema = t.columns;\n } else if (t.function) {\n const func = t.function;\n const dummyArgs = t.arguments ?? new Arguments();\n try {\n const bindRequest = {\n function_name: func.meta.name,\n arguments: dummyArgs,\n function_type: \"table\" as any,\n input_schema: null,\n settings: null,\n secrets: null,\n attach_opaque_data: attachOpaqueData,\n transaction_opaque_data: null,\n resolved_secrets_provided: false,\n };\n const response = await func.bind(bindRequest);\n colSchema = response.output_schema;\n } catch {\n colSchema = schema_([]);\n }\n } else {\n colSchema = schema_([]);\n }\n\n // Apply defaults as Arrow field metadata\n if (t.defaults) {\n colSchema = applyDefaults(colSchema, t.defaults);\n }\n // Apply generated-column expressions as Arrow field metadata\n // (`generated_expression`). DuckDB registers these columns as GENERATED\n // and evaluates the SQL expression client-side — the scan function\n // should not return values for them.\n if (t.generatedColumns) {\n colSchema = applyGeneratedColumns(colSchema, t.generatedColumns);\n }\n // Apply per-column comments as Arrow field metadata (matches Python's\n // `comment` metadata key on columns).\n if (t.columnComments) {\n colSchema = applyColumnComments(colSchema, t.columnComments);\n }\n\n const columns = serializeSchema(colSchema);\n\n // Resolve constraint column names → indices\n const notNullIndices = resolveIndices(colSchema, t.notNull);\n const uniqueIndices = resolveIndexGroups(colSchema, t.unique);\n const pkIndices = resolveIndexGroups(colSchema, t.primaryKey);\n const fkBytes = serializeForeignKeys(t.foreignKey, name);\n\n // Validate required_filters: an AND (outer list) of OR-groups (inner\n // lists). Each OR-group must be non-empty, and the leading dotted segment\n // of each path must be a real column on this table. Struct subfield\n // validity is not checked here — DuckDB's binder catches typos at scan\n // time, and the descriptor doesn't unpack STRUCT subfields. (Mirrors\n // vgi-python's Table descriptor validation.)\n const requiredFilters = t.requiredFilters ?? [];\n if (requiredFilters.length > 0) {\n const columnNames = new Set(colSchema.fields.map((f) => f.name));\n for (const group of requiredFilters) {\n if (!group || group.length === 0) {\n throw new Error(\n `Table '${t.name}': requiredFilters must not contain empty groups`\n );\n }\n for (const path of group) {\n if (!path) {\n throw new Error(\n `Table '${t.name}': requiredFilters must not contain empty strings`\n );\n }\n const head = path.split(\".\", 1)[0];\n if (!columnNames.has(head)) {\n throw new Error(\n `Table '${t.name}': requiredFilters path '${path}' references ` +\n `unknown column '${head}'. Available columns: ${[...columnNames].sort().join(\", \")}`\n );\n }\n }\n }\n }\n\n return {\n comment: t.comment ?? null,\n tags: t.tags ?? {},\n name: t.name,\n schema_name: name,\n columns,\n not_null_constraints: notNullIndices,\n unique_constraints: uniqueIndices,\n check_constraints: t.check ?? [],\n primary_key_constraints: pkIndices,\n foreign_key_constraints: fkBytes,\n supports_insert: false,\n supports_update: false,\n supports_delete: false,\n supports_returning: false,\n supports_column_statistics: t.statistics != null && Object.keys(t.statistics).length > 0,\n // Inline scan_function only for purely function-backed tables.\n // When explicit `columns` are also declared, the table is on the\n // legacy catalog_table_scan_function_get path; inlining would\n // shadow the per-call dispatch and prevent workers from varying\n // the scan function (e.g. version-resolved time-travel).\n scan_function: t.function && !t.columns\n ? inlineScanFunction(t.function, t.arguments)\n : null,\n insert_function: null,\n update_function: null,\n delete_function: null,\n cardinality_estimate: t.inlinedCardinality\n ? Number(t.inlinedCardinality.estimate)\n : null,\n cardinality_max: t.inlinedCardinality\n ? Number(t.inlinedCardinality.max)\n : null,\n required_filters: requiredFilters,\n };\n }));\n }\n\n override tableColumnStatisticsGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): { bytes: Uint8Array; cacheMaxAgeSeconds: number | null } | null {\n const schema = this._descriptor.schemas.find((s) => s.name === schemaName);\n if (!schema || !schema.tables) return null;\n const table = schema.tables.find((t) => t.name === name);\n if (!table || !table.statistics) return null;\n const stats = Object.values(table.statistics);\n if (stats.length === 0) return null;\n return {\n bytes: serializeColumnStatistics(stats),\n cacheMaxAgeSeconds: table.statisticsCacheMaxAgeSeconds ?? null,\n };\n }\n\n override schemaContentsViews(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): ViewInfo[] {\n const schema = this._descriptor.schemas.find((s) => s.name === name);\n if (!schema || !schema.views) return [];\n\n return schema.views.map((v) => ({\n comment: v.comment ?? null,\n tags: v.tags ?? {},\n name: v.name,\n schema_name: name,\n definition: v.definition,\n column_comments: v.columnComments ?? {},\n }));\n }\n\n override schemaContentsFunctions(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n type: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): FunctionInfo[] {\n const schema = this._descriptor.schemas.find((s) => s.name === name);\n if (!schema || !schema.functions) return [];\n\n return schema.functions\n .filter((f) => {\n // Filter by SchemaObjectType (lowercase on the wire: scalar_function,\n // table_function, aggregate_function). Unknown filter values pass\n // everything through. Defensive String() coerces null/undefined.\n const t = String(type ?? \"\").toUpperCase();\n if (t === \"SCALAR_FUNCTION\") return f.kind === \"scalar\";\n if (t === \"TABLE_FUNCTION\") return f.kind === \"table\" || f.kind === \"table_in_out\" || (f.kind as string) === \"table_buffering\";\n if (t === \"AGGREGATE_FUNCTION\") return (f.kind as string) === \"aggregate\";\n return true;\n })\n .map((f) => {\n const meta = resolveMetadata(f);\n const argSchema = argumentSpecsToSchema(f.argumentSpecs);\n const argBytes = serializeSchema(argSchema);\n\n // Use the function's default output schema if available,\n // otherwise empty schema (table functions determine output at bind time)\n const outputSchemaBytes = serializeSchema(\n f.defaultOutputSchema ?? schema_([])\n );\n\n const requiredSecrets = (meta.requiredSecrets ?? []).map(\n (secretType: string) => ({ secret_type: secretType, scope: null, secret_name: null })\n );\n\n // Function-level tags surfaced into duckdb_functions().tags. The wire\n // map is string→string, so the metadata linter (vgi-lint-check) and any\n // worker-side conventions (e.g. VGI307's `vgi.columns_md` on a dynamic\n // table function) can read them. Worker-provided tags are MERGED OVER\n // any SDK-derived tags rather than replacing them — and derived tags\n // never clobber worker-set keys. There are no SDK-derived function tags\n // today (examples flow into FunctionInfo.examples, not a tag), so the\n // derived base is empty; the merge keeps that invariant if one is ever\n // added.\n const derivedTags: Record<string, string> = {};\n const tags: Record<string, string> = { ...derivedTags, ...(meta.tags ?? {}) };\n\n return {\n comment: null,\n tags,\n name: f.meta.name,\n schema_name: name,\n function_type: meta.functionType.toUpperCase() as \"SCALAR\" | \"TABLE\" | \"TABLE_BUFFERING\" | \"AGGREGATE\",\n arguments: argBytes,\n output_schema: outputSchemaBytes,\n stability: meta.stability as any,\n null_handling: meta.nullHandling as any,\n description: meta.description,\n examples: meta.examples.map((e) => ({\n sql: e.sql,\n description: e.description,\n expected_output: null,\n })),\n categories: meta.categories,\n projection_pushdown: meta.projectionPushdown,\n filter_pushdown: meta.filterPushdown,\n sampling_pushdown: meta.samplingPushdown,\n // Mirror Python: None for scalars, the meta flag for table functions.\n // The C++ extension only honours this for rowid-bearing tables.\n late_materialization:\n (f.kind as string) === \"table\" && f.meta.lateMaterialization === true ? true : null,\n supported_expression_filters: meta.supportedExpressionFilters,\n order_preservation: meta.preservesOrder as any,\n max_workers: meta.maxWorkers ?? DEFAULT_MAX_WORKERS,\n // Opt-in features the read-only catalog's functions do not use; the\n // regenerated FunctionInfo schema requires these non-nullable\n // fields, so default them explicitly. table_buffering functions\n // thread their batch_index requirement through supports_batch_index\n // so the C++ operator declares RequiredPartitionInfo=BatchIndex.\n supports_batch_index:\n ((f.kind as string) === \"table_buffering\" && f.meta.requiresInputBatchIndex === true) ||\n ((f.kind as string) === \"table\" && f.meta.supportsBatchIndex === true),\n partition_kind:\n (f.kind as string) === \"table\" && f.meta.partitionKind\n ? f.meta.partitionKind\n : \"NOT_PARTITIONED\",\n order_dependent: meta.orderDependent as any,\n distinct_dependent: meta.distinctDependent as any,\n supports_window: false,\n streaming_partitioned: false,\n // table_in_out functions with a finalize callback, AND every\n // table_buffering function (the Source phase always runs), get the\n // FINALIZE init() phase. Advertising has_finalize=true on a function\n // without it makes DuckDB call FinalExecute and crash with\n // 'FinalExecute not supported for project_input'.\n has_finalize:\n (f.kind === \"table_in_out\" && f.meta.hasFinalize === true) ||\n (f.kind as string) === \"table_buffering\",\n source_order_dependent:\n (f.kind as string) === \"table_buffering\" && f.meta.sourceOrderDependent === true,\n sink_order_dependent:\n (f.kind as string) === \"table_buffering\" && f.meta.sinkOrderDependent === true,\n requires_input_batch_index:\n (f.kind as string) === \"table_buffering\" && f.meta.requiresInputBatchIndex === true,\n // Blended (\"UNNEST-style\") table-in-out: positional args ARE the\n // per-row input columns (real typed args, no TABLE placeholder), so\n // one registration serves literal / column / LATERAL call shapes.\n // Set by defineRowTransformFunction; the C++ extension reads it to\n // enter the in-out registration branch with real-typed args and\n // drive the literal single-row scan-mode. False for scalars —\n // mirrors Python's `input_from_args=False if is_scalar else ...`.\n input_from_args:\n f.kind === \"table_in_out\" && f.meta.inputFromArgs === true,\n required_settings: meta.requiredSettings,\n required_secrets: requiredSecrets.map((s) => ({\n secret_type: s.secret_type,\n scope: s.scope,\n secret_name: s.secret_name,\n })),\n };\n });\n }\n\n override schemaContentsMacros(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n type: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): MacroInfo[] {\n const schema = this._descriptor.schemas.find((s) => s.name === name);\n if (!schema || !schema.macros) return [];\n\n return schema.macros\n .filter((m) => {\n // Defensive String() — see schemaContentsFunctions for rationale.\n const t = String(type ?? \"\").toLowerCase();\n if (t === \"scalar_macro\" && m.macroType !== \"scalar\") return false;\n if (t === \"table_macro\" && m.macroType !== \"table\") return false;\n return true;\n })\n .map((m) => ({\n comment: m.comment ?? null,\n tags: m.tags ?? {},\n name: m.name,\n schema_name: name,\n macro_type: (m.macroType === \"scalar\" ? \"SCALAR\" : \"TABLE\") as \"SCALAR\" | \"TABLE\",\n parameters: m.parameters,\n parameter_default_values: m.parameterDefaultValues ?? new Uint8Array(0),\n definition: m.definition,\n // One nullable Arrow field per parameter (in order), carrying each\n // documented parameter's description via the vgi_doc field-metadata key\n // (the same channel functions use). Type = default-value type when known\n // else null. Serialized as IPC bytes into the generated schema slot.\n arguments_schema: serializeSchema(\n macroArgumentsSchema(m.parameters, m.parameterDefaultValues, m.parameterDocs),\n ),\n }));\n }\n\n override schemaContentsIndexes(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): IndexInfo[] {\n const schema = this._descriptor.schemas.find((s) => s.name === name);\n if (!schema || !schema.indexes) return [];\n return schema.indexes.map((idx) => ({\n comment: idx.comment ?? null,\n tags: idx.tags ?? {},\n name: idx.name,\n schema_name: name,\n table_name: idx.tableName,\n index_type: idx.indexType ?? \"ART\",\n constraint_type: (idx.constraintType ?? \"NONE\") as IndexConstraintType,\n expressions: idx.expressions,\n options: idx.options ?? {},\n }));\n }\n\n override indexGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): IndexInfo | null {\n const all = this.schemaContentsIndexes(attachOpaqueData, schemaName, transactionOpaqueData);\n return all.find((i) => i.name === name) ?? null;\n }\n\n override macroGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): MacroInfo | null {\n const macros = this.schemaContentsMacros(attachOpaqueData, schemaName, \"SCALAR_MACRO\", transactionOpaqueData);\n const tableMacros = this.schemaContentsMacros(attachOpaqueData, schemaName, \"TABLE_MACRO\", transactionOpaqueData);\n const all = [...macros, ...tableMacros];\n return all.find((m) => m.name.toLowerCase() === name.toLowerCase()) ?? null;\n }\n\n override tableScanFunctionGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n atUnit?: string,\n atValue?: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): any {\n validateAtParams(atUnit, atValue);\n\n // Find the table descriptor\n const schema = this._descriptor.schemas.find((s) => s.name === schemaName);\n if (!schema || !schema.tables) {\n throw new Error(`Table '${name}' not found in schema '${schemaName}'`);\n }\n const table = schema.tables.find((t) => t.name === name);\n if (!table) {\n throw new Error(`Table '${name}' not found in schema '${schemaName}'`);\n }\n\n // Reject AT clause on tables that don't support time travel\n if (atUnit && !table.supportsTimeTravel) {\n throw new Error(`Table '${schemaName}.${name}' does not support time travel queries`);\n }\n\n if (table.function) {\n // Function-backed table\n const args = table.arguments ?? new Arguments();\n const argSchema = argumentSpecsToSchema(table.function.argumentSpecs);\n const argBytes = serializeArgsBatch(args, argSchema);\n return {\n function_name: table.function.meta.name,\n arguments: argBytes,\n required_extensions: [],\n };\n }\n\n throw new Error(`Table '${name}' is not function-backed`);\n }\n\n override async tableGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n atUnit?: string,\n atValue?: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Promise<TableInfo | null> {\n validateAtParams(atUnit, atValue);\n\n // Find the table descriptor to check supports_time_travel\n const schema = this._descriptor.schemas.find((s) => s.name === schemaName);\n if (schema?.tables) {\n const tableDesc = schema.tables.find((t) => t.name === name);\n if (tableDesc && atUnit && !tableDesc.supportsTimeTravel) {\n throw new Error(`Table '${schemaName}.${name}' does not support time travel queries`);\n }\n }\n\n const tables = await this.schemaContentsTables(attachOpaqueData, schemaName, transactionOpaqueData);\n return tables.find((t) => t.name === name) ?? null;\n }\n\n override viewGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): ViewInfo | null {\n const views = this.schemaContentsViews(attachOpaqueData, schemaName, transactionOpaqueData);\n return views.find((v) => v.name === name) ?? null;\n }\n\n // Advertise every COPY-FROM format reader registered in this catalog. Walks\n // the descriptor's functions for those carrying `meta.copyFromFormat` (set by\n // defineCopyFromFunction) and converts each into a CopyFromFormatInfo. The\n // option schema reuses the same argument serialization as functions, so\n // option types / defaults / docs surface identically to\n // vgi_function_arguments(). Mirrors vgi-python's\n // ReadOnlyCatalogInterface.copy_from_formats.\n override copyFromFormats(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData?: TransactionOpaqueData,\n ): CopyFromFormatInfo[] {\n const formats: CopyFromFormatInfo[] = [];\n // Key by (direction, format): a FROM-format and a TO-format may legitimately\n // share a name; the extension scopes by attach alias anyway. Mirrors\n // vgi-python's `dedup_key = f\"{direction}:{fmt}\"`.\n const seen = new Set<string>();\n for (const schema of this._descriptor.schemas) {\n for (const f of schema.functions ?? []) {\n // A format is a COPY FROM reader (copyFromFormat) or a COPY TO writer\n // (copyToFormat). The RPC name is historical; it returns all directions.\n const isTo = !!f.meta.copyToFormat;\n const fmt = isTo ? f.meta.copyToFormat : f.meta.copyFromFormat;\n if (!fmt) continue;\n const direction = isTo\n ? f.meta.copyToDirection ?? \"to\"\n : f.meta.copyFromDirection ?? \"from\";\n const dedupKey = `${direction}:${fmt}`;\n if (seen.has(dedupKey)) continue;\n seen.add(dedupKey);\n const meta = resolveMetadata(f);\n // Only the declared options are part of the format's option list — the\n // synthetic table-input (\"data\") spec a TO writer carries as a\n // table_buffering function is not an option (mirrors vgi-python, whose\n // CopyToFunction options are just the Arg-annotated arguments).\n const optionSpecs = f.argumentSpecs.filter((s) => !s.isTableInput);\n const argSchema = argumentSpecsToSchema(optionSpecs);\n // ordered only meaningful for TO writers (single-thread sink ingest).\n const ordered = isTo && f.meta.sinkOrderDependent === true;\n formats.push({\n comment: (isTo ? f.meta.copyToComment : f.meta.copyFromComment) ?? null,\n tags: meta.tags,\n format_name: fmt,\n handler: meta.name,\n options: serializeSchema(argSchema),\n direction,\n description: meta.description ?? \"\",\n ordered,\n });\n }\n }\n return formats;\n }\n}\n\n// ============================================================================\n// Constraint resolution helpers\n// ============================================================================\n\nfunction resolveIndices(schema: VgiSchema, names?: string[]): number[] {\n if (!names || names.length === 0) return [];\n return names.map((n) => {\n const idx = schema.fields.findIndex((f) => f.name === n);\n if (idx < 0) throw new Error(`Column '${n}' not found in schema`);\n return idx;\n });\n}\n\nfunction resolveIndexGroups(schema: VgiSchema, groups?: string[][]): number[][] {\n if (!groups || groups.length === 0) return [];\n return groups.map((group) => resolveIndices(schema, group));\n}\n\nconst FK_SCHEMA = schema_([\n field(\"fk_columns\", list(field(\"item\", utf8(), true)), false),\n field(\"pk_columns\", list(field(\"item\", utf8(), true)), false),\n field(\"referenced_table\", utf8(), false),\n field(\"referenced_schema\", utf8(), false),\n]);\n\nfunction serializeForeignKeys(fks?: ForeignKeyDef[], schemaName?: string): Uint8Array[] {\n if (!fks || fks.length === 0) return [];\n return fks.map((fk) =>\n serializeBatch(\n batchFromColumns(\n {\n fk_columns: [fk.columns],\n pk_columns: [fk.referencedColumns],\n referenced_table: [fk.referencedTable],\n referenced_schema: [fk.referencedSchema ?? schemaName ?? \"main\"],\n },\n FK_SCHEMA\n )\n )\n );\n}\n\nfunction defaultToSql(value: DefaultValue): string {\n if (value === null || value === undefined) return \"NULL\";\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\n if (typeof value === \"number\") return String(value);\n // string — quote as SQL string literal\n const escaped = value.replace(/'/g, \"''\");\n return `'${escaped}'`;\n}\n\nfunction applyDefaults(schema: VgiSchema, defaults: Record<string, DefaultValue>): VgiSchema {\n let result = schema;\n for (const [colName, value] of Object.entries(defaults)) {\n const idx = result.fields.findIndex((f) => f.name === colName);\n if (idx < 0) continue;\n const f = result.fields[idx];\n const existingMeta = f.metadata ? new Map(f.metadata) : new Map<string, string>();\n existingMeta.set(\"default\", defaultToSql(value));\n const newField = field(f.name, f.type, f.nullable, existingMeta);\n const fields = [...result.fields];\n fields[idx] = newField;\n result = schema_(fields);\n }\n return result;\n}\n\nfunction applyGeneratedColumns(schema: VgiSchema, generated: Record<string, string>): VgiSchema {\n let result = schema;\n for (const [colName, expression] of Object.entries(generated)) {\n const idx = result.fields.findIndex((f) => f.name === colName);\n if (idx < 0) continue;\n const f = result.fields[idx];\n const existingMeta = f.metadata ? new Map(f.metadata) : new Map<string, string>();\n existingMeta.set(\"generated_expression\", expression);\n const newField = field(f.name, f.type, f.nullable, existingMeta);\n const fields = [...result.fields];\n fields[idx] = newField;\n result = schema_(fields);\n }\n return result;\n}\n\nfunction applyColumnComments(schema: VgiSchema, comments: Record<string, string>): VgiSchema {\n let result = schema;\n for (const [colName, comment] of Object.entries(comments)) {\n if (!comment) continue;\n const idx = result.fields.findIndex((f) => f.name === colName);\n if (idx < 0) continue;\n const f = result.fields[idx];\n const existingMeta = f.metadata ? new Map(f.metadata) : new Map<string, string>();\n existingMeta.set(\"comment\", comment);\n const newField = field(f.name, f.type, f.nullable, existingMeta);\n const fields = [...result.fields];\n fields[idx] = newField;\n result = schema_(fields);\n }\n return result;\n}\n\n// ============================================================================\n// Setting serialization (matches Python SettingSpec.serialize() format)\n// ============================================================================\n\nconst SETTING_SCHEMA = schema_([\n field(\"name\", utf8(), false),\n field(\"description\", utf8(), false),\n field(\"type\", binary(), false),\n field(\"default_value\", binary(), true),\n]);\n\nfunction serializeSetting(setting: SettingDescriptor): Uint8Array {\n // Serialize the Arrow type as a schema with a single \"value\" field\n const typeSchema = schema_([field(\"value\", setting.type, true)]);\n const typeBytes = serializeSchema(typeSchema);\n\n // Serialize the default value as a single-row batch, or null\n let defaultBytes: Uint8Array | null = null;\n if (setting.defaultValue != null) {\n let val: any = setting.defaultValue;\n // Coerce JS numbers to BigInt for 64-bit integer Arrow types\n if (isInt(setting.type) && (setting.type as any).bitWidth === 64) {\n if (typeof val === \"number\") val = BigInt(val);\n }\n // Coerce BigInt to Number for 32-bit integer Arrow types\n if (isInt(setting.type) && (setting.type as any).bitWidth <= 32) {\n if (typeof val === \"bigint\") val = Number(val);\n }\n defaultBytes = serializeBatch(\n batchFromColumns({ value: [val] }, typeSchema)\n );\n }\n\n // Serialize the outer setting spec batch\n return serializeBatch(\n batchFromColumns(\n {\n name: [setting.name],\n description: [setting.description],\n type: [typeBytes],\n default_value: [defaultBytes],\n },\n SETTING_SCHEMA\n )\n );\n}\n\n// ============================================================================\n// Secret type serialization (matches Python SecretTypeSpec.serialize() format)\n// ============================================================================\n\nconst SECRET_TYPE_SCHEMA = schema_([\n field(\"name\", utf8(), false),\n field(\"description\", utf8(), false),\n field(\"parameters_schema\", binary(), false),\n]);\n\nfunction serializeSecretType(spec: SecretTypeDescriptor): Uint8Array {\n const parametersSchemaBytes = serializeSchema(spec.schema);\n\n return serializeBatch(\n batchFromColumns(\n {\n name: [spec.name],\n description: [spec.description],\n parameters_schema: [parametersSchemaBytes],\n },\n SECRET_TYPE_SCHEMA\n )\n );\n}\n\nfunction bufferEquals(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\nfunction serializeArgsBatch(args: Arguments, argSpecSchema: VgiSchema): Uint8Array {\n // Serialize arguments as a FLAT batch using the argument spec field names.\n // DuckDB's VGI extension reads each column as a named argument and wraps it\n // with \"named_\" prefix when sending the bind request. The function extractArgs\n // will look up these by name as a fallback.\n const fields: VgiField[] = [];\n const values: Record<string, any[]> = {};\n\n for (let i = 0; i < args.positional.length; i++) {\n const val = args.positional[i];\n const specField = argSpecSchema.fields[i];\n const fieldName = specField ? specField.name : `positional_${i}`;\n const fieldType = specField ? specField.type : inferScalarType(val);\n fields.push(field(fieldName, fieldType, true));\n let coerced = val;\n if (isInt(fieldType) && (fieldType as any).bitWidth === 64) {\n coerced = typeof val === \"number\" ? BigInt(val) : val;\n }\n values[fieldName] = [coerced];\n }\n\n for (const [name, val] of args.named) {\n fields.push(field(name, inferScalarType(val), true));\n values[name] = [val];\n }\n\n const batchSchema = schema_(fields);\n\n if (fields.length === 0) {\n return serializeBatch(emptyBatch(batchSchema));\n }\n\n return serializeBatch(batchFromColumns(values, batchSchema));\n}\n\nfunction validateAtParams(atUnit?: string, atValue?: string): void {\n if (Boolean(atUnit) !== Boolean(atValue)) {\n throw new Error(\"at_unit and at_value must both be provided or both be absent\");\n }\n}\n\nfunction inferScalarType(val: any): VgiDataType {\n if (val === null || val === undefined) return nullType();\n if (typeof val === \"string\") return utf8();\n if (typeof val === \"boolean\") return bool();\n if (typeof val === \"number\") return int64();\n if (typeof val === \"bigint\") return int64();\n if (val instanceof Uint8Array || val instanceof ArrayBuffer) return binary();\n return utf8();\n}\n\n// Build the inlined `scan_function` payload for a function-backed table.\n// Mirrors python's _inline_function_result: a serialized one-row batch of\n// ScanFunctionResultSchema (function_name, arguments, required_extensions).\n// The C++ extension uses these bytes verbatim and skips the\n// catalog_table_scan_function_get RPC.\nfunction inlineScanFunction(\n func: VgiFunction,\n args: Arguments | undefined,\n): Uint8Array {\n const argSchema = argumentSpecsToSchema(func.argumentSpecs);\n const argBytes = serializeArgsBatch(args ?? new Arguments(), argSchema);\n const scanSchema = schema_([\n field(\"function_name\", utf8(), false),\n field(\"arguments\", binary(), false),\n field(\n \"required_extensions\",\n list(field(\"item\", utf8(), true)),\n false,\n ),\n ]);\n const batch = batchFromColumns(\n {\n function_name: [func.meta.name],\n arguments: [argBytes],\n required_extensions: [[] as string[]],\n },\n scanSchema,\n );\n return serializeBatch(batch);\n}\n",
|
|
49
|
+
"// ============================================================================\n// GENERATED by vgi.codegen.ts_client. DO NOT EDIT BY HAND.\n//\n// Generator: vgi-gen-ts-client v1\n// Content hash: 80ec56060e88\n//\n// To regenerate:\n// uv run --project ~/Development/vgi-python vgi-gen-ts-client \\\n// > ~/Development/vgi-typescript/src/generated/vgi-client.ts\n// ============================================================================\n\nimport { encodeASD, decodeASD } from \"../codec/asd.js\";\nimport {\n CatalogInfoSchema,\n FunctionInfoSchema,\n IndexInfoSchema,\n MacroInfoSchema,\n SchemaInfoSchema,\n TableInfoSchema,\n ViewInfoSchema,\n} from \"./vgi-protocol-schemas.js\";\n\nexport type DistinctDependence = \"DISTINCT_DEPENDENT\" | \"NOT_DISTINCT_DEPENDENT\";\nexport type FunctionStability = \"CONSISTENT\" | \"VOLATILE\" | \"CONSISTENT_WITHIN_QUERY\";\nexport type FunctionType = \"SCALAR\" | \"TABLE\" | \"TABLE_BUFFERING\" | \"AGGREGATE\";\nexport type IndexConstraintType = \"NONE\" | \"UNIQUE\" | \"PRIMARY\";\nexport type InvocationFunctionType = \"AGGREGATE\" | \"SCALAR\" | \"TABLE\" | \"TABLE_BUFFERING\";\nexport type MacroType = \"SCALAR\" | \"TABLE\";\nexport type NullHandling = \"DEFAULT\" | \"SPECIAL\";\nexport type OnConflict = \"ERROR\" | \"IGNORE\" | \"REPLACE\";\nexport type OrderByDirection = \"ASC\" | \"DESC\";\nexport type OrderByNullOrder = \"NULLS_FIRST\" | \"NULLS_LAST\";\nexport type OrderDependence = \"ORDER_DEPENDENT\" | \"NOT_ORDER_DEPENDENT\";\nexport type OrderPreservation = \"PRESERVES_ORDER\" | \"NO_ORDER_GUARANTEE\" | \"FIXED_ORDER\";\nexport type PartitionKind = \"NOT_PARTITIONED\" | \"SINGLE_VALUE_PARTITIONS\" | \"OVERLAPPING_PARTITIONS\" | \"DISJOINT_PARTITIONS\";\nexport type SchemaObjectType = \"TABLE\" | \"VIEW\" | \"SCALAR_FUNCTION\" | \"TABLE_FUNCTION\" | \"AGGREGATE_FUNCTION\" | \"SCALAR_MACRO\" | \"TABLE_MACRO\" | \"INDEX\";\nexport type TableInOutFunctionInitPhase = \"INPUT\" | \"FINALIZE\" | \"TABLE_BUFFERING\" | \"TABLE_BUFFERING_FINALIZE\";\n\nexport interface CatalogDataVersionRelease {\n version: string;\n released_at?: bigint | null;\n summary: string;\n notes_url?: string | null;\n}\n\nexport interface CatalogInfo {\n name: string;\n implementation_version?: string | null;\n data_version_spec?: string | null;\n attach_option_specs: Uint8Array[];\n releases: CatalogDataVersionRelease[];\n source_url?: string | null;\n}\n\nexport interface SchemaInfo {\n comment?: string | null;\n tags: Record<string, string>;\n attach_opaque_data: Uint8Array;\n name: string;\n estimated_object_count?: Record<string, number> | null;\n}\n\nexport interface TableInfo {\n comment?: string | null;\n tags: Record<string, string>;\n name: string;\n schema_name: string;\n columns: Uint8Array;\n not_null_constraints: number[];\n unique_constraints: number[][];\n check_constraints: string[];\n primary_key_constraints: number[][];\n foreign_key_constraints: Uint8Array[];\n supports_insert: boolean;\n supports_update: boolean;\n supports_delete: boolean;\n supports_returning: boolean;\n supports_column_statistics: boolean;\n scan_function?: Uint8Array | null;\n insert_function?: Uint8Array | null;\n update_function?: Uint8Array | null;\n delete_function?: Uint8Array | null;\n cardinality_estimate?: number | null;\n cardinality_max?: number | null;\n column_statistics?: Uint8Array | null;\n bind_result?: Uint8Array | null;\n required_filters: string[][];\n}\n\nexport interface ViewInfo {\n comment?: string | null;\n tags: Record<string, string>;\n name: string;\n schema_name: string;\n definition: string;\n column_comments: Record<string, string>;\n}\n\nexport interface CatalogExample {\n sql: string;\n description: string;\n expected_output?: string | null;\n}\n\nexport interface SecretLookupEntry {\n secret_type: string;\n scope?: string | null;\n secret_name?: string | null;\n}\n\nexport interface FunctionInfo {\n comment?: string | null;\n tags: Record<string, string>;\n name: string;\n schema_name: string;\n function_type: FunctionType;\n arguments: Uint8Array;\n output_schema: Uint8Array;\n stability?: FunctionStability | null;\n null_handling?: NullHandling | null;\n description: string;\n examples: CatalogExample[];\n categories: string[];\n projection_pushdown?: boolean | null;\n filter_pushdown?: boolean | null;\n sampling_pushdown?: boolean | null;\n late_materialization?: boolean | null;\n supported_expression_filters: string[];\n order_preservation?: OrderPreservation | null;\n max_workers?: number | null;\n supports_batch_index: boolean;\n partition_kind: PartitionKind;\n order_dependent: OrderDependence;\n distinct_dependent: DistinctDependence;\n supports_window: boolean;\n streaming_partitioned: boolean;\n has_finalize: boolean;\n source_order_dependent: boolean;\n sink_order_dependent: boolean;\n requires_input_batch_index: boolean;\n input_from_args: boolean;\n required_settings: string[];\n required_secrets: SecretLookupEntry[];\n}\n\nexport interface MacroInfo {\n comment?: string | null;\n tags: Record<string, string>;\n name: string;\n schema_name: string;\n macro_type: MacroType;\n parameters: string[];\n parameter_default_values?: /** @record-batch */ Uint8Array | null;\n definition: string;\n arguments_schema?: /** @arrow-schema */ Uint8Array | null;\n}\n\nexport interface IndexInfo {\n comment?: string | null;\n tags: Record<string, string>;\n name: string;\n schema_name: string;\n table_name: string;\n index_type: string;\n constraint_type: IndexConstraintType;\n expressions: string[];\n options: Record<string, string>;\n}\n\nexport interface AggregateBindRequest {\n function_name: string;\n arguments: /** @vgi-arguments */ Uint8Array;\n input_schema?: /** @arrow-schema */ Uint8Array | null;\n settings?: /** @record-batch */ Uint8Array | null;\n secrets?: /** @record-batch */ Uint8Array | null;\n attach_opaque_data?: Uint8Array | null;\n schema_name?: string | null;\n}\n\nexport interface AggregateBindResponse {\n output_schema: /** @arrow-schema */ Uint8Array;\n execution_id: Uint8Array;\n}\n\nexport interface AggregateCombineRequest {\n function_name: string;\n execution_id: Uint8Array;\n merge_batch: Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n schema_name?: string | null;\n}\n\nexport interface AggregateCombineResponse {\n}\n\nexport interface AggregateDestructorRequest {\n function_name: string;\n execution_id: Uint8Array;\n group_ids_batch: Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n schema_name?: string | null;\n}\n\nexport interface AggregateDestructorResponse {\n}\n\nexport interface AggregateFinalizeRequest {\n function_name: string;\n execution_id: Uint8Array;\n group_ids_batch: Uint8Array;\n output_schema: /** @arrow-schema */ Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n schema_name?: string | null;\n}\n\nexport interface AggregateFinalizeResponse {\n result_batch: Uint8Array;\n}\n\nexport interface AggregateStreamingChunkRequest {\n function_name: string;\n execution_id: Uint8Array;\n input_batch: Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n schema_name?: string | null;\n}\n\nexport interface AggregateStreamingChunkResponse {\n result_batch: Uint8Array;\n}\n\nexport interface AggregateStreamingCloseRequest {\n function_name: string;\n execution_id: Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n schema_name?: string | null;\n}\n\nexport interface AggregateStreamingCloseResponse {\n}\n\nexport interface AggregateStreamingOpenRequest {\n function_name: string;\n arguments: /** @vgi-arguments */ Uint8Array;\n input_schema: /** @arrow-schema */ Uint8Array;\n partition_key_count: number;\n order_key_count: number;\n output_schema: /** @arrow-schema */ Uint8Array;\n settings?: /** @record-batch */ Uint8Array | null;\n secrets?: /** @record-batch */ Uint8Array | null;\n attach_opaque_data?: Uint8Array | null;\n schema_name?: string | null;\n}\n\nexport interface AggregateStreamingOpenResponse {\n execution_id: Uint8Array;\n}\n\nexport interface AggregateUpdateRequest {\n function_name: string;\n execution_id: Uint8Array;\n input_batch: Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n schema_name?: string | null;\n}\n\nexport interface AggregateUpdateResponse {\n}\n\nexport interface AggregateWindowRequest {\n function_name: string;\n execution_id: Uint8Array;\n partition_id: number;\n rid: number;\n frame_starts: number[];\n frame_ends: number[];\n attach_opaque_data?: Uint8Array | null;\n schema_name?: string | null;\n}\n\nexport interface AggregateWindowResponse {\n result_batch: Uint8Array;\n}\n\nexport interface AggregateWindowBatchRequest {\n function_name: string;\n execution_id: Uint8Array;\n partition_id: number;\n row_idx: number;\n count: number;\n frames_per_row: number[];\n frame_starts: number[];\n frame_ends: number[];\n attach_opaque_data?: Uint8Array | null;\n schema_name?: string | null;\n}\n\nexport interface AggregateWindowBatchResponse {\n result_batch: Uint8Array;\n}\n\nexport interface AggregateWindowDestructorRequest {\n function_name: string;\n execution_id: Uint8Array;\n partition_id: number;\n attach_opaque_data?: Uint8Array | null;\n schema_name?: string | null;\n}\n\nexport interface AggregateWindowDestructorResponse {\n}\n\nexport interface AggregateWindowInitRequest {\n function_name: string;\n execution_id: Uint8Array;\n partition_id: number;\n row_count: number;\n partition_batch: Uint8Array;\n output_schema: /** @arrow-schema */ Uint8Array;\n filter_mask: Uint8Array;\n frame_stats: Uint8Array;\n all_valid: Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n schema_name?: string | null;\n}\n\nexport interface AggregateWindowInitResponse {\n}\n\nexport interface CopyFromContext {\n format: string;\n file_path: string;\n expected_schema: /** @arrow-schema */ Uint8Array;\n}\n\nexport interface CopyToContext {\n format: string;\n file_path: string;\n}\n\nexport interface BindRequest {\n function_name: string;\n arguments: /** @vgi-arguments */ Uint8Array;\n function_type: InvocationFunctionType;\n input_schema?: /** @arrow-schema */ Uint8Array | null;\n settings?: /** @record-batch */ Uint8Array | null;\n secrets?: /** @record-batch */ Uint8Array | null;\n attach_opaque_data?: Uint8Array | null;\n transaction_opaque_data?: Uint8Array | null;\n resolved_secrets_provided: boolean;\n at_unit?: string | null;\n at_value?: string | null;\n copy_from?: CopyFromContext | null;\n copy_to?: CopyToContext | null;\n schema_name?: string | null;\n}\n\nexport interface BindResponse {\n output_schema: /** @arrow-schema */ Uint8Array;\n opaque_data?: Uint8Array | null;\n lookup_secret_types: string[];\n lookup_scopes: string[];\n lookup_names: string[];\n}\n\nexport interface CatalogAttachRequest {\n name: string;\n options?: /** @record-batch */ Uint8Array | null;\n data_version_spec?: string | null;\n implementation_version?: string | null;\n}\n\nexport interface CatalogAttachResult {\n attach_opaque_data: Uint8Array;\n supports_transactions: boolean;\n supports_time_travel: boolean;\n catalog_version_frozen: boolean;\n catalog_version: number;\n attach_opaque_data_required: boolean;\n default_schema: string;\n settings: Uint8Array[];\n secret_types: Uint8Array[];\n attach_catalogs: Uint8Array[];\n comment?: string | null;\n tags: Record<string, string>;\n supports_column_statistics: boolean;\n resolved_data_version?: string | null;\n resolved_implementation_version?: string | null;\n}\n\nexport interface CatalogsResponse {\n items: CatalogInfo[];\n}\n\nexport interface CopyFromFormatsResponse {\n items: Uint8Array[];\n}\n\nexport interface CatalogCreateRequest {\n name: string;\n on_conflict: OnConflict;\n options?: /** @record-batch */ Uint8Array | null;\n}\n\nexport interface IndexCreateRequest {\n attach_opaque_data: Uint8Array;\n schema_name: string;\n name: string;\n table_name: string;\n index_type: string;\n constraint_type: IndexConstraintType;\n expressions: string[];\n on_conflict: OnConflict;\n options: Record<string, string>;\n transaction_opaque_data?: Uint8Array | null;\n}\n\nexport interface IndexesResponse {\n items: IndexInfo[];\n}\n\nexport interface MacroCreateRequest {\n attach_opaque_data: Uint8Array;\n schema_name: string;\n name: string;\n macro_type: MacroType;\n parameters: string[];\n definition: string;\n on_conflict: OnConflict;\n parameter_default_values?: /** @record-batch */ Uint8Array | null;\n arguments_schema?: /** @arrow-schema */ Uint8Array | null;\n transaction_opaque_data?: Uint8Array | null;\n}\n\nexport interface MacrosResponse {\n items: MacroInfo[];\n}\n\nexport interface FunctionsResponse {\n items: FunctionInfo[];\n}\n\nexport interface TablesResponse {\n items: TableInfo[];\n}\n\nexport interface ViewsResponse {\n items: ViewInfo[];\n}\n\nexport interface SchemasResponse {\n items: SchemaInfo[];\n}\n\nexport interface TableCreateRequest {\n attach_opaque_data: Uint8Array;\n schema_name: string;\n name: string;\n columns: Uint8Array;\n on_conflict: OnConflict;\n not_null_constraints: number[];\n unique_constraints: number[][];\n check_constraints: string[];\n primary_key_constraints: number[][];\n foreign_key_constraints: Uint8Array[];\n transaction_opaque_data?: Uint8Array | null;\n}\n\nexport interface TransactionBeginResponse {\n transaction_opaque_data?: Uint8Array | null;\n}\n\nexport interface CatalogVersionResponse {\n version: number;\n}\n\nexport interface InitRequest {\n bind_call: BindRequest;\n output_schema: /** @arrow-schema */ Uint8Array;\n bind_opaque_data?: Uint8Array | null;\n projection_ids?: number[] | null;\n pushdown_filters?: /** @record-batch */ Uint8Array | null;\n join_keys?: /** @record-batch */ Uint8Array[] | null;\n phase?: TableInOutFunctionInitPhase | null;\n finalize_state_id?: Uint8Array | null;\n execution_id?: Uint8Array | null;\n init_opaque_data?: Uint8Array | null;\n substream_id?: Uint8Array | null;\n order_by_column_name?: string | null;\n order_by_direction?: OrderByDirection | null;\n order_by_null_order?: OrderByNullOrder | null;\n order_by_limit?: number | null;\n tablesample_percentage?: number | null;\n tablesample_seed?: number | null;\n}\n\nexport interface TableBufferingCombineRequest {\n function_name: string;\n execution_id: Uint8Array;\n state_ids: Uint8Array[];\n attach_opaque_data?: Uint8Array | null;\n transaction_id?: Uint8Array | null;\n schema_name?: string | null;\n}\n\nexport interface TableBufferingCombineResponse {\n finalize_state_ids: Uint8Array[];\n}\n\nexport interface TableBufferingDestructorRequest {\n function_name: string;\n execution_id: Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n transaction_id?: Uint8Array | null;\n schema_name?: string | null;\n}\n\nexport interface TableBufferingDestructorResponse {\n}\n\nexport interface TableBufferingProcessRequest {\n function_name: string;\n execution_id: Uint8Array;\n input_batch: Uint8Array;\n attach_opaque_data?: Uint8Array | null;\n transaction_id?: Uint8Array | null;\n batch_index?: number | null;\n schema_name?: string | null;\n}\n\nexport interface TableBufferingProcessResponse {\n state_id: Uint8Array;\n}\n\nexport interface TableFunctionCardinalityRequest {\n bind_call: BindRequest;\n bind_opaque_data?: Uint8Array | null;\n}\n\nexport interface TableCardinality {\n estimate?: number | null;\n max?: number | null;\n}\n\nexport interface TableFunctionDynamicToStringRequest {\n bind_call: BindRequest;\n bind_opaque_data?: Uint8Array | null;\n global_execution_id: Uint8Array;\n}\n\nexport interface TableFunctionDynamicToStringResponse {\n keys: string[];\n values: string[];\n}\n\nexport interface TableFunctionStatisticsRequest {\n bind_call: BindRequest;\n bind_opaque_data?: Uint8Array | null;\n}\n\n// ----------------------------------------------------------------------------\n// Codec wrappers: turn the typed interfaces above into actual wire bytes.\n// ----------------------------------------------------------------------------\n\nexport const encodeCatalogInfo = (v: CatalogInfo): Uint8Array => encodeASD(CatalogInfoSchema, v);\nexport const decodeCatalogInfo = (b: Uint8Array): CatalogInfo => decodeASD<CatalogInfo>(CatalogInfoSchema, b);\nexport const encodeFunctionInfo = (v: FunctionInfo): Uint8Array => encodeASD(FunctionInfoSchema, v);\nexport const decodeFunctionInfo = (b: Uint8Array): FunctionInfo => decodeASD<FunctionInfo>(FunctionInfoSchema, b);\nexport const encodeIndexInfo = (v: IndexInfo): Uint8Array => encodeASD(IndexInfoSchema, v);\nexport const decodeIndexInfo = (b: Uint8Array): IndexInfo => decodeASD<IndexInfo>(IndexInfoSchema, b);\nexport const encodeMacroInfo = (v: MacroInfo): Uint8Array => encodeASD(MacroInfoSchema, v);\nexport const decodeMacroInfo = (b: Uint8Array): MacroInfo => decodeASD<MacroInfo>(MacroInfoSchema, b);\nexport const encodeSchemaInfo = (v: SchemaInfo): Uint8Array => encodeASD(SchemaInfoSchema, v);\nexport const decodeSchemaInfo = (b: Uint8Array): SchemaInfo => decodeASD<SchemaInfo>(SchemaInfoSchema, b);\nexport const encodeTableInfo = (v: TableInfo): Uint8Array => encodeASD(TableInfoSchema, v);\nexport const decodeTableInfo = (b: Uint8Array): TableInfo => decodeASD<TableInfo>(TableInfoSchema, b);\nexport const encodeViewInfo = (v: ViewInfo): Uint8Array => encodeASD(ViewInfoSchema, v);\nexport const decodeViewInfo = (b: Uint8Array): ViewInfo => decodeASD<ViewInfo>(ViewInfoSchema, b);\n\n",
|
|
50
|
+
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// CatalogInterface abstract class with ~35 methods.\n// Matching Python's vgi/catalog/catalog_interface.py\n\nimport { CatalogReadOnlyError } from \"../errors.js\";\n\nexport type AttachOpaqueData = Uint8Array;\nexport type TransactionOpaqueData = Uint8Array;\n\n// Wire-encoded string union (matches Python's CatalogMacroType enum names).\nimport type { MacroType } from \"../generated/vgi-client.js\";\nexport type { MacroType };\n\n// CatalogAttachResult is the generated snake_case wire shape.\n// The `supports_column_statistics` field is a catalog-level opt-in for the\n// catalog_table_column_statistics_get RPC — defaults to true when unspecified;\n// individual tables still need to set TableInfo.supports_column_statistics\n// before DuckDB will actually call it.\nimport type { CatalogAttachResult } from \"../generated/vgi-client.js\";\nexport type { CatalogAttachResult };\n\n// ============================================================================\n// Serializable info types\n// ============================================================================\n\n// These serialize themselves to Arrow IPC bytes for catalog responses\n\n// SchemaInfo is the generated interface (snake_case wire shape).\n// Codecs live in ../generated/vgi-client.ts — no class needed.\nimport type { SchemaInfo } from \"../generated/vgi-client.js\";\nexport type { SchemaInfo };\nexport { encodeSchemaInfo, decodeSchemaInfo } from \"../generated/vgi-client.js\";\n\n// CatalogInfo — advertised by workers per catalog (name + versions).\nimport type { CatalogInfo } from \"../generated/vgi-client.js\";\nexport type { CatalogInfo };\nexport { encodeCatalogInfo, decodeCatalogInfo } from \"../generated/vgi-client.js\";\n\n// TableInfo is the generated interface (snake_case wire shape).\nimport type { TableInfo } from \"../generated/vgi-client.js\";\nexport type { TableInfo };\nexport { encodeTableInfo, decodeTableInfo } from \"../generated/vgi-client.js\";\n\n// ViewInfo is the generated interface (snake_case wire shape).\nimport type { ViewInfo } from \"../generated/vgi-client.js\";\nexport type { ViewInfo };\nexport { encodeViewInfo, decodeViewInfo } from \"../generated/vgi-client.js\";\n\n// FunctionInfo is the generated interface (snake_case wire shape).\n// FunctionInfoOptions was the camelCase constructor bag for the old class —\n// callers now use object literals matching the wire shape directly.\nimport type { FunctionInfo } from \"../generated/vgi-client.js\";\nexport type { FunctionInfo };\n/** @deprecated Use the FunctionInfo interface (snake_case) directly. */\nexport type FunctionInfoOptions = FunctionInfo;\nexport { encodeFunctionInfo, decodeFunctionInfo } from \"../generated/vgi-client.js\";\n\n// MacroInfo is the generated interface (snake_case wire shape).\nimport type { MacroInfo } from \"../generated/vgi-client.js\";\nexport type { MacroInfo };\nexport { encodeMacroInfo, decodeMacroInfo } from \"../generated/vgi-client.js\";\n\n// IndexInfo wire shape — declarative indexes a worker advertises and DuckDB\n// surfaces under duckdb_indexes(). Constraint type maps to is_unique /\n// is_primary on the DuckDB side.\nimport type { IndexInfo, IndexConstraintType } from \"../generated/vgi-client.js\";\nexport type { IndexInfo, IndexConstraintType };\nexport { encodeIndexInfo, decodeIndexInfo } from \"../generated/vgi-client.js\";\n\n// CopyFromFormatInfo — a custom `COPY ... FROM` format a VGI catalog advertises.\n// The wire shape matches the generated CopyFromFormatInfoSchema; the codegen\n// does not emit a dedicated interface/encoder for it (it's an items-list type\n// carried as binary), so we declare the snake_case interface here and reuse the\n// generic ASD codec with the generated schema. Mirrors vgi-python's\n// catalog_interface.CopyFromFormatInfo.\nimport { encodeASD } from \"../codec/asd.js\";\nimport {\n AttachCatalogInfoSchema,\n CopyFromFormatInfoSchema,\n} from \"../generated/vgi-protocol-schemas.js\";\n\nexport interface CopyFromFormatInfo {\n /** Free-text comment (CopyFromFunction's `copyFromComment`). */\n comment?: string | null;\n /** Function/format tags. */\n tags: Record<string, string>;\n /** The `FORMAT` identifier users type (single global namespace). */\n format_name: string;\n /** Registered name of the worker function that performs the read. */\n handler: string;\n /**\n * Serialized Arrow schema of the format's options (same encoding as\n * `FunctionInfo.arguments`), each field carrying type / `vgi_doc` description.\n */\n options: Uint8Array;\n /** `\"from\"` / `\"to\"` / `\"both\"` — the COPY direction this format serves. */\n direction: string;\n /** Intrinsic documentation from the handler's description. */\n description: string;\n /**\n * COPY ... TO only — when true the writer requires rows in source order, so\n * the extension uses a single-threaded sink (`REGULAR_COPY_TO_FILE`) instead\n * of the default parallel sharded write. Set via `Meta.sinkOrderDependent`\n * on a CopyToFunction; always false for readers. Mirrors vgi-python's\n * `CopyFromFormatInfo.ordered`.\n */\n ordered: boolean;\n}\n\n/** Encode a CopyFromFormatInfo to Arrow IPC bytes (single-row batch). */\nexport const encodeCopyFromFormatInfo = (v: CopyFromFormatInfo): Uint8Array =>\n encodeASD(CopyFromFormatInfoSchema, {\n comment: v.comment ?? null,\n tags: v.tags ?? {},\n format_name: v.format_name,\n handler: v.handler,\n options: v.options,\n direction: v.direction ?? \"from\",\n description: v.description ?? \"\",\n ordered: v.ordered ?? false,\n });\n\n/**\n * A companion catalog the client should ATTACH when this VGI catalog attaches\n * (lakehouse federation). Serialized into `CatalogAttachResult.attach_catalogs`;\n * the C++ VGI extension attaches each at VGI-attach time so multi-branch\n * catalog-table branches can resolve tables in a companion DuckLake / Iceberg /\n * Postgres / DuckDB.\n */\nexport interface AttachCatalogInfo {\n /** ATTACH alias; also a catalog-table ScanBranch's `sourceCatalog`. */\n alias: string;\n /** ATTACH target — a path or DSN (e.g. `ducklake:sqlite:/data/meta.sqlite`). */\n target: string;\n /** DuckDB db type; empty => inferred from the target scheme prefix. */\n db_type?: string;\n /** Extra ATTACH options forwarded verbatim (e.g. DuckLake DATA_PATH). */\n options?: Record<string, string>;\n /** Attach hidden (excluded from duckdb_databases()); still resolvable. */\n hidden?: boolean;\n /** When true, attach failure fails the whole VGI ATTACH. */\n required?: boolean;\n /** Optional named secret to inject into the companion's ATTACH options. */\n secret_ref?: string;\n}\n\n/** Encode an AttachCatalogInfo to Arrow IPC bytes (single-row batch). */\nexport const encodeAttachCatalogInfo = (v: AttachCatalogInfo): Uint8Array =>\n encodeASD(AttachCatalogInfoSchema, {\n alias: v.alias,\n target: v.target,\n db_type: v.db_type ?? \"\",\n options: v.options ?? {},\n hidden: v.hidden ?? false,\n required: v.required ?? false,\n secret_ref: v.secret_ref ?? \"\",\n });\n\n// ============================================================================\n// ScanFunctionResult — typed result for catalog_table_scan_function_get.\n// Mirrors vgi-python's ScanFunctionResult (catalog_interface.py:380).\n// ============================================================================\n\nimport { deserializeBatch, serializeBatch, batchFromColumns } from \"../util/arrow/index.js\";\nimport { schema as schema_, field as field_, type VgiDataType, type VgiField } from \"../arrow/index.js\";\nimport { toUint8Array } from \"../util/bytes.js\";\nimport { ScanBranchSchema } from \"../generated/vgi-protocol-schemas.js\";\n\n/**\n * Result from `tableScanFunctionGet` — tells the VGI DuckDB extension which\n * DuckDB function to call to obtain the data for a table.\n */\nexport interface ScanFunctionResult {\n /** The DuckDB function to call (e.g. \"read_parquet\"). */\n functionName: string;\n /** Positional arguments, decoded from the inner Arrow batch. */\n positionalArguments: unknown[];\n /** Named arguments, decoded from the inner Arrow batch. */\n namedArguments: Record<string, unknown>;\n /** DuckDB extensions to load before calling the function. */\n requiredExtensions: string[];\n}\n\n/**\n * Decode a ScanFunctionResult from a wire-shape inner result dict.\n *\n * The wire shape (per ScanFunctionResultSchema) is\n * `{ function_name: utf8, arguments: binary, required_extensions: list<utf8> }`,\n * where `arguments` is a serialized single-row batch with one column per\n * argument: `arg_<index>` for positional args, the bare name for named args.\n */\nexport function decodeScanFunctionResult(inner: Record<string, unknown>): ScanFunctionResult {\n const argsBytes = inner.arguments;\n const positionalArguments: unknown[] = [];\n const namedArguments: Record<string, unknown> = {};\n\n if (argsBytes != null) {\n const batch = deserializeBatch(toUint8Array(argsBytes));\n for (const field of batch.schema.fields) {\n const col = batch.getChild(field.name);\n const value = col ? col.get(0) : null;\n if (field.name.startsWith(\"arg_\")) {\n const idx = parseInt(field.name.slice(4), 10);\n while (positionalArguments.length <= idx) positionalArguments.push(null);\n positionalArguments[idx] = value;\n } else {\n namedArguments[field.name] = value;\n }\n }\n }\n\n const exts = inner.required_extensions;\n const requiredExtensions: string[] = exts == null\n ? []\n : (Array.isArray(exts) ? exts : [...(exts as Iterable<unknown>)])\n .filter((v) => v != null)\n .map(String);\n\n return {\n functionName: String(inner.function_name ?? \"\"),\n positionalArguments,\n namedArguments,\n requiredExtensions,\n };\n}\n\n/**\n * Synthesise a one-branch `ScanBranchesResult` wire dict from a legacy\n * `tableScanFunctionGet` wire result. Mirrors vgi-python's default\n * `table_scan_branches_get` (catalog_interface.py): a single-source worker is\n * automatically compatible with the branches-aware C++ side.\n *\n * Each branch is its own IPC stream carried in a `list<binary>` column. The\n * legacy result's `arguments` field is already the nested-IPC form\n * `ScanBranch` expects, so it passes through untouched.\n */\nexport function singleBranchResult(\n legacy: { function_name: string; arguments: unknown; required_extensions?: string[] },\n): { branches: Uint8Array[]; required_extensions: string[] } {\n const branchBatch = batchFromColumns(\n {\n function_name: [legacy.function_name],\n arguments: [toUint8Array(legacy.arguments)],\n branch_filter: [null],\n writable: [false],\n source_catalog: [null],\n source_schema: [null],\n source_table: [null],\n },\n ScanBranchSchema as any,\n );\n return {\n branches: [serializeBatch(branchBatch)],\n required_extensions: legacy.required_extensions ?? [],\n };\n}\n\n/**\n * One physical source backing a multi-branch scan, in the shape the\n * `buildScanBranchesResult` helper consumes. Mirrors vgi-python's\n * `ScanBranch` (catalog_interface.py).\n *\n * Each scalar argument carries an explicit Arrow `type` so the nested\n * arguments batch is built with the wire type the C++ binder expects\n * (e.g. utf8 for file paths, int64 for counts).\n */\nexport interface ScanBranchInput {\n /** DuckDB function to call for this branch (e.g. \"sequence\", \"read_parquet\"). */\n functionName: string;\n /** Positional scalar arguments, each with its Arrow type. */\n positionalArguments?: { value: unknown; type: VgiDataType }[];\n /** Named scalar arguments, each with its Arrow type. */\n namedArguments?: Record<string, { value: unknown; type: VgiDataType }>;\n /** Optional SQL filter text AND'd into every scan of this branch. */\n branchFilter?: string | null;\n /** Declares this branch as the INSERT target (at most one per table). */\n writable?: boolean;\n /**\n * Catalog-table branch (lakehouse federation): leave `functionName` empty and\n * set these to scan the base table\n * `sourceCatalog.sourceSchema.sourceTable` in a companion catalog instead of\n * calling a table function.\n */\n sourceCatalog?: string | null;\n sourceSchema?: string | null;\n sourceTable?: string | null;\n}\n\n/**\n * Serialize a single branch's arguments to the nested-IPC form `ScanBranch`\n * expects: a 1-row batch with one column per argument — `arg_<index>` for\n * positional args, the bare name for named args. Mirrors Python's\n * `ScanBranch.to_row_dict` argument handling.\n */\nfunction serializeBranchArguments(branch: ScanBranchInput): Uint8Array {\n const fields: VgiField[] = [];\n const values: Record<string, unknown[]> = {};\n\n const positional = branch.positionalArguments ?? [];\n positional.forEach((arg, index) => {\n const name = `arg_${index}`;\n fields.push(field_(name, arg.type, true));\n values[name] = [arg.value];\n });\n\n for (const [name, arg] of Object.entries(branch.namedArguments ?? {})) {\n fields.push(field_(name, arg.type, true));\n values[name] = [arg.value];\n }\n\n const batchSchema = schema_(fields);\n // batchFromColumns handles the zero-column case by producing a 1-row\n // empty batch — same as Python's RecordBatch.from_pylist([{}]).\n return serializeBatch(batchFromColumns(values, batchSchema));\n}\n\n/**\n * Build a multi-branch `ScanBranchesResult` wire dict from explicit branch\n * definitions. Each branch becomes its own 1-row `ScanBranchSchema` IPC\n * stream carried in the `branches` list<binary> column. Mirrors vgi-python's\n * `ScanBranchesResult` construction in the test fixture's\n * `table_scan_branches_get`.\n *\n * An empty `branches` list is serialized verbatim — the C++ side loud-fails\n * on it (that asymmetry is exercised by multi_branch_empty_branches.test).\n */\nexport function buildScanBranchesResult(\n branches: ScanBranchInput[],\n requiredExtensions: string[] = [],\n): { branches: Uint8Array[]; required_extensions: string[] } {\n const serializedBranches = branches.map((branch) => {\n const branchBatch = batchFromColumns(\n {\n function_name: [branch.functionName],\n arguments: [serializeBranchArguments(branch)],\n branch_filter: [branch.branchFilter ?? null],\n writable: [branch.writable ?? false],\n source_catalog: [branch.sourceCatalog ?? null],\n source_schema: [branch.sourceSchema ?? null],\n source_table: [branch.sourceTable ?? null],\n },\n ScanBranchSchema as any,\n );\n return serializeBatch(branchBatch);\n });\n return {\n branches: serializedBranches,\n required_extensions: requiredExtensions,\n };\n}\n\n// ============================================================================\n// CatalogInterface abstract class\n// ============================================================================\n\n/**\n * Catalog method return type — sync `T` or `Promise<T>`. The framework's\n * dispatch handlers `await` every catalog call, so async overrides work\n * out of the box. Default impls return sync values.\n */\ntype Awaitable<T> = T | Promise<T>;\n\nfunction isPromise<T>(v: Awaitable<T>): v is Promise<T> {\n return v != null && typeof (v as any).then === \"function\";\n}\n\nexport abstract class CatalogInterface {\n /**\n * Which catalog an `attach_opaque_data` belongs to, or null if unknown.\n *\n * Two catalogs served by one worker may declare the same schema *and*\n * function name, in which case the attachment is the only thing that tells\n * them apart — the bind path uses this to scope function resolution. The\n * default answers from `catalogs()` when this interface owns exactly one,\n * which is right for every single-catalog implementation; the composite\n * overrides it to route by its backend index byte.\n */\n catalogNameForAttach(_attachOpaqueData: Uint8Array): string | null {\n const names = this.catalogs();\n return names.length === 1 ? names[0] : null;\n }\n\n // Required overrides\n abstract catalogs(): string[];\n /**\n * Attach this catalog. The framework already validates ATTACH options\n * (name + type) against the specs the worker advertises in\n * `catalogsInfo().attach_option_specs`, so `options` arrives as a\n * validated, decoded `{name: value}` dict with typed column values.\n * Use `{}` if no options were supplied.\n */\n abstract attach(\n name: string,\n options?: Record<string, unknown>,\n dataVersionSpec?: string | null,\n implementationVersion?: string | null,\n ): Awaitable<CatalogAttachResult>;\n /**\n * List the catalogs this worker exposes with their version metadata. The\n * `implementation_version` / `data_version_spec` come from the CatalogInfo\n * returned by the read-only catalogs() signature below — a versioned worker\n * overrides `catalogs()` / `catalogsInfo()` to advertise real values; the\n * default derives them from the registered descriptor(s).\n */\n catalogsInfo?(): Awaitable<import(\"../generated/vgi-client.js\").CatalogInfo[]>;\n abstract detach(attachOpaqueData: AttachOpaqueData): Awaitable<void>;\n abstract version(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<number>;\n abstract schemas(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<SchemaInfo[]>;\n\n // Default implementations (throw CatalogReadOnlyError)\n create(name: string, onConflict: string, options?: any): Awaitable<void> {\n throw new CatalogReadOnlyError(\"create\");\n }\n drop(name: string): Awaitable<void> {\n throw new CatalogReadOnlyError(\"drop\");\n }\n schemaGet(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<SchemaInfo | null> {\n const all = this.schemas(attachOpaqueData, transactionOpaqueData);\n if (isPromise(all)) {\n return all.then((arr) => arr.find((s) => s.name === name) ?? null);\n }\n return all.find((s) => s.name === name) ?? null;\n }\n schemaCreate(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n comment?: string | null,\n tags?: any,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"schema_create\");\n }\n schemaDrop(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n ignoreNotFound?: boolean,\n cascade?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"schema_drop\");\n }\n schemaContentsTables(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<TableInfo[]> {\n return [];\n }\n schemaContentsViews(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<ViewInfo[]> {\n return [];\n }\n schemaContentsFunctions(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n type: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<FunctionInfo[]> {\n return [];\n }\n tableGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n atUnit?: string,\n atValue?: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<TableInfo | null> {\n return null;\n }\n tableCreate(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columns: Uint8Array,\n onConflict: string,\n notNullConstraints?: number[],\n uniqueConstraints?: number[][],\n checkConstraints?: string[],\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"table_create\");\n }\n tableDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"table_drop\");\n }\n tableScanFunctionGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n atUnit?: string,\n atValue?: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<any> {\n throw new CatalogReadOnlyError(\"table_scan_function_get\");\n }\n /**\n * Return the scan branches for a (possibly multi-source) table. Default\n * delegates to `tableScanFunctionGet` and wraps the single result as a\n * one-branch list, so every single-source catalog is compatible with the\n * branches-aware C++ extension. Override for genuine multi-source tables.\n */\n tableScanBranchesGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n atUnit?: string,\n atValue?: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<any> {\n const legacy = this.tableScanFunctionGet(\n attachOpaqueData, schemaName, name, atUnit, atValue, transactionOpaqueData,\n );\n return isPromise(legacy)\n ? legacy.then((r) => singleBranchResult(r))\n : singleBranchResult(legacy);\n }\n /**\n * Return serialized column statistics for a table, or null if none are\n * available. The result is the IPC bytes of a ColumnStatistics RecordBatch\n * (see src/util/statistics.ts for the schema) wrapped with an optional\n * cache TTL. Callers typically override this to pull stats from a\n * descriptor. Returning null signals \"no stats\" so DuckDB falls back to\n * the function-level `table_function_statistics` path.\n */\n tableColumnStatisticsGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Awaitable<{ bytes: Uint8Array; cacheMaxAgeSeconds: number | null } | null> {\n return null;\n }\n tableCommentSet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n comment?: string | null,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"table_comment_set\");\n }\n tableRename(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n newName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"table_rename\");\n }\n tableColumnAdd(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n columnType: string,\n defaultValue?: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"table_column_add\");\n }\n tableColumnDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"table_column_drop\");\n }\n tableColumnRename(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n newName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"table_column_rename\");\n }\n tableColumnDefaultSet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n defaultValue: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"table_column_default_set\");\n }\n tableColumnDefaultDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"table_column_default_drop\");\n }\n tableColumnTypeChange(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n newType: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"table_column_type_change\");\n }\n tableNotNullSet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"table_not_null_set\");\n }\n tableNotNullDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"table_not_null_drop\");\n }\n viewGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<ViewInfo | null> {\n return null;\n }\n viewCreate(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n definition: string,\n onConflict: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"view_create\");\n }\n viewDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"view_drop\");\n }\n viewRename(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n newName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"view_rename\");\n }\n viewCommentSet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n comment?: string | null,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"view_comment_set\");\n }\n macroGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<MacroInfo | null> {\n return null;\n }\n macroCreate(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n macroType: MacroType,\n parameters: string[],\n definition: string,\n onConflict: string,\n parameterDefaultValues?: Uint8Array | null,\n /**\n * Optional Arrow schema (one nullable field per parameter, in `parameters`\n * order) serialized as IPC bytes, carrying per-parameter descriptions via the\n * `vgi_doc` field metadata key. `null`/omitted when no per-parameter docs are\n * supplied. Build with `macroArgumentsSchema` + `serializeSchema`.\n */\n argumentsSchema?: Uint8Array | null,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"macro_create\");\n }\n macroDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<void> {\n throw new CatalogReadOnlyError(\"macro_drop\");\n }\n schemaContentsMacros(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n type: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<MacroInfo[]> {\n return [];\n }\n schemaContentsIndexes(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<IndexInfo[]> {\n return [];\n }\n indexGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Awaitable<IndexInfo | null> {\n return null;\n }\n /**\n * List custom `COPY ... FROM` formats advertised by this catalog. Catalog-level\n * (not schema-scoped). The default returns an empty list, so catalogs that\n * don't define COPY formats are unaffected. The VGI extension treats an empty\n * list (or a not-implemented method) as \"no custom formats\". Mirrors\n * vgi-python's `CatalogInterface.copy_from_formats`.\n */\n copyFromFormats(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Awaitable<CopyFromFormatInfo[]> {\n return [];\n }\n transactionBegin(attachOpaqueData: AttachOpaqueData): Awaitable<Uint8Array | null> {\n return null;\n }\n transactionCommit(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData: TransactionOpaqueData\n ): Awaitable<void> {}\n transactionRollback(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData: TransactionOpaqueData\n ): Awaitable<void> {}\n}\n\n",
|
|
51
|
+
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// ReadOnlyCatalogInterface: derives catalog from registered functions + descriptors.\n\nimport { type VgiSchema, schema as schema_, type VgiField, field, type VgiDataType, int64, utf8, binary, bool, nullType, list, isInt } from \"../arrow/index.js\";\nimport {\n CatalogInterface,\n type AttachOpaqueData,\n type TransactionOpaqueData,\n type CatalogAttachResult,\n type SchemaInfo,\n type CatalogInfo,\n type TableInfo,\n type ViewInfo,\n type FunctionInfo,\n type MacroInfo,\n type IndexInfo,\n type IndexConstraintType,\n type CopyFromFormatInfo,\n encodeAttachCatalogInfo,\n} from \"./interface.js\";\nimport type { CatalogDescriptor, SchemaDescriptor, TableDescriptor, ViewDescriptor, MacroDescriptor, SettingDescriptor, SecretTypeDescriptor, ForeignKeyDef, DefaultValue } from \"./descriptors.js\";\nimport { serializeColumnStatistics } from \"../util/statistics.js\";\nimport type { VgiFunction } from \"../functions/types.js\";\nimport type { FunctionRegistry } from \"../functions/registry.js\";\nimport { argumentSpecsToSchema, macroArgumentsSchema } from \"../arguments/argument-spec.js\";\nimport { serializeSchema, serializeBatch, emptyBatch, batchFromColumns } from \"../util/arrow/index.js\";\nimport { resolveMetadata } from \"../metadata/resolve.js\";\nimport { FunctionStability, NullHandling, OrderPreservation, DEFAULT_MAX_WORKERS } from \"../types.js\";\nimport { Arguments } from \"../arguments/arguments.js\";\n\nexport class ReadOnlyCatalogInterface extends CatalogInterface {\n private _descriptor: CatalogDescriptor;\n private _registry: FunctionRegistry;\n private _attachments = new Map<string, AttachOpaqueData>();\n private _version = 1;\n\n constructor(descriptor: CatalogDescriptor, registry: FunctionRegistry) {\n super();\n this._descriptor = descriptor;\n this._registry = registry;\n // Index every function this catalog declares by its owning schema, so a\n // schema-qualified bind resolves to the right implementation when one name\n // is declared in more than one schema. Table-backing functions are indexed\n // under their table's schema for the same reason.\n for (const sch of descriptor.schemas ?? []) {\n for (const fn of sch.functions ?? []) registry.registerInSchema(fn, sch.name, descriptor.name);\n for (const tbl of sch.tables ?? []) {\n for (const key of [\"function\", \"insertFunction\", \"updateFunction\", \"deleteFunction\"] as const) {\n const fn = (tbl as any)[key];\n if (fn) registry.registerInSchema(fn, sch.name, descriptor.name);\n }\n }\n }\n }\n\n catalogs(): string[] {\n return [this._descriptor.name];\n }\n\n // Advertise the catalog's discovery record. The declarative path carries no\n // version metadata or attach option specs, but it does surface the optional\n // `source_url` from the descriptor so it flows through `catalog_catalogs`\n // (DuckDB's `duckdb_databases()`).\n override catalogsInfo(): CatalogInfo[] {\n return [{\n name: this._descriptor.name,\n implementation_version: null,\n data_version_spec: null,\n attach_option_specs: [],\n releases: [],\n source_url: this._descriptor.sourceUrl ?? null,\n }];\n }\n\n attach(\n name: string,\n options?: Record<string, unknown>,\n dataVersionSpec?: string | null,\n implementationVersion?: string | null,\n ): CatalogAttachResult | Promise<CatalogAttachResult> {\n if (!this.catalogs().includes(name)) {\n throw new Error(`No worker handles catalog '${name}'`);\n }\n\n const attachOpaqueData = new Uint8Array(16);\n crypto.getRandomValues(attachOpaqueData);\n this._attachments.set(name, attachOpaqueData);\n\n const settings = (this._descriptor.settings ?? []).map((s) =>\n serializeSetting(s)\n );\n\n const secretTypes = (this._descriptor.secretTypes ?? []).map((s) =>\n serializeSecretType(s)\n );\n\n const attachCatalogs = (this._descriptor.attachCatalogs ?? []).map((c) =>\n encodeAttachCatalogInfo(c)\n );\n\n // Auto-derive supportsTimeTravel from table descriptors\n const hasTimeTravel = this._descriptor.schemas.some(\n (s) => s.tables?.some((t) => t.supportsTimeTravel) ?? false\n );\n\n return {\n attach_opaque_data: attachOpaqueData,\n supports_transactions: false,\n supports_time_travel: hasTimeTravel,\n catalog_version_frozen: true,\n catalog_version: this._version,\n attach_opaque_data_required: true,\n default_schema: this._descriptor.defaultSchema ?? \"main\",\n settings,\n secret_types: secretTypes,\n attach_catalogs: attachCatalogs,\n comment: this._descriptor.comment ?? null,\n tags: this._descriptor.tags ?? {},\n // Advertise true so DuckDB routes catalog_table_column_statistics_get\n // for tables whose TableInfo.supports_column_statistics is also true.\n supports_column_statistics: true,\n resolved_data_version: null,\n resolved_implementation_version: null,\n };\n }\n\n detach(attachOpaqueData: AttachOpaqueData): void {\n // Remove attachment\n for (const [name, id] of this._attachments) {\n if (bufferEquals(id, attachOpaqueData)) {\n this._attachments.delete(name);\n break;\n }\n }\n }\n\n version(attachOpaqueData: AttachOpaqueData, transactionOpaqueData?: TransactionOpaqueData): number | Promise<number> {\n return this._version;\n }\n\n schemas(attachOpaqueData: AttachOpaqueData, transactionOpaqueData?: TransactionOpaqueData): SchemaInfo[] {\n return this._descriptor.schemas.map((s) => ({\n attach_opaque_data: attachOpaqueData,\n name: s.name,\n comment: s.comment ?? null,\n tags: s.tags ?? {},\n estimated_object_count: this._estimatedObjectCount(s),\n }));\n }\n\n // Compute per-kind object counts so the C++ extension's eager-load gate\n // can skip bulk RPCs for empty kinds. Zero is load-bearing — absence\n // would read as \"unknown=1\" and suppress the bypass. Function counts are\n // partitioned by kind to match python's behavior.\n private _estimatedObjectCount(s: SchemaDescriptor): Record<string, number> {\n let scalar = 0, aggregate = 0, table = 0;\n for (const f of s.functions ?? []) {\n if (f.kind === \"scalar\") scalar++;\n else if ((f.kind as string) === \"aggregate\") aggregate++;\n else table++; // \"table\" and \"table_in_out\"\n }\n return {\n table: s.tables?.length ?? 0,\n view: s.views?.length ?? 0,\n scalar_function: scalar,\n aggregate_function: aggregate,\n table_function: table,\n macro: s.macros?.length ?? 0,\n index: s.indexes?.length ?? 0,\n };\n }\n\n override schemaGet(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): SchemaInfo | null {\n const desc = this._descriptor.schemas.find((s) => s.name === name);\n if (!desc) return null;\n return {\n attach_opaque_data: attachOpaqueData,\n name: desc.name,\n comment: desc.comment ?? null,\n tags: desc.tags ?? {},\n estimated_object_count: this._estimatedObjectCount(desc),\n };\n }\n\n override async schemaContentsTables(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Promise<TableInfo[]> {\n const schema = this._descriptor.schemas.find((s) => s.name === name);\n if (!schema || !schema.tables) return [];\n\n return await Promise.all(schema.tables.map(async (t) => {\n // Resolve the column schema\n let colSchema: VgiSchema;\n if (t.columns) {\n colSchema = t.columns;\n } else if (t.function) {\n const func = t.function;\n const dummyArgs = t.arguments ?? new Arguments();\n try {\n const bindRequest = {\n function_name: func.meta.name,\n arguments: dummyArgs,\n function_type: \"table\" as any,\n input_schema: null,\n settings: null,\n secrets: null,\n attach_opaque_data: attachOpaqueData,\n transaction_opaque_data: null,\n resolved_secrets_provided: false,\n };\n const response = await func.bind(bindRequest);\n colSchema = response.output_schema;\n } catch {\n colSchema = schema_([]);\n }\n } else {\n colSchema = schema_([]);\n }\n\n // Apply defaults as Arrow field metadata\n if (t.defaults) {\n colSchema = applyDefaults(colSchema, t.defaults);\n }\n // Apply generated-column expressions as Arrow field metadata\n // (`generated_expression`). DuckDB registers these columns as GENERATED\n // and evaluates the SQL expression client-side — the scan function\n // should not return values for them.\n if (t.generatedColumns) {\n colSchema = applyGeneratedColumns(colSchema, t.generatedColumns);\n }\n // Apply per-column comments as Arrow field metadata (matches Python's\n // `comment` metadata key on columns).\n if (t.columnComments) {\n colSchema = applyColumnComments(colSchema, t.columnComments);\n }\n\n const columns = serializeSchema(colSchema);\n\n // Resolve constraint column names → indices\n const notNullIndices = resolveIndices(colSchema, t.notNull);\n const uniqueIndices = resolveIndexGroups(colSchema, t.unique);\n const pkIndices = resolveIndexGroups(colSchema, t.primaryKey);\n const fkBytes = serializeForeignKeys(t.foreignKey, name);\n\n // Validate required_filters: an AND (outer list) of OR-groups (inner\n // lists). Each OR-group must be non-empty, and the leading dotted segment\n // of each path must be a real column on this table. Struct subfield\n // validity is not checked here — DuckDB's binder catches typos at scan\n // time, and the descriptor doesn't unpack STRUCT subfields. (Mirrors\n // vgi-python's Table descriptor validation.)\n const requiredFilters = t.requiredFilters ?? [];\n if (requiredFilters.length > 0) {\n const columnNames = new Set(colSchema.fields.map((f) => f.name));\n for (const group of requiredFilters) {\n if (!group || group.length === 0) {\n throw new Error(\n `Table '${t.name}': requiredFilters must not contain empty groups`\n );\n }\n for (const path of group) {\n if (!path) {\n throw new Error(\n `Table '${t.name}': requiredFilters must not contain empty strings`\n );\n }\n const head = path.split(\".\", 1)[0];\n if (!columnNames.has(head)) {\n throw new Error(\n `Table '${t.name}': requiredFilters path '${path}' references ` +\n `unknown column '${head}'. Available columns: ${[...columnNames].sort().join(\", \")}`\n );\n }\n }\n }\n }\n\n return {\n comment: t.comment ?? null,\n tags: t.tags ?? {},\n name: t.name,\n schema_name: name,\n columns,\n not_null_constraints: notNullIndices,\n unique_constraints: uniqueIndices,\n check_constraints: t.check ?? [],\n primary_key_constraints: pkIndices,\n foreign_key_constraints: fkBytes,\n supports_insert: false,\n supports_update: false,\n supports_delete: false,\n supports_returning: false,\n supports_column_statistics: t.statistics != null && Object.keys(t.statistics).length > 0,\n // Inline scan_function only for purely function-backed tables.\n // When explicit `columns` are also declared, the table is on the\n // legacy catalog_table_scan_function_get path; inlining would\n // shadow the per-call dispatch and prevent workers from varying\n // the scan function (e.g. version-resolved time-travel).\n scan_function: t.function && !t.columns\n ? inlineScanFunction(t.function, t.arguments)\n : null,\n insert_function: null,\n update_function: null,\n delete_function: null,\n cardinality_estimate: t.inlinedCardinality\n ? Number(t.inlinedCardinality.estimate)\n : null,\n cardinality_max: t.inlinedCardinality\n ? Number(t.inlinedCardinality.max)\n : null,\n required_filters: requiredFilters,\n };\n }));\n }\n\n override tableColumnStatisticsGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): { bytes: Uint8Array; cacheMaxAgeSeconds: number | null } | null {\n const schema = this._descriptor.schemas.find((s) => s.name === schemaName);\n if (!schema || !schema.tables) return null;\n const table = schema.tables.find((t) => t.name === name);\n if (!table || !table.statistics) return null;\n const stats = Object.values(table.statistics);\n if (stats.length === 0) return null;\n return {\n bytes: serializeColumnStatistics(stats),\n cacheMaxAgeSeconds: table.statisticsCacheMaxAgeSeconds ?? null,\n };\n }\n\n override schemaContentsViews(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): ViewInfo[] {\n const schema = this._descriptor.schemas.find((s) => s.name === name);\n if (!schema || !schema.views) return [];\n\n return schema.views.map((v) => ({\n comment: v.comment ?? null,\n tags: v.tags ?? {},\n name: v.name,\n schema_name: name,\n definition: v.definition,\n column_comments: v.columnComments ?? {},\n }));\n }\n\n override schemaContentsFunctions(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n type: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): FunctionInfo[] {\n const schema = this._descriptor.schemas.find((s) => s.name === name);\n if (!schema || !schema.functions) return [];\n\n return schema.functions\n .filter((f) => {\n // Filter by SchemaObjectType (lowercase on the wire: scalar_function,\n // table_function, aggregate_function). Unknown filter values pass\n // everything through. Defensive String() coerces null/undefined.\n const t = String(type ?? \"\").toUpperCase();\n if (t === \"SCALAR_FUNCTION\") return f.kind === \"scalar\";\n if (t === \"TABLE_FUNCTION\") return f.kind === \"table\" || f.kind === \"table_in_out\" || (f.kind as string) === \"table_buffering\";\n if (t === \"AGGREGATE_FUNCTION\") return (f.kind as string) === \"aggregate\";\n return true;\n })\n .map((f) => {\n const meta = resolveMetadata(f);\n const argSchema = argumentSpecsToSchema(f.argumentSpecs);\n const argBytes = serializeSchema(argSchema);\n\n // Use the function's default output schema if available,\n // otherwise empty schema (table functions determine output at bind time)\n const outputSchemaBytes = serializeSchema(\n f.defaultOutputSchema ?? schema_([])\n );\n\n const requiredSecrets = (meta.requiredSecrets ?? []).map(\n (secretType: string) => ({ secret_type: secretType, scope: null, secret_name: null })\n );\n\n // Function-level tags surfaced into duckdb_functions().tags. The wire\n // map is string→string, so the metadata linter (vgi-lint-check) and any\n // worker-side conventions (e.g. VGI307's `vgi.columns_md` on a dynamic\n // table function) can read them. Worker-provided tags are MERGED OVER\n // any SDK-derived tags rather than replacing them — and derived tags\n // never clobber worker-set keys. There are no SDK-derived function tags\n // today (examples flow into FunctionInfo.examples, not a tag), so the\n // derived base is empty; the merge keeps that invariant if one is ever\n // added.\n const derivedTags: Record<string, string> = {};\n const tags: Record<string, string> = { ...derivedTags, ...(meta.tags ?? {}) };\n\n return {\n comment: null,\n tags,\n name: f.meta.name,\n schema_name: name,\n function_type: meta.functionType.toUpperCase() as \"SCALAR\" | \"TABLE\" | \"TABLE_BUFFERING\" | \"AGGREGATE\",\n arguments: argBytes,\n output_schema: outputSchemaBytes,\n stability: meta.stability as any,\n null_handling: meta.nullHandling as any,\n description: meta.description,\n examples: meta.examples.map((e) => ({\n sql: e.sql,\n description: e.description,\n expected_output: null,\n })),\n categories: meta.categories,\n projection_pushdown: meta.projectionPushdown,\n filter_pushdown: meta.filterPushdown,\n sampling_pushdown: meta.samplingPushdown,\n // Mirror Python: None for scalars, the meta flag for table functions.\n // The C++ extension only honours this for rowid-bearing tables.\n late_materialization:\n (f.kind as string) === \"table\" && f.meta.lateMaterialization === true ? true : null,\n supported_expression_filters: meta.supportedExpressionFilters,\n order_preservation: meta.preservesOrder as any,\n max_workers: meta.maxWorkers ?? DEFAULT_MAX_WORKERS,\n // Opt-in features the read-only catalog's functions do not use; the\n // regenerated FunctionInfo schema requires these non-nullable\n // fields, so default them explicitly. table_buffering functions\n // thread their batch_index requirement through supports_batch_index\n // so the C++ operator declares RequiredPartitionInfo=BatchIndex.\n supports_batch_index:\n ((f.kind as string) === \"table_buffering\" && f.meta.requiresInputBatchIndex === true) ||\n ((f.kind as string) === \"table\" && f.meta.supportsBatchIndex === true),\n partition_kind:\n (f.kind as string) === \"table\" && f.meta.partitionKind\n ? f.meta.partitionKind\n : \"NOT_PARTITIONED\",\n order_dependent: meta.orderDependent as any,\n distinct_dependent: meta.distinctDependent as any,\n supports_window: false,\n streaming_partitioned: false,\n // table_in_out functions with a finalize callback, AND every\n // table_buffering function (the Source phase always runs), get the\n // FINALIZE init() phase. Advertising has_finalize=true on a function\n // without it makes DuckDB call FinalExecute and crash with\n // 'FinalExecute not supported for project_input'.\n has_finalize:\n (f.kind === \"table_in_out\" && f.meta.hasFinalize === true) ||\n (f.kind as string) === \"table_buffering\",\n source_order_dependent:\n (f.kind as string) === \"table_buffering\" && f.meta.sourceOrderDependent === true,\n sink_order_dependent:\n (f.kind as string) === \"table_buffering\" && f.meta.sinkOrderDependent === true,\n requires_input_batch_index:\n (f.kind as string) === \"table_buffering\" && f.meta.requiresInputBatchIndex === true,\n // Blended (\"UNNEST-style\") table-in-out: positional args ARE the\n // per-row input columns (real typed args, no TABLE placeholder), so\n // one registration serves literal / column / LATERAL call shapes.\n // Set by defineRowTransformFunction; the C++ extension reads it to\n // enter the in-out registration branch with real-typed args and\n // drive the literal single-row scan-mode. False for scalars —\n // mirrors Python's `input_from_args=False if is_scalar else ...`.\n input_from_args:\n f.kind === \"table_in_out\" && f.meta.inputFromArgs === true,\n required_settings: meta.requiredSettings,\n required_secrets: requiredSecrets.map((s) => ({\n secret_type: s.secret_type,\n scope: s.scope,\n secret_name: s.secret_name,\n })),\n };\n });\n }\n\n override schemaContentsMacros(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n type: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): MacroInfo[] {\n const schema = this._descriptor.schemas.find((s) => s.name === name);\n if (!schema || !schema.macros) return [];\n\n return schema.macros\n .filter((m) => {\n // Defensive String() — see schemaContentsFunctions for rationale.\n const t = String(type ?? \"\").toLowerCase();\n if (t === \"scalar_macro\" && m.macroType !== \"scalar\") return false;\n if (t === \"table_macro\" && m.macroType !== \"table\") return false;\n return true;\n })\n .map((m) => ({\n comment: m.comment ?? null,\n tags: m.tags ?? {},\n name: m.name,\n schema_name: name,\n macro_type: (m.macroType === \"scalar\" ? \"SCALAR\" : \"TABLE\") as \"SCALAR\" | \"TABLE\",\n parameters: m.parameters,\n parameter_default_values: m.parameterDefaultValues ?? new Uint8Array(0),\n definition: m.definition,\n // One nullable Arrow field per parameter (in order), carrying each\n // documented parameter's description via the vgi_doc field-metadata key\n // (the same channel functions use). Type = default-value type when known\n // else null. Serialized as IPC bytes into the generated schema slot.\n arguments_schema: serializeSchema(\n macroArgumentsSchema(m.parameters, m.parameterDefaultValues, m.parameterDocs),\n ),\n }));\n }\n\n override schemaContentsIndexes(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): IndexInfo[] {\n const schema = this._descriptor.schemas.find((s) => s.name === name);\n if (!schema || !schema.indexes) return [];\n return schema.indexes.map((idx) => ({\n comment: idx.comment ?? null,\n tags: idx.tags ?? {},\n name: idx.name,\n schema_name: name,\n table_name: idx.tableName,\n index_type: idx.indexType ?? \"ART\",\n constraint_type: (idx.constraintType ?? \"NONE\") as IndexConstraintType,\n expressions: idx.expressions,\n options: idx.options ?? {},\n }));\n }\n\n override indexGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): IndexInfo | null {\n const all = this.schemaContentsIndexes(attachOpaqueData, schemaName, transactionOpaqueData);\n return all.find((i) => i.name === name) ?? null;\n }\n\n override macroGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): MacroInfo | null {\n const macros = this.schemaContentsMacros(attachOpaqueData, schemaName, \"SCALAR_MACRO\", transactionOpaqueData);\n const tableMacros = this.schemaContentsMacros(attachOpaqueData, schemaName, \"TABLE_MACRO\", transactionOpaqueData);\n const all = [...macros, ...tableMacros];\n return all.find((m) => m.name.toLowerCase() === name.toLowerCase()) ?? null;\n }\n\n override tableScanFunctionGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n atUnit?: string,\n atValue?: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): any {\n validateAtParams(atUnit, atValue);\n\n // Find the table descriptor\n const schema = this._descriptor.schemas.find((s) => s.name === schemaName);\n if (!schema || !schema.tables) {\n throw new Error(`Table '${name}' not found in schema '${schemaName}'`);\n }\n const table = schema.tables.find((t) => t.name === name);\n if (!table) {\n throw new Error(`Table '${name}' not found in schema '${schemaName}'`);\n }\n\n // Reject AT clause on tables that don't support time travel\n if (atUnit && !table.supportsTimeTravel) {\n throw new Error(`Table '${schemaName}.${name}' does not support time travel queries`);\n }\n\n if (table.function) {\n // Function-backed table\n const args = table.arguments ?? new Arguments();\n const argSchema = argumentSpecsToSchema(table.function.argumentSpecs);\n const argBytes = serializeArgsBatch(args, argSchema);\n return {\n function_name: table.function.meta.name,\n arguments: argBytes,\n required_extensions: [],\n };\n }\n\n throw new Error(`Table '${name}' is not function-backed`);\n }\n\n override async tableGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n atUnit?: string,\n atValue?: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): Promise<TableInfo | null> {\n validateAtParams(atUnit, atValue);\n\n // Find the table descriptor to check supports_time_travel\n const schema = this._descriptor.schemas.find((s) => s.name === schemaName);\n if (schema?.tables) {\n const tableDesc = schema.tables.find((t) => t.name === name);\n if (tableDesc && atUnit && !tableDesc.supportsTimeTravel) {\n throw new Error(`Table '${schemaName}.${name}' does not support time travel queries`);\n }\n }\n\n const tables = await this.schemaContentsTables(attachOpaqueData, schemaName, transactionOpaqueData);\n return tables.find((t) => t.name === name) ?? null;\n }\n\n override viewGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData\n ): ViewInfo | null {\n const views = this.schemaContentsViews(attachOpaqueData, schemaName, transactionOpaqueData);\n return views.find((v) => v.name === name) ?? null;\n }\n\n // Advertise every COPY-FROM format reader registered in this catalog. Walks\n // the descriptor's functions for those carrying `meta.copyFromFormat` (set by\n // defineCopyFromFunction) and converts each into a CopyFromFormatInfo. The\n // option schema reuses the same argument serialization as functions, so\n // option types / defaults / docs surface identically to\n // vgi_function_arguments(). Mirrors vgi-python's\n // ReadOnlyCatalogInterface.copy_from_formats.\n override copyFromFormats(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData?: TransactionOpaqueData,\n ): CopyFromFormatInfo[] {\n const formats: CopyFromFormatInfo[] = [];\n // Key by (direction, format): a FROM-format and a TO-format may legitimately\n // share a name; the extension scopes by attach alias anyway. Mirrors\n // vgi-python's `dedup_key = f\"{direction}:{fmt}\"`.\n const seen = new Set<string>();\n for (const schema of this._descriptor.schemas) {\n for (const f of schema.functions ?? []) {\n // A format is a COPY FROM reader (copyFromFormat) or a COPY TO writer\n // (copyToFormat). The RPC name is historical; it returns all directions.\n const isTo = !!f.meta.copyToFormat;\n const fmt = isTo ? f.meta.copyToFormat : f.meta.copyFromFormat;\n if (!fmt) continue;\n const direction = isTo\n ? f.meta.copyToDirection ?? \"to\"\n : f.meta.copyFromDirection ?? \"from\";\n const dedupKey = `${direction}:${fmt}`;\n if (seen.has(dedupKey)) continue;\n seen.add(dedupKey);\n const meta = resolveMetadata(f);\n // Only the declared options are part of the format's option list — the\n // synthetic table-input (\"data\") spec a TO writer carries as a\n // table_buffering function is not an option (mirrors vgi-python, whose\n // CopyToFunction options are just the Arg-annotated arguments).\n const optionSpecs = f.argumentSpecs.filter((s) => !s.isTableInput);\n const argSchema = argumentSpecsToSchema(optionSpecs);\n // ordered only meaningful for TO writers (single-thread sink ingest).\n const ordered = isTo && f.meta.sinkOrderDependent === true;\n formats.push({\n comment: (isTo ? f.meta.copyToComment : f.meta.copyFromComment) ?? null,\n tags: meta.tags,\n format_name: fmt,\n handler: meta.name,\n options: serializeSchema(argSchema),\n direction,\n description: meta.description ?? \"\",\n ordered,\n });\n }\n }\n return formats;\n }\n}\n\n// ============================================================================\n// Constraint resolution helpers\n// ============================================================================\n\nfunction resolveIndices(schema: VgiSchema, names?: string[]): number[] {\n if (!names || names.length === 0) return [];\n return names.map((n) => {\n const idx = schema.fields.findIndex((f) => f.name === n);\n if (idx < 0) throw new Error(`Column '${n}' not found in schema`);\n return idx;\n });\n}\n\nfunction resolveIndexGroups(schema: VgiSchema, groups?: string[][]): number[][] {\n if (!groups || groups.length === 0) return [];\n return groups.map((group) => resolveIndices(schema, group));\n}\n\nconst FK_SCHEMA = schema_([\n field(\"fk_columns\", list(field(\"item\", utf8(), true)), false),\n field(\"pk_columns\", list(field(\"item\", utf8(), true)), false),\n field(\"referenced_table\", utf8(), false),\n field(\"referenced_schema\", utf8(), false),\n]);\n\nfunction serializeForeignKeys(fks?: ForeignKeyDef[], schemaName?: string): Uint8Array[] {\n if (!fks || fks.length === 0) return [];\n return fks.map((fk) =>\n serializeBatch(\n batchFromColumns(\n {\n fk_columns: [fk.columns],\n pk_columns: [fk.referencedColumns],\n referenced_table: [fk.referencedTable],\n referenced_schema: [fk.referencedSchema ?? schemaName ?? \"main\"],\n },\n FK_SCHEMA\n )\n )\n );\n}\n\nfunction defaultToSql(value: DefaultValue): string {\n if (value === null || value === undefined) return \"NULL\";\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\n if (typeof value === \"number\") return String(value);\n // string — quote as SQL string literal\n const escaped = value.replace(/'/g, \"''\");\n return `'${escaped}'`;\n}\n\nfunction applyDefaults(schema: VgiSchema, defaults: Record<string, DefaultValue>): VgiSchema {\n let result = schema;\n for (const [colName, value] of Object.entries(defaults)) {\n const idx = result.fields.findIndex((f) => f.name === colName);\n if (idx < 0) continue;\n const f = result.fields[idx];\n const existingMeta = f.metadata ? new Map(f.metadata) : new Map<string, string>();\n existingMeta.set(\"default\", defaultToSql(value));\n const newField = field(f.name, f.type, f.nullable, existingMeta);\n const fields = [...result.fields];\n fields[idx] = newField;\n result = schema_(fields);\n }\n return result;\n}\n\nfunction applyGeneratedColumns(schema: VgiSchema, generated: Record<string, string>): VgiSchema {\n let result = schema;\n for (const [colName, expression] of Object.entries(generated)) {\n const idx = result.fields.findIndex((f) => f.name === colName);\n if (idx < 0) continue;\n const f = result.fields[idx];\n const existingMeta = f.metadata ? new Map(f.metadata) : new Map<string, string>();\n existingMeta.set(\"generated_expression\", expression);\n const newField = field(f.name, f.type, f.nullable, existingMeta);\n const fields = [...result.fields];\n fields[idx] = newField;\n result = schema_(fields);\n }\n return result;\n}\n\nfunction applyColumnComments(schema: VgiSchema, comments: Record<string, string>): VgiSchema {\n let result = schema;\n for (const [colName, comment] of Object.entries(comments)) {\n if (!comment) continue;\n const idx = result.fields.findIndex((f) => f.name === colName);\n if (idx < 0) continue;\n const f = result.fields[idx];\n const existingMeta = f.metadata ? new Map(f.metadata) : new Map<string, string>();\n existingMeta.set(\"comment\", comment);\n const newField = field(f.name, f.type, f.nullable, existingMeta);\n const fields = [...result.fields];\n fields[idx] = newField;\n result = schema_(fields);\n }\n return result;\n}\n\n// ============================================================================\n// Setting serialization (matches Python SettingSpec.serialize() format)\n// ============================================================================\n\nconst SETTING_SCHEMA = schema_([\n field(\"name\", utf8(), false),\n field(\"description\", utf8(), false),\n field(\"type\", binary(), false),\n field(\"default_value\", binary(), true),\n]);\n\nfunction serializeSetting(setting: SettingDescriptor): Uint8Array {\n // Serialize the Arrow type as a schema with a single \"value\" field\n const typeSchema = schema_([field(\"value\", setting.type, true)]);\n const typeBytes = serializeSchema(typeSchema);\n\n // Serialize the default value as a single-row batch, or null\n let defaultBytes: Uint8Array | null = null;\n if (setting.defaultValue != null) {\n let val: any = setting.defaultValue;\n // Coerce JS numbers to BigInt for 64-bit integer Arrow types\n if (isInt(setting.type) && (setting.type as any).bitWidth === 64) {\n if (typeof val === \"number\") val = BigInt(val);\n }\n // Coerce BigInt to Number for 32-bit integer Arrow types\n if (isInt(setting.type) && (setting.type as any).bitWidth <= 32) {\n if (typeof val === \"bigint\") val = Number(val);\n }\n defaultBytes = serializeBatch(\n batchFromColumns({ value: [val] }, typeSchema)\n );\n }\n\n // Serialize the outer setting spec batch\n return serializeBatch(\n batchFromColumns(\n {\n name: [setting.name],\n description: [setting.description],\n type: [typeBytes],\n default_value: [defaultBytes],\n },\n SETTING_SCHEMA\n )\n );\n}\n\n// ============================================================================\n// Secret type serialization (matches Python SecretTypeSpec.serialize() format)\n// ============================================================================\n\nconst SECRET_TYPE_SCHEMA = schema_([\n field(\"name\", utf8(), false),\n field(\"description\", utf8(), false),\n field(\"parameters_schema\", binary(), false),\n]);\n\nfunction serializeSecretType(spec: SecretTypeDescriptor): Uint8Array {\n const parametersSchemaBytes = serializeSchema(spec.schema);\n\n return serializeBatch(\n batchFromColumns(\n {\n name: [spec.name],\n description: [spec.description],\n parameters_schema: [parametersSchemaBytes],\n },\n SECRET_TYPE_SCHEMA\n )\n );\n}\n\nfunction bufferEquals(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\nfunction serializeArgsBatch(args: Arguments, argSpecSchema: VgiSchema): Uint8Array {\n // Serialize arguments as a FLAT batch using the argument spec field names.\n // DuckDB's VGI extension reads each column as a named argument and wraps it\n // with \"named_\" prefix when sending the bind request. The function extractArgs\n // will look up these by name as a fallback.\n const fields: VgiField[] = [];\n const values: Record<string, any[]> = {};\n\n for (let i = 0; i < args.positional.length; i++) {\n const val = args.positional[i];\n const specField = argSpecSchema.fields[i];\n const fieldName = specField ? specField.name : `positional_${i}`;\n const fieldType = specField ? specField.type : inferScalarType(val);\n fields.push(field(fieldName, fieldType, true));\n let coerced = val;\n if (isInt(fieldType) && (fieldType as any).bitWidth === 64) {\n coerced = typeof val === \"number\" ? BigInt(val) : val;\n }\n values[fieldName] = [coerced];\n }\n\n for (const [name, val] of args.named) {\n fields.push(field(name, inferScalarType(val), true));\n values[name] = [val];\n }\n\n const batchSchema = schema_(fields);\n\n if (fields.length === 0) {\n return serializeBatch(emptyBatch(batchSchema));\n }\n\n return serializeBatch(batchFromColumns(values, batchSchema));\n}\n\nfunction validateAtParams(atUnit?: string, atValue?: string): void {\n if (Boolean(atUnit) !== Boolean(atValue)) {\n throw new Error(\"at_unit and at_value must both be provided or both be absent\");\n }\n}\n\nfunction inferScalarType(val: any): VgiDataType {\n if (val === null || val === undefined) return nullType();\n if (typeof val === \"string\") return utf8();\n if (typeof val === \"boolean\") return bool();\n if (typeof val === \"number\") return int64();\n if (typeof val === \"bigint\") return int64();\n if (val instanceof Uint8Array || val instanceof ArrayBuffer) return binary();\n return utf8();\n}\n\n// Build the inlined `scan_function` payload for a function-backed table.\n// Mirrors python's _inline_function_result: a serialized one-row batch of\n// ScanFunctionResultSchema (function_name, arguments, required_extensions).\n// The C++ extension uses these bytes verbatim and skips the\n// catalog_table_scan_function_get RPC.\nfunction inlineScanFunction(\n func: VgiFunction,\n args: Arguments | undefined,\n): Uint8Array {\n const argSchema = argumentSpecsToSchema(func.argumentSpecs);\n const argBytes = serializeArgsBatch(args ?? new Arguments(), argSchema);\n const scanSchema = schema_([\n field(\"function_name\", utf8(), false),\n field(\"arguments\", binary(), false),\n field(\n \"required_extensions\",\n list(field(\"item\", utf8(), true)),\n false,\n ),\n ]);\n const batch = batchFromColumns(\n {\n function_name: [func.meta.name],\n arguments: [argBytes],\n required_extensions: [[] as string[]],\n },\n scanSchema,\n );\n return serializeBatch(batch);\n}\n",
|
|
52
52
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Column statistics: types and sparse-union wire serialization.\n// Mirrors vgi-python's serialize_column_statistics in catalog_interface.py.\n//\n// The wire format is a single RecordBatch with schema\n// column_name: utf8\n// min: sparse_union<T0, T1, ...>\n// max: sparse_union<T0, T1, ...>\n// has_null: bool\n// has_not_null: bool\n// distinct_count: int64\n// contains_unicode: bool\n// max_string_length: uint64\n// where Ti are the distinct Arrow types present among the stats' min/max values.\n// A row's type_id picks which union child holds its real min/max; the other\n// children carry null at that slot (sparse-union invariant).\n//\n// SparseUnion data construction differs significantly between arrow-js\n// (typeIds buffer + per-type children built via makeData) and flechette\n// (typeIdForValue closure on columnFromArray), so the actual batch\n// assembly is delegated to the active backend via the facade.\n\nimport {\n type ColumnStatistics,\n buildStatisticsBatch,\n serializeBatch,\n} from \"../arrow/index.js\";\n\nexport type { ColumnStatistics };\n\n/**\n * Serialize column statistics to IPC bytes per vgi-python's wire format.\n * Returns an empty-stats batch when `stats` is empty (matching Python).\n */\nexport function serializeColumnStatistics(\n stats: ColumnStatistics[],\n _cacheMaxAgeSeconds?: number | null,\n): Uint8Array {\n return serializeBatch(buildStatisticsBatch(stats));\n}\n",
|
|
53
53
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Metadata types for function introspection and DuckDB registration.\n\nimport {\n FunctionStability,\n NullHandling,\n OrderPreservation,\n OrderDependence,\n DistinctDependence,\n} from \"../types.js\";\n\nexport enum CatalogFunctionType {\n SCALAR = \"SCALAR\",\n TABLE = \"TABLE\",\n TABLE_BUFFERING = \"TABLE_BUFFERING\",\n AGGREGATE = \"AGGREGATE\",\n}\n\nexport interface ParameterInfo {\n name: string;\n position: number | null;\n positionName: string | null;\n typeName: string | null;\n description: string;\n required: boolean;\n default: string | null;\n constraints: string | null;\n isTableInput: boolean;\n isVarargs: boolean;\n isConst: boolean;\n}\n\nexport interface FunctionExample {\n sql: string;\n description: string;\n expectedOutput: string | null;\n}\n\nexport interface ResolvedMetadata {\n name: string;\n className: string;\n functionType: CatalogFunctionType;\n description: string;\n examples: FunctionExample[];\n categories: string[];\n tags: Record<string, string>;\n parameters: ParameterInfo[];\n stability: FunctionStability;\n nullHandling: NullHandling;\n requiredSettings: string[];\n requiredSecrets: string[];\n projectionPushdown: boolean;\n filterPushdown: boolean;\n samplingPushdown: boolean;\n supportedExpressionFilters: string[];\n preservesOrder: OrderPreservation;\n maxWorkers: number | null;\n orderDependent: OrderDependence;\n distinctDependent: DistinctDependence;\n}\n",
|
|
54
54
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Extract metadata from VgiFunction configs.\n\nimport {\n FunctionStability,\n NullHandling,\n OrderPreservation,\n OrderDependence,\n DistinctDependence,\n DEFAULT_MAX_WORKERS,\n} from \"../types.js\";\nimport type { VgiFunction } from \"../functions/types.js\";\nimport type { ArgumentSpec } from \"../arguments/argument-spec.js\";\nimport {\n CatalogFunctionType,\n type ResolvedMetadata,\n type ParameterInfo,\n type FunctionExample,\n} from \"./types.js\";\nimport { type VgiDataType, TypeId, isUtf8, isBinary, isBool, isNull, isFloat, isInt } from \"../arrow/index.js\";\nfunction arrowTypeToName(type: VgiDataType): string | null {\n if (isNull(type)) return null;\n if (isUtf8(type)) return \"VARCHAR\";\n if (isBinary(type)) return \"BLOB\";\n if (isBool(type)) return \"BOOLEAN\";\n if (isInt(type)) {\n const bw = (type as any).bitWidth ?? 32;\n return bw === 64 ? \"BIGINT\" : \"INTEGER\";\n }\n if (isFloat(type)) {\n // arrow-js: Float.precision === 0/1/2 (HALF/SINGLE/DOUBLE).\n // flechette: same precision values.\n const precision = (type as any).precision ?? 2;\n return precision === 1 ? \"FLOAT\" : \"DOUBLE\";\n }\n return String((type as any).toString?.() ?? type.typeId);\n}\n\nfunction specToParameterInfo(spec: ArgumentSpec): ParameterInfo {\n return {\n name: spec.name,\n position: typeof spec.position === \"number\" ? spec.position : null,\n positionName: typeof spec.position === \"string\" ? spec.position : null,\n typeName: arrowTypeToName(spec.arrowType),\n description: \"\",\n required: true,\n default: null,\n constraints: null,\n isTableInput: spec.isTableInput ?? false,\n isVarargs: spec.isVarargs ?? false,\n isConst: spec.isConst ?? false,\n };\n}\n\nexport function resolveMetadata(func: VgiFunction): ResolvedMetadata {\n const meta = func.meta;\n\n let functionType: CatalogFunctionType;\n switch (func.kind) {\n case \"scalar\":\n functionType = CatalogFunctionType.SCALAR;\n break;\n case \"table\":\n case \"table_in_out\":\n functionType = CatalogFunctionType.TABLE;\n break;\n case \"table_buffering\" as any:\n functionType = CatalogFunctionType.TABLE_BUFFERING;\n break;\n case \"aggregate\" as any:\n functionType = CatalogFunctionType.AGGREGATE;\n break;\n default:\n functionType = CatalogFunctionType.TABLE;\n }\n\n const parameters: ParameterInfo[] = func.argumentSpecs.map(specToParameterInfo);\n\n const examples: FunctionExample[] = (meta.examples ?? []).map((e) => ({\n sql: e.sql,\n description: e.description,\n expectedOutput: e.expectedOutput ?? null,\n }));\n\n const maxWorkers = meta.maxWorkers ?? DEFAULT_MAX_WORKERS;\n\n return {\n name: meta.name,\n className: meta.name, // In TS, no class name distinction\n functionType,\n description: meta.description ?? \"\",\n examples,\n categories: meta.categories ?? [],\n tags: meta.tags ?? {},\n parameters,\n stability: meta.stability ?? FunctionStability.CONSISTENT,\n nullHandling: meta.nullHandling ?? NullHandling.DEFAULT,\n requiredSettings: meta.requiredSettings ?? [],\n requiredSecrets: meta.requiredSecrets ?? [],\n projectionPushdown: meta.projectionPushdown ?? false,\n filterPushdown: meta.filterPushdown ?? false,\n samplingPushdown: meta.samplingPushdown ?? false,\n supportedExpressionFilters: meta.supportedExpressionFilters ?? [],\n preservesOrder: meta.preservesOrder ?? OrderPreservation.NO_ORDER_GUARANTEE,\n maxWorkers: maxWorkers === DEFAULT_MAX_WORKERS ? null : maxWorkers,\n orderDependent: meta.orderDependent ?? OrderDependence.NOT_ORDER_DEPENDENT,\n distinctDependent: meta.distinctDependent ?? DistinctDependence.NOT_DISTINCT_DEPENDENT,\n };\n}\n",
|
|
55
|
-
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// CompositeCatalogInterface — fan one worker out across multiple\n// ReadOnlyCatalogInterface instances, picking which one handles each call by\n// the `name` passed at attach time, then by the `attachOpaqueData` returned for all\n// subsequent calls.\n//\n// This mirrors vgi-python's MetaWorker pattern, where one worker process\n// can serve several distinct catalogs (`example`, `projection_repro`,\n// `schema_reconcile`, …) from a single LOCATION.\n\nimport type {\n AttachOpaqueData,\n CatalogAttachResult,\n CatalogInfo,\n CopyFromFormatInfo,\n FunctionInfo,\n IndexInfo,\n MacroInfo,\n MacroType,\n SchemaInfo,\n TableInfo,\n TransactionOpaqueData,\n ViewInfo,\n} from \"./interface.js\";\nimport { CatalogInterface } from \"./interface.js\";\n\nfunction bufferEquals(a: AttachOpaqueData, b: AttachOpaqueData): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\n return true;\n}\n\n// Subprocess transport spawns a pool of worker processes; DuckDB routes calls\n// across them round-robin. Each worker has its own CompositeCatalog instance,\n// so we can't keep routing state in memory — the attach happens in worker A\n// but later calls land on worker B with an empty route table. To route across\n// workers without a shared store, we encode the backend index in the first\n// byte of attach_opaque_data. Every worker decodes the same byte and routes the same\n// way, so the route is implicit in the attach_opaque_data itself.\nconst ROUTE_BYTE = 0;\n\nexport class CompositeCatalogInterface extends CatalogInterface {\n constructor(private readonly _backends: CatalogInterface[]) {\n super();\n if (_backends.length > 256) {\n throw new Error(\"CompositeCatalog: at most 256 backends supported\");\n }\n }\n\n private _route(attachOpaqueData: AttachOpaqueData): CatalogInterface {\n const idx = attachOpaqueData[ROUTE_BYTE];\n const route = this._backends[idx];\n if (!route) {\n throw new Error(`CompositeCatalog: no backend at route-byte index ${idx} (have ${this._backends.length})`);\n }\n return route;\n }\n\n catalogs(): string[] {\n const all: string[] = [];\n for (const b of this._backends) all.push(...b.catalogs());\n return all;\n }\n\n async catalogsInfo(): Promise<CatalogInfo[]> {\n const all: CatalogInfo[] = [];\n for (const b of this._backends) {\n if (b.catalogsInfo) {\n all.push(...(await b.catalogsInfo()));\n } else {\n for (const name of b.catalogs()) {\n all.push({ name, implementation_version: null, data_version_spec: null, attach_option_specs: [], releases: [] });\n }\n }\n }\n return all;\n }\n\n async attach(\n name: string,\n options?: Record<string, unknown>,\n dataVersionSpec?: string | null,\n implementationVersion?: string | null,\n ): Promise<CatalogAttachResult> {\n for (let i = 0; i < this._backends.length; i++) {\n const b = this._backends[i];\n if (b.catalogs().includes(name)) {\n const result = await b.attach(name, options, dataVersionSpec, implementationVersion);\n // Stamp the route-byte so other workers in the pool can decode the\n // backend without needing in-memory state. Mutate in place so the\n // wire returns the rewritten id.\n const stamped = new Uint8Array(result.attach_opaque_data);\n stamped[ROUTE_BYTE] = i;\n result.attach_opaque_data = stamped;\n return result;\n }\n }\n throw new Error(`No worker handles catalog '${name}'`);\n }\n\n async detach(attachOpaqueData: AttachOpaqueData): Promise<void> {\n await this._route(attachOpaqueData).detach(attachOpaqueData);\n }\n\n async version(attachOpaqueData: AttachOpaqueData, transactionOpaqueData?: TransactionOpaqueData): Promise<number> {\n return await this._route(attachOpaqueData).version(attachOpaqueData, transactionOpaqueData);\n }\n\n async schemas(attachOpaqueData: AttachOpaqueData, transactionOpaqueData?: TransactionOpaqueData): Promise<SchemaInfo[]> {\n return await this._route(attachOpaqueData).schemas(attachOpaqueData, transactionOpaqueData);\n }\n\n override async schemaGet(attachOpaqueData: AttachOpaqueData, name: string, transactionOpaqueData?: TransactionOpaqueData): Promise<SchemaInfo | null> {\n return await this._route(attachOpaqueData).schemaGet(attachOpaqueData, name, transactionOpaqueData);\n }\n\n override async schemaContentsTables(attachOpaqueData: AttachOpaqueData, name: string, transactionOpaqueData?: TransactionOpaqueData): Promise<TableInfo[]> {\n return await this._route(attachOpaqueData).schemaContentsTables(attachOpaqueData, name, transactionOpaqueData);\n }\n\n override async schemaContentsViews(attachOpaqueData: AttachOpaqueData, name: string, transactionOpaqueData?: TransactionOpaqueData): Promise<ViewInfo[]> {\n return await this._route(attachOpaqueData).schemaContentsViews(attachOpaqueData, name, transactionOpaqueData);\n }\n\n override async schemaContentsFunctions(attachOpaqueData: AttachOpaqueData, name: string, type: string, transactionOpaqueData?: TransactionOpaqueData): Promise<FunctionInfo[]> {\n return await this._route(attachOpaqueData).schemaContentsFunctions(attachOpaqueData, name, type, transactionOpaqueData);\n }\n\n override async schemaContentsMacros(attachOpaqueData: AttachOpaqueData, name: string, type: string, transactionOpaqueData?: TransactionOpaqueData): Promise<MacroInfo[]> {\n return await this._route(attachOpaqueData).schemaContentsMacros(attachOpaqueData, name, type, transactionOpaqueData);\n }\n\n override async schemaContentsIndexes(attachOpaqueData: AttachOpaqueData, name: string, transactionOpaqueData?: TransactionOpaqueData): Promise<IndexInfo[]> {\n return await this._route(attachOpaqueData).schemaContentsIndexes(attachOpaqueData, name, transactionOpaqueData);\n }\n\n override async indexGet(attachOpaqueData: AttachOpaqueData, schemaName: string, name: string, transactionOpaqueData?: TransactionOpaqueData): Promise<IndexInfo | null> {\n return await this._route(attachOpaqueData).indexGet(attachOpaqueData, schemaName, name, transactionOpaqueData);\n }\n\n override async tableGet(attachOpaqueData: AttachOpaqueData, schemaName: string, name: string, atUnit?: string, atValue?: string, transactionOpaqueData?: TransactionOpaqueData): Promise<TableInfo | null> {\n return await this._route(attachOpaqueData).tableGet(attachOpaqueData, schemaName, name, atUnit, atValue, transactionOpaqueData);\n }\n\n override async tableScanFunctionGet(attachOpaqueData: AttachOpaqueData, schemaName: string, name: string, atUnit?: string, atValue?: string, transactionOpaqueData?: TransactionOpaqueData): Promise<any> {\n return await this._route(attachOpaqueData).tableScanFunctionGet(attachOpaqueData, schemaName, name, atUnit, atValue, transactionOpaqueData);\n }\n\n override async tableScanBranchesGet(attachOpaqueData: AttachOpaqueData, schemaName: string, name: string, atUnit?: string, atValue?: string, transactionOpaqueData?: TransactionOpaqueData): Promise<any> {\n return await this._route(attachOpaqueData).tableScanBranchesGet(attachOpaqueData, schemaName, name, atUnit, atValue, transactionOpaqueData);\n }\n\n override async tableColumnStatisticsGet(attachOpaqueData: AttachOpaqueData, schemaName: string, name: string, transactionOpaqueData?: TransactionOpaqueData): Promise<{ bytes: Uint8Array; cacheMaxAgeSeconds: number | null } | null> {\n return await this._route(attachOpaqueData).tableColumnStatisticsGet(attachOpaqueData, schemaName, name, transactionOpaqueData);\n }\n\n override async viewGet(attachOpaqueData: AttachOpaqueData, schemaName: string, name: string, transactionOpaqueData?: TransactionOpaqueData): Promise<ViewInfo | null> {\n return await this._route(attachOpaqueData).viewGet(attachOpaqueData, schemaName, name, transactionOpaqueData);\n }\n\n override async macroGet(attachOpaqueData: AttachOpaqueData, schemaName: string, name: string, transactionOpaqueData?: TransactionOpaqueData): Promise<MacroInfo | null> {\n return await this._route(attachOpaqueData).macroGet(attachOpaqueData, schemaName, name, transactionOpaqueData);\n }\n\n override async copyFromFormats(attachOpaqueData: AttachOpaqueData, transactionOpaqueData?: TransactionOpaqueData): Promise<CopyFromFormatInfo[]> {\n return await this._route(attachOpaqueData).copyFromFormats(attachOpaqueData, transactionOpaqueData);\n }\n\n override async transactionBegin(attachOpaqueData: AttachOpaqueData): Promise<Uint8Array | null> {\n return await this._route(attachOpaqueData).transactionBegin(attachOpaqueData);\n }\n\n override async transactionCommit(attachOpaqueData: AttachOpaqueData, transactionOpaqueData: TransactionOpaqueData): Promise<void> {\n await this._route(attachOpaqueData).transactionCommit(attachOpaqueData, transactionOpaqueData);\n }\n\n override async transactionRollback(attachOpaqueData: AttachOpaqueData, transactionOpaqueData: TransactionOpaqueData): Promise<void> {\n await this._route(attachOpaqueData).transactionRollback(attachOpaqueData, transactionOpaqueData);\n }\n}\n",
|
|
56
|
-
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Function registry: name -> VgiFunction lookup with overload resolution.\n\nimport { type VgiDataType, isBinary, isBool, isDecimal, isFloat, isInt, isNull, isUtf8 } from \"../arrow/index.js\";\nimport type { VgiSchema } from \"../arrow/index.js\";\nimport type { VgiFunction } from \"./types.js\";\nimport type { Arguments } from \"../arguments/arguments.js\";\nimport type { ArgumentSpec } from \"../arguments/argument-spec.js\";\nimport { FunctionNotFoundError } from \"../errors.js\";\n\nexport interface OverloadContext {\n arguments?: Arguments;\n inputSchema?: VgiSchema | null;\n isScalar?: boolean;\n}\n\nconst EXACT_MATCH_SCORE = 2;\nconst FAMILY_MATCH_SCORE = 1;\n\nfunction typesCompatible(actual: VgiDataType, declared: VgiDataType): boolean {\n if (actual.toString() === declared.toString()) return true;\n // Integer family\n if (isInt(actual) && isInt(declared)) return true;\n // Float/decimal family\n if ((isFloat(actual) || isDecimal(actual)) &&\n (isFloat(declared) || isDecimal(declared))) return true;\n // String family (Utf8, LargeUtf8)\n if (isUtf8(actual) && isUtf8(declared)) return true;\n // Binary family\n if (isBinary(actual) && isBinary(declared)) return true;\n // Boolean\n if (isBool(actual) && isBool(declared)) return true;\n return false;\n}\n\nfunction scoreTypes(\n specs: ArgumentSpec[],\n actualTypes: (VgiDataType | null)[],\n): { score: number; matched: boolean } {\n let score = 0;\n let varArgsSpec: ArgumentSpec | null = null;\n\n for (let i = 0; i < specs.length; i++) {\n const spec = specs[i];\n if (spec.isVarargs) varArgsSpec = spec;\n if (i >= actualTypes.length) break;\n if (spec.isAnyType || isNull(spec.arrowType)) continue;\n const actual = actualTypes[i];\n if (actual === null) continue;\n if (actual.toString() === spec.arrowType.toString()) {\n score += EXACT_MATCH_SCORE;\n } else if (typesCompatible(actual, spec.arrowType)) {\n score += FAMILY_MATCH_SCORE;\n } else {\n return { score, matched: false };\n }\n }\n\n // Score varargs tail beyond declared specs\n if (varArgsSpec && !varArgsSpec.isAnyType && !isNull(varArgsSpec.arrowType)) {\n for (let i = specs.length; i < actualTypes.length; i++) {\n const actual = actualTypes[i];\n if (actual === null) continue;\n if (actual.toString() === varArgsSpec.arrowType.toString()) {\n score += EXACT_MATCH_SCORE;\n } else if (typesCompatible(actual, varArgsSpec.arrowType)) {\n score += FAMILY_MATCH_SCORE;\n } else {\n return { score, matched: false };\n }\n }\n }\n\n return { score, matched: true };\n}\n\nfunction filterByArgumentTypes(\n candidates: VgiFunction[],\n args: Arguments,\n inputSchema: VgiSchema | null | undefined,\n isScalar: boolean,\n): VgiFunction[] {\n const scored: { score: number; func: VgiFunction }[] = [];\n\n for (const func of candidates) {\n const specs = func.argumentSpecs;\n let score = 0;\n let matched = true;\n\n if (isScalar) {\n const constSpecs = specs.filter(s => s.isConst);\n const colSpecs = specs.filter(s => !s.isConst && typeof s.position === \"number\");\n\n // Score const specs against positional argument types\n const constTypes: (VgiDataType | null)[] = [];\n const argsSchema = args.argumentsSchema;\n for (let i = 0; i < args.positional.length; i++) {\n const field = argsSchema?.fields.find(f => f.name === `positional_${i}`);\n constTypes.push(field ? field.type : null);\n }\n const r1 = scoreTypes(constSpecs, constTypes);\n score += r1.score;\n matched = r1.matched;\n\n // Score column specs against inputSchema\n if (matched && inputSchema) {\n const colTypes: (VgiDataType | null)[] = [];\n let varArgsColSpec: ArgumentSpec | null = null;\n for (const spec of colSpecs) {\n if (spec.isVarargs) varArgsColSpec = spec;\n const pos = spec.position as number;\n colTypes.push(pos < inputSchema.fields.length ? inputSchema.fields[pos].type : null);\n }\n // Append varargs tail from inputSchema\n if (varArgsColSpec) {\n const start = (varArgsColSpec.position as number) + 1;\n for (let i = start; i < inputSchema.fields.length; i++) {\n colTypes.push(inputSchema.fields[i].type);\n }\n }\n const r2 = scoreTypes(colSpecs, colTypes);\n score += r2.score;\n matched = r2.matched;\n }\n } else {\n // Table functions: compare declared positional specs against the\n // argument types.\n const posSpecs = specs\n .filter(s => typeof s.position === \"number\" && !s.isTableInput)\n .sort((a, b) => (a.position as number) - (b.position as number));\n\n const posTypes: (VgiDataType | null)[] = [];\n if (func.meta.inputFromArgs) {\n // Blended (\"UNNEST-style\"): the positional args ARE the per-row input\n // columns, so they are NOT on the wire (args.positional is empty).\n // Score the declared positional specs against the INPUT_SCHEMA column\n // types instead (coercibly, via scoreTypes), so same-arity overloads\n // disambiguate by type — matching what DuckDB's binder resolved.\n // Expand a trailing varargs spec across the remaining input columns\n // (mirrors the scalar column path).\n if (inputSchema) {\n let varArgsSpec: ArgumentSpec | null = null;\n for (const spec of posSpecs) {\n if (spec.isVarargs) varArgsSpec = spec;\n const pos = spec.position as number;\n posTypes.push(pos < inputSchema.fields.length ? inputSchema.fields[pos].type : null);\n }\n if (varArgsSpec) {\n for (let i = (varArgsSpec.position as number) + 1; i < inputSchema.fields.length; i++) {\n posTypes.push(inputSchema.fields[i].type);\n }\n }\n }\n } else {\n const argsSchema = args.argumentsSchema;\n for (let i = 0; i < args.positional.length; i++) {\n const field = argsSchema?.fields.find(f => f.name === `positional_${i}`);\n posTypes.push(field ? field.type : null);\n }\n }\n const r = scoreTypes(posSpecs, posTypes);\n score += r.score;\n matched = r.matched;\n }\n\n if (matched) {\n scored.push({ score, func });\n }\n }\n\n if (scored.length === 0) return [];\n const maxScore = Math.max(...scored.map(s => s.score));\n return scored.filter(s => s.score === maxScore).map(s => s.func);\n}\n\nexport class FunctionRegistry {\n private _functions: Map<string, VgiFunction[]> = new Map();\n\n register(func: VgiFunction): void {\n const name = func.meta.name;\n if (!this._functions.has(name)) {\n this._functions.set(name, []);\n }\n this._functions.get(name)!.push(func);\n }\n\n get(name: string, context?: OverloadContext): VgiFunction {\n const candidates = this._functions.get(name);\n if (!candidates || candidates.length === 0) {\n throw new FunctionNotFoundError(name, this.names());\n }\n\n // Fast path: single candidate\n if (candidates.length === 1) {\n return candidates[0];\n }\n\n // No context: return first (backward compat)\n if (!context?.arguments) {\n return candidates[0];\n }\n\n const args = context.arguments;\n const isScalar = context.isScalar ?? (candidates[0].kind === \"scalar\");\n\n // Stage 1: Count-based filtering\n let matches: VgiFunction[];\n if (isScalar) {\n // For scalars, count const specs and match against args.positional.length\n const numConstArgs = args.positional.length;\n matches = candidates.filter(func => {\n const constSpecs = func.argumentSpecs.filter(s => s.isConst);\n const hasVarargs = constSpecs.some(s => s.isVarargs);\n const nonVarargConst = constSpecs.filter(s => !s.isVarargs).length;\n if (hasVarargs) {\n return numConstArgs >= nonVarargConst;\n }\n return constSpecs.length === numConstArgs;\n });\n // If count filtering didn't help, also try matching by column count\n if (matches.length === 0 || matches.length === candidates.length) {\n // Fall back to all candidates for type-based filtering\n matches = candidates;\n }\n } else {\n // For table functions, count positional specs\n const numArgs = args.positional.length;\n matches = candidates.filter(func => {\n const posSpecs = func.argumentSpecs.filter(\n s => typeof s.position === \"number\" && !s.isTableInput\n );\n const hasVarargs = posSpecs.some(s => s.isVarargs);\n const nonVarargs = posSpecs.filter(s => !s.isVarargs).length;\n if (func.meta.inputFromArgs) {\n // Blended (\"UNNEST-style\") overload: the positional params ARE the\n // per-row input columns, so they are NOT on the wire\n // (args.positional is empty). Resolve by INPUT-COLUMN count (arity)\n // against the declared positional params instead — e.g.\n // geo_encode(52,13) -> 2 input cols -> the 2-positional overload.\n // Named (str-position) args still come from the wire arguments.\n const numInputCols = context.inputSchema?.fields.length ?? 0;\n if (hasVarargs) {\n if (numInputCols < nonVarargs) return false;\n } else if (numInputCols !== posSpecs.length) {\n return false;\n }\n // Unknown named argument disqualifies the overload.\n const validNamed = new Set(\n func.argumentSpecs\n .filter(s => typeof s.position === \"string\")\n .map(s => s.position as string),\n );\n for (const key of args.named.keys()) {\n if (!validNamed.has(key)) return false;\n }\n return true;\n }\n if (hasVarargs) {\n return numArgs >= nonVarargs;\n }\n return posSpecs.length === numArgs;\n });\n if (matches.length === 0) {\n matches = candidates;\n }\n }\n\n if (matches.length === 1) {\n return matches[0];\n }\n\n // Stage 2: Type-based filtering\n const typeFiltered = filterByArgumentTypes(\n matches,\n args,\n context.inputSchema,\n isScalar,\n );\n\n if (typeFiltered.length === 1) {\n return typeFiltered[0];\n }\n if (typeFiltered.length > 1) {\n return typeFiltered[0]; // Best score wins\n }\n\n // Fallback: return first candidate\n return candidates[0];\n }\n\n has(name: string): boolean {\n return this._functions.has(name) && this._functions.get(name)!.length > 0;\n }\n\n names(): string[] {\n return [...this._functions.keys()].sort();\n }\n\n all(): VgiFunction[] {\n const result: VgiFunction[] = [];\n for (const candidates of this._functions.values()) {\n result.push(...candidates);\n }\n return result;\n }\n}\n",
|
|
55
|
+
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// CompositeCatalogInterface — fan one worker out across multiple\n// ReadOnlyCatalogInterface instances, picking which one handles each call by\n// the `name` passed at attach time, then by the `attachOpaqueData` returned for all\n// subsequent calls.\n//\n// This mirrors vgi-python's MetaWorker pattern, where one worker process\n// can serve several distinct catalogs (`example`, `projection_repro`,\n// `schema_reconcile`, …) from a single LOCATION.\n\nimport type {\n AttachOpaqueData,\n CatalogAttachResult,\n CatalogInfo,\n CopyFromFormatInfo,\n FunctionInfo,\n IndexInfo,\n MacroInfo,\n MacroType,\n SchemaInfo,\n TableInfo,\n TransactionOpaqueData,\n ViewInfo,\n} from \"./interface.js\";\nimport { CatalogInterface } from \"./interface.js\";\n\nfunction bufferEquals(a: AttachOpaqueData, b: AttachOpaqueData): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\n return true;\n}\n\n// Subprocess transport spawns a pool of worker processes; DuckDB routes calls\n// across them round-robin. Each worker has its own CompositeCatalog instance,\n// so we can't keep routing state in memory — the attach happens in worker A\n// but later calls land on worker B with an empty route table. To route across\n// workers without a shared store, we encode the backend index in the first\n// byte of attach_opaque_data. Every worker decodes the same byte and routes the same\n// way, so the route is implicit in the attach_opaque_data itself.\nconst ROUTE_BYTE = 0;\n\nexport class CompositeCatalogInterface extends CatalogInterface {\n constructor(private readonly _backends: CatalogInterface[]) {\n super();\n if (_backends.length > 256) {\n throw new Error(\"CompositeCatalog: at most 256 backends supported\");\n }\n }\n\n private _route(attachOpaqueData: AttachOpaqueData): CatalogInterface {\n const idx = attachOpaqueData[ROUTE_BYTE];\n const route = this._backends[idx];\n if (!route) {\n throw new Error(`CompositeCatalog: no backend at route-byte index ${idx} (have ${this._backends.length})`);\n }\n return route;\n }\n\n /** Route to the owning backend and ask it, so the answer is per-attachment. */\n override catalogNameForAttach(attachOpaqueData: Uint8Array): string | null {\n try {\n return this._route(attachOpaqueData).catalogNameForAttach(attachOpaqueData);\n } catch {\n return null; // Unroutable attach — fall back to unscoped resolution.\n }\n }\n\n catalogs(): string[] {\n const all: string[] = [];\n for (const b of this._backends) all.push(...b.catalogs());\n return all;\n }\n\n async catalogsInfo(): Promise<CatalogInfo[]> {\n const all: CatalogInfo[] = [];\n for (const b of this._backends) {\n if (b.catalogsInfo) {\n all.push(...(await b.catalogsInfo()));\n } else {\n for (const name of b.catalogs()) {\n all.push({ name, implementation_version: null, data_version_spec: null, attach_option_specs: [], releases: [] });\n }\n }\n }\n return all;\n }\n\n async attach(\n name: string,\n options?: Record<string, unknown>,\n dataVersionSpec?: string | null,\n implementationVersion?: string | null,\n ): Promise<CatalogAttachResult> {\n for (let i = 0; i < this._backends.length; i++) {\n const b = this._backends[i];\n if (b.catalogs().includes(name)) {\n const result = await b.attach(name, options, dataVersionSpec, implementationVersion);\n // Stamp the route-byte so other workers in the pool can decode the\n // backend without needing in-memory state. Mutate in place so the\n // wire returns the rewritten id.\n const stamped = new Uint8Array(result.attach_opaque_data);\n stamped[ROUTE_BYTE] = i;\n result.attach_opaque_data = stamped;\n return result;\n }\n }\n throw new Error(`No worker handles catalog '${name}'`);\n }\n\n async detach(attachOpaqueData: AttachOpaqueData): Promise<void> {\n await this._route(attachOpaqueData).detach(attachOpaqueData);\n }\n\n async version(attachOpaqueData: AttachOpaqueData, transactionOpaqueData?: TransactionOpaqueData): Promise<number> {\n return await this._route(attachOpaqueData).version(attachOpaqueData, transactionOpaqueData);\n }\n\n async schemas(attachOpaqueData: AttachOpaqueData, transactionOpaqueData?: TransactionOpaqueData): Promise<SchemaInfo[]> {\n return await this._route(attachOpaqueData).schemas(attachOpaqueData, transactionOpaqueData);\n }\n\n override async schemaGet(attachOpaqueData: AttachOpaqueData, name: string, transactionOpaqueData?: TransactionOpaqueData): Promise<SchemaInfo | null> {\n return await this._route(attachOpaqueData).schemaGet(attachOpaqueData, name, transactionOpaqueData);\n }\n\n override async schemaContentsTables(attachOpaqueData: AttachOpaqueData, name: string, transactionOpaqueData?: TransactionOpaqueData): Promise<TableInfo[]> {\n return await this._route(attachOpaqueData).schemaContentsTables(attachOpaqueData, name, transactionOpaqueData);\n }\n\n override async schemaContentsViews(attachOpaqueData: AttachOpaqueData, name: string, transactionOpaqueData?: TransactionOpaqueData): Promise<ViewInfo[]> {\n return await this._route(attachOpaqueData).schemaContentsViews(attachOpaqueData, name, transactionOpaqueData);\n }\n\n override async schemaContentsFunctions(attachOpaqueData: AttachOpaqueData, name: string, type: string, transactionOpaqueData?: TransactionOpaqueData): Promise<FunctionInfo[]> {\n return await this._route(attachOpaqueData).schemaContentsFunctions(attachOpaqueData, name, type, transactionOpaqueData);\n }\n\n override async schemaContentsMacros(attachOpaqueData: AttachOpaqueData, name: string, type: string, transactionOpaqueData?: TransactionOpaqueData): Promise<MacroInfo[]> {\n return await this._route(attachOpaqueData).schemaContentsMacros(attachOpaqueData, name, type, transactionOpaqueData);\n }\n\n override async schemaContentsIndexes(attachOpaqueData: AttachOpaqueData, name: string, transactionOpaqueData?: TransactionOpaqueData): Promise<IndexInfo[]> {\n return await this._route(attachOpaqueData).schemaContentsIndexes(attachOpaqueData, name, transactionOpaqueData);\n }\n\n override async indexGet(attachOpaqueData: AttachOpaqueData, schemaName: string, name: string, transactionOpaqueData?: TransactionOpaqueData): Promise<IndexInfo | null> {\n return await this._route(attachOpaqueData).indexGet(attachOpaqueData, schemaName, name, transactionOpaqueData);\n }\n\n override async tableGet(attachOpaqueData: AttachOpaqueData, schemaName: string, name: string, atUnit?: string, atValue?: string, transactionOpaqueData?: TransactionOpaqueData): Promise<TableInfo | null> {\n return await this._route(attachOpaqueData).tableGet(attachOpaqueData, schemaName, name, atUnit, atValue, transactionOpaqueData);\n }\n\n override async tableScanFunctionGet(attachOpaqueData: AttachOpaqueData, schemaName: string, name: string, atUnit?: string, atValue?: string, transactionOpaqueData?: TransactionOpaqueData): Promise<any> {\n return await this._route(attachOpaqueData).tableScanFunctionGet(attachOpaqueData, schemaName, name, atUnit, atValue, transactionOpaqueData);\n }\n\n override async tableScanBranchesGet(attachOpaqueData: AttachOpaqueData, schemaName: string, name: string, atUnit?: string, atValue?: string, transactionOpaqueData?: TransactionOpaqueData): Promise<any> {\n return await this._route(attachOpaqueData).tableScanBranchesGet(attachOpaqueData, schemaName, name, atUnit, atValue, transactionOpaqueData);\n }\n\n override async tableColumnStatisticsGet(attachOpaqueData: AttachOpaqueData, schemaName: string, name: string, transactionOpaqueData?: TransactionOpaqueData): Promise<{ bytes: Uint8Array; cacheMaxAgeSeconds: number | null } | null> {\n return await this._route(attachOpaqueData).tableColumnStatisticsGet(attachOpaqueData, schemaName, name, transactionOpaqueData);\n }\n\n override async viewGet(attachOpaqueData: AttachOpaqueData, schemaName: string, name: string, transactionOpaqueData?: TransactionOpaqueData): Promise<ViewInfo | null> {\n return await this._route(attachOpaqueData).viewGet(attachOpaqueData, schemaName, name, transactionOpaqueData);\n }\n\n override async macroGet(attachOpaqueData: AttachOpaqueData, schemaName: string, name: string, transactionOpaqueData?: TransactionOpaqueData): Promise<MacroInfo | null> {\n return await this._route(attachOpaqueData).macroGet(attachOpaqueData, schemaName, name, transactionOpaqueData);\n }\n\n override async copyFromFormats(attachOpaqueData: AttachOpaqueData, transactionOpaqueData?: TransactionOpaqueData): Promise<CopyFromFormatInfo[]> {\n return await this._route(attachOpaqueData).copyFromFormats(attachOpaqueData, transactionOpaqueData);\n }\n\n override async transactionBegin(attachOpaqueData: AttachOpaqueData): Promise<Uint8Array | null> {\n return await this._route(attachOpaqueData).transactionBegin(attachOpaqueData);\n }\n\n override async transactionCommit(attachOpaqueData: AttachOpaqueData, transactionOpaqueData: TransactionOpaqueData): Promise<void> {\n await this._route(attachOpaqueData).transactionCommit(attachOpaqueData, transactionOpaqueData);\n }\n\n override async transactionRollback(attachOpaqueData: AttachOpaqueData, transactionOpaqueData: TransactionOpaqueData): Promise<void> {\n await this._route(attachOpaqueData).transactionRollback(attachOpaqueData, transactionOpaqueData);\n }\n}\n",
|
|
56
|
+
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Function registry: name -> VgiFunction lookup with overload resolution.\n\nimport {\n type VgiDataType,\n isBinary, isBool, isDecimal, isFloat, isInt, isNull, isUtf8,\n typeSignature,\n} from \"../arrow/index.js\";\nimport type { VgiSchema } from \"../arrow/index.js\";\nimport type { VgiFunction } from \"./types.js\";\nimport type { Arguments } from \"../arguments/arguments.js\";\nimport type { ArgumentSpec } from \"../arguments/argument-spec.js\";\nimport { FunctionNotFoundError } from \"../errors.js\";\n\nexport interface OverloadContext {\n arguments?: Arguments;\n inputSchema?: VgiSchema | null;\n isScalar?: boolean;\n /**\n * Catalog schema that declares the function, from `BindRequest.schema_name`.\n * A worker may register the same name in more than one schema, so the bare\n * name is not a unique key. When set, resolution is scoped to that schema and\n * never falls back to another one; when absent, every schema is searched.\n */\n schemaName?: string | null;\n /**\n * Catalog that owns the function, resolved from the bind's\n * `attach_opaque_data`. Two catalogs served by one worker may each declare\n * the same schema *and* function name, in which case only the catalog tells\n * them apart. Absent for calls with no attachment.\n */\n catalogName?: string | null;\n}\n\nconst EXACT_MATCH_SCORE = 2;\nconst FAMILY_MATCH_SCORE = 1;\n\n/**\n * Exact structural type identity.\n *\n * `toString()` cannot be used: arrow-js DataTypes stringify to a meaningful\n * name, flechette's plain-object types all stringify to \"[object Object]\".\n * Under flechette that made every exact-match test fail, every overload score\n * collapse to the family tie, and `type_info(42::BIGINT)` resolve to the\n * INTEGER overload.\n */\nfunction typesIdentical(a: VgiDataType, b: VgiDataType): boolean {\n return typeSignature(a) === typeSignature(b);\n}\n\nfunction typesCompatible(actual: VgiDataType, declared: VgiDataType): boolean {\n if (typesIdentical(actual, declared)) return true;\n // Integer family\n if (isInt(actual) && isInt(declared)) return true;\n // Float/decimal family\n if ((isFloat(actual) || isDecimal(actual)) &&\n (isFloat(declared) || isDecimal(declared))) return true;\n // String family (Utf8, LargeUtf8)\n if (isUtf8(actual) && isUtf8(declared)) return true;\n // Binary family\n if (isBinary(actual) && isBinary(declared)) return true;\n // Boolean\n if (isBool(actual) && isBool(declared)) return true;\n return false;\n}\n\nfunction scoreTypes(\n specs: ArgumentSpec[],\n actualTypes: (VgiDataType | null)[],\n): { score: number; matched: boolean } {\n let score = 0;\n let varArgsSpec: ArgumentSpec | null = null;\n\n for (let i = 0; i < specs.length; i++) {\n const spec = specs[i];\n if (spec.isVarargs) varArgsSpec = spec;\n if (i >= actualTypes.length) break;\n if (spec.isAnyType || isNull(spec.arrowType)) continue;\n const actual = actualTypes[i];\n if (actual === null) continue;\n if (typesIdentical(actual, spec.arrowType)) {\n score += EXACT_MATCH_SCORE;\n } else if (typesCompatible(actual, spec.arrowType)) {\n score += FAMILY_MATCH_SCORE;\n } else {\n return { score, matched: false };\n }\n }\n\n // Score varargs tail beyond declared specs\n if (varArgsSpec && !varArgsSpec.isAnyType && !isNull(varArgsSpec.arrowType)) {\n for (let i = specs.length; i < actualTypes.length; i++) {\n const actual = actualTypes[i];\n if (actual === null) continue;\n if (typesIdentical(actual, varArgsSpec.arrowType)) {\n score += EXACT_MATCH_SCORE;\n } else if (typesCompatible(actual, varArgsSpec.arrowType)) {\n score += FAMILY_MATCH_SCORE;\n } else {\n return { score, matched: false };\n }\n }\n }\n\n return { score, matched: true };\n}\n\nfunction filterByArgumentTypes(\n candidates: VgiFunction[],\n args: Arguments,\n inputSchema: VgiSchema | null | undefined,\n isScalar: boolean,\n): VgiFunction[] {\n const scored: { score: number; func: VgiFunction }[] = [];\n\n for (const func of candidates) {\n const specs = func.argumentSpecs;\n let score = 0;\n let matched = true;\n\n if (isScalar) {\n const constSpecs = specs.filter(s => s.isConst);\n const colSpecs = specs.filter(s => !s.isConst && typeof s.position === \"number\");\n\n // Score const specs against positional argument types\n const constTypes: (VgiDataType | null)[] = [];\n const argsSchema = args.argumentsSchema;\n for (let i = 0; i < args.positional.length; i++) {\n const field = argsSchema?.fields.find(f => f.name === `positional_${i}`);\n constTypes.push(field ? field.type : null);\n }\n const r1 = scoreTypes(constSpecs, constTypes);\n score += r1.score;\n matched = r1.matched;\n\n // Score column specs against inputSchema\n if (matched && inputSchema) {\n const colTypes: (VgiDataType | null)[] = [];\n let varArgsColSpec: ArgumentSpec | null = null;\n for (const spec of colSpecs) {\n if (spec.isVarargs) varArgsColSpec = spec;\n const pos = spec.position as number;\n colTypes.push(pos < inputSchema.fields.length ? inputSchema.fields[pos].type : null);\n }\n // Append varargs tail from inputSchema\n if (varArgsColSpec) {\n const start = (varArgsColSpec.position as number) + 1;\n for (let i = start; i < inputSchema.fields.length; i++) {\n colTypes.push(inputSchema.fields[i].type);\n }\n }\n const r2 = scoreTypes(colSpecs, colTypes);\n score += r2.score;\n matched = r2.matched;\n }\n } else {\n // Table functions: compare declared positional specs against the\n // argument types.\n const posSpecs = specs\n .filter(s => typeof s.position === \"number\" && !s.isTableInput)\n .sort((a, b) => (a.position as number) - (b.position as number));\n\n const posTypes: (VgiDataType | null)[] = [];\n if (func.meta.inputFromArgs) {\n // Blended (\"UNNEST-style\"): the positional args ARE the per-row input\n // columns, so they are NOT on the wire (args.positional is empty).\n // Score the declared positional specs against the INPUT_SCHEMA column\n // types instead (coercibly, via scoreTypes), so same-arity overloads\n // disambiguate by type — matching what DuckDB's binder resolved.\n // Expand a trailing varargs spec across the remaining input columns\n // (mirrors the scalar column path).\n if (inputSchema) {\n let varArgsSpec: ArgumentSpec | null = null;\n for (const spec of posSpecs) {\n if (spec.isVarargs) varArgsSpec = spec;\n const pos = spec.position as number;\n posTypes.push(pos < inputSchema.fields.length ? inputSchema.fields[pos].type : null);\n }\n if (varArgsSpec) {\n for (let i = (varArgsSpec.position as number) + 1; i < inputSchema.fields.length; i++) {\n posTypes.push(inputSchema.fields[i].type);\n }\n }\n }\n } else {\n const argsSchema = args.argumentsSchema;\n for (let i = 0; i < args.positional.length; i++) {\n const field = argsSchema?.fields.find(f => f.name === `positional_${i}`);\n posTypes.push(field ? field.type : null);\n }\n }\n const r = scoreTypes(posSpecs, posTypes);\n score += r.score;\n matched = r.matched;\n }\n\n if (matched) {\n scored.push({ score, func });\n }\n }\n\n if (scored.length === 0) return [];\n const maxScore = Math.max(...scored.map(s => s.score));\n return scored.filter(s => s.score === maxScore).map(s => s.func);\n}\n\n/** Key for the schema-scoped index: lowercased schema, then function name. */\nfunction schemaKey(schemaName: string, functionName: string): string {\n return `${schemaName.toLowerCase()}\\u0000${functionName}`;\n}\n\n/** Key for the catalog-scoped index: lowercased catalog, then the schema key. */\nfunction catalogKey(catalogName: string, schemaName: string, functionName: string): string {\n return `${catalogName.toLowerCase()}\\u0000${schemaKey(schemaName, functionName)}`;\n}\n\nexport class FunctionRegistry {\n private _functions: Map<string, VgiFunction[]> = new Map();\n // (lowercased schema, function name) -> functions declared in that schema.\n // Populated by registerInSchema(), which catalog construction calls for every\n // function a SchemaDescriptor lists. Lets a schema-qualified bind pick the\n // right implementation when one name is registered in several schemas.\n private _bySchema: Map<string, VgiFunction[]> = new Map();\n // (lowercased catalog, lowercased schema, function name) -> functions. Needed\n // because two catalogs in one worker may declare the same schema AND name.\n private _byCatalog: Map<string, VgiFunction[]> = new Map();\n\n register(func: VgiFunction): void {\n const name = func.meta.name;\n if (!this._functions.has(name)) {\n this._functions.set(name, []);\n }\n this._functions.get(name)!.push(func);\n }\n\n /**\n * Record that `func` is declared in `schemaName`, in addition to the flat\n * by-name index. Idempotent, and independent of `register()` so a function\n * reachable from several schemas (e.g. a scan function referenced by tables in\n * more than one schema) resolves from any of them.\n */\n registerInSchema(func: VgiFunction, schemaName: string, catalogName?: string): void {\n const add = (map: Map<string, VgiFunction[]>, key: string) => {\n const bucket = map.get(key);\n if (!bucket) {\n map.set(key, [func]);\n return;\n }\n if (!bucket.includes(func)) bucket.push(func);\n };\n add(this._bySchema, schemaKey(schemaName, func.meta.name));\n if (catalogName) {\n add(this._byCatalog, catalogKey(catalogName, schemaName, func.meta.name));\n }\n }\n\n /** Schemas that declare `functionName`, sorted — for error messages. */\n schemasFor(functionName: string): string[] {\n const out: string[] = [];\n for (const key of this._bySchema.keys()) {\n const [schema, name] = key.split(\"\\u0000\");\n if (name === functionName) out.push(schema);\n }\n return out.sort();\n }\n\n get(name: string, context?: OverloadContext): VgiFunction {\n let candidates = this._functions.get(name);\n\n // A schema-qualified lookup is exact: only functions declared in that schema\n // are candidates, so a name registered in two schemas dispatches to the one\n // the caller named rather than colliding as an overload.\n // Catalog first: it is the only key that separates two catalogs declaring\n // the same schema and name.\n const catalogName = context?.catalogName;\n const schemaName = context?.schemaName;\n if (catalogName && schemaName) {\n const scoped = this._byCatalog.get(catalogKey(catalogName, schemaName, name));\n if (scoped && scoped.length > 0) {\n return this._disambiguate(name, scoped, context);\n }\n }\n if (schemaName) {\n const scoped = this._bySchema.get(schemaKey(schemaName, name));\n if (scoped && scoped.length > 0) {\n candidates = scoped;\n } else if (candidates && candidates.length > 0) {\n const schemas = this.schemasFor(name);\n if (schemas.length > 0) {\n throw new Error(\n `Function '${name}' is not registered in schema '${schemaName}'. ` +\n `It is available in: [${schemas.join(\", \")}]`,\n );\n }\n }\n }\n\n if (!candidates || candidates.length === 0) {\n throw new FunctionNotFoundError(name, this.names());\n }\n\n return this._disambiguate(name, candidates, context);\n }\n\n /**\n * Pick one function from an already-scoped candidate list, by argument shape\n * and types. Scoping (catalog / schema) happens in `get()`; by the time this\n * runs, every candidate is a legitimate overload of the same name.\n */\n private _disambiguate(\n name: string,\n candidates: VgiFunction[],\n context?: OverloadContext,\n ): VgiFunction {\n // Fast path: single candidate\n if (candidates.length === 1) {\n return candidates[0];\n }\n\n // No context: return first (backward compat)\n if (!context?.arguments) {\n return candidates[0];\n }\n\n const args = context.arguments;\n const isScalar = context.isScalar ?? (candidates[0].kind === \"scalar\");\n\n // Stage 1: Count-based filtering\n let matches: VgiFunction[];\n if (isScalar) {\n // For scalars, count const specs and match against args.positional.length\n const numConstArgs = args.positional.length;\n matches = candidates.filter(func => {\n const constSpecs = func.argumentSpecs.filter(s => s.isConst);\n const hasVarargs = constSpecs.some(s => s.isVarargs);\n const nonVarargConst = constSpecs.filter(s => !s.isVarargs).length;\n if (hasVarargs) {\n return numConstArgs >= nonVarargConst;\n }\n return constSpecs.length === numConstArgs;\n });\n // If count filtering didn't help, also try matching by column count\n if (matches.length === 0 || matches.length === candidates.length) {\n // Fall back to all candidates for type-based filtering\n matches = candidates;\n }\n } else {\n // For table functions, count positional specs\n const numArgs = args.positional.length;\n matches = candidates.filter(func => {\n const posSpecs = func.argumentSpecs.filter(\n s => typeof s.position === \"number\" && !s.isTableInput\n );\n const hasVarargs = posSpecs.some(s => s.isVarargs);\n const nonVarargs = posSpecs.filter(s => !s.isVarargs).length;\n if (func.meta.inputFromArgs) {\n // Blended (\"UNNEST-style\") overload: the positional params ARE the\n // per-row input columns, so they are NOT on the wire\n // (args.positional is empty). Resolve by INPUT-COLUMN count (arity)\n // against the declared positional params instead — e.g.\n // geo_encode(52,13) -> 2 input cols -> the 2-positional overload.\n // Named (str-position) args still come from the wire arguments.\n const numInputCols = context.inputSchema?.fields.length ?? 0;\n if (hasVarargs) {\n if (numInputCols < nonVarargs) return false;\n } else if (numInputCols !== posSpecs.length) {\n return false;\n }\n // Unknown named argument disqualifies the overload.\n const validNamed = new Set(\n func.argumentSpecs\n .filter(s => typeof s.position === \"string\")\n .map(s => s.position as string),\n );\n for (const key of args.named.keys()) {\n if (!validNamed.has(key)) return false;\n }\n return true;\n }\n if (hasVarargs) {\n return numArgs >= nonVarargs;\n }\n return posSpecs.length === numArgs;\n });\n if (matches.length === 0) {\n matches = candidates;\n }\n }\n\n if (matches.length === 1) {\n return matches[0];\n }\n\n // Stage 2: Type-based filtering\n const typeFiltered = filterByArgumentTypes(\n matches,\n args,\n context.inputSchema,\n isScalar,\n );\n\n if (typeFiltered.length === 1) {\n return typeFiltered[0];\n }\n if (typeFiltered.length > 1) {\n return typeFiltered[0]; // Best score wins\n }\n\n // Fallback: return first candidate\n return candidates[0];\n }\n\n has(name: string): boolean {\n return this._functions.has(name) && this._functions.get(name)!.length > 0;\n }\n\n names(): string[] {\n return [...this._functions.keys()].sort();\n }\n\n all(): VgiFunction[] {\n const result: VgiFunction[] = [];\n for (const candidates of this._functions.values()) {\n result.push(...candidates);\n }\n return result;\n }\n}\n",
|
|
57
57
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Metadata -> Arrow batch serialization.\n// Must produce batches matching Python's _METADATA_SCHEMA exactly.\n\nimport {\n type VgiBatch,\n schema as makeSchema,\n field,\n utf8,\n int32,\n bool,\n list,\n struct as makeStruct,\n map as makeMap,\n batchFromColumns,\n emptyBatch,\n} from \"../arrow/index.js\";\nimport type { ResolvedMetadata, ParameterInfo, FunctionExample } from \"./types.js\";\n\n// ============================================================================\n// Schema definitions matching Python's _METADATA_SCHEMA exactly\n// ============================================================================\n\nconst EXAMPLE_STRUCT = makeStruct([\n field(\"sql\", utf8(), false),\n field(\"description\", utf8(), false),\n field(\"expected_output\", utf8(), true),\n]);\n\nconst PARAMETER_STRUCT = makeStruct([\n field(\"name\", utf8(), false),\n field(\"position\", int32(), true),\n field(\"position_name\", utf8(), true),\n field(\"type_name\", utf8(), true),\n field(\"description\", utf8(), false),\n field(\"required\", bool(), false),\n field(\"default\", utf8(), true),\n field(\"constraints\", utf8(), true),\n field(\"is_table_input\", bool(), false),\n field(\"is_varargs\", bool(), false),\n field(\"is_const\", bool(), false),\n]);\n\nconst METADATA_SCHEMA = makeSchema([\n field(\"name\", utf8(), false),\n field(\"class_name\", utf8(), false),\n field(\"function_type\", utf8(), false),\n field(\"description\", utf8(), false),\n field(\"examples\", list(field(\"item\", EXAMPLE_STRUCT, true)), false),\n field(\"categories\", list(field(\"item\", utf8(), true)), false),\n field(\"tags\", makeMap(field(\"key\", utf8(), false), field(\"value\", utf8(), true), false), false),\n field(\"parameters\", list(field(\"item\", PARAMETER_STRUCT, true)), false),\n field(\"stability\", utf8(), false),\n field(\"null_handling\", utf8(), false),\n field(\"required_settings\", list(field(\"item\", utf8(), true)), false),\n field(\"required_secrets\", list(field(\"item\", utf8(), true)), false),\n field(\"projection_pushdown\", bool(), false),\n field(\"filter_pushdown\", bool(), false),\n field(\"preserves_order\", utf8(), false),\n field(\"max_workers\", int32(), true),\n field(\"order_dependent\", utf8(), false),\n field(\"distinct_dependent\", utf8(), false),\n]);\n\nexport { METADATA_SCHEMA };\n\n// ============================================================================\n// Serialization\n// ============================================================================\n\nfunction metadataToRow(m: ResolvedMetadata): Record<string, any> {\n return {\n name: m.name,\n class_name: m.className,\n function_type: m.functionType,\n description: m.description,\n examples: m.examples.map((e) => ({\n sql: e.sql,\n description: e.description,\n expected_output: e.expectedOutput,\n })),\n categories: m.categories,\n tags: Object.entries(m.tags).map(([k, v]) => [k, v]),\n parameters: m.parameters.map((p) => ({\n name: p.name,\n position: p.position,\n position_name: p.positionName,\n type_name: p.typeName,\n description: p.description,\n required: p.required,\n default: p.default,\n constraints: p.constraints,\n is_table_input: p.isTableInput,\n is_varargs: p.isVarargs,\n is_const: p.isConst,\n })),\n stability: m.stability,\n null_handling: m.nullHandling,\n required_settings: m.requiredSettings,\n required_secrets: m.requiredSecrets,\n projection_pushdown: m.projectionPushdown,\n filter_pushdown: m.filterPushdown,\n sampling_pushdown: m.samplingPushdown,\n supported_expression_filters: m.supportedExpressionFilters,\n preserves_order: m.preservesOrder,\n max_workers: m.maxWorkers,\n order_dependent: m.orderDependent,\n distinct_dependent: m.distinctDependent,\n };\n}\n\n/**\n * Serialize multiple ResolvedMetadata to a single Arrow RecordBatch.\n */\nexport function metadatasToArrow(metadatas: ResolvedMetadata[]): VgiBatch {\n if (metadatas.length === 0) {\n return emptyBatch(METADATA_SCHEMA);\n }\n\n const rows = metadatas.map(metadataToRow);\n\n // Pivot rows -> columns keyed by field name; the facade handles complex\n // type construction (List<Struct>, Map, etc.) uniformly.\n const columns: Record<string, any[]> = {};\n for (const f of METADATA_SCHEMA.fields) {\n columns[f.name] = rows.map((r) => r[f.name]);\n }\n\n return batchFromColumns(columns, METADATA_SCHEMA);\n}\n\n/**\n * Deserialize Arrow RecordBatch to ResolvedMetadata array.\n */\nexport function arrowToMetadatas(batch: VgiBatch): ResolvedMetadata[] {\n const results: ResolvedMetadata[] = [];\n\n for (let i = 0; i < batch.numRows; i++) {\n const get = (name: string) => {\n const col = batch.getChild(name);\n return col ? col.get(i) : null;\n };\n\n // Parse examples\n const rawExamples = get(\"examples\") as any ?? [];\n const examples: FunctionExample[] = [];\n if (rawExamples && typeof rawExamples[Symbol.iterator] === \"function\") {\n for (const e of rawExamples) {\n if (e) {\n examples.push({\n sql: e.sql ?? \"\",\n description: e.description ?? \"\",\n expectedOutput: e.expected_output ?? null,\n });\n }\n }\n }\n\n // Parse parameters\n const rawParams = get(\"parameters\") as any ?? [];\n const parameters: ParameterInfo[] = [];\n if (rawParams && typeof rawParams[Symbol.iterator] === \"function\") {\n for (const p of rawParams) {\n if (p) {\n parameters.push({\n name: p.name ?? \"\",\n position: p.position ?? null,\n positionName: p.position_name ?? null,\n typeName: p.type_name ?? null,\n description: p.description ?? \"\",\n required: p.required ?? true,\n default: p.default ?? null,\n constraints: p.constraints ?? null,\n isTableInput: p.is_table_input ?? false,\n isVarargs: p.is_varargs ?? false,\n isConst: p.is_const ?? false,\n });\n }\n }\n }\n\n // Parse categories\n const rawCategories = get(\"categories\") as any ?? [];\n const categories: string[] = rawCategories\n ? [...rawCategories].filter((c: any) => c != null)\n : [];\n\n // Parse tags (Map). arrow-js MapRow is iterable of {key,value}; flechette\n // returns [[k,v],...] arrays. Handle both.\n const rawTags = get(\"tags\") as any;\n const tags: Record<string, string> = {};\n if (rawTags) {\n if (typeof rawTags[Symbol.iterator] === \"function\") {\n for (const entry of rawTags) {\n if (Array.isArray(entry)) {\n tags[String(entry[0])] = String(entry[1] ?? \"\");\n } else if (entry && entry.key != null) {\n tags[String(entry.key)] = String(entry.value ?? \"\");\n }\n }\n }\n }\n\n const rawRequiredSettings = get(\"required_settings\") as any ?? [];\n const requiredSettings: string[] = rawRequiredSettings\n ? [...rawRequiredSettings].filter((s: any) => s != null)\n : [];\n\n const rawRequiredSecrets = get(\"required_secrets\") as any ?? [];\n const requiredSecrets: string[] = rawRequiredSecrets\n ? [...rawRequiredSecrets].filter((s: any) => s != null)\n : [];\n\n results.push({\n name: (get(\"name\") as string) ?? \"\",\n className: (get(\"class_name\") as string) ?? \"\",\n functionType: (get(\"function_type\") as any) ?? \"TABLE\",\n description: (get(\"description\") as string) ?? \"\",\n examples,\n categories,\n tags,\n parameters,\n stability: (get(\"stability\") as any) ?? \"CONSISTENT\",\n nullHandling: (get(\"null_handling\") as any) ?? \"DEFAULT\",\n requiredSettings,\n requiredSecrets,\n projectionPushdown: (get(\"projection_pushdown\") as boolean) ?? false,\n filterPushdown: (get(\"filter_pushdown\") as boolean) ?? false,\n samplingPushdown: (get(\"sampling_pushdown\") as boolean) ?? false,\n supportedExpressionFilters: (() => {\n const raw = get(\"supported_expression_filters\") as any ?? [];\n return raw ? [...raw].filter((s: any) => s != null).map(String) : [];\n })(),\n preservesOrder: (get(\"preserves_order\") as any) ?? \"NO_ORDER_GUARANTEE\",\n maxWorkers: (get(\"max_workers\") as number | null) ?? null,\n orderDependent: (get(\"order_dependent\") as any) ?? \"NOT_ORDER_DEPENDENT\",\n distinctDependent: (get(\"distinct_dependent\") as any) ?? \"NOT_DISTINCT_DEPENDENT\",\n });\n }\n\n return results;\n}\n",
|
|
58
|
-
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Build VGI protocol from worker implementation.\n// Orchestrator that registers function, aggregate, and catalog handlers\n// against vgi-rpc Protocol. The handler implementations live in handlers/.\n\nimport { Protocol } from \"@query-farm/vgi-rpc\";\n\n// NOTE: We must NOT use vgi-rpc's str/bytes/int/etc. singletons in Schema objects\n// because Bun loads apache-arrow as separate module instances for our code vs vgi-rpc's\n// compiled dist. Instead, we pre-build Schema objects and pass them directly to Protocol\n// methods (toSchema() passes Schema instances through without instanceof checks).\nimport type { FunctionRegistry } from \"../functions/registry.js\";\nimport type { CatalogInterface } from \"../catalog/interface.js\";\nimport { registerFunctionMethods } from \"./handlers/function.js\";\nimport { registerAggregateMethods } from \"./handlers/aggregate.js\";\nimport { registerTableBufferingMethods } from \"./handlers/table-buffering.js\";\nimport { registerCatalogMethods } from \"./handlers/catalog/index.js\";\n\nexport interface ProtocolConfig {\n registry: FunctionRegistry;\n catalogInterface?: CatalogInterface;\n catalogName?: string;\n /**\n * Recover accumulated exchange state from FINALIZE init_opaque_data.\n * For HTTP transport, this unpacks the state token that the C++ extension\n * passes from the last INPUT exchange to the FINALIZE init request.\n * Returns the deserialized VGI dispatch state object (with userState field).\n */\n recoverExchangeState?: (opaqueData: Uint8Array) => any;\n /**\n * AEAD signing key for sealing catalog opaque-data envelopes. Pass the same\n * 32-byte key used for HTTP state tokens. When omitted (subprocess / unix\n * transports) attach_opaque_data / transaction_opaque_data pass through\n * unsealed — OS process ownership already enforces identity there.\n */\n signingKey?: Uint8Array;\n}\n\nexport function buildVgiProtocol(config: ProtocolConfig): Protocol {\n const protocol = new Protocol(\"vgi\");\n\n registerFunctionMethods(protocol, {\n registry: config.registry,\n recoverExchangeState: config.recoverExchangeState,\n signingKey: config.signingKey,\n });\n registerAggregateMethods(protocol, config.registry);\n registerTableBufferingMethods(protocol, config.registry, config.signingKey);\n registerCatalogMethods(protocol, config.catalogInterface, config.catalogName, config.signingKey);\n\n return protocol;\n}\n",
|
|
59
|
-
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Handlers for the per-function lifecycle: bind, init (exchange), cardinality,\n// statistics. Generic over scalar/table/table-in-out — each function kind\n// implements VgiFunction.bind/globalInit/createStreamHandlers.\n\nimport { type VgiSchema, schema, type VgiField, field, type VgiDataType, binary, int64 } from \"../../arrow/index.js\";\nimport { Protocol } from \"@query-farm/vgi-rpc\";\nimport type { FunctionRegistry } from \"../../functions/registry.js\";\nimport type { StreamHandlers, HandlerState } from \"../../functions/types.js\";\nimport {\n deserializeBindRequest,\n serializeBindResponse,\n deserializeInitRequest,\n serializeGlobalInitResponse,\n deserializeCardinalityRequest,\n serializeTableCardinality,\n} from \"../serialize.js\";\nimport type { GlobalInitResponse } from \"../types.js\";\nimport { batchToScalarDict, deserializeBatch } from \"../../util/arrow/index.js\";\nimport { toUint8Array } from \"../../util/bytes.js\";\nimport { serializeColumnStatistics } from \"../../util/statistics.js\";\nimport { BindResultSchema, TableFunctionCardinalityResultSchema, TableFunctionDynamicToStringResultSchema } from \"../../generated/vgi-protocol-schemas.js\";\nimport {\n REQUEST_PARAMS_SCHEMA,\n RESULT_BINARY_SCHEMA,\n RESULT_BINARY_NULLABLE_SCHEMA,\n unwrapRequest,\n wrapResult,\n overloadContext,\n recoverFinalizeState,\n} from \"./shared.js\";\nimport { openAttach } from \"./catalog/shared.js\";\n\nexport interface FunctionHandlerConfig {\n registry: FunctionRegistry;\n recoverExchangeState?: (opaqueData: Uint8Array) => any;\n signingKey?: Uint8Array;\n}\n\nexport function registerFunctionMethods(protocol: Protocol, config: FunctionHandlerConfig): void {\n const { registry, signingKey } = config;\n\n // The framework mints every attach as uuid(16) || catalog_bytes (sealed on\n // HTTP, plaintext on subprocess). Function bodies — like catalog bodies —\n // must see the catalog's own bytes, so unseal (when keyed) and strip the\n // framework UUID prefix before the user function reads attach_opaque_data.\n async function stripAttach(attach: any, ctx: any): Promise<Uint8Array | null> {\n if (attach == null) return null;\n const env = toUint8Array(attach);\n if (env.length === 0) return env;\n return openAttach(env, ctx?.auth, signingKey);\n }\n\n const initHeaderSchema = schema([\n field(\"execution_id\", binary(), false),\n field(\"opaque_data\", binary(), true),\n field(\"max_workers\", int64(), false),\n ]);\n\n const emptySchema = schema([]);\n\n // Dummy non-empty schema for the init exchange registration.\n // The dispatch determines producer vs exchange based on inputSchema emptiness.\n // We need exchange mode so that input batches are passed to our callback.\n // The actual input schema comes from the IPC stream, not this registration.\n const dummyInputSchema = schema([\n field(\"_tick\", binary(), true),\n ]);\n\n // --------------------------------------------------------------------------\n // bind (unary)\n // --------------------------------------------------------------------------\n protocol.unary(\"bind\", {\n params: REQUEST_PARAMS_SCHEMA,\n result: RESULT_BINARY_SCHEMA,\n handler: async (params, ctx) => {\n const innerParams = unwrapRequest(params.request);\n const request = deserializeBindRequest(innerParams);\n request.attach_opaque_data = await stripAttach(request.attach_opaque_data, ctx);\n const func = registry.get(request.function_name, overloadContext(request));\n const response = await func.bind(request);\n const serialized = serializeBindResponse(response);\n return wrapResult(serialized, BindResultSchema);\n },\n });\n\n // --------------------------------------------------------------------------\n // init (streaming) - dynamically produces either producer or exchange streams\n // --------------------------------------------------------------------------\n protocol.exchange(\"init\", {\n params: REQUEST_PARAMS_SCHEMA,\n inputSchema: dummyInputSchema,\n outputSchema: emptySchema,\n init: async (params) => {\n // Preserve raw request IPC bytes for exchange reconstruction\n const requestIpcBytes = toUint8Array(params.request);\n const innerParams = unwrapRequest(params.request);\n const request = deserializeInitRequest(innerParams);\n // Exchange init has no ctx; on subprocess (no signing key) openAttach is a\n // pass-through strip that needs no auth. HTTP carries auth via the bind path.\n request.bind_call.attach_opaque_data = await stripAttach(request.bind_call.attach_opaque_data, undefined);\n const func = registry.get(request.bind_call.function_name, overloadContext(request.bind_call));\n\n // globalInit is async — table function onInit may touch HTTP-backed\n // FunctionStorage (e.g. Cloudflare DO).\n const initResponse = await func.globalInit(request);\n\n // For FINALIZE over HTTP, recover accumulated INPUT state from init_opaque_data.\n // The C++ extension passes the last exchange state token as init_opaque_data.\n const accumulatedState = recoverFinalizeState(request, config.recoverExchangeState);\n\n const handlers = func.createStreamHandlers(request, initResponse, accumulatedState);\n\n // Initialize the appropriate handler\n let handlerState: HandlerState | undefined;\n if (handlers.producerInit) {\n handlerState = handlers.producerInit();\n } else if (handlers.exchangeInit) {\n handlerState = handlers.exchangeInit();\n }\n\n const isProducer = !!handlers.producerFn;\n\n // Extract mutable user state from handler (e.g. { remaining, currentIndex })\n // for serialization across HTTP exchanges. The processParams/infrastructure\n // is reconstructed fresh; only user state needs to persist.\n const userState = handlerState?.state ?? null;\n\n // Build state object with raw binary data (no base64/hex encoding).\n // The Arrow state serializer picks fields by name; live objects\n // (_handlers, _handlerState, _initResponse, __outputSchema) are ignored.\n const state: any = {\n functionName: request.bind_call.function_name,\n initRequestIpc: requestIpcBytes,\n executionId: initResponse.execution_id,\n maxWorkers: Number(initResponse.max_workers),\n opaqueData: initResponse.opaque_data ?? null,\n isProducer,\n userState,\n __isProducer: isProducer,\n // Live Schemas for vgi-rpc to read during init (not serializable).\n // __inputSchema overrides dispatchStream's method.inputSchema per call\n // — the TS worker registers `init` as exchange with the permissive\n // `dummyInputSchema` sentinel; the real per-function input shape comes\n // from the bound handlers here.\n __outputSchema: handlers.outputSchema ?? emptySchema,\n __inputSchema: handlers.inputSchema ?? emptySchema,\n // Live objects for immediate use during init (producer mode).\n _handlers: handlers,\n _handlerState: handlerState,\n _initResponse: initResponse,\n };\n return state;\n },\n exchange: async (state, input, out) => {\n // Reconstruct live objects from serializable state.\n // This handles both immediate use (producer during init, where _handlers\n // is still present) and deserialized exchange (where we reconstruct).\n let handlers: StreamHandlers;\n let handlerState: HandlerState | undefined;\n\n if (state._handlers) {\n // Immediate use (same request, state still in memory)\n handlers = state._handlers;\n handlerState = state._handlerState;\n } else {\n // Deserialized from token — reconstruct from serializable refs.\n // Infrastructure (processParams, BoundStorage) is recreated fresh.\n // Mutable user state is merged from state.userState.\n const initRequestBatch = deserializeBatch(state.initRequestIpc);\n const initRequestDict = batchToScalarDict(initRequestBatch);\n const request = deserializeInitRequest(initRequestDict);\n const func = registry.get(state.functionName, overloadContext(request.bind_call));\n const executionId = state.executionId;\n const opaqueData = state.opaqueData ?? null;\n const initResponse: GlobalInitResponse = {\n execution_id: executionId,\n max_workers: Number(state.maxWorkers ?? 1),\n opaque_data: opaqueData,\n };\n\n // Recover accumulated state for FINALIZE phase from initOpaqueData\n const recoveredState = recoverFinalizeState(request, config.recoverExchangeState);\n\n handlers = func.createStreamHandlers(request, initResponse, recoveredState);\n if (handlers.producerInit) {\n handlerState = handlers.producerInit();\n } else if (handlers.exchangeInit) {\n handlerState = handlers.exchangeInit();\n }\n // Merge preserved user state (e.g. { remaining, currentIndex })\n if (state.userState != null && handlerState?.state !== undefined) {\n handlerState!.state = state.userState;\n }\n }\n\n if (state.isProducer && handlers.producerFn) {\n // Producer mode inside an exchange dispatch: patch finish() to bypass\n // OutputCollector's producerMode check (since dispatch created it\n // in exchange mode but we're actually producing).\n out.finish = () => { (out as any)._finished = true; };\n // Let the handler observe tick-batch metadata before producing. Used\n // by table functions to apply dynamic-filter updates DuckDB attaches\n // as `vgi_pushdown_filters` on each tick (Top-N heap tightening).\n if (handlers.onTick) {\n await handlers.onTick(handlerState, (input as any)?.metadata);\n }\n await handlers.producerFn(handlerState, out);\n } else if (handlers.exchangeFn) {\n await handlers.exchangeFn(handlerState, input, out);\n }\n\n // Save mutated user state for the next exchange round\n if (handlerState?.state !== undefined) {\n state.userState = handlerState!.state;\n }\n },\n headerSchema: initHeaderSchema,\n headerInit: (params: any, state: any, ctx: any) => {\n // During init, _initResponse is still in memory.\n // For exchange, this is never called (headers are only in init response).\n if (!state._initResponse) {\n throw new Error(\"headerInit called on deserialized state: _initResponse not available\");\n }\n return serializeGlobalInitResponse(state._initResponse);\n },\n });\n\n // --------------------------------------------------------------------------\n // table_function_cardinality (unary)\n // --------------------------------------------------------------------------\n protocol.unary(\"table_function_cardinality\", {\n params: REQUEST_PARAMS_SCHEMA,\n result: RESULT_BINARY_SCHEMA,\n handler: async (params) => {\n const innerParams = unwrapRequest(params.request);\n const request = deserializeCardinalityRequest(innerParams);\n const func = registry.get(request.bind_call.function_name, overloadContext(request.bind_call));\n let cardResult: Record<string, any>;\n if (func.cardinality) {\n cardResult = serializeTableCardinality(await func.cardinality(request));\n } else {\n cardResult = { estimate: null, max: null };\n }\n return wrapResult(cardResult, TableFunctionCardinalityResultSchema);\n },\n });\n\n // --------------------------------------------------------------------------\n // table_function_statistics (unary)\n // --------------------------------------------------------------------------\n // Returns bytes-or-null result: serialized ColumnStatistics RecordBatch when\n // the function declared a statistics() hook and it produced a non-empty\n // list, else null. DuckDB uses the bounds for plan-time filter elimination\n // (folds impossible filters to EMPTY_RESULT).\n protocol.unary(\"table_function_statistics\", {\n params: REQUEST_PARAMS_SCHEMA,\n result: RESULT_BINARY_NULLABLE_SCHEMA,\n handler: (params) => {\n const innerParams = unwrapRequest(params.request);\n const request = deserializeCardinalityRequest(innerParams);\n const func = registry.get(request.bind_call.function_name, overloadContext(request.bind_call));\n if (!func.statistics) return { result: null };\n const stats = func.statistics(request);\n if (!stats || stats.length === 0) return { result: null };\n return { result: serializeColumnStatistics(stats) };\n },\n });\n\n // --------------------------------------------------------------------------\n // table_function_dynamic_to_string (unary)\n // --------------------------------------------------------------------------\n // DuckDB calls this once per parallel scan thread at FinishSource. The\n // result is a List<Utf8>/List<Utf8> pair carrying ordered key→value\n // diagnostics that surface under EXPLAIN ANALYZE alongside the\n // intrinsics (Function, Rows Read, Threads). When the function doesn't\n // declare dynamicToString, return empty maps so the C++ side falls back\n // to intrinsics only.\n protocol.unary(\"table_function_dynamic_to_string\", {\n params: REQUEST_PARAMS_SCHEMA,\n result: RESULT_BINARY_SCHEMA,\n handler: async (params) => {\n const innerParams = unwrapRequest(params.request);\n const bindCallBytes = toUint8Array(innerParams.bind_call);\n const bindCallBatch = deserializeBatch(bindCallBytes);\n // Single-row bind_call batch -> dict via the codec/canonical path.\n const bindParams = batchToScalarDict(bindCallBatch);\n const bindCall = deserializeBindRequest(bindParams);\n const globalExecutionId = toUint8Array(innerParams.global_execution_id);\n const bindOpaqueData = innerParams.bind_opaque_data\n ? toUint8Array(innerParams.bind_opaque_data)\n : null;\n const func = registry.get(bindCall.function_name, overloadContext(bindCall));\n const map = func.dynamicToString\n ? await func.dynamicToString({ bindCall, bindOpaqueData, globalExecutionId })\n : {};\n const keys = Object.keys(map);\n const values = keys.map((k) => map[k] ?? \"\");\n return wrapResult({ keys, values }, TableFunctionDynamicToStringResultSchema);\n },\n });\n}\n",
|
|
60
|
-
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Shared schemas and helpers used by every protocol handler.\n\nimport { type VgiSchema, schema, type VgiField, field, type VgiDataType, binary } from \"../../arrow/index.js\";\nimport type { OverloadContext } from \"../../functions/registry.js\";\nimport { batchToScalarDict, deserializeBatch, serializeBatch, batchFromColumns } from \"../../util/arrow/index.js\";\nimport { toUint8Array } from \"../../util/bytes.js\";\nimport { TableInOutPhase } from \"../../types.js\";\nimport type { InitRequest } from \"../types.js\";\n\n// The Python vgi-rpc framework wraps ALL non-void unary results in a single\n// \"result\" column. For ArrowSerializableDataclass types, the result is serialized\n// as Arrow IPC bytes in a Binary column. DuckDB's VGI extension expects this format.\nexport const RESULT_BINARY_SCHEMA = schema([\n field(\"result\", binary(), false),\n]);\n\n// DuckDB wraps ArrowSerializableDataclass parameters in a single \"request\" Binary column.\nexport const REQUEST_PARAMS_SCHEMA = schema([\n field(\"request\", binary(), false),\n]);\n\nexport const RESULT_BINARY_NULLABLE_SCHEMA = schema([\n field(\"result\", binary(), true),\n]);\n\n/**\n * Unwrap a \"request\" Binary column: deserialize the inner Arrow IPC batch\n * and return flat columns as a dict (row 0).\n */\nexport function unwrapRequest(requestBytes: any): Record<string, any> {\n const bytes = toUint8Array(requestBytes);\n const innerBatch = deserializeBatch(bytes);\n return batchToScalarDict(innerBatch);\n}\n\n/**\n * Wrap a dict of values into a single \"result\" Binary column.\n * Builds a 1-row batch from the values using the given schema,\n * serializes it to IPC bytes, and returns { result: bytes }.\n */\nexport function wrapResult(\n values: Record<string, any>,\n innerSchema: VgiSchema | import(\"../../arrow/index.js\").VgiSchema,\n): { result: Uint8Array } {\n const a = innerSchema as VgiSchema;\n const batch = batchFromColumns(\n Object.fromEntries(a.fields.map(f => [f.name, [values[f.name] ?? null]])),\n a,\n );\n return { result: serializeBatch(batch) };\n}\n\nexport function overloadContext(req: {
|
|
58
|
+
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Build VGI protocol from worker implementation.\n// Orchestrator that registers function, aggregate, and catalog handlers\n// against vgi-rpc Protocol. The handler implementations live in handlers/.\n\nimport { Protocol } from \"@query-farm/vgi-rpc\";\n\n// NOTE: We must NOT use vgi-rpc's str/bytes/int/etc. singletons in Schema objects\n// because Bun loads apache-arrow as separate module instances for our code vs vgi-rpc's\n// compiled dist. Instead, we pre-build Schema objects and pass them directly to Protocol\n// methods (toSchema() passes Schema instances through without instanceof checks).\nimport type { FunctionRegistry } from \"../functions/registry.js\";\nimport type { CatalogInterface } from \"../catalog/interface.js\";\nimport { registerFunctionMethods } from \"./handlers/function.js\";\nimport { registerAggregateMethods } from \"./handlers/aggregate.js\";\nimport { registerTableBufferingMethods } from \"./handlers/table-buffering.js\";\nimport { registerCatalogMethods } from \"./handlers/catalog/index.js\";\n\nexport interface ProtocolConfig {\n registry: FunctionRegistry;\n catalogInterface?: CatalogInterface;\n catalogName?: string;\n /**\n * Recover accumulated exchange state from FINALIZE init_opaque_data.\n * For HTTP transport, this unpacks the state token that the C++ extension\n * passes from the last INPUT exchange to the FINALIZE init request.\n * Returns the deserialized VGI dispatch state object (with userState field).\n */\n recoverExchangeState?: (opaqueData: Uint8Array) => any;\n /**\n * AEAD signing key for sealing catalog opaque-data envelopes. Pass the same\n * 32-byte key used for HTTP state tokens. When omitted (subprocess / unix\n * transports) attach_opaque_data / transaction_opaque_data pass through\n * unsealed — OS process ownership already enforces identity there.\n */\n signingKey?: Uint8Array;\n}\n\nexport function buildVgiProtocol(config: ProtocolConfig): Protocol {\n const protocol = new Protocol(\"vgi\");\n\n registerFunctionMethods(protocol, {\n registry: config.registry,\n recoverExchangeState: config.recoverExchangeState,\n signingKey: config.signingKey,\n catalogInterface: config.catalogInterface,\n });\n registerAggregateMethods(protocol, config.registry);\n registerTableBufferingMethods(protocol, config.registry, config.signingKey);\n registerCatalogMethods(protocol, config.catalogInterface, config.catalogName, config.signingKey);\n\n return protocol;\n}\n",
|
|
59
|
+
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Handlers for the per-function lifecycle: bind, init (exchange), cardinality,\n// statistics. Generic over scalar/table/table-in-out — each function kind\n// implements VgiFunction.bind/globalInit/createStreamHandlers.\n\nimport { type VgiSchema, schema, type VgiField, field, type VgiDataType, binary, int64 } from \"../../arrow/index.js\";\nimport { Protocol } from \"@query-farm/vgi-rpc\";\nimport type { FunctionRegistry } from \"../../functions/registry.js\";\nimport type { StreamHandlers, HandlerState } from \"../../functions/types.js\";\nimport {\n deserializeBindRequest,\n serializeBindResponse,\n deserializeInitRequest,\n serializeGlobalInitResponse,\n deserializeCardinalityRequest,\n serializeTableCardinality,\n} from \"../serialize.js\";\nimport type { GlobalInitResponse } from \"../types.js\";\nimport { batchToScalarDict, deserializeBatch, adoptArrowJsShape } from \"../../util/arrow/index.js\";\nimport { toUint8Array } from \"../../util/bytes.js\";\nimport { serializeColumnStatistics } from \"../../util/statistics.js\";\nimport { BindResultSchema, TableFunctionCardinalityResultSchema, TableFunctionDynamicToStringResultSchema } from \"../../generated/vgi-protocol-schemas.js\";\nimport {\n REQUEST_PARAMS_SCHEMA,\n RESULT_BINARY_SCHEMA,\n RESULT_BINARY_NULLABLE_SCHEMA,\n unwrapRequest,\n wrapResult,\n overloadContext,\n recoverFinalizeState,\n} from \"./shared.js\";\nimport { openAttach } from \"./catalog/shared.js\";\n\nexport interface FunctionHandlerConfig {\n registry: FunctionRegistry;\n recoverExchangeState?: (opaqueData: Uint8Array) => any;\n signingKey?: Uint8Array;\n /**\n * Used to map a bind's `attach_opaque_data` to its catalog, so resolution can\n * be scoped when two catalogs declare the same schema and function name.\n * Optional — without it, resolution falls back to (schema, name).\n */\n catalogInterface?: { catalogNameForAttach(a: Uint8Array): string | null };\n}\n\nexport function registerFunctionMethods(protocol: Protocol, config: FunctionHandlerConfig): void {\n const { registry, signingKey, catalogInterface } = config;\n\n // The framework mints every attach as uuid(16) || catalog_bytes (sealed on\n // HTTP, plaintext on subprocess). Function bodies — like catalog bodies —\n // must see the catalog's own bytes, so unseal (when keyed) and strip the\n // framework UUID prefix before the user function reads attach_opaque_data.\n async function stripAttach(attach: any, ctx: any): Promise<Uint8Array | null> {\n if (attach == null) return null;\n const env = toUint8Array(attach);\n if (env.length === 0) return env;\n return openAttach(env, ctx?.auth, signingKey);\n }\n\n // Build an overload context whose attach has been unsealed, so catalog\n // resolution sees the real route byte. The bind/init handlers strip their\n // request in place and can call overloadContext directly; every other site\n // still holds the sealed envelope (73 bytes on HTTP vs 16 plaintext), whose\n // leading byte would otherwise route to an arbitrary catalog.\n async function strippedContext(bindCall: any, ctx?: any) {\n let attach: Uint8Array | null = null;\n try {\n attach = await stripAttach(bindCall.attach_opaque_data, ctx);\n } catch {\n attach = null; // Unopenable (wrong key / not sealed) — resolve unscoped.\n }\n return overloadContext({ ...bindCall, attach_opaque_data: attach }, catalogInterface);\n }\n\n const initHeaderSchema = schema([\n field(\"execution_id\", binary(), false),\n field(\"opaque_data\", binary(), true),\n field(\"max_workers\", int64(), false),\n ]);\n\n const emptySchema = schema([]);\n\n // Dummy non-empty schema for the init exchange registration.\n // The dispatch determines producer vs exchange based on inputSchema emptiness.\n // We need exchange mode so that input batches are passed to our callback.\n // The actual input schema comes from the IPC stream, not this registration.\n const dummyInputSchema = schema([\n field(\"_tick\", binary(), true),\n ]);\n\n // --------------------------------------------------------------------------\n // bind (unary)\n // --------------------------------------------------------------------------\n protocol.unary(\"bind\", {\n params: REQUEST_PARAMS_SCHEMA,\n result: RESULT_BINARY_SCHEMA,\n handler: async (params, ctx) => {\n const innerParams = unwrapRequest(params.request);\n const request = deserializeBindRequest(innerParams);\n request.attach_opaque_data = await stripAttach(request.attach_opaque_data, ctx);\n const func = registry.get(request.function_name, overloadContext(request, catalogInterface));\n const response = await func.bind(request);\n const serialized = serializeBindResponse(response);\n return wrapResult(serialized, BindResultSchema);\n },\n });\n\n // --------------------------------------------------------------------------\n // init (streaming) - dynamically produces either producer or exchange streams\n // --------------------------------------------------------------------------\n protocol.exchange(\"init\", {\n params: REQUEST_PARAMS_SCHEMA,\n inputSchema: dummyInputSchema,\n outputSchema: emptySchema,\n init: async (params) => {\n // Preserve raw request IPC bytes for exchange reconstruction\n const requestIpcBytes = toUint8Array(params.request);\n const innerParams = unwrapRequest(params.request);\n const request = deserializeInitRequest(innerParams);\n // Exchange init has no ctx; on subprocess (no signing key) openAttach is a\n // pass-through strip that needs no auth. HTTP carries auth via the bind path.\n request.bind_call.attach_opaque_data = await stripAttach(request.bind_call.attach_opaque_data, undefined);\n const func = registry.get(request.bind_call.function_name, overloadContext(request.bind_call, catalogInterface));\n\n // globalInit is async — table function onInit may touch HTTP-backed\n // FunctionStorage (e.g. Cloudflare DO).\n const initResponse = await func.globalInit(request);\n\n // For FINALIZE over HTTP, recover accumulated INPUT state from init_opaque_data.\n // The C++ extension passes the last exchange state token as init_opaque_data.\n const accumulatedState = recoverFinalizeState(request, config.recoverExchangeState);\n\n const handlers = func.createStreamHandlers(request, initResponse, accumulatedState);\n\n // Initialize the appropriate handler\n let handlerState: HandlerState | undefined;\n if (handlers.producerInit) {\n handlerState = handlers.producerInit();\n } else if (handlers.exchangeInit) {\n handlerState = handlers.exchangeInit();\n }\n\n const isProducer = !!handlers.producerFn;\n\n // Extract mutable user state from handler (e.g. { remaining, currentIndex })\n // for serialization across HTTP exchanges. The processParams/infrastructure\n // is reconstructed fresh; only user state needs to persist.\n const userState = handlerState?.state ?? null;\n\n // Build state object with raw binary data (no base64/hex encoding).\n // The Arrow state serializer picks fields by name; live objects\n // (_handlers, _handlerState, _initResponse, __outputSchema) are ignored.\n const state: any = {\n functionName: request.bind_call.function_name,\n initRequestIpc: requestIpcBytes,\n executionId: initResponse.execution_id,\n maxWorkers: Number(initResponse.max_workers),\n opaqueData: initResponse.opaque_data ?? null,\n isProducer,\n userState,\n __isProducer: isProducer,\n // Live Schemas for vgi-rpc to read during init (not serializable).\n // __inputSchema overrides dispatchStream's method.inputSchema per call\n // — the TS worker registers `init` as exchange with the permissive\n // `dummyInputSchema` sentinel; the real per-function input shape comes\n // from the bound handlers here.\n __outputSchema: handlers.outputSchema ?? emptySchema,\n __inputSchema: handlers.inputSchema ?? emptySchema,\n // Live objects for immediate use during init (producer mode).\n _handlers: handlers,\n _handlerState: handlerState,\n _initResponse: initResponse,\n };\n return state;\n },\n exchange: async (state, input, out) => {\n // `input` is the one batch worker code sees that this package did not\n // decode — vgi-rpc read it off the wire with its own Arrow backend. If\n // that resolved to a second copy of @query-farm/flechette (nested under\n // vgi-rpc whenever the version ranges disagree, even transiently), the\n // facade's prototype patches never touched its classes and user code\n // gets `col.isValid is not a function` on the first exchange round.\n // Adopting here is a WeakSet probe per call and a no-op on arrow-js.\n input = adoptArrowJsShape(input);\n // Reconstruct live objects from serializable state.\n // This handles both immediate use (producer during init, where _handlers\n // is still present) and deserialized exchange (where we reconstruct).\n let handlers: StreamHandlers;\n let handlerState: HandlerState | undefined;\n\n if (state._handlers) {\n // Immediate use (same request, state still in memory)\n handlers = state._handlers;\n handlerState = state._handlerState;\n } else {\n // Deserialized from token — reconstruct from serializable refs.\n // Infrastructure (processParams, BoundStorage) is recreated fresh.\n // Mutable user state is merged from state.userState.\n const initRequestBatch = deserializeBatch(state.initRequestIpc);\n const initRequestDict = batchToScalarDict(initRequestBatch);\n const request = deserializeInitRequest(initRequestDict);\n const func = registry.get(state.functionName, await strippedContext(request.bind_call));\n const executionId = state.executionId;\n const opaqueData = state.opaqueData ?? null;\n const initResponse: GlobalInitResponse = {\n execution_id: executionId,\n max_workers: Number(state.maxWorkers ?? 1),\n opaque_data: opaqueData,\n };\n\n // Recover accumulated state for FINALIZE phase from initOpaqueData\n const recoveredState = recoverFinalizeState(request, config.recoverExchangeState);\n\n handlers = func.createStreamHandlers(request, initResponse, recoveredState);\n if (handlers.producerInit) {\n handlerState = handlers.producerInit();\n } else if (handlers.exchangeInit) {\n handlerState = handlers.exchangeInit();\n }\n // Merge preserved user state (e.g. { remaining, currentIndex })\n if (state.userState != null && handlerState?.state !== undefined) {\n handlerState!.state = state.userState;\n }\n }\n\n if (state.isProducer && handlers.producerFn) {\n // Producer mode inside an exchange dispatch: patch finish() to bypass\n // OutputCollector's producerMode check (since dispatch created it\n // in exchange mode but we're actually producing).\n out.finish = () => { (out as any)._finished = true; };\n // Let the handler observe tick-batch metadata before producing. Used\n // by table functions to apply dynamic-filter updates DuckDB attaches\n // as `vgi_pushdown_filters` on each tick (Top-N heap tightening).\n if (handlers.onTick) {\n await handlers.onTick(handlerState, (input as any)?.metadata);\n }\n await handlers.producerFn(handlerState, out);\n } else if (handlers.exchangeFn) {\n await handlers.exchangeFn(handlerState, input, out);\n }\n\n // Save mutated user state for the next exchange round\n if (handlerState?.state !== undefined) {\n state.userState = handlerState!.state;\n }\n },\n headerSchema: initHeaderSchema,\n headerInit: (params: any, state: any, ctx: any) => {\n // During init, _initResponse is still in memory.\n // For exchange, this is never called (headers are only in init response).\n if (!state._initResponse) {\n throw new Error(\"headerInit called on deserialized state: _initResponse not available\");\n }\n return serializeGlobalInitResponse(state._initResponse);\n },\n });\n\n // --------------------------------------------------------------------------\n // table_function_cardinality (unary)\n // --------------------------------------------------------------------------\n protocol.unary(\"table_function_cardinality\", {\n params: REQUEST_PARAMS_SCHEMA,\n result: RESULT_BINARY_SCHEMA,\n handler: async (params) => {\n const innerParams = unwrapRequest(params.request);\n const request = deserializeCardinalityRequest(innerParams);\n const func = registry.get(request.bind_call.function_name, await strippedContext(request.bind_call));\n let cardResult: Record<string, any>;\n if (func.cardinality) {\n cardResult = serializeTableCardinality(await func.cardinality(request));\n } else {\n cardResult = { estimate: null, max: null };\n }\n return wrapResult(cardResult, TableFunctionCardinalityResultSchema);\n },\n });\n\n // --------------------------------------------------------------------------\n // table_function_statistics (unary)\n // --------------------------------------------------------------------------\n // Returns bytes-or-null result: serialized ColumnStatistics RecordBatch when\n // the function declared a statistics() hook and it produced a non-empty\n // list, else null. DuckDB uses the bounds for plan-time filter elimination\n // (folds impossible filters to EMPTY_RESULT).\n protocol.unary(\"table_function_statistics\", {\n params: REQUEST_PARAMS_SCHEMA,\n result: RESULT_BINARY_NULLABLE_SCHEMA,\n handler: async (params) => {\n const innerParams = unwrapRequest(params.request);\n const request = deserializeCardinalityRequest(innerParams);\n const func = registry.get(request.bind_call.function_name, await strippedContext(request.bind_call));\n if (!func.statistics) return { result: null };\n const stats = func.statistics(request);\n if (!stats || stats.length === 0) return { result: null };\n return { result: serializeColumnStatistics(stats) };\n },\n });\n\n // --------------------------------------------------------------------------\n // table_function_dynamic_to_string (unary)\n // --------------------------------------------------------------------------\n // DuckDB calls this once per parallel scan thread at FinishSource. The\n // result is a List<Utf8>/List<Utf8> pair carrying ordered key→value\n // diagnostics that surface under EXPLAIN ANALYZE alongside the\n // intrinsics (Function, Rows Read, Threads). When the function doesn't\n // declare dynamicToString, return empty maps so the C++ side falls back\n // to intrinsics only.\n protocol.unary(\"table_function_dynamic_to_string\", {\n params: REQUEST_PARAMS_SCHEMA,\n result: RESULT_BINARY_SCHEMA,\n handler: async (params) => {\n const innerParams = unwrapRequest(params.request);\n const bindCallBytes = toUint8Array(innerParams.bind_call);\n const bindCallBatch = deserializeBatch(bindCallBytes);\n // Single-row bind_call batch -> dict via the codec/canonical path.\n const bindParams = batchToScalarDict(bindCallBatch);\n const bindCall = deserializeBindRequest(bindParams);\n const globalExecutionId = toUint8Array(innerParams.global_execution_id);\n const bindOpaqueData = innerParams.bind_opaque_data\n ? toUint8Array(innerParams.bind_opaque_data)\n : null;\n const func = registry.get(bindCall.function_name, await strippedContext(bindCall));\n const map = func.dynamicToString\n ? await func.dynamicToString({ bindCall, bindOpaqueData, globalExecutionId })\n : {};\n const keys = Object.keys(map);\n const values = keys.map((k) => map[k] ?? \"\");\n return wrapResult({ keys, values }, TableFunctionDynamicToStringResultSchema);\n },\n });\n}\n",
|
|
60
|
+
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Shared schemas and helpers used by every protocol handler.\n\nimport { type VgiSchema, schema, type VgiField, field, type VgiDataType, binary } from \"../../arrow/index.js\";\nimport type { OverloadContext } from \"../../functions/registry.js\";\nimport { batchToScalarDict, deserializeBatch, serializeBatch, batchFromColumns } from \"../../util/arrow/index.js\";\nimport { toUint8Array } from \"../../util/bytes.js\";\nimport { TableInOutPhase } from \"../../types.js\";\nimport type { InitRequest } from \"../types.js\";\n\n// The Python vgi-rpc framework wraps ALL non-void unary results in a single\n// \"result\" column. For ArrowSerializableDataclass types, the result is serialized\n// as Arrow IPC bytes in a Binary column. DuckDB's VGI extension expects this format.\nexport const RESULT_BINARY_SCHEMA = schema([\n field(\"result\", binary(), false),\n]);\n\n// DuckDB wraps ArrowSerializableDataclass parameters in a single \"request\" Binary column.\nexport const REQUEST_PARAMS_SCHEMA = schema([\n field(\"request\", binary(), false),\n]);\n\nexport const RESULT_BINARY_NULLABLE_SCHEMA = schema([\n field(\"result\", binary(), true),\n]);\n\n/**\n * Unwrap a \"request\" Binary column: deserialize the inner Arrow IPC batch\n * and return flat columns as a dict (row 0).\n */\nexport function unwrapRequest(requestBytes: any): Record<string, any> {\n const bytes = toUint8Array(requestBytes);\n const innerBatch = deserializeBatch(bytes);\n return batchToScalarDict(innerBatch);\n}\n\n/**\n * Wrap a dict of values into a single \"result\" Binary column.\n * Builds a 1-row batch from the values using the given schema,\n * serializes it to IPC bytes, and returns { result: bytes }.\n */\nexport function wrapResult(\n values: Record<string, any>,\n innerSchema: VgiSchema | import(\"../../arrow/index.js\").VgiSchema,\n): { result: Uint8Array } {\n const a = innerSchema as VgiSchema;\n const batch = batchFromColumns(\n Object.fromEntries(a.fields.map(f => [f.name, [values[f.name] ?? null]])),\n a,\n );\n return { result: serializeBatch(batch) };\n}\n\nexport function overloadContext(\n req: {\n function_name: string;\n arguments: any;\n input_schema: any;\n function_type: any;\n schema_name?: string | null;\n attach_opaque_data?: Uint8Array | null;\n },\n catalogInterface?: { catalogNameForAttach(a: Uint8Array): string | null },\n): OverloadContext {\n // The attachment identifies the catalog, which is the only key separating two\n // catalogs that declare the same schema AND function name.\n let catalogName: string | null = null;\n if (catalogInterface && req.attach_opaque_data) {\n try {\n catalogName = catalogInterface.catalogNameForAttach(req.attach_opaque_data);\n } catch {\n catalogName = null;\n }\n }\n return {\n arguments: req.arguments,\n inputSchema: req.input_schema,\n isScalar: String(req.function_type).toLowerCase() === \"scalar\",\n // Scopes resolution when the caller named a schema; a name registered in\n // several schemas is otherwise ambiguous.\n schemaName: req.schema_name ?? null,\n catalogName,\n };\n}\n\n/**\n * Recover accumulated exchange state from a FINALIZE init request.\n * For HTTP transport, this unpacks the state token that the C++ extension\n * passes from the last INPUT exchange to the FINALIZE init request.\n */\nexport function recoverFinalizeState(\n request: InitRequest,\n recoverExchangeState: ((opaqueData: Uint8Array) => any) | undefined,\n): any {\n if (request.phase === TableInOutPhase.FINALIZE && request.init_opaque_data && recoverExchangeState) {\n try {\n const recovered = recoverExchangeState(request.init_opaque_data);\n return recovered?.userState;\n } catch (e: any) {\n throw new Error(`Failed to recover FINALIZE state from init_opaque_data: ${e.message}`);\n }\n }\n return undefined;\n}\n",
|
|
61
61
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Shared param schemas and helpers for catalog protocol handlers.\n\nimport { type VgiSchema, schema, type VgiField, field, type VgiDataType, binary, utf8, bool, iterRows } from \"../../../arrow/index.js\";\nimport { Protocol, type AuthContext, type CallContext } from \"@query-farm/vgi-rpc\";\nimport type { CatalogInterface } from \"../../../catalog/interface.js\";\nimport { NoCatalogError } from \"../../../errors.js\";\nimport { deserializeBatch } from \"../../../util/arrow/index.js\";\nimport { toUint8Array } from \"../../../util/bytes.js\";\nimport {\n sealBytes,\n openBytes,\n attachAad,\n transactionAad,\n ATTACH_ENVELOPE_VERSION,\n ATTACH_UUID_LEN,\n TRANSACTION_ENVELOPE_VERSION,\n} from \"../../../crypto.js\";\n\nexport type GetCatalog = () => CatalogInterface;\n\n// ---------------------------------------------------------------------------\n// Catalog opaque-data AEAD sealing\n//\n// On HTTP transport (signingKey present) the worker seals attach_opaque_data\n// and transaction_opaque_data into AEAD envelopes bound to the caller's\n// identity. Subprocess / unix workers have no signing key — every helper is a\n// transparent pass-through. The catalog implementation always sees plaintext;\n// the client only ever sees sealed envelopes.\n// ---------------------------------------------------------------------------\n\n/**\n * Mint and seal a catalog_attach value: prepend a fresh framework UUID\n * (uuid(16) || catalog_bytes), then seal. Storage shards on the UUID — stable\n * across re-seals and globally unique, unlike the random-nonce ciphertext or\n * the (possibly non-unique) catalog bytes. openAttach strips the UUID back off\n * so the catalog only ever sees its own bytes. Mirrors vgi-python/-go.\n */\nexport async function sealAttach(\n plaintext: Uint8Array,\n auth: AuthContext | undefined,\n signingKey: Uint8Array | undefined,\n): Promise<Uint8Array> {\n const uuid = new Uint8Array(ATTACH_UUID_LEN);\n crypto.getRandomValues(uuid);\n const minted = new Uint8Array(ATTACH_UUID_LEN + plaintext.length);\n minted.set(uuid, 0);\n minted.set(plaintext, ATTACH_UUID_LEN);\n if (!signingKey) return minted;\n return sealBytes(minted, signingKey, attachAad(auth), ATTACH_ENVELOPE_VERSION);\n}\n\n/**\n * Open an attach envelope returning the FULL framework plaintext\n * uuid(16) || catalog_bytes (not stripped). Storage shards on the leading UUID.\n */\nexport async function openAttachFull(\n envelope: Uint8Array,\n auth: AuthContext | undefined,\n signingKey: Uint8Array | undefined,\n): Promise<Uint8Array> {\n if (!signingKey || envelope.length === 0) return envelope;\n return openBytes(envelope, signingKey, attachAad(auth), ATTACH_ENVELOPE_VERSION, \"attach_opaque_data\");\n}\n\n/**\n * Open an attach_opaque_data envelope, returning the catalog's own bytes — the\n * framework UUID prefix is stripped. This is what catalog/function bodies see;\n * storage routing uses openAttachFull / deriveShardKey to reach the UUID.\n */\nexport async function openAttach(\n envelope: Uint8Array,\n auth: AuthContext | undefined,\n signingKey: Uint8Array | undefined,\n): Promise<Uint8Array> {\n const full = await openAttachFull(envelope, auth, signingKey);\n return full.length < ATTACH_UUID_LEN ? full : full.subarray(ATTACH_UUID_LEN);\n}\n\n/** Hex of a byte array (lowercase). */\nfunction toHex(b: Uint8Array): string {\n let s = \"\";\n for (let i = 0; i < b.length; i++) s += b[i].toString(16).padStart(2, \"0\");\n return s;\n}\n\n/**\n * deriveShardKey returns the Cloudflare-DO routing key for an attach:\n * \"att-\" + hex(the 16-byte framework UUID at the head of the unwrapped attach).\n * One DO per logical ATTACH. Throws if the uuid is not 16 bytes (the storage\n * path is always bound to a logical ATTACH).\n */\nexport function deriveShardKey(attachUuid: Uint8Array): string {\n if (attachUuid.length !== ATTACH_UUID_LEN) {\n throw new Error(`shard_key requires a ${ATTACH_UUID_LEN}-byte attach uuid, got ${attachUuid.length}`);\n }\n return \"att-\" + toHex(attachUuid);\n}\n\n/**\n * shardKeyForAttach unwraps the sealed attach and derives its shard key. An\n * empty/absent attach yields \"\" (non-sharding backends ignore the key; the\n * CfDo backend rejects an empty key server-side, the \"must not happen\" case).\n */\nexport async function shardKeyForAttach(\n sealed: Uint8Array | undefined,\n auth: AuthContext | undefined,\n signingKey: Uint8Array | undefined,\n): Promise<string> {\n if (!sealed || sealed.length === 0) return \"\";\n const full = await openAttachFull(sealed, auth, signingKey);\n if (full.length < ATTACH_UUID_LEN) return \"\";\n return deriveShardKey(full.subarray(0, ATTACH_UUID_LEN));\n}\n\n/**\n * Seal a plaintext transaction value (catalog_transaction_begin output), bound\n * to the caller's identity and the parent attach envelope it was minted under.\n */\nexport async function sealTransaction(\n plaintext: Uint8Array,\n attachEnvelope: Uint8Array,\n auth: AuthContext | undefined,\n signingKey: Uint8Array | undefined,\n): Promise<Uint8Array> {\n if (!signingKey) return plaintext;\n return sealBytes(plaintext, signingKey, transactionAad(auth, attachEnvelope), TRANSACTION_ENVELOPE_VERSION);\n}\n\n/**\n * Unwrap the attach_opaque_data / transaction_opaque_data fields of a catalog\n * request in place, so handler bodies always see plaintext. The transaction\n * envelope is opened with the *sealed* attach value as part of its AAD, so it\n * stays bound to its parent attach. A no-op when there is no signing key.\n */\nasync function unwrapParamsOpaque(\n params: Record<string, any>,\n ctx: CallContext | undefined,\n signingKey: Uint8Array | undefined,\n): Promise<void> {\n const auth = ctx?.auth;\n let sealedAttach: Uint8Array = new Uint8Array(0);\n if (params.attach_opaque_data != null) {\n const env = toUint8Array(params.attach_opaque_data);\n if (env.length > 0) {\n sealedAttach = env;\n // The framework mints every attach as uuid(16) || catalog_bytes —\n // sealed on HTTP, plaintext on subprocess/unix (sealAttach prepends the\n // UUID regardless of transport). Catalog handlers — including\n // CompositeCatalog's route-byte at byte 0 of catalog_bytes — must see\n // the catalog's own bytes, so open the envelope when sealed, then strip\n // the framework UUID prefix on EVERY transport, not just HTTP.\n const full = signingKey\n ? await openBytes(env, signingKey, attachAad(auth), ATTACH_ENVELOPE_VERSION, \"attach_opaque_data\")\n : env;\n params.attach_opaque_data = full.length < ATTACH_UUID_LEN ? full : full.subarray(ATTACH_UUID_LEN);\n }\n }\n // transaction_opaque_data is sealed only on HTTP (no UUID prefix); subprocess\n // values are raw plaintext and pass through untouched.\n if (signingKey && params.transaction_opaque_data != null) {\n const env = toUint8Array(params.transaction_opaque_data);\n if (env.length > 0) {\n params.transaction_opaque_data = await openBytes(\n env,\n signingKey,\n transactionAad(auth, sealedAttach),\n TRANSACTION_ENVELOPE_VERSION,\n \"transaction_opaque_data\",\n );\n }\n }\n}\n\n/**\n * Register a catalog unary handler whose request opaque-data fields are\n * unwrapped before the handler body runs. Used for every catalog_* method\n * except catalog_attach / catalog_transaction_begin, which seal their outputs\n * and are registered bespoke.\n */\nexport function catalogUnary(\n protocol: Protocol,\n signingKey: Uint8Array | undefined,\n name: string,\n config: {\n params: unknown;\n result: unknown;\n handler: (params: Record<string, any>, ctx: CallContext) => unknown;\n doc?: string;\n },\n): void {\n protocol.unary(name, {\n params: config.params as any,\n result: config.result as any,\n doc: config.doc,\n handler: async (params: Record<string, any>, ctx: any) => {\n await unwrapParamsOpaque(params, ctx, signingKey);\n return config.handler(params, ctx);\n },\n });\n}\n\nexport function makeGetCatalog(catalog: CatalogInterface | undefined): GetCatalog {\n return () => {\n if (!catalog) throw new NoCatalogError();\n return catalog;\n };\n}\n\n/**\n * Decode the `options` field of a catalog_attach request into a plain\n * {name: value} dict. The wire field is either null (no options) or an\n * IPC-serialized RecordBatch of typed columns — one column per option,\n * one row with the value. Returns `{}` for null / empty input.\n */\nexport function decodeOptionsBatch(bytes: any): Record<string, unknown> {\n if (bytes == null) return {};\n const buf = toUint8Array(bytes);\n if (buf.byteLength === 0) return {};\n const batch = deserializeBatch(buf);\n if (batch.numRows === 0) return {};\n // Decode the single row through the codec path (iterRows yields RICH values):\n // date columns come back as JS Date, temporal types as bigint, etc. — the\n // same representation a producer would feed back into batchFromColumns. The\n // old `Math.floor(ms / 86_400_000)` date32 hack is gone; the codec owns it.\n const row = iterRows(batch).next().value as Record<string, unknown> | undefined;\n return row ?? {};\n}\n\n// ---------------------------------------------------------------------------\n// Common param schemas\n// ---------------------------------------------------------------------------\n\nexport const emptyResultSchema = schema([]);\n\nexport const attachOpaqueDataParam = schema([\n field(\"attach_opaque_data\", binary(), true),\n]);\n\nexport const attachOpaqueDataTxnParams = schema([\n field(\"attach_opaque_data\", binary(), true),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\nexport const attachOpaqueDataNameTxnParams = schema([\n field(\"attach_opaque_data\", binary(), true),\n field(\"name\", utf8(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\nexport const attachOpaqueDataSchemaNameTxnParams = schema([\n field(\"attach_opaque_data\", binary(), true),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\nexport const schemaNameIgnoreNotFoundTxnParams = schema([\n field(\"attach_opaque_data\", binary(), true),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"ignore_not_found\", bool(), true),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\nexport const schemaNameCommentParams = schema([\n field(\"attach_opaque_data\", binary(), true),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"comment\", utf8(), true),\n field(\"ignore_not_found\", bool(), true),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\nexport const schemaNameRenameParams = schema([\n field(\"attach_opaque_data\", binary(), true),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"new_name\", utf8(), false),\n field(\"ignore_not_found\", bool(), true),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n\nexport const columnOpParams = schema([\n field(\"attach_opaque_data\", binary(), true),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"column_name\", utf8(), false),\n field(\"ignore_not_found\", bool(), true),\n field(\"transaction_opaque_data\", binary(), true),\n]);\n",
|
|
62
62
|
"/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) */\n/**\n * Checks if something is Uint8Array. Be careful: nodejs Buffer will return true.\n * @param a - Value to inspect.\n * @returns `true` when the value is a Uint8Array view, including Node's `Buffer`.\n * @example\n * Guards a value before treating it as raw key material.\n *\n * ```ts\n * isBytes(new Uint8Array());\n * ```\n */\nexport function isBytes(a) {\n // Plain `instanceof Uint8Array` is too strict for some Buffer / proxy /\n // cross-realm cases. The fallback still requires a real ArrayBuffer view\n // so plain JSON-deserialized `{ constructor: ... }`\n // spoofing is rejected, and `BYTES_PER_ELEMENT === 1` keeps the fallback on byte-oriented views.\n return (a instanceof Uint8Array ||\n (ArrayBuffer.isView(a) &&\n a.constructor.name === 'Uint8Array' &&\n 'BYTES_PER_ELEMENT' in a &&\n a.BYTES_PER_ELEMENT === 1));\n}\n/**\n * Asserts something is boolean.\n * @param b - Value to validate.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Validates a boolean option before branching on it.\n *\n * ```ts\n * abool(true);\n * ```\n */\nexport function abool(b) {\n if (typeof b !== 'boolean')\n throw new TypeError(`boolean expected, not ${b}`);\n}\n/**\n * Asserts something is a non-negative safe integer.\n * @param n - Value to validate.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Validates a non-negative length or counter.\n *\n * ```ts\n * anumber(1);\n * ```\n */\nexport function anumber(n) {\n if (typeof n !== 'number')\n throw new TypeError('number expected, got ' + typeof n);\n if (!Number.isSafeInteger(n) || n < 0)\n throw new RangeError('positive integer expected, got ' + n);\n}\n/**\n * Asserts something is Uint8Array.\n * @param value - Value to validate.\n * @param length - Expected byte length.\n * @param title - Optional label used in error messages.\n * @returns The validated byte array.\n * On Node, `Buffer` is accepted too because it is a Uint8Array view.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument lengths. {@link RangeError}\n * @example\n * Validates a fixed-length nonce or key buffer.\n *\n * ```ts\n * abytes(new Uint8Array([1, 2]), 2);\n * ```\n */\nexport function abytes(value, length, title = '') {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n const message = prefix + 'expected Uint8Array' + ofLen + ', got ' + got;\n if (!bytes)\n throw new TypeError(message);\n throw new RangeError(message);\n }\n return value;\n}\n/**\n * Asserts a hash- or MAC-like instance has not been destroyed or finished.\n * @param instance - Stateful instance to validate.\n * @param checkFinished - Whether to reject finished instances.\n * When `false`, only `destroyed` is checked.\n * @throws If the hash instance has already been destroyed or finalized. {@link Error}\n * @example\n * Guards against calling `update()` or `digest()` on a finished hash.\n *\n * ```ts\n * aexists({ destroyed: false, finished: false });\n * ```\n */\nexport function aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\n/**\n * Asserts output is a properly-sized byte array.\n * @param out - Output buffer to validate.\n * @param instance - Hash-like instance providing `outputLen`.\n * This is the relaxed `digestInto()`-style contract: output must be at least `outputLen`,\n * unlike one-shot cipher helpers elsewhere in the repo that often require exact lengths.\n * @throws On wrong argument types. {@link TypeError}\n * @param onlyAligned - Whether `out` must be 4-byte aligned for zero-allocation word views.\n * @throws On wrong output buffer lengths. {@link RangeError}\n * @throws On wrong output buffer alignment. {@link Error}\n * @example\n * Verifies that a caller-provided output buffer is large enough.\n *\n * ```ts\n * aoutput(new Uint8Array(16), { outputLen: 16 });\n * ```\n */\nexport function aoutput(out, instance, onlyAligned = false) {\n abytes(out, undefined, 'output');\n const min = instance.outputLen;\n if (out.length < min) {\n throw new RangeError('digestInto() expects output buffer of length at least ' + min);\n }\n if (onlyAligned && !isAligned32(out))\n throw new Error('invalid output, must be aligned');\n}\n/**\n * Casts a typed-array view to Uint8Array.\n * @param arr - Typed-array view to reinterpret.\n * @returns Uint8Array view over the same bytes.\n * @example\n * Views 32-bit words as raw bytes without copying.\n *\n * ```ts\n * u8(new Uint32Array([1]));\n * ```\n */\nexport function u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/**\n * Casts a typed-array view to Uint32Array.\n * @param arr - Typed-array view to reinterpret.\n * @returns Uint32Array view over the same bytes. Callers are expected to provide a\n * 4-byte-aligned offset; trailing `1..3` bytes are silently dropped.\n * @example\n * Views a byte buffer as 32-bit words for block processing.\n *\n * ```ts\n * u32(new Uint8Array(4));\n * ```\n */\nexport function u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/**\n * Zeroizes typed arrays in place.\n * Warning: JS provides no guarantees.\n * @param arrays - Arrays to wipe.\n * @example\n * Wipes a temporary key buffer after use.\n *\n * ```ts\n * const bytes = new Uint8Array([1]);\n * clean(bytes);\n * ```\n */\nexport function clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/**\n * Creates a DataView for byte-level manipulation.\n * @param arr - Typed-array view to wrap.\n * @returns DataView over the same bytes.\n * @example\n * Creates an endian-aware view for length encoding.\n *\n * ```ts\n * createView(new Uint8Array(4));\n * ```\n */\nexport function createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/**\n * Whether the current platform is little-endian.\n * Most are; some IBM systems are not.\n */\nexport const isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/**\n * Reverses byte order of one 32-bit word.\n * @param word - Unsigned 32-bit word to swap.\n * @returns The same word with bytes reversed.\n * @example\n * Swaps a big-endian word into little-endian byte order.\n *\n * ```ts\n * byteSwap(0x11223344);\n * ```\n */\nexport const byteSwap = (word) => ((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff);\n/**\n * Normalizes one 32-bit word to the little-endian representation expected by cipher cores.\n * @param n - Unsigned 32-bit word to normalize.\n * @returns Little-endian normalized word on big-endian hosts, else the input word unchanged.\n * @example\n * Normalizes a host-endian word before passing it into an ARX/AES core.\n *\n * ```ts\n * swap8IfBE(0x11223344);\n * ```\n */\nexport const swap8IfBE = isLE\n ? (n) => n\n : (n) => byteSwap(n) >>> 0;\n/**\n * Byte-swaps every word of a Uint32Array in place.\n * @param arr - Uint32Array whose words should be swapped.\n * @returns The same array after in-place byte swapping.\n * @example\n * Swaps every 32-bit word in a word-view buffer.\n *\n * ```ts\n * byteSwap32(new Uint32Array([0x11223344]));\n * ```\n */\nexport const byteSwap32 = (arr) => {\n for (let i = 0; i < arr.length; i++)\n arr[i] = byteSwap(arr[i]);\n return arr;\n};\n/**\n * Normalizes a Uint32Array view to the little-endian representation expected by cipher cores.\n * @param u - Word view to normalize in place.\n * @returns Little-endian normalized word view.\n * @example\n * Normalizes a word-view buffer before block processing.\n *\n * ```ts\n * swap32IfBE(new Uint32Array([0x11223344]));\n * ```\n */\nexport const swap32IfBE = isLE\n ? (u) => u\n : byteSwap32;\n// Built-in hex conversion:\n// {@link https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex | caniuse entry}\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @param bytes - Bytes to encode.\n * @returns Lowercase hexadecimal string.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Formats ciphertext bytes for logs or test vectors.\n *\n * ```ts\n * bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])); // 'cafe0123'\n * ```\n */\nexport function bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @param hex - Hexadecimal string to decode.\n * @returns Decoded bytes.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On malformed hexadecimal input. {@link RangeError}\n * @example\n * Parses a hex test vector into bytes.\n *\n * ```ts\n * hexToBytes('cafe0123'); // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n * ```\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new TypeError('hex string expected, got ' + typeof hex);\n if (hasHexBuiltin) {\n try {\n return Uint8Array.fromHex(hex);\n }\n catch (error) {\n if (error instanceof SyntaxError)\n throw new RangeError(error.message);\n throw error;\n }\n }\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new RangeError('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new RangeError('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n// Used in micro\n/**\n * Converts a big-endian hex string into bigint.\n * @param hex - Hexadecimal string without `0x`.\n * @returns Parsed bigint value. The empty string is treated as `0n`.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Parses a big-endian field element or counter from hex.\n *\n * ```ts\n * hexToNumber('ff');\n * ```\n */\nexport function hexToNumber(hex) {\n if (typeof hex !== 'string')\n throw new TypeError('hex string expected, got ' + typeof hex);\n return BigInt(hex === '' ? '0' : '0x' + hex); // Big Endian\n}\n// Used in ff1\n// BE: Big Endian, LE: Little Endian\n/**\n * Converts big-endian bytes into bigint.\n * @param bytes - Big-endian bytes.\n * @returns Parsed bigint value. Empty input is treated as `0n`.\n * @throws On invalid byte input passed to the internal hex conversion. {@link TypeError}\n * @example\n * Reads a big-endian integer from serialized bytes.\n *\n * ```ts\n * bytesToNumberBE(new Uint8Array([1, 0]));\n * ```\n */\nexport function bytesToNumberBE(bytes) {\n return hexToNumber(bytesToHex(bytes));\n}\n// Used in micro, ff1\n/**\n * Converts a number into big-endian bytes of fixed length.\n * @param n - Number to encode.\n * @param len - Output length in bytes.\n * @returns Big-endian bytes padded to `len`.\n * Validation is indirect through `hexToBytes(...)`, so negative values, `len = 0`,\n * and values that do not fit surface through the downstream hex parser instead of a\n * dedicated range guard here.\n * @throws On wrong argument types. {@link TypeError}\n * @throws If the requested output length cannot represent the encoded value. {@link RangeError}\n * @example\n * Encodes a counter as fixed-width big-endian bytes.\n *\n * ```ts\n * numberToBytesBE(1, 2);\n * ```\n */\nexport function numberToBytesBE(n, len) {\n // Reject coercible non-numeric inputs before string/hex conversion changes behavior.\n if (typeof n === 'number')\n anumber(n);\n else if (typeof n !== 'bigint')\n throw new TypeError(`number or bigint expected, got ${typeof n}`);\n anumber(len);\n return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\n/**\n * Converts string to bytes using UTF8 encoding.\n * @param str - String to encode.\n * @returns UTF-8 bytes in a detached fresh Uint8Array copy.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Encodes application text before encryption or MACing.\n *\n * ```ts\n * utf8ToBytes('abc'); // new Uint8Array([97, 98, 99])\n * ```\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new TypeError('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // {@link https://bugzil.la/1681809 | Firefox bug 1681809}\n}\n/**\n * Converts bytes to string using UTF8 encoding.\n * @param bytes - UTF-8 bytes.\n * @returns Decoded string. Input validation is delegated to `TextDecoder`, and malformed\n * UTF-8 is replacement-decoded instead of rejected.\n * @example\n * Decodes UTF-8 plaintext back into a string.\n *\n * ```ts\n * bytesToUtf8(new Uint8Array([97, 98, 99])); // 'abc'\n * ```\n */\nexport function bytesToUtf8(bytes) {\n return new TextDecoder().decode(bytes);\n}\n/**\n * Checks if two U8A use same underlying buffer and overlaps.\n * This is invalid and can corrupt data.\n * @param a - First byte view.\n * @param b - Second byte view.\n * @returns `true` when the views overlap in memory.\n * @example\n * Detects whether two slices alias the same backing buffer.\n *\n * ```ts\n * overlapBytes(new Uint8Array(4), new Uint8Array(4));\n * ```\n */\nexport function overlapBytes(a, b) {\n // Zero-length views cannot overwrite anything, even if their offset sits inside another range.\n if (!a.byteLength || !b.byteLength)\n return false;\n return (a.buffer === b.buffer && // best we can do, may fail with an obscure Proxy\n a.byteOffset < b.byteOffset + b.byteLength && // a starts before b end\n b.byteOffset < a.byteOffset + a.byteLength // b starts before a end\n );\n}\n/**\n * If input and output overlap and input starts before output, we will overwrite end of input before\n * we start processing it, so this is not supported for most ciphers\n * (except chacha/salsa, which were designed for this)\n * @param input - Input bytes.\n * @param output - Output bytes.\n * @throws If the output view would overwrite unread input bytes. {@link Error}\n * @example\n * Rejects an in-place layout that would overwrite unread input bytes.\n *\n * ```ts\n * complexOverlapBytes(new Uint8Array(4), new Uint8Array(4));\n * ```\n */\nexport function complexOverlapBytes(input, output) {\n // This is very cursed. It works somehow, but I'm completely unsure,\n // reasoning about overlapping aligned windows is very hard.\n if (overlapBytes(input, output) && input.byteOffset < output.byteOffset)\n throw new Error('complex overlap of input and output is not supported');\n}\n/**\n * Copies several Uint8Arrays into one.\n * @param arrays - Byte arrays to concatenate.\n * @returns Combined byte array.\n * @throws On wrong argument types inside the byte-array list. {@link TypeError}\n * @example\n * Builds a `nonce || ciphertext` style buffer.\n *\n * ```ts\n * concatBytes(new Uint8Array([1]), new Uint8Array([2]));\n * ```\n */\nexport function concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n/**\n * Merges user options into defaults.\n * @param defaults - Default option values.\n * @param opts - User-provided overrides.\n * @returns Combined options object.\n * The merge mutates `defaults` in place and returns the same object.\n * @throws If options are missing or not an object. {@link Error}\n * @example\n * Applies user overrides to the default cipher options.\n *\n * ```ts\n * checkOpts({ rounds: 20 }, { rounds: 8 });\n * ```\n */\nexport function checkOpts(defaults, opts) {\n if (opts == null || typeof opts !== 'object')\n throw new Error('options must be defined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n/**\n * Compares two byte arrays in kinda constant time once lengths already match.\n * @param a - First byte array.\n * @param b - Second byte array.\n * @returns `true` when the arrays contain the same bytes. Different lengths still return early.\n * @example\n * Compares an expected authentication tag with the received one.\n *\n * ```ts\n * equalBytes(new Uint8Array([1]), new Uint8Array([1]));\n * ```\n */\nexport function equalBytes(a, b) {\n if (a.length !== b.length)\n return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++)\n diff |= a[i] ^ b[i];\n return diff === 0;\n}\n/**\n * Wraps a keyed MAC constructor into a one-shot helper with `.create()`.\n * @param keyLen - Valid probe-key length used to read static metadata once.\n * The probe key is only used for `outputLen` / `blockLen`, so callers with several valid key sizes\n * can pass any representative size as long as those values stay fixed.\n * @param macCons - Keyed MAC constructor or factory.\n * @param fromMsg - Optional adapter that derives extra constructor args from the one-shot message.\n * @returns Callable MAC helper with `.create()`.\n */\nexport function wrapMacConstructor(keyLen, macCons, fromMsg) {\n const mac = macCons;\n const getArgs = (fromMsg || (() => []));\n const macC = (msg, key) => mac(key, ...getArgs(msg))\n .update(msg)\n .digest();\n const tmp = mac(new Uint8Array(keyLen), ...getArgs(new Uint8Array(0)));\n macC.outputLen = tmp.outputLen;\n macC.blockLen = tmp.blockLen;\n macC.create = (key, ...args) => mac(key, ...args);\n return macC;\n}\n/**\n * Wraps a cipher: validates args, ensures encrypt() can only be called once.\n * Used internally by the exported cipher constructors.\n * Output-buffer support is inferred from the wrapped `encrypt` / `decrypt`\n * arity (`fn.length === 2`), and tag-bearing constructors are expected to use\n * `args[1]` for optional AAD.\n * @__NO_SIDE_EFFECTS__\n * @param params - Static cipher metadata. See {@link CipherParams}.\n * @param constructor - Cipher constructor.\n * @returns Wrapped constructor with validation.\n */\nexport const wrapCipher = (params, constructor) => {\n function wrappedCipher(key, ...args) {\n // Validate key\n abytes(key, undefined, 'key');\n // Validate nonce if nonceLength is present\n if (params.nonceLength !== undefined) {\n const nonce = args[0];\n abytes(nonce, params.varSizeNonce ? undefined : params.nonceLength, 'nonce');\n }\n // Validate AAD if tagLength present\n const tagl = params.tagLength;\n if (tagl && args[1] !== undefined)\n abytes(args[1], undefined, 'AAD');\n const cipher = constructor(key, ...args);\n const checkOutput = (fnLength, output) => {\n if (output !== undefined) {\n if (fnLength !== 2)\n throw new Error('cipher output not supported');\n abytes(output, undefined, 'output');\n }\n };\n // Create wrapped cipher with validation and single-use encryption\n let called = false;\n const wrCipher = {\n encrypt(data, output) {\n if (called)\n throw new Error('cannot encrypt() twice with same key + nonce');\n called = true;\n abytes(data);\n checkOutput(cipher.encrypt.length, output);\n return cipher.encrypt(data, output);\n },\n decrypt(data, output) {\n abytes(data);\n if (tagl && data.length < tagl)\n throw new Error('\"ciphertext\" expected length bigger than tagLength=' + tagl);\n checkOutput(cipher.decrypt.length, output);\n return cipher.decrypt(data, output);\n },\n };\n return wrCipher;\n }\n Object.assign(wrappedCipher, params);\n return wrappedCipher;\n};\n/**\n * By default, returns u8a of length.\n * When out is available, it checks it for validity and uses it.\n * @param expectedLength - Required output length.\n * @param out - Optional destination buffer.\n * @param onlyAligned - Whether `out` must be 4-byte aligned.\n * @returns Output buffer ready for writing.\n * @throws On wrong argument types. {@link TypeError}\n * @throws If the provided output buffer has the wrong size or alignment. {@link Error}\n * @example\n * Reuses a caller-provided output buffer when lengths match.\n *\n * ```ts\n * getOutput(16, new Uint8Array(16));\n * ```\n */\nexport function getOutput(expectedLength, out, onlyAligned = true) {\n if (out === undefined)\n return new Uint8Array(expectedLength);\n // Keep Buffer/cross-realm Uint8Array support here instead of trusting a shape-compatible object.\n abytes(out, undefined, 'output');\n if (out.length !== expectedLength)\n throw new Error('\"output\" expected Uint8Array of length ' + expectedLength + ', got: ' + out.length);\n if (onlyAligned && !isAligned32(out))\n throw new Error('invalid output, must be aligned');\n return out;\n}\n/**\n * Encodes data and AAD bit lengths into a 16-byte buffer.\n * @param dataLength - Data length in bits.\n * @param aadLength - AAD length in bits.\n * The serialized block is still `aadLength || dataLength`, matching GCM/Poly1305\n * conventions even though the helper parameter order is `(dataLength, aadLength)`.\n * @param isLE - Whether to encode lengths as little-endian.\n * @returns 16-byte length block.\n * @throws On wrong argument types passed to the endian validator. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Builds the length block appended by GCM and Poly1305.\n *\n * ```ts\n * u64Lengths(16, 8, true);\n * ```\n */\nexport function u64Lengths(dataLength, aadLength, isLE) {\n // Reject coercible non-number lengths like '10' and true before BigInt(...) accepts them.\n anumber(dataLength);\n anumber(aadLength);\n abool(isLE);\n const num = new Uint8Array(16);\n const view = createView(num);\n view.setBigUint64(0, BigInt(aadLength), isLE);\n view.setBigUint64(8, BigInt(dataLength), isLE);\n return num;\n}\n/**\n * Checks whether a byte array is aligned to a 4-byte offset.\n * @param bytes - Byte array to inspect.\n * @returns `true` when the view is 4-byte aligned.\n * @example\n * Checks whether a buffer can be safely viewed as Uint32Array.\n *\n * ```ts\n * isAligned32(new Uint8Array(4));\n * ```\n */\nexport function isAligned32(bytes) {\n return bytes.byteOffset % 4 === 0;\n}\n/**\n * Copies bytes into a new Uint8Array.\n * @param bytes - Bytes to copy.\n * @returns Copied byte array.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Copies input into an aligned Uint8Array before block processing.\n *\n * ```ts\n * copyBytes(new Uint8Array([1, 2]));\n * ```\n */\nexport function copyBytes(bytes) {\n // `Uint8Array.from(...)` would also accept arrays / other typed arrays. Keep this helper strict\n // because callers use it at byte-validation boundaries before mutating the detached copy.\n return Uint8Array.from(abytes(bytes));\n}\n/**\n * Cryptographically secure PRNG.\n * Uses internal OS-level `crypto.getRandomValues`.\n * @param bytesLength - Number of bytes to produce.\n * Validation is delegated to `Uint8Array(bytesLength)` and `getRandomValues`, so\n * non-integers, negative lengths, and oversize requests surface backend/runtime errors.\n * @returns Random byte array.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @throws If the runtime does not expose `crypto.getRandomValues`. {@link Error}\n * @example\n * Generates a fresh nonce or key.\n *\n * ```ts\n * randomBytes(16);\n * ```\n */\nexport function randomBytes(bytesLength = 32) {\n // Validate upfront so fractional / coercible lengths do not silently\n // truncate through Uint8Array().\n anumber(bytesLength);\n const cr = typeof globalThis === 'object' ? globalThis.crypto : null;\n if (typeof cr?.getRandomValues !== 'function')\n throw new Error('crypto.getRandomValues must be defined');\n return cr.getRandomValues(new Uint8Array(bytesLength));\n}\n/**\n * Uses CSPRNG for nonce, nonce injected in ciphertext.\n * For `encrypt`, a `nonceBytes`-length buffer is fetched from CSPRNG and\n * prepended to encrypted ciphertext. For `decrypt`, first `nonceBytes` of ciphertext\n * are treated as nonce. The wrapper always allocates a fresh `nonce || ciphertext`\n * buffer on encrypt and intentionally does not support caller-provided destination buffers.\n * Too-short decrypt inputs are split into short/empty nonce views and then delegated\n * to the wrapped cipher instead of being rejected here first.\n *\n * NOTE: Under the same key, using random nonces (e.g. `managedNonce`) with AES-GCM and ChaCha\n * should be limited to `2**23` (8M) messages to get a collision chance of\n * `2**-50`. Stretching to `2**32` (4B) messages would raise that chance to\n * `2**-33`, still negligible but creeping up.\n * @param fn - Cipher constructor that expects a nonce.\n * @param randomBytes_ - Random-byte source used for nonce generation.\n * @returns Cipher constructor that prepends the nonce to ciphertext.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On invalid nonce lengths observed at wrapper construction or use. {@link RangeError}\n * @example\n * Prepends a fresh random nonce to every ciphertext.\n *\n * ```ts\n * import { gcm } from '@noble/ciphers/aes.js';\n * import { managedNonce, randomBytes } from '@noble/ciphers/utils.js';\n * const wrapped = managedNonce(gcm);\n * const key = randomBytes(16);\n * const ciphertext = wrapped(key).encrypt(new Uint8Array([1, 2, 3]));\n * wrapped(key).decrypt(ciphertext);\n * ```\n */\nexport function managedNonce(fn, randomBytes_ = randomBytes) {\n const { nonceLength } = fn;\n anumber(nonceLength);\n const addNonce = (nonce, ciphertext, plaintext) => {\n const out = concatBytes(nonce, ciphertext);\n // Wrapped ciphers may alias caller plaintext on encrypt(); never zero\n // caller-owned buffers here.\n if (!overlapBytes(plaintext, ciphertext))\n ciphertext.fill(0);\n return out;\n };\n // NOTE: we cannot support DST here, it would be mistake:\n // - we don't know how much dst length cipher requires\n // - nonce may unalign dst and break everything\n // - we create new u8a anyway (concatBytes)\n // - previously we passed all args to cipher, but that was mistake!\n const res = ((key, ...args) => ({\n encrypt(plaintext) {\n abytes(plaintext);\n const nonce = randomBytes_(nonceLength);\n const encrypted = fn(key, nonce, ...args).encrypt(plaintext);\n // @ts-ignore\n if (encrypted instanceof Promise)\n return encrypted.then((ct) => addNonce(nonce, ct, plaintext));\n return addNonce(nonce, encrypted, plaintext);\n },\n decrypt(ciphertext) {\n abytes(ciphertext);\n const nonce = ciphertext.subarray(0, nonceLength);\n const decrypted = ciphertext.subarray(nonceLength);\n return fn(key, nonce, ...args).decrypt(decrypted);\n },\n }));\n // Auto-nonce wrappers still preserve the wrapped payload geometry.\n if ('blockSize' in fn)\n res.blockSize = fn.blockSize;\n if ('tagLength' in fn)\n res.tagLength = fn.tagLength;\n return res;\n}\n//# sourceMappingURL=utils.js.map",
|
|
63
63
|
"/**\n * Basic utils for ARX (add-rotate-xor) salsa and chacha ciphers.\n\nRFC8439 requires multi-step cipher stream, where\nauthKey starts with counter: 0, actual msg with counter: 1.\n\nFor this, we need a way to re-use nonce / counter:\n\n const counter = new Uint8Array(4);\n chacha(..., counter, ...); // counter is now 1\n chacha(..., counter, ...); // counter is now 2\n\nThis is complicated:\n\n- 32-bit counters are enough, no need for 64-bit: max ArrayBuffer size in JS is 4GB\n- Original papers don't allow mutating counters\n- Counter overflow is undefined [^1]\n- Idea A: allow providing (nonce | counter) instead of just nonce, re-use it\n- Caveat: Cannot be re-used through all cases:\n- * chacha has (counter | nonce)\n- * xchacha has (nonce16 | counter | nonce16)\n- Idea B: separate nonce / counter and provide separate API for counter re-use\n- Caveat: there are different counter sizes depending on an algorithm.\n- salsa & chacha also differ in structures of key & sigma:\n salsa20: s[0] | k(4) | s[1] | nonce(2) | cnt(2) | s[2] | k(4) | s[3]\n chacha: s(4) | k(8) | cnt(1) | nonce(3)\n chacha20orig: s(4) | k(8) | cnt(2) | nonce(2)\n- Idea C: helper method such as `setSalsaState(key, nonce, sigma, data)`\n- Caveat: we can't re-use counter array\n\nxchacha uses the subkey and remaining 8 byte nonce with ChaCha20 as normal\n(prefixed by 4 NUL bytes, since RFC8439 specifies a 12-byte nonce).\nCounter overflow is undefined; see {@link https://mailarchive.ietf.org/arch/msg/cfrg/gsOnTJzcbgG6OqD8Sc0GO5aR_tU/ | the CFRG thread}.\nCurrent noble policy is strict non-wrap for the shared 32-bit counter path:\nexported ARX ciphers reject initial `0xffffffff` and stop before any implicit\nwrap back to zero.\nSee {@link https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha#appendix-A.2 | the XChaCha appendix} for the extended-nonce construction.\n\n * @module\n */\nimport { abool, abytes, anumber, checkOpts, clean, copyBytes, getOutput, isAligned32, isLE, randomBytes, swap32IfBE, u32, } from \"./utils.js\";\n// Replaces `TextEncoder` for ASCII literals, which is enough for sigma constants.\n// Non-ASCII input would not match UTF-8 `TextEncoder` output.\nconst encodeStr = (str) => Uint8Array.from(str.split(''), (c) => c.charCodeAt(0));\n// Raw `createCipher(...)` exports consume these native-endian `u32(...)` views directly.\n// Public `wrapCipher(...)` APIs reject non-little-endian platforms before reaching this path.\n// RFC 8439 §2.3 / RFC 7539 §2.3 only define the 256-bit-key constants; this 16-byte sigma is\n// kept for legacy allowShortKeys Salsa/ChaCha variants.\nconst sigma16_32 = /* @__PURE__ */ (() => swap32IfBE(u32(encodeStr('expand 16-byte k'))))();\n// RFC 8439 §2.3 / RFC 7539 §2.3 define words 0-3 as\n// `0x61707865 0x3320646e 0x79622d32 0x6b206574`, i.e. `expand 32-byte k`.\nconst sigma32_32 = /* @__PURE__ */ (() => swap32IfBE(u32(encodeStr('expand 32-byte k'))))();\n/**\n * Rotates a 32-bit word left.\n * @param a - Input word.\n * @param b - Rotation count in bits.\n * @returns Rotated 32-bit word.\n * @example\n * Moves the top byte of `0x12345678` into the low byte position.\n * ```ts\n * rotl(0x12345678, 8);\n * ```\n */\nexport function rotl(a, b) {\n return (a << b) | (a >>> (32 - b));\n}\n// Salsa and Chacha block length is always 512-bit\nconst BLOCK_LEN = 64;\n// RFC 8439 §2.2 / RFC 7539 §2.2: the ChaCha state has 16 32-bit words.\nconst BLOCK_LEN32 = 16;\n// Counter policy for the shared public `counter` argument:\n// - RFC/IETF ChaCha20 uses a 32-bit counter.\n// - OpenSSL/Node `chacha20` instead treat the full 16-byte IV as a 128-bit\n// counter state and carry into the next word.\n// - Raw `chacha20orig`, `salsa20`, `xsalsa20`, and `xchacha20` use 64-bit counters in libsodium\n// and libtomcrypt, while some libs (for example libtomcrypt's RFC/IETF path) reject the max\n// boundary instead of carrying.\n// - AEAD wrappers diverge too: libsodium `xchacha20poly1305` uses the IETF payload counter from\n// block 1, while `secretstream_xchacha20poly1305` is a different protocol with rekey/reset.\n// Noble intentionally throws instead of silently picking one wrap model for users. In the default\n// path, even a 32-bit boundary would take 2^32 blocks * 64 bytes = 256 GiB, which is practically\n// unreachable for normal JS callers; advanced users who pass `counter` explicitly can implement\n// whatever wider carry / wrap policy they need on top.\nconst MAX_COUNTER = /* @__PURE__ */ (() => 2 ** 32 - 1)();\nconst U32_EMPTY = /* @__PURE__ */ Uint32Array.of();\nfunction runCipher(core, sigma, key, nonce, data, output, counter, rounds) {\n const len = data.length;\n const block = new Uint8Array(BLOCK_LEN);\n const b32 = u32(block);\n // Make sure that buffers aligned to 4 bytes\n const isAligned = isLE && isAligned32(data) && isAligned32(output);\n const d32 = isAligned ? u32(data) : U32_EMPTY;\n const o32 = isAligned ? u32(output) : U32_EMPTY;\n // RFC 8439 §2.4.1 / RFC 7539 §2.4.1 allow XORing one keystream block at a time and\n // truncating the final partial block instead of materializing the whole keystream.\n if (!isLE) {\n for (let pos = 0; pos < len; counter++) {\n core(sigma, key, nonce, b32, counter, rounds);\n // RFC 8439 §2.4 / RFC 7539 §2.4 serialize keystream words in little-endian order.\n swap32IfBE(b32);\n if (counter >= MAX_COUNTER)\n throw new Error('arx: counter overflow');\n const take = Math.min(BLOCK_LEN, len - pos);\n for (let j = 0, posj; j < take; j++) {\n posj = pos + j;\n output[posj] = data[posj] ^ block[j];\n }\n pos += take;\n }\n return;\n }\n for (let pos = 0; pos < len; counter++) {\n core(sigma, key, nonce, b32, counter, rounds);\n // See MAX_COUNTER policy note above: never silently wrap the shared public counter.\n if (counter >= MAX_COUNTER)\n throw new Error('arx: counter overflow');\n const take = Math.min(BLOCK_LEN, len - pos);\n // aligned to 4 bytes\n if (isAligned && take === BLOCK_LEN) {\n const pos32 = pos / 4;\n if (pos % 4 !== 0)\n throw new Error('arx: invalid block position');\n for (let j = 0, posj; j < BLOCK_LEN32; j++) {\n posj = pos32 + j;\n o32[posj] = d32[posj] ^ b32[j];\n }\n pos += BLOCK_LEN;\n continue;\n }\n for (let j = 0, posj; j < take; j++) {\n posj = pos + j;\n output[posj] = data[posj] ^ block[j];\n }\n pos += take;\n }\n}\n/**\n * Creates an ARX stream cipher from a 32-bit core permutation.\n * Used internally to build the exported Salsa and ChaCha stream ciphers.\n * @param core - Core function that fills one keystream block.\n * @param opts - Cipher layout and nonce-extension options. See {@link CipherOpts}.\n * @returns Stream cipher function over byte arrays.\n * @throws If the core callback, key size, counter, or output sizing is invalid. {@link Error}\n */\nexport function createCipher(core, opts) {\n const { allowShortKeys, extendNonceFn, counterLength, counterRight, rounds } = checkOpts({ allowShortKeys: false, counterLength: 8, counterRight: false, rounds: 20 }, opts);\n if (typeof core !== 'function')\n throw new Error('core must be a function');\n anumber(counterLength);\n anumber(rounds);\n abool(counterRight);\n abool(allowShortKeys);\n return (key, nonce, data, output, counter = 0) => {\n abytes(key, undefined, 'key');\n abytes(nonce, undefined, 'nonce');\n abytes(data, undefined, 'data');\n const len = data.length;\n // Raw XorStream APIs return ciphertext/plaintext bytes directly, so caller-provided outputs\n // must match the logical result length exactly instead of returning an oversized workspace.\n output = getOutput(len, output, false);\n anumber(counter);\n // See MAX_COUNTER policy note above: reject advanced explicit-counter requests before any wrap.\n if (counter < 0 || counter >= MAX_COUNTER)\n throw new Error('arx: counter overflow');\n const toClean = [];\n // Key & sigma\n // key=16 -> sigma16, k=key|key\n // key=32 -> sigma32, k=key\n let l = key.length;\n let k;\n let sigma;\n if (l === 32) {\n // Copy caller keys too: big-endian normalization, extended-nonce subkey derivation, and\n // final clean(...) all mutate or wipe the temporary buffer in place.\n toClean.push((k = copyBytes(key)));\n sigma = sigma32_32;\n }\n else if (l === 16 && allowShortKeys) {\n k = new Uint8Array(32);\n k.set(key);\n k.set(key, 16);\n sigma = sigma16_32;\n toClean.push(k);\n }\n else {\n abytes(key, 32, 'arx key');\n throw new Error('invalid key size');\n // throw new Error(`\"arx key\" expected Uint8Array of length 32, got length=${l}`);\n }\n // Nonce\n // salsa20: 8 (8-byte counter)\n // chacha20orig: 8 (8-byte counter)\n // chacha20: 12 (4-byte counter)\n // xsalsa20: 24 (16 -> hsalsa, 8 -> old nonce)\n // xchacha20: 24 (16 -> hchacha, 8 -> old nonce)\n // Copy before taking u32(...) views on misaligned inputs, and on big-endian so later\n // swap32IfBE(...) never mutates caller nonce bytes in place.\n if (!isLE || !isAligned32(nonce))\n toClean.push((nonce = copyBytes(nonce)));\n let k32 = u32(k);\n // hsalsa & hchacha: handle extended nonce\n if (extendNonceFn) {\n if (nonce.length !== 24)\n throw new Error(`arx: extended nonce must be 24 bytes`);\n const n16 = nonce.subarray(0, 16);\n if (isLE)\n extendNonceFn(sigma, k32, u32(n16), k32);\n else {\n const sigmaRaw = swap32IfBE(Uint32Array.from(sigma));\n extendNonceFn(sigmaRaw, k32, u32(n16), k32);\n clean(sigmaRaw);\n swap32IfBE(k32);\n }\n nonce = nonce.subarray(16);\n }\n else if (!isLE)\n swap32IfBE(k32);\n // Handle nonce counter\n const nonceNcLen = 16 - counterLength;\n if (nonceNcLen !== nonce.length)\n throw new Error(`arx: nonce must be ${nonceNcLen} or 16 bytes`);\n // Normalize 64-bit-nonce layouts to the 12-byte core input: ChaCha/XChaCha prefix 4 zero\n // counter bytes, while Salsa/XSalsa append them after the nonce words.\n if (nonceNcLen !== 12) {\n const nc = new Uint8Array(12);\n nc.set(nonce, counterRight ? 0 : 12 - nonce.length);\n nonce = nc;\n toClean.push(nonce);\n }\n const n32 = swap32IfBE(u32(nonce));\n // Ensure temporary key/nonce copies are wiped even if the remaining\n // runtime guard in runCipher(...) throws on counter overflow.\n try {\n runCipher(core, sigma, k32, n32, data, output, counter, rounds);\n return output;\n }\n finally {\n clean(...toClean);\n }\n };\n}\n/** Internal class which wraps chacha20 or chacha8 to create CSPRNG. */\nexport class _XorStreamPRG {\n blockLen;\n keyLen;\n nonceLen;\n state;\n buf;\n key;\n nonce;\n pos;\n ctr;\n cipher;\n constructor(cipher, blockLen, keyLen, nonceLen, seed) {\n this.cipher = cipher;\n this.blockLen = blockLen;\n this.keyLen = keyLen;\n this.nonceLen = nonceLen;\n this.state = new Uint8Array(this.keyLen + this.nonceLen);\n this.reseed(seed);\n this.ctr = 0;\n this.pos = this.blockLen;\n this.buf = new Uint8Array(this.blockLen);\n // Keep a single key||nonce backing buffer so reseed/addEntropy/clean update the live cipher\n // inputs in place through these subarray views.\n this.key = this.state.subarray(0, this.keyLen);\n this.nonce = this.state.subarray(this.keyLen);\n }\n reseed(seed) {\n abytes(seed);\n if (!seed || seed.length === 0)\n throw new Error('entropy required');\n // Mix variable-length entropy cyclically across the whole key||nonce state, then restart the\n // keystream so buffered leftovers from the previous state are never reused.\n for (let i = 0; i < seed.length; i++)\n this.state[i % this.state.length] ^= seed[i];\n this.ctr = 0;\n this.pos = this.blockLen;\n }\n addEntropy(seed) {\n // Reject empty entropy before re-keying, otherwise a throwing call would still advance state.\n abytes(seed);\n if (seed.length === 0)\n throw new Error('entropy required');\n // Re-key from the current stream first, then mix external entropy into the fresh key||nonce\n // state through reseed() so stale buffered bytes are discarded.\n this.state.set(this.randomBytes(this.state.length));\n this.reseed(seed);\n }\n randomBytes(len) {\n anumber(len);\n if (len === 0)\n return new Uint8Array(0);\n const avail = this.pos < this.blockLen ? this.blockLen - this.pos : 0;\n const blocks = Math.ceil(Math.max(0, len - avail) / this.blockLen);\n // Preflight overflow so failed reads don't partially consume keystream\n // and leave the PRG repeating blocks.\n if (blocks > 0 && this.ctr > MAX_COUNTER - blocks)\n throw new Error('arx: counter overflow');\n const out = new Uint8Array(len);\n let outPos = 0;\n // `out` starts zero-filled, and `buf.fill(0)` below does the same for leftovers: XOR-stream\n // ciphers then emit raw keystream bytes directly into those buffers.\n // Serve buffered leftovers first so split reads stay identical to one larger read.\n if (this.pos < this.blockLen) {\n const take = Math.min(len, this.blockLen - this.pos);\n out.set(this.buf.subarray(this.pos, this.pos + take), 0);\n this.pos += take;\n outPos += take;\n if (outPos === len)\n return out; // fast path\n }\n // Full blocks directly to out\n const full = Math.floor((len - outPos) / this.blockLen);\n if (full > 0) {\n const blockBytes = full * this.blockLen;\n const b = out.subarray(outPos, outPos + blockBytes);\n this.cipher(this.key, this.nonce, b, b, this.ctr);\n this.ctr += full;\n outPos += blockBytes;\n }\n // Save leftovers\n const left = len - outPos;\n if (left > 0) {\n this.buf.fill(0);\n // NOTE: cipher will handle overflow\n this.cipher(this.key, this.nonce, this.buf, this.buf, this.ctr++);\n out.set(this.buf.subarray(0, left), outPos);\n this.pos = left;\n }\n return out;\n }\n // Clone seeds the new instance from this stream, so the source PRG advances too.\n clone() {\n return new _XorStreamPRG(this.cipher, this.blockLen, this.keyLen, this.nonceLen, this.randomBytes(this.state.length));\n }\n // Zeroes the current state and leftover buffer, but does not make the instance unusable:\n // Later reads first drain zeros from the cleared buffer and then continue\n // from zero key||nonce state.\n clean() {\n this.pos = 0;\n this.ctr = 0;\n this.buf.fill(0);\n this.state.fill(0);\n }\n}\n/**\n * Creates a PRG constructor from a stream cipher.\n * @param cipher - Stream cipher used to fill output blocks.\n * @param blockLen - Keystream block length in bytes.\n * @param keyLen - Internal key length in bytes.\n * @param nonceLen - Internal nonce length in bytes.\n * @returns PRG factory for seeded concrete `_XorStreamPRG` instances.\n * @example\n * Builds a PRG from XChaCha20 and reads bytes from a randomly seeded instance.\n * ```ts\n * import { xchacha20 } from '@noble/ciphers/chacha.js';\n * import { createPRG } from '@noble/ciphers/_arx.js';\n * import { randomBytes } from '@noble/ciphers/utils.js';\n * const seed = randomBytes(32);\n * const init = createPRG(xchacha20, 64, 32, 24);\n * const prg = init(seed);\n * prg.randomBytes(8);\n * ```\n */\nexport const createPRG = (cipher, blockLen, keyLen, nonceLen) => {\n return ((seed = randomBytes(32)) => new _XorStreamPRG(cipher, blockLen, keyLen, nonceLen, seed));\n};\n//# sourceMappingURL=_arx.js.map",
|
|
@@ -75,15 +75,15 @@
|
|
|
75
75
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n//\n// Producer for the versioned VGI HTTP landing contract (`describe.json`) from a\n// worker's catalog introspection. This is the TypeScript counterpart to the\n// Python reference producer (`vgi/http/describe_json.py`); both emit an\n// equivalent document, guarded by the cross-language conformance harness at\n// `vgi/test/landing/`. See `vgi/docs/http-landing-contract.md` for the spec.\n//\n// The document is JSON — it does NOT depend on the (versioned, evolving) VGI\n// wire protocol, so the single shared static `landing.html` (byte-identical\n// across every language worker) can render it same-origin. Table/view columns\n// are lazy: the document carries only a column count, and the page fetches\n// per-object detail from `buildColumnsJson`\n// (`GET {prefix}/describe/{catalog}/{schema}/{table}.json`) on first expand.\n\nimport {\n deserializeBatch,\n deserializeSchema,\n isBinary,\n isBool,\n isFloat,\n isInt,\n isNull,\n isUtf8,\n type VgiDataType,\n type VgiField,\n} from \"../arrow/index.js\";\nimport type { CatalogInterface } from \"../catalog/interface.js\";\nimport type {\n CatalogAttachResult,\n CatalogInfo,\n FunctionInfo,\n MacroInfo,\n SchemaInfo,\n TableInfo,\n ViewInfo,\n} from \"../generated/vgi-client.js\";\nimport {\n VGI_ARG_KEY,\n VGI_ARG_NAMED,\n VGI_DEFAULT_KEY,\n VGI_DOC_KEY,\n VGI_TYPE_KEY,\n VGI_TYPE_TABLE,\n} from \"../types.js\";\n\nexport const LANDING_SCHEMA_VERSION = 1;\nexport const CUPOLA_BASE = \"https://cupola.query-farm.services\";\n\n/**\n * Producer for the VGI landing surface, passed to `createHttpHandler`'s\n * `landingDescribe` option. Declared locally (structurally identical to\n * `@query-farm/vgi-rpc`'s `LandingDescribeProvider`) so this package does not\n * hard-couple to a specific vgi-rpc version.\n */\nexport interface LandingDescribeProvider {\n describe(ctx: { serverId: string; oauth: boolean }): unknown | Promise<unknown>;\n columns(catalog: string, schema: string, table: string): unknown | null | Promise<unknown | null>;\n}\n\n/** Identity of the worker software surfaced in `describe.json` → `worker`. */\nexport interface WorkerDescribeInfo {\n /** Worker name (e.g. class or catalog name). */\n name: string;\n /** One-line worker description. */\n doc?: string;\n /** Worker software version. */\n version?: string;\n}\n\n// `duckdb_databases().tags` keys (the reserved `vgi.*` namespace) surfaced in\n// the landing page's catalog card. Mirrors the Python reference `_STRING_TAGS`.\nconst STRING_TAGS: Record<string, string> = {\n title: \"vgi.title\",\n doc_md: \"vgi.doc_md\",\n source_url: \"vgi.source_url\",\n license: \"vgi.license\",\n author: \"vgi.author\",\n copyright: \"vgi.copyright\",\n support_contact: \"vgi.support_contact\",\n support_policy_url: \"vgi.support_policy_url\",\n};\nconst KEYWORDS_TAG = \"vgi.keywords\"; // JSON array encoded as a string in the tags MAP\n\n// ---------------------------------------------------------------------------\n// Type / field helpers\n// ---------------------------------------------------------------------------\n\n/** Human-readable DuckDB-ish type name for a VGI Arrow type. */\nfunction typeToString(type: VgiDataType): string {\n if (isNull(type)) return \"NULL\";\n if (isUtf8(type)) return \"VARCHAR\";\n if (isBinary(type)) return \"BLOB\";\n if (isBool(type)) return \"BOOLEAN\";\n if (isInt(type)) {\n const bw = (type as { bitWidth?: number }).bitWidth ?? 32;\n return bw === 64 ? \"BIGINT\" : \"INTEGER\";\n }\n if (isFloat(type)) {\n const precision = (type as { precision?: number }).precision ?? 2;\n return precision === 1 ? \"FLOAT\" : \"DOUBLE\";\n }\n const s = (type as { toString?: () => string }).toString?.();\n return s ?? String(type.typeId);\n}\n\n/**\n * Raw Arrow type string (e.g. `int64`, `string`, `double`) matching pyarrow's\n * `str(type)`. Unlike {@link typeToString} (DuckDB-ish names used for table/view\n * columns), macro arg types are carried verbatim in `describe.json` — the shared\n * landing page maps Arrow → DuckDB client-side — so they must be byte-identical\n * to what the Python reference producer emits for cross-language parity.\n */\nfunction arrowTypeString(type: VgiDataType): string {\n if (isNull(type)) return \"null\";\n if (isBool(type)) return \"bool\";\n if (isUtf8(type)) return \"string\";\n if (isBinary(type)) return \"binary\";\n if (isInt(type)) {\n const bw = (type as { bitWidth?: number }).bitWidth ?? 32;\n const signed =\n (type as { isSigned?: boolean }).isSigned ?? (type as { signed?: boolean }).signed ?? true;\n return `${signed ? \"\" : \"u\"}int${bw}`;\n }\n if (isFloat(type)) {\n const precision = (type as { precision?: number }).precision ?? 2;\n return precision === 0 ? \"halffloat\" : precision === 1 ? \"float\" : \"double\";\n }\n const s = (type as { toString?: () => string }).toString?.();\n return (s ?? String(type.typeId)).toLowerCase();\n}\n\nfunction fieldMeta(field: VgiField, key: string): string | undefined {\n return field.metadata.get(key);\n}\n\ninterface ColumnJson {\n name: string;\n type: string;\n comment?: string;\n}\n\nfunction fieldToColumn(field: VgiField): ColumnJson {\n const col: ColumnJson = { name: field.name, type: typeToString(field.type) };\n const comment = fieldMeta(field, \"comment\") ?? fieldMeta(field, VGI_DOC_KEY);\n if (comment) col.comment = comment;\n return col;\n}\n\nfunction readSchemaSafe(bytes: Uint8Array | null | undefined) {\n if (!bytes || bytes.length === 0) return null;\n try {\n return deserializeSchema(bytes);\n } catch {\n return null;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Function mapping\n// ---------------------------------------------------------------------------\n\n/** scalar | table | aggregate | table_in_out (mirrors Python `_function_display_type`). */\nfunction functionDisplayType(fn: FunctionInfo): \"scalar\" | \"table\" | \"aggregate\" | \"table_in_out\" {\n const t = String(fn.function_type).toUpperCase();\n if (t === \"SCALAR\") return \"scalar\";\n if (t === \"AGGREGATE\") return \"aggregate\";\n if (fn.has_finalize) return \"table_in_out\";\n return \"table\";\n}\n\nfunction functionReturns(fn: FunctionInfo): string | undefined {\n const schema = readSchemaSafe(fn.output_schema);\n if (schema === null || schema.fields.length === 0) return undefined;\n const t = String(fn.function_type).toUpperCase();\n if (t === \"SCALAR\" || t === \"AGGREGATE\") {\n // Scalar/aggregate output is a single \"result\" column.\n return typeToString(schema.fields[0].type);\n }\n const cols = schema.fields.map((f) => `${f.name} ${typeToString(f.type)}`).join(\", \");\n return `TABLE(${cols})`;\n}\n\ninterface ArgJson {\n name: string;\n type: string;\n named?: boolean;\n default?: string;\n desc?: string;\n}\n\nfunction functionArgs(fn: FunctionInfo): ArgJson[] {\n const schema = readSchemaSafe(fn.arguments);\n if (schema === null) return [];\n const args: ArgJson[] = [];\n for (const field of schema.fields) {\n // Skip the piped input relation of a table-in-out function; it's not a\n // user-supplied argument.\n if (fieldMeta(field, VGI_TYPE_KEY) === VGI_TYPE_TABLE) continue;\n const arg: ArgJson = { name: field.name, type: typeToString(field.type) };\n if (fieldMeta(field, VGI_ARG_KEY) === VGI_ARG_NAMED) arg.named = true;\n const doc = fieldMeta(field, VGI_DOC_KEY);\n if (doc) arg.desc = doc;\n const rawDefault = fieldMeta(field, VGI_DEFAULT_KEY);\n if (rawDefault !== undefined) {\n // Stored as a JSON scalar; render the decoded value for display.\n try {\n arg.default = JSON.stringify(JSON.parse(rawDefault));\n } catch {\n arg.default = rawDefault;\n }\n }\n args.push(arg);\n }\n return args;\n}\n\n// ---------------------------------------------------------------------------\n// Macro mapping\n// ---------------------------------------------------------------------------\n\n// A scalar macro is invoked exactly like a scalar function in SQL, and a table\n// macro like a table function; surface them in the same buckets so the landing\n// page lists a catalog's full callable surface (VGI workers commonly expose\n// their \"functions\" as declarative macros). Mirrors Python `_macro_display_type`.\nfunction macroDisplayType(m: MacroInfo): \"scalar\" | \"table\" {\n return String(m.macro_type).toUpperCase() === \"SCALAR\" ? \"scalar\" : \"table\";\n}\n\n/** JSON-encode a decoded macro default scalar, matching Python's `json.dumps`. */\nfunction macroDefaultJson(value: unknown): string {\n // int64 defaults decode to BigInt, which JSON.stringify rejects; a bigint's\n // decimal string is already its JSON integer encoding (0n -> \"0\").\n if (typeof value === \"bigint\") return value.toString();\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nfunction macroArgs(m: MacroInfo): ArgJson[] {\n // Defaulted parameters are optional and callable by name in DuckDB, so we\n // present them as named args (with their default); the rest are positional.\n const defaults = new Map<string, unknown>();\n const defBytes = m.parameter_default_values;\n if (defBytes && defBytes.length > 0) {\n try {\n const batch = deserializeBatch(defBytes);\n for (const field of batch.schema.fields) {\n try {\n defaults.set(field.name, batch.getChild(field.name)?.get(0));\n } catch {\n // skip an undecodable default column\n }\n }\n } catch {\n // no usable defaults\n }\n }\n\n const schema = readSchemaSafe(m.arguments_schema);\n const fields = schema ? schema.fields : null;\n const fieldByName = new Map<string, VgiField>();\n if (fields) for (const f of fields) fieldByName.set(f.name, f);\n const names = fields ? fields.map((f) => f.name) : m.parameters;\n\n const args: ArgJson[] = [];\n for (const name of names) {\n const field = fieldByName.get(name);\n // Macro parameters are untyped unless a typed default pins them; show ANY\n // rather than the Arrow null placeholder.\n const arg: ArgJson =\n field !== undefined && !isNull(field.type)\n ? { name, type: arrowTypeString(field.type) }\n : { name, type: \"ANY\" };\n const doc = field !== undefined ? fieldMeta(field, VGI_DOC_KEY) : undefined;\n if (doc) arg.desc = doc;\n if (defaults.has(name)) {\n arg.named = true;\n arg.default = macroDefaultJson(defaults.get(name));\n }\n args.push(arg);\n }\n return args;\n}\n\nfunction macroToObject(m: MacroInfo): Record<string, unknown> {\n return {\n name: m.name,\n type: macroDisplayType(m),\n doc: m.comment ?? \"\",\n args: macroArgs(m),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Catalog contents\n// ---------------------------------------------------------------------------\n\nasync function schemaContents(\n iface: CatalogInterface,\n aod: Uint8Array,\n name: string,\n kind: \"TABLE\" | \"VIEW\",\n): Promise<TableInfo[] | ViewInfo[]> {\n try {\n if (kind === \"TABLE\") {\n return await iface.schemaContentsTables(aod, name);\n }\n return await iface.schemaContentsViews(aod, name);\n } catch {\n return [];\n }\n}\n\nasync function schemaFunctions(iface: CatalogInterface, aod: Uint8Array, name: string): Promise<FunctionInfo[]> {\n const out: FunctionInfo[] = [];\n for (const kind of [\"SCALAR_FUNCTION\", \"TABLE_FUNCTION\", \"AGGREGATE_FUNCTION\"]) {\n try {\n out.push(...(await iface.schemaContentsFunctions(aod, name, kind)));\n } catch {\n // best-effort — keep whatever we collected\n }\n }\n return out;\n}\n\nasync function schemaMacros(iface: CatalogInterface, aod: Uint8Array, name: string): Promise<MacroInfo[]> {\n const out: MacroInfo[] = [];\n for (const kind of [\"SCALAR_MACRO\", \"TABLE_MACRO\"]) {\n try {\n out.push(...(await iface.schemaContentsMacros(aod, name, kind)));\n } catch {\n // best-effort — keep whatever we collected\n }\n }\n return out;\n}\n\ninterface Counts {\n schemas: number;\n tables: number;\n views: number;\n functions: number;\n}\n\nasync function buildSchemas(\n iface: CatalogInterface,\n aod: Uint8Array,\n): Promise<{ schemas: unknown[]; counts: Counts }> {\n let schemaInfos: SchemaInfo[];\n try {\n schemaInfos = await iface.schemas(aod);\n } catch {\n return { schemas: [], counts: { schemas: 0, tables: 0, views: 0, functions: 0 } };\n }\n\n const schemas: unknown[] = [];\n const counts: Counts = { schemas: 0, tables: 0, views: 0, functions: 0 };\n\n for (const si of schemaInfos) {\n const tablesRaw = (await schemaContents(iface, aod, si.name, \"TABLE\")) as TableInfo[];\n const viewsRaw = (await schemaContents(iface, aod, si.name, \"VIEW\")) as ViewInfo[];\n const funcsRaw = await schemaFunctions(iface, aod, si.name);\n const macrosRaw = await schemaMacros(iface, aod, si.name);\n\n const tables = tablesRaw.map((t) => {\n const schema = readSchemaSafe(t.columns);\n return { name: t.name, cols: schema ? schema.fields.length : 0, comment: t.comment ?? \"\" };\n });\n\n const views = viewsRaw.map((v) => ({\n name: v.name,\n cols: Object.keys(v.column_comments ?? {}).length,\n comment: v.comment ?? \"\",\n def: v.definition,\n }));\n\n const functions: Record<string, unknown>[] = funcsRaw.map((fn) => {\n const obj: Record<string, unknown> = {\n name: fn.name,\n type: functionDisplayType(fn),\n doc: fn.description ?? \"\",\n args: functionArgs(fn),\n };\n const ret = functionReturns(fn);\n if (ret) obj.returns = ret;\n return obj;\n });\n // Fold macros into the same scalar/table buckets (VGI catalogs commonly\n // expose their callable surface as declarative macros).\n functions.push(...macrosRaw.map((m) => macroToObject(m)));\n // Deterministic ordering across functions + macros, matching the Python\n // reference producer's `sort(key=(type, name))`.\n functions.sort(\n (a, b) =>\n String(a.type).localeCompare(String(b.type)) || String(a.name).localeCompare(String(b.name)),\n );\n\n const schemaObj: Record<string, unknown> = { name: si.name };\n if (si.comment) schemaObj.doc = si.comment;\n schemaObj.tables = tables;\n schemaObj.views = views;\n schemaObj.functions = functions;\n schemas.push(schemaObj);\n counts.schemas += 1;\n counts.tables += tables.length;\n counts.views += views.length;\n counts.functions += functions.length;\n }\n\n return { schemas, counts };\n}\n\n// ---------------------------------------------------------------------------\n// Catalog-level metadata (tags, attach options, data versions)\n// ---------------------------------------------------------------------------\n\nfunction catalogTags(result: CatalogAttachResult | null): Record<string, unknown> {\n const tags = result?.tags;\n if (!tags) return {};\n const out: Record<string, unknown> = {};\n for (const [key, tag] of Object.entries(STRING_TAGS)) {\n const val = tags[tag];\n if (val) out[key] = val;\n }\n const kw = tags[KEYWORDS_TAG];\n if (kw) {\n try {\n const parsed = JSON.parse(kw);\n if (Array.isArray(parsed)) out.keywords = parsed.map((k) => String(k));\n } catch {\n // ignore unparseable keyword tag\n }\n }\n return out;\n}\n\ninterface AttachOptionJson {\n name: string;\n type: string;\n default: string;\n description: string;\n}\n\n/** Decode a serialized AttachOptionSpec row into the describe shape. */\nfunction decodeAttachOption(bytes: Uint8Array): AttachOptionJson | null {\n try {\n const batch = deserializeBatch(bytes);\n if (batch.numRows === 0) return null;\n const name = String(batch.getChild(\"name\")?.get(0) ?? \"\");\n const description = String(batch.getChild(\"description\")?.get(0) ?? \"\");\n const typeBytes = batch.getChild(\"type\")?.get(0) as Uint8Array | null | undefined;\n let type = \"\";\n const typeSchema = readSchemaSafe(typeBytes ?? null);\n if (typeSchema && typeSchema.fields.length > 0) type = typeToString(typeSchema.fields[0].type);\n let defaultStr = \"\";\n const defBytes = batch.getChild(\"default_value\")?.get(0) as Uint8Array | null | undefined;\n if (defBytes) {\n try {\n const defBatch = deserializeBatch(defBytes);\n if (defBatch.numRows > 0) {\n const v = defBatch.getChild(\"value\")?.get(0);\n defaultStr = v == null ? \"\" : String(v);\n }\n } catch {\n // leave default empty\n }\n }\n return { name, type, default: defaultStr, description };\n } catch {\n return null;\n }\n}\n\nasync function attachCatalog(\n iface: CatalogInterface,\n name: string,\n): Promise<CatalogAttachResult | null> {\n try {\n return await iface.attach(name, {}, null, null);\n } catch {\n return null;\n }\n}\n\nasync function buildCatalog(\n iface: CatalogInterface,\n name: string,\n info: CatalogInfo | undefined,\n): Promise<Record<string, unknown>> {\n const result = await attachCatalog(iface, name);\n\n const attachOptions = (info?.attach_option_specs ?? [])\n .map((b) => decodeAttachOption(b))\n .filter((o): o is AttachOptionJson => o !== null);\n\n const dataVersions = (info?.releases ?? []).map((r) =>\n r.summary ? { spec: r.version, label: r.summary } : { spec: r.version },\n );\n\n let impl: string | null = info?.implementation_version ?? null;\n let dvs: string | null = info?.data_version_spec ?? null;\n if (result) {\n impl = result.resolved_implementation_version ?? impl;\n dvs = result.resolved_data_version ?? dvs;\n }\n\n let schemas: unknown[] = [];\n let counts: Counts = { schemas: 0, tables: 0, views: 0, functions: 0 };\n if (result) {\n const built = await buildSchemas(iface, result.attach_opaque_data);\n schemas = built.schemas;\n counts = built.counts;\n }\n\n return {\n name,\n implementation_version: impl,\n data_version_spec: dvs,\n data_versions: dataVersions,\n attach_options: attachOptions,\n tags: catalogTags(result),\n counts,\n schemas,\n };\n}\n\nasync function catalogInfoByName(iface: CatalogInterface): Promise<Map<string, CatalogInfo>> {\n const map = new Map<string, CatalogInfo>();\n if (typeof iface.catalogsInfo === \"function\") {\n try {\n const infos = await iface.catalogsInfo();\n for (const info of infos) map.set(info.name, info);\n } catch {\n // fall back to bare names below\n }\n }\n return map;\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Build the full `describe.json` document for a worker's catalog interface.\n *\n * `oauth` and `serverId` are supplied by the HTTP server (they depend on runtime\n * config, not the catalog).\n */\nexport async function buildDescribeJson(\n iface: CatalogInterface,\n worker: WorkerDescribeInfo,\n opts: { oauth?: boolean; serverId?: string; cupolaBase?: string } = {},\n): Promise<Record<string, unknown>> {\n const infos = await catalogInfoByName(iface);\n let names: string[];\n try {\n names = iface.catalogs();\n } catch {\n names = [];\n }\n\n const catalogs: unknown[] = [];\n for (const name of names) {\n catalogs.push(await buildCatalog(iface, name, infos.get(name)));\n }\n\n return {\n landing_schema_version: LANDING_SCHEMA_VERSION,\n worker: {\n name: worker.name,\n doc: worker.doc ?? \"\",\n version: worker.version ?? \"unknown\",\n lang: \"typescript\",\n },\n server_id: opts.serverId ?? \"\",\n oauth: opts.oauth ?? false,\n cupola_base: opts.cupolaBase ?? CUPOLA_BASE,\n catalogs,\n };\n}\n\n/**\n * Build the lazy per-object column payload for one table or view.\n *\n * Returns `{ columns: [{ name, type, comment? }] }`, or `null` when the object\n * can't be found. Tables deserialize their Arrow column schema; views expose\n * their declared column comments (types are only known after binding the SQL,\n * which the worker does not do here).\n */\nexport async function buildColumnsJson(\n iface: CatalogInterface,\n catalog: string,\n schema: string,\n table: string,\n): Promise<{ columns: ColumnJson[] } | null> {\n const result = await attachCatalog(iface, catalog);\n if (!result) return null;\n const aod = result.attach_opaque_data;\n\n const tables = (await schemaContents(iface, aod, schema, \"TABLE\")) as TableInfo[];\n for (const t of tables) {\n if (t.name === table) {\n const arrow = readSchemaSafe(t.columns);\n return { columns: (arrow?.fields ?? []).map((f) => fieldToColumn(f)) };\n }\n }\n\n const views = (await schemaContents(iface, aod, schema, \"VIEW\")) as ViewInfo[];\n for (const v of views) {\n if (v.name === table) {\n return {\n columns: Object.entries(v.column_comments ?? {}).map(([name, comment]) => ({\n name,\n type: \"\",\n comment,\n })),\n };\n }\n }\n\n return null;\n}\n\n/**\n * Build a {@link LandingDescribeProvider} to pass to `createHttpHandler` from\n * `@query-farm/vgi-rpc`. Wires the worker's catalog interface into the\n * standardized landing surface (`GET {prefix}/describe.json` and the lazy\n * per-object column endpoint).\n */\nexport function createLandingDescribe(\n iface: CatalogInterface,\n worker: WorkerDescribeInfo,\n opts: { cupolaBase?: string } = {},\n): LandingDescribeProvider {\n return {\n describe: (ctx) => buildDescribeJson(iface, worker, { ...ctx, cupolaBase: opts.cupolaBase }),\n columns: (catalog, schema, table) => buildColumnsJson(iface, catalog, schema, table),\n };\n}\n",
|
|
76
76
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// SPDX-License-Identifier: LicenseRef-QueryFarm-Source-Available-1.0\n\n// Attach-time option descriptors for declarative worker option discovery.\n// Mirrors `vgi.catalog.attach_option` on the Python side — same Arrow IPC\n// wire format so the C++ extension (which owns ATTACH option validation)\n// sees identical shapes regardless of which language the worker is in.\n//\n// Wire format of one serialized AttachOptionSpec (per\n// vgi-python/vgi/catalog/attach_option.py):\n//\n// RecordBatch of:\n// name: Utf8\n// description: Utf8\n// type: Binary -- serialized Arrow Schema with a single \"value\" field\n// of the option's DataType\n// default_value: Binary nullable -- serialized single-row RecordBatch with\n// the default value under \"value\", or\n// null when no default is declared\n//\n// The extension reads the outer `attach_option_specs: list<binary>` column\n// from CatalogInfo and validates user-supplied ATTACH options against the\n// per-spec declared type before forwarding them to the worker.\n\nimport {\n type VgiDataType,\n schema as makeSchema,\n field,\n utf8,\n binary,\n batchFromColumns,\n serializeBatch,\n serializeSchema,\n} from \"../arrow/index.js\";\n\n/**\n * Declarative spec for a single attach-time option.\n *\n * The catalog's `catalogsInfo()` emits these (serialized) in\n * `CatalogInfo.attach_option_specs` so the DuckDB extension can validate\n * user-supplied ATTACH options and cast them to the declared type before\n * forwarding to the worker's `catalog_attach` handler.\n */\nexport interface AttachOptionSpec {\n /** Option name — matches the key users pass in the ATTACH statement. */\n name: string;\n /** Human-readable description (shown in discovery UIs). */\n description: string;\n /** Arrow data type the extension should cast user input to. */\n type: VgiDataType;\n /**\n * Default value used when the user omits this option. Passed through to\n * the worker's catalog_attach handler as-is if no override is given.\n * Use `null` for \"no default\" (an unset option will then be absent from\n * the options dict delivered to attach()).\n */\n default?: unknown;\n}\n\nconst SPEC_SCHEMA = makeSchema([\n field(\"name\", utf8(), false),\n field(\"description\", utf8(), false),\n field(\"type\", binary(), false),\n field(\"default_value\", binary(), true),\n]);\n\n/**\n * Serialize an AttachOptionSpec to the wire format the extension expects\n * (one IPC-serialized RecordBatch with a single row).\n */\nexport function serializeAttachOptionSpec(spec: AttachOptionSpec): Uint8Array {\n // `type` is encoded as a serialized Arrow Schema with one field named\n // \"value\" of the option's DataType. This lets the extension peek at the\n // logical type without a separate enum.\n const typeSchema = makeSchema([field(\"value\", spec.type, true)]);\n const typeBytes = serializeSchema(typeSchema);\n\n let defaultBytes: Uint8Array | null = null;\n if (spec.default !== undefined && spec.default !== null) {\n // Build a 1-row batch with one column \"value\" of the option's type.\n const defaultBatch = batchFromColumns(\n { value: [spec.default] },\n typeSchema,\n );\n defaultBytes = serializeBatch(defaultBatch);\n }\n\n const batch = batchFromColumns(\n {\n name: [spec.name],\n description: [spec.description],\n type: [typeBytes],\n default_value: [defaultBytes],\n },\n SPEC_SCHEMA,\n );\n return serializeBatch(batch);\n}\n\n/**\n * Convenience: serialize many specs at once for CatalogInfo.attach_option_specs.\n */\nexport function serializeAttachOptionSpecs(\n specs: Iterable<AttachOptionSpec>,\n): Uint8Array[] {\n return Array.from(specs, serializeAttachOptionSpec);\n}\n",
|
|
77
77
|
"// Type- and scope-aware selection over resolved secrets.\n//\n// Resolved secrets reach a worker as a plain object keyed by each secret's\n// unique DuckDB secret name (so several secrets of the same type — e.g. one per\n// S3 bucket — coexist). Each secret carries its connector-serialized `type` (the\n// DuckDB secret type) and `scope` (newline-joined scope prefixes) fields, plus\n// type-specific fields. These helpers mirror `vgi::Secrets` in the Rust SDK.\n\nexport type SecretFields = Record<string, any>;\nexport type SecretsDict = Record<string, SecretFields>;\n\nfunction scalarStr(v: any): string {\n if (v === null || v === undefined) return \"\";\n return typeof v === \"string\" ? v : String(v);\n}\n\n/** The DuckDB secret type of the named secret (its serialized `type` field). */\nexport function secretType(secrets: SecretsDict, name: string): string | undefined {\n const f = secrets?.[name];\n return f && \"type\" in f ? scalarStr(f.type) : undefined;\n}\n\n/** Every resolved secret whose serialized `type` field matches `type`. */\nexport function secretsOfType(secrets: SecretsDict, type: string): SecretFields[] {\n return Object.values(secrets ?? {}).filter((f) => scalarStr(f.type) === type);\n}\n\n/**\n * The secret whose `scope` is the longest prefix of `path`. The connector\n * serializes each secret's scope as a newline-joined list of prefixes; a secret\n * with no (or empty) scope matches as a last-resort fallback. Returns undefined\n * only when there are no candidate secrets.\n */\nexport function secretForScope(secrets: SecretsDict, path: string): SecretFields | undefined {\n return selectForScope(secrets, path, undefined);\n}\n\n/** Like {@link secretForScope} but only over secrets of `type`. */\nexport function secretForScopeOfType(\n secrets: SecretsDict,\n path: string,\n type: string,\n): SecretFields | undefined {\n return selectForScope(secrets, path, type);\n}\n\nfunction selectForScope(\n secrets: SecretsDict,\n path: string,\n type: string | undefined,\n): SecretFields | undefined {\n let best: SecretFields | undefined;\n let bestLen = -1;\n let fallback: SecretFields | undefined;\n for (const fields of Object.values(secrets ?? {})) {\n if (type !== undefined && scalarStr(fields.type) !== type) continue;\n const scope = scalarStr(fields.scope);\n if (!scope) {\n if (!fallback) fallback = fields;\n continue;\n }\n for (const prefix of scope.split(\"\\n\")) {\n if (prefix && path.startsWith(prefix) && prefix.length > bestLen) {\n bestLen = prefix.length;\n best = fields;\n }\n }\n }\n return best ?? fallback;\n}\n",
|
|
78
|
-
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// VGI TypeScript - Public API (runtime-agnostic core)\n//\n// Everything exported from the package EXCEPT the node-only `Worker` (which\n// imports the AF_UNIX launcher's `serveUnix` from @query-farm/vgi-rpc). This\n// module must stay free of static node-only value imports so it can be bundled\n// for Cloudflare Workers / browsers via worker-cf-entry.ts. The node/bun barrel\n// (`./index.ts`) re-exports this plus `Worker`.\n\n// Result-cache control vocabulary (`vgi.cache.*`)\nexport {\n CACHE_ETAG_KEY,\n CACHE_EXPIRES_KEY,\n CACHE_IF_MODIFIED_SINCE_KEY,\n CACHE_IF_NONE_MATCH_KEY,\n CACHE_LAST_MODIFIED_KEY,\n CACHE_NO_STORE_KEY,\n CACHE_NOT_MODIFIED_KEY,\n CACHE_REVALIDATABLE_KEY,\n CACHE_SCOPE_CATALOG,\n CACHE_SCOPE_KEY,\n CACHE_SCOPE_TRANSACTION,\n CACHE_STALE_IF_ERROR_KEY,\n CACHE_STALE_WHILE_REVALIDATE_KEY,\n CACHE_TTL_KEY,\n type CacheControl,\n cacheControlMetadata,\n type CacheScope,\n} from \"./cache-control.js\";\n\n// Function factories (primary API)\nexport { defineScalarFunction, type ScalarFunctionConfig, type ScalarBindParameters, type ScalarParameterDef } from \"./functions/scalar.js\";\nexport { defineTableFunction, type TableFunctionConfig, type TableBindParams, type TableProcessParams } from \"./functions/table.js\";\nexport {\n defineAggregate,\n GROUP_COLUMN_NAME,\n type AggregateFunctionConfig,\n type AggregateBindParams,\n type AggregateUpdateParams,\n type AggregateFinalizeParams,\n} from \"./functions/aggregate.js\";\nexport {\n defineTableInOutFunction,\n defineRowTransformFunction,\n parentRowsMetadata,\n PARENT_ROW_METADATA_KEY,\n type TableInOutConfig,\n type TableInOutBindParams,\n type TableInOutProcessParams,\n type RowTransformConfig,\n type RowTransformProcessParams,\n} from \"./functions/table-in-out.js\";\nexport {\n defineTableBufferingFunction,\n type TableBufferingConfig,\n type TableBufferingBindParams,\n type TableBufferingParams,\n type TableBufferingVgiFunction,\n} from \"./functions/table-buffering.js\";\nexport {\n defineCopyFromFunction,\n type CopyFromFunctionConfig,\n type CopyFromOption,\n type CopyFromReadParams,\n} from \"./functions/copy-from.js\";\nexport {\n defineCopyToFunction,\n type CopyToFunctionConfig,\n type CopyToOption,\n type CopyToWriteParams,\n type CopyToCloseParams,\n} from \"./functions/copy-to.js\";\n\n// Function types\nexport type { VgiFunction, FunctionMeta, StreamHandlers, FunctionExample, HandlerState } from \"./functions/types.js\";\n\n// Catalog\nexport { CatalogInterface, type CatalogAttachResult, type SchemaInfo, encodeSchemaInfo, decodeSchemaInfo, type TableInfo, encodeTableInfo, decodeTableInfo, type ViewInfo, encodeViewInfo, decodeViewInfo, type CatalogInfo, encodeCatalogInfo, decodeCatalogInfo, type FunctionInfo, encodeFunctionInfo, decodeFunctionInfo, type FunctionInfoOptions, type MacroInfo, encodeMacroInfo, decodeMacroInfo, type MacroType, type CopyFromFormatInfo, encodeCopyFromFormatInfo, type AttachOpaqueData, type TransactionOpaqueData, buildScanBranchesResult, type ScanBranchInput } from \"./catalog/interface.js\";\nexport type { CatalogDescriptor, SchemaDescriptor, TableDescriptor, ViewDescriptor, MacroDescriptor, SettingDescriptor, SecretTypeDescriptor, ForeignKeyDef, DefaultValue } from \"./catalog/descriptors.js\";\nexport { ReadOnlyCatalogInterface } from \"./catalog/read-only.js\";\nexport { CompositeCatalogInterface } from \"./catalog/composite.js\";\nexport { FunctionRegistry } from \"./functions/registry.js\";\n\n// Core types\nexport {\n FunctionType,\n FunctionStability,\n NullHandling,\n OrderPreservation,\n OrderDependence,\n DistinctDependence,\n TableInOutPhase,\n DEFAULT_MAX_WORKERS,\n} from \"./types.js\";\n\n// Protocol types\nexport type {\n BindRequest,\n BindResponse,\n CopyFromContext,\n CopyToContext,\n InitRequest,\n GlobalInitResponse,\n TableCardinality,\n} from \"./protocol/types.js\";\n\n// Arguments\nexport { Arguments } from \"./arguments/arguments.js\";\nexport { type ArgumentSpec, type ArgumentConstraints, argumentSpecsToSchema, schemaToArgumentSpecs, macroArgumentsSchema, macroParameterDocsFromSchema, formatRange, constraintSpecFields } from \"./arguments/argument-spec.js\";\n\n// Errors\nexport {\n VgiError,\n RowCountMismatchError,\n FunctionNotFoundError,\n CatalogReadOnlyError,\n CatalogNotFoundError,\n CatalogAlreadyExistsError,\n ArgumentValidationError,\n NoCatalogError,\n} from \"./errors.js\";\n\n// Metadata\nexport type { ResolvedMetadata, ParameterInfo } from \"./metadata/types.js\";\nexport { CatalogFunctionType } from \"./metadata/types.js\";\nexport { resolveMetadata } from \"./metadata/resolve.js\";\nexport { metadatasToArrow, arrowToMetadatas } from \"./metadata/serialize.js\";\n\n// Filter pushdown\nexport {\n PushdownFilters,\n FilteringOutputCollector,\n deserializeFilters,\n buildJoinKeysLookup,\n ComparisonOp,\n type Filter,\n type ConstantFilter,\n type IsNullFilter,\n type IsNotNullFilter,\n type InFilter,\n type AndFilter,\n type OrFilter,\n type StructFilter,\n formatPushedFilters,\n reprPushedFilters,\n} from \"./filter-pushdown/index.js\";\n\n// State serializer\nexport { arrowStateSerializer, EXCHANGE_STATE_SCHEMA, serializeUserState, deserializeUserState } from \"./protocol/state-serializer.js\";\n\n// Protocol assembly (for embedding the worker dispatcher in a custom HTTP server).\nexport { buildVgiProtocol, type ProtocolConfig } from \"./protocol/dispatch.js\";\n\n// VGI HTTP landing surface producer (describe.json contract). Pass\n// `createLandingDescribe(catalogInterface, workerInfo)` to `createHttpHandler`'s\n// `landingDescribe` option. See docs/http-landing-contract.md.\nexport {\n buildColumnsJson,\n buildDescribeJson,\n createLandingDescribe,\n CUPOLA_BASE,\n LANDING_SCHEMA_VERSION,\n type LandingDescribeProvider,\n type WorkerDescribeInfo,\n} from \"./http/describe-json.js\";\n\n// Wire schemas — needed by workers that synthesize TableInfo.bind_result /\n// TableInfo.scan_function bytes to short-circuit per-scan RPCs.\nexport { BindResultSchema, ScanFunctionResultSchema } from \"./generated/vgi-protocol-schemas.js\";\n\n// Attach-option specs (for catalogs that advertise typed ATTACH options).\nexport { type AttachOptionSpec, serializeAttachOptionSpec, serializeAttachOptionSpecs } from \"./catalog/attach-option.js\";\n\n// Column statistics (for inlining on TableInfo.column_statistics).\nexport { type ColumnStatistics, serializeColumnStatistics } from \"./util/statistics.js\";\n\n// Byte utilities\nexport { toUint8Array } from \"./util/bytes.js\";\n\n// Arrow utilities\nexport {\n iterRows,\n batchFromRows,\n batchFromColumns,\n emptyBatch,\n filterBatch,\n projectSchema,\n projectBatch,\n batchToScalarDict,\n batchToSecretDict,\n safeNumber,\n} from \"./util/arrow/index.js\";\n\nexport {\n type SecretFields,\n type SecretsDict,\n secretType,\n secretsOfType,\n secretForScope,\n secretForScopeOfType,\n} from \"./secrets/helpers.js\";\n\nexport {\n serializeSchema,\n deserializeSchema,\n serializeBatch,\n deserializeBatch,\n} from \"./util/arrow/index.js\";\n\n// Arrow type system (phase 3): typed factories, precise descriptors, the\n// rich/raw value mapping, the codec registry, and branded raw scalar types\n// with their validating constructors. This is the statically-typed author API.\n// NOTE: the arrow factory names `int`, `int32`, `float32`, `bool` are NOT\n// re-exported here because the package root already exports vgi-rpc argument\n// builders of the same names. Authors needing those specific arrow factories\n// (and the full typed factory set) import them from the arrow facade module\n// (`@query-farm/vgi` -> \"./src/arrow/index.js\"). The non-colliding and\n// unit-precise factories below cover the common phase-3 typed/raw-mode cases.\nexport {\n // typed type factories (non-colliding subset)\n schema, field,\n nullType,\n int8, int16, int64,\n uint8, uint16, uint32, uint64,\n float16, float64,\n utf8, binary, fixedSizeBinary,\n decimal, decimal128, decimal256,\n date, dateDay, dateMillisecond,\n time, timeSecond, timeMillisecond, timeMicrosecond, timeNanosecond,\n timestamp, duration, interval,\n timestampSeconds, timestampMillis, timestampMicros, timestampNanos,\n durationSeconds, durationMillis, durationMicros, durationNanos,\n list, fixedSizeList, struct, map,\n dictionary, union, sparseUnion, denseUnion,\n TimeUnit, DateUnit, IntervalUnit, UnionMode,\n // codec registry\n codecFor,\n // branded raw constructors / unwrappers\n asDate32, asDate64Ms,\n asTime32S, asTime32Ms, asTime64Us, asTime64Ns,\n asTimestampSeconds, asTimestampMillis, asTimestampMicros, asTimestampNanos,\n asDurationSeconds, asDurationMillis, asDurationMicros, asDurationNanos,\n asUnscaledDecimal, asInt64, asUint64,\n fromBranded, fromBrandedNumber, fromBrandedBigInt,\n // backend-agnostic predicates + ids\n TypeId,\n isNull, isInt, isFloat, isBinary, isUtf8, isBool, isDecimal, isDate,\n isTime, isTimestamp, isInterval, isList, isStruct, isUnion,\n isFixedSizeBinary, isFixedSizeList, isMap, isDuration, isDictionary, isBatch,\n readCanonicalValue, columnFromArray, decodeDictValue, backend,\n} from \"./arrow/index.js\";\n\nexport type {\n // backend-agnostic Arrow types\n VgiTypeId, VgiDataType, VgiField, VgiSchema, VgiColumn, VgiColumnData,\n VgiBatch, VgiBackendInfo, TaggedUnion,\n // precise nominal descriptors\n NullDescriptor, BoolType,\n IntType, Int8Type, Int16Type, Int32Type, Int64Type,\n Uint8Type, Uint16Type, Uint32Type, Uint64Type,\n FloatType, Utf8Type, LargeUtf8Type, BinaryType, LargeBinaryType,\n FixedSizeBinaryType, DecimalType,\n Date32Type, Date64Type, Time32Type, Time64Type,\n TimestampType, DurationType, IntervalType,\n ListType, FixedSizeListType, StructType, MapType, DictionaryType, UnionType,\n TypedField, TUnit,\n // rich/raw mapping\n RichValue, RawValue, ValueFor, Repr,\n // codec\n Codec,\n // branded scalar aliases\n Branded,\n Date32, Date64Ms,\n Time32S, Time32Ms, Time64Us, Time64Ns,\n TimestampSeconds, TimestampMillis, TimestampMicros, TimestampNanos,\n DurationSeconds, DurationMillis, DurationMicros, DurationNanos,\n UnscaledDecimal, Int64Raw, Uint64Raw,\n} from \"./arrow/index.js\";\n\n// Typed scalar compute helper types (phase 3).\nexport type { ScalarComputeRow, ScalarOutputValue, ScalarComputeResult } from \"./functions/scalar.js\";\n\n// Storage\nexport {\n type FunctionStorage,\n FunctionStorageSqlite,\n BoundStorage,\n UnknownInvocationError,\n resolveStorageFromEnv,\n setStorage,\n storage as functionStorage,\n} from \"./functions/storage.js\";\nexport { FunctionStorageCfDo, type FetchLike } from \"./functions/storage-cf-do.js\";\n\n// Client\nexport { VgiClient, VgiClientError } from \"./client/client.js\";\nexport type {\n VgiClientOptions,\n TableFunctionOptions,\n ScalarFunctionOptions,\n TableInOutFunctionOptions,\n OnCreateConflict,\n CatalogFunctionType as ClientCatalogFunctionType,\n CatalogAttachOptions,\n AttachOptionValue,\n} from \"./client/types.js\";\n\n// Re-export from vgi-rpc for convenience\nexport { str, bytes, int, int32, float, float32, bool, toSchema, OutputCollector, AuthContext } from \"@query-farm/vgi-rpc\";\nexport { subprocessConnect, httpConnect, tcpConnect } from \"@query-farm/vgi-rpc\";\nexport type { RpcClient, StreamSession, LogMessage } from \"@query-farm/vgi-rpc\";\n",
|
|
78
|
+
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// VGI TypeScript - Public API (runtime-agnostic core)\n//\n// Everything exported from the package EXCEPT the node-only `Worker` (which\n// imports the AF_UNIX launcher's `serveUnix` from @query-farm/vgi-rpc). This\n// module must stay free of static node-only value imports so it can be bundled\n// for Cloudflare Workers / browsers via worker-cf-entry.ts. The node/bun barrel\n// (`./index.ts`) re-exports this plus `Worker`.\n\n// Result-cache control vocabulary (`vgi.cache.*`)\nexport {\n CACHE_ETAG_KEY,\n CACHE_EXPIRES_KEY,\n CACHE_IF_MODIFIED_SINCE_KEY,\n CACHE_IF_NONE_MATCH_KEY,\n CACHE_LAST_MODIFIED_KEY,\n CACHE_NO_STORE_KEY,\n CACHE_NOT_MODIFIED_KEY,\n CACHE_PARTITION_SCOPE_KEY,\n CACHE_PER_VALUE_KEY,\n CACHE_REVALIDATABLE_KEY,\n CACHE_SCOPE_CATALOG,\n CACHE_SCOPE_KEY,\n CACHE_SCOPE_TRANSACTION,\n CACHE_STALE_IF_ERROR_KEY,\n CACHE_STALE_WHILE_REVALIDATE_KEY,\n CACHE_TTL_KEY,\n type CacheControl,\n cacheControlMetadata,\n type CacheScope,\n} from \"./cache-control.js\";\n\n// Function factories (primary API)\nexport { defineScalarFunction, type ScalarFunctionConfig, type ScalarBindParameters, type ScalarParameterDef } from \"./functions/scalar.js\";\nexport { defineTableFunction, type TableFunctionConfig, type TableBindParams, type TableProcessParams } from \"./functions/table.js\";\nexport {\n defineAggregate,\n GROUP_COLUMN_NAME,\n type AggregateFunctionConfig,\n type AggregateBindParams,\n type AggregateUpdateParams,\n type AggregateFinalizeParams,\n} from \"./functions/aggregate.js\";\nexport {\n defineTableInOutFunction,\n defineRowTransformFunction,\n parentRowsMetadata,\n PARENT_ROW_METADATA_KEY,\n type TableInOutConfig,\n type TableInOutBindParams,\n type TableInOutProcessParams,\n type RowTransformConfig,\n type RowTransformProcessParams,\n} from \"./functions/table-in-out.js\";\nexport {\n defineTableBufferingFunction,\n type TableBufferingConfig,\n type TableBufferingBindParams,\n type TableBufferingParams,\n type TableBufferingVgiFunction,\n} from \"./functions/table-buffering.js\";\nexport {\n defineCopyFromFunction,\n type CopyFromFunctionConfig,\n type CopyFromOption,\n type CopyFromReadParams,\n} from \"./functions/copy-from.js\";\nexport {\n defineCopyToFunction,\n type CopyToFunctionConfig,\n type CopyToOption,\n type CopyToWriteParams,\n type CopyToCloseParams,\n} from \"./functions/copy-to.js\";\n\n// Function types\nexport type { VgiFunction, FunctionMeta, StreamHandlers, FunctionExample, HandlerState } from \"./functions/types.js\";\n\n// Catalog\nexport { CatalogInterface, type CatalogAttachResult, type SchemaInfo, encodeSchemaInfo, decodeSchemaInfo, type TableInfo, encodeTableInfo, decodeTableInfo, type ViewInfo, encodeViewInfo, decodeViewInfo, type CatalogInfo, encodeCatalogInfo, decodeCatalogInfo, type FunctionInfo, encodeFunctionInfo, decodeFunctionInfo, type FunctionInfoOptions, type MacroInfo, encodeMacroInfo, decodeMacroInfo, type MacroType, type CopyFromFormatInfo, encodeCopyFromFormatInfo, type AttachOpaqueData, type TransactionOpaqueData, buildScanBranchesResult, type ScanBranchInput } from \"./catalog/interface.js\";\nexport type { CatalogDescriptor, SchemaDescriptor, TableDescriptor, ViewDescriptor, MacroDescriptor, SettingDescriptor, SecretTypeDescriptor, ForeignKeyDef, DefaultValue } from \"./catalog/descriptors.js\";\nexport { ReadOnlyCatalogInterface } from \"./catalog/read-only.js\";\nexport { CompositeCatalogInterface } from \"./catalog/composite.js\";\nexport { FunctionRegistry } from \"./functions/registry.js\";\n\n// Core types\nexport {\n FunctionType,\n FunctionStability,\n NullHandling,\n OrderPreservation,\n OrderDependence,\n DistinctDependence,\n TableInOutPhase,\n DEFAULT_MAX_WORKERS,\n} from \"./types.js\";\n\n// Protocol types\nexport type {\n BindRequest,\n BindResponse,\n CopyFromContext,\n CopyToContext,\n InitRequest,\n GlobalInitResponse,\n TableCardinality,\n} from \"./protocol/types.js\";\n\n// Arguments\nexport { Arguments } from \"./arguments/arguments.js\";\nexport { type ArgumentSpec, type ArgumentConstraints, argumentSpecsToSchema, schemaToArgumentSpecs, macroArgumentsSchema, macroParameterDocsFromSchema, formatRange, constraintSpecFields } from \"./arguments/argument-spec.js\";\n\n// Errors\nexport {\n VgiError,\n RowCountMismatchError,\n FunctionNotFoundError,\n CatalogReadOnlyError,\n CatalogNotFoundError,\n CatalogAlreadyExistsError,\n ArgumentValidationError,\n NoCatalogError,\n} from \"./errors.js\";\n\n// Metadata\nexport type { ResolvedMetadata, ParameterInfo } from \"./metadata/types.js\";\nexport { CatalogFunctionType } from \"./metadata/types.js\";\nexport { resolveMetadata } from \"./metadata/resolve.js\";\nexport { metadatasToArrow, arrowToMetadatas } from \"./metadata/serialize.js\";\n\n// Filter pushdown\nexport {\n PushdownFilters,\n FilteringOutputCollector,\n deserializeFilters,\n buildJoinKeysLookup,\n ComparisonOp,\n type Filter,\n type ConstantFilter,\n type IsNullFilter,\n type IsNotNullFilter,\n type InFilter,\n type AndFilter,\n type OrFilter,\n type StructFilter,\n formatPushedFilters,\n reprPushedFilters,\n} from \"./filter-pushdown/index.js\";\n\n// State serializer\nexport { arrowStateSerializer, EXCHANGE_STATE_SCHEMA, serializeUserState, deserializeUserState } from \"./protocol/state-serializer.js\";\n\n// Protocol assembly (for embedding the worker dispatcher in a custom HTTP server).\nexport { buildVgiProtocol, type ProtocolConfig } from \"./protocol/dispatch.js\";\n\n// VGI HTTP landing surface producer (describe.json contract). Pass\n// `createLandingDescribe(catalogInterface, workerInfo)` to `createHttpHandler`'s\n// `landingDescribe` option. See docs/http-landing-contract.md.\nexport {\n buildColumnsJson,\n buildDescribeJson,\n createLandingDescribe,\n CUPOLA_BASE,\n LANDING_SCHEMA_VERSION,\n type LandingDescribeProvider,\n type WorkerDescribeInfo,\n} from \"./http/describe-json.js\";\n\n// Wire schemas — needed by workers that synthesize TableInfo.bind_result /\n// TableInfo.scan_function bytes to short-circuit per-scan RPCs.\nexport { BindResultSchema, ScanFunctionResultSchema } from \"./generated/vgi-protocol-schemas.js\";\n\n// Attach-option specs (for catalogs that advertise typed ATTACH options).\nexport { type AttachOptionSpec, serializeAttachOptionSpec, serializeAttachOptionSpecs } from \"./catalog/attach-option.js\";\n\n// Column statistics (for inlining on TableInfo.column_statistics).\nexport { type ColumnStatistics, serializeColumnStatistics } from \"./util/statistics.js\";\n\n// Byte utilities\nexport { toUint8Array } from \"./util/bytes.js\";\n\n// Arrow utilities\nexport {\n iterRows,\n batchFromRows,\n batchFromColumns,\n emptyBatch,\n filterBatch,\n projectSchema,\n projectBatch,\n batchToScalarDict,\n batchToSecretDict,\n safeNumber,\n} from \"./util/arrow/index.js\";\n\nexport {\n type SecretFields,\n type SecretsDict,\n secretType,\n secretsOfType,\n secretForScope,\n secretForScopeOfType,\n} from \"./secrets/helpers.js\";\n\nexport {\n serializeSchema,\n deserializeSchema,\n serializeBatch,\n deserializeBatch,\n} from \"./util/arrow/index.js\";\n\n// Arrow type system (phase 3): typed factories, precise descriptors, the\n// rich/raw value mapping, the codec registry, and branded raw scalar types\n// with their validating constructors. This is the statically-typed author API.\n// NOTE: the arrow factory names `int`, `int32`, `float32`, `bool` are NOT\n// re-exported here because the package root already exports vgi-rpc argument\n// builders of the same names. Authors needing those specific arrow factories\n// (and the full typed factory set) import them from the arrow facade module\n// (`@query-farm/vgi` -> \"./src/arrow/index.js\"). The non-colliding and\n// unit-precise factories below cover the common phase-3 typed/raw-mode cases.\nexport {\n // typed type factories (non-colliding subset)\n schema, field,\n nullType,\n int8, int16, int64,\n uint8, uint16, uint32, uint64,\n float16, float64,\n utf8, binary, fixedSizeBinary,\n decimal, decimal128, decimal256,\n date, dateDay, dateMillisecond,\n time, timeSecond, timeMillisecond, timeMicrosecond, timeNanosecond,\n timestamp, duration, interval,\n timestampSeconds, timestampMillis, timestampMicros, timestampNanos,\n durationSeconds, durationMillis, durationMicros, durationNanos,\n list, fixedSizeList, struct, map,\n dictionary, union, sparseUnion, denseUnion,\n TimeUnit, DateUnit, IntervalUnit, UnionMode,\n // codec registry\n codecFor,\n // branded raw constructors / unwrappers\n asDate32, asDate64Ms,\n asTime32S, asTime32Ms, asTime64Us, asTime64Ns,\n asTimestampSeconds, asTimestampMillis, asTimestampMicros, asTimestampNanos,\n asDurationSeconds, asDurationMillis, asDurationMicros, asDurationNanos,\n asUnscaledDecimal, asInt64, asUint64,\n fromBranded, fromBrandedNumber, fromBrandedBigInt,\n // backend-agnostic predicates + ids\n TypeId,\n isNull, isInt, isFloat, isBinary, isUtf8, isBool, isDecimal, isDate,\n isTime, isTimestamp, isInterval, isList, isStruct, isUnion,\n isFixedSizeBinary, isFixedSizeList, isMap, isDuration, isDictionary, isBatch,\n typeSignature,\n readCanonicalValue, columnFromArray, decodeDictValue, backend,\n adoptArrowJsShape,\n} from \"./arrow/index.js\";\n\nexport type {\n // backend-agnostic Arrow types\n VgiTypeId, VgiDataType, VgiField, VgiSchema, VgiColumn, VgiColumnData,\n VgiBatch, VgiBackendInfo, TaggedUnion,\n // precise nominal descriptors\n NullDescriptor, BoolType,\n IntType, Int8Type, Int16Type, Int32Type, Int64Type,\n Uint8Type, Uint16Type, Uint32Type, Uint64Type,\n FloatType, Utf8Type, LargeUtf8Type, BinaryType, LargeBinaryType,\n FixedSizeBinaryType, DecimalType,\n Date32Type, Date64Type, Time32Type, Time64Type,\n TimestampType, DurationType, IntervalType,\n ListType, FixedSizeListType, StructType, MapType, DictionaryType, UnionType,\n TypedField, TUnit,\n // rich/raw mapping\n RichValue, RawValue, ValueFor, Repr,\n // codec\n Codec,\n // branded scalar aliases\n Branded,\n Date32, Date64Ms,\n Time32S, Time32Ms, Time64Us, Time64Ns,\n TimestampSeconds, TimestampMillis, TimestampMicros, TimestampNanos,\n DurationSeconds, DurationMillis, DurationMicros, DurationNanos,\n UnscaledDecimal, Int64Raw, Uint64Raw,\n} from \"./arrow/index.js\";\n\n// Typed scalar compute helper types (phase 3).\nexport type { ScalarComputeRow, ScalarOutputValue, ScalarComputeResult } from \"./functions/scalar.js\";\n\n// Storage\nexport {\n type FunctionStorage,\n FunctionStorageSqlite,\n BoundStorage,\n UnknownInvocationError,\n resolveStorageFromEnv,\n setStorage,\n storage as functionStorage,\n} from \"./functions/storage.js\";\nexport { FunctionStorageCfDo, type FetchLike } from \"./functions/storage-cf-do.js\";\n\n// Client\nexport { VgiClient, VgiClientError } from \"./client/client.js\";\nexport type {\n VgiClientOptions,\n TableFunctionOptions,\n ScalarFunctionOptions,\n TableInOutFunctionOptions,\n OnCreateConflict,\n CatalogFunctionType as ClientCatalogFunctionType,\n CatalogAttachOptions,\n AttachOptionValue,\n} from \"./client/types.js\";\n\n// Re-export from vgi-rpc for convenience\nexport { str, bytes, int, int32, float, float32, bool, toSchema, OutputCollector, AuthContext } from \"@query-farm/vgi-rpc\";\nexport { subprocessConnect, httpConnect, tcpConnect } from \"@query-farm/vgi-rpc\";\nexport type { RpcClient, StreamSession, LogMessage } from \"@query-farm/vgi-rpc\";\n",
|
|
79
79
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// VgiClient — high-level client for calling VGI worker functions and catalog API.\n// Works with any RpcClient (subprocess or HTTP transport).\n\nimport { type VgiSchema, schema as schema_, type VgiField, field, type VgiBatch, type VgiDataType, utf8, binary, list } from \"../arrow/index.js\";\nimport { type RpcClient, type StreamSession } from \"@query-farm/vgi-rpc\";\nimport {\n serializeBindRequest,\n deserializeBindResponse,\n serializeInitRequest,\n deserializeGlobalInitResponse,\n} from \"../protocol/serialize.js\";\nimport type {\n BindRequest,\n BindResponse,\n InitRequest,\n GlobalInitResponse,\n} from \"../protocol/types.js\";\nimport { FunctionType, TableInOutPhase } from \"../types.js\";\nimport { Arguments } from \"../arguments/arguments.js\";\nimport {\n batchFromRows,\n batchFromColumns,\n iterRows,\n} from \"../util/arrow/index.js\";\nimport {\n type SchemaInfo,\n decodeSchemaInfo,\n type TableInfo,\n decodeTableInfo,\n type ViewInfo,\n decodeViewInfo,\n type FunctionInfo,\n decodeFunctionInfo,\n type MacroInfo,\n decodeMacroInfo,\n type MacroType,\n type CatalogAttachResult,\n type AttachOpaqueData,\n type TransactionOpaqueData,\n decodeCatalogInfo,\n type CatalogInfo,\n type ScanFunctionResult,\n decodeScanFunctionResult,\n} from \"../catalog/interface.js\";\nimport { wrapRequest, unwrapResult } from \"./protocol.js\";\nimport { toUint8Array } from \"../util/bytes.js\";\nimport { serializeAttachOptions } from \"../catalog/attach-options.js\";\nimport { VgiClientError, wrapRpcWithErrorEnrichment } from \"./errors.js\";\nimport { deserializeInfoList, deserializeTags, toAsyncIterator } from \"./helpers.js\";\n\nexport { VgiClientError };\nimport type {\n VgiClientOptions,\n TableFunctionOptions,\n ScalarFunctionOptions,\n TableInOutFunctionOptions,\n OnCreateConflict,\n CatalogFunctionType,\n CatalogMacroType,\n CatalogAttachOptions,\n OrderByPushdown,\n TablesamplePushdown,\n AttachOptionValue,\n} from \"./types.js\";\n\n/**\n * High-level client for calling VGI worker functions and catalog API.\n *\n * Works with any RpcClient transport (subprocess or HTTP):\n * ```ts\n * import { subprocessConnect } from \"@query-farm/vgi-rpc\";\n * import { VgiClient, Arguments } from \"vgi\";\n *\n * const rpc = subprocessConnect([\"./my-worker\"]);\n * const client = new VgiClient(rpc);\n *\n * for await (const rows of client.tableFunctionRows({\n * functionName: \"sequence\",\n * arguments: new Arguments([10]),\n * })) {\n * console.log(rows);\n * }\n * client.close();\n * ```\n */\nexport class VgiClient {\n private readonly rpc: RpcClient;\n private readonly defaultAttachOpaqueData: Uint8Array | null;\n\n /**\n * Construct a VgiClient wrapping an `RpcClient` transport.\n *\n * `options.attachOpaqueData` sets a client-wide default attach ID used by every\n * function call that doesn't supply its own. Per-call `attachOpaqueData` on\n * `TableFunctionOptions`/`ScalarFunctionOptions`/`TableInOutFunctionOptions`\n * takes precedence — useful when a single client talks to multiple\n * attached catalogs.\n */\n constructor(rpc: RpcClient, options?: VgiClientOptions) {\n this.rpc = wrapRpcWithErrorEnrichment(rpc);\n this.defaultAttachOpaqueData = options?.attachOpaqueData ?? null;\n }\n\n // ==========================================================================\n // Private helpers\n // ==========================================================================\n\n private async _doBind(\n functionName: string,\n functionType: FunctionType,\n args: Arguments,\n inputSchema: VgiSchema | null,\n settings: VgiBatch | null,\n secrets: VgiBatch | null,\n transactionOpaqueData: Uint8Array | null,\n attachOpaqueData: Uint8Array | null = null,\n onBind?: ((response: BindResponse) => void) | null,\n ): Promise<{ request: BindRequest; response: BindResponse }> {\n const request: BindRequest = {\n function_name: functionName,\n arguments: args,\n function_type: functionType,\n input_schema: inputSchema,\n settings: settings ?? null,\n secrets: secrets ?? null,\n attach_opaque_data: attachOpaqueData ?? this.defaultAttachOpaqueData,\n transaction_opaque_data: transactionOpaqueData ?? null,\n resolved_secrets_provided: false,\n };\n\n const requestBatch = serializeBindRequest(request);\n const rpcResult = await this.rpc.call(\"bind\", wrapRequest(requestBatch));\n if (!rpcResult) throw new VgiClientError(\"bind returned null\");\n const inner = unwrapResult(rpcResult);\n const response = deserializeBindResponse(inner);\n if (onBind) onBind(response);\n return { request, response };\n }\n\n private async _doInit(\n bindRequest: BindRequest,\n bindResponse: BindResponse,\n opts?: {\n projectionIds?: number[] | null;\n pushdownFilters?: VgiBatch | null;\n phase?: TableInOutPhase | null;\n executionId?: Uint8Array | null;\n orderBy?: OrderByPushdown | null;\n tablesample?: TablesamplePushdown | null;\n joinKeys?: VgiBatch[] | null;\n },\n ): Promise<{ session: StreamSession; initResponse: GlobalInitResponse }> {\n const ob = opts?.orderBy ?? null;\n const ts = opts?.tablesample ?? null;\n const initRequest: InitRequest = {\n bind_call: bindRequest,\n output_schema: bindResponse.output_schema,\n bind_opaque_data: bindResponse.opaque_data,\n projection_ids: opts?.projectionIds ?? null,\n pushdown_filters: opts?.pushdownFilters ?? null,\n join_keys: opts?.joinKeys ?? [],\n phase: opts?.phase ?? null,\n finalize_state_id: null,\n order_by_column_name: ob?.columnName ?? null,\n order_by_direction: ob?.direction ?? null,\n order_by_null_order: ob?.nullOrder ?? null,\n order_by_limit: ob?.limit == null ? null : BigInt(ob.limit),\n tablesample_percentage: ts?.percentage ?? null,\n tablesample_seed: ts?.seed == null ? null : BigInt(ts.seed),\n execution_id: opts?.executionId ?? null,\n init_opaque_data: null,\n substream_id: null,\n };\n\n const initBatch = serializeInitRequest(initRequest);\n const session = await this.rpc.stream(\"init\", wrapRequest(initBatch));\n\n const headerDict = session.header;\n if (!headerDict) throw new VgiClientError(\"init did not return a header\");\n const initResponse = deserializeGlobalInitResponse(headerDict);\n\n return { session, initResponse };\n }\n\n // ==========================================================================\n // Table function — RecordBatch API\n // ==========================================================================\n\n /** Call a table function, yielding output as RecordBatch instances. */\n async *tableFunction(\n opts: TableFunctionOptions,\n ): AsyncGenerator<VgiBatch> {\n const args = opts.arguments ?? new Arguments();\n\n const { request: bindReq, response: bindResp } = await this._doBind(\n opts.functionName,\n FunctionType.TABLE,\n args,\n null,\n opts.settings ?? null,\n null,\n opts.transactionOpaqueData ?? null,\n opts.attachOpaqueData ?? null,\n opts.onBind ?? null,\n );\n\n const { session } = await this._doInit(bindReq, bindResp, {\n projectionIds: opts.projectionIds,\n pushdownFilters: opts.pushdownFilters,\n orderBy: opts.orderBy,\n tablesample: opts.tablesample,\n joinKeys: opts.joinKeys,\n });\n\n const outputSchema = bindResp.output_schema;\n try {\n for await (const rows of session) {\n if (rows.length > 0) {\n yield batchFromRows(rows, outputSchema);\n }\n }\n } finally {\n session.close();\n }\n }\n\n // ==========================================================================\n // Scalar function\n // ==========================================================================\n\n /** Call a scalar function, yielding output as row objects. */\n async *scalarFunctionRows(\n opts: ScalarFunctionOptions,\n ): AsyncGenerator<Record<string, any>[]> {\n // Peek first batch to get input schema\n const inputIter = toAsyncIterator(opts.input);\n const first = await inputIter.next();\n if (first.done) {\n throw new VgiClientError(\n `scalarFunction(${opts.functionName}): input iterator yielded no batches; ` +\n `at least one batch is required to determine the input schema`,\n );\n }\n\n const firstBatch: VgiBatch = first.value;\n const inputSchema = firstBatch.schema;\n\n const args = opts.arguments ?? new Arguments();\n\n const { request: bindReq, response: bindResp } = await this._doBind(\n opts.functionName,\n FunctionType.SCALAR,\n args,\n inputSchema,\n opts.settings ?? null,\n opts.secrets ?? null,\n opts.transactionOpaqueData ?? null,\n opts.attachOpaqueData ?? null,\n opts.onBind ?? null,\n );\n\n const { session } = await this._doInit(bindReq, bindResp);\n\n try {\n // Exchange first batch\n const outRows = await session.exchange([...iterRows(firstBatch)]);\n if (outRows.length > 0) yield outRows;\n\n // Exchange remaining batches\n for await (const batch of { [Symbol.asyncIterator]: () => inputIter }) {\n const result = await session.exchange([...iterRows(batch)]);\n if (result.length > 0) yield result;\n }\n } finally {\n session.close();\n }\n }\n\n /** Call a scalar function, yielding output as RecordBatch instances. */\n async *scalarFunction(\n opts: ScalarFunctionOptions,\n ): AsyncGenerator<VgiBatch> {\n // Same path as scalarFunctionRows, but with the output schema captured\n // here so we can pack rows back into batches without a re-bind.\n const inputIter = toAsyncIterator(opts.input);\n const first = await inputIter.next();\n if (first.done) {\n throw new VgiClientError(\n `scalarFunction(${opts.functionName}): input iterator yielded no batches; ` +\n `at least one batch is required to determine the input schema`,\n );\n }\n\n const firstBatch: VgiBatch = first.value;\n const inputSchema = firstBatch.schema;\n\n const args = opts.arguments ?? new Arguments();\n\n const { request: bindReq, response: bindResp } = await this._doBind(\n opts.functionName,\n FunctionType.SCALAR,\n args,\n inputSchema,\n opts.settings ?? null,\n opts.secrets ?? null,\n opts.transactionOpaqueData ?? null,\n opts.attachOpaqueData ?? null,\n opts.onBind ?? null,\n );\n\n const { session } = await this._doInit(bindReq, bindResp);\n const outputSchema = bindResp.output_schema;\n try {\n const outRows = await session.exchange([...iterRows(firstBatch)]);\n if (outRows.length > 0) yield batchFromRows(outRows, outputSchema);\n\n for await (const batch of { [Symbol.asyncIterator]: () => inputIter }) {\n const result = await session.exchange([...iterRows(batch)]);\n if (result.length > 0) yield batchFromRows(result, outputSchema);\n }\n } finally {\n session.close();\n }\n }\n\n // ==========================================================================\n // Table-in-out function\n // ==========================================================================\n\n /** Call a table-in-out function, yielding output as row objects. */\n async *tableInOutFunctionRows(\n opts: TableInOutFunctionOptions,\n ): AsyncGenerator<Record<string, any>[]> {\n const inputIter = toAsyncIterator(opts.input);\n const first = await inputIter.next();\n if (first.done) {\n throw new VgiClientError(\n `tableInOutFunction(${opts.functionName}): input iterator yielded no batches; ` +\n `at least one batch is required to determine the input schema`,\n );\n }\n\n const firstBatch: VgiBatch = first.value;\n const inputSchema = firstBatch.schema;\n\n const args = opts.arguments ?? new Arguments();\n\n const { request: bindReq, response: bindResp } = await this._doBind(\n opts.functionName,\n FunctionType.TABLE, // table-in-out uses TABLE function type at the bind level\n args,\n inputSchema,\n opts.settings ?? null,\n null,\n opts.transactionOpaqueData ?? null,\n opts.attachOpaqueData ?? null,\n opts.onBind ?? null,\n );\n\n // Phase 1: INPUT. We keep the init response around for its `execution_id`,\n // which we must echo back to pair the FINALIZE phase with this call.\n const { session: inputSession, initResponse } = await this._doInit(\n bindReq,\n bindResp,\n {\n projectionIds: opts.projectionIds,\n pushdownFilters: opts.pushdownFilters,\n phase: TableInOutPhase.INPUT,\n orderBy: opts.orderBy,\n tablesample: opts.tablesample,\n joinKeys: opts.joinKeys,\n },\n );\n\n try {\n const outRows = await inputSession.exchange([...iterRows(firstBatch)]);\n if (outRows.length > 0) yield outRows;\n\n for await (const batch of { [Symbol.asyncIterator]: () => inputIter }) {\n const result = await inputSession.exchange([...iterRows(batch)]);\n if (result.length > 0) yield result;\n }\n } finally {\n inputSession.close();\n }\n\n // Phase 2: FINALIZE\n const { session: finalizeSession } = await this._doInit(\n bindReq,\n bindResp,\n {\n projectionIds: opts.projectionIds,\n pushdownFilters: opts.pushdownFilters,\n phase: TableInOutPhase.FINALIZE,\n executionId: initResponse.execution_id,\n orderBy: opts.orderBy,\n tablesample: opts.tablesample,\n joinKeys: opts.joinKeys,\n },\n );\n\n try {\n for await (const rows of finalizeSession) {\n if (rows.length > 0) yield rows;\n }\n } finally {\n finalizeSession.close();\n }\n }\n\n /** Call a table-in-out function, yielding output as RecordBatch instances. */\n async *tableInOutFunction(\n opts: TableInOutFunctionOptions,\n ): AsyncGenerator<VgiBatch> {\n const inputIter = toAsyncIterator(opts.input);\n const first = await inputIter.next();\n if (first.done) {\n throw new VgiClientError(\n `tableInOutFunction(${opts.functionName}): input iterator yielded no batches; ` +\n `at least one batch is required to determine the input schema`,\n );\n }\n\n const firstBatch: VgiBatch = first.value;\n const inputSchema = firstBatch.schema;\n\n const args = opts.arguments ?? new Arguments();\n\n const { request: bindReq, response: bindResp } = await this._doBind(\n opts.functionName,\n FunctionType.TABLE,\n args,\n inputSchema,\n opts.settings ?? null,\n null,\n opts.transactionOpaqueData ?? null,\n opts.attachOpaqueData ?? null,\n opts.onBind ?? null,\n );\n\n const { session: inputSession, initResponse } = await this._doInit(\n bindReq,\n bindResp,\n {\n projectionIds: opts.projectionIds,\n pushdownFilters: opts.pushdownFilters,\n phase: TableInOutPhase.INPUT,\n orderBy: opts.orderBy,\n tablesample: opts.tablesample,\n joinKeys: opts.joinKeys,\n },\n );\n\n const outputSchema = bindResp.output_schema;\n try {\n const outRows = await inputSession.exchange([...iterRows(firstBatch)]);\n if (outRows.length > 0) yield batchFromRows(outRows, outputSchema);\n\n for await (const batch of { [Symbol.asyncIterator]: () => inputIter }) {\n const result = await inputSession.exchange([...iterRows(batch)]);\n if (result.length > 0) yield batchFromRows(result, outputSchema);\n }\n } finally {\n inputSession.close();\n }\n\n const { session: finalizeSession } = await this._doInit(\n bindReq,\n bindResp,\n {\n projectionIds: opts.projectionIds,\n pushdownFilters: opts.pushdownFilters,\n phase: TableInOutPhase.FINALIZE,\n executionId: initResponse.execution_id,\n orderBy: opts.orderBy,\n tablesample: opts.tablesample,\n joinKeys: opts.joinKeys,\n },\n );\n\n try {\n for await (const rows of finalizeSession) {\n if (rows.length > 0) yield batchFromRows(rows, outputSchema);\n }\n } finally {\n finalizeSession.close();\n }\n }\n\n // ==========================================================================\n // Row convenience for table function\n // ==========================================================================\n\n /** Call a table function, yielding output as row objects. */\n async *tableFunctionRows(\n opts: TableFunctionOptions,\n ): AsyncGenerator<Record<string, any>[]> {\n const args = opts.arguments ?? new Arguments();\n const { request: bindReq, response: bindResp } = await this._doBind(\n opts.functionName,\n FunctionType.TABLE,\n args,\n null,\n opts.settings ?? null,\n null,\n opts.transactionOpaqueData ?? null,\n opts.attachOpaqueData ?? null,\n opts.onBind ?? null,\n );\n const { session } = await this._doInit(bindReq, bindResp, {\n projectionIds: opts.projectionIds,\n pushdownFilters: opts.pushdownFilters,\n orderBy: opts.orderBy,\n tablesample: opts.tablesample,\n joinKeys: opts.joinKeys,\n });\n try {\n for await (const rows of session) {\n if (rows.length > 0) yield rows;\n }\n } finally {\n session.close();\n }\n }\n\n // ==========================================================================\n // Catalog API\n // ==========================================================================\n\n /**\n * List all catalogs with their advertised version metadata.\n *\n * Each entry has `{name, implementation_version?, data_version_spec?}`.\n * Versioned workers populate the version fields; read-only workers\n * leave both null.\n */\n async catalogsInfo(): Promise<CatalogInfo[]> {\n const result = await this.rpc.call(\"catalog_catalogs\", {});\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeCatalogInfo);\n }\n\n /** List all available catalog names (shorthand for `catalogsInfo().map(c => c.name)`). */\n async catalogs(): Promise<string[]> {\n const infos = await this.catalogsInfo();\n return infos.map((i) => i.name);\n }\n\n /**\n * Attach a catalog by name. Returns connection details including the\n * attachOpaqueData.\n *\n * `opts.options` is a plain key→value map; column types are inferred from\n * the value at runtime (see AttachOptionValue for the mapping). Use\n * `opts.optionsBytes` instead when you need Arrow types the inference\n * can't express (Decimal, Timestamp, Int32 vs Int64, nested structs).\n * Providing both throws.\n *\n * Versioned catalogs (see vgi-example-versioned-worker) validate\n * `dataVersionSpec` / `implementationVersion` at attach time and echo\n * back the resolved values on the result — callers can read those from\n * `result.resolved_data_version` / `result.resolved_implementation_version`.\n *\n * @example\n * ```ts\n * const result = await client.catalogAttach(\"my_catalog\", {\n * options: { region: \"us-east-1\", maxCachedRows: 1000n, readOnly: true },\n * dataVersionSpec: \"1.0.0\",\n * });\n * ```\n */\n async catalogAttach(\n name: string,\n opts?: CatalogAttachOptions,\n ): Promise<CatalogAttachResult> {\n if (opts?.options != null && opts?.optionsBytes != null) {\n throw new VgiClientError(\n \"catalogAttach: cannot specify both `options` and `optionsBytes`\",\n );\n }\n let wireOptions: Uint8Array | null;\n if (opts?.optionsBytes != null) {\n // Escape hatch: raw pre-serialized bytes. Same zero-byte guard as\n // before — pyarrow's IPC reader rejects 0-byte input on a non-null\n // binary field.\n wireOptions = opts.optionsBytes.byteLength === 0 ? null : opts.optionsBytes;\n } else {\n wireOptions = serializeAttachOptions(opts?.options);\n }\n\n const schema = schema_([\n field(\"name\", utf8(), false),\n field(\"options\", binary(), true),\n field(\"data_version_spec\", utf8(), true),\n field(\"implementation_version\", utf8(), true),\n ]);\n const innerBatch = batchFromColumns(\n {\n name: [name],\n options: [wireOptions],\n data_version_spec: [opts?.dataVersionSpec ?? null],\n implementation_version: [opts?.implementationVersion ?? null],\n },\n schema,\n );\n const result = await this.rpc.call(\"catalog_attach\", wrapRequest(innerBatch));\n if (!result) throw new VgiClientError(\"catalog_attach returned null\");\n const inner = unwrapResult(result);\n return {\n attach_opaque_data: toUint8Array(inner.attach_opaque_data),\n supports_transactions: inner.supports_transactions ?? false,\n supports_time_travel: inner.supports_time_travel ?? false,\n catalog_version_frozen: inner.catalog_version_frozen ?? false,\n catalog_version: Number(inner.catalog_version ?? 0),\n attach_opaque_data_required: inner.attach_opaque_data_required ?? true,\n default_schema: inner.default_schema ?? \"main\",\n settings: inner.settings\n ? (Array.isArray(inner.settings) ? inner.settings : [...inner.settings]).map(toUint8Array)\n : [],\n secret_types: inner.secret_types\n ? (Array.isArray(inner.secret_types) ? inner.secret_types : [...inner.secret_types]).map(toUint8Array)\n : [],\n attach_catalogs: inner.attach_catalogs\n ? (Array.isArray(inner.attach_catalogs) ? inner.attach_catalogs : [...inner.attach_catalogs]).map(toUint8Array)\n : [],\n comment: inner.comment ?? null,\n tags: deserializeTags(inner.tags),\n supports_column_statistics: inner.supports_column_statistics ?? false,\n resolved_data_version: inner.resolved_data_version ?? null,\n resolved_implementation_version: inner.resolved_implementation_version ?? null,\n };\n }\n\n /** Detach a previously-attached catalog. */\n async catalogDetach(attachOpaqueData: AttachOpaqueData): Promise<void> {\n await this.rpc.call(\"catalog_detach\", { attach_opaque_data: attachOpaqueData });\n }\n\n /**\n * Create a new catalog.\n *\n * `options` is a plain key→value map; column types are inferred from the\n * value at runtime (see AttachOptionValue). Use `optionsBytes` instead\n * when you need Arrow types the inference can't express. Providing both\n * throws.\n */\n async catalogCreate(\n name: string,\n onConflict: OnCreateConflict,\n options?:\n | Uint8Array\n | { options?: Record<string, AttachOptionValue>; optionsBytes?: Uint8Array },\n ): Promise<void> {\n let wireOptions: Uint8Array | null;\n if (options == null) {\n wireOptions = null;\n } else if (options instanceof Uint8Array) {\n // Backwards-compatible escape hatch: caller pre-serialized the options batch.\n wireOptions = options.byteLength === 0 ? null : options;\n } else {\n if (options.options != null && options.optionsBytes != null) {\n throw new VgiClientError(\n \"catalogCreate: cannot specify both `options` and `optionsBytes`\",\n );\n }\n if (options.optionsBytes != null) {\n wireOptions = options.optionsBytes.byteLength === 0 ? null : options.optionsBytes;\n } else {\n wireOptions = serializeAttachOptions(options.options);\n }\n }\n await this.rpc.call(\"catalog_create\", {\n name,\n on_conflict: onConflict,\n options: wireOptions,\n });\n }\n\n /** Drop a catalog by name. */\n async catalogDrop(name: string): Promise<void> {\n await this.rpc.call(\"catalog_drop\", { name });\n }\n\n /** Get the current catalog version number. */\n async catalogVersion(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<number> {\n const result = await this.rpc.call(\"catalog_version\", {\n attach_opaque_data: attachOpaqueData,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) throw new VgiClientError(\"catalog_version returned null\");\n const inner = unwrapResult(result);\n return Number(inner.version ?? 0);\n }\n\n /** Begin a new transaction. Returns the transaction ID. */\n async transactionBegin(attachOpaqueData: AttachOpaqueData): Promise<Uint8Array> {\n const result = await this.rpc.call(\"catalog_transaction_begin\", {\n attach_opaque_data: attachOpaqueData,\n });\n if (!result) throw new VgiClientError(\"transaction_begin returned null\");\n const inner = unwrapResult(result);\n if (!inner.transaction_opaque_data) {\n throw new VgiClientError(\"transaction_begin returned no transaction_opaque_data\");\n }\n return toUint8Array(inner.transaction_opaque_data);\n }\n\n /** Commit a transaction. */\n async transactionCommit(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_transaction_commit\", {\n attach_opaque_data: attachOpaqueData,\n transaction_opaque_data: transactionOpaqueData,\n });\n }\n\n /** Rollback a transaction. */\n async transactionRollback(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_transaction_rollback\", {\n attach_opaque_data: attachOpaqueData,\n transaction_opaque_data: transactionOpaqueData,\n });\n }\n\n /** List schemas in an attached catalog. */\n async schemas(\n attachOpaqueData: AttachOpaqueData,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<SchemaInfo[]> {\n const result = await this.rpc.call(\"catalog_schemas\", {\n attach_opaque_data: attachOpaqueData,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeSchemaInfo);\n }\n\n /** Get a schema by name, or null if not found. */\n async schemaGet(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<SchemaInfo | null> {\n const result = await this.rpc.call(\"catalog_schema_get\", {\n attach_opaque_data: attachOpaqueData,\n name,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return null;\n const inner = unwrapResult(result);\n const items = deserializeInfoList(inner.items, decodeSchemaInfo);\n return items.length > 0 ? items[0] : null;\n }\n\n /** Create a new schema. */\n async schemaCreate(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n opts?: {\n onConflict?: OnCreateConflict;\n comment?: string | null;\n tags?: Record<string, string> | null;\n transactionOpaqueData?: TransactionOpaqueData;\n },\n ): Promise<void> {\n const tagsMap = opts?.tags\n ? new Map(Object.entries(opts.tags))\n : null;\n await this.rpc.call(\"catalog_schema_create\", {\n attach_opaque_data: attachOpaqueData,\n name,\n on_conflict: opts?.onConflict ?? \"error\",\n comment: opts?.comment ?? null,\n tags: tagsMap,\n transaction_opaque_data: opts?.transactionOpaqueData ?? null,\n });\n }\n\n /** Drop a schema by name. */\n async schemaDrop(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n ignoreNotFound?: boolean,\n cascade?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_schema_drop\", {\n attach_opaque_data: attachOpaqueData,\n name,\n ignore_not_found: ignoreNotFound ?? false,\n cascade: cascade ?? false,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** List tables in a schema. */\n async schemaContentsTables(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<TableInfo[]> {\n const result = await this.rpc.call(\"catalog_schema_contents_tables\", {\n attach_opaque_data: attachOpaqueData,\n name,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeTableInfo);\n }\n\n /** List views in a schema. */\n async schemaContentsViews(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<ViewInfo[]> {\n const result = await this.rpc.call(\"catalog_schema_contents_views\", {\n attach_opaque_data: attachOpaqueData,\n name,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeViewInfo);\n }\n\n /** List functions in a schema, filtered by type. */\n async schemaContentsFunctions(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n type: CatalogFunctionType,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<FunctionInfo[]> {\n const result = await this.rpc.call(\"catalog_schema_contents_functions\", {\n attach_opaque_data: attachOpaqueData,\n name,\n type,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeFunctionInfo);\n }\n\n /** Get a table by name, or null if not found. */\n async tableGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<TableInfo | null> {\n const result = await this.rpc.call(\"catalog_table_get\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return null;\n const inner = unwrapResult(result);\n const items = deserializeInfoList(inner.items, decodeTableInfo);\n return items.length > 0 ? items[0] : null;\n }\n\n /** Create a new table. */\n async tableCreate(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columns: Uint8Array,\n onConflict: OnCreateConflict,\n notNullConstraints?: number[],\n uniqueConstraints?: number[][],\n checkConstraints?: string[],\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_create\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n columns,\n on_conflict: onConflict,\n not_null_constraints: notNullConstraints ?? null,\n unique_constraints: uniqueConstraints ?? null,\n check_constraints: checkConstraints ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Drop a table by name. */\n async tableDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n ignoreNotFound?: boolean,\n cascade?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_drop\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n ignore_not_found: ignoreNotFound ?? false,\n cascade: cascade ?? false,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /**\n * Get the scan function for a table — tells DuckDB which function to call\n * to read the table data (e.g. `read_parquet` with a path argument). Used\n * by the VGI extension during query planning.\n */\n async tableScanFunctionGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n atUnit?: string | null,\n atValue?: string | null,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<ScanFunctionResult> {\n const result = await this.rpc.call(\"catalog_table_scan_function_get\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n at_unit: atUnit ?? null,\n at_value: atValue ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) throw new VgiClientError(\"table_scan_function_get returned null\");\n return decodeScanFunctionResult(unwrapResult(result));\n }\n\n /** Set or clear the comment on a table. */\n async tableCommentSet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n comment?: string | null,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_comment_set\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n comment: comment ?? null,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Rename a table. */\n async tableRename(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n newName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_rename\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n new_name: newName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Add a column to a table. */\n async tableColumnAdd(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n columnType: string,\n defaultValue?: string | null,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_column_add\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n column_name: columnName,\n column_type: columnType,\n default_value: defaultValue ?? null,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Drop a column from a table. */\n async tableColumnDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_column_drop\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n column_name: columnName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Rename a column in a table. */\n async tableColumnRename(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n newName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_column_rename\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n column_name: columnName,\n new_name: newName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Set the default value for a column. */\n async tableColumnDefaultSet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n defaultValue: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_column_default_set\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n column_name: columnName,\n default_value: defaultValue,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Remove the default value from a column. */\n async tableColumnDefaultDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_column_default_drop\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n column_name: columnName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /**\n * Change the type of a column.\n *\n * `columnDefinition` is a serialized Arrow Schema with a single field whose\n * name identifies the target column and whose type is the new column type.\n * `expression` is an optional SQL expression used to convert existing values.\n */\n async tableColumnTypeChange(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnDefinition: Uint8Array,\n expression?: string | null,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_column_type_change\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n column_definition: columnDefinition,\n expression: expression ?? null,\n ignore_not_found: ignoreNotFound ?? false,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Set a NOT NULL constraint on a column. */\n async tableNotNullSet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_not_null_set\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n column_name: columnName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Remove a NOT NULL constraint from a column. */\n async tableNotNullDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n columnName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_table_not_null_drop\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n column_name: columnName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Get a view by name, or null if not found. */\n async viewGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<ViewInfo | null> {\n const result = await this.rpc.call(\"catalog_view_get\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return null;\n const inner = unwrapResult(result);\n const items = deserializeInfoList(inner.items, decodeViewInfo);\n return items.length > 0 ? items[0] : null;\n }\n\n /** Create a new view. */\n async viewCreate(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n definition: string,\n onConflict: OnCreateConflict,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_view_create\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n definition,\n on_conflict: onConflict,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Drop a view by name. */\n async viewDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n ignoreNotFound?: boolean,\n cascade?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_view_drop\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n ignore_not_found: ignoreNotFound ?? false,\n cascade: cascade ?? false,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Rename a view. */\n async viewRename(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n newName: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_view_rename\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n new_name: newName,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Set or clear the comment on a view. */\n async viewCommentSet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n comment?: string | null,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_view_comment_set\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n comment: comment ?? null,\n ignore_not_found: ignoreNotFound ?? null,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n // ==========================================================================\n // Macro Catalog API\n // ==========================================================================\n\n /** Get a macro by name, or null if not found. */\n async macroGet(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<MacroInfo | null> {\n const result = await this.rpc.call(\"catalog_macro_get\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return null;\n const inner = unwrapResult(result);\n const items = deserializeInfoList(inner.items, decodeMacroInfo);\n return items.length > 0 ? items[0] : null;\n }\n\n /** List macros in a schema, filtered by type. */\n async schemaContentsMacros(\n attachOpaqueData: AttachOpaqueData,\n name: string,\n type: CatalogMacroType,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<MacroInfo[]> {\n const result = await this.rpc.call(\"catalog_schema_contents_macros\", {\n attach_opaque_data: attachOpaqueData,\n name,\n type,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n if (!result) return [];\n const inner = unwrapResult(result);\n return deserializeInfoList(inner.items, decodeMacroInfo);\n }\n\n /** Create a new macro. */\n async macroCreate(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n macroType: MacroType,\n parameters: string[],\n definition: string,\n onConflict: OnCreateConflict,\n parameterDefaultValues?: Uint8Array | null,\n argumentsSchema?: Uint8Array | null,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n const schema = schema_([\n field(\"attach_opaque_data\", binary(), true),\n field(\"schema_name\", utf8(), false),\n field(\"name\", utf8(), false),\n field(\"macro_type\", utf8(), false),\n field(\"parameters\", list(field(\"item\", utf8(), false)), false),\n field(\"definition\", utf8(), false),\n field(\"on_conflict\", utf8(), false),\n field(\"parameter_default_values\", binary(), true),\n field(\"arguments_schema\", binary(), true),\n field(\"transaction_opaque_data\", binary(), true),\n ]);\n const innerBatch = batchFromColumns(\n {\n attach_opaque_data: [attachOpaqueData],\n schema_name: [schemaName],\n name: [name],\n macro_type: [macroType],\n parameters: [parameters],\n definition: [definition],\n on_conflict: [onConflict],\n parameter_default_values: [parameterDefaultValues ?? null],\n arguments_schema: [argumentsSchema ?? null],\n transaction_opaque_data: [transactionOpaqueData ?? null],\n },\n schema,\n );\n await this.rpc.call(\"catalog_macro_create\", wrapRequest(innerBatch));\n }\n\n /** Drop a macro by name. */\n async macroDrop(\n attachOpaqueData: AttachOpaqueData,\n schemaName: string,\n name: string,\n ignoreNotFound?: boolean,\n transactionOpaqueData?: TransactionOpaqueData,\n ): Promise<void> {\n await this.rpc.call(\"catalog_macro_drop\", {\n attach_opaque_data: attachOpaqueData,\n schema_name: schemaName,\n name,\n ignore_not_found: ignoreNotFound ?? false,\n transaction_opaque_data: transactionOpaqueData ?? null,\n });\n }\n\n /** Close the underlying RPC connection. */\n close(): void {\n this.rpc.close();\n }\n}\n\n",
|
|
80
80
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Wrap/unwrap helpers for the VGI double-wrapping protocol.\n// Mirrors the server's dispatch.ts:64-84 (unwrapRequest/wrapResult).\n\nimport {\n serializeBatch,\n deserializeBatch,\n batchToScalarDict,\n} from \"../util/arrow/index.js\";\nimport { toUint8Array } from \"../util/bytes.js\";\nimport type { VgiBatch } from \"../arrow/index.js\";\nexport { toUint8Array };\n\n/**\n * Wrap a RecordBatch as a { request: Uint8Array } dict for RPC params.\n * DuckDB wraps ArrowSerializableDataclass params in a single \"request\" Binary column.\n */\nexport function wrapRequest(batch: VgiBatch): { request: Uint8Array } {\n return { request: serializeBatch(batch) };\n}\n\n/**\n * Unwrap a { result: Uint8Array } response dict.\n * The \"result\" Binary column contains a serialized inner batch;\n * returns its row 0 as a flat dict.\n */\nexport function unwrapResult(\n result: Record<string, any>,\n): Record<string, any> {\n const resultBytes = toUint8Array(result.result);\n const innerBatch = deserializeBatch(resultBytes);\n return batchToScalarDict(innerBatch);\n}\n",
|
|
81
81
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// SPDX-License-Identifier: LicenseRef-QueryFarm-Source-Available-1.0\n\n// Serialize a plain JS options map into a single-row Arrow RecordBatch\n// suitable for the `options` field of CatalogAttachRequest. Column types\n// are inferred per-value. This is the ergonomic layer that lets callers\n// write `{ region: \"us-east-1\", maxRows: 1000n }` instead of hand-building\n// an Arrow batch.\n\nimport { type VgiDataType, bool, binary, type VgiField, field, float64, int64, nullType, type VgiSchema, schema as schema_, utf8 } from \"../arrow/index.js\";\nimport { batchFromColumns, serializeBatch } from \"../util/arrow/index.js\";\n\n/**\n * Values supported in a CatalogAttach options map. The client infers an\n * Arrow type per value:\n *\n * string → Utf8\n * bigint → Int64\n * number → Float64 (JS numbers are doubles — safe for small ints too)\n * boolean → Bool\n * Uint8Array → Binary\n * null → Null (column with no concrete type; value is null)\n *\n * If you need types this can't express (Decimal, Timestamp, Int32 vs Int64,\n * nested structs), drop down to `optionsBytes` on CatalogAttachOptions and\n * build the RecordBatch yourself.\n */\nexport type AttachOptionValue = string | number | bigint | boolean | null | Uint8Array;\n\n/**\n * Infer an Arrow DataType for a single JS value. Exported for tests; not\n * part of the stable public API.\n */\nexport function inferAttachOptionArrowType(value: AttachOptionValue): VgiDataType {\n if (value === null) return nullType();\n if (typeof value === \"string\") return utf8();\n if (typeof value === \"bigint\") return int64();\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new TypeError(\n `Attach option number values must be finite (got ${value}). ` +\n `Use a bigint for integers or a finite number for floats.`,\n );\n }\n return float64();\n }\n if (typeof value === \"boolean\") return bool();\n if (value instanceof Uint8Array) return binary();\n throw new TypeError(\n `Unsupported attach option value type: ${typeof value}. ` +\n `Supported: string, number, bigint, boolean, null, Uint8Array.`,\n );\n}\n\n/**\n * Serialize a plain key→value options map to an Arrow IPC RecordBatch.\n *\n * Returns `null` when the map is empty or has no entries — the wire layer\n * then sends a null options field rather than a zero-column batch (which\n * pyarrow's IPC reader rejects).\n */\nexport function serializeAttachOptions(\n options: Record<string, AttachOptionValue> | undefined | null,\n): Uint8Array | null {\n if (!options) return null;\n const entries = Object.entries(options);\n if (entries.length === 0) return null;\n\n const fields: VgiField[] = [];\n const columns: Record<string, unknown[]> = {};\n for (const [key, value] of entries) {\n const type = inferAttachOptionArrowType(value);\n fields.push(field(key, type, true));\n columns[key] = [value];\n }\n const schema = schema_(fields);\n const batch = batchFromColumns(columns, schema);\n return serializeBatch(batch);\n}\n",
|
|
82
82
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// VgiClient error class + RpcClient wrapper that translates RpcError into\n// VgiClientError, preserving the worker's remote traceback.\n\nimport { RpcError, type RpcClient } from \"@query-farm/vgi-rpc\";\n\n/** Error thrown by VgiClient when an RPC call fails or returns unexpected data. */\nexport class VgiClientError extends Error {\n /** Remote traceback from the worker, when an RpcError carried one. */\n readonly remoteTraceback?: string;\n /** Underlying error type from the worker (e.g. \"ValueError\"), when known. */\n readonly errorType?: string;\n\n constructor(\n message: string,\n options?: { remoteTraceback?: string; errorType?: string; cause?: unknown },\n ) {\n super(message, options?.cause != null ? { cause: options.cause } : undefined);\n this.name = \"VgiClientError\";\n if (options?.remoteTraceback) this.remoteTraceback = options.remoteTraceback;\n if (options?.errorType) this.errorType = options.errorType;\n }\n\n /**\n * Build a VgiClientError from an underlying RpcError, preserving the\n * remote error type, message, and traceback so the worker-raised exception\n * shows up at the top of the stack rather than buried under VGI framing.\n * Mirrors Python's ClientError.from_rpc_error.\n */\n static fromRpcError(e: RpcError): VgiClientError {\n const head = `${e.errorType}: ${e.errorMessage}`;\n const message = e.remoteTraceback\n ? `${head}\\n\\nRemote traceback:\\n${e.remoteTraceback}`\n : head;\n return new VgiClientError(message, {\n remoteTraceback: e.remoteTraceback || undefined,\n errorType: e.errorType,\n cause: e,\n });\n }\n}\n\n/**\n * Wrap an RpcClient so any RpcError thrown by call/stream is rethrown as a\n * VgiClientError carrying the worker's remote traceback. Other errors\n * propagate unchanged.\n */\nexport function wrapRpcWithErrorEnrichment(rpc: RpcClient): RpcClient {\n return {\n async call(method, params) {\n try {\n return await rpc.call(method, params);\n } catch (e) {\n if (e instanceof RpcError) throw VgiClientError.fromRpcError(e);\n throw e;\n }\n },\n async stream(method, params) {\n try {\n return await rpc.stream(method, params);\n } catch (e) {\n if (e instanceof RpcError) throw VgiClientError.fromRpcError(e);\n throw e;\n }\n },\n describe: () => rpc.describe(),\n close: () => rpc.close(),\n };\n}\n",
|
|
83
83
|
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// Internal helpers shared by VgiClient methods.\n\nimport { toUint8Array } from \"../util/bytes.js\";\n\n/**\n * Deserialize a List<Binary> of serialized info batches into typed info objects.\n */\nexport function deserializeInfoList<T>(\n items: unknown,\n deserializeFn: (bytes: Uint8Array) => T,\n): T[] {\n if (!items) return [];\n const arr: unknown[] = Array.isArray(items)\n ? items\n : [...(items as Iterable<unknown>)];\n return arr\n .filter((b) => b != null)\n .map((b) => deserializeFn(toUint8Array(b)));\n}\n\n/**\n * Deserialize Arrow Map entries into a plain Record<string, string>.\n */\nexport function deserializeTags(mapVal: unknown): Record<string, string> {\n const tags: Record<string, string> = {};\n if (!mapVal) return tags;\n const iterable = mapVal as { [Symbol.iterator]?: () => Iterator<unknown> };\n if (typeof iterable[Symbol.iterator] !== \"function\") return tags;\n for (const entry of iterable as Iterable<unknown>) {\n if (Array.isArray(entry)) {\n tags[String(entry[0])] = String(entry[1]);\n } else if (entry && typeof entry === \"object\") {\n const e = entry as Record<string, unknown> & { [0]?: unknown; [1]?: unknown };\n tags[String(e.key ?? e[0] ?? \"\")] = String(e.value ?? e[1] ?? \"\");\n }\n }\n return tags;\n}\n\n/**\n * Convert sync/async iterable to async iterator.\n */\nexport function toAsyncIterator<T>(\n input: Iterable<T> | AsyncIterable<T>,\n): AsyncIterator<T> {\n if (Symbol.asyncIterator in (input as any)) {\n return (input as AsyncIterable<T>)[Symbol.asyncIterator]();\n }\n const syncIter = (input as Iterable<T>)[Symbol.iterator]();\n return {\n async next() {\n return syncIter.next();\n },\n };\n}\n",
|
|
84
|
-
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// VGI Worker: main entry point for running a VGI function server.\n\nimport { VgiRpcServer, serveUnix, serveTcp, serveStream as serveStreamRpc } from \"@query-farm/vgi-rpc\";\nimport { FunctionRegistry } from \"./functions/registry.js\";\nimport type { VgiFunction } from \"./functions/types.js\";\nimport { buildVgiProtocol } from \"./protocol/dispatch.js\";\nimport type { Protocol } from \"@query-farm/vgi-rpc\";\nimport type { CatalogDescriptor } from \"./catalog/descriptors.js\";\nimport type { CatalogInterface } from \"./catalog/interface.js\";\nimport { ReadOnlyCatalogInterface } from \"./catalog/read-only.js\";\n\n// argv parser for the launcher's `--unix PATH` / `--tcp [HOST:]PORT` /\n// `--idle-timeout SEC` contract. The C++ launcher (vgi extension) appends\n// these to the worker's argv whenever LOCATION uses the `launch:` scheme.\n// Unknown args pass through.\ninterface LauncherArgs {\n unixPath?: string;\n /** TCP bind host, defaulting to 127.0.0.1 when `--tcp` gives a bare port. */\n tcpHost?: string;\n /** TCP bind port; present iff `--tcp` was passed. */\n tcpPort?: number;\n idleTimeout?: number;\n}\n\n// Parse a `[HOST:]PORT` --tcp bind spec into a LauncherArgs. A bare PORT (no\n// colon) binds 127.0.0.1; an empty host (leading \":\") also defaults to loopback.\nfunction parseTcpSpec(spec: string, out: LauncherArgs): void {\n const idx = spec.lastIndexOf(\":\");\n if (idx >= 0) {\n const h = spec.slice(0, idx);\n out.tcpHost = h === \"\" ? \"127.0.0.1\" : h;\n out.tcpPort = Number(spec.slice(idx + 1));\n } else {\n out.tcpHost = \"127.0.0.1\";\n out.tcpPort = Number(spec);\n }\n}\n\nfunction parseLauncherArgs(argv: readonly string[]): LauncherArgs {\n const out: LauncherArgs = {};\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i];\n if (a === \"--unix\" && i + 1 < argv.length) {\n out.unixPath = argv[++i];\n } else if (a.startsWith(\"--unix=\")) {\n out.unixPath = a.slice(\"--unix=\".length);\n } else if (a === \"--tcp\" && i + 1 < argv.length) {\n parseTcpSpec(argv[++i], out);\n } else if (a.startsWith(\"--tcp=\")) {\n parseTcpSpec(a.slice(\"--tcp=\".length), out);\n } else if (a === \"--idle-timeout\" && i + 1 < argv.length) {\n out.idleTimeout = Number(argv[++i]);\n } else if (a.startsWith(\"--idle-timeout=\")) {\n out.idleTimeout = Number(a.slice(\"--idle-timeout=\".length));\n }\n }\n return out;\n}\n\nexport interface WorkerConfig {\n functions?: VgiFunction[];\n catalog?: CatalogDescriptor;\n catalogInterface?: CatalogInterface;\n /** Factory that receives the built ReadOnlyCatalogInterface and returns a custom catalog. */\n catalogInterfaceFactory?: (base: ReadOnlyCatalogInterface) => CatalogInterface;\n catalogName?: string;\n}\n\nexport class Worker {\n private _registry: FunctionRegistry;\n private _catalogInterface?: CatalogInterface;\n private _catalogName?: string;\n\n constructor(config: WorkerConfig) {\n this._registry = new FunctionRegistry();\n this._catalogName = config.catalogName;\n\n // Register explicit functions\n if (config.functions) {\n for (const func of config.functions) {\n this._registry.register(func);\n }\n }\n\n // Register functions from catalog descriptor\n if (config.catalog) {\n for (const schema of config.catalog.schemas) {\n if (schema.functions) {\n for (const func of schema.functions) {\n this._registry.register(func);\n }\n }\n }\n }\n\n // Set up catalog interface\n if (config.catalogInterface) {\n this._catalogInterface = config.catalogInterface;\n } else if (config.catalog) {\n const base = new ReadOnlyCatalogInterface(\n config.catalog,\n this._registry\n );\n this._catalogInterface = config.catalogInterfaceFactory\n ? config.catalogInterfaceFactory(base)\n : base;\n }\n }\n\n run(argv: readonly string[] = process.argv.slice(2)): void {\n process.stderr.write(`[worker] starting, pid=${process.pid}\\n`);\n try {\n const protocol = this.buildProtocol();\n process.stderr.write(`[worker] protocol built\\n`);\n\n const launcher = parseLauncherArgs(argv);\n if (launcher.unixPath !== undefined) {\n // VGI_WORKER_IDLE_TIMEOUT overrides whatever the C++ launcher\n // appended via --idle-timeout. Useful in test setups where the\n // launcher's default of 300 s leaves stale workers around long\n // after the suite has finished — set 5 (or any small value) and\n // the worker self-shuts-down promptly when the suite ends.\n const envOverride = process.env.VGI_WORKER_IDLE_TIMEOUT;\n const idleTimeout = envOverride !== undefined && envOverride !== \"\"\n ? Number(envOverride)\n : launcher.idleTimeout;\n process.stderr.write(\n `[worker] AF_UNIX mode: ${launcher.unixPath} idle=${idleTimeout ?? 300}s${envOverride !== undefined && envOverride !== \"\" ? \" (env override)\" : \"\"}\\n`,\n );\n serveUnix(protocol, {\n unixPath: launcher.unixPath,\n idleTimeout,\n }).then((handle) => handle.done).then(() => {\n process.stderr.write(`[worker] serveUnix done (idle shutdown)\\n`);\n }).catch((err: any) => {\n process.stderr.write(`Worker error: ${err.message}\\n${err.stack}\\n`);\n process.exit(1);\n });\n return;\n }\n\n if (launcher.tcpPort !== undefined) {\n // Raw Arrow-IPC framing over TCP — the network sibling of the\n // AF_UNIX launcher transport. serveTcp prints the\n // `TCP:<host>:<port>` discovery line itself (with the actual bound\n // port when tcpPort is 0). NO auth/TLS — loopback/trusted networks\n // only; use the HTTP transport for untrusted networks.\n const envOverride = process.env.VGI_WORKER_IDLE_TIMEOUT;\n const idleTimeout = envOverride !== undefined && envOverride !== \"\"\n ? Number(envOverride)\n : launcher.idleTimeout;\n process.stderr.write(\n `[worker] TCP mode: ${launcher.tcpHost}:${launcher.tcpPort} idle=${idleTimeout ?? 300}s${envOverride !== undefined && envOverride !== \"\" ? \" (env override)\" : \"\"}\\n`,\n );\n serveTcp(protocol, {\n host: launcher.tcpHost,\n port: launcher.tcpPort,\n idleTimeout,\n }).then((handle) => handle.done).then(() => {\n process.stderr.write(`[worker] serveTcp done (idle shutdown)\\n`);\n }).catch((err: any) => {\n process.stderr.write(`Worker error: ${err.message}\\n${err.stack}\\n`);\n process.exit(1);\n });\n return;\n }\n\n const server = new VgiRpcServer(protocol);\n process.stderr.write(`[worker] server created, calling run()\\n`);\n server.run().then(() => {\n process.stderr.write(`[worker] server.run() resolved cleanly\\n`);\n }).catch((err) => {\n process.stderr.write(`Worker error: ${err.message}\\n${err.stack}\\n`);\n process.exit(1);\n });\n } catch (err: any) {\n process.stderr.write(`Worker init error: ${err.message}\\n${err.stack}\\n`);\n process.exit(1);\n }\n }\n\n /** Build the VGI protocol from this worker's registry + catalog interface. */\n private buildProtocol(): Protocol {\n return buildVgiProtocol({\n registry: this._registry,\n catalogInterface: this._catalogInterface,\n catalogName: this._catalogName,\n });\n }\n\n /**\n * Serve this worker over a caller-provided byte-stream pair, instead of the\n * argv-selected stdio/unix/tcp transports `run()` uses. Resolves when the\n * `readable` ends.\n *\n * This is the seam for transports that aren't a process/socket — most notably\n * a **Web Worker**: bridge the worker's `MessagePort` to a Node `Duplex`\n * (readable side ← `port.on('message')`, writable side → `port.postMessage`)\n * and pass it as both arguments. The same code runs in a browser Web Worker.\n *\n * @param readable incoming request bytes (web `ReadableStream` or Node `Readable`).\n * @param writable outgoing response sink (a `net.Socket`/`Duplex`, or an fd\n * number). Omit for the stdout fd.\n */\n async serveStream(\n readable: ReadableStream<Uint8Array> | NodeJS.ReadableStream,\n writable?: number | import(\"node:net\").Socket | import(\"@query-farm/vgi-rpc\").ByteSink,\n ): Promise<void> {\n await serveStreamRpc(this.buildProtocol(), { readable, writable });\n }\n}\n"
|
|
84
|
+
"// Copyright 2025, 2026 Query Farm LLC - https://query.farm\n// VGI Worker: main entry point for running a VGI function server.\n\nimport { VgiRpcServer, serveUnix, serveTcp, serveStream as serveStreamRpc } from \"@query-farm/vgi-rpc\";\nimport { FunctionRegistry } from \"./functions/registry.js\";\nimport type { VgiFunction } from \"./functions/types.js\";\nimport { buildVgiProtocol } from \"./protocol/dispatch.js\";\nimport type { Protocol } from \"@query-farm/vgi-rpc\";\nimport type { CatalogDescriptor } from \"./catalog/descriptors.js\";\nimport type { CatalogInterface } from \"./catalog/interface.js\";\nimport { ReadOnlyCatalogInterface } from \"./catalog/read-only.js\";\n\n// argv parser for the launcher's `--unix PATH` / `--tcp [HOST:]PORT` /\n// `--idle-timeout SEC` contract. The C++ launcher (vgi extension) appends\n// these to the worker's argv whenever LOCATION uses the `launch:` scheme.\n// Unknown args pass through.\ninterface LauncherArgs {\n unixPath?: string;\n /** TCP bind host, defaulting to 127.0.0.1 when `--tcp` gives a bare port. */\n tcpHost?: string;\n /** TCP bind port; present iff `--tcp` was passed. */\n tcpPort?: number;\n idleTimeout?: number;\n}\n\n// Parse a `[HOST:]PORT` --tcp bind spec into a LauncherArgs. A bare PORT (no\n// colon) binds 127.0.0.1; an empty host (leading \":\") also defaults to loopback.\nfunction parseTcpSpec(spec: string, out: LauncherArgs): void {\n const idx = spec.lastIndexOf(\":\");\n if (idx >= 0) {\n const h = spec.slice(0, idx);\n out.tcpHost = h === \"\" ? \"127.0.0.1\" : h;\n out.tcpPort = Number(spec.slice(idx + 1));\n } else {\n out.tcpHost = \"127.0.0.1\";\n out.tcpPort = Number(spec);\n }\n}\n\nfunction parseLauncherArgs(argv: readonly string[]): LauncherArgs {\n const out: LauncherArgs = {};\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i];\n if (a === \"--unix\" && i + 1 < argv.length) {\n out.unixPath = argv[++i];\n } else if (a.startsWith(\"--unix=\")) {\n out.unixPath = a.slice(\"--unix=\".length);\n } else if (a === \"--tcp\" && i + 1 < argv.length) {\n parseTcpSpec(argv[++i], out);\n } else if (a.startsWith(\"--tcp=\")) {\n parseTcpSpec(a.slice(\"--tcp=\".length), out);\n } else if (a === \"--idle-timeout\" && i + 1 < argv.length) {\n out.idleTimeout = Number(argv[++i]);\n } else if (a.startsWith(\"--idle-timeout=\")) {\n out.idleTimeout = Number(a.slice(\"--idle-timeout=\".length));\n }\n }\n return out;\n}\n\nexport interface WorkerConfig {\n functions?: VgiFunction[];\n catalog?: CatalogDescriptor;\n catalogInterface?: CatalogInterface;\n /** Factory that receives the built ReadOnlyCatalogInterface and returns a custom catalog. */\n catalogInterfaceFactory?: (base: ReadOnlyCatalogInterface) => CatalogInterface;\n catalogName?: string;\n /**\n * Registry to dispatch through. Pass the same instance used to build a\n * pre-constructed `catalogInterface` — catalogs record which schema (and\n * catalog) declares each function on the registry they are given, and\n * schema-qualified resolution only works if that is the registry the worker\n * dispatches on. Omit to have the worker create its own.\n */\n registry?: FunctionRegistry;\n}\n\nexport class Worker {\n private _registry: FunctionRegistry;\n private _catalogInterface?: CatalogInterface;\n private _catalogName?: string;\n\n constructor(config: WorkerConfig) {\n // Reuse the caller's registry when given: a catalogInterface built\n // elsewhere recorded its per-schema function ownership there, and that\n // index is what makes a schema-qualified bind resolve correctly.\n this._registry = config.registry ?? new FunctionRegistry();\n this._catalogName = config.catalogName;\n\n // Register explicit functions\n if (config.functions) {\n for (const func of config.functions) {\n this._registry.register(func);\n }\n }\n\n // Register functions from catalog descriptor\n if (config.catalog) {\n for (const schema of config.catalog.schemas) {\n if (schema.functions) {\n for (const func of schema.functions) {\n this._registry.register(func);\n // Also index by owning schema + catalog so a schema-qualified bind\n // resolves when one name is declared in more than one schema.\n this._registry.registerInSchema(func, schema.name, config.catalog.name);\n }\n }\n }\n }\n\n // Set up catalog interface\n if (config.catalogInterface) {\n this._catalogInterface = config.catalogInterface;\n } else if (config.catalog) {\n const base = new ReadOnlyCatalogInterface(\n config.catalog,\n this._registry\n );\n this._catalogInterface = config.catalogInterfaceFactory\n ? config.catalogInterfaceFactory(base)\n : base;\n }\n }\n\n run(argv: readonly string[] = process.argv.slice(2)): void {\n process.stderr.write(`[worker] starting, pid=${process.pid}\\n`);\n try {\n const protocol = this.buildProtocol();\n process.stderr.write(`[worker] protocol built\\n`);\n\n const launcher = parseLauncherArgs(argv);\n if (launcher.unixPath !== undefined) {\n // VGI_WORKER_IDLE_TIMEOUT overrides whatever the C++ launcher\n // appended via --idle-timeout. Useful in test setups where the\n // launcher's default of 300 s leaves stale workers around long\n // after the suite has finished — set 5 (or any small value) and\n // the worker self-shuts-down promptly when the suite ends.\n const envOverride = process.env.VGI_WORKER_IDLE_TIMEOUT;\n const idleTimeout = envOverride !== undefined && envOverride !== \"\"\n ? Number(envOverride)\n : launcher.idleTimeout;\n process.stderr.write(\n `[worker] AF_UNIX mode: ${launcher.unixPath} idle=${idleTimeout ?? 300}s${envOverride !== undefined && envOverride !== \"\" ? \" (env override)\" : \"\"}\\n`,\n );\n serveUnix(protocol, {\n unixPath: launcher.unixPath,\n idleTimeout,\n }).then((handle) => handle.done).then(() => {\n process.stderr.write(`[worker] serveUnix done (idle shutdown)\\n`);\n }).catch((err: any) => {\n process.stderr.write(`Worker error: ${err.message}\\n${err.stack}\\n`);\n process.exit(1);\n });\n return;\n }\n\n if (launcher.tcpPort !== undefined) {\n // Raw Arrow-IPC framing over TCP — the network sibling of the\n // AF_UNIX launcher transport. serveTcp prints the\n // `TCP:<host>:<port>` discovery line itself (with the actual bound\n // port when tcpPort is 0). NO auth/TLS — loopback/trusted networks\n // only; use the HTTP transport for untrusted networks.\n const envOverride = process.env.VGI_WORKER_IDLE_TIMEOUT;\n const idleTimeout = envOverride !== undefined && envOverride !== \"\"\n ? Number(envOverride)\n : launcher.idleTimeout;\n process.stderr.write(\n `[worker] TCP mode: ${launcher.tcpHost}:${launcher.tcpPort} idle=${idleTimeout ?? 300}s${envOverride !== undefined && envOverride !== \"\" ? \" (env override)\" : \"\"}\\n`,\n );\n serveTcp(protocol, {\n host: launcher.tcpHost,\n port: launcher.tcpPort,\n idleTimeout,\n }).then((handle) => handle.done).then(() => {\n process.stderr.write(`[worker] serveTcp done (idle shutdown)\\n`);\n }).catch((err: any) => {\n process.stderr.write(`Worker error: ${err.message}\\n${err.stack}\\n`);\n process.exit(1);\n });\n return;\n }\n\n const server = new VgiRpcServer(protocol);\n process.stderr.write(`[worker] server created, calling run()\\n`);\n server.run().then(() => {\n process.stderr.write(`[worker] server.run() resolved cleanly\\n`);\n }).catch((err) => {\n process.stderr.write(`Worker error: ${err.message}\\n${err.stack}\\n`);\n process.exit(1);\n });\n } catch (err: any) {\n process.stderr.write(`Worker init error: ${err.message}\\n${err.stack}\\n`);\n process.exit(1);\n }\n }\n\n /** Build the VGI protocol from this worker's registry + catalog interface. */\n private buildProtocol(): Protocol {\n return buildVgiProtocol({\n registry: this._registry,\n catalogInterface: this._catalogInterface,\n catalogName: this._catalogName,\n });\n }\n\n /**\n * Serve this worker over a caller-provided byte-stream pair, instead of the\n * argv-selected stdio/unix/tcp transports `run()` uses. Resolves when the\n * `readable` ends.\n *\n * This is the seam for transports that aren't a process/socket — most notably\n * a **Web Worker**: bridge the worker's `MessagePort` to a Node `Duplex`\n * (readable side ← `port.on('message')`, writable side → `port.postMessage`)\n * and pass it as both arguments. The same code runs in a browser Web Worker.\n *\n * @param readable incoming request bytes (web `ReadableStream` or Node `Readable`).\n * @param writable outgoing response sink (a `net.Socket`/`Duplex`, or an fd\n * number). Omit for the stdout fd.\n */\n async serveStream(\n readable: ReadableStream<Uint8Array> | NodeJS.ReadableStream,\n writable?: number | import(\"node:net\").Socket | import(\"@query-farm/vgi-rpc\").ByteSink,\n ): Promise<void> {\n await serveStreamRpc(this.buildProtocol(), { readable, writable });\n }\n}\n"
|
|
85
85
|
],
|
|
86
|
-
"mappings": "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B,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,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",
|
|
87
|
-
"debugId": "
|
|
86
|
+
"mappings": "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;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,EAC3B;AAAA,EAEA,IAAI,KAAK;AAAA,EACT,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA,EAC1B,IAAI,QAAS,MAAM,MAAO;AAAA;AAuBvB,SAAS,OAAO,CAAC,GAAG,GAAG,GAAG,KAAK;AAAA,EAClC,IAAI,MAAM,UAAU,EAAE,EAAE,GAAG,MAAM,UAAU,EAAE,EAAE,GAAG,MAAM,UAAU,EAAE,EAAE,GAAG,MAAM,UAAU,EAAE,EAAE,GAAG,MAAM,UAAU,EAAE,EAAE,GAAG,MAAM,UAAU,EAAE,EAAE,GAAG,MAAM,UAAU,EAAE,EAAE,GAAG,MAAM,UAAU,EAAE,EAAE,GAAG,MAAM,UAAU,EAAE,EAAE,GAAG,MAAM,UAAU,EAAE,EAAE,GAAG,MAAM,UAAU,EAAE,EAAE,GAAG,MAAM,UAAU,EAAE,EAAE,GAAG,MAAM,UAAU,EAAE,EAAE,GAAG,MAAM,UAAU,EAAE,EAAE,GAAG,MAAM,UAAU,EAAE,EAAE,GAAG,MAAM,UAAU,EAAE,EAAE;AAAA,EACjX,SAAS,IAAI,EAAG,IAAI,IAAI,KAAK,GAAG;AAAA,IAC5B,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,EAAE;AAAA,IACxB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,IACvB,MAAO,MAAM,MAAO;AAAA,IACpB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,EAC3B;AAAA,EAEA,IAAI,KAAK;AAAA,EACT,IAAI,QAAQ;AAAA,EACZ,IAAI,QAAQ;AAAA,EACZ,IAAI,QAAQ;AAAA,EACZ,IAAI,QAAQ;AAAA,EACZ,IAAI,QAAQ;AAAA,EACZ,IAAI,QAAQ;AAAA,EACZ,IAAI,QAAQ;AAAA,EACZ,IAAI,QAAQ;AAAA,EACZ,WAAW,GAAG;AAAA;AA6EX,IAAM,4BAA4B,aAAa,YAAY;AAAA,EAC9D,cAAc;AAAA,EACd,eAAe;AAAA,EACf,eAAe;AAAA,EACf,gBAAgB;AACpB,CAAC;AAoDD,IAAM,0BAA0B,IAAI,WAAW,EAAE;AAEjD,IAAM,eAAe,CAAC,GAAG,QAAQ;AAAA,EAC7B,EAAE,OAAO,GAAG;AAAA,EACZ,MAAM,WAAW,IAAI,SAAS;AAAA,EAC9B,IAAI;AAAA,IACA,EAAE,OAAO,QAAQ,SAAS,QAAQ,CAAC;AAAA;AAI3C,IAAM,0BAA0B,IAAI,WAAW,EAAE;AACjD,SAAS,UAAU,CAAC,IAAI,KAAK,OAAO,YAAY,KAAK;AAAA,EACjD,IAAI,QAAQ;AAAA,IACR,OAAO,KAAK,WAAW,KAAK;AAAA,EAGhC,MAAM,UAAU,GAAG,KAAK,OAAO,OAAO;AAAA,EACtC,MAAM,UAAU,WAAW,WAAW,QAAQ,MAAM,IAAI,SAAS,GAAG,IAAI;AAAA,EAGxE,MAAM,IAAI,SAAS,OAAO,OAAO;AAAA,EACjC,IAAI;AAAA,IACA,aAAa,GAAG,GAAG;AAAA,EACvB,aAAa,GAAG,UAAU;AAAA,EAC1B,EAAE,OAAO,OAAO;AAAA,EAChB,MAAM,MAAM,EAAE,OAAO;AAAA,EACrB,MAAM,SAAS,OAAO;AAAA,EACtB,OAAO;AAAA;AASJ,IAAM,iBAAiB,CAAC,cAAc,CAAC,KAAK,OAAO,QAAQ;AAAA,EAG9D,MAAM,YAAY;AAAA,EAClB,OAAO;AAAA,IACH,OAAO,CAAC,WAAW,QAAQ;AAAA,MACvB,MAAM,UAAU,UAAU;AAAA,MAC1B,SAAS,UAAU,UAAU,WAAW,QAAQ,KAAK;AAAA,MACrD,OAAO,IAAI,SAAS;AAAA,MACpB,MAAM,SAAS,OAAO,SAAS,GAAG,CAAC,SAAS;AAAA,MAE5C,UAAU,KAAK,OAAO,QAAQ,QAAQ,CAAC;AAAA,MACvC,MAAM,MAAM,WAAW,WAAW,KAAK,OAAO,QAAQ,GAAG;AAAA,MACzD,OAAO,IAAI,KAAK,OAAO;AAAA,MACvB,MAAM,GAAG;AAAA,MACT,OAAO;AAAA;AAAA,IAEX,OAAO,CAAC,YAAY,QAAQ;AAAA,MACxB,SAAS,UAAU,WAAW,SAAS,WAAW,QAAQ,KAAK;AAAA,MAC/D,MAAM,OAAO,WAAW,SAAS,GAAG,CAAC,SAAS;AAAA,MAC9C,MAAM,YAAY,WAAW,SAAS,CAAC,SAAS;AAAA,MAChD,MAAM,MAAM,WAAW,WAAW,KAAK,OAAO,MAAM,GAAG;AAAA,MAGvD,IAAI,CAAC,WAAW,WAAW,GAAG,GAAG;AAAA,QAC7B,MAAM,GAAG;AAAA,QACT,MAAM,IAAI,MAAM,aAAa;AAAA,MACjC;AAAA,MACA,OAAO,IAAI,WAAW,SAAS,GAAG,CAAC,SAAS,CAAC;AAAA,MAE7C,UAAU,KAAK,OAAO,QAAQ,QAAQ,CAAC;AAAA,MACvC,MAAM,GAAG;AAAA,MACT,OAAO;AAAA;AAAA,EAEf;AAAA;AA8CG,IAAM,oCAAoC,WAAW,EAAE,WAAW,IAAI,aAAa,IAAI,WAAW,GAAG,mBAC5F,eAAe,SAAS,CAAC;;;ACjgBzC,IAAM,QAAQ,IAAI;AAKX,IAAM,0BAA0B;AAChC,IAAM,+BAA+B;AAGrC,IAAM,kBAAkB;AAE/B,IAAM,YAAY;AAClB,IAAM,UAAU;AAChB,IAAM,mBAAmB,IAAI,YAAY;AAEzC,IAAM,oBAAoB,MAAM,OAAO,+BAA6B;AACpE,IAAM,yBAAyB,MAAM,OAAO,oCAAkC;AAAA;AAOvE,MAAM,gCAAgC,MAAM;AAAA,EACjD,WAAW,CAAC,SAAQ,eAAe;AAAA,IACjC,MAAM,GAAG,uBAAsB;AAAA,IAC/B,KAAK,OAAO;AAAA;AAEhB;AAEA,SAAS,MAAM,IAAI,OAAiC;AAAA,EAClD,IAAI,QAAQ;AAAA,EACZ,WAAW,KAAK;AAAA,IAAO,SAAS,EAAE;AAAA,EAClC,MAAM,MAAM,IAAI,WAAW,KAAK;AAAA,EAChC,IAAI,MAAM;AAAA,EACV,WAAW,KAAK,OAAO;AAAA,IACrB,IAAI,IAAI,GAAG,GAAG;AAAA,IACd,OAAO,EAAE;AAAA,EACX;AAAA,EACA,OAAO;AAAA;AAQT,eAAe,YAAY,CAAC,KAAsC;AAAA,EAChE,IAAI,IAAI,WAAW;AAAA,IAAI,OAAO;AAAA,EAC9B,OAAO,IAAI,WAAW,MAAM,OAAO,OAAO,OAAO,WAAW,GAAmB,CAAC;AAAA;AAQ3E,SAAS,YAAY,CAAC,MAA2C;AAAA,EACtE,IAAI,CAAC,QAAQ,CAAC,KAAK;AAAA,IAAe,OAAO,MAAM,OAAO,eAAa;AAAA,EACnE,MAAM,SAAS,MAAM,OAAO,KAAK,UAAU,EAAE;AAAA,EAC7C,MAAM,YAAY,MAAM,OAAO,KAAK,aAAa,EAAE;AAAA,EACnD,OAAO,OAAO,WAAW,GAAG,CAAI,GAAG,QAAQ,WAAW,GAAG,CAAI,GAAG,SAAS;AAAA;AAIpE,SAAS,SAAS,CAAC,MAA2C;AAAA,EACnE,OAAO,OAAO,mBAAmB,aAAa,IAAI,CAAC;AAAA;AAS9C,SAAS,cAAc,CAC5B,MACA,gBACY;AAAA,EACZ,OAAO,OAAO,wBAAwB,aAAa,IAAI,GAAG,WAAW,GAAG,CAAI,GAAG,cAAc;AAAA;AAI/F,eAAsB,SAAS,CAC7B,SACA,KACA,KACA,SACqB;AAAA,EACrB,MAAM,QAAQ,OAAO,gBAAgB,IAAI,WAAW,SAAS,CAAC;AAAA,EAC9D,MAAM,aAAa,kBAAkB,MAAM,aAAa,GAAG,GAAG,OAAO,GAAG,EAAE,QAAQ,OAAO;AAAA,EACzF,MAAM,MAAM,IAAI,WAAW,IAAI,YAAY,WAAW,MAAM;AAAA,EAC5D,IAAI,KAAK,UAAU;AAAA,EACnB,IAAI,IAAI,OAAO,CAAC;AAAA,EAChB,IAAI,IAAI,YAAY,IAAI,SAAS;AAAA,EACjC,OAAO;AAAA;AAQT,eAAsB,SAAS,CAC7B,OACA,KACA,KACA,SACA,SAAQ,eACa;AAAA,EACrB,IAAI,MAAM,SAAS,oBAAoB,MAAM,QAAQ,UAAU,MAAO;AAAA,IACpE,MAAM,IAAI,wBAAwB,MAAK;AAAA,EACzC;AAAA,EACA,MAAM,QAAQ,MAAM,SAAS,GAAG,IAAI,SAAS;AAAA,EAC7C,MAAM,aAAa,MAAM,SAAS,IAAI,SAAS;AAAA,EAC/C,IAAI;AAAA,IACF,OAAO,kBAAkB,MAAM,aAAa,GAAG,GAAG,OAAO,GAAG,EAAE,QAAQ,UAAU;AAAA,IAChF,MAAM;AAAA,IACN,MAAM,IAAI,wBAAwB,MAAK;AAAA;AAAA;;;ALtG3C,eAAsB,UAAU,CAC9B,WACA,MACA,YACqB;AAAA,EACrB,MAAM,OAAO,IAAI,WAAW,eAAe;AAAA,EAC3C,OAAO,gBAAgB,IAAI;AAAA,EAC3B,MAAM,SAAS,IAAI,WAAW,kBAAkB,UAAU,MAAM;AAAA,EAChE,OAAO,IAAI,MAAM,CAAC;AAAA,EAClB,OAAO,IAAI,WAAW,eAAe;AAAA,EACrC,IAAI,CAAC;AAAA,IAAY,OAAO;AAAA,EACxB,OAAO,UAAU,QAAQ,YAAY,UAAU,IAAI,GAAG,uBAAuB;AAAA;AAO/E,eAAsB,cAAc,CAClC,UACA,MACA,YACqB;AAAA,EACrB,IAAI,CAAC,cAAc,SAAS,WAAW;AAAA,IAAG,OAAO;AAAA,EACjD,OAAO,UAAU,UAAU,YAAY,UAAU,IAAI,GAAG,yBAAyB,oBAAoB;AAAA;AAQvG,eAAsB,UAAU,CAC9B,UACA,MACA,YACqB;AAAA,EACrB,MAAM,OAAO,MAAM,eAAe,UAAU,MAAM,UAAU;AAAA,EAC5D,OAAO,KAAK,SAAS,kBAAkB,OAAO,KAAK,SAAS,eAAe;AAAA;AA2C7E,eAAsB,eAAe,CACnC,WACA,gBACA,MACA,YACqB;AAAA,EACrB,IAAI,CAAC;AAAA,IAAY,OAAO;AAAA,EACxB,OAAO,UAAU,WAAW,YAAY,eAAe,MAAM,cAAc,GAAG,4BAA4B;AAAA;AAS5G,eAAe,kBAAkB,CAC/B,QACA,KACA,YACe;AAAA,EACf,MAAM,OAAO,KAAK;AAAA,EAClB,IAAI,eAA2B,IAAI,WAAW,CAAC;AAAA,EAC/C,IAAI,OAAO,sBAAsB,MAAM;AAAA,IACrC,MAAM,MAAM,aAAa,OAAO,kBAAkB;AAAA,IAClD,IAAI,IAAI,SAAS,GAAG;AAAA,MAClB,eAAe;AAAA,MAOf,MAAM,OAAO,aACT,MAAM,UAAU,KAAK,YAAY,UAAU,IAAI,GAAG,yBAAyB,oBAAoB,IAC/F;AAAA,MACJ,OAAO,qBAAqB,KAAK,SAAS,kBAAkB,OAAO,KAAK,SAAS,eAAe;AAAA,IAClG;AAAA,EACF;AAAA,EAGA,IAAI,cAAc,OAAO,2BAA2B,MAAM;AAAA,IACxD,MAAM,MAAM,aAAa,OAAO,uBAAuB;AAAA,IACvD,IAAI,IAAI,SAAS,GAAG;AAAA,MAClB,OAAO,0BAA0B,MAAM,UACrC,KACA,YACA,eAAe,MAAM,YAAY,GACjC,8BACA,yBACF;AAAA,IACF;AAAA,EACF;AAAA;AASK,SAAS,YAAY,CAC1B,UACA,YACA,MACA,QAMM;AAAA,EACN,SAAS,MAAM,MAAM;AAAA,IACnB,QAAQ,OAAO;AAAA,IACf,QAAQ,OAAO;AAAA,IACf,KAAK,OAAO;AAAA,IACZ,SAAS,OAAO,QAA6B,QAAa;AAAA,MACxD,MAAM,mBAAmB,QAAQ,KAAK,UAAU;AAAA,MAChD,OAAO,OAAO,QAAQ,QAAQ,GAAG;AAAA;AAAA,EAErC,CAAC;AAAA;AAGI,SAAS,cAAc,CAAC,SAAmD;AAAA,EAChF,OAAO,MAAM;AAAA,IACX,IAAI,CAAC;AAAA,MAAS,MAAM,IAAI;AAAA,IACxB,OAAO;AAAA;AAAA;AAUJ,SAAS,kBAAkB,CAAC,OAAqC;AAAA,EACtE,IAAI,SAAS;AAAA,IAAM,OAAO,CAAC;AAAA,EAC3B,MAAM,MAAM,aAAa,KAAK;AAAA,EAC9B,IAAI,IAAI,eAAe;AAAA,IAAG,OAAO,CAAC;AAAA,EAClC,MAAM,QAAQ,iBAAiB,GAAG;AAAA,EAClC,IAAI,MAAM,YAAY;AAAA,IAAG,OAAO,CAAC;AAAA,EAKjC,MAAM,MAAM,SAAS,KAAK,EAAE,KAAK,EAAE;AAAA,EACnC,OAAO,OAAO,CAAC;AAAA;AAOV,IAAM,oBAAoB,QAAO,CAAC,CAAC;AAEnC,IAAM,wBAAwB,QAAO;AAAA,EAC1C,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAC5C,CAAC;AAEM,IAAM,4BAA4B,QAAO;AAAA,EAC9C,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,EAC1C,OAAM,2BAA2B,QAAO,GAAG,IAAI;AACjD,CAAC;AAEM,IAAM,gCAAgC,QAAO;AAAA,EAClD,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,EAC1C,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,EAC3B,OAAM,2BAA2B,QAAO,GAAG,IAAI;AACjD,CAAC;AAEM,IAAM,sCAAsC,QAAO;AAAA,EACxD,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,EAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,EAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,EAC3B,OAAM,2BAA2B,QAAO,GAAG,IAAI;AACjD,CAAC;AAEM,IAAM,oCAAoC,QAAO;AAAA,EACtD,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,EAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,EAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,EAC3B,OAAM,oBAAoB,MAAK,GAAG,IAAI;AAAA,EACtC,OAAM,2BAA2B,QAAO,GAAG,IAAI;AACjD,CAAC;AAEM,IAAM,0BAA0B,QAAO;AAAA,EAC5C,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,EAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,EAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,EAC3B,OAAM,WAAW,MAAK,GAAG,IAAI;AAAA,EAC7B,OAAM,oBAAoB,MAAK,GAAG,IAAI;AAAA,EACtC,OAAM,2BAA2B,QAAO,GAAG,IAAI;AACjD,CAAC;AAEM,IAAM,yBAAyB,QAAO;AAAA,EAC3C,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,EAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,EAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,EAC3B,OAAM,YAAY,MAAK,GAAG,KAAK;AAAA,EAC/B,OAAM,oBAAoB,MAAK,GAAG,IAAI;AAAA,EACtC,OAAM,2BAA2B,QAAO,GAAG,IAAI;AACjD,CAAC;AAEM,IAAM,iBAAiB,QAAO;AAAA,EACnC,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,EAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,EAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,EAC3B,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,EAClC,OAAM,oBAAoB,MAAK,GAAG,IAAI;AAAA,EACtC,OAAM,2BAA2B,QAAO,GAAG,IAAI;AACjD,CAAC;;;AFrPM,SAAS,uBAAuB,CAAC,UAAoB,QAAqC;AAAA,EAC/F,QAAQ,UAAU,YAAY,qBAAqB;AAAA,EAMnD,eAAe,WAAW,CAAC,QAAa,KAAsC;AAAA,IAC5E,IAAI,UAAU;AAAA,MAAM,OAAO;AAAA,IAC3B,MAAM,MAAM,aAAa,MAAM;AAAA,IAC/B,IAAI,IAAI,WAAW;AAAA,MAAG,OAAO;AAAA,IAC7B,OAAO,WAAW,KAAK,KAAK,MAAM,UAAU;AAAA;AAAA,EAQ9C,eAAe,eAAe,CAAC,UAAe,KAAW;AAAA,IACvD,IAAI,SAA4B;AAAA,IAChC,IAAI;AAAA,MACF,SAAS,MAAM,YAAY,SAAS,oBAAoB,GAAG;AAAA,MAC3D,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,OAAO,gBAAgB,KAAK,UAAU,oBAAoB,OAAO,GAAG,gBAAgB;AAAA;AAAA,EAGtF,MAAM,mBAAmB,QAAO;AAAA,IAC9B,OAAM,gBAAgB,QAAO,GAAG,KAAK;AAAA,IACrC,OAAM,eAAe,QAAO,GAAG,IAAI;AAAA,IACnC,OAAM,eAAe,OAAM,GAAG,KAAK;AAAA,EACrC,CAAC;AAAA,EAED,MAAM,cAAc,QAAO,CAAC,CAAC;AAAA,EAM7B,MAAM,mBAAmB,QAAO;AAAA,IAC9B,OAAM,SAAS,QAAO,GAAG,IAAI;AAAA,EAC/B,CAAC;AAAA,EAKD,SAAS,MAAM,QAAQ;AAAA,IACrB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,QAAQ,QAAQ;AAAA,MAC9B,MAAM,cAAc,cAAc,OAAO,OAAO;AAAA,MAChD,MAAM,UAAU,uBAAuB,WAAW;AAAA,MAClD,QAAQ,qBAAqB,MAAM,YAAY,QAAQ,oBAAoB,GAAG;AAAA,MAC9E,MAAM,OAAO,SAAS,IAAI,QAAQ,eAAe,gBAAgB,SAAS,gBAAgB,CAAC;AAAA,MAC3F,MAAM,WAAW,MAAM,KAAK,KAAK,OAAO;AAAA,MACxC,MAAM,aAAa,sBAAsB,QAAQ;AAAA,MACjD,OAAO,WAAW,YAAY,gBAAgB;AAAA;AAAA,EAElD,CAAC;AAAA,EAKD,SAAS,SAAS,QAAQ;AAAA,IACxB,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,cAAc;AAAA,IACd,MAAM,OAAO,WAAW;AAAA,MAEtB,MAAM,kBAAkB,aAAa,OAAO,OAAO;AAAA,MACnD,MAAM,cAAc,cAAc,OAAO,OAAO;AAAA,MAChD,MAAM,UAAU,uBAAuB,WAAW;AAAA,MAGlD,QAAQ,UAAU,qBAAqB,MAAM,YAAY,QAAQ,UAAU,oBAAoB,SAAS;AAAA,MACxG,MAAM,OAAO,SAAS,IAAI,QAAQ,UAAU,eAAe,gBAAgB,QAAQ,WAAW,gBAAgB,CAAC;AAAA,MAI/G,MAAM,eAAe,MAAM,KAAK,WAAW,OAAO;AAAA,MAIlD,MAAM,mBAAmB,qBAAqB,SAAS,OAAO,oBAAoB;AAAA,MAElF,MAAM,WAAW,KAAK,qBAAqB,SAAS,cAAc,gBAAgB;AAAA,MAGlF,IAAI;AAAA,MACJ,IAAI,SAAS,cAAc;AAAA,QACzB,eAAe,SAAS,aAAa;AAAA,MACvC,EAAO,SAAI,SAAS,cAAc;AAAA,QAChC,eAAe,SAAS,aAAa;AAAA,MACvC;AAAA,MAEA,MAAM,aAAa,CAAC,CAAC,SAAS;AAAA,MAK9B,MAAM,YAAY,cAAc,SAAS;AAAA,MAKzC,MAAM,QAAa;AAAA,QACjB,cAAc,QAAQ,UAAU;AAAA,QAChC,gBAAgB;AAAA,QAChB,aAAa,aAAa;AAAA,QAC1B,YAAY,OAAO,aAAa,WAAW;AAAA,QAC3C,YAAY,aAAa,eAAe;AAAA,QACxC;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QAMd,gBAAgB,SAAS,gBAAgB;AAAA,QACzC,eAAe,SAAS,eAAe;AAAA,QAEvC,WAAW;AAAA,QACX,eAAe;AAAA,QACf,eAAe;AAAA,MACjB;AAAA,MACA,OAAO;AAAA;AAAA,IAET,UAAU,OAAO,OAAO,OAAO,QAAQ;AAAA,MAQrC,QAAQ,kBAAkB,KAAK;AAAA,MAI/B,IAAI;AAAA,MACJ,IAAI;AAAA,MAEJ,IAAI,MAAM,WAAW;AAAA,QAEnB,WAAW,MAAM;AAAA,QACjB,eAAe,MAAM;AAAA,MACvB,EAAO;AAAA,QAIL,MAAM,mBAAmB,iBAAiB,MAAM,cAAc;AAAA,QAC9D,MAAM,kBAAkB,kBAAkB,gBAAgB;AAAA,QAC1D,MAAM,UAAU,uBAAuB,eAAe;AAAA,QACtD,MAAM,OAAO,SAAS,IAAI,MAAM,cAAc,MAAM,gBAAgB,QAAQ,SAAS,CAAC;AAAA,QACtF,MAAM,cAAc,MAAM;AAAA,QAC1B,MAAM,aAAa,MAAM,cAAc;AAAA,QACvC,MAAM,eAAmC;AAAA,UACvC,cAAc;AAAA,UACd,aAAa,OAAO,MAAM,cAAc,CAAC;AAAA,UACzC,aAAa;AAAA,QACf;AAAA,QAGA,MAAM,iBAAiB,qBAAqB,SAAS,OAAO,oBAAoB;AAAA,QAEhF,WAAW,KAAK,qBAAqB,SAAS,cAAc,cAAc;AAAA,QAC1E,IAAI,SAAS,cAAc;AAAA,UACzB,eAAe,SAAS,aAAa;AAAA,QACvC,EAAO,SAAI,SAAS,cAAc;AAAA,UAChC,eAAe,SAAS,aAAa;AAAA,QACvC;AAAA,QAEA,IAAI,MAAM,aAAa,QAAQ,cAAc,UAAU,WAAW;AAAA,UAChE,aAAc,QAAQ,MAAM;AAAA,QAC9B;AAAA;AAAA,MAGF,IAAI,MAAM,cAAc,SAAS,YAAY;AAAA,QAI3C,IAAI,SAAS,MAAM;AAAA,UAAG,IAAY,YAAY;AAAA;AAAA,QAI9C,IAAI,SAAS,QAAQ;AAAA,UACnB,MAAM,SAAS,OAAO,cAAe,OAAe,QAAQ;AAAA,QAC9D;AAAA,QACA,MAAM,SAAS,WAAW,cAAc,GAAG;AAAA,MAC7C,EAAO,SAAI,SAAS,YAAY;AAAA,QAC9B,MAAM,SAAS,WAAW,cAAc,OAAO,GAAG;AAAA,MACpD;AAAA,MAGA,IAAI,cAAc,UAAU,WAAW;AAAA,QACrC,MAAM,YAAY,aAAc;AAAA,MAClC;AAAA;AAAA,IAEF,cAAc;AAAA,IACd,YAAY,CAAC,QAAa,OAAY,QAAa;AAAA,MAGjD,IAAI,CAAC,MAAM,eAAe;AAAA,QACxB,MAAM,IAAI,MAAM,sEAAsE;AAAA,MACxF;AAAA,MACA,OAAO,4BAA4B,MAAM,aAAa;AAAA;AAAA,EAE1D,CAAC;AAAA,EAKD,SAAS,MAAM,8BAA8B;AAAA,IAC3C,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,cAAc,cAAc,OAAO,OAAO;AAAA,MAChD,MAAM,UAAU,8BAA8B,WAAW;AAAA,MACzD,MAAM,OAAO,SAAS,IAAI,QAAQ,UAAU,eAAe,MAAM,gBAAgB,QAAQ,SAAS,CAAC;AAAA,MACnG,IAAI;AAAA,MACJ,IAAI,KAAK,aAAa;AAAA,QACpB,aAAa,0BAA0B,MAAM,KAAK,YAAY,OAAO,CAAC;AAAA,MACxE,EAAO;AAAA,QACL,aAAa,EAAE,UAAU,MAAM,KAAK,KAAK;AAAA;AAAA,MAE3C,OAAO,WAAW,YAAY,oCAAoC;AAAA;AAAA,EAEtE,CAAC;AAAA,EASD,SAAS,MAAM,6BAA6B;AAAA,IAC1C,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,cAAc,cAAc,OAAO,OAAO;AAAA,MAChD,MAAM,UAAU,8BAA8B,WAAW;AAAA,MACzD,MAAM,OAAO,SAAS,IAAI,QAAQ,UAAU,eAAe,MAAM,gBAAgB,QAAQ,SAAS,CAAC;AAAA,MACnG,IAAI,CAAC,KAAK;AAAA,QAAY,OAAO,EAAE,QAAQ,KAAK;AAAA,MAC5C,MAAM,QAAQ,KAAK,WAAW,OAAO;AAAA,MACrC,IAAI,CAAC,SAAS,MAAM,WAAW;AAAA,QAAG,OAAO,EAAE,QAAQ,KAAK;AAAA,MACxD,OAAO,EAAE,QAAQ,0BAA0B,KAAK,EAAE;AAAA;AAAA,EAEtD,CAAC;AAAA,EAWD,SAAS,MAAM,oCAAoC;AAAA,IACjD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,cAAc,cAAc,OAAO,OAAO;AAAA,MAChD,MAAM,gBAAgB,aAAa,YAAY,SAAS;AAAA,MACxD,MAAM,gBAAgB,iBAAiB,aAAa;AAAA,MAEpD,MAAM,aAAa,kBAAkB,aAAa;AAAA,MAClD,MAAM,WAAW,uBAAuB,UAAU;AAAA,MAClD,MAAM,oBAAoB,aAAa,YAAY,mBAAmB;AAAA,MACtE,MAAM,iBAAiB,YAAY,mBAC/B,aAAa,YAAY,gBAAgB,IACzC;AAAA,MACJ,MAAM,OAAO,SAAS,IAAI,SAAS,eAAe,MAAM,gBAAgB,QAAQ,CAAC;AAAA,MACjF,MAAM,OAAM,KAAK,kBACb,MAAM,KAAK,gBAAgB,EAAE,UAAU,gBAAgB,kBAAkB,CAAC,IAC1E,CAAC;AAAA,MACL,MAAM,OAAO,OAAO,KAAK,IAAG;AAAA,MAC5B,MAAM,SAAS,KAAK,IAAI,CAAC,MAAM,KAAI,MAAM,EAAE;AAAA,MAC3C,OAAO,WAAW,EAAE,MAAM,OAAO,GAAG,wCAAwC;AAAA;AAAA,EAEhF,CAAC;AAAA;;;AQnUH;AAoCO,SAAS,wBAAwB,CAAC,UAAoB,UAAkC;AAAA,EAC7F,SAAS,gBAAgB,CAAC,MAAiD;AAAA,IACzE,MAAM,OAAO,SAAS,IAAI,MAAM,EAAE,WAAW,IAAI,WAAa,aAAa,MAAM,UAAU,MAAM,CAAC;AAAA,IAClG,IAAI,CAAC,QAAQ,KAAK,SAAS,aAAa;AAAA,MACtC,MAAM,IAAI,MAAM,aAAa,oCAAoC;AAAA,IACnE;AAAA,IACA,OAAO,KAAK;AAAA;AAAA,EAMd,SAAS,MAAM,kBAAkB;AAAA,IAC/B,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,cAAc,cAAc,OAAO,OAAO;AAAA,MAChD,MAAM,eAAuB,YAAY;AAAA,MACzC,MAAM,MAAM,iBAAiB,YAAY;AAAA,MACzC,MAAM,WAAW,aAAa,YAAY,SAAS;AAAA,MACnD,MAAM,OAAO,qBAAqB,QAAQ;AAAA,MAC1C,MAAM,cAAc,YAAY,eAC5B,kBAAkB,aAAa,YAAY,YAAY,CAAC,IACxD;AAAA,MAKJ,MAAM,eAAe,YAAY,UAAU,aAAa,YAAY,OAAO,IAAI;AAAA,MAC/E,MAAM,eACJ,gBAAgB,aAAa,SAAS,IAAI,iBAAiB,YAAY,IAAI;AAAA,MAC7E,MAAM,UAAU,eAAe,kBAAkB,YAAY,IAAI,CAAC;AAAA,MAClE,MAAM,aAAuC;AAAA,QAC3C,MAAM,cAAc,KAAK,IAAI;AAAA,QAC7B,WAAW;AAAA,QACX;AAAA,QACA,UAAU,CAAC;AAAA,QACX;AAAA,MACF;AAAA,MACA,MAAM,cAAc,IAAI,WAAW,EAAE;AAAA,MACrC,OAAO,gBAAgB,WAAW;AAAA,MAClC,kBAAkB,aAAa;AAAA,QAC7B,QAAQ,IAAI;AAAA,QACZ,UAAU;AAAA,QACV;AAAA,MACF,CAAC;AAAA,MAKD,MAAM,UAAU,IAAI,SAAS,MAAM,IAAI,OAAO,UAAU,IAAI,IAAI;AAAA,MAChE,MAAM,YAAY,QAAW,CAAC,OAAM,UAAU,SAAS,IAAI,CAAC,CAAC;AAAA,MAC7D,OAAO,WACL,EAAE,eAAe,gBAAgB,SAAS,GAAG,cAAc,YAAY,GACvE,yBACF;AAAA;AAAA,EAEJ,CAAC;AAAA,EAKD,SAAS,MAAM,oBAAoB;AAAA,IACjC,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,CAAC,WAAW;AAAA,MACnB,MAAM,cAAc,cAAc,OAAO,OAAO;AAAA,MAChD,MAAM,eAAuB,YAAY;AAAA,MACzC,MAAM,cAAc,aAAa,YAAY,YAAY;AAAA,MACzD,MAAM,MAAM,iBAAiB,YAAY;AAAA,MACzC,MAAM,QAAQ,gBAAgB,aAAa,YAAY,WAAW,CAAC;AAAA,MACnE,IAAI,CAAC,SAAS,MAAM,YAAY;AAAA,QAAG,OAAO,WAAW,CAAC,GAAG,QAAW,CAAC,CAAC,CAAC;AAAA,MAEvE,MAAM,SAAS,MAAM,OAAO,OAAO,UAAU,CAAC,MAAM,EAAE,SAAS,iBAAiB;AAAA,MAChF,IAAI,SAAS,GAAG;AAAA,QACd,MAAM,IAAI,MAAM,yCAAyC,0BAA0B;AAAA,MACrF;AAAA,MACA,MAAM,SAAS,MAAM,WAAW,MAAM;AAAA,MACtC,MAAM,WAAqB,CAAC;AAAA,MAC5B,MAAM,aAAa,IAAI;AAAA,MACvB,SAAS,IAAI,EAAG,IAAI,MAAM,SAAS,KAAK;AAAA,QACtC,MAAM,IAAI,OAAO,IAAI,CAAC;AAAA,QACtB,MAAM,IAAI,OAAO,MAAM,WAAW,IAAI,OAAO,CAAQ;AAAA,QACrD,SAAS,KAAK,CAAC;AAAA,QACf,WAAW,IAAI,CAAC;AAAA,MAClB;AAAA,MACA,MAAM,OAAO,kBAAkB,aAAa,UAAU;AAAA,MACtD,IAAI,CAAC,MAAM;AAAA,QACT,MAAM,IAAI,MAAM,+CAA+C,+CAA+C;AAAA,MAChH;AAAA,MAOA,MAAM,UAAiB,CAAC;AAAA,MACxB,SAAS,IAAI,EAAG,IAAI,MAAM,OAAO,OAAO,QAAQ,KAAK;AAAA,QACnD,IAAI,MAAM;AAAA,UAAQ;AAAA,QAClB,QAAQ,KAAK,MAAM,WAAW,CAAC,CAAC;AAAA,MAClC;AAAA,MACA,MAAM,cAAc,CAAC,QAAgB;AAAA,QACnC,IAAI,IAAI,KAAK,OAAO,IAAI,GAAG;AAAA,QAC3B,IAAI,MAAM,WAAW;AAAA,UACnB,IAAI,IAAI,aAAa,KAAK,UAAU;AAAA,UACpC,KAAK,OAAO,IAAI,KAAK,CAAC;AAAA,QACxB;AAAA,QACA,OAAO;AAAA;AAAA,MAET,IAAI,OAAO;AAAA,QACT,QAAQ,KAAK;AAAA,QACb;AAAA,QACA;AAAA,QACA,MAAM,KAAK,WAAW;AAAA,QACtB;AAAA,MACF,CAAC;AAAA,MAMD,mBAAmB,aAAa,UAAU;AAAA,MAC1C,OAAO,WAAW,CAAC,GAAG,QAAW,CAAC,CAAC,CAAC;AAAA;AAAA,EAExC,CAAC;AAAA,EAKD,SAAS,MAAM,qBAAqB;AAAA,IAClC,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,CAAC,WAAW;AAAA,MACnB,MAAM,cAAc,cAAc,OAAO,OAAO;AAAA,MAChD,MAAM,eAAuB,YAAY;AAAA,MACzC,MAAM,cAAc,aAAa,YAAY,YAAY;AAAA,MACzD,MAAM,MAAM,iBAAiB,YAAY;AAAA,MACzC,MAAM,QAAQ,gBAAgB,aAAa,YAAY,WAAW,CAAC;AAAA,MACnE,IAAI,CAAC,SAAS,MAAM,YAAY;AAAA,QAAG,OAAO,WAAW,CAAC,GAAG,QAAW,CAAC,CAAC,CAAC;AAAA,MAEvE,MAAM,SAAS,MAAM,SAAS,iBAAiB;AAAA,MAC/C,MAAM,SAAS,MAAM,SAAS,iBAAiB;AAAA,MAC/C,MAAM,iBAAiB,IAAI;AAAA,MAC3B,MAAM,SAAmB,CAAC;AAAA,MAC1B,MAAM,SAAmB,CAAC;AAAA,MAC1B,SAAS,IAAI,EAAG,IAAI,MAAM,SAAS,KAAK;AAAA,QACtC,MAAM,MAAM,OAAO,OAAO,IAAI,CAAC,CAAQ;AAAA,QACvC,MAAM,MAAM,OAAO,OAAO,IAAI,CAAC,CAAQ;AAAA,QACvC,OAAO,KAAK,GAAG;AAAA,QAAG,OAAO,KAAK,GAAG;AAAA,QACjC,eAAe,IAAI,GAAG;AAAA,QAAG,eAAe,IAAI,GAAG;AAAA,MACjD;AAAA,MACA,MAAM,OAAO,kBAAkB,aAAa,cAAc;AAAA,MAC1D,IAAI,CAAC,MAAM;AAAA,QACT,MAAM,IAAI,MACR,gDAAgD,mBAChD,qEACF;AAAA,MACF;AAAA,MACA,MAAM,iBAAiB,IAAI;AAAA,MAC3B,SAAS,IAAI,EAAG,IAAI,MAAM,SAAS,KAAK;AAAA,QACtC,MAAM,MAAM,OAAO;AAAA,QACnB,MAAM,MAAM,OAAO;AAAA,QACnB,MAAM,SAAS,KAAK,OAAO,IAAI,GAAG;AAAA,QAClC,MAAM,SAAS,KAAK,OAAO,IAAI,GAAG;AAAA,QAClC,IAAI,CAAC,UAAU,CAAC;AAAA,UAAQ;AAAA,QACxB,MAAM,WAAW,SAAS,KAAK,OAAO,IAAI,GAAG,IAAK,IAAI,aAAa,KAAK,UAAU;AAAA,QAClF,MAAM,WAAW,SAAS,KAAK,OAAO,IAAI,GAAG,IAAK,IAAI,aAAa,KAAK,UAAU;AAAA,QAClF,KAAK,OAAO,IAAI,KAAK,IAAI,QAAQ,UAAU,UAAU,KAAK,UAAU,CAAC;AAAA,QACrE,eAAe,IAAI,GAAG;AAAA,MACxB;AAAA,MACA,mBAAmB,aAAa,cAAc;AAAA,MAC9C,OAAO,WAAW,CAAC,GAAG,QAAW,CAAC,CAAC,CAAC;AAAA;AAAA,EAExC,CAAC;AAAA,EAKD,SAAS,MAAM,sBAAsB;AAAA,IACnC,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,CAAC,WAAW;AAAA,MACnB,MAAM,cAAc,cAAc,OAAO,OAAO;AAAA,MAChD,MAAM,eAAuB,YAAY;AAAA,MACzC,MAAM,cAAc,aAAa,YAAY,YAAY;AAAA,MACzD,MAAM,MAAM,iBAAiB,YAAY;AAAA,MACzC,MAAM,eAAe,kBAAkB,aAAa,YAAY,aAAa,CAAC;AAAA,MAC9E,MAAM,WAAW,gBAAgB,aAAa,YAAY,eAAe,CAAC;AAAA,MAC1E,MAAM,WAAqB,CAAC;AAAA,MAC5B,MAAM,aAAa,IAAI;AAAA,MACvB,IAAI,UAAU;AAAA,QACZ,MAAM,MAAM,SAAS,SAAS,UAAU;AAAA,QACxC,SAAS,IAAI,EAAG,IAAI,SAAS,SAAS,KAAK;AAAA,UACzC,MAAM,IAAI,IAAI,IAAI,CAAC;AAAA,UACnB,MAAM,IAAI,OAAO,MAAM,WAAW,IAAI,OAAO,CAAQ;AAAA,UACrD,SAAS,KAAK,CAAC;AAAA,UACf,WAAW,IAAI,CAAC;AAAA,QAClB;AAAA,MACF;AAAA,MACA,MAAM,OAAO,kBAAkB,aAAa,UAAU;AAAA,MACtD,IAAI,CAAC,MAAM;AAAA,QACT,MAAM,IAAI,MAAM,iDAAiD,eAAe;AAAA,MAClF;AAAA,MAGA,MAAM,SAAS,IAAI;AAAA,MACnB,WAAW,OAAO,UAAU;AAAA,QAC1B,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI,GAAG,IAAI,KAAK,OAAO,IAAI,GAAG,IAAI,IAAI;AAAA,MACpE;AAAA,MACA,MAAM,cAAc,IAAI,SAAS;AAAA,QAC/B;AAAA,QAAU;AAAA,QAAQ;AAAA,QAAc,MAAM,KAAK,WAAW;AAAA,MACxD,CAAC;AAAA,MACD,OAAO,WACL,EAAE,cAAc,yBAAyB,WAAW,EAAE,GACtD,6BACF;AAAA;AAAA,EAEJ,CAAC;AAAA,EAWD,SAAS,MAAM,wBAAwB;AAAA,IACrC,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,CAAC,WAAW;AAAA,MACnB,MAAM,cAAc,cAAc,OAAO,OAAO;AAAA,MAChD,MAAM,cAAc,aAAa,YAAY,YAAY;AAAA,MACzD,MAAM,OAAO,kBAAkB,WAAW;AAAA,MAC1C,IAAI,CAAC;AAAA,QAAM,OAAO,WAAW,CAAC,GAAG,QAAW,CAAC,CAAC,CAAC;AAAA,MAC/C,MAAM,WAAW,gBAAgB,aAAa,YAAY,eAAe,CAAC;AAAA,MAC1E,IAAI,CAAC,YAAY,SAAS,YAAY;AAAA,QAAG,OAAO,WAAW,CAAC,GAAG,QAAW,CAAC,CAAC,CAAC;AAAA,MAC7E,MAAM,MAAM,SAAS,SAAS,UAAU;AAAA,MACxC,MAAM,SAAS,IAAI;AAAA,MACnB,SAAS,IAAI,EAAG,IAAI,SAAS,SAAS,KAAK;AAAA,QACzC,MAAM,IAAI,IAAI,IAAI,CAAC;AAAA,QACnB,MAAM,IAAI,OAAO,MAAM,WAAW,IAAI,OAAO,CAAQ;AAAA,QACrD,KAAK,OAAO,OAAO,CAAC;AAAA,QACpB,OAAO,IAAI,CAAC;AAAA,MACd;AAAA,MAGA,mBAAmB,aAAa,MAAM;AAAA,MACtC,OAAO,WAAW,CAAC,GAAG,QAAW,CAAC,CAAC,CAAC;AAAA;AAAA,EAExC,CAAC;AAAA;AAGH,SAAS,aAAa,CACpB,KACA,MACqB;AAAA,EACrB,MAAM,MAA2B,CAAC;AAAA,EAKlC,MAAM,WAAW,IAAI,IAAI,IAAI,eAAe,CAAC,CAAC;AAAA,EAC9C,MAAM,aAAuB,CAAC;AAAA,EAC9B,IAAI,IAAI,MAAM;AAAA,IACZ,WAAW,QAAQ,OAAO,KAAK,IAAI,IAAI,GAAG;AAAA,MACxC,IAAI,SAAS,IAAI,IAAI;AAAA,QAAG,WAAW,KAAK,IAAI;AAAA,IAC9C;AAAA,EACF;AAAA,EACA,SAAS,IAAI,EAAG,IAAI,WAAW,QAAQ,KAAK;AAAA,IAC1C,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,IAAI,KAAK,IAAI,CAAC;AAAA,MAId,MAAM,SAAQ,KAAK,iBAAiB,OAAO,KAAK,OAAK,EAAE,SAAS,cAAc,GAAG;AAAA,MACjF,IAAI,UAAS,UAAU,OAAM,IAAI,GAAG;AAAA,QAClC,MAAM,QAAS,OAAM,KAAa;AAAA,QAClC,IAAI,OAAO,MAAM;AAAA,UAAU,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK;AAAA,QACxD,SAAI,OAAO,MAAM;AAAA,UAAU,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK;AAAA,MAC5D,EAAO,SAAI,OAAO,MAAM,UAAU;AAAA,QAChC,IAAI,OAAO,CAAC;AAAA,MACd;AAAA,MACA,MAAM;AAAA,MAIN,MAAM,MAAM,IAAI,cAAc,WAAW;AAAA,MACzC,IAAI,QAAQ;AAAA,QAAW,IAAI,WAAW,MAAM;AAAA,MAC5C;AAAA;AAAA,IAKF,MAAM,cAAc,IAAI,iBAAiB,WAAW;AAAA,IACpD,IAAI,gBAAgB,WAAW;AAAA,MAC7B,yBAAyB,WAAW,IAAI,aAAa,CAAC;AAAA,IACxD;AAAA,IACA,IAAI,WAAW,MAAM;AAAA,EACvB;AAAA,EAGA,IAAI,IAAI,aAAa;AAAA,IACnB,YAAY,MAAM,QAAQ,OAAO,QAAQ,IAAI,WAAW,GAAG;AAAA,MACzD,IAAI,EAAE,QAAQ,QAAQ,CAAC,SAAS,IAAI,IAAI;AAAA,QAAG,IAAI,QAAQ;AAAA,IACzD;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,eAAe,CAAC,OAAoC;AAAA,EAC3D,IAAI,CAAC,SAAS,MAAM,WAAW;AAAA,IAAG,OAAO;AAAA,EACzC,MAAM,QAAQ,iBAAiB,KAAK;AAAA,EACpC,OAAO,MAAM,YAAY,KAAK,MAAM,OAAO,OAAO,WAAW,IAAI,OAAO;AAAA;AAG1E,SAAS,wBAAwB,CAAC,OAA6B;AAAA,EAG7D,OAAO,eAAe,KAAK;AAAA;;;AChW7B;AAiBA;AAYO,SAAS,6BAA6B,CAC3C,UACA,UACA,YACM;AAAA,EACN,SAAS,gBAAgB,CAAC,MAAyC;AAAA,IACjE,MAAM,OAAO,SAAS,IAAI,MAAM;AAAA,MAC9B,WAAW,IAAI;AAAA,MACf,aAAa;AAAA,MACb,UAAU;AAAA,IACZ,CAAC;AAAA,IACD,IAAI,CAAC,QAAQ,KAAK,SAAS,mBAAmB;AAAA,MAC5C,MAAM,IAAI,MAAM,aAAa,yCAAyC;AAAA,IACxE;AAAA,IACA,OAAO;AAAA;AAAA,EAIT,eAAe,UAAU,CACvB,OACA,WACA,KACiF;AAAA,IACjF,MAAM,eAAuB,MAAM;AAAA,IACnC,MAAM,cAAc,aAAa,MAAM,YAAY;AAAA,IAMnD,MAAM,YAAY,MAAM,qBAAqB,aAAa,MAAM,kBAAkB,IAAI;AAAA,IACtF,MAAM,SACJ,aAAa,UAAU,SAAS,IAC5B,MAAM,WAAW,WAAW,KAAK,MAAM,UAAU,IACjD;AAAA,IACN,MAAM,gBAAgB,MAAM,iBAAiB,aAAa,MAAM,cAAc,IAAI;AAAA,IAElF,MAAM,OAAO,iBAAiB,YAAY;AAAA,IAC1C,MAAM,QAAQ,IAAI,aAAa,SAAgB,WAAW;AAAA,IAC1D,MAAM,UAAU,MAAM,MAAM,SAC1B,YAAY,gBACZ,aAAa,WAAW,EAAE,CAC5B;AAAA,IACA,IAAI,WAAW,MAAM;AAAA,MACnB,MAAM,IAAI,MACR,yCAAyC,IAAI,WAAW,OACtD,8CACJ;AAAA,IACF;AAAA,IACA,QAAQ,YAAY,oBAAoB,OAAO;AAAA,IAC/C,MAAM,OAAO,KAAK,qBAAqB,QAAQ,SAAS;AAAA,IACxD,MAAM,WAAW,kBAAkB,QAAQ,UAAU,QAAQ;AAAA,IAC7D,MAAM,UAAU,kBAAkB,QAAQ,UAAU,OAAO;AAAA,IAE3D,MAAM,SAAoC;AAAA,MACxC;AAAA,MACA,UAAU;AAAA,MACV,cAAc,QAAQ;AAAA,MACtB;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA,UAAU,UAAU,IAAI,WAAW,CAAC;AAAA,MACpC;AAAA,MACA,eAAe;AAAA,MACf,YAAY;AAAA,MACZ;AAAA,IACF;AAAA,IACA,OAAO,EAAE,MAAM,OAAO;AAAA;AAAA,EAMxB,SAAS,MAAM,2BAA2B;AAAA,IACxC,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW,QAAc;AAAA,MACvC,MAAM,QAAQ,cAAc,UAAU,OAAO;AAAA,MAC7C,MAAM,YAAY,cAAc,GAAG;AAAA,MACnC,QAAQ,MAAM,WAAW,MAAM,WAAW,OAAO,WAAW,GAAG;AAAA,MAC/D,IAAI,MAAM,eAAe,MAAM;AAAA,QAC7B,OAAO,aAAa,OAAO,MAAM,WAAW;AAAA,MAC9C;AAAA,MACA,MAAM,QAAQ,iBAAiB,aAAa,MAAM,WAAW,CAAC;AAAA,MAC9D,MAAM,UAAU,MAAM,KAAK,gBAAgB,QAAQ,OAAO,MAAM;AAAA,MAChE,IAAI,EAAE,mBAAmB,aAAa;AAAA,QACpC,MAAM,IAAI,MACR,GAAG,KAAK,KAAK,6DACf;AAAA,MACF;AAAA,MACA,OAAO,WAAW,EAAE,UAAU,QAAQ,GAAG,iCAAiC;AAAA;AAAA,EAE9E,CAAC;AAAA,EAKD,SAAS,MAAM,2BAA2B;AAAA,IACxC,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW,QAAc;AAAA,MACvC,MAAM,QAAQ,cAAc,UAAU,OAAO;AAAA,MAC7C,MAAM,YAAY,cAAc,GAAG;AAAA,MACnC,QAAQ,MAAM,WAAW,MAAM,WAAW,OAAO,WAAW,GAAG;AAAA,MAC/D,MAAM,WAAW,gBAAgB,MAAM,SAAS;AAAA,MAChD,MAAM,mBAAmB,MAAM,KAAK,gBAAgB,QAAQ,UAAU,MAAM;AAAA,MAC5E,MAAM,MAAM,iBAAiB,IAAI,CAAC,KAAK,MAAM;AAAA,QAC3C,IAAI,EAAE,eAAe,aAAa;AAAA,UAChC,MAAM,IAAI,MACR,GAAG,KAAK,KAAK,qEAAqE,GACpF;AAAA,QACF;AAAA,QACA,OAAO;AAAA,OACR;AAAA,MACD,OAAO,WACL,EAAE,oBAAoB,IAAI,GAC1B,iCACF;AAAA;AAAA,EAEJ,CAAC;AAAA,EAKD,SAAS,MAAM,8BAA8B;AAAA,IAC3C,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,cAAc;AAAA,MAC5B,IAAI;AAAA,QACF,MAAM,QAAQ,cAAc,UAAU,OAAO;AAAA,QAC7C,MAAM,cAAc,aAAa,MAAM,YAAY;AAAA,QACnD,MAAM,QAAQ,IAAI,aAAa,SAAgB,WAAW;AAAA,QAC1D,MAAM,MAAM,eAAe;AAAA,QAC3B,MAAM;AAAA,MAGR,OAAO,WAAW,CAAC,GAAG,oCAAoC;AAAA;AAAA,EAE9D,CAAC;AAAA;AAGH,SAAS,aAAa,CAAC,KAAoD;AAAA,EACzE,IAAI,OAAO,OAAO,IAAI,cAAc,YAAY;AAAA,IAC9C,OAAO,CAAC,OAAe,YAAoB,IAAI,UAAU,OAAO,OAAO;AAAA,EACzE;AAAA,EACA,OAAO,MAAM;AAAA;AAGf,SAAS,eAAe,CAAC,KAAwB;AAAA,EAC/C,IAAI,OAAO;AAAA,IAAM,OAAO,CAAC;AAAA,EACzB,MAAM,MAAoB,CAAC;AAAA,EAC3B,MAAM,OAAsB,MAAM,QAAQ,GAAG,IACzC,MACA,OAAO,IAAI,OAAO,cAAc,aAChC,MACA,CAAC;AAAA,EACL,WAAW,SAAS,MAAM;AAAA,IACxB,IAAI,SAAS;AAAA,MAAM;AAAA,IACnB,IAAI,KAAK,aAAa,KAAK,CAAC;AAAA,EAC9B;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,GAAG,CAAC,KAAyB;AAAA,EACpC,OAAO,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAAA;;;ACzMxE;AAqCO,SAAS,2BAA2B,CAAC,UAAoB,YAAwB,YAA+B;AAAA,EAErH,aAAa,UAAU,YAAY,oBAAoB;AAAA,IACrD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,YAAY;AAAA,MACnB,MAAM,MAAM,WAAW;AAAA,MAKvB,MAAM,QAAQ,IAAI,eACd,MAAM,IAAI,aAAa,IACvB,IAAI,SAAS,EAAE,IAAI,CAAC,UAAU;AAAA,QAC5B;AAAA,QACA,wBAAwB;AAAA,QACxB,mBAAmB;AAAA,QACnB,qBAAqB,CAAC;AAAA,QACtB,UAAU,CAAC;AAAA,MACb,EAAE;AAAA,MACN,MAAM,QAAQ,MAAM,IAAI,CAAC,SAAS,kBAAkB,IAAI,CAAC;AAAA,MACzD,OAAO,WAAW,EAAE,MAAM,GAAG,2BAA2B;AAAA;AAAA,EAE5D,CAAC;AAAA,EAGD,SAAS,MAAM,kBAAkB;AAAA,IAC/B,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,QAAQ,QAAQ;AAAA,MAC9B,MAAM,cAAc,cAAc,OAAO,OAAO;AAAA,MAChD,MAAM,MAAM,WAAW;AAAA,MAKvB,MAAM,cAAc,mBAAmB,YAAY,OAAO;AAAA,MAC1D,MAAM,SAAS,MAAM,IAAI,OACvB,YAAY,MACZ,aACA,YAAY,qBAAqB,MACjC,YAAY,0BAA0B,IACxC;AAAA,MAIA,MAAM,eAAe,MAAM,WACzB,aAAa,OAAO,kBAAkB,GACrC,KAAiC,MAClC,UACF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,oBAAoB;AAAA,QACpB,uBAAuB,OAAO;AAAA,QAC9B,sBAAsB,OAAO;AAAA,QAC7B,wBAAwB,OAAO;AAAA,QAC/B,iBAAiB,OAAO;AAAA,QACxB,6BAA6B,OAAO,+BAA+B;AAAA,QACnE,gBAAgB,OAAO,kBAAkB;AAAA,QACzC,UAAU,OAAO,YAAY,CAAC;AAAA,QAC9B,cAAc,OAAO,gBAAgB,CAAC;AAAA,QACtC,iBAAiB,OAAO,mBAAmB,CAAC;AAAA,QAC5C,SAAS,OAAO,WAAW;AAAA,QAC3B,MAAM,OAAO,QAAQ,CAAC;AAAA,QAKtB,4BAA4B,OAAO,8BAA8B;AAAA,QACjE,uBAAuB,OAAO,yBAAyB;AAAA,QACvD,iCAAiC,OAAO,mCAAmC;AAAA,MAC7E,GAAG,yBAAyB;AAAA;AAAA,EAEhC,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,kBAAkB;AAAA,IACnD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,OAAO,aAAa,OAAO,kBAAkB,CAAC;AAAA,MACxD,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,kBAAkB;AAAA,IACnD,QAAQ,QAAO;AAAA,MACb,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,WAAW,QAAO,GAAG,IAAI;AAAA,IACjC,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,OAAO,OAAO,MAAM,OAAO,aAAa,OAAO,OAAO;AAAA,MAChE,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,gBAAgB;AAAA,IACjD,QAAQ,QAAO,CAAC,OAAM,QAAQ,MAAK,GAAG,KAAK,CAAC,CAAC;AAAA,IAC7C,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,KAAK,OAAO,IAAI;AAAA,MAC1B,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,mBAAmB;AAAA,IACpD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,UAAU,MAAM,IAAI,QACxB,aAAa,OAAO,kBAAkB,GACtC,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW,EAAE,QAAQ,GAAG,0BAA0B;AAAA;AAAA,EAE7D,CAAC;AAAA,EAKD,SAAS,MAAM,6BAA6B;AAAA,IAC1C,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,QAAQ,QAAQ;AAAA,MAC9B,MAAM,OAAQ,KAAiC;AAAA,MAC/C,MAAM,eACJ,OAAO,sBAAsB,OAAO,aAAa,OAAO,kBAAkB,IAAI,IAAI,WAAW,CAAC;AAAA,MAChG,MAAM,cAAc,MAAM,WAAW,cAAc,MAAM,UAAU;AAAA,MACnE,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,UAAU,MAAM,IAAI,iBAAiB,WAAW;AAAA,MAGtD,MAAM,0BACJ,WAAW,OAAO,MAAM,gBAAgB,aAAa,OAAO,GAAG,cAAc,MAAM,UAAU,IAAI;AAAA,MACnG,OAAO,WAAW,EAAE,wBAAwB,GAAG,mCAAmC;AAAA;AAAA,EAEtF,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,8BAA8B;AAAA,IAC/D,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,kBACR,aAAa,OAAO,kBAAkB,GACtC,aAAa,OAAO,uBAAuB,CAC7C;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,gCAAgC;AAAA,IACjE,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,oBACR,aAAa,OAAO,kBAAkB,GACtC,aAAa,OAAO,uBAAuB,CAC7C;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,mBAAmB;AAAA,IACpD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,UAAU,MAAM,IAAI,QACxB,aAAa,OAAO,kBAAkB,GACtC,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,OAAO,QAAQ,IAAI,CAAC,MAAM,iBAAiB,CAAC,CAAC;AAAA,MAC/C,GAAG,0BAA0B;AAAA;AAAA,EAEjC,CAAC;AAAA,EAID,aAAa,UAAU,YAAY,6BAA6B;AAAA,IAC9D,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,UAAU,MAAM,IAAI,gBACxB,aAAa,OAAO,kBAAkB,GACtC,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,OAAO,QAAQ,IAAI,CAAC,MAAM,yBAAyB,CAAC,CAAC;AAAA,MACvD,GAAG,kCAAkC;AAAA;AAAA,EAEzC,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,sBAAsB;AAAA,IACvD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,OAAO,MAAM,IAAI,UACrB,aAAa,OAAO,kBAAkB,GACtC,OAAO,MACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,OAAO,OAAO,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC;AAAA,MAC5C,GAAG,4BAA4B;AAAA;AAAA,EAEnC,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,yBAAyB;AAAA,IAC1D,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,WAAW,MAAK,GAAG,IAAI;AAAA,MAC7B,OAAM,QAAQ,QAAO,GAAG,IAAI;AAAA,MAC5B,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,aACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,MACP,OAAO,SACP,MACA,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,uBAAuB;AAAA,IACxD,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,oBAAoB,MAAK,GAAG,IAAI;AAAA,MACtC,OAAM,WAAW,MAAK,GAAG,IAAI;AAAA,MAC7B,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,WACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,MACP,OAAO,kBACP,OAAO,SACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,kCAAkC;AAAA,IACnE,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,SAAS,MAAM,IAAI,qBACvB,aAAa,OAAO,kBAAkB,GACtC,OAAO,MACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,OAAO,OAAO,IAAI,CAAC,MAAM,gBAAgB,CAAC,CAAC;AAAA,MAC7C,GAAG,uCAAuC;AAAA;AAAA,EAE9C,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,iCAAiC;AAAA,IAClE,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,QAAQ,MAAM,IAAI,oBACtB,aAAa,OAAO,kBAAkB,GACtC,OAAO,MACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,OAAO,MAAM,IAAI,CAAC,MAAM,eAAe,CAAC,CAAC;AAAA,MAC3C,GAAG,sCAAsC;AAAA;AAAA,EAE7C,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,qCAAqC;AAAA,IACtE,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,QAAQ,MAAM,IAAI,wBACtB,aAAa,OAAO,kBAAkB,GACtC,OAAO,MACP,gBAAgB,OAAO,IAAI,GAC3B,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,OAAO,MAAM,IAAI,CAAC,MAAM,mBAAmB,CAAC,CAAC;AAAA,MAC/C,GAAG,0CAA0C;AAAA;AAAA,EAEjD,CAAC;AAAA;;;AC3WH;AAwBO,SAAS,2BAA2B,CAAC,UAAoB,YAAwB,YAA+B;AAAA,EAErH,aAAa,UAAU,YAAY,qBAAqB;AAAA,IACtD,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,WAAW,MAAK,GAAG,IAAI;AAAA,MAC7B,OAAM,YAAY,MAAK,GAAG,IAAI;AAAA,MAC9B,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,OAAO,MAAM,IAAI,SACrB,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,SACP,OAAO,UACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,OAAO,OAAO,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC;AAAA,MAC3C,GAAG,2BAA2B;AAAA;AAAA,EAElC,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,wBAAwB;AAAA,IACzD,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,WAAW,QAAO,GAAG,KAAK;AAAA,MAChC,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,wBAAwB,MAAK,OAAM,QAAQ,OAAM,GAAG,KAAK,CAAC,GAAG,IAAI;AAAA,MACvE,OAAM,sBAAsB,MAAK,OAAM,QAAQ,MAAK,OAAM,QAAQ,OAAM,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI;AAAA,MACjG,OAAM,qBAAqB,MAAK,OAAM,QAAQ,MAAK,GAAG,KAAK,CAAC,GAAG,IAAI;AAAA,MACnE,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,YACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,aAAa,OAAO,OAAO,GAC3B,OAAO,aACP,OAAO,wBAAwB,CAAC,GAChC,OAAO,sBAAsB,CAAC,GAC9B,OAAO,qBAAqB,CAAC,GAC7B,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,sBAAsB;AAAA,IACvD,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,oBAAoB,MAAK,GAAG,IAAI;AAAA,MACtC,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,UACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,uCAAuC;AAAA,IACxE,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,QAAQ,MAAM,IAAI,yBACtB,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,EAAE,QAAQ,OAAO,SAAS,KAAK;AAAA;AAAA,EAE1C,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,mCAAmC;AAAA,IACpE,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,WAAW,MAAK,GAAG,IAAI;AAAA,MAC7B,OAAM,YAAY,MAAK,GAAG,IAAI;AAAA,MAC9B,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,aAAa,MAAM,IAAI,qBAC3B,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,SACP,OAAO,UACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW,YAAY,wBAAwB;AAAA;AAAA,EAE1D,CAAC;AAAA,EAKD,aAAa,UAAU,YAAY,mCAAmC;AAAA,IACpE,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,WAAW,MAAK,GAAG,IAAI;AAAA,MAC7B,OAAM,YAAY,MAAK,GAAG,IAAI;AAAA,MAC9B,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,iBAAiB,MAAM,IAAI,qBAC/B,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,SACP,OAAO,UACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW,gBAAgB,wBAAwB;AAAA;AAAA,EAE9D,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,6BAA6B;AAAA,IAC9D,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,gBACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,SACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,wBAAwB;AAAA,IACzD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,YACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,UACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,4BAA4B;AAAA,IAC7D,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,iBAAiB,MAAK,GAAG,IAAI;AAAA,MACnC,OAAM,oBAAoB,MAAK,GAAG,IAAI;AAAA,MACtC,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,eACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,aACP,OAAO,aACP,OAAO,eACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,6BAA6B;AAAA,IAC9D,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,gBACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,aACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,+BAA+B;AAAA,IAChE,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,YAAY,MAAK,GAAG,KAAK;AAAA,MAC/B,OAAM,oBAAoB,MAAK,GAAG,IAAI;AAAA,MACtC,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,kBACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,aACP,OAAO,UACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,oCAAoC;AAAA,IACrE,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,iBAAiB,MAAK,GAAG,KAAK;AAAA,MACpC,OAAM,oBAAoB,MAAK,GAAG,IAAI;AAAA,MACtC,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,sBACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,aACP,OAAO,eACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,qCAAqC;AAAA,IACtE,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,uBACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,aACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,oCAAoC;AAAA,IACrE,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,YAAY,MAAK,GAAG,KAAK;AAAA,MAC/B,OAAM,oBAAoB,MAAK,GAAG,IAAI;AAAA,MACtC,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,sBACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,aACP,OAAO,UACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,8BAA8B;AAAA,IAC/D,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,gBACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,aACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,+BAA+B;AAAA,IAChE,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,iBACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,aACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA;;;AC5YH;AAmBO,SAAS,0BAA0B,CAAC,UAAoB,YAAwB,YAA+B;AAAA,EAEpH,aAAa,UAAU,YAAY,oBAAoB;AAAA,IACrD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,OAAO,MAAM,IAAI,QACrB,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,OAAO,OAAO,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC;AAAA,MAC1C,GAAG,0BAA0B;AAAA;AAAA,EAEjC,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,uBAAuB;AAAA,IACxD,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,cAAc,MAAK,GAAG,KAAK;AAAA,MACjC,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,WACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,YACP,OAAO,aACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,qBAAqB;AAAA,IACtD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,SACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,uBAAuB;AAAA,IACxD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,WACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,UACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,4BAA4B;AAAA,IAC7D,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,eACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,SACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA;;;AClHH;AAuBO,SAAS,2BAA2B,CAAC,UAAoB,YAAwB,YAA+B;AAAA,EAErH,aAAa,UAAU,YAAY,qBAAqB;AAAA,IACtD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,OAAO,MAAM,IAAI,SACrB,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,OAAO,OAAO,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC;AAAA,MAC3C,GAAG,2BAA2B;AAAA;AAAA,EAElC,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,wBAAwB;AAAA,IACzD,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,cAAc,cAAc,OAAO,OAAO;AAAA,MAChD,MAAM,IAAI,YACR,aAAa,YAAY,kBAAkB,GAC3C,YAAY,aACZ,YAAY,MACZ,YAAY,YACZ,YAAY,aAAc,MAAM,QAAQ,YAAY,UAAU,IAAI,YAAY,aAAa,CAAC,GAAG,YAAY,UAAU,IAAK,CAAC,GAC3H,YAAY,YACZ,YAAY,aACZ,YAAY,2BAA2B,aAAa,YAAY,wBAAwB,IAAI,MAC5F,YAAY,mBAAmB,aAAa,YAAY,gBAAgB,IAAI,MAC5E,YAAY,0BAA0B,aAAa,YAAY,uBAAuB,IAAI,SAC5F;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,sBAAsB;AAAA,IACvD,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,oBAAoB,MAAK,GAAG,IAAI;AAAA,MACtC,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,IAAI,UACR,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,kBACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,CAAC;AAAA;AAAA,EAEZ,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,kCAAkC;AAAA,IACnE,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,SAAS,MAAM,IAAI,qBACvB,aAAa,OAAO,kBAAkB,GACtC,OAAO,MACP,gBAAgB,OAAO,IAAI,GAC3B,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,OAAO,OAAO,IAAI,CAAC,MAAM,gBAAgB,CAAC,CAAC;AAAA,MAC7C,GAAG,uCAAuC;AAAA;AAAA,EAE9C,CAAC;AAAA;;;AC7GH;AAiBO,SAAS,2BAA2B,CAAC,UAAoB,YAAwB,YAA+B;AAAA,EAErH,aAAa,UAAU,YAAY,mCAAmC;AAAA,IACpE,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,UAAU,MAAM,IAAI,sBACxB,aAAa,OAAO,kBAAkB,GACtC,OAAO,MACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,OAAO,QAAQ,IAAI,CAAC,MAAM,gBAAgB,CAAC,CAAC;AAAA,MAC9C,GAAG,wCAAwC;AAAA;AAAA,EAE/C,CAAC;AAAA,EAGD,aAAa,UAAU,YAAY,qBAAqB;AAAA,IACtD,QAAQ,QAAO;AAAA,MACb,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,QAAQ;AAAA,IACR,SAAS,OAAO,WAAW;AAAA,MACzB,MAAM,MAAM,WAAW;AAAA,MACvB,MAAM,OAAO,MAAM,IAAI,SACrB,aAAa,OAAO,kBAAkB,GACtC,OAAO,aACP,OAAO,MACP,OAAO,0BAA0B,aAAa,OAAO,uBAAuB,IAAI,SAClF;AAAA,MACA,OAAO,WAAW;AAAA,QAChB,OAAO,OAAO,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC;AAAA,MAC3C,GAAG,2BAA2B;AAAA;AAAA,EAElC,CAAC;AAAA;;;ACnDI,SAAS,sBAAsB,CACpC,UACA,SACA,cACA,YACM;AAAA,EACN,MAAM,aAAa,eAAe,OAAO;AAAA,EACzC,4BAA4B,UAAU,YAAY,UAAU;AAAA,EAC5D,4BAA4B,UAAU,YAAY,UAAU;AAAA,EAC5D,2BAA2B,UAAU,YAAY,UAAU;AAAA,EAC3D,4BAA4B,UAAU,YAAY,UAAU;AAAA,EAC5D,4BAA4B,UAAU,YAAY,UAAU;AAAA;;;AhBevD,SAAS,gBAAgB,CAAC,QAAkC;AAAA,EACjE,MAAM,WAAW,IAAI,SAAS,KAAK;AAAA,EAEnC,wBAAwB,UAAU;AAAA,IAChC,UAAU,OAAO;AAAA,IACjB,sBAAsB,OAAO;AAAA,IAC7B,YAAY,OAAO;AAAA,IACnB,kBAAkB,OAAO;AAAA,EAC3B,CAAC;AAAA,EACD,yBAAyB,UAAU,OAAO,QAAQ;AAAA,EAClD,8BAA8B,UAAU,OAAO,UAAU,OAAO,UAAU;AAAA,EAC1E,uBAAuB,UAAU,OAAO,kBAAkB,OAAO,aAAa,OAAO,UAAU;AAAA,EAE/F,OAAO;AAAA;;AiBnCT;AA+BO,IAAM,yBAAyB;AAC/B,IAAM,cAAc;AAyB3B,IAAM,cAAsC;AAAA,EAC1C,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,oBAAoB;AACtB;AACA,IAAM,eAAe;AAOrB,SAAS,YAAY,CAAC,MAA2B;AAAA,EAC/C,IAAI,OAAO,IAAI;AAAA,IAAG,OAAO;AAAA,EACzB,IAAI,OAAO,IAAI;AAAA,IAAG,OAAO;AAAA,EACzB,IAAI,SAAS,IAAI;AAAA,IAAG,OAAO;AAAA,EAC3B,IAAI,OAAO,IAAI;AAAA,IAAG,OAAO;AAAA,EACzB,IAAI,MAAM,IAAI,GAAG;AAAA,IACf,MAAM,KAAM,KAA+B,YAAY;AAAA,IACvD,OAAO,OAAO,KAAK,WAAW;AAAA,EAChC;AAAA,EACA,IAAI,QAAQ,IAAI,GAAG;AAAA,IACjB,MAAM,YAAa,KAAgC,aAAa;AAAA,IAChE,OAAO,cAAc,IAAI,UAAU;AAAA,EACrC;AAAA,EACA,MAAM,IAAK,KAAqC,WAAW;AAAA,EAC3D,OAAO,KAAK,OAAO,KAAK,MAAM;AAAA;AAUhC,SAAS,eAAe,CAAC,MAA2B;AAAA,EAClD,IAAI,OAAO,IAAI;AAAA,IAAG,OAAO;AAAA,EACzB,IAAI,OAAO,IAAI;AAAA,IAAG,OAAO;AAAA,EACzB,IAAI,OAAO,IAAI;AAAA,IAAG,OAAO;AAAA,EACzB,IAAI,SAAS,IAAI;AAAA,IAAG,OAAO;AAAA,EAC3B,IAAI,MAAM,IAAI,GAAG;AAAA,IACf,MAAM,KAAM,KAA+B,YAAY;AAAA,IACvD,MAAM,SACH,KAAgC,YAAa,KAA8B,UAAU;AAAA,IACxF,OAAO,GAAG,SAAS,KAAK,SAAS;AAAA,EACnC;AAAA,EACA,IAAI,QAAQ,IAAI,GAAG;AAAA,IACjB,MAAM,YAAa,KAAgC,aAAa;AAAA,IAChE,OAAO,cAAc,IAAI,cAAc,cAAc,IAAI,UAAU;AAAA,EACrE;AAAA,EACA,MAAM,IAAK,KAAqC,WAAW;AAAA,EAC3D,QAAQ,KAAK,OAAO,KAAK,MAAM,GAAG,YAAY;AAAA;AAGhD,SAAS,SAAS,CAAC,QAAiB,KAAiC;AAAA,EACnE,OAAO,OAAM,SAAS,IAAI,GAAG;AAAA;AAS/B,SAAS,aAAa,CAAC,QAA6B;AAAA,EAClD,MAAM,MAAkB,EAAE,MAAM,OAAM,MAAM,MAAM,aAAa,OAAM,IAAI,EAAE;AAAA,EAC3E,MAAM,UAAU,UAAU,QAAO,SAAS,KAAK,UAAU,QAAO,WAAW;AAAA,EAC3E,IAAI;AAAA,IAAS,IAAI,UAAU;AAAA,EAC3B,OAAO;AAAA;AAGT,SAAS,cAAc,CAAC,OAAsC;AAAA,EAC5D,IAAI,CAAC,SAAS,MAAM,WAAW;AAAA,IAAG,OAAO;AAAA,EACzC,IAAI;AAAA,IACF,OAAO,kBAAkB,KAAK;AAAA,IAC9B,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;AASX,SAAS,mBAAmB,CAAC,IAAqE;AAAA,EAChG,MAAM,IAAI,OAAO,GAAG,aAAa,EAAE,YAAY;AAAA,EAC/C,IAAI,MAAM;AAAA,IAAU,OAAO;AAAA,EAC3B,IAAI,MAAM;AAAA,IAAa,OAAO;AAAA,EAC9B,IAAI,GAAG;AAAA,IAAc,OAAO;AAAA,EAC5B,OAAO;AAAA;AAGT,SAAS,eAAe,CAAC,IAAsC;AAAA,EAC7D,MAAM,UAAS,eAAe,GAAG,aAAa;AAAA,EAC9C,IAAI,YAAW,QAAQ,QAAO,OAAO,WAAW;AAAA,IAAG;AAAA,EACnD,MAAM,IAAI,OAAO,GAAG,aAAa,EAAE,YAAY;AAAA,EAC/C,IAAI,MAAM,YAAY,MAAM,aAAa;AAAA,IAEvC,OAAO,aAAa,QAAO,OAAO,GAAG,IAAI;AAAA,EAC3C;AAAA,EACA,MAAM,OAAO,QAAO,OAAO,IAAI,CAAC,MAAM,GAAG,EAAE,QAAQ,aAAa,EAAE,IAAI,GAAG,EAAE,KAAK,IAAI;AAAA,EACpF,OAAO,SAAS;AAAA;AAWlB,SAAS,YAAY,CAAC,IAA6B;AAAA,EACjD,MAAM,UAAS,eAAe,GAAG,SAAS;AAAA,EAC1C,IAAI,YAAW;AAAA,IAAM,OAAO,CAAC;AAAA,EAC7B,MAAM,OAAkB,CAAC;AAAA,EACzB,WAAW,UAAS,QAAO,QAAQ;AAAA,IAGjC,IAAI,UAAU,QAAO,YAAY,MAAM;AAAA,MAAgB;AAAA,IACvD,MAAM,MAAe,EAAE,MAAM,OAAM,MAAM,MAAM,aAAa,OAAM,IAAI,EAAE;AAAA,IACxE,IAAI,UAAU,QAAO,WAAW,MAAM;AAAA,MAAe,IAAI,QAAQ;AAAA,IACjE,MAAM,MAAM,UAAU,QAAO,WAAW;AAAA,IACxC,IAAI;AAAA,MAAK,IAAI,OAAO;AAAA,IACpB,MAAM,aAAa,UAAU,QAAO,eAAe;AAAA,IACnD,IAAI,eAAe,WAAW;AAAA,MAE5B,IAAI;AAAA,QACF,IAAI,UAAU,KAAK,UAAU,KAAK,MAAM,UAAU,CAAC;AAAA,QACnD,MAAM;AAAA,QACN,IAAI,UAAU;AAAA;AAAA,IAElB;AAAA,IACA,KAAK,KAAK,GAAG;AAAA,EACf;AAAA,EACA,OAAO;AAAA;AAWT,SAAS,gBAAgB,CAAC,GAAkC;AAAA,EAC1D,OAAO,OAAO,EAAE,UAAU,EAAE,YAAY,MAAM,WAAW,WAAW;AAAA;AAItE,SAAS,gBAAgB,CAAC,OAAwB;AAAA,EAGhD,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO,MAAM,SAAS;AAAA,EACrD,IAAI;AAAA,IACF,OAAO,KAAK,UAAU,KAAK;AAAA,IAC3B,MAAM;AAAA,IACN,OAAO,OAAO,KAAK;AAAA;AAAA;AAIvB,SAAS,SAAS,CAAC,GAAyB;AAAA,EAG1C,MAAM,WAAW,IAAI;AAAA,EACrB,MAAM,WAAW,EAAE;AAAA,EACnB,IAAI,YAAY,SAAS,SAAS,GAAG;AAAA,IACnC,IAAI;AAAA,MACF,MAAM,QAAQ,iBAAiB,QAAQ;AAAA,MACvC,WAAW,UAAS,MAAM,OAAO,QAAQ;AAAA,QACvC,IAAI;AAAA,UACF,SAAS,IAAI,OAAM,MAAM,MAAM,SAAS,OAAM,IAAI,GAAG,IAAI,CAAC,CAAC;AAAA,UAC3D,MAAM;AAAA,MAGV;AAAA,MACA,MAAM;AAAA,EAGV;AAAA,EAEA,MAAM,UAAS,eAAe,EAAE,gBAAgB;AAAA,EAChD,MAAM,SAAS,UAAS,QAAO,SAAS;AAAA,EACxC,MAAM,cAAc,IAAI;AAAA,EACxB,IAAI;AAAA,IAAQ,WAAW,KAAK;AAAA,MAAQ,YAAY,IAAI,EAAE,MAAM,CAAC;AAAA,EAC7D,MAAM,QAAQ,SAAS,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE;AAAA,EAErD,MAAM,OAAkB,CAAC;AAAA,EACzB,WAAW,QAAQ,OAAO;AAAA,IACxB,MAAM,SAAQ,YAAY,IAAI,IAAI;AAAA,IAGlC,MAAM,MACJ,WAAU,aAAa,CAAC,OAAO,OAAM,IAAI,IACrC,EAAE,MAAM,MAAM,gBAAgB,OAAM,IAAI,EAAE,IAC1C,EAAE,MAAM,MAAM,MAAM;AAAA,IAC1B,MAAM,MAAM,WAAU,YAAY,UAAU,QAAO,WAAW,IAAI;AAAA,IAClE,IAAI;AAAA,MAAK,IAAI,OAAO;AAAA,IACpB,IAAI,SAAS,IAAI,IAAI,GAAG;AAAA,MACtB,IAAI,QAAQ;AAAA,MACZ,IAAI,UAAU,iBAAiB,SAAS,IAAI,IAAI,CAAC;AAAA,IACnD;AAAA,IACA,KAAK,KAAK,GAAG;AAAA,EACf;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,aAAa,CAAC,GAAuC;AAAA,EAC5D,OAAO;AAAA,IACL,MAAM,EAAE;AAAA,IACR,MAAM,iBAAiB,CAAC;AAAA,IACxB,KAAK,EAAE,WAAW;AAAA,IAClB,MAAM,UAAU,CAAC;AAAA,EACnB;AAAA;AAOF,eAAe,cAAc,CAC3B,OACA,KACA,MACA,MACmC;AAAA,EACnC,IAAI;AAAA,IACF,IAAI,SAAS,SAAS;AAAA,MACpB,OAAO,MAAM,MAAM,qBAAqB,KAAK,IAAI;AAAA,IACnD;AAAA,IACA,OAAO,MAAM,MAAM,oBAAoB,KAAK,IAAI;AAAA,IAChD,MAAM;AAAA,IACN,OAAO,CAAC;AAAA;AAAA;AAIZ,eAAe,eAAe,CAAC,OAAyB,KAAiB,MAAuC;AAAA,EAC9G,MAAM,MAAsB,CAAC;AAAA,EAC7B,WAAW,QAAQ,CAAC,mBAAmB,kBAAkB,oBAAoB,GAAG;AAAA,IAC9E,IAAI;AAAA,MACF,IAAI,KAAK,GAAI,MAAM,MAAM,wBAAwB,KAAK,MAAM,IAAI,CAAE;AAAA,MAClE,MAAM;AAAA,EAGV;AAAA,EACA,OAAO;AAAA;AAGT,eAAe,YAAY,CAAC,OAAyB,KAAiB,MAAoC;AAAA,EACxG,MAAM,MAAmB,CAAC;AAAA,EAC1B,WAAW,QAAQ,CAAC,gBAAgB,aAAa,GAAG;AAAA,IAClD,IAAI;AAAA,MACF,IAAI,KAAK,GAAI,MAAM,MAAM,qBAAqB,KAAK,MAAM,IAAI,CAAE;AAAA,MAC/D,MAAM;AAAA,EAGV;AAAA,EACA,OAAO;AAAA;AAUT,eAAe,YAAY,CACzB,OACA,KACiD;AAAA,EACjD,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,cAAc,MAAM,MAAM,QAAQ,GAAG;AAAA,IACrC,MAAM;AAAA,IACN,OAAO,EAAE,SAAS,CAAC,GAAG,QAAQ,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,EAAE,EAAE;AAAA;AAAA,EAGlF,MAAM,UAAqB,CAAC;AAAA,EAC5B,MAAM,SAAiB,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,EAAE;AAAA,EAEvE,WAAW,MAAM,aAAa;AAAA,IAC5B,MAAM,YAAa,MAAM,eAAe,OAAO,KAAK,GAAG,MAAM,OAAO;AAAA,IACpE,MAAM,WAAY,MAAM,eAAe,OAAO,KAAK,GAAG,MAAM,MAAM;AAAA,IAClE,MAAM,WAAW,MAAM,gBAAgB,OAAO,KAAK,GAAG,IAAI;AAAA,IAC1D,MAAM,YAAY,MAAM,aAAa,OAAO,KAAK,GAAG,IAAI;AAAA,IAExD,MAAM,SAAS,UAAU,IAAI,CAAC,MAAM;AAAA,MAClC,MAAM,UAAS,eAAe,EAAE,OAAO;AAAA,MACvC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,UAAS,QAAO,OAAO,SAAS,GAAG,SAAS,EAAE,WAAW,GAAG;AAAA,KAC1F;AAAA,IAED,MAAM,QAAQ,SAAS,IAAI,CAAC,OAAO;AAAA,MACjC,MAAM,EAAE;AAAA,MACR,MAAM,OAAO,KAAK,EAAE,mBAAmB,CAAC,CAAC,EAAE;AAAA,MAC3C,SAAS,EAAE,WAAW;AAAA,MACtB,KAAK,EAAE;AAAA,IACT,EAAE;AAAA,IAEF,MAAM,YAAuC,SAAS,IAAI,CAAC,OAAO;AAAA,MAChE,MAAM,MAA+B;AAAA,QACnC,MAAM,GAAG;AAAA,QACT,MAAM,oBAAoB,EAAE;AAAA,QAC5B,KAAK,GAAG,eAAe;AAAA,QACvB,MAAM,aAAa,EAAE;AAAA,MACvB;AAAA,MACA,MAAM,MAAM,gBAAgB,EAAE;AAAA,MAC9B,IAAI;AAAA,QAAK,IAAI,UAAU;AAAA,MACvB,OAAO;AAAA,KACR;AAAA,IAGD,UAAU,KAAK,GAAG,UAAU,IAAI,CAAC,MAAM,cAAc,CAAC,CAAC,CAAC;AAAA,IAGxD,UAAU,KACR,CAAC,GAAG,MACF,OAAO,EAAE,IAAI,EAAE,cAAc,OAAO,EAAE,IAAI,CAAC,KAAK,OAAO,EAAE,IAAI,EAAE,cAAc,OAAO,EAAE,IAAI,CAAC,CAC/F;AAAA,IAEA,MAAM,YAAqC,EAAE,MAAM,GAAG,KAAK;AAAA,IAC3D,IAAI,GAAG;AAAA,MAAS,UAAU,MAAM,GAAG;AAAA,IACnC,UAAU,SAAS;AAAA,IACnB,UAAU,QAAQ;AAAA,IAClB,UAAU,YAAY;AAAA,IACtB,QAAQ,KAAK,SAAS;AAAA,IACtB,OAAO,WAAW;AAAA,IAClB,OAAO,UAAU,OAAO;AAAA,IACxB,OAAO,SAAS,MAAM;AAAA,IACtB,OAAO,aAAa,UAAU;AAAA,EAChC;AAAA,EAEA,OAAO,EAAE,SAAS,OAAO;AAAA;AAO3B,SAAS,WAAW,CAAC,QAA6D;AAAA,EAChF,MAAM,OAAO,QAAQ;AAAA,EACrB,IAAI,CAAC;AAAA,IAAM,OAAO,CAAC;AAAA,EACnB,MAAM,MAA+B,CAAC;AAAA,EACtC,YAAY,KAAK,QAAQ,OAAO,QAAQ,WAAW,GAAG;AAAA,IACpD,MAAM,MAAM,KAAK;AAAA,IACjB,IAAI;AAAA,MAAK,IAAI,OAAO;AAAA,EACtB;AAAA,EACA,MAAM,KAAK,KAAK;AAAA,EAChB,IAAI,IAAI;AAAA,IACN,IAAI;AAAA,MACF,MAAM,SAAS,KAAK,MAAM,EAAE;AAAA,MAC5B,IAAI,MAAM,QAAQ,MAAM;AAAA,QAAG,IAAI,WAAW,OAAO,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC;AAAA,MACrE,MAAM;AAAA,EAGV;AAAA,EACA,OAAO;AAAA;AAWT,SAAS,kBAAkB,CAAC,OAA4C;AAAA,EACtE,IAAI;AAAA,IACF,MAAM,QAAQ,iBAAiB,KAAK;AAAA,IACpC,IAAI,MAAM,YAAY;AAAA,MAAG,OAAO;AAAA,IAChC,MAAM,OAAO,OAAO,MAAM,SAAS,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE;AAAA,IACxD,MAAM,cAAc,OAAO,MAAM,SAAS,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE;AAAA,IACtE,MAAM,YAAY,MAAM,SAAS,MAAM,GAAG,IAAI,CAAC;AAAA,IAC/C,IAAI,OAAO;AAAA,IACX,MAAM,aAAa,eAAe,aAAa,IAAI;AAAA,IACnD,IAAI,cAAc,WAAW,OAAO,SAAS;AAAA,MAAG,OAAO,aAAa,WAAW,OAAO,GAAG,IAAI;AAAA,IAC7F,IAAI,aAAa;AAAA,IACjB,MAAM,WAAW,MAAM,SAAS,eAAe,GAAG,IAAI,CAAC;AAAA,IACvD,IAAI,UAAU;AAAA,MACZ,IAAI;AAAA,QACF,MAAM,WAAW,iBAAiB,QAAQ;AAAA,QAC1C,IAAI,SAAS,UAAU,GAAG;AAAA,UACxB,MAAM,IAAI,SAAS,SAAS,OAAO,GAAG,IAAI,CAAC;AAAA,UAC3C,aAAa,KAAK,OAAO,KAAK,OAAO,CAAC;AAAA,QACxC;AAAA,QACA,MAAM;AAAA,IAGV;AAAA,IACA,OAAO,EAAE,MAAM,MAAM,SAAS,YAAY,YAAY;AAAA,IACtD,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;AAIX,eAAe,aAAa,CAC1B,OACA,MACqC;AAAA,EACrC,IAAI;AAAA,IACF,OAAO,MAAM,MAAM,OAAO,MAAM,CAAC,GAAG,MAAM,IAAI;AAAA,IAC9C,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;AAIX,eAAe,YAAY,CACzB,OACA,MACA,MACkC;AAAA,EAClC,MAAM,SAAS,MAAM,cAAc,OAAO,IAAI;AAAA,EAE9C,MAAM,iBAAiB,MAAM,uBAAuB,CAAC,GAClD,IAAI,CAAC,MAAM,mBAAmB,CAAC,CAAC,EAChC,OAAO,CAAC,MAA6B,MAAM,IAAI;AAAA,EAElD,MAAM,gBAAgB,MAAM,YAAY,CAAC,GAAG,IAAI,CAAC,MAC/C,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,OAAO,EAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAQ,CACxE;AAAA,EAEA,IAAI,OAAsB,MAAM,0BAA0B;AAAA,EAC1D,IAAI,MAAqB,MAAM,qBAAqB;AAAA,EACpD,IAAI,QAAQ;AAAA,IACV,OAAO,OAAO,mCAAmC;AAAA,IACjD,MAAM,OAAO,yBAAyB;AAAA,EACxC;AAAA,EAEA,IAAI,UAAqB,CAAC;AAAA,EAC1B,IAAI,SAAiB,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,EAAE;AAAA,EACrE,IAAI,QAAQ;AAAA,IACV,MAAM,QAAQ,MAAM,aAAa,OAAO,OAAO,kBAAkB;AAAA,IACjE,UAAU,MAAM;AAAA,IAChB,SAAS,MAAM;AAAA,EACjB;AAAA,EAEA,OAAO;AAAA,IACL;AAAA,IACA,wBAAwB;AAAA,IACxB,mBAAmB;AAAA,IACnB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,MAAM,YAAY,MAAM;AAAA,IACxB;AAAA,IACA;AAAA,EACF;AAAA;AAGF,eAAe,iBAAiB,CAAC,OAA4D;AAAA,EAC3F,MAAM,OAAM,IAAI;AAAA,EAChB,IAAI,OAAO,MAAM,iBAAiB,YAAY;AAAA,IAC5C,IAAI;AAAA,MACF,MAAM,QAAQ,MAAM,MAAM,aAAa;AAAA,MACvC,WAAW,QAAQ;AAAA,QAAO,KAAI,IAAI,KAAK,MAAM,IAAI;AAAA,MACjD,MAAM;AAAA,EAGV;AAAA,EACA,OAAO;AAAA;AAaT,eAAsB,iBAAiB,CACrC,OACA,QACA,OAAoE,CAAC,GACnC;AAAA,EAClC,MAAM,QAAQ,MAAM,kBAAkB,KAAK;AAAA,EAC3C,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,QAAQ,MAAM,SAAS;AAAA,IACvB,MAAM;AAAA,IACN,QAAQ,CAAC;AAAA;AAAA,EAGX,MAAM,WAAsB,CAAC;AAAA,EAC7B,WAAW,QAAQ,OAAO;AAAA,IACxB,SAAS,KAAK,MAAM,aAAa,OAAO,MAAM,MAAM,IAAI,IAAI,CAAC,CAAC;AAAA,EAChE;AAAA,EAEA,OAAO;AAAA,IACL,wBAAwB;AAAA,IACxB,QAAQ;AAAA,MACN,MAAM,OAAO;AAAA,MACb,KAAK,OAAO,OAAO;AAAA,MACnB,SAAS,OAAO,WAAW;AAAA,MAC3B,MAAM;AAAA,IACR;AAAA,IACA,WAAW,KAAK,YAAY;AAAA,IAC5B,OAAO,KAAK,SAAS;AAAA,IACrB,aAAa,KAAK,cAAc;AAAA,IAChC;AAAA,EACF;AAAA;AAWF,eAAsB,gBAAgB,CACpC,OACA,SACA,SACA,OAC2C;AAAA,EAC3C,MAAM,SAAS,MAAM,cAAc,OAAO,OAAO;AAAA,EACjD,IAAI,CAAC;AAAA,IAAQ,OAAO;AAAA,EACpB,MAAM,MAAM,OAAO;AAAA,EAEnB,MAAM,SAAU,MAAM,eAAe,OAAO,KAAK,SAAQ,OAAO;AAAA,EAChE,WAAW,KAAK,QAAQ;AAAA,IACtB,IAAI,EAAE,SAAS,OAAO;AAAA,MACpB,MAAM,QAAQ,eAAe,EAAE,OAAO;AAAA,MACtC,OAAO,EAAE,UAAU,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC,MAAM,cAAc,CAAC,CAAC,EAAE;AAAA,IACvE;AAAA,EACF;AAAA,EAEA,MAAM,QAAS,MAAM,eAAe,OAAO,KAAK,SAAQ,MAAM;AAAA,EAC9D,WAAW,KAAK,OAAO;AAAA,IACrB,IAAI,EAAE,SAAS,OAAO;AAAA,MACpB,OAAO;AAAA,QACL,SAAS,OAAO,QAAQ,EAAE,mBAAmB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,cAAc;AAAA,UACzE;AAAA,UACA,MAAM;AAAA,UACN;AAAA,QACF,EAAE;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AASF,SAAS,qBAAqB,CACnC,OACA,QACA,OAAgC,CAAC,GACR;AAAA,EACzB,OAAO;AAAA,IACL,UAAU,CAAC,QAAQ,kBAAkB,OAAO,QAAQ,KAAK,KAAK,YAAY,KAAK,WAAW,CAAC;AAAA,IAC3F,SAAS,CAAC,SAAS,SAAQ,UAAU,iBAAiB,OAAO,SAAS,SAAQ,KAAK;AAAA,EACrF;AAAA;;AC1mBF;AAmCA,IAAM,cAAc,QAAW;AAAA,EAC7B,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,EAC3B,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,EAClC,OAAM,QAAQ,QAAO,GAAG,KAAK;AAAA,EAC7B,OAAM,iBAAiB,QAAO,GAAG,IAAI;AACvC,CAAC;AAMM,SAAS,yBAAyB,CAAC,MAAoC;AAAA,EAI5E,MAAM,aAAa,QAAW,CAAC,OAAM,SAAS,KAAK,MAAM,IAAI,CAAC,CAAC;AAAA,EAC/D,MAAM,YAAY,gBAAgB,UAAU;AAAA,EAE5C,IAAI,eAAkC;AAAA,EACtC,IAAI,KAAK,YAAY,aAAa,KAAK,YAAY,MAAM;AAAA,IAEvD,MAAM,eAAe,iBACnB,EAAE,OAAO,CAAC,KAAK,OAAO,EAAE,GACxB,UACF;AAAA,IACA,eAAe,eAAe,YAAY;AAAA,EAC5C;AAAA,EAEA,MAAM,QAAQ,iBACZ;AAAA,IACE,MAAM,CAAC,KAAK,IAAI;AAAA,IAChB,aAAa,CAAC,KAAK,WAAW;AAAA,IAC9B,MAAM,CAAC,SAAS;AAAA,IAChB,eAAe,CAAC,YAAY;AAAA,EAC9B,GACA,WACF;AAAA,EACA,OAAO,eAAe,KAAK;AAAA;AAMtB,SAAS,0BAA0B,CACxC,OACc;AAAA,EACd,OAAO,MAAM,KAAK,OAAO,yBAAyB;AAAA;;AC9FpD,SAAS,SAAS,CAAC,GAAgB;AAAA,EACjC,IAAI,MAAM,QAAQ,MAAM;AAAA,IAAW,OAAO;AAAA,EAC1C,OAAO,OAAO,MAAM,WAAW,IAAI,OAAO,CAAC;AAAA;AAItC,SAAS,UAAU,CAAC,SAAsB,MAAkC;AAAA,EACjF,MAAM,IAAI,UAAU;AAAA,EACpB,OAAO,KAAK,UAAU,IAAI,UAAU,EAAE,IAAI,IAAI;AAAA;AAIzC,SAAS,aAAa,CAAC,SAAsB,MAA8B;AAAA,EAChF,OAAO,OAAO,OAAO,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,UAAU,EAAE,IAAI,MAAM,IAAI;AAAA;AASvE,SAAS,cAAc,CAAC,SAAsB,OAAwC;AAAA,EAC3F,OAAO,eAAe,SAAS,OAAM,SAAS;AAAA;AAIzC,SAAS,oBAAoB,CAClC,SACA,OACA,MAC0B;AAAA,EAC1B,OAAO,eAAe,SAAS,OAAM,IAAI;AAAA;AAG3C,SAAS,cAAc,CACrB,SACA,OACA,MAC0B;AAAA,EAC1B,IAAI;AAAA,EACJ,IAAI,UAAU;AAAA,EACd,IAAI;AAAA,EACJ,WAAW,UAAU,OAAO,OAAO,WAAW,CAAC,CAAC,GAAG;AAAA,IACjD,IAAI,SAAS,aAAa,UAAU,OAAO,IAAI,MAAM;AAAA,MAAM;AAAA,IAC3D,MAAM,QAAQ,UAAU,OAAO,KAAK;AAAA,IACpC,IAAI,CAAC,OAAO;AAAA,MACV,IAAI,CAAC;AAAA,QAAU,WAAW;AAAA,MAC1B;AAAA,IACF;AAAA,IACA,WAAW,UAAU,MAAM,MAAM;AAAA,CAAI,GAAG;AAAA,MACtC,IAAI,UAAU,MAAK,WAAW,MAAM,KAAK,OAAO,SAAS,SAAS;AAAA,QAChE,UAAU,OAAO;AAAA,QACjB,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO,QAAQ;AAAA;;;ACwJjB;AAmEA;AASA;;;ACpSA;;;ACaO,SAAS,WAAW,CAAC,OAA0C;AAAA,EACpE,OAAO,EAAE,SAAS,eAAe,KAAK,EAAE;AAAA;AAQnC,SAAS,YAAY,CAC1B,QACqB;AAAA,EACrB,MAAM,cAAc,aAAa,OAAO,MAAM;AAAA,EAC9C,MAAM,aAAa,iBAAiB,WAAW;AAAA,EAC/C,OAAO,kBAAkB,UAAU;AAAA;;;ACtBrC;AAwBO,SAAS,0BAA0B,CAAC,OAAuC;AAAA,EAChF,IAAI,UAAU;AAAA,IAAM,OAAO,UAAS;AAAA,EACpC,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO,MAAK;AAAA,EAC3C,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO,OAAM;AAAA,EAC5C,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,IAAI,CAAC,OAAO,SAAS,KAAK,GAAG;AAAA,MAC3B,MAAM,IAAI,UACR,mDAAmD,aACnD,0DACF;AAAA,IACF;AAAA,IACA,OAAO,SAAQ;AAAA,EACjB;AAAA,EACA,IAAI,OAAO,UAAU;AAAA,IAAW,OAAO,MAAK;AAAA,EAC5C,IAAI,iBAAiB;AAAA,IAAY,OAAO,QAAO;AAAA,EAC/C,MAAM,IAAI,UACR,yCAAyC,OAAO,YAChD,+DACF;AAAA;AAUK,SAAS,sBAAsB,CACpC,SACmB;AAAA,EACnB,IAAI,CAAC;AAAA,IAAS,OAAO;AAAA,EACrB,MAAM,UAAU,OAAO,QAAQ,OAAO;AAAA,EACtC,IAAI,QAAQ,WAAW;AAAA,IAAG,OAAO;AAAA,EAEjC,MAAM,SAAqB,CAAC;AAAA,EAC5B,MAAM,UAAqC,CAAC;AAAA,EAC5C,YAAY,KAAK,UAAU,SAAS;AAAA,IAClC,MAAM,OAAO,2BAA2B,KAAK;AAAA,IAC7C,OAAO,KAAK,OAAM,KAAK,MAAM,IAAI,CAAC;AAAA,IAClC,QAAQ,OAAO,CAAC,KAAK;AAAA,EACvB;AAAA,EACA,MAAM,UAAS,QAAQ,MAAM;AAAA,EAC7B,MAAM,QAAQ,iBAAiB,SAAS,OAAM;AAAA,EAC9C,OAAO,eAAe,KAAK;AAAA;;;ACzE7B;AAAA;AAGO,MAAM,uBAAuB,MAAM;AAAA,EAE/B;AAAA,EAEA;AAAA,EAET,WAAW,CACT,SACA,SACA;AAAA,IACA,MAAM,SAAS,SAAS,SAAS,OAAO,EAAE,OAAO,QAAQ,MAAM,IAAI,SAAS;AAAA,IAC5E,KAAK,OAAO;AAAA,IACZ,IAAI,SAAS;AAAA,MAAiB,KAAK,kBAAkB,QAAQ;AAAA,IAC7D,IAAI,SAAS;AAAA,MAAW,KAAK,YAAY,QAAQ;AAAA;AAAA,SAS5C,YAAY,CAAC,GAA6B;AAAA,IAC/C,MAAM,OAAO,GAAG,EAAE,cAAc,EAAE;AAAA,IAClC,MAAM,UAAU,EAAE,kBACd,GAAG;AAAA;AAAA;AAAA,EAA8B,EAAE,oBACnC;AAAA,IACJ,OAAO,IAAI,eAAe,SAAS;AAAA,MACjC,iBAAiB,EAAE,mBAAmB;AAAA,MACtC,WAAW,EAAE;AAAA,MACb,OAAO;AAAA,IACT,CAAC;AAAA;AAEL;AAOO,SAAS,0BAA0B,CAAC,KAA2B;AAAA,EACpE,OAAO;AAAA,SACC,KAAI,CAAC,QAAQ,QAAQ;AAAA,MACzB,IAAI;AAAA,QACF,OAAO,MAAM,IAAI,KAAK,QAAQ,MAAM;AAAA,QACpC,OAAO,GAAG;AAAA,QACV,IAAI,aAAa;AAAA,UAAU,MAAM,eAAe,aAAa,CAAC;AAAA,QAC9D,MAAM;AAAA;AAAA;AAAA,SAGJ,OAAM,CAAC,QAAQ,QAAQ;AAAA,MAC3B,IAAI;AAAA,QACF,OAAO,MAAM,IAAI,OAAO,QAAQ,MAAM;AAAA,QACtC,OAAO,GAAG;AAAA,QACV,IAAI,aAAa;AAAA,UAAU,MAAM,eAAe,aAAa,CAAC;AAAA,QAC9D,MAAM;AAAA;AAAA;AAAA,IAGV,UAAU,MAAM,IAAI,SAAS;AAAA,IAC7B,OAAO,MAAM,IAAI,MAAM;AAAA,EACzB;AAAA;;;AC3DK,SAAS,mBAAsB,CACpC,OACA,eACK;AAAA,EACL,IAAI,CAAC;AAAA,IAAO,OAAO,CAAC;AAAA,EACpB,MAAM,MAAiB,MAAM,QAAQ,KAAK,IACtC,QACA,CAAC,GAAI,KAA2B;AAAA,EACpC,OAAO,IACJ,OAAO,CAAC,MAAM,KAAK,IAAI,EACvB,IAAI,CAAC,MAAM,cAAc,aAAa,CAAC,CAAC,CAAC;AAAA;AAMvC,SAAS,eAAe,CAAC,QAAyC;AAAA,EACvE,MAAM,OAA+B,CAAC;AAAA,EACtC,IAAI,CAAC;AAAA,IAAQ,OAAO;AAAA,EACpB,MAAM,WAAW;AAAA,EACjB,IAAI,OAAO,SAAS,OAAO,cAAc;AAAA,IAAY,OAAO;AAAA,EAC5D,WAAW,SAAS,UAA+B;AAAA,IACjD,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,MACxB,KAAK,OAAO,MAAM,EAAE,KAAK,OAAO,MAAM,EAAE;AAAA,IAC1C,EAAO,SAAI,SAAS,OAAO,UAAU,UAAU;AAAA,MAC7C,MAAM,IAAI;AAAA,MACV,KAAK,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE;AAAA,IAClE;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAMF,SAAS,eAAkB,CAChC,OACkB;AAAA,EAClB,IAAI,OAAO,iBAAkB,OAAe;AAAA,IAC1C,OAAQ,MAA2B,OAAO,eAAe;AAAA,EAC3D;AAAA,EACA,MAAM,WAAY,MAAsB,OAAO,UAAU;AAAA,EACzD,OAAO;AAAA,SACC,KAAI,GAAG;AAAA,MACX,OAAO,SAAS,KAAK;AAAA;AAAA,EAEzB;AAAA;;;AJgCK,MAAM,UAAU;AAAA,EACJ;AAAA,EACA;AAAA,EAWjB,WAAW,CAAC,KAAgB,SAA4B;AAAA,IACtD,KAAK,MAAM,2BAA2B,GAAG;AAAA,IACzC,KAAK,0BAA0B,SAAS,oBAAoB;AAAA;AAAA,OAOhD,QAAO,CACnB,cACA,cACA,MACA,aACA,UACA,SACA,uBACA,mBAAsC,MACtC,QAC2D;AAAA,IAC3D,MAAM,UAAuB;AAAA,MAC3B,eAAe;AAAA,MACf,WAAW;AAAA,MACX,eAAe;AAAA,MACf,cAAc;AAAA,MACd,UAAU,YAAY;AAAA,MACtB,SAAS,WAAW;AAAA,MACpB,oBAAoB,oBAAoB,KAAK;AAAA,MAC7C,yBAAyB,yBAAyB;AAAA,MAClD,2BAA2B;AAAA,IAC7B;AAAA,IAEA,MAAM,eAAe,qBAAqB,OAAO;AAAA,IACjD,MAAM,YAAY,MAAM,KAAK,IAAI,KAAK,QAAQ,YAAY,YAAY,CAAC;AAAA,IACvE,IAAI,CAAC;AAAA,MAAW,MAAM,IAAI,eAAe,oBAAoB;AAAA,IAC7D,MAAM,QAAQ,aAAa,SAAS;AAAA,IACpC,MAAM,WAAW,wBAAwB,KAAK;AAAA,IAC9C,IAAI;AAAA,MAAQ,OAAO,QAAQ;AAAA,IAC3B,OAAO,EAAE,SAAS,SAAS;AAAA;AAAA,OAGf,QAAO,CACnB,aACA,cACA,MASuE;AAAA,IACvE,MAAM,KAAK,MAAM,WAAW;AAAA,IAC5B,MAAM,KAAK,MAAM,eAAe;AAAA,IAChC,MAAM,cAA2B;AAAA,MAC/B,WAAW;AAAA,MACX,eAAe,aAAa;AAAA,MAC5B,kBAAkB,aAAa;AAAA,MAC/B,gBAAgB,MAAM,iBAAiB;AAAA,MACvC,kBAAkB,MAAM,mBAAmB;AAAA,MAC3C,WAAW,MAAM,YAAY,CAAC;AAAA,MAC9B,OAAO,MAAM,SAAS;AAAA,MACtB,mBAAmB;AAAA,MACnB,sBAAsB,IAAI,cAAc;AAAA,MACxC,oBAAoB,IAAI,aAAa;AAAA,MACrC,qBAAqB,IAAI,aAAa;AAAA,MACtC,gBAAgB,IAAI,SAAS,OAAO,OAAO,OAAO,GAAG,KAAK;AAAA,MAC1D,wBAAwB,IAAI,cAAc;AAAA,MAC1C,kBAAkB,IAAI,QAAQ,OAAO,OAAO,OAAO,GAAG,IAAI;AAAA,MAC1D,cAAc,MAAM,eAAe;AAAA,MACnC,kBAAkB;AAAA,MAClB,cAAc;AAAA,IAChB;AAAA,IAEA,MAAM,YAAY,qBAAqB,WAAW;AAAA,IAClD,MAAM,UAAU,MAAM,KAAK,IAAI,OAAO,QAAQ,YAAY,SAAS,CAAC;AAAA,IAEpE,MAAM,aAAa,QAAQ;AAAA,IAC3B,IAAI,CAAC;AAAA,MAAY,MAAM,IAAI,eAAe,8BAA8B;AAAA,IACxE,MAAM,eAAe,8BAA8B,UAAU;AAAA,IAE7D,OAAO,EAAE,SAAS,aAAa;AAAA;AAAA,SAQ1B,aAAa,CAClB,MAC0B;AAAA,IAC1B,MAAM,OAAO,KAAK,aAAa,IAAI;AAAA,IAEnC,QAAQ,SAAS,SAAS,UAAU,aAAa,MAAM,KAAK,QAC1D,KAAK,mCAEL,MACA,MACA,KAAK,YAAY,MACjB,MACA,KAAK,yBAAyB,MAC9B,KAAK,oBAAoB,MACzB,KAAK,UAAU,IACjB;AAAA,IAEA,QAAQ,YAAY,MAAM,KAAK,QAAQ,SAAS,UAAU;AAAA,MACxD,eAAe,KAAK;AAAA,MACpB,iBAAiB,KAAK;AAAA,MACtB,SAAS,KAAK;AAAA,MACd,aAAa,KAAK;AAAA,MAClB,UAAU,KAAK;AAAA,IACjB,CAAC;AAAA,IAED,MAAM,eAAe,SAAS;AAAA,IAC9B,IAAI;AAAA,MACF,iBAAiB,QAAQ,SAAS;AAAA,QAChC,IAAI,KAAK,SAAS,GAAG;AAAA,UACnB,MAAM,cAAc,MAAM,YAAY;AAAA,QACxC;AAAA,MACF;AAAA,cACA;AAAA,MACA,QAAQ,MAAM;AAAA;AAAA;AAAA,SASX,kBAAkB,CACvB,MACuC;AAAA,IAEvC,MAAM,YAAY,gBAAgB,KAAK,KAAK;AAAA,IAC5C,MAAM,QAAQ,MAAM,UAAU,KAAK;AAAA,IACnC,IAAI,MAAM,MAAM;AAAA,MACd,MAAM,IAAI,eACR,kBAAkB,KAAK,uDACrB,8DACJ;AAAA,IACF;AAAA,IAEA,MAAM,aAAuB,MAAM;AAAA,IACnC,MAAM,cAAc,WAAW;AAAA,IAE/B,MAAM,OAAO,KAAK,aAAa,IAAI;AAAA,IAEnC,QAAQ,SAAS,SAAS,UAAU,aAAa,MAAM,KAAK,QAC1D,KAAK,qCAEL,MACA,aACA,KAAK,YAAY,MACjB,KAAK,WAAW,MAChB,KAAK,yBAAyB,MAC9B,KAAK,oBAAoB,MACzB,KAAK,UAAU,IACjB;AAAA,IAEA,QAAQ,YAAY,MAAM,KAAK,QAAQ,SAAS,QAAQ;AAAA,IAExD,IAAI;AAAA,MAEF,MAAM,UAAU,MAAM,QAAQ,SAAS,CAAC,GAAG,SAAS,UAAU,CAAC,CAAC;AAAA,MAChE,IAAI,QAAQ,SAAS;AAAA,QAAG,MAAM;AAAA,MAG9B,iBAAiB,SAAS,GAAG,OAAO,gBAAgB,MAAM,UAAU,GAAG;AAAA,QACrE,MAAM,SAAS,MAAM,QAAQ,SAAS,CAAC,GAAG,SAAS,KAAK,CAAC,CAAC;AAAA,QAC1D,IAAI,OAAO,SAAS;AAAA,UAAG,MAAM;AAAA,MAC/B;AAAA,cACA;AAAA,MACA,QAAQ,MAAM;AAAA;AAAA;AAAA,SAKX,cAAc,CACnB,MAC0B;AAAA,IAG1B,MAAM,YAAY,gBAAgB,KAAK,KAAK;AAAA,IAC5C,MAAM,QAAQ,MAAM,UAAU,KAAK;AAAA,IACnC,IAAI,MAAM,MAAM;AAAA,MACd,MAAM,IAAI,eACR,kBAAkB,KAAK,uDACrB,8DACJ;AAAA,IACF;AAAA,IAEA,MAAM,aAAuB,MAAM;AAAA,IACnC,MAAM,cAAc,WAAW;AAAA,IAE/B,MAAM,OAAO,KAAK,aAAa,IAAI;AAAA,IAEnC,QAAQ,SAAS,SAAS,UAAU,aAAa,MAAM,KAAK,QAC1D,KAAK,qCAEL,MACA,aACA,KAAK,YAAY,MACjB,KAAK,WAAW,MAChB,KAAK,yBAAyB,MAC9B,KAAK,oBAAoB,MACzB,KAAK,UAAU,IACjB;AAAA,IAEA,QAAQ,YAAY,MAAM,KAAK,QAAQ,SAAS,QAAQ;AAAA,IACxD,MAAM,eAAe,SAAS;AAAA,IAC9B,IAAI;AAAA,MACF,MAAM,UAAU,MAAM,QAAQ,SAAS,CAAC,GAAG,SAAS,UAAU,CAAC,CAAC;AAAA,MAChE,IAAI,QAAQ,SAAS;AAAA,QAAG,MAAM,cAAc,SAAS,YAAY;AAAA,MAEjE,iBAAiB,SAAS,GAAG,OAAO,gBAAgB,MAAM,UAAU,GAAG;AAAA,QACrE,MAAM,SAAS,MAAM,QAAQ,SAAS,CAAC,GAAG,SAAS,KAAK,CAAC,CAAC;AAAA,QAC1D,IAAI,OAAO,SAAS;AAAA,UAAG,MAAM,cAAc,QAAQ,YAAY;AAAA,MACjE;AAAA,cACA;AAAA,MACA,QAAQ,MAAM;AAAA;AAAA;AAAA,SASX,sBAAsB,CAC3B,MACuC;AAAA,IACvC,MAAM,YAAY,gBAAgB,KAAK,KAAK;AAAA,IAC5C,MAAM,QAAQ,MAAM,UAAU,KAAK;AAAA,IACnC,IAAI,MAAM,MAAM;AAAA,MACd,MAAM,IAAI,eACR,sBAAsB,KAAK,uDACzB,8DACJ;AAAA,IACF;AAAA,IAEA,MAAM,aAAuB,MAAM;AAAA,IACnC,MAAM,cAAc,WAAW;AAAA,IAE/B,MAAM,OAAO,KAAK,aAAa,IAAI;AAAA,IAEnC,QAAQ,SAAS,SAAS,UAAU,aAAa,MAAM,KAAK,QAC1D,KAAK,mCAEL,MACA,aACA,KAAK,YAAY,MACjB,MACA,KAAK,yBAAyB,MAC9B,KAAK,oBAAoB,MACzB,KAAK,UAAU,IACjB;AAAA,IAIA,QAAQ,SAAS,cAAc,iBAAiB,MAAM,KAAK,QACzD,SACA,UACA;AAAA,MACE,eAAe,KAAK;AAAA,MACpB,iBAAiB,KAAK;AAAA,MACtB;AAAA,MACA,SAAS,KAAK;AAAA,MACd,aAAa,KAAK;AAAA,MAClB,UAAU,KAAK;AAAA,IACjB,CACF;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,UAAU,MAAM,aAAa,SAAS,CAAC,GAAG,SAAS,UAAU,CAAC,CAAC;AAAA,MACrE,IAAI,QAAQ,SAAS;AAAA,QAAG,MAAM;AAAA,MAE9B,iBAAiB,SAAS,GAAG,OAAO,gBAAgB,MAAM,UAAU,GAAG;AAAA,QACrE,MAAM,SAAS,MAAM,aAAa,SAAS,CAAC,GAAG,SAAS,KAAK,CAAC,CAAC;AAAA,QAC/D,IAAI,OAAO,SAAS;AAAA,UAAG,MAAM;AAAA,MAC/B;AAAA,cACA;AAAA,MACA,aAAa,MAAM;AAAA;AAAA,IAIrB,QAAQ,SAAS,oBAAoB,MAAM,KAAK,QAC9C,SACA,UACA;AAAA,MACE,eAAe,KAAK;AAAA,MACpB,iBAAiB,KAAK;AAAA,MACtB;AAAA,MACA,aAAa,aAAa;AAAA,MAC1B,SAAS,KAAK;AAAA,MACd,aAAa,KAAK;AAAA,MAClB,UAAU,KAAK;AAAA,IACjB,CACF;AAAA,IAEA,IAAI;AAAA,MACF,iBAAiB,QAAQ,iBAAiB;AAAA,QACxC,IAAI,KAAK,SAAS;AAAA,UAAG,MAAM;AAAA,MAC7B;AAAA,cACA;AAAA,MACA,gBAAgB,MAAM;AAAA;AAAA;AAAA,SAKnB,kBAAkB,CACvB,MAC0B;AAAA,IAC1B,MAAM,YAAY,gBAAgB,KAAK,KAAK;AAAA,IAC5C,MAAM,QAAQ,MAAM,UAAU,KAAK;AAAA,IACnC,IAAI,MAAM,MAAM;AAAA,MACd,MAAM,IAAI,eACR,sBAAsB,KAAK,uDACzB,8DACJ;AAAA,IACF;AAAA,IAEA,MAAM,aAAuB,MAAM;AAAA,IACnC,MAAM,cAAc,WAAW;AAAA,IAE/B,MAAM,OAAO,KAAK,aAAa,IAAI;AAAA,IAEnC,QAAQ,SAAS,SAAS,UAAU,aAAa,MAAM,KAAK,QAC1D,KAAK,mCAEL,MACA,aACA,KAAK,YAAY,MACjB,MACA,KAAK,yBAAyB,MAC9B,KAAK,oBAAoB,MACzB,KAAK,UAAU,IACjB;AAAA,IAEA,QAAQ,SAAS,cAAc,iBAAiB,MAAM,KAAK,QACzD,SACA,UACA;AAAA,MACE,eAAe,KAAK;AAAA,MACpB,iBAAiB,KAAK;AAAA,MACtB;AAAA,MACA,SAAS,KAAK;AAAA,MACd,aAAa,KAAK;AAAA,MAClB,UAAU,KAAK;AAAA,IACjB,CACF;AAAA,IAEA,MAAM,eAAe,SAAS;AAAA,IAC9B,IAAI;AAAA,MACF,MAAM,UAAU,MAAM,aAAa,SAAS,CAAC,GAAG,SAAS,UAAU,CAAC,CAAC;AAAA,MACrE,IAAI,QAAQ,SAAS;AAAA,QAAG,MAAM,cAAc,SAAS,YAAY;AAAA,MAEjE,iBAAiB,SAAS,GAAG,OAAO,gBAAgB,MAAM,UAAU,GAAG;AAAA,QACrE,MAAM,SAAS,MAAM,aAAa,SAAS,CAAC,GAAG,SAAS,KAAK,CAAC,CAAC;AAAA,QAC/D,IAAI,OAAO,SAAS;AAAA,UAAG,MAAM,cAAc,QAAQ,YAAY;AAAA,MACjE;AAAA,cACA;AAAA,MACA,aAAa,MAAM;AAAA;AAAA,IAGrB,QAAQ,SAAS,oBAAoB,MAAM,KAAK,QAC9C,SACA,UACA;AAAA,MACE,eAAe,KAAK;AAAA,MACpB,iBAAiB,KAAK;AAAA,MACtB;AAAA,MACA,aAAa,aAAa;AAAA,MAC1B,SAAS,KAAK;AAAA,MACd,aAAa,KAAK;AAAA,MAClB,UAAU,KAAK;AAAA,IACjB,CACF;AAAA,IAEA,IAAI;AAAA,MACF,iBAAiB,QAAQ,iBAAiB;AAAA,QACxC,IAAI,KAAK,SAAS;AAAA,UAAG,MAAM,cAAc,MAAM,YAAY;AAAA,MAC7D;AAAA,cACA;AAAA,MACA,gBAAgB,MAAM;AAAA;AAAA;AAAA,SASnB,iBAAiB,CACtB,MACuC;AAAA,IACvC,MAAM,OAAO,KAAK,aAAa,IAAI;AAAA,IACnC,QAAQ,SAAS,SAAS,UAAU,aAAa,MAAM,KAAK,QAC1D,KAAK,mCAEL,MACA,MACA,KAAK,YAAY,MACjB,MACA,KAAK,yBAAyB,MAC9B,KAAK,oBAAoB,MACzB,KAAK,UAAU,IACjB;AAAA,IACA,QAAQ,YAAY,MAAM,KAAK,QAAQ,SAAS,UAAU;AAAA,MACxD,eAAe,KAAK;AAAA,MACpB,iBAAiB,KAAK;AAAA,MACtB,SAAS,KAAK;AAAA,MACd,aAAa,KAAK;AAAA,MAClB,UAAU,KAAK;AAAA,IACjB,CAAC;AAAA,IACD,IAAI;AAAA,MACF,iBAAiB,QAAQ,SAAS;AAAA,QAChC,IAAI,KAAK,SAAS;AAAA,UAAG,MAAM;AAAA,MAC7B;AAAA,cACA;AAAA,MACA,QAAQ,MAAM;AAAA;AAAA;AAAA,OAeZ,aAAY,GAA2B;AAAA,IAC3C,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,oBAAoB,CAAC,CAAC;AAAA,IACzD,IAAI,CAAC;AAAA,MAAQ,OAAO,CAAC;AAAA,IACrB,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,OAAO,oBAAoB,MAAM,OAAO,iBAAiB;AAAA;AAAA,OAIrD,SAAQ,GAAsB;AAAA,IAClC,MAAM,QAAQ,MAAM,KAAK,aAAa;AAAA,IACtC,OAAO,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI;AAAA;AAAA,OA0B1B,cAAa,CACjB,MACA,MAC8B;AAAA,IAC9B,IAAI,MAAM,WAAW,QAAQ,MAAM,gBAAgB,MAAM;AAAA,MACvD,MAAM,IAAI,eACR,iEACF;AAAA,IACF;AAAA,IACA,IAAI;AAAA,IACJ,IAAI,MAAM,gBAAgB,MAAM;AAAA,MAI9B,cAAc,KAAK,aAAa,eAAe,IAAI,OAAO,KAAK;AAAA,IACjE,EAAO;AAAA,MACL,cAAc,uBAAuB,MAAM,OAAO;AAAA;AAAA,IAGpD,MAAM,UAAS,QAAQ;AAAA,MACrB,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,WAAW,QAAO,GAAG,IAAI;AAAA,MAC/B,OAAM,qBAAqB,MAAK,GAAG,IAAI;AAAA,MACvC,OAAM,0BAA0B,MAAK,GAAG,IAAI;AAAA,IAC9C,CAAC;AAAA,IACD,MAAM,aAAa,iBACjB;AAAA,MACE,MAAM,CAAC,IAAI;AAAA,MACX,SAAS,CAAC,WAAW;AAAA,MACrB,mBAAmB,CAAC,MAAM,mBAAmB,IAAI;AAAA,MACjD,wBAAwB,CAAC,MAAM,yBAAyB,IAAI;AAAA,IAC9D,GACA,OACF;AAAA,IACA,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,kBAAkB,YAAY,UAAU,CAAC;AAAA,IAC5E,IAAI,CAAC;AAAA,MAAQ,MAAM,IAAI,eAAe,8BAA8B;AAAA,IACpE,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,OAAO;AAAA,MACL,oBAAoB,aAAa,MAAM,kBAAkB;AAAA,MACzD,uBAAuB,MAAM,yBAAyB;AAAA,MACtD,sBAAsB,MAAM,wBAAwB;AAAA,MACpD,wBAAwB,MAAM,0BAA0B;AAAA,MACxD,iBAAiB,OAAO,MAAM,mBAAmB,CAAC;AAAA,MAClD,6BAA6B,MAAM,+BAA+B;AAAA,MAClE,gBAAgB,MAAM,kBAAkB;AAAA,MACxC,UAAU,MAAM,YACX,MAAM,QAAQ,MAAM,QAAQ,IAAI,MAAM,WAAW,CAAC,GAAG,MAAM,QAAQ,GAAG,IAAI,YAAY,IACvF,CAAC;AAAA,MACL,cAAc,MAAM,gBACf,MAAM,QAAQ,MAAM,YAAY,IAAI,MAAM,eAAe,CAAC,GAAG,MAAM,YAAY,GAAG,IAAI,YAAY,IACnG,CAAC;AAAA,MACL,iBAAiB,MAAM,mBAClB,MAAM,QAAQ,MAAM,eAAe,IAAI,MAAM,kBAAkB,CAAC,GAAG,MAAM,eAAe,GAAG,IAAI,YAAY,IAC5G,CAAC;AAAA,MACL,SAAS,MAAM,WAAW;AAAA,MAC1B,MAAM,gBAAgB,MAAM,IAAI;AAAA,MAChC,4BAA4B,MAAM,8BAA8B;AAAA,MAChE,uBAAuB,MAAM,yBAAyB;AAAA,MACtD,iCAAiC,MAAM,mCAAmC;AAAA,IAC5E;AAAA;AAAA,OAII,cAAa,CAAC,kBAAmD;AAAA,IACrE,MAAM,KAAK,IAAI,KAAK,kBAAkB,EAAE,oBAAoB,iBAAiB,CAAC;AAAA;AAAA,OAW1E,cAAa,CACjB,MACA,YACA,SAGe;AAAA,IACf,IAAI;AAAA,IACJ,IAAI,WAAW,MAAM;AAAA,MACnB,cAAc;AAAA,IAChB,EAAO,SAAI,mBAAmB,YAAY;AAAA,MAExC,cAAc,QAAQ,eAAe,IAAI,OAAO;AAAA,IAClD,EAAO;AAAA,MACL,IAAI,QAAQ,WAAW,QAAQ,QAAQ,gBAAgB,MAAM;AAAA,QAC3D,MAAM,IAAI,eACR,iEACF;AAAA,MACF;AAAA,MACA,IAAI,QAAQ,gBAAgB,MAAM;AAAA,QAChC,cAAc,QAAQ,aAAa,eAAe,IAAI,OAAO,QAAQ;AAAA,MACvE,EAAO;AAAA,QACL,cAAc,uBAAuB,QAAQ,OAAO;AAAA;AAAA;AAAA,IAGxD,MAAM,KAAK,IAAI,KAAK,kBAAkB;AAAA,MACpC;AAAA,MACA,aAAa;AAAA,MACb,SAAS;AAAA,IACX,CAAC;AAAA;AAAA,OAIG,YAAW,CAAC,MAA6B;AAAA,IAC7C,MAAM,KAAK,IAAI,KAAK,gBAAgB,EAAE,KAAK,CAAC;AAAA;AAAA,OAIxC,eAAc,CAClB,kBACA,uBACiB;AAAA,IACjB,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,mBAAmB;AAAA,MACpD,oBAAoB;AAAA,MACpB,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAQ,MAAM,IAAI,eAAe,+BAA+B;AAAA,IACrE,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,OAAO,OAAO,MAAM,WAAW,CAAC;AAAA;AAAA,OAI5B,iBAAgB,CAAC,kBAAyD;AAAA,IAC9E,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,6BAA6B;AAAA,MAC9D,oBAAoB;AAAA,IACtB,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAQ,MAAM,IAAI,eAAe,iCAAiC;AAAA,IACvE,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,IAAI,CAAC,MAAM,yBAAyB;AAAA,MAClC,MAAM,IAAI,eAAe,uDAAuD;AAAA,IAClF;AAAA,IACA,OAAO,aAAa,MAAM,uBAAuB;AAAA;AAAA,OAI7C,kBAAiB,CACrB,kBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,8BAA8B;AAAA,MAChD,oBAAoB;AAAA,MACpB,yBAAyB;AAAA,IAC3B,CAAC;AAAA;AAAA,OAIG,oBAAmB,CACvB,kBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,gCAAgC;AAAA,MAClD,oBAAoB;AAAA,MACpB,yBAAyB;AAAA,IAC3B,CAAC;AAAA;AAAA,OAIG,QAAO,CACX,kBACA,uBACuB;AAAA,IACvB,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,mBAAmB;AAAA,MACpD,oBAAoB;AAAA,MACpB,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAQ,OAAO,CAAC;AAAA,IACrB,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,OAAO,oBAAoB,MAAM,OAAO,gBAAgB;AAAA;AAAA,OAIpD,UAAS,CACb,kBACA,MACA,uBAC4B;AAAA,IAC5B,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,sBAAsB;AAAA,MACvD,oBAAoB;AAAA,MACpB;AAAA,MACA,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAQ,OAAO;AAAA,IACpB,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,MAAM,QAAQ,oBAAoB,MAAM,OAAO,gBAAgB;AAAA,IAC/D,OAAO,MAAM,SAAS,IAAI,MAAM,KAAK;AAAA;AAAA,OAIjC,aAAY,CAChB,kBACA,MACA,MAMe;AAAA,IACf,MAAM,UAAU,MAAM,OAClB,IAAI,IAAI,OAAO,QAAQ,KAAK,IAAI,CAAC,IACjC;AAAA,IACJ,MAAM,KAAK,IAAI,KAAK,yBAAyB;AAAA,MAC3C,oBAAoB;AAAA,MACpB;AAAA,MACA,aAAa,MAAM,cAAc;AAAA,MACjC,SAAS,MAAM,WAAW;AAAA,MAC1B,MAAM;AAAA,MACN,yBAAyB,MAAM,yBAAyB;AAAA,IAC1D,CAAC;AAAA;AAAA,OAIG,WAAU,CACd,kBACA,MACA,gBACA,SACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,uBAAuB;AAAA,MACzC,oBAAoB;AAAA,MACpB;AAAA,MACA,kBAAkB,kBAAkB;AAAA,MACpC,SAAS,WAAW;AAAA,MACpB,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,qBAAoB,CACxB,kBACA,MACA,uBACsB;AAAA,IACtB,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,kCAAkC;AAAA,MACnE,oBAAoB;AAAA,MACpB;AAAA,MACA,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAQ,OAAO,CAAC;AAAA,IACrB,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,OAAO,oBAAoB,MAAM,OAAO,eAAe;AAAA;AAAA,OAInD,oBAAmB,CACvB,kBACA,MACA,uBACqB;AAAA,IACrB,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,iCAAiC;AAAA,MAClE,oBAAoB;AAAA,MACpB;AAAA,MACA,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAQ,OAAO,CAAC;AAAA,IACrB,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,OAAO,oBAAoB,MAAM,OAAO,cAAc;AAAA;AAAA,OAIlD,wBAAuB,CAC3B,kBACA,MACA,MACA,uBACyB;AAAA,IACzB,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,qCAAqC;AAAA,MACtE,oBAAoB;AAAA,MACpB;AAAA,MACA;AAAA,MACA,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAQ,OAAO,CAAC;AAAA,IACrB,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,OAAO,oBAAoB,MAAM,OAAO,kBAAkB;AAAA;AAAA,OAItD,SAAQ,CACZ,kBACA,YACA,MACA,uBAC2B;AAAA,IAC3B,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,qBAAqB;AAAA,MACtD,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAQ,OAAO;AAAA,IACpB,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,MAAM,QAAQ,oBAAoB,MAAM,OAAO,eAAe;AAAA,IAC9D,OAAO,MAAM,SAAS,IAAI,MAAM,KAAK;AAAA;AAAA,OAIjC,YAAW,CACf,kBACA,YACA,MACA,SACA,YACA,oBACA,mBACA,kBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,wBAAwB;AAAA,MAC1C,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb,sBAAsB,sBAAsB;AAAA,MAC5C,oBAAoB,qBAAqB;AAAA,MACzC,mBAAmB,oBAAoB;AAAA,MACvC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,UAAS,CACb,kBACA,YACA,MACA,gBACA,SACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,sBAAsB;AAAA,MACxC,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,kBAAkB,kBAAkB;AAAA,MACpC,SAAS,WAAW;AAAA,MACpB,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAQG,qBAAoB,CACxB,kBACA,YACA,MACA,QACA,SACA,uBAC6B;AAAA,IAC7B,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,mCAAmC;AAAA,MACpE,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,SAAS,UAAU;AAAA,MACnB,UAAU,WAAW;AAAA,MACrB,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAQ,MAAM,IAAI,eAAe,uCAAuC;AAAA,IAC7E,OAAO,yBAAyB,aAAa,MAAM,CAAC;AAAA;AAAA,OAIhD,gBAAe,CACnB,kBACA,YACA,MACA,SACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,6BAA6B;AAAA,MAC/C,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,SAAS,WAAW;AAAA,MACpB,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,YAAW,CACf,kBACA,YACA,MACA,SACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,wBAAwB;AAAA,MAC1C,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,UAAU;AAAA,MACV,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,eAAc,CAClB,kBACA,YACA,MACA,YACA,YACA,cACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,4BAA4B;AAAA,MAC9C,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,aAAa;AAAA,MACb,aAAa;AAAA,MACb,eAAe,gBAAgB;AAAA,MAC/B,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,gBAAe,CACnB,kBACA,YACA,MACA,YACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,6BAA6B;AAAA,MAC/C,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,aAAa;AAAA,MACb,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,kBAAiB,CACrB,kBACA,YACA,MACA,YACA,SACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,+BAA+B;AAAA,MACjD,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,aAAa;AAAA,MACb,UAAU;AAAA,MACV,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,sBAAqB,CACzB,kBACA,YACA,MACA,YACA,cACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,oCAAoC;AAAA,MACtD,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,aAAa;AAAA,MACb,eAAe;AAAA,MACf,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,uBAAsB,CAC1B,kBACA,YACA,MACA,YACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,qCAAqC;AAAA,MACvD,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,aAAa;AAAA,MACb,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAUG,sBAAqB,CACzB,kBACA,YACA,MACA,kBACA,YACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,oCAAoC;AAAA,MACtD,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,mBAAmB;AAAA,MACnB,YAAY,cAAc;AAAA,MAC1B,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,gBAAe,CACnB,kBACA,YACA,MACA,YACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,8BAA8B;AAAA,MAChD,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,aAAa;AAAA,MACb,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,iBAAgB,CACpB,kBACA,YACA,MACA,YACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,+BAA+B;AAAA,MACjD,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,aAAa;AAAA,MACb,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,QAAO,CACX,kBACA,YACA,MACA,uBAC0B;AAAA,IAC1B,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,oBAAoB;AAAA,MACrD,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAQ,OAAO;AAAA,IACpB,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,MAAM,QAAQ,oBAAoB,MAAM,OAAO,cAAc;AAAA,IAC7D,OAAO,MAAM,SAAS,IAAI,MAAM,KAAK;AAAA;AAAA,OAIjC,WAAU,CACd,kBACA,YACA,MACA,YACA,YACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,uBAAuB;AAAA,MACzC,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,SAAQ,CACZ,kBACA,YACA,MACA,gBACA,SACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,qBAAqB;AAAA,MACvC,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,kBAAkB,kBAAkB;AAAA,MACpC,SAAS,WAAW;AAAA,MACpB,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,WAAU,CACd,kBACA,YACA,MACA,SACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,uBAAuB;AAAA,MACzC,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,UAAU;AAAA,MACV,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAIG,eAAc,CAClB,kBACA,YACA,MACA,SACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,4BAA4B;AAAA,MAC9C,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,SAAS,WAAW;AAAA,MACpB,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,OAQG,SAAQ,CACZ,kBACA,YACA,MACA,uBAC2B;AAAA,IAC3B,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,qBAAqB;AAAA,MACtD,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAQ,OAAO;AAAA,IACpB,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,MAAM,QAAQ,oBAAoB,MAAM,OAAO,eAAe;AAAA,IAC9D,OAAO,MAAM,SAAS,IAAI,MAAM,KAAK;AAAA;AAAA,OAIjC,qBAAoB,CACxB,kBACA,MACA,MACA,uBACsB;AAAA,IACtB,MAAM,SAAS,MAAM,KAAK,IAAI,KAAK,kCAAkC;AAAA,MACnE,oBAAoB;AAAA,MACpB;AAAA,MACA;AAAA,MACA,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAQ,OAAO,CAAC;AAAA,IACrB,MAAM,QAAQ,aAAa,MAAM;AAAA,IACjC,OAAO,oBAAoB,MAAM,OAAO,eAAe;AAAA;AAAA,OAInD,YAAW,CACf,kBACA,YACA,MACA,WACA,YACA,YACA,YACA,wBACA,iBACA,uBACe;AAAA,IACf,MAAM,UAAS,QAAQ;AAAA,MACrB,OAAM,sBAAsB,QAAO,GAAG,IAAI;AAAA,MAC1C,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,QAAQ,MAAK,GAAG,KAAK;AAAA,MAC3B,OAAM,cAAc,MAAK,GAAG,KAAK;AAAA,MACjC,OAAM,cAAc,MAAK,OAAM,QAAQ,MAAK,GAAG,KAAK,CAAC,GAAG,KAAK;AAAA,MAC7D,OAAM,cAAc,MAAK,GAAG,KAAK;AAAA,MACjC,OAAM,eAAe,MAAK,GAAG,KAAK;AAAA,MAClC,OAAM,4BAA4B,QAAO,GAAG,IAAI;AAAA,MAChD,OAAM,oBAAoB,QAAO,GAAG,IAAI;AAAA,MACxC,OAAM,2BAA2B,QAAO,GAAG,IAAI;AAAA,IACjD,CAAC;AAAA,IACD,MAAM,aAAa,iBACjB;AAAA,MACE,oBAAoB,CAAC,gBAAgB;AAAA,MACrC,aAAa,CAAC,UAAU;AAAA,MACxB,MAAM,CAAC,IAAI;AAAA,MACX,YAAY,CAAC,SAAS;AAAA,MACtB,YAAY,CAAC,UAAU;AAAA,MACvB,YAAY,CAAC,UAAU;AAAA,MACvB,aAAa,CAAC,UAAU;AAAA,MACxB,0BAA0B,CAAC,0BAA0B,IAAI;AAAA,MACzD,kBAAkB,CAAC,mBAAmB,IAAI;AAAA,MAC1C,yBAAyB,CAAC,yBAAyB,IAAI;AAAA,IACzD,GACA,OACF;AAAA,IACA,MAAM,KAAK,IAAI,KAAK,wBAAwB,YAAY,UAAU,CAAC;AAAA;AAAA,OAI/D,UAAS,CACb,kBACA,YACA,MACA,gBACA,uBACe;AAAA,IACf,MAAM,KAAK,IAAI,KAAK,sBAAsB;AAAA,MACxC,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,kBAAkB,kBAAkB;AAAA,MACpC,yBAAyB,yBAAyB;AAAA,IACpD,CAAC;AAAA;AAAA,EAIH,KAAK,GAAS;AAAA,IACZ,KAAK,IAAI,MAAM;AAAA;AAEnB;;;AD9gCA,4BAAqB,eAAK,0BAAc,kBAAS;AACjD;;AMtTA,2DAA4C;AAwB5C,SAAS,YAAY,CAAC,MAAc,KAAyB;AAAA,EAC3D,MAAM,MAAM,KAAK,YAAY,GAAG;AAAA,EAChC,IAAI,OAAO,GAAG;AAAA,IACZ,MAAM,IAAI,KAAK,MAAM,GAAG,GAAG;AAAA,IAC3B,IAAI,UAAU,MAAM,KAAK,cAAc;AAAA,IACvC,IAAI,UAAU,OAAO,KAAK,MAAM,MAAM,CAAC,CAAC;AAAA,EAC1C,EAAO;AAAA,IACL,IAAI,UAAU;AAAA,IACd,IAAI,UAAU,OAAO,IAAI;AAAA;AAAA;AAI7B,SAAS,iBAAiB,CAAC,MAAuC;AAAA,EAChE,MAAM,MAAoB,CAAC;AAAA,EAC3B,SAAS,IAAI,EAAG,IAAI,KAAK,QAAQ,KAAK;AAAA,IACpC,MAAM,IAAI,KAAK;AAAA,IACf,IAAI,MAAM,YAAY,IAAI,IAAI,KAAK,QAAQ;AAAA,MACzC,IAAI,WAAW,KAAK,EAAE;AAAA,IACxB,EAAO,SAAI,EAAE,WAAW,SAAS,GAAG;AAAA,MAClC,IAAI,WAAW,EAAE,MAAM,UAAU,MAAM;AAAA,IACzC,EAAO,SAAI,MAAM,WAAW,IAAI,IAAI,KAAK,QAAQ;AAAA,MAC/C,aAAa,KAAK,EAAE,IAAI,GAAG;AAAA,IAC7B,EAAO,SAAI,EAAE,WAAW,QAAQ,GAAG;AAAA,MACjC,aAAa,EAAE,MAAM,SAAS,MAAM,GAAG,GAAG;AAAA,IAC5C,EAAO,SAAI,MAAM,oBAAoB,IAAI,IAAI,KAAK,QAAQ;AAAA,MACxD,IAAI,cAAc,OAAO,KAAK,EAAE,EAAE;AAAA,IACpC,EAAO,SAAI,EAAE,WAAW,iBAAiB,GAAG;AAAA,MAC1C,IAAI,cAAc,OAAO,EAAE,MAAM,kBAAkB,MAAM,CAAC;AAAA,IAC5D;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAAA;AAoBF,MAAM,OAAO;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EAER,WAAW,CAAC,QAAsB;AAAA,IAIhC,KAAK,YAAY,OAAO,YAAY,IAAI;AAAA,IACxC,KAAK,eAAe,OAAO;AAAA,IAG3B,IAAI,OAAO,WAAW;AAAA,MACpB,WAAW,QAAQ,OAAO,WAAW;AAAA,QACnC,KAAK,UAAU,SAAS,IAAI;AAAA,MAC9B;AAAA,IACF;AAAA,IAGA,IAAI,OAAO,SAAS;AAAA,MAClB,WAAW,WAAU,OAAO,QAAQ,SAAS;AAAA,QAC3C,IAAI,QAAO,WAAW;AAAA,UACpB,WAAW,QAAQ,QAAO,WAAW;AAAA,YACnC,KAAK,UAAU,SAAS,IAAI;AAAA,YAG5B,KAAK,UAAU,iBAAiB,MAAM,QAAO,MAAM,OAAO,QAAQ,IAAI;AAAA,UACxE;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAGA,IAAI,OAAO,kBAAkB;AAAA,MAC3B,KAAK,oBAAoB,OAAO;AAAA,IAClC,EAAO,SAAI,OAAO,SAAS;AAAA,MACzB,MAAM,OAAO,IAAI,yBACf,OAAO,SACP,KAAK,SACP;AAAA,MACA,KAAK,oBAAoB,OAAO,0BAC5B,OAAO,wBAAwB,IAAI,IACnC;AAAA,IACN;AAAA;AAAA,EAGF,GAAG,CAAC,OAA0B,QAAQ,KAAK,MAAM,CAAC,GAAS;AAAA,IACzD,QAAQ,OAAO,MAAM,0BAA0B,QAAQ;AAAA,CAAO;AAAA,IAC9D,IAAI;AAAA,MACF,MAAM,WAAW,KAAK,cAAc;AAAA,MACpC,QAAQ,OAAO,MAAM;AAAA,CAA2B;AAAA,MAEhD,MAAM,WAAW,kBAAkB,IAAI;AAAA,MACvC,IAAI,SAAS,aAAa,WAAW;AAAA,QAMnC,MAAM,cAAc,QAAQ,IAAI;AAAA,QAChC,MAAM,cAAc,gBAAgB,aAAa,gBAAgB,KAC7D,OAAO,WAAW,IAClB,SAAS;AAAA,QACb,QAAQ,OAAO,MACb,0BAA0B,SAAS,iBAAiB,eAAe,OAAO,gBAAgB,aAAa,gBAAgB,KAAK,oBAAoB;AAAA,CAClJ;AAAA,QACA,UAAU,UAAU;AAAA,UAClB,UAAU,SAAS;AAAA,UACnB;AAAA,QACF,CAAC,EAAE,KAAK,CAAC,WAAW,OAAO,IAAI,EAAE,KAAK,MAAM;AAAA,UAC1C,QAAQ,OAAO,MAAM;AAAA,CAA2C;AAAA,SACjE,EAAE,MAAM,CAAC,SAAa;AAAA,UACrB,QAAQ,OAAO,MAAM,iBAAiB,KAAI;AAAA,EAAY,KAAI;AAAA,CAAS;AAAA,UACnE,QAAQ,KAAK,CAAC;AAAA,SACf;AAAA,QACD;AAAA,MACF;AAAA,MAEA,IAAI,SAAS,YAAY,WAAW;AAAA,QAMlC,MAAM,cAAc,QAAQ,IAAI;AAAA,QAChC,MAAM,cAAc,gBAAgB,aAAa,gBAAgB,KAC7D,OAAO,WAAW,IAClB,SAAS;AAAA,QACb,QAAQ,OAAO,MACb,sBAAsB,SAAS,WAAW,SAAS,gBAAgB,eAAe,OAAO,gBAAgB,aAAa,gBAAgB,KAAK,oBAAoB;AAAA,CACjK;AAAA,QACA,SAAS,UAAU;AAAA,UACjB,MAAM,SAAS;AAAA,UACf,MAAM,SAAS;AAAA,UACf;AAAA,QACF,CAAC,EAAE,KAAK,CAAC,WAAW,OAAO,IAAI,EAAE,KAAK,MAAM;AAAA,UAC1C,QAAQ,OAAO,MAAM;AAAA,CAA0C;AAAA,SAChE,EAAE,MAAM,CAAC,SAAa;AAAA,UACrB,QAAQ,OAAO,MAAM,iBAAiB,KAAI;AAAA,EAAY,KAAI;AAAA,CAAS;AAAA,UACnE,QAAQ,KAAK,CAAC;AAAA,SACf;AAAA,QACD;AAAA,MACF;AAAA,MAEA,MAAM,SAAS,IAAI,aAAa,QAAQ;AAAA,MACxC,QAAQ,OAAO,MAAM;AAAA,CAA0C;AAAA,MAC/D,OAAO,IAAI,EAAE,KAAK,MAAM;AAAA,QACtB,QAAQ,OAAO,MAAM;AAAA,CAA0C;AAAA,OAChE,EAAE,MAAM,CAAC,SAAQ;AAAA,QAChB,QAAQ,OAAO,MAAM,iBAAiB,KAAI;AAAA,EAAY,KAAI;AAAA,CAAS;AAAA,QACnE,QAAQ,KAAK,CAAC;AAAA,OACf;AAAA,MACD,OAAO,MAAU;AAAA,MACjB,QAAQ,OAAO,MAAM,sBAAsB,KAAI;AAAA,EAAY,KAAI;AAAA,CAAS;AAAA,MACxE,QAAQ,KAAK,CAAC;AAAA;AAAA;AAAA,EAKV,aAAa,GAAa;AAAA,IAChC,OAAO,iBAAiB;AAAA,MACtB,UAAU,KAAK;AAAA,MACf,kBAAkB,KAAK;AAAA,MACvB,aAAa,KAAK;AAAA,IACpB,CAAC;AAAA;AAAA,OAiBG,YAAW,CACf,UACA,UACe;AAAA,IACf,MAAM,eAAe,KAAK,cAAc,GAAG,EAAE,UAAU,SAAS,CAAC;AAAA;AAErE;",
|
|
87
|
+
"debugId": "AC11F66207EB748964756E2164756E21",
|
|
88
88
|
"names": []
|
|
89
89
|
}
|