@foretag/tanstack-db-surrealdb 0.6.1 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -293,10 +293,10 @@ var mapRelationPath = (path, relation) => {
|
|
|
293
293
|
var normalizeFilterValue = (value) => {
|
|
294
294
|
if (Array.isArray(value))
|
|
295
295
|
return value.map((item) => normalizeFilterValue(item));
|
|
296
|
-
if (value && typeof value === "object")
|
|
297
|
-
return normalizeRecordIdLikeValue(value);
|
|
298
296
|
const native = toNativeRecordIdLikeValue(value);
|
|
299
297
|
if (native !== value) return native;
|
|
298
|
+
if (value && typeof value === "object")
|
|
299
|
+
return normalizeRecordIdLikeValue(value);
|
|
300
300
|
return normalizeRecordIdLikeValue(value);
|
|
301
301
|
};
|
|
302
302
|
var toSqlFragment = (value) => {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/crdt.ts","../src/id.ts","../src/table.ts","../src/util.ts","../src/encryption/index.ts","../src/index.ts"],"names":["RecordId","canonical","parseWhereExpression","parseOrderByExpression","Table","Features","firstRow","LoroDoc","queryCollectionOptions","rows","decoded"],"mappings":"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","file":"index.js","sourcesContent":["import type { LoroDoc } from 'loro-crdt';\nimport type { LocalChange } from './types';\nimport type { CRDTProfileAdapter } from './crdt/types';\n\nexport type LoroProfile = 'json' | 'richtext';\n\nconst toRecord = (value: unknown): Record<string, unknown> =>\n\ttypeof value === 'object' && value !== null\n\t\t? (value as Record<string, unknown>)\n\t\t: {};\n\nexport const materializeLoroJson = <T extends object>(\n\tdoc: LoroDoc,\n\tid: string,\n): T => {\n\tconst root = toRecord(doc.getMap('root').toJSON());\n\treturn {\n\t\tid,\n\t\t...root,\n\t} as unknown as T;\n};\n\nexport const applyLoroJsonChange = <T extends object>(\n\tdoc: LoroDoc,\n\tchange: LocalChange<T>,\n): void => {\n\tconst root = doc.getMap('root');\n\tif (change.type === 'delete') {\n\t\troot.set('deleted', true);\n\t\treturn;\n\t}\n\tconst value = toRecord(change.value);\n\tfor (const [key, fieldValue] of Object.entries(value)) {\n\t\tif (key === 'id') continue;\n\t\troot.set(key, fieldValue);\n\t}\n};\n\nexport const materializeLoroRichtext = <T extends object>(\n\tdoc: LoroDoc,\n\tid: string,\n): T => {\n\tconst metadata = toRecord(doc.getMap('root').toJSON());\n\tconst content = doc.getText('content').toString();\n\treturn {\n\t\tid,\n\t\tcontent,\n\t\t...metadata,\n\t} as unknown as T;\n};\n\nexport const applyLoroRichtextChange = <T extends object>(\n\tdoc: LoroDoc,\n\tchange: LocalChange<T>,\n): void => {\n\tconst text = doc.getText('content');\n\tconst metadata = doc.getMap('root');\n\tif (change.type === 'delete') {\n\t\tmetadata.set('deleted', true);\n\t\treturn;\n\t}\n\tconst value = toRecord(change.value);\n\tfor (const [key, fieldValue] of Object.entries(value)) {\n\t\tif (key === 'id') continue;\n\t\tif (key === 'content') {\n\t\t\tif (typeof fieldValue === 'string') text.update(fieldValue);\n\t\t\tcontinue;\n\t\t}\n\t\tmetadata.set(key, fieldValue);\n\t}\n};\n\nexport const createLoroProfile = <T extends object = Record<string, unknown>>(\n\tprofile: LoroProfile,\n): CRDTProfileAdapter<T> => {\n\tif (profile === 'richtext') {\n\t\treturn {\n\t\t\tmaterialize: materializeLoroRichtext as CRDTProfileAdapter<T>['materialize'],\n\t\t\tapplyLocalChange:\n\t\t\t\tapplyLoroRichtextChange as CRDTProfileAdapter<T>['applyLocalChange'],\n\t\t};\n\t}\n\n\treturn {\n\t\tmaterialize: materializeLoroJson as CRDTProfileAdapter<T>['materialize'],\n\t\tapplyLocalChange:\n\t\t\tapplyLoroJsonChange as CRDTProfileAdapter<T>['applyLocalChange'],\n\t};\n};\n","import { RecordId } from 'surrealdb';\n\nconst recordIdIdentityPool = new Map<string, unknown>();\nconst nativeRecordIdPool = new Map<string, RecordId>();\n\nconst internRecordIdIdentity = (\n\tcanonical: string,\n\tpreferred?: unknown,\n): unknown => {\n\tconst cached = recordIdIdentityPool.get(canonical);\n\tif (cached !== undefined) return cached;\n\tconst created = preferred ?? canonicalToNativeRecordId(canonical);\n\trecordIdIdentityPool.set(canonical, created);\n\treturn created;\n};\n\nconst getNativeRecordId = (canonical: string): RecordId => {\n\tconst cached = nativeRecordIdPool.get(canonical);\n\tif (cached) return cached;\n\tconst created = canonicalToNativeRecordId(canonical);\n\tnativeRecordIdPool.set(canonical, created);\n\treturn created;\n};\n\nconst canonicalToNativeRecordId = (canonical: string): RecordId => {\n\tconst idx = canonical.indexOf(':');\n\tconst table = canonical.slice(0, idx);\n\tconst key = canonical.slice(idx + 1);\n\treturn new RecordId(table, key);\n};\n\nexport const stripOuterQuotes = (value: string): string => {\n\tconst trimmed = value.trim();\n\tconst isSingleQuoted =\n\t\ttrimmed.startsWith(\"'\") && trimmed.endsWith(\"'\") && trimmed.length >= 2;\n\tconst isDoubleQuoted =\n\t\ttrimmed.startsWith('\"') && trimmed.endsWith('\"') && trimmed.length >= 2;\n\tconst isBacktickQuoted =\n\t\ttrimmed.startsWith('`') && trimmed.endsWith('`') && trimmed.length >= 2;\n\treturn isSingleQuoted || isDoubleQuoted || isBacktickQuoted\n\t\t? trimmed.slice(1, -1)\n\t\t: trimmed;\n};\n\nexport const toRecordIdString = (rid: RecordId | string): string => {\n\tconst raw =\n\t\ttypeof rid === 'string' ? stripOuterQuotes(rid) : rid.toString();\n\tconst trimmed = stripOuterQuotes(raw).trim();\n\tconst idx = trimmed.indexOf(':');\n\tif (idx <= 0 || idx >= trimmed.length - 1) return trimmed;\n\n\tconst table = trimmed.slice(0, idx).trim();\n\tconst key = stripOuterQuotes(\n\t\tstripAngleBrackets(stripOuterQuotes(trimmed.slice(idx + 1).trim())),\n\t);\n\tif (!table || !key) return trimmed;\n\treturn `${table}:${key}`;\n};\n\nconst stripAngleBrackets = (value: string): string => {\n\tconst trimmed = value.trim();\n\tconst isSurrealAngles =\n\t\ttrimmed.startsWith('⟨') && trimmed.endsWith('⟩') && trimmed.length >= 2;\n\tconst isAsciiAngles =\n\t\ttrimmed.startsWith('<') && trimmed.endsWith('>') && trimmed.length >= 2;\n\treturn isSurrealAngles || isAsciiAngles\n\t\t? trimmed.slice(1, -1).trim()\n\t\t: trimmed;\n};\n\nexport const toRecordKeyString = (rid: RecordId | string): string => {\n\tconst normalized = toRecordIdString(rid);\n\tconst idx = normalized.indexOf(':');\n\tconst rawKey = idx > 0 ? normalized.slice(idx + 1) : normalized;\n\treturn stripOuterQuotes(rawKey.trim());\n};\n\nconst isRecordIdString = (value: string): boolean => {\n\tconst idx = value.indexOf(':');\n\treturn idx > 0 && idx < value.length - 1;\n};\n\nconst looksLikeTableName = (value: string): boolean =>\n\t/^[A-Za-z_][A-Za-z0-9_-]*$/.test(value);\n\ntype SurrealRecordIdLike = {\n\ttable: unknown;\n\tid: unknown;\n\ttoString: () => unknown;\n\tconstructor?: { name?: string };\n};\n\nconst getCtorName = (value: unknown): string | undefined => {\n\tif (!value || typeof value !== 'object') return undefined;\n\tconst ctor = (value as { constructor?: { name?: unknown } }).constructor;\n\treturn typeof ctor?.name === 'string' ? ctor.name : undefined;\n};\n\nconst isCrossRuntimeRecordIdObject = (\n\tvalue: unknown,\n): value is SurrealRecordIdLike => {\n\tif (!value || typeof value !== 'object' || value instanceof RecordId) {\n\t\treturn false;\n\t}\n\tconst obj = value as Partial<SurrealRecordIdLike>;\n\tif (typeof obj.toString !== 'function') return false;\n\tif (!('table' in obj) || !('id' in obj)) return false;\n\tconst ctorName = getCtorName(value);\n\t// SurrealDB instances can be RecordId/RecordId2/etc across CJS/ESM bundles.\n\tif (!ctorName || !/^RecordId\\d*$/.test(ctorName)) return false;\n\n\tconst tableValue = obj.table;\n\tconst table =\n\t\ttypeof tableValue === 'string'\n\t\t\t? tableValue\n\t\t\t: tableValue != null\n\t\t\t\t? String(tableValue)\n\t\t\t\t: '';\n\tconst idValue = obj.id;\n\tconst idIsPrimitive =\n\t\ttypeof idValue === 'string' ||\n\t\ttypeof idValue === 'number' ||\n\t\ttypeof idValue === 'bigint';\n\treturn idIsPrimitive && looksLikeTableName(stripOuterQuotes(table).trim());\n};\n\nconst toCanonicalRecordIdString = (value: string): string | undefined => {\n\tconst normalized = toRecordIdString(value);\n\tif (!isRecordIdString(normalized)) return undefined;\n\n\tconst idx = normalized.indexOf(':');\n\tconst table = stripOuterQuotes(normalized.slice(0, idx).trim());\n\tconst key = normalized.slice(idx + 1).trim();\n\tif (!table || !key || !looksLikeTableName(table)) return undefined;\n\treturn `${table}:${key}`;\n};\n\nconst unwrapIdWrapper = (value: unknown): unknown => {\n\tif (!value || typeof value !== 'object') return undefined;\n\tconst obj = value as Record<string, unknown>;\n\tconst keys = Object.keys(obj);\n\tif (keys.length !== 1 || keys[0] !== 'id') return undefined;\n\treturn obj.id;\n};\n\nconst asCanonicalRecordIdFromCrossRuntimeObject = (\n\tvalue: unknown,\n): string | undefined => {\n\tif (!isCrossRuntimeRecordIdObject(value)) return undefined;\n\tconst obj = value as SurrealRecordIdLike;\n\tconst tableRaw =\n\t\ttypeof obj.table === 'string' ? obj.table : String(obj.table);\n\tconst table = stripOuterQuotes(tableRaw).trim();\n\tconst id = String(obj.id);\n\tconst fromFields =\n\t\ttable && id && looksLikeTableName(table) ? `${table}:${id}` : undefined;\n\tif (fromFields) return toCanonicalRecordIdString(fromFields);\n\treturn toCanonicalRecordIdString(String(obj.toString()));\n};\n\nexport const asCanonicalRecordIdString = (\n\tvalue: unknown,\n): string | undefined => {\n\tif (typeof value === 'string') {\n\t\treturn toCanonicalRecordIdString(value);\n\t}\n\tif (value instanceof RecordId) {\n\t\treturn toCanonicalRecordIdString(value.toString());\n\t}\n\tconst crossRuntimeCanonical =\n\t\tasCanonicalRecordIdFromCrossRuntimeObject(value);\n\tif (crossRuntimeCanonical) return crossRuntimeCanonical;\n\tconst wrappedId = unwrapIdWrapper(value);\n\tif (wrappedId === undefined || wrappedId === value) return undefined;\n\treturn asCanonicalRecordIdString(wrappedId);\n};\n\nexport const toNativeRecordIdLikeValue = (value: unknown): unknown => {\n\tif (value instanceof RecordId) {\n\t\tconst canonical = asCanonicalRecordIdString(value);\n\t\tif (!canonical) return value;\n\t\treturn getNativeRecordId(canonical);\n\t}\n\tconst canonical = asCanonicalRecordIdString(value);\n\tif (!canonical) return value;\n\treturn getNativeRecordId(canonical);\n};\n\nexport const preferRecordIdLikeIdentity = (value: unknown): unknown => {\n\tconst canonical = asCanonicalRecordIdString(value);\n\tif (!canonical) return normalizeRecordIdLikeValue(value);\n\n\tif (value instanceof RecordId) {\n\t\trecordIdIdentityPool.set(canonical, value);\n\t\treturn value;\n\t}\n\n\tif (isCrossRuntimeRecordIdObject(value)) {\n\t\trecordIdIdentityPool.set(canonical, value);\n\t\treturn value;\n\t}\n\n\tconst wrappedId = unwrapIdWrapper(value);\n\tif (wrappedId instanceof RecordId) {\n\t\trecordIdIdentityPool.set(canonical, wrappedId);\n\t\treturn wrappedId;\n\t}\n\tif (isCrossRuntimeRecordIdObject(wrappedId)) {\n\t\trecordIdIdentityPool.set(canonical, wrappedId);\n\t\treturn wrappedId;\n\t}\n\n\treturn internRecordIdIdentity(canonical);\n};\n\nexport const preferRecordIdLikeIdentityDeep = <T>(value: T): T => {\n\tconst preferred = preferRecordIdLikeIdentity(value);\n\n\tif (Array.isArray(preferred)) {\n\t\treturn preferred.map((item) =>\n\t\t\tpreferRecordIdLikeIdentityDeep(item),\n\t\t) as T;\n\t}\n\n\tif (isPlainObject(preferred)) {\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const [k, v] of Object.entries(preferred)) {\n\t\t\tout[k] = preferRecordIdLikeIdentityDeep(v);\n\t\t}\n\t\treturn out as T;\n\t}\n\n\treturn preferred as T;\n};\n\nexport const normalizeRecordIdLikeValue = (value: unknown): unknown => {\n\tif (value instanceof RecordId) {\n\t\tconst canonical = asCanonicalRecordIdString(value);\n\t\tif (!canonical) return value;\n\t\treturn internRecordIdIdentity(canonical, value);\n\t}\n\tif (typeof value === 'object' && value !== null) {\n\t\tconst canonical = asCanonicalRecordIdString(value);\n\t\tif (!canonical) return value;\n\n\t\tif (isCrossRuntimeRecordIdObject(value)) {\n\t\t\treturn internRecordIdIdentity(canonical, value);\n\t\t}\n\n\t\tconst wrappedId = unwrapIdWrapper(value);\n\t\tif (\n\t\t\twrappedId instanceof RecordId ||\n\t\t\tisCrossRuntimeRecordIdObject(wrappedId)\n\t\t) {\n\t\t\treturn internRecordIdIdentity(canonical, wrappedId);\n\t\t}\n\n\t\treturn internRecordIdIdentity(canonical);\n\t}\n\tif (typeof value !== 'string') return value;\n\n\tconst trimmed = value.trim();\n\tconst unquoted = stripOuterQuotes(trimmed);\n\tconst canonical =\n\t\ttoCanonicalRecordIdString(unquoted) ??\n\t\t(unquoted === trimmed ? undefined : toCanonicalRecordIdString(trimmed));\n\tif (canonical) {\n\t\treturn internRecordIdIdentity(canonical);\n\t}\n\n\t// Keep original value shape if it isn't record-id-like\n\treturn value;\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' &&\n\tvalue !== null &&\n\tObject.getPrototypeOf(value) === Object.prototype;\n\nexport const normalizeRecordIdLikeValueDeep = <T>(value: T): T => {\n\tconst normalized = normalizeRecordIdLikeValue(value);\n\n\tif (Array.isArray(normalized)) {\n\t\treturn normalized.map((item) =>\n\t\t\tnormalizeRecordIdLikeValueDeep(item),\n\t\t) as T;\n\t}\n\n\tif (isPlainObject(normalized)) {\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const [k, v] of Object.entries(normalized)) {\n\t\t\tout[k] = normalizeRecordIdLikeValueDeep(v);\n\t\t}\n\t\treturn out as T;\n\t}\n\n\treturn normalized as T;\n};\n\nexport const normalizeRecordIdLikeFields = <T extends Record<string, unknown>>(\n\tdata: T,\n): T => {\n\tconst out: Record<string, unknown> = {};\n\tfor (const [k, v] of Object.entries(data)) {\n\t\tout[k] = normalizeRecordIdLikeValue(v);\n\t}\n\treturn out as T;\n};\n\nexport const toRecordId = (\n\ttableName: string,\n\tid: RecordId | string,\n): RecordId => {\n\tif (id instanceof RecordId) {\n\t\treturn id;\n\t}\n\n\tconst normalized = toRecordIdString(id);\n\tconst prefixed = `${tableName}:`;\n\tconst key = normalized.startsWith(prefixed)\n\t\t? normalized.slice(prefixed.length)\n\t\t: normalized;\n\treturn new RecordId(tableName, key);\n};\n","import { parseOrderByExpression, parseWhereExpression } from '@tanstack/db';\nimport {\n\tFeatures,\n\ttype LiveMessage,\n\ttype LiveSubscription,\n\ttype RecordId,\n\ttype Surreal,\n\tTable,\n} from 'surrealdb';\nimport {\n\tnormalizeRecordIdLikeValue,\n\ttoNativeRecordIdLikeValue,\n\ttoRecordId,\n} from './id';\nimport type { SurrealSubset, TableOptions } from './types';\n\ntype QueryResult<T> = T[] | null;\ntype RowResult<T> = T | T[] | null;\ntype FieldPath = Array<string | number>;\ntype SqlFragment = { sql: string };\n\nconst IDENTIFIER_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\nconst firstRow = <T>(res: RowResult<T>): T | undefined => {\n\tif (!res) return undefined;\n\tif (Array.isArray(res)) return res[0];\n\treturn res;\n};\n\nconst toFieldPath = (value: unknown): FieldPath => {\n\tif (!Array.isArray(value)) {\n\t\tthrow new Error('Expected a field path array in where expression.');\n\t}\n\treturn value as FieldPath;\n};\n\nconst quoteIdentifier = (segment: string): string => {\n\tif (IDENTIFIER_RE.test(segment)) return segment;\n\treturn `\\`${segment.replaceAll('`', '\\\\`')}\\``;\n};\n\nconst formatFieldPath = (path: FieldPath): string => {\n\tlet out = '';\n\tfor (const segment of path) {\n\t\tif (typeof segment === 'number') {\n\t\t\tout += `[${segment}]`;\n\t\t\tcontinue;\n\t\t}\n\t\tconst next = quoteIdentifier(segment);\n\t\tout = out ? `${out}.${next}` : next;\n\t}\n\treturn out;\n};\n\nconst isReferencePathCandidate = (value: unknown): value is FieldPath =>\n\tArray.isArray(value) &&\n\tvalue.length > 0 &&\n\ttypeof value[0] === 'string' &&\n\tvalue.every(\n\t\t(segment) => typeof segment === 'string' || typeof segment === 'number',\n\t);\n\nconst mapRelationPath = (path: FieldPath, relation?: boolean): FieldPath => {\n\tif (!relation) return path;\n\tif (path[0] === 'from') return ['in', ...path.slice(1)];\n\tif (path[0] === 'to') return ['out', ...path.slice(1)];\n\treturn path;\n};\n\nconst normalizeFilterValue = (value: unknown): unknown => {\n\tif (Array.isArray(value))\n\t\treturn value.map((item) => normalizeFilterValue(item));\n\tif (value && typeof value === 'object')\n\t\treturn normalizeRecordIdLikeValue(value);\n\n\tconst native = toNativeRecordIdLikeValue(value);\n\tif (native !== value) return native;\n\treturn normalizeRecordIdLikeValue(value);\n};\n\nconst toSqlFragment = (value: unknown): SqlFragment => {\n\tif (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\t'sql' in value &&\n\t\ttypeof (value as { sql: unknown }).sql === 'string'\n\t) {\n\t\treturn value as SqlFragment;\n\t}\n\tthrow new Error('Unsupported where expression node.');\n};\n\nconst joinLogical = (op: 'AND' | 'OR', args: Array<unknown>): SqlFragment => {\n\tconst parts = args.map(toSqlFragment).map((frag) => frag.sql);\n\tif (parts.length === 0) {\n\t\treturn { sql: op === 'AND' ? 'true' : 'false' };\n\t}\n\tif (parts.length === 1) return { sql: parts[0] };\n\treturn {\n\t\tsql: parts.map((part) => `(${part})`).join(` ${op} `),\n\t};\n};\n\nconst buildSubsetQuery = (\n\ttable: TableOptions,\n\tsubset?: SurrealSubset,\n): { sql: string; params: Record<string, unknown> } => {\n\tlet paramIdx = 0;\n\tconst params: Record<string, unknown> = { table: table.name };\n\tconst nextParam = (value: unknown): string => {\n\t\tconst key = `p${paramIdx++}`;\n\t\tparams[key] = value;\n\t\treturn `$${key}`;\n\t};\n\tconst comparison = (\n\t\tfieldPath: unknown,\n\t\top: '=' | '!=' | '>' | '>=' | '<' | '<=' | 'LIKE',\n\t\tvalue: unknown,\n\t): SqlFragment => {\n\t\tconst field = formatFieldPath(\n\t\t\tmapRelationPath(toFieldPath(fieldPath), table.relation),\n\t\t);\n\n\t\tif (value === undefined) {\n\t\t\tif (op === '=') return { sql: `${field} IS NONE` };\n\t\t\tif (op === '!=') return { sql: `${field} IS NOT NONE` };\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot compare field '${field}' with undefined using '${op}'.`,\n\t\t\t);\n\t\t}\n\n\t\tif (isReferencePathCandidate(value)) {\n\t\t\tthrow new Error(\n\t\t\t\t'Got a field reference on the right side of a where comparison. Pass a concrete value.',\n\t\t\t);\n\t\t}\n\t\treturn {\n\t\t\tsql: `${field} ${op} ${nextParam(normalizeFilterValue(value))}`,\n\t\t};\n\t};\n\tconst whereSqlFrom = (\n\t\texpr: NonNullable<SurrealSubset['where']>,\n\t): string => {\n\t\tconst fragment = parseWhereExpression<SqlFragment>(expr, {\n\t\t\thandlers: {\n\t\t\t\tand: (...args) => joinLogical('AND', args),\n\t\t\t\tor: (...args) => joinLogical('OR', args),\n\t\t\t\tnot: (arg) => ({ sql: `NOT (${toSqlFragment(arg).sql})` }),\n\t\t\t\teq: (field, value) => comparison(field, '=', value),\n\t\t\t\tgt: (field, value) => comparison(field, '>', value),\n\t\t\t\tgte: (field, value) => comparison(field, '>=', value),\n\t\t\t\tlt: (field, value) => comparison(field, '<', value),\n\t\t\t\tlte: (field, value) => comparison(field, '<=', value),\n\t\t\t\tlike: (field, value) => comparison(field, 'LIKE', value),\n\t\t\t\tilike: (field, value) => {\n\t\t\t\t\tconst f = formatFieldPath(\n\t\t\t\t\t\tmapRelationPath(toFieldPath(field), table.relation),\n\t\t\t\t\t);\n\t\t\t\t\tconst p = nextParam(normalizeFilterValue(value));\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsql: `string::lower(${f}) LIKE string::lower(${p})`,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tin: (field, value) => {\n\t\t\t\t\tconst f = formatFieldPath(\n\t\t\t\t\t\tmapRelationPath(toFieldPath(field), table.relation),\n\t\t\t\t\t);\n\t\t\t\t\tif (Array.isArray(value) && value.length === 0) {\n\t\t\t\t\t\treturn { sql: 'false' };\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsql: `${f} IN ${nextParam(normalizeFilterValue(value))}`,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tisNull: (field) => ({\n\t\t\t\t\tsql: `${formatFieldPath(\n\t\t\t\t\t\tmapRelationPath(toFieldPath(field), table.relation),\n\t\t\t\t\t)} IS NULL`,\n\t\t\t\t}),\n\t\t\t\tisUndefined: (field) => ({\n\t\t\t\t\tsql: `${formatFieldPath(\n\t\t\t\t\t\tmapRelationPath(toFieldPath(field), table.relation),\n\t\t\t\t\t)} IS NONE`,\n\t\t\t\t}),\n\t\t\t},\n\t\t\tonUnknownOperator: (op) => {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Unsupported where operator '${op}' for SurrealQL translation.`,\n\t\t\t\t);\n\t\t\t},\n\t\t});\n\n\t\tif (!fragment) return '';\n\t\treturn fragment.sql;\n\t};\n\n\tconst whereParts: string[] = [];\n\tif (subset?.where) {\n\t\tconst parsed = whereSqlFrom(subset.where);\n\t\tif (parsed) whereParts.push(parsed);\n\t}\n\tif (subset?.cursor?.whereFrom) {\n\t\tconst cursorWhere = whereSqlFrom(subset.cursor.whereFrom);\n\t\tif (cursorWhere) whereParts.push(cursorWhere);\n\t}\n\n\tconst whereSql = whereParts.length\n\t\t? ` WHERE ${whereParts.map((part) => `(${part})`).join(' AND ')}`\n\t\t: '';\n\n\tconst order = parseOrderByExpression(subset?.orderBy);\n\tconst orderSql = order.length\n\t\t? ` ORDER BY ${order\n\t\t\t\t.map(\n\t\t\t\t\t(clause) =>\n\t\t\t\t\t\t`${formatFieldPath(\n\t\t\t\t\t\t\tmapRelationPath(clause.field, table.relation),\n\t\t\t\t\t\t)} ${clause.direction.toUpperCase()}`,\n\t\t\t\t)\n\t\t\t\t.join(', ')}`\n\t\t: '';\n\tconst limitSql =\n\t\ttypeof subset?.limit === 'number'\n\t\t\t? ` LIMIT ${nextParam(subset.limit)}`\n\t\t\t: '';\n\tconst offsetSql =\n\t\ttypeof subset?.offset === 'number'\n\t\t\t? ` START ${nextParam(subset.offset)}`\n\t\t\t: '';\n\n\treturn {\n\t\tsql: `SELECT * FROM type::table($table)${whereSql}${orderSql}${limitSql}${offsetSql};`,\n\t\tparams,\n\t};\n};\n\nexport function manageTable<T extends { id: string | RecordId }>(\n\tdb: Surreal,\n\tconfig: TableOptions,\n) {\n\tconst { name } = config;\n\tconst table = new Table(name);\n\n\tconst listAll = async (): Promise<T[]> => {\n\t\treturn loadSubset();\n\t};\n\n\tconst loadSubset = async (subset?: SurrealSubset): Promise<T[]> => {\n\t\tconst { sql, params } = buildSubsetQuery(config, subset);\n\t\tconst [res] = await db.query<[QueryResult<T>]>(sql, params);\n\t\treturn res ?? [];\n\t};\n\n\tconst create = async (data: T | Partial<T>): Promise<T | undefined> => {\n\t\tconst id = (data as Partial<T> & { id?: string | RecordId }).id;\n\t\tif (!id) {\n\t\t\tconst created = await db.create(table).content(data);\n\t\t\treturn firstRow(created as RowResult<T>);\n\t\t}\n\n\t\tconst payload = { ...(data as Record<string, unknown>) };\n\t\tpayload.id = toRecordId(name, id);\n\t\tconst inserted = await db.insert(table, payload);\n\t\treturn firstRow(inserted as RowResult<T>);\n\t};\n\n\tconst update = async (id: RecordId, data: T | Partial<T>) => {\n\t\tconst { id: _ignoredId, ...rest } = data as Record<string, unknown>;\n\t\tawait db.update(id).merge(rest);\n\t};\n\n\tconst remove = async (id: RecordId) => {\n\t\tawait db.delete(id);\n\t};\n\n\tconst subscribe = (\n\t\tcb: (e: { type: 'insert' | 'update' | 'delete'; row: T }) => void,\n\t) => {\n\t\tlet killed = false;\n\t\tlet live: LiveSubscription | undefined;\n\n\t\tconst on = (msg: LiveMessage) => {\n\t\t\tconst { action, value } = msg as unknown as {\n\t\t\t\taction: 'CREATE' | 'UPDATE' | 'DELETE' | 'KILLED';\n\t\t\t\tvalue: T & { id: string | RecordId };\n\t\t\t};\n\n\t\t\tif (action === 'KILLED') return;\n\t\t\tif (action === 'CREATE') cb({ type: 'insert', row: value });\n\t\t\telse if (action === 'UPDATE') cb({ type: 'update', row: value });\n\t\t\telse if (action === 'DELETE')\n\t\t\t\tcb({ type: 'delete', row: { id: value.id } as T });\n\t\t};\n\n\t\tconst start = async () => {\n\t\t\tif (!db.isFeatureSupported(Features.LiveQueries)) return;\n\t\t\tlive = await db.live(table);\n\t\t\tlive.subscribe(on);\n\t\t};\n\n\t\tvoid start();\n\n\t\treturn () => {\n\t\t\tif (killed) return;\n\t\t\tkilled = true;\n\t\t\tif (live) void live.kill();\n\t\t};\n\t};\n\n\treturn {\n\t\tlistAll,\n\t\tloadSubset,\n\t\tcreate,\n\t\tupdate,\n\t\tremove,\n\t\tsoftDelete: remove,\n\t\tsubscribe,\n\t};\n}\n","import type { LiveAction } from 'surrealdb';\nimport type { Bytes } from './types';\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\nconst hasBuffer = typeof Buffer !== 'undefined';\n\nexport function toBytes(value: string | object): Bytes {\n\tif (typeof value === 'string') return encoder.encode(value);\n\treturn encoder.encode(JSON.stringify(value));\n}\n\nexport function fromBytes<T>(bytes: Bytes, deserialize = false): T | string {\n\tif (deserialize) return JSON.parse(decoder.decode(bytes)) as T;\n\treturn decoder.decode(bytes);\n}\n\nexport function toBase64(bytes: Bytes): string {\n\tif (hasBuffer) return Buffer.from(bytes).toString('base64');\n\treturn btoa(String.fromCharCode(...bytes));\n}\n\nexport function fromBase64(base64: string): Bytes {\n\tif (hasBuffer) return new Uint8Array(Buffer.from(base64, 'base64'));\n\tconst bin = atob(base64);\n\tconst out = new Uint8Array(bin.length);\n\tfor (let i = 0; i < bin.length; i++) {\n\t\tout[i] = bin.charCodeAt(i);\n\t}\n\treturn out;\n}\n\nexport function surrealActionMapType(\n\taction: LiveAction,\n): 'insert' | 'update' | 'delete' {\n\tswitch (action) {\n\t\tcase 'CREATE':\n\t\t\treturn 'insert';\n\t\tcase 'UPDATE':\n\t\t\treturn 'update';\n\t\tcase 'DELETE':\n\t\t\treturn 'delete';\n\t\tdefault:\n\t\t\treturn 'update';\n\t}\n}\n","import { fromBase64, toBase64 } from '../util';\nimport type { Bytes, EncryptedEnvelope } from '../types';\nimport type { CryptoProvider, DecryptInput, EncryptInput } from './provider';\n\nexport * from './provider';\nexport * from './types';\n\ntype KeyResolver = (kid: string) => Promise<CryptoKey> | CryptoKey;\n\ntype WebCryptoAESGCMOptions = {\n\talg?: string;\n\tversion?: number;\n\tkid?: string;\n\tresolveKey?: KeyResolver;\n};\n\nconst DEFAULT_ALG = 'AES-256-GCM';\nconst DEFAULT_KID = 'default';\nconst DEFAULT_VERSION = 1;\n\nconst resolveCrypto = (): Crypto => {\n\tif (typeof globalThis.crypto !== 'undefined') return globalThis.crypto;\n\tthrow new Error('Web Crypto API is not available in this runtime.');\n};\n\nconst toCryptoBytes = (value: Bytes): Uint8Array => new Uint8Array(value);\n\nexport class WebCryptoAESGCM implements CryptoProvider {\n\tprivate readonly alg: string;\n\tprivate readonly version: number;\n\tprivate readonly kid: string;\n\tprivate readonly resolveKey: KeyResolver;\n\n\tconstructor(key: CryptoKey, options: WebCryptoAESGCMOptions = {}) {\n\t\tthis.alg = options.alg ?? DEFAULT_ALG;\n\t\tthis.version = options.version ?? DEFAULT_VERSION;\n\t\tthis.kid = options.kid ?? DEFAULT_KID;\n\t\tthis.resolveKey =\n\t\t\toptions.resolveKey ??\n\t\t\t((incomingKid) => {\n\t\t\t\tif (incomingKid !== this.kid) {\n\t\t\t\t\tthrow new Error(`No key configured for kid '${incomingKid}'.`);\n\t\t\t\t}\n\t\t\t\treturn key;\n\t\t\t});\n\t}\n\n\tstatic async fromRawKey(\n\t\trawKey: Bytes,\n\t\toptions: Omit<WebCryptoAESGCMOptions, 'resolveKey'> = {},\n\t) {\n\t\tconst key = await resolveCrypto().subtle.importKey(\n\t\t\t'raw',\n\t\t\ttoCryptoBytes(rawKey) as never,\n\t\t\t'AES-GCM',\n\t\t\tfalse,\n\t\t\t['encrypt', 'decrypt'],\n\t\t);\n\n\t\treturn new WebCryptoAESGCM(key, options);\n\t}\n\n\tprivate async keyFor(kid: string): Promise<CryptoKey> {\n\t\treturn await this.resolveKey(kid);\n\t}\n\n\tasync encrypt(input: EncryptInput): Promise<EncryptedEnvelope> {\n\t\tconst crypto = resolveCrypto();\n\t\tconst alg = input.alg ?? this.alg;\n\t\tconst kid = input.kid ?? this.kid;\n\t\tconst v = input.v ?? this.version;\n\t\tconst nonce = crypto.getRandomValues(new Uint8Array(12));\n\t\tconst key = await this.keyFor(kid);\n\t\tconst ct = new Uint8Array(\n\t\t\tawait crypto.subtle.encrypt(\n\t\t\t\t{\n\t\t\t\t\tname: 'AES-GCM',\n\t\t\t\t\tiv: nonce,\n\t\t\t\t\tadditionalData: input.aad\n\t\t\t\t\t\t? (toCryptoBytes(input.aad) as never)\n\t\t\t\t\t\t: undefined,\n\t\t\t\t},\n\t\t\t\tkey,\n\t\t\t\ttoCryptoBytes(input.plaintext) as never,\n\t\t\t),\n\t\t);\n\n\t\treturn {\n\t\t\tv,\n\t\t\talg,\n\t\t\tkid,\n\t\t\tn: toBase64(nonce),\n\t\t\tct: toBase64(ct),\n\t\t};\n\t}\n\n\tasync decrypt({ envelope, aad }: DecryptInput): Promise<Bytes> {\n\t\tif (envelope.alg !== this.alg) {\n\t\t\tthrow new Error(\n\t\t\t\t`Unsupported envelope algorithm '${envelope.alg}'. Expected '${this.alg}'.`,\n\t\t\t);\n\t\t}\n\n\t\tconst key = await this.keyFor(envelope.kid);\n\t\tconst crypto = resolveCrypto();\n\t\tconst plaintext = await crypto.subtle.decrypt(\n\t\t\t{\n\t\t\t\tname: 'AES-GCM',\n\t\t\t\tiv: toCryptoBytes(fromBase64(envelope.n)) as never,\n\t\t\t\tadditionalData: aad ? (toCryptoBytes(aad) as never) : undefined,\n\t\t\t},\n\t\t\tkey,\n\t\t\ttoCryptoBytes(fromBase64(envelope.ct)) as never,\n\t\t);\n\n\t\treturn new Uint8Array(plaintext);\n\t}\n}\n","import type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type {\n\tCollectionConfig,\n\tDeleteMutationFn,\n\tDeleteMutationFnParams,\n\tInsertMutationFn,\n\tInsertMutationFnParams,\n\tLoadSubsetOptions,\n\tOperationConfig,\n\tStandardSchema,\n\tSyncConfig,\n\tTransaction,\n\tUpdateMutationFn,\n\tUpdateMutationFnParams,\n\tUtilsRecord,\n} from '@tanstack/db';\nimport { queryCollectionOptions } from '@tanstack/query-db-collection';\nimport { LoroDoc } from 'loro-crdt';\nimport { Features, RecordId, Table } from 'surrealdb';\nimport { createLoroProfile } from './crdt';\nimport {\n\tnormalizeRecordIdLikeFields,\n\tnormalizeRecordIdLikeValueDeep,\n\ttoRecordId,\n\ttoRecordIdString,\n\ttoRecordKeyString,\n} from './id';\nimport { manageTable } from './table';\nimport type {\n\tAADContext,\n\tAdapterSyncMode,\n\tEncryptedEnvelope,\n\tLocalChange,\n\tSurrealCollectionOptions,\n\tSurrealCollectionOptionsReturn,\n\tSyncedTable,\n\tTableLike,\n\tTableOptions,\n} from './types';\nimport { fromBase64, fromBytes, toBase64, toBytes } from './util';\n\nexport * from './crdt';\nexport * from './encryption';\nexport { toRecordKeyString } from './id';\nexport * from './types';\n\nconst TEMP_ID_PREFIX = '__temp__';\nconst ENVELOPE_FIELDS = [\n\t'version',\n\t'algorithm',\n\t'key_id',\n\t'nonce',\n\t'ciphertext',\n] as const;\nconst NOOP = () => {};\n\ntype Cleanup = () => void;\n\ntype MutationInput<T extends { id: string | RecordId }> = Omit<T, 'id'> & {\n\tid?: T['id'];\n};\n\ntype QueryWriteUtils = {\n\twriteUpsert?: (data: unknown) => void;\n\twriteDelete?: (key: string) => void;\n};\n\ntype CRDTUpdateRow = {\n\tdoc: string | RecordId;\n\tts?: string | Date;\n\tupdate_bytes?: string;\n\tsnapshot_bytes?: string;\n\tversion?: number;\n\talgorithm?: string;\n\tkey_id?: string;\n\tnonce?: string;\n\tciphertext?: string;\n\tactor?: string;\n};\n\ntype LiveMessageLike = {\n\taction: 'CREATE' | 'UPDATE' | 'DELETE' | 'KILLED';\n\tvalue: Record<string, unknown>;\n};\n\ntype LiveSubscriptionLike = {\n\tisAlive?: boolean;\n\tsubscribe: (cb: (msg: LiveMessageLike) => void | Promise<void>) => void;\n\tkill: () => Promise<void>;\n};\n\nconst isTableObject = (value: unknown): value is TableOptions =>\n\ttypeof value === 'object' &&\n\tvalue !== null &&\n\t'name' in value &&\n\ttypeof (value as { name: unknown }).name === 'string';\n\nconst toTableOptions = (table: TableLike): TableOptions => {\n\tif (typeof table === 'string') return { name: table };\n\tif (table instanceof Table) return { name: table.name };\n\tif (isTableObject(table)) return table;\n\tthrow new Error('Expected table as string, Table, or { name }.');\n};\n\nconst toTableResource = (table: TableLike): Table => {\n\tconst normalized = toTableOptions(table);\n\treturn new Table(normalized.name);\n};\n\nconst tableNameOf = (table: TableLike): string => toTableOptions(table).name;\n\nconst getWriteUtils = (utils: unknown): QueryWriteUtils =>\n\ttypeof utils === 'object' && utils !== null\n\t\t? (utils as QueryWriteUtils)\n\t\t: {};\n\nconst firstRow = <T>(result: T | T[] | null | undefined): T | undefined => {\n\tif (!result) return undefined;\n\tif (Array.isArray(result)) return result[0];\n\treturn result;\n};\n\nconst omitUndefined = <T extends Record<string, unknown>>(obj: T): Partial<T> =>\n\tObject.fromEntries(\n\t\tObject.entries(obj).filter(([, value]) => value !== undefined),\n\t) as Partial<T>;\n\nconst createTempRecordId = (tableName: string): RecordId => {\n\tconst suffix = `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;\n\treturn new RecordId(tableName, `${TEMP_ID_PREFIX}${suffix}`);\n};\n\nconst isTempId = (id: string | RecordId, tableName: string): boolean => {\n\tconst normalized = toRecordIdString(id);\n\tconst key = normalized.startsWith(`${tableName}:`)\n\t\t? normalized.slice(tableName.length + 1)\n\t\t: normalized;\n\treturn key.startsWith(TEMP_ID_PREFIX);\n};\n\nconst toEnvelope = (\n\tvalue: Record<string, unknown>,\n): EncryptedEnvelope | null => {\n\tconst version = value.version;\n\tconst algorithm = value.algorithm;\n\tconst keyId = value.key_id;\n\tconst nonce = value.nonce;\n\tconst ciphertext = value.ciphertext;\n\tif (\n\t\ttypeof version !== 'number' ||\n\t\ttypeof algorithm !== 'string' ||\n\t\ttypeof keyId !== 'string' ||\n\t\ttypeof nonce !== 'string' ||\n\t\ttypeof ciphertext !== 'string'\n\t) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tv: version,\n\t\talg: algorithm,\n\t\tkid: keyId,\n\t\tn: nonce,\n\t\tct: ciphertext,\n\t};\n};\n\nconst toStoredEnvelope = (\n\tenvelope: EncryptedEnvelope,\n): Record<string, unknown> => ({\n\tversion: envelope.v,\n\talgorithm: envelope.alg,\n\tkey_id: envelope.kid,\n\tnonce: envelope.n,\n\tciphertext: envelope.ct,\n});\n\nconst stripEnvelopeFields = (\n\tvalue: Record<string, unknown>,\n): Record<string, unknown> => {\n\tconst copy = { ...value };\n\tfor (const key of ENVELOPE_FIELDS) delete copy[key];\n\treturn copy;\n};\n\nconst toRecordArray = <T>(rows: T | T[] | null | undefined): T[] => {\n\tif (!rows) return [];\n\treturn Array.isArray(rows) ? rows : [rows];\n};\n\nasync function queryRows<T>(\n\tdb: {\n\t\tquery: (\n\t\t\tsql: string,\n\t\t\tbindings?: Record<string, unknown>,\n\t\t) => Promise<unknown>;\n\t},\n\tsql: string,\n\tbindings?: Record<string, unknown>,\n): Promise<T[]> {\n\tconst result = await db.query(sql, bindings ?? {});\n\tif (Array.isArray(result)) {\n\t\tconst first = result[0];\n\t\tif (Array.isArray(first)) return first as T[];\n\t\treturn [];\n\t}\n\treturn [];\n}\n\nfunction createInsertSchema<T extends { id: string | RecordId }>(\n\ttableName: string,\n): StandardSchemaV1<MutationInput<T>, T> {\n\treturn {\n\t\t'~standard': {\n\t\t\tversion: 1,\n\t\t\tvendor: 'tanstack-db-surrealdb',\n\t\t\tvalidate: (value: unknown) => {\n\t\t\t\tif (\n\t\t\t\t\t!value ||\n\t\t\t\t\ttypeof value !== 'object' ||\n\t\t\t\t\tArray.isArray(value)\n\t\t\t\t) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tissues: [{ message: 'Insert data must be an object.' }],\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst data = normalizeRecordIdLikeFields({\n\t\t\t\t\t...(value as Record<string, unknown>),\n\t\t\t\t}) as MutationInput<T>;\n\n\t\t\t\tif (!data.id)\n\t\t\t\t\tdata.id = createTempRecordId(tableName) as T['id'];\n\n\t\t\t\treturn { value: data as T };\n\t\t\t},\n\t\t\ttypes: undefined,\n\t\t},\n\t};\n}\n\nfunction defaultAad(ctx: AADContext): Uint8Array {\n\tif (ctx.kind === 'base') return toBytes(`${ctx.table}:${ctx.id}`);\n\tconst base = ctx.baseTable ?? ctx.table;\n\treturn toBytes(`${ctx.table}:${base}:${ctx.id}`);\n}\n\nconst syncModeFrom = (syncMode: AdapterSyncMode | undefined): AdapterSyncMode =>\n\tsyncMode ?? 'eager';\n\nconst subsetCacheKey = (subset: LoadSubsetOptions): string =>\n\tJSON.stringify(subset, (_key, value) => {\n\t\tif (value instanceof Date) return value.toISOString();\n\t\tif (value instanceof RecordId) return toRecordIdString(value);\n\t\tif (typeof value === 'function') return undefined;\n\t\tif (\n\t\t\tvalue &&\n\t\t\ttypeof value === 'object' &&\n\t\t\t'table' in (value as Record<string, unknown>) &&\n\t\t\t'id' in (value as Record<string, unknown>)\n\t\t) {\n\t\t\ttry {\n\t\t\t\treturn toRecordIdString(String(value));\n\t\t\t} catch {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t});\n\ntype BaseSyncRuntime<T extends { id: string | RecordId }> = {\n\tstartRealtime: () => Promise<void>;\n\tcleanup: () => void;\n\tloadSubset: (subset: LoadSubsetOptions) => Promise<void>;\n\tunloadSubset: (subset: LoadSubsetOptions) => void;\n};\n\nfunction modernSurrealCollectionOptions<T extends SyncedTable<object>>(\n\tconfig: SurrealCollectionOptions<T>,\n): SurrealCollectionOptionsReturn<T> {\n\tconst {\n\t\tdb,\n\t\ttable,\n\t\tqueryClient,\n\t\tqueryKey,\n\t\tonError,\n\t\te2ee,\n\t\tcrdt,\n\t\tsyncMode: inputSyncMode,\n\t} = config;\n\n\tif (!queryClient || !queryKey) {\n\t\tthrow new Error('queryClient and queryKey are required.');\n\t}\n\n\tconst syncMode = syncModeFrom(inputSyncMode);\n\tconst isOnDemandLike =\n\t\tsyncMode === 'on-demand' || syncMode === 'progressive';\n\tconst isStrictOnDemand = syncMode === 'on-demand';\n\tconst queryDrivenSyncMode: 'eager' | 'on-demand' = isOnDemandLike\n\t\t? 'on-demand'\n\t\t: 'eager';\n\tconst tableOptions = toTableOptions(table);\n\tconst tableName = tableOptions.name;\n\tconst tableResource = toTableResource(table);\n\tconst subsetIds = new Map<string, Set<string>>();\n\tconst activeOnDemandIds = new Set<string>();\n\n\tconst e2eeEnabled = e2ee?.enabled === true;\n\tconst crdtEnabled = crdt?.enabled === true;\n\tconst defaultCrdtProfile = crdtEnabled\n\t\t? createLoroProfile<T>(crdt.profile)\n\t\t: undefined;\n\tconst materializeCrdt =\n\t\tcrdt?.materialize ?? defaultCrdtProfile?.materialize;\n\tconst applyCrdtLocalChange =\n\t\tcrdt?.applyLocalChange ?? defaultCrdtProfile?.applyLocalChange;\n\tif (crdtEnabled && (!materializeCrdt || !applyCrdtLocalChange)) {\n\t\tthrow new Error(\n\t\t\t'CRDT profile adapter is missing materialize/applyLocalChange handlers.',\n\t\t);\n\t}\n\n\tconst tableAccess = manageTable<T>(db, tableOptions);\n\tconst docs = new Map<string, LoroDoc>();\n\n\tconst aadFor = (ctx: AADContext): Uint8Array =>\n\t\t(e2ee?.aad ?? defaultAad)(ctx);\n\n\tconst getKey = (row: { id: string | RecordId }) => toRecordIdString(row.id);\n\tconst normalizeMutationId = (id: string | RecordId): RecordId =>\n\t\ttoRecordId(tableName, id);\n\n\tconst normalizeRow = (row: T): T => {\n\t\tconst normalized = normalizeRecordIdLikeValueDeep(row) as T;\n\t\treturn {\n\t\t\t...normalized,\n\t\t\tid: normalizeMutationId(normalized.id),\n\t\t} as T;\n\t};\n\n\tconst decodeBaseRow = async (row: Record<string, unknown>): Promise<T> => {\n\t\tif (!e2eeEnabled) {\n\t\t\treturn normalizeRow(row as T);\n\t\t}\n\n\t\tconst envelope = toEnvelope(row);\n\t\tif (!envelope) return normalizeRow(row as T);\n\t\tconst id = toRecordKeyString(row.id as string | RecordId);\n\t\tconst bytes = await e2ee.crypto.decrypt({\n\t\t\tenvelope,\n\t\t\taad: aadFor({ table: tableName, id, kind: 'base' }),\n\t\t});\n\t\tconst payload = fromBytes<Record<string, unknown>>(bytes, true);\n\t\tconst merged = {\n\t\t\t...stripEnvelopeFields(row),\n\t\t\t...(payload as Record<string, unknown>),\n\t\t\tid: normalizeMutationId(row.id as string | RecordId),\n\t\t} as T;\n\t\treturn normalizeRow(merged);\n\t};\n\n\tconst encodeBaseRow = async (\n\t\trow: Record<string, unknown>,\n\t\tid: string,\n\t): Promise<Record<string, unknown>> => {\n\t\tif (!e2eeEnabled) return row;\n\t\tconst envelope = await e2ee.crypto.encrypt({\n\t\t\tplaintext: toBytes(row),\n\t\t\taad: aadFor({ table: tableName, id, kind: 'base' }),\n\t\t});\n\t\treturn toStoredEnvelope(envelope);\n\t};\n\n\tconst updatesTableName = crdtEnabled\n\t\t? tableNameOf(crdt.updatesTable)\n\t\t: undefined;\n\tconst updatesTable = crdtEnabled\n\t\t? toTableResource(crdt.updatesTable)\n\t\t: undefined;\n\tconst snapshotsTableName =\n\t\tcrdtEnabled && crdt.snapshotsTable\n\t\t\t? tableNameOf(crdt.snapshotsTable)\n\t\t\t: undefined;\n\tconst snapshotsTable =\n\t\tcrdtEnabled && crdt.snapshotsTable\n\t\t\t? toTableResource(crdt.snapshotsTable)\n\t\t\t: undefined;\n\n\tconst getDoc = (id: string): LoroDoc => {\n\t\tconst existing = docs.get(id);\n\t\tif (existing) return existing;\n\t\tconst doc = new LoroDoc();\n\t\tdocs.set(id, doc);\n\t\treturn doc;\n\t};\n\n\tconst docRef = (id: string): RecordId => new RecordId(tableName, id);\n\tconst idFromDocRef = (doc: string | RecordId): string =>\n\t\ttoRecordKeyString(doc);\n\n\tconst resolveActor = (\n\t\tid: string,\n\t\tchange?: LocalChange<T>,\n\t): string | undefined => {\n\t\tif (!crdtEnabled) return undefined;\n\t\tconst candidate = crdt.actor ?? crdt.localActorId;\n\t\tif (typeof candidate === 'function') {\n\t\t\treturn candidate({ id, change });\n\t\t}\n\t\treturn candidate;\n\t};\n\n\tconst decodeUpdateBytes = async (\n\t\trow: CRDTUpdateRow,\n\t\tkind: 'update' | 'snapshot',\n\t): Promise<Uint8Array> => {\n\t\tif (!e2eeEnabled) {\n\t\t\tif (kind === 'snapshot') {\n\t\t\t\tconst snapshot = row.snapshot_bytes;\n\t\t\t\tif (!snapshot) return new Uint8Array();\n\t\t\t\treturn fromBase64(snapshot);\n\t\t\t}\n\t\t\tconst update = row.update_bytes;\n\t\t\tif (!update) return new Uint8Array();\n\t\t\treturn fromBase64(update);\n\t\t}\n\t\tconst envelope = toEnvelope(row as unknown as Record<string, unknown>);\n\t\tif (!envelope) return new Uint8Array();\n\t\tconst id = idFromDocRef(row.doc);\n\t\treturn e2ee.crypto.decrypt({\n\t\t\tenvelope,\n\t\t\taad: aadFor({\n\t\t\t\ttable:\n\t\t\t\t\tkind === 'snapshot'\n\t\t\t\t\t\t? (snapshotsTableName ?? tableName)\n\t\t\t\t\t\t: (updatesTableName ?? tableName),\n\t\t\t\tbaseTable: tableName,\n\t\t\t\tid,\n\t\t\t\tkind,\n\t\t\t}),\n\t\t});\n\t};\n\n\tconst encodeUpdatePayload = async (\n\t\tbytes: Uint8Array,\n\t\tid: string,\n\t\tkind: 'update' | 'snapshot',\n\t): Promise<Record<string, unknown>> => {\n\t\tif (!e2eeEnabled) {\n\t\t\tif (kind === 'snapshot') return { snapshot_bytes: toBase64(bytes) };\n\t\t\treturn { update_bytes: toBase64(bytes) };\n\t\t}\n\n\t\tconst targetTable =\n\t\t\tkind === 'snapshot' ? snapshotsTableName : updatesTableName;\n\t\tconst envelope = await e2ee.crypto.encrypt({\n\t\t\tplaintext: bytes,\n\t\t\taad: aadFor({\n\t\t\t\ttable: targetTable ?? tableName,\n\t\t\t\tbaseTable: tableName,\n\t\t\t\tid,\n\t\t\t\tkind,\n\t\t\t}),\n\t\t});\n\t\treturn toStoredEnvelope(envelope);\n\t};\n\n\tconst persistCrdtUpdate = async (\n\t\tid: string,\n\t\tbytes: Uint8Array,\n\t\tchange?: LocalChange<T>,\n\t) => {\n\t\tif (!crdtEnabled || !updatesTable) return;\n\t\tconst payload = await encodeUpdatePayload(bytes, id, 'update');\n\t\tconst actor = resolveActor(id, change);\n\t\tconst row = {\n\t\t\tdoc: docRef(id),\n\t\t\tts: new Date().toISOString(),\n\t\t\t...(actor ? { actor } : {}),\n\t\t\t...payload,\n\t\t};\n\t\tawait db.create(updatesTable).content(row);\n\t};\n\n\tconst persistMaterialized = async (materialized: T) => {\n\t\tif (!crdtEnabled || crdt.persistMaterializedView !== true) return;\n\t\tconst id = toRecordKeyString(materialized.id);\n\t\tif (!e2eeEnabled) {\n\t\t\tconst { id: _ignoredId, ...rest } = materialized as Record<\n\t\t\t\tstring,\n\t\t\t\tunknown\n\t\t\t>;\n\t\t\tawait db.upsert(normalizeMutationId(materialized.id)).merge(rest);\n\t\t\treturn;\n\t\t}\n\n\t\tconst payload = await encodeBaseRow(\n\t\t\tomitUndefined({\n\t\t\t\t...(materialized as Record<string, unknown>),\n\t\t\t\tid: undefined,\n\t\t\t}),\n\t\t\tid,\n\t\t);\n\t\tawait db.upsert(normalizeMutationId(materialized.id)).merge(payload);\n\t};\n\n\tconst hydratePlainRows = async (\n\t\trows: Array<Record<string, unknown>>,\n\t\twrite: (\n\t\t\tchange:\n\t\t\t\t| { type: 'insert' | 'update'; value: T }\n\t\t\t\t| { type: 'delete'; key: string },\n\t\t) => void,\n\t\tbegin: () => void,\n\t\tcommit: () => void,\n\t\ttype: 'insert' | 'update' = 'insert',\n\t) => {\n\t\tif (!rows.length) return;\n\t\tbegin();\n\t\ttry {\n\t\t\tfor (const row of rows) {\n\t\t\t\tconst decoded = await decodeBaseRow(row);\n\t\t\t\twrite({ type, value: decoded });\n\t\t\t}\n\t\t} finally {\n\t\t\tcommit();\n\t\t}\n\t};\n\n\tconst hydrateCrdtDoc = async (\n\t\tid: string,\n\t\twrite: (\n\t\t\tchange:\n\t\t\t\t| { type: 'insert' | 'update'; value: T }\n\t\t\t\t| { type: 'delete'; key: string },\n\t\t) => void,\n\t\tbegin: () => void,\n\t\tcommit: () => void,\n\t\twriteType: 'insert' | 'update' = 'insert',\n\t) => {\n\t\tif (!crdtEnabled || !updatesTableName) return;\n\t\tconst doc = getDoc(id);\n\t\tlet since: string | undefined;\n\n\t\tif (snapshotsTableName) {\n\t\t\tconst snapshots = await queryRows<CRDTUpdateRow>(\n\t\t\t\tdb,\n\t\t\t\t`SELECT * FROM type::table($table) WHERE doc = $doc ORDER BY ts DESC LIMIT 1;`,\n\t\t\t\t{\n\t\t\t\t\ttable: snapshotsTableName,\n\t\t\t\t\tdoc: docRef(id),\n\t\t\t\t},\n\t\t\t);\n\t\t\tconst snapshot = snapshots[0];\n\t\t\tif (snapshot) {\n\t\t\t\tconst bytes = await decodeUpdateBytes(snapshot, 'snapshot');\n\t\t\t\tif (bytes.byteLength) doc.import(bytes);\n\t\t\t\tsince =\n\t\t\t\t\ttypeof snapshot.ts === 'string'\n\t\t\t\t\t\t? snapshot.ts\n\t\t\t\t\t\t: snapshot.ts instanceof Date\n\t\t\t\t\t\t\t? snapshot.ts.toISOString()\n\t\t\t\t\t\t\t: undefined;\n\t\t\t}\n\t\t}\n\n\t\tconst updates = await queryRows<CRDTUpdateRow>(\n\t\t\tdb,\n\t\t\tsince\n\t\t\t\t? `SELECT * FROM type::table($table) WHERE doc = $doc AND ts > $since ORDER BY ts ASC;`\n\t\t\t\t: `SELECT * FROM type::table($table) WHERE doc = $doc ORDER BY ts ASC;`,\n\t\t\t{\n\t\t\t\ttable: updatesTableName,\n\t\t\t\tdoc: docRef(id),\n\t\t\t\tsince,\n\t\t\t},\n\t\t);\n\n\t\tfor (const update of updates) {\n\t\t\tconst bytes = await decodeUpdateBytes(update, 'update');\n\t\t\tif (!bytes.byteLength) continue;\n\t\t\tdoc.import(bytes);\n\t\t}\n\n\t\tconst materialized = normalizeRow(materializeCrdt(doc, id));\n\t\tbegin();\n\t\ttry {\n\t\t\twrite({ type: writeType, value: materialized });\n\t\t} finally {\n\t\t\tcommit();\n\t\t}\n\t};\n\n\tconst updateActiveOnDemandIds = () => {\n\t\tactiveOnDemandIds.clear();\n\t\tfor (const ids of subsetIds.values()) {\n\t\t\tfor (const id of ids) activeOnDemandIds.add(id);\n\t\t}\n\t};\n\n\tconst createSyncRuntime = (\n\t\tctx: Parameters<SyncConfig<T>['sync']>[0],\n\t): BaseSyncRuntime<T> => {\n\t\tlet cleanupBaseLive: Cleanup = NOOP;\n\t\tlet cleanupUpdateLive: Cleanup = NOOP;\n\t\tlet killed = false;\n\n\t\tconst ensureBaseLive = async () => {\n\t\t\tif (cleanupBaseLive !== NOOP) return;\n\t\t\tif (!db.isFeatureSupported?.(Features.LiveQueries)) return;\n\t\t\tconst live = (await db.live(\n\t\t\t\ttableResource,\n\t\t\t)) as unknown as LiveSubscriptionLike;\n\t\t\tif (killed) {\n\t\t\t\tawait live.kill();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlive.subscribe(async (message) => {\n\t\t\t\tif (message.action === 'KILLED') return;\n\t\t\t\tconst row = message.value as Record<string, unknown>;\n\t\t\t\tconst id = toRecordKeyString(row.id as string | RecordId);\n\n\t\t\t\tconst wasVisible = activeOnDemandIds.has(id);\n\t\t\t\tif (\n\t\t\t\t\tisStrictOnDemand &&\n\t\t\t\t\t!wasVisible &&\n\t\t\t\t\tmessage.action !== 'DELETE'\n\t\t\t\t)\n\t\t\t\t\treturn;\n\n\t\t\t\tif (message.action === 'DELETE') {\n\t\t\t\t\tfor (const ids of subsetIds.values()) ids.delete(id);\n\t\t\t\t\tupdateActiveOnDemandIds();\n\t\t\t\t\tif (isStrictOnDemand && !wasVisible) return;\n\t\t\t\t\tctx.begin();\n\t\t\t\t\ttry {\n\t\t\t\t\t\tctx.write({\n\t\t\t\t\t\t\ttype: 'delete',\n\t\t\t\t\t\t\tkey: `${tableName}:${id}`,\n\t\t\t\t\t\t});\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tctx.commit();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst decoded = await decodeBaseRow(row);\n\t\t\t\tctx.begin();\n\t\t\t\ttry {\n\t\t\t\t\tctx.write({\n\t\t\t\t\t\ttype: message.action === 'CREATE' ? 'insert' : 'update',\n\t\t\t\t\t\tvalue: decoded,\n\t\t\t\t\t});\n\t\t\t\t} finally {\n\t\t\t\t\tctx.commit();\n\t\t\t\t}\n\t\t\t});\n\t\t\tcleanupBaseLive = () => {\n\t\t\t\tvoid live.kill().catch(() => undefined);\n\t\t\t\tcleanupBaseLive = NOOP;\n\t\t\t};\n\t\t};\n\n\t\tconst ensureUpdateLive = async () => {\n\t\t\tif (!crdtEnabled || !updatesTable) return;\n\t\t\tif (cleanupUpdateLive !== NOOP) return;\n\t\t\tif (!db.isFeatureSupported?.(Features.LiveQueries)) return;\n\n\t\t\tconst live = (await db.live(\n\t\t\t\tupdatesTable,\n\t\t\t)) as unknown as LiveSubscriptionLike;\n\t\t\tif (killed) {\n\t\t\t\tawait live.kill();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlive.subscribe(async (message) => {\n\t\t\t\tif (message.action === 'KILLED') return;\n\t\t\t\tif (message.action === 'DELETE') return;\n\n\t\t\t\tconst value = message.value as unknown as CRDTUpdateRow;\n\t\t\t\tconst id = idFromDocRef(value.doc);\n\n\t\t\t\tif (value.actor && value.actor === resolveActor(id)) return;\n\n\t\t\t\tif (isStrictOnDemand && !activeOnDemandIds.has(id)) return;\n\n\t\t\t\tconst doc = getDoc(id);\n\t\t\t\tconst bytes = await decodeUpdateBytes(value, 'update');\n\t\t\t\tif (!bytes.byteLength) return;\n\t\t\t\tdoc.import(bytes);\n\t\t\t\tconst materialized = normalizeRow(materializeCrdt(doc, id));\n\t\t\t\tctx.begin();\n\t\t\t\ttry {\n\t\t\t\t\tctx.write({ type: 'update', value: materialized });\n\t\t\t\t} finally {\n\t\t\t\t\tctx.commit();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcleanupUpdateLive = () => {\n\t\t\t\tvoid live.kill().catch(() => undefined);\n\t\t\t\tcleanupUpdateLive = NOOP;\n\t\t\t};\n\t\t};\n\n\t\tconst loadSubset = async (subset: LoadSubsetOptions) => {\n\t\t\tif (!isOnDemandLike) return;\n\t\t\tconst key = subsetCacheKey(subset);\n\t\t\tconst rows = await tableAccess.loadSubset(subset);\n\t\t\tconst ids = new Set(\n\t\t\t\t(rows as unknown as Array<Record<string, unknown>>).map((row) =>\n\t\t\t\t\ttoRecordKeyString(row.id as string | RecordId),\n\t\t\t\t),\n\t\t\t);\n\t\t\tsubsetIds.set(key, ids);\n\t\t\tupdateActiveOnDemandIds();\n\n\t\t\tif (!crdtEnabled) {\n\t\t\t\tawait hydratePlainRows(\n\t\t\t\t\trows as unknown as Array<Record<string, unknown>>,\n\t\t\t\t\tctx.write,\n\t\t\t\t\tctx.begin,\n\t\t\t\t\tctx.commit,\n\t\t\t\t\t'insert',\n\t\t\t\t);\n\t\t\t\tawait ensureBaseLive();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (const id of ids) {\n\t\t\t\tawait hydrateCrdtDoc(\n\t\t\t\t\tid,\n\t\t\t\t\tctx.write,\n\t\t\t\t\tctx.begin,\n\t\t\t\t\tctx.commit,\n\t\t\t\t\t'insert',\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait ensureUpdateLive();\n\t\t};\n\n\t\tconst unloadSubset = (subset: LoadSubsetOptions) => {\n\t\t\tif (!isOnDemandLike) return;\n\t\t\tconst key = subsetCacheKey(subset);\n\t\t\tsubsetIds.delete(key);\n\t\t\tupdateActiveOnDemandIds();\n\t\t\tif (subsetIds.size === 0) {\n\t\t\t\tcleanupBaseLive();\n\t\t\t\tcleanupUpdateLive();\n\t\t\t}\n\t\t};\n\n\t\tconst startRealtime = async () => {\n\t\t\tif (!crdtEnabled) {\n\t\t\t\tawait ensureBaseLive();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait ensureUpdateLive();\n\t\t};\n\n\t\tconst cleanup = () => {\n\t\t\tkilled = true;\n\t\t\tsubsetIds.clear();\n\t\t\tupdateActiveOnDemandIds();\n\t\t\tcleanupBaseLive();\n\t\t\tcleanupUpdateLive();\n\t\t};\n\n\t\treturn {\n\t\t\tstartRealtime,\n\t\t\tcleanup,\n\t\t\tloadSubset,\n\t\t\tunloadSubset,\n\t\t};\n\t};\n\n\tconst base = queryCollectionOptions({\n\t\tschema: createInsertSchema<T>(tableName),\n\t\tgetKey,\n\t\tqueryKey,\n\t\tqueryClient,\n\t\tsyncMode: queryDrivenSyncMode,\n\t\tqueryFn: async ({ meta }) => {\n\t\t\ttry {\n\t\t\t\tif (isOnDemandLike && !meta?.loadSubsetOptions) {\n\t\t\t\t\treturn [] as T[];\n\t\t\t\t}\n\n\t\t\t\tif (!crdtEnabled) {\n\t\t\t\t\tif (!isOnDemandLike) {\n\t\t\t\t\t\tconst rows = await toRecordArray(\n\t\t\t\t\t\t\tawait db.select(tableResource),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst decoded = await Promise.all(\n\t\t\t\t\t\t\trows.map((row) =>\n\t\t\t\t\t\t\t\tdecodeBaseRow(row as Record<string, unknown>),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn decoded;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst rows = await tableAccess.loadSubset(\n\t\t\t\t\t\tmeta?.loadSubsetOptions,\n\t\t\t\t\t);\n\t\t\t\t\tconst decoded = await Promise.all(\n\t\t\t\t\t\t(rows as unknown as Array<Record<string, unknown>>).map(\n\t\t\t\t\t\t\t(row) => decodeBaseRow(row),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\treturn decoded;\n\t\t\t\t}\n\n\t\t\t\tif (isOnDemandLike) return [] as T[];\n\n\t\t\t\tif (!updatesTableName) return [] as T[];\n\t\t\t\tconst updates = await queryRows<CRDTUpdateRow>(\n\t\t\t\t\tdb,\n\t\t\t\t\t`SELECT * FROM type::table($table) ORDER BY ts ASC;`,\n\t\t\t\t\t{ table: updatesTableName },\n\t\t\t\t);\n\t\t\t\tfor (const update of updates) {\n\t\t\t\t\tconst id = idFromDocRef(update.doc);\n\t\t\t\t\tconst doc = getDoc(id);\n\t\t\t\t\tconst bytes = await decodeUpdateBytes(update, 'update');\n\t\t\t\t\tif (!bytes.byteLength) continue;\n\t\t\t\t\tdoc.import(bytes);\n\t\t\t\t}\n\n\t\t\t\treturn [...docs.entries()].map(([id, doc]) =>\n\t\t\t\t\tnormalizeRow(materializeCrdt(doc, id)),\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tonError?.(error);\n\t\t\t\treturn [] as T[];\n\t\t\t}\n\t\t},\n\t\tonInsert: (async (params: InsertMutationFnParams<T>) => {\n\t\t\tconst out: T[] = [];\n\t\t\tconst writeUtils = getWriteUtils(params.collection.utils);\n\t\t\tfor (const mutation of params.transaction.mutations) {\n\t\t\t\tif (mutation.type !== 'insert') continue;\n\n\t\t\t\tconst normalized = normalizeRow(mutation.modified as T);\n\t\t\t\tif (!crdtEnabled) {\n\t\t\t\t\tconst idKey = toRecordKeyString(normalized.id);\n\t\t\t\t\tconst payload = omitUndefined({\n\t\t\t\t\t\t...(normalized as Record<string, unknown>),\n\t\t\t\t\t\tid: undefined,\n\t\t\t\t\t});\n\t\t\t\t\tconst recordPayload = await encodeBaseRow(payload, idKey);\n\n\t\t\t\t\tif (isTempId(normalized.id, tableName)) {\n\t\t\t\t\t\tconst created = await db\n\t\t\t\t\t\t\t.create(tableResource)\n\t\t\t\t\t\t\t.content(recordPayload);\n\t\t\t\t\t\tconst createdRow = firstRow(\n\t\t\t\t\t\t\ttoRecordArray(created as unknown as T | T[]),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst createdId =\n\t\t\t\t\t\t\tcreatedRow &&\n\t\t\t\t\t\t\t(createdRow as Record<string, unknown>).id\n\t\t\t\t\t\t\t\t? ((createdRow as Record<string, unknown>).id as\n\t\t\t\t\t\t\t\t\t\t| string\n\t\t\t\t\t\t\t\t\t\t| RecordId)\n\t\t\t\t\t\t\t\t: normalized.id;\n\t\t\t\t\t\tconst resolved = {\n\t\t\t\t\t\t\t...normalized,\n\t\t\t\t\t\t\tid: normalizeMutationId(createdId),\n\t\t\t\t\t\t} as T;\n\t\t\t\t\t\tout.push(resolved);\n\t\t\t\t\t\twriteUtils.writeUpsert?.(resolved);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tawait db.insert(tableResource, {\n\t\t\t\t\t\tid: normalizeMutationId(normalized.id),\n\t\t\t\t\t\t...recordPayload,\n\t\t\t\t\t});\n\t\t\t\t\tout.push(normalized);\n\t\t\t\t\twriteUtils.writeUpsert?.(normalized);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst id = toRecordKeyString(normalized.id);\n\t\t\t\tconst doc = getDoc(id);\n\t\t\t\tconst vv = doc.oplogVersion();\n\t\t\t\tconst localChange: LocalChange<T> = {\n\t\t\t\t\ttype: 'insert',\n\t\t\t\t\tvalue: normalized,\n\t\t\t\t};\n\t\t\t\tapplyCrdtLocalChange(doc, localChange);\n\t\t\t\tconst bytes = doc.export({ mode: 'update', from: vv });\n\t\t\t\tawait persistCrdtUpdate(id, bytes, localChange);\n\t\t\t\tconst materialized = normalizeRow(materializeCrdt(doc, id));\n\t\t\t\tawait persistMaterialized(materialized);\n\t\t\t\tout.push(materialized);\n\t\t\t\twriteUtils.writeUpsert?.(materialized);\n\t\t\t}\n\n\t\t\treturn out as unknown as StandardSchema<T>;\n\t\t}) as InsertMutationFn<T, string, UtilsRecord, StandardSchema<T>>,\n\t\tonUpdate: (async (params: UpdateMutationFnParams<T>) => {\n\t\t\tconst writeUtils = getWriteUtils(params.collection.utils);\n\t\t\tfor (const mutation of params.transaction.mutations) {\n\t\t\t\tif (mutation.type !== 'update') continue;\n\t\t\t\tconst mutationId = normalizeMutationId(\n\t\t\t\t\tmutation.key as RecordId | string,\n\t\t\t\t);\n\t\t\t\tconst normalizedModified = omitUndefined(\n\t\t\t\t\tnormalizeRecordIdLikeFields({\n\t\t\t\t\t\t...(mutation.modified as Record<string, unknown>),\n\t\t\t\t\t}) as Record<string, unknown>,\n\t\t\t\t);\n\t\t\t\tconst normalized = normalizeRow({\n\t\t\t\t\t...(normalizedModified as Partial<T>),\n\t\t\t\t\tid: mutationId,\n\t\t\t\t} as T);\n\n\t\t\t\tif (!crdtEnabled) {\n\t\t\t\t\tif (!e2eeEnabled) {\n\t\t\t\t\t\tawait db.update(mutationId).merge(normalizedModified);\n\t\t\t\t\t\twriteUtils.writeUpsert?.(normalized);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst current = await db.select(mutationId);\n\t\t\t\t\tconst currentRows = toRecordArray(\n\t\t\t\t\t\tcurrent as unknown as\n\t\t\t\t\t\t\t| Record<string, unknown>\n\t\t\t\t\t\t\t| Array<Record<string, unknown>>,\n\t\t\t\t\t);\n\t\t\t\t\tconst currentRow = currentRows[0];\n\t\t\t\t\tconst decodedCurrent = currentRow\n\t\t\t\t\t\t? await decodeBaseRow(currentRow)\n\t\t\t\t\t\t: ({ id: mutationId } as T);\n\t\t\t\t\tconst merged = {\n\t\t\t\t\t\t...(decodedCurrent as Record<string, unknown>),\n\t\t\t\t\t\t...(normalizedModified as Record<string, unknown>),\n\t\t\t\t\t};\n\t\t\t\t\tdelete merged.id;\n\t\t\t\t\tconst encoded = await encodeBaseRow(\n\t\t\t\t\t\tomitUndefined(merged),\n\t\t\t\t\t\ttoRecordKeyString(mutationId),\n\t\t\t\t\t);\n\t\t\t\t\tawait db.update(mutationId).merge(encoded);\n\t\t\t\t\twriteUtils.writeUpsert?.(\n\t\t\t\t\t\tnormalizeRow({ ...decodedCurrent, ...merged } as T),\n\t\t\t\t\t);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst id = toRecordKeyString(mutationId);\n\t\t\t\tconst doc = getDoc(id);\n\t\t\t\tconst vv = doc.oplogVersion();\n\t\t\t\tconst localChange: LocalChange<T> = {\n\t\t\t\t\ttype: 'update',\n\t\t\t\t\tvalue: normalized,\n\t\t\t\t};\n\t\t\t\tapplyCrdtLocalChange(doc, localChange);\n\t\t\t\tconst bytes = doc.export({ mode: 'update', from: vv });\n\t\t\t\tawait persistCrdtUpdate(id, bytes, localChange);\n\t\t\t\tconst materialized = normalizeRow(materializeCrdt(doc, id));\n\t\t\t\tawait persistMaterialized(materialized);\n\t\t\t\twriteUtils.writeUpsert?.(materialized);\n\t\t\t}\n\t\t\treturn { refetch: false } as unknown as StandardSchema<T>;\n\t\t}) as UpdateMutationFn<T, string, UtilsRecord, StandardSchema<T>>,\n\t\tonDelete: (async (params: DeleteMutationFnParams<T>) => {\n\t\t\tconst writeUtils = getWriteUtils(params.collection.utils);\n\t\t\tfor (const mutation of params.transaction.mutations) {\n\t\t\t\tif (mutation.type !== 'delete') continue;\n\t\t\t\tconst mutationId = normalizeMutationId(\n\t\t\t\t\tmutation.key as RecordId | string,\n\t\t\t\t);\n\t\t\t\tconst id = toRecordKeyString(mutationId);\n\t\t\t\tif (!crdtEnabled) {\n\t\t\t\t\tawait db.delete(mutationId);\n\t\t\t\t\twriteUtils.writeDelete?.(`${tableName}:${id}`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst doc = getDoc(id);\n\t\t\t\tconst vv = doc.oplogVersion();\n\t\t\t\tconst localChange: LocalChange<T> = {\n\t\t\t\t\ttype: 'delete',\n\t\t\t\t\tvalue: { id: mutationId } as T,\n\t\t\t\t};\n\t\t\t\tapplyCrdtLocalChange(doc, localChange);\n\t\t\t\tconst bytes = doc.export({ mode: 'update', from: vv });\n\t\t\t\tawait persistCrdtUpdate(id, bytes, localChange);\n\t\t\t\twriteUtils.writeDelete?.(`${tableName}:${id}`);\n\t\t\t}\n\t\t\treturn { refetch: false } as unknown as StandardSchema<T>;\n\t\t}) as DeleteMutationFn<T, string, UtilsRecord, StandardSchema<T>>,\n\t} as never) as SurrealCollectionOptionsReturn<T>;\n\n\tconst baseSync = base.sync?.sync;\n\tconst sync = baseSync\n\t\t? {\n\t\t\t\tsync: (ctx: Parameters<NonNullable<typeof baseSync>>[0]) => {\n\t\t\t\t\tconst canRunBaseSync =\n\t\t\t\t\t\ttypeof (ctx.collection as { on?: unknown })?.on ===\n\t\t\t\t\t\t'function';\n\t\t\t\t\tconst baseResult = canRunBaseSync\n\t\t\t\t\t\t? baseSync(ctx)\n\t\t\t\t\t\t: undefined;\n\t\t\t\t\tconst baseCleanup =\n\t\t\t\t\t\ttypeof baseResult === 'function'\n\t\t\t\t\t\t\t? baseResult\n\t\t\t\t\t\t\t: typeof baseResult === 'object' &&\n\t\t\t\t\t\t\t\t\tbaseResult &&\n\t\t\t\t\t\t\t\t\t'cleanup' in baseResult &&\n\t\t\t\t\t\t\t\t\ttypeof (\n\t\t\t\t\t\t\t\t\t\tbaseResult as {\n\t\t\t\t\t\t\t\t\t\t\tcleanup?: unknown;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t).cleanup === 'function'\n\t\t\t\t\t\t\t\t? (\n\t\t\t\t\t\t\t\t\t\tbaseResult as {\n\t\t\t\t\t\t\t\t\t\t\tcleanup: Cleanup;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t).cleanup\n\t\t\t\t\t\t\t\t: NOOP;\n\t\t\t\t\tconst runtime = createSyncRuntime(\n\t\t\t\t\t\tctx as Parameters<SyncConfig<T>['sync']>[0],\n\t\t\t\t\t);\n\n\t\t\t\t\tconst start = async () => {\n\t\t\t\t\t\tif (!isOnDemandLike) {\n\t\t\t\t\t\t\tif (!crdtEnabled) {\n\t\t\t\t\t\t\t\tconst rows = toRecordArray(\n\t\t\t\t\t\t\t\t\tawait db.select(tableResource),\n\t\t\t\t\t\t\t\t) as Array<Record<string, unknown>>;\n\t\t\t\t\t\t\t\tawait hydratePlainRows(\n\t\t\t\t\t\t\t\t\trows,\n\t\t\t\t\t\t\t\t\tctx.write,\n\t\t\t\t\t\t\t\t\tctx.begin,\n\t\t\t\t\t\t\t\t\tctx.commit,\n\t\t\t\t\t\t\t\t\t'insert',\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tawait runtime.startRealtime();\n\t\t\t\t\t\t\t\tctx.markReady();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (updatesTableName) {\n\t\t\t\t\t\t\t\tconst updates = await queryRows<CRDTUpdateRow>(\n\t\t\t\t\t\t\t\t\tdb,\n\t\t\t\t\t\t\t\t\t`SELECT * FROM type::table($table) ORDER BY ts ASC;`,\n\t\t\t\t\t\t\t\t\t{ table: updatesTableName },\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tfor (const update of updates) {\n\t\t\t\t\t\t\t\t\tconst id = idFromDocRef(update.doc);\n\t\t\t\t\t\t\t\t\tconst doc = getDoc(id);\n\t\t\t\t\t\t\t\t\tconst bytes = await decodeUpdateBytes(\n\t\t\t\t\t\t\t\t\t\tupdate,\n\t\t\t\t\t\t\t\t\t\t'update',\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tif (!bytes.byteLength) continue;\n\t\t\t\t\t\t\t\t\tdoc.import(bytes);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tctx.begin();\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tfor (const [id, doc] of docs.entries()) {\n\t\t\t\t\t\t\t\t\t\tctx.write({\n\t\t\t\t\t\t\t\t\t\t\ttype: 'insert',\n\t\t\t\t\t\t\t\t\t\t\tvalue: normalizeRow(\n\t\t\t\t\t\t\t\t\t\t\t\tmaterializeCrdt(doc, id),\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\t\tctx.commit();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tawait runtime.startRealtime();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tctx.markReady();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tctx.markReady();\n\t\t\t\t\t\tif (syncMode === 'progressive') {\n\t\t\t\t\t\t\tvoid runtime\n\t\t\t\t\t\t\t\t.loadSubset({})\n\t\t\t\t\t\t\t\t.catch((error) => onError?.(error));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tvoid start().catch((error) => onError?.(error));\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcleanup: () => {\n\t\t\t\t\t\t\truntime.cleanup();\n\t\t\t\t\t\t\tbaseCleanup();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tloadSubset: async (subset) => {\n\t\t\t\t\t\t\tawait runtime.loadSubset(subset);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tunloadSubset: (subset) => {\n\t\t\t\t\t\t\truntime.unloadSubset(subset);\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t}\n\t\t: undefined;\n\n\treturn {\n\t\t...base,\n\t\tsync: sync ?? base.sync,\n\t} as SurrealCollectionOptionsReturn<T>;\n}\n\nexport function surrealCollectionOptions<T extends SyncedTable<object>>(\n\tconfig: SurrealCollectionOptions<T>,\n): CollectionConfig<\n\tT,\n\tstring,\n\tStandardSchemaV1<MutationInput<T>, T>,\n\tUtilsRecord\n> & {\n\tschema: StandardSchemaV1<MutationInput<T>, T>;\n\tutils: UtilsRecord;\n} {\n\treturn modernSurrealCollectionOptions(config);\n}\n\ndeclare module '@tanstack/db' {\n\tinterface Collection<\n\t\tT extends object = Record<string, unknown>,\n\t\tTKey extends string | number = string | number,\n\t\tTUtils extends UtilsRecord = UtilsRecord,\n\t\tTSchema extends StandardSchemaV1 = StandardSchemaV1,\n\t\tTInsertInput extends object = T,\n\t> {\n\t\tdelete(\n\t\t\tkeys: Array<TKey | RecordId | string> | TKey | RecordId | string,\n\t\t\tconfig?: OperationConfig,\n\t\t): Transaction<any>;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/crdt.ts","../src/id.ts","../src/table.ts","../src/util.ts","../src/encryption/index.ts","../src/index.ts"],"names":["RecordId","canonical","parseWhereExpression","parseOrderByExpression","Table","Features","firstRow","LoroDoc","queryCollectionOptions","rows","decoded"],"mappings":";;;;;;;;;;AAMA,IAAM,QAAA,GAAW,CAAC,KAAA,KACjB,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,IAAA,GACnC,KAAA,GACD,EAAC;AAEE,IAAM,mBAAA,GAAsB,CAClC,GAAA,EACA,EAAA,KACO;AACP,EAAA,MAAM,OAAO,QAAA,CAAS,GAAA,CAAI,OAAO,MAAM,CAAA,CAAE,QAAQ,CAAA;AACjD,EAAA,OAAO;AAAA,IACN,EAAA;AAAA,IACA,GAAG;AAAA,GACJ;AACD;AAEO,IAAM,mBAAA,GAAsB,CAClC,GAAA,EACA,MAAA,KACU;AACV,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,MAAA,CAAO,MAAM,CAAA;AAC9B,EAAA,IAAI,MAAA,CAAO,SAAS,QAAA,EAAU;AAC7B,IAAA,IAAA,CAAK,GAAA,CAAI,WAAW,IAAI,CAAA;AACxB,IAAA;AAAA,EACD;AACA,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,MAAA,CAAO,KAAK,CAAA;AACnC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,UAAU,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtD,IAAA,IAAI,QAAQ,IAAA,EAAM;AAClB,IAAA,IAAA,CAAK,GAAA,CAAI,KAAK,UAAU,CAAA;AAAA,EACzB;AACD;AAEO,IAAM,uBAAA,GAA0B,CACtC,GAAA,EACA,EAAA,KACO;AACP,EAAA,MAAM,WAAW,QAAA,CAAS,GAAA,CAAI,OAAO,MAAM,CAAA,CAAE,QAAQ,CAAA;AACrD,EAAA,MAAM,OAAA,GAAU,GAAA,CAAI,OAAA,CAAQ,SAAS,EAAE,QAAA,EAAS;AAChD,EAAA,OAAO;AAAA,IACN,EAAA;AAAA,IACA,OAAA;AAAA,IACA,GAAG;AAAA,GACJ;AACD;AAEO,IAAM,uBAAA,GAA0B,CACtC,GAAA,EACA,MAAA,KACU;AACV,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,OAAA,CAAQ,SAAS,CAAA;AAClC,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,MAAA,CAAO,MAAM,CAAA;AAClC,EAAA,IAAI,MAAA,CAAO,SAAS,QAAA,EAAU;AAC7B,IAAA,QAAA,CAAS,GAAA,CAAI,WAAW,IAAI,CAAA;AAC5B,IAAA;AAAA,EACD;AACA,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,MAAA,CAAO,KAAK,CAAA;AACnC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,UAAU,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtD,IAAA,IAAI,QAAQ,IAAA,EAAM;AAClB,IAAA,IAAI,QAAQ,SAAA,EAAW;AACtB,MAAA,IAAI,OAAO,UAAA,KAAe,QAAA,EAAU,IAAA,CAAK,OAAO,UAAU,CAAA;AAC1D,MAAA;AAAA,IACD;AACA,IAAA,QAAA,CAAS,GAAA,CAAI,KAAK,UAAU,CAAA;AAAA,EAC7B;AACD;AAEO,IAAM,iBAAA,GAAoB,CAChC,OAAA,KAC2B;AAC3B,EAAA,IAAI,YAAY,UAAA,EAAY;AAC3B,IAAA,OAAO;AAAA,MACN,WAAA,EAAa,uBAAA;AAAA,MACb,gBAAA,EACC;AAAA,KACF;AAAA,EACD;AAEA,EAAA,OAAO;AAAA,IACN,WAAA,EAAa,mBAAA;AAAA,IACb,gBAAA,EACC;AAAA,GACF;AACD;ACtFA,IAAM,oBAAA,uBAA2B,GAAA,EAAqB;AACtD,IAAM,kBAAA,uBAAyB,GAAA,EAAsB;AAErD,IAAM,sBAAA,GAAyB,CAC9B,SAAA,EACA,SAAA,KACa;AACb,EAAA,MAAM,MAAA,GAAS,oBAAA,CAAqB,GAAA,CAAI,SAAS,CAAA;AACjD,EAAA,IAAI,MAAA,KAAW,QAAW,OAAO,MAAA;AACjC,EAAA,MAAM,OAAA,GAAU,SAAA,IAAa,yBAAA,CAA0B,SAAS,CAAA;AAChE,EAAA,oBAAA,CAAqB,GAAA,CAAI,WAAW,OAAO,CAAA;AAC3C,EAAA,OAAO,OAAA;AACR,CAAA;AAEA,IAAM,iBAAA,GAAoB,CAAC,SAAA,KAAgC;AAC1D,EAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,GAAA,CAAI,SAAS,CAAA;AAC/C,EAAA,IAAI,QAAQ,OAAO,MAAA;AACnB,EAAA,MAAM,OAAA,GAAU,0BAA0B,SAAS,CAAA;AACnD,EAAA,kBAAA,CAAmB,GAAA,CAAI,WAAW,OAAO,CAAA;AACzC,EAAA,OAAO,OAAA;AACR,CAAA;AAEA,IAAM,yBAAA,GAA4B,CAAC,SAAA,KAAgC;AAClE,EAAA,MAAM,GAAA,GAAM,SAAA,CAAU,OAAA,CAAQ,GAAG,CAAA;AACjC,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA;AACpC,EAAA,MAAM,GAAA,GAAM,SAAA,CAAU,KAAA,CAAM,GAAA,GAAM,CAAC,CAAA;AACnC,EAAA,OAAO,IAAIA,kBAAA,CAAS,KAAA,EAAO,GAAG,CAAA;AAC/B,CAAA;AAEO,IAAM,gBAAA,GAAmB,CAAC,KAAA,KAA0B;AAC1D,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,MAAM,cAAA,GACL,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,IAAK,QAAQ,QAAA,CAAS,GAAG,CAAA,IAAK,OAAA,CAAQ,MAAA,IAAU,CAAA;AACvE,EAAA,MAAM,cAAA,GACL,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,IAAK,QAAQ,QAAA,CAAS,GAAG,CAAA,IAAK,OAAA,CAAQ,MAAA,IAAU,CAAA;AACvE,EAAA,MAAM,gBAAA,GACL,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,IAAK,QAAQ,QAAA,CAAS,GAAG,CAAA,IAAK,OAAA,CAAQ,MAAA,IAAU,CAAA;AACvE,EAAA,OAAO,kBAAkB,cAAA,IAAkB,gBAAA,GACxC,QAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GACnB,OAAA;AACJ,CAAA;AAEO,IAAM,gBAAA,GAAmB,CAAC,GAAA,KAAmC;AACnE,EAAA,MAAM,GAAA,GACL,OAAO,GAAA,KAAQ,QAAA,GAAW,iBAAiB,GAAG,CAAA,GAAI,IAAI,QAAA,EAAS;AAChE,EAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,GAAG,CAAA,CAAE,IAAA,EAAK;AAC3C,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AAC/B,EAAA,IAAI,OAAO,CAAA,IAAK,GAAA,IAAO,OAAA,CAAQ,MAAA,GAAS,GAAG,OAAO,OAAA;AAElD,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,GAAG,EAAE,IAAA,EAAK;AACzC,EAAA,MAAM,GAAA,GAAM,gBAAA;AAAA,IACX,kBAAA,CAAmB,iBAAiB,OAAA,CAAQ,KAAA,CAAM,MAAM,CAAC,CAAA,CAAE,IAAA,EAAM,CAAC;AAAA,GACnE;AACA,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,GAAA,EAAK,OAAO,OAAA;AAC3B,EAAA,OAAO,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA;AACvB,CAAA;AAEA,IAAM,kBAAA,GAAqB,CAAC,KAAA,KAA0B;AACrD,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,MAAM,eAAA,GACL,OAAA,CAAQ,UAAA,CAAW,QAAG,CAAA,IAAK,QAAQ,QAAA,CAAS,QAAG,CAAA,IAAK,OAAA,CAAQ,MAAA,IAAU,CAAA;AACvE,EAAA,MAAM,aAAA,GACL,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,IAAK,QAAQ,QAAA,CAAS,GAAG,CAAA,IAAK,OAAA,CAAQ,MAAA,IAAU,CAAA;AACvE,EAAA,OAAO,eAAA,IAAmB,gBACvB,OAAA,CAAQ,KAAA,CAAM,GAAG,EAAE,CAAA,CAAE,MAAK,GAC1B,OAAA;AACJ,CAAA;AAEO,IAAM,iBAAA,GAAoB,CAAC,GAAA,KAAmC;AACpE,EAAA,MAAM,UAAA,GAAa,iBAAiB,GAAG,CAAA;AACvC,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,OAAA,CAAQ,GAAG,CAAA;AAClC,EAAA,MAAM,SAAS,GAAA,GAAM,CAAA,GAAI,WAAW,KAAA,CAAM,GAAA,GAAM,CAAC,CAAA,GAAI,UAAA;AACrD,EAAA,OAAO,gBAAA,CAAiB,MAAA,CAAO,IAAA,EAAM,CAAA;AACtC;AAEA,IAAM,gBAAA,GAAmB,CAAC,KAAA,KAA2B;AACpD,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AAC7B,EAAA,OAAO,GAAA,GAAM,CAAA,IAAK,GAAA,GAAM,KAAA,CAAM,MAAA,GAAS,CAAA;AACxC,CAAA;AAEA,IAAM,kBAAA,GAAqB,CAAC,KAAA,KAC3B,2BAAA,CAA4B,KAAK,KAAK,CAAA;AASvC,IAAM,WAAA,GAAc,CAAC,KAAA,KAAuC;AAC3D,EAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,UAAU,OAAO,MAAA;AAChD,EAAA,MAAM,OAAQ,KAAA,CAA+C,WAAA;AAC7D,EAAA,OAAO,OAAO,IAAA,EAAM,IAAA,KAAS,QAAA,GAAW,KAAK,IAAA,GAAO,MAAA;AACrD,CAAA;AAEA,IAAM,4BAAA,GAA+B,CACpC,KAAA,KACkC;AAClC,EAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,iBAAiBA,kBAAA,EAAU;AACrE,IAAA,OAAO,KAAA;AAAA,EACR;AACA,EAAA,MAAM,GAAA,GAAM,KAAA;AACZ,EAAA,IAAI,OAAO,GAAA,CAAI,QAAA,KAAa,UAAA,EAAY,OAAO,KAAA;AAC/C,EAAA,IAAI,EAAE,OAAA,IAAW,GAAA,CAAA,IAAQ,EAAE,IAAA,IAAQ,MAAM,OAAO,KAAA;AAChD,EAAA,MAAM,QAAA,GAAW,YAAY,KAAK,CAAA;AAElC,EAAA,IAAI,CAAC,QAAA,IAAY,CAAC,gBAAgB,IAAA,CAAK,QAAQ,GAAG,OAAO,KAAA;AAEzD,EAAA,MAAM,aAAa,GAAA,CAAI,KAAA;AACvB,EAAA,MAAM,KAAA,GACL,OAAO,UAAA,KAAe,QAAA,GACnB,aACA,UAAA,IAAc,IAAA,GACb,MAAA,CAAO,UAAU,CAAA,GACjB,EAAA;AACL,EAAA,MAAM,UAAU,GAAA,CAAI,EAAA;AACpB,EAAA,MAAM,aAAA,GACL,OAAO,OAAA,KAAY,QAAA,IACnB,OAAO,OAAA,KAAY,QAAA,IACnB,OAAO,OAAA,KAAY,QAAA;AACpB,EAAA,OAAO,iBAAiB,kBAAA,CAAmB,gBAAA,CAAiB,KAAK,CAAA,CAAE,MAAM,CAAA;AAC1E,CAAA;AAEA,IAAM,yBAAA,GAA4B,CAAC,KAAA,KAAsC;AACxE,EAAA,MAAM,UAAA,GAAa,iBAAiB,KAAK,CAAA;AACzC,EAAA,IAAI,CAAC,gBAAA,CAAiB,UAAU,CAAA,EAAG,OAAO,MAAA;AAE1C,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,OAAA,CAAQ,GAAG,CAAA;AAClC,EAAA,MAAM,KAAA,GAAQ,iBAAiB,UAAA,CAAW,KAAA,CAAM,GAAG,GAAG,CAAA,CAAE,MAAM,CAAA;AAC9D,EAAA,MAAM,MAAM,UAAA,CAAW,KAAA,CAAM,GAAA,GAAM,CAAC,EAAE,IAAA,EAAK;AAC3C,EAAA,IAAI,CAAC,SAAS,CAAC,GAAA,IAAO,CAAC,kBAAA,CAAmB,KAAK,GAAG,OAAO,MAAA;AACzD,EAAA,OAAO,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA;AACvB,CAAA;AAEA,IAAM,eAAA,GAAkB,CAAC,KAAA,KAA4B;AACpD,EAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,UAAU,OAAO,MAAA;AAChD,EAAA,MAAM,GAAA,GAAM,KAAA;AACZ,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA;AAC5B,EAAA,IAAI,KAAK,MAAA,KAAW,CAAA,IAAK,KAAK,CAAC,CAAA,KAAM,MAAM,OAAO,MAAA;AAClD,EAAA,OAAO,GAAA,CAAI,EAAA;AACZ,CAAA;AAEA,IAAM,yCAAA,GAA4C,CACjD,KAAA,KACwB;AACxB,EAAA,IAAI,CAAC,4BAAA,CAA6B,KAAK,CAAA,EAAG,OAAO,MAAA;AACjD,EAAA,MAAM,GAAA,GAAM,KAAA;AACZ,EAAA,MAAM,QAAA,GACL,OAAO,GAAA,CAAI,KAAA,KAAU,WAAW,GAAA,CAAI,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AAC7D,EAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,QAAQ,CAAA,CAAE,IAAA,EAAK;AAC9C,EAAA,MAAM,EAAA,GAAK,MAAA,CAAO,GAAA,CAAI,EAAE,CAAA;AACxB,EAAA,MAAM,UAAA,GACL,KAAA,IAAS,EAAA,IAAM,kBAAA,CAAmB,KAAK,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,GAAK,MAAA;AAC/D,EAAA,IAAI,UAAA,EAAY,OAAO,yBAAA,CAA0B,UAAU,CAAA;AAC3D,EAAA,OAAO,yBAAA,CAA0B,MAAA,CAAO,GAAA,CAAI,QAAA,EAAU,CAAC,CAAA;AACxD,CAAA;AAEO,IAAM,yBAAA,GAA4B,CACxC,KAAA,KACwB;AACxB,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC9B,IAAA,OAAO,0BAA0B,KAAK,CAAA;AAAA,EACvC;AACA,EAAA,IAAI,iBAAiBA,kBAAA,EAAU;AAC9B,IAAA,OAAO,yBAAA,CAA0B,KAAA,CAAM,QAAA,EAAU,CAAA;AAAA,EAClD;AACA,EAAA,MAAM,qBAAA,GACL,0CAA0C,KAAK,CAAA;AAChD,EAAA,IAAI,uBAAuB,OAAO,qBAAA;AAClC,EAAA,MAAM,SAAA,GAAY,gBAAgB,KAAK,CAAA;AACvC,EAAA,IAAI,SAAA,KAAc,MAAA,IAAa,SAAA,KAAc,KAAA,EAAO,OAAO,MAAA;AAC3D,EAAA,OAAO,0BAA0B,SAAS,CAAA;AAC3C,CAAA;AAEO,IAAM,yBAAA,GAA4B,CAAC,KAAA,KAA4B;AACrE,EAAA,IAAI,iBAAiBA,kBAAA,EAAU;AAC9B,IAAA,MAAMC,UAAAA,GAAY,0BAA0B,KAAK,CAAA;AACjD,IAAA,IAAI,CAACA,YAAW,OAAO,KAAA;AACvB,IAAA,OAAO,kBAAkBA,UAAS,CAAA;AAAA,EACnC;AACA,EAAA,MAAM,SAAA,GAAY,0BAA0B,KAAK,CAAA;AACjD,EAAA,IAAI,CAAC,WAAW,OAAO,KAAA;AACvB,EAAA,OAAO,kBAAkB,SAAS,CAAA;AACnC,CAAA;AAiDO,IAAM,0BAAA,GAA6B,CAAC,KAAA,KAA4B;AACtE,EAAA,IAAI,iBAAiBD,kBAAA,EAAU;AAC9B,IAAA,MAAMC,UAAAA,GAAY,0BAA0B,KAAK,CAAA;AACjD,IAAA,IAAI,CAACA,YAAW,OAAO,KAAA;AACvB,IAAA,OAAO,sBAAA,CAAuBA,YAAW,KAAK,CAAA;AAAA,EAC/C;AACA,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAChD,IAAA,MAAMA,UAAAA,GAAY,0BAA0B,KAAK,CAAA;AACjD,IAAA,IAAI,CAACA,YAAW,OAAO,KAAA;AAEvB,IAAA,IAAI,4BAAA,CAA6B,KAAK,CAAA,EAAG;AACxC,MAAA,OAAO,sBAAA,CAAuBA,YAAW,KAAK,CAAA;AAAA,IAC/C;AAEA,IAAA,MAAM,SAAA,GAAY,gBAAgB,KAAK,CAAA;AACvC,IAAA,IACC,SAAA,YAAqBD,kBAAA,IACrB,4BAAA,CAA6B,SAAS,CAAA,EACrC;AACD,MAAA,OAAO,sBAAA,CAAuBC,YAAW,SAAS,CAAA;AAAA,IACnD;AAEA,IAAA,OAAO,uBAAuBA,UAAS,CAAA;AAAA,EACxC;AACA,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AAEtC,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,MAAM,QAAA,GAAW,iBAAiB,OAAO,CAAA;AACzC,EAAA,MAAM,SAAA,GACL,0BAA0B,QAAQ,CAAA,KACjC,aAAa,OAAA,GAAU,MAAA,GAAY,0BAA0B,OAAO,CAAA,CAAA;AACtE,EAAA,IAAI,SAAA,EAAW;AACd,IAAA,OAAO,uBAAuB,SAAS,CAAA;AAAA,EACxC;AAGA,EAAA,OAAO,KAAA;AACR,CAAA;AAEA,IAAM,aAAA,GAAgB,CAAC,KAAA,KACtB,OAAO,KAAA,KAAU,QAAA,IACjB,KAAA,KAAU,IAAA,IACV,MAAA,CAAO,cAAA,CAAe,KAAK,CAAA,KAAM,MAAA,CAAO,SAAA;AAElC,IAAM,8BAAA,GAAiC,CAAI,KAAA,KAAgB;AACjE,EAAA,MAAM,UAAA,GAAa,2BAA2B,KAAK,CAAA;AAEnD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC9B,IAAA,OAAO,UAAA,CAAW,GAAA;AAAA,MAAI,CAAC,IAAA,KACtB,8BAAA,CAA+B,IAAI;AAAA,KACpC;AAAA,EACD;AAEA,EAAA,IAAI,aAAA,CAAc,UAAU,CAAA,EAAG;AAC9B,IAAA,MAAM,MAA+B,EAAC;AACtC,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AAChD,MAAA,GAAA,CAAI,CAAC,CAAA,GAAI,8BAAA,CAA+B,CAAC,CAAA;AAAA,IAC1C;AACA,IAAA,OAAO,GAAA;AAAA,EACR;AAEA,EAAA,OAAO,UAAA;AACR,CAAA;AAEO,IAAM,2BAAA,GAA8B,CAC1C,IAAA,KACO;AACP,EAAA,MAAM,MAA+B,EAAC;AACtC,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC1C,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,0BAAA,CAA2B,CAAC,CAAA;AAAA,EACtC;AACA,EAAA,OAAO,GAAA;AACR,CAAA;AAEO,IAAM,UAAA,GAAa,CACzB,SAAA,EACA,EAAA,KACc;AACd,EAAA,IAAI,cAAcD,kBAAA,EAAU;AAC3B,IAAA,OAAO,EAAA;AAAA,EACR;AAEA,EAAA,MAAM,UAAA,GAAa,iBAAiB,EAAE,CAAA;AACtC,EAAA,MAAM,QAAA,GAAW,GAAG,SAAS,CAAA,CAAA,CAAA;AAC7B,EAAA,MAAM,GAAA,GAAM,WAAW,UAAA,CAAW,QAAQ,IACvC,UAAA,CAAW,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,GAChC,UAAA;AACH,EAAA,OAAO,IAAIA,kBAAA,CAAS,SAAA,EAAW,GAAG,CAAA;AACnC,CAAA;AC9SA,IAAM,aAAA,GAAgB,0BAAA;AAEtB,IAAM,QAAA,GAAW,CAAI,GAAA,KAAqC;AACzD,EAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AACjB,EAAA,IAAI,MAAM,OAAA,CAAQ,GAAG,CAAA,EAAG,OAAO,IAAI,CAAC,CAAA;AACpC,EAAA,OAAO,GAAA;AACR,CAAA;AAEA,IAAM,WAAA,GAAc,CAAC,KAAA,KAA8B;AAClD,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC1B,IAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAAA,EACnE;AACA,EAAA,OAAO,KAAA;AACR,CAAA;AAEA,IAAM,eAAA,GAAkB,CAAC,OAAA,KAA4B;AACpD,EAAA,IAAI,aAAA,CAAc,IAAA,CAAK,OAAO,CAAA,EAAG,OAAO,OAAA;AACxC,EAAA,OAAO,CAAA,EAAA,EAAK,OAAA,CAAQ,UAAA,CAAW,GAAA,EAAK,KAAK,CAAC,CAAA,EAAA,CAAA;AAC3C,CAAA;AAEA,IAAM,eAAA,GAAkB,CAAC,IAAA,KAA4B;AACpD,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,MAAW,WAAW,IAAA,EAAM;AAC3B,IAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAChC,MAAA,GAAA,IAAO,IAAI,OAAO,CAAA,CAAA,CAAA;AAClB,MAAA;AAAA,IACD;AACA,IAAA,MAAM,IAAA,GAAO,gBAAgB,OAAO,CAAA;AACpC,IAAA,GAAA,GAAM,GAAA,GAAM,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,GAAK,IAAA;AAAA,EAChC;AACA,EAAA,OAAO,GAAA;AACR,CAAA;AAEA,IAAM,wBAAA,GAA2B,CAAC,KAAA,KACjC,KAAA,CAAM,QAAQ,KAAK,CAAA,IACnB,KAAA,CAAM,MAAA,GAAS,KACf,OAAO,KAAA,CAAM,CAAC,CAAA,KAAM,YACpB,KAAA,CAAM,KAAA;AAAA,EACL,CAAC,OAAA,KAAY,OAAO,OAAA,KAAY,QAAA,IAAY,OAAO,OAAA,KAAY;AAChE,CAAA;AAED,IAAM,eAAA,GAAkB,CAAC,IAAA,EAAiB,QAAA,KAAkC;AAC3E,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,EAAA,IAAI,IAAA,CAAK,CAAC,CAAA,KAAM,MAAA,EAAQ,OAAO,CAAC,IAAA,EAAM,GAAG,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AACtD,EAAA,IAAI,IAAA,CAAK,CAAC,CAAA,KAAM,IAAA,EAAM,OAAO,CAAC,KAAA,EAAO,GAAG,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AACrD,EAAA,OAAO,IAAA;AACR,CAAA;AAEA,IAAM,oBAAA,GAAuB,CAAC,KAAA,KAA4B;AACzD,EAAA,IAAI,KAAA,CAAM,QAAQ,KAAK,CAAA;AACtB,IAAA,OAAO,MAAM,GAAA,CAAI,CAAC,IAAA,KAAS,oBAAA,CAAqB,IAAI,CAAC,CAAA;AAEtD,EAAA,MAAM,MAAA,GAAS,0BAA0B,KAAK,CAAA;AAC9C,EAAA,IAAI,MAAA,KAAW,OAAO,OAAO,MAAA;AAE7B,EAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA;AAC7B,IAAA,OAAO,2BAA2B,KAAK,CAAA;AAExC,EAAA,OAAO,2BAA2B,KAAK,CAAA;AACxC,CAAA;AAEA,IAAM,aAAA,GAAgB,CAAC,KAAA,KAAgC;AACtD,EAAA,IACC,OAAO,KAAA,KAAU,QAAA,IACjB,KAAA,KAAU,IAAA,IACV,SAAS,KAAA,IACT,OAAQ,KAAA,CAA2B,GAAA,KAAQ,QAAA,EAC1C;AACD,IAAA,OAAO,KAAA;AAAA,EACR;AACA,EAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AACrD,CAAA;AAEA,IAAM,WAAA,GAAc,CAAC,EAAA,EAAkB,IAAA,KAAsC;AAC5E,EAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,CAAI,aAAa,EAAE,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,GAAG,CAAA;AAC5D,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACvB,IAAA,OAAO,EAAE,GAAA,EAAK,EAAA,KAAO,KAAA,GAAQ,SAAS,OAAA,EAAQ;AAAA,EAC/C;AACA,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG,OAAO,EAAE,GAAA,EAAK,KAAA,CAAM,CAAC,CAAA,EAAE;AAC/C,EAAA,OAAO;AAAA,IACN,GAAA,EAAK,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAG,CAAA,CAAE,IAAA,CAAK,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,CAAG;AAAA,GACrD;AACD,CAAA;AAEA,IAAM,gBAAA,GAAmB,CACxB,KAAA,EACA,MAAA,KACsD;AACtD,EAAA,IAAI,QAAA,GAAW,CAAA;AACf,EAAA,MAAM,MAAA,GAAkC,EAAE,KAAA,EAAO,KAAA,CAAM,IAAA,EAAK;AAC5D,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAA2B;AAC7C,IAAA,MAAM,GAAA,GAAM,IAAI,QAAA,EAAU,CAAA,CAAA;AAC1B,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AACd,IAAA,OAAO,IAAI,GAAG,CAAA,CAAA;AAAA,EACf,CAAA;AACA,EAAA,MAAM,UAAA,GAAa,CAClB,SAAA,EACA,EAAA,EACA,KAAA,KACiB;AACjB,IAAA,MAAM,KAAA,GAAQ,eAAA;AAAA,MACb,eAAA,CAAgB,WAAA,CAAY,SAAS,CAAA,EAAG,MAAM,QAAQ;AAAA,KACvD;AAEA,IAAA,IAAI,UAAU,MAAA,EAAW;AACxB,MAAA,IAAI,OAAO,GAAA,EAAK,OAAO,EAAE,GAAA,EAAK,CAAA,EAAG,KAAK,CAAA,QAAA,CAAA,EAAW;AACjD,MAAA,IAAI,OAAO,IAAA,EAAM,OAAO,EAAE,GAAA,EAAK,CAAA,EAAG,KAAK,CAAA,YAAA,CAAA,EAAe;AACtD,MAAA,MAAM,IAAI,KAAA;AAAA,QACT,CAAA,sBAAA,EAAyB,KAAK,CAAA,wBAAA,EAA2B,EAAE,CAAA,EAAA;AAAA,OAC5D;AAAA,IACD;AAEA,IAAA,IAAI,wBAAA,CAAyB,KAAK,CAAA,EAAG;AACpC,MAAA,MAAM,IAAI,KAAA;AAAA,QACT;AAAA,OACD;AAAA,IACD;AACA,IAAA,OAAO;AAAA,MACN,GAAA,EAAK,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,EAAE,IAAI,SAAA,CAAU,oBAAA,CAAqB,KAAK,CAAC,CAAC,CAAA;AAAA,KAC9D;AAAA,EACD,CAAA;AACA,EAAA,MAAM,YAAA,GAAe,CACpB,IAAA,KACY;AACZ,IAAA,MAAM,QAAA,GAAWE,wBAAkC,IAAA,EAAM;AAAA,MACxD,QAAA,EAAU;AAAA,QACT,GAAA,EAAK,CAAA,GAAI,IAAA,KAAS,WAAA,CAAY,OAAO,IAAI,CAAA;AAAA,QACzC,EAAA,EAAI,CAAA,GAAI,IAAA,KAAS,WAAA,CAAY,MAAM,IAAI,CAAA;AAAA,QACvC,GAAA,EAAK,CAAC,GAAA,MAAS,EAAE,GAAA,EAAK,QAAQ,aAAA,CAAc,GAAG,CAAA,CAAE,GAAG,CAAA,CAAA,CAAA,EAAI,CAAA;AAAA,QACxD,IAAI,CAAC,KAAA,EAAO,UAAU,UAAA,CAAW,KAAA,EAAO,KAAK,KAAK,CAAA;AAAA,QAClD,IAAI,CAAC,KAAA,EAAO,UAAU,UAAA,CAAW,KAAA,EAAO,KAAK,KAAK,CAAA;AAAA,QAClD,KAAK,CAAC,KAAA,EAAO,UAAU,UAAA,CAAW,KAAA,EAAO,MAAM,KAAK,CAAA;AAAA,QACpD,IAAI,CAAC,KAAA,EAAO,UAAU,UAAA,CAAW,KAAA,EAAO,KAAK,KAAK,CAAA;AAAA,QAClD,KAAK,CAAC,KAAA,EAAO,UAAU,UAAA,CAAW,KAAA,EAAO,MAAM,KAAK,CAAA;AAAA,QACpD,MAAM,CAAC,KAAA,EAAO,UAAU,UAAA,CAAW,KAAA,EAAO,QAAQ,KAAK,CAAA;AAAA,QACvD,KAAA,EAAO,CAAC,KAAA,EAAO,KAAA,KAAU;AACxB,UAAA,MAAM,CAAA,GAAI,eAAA;AAAA,YACT,eAAA,CAAgB,WAAA,CAAY,KAAK,CAAA,EAAG,MAAM,QAAQ;AAAA,WACnD;AACA,UAAA,MAAM,CAAA,GAAI,SAAA,CAAU,oBAAA,CAAqB,KAAK,CAAC,CAAA;AAC/C,UAAA,OAAO;AAAA,YACN,GAAA,EAAK,CAAA,cAAA,EAAiB,CAAC,CAAA,qBAAA,EAAwB,CAAC,CAAA,CAAA;AAAA,WACjD;AAAA,QACD,CAAA;AAAA,QACA,EAAA,EAAI,CAAC,KAAA,EAAO,KAAA,KAAU;AACrB,UAAA,MAAM,CAAA,GAAI,eAAA;AAAA,YACT,eAAA,CAAgB,WAAA,CAAY,KAAK,CAAA,EAAG,MAAM,QAAQ;AAAA,WACnD;AACA,UAAA,IAAI,MAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,WAAW,CAAA,EAAG;AAC/C,YAAA,OAAO,EAAE,KAAK,OAAA,EAAQ;AAAA,UACvB;AACA,UAAA,OAAO;AAAA,YACN,GAAA,EAAK,GAAG,CAAC,CAAA,IAAA,EAAO,UAAU,oBAAA,CAAqB,KAAK,CAAC,CAAC,CAAA;AAAA,WACvD;AAAA,QACD,CAAA;AAAA,QACA,MAAA,EAAQ,CAAC,KAAA,MAAW;AAAA,UACnB,KAAK,CAAA,EAAG,eAAA;AAAA,YACP,eAAA,CAAgB,WAAA,CAAY,KAAK,CAAA,EAAG,MAAM,QAAQ;AAAA,WAClD,CAAA,QAAA;AAAA,SACF,CAAA;AAAA,QACA,WAAA,EAAa,CAAC,KAAA,MAAW;AAAA,UACxB,KAAK,CAAA,EAAG,eAAA;AAAA,YACP,eAAA,CAAgB,WAAA,CAAY,KAAK,CAAA,EAAG,MAAM,QAAQ;AAAA,WAClD,CAAA,QAAA;AAAA,SACF;AAAA,OACD;AAAA,MACA,iBAAA,EAAmB,CAAC,EAAA,KAAO;AAC1B,QAAA,MAAM,IAAI,KAAA;AAAA,UACT,+BAA+B,EAAE,CAAA,4BAAA;AAAA,SAClC;AAAA,MACD;AAAA,KACA,CAAA;AAED,IAAA,IAAI,CAAC,UAAU,OAAO,EAAA;AACtB,IAAA,OAAO,QAAA,CAAS,GAAA;AAAA,EACjB,CAAA;AAEA,EAAA,MAAM,aAAuB,EAAC;AAC9B,EAAA,IAAI,QAAQ,KAAA,EAAO;AAClB,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,MAAA,CAAO,KAAK,CAAA;AACxC,IAAA,IAAI,MAAA,EAAQ,UAAA,CAAW,IAAA,CAAK,MAAM,CAAA;AAAA,EACnC;AACA,EAAA,IAAI,MAAA,EAAQ,QAAQ,SAAA,EAAW;AAC9B,IAAA,MAAM,WAAA,GAAc,YAAA,CAAa,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA;AACxD,IAAA,IAAI,WAAA,EAAa,UAAA,CAAW,IAAA,CAAK,WAAW,CAAA;AAAA,EAC7C;AAEA,EAAA,MAAM,QAAA,GAAW,UAAA,CAAW,MAAA,GACzB,CAAA,OAAA,EAAU,WAAW,GAAA,CAAI,CAAC,IAAA,KAAS,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAG,CAAA,CAAE,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA,GAC7D,EAAA;AAEH,EAAA,MAAM,KAAA,GAAQC,yBAAA,CAAuB,MAAA,EAAQ,OAAO,CAAA;AACpD,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,MAAA,GACpB,CAAA,UAAA,EAAa,KAAA,CACZ,GAAA;AAAA,IACA,CAAC,WACA,CAAA,EAAG,eAAA;AAAA,MACF,eAAA,CAAgB,MAAA,CAAO,KAAA,EAAO,KAAA,CAAM,QAAQ;AAAA,KAC5C,CAAA,CAAA,EAAI,MAAA,CAAO,SAAA,CAAU,aAAa,CAAA;AAAA,GACrC,CACC,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,GACX,EAAA;AACH,EAAA,MAAM,QAAA,GACL,OAAO,MAAA,EAAQ,KAAA,KAAU,QAAA,GACtB,UAAU,SAAA,CAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,GACjC,EAAA;AACJ,EAAA,MAAM,SAAA,GACL,OAAO,MAAA,EAAQ,MAAA,KAAW,QAAA,GACvB,UAAU,SAAA,CAAU,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA,GAClC,EAAA;AAEJ,EAAA,OAAO;AAAA,IACN,GAAA,EAAK,oCAAoC,QAAQ,CAAA,EAAG,QAAQ,CAAA,EAAG,QAAQ,GAAG,SAAS,CAAA,CAAA,CAAA;AAAA,IACnF;AAAA,GACD;AACD,CAAA;AAEO,SAAS,WAAA,CACf,IACA,MAAA,EACC;AACD,EAAA,MAAM,EAAE,MAAK,GAAI,MAAA;AACjB,EAAA,MAAM,KAAA,GAAQ,IAAIC,eAAA,CAAM,IAAI,CAAA;AAE5B,EAAA,MAAM,UAAU,YAA0B;AACzC,IAAA,OAAO,UAAA,EAAW;AAAA,EACnB,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,OAAO,MAAA,KAAyC;AAClE,IAAA,MAAM,EAAE,GAAA,EAAK,MAAA,EAAO,GAAI,gBAAA,CAAiB,QAAQ,MAAM,CAAA;AACvD,IAAA,MAAM,CAAC,GAAG,CAAA,GAAI,MAAM,EAAA,CAAG,KAAA,CAAwB,KAAK,MAAM,CAAA;AAC1D,IAAA,OAAO,OAAO,EAAC;AAAA,EAChB,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS,OAAO,IAAA,KAAiD;AACtE,IAAA,MAAM,KAAM,IAAA,CAAiD,EAAA;AAC7D,IAAA,IAAI,CAAC,EAAA,EAAI;AACR,MAAA,MAAM,UAAU,MAAM,EAAA,CAAG,OAAO,KAAK,CAAA,CAAE,QAAQ,IAAI,CAAA;AACnD,MAAA,OAAO,SAAS,OAAuB,CAAA;AAAA,IACxC;AAEA,IAAA,MAAM,OAAA,GAAU,EAAE,GAAI,IAAA,EAAiC;AACvD,IAAA,OAAA,CAAQ,EAAA,GAAK,UAAA,CAAW,IAAA,EAAM,EAAE,CAAA;AAChC,IAAA,MAAM,QAAA,GAAW,MAAM,EAAA,CAAG,MAAA,CAAO,OAAO,OAAO,CAAA;AAC/C,IAAA,OAAO,SAAS,QAAwB,CAAA;AAAA,EACzC,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS,OAAO,EAAA,EAAc,IAAA,KAAyB;AAC5D,IAAA,MAAM,EAAE,EAAA,EAAI,UAAA,EAAY,GAAG,MAAK,GAAI,IAAA;AACpC,IAAA,MAAM,EAAA,CAAG,MAAA,CAAO,EAAE,CAAA,CAAE,MAAM,IAAI,CAAA;AAAA,EAC/B,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS,OAAO,EAAA,KAAiB;AACtC,IAAA,MAAM,EAAA,CAAG,OAAO,EAAE,CAAA;AAAA,EACnB,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,CACjB,EAAA,KACI;AACJ,IAAA,IAAI,MAAA,GAAS,KAAA;AACb,IAAA,IAAI,IAAA;AAEJ,IAAA,MAAM,EAAA,GAAK,CAAC,GAAA,KAAqB;AAChC,MAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAM,GAAI,GAAA;AAK1B,MAAA,IAAI,WAAW,QAAA,EAAU;AACzB,MAAA,IAAI,MAAA,KAAW,UAAU,EAAA,CAAG,EAAE,MAAM,QAAA,EAAU,GAAA,EAAK,OAAO,CAAA;AAAA,WAAA,IACjD,MAAA,KAAW,UAAU,EAAA,CAAG,EAAE,MAAM,QAAA,EAAU,GAAA,EAAK,OAAO,CAAA;AAAA,WAAA,IACtD,MAAA,KAAW,QAAA;AACnB,QAAA,EAAA,CAAG,EAAE,MAAM,QAAA,EAAU,GAAA,EAAK,EAAE,EAAA,EAAI,KAAA,CAAM,EAAA,EAAG,EAAQ,CAAA;AAAA,IACnD,CAAA;AAEA,IAAA,MAAM,QAAQ,YAAY;AACzB,MAAA,IAAI,CAAC,EAAA,CAAG,kBAAA,CAAmBC,kBAAA,CAAS,WAAW,CAAA,EAAG;AAClD,MAAA,IAAA,GAAO,MAAM,EAAA,CAAG,IAAA,CAAK,KAAK,CAAA;AAC1B,MAAA,IAAA,CAAK,UAAU,EAAE,CAAA;AAAA,IAClB,CAAA;AAEA,IAAA,KAAK,KAAA,EAAM;AAEX,IAAA,OAAO,MAAM;AACZ,MAAA,IAAI,MAAA,EAAQ;AACZ,MAAA,MAAA,GAAS,IAAA;AACT,MAAA,IAAI,IAAA,EAAM,KAAK,IAAA,CAAK,IAAA,EAAK;AAAA,IAC1B,CAAA;AAAA,EACD,CAAA;AAEA,EAAA,OAAO;AAAA,IACN,OAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA,EAAY,MAAA;AAAA,IACZ;AAAA,GACD;AACD;;;AC7TA,IAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,IAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAEhC,IAAM,SAAA,GAAY,OAAO,MAAA,KAAW,WAAA;AAE7B,SAAS,QAAQ,KAAA,EAA+B;AACtD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,OAAA,CAAQ,OAAO,KAAK,CAAA;AAC1D,EAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAC5C;AAEO,SAAS,SAAA,CAAa,KAAA,EAAc,WAAA,GAAc,KAAA,EAAmB;AAC3E,EAAA,IAAI,aAAa,OAAO,IAAA,CAAK,MAAM,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAC,CAAA;AACxD,EAAA,OAAO,OAAA,CAAQ,OAAO,KAAK,CAAA;AAC5B;AAEO,SAAS,SAAS,KAAA,EAAsB;AAC9C,EAAA,IAAI,WAAW,OAAO,MAAA,CAAO,KAAK,KAAK,CAAA,CAAE,SAAS,QAAQ,CAAA;AAC1D,EAAA,OAAO,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,GAAG,KAAK,CAAC,CAAA;AAC1C;AAEO,SAAS,WAAW,MAAA,EAAuB;AACjD,EAAA,IAAI,SAAA,SAAkB,IAAI,UAAA,CAAW,OAAO,IAAA,CAAK,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAClE,EAAA,MAAM,GAAA,GAAM,KAAK,MAAM,CAAA;AACvB,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,GAAA,CAAI,MAAM,CAAA;AACrC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA;AAAA,EAC1B;AACA,EAAA,OAAO,GAAA;AACR;;;ACfA,IAAM,WAAA,GAAc,aAAA;AACpB,IAAM,WAAA,GAAc,SAAA;AACpB,IAAM,eAAA,GAAkB,CAAA;AAExB,IAAM,gBAAgB,MAAc;AACnC,EAAA,IAAI,OAAO,UAAA,CAAW,MAAA,KAAW,WAAA,SAAoB,UAAA,CAAW,MAAA;AAChE,EAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AACnE,CAAA;AAEA,IAAM,aAAA,GAAgB,CAAC,KAAA,KAA6B,IAAI,WAAW,KAAK,CAAA;AAEjE,IAAM,eAAA,GAAN,MAAM,gBAAA,CAA0C;AAAA,EACrC,GAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAA;AAAA,EACA,UAAA;AAAA,EAEjB,WAAA,CAAY,GAAA,EAAgB,OAAA,GAAkC,EAAC,EAAG;AACjE,IAAA,IAAA,CAAK,GAAA,GAAM,QAAQ,GAAA,IAAO,WAAA;AAC1B,IAAA,IAAA,CAAK,OAAA,GAAU,QAAQ,OAAA,IAAW,eAAA;AAClC,IAAA,IAAA,CAAK,GAAA,GAAM,QAAQ,GAAA,IAAO,WAAA;AAC1B,IAAA,IAAA,CAAK,UAAA,GACJ,OAAA,CAAQ,UAAA,KACP,CAAC,WAAA,KAAgB;AACjB,MAAA,IAAI,WAAA,KAAgB,KAAK,GAAA,EAAK;AAC7B,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,WAAW,CAAA,EAAA,CAAI,CAAA;AAAA,MAC9D;AACA,MAAA,OAAO,GAAA;AAAA,IACR,CAAA,CAAA;AAAA,EACF;AAAA,EAEA,aAAa,UAAA,CACZ,MAAA,EACA,OAAA,GAAsD,EAAC,EACtD;AACD,IAAA,MAAM,GAAA,GAAM,MAAM,aAAA,EAAc,CAAE,MAAA,CAAO,SAAA;AAAA,MACxC,KAAA;AAAA,MACA,cAAc,MAAM,CAAA;AAAA,MACpB,SAAA;AAAA,MACA,KAAA;AAAA,MACA,CAAC,WAAW,SAAS;AAAA,KACtB;AAEA,IAAA,OAAO,IAAI,gBAAA,CAAgB,GAAA,EAAK,OAAO,CAAA;AAAA,EACxC;AAAA,EAEA,MAAc,OAAO,GAAA,EAAiC;AACrD,IAAA,OAAO,MAAM,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA;AAAA,EACjC;AAAA,EAEA,MAAM,QAAQ,KAAA,EAAiD;AAC9D,IAAA,MAAM,SAAS,aAAA,EAAc;AAC7B,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,GAAA,IAAO,IAAA,CAAK,GAAA;AAC9B,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,GAAA,IAAO,IAAA,CAAK,GAAA;AAC9B,IAAA,MAAM,CAAA,GAAI,KAAA,CAAM,CAAA,IAAK,IAAA,CAAK,OAAA;AAC1B,IAAA,MAAM,QAAQ,MAAA,CAAO,eAAA,CAAgB,IAAI,UAAA,CAAW,EAAE,CAAC,CAAA;AACvD,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA;AACjC,IAAA,MAAM,KAAK,IAAI,UAAA;AAAA,MACd,MAAM,OAAO,MAAA,CAAO,OAAA;AAAA,QACnB;AAAA,UACC,IAAA,EAAM,SAAA;AAAA,UACN,EAAA,EAAI,KAAA;AAAA,UACJ,gBAAgB,KAAA,CAAM,GAAA,GAClB,aAAA,CAAc,KAAA,CAAM,GAAG,CAAA,GACxB;AAAA,SACJ;AAAA,QACA,GAAA;AAAA,QACA,aAAA,CAAc,MAAM,SAAS;AAAA;AAC9B,KACD;AAEA,IAAA,OAAO;AAAA,MACN,CAAA;AAAA,MACA,GAAA;AAAA,MACA,GAAA;AAAA,MACA,CAAA,EAAG,SAAS,KAAK,CAAA;AAAA,MACjB,EAAA,EAAI,SAAS,EAAE;AAAA,KAChB;AAAA,EACD;AAAA,EAEA,MAAM,OAAA,CAAQ,EAAE,QAAA,EAAU,KAAI,EAAiC;AAC9D,IAAA,IAAI,QAAA,CAAS,GAAA,KAAQ,IAAA,CAAK,GAAA,EAAK;AAC9B,MAAA,MAAM,IAAI,KAAA;AAAA,QACT,CAAA,gCAAA,EAAmC,QAAA,CAAS,GAAG,CAAA,aAAA,EAAgB,KAAK,GAAG,CAAA,EAAA;AAAA,OACxE;AAAA,IACD;AAEA,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,SAAS,GAAG,CAAA;AAC1C,IAAA,MAAM,SAAS,aAAA,EAAc;AAC7B,IAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,MAAA,CAAO,OAAA;AAAA,MACrC;AAAA,QACC,IAAA,EAAM,SAAA;AAAA,QACN,EAAA,EAAI,aAAA,CAAc,UAAA,CAAW,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,QACxC,cAAA,EAAgB,GAAA,GAAO,aAAA,CAAc,GAAG,CAAA,GAAc;AAAA,OACvD;AAAA,MACA,GAAA;AAAA,MACA,aAAA,CAAc,UAAA,CAAW,QAAA,CAAS,EAAE,CAAC;AAAA,KACtC;AAEA,IAAA,OAAO,IAAI,WAAW,SAAS,CAAA;AAAA,EAChC;AACD;;;ACvEA,IAAM,cAAA,GAAiB,UAAA;AACvB,IAAM,eAAA,GAAkB;AAAA,EACvB,SAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACD,CAAA;AACA,IAAM,OAAO,MAAM;AAAC,CAAA;AAqCpB,IAAM,aAAA,GAAgB,CAAC,KAAA,KACtB,OAAO,KAAA,KAAU,QAAA,IACjB,KAAA,KAAU,IAAA,IACV,MAAA,IAAU,KAAA,IACV,OAAQ,KAAA,CAA4B,IAAA,KAAS,QAAA;AAE9C,IAAM,cAAA,GAAiB,CAAC,KAAA,KAAmC;AAC1D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,EAAE,MAAM,KAAA,EAAM;AACpD,EAAA,IAAI,iBAAiBD,eAAAA,EAAO,OAAO,EAAE,IAAA,EAAM,MAAM,IAAA,EAAK;AACtD,EAAA,IAAI,aAAA,CAAc,KAAK,CAAA,EAAG,OAAO,KAAA;AACjC,EAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAChE,CAAA;AAEA,IAAM,eAAA,GAAkB,CAAC,KAAA,KAA4B;AACpD,EAAA,MAAM,UAAA,GAAa,eAAe,KAAK,CAAA;AACvC,EAAA,OAAO,IAAIA,eAAAA,CAAM,UAAA,CAAW,IAAI,CAAA;AACjC,CAAA;AAEA,IAAM,WAAA,GAAc,CAAC,KAAA,KAA6B,cAAA,CAAe,KAAK,CAAA,CAAE,IAAA;AAExE,IAAM,aAAA,GAAgB,CAAC,KAAA,KACtB,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,IAAA,GACnC,KAAA,GACD,EAAC;AAEL,IAAME,SAAAA,GAAW,CAAI,MAAA,KAAsD;AAC1E,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,EAAA,IAAI,MAAM,OAAA,CAAQ,MAAM,CAAA,EAAG,OAAO,OAAO,CAAC,CAAA;AAC1C,EAAA,OAAO,MAAA;AACR,CAAA;AAEA,IAAM,aAAA,GAAgB,CAAoC,GAAA,KACzD,MAAA,CAAO,WAAA;AAAA,EACN,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,CAAE,MAAA,CAAO,CAAC,GAAG,KAAK,CAAA,KAAM,KAAA,KAAU,MAAS;AAC9D,CAAA;AAED,IAAM,kBAAA,GAAqB,CAAC,SAAA,KAAgC;AAC3D,EAAA,MAAM,SAAS,CAAA,EAAG,IAAA,CAAK,KAAI,CAAE,QAAA,CAAS,EAAE,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,GAAS,QAAA,CAAS,EAAE,EAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AACpF,EAAA,OAAO,IAAIN,kBAAAA,CAAS,SAAA,EAAW,GAAG,cAAc,CAAA,EAAG,MAAM,CAAA,CAAE,CAAA;AAC5D,CAAA;AAEA,IAAM,QAAA,GAAW,CAAC,EAAA,EAAuB,SAAA,KAA+B;AACvE,EAAA,MAAM,UAAA,GAAa,iBAAiB,EAAE,CAAA;AACtC,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,UAAA,CAAW,CAAA,EAAG,SAAS,CAAA,CAAA,CAAG,CAAA,GAC9C,UAAA,CAAW,KAAA,CAAM,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA,GACrC,UAAA;AACH,EAAA,OAAO,GAAA,CAAI,WAAW,cAAc,CAAA;AACrC,CAAA;AAEA,IAAM,UAAA,GAAa,CAClB,KAAA,KAC8B;AAC9B,EAAA,MAAM,UAAU,KAAA,CAAM,OAAA;AACtB,EAAA,MAAM,YAAY,KAAA,CAAM,SAAA;AACxB,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA;AACpB,EAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AACpB,EAAA,MAAM,aAAa,KAAA,CAAM,UAAA;AACzB,EAAA,IACC,OAAO,OAAA,KAAY,QAAA,IACnB,OAAO,cAAc,QAAA,IACrB,OAAO,KAAA,KAAU,QAAA,IACjB,OAAO,KAAA,KAAU,QAAA,IACjB,OAAO,eAAe,QAAA,EACrB;AACD,IAAA,OAAO,IAAA;AAAA,EACR;AACA,EAAA,OAAO;AAAA,IACN,CAAA,EAAG,OAAA;AAAA,IACH,GAAA,EAAK,SAAA;AAAA,IACL,GAAA,EAAK,KAAA;AAAA,IACL,CAAA,EAAG,KAAA;AAAA,IACH,EAAA,EAAI;AAAA,GACL;AACD,CAAA;AAEA,IAAM,gBAAA,GAAmB,CACxB,QAAA,MAC8B;AAAA,EAC9B,SAAS,QAAA,CAAS,CAAA;AAAA,EAClB,WAAW,QAAA,CAAS,GAAA;AAAA,EACpB,QAAQ,QAAA,CAAS,GAAA;AAAA,EACjB,OAAO,QAAA,CAAS,CAAA;AAAA,EAChB,YAAY,QAAA,CAAS;AACtB,CAAA,CAAA;AAEA,IAAM,mBAAA,GAAsB,CAC3B,KAAA,KAC6B;AAC7B,EAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAM;AACxB,EAAA,KAAA,MAAW,GAAA,IAAO,eAAA,EAAiB,OAAO,IAAA,CAAK,GAAG,CAAA;AAClD,EAAA,OAAO,IAAA;AACR,CAAA;AAEA,IAAM,aAAA,GAAgB,CAAI,IAAA,KAA0C;AACnE,EAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAC;AACnB,EAAA,OAAO,MAAM,OAAA,CAAQ,IAAI,CAAA,GAAI,IAAA,GAAO,CAAC,IAAI,CAAA;AAC1C,CAAA;AAEA,eAAe,SAAA,CACd,EAAA,EAMA,GAAA,EACA,QAAA,EACe;AACf,EAAA,MAAM,SAAS,MAAM,EAAA,CAAG,MAAM,GAAA,EAAK,QAAA,IAAY,EAAE,CAAA;AACjD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC1B,IAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,KAAA;AACjC,IAAA,OAAO,EAAC;AAAA,EACT;AACA,EAAA,OAAO,EAAC;AACT;AAEA,SAAS,mBACR,SAAA,EACwC;AACxC,EAAA,OAAO;AAAA,IACN,WAAA,EAAa;AAAA,MACZ,OAAA,EAAS,CAAA;AAAA,MACT,MAAA,EAAQ,uBAAA;AAAA,MACR,QAAA,EAAU,CAAC,KAAA,KAAmB;AAC7B,QAAA,IACC,CAAC,SACD,OAAO,KAAA,KAAU,YACjB,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAClB;AACD,UAAA,OAAO;AAAA,YACN,MAAA,EAAQ,CAAC,EAAE,OAAA,EAAS,kCAAkC;AAAA,WACvD;AAAA,QACD;AAEA,QAAA,MAAM,OAAO,2BAAA,CAA4B;AAAA,UACxC,GAAI;AAAA,SACJ,CAAA;AAED,QAAA,IAAI,CAAC,IAAA,CAAK,EAAA;AACT,UAAA,IAAA,CAAK,EAAA,GAAK,mBAAmB,SAAS,CAAA;AAEvC,QAAA,OAAO,EAAE,OAAO,IAAA,EAAU;AAAA,MAC3B,CAAA;AAAA,MACA,KAAA,EAAO;AAAA;AACR,GACD;AACD;AAEA,SAAS,WAAW,GAAA,EAA6B;AAChD,EAAA,IAAI,GAAA,CAAI,IAAA,KAAS,MAAA,EAAQ,OAAO,OAAA,CAAQ,CAAA,EAAG,GAAA,CAAI,KAAK,CAAA,CAAA,EAAI,GAAA,CAAI,EAAE,CAAA,CAAE,CAAA;AAChE,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,SAAA,IAAa,GAAA,CAAI,KAAA;AAClC,EAAA,OAAO,OAAA,CAAQ,GAAG,GAAA,CAAI,KAAK,IAAI,IAAI,CAAA,CAAA,EAAI,GAAA,CAAI,EAAE,CAAA,CAAE,CAAA;AAChD;AAEA,IAAM,YAAA,GAAe,CAAC,QAAA,KACrB,QAAA,IAAY,OAAA;AAEb,IAAM,cAAA,GAAiB,CAAC,MAAA,KACvB,IAAA,CAAK,UAAU,MAAA,EAAQ,CAAC,MAAM,KAAA,KAAU;AACvC,EAAA,IAAI,KAAA,YAAiB,IAAA,EAAM,OAAO,KAAA,CAAM,WAAA,EAAY;AACpD,EAAA,IAAI,KAAA,YAAiBA,kBAAAA,EAAU,OAAO,gBAAA,CAAiB,KAAK,CAAA;AAC5D,EAAA,IAAI,OAAO,KAAA,KAAU,UAAA,EAAY,OAAO,MAAA;AACxC,EAAA,IACC,SACA,OAAO,KAAA,KAAU,YACjB,OAAA,IAAY,KAAA,IACZ,QAAS,KAAA,EACR;AACD,IAAA,IAAI;AACH,MAAA,OAAO,gBAAA,CAAiB,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACtC,CAAA,CAAA,MAAQ;AACP,MAAA,OAAO,KAAA;AAAA,IACR;AAAA,EACD;AACA,EAAA,OAAO,KAAA;AACR,CAAC,CAAA;AASF,SAAS,+BACR,MAAA,EACoC;AACpC,EAAA,MAAM;AAAA,IACL,EAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA,EAAU;AAAA,GACX,GAAI,MAAA;AAEJ,EAAA,IAAI,CAAC,WAAA,IAAe,CAAC,QAAA,EAAU;AAC9B,IAAA,MAAM,IAAI,MAAM,wCAAwC,CAAA;AAAA,EACzD;AAEA,EAAA,MAAM,QAAA,GAAW,aAAa,aAAa,CAAA;AAC3C,EAAA,MAAM,cAAA,GACL,QAAA,KAAa,WAAA,IAAe,QAAA,KAAa,aAAA;AAC1C,EAAA,MAAM,mBAAmB,QAAA,KAAa,WAAA;AACtC,EAAA,MAAM,mBAAA,GAA6C,iBAChD,WAAA,GACA,OAAA;AACH,EAAA,MAAM,YAAA,GAAe,eAAe,KAAK,CAAA;AACzC,EAAA,MAAM,YAAY,YAAA,CAAa,IAAA;AAC/B,EAAA,MAAM,aAAA,GAAgB,gBAAgB,KAAK,CAAA;AAC3C,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAyB;AAC/C,EAAA,MAAM,iBAAA,uBAAwB,GAAA,EAAY;AAE1C,EAAA,MAAM,WAAA,GAAc,MAAM,OAAA,KAAY,IAAA;AACtC,EAAA,MAAM,WAAA,GAAc,MAAM,OAAA,KAAY,IAAA;AACtC,EAAA,MAAM,kBAAA,GAAqB,WAAA,GACxB,iBAAA,CAAqB,IAAA,CAAK,OAAO,CAAA,GACjC,MAAA;AACH,EAAA,MAAM,eAAA,GACL,IAAA,EAAM,WAAA,IAAe,kBAAA,EAAoB,WAAA;AAC1C,EAAA,MAAM,oBAAA,GACL,IAAA,EAAM,gBAAA,IAAoB,kBAAA,EAAoB,gBAAA;AAC/C,EAAA,IAAI,WAAA,KAAgB,CAAC,eAAA,IAAmB,CAAC,oBAAA,CAAA,EAAuB;AAC/D,IAAA,MAAM,IAAI,KAAA;AAAA,MACT;AAAA,KACD;AAAA,EACD;AAEA,EAAA,MAAM,WAAA,GAAc,WAAA,CAAe,EAAA,EAAI,YAAY,CAAA;AACnD,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAqB;AAEtC,EAAA,MAAM,SAAS,CAAC,GAAA,KAAA,CACd,IAAA,EAAM,GAAA,IAAO,YAAY,GAAG,CAAA;AAE9B,EAAA,MAAM,MAAA,GAAS,CAAC,GAAA,KAAmC,gBAAA,CAAiB,IAAI,EAAE,CAAA;AAC1E,EAAA,MAAM,mBAAA,GAAsB,CAAC,EAAA,KAC5B,UAAA,CAAW,WAAW,EAAE,CAAA;AAEzB,EAAA,MAAM,YAAA,GAAe,CAAC,GAAA,KAAc;AACnC,IAAA,MAAM,UAAA,GAAa,+BAA+B,GAAG,CAAA;AACrD,IAAA,OAAO;AAAA,MACN,GAAG,UAAA;AAAA,MACH,EAAA,EAAI,mBAAA,CAAoB,UAAA,CAAW,EAAE;AAAA,KACtC;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,OAAO,GAAA,KAA6C;AACzE,IAAA,IAAI,CAAC,WAAA,EAAa;AACjB,MAAA,OAAO,aAAa,GAAQ,CAAA;AAAA,IAC7B;AAEA,IAAA,MAAM,QAAA,GAAW,WAAW,GAAG,CAAA;AAC/B,IAAA,IAAI,CAAC,QAAA,EAAU,OAAO,YAAA,CAAa,GAAQ,CAAA;AAC3C,IAAA,MAAM,EAAA,GAAK,iBAAA,CAAkB,GAAA,CAAI,EAAuB,CAAA;AACxD,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ;AAAA,MACvC,QAAA;AAAA,MACA,GAAA,EAAK,OAAO,EAAE,KAAA,EAAO,WAAW,EAAA,EAAI,IAAA,EAAM,QAAQ;AAAA,KAClD,CAAA;AACD,IAAA,MAAM,OAAA,GAAU,SAAA,CAAmC,KAAA,EAAO,IAAI,CAAA;AAC9D,IAAA,MAAM,MAAA,GAAS;AAAA,MACd,GAAG,oBAAoB,GAAG,CAAA;AAAA,MAC1B,GAAI,OAAA;AAAA,MACJ,EAAA,EAAI,mBAAA,CAAoB,GAAA,CAAI,EAAuB;AAAA,KACpD;AACA,IAAA,OAAO,aAAa,MAAM,CAAA;AAAA,EAC3B,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,OACrB,GAAA,EACA,EAAA,KACsC;AACtC,IAAA,IAAI,CAAC,aAAa,OAAO,GAAA;AACzB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ;AAAA,MAC1C,SAAA,EAAW,QAAQ,GAAG,CAAA;AAAA,MACtB,GAAA,EAAK,OAAO,EAAE,KAAA,EAAO,WAAW,EAAA,EAAI,IAAA,EAAM,QAAQ;AAAA,KAClD,CAAA;AACD,IAAA,OAAO,iBAAiB,QAAQ,CAAA;AAAA,EACjC,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,WAAA,GACtB,WAAA,CAAY,IAAA,CAAK,YAAY,CAAA,GAC7B,MAAA;AACH,EAAA,MAAM,YAAA,GAAe,WAAA,GAClB,eAAA,CAAgB,IAAA,CAAK,YAAY,CAAA,GACjC,MAAA;AACH,EAAA,MAAM,qBACL,WAAA,IAAe,IAAA,CAAK,iBACjB,WAAA,CAAY,IAAA,CAAK,cAAc,CAAA,GAC/B,MAAA;AACJ,EACC,WAAA,IAAe,IAAA,CAAK,iBACjB,eAAA,CAAgB,IAAA,CAAK,cAAc,CAAA,GACnC;AAEJ,EAAA,MAAM,MAAA,GAAS,CAAC,EAAA,KAAwB;AACvC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA;AAC5B,IAAA,IAAI,UAAU,OAAO,QAAA;AACrB,IAAA,MAAM,GAAA,GAAM,IAAIO,gBAAA,EAAQ;AACxB,IAAA,IAAA,CAAK,GAAA,CAAI,IAAI,GAAG,CAAA;AAChB,IAAA,OAAO,GAAA;AAAA,EACR,CAAA;AAEA,EAAA,MAAM,SAAS,CAAC,EAAA,KAAyB,IAAIP,kBAAAA,CAAS,WAAW,EAAE,CAAA;AACnE,EAAA,MAAM,YAAA,GAAe,CAAC,GAAA,KACrB,iBAAA,CAAkB,GAAG,CAAA;AAEtB,EAAA,MAAM,YAAA,GAAe,CACpB,EAAA,EACA,MAAA,KACwB;AACxB,IAAA,IAAI,CAAC,aAAa,OAAO,MAAA;AACzB,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,YAAA;AACrC,IAAA,IAAI,OAAO,cAAc,UAAA,EAAY;AACpC,MAAA,OAAO,SAAA,CAAU,EAAE,EAAA,EAAI,MAAA,EAAQ,CAAA;AAAA,IAChC;AACA,IAAA,OAAO,SAAA;AAAA,EACR,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,OACzB,GAAA,EACA,IAAA,KACyB;AACzB,IAAA,IAAI,CAAC,WAAA,EAAa;AACjB,MAAA,IAAI,SAAS,UAAA,EAAY;AACxB,QAAA,MAAM,WAAW,GAAA,CAAI,cAAA;AACrB,QAAA,IAAI,CAAC,QAAA,EAAU,OAAO,IAAI,UAAA,EAAW;AACrC,QAAA,OAAO,WAAW,QAAQ,CAAA;AAAA,MAC3B;AACA,MAAA,MAAM,SAAS,GAAA,CAAI,YAAA;AACnB,MAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,IAAI,UAAA,EAAW;AACnC,MAAA,OAAO,WAAW,MAAM,CAAA;AAAA,IACzB;AACA,IAAA,MAAM,QAAA,GAAW,WAAW,GAAyC,CAAA;AACrE,IAAA,IAAI,CAAC,QAAA,EAAU,OAAO,IAAI,UAAA,EAAW;AACrC,IAAA,MAAM,EAAA,GAAK,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AAC/B,IAAA,OAAO,IAAA,CAAK,OAAO,OAAA,CAAQ;AAAA,MAC1B,QAAA;AAAA,MACA,KAAK,MAAA,CAAO;AAAA,QACX,KAAA,EACC,IAAA,KAAS,UAAA,GACL,kBAAA,IAAsB,YACtB,gBAAA,IAAoB,SAAA;AAAA,QACzB,SAAA,EAAW,SAAA;AAAA,QACX,EAAA;AAAA,QACA;AAAA,OACA;AAAA,KACD,CAAA;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,mBAAA,GAAsB,OAC3B,KAAA,EACA,EAAA,EACA,IAAA,KACsC;AACtC,IAAA,IAAI,CAAC,WAAA,EAAa;AAEjB,MAAA,OAAO,EAAE,YAAA,EAAc,QAAA,CAAS,KAAK,CAAA,EAAE;AAAA,IACxC;AAEA,IAAA,MAAM,WAAA,GACsC,gBAAA;AAC5C,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ;AAAA,MAC1C,SAAA,EAAW,KAAA;AAAA,MACX,KAAK,MAAA,CAAO;AAAA,QACX,OAAO,WAAA,IAAe,SAAA;AAAA,QACtB,SAAA,EAAW,SAAA;AAAA,QACX,EAAA;AAAA,QACA;AAAA,OACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,iBAAiB,QAAQ,CAAA;AAAA,EACjC,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,OACzB,EAAA,EACA,KAAA,EACA,MAAA,KACI;AACJ,IAAA,IAAI,CAAC,WAAA,IAAe,CAAC,YAAA,EAAc;AACnC,IAAA,MAAM,OAAA,GAAU,MAAM,mBAAA,CAAoB,KAAA,EAAO,IAAI,QAAQ,CAAA;AAC7D,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,EAAA,EAAI,MAAM,CAAA;AACrC,IAAA,MAAM,GAAA,GAAM;AAAA,MACX,GAAA,EAAK,OAAO,EAAE,CAAA;AAAA,MACd,EAAA,EAAA,iBAAI,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,MAC3B,GAAI,KAAA,GAAQ,EAAE,KAAA,KAAU,EAAC;AAAA,MACzB,GAAG;AAAA,KACJ;AACA,IAAA,MAAM,EAAA,CAAG,MAAA,CAAO,YAAY,CAAA,CAAE,QAAQ,GAAG,CAAA;AAAA,EAC1C,CAAA;AAEA,EAAA,MAAM,mBAAA,GAAsB,OAAO,YAAA,KAAoB;AACtD,IAAA,IAAI,CAAC,WAAA,IAAe,IAAA,CAAK,uBAAA,KAA4B,IAAA,EAAM;AAC3D,IAAA,MAAM,EAAA,GAAK,iBAAA,CAAkB,YAAA,CAAa,EAAE,CAAA;AAC5C,IAAA,IAAI,CAAC,WAAA,EAAa;AACjB,MAAA,MAAM,EAAE,EAAA,EAAI,UAAA,EAAY,GAAG,MAAK,GAAI,YAAA;AAIpC,MAAA,MAAM,EAAA,CAAG,OAAO,mBAAA,CAAoB,YAAA,CAAa,EAAE,CAAC,CAAA,CAAE,MAAM,IAAI,CAAA;AAChE,MAAA;AAAA,IACD;AAEA,IAAA,MAAM,UAAU,MAAM,aAAA;AAAA,MACrB,aAAA,CAAc;AAAA,QACb,GAAI,YAAA;AAAA,QACJ,EAAA,EAAI;AAAA,OACJ,CAAA;AAAA,MACD;AAAA,KACD;AACA,IAAA,MAAM,EAAA,CAAG,OAAO,mBAAA,CAAoB,YAAA,CAAa,EAAE,CAAC,CAAA,CAAE,MAAM,OAAO,CAAA;AAAA,EACpE,CAAA;AAEA,EAAA,MAAM,mBAAmB,OACxB,IAAA,EACA,OAKA,KAAA,EACA,MAAA,EACA,OAA4B,QAAA,KACxB;AACJ,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAClB,IAAA,KAAA,EAAM;AACN,IAAA,IAAI;AACH,MAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACvB,QAAA,MAAM,OAAA,GAAU,MAAM,aAAA,CAAc,GAAG,CAAA;AACvC,QAAA,KAAA,CAAM,EAAE,IAAA,EAAM,KAAA,EAAO,OAAA,EAAS,CAAA;AAAA,MAC/B;AAAA,IACD,CAAA,SAAE;AACD,MAAA,MAAA,EAAO;AAAA,IACR;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,iBAAiB,OACtB,EAAA,EACA,OAKA,KAAA,EACA,MAAA,EACA,YAAiC,QAAA,KAC7B;AACJ,IAAA,IAAI,CAAC,WAAA,IAAe,CAAC,gBAAA,EAAkB;AACvC,IAAA,MAAM,GAAA,GAAM,OAAO,EAAE,CAAA;AACrB,IAAA,IAAI,KAAA;AAEJ,IAAA,IAAI,kBAAA,EAAoB;AACvB,MAAA,MAAM,YAAY,MAAM,SAAA;AAAA,QACvB,EAAA;AAAA,QACA,CAAA,4EAAA,CAAA;AAAA,QACA;AAAA,UACC,KAAA,EAAO,kBAAA;AAAA,UACP,GAAA,EAAK,OAAO,EAAE;AAAA;AACf,OACD;AACA,MAAA,MAAM,QAAA,GAAW,UAAU,CAAC,CAAA;AAC5B,MAAA,IAAI,QAAA,EAAU;AACb,QAAA,MAAM,KAAA,GAAQ,MAAM,iBAAA,CAAkB,QAAA,EAAU,UAAU,CAAA;AAC1D,QAAA,IAAI,KAAA,CAAM,UAAA,EAAY,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA;AACtC,QAAA,KAAA,GACC,OAAO,QAAA,CAAS,EAAA,KAAO,QAAA,GACpB,QAAA,CAAS,EAAA,GACT,QAAA,CAAS,EAAA,YAAc,IAAA,GACtB,QAAA,CAAS,EAAA,CAAG,WAAA,EAAY,GACxB,MAAA;AAAA,MACN;AAAA,IACD;AAEA,IAAA,MAAM,UAAU,MAAM,SAAA;AAAA,MACrB,EAAA;AAAA,MACA,QACG,CAAA,mFAAA,CAAA,GACA,CAAA,mEAAA,CAAA;AAAA,MACH;AAAA,QACC,KAAA,EAAO,gBAAA;AAAA,QACP,GAAA,EAAK,OAAO,EAAE,CAAA;AAAA,QACd;AAAA;AACD,KACD;AAEA,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC7B,MAAA,MAAM,KAAA,GAAQ,MAAM,iBAAA,CAAkB,MAAA,EAAQ,QAAQ,CAAA;AACtD,MAAA,IAAI,CAAC,MAAM,UAAA,EAAY;AACvB,MAAA,GAAA,CAAI,OAAO,KAAK,CAAA;AAAA,IACjB;AAEA,IAAA,MAAM,YAAA,GAAe,YAAA,CAAa,eAAA,CAAgB,GAAA,EAAK,EAAE,CAAC,CAAA;AAC1D,IAAA,KAAA,EAAM;AACN,IAAA,IAAI;AACH,MAAA,KAAA,CAAM,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,cAAc,CAAA;AAAA,IAC/C,CAAA,SAAE;AACD,MAAA,MAAA,EAAO;AAAA,IACR;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,0BAA0B,MAAM;AACrC,IAAA,iBAAA,CAAkB,KAAA,EAAM;AACxB,IAAA,KAAA,MAAW,GAAA,IAAO,SAAA,CAAU,MAAA,EAAO,EAAG;AACrC,MAAA,KAAA,MAAW,EAAA,IAAM,GAAA,EAAK,iBAAA,CAAkB,GAAA,CAAI,EAAE,CAAA;AAAA,IAC/C;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CACzB,GAAA,KACwB;AACxB,IAAA,IAAI,eAAA,GAA2B,IAAA;AAC/B,IAAA,IAAI,iBAAA,GAA6B,IAAA;AACjC,IAAA,IAAI,MAAA,GAAS,KAAA;AAEb,IAAA,MAAM,iBAAiB,YAAY;AAClC,MAAA,IAAI,oBAAoB,IAAA,EAAM;AAC9B,MAAA,IAAI,CAAC,EAAA,CAAG,kBAAA,GAAqBK,kBAAAA,CAAS,WAAW,CAAA,EAAG;AACpD,MAAA,MAAM,IAAA,GAAQ,MAAM,EAAA,CAAG,IAAA;AAAA,QACtB;AAAA,OACD;AACA,MAAA,IAAI,MAAA,EAAQ;AACX,QAAA,MAAM,KAAK,IAAA,EAAK;AAChB,QAAA;AAAA,MACD;AACA,MAAA,IAAA,CAAK,SAAA,CAAU,OAAO,OAAA,KAAY;AACjC,QAAA,IAAI,OAAA,CAAQ,WAAW,QAAA,EAAU;AACjC,QAAA,MAAM,MAAM,OAAA,CAAQ,KAAA;AACpB,QAAA,MAAM,EAAA,GAAK,iBAAA,CAAkB,GAAA,CAAI,EAAuB,CAAA;AAExD,QAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,GAAA,CAAI,EAAE,CAAA;AAC3C,QAAA,IACC,gBAAA,IACA,CAAC,UAAA,IACD,OAAA,CAAQ,MAAA,KAAW,QAAA;AAEnB,UAAA;AAED,QAAA,IAAI,OAAA,CAAQ,WAAW,QAAA,EAAU;AAChC,UAAA,KAAA,MAAW,OAAO,SAAA,CAAU,MAAA,EAAO,EAAG,GAAA,CAAI,OAAO,EAAE,CAAA;AACnD,UAAA,uBAAA,EAAwB;AACxB,UAAA,IAAI,gBAAA,IAAoB,CAAC,UAAA,EAAY;AACrC,UAAA,GAAA,CAAI,KAAA,EAAM;AACV,UAAA,IAAI;AACH,YAAA,GAAA,CAAI,KAAA,CAAM;AAAA,cACT,IAAA,EAAM,QAAA;AAAA,cACN,GAAA,EAAK,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,EAAE,CAAA;AAAA,aACvB,CAAA;AAAA,UACF,CAAA,SAAE;AACD,YAAA,GAAA,CAAI,MAAA,EAAO;AAAA,UACZ;AACA,UAAA;AAAA,QACD;AAEA,QAAA,MAAM,OAAA,GAAU,MAAM,aAAA,CAAc,GAAG,CAAA;AACvC,QAAA,GAAA,CAAI,KAAA,EAAM;AACV,QAAA,IAAI;AACH,UAAA,GAAA,CAAI,KAAA,CAAM;AAAA,YACT,IAAA,EAAM,OAAA,CAAQ,MAAA,KAAW,QAAA,GAAW,QAAA,GAAW,QAAA;AAAA,YAC/C,KAAA,EAAO;AAAA,WACP,CAAA;AAAA,QACF,CAAA,SAAE;AACD,UAAA,GAAA,CAAI,MAAA,EAAO;AAAA,QACZ;AAAA,MACD,CAAC,CAAA;AACD,MAAA,eAAA,GAAkB,MAAM;AACvB,QAAA,KAAK,IAAA,CAAK,IAAA,EAAK,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AACtC,QAAA,eAAA,GAAkB,IAAA;AAAA,MACnB,CAAA;AAAA,IACD,CAAA;AAEA,IAAA,MAAM,mBAAmB,YAAY;AACpC,MAAA,IAAI,CAAC,WAAA,IAAe,CAAC,YAAA,EAAc;AACnC,MAAA,IAAI,sBAAsB,IAAA,EAAM;AAChC,MAAA,IAAI,CAAC,EAAA,CAAG,kBAAA,GAAqBA,kBAAAA,CAAS,WAAW,CAAA,EAAG;AAEpD,MAAA,MAAM,IAAA,GAAQ,MAAM,EAAA,CAAG,IAAA;AAAA,QACtB;AAAA,OACD;AACA,MAAA,IAAI,MAAA,EAAQ;AACX,QAAA,MAAM,KAAK,IAAA,EAAK;AAChB,QAAA;AAAA,MACD;AAEA,MAAA,IAAA,CAAK,SAAA,CAAU,OAAO,OAAA,KAAY;AACjC,QAAA,IAAI,OAAA,CAAQ,WAAW,QAAA,EAAU;AACjC,QAAA,IAAI,OAAA,CAAQ,WAAW,QAAA,EAAU;AAEjC,QAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AACtB,QAAA,MAAM,EAAA,GAAK,YAAA,CAAa,KAAA,CAAM,GAAG,CAAA;AAEjC,QAAA,IAAI,MAAM,KAAA,IAAS,KAAA,CAAM,KAAA,KAAU,YAAA,CAAa,EAAE,CAAA,EAAG;AAErD,QAAA,IAAI,gBAAA,IAAoB,CAAC,iBAAA,CAAkB,GAAA,CAAI,EAAE,CAAA,EAAG;AAEpD,QAAA,MAAM,GAAA,GAAM,OAAO,EAAE,CAAA;AACrB,QAAA,MAAM,KAAA,GAAQ,MAAM,iBAAA,CAAkB,KAAA,EAAO,QAAQ,CAAA;AACrD,QAAA,IAAI,CAAC,MAAM,UAAA,EAAY;AACvB,QAAA,GAAA,CAAI,OAAO,KAAK,CAAA;AAChB,QAAA,MAAM,YAAA,GAAe,YAAA,CAAa,eAAA,CAAgB,GAAA,EAAK,EAAE,CAAC,CAAA;AAC1D,QAAA,GAAA,CAAI,KAAA,EAAM;AACV,QAAA,IAAI;AACH,UAAA,GAAA,CAAI,MAAM,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,cAAc,CAAA;AAAA,QAClD,CAAA,SAAE;AACD,UAAA,GAAA,CAAI,MAAA,EAAO;AAAA,QACZ;AAAA,MACD,CAAC,CAAA;AAED,MAAA,iBAAA,GAAoB,MAAM;AACzB,QAAA,KAAK,IAAA,CAAK,IAAA,EAAK,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AACtC,QAAA,iBAAA,GAAoB,IAAA;AAAA,MACrB,CAAA;AAAA,IACD,CAAA;AAEA,IAAA,MAAM,UAAA,GAAa,OAAO,MAAA,KAA8B;AACvD,MAAA,IAAI,CAAC,cAAA,EAAgB;AACrB,MAAA,MAAM,GAAA,GAAM,eAAe,MAAM,CAAA;AACjC,MAAA,MAAM,IAAA,GAAO,MAAM,WAAA,CAAY,UAAA,CAAW,MAAM,CAAA;AAChD,MAAA,MAAM,MAAM,IAAI,GAAA;AAAA,QACd,IAAA,CAAmD,GAAA;AAAA,UAAI,CAAC,GAAA,KACxD,iBAAA,CAAkB,GAAA,CAAI,EAAuB;AAAA;AAC9C,OACD;AACA,MAAA,SAAA,CAAU,GAAA,CAAI,KAAK,GAAG,CAAA;AACtB,MAAA,uBAAA,EAAwB;AAExB,MAAA,IAAI,CAAC,WAAA,EAAa;AACjB,QAAA,MAAM,gBAAA;AAAA,UACL,IAAA;AAAA,UACA,GAAA,CAAI,KAAA;AAAA,UACJ,GAAA,CAAI,KAAA;AAAA,UACJ,GAAA,CAAI,MAAA;AAAA,UACJ;AAAA,SACD;AACA,QAAA,MAAM,cAAA,EAAe;AACrB,QAAA;AAAA,MACD;AAEA,MAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACrB,QAAA,MAAM,cAAA;AAAA,UACL,EAAA;AAAA,UACA,GAAA,CAAI,KAAA;AAAA,UACJ,GAAA,CAAI,KAAA;AAAA,UACJ,GAAA,CAAI,MAAA;AAAA,UACJ;AAAA,SACD;AAAA,MACD;AACA,MAAA,MAAM,gBAAA,EAAiB;AAAA,IACxB,CAAA;AAEA,IAAA,MAAM,YAAA,GAAe,CAAC,MAAA,KAA8B;AACnD,MAAA,IAAI,CAAC,cAAA,EAAgB;AACrB,MAAA,MAAM,GAAA,GAAM,eAAe,MAAM,CAAA;AACjC,MAAA,SAAA,CAAU,OAAO,GAAG,CAAA;AACpB,MAAA,uBAAA,EAAwB;AACxB,MAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACzB,QAAA,eAAA,EAAgB;AAChB,QAAA,iBAAA,EAAkB;AAAA,MACnB;AAAA,IACD,CAAA;AAEA,IAAA,MAAM,gBAAgB,YAAY;AACjC,MAAA,IAAI,CAAC,WAAA,EAAa;AACjB,QAAA,MAAM,cAAA,EAAe;AACrB,QAAA;AAAA,MACD;AACA,MAAA,MAAM,gBAAA,EAAiB;AAAA,IACxB,CAAA;AAEA,IAAA,MAAM,UAAU,MAAM;AACrB,MAAA,MAAA,GAAS,IAAA;AACT,MAAA,SAAA,CAAU,KAAA,EAAM;AAChB,MAAA,uBAAA,EAAwB;AACxB,MAAA,eAAA,EAAgB;AAChB,MAAA,iBAAA,EAAkB;AAAA,IACnB,CAAA;AAEA,IAAA,OAAO;AAAA,MACN,aAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACD;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,OAAOG,wCAAA,CAAuB;AAAA,IACnC,MAAA,EAAQ,mBAAsB,SAAS,CAAA;AAAA,IACvC,MAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA,EAAU,mBAAA;AAAA,IACV,OAAA,EAAS,OAAO,EAAE,IAAA,EAAK,KAAM;AAC5B,MAAA,IAAI;AACH,QAAA,IAAI,cAAA,IAAkB,CAAC,IAAA,EAAM,iBAAA,EAAmB;AAC/C,UAAA,OAAO,EAAC;AAAA,QACT;AAEA,QAAA,IAAI,CAAC,WAAA,EAAa;AACjB,UAAA,IAAI,CAAC,cAAA,EAAgB;AACpB,YAAA,MAAMC,QAAO,MAAM,aAAA;AAAA,cAClB,MAAM,EAAA,CAAG,MAAA,CAAO,aAAa;AAAA,aAC9B;AACA,YAAA,MAAMC,QAAAA,GAAU,MAAM,OAAA,CAAQ,GAAA;AAAA,cAC7BD,KAAAA,CAAK,GAAA;AAAA,gBAAI,CAAC,GAAA,KACT,aAAA,CAAc,GAA8B;AAAA;AAC7C,aACD;AACA,YAAA,OAAOC,QAAAA;AAAA,UACR;AAEA,UAAA,MAAM,IAAA,GAAO,MAAM,WAAA,CAAY,UAAA;AAAA,YAC9B,IAAA,EAAM;AAAA,WACP;AACA,UAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA;AAAA,YAC5B,IAAA,CAAmD,GAAA;AAAA,cACnD,CAAC,GAAA,KAAQ,aAAA,CAAc,GAAG;AAAA;AAC3B,WACD;AACA,UAAA,OAAO,OAAA;AAAA,QACR;AAEA,QAAA,IAAI,cAAA,SAAuB,EAAC;AAE5B,QAAA,IAAI,CAAC,gBAAA,EAAkB,OAAO,EAAC;AAC/B,QAAA,MAAM,UAAU,MAAM,SAAA;AAAA,UACrB,EAAA;AAAA,UACA,CAAA,kDAAA,CAAA;AAAA,UACA,EAAE,OAAO,gBAAA;AAAiB,SAC3B;AACA,QAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC7B,UAAA,MAAM,EAAA,GAAK,YAAA,CAAa,MAAA,CAAO,GAAG,CAAA;AAClC,UAAA,MAAM,GAAA,GAAM,OAAO,EAAE,CAAA;AACrB,UAAA,MAAM,KAAA,GAAQ,MAAM,iBAAA,CAAkB,MAAA,EAAQ,QAAQ,CAAA;AACtD,UAAA,IAAI,CAAC,MAAM,UAAA,EAAY;AACvB,UAAA,GAAA,CAAI,OAAO,KAAK,CAAA;AAAA,QACjB;AAEA,QAAA,OAAO,CAAC,GAAG,IAAA,CAAK,OAAA,EAAS,CAAA,CAAE,GAAA;AAAA,UAAI,CAAC,CAAC,EAAA,EAAI,GAAG,MACvC,YAAA,CAAa,eAAA,CAAgB,GAAA,EAAK,EAAE,CAAC;AAAA,SACtC;AAAA,MACD,SAAS,KAAA,EAAO;AACf,QAAA,OAAA,GAAU,KAAK,CAAA;AACf,QAAA,OAAO,EAAC;AAAA,MACT;AAAA,IACD,CAAA;AAAA,IACA,QAAA,GAAW,OAAO,MAAA,KAAsC;AACvD,MAAA,MAAM,MAAW,EAAC;AAClB,MAAA,MAAM,UAAA,GAAa,aAAA,CAAc,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA;AACxD,MAAA,KAAA,MAAW,QAAA,IAAY,MAAA,CAAO,WAAA,CAAY,SAAA,EAAW;AACpD,QAAA,IAAI,QAAA,CAAS,SAAS,QAAA,EAAU;AAEhC,QAAA,MAAM,UAAA,GAAa,YAAA,CAAa,QAAA,CAAS,QAAa,CAAA;AACtD,QAAA,IAAI,CAAC,WAAA,EAAa;AACjB,UAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,UAAA,CAAW,EAAE,CAAA;AAC7C,UAAA,MAAM,UAAU,aAAA,CAAc;AAAA,YAC7B,GAAI,UAAA;AAAA,YACJ,EAAA,EAAI;AAAA,WACJ,CAAA;AACD,UAAA,MAAM,aAAA,GAAgB,MAAM,aAAA,CAAc,OAAA,EAAS,KAAK,CAAA;AAExD,UAAA,IAAI,QAAA,CAAS,UAAA,CAAW,EAAA,EAAI,SAAS,CAAA,EAAG;AACvC,YAAA,MAAM,UAAU,MAAM,EAAA,CACpB,OAAO,aAAa,CAAA,CACpB,QAAQ,aAAa,CAAA;AACvB,YAAA,MAAM,UAAA,GAAaJ,SAAAA;AAAA,cAClB,cAAc,OAA6B;AAAA,aAC5C;AACA,YAAA,MAAM,YACL,UAAA,IACC,UAAA,CAAuC,EAAA,GACnC,UAAA,CAAuC,KAGzC,UAAA,CAAW,EAAA;AACf,YAAA,MAAM,QAAA,GAAW;AAAA,cAChB,GAAG,UAAA;AAAA,cACH,EAAA,EAAI,oBAAoB,SAAS;AAAA,aAClC;AACA,YAAA,GAAA,CAAI,KAAK,QAAQ,CAAA;AACjB,YAAA,UAAA,CAAW,cAAc,QAAQ,CAAA;AACjC,YAAA;AAAA,UACD;AAEA,UAAA,MAAM,EAAA,CAAG,OAAO,aAAA,EAAe;AAAA,YAC9B,EAAA,EAAI,mBAAA,CAAoB,UAAA,CAAW,EAAE,CAAA;AAAA,YACrC,GAAG;AAAA,WACH,CAAA;AACD,UAAA,GAAA,CAAI,KAAK,UAAU,CAAA;AACnB,UAAA,UAAA,CAAW,cAAc,UAAU,CAAA;AACnC,UAAA;AAAA,QACD;AAEA,QAAA,MAAM,EAAA,GAAK,iBAAA,CAAkB,UAAA,CAAW,EAAE,CAAA;AAC1C,QAAA,MAAM,GAAA,GAAM,OAAO,EAAE,CAAA;AACrB,QAAA,MAAM,EAAA,GAAK,IAAI,YAAA,EAAa;AAC5B,QAAA,MAAM,WAAA,GAA8B;AAAA,UACnC,IAAA,EAAM,QAAA;AAAA,UACN,KAAA,EAAO;AAAA,SACR;AACA,QAAA,oBAAA,CAAqB,KAAK,WAAW,CAAA;AACrC,QAAA,MAAM,KAAA,GAAQ,IAAI,MAAA,CAAO,EAAE,MAAM,QAAA,EAAU,IAAA,EAAM,IAAI,CAAA;AACrD,QAAA,MAAM,iBAAA,CAAkB,EAAA,EAAI,KAAA,EAAO,WAAW,CAAA;AAC9C,QAAA,MAAM,YAAA,GAAe,YAAA,CAAa,eAAA,CAAgB,GAAA,EAAK,EAAE,CAAC,CAAA;AAC1D,QAAA,MAAM,oBAAoB,YAAY,CAAA;AACtC,QAAA,GAAA,CAAI,KAAK,YAAY,CAAA;AACrB,QAAA,UAAA,CAAW,cAAc,YAAY,CAAA;AAAA,MACtC;AAEA,MAAA,OAAO,GAAA;AAAA,IACR,CAAA,CAAA;AAAA,IACA,QAAA,GAAW,OAAO,MAAA,KAAsC;AACvD,MAAA,MAAM,UAAA,GAAa,aAAA,CAAc,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA;AACxD,MAAA,KAAA,MAAW,QAAA,IAAY,MAAA,CAAO,WAAA,CAAY,SAAA,EAAW;AACpD,QAAA,IAAI,QAAA,CAAS,SAAS,QAAA,EAAU;AAChC,QAAA,MAAM,UAAA,GAAa,mBAAA;AAAA,UAClB,QAAA,CAAS;AAAA,SACV;AACA,QAAA,MAAM,kBAAA,GAAqB,aAAA;AAAA,UAC1B,2BAAA,CAA4B;AAAA,YAC3B,GAAI,QAAA,CAAS;AAAA,WACb;AAAA,SACF;AACA,QAAA,MAAM,aAAa,YAAA,CAAa;AAAA,UAC/B,GAAI,kBAAA;AAAA,UACJ,EAAA,EAAI;AAAA,SACC,CAAA;AAEN,QAAA,IAAI,CAAC,WAAA,EAAa;AACjB,UAAA,IAAI,CAAC,WAAA,EAAa;AACjB,YAAA,MAAM,EAAA,CAAG,MAAA,CAAO,UAAU,CAAA,CAAE,MAAM,kBAAkB,CAAA;AACpD,YAAA,UAAA,CAAW,cAAc,UAAU,CAAA;AACnC,YAAA;AAAA,UACD;AAEA,UAAA,MAAM,OAAA,GAAU,MAAM,EAAA,CAAG,MAAA,CAAO,UAAU,CAAA;AAC1C,UAAA,MAAM,WAAA,GAAc,aAAA;AAAA,YACnB;AAAA,WAGD;AACA,UAAA,MAAM,UAAA,GAAa,YAAY,CAAC,CAAA;AAChC,UAAA,MAAM,cAAA,GAAiB,aACpB,MAAM,aAAA,CAAc,UAAU,CAAA,GAC7B,EAAE,IAAI,UAAA,EAAW;AACrB,UAAA,MAAM,MAAA,GAAS;AAAA,YACd,GAAI,cAAA;AAAA,YACJ,GAAI;AAAA,WACL;AACA,UAAA,OAAO,MAAA,CAAO,EAAA;AACd,UAAA,MAAM,UAAU,MAAM,aAAA;AAAA,YACrB,cAAc,MAAM,CAAA;AAAA,YACpB,kBAAkB,UAAU;AAAA,WAC7B;AACA,UAAA,MAAM,EAAA,CAAG,MAAA,CAAO,UAAU,CAAA,CAAE,MAAM,OAAO,CAAA;AACzC,UAAA,UAAA,CAAW,WAAA;AAAA,YACV,aAAa,EAAE,GAAG,cAAA,EAAgB,GAAG,QAAa;AAAA,WACnD;AACA,UAAA;AAAA,QACD;AAEA,QAAA,MAAM,EAAA,GAAK,kBAAkB,UAAU,CAAA;AACvC,QAAA,MAAM,GAAA,GAAM,OAAO,EAAE,CAAA;AACrB,QAAA,MAAM,EAAA,GAAK,IAAI,YAAA,EAAa;AAC5B,QAAA,MAAM,WAAA,GAA8B;AAAA,UACnC,IAAA,EAAM,QAAA;AAAA,UACN,KAAA,EAAO;AAAA,SACR;AACA,QAAA,oBAAA,CAAqB,KAAK,WAAW,CAAA;AACrC,QAAA,MAAM,KAAA,GAAQ,IAAI,MAAA,CAAO,EAAE,MAAM,QAAA,EAAU,IAAA,EAAM,IAAI,CAAA;AACrD,QAAA,MAAM,iBAAA,CAAkB,EAAA,EAAI,KAAA,EAAO,WAAW,CAAA;AAC9C,QAAA,MAAM,YAAA,GAAe,YAAA,CAAa,eAAA,CAAgB,GAAA,EAAK,EAAE,CAAC,CAAA;AAC1D,QAAA,MAAM,oBAAoB,YAAY,CAAA;AACtC,QAAA,UAAA,CAAW,cAAc,YAAY,CAAA;AAAA,MACtC;AACA,MAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,IACzB,CAAA,CAAA;AAAA,IACA,QAAA,GAAW,OAAO,MAAA,KAAsC;AACvD,MAAA,MAAM,UAAA,GAAa,aAAA,CAAc,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA;AACxD,MAAA,KAAA,MAAW,QAAA,IAAY,MAAA,CAAO,WAAA,CAAY,SAAA,EAAW;AACpD,QAAA,IAAI,QAAA,CAAS,SAAS,QAAA,EAAU;AAChC,QAAA,MAAM,UAAA,GAAa,mBAAA;AAAA,UAClB,QAAA,CAAS;AAAA,SACV;AACA,QAAA,MAAM,EAAA,GAAK,kBAAkB,UAAU,CAAA;AACvC,QAAA,IAAI,CAAC,WAAA,EAAa;AACjB,UAAA,MAAM,EAAA,CAAG,OAAO,UAAU,CAAA;AAC1B,UAAA,UAAA,CAAW,WAAA,GAAc,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE,CAAA;AAC7C,UAAA;AAAA,QACD;AAEA,QAAA,MAAM,GAAA,GAAM,OAAO,EAAE,CAAA;AACrB,QAAA,MAAM,EAAA,GAAK,IAAI,YAAA,EAAa;AAC5B,QAAA,MAAM,WAAA,GAA8B;AAAA,UACnC,IAAA,EAAM,QAAA;AAAA,UACN,KAAA,EAAO,EAAE,EAAA,EAAI,UAAA;AAAW,SACzB;AACA,QAAA,oBAAA,CAAqB,KAAK,WAAW,CAAA;AACrC,QAAA,MAAM,KAAA,GAAQ,IAAI,MAAA,CAAO,EAAE,MAAM,QAAA,EAAU,IAAA,EAAM,IAAI,CAAA;AACrD,QAAA,MAAM,iBAAA,CAAkB,EAAA,EAAI,KAAA,EAAO,WAAW,CAAA;AAC9C,QAAA,UAAA,CAAW,WAAA,GAAc,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE,CAAA;AAAA,MAC9C;AACA,MAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,IACzB,CAAA;AAAA,GACS,CAAA;AAEV,EAAA,MAAM,QAAA,GAAW,KAAK,IAAA,EAAM,IAAA;AAC5B,EAAA,MAAM,OAAO,QAAA,GACV;AAAA,IACA,IAAA,EAAM,CAAC,GAAA,KAAqD;AAC3D,MAAA,MAAM,cAAA,GACL,OAAQ,GAAA,CAAI,UAAA,EAAiC,EAAA,KAC7C,UAAA;AACD,MAAA,MAAM,UAAA,GAAa,cAAA,GAChB,QAAA,CAAS,GAAG,CAAA,GACZ,MAAA;AACH,MAAA,MAAM,cACL,OAAO,UAAA,KAAe,UAAA,GACnB,UAAA,GACA,OAAO,UAAA,KAAe,QAAA,IACtB,UAAA,IACA,SAAA,IAAa,cACb,OACC,UAAA,CAGC,OAAA,KAAY,UAAA,GAEb,WAGC,OAAA,GACD,IAAA;AACL,MAAA,MAAM,OAAA,GAAU,iBAAA;AAAA,QACf;AAAA,OACD;AAEA,MAAA,MAAM,QAAQ,YAAY;AACzB,QAAA,IAAI,CAAC,cAAA,EAAgB;AACpB,UAAA,IAAI,CAAC,WAAA,EAAa;AACjB,YAAA,MAAM,IAAA,GAAO,aAAA;AAAA,cACZ,MAAM,EAAA,CAAG,MAAA,CAAO,aAAa;AAAA,aAC9B;AACA,YAAA,MAAM,gBAAA;AAAA,cACL,IAAA;AAAA,cACA,GAAA,CAAI,KAAA;AAAA,cACJ,GAAA,CAAI,KAAA;AAAA,cACJ,GAAA,CAAI,MAAA;AAAA,cACJ;AAAA,aACD;AACA,YAAA,MAAM,QAAQ,aAAA,EAAc;AAC5B,YAAA,GAAA,CAAI,SAAA,EAAU;AACd,YAAA;AAAA,UACD;AAEA,UAAA,IAAI,gBAAA,EAAkB;AACrB,YAAA,MAAM,UAAU,MAAM,SAAA;AAAA,cACrB,EAAA;AAAA,cACA,CAAA,kDAAA,CAAA;AAAA,cACA,EAAE,OAAO,gBAAA;AAAiB,aAC3B;AACA,YAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC7B,cAAA,MAAM,EAAA,GAAK,YAAA,CAAa,MAAA,CAAO,GAAG,CAAA;AAClC,cAAA,MAAM,GAAA,GAAM,OAAO,EAAE,CAAA;AACrB,cAAA,MAAM,QAAQ,MAAM,iBAAA;AAAA,gBACnB,MAAA;AAAA,gBACA;AAAA,eACD;AACA,cAAA,IAAI,CAAC,MAAM,UAAA,EAAY;AACvB,cAAA,GAAA,CAAI,OAAO,KAAK,CAAA;AAAA,YACjB;AACA,YAAA,GAAA,CAAI,KAAA,EAAM;AACV,YAAA,IAAI;AACH,cAAA,KAAA,MAAW,CAAC,EAAA,EAAI,GAAG,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACvC,gBAAA,GAAA,CAAI,KAAA,CAAM;AAAA,kBACT,IAAA,EAAM,QAAA;AAAA,kBACN,KAAA,EAAO,YAAA;AAAA,oBACN,eAAA,CAAgB,KAAK,EAAE;AAAA;AACxB,iBACA,CAAA;AAAA,cACF;AAAA,YACD,CAAA,SAAE;AACD,cAAA,GAAA,CAAI,MAAA,EAAO;AAAA,YACZ;AACA,YAAA,MAAM,QAAQ,aAAA,EAAc;AAAA,UAC7B;AACA,UAAA,GAAA,CAAI,SAAA,EAAU;AACd,UAAA;AAAA,QACD;AAEA,QAAA,GAAA,CAAI,SAAA,EAAU;AACd,QAAA,IAAI,aAAa,aAAA,EAAe;AAC/B,UAAA,KAAK,OAAA,CACH,UAAA,CAAW,EAAE,CAAA,CACb,MAAM,CAAC,KAAA,KAAU,OAAA,GAAU,KAAK,CAAC,CAAA;AAAA,QACpC;AAAA,MACD,CAAA;AAEA,MAAA,KAAK,OAAM,CAAE,KAAA,CAAM,CAAC,KAAA,KAAU,OAAA,GAAU,KAAK,CAAC,CAAA;AAE9C,MAAA,OAAO;AAAA,QACN,SAAS,MAAM;AACd,UAAA,OAAA,CAAQ,OAAA,EAAQ;AAChB,UAAA,WAAA,EAAY;AAAA,QACb,CAAA;AAAA,QACA,UAAA,EAAY,OAAO,MAAA,KAAW;AAC7B,UAAA,MAAM,OAAA,CAAQ,WAAW,MAAM,CAAA;AAAA,QAChC,CAAA;AAAA,QACA,YAAA,EAAc,CAAC,MAAA,KAAW;AACzB,UAAA,OAAA,CAAQ,aAAa,MAAM,CAAA;AAAA,QAC5B;AAAA,OACD;AAAA,IACD;AAAA,GACD,GACC,MAAA;AAEH,EAAA,OAAO;AAAA,IACN,GAAG,IAAA;AAAA,IACH,IAAA,EAAM,QAAQ,IAAA,CAAK;AAAA,GACpB;AACD;AAEO,SAAS,yBACf,MAAA,EASC;AACD,EAAA,OAAO,+BAA+B,MAAM,CAAA;AAC7C","file":"index.js","sourcesContent":["import type { LoroDoc } from 'loro-crdt';\nimport type { LocalChange } from './types';\nimport type { CRDTProfileAdapter } from './crdt/types';\n\nexport type LoroProfile = 'json' | 'richtext';\n\nconst toRecord = (value: unknown): Record<string, unknown> =>\n\ttypeof value === 'object' && value !== null\n\t\t? (value as Record<string, unknown>)\n\t\t: {};\n\nexport const materializeLoroJson = <T extends object>(\n\tdoc: LoroDoc,\n\tid: string,\n): T => {\n\tconst root = toRecord(doc.getMap('root').toJSON());\n\treturn {\n\t\tid,\n\t\t...root,\n\t} as unknown as T;\n};\n\nexport const applyLoroJsonChange = <T extends object>(\n\tdoc: LoroDoc,\n\tchange: LocalChange<T>,\n): void => {\n\tconst root = doc.getMap('root');\n\tif (change.type === 'delete') {\n\t\troot.set('deleted', true);\n\t\treturn;\n\t}\n\tconst value = toRecord(change.value);\n\tfor (const [key, fieldValue] of Object.entries(value)) {\n\t\tif (key === 'id') continue;\n\t\troot.set(key, fieldValue);\n\t}\n};\n\nexport const materializeLoroRichtext = <T extends object>(\n\tdoc: LoroDoc,\n\tid: string,\n): T => {\n\tconst metadata = toRecord(doc.getMap('root').toJSON());\n\tconst content = doc.getText('content').toString();\n\treturn {\n\t\tid,\n\t\tcontent,\n\t\t...metadata,\n\t} as unknown as T;\n};\n\nexport const applyLoroRichtextChange = <T extends object>(\n\tdoc: LoroDoc,\n\tchange: LocalChange<T>,\n): void => {\n\tconst text = doc.getText('content');\n\tconst metadata = doc.getMap('root');\n\tif (change.type === 'delete') {\n\t\tmetadata.set('deleted', true);\n\t\treturn;\n\t}\n\tconst value = toRecord(change.value);\n\tfor (const [key, fieldValue] of Object.entries(value)) {\n\t\tif (key === 'id') continue;\n\t\tif (key === 'content') {\n\t\t\tif (typeof fieldValue === 'string') text.update(fieldValue);\n\t\t\tcontinue;\n\t\t}\n\t\tmetadata.set(key, fieldValue);\n\t}\n};\n\nexport const createLoroProfile = <T extends object = Record<string, unknown>>(\n\tprofile: LoroProfile,\n): CRDTProfileAdapter<T> => {\n\tif (profile === 'richtext') {\n\t\treturn {\n\t\t\tmaterialize: materializeLoroRichtext as CRDTProfileAdapter<T>['materialize'],\n\t\t\tapplyLocalChange:\n\t\t\t\tapplyLoroRichtextChange as CRDTProfileAdapter<T>['applyLocalChange'],\n\t\t};\n\t}\n\n\treturn {\n\t\tmaterialize: materializeLoroJson as CRDTProfileAdapter<T>['materialize'],\n\t\tapplyLocalChange:\n\t\t\tapplyLoroJsonChange as CRDTProfileAdapter<T>['applyLocalChange'],\n\t};\n};\n","import { RecordId } from 'surrealdb';\n\nconst recordIdIdentityPool = new Map<string, unknown>();\nconst nativeRecordIdPool = new Map<string, RecordId>();\n\nconst internRecordIdIdentity = (\n\tcanonical: string,\n\tpreferred?: unknown,\n): unknown => {\n\tconst cached = recordIdIdentityPool.get(canonical);\n\tif (cached !== undefined) return cached;\n\tconst created = preferred ?? canonicalToNativeRecordId(canonical);\n\trecordIdIdentityPool.set(canonical, created);\n\treturn created;\n};\n\nconst getNativeRecordId = (canonical: string): RecordId => {\n\tconst cached = nativeRecordIdPool.get(canonical);\n\tif (cached) return cached;\n\tconst created = canonicalToNativeRecordId(canonical);\n\tnativeRecordIdPool.set(canonical, created);\n\treturn created;\n};\n\nconst canonicalToNativeRecordId = (canonical: string): RecordId => {\n\tconst idx = canonical.indexOf(':');\n\tconst table = canonical.slice(0, idx);\n\tconst key = canonical.slice(idx + 1);\n\treturn new RecordId(table, key);\n};\n\nexport const stripOuterQuotes = (value: string): string => {\n\tconst trimmed = value.trim();\n\tconst isSingleQuoted =\n\t\ttrimmed.startsWith(\"'\") && trimmed.endsWith(\"'\") && trimmed.length >= 2;\n\tconst isDoubleQuoted =\n\t\ttrimmed.startsWith('\"') && trimmed.endsWith('\"') && trimmed.length >= 2;\n\tconst isBacktickQuoted =\n\t\ttrimmed.startsWith('`') && trimmed.endsWith('`') && trimmed.length >= 2;\n\treturn isSingleQuoted || isDoubleQuoted || isBacktickQuoted\n\t\t? trimmed.slice(1, -1)\n\t\t: trimmed;\n};\n\nexport const toRecordIdString = (rid: RecordId | string): string => {\n\tconst raw =\n\t\ttypeof rid === 'string' ? stripOuterQuotes(rid) : rid.toString();\n\tconst trimmed = stripOuterQuotes(raw).trim();\n\tconst idx = trimmed.indexOf(':');\n\tif (idx <= 0 || idx >= trimmed.length - 1) return trimmed;\n\n\tconst table = trimmed.slice(0, idx).trim();\n\tconst key = stripOuterQuotes(\n\t\tstripAngleBrackets(stripOuterQuotes(trimmed.slice(idx + 1).trim())),\n\t);\n\tif (!table || !key) return trimmed;\n\treturn `${table}:${key}`;\n};\n\nconst stripAngleBrackets = (value: string): string => {\n\tconst trimmed = value.trim();\n\tconst isSurrealAngles =\n\t\ttrimmed.startsWith('⟨') && trimmed.endsWith('⟩') && trimmed.length >= 2;\n\tconst isAsciiAngles =\n\t\ttrimmed.startsWith('<') && trimmed.endsWith('>') && trimmed.length >= 2;\n\treturn isSurrealAngles || isAsciiAngles\n\t\t? trimmed.slice(1, -1).trim()\n\t\t: trimmed;\n};\n\nexport const toRecordKeyString = (rid: RecordId | string): string => {\n\tconst normalized = toRecordIdString(rid);\n\tconst idx = normalized.indexOf(':');\n\tconst rawKey = idx > 0 ? normalized.slice(idx + 1) : normalized;\n\treturn stripOuterQuotes(rawKey.trim());\n};\n\nconst isRecordIdString = (value: string): boolean => {\n\tconst idx = value.indexOf(':');\n\treturn idx > 0 && idx < value.length - 1;\n};\n\nconst looksLikeTableName = (value: string): boolean =>\n\t/^[A-Za-z_][A-Za-z0-9_-]*$/.test(value);\n\ntype SurrealRecordIdLike = {\n\ttable: unknown;\n\tid: unknown;\n\ttoString: () => unknown;\n\tconstructor?: { name?: string };\n};\n\nconst getCtorName = (value: unknown): string | undefined => {\n\tif (!value || typeof value !== 'object') return undefined;\n\tconst ctor = (value as { constructor?: { name?: unknown } }).constructor;\n\treturn typeof ctor?.name === 'string' ? ctor.name : undefined;\n};\n\nconst isCrossRuntimeRecordIdObject = (\n\tvalue: unknown,\n): value is SurrealRecordIdLike => {\n\tif (!value || typeof value !== 'object' || value instanceof RecordId) {\n\t\treturn false;\n\t}\n\tconst obj = value as Partial<SurrealRecordIdLike>;\n\tif (typeof obj.toString !== 'function') return false;\n\tif (!('table' in obj) || !('id' in obj)) return false;\n\tconst ctorName = getCtorName(value);\n\t// SurrealDB instances can be RecordId/RecordId2/etc across CJS/ESM bundles.\n\tif (!ctorName || !/^RecordId\\d*$/.test(ctorName)) return false;\n\n\tconst tableValue = obj.table;\n\tconst table =\n\t\ttypeof tableValue === 'string'\n\t\t\t? tableValue\n\t\t\t: tableValue != null\n\t\t\t\t? String(tableValue)\n\t\t\t\t: '';\n\tconst idValue = obj.id;\n\tconst idIsPrimitive =\n\t\ttypeof idValue === 'string' ||\n\t\ttypeof idValue === 'number' ||\n\t\ttypeof idValue === 'bigint';\n\treturn idIsPrimitive && looksLikeTableName(stripOuterQuotes(table).trim());\n};\n\nconst toCanonicalRecordIdString = (value: string): string | undefined => {\n\tconst normalized = toRecordIdString(value);\n\tif (!isRecordIdString(normalized)) return undefined;\n\n\tconst idx = normalized.indexOf(':');\n\tconst table = stripOuterQuotes(normalized.slice(0, idx).trim());\n\tconst key = normalized.slice(idx + 1).trim();\n\tif (!table || !key || !looksLikeTableName(table)) return undefined;\n\treturn `${table}:${key}`;\n};\n\nconst unwrapIdWrapper = (value: unknown): unknown => {\n\tif (!value || typeof value !== 'object') return undefined;\n\tconst obj = value as Record<string, unknown>;\n\tconst keys = Object.keys(obj);\n\tif (keys.length !== 1 || keys[0] !== 'id') return undefined;\n\treturn obj.id;\n};\n\nconst asCanonicalRecordIdFromCrossRuntimeObject = (\n\tvalue: unknown,\n): string | undefined => {\n\tif (!isCrossRuntimeRecordIdObject(value)) return undefined;\n\tconst obj = value as SurrealRecordIdLike;\n\tconst tableRaw =\n\t\ttypeof obj.table === 'string' ? obj.table : String(obj.table);\n\tconst table = stripOuterQuotes(tableRaw).trim();\n\tconst id = String(obj.id);\n\tconst fromFields =\n\t\ttable && id && looksLikeTableName(table) ? `${table}:${id}` : undefined;\n\tif (fromFields) return toCanonicalRecordIdString(fromFields);\n\treturn toCanonicalRecordIdString(String(obj.toString()));\n};\n\nexport const asCanonicalRecordIdString = (\n\tvalue: unknown,\n): string | undefined => {\n\tif (typeof value === 'string') {\n\t\treturn toCanonicalRecordIdString(value);\n\t}\n\tif (value instanceof RecordId) {\n\t\treturn toCanonicalRecordIdString(value.toString());\n\t}\n\tconst crossRuntimeCanonical =\n\t\tasCanonicalRecordIdFromCrossRuntimeObject(value);\n\tif (crossRuntimeCanonical) return crossRuntimeCanonical;\n\tconst wrappedId = unwrapIdWrapper(value);\n\tif (wrappedId === undefined || wrappedId === value) return undefined;\n\treturn asCanonicalRecordIdString(wrappedId);\n};\n\nexport const toNativeRecordIdLikeValue = (value: unknown): unknown => {\n\tif (value instanceof RecordId) {\n\t\tconst canonical = asCanonicalRecordIdString(value);\n\t\tif (!canonical) return value;\n\t\treturn getNativeRecordId(canonical);\n\t}\n\tconst canonical = asCanonicalRecordIdString(value);\n\tif (!canonical) return value;\n\treturn getNativeRecordId(canonical);\n};\n\nexport const preferRecordIdLikeIdentity = (value: unknown): unknown => {\n\tconst canonical = asCanonicalRecordIdString(value);\n\tif (!canonical) return normalizeRecordIdLikeValue(value);\n\n\tif (value instanceof RecordId) {\n\t\trecordIdIdentityPool.set(canonical, value);\n\t\treturn value;\n\t}\n\n\tif (isCrossRuntimeRecordIdObject(value)) {\n\t\trecordIdIdentityPool.set(canonical, value);\n\t\treturn value;\n\t}\n\n\tconst wrappedId = unwrapIdWrapper(value);\n\tif (wrappedId instanceof RecordId) {\n\t\trecordIdIdentityPool.set(canonical, wrappedId);\n\t\treturn wrappedId;\n\t}\n\tif (isCrossRuntimeRecordIdObject(wrappedId)) {\n\t\trecordIdIdentityPool.set(canonical, wrappedId);\n\t\treturn wrappedId;\n\t}\n\n\treturn internRecordIdIdentity(canonical);\n};\n\nexport const preferRecordIdLikeIdentityDeep = <T>(value: T): T => {\n\tconst preferred = preferRecordIdLikeIdentity(value);\n\n\tif (Array.isArray(preferred)) {\n\t\treturn preferred.map((item) =>\n\t\t\tpreferRecordIdLikeIdentityDeep(item),\n\t\t) as T;\n\t}\n\n\tif (isPlainObject(preferred)) {\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const [k, v] of Object.entries(preferred)) {\n\t\t\tout[k] = preferRecordIdLikeIdentityDeep(v);\n\t\t}\n\t\treturn out as T;\n\t}\n\n\treturn preferred as T;\n};\n\nexport const normalizeRecordIdLikeValue = (value: unknown): unknown => {\n\tif (value instanceof RecordId) {\n\t\tconst canonical = asCanonicalRecordIdString(value);\n\t\tif (!canonical) return value;\n\t\treturn internRecordIdIdentity(canonical, value);\n\t}\n\tif (typeof value === 'object' && value !== null) {\n\t\tconst canonical = asCanonicalRecordIdString(value);\n\t\tif (!canonical) return value;\n\n\t\tif (isCrossRuntimeRecordIdObject(value)) {\n\t\t\treturn internRecordIdIdentity(canonical, value);\n\t\t}\n\n\t\tconst wrappedId = unwrapIdWrapper(value);\n\t\tif (\n\t\t\twrappedId instanceof RecordId ||\n\t\t\tisCrossRuntimeRecordIdObject(wrappedId)\n\t\t) {\n\t\t\treturn internRecordIdIdentity(canonical, wrappedId);\n\t\t}\n\n\t\treturn internRecordIdIdentity(canonical);\n\t}\n\tif (typeof value !== 'string') return value;\n\n\tconst trimmed = value.trim();\n\tconst unquoted = stripOuterQuotes(trimmed);\n\tconst canonical =\n\t\ttoCanonicalRecordIdString(unquoted) ??\n\t\t(unquoted === trimmed ? undefined : toCanonicalRecordIdString(trimmed));\n\tif (canonical) {\n\t\treturn internRecordIdIdentity(canonical);\n\t}\n\n\t// Keep original value shape if it isn't record-id-like\n\treturn value;\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' &&\n\tvalue !== null &&\n\tObject.getPrototypeOf(value) === Object.prototype;\n\nexport const normalizeRecordIdLikeValueDeep = <T>(value: T): T => {\n\tconst normalized = normalizeRecordIdLikeValue(value);\n\n\tif (Array.isArray(normalized)) {\n\t\treturn normalized.map((item) =>\n\t\t\tnormalizeRecordIdLikeValueDeep(item),\n\t\t) as T;\n\t}\n\n\tif (isPlainObject(normalized)) {\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const [k, v] of Object.entries(normalized)) {\n\t\t\tout[k] = normalizeRecordIdLikeValueDeep(v);\n\t\t}\n\t\treturn out as T;\n\t}\n\n\treturn normalized as T;\n};\n\nexport const normalizeRecordIdLikeFields = <T extends Record<string, unknown>>(\n\tdata: T,\n): T => {\n\tconst out: Record<string, unknown> = {};\n\tfor (const [k, v] of Object.entries(data)) {\n\t\tout[k] = normalizeRecordIdLikeValue(v);\n\t}\n\treturn out as T;\n};\n\nexport const toRecordId = (\n\ttableName: string,\n\tid: RecordId | string,\n): RecordId => {\n\tif (id instanceof RecordId) {\n\t\treturn id;\n\t}\n\n\tconst normalized = toRecordIdString(id);\n\tconst prefixed = `${tableName}:`;\n\tconst key = normalized.startsWith(prefixed)\n\t\t? normalized.slice(prefixed.length)\n\t\t: normalized;\n\treturn new RecordId(tableName, key);\n};\n","import { parseOrderByExpression, parseWhereExpression } from '@tanstack/db';\nimport {\n\tFeatures,\n\ttype LiveMessage,\n\ttype LiveSubscription,\n\ttype RecordId,\n\ttype Surreal,\n\tTable,\n} from 'surrealdb';\nimport {\n\tnormalizeRecordIdLikeValue,\n\ttoNativeRecordIdLikeValue,\n\ttoRecordId,\n} from './id';\nimport type { SurrealSubset, TableOptions } from './types';\n\ntype QueryResult<T> = T[] | null;\ntype RowResult<T> = T | T[] | null;\ntype FieldPath = Array<string | number>;\ntype SqlFragment = { sql: string };\n\nconst IDENTIFIER_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\nconst firstRow = <T>(res: RowResult<T>): T | undefined => {\n\tif (!res) return undefined;\n\tif (Array.isArray(res)) return res[0];\n\treturn res;\n};\n\nconst toFieldPath = (value: unknown): FieldPath => {\n\tif (!Array.isArray(value)) {\n\t\tthrow new Error('Expected a field path array in where expression.');\n\t}\n\treturn value as FieldPath;\n};\n\nconst quoteIdentifier = (segment: string): string => {\n\tif (IDENTIFIER_RE.test(segment)) return segment;\n\treturn `\\`${segment.replaceAll('`', '\\\\`')}\\``;\n};\n\nconst formatFieldPath = (path: FieldPath): string => {\n\tlet out = '';\n\tfor (const segment of path) {\n\t\tif (typeof segment === 'number') {\n\t\t\tout += `[${segment}]`;\n\t\t\tcontinue;\n\t\t}\n\t\tconst next = quoteIdentifier(segment);\n\t\tout = out ? `${out}.${next}` : next;\n\t}\n\treturn out;\n};\n\nconst isReferencePathCandidate = (value: unknown): value is FieldPath =>\n\tArray.isArray(value) &&\n\tvalue.length > 0 &&\n\ttypeof value[0] === 'string' &&\n\tvalue.every(\n\t\t(segment) => typeof segment === 'string' || typeof segment === 'number',\n\t);\n\nconst mapRelationPath = (path: FieldPath, relation?: boolean): FieldPath => {\n\tif (!relation) return path;\n\tif (path[0] === 'from') return ['in', ...path.slice(1)];\n\tif (path[0] === 'to') return ['out', ...path.slice(1)];\n\treturn path;\n};\n\nconst normalizeFilterValue = (value: unknown): unknown => {\n\tif (Array.isArray(value))\n\t\treturn value.map((item) => normalizeFilterValue(item));\n\n\tconst native = toNativeRecordIdLikeValue(value);\n\tif (native !== value) return native;\n\n\tif (value && typeof value === 'object')\n\t\treturn normalizeRecordIdLikeValue(value);\n\n\treturn normalizeRecordIdLikeValue(value);\n};\n\nconst toSqlFragment = (value: unknown): SqlFragment => {\n\tif (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\t'sql' in value &&\n\t\ttypeof (value as { sql: unknown }).sql === 'string'\n\t) {\n\t\treturn value as SqlFragment;\n\t}\n\tthrow new Error('Unsupported where expression node.');\n};\n\nconst joinLogical = (op: 'AND' | 'OR', args: Array<unknown>): SqlFragment => {\n\tconst parts = args.map(toSqlFragment).map((frag) => frag.sql);\n\tif (parts.length === 0) {\n\t\treturn { sql: op === 'AND' ? 'true' : 'false' };\n\t}\n\tif (parts.length === 1) return { sql: parts[0] };\n\treturn {\n\t\tsql: parts.map((part) => `(${part})`).join(` ${op} `),\n\t};\n};\n\nconst buildSubsetQuery = (\n\ttable: TableOptions,\n\tsubset?: SurrealSubset,\n): { sql: string; params: Record<string, unknown> } => {\n\tlet paramIdx = 0;\n\tconst params: Record<string, unknown> = { table: table.name };\n\tconst nextParam = (value: unknown): string => {\n\t\tconst key = `p${paramIdx++}`;\n\t\tparams[key] = value;\n\t\treturn `$${key}`;\n\t};\n\tconst comparison = (\n\t\tfieldPath: unknown,\n\t\top: '=' | '!=' | '>' | '>=' | '<' | '<=' | 'LIKE',\n\t\tvalue: unknown,\n\t): SqlFragment => {\n\t\tconst field = formatFieldPath(\n\t\t\tmapRelationPath(toFieldPath(fieldPath), table.relation),\n\t\t);\n\n\t\tif (value === undefined) {\n\t\t\tif (op === '=') return { sql: `${field} IS NONE` };\n\t\t\tif (op === '!=') return { sql: `${field} IS NOT NONE` };\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot compare field '${field}' with undefined using '${op}'.`,\n\t\t\t);\n\t\t}\n\n\t\tif (isReferencePathCandidate(value)) {\n\t\t\tthrow new Error(\n\t\t\t\t'Got a field reference on the right side of a where comparison. Pass a concrete value.',\n\t\t\t);\n\t\t}\n\t\treturn {\n\t\t\tsql: `${field} ${op} ${nextParam(normalizeFilterValue(value))}`,\n\t\t};\n\t};\n\tconst whereSqlFrom = (\n\t\texpr: NonNullable<SurrealSubset['where']>,\n\t): string => {\n\t\tconst fragment = parseWhereExpression<SqlFragment>(expr, {\n\t\t\thandlers: {\n\t\t\t\tand: (...args) => joinLogical('AND', args),\n\t\t\t\tor: (...args) => joinLogical('OR', args),\n\t\t\t\tnot: (arg) => ({ sql: `NOT (${toSqlFragment(arg).sql})` }),\n\t\t\t\teq: (field, value) => comparison(field, '=', value),\n\t\t\t\tgt: (field, value) => comparison(field, '>', value),\n\t\t\t\tgte: (field, value) => comparison(field, '>=', value),\n\t\t\t\tlt: (field, value) => comparison(field, '<', value),\n\t\t\t\tlte: (field, value) => comparison(field, '<=', value),\n\t\t\t\tlike: (field, value) => comparison(field, 'LIKE', value),\n\t\t\t\tilike: (field, value) => {\n\t\t\t\t\tconst f = formatFieldPath(\n\t\t\t\t\t\tmapRelationPath(toFieldPath(field), table.relation),\n\t\t\t\t\t);\n\t\t\t\t\tconst p = nextParam(normalizeFilterValue(value));\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsql: `string::lower(${f}) LIKE string::lower(${p})`,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tin: (field, value) => {\n\t\t\t\t\tconst f = formatFieldPath(\n\t\t\t\t\t\tmapRelationPath(toFieldPath(field), table.relation),\n\t\t\t\t\t);\n\t\t\t\t\tif (Array.isArray(value) && value.length === 0) {\n\t\t\t\t\t\treturn { sql: 'false' };\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsql: `${f} IN ${nextParam(normalizeFilterValue(value))}`,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tisNull: (field) => ({\n\t\t\t\t\tsql: `${formatFieldPath(\n\t\t\t\t\t\tmapRelationPath(toFieldPath(field), table.relation),\n\t\t\t\t\t)} IS NULL`,\n\t\t\t\t}),\n\t\t\t\tisUndefined: (field) => ({\n\t\t\t\t\tsql: `${formatFieldPath(\n\t\t\t\t\t\tmapRelationPath(toFieldPath(field), table.relation),\n\t\t\t\t\t)} IS NONE`,\n\t\t\t\t}),\n\t\t\t},\n\t\t\tonUnknownOperator: (op) => {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Unsupported where operator '${op}' for SurrealQL translation.`,\n\t\t\t\t);\n\t\t\t},\n\t\t});\n\n\t\tif (!fragment) return '';\n\t\treturn fragment.sql;\n\t};\n\n\tconst whereParts: string[] = [];\n\tif (subset?.where) {\n\t\tconst parsed = whereSqlFrom(subset.where);\n\t\tif (parsed) whereParts.push(parsed);\n\t}\n\tif (subset?.cursor?.whereFrom) {\n\t\tconst cursorWhere = whereSqlFrom(subset.cursor.whereFrom);\n\t\tif (cursorWhere) whereParts.push(cursorWhere);\n\t}\n\n\tconst whereSql = whereParts.length\n\t\t? ` WHERE ${whereParts.map((part) => `(${part})`).join(' AND ')}`\n\t\t: '';\n\n\tconst order = parseOrderByExpression(subset?.orderBy);\n\tconst orderSql = order.length\n\t\t? ` ORDER BY ${order\n\t\t\t\t.map(\n\t\t\t\t\t(clause) =>\n\t\t\t\t\t\t`${formatFieldPath(\n\t\t\t\t\t\t\tmapRelationPath(clause.field, table.relation),\n\t\t\t\t\t\t)} ${clause.direction.toUpperCase()}`,\n\t\t\t\t)\n\t\t\t\t.join(', ')}`\n\t\t: '';\n\tconst limitSql =\n\t\ttypeof subset?.limit === 'number'\n\t\t\t? ` LIMIT ${nextParam(subset.limit)}`\n\t\t\t: '';\n\tconst offsetSql =\n\t\ttypeof subset?.offset === 'number'\n\t\t\t? ` START ${nextParam(subset.offset)}`\n\t\t\t: '';\n\n\treturn {\n\t\tsql: `SELECT * FROM type::table($table)${whereSql}${orderSql}${limitSql}${offsetSql};`,\n\t\tparams,\n\t};\n};\n\nexport function manageTable<T extends { id: string | RecordId }>(\n\tdb: Surreal,\n\tconfig: TableOptions,\n) {\n\tconst { name } = config;\n\tconst table = new Table(name);\n\n\tconst listAll = async (): Promise<T[]> => {\n\t\treturn loadSubset();\n\t};\n\n\tconst loadSubset = async (subset?: SurrealSubset): Promise<T[]> => {\n\t\tconst { sql, params } = buildSubsetQuery(config, subset);\n\t\tconst [res] = await db.query<[QueryResult<T>]>(sql, params);\n\t\treturn res ?? [];\n\t};\n\n\tconst create = async (data: T | Partial<T>): Promise<T | undefined> => {\n\t\tconst id = (data as Partial<T> & { id?: string | RecordId }).id;\n\t\tif (!id) {\n\t\t\tconst created = await db.create(table).content(data);\n\t\t\treturn firstRow(created as RowResult<T>);\n\t\t}\n\n\t\tconst payload = { ...(data as Record<string, unknown>) };\n\t\tpayload.id = toRecordId(name, id);\n\t\tconst inserted = await db.insert(table, payload);\n\t\treturn firstRow(inserted as RowResult<T>);\n\t};\n\n\tconst update = async (id: RecordId, data: T | Partial<T>) => {\n\t\tconst { id: _ignoredId, ...rest } = data as Record<string, unknown>;\n\t\tawait db.update(id).merge(rest);\n\t};\n\n\tconst remove = async (id: RecordId) => {\n\t\tawait db.delete(id);\n\t};\n\n\tconst subscribe = (\n\t\tcb: (e: { type: 'insert' | 'update' | 'delete'; row: T }) => void,\n\t) => {\n\t\tlet killed = false;\n\t\tlet live: LiveSubscription | undefined;\n\n\t\tconst on = (msg: LiveMessage) => {\n\t\t\tconst { action, value } = msg as unknown as {\n\t\t\t\taction: 'CREATE' | 'UPDATE' | 'DELETE' | 'KILLED';\n\t\t\t\tvalue: T & { id: string | RecordId };\n\t\t\t};\n\n\t\t\tif (action === 'KILLED') return;\n\t\t\tif (action === 'CREATE') cb({ type: 'insert', row: value });\n\t\t\telse if (action === 'UPDATE') cb({ type: 'update', row: value });\n\t\t\telse if (action === 'DELETE')\n\t\t\t\tcb({ type: 'delete', row: { id: value.id } as T });\n\t\t};\n\n\t\tconst start = async () => {\n\t\t\tif (!db.isFeatureSupported(Features.LiveQueries)) return;\n\t\t\tlive = await db.live(table);\n\t\t\tlive.subscribe(on);\n\t\t};\n\n\t\tvoid start();\n\n\t\treturn () => {\n\t\t\tif (killed) return;\n\t\t\tkilled = true;\n\t\t\tif (live) void live.kill();\n\t\t};\n\t};\n\n\treturn {\n\t\tlistAll,\n\t\tloadSubset,\n\t\tcreate,\n\t\tupdate,\n\t\tremove,\n\t\tsoftDelete: remove,\n\t\tsubscribe,\n\t};\n}\n","import type { LiveAction } from 'surrealdb';\nimport type { Bytes } from './types';\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\nconst hasBuffer = typeof Buffer !== 'undefined';\n\nexport function toBytes(value: string | object): Bytes {\n\tif (typeof value === 'string') return encoder.encode(value);\n\treturn encoder.encode(JSON.stringify(value));\n}\n\nexport function fromBytes<T>(bytes: Bytes, deserialize = false): T | string {\n\tif (deserialize) return JSON.parse(decoder.decode(bytes)) as T;\n\treturn decoder.decode(bytes);\n}\n\nexport function toBase64(bytes: Bytes): string {\n\tif (hasBuffer) return Buffer.from(bytes).toString('base64');\n\treturn btoa(String.fromCharCode(...bytes));\n}\n\nexport function fromBase64(base64: string): Bytes {\n\tif (hasBuffer) return new Uint8Array(Buffer.from(base64, 'base64'));\n\tconst bin = atob(base64);\n\tconst out = new Uint8Array(bin.length);\n\tfor (let i = 0; i < bin.length; i++) {\n\t\tout[i] = bin.charCodeAt(i);\n\t}\n\treturn out;\n}\n\nexport function surrealActionMapType(\n\taction: LiveAction,\n): 'insert' | 'update' | 'delete' {\n\tswitch (action) {\n\t\tcase 'CREATE':\n\t\t\treturn 'insert';\n\t\tcase 'UPDATE':\n\t\t\treturn 'update';\n\t\tcase 'DELETE':\n\t\t\treturn 'delete';\n\t\tdefault:\n\t\t\treturn 'update';\n\t}\n}\n","import { fromBase64, toBase64 } from '../util';\nimport type { Bytes, EncryptedEnvelope } from '../types';\nimport type { CryptoProvider, DecryptInput, EncryptInput } from './provider';\n\nexport * from './provider';\nexport * from './types';\n\ntype KeyResolver = (kid: string) => Promise<CryptoKey> | CryptoKey;\n\ntype WebCryptoAESGCMOptions = {\n\talg?: string;\n\tversion?: number;\n\tkid?: string;\n\tresolveKey?: KeyResolver;\n};\n\nconst DEFAULT_ALG = 'AES-256-GCM';\nconst DEFAULT_KID = 'default';\nconst DEFAULT_VERSION = 1;\n\nconst resolveCrypto = (): Crypto => {\n\tif (typeof globalThis.crypto !== 'undefined') return globalThis.crypto;\n\tthrow new Error('Web Crypto API is not available in this runtime.');\n};\n\nconst toCryptoBytes = (value: Bytes): Uint8Array => new Uint8Array(value);\n\nexport class WebCryptoAESGCM implements CryptoProvider {\n\tprivate readonly alg: string;\n\tprivate readonly version: number;\n\tprivate readonly kid: string;\n\tprivate readonly resolveKey: KeyResolver;\n\n\tconstructor(key: CryptoKey, options: WebCryptoAESGCMOptions = {}) {\n\t\tthis.alg = options.alg ?? DEFAULT_ALG;\n\t\tthis.version = options.version ?? DEFAULT_VERSION;\n\t\tthis.kid = options.kid ?? DEFAULT_KID;\n\t\tthis.resolveKey =\n\t\t\toptions.resolveKey ??\n\t\t\t((incomingKid) => {\n\t\t\t\tif (incomingKid !== this.kid) {\n\t\t\t\t\tthrow new Error(`No key configured for kid '${incomingKid}'.`);\n\t\t\t\t}\n\t\t\t\treturn key;\n\t\t\t});\n\t}\n\n\tstatic async fromRawKey(\n\t\trawKey: Bytes,\n\t\toptions: Omit<WebCryptoAESGCMOptions, 'resolveKey'> = {},\n\t) {\n\t\tconst key = await resolveCrypto().subtle.importKey(\n\t\t\t'raw',\n\t\t\ttoCryptoBytes(rawKey) as never,\n\t\t\t'AES-GCM',\n\t\t\tfalse,\n\t\t\t['encrypt', 'decrypt'],\n\t\t);\n\n\t\treturn new WebCryptoAESGCM(key, options);\n\t}\n\n\tprivate async keyFor(kid: string): Promise<CryptoKey> {\n\t\treturn await this.resolveKey(kid);\n\t}\n\n\tasync encrypt(input: EncryptInput): Promise<EncryptedEnvelope> {\n\t\tconst crypto = resolveCrypto();\n\t\tconst alg = input.alg ?? this.alg;\n\t\tconst kid = input.kid ?? this.kid;\n\t\tconst v = input.v ?? this.version;\n\t\tconst nonce = crypto.getRandomValues(new Uint8Array(12));\n\t\tconst key = await this.keyFor(kid);\n\t\tconst ct = new Uint8Array(\n\t\t\tawait crypto.subtle.encrypt(\n\t\t\t\t{\n\t\t\t\t\tname: 'AES-GCM',\n\t\t\t\t\tiv: nonce,\n\t\t\t\t\tadditionalData: input.aad\n\t\t\t\t\t\t? (toCryptoBytes(input.aad) as never)\n\t\t\t\t\t\t: undefined,\n\t\t\t\t},\n\t\t\t\tkey,\n\t\t\t\ttoCryptoBytes(input.plaintext) as never,\n\t\t\t),\n\t\t);\n\n\t\treturn {\n\t\t\tv,\n\t\t\talg,\n\t\t\tkid,\n\t\t\tn: toBase64(nonce),\n\t\t\tct: toBase64(ct),\n\t\t};\n\t}\n\n\tasync decrypt({ envelope, aad }: DecryptInput): Promise<Bytes> {\n\t\tif (envelope.alg !== this.alg) {\n\t\t\tthrow new Error(\n\t\t\t\t`Unsupported envelope algorithm '${envelope.alg}'. Expected '${this.alg}'.`,\n\t\t\t);\n\t\t}\n\n\t\tconst key = await this.keyFor(envelope.kid);\n\t\tconst crypto = resolveCrypto();\n\t\tconst plaintext = await crypto.subtle.decrypt(\n\t\t\t{\n\t\t\t\tname: 'AES-GCM',\n\t\t\t\tiv: toCryptoBytes(fromBase64(envelope.n)) as never,\n\t\t\t\tadditionalData: aad ? (toCryptoBytes(aad) as never) : undefined,\n\t\t\t},\n\t\t\tkey,\n\t\t\ttoCryptoBytes(fromBase64(envelope.ct)) as never,\n\t\t);\n\n\t\treturn new Uint8Array(plaintext);\n\t}\n}\n","import type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type {\n\tCollectionConfig,\n\tDeleteMutationFn,\n\tDeleteMutationFnParams,\n\tInsertMutationFn,\n\tInsertMutationFnParams,\n\tLoadSubsetOptions,\n\tOperationConfig,\n\tStandardSchema,\n\tSyncConfig,\n\tTransaction,\n\tUpdateMutationFn,\n\tUpdateMutationFnParams,\n\tUtilsRecord,\n} from '@tanstack/db';\nimport { queryCollectionOptions } from '@tanstack/query-db-collection';\nimport { LoroDoc } from 'loro-crdt';\nimport { Features, RecordId, Table } from 'surrealdb';\nimport { createLoroProfile } from './crdt';\nimport {\n\tnormalizeRecordIdLikeFields,\n\tnormalizeRecordIdLikeValueDeep,\n\ttoRecordId,\n\ttoRecordIdString,\n\ttoRecordKeyString,\n} from './id';\nimport { manageTable } from './table';\nimport type {\n\tAADContext,\n\tAdapterSyncMode,\n\tEncryptedEnvelope,\n\tLocalChange,\n\tSurrealCollectionOptions,\n\tSurrealCollectionOptionsReturn,\n\tSyncedTable,\n\tTableLike,\n\tTableOptions,\n} from './types';\nimport { fromBase64, fromBytes, toBase64, toBytes } from './util';\n\nexport * from './crdt';\nexport * from './encryption';\nexport { toRecordKeyString } from './id';\nexport * from './types';\n\nconst TEMP_ID_PREFIX = '__temp__';\nconst ENVELOPE_FIELDS = [\n\t'version',\n\t'algorithm',\n\t'key_id',\n\t'nonce',\n\t'ciphertext',\n] as const;\nconst NOOP = () => {};\n\ntype Cleanup = () => void;\n\ntype MutationInput<T extends { id: string | RecordId }> = Omit<T, 'id'> & {\n\tid?: T['id'];\n};\n\ntype QueryWriteUtils = {\n\twriteUpsert?: (data: unknown) => void;\n\twriteDelete?: (key: string) => void;\n};\n\ntype CRDTUpdateRow = {\n\tdoc: string | RecordId;\n\tts?: string | Date;\n\tupdate_bytes?: string;\n\tsnapshot_bytes?: string;\n\tversion?: number;\n\talgorithm?: string;\n\tkey_id?: string;\n\tnonce?: string;\n\tciphertext?: string;\n\tactor?: string;\n};\n\ntype LiveMessageLike = {\n\taction: 'CREATE' | 'UPDATE' | 'DELETE' | 'KILLED';\n\tvalue: Record<string, unknown>;\n};\n\ntype LiveSubscriptionLike = {\n\tisAlive?: boolean;\n\tsubscribe: (cb: (msg: LiveMessageLike) => void | Promise<void>) => void;\n\tkill: () => Promise<void>;\n};\n\nconst isTableObject = (value: unknown): value is TableOptions =>\n\ttypeof value === 'object' &&\n\tvalue !== null &&\n\t'name' in value &&\n\ttypeof (value as { name: unknown }).name === 'string';\n\nconst toTableOptions = (table: TableLike): TableOptions => {\n\tif (typeof table === 'string') return { name: table };\n\tif (table instanceof Table) return { name: table.name };\n\tif (isTableObject(table)) return table;\n\tthrow new Error('Expected table as string, Table, or { name }.');\n};\n\nconst toTableResource = (table: TableLike): Table => {\n\tconst normalized = toTableOptions(table);\n\treturn new Table(normalized.name);\n};\n\nconst tableNameOf = (table: TableLike): string => toTableOptions(table).name;\n\nconst getWriteUtils = (utils: unknown): QueryWriteUtils =>\n\ttypeof utils === 'object' && utils !== null\n\t\t? (utils as QueryWriteUtils)\n\t\t: {};\n\nconst firstRow = <T>(result: T | T[] | null | undefined): T | undefined => {\n\tif (!result) return undefined;\n\tif (Array.isArray(result)) return result[0];\n\treturn result;\n};\n\nconst omitUndefined = <T extends Record<string, unknown>>(obj: T): Partial<T> =>\n\tObject.fromEntries(\n\t\tObject.entries(obj).filter(([, value]) => value !== undefined),\n\t) as Partial<T>;\n\nconst createTempRecordId = (tableName: string): RecordId => {\n\tconst suffix = `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;\n\treturn new RecordId(tableName, `${TEMP_ID_PREFIX}${suffix}`);\n};\n\nconst isTempId = (id: string | RecordId, tableName: string): boolean => {\n\tconst normalized = toRecordIdString(id);\n\tconst key = normalized.startsWith(`${tableName}:`)\n\t\t? normalized.slice(tableName.length + 1)\n\t\t: normalized;\n\treturn key.startsWith(TEMP_ID_PREFIX);\n};\n\nconst toEnvelope = (\n\tvalue: Record<string, unknown>,\n): EncryptedEnvelope | null => {\n\tconst version = value.version;\n\tconst algorithm = value.algorithm;\n\tconst keyId = value.key_id;\n\tconst nonce = value.nonce;\n\tconst ciphertext = value.ciphertext;\n\tif (\n\t\ttypeof version !== 'number' ||\n\t\ttypeof algorithm !== 'string' ||\n\t\ttypeof keyId !== 'string' ||\n\t\ttypeof nonce !== 'string' ||\n\t\ttypeof ciphertext !== 'string'\n\t) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tv: version,\n\t\talg: algorithm,\n\t\tkid: keyId,\n\t\tn: nonce,\n\t\tct: ciphertext,\n\t};\n};\n\nconst toStoredEnvelope = (\n\tenvelope: EncryptedEnvelope,\n): Record<string, unknown> => ({\n\tversion: envelope.v,\n\talgorithm: envelope.alg,\n\tkey_id: envelope.kid,\n\tnonce: envelope.n,\n\tciphertext: envelope.ct,\n});\n\nconst stripEnvelopeFields = (\n\tvalue: Record<string, unknown>,\n): Record<string, unknown> => {\n\tconst copy = { ...value };\n\tfor (const key of ENVELOPE_FIELDS) delete copy[key];\n\treturn copy;\n};\n\nconst toRecordArray = <T>(rows: T | T[] | null | undefined): T[] => {\n\tif (!rows) return [];\n\treturn Array.isArray(rows) ? rows : [rows];\n};\n\nasync function queryRows<T>(\n\tdb: {\n\t\tquery: (\n\t\t\tsql: string,\n\t\t\tbindings?: Record<string, unknown>,\n\t\t) => Promise<unknown>;\n\t},\n\tsql: string,\n\tbindings?: Record<string, unknown>,\n): Promise<T[]> {\n\tconst result = await db.query(sql, bindings ?? {});\n\tif (Array.isArray(result)) {\n\t\tconst first = result[0];\n\t\tif (Array.isArray(first)) return first as T[];\n\t\treturn [];\n\t}\n\treturn [];\n}\n\nfunction createInsertSchema<T extends { id: string | RecordId }>(\n\ttableName: string,\n): StandardSchemaV1<MutationInput<T>, T> {\n\treturn {\n\t\t'~standard': {\n\t\t\tversion: 1,\n\t\t\tvendor: 'tanstack-db-surrealdb',\n\t\t\tvalidate: (value: unknown) => {\n\t\t\t\tif (\n\t\t\t\t\t!value ||\n\t\t\t\t\ttypeof value !== 'object' ||\n\t\t\t\t\tArray.isArray(value)\n\t\t\t\t) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tissues: [{ message: 'Insert data must be an object.' }],\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst data = normalizeRecordIdLikeFields({\n\t\t\t\t\t...(value as Record<string, unknown>),\n\t\t\t\t}) as MutationInput<T>;\n\n\t\t\t\tif (!data.id)\n\t\t\t\t\tdata.id = createTempRecordId(tableName) as T['id'];\n\n\t\t\t\treturn { value: data as T };\n\t\t\t},\n\t\t\ttypes: undefined,\n\t\t},\n\t};\n}\n\nfunction defaultAad(ctx: AADContext): Uint8Array {\n\tif (ctx.kind === 'base') return toBytes(`${ctx.table}:${ctx.id}`);\n\tconst base = ctx.baseTable ?? ctx.table;\n\treturn toBytes(`${ctx.table}:${base}:${ctx.id}`);\n}\n\nconst syncModeFrom = (syncMode: AdapterSyncMode | undefined): AdapterSyncMode =>\n\tsyncMode ?? 'eager';\n\nconst subsetCacheKey = (subset: LoadSubsetOptions): string =>\n\tJSON.stringify(subset, (_key, value) => {\n\t\tif (value instanceof Date) return value.toISOString();\n\t\tif (value instanceof RecordId) return toRecordIdString(value);\n\t\tif (typeof value === 'function') return undefined;\n\t\tif (\n\t\t\tvalue &&\n\t\t\ttypeof value === 'object' &&\n\t\t\t'table' in (value as Record<string, unknown>) &&\n\t\t\t'id' in (value as Record<string, unknown>)\n\t\t) {\n\t\t\ttry {\n\t\t\t\treturn toRecordIdString(String(value));\n\t\t\t} catch {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t});\n\ntype BaseSyncRuntime<T extends { id: string | RecordId }> = {\n\tstartRealtime: () => Promise<void>;\n\tcleanup: () => void;\n\tloadSubset: (subset: LoadSubsetOptions) => Promise<void>;\n\tunloadSubset: (subset: LoadSubsetOptions) => void;\n};\n\nfunction modernSurrealCollectionOptions<T extends SyncedTable<object>>(\n\tconfig: SurrealCollectionOptions<T>,\n): SurrealCollectionOptionsReturn<T> {\n\tconst {\n\t\tdb,\n\t\ttable,\n\t\tqueryClient,\n\t\tqueryKey,\n\t\tonError,\n\t\te2ee,\n\t\tcrdt,\n\t\tsyncMode: inputSyncMode,\n\t} = config;\n\n\tif (!queryClient || !queryKey) {\n\t\tthrow new Error('queryClient and queryKey are required.');\n\t}\n\n\tconst syncMode = syncModeFrom(inputSyncMode);\n\tconst isOnDemandLike =\n\t\tsyncMode === 'on-demand' || syncMode === 'progressive';\n\tconst isStrictOnDemand = syncMode === 'on-demand';\n\tconst queryDrivenSyncMode: 'eager' | 'on-demand' = isOnDemandLike\n\t\t? 'on-demand'\n\t\t: 'eager';\n\tconst tableOptions = toTableOptions(table);\n\tconst tableName = tableOptions.name;\n\tconst tableResource = toTableResource(table);\n\tconst subsetIds = new Map<string, Set<string>>();\n\tconst activeOnDemandIds = new Set<string>();\n\n\tconst e2eeEnabled = e2ee?.enabled === true;\n\tconst crdtEnabled = crdt?.enabled === true;\n\tconst defaultCrdtProfile = crdtEnabled\n\t\t? createLoroProfile<T>(crdt.profile)\n\t\t: undefined;\n\tconst materializeCrdt =\n\t\tcrdt?.materialize ?? defaultCrdtProfile?.materialize;\n\tconst applyCrdtLocalChange =\n\t\tcrdt?.applyLocalChange ?? defaultCrdtProfile?.applyLocalChange;\n\tif (crdtEnabled && (!materializeCrdt || !applyCrdtLocalChange)) {\n\t\tthrow new Error(\n\t\t\t'CRDT profile adapter is missing materialize/applyLocalChange handlers.',\n\t\t);\n\t}\n\n\tconst tableAccess = manageTable<T>(db, tableOptions);\n\tconst docs = new Map<string, LoroDoc>();\n\n\tconst aadFor = (ctx: AADContext): Uint8Array =>\n\t\t(e2ee?.aad ?? defaultAad)(ctx);\n\n\tconst getKey = (row: { id: string | RecordId }) => toRecordIdString(row.id);\n\tconst normalizeMutationId = (id: string | RecordId): RecordId =>\n\t\ttoRecordId(tableName, id);\n\n\tconst normalizeRow = (row: T): T => {\n\t\tconst normalized = normalizeRecordIdLikeValueDeep(row) as T;\n\t\treturn {\n\t\t\t...normalized,\n\t\t\tid: normalizeMutationId(normalized.id),\n\t\t} as T;\n\t};\n\n\tconst decodeBaseRow = async (row: Record<string, unknown>): Promise<T> => {\n\t\tif (!e2eeEnabled) {\n\t\t\treturn normalizeRow(row as T);\n\t\t}\n\n\t\tconst envelope = toEnvelope(row);\n\t\tif (!envelope) return normalizeRow(row as T);\n\t\tconst id = toRecordKeyString(row.id as string | RecordId);\n\t\tconst bytes = await e2ee.crypto.decrypt({\n\t\t\tenvelope,\n\t\t\taad: aadFor({ table: tableName, id, kind: 'base' }),\n\t\t});\n\t\tconst payload = fromBytes<Record<string, unknown>>(bytes, true);\n\t\tconst merged = {\n\t\t\t...stripEnvelopeFields(row),\n\t\t\t...(payload as Record<string, unknown>),\n\t\t\tid: normalizeMutationId(row.id as string | RecordId),\n\t\t} as T;\n\t\treturn normalizeRow(merged);\n\t};\n\n\tconst encodeBaseRow = async (\n\t\trow: Record<string, unknown>,\n\t\tid: string,\n\t): Promise<Record<string, unknown>> => {\n\t\tif (!e2eeEnabled) return row;\n\t\tconst envelope = await e2ee.crypto.encrypt({\n\t\t\tplaintext: toBytes(row),\n\t\t\taad: aadFor({ table: tableName, id, kind: 'base' }),\n\t\t});\n\t\treturn toStoredEnvelope(envelope);\n\t};\n\n\tconst updatesTableName = crdtEnabled\n\t\t? tableNameOf(crdt.updatesTable)\n\t\t: undefined;\n\tconst updatesTable = crdtEnabled\n\t\t? toTableResource(crdt.updatesTable)\n\t\t: undefined;\n\tconst snapshotsTableName =\n\t\tcrdtEnabled && crdt.snapshotsTable\n\t\t\t? tableNameOf(crdt.snapshotsTable)\n\t\t\t: undefined;\n\tconst snapshotsTable =\n\t\tcrdtEnabled && crdt.snapshotsTable\n\t\t\t? toTableResource(crdt.snapshotsTable)\n\t\t\t: undefined;\n\n\tconst getDoc = (id: string): LoroDoc => {\n\t\tconst existing = docs.get(id);\n\t\tif (existing) return existing;\n\t\tconst doc = new LoroDoc();\n\t\tdocs.set(id, doc);\n\t\treturn doc;\n\t};\n\n\tconst docRef = (id: string): RecordId => new RecordId(tableName, id);\n\tconst idFromDocRef = (doc: string | RecordId): string =>\n\t\ttoRecordKeyString(doc);\n\n\tconst resolveActor = (\n\t\tid: string,\n\t\tchange?: LocalChange<T>,\n\t): string | undefined => {\n\t\tif (!crdtEnabled) return undefined;\n\t\tconst candidate = crdt.actor ?? crdt.localActorId;\n\t\tif (typeof candidate === 'function') {\n\t\t\treturn candidate({ id, change });\n\t\t}\n\t\treturn candidate;\n\t};\n\n\tconst decodeUpdateBytes = async (\n\t\trow: CRDTUpdateRow,\n\t\tkind: 'update' | 'snapshot',\n\t): Promise<Uint8Array> => {\n\t\tif (!e2eeEnabled) {\n\t\t\tif (kind === 'snapshot') {\n\t\t\t\tconst snapshot = row.snapshot_bytes;\n\t\t\t\tif (!snapshot) return new Uint8Array();\n\t\t\t\treturn fromBase64(snapshot);\n\t\t\t}\n\t\t\tconst update = row.update_bytes;\n\t\t\tif (!update) return new Uint8Array();\n\t\t\treturn fromBase64(update);\n\t\t}\n\t\tconst envelope = toEnvelope(row as unknown as Record<string, unknown>);\n\t\tif (!envelope) return new Uint8Array();\n\t\tconst id = idFromDocRef(row.doc);\n\t\treturn e2ee.crypto.decrypt({\n\t\t\tenvelope,\n\t\t\taad: aadFor({\n\t\t\t\ttable:\n\t\t\t\t\tkind === 'snapshot'\n\t\t\t\t\t\t? (snapshotsTableName ?? tableName)\n\t\t\t\t\t\t: (updatesTableName ?? tableName),\n\t\t\t\tbaseTable: tableName,\n\t\t\t\tid,\n\t\t\t\tkind,\n\t\t\t}),\n\t\t});\n\t};\n\n\tconst encodeUpdatePayload = async (\n\t\tbytes: Uint8Array,\n\t\tid: string,\n\t\tkind: 'update' | 'snapshot',\n\t): Promise<Record<string, unknown>> => {\n\t\tif (!e2eeEnabled) {\n\t\t\tif (kind === 'snapshot') return { snapshot_bytes: toBase64(bytes) };\n\t\t\treturn { update_bytes: toBase64(bytes) };\n\t\t}\n\n\t\tconst targetTable =\n\t\t\tkind === 'snapshot' ? snapshotsTableName : updatesTableName;\n\t\tconst envelope = await e2ee.crypto.encrypt({\n\t\t\tplaintext: bytes,\n\t\t\taad: aadFor({\n\t\t\t\ttable: targetTable ?? tableName,\n\t\t\t\tbaseTable: tableName,\n\t\t\t\tid,\n\t\t\t\tkind,\n\t\t\t}),\n\t\t});\n\t\treturn toStoredEnvelope(envelope);\n\t};\n\n\tconst persistCrdtUpdate = async (\n\t\tid: string,\n\t\tbytes: Uint8Array,\n\t\tchange?: LocalChange<T>,\n\t) => {\n\t\tif (!crdtEnabled || !updatesTable) return;\n\t\tconst payload = await encodeUpdatePayload(bytes, id, 'update');\n\t\tconst actor = resolveActor(id, change);\n\t\tconst row = {\n\t\t\tdoc: docRef(id),\n\t\t\tts: new Date().toISOString(),\n\t\t\t...(actor ? { actor } : {}),\n\t\t\t...payload,\n\t\t};\n\t\tawait db.create(updatesTable).content(row);\n\t};\n\n\tconst persistMaterialized = async (materialized: T) => {\n\t\tif (!crdtEnabled || crdt.persistMaterializedView !== true) return;\n\t\tconst id = toRecordKeyString(materialized.id);\n\t\tif (!e2eeEnabled) {\n\t\t\tconst { id: _ignoredId, ...rest } = materialized as Record<\n\t\t\t\tstring,\n\t\t\t\tunknown\n\t\t\t>;\n\t\t\tawait db.upsert(normalizeMutationId(materialized.id)).merge(rest);\n\t\t\treturn;\n\t\t}\n\n\t\tconst payload = await encodeBaseRow(\n\t\t\tomitUndefined({\n\t\t\t\t...(materialized as Record<string, unknown>),\n\t\t\t\tid: undefined,\n\t\t\t}),\n\t\t\tid,\n\t\t);\n\t\tawait db.upsert(normalizeMutationId(materialized.id)).merge(payload);\n\t};\n\n\tconst hydratePlainRows = async (\n\t\trows: Array<Record<string, unknown>>,\n\t\twrite: (\n\t\t\tchange:\n\t\t\t\t| { type: 'insert' | 'update'; value: T }\n\t\t\t\t| { type: 'delete'; key: string },\n\t\t) => void,\n\t\tbegin: () => void,\n\t\tcommit: () => void,\n\t\ttype: 'insert' | 'update' = 'insert',\n\t) => {\n\t\tif (!rows.length) return;\n\t\tbegin();\n\t\ttry {\n\t\t\tfor (const row of rows) {\n\t\t\t\tconst decoded = await decodeBaseRow(row);\n\t\t\t\twrite({ type, value: decoded });\n\t\t\t}\n\t\t} finally {\n\t\t\tcommit();\n\t\t}\n\t};\n\n\tconst hydrateCrdtDoc = async (\n\t\tid: string,\n\t\twrite: (\n\t\t\tchange:\n\t\t\t\t| { type: 'insert' | 'update'; value: T }\n\t\t\t\t| { type: 'delete'; key: string },\n\t\t) => void,\n\t\tbegin: () => void,\n\t\tcommit: () => void,\n\t\twriteType: 'insert' | 'update' = 'insert',\n\t) => {\n\t\tif (!crdtEnabled || !updatesTableName) return;\n\t\tconst doc = getDoc(id);\n\t\tlet since: string | undefined;\n\n\t\tif (snapshotsTableName) {\n\t\t\tconst snapshots = await queryRows<CRDTUpdateRow>(\n\t\t\t\tdb,\n\t\t\t\t`SELECT * FROM type::table($table) WHERE doc = $doc ORDER BY ts DESC LIMIT 1;`,\n\t\t\t\t{\n\t\t\t\t\ttable: snapshotsTableName,\n\t\t\t\t\tdoc: docRef(id),\n\t\t\t\t},\n\t\t\t);\n\t\t\tconst snapshot = snapshots[0];\n\t\t\tif (snapshot) {\n\t\t\t\tconst bytes = await decodeUpdateBytes(snapshot, 'snapshot');\n\t\t\t\tif (bytes.byteLength) doc.import(bytes);\n\t\t\t\tsince =\n\t\t\t\t\ttypeof snapshot.ts === 'string'\n\t\t\t\t\t\t? snapshot.ts\n\t\t\t\t\t\t: snapshot.ts instanceof Date\n\t\t\t\t\t\t\t? snapshot.ts.toISOString()\n\t\t\t\t\t\t\t: undefined;\n\t\t\t}\n\t\t}\n\n\t\tconst updates = await queryRows<CRDTUpdateRow>(\n\t\t\tdb,\n\t\t\tsince\n\t\t\t\t? `SELECT * FROM type::table($table) WHERE doc = $doc AND ts > $since ORDER BY ts ASC;`\n\t\t\t\t: `SELECT * FROM type::table($table) WHERE doc = $doc ORDER BY ts ASC;`,\n\t\t\t{\n\t\t\t\ttable: updatesTableName,\n\t\t\t\tdoc: docRef(id),\n\t\t\t\tsince,\n\t\t\t},\n\t\t);\n\n\t\tfor (const update of updates) {\n\t\t\tconst bytes = await decodeUpdateBytes(update, 'update');\n\t\t\tif (!bytes.byteLength) continue;\n\t\t\tdoc.import(bytes);\n\t\t}\n\n\t\tconst materialized = normalizeRow(materializeCrdt(doc, id));\n\t\tbegin();\n\t\ttry {\n\t\t\twrite({ type: writeType, value: materialized });\n\t\t} finally {\n\t\t\tcommit();\n\t\t}\n\t};\n\n\tconst updateActiveOnDemandIds = () => {\n\t\tactiveOnDemandIds.clear();\n\t\tfor (const ids of subsetIds.values()) {\n\t\t\tfor (const id of ids) activeOnDemandIds.add(id);\n\t\t}\n\t};\n\n\tconst createSyncRuntime = (\n\t\tctx: Parameters<SyncConfig<T>['sync']>[0],\n\t): BaseSyncRuntime<T> => {\n\t\tlet cleanupBaseLive: Cleanup = NOOP;\n\t\tlet cleanupUpdateLive: Cleanup = NOOP;\n\t\tlet killed = false;\n\n\t\tconst ensureBaseLive = async () => {\n\t\t\tif (cleanupBaseLive !== NOOP) return;\n\t\t\tif (!db.isFeatureSupported?.(Features.LiveQueries)) return;\n\t\t\tconst live = (await db.live(\n\t\t\t\ttableResource,\n\t\t\t)) as unknown as LiveSubscriptionLike;\n\t\t\tif (killed) {\n\t\t\t\tawait live.kill();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlive.subscribe(async (message) => {\n\t\t\t\tif (message.action === 'KILLED') return;\n\t\t\t\tconst row = message.value as Record<string, unknown>;\n\t\t\t\tconst id = toRecordKeyString(row.id as string | RecordId);\n\n\t\t\t\tconst wasVisible = activeOnDemandIds.has(id);\n\t\t\t\tif (\n\t\t\t\t\tisStrictOnDemand &&\n\t\t\t\t\t!wasVisible &&\n\t\t\t\t\tmessage.action !== 'DELETE'\n\t\t\t\t)\n\t\t\t\t\treturn;\n\n\t\t\t\tif (message.action === 'DELETE') {\n\t\t\t\t\tfor (const ids of subsetIds.values()) ids.delete(id);\n\t\t\t\t\tupdateActiveOnDemandIds();\n\t\t\t\t\tif (isStrictOnDemand && !wasVisible) return;\n\t\t\t\t\tctx.begin();\n\t\t\t\t\ttry {\n\t\t\t\t\t\tctx.write({\n\t\t\t\t\t\t\ttype: 'delete',\n\t\t\t\t\t\t\tkey: `${tableName}:${id}`,\n\t\t\t\t\t\t});\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tctx.commit();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst decoded = await decodeBaseRow(row);\n\t\t\t\tctx.begin();\n\t\t\t\ttry {\n\t\t\t\t\tctx.write({\n\t\t\t\t\t\ttype: message.action === 'CREATE' ? 'insert' : 'update',\n\t\t\t\t\t\tvalue: decoded,\n\t\t\t\t\t});\n\t\t\t\t} finally {\n\t\t\t\t\tctx.commit();\n\t\t\t\t}\n\t\t\t});\n\t\t\tcleanupBaseLive = () => {\n\t\t\t\tvoid live.kill().catch(() => undefined);\n\t\t\t\tcleanupBaseLive = NOOP;\n\t\t\t};\n\t\t};\n\n\t\tconst ensureUpdateLive = async () => {\n\t\t\tif (!crdtEnabled || !updatesTable) return;\n\t\t\tif (cleanupUpdateLive !== NOOP) return;\n\t\t\tif (!db.isFeatureSupported?.(Features.LiveQueries)) return;\n\n\t\t\tconst live = (await db.live(\n\t\t\t\tupdatesTable,\n\t\t\t)) as unknown as LiveSubscriptionLike;\n\t\t\tif (killed) {\n\t\t\t\tawait live.kill();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlive.subscribe(async (message) => {\n\t\t\t\tif (message.action === 'KILLED') return;\n\t\t\t\tif (message.action === 'DELETE') return;\n\n\t\t\t\tconst value = message.value as unknown as CRDTUpdateRow;\n\t\t\t\tconst id = idFromDocRef(value.doc);\n\n\t\t\t\tif (value.actor && value.actor === resolveActor(id)) return;\n\n\t\t\t\tif (isStrictOnDemand && !activeOnDemandIds.has(id)) return;\n\n\t\t\t\tconst doc = getDoc(id);\n\t\t\t\tconst bytes = await decodeUpdateBytes(value, 'update');\n\t\t\t\tif (!bytes.byteLength) return;\n\t\t\t\tdoc.import(bytes);\n\t\t\t\tconst materialized = normalizeRow(materializeCrdt(doc, id));\n\t\t\t\tctx.begin();\n\t\t\t\ttry {\n\t\t\t\t\tctx.write({ type: 'update', value: materialized });\n\t\t\t\t} finally {\n\t\t\t\t\tctx.commit();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcleanupUpdateLive = () => {\n\t\t\t\tvoid live.kill().catch(() => undefined);\n\t\t\t\tcleanupUpdateLive = NOOP;\n\t\t\t};\n\t\t};\n\n\t\tconst loadSubset = async (subset: LoadSubsetOptions) => {\n\t\t\tif (!isOnDemandLike) return;\n\t\t\tconst key = subsetCacheKey(subset);\n\t\t\tconst rows = await tableAccess.loadSubset(subset);\n\t\t\tconst ids = new Set(\n\t\t\t\t(rows as unknown as Array<Record<string, unknown>>).map((row) =>\n\t\t\t\t\ttoRecordKeyString(row.id as string | RecordId),\n\t\t\t\t),\n\t\t\t);\n\t\t\tsubsetIds.set(key, ids);\n\t\t\tupdateActiveOnDemandIds();\n\n\t\t\tif (!crdtEnabled) {\n\t\t\t\tawait hydratePlainRows(\n\t\t\t\t\trows as unknown as Array<Record<string, unknown>>,\n\t\t\t\t\tctx.write,\n\t\t\t\t\tctx.begin,\n\t\t\t\t\tctx.commit,\n\t\t\t\t\t'insert',\n\t\t\t\t);\n\t\t\t\tawait ensureBaseLive();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (const id of ids) {\n\t\t\t\tawait hydrateCrdtDoc(\n\t\t\t\t\tid,\n\t\t\t\t\tctx.write,\n\t\t\t\t\tctx.begin,\n\t\t\t\t\tctx.commit,\n\t\t\t\t\t'insert',\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait ensureUpdateLive();\n\t\t};\n\n\t\tconst unloadSubset = (subset: LoadSubsetOptions) => {\n\t\t\tif (!isOnDemandLike) return;\n\t\t\tconst key = subsetCacheKey(subset);\n\t\t\tsubsetIds.delete(key);\n\t\t\tupdateActiveOnDemandIds();\n\t\t\tif (subsetIds.size === 0) {\n\t\t\t\tcleanupBaseLive();\n\t\t\t\tcleanupUpdateLive();\n\t\t\t}\n\t\t};\n\n\t\tconst startRealtime = async () => {\n\t\t\tif (!crdtEnabled) {\n\t\t\t\tawait ensureBaseLive();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait ensureUpdateLive();\n\t\t};\n\n\t\tconst cleanup = () => {\n\t\t\tkilled = true;\n\t\t\tsubsetIds.clear();\n\t\t\tupdateActiveOnDemandIds();\n\t\t\tcleanupBaseLive();\n\t\t\tcleanupUpdateLive();\n\t\t};\n\n\t\treturn {\n\t\t\tstartRealtime,\n\t\t\tcleanup,\n\t\t\tloadSubset,\n\t\t\tunloadSubset,\n\t\t};\n\t};\n\n\tconst base = queryCollectionOptions({\n\t\tschema: createInsertSchema<T>(tableName),\n\t\tgetKey,\n\t\tqueryKey,\n\t\tqueryClient,\n\t\tsyncMode: queryDrivenSyncMode,\n\t\tqueryFn: async ({ meta }) => {\n\t\t\ttry {\n\t\t\t\tif (isOnDemandLike && !meta?.loadSubsetOptions) {\n\t\t\t\t\treturn [] as T[];\n\t\t\t\t}\n\n\t\t\t\tif (!crdtEnabled) {\n\t\t\t\t\tif (!isOnDemandLike) {\n\t\t\t\t\t\tconst rows = await toRecordArray(\n\t\t\t\t\t\t\tawait db.select(tableResource),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst decoded = await Promise.all(\n\t\t\t\t\t\t\trows.map((row) =>\n\t\t\t\t\t\t\t\tdecodeBaseRow(row as Record<string, unknown>),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn decoded;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst rows = await tableAccess.loadSubset(\n\t\t\t\t\t\tmeta?.loadSubsetOptions,\n\t\t\t\t\t);\n\t\t\t\t\tconst decoded = await Promise.all(\n\t\t\t\t\t\t(rows as unknown as Array<Record<string, unknown>>).map(\n\t\t\t\t\t\t\t(row) => decodeBaseRow(row),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\treturn decoded;\n\t\t\t\t}\n\n\t\t\t\tif (isOnDemandLike) return [] as T[];\n\n\t\t\t\tif (!updatesTableName) return [] as T[];\n\t\t\t\tconst updates = await queryRows<CRDTUpdateRow>(\n\t\t\t\t\tdb,\n\t\t\t\t\t`SELECT * FROM type::table($table) ORDER BY ts ASC;`,\n\t\t\t\t\t{ table: updatesTableName },\n\t\t\t\t);\n\t\t\t\tfor (const update of updates) {\n\t\t\t\t\tconst id = idFromDocRef(update.doc);\n\t\t\t\t\tconst doc = getDoc(id);\n\t\t\t\t\tconst bytes = await decodeUpdateBytes(update, 'update');\n\t\t\t\t\tif (!bytes.byteLength) continue;\n\t\t\t\t\tdoc.import(bytes);\n\t\t\t\t}\n\n\t\t\t\treturn [...docs.entries()].map(([id, doc]) =>\n\t\t\t\t\tnormalizeRow(materializeCrdt(doc, id)),\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tonError?.(error);\n\t\t\t\treturn [] as T[];\n\t\t\t}\n\t\t},\n\t\tonInsert: (async (params: InsertMutationFnParams<T>) => {\n\t\t\tconst out: T[] = [];\n\t\t\tconst writeUtils = getWriteUtils(params.collection.utils);\n\t\t\tfor (const mutation of params.transaction.mutations) {\n\t\t\t\tif (mutation.type !== 'insert') continue;\n\n\t\t\t\tconst normalized = normalizeRow(mutation.modified as T);\n\t\t\t\tif (!crdtEnabled) {\n\t\t\t\t\tconst idKey = toRecordKeyString(normalized.id);\n\t\t\t\t\tconst payload = omitUndefined({\n\t\t\t\t\t\t...(normalized as Record<string, unknown>),\n\t\t\t\t\t\tid: undefined,\n\t\t\t\t\t});\n\t\t\t\t\tconst recordPayload = await encodeBaseRow(payload, idKey);\n\n\t\t\t\t\tif (isTempId(normalized.id, tableName)) {\n\t\t\t\t\t\tconst created = await db\n\t\t\t\t\t\t\t.create(tableResource)\n\t\t\t\t\t\t\t.content(recordPayload);\n\t\t\t\t\t\tconst createdRow = firstRow(\n\t\t\t\t\t\t\ttoRecordArray(created as unknown as T | T[]),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst createdId =\n\t\t\t\t\t\t\tcreatedRow &&\n\t\t\t\t\t\t\t(createdRow as Record<string, unknown>).id\n\t\t\t\t\t\t\t\t? ((createdRow as Record<string, unknown>).id as\n\t\t\t\t\t\t\t\t\t\t| string\n\t\t\t\t\t\t\t\t\t\t| RecordId)\n\t\t\t\t\t\t\t\t: normalized.id;\n\t\t\t\t\t\tconst resolved = {\n\t\t\t\t\t\t\t...normalized,\n\t\t\t\t\t\t\tid: normalizeMutationId(createdId),\n\t\t\t\t\t\t} as T;\n\t\t\t\t\t\tout.push(resolved);\n\t\t\t\t\t\twriteUtils.writeUpsert?.(resolved);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tawait db.insert(tableResource, {\n\t\t\t\t\t\tid: normalizeMutationId(normalized.id),\n\t\t\t\t\t\t...recordPayload,\n\t\t\t\t\t});\n\t\t\t\t\tout.push(normalized);\n\t\t\t\t\twriteUtils.writeUpsert?.(normalized);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst id = toRecordKeyString(normalized.id);\n\t\t\t\tconst doc = getDoc(id);\n\t\t\t\tconst vv = doc.oplogVersion();\n\t\t\t\tconst localChange: LocalChange<T> = {\n\t\t\t\t\ttype: 'insert',\n\t\t\t\t\tvalue: normalized,\n\t\t\t\t};\n\t\t\t\tapplyCrdtLocalChange(doc, localChange);\n\t\t\t\tconst bytes = doc.export({ mode: 'update', from: vv });\n\t\t\t\tawait persistCrdtUpdate(id, bytes, localChange);\n\t\t\t\tconst materialized = normalizeRow(materializeCrdt(doc, id));\n\t\t\t\tawait persistMaterialized(materialized);\n\t\t\t\tout.push(materialized);\n\t\t\t\twriteUtils.writeUpsert?.(materialized);\n\t\t\t}\n\n\t\t\treturn out as unknown as StandardSchema<T>;\n\t\t}) as InsertMutationFn<T, string, UtilsRecord, StandardSchema<T>>,\n\t\tonUpdate: (async (params: UpdateMutationFnParams<T>) => {\n\t\t\tconst writeUtils = getWriteUtils(params.collection.utils);\n\t\t\tfor (const mutation of params.transaction.mutations) {\n\t\t\t\tif (mutation.type !== 'update') continue;\n\t\t\t\tconst mutationId = normalizeMutationId(\n\t\t\t\t\tmutation.key as RecordId | string,\n\t\t\t\t);\n\t\t\t\tconst normalizedModified = omitUndefined(\n\t\t\t\t\tnormalizeRecordIdLikeFields({\n\t\t\t\t\t\t...(mutation.modified as Record<string, unknown>),\n\t\t\t\t\t}) as Record<string, unknown>,\n\t\t\t\t);\n\t\t\t\tconst normalized = normalizeRow({\n\t\t\t\t\t...(normalizedModified as Partial<T>),\n\t\t\t\t\tid: mutationId,\n\t\t\t\t} as T);\n\n\t\t\t\tif (!crdtEnabled) {\n\t\t\t\t\tif (!e2eeEnabled) {\n\t\t\t\t\t\tawait db.update(mutationId).merge(normalizedModified);\n\t\t\t\t\t\twriteUtils.writeUpsert?.(normalized);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst current = await db.select(mutationId);\n\t\t\t\t\tconst currentRows = toRecordArray(\n\t\t\t\t\t\tcurrent as unknown as\n\t\t\t\t\t\t\t| Record<string, unknown>\n\t\t\t\t\t\t\t| Array<Record<string, unknown>>,\n\t\t\t\t\t);\n\t\t\t\t\tconst currentRow = currentRows[0];\n\t\t\t\t\tconst decodedCurrent = currentRow\n\t\t\t\t\t\t? await decodeBaseRow(currentRow)\n\t\t\t\t\t\t: ({ id: mutationId } as T);\n\t\t\t\t\tconst merged = {\n\t\t\t\t\t\t...(decodedCurrent as Record<string, unknown>),\n\t\t\t\t\t\t...(normalizedModified as Record<string, unknown>),\n\t\t\t\t\t};\n\t\t\t\t\tdelete merged.id;\n\t\t\t\t\tconst encoded = await encodeBaseRow(\n\t\t\t\t\t\tomitUndefined(merged),\n\t\t\t\t\t\ttoRecordKeyString(mutationId),\n\t\t\t\t\t);\n\t\t\t\t\tawait db.update(mutationId).merge(encoded);\n\t\t\t\t\twriteUtils.writeUpsert?.(\n\t\t\t\t\t\tnormalizeRow({ ...decodedCurrent, ...merged } as T),\n\t\t\t\t\t);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst id = toRecordKeyString(mutationId);\n\t\t\t\tconst doc = getDoc(id);\n\t\t\t\tconst vv = doc.oplogVersion();\n\t\t\t\tconst localChange: LocalChange<T> = {\n\t\t\t\t\ttype: 'update',\n\t\t\t\t\tvalue: normalized,\n\t\t\t\t};\n\t\t\t\tapplyCrdtLocalChange(doc, localChange);\n\t\t\t\tconst bytes = doc.export({ mode: 'update', from: vv });\n\t\t\t\tawait persistCrdtUpdate(id, bytes, localChange);\n\t\t\t\tconst materialized = normalizeRow(materializeCrdt(doc, id));\n\t\t\t\tawait persistMaterialized(materialized);\n\t\t\t\twriteUtils.writeUpsert?.(materialized);\n\t\t\t}\n\t\t\treturn { refetch: false } as unknown as StandardSchema<T>;\n\t\t}) as UpdateMutationFn<T, string, UtilsRecord, StandardSchema<T>>,\n\t\tonDelete: (async (params: DeleteMutationFnParams<T>) => {\n\t\t\tconst writeUtils = getWriteUtils(params.collection.utils);\n\t\t\tfor (const mutation of params.transaction.mutations) {\n\t\t\t\tif (mutation.type !== 'delete') continue;\n\t\t\t\tconst mutationId = normalizeMutationId(\n\t\t\t\t\tmutation.key as RecordId | string,\n\t\t\t\t);\n\t\t\t\tconst id = toRecordKeyString(mutationId);\n\t\t\t\tif (!crdtEnabled) {\n\t\t\t\t\tawait db.delete(mutationId);\n\t\t\t\t\twriteUtils.writeDelete?.(`${tableName}:${id}`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst doc = getDoc(id);\n\t\t\t\tconst vv = doc.oplogVersion();\n\t\t\t\tconst localChange: LocalChange<T> = {\n\t\t\t\t\ttype: 'delete',\n\t\t\t\t\tvalue: { id: mutationId } as T,\n\t\t\t\t};\n\t\t\t\tapplyCrdtLocalChange(doc, localChange);\n\t\t\t\tconst bytes = doc.export({ mode: 'update', from: vv });\n\t\t\t\tawait persistCrdtUpdate(id, bytes, localChange);\n\t\t\t\twriteUtils.writeDelete?.(`${tableName}:${id}`);\n\t\t\t}\n\t\t\treturn { refetch: false } as unknown as StandardSchema<T>;\n\t\t}) as DeleteMutationFn<T, string, UtilsRecord, StandardSchema<T>>,\n\t} as never) as SurrealCollectionOptionsReturn<T>;\n\n\tconst baseSync = base.sync?.sync;\n\tconst sync = baseSync\n\t\t? {\n\t\t\t\tsync: (ctx: Parameters<NonNullable<typeof baseSync>>[0]) => {\n\t\t\t\t\tconst canRunBaseSync =\n\t\t\t\t\t\ttypeof (ctx.collection as { on?: unknown })?.on ===\n\t\t\t\t\t\t'function';\n\t\t\t\t\tconst baseResult = canRunBaseSync\n\t\t\t\t\t\t? baseSync(ctx)\n\t\t\t\t\t\t: undefined;\n\t\t\t\t\tconst baseCleanup =\n\t\t\t\t\t\ttypeof baseResult === 'function'\n\t\t\t\t\t\t\t? baseResult\n\t\t\t\t\t\t\t: typeof baseResult === 'object' &&\n\t\t\t\t\t\t\t\t\tbaseResult &&\n\t\t\t\t\t\t\t\t\t'cleanup' in baseResult &&\n\t\t\t\t\t\t\t\t\ttypeof (\n\t\t\t\t\t\t\t\t\t\tbaseResult as {\n\t\t\t\t\t\t\t\t\t\t\tcleanup?: unknown;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t).cleanup === 'function'\n\t\t\t\t\t\t\t\t? (\n\t\t\t\t\t\t\t\t\t\tbaseResult as {\n\t\t\t\t\t\t\t\t\t\t\tcleanup: Cleanup;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t).cleanup\n\t\t\t\t\t\t\t\t: NOOP;\n\t\t\t\t\tconst runtime = createSyncRuntime(\n\t\t\t\t\t\tctx as Parameters<SyncConfig<T>['sync']>[0],\n\t\t\t\t\t);\n\n\t\t\t\t\tconst start = async () => {\n\t\t\t\t\t\tif (!isOnDemandLike) {\n\t\t\t\t\t\t\tif (!crdtEnabled) {\n\t\t\t\t\t\t\t\tconst rows = toRecordArray(\n\t\t\t\t\t\t\t\t\tawait db.select(tableResource),\n\t\t\t\t\t\t\t\t) as Array<Record<string, unknown>>;\n\t\t\t\t\t\t\t\tawait hydratePlainRows(\n\t\t\t\t\t\t\t\t\trows,\n\t\t\t\t\t\t\t\t\tctx.write,\n\t\t\t\t\t\t\t\t\tctx.begin,\n\t\t\t\t\t\t\t\t\tctx.commit,\n\t\t\t\t\t\t\t\t\t'insert',\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tawait runtime.startRealtime();\n\t\t\t\t\t\t\t\tctx.markReady();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (updatesTableName) {\n\t\t\t\t\t\t\t\tconst updates = await queryRows<CRDTUpdateRow>(\n\t\t\t\t\t\t\t\t\tdb,\n\t\t\t\t\t\t\t\t\t`SELECT * FROM type::table($table) ORDER BY ts ASC;`,\n\t\t\t\t\t\t\t\t\t{ table: updatesTableName },\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tfor (const update of updates) {\n\t\t\t\t\t\t\t\t\tconst id = idFromDocRef(update.doc);\n\t\t\t\t\t\t\t\t\tconst doc = getDoc(id);\n\t\t\t\t\t\t\t\t\tconst bytes = await decodeUpdateBytes(\n\t\t\t\t\t\t\t\t\t\tupdate,\n\t\t\t\t\t\t\t\t\t\t'update',\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tif (!bytes.byteLength) continue;\n\t\t\t\t\t\t\t\t\tdoc.import(bytes);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tctx.begin();\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tfor (const [id, doc] of docs.entries()) {\n\t\t\t\t\t\t\t\t\t\tctx.write({\n\t\t\t\t\t\t\t\t\t\t\ttype: 'insert',\n\t\t\t\t\t\t\t\t\t\t\tvalue: normalizeRow(\n\t\t\t\t\t\t\t\t\t\t\t\tmaterializeCrdt(doc, id),\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\t\tctx.commit();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tawait runtime.startRealtime();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tctx.markReady();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tctx.markReady();\n\t\t\t\t\t\tif (syncMode === 'progressive') {\n\t\t\t\t\t\t\tvoid runtime\n\t\t\t\t\t\t\t\t.loadSubset({})\n\t\t\t\t\t\t\t\t.catch((error) => onError?.(error));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tvoid start().catch((error) => onError?.(error));\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcleanup: () => {\n\t\t\t\t\t\t\truntime.cleanup();\n\t\t\t\t\t\t\tbaseCleanup();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tloadSubset: async (subset) => {\n\t\t\t\t\t\t\tawait runtime.loadSubset(subset);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tunloadSubset: (subset) => {\n\t\t\t\t\t\t\truntime.unloadSubset(subset);\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t}\n\t\t: undefined;\n\n\treturn {\n\t\t...base,\n\t\tsync: sync ?? base.sync,\n\t} as SurrealCollectionOptionsReturn<T>;\n}\n\nexport function surrealCollectionOptions<T extends SyncedTable<object>>(\n\tconfig: SurrealCollectionOptions<T>,\n): CollectionConfig<\n\tT,\n\tstring,\n\tStandardSchemaV1<MutationInput<T>, T>,\n\tUtilsRecord\n> & {\n\tschema: StandardSchemaV1<MutationInput<T>, T>;\n\tutils: UtilsRecord;\n} {\n\treturn modernSurrealCollectionOptions(config);\n}\n\ndeclare module '@tanstack/db' {\n\tinterface Collection<\n\t\tT extends object = Record<string, unknown>,\n\t\tTKey extends string | number = string | number,\n\t\tTUtils extends UtilsRecord = UtilsRecord,\n\t\tTSchema extends StandardSchemaV1 = StandardSchemaV1,\n\t\tTInsertInput extends object = T,\n\t> {\n\t\tdelete(\n\t\t\tkeys: Array<TKey | RecordId | string> | TKey | RecordId | string,\n\t\t\tconfig?: OperationConfig,\n\t\t): Transaction<any>;\n\t}\n}\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -291,10 +291,10 @@ var mapRelationPath = (path, relation) => {
|
|
|
291
291
|
var normalizeFilterValue = (value) => {
|
|
292
292
|
if (Array.isArray(value))
|
|
293
293
|
return value.map((item) => normalizeFilterValue(item));
|
|
294
|
-
if (value && typeof value === "object")
|
|
295
|
-
return normalizeRecordIdLikeValue(value);
|
|
296
294
|
const native = toNativeRecordIdLikeValue(value);
|
|
297
295
|
if (native !== value) return native;
|
|
296
|
+
if (value && typeof value === "object")
|
|
297
|
+
return normalizeRecordIdLikeValue(value);
|
|
298
298
|
return normalizeRecordIdLikeValue(value);
|
|
299
299
|
};
|
|
300
300
|
var toSqlFragment = (value) => {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/crdt.ts","../src/id.ts","../src/table.ts","../src/util.ts","../src/encryption/index.ts","../src/index.ts"],"names":["canonical","Table","firstRow","RecordId","Features","rows","decoded"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { LoroDoc } from 'loro-crdt';\nimport type { LocalChange } from './types';\nimport type { CRDTProfileAdapter } from './crdt/types';\n\nexport type LoroProfile = 'json' | 'richtext';\n\nconst toRecord = (value: unknown): Record<string, unknown> =>\n\ttypeof value === 'object' && value !== null\n\t\t? (value as Record<string, unknown>)\n\t\t: {};\n\nexport const materializeLoroJson = <T extends object>(\n\tdoc: LoroDoc,\n\tid: string,\n): T => {\n\tconst root = toRecord(doc.getMap('root').toJSON());\n\treturn {\n\t\tid,\n\t\t...root,\n\t} as unknown as T;\n};\n\nexport const applyLoroJsonChange = <T extends object>(\n\tdoc: LoroDoc,\n\tchange: LocalChange<T>,\n): void => {\n\tconst root = doc.getMap('root');\n\tif (change.type === 'delete') {\n\t\troot.set('deleted', true);\n\t\treturn;\n\t}\n\tconst value = toRecord(change.value);\n\tfor (const [key, fieldValue] of Object.entries(value)) {\n\t\tif (key === 'id') continue;\n\t\troot.set(key, fieldValue);\n\t}\n};\n\nexport const materializeLoroRichtext = <T extends object>(\n\tdoc: LoroDoc,\n\tid: string,\n): T => {\n\tconst metadata = toRecord(doc.getMap('root').toJSON());\n\tconst content = doc.getText('content').toString();\n\treturn {\n\t\tid,\n\t\tcontent,\n\t\t...metadata,\n\t} as unknown as T;\n};\n\nexport const applyLoroRichtextChange = <T extends object>(\n\tdoc: LoroDoc,\n\tchange: LocalChange<T>,\n): void => {\n\tconst text = doc.getText('content');\n\tconst metadata = doc.getMap('root');\n\tif (change.type === 'delete') {\n\t\tmetadata.set('deleted', true);\n\t\treturn;\n\t}\n\tconst value = toRecord(change.value);\n\tfor (const [key, fieldValue] of Object.entries(value)) {\n\t\tif (key === 'id') continue;\n\t\tif (key === 'content') {\n\t\t\tif (typeof fieldValue === 'string') text.update(fieldValue);\n\t\t\tcontinue;\n\t\t}\n\t\tmetadata.set(key, fieldValue);\n\t}\n};\n\nexport const createLoroProfile = <T extends object = Record<string, unknown>>(\n\tprofile: LoroProfile,\n): CRDTProfileAdapter<T> => {\n\tif (profile === 'richtext') {\n\t\treturn {\n\t\t\tmaterialize: materializeLoroRichtext as CRDTProfileAdapter<T>['materialize'],\n\t\t\tapplyLocalChange:\n\t\t\t\tapplyLoroRichtextChange as CRDTProfileAdapter<T>['applyLocalChange'],\n\t\t};\n\t}\n\n\treturn {\n\t\tmaterialize: materializeLoroJson as CRDTProfileAdapter<T>['materialize'],\n\t\tapplyLocalChange:\n\t\t\tapplyLoroJsonChange as CRDTProfileAdapter<T>['applyLocalChange'],\n\t};\n};\n","import { RecordId } from 'surrealdb';\n\nconst recordIdIdentityPool = new Map<string, unknown>();\nconst nativeRecordIdPool = new Map<string, RecordId>();\n\nconst internRecordIdIdentity = (\n\tcanonical: string,\n\tpreferred?: unknown,\n): unknown => {\n\tconst cached = recordIdIdentityPool.get(canonical);\n\tif (cached !== undefined) return cached;\n\tconst created = preferred ?? canonicalToNativeRecordId(canonical);\n\trecordIdIdentityPool.set(canonical, created);\n\treturn created;\n};\n\nconst getNativeRecordId = (canonical: string): RecordId => {\n\tconst cached = nativeRecordIdPool.get(canonical);\n\tif (cached) return cached;\n\tconst created = canonicalToNativeRecordId(canonical);\n\tnativeRecordIdPool.set(canonical, created);\n\treturn created;\n};\n\nconst canonicalToNativeRecordId = (canonical: string): RecordId => {\n\tconst idx = canonical.indexOf(':');\n\tconst table = canonical.slice(0, idx);\n\tconst key = canonical.slice(idx + 1);\n\treturn new RecordId(table, key);\n};\n\nexport const stripOuterQuotes = (value: string): string => {\n\tconst trimmed = value.trim();\n\tconst isSingleQuoted =\n\t\ttrimmed.startsWith(\"'\") && trimmed.endsWith(\"'\") && trimmed.length >= 2;\n\tconst isDoubleQuoted =\n\t\ttrimmed.startsWith('\"') && trimmed.endsWith('\"') && trimmed.length >= 2;\n\tconst isBacktickQuoted =\n\t\ttrimmed.startsWith('`') && trimmed.endsWith('`') && trimmed.length >= 2;\n\treturn isSingleQuoted || isDoubleQuoted || isBacktickQuoted\n\t\t? trimmed.slice(1, -1)\n\t\t: trimmed;\n};\n\nexport const toRecordIdString = (rid: RecordId | string): string => {\n\tconst raw =\n\t\ttypeof rid === 'string' ? stripOuterQuotes(rid) : rid.toString();\n\tconst trimmed = stripOuterQuotes(raw).trim();\n\tconst idx = trimmed.indexOf(':');\n\tif (idx <= 0 || idx >= trimmed.length - 1) return trimmed;\n\n\tconst table = trimmed.slice(0, idx).trim();\n\tconst key = stripOuterQuotes(\n\t\tstripAngleBrackets(stripOuterQuotes(trimmed.slice(idx + 1).trim())),\n\t);\n\tif (!table || !key) return trimmed;\n\treturn `${table}:${key}`;\n};\n\nconst stripAngleBrackets = (value: string): string => {\n\tconst trimmed = value.trim();\n\tconst isSurrealAngles =\n\t\ttrimmed.startsWith('⟨') && trimmed.endsWith('⟩') && trimmed.length >= 2;\n\tconst isAsciiAngles =\n\t\ttrimmed.startsWith('<') && trimmed.endsWith('>') && trimmed.length >= 2;\n\treturn isSurrealAngles || isAsciiAngles\n\t\t? trimmed.slice(1, -1).trim()\n\t\t: trimmed;\n};\n\nexport const toRecordKeyString = (rid: RecordId | string): string => {\n\tconst normalized = toRecordIdString(rid);\n\tconst idx = normalized.indexOf(':');\n\tconst rawKey = idx > 0 ? normalized.slice(idx + 1) : normalized;\n\treturn stripOuterQuotes(rawKey.trim());\n};\n\nconst isRecordIdString = (value: string): boolean => {\n\tconst idx = value.indexOf(':');\n\treturn idx > 0 && idx < value.length - 1;\n};\n\nconst looksLikeTableName = (value: string): boolean =>\n\t/^[A-Za-z_][A-Za-z0-9_-]*$/.test(value);\n\ntype SurrealRecordIdLike = {\n\ttable: unknown;\n\tid: unknown;\n\ttoString: () => unknown;\n\tconstructor?: { name?: string };\n};\n\nconst getCtorName = (value: unknown): string | undefined => {\n\tif (!value || typeof value !== 'object') return undefined;\n\tconst ctor = (value as { constructor?: { name?: unknown } }).constructor;\n\treturn typeof ctor?.name === 'string' ? ctor.name : undefined;\n};\n\nconst isCrossRuntimeRecordIdObject = (\n\tvalue: unknown,\n): value is SurrealRecordIdLike => {\n\tif (!value || typeof value !== 'object' || value instanceof RecordId) {\n\t\treturn false;\n\t}\n\tconst obj = value as Partial<SurrealRecordIdLike>;\n\tif (typeof obj.toString !== 'function') return false;\n\tif (!('table' in obj) || !('id' in obj)) return false;\n\tconst ctorName = getCtorName(value);\n\t// SurrealDB instances can be RecordId/RecordId2/etc across CJS/ESM bundles.\n\tif (!ctorName || !/^RecordId\\d*$/.test(ctorName)) return false;\n\n\tconst tableValue = obj.table;\n\tconst table =\n\t\ttypeof tableValue === 'string'\n\t\t\t? tableValue\n\t\t\t: tableValue != null\n\t\t\t\t? String(tableValue)\n\t\t\t\t: '';\n\tconst idValue = obj.id;\n\tconst idIsPrimitive =\n\t\ttypeof idValue === 'string' ||\n\t\ttypeof idValue === 'number' ||\n\t\ttypeof idValue === 'bigint';\n\treturn idIsPrimitive && looksLikeTableName(stripOuterQuotes(table).trim());\n};\n\nconst toCanonicalRecordIdString = (value: string): string | undefined => {\n\tconst normalized = toRecordIdString(value);\n\tif (!isRecordIdString(normalized)) return undefined;\n\n\tconst idx = normalized.indexOf(':');\n\tconst table = stripOuterQuotes(normalized.slice(0, idx).trim());\n\tconst key = normalized.slice(idx + 1).trim();\n\tif (!table || !key || !looksLikeTableName(table)) return undefined;\n\treturn `${table}:${key}`;\n};\n\nconst unwrapIdWrapper = (value: unknown): unknown => {\n\tif (!value || typeof value !== 'object') return undefined;\n\tconst obj = value as Record<string, unknown>;\n\tconst keys = Object.keys(obj);\n\tif (keys.length !== 1 || keys[0] !== 'id') return undefined;\n\treturn obj.id;\n};\n\nconst asCanonicalRecordIdFromCrossRuntimeObject = (\n\tvalue: unknown,\n): string | undefined => {\n\tif (!isCrossRuntimeRecordIdObject(value)) return undefined;\n\tconst obj = value as SurrealRecordIdLike;\n\tconst tableRaw =\n\t\ttypeof obj.table === 'string' ? obj.table : String(obj.table);\n\tconst table = stripOuterQuotes(tableRaw).trim();\n\tconst id = String(obj.id);\n\tconst fromFields =\n\t\ttable && id && looksLikeTableName(table) ? `${table}:${id}` : undefined;\n\tif (fromFields) return toCanonicalRecordIdString(fromFields);\n\treturn toCanonicalRecordIdString(String(obj.toString()));\n};\n\nexport const asCanonicalRecordIdString = (\n\tvalue: unknown,\n): string | undefined => {\n\tif (typeof value === 'string') {\n\t\treturn toCanonicalRecordIdString(value);\n\t}\n\tif (value instanceof RecordId) {\n\t\treturn toCanonicalRecordIdString(value.toString());\n\t}\n\tconst crossRuntimeCanonical =\n\t\tasCanonicalRecordIdFromCrossRuntimeObject(value);\n\tif (crossRuntimeCanonical) return crossRuntimeCanonical;\n\tconst wrappedId = unwrapIdWrapper(value);\n\tif (wrappedId === undefined || wrappedId === value) return undefined;\n\treturn asCanonicalRecordIdString(wrappedId);\n};\n\nexport const toNativeRecordIdLikeValue = (value: unknown): unknown => {\n\tif (value instanceof RecordId) {\n\t\tconst canonical = asCanonicalRecordIdString(value);\n\t\tif (!canonical) return value;\n\t\treturn getNativeRecordId(canonical);\n\t}\n\tconst canonical = asCanonicalRecordIdString(value);\n\tif (!canonical) return value;\n\treturn getNativeRecordId(canonical);\n};\n\nexport const preferRecordIdLikeIdentity = (value: unknown): unknown => {\n\tconst canonical = asCanonicalRecordIdString(value);\n\tif (!canonical) return normalizeRecordIdLikeValue(value);\n\n\tif (value instanceof RecordId) {\n\t\trecordIdIdentityPool.set(canonical, value);\n\t\treturn value;\n\t}\n\n\tif (isCrossRuntimeRecordIdObject(value)) {\n\t\trecordIdIdentityPool.set(canonical, value);\n\t\treturn value;\n\t}\n\n\tconst wrappedId = unwrapIdWrapper(value);\n\tif (wrappedId instanceof RecordId) {\n\t\trecordIdIdentityPool.set(canonical, wrappedId);\n\t\treturn wrappedId;\n\t}\n\tif (isCrossRuntimeRecordIdObject(wrappedId)) {\n\t\trecordIdIdentityPool.set(canonical, wrappedId);\n\t\treturn wrappedId;\n\t}\n\n\treturn internRecordIdIdentity(canonical);\n};\n\nexport const preferRecordIdLikeIdentityDeep = <T>(value: T): T => {\n\tconst preferred = preferRecordIdLikeIdentity(value);\n\n\tif (Array.isArray(preferred)) {\n\t\treturn preferred.map((item) =>\n\t\t\tpreferRecordIdLikeIdentityDeep(item),\n\t\t) as T;\n\t}\n\n\tif (isPlainObject(preferred)) {\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const [k, v] of Object.entries(preferred)) {\n\t\t\tout[k] = preferRecordIdLikeIdentityDeep(v);\n\t\t}\n\t\treturn out as T;\n\t}\n\n\treturn preferred as T;\n};\n\nexport const normalizeRecordIdLikeValue = (value: unknown): unknown => {\n\tif (value instanceof RecordId) {\n\t\tconst canonical = asCanonicalRecordIdString(value);\n\t\tif (!canonical) return value;\n\t\treturn internRecordIdIdentity(canonical, value);\n\t}\n\tif (typeof value === 'object' && value !== null) {\n\t\tconst canonical = asCanonicalRecordIdString(value);\n\t\tif (!canonical) return value;\n\n\t\tif (isCrossRuntimeRecordIdObject(value)) {\n\t\t\treturn internRecordIdIdentity(canonical, value);\n\t\t}\n\n\t\tconst wrappedId = unwrapIdWrapper(value);\n\t\tif (\n\t\t\twrappedId instanceof RecordId ||\n\t\t\tisCrossRuntimeRecordIdObject(wrappedId)\n\t\t) {\n\t\t\treturn internRecordIdIdentity(canonical, wrappedId);\n\t\t}\n\n\t\treturn internRecordIdIdentity(canonical);\n\t}\n\tif (typeof value !== 'string') return value;\n\n\tconst trimmed = value.trim();\n\tconst unquoted = stripOuterQuotes(trimmed);\n\tconst canonical =\n\t\ttoCanonicalRecordIdString(unquoted) ??\n\t\t(unquoted === trimmed ? undefined : toCanonicalRecordIdString(trimmed));\n\tif (canonical) {\n\t\treturn internRecordIdIdentity(canonical);\n\t}\n\n\t// Keep original value shape if it isn't record-id-like\n\treturn value;\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' &&\n\tvalue !== null &&\n\tObject.getPrototypeOf(value) === Object.prototype;\n\nexport const normalizeRecordIdLikeValueDeep = <T>(value: T): T => {\n\tconst normalized = normalizeRecordIdLikeValue(value);\n\n\tif (Array.isArray(normalized)) {\n\t\treturn normalized.map((item) =>\n\t\t\tnormalizeRecordIdLikeValueDeep(item),\n\t\t) as T;\n\t}\n\n\tif (isPlainObject(normalized)) {\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const [k, v] of Object.entries(normalized)) {\n\t\t\tout[k] = normalizeRecordIdLikeValueDeep(v);\n\t\t}\n\t\treturn out as T;\n\t}\n\n\treturn normalized as T;\n};\n\nexport const normalizeRecordIdLikeFields = <T extends Record<string, unknown>>(\n\tdata: T,\n): T => {\n\tconst out: Record<string, unknown> = {};\n\tfor (const [k, v] of Object.entries(data)) {\n\t\tout[k] = normalizeRecordIdLikeValue(v);\n\t}\n\treturn out as T;\n};\n\nexport const toRecordId = (\n\ttableName: string,\n\tid: RecordId | string,\n): RecordId => {\n\tif (id instanceof RecordId) {\n\t\treturn id;\n\t}\n\n\tconst normalized = toRecordIdString(id);\n\tconst prefixed = `${tableName}:`;\n\tconst key = normalized.startsWith(prefixed)\n\t\t? normalized.slice(prefixed.length)\n\t\t: normalized;\n\treturn new RecordId(tableName, key);\n};\n","import { parseOrderByExpression, parseWhereExpression } from '@tanstack/db';\nimport {\n\tFeatures,\n\ttype LiveMessage,\n\ttype LiveSubscription,\n\ttype RecordId,\n\ttype Surreal,\n\tTable,\n} from 'surrealdb';\nimport {\n\tnormalizeRecordIdLikeValue,\n\ttoNativeRecordIdLikeValue,\n\ttoRecordId,\n} from './id';\nimport type { SurrealSubset, TableOptions } from './types';\n\ntype QueryResult<T> = T[] | null;\ntype RowResult<T> = T | T[] | null;\ntype FieldPath = Array<string | number>;\ntype SqlFragment = { sql: string };\n\nconst IDENTIFIER_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\nconst firstRow = <T>(res: RowResult<T>): T | undefined => {\n\tif (!res) return undefined;\n\tif (Array.isArray(res)) return res[0];\n\treturn res;\n};\n\nconst toFieldPath = (value: unknown): FieldPath => {\n\tif (!Array.isArray(value)) {\n\t\tthrow new Error('Expected a field path array in where expression.');\n\t}\n\treturn value as FieldPath;\n};\n\nconst quoteIdentifier = (segment: string): string => {\n\tif (IDENTIFIER_RE.test(segment)) return segment;\n\treturn `\\`${segment.replaceAll('`', '\\\\`')}\\``;\n};\n\nconst formatFieldPath = (path: FieldPath): string => {\n\tlet out = '';\n\tfor (const segment of path) {\n\t\tif (typeof segment === 'number') {\n\t\t\tout += `[${segment}]`;\n\t\t\tcontinue;\n\t\t}\n\t\tconst next = quoteIdentifier(segment);\n\t\tout = out ? `${out}.${next}` : next;\n\t}\n\treturn out;\n};\n\nconst isReferencePathCandidate = (value: unknown): value is FieldPath =>\n\tArray.isArray(value) &&\n\tvalue.length > 0 &&\n\ttypeof value[0] === 'string' &&\n\tvalue.every(\n\t\t(segment) => typeof segment === 'string' || typeof segment === 'number',\n\t);\n\nconst mapRelationPath = (path: FieldPath, relation?: boolean): FieldPath => {\n\tif (!relation) return path;\n\tif (path[0] === 'from') return ['in', ...path.slice(1)];\n\tif (path[0] === 'to') return ['out', ...path.slice(1)];\n\treturn path;\n};\n\nconst normalizeFilterValue = (value: unknown): unknown => {\n\tif (Array.isArray(value))\n\t\treturn value.map((item) => normalizeFilterValue(item));\n\tif (value && typeof value === 'object')\n\t\treturn normalizeRecordIdLikeValue(value);\n\n\tconst native = toNativeRecordIdLikeValue(value);\n\tif (native !== value) return native;\n\treturn normalizeRecordIdLikeValue(value);\n};\n\nconst toSqlFragment = (value: unknown): SqlFragment => {\n\tif (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\t'sql' in value &&\n\t\ttypeof (value as { sql: unknown }).sql === 'string'\n\t) {\n\t\treturn value as SqlFragment;\n\t}\n\tthrow new Error('Unsupported where expression node.');\n};\n\nconst joinLogical = (op: 'AND' | 'OR', args: Array<unknown>): SqlFragment => {\n\tconst parts = args.map(toSqlFragment).map((frag) => frag.sql);\n\tif (parts.length === 0) {\n\t\treturn { sql: op === 'AND' ? 'true' : 'false' };\n\t}\n\tif (parts.length === 1) return { sql: parts[0] };\n\treturn {\n\t\tsql: parts.map((part) => `(${part})`).join(` ${op} `),\n\t};\n};\n\nconst buildSubsetQuery = (\n\ttable: TableOptions,\n\tsubset?: SurrealSubset,\n): { sql: string; params: Record<string, unknown> } => {\n\tlet paramIdx = 0;\n\tconst params: Record<string, unknown> = { table: table.name };\n\tconst nextParam = (value: unknown): string => {\n\t\tconst key = `p${paramIdx++}`;\n\t\tparams[key] = value;\n\t\treturn `$${key}`;\n\t};\n\tconst comparison = (\n\t\tfieldPath: unknown,\n\t\top: '=' | '!=' | '>' | '>=' | '<' | '<=' | 'LIKE',\n\t\tvalue: unknown,\n\t): SqlFragment => {\n\t\tconst field = formatFieldPath(\n\t\t\tmapRelationPath(toFieldPath(fieldPath), table.relation),\n\t\t);\n\n\t\tif (value === undefined) {\n\t\t\tif (op === '=') return { sql: `${field} IS NONE` };\n\t\t\tif (op === '!=') return { sql: `${field} IS NOT NONE` };\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot compare field '${field}' with undefined using '${op}'.`,\n\t\t\t);\n\t\t}\n\n\t\tif (isReferencePathCandidate(value)) {\n\t\t\tthrow new Error(\n\t\t\t\t'Got a field reference on the right side of a where comparison. Pass a concrete value.',\n\t\t\t);\n\t\t}\n\t\treturn {\n\t\t\tsql: `${field} ${op} ${nextParam(normalizeFilterValue(value))}`,\n\t\t};\n\t};\n\tconst whereSqlFrom = (\n\t\texpr: NonNullable<SurrealSubset['where']>,\n\t): string => {\n\t\tconst fragment = parseWhereExpression<SqlFragment>(expr, {\n\t\t\thandlers: {\n\t\t\t\tand: (...args) => joinLogical('AND', args),\n\t\t\t\tor: (...args) => joinLogical('OR', args),\n\t\t\t\tnot: (arg) => ({ sql: `NOT (${toSqlFragment(arg).sql})` }),\n\t\t\t\teq: (field, value) => comparison(field, '=', value),\n\t\t\t\tgt: (field, value) => comparison(field, '>', value),\n\t\t\t\tgte: (field, value) => comparison(field, '>=', value),\n\t\t\t\tlt: (field, value) => comparison(field, '<', value),\n\t\t\t\tlte: (field, value) => comparison(field, '<=', value),\n\t\t\t\tlike: (field, value) => comparison(field, 'LIKE', value),\n\t\t\t\tilike: (field, value) => {\n\t\t\t\t\tconst f = formatFieldPath(\n\t\t\t\t\t\tmapRelationPath(toFieldPath(field), table.relation),\n\t\t\t\t\t);\n\t\t\t\t\tconst p = nextParam(normalizeFilterValue(value));\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsql: `string::lower(${f}) LIKE string::lower(${p})`,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tin: (field, value) => {\n\t\t\t\t\tconst f = formatFieldPath(\n\t\t\t\t\t\tmapRelationPath(toFieldPath(field), table.relation),\n\t\t\t\t\t);\n\t\t\t\t\tif (Array.isArray(value) && value.length === 0) {\n\t\t\t\t\t\treturn { sql: 'false' };\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsql: `${f} IN ${nextParam(normalizeFilterValue(value))}`,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tisNull: (field) => ({\n\t\t\t\t\tsql: `${formatFieldPath(\n\t\t\t\t\t\tmapRelationPath(toFieldPath(field), table.relation),\n\t\t\t\t\t)} IS NULL`,\n\t\t\t\t}),\n\t\t\t\tisUndefined: (field) => ({\n\t\t\t\t\tsql: `${formatFieldPath(\n\t\t\t\t\t\tmapRelationPath(toFieldPath(field), table.relation),\n\t\t\t\t\t)} IS NONE`,\n\t\t\t\t}),\n\t\t\t},\n\t\t\tonUnknownOperator: (op) => {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Unsupported where operator '${op}' for SurrealQL translation.`,\n\t\t\t\t);\n\t\t\t},\n\t\t});\n\n\t\tif (!fragment) return '';\n\t\treturn fragment.sql;\n\t};\n\n\tconst whereParts: string[] = [];\n\tif (subset?.where) {\n\t\tconst parsed = whereSqlFrom(subset.where);\n\t\tif (parsed) whereParts.push(parsed);\n\t}\n\tif (subset?.cursor?.whereFrom) {\n\t\tconst cursorWhere = whereSqlFrom(subset.cursor.whereFrom);\n\t\tif (cursorWhere) whereParts.push(cursorWhere);\n\t}\n\n\tconst whereSql = whereParts.length\n\t\t? ` WHERE ${whereParts.map((part) => `(${part})`).join(' AND ')}`\n\t\t: '';\n\n\tconst order = parseOrderByExpression(subset?.orderBy);\n\tconst orderSql = order.length\n\t\t? ` ORDER BY ${order\n\t\t\t\t.map(\n\t\t\t\t\t(clause) =>\n\t\t\t\t\t\t`${formatFieldPath(\n\t\t\t\t\t\t\tmapRelationPath(clause.field, table.relation),\n\t\t\t\t\t\t)} ${clause.direction.toUpperCase()}`,\n\t\t\t\t)\n\t\t\t\t.join(', ')}`\n\t\t: '';\n\tconst limitSql =\n\t\ttypeof subset?.limit === 'number'\n\t\t\t? ` LIMIT ${nextParam(subset.limit)}`\n\t\t\t: '';\n\tconst offsetSql =\n\t\ttypeof subset?.offset === 'number'\n\t\t\t? ` START ${nextParam(subset.offset)}`\n\t\t\t: '';\n\n\treturn {\n\t\tsql: `SELECT * FROM type::table($table)${whereSql}${orderSql}${limitSql}${offsetSql};`,\n\t\tparams,\n\t};\n};\n\nexport function manageTable<T extends { id: string | RecordId }>(\n\tdb: Surreal,\n\tconfig: TableOptions,\n) {\n\tconst { name } = config;\n\tconst table = new Table(name);\n\n\tconst listAll = async (): Promise<T[]> => {\n\t\treturn loadSubset();\n\t};\n\n\tconst loadSubset = async (subset?: SurrealSubset): Promise<T[]> => {\n\t\tconst { sql, params } = buildSubsetQuery(config, subset);\n\t\tconst [res] = await db.query<[QueryResult<T>]>(sql, params);\n\t\treturn res ?? [];\n\t};\n\n\tconst create = async (data: T | Partial<T>): Promise<T | undefined> => {\n\t\tconst id = (data as Partial<T> & { id?: string | RecordId }).id;\n\t\tif (!id) {\n\t\t\tconst created = await db.create(table).content(data);\n\t\t\treturn firstRow(created as RowResult<T>);\n\t\t}\n\n\t\tconst payload = { ...(data as Record<string, unknown>) };\n\t\tpayload.id = toRecordId(name, id);\n\t\tconst inserted = await db.insert(table, payload);\n\t\treturn firstRow(inserted as RowResult<T>);\n\t};\n\n\tconst update = async (id: RecordId, data: T | Partial<T>) => {\n\t\tconst { id: _ignoredId, ...rest } = data as Record<string, unknown>;\n\t\tawait db.update(id).merge(rest);\n\t};\n\n\tconst remove = async (id: RecordId) => {\n\t\tawait db.delete(id);\n\t};\n\n\tconst subscribe = (\n\t\tcb: (e: { type: 'insert' | 'update' | 'delete'; row: T }) => void,\n\t) => {\n\t\tlet killed = false;\n\t\tlet live: LiveSubscription | undefined;\n\n\t\tconst on = (msg: LiveMessage) => {\n\t\t\tconst { action, value } = msg as unknown as {\n\t\t\t\taction: 'CREATE' | 'UPDATE' | 'DELETE' | 'KILLED';\n\t\t\t\tvalue: T & { id: string | RecordId };\n\t\t\t};\n\n\t\t\tif (action === 'KILLED') return;\n\t\t\tif (action === 'CREATE') cb({ type: 'insert', row: value });\n\t\t\telse if (action === 'UPDATE') cb({ type: 'update', row: value });\n\t\t\telse if (action === 'DELETE')\n\t\t\t\tcb({ type: 'delete', row: { id: value.id } as T });\n\t\t};\n\n\t\tconst start = async () => {\n\t\t\tif (!db.isFeatureSupported(Features.LiveQueries)) return;\n\t\t\tlive = await db.live(table);\n\t\t\tlive.subscribe(on);\n\t\t};\n\n\t\tvoid start();\n\n\t\treturn () => {\n\t\t\tif (killed) return;\n\t\t\tkilled = true;\n\t\t\tif (live) void live.kill();\n\t\t};\n\t};\n\n\treturn {\n\t\tlistAll,\n\t\tloadSubset,\n\t\tcreate,\n\t\tupdate,\n\t\tremove,\n\t\tsoftDelete: remove,\n\t\tsubscribe,\n\t};\n}\n","import type { LiveAction } from 'surrealdb';\nimport type { Bytes } from './types';\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\nconst hasBuffer = typeof Buffer !== 'undefined';\n\nexport function toBytes(value: string | object): Bytes {\n\tif (typeof value === 'string') return encoder.encode(value);\n\treturn encoder.encode(JSON.stringify(value));\n}\n\nexport function fromBytes<T>(bytes: Bytes, deserialize = false): T | string {\n\tif (deserialize) return JSON.parse(decoder.decode(bytes)) as T;\n\treturn decoder.decode(bytes);\n}\n\nexport function toBase64(bytes: Bytes): string {\n\tif (hasBuffer) return Buffer.from(bytes).toString('base64');\n\treturn btoa(String.fromCharCode(...bytes));\n}\n\nexport function fromBase64(base64: string): Bytes {\n\tif (hasBuffer) return new Uint8Array(Buffer.from(base64, 'base64'));\n\tconst bin = atob(base64);\n\tconst out = new Uint8Array(bin.length);\n\tfor (let i = 0; i < bin.length; i++) {\n\t\tout[i] = bin.charCodeAt(i);\n\t}\n\treturn out;\n}\n\nexport function surrealActionMapType(\n\taction: LiveAction,\n): 'insert' | 'update' | 'delete' {\n\tswitch (action) {\n\t\tcase 'CREATE':\n\t\t\treturn 'insert';\n\t\tcase 'UPDATE':\n\t\t\treturn 'update';\n\t\tcase 'DELETE':\n\t\t\treturn 'delete';\n\t\tdefault:\n\t\t\treturn 'update';\n\t}\n}\n","import { fromBase64, toBase64 } from '../util';\nimport type { Bytes, EncryptedEnvelope } from '../types';\nimport type { CryptoProvider, DecryptInput, EncryptInput } from './provider';\n\nexport * from './provider';\nexport * from './types';\n\ntype KeyResolver = (kid: string) => Promise<CryptoKey> | CryptoKey;\n\ntype WebCryptoAESGCMOptions = {\n\talg?: string;\n\tversion?: number;\n\tkid?: string;\n\tresolveKey?: KeyResolver;\n};\n\nconst DEFAULT_ALG = 'AES-256-GCM';\nconst DEFAULT_KID = 'default';\nconst DEFAULT_VERSION = 1;\n\nconst resolveCrypto = (): Crypto => {\n\tif (typeof globalThis.crypto !== 'undefined') return globalThis.crypto;\n\tthrow new Error('Web Crypto API is not available in this runtime.');\n};\n\nconst toCryptoBytes = (value: Bytes): Uint8Array => new Uint8Array(value);\n\nexport class WebCryptoAESGCM implements CryptoProvider {\n\tprivate readonly alg: string;\n\tprivate readonly version: number;\n\tprivate readonly kid: string;\n\tprivate readonly resolveKey: KeyResolver;\n\n\tconstructor(key: CryptoKey, options: WebCryptoAESGCMOptions = {}) {\n\t\tthis.alg = options.alg ?? DEFAULT_ALG;\n\t\tthis.version = options.version ?? DEFAULT_VERSION;\n\t\tthis.kid = options.kid ?? DEFAULT_KID;\n\t\tthis.resolveKey =\n\t\t\toptions.resolveKey ??\n\t\t\t((incomingKid) => {\n\t\t\t\tif (incomingKid !== this.kid) {\n\t\t\t\t\tthrow new Error(`No key configured for kid '${incomingKid}'.`);\n\t\t\t\t}\n\t\t\t\treturn key;\n\t\t\t});\n\t}\n\n\tstatic async fromRawKey(\n\t\trawKey: Bytes,\n\t\toptions: Omit<WebCryptoAESGCMOptions, 'resolveKey'> = {},\n\t) {\n\t\tconst key = await resolveCrypto().subtle.importKey(\n\t\t\t'raw',\n\t\t\ttoCryptoBytes(rawKey) as never,\n\t\t\t'AES-GCM',\n\t\t\tfalse,\n\t\t\t['encrypt', 'decrypt'],\n\t\t);\n\n\t\treturn new WebCryptoAESGCM(key, options);\n\t}\n\n\tprivate async keyFor(kid: string): Promise<CryptoKey> {\n\t\treturn await this.resolveKey(kid);\n\t}\n\n\tasync encrypt(input: EncryptInput): Promise<EncryptedEnvelope> {\n\t\tconst crypto = resolveCrypto();\n\t\tconst alg = input.alg ?? this.alg;\n\t\tconst kid = input.kid ?? this.kid;\n\t\tconst v = input.v ?? this.version;\n\t\tconst nonce = crypto.getRandomValues(new Uint8Array(12));\n\t\tconst key = await this.keyFor(kid);\n\t\tconst ct = new Uint8Array(\n\t\t\tawait crypto.subtle.encrypt(\n\t\t\t\t{\n\t\t\t\t\tname: 'AES-GCM',\n\t\t\t\t\tiv: nonce,\n\t\t\t\t\tadditionalData: input.aad\n\t\t\t\t\t\t? (toCryptoBytes(input.aad) as never)\n\t\t\t\t\t\t: undefined,\n\t\t\t\t},\n\t\t\t\tkey,\n\t\t\t\ttoCryptoBytes(input.plaintext) as never,\n\t\t\t),\n\t\t);\n\n\t\treturn {\n\t\t\tv,\n\t\t\talg,\n\t\t\tkid,\n\t\t\tn: toBase64(nonce),\n\t\t\tct: toBase64(ct),\n\t\t};\n\t}\n\n\tasync decrypt({ envelope, aad }: DecryptInput): Promise<Bytes> {\n\t\tif (envelope.alg !== this.alg) {\n\t\t\tthrow new Error(\n\t\t\t\t`Unsupported envelope algorithm '${envelope.alg}'. Expected '${this.alg}'.`,\n\t\t\t);\n\t\t}\n\n\t\tconst key = await this.keyFor(envelope.kid);\n\t\tconst crypto = resolveCrypto();\n\t\tconst plaintext = await crypto.subtle.decrypt(\n\t\t\t{\n\t\t\t\tname: 'AES-GCM',\n\t\t\t\tiv: toCryptoBytes(fromBase64(envelope.n)) as never,\n\t\t\t\tadditionalData: aad ? (toCryptoBytes(aad) as never) : undefined,\n\t\t\t},\n\t\t\tkey,\n\t\t\ttoCryptoBytes(fromBase64(envelope.ct)) as never,\n\t\t);\n\n\t\treturn new Uint8Array(plaintext);\n\t}\n}\n","import type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type {\n\tCollectionConfig,\n\tDeleteMutationFn,\n\tDeleteMutationFnParams,\n\tInsertMutationFn,\n\tInsertMutationFnParams,\n\tLoadSubsetOptions,\n\tOperationConfig,\n\tStandardSchema,\n\tSyncConfig,\n\tTransaction,\n\tUpdateMutationFn,\n\tUpdateMutationFnParams,\n\tUtilsRecord,\n} from '@tanstack/db';\nimport { queryCollectionOptions } from '@tanstack/query-db-collection';\nimport { LoroDoc } from 'loro-crdt';\nimport { Features, RecordId, Table } from 'surrealdb';\nimport { createLoroProfile } from './crdt';\nimport {\n\tnormalizeRecordIdLikeFields,\n\tnormalizeRecordIdLikeValueDeep,\n\ttoRecordId,\n\ttoRecordIdString,\n\ttoRecordKeyString,\n} from './id';\nimport { manageTable } from './table';\nimport type {\n\tAADContext,\n\tAdapterSyncMode,\n\tEncryptedEnvelope,\n\tLocalChange,\n\tSurrealCollectionOptions,\n\tSurrealCollectionOptionsReturn,\n\tSyncedTable,\n\tTableLike,\n\tTableOptions,\n} from './types';\nimport { fromBase64, fromBytes, toBase64, toBytes } from './util';\n\nexport * from './crdt';\nexport * from './encryption';\nexport { toRecordKeyString } from './id';\nexport * from './types';\n\nconst TEMP_ID_PREFIX = '__temp__';\nconst ENVELOPE_FIELDS = [\n\t'version',\n\t'algorithm',\n\t'key_id',\n\t'nonce',\n\t'ciphertext',\n] as const;\nconst NOOP = () => {};\n\ntype Cleanup = () => void;\n\ntype MutationInput<T extends { id: string | RecordId }> = Omit<T, 'id'> & {\n\tid?: T['id'];\n};\n\ntype QueryWriteUtils = {\n\twriteUpsert?: (data: unknown) => void;\n\twriteDelete?: (key: string) => void;\n};\n\ntype CRDTUpdateRow = {\n\tdoc: string | RecordId;\n\tts?: string | Date;\n\tupdate_bytes?: string;\n\tsnapshot_bytes?: string;\n\tversion?: number;\n\talgorithm?: string;\n\tkey_id?: string;\n\tnonce?: string;\n\tciphertext?: string;\n\tactor?: string;\n};\n\ntype LiveMessageLike = {\n\taction: 'CREATE' | 'UPDATE' | 'DELETE' | 'KILLED';\n\tvalue: Record<string, unknown>;\n};\n\ntype LiveSubscriptionLike = {\n\tisAlive?: boolean;\n\tsubscribe: (cb: (msg: LiveMessageLike) => void | Promise<void>) => void;\n\tkill: () => Promise<void>;\n};\n\nconst isTableObject = (value: unknown): value is TableOptions =>\n\ttypeof value === 'object' &&\n\tvalue !== null &&\n\t'name' in value &&\n\ttypeof (value as { name: unknown }).name === 'string';\n\nconst toTableOptions = (table: TableLike): TableOptions => {\n\tif (typeof table === 'string') return { name: table };\n\tif (table instanceof Table) return { name: table.name };\n\tif (isTableObject(table)) return table;\n\tthrow new Error('Expected table as string, Table, or { name }.');\n};\n\nconst toTableResource = (table: TableLike): Table => {\n\tconst normalized = toTableOptions(table);\n\treturn new Table(normalized.name);\n};\n\nconst tableNameOf = (table: TableLike): string => toTableOptions(table).name;\n\nconst getWriteUtils = (utils: unknown): QueryWriteUtils =>\n\ttypeof utils === 'object' && utils !== null\n\t\t? (utils as QueryWriteUtils)\n\t\t: {};\n\nconst firstRow = <T>(result: T | T[] | null | undefined): T | undefined => {\n\tif (!result) return undefined;\n\tif (Array.isArray(result)) return result[0];\n\treturn result;\n};\n\nconst omitUndefined = <T extends Record<string, unknown>>(obj: T): Partial<T> =>\n\tObject.fromEntries(\n\t\tObject.entries(obj).filter(([, value]) => value !== undefined),\n\t) as Partial<T>;\n\nconst createTempRecordId = (tableName: string): RecordId => {\n\tconst suffix = `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;\n\treturn new RecordId(tableName, `${TEMP_ID_PREFIX}${suffix}`);\n};\n\nconst isTempId = (id: string | RecordId, tableName: string): boolean => {\n\tconst normalized = toRecordIdString(id);\n\tconst key = normalized.startsWith(`${tableName}:`)\n\t\t? normalized.slice(tableName.length + 1)\n\t\t: normalized;\n\treturn key.startsWith(TEMP_ID_PREFIX);\n};\n\nconst toEnvelope = (\n\tvalue: Record<string, unknown>,\n): EncryptedEnvelope | null => {\n\tconst version = value.version;\n\tconst algorithm = value.algorithm;\n\tconst keyId = value.key_id;\n\tconst nonce = value.nonce;\n\tconst ciphertext = value.ciphertext;\n\tif (\n\t\ttypeof version !== 'number' ||\n\t\ttypeof algorithm !== 'string' ||\n\t\ttypeof keyId !== 'string' ||\n\t\ttypeof nonce !== 'string' ||\n\t\ttypeof ciphertext !== 'string'\n\t) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tv: version,\n\t\talg: algorithm,\n\t\tkid: keyId,\n\t\tn: nonce,\n\t\tct: ciphertext,\n\t};\n};\n\nconst toStoredEnvelope = (\n\tenvelope: EncryptedEnvelope,\n): Record<string, unknown> => ({\n\tversion: envelope.v,\n\talgorithm: envelope.alg,\n\tkey_id: envelope.kid,\n\tnonce: envelope.n,\n\tciphertext: envelope.ct,\n});\n\nconst stripEnvelopeFields = (\n\tvalue: Record<string, unknown>,\n): Record<string, unknown> => {\n\tconst copy = { ...value };\n\tfor (const key of ENVELOPE_FIELDS) delete copy[key];\n\treturn copy;\n};\n\nconst toRecordArray = <T>(rows: T | T[] | null | undefined): T[] => {\n\tif (!rows) return [];\n\treturn Array.isArray(rows) ? rows : [rows];\n};\n\nasync function queryRows<T>(\n\tdb: {\n\t\tquery: (\n\t\t\tsql: string,\n\t\t\tbindings?: Record<string, unknown>,\n\t\t) => Promise<unknown>;\n\t},\n\tsql: string,\n\tbindings?: Record<string, unknown>,\n): Promise<T[]> {\n\tconst result = await db.query(sql, bindings ?? {});\n\tif (Array.isArray(result)) {\n\t\tconst first = result[0];\n\t\tif (Array.isArray(first)) return first as T[];\n\t\treturn [];\n\t}\n\treturn [];\n}\n\nfunction createInsertSchema<T extends { id: string | RecordId }>(\n\ttableName: string,\n): StandardSchemaV1<MutationInput<T>, T> {\n\treturn {\n\t\t'~standard': {\n\t\t\tversion: 1,\n\t\t\tvendor: 'tanstack-db-surrealdb',\n\t\t\tvalidate: (value: unknown) => {\n\t\t\t\tif (\n\t\t\t\t\t!value ||\n\t\t\t\t\ttypeof value !== 'object' ||\n\t\t\t\t\tArray.isArray(value)\n\t\t\t\t) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tissues: [{ message: 'Insert data must be an object.' }],\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst data = normalizeRecordIdLikeFields({\n\t\t\t\t\t...(value as Record<string, unknown>),\n\t\t\t\t}) as MutationInput<T>;\n\n\t\t\t\tif (!data.id)\n\t\t\t\t\tdata.id = createTempRecordId(tableName) as T['id'];\n\n\t\t\t\treturn { value: data as T };\n\t\t\t},\n\t\t\ttypes: undefined,\n\t\t},\n\t};\n}\n\nfunction defaultAad(ctx: AADContext): Uint8Array {\n\tif (ctx.kind === 'base') return toBytes(`${ctx.table}:${ctx.id}`);\n\tconst base = ctx.baseTable ?? ctx.table;\n\treturn toBytes(`${ctx.table}:${base}:${ctx.id}`);\n}\n\nconst syncModeFrom = (syncMode: AdapterSyncMode | undefined): AdapterSyncMode =>\n\tsyncMode ?? 'eager';\n\nconst subsetCacheKey = (subset: LoadSubsetOptions): string =>\n\tJSON.stringify(subset, (_key, value) => {\n\t\tif (value instanceof Date) return value.toISOString();\n\t\tif (value instanceof RecordId) return toRecordIdString(value);\n\t\tif (typeof value === 'function') return undefined;\n\t\tif (\n\t\t\tvalue &&\n\t\t\ttypeof value === 'object' &&\n\t\t\t'table' in (value as Record<string, unknown>) &&\n\t\t\t'id' in (value as Record<string, unknown>)\n\t\t) {\n\t\t\ttry {\n\t\t\t\treturn toRecordIdString(String(value));\n\t\t\t} catch {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t});\n\ntype BaseSyncRuntime<T extends { id: string | RecordId }> = {\n\tstartRealtime: () => Promise<void>;\n\tcleanup: () => void;\n\tloadSubset: (subset: LoadSubsetOptions) => Promise<void>;\n\tunloadSubset: (subset: LoadSubsetOptions) => void;\n};\n\nfunction modernSurrealCollectionOptions<T extends SyncedTable<object>>(\n\tconfig: SurrealCollectionOptions<T>,\n): SurrealCollectionOptionsReturn<T> {\n\tconst {\n\t\tdb,\n\t\ttable,\n\t\tqueryClient,\n\t\tqueryKey,\n\t\tonError,\n\t\te2ee,\n\t\tcrdt,\n\t\tsyncMode: inputSyncMode,\n\t} = config;\n\n\tif (!queryClient || !queryKey) {\n\t\tthrow new Error('queryClient and queryKey are required.');\n\t}\n\n\tconst syncMode = syncModeFrom(inputSyncMode);\n\tconst isOnDemandLike =\n\t\tsyncMode === 'on-demand' || syncMode === 'progressive';\n\tconst isStrictOnDemand = syncMode === 'on-demand';\n\tconst queryDrivenSyncMode: 'eager' | 'on-demand' = isOnDemandLike\n\t\t? 'on-demand'\n\t\t: 'eager';\n\tconst tableOptions = toTableOptions(table);\n\tconst tableName = tableOptions.name;\n\tconst tableResource = toTableResource(table);\n\tconst subsetIds = new Map<string, Set<string>>();\n\tconst activeOnDemandIds = new Set<string>();\n\n\tconst e2eeEnabled = e2ee?.enabled === true;\n\tconst crdtEnabled = crdt?.enabled === true;\n\tconst defaultCrdtProfile = crdtEnabled\n\t\t? createLoroProfile<T>(crdt.profile)\n\t\t: undefined;\n\tconst materializeCrdt =\n\t\tcrdt?.materialize ?? defaultCrdtProfile?.materialize;\n\tconst applyCrdtLocalChange =\n\t\tcrdt?.applyLocalChange ?? defaultCrdtProfile?.applyLocalChange;\n\tif (crdtEnabled && (!materializeCrdt || !applyCrdtLocalChange)) {\n\t\tthrow new Error(\n\t\t\t'CRDT profile adapter is missing materialize/applyLocalChange handlers.',\n\t\t);\n\t}\n\n\tconst tableAccess = manageTable<T>(db, tableOptions);\n\tconst docs = new Map<string, LoroDoc>();\n\n\tconst aadFor = (ctx: AADContext): Uint8Array =>\n\t\t(e2ee?.aad ?? defaultAad)(ctx);\n\n\tconst getKey = (row: { id: string | RecordId }) => toRecordIdString(row.id);\n\tconst normalizeMutationId = (id: string | RecordId): RecordId =>\n\t\ttoRecordId(tableName, id);\n\n\tconst normalizeRow = (row: T): T => {\n\t\tconst normalized = normalizeRecordIdLikeValueDeep(row) as T;\n\t\treturn {\n\t\t\t...normalized,\n\t\t\tid: normalizeMutationId(normalized.id),\n\t\t} as T;\n\t};\n\n\tconst decodeBaseRow = async (row: Record<string, unknown>): Promise<T> => {\n\t\tif (!e2eeEnabled) {\n\t\t\treturn normalizeRow(row as T);\n\t\t}\n\n\t\tconst envelope = toEnvelope(row);\n\t\tif (!envelope) return normalizeRow(row as T);\n\t\tconst id = toRecordKeyString(row.id as string | RecordId);\n\t\tconst bytes = await e2ee.crypto.decrypt({\n\t\t\tenvelope,\n\t\t\taad: aadFor({ table: tableName, id, kind: 'base' }),\n\t\t});\n\t\tconst payload = fromBytes<Record<string, unknown>>(bytes, true);\n\t\tconst merged = {\n\t\t\t...stripEnvelopeFields(row),\n\t\t\t...(payload as Record<string, unknown>),\n\t\t\tid: normalizeMutationId(row.id as string | RecordId),\n\t\t} as T;\n\t\treturn normalizeRow(merged);\n\t};\n\n\tconst encodeBaseRow = async (\n\t\trow: Record<string, unknown>,\n\t\tid: string,\n\t): Promise<Record<string, unknown>> => {\n\t\tif (!e2eeEnabled) return row;\n\t\tconst envelope = await e2ee.crypto.encrypt({\n\t\t\tplaintext: toBytes(row),\n\t\t\taad: aadFor({ table: tableName, id, kind: 'base' }),\n\t\t});\n\t\treturn toStoredEnvelope(envelope);\n\t};\n\n\tconst updatesTableName = crdtEnabled\n\t\t? tableNameOf(crdt.updatesTable)\n\t\t: undefined;\n\tconst updatesTable = crdtEnabled\n\t\t? toTableResource(crdt.updatesTable)\n\t\t: undefined;\n\tconst snapshotsTableName =\n\t\tcrdtEnabled && crdt.snapshotsTable\n\t\t\t? tableNameOf(crdt.snapshotsTable)\n\t\t\t: undefined;\n\tconst snapshotsTable =\n\t\tcrdtEnabled && crdt.snapshotsTable\n\t\t\t? toTableResource(crdt.snapshotsTable)\n\t\t\t: undefined;\n\n\tconst getDoc = (id: string): LoroDoc => {\n\t\tconst existing = docs.get(id);\n\t\tif (existing) return existing;\n\t\tconst doc = new LoroDoc();\n\t\tdocs.set(id, doc);\n\t\treturn doc;\n\t};\n\n\tconst docRef = (id: string): RecordId => new RecordId(tableName, id);\n\tconst idFromDocRef = (doc: string | RecordId): string =>\n\t\ttoRecordKeyString(doc);\n\n\tconst resolveActor = (\n\t\tid: string,\n\t\tchange?: LocalChange<T>,\n\t): string | undefined => {\n\t\tif (!crdtEnabled) return undefined;\n\t\tconst candidate = crdt.actor ?? crdt.localActorId;\n\t\tif (typeof candidate === 'function') {\n\t\t\treturn candidate({ id, change });\n\t\t}\n\t\treturn candidate;\n\t};\n\n\tconst decodeUpdateBytes = async (\n\t\trow: CRDTUpdateRow,\n\t\tkind: 'update' | 'snapshot',\n\t): Promise<Uint8Array> => {\n\t\tif (!e2eeEnabled) {\n\t\t\tif (kind === 'snapshot') {\n\t\t\t\tconst snapshot = row.snapshot_bytes;\n\t\t\t\tif (!snapshot) return new Uint8Array();\n\t\t\t\treturn fromBase64(snapshot);\n\t\t\t}\n\t\t\tconst update = row.update_bytes;\n\t\t\tif (!update) return new Uint8Array();\n\t\t\treturn fromBase64(update);\n\t\t}\n\t\tconst envelope = toEnvelope(row as unknown as Record<string, unknown>);\n\t\tif (!envelope) return new Uint8Array();\n\t\tconst id = idFromDocRef(row.doc);\n\t\treturn e2ee.crypto.decrypt({\n\t\t\tenvelope,\n\t\t\taad: aadFor({\n\t\t\t\ttable:\n\t\t\t\t\tkind === 'snapshot'\n\t\t\t\t\t\t? (snapshotsTableName ?? tableName)\n\t\t\t\t\t\t: (updatesTableName ?? tableName),\n\t\t\t\tbaseTable: tableName,\n\t\t\t\tid,\n\t\t\t\tkind,\n\t\t\t}),\n\t\t});\n\t};\n\n\tconst encodeUpdatePayload = async (\n\t\tbytes: Uint8Array,\n\t\tid: string,\n\t\tkind: 'update' | 'snapshot',\n\t): Promise<Record<string, unknown>> => {\n\t\tif (!e2eeEnabled) {\n\t\t\tif (kind === 'snapshot') return { snapshot_bytes: toBase64(bytes) };\n\t\t\treturn { update_bytes: toBase64(bytes) };\n\t\t}\n\n\t\tconst targetTable =\n\t\t\tkind === 'snapshot' ? snapshotsTableName : updatesTableName;\n\t\tconst envelope = await e2ee.crypto.encrypt({\n\t\t\tplaintext: bytes,\n\t\t\taad: aadFor({\n\t\t\t\ttable: targetTable ?? tableName,\n\t\t\t\tbaseTable: tableName,\n\t\t\t\tid,\n\t\t\t\tkind,\n\t\t\t}),\n\t\t});\n\t\treturn toStoredEnvelope(envelope);\n\t};\n\n\tconst persistCrdtUpdate = async (\n\t\tid: string,\n\t\tbytes: Uint8Array,\n\t\tchange?: LocalChange<T>,\n\t) => {\n\t\tif (!crdtEnabled || !updatesTable) return;\n\t\tconst payload = await encodeUpdatePayload(bytes, id, 'update');\n\t\tconst actor = resolveActor(id, change);\n\t\tconst row = {\n\t\t\tdoc: docRef(id),\n\t\t\tts: new Date().toISOString(),\n\t\t\t...(actor ? { actor } : {}),\n\t\t\t...payload,\n\t\t};\n\t\tawait db.create(updatesTable).content(row);\n\t};\n\n\tconst persistMaterialized = async (materialized: T) => {\n\t\tif (!crdtEnabled || crdt.persistMaterializedView !== true) return;\n\t\tconst id = toRecordKeyString(materialized.id);\n\t\tif (!e2eeEnabled) {\n\t\t\tconst { id: _ignoredId, ...rest } = materialized as Record<\n\t\t\t\tstring,\n\t\t\t\tunknown\n\t\t\t>;\n\t\t\tawait db.upsert(normalizeMutationId(materialized.id)).merge(rest);\n\t\t\treturn;\n\t\t}\n\n\t\tconst payload = await encodeBaseRow(\n\t\t\tomitUndefined({\n\t\t\t\t...(materialized as Record<string, unknown>),\n\t\t\t\tid: undefined,\n\t\t\t}),\n\t\t\tid,\n\t\t);\n\t\tawait db.upsert(normalizeMutationId(materialized.id)).merge(payload);\n\t};\n\n\tconst hydratePlainRows = async (\n\t\trows: Array<Record<string, unknown>>,\n\t\twrite: (\n\t\t\tchange:\n\t\t\t\t| { type: 'insert' | 'update'; value: T }\n\t\t\t\t| { type: 'delete'; key: string },\n\t\t) => void,\n\t\tbegin: () => void,\n\t\tcommit: () => void,\n\t\ttype: 'insert' | 'update' = 'insert',\n\t) => {\n\t\tif (!rows.length) return;\n\t\tbegin();\n\t\ttry {\n\t\t\tfor (const row of rows) {\n\t\t\t\tconst decoded = await decodeBaseRow(row);\n\t\t\t\twrite({ type, value: decoded });\n\t\t\t}\n\t\t} finally {\n\t\t\tcommit();\n\t\t}\n\t};\n\n\tconst hydrateCrdtDoc = async (\n\t\tid: string,\n\t\twrite: (\n\t\t\tchange:\n\t\t\t\t| { type: 'insert' | 'update'; value: T }\n\t\t\t\t| { type: 'delete'; key: string },\n\t\t) => void,\n\t\tbegin: () => void,\n\t\tcommit: () => void,\n\t\twriteType: 'insert' | 'update' = 'insert',\n\t) => {\n\t\tif (!crdtEnabled || !updatesTableName) return;\n\t\tconst doc = getDoc(id);\n\t\tlet since: string | undefined;\n\n\t\tif (snapshotsTableName) {\n\t\t\tconst snapshots = await queryRows<CRDTUpdateRow>(\n\t\t\t\tdb,\n\t\t\t\t`SELECT * FROM type::table($table) WHERE doc = $doc ORDER BY ts DESC LIMIT 1;`,\n\t\t\t\t{\n\t\t\t\t\ttable: snapshotsTableName,\n\t\t\t\t\tdoc: docRef(id),\n\t\t\t\t},\n\t\t\t);\n\t\t\tconst snapshot = snapshots[0];\n\t\t\tif (snapshot) {\n\t\t\t\tconst bytes = await decodeUpdateBytes(snapshot, 'snapshot');\n\t\t\t\tif (bytes.byteLength) doc.import(bytes);\n\t\t\t\tsince =\n\t\t\t\t\ttypeof snapshot.ts === 'string'\n\t\t\t\t\t\t? snapshot.ts\n\t\t\t\t\t\t: snapshot.ts instanceof Date\n\t\t\t\t\t\t\t? snapshot.ts.toISOString()\n\t\t\t\t\t\t\t: undefined;\n\t\t\t}\n\t\t}\n\n\t\tconst updates = await queryRows<CRDTUpdateRow>(\n\t\t\tdb,\n\t\t\tsince\n\t\t\t\t? `SELECT * FROM type::table($table) WHERE doc = $doc AND ts > $since ORDER BY ts ASC;`\n\t\t\t\t: `SELECT * FROM type::table($table) WHERE doc = $doc ORDER BY ts ASC;`,\n\t\t\t{\n\t\t\t\ttable: updatesTableName,\n\t\t\t\tdoc: docRef(id),\n\t\t\t\tsince,\n\t\t\t},\n\t\t);\n\n\t\tfor (const update of updates) {\n\t\t\tconst bytes = await decodeUpdateBytes(update, 'update');\n\t\t\tif (!bytes.byteLength) continue;\n\t\t\tdoc.import(bytes);\n\t\t}\n\n\t\tconst materialized = normalizeRow(materializeCrdt(doc, id));\n\t\tbegin();\n\t\ttry {\n\t\t\twrite({ type: writeType, value: materialized });\n\t\t} finally {\n\t\t\tcommit();\n\t\t}\n\t};\n\n\tconst updateActiveOnDemandIds = () => {\n\t\tactiveOnDemandIds.clear();\n\t\tfor (const ids of subsetIds.values()) {\n\t\t\tfor (const id of ids) activeOnDemandIds.add(id);\n\t\t}\n\t};\n\n\tconst createSyncRuntime = (\n\t\tctx: Parameters<SyncConfig<T>['sync']>[0],\n\t): BaseSyncRuntime<T> => {\n\t\tlet cleanupBaseLive: Cleanup = NOOP;\n\t\tlet cleanupUpdateLive: Cleanup = NOOP;\n\t\tlet killed = false;\n\n\t\tconst ensureBaseLive = async () => {\n\t\t\tif (cleanupBaseLive !== NOOP) return;\n\t\t\tif (!db.isFeatureSupported?.(Features.LiveQueries)) return;\n\t\t\tconst live = (await db.live(\n\t\t\t\ttableResource,\n\t\t\t)) as unknown as LiveSubscriptionLike;\n\t\t\tif (killed) {\n\t\t\t\tawait live.kill();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlive.subscribe(async (message) => {\n\t\t\t\tif (message.action === 'KILLED') return;\n\t\t\t\tconst row = message.value as Record<string, unknown>;\n\t\t\t\tconst id = toRecordKeyString(row.id as string | RecordId);\n\n\t\t\t\tconst wasVisible = activeOnDemandIds.has(id);\n\t\t\t\tif (\n\t\t\t\t\tisStrictOnDemand &&\n\t\t\t\t\t!wasVisible &&\n\t\t\t\t\tmessage.action !== 'DELETE'\n\t\t\t\t)\n\t\t\t\t\treturn;\n\n\t\t\t\tif (message.action === 'DELETE') {\n\t\t\t\t\tfor (const ids of subsetIds.values()) ids.delete(id);\n\t\t\t\t\tupdateActiveOnDemandIds();\n\t\t\t\t\tif (isStrictOnDemand && !wasVisible) return;\n\t\t\t\t\tctx.begin();\n\t\t\t\t\ttry {\n\t\t\t\t\t\tctx.write({\n\t\t\t\t\t\t\ttype: 'delete',\n\t\t\t\t\t\t\tkey: `${tableName}:${id}`,\n\t\t\t\t\t\t});\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tctx.commit();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst decoded = await decodeBaseRow(row);\n\t\t\t\tctx.begin();\n\t\t\t\ttry {\n\t\t\t\t\tctx.write({\n\t\t\t\t\t\ttype: message.action === 'CREATE' ? 'insert' : 'update',\n\t\t\t\t\t\tvalue: decoded,\n\t\t\t\t\t});\n\t\t\t\t} finally {\n\t\t\t\t\tctx.commit();\n\t\t\t\t}\n\t\t\t});\n\t\t\tcleanupBaseLive = () => {\n\t\t\t\tvoid live.kill().catch(() => undefined);\n\t\t\t\tcleanupBaseLive = NOOP;\n\t\t\t};\n\t\t};\n\n\t\tconst ensureUpdateLive = async () => {\n\t\t\tif (!crdtEnabled || !updatesTable) return;\n\t\t\tif (cleanupUpdateLive !== NOOP) return;\n\t\t\tif (!db.isFeatureSupported?.(Features.LiveQueries)) return;\n\n\t\t\tconst live = (await db.live(\n\t\t\t\tupdatesTable,\n\t\t\t)) as unknown as LiveSubscriptionLike;\n\t\t\tif (killed) {\n\t\t\t\tawait live.kill();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlive.subscribe(async (message) => {\n\t\t\t\tif (message.action === 'KILLED') return;\n\t\t\t\tif (message.action === 'DELETE') return;\n\n\t\t\t\tconst value = message.value as unknown as CRDTUpdateRow;\n\t\t\t\tconst id = idFromDocRef(value.doc);\n\n\t\t\t\tif (value.actor && value.actor === resolveActor(id)) return;\n\n\t\t\t\tif (isStrictOnDemand && !activeOnDemandIds.has(id)) return;\n\n\t\t\t\tconst doc = getDoc(id);\n\t\t\t\tconst bytes = await decodeUpdateBytes(value, 'update');\n\t\t\t\tif (!bytes.byteLength) return;\n\t\t\t\tdoc.import(bytes);\n\t\t\t\tconst materialized = normalizeRow(materializeCrdt(doc, id));\n\t\t\t\tctx.begin();\n\t\t\t\ttry {\n\t\t\t\t\tctx.write({ type: 'update', value: materialized });\n\t\t\t\t} finally {\n\t\t\t\t\tctx.commit();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcleanupUpdateLive = () => {\n\t\t\t\tvoid live.kill().catch(() => undefined);\n\t\t\t\tcleanupUpdateLive = NOOP;\n\t\t\t};\n\t\t};\n\n\t\tconst loadSubset = async (subset: LoadSubsetOptions) => {\n\t\t\tif (!isOnDemandLike) return;\n\t\t\tconst key = subsetCacheKey(subset);\n\t\t\tconst rows = await tableAccess.loadSubset(subset);\n\t\t\tconst ids = new Set(\n\t\t\t\t(rows as unknown as Array<Record<string, unknown>>).map((row) =>\n\t\t\t\t\ttoRecordKeyString(row.id as string | RecordId),\n\t\t\t\t),\n\t\t\t);\n\t\t\tsubsetIds.set(key, ids);\n\t\t\tupdateActiveOnDemandIds();\n\n\t\t\tif (!crdtEnabled) {\n\t\t\t\tawait hydratePlainRows(\n\t\t\t\t\trows as unknown as Array<Record<string, unknown>>,\n\t\t\t\t\tctx.write,\n\t\t\t\t\tctx.begin,\n\t\t\t\t\tctx.commit,\n\t\t\t\t\t'insert',\n\t\t\t\t);\n\t\t\t\tawait ensureBaseLive();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (const id of ids) {\n\t\t\t\tawait hydrateCrdtDoc(\n\t\t\t\t\tid,\n\t\t\t\t\tctx.write,\n\t\t\t\t\tctx.begin,\n\t\t\t\t\tctx.commit,\n\t\t\t\t\t'insert',\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait ensureUpdateLive();\n\t\t};\n\n\t\tconst unloadSubset = (subset: LoadSubsetOptions) => {\n\t\t\tif (!isOnDemandLike) return;\n\t\t\tconst key = subsetCacheKey(subset);\n\t\t\tsubsetIds.delete(key);\n\t\t\tupdateActiveOnDemandIds();\n\t\t\tif (subsetIds.size === 0) {\n\t\t\t\tcleanupBaseLive();\n\t\t\t\tcleanupUpdateLive();\n\t\t\t}\n\t\t};\n\n\t\tconst startRealtime = async () => {\n\t\t\tif (!crdtEnabled) {\n\t\t\t\tawait ensureBaseLive();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait ensureUpdateLive();\n\t\t};\n\n\t\tconst cleanup = () => {\n\t\t\tkilled = true;\n\t\t\tsubsetIds.clear();\n\t\t\tupdateActiveOnDemandIds();\n\t\t\tcleanupBaseLive();\n\t\t\tcleanupUpdateLive();\n\t\t};\n\n\t\treturn {\n\t\t\tstartRealtime,\n\t\t\tcleanup,\n\t\t\tloadSubset,\n\t\t\tunloadSubset,\n\t\t};\n\t};\n\n\tconst base = queryCollectionOptions({\n\t\tschema: createInsertSchema<T>(tableName),\n\t\tgetKey,\n\t\tqueryKey,\n\t\tqueryClient,\n\t\tsyncMode: queryDrivenSyncMode,\n\t\tqueryFn: async ({ meta }) => {\n\t\t\ttry {\n\t\t\t\tif (isOnDemandLike && !meta?.loadSubsetOptions) {\n\t\t\t\t\treturn [] as T[];\n\t\t\t\t}\n\n\t\t\t\tif (!crdtEnabled) {\n\t\t\t\t\tif (!isOnDemandLike) {\n\t\t\t\t\t\tconst rows = await toRecordArray(\n\t\t\t\t\t\t\tawait db.select(tableResource),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst decoded = await Promise.all(\n\t\t\t\t\t\t\trows.map((row) =>\n\t\t\t\t\t\t\t\tdecodeBaseRow(row as Record<string, unknown>),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn decoded;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst rows = await tableAccess.loadSubset(\n\t\t\t\t\t\tmeta?.loadSubsetOptions,\n\t\t\t\t\t);\n\t\t\t\t\tconst decoded = await Promise.all(\n\t\t\t\t\t\t(rows as unknown as Array<Record<string, unknown>>).map(\n\t\t\t\t\t\t\t(row) => decodeBaseRow(row),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\treturn decoded;\n\t\t\t\t}\n\n\t\t\t\tif (isOnDemandLike) return [] as T[];\n\n\t\t\t\tif (!updatesTableName) return [] as T[];\n\t\t\t\tconst updates = await queryRows<CRDTUpdateRow>(\n\t\t\t\t\tdb,\n\t\t\t\t\t`SELECT * FROM type::table($table) ORDER BY ts ASC;`,\n\t\t\t\t\t{ table: updatesTableName },\n\t\t\t\t);\n\t\t\t\tfor (const update of updates) {\n\t\t\t\t\tconst id = idFromDocRef(update.doc);\n\t\t\t\t\tconst doc = getDoc(id);\n\t\t\t\t\tconst bytes = await decodeUpdateBytes(update, 'update');\n\t\t\t\t\tif (!bytes.byteLength) continue;\n\t\t\t\t\tdoc.import(bytes);\n\t\t\t\t}\n\n\t\t\t\treturn [...docs.entries()].map(([id, doc]) =>\n\t\t\t\t\tnormalizeRow(materializeCrdt(doc, id)),\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tonError?.(error);\n\t\t\t\treturn [] as T[];\n\t\t\t}\n\t\t},\n\t\tonInsert: (async (params: InsertMutationFnParams<T>) => {\n\t\t\tconst out: T[] = [];\n\t\t\tconst writeUtils = getWriteUtils(params.collection.utils);\n\t\t\tfor (const mutation of params.transaction.mutations) {\n\t\t\t\tif (mutation.type !== 'insert') continue;\n\n\t\t\t\tconst normalized = normalizeRow(mutation.modified as T);\n\t\t\t\tif (!crdtEnabled) {\n\t\t\t\t\tconst idKey = toRecordKeyString(normalized.id);\n\t\t\t\t\tconst payload = omitUndefined({\n\t\t\t\t\t\t...(normalized as Record<string, unknown>),\n\t\t\t\t\t\tid: undefined,\n\t\t\t\t\t});\n\t\t\t\t\tconst recordPayload = await encodeBaseRow(payload, idKey);\n\n\t\t\t\t\tif (isTempId(normalized.id, tableName)) {\n\t\t\t\t\t\tconst created = await db\n\t\t\t\t\t\t\t.create(tableResource)\n\t\t\t\t\t\t\t.content(recordPayload);\n\t\t\t\t\t\tconst createdRow = firstRow(\n\t\t\t\t\t\t\ttoRecordArray(created as unknown as T | T[]),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst createdId =\n\t\t\t\t\t\t\tcreatedRow &&\n\t\t\t\t\t\t\t(createdRow as Record<string, unknown>).id\n\t\t\t\t\t\t\t\t? ((createdRow as Record<string, unknown>).id as\n\t\t\t\t\t\t\t\t\t\t| string\n\t\t\t\t\t\t\t\t\t\t| RecordId)\n\t\t\t\t\t\t\t\t: normalized.id;\n\t\t\t\t\t\tconst resolved = {\n\t\t\t\t\t\t\t...normalized,\n\t\t\t\t\t\t\tid: normalizeMutationId(createdId),\n\t\t\t\t\t\t} as T;\n\t\t\t\t\t\tout.push(resolved);\n\t\t\t\t\t\twriteUtils.writeUpsert?.(resolved);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tawait db.insert(tableResource, {\n\t\t\t\t\t\tid: normalizeMutationId(normalized.id),\n\t\t\t\t\t\t...recordPayload,\n\t\t\t\t\t});\n\t\t\t\t\tout.push(normalized);\n\t\t\t\t\twriteUtils.writeUpsert?.(normalized);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst id = toRecordKeyString(normalized.id);\n\t\t\t\tconst doc = getDoc(id);\n\t\t\t\tconst vv = doc.oplogVersion();\n\t\t\t\tconst localChange: LocalChange<T> = {\n\t\t\t\t\ttype: 'insert',\n\t\t\t\t\tvalue: normalized,\n\t\t\t\t};\n\t\t\t\tapplyCrdtLocalChange(doc, localChange);\n\t\t\t\tconst bytes = doc.export({ mode: 'update', from: vv });\n\t\t\t\tawait persistCrdtUpdate(id, bytes, localChange);\n\t\t\t\tconst materialized = normalizeRow(materializeCrdt(doc, id));\n\t\t\t\tawait persistMaterialized(materialized);\n\t\t\t\tout.push(materialized);\n\t\t\t\twriteUtils.writeUpsert?.(materialized);\n\t\t\t}\n\n\t\t\treturn out as unknown as StandardSchema<T>;\n\t\t}) as InsertMutationFn<T, string, UtilsRecord, StandardSchema<T>>,\n\t\tonUpdate: (async (params: UpdateMutationFnParams<T>) => {\n\t\t\tconst writeUtils = getWriteUtils(params.collection.utils);\n\t\t\tfor (const mutation of params.transaction.mutations) {\n\t\t\t\tif (mutation.type !== 'update') continue;\n\t\t\t\tconst mutationId = normalizeMutationId(\n\t\t\t\t\tmutation.key as RecordId | string,\n\t\t\t\t);\n\t\t\t\tconst normalizedModified = omitUndefined(\n\t\t\t\t\tnormalizeRecordIdLikeFields({\n\t\t\t\t\t\t...(mutation.modified as Record<string, unknown>),\n\t\t\t\t\t}) as Record<string, unknown>,\n\t\t\t\t);\n\t\t\t\tconst normalized = normalizeRow({\n\t\t\t\t\t...(normalizedModified as Partial<T>),\n\t\t\t\t\tid: mutationId,\n\t\t\t\t} as T);\n\n\t\t\t\tif (!crdtEnabled) {\n\t\t\t\t\tif (!e2eeEnabled) {\n\t\t\t\t\t\tawait db.update(mutationId).merge(normalizedModified);\n\t\t\t\t\t\twriteUtils.writeUpsert?.(normalized);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst current = await db.select(mutationId);\n\t\t\t\t\tconst currentRows = toRecordArray(\n\t\t\t\t\t\tcurrent as unknown as\n\t\t\t\t\t\t\t| Record<string, unknown>\n\t\t\t\t\t\t\t| Array<Record<string, unknown>>,\n\t\t\t\t\t);\n\t\t\t\t\tconst currentRow = currentRows[0];\n\t\t\t\t\tconst decodedCurrent = currentRow\n\t\t\t\t\t\t? await decodeBaseRow(currentRow)\n\t\t\t\t\t\t: ({ id: mutationId } as T);\n\t\t\t\t\tconst merged = {\n\t\t\t\t\t\t...(decodedCurrent as Record<string, unknown>),\n\t\t\t\t\t\t...(normalizedModified as Record<string, unknown>),\n\t\t\t\t\t};\n\t\t\t\t\tdelete merged.id;\n\t\t\t\t\tconst encoded = await encodeBaseRow(\n\t\t\t\t\t\tomitUndefined(merged),\n\t\t\t\t\t\ttoRecordKeyString(mutationId),\n\t\t\t\t\t);\n\t\t\t\t\tawait db.update(mutationId).merge(encoded);\n\t\t\t\t\twriteUtils.writeUpsert?.(\n\t\t\t\t\t\tnormalizeRow({ ...decodedCurrent, ...merged } as T),\n\t\t\t\t\t);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst id = toRecordKeyString(mutationId);\n\t\t\t\tconst doc = getDoc(id);\n\t\t\t\tconst vv = doc.oplogVersion();\n\t\t\t\tconst localChange: LocalChange<T> = {\n\t\t\t\t\ttype: 'update',\n\t\t\t\t\tvalue: normalized,\n\t\t\t\t};\n\t\t\t\tapplyCrdtLocalChange(doc, localChange);\n\t\t\t\tconst bytes = doc.export({ mode: 'update', from: vv });\n\t\t\t\tawait persistCrdtUpdate(id, bytes, localChange);\n\t\t\t\tconst materialized = normalizeRow(materializeCrdt(doc, id));\n\t\t\t\tawait persistMaterialized(materialized);\n\t\t\t\twriteUtils.writeUpsert?.(materialized);\n\t\t\t}\n\t\t\treturn { refetch: false } as unknown as StandardSchema<T>;\n\t\t}) as UpdateMutationFn<T, string, UtilsRecord, StandardSchema<T>>,\n\t\tonDelete: (async (params: DeleteMutationFnParams<T>) => {\n\t\t\tconst writeUtils = getWriteUtils(params.collection.utils);\n\t\t\tfor (const mutation of params.transaction.mutations) {\n\t\t\t\tif (mutation.type !== 'delete') continue;\n\t\t\t\tconst mutationId = normalizeMutationId(\n\t\t\t\t\tmutation.key as RecordId | string,\n\t\t\t\t);\n\t\t\t\tconst id = toRecordKeyString(mutationId);\n\t\t\t\tif (!crdtEnabled) {\n\t\t\t\t\tawait db.delete(mutationId);\n\t\t\t\t\twriteUtils.writeDelete?.(`${tableName}:${id}`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst doc = getDoc(id);\n\t\t\t\tconst vv = doc.oplogVersion();\n\t\t\t\tconst localChange: LocalChange<T> = {\n\t\t\t\t\ttype: 'delete',\n\t\t\t\t\tvalue: { id: mutationId } as T,\n\t\t\t\t};\n\t\t\t\tapplyCrdtLocalChange(doc, localChange);\n\t\t\t\tconst bytes = doc.export({ mode: 'update', from: vv });\n\t\t\t\tawait persistCrdtUpdate(id, bytes, localChange);\n\t\t\t\twriteUtils.writeDelete?.(`${tableName}:${id}`);\n\t\t\t}\n\t\t\treturn { refetch: false } as unknown as StandardSchema<T>;\n\t\t}) as DeleteMutationFn<T, string, UtilsRecord, StandardSchema<T>>,\n\t} as never) as SurrealCollectionOptionsReturn<T>;\n\n\tconst baseSync = base.sync?.sync;\n\tconst sync = baseSync\n\t\t? {\n\t\t\t\tsync: (ctx: Parameters<NonNullable<typeof baseSync>>[0]) => {\n\t\t\t\t\tconst canRunBaseSync =\n\t\t\t\t\t\ttypeof (ctx.collection as { on?: unknown })?.on ===\n\t\t\t\t\t\t'function';\n\t\t\t\t\tconst baseResult = canRunBaseSync\n\t\t\t\t\t\t? baseSync(ctx)\n\t\t\t\t\t\t: undefined;\n\t\t\t\t\tconst baseCleanup =\n\t\t\t\t\t\ttypeof baseResult === 'function'\n\t\t\t\t\t\t\t? baseResult\n\t\t\t\t\t\t\t: typeof baseResult === 'object' &&\n\t\t\t\t\t\t\t\t\tbaseResult &&\n\t\t\t\t\t\t\t\t\t'cleanup' in baseResult &&\n\t\t\t\t\t\t\t\t\ttypeof (\n\t\t\t\t\t\t\t\t\t\tbaseResult as {\n\t\t\t\t\t\t\t\t\t\t\tcleanup?: unknown;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t).cleanup === 'function'\n\t\t\t\t\t\t\t\t? (\n\t\t\t\t\t\t\t\t\t\tbaseResult as {\n\t\t\t\t\t\t\t\t\t\t\tcleanup: Cleanup;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t).cleanup\n\t\t\t\t\t\t\t\t: NOOP;\n\t\t\t\t\tconst runtime = createSyncRuntime(\n\t\t\t\t\t\tctx as Parameters<SyncConfig<T>['sync']>[0],\n\t\t\t\t\t);\n\n\t\t\t\t\tconst start = async () => {\n\t\t\t\t\t\tif (!isOnDemandLike) {\n\t\t\t\t\t\t\tif (!crdtEnabled) {\n\t\t\t\t\t\t\t\tconst rows = toRecordArray(\n\t\t\t\t\t\t\t\t\tawait db.select(tableResource),\n\t\t\t\t\t\t\t\t) as Array<Record<string, unknown>>;\n\t\t\t\t\t\t\t\tawait hydratePlainRows(\n\t\t\t\t\t\t\t\t\trows,\n\t\t\t\t\t\t\t\t\tctx.write,\n\t\t\t\t\t\t\t\t\tctx.begin,\n\t\t\t\t\t\t\t\t\tctx.commit,\n\t\t\t\t\t\t\t\t\t'insert',\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tawait runtime.startRealtime();\n\t\t\t\t\t\t\t\tctx.markReady();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (updatesTableName) {\n\t\t\t\t\t\t\t\tconst updates = await queryRows<CRDTUpdateRow>(\n\t\t\t\t\t\t\t\t\tdb,\n\t\t\t\t\t\t\t\t\t`SELECT * FROM type::table($table) ORDER BY ts ASC;`,\n\t\t\t\t\t\t\t\t\t{ table: updatesTableName },\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tfor (const update of updates) {\n\t\t\t\t\t\t\t\t\tconst id = idFromDocRef(update.doc);\n\t\t\t\t\t\t\t\t\tconst doc = getDoc(id);\n\t\t\t\t\t\t\t\t\tconst bytes = await decodeUpdateBytes(\n\t\t\t\t\t\t\t\t\t\tupdate,\n\t\t\t\t\t\t\t\t\t\t'update',\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tif (!bytes.byteLength) continue;\n\t\t\t\t\t\t\t\t\tdoc.import(bytes);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tctx.begin();\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tfor (const [id, doc] of docs.entries()) {\n\t\t\t\t\t\t\t\t\t\tctx.write({\n\t\t\t\t\t\t\t\t\t\t\ttype: 'insert',\n\t\t\t\t\t\t\t\t\t\t\tvalue: normalizeRow(\n\t\t\t\t\t\t\t\t\t\t\t\tmaterializeCrdt(doc, id),\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\t\tctx.commit();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tawait runtime.startRealtime();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tctx.markReady();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tctx.markReady();\n\t\t\t\t\t\tif (syncMode === 'progressive') {\n\t\t\t\t\t\t\tvoid runtime\n\t\t\t\t\t\t\t\t.loadSubset({})\n\t\t\t\t\t\t\t\t.catch((error) => onError?.(error));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tvoid start().catch((error) => onError?.(error));\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcleanup: () => {\n\t\t\t\t\t\t\truntime.cleanup();\n\t\t\t\t\t\t\tbaseCleanup();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tloadSubset: async (subset) => {\n\t\t\t\t\t\t\tawait runtime.loadSubset(subset);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tunloadSubset: (subset) => {\n\t\t\t\t\t\t\truntime.unloadSubset(subset);\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t}\n\t\t: undefined;\n\n\treturn {\n\t\t...base,\n\t\tsync: sync ?? base.sync,\n\t} as SurrealCollectionOptionsReturn<T>;\n}\n\nexport function surrealCollectionOptions<T extends SyncedTable<object>>(\n\tconfig: SurrealCollectionOptions<T>,\n): CollectionConfig<\n\tT,\n\tstring,\n\tStandardSchemaV1<MutationInput<T>, T>,\n\tUtilsRecord\n> & {\n\tschema: StandardSchemaV1<MutationInput<T>, T>;\n\tutils: UtilsRecord;\n} {\n\treturn modernSurrealCollectionOptions(config);\n}\n\ndeclare module '@tanstack/db' {\n\tinterface Collection<\n\t\tT extends object = Record<string, unknown>,\n\t\tTKey extends string | number = string | number,\n\t\tTUtils extends UtilsRecord = UtilsRecord,\n\t\tTSchema extends StandardSchemaV1 = StandardSchemaV1,\n\t\tTInsertInput extends object = T,\n\t> {\n\t\tdelete(\n\t\t\tkeys: Array<TKey | RecordId | string> | TKey | RecordId | string,\n\t\t\tconfig?: OperationConfig,\n\t\t): Transaction<any>;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/crdt.ts","../src/id.ts","../src/table.ts","../src/util.ts","../src/encryption/index.ts","../src/index.ts"],"names":["canonical","Table","firstRow","RecordId","Features","rows","decoded"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { LoroDoc } from 'loro-crdt';\nimport type { LocalChange } from './types';\nimport type { CRDTProfileAdapter } from './crdt/types';\n\nexport type LoroProfile = 'json' | 'richtext';\n\nconst toRecord = (value: unknown): Record<string, unknown> =>\n\ttypeof value === 'object' && value !== null\n\t\t? (value as Record<string, unknown>)\n\t\t: {};\n\nexport const materializeLoroJson = <T extends object>(\n\tdoc: LoroDoc,\n\tid: string,\n): T => {\n\tconst root = toRecord(doc.getMap('root').toJSON());\n\treturn {\n\t\tid,\n\t\t...root,\n\t} as unknown as T;\n};\n\nexport const applyLoroJsonChange = <T extends object>(\n\tdoc: LoroDoc,\n\tchange: LocalChange<T>,\n): void => {\n\tconst root = doc.getMap('root');\n\tif (change.type === 'delete') {\n\t\troot.set('deleted', true);\n\t\treturn;\n\t}\n\tconst value = toRecord(change.value);\n\tfor (const [key, fieldValue] of Object.entries(value)) {\n\t\tif (key === 'id') continue;\n\t\troot.set(key, fieldValue);\n\t}\n};\n\nexport const materializeLoroRichtext = <T extends object>(\n\tdoc: LoroDoc,\n\tid: string,\n): T => {\n\tconst metadata = toRecord(doc.getMap('root').toJSON());\n\tconst content = doc.getText('content').toString();\n\treturn {\n\t\tid,\n\t\tcontent,\n\t\t...metadata,\n\t} as unknown as T;\n};\n\nexport const applyLoroRichtextChange = <T extends object>(\n\tdoc: LoroDoc,\n\tchange: LocalChange<T>,\n): void => {\n\tconst text = doc.getText('content');\n\tconst metadata = doc.getMap('root');\n\tif (change.type === 'delete') {\n\t\tmetadata.set('deleted', true);\n\t\treturn;\n\t}\n\tconst value = toRecord(change.value);\n\tfor (const [key, fieldValue] of Object.entries(value)) {\n\t\tif (key === 'id') continue;\n\t\tif (key === 'content') {\n\t\t\tif (typeof fieldValue === 'string') text.update(fieldValue);\n\t\t\tcontinue;\n\t\t}\n\t\tmetadata.set(key, fieldValue);\n\t}\n};\n\nexport const createLoroProfile = <T extends object = Record<string, unknown>>(\n\tprofile: LoroProfile,\n): CRDTProfileAdapter<T> => {\n\tif (profile === 'richtext') {\n\t\treturn {\n\t\t\tmaterialize: materializeLoroRichtext as CRDTProfileAdapter<T>['materialize'],\n\t\t\tapplyLocalChange:\n\t\t\t\tapplyLoroRichtextChange as CRDTProfileAdapter<T>['applyLocalChange'],\n\t\t};\n\t}\n\n\treturn {\n\t\tmaterialize: materializeLoroJson as CRDTProfileAdapter<T>['materialize'],\n\t\tapplyLocalChange:\n\t\t\tapplyLoroJsonChange as CRDTProfileAdapter<T>['applyLocalChange'],\n\t};\n};\n","import { RecordId } from 'surrealdb';\n\nconst recordIdIdentityPool = new Map<string, unknown>();\nconst nativeRecordIdPool = new Map<string, RecordId>();\n\nconst internRecordIdIdentity = (\n\tcanonical: string,\n\tpreferred?: unknown,\n): unknown => {\n\tconst cached = recordIdIdentityPool.get(canonical);\n\tif (cached !== undefined) return cached;\n\tconst created = preferred ?? canonicalToNativeRecordId(canonical);\n\trecordIdIdentityPool.set(canonical, created);\n\treturn created;\n};\n\nconst getNativeRecordId = (canonical: string): RecordId => {\n\tconst cached = nativeRecordIdPool.get(canonical);\n\tif (cached) return cached;\n\tconst created = canonicalToNativeRecordId(canonical);\n\tnativeRecordIdPool.set(canonical, created);\n\treturn created;\n};\n\nconst canonicalToNativeRecordId = (canonical: string): RecordId => {\n\tconst idx = canonical.indexOf(':');\n\tconst table = canonical.slice(0, idx);\n\tconst key = canonical.slice(idx + 1);\n\treturn new RecordId(table, key);\n};\n\nexport const stripOuterQuotes = (value: string): string => {\n\tconst trimmed = value.trim();\n\tconst isSingleQuoted =\n\t\ttrimmed.startsWith(\"'\") && trimmed.endsWith(\"'\") && trimmed.length >= 2;\n\tconst isDoubleQuoted =\n\t\ttrimmed.startsWith('\"') && trimmed.endsWith('\"') && trimmed.length >= 2;\n\tconst isBacktickQuoted =\n\t\ttrimmed.startsWith('`') && trimmed.endsWith('`') && trimmed.length >= 2;\n\treturn isSingleQuoted || isDoubleQuoted || isBacktickQuoted\n\t\t? trimmed.slice(1, -1)\n\t\t: trimmed;\n};\n\nexport const toRecordIdString = (rid: RecordId | string): string => {\n\tconst raw =\n\t\ttypeof rid === 'string' ? stripOuterQuotes(rid) : rid.toString();\n\tconst trimmed = stripOuterQuotes(raw).trim();\n\tconst idx = trimmed.indexOf(':');\n\tif (idx <= 0 || idx >= trimmed.length - 1) return trimmed;\n\n\tconst table = trimmed.slice(0, idx).trim();\n\tconst key = stripOuterQuotes(\n\t\tstripAngleBrackets(stripOuterQuotes(trimmed.slice(idx + 1).trim())),\n\t);\n\tif (!table || !key) return trimmed;\n\treturn `${table}:${key}`;\n};\n\nconst stripAngleBrackets = (value: string): string => {\n\tconst trimmed = value.trim();\n\tconst isSurrealAngles =\n\t\ttrimmed.startsWith('⟨') && trimmed.endsWith('⟩') && trimmed.length >= 2;\n\tconst isAsciiAngles =\n\t\ttrimmed.startsWith('<') && trimmed.endsWith('>') && trimmed.length >= 2;\n\treturn isSurrealAngles || isAsciiAngles\n\t\t? trimmed.slice(1, -1).trim()\n\t\t: trimmed;\n};\n\nexport const toRecordKeyString = (rid: RecordId | string): string => {\n\tconst normalized = toRecordIdString(rid);\n\tconst idx = normalized.indexOf(':');\n\tconst rawKey = idx > 0 ? normalized.slice(idx + 1) : normalized;\n\treturn stripOuterQuotes(rawKey.trim());\n};\n\nconst isRecordIdString = (value: string): boolean => {\n\tconst idx = value.indexOf(':');\n\treturn idx > 0 && idx < value.length - 1;\n};\n\nconst looksLikeTableName = (value: string): boolean =>\n\t/^[A-Za-z_][A-Za-z0-9_-]*$/.test(value);\n\ntype SurrealRecordIdLike = {\n\ttable: unknown;\n\tid: unknown;\n\ttoString: () => unknown;\n\tconstructor?: { name?: string };\n};\n\nconst getCtorName = (value: unknown): string | undefined => {\n\tif (!value || typeof value !== 'object') return undefined;\n\tconst ctor = (value as { constructor?: { name?: unknown } }).constructor;\n\treturn typeof ctor?.name === 'string' ? ctor.name : undefined;\n};\n\nconst isCrossRuntimeRecordIdObject = (\n\tvalue: unknown,\n): value is SurrealRecordIdLike => {\n\tif (!value || typeof value !== 'object' || value instanceof RecordId) {\n\t\treturn false;\n\t}\n\tconst obj = value as Partial<SurrealRecordIdLike>;\n\tif (typeof obj.toString !== 'function') return false;\n\tif (!('table' in obj) || !('id' in obj)) return false;\n\tconst ctorName = getCtorName(value);\n\t// SurrealDB instances can be RecordId/RecordId2/etc across CJS/ESM bundles.\n\tif (!ctorName || !/^RecordId\\d*$/.test(ctorName)) return false;\n\n\tconst tableValue = obj.table;\n\tconst table =\n\t\ttypeof tableValue === 'string'\n\t\t\t? tableValue\n\t\t\t: tableValue != null\n\t\t\t\t? String(tableValue)\n\t\t\t\t: '';\n\tconst idValue = obj.id;\n\tconst idIsPrimitive =\n\t\ttypeof idValue === 'string' ||\n\t\ttypeof idValue === 'number' ||\n\t\ttypeof idValue === 'bigint';\n\treturn idIsPrimitive && looksLikeTableName(stripOuterQuotes(table).trim());\n};\n\nconst toCanonicalRecordIdString = (value: string): string | undefined => {\n\tconst normalized = toRecordIdString(value);\n\tif (!isRecordIdString(normalized)) return undefined;\n\n\tconst idx = normalized.indexOf(':');\n\tconst table = stripOuterQuotes(normalized.slice(0, idx).trim());\n\tconst key = normalized.slice(idx + 1).trim();\n\tif (!table || !key || !looksLikeTableName(table)) return undefined;\n\treturn `${table}:${key}`;\n};\n\nconst unwrapIdWrapper = (value: unknown): unknown => {\n\tif (!value || typeof value !== 'object') return undefined;\n\tconst obj = value as Record<string, unknown>;\n\tconst keys = Object.keys(obj);\n\tif (keys.length !== 1 || keys[0] !== 'id') return undefined;\n\treturn obj.id;\n};\n\nconst asCanonicalRecordIdFromCrossRuntimeObject = (\n\tvalue: unknown,\n): string | undefined => {\n\tif (!isCrossRuntimeRecordIdObject(value)) return undefined;\n\tconst obj = value as SurrealRecordIdLike;\n\tconst tableRaw =\n\t\ttypeof obj.table === 'string' ? obj.table : String(obj.table);\n\tconst table = stripOuterQuotes(tableRaw).trim();\n\tconst id = String(obj.id);\n\tconst fromFields =\n\t\ttable && id && looksLikeTableName(table) ? `${table}:${id}` : undefined;\n\tif (fromFields) return toCanonicalRecordIdString(fromFields);\n\treturn toCanonicalRecordIdString(String(obj.toString()));\n};\n\nexport const asCanonicalRecordIdString = (\n\tvalue: unknown,\n): string | undefined => {\n\tif (typeof value === 'string') {\n\t\treturn toCanonicalRecordIdString(value);\n\t}\n\tif (value instanceof RecordId) {\n\t\treturn toCanonicalRecordIdString(value.toString());\n\t}\n\tconst crossRuntimeCanonical =\n\t\tasCanonicalRecordIdFromCrossRuntimeObject(value);\n\tif (crossRuntimeCanonical) return crossRuntimeCanonical;\n\tconst wrappedId = unwrapIdWrapper(value);\n\tif (wrappedId === undefined || wrappedId === value) return undefined;\n\treturn asCanonicalRecordIdString(wrappedId);\n};\n\nexport const toNativeRecordIdLikeValue = (value: unknown): unknown => {\n\tif (value instanceof RecordId) {\n\t\tconst canonical = asCanonicalRecordIdString(value);\n\t\tif (!canonical) return value;\n\t\treturn getNativeRecordId(canonical);\n\t}\n\tconst canonical = asCanonicalRecordIdString(value);\n\tif (!canonical) return value;\n\treturn getNativeRecordId(canonical);\n};\n\nexport const preferRecordIdLikeIdentity = (value: unknown): unknown => {\n\tconst canonical = asCanonicalRecordIdString(value);\n\tif (!canonical) return normalizeRecordIdLikeValue(value);\n\n\tif (value instanceof RecordId) {\n\t\trecordIdIdentityPool.set(canonical, value);\n\t\treturn value;\n\t}\n\n\tif (isCrossRuntimeRecordIdObject(value)) {\n\t\trecordIdIdentityPool.set(canonical, value);\n\t\treturn value;\n\t}\n\n\tconst wrappedId = unwrapIdWrapper(value);\n\tif (wrappedId instanceof RecordId) {\n\t\trecordIdIdentityPool.set(canonical, wrappedId);\n\t\treturn wrappedId;\n\t}\n\tif (isCrossRuntimeRecordIdObject(wrappedId)) {\n\t\trecordIdIdentityPool.set(canonical, wrappedId);\n\t\treturn wrappedId;\n\t}\n\n\treturn internRecordIdIdentity(canonical);\n};\n\nexport const preferRecordIdLikeIdentityDeep = <T>(value: T): T => {\n\tconst preferred = preferRecordIdLikeIdentity(value);\n\n\tif (Array.isArray(preferred)) {\n\t\treturn preferred.map((item) =>\n\t\t\tpreferRecordIdLikeIdentityDeep(item),\n\t\t) as T;\n\t}\n\n\tif (isPlainObject(preferred)) {\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const [k, v] of Object.entries(preferred)) {\n\t\t\tout[k] = preferRecordIdLikeIdentityDeep(v);\n\t\t}\n\t\treturn out as T;\n\t}\n\n\treturn preferred as T;\n};\n\nexport const normalizeRecordIdLikeValue = (value: unknown): unknown => {\n\tif (value instanceof RecordId) {\n\t\tconst canonical = asCanonicalRecordIdString(value);\n\t\tif (!canonical) return value;\n\t\treturn internRecordIdIdentity(canonical, value);\n\t}\n\tif (typeof value === 'object' && value !== null) {\n\t\tconst canonical = asCanonicalRecordIdString(value);\n\t\tif (!canonical) return value;\n\n\t\tif (isCrossRuntimeRecordIdObject(value)) {\n\t\t\treturn internRecordIdIdentity(canonical, value);\n\t\t}\n\n\t\tconst wrappedId = unwrapIdWrapper(value);\n\t\tif (\n\t\t\twrappedId instanceof RecordId ||\n\t\t\tisCrossRuntimeRecordIdObject(wrappedId)\n\t\t) {\n\t\t\treturn internRecordIdIdentity(canonical, wrappedId);\n\t\t}\n\n\t\treturn internRecordIdIdentity(canonical);\n\t}\n\tif (typeof value !== 'string') return value;\n\n\tconst trimmed = value.trim();\n\tconst unquoted = stripOuterQuotes(trimmed);\n\tconst canonical =\n\t\ttoCanonicalRecordIdString(unquoted) ??\n\t\t(unquoted === trimmed ? undefined : toCanonicalRecordIdString(trimmed));\n\tif (canonical) {\n\t\treturn internRecordIdIdentity(canonical);\n\t}\n\n\t// Keep original value shape if it isn't record-id-like\n\treturn value;\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' &&\n\tvalue !== null &&\n\tObject.getPrototypeOf(value) === Object.prototype;\n\nexport const normalizeRecordIdLikeValueDeep = <T>(value: T): T => {\n\tconst normalized = normalizeRecordIdLikeValue(value);\n\n\tif (Array.isArray(normalized)) {\n\t\treturn normalized.map((item) =>\n\t\t\tnormalizeRecordIdLikeValueDeep(item),\n\t\t) as T;\n\t}\n\n\tif (isPlainObject(normalized)) {\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const [k, v] of Object.entries(normalized)) {\n\t\t\tout[k] = normalizeRecordIdLikeValueDeep(v);\n\t\t}\n\t\treturn out as T;\n\t}\n\n\treturn normalized as T;\n};\n\nexport const normalizeRecordIdLikeFields = <T extends Record<string, unknown>>(\n\tdata: T,\n): T => {\n\tconst out: Record<string, unknown> = {};\n\tfor (const [k, v] of Object.entries(data)) {\n\t\tout[k] = normalizeRecordIdLikeValue(v);\n\t}\n\treturn out as T;\n};\n\nexport const toRecordId = (\n\ttableName: string,\n\tid: RecordId | string,\n): RecordId => {\n\tif (id instanceof RecordId) {\n\t\treturn id;\n\t}\n\n\tconst normalized = toRecordIdString(id);\n\tconst prefixed = `${tableName}:`;\n\tconst key = normalized.startsWith(prefixed)\n\t\t? normalized.slice(prefixed.length)\n\t\t: normalized;\n\treturn new RecordId(tableName, key);\n};\n","import { parseOrderByExpression, parseWhereExpression } from '@tanstack/db';\nimport {\n\tFeatures,\n\ttype LiveMessage,\n\ttype LiveSubscription,\n\ttype RecordId,\n\ttype Surreal,\n\tTable,\n} from 'surrealdb';\nimport {\n\tnormalizeRecordIdLikeValue,\n\ttoNativeRecordIdLikeValue,\n\ttoRecordId,\n} from './id';\nimport type { SurrealSubset, TableOptions } from './types';\n\ntype QueryResult<T> = T[] | null;\ntype RowResult<T> = T | T[] | null;\ntype FieldPath = Array<string | number>;\ntype SqlFragment = { sql: string };\n\nconst IDENTIFIER_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\nconst firstRow = <T>(res: RowResult<T>): T | undefined => {\n\tif (!res) return undefined;\n\tif (Array.isArray(res)) return res[0];\n\treturn res;\n};\n\nconst toFieldPath = (value: unknown): FieldPath => {\n\tif (!Array.isArray(value)) {\n\t\tthrow new Error('Expected a field path array in where expression.');\n\t}\n\treturn value as FieldPath;\n};\n\nconst quoteIdentifier = (segment: string): string => {\n\tif (IDENTIFIER_RE.test(segment)) return segment;\n\treturn `\\`${segment.replaceAll('`', '\\\\`')}\\``;\n};\n\nconst formatFieldPath = (path: FieldPath): string => {\n\tlet out = '';\n\tfor (const segment of path) {\n\t\tif (typeof segment === 'number') {\n\t\t\tout += `[${segment}]`;\n\t\t\tcontinue;\n\t\t}\n\t\tconst next = quoteIdentifier(segment);\n\t\tout = out ? `${out}.${next}` : next;\n\t}\n\treturn out;\n};\n\nconst isReferencePathCandidate = (value: unknown): value is FieldPath =>\n\tArray.isArray(value) &&\n\tvalue.length > 0 &&\n\ttypeof value[0] === 'string' &&\n\tvalue.every(\n\t\t(segment) => typeof segment === 'string' || typeof segment === 'number',\n\t);\n\nconst mapRelationPath = (path: FieldPath, relation?: boolean): FieldPath => {\n\tif (!relation) return path;\n\tif (path[0] === 'from') return ['in', ...path.slice(1)];\n\tif (path[0] === 'to') return ['out', ...path.slice(1)];\n\treturn path;\n};\n\nconst normalizeFilterValue = (value: unknown): unknown => {\n\tif (Array.isArray(value))\n\t\treturn value.map((item) => normalizeFilterValue(item));\n\n\tconst native = toNativeRecordIdLikeValue(value);\n\tif (native !== value) return native;\n\n\tif (value && typeof value === 'object')\n\t\treturn normalizeRecordIdLikeValue(value);\n\n\treturn normalizeRecordIdLikeValue(value);\n};\n\nconst toSqlFragment = (value: unknown): SqlFragment => {\n\tif (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\t'sql' in value &&\n\t\ttypeof (value as { sql: unknown }).sql === 'string'\n\t) {\n\t\treturn value as SqlFragment;\n\t}\n\tthrow new Error('Unsupported where expression node.');\n};\n\nconst joinLogical = (op: 'AND' | 'OR', args: Array<unknown>): SqlFragment => {\n\tconst parts = args.map(toSqlFragment).map((frag) => frag.sql);\n\tif (parts.length === 0) {\n\t\treturn { sql: op === 'AND' ? 'true' : 'false' };\n\t}\n\tif (parts.length === 1) return { sql: parts[0] };\n\treturn {\n\t\tsql: parts.map((part) => `(${part})`).join(` ${op} `),\n\t};\n};\n\nconst buildSubsetQuery = (\n\ttable: TableOptions,\n\tsubset?: SurrealSubset,\n): { sql: string; params: Record<string, unknown> } => {\n\tlet paramIdx = 0;\n\tconst params: Record<string, unknown> = { table: table.name };\n\tconst nextParam = (value: unknown): string => {\n\t\tconst key = `p${paramIdx++}`;\n\t\tparams[key] = value;\n\t\treturn `$${key}`;\n\t};\n\tconst comparison = (\n\t\tfieldPath: unknown,\n\t\top: '=' | '!=' | '>' | '>=' | '<' | '<=' | 'LIKE',\n\t\tvalue: unknown,\n\t): SqlFragment => {\n\t\tconst field = formatFieldPath(\n\t\t\tmapRelationPath(toFieldPath(fieldPath), table.relation),\n\t\t);\n\n\t\tif (value === undefined) {\n\t\t\tif (op === '=') return { sql: `${field} IS NONE` };\n\t\t\tif (op === '!=') return { sql: `${field} IS NOT NONE` };\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot compare field '${field}' with undefined using '${op}'.`,\n\t\t\t);\n\t\t}\n\n\t\tif (isReferencePathCandidate(value)) {\n\t\t\tthrow new Error(\n\t\t\t\t'Got a field reference on the right side of a where comparison. Pass a concrete value.',\n\t\t\t);\n\t\t}\n\t\treturn {\n\t\t\tsql: `${field} ${op} ${nextParam(normalizeFilterValue(value))}`,\n\t\t};\n\t};\n\tconst whereSqlFrom = (\n\t\texpr: NonNullable<SurrealSubset['where']>,\n\t): string => {\n\t\tconst fragment = parseWhereExpression<SqlFragment>(expr, {\n\t\t\thandlers: {\n\t\t\t\tand: (...args) => joinLogical('AND', args),\n\t\t\t\tor: (...args) => joinLogical('OR', args),\n\t\t\t\tnot: (arg) => ({ sql: `NOT (${toSqlFragment(arg).sql})` }),\n\t\t\t\teq: (field, value) => comparison(field, '=', value),\n\t\t\t\tgt: (field, value) => comparison(field, '>', value),\n\t\t\t\tgte: (field, value) => comparison(field, '>=', value),\n\t\t\t\tlt: (field, value) => comparison(field, '<', value),\n\t\t\t\tlte: (field, value) => comparison(field, '<=', value),\n\t\t\t\tlike: (field, value) => comparison(field, 'LIKE', value),\n\t\t\t\tilike: (field, value) => {\n\t\t\t\t\tconst f = formatFieldPath(\n\t\t\t\t\t\tmapRelationPath(toFieldPath(field), table.relation),\n\t\t\t\t\t);\n\t\t\t\t\tconst p = nextParam(normalizeFilterValue(value));\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsql: `string::lower(${f}) LIKE string::lower(${p})`,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tin: (field, value) => {\n\t\t\t\t\tconst f = formatFieldPath(\n\t\t\t\t\t\tmapRelationPath(toFieldPath(field), table.relation),\n\t\t\t\t\t);\n\t\t\t\t\tif (Array.isArray(value) && value.length === 0) {\n\t\t\t\t\t\treturn { sql: 'false' };\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsql: `${f} IN ${nextParam(normalizeFilterValue(value))}`,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tisNull: (field) => ({\n\t\t\t\t\tsql: `${formatFieldPath(\n\t\t\t\t\t\tmapRelationPath(toFieldPath(field), table.relation),\n\t\t\t\t\t)} IS NULL`,\n\t\t\t\t}),\n\t\t\t\tisUndefined: (field) => ({\n\t\t\t\t\tsql: `${formatFieldPath(\n\t\t\t\t\t\tmapRelationPath(toFieldPath(field), table.relation),\n\t\t\t\t\t)} IS NONE`,\n\t\t\t\t}),\n\t\t\t},\n\t\t\tonUnknownOperator: (op) => {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Unsupported where operator '${op}' for SurrealQL translation.`,\n\t\t\t\t);\n\t\t\t},\n\t\t});\n\n\t\tif (!fragment) return '';\n\t\treturn fragment.sql;\n\t};\n\n\tconst whereParts: string[] = [];\n\tif (subset?.where) {\n\t\tconst parsed = whereSqlFrom(subset.where);\n\t\tif (parsed) whereParts.push(parsed);\n\t}\n\tif (subset?.cursor?.whereFrom) {\n\t\tconst cursorWhere = whereSqlFrom(subset.cursor.whereFrom);\n\t\tif (cursorWhere) whereParts.push(cursorWhere);\n\t}\n\n\tconst whereSql = whereParts.length\n\t\t? ` WHERE ${whereParts.map((part) => `(${part})`).join(' AND ')}`\n\t\t: '';\n\n\tconst order = parseOrderByExpression(subset?.orderBy);\n\tconst orderSql = order.length\n\t\t? ` ORDER BY ${order\n\t\t\t\t.map(\n\t\t\t\t\t(clause) =>\n\t\t\t\t\t\t`${formatFieldPath(\n\t\t\t\t\t\t\tmapRelationPath(clause.field, table.relation),\n\t\t\t\t\t\t)} ${clause.direction.toUpperCase()}`,\n\t\t\t\t)\n\t\t\t\t.join(', ')}`\n\t\t: '';\n\tconst limitSql =\n\t\ttypeof subset?.limit === 'number'\n\t\t\t? ` LIMIT ${nextParam(subset.limit)}`\n\t\t\t: '';\n\tconst offsetSql =\n\t\ttypeof subset?.offset === 'number'\n\t\t\t? ` START ${nextParam(subset.offset)}`\n\t\t\t: '';\n\n\treturn {\n\t\tsql: `SELECT * FROM type::table($table)${whereSql}${orderSql}${limitSql}${offsetSql};`,\n\t\tparams,\n\t};\n};\n\nexport function manageTable<T extends { id: string | RecordId }>(\n\tdb: Surreal,\n\tconfig: TableOptions,\n) {\n\tconst { name } = config;\n\tconst table = new Table(name);\n\n\tconst listAll = async (): Promise<T[]> => {\n\t\treturn loadSubset();\n\t};\n\n\tconst loadSubset = async (subset?: SurrealSubset): Promise<T[]> => {\n\t\tconst { sql, params } = buildSubsetQuery(config, subset);\n\t\tconst [res] = await db.query<[QueryResult<T>]>(sql, params);\n\t\treturn res ?? [];\n\t};\n\n\tconst create = async (data: T | Partial<T>): Promise<T | undefined> => {\n\t\tconst id = (data as Partial<T> & { id?: string | RecordId }).id;\n\t\tif (!id) {\n\t\t\tconst created = await db.create(table).content(data);\n\t\t\treturn firstRow(created as RowResult<T>);\n\t\t}\n\n\t\tconst payload = { ...(data as Record<string, unknown>) };\n\t\tpayload.id = toRecordId(name, id);\n\t\tconst inserted = await db.insert(table, payload);\n\t\treturn firstRow(inserted as RowResult<T>);\n\t};\n\n\tconst update = async (id: RecordId, data: T | Partial<T>) => {\n\t\tconst { id: _ignoredId, ...rest } = data as Record<string, unknown>;\n\t\tawait db.update(id).merge(rest);\n\t};\n\n\tconst remove = async (id: RecordId) => {\n\t\tawait db.delete(id);\n\t};\n\n\tconst subscribe = (\n\t\tcb: (e: { type: 'insert' | 'update' | 'delete'; row: T }) => void,\n\t) => {\n\t\tlet killed = false;\n\t\tlet live: LiveSubscription | undefined;\n\n\t\tconst on = (msg: LiveMessage) => {\n\t\t\tconst { action, value } = msg as unknown as {\n\t\t\t\taction: 'CREATE' | 'UPDATE' | 'DELETE' | 'KILLED';\n\t\t\t\tvalue: T & { id: string | RecordId };\n\t\t\t};\n\n\t\t\tif (action === 'KILLED') return;\n\t\t\tif (action === 'CREATE') cb({ type: 'insert', row: value });\n\t\t\telse if (action === 'UPDATE') cb({ type: 'update', row: value });\n\t\t\telse if (action === 'DELETE')\n\t\t\t\tcb({ type: 'delete', row: { id: value.id } as T });\n\t\t};\n\n\t\tconst start = async () => {\n\t\t\tif (!db.isFeatureSupported(Features.LiveQueries)) return;\n\t\t\tlive = await db.live(table);\n\t\t\tlive.subscribe(on);\n\t\t};\n\n\t\tvoid start();\n\n\t\treturn () => {\n\t\t\tif (killed) return;\n\t\t\tkilled = true;\n\t\t\tif (live) void live.kill();\n\t\t};\n\t};\n\n\treturn {\n\t\tlistAll,\n\t\tloadSubset,\n\t\tcreate,\n\t\tupdate,\n\t\tremove,\n\t\tsoftDelete: remove,\n\t\tsubscribe,\n\t};\n}\n","import type { LiveAction } from 'surrealdb';\nimport type { Bytes } from './types';\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\nconst hasBuffer = typeof Buffer !== 'undefined';\n\nexport function toBytes(value: string | object): Bytes {\n\tif (typeof value === 'string') return encoder.encode(value);\n\treturn encoder.encode(JSON.stringify(value));\n}\n\nexport function fromBytes<T>(bytes: Bytes, deserialize = false): T | string {\n\tif (deserialize) return JSON.parse(decoder.decode(bytes)) as T;\n\treturn decoder.decode(bytes);\n}\n\nexport function toBase64(bytes: Bytes): string {\n\tif (hasBuffer) return Buffer.from(bytes).toString('base64');\n\treturn btoa(String.fromCharCode(...bytes));\n}\n\nexport function fromBase64(base64: string): Bytes {\n\tif (hasBuffer) return new Uint8Array(Buffer.from(base64, 'base64'));\n\tconst bin = atob(base64);\n\tconst out = new Uint8Array(bin.length);\n\tfor (let i = 0; i < bin.length; i++) {\n\t\tout[i] = bin.charCodeAt(i);\n\t}\n\treturn out;\n}\n\nexport function surrealActionMapType(\n\taction: LiveAction,\n): 'insert' | 'update' | 'delete' {\n\tswitch (action) {\n\t\tcase 'CREATE':\n\t\t\treturn 'insert';\n\t\tcase 'UPDATE':\n\t\t\treturn 'update';\n\t\tcase 'DELETE':\n\t\t\treturn 'delete';\n\t\tdefault:\n\t\t\treturn 'update';\n\t}\n}\n","import { fromBase64, toBase64 } from '../util';\nimport type { Bytes, EncryptedEnvelope } from '../types';\nimport type { CryptoProvider, DecryptInput, EncryptInput } from './provider';\n\nexport * from './provider';\nexport * from './types';\n\ntype KeyResolver = (kid: string) => Promise<CryptoKey> | CryptoKey;\n\ntype WebCryptoAESGCMOptions = {\n\talg?: string;\n\tversion?: number;\n\tkid?: string;\n\tresolveKey?: KeyResolver;\n};\n\nconst DEFAULT_ALG = 'AES-256-GCM';\nconst DEFAULT_KID = 'default';\nconst DEFAULT_VERSION = 1;\n\nconst resolveCrypto = (): Crypto => {\n\tif (typeof globalThis.crypto !== 'undefined') return globalThis.crypto;\n\tthrow new Error('Web Crypto API is not available in this runtime.');\n};\n\nconst toCryptoBytes = (value: Bytes): Uint8Array => new Uint8Array(value);\n\nexport class WebCryptoAESGCM implements CryptoProvider {\n\tprivate readonly alg: string;\n\tprivate readonly version: number;\n\tprivate readonly kid: string;\n\tprivate readonly resolveKey: KeyResolver;\n\n\tconstructor(key: CryptoKey, options: WebCryptoAESGCMOptions = {}) {\n\t\tthis.alg = options.alg ?? DEFAULT_ALG;\n\t\tthis.version = options.version ?? DEFAULT_VERSION;\n\t\tthis.kid = options.kid ?? DEFAULT_KID;\n\t\tthis.resolveKey =\n\t\t\toptions.resolveKey ??\n\t\t\t((incomingKid) => {\n\t\t\t\tif (incomingKid !== this.kid) {\n\t\t\t\t\tthrow new Error(`No key configured for kid '${incomingKid}'.`);\n\t\t\t\t}\n\t\t\t\treturn key;\n\t\t\t});\n\t}\n\n\tstatic async fromRawKey(\n\t\trawKey: Bytes,\n\t\toptions: Omit<WebCryptoAESGCMOptions, 'resolveKey'> = {},\n\t) {\n\t\tconst key = await resolveCrypto().subtle.importKey(\n\t\t\t'raw',\n\t\t\ttoCryptoBytes(rawKey) as never,\n\t\t\t'AES-GCM',\n\t\t\tfalse,\n\t\t\t['encrypt', 'decrypt'],\n\t\t);\n\n\t\treturn new WebCryptoAESGCM(key, options);\n\t}\n\n\tprivate async keyFor(kid: string): Promise<CryptoKey> {\n\t\treturn await this.resolveKey(kid);\n\t}\n\n\tasync encrypt(input: EncryptInput): Promise<EncryptedEnvelope> {\n\t\tconst crypto = resolveCrypto();\n\t\tconst alg = input.alg ?? this.alg;\n\t\tconst kid = input.kid ?? this.kid;\n\t\tconst v = input.v ?? this.version;\n\t\tconst nonce = crypto.getRandomValues(new Uint8Array(12));\n\t\tconst key = await this.keyFor(kid);\n\t\tconst ct = new Uint8Array(\n\t\t\tawait crypto.subtle.encrypt(\n\t\t\t\t{\n\t\t\t\t\tname: 'AES-GCM',\n\t\t\t\t\tiv: nonce,\n\t\t\t\t\tadditionalData: input.aad\n\t\t\t\t\t\t? (toCryptoBytes(input.aad) as never)\n\t\t\t\t\t\t: undefined,\n\t\t\t\t},\n\t\t\t\tkey,\n\t\t\t\ttoCryptoBytes(input.plaintext) as never,\n\t\t\t),\n\t\t);\n\n\t\treturn {\n\t\t\tv,\n\t\t\talg,\n\t\t\tkid,\n\t\t\tn: toBase64(nonce),\n\t\t\tct: toBase64(ct),\n\t\t};\n\t}\n\n\tasync decrypt({ envelope, aad }: DecryptInput): Promise<Bytes> {\n\t\tif (envelope.alg !== this.alg) {\n\t\t\tthrow new Error(\n\t\t\t\t`Unsupported envelope algorithm '${envelope.alg}'. Expected '${this.alg}'.`,\n\t\t\t);\n\t\t}\n\n\t\tconst key = await this.keyFor(envelope.kid);\n\t\tconst crypto = resolveCrypto();\n\t\tconst plaintext = await crypto.subtle.decrypt(\n\t\t\t{\n\t\t\t\tname: 'AES-GCM',\n\t\t\t\tiv: toCryptoBytes(fromBase64(envelope.n)) as never,\n\t\t\t\tadditionalData: aad ? (toCryptoBytes(aad) as never) : undefined,\n\t\t\t},\n\t\t\tkey,\n\t\t\ttoCryptoBytes(fromBase64(envelope.ct)) as never,\n\t\t);\n\n\t\treturn new Uint8Array(plaintext);\n\t}\n}\n","import type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type {\n\tCollectionConfig,\n\tDeleteMutationFn,\n\tDeleteMutationFnParams,\n\tInsertMutationFn,\n\tInsertMutationFnParams,\n\tLoadSubsetOptions,\n\tOperationConfig,\n\tStandardSchema,\n\tSyncConfig,\n\tTransaction,\n\tUpdateMutationFn,\n\tUpdateMutationFnParams,\n\tUtilsRecord,\n} from '@tanstack/db';\nimport { queryCollectionOptions } from '@tanstack/query-db-collection';\nimport { LoroDoc } from 'loro-crdt';\nimport { Features, RecordId, Table } from 'surrealdb';\nimport { createLoroProfile } from './crdt';\nimport {\n\tnormalizeRecordIdLikeFields,\n\tnormalizeRecordIdLikeValueDeep,\n\ttoRecordId,\n\ttoRecordIdString,\n\ttoRecordKeyString,\n} from './id';\nimport { manageTable } from './table';\nimport type {\n\tAADContext,\n\tAdapterSyncMode,\n\tEncryptedEnvelope,\n\tLocalChange,\n\tSurrealCollectionOptions,\n\tSurrealCollectionOptionsReturn,\n\tSyncedTable,\n\tTableLike,\n\tTableOptions,\n} from './types';\nimport { fromBase64, fromBytes, toBase64, toBytes } from './util';\n\nexport * from './crdt';\nexport * from './encryption';\nexport { toRecordKeyString } from './id';\nexport * from './types';\n\nconst TEMP_ID_PREFIX = '__temp__';\nconst ENVELOPE_FIELDS = [\n\t'version',\n\t'algorithm',\n\t'key_id',\n\t'nonce',\n\t'ciphertext',\n] as const;\nconst NOOP = () => {};\n\ntype Cleanup = () => void;\n\ntype MutationInput<T extends { id: string | RecordId }> = Omit<T, 'id'> & {\n\tid?: T['id'];\n};\n\ntype QueryWriteUtils = {\n\twriteUpsert?: (data: unknown) => void;\n\twriteDelete?: (key: string) => void;\n};\n\ntype CRDTUpdateRow = {\n\tdoc: string | RecordId;\n\tts?: string | Date;\n\tupdate_bytes?: string;\n\tsnapshot_bytes?: string;\n\tversion?: number;\n\talgorithm?: string;\n\tkey_id?: string;\n\tnonce?: string;\n\tciphertext?: string;\n\tactor?: string;\n};\n\ntype LiveMessageLike = {\n\taction: 'CREATE' | 'UPDATE' | 'DELETE' | 'KILLED';\n\tvalue: Record<string, unknown>;\n};\n\ntype LiveSubscriptionLike = {\n\tisAlive?: boolean;\n\tsubscribe: (cb: (msg: LiveMessageLike) => void | Promise<void>) => void;\n\tkill: () => Promise<void>;\n};\n\nconst isTableObject = (value: unknown): value is TableOptions =>\n\ttypeof value === 'object' &&\n\tvalue !== null &&\n\t'name' in value &&\n\ttypeof (value as { name: unknown }).name === 'string';\n\nconst toTableOptions = (table: TableLike): TableOptions => {\n\tif (typeof table === 'string') return { name: table };\n\tif (table instanceof Table) return { name: table.name };\n\tif (isTableObject(table)) return table;\n\tthrow new Error('Expected table as string, Table, or { name }.');\n};\n\nconst toTableResource = (table: TableLike): Table => {\n\tconst normalized = toTableOptions(table);\n\treturn new Table(normalized.name);\n};\n\nconst tableNameOf = (table: TableLike): string => toTableOptions(table).name;\n\nconst getWriteUtils = (utils: unknown): QueryWriteUtils =>\n\ttypeof utils === 'object' && utils !== null\n\t\t? (utils as QueryWriteUtils)\n\t\t: {};\n\nconst firstRow = <T>(result: T | T[] | null | undefined): T | undefined => {\n\tif (!result) return undefined;\n\tif (Array.isArray(result)) return result[0];\n\treturn result;\n};\n\nconst omitUndefined = <T extends Record<string, unknown>>(obj: T): Partial<T> =>\n\tObject.fromEntries(\n\t\tObject.entries(obj).filter(([, value]) => value !== undefined),\n\t) as Partial<T>;\n\nconst createTempRecordId = (tableName: string): RecordId => {\n\tconst suffix = `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;\n\treturn new RecordId(tableName, `${TEMP_ID_PREFIX}${suffix}`);\n};\n\nconst isTempId = (id: string | RecordId, tableName: string): boolean => {\n\tconst normalized = toRecordIdString(id);\n\tconst key = normalized.startsWith(`${tableName}:`)\n\t\t? normalized.slice(tableName.length + 1)\n\t\t: normalized;\n\treturn key.startsWith(TEMP_ID_PREFIX);\n};\n\nconst toEnvelope = (\n\tvalue: Record<string, unknown>,\n): EncryptedEnvelope | null => {\n\tconst version = value.version;\n\tconst algorithm = value.algorithm;\n\tconst keyId = value.key_id;\n\tconst nonce = value.nonce;\n\tconst ciphertext = value.ciphertext;\n\tif (\n\t\ttypeof version !== 'number' ||\n\t\ttypeof algorithm !== 'string' ||\n\t\ttypeof keyId !== 'string' ||\n\t\ttypeof nonce !== 'string' ||\n\t\ttypeof ciphertext !== 'string'\n\t) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tv: version,\n\t\talg: algorithm,\n\t\tkid: keyId,\n\t\tn: nonce,\n\t\tct: ciphertext,\n\t};\n};\n\nconst toStoredEnvelope = (\n\tenvelope: EncryptedEnvelope,\n): Record<string, unknown> => ({\n\tversion: envelope.v,\n\talgorithm: envelope.alg,\n\tkey_id: envelope.kid,\n\tnonce: envelope.n,\n\tciphertext: envelope.ct,\n});\n\nconst stripEnvelopeFields = (\n\tvalue: Record<string, unknown>,\n): Record<string, unknown> => {\n\tconst copy = { ...value };\n\tfor (const key of ENVELOPE_FIELDS) delete copy[key];\n\treturn copy;\n};\n\nconst toRecordArray = <T>(rows: T | T[] | null | undefined): T[] => {\n\tif (!rows) return [];\n\treturn Array.isArray(rows) ? rows : [rows];\n};\n\nasync function queryRows<T>(\n\tdb: {\n\t\tquery: (\n\t\t\tsql: string,\n\t\t\tbindings?: Record<string, unknown>,\n\t\t) => Promise<unknown>;\n\t},\n\tsql: string,\n\tbindings?: Record<string, unknown>,\n): Promise<T[]> {\n\tconst result = await db.query(sql, bindings ?? {});\n\tif (Array.isArray(result)) {\n\t\tconst first = result[0];\n\t\tif (Array.isArray(first)) return first as T[];\n\t\treturn [];\n\t}\n\treturn [];\n}\n\nfunction createInsertSchema<T extends { id: string | RecordId }>(\n\ttableName: string,\n): StandardSchemaV1<MutationInput<T>, T> {\n\treturn {\n\t\t'~standard': {\n\t\t\tversion: 1,\n\t\t\tvendor: 'tanstack-db-surrealdb',\n\t\t\tvalidate: (value: unknown) => {\n\t\t\t\tif (\n\t\t\t\t\t!value ||\n\t\t\t\t\ttypeof value !== 'object' ||\n\t\t\t\t\tArray.isArray(value)\n\t\t\t\t) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tissues: [{ message: 'Insert data must be an object.' }],\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst data = normalizeRecordIdLikeFields({\n\t\t\t\t\t...(value as Record<string, unknown>),\n\t\t\t\t}) as MutationInput<T>;\n\n\t\t\t\tif (!data.id)\n\t\t\t\t\tdata.id = createTempRecordId(tableName) as T['id'];\n\n\t\t\t\treturn { value: data as T };\n\t\t\t},\n\t\t\ttypes: undefined,\n\t\t},\n\t};\n}\n\nfunction defaultAad(ctx: AADContext): Uint8Array {\n\tif (ctx.kind === 'base') return toBytes(`${ctx.table}:${ctx.id}`);\n\tconst base = ctx.baseTable ?? ctx.table;\n\treturn toBytes(`${ctx.table}:${base}:${ctx.id}`);\n}\n\nconst syncModeFrom = (syncMode: AdapterSyncMode | undefined): AdapterSyncMode =>\n\tsyncMode ?? 'eager';\n\nconst subsetCacheKey = (subset: LoadSubsetOptions): string =>\n\tJSON.stringify(subset, (_key, value) => {\n\t\tif (value instanceof Date) return value.toISOString();\n\t\tif (value instanceof RecordId) return toRecordIdString(value);\n\t\tif (typeof value === 'function') return undefined;\n\t\tif (\n\t\t\tvalue &&\n\t\t\ttypeof value === 'object' &&\n\t\t\t'table' in (value as Record<string, unknown>) &&\n\t\t\t'id' in (value as Record<string, unknown>)\n\t\t) {\n\t\t\ttry {\n\t\t\t\treturn toRecordIdString(String(value));\n\t\t\t} catch {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t});\n\ntype BaseSyncRuntime<T extends { id: string | RecordId }> = {\n\tstartRealtime: () => Promise<void>;\n\tcleanup: () => void;\n\tloadSubset: (subset: LoadSubsetOptions) => Promise<void>;\n\tunloadSubset: (subset: LoadSubsetOptions) => void;\n};\n\nfunction modernSurrealCollectionOptions<T extends SyncedTable<object>>(\n\tconfig: SurrealCollectionOptions<T>,\n): SurrealCollectionOptionsReturn<T> {\n\tconst {\n\t\tdb,\n\t\ttable,\n\t\tqueryClient,\n\t\tqueryKey,\n\t\tonError,\n\t\te2ee,\n\t\tcrdt,\n\t\tsyncMode: inputSyncMode,\n\t} = config;\n\n\tif (!queryClient || !queryKey) {\n\t\tthrow new Error('queryClient and queryKey are required.');\n\t}\n\n\tconst syncMode = syncModeFrom(inputSyncMode);\n\tconst isOnDemandLike =\n\t\tsyncMode === 'on-demand' || syncMode === 'progressive';\n\tconst isStrictOnDemand = syncMode === 'on-demand';\n\tconst queryDrivenSyncMode: 'eager' | 'on-demand' = isOnDemandLike\n\t\t? 'on-demand'\n\t\t: 'eager';\n\tconst tableOptions = toTableOptions(table);\n\tconst tableName = tableOptions.name;\n\tconst tableResource = toTableResource(table);\n\tconst subsetIds = new Map<string, Set<string>>();\n\tconst activeOnDemandIds = new Set<string>();\n\n\tconst e2eeEnabled = e2ee?.enabled === true;\n\tconst crdtEnabled = crdt?.enabled === true;\n\tconst defaultCrdtProfile = crdtEnabled\n\t\t? createLoroProfile<T>(crdt.profile)\n\t\t: undefined;\n\tconst materializeCrdt =\n\t\tcrdt?.materialize ?? defaultCrdtProfile?.materialize;\n\tconst applyCrdtLocalChange =\n\t\tcrdt?.applyLocalChange ?? defaultCrdtProfile?.applyLocalChange;\n\tif (crdtEnabled && (!materializeCrdt || !applyCrdtLocalChange)) {\n\t\tthrow new Error(\n\t\t\t'CRDT profile adapter is missing materialize/applyLocalChange handlers.',\n\t\t);\n\t}\n\n\tconst tableAccess = manageTable<T>(db, tableOptions);\n\tconst docs = new Map<string, LoroDoc>();\n\n\tconst aadFor = (ctx: AADContext): Uint8Array =>\n\t\t(e2ee?.aad ?? defaultAad)(ctx);\n\n\tconst getKey = (row: { id: string | RecordId }) => toRecordIdString(row.id);\n\tconst normalizeMutationId = (id: string | RecordId): RecordId =>\n\t\ttoRecordId(tableName, id);\n\n\tconst normalizeRow = (row: T): T => {\n\t\tconst normalized = normalizeRecordIdLikeValueDeep(row) as T;\n\t\treturn {\n\t\t\t...normalized,\n\t\t\tid: normalizeMutationId(normalized.id),\n\t\t} as T;\n\t};\n\n\tconst decodeBaseRow = async (row: Record<string, unknown>): Promise<T> => {\n\t\tif (!e2eeEnabled) {\n\t\t\treturn normalizeRow(row as T);\n\t\t}\n\n\t\tconst envelope = toEnvelope(row);\n\t\tif (!envelope) return normalizeRow(row as T);\n\t\tconst id = toRecordKeyString(row.id as string | RecordId);\n\t\tconst bytes = await e2ee.crypto.decrypt({\n\t\t\tenvelope,\n\t\t\taad: aadFor({ table: tableName, id, kind: 'base' }),\n\t\t});\n\t\tconst payload = fromBytes<Record<string, unknown>>(bytes, true);\n\t\tconst merged = {\n\t\t\t...stripEnvelopeFields(row),\n\t\t\t...(payload as Record<string, unknown>),\n\t\t\tid: normalizeMutationId(row.id as string | RecordId),\n\t\t} as T;\n\t\treturn normalizeRow(merged);\n\t};\n\n\tconst encodeBaseRow = async (\n\t\trow: Record<string, unknown>,\n\t\tid: string,\n\t): Promise<Record<string, unknown>> => {\n\t\tif (!e2eeEnabled) return row;\n\t\tconst envelope = await e2ee.crypto.encrypt({\n\t\t\tplaintext: toBytes(row),\n\t\t\taad: aadFor({ table: tableName, id, kind: 'base' }),\n\t\t});\n\t\treturn toStoredEnvelope(envelope);\n\t};\n\n\tconst updatesTableName = crdtEnabled\n\t\t? tableNameOf(crdt.updatesTable)\n\t\t: undefined;\n\tconst updatesTable = crdtEnabled\n\t\t? toTableResource(crdt.updatesTable)\n\t\t: undefined;\n\tconst snapshotsTableName =\n\t\tcrdtEnabled && crdt.snapshotsTable\n\t\t\t? tableNameOf(crdt.snapshotsTable)\n\t\t\t: undefined;\n\tconst snapshotsTable =\n\t\tcrdtEnabled && crdt.snapshotsTable\n\t\t\t? toTableResource(crdt.snapshotsTable)\n\t\t\t: undefined;\n\n\tconst getDoc = (id: string): LoroDoc => {\n\t\tconst existing = docs.get(id);\n\t\tif (existing) return existing;\n\t\tconst doc = new LoroDoc();\n\t\tdocs.set(id, doc);\n\t\treturn doc;\n\t};\n\n\tconst docRef = (id: string): RecordId => new RecordId(tableName, id);\n\tconst idFromDocRef = (doc: string | RecordId): string =>\n\t\ttoRecordKeyString(doc);\n\n\tconst resolveActor = (\n\t\tid: string,\n\t\tchange?: LocalChange<T>,\n\t): string | undefined => {\n\t\tif (!crdtEnabled) return undefined;\n\t\tconst candidate = crdt.actor ?? crdt.localActorId;\n\t\tif (typeof candidate === 'function') {\n\t\t\treturn candidate({ id, change });\n\t\t}\n\t\treturn candidate;\n\t};\n\n\tconst decodeUpdateBytes = async (\n\t\trow: CRDTUpdateRow,\n\t\tkind: 'update' | 'snapshot',\n\t): Promise<Uint8Array> => {\n\t\tif (!e2eeEnabled) {\n\t\t\tif (kind === 'snapshot') {\n\t\t\t\tconst snapshot = row.snapshot_bytes;\n\t\t\t\tif (!snapshot) return new Uint8Array();\n\t\t\t\treturn fromBase64(snapshot);\n\t\t\t}\n\t\t\tconst update = row.update_bytes;\n\t\t\tif (!update) return new Uint8Array();\n\t\t\treturn fromBase64(update);\n\t\t}\n\t\tconst envelope = toEnvelope(row as unknown as Record<string, unknown>);\n\t\tif (!envelope) return new Uint8Array();\n\t\tconst id = idFromDocRef(row.doc);\n\t\treturn e2ee.crypto.decrypt({\n\t\t\tenvelope,\n\t\t\taad: aadFor({\n\t\t\t\ttable:\n\t\t\t\t\tkind === 'snapshot'\n\t\t\t\t\t\t? (snapshotsTableName ?? tableName)\n\t\t\t\t\t\t: (updatesTableName ?? tableName),\n\t\t\t\tbaseTable: tableName,\n\t\t\t\tid,\n\t\t\t\tkind,\n\t\t\t}),\n\t\t});\n\t};\n\n\tconst encodeUpdatePayload = async (\n\t\tbytes: Uint8Array,\n\t\tid: string,\n\t\tkind: 'update' | 'snapshot',\n\t): Promise<Record<string, unknown>> => {\n\t\tif (!e2eeEnabled) {\n\t\t\tif (kind === 'snapshot') return { snapshot_bytes: toBase64(bytes) };\n\t\t\treturn { update_bytes: toBase64(bytes) };\n\t\t}\n\n\t\tconst targetTable =\n\t\t\tkind === 'snapshot' ? snapshotsTableName : updatesTableName;\n\t\tconst envelope = await e2ee.crypto.encrypt({\n\t\t\tplaintext: bytes,\n\t\t\taad: aadFor({\n\t\t\t\ttable: targetTable ?? tableName,\n\t\t\t\tbaseTable: tableName,\n\t\t\t\tid,\n\t\t\t\tkind,\n\t\t\t}),\n\t\t});\n\t\treturn toStoredEnvelope(envelope);\n\t};\n\n\tconst persistCrdtUpdate = async (\n\t\tid: string,\n\t\tbytes: Uint8Array,\n\t\tchange?: LocalChange<T>,\n\t) => {\n\t\tif (!crdtEnabled || !updatesTable) return;\n\t\tconst payload = await encodeUpdatePayload(bytes, id, 'update');\n\t\tconst actor = resolveActor(id, change);\n\t\tconst row = {\n\t\t\tdoc: docRef(id),\n\t\t\tts: new Date().toISOString(),\n\t\t\t...(actor ? { actor } : {}),\n\t\t\t...payload,\n\t\t};\n\t\tawait db.create(updatesTable).content(row);\n\t};\n\n\tconst persistMaterialized = async (materialized: T) => {\n\t\tif (!crdtEnabled || crdt.persistMaterializedView !== true) return;\n\t\tconst id = toRecordKeyString(materialized.id);\n\t\tif (!e2eeEnabled) {\n\t\t\tconst { id: _ignoredId, ...rest } = materialized as Record<\n\t\t\t\tstring,\n\t\t\t\tunknown\n\t\t\t>;\n\t\t\tawait db.upsert(normalizeMutationId(materialized.id)).merge(rest);\n\t\t\treturn;\n\t\t}\n\n\t\tconst payload = await encodeBaseRow(\n\t\t\tomitUndefined({\n\t\t\t\t...(materialized as Record<string, unknown>),\n\t\t\t\tid: undefined,\n\t\t\t}),\n\t\t\tid,\n\t\t);\n\t\tawait db.upsert(normalizeMutationId(materialized.id)).merge(payload);\n\t};\n\n\tconst hydratePlainRows = async (\n\t\trows: Array<Record<string, unknown>>,\n\t\twrite: (\n\t\t\tchange:\n\t\t\t\t| { type: 'insert' | 'update'; value: T }\n\t\t\t\t| { type: 'delete'; key: string },\n\t\t) => void,\n\t\tbegin: () => void,\n\t\tcommit: () => void,\n\t\ttype: 'insert' | 'update' = 'insert',\n\t) => {\n\t\tif (!rows.length) return;\n\t\tbegin();\n\t\ttry {\n\t\t\tfor (const row of rows) {\n\t\t\t\tconst decoded = await decodeBaseRow(row);\n\t\t\t\twrite({ type, value: decoded });\n\t\t\t}\n\t\t} finally {\n\t\t\tcommit();\n\t\t}\n\t};\n\n\tconst hydrateCrdtDoc = async (\n\t\tid: string,\n\t\twrite: (\n\t\t\tchange:\n\t\t\t\t| { type: 'insert' | 'update'; value: T }\n\t\t\t\t| { type: 'delete'; key: string },\n\t\t) => void,\n\t\tbegin: () => void,\n\t\tcommit: () => void,\n\t\twriteType: 'insert' | 'update' = 'insert',\n\t) => {\n\t\tif (!crdtEnabled || !updatesTableName) return;\n\t\tconst doc = getDoc(id);\n\t\tlet since: string | undefined;\n\n\t\tif (snapshotsTableName) {\n\t\t\tconst snapshots = await queryRows<CRDTUpdateRow>(\n\t\t\t\tdb,\n\t\t\t\t`SELECT * FROM type::table($table) WHERE doc = $doc ORDER BY ts DESC LIMIT 1;`,\n\t\t\t\t{\n\t\t\t\t\ttable: snapshotsTableName,\n\t\t\t\t\tdoc: docRef(id),\n\t\t\t\t},\n\t\t\t);\n\t\t\tconst snapshot = snapshots[0];\n\t\t\tif (snapshot) {\n\t\t\t\tconst bytes = await decodeUpdateBytes(snapshot, 'snapshot');\n\t\t\t\tif (bytes.byteLength) doc.import(bytes);\n\t\t\t\tsince =\n\t\t\t\t\ttypeof snapshot.ts === 'string'\n\t\t\t\t\t\t? snapshot.ts\n\t\t\t\t\t\t: snapshot.ts instanceof Date\n\t\t\t\t\t\t\t? snapshot.ts.toISOString()\n\t\t\t\t\t\t\t: undefined;\n\t\t\t}\n\t\t}\n\n\t\tconst updates = await queryRows<CRDTUpdateRow>(\n\t\t\tdb,\n\t\t\tsince\n\t\t\t\t? `SELECT * FROM type::table($table) WHERE doc = $doc AND ts > $since ORDER BY ts ASC;`\n\t\t\t\t: `SELECT * FROM type::table($table) WHERE doc = $doc ORDER BY ts ASC;`,\n\t\t\t{\n\t\t\t\ttable: updatesTableName,\n\t\t\t\tdoc: docRef(id),\n\t\t\t\tsince,\n\t\t\t},\n\t\t);\n\n\t\tfor (const update of updates) {\n\t\t\tconst bytes = await decodeUpdateBytes(update, 'update');\n\t\t\tif (!bytes.byteLength) continue;\n\t\t\tdoc.import(bytes);\n\t\t}\n\n\t\tconst materialized = normalizeRow(materializeCrdt(doc, id));\n\t\tbegin();\n\t\ttry {\n\t\t\twrite({ type: writeType, value: materialized });\n\t\t} finally {\n\t\t\tcommit();\n\t\t}\n\t};\n\n\tconst updateActiveOnDemandIds = () => {\n\t\tactiveOnDemandIds.clear();\n\t\tfor (const ids of subsetIds.values()) {\n\t\t\tfor (const id of ids) activeOnDemandIds.add(id);\n\t\t}\n\t};\n\n\tconst createSyncRuntime = (\n\t\tctx: Parameters<SyncConfig<T>['sync']>[0],\n\t): BaseSyncRuntime<T> => {\n\t\tlet cleanupBaseLive: Cleanup = NOOP;\n\t\tlet cleanupUpdateLive: Cleanup = NOOP;\n\t\tlet killed = false;\n\n\t\tconst ensureBaseLive = async () => {\n\t\t\tif (cleanupBaseLive !== NOOP) return;\n\t\t\tif (!db.isFeatureSupported?.(Features.LiveQueries)) return;\n\t\t\tconst live = (await db.live(\n\t\t\t\ttableResource,\n\t\t\t)) as unknown as LiveSubscriptionLike;\n\t\t\tif (killed) {\n\t\t\t\tawait live.kill();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlive.subscribe(async (message) => {\n\t\t\t\tif (message.action === 'KILLED') return;\n\t\t\t\tconst row = message.value as Record<string, unknown>;\n\t\t\t\tconst id = toRecordKeyString(row.id as string | RecordId);\n\n\t\t\t\tconst wasVisible = activeOnDemandIds.has(id);\n\t\t\t\tif (\n\t\t\t\t\tisStrictOnDemand &&\n\t\t\t\t\t!wasVisible &&\n\t\t\t\t\tmessage.action !== 'DELETE'\n\t\t\t\t)\n\t\t\t\t\treturn;\n\n\t\t\t\tif (message.action === 'DELETE') {\n\t\t\t\t\tfor (const ids of subsetIds.values()) ids.delete(id);\n\t\t\t\t\tupdateActiveOnDemandIds();\n\t\t\t\t\tif (isStrictOnDemand && !wasVisible) return;\n\t\t\t\t\tctx.begin();\n\t\t\t\t\ttry {\n\t\t\t\t\t\tctx.write({\n\t\t\t\t\t\t\ttype: 'delete',\n\t\t\t\t\t\t\tkey: `${tableName}:${id}`,\n\t\t\t\t\t\t});\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tctx.commit();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst decoded = await decodeBaseRow(row);\n\t\t\t\tctx.begin();\n\t\t\t\ttry {\n\t\t\t\t\tctx.write({\n\t\t\t\t\t\ttype: message.action === 'CREATE' ? 'insert' : 'update',\n\t\t\t\t\t\tvalue: decoded,\n\t\t\t\t\t});\n\t\t\t\t} finally {\n\t\t\t\t\tctx.commit();\n\t\t\t\t}\n\t\t\t});\n\t\t\tcleanupBaseLive = () => {\n\t\t\t\tvoid live.kill().catch(() => undefined);\n\t\t\t\tcleanupBaseLive = NOOP;\n\t\t\t};\n\t\t};\n\n\t\tconst ensureUpdateLive = async () => {\n\t\t\tif (!crdtEnabled || !updatesTable) return;\n\t\t\tif (cleanupUpdateLive !== NOOP) return;\n\t\t\tif (!db.isFeatureSupported?.(Features.LiveQueries)) return;\n\n\t\t\tconst live = (await db.live(\n\t\t\t\tupdatesTable,\n\t\t\t)) as unknown as LiveSubscriptionLike;\n\t\t\tif (killed) {\n\t\t\t\tawait live.kill();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlive.subscribe(async (message) => {\n\t\t\t\tif (message.action === 'KILLED') return;\n\t\t\t\tif (message.action === 'DELETE') return;\n\n\t\t\t\tconst value = message.value as unknown as CRDTUpdateRow;\n\t\t\t\tconst id = idFromDocRef(value.doc);\n\n\t\t\t\tif (value.actor && value.actor === resolveActor(id)) return;\n\n\t\t\t\tif (isStrictOnDemand && !activeOnDemandIds.has(id)) return;\n\n\t\t\t\tconst doc = getDoc(id);\n\t\t\t\tconst bytes = await decodeUpdateBytes(value, 'update');\n\t\t\t\tif (!bytes.byteLength) return;\n\t\t\t\tdoc.import(bytes);\n\t\t\t\tconst materialized = normalizeRow(materializeCrdt(doc, id));\n\t\t\t\tctx.begin();\n\t\t\t\ttry {\n\t\t\t\t\tctx.write({ type: 'update', value: materialized });\n\t\t\t\t} finally {\n\t\t\t\t\tctx.commit();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcleanupUpdateLive = () => {\n\t\t\t\tvoid live.kill().catch(() => undefined);\n\t\t\t\tcleanupUpdateLive = NOOP;\n\t\t\t};\n\t\t};\n\n\t\tconst loadSubset = async (subset: LoadSubsetOptions) => {\n\t\t\tif (!isOnDemandLike) return;\n\t\t\tconst key = subsetCacheKey(subset);\n\t\t\tconst rows = await tableAccess.loadSubset(subset);\n\t\t\tconst ids = new Set(\n\t\t\t\t(rows as unknown as Array<Record<string, unknown>>).map((row) =>\n\t\t\t\t\ttoRecordKeyString(row.id as string | RecordId),\n\t\t\t\t),\n\t\t\t);\n\t\t\tsubsetIds.set(key, ids);\n\t\t\tupdateActiveOnDemandIds();\n\n\t\t\tif (!crdtEnabled) {\n\t\t\t\tawait hydratePlainRows(\n\t\t\t\t\trows as unknown as Array<Record<string, unknown>>,\n\t\t\t\t\tctx.write,\n\t\t\t\t\tctx.begin,\n\t\t\t\t\tctx.commit,\n\t\t\t\t\t'insert',\n\t\t\t\t);\n\t\t\t\tawait ensureBaseLive();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (const id of ids) {\n\t\t\t\tawait hydrateCrdtDoc(\n\t\t\t\t\tid,\n\t\t\t\t\tctx.write,\n\t\t\t\t\tctx.begin,\n\t\t\t\t\tctx.commit,\n\t\t\t\t\t'insert',\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait ensureUpdateLive();\n\t\t};\n\n\t\tconst unloadSubset = (subset: LoadSubsetOptions) => {\n\t\t\tif (!isOnDemandLike) return;\n\t\t\tconst key = subsetCacheKey(subset);\n\t\t\tsubsetIds.delete(key);\n\t\t\tupdateActiveOnDemandIds();\n\t\t\tif (subsetIds.size === 0) {\n\t\t\t\tcleanupBaseLive();\n\t\t\t\tcleanupUpdateLive();\n\t\t\t}\n\t\t};\n\n\t\tconst startRealtime = async () => {\n\t\t\tif (!crdtEnabled) {\n\t\t\t\tawait ensureBaseLive();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait ensureUpdateLive();\n\t\t};\n\n\t\tconst cleanup = () => {\n\t\t\tkilled = true;\n\t\t\tsubsetIds.clear();\n\t\t\tupdateActiveOnDemandIds();\n\t\t\tcleanupBaseLive();\n\t\t\tcleanupUpdateLive();\n\t\t};\n\n\t\treturn {\n\t\t\tstartRealtime,\n\t\t\tcleanup,\n\t\t\tloadSubset,\n\t\t\tunloadSubset,\n\t\t};\n\t};\n\n\tconst base = queryCollectionOptions({\n\t\tschema: createInsertSchema<T>(tableName),\n\t\tgetKey,\n\t\tqueryKey,\n\t\tqueryClient,\n\t\tsyncMode: queryDrivenSyncMode,\n\t\tqueryFn: async ({ meta }) => {\n\t\t\ttry {\n\t\t\t\tif (isOnDemandLike && !meta?.loadSubsetOptions) {\n\t\t\t\t\treturn [] as T[];\n\t\t\t\t}\n\n\t\t\t\tif (!crdtEnabled) {\n\t\t\t\t\tif (!isOnDemandLike) {\n\t\t\t\t\t\tconst rows = await toRecordArray(\n\t\t\t\t\t\t\tawait db.select(tableResource),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst decoded = await Promise.all(\n\t\t\t\t\t\t\trows.map((row) =>\n\t\t\t\t\t\t\t\tdecodeBaseRow(row as Record<string, unknown>),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn decoded;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst rows = await tableAccess.loadSubset(\n\t\t\t\t\t\tmeta?.loadSubsetOptions,\n\t\t\t\t\t);\n\t\t\t\t\tconst decoded = await Promise.all(\n\t\t\t\t\t\t(rows as unknown as Array<Record<string, unknown>>).map(\n\t\t\t\t\t\t\t(row) => decodeBaseRow(row),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\treturn decoded;\n\t\t\t\t}\n\n\t\t\t\tif (isOnDemandLike) return [] as T[];\n\n\t\t\t\tif (!updatesTableName) return [] as T[];\n\t\t\t\tconst updates = await queryRows<CRDTUpdateRow>(\n\t\t\t\t\tdb,\n\t\t\t\t\t`SELECT * FROM type::table($table) ORDER BY ts ASC;`,\n\t\t\t\t\t{ table: updatesTableName },\n\t\t\t\t);\n\t\t\t\tfor (const update of updates) {\n\t\t\t\t\tconst id = idFromDocRef(update.doc);\n\t\t\t\t\tconst doc = getDoc(id);\n\t\t\t\t\tconst bytes = await decodeUpdateBytes(update, 'update');\n\t\t\t\t\tif (!bytes.byteLength) continue;\n\t\t\t\t\tdoc.import(bytes);\n\t\t\t\t}\n\n\t\t\t\treturn [...docs.entries()].map(([id, doc]) =>\n\t\t\t\t\tnormalizeRow(materializeCrdt(doc, id)),\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tonError?.(error);\n\t\t\t\treturn [] as T[];\n\t\t\t}\n\t\t},\n\t\tonInsert: (async (params: InsertMutationFnParams<T>) => {\n\t\t\tconst out: T[] = [];\n\t\t\tconst writeUtils = getWriteUtils(params.collection.utils);\n\t\t\tfor (const mutation of params.transaction.mutations) {\n\t\t\t\tif (mutation.type !== 'insert') continue;\n\n\t\t\t\tconst normalized = normalizeRow(mutation.modified as T);\n\t\t\t\tif (!crdtEnabled) {\n\t\t\t\t\tconst idKey = toRecordKeyString(normalized.id);\n\t\t\t\t\tconst payload = omitUndefined({\n\t\t\t\t\t\t...(normalized as Record<string, unknown>),\n\t\t\t\t\t\tid: undefined,\n\t\t\t\t\t});\n\t\t\t\t\tconst recordPayload = await encodeBaseRow(payload, idKey);\n\n\t\t\t\t\tif (isTempId(normalized.id, tableName)) {\n\t\t\t\t\t\tconst created = await db\n\t\t\t\t\t\t\t.create(tableResource)\n\t\t\t\t\t\t\t.content(recordPayload);\n\t\t\t\t\t\tconst createdRow = firstRow(\n\t\t\t\t\t\t\ttoRecordArray(created as unknown as T | T[]),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst createdId =\n\t\t\t\t\t\t\tcreatedRow &&\n\t\t\t\t\t\t\t(createdRow as Record<string, unknown>).id\n\t\t\t\t\t\t\t\t? ((createdRow as Record<string, unknown>).id as\n\t\t\t\t\t\t\t\t\t\t| string\n\t\t\t\t\t\t\t\t\t\t| RecordId)\n\t\t\t\t\t\t\t\t: normalized.id;\n\t\t\t\t\t\tconst resolved = {\n\t\t\t\t\t\t\t...normalized,\n\t\t\t\t\t\t\tid: normalizeMutationId(createdId),\n\t\t\t\t\t\t} as T;\n\t\t\t\t\t\tout.push(resolved);\n\t\t\t\t\t\twriteUtils.writeUpsert?.(resolved);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tawait db.insert(tableResource, {\n\t\t\t\t\t\tid: normalizeMutationId(normalized.id),\n\t\t\t\t\t\t...recordPayload,\n\t\t\t\t\t});\n\t\t\t\t\tout.push(normalized);\n\t\t\t\t\twriteUtils.writeUpsert?.(normalized);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst id = toRecordKeyString(normalized.id);\n\t\t\t\tconst doc = getDoc(id);\n\t\t\t\tconst vv = doc.oplogVersion();\n\t\t\t\tconst localChange: LocalChange<T> = {\n\t\t\t\t\ttype: 'insert',\n\t\t\t\t\tvalue: normalized,\n\t\t\t\t};\n\t\t\t\tapplyCrdtLocalChange(doc, localChange);\n\t\t\t\tconst bytes = doc.export({ mode: 'update', from: vv });\n\t\t\t\tawait persistCrdtUpdate(id, bytes, localChange);\n\t\t\t\tconst materialized = normalizeRow(materializeCrdt(doc, id));\n\t\t\t\tawait persistMaterialized(materialized);\n\t\t\t\tout.push(materialized);\n\t\t\t\twriteUtils.writeUpsert?.(materialized);\n\t\t\t}\n\n\t\t\treturn out as unknown as StandardSchema<T>;\n\t\t}) as InsertMutationFn<T, string, UtilsRecord, StandardSchema<T>>,\n\t\tonUpdate: (async (params: UpdateMutationFnParams<T>) => {\n\t\t\tconst writeUtils = getWriteUtils(params.collection.utils);\n\t\t\tfor (const mutation of params.transaction.mutations) {\n\t\t\t\tif (mutation.type !== 'update') continue;\n\t\t\t\tconst mutationId = normalizeMutationId(\n\t\t\t\t\tmutation.key as RecordId | string,\n\t\t\t\t);\n\t\t\t\tconst normalizedModified = omitUndefined(\n\t\t\t\t\tnormalizeRecordIdLikeFields({\n\t\t\t\t\t\t...(mutation.modified as Record<string, unknown>),\n\t\t\t\t\t}) as Record<string, unknown>,\n\t\t\t\t);\n\t\t\t\tconst normalized = normalizeRow({\n\t\t\t\t\t...(normalizedModified as Partial<T>),\n\t\t\t\t\tid: mutationId,\n\t\t\t\t} as T);\n\n\t\t\t\tif (!crdtEnabled) {\n\t\t\t\t\tif (!e2eeEnabled) {\n\t\t\t\t\t\tawait db.update(mutationId).merge(normalizedModified);\n\t\t\t\t\t\twriteUtils.writeUpsert?.(normalized);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst current = await db.select(mutationId);\n\t\t\t\t\tconst currentRows = toRecordArray(\n\t\t\t\t\t\tcurrent as unknown as\n\t\t\t\t\t\t\t| Record<string, unknown>\n\t\t\t\t\t\t\t| Array<Record<string, unknown>>,\n\t\t\t\t\t);\n\t\t\t\t\tconst currentRow = currentRows[0];\n\t\t\t\t\tconst decodedCurrent = currentRow\n\t\t\t\t\t\t? await decodeBaseRow(currentRow)\n\t\t\t\t\t\t: ({ id: mutationId } as T);\n\t\t\t\t\tconst merged = {\n\t\t\t\t\t\t...(decodedCurrent as Record<string, unknown>),\n\t\t\t\t\t\t...(normalizedModified as Record<string, unknown>),\n\t\t\t\t\t};\n\t\t\t\t\tdelete merged.id;\n\t\t\t\t\tconst encoded = await encodeBaseRow(\n\t\t\t\t\t\tomitUndefined(merged),\n\t\t\t\t\t\ttoRecordKeyString(mutationId),\n\t\t\t\t\t);\n\t\t\t\t\tawait db.update(mutationId).merge(encoded);\n\t\t\t\t\twriteUtils.writeUpsert?.(\n\t\t\t\t\t\tnormalizeRow({ ...decodedCurrent, ...merged } as T),\n\t\t\t\t\t);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst id = toRecordKeyString(mutationId);\n\t\t\t\tconst doc = getDoc(id);\n\t\t\t\tconst vv = doc.oplogVersion();\n\t\t\t\tconst localChange: LocalChange<T> = {\n\t\t\t\t\ttype: 'update',\n\t\t\t\t\tvalue: normalized,\n\t\t\t\t};\n\t\t\t\tapplyCrdtLocalChange(doc, localChange);\n\t\t\t\tconst bytes = doc.export({ mode: 'update', from: vv });\n\t\t\t\tawait persistCrdtUpdate(id, bytes, localChange);\n\t\t\t\tconst materialized = normalizeRow(materializeCrdt(doc, id));\n\t\t\t\tawait persistMaterialized(materialized);\n\t\t\t\twriteUtils.writeUpsert?.(materialized);\n\t\t\t}\n\t\t\treturn { refetch: false } as unknown as StandardSchema<T>;\n\t\t}) as UpdateMutationFn<T, string, UtilsRecord, StandardSchema<T>>,\n\t\tonDelete: (async (params: DeleteMutationFnParams<T>) => {\n\t\t\tconst writeUtils = getWriteUtils(params.collection.utils);\n\t\t\tfor (const mutation of params.transaction.mutations) {\n\t\t\t\tif (mutation.type !== 'delete') continue;\n\t\t\t\tconst mutationId = normalizeMutationId(\n\t\t\t\t\tmutation.key as RecordId | string,\n\t\t\t\t);\n\t\t\t\tconst id = toRecordKeyString(mutationId);\n\t\t\t\tif (!crdtEnabled) {\n\t\t\t\t\tawait db.delete(mutationId);\n\t\t\t\t\twriteUtils.writeDelete?.(`${tableName}:${id}`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst doc = getDoc(id);\n\t\t\t\tconst vv = doc.oplogVersion();\n\t\t\t\tconst localChange: LocalChange<T> = {\n\t\t\t\t\ttype: 'delete',\n\t\t\t\t\tvalue: { id: mutationId } as T,\n\t\t\t\t};\n\t\t\t\tapplyCrdtLocalChange(doc, localChange);\n\t\t\t\tconst bytes = doc.export({ mode: 'update', from: vv });\n\t\t\t\tawait persistCrdtUpdate(id, bytes, localChange);\n\t\t\t\twriteUtils.writeDelete?.(`${tableName}:${id}`);\n\t\t\t}\n\t\t\treturn { refetch: false } as unknown as StandardSchema<T>;\n\t\t}) as DeleteMutationFn<T, string, UtilsRecord, StandardSchema<T>>,\n\t} as never) as SurrealCollectionOptionsReturn<T>;\n\n\tconst baseSync = base.sync?.sync;\n\tconst sync = baseSync\n\t\t? {\n\t\t\t\tsync: (ctx: Parameters<NonNullable<typeof baseSync>>[0]) => {\n\t\t\t\t\tconst canRunBaseSync =\n\t\t\t\t\t\ttypeof (ctx.collection as { on?: unknown })?.on ===\n\t\t\t\t\t\t'function';\n\t\t\t\t\tconst baseResult = canRunBaseSync\n\t\t\t\t\t\t? baseSync(ctx)\n\t\t\t\t\t\t: undefined;\n\t\t\t\t\tconst baseCleanup =\n\t\t\t\t\t\ttypeof baseResult === 'function'\n\t\t\t\t\t\t\t? baseResult\n\t\t\t\t\t\t\t: typeof baseResult === 'object' &&\n\t\t\t\t\t\t\t\t\tbaseResult &&\n\t\t\t\t\t\t\t\t\t'cleanup' in baseResult &&\n\t\t\t\t\t\t\t\t\ttypeof (\n\t\t\t\t\t\t\t\t\t\tbaseResult as {\n\t\t\t\t\t\t\t\t\t\t\tcleanup?: unknown;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t).cleanup === 'function'\n\t\t\t\t\t\t\t\t? (\n\t\t\t\t\t\t\t\t\t\tbaseResult as {\n\t\t\t\t\t\t\t\t\t\t\tcleanup: Cleanup;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t).cleanup\n\t\t\t\t\t\t\t\t: NOOP;\n\t\t\t\t\tconst runtime = createSyncRuntime(\n\t\t\t\t\t\tctx as Parameters<SyncConfig<T>['sync']>[0],\n\t\t\t\t\t);\n\n\t\t\t\t\tconst start = async () => {\n\t\t\t\t\t\tif (!isOnDemandLike) {\n\t\t\t\t\t\t\tif (!crdtEnabled) {\n\t\t\t\t\t\t\t\tconst rows = toRecordArray(\n\t\t\t\t\t\t\t\t\tawait db.select(tableResource),\n\t\t\t\t\t\t\t\t) as Array<Record<string, unknown>>;\n\t\t\t\t\t\t\t\tawait hydratePlainRows(\n\t\t\t\t\t\t\t\t\trows,\n\t\t\t\t\t\t\t\t\tctx.write,\n\t\t\t\t\t\t\t\t\tctx.begin,\n\t\t\t\t\t\t\t\t\tctx.commit,\n\t\t\t\t\t\t\t\t\t'insert',\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tawait runtime.startRealtime();\n\t\t\t\t\t\t\t\tctx.markReady();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (updatesTableName) {\n\t\t\t\t\t\t\t\tconst updates = await queryRows<CRDTUpdateRow>(\n\t\t\t\t\t\t\t\t\tdb,\n\t\t\t\t\t\t\t\t\t`SELECT * FROM type::table($table) ORDER BY ts ASC;`,\n\t\t\t\t\t\t\t\t\t{ table: updatesTableName },\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tfor (const update of updates) {\n\t\t\t\t\t\t\t\t\tconst id = idFromDocRef(update.doc);\n\t\t\t\t\t\t\t\t\tconst doc = getDoc(id);\n\t\t\t\t\t\t\t\t\tconst bytes = await decodeUpdateBytes(\n\t\t\t\t\t\t\t\t\t\tupdate,\n\t\t\t\t\t\t\t\t\t\t'update',\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tif (!bytes.byteLength) continue;\n\t\t\t\t\t\t\t\t\tdoc.import(bytes);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tctx.begin();\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tfor (const [id, doc] of docs.entries()) {\n\t\t\t\t\t\t\t\t\t\tctx.write({\n\t\t\t\t\t\t\t\t\t\t\ttype: 'insert',\n\t\t\t\t\t\t\t\t\t\t\tvalue: normalizeRow(\n\t\t\t\t\t\t\t\t\t\t\t\tmaterializeCrdt(doc, id),\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\t\tctx.commit();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tawait runtime.startRealtime();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tctx.markReady();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tctx.markReady();\n\t\t\t\t\t\tif (syncMode === 'progressive') {\n\t\t\t\t\t\t\tvoid runtime\n\t\t\t\t\t\t\t\t.loadSubset({})\n\t\t\t\t\t\t\t\t.catch((error) => onError?.(error));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tvoid start().catch((error) => onError?.(error));\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcleanup: () => {\n\t\t\t\t\t\t\truntime.cleanup();\n\t\t\t\t\t\t\tbaseCleanup();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tloadSubset: async (subset) => {\n\t\t\t\t\t\t\tawait runtime.loadSubset(subset);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tunloadSubset: (subset) => {\n\t\t\t\t\t\t\truntime.unloadSubset(subset);\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t}\n\t\t: undefined;\n\n\treturn {\n\t\t...base,\n\t\tsync: sync ?? base.sync,\n\t} as SurrealCollectionOptionsReturn<T>;\n}\n\nexport function surrealCollectionOptions<T extends SyncedTable<object>>(\n\tconfig: SurrealCollectionOptions<T>,\n): CollectionConfig<\n\tT,\n\tstring,\n\tStandardSchemaV1<MutationInput<T>, T>,\n\tUtilsRecord\n> & {\n\tschema: StandardSchemaV1<MutationInput<T>, T>;\n\tutils: UtilsRecord;\n} {\n\treturn modernSurrealCollectionOptions(config);\n}\n\ndeclare module '@tanstack/db' {\n\tinterface Collection<\n\t\tT extends object = Record<string, unknown>,\n\t\tTKey extends string | number = string | number,\n\t\tTUtils extends UtilsRecord = UtilsRecord,\n\t\tTSchema extends StandardSchemaV1 = StandardSchemaV1,\n\t\tTInsertInput extends object = T,\n\t> {\n\t\tdelete(\n\t\t\tkeys: Array<TKey | RecordId | string> | TKey | RecordId | string,\n\t\t\tconfig?: OperationConfig,\n\t\t): Transaction<any>;\n\t}\n}\n"]}
|