@evolu/common 8.6.0 → 8.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/Sqlite.d.ts +23 -9
- package/dist/src/Sqlite.d.ts.map +1 -1
- package/dist/src/Sqlite.js +14 -9
- package/dist/src/local-first/Db.d.ts.map +1 -1
- package/dist/src/local-first/Db.js +1 -0
- package/dist/src/local-first/Protocol.d.ts +5 -5
- package/dist/src/local-first/Protocol.d.ts.map +1 -1
- package/dist/src/local-first/Protocol.js +7 -7
- package/dist/src/local-first/Query.d.ts +2 -3
- package/dist/src/local-first/Query.d.ts.map +1 -1
- package/dist/src/local-first/Query.js +1 -1
- package/dist/src/local-first/Schema.d.ts +15 -1
- package/dist/src/local-first/Schema.d.ts.map +1 -1
- package/dist/src/local-first/Schema.js +3 -2
- package/dist/src/local-first/Storage.d.ts +2 -2
- package/dist/src/local-first/Storage.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/Sqlite.ts +34 -16
- package/src/local-first/Db.ts +3 -1
- package/src/local-first/Protocol.ts +9 -9
- package/src/local-first/Query.ts +5 -5
- package/src/local-first/Schema.ts +22 -7
package/dist/src/Sqlite.d.ts
CHANGED
|
@@ -47,7 +47,7 @@ export interface SqliteTransaction {
|
|
|
47
47
|
/** Represents a SQL query to be executed on a {@link Sqlite} database. */
|
|
48
48
|
export interface SqliteQuery {
|
|
49
49
|
readonly sql: SafeSql;
|
|
50
|
-
readonly parameters:
|
|
50
|
+
readonly parameters: SqliteQueryParameters;
|
|
51
51
|
readonly options?: SqliteQueryOptions;
|
|
52
52
|
}
|
|
53
53
|
/** Serialized {@link SqliteQuery} used as a stable string key. */
|
|
@@ -57,13 +57,29 @@ export type SafeSql = string & Brand<"SafeSql">;
|
|
|
57
57
|
/**
|
|
58
58
|
* A value that can be stored in {@link Sqlite}.
|
|
59
59
|
*
|
|
60
|
+
* Numeric values use {@link FiniteNumber} because JavaScript numbers also
|
|
61
|
+
* include `NaN` and infinities. SQLite binds `NaN` as `NULL`, while JSON
|
|
62
|
+
* serialization converts all non-finite numbers to `null`. Restricting numbers
|
|
63
|
+
* to finite values preserves them across storage and query serialization.
|
|
64
|
+
*
|
|
60
65
|
* Note that Evolu can't support Int64 because expo-sqlite (and some others) do
|
|
61
66
|
* not support it.
|
|
62
67
|
*/
|
|
63
|
-
export declare const SqliteValue: import("./Type.ts").UnionType<readonly [import("./Type.ts").
|
|
68
|
+
export declare const SqliteValue: import("./Type.ts").UnionType<readonly [import("./Type.ts").BrandType<import("./Type.ts").BrandType<import("./Type.ts").Type<"Number", number, number, import("./Type.ts").TypeOfError<"Number">, null, import("./Type.ts").TypeOfError<"Number">, never, number, true>, "NonNaN", import("./Type.ts").NonNaNError>, "Finite", import("./Type.ts").FiniteError>, import("./Type.ts").LiteralType<null>, import("./Type.ts").Type<"String", string, string, import("./Type.ts").TypeOfError<"String">, null, import("./Type.ts").TypeOfError<"String">, never, string, true>, import("./Type.ts").Type<"Uint8Array", Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>, import("./Type.ts").ObjectTagError<"Uint8Array">, null, import("./Type.ts").ObjectTagError<"Uint8Array">, never, Uint8Array<ArrayBufferLike>, true>]>;
|
|
64
69
|
export type SqliteValue = typeof SqliteValue.Output;
|
|
65
|
-
/**
|
|
66
|
-
export declare const
|
|
70
|
+
/** Parameters of a {@link SqliteQuery}. */
|
|
71
|
+
export declare const SqliteQueryParameters: ArrayType<import("./Type.ts").UnionType<readonly [import("./Type.ts").BrandType<import("./Type.ts").BrandType<import("./Type.ts").Type<"Number", number, number, import("./Type.ts").TypeOfError<"Number">, null, import("./Type.ts").TypeOfError<"Number">, never, number, true>, "NonNaN", import("./Type.ts").NonNaNError>, "Finite", import("./Type.ts").FiniteError>, import("./Type.ts").LiteralType<null>, import("./Type.ts").Type<"String", string, string, import("./Type.ts").TypeOfError<"String">, null, import("./Type.ts").TypeOfError<"String">, never, string, true>, import("./Type.ts").Type<"Uint8Array", Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>, import("./Type.ts").ObjectTagError<"Uint8Array">, null, import("./Type.ts").ObjectTagError<"Uint8Array">, never, Uint8Array<ArrayBufferLike>, true>]>>;
|
|
72
|
+
export type SqliteQueryParameters = typeof SqliteQueryParameters.Output;
|
|
73
|
+
/**
|
|
74
|
+
* A value used in {@link sql} template parameters and {@link Sqlite} query
|
|
75
|
+
* results.
|
|
76
|
+
*
|
|
77
|
+
* It differs from {@link SqliteValue} only by using `number` instead of
|
|
78
|
+
* {@link FiniteNumber}.
|
|
79
|
+
*/
|
|
80
|
+
export type SqliteValueInput = typeof SqliteValue.Input;
|
|
81
|
+
/** Equality comparison for {@link SqliteValueInput}. */
|
|
82
|
+
export declare const eqSqliteValue: Eq<SqliteValueInput>;
|
|
67
83
|
/** Options for configuring {@link SqliteQuery} execution behavior. */
|
|
68
84
|
export interface SqliteQueryOptions {
|
|
69
85
|
/**
|
|
@@ -99,9 +115,9 @@ export interface SqliteExecResult<R extends SqliteRow = SqliteRow> {
|
|
|
99
115
|
}
|
|
100
116
|
/**
|
|
101
117
|
* A row returned from a {@link Sqlite} query, mapping column names to
|
|
102
|
-
* {@link
|
|
118
|
+
* {@link SqliteValueInput}.
|
|
103
119
|
*/
|
|
104
|
-
export type SqliteRow = Record<string,
|
|
120
|
+
export type SqliteRow = Record<string, SqliteValueInput>;
|
|
105
121
|
/**
|
|
106
122
|
* SQLite driver interface.
|
|
107
123
|
*
|
|
@@ -172,7 +188,7 @@ export interface RawSql extends Typed<"RawSql"> {
|
|
|
172
188
|
readonly sql: string;
|
|
173
189
|
}
|
|
174
190
|
/** A parameter accepted by the {@link sql} tagged template. */
|
|
175
|
-
export type SqlTemplateParam =
|
|
191
|
+
export type SqlTemplateParam = SqliteValueInput | SqlIdentifier | RawSql;
|
|
176
192
|
export declare function sql(strings: TemplateStringsArray, ...parameters: Array<SqlTemplateParam>): SqliteQuery;
|
|
177
193
|
export declare namespace sql {
|
|
178
194
|
var identifier: (identifier: string) => SqlIdentifier;
|
|
@@ -231,8 +247,6 @@ export declare const getSqliteSnapshot: (deps: SqliteDep) => SqliteSnapshot;
|
|
|
231
247
|
*
|
|
232
248
|
* See: https://www.sqlite.org/quirks.html#no_separate_boolean_datatype
|
|
233
249
|
*
|
|
234
|
-
* ## Tips
|
|
235
|
-
*
|
|
236
250
|
* - Use {@link sqliteTrue} and {@link sqliteFalse} constants for better
|
|
237
251
|
* readability.
|
|
238
252
|
* - Use {@link booleanToSqliteBoolean} and {@link sqliteBooleanToBoolean} for
|
package/dist/src/Sqlite.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sqlite.d.ts","sourceRoot":"","sources":["../../src/Sqlite.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAIlC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,
|
|
1
|
+
{"version":3,"file":"Sqlite.d.ts","sourceRoot":"","sources":["../../src/Sqlite.ts"],"names":[],"mappings":"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"}
|
package/dist/src/Sqlite.js
CHANGED
|
@@ -56,24 +56,31 @@ var __disposeResources = (this && this.__disposeResources) || (function (Suppres
|
|
|
56
56
|
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
57
57
|
});
|
|
58
58
|
import { bytesToHex, hexToBytes } from "./Buffer.js";
|
|
59
|
-
import { createEqObject,
|
|
59
|
+
import { createEqObject, eqString, eqUint8Array } from "./Eq.js";
|
|
60
60
|
import { disposable } from "./Function.js";
|
|
61
61
|
import { createMutableRecord, objectToEntries } from "./Object.js";
|
|
62
62
|
import { ok } from "./Result.js";
|
|
63
63
|
import { testCreateRun } from "./Task.js";
|
|
64
|
-
import { array,
|
|
64
|
+
import { array, FiniteNumber, Null, object, record, set, String, testName, Uint8Array, union, } from "./Type.js";
|
|
65
65
|
/**
|
|
66
66
|
* A value that can be stored in {@link Sqlite}.
|
|
67
67
|
*
|
|
68
|
+
* Numeric values use {@link FiniteNumber} because JavaScript numbers also
|
|
69
|
+
* include `NaN` and infinities. SQLite binds `NaN` as `NULL`, while JSON
|
|
70
|
+
* serialization converts all non-finite numbers to `null`. Restricting numbers
|
|
71
|
+
* to finite values preserves them across storage and query serialization.
|
|
72
|
+
*
|
|
68
73
|
* Note that Evolu can't support Int64 because expo-sqlite (and some others) do
|
|
69
74
|
* not support it.
|
|
70
75
|
*/
|
|
71
|
-
export const SqliteValue = /*#__PURE__*/ union(Null, String,
|
|
72
|
-
/**
|
|
73
|
-
export const
|
|
76
|
+
export const SqliteValue = /*#__PURE__*/ union(FiniteNumber, Null, String, Uint8Array);
|
|
77
|
+
/** Parameters of a {@link SqliteQuery}. */
|
|
78
|
+
export const SqliteQueryParameters = /*#__PURE__*/ array(SqliteValue);
|
|
79
|
+
/** Equality comparison for {@link SqliteValueInput}. */
|
|
80
|
+
export const eqSqliteValue = (x, y) => Uint8Array.is(x) && Uint8Array.is(y) ? eqUint8Array(x, y) : x === y;
|
|
74
81
|
/** Converts a {@link SqliteQuery} into a stable {@link SqliteQueryString}. */
|
|
75
82
|
export const sqliteQueryToSqliteQueryString = (query) => {
|
|
76
|
-
const params = query.parameters.map((value) => value
|
|
83
|
+
const params = query.parameters.map((value) => Uint8Array.is(value)
|
|
77
84
|
? ["b", bytesToHex(value)]
|
|
78
85
|
: ["j", value]);
|
|
79
86
|
const options = query.options
|
|
@@ -318,7 +325,7 @@ export const sql = (strings, ...parameters) => {
|
|
|
318
325
|
}
|
|
319
326
|
else {
|
|
320
327
|
sql += "?";
|
|
321
|
-
values.push(param);
|
|
328
|
+
values.push(SqliteValue.orThrow(param));
|
|
322
329
|
}
|
|
323
330
|
}
|
|
324
331
|
}
|
|
@@ -422,8 +429,6 @@ export const getSqliteSnapshot = (deps) => {
|
|
|
422
429
|
*
|
|
423
430
|
* See: https://www.sqlite.org/quirks.html#no_separate_boolean_datatype
|
|
424
431
|
*
|
|
425
|
-
* ## Tips
|
|
426
|
-
*
|
|
427
432
|
* - Use {@link sqliteTrue} and {@link sqliteFalse} constants for better
|
|
428
433
|
* readability.
|
|
429
434
|
* - Use {@link booleanToSqliteBoolean} and {@link sqliteBooleanToBoolean} for
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Db.d.ts","sourceRoot":"","sources":["../../../src/local-first/Db.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EACL,aAAa,EAGd,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIxD,OAAO,KAAK,EACV,qBAAqB,EAGrB,YAAY,EACb,MAAM,cAAc,CAAC;AAUtB,OAAO,EAAsB,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAE3D,OAAO,
|
|
1
|
+
{"version":3,"file":"Db.d.ts","sourceRoot":"","sources":["../../../src/local-first/Db.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EACL,aAAa,EAGd,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIxD,OAAO,KAAK,EACV,qBAAqB,EAGrB,YAAY,EACb,MAAM,cAAc,CAAC;AAUtB,OAAO,EAAsB,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAE3D,OAAO,EASL,KAAK,IAAI,EACV,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,yBAAyB,EACzB,iBAAiB,EACjB,MAAM,EACN,UAAU,EACV,UAAU,EACX,MAAM,cAAc,CAAC;AAqBtB,OAAO,KAAK,EAEV,aAAa,EACb,cAAc,EAGf,MAAM,aAAa,CAAC;AA+BrB,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAE5C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;CACjE;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC;AAE5C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;CACzC;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,GACnC,yBAAyB,GACzB,cAAc,GACd,qBAAqB,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,aAAa,SACjB,UAAU,CAAC,YAAY,CAAC,KAAG,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,CAwM/D,CAAC"}
|
|
@@ -620,6 +620,7 @@ const dbChangeToColumns = (change, now) => {
|
|
|
620
620
|
if (change.isDelete != null) {
|
|
621
621
|
values = appendToArray(values, [
|
|
622
622
|
"isDeleted",
|
|
623
|
+
// SQLite boolean values are fixed to the finite numbers 0 and 1.
|
|
623
624
|
booleanToSqliteBoolean(change.isDelete),
|
|
624
625
|
]);
|
|
625
626
|
}
|
|
@@ -167,7 +167,7 @@ import { type DecryptWithXChaCha20Poly1305Error, EncryptionKey, type RandomBytes
|
|
|
167
167
|
import { type Result } from "../Result.ts";
|
|
168
168
|
import { SqliteValue } from "../Sqlite.ts";
|
|
169
169
|
import { type Task } from "../Task.ts";
|
|
170
|
-
import { NonNegativeInt, PositiveInt, type Typed } from "../Type.ts";
|
|
170
|
+
import { FiniteNumber, NonNegativeInt, PositiveInt, type Typed } from "../Type.ts";
|
|
171
171
|
import { type Owner, type OwnerError, OwnerId, OwnerWriteKey } from "./Owner.ts";
|
|
172
172
|
import { type BaseRange, type CrdtMessage, DbChange, type EncryptedCrdtMessage, type EncryptedDbChange, type FingerprintRange, RangeType, type SkipRange, type StorageDep } from "./Storage.ts";
|
|
173
173
|
import { NodeId, Timestamp } from "./Timestamp.ts";
|
|
@@ -413,11 +413,11 @@ export declare const applyProtocolMessageAsRelay: (inputMessage: Uint8Array, opt
|
|
|
413
413
|
version?: NonNegativeInt) => Task<ApplyProtocolMessageAsRelayResult, ProtocolInvalidDataError, StorageDep>;
|
|
414
414
|
export declare const decodeRle: <T>(buffer: Buffer, length: NonNegativeInt, decodeValue: () => T) => ReadonlyArray<T>;
|
|
415
415
|
/**
|
|
416
|
-
* Evolu uses MessagePack to handle
|
|
417
|
-
*
|
|
416
|
+
* Evolu uses MessagePack to handle finite numbers except for NonNegativeInt.
|
|
417
|
+
* For NonNegativeInt, Evolu provides more efficient encoding.
|
|
418
418
|
*/
|
|
419
|
-
export declare const encodeNumber: (buffer: Buffer, number:
|
|
420
|
-
export declare const decodeNumber: (buffer: Buffer) =>
|
|
419
|
+
export declare const encodeNumber: (buffer: Buffer, number: FiniteNumber) => void;
|
|
420
|
+
export declare const decodeNumber: (buffer: Buffer) => FiniteNumber;
|
|
421
421
|
/**
|
|
422
422
|
* Encodes an array of boolean flags into a single byte.
|
|
423
423
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Protocol.d.ts","sourceRoot":"","sources":["../../../src/local-first/Protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgKG;AAoBH,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,KAAK,MAAM,EAMZ,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAGL,KAAK,iCAAiC,EACtC,aAAa,EAGb,KAAK,cAAc,EAGpB,MAAM,cAAc,CAAC;AAItB,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAc,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,
|
|
1
|
+
{"version":3,"file":"Protocol.d.ts","sourceRoot":"","sources":["../../../src/local-first/Protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgKG;AAoBH,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,KAAK,MAAM,EAMZ,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAGL,KAAK,iCAAiC,EACtC,aAAa,EAGb,KAAK,cAAc,EAGpB,MAAM,cAAc,CAAC;AAItB,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAc,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EAKL,YAAY,EASZ,cAAc,EAEd,WAAW,EACX,KAAK,KAAK,EAGX,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,KAAK,KAAK,EACV,KAAK,UAAU,EACf,OAAO,EAGP,aAAa,EAEd,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,QAAQ,EACR,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EAEtB,KAAK,gBAAgB,EAIrB,SAAS,EAET,KAAK,SAAS,EACd,KAAK,UAAU,EAEhB,MAAM,cAAc,CAAC;AACtB,OAAO,EAGL,MAAM,EACN,SAAS,EAKV,MAAM,gBAAgB,CAAC;AAaxB;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,sBAAsB,yfAG7B,CAAC;AAEP,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAC,MAAM,CAAC;AAE1E;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,EACX,sBAAsB,CAAC;AAEtD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,4BAA4B,6eAGnC,CAAC;AACP,MAAM,MAAM,4BAA4B,GACtC,OAAO,4BAA4B,CAAC,MAAM,CAAC;AAE7C;;;;;GAKG;AACH,eAAO,MAAM,mCAAmC,EACpC,4BAA4B,CAAC;AAEzC,8BAA8B;AAC9B,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAAC;AAEpE,8BAA8B;AAC9B,eAAO,MAAM,eAAe,sGAAiB,CAAC;AAE9C,eAAO,MAAM,WAAW;IACtB,wEAAwE;aACxE,OAAO,EAAE,CAAC;IACV,yEAAyE;aACzE,QAAQ,EAAE,CAAC;IACX,0EAA0E;aAC1E,SAAS,EAAE,CAAC;CACJ,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAEzE,8DAA8D;AAC9D,MAAM,WAAW,cAAe,SAAQ,KAAK,CAAC,gBAAgB,CAAC;IAC7D,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;CACnC;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,iBAChB,UAAU,KACvB,MAAM,CAAC,cAAc,EAAE,wBAAwB,CAUjD,CAAC;AAEF,eAAO,MAAM,iBAAiB;IAC5B,8CAA8C;aAC9C,IAAI,EAAE,CAAC;IACP,2CAA2C;aAC3C,SAAS,EAAE,CAAC;IACZ,+CAA+C;aAC/C,WAAW,EAAE,CAAC;CACN,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAC1B,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAE7D,eAAO,MAAM,iBAAiB;aAC5B,OAAO,EAAE,CAAC;IACV,gDAAgD;aAChD,aAAa,EAAE,CAAC;IAChB,6CAA6C;aAC7C,UAAU,EAAE,CAAC;IACb,6CAA6C;aAC7C,UAAU,EAAE,CAAC;IACb,4CAA4C;aAC5C,SAAS,EAAE,CAAC;CACJ,CAAC;AAEX,KAAK,iBAAiB,GACpB,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAE7D,MAAM,MAAM,aAAa,GACrB,oBAAoB,GACpB,wBAAwB,GACxB,qBAAqB,GACrB,kBAAkB,GAClB,iBAAiB,GACjB,kBAAkB,GAClB,8BAA8B,CAAC;AAEnC;;;GAGG;AACH,MAAM,WAAW,oBACf,SAAQ,UAAU,EAAE,KAAK,CAAC,sBAAsB,CAAC;IACjD,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,0DAA0D;IAC1D,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAED,4DAA4D;AAC5D,MAAM,WAAW,wBAAyB,SAAQ,KAAK,CAAC,0BAA0B,CAAC;IACjF,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,mFAAmF;AACnF,MAAM,WAAW,qBACf,SAAQ,UAAU,EAAE,KAAK,CAAC,uBAAuB,CAAC;CAAG;AAEvD;;;GAGG;AACH,MAAM,WAAW,kBACf,SAAQ,UAAU,EAAE,KAAK,CAAC,oBAAoB,CAAC;CAAG;AAEpD;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,kBACf,SAAQ,UAAU,EAAE,KAAK,CAAC,oBAAoB,CAAC;CAAG;AAEpD;;;GAGG;AACH,MAAM,WAAW,iBACf,SAAQ,UAAU,EAAE,KAAK,CAAC,mBAAmB,CAAC;CAAG;AAEnD;;;;GAIG;AACH,MAAM,WAAW,8BAA+B,SAAQ,KAAK,CAAC,gCAAgC,CAAC;IAC7F,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,qCAAqC,SACzC,cAAc,aAEZ,KAAK,YACF,qBAAqB,CAAC,WAAW,CAAC,YAClC,sBAAsB,KAC/B,eAoDF,CAAC;AAEJ,kDAAkD;AAClD,eAAO,MAAM,4BAA4B,SAChC,UAAU,GAAG,UAAU,eACpB,OAAO,qBAAqB,gBAAgB,KAAG,eAkBxD,CAAC;AAEJ,eAAO,MAAM,mCAAmC,YACrC,OAAO,KACf,eAIU,CAAC;AAEd;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC;IAEnE,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAE7D,QAAQ,CAAC,aAAa,EAAE,MAAM,OAAO,CAAC;IAEtC,QAAQ,CAAC,+BAA+B,EAAE,CACxC,UAAU,EAAE,gBAAgB,EAC5B,OAAO,EAAE,oBAAoB,GAAG,IAAI,KACjC,OAAO,CAAC;IAEb,QAAQ,CAAC,QAAQ,EAAE,CACjB,KAAK,EAAE,SAAS,GAAG,gBAAgB,GAAG,mCAAmC,KACtE,IAAI,CAAC;IAEV,QAAQ,CAAC,MAAM,EAAE,MAAM,eAAe,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,WAAW,CAAC;CACrC;AAED,eAAO,MAAM,2BAA2B,YAC7B,OAAO,WACP;IACP,QAAQ,CAAC,YAAY,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;IAC3D,QAAQ,CAAC,aAAa,CAAC,EAAE,4BAA4B,GAAG,SAAS,CAAC;IAClE,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC;CACnC,GAAG,CACA;IACE,QAAQ,CAAC,WAAW,EAAE,OAAO,WAAW,CAAC,OAAO,CAAC;IACjD,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CAC9C,GACD;IACE,QAAQ,CAAC,WAAW,EAAE,OAAO,WAAW,CAAC,QAAQ,CAAC;IAClD,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;CACvC,GACD;IACE,QAAQ,CAAC,WAAW,EAAE,OAAO,WAAW,CAAC,SAAS,CAAC;CACpD,CACJ,KACA,qBA0LF,CAAC;AAEF,MAAM,WAAW,mCAAoC,SAAQ,SAAS;IACpE,QAAQ,CAAC,IAAI,EAAE,OAAO,SAAS,CAAC,UAAU,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,cAAc,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,MAAM,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAED,eAAO,MAAM,sBAAsB,QAAO,gBAwDzC,CAAC;AAoCF,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,EAAE,aAAa,CAAC;IAEzB,aAAa,CAAC,EAAE,4BAA4B,CAAC;IAE7C,sBAAsB;IACtB,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,oCAAqC,SAAQ,KAAK,CAAC,UAAU,CAAC;IAC7E,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,sCAAuC,SAAQ,KAAK,CAAC,YAAY,CAAC;CAAG;AAEtF,MAAM,WAAW,qCAAsC,SAAQ,KAAK,CAAC,WAAW,CAAC;CAAG;AAEpF,MAAM,MAAM,kCAAkC,GAC1C,oCAAoC,GACpC,sCAAsC,GACtC,qCAAqC,CAAC;AAE1C,eAAO,MAAM,4BAA4B,iBAEvB,UAAU,YACf,mCAAmC,KAC3C,IAAI,CACL,kCAAkC,EAChC,wBAAwB,GACxB,iBAAiB,GACjB,oBAAoB,GACpB,kBAAkB,GAClB,qBAAqB,GACrB,kBAAkB,EACpB,UAAU,CAoHX,CAAC;AAEJ,MAAM,WAAW,kCAAkC;IACjD,8CAA8C;IAC9C,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAEvC,iDAAiD;IACjD,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAEzC,0DAA0D;IAC1D,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC;IAEjE,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,aAAa,CAAC,EAAE,4BAA4B,CAAC;CAC9C;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,iCAAkC,SAAQ,KAAK,CAAC,UAAU,CAAC;IAC1E,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;CACnC;AAED,eAAO,MAAM,2BAA2B,iBAEtB,UAAU,YACf,kCAAkC;AAC3C,sBAAsB;UACb,cAAc,KACtB,IAAI,CACL,iCAAiC,EACjC,wBAAwB,EACxB,UAAU,CA4JX,CAAC;AAudJ,eAAO,MAAM,SAAS,GAAI,CAAC,UACjB,MAAM,UACN,cAAc,eACT,MAAM,CAAC,KACnB,aAAa,CAAC,CAAC,CA2BjB,CAAC;AAOF;;;GAGG;AACH,eAAO,MAAM,YAAY,WAAY,MAAM,UAAU,YAAY,KAAG,IAEnE,CAAC;AAEF,eAAO,MAAM,YAAY,WAAY,MAAM,KAAG,YAqB7C,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,WAAW,WACd,MAAM,SACP,aAAa,CAAC,OAAO,CAAC,KAC5B,IAQF,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,WAAW,WACd,MAAM,SACP,WAAW,KACjB,aAAa,CAAC,OAAO,CAQvB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,SAC5B,cAAc,eACX,WAAW,OAAO,aAAa,KAAG,iBA0C3C,CAAC;AAEJ;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,YAC1B,oBAAoB,OACxB,aAAa,KACjB,MAAM,CACP,QAAQ,EACN,iCAAiC,GACjC,wBAAwB,GACxB,8BAA8B,CA8DjC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,WACvB,MAAM,OACT,cAAc,KAClB,IAoBF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,WAAY,MAAM,KAAG,cAiBrD,CAAC;AAEF,eAAO,MAAM,YAAY,WAAY,MAAM,SAAS,SAAS,CAAC,GAAG,CAAC,KAAG,IAEpE,CAAC;AAEF,eAAO,MAAM,YAAY,6BAAuB,CAAC;AAEjD,eAAO,MAAM,YAAY,WAAY,MAAM,SAAS,MAAM,KAAG,IAI5D,CAAC;AAEF,eAAO,MAAM,YAAY,WAAY,MAAM,KAAG,MAI7C,CAAC;AAEF,eAAO,MAAM,YAAY,WAAY,MAAM,UAAU,MAAM,KAAG,IAE7D,CAAC;AAEF,eAAO,MAAM,YAAY,WAAY,MAAM,KAAG,MAG7C,CAAC;AAMF,eAAO,MAAM,iBAAiB;aAI5B,MAAM;aACN,MAAM;aACN,IAAI;aACJ,KAAK;aAIL,cAAc;aAId,WAAW;aACX,SAAS;aACT,EAAE;aACF,IAAI;aAKJ,0BAA0B;aAE1B,uBAAuB;CAIf,CAAC;AAEX,eAAO,MAAM,iBAAiB,WAAY,MAAM,SAAS,WAAW,KAAG,IAqFtE,CAAC;AAEF,eAAO,MAAM,iBAAiB,WAAY,MAAM,KAAG,WAyDlD,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,2BAA2B,qBACpB,eAAe,gBACnB,OAAO,KACpB,OAOF,CAAC"}
|
|
@@ -177,7 +177,7 @@
|
|
|
177
177
|
*/
|
|
178
178
|
import { Packr } from "msgpackr";
|
|
179
179
|
import { createMutableArray, isNonEmptyArray, } from "../Array.js";
|
|
180
|
-
import { assert, assertNonNullable } from "../Assert.js";
|
|
180
|
+
import { assert, assertNonNullable, assertNotUndefined } from "../Assert.js";
|
|
181
181
|
import { bytesToHex, bytesToUtf8, createBuffer, hexToBytes, utf8ToBytes, } from "../Buffer.js";
|
|
182
182
|
import { createPadmePadding, decryptWithXChaCha20Poly1305, EncryptionKey, encryptWithXChaCha20Poly1305, Entropy24, XChaCha20Poly1305Ciphertext, xChaCha20Poly1305NonceLength, } from "../Crypto.js";
|
|
183
183
|
import { eqArrayNumber } from "../Eq.js";
|
|
@@ -187,7 +187,7 @@ import { err, ok } from "../Result.js";
|
|
|
187
187
|
import { SqliteValue } from "../Sqlite.js";
|
|
188
188
|
import { AbortError } from "../Task.js";
|
|
189
189
|
import { Millis } from "../Time.js";
|
|
190
|
-
import { Base64Url, base64UrlToUint8Array, between, DateIso, Id, IdBytes, idBytesToId, idBytesTypeValueLength, idToIdBytes, Int, Json, jsonToJsonValue, NonNegativeInt,
|
|
190
|
+
import { Base64Url, base64UrlToUint8Array, between, DateIso, FiniteNumber, Id, IdBytes, idBytesToId, idBytesTypeValueLength, idToIdBytes, Int, Json, jsonToJsonValue, NonNegativeInt, onePositiveInt, PositiveInt, uint8ArrayToBase64Url, zeroNonNegativeInt, } from "../Type.js";
|
|
191
191
|
import { OwnerId, OwnerIdBytes, ownerIdToOwnerIdBytes, OwnerWriteKey, ownerWriteKeyLength, } from "./Owner.js";
|
|
192
192
|
import { DbChange, fingerprintSize, InfiniteUpperBound, RangeType, } from "./Storage.js";
|
|
193
193
|
import { Counter, eqTimestamp, NodeId, Timestamp, TimestampBytes, timestampBytesLength, timestampBytesToTimestamp, timestampToTimestampBytes, } from "./Timestamp.js";
|
|
@@ -1177,8 +1177,8 @@ const decodeId = (buffer) => {
|
|
|
1177
1177
|
return idBytesToId(bytes);
|
|
1178
1178
|
};
|
|
1179
1179
|
/**
|
|
1180
|
-
* Evolu uses MessagePack to handle
|
|
1181
|
-
*
|
|
1180
|
+
* Evolu uses MessagePack to handle finite numbers except for NonNegativeInt.
|
|
1181
|
+
* For NonNegativeInt, Evolu provides more efficient encoding.
|
|
1182
1182
|
*/
|
|
1183
1183
|
export const encodeNumber = (buffer, number) => {
|
|
1184
1184
|
buffer.extend(packr.pack(number));
|
|
@@ -1194,7 +1194,7 @@ export const decodeNumber = (buffer) => {
|
|
|
1194
1194
|
const endResult = NonNegativeInt.fromUnknown(end);
|
|
1195
1195
|
if (!endResult.ok)
|
|
1196
1196
|
throw new ProtocolDecodeError(endResult.error.type);
|
|
1197
|
-
const numberResult =
|
|
1197
|
+
const numberResult = FiniteNumber.fromUnknown(number);
|
|
1198
1198
|
if (!numberResult.ok)
|
|
1199
1199
|
throw new ProtocolDecodeError(numberResult.error.type);
|
|
1200
1200
|
buffer.shiftN(endResult.value);
|
|
@@ -1277,7 +1277,7 @@ export const encodeAndEncryptDbChange = (deps) => (message, key) => {
|
|
|
1277
1277
|
const entries = objectToEntries(message.change.values);
|
|
1278
1278
|
encodeLength(buffer, entries);
|
|
1279
1279
|
for (const [column, value] of entries) {
|
|
1280
|
-
|
|
1280
|
+
assertNotUndefined(value);
|
|
1281
1281
|
encodeString(buffer, column);
|
|
1282
1282
|
encodeSqliteValue(buffer, value);
|
|
1283
1283
|
}
|
|
@@ -1456,7 +1456,7 @@ export const encodeSqliteValue = (buffer, value) => {
|
|
|
1456
1456
|
}
|
|
1457
1457
|
else {
|
|
1458
1458
|
encodeNonNegativeInt(buffer, ProtocolValueType.DateIsoWithNegativeTime);
|
|
1459
|
-
encodeNumber(buffer, time);
|
|
1459
|
+
encodeNumber(buffer, FiniteNumber.orThrow(time));
|
|
1460
1460
|
}
|
|
1461
1461
|
return;
|
|
1462
1462
|
}
|
|
@@ -5,8 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { AliasableExpression, Expression, Simplify as KyselySimplify, RawBuilder, SelectQueryNode } from "kysely";
|
|
7
7
|
import type { Brand } from "../Brand.ts";
|
|
8
|
-
import type { SqliteQueryString } from "../Sqlite.ts";
|
|
9
|
-
import { SqliteValue } from "../Sqlite.ts";
|
|
8
|
+
import type { SqliteQueryString, SqliteValueInput } from "../Sqlite.ts";
|
|
10
9
|
import type { EvoluSchema } from "./Schema.ts";
|
|
11
10
|
export { sql as kyselySql } from "kysely";
|
|
12
11
|
export type { NotNull as KyselyNotNull } from "kysely";
|
|
@@ -74,7 +73,7 @@ export type Query<S extends EvoluSchema = EvoluSchema, R extends Row = Row> = Sq
|
|
|
74
73
|
};
|
|
75
74
|
export type InferRow<T extends Query> = T extends Query<any, infer R> ? R : never;
|
|
76
75
|
export interface Row {
|
|
77
|
-
readonly [key: string]:
|
|
76
|
+
readonly [key: string]: SqliteValueInput | Row | ReadonlyArray<Row>;
|
|
78
77
|
}
|
|
79
78
|
/**
|
|
80
79
|
* An improved Evolu version of Kysely's SQLite `jsonArrayFrom` helper.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Query.d.ts","sourceRoot":"","sources":["../../../src/local-first/Query.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,UAAU,EACV,QAAQ,IAAI,cAAc,EAC1B,UAAU,EACV,eAAe,EAChB,MAAM,QAAQ,CAAC;AAYhB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"Query.d.ts","sourceRoot":"","sources":["../../../src/local-first/Query.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ import { AliasNode, ColumnNode, ExpressionWrapper, IdentifierNode, sql as kysely
|
|
|
7
7
|
import { createMutableArray } from "../Array.js";
|
|
8
8
|
import { createRandomBytes } from "../Crypto.js";
|
|
9
9
|
import { createMutableRecord, isPlainObject } from "../Object.js";
|
|
10
|
-
import { eqSqliteValue
|
|
10
|
+
import { eqSqliteValue } from "../Sqlite.js";
|
|
11
11
|
import { createId, String } from "../Type.js";
|
|
12
12
|
export { sql as kyselySql } from "kysely";
|
|
13
13
|
/**
|
|
@@ -21,6 +21,11 @@ export type AnyStandardSchemaV1 = StandardSchemaV1<any, any>;
|
|
|
21
21
|
* Column types are Standard Schema v1 compatible — use Evolu Type, Zod,
|
|
22
22
|
* Valibot, ArkType, or any library that implements Standard Schema.
|
|
23
23
|
*
|
|
24
|
+
* Each column schema's inferred output must be compatible with SQLite. Numeric
|
|
25
|
+
* outputs must be assignable to {@link FiniteNumber}. Standard Schema does not
|
|
26
|
+
* standardize nominal brands, so a library-specific finite validator whose
|
|
27
|
+
* output remains `number` must brand its validated output compatibly.
|
|
28
|
+
*
|
|
24
29
|
* Table schema defines columns that are required for table rows. For optional
|
|
25
30
|
* columns, use a schema whose output type includes `null`.
|
|
26
31
|
*
|
|
@@ -30,7 +35,9 @@ export type AnyStandardSchemaV1 = StandardSchemaV1<any, any>;
|
|
|
30
35
|
* import * as z from "zod";
|
|
31
36
|
* import {
|
|
32
37
|
* assertOk,
|
|
38
|
+
* assertType,
|
|
33
39
|
* assertTrue,
|
|
40
|
+
* type FiniteNumber,
|
|
34
41
|
* id,
|
|
35
42
|
* NonEmptyTrimmedString100,
|
|
36
43
|
* nullOr,
|
|
@@ -51,10 +58,17 @@ export type AnyStandardSchemaV1 = StandardSchemaV1<any, any>;
|
|
|
51
58
|
* assertOk(Schema.todo.title.fromUnknown("Write docs"), "Write docs");
|
|
52
59
|
*
|
|
53
60
|
* // Zod, or another Standard Schema library
|
|
61
|
+
* // Zod 4 numbers are finite by default; Evolu Type Number models all JavaScript numbers.
|
|
62
|
+
* const ZodFiniteNumber = z
|
|
63
|
+
* .number()
|
|
64
|
+
* .transform((value): FiniteNumber => value as FiniteNumber);
|
|
65
|
+
* assertType<FiniteNumber, z.output<typeof ZodFiniteNumber>>();
|
|
66
|
+
*
|
|
54
67
|
* const ZodSchema = {
|
|
55
68
|
* todo: {
|
|
56
69
|
* id: TodoId,
|
|
57
70
|
* title: z.string().min(1).max(100),
|
|
71
|
+
* position: ZodFiniteNumber,
|
|
58
72
|
* isCompleted: z.union([z.literal(0), z.literal(1)]).nullable(),
|
|
59
73
|
* },
|
|
60
74
|
* };
|
|
@@ -244,7 +258,7 @@ export type UpsertValues<T extends TableSchema> = NullableColumnsToOptional<T> &
|
|
|
244
258
|
export type ValidateSchemaHasId<S extends EvoluSchema> = keyof S extends infer TableName ? TableName extends keyof S ? "id" extends keyof S[TableName] ? never : SchemaValidationError<`Table "${TableName & string}" is missing required id column.`> : never : never;
|
|
245
259
|
export type ValidateIdColumnType<S extends EvoluSchema> = keyof S extends infer TableName ? TableName extends keyof S ? "id" extends keyof S[TableName] ? StandardSchemaV1.InferOutput<S[TableName]["id"]> extends Id ? never : SchemaValidationError<`Table "${TableName & string}" id column output type must extend Id. Use id("${TableName & string}") from Evolu Type.`> : never : never : never;
|
|
246
260
|
export type ValidateNoSystemColumns<S extends EvoluSchema> = keyof S extends infer TableName ? TableName extends keyof S ? keyof S[TableName] extends infer ColumnName ? ColumnName extends keyof S[TableName] ? ColumnName extends "createdAt" | "updatedAt" | "isDeleted" | "ownerId" ? SchemaValidationError<`Table "${TableName & string}" uses system column name "${ColumnName & string}". System columns (createdAt, updatedAt, isDeleted, ownerId) are added automatically.`> : never : never : never : never : never;
|
|
247
|
-
export type ValidateColumnTypes<S extends EvoluSchema> = keyof S extends infer TableName ? TableName extends keyof S ? keyof S[TableName] extends infer ColumnName ? ColumnName extends keyof S[TableName] ? StandardSchemaV1.InferOutput<S[TableName][ColumnName]> extends SqliteValue ? never : SchemaValidationError<`Table "${TableName & string}" column "${ColumnName & string}" type is not compatible with SQLite. Column types must extend SqliteValue (string,
|
|
261
|
+
export type ValidateColumnTypes<S extends EvoluSchema> = keyof S extends infer TableName ? TableName extends keyof S ? keyof S[TableName] extends infer ColumnName ? ColumnName extends keyof S[TableName] ? StandardSchemaV1.InferOutput<S[TableName][ColumnName]> extends SqliteValue | SqliteBoolean ? never : SchemaValidationError<`Table "${TableName & string}" column "${ColumnName & string}" type is not compatible with SQLite. Column types must extend SqliteValue (string, FiniteNumber, Uint8Array, or null).`> : never : never : never : never;
|
|
248
262
|
/** Schema validation error that shows clear, readable messages */
|
|
249
263
|
export type SchemaValidationError<Message extends string> = CompileTimeError<"Schema", Message>;
|
|
250
264
|
/** Makes columns whose output type includes `null` optional. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../../../src/local-first/Schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAML,aAAa,EACb,KAAK,SAAS,EAGd,KAAK,kBAAkB,
|
|
1
|
+
{"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../../../src/local-first/Schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
import * as Kysely from "kysely";
|
|
7
7
|
import { assertNonNullable } from "../Assert.js";
|
|
8
8
|
import { getOwnProp, mapObject } from "../Object.js";
|
|
9
|
-
import { eqSqliteIndex, getSqliteSchema, sql, sqliteQueryToSqliteQueryString, SqliteBoolean, SqliteValue, } from "../Sqlite.js";
|
|
10
|
-
import { DateIso, IdBytes, Null, nullOr, object, } from "../Type.js";
|
|
9
|
+
import { eqSqliteIndex, getSqliteSchema, sql, sqliteQueryToSqliteQueryString, SqliteBoolean, SqliteQueryParameters, SqliteValue, } from "../Sqlite.js";
|
|
10
|
+
import { assertType, DateIso, IdBytes, Null, nullOr, object, } from "../Type.js";
|
|
11
11
|
import { OwnerId } from "./Owner.js";
|
|
12
12
|
import { TimestampBytes } from "./Timestamp.js";
|
|
13
13
|
/**
|
|
@@ -94,6 +94,7 @@ export const evoluSchemaToSqliteSchema = (schema, indexesConfig) => {
|
|
|
94
94
|
export const createQueryBuilder = (_schema) => {
|
|
95
95
|
const createQuery = (queryCallback, options) => {
|
|
96
96
|
const compiledQuery = queryCallback(kysely).compile();
|
|
97
|
+
assertType(SqliteQueryParameters, compiledQuery.parameters);
|
|
97
98
|
const sqliteQuery = {
|
|
98
99
|
sql: compiledQuery.sql,
|
|
99
100
|
parameters: compiledQuery.parameters,
|
|
@@ -181,9 +181,9 @@ export interface CrdtMessage {
|
|
|
181
181
|
}
|
|
182
182
|
/** Test helper for creating a simple {@link CrdtMessage}. */
|
|
183
183
|
export declare const testCreateCrdtMessage: (id: Id, millis: number, name: string) => CrdtMessage;
|
|
184
|
-
export declare const DbChangeValues: import("../Type.ts").RecordType<import("../Type.ts").Type<"String", string, string, import("../Type.ts").TypeOfError<"String">, null, import("../Type.ts").TypeOfError<"String">, never, string, true>, UnionType<readonly [import("../Type.ts").
|
|
184
|
+
export declare const DbChangeValues: import("../Type.ts").RecordType<import("../Type.ts").Type<"String", string, string, import("../Type.ts").TypeOfError<"String">, null, import("../Type.ts").TypeOfError<"String">, never, string, true>, UnionType<readonly [import("../Type.ts").BrandType<import("../Type.ts").BrandType<import("../Type.ts").Type<"Number", number, number, import("../Type.ts").TypeOfError<"Number">, null, import("../Type.ts").TypeOfError<"Number">, never, number, true>, "NonNaN", import("../Type.ts").NonNaNError>, "Finite", import("../Type.ts").FiniteError>, import("../Type.ts").LiteralType<null>, import("../Type.ts").Type<"String", string, string, import("../Type.ts").TypeOfError<"String">, null, import("../Type.ts").TypeOfError<"String">, never, string, true>, import("../Type.ts").Type<"Uint8Array", Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>, import("../Type.ts").ObjectTagError<"Uint8Array">, null, import("../Type.ts").ObjectTagError<"Uint8Array">, never, Uint8Array<ArrayBufferLike>, true>]>>;
|
|
185
185
|
export type DbChangeValues = typeof DbChangeValues.Output;
|
|
186
|
-
export declare const ValidDbChangeValues: import("../Type.ts").BrandType<import("../Type.ts").RecordType<import("../Type.ts").Type<"String", string, string, import("../Type.ts").TypeOfError<"String">, null, import("../Type.ts").TypeOfError<"String">, never, string, true>, UnionType<readonly [import("../Type.ts").
|
|
186
|
+
export declare const ValidDbChangeValues: import("../Type.ts").BrandType<import("../Type.ts").RecordType<import("../Type.ts").Type<"String", string, string, import("../Type.ts").TypeOfError<"String">, null, import("../Type.ts").TypeOfError<"String">, never, string, true>, UnionType<readonly [import("../Type.ts").BrandType<import("../Type.ts").BrandType<import("../Type.ts").Type<"Number", number, number, import("../Type.ts").TypeOfError<"Number">, null, import("../Type.ts").TypeOfError<"Number">, never, number, true>, "NonNaN", import("../Type.ts").NonNaNError>, "Finite", import("../Type.ts").FiniteError>, import("../Type.ts").LiteralType<null>, import("../Type.ts").Type<"String", string, string, import("../Type.ts").TypeOfError<"String">, null, import("../Type.ts").TypeOfError<"String">, never, string, true>, import("../Type.ts").Type<"Uint8Array", Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>, import("../Type.ts").ObjectTagError<"Uint8Array">, null, import("../Type.ts").ObjectTagError<"Uint8Array">, never, Uint8Array<ArrayBufferLike>, true>]>>, "ValidDbChangeValues", ValidDbChangeValuesError>;
|
|
187
187
|
export type ValidDbChangeValues = typeof ValidDbChangeValues.Output;
|
|
188
188
|
export interface ValidDbChangeValuesError extends TypeError<"ValidDbChangeValues"> {
|
|
189
189
|
readonly value: DbChangeValues;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Storage.d.ts","sourceRoot":"","sources":["../../../src/local-first/Storage.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Storage.d.ts","sourceRoot":"","sources":["../../../src/local-first/Storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EACL,OAAO,EAEP,EAAE,EACF,KAAK,SAAS,EAEd,cAAc,EACd,IAAI,EAGJ,KAAK,UAAU,EACf,WAAW,EAEX,MAAM,EACN,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAS,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,EAGL,SAAS,EACT,cAAc,EACf,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,aAAa;IAC5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiDG;IACH,QAAQ,CAAC,kBAAkB,EAAE,CAC3B,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,WAAW,KACvB,SAAS,CAAC,OAAO,CAAC,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,cAAc,CAAC;IAE5D,QAAQ,CAAC,WAAW,EAAE,CACpB,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,cAAc,EACrB,GAAG,EAAE,cAAc,KAChB,WAAW,CAAC;IAEjB;;;;;;OAMG;IACH,QAAQ,CAAC,iBAAiB,EAAE,CAC1B,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,aAAa,CAAC,cAAc,CAAC,EACtC,UAAU,CAAC,EAAE,eAAe,KACzB,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAErC,QAAQ,CAAC,cAAc,EAAE,CACvB,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,cAAc,EACrB,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,eAAe,KACxB,cAAc,CAAC;IAEpB,QAAQ,CAAC,OAAO,EAAE,CAChB,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,cAAc,EACrB,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,KAAK,OAAO,KACpE,IAAI,CAAC;IAEV;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,EAAE,CACzB,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,aAAa,KACpB,OAAO,CAAC;IAEb,kEAAkE;IAClE,QAAQ,CAAC,WAAW,EAAE,CACpB,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,aAAa,KACpB,IAAI,CAAC;IAEV;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,EAAE,CACtB,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,qBAAqB,CAAC,oBAAoB,CAAC,KAClD,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;IAEnC,qDAAqD;IACrD,QAAQ,CAAC,YAAY,EAAE,CACrB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,cAAc,KACtB,iBAAiB,CAAC;IAEvB,mDAAmD;IACnD,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;CACvD;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,uDAAuD;AACvD,MAAM,WAAW,iBACf,SAAQ,UAAU,EAAE,KAAK,CAAC,mBAAmB,CAAC;CAAG;AAEnD;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;AAE5D,eAAO,MAAM,eAAe,kFAA2C,CAAC;AAExE,uCAAuC;AACvC,eAAO,MAAM,eAAe,EAEvB,WAAW,CAAC;AAEjB,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;CACtC;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,kBAAkB,CAAC;AAElE,eAAO,MAAM,kBAAkB,eAE9B,CAAC;AACF,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAC;AAE3D,eAAO,MAAM,SAAS;aACpB,WAAW,EAAE,CAAC;aACd,IAAI,EAAE,CAAC;aACP,UAAU,EAAE,CAAC;CACL,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAEnE,MAAM,WAAW,SAAU,SAAQ,SAAS;IAC1C,QAAQ,CAAC,IAAI,EAAE,OAAO,SAAS,CAAC,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,gBAAiB,SAAQ,SAAS;IACjD,QAAQ,CAAC,IAAI,EAAE,OAAO,SAAS,CAAC,WAAW,CAAC;IAC5C,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;CACnC;AAED,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAChD,QAAQ,CAAC,IAAI,EAAE,OAAO,SAAS,CAAC,UAAU,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;CACpD;AAED,MAAM,MAAM,KAAK,GAAG,SAAS,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAEnE,wCAAwC;AACxC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;CACpC;AAED,yBAAyB;AACzB,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAExE;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;CAC3B;AAED,6DAA6D;AAC7D,eAAO,MAAM,qBAAqB,OAC5B,EAAE,UACE,MAAM,QACR,MAAM,KACX,WAYD,CAAC;AAEH,eAAO,MAAM,cAAc,w+BAA4C,CAAC;AACxE,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,MAAM,CAAC;AAE1D,eAAO,MAAM,mBAAmB,yjCAgB/B,CAAC;AACF,MAAM,MAAM,mBAAmB,GAAG,OAAO,mBAAmB,CAAC,MAAM,CAAC;AAEpE,MAAM,WAAW,wBAAyB,SAAQ,SAAS,CAAC,qBAAqB,CAAC;IAChF,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAChD;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,OAAO,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,OAAO,mBAAmB,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,OAAO,OAAO,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,SAAS,CAAC,OAAO,OAAO,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC;CACtE,CAMC,CAAC;AACH,MAAM,WAAW,QAAS,SAAQ,SAAS,CAAC,OAAO,QAAQ,CAAC;CAAG;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAC7C,OAAO,EACP,kBAAkB,GAAG,aAAa,GAAG,eAAe,GAAG,cAAc,CACtE;IACC,wEAAwE;IACxE,QAAQ,CAAC,eAAe,EAAE,CACxB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,cAAc,EACzB,QAAQ,EAAE,8BAA8B,KACrC,IAAI,CAAC;IAEV;;;OAGG;IACH,QAAQ,CAAC,qBAAqB,EAAE,CAC9B,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,qBAAqB,CAAC,cAAc,CAAC,KACnD,aAAa,CAAC,cAAc,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;CAC/C;AAED,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,SAAS,CAAC;AAEtD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,uBAAuB,SAC5B,iBAAiB,KACtB,iBAyFD,CAAC;AAMH,eAAO,MAAM,6BAA6B,SAAU,SAAS,KAAG,IAgE/D,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE7E;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,cAC1B,cAAc,kBACT,cAAc,iBACf,cAAc,KAC5B,CACD,QAAQ,EAAE,8BAA8B,EACxC,cAAc,EAAE,cAAc,EAC9B,aAAa,EAAE,cAAc,CAS9B,CAAC;AAoeF,eAAO,MAAM,2BAA2B,cAC3B,cAAc,KACxB,WAGF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,eACxB,aAAa,CAAC,cAAc,CAAC,KACxC,WAUE,CAAC;AAkYN,eAAO,MAAM,mBAAmB,SACvB,SAAS,eACN,YAAY,SAAS,cAAc,KAAG,cA4E/C,CAAC;AAEJ,4EAA4E;AAC5E,eAAO,MAAM,uBAAuB,SAC3B,SAAS,oBAEA,YAAY,oBACR,cAAc,KAC/B;IACD,QAAQ,CAAC,WAAW,EAAE,cAAc,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAC;CA6BxC,CAAC;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,SACpB,SAAS,oBAEA,YAAY,eACb,WAAW,kBACR,cAAc,iBACf,cAAc,KAC5B,IAYF,CAAC"}
|
package/package.json
CHANGED
package/src/Sqlite.ts
CHANGED
|
@@ -8,19 +8,19 @@ import type { Brand } from "./Brand.ts";
|
|
|
8
8
|
import { bytesToHex, hexToBytes } from "./Buffer.ts";
|
|
9
9
|
import type { EncryptionKey } from "./Crypto.ts";
|
|
10
10
|
import type { Eq } from "./Eq.ts";
|
|
11
|
-
import { createEqObject,
|
|
11
|
+
import { createEqObject, eqString, eqUint8Array } from "./Eq.ts";
|
|
12
12
|
import { disposable } from "./Function.ts";
|
|
13
13
|
import { createMutableRecord, objectToEntries } from "./Object.ts";
|
|
14
14
|
import type { Result } from "./Result.ts";
|
|
15
15
|
import { ok } from "./Result.ts";
|
|
16
|
-
import {
|
|
16
|
+
import { type Task, testCreateRun, type TestRunDep } from "./Task.ts";
|
|
17
17
|
import {
|
|
18
18
|
array,
|
|
19
19
|
type ArrayType,
|
|
20
|
+
FiniteNumber,
|
|
20
21
|
type InferType,
|
|
21
22
|
type Name,
|
|
22
23
|
Null,
|
|
23
|
-
Number,
|
|
24
24
|
object,
|
|
25
25
|
type ObjectType,
|
|
26
26
|
record,
|
|
@@ -79,7 +79,7 @@ export interface SqliteTransaction {
|
|
|
79
79
|
/** Represents a SQL query to be executed on a {@link Sqlite} database. */
|
|
80
80
|
export interface SqliteQuery {
|
|
81
81
|
readonly sql: SafeSql;
|
|
82
|
-
readonly parameters:
|
|
82
|
+
readonly parameters: SqliteQueryParameters;
|
|
83
83
|
readonly options?: SqliteQueryOptions;
|
|
84
84
|
}
|
|
85
85
|
|
|
@@ -92,20 +92,38 @@ export type SafeSql = string & Brand<"SafeSql">;
|
|
|
92
92
|
/**
|
|
93
93
|
* A value that can be stored in {@link Sqlite}.
|
|
94
94
|
*
|
|
95
|
+
* Numeric values use {@link FiniteNumber} because JavaScript numbers also
|
|
96
|
+
* include `NaN` and infinities. SQLite binds `NaN` as `NULL`, while JSON
|
|
97
|
+
* serialization converts all non-finite numbers to `null`. Restricting numbers
|
|
98
|
+
* to finite values preserves them across storage and query serialization.
|
|
99
|
+
*
|
|
95
100
|
* Note that Evolu can't support Int64 because expo-sqlite (and some others) do
|
|
96
101
|
* not support it.
|
|
97
102
|
*/
|
|
98
103
|
export const SqliteValue = /*#__PURE__*/ union(
|
|
104
|
+
FiniteNumber,
|
|
99
105
|
Null,
|
|
100
106
|
String,
|
|
101
|
-
Number,
|
|
102
107
|
Uint8Array,
|
|
103
108
|
);
|
|
104
109
|
export type SqliteValue = typeof SqliteValue.Output;
|
|
105
110
|
|
|
106
|
-
/**
|
|
107
|
-
export const
|
|
108
|
-
|
|
111
|
+
/** Parameters of a {@link SqliteQuery}. */
|
|
112
|
+
export const SqliteQueryParameters = /*#__PURE__*/ array(SqliteValue);
|
|
113
|
+
export type SqliteQueryParameters = typeof SqliteQueryParameters.Output;
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* A value used in {@link sql} template parameters and {@link Sqlite} query
|
|
117
|
+
* results.
|
|
118
|
+
*
|
|
119
|
+
* It differs from {@link SqliteValue} only by using `number` instead of
|
|
120
|
+
* {@link FiniteNumber}.
|
|
121
|
+
*/
|
|
122
|
+
export type SqliteValueInput = typeof SqliteValue.Input;
|
|
123
|
+
|
|
124
|
+
/** Equality comparison for {@link SqliteValueInput}. */
|
|
125
|
+
export const eqSqliteValue: Eq<SqliteValueInput> = (x, y) =>
|
|
126
|
+
Uint8Array.is(x) && Uint8Array.is(y) ? eqUint8Array(x, y) : x === y;
|
|
109
127
|
|
|
110
128
|
/** Options for configuring {@link SqliteQuery} execution behavior. */
|
|
111
129
|
export interface SqliteQueryOptions {
|
|
@@ -139,7 +157,7 @@ export const sqliteQueryToSqliteQueryString = (
|
|
|
139
157
|
query: SqliteQuery,
|
|
140
158
|
): SqliteQueryString => {
|
|
141
159
|
const params = query.parameters.map((value) =>
|
|
142
|
-
value
|
|
160
|
+
Uint8Array.is(value)
|
|
143
161
|
? (["b", bytesToHex(value)] as const)
|
|
144
162
|
: (["j", value] as const),
|
|
145
163
|
);
|
|
@@ -157,7 +175,9 @@ export const sqliteQueryStringToSqliteQuery = (
|
|
|
157
175
|
): SqliteQuery => {
|
|
158
176
|
const [sql, paramsArr, optionsArr] = JSON.parse(query) as [
|
|
159
177
|
SafeSql,
|
|
160
|
-
Array<
|
|
178
|
+
Array<
|
|
179
|
+
readonly ["b", string] | readonly ["j", string | FiniteNumber | null]
|
|
180
|
+
>,
|
|
161
181
|
Array<Array<string | number | null>>,
|
|
162
182
|
];
|
|
163
183
|
|
|
@@ -184,9 +204,9 @@ export interface SqliteExecResult<R extends SqliteRow = SqliteRow> {
|
|
|
184
204
|
|
|
185
205
|
/**
|
|
186
206
|
* A row returned from a {@link Sqlite} query, mapping column names to
|
|
187
|
-
* {@link
|
|
207
|
+
* {@link SqliteValueInput}.
|
|
188
208
|
*/
|
|
189
|
-
export type SqliteRow = Record<string,
|
|
209
|
+
export type SqliteRow = Record<string, SqliteValueInput>;
|
|
190
210
|
|
|
191
211
|
/**
|
|
192
212
|
* SQLite driver interface.
|
|
@@ -423,7 +443,7 @@ export interface RawSql extends Typed<"RawSql"> {
|
|
|
423
443
|
}
|
|
424
444
|
|
|
425
445
|
/** A parameter accepted by the {@link sql} tagged template. */
|
|
426
|
-
export type SqlTemplateParam =
|
|
446
|
+
export type SqlTemplateParam = SqliteValueInput | SqlIdentifier | RawSql;
|
|
427
447
|
|
|
428
448
|
/**
|
|
429
449
|
* Creates a safe SQL query using a tagged template literal.
|
|
@@ -484,7 +504,7 @@ export const sql = (
|
|
|
484
504
|
sql += param.sql;
|
|
485
505
|
} else {
|
|
486
506
|
sql += "?";
|
|
487
|
-
values.push(param);
|
|
507
|
+
values.push(SqliteValue.orThrow(param));
|
|
488
508
|
}
|
|
489
509
|
}
|
|
490
510
|
}
|
|
@@ -647,8 +667,6 @@ export const getSqliteSnapshot = (deps: SqliteDep): SqliteSnapshot => {
|
|
|
647
667
|
*
|
|
648
668
|
* See: https://www.sqlite.org/quirks.html#no_separate_boolean_datatype
|
|
649
669
|
*
|
|
650
|
-
* ## Tips
|
|
651
|
-
*
|
|
652
670
|
* - Use {@link sqliteTrue} and {@link sqliteFalse} constants for better
|
|
653
671
|
* readability.
|
|
654
672
|
* - Use {@link booleanToSqliteBoolean} and {@link sqliteBooleanToBoolean} for
|
package/src/local-first/Db.ts
CHANGED
|
@@ -45,6 +45,7 @@ import { callback, type Run, type Task } from "../Task.ts";
|
|
|
45
45
|
import { Millis, millisToDateIso, type TimeDep } from "../Time.ts";
|
|
46
46
|
import {
|
|
47
47
|
assertType,
|
|
48
|
+
type FiniteNumber,
|
|
48
49
|
Id,
|
|
49
50
|
IdBytes,
|
|
50
51
|
idBytesToId,
|
|
@@ -942,7 +943,8 @@ const dbChangeToColumns = (change: DbChange, now: Millis) => {
|
|
|
942
943
|
if (change.isDelete != null) {
|
|
943
944
|
values = appendToArray(values, [
|
|
944
945
|
"isDeleted",
|
|
945
|
-
|
|
946
|
+
// SQLite boolean values are fixed to the finite numbers 0 and 1.
|
|
947
|
+
booleanToSqliteBoolean(change.isDelete) as FiniteNumber,
|
|
946
948
|
]);
|
|
947
949
|
}
|
|
948
950
|
|
|
@@ -183,7 +183,7 @@ import {
|
|
|
183
183
|
isNonEmptyArray,
|
|
184
184
|
type NonEmptyReadonlyArray,
|
|
185
185
|
} from "../Array.ts";
|
|
186
|
-
import { assert, assertNonNullable } from "../Assert.ts";
|
|
186
|
+
import { assert, assertNonNullable, assertNotUndefined } from "../Assert.ts";
|
|
187
187
|
import type { Brand } from "../Brand.ts";
|
|
188
188
|
import {
|
|
189
189
|
type Buffer,
|
|
@@ -217,6 +217,7 @@ import {
|
|
|
217
217
|
base64UrlToUint8Array,
|
|
218
218
|
between,
|
|
219
219
|
DateIso,
|
|
220
|
+
FiniteNumber,
|
|
220
221
|
Id,
|
|
221
222
|
IdBytes,
|
|
222
223
|
idBytesToId,
|
|
@@ -226,7 +227,6 @@ import {
|
|
|
226
227
|
Json,
|
|
227
228
|
jsonToJsonValue,
|
|
228
229
|
NonNegativeInt,
|
|
229
|
-
Number,
|
|
230
230
|
onePositiveInt,
|
|
231
231
|
PositiveInt,
|
|
232
232
|
type Typed,
|
|
@@ -1775,14 +1775,14 @@ const decodeId = (buffer: Buffer): Id => {
|
|
|
1775
1775
|
};
|
|
1776
1776
|
|
|
1777
1777
|
/**
|
|
1778
|
-
* Evolu uses MessagePack to handle
|
|
1779
|
-
*
|
|
1778
|
+
* Evolu uses MessagePack to handle finite numbers except for NonNegativeInt.
|
|
1779
|
+
* For NonNegativeInt, Evolu provides more efficient encoding.
|
|
1780
1780
|
*/
|
|
1781
|
-
export const encodeNumber = (buffer: Buffer, number:
|
|
1781
|
+
export const encodeNumber = (buffer: Buffer, number: FiniteNumber): void => {
|
|
1782
1782
|
buffer.extend(packr.pack(number));
|
|
1783
1783
|
};
|
|
1784
1784
|
|
|
1785
|
-
export const decodeNumber = (buffer: Buffer):
|
|
1785
|
+
export const decodeNumber = (buffer: Buffer): FiniteNumber => {
|
|
1786
1786
|
let number: unknown;
|
|
1787
1787
|
let end: unknown;
|
|
1788
1788
|
|
|
@@ -1798,7 +1798,7 @@ export const decodeNumber = (buffer: Buffer): number => {
|
|
|
1798
1798
|
const endResult = NonNegativeInt.fromUnknown(end);
|
|
1799
1799
|
if (!endResult.ok) throw new ProtocolDecodeError(endResult.error.type);
|
|
1800
1800
|
|
|
1801
|
-
const numberResult =
|
|
1801
|
+
const numberResult = FiniteNumber.fromUnknown(number);
|
|
1802
1802
|
if (!numberResult.ok) throw new ProtocolDecodeError(numberResult.error.type);
|
|
1803
1803
|
|
|
1804
1804
|
buffer.shiftN(endResult.value);
|
|
@@ -1898,7 +1898,7 @@ export const encodeAndEncryptDbChange =
|
|
|
1898
1898
|
|
|
1899
1899
|
encodeLength(buffer, entries);
|
|
1900
1900
|
for (const [column, value] of entries) {
|
|
1901
|
-
|
|
1901
|
+
assertNotUndefined(value);
|
|
1902
1902
|
encodeString(buffer, column);
|
|
1903
1903
|
encodeSqliteValue(buffer, value);
|
|
1904
1904
|
}
|
|
@@ -2140,7 +2140,7 @@ export const encodeSqliteValue = (buffer: Buffer, value: SqliteValue): void => {
|
|
|
2140
2140
|
buffer,
|
|
2141
2141
|
ProtocolValueType.DateIsoWithNegativeTime,
|
|
2142
2142
|
);
|
|
2143
|
-
encodeNumber(buffer, time);
|
|
2143
|
+
encodeNumber(buffer, FiniteNumber.orThrow(time));
|
|
2144
2144
|
}
|
|
2145
2145
|
return;
|
|
2146
2146
|
}
|
package/src/local-first/Query.ts
CHANGED
|
@@ -26,8 +26,8 @@ import type { Brand } from "../Brand.ts";
|
|
|
26
26
|
import { createRandomBytes } from "../Crypto.ts";
|
|
27
27
|
import type { ReadonlyRecord } from "../Object.ts";
|
|
28
28
|
import { createMutableRecord, isPlainObject } from "../Object.ts";
|
|
29
|
-
import type { SqliteQueryString } from "../Sqlite.ts";
|
|
30
|
-
import { eqSqliteValue
|
|
29
|
+
import type { SqliteQueryString, SqliteValueInput } from "../Sqlite.ts";
|
|
30
|
+
import { eqSqliteValue } from "../Sqlite.ts";
|
|
31
31
|
import { createId, String } from "../Type.ts";
|
|
32
32
|
import type { EvoluSchema } from "./Schema.ts";
|
|
33
33
|
|
|
@@ -107,7 +107,7 @@ export type InferRow<T extends Query> =
|
|
|
107
107
|
|
|
108
108
|
export interface Row {
|
|
109
109
|
readonly [key: string]:
|
|
110
|
-
|
|
|
110
|
+
| SqliteValueInput
|
|
111
111
|
// for evoluJsonObjectFrom
|
|
112
112
|
| Row
|
|
113
113
|
// for evoluJsonArrayFrom
|
|
@@ -400,8 +400,8 @@ export const makePatches = (
|
|
|
400
400
|
for (const key in previousRow)
|
|
401
401
|
if (
|
|
402
402
|
!eqSqliteValue(
|
|
403
|
-
previousRow[key] as
|
|
404
|
-
nextRow[key] as
|
|
403
|
+
previousRow[key] as SqliteValueInput,
|
|
404
|
+
nextRow[key] as SqliteValueInput,
|
|
405
405
|
)
|
|
406
406
|
) {
|
|
407
407
|
replaceAtPatches.push({ op: "replaceAt", value: nextRow, index: i });
|
|
@@ -19,11 +19,14 @@ import {
|
|
|
19
19
|
type SqliteIndex,
|
|
20
20
|
type SqliteQuery,
|
|
21
21
|
type SqliteQueryOptions,
|
|
22
|
+
SqliteQueryParameters,
|
|
22
23
|
type SqliteSchema,
|
|
23
24
|
SqliteValue,
|
|
24
25
|
} from "../Sqlite.ts";
|
|
25
26
|
import {
|
|
27
|
+
assertType,
|
|
26
28
|
DateIso,
|
|
29
|
+
type FiniteNumber,
|
|
27
30
|
type Id,
|
|
28
31
|
IdBytes,
|
|
29
32
|
type InferType,
|
|
@@ -54,6 +57,11 @@ export type AnyStandardSchemaV1 = StandardSchemaV1<any, any>;
|
|
|
54
57
|
* Column types are Standard Schema v1 compatible — use Evolu Type, Zod,
|
|
55
58
|
* Valibot, ArkType, or any library that implements Standard Schema.
|
|
56
59
|
*
|
|
60
|
+
* Each column schema's inferred output must be compatible with SQLite. Numeric
|
|
61
|
+
* outputs must be assignable to {@link FiniteNumber}. Standard Schema does not
|
|
62
|
+
* standardize nominal brands, so a library-specific finite validator whose
|
|
63
|
+
* output remains `number` must brand its validated output compatibly.
|
|
64
|
+
*
|
|
57
65
|
* Table schema defines columns that are required for table rows. For optional
|
|
58
66
|
* columns, use a schema whose output type includes `null`.
|
|
59
67
|
*
|
|
@@ -63,7 +71,9 @@ export type AnyStandardSchemaV1 = StandardSchemaV1<any, any>;
|
|
|
63
71
|
* import * as z from "zod";
|
|
64
72
|
* import {
|
|
65
73
|
* assertOk,
|
|
74
|
+
* assertType,
|
|
66
75
|
* assertTrue,
|
|
76
|
+
* type FiniteNumber,
|
|
67
77
|
* id,
|
|
68
78
|
* NonEmptyTrimmedString100,
|
|
69
79
|
* nullOr,
|
|
@@ -84,10 +94,17 @@ export type AnyStandardSchemaV1 = StandardSchemaV1<any, any>;
|
|
|
84
94
|
* assertOk(Schema.todo.title.fromUnknown("Write docs"), "Write docs");
|
|
85
95
|
*
|
|
86
96
|
* // Zod, or another Standard Schema library
|
|
97
|
+
* // Zod 4 numbers are finite by default; Evolu Type Number models all JavaScript numbers.
|
|
98
|
+
* const ZodFiniteNumber = z
|
|
99
|
+
* .number()
|
|
100
|
+
* .transform((value): FiniteNumber => value as FiniteNumber);
|
|
101
|
+
* assertType<FiniteNumber, z.output<typeof ZodFiniteNumber>>();
|
|
102
|
+
*
|
|
87
103
|
* const ZodSchema = {
|
|
88
104
|
* todo: {
|
|
89
105
|
* id: TodoId,
|
|
90
106
|
* title: z.string().min(1).max(100),
|
|
107
|
+
* position: ZodFiniteNumber,
|
|
91
108
|
* isCompleted: z.union([z.literal(0), z.literal(1)]).nullable(),
|
|
92
109
|
* },
|
|
93
110
|
* };
|
|
@@ -377,11 +394,10 @@ export type ValidateColumnTypes<S extends EvoluSchema> =
|
|
|
377
394
|
? TableName extends keyof S
|
|
378
395
|
? keyof S[TableName] extends infer ColumnName
|
|
379
396
|
? ColumnName extends keyof S[TableName]
|
|
380
|
-
? StandardSchemaV1.InferOutput<
|
|
381
|
-
|
|
382
|
-
> extends SqliteValue
|
|
397
|
+
? StandardSchemaV1.InferOutput<S[TableName][ColumnName]> extends
|
|
398
|
+
SqliteValue | SqliteBoolean
|
|
383
399
|
? never
|
|
384
|
-
: SchemaValidationError<`Table "${TableName & string}" column "${ColumnName & string}" type is not compatible with SQLite. Column types must extend SqliteValue (string,
|
|
400
|
+
: SchemaValidationError<`Table "${TableName & string}" column "${ColumnName & string}" type is not compatible with SQLite. Column types must extend SqliteValue (string, FiniteNumber, Uint8Array, or null).`>
|
|
385
401
|
: never
|
|
386
402
|
: never
|
|
387
403
|
: never
|
|
@@ -492,11 +508,10 @@ export const createQueryBuilder = <S extends EvoluSchema>(
|
|
|
492
508
|
): CreateQuery<S> => {
|
|
493
509
|
const createQuery: CreateQuery<S> = (queryCallback, options) => {
|
|
494
510
|
const compiledQuery = queryCallback(kysely as never).compile();
|
|
511
|
+
assertType(SqliteQueryParameters, compiledQuery.parameters);
|
|
495
512
|
const sqliteQuery: SqliteQuery = {
|
|
496
513
|
sql: compiledQuery.sql as SafeSql,
|
|
497
|
-
parameters: compiledQuery.parameters
|
|
498
|
-
SqliteQuery["parameters"]
|
|
499
|
-
>,
|
|
514
|
+
parameters: compiledQuery.parameters,
|
|
500
515
|
...(options && { options }),
|
|
501
516
|
};
|
|
502
517
|
|