@evolu/common 4.0.0 → 4.0.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/Db.d.ts +3 -11
- package/dist/src/Db.d.ts.map +1 -1
- package/dist/src/Db.js +4 -4
- package/dist/src/Evolu.d.ts +4 -5
- package/dist/src/Evolu.d.ts.map +1 -1
- package/dist/src/Evolu.js +7 -7
- package/dist/src/Model.d.ts.map +1 -1
- package/dist/src/Platform.d.ts +0 -2
- package/dist/src/Platform.d.ts.map +1 -1
- package/dist/src/Platform.js +0 -1
- package/dist/src/Sql.d.ts +10 -10
- package/dist/src/Sql.d.ts.map +1 -1
- package/dist/src/Sql.js +44 -44
- package/dist/src/Sqlite.d.ts +1 -0
- package/dist/src/Sqlite.d.ts.map +1 -1
- package/dist/src/Sqlite.js +11 -0
- package/dist/src/Store.d.ts +1 -1
- package/dist/src/Store.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/Db.ts +6 -6
- package/src/Evolu.ts +14 -12
- package/src/Platform.ts +0 -6
- package/src/Sql.ts +48 -46
- package/src/Sqlite.ts +16 -0
package/dist/src/Db.d.ts
CHANGED
|
@@ -37,15 +37,7 @@ type TableSchema = ReadonlyRecord.ReadonlyRecord<string, Value> & {
|
|
|
37
37
|
* });
|
|
38
38
|
* type TodoTable = S.Schema.To<typeof TodoTable>;
|
|
39
39
|
*/
|
|
40
|
-
export declare const table: <Fields extends TableFields>(fields: Fields) => ValidateFieldsTypes<Fields> extends true ? ValidateFieldsNames<Fields> extends true ? ValidateFieldsHasId<Fields> extends true ? S.Schema<Types.Simplify<
|
|
41
|
-
readonly createdAt: string & Brand.Brand<"SqliteDate">;
|
|
42
|
-
readonly updatedAt: string & Brand.Brand<"SqliteDate">;
|
|
43
|
-
readonly isDeleted: number & Brand.Brand<"SqliteBoolean">;
|
|
44
|
-
}>, Types.Simplify<{ readonly [K_2 in Exclude<keyof Fields, S.FromOptionalKeys<Fields>>]: S.Schema.From<Fields[K_2]>; } & { readonly [K_3 in S.FromOptionalKeys<Fields>]?: S.Schema.From<Fields[K_3]>; } & {
|
|
45
|
-
readonly createdAt: string;
|
|
46
|
-
readonly updatedAt: string;
|
|
47
|
-
readonly isDeleted: number;
|
|
48
|
-
}>, never> : EvoluTypeError<"table() called without id column."> : EvoluTypeError<"table() called with a reserved column. Reserved columns are createdAt, updatedAt, isDeleted. Those columns are added by default."> : EvoluTypeError<"table() called with unsupported type. Supported types are null, string, number, Uint8Array, JSON Object, and JSON Array. Use SqliteDate for dates and SqliteBoolean for booleans.">;
|
|
40
|
+
export declare const table: <Fields extends TableFields>(fields: Fields) => ValidateFieldsTypes<Fields> extends true ? ValidateFieldsNames<Fields> extends true ? ValidateFieldsHasId<Fields> extends true ? S.Schema<Types.Simplify<S.ToStruct<Fields> & S.Schema.To<typeof ReservedColumns>>, Types.Simplify<S.FromStruct<Fields> & S.Schema.From<typeof ReservedColumns>>> : EvoluTypeError<"table() called without id column."> : EvoluTypeError<"table() called with a reserved column. Reserved columns are createdAt, updatedAt, isDeleted. Those columns are added by default."> : EvoluTypeError<"table() called with unsupported type. Supported types are null, string, number, Uint8Array, JSON Object, and JSON Array. Use SqliteDate for dates and SqliteBoolean for booleans.">;
|
|
49
41
|
declare const ReservedColumns: S.Schema<{
|
|
50
42
|
readonly createdAt: string & Brand.Brand<"SqliteDate">;
|
|
51
43
|
readonly updatedAt: string & Brand.Brand<"SqliteDate">;
|
|
@@ -99,7 +91,7 @@ export type Row = {
|
|
|
99
91
|
* type AllTodosRow = ExtractRow<typeof allTodos>;
|
|
100
92
|
*/
|
|
101
93
|
export type ExtractRow<T extends Query> = T extends Query<infer R> ? R : never;
|
|
102
|
-
export declare const emptyRows: <R extends Row>() =>
|
|
94
|
+
export declare const emptyRows: <R extends Row>() => ReadonlyArray<R>;
|
|
103
95
|
/** An object with rows and row properties. */
|
|
104
96
|
export interface QueryResult<R extends Row = Row> {
|
|
105
97
|
/** An array containing all the rows returned by the query. */
|
|
@@ -116,7 +108,7 @@ export type QueryResultsFromQueries<Q extends Queries> = {
|
|
|
116
108
|
export type QueryResultsPromisesFromQueries<Q extends Queries> = {
|
|
117
109
|
[P in keyof Q]: Q[P] extends Query<infer R> ? Promise<QueryResult<R>> : never;
|
|
118
110
|
};
|
|
119
|
-
export declare const queryResultFromRows: <R extends Row>(rows:
|
|
111
|
+
export declare const queryResultFromRows: <R extends Row>(rows: ReadonlyArray<R>) => QueryResult<R>;
|
|
120
112
|
export type Tables = ReadonlyArray<Table>;
|
|
121
113
|
export interface Table {
|
|
122
114
|
readonly name: string;
|
package/dist/src/Db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Db.d.ts","sourceRoot":"","sources":["../../src/Db.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,uBAAuB,CAAC;AAE3C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAOjC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,EAAE,EAA6B,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAa,MAAM,YAAY,CAAC;AAO9C,OAAO,EAEL,MAAM,EACN,WAAW,EACX,KAAK,EAEN,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,EAAa,MAAM,YAAY,CAAC;AAE9C,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEhF,KAAK,WAAW,GAAG,cAAc,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG;IAChE,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;CACjB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,KAAK
|
|
1
|
+
{"version":3,"file":"Db.d.ts","sourceRoot":"","sources":["../../src/Db.ts"],"names":[],"mappings":"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"}
|
package/dist/src/Db.js
CHANGED
|
@@ -110,7 +110,7 @@ export const schemaToTables = (schema) => pipe(getPropertySignatures(schema), Re
|
|
|
110
110
|
name,
|
|
111
111
|
columns: Object.keys(getPropertySignatures(schema)),
|
|
112
112
|
})));
|
|
113
|
-
export const transaction = (effect) => Effect.flatMap(Sqlite, (sqlite) => Effect.acquireUseRelease(sqlite.exec("
|
|
113
|
+
export const transaction = (effect) => Effect.flatMap(Sqlite, (sqlite) => Effect.acquireUseRelease(sqlite.exec("begin"), () => effect, (_, exit) => Exit.isFailure(exit) ? sqlite.exec("rollback") : sqlite.exec("end")));
|
|
114
114
|
export const SqliteNoSuchTableOrColumnError = S.struct({
|
|
115
115
|
message: S.union(S.string.pipe(S.includes("no such table")), S.string.pipe(S.includes("no such column")), S.string.pipe(S.includes("has no column"))),
|
|
116
116
|
});
|
|
@@ -140,15 +140,15 @@ export const lazyInit = (mnemonic) => Effect.gen(function* (_) {
|
|
|
140
140
|
]));
|
|
141
141
|
return owner;
|
|
142
142
|
});
|
|
143
|
-
const getTables = Sqlite.pipe(Effect.flatMap((sqlite) => sqlite.exec(`
|
|
143
|
+
const getTables = Sqlite.pipe(Effect.flatMap((sqlite) => sqlite.exec(`select "name" from "sqlite_schema" where "type" = 'table'`)), Effect.map((result) => result.rows), Effect.map(ReadonlyArray.map((row) => row.name + "")), Effect.map(ReadonlyArray.filter(Predicate.not(String.startsWith("__")))), Effect.map(ReadonlyArray.dedupeWith(String.Equivalence)));
|
|
144
144
|
const updateTable = ({ name, columns, }) => Effect.gen(function* (_) {
|
|
145
145
|
const sqlite = yield* _(Sqlite);
|
|
146
|
-
const sql = yield* _(sqlite.exec(`
|
|
146
|
+
const sql = yield* _(sqlite.exec(`pragma table_info (${name})`), Effect.map((result) => result.rows), Effect.map(ReadonlyArray.map((row) => row.name)), Effect.map((existingColumns) => ReadonlyArray.differenceWith(String.Equivalence)(existingColumns)(columns)), Effect.map(ReadonlyArray.map((newColumn) => `alter table "${name}" add column "${newColumn}" blob;`)), Effect.map(ReadonlyArray.join("")));
|
|
147
147
|
if (sql)
|
|
148
148
|
yield* _(sqlite.exec(sql));
|
|
149
149
|
});
|
|
150
150
|
const createTable = ({ name, columns, }) => Effect.flatMap(Sqlite, (sqlite) => sqlite.exec(`
|
|
151
|
-
|
|
151
|
+
create table ${name} (
|
|
152
152
|
"id" text primary key,
|
|
153
153
|
${columns
|
|
154
154
|
.filter((c) => c !== "id")
|
package/dist/src/Evolu.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { DbWorker } from "./DbWorker.js";
|
|
|
9
9
|
import { EvoluError } from "./ErrorStore.js";
|
|
10
10
|
import { SqliteBoolean, SqliteDate } from "./Model.js";
|
|
11
11
|
import { Owner } from "./Owner.js";
|
|
12
|
-
import { AppState, FlushSync
|
|
12
|
+
import { AppState, FlushSync } from "./Platform.js";
|
|
13
13
|
import { Store } from "./Store.js";
|
|
14
14
|
import { SyncState } from "./SyncWorker.js";
|
|
15
15
|
export interface Evolu<S extends DatabaseSchema = DatabaseSchema> {
|
|
@@ -262,11 +262,10 @@ export interface Evolu<S extends DatabaseSchema = DatabaseSchema> {
|
|
|
262
262
|
* it.
|
|
263
263
|
*/
|
|
264
264
|
readonly sync: () => void;
|
|
265
|
-
readonly platformName: PlatformName;
|
|
266
265
|
}
|
|
267
266
|
export declare const Evolu: Context.Tag<Evolu<DatabaseSchema>, Evolu<DatabaseSchema>>;
|
|
268
267
|
type CreateQuery<S extends DatabaseSchema> = <R extends Row>(queryCallback: QueryCallback<S, R>) => Query<R>;
|
|
269
|
-
type QueryCallback<S extends DatabaseSchema, R extends Row> = (db: Pick<Kysely.Kysely<QuerySchema<S>>, "selectFrom" | "fn">) => Kysely.SelectQueryBuilder<any, any, R>;
|
|
268
|
+
type QueryCallback<S extends DatabaseSchema, R extends Row> = (db: Pick<Kysely.Kysely<QuerySchema<S>>, "selectFrom" | "fn" | "with" | "withRecursive">) => Kysely.SelectQueryBuilder<any, any, R>;
|
|
270
269
|
type QuerySchema<S extends DatabaseSchema> = {
|
|
271
270
|
readonly [Table in keyof S]: NullableExceptForIdAndAutomaticColumns<{
|
|
272
271
|
readonly [Column in keyof S[Table]]: S[Table][Column];
|
|
@@ -328,7 +327,7 @@ type PartialForNullable<T, NK extends keyof T = {
|
|
|
328
327
|
type Castable<T> = {
|
|
329
328
|
readonly [K in keyof T]: T[K] extends SqliteBoolean ? boolean | SqliteBoolean : T[K] extends null | SqliteBoolean ? null | boolean | SqliteBoolean : T[K] extends SqliteDate ? Date | SqliteDate : T[K] extends null | SqliteDate ? null | Date | SqliteDate : T[K];
|
|
330
329
|
};
|
|
331
|
-
export declare const EvoluCommonLive: Layer.Layer<Evolu<DatabaseSchema>, never, Config |
|
|
330
|
+
export declare const EvoluCommonLive: Layer.Layer<Evolu<DatabaseSchema>, never, Config | FlushSync | AppState | DbWorker>;
|
|
332
331
|
/**
|
|
333
332
|
* The recipe for creating Evolu for a platform and UI library:
|
|
334
333
|
*
|
|
@@ -339,6 +338,6 @@ export declare const EvoluCommonLive: Layer.Layer<Evolu<DatabaseSchema>, never,
|
|
|
339
338
|
* remember to update the import.
|
|
340
339
|
* 4. Export UI library API code.
|
|
341
340
|
*/
|
|
342
|
-
export declare const makeCreateEvolu: (EvoluLive: Layer.Layer<Evolu, never, Config>) => <From, To extends DatabaseSchema>(schema: S.Schema<To, From
|
|
341
|
+
export declare const makeCreateEvolu: (EvoluLive: Layer.Layer<Evolu, never, Config>) => <From, To extends DatabaseSchema>(schema: S.Schema<To, From>, config?: Partial<Config>) => Evolu<To>;
|
|
343
342
|
export {};
|
|
344
343
|
//# sourceMappingURL=Evolu.d.ts.map
|
package/dist/src/Evolu.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Evolu.d.ts","sourceRoot":"","sources":["../../src/Evolu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,uBAAuB,CAAC;AAC3C,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAK1C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAItC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,MAAM,EAAc,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAwC,MAAM,aAAa,CAAC;AAC7E,OAAO,EACL,cAAc,EACd,OAAO,EACP,KAAK,EACL,WAAW,EACX,+BAA+B,EAC/B,GAAG,EACH,SAAS,EAMV,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAmC,MAAM,eAAe,CAAC;AAE1E,OAAO,EAAE,UAAU,EAAkB,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEvD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"Evolu.d.ts","sourceRoot":"","sources":["../../src/Evolu.ts"],"names":[],"mappings":"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"}
|
package/dist/src/Evolu.js
CHANGED
|
@@ -15,7 +15,8 @@ import { DbWorker } from "./DbWorker.js";
|
|
|
15
15
|
import { applyPatches } from "./Diff.js";
|
|
16
16
|
import { makeErrorStore } from "./ErrorStore.js";
|
|
17
17
|
import { OnCompletes, OnCompletesLive } from "./OnCompletes.js";
|
|
18
|
-
import { AppState, FlushSync
|
|
18
|
+
import { AppState, FlushSync } from "./Platform.js";
|
|
19
|
+
import { isSqlMutation } from "./Sqlite.js";
|
|
19
20
|
import { makeStore } from "./Store.js";
|
|
20
21
|
export const Evolu = Context.GenericTag("@services/Evolu");
|
|
21
22
|
const kysely = new Kysely.Kysely({
|
|
@@ -28,10 +29,11 @@ const kysely = new Kysely.Kysely({
|
|
|
28
29
|
createQueryCompiler: () => new Kysely.SqliteQueryCompiler(),
|
|
29
30
|
},
|
|
30
31
|
});
|
|
31
|
-
export const makeCreateQuery = () => (queryCallback) => pipe(queryCallback(kysely).compile(), ({ sql, parameters }) =>
|
|
32
|
-
sql
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
export const makeCreateQuery = () => (queryCallback) => pipe(queryCallback(kysely).compile(), ({ sql, parameters }) => {
|
|
33
|
+
if (isSqlMutation(sql))
|
|
34
|
+
throw new Error("SQL mutation (INSERT, UPDATE, DELETE, etc.) isn't allowed in the Evolu `createQuery` function. Kysely suggests it because there is no read-only Kysely yet, and removing such an API is not possible. For mutations, use Evolu mutation API.");
|
|
35
|
+
return { sql, parameters: parameters };
|
|
36
|
+
}, (query) => serializeQuery(query));
|
|
35
37
|
export const LoadingPromises = Context.GenericTag("@services/LoadingPromises");
|
|
36
38
|
export const LoadingPromiseLive = Layer.effect(LoadingPromises, Effect.gen(function* (_) {
|
|
37
39
|
const subscribedQueries = yield* _(SubscribedQueries);
|
|
@@ -202,7 +204,6 @@ const EvoluCommon = Layer.effect(Evolu, Effect.gen(function* (_) {
|
|
|
202
204
|
const ownerStore = yield* _(makeStore(null));
|
|
203
205
|
const loadingPromises = yield* _(LoadingPromises);
|
|
204
206
|
const appState = yield* _(AppState);
|
|
205
|
-
const platformName = yield* _(PlatformName);
|
|
206
207
|
dbWorker.onMessage = (output) => Match.value(output).pipe(Match.tagsExhaustive({
|
|
207
208
|
onError: ({ error }) => errorStore.setState(error),
|
|
208
209
|
onQuery,
|
|
@@ -247,7 +248,6 @@ const EvoluCommon = Layer.effect(Evolu, Effect.gen(function* (_) {
|
|
|
247
248
|
tables: schemaToTables(schema),
|
|
248
249
|
}),
|
|
249
250
|
sync,
|
|
250
|
-
platformName,
|
|
251
251
|
});
|
|
252
252
|
})).pipe(Layer.provide(Layer.mergeAll(LoadQueryLive, OnQueryLive, MutateLive)), Layer.provide(LoadingPromiseLive), Layer.provide(SubscribedQueriesLive), Layer.provide(Layer.merge(RowsStoreLive, OnCompletesLive)));
|
|
253
253
|
export const EvoluCommonLive = EvoluCommon.pipe(Layer.provide(NanoIdGeneratorLive));
|
package/dist/src/Model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Model.d.ts","sourceRoot":"","sources":["../../src/Model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,uBAAuB,CAAC;AAC3C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC;;;GAGG;AACH,eAAO,MAAM,EAAE,0DAAyD,CAAC;AACzE,MAAM,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;AAExC;;;;;;;;;GASG;AACH,eAAO,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"Model.d.ts","sourceRoot":"","sources":["../../src/Model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,uBAAuB,CAAC;AAC3C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC;;;GAGG;AACH,eAAO,MAAM,EAAE,0DAAyD,CAAC;AACzE,MAAM,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;AAExC;;;;;;;;;GASG;AACH,eAAO,MAAM,EAAE,4BACN,CAAC,KACP,EAAE,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAClD,CAAC;AAE1B;;;;GAIG;AACH,eAAO,MAAM,UAAU,kEAGtB,CAAC;AACF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,UAAU,CAAC,CAAC;AAExD;;;;GAIG;AACH,eAAO,MAAM,aAAa,qEAIzB,CAAC;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,aAAa,CAAC,CAAC;AAE9D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAAC;AACpD,wBAAgB,IAAI,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;AACpD,wBAAgB,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,UAAU,CAAC;AAC9C,wBAAgB,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;AAW9C;;;;;GAKG;AACH,eAAO,MAAM,MAAM,8DAclB,CAAC;AACF,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,MAAM,CAAC,CAAC;AAEhD;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,0FAAwD,CAAC;AAChF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,UAAU,CAAC,CAAC;AAExD;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,kGAI9B,CAAC;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAExE;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,mEAIvB,CAAC;AACF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,WAAW,CAAC,CAAC"}
|
package/dist/src/Platform.d.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import * as Context from "effect/Context";
|
|
2
2
|
import * as Effect from "effect/Effect";
|
|
3
3
|
import * as Layer from "effect/Layer";
|
|
4
|
-
export type PlatformName = "server" | "web" | "react-native";
|
|
5
|
-
export declare const PlatformName: Context.Tag<PlatformName, PlatformName>;
|
|
6
4
|
/**
|
|
7
5
|
* FlushSync lets you force React to flush any updates inside the provided
|
|
8
6
|
* callback synchronously. This ensures that the DOM is updated immediately.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Platform.d.ts","sourceRoot":"","sources":["../../src/Platform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC
|
|
1
|
+
{"version":3,"file":"Platform.d.ts","sourceRoot":"","sources":["../../src/Platform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;AAEvD,eAAO,MAAM,SAAS,mCAAuD,CAAC;AAE9E,eAAO,MAAM,oBAAoB,sCAEhC,CAAC;AAEF,MAAM,WAAW,QAAQ;IACvB;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEzC,2BAA2B;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,eAAO,MAAM,QAAQ,iCAAqD,CAAC;AAE3E,MAAM,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AACnE,eAAO,MAAM,YAAY,yCAExB,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG,CAClB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,UAAU,KACb,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAEzC,eAAO,MAAM,KAAK,2BAA+C,CAAC;AAElE;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC7B;AAED,eAAO,MAAM,SAAS,kCAgBrB,CAAC;AAEF,UAAU,cAAc;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CACrC;AAED,eAAO,MAAM,QAAQ,iCAAqD,CAAC;AAE3E,yCAAyC;AACzC,eAAO,MAAM,SAAS,SAYlB,CAAC"}
|
package/dist/src/Platform.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import * as Context from "effect/Context";
|
|
2
2
|
import * as Effect from "effect/Effect";
|
|
3
3
|
import * as Layer from "effect/Layer";
|
|
4
|
-
export const PlatformName = Context.GenericTag("@services/PlatformName");
|
|
5
4
|
export const FlushSync = Context.GenericTag("@services/FlushSync");
|
|
6
5
|
export const FlushSyncDefaultLive = Layer.succeed(FlushSync, (callback) => callback());
|
|
7
6
|
export const SyncLock = Context.GenericTag("@services/SyncLock");
|
package/dist/src/Sql.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export declare const selectOwner
|
|
2
|
-
export declare const createMessageTable
|
|
3
|
-
export declare const createMessageTableIndex
|
|
4
|
-
export declare const createOwnerTable
|
|
5
|
-
export declare const insertOwner
|
|
6
|
-
export declare const selectOwnerTimestampAndMerkleTree
|
|
7
|
-
export declare const selectLastTimestampForTableRowColumn
|
|
1
|
+
export declare const selectOwner: string;
|
|
2
|
+
export declare const createMessageTable: string;
|
|
3
|
+
export declare const createMessageTableIndex: string;
|
|
4
|
+
export declare const createOwnerTable: string;
|
|
5
|
+
export declare const insertOwner: string;
|
|
6
|
+
export declare const selectOwnerTimestampAndMerkleTree: string;
|
|
7
|
+
export declare const selectLastTimestampForTableRowColumn: string;
|
|
8
8
|
export declare const upsertValueIntoTableRowColumn: (table: string, column: string) => string;
|
|
9
9
|
export declare const deleteTableRow: (table: string) => string;
|
|
10
|
-
export declare const insertIntoMessagesIfNew
|
|
11
|
-
export declare const updateOwnerTimestampAndMerkleTree
|
|
12
|
-
export declare const selectMessagesToSync
|
|
10
|
+
export declare const insertIntoMessagesIfNew: string;
|
|
11
|
+
export declare const updateOwnerTimestampAndMerkleTree: string;
|
|
12
|
+
export declare const selectMessagesToSync: string;
|
|
13
13
|
//# sourceMappingURL=Sql.d.ts.map
|
package/dist/src/Sql.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sql.d.ts","sourceRoot":"","sources":["../../src/Sql.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"Sql.d.ts","sourceRoot":"","sources":["../../src/Sql.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW,QAOhB,CAAC;AAET,eAAO,MAAM,kBAAkB,QASvB,CAAC;AAET,eAAO,MAAM,uBAAuB,QAI5B,CAAC;AAET,eAAO,MAAM,gBAAgB,QASrB,CAAC;AAET,eAAO,MAAM,WAAW,QAWhB,CAAC;AAET,eAAO,MAAM,iCAAiC,QAMtC,CAAC;AAET,eAAO,MAAM,oCAAoC,QAazC,CAAC;AAET,eAAO,MAAM,6BAA6B,UACjC,MAAM,UACL,MAAM,KACb,MASK,CAAC;AAET,eAAO,MAAM,cAAc,UAAW,MAAM,KAAG,MAKvC,CAAC;AAET,eAAO,MAAM,uBAAuB,QAM5B,CAAC;AAET,eAAO,MAAM,iCAAiC,QAKtC,CAAC;AAET,eAAO,MAAM,oBAAoB,QASzB,CAAC"}
|
package/dist/src/Sql.js
CHANGED
|
@@ -2,30 +2,30 @@
|
|
|
2
2
|
// The reason for not using Kysely directly is bundle size.
|
|
3
3
|
// [Playground Link](https://kyse.link/?p=b&i=haFkpnNxbGl0ZaF2pjAuMjYuMKFz2gFoaW1wb3J0IHsgR2VuZXJhdGVkIH0gZnJvbSAna3lzZWx5JwoKZGVjbGFyZSBnbG9iYWwgewogIGludGVyZmFjZSBEQiB7CiAgICBldm9sdV9tZXNzYWdlOiB7CiAgICAgIHRpbWVzdGFtcDogc3RyaW5nLAogICAgICB0YWJsZTogc3RyaW5nLAogICAgICByb3c6IHN0cmluZywKICAgICAgY29sdW1uOiBzdHJpbmcsCiAgICAgIHZhbHVlOiB1bmtub3duCiAgICB9LAoKICAgIGV2b2x1X293bmVyOiB7CiAgICAgIGlkOiBzdHJpbmcKICAgICAgbW5lbW9uaWM6IHN0cmluZwogICAgICBlbmNyeXB0aW9uS2V5OiBVaW50OEFycmF5LAogICAgICB0aW1lc3RhbXA6IHN0cmluZywKICAgICAgbWVya2xlVHJlZTogc3RyaW5nCiAgICB9CiAgfQp9oXHaBnhhd2FpdCBreXNlbHkuc2VsZWN0RnJvbSgiZXZvbHVfb3duZXIiKQogIC5zZWxlY3QoWyJpZCIsICJtbmVtb25pYyIsICJlbmNyeXB0aW9uS2V5Il0pCiAgLmV4ZWN1dGUoKQoKYXdhaXQga3lzZWx5LnNjaGVtYQogIC5jcmVhdGVUYWJsZSgnZXZvbHVfbWVzc2FnZScpCiAgLmFkZENvbHVtbigndGltZXN0YW1wJywgJ2Jsb2InLCBjb2wgPT4gY29sLnByaW1hcnlLZXkoKSkKICAuYWRkQ29sdW1uKCd0YWJsZScsICdibG9iJykKICAuYWRkQ29sdW1uKCdyb3cnLCAnYmxvYicpCiAgLmFkZENvbHVtbignY29sdW1uJywgJ2Jsb2InKQogIC5hZGRDb2x1bW4oJ3ZhbHVlJywgJ2Jsb2InKQogIC5leGVjdXRlKCkKCmF3YWl0IGt5c2VseS5zY2hlbWEKICAuY3JlYXRlSW5kZXgoImluZGV4X2V2b2x1X21lc3NhZ2UiKQogIC5vbigiZXZvbHVfbWVzc2FnZSIpCiAgLmNvbHVtbnMoWyJ0YWJsZSIsICJyb3ciLCAiY29sdW1uIiwgInRpbWVzdGFtcCJdKQogIC5leGVjdXRlKCkKCmF3YWl0IGt5c2VseS5zY2hlbWEKICAuY3JlYXRlVGFibGUoJ2V2b2x1X19vd25lcicpCiAgLmFkZENvbHVtbignaWQnLCAnYmxvYicpCiAgLmFkZENvbHVtbignbW5lbW9uaWMnLCAnYmxvYicpCiAgLmFkZENvbHVtbignZW5jcnlwdGlvbktleScsICdibG9iJykKICAuYWRkQ29sdW1uKCd0aW1lc3RhbXAnLCAnYmxvYicpCiAgLmFkZENvbHVtbignbWVya2xlVHJlZScsICdibG9iJykKICAuZXhlY3V0ZSgpCgphd2FpdCBreXNlbHkuaW5zZXJ0SW50bygiZXZvbHVfb3duZXIiKQogIC52YWx1ZXMoewogICAgImlkIjogImIiLAogICAgIm1uZW1vbmljIjogImEiLAogICAgImVuY3J5cHRpb25LZXkiOiBuZXcgVWludDhBcnJheSgpLAogICAgInRpbWVzdGFtcCI6ICJhIiwKICAgICJtZXJrbGVUcmVlIjogImIiCiAgfSkKICAuZXhlY3V0ZSgpCgphd2FpdCBreXNlbHkuc2VsZWN0RnJvbSgiZXZvbHVfb3duZXIiKQogIC5zZWxlY3QoWyJ0aW1lc3RhbXAiLCAibWVya2xlVHJlZSJdKQogIC5leGVjdXRlKCkKCmF3YWl0IGt5c2VseS5zZWxlY3RGcm9tKCJldm9sdV9tZXNzYWdlIikKICAuc2VsZWN0KCJ0aW1lc3RhbXAiKQogIC53aGVyZSgndGFibGUnLCAnPScsICcxJykKICAud2hlcmUoJ3JvdycsICc9JywgJzInKQogIC53aGVyZSgnY29sdW1uJywgJz0nLCAnMycpCiAgLm9yZGVyQnkoInRpbWVzdGFtcCIsICJkZXNjIikKICAubGltaXQoMSkKICAuZXhlY3V0ZVRha2VGaXJzdCgpCgphd2FpdCBreXNlbHkuaW5zZXJ0SW50bygiZXZvbHVfbWVzc2FnZSIpCiAgLnZhbHVlcyh7CiAgICAidGltZXN0YW1wIjogJzEnLAogICAgInRhYmxlIjogJzInLAogICAgInJvdyI6ICczJywKICAgICJjb2x1bW4iOiAnNCcsCiAgICAidmFsdWUiOiAnNScsCiAgfSkKICAub25Db25mbGljdChvYyA9PiBvYy5kb05vdGhpbmcoKSkKICAuZXhlY3V0ZSgpCgphd2FpdCBreXNlbHkudXBkYXRlVGFibGUoImV2b2x1X293bmVyIikKICAuc2V0KHsKICAgICJtZXJrbGVUcmVlIjogJzEnLAogICAgInRpbWVzdGFtcCI6ICIyIgogIH0pCiAgLmV4ZWN1dGUoKQoKYXdhaXQga3lzZWx5LnNlbGVjdEZyb20oImV2b2x1X21lc3NhZ2UiKQogIC5zZWxlY3RBbGwoKQogIC53aGVyZSgidGltZXN0YW1wIiwgIj49IiwgJzEnKQogIC5vcmRlckJ5KCJ0aW1lc3RhbXAiKQogIC5leGVjdXRlKCmhY8M=)
|
|
4
4
|
export const selectOwner = `
|
|
5
|
-
|
|
5
|
+
select
|
|
6
6
|
"id",
|
|
7
7
|
"mnemonic",
|
|
8
8
|
"encryptionKey"
|
|
9
|
-
|
|
9
|
+
from
|
|
10
10
|
"evolu_owner"
|
|
11
|
-
|
|
11
|
+
`.trim();
|
|
12
12
|
export const createMessageTable = `
|
|
13
|
-
|
|
13
|
+
create table
|
|
14
14
|
"evolu_message" (
|
|
15
|
-
"timestamp" blob
|
|
15
|
+
"timestamp" blob primary key,
|
|
16
16
|
"table" blob,
|
|
17
17
|
"row" blob,
|
|
18
18
|
"column" blob,
|
|
19
19
|
"value" blob
|
|
20
20
|
);
|
|
21
|
-
|
|
21
|
+
`.trim();
|
|
22
22
|
export const createMessageTableIndex = `
|
|
23
|
-
|
|
23
|
+
create index "index_evolu_message" on "evolu_message" (
|
|
24
24
|
"table", "row", "column", "timestamp"
|
|
25
25
|
);
|
|
26
|
-
|
|
26
|
+
`.trim();
|
|
27
27
|
export const createOwnerTable = `
|
|
28
|
-
|
|
28
|
+
create table
|
|
29
29
|
"evolu_owner" (
|
|
30
30
|
"id" blob,
|
|
31
31
|
"mnemonic" blob,
|
|
@@ -33,9 +33,9 @@ CREATE TABLE
|
|
|
33
33
|
"timestamp" blob,
|
|
34
34
|
"merkleTree" blob
|
|
35
35
|
);
|
|
36
|
-
|
|
36
|
+
`.trim();
|
|
37
37
|
export const insertOwner = `
|
|
38
|
-
|
|
38
|
+
insert into
|
|
39
39
|
"evolu_owner" (
|
|
40
40
|
"id",
|
|
41
41
|
"mnemonic",
|
|
@@ -43,64 +43,64 @@ INSERT INTO
|
|
|
43
43
|
"timestamp",
|
|
44
44
|
"merkleTree"
|
|
45
45
|
)
|
|
46
|
-
|
|
46
|
+
values
|
|
47
47
|
(?, ?, ?, ?, ?);
|
|
48
|
-
|
|
48
|
+
`.trim();
|
|
49
49
|
export const selectOwnerTimestampAndMerkleTree = `
|
|
50
|
-
|
|
50
|
+
select
|
|
51
51
|
"timestamp",
|
|
52
52
|
"merkleTree"
|
|
53
|
-
|
|
53
|
+
from
|
|
54
54
|
"evolu_owner"
|
|
55
|
-
|
|
55
|
+
`.trim();
|
|
56
56
|
export const selectLastTimestampForTableRowColumn = `
|
|
57
|
-
|
|
57
|
+
select
|
|
58
58
|
"timestamp"
|
|
59
|
-
|
|
59
|
+
from
|
|
60
60
|
"evolu_message"
|
|
61
|
-
|
|
61
|
+
where
|
|
62
62
|
"table" = ?
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
"timestamp"
|
|
67
|
-
|
|
63
|
+
and "row" = ?
|
|
64
|
+
and "column" = ?
|
|
65
|
+
order by
|
|
66
|
+
"timestamp" desc
|
|
67
|
+
limit
|
|
68
68
|
1
|
|
69
|
-
|
|
69
|
+
`.trim();
|
|
70
70
|
export const upsertValueIntoTableRowColumn = (table, column) => `
|
|
71
|
-
|
|
71
|
+
insert into
|
|
72
72
|
"${table}" ("id", "${column}", "createdAt", "updatedAt")
|
|
73
|
-
|
|
73
|
+
values
|
|
74
74
|
(?, ?, ?, ?)
|
|
75
|
-
|
|
75
|
+
on conflict do update set
|
|
76
76
|
"${column}" = ?,
|
|
77
77
|
"updatedAt" = ?
|
|
78
|
-
|
|
78
|
+
`.trim();
|
|
79
79
|
export const deleteTableRow = (table) => `
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
delete from "${table}"
|
|
81
|
+
where
|
|
82
82
|
"id" = ?;
|
|
83
|
-
|
|
83
|
+
`.trim();
|
|
84
84
|
export const insertIntoMessagesIfNew = `
|
|
85
|
-
|
|
85
|
+
insert into
|
|
86
86
|
"evolu_message" ("timestamp", "table", "row", "column", "value")
|
|
87
|
-
|
|
87
|
+
values
|
|
88
88
|
(?, ?, ?, ?, ?)
|
|
89
|
-
|
|
90
|
-
|
|
89
|
+
on conflict do nothing
|
|
90
|
+
`.trim();
|
|
91
91
|
export const updateOwnerTimestampAndMerkleTree = `
|
|
92
|
-
|
|
93
|
-
|
|
92
|
+
update "evolu_owner"
|
|
93
|
+
set
|
|
94
94
|
"timestamp" = ?,
|
|
95
95
|
"merkleTree" = ?
|
|
96
|
-
|
|
96
|
+
`.trim();
|
|
97
97
|
export const selectMessagesToSync = `
|
|
98
|
-
|
|
98
|
+
select
|
|
99
99
|
*
|
|
100
|
-
|
|
100
|
+
from
|
|
101
101
|
"evolu_message"
|
|
102
|
-
|
|
102
|
+
where
|
|
103
103
|
"timestamp" >= ?
|
|
104
|
-
|
|
104
|
+
order by
|
|
105
105
|
"timestamp"
|
|
106
|
-
|
|
106
|
+
`.trim();
|
package/dist/src/Sqlite.d.ts
CHANGED
|
@@ -28,5 +28,6 @@ export declare const valuesToSqliteValues: (values: ReadonlyArray<Value>) => Sql
|
|
|
28
28
|
export declare const ensureSqliteQuery: (arg: string | SqliteQuery) => SqliteQuery;
|
|
29
29
|
export declare const maybeParseJson: (rows: SqliteRow[]) => SqliteRow[];
|
|
30
30
|
export declare const maybeJson: Predicate.Predicate<string>;
|
|
31
|
+
export declare const isSqlMutation: (sql: string) => boolean;
|
|
31
32
|
export {};
|
|
32
33
|
//# sourceMappingURL=Sqlite.d.ts.map
|
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,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAC;AAE9C,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,KAAK,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;CAC/E;AAED,eAAO,MAAM,MAAM,6BAAiD,CAAC;AAErE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;CAC9B;AAED,MAAM,MAAM,KAAK,GAAG,WAAW,GAAG,iBAAiB,CAAC;AACpD,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AAC9D,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,SAAS,CAAC;AACvD,KAAK,UAAU,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAC1C,KAAK,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;AACrC,KAAK,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AACtD,KAAK,IAAI,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,CAAC;AAEnD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEpD,eAAO,MAAM,mBAAmB,EAAE,SAAS,CAAC,UAAU,CACpD,KAAK,EACL,iBAAiB,CAE4D,CAAC;AAEhF,eAAO,MAAM,oBAAoB,WACvB,cAAc,KAAK,CAAC,KAC3B,WAAW,EAGX,CAAC;AAEJ,eAAO,MAAM,iBAAiB,QAAS,MAAM,GAAG,WAAW,KAAG,WAG7D,CAAC;AAEF,eAAO,MAAM,cAAc,SAAU,SAAS,EAAE,KAAG,SAAS,EAC1C,CAAC;AA0BnB,eAAO,MAAM,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,CACpB,CAAC"}
|
|
1
|
+
{"version":3,"file":"Sqlite.d.ts","sourceRoot":"","sources":["../../src/Sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAC;AAE9C,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,KAAK,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;CAC/E;AAED,eAAO,MAAM,MAAM,6BAAiD,CAAC;AAErE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;CAC9B;AAED,MAAM,MAAM,KAAK,GAAG,WAAW,GAAG,iBAAiB,CAAC;AACpD,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AAC9D,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,SAAS,CAAC;AACvD,KAAK,UAAU,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAC1C,KAAK,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;AACrC,KAAK,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AACtD,KAAK,IAAI,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,CAAC;AAEnD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEpD,eAAO,MAAM,mBAAmB,EAAE,SAAS,CAAC,UAAU,CACpD,KAAK,EACL,iBAAiB,CAE4D,CAAC;AAEhF,eAAO,MAAM,oBAAoB,WACvB,cAAc,KAAK,CAAC,KAC3B,WAAW,EAGX,CAAC;AAEJ,eAAO,MAAM,iBAAiB,QAAS,MAAM,GAAG,WAAW,KAAG,WAG7D,CAAC;AAEF,eAAO,MAAM,cAAc,SAAU,SAAS,EAAE,KAAG,SAAS,EAC1C,CAAC;AA0BnB,eAAO,MAAM,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,CACpB,CAAC;AAoB/B,eAAO,MAAM,aAAa,QAAS,MAAM,KAAG,OACd,CAAC"}
|
package/dist/src/Sqlite.js
CHANGED
|
@@ -40,3 +40,14 @@ const parseObject = (o) => {
|
|
|
40
40
|
o[key] = parse(o[key]);
|
|
41
41
|
return o;
|
|
42
42
|
};
|
|
43
|
+
/** This is good enough detection because SQL strings in Evolu are predictable. */
|
|
44
|
+
const isSqlMutationRegEx = new RegExp(`\\b(${[
|
|
45
|
+
"alter",
|
|
46
|
+
"create",
|
|
47
|
+
"delete",
|
|
48
|
+
"drop",
|
|
49
|
+
"insert",
|
|
50
|
+
"replace",
|
|
51
|
+
"update",
|
|
52
|
+
].join("|")})\\b`);
|
|
53
|
+
export const isSqlMutation = (sql) => isSqlMutationRegEx.test(sql);
|
package/dist/src/Store.d.ts
CHANGED
|
@@ -6,5 +6,5 @@ export interface Store<T> {
|
|
|
6
6
|
readonly getState: () => T;
|
|
7
7
|
readonly setState: (state: T) => Effect.Effect<void>;
|
|
8
8
|
}
|
|
9
|
-
export declare const makeStore: <T>(initialState: T) => Effect.Effect<Store<T
|
|
9
|
+
export declare const makeStore: <T>(initialState: T) => Effect.Effect<Store<T>>;
|
|
10
10
|
//# sourceMappingURL=Store.d.ts.map
|
package/dist/src/Store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Store.d.ts","sourceRoot":"","sources":["../../src/Store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,MAAM,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC;AAElC,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAErC,MAAM,WAAW,KAAK,CAAC,CAAC;IAEtB,QAAQ,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,WAAW,CAAC;IACxD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAG3B,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CACtD;AAED,eAAO,MAAM,SAAS
|
|
1
|
+
{"version":3,"file":"Store.d.ts","sourceRoot":"","sources":["../../src/Store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,MAAM,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC;AAElC,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAErC,MAAM,WAAW,KAAK,CAAC,CAAC;IAEtB,QAAQ,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,WAAW,CAAC;IACxD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAG3B,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CACtD;AAED,eAAO,MAAM,SAAS,oBAAqB,CAAC,KAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CA0BjE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@evolu/common",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.2",
|
|
4
4
|
"description": "Local-first platform designed for privacy, ease of use, and no vendor lock-in to sync and backup people's lifetime data",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"evolu",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"array-shuffle": "^3.0.0",
|
|
59
59
|
"effect": "2.4.1",
|
|
60
60
|
"eslint": "^8.57.0",
|
|
61
|
-
"typescript": "^5.
|
|
61
|
+
"typescript": "^5.4.2",
|
|
62
62
|
"vitest": "^1.3.1",
|
|
63
63
|
"@evolu/tsconfig": "0.0.2",
|
|
64
64
|
"eslint-config-evolu": "1.0.0"
|
package/src/Db.ts
CHANGED
|
@@ -287,10 +287,10 @@ export const transaction = <R, E, A>(
|
|
|
287
287
|
): Effect.Effect<A, E, Sqlite | R> =>
|
|
288
288
|
Effect.flatMap(Sqlite, (sqlite) =>
|
|
289
289
|
Effect.acquireUseRelease(
|
|
290
|
-
sqlite.exec("
|
|
290
|
+
sqlite.exec("begin"),
|
|
291
291
|
() => effect,
|
|
292
292
|
(_, exit) =>
|
|
293
|
-
Exit.isFailure(exit) ? sqlite.exec("
|
|
293
|
+
Exit.isFailure(exit) ? sqlite.exec("rollback") : sqlite.exec("end"),
|
|
294
294
|
),
|
|
295
295
|
);
|
|
296
296
|
|
|
@@ -357,7 +357,7 @@ const getTables: Effect.Effect<
|
|
|
357
357
|
Sqlite
|
|
358
358
|
> = Sqlite.pipe(
|
|
359
359
|
Effect.flatMap((sqlite) =>
|
|
360
|
-
sqlite.exec(`
|
|
360
|
+
sqlite.exec(`select "name" from "sqlite_schema" where "type" = 'table'`),
|
|
361
361
|
),
|
|
362
362
|
Effect.map((result) => result.rows),
|
|
363
363
|
Effect.map(ReadonlyArray.map((row) => (row.name as string) + "")),
|
|
@@ -372,7 +372,7 @@ const updateTable = ({
|
|
|
372
372
|
Effect.gen(function* (_) {
|
|
373
373
|
const sqlite = yield* _(Sqlite);
|
|
374
374
|
const sql = yield* _(
|
|
375
|
-
sqlite.exec(`
|
|
375
|
+
sqlite.exec(`pragma table_info (${name})`),
|
|
376
376
|
Effect.map((result) => result.rows),
|
|
377
377
|
Effect.map(ReadonlyArray.map((row) => row.name as string)),
|
|
378
378
|
Effect.map((existingColumns) =>
|
|
@@ -383,7 +383,7 @@ const updateTable = ({
|
|
|
383
383
|
Effect.map(
|
|
384
384
|
ReadonlyArray.map(
|
|
385
385
|
(newColumn) =>
|
|
386
|
-
`
|
|
386
|
+
`alter table "${name}" add column "${newColumn}" blob;`,
|
|
387
387
|
),
|
|
388
388
|
),
|
|
389
389
|
Effect.map(ReadonlyArray.join("")),
|
|
@@ -397,7 +397,7 @@ const createTable = ({
|
|
|
397
397
|
}: Table): Effect.Effect<void, never, Sqlite> =>
|
|
398
398
|
Effect.flatMap(Sqlite, (sqlite) =>
|
|
399
399
|
sqlite.exec(`
|
|
400
|
-
|
|
400
|
+
create table ${name} (
|
|
401
401
|
"id" text primary key,
|
|
402
402
|
${columns
|
|
403
403
|
.filter((c) => c !== "id")
|
package/src/Evolu.ts
CHANGED
|
@@ -31,8 +31,8 @@ import { EvoluError, makeErrorStore } from "./ErrorStore.js";
|
|
|
31
31
|
import { SqliteBoolean, SqliteDate } from "./Model.js";
|
|
32
32
|
import { OnCompletes, OnCompletesLive } from "./OnCompletes.js";
|
|
33
33
|
import { Owner } from "./Owner.js";
|
|
34
|
-
import { AppState, FlushSync
|
|
35
|
-
import { SqliteQuery } from "./Sqlite.js";
|
|
34
|
+
import { AppState, FlushSync } from "./Platform.js";
|
|
35
|
+
import { SqliteQuery, isSqlMutation } from "./Sqlite.js";
|
|
36
36
|
import { Store, Unsubscribe, makeStore } from "./Store.js";
|
|
37
37
|
import { SyncState } from "./SyncWorker.js";
|
|
38
38
|
|
|
@@ -307,8 +307,6 @@ export interface Evolu<S extends DatabaseSchema = DatabaseSchema> {
|
|
|
307
307
|
* it.
|
|
308
308
|
*/
|
|
309
309
|
readonly sync: () => void;
|
|
310
|
-
|
|
311
|
-
readonly platformName: PlatformName;
|
|
312
310
|
}
|
|
313
311
|
|
|
314
312
|
export const Evolu = Context.GenericTag<Evolu>("@services/Evolu");
|
|
@@ -318,7 +316,10 @@ type CreateQuery<S extends DatabaseSchema> = <R extends Row>(
|
|
|
318
316
|
) => Query<R>;
|
|
319
317
|
|
|
320
318
|
type QueryCallback<S extends DatabaseSchema, R extends Row> = (
|
|
321
|
-
db: Pick<
|
|
319
|
+
db: Pick<
|
|
320
|
+
Kysely.Kysely<QuerySchema<S>>,
|
|
321
|
+
"selectFrom" | "fn" | "with" | "withRecursive"
|
|
322
|
+
>,
|
|
322
323
|
) => Kysely.SelectQueryBuilder<any, any, R>;
|
|
323
324
|
|
|
324
325
|
type QuerySchema<S extends DatabaseSchema> = {
|
|
@@ -350,10 +351,14 @@ export const makeCreateQuery =
|
|
|
350
351
|
<R extends Row>(queryCallback: QueryCallback<S, R>) =>
|
|
351
352
|
pipe(
|
|
352
353
|
queryCallback(kysely as Kysely.Kysely<QuerySchema<S>>).compile(),
|
|
353
|
-
({ sql, parameters }): SqliteQuery =>
|
|
354
|
-
sql
|
|
355
|
-
|
|
356
|
-
|
|
354
|
+
({ sql, parameters }): SqliteQuery => {
|
|
355
|
+
if (isSqlMutation(sql))
|
|
356
|
+
throw new Error(
|
|
357
|
+
"SQL mutation (INSERT, UPDATE, DELETE, etc.) isn't allowed in the Evolu `createQuery` function. Kysely suggests it because there is no read-only Kysely yet, and removing such an API is not possible. For mutations, use Evolu mutation API.",
|
|
358
|
+
);
|
|
359
|
+
|
|
360
|
+
return { sql, parameters: parameters as SqliteQuery["parameters"] };
|
|
361
|
+
},
|
|
357
362
|
(query) => serializeQuery<R>(query),
|
|
358
363
|
);
|
|
359
364
|
|
|
@@ -704,7 +709,6 @@ const EvoluCommon = Layer.effect(
|
|
|
704
709
|
const ownerStore = yield* _(makeStore<Owner | null>(null));
|
|
705
710
|
const loadingPromises = yield* _(LoadingPromises);
|
|
706
711
|
const appState = yield* _(AppState);
|
|
707
|
-
const platformName = yield* _(PlatformName);
|
|
708
712
|
|
|
709
713
|
dbWorker.onMessage = (output): void =>
|
|
710
714
|
Match.value(output).pipe(
|
|
@@ -773,8 +777,6 @@ const EvoluCommon = Layer.effect(
|
|
|
773
777
|
}),
|
|
774
778
|
|
|
775
779
|
sync,
|
|
776
|
-
|
|
777
|
-
platformName,
|
|
778
780
|
});
|
|
779
781
|
}),
|
|
780
782
|
).pipe(
|
package/src/Platform.ts
CHANGED
|
@@ -2,12 +2,6 @@ import * as Context from "effect/Context";
|
|
|
2
2
|
import * as Effect from "effect/Effect";
|
|
3
3
|
import * as Layer from "effect/Layer";
|
|
4
4
|
|
|
5
|
-
export type PlatformName = "server" | "web" | "react-native";
|
|
6
|
-
|
|
7
|
-
export const PlatformName = Context.GenericTag<PlatformName>(
|
|
8
|
-
"@services/PlatformName",
|
|
9
|
-
);
|
|
10
|
-
|
|
11
5
|
/**
|
|
12
6
|
* FlushSync lets you force React to flush any updates inside the provided
|
|
13
7
|
* callback synchronously. This ensures that the DOM is updated immediately.
|
package/src/Sql.ts
CHANGED
|
@@ -3,33 +3,33 @@
|
|
|
3
3
|
// [Playground Link](https://kyse.link/?p=b&i=haFkpnNxbGl0ZaF2pjAuMjYuMKFz2gFoaW1wb3J0IHsgR2VuZXJhdGVkIH0gZnJvbSAna3lzZWx5JwoKZGVjbGFyZSBnbG9iYWwgewogIGludGVyZmFjZSBEQiB7CiAgICBldm9sdV9tZXNzYWdlOiB7CiAgICAgIHRpbWVzdGFtcDogc3RyaW5nLAogICAgICB0YWJsZTogc3RyaW5nLAogICAgICByb3c6IHN0cmluZywKICAgICAgY29sdW1uOiBzdHJpbmcsCiAgICAgIHZhbHVlOiB1bmtub3duCiAgICB9LAoKICAgIGV2b2x1X293bmVyOiB7CiAgICAgIGlkOiBzdHJpbmcKICAgICAgbW5lbW9uaWM6IHN0cmluZwogICAgICBlbmNyeXB0aW9uS2V5OiBVaW50OEFycmF5LAogICAgICB0aW1lc3RhbXA6IHN0cmluZywKICAgICAgbWVya2xlVHJlZTogc3RyaW5nCiAgICB9CiAgfQp9oXHaBnhhd2FpdCBreXNlbHkuc2VsZWN0RnJvbSgiZXZvbHVfb3duZXIiKQogIC5zZWxlY3QoWyJpZCIsICJtbmVtb25pYyIsICJlbmNyeXB0aW9uS2V5Il0pCiAgLmV4ZWN1dGUoKQoKYXdhaXQga3lzZWx5LnNjaGVtYQogIC5jcmVhdGVUYWJsZSgnZXZvbHVfbWVzc2FnZScpCiAgLmFkZENvbHVtbigndGltZXN0YW1wJywgJ2Jsb2InLCBjb2wgPT4gY29sLnByaW1hcnlLZXkoKSkKICAuYWRkQ29sdW1uKCd0YWJsZScsICdibG9iJykKICAuYWRkQ29sdW1uKCdyb3cnLCAnYmxvYicpCiAgLmFkZENvbHVtbignY29sdW1uJywgJ2Jsb2InKQogIC5hZGRDb2x1bW4oJ3ZhbHVlJywgJ2Jsb2InKQogIC5leGVjdXRlKCkKCmF3YWl0IGt5c2VseS5zY2hlbWEKICAuY3JlYXRlSW5kZXgoImluZGV4X2V2b2x1X21lc3NhZ2UiKQogIC5vbigiZXZvbHVfbWVzc2FnZSIpCiAgLmNvbHVtbnMoWyJ0YWJsZSIsICJyb3ciLCAiY29sdW1uIiwgInRpbWVzdGFtcCJdKQogIC5leGVjdXRlKCkKCmF3YWl0IGt5c2VseS5zY2hlbWEKICAuY3JlYXRlVGFibGUoJ2V2b2x1X19vd25lcicpCiAgLmFkZENvbHVtbignaWQnLCAnYmxvYicpCiAgLmFkZENvbHVtbignbW5lbW9uaWMnLCAnYmxvYicpCiAgLmFkZENvbHVtbignZW5jcnlwdGlvbktleScsICdibG9iJykKICAuYWRkQ29sdW1uKCd0aW1lc3RhbXAnLCAnYmxvYicpCiAgLmFkZENvbHVtbignbWVya2xlVHJlZScsICdibG9iJykKICAuZXhlY3V0ZSgpCgphd2FpdCBreXNlbHkuaW5zZXJ0SW50bygiZXZvbHVfb3duZXIiKQogIC52YWx1ZXMoewogICAgImlkIjogImIiLAogICAgIm1uZW1vbmljIjogImEiLAogICAgImVuY3J5cHRpb25LZXkiOiBuZXcgVWludDhBcnJheSgpLAogICAgInRpbWVzdGFtcCI6ICJhIiwKICAgICJtZXJrbGVUcmVlIjogImIiCiAgfSkKICAuZXhlY3V0ZSgpCgphd2FpdCBreXNlbHkuc2VsZWN0RnJvbSgiZXZvbHVfb3duZXIiKQogIC5zZWxlY3QoWyJ0aW1lc3RhbXAiLCAibWVya2xlVHJlZSJdKQogIC5leGVjdXRlKCkKCmF3YWl0IGt5c2VseS5zZWxlY3RGcm9tKCJldm9sdV9tZXNzYWdlIikKICAuc2VsZWN0KCJ0aW1lc3RhbXAiKQogIC53aGVyZSgndGFibGUnLCAnPScsICcxJykKICAud2hlcmUoJ3JvdycsICc9JywgJzInKQogIC53aGVyZSgnY29sdW1uJywgJz0nLCAnMycpCiAgLm9yZGVyQnkoInRpbWVzdGFtcCIsICJkZXNjIikKICAubGltaXQoMSkKICAuZXhlY3V0ZVRha2VGaXJzdCgpCgphd2FpdCBreXNlbHkuaW5zZXJ0SW50bygiZXZvbHVfbWVzc2FnZSIpCiAgLnZhbHVlcyh7CiAgICAidGltZXN0YW1wIjogJzEnLAogICAgInRhYmxlIjogJzInLAogICAgInJvdyI6ICczJywKICAgICJjb2x1bW4iOiAnNCcsCiAgICAidmFsdWUiOiAnNScsCiAgfSkKICAub25Db25mbGljdChvYyA9PiBvYy5kb05vdGhpbmcoKSkKICAuZXhlY3V0ZSgpCgphd2FpdCBreXNlbHkudXBkYXRlVGFibGUoImV2b2x1X293bmVyIikKICAuc2V0KHsKICAgICJtZXJrbGVUcmVlIjogJzEnLAogICAgInRpbWVzdGFtcCI6ICIyIgogIH0pCiAgLmV4ZWN1dGUoKQoKYXdhaXQga3lzZWx5LnNlbGVjdEZyb20oImV2b2x1X21lc3NhZ2UiKQogIC5zZWxlY3RBbGwoKQogIC53aGVyZSgidGltZXN0YW1wIiwgIj49IiwgJzEnKQogIC5vcmRlckJ5KCJ0aW1lc3RhbXAiKQogIC5leGVjdXRlKCmhY8M=)
|
|
4
4
|
|
|
5
5
|
export const selectOwner = `
|
|
6
|
-
|
|
6
|
+
select
|
|
7
7
|
"id",
|
|
8
8
|
"mnemonic",
|
|
9
9
|
"encryptionKey"
|
|
10
|
-
|
|
10
|
+
from
|
|
11
11
|
"evolu_owner"
|
|
12
|
-
|
|
12
|
+
`.trim();
|
|
13
13
|
|
|
14
14
|
export const createMessageTable = `
|
|
15
|
-
|
|
15
|
+
create table
|
|
16
16
|
"evolu_message" (
|
|
17
|
-
"timestamp" blob
|
|
17
|
+
"timestamp" blob primary key,
|
|
18
18
|
"table" blob,
|
|
19
19
|
"row" blob,
|
|
20
20
|
"column" blob,
|
|
21
21
|
"value" blob
|
|
22
22
|
);
|
|
23
|
-
|
|
23
|
+
`.trim();
|
|
24
24
|
|
|
25
25
|
export const createMessageTableIndex = `
|
|
26
|
-
|
|
26
|
+
create index "index_evolu_message" on "evolu_message" (
|
|
27
27
|
"table", "row", "column", "timestamp"
|
|
28
28
|
);
|
|
29
|
-
|
|
29
|
+
`.trim();
|
|
30
30
|
|
|
31
31
|
export const createOwnerTable = `
|
|
32
|
-
|
|
32
|
+
create table
|
|
33
33
|
"evolu_owner" (
|
|
34
34
|
"id" blob,
|
|
35
35
|
"mnemonic" blob,
|
|
@@ -37,10 +37,10 @@ CREATE TABLE
|
|
|
37
37
|
"timestamp" blob,
|
|
38
38
|
"merkleTree" blob
|
|
39
39
|
);
|
|
40
|
-
|
|
40
|
+
`.trim();
|
|
41
41
|
|
|
42
42
|
export const insertOwner = `
|
|
43
|
-
|
|
43
|
+
insert into
|
|
44
44
|
"evolu_owner" (
|
|
45
45
|
"id",
|
|
46
46
|
"mnemonic",
|
|
@@ -48,74 +48,76 @@ INSERT INTO
|
|
|
48
48
|
"timestamp",
|
|
49
49
|
"merkleTree"
|
|
50
50
|
)
|
|
51
|
-
|
|
51
|
+
values
|
|
52
52
|
(?, ?, ?, ?, ?);
|
|
53
|
-
|
|
53
|
+
`.trim();
|
|
54
54
|
|
|
55
55
|
export const selectOwnerTimestampAndMerkleTree = `
|
|
56
|
-
|
|
56
|
+
select
|
|
57
57
|
"timestamp",
|
|
58
58
|
"merkleTree"
|
|
59
|
-
|
|
59
|
+
from
|
|
60
60
|
"evolu_owner"
|
|
61
|
-
|
|
61
|
+
`.trim();
|
|
62
62
|
|
|
63
63
|
export const selectLastTimestampForTableRowColumn = `
|
|
64
|
-
|
|
64
|
+
select
|
|
65
65
|
"timestamp"
|
|
66
|
-
|
|
66
|
+
from
|
|
67
67
|
"evolu_message"
|
|
68
|
-
|
|
68
|
+
where
|
|
69
69
|
"table" = ?
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
"timestamp"
|
|
74
|
-
|
|
70
|
+
and "row" = ?
|
|
71
|
+
and "column" = ?
|
|
72
|
+
order by
|
|
73
|
+
"timestamp" desc
|
|
74
|
+
limit
|
|
75
75
|
1
|
|
76
|
-
|
|
76
|
+
`.trim();
|
|
77
77
|
|
|
78
78
|
export const upsertValueIntoTableRowColumn = (
|
|
79
79
|
table: string,
|
|
80
80
|
column: string,
|
|
81
|
-
): string =>
|
|
82
|
-
|
|
81
|
+
): string =>
|
|
82
|
+
`
|
|
83
|
+
insert into
|
|
83
84
|
"${table}" ("id", "${column}", "createdAt", "updatedAt")
|
|
84
|
-
|
|
85
|
+
values
|
|
85
86
|
(?, ?, ?, ?)
|
|
86
|
-
|
|
87
|
+
on conflict do update set
|
|
87
88
|
"${column}" = ?,
|
|
88
89
|
"updatedAt" = ?
|
|
89
|
-
|
|
90
|
+
`.trim();
|
|
90
91
|
|
|
91
|
-
export const deleteTableRow = (table: string): string =>
|
|
92
|
-
|
|
93
|
-
|
|
92
|
+
export const deleteTableRow = (table: string): string =>
|
|
93
|
+
`
|
|
94
|
+
delete from "${table}"
|
|
95
|
+
where
|
|
94
96
|
"id" = ?;
|
|
95
|
-
|
|
97
|
+
`.trim();
|
|
96
98
|
|
|
97
99
|
export const insertIntoMessagesIfNew = `
|
|
98
|
-
|
|
100
|
+
insert into
|
|
99
101
|
"evolu_message" ("timestamp", "table", "row", "column", "value")
|
|
100
|
-
|
|
102
|
+
values
|
|
101
103
|
(?, ?, ?, ?, ?)
|
|
102
|
-
|
|
103
|
-
|
|
104
|
+
on conflict do nothing
|
|
105
|
+
`.trim();
|
|
104
106
|
|
|
105
107
|
export const updateOwnerTimestampAndMerkleTree = `
|
|
106
|
-
|
|
107
|
-
|
|
108
|
+
update "evolu_owner"
|
|
109
|
+
set
|
|
108
110
|
"timestamp" = ?,
|
|
109
111
|
"merkleTree" = ?
|
|
110
|
-
|
|
112
|
+
`.trim();
|
|
111
113
|
|
|
112
114
|
export const selectMessagesToSync = `
|
|
113
|
-
|
|
115
|
+
select
|
|
114
116
|
*
|
|
115
|
-
|
|
117
|
+
from
|
|
116
118
|
"evolu_message"
|
|
117
|
-
|
|
119
|
+
where
|
|
118
120
|
"timestamp" >= ?
|
|
119
|
-
|
|
121
|
+
order by
|
|
120
122
|
"timestamp"
|
|
121
|
-
|
|
123
|
+
`.trim();
|
package/src/Sqlite.ts
CHANGED
|
@@ -80,3 +80,19 @@ const parseObject = (o: Record<string, unknown>): Record<string, unknown> => {
|
|
|
80
80
|
for (const key in o) o[key] = parse(o[key]);
|
|
81
81
|
return o;
|
|
82
82
|
};
|
|
83
|
+
|
|
84
|
+
/** This is good enough detection because SQL strings in Evolu are predictable. */
|
|
85
|
+
const isSqlMutationRegEx = new RegExp(
|
|
86
|
+
`\\b(${[
|
|
87
|
+
"alter",
|
|
88
|
+
"create",
|
|
89
|
+
"delete",
|
|
90
|
+
"drop",
|
|
91
|
+
"insert",
|
|
92
|
+
"replace",
|
|
93
|
+
"update",
|
|
94
|
+
].join("|")})\\b`,
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
export const isSqlMutation = (sql: string): boolean =>
|
|
98
|
+
isSqlMutationRegEx.test(sql);
|