@foretag/tanstack-db-surrealdb 0.5.4 → 0.5.5

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 CHANGED
@@ -7,6 +7,26 @@ var db = require('@tanstack/db');
7
7
 
8
8
  // src/index.ts
9
9
  var recordIdInternPool = /* @__PURE__ */ new Map();
10
+ var internRecordIdLike = (canonical, valueFactory) => {
11
+ const cached = recordIdInternPool.get(canonical);
12
+ if (cached !== void 0) return cached;
13
+ const created = valueFactory();
14
+ recordIdInternPool.set(canonical, created);
15
+ return created;
16
+ };
17
+ var canonicalToNativeRecordId = (canonical) => {
18
+ const idx = canonical.indexOf(":");
19
+ const table = canonical.slice(0, idx);
20
+ const key = canonical.slice(idx + 1);
21
+ return new surrealdb.RecordId(table, key);
22
+ };
23
+ var internNativeRecordId = (recordId) => {
24
+ const canonical = toRecordIdString(recordId);
25
+ const cached = recordIdInternPool.get(canonical);
26
+ if (cached !== void 0) return cached;
27
+ recordIdInternPool.set(canonical, recordId);
28
+ return recordId;
29
+ };
10
30
  var stripOuterQuotes = (value) => {
11
31
  const trimmed = value.trim();
12
32
  const isSingleQuoted = trimmed.startsWith("'") && trimmed.endsWith("'") && trimmed.length >= 2;
@@ -43,54 +63,80 @@ var isRecordIdString = (value) => {
43
63
  return idx > 0 && idx < value.length - 1;
44
64
  };
45
65
  var looksLikeTableName = (value) => /^[A-Za-z_][A-Za-z0-9_-]*$/.test(value);
46
- var parseRecordIdString = (value) => {
66
+ var toCanonicalRecordIdString = (value) => {
47
67
  const normalized = toRecordIdString(value);
48
68
  if (!isRecordIdString(normalized)) return void 0;
49
69
  const idx = normalized.indexOf(":");
50
70
  const table = stripOuterQuotes(normalized.slice(0, idx).trim());
51
71
  const key = normalized.slice(idx + 1).trim();
52
72
  if (!table || !key || !looksLikeTableName(table)) return void 0;
53
- const canonical = `${table}:${key}`;
54
- const cached = recordIdInternPool.get(canonical);
55
- if (cached) return cached;
56
- const created = new surrealdb.RecordId(table, key);
57
- recordIdInternPool.set(canonical, created);
58
- return created;
73
+ return `${table}:${key}`;
59
74
  };
60
- var asRecordIdFromObjectShape = (value) => {
75
+ var asCanonicalRecordIdFromObjectShape = (value) => {
61
76
  if (!value || typeof value !== "object") return void 0;
62
77
  const obj = value;
63
78
  const table = typeof obj.table === "string" ? obj.table : typeof obj.tb === "string" ? obj.tb : void 0;
64
79
  const key = typeof obj.id === "string" || typeof obj.id === "number" ? String(obj.id) : void 0;
65
80
  if (table && key && looksLikeTableName(table)) {
66
- return new surrealdb.RecordId(table, key);
81
+ return `${table}:${key}`;
67
82
  }
68
83
  return void 0;
69
84
  };
70
- var asRecordIdFromObjectString = (value) => {
85
+ var asCanonicalRecordIdFromObjectString = (value) => {
71
86
  if (!value || typeof value !== "object") return void 0;
72
87
  const obj = value;
73
88
  if (typeof obj.toString !== "function") return void 0;
74
89
  const raw = String(obj.toString());
75
90
  if (!raw || raw === "[object Object]") return void 0;
76
- return parseRecordIdString(raw);
91
+ return toCanonicalRecordIdString(raw);
92
+ };
93
+ var isForeignRecordIdObject = (value) => {
94
+ if (!value || typeof value !== "object" || value instanceof surrealdb.RecordId) {
95
+ return false;
96
+ }
97
+ const ctorName = value.constructor?.name;
98
+ return typeof ctorName === "string" && /recordid/i.test(ctorName);
99
+ };
100
+ var asCanonicalRecordIdString = (value) => {
101
+ if (typeof value === "string") {
102
+ return toCanonicalRecordIdString(value);
103
+ }
104
+ if (value instanceof surrealdb.RecordId) {
105
+ return toCanonicalRecordIdString(value.toString());
106
+ }
107
+ return asCanonicalRecordIdFromObjectShape(value) ?? asCanonicalRecordIdFromObjectString(value);
108
+ };
109
+ var toNativeRecordIdLikeValue = (value) => {
110
+ if (value instanceof surrealdb.RecordId) return value;
111
+ const canonical = asCanonicalRecordIdString(value);
112
+ if (!canonical) return value;
113
+ return canonicalToNativeRecordId(canonical);
77
114
  };
78
115
  var normalizeRecordIdLikeValue = (value) => {
79
116
  if (value instanceof surrealdb.RecordId) {
80
- const canonical = toRecordIdString(value);
81
- const cached = recordIdInternPool.get(canonical);
82
- if (cached) return cached;
83
- recordIdInternPool.set(canonical, value);
84
- return value;
117
+ return internNativeRecordId(value);
85
118
  }
86
119
  if (typeof value === "object" && value !== null) {
87
- return asRecordIdFromObjectShape(value) ?? asRecordIdFromObjectString(value) ?? value;
120
+ const canonical2 = asCanonicalRecordIdFromObjectShape(value) ?? asCanonicalRecordIdFromObjectString(value);
121
+ if (!canonical2) return value;
122
+ if (isForeignRecordIdObject(value)) {
123
+ return internRecordIdLike(canonical2, () => value);
124
+ }
125
+ return internRecordIdLike(
126
+ canonical2,
127
+ () => canonicalToNativeRecordId(canonical2)
128
+ );
88
129
  }
89
130
  if (typeof value !== "string") return value;
90
131
  const trimmed = value.trim();
91
132
  const unquoted = stripOuterQuotes(trimmed);
92
- const parsed = parseRecordIdString(unquoted) ?? (unquoted === trimmed ? void 0 : parseRecordIdString(trimmed));
93
- if (parsed) return parsed;
133
+ const canonical = toCanonicalRecordIdString(unquoted) ?? (unquoted === trimmed ? void 0 : toCanonicalRecordIdString(trimmed));
134
+ if (canonical) {
135
+ return internRecordIdLike(
136
+ canonical,
137
+ () => canonicalToNativeRecordId(canonical)
138
+ );
139
+ }
94
140
  return value;
95
141
  };
96
142
  var isPlainObject = (value) => typeof value === "object" && value !== null && Object.getPrototypeOf(value) === Object.prototype;
@@ -119,12 +165,12 @@ var normalizeRecordIdLikeFields = (data) => {
119
165
  };
120
166
  var toRecordId = (tableName, id) => {
121
167
  if (id instanceof surrealdb.RecordId) {
122
- return normalizeRecordIdLikeValue(id);
168
+ return id;
123
169
  }
124
170
  const normalized = toRecordIdString(id);
125
171
  const prefixed = `${tableName}:`;
126
172
  const key = normalized.startsWith(prefixed) ? normalized.slice(prefixed.length) : normalized;
127
- return normalizeRecordIdLikeValue(new surrealdb.RecordId(tableName, key));
173
+ return new surrealdb.RecordId(tableName, key);
128
174
  };
129
175
  var parseRecordIdLike = (value) => {
130
176
  const normalized = normalizeRecordIdLikeValue(value);
@@ -159,6 +205,13 @@ var eqRecordId = (field, value) => {
159
205
  // src/queryKey.ts
160
206
  var isRecordId = (value) => typeof value === "object" && value !== null && "toString" in value && typeof value.toString === "function" && "table" in value;
161
207
  var serializeValue = (value) => {
208
+ const canonicalRecordId = asCanonicalRecordIdString(value);
209
+ if (canonicalRecordId) {
210
+ return {
211
+ __type: "recordid",
212
+ value: canonicalRecordId
213
+ };
214
+ }
162
215
  const normalized = normalizeRecordIdLikeValue(value);
163
216
  if (isRecordId(normalized)) {
164
217
  return {
@@ -283,6 +336,8 @@ var normalizeFilterValue = (value) => {
283
336
  if (Array.isArray(value)) {
284
337
  return value.map((item) => normalizeFilterValue(item));
285
338
  }
339
+ const native = toNativeRecordIdLikeValue(value);
340
+ if (native !== value) return native;
286
341
  return normalizeRecordIdLikeValue(value);
287
342
  };
288
343
  var toSqlFragment = (value) => {
@@ -490,6 +545,23 @@ function manageTable(db, useLoro, config) {
490
545
  var TEMP_ID_PREFIX = "__temp__";
491
546
  var NOOP = () => {
492
547
  };
548
+ var normalizeExpressionLiteralsInPlace = (expr) => {
549
+ if (!expr || typeof expr !== "object") return;
550
+ const node = expr;
551
+ if (node.type === "val") {
552
+ node.value = normalizeRecordIdLikeValueDeep(node.value);
553
+ return;
554
+ }
555
+ if (node.type === "func" && Array.isArray(node.args)) {
556
+ for (const arg of node.args) normalizeExpressionLiteralsInPlace(arg);
557
+ }
558
+ };
559
+ var normalizeSubsetLiteralsInPlace = (subset) => {
560
+ if (!subset) return;
561
+ normalizeExpressionLiteralsInPlace(subset.where);
562
+ normalizeExpressionLiteralsInPlace(subset.cursor?.whereFrom);
563
+ normalizeExpressionLiteralsInPlace(subset.cursor?.whereCurrent);
564
+ };
493
565
  var createTempRecordId = (tableName) => {
494
566
  const suffix = `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
495
567
  return new surrealdb.RecordId(tableName, `${TEMP_ID_PREFIX}${suffix}`);
@@ -551,6 +623,7 @@ function surrealCollectionOptions({
551
623
  let loro;
552
624
  if (useLoro) loro = { doc: new loroCrdt.LoroDoc(), key: id };
553
625
  const resolvedQueryKey = syncMode === "on-demand" ? (opts = {}) => {
626
+ normalizeSubsetLiteralsInPlace(opts);
554
627
  const serialized = serializeSurrealSubsetOptions(opts);
555
628
  return serialized ? [...queryKey, serialized] : [...queryKey];
556
629
  } : queryKey;
@@ -606,6 +679,7 @@ function surrealCollectionOptions({
606
679
  queryFn: async ({ meta }) => {
607
680
  try {
608
681
  const subset = syncMode === "on-demand" ? meta?.loadSubsetOptions : void 0;
682
+ normalizeSubsetLiteralsInPlace(subset);
609
683
  const rows = syncMode === "eager" ? await table.listAll() : await table.loadSubset(subset);
610
684
  return mergeLocalOverServer(rows).map(
611
685
  (row) => withRecordId(row)
@@ -725,8 +799,14 @@ function surrealCollectionOptions({
725
799
  });
726
800
  if (hasLoadSubset(baseRes)) {
727
801
  const resObj = baseRes;
802
+ const rawLoadSubset = resObj.loadSubset;
803
+ const loadSubset = typeof rawLoadSubset === "function" ? (opts) => {
804
+ normalizeSubsetLiteralsInPlace(opts);
805
+ return rawLoadSubset(opts);
806
+ } : rawLoadSubset;
728
807
  return {
729
808
  ...resObj,
809
+ loadSubset,
730
810
  cleanup: () => {
731
811
  offLive();
732
812
  baseCleanup();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/id.ts","../src/operators.ts","../src/queryKey.ts","../src/table.ts","../src/index.ts"],"names":["RecordId","or","tanstackEq","parseWhereExpression","parseOrderByExpression","Table","Features","LoroDoc","queryCollectionOptions"],"mappings":"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","file":"index.js","sourcesContent":["import { RecordId } from 'surrealdb';\n\nconst recordIdInternPool = new Map<string, RecordId>();\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\tconst canonical = `${table}:${key}`;\n\tconst cached = recordIdInternPool.get(canonical);\n\tif (cached) return cached;\n\n\tconst created = new RecordId(table, key);\n\trecordIdInternPool.set(canonical, created);\n\treturn created;\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) {\n\t\tconst canonical = toRecordIdString(value);\n\t\tconst cached = recordIdInternPool.get(canonical);\n\t\tif (cached) return cached;\n\t\trecordIdInternPool.set(canonical, value);\n\t\treturn value;\n\t}\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\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' &&\n\tvalue !== null &&\n\tObject.getPrototypeOf(value) === Object.prototype;\n\nexport const normalizeRecordIdLikeValueDeep = <T>(value: T): T => {\n\tconst normalized = normalizeRecordIdLikeValue(value);\n\n\tif (Array.isArray(normalized)) {\n\t\treturn normalized.map((item) =>\n\t\t\tnormalizeRecordIdLikeValueDeep(item),\n\t\t) as T;\n\t}\n\n\tif (isPlainObject(normalized)) {\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const [k, v] of Object.entries(normalized)) {\n\t\t\tout[k] = normalizeRecordIdLikeValueDeep(v);\n\t\t}\n\t\treturn out as T;\n\t}\n\n\treturn normalized as T;\n};\n\nexport const normalizeRecordIdLikeFields = <T extends Record<string, unknown>>(\n\tdata: T,\n): T => {\n\tconst out: Record<string, unknown> = {};\n\tfor (const [k, v] of Object.entries(data)) {\n\t\tout[k] = normalizeRecordIdLikeValue(v);\n\t}\n\treturn out as T;\n};\n\nexport const toRecordId = (\n\ttableName: string,\n\tid: RecordId | string,\n): RecordId => {\n\tif (id instanceof RecordId) {\n\t\treturn normalizeRecordIdLikeValue(id) as RecordId;\n\t}\n\n\tconst normalized = toRecordIdString(id);\n\tconst prefixed = `${tableName}:`;\n\tconst key = normalized.startsWith(prefixed)\n\t\t? normalized.slice(prefixed.length)\n\t\t: normalized;\n\treturn normalizeRecordIdLikeValue(new RecordId(tableName, key)) as RecordId;\n};\n","import { type IR, or, eq as tanstackEq } from '@tanstack/db';\nimport { RecordId } from 'surrealdb';\nimport { normalizeRecordIdLikeValue, toRecordIdString } from './id';\n\ntype RecordIdLike = RecordId | string;\n\nconst parseRecordIdLike = (\n\tvalue: RecordIdLike,\n): { table: string; id: string } => {\n\tconst normalized = normalizeRecordIdLikeValue(value);\n\tif (normalized instanceof RecordId) {\n\t\treturn {\n\t\t\ttable: String(normalized.table),\n\t\t\tid: String(normalized.id),\n\t\t};\n\t}\n\n\tconst str = toRecordIdString(String(normalized));\n\tconst idx = str.indexOf(':');\n\tif (idx <= 0 || idx >= str.length - 1) {\n\t\tthrow new Error(\n\t\t\t`Expected a record id in 'table:id' format, received '${String(value)}'.`,\n\t\t);\n\t}\n\n\treturn {\n\t\ttable: str.slice(0, idx),\n\t\tid: str.slice(idx + 1),\n\t};\n};\n\nexport const eqRecordId = (\n\tfield: unknown,\n\tvalue: RecordIdLike,\n): IR.BasicExpression<boolean> => {\n\tconst parsed = parseRecordIdLike(value);\n\t// biome-ignore lint/suspicious/noExplicitAny: TanStack query refs are proxy-typed at call sites.\n\tconst fieldRef = field as any;\n\tconst canonical = `${parsed.table}:${parsed.id}`;\n\treturn or(\n\t\ttanstackEq(fieldRef, canonical),\n\t\ttanstackEq(fieldRef.id, parsed.id),\n\t);\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\tnormalizeRecordIdLikeValueDeep,\n\ttoRecordId,\n\ttoRecordIdString,\n} from './id';\nimport { eqRecordId } from './operators';\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';\nexport { eqRecordId };\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\tconst normalized = normalizeRecordIdLikeValueDeep(row) as T;\n\t\treturn {\n\t\t\t...normalized,\n\t\t\tid: normalizeMutationId(normalized.id),\n\t\t} as T;\n\t};\n\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"]}
1
+ {"version":3,"sources":["../src/id.ts","../src/operators.ts","../src/queryKey.ts","../src/table.ts","../src/index.ts"],"names":["RecordId","canonical","or","tanstackEq","parseWhereExpression","parseOrderByExpression","Table","Features","LoroDoc","queryCollectionOptions"],"mappings":"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","file":"index.js","sourcesContent":["import { RecordId } from 'surrealdb';\n\nconst recordIdInternPool = new Map<string, unknown>();\n\nconst internRecordIdLike = (\n\tcanonical: string,\n\tvalueFactory: () => unknown,\n): unknown => {\n\tconst cached = recordIdInternPool.get(canonical);\n\tif (cached !== undefined) return cached;\n\tconst created = valueFactory();\n\trecordIdInternPool.set(canonical, created);\n\treturn created;\n};\n\nconst canonicalToNativeRecordId = (canonical: string): RecordId => {\n\tconst idx = canonical.indexOf(':');\n\tconst table = canonical.slice(0, idx);\n\tconst key = canonical.slice(idx + 1);\n\treturn new RecordId(table, key);\n};\n\nconst internNativeRecordId = (recordId: RecordId): unknown => {\n\tconst canonical = toRecordIdString(recordId);\n\tconst cached = recordIdInternPool.get(canonical);\n\tif (cached !== undefined) return cached;\n\trecordIdInternPool.set(canonical, recordId);\n\treturn recordId;\n};\n\nexport const stripOuterQuotes = (value: string): string => {\n\tconst trimmed = value.trim();\n\tconst isSingleQuoted =\n\t\ttrimmed.startsWith(\"'\") && trimmed.endsWith(\"'\") && trimmed.length >= 2;\n\tconst isDoubleQuoted =\n\t\ttrimmed.startsWith('\"') && trimmed.endsWith('\"') && trimmed.length >= 2;\n\tconst isBacktickQuoted =\n\t\ttrimmed.startsWith('`') && trimmed.endsWith('`') && trimmed.length >= 2;\n\treturn isSingleQuoted || isDoubleQuoted || isBacktickQuoted\n\t\t? trimmed.slice(1, -1)\n\t\t: trimmed;\n};\n\nexport const toRecordIdString = (rid: RecordId | string): string => {\n\tconst raw =\n\t\ttypeof rid === 'string' ? stripOuterQuotes(rid) : rid.toString();\n\tconst trimmed = stripOuterQuotes(raw).trim();\n\tconst idx = trimmed.indexOf(':');\n\tif (idx <= 0 || idx >= trimmed.length - 1) return trimmed;\n\n\tconst table = trimmed.slice(0, idx).trim();\n\tconst key = stripOuterQuotes(\n\t\tstripAngleBrackets(stripOuterQuotes(trimmed.slice(idx + 1).trim())),\n\t);\n\tif (!table || !key) return trimmed;\n\treturn `${table}:${key}`;\n};\n\nconst stripAngleBrackets = (value: string): string => {\n\tconst trimmed = value.trim();\n\tconst isSurrealAngles =\n\t\ttrimmed.startsWith('⟨') && trimmed.endsWith('⟩') && trimmed.length >= 2;\n\tconst isAsciiAngles =\n\t\ttrimmed.startsWith('<') && trimmed.endsWith('>') && trimmed.length >= 2;\n\treturn isSurrealAngles || isAsciiAngles\n\t\t? trimmed.slice(1, -1).trim()\n\t\t: trimmed;\n};\n\nexport const toRecordKeyString = (rid: RecordId | string): string => {\n\tconst normalized = toRecordIdString(rid);\n\tconst idx = normalized.indexOf(':');\n\tconst rawKey = idx > 0 ? normalized.slice(idx + 1) : normalized;\n\treturn stripOuterQuotes(rawKey.trim());\n};\n\nconst isRecordIdString = (value: string): boolean => {\n\tconst idx = value.indexOf(':');\n\treturn idx > 0 && idx < value.length - 1;\n};\n\nconst looksLikeTableName = (value: string): boolean =>\n\t/^[A-Za-z_][A-Za-z0-9_-]*$/.test(value);\n\nconst toCanonicalRecordIdString = (value: string): string | undefined => {\n\tconst normalized = toRecordIdString(value);\n\tif (!isRecordIdString(normalized)) return undefined;\n\n\tconst idx = normalized.indexOf(':');\n\tconst table = stripOuterQuotes(normalized.slice(0, idx).trim());\n\tconst key = normalized.slice(idx + 1).trim();\n\tif (!table || !key || !looksLikeTableName(table)) return undefined;\n\treturn `${table}:${key}`;\n};\n\nconst asCanonicalRecordIdFromObjectShape = (\n\tvalue: unknown,\n): string | 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 `${table}:${key}`;\n\t}\n\n\treturn undefined;\n};\n\nconst asCanonicalRecordIdFromObjectString = (\n\tvalue: unknown,\n): string | 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 toCanonicalRecordIdString(raw);\n};\n\nconst isForeignRecordIdObject = (value: unknown): boolean => {\n\tif (!value || typeof value !== 'object' || value instanceof RecordId) {\n\t\treturn false;\n\t}\n\tconst ctorName = (value as { constructor?: { name?: unknown } }).constructor\n\t\t?.name;\n\treturn typeof ctorName === 'string' && /recordid/i.test(ctorName);\n};\n\nexport const asCanonicalRecordIdString = (\n\tvalue: unknown,\n): string | undefined => {\n\tif (typeof value === 'string') {\n\t\treturn toCanonicalRecordIdString(value);\n\t}\n\tif (value instanceof RecordId) {\n\t\treturn toCanonicalRecordIdString(value.toString());\n\t}\n\treturn (\n\t\tasCanonicalRecordIdFromObjectShape(value) ??\n\t\tasCanonicalRecordIdFromObjectString(value)\n\t);\n};\n\nexport const toNativeRecordIdLikeValue = (value: unknown): unknown => {\n\tif (value instanceof RecordId) return value;\n\tconst canonical = asCanonicalRecordIdString(value);\n\tif (!canonical) return value;\n\treturn canonicalToNativeRecordId(canonical);\n};\n\nexport const normalizeRecordIdLikeValue = (value: unknown): unknown => {\n\tif (value instanceof RecordId) {\n\t\treturn internNativeRecordId(value);\n\t}\n\tif (typeof value === 'object' && value !== null) {\n\t\tconst canonical =\n\t\t\tasCanonicalRecordIdFromObjectShape(value) ??\n\t\t\tasCanonicalRecordIdFromObjectString(value);\n\t\tif (!canonical) return value;\n\n\t\tif (isForeignRecordIdObject(value)) {\n\t\t\treturn internRecordIdLike(canonical, () => value);\n\t\t}\n\n\t\treturn internRecordIdLike(canonical, () =>\n\t\t\tcanonicalToNativeRecordId(canonical),\n\t\t);\n\t}\n\tif (typeof value !== 'string') return value;\n\n\tconst trimmed = value.trim();\n\tconst unquoted = stripOuterQuotes(trimmed);\n\tconst canonical =\n\t\ttoCanonicalRecordIdString(unquoted) ??\n\t\t(unquoted === trimmed ? undefined : toCanonicalRecordIdString(trimmed));\n\tif (canonical) {\n\t\treturn internRecordIdLike(canonical, () =>\n\t\t\tcanonicalToNativeRecordId(canonical),\n\t\t);\n\t}\n\n\t// Keep original value shape if it isn't record-id-like\n\treturn value;\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' &&\n\tvalue !== null &&\n\tObject.getPrototypeOf(value) === Object.prototype;\n\nexport const normalizeRecordIdLikeValueDeep = <T>(value: T): T => {\n\tconst normalized = normalizeRecordIdLikeValue(value);\n\n\tif (Array.isArray(normalized)) {\n\t\treturn normalized.map((item) =>\n\t\t\tnormalizeRecordIdLikeValueDeep(item),\n\t\t) as T;\n\t}\n\n\tif (isPlainObject(normalized)) {\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const [k, v] of Object.entries(normalized)) {\n\t\t\tout[k] = normalizeRecordIdLikeValueDeep(v);\n\t\t}\n\t\treturn out as T;\n\t}\n\n\treturn normalized as T;\n};\n\nexport const normalizeRecordIdLikeFields = <T extends Record<string, unknown>>(\n\tdata: T,\n): T => {\n\tconst out: Record<string, unknown> = {};\n\tfor (const [k, v] of Object.entries(data)) {\n\t\tout[k] = normalizeRecordIdLikeValue(v);\n\t}\n\treturn out as T;\n};\n\nexport const toRecordId = (\n\ttableName: string,\n\tid: RecordId | string,\n): RecordId => {\n\tif (id instanceof RecordId) {\n\t\treturn id;\n\t}\n\n\tconst normalized = toRecordIdString(id);\n\tconst prefixed = `${tableName}:`;\n\tconst key = normalized.startsWith(prefixed)\n\t\t? normalized.slice(prefixed.length)\n\t\t: normalized;\n\treturn new RecordId(tableName, key);\n};\n","import { type IR, or, eq as tanstackEq } from '@tanstack/db';\nimport { RecordId } from 'surrealdb';\nimport { normalizeRecordIdLikeValue, toRecordIdString } from './id';\n\ntype RecordIdLike = RecordId | string;\n\nconst parseRecordIdLike = (\n\tvalue: RecordIdLike,\n): { table: string; id: string } => {\n\tconst normalized = normalizeRecordIdLikeValue(value);\n\tif (normalized instanceof RecordId) {\n\t\treturn {\n\t\t\ttable: String(normalized.table),\n\t\t\tid: String(normalized.id),\n\t\t};\n\t}\n\n\tconst str = toRecordIdString(String(normalized));\n\tconst idx = str.indexOf(':');\n\tif (idx <= 0 || idx >= str.length - 1) {\n\t\tthrow new Error(\n\t\t\t`Expected a record id in 'table:id' format, received '${String(value)}'.`,\n\t\t);\n\t}\n\n\treturn {\n\t\ttable: str.slice(0, idx),\n\t\tid: str.slice(idx + 1),\n\t};\n};\n\nexport const eqRecordId = (\n\tfield: unknown,\n\tvalue: RecordIdLike,\n): IR.BasicExpression<boolean> => {\n\tconst parsed = parseRecordIdLike(value);\n\t// biome-ignore lint/suspicious/noExplicitAny: TanStack query refs are proxy-typed at call sites.\n\tconst fieldRef = field as any;\n\tconst canonical = `${parsed.table}:${parsed.id}`;\n\treturn or(\n\t\ttanstackEq(fieldRef, canonical),\n\t\ttanstackEq(fieldRef.id, parsed.id),\n\t);\n};\n","import type { LoadSubsetOptions } from '@tanstack/db';\nimport type { RecordId } from 'surrealdb';\nimport {\n\tasCanonicalRecordIdString,\n\tnormalizeRecordIdLikeValue,\n\ttoRecordIdString,\n} 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 canonicalRecordId = asCanonicalRecordIdString(value);\n\tif (canonicalRecordId) {\n\t\treturn {\n\t\t\t__type: 'recordid',\n\t\t\tvalue: canonicalRecordId,\n\t\t};\n\t}\n\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 {\n\tnormalizeRecordIdLikeValue,\n\ttoNativeRecordIdLikeValue,\n\ttoRecordId,\n} from './id';\nimport type { SurrealSubset, TableOptions } from './types';\n\ntype QueryResult<T> = T[] | null;\ntype RowResult<T> = T | T[] | null;\ntype FieldPath = Array<string | number>;\ntype SqlFragment = { sql: string };\n\nconst IDENTIFIER_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\nconst firstRow = <T>(res: RowResult<T>): T | undefined => {\n\tif (!res) return undefined;\n\tif (Array.isArray(res)) return res[0];\n\treturn res;\n};\n\nconst toFieldPath = (value: unknown): FieldPath => {\n\tif (!Array.isArray(value)) {\n\t\tthrow new Error('Expected a field path array in where expression.');\n\t}\n\treturn value as FieldPath;\n};\n\nconst quoteIdentifier = (segment: string): string => {\n\tif (IDENTIFIER_RE.test(segment)) return segment;\n\treturn `\\`${segment.replaceAll('`', '\\\\`')}\\``;\n};\n\nconst formatFieldPath = (path: FieldPath): string => {\n\tlet out = '';\n\tfor (const segment of path) {\n\t\tif (typeof segment === 'number') {\n\t\t\tout += `[${segment}]`;\n\t\t\tcontinue;\n\t\t}\n\t\tconst next = quoteIdentifier(segment);\n\t\tout = out ? `${out}.${next}` : next;\n\t}\n\treturn out;\n};\n\nconst isReferencePathCandidate = (value: unknown): value is FieldPath =>\n\tArray.isArray(value) &&\n\tvalue.length > 0 &&\n\ttypeof value[0] === 'string' &&\n\tvalue.every(\n\t\t(segment) => typeof segment === 'string' || typeof segment === 'number',\n\t);\n\nconst mapRelationPath = (path: FieldPath, relation?: boolean): FieldPath => {\n\tif (!relation) return path;\n\tif (path[0] === 'from') return ['in', ...path.slice(1)];\n\tif (path[0] === 'to') return ['out', ...path.slice(1)];\n\treturn path;\n};\n\nconst normalizeFilterValue = (value: unknown): unknown => {\n\tif (Array.isArray(value)) {\n\t\treturn value.map((item) => normalizeFilterValue(item));\n\t}\n\tconst native = toNativeRecordIdLikeValue(value);\n\tif (native !== value) return native;\n\treturn normalizeRecordIdLikeValue(value);\n};\n\nconst toSqlFragment = (value: unknown): SqlFragment => {\n\tif (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\t'sql' in value &&\n\t\ttypeof (value as { sql: unknown }).sql === 'string'\n\t) {\n\t\treturn value as SqlFragment;\n\t}\n\tthrow new Error('Unsupported where expression node.');\n};\n\nconst joinLogical = (op: 'AND' | 'OR', args: Array<unknown>): SqlFragment => {\n\tconst parts = args.map(toSqlFragment).map((frag) => frag.sql);\n\tif (parts.length === 0) {\n\t\treturn { sql: op === 'AND' ? 'true' : 'false' };\n\t}\n\tif (parts.length === 1) return { sql: parts[0] };\n\treturn {\n\t\tsql: parts.map((part) => `(${part})`).join(` ${op} `),\n\t};\n};\n\nconst buildSubsetQuery = (\n\ttable: TableOptions,\n\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\tnormalizeRecordIdLikeValueDeep,\n\ttoRecordId,\n\ttoRecordIdString,\n} from './id';\nimport { eqRecordId } from './operators';\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';\nexport { eqRecordId };\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 normalizeExpressionLiteralsInPlace = (expr: unknown): void => {\n\tif (!expr || typeof expr !== 'object') return;\n\tconst node = expr as {\n\t\ttype?: string;\n\t\tvalue?: unknown;\n\t\targs?: unknown[];\n\t};\n\tif (node.type === 'val') {\n\t\tnode.value = normalizeRecordIdLikeValueDeep(node.value);\n\t\treturn;\n\t}\n\tif (node.type === 'func' && Array.isArray(node.args)) {\n\t\tfor (const arg of node.args) normalizeExpressionLiteralsInPlace(arg);\n\t}\n};\n\nconst normalizeSubsetLiteralsInPlace = (subset: SurrealSubset | undefined) => {\n\tif (!subset) return;\n\tnormalizeExpressionLiteralsInPlace(subset.where);\n\tnormalizeExpressionLiteralsInPlace(subset.cursor?.whereFrom);\n\tnormalizeExpressionLiteralsInPlace(subset.cursor?.whereCurrent);\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\tnormalizeSubsetLiteralsInPlace(opts);\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\tconst normalized = normalizeRecordIdLikeValueDeep(row) as T;\n\t\treturn {\n\t\t\t...normalized,\n\t\t\tid: normalizeMutationId(normalized.id),\n\t\t} as T;\n\t};\n\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\t\t\t\tnormalizeSubsetLiteralsInPlace(subset);\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\tconst rawLoadSubset = resObj.loadSubset;\n\t\t\t\t\t\tconst loadSubset =\n\t\t\t\t\t\t\ttypeof rawLoadSubset === 'function'\n\t\t\t\t\t\t\t\t? (opts?: SurrealSubset) => {\n\t\t\t\t\t\t\t\t\t\tnormalizeSubsetLiteralsInPlace(opts);\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\trawLoadSubset as (\n\t\t\t\t\t\t\t\t\t\t\t\tsubset?: SurrealSubset,\n\t\t\t\t\t\t\t\t\t\t\t) => unknown\n\t\t\t\t\t\t\t\t\t\t)(opts);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: rawLoadSubset;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...resObj,\n\t\t\t\t\t\t\tloadSubset,\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
@@ -5,6 +5,26 @@ import { or, eq, parseOrderByExpression, parseWhereExpression } from '@tanstack/
5
5
 
6
6
  // src/index.ts
7
7
  var recordIdInternPool = /* @__PURE__ */ new Map();
8
+ var internRecordIdLike = (canonical, valueFactory) => {
9
+ const cached = recordIdInternPool.get(canonical);
10
+ if (cached !== void 0) return cached;
11
+ const created = valueFactory();
12
+ recordIdInternPool.set(canonical, created);
13
+ return created;
14
+ };
15
+ var canonicalToNativeRecordId = (canonical) => {
16
+ const idx = canonical.indexOf(":");
17
+ const table = canonical.slice(0, idx);
18
+ const key = canonical.slice(idx + 1);
19
+ return new RecordId(table, key);
20
+ };
21
+ var internNativeRecordId = (recordId) => {
22
+ const canonical = toRecordIdString(recordId);
23
+ const cached = recordIdInternPool.get(canonical);
24
+ if (cached !== void 0) return cached;
25
+ recordIdInternPool.set(canonical, recordId);
26
+ return recordId;
27
+ };
8
28
  var stripOuterQuotes = (value) => {
9
29
  const trimmed = value.trim();
10
30
  const isSingleQuoted = trimmed.startsWith("'") && trimmed.endsWith("'") && trimmed.length >= 2;
@@ -41,54 +61,80 @@ var isRecordIdString = (value) => {
41
61
  return idx > 0 && idx < value.length - 1;
42
62
  };
43
63
  var looksLikeTableName = (value) => /^[A-Za-z_][A-Za-z0-9_-]*$/.test(value);
44
- var parseRecordIdString = (value) => {
64
+ var toCanonicalRecordIdString = (value) => {
45
65
  const normalized = toRecordIdString(value);
46
66
  if (!isRecordIdString(normalized)) return void 0;
47
67
  const idx = normalized.indexOf(":");
48
68
  const table = stripOuterQuotes(normalized.slice(0, idx).trim());
49
69
  const key = normalized.slice(idx + 1).trim();
50
70
  if (!table || !key || !looksLikeTableName(table)) return void 0;
51
- const canonical = `${table}:${key}`;
52
- const cached = recordIdInternPool.get(canonical);
53
- if (cached) return cached;
54
- const created = new RecordId(table, key);
55
- recordIdInternPool.set(canonical, created);
56
- return created;
71
+ return `${table}:${key}`;
57
72
  };
58
- var asRecordIdFromObjectShape = (value) => {
73
+ var asCanonicalRecordIdFromObjectShape = (value) => {
59
74
  if (!value || typeof value !== "object") return void 0;
60
75
  const obj = value;
61
76
  const table = typeof obj.table === "string" ? obj.table : typeof obj.tb === "string" ? obj.tb : void 0;
62
77
  const key = typeof obj.id === "string" || typeof obj.id === "number" ? String(obj.id) : void 0;
63
78
  if (table && key && looksLikeTableName(table)) {
64
- return new RecordId(table, key);
79
+ return `${table}:${key}`;
65
80
  }
66
81
  return void 0;
67
82
  };
68
- var asRecordIdFromObjectString = (value) => {
83
+ var asCanonicalRecordIdFromObjectString = (value) => {
69
84
  if (!value || typeof value !== "object") return void 0;
70
85
  const obj = value;
71
86
  if (typeof obj.toString !== "function") return void 0;
72
87
  const raw = String(obj.toString());
73
88
  if (!raw || raw === "[object Object]") return void 0;
74
- return parseRecordIdString(raw);
89
+ return toCanonicalRecordIdString(raw);
90
+ };
91
+ var isForeignRecordIdObject = (value) => {
92
+ if (!value || typeof value !== "object" || value instanceof RecordId) {
93
+ return false;
94
+ }
95
+ const ctorName = value.constructor?.name;
96
+ return typeof ctorName === "string" && /recordid/i.test(ctorName);
97
+ };
98
+ var asCanonicalRecordIdString = (value) => {
99
+ if (typeof value === "string") {
100
+ return toCanonicalRecordIdString(value);
101
+ }
102
+ if (value instanceof RecordId) {
103
+ return toCanonicalRecordIdString(value.toString());
104
+ }
105
+ return asCanonicalRecordIdFromObjectShape(value) ?? asCanonicalRecordIdFromObjectString(value);
106
+ };
107
+ var toNativeRecordIdLikeValue = (value) => {
108
+ if (value instanceof RecordId) return value;
109
+ const canonical = asCanonicalRecordIdString(value);
110
+ if (!canonical) return value;
111
+ return canonicalToNativeRecordId(canonical);
75
112
  };
76
113
  var normalizeRecordIdLikeValue = (value) => {
77
114
  if (value instanceof RecordId) {
78
- const canonical = toRecordIdString(value);
79
- const cached = recordIdInternPool.get(canonical);
80
- if (cached) return cached;
81
- recordIdInternPool.set(canonical, value);
82
- return value;
115
+ return internNativeRecordId(value);
83
116
  }
84
117
  if (typeof value === "object" && value !== null) {
85
- return asRecordIdFromObjectShape(value) ?? asRecordIdFromObjectString(value) ?? value;
118
+ const canonical2 = asCanonicalRecordIdFromObjectShape(value) ?? asCanonicalRecordIdFromObjectString(value);
119
+ if (!canonical2) return value;
120
+ if (isForeignRecordIdObject(value)) {
121
+ return internRecordIdLike(canonical2, () => value);
122
+ }
123
+ return internRecordIdLike(
124
+ canonical2,
125
+ () => canonicalToNativeRecordId(canonical2)
126
+ );
86
127
  }
87
128
  if (typeof value !== "string") return value;
88
129
  const trimmed = value.trim();
89
130
  const unquoted = stripOuterQuotes(trimmed);
90
- const parsed = parseRecordIdString(unquoted) ?? (unquoted === trimmed ? void 0 : parseRecordIdString(trimmed));
91
- if (parsed) return parsed;
131
+ const canonical = toCanonicalRecordIdString(unquoted) ?? (unquoted === trimmed ? void 0 : toCanonicalRecordIdString(trimmed));
132
+ if (canonical) {
133
+ return internRecordIdLike(
134
+ canonical,
135
+ () => canonicalToNativeRecordId(canonical)
136
+ );
137
+ }
92
138
  return value;
93
139
  };
94
140
  var isPlainObject = (value) => typeof value === "object" && value !== null && Object.getPrototypeOf(value) === Object.prototype;
@@ -117,12 +163,12 @@ var normalizeRecordIdLikeFields = (data) => {
117
163
  };
118
164
  var toRecordId = (tableName, id) => {
119
165
  if (id instanceof RecordId) {
120
- return normalizeRecordIdLikeValue(id);
166
+ return id;
121
167
  }
122
168
  const normalized = toRecordIdString(id);
123
169
  const prefixed = `${tableName}:`;
124
170
  const key = normalized.startsWith(prefixed) ? normalized.slice(prefixed.length) : normalized;
125
- return normalizeRecordIdLikeValue(new RecordId(tableName, key));
171
+ return new RecordId(tableName, key);
126
172
  };
127
173
  var parseRecordIdLike = (value) => {
128
174
  const normalized = normalizeRecordIdLikeValue(value);
@@ -157,6 +203,13 @@ var eqRecordId = (field, value) => {
157
203
  // src/queryKey.ts
158
204
  var isRecordId = (value) => typeof value === "object" && value !== null && "toString" in value && typeof value.toString === "function" && "table" in value;
159
205
  var serializeValue = (value) => {
206
+ const canonicalRecordId = asCanonicalRecordIdString(value);
207
+ if (canonicalRecordId) {
208
+ return {
209
+ __type: "recordid",
210
+ value: canonicalRecordId
211
+ };
212
+ }
160
213
  const normalized = normalizeRecordIdLikeValue(value);
161
214
  if (isRecordId(normalized)) {
162
215
  return {
@@ -281,6 +334,8 @@ var normalizeFilterValue = (value) => {
281
334
  if (Array.isArray(value)) {
282
335
  return value.map((item) => normalizeFilterValue(item));
283
336
  }
337
+ const native = toNativeRecordIdLikeValue(value);
338
+ if (native !== value) return native;
284
339
  return normalizeRecordIdLikeValue(value);
285
340
  };
286
341
  var toSqlFragment = (value) => {
@@ -488,6 +543,23 @@ function manageTable(db, useLoro, config) {
488
543
  var TEMP_ID_PREFIX = "__temp__";
489
544
  var NOOP = () => {
490
545
  };
546
+ var normalizeExpressionLiteralsInPlace = (expr) => {
547
+ if (!expr || typeof expr !== "object") return;
548
+ const node = expr;
549
+ if (node.type === "val") {
550
+ node.value = normalizeRecordIdLikeValueDeep(node.value);
551
+ return;
552
+ }
553
+ if (node.type === "func" && Array.isArray(node.args)) {
554
+ for (const arg of node.args) normalizeExpressionLiteralsInPlace(arg);
555
+ }
556
+ };
557
+ var normalizeSubsetLiteralsInPlace = (subset) => {
558
+ if (!subset) return;
559
+ normalizeExpressionLiteralsInPlace(subset.where);
560
+ normalizeExpressionLiteralsInPlace(subset.cursor?.whereFrom);
561
+ normalizeExpressionLiteralsInPlace(subset.cursor?.whereCurrent);
562
+ };
491
563
  var createTempRecordId = (tableName) => {
492
564
  const suffix = `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
493
565
  return new RecordId(tableName, `${TEMP_ID_PREFIX}${suffix}`);
@@ -549,6 +621,7 @@ function surrealCollectionOptions({
549
621
  let loro;
550
622
  if (useLoro) loro = { doc: new LoroDoc(), key: id };
551
623
  const resolvedQueryKey = syncMode === "on-demand" ? (opts = {}) => {
624
+ normalizeSubsetLiteralsInPlace(opts);
552
625
  const serialized = serializeSurrealSubsetOptions(opts);
553
626
  return serialized ? [...queryKey, serialized] : [...queryKey];
554
627
  } : queryKey;
@@ -604,6 +677,7 @@ function surrealCollectionOptions({
604
677
  queryFn: async ({ meta }) => {
605
678
  try {
606
679
  const subset = syncMode === "on-demand" ? meta?.loadSubsetOptions : void 0;
680
+ normalizeSubsetLiteralsInPlace(subset);
607
681
  const rows = syncMode === "eager" ? await table.listAll() : await table.loadSubset(subset);
608
682
  return mergeLocalOverServer(rows).map(
609
683
  (row) => withRecordId(row)
@@ -723,8 +797,14 @@ function surrealCollectionOptions({
723
797
  });
724
798
  if (hasLoadSubset(baseRes)) {
725
799
  const resObj = baseRes;
800
+ const rawLoadSubset = resObj.loadSubset;
801
+ const loadSubset = typeof rawLoadSubset === "function" ? (opts) => {
802
+ normalizeSubsetLiteralsInPlace(opts);
803
+ return rawLoadSubset(opts);
804
+ } : rawLoadSubset;
726
805
  return {
727
806
  ...resObj,
807
+ loadSubset,
728
808
  cleanup: () => {
729
809
  offLive();
730
810
  baseCleanup();
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/id.ts","../src/operators.ts","../src/queryKey.ts","../src/table.ts","../src/index.ts"],"names":["RecordId","tanstackEq","Features"],"mappings":"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","file":"index.mjs","sourcesContent":["import { RecordId } from 'surrealdb';\n\nconst recordIdInternPool = new Map<string, RecordId>();\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\tconst canonical = `${table}:${key}`;\n\tconst cached = recordIdInternPool.get(canonical);\n\tif (cached) return cached;\n\n\tconst created = new RecordId(table, key);\n\trecordIdInternPool.set(canonical, created);\n\treturn created;\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) {\n\t\tconst canonical = toRecordIdString(value);\n\t\tconst cached = recordIdInternPool.get(canonical);\n\t\tif (cached) return cached;\n\t\trecordIdInternPool.set(canonical, value);\n\t\treturn value;\n\t}\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\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' &&\n\tvalue !== null &&\n\tObject.getPrototypeOf(value) === Object.prototype;\n\nexport const normalizeRecordIdLikeValueDeep = <T>(value: T): T => {\n\tconst normalized = normalizeRecordIdLikeValue(value);\n\n\tif (Array.isArray(normalized)) {\n\t\treturn normalized.map((item) =>\n\t\t\tnormalizeRecordIdLikeValueDeep(item),\n\t\t) as T;\n\t}\n\n\tif (isPlainObject(normalized)) {\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const [k, v] of Object.entries(normalized)) {\n\t\t\tout[k] = normalizeRecordIdLikeValueDeep(v);\n\t\t}\n\t\treturn out as T;\n\t}\n\n\treturn normalized as T;\n};\n\nexport const normalizeRecordIdLikeFields = <T extends Record<string, unknown>>(\n\tdata: T,\n): T => {\n\tconst out: Record<string, unknown> = {};\n\tfor (const [k, v] of Object.entries(data)) {\n\t\tout[k] = normalizeRecordIdLikeValue(v);\n\t}\n\treturn out as T;\n};\n\nexport const toRecordId = (\n\ttableName: string,\n\tid: RecordId | string,\n): RecordId => {\n\tif (id instanceof RecordId) {\n\t\treturn normalizeRecordIdLikeValue(id) as RecordId;\n\t}\n\n\tconst normalized = toRecordIdString(id);\n\tconst prefixed = `${tableName}:`;\n\tconst key = normalized.startsWith(prefixed)\n\t\t? normalized.slice(prefixed.length)\n\t\t: normalized;\n\treturn normalizeRecordIdLikeValue(new RecordId(tableName, key)) as RecordId;\n};\n","import { type IR, or, eq as tanstackEq } from '@tanstack/db';\nimport { RecordId } from 'surrealdb';\nimport { normalizeRecordIdLikeValue, toRecordIdString } from './id';\n\ntype RecordIdLike = RecordId | string;\n\nconst parseRecordIdLike = (\n\tvalue: RecordIdLike,\n): { table: string; id: string } => {\n\tconst normalized = normalizeRecordIdLikeValue(value);\n\tif (normalized instanceof RecordId) {\n\t\treturn {\n\t\t\ttable: String(normalized.table),\n\t\t\tid: String(normalized.id),\n\t\t};\n\t}\n\n\tconst str = toRecordIdString(String(normalized));\n\tconst idx = str.indexOf(':');\n\tif (idx <= 0 || idx >= str.length - 1) {\n\t\tthrow new Error(\n\t\t\t`Expected a record id in 'table:id' format, received '${String(value)}'.`,\n\t\t);\n\t}\n\n\treturn {\n\t\ttable: str.slice(0, idx),\n\t\tid: str.slice(idx + 1),\n\t};\n};\n\nexport const eqRecordId = (\n\tfield: unknown,\n\tvalue: RecordIdLike,\n): IR.BasicExpression<boolean> => {\n\tconst parsed = parseRecordIdLike(value);\n\t// biome-ignore lint/suspicious/noExplicitAny: TanStack query refs are proxy-typed at call sites.\n\tconst fieldRef = field as any;\n\tconst canonical = `${parsed.table}:${parsed.id}`;\n\treturn or(\n\t\ttanstackEq(fieldRef, canonical),\n\t\ttanstackEq(fieldRef.id, parsed.id),\n\t);\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\tnormalizeRecordIdLikeValueDeep,\n\ttoRecordId,\n\ttoRecordIdString,\n} from './id';\nimport { eqRecordId } from './operators';\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';\nexport { eqRecordId };\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\tconst normalized = normalizeRecordIdLikeValueDeep(row) as T;\n\t\treturn {\n\t\t\t...normalized,\n\t\t\tid: normalizeMutationId(normalized.id),\n\t\t} as T;\n\t};\n\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"]}
1
+ {"version":3,"sources":["../src/id.ts","../src/operators.ts","../src/queryKey.ts","../src/table.ts","../src/index.ts"],"names":["canonical","RecordId","tanstackEq","Features"],"mappings":"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","file":"index.mjs","sourcesContent":["import { RecordId } from 'surrealdb';\n\nconst recordIdInternPool = new Map<string, unknown>();\n\nconst internRecordIdLike = (\n\tcanonical: string,\n\tvalueFactory: () => unknown,\n): unknown => {\n\tconst cached = recordIdInternPool.get(canonical);\n\tif (cached !== undefined) return cached;\n\tconst created = valueFactory();\n\trecordIdInternPool.set(canonical, created);\n\treturn created;\n};\n\nconst canonicalToNativeRecordId = (canonical: string): RecordId => {\n\tconst idx = canonical.indexOf(':');\n\tconst table = canonical.slice(0, idx);\n\tconst key = canonical.slice(idx + 1);\n\treturn new RecordId(table, key);\n};\n\nconst internNativeRecordId = (recordId: RecordId): unknown => {\n\tconst canonical = toRecordIdString(recordId);\n\tconst cached = recordIdInternPool.get(canonical);\n\tif (cached !== undefined) return cached;\n\trecordIdInternPool.set(canonical, recordId);\n\treturn recordId;\n};\n\nexport const stripOuterQuotes = (value: string): string => {\n\tconst trimmed = value.trim();\n\tconst isSingleQuoted =\n\t\ttrimmed.startsWith(\"'\") && trimmed.endsWith(\"'\") && trimmed.length >= 2;\n\tconst isDoubleQuoted =\n\t\ttrimmed.startsWith('\"') && trimmed.endsWith('\"') && trimmed.length >= 2;\n\tconst isBacktickQuoted =\n\t\ttrimmed.startsWith('`') && trimmed.endsWith('`') && trimmed.length >= 2;\n\treturn isSingleQuoted || isDoubleQuoted || isBacktickQuoted\n\t\t? trimmed.slice(1, -1)\n\t\t: trimmed;\n};\n\nexport const toRecordIdString = (rid: RecordId | string): string => {\n\tconst raw =\n\t\ttypeof rid === 'string' ? stripOuterQuotes(rid) : rid.toString();\n\tconst trimmed = stripOuterQuotes(raw).trim();\n\tconst idx = trimmed.indexOf(':');\n\tif (idx <= 0 || idx >= trimmed.length - 1) return trimmed;\n\n\tconst table = trimmed.slice(0, idx).trim();\n\tconst key = stripOuterQuotes(\n\t\tstripAngleBrackets(stripOuterQuotes(trimmed.slice(idx + 1).trim())),\n\t);\n\tif (!table || !key) return trimmed;\n\treturn `${table}:${key}`;\n};\n\nconst stripAngleBrackets = (value: string): string => {\n\tconst trimmed = value.trim();\n\tconst isSurrealAngles =\n\t\ttrimmed.startsWith('⟨') && trimmed.endsWith('⟩') && trimmed.length >= 2;\n\tconst isAsciiAngles =\n\t\ttrimmed.startsWith('<') && trimmed.endsWith('>') && trimmed.length >= 2;\n\treturn isSurrealAngles || isAsciiAngles\n\t\t? trimmed.slice(1, -1).trim()\n\t\t: trimmed;\n};\n\nexport const toRecordKeyString = (rid: RecordId | string): string => {\n\tconst normalized = toRecordIdString(rid);\n\tconst idx = normalized.indexOf(':');\n\tconst rawKey = idx > 0 ? normalized.slice(idx + 1) : normalized;\n\treturn stripOuterQuotes(rawKey.trim());\n};\n\nconst isRecordIdString = (value: string): boolean => {\n\tconst idx = value.indexOf(':');\n\treturn idx > 0 && idx < value.length - 1;\n};\n\nconst looksLikeTableName = (value: string): boolean =>\n\t/^[A-Za-z_][A-Za-z0-9_-]*$/.test(value);\n\nconst toCanonicalRecordIdString = (value: string): string | undefined => {\n\tconst normalized = toRecordIdString(value);\n\tif (!isRecordIdString(normalized)) return undefined;\n\n\tconst idx = normalized.indexOf(':');\n\tconst table = stripOuterQuotes(normalized.slice(0, idx).trim());\n\tconst key = normalized.slice(idx + 1).trim();\n\tif (!table || !key || !looksLikeTableName(table)) return undefined;\n\treturn `${table}:${key}`;\n};\n\nconst asCanonicalRecordIdFromObjectShape = (\n\tvalue: unknown,\n): string | 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 `${table}:${key}`;\n\t}\n\n\treturn undefined;\n};\n\nconst asCanonicalRecordIdFromObjectString = (\n\tvalue: unknown,\n): string | 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 toCanonicalRecordIdString(raw);\n};\n\nconst isForeignRecordIdObject = (value: unknown): boolean => {\n\tif (!value || typeof value !== 'object' || value instanceof RecordId) {\n\t\treturn false;\n\t}\n\tconst ctorName = (value as { constructor?: { name?: unknown } }).constructor\n\t\t?.name;\n\treturn typeof ctorName === 'string' && /recordid/i.test(ctorName);\n};\n\nexport const asCanonicalRecordIdString = (\n\tvalue: unknown,\n): string | undefined => {\n\tif (typeof value === 'string') {\n\t\treturn toCanonicalRecordIdString(value);\n\t}\n\tif (value instanceof RecordId) {\n\t\treturn toCanonicalRecordIdString(value.toString());\n\t}\n\treturn (\n\t\tasCanonicalRecordIdFromObjectShape(value) ??\n\t\tasCanonicalRecordIdFromObjectString(value)\n\t);\n};\n\nexport const toNativeRecordIdLikeValue = (value: unknown): unknown => {\n\tif (value instanceof RecordId) return value;\n\tconst canonical = asCanonicalRecordIdString(value);\n\tif (!canonical) return value;\n\treturn canonicalToNativeRecordId(canonical);\n};\n\nexport const normalizeRecordIdLikeValue = (value: unknown): unknown => {\n\tif (value instanceof RecordId) {\n\t\treturn internNativeRecordId(value);\n\t}\n\tif (typeof value === 'object' && value !== null) {\n\t\tconst canonical =\n\t\t\tasCanonicalRecordIdFromObjectShape(value) ??\n\t\t\tasCanonicalRecordIdFromObjectString(value);\n\t\tif (!canonical) return value;\n\n\t\tif (isForeignRecordIdObject(value)) {\n\t\t\treturn internRecordIdLike(canonical, () => value);\n\t\t}\n\n\t\treturn internRecordIdLike(canonical, () =>\n\t\t\tcanonicalToNativeRecordId(canonical),\n\t\t);\n\t}\n\tif (typeof value !== 'string') return value;\n\n\tconst trimmed = value.trim();\n\tconst unquoted = stripOuterQuotes(trimmed);\n\tconst canonical =\n\t\ttoCanonicalRecordIdString(unquoted) ??\n\t\t(unquoted === trimmed ? undefined : toCanonicalRecordIdString(trimmed));\n\tif (canonical) {\n\t\treturn internRecordIdLike(canonical, () =>\n\t\t\tcanonicalToNativeRecordId(canonical),\n\t\t);\n\t}\n\n\t// Keep original value shape if it isn't record-id-like\n\treturn value;\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' &&\n\tvalue !== null &&\n\tObject.getPrototypeOf(value) === Object.prototype;\n\nexport const normalizeRecordIdLikeValueDeep = <T>(value: T): T => {\n\tconst normalized = normalizeRecordIdLikeValue(value);\n\n\tif (Array.isArray(normalized)) {\n\t\treturn normalized.map((item) =>\n\t\t\tnormalizeRecordIdLikeValueDeep(item),\n\t\t) as T;\n\t}\n\n\tif (isPlainObject(normalized)) {\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const [k, v] of Object.entries(normalized)) {\n\t\t\tout[k] = normalizeRecordIdLikeValueDeep(v);\n\t\t}\n\t\treturn out as T;\n\t}\n\n\treturn normalized as T;\n};\n\nexport const normalizeRecordIdLikeFields = <T extends Record<string, unknown>>(\n\tdata: T,\n): T => {\n\tconst out: Record<string, unknown> = {};\n\tfor (const [k, v] of Object.entries(data)) {\n\t\tout[k] = normalizeRecordIdLikeValue(v);\n\t}\n\treturn out as T;\n};\n\nexport const toRecordId = (\n\ttableName: string,\n\tid: RecordId | string,\n): RecordId => {\n\tif (id instanceof RecordId) {\n\t\treturn id;\n\t}\n\n\tconst normalized = toRecordIdString(id);\n\tconst prefixed = `${tableName}:`;\n\tconst key = normalized.startsWith(prefixed)\n\t\t? normalized.slice(prefixed.length)\n\t\t: normalized;\n\treturn new RecordId(tableName, key);\n};\n","import { type IR, or, eq as tanstackEq } from '@tanstack/db';\nimport { RecordId } from 'surrealdb';\nimport { normalizeRecordIdLikeValue, toRecordIdString } from './id';\n\ntype RecordIdLike = RecordId | string;\n\nconst parseRecordIdLike = (\n\tvalue: RecordIdLike,\n): { table: string; id: string } => {\n\tconst normalized = normalizeRecordIdLikeValue(value);\n\tif (normalized instanceof RecordId) {\n\t\treturn {\n\t\t\ttable: String(normalized.table),\n\t\t\tid: String(normalized.id),\n\t\t};\n\t}\n\n\tconst str = toRecordIdString(String(normalized));\n\tconst idx = str.indexOf(':');\n\tif (idx <= 0 || idx >= str.length - 1) {\n\t\tthrow new Error(\n\t\t\t`Expected a record id in 'table:id' format, received '${String(value)}'.`,\n\t\t);\n\t}\n\n\treturn {\n\t\ttable: str.slice(0, idx),\n\t\tid: str.slice(idx + 1),\n\t};\n};\n\nexport const eqRecordId = (\n\tfield: unknown,\n\tvalue: RecordIdLike,\n): IR.BasicExpression<boolean> => {\n\tconst parsed = parseRecordIdLike(value);\n\t// biome-ignore lint/suspicious/noExplicitAny: TanStack query refs are proxy-typed at call sites.\n\tconst fieldRef = field as any;\n\tconst canonical = `${parsed.table}:${parsed.id}`;\n\treturn or(\n\t\ttanstackEq(fieldRef, canonical),\n\t\ttanstackEq(fieldRef.id, parsed.id),\n\t);\n};\n","import type { LoadSubsetOptions } from '@tanstack/db';\nimport type { RecordId } from 'surrealdb';\nimport {\n\tasCanonicalRecordIdString,\n\tnormalizeRecordIdLikeValue,\n\ttoRecordIdString,\n} 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 canonicalRecordId = asCanonicalRecordIdString(value);\n\tif (canonicalRecordId) {\n\t\treturn {\n\t\t\t__type: 'recordid',\n\t\t\tvalue: canonicalRecordId,\n\t\t};\n\t}\n\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 {\n\tnormalizeRecordIdLikeValue,\n\ttoNativeRecordIdLikeValue,\n\ttoRecordId,\n} from './id';\nimport type { SurrealSubset, TableOptions } from './types';\n\ntype QueryResult<T> = T[] | null;\ntype RowResult<T> = T | T[] | null;\ntype FieldPath = Array<string | number>;\ntype SqlFragment = { sql: string };\n\nconst IDENTIFIER_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\nconst firstRow = <T>(res: RowResult<T>): T | undefined => {\n\tif (!res) return undefined;\n\tif (Array.isArray(res)) return res[0];\n\treturn res;\n};\n\nconst toFieldPath = (value: unknown): FieldPath => {\n\tif (!Array.isArray(value)) {\n\t\tthrow new Error('Expected a field path array in where expression.');\n\t}\n\treturn value as FieldPath;\n};\n\nconst quoteIdentifier = (segment: string): string => {\n\tif (IDENTIFIER_RE.test(segment)) return segment;\n\treturn `\\`${segment.replaceAll('`', '\\\\`')}\\``;\n};\n\nconst formatFieldPath = (path: FieldPath): string => {\n\tlet out = '';\n\tfor (const segment of path) {\n\t\tif (typeof segment === 'number') {\n\t\t\tout += `[${segment}]`;\n\t\t\tcontinue;\n\t\t}\n\t\tconst next = quoteIdentifier(segment);\n\t\tout = out ? `${out}.${next}` : next;\n\t}\n\treturn out;\n};\n\nconst isReferencePathCandidate = (value: unknown): value is FieldPath =>\n\tArray.isArray(value) &&\n\tvalue.length > 0 &&\n\ttypeof value[0] === 'string' &&\n\tvalue.every(\n\t\t(segment) => typeof segment === 'string' || typeof segment === 'number',\n\t);\n\nconst mapRelationPath = (path: FieldPath, relation?: boolean): FieldPath => {\n\tif (!relation) return path;\n\tif (path[0] === 'from') return ['in', ...path.slice(1)];\n\tif (path[0] === 'to') return ['out', ...path.slice(1)];\n\treturn path;\n};\n\nconst normalizeFilterValue = (value: unknown): unknown => {\n\tif (Array.isArray(value)) {\n\t\treturn value.map((item) => normalizeFilterValue(item));\n\t}\n\tconst native = toNativeRecordIdLikeValue(value);\n\tif (native !== value) return native;\n\treturn normalizeRecordIdLikeValue(value);\n};\n\nconst toSqlFragment = (value: unknown): SqlFragment => {\n\tif (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\t'sql' in value &&\n\t\ttypeof (value as { sql: unknown }).sql === 'string'\n\t) {\n\t\treturn value as SqlFragment;\n\t}\n\tthrow new Error('Unsupported where expression node.');\n};\n\nconst joinLogical = (op: 'AND' | 'OR', args: Array<unknown>): SqlFragment => {\n\tconst parts = args.map(toSqlFragment).map((frag) => frag.sql);\n\tif (parts.length === 0) {\n\t\treturn { sql: op === 'AND' ? 'true' : 'false' };\n\t}\n\tif (parts.length === 1) return { sql: parts[0] };\n\treturn {\n\t\tsql: parts.map((part) => `(${part})`).join(` ${op} `),\n\t};\n};\n\nconst buildSubsetQuery = (\n\ttable: TableOptions,\n\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\tnormalizeRecordIdLikeValueDeep,\n\ttoRecordId,\n\ttoRecordIdString,\n} from './id';\nimport { eqRecordId } from './operators';\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';\nexport { eqRecordId };\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 normalizeExpressionLiteralsInPlace = (expr: unknown): void => {\n\tif (!expr || typeof expr !== 'object') return;\n\tconst node = expr as {\n\t\ttype?: string;\n\t\tvalue?: unknown;\n\t\targs?: unknown[];\n\t};\n\tif (node.type === 'val') {\n\t\tnode.value = normalizeRecordIdLikeValueDeep(node.value);\n\t\treturn;\n\t}\n\tif (node.type === 'func' && Array.isArray(node.args)) {\n\t\tfor (const arg of node.args) normalizeExpressionLiteralsInPlace(arg);\n\t}\n};\n\nconst normalizeSubsetLiteralsInPlace = (subset: SurrealSubset | undefined) => {\n\tif (!subset) return;\n\tnormalizeExpressionLiteralsInPlace(subset.where);\n\tnormalizeExpressionLiteralsInPlace(subset.cursor?.whereFrom);\n\tnormalizeExpressionLiteralsInPlace(subset.cursor?.whereCurrent);\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\tnormalizeSubsetLiteralsInPlace(opts);\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\tconst normalized = normalizeRecordIdLikeValueDeep(row) as T;\n\t\treturn {\n\t\t\t...normalized,\n\t\t\tid: normalizeMutationId(normalized.id),\n\t\t} as T;\n\t};\n\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\t\t\t\tnormalizeSubsetLiteralsInPlace(subset);\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\tconst rawLoadSubset = resObj.loadSubset;\n\t\t\t\t\t\tconst loadSubset =\n\t\t\t\t\t\t\ttypeof rawLoadSubset === 'function'\n\t\t\t\t\t\t\t\t? (opts?: SurrealSubset) => {\n\t\t\t\t\t\t\t\t\t\tnormalizeSubsetLiteralsInPlace(opts);\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\trawLoadSubset as (\n\t\t\t\t\t\t\t\t\t\t\t\tsubset?: SurrealSubset,\n\t\t\t\t\t\t\t\t\t\t\t) => unknown\n\t\t\t\t\t\t\t\t\t\t)(opts);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: rawLoadSubset;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...resObj,\n\t\t\t\t\t\t\tloadSubset,\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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@foretag/tanstack-db-surrealdb",
3
3
  "description": "Add Offline / Local First Caching & Syncing to your SurrealDB app with TanstackDB and Loro (CRDTs)",
4
- "version": "0.5.4",
4
+ "version": "0.5.5",
5
5
  "files": [
6
6
  "dist"
7
7
  ],