@voltro/database 0.86.0 → 0.87.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5321 -0
- package/THIRD-PARTY-NOTICES.md +1 -225
- package/dist/dataTransfers.js +2 -1
- package/dist/fieldEncryption.js +64 -41
- package/dist/frameworkTables.js +15 -2
- package/dist/idGenerator.js +4 -4
- package/dist/index.d.ts +148 -15
- package/dist/index.js +77 -76
- package/dist/migrate.js +51 -31
- package/dist/migrations/applier.js +399 -384
- package/dist/migrations/ddlStatements.js +9 -0
- package/dist/migrations/fileDiscovery.js +145 -131
- package/dist/migrations/introspect.js +186 -184
- package/dist/migrations/planner.js +24 -14
- package/dist/migrations/postgresEnumCheck.js +4 -1
- package/dist/migrations/sqliteCatalogName.js +13 -0
- package/dist/predicate.js +27 -20
- package/dist/queryBuilder.js +6 -0
- package/dist/rowDecoder.js +61 -11
- package/dist/sql.d.ts +2746 -3748
- package/dist/sql.js +15 -14
- package/dist/sqlCompiler.js +88 -71
- package/dist/sqlMutation.js +55 -0
- package/dist/transactionOutcome.js +4 -1
- package/dist/typeId.js +51 -0
- package/dist/typedStore.js +1 -1
- package/dist/writeRecorder.js +21 -20
- package/package.json +2 -3
|
@@ -122,18 +122,28 @@ var w = {
|
|
|
122
122
|
...e,
|
|
123
123
|
columns: e.columns.map((e) => r.get(e) ?? e)
|
|
124
124
|
});
|
|
125
|
-
let o = new Map(t.indexes.map((e) => [i(e.name), a?.get(e) ?? e])), s = new Map(e.indexes.map((e) => [i(e.name), e])), c =
|
|
125
|
+
let o = new Map(t.indexes.map((e) => [i(e.name), a?.get(e) ?? e])), s = new Map(e.indexes.map((e) => [i(e.name), e])), c = /* @__PURE__ */ new Map();
|
|
126
|
+
if (n === "sqlite" || n === "turso") {
|
|
127
|
+
let n = t.indexes.filter((e) => e.unique && e.columns.length > 1 && !e.expression && e.where === void 0 && !s.has(i(e.name)) && i(e.name).startsWith(i(`sqlite_autoindex_${t.name}_`)) && /^\d+$/.test(e.name.slice(`sqlite_autoindex_${t.name}_`.length))), r = e.indexes.filter((e) => !o.has(i(e.name)));
|
|
128
|
+
for (let e of n) {
|
|
129
|
+
let t = r.filter((t) => I(t, a?.get(e) ?? e));
|
|
130
|
+
if (t.length !== 1) continue;
|
|
131
|
+
let s = t[0];
|
|
132
|
+
n.filter((e) => I(s, a?.get(e) ?? e)).length === 1 && (c.set(e, s), o.set(i(s.name), a?.get(e) ?? e));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
let l = [], u = [];
|
|
126
136
|
for (let t of e.indexes) {
|
|
127
137
|
let e = o.get(i(t.name));
|
|
128
|
-
(!e || !I(t, e)) &&
|
|
138
|
+
(!e || !I(t, e)) && l.push(t);
|
|
129
139
|
}
|
|
130
140
|
for (let e of t.indexes) {
|
|
131
|
-
let t = s.get(i(e.name));
|
|
132
|
-
(!t || !I(t, a?.get(e) ?? e)) &&
|
|
141
|
+
let t = s.get(i(e.name)) ?? c.get(e);
|
|
142
|
+
(!t || !I(t, a?.get(e) ?? e)) && u.push(e);
|
|
133
143
|
}
|
|
134
144
|
return {
|
|
135
|
-
added:
|
|
136
|
-
removed:
|
|
145
|
+
added: l,
|
|
146
|
+
removed: u
|
|
137
147
|
};
|
|
138
148
|
}, L = (e, t, n, r) => ({
|
|
139
149
|
op: e,
|
|
@@ -712,14 +722,14 @@ var w = {
|
|
|
712
722
|
"add-column": 0,
|
|
713
723
|
"rename-column": 1,
|
|
714
724
|
"rename-index": 1,
|
|
715
|
-
"
|
|
716
|
-
"
|
|
717
|
-
"
|
|
718
|
-
"drop-
|
|
719
|
-
"drop-
|
|
720
|
-
"
|
|
721
|
-
"
|
|
722
|
-
"
|
|
725
|
+
"drop-index": 2,
|
|
726
|
+
"drop-check": 2,
|
|
727
|
+
"drop-unique": 2,
|
|
728
|
+
"drop-unique-composite": 2,
|
|
729
|
+
"drop-foreign-key": 2,
|
|
730
|
+
"alter-column-nullability": 3,
|
|
731
|
+
"alter-column-type": 3,
|
|
732
|
+
"alter-column-default": 3,
|
|
723
733
|
"drop-column": 4,
|
|
724
734
|
"convert-charset": 5,
|
|
725
735
|
"add-index": 6,
|
|
@@ -4,7 +4,10 @@ var e = (e, t) => {
|
|
|
4
4
|
if (!i("check")) return null;
|
|
5
5
|
let a = n[r++];
|
|
6
6
|
if (a === void 0 || (a.startsWith("\"") ? a.slice(1, -1).replace(/""/g, "\"") : a.toLowerCase()) !== t) return null;
|
|
7
|
-
let o = () =>
|
|
7
|
+
let o = () => {
|
|
8
|
+
for (; i("::");) if (!(i("text") || i("character") && i("varying"))) return !1;
|
|
9
|
+
return !0;
|
|
10
|
+
};
|
|
8
11
|
if (!o() || !i("=")) return null;
|
|
9
12
|
let s = i("any");
|
|
10
13
|
if (s && (!i("array") || !i("["))) return null;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region src/migrations/sqliteCatalogName.ts
|
|
2
|
+
var e = (e) => e.replace(/[A-Z]/g, (e) => e.toLowerCase()), t = String.raw`(?:"(?:""|[^"])*"|\x60(?:\x60\x60|[^\x60])*\x60|\[[^\]]*\]|'(?:''|[^'])*'|[^\s.(]+)`, n = {
|
|
3
|
+
table: String.raw`CREATE\s+(?:TEMP(?:ORARY)?\s+)?TABLE`,
|
|
4
|
+
index: String.raw`CREATE\s+(?:UNIQUE\s+)?INDEX`
|
|
5
|
+
}, r = (r, i, a) => {
|
|
6
|
+
if (a === null) return i;
|
|
7
|
+
let o = new RegExp(String.raw`^\s*${n[r]}\s+(?:IF\s+NOT\s+EXISTS\s+)?(${t})(?:\s*\.\s*(${t}))?\s*(?=\(|ON\b|AS\b)`, "i").exec(a), s = o?.[2] ?? o?.[1];
|
|
8
|
+
if (s === void 0) return i;
|
|
9
|
+
let c = s[0], l = c === "\"" ? s.slice(1, -1).replaceAll("\"\"", "\"") : c === "`" ? s.slice(1, -1).replaceAll("``", "`") : c === "[" ? s.slice(1, -1) : c === "'" ? s.slice(1, -1).replaceAll("''", "'") : s;
|
|
10
|
+
return e(l) === e(i) ? l : i;
|
|
11
|
+
}, i = e;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { i as sqliteCatalogKey, r as sqliteCatalogName };
|
package/dist/predicate.js
CHANGED
|
@@ -129,7 +129,14 @@ var a = (e, t) => ({
|
|
|
129
129
|
if (n !== void 0) return n[0] === n[1] ? 0 : n[0] > n[1] ? 1 : -1;
|
|
130
130
|
let r = e instanceof Date ? e.getTime() : e, i = t instanceof Date ? t.getTime() : t;
|
|
131
131
|
return typeof r == typeof i ? r === i ? 0 : r > i ? 1 : -1 : null;
|
|
132
|
-
}, I = (e, t
|
|
132
|
+
}, I = (e, t) => {
|
|
133
|
+
let n = e;
|
|
134
|
+
for (let e of t) {
|
|
135
|
+
if (n == null) return;
|
|
136
|
+
n = typeof e == "number" ? Array.isArray(n) ? n[e] : void 0 : typeof n == "object" && !Array.isArray(n) && Object.hasOwn(n, e) ? n[e] : void 0;
|
|
137
|
+
}
|
|
138
|
+
return n;
|
|
139
|
+
}, L = (e, t) => e != null && t != null ? i(e, t) === 0 : P(e, t), R = (e, t, n = null, r = {}) => V(e, t, n, r) === !0, z = (e, t = null, n = {}) => {
|
|
133
140
|
let r = /* @__PURE__ */ new Map(), i = (e) => {
|
|
134
141
|
if ("not" in e) {
|
|
135
142
|
i(e.not);
|
|
@@ -158,8 +165,8 @@ var a = (e, t) => ({
|
|
|
158
165
|
let s = Array.prototype.filter.call(a, (e) => !(typeof e == "number" && Number.isNaN(e)));
|
|
159
166
|
r.set(e, new Set(s));
|
|
160
167
|
};
|
|
161
|
-
return i(e), (i) =>
|
|
162
|
-
},
|
|
168
|
+
return i(e), (i) => V(e, i, t, n, r) === !0;
|
|
169
|
+
}, B = (e, t, n) => {
|
|
163
170
|
if (e.length < 128 || t.length < 16 || Object.getPrototypeOf(e) !== Array.prototype || Object.getPrototypeOf(t) !== Array.prototype || Object.getOwnPropertyDescriptor(e, "includes") !== void 0 || Object.getOwnPropertyDescriptor(t, n) !== void 0) return;
|
|
164
171
|
for (let n of [e, t]) for (let e = 0; e < n.length; e += 1) {
|
|
165
172
|
let t = Object.getOwnPropertyDescriptor(n, String(e));
|
|
@@ -168,16 +175,16 @@ var a = (e, t) => ({
|
|
|
168
175
|
let r = /* @__PURE__ */ new Set();
|
|
169
176
|
for (let t = 0; t < e.length; t += 1) r.add(e[t]);
|
|
170
177
|
return r;
|
|
171
|
-
},
|
|
178
|
+
}, V = (t, a, o = null, s = {}, c) => {
|
|
172
179
|
if (!a) return !1;
|
|
173
180
|
if ("not" in t) {
|
|
174
|
-
let e =
|
|
181
|
+
let e = V(t.not, a, o, s, c);
|
|
175
182
|
return e === null ? null : !e;
|
|
176
183
|
}
|
|
177
184
|
if ("and" in t) {
|
|
178
185
|
let e = !1;
|
|
179
186
|
for (let n of t.and) {
|
|
180
|
-
let t =
|
|
187
|
+
let t = V(n, a, o, s, c);
|
|
181
188
|
if (t === !1) return !1;
|
|
182
189
|
t === null && (e = !0);
|
|
183
190
|
}
|
|
@@ -186,7 +193,7 @@ var a = (e, t) => ({
|
|
|
186
193
|
if ("or" in t) {
|
|
187
194
|
let e = !1;
|
|
188
195
|
for (let n of t.or) {
|
|
189
|
-
let t =
|
|
196
|
+
let t = V(n, a, o, s, c);
|
|
190
197
|
if (t === !0) return !0;
|
|
191
198
|
t === null && (e = !0);
|
|
192
199
|
}
|
|
@@ -204,7 +211,7 @@ var a = (e, t) => ({
|
|
|
204
211
|
let e = o.get(t.subquery), n = typeof e == "number" ? e > 0 : e instanceof Set && e.size > 0;
|
|
205
212
|
return t.op === "exists" ? n : !n;
|
|
206
213
|
}
|
|
207
|
-
let l = t, u = a[l.column], d = n(l.value) ? l.value : void 0;
|
|
214
|
+
let l = t, u = l.path === void 0 ? a[l.column] : I(a[l.column], l.path), d = n(l.value) ? l.value : void 0;
|
|
208
215
|
if (d !== void 0 && (!e.some((e) => e === l.op) || l.path !== void 0)) throw r("Column references require a scalar comparison without a JSON path");
|
|
209
216
|
let f = d === void 0 ? l.value : a[d.column];
|
|
210
217
|
if (d !== void 0 && (u == null || f == null)) return null;
|
|
@@ -213,7 +220,7 @@ var a = (e, t) => ({
|
|
|
213
220
|
let e = typeof u == "number" && Number.isNaN(u) ? !1 : m.has(u);
|
|
214
221
|
return l.op === "in" ? e : !e;
|
|
215
222
|
}
|
|
216
|
-
let h =
|
|
223
|
+
let h = p ? L : P, g = p ? i : F;
|
|
217
224
|
switch (l.op) {
|
|
218
225
|
case "eq": return h(u, f);
|
|
219
226
|
case "neq": return !h(u, f);
|
|
@@ -229,23 +236,23 @@ var a = (e, t) => ({
|
|
|
229
236
|
let e = Array.isArray(u) ? u : [], t = Array.isArray(f) ? f : [];
|
|
230
237
|
if (e.length < 128 || t.length < 16) return t.every((t) => e.includes(t));
|
|
231
238
|
let n, r = 0;
|
|
232
|
-
return t.every((i) => (++r === 5 && (n =
|
|
239
|
+
return t.every((i) => (++r === 5 && (n = B(e, t, "every")), n === void 0 ? e.includes(i) : n.has(i)));
|
|
233
240
|
}
|
|
234
241
|
case "arrayOverlaps": {
|
|
235
242
|
let e = Array.isArray(u) ? u : [], t = Array.isArray(f) ? f : [];
|
|
236
243
|
if (e.length < 128 || t.length < 16) return t.some((t) => e.includes(t));
|
|
237
244
|
let n, r = 0;
|
|
238
|
-
return t.some((i) => (++r === 5 && (n =
|
|
245
|
+
return t.some((i) => (++r === 5 && (n = B(e, t, "some")), n === void 0 ? e.includes(i) : n.has(i)));
|
|
239
246
|
}
|
|
240
247
|
case "arrayHas": return Array.isArray(u) && u.includes(f);
|
|
241
248
|
case "isNull": return u == null;
|
|
242
249
|
case "isNotNull": return u != null;
|
|
243
250
|
case "spatial": throw r("@voltro/plugin-postgis: spatial predicates (ST_DWithin / ST_Contains / ST_Within / ST_Intersects / bbox &&) are not evaluable in-memory — use them in one-shot ctx.store.query reads, not reactive subscriptions.");
|
|
244
251
|
}
|
|
245
|
-
},
|
|
246
|
-
if ("not" in e) yield*
|
|
247
|
-
else if ("and" in e) for (let t of e.and) yield*
|
|
248
|
-
else if ("or" in e) for (let t of e.or) yield*
|
|
252
|
+
}, H = function* (e) {
|
|
253
|
+
if ("not" in e) yield* H(e.not);
|
|
254
|
+
else if ("and" in e) for (let t of e.and) yield* H(t);
|
|
255
|
+
else if ("or" in e) for (let t of e.or) yield* H(t);
|
|
249
256
|
else e.op === "subquery-in" || e.op === "subquery-not-in" ? yield {
|
|
250
257
|
kind: "in",
|
|
251
258
|
descriptor: e.subquery
|
|
@@ -253,14 +260,14 @@ var a = (e, t) => ({
|
|
|
253
260
|
kind: "exists",
|
|
254
261
|
descriptor: e.subquery
|
|
255
262
|
});
|
|
256
|
-
},
|
|
257
|
-
if ("not" in e) yield*
|
|
258
|
-
else if ("and" in e) for (let n of e.and) yield*
|
|
259
|
-
else if ("or" in e) for (let t of e.or) yield*
|
|
263
|
+
}, U = function* (e, t = !0) {
|
|
264
|
+
if ("not" in e) yield* U(e.not, !1);
|
|
265
|
+
else if ("and" in e) for (let n of e.and) yield* U(n, t);
|
|
266
|
+
else if ("or" in e) for (let t of e.or) yield* U(t, !1);
|
|
260
267
|
else e.op !== "subquery-in" && e.op !== "subquery-not-in" && e.op !== "exists" && e.op !== "not-exists" && (yield {
|
|
261
268
|
...e,
|
|
262
269
|
conjunctive: t && !n(e.value)
|
|
263
270
|
});
|
|
264
271
|
};
|
|
265
272
|
//#endregion
|
|
266
|
-
export { v as MATCHES_NO_ROWS, S as and, h as arrayContains, _ as arrayHas, g as arrayOverlaps,
|
|
273
|
+
export { v as MATCHES_NO_ROWS, S as and, h as arrayContains, _ as arrayHas, g as arrayOverlaps, H as collectSubqueries, t as columnRef, p as contains, a as eq, R as evaluatePredicate, k as exists, s as gt, c as gte, d as inSet, D as inSubquery, n as isColumnReference, b as isNotNull, y as isNull, T as jsonField, l as lt, u as lte, o as neq, w as not, A as notExists, f as notInSet, O as notInSubquery, C as or, z as preparePredicate, x as spatialPredicate, m as startsWith, U as walkLeaves };
|
package/dist/queryBuilder.js
CHANGED
package/dist/rowDecoder.js
CHANGED
|
@@ -58,17 +58,25 @@ var c = (e) => e == null || typeof e == "boolean" ? e : typeof e == "number" ? e
|
|
|
58
58
|
}
|
|
59
59
|
}, g = (t, n, r, c) => {
|
|
60
60
|
if (t.length === 0) return t;
|
|
61
|
+
let l = c;
|
|
62
|
+
for (; l?.setOp !== void 0;) {
|
|
63
|
+
if (l.setOp.queries.length < 2) throw Error("A set operation requires at least two inputs");
|
|
64
|
+
l = l.setOp.queries[0];
|
|
65
|
+
}
|
|
66
|
+
if (c?.setOp && l) return g(t, l.table, r, l);
|
|
61
67
|
if (c && (r === "sqlite" || r === "turso") && a(c)) {
|
|
62
|
-
let e = o(s(c, void 0), void 0);
|
|
68
|
+
let e = o(s(c, void 0), void 0), n = (c.aggregations ?? []).filter((e) => v.has(e.op)).map((e) => e.alias);
|
|
63
69
|
return t.map((t) => {
|
|
64
|
-
let
|
|
70
|
+
let i = { ...t };
|
|
65
71
|
for (let t of e) {
|
|
66
72
|
let e = t.decimal ? "decimal" : t.definition?.type;
|
|
67
|
-
e && t.name in
|
|
73
|
+
e && t.name in i && (i[t.name] = m(i[t.name], e, r));
|
|
68
74
|
}
|
|
69
|
-
|
|
75
|
+
for (let e of n) e in i && (i[e] = S(i[e]));
|
|
76
|
+
return i;
|
|
70
77
|
});
|
|
71
78
|
}
|
|
79
|
+
if (c?.aggregations?.length) return C(t, c, r);
|
|
72
80
|
if (c?.joinedProjection?.length) {
|
|
73
81
|
let e = c.joinedProjection.map((e) => ({
|
|
74
82
|
outputKey: e.outputKey,
|
|
@@ -80,9 +88,51 @@ var c = (e) => e == null || typeof e == "boolean" ? e : typeof e == "number" ? e
|
|
|
80
88
|
return n;
|
|
81
89
|
});
|
|
82
90
|
}
|
|
83
|
-
let
|
|
84
|
-
return
|
|
85
|
-
}, _ = (e,
|
|
91
|
+
let u = c?.sourceTable?.tableName === n ? c.sourceTable : e(n);
|
|
92
|
+
return u === void 0 ? t : w(t, u, r);
|
|
93
|
+
}, _ = (e, t, n) => g(e, t.table, n, t), v = /* @__PURE__ */ new Set([
|
|
94
|
+
"count",
|
|
95
|
+
"count-distinct",
|
|
96
|
+
"window-row-number",
|
|
97
|
+
"window-rank",
|
|
98
|
+
"window-dense-rank"
|
|
99
|
+
]), y = /* @__PURE__ */ new Set(["sum", "window-sum-over"]), b = /* @__PURE__ */ new Set(["avg", "window-avg-over"]), x = (e) => e == null ? e : Number(e), S = (e) => {
|
|
100
|
+
if (e == null) return e;
|
|
101
|
+
let t = typeof e == "number" ? e : typeof e == "bigint" ? e <= BigInt(2 ** 53 - 1) ? Number(e) : NaN : typeof e == "string" && /^\d+$/.test(e) ? Number(e) : NaN;
|
|
102
|
+
if (!Number.isSafeInteger(t) || t < 0) throw RangeError(`aggregate counter ${String(e)} is not a non-negative safe integer`);
|
|
103
|
+
return t;
|
|
104
|
+
}, C = (e, t, n) => {
|
|
105
|
+
let r = (t.aggregations ?? []).map((e) => {
|
|
106
|
+
let r = e.column === void 0 ? void 0 : i(e.column, t);
|
|
107
|
+
if (v.has(e.op)) return {
|
|
108
|
+
alias: e.alias,
|
|
109
|
+
decode: S
|
|
110
|
+
};
|
|
111
|
+
if (b.has(e.op)) return {
|
|
112
|
+
alias: e.alias,
|
|
113
|
+
decode: x
|
|
114
|
+
};
|
|
115
|
+
if (y.has(e.op)) {
|
|
116
|
+
let t = r?.type === "decimal" || r?.type === "bigint";
|
|
117
|
+
return {
|
|
118
|
+
alias: e.alias,
|
|
119
|
+
decode: t ? (e) => m(e, r.type, n) : x
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
return r === void 0 ? {
|
|
123
|
+
alias: e.alias,
|
|
124
|
+
decode: (e) => e
|
|
125
|
+
} : {
|
|
126
|
+
alias: e.alias,
|
|
127
|
+
decode: f(r) ? d : (e) => m(e, r.type, n)
|
|
128
|
+
};
|
|
129
|
+
});
|
|
130
|
+
return e.map((e) => {
|
|
131
|
+
let t = { ...e };
|
|
132
|
+
for (let { alias: e, decode: n } of r) e in t && (t[e] = n(t[e]));
|
|
133
|
+
return t;
|
|
134
|
+
});
|
|
135
|
+
}, w = (e, n, i) => {
|
|
86
136
|
if (e.length === 0) return e;
|
|
87
137
|
let a = n.fields, o = [];
|
|
88
138
|
for (let [e, t] of Object.entries(a)) {
|
|
@@ -99,7 +149,7 @@ var c = (e) => e == null || typeof e == "boolean" ? e : typeof e == "number" ? e
|
|
|
99
149
|
for (let { key: e, type: r, decimalShape: a, numericId: s } of o) e in n && (n[e] = s ? d(n[e]) : a && n[e] !== null && n[e] !== void 0 ? t(n[e], a) : m(n[e], r, i));
|
|
100
150
|
return n;
|
|
101
151
|
});
|
|
102
|
-
},
|
|
152
|
+
}, T = (e, t) => {
|
|
103
153
|
if (e == null) return e;
|
|
104
154
|
switch (t) {
|
|
105
155
|
case "json": return JSON.stringify(e);
|
|
@@ -107,17 +157,17 @@ var c = (e) => e == null || typeof e == "boolean" ? e : typeof e == "number" ? e
|
|
|
107
157
|
case "vector": return typeof e == "string" ? e : JSON.stringify(e);
|
|
108
158
|
default: return e;
|
|
109
159
|
}
|
|
110
|
-
},
|
|
160
|
+
}, E = (t, i, a = ["json", "array"]) => {
|
|
111
161
|
let o = e(i);
|
|
112
162
|
if (o === void 0) return t;
|
|
113
163
|
let s = o.fields, c = null;
|
|
114
164
|
for (let [e, i] of Object.entries(s)) if (a.includes(i.type) && e in t) {
|
|
115
165
|
let a = i.type === "decimal" ? r(i) : void 0, o = t[e];
|
|
116
166
|
if (a && o != null && typeof o != "string") throw TypeError("Encoded decimal writes require exact decimal strings");
|
|
117
|
-
let s = a && typeof o == "string" ? n(o, a) :
|
|
167
|
+
let s = a && typeof o == "string" ? n(o, a) : T(o, i.type);
|
|
118
168
|
s !== t[e] && (c === null && (c = { ...t }), c[e] = s);
|
|
119
169
|
}
|
|
120
170
|
return c ?? t;
|
|
121
171
|
};
|
|
122
172
|
//#endregion
|
|
123
|
-
export { m as decodeCell,
|
|
173
|
+
export { m as decodeCell, w as decodeRowsForTable, g as decodeRowsFromSchema, _ as decodeSelectRows, E as encodeRowForSchema };
|