@foretag/tanstack-db-surrealdb 0.5.1 → 0.5.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 +92 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +92 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -95,6 +95,93 @@ var toRecordId = (tableName, id) => {
|
|
|
95
95
|
const key = normalized.startsWith(prefixed) ? normalized.slice(prefixed.length) : normalized;
|
|
96
96
|
return new surrealdb.RecordId(tableName, key);
|
|
97
97
|
};
|
|
98
|
+
|
|
99
|
+
// src/queryKey.ts
|
|
100
|
+
var isRecordId = (value) => typeof value === "object" && value !== null && "toString" in value && typeof value.toString === "function" && "table" in value;
|
|
101
|
+
var serializeValue = (value) => {
|
|
102
|
+
const normalized = normalizeRecordIdLikeValue(value);
|
|
103
|
+
if (isRecordId(normalized)) {
|
|
104
|
+
return {
|
|
105
|
+
__type: "recordid",
|
|
106
|
+
value: toRecordIdString(normalized)
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
if (normalized === void 0) {
|
|
110
|
+
return { __type: "undefined" };
|
|
111
|
+
}
|
|
112
|
+
if (typeof normalized === "number") {
|
|
113
|
+
if (Number.isNaN(normalized)) return { __type: "nan" };
|
|
114
|
+
if (normalized === Number.POSITIVE_INFINITY) {
|
|
115
|
+
return { __type: "infinity", sign: 1 };
|
|
116
|
+
}
|
|
117
|
+
if (normalized === Number.NEGATIVE_INFINITY) {
|
|
118
|
+
return { __type: "infinity", sign: -1 };
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (normalized === null || typeof normalized === "string" || typeof normalized === "number" || typeof normalized === "boolean") {
|
|
122
|
+
return normalized;
|
|
123
|
+
}
|
|
124
|
+
if (normalized instanceof Date) {
|
|
125
|
+
return { __type: "date", value: normalized.toJSON() };
|
|
126
|
+
}
|
|
127
|
+
if (Array.isArray(normalized)) {
|
|
128
|
+
return normalized.map((item) => serializeValue(item));
|
|
129
|
+
}
|
|
130
|
+
if (typeof normalized === "object") {
|
|
131
|
+
const entries = Object.entries(
|
|
132
|
+
normalized
|
|
133
|
+
).sort(([a], [b]) => a.localeCompare(b));
|
|
134
|
+
return Object.fromEntries(
|
|
135
|
+
entries.map(([key, item]) => [key, serializeValue(item)])
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
return normalized;
|
|
139
|
+
};
|
|
140
|
+
var serializeExpression = (expr) => {
|
|
141
|
+
if (!expr) return null;
|
|
142
|
+
switch (expr.type) {
|
|
143
|
+
case "val":
|
|
144
|
+
return {
|
|
145
|
+
type: "val",
|
|
146
|
+
value: serializeValue(expr.value)
|
|
147
|
+
};
|
|
148
|
+
case "ref":
|
|
149
|
+
return {
|
|
150
|
+
type: "ref",
|
|
151
|
+
path: [...expr.path]
|
|
152
|
+
};
|
|
153
|
+
case "func":
|
|
154
|
+
return {
|
|
155
|
+
type: "func",
|
|
156
|
+
name: expr.name,
|
|
157
|
+
args: expr.args.map(
|
|
158
|
+
(arg) => serializeExpression(arg)
|
|
159
|
+
)
|
|
160
|
+
};
|
|
161
|
+
default:
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
var serializeSurrealSubsetOptions = (options) => {
|
|
166
|
+
if (!options) return void 0;
|
|
167
|
+
const out = {};
|
|
168
|
+
if (options.where) out.where = serializeExpression(options.where);
|
|
169
|
+
if (options.orderBy?.length) {
|
|
170
|
+
out.orderBy = options.orderBy.map((clause) => ({
|
|
171
|
+
expression: serializeExpression(
|
|
172
|
+
clause.expression
|
|
173
|
+
),
|
|
174
|
+
direction: clause.compareOptions.direction,
|
|
175
|
+
nulls: clause.compareOptions.nulls,
|
|
176
|
+
stringSort: clause.compareOptions.stringSort,
|
|
177
|
+
locale: clause.compareOptions.locale,
|
|
178
|
+
localeOptions: clause.compareOptions.localeOptions
|
|
179
|
+
}));
|
|
180
|
+
}
|
|
181
|
+
if (options.limit !== void 0) out.limit = options.limit;
|
|
182
|
+
if (options.offset !== void 0) out.offset = options.offset;
|
|
183
|
+
return Object.keys(out).length ? JSON.stringify(out) : void 0;
|
|
184
|
+
};
|
|
98
185
|
var IDENTIFIER_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
99
186
|
var firstRow = (res) => {
|
|
100
187
|
if (!res) return void 0;
|
|
@@ -403,6 +490,10 @@ function surrealCollectionOptions({
|
|
|
403
490
|
}) {
|
|
404
491
|
let loro;
|
|
405
492
|
if (useLoro) loro = { doc: new loroCrdt.LoroDoc(), key: id };
|
|
493
|
+
const resolvedQueryKey = syncMode === "on-demand" ? (opts = {}) => {
|
|
494
|
+
const serialized = serializeSurrealSubsetOptions(opts);
|
|
495
|
+
return serialized ? [...queryKey, serialized] : [...queryKey];
|
|
496
|
+
} : queryKey;
|
|
406
497
|
const table = manageTable(db, useLoro, config.table);
|
|
407
498
|
const keyOf = (rid) => toRecordIdString(rid);
|
|
408
499
|
const getKey = (row) => keyOf(row.id);
|
|
@@ -443,7 +534,7 @@ function surrealCollectionOptions({
|
|
|
443
534
|
const base = queryDbCollection.queryCollectionOptions({
|
|
444
535
|
schema: createInsertSchema(config.table.name),
|
|
445
536
|
getKey,
|
|
446
|
-
queryKey,
|
|
537
|
+
queryKey: resolvedQueryKey,
|
|
447
538
|
queryClient,
|
|
448
539
|
syncMode,
|
|
449
540
|
queryFn: async ({ meta }) => {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/id.ts","../src/table.ts","../src/index.ts"],"names":["RecordId","parseWhereExpression","parseOrderByExpression","Table","Features","LoroDoc","queryCollectionOptions"],"mappings":"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","file":"index.js","sourcesContent":["import { RecordId } from 'surrealdb';\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\nconst parseRecordIdString = (value: string): RecordId | 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\n\treturn new RecordId(table, key);\n};\n\nconst asRecordIdFromObjectShape = (value: unknown): RecordId | undefined => {\n\tif (!value || typeof value !== 'object') return undefined;\n\tconst obj = value as Record<string, unknown>;\n\n\tconst table =\n\t\ttypeof obj.table === 'string'\n\t\t\t? obj.table\n\t\t\t: typeof obj.tb === 'string'\n\t\t\t\t? obj.tb\n\t\t\t\t: undefined;\n\tconst key =\n\t\ttypeof obj.id === 'string' || typeof obj.id === 'number'\n\t\t\t? String(obj.id)\n\t\t\t: undefined;\n\n\tif (table && key && looksLikeTableName(table)) {\n\t\treturn new RecordId(table, key);\n\t}\n\n\treturn undefined;\n};\n\nconst asRecordIdFromObjectString = (value: unknown): RecordId | undefined => {\n\tif (!value || typeof value !== 'object') return undefined;\n\tconst obj = value as { toString?: () => unknown };\n\tif (typeof obj.toString !== 'function') return undefined;\n\n\tconst raw = String(obj.toString());\n\tif (!raw || raw === '[object Object]') return undefined;\n\treturn parseRecordIdString(raw);\n};\n\nexport const normalizeRecordIdLikeValue = (value: unknown): unknown => {\n\tif (value instanceof RecordId) return value;\n\tif (typeof value === 'object' && value !== null) {\n\t\treturn (\n\t\t\tasRecordIdFromObjectShape(value) ??\n\t\t\tasRecordIdFromObjectString(value) ??\n\t\t\tvalue\n\t\t);\n\t}\n\tif (typeof value !== 'string') return value;\n\n\tconst trimmed = value.trim();\n\tconst unquoted = stripOuterQuotes(trimmed);\n\n\tconst parsed =\n\t\tparseRecordIdString(unquoted) ??\n\t\t(unquoted === trimmed ? undefined : parseRecordIdString(trimmed));\n\tif (parsed) return parsed;\n\n\t// Keep original value shape if it isn't record-id-like\n\treturn value;\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) return id;\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 { normalizeRecordIdLikeValue, toRecordId } 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\t}\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\tuseLoro: boolean,\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\t// Subset predicates should compare against concrete values.\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 (string/RecordId), not a reactive proxy/path.',\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\tif (useLoro) whereParts.push('sync_deleted = false');\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\tuseLoro: boolean,\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, useLoro, subset);\n\t\tconst [res] = await db.query<[QueryResult<T>]>(sql, params);\n\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\tif (!useLoro) {\n\t\t\tawait db.update(id).merge(rest);\n\t\t\treturn;\n\t\t}\n\t\tawait db.update(id).merge({\n\t\t\t...rest,\n\t\t\tsync_deleted: false,\n\t\t\tupdated_at: Date.now(),\n\t\t});\n\t};\n\n\tconst remove = async (id: RecordId) => {\n\t\tawait db.delete(id);\n\t};\n\n\tconst softDelete = async (id: RecordId) => {\n\t\tif (!useLoro) {\n\t\t\tawait db.delete(id);\n\t\t\treturn;\n\t\t}\n\t\tawait db.upsert(id).merge({\n\t\t\tsync_deleted: true,\n\t\t\tupdated_at: Date.now(),\n\t\t});\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\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,\n\t\tsubscribe,\n\t};\n}\n","import type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type {\n\tCollectionConfig,\n\tDeleteMutationFn,\n\tDeleteMutationFnParams,\n\tInsertMutationFn,\n\tInsertMutationFnParams,\n\tOperationConfig,\n\tStandardSchema,\n\tTransaction,\n\tUpdateMutationFn,\n\tUpdateMutationFnParams,\n\tUtilsRecord,\n} from '@tanstack/db';\nimport { queryCollectionOptions } from '@tanstack/query-db-collection';\nimport { type Container, LoroDoc } from 'loro-crdt';\nimport { Features, RecordId } from 'surrealdb';\n\nimport {\n\tnormalizeRecordIdLikeFields,\n\ttoRecordId,\n\ttoRecordIdString,\n} from './id';\nimport { manageTable } from './table';\nimport type { SurrealCollectionConfig, SyncedTable } from './types';\n\ntype Cleanup = () => void;\n\ntype MutationInput<T extends { id: string | RecordId }> = Omit<T, 'id'> & {\n\tid?: T['id'];\n};\n\ntype SurrealCollectionOptionsReturn<T extends { id: string | RecordId }> =\n\tCollectionConfig<\n\t\tT,\n\t\tstring,\n\t\tStandardSchemaV1<MutationInput<T>, T>,\n\t\tUtilsRecord\n\t> & {\n\t\tschema: StandardSchemaV1<MutationInput<T>, T>;\n\t\tutils: UtilsRecord;\n\t};\n\nexport { toRecordKeyString } from './id';\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\t// biome-ignore lint/suspicious/noExplicitAny: Match TanstackDB\n\t\t): Transaction<any>;\n\t}\n}\n\ntype SyncReturn =\n\t| undefined\n\t| Cleanup\n\t| {\n\t\t\tcleanup?: Cleanup;\n\t\t\tunsubscribe?: Cleanup;\n\t\t\tdispose?: Cleanup;\n\t\t\tloadSubset?: unknown; // keep unknown; Only pass through\n\t };\n\nconst TEMP_ID_PREFIX = '__temp__';\nconst NOOP: Cleanup = () => {};\n\ntype QueryWriteUtils = {\n\twriteUpsert?: (data: unknown) => void;\n\twriteDelete?: (key: string) => void;\n};\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\tif (id instanceof RecordId) {\n\t\tconst recordKey = (id as unknown as { id?: unknown }).id;\n\t\treturn (\n\t\t\ttypeof recordKey === 'string' &&\n\t\t\trecordKey.startsWith(TEMP_ID_PREFIX)\n\t\t);\n\t}\n\n\tconst raw = toRecordIdString(id);\n\tconst key = raw.startsWith(`${tableName}:`)\n\t\t? raw.slice(tableName.length + 1)\n\t\t: raw;\n\treturn key.startsWith(TEMP_ID_PREFIX);\n};\n\nfunction toCleanup(res: SyncReturn): Cleanup {\n\tif (!res) return NOOP;\n\tif (typeof res === 'function') return res;\n\n\tconst cleanup = res.cleanup ?? res.unsubscribe ?? res.dispose;\n\n\treturn typeof cleanup === 'function' ? cleanup : NOOP;\n}\n\nfunction hasLoadSubset(\n\tres: SyncReturn,\n): res is { loadSubset: unknown } & Record<string, unknown> {\n\treturn typeof res === 'object' && res !== null && 'loadSubset' in res;\n}\n\nconst getWriteUtils = (utils: unknown): QueryWriteUtils =>\n\ttypeof utils === 'object' && utils !== null\n\t\t? (utils as QueryWriteUtils)\n\t\t: {};\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\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\nexport function surrealCollectionOptions<\n\tT extends SyncedTable<object>,\n\tS extends Record<string, Container> = { [k: string]: never },\n>({\n\tid,\n\tuseLoro = false,\n\tonError,\n\tdb,\n\tqueryClient,\n\tqueryKey,\n\tsyncMode = 'eager',\n\t...config\n}: SurrealCollectionConfig): CollectionConfig<\n\tT,\n\tstring,\n\tStandardSchemaV1<MutationInput<T>, T>,\n\tUtilsRecord\n> & {\n\tschema: StandardSchemaV1<MutationInput<T>, T>;\n\tutils: UtilsRecord;\n} {\n\tlet loro: { doc: LoroDoc<S>; key?: string } | undefined;\n\tif (useLoro) loro = { doc: new LoroDoc(), key: id };\n\n\tconst table = manageTable<T>(db, useLoro, config.table);\n\n\tconst keyOf = (rid: RecordId | string): string => toRecordIdString(rid);\n\n\tconst getKey = (row: { id: string | RecordId }) => keyOf(row.id);\n\tconst normalizeMutationId = (rid: RecordId | string): RecordId =>\n\t\ttoRecordId(config.table.name, rid);\n\tconst withRecordId = (row: T): T =>\n\t\t({ ...row, id: normalizeMutationId(row.id) }) as T;\n\tconst toLoroStoredRow = (row: T): T => ({ ...row, id: keyOf(row.id) }) as T;\n\n\tconst loroKey = loro?.key ?? id ?? 'surreal';\n\tconst loroMap = useLoro ? (loro?.doc?.getMap?.(loroKey) ?? null) : null;\n\tconst commitLoro = () => {\n\t\tloro?.doc?.commit?.();\n\t};\n\n\tconst loroPut = (row: T, commit = true) => {\n\t\tif (!loroMap) return;\n\t\tloroMap.set(getKey(row), toLoroStoredRow(row) as unknown);\n\t\tif (commit) commitLoro();\n\t};\n\n\tconst loroRemove = (idStr: string, commit = true) => {\n\t\tif (!loroMap) return;\n\t\tloroMap.delete(idStr);\n\t\tif (commit) commitLoro();\n\t};\n\n\tconst mergeLocalOverServer = (serverRows: T[]): T[] => {\n\t\tif (!useLoro || !loroMap) return serverRows;\n\n\t\tconst localJson = (loroMap.toJSON?.() ?? {}) as Record<string, T>;\n\n\t\tconst out: T[] = [];\n\t\tfor (const s of serverRows) {\n\t\t\tconst idStr = getKey(s);\n\t\t\tconst l = localJson[idStr];\n\n\t\t\tif (!l) {\n\t\t\t\tout.push(s);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ((l.sync_deleted ?? false) === true) continue;\n\t\t\tout.push(withRecordId(l));\n\t\t}\n\n\t\treturn out;\n\t};\n\n\tconst base = queryCollectionOptions({\n\t\tschema: createInsertSchema<T>(config.table.name),\n\t\tgetKey,\n\n\t\tqueryKey,\n\t\tqueryClient,\n\n\t\tsyncMode,\n\n\t\tqueryFn: async ({ meta }) => {\n\t\t\ttry {\n\t\t\t\tconst subset =\n\t\t\t\t\tsyncMode === 'on-demand'\n\t\t\t\t\t\t? meta?.loadSubsetOptions\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\tconst rows =\n\t\t\t\t\tsyncMode === 'eager'\n\t\t\t\t\t\t? await table.listAll()\n\t\t\t\t\t\t: await table.loadSubset(subset);\n\n\t\t\t\treturn mergeLocalOverServer(rows).map((row) =>\n\t\t\t\t\twithRecordId(row),\n\t\t\t\t);\n\t\t\t} catch (e) {\n\t\t\t\tonError?.(e);\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\n\t\tonInsert: (async (p: InsertMutationFnParams<T>) => {\n\t\t\tconst now = new Date();\n\n\t\t\tconst resultRows: T[] = [];\n\t\t\tlet shouldCommitLoro = false;\n\t\t\tfor (const m of p.transaction.mutations) {\n\t\t\t\tif (m.type !== 'insert') continue;\n\n\t\t\t\tconst baseRow = { ...m.modified } as T;\n\n\t\t\t\tconst row = useLoro\n\t\t\t\t\t? ({\n\t\t\t\t\t\t\t...baseRow,\n\t\t\t\t\t\t\tupdated_at: now,\n\t\t\t\t\t\t\tsync_deleted: false,\n\t\t\t\t\t\t} as T)\n\t\t\t\t\t: baseRow;\n\t\t\t\tconst normalizedRow = withRecordId(row);\n\n\t\t\t\tif (useLoro) {\n\t\t\t\t\tloroPut(normalizedRow, false);\n\t\t\t\t\tshouldCommitLoro = true;\n\t\t\t\t}\n\t\t\t\tif (isTempId(normalizedRow.id, config.table.name)) {\n\t\t\t\t\tconst tempKey = keyOf(normalizedRow.id);\n\t\t\t\t\tconst { id: _id, ...payload } = normalizedRow as Record<\n\t\t\t\t\t\tstring,\n\t\t\t\t\t\tunknown\n\t\t\t\t\t>;\n\t\t\t\t\tconst persisted = await table.create(payload as Partial<T>);\n\t\t\t\t\tconst resolvedRow = persisted?.id\n\t\t\t\t\t\t? withRecordId({\n\t\t\t\t\t\t\t\t...normalizedRow,\n\t\t\t\t\t\t\t\t...persisted,\n\t\t\t\t\t\t\t\tid: persisted.id,\n\t\t\t\t\t\t\t} as T)\n\t\t\t\t\t\t: normalizedRow;\n\n\t\t\t\t\tif (useLoro && persisted?.id) {\n\t\t\t\t\t\tloroRemove(tempKey, false);\n\t\t\t\t\t\tloroPut(resolvedRow, false);\n\t\t\t\t\t}\n\t\t\t\t\tresultRows.push(resolvedRow);\n\t\t\t\t} else {\n\t\t\t\t\tconst persisted = await table.create(normalizedRow);\n\t\t\t\t\tresultRows.push(\n\t\t\t\t\t\tpersisted\n\t\t\t\t\t\t\t? withRecordId({\n\t\t\t\t\t\t\t\t\t...normalizedRow,\n\t\t\t\t\t\t\t\t\t...persisted,\n\t\t\t\t\t\t\t\t} as T)\n\t\t\t\t\t\t\t: normalizedRow,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (shouldCommitLoro) commitLoro();\n\n\t\t\treturn resultRows as unknown as StandardSchema<T>;\n\t\t}) as InsertMutationFn<T, string, UtilsRecord, StandardSchema<T>>,\n\n\t\tonUpdate: (async (p: UpdateMutationFnParams<T>) => {\n\t\t\tconst now = new Date();\n\t\t\tconst writeUtils = getWriteUtils(p.collection.utils);\n\n\t\t\tconst resultRows: T[] = [];\n\t\t\tlet shouldCommitLoro = false;\n\t\t\tfor (const m of p.transaction.mutations) {\n\t\t\t\tif (m.type !== 'update') continue;\n\n\t\t\t\tconst idKey = m.key as RecordId;\n\t\t\t\tconst normalizedModified = omitUndefined(\n\t\t\t\t\tnormalizeRecordIdLikeFields({\n\t\t\t\t\t\t...(m.modified as Record<string, unknown>),\n\t\t\t\t\t}) as Record<string, unknown>,\n\t\t\t\t) as Partial<T>;\n\t\t\t\tconst baseRow = {\n\t\t\t\t\t...normalizedModified,\n\t\t\t\t\tid: normalizeMutationId(idKey),\n\t\t\t\t} as T;\n\n\t\t\t\tconst row = useLoro\n\t\t\t\t\t? ({ ...baseRow, updated_at: now } as T)\n\t\t\t\t\t: baseRow;\n\t\t\t\tconst normalizedRow = withRecordId(row);\n\n\t\t\t\tif (useLoro) {\n\t\t\t\t\tloroPut(normalizedRow, false);\n\t\t\t\t\tshouldCommitLoro = true;\n\t\t\t\t}\n\n\t\t\t\tawait table.update(normalizeMutationId(idKey), normalizedRow);\n\t\t\t\twriteUtils.writeUpsert?.(normalizedRow);\n\n\t\t\t\tresultRows.push(normalizedRow);\n\t\t\t}\n\t\t\tif (shouldCommitLoro) commitLoro();\n\n\t\t\tvoid resultRows;\n\t\t\treturn { refetch: false } as unknown as StandardSchema<T>;\n\t\t}) as UpdateMutationFn<T, string, UtilsRecord, StandardSchema<T>>,\n\n\t\tonDelete: (async (p: DeleteMutationFnParams<T>) => {\n\t\t\tconst writeUtils = getWriteUtils(p.collection.utils);\n\t\t\tlet shouldCommitLoro = false;\n\t\t\tfor (const m of p.transaction.mutations) {\n\t\t\t\tif (m.type !== 'delete') continue;\n\n\t\t\t\tconst idKey = m.key as RecordId;\n\t\t\t\tconst key = keyOf(idKey);\n\t\t\t\tif (useLoro) {\n\t\t\t\t\tloroRemove(key, false);\n\t\t\t\t\tshouldCommitLoro = true;\n\t\t\t\t}\n\n\t\t\t\tawait table.softDelete(normalizeMutationId(idKey));\n\t\t\t\twriteUtils.writeDelete?.(key);\n\t\t\t}\n\t\t\tif (shouldCommitLoro) commitLoro();\n\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\t// LIVE updates -> invalidate all subsets under base queryKey\n\tconst baseSync = base.sync?.sync;\n\n\tconst sync = baseSync\n\t\t? {\n\t\t\t\tsync: (ctx: Parameters<NonNullable<typeof baseSync>>[0]) => {\n\t\t\t\t\t// IMPORTANT: call baseSync exactly once\n\t\t\t\t\tconst baseRes = baseSync(ctx) as SyncReturn;\n\t\t\t\t\tconst baseCleanup = toCleanup(baseRes);\n\n\t\t\t\t\t// If live queries aren't supported, return the base result untouched\n\t\t\t\t\tif (!db.isFeatureSupported(Features.LiveQueries)) {\n\t\t\t\t\t\treturn baseRes as unknown as ReturnType<\n\t\t\t\t\t\t\tNonNullable<typeof baseSync>\n\t\t\t\t\t\t>;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst offLive = table.subscribe((evt) => {\n\t\t\t\t\t\tif (useLoro) {\n\t\t\t\t\t\t\tif (evt.type === 'delete') {\n\t\t\t\t\t\t\t\tloroRemove(getKey(evt.row));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tloroPut(evt.row);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvoid queryClient\n\t\t\t\t\t\t\t.invalidateQueries({ queryKey, exact: false })\n\t\t\t\t\t\t\t.catch((e) => onError?.(e));\n\t\t\t\t\t});\n\n\t\t\t\t\t// Preserve base return shape, just wrap cleanup\n\t\t\t\t\tif (hasLoadSubset(baseRes)) {\n\t\t\t\t\t\t// on-demand mode relies on this being present\n\t\t\t\t\t\tconst resObj = baseRes as Record<string, unknown>;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...resObj,\n\t\t\t\t\t\t\tcleanup: () => {\n\t\t\t\t\t\t\t\toffLive();\n\t\t\t\t\t\t\t\tbaseCleanup();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} as unknown as ReturnType<\n\t\t\t\t\t\t\tNonNullable<typeof baseSync>\n\t\t\t\t\t\t>;\n\t\t\t\t\t}\n\n\t\t\t\t\t// eager mode usually returns a cleanup function\n\t\t\t\t\treturn (() => {\n\t\t\t\t\t\toffLive();\n\t\t\t\t\t\tbaseCleanup();\n\t\t\t\t\t}) as unknown as ReturnType<NonNullable<typeof baseSync>>;\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/id.ts","../src/queryKey.ts","../src/table.ts","../src/index.ts"],"names":["RecordId","parseWhereExpression","parseOrderByExpression","Table","Features","LoroDoc","queryCollectionOptions"],"mappings":"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","file":"index.js","sourcesContent":["import { RecordId } from 'surrealdb';\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\nconst parseRecordIdString = (value: string): RecordId | 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\n\treturn new RecordId(table, key);\n};\n\nconst asRecordIdFromObjectShape = (value: unknown): RecordId | undefined => {\n\tif (!value || typeof value !== 'object') return undefined;\n\tconst obj = value as Record<string, unknown>;\n\n\tconst table =\n\t\ttypeof obj.table === 'string'\n\t\t\t? obj.table\n\t\t\t: typeof obj.tb === 'string'\n\t\t\t\t? obj.tb\n\t\t\t\t: undefined;\n\tconst key =\n\t\ttypeof obj.id === 'string' || typeof obj.id === 'number'\n\t\t\t? String(obj.id)\n\t\t\t: undefined;\n\n\tif (table && key && looksLikeTableName(table)) {\n\t\treturn new RecordId(table, key);\n\t}\n\n\treturn undefined;\n};\n\nconst asRecordIdFromObjectString = (value: unknown): RecordId | undefined => {\n\tif (!value || typeof value !== 'object') return undefined;\n\tconst obj = value as { toString?: () => unknown };\n\tif (typeof obj.toString !== 'function') return undefined;\n\n\tconst raw = String(obj.toString());\n\tif (!raw || raw === '[object Object]') return undefined;\n\treturn parseRecordIdString(raw);\n};\n\nexport const normalizeRecordIdLikeValue = (value: unknown): unknown => {\n\tif (value instanceof RecordId) return value;\n\tif (typeof value === 'object' && value !== null) {\n\t\treturn (\n\t\t\tasRecordIdFromObjectShape(value) ??\n\t\t\tasRecordIdFromObjectString(value) ??\n\t\t\tvalue\n\t\t);\n\t}\n\tif (typeof value !== 'string') return value;\n\n\tconst trimmed = value.trim();\n\tconst unquoted = stripOuterQuotes(trimmed);\n\n\tconst parsed =\n\t\tparseRecordIdString(unquoted) ??\n\t\t(unquoted === trimmed ? undefined : parseRecordIdString(trimmed));\n\tif (parsed) return parsed;\n\n\t// Keep original value shape if it isn't record-id-like\n\treturn value;\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) return id;\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 type { LoadSubsetOptions } from '@tanstack/db';\nimport type { RecordId } from 'surrealdb';\nimport { normalizeRecordIdLikeValue, toRecordIdString } from './id';\n\ntype BasicExpression = NonNullable<LoadSubsetOptions['where']>;\n\nconst isRecordId = (value: unknown): value is RecordId =>\n\ttypeof value === 'object' &&\n\tvalue !== null &&\n\t'toString' in value &&\n\ttypeof (value as { toString: unknown }).toString === 'function' &&\n\t'table' in value;\n\nconst serializeValue = (value: unknown): unknown => {\n\tconst normalized = normalizeRecordIdLikeValue(value);\n\tif (isRecordId(normalized)) {\n\t\treturn {\n\t\t\t__type: 'recordid',\n\t\t\tvalue: toRecordIdString(normalized),\n\t\t};\n\t}\n\n\tif (normalized === undefined) {\n\t\treturn { __type: 'undefined' };\n\t}\n\tif (typeof normalized === 'number') {\n\t\tif (Number.isNaN(normalized)) return { __type: 'nan' };\n\t\tif (normalized === Number.POSITIVE_INFINITY) {\n\t\t\treturn { __type: 'infinity', sign: 1 };\n\t\t}\n\t\tif (normalized === Number.NEGATIVE_INFINITY) {\n\t\t\treturn { __type: 'infinity', sign: -1 };\n\t\t}\n\t}\n\n\tif (\n\t\tnormalized === null ||\n\t\ttypeof normalized === 'string' ||\n\t\ttypeof normalized === 'number' ||\n\t\ttypeof normalized === 'boolean'\n\t) {\n\t\treturn normalized;\n\t}\n\n\tif (normalized instanceof Date) {\n\t\treturn { __type: 'date', value: normalized.toJSON() };\n\t}\n\n\tif (Array.isArray(normalized)) {\n\t\treturn normalized.map((item) => serializeValue(item));\n\t}\n\n\tif (typeof normalized === 'object') {\n\t\tconst entries = Object.entries(\n\t\t\tnormalized as Record<string, unknown>,\n\t\t).sort(([a], [b]) => a.localeCompare(b));\n\t\treturn Object.fromEntries(\n\t\t\tentries.map(([key, item]) => [key, serializeValue(item)]),\n\t\t);\n\t}\n\n\treturn normalized;\n};\n\nconst serializeExpression = (expr: BasicExpression | undefined): unknown => {\n\tif (!expr) return null;\n\n\tswitch (expr.type) {\n\t\tcase 'val':\n\t\t\treturn {\n\t\t\t\ttype: 'val',\n\t\t\t\tvalue: serializeValue(expr.value),\n\t\t\t};\n\t\tcase 'ref':\n\t\t\treturn {\n\t\t\t\ttype: 'ref',\n\t\t\t\tpath: [...expr.path],\n\t\t\t};\n\t\tcase 'func':\n\t\t\treturn {\n\t\t\t\ttype: 'func',\n\t\t\t\tname: expr.name,\n\t\t\t\targs: expr.args.map((arg) =>\n\t\t\t\t\tserializeExpression(arg as BasicExpression),\n\t\t\t\t),\n\t\t\t};\n\t\tdefault:\n\t\t\treturn null;\n\t}\n};\n\nexport const serializeSurrealSubsetOptions = (\n\toptions: LoadSubsetOptions | undefined,\n): string | undefined => {\n\tif (!options) return undefined;\n\n\tconst out: Record<string, unknown> = {};\n\tif (options.where) out.where = serializeExpression(options.where);\n\tif (options.orderBy?.length) {\n\t\tout.orderBy = options.orderBy.map((clause) => ({\n\t\t\texpression: serializeExpression(\n\t\t\t\tclause.expression as BasicExpression,\n\t\t\t),\n\t\t\tdirection: clause.compareOptions.direction,\n\t\t\tnulls: clause.compareOptions.nulls,\n\t\t\tstringSort: clause.compareOptions.stringSort,\n\t\t\tlocale: clause.compareOptions.locale,\n\t\t\tlocaleOptions: clause.compareOptions.localeOptions,\n\t\t}));\n\t}\n\tif (options.limit !== undefined) out.limit = options.limit;\n\tif (options.offset !== undefined) out.offset = options.offset;\n\n\treturn Object.keys(out).length ? JSON.stringify(out) : undefined;\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 { normalizeRecordIdLikeValue, toRecordId } 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\t}\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\tuseLoro: boolean,\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\t// Subset predicates should compare against concrete values.\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 (string/RecordId), not a reactive proxy/path.',\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\tif (useLoro) whereParts.push('sync_deleted = false');\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\tuseLoro: boolean,\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, useLoro, subset);\n\t\tconst [res] = await db.query<[QueryResult<T>]>(sql, params);\n\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\tif (!useLoro) {\n\t\t\tawait db.update(id).merge(rest);\n\t\t\treturn;\n\t\t}\n\t\tawait db.update(id).merge({\n\t\t\t...rest,\n\t\t\tsync_deleted: false,\n\t\t\tupdated_at: Date.now(),\n\t\t});\n\t};\n\n\tconst remove = async (id: RecordId) => {\n\t\tawait db.delete(id);\n\t};\n\n\tconst softDelete = async (id: RecordId) => {\n\t\tif (!useLoro) {\n\t\t\tawait db.delete(id);\n\t\t\treturn;\n\t\t}\n\t\tawait db.upsert(id).merge({\n\t\t\tsync_deleted: true,\n\t\t\tupdated_at: Date.now(),\n\t\t});\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\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,\n\t\tsubscribe,\n\t};\n}\n","import type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type {\n\tCollectionConfig,\n\tDeleteMutationFn,\n\tDeleteMutationFnParams,\n\tInsertMutationFn,\n\tInsertMutationFnParams,\n\tOperationConfig,\n\tStandardSchema,\n\tTransaction,\n\tUpdateMutationFn,\n\tUpdateMutationFnParams,\n\tUtilsRecord,\n} from '@tanstack/db';\nimport { queryCollectionOptions } from '@tanstack/query-db-collection';\nimport { type Container, LoroDoc } from 'loro-crdt';\nimport { Features, RecordId } from 'surrealdb';\n\nimport {\n\tnormalizeRecordIdLikeFields,\n\ttoRecordId,\n\ttoRecordIdString,\n} from './id';\nimport { serializeSurrealSubsetOptions } from './queryKey';\nimport { manageTable } from './table';\nimport type {\n\tSurrealCollectionConfig,\n\tSurrealSubset,\n\tSyncedTable,\n} from './types';\n\ntype Cleanup = () => void;\n\ntype MutationInput<T extends { id: string | RecordId }> = Omit<T, 'id'> & {\n\tid?: T['id'];\n};\n\ntype SurrealCollectionOptionsReturn<T extends { id: string | RecordId }> =\n\tCollectionConfig<\n\t\tT,\n\t\tstring,\n\t\tStandardSchemaV1<MutationInput<T>, T>,\n\t\tUtilsRecord\n\t> & {\n\t\tschema: StandardSchemaV1<MutationInput<T>, T>;\n\t\tutils: UtilsRecord;\n\t};\n\nexport { toRecordKeyString } from './id';\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\t// biome-ignore lint/suspicious/noExplicitAny: Match TanstackDB\n\t\t): Transaction<any>;\n\t}\n}\n\ntype SyncReturn =\n\t| undefined\n\t| Cleanup\n\t| {\n\t\t\tcleanup?: Cleanup;\n\t\t\tunsubscribe?: Cleanup;\n\t\t\tdispose?: Cleanup;\n\t\t\tloadSubset?: unknown; // keep unknown; Only pass through\n\t };\n\nconst TEMP_ID_PREFIX = '__temp__';\nconst NOOP: Cleanup = () => {};\n\ntype QueryWriteUtils = {\n\twriteUpsert?: (data: unknown) => void;\n\twriteDelete?: (key: string) => void;\n};\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\tif (id instanceof RecordId) {\n\t\tconst recordKey = (id as unknown as { id?: unknown }).id;\n\t\treturn (\n\t\t\ttypeof recordKey === 'string' &&\n\t\t\trecordKey.startsWith(TEMP_ID_PREFIX)\n\t\t);\n\t}\n\n\tconst raw = toRecordIdString(id);\n\tconst key = raw.startsWith(`${tableName}:`)\n\t\t? raw.slice(tableName.length + 1)\n\t\t: raw;\n\treturn key.startsWith(TEMP_ID_PREFIX);\n};\n\nfunction toCleanup(res: SyncReturn): Cleanup {\n\tif (!res) return NOOP;\n\tif (typeof res === 'function') return res;\n\n\tconst cleanup = res.cleanup ?? res.unsubscribe ?? res.dispose;\n\n\treturn typeof cleanup === 'function' ? cleanup : NOOP;\n}\n\nfunction hasLoadSubset(\n\tres: SyncReturn,\n): res is { loadSubset: unknown } & Record<string, unknown> {\n\treturn typeof res === 'object' && res !== null && 'loadSubset' in res;\n}\n\nconst getWriteUtils = (utils: unknown): QueryWriteUtils =>\n\ttypeof utils === 'object' && utils !== null\n\t\t? (utils as QueryWriteUtils)\n\t\t: {};\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\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\nexport function surrealCollectionOptions<\n\tT extends SyncedTable<object>,\n\tS extends Record<string, Container> = { [k: string]: never },\n>({\n\tid,\n\tuseLoro = false,\n\tonError,\n\tdb,\n\tqueryClient,\n\tqueryKey,\n\tsyncMode = 'eager',\n\t...config\n}: SurrealCollectionConfig): CollectionConfig<\n\tT,\n\tstring,\n\tStandardSchemaV1<MutationInput<T>, T>,\n\tUtilsRecord\n> & {\n\tschema: StandardSchemaV1<MutationInput<T>, T>;\n\tutils: UtilsRecord;\n} {\n\tlet loro: { doc: LoroDoc<S>; key?: string } | undefined;\n\tif (useLoro) loro = { doc: new LoroDoc(), key: id };\n\tconst resolvedQueryKey =\n\t\tsyncMode === 'on-demand'\n\t\t\t? (opts: SurrealSubset = {}) => {\n\t\t\t\t\tconst serialized = serializeSurrealSubsetOptions(opts);\n\t\t\t\t\treturn serialized\n\t\t\t\t\t\t? [...queryKey, serialized]\n\t\t\t\t\t\t: [...queryKey];\n\t\t\t\t}\n\t\t\t: queryKey;\n\n\tconst table = manageTable<T>(db, useLoro, config.table);\n\n\tconst keyOf = (rid: RecordId | string): string => toRecordIdString(rid);\n\n\tconst getKey = (row: { id: string | RecordId }) => keyOf(row.id);\n\tconst normalizeMutationId = (rid: RecordId | string): RecordId =>\n\t\ttoRecordId(config.table.name, rid);\n\tconst withRecordId = (row: T): T =>\n\t\t({ ...row, id: normalizeMutationId(row.id) }) as T;\n\tconst toLoroStoredRow = (row: T): T => ({ ...row, id: keyOf(row.id) }) as T;\n\n\tconst loroKey = loro?.key ?? id ?? 'surreal';\n\tconst loroMap = useLoro ? (loro?.doc?.getMap?.(loroKey) ?? null) : null;\n\tconst commitLoro = () => {\n\t\tloro?.doc?.commit?.();\n\t};\n\n\tconst loroPut = (row: T, commit = true) => {\n\t\tif (!loroMap) return;\n\t\tloroMap.set(getKey(row), toLoroStoredRow(row) as unknown);\n\t\tif (commit) commitLoro();\n\t};\n\n\tconst loroRemove = (idStr: string, commit = true) => {\n\t\tif (!loroMap) return;\n\t\tloroMap.delete(idStr);\n\t\tif (commit) commitLoro();\n\t};\n\n\tconst mergeLocalOverServer = (serverRows: T[]): T[] => {\n\t\tif (!useLoro || !loroMap) return serverRows;\n\n\t\tconst localJson = (loroMap.toJSON?.() ?? {}) as Record<string, T>;\n\n\t\tconst out: T[] = [];\n\t\tfor (const s of serverRows) {\n\t\t\tconst idStr = getKey(s);\n\t\t\tconst l = localJson[idStr];\n\n\t\t\tif (!l) {\n\t\t\t\tout.push(s);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ((l.sync_deleted ?? false) === true) continue;\n\t\t\tout.push(withRecordId(l));\n\t\t}\n\n\t\treturn out;\n\t};\n\n\tconst base = queryCollectionOptions({\n\t\tschema: createInsertSchema<T>(config.table.name),\n\t\tgetKey,\n\n\t\tqueryKey: resolvedQueryKey,\n\t\tqueryClient,\n\n\t\tsyncMode,\n\n\t\tqueryFn: async ({ meta }) => {\n\t\t\ttry {\n\t\t\t\tconst subset =\n\t\t\t\t\tsyncMode === 'on-demand'\n\t\t\t\t\t\t? meta?.loadSubsetOptions\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\tconst rows =\n\t\t\t\t\tsyncMode === 'eager'\n\t\t\t\t\t\t? await table.listAll()\n\t\t\t\t\t\t: await table.loadSubset(subset);\n\n\t\t\t\treturn mergeLocalOverServer(rows).map((row) =>\n\t\t\t\t\twithRecordId(row),\n\t\t\t\t);\n\t\t\t} catch (e) {\n\t\t\t\tonError?.(e);\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\n\t\tonInsert: (async (p: InsertMutationFnParams<T>) => {\n\t\t\tconst now = new Date();\n\n\t\t\tconst resultRows: T[] = [];\n\t\t\tlet shouldCommitLoro = false;\n\t\t\tfor (const m of p.transaction.mutations) {\n\t\t\t\tif (m.type !== 'insert') continue;\n\n\t\t\t\tconst baseRow = { ...m.modified } as T;\n\n\t\t\t\tconst row = useLoro\n\t\t\t\t\t? ({\n\t\t\t\t\t\t\t...baseRow,\n\t\t\t\t\t\t\tupdated_at: now,\n\t\t\t\t\t\t\tsync_deleted: false,\n\t\t\t\t\t\t} as T)\n\t\t\t\t\t: baseRow;\n\t\t\t\tconst normalizedRow = withRecordId(row);\n\n\t\t\t\tif (useLoro) {\n\t\t\t\t\tloroPut(normalizedRow, false);\n\t\t\t\t\tshouldCommitLoro = true;\n\t\t\t\t}\n\t\t\t\tif (isTempId(normalizedRow.id, config.table.name)) {\n\t\t\t\t\tconst tempKey = keyOf(normalizedRow.id);\n\t\t\t\t\tconst { id: _id, ...payload } = normalizedRow as Record<\n\t\t\t\t\t\tstring,\n\t\t\t\t\t\tunknown\n\t\t\t\t\t>;\n\t\t\t\t\tconst persisted = await table.create(payload as Partial<T>);\n\t\t\t\t\tconst resolvedRow = persisted?.id\n\t\t\t\t\t\t? withRecordId({\n\t\t\t\t\t\t\t\t...normalizedRow,\n\t\t\t\t\t\t\t\t...persisted,\n\t\t\t\t\t\t\t\tid: persisted.id,\n\t\t\t\t\t\t\t} as T)\n\t\t\t\t\t\t: normalizedRow;\n\n\t\t\t\t\tif (useLoro && persisted?.id) {\n\t\t\t\t\t\tloroRemove(tempKey, false);\n\t\t\t\t\t\tloroPut(resolvedRow, false);\n\t\t\t\t\t}\n\t\t\t\t\tresultRows.push(resolvedRow);\n\t\t\t\t} else {\n\t\t\t\t\tconst persisted = await table.create(normalizedRow);\n\t\t\t\t\tresultRows.push(\n\t\t\t\t\t\tpersisted\n\t\t\t\t\t\t\t? withRecordId({\n\t\t\t\t\t\t\t\t\t...normalizedRow,\n\t\t\t\t\t\t\t\t\t...persisted,\n\t\t\t\t\t\t\t\t} as T)\n\t\t\t\t\t\t\t: normalizedRow,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (shouldCommitLoro) commitLoro();\n\n\t\t\treturn resultRows as unknown as StandardSchema<T>;\n\t\t}) as InsertMutationFn<T, string, UtilsRecord, StandardSchema<T>>,\n\n\t\tonUpdate: (async (p: UpdateMutationFnParams<T>) => {\n\t\t\tconst now = new Date();\n\t\t\tconst writeUtils = getWriteUtils(p.collection.utils);\n\n\t\t\tconst resultRows: T[] = [];\n\t\t\tlet shouldCommitLoro = false;\n\t\t\tfor (const m of p.transaction.mutations) {\n\t\t\t\tif (m.type !== 'update') continue;\n\n\t\t\t\tconst idKey = m.key as RecordId;\n\t\t\t\tconst normalizedModified = omitUndefined(\n\t\t\t\t\tnormalizeRecordIdLikeFields({\n\t\t\t\t\t\t...(m.modified as Record<string, unknown>),\n\t\t\t\t\t}) as Record<string, unknown>,\n\t\t\t\t) as Partial<T>;\n\t\t\t\tconst baseRow = {\n\t\t\t\t\t...normalizedModified,\n\t\t\t\t\tid: normalizeMutationId(idKey),\n\t\t\t\t} as T;\n\n\t\t\t\tconst row = useLoro\n\t\t\t\t\t? ({ ...baseRow, updated_at: now } as T)\n\t\t\t\t\t: baseRow;\n\t\t\t\tconst normalizedRow = withRecordId(row);\n\n\t\t\t\tif (useLoro) {\n\t\t\t\t\tloroPut(normalizedRow, false);\n\t\t\t\t\tshouldCommitLoro = true;\n\t\t\t\t}\n\n\t\t\t\tawait table.update(normalizeMutationId(idKey), normalizedRow);\n\t\t\t\twriteUtils.writeUpsert?.(normalizedRow);\n\n\t\t\t\tresultRows.push(normalizedRow);\n\t\t\t}\n\t\t\tif (shouldCommitLoro) commitLoro();\n\n\t\t\tvoid resultRows;\n\t\t\treturn { refetch: false } as unknown as StandardSchema<T>;\n\t\t}) as UpdateMutationFn<T, string, UtilsRecord, StandardSchema<T>>,\n\n\t\tonDelete: (async (p: DeleteMutationFnParams<T>) => {\n\t\t\tconst writeUtils = getWriteUtils(p.collection.utils);\n\t\t\tlet shouldCommitLoro = false;\n\t\t\tfor (const m of p.transaction.mutations) {\n\t\t\t\tif (m.type !== 'delete') continue;\n\n\t\t\t\tconst idKey = m.key as RecordId;\n\t\t\t\tconst key = keyOf(idKey);\n\t\t\t\tif (useLoro) {\n\t\t\t\t\tloroRemove(key, false);\n\t\t\t\t\tshouldCommitLoro = true;\n\t\t\t\t}\n\n\t\t\t\tawait table.softDelete(normalizeMutationId(idKey));\n\t\t\t\twriteUtils.writeDelete?.(key);\n\t\t\t}\n\t\t\tif (shouldCommitLoro) commitLoro();\n\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\t// LIVE updates -> invalidate all subsets under base queryKey\n\tconst baseSync = base.sync?.sync;\n\n\tconst sync = baseSync\n\t\t? {\n\t\t\t\tsync: (ctx: Parameters<NonNullable<typeof baseSync>>[0]) => {\n\t\t\t\t\t// IMPORTANT: call baseSync exactly once\n\t\t\t\t\tconst baseRes = baseSync(ctx) as SyncReturn;\n\t\t\t\t\tconst baseCleanup = toCleanup(baseRes);\n\n\t\t\t\t\t// If live queries aren't supported, return the base result untouched\n\t\t\t\t\tif (!db.isFeatureSupported(Features.LiveQueries)) {\n\t\t\t\t\t\treturn baseRes as unknown as ReturnType<\n\t\t\t\t\t\t\tNonNullable<typeof baseSync>\n\t\t\t\t\t\t>;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst offLive = table.subscribe((evt) => {\n\t\t\t\t\t\tif (useLoro) {\n\t\t\t\t\t\t\tif (evt.type === 'delete') {\n\t\t\t\t\t\t\t\tloroRemove(getKey(evt.row));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tloroPut(evt.row);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvoid queryClient\n\t\t\t\t\t\t\t.invalidateQueries({ queryKey, exact: false })\n\t\t\t\t\t\t\t.catch((e) => onError?.(e));\n\t\t\t\t\t});\n\n\t\t\t\t\t// Preserve base return shape, just wrap cleanup\n\t\t\t\t\tif (hasLoadSubset(baseRes)) {\n\t\t\t\t\t\t// on-demand mode relies on this being present\n\t\t\t\t\t\tconst resObj = baseRes as Record<string, unknown>;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...resObj,\n\t\t\t\t\t\t\tcleanup: () => {\n\t\t\t\t\t\t\t\toffLive();\n\t\t\t\t\t\t\t\tbaseCleanup();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} as unknown as ReturnType<\n\t\t\t\t\t\t\tNonNullable<typeof baseSync>\n\t\t\t\t\t\t>;\n\t\t\t\t\t}\n\n\t\t\t\t\t// eager mode usually returns a cleanup function\n\t\t\t\t\treturn (() => {\n\t\t\t\t\t\toffLive();\n\t\t\t\t\t\tbaseCleanup();\n\t\t\t\t\t}) as unknown as ReturnType<NonNullable<typeof baseSync>>;\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"]}
|
package/dist/index.mjs
CHANGED
|
@@ -93,6 +93,93 @@ var toRecordId = (tableName, id) => {
|
|
|
93
93
|
const key = normalized.startsWith(prefixed) ? normalized.slice(prefixed.length) : normalized;
|
|
94
94
|
return new RecordId(tableName, key);
|
|
95
95
|
};
|
|
96
|
+
|
|
97
|
+
// src/queryKey.ts
|
|
98
|
+
var isRecordId = (value) => typeof value === "object" && value !== null && "toString" in value && typeof value.toString === "function" && "table" in value;
|
|
99
|
+
var serializeValue = (value) => {
|
|
100
|
+
const normalized = normalizeRecordIdLikeValue(value);
|
|
101
|
+
if (isRecordId(normalized)) {
|
|
102
|
+
return {
|
|
103
|
+
__type: "recordid",
|
|
104
|
+
value: toRecordIdString(normalized)
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
if (normalized === void 0) {
|
|
108
|
+
return { __type: "undefined" };
|
|
109
|
+
}
|
|
110
|
+
if (typeof normalized === "number") {
|
|
111
|
+
if (Number.isNaN(normalized)) return { __type: "nan" };
|
|
112
|
+
if (normalized === Number.POSITIVE_INFINITY) {
|
|
113
|
+
return { __type: "infinity", sign: 1 };
|
|
114
|
+
}
|
|
115
|
+
if (normalized === Number.NEGATIVE_INFINITY) {
|
|
116
|
+
return { __type: "infinity", sign: -1 };
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (normalized === null || typeof normalized === "string" || typeof normalized === "number" || typeof normalized === "boolean") {
|
|
120
|
+
return normalized;
|
|
121
|
+
}
|
|
122
|
+
if (normalized instanceof Date) {
|
|
123
|
+
return { __type: "date", value: normalized.toJSON() };
|
|
124
|
+
}
|
|
125
|
+
if (Array.isArray(normalized)) {
|
|
126
|
+
return normalized.map((item) => serializeValue(item));
|
|
127
|
+
}
|
|
128
|
+
if (typeof normalized === "object") {
|
|
129
|
+
const entries = Object.entries(
|
|
130
|
+
normalized
|
|
131
|
+
).sort(([a], [b]) => a.localeCompare(b));
|
|
132
|
+
return Object.fromEntries(
|
|
133
|
+
entries.map(([key, item]) => [key, serializeValue(item)])
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
return normalized;
|
|
137
|
+
};
|
|
138
|
+
var serializeExpression = (expr) => {
|
|
139
|
+
if (!expr) return null;
|
|
140
|
+
switch (expr.type) {
|
|
141
|
+
case "val":
|
|
142
|
+
return {
|
|
143
|
+
type: "val",
|
|
144
|
+
value: serializeValue(expr.value)
|
|
145
|
+
};
|
|
146
|
+
case "ref":
|
|
147
|
+
return {
|
|
148
|
+
type: "ref",
|
|
149
|
+
path: [...expr.path]
|
|
150
|
+
};
|
|
151
|
+
case "func":
|
|
152
|
+
return {
|
|
153
|
+
type: "func",
|
|
154
|
+
name: expr.name,
|
|
155
|
+
args: expr.args.map(
|
|
156
|
+
(arg) => serializeExpression(arg)
|
|
157
|
+
)
|
|
158
|
+
};
|
|
159
|
+
default:
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
var serializeSurrealSubsetOptions = (options) => {
|
|
164
|
+
if (!options) return void 0;
|
|
165
|
+
const out = {};
|
|
166
|
+
if (options.where) out.where = serializeExpression(options.where);
|
|
167
|
+
if (options.orderBy?.length) {
|
|
168
|
+
out.orderBy = options.orderBy.map((clause) => ({
|
|
169
|
+
expression: serializeExpression(
|
|
170
|
+
clause.expression
|
|
171
|
+
),
|
|
172
|
+
direction: clause.compareOptions.direction,
|
|
173
|
+
nulls: clause.compareOptions.nulls,
|
|
174
|
+
stringSort: clause.compareOptions.stringSort,
|
|
175
|
+
locale: clause.compareOptions.locale,
|
|
176
|
+
localeOptions: clause.compareOptions.localeOptions
|
|
177
|
+
}));
|
|
178
|
+
}
|
|
179
|
+
if (options.limit !== void 0) out.limit = options.limit;
|
|
180
|
+
if (options.offset !== void 0) out.offset = options.offset;
|
|
181
|
+
return Object.keys(out).length ? JSON.stringify(out) : void 0;
|
|
182
|
+
};
|
|
96
183
|
var IDENTIFIER_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
97
184
|
var firstRow = (res) => {
|
|
98
185
|
if (!res) return void 0;
|
|
@@ -401,6 +488,10 @@ function surrealCollectionOptions({
|
|
|
401
488
|
}) {
|
|
402
489
|
let loro;
|
|
403
490
|
if (useLoro) loro = { doc: new LoroDoc(), key: id };
|
|
491
|
+
const resolvedQueryKey = syncMode === "on-demand" ? (opts = {}) => {
|
|
492
|
+
const serialized = serializeSurrealSubsetOptions(opts);
|
|
493
|
+
return serialized ? [...queryKey, serialized] : [...queryKey];
|
|
494
|
+
} : queryKey;
|
|
404
495
|
const table = manageTable(db, useLoro, config.table);
|
|
405
496
|
const keyOf = (rid) => toRecordIdString(rid);
|
|
406
497
|
const getKey = (row) => keyOf(row.id);
|
|
@@ -441,7 +532,7 @@ function surrealCollectionOptions({
|
|
|
441
532
|
const base = queryCollectionOptions({
|
|
442
533
|
schema: createInsertSchema(config.table.name),
|
|
443
534
|
getKey,
|
|
444
|
-
queryKey,
|
|
535
|
+
queryKey: resolvedQueryKey,
|
|
445
536
|
queryClient,
|
|
446
537
|
syncMode,
|
|
447
538
|
queryFn: async ({ meta }) => {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/id.ts","../src/table.ts","../src/index.ts"],"names":["RecordId","Features"],"mappings":"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","file":"index.mjs","sourcesContent":["import { RecordId } from 'surrealdb';\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\nconst parseRecordIdString = (value: string): RecordId | 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\n\treturn new RecordId(table, key);\n};\n\nconst asRecordIdFromObjectShape = (value: unknown): RecordId | undefined => {\n\tif (!value || typeof value !== 'object') return undefined;\n\tconst obj = value as Record<string, unknown>;\n\n\tconst table =\n\t\ttypeof obj.table === 'string'\n\t\t\t? obj.table\n\t\t\t: typeof obj.tb === 'string'\n\t\t\t\t? obj.tb\n\t\t\t\t: undefined;\n\tconst key =\n\t\ttypeof obj.id === 'string' || typeof obj.id === 'number'\n\t\t\t? String(obj.id)\n\t\t\t: undefined;\n\n\tif (table && key && looksLikeTableName(table)) {\n\t\treturn new RecordId(table, key);\n\t}\n\n\treturn undefined;\n};\n\nconst asRecordIdFromObjectString = (value: unknown): RecordId | undefined => {\n\tif (!value || typeof value !== 'object') return undefined;\n\tconst obj = value as { toString?: () => unknown };\n\tif (typeof obj.toString !== 'function') return undefined;\n\n\tconst raw = String(obj.toString());\n\tif (!raw || raw === '[object Object]') return undefined;\n\treturn parseRecordIdString(raw);\n};\n\nexport const normalizeRecordIdLikeValue = (value: unknown): unknown => {\n\tif (value instanceof RecordId) return value;\n\tif (typeof value === 'object' && value !== null) {\n\t\treturn (\n\t\t\tasRecordIdFromObjectShape(value) ??\n\t\t\tasRecordIdFromObjectString(value) ??\n\t\t\tvalue\n\t\t);\n\t}\n\tif (typeof value !== 'string') return value;\n\n\tconst trimmed = value.trim();\n\tconst unquoted = stripOuterQuotes(trimmed);\n\n\tconst parsed =\n\t\tparseRecordIdString(unquoted) ??\n\t\t(unquoted === trimmed ? undefined : parseRecordIdString(trimmed));\n\tif (parsed) return parsed;\n\n\t// Keep original value shape if it isn't record-id-like\n\treturn value;\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) return id;\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 { normalizeRecordIdLikeValue, toRecordId } 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\t}\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\tuseLoro: boolean,\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\t// Subset predicates should compare against concrete values.\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 (string/RecordId), not a reactive proxy/path.',\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\tif (useLoro) whereParts.push('sync_deleted = false');\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\tuseLoro: boolean,\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, useLoro, subset);\n\t\tconst [res] = await db.query<[QueryResult<T>]>(sql, params);\n\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\tif (!useLoro) {\n\t\t\tawait db.update(id).merge(rest);\n\t\t\treturn;\n\t\t}\n\t\tawait db.update(id).merge({\n\t\t\t...rest,\n\t\t\tsync_deleted: false,\n\t\t\tupdated_at: Date.now(),\n\t\t});\n\t};\n\n\tconst remove = async (id: RecordId) => {\n\t\tawait db.delete(id);\n\t};\n\n\tconst softDelete = async (id: RecordId) => {\n\t\tif (!useLoro) {\n\t\t\tawait db.delete(id);\n\t\t\treturn;\n\t\t}\n\t\tawait db.upsert(id).merge({\n\t\t\tsync_deleted: true,\n\t\t\tupdated_at: Date.now(),\n\t\t});\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\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,\n\t\tsubscribe,\n\t};\n}\n","import type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type {\n\tCollectionConfig,\n\tDeleteMutationFn,\n\tDeleteMutationFnParams,\n\tInsertMutationFn,\n\tInsertMutationFnParams,\n\tOperationConfig,\n\tStandardSchema,\n\tTransaction,\n\tUpdateMutationFn,\n\tUpdateMutationFnParams,\n\tUtilsRecord,\n} from '@tanstack/db';\nimport { queryCollectionOptions } from '@tanstack/query-db-collection';\nimport { type Container, LoroDoc } from 'loro-crdt';\nimport { Features, RecordId } from 'surrealdb';\n\nimport {\n\tnormalizeRecordIdLikeFields,\n\ttoRecordId,\n\ttoRecordIdString,\n} from './id';\nimport { manageTable } from './table';\nimport type { SurrealCollectionConfig, SyncedTable } from './types';\n\ntype Cleanup = () => void;\n\ntype MutationInput<T extends { id: string | RecordId }> = Omit<T, 'id'> & {\n\tid?: T['id'];\n};\n\ntype SurrealCollectionOptionsReturn<T extends { id: string | RecordId }> =\n\tCollectionConfig<\n\t\tT,\n\t\tstring,\n\t\tStandardSchemaV1<MutationInput<T>, T>,\n\t\tUtilsRecord\n\t> & {\n\t\tschema: StandardSchemaV1<MutationInput<T>, T>;\n\t\tutils: UtilsRecord;\n\t};\n\nexport { toRecordKeyString } from './id';\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\t// biome-ignore lint/suspicious/noExplicitAny: Match TanstackDB\n\t\t): Transaction<any>;\n\t}\n}\n\ntype SyncReturn =\n\t| undefined\n\t| Cleanup\n\t| {\n\t\t\tcleanup?: Cleanup;\n\t\t\tunsubscribe?: Cleanup;\n\t\t\tdispose?: Cleanup;\n\t\t\tloadSubset?: unknown; // keep unknown; Only pass through\n\t };\n\nconst TEMP_ID_PREFIX = '__temp__';\nconst NOOP: Cleanup = () => {};\n\ntype QueryWriteUtils = {\n\twriteUpsert?: (data: unknown) => void;\n\twriteDelete?: (key: string) => void;\n};\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\tif (id instanceof RecordId) {\n\t\tconst recordKey = (id as unknown as { id?: unknown }).id;\n\t\treturn (\n\t\t\ttypeof recordKey === 'string' &&\n\t\t\trecordKey.startsWith(TEMP_ID_PREFIX)\n\t\t);\n\t}\n\n\tconst raw = toRecordIdString(id);\n\tconst key = raw.startsWith(`${tableName}:`)\n\t\t? raw.slice(tableName.length + 1)\n\t\t: raw;\n\treturn key.startsWith(TEMP_ID_PREFIX);\n};\n\nfunction toCleanup(res: SyncReturn): Cleanup {\n\tif (!res) return NOOP;\n\tif (typeof res === 'function') return res;\n\n\tconst cleanup = res.cleanup ?? res.unsubscribe ?? res.dispose;\n\n\treturn typeof cleanup === 'function' ? cleanup : NOOP;\n}\n\nfunction hasLoadSubset(\n\tres: SyncReturn,\n): res is { loadSubset: unknown } & Record<string, unknown> {\n\treturn typeof res === 'object' && res !== null && 'loadSubset' in res;\n}\n\nconst getWriteUtils = (utils: unknown): QueryWriteUtils =>\n\ttypeof utils === 'object' && utils !== null\n\t\t? (utils as QueryWriteUtils)\n\t\t: {};\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\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\nexport function surrealCollectionOptions<\n\tT extends SyncedTable<object>,\n\tS extends Record<string, Container> = { [k: string]: never },\n>({\n\tid,\n\tuseLoro = false,\n\tonError,\n\tdb,\n\tqueryClient,\n\tqueryKey,\n\tsyncMode = 'eager',\n\t...config\n}: SurrealCollectionConfig): CollectionConfig<\n\tT,\n\tstring,\n\tStandardSchemaV1<MutationInput<T>, T>,\n\tUtilsRecord\n> & {\n\tschema: StandardSchemaV1<MutationInput<T>, T>;\n\tutils: UtilsRecord;\n} {\n\tlet loro: { doc: LoroDoc<S>; key?: string } | undefined;\n\tif (useLoro) loro = { doc: new LoroDoc(), key: id };\n\n\tconst table = manageTable<T>(db, useLoro, config.table);\n\n\tconst keyOf = (rid: RecordId | string): string => toRecordIdString(rid);\n\n\tconst getKey = (row: { id: string | RecordId }) => keyOf(row.id);\n\tconst normalizeMutationId = (rid: RecordId | string): RecordId =>\n\t\ttoRecordId(config.table.name, rid);\n\tconst withRecordId = (row: T): T =>\n\t\t({ ...row, id: normalizeMutationId(row.id) }) as T;\n\tconst toLoroStoredRow = (row: T): T => ({ ...row, id: keyOf(row.id) }) as T;\n\n\tconst loroKey = loro?.key ?? id ?? 'surreal';\n\tconst loroMap = useLoro ? (loro?.doc?.getMap?.(loroKey) ?? null) : null;\n\tconst commitLoro = () => {\n\t\tloro?.doc?.commit?.();\n\t};\n\n\tconst loroPut = (row: T, commit = true) => {\n\t\tif (!loroMap) return;\n\t\tloroMap.set(getKey(row), toLoroStoredRow(row) as unknown);\n\t\tif (commit) commitLoro();\n\t};\n\n\tconst loroRemove = (idStr: string, commit = true) => {\n\t\tif (!loroMap) return;\n\t\tloroMap.delete(idStr);\n\t\tif (commit) commitLoro();\n\t};\n\n\tconst mergeLocalOverServer = (serverRows: T[]): T[] => {\n\t\tif (!useLoro || !loroMap) return serverRows;\n\n\t\tconst localJson = (loroMap.toJSON?.() ?? {}) as Record<string, T>;\n\n\t\tconst out: T[] = [];\n\t\tfor (const s of serverRows) {\n\t\t\tconst idStr = getKey(s);\n\t\t\tconst l = localJson[idStr];\n\n\t\t\tif (!l) {\n\t\t\t\tout.push(s);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ((l.sync_deleted ?? false) === true) continue;\n\t\t\tout.push(withRecordId(l));\n\t\t}\n\n\t\treturn out;\n\t};\n\n\tconst base = queryCollectionOptions({\n\t\tschema: createInsertSchema<T>(config.table.name),\n\t\tgetKey,\n\n\t\tqueryKey,\n\t\tqueryClient,\n\n\t\tsyncMode,\n\n\t\tqueryFn: async ({ meta }) => {\n\t\t\ttry {\n\t\t\t\tconst subset =\n\t\t\t\t\tsyncMode === 'on-demand'\n\t\t\t\t\t\t? meta?.loadSubsetOptions\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\tconst rows =\n\t\t\t\t\tsyncMode === 'eager'\n\t\t\t\t\t\t? await table.listAll()\n\t\t\t\t\t\t: await table.loadSubset(subset);\n\n\t\t\t\treturn mergeLocalOverServer(rows).map((row) =>\n\t\t\t\t\twithRecordId(row),\n\t\t\t\t);\n\t\t\t} catch (e) {\n\t\t\t\tonError?.(e);\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\n\t\tonInsert: (async (p: InsertMutationFnParams<T>) => {\n\t\t\tconst now = new Date();\n\n\t\t\tconst resultRows: T[] = [];\n\t\t\tlet shouldCommitLoro = false;\n\t\t\tfor (const m of p.transaction.mutations) {\n\t\t\t\tif (m.type !== 'insert') continue;\n\n\t\t\t\tconst baseRow = { ...m.modified } as T;\n\n\t\t\t\tconst row = useLoro\n\t\t\t\t\t? ({\n\t\t\t\t\t\t\t...baseRow,\n\t\t\t\t\t\t\tupdated_at: now,\n\t\t\t\t\t\t\tsync_deleted: false,\n\t\t\t\t\t\t} as T)\n\t\t\t\t\t: baseRow;\n\t\t\t\tconst normalizedRow = withRecordId(row);\n\n\t\t\t\tif (useLoro) {\n\t\t\t\t\tloroPut(normalizedRow, false);\n\t\t\t\t\tshouldCommitLoro = true;\n\t\t\t\t}\n\t\t\t\tif (isTempId(normalizedRow.id, config.table.name)) {\n\t\t\t\t\tconst tempKey = keyOf(normalizedRow.id);\n\t\t\t\t\tconst { id: _id, ...payload } = normalizedRow as Record<\n\t\t\t\t\t\tstring,\n\t\t\t\t\t\tunknown\n\t\t\t\t\t>;\n\t\t\t\t\tconst persisted = await table.create(payload as Partial<T>);\n\t\t\t\t\tconst resolvedRow = persisted?.id\n\t\t\t\t\t\t? withRecordId({\n\t\t\t\t\t\t\t\t...normalizedRow,\n\t\t\t\t\t\t\t\t...persisted,\n\t\t\t\t\t\t\t\tid: persisted.id,\n\t\t\t\t\t\t\t} as T)\n\t\t\t\t\t\t: normalizedRow;\n\n\t\t\t\t\tif (useLoro && persisted?.id) {\n\t\t\t\t\t\tloroRemove(tempKey, false);\n\t\t\t\t\t\tloroPut(resolvedRow, false);\n\t\t\t\t\t}\n\t\t\t\t\tresultRows.push(resolvedRow);\n\t\t\t\t} else {\n\t\t\t\t\tconst persisted = await table.create(normalizedRow);\n\t\t\t\t\tresultRows.push(\n\t\t\t\t\t\tpersisted\n\t\t\t\t\t\t\t? withRecordId({\n\t\t\t\t\t\t\t\t\t...normalizedRow,\n\t\t\t\t\t\t\t\t\t...persisted,\n\t\t\t\t\t\t\t\t} as T)\n\t\t\t\t\t\t\t: normalizedRow,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (shouldCommitLoro) commitLoro();\n\n\t\t\treturn resultRows as unknown as StandardSchema<T>;\n\t\t}) as InsertMutationFn<T, string, UtilsRecord, StandardSchema<T>>,\n\n\t\tonUpdate: (async (p: UpdateMutationFnParams<T>) => {\n\t\t\tconst now = new Date();\n\t\t\tconst writeUtils = getWriteUtils(p.collection.utils);\n\n\t\t\tconst resultRows: T[] = [];\n\t\t\tlet shouldCommitLoro = false;\n\t\t\tfor (const m of p.transaction.mutations) {\n\t\t\t\tif (m.type !== 'update') continue;\n\n\t\t\t\tconst idKey = m.key as RecordId;\n\t\t\t\tconst normalizedModified = omitUndefined(\n\t\t\t\t\tnormalizeRecordIdLikeFields({\n\t\t\t\t\t\t...(m.modified as Record<string, unknown>),\n\t\t\t\t\t}) as Record<string, unknown>,\n\t\t\t\t) as Partial<T>;\n\t\t\t\tconst baseRow = {\n\t\t\t\t\t...normalizedModified,\n\t\t\t\t\tid: normalizeMutationId(idKey),\n\t\t\t\t} as T;\n\n\t\t\t\tconst row = useLoro\n\t\t\t\t\t? ({ ...baseRow, updated_at: now } as T)\n\t\t\t\t\t: baseRow;\n\t\t\t\tconst normalizedRow = withRecordId(row);\n\n\t\t\t\tif (useLoro) {\n\t\t\t\t\tloroPut(normalizedRow, false);\n\t\t\t\t\tshouldCommitLoro = true;\n\t\t\t\t}\n\n\t\t\t\tawait table.update(normalizeMutationId(idKey), normalizedRow);\n\t\t\t\twriteUtils.writeUpsert?.(normalizedRow);\n\n\t\t\t\tresultRows.push(normalizedRow);\n\t\t\t}\n\t\t\tif (shouldCommitLoro) commitLoro();\n\n\t\t\tvoid resultRows;\n\t\t\treturn { refetch: false } as unknown as StandardSchema<T>;\n\t\t}) as UpdateMutationFn<T, string, UtilsRecord, StandardSchema<T>>,\n\n\t\tonDelete: (async (p: DeleteMutationFnParams<T>) => {\n\t\t\tconst writeUtils = getWriteUtils(p.collection.utils);\n\t\t\tlet shouldCommitLoro = false;\n\t\t\tfor (const m of p.transaction.mutations) {\n\t\t\t\tif (m.type !== 'delete') continue;\n\n\t\t\t\tconst idKey = m.key as RecordId;\n\t\t\t\tconst key = keyOf(idKey);\n\t\t\t\tif (useLoro) {\n\t\t\t\t\tloroRemove(key, false);\n\t\t\t\t\tshouldCommitLoro = true;\n\t\t\t\t}\n\n\t\t\t\tawait table.softDelete(normalizeMutationId(idKey));\n\t\t\t\twriteUtils.writeDelete?.(key);\n\t\t\t}\n\t\t\tif (shouldCommitLoro) commitLoro();\n\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\t// LIVE updates -> invalidate all subsets under base queryKey\n\tconst baseSync = base.sync?.sync;\n\n\tconst sync = baseSync\n\t\t? {\n\t\t\t\tsync: (ctx: Parameters<NonNullable<typeof baseSync>>[0]) => {\n\t\t\t\t\t// IMPORTANT: call baseSync exactly once\n\t\t\t\t\tconst baseRes = baseSync(ctx) as SyncReturn;\n\t\t\t\t\tconst baseCleanup = toCleanup(baseRes);\n\n\t\t\t\t\t// If live queries aren't supported, return the base result untouched\n\t\t\t\t\tif (!db.isFeatureSupported(Features.LiveQueries)) {\n\t\t\t\t\t\treturn baseRes as unknown as ReturnType<\n\t\t\t\t\t\t\tNonNullable<typeof baseSync>\n\t\t\t\t\t\t>;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst offLive = table.subscribe((evt) => {\n\t\t\t\t\t\tif (useLoro) {\n\t\t\t\t\t\t\tif (evt.type === 'delete') {\n\t\t\t\t\t\t\t\tloroRemove(getKey(evt.row));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tloroPut(evt.row);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvoid queryClient\n\t\t\t\t\t\t\t.invalidateQueries({ queryKey, exact: false })\n\t\t\t\t\t\t\t.catch((e) => onError?.(e));\n\t\t\t\t\t});\n\n\t\t\t\t\t// Preserve base return shape, just wrap cleanup\n\t\t\t\t\tif (hasLoadSubset(baseRes)) {\n\t\t\t\t\t\t// on-demand mode relies on this being present\n\t\t\t\t\t\tconst resObj = baseRes as Record<string, unknown>;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...resObj,\n\t\t\t\t\t\t\tcleanup: () => {\n\t\t\t\t\t\t\t\toffLive();\n\t\t\t\t\t\t\t\tbaseCleanup();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} as unknown as ReturnType<\n\t\t\t\t\t\t\tNonNullable<typeof baseSync>\n\t\t\t\t\t\t>;\n\t\t\t\t\t}\n\n\t\t\t\t\t// eager mode usually returns a cleanup function\n\t\t\t\t\treturn (() => {\n\t\t\t\t\t\toffLive();\n\t\t\t\t\t\tbaseCleanup();\n\t\t\t\t\t}) as unknown as ReturnType<NonNullable<typeof baseSync>>;\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/id.ts","../src/queryKey.ts","../src/table.ts","../src/index.ts"],"names":["RecordId","Features"],"mappings":"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","file":"index.mjs","sourcesContent":["import { RecordId } from 'surrealdb';\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\nconst parseRecordIdString = (value: string): RecordId | 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\n\treturn new RecordId(table, key);\n};\n\nconst asRecordIdFromObjectShape = (value: unknown): RecordId | undefined => {\n\tif (!value || typeof value !== 'object') return undefined;\n\tconst obj = value as Record<string, unknown>;\n\n\tconst table =\n\t\ttypeof obj.table === 'string'\n\t\t\t? obj.table\n\t\t\t: typeof obj.tb === 'string'\n\t\t\t\t? obj.tb\n\t\t\t\t: undefined;\n\tconst key =\n\t\ttypeof obj.id === 'string' || typeof obj.id === 'number'\n\t\t\t? String(obj.id)\n\t\t\t: undefined;\n\n\tif (table && key && looksLikeTableName(table)) {\n\t\treturn new RecordId(table, key);\n\t}\n\n\treturn undefined;\n};\n\nconst asRecordIdFromObjectString = (value: unknown): RecordId | undefined => {\n\tif (!value || typeof value !== 'object') return undefined;\n\tconst obj = value as { toString?: () => unknown };\n\tif (typeof obj.toString !== 'function') return undefined;\n\n\tconst raw = String(obj.toString());\n\tif (!raw || raw === '[object Object]') return undefined;\n\treturn parseRecordIdString(raw);\n};\n\nexport const normalizeRecordIdLikeValue = (value: unknown): unknown => {\n\tif (value instanceof RecordId) return value;\n\tif (typeof value === 'object' && value !== null) {\n\t\treturn (\n\t\t\tasRecordIdFromObjectShape(value) ??\n\t\t\tasRecordIdFromObjectString(value) ??\n\t\t\tvalue\n\t\t);\n\t}\n\tif (typeof value !== 'string') return value;\n\n\tconst trimmed = value.trim();\n\tconst unquoted = stripOuterQuotes(trimmed);\n\n\tconst parsed =\n\t\tparseRecordIdString(unquoted) ??\n\t\t(unquoted === trimmed ? undefined : parseRecordIdString(trimmed));\n\tif (parsed) return parsed;\n\n\t// Keep original value shape if it isn't record-id-like\n\treturn value;\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) return id;\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 type { LoadSubsetOptions } from '@tanstack/db';\nimport type { RecordId } from 'surrealdb';\nimport { normalizeRecordIdLikeValue, toRecordIdString } from './id';\n\ntype BasicExpression = NonNullable<LoadSubsetOptions['where']>;\n\nconst isRecordId = (value: unknown): value is RecordId =>\n\ttypeof value === 'object' &&\n\tvalue !== null &&\n\t'toString' in value &&\n\ttypeof (value as { toString: unknown }).toString === 'function' &&\n\t'table' in value;\n\nconst serializeValue = (value: unknown): unknown => {\n\tconst normalized = normalizeRecordIdLikeValue(value);\n\tif (isRecordId(normalized)) {\n\t\treturn {\n\t\t\t__type: 'recordid',\n\t\t\tvalue: toRecordIdString(normalized),\n\t\t};\n\t}\n\n\tif (normalized === undefined) {\n\t\treturn { __type: 'undefined' };\n\t}\n\tif (typeof normalized === 'number') {\n\t\tif (Number.isNaN(normalized)) return { __type: 'nan' };\n\t\tif (normalized === Number.POSITIVE_INFINITY) {\n\t\t\treturn { __type: 'infinity', sign: 1 };\n\t\t}\n\t\tif (normalized === Number.NEGATIVE_INFINITY) {\n\t\t\treturn { __type: 'infinity', sign: -1 };\n\t\t}\n\t}\n\n\tif (\n\t\tnormalized === null ||\n\t\ttypeof normalized === 'string' ||\n\t\ttypeof normalized === 'number' ||\n\t\ttypeof normalized === 'boolean'\n\t) {\n\t\treturn normalized;\n\t}\n\n\tif (normalized instanceof Date) {\n\t\treturn { __type: 'date', value: normalized.toJSON() };\n\t}\n\n\tif (Array.isArray(normalized)) {\n\t\treturn normalized.map((item) => serializeValue(item));\n\t}\n\n\tif (typeof normalized === 'object') {\n\t\tconst entries = Object.entries(\n\t\t\tnormalized as Record<string, unknown>,\n\t\t).sort(([a], [b]) => a.localeCompare(b));\n\t\treturn Object.fromEntries(\n\t\t\tentries.map(([key, item]) => [key, serializeValue(item)]),\n\t\t);\n\t}\n\n\treturn normalized;\n};\n\nconst serializeExpression = (expr: BasicExpression | undefined): unknown => {\n\tif (!expr) return null;\n\n\tswitch (expr.type) {\n\t\tcase 'val':\n\t\t\treturn {\n\t\t\t\ttype: 'val',\n\t\t\t\tvalue: serializeValue(expr.value),\n\t\t\t};\n\t\tcase 'ref':\n\t\t\treturn {\n\t\t\t\ttype: 'ref',\n\t\t\t\tpath: [...expr.path],\n\t\t\t};\n\t\tcase 'func':\n\t\t\treturn {\n\t\t\t\ttype: 'func',\n\t\t\t\tname: expr.name,\n\t\t\t\targs: expr.args.map((arg) =>\n\t\t\t\t\tserializeExpression(arg as BasicExpression),\n\t\t\t\t),\n\t\t\t};\n\t\tdefault:\n\t\t\treturn null;\n\t}\n};\n\nexport const serializeSurrealSubsetOptions = (\n\toptions: LoadSubsetOptions | undefined,\n): string | undefined => {\n\tif (!options) return undefined;\n\n\tconst out: Record<string, unknown> = {};\n\tif (options.where) out.where = serializeExpression(options.where);\n\tif (options.orderBy?.length) {\n\t\tout.orderBy = options.orderBy.map((clause) => ({\n\t\t\texpression: serializeExpression(\n\t\t\t\tclause.expression as BasicExpression,\n\t\t\t),\n\t\t\tdirection: clause.compareOptions.direction,\n\t\t\tnulls: clause.compareOptions.nulls,\n\t\t\tstringSort: clause.compareOptions.stringSort,\n\t\t\tlocale: clause.compareOptions.locale,\n\t\t\tlocaleOptions: clause.compareOptions.localeOptions,\n\t\t}));\n\t}\n\tif (options.limit !== undefined) out.limit = options.limit;\n\tif (options.offset !== undefined) out.offset = options.offset;\n\n\treturn Object.keys(out).length ? JSON.stringify(out) : undefined;\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 { normalizeRecordIdLikeValue, toRecordId } 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\t}\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\tuseLoro: boolean,\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\t// Subset predicates should compare against concrete values.\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 (string/RecordId), not a reactive proxy/path.',\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\tif (useLoro) whereParts.push('sync_deleted = false');\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\tuseLoro: boolean,\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, useLoro, subset);\n\t\tconst [res] = await db.query<[QueryResult<T>]>(sql, params);\n\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\tif (!useLoro) {\n\t\t\tawait db.update(id).merge(rest);\n\t\t\treturn;\n\t\t}\n\t\tawait db.update(id).merge({\n\t\t\t...rest,\n\t\t\tsync_deleted: false,\n\t\t\tupdated_at: Date.now(),\n\t\t});\n\t};\n\n\tconst remove = async (id: RecordId) => {\n\t\tawait db.delete(id);\n\t};\n\n\tconst softDelete = async (id: RecordId) => {\n\t\tif (!useLoro) {\n\t\t\tawait db.delete(id);\n\t\t\treturn;\n\t\t}\n\t\tawait db.upsert(id).merge({\n\t\t\tsync_deleted: true,\n\t\t\tupdated_at: Date.now(),\n\t\t});\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\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,\n\t\tsubscribe,\n\t};\n}\n","import type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type {\n\tCollectionConfig,\n\tDeleteMutationFn,\n\tDeleteMutationFnParams,\n\tInsertMutationFn,\n\tInsertMutationFnParams,\n\tOperationConfig,\n\tStandardSchema,\n\tTransaction,\n\tUpdateMutationFn,\n\tUpdateMutationFnParams,\n\tUtilsRecord,\n} from '@tanstack/db';\nimport { queryCollectionOptions } from '@tanstack/query-db-collection';\nimport { type Container, LoroDoc } from 'loro-crdt';\nimport { Features, RecordId } from 'surrealdb';\n\nimport {\n\tnormalizeRecordIdLikeFields,\n\ttoRecordId,\n\ttoRecordIdString,\n} from './id';\nimport { serializeSurrealSubsetOptions } from './queryKey';\nimport { manageTable } from './table';\nimport type {\n\tSurrealCollectionConfig,\n\tSurrealSubset,\n\tSyncedTable,\n} from './types';\n\ntype Cleanup = () => void;\n\ntype MutationInput<T extends { id: string | RecordId }> = Omit<T, 'id'> & {\n\tid?: T['id'];\n};\n\ntype SurrealCollectionOptionsReturn<T extends { id: string | RecordId }> =\n\tCollectionConfig<\n\t\tT,\n\t\tstring,\n\t\tStandardSchemaV1<MutationInput<T>, T>,\n\t\tUtilsRecord\n\t> & {\n\t\tschema: StandardSchemaV1<MutationInput<T>, T>;\n\t\tutils: UtilsRecord;\n\t};\n\nexport { toRecordKeyString } from './id';\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\t// biome-ignore lint/suspicious/noExplicitAny: Match TanstackDB\n\t\t): Transaction<any>;\n\t}\n}\n\ntype SyncReturn =\n\t| undefined\n\t| Cleanup\n\t| {\n\t\t\tcleanup?: Cleanup;\n\t\t\tunsubscribe?: Cleanup;\n\t\t\tdispose?: Cleanup;\n\t\t\tloadSubset?: unknown; // keep unknown; Only pass through\n\t };\n\nconst TEMP_ID_PREFIX = '__temp__';\nconst NOOP: Cleanup = () => {};\n\ntype QueryWriteUtils = {\n\twriteUpsert?: (data: unknown) => void;\n\twriteDelete?: (key: string) => void;\n};\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\tif (id instanceof RecordId) {\n\t\tconst recordKey = (id as unknown as { id?: unknown }).id;\n\t\treturn (\n\t\t\ttypeof recordKey === 'string' &&\n\t\t\trecordKey.startsWith(TEMP_ID_PREFIX)\n\t\t);\n\t}\n\n\tconst raw = toRecordIdString(id);\n\tconst key = raw.startsWith(`${tableName}:`)\n\t\t? raw.slice(tableName.length + 1)\n\t\t: raw;\n\treturn key.startsWith(TEMP_ID_PREFIX);\n};\n\nfunction toCleanup(res: SyncReturn): Cleanup {\n\tif (!res) return NOOP;\n\tif (typeof res === 'function') return res;\n\n\tconst cleanup = res.cleanup ?? res.unsubscribe ?? res.dispose;\n\n\treturn typeof cleanup === 'function' ? cleanup : NOOP;\n}\n\nfunction hasLoadSubset(\n\tres: SyncReturn,\n): res is { loadSubset: unknown } & Record<string, unknown> {\n\treturn typeof res === 'object' && res !== null && 'loadSubset' in res;\n}\n\nconst getWriteUtils = (utils: unknown): QueryWriteUtils =>\n\ttypeof utils === 'object' && utils !== null\n\t\t? (utils as QueryWriteUtils)\n\t\t: {};\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\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\nexport function surrealCollectionOptions<\n\tT extends SyncedTable<object>,\n\tS extends Record<string, Container> = { [k: string]: never },\n>({\n\tid,\n\tuseLoro = false,\n\tonError,\n\tdb,\n\tqueryClient,\n\tqueryKey,\n\tsyncMode = 'eager',\n\t...config\n}: SurrealCollectionConfig): CollectionConfig<\n\tT,\n\tstring,\n\tStandardSchemaV1<MutationInput<T>, T>,\n\tUtilsRecord\n> & {\n\tschema: StandardSchemaV1<MutationInput<T>, T>;\n\tutils: UtilsRecord;\n} {\n\tlet loro: { doc: LoroDoc<S>; key?: string } | undefined;\n\tif (useLoro) loro = { doc: new LoroDoc(), key: id };\n\tconst resolvedQueryKey =\n\t\tsyncMode === 'on-demand'\n\t\t\t? (opts: SurrealSubset = {}) => {\n\t\t\t\t\tconst serialized = serializeSurrealSubsetOptions(opts);\n\t\t\t\t\treturn serialized\n\t\t\t\t\t\t? [...queryKey, serialized]\n\t\t\t\t\t\t: [...queryKey];\n\t\t\t\t}\n\t\t\t: queryKey;\n\n\tconst table = manageTable<T>(db, useLoro, config.table);\n\n\tconst keyOf = (rid: RecordId | string): string => toRecordIdString(rid);\n\n\tconst getKey = (row: { id: string | RecordId }) => keyOf(row.id);\n\tconst normalizeMutationId = (rid: RecordId | string): RecordId =>\n\t\ttoRecordId(config.table.name, rid);\n\tconst withRecordId = (row: T): T =>\n\t\t({ ...row, id: normalizeMutationId(row.id) }) as T;\n\tconst toLoroStoredRow = (row: T): T => ({ ...row, id: keyOf(row.id) }) as T;\n\n\tconst loroKey = loro?.key ?? id ?? 'surreal';\n\tconst loroMap = useLoro ? (loro?.doc?.getMap?.(loroKey) ?? null) : null;\n\tconst commitLoro = () => {\n\t\tloro?.doc?.commit?.();\n\t};\n\n\tconst loroPut = (row: T, commit = true) => {\n\t\tif (!loroMap) return;\n\t\tloroMap.set(getKey(row), toLoroStoredRow(row) as unknown);\n\t\tif (commit) commitLoro();\n\t};\n\n\tconst loroRemove = (idStr: string, commit = true) => {\n\t\tif (!loroMap) return;\n\t\tloroMap.delete(idStr);\n\t\tif (commit) commitLoro();\n\t};\n\n\tconst mergeLocalOverServer = (serverRows: T[]): T[] => {\n\t\tif (!useLoro || !loroMap) return serverRows;\n\n\t\tconst localJson = (loroMap.toJSON?.() ?? {}) as Record<string, T>;\n\n\t\tconst out: T[] = [];\n\t\tfor (const s of serverRows) {\n\t\t\tconst idStr = getKey(s);\n\t\t\tconst l = localJson[idStr];\n\n\t\t\tif (!l) {\n\t\t\t\tout.push(s);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ((l.sync_deleted ?? false) === true) continue;\n\t\t\tout.push(withRecordId(l));\n\t\t}\n\n\t\treturn out;\n\t};\n\n\tconst base = queryCollectionOptions({\n\t\tschema: createInsertSchema<T>(config.table.name),\n\t\tgetKey,\n\n\t\tqueryKey: resolvedQueryKey,\n\t\tqueryClient,\n\n\t\tsyncMode,\n\n\t\tqueryFn: async ({ meta }) => {\n\t\t\ttry {\n\t\t\t\tconst subset =\n\t\t\t\t\tsyncMode === 'on-demand'\n\t\t\t\t\t\t? meta?.loadSubsetOptions\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\tconst rows =\n\t\t\t\t\tsyncMode === 'eager'\n\t\t\t\t\t\t? await table.listAll()\n\t\t\t\t\t\t: await table.loadSubset(subset);\n\n\t\t\t\treturn mergeLocalOverServer(rows).map((row) =>\n\t\t\t\t\twithRecordId(row),\n\t\t\t\t);\n\t\t\t} catch (e) {\n\t\t\t\tonError?.(e);\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\n\t\tonInsert: (async (p: InsertMutationFnParams<T>) => {\n\t\t\tconst now = new Date();\n\n\t\t\tconst resultRows: T[] = [];\n\t\t\tlet shouldCommitLoro = false;\n\t\t\tfor (const m of p.transaction.mutations) {\n\t\t\t\tif (m.type !== 'insert') continue;\n\n\t\t\t\tconst baseRow = { ...m.modified } as T;\n\n\t\t\t\tconst row = useLoro\n\t\t\t\t\t? ({\n\t\t\t\t\t\t\t...baseRow,\n\t\t\t\t\t\t\tupdated_at: now,\n\t\t\t\t\t\t\tsync_deleted: false,\n\t\t\t\t\t\t} as T)\n\t\t\t\t\t: baseRow;\n\t\t\t\tconst normalizedRow = withRecordId(row);\n\n\t\t\t\tif (useLoro) {\n\t\t\t\t\tloroPut(normalizedRow, false);\n\t\t\t\t\tshouldCommitLoro = true;\n\t\t\t\t}\n\t\t\t\tif (isTempId(normalizedRow.id, config.table.name)) {\n\t\t\t\t\tconst tempKey = keyOf(normalizedRow.id);\n\t\t\t\t\tconst { id: _id, ...payload } = normalizedRow as Record<\n\t\t\t\t\t\tstring,\n\t\t\t\t\t\tunknown\n\t\t\t\t\t>;\n\t\t\t\t\tconst persisted = await table.create(payload as Partial<T>);\n\t\t\t\t\tconst resolvedRow = persisted?.id\n\t\t\t\t\t\t? withRecordId({\n\t\t\t\t\t\t\t\t...normalizedRow,\n\t\t\t\t\t\t\t\t...persisted,\n\t\t\t\t\t\t\t\tid: persisted.id,\n\t\t\t\t\t\t\t} as T)\n\t\t\t\t\t\t: normalizedRow;\n\n\t\t\t\t\tif (useLoro && persisted?.id) {\n\t\t\t\t\t\tloroRemove(tempKey, false);\n\t\t\t\t\t\tloroPut(resolvedRow, false);\n\t\t\t\t\t}\n\t\t\t\t\tresultRows.push(resolvedRow);\n\t\t\t\t} else {\n\t\t\t\t\tconst persisted = await table.create(normalizedRow);\n\t\t\t\t\tresultRows.push(\n\t\t\t\t\t\tpersisted\n\t\t\t\t\t\t\t? withRecordId({\n\t\t\t\t\t\t\t\t\t...normalizedRow,\n\t\t\t\t\t\t\t\t\t...persisted,\n\t\t\t\t\t\t\t\t} as T)\n\t\t\t\t\t\t\t: normalizedRow,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (shouldCommitLoro) commitLoro();\n\n\t\t\treturn resultRows as unknown as StandardSchema<T>;\n\t\t}) as InsertMutationFn<T, string, UtilsRecord, StandardSchema<T>>,\n\n\t\tonUpdate: (async (p: UpdateMutationFnParams<T>) => {\n\t\t\tconst now = new Date();\n\t\t\tconst writeUtils = getWriteUtils(p.collection.utils);\n\n\t\t\tconst resultRows: T[] = [];\n\t\t\tlet shouldCommitLoro = false;\n\t\t\tfor (const m of p.transaction.mutations) {\n\t\t\t\tif (m.type !== 'update') continue;\n\n\t\t\t\tconst idKey = m.key as RecordId;\n\t\t\t\tconst normalizedModified = omitUndefined(\n\t\t\t\t\tnormalizeRecordIdLikeFields({\n\t\t\t\t\t\t...(m.modified as Record<string, unknown>),\n\t\t\t\t\t}) as Record<string, unknown>,\n\t\t\t\t) as Partial<T>;\n\t\t\t\tconst baseRow = {\n\t\t\t\t\t...normalizedModified,\n\t\t\t\t\tid: normalizeMutationId(idKey),\n\t\t\t\t} as T;\n\n\t\t\t\tconst row = useLoro\n\t\t\t\t\t? ({ ...baseRow, updated_at: now } as T)\n\t\t\t\t\t: baseRow;\n\t\t\t\tconst normalizedRow = withRecordId(row);\n\n\t\t\t\tif (useLoro) {\n\t\t\t\t\tloroPut(normalizedRow, false);\n\t\t\t\t\tshouldCommitLoro = true;\n\t\t\t\t}\n\n\t\t\t\tawait table.update(normalizeMutationId(idKey), normalizedRow);\n\t\t\t\twriteUtils.writeUpsert?.(normalizedRow);\n\n\t\t\t\tresultRows.push(normalizedRow);\n\t\t\t}\n\t\t\tif (shouldCommitLoro) commitLoro();\n\n\t\t\tvoid resultRows;\n\t\t\treturn { refetch: false } as unknown as StandardSchema<T>;\n\t\t}) as UpdateMutationFn<T, string, UtilsRecord, StandardSchema<T>>,\n\n\t\tonDelete: (async (p: DeleteMutationFnParams<T>) => {\n\t\t\tconst writeUtils = getWriteUtils(p.collection.utils);\n\t\t\tlet shouldCommitLoro = false;\n\t\t\tfor (const m of p.transaction.mutations) {\n\t\t\t\tif (m.type !== 'delete') continue;\n\n\t\t\t\tconst idKey = m.key as RecordId;\n\t\t\t\tconst key = keyOf(idKey);\n\t\t\t\tif (useLoro) {\n\t\t\t\t\tloroRemove(key, false);\n\t\t\t\t\tshouldCommitLoro = true;\n\t\t\t\t}\n\n\t\t\t\tawait table.softDelete(normalizeMutationId(idKey));\n\t\t\t\twriteUtils.writeDelete?.(key);\n\t\t\t}\n\t\t\tif (shouldCommitLoro) commitLoro();\n\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\t// LIVE updates -> invalidate all subsets under base queryKey\n\tconst baseSync = base.sync?.sync;\n\n\tconst sync = baseSync\n\t\t? {\n\t\t\t\tsync: (ctx: Parameters<NonNullable<typeof baseSync>>[0]) => {\n\t\t\t\t\t// IMPORTANT: call baseSync exactly once\n\t\t\t\t\tconst baseRes = baseSync(ctx) as SyncReturn;\n\t\t\t\t\tconst baseCleanup = toCleanup(baseRes);\n\n\t\t\t\t\t// If live queries aren't supported, return the base result untouched\n\t\t\t\t\tif (!db.isFeatureSupported(Features.LiveQueries)) {\n\t\t\t\t\t\treturn baseRes as unknown as ReturnType<\n\t\t\t\t\t\t\tNonNullable<typeof baseSync>\n\t\t\t\t\t\t>;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst offLive = table.subscribe((evt) => {\n\t\t\t\t\t\tif (useLoro) {\n\t\t\t\t\t\t\tif (evt.type === 'delete') {\n\t\t\t\t\t\t\t\tloroRemove(getKey(evt.row));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tloroPut(evt.row);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvoid queryClient\n\t\t\t\t\t\t\t.invalidateQueries({ queryKey, exact: false })\n\t\t\t\t\t\t\t.catch((e) => onError?.(e));\n\t\t\t\t\t});\n\n\t\t\t\t\t// Preserve base return shape, just wrap cleanup\n\t\t\t\t\tif (hasLoadSubset(baseRes)) {\n\t\t\t\t\t\t// on-demand mode relies on this being present\n\t\t\t\t\t\tconst resObj = baseRes as Record<string, unknown>;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...resObj,\n\t\t\t\t\t\t\tcleanup: () => {\n\t\t\t\t\t\t\t\toffLive();\n\t\t\t\t\t\t\t\tbaseCleanup();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} as unknown as ReturnType<\n\t\t\t\t\t\t\tNonNullable<typeof baseSync>\n\t\t\t\t\t\t>;\n\t\t\t\t\t}\n\n\t\t\t\t\t// eager mode usually returns a cleanup function\n\t\t\t\t\treturn (() => {\n\t\t\t\t\t\toffLive();\n\t\t\t\t\t\tbaseCleanup();\n\t\t\t\t\t}) as unknown as ReturnType<NonNullable<typeof baseSync>>;\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"]}
|