@livestore/common 0.0.48-dev.0 → 0.0.48-dev.1
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/.tsbuildinfo +1 -1
- package/dist/derived-mutations.d.ts +14 -14
- package/dist/derived-mutations.d.ts.map +1 -1
- package/dist/derived-mutations.js +2 -1
- package/dist/derived-mutations.js.map +1 -1
- package/dist/schema-management/common.d.ts +8 -0
- package/dist/schema-management/common.d.ts.map +1 -1
- package/dist/schema-management/migrations.d.ts +2 -0
- package/dist/schema-management/migrations.d.ts.map +1 -1
- package/dist/schema-management/migrations.js +23 -2
- package/dist/schema-management/migrations.js.map +1 -1
- package/dist/schema-management/validate-mutation-defs.d.ts +1 -11
- package/dist/schema-management/validate-mutation-defs.d.ts.map +1 -1
- package/dist/schema-management/validate-mutation-defs.js +0 -26
- package/dist/schema-management/validate-mutation-defs.js.map +1 -1
- package/package.json +3 -3
- package/src/derived-mutations.ts +3 -2
- package/src/schema-management/common.ts +11 -0
- package/src/schema-management/migrations.ts +41 -3
- package/src/schema-management/validate-mutation-defs.ts +1 -49
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { GetValForKey } from '@livestore/utils';
|
|
2
2
|
import { Schema } from '@livestore/utils/effect';
|
|
3
3
|
import type { SqliteDsl } from 'effect-db-schema';
|
|
4
|
-
import type { MutationEvent } from './schema/
|
|
5
|
-
import { DbSchema } from './schema/index.js';
|
|
4
|
+
import type { MutationEvent } from './schema/mutations.js';
|
|
6
5
|
import type { TableOptions } from './schema/table-def.js';
|
|
6
|
+
import * as DbSchema from './schema/table-def.js';
|
|
7
7
|
export declare const makeDerivedMutationDefsForTable: <TTableDef extends {
|
|
8
8
|
sqliteDef: DbSchema.DefaultSqliteTableDefConstrained;
|
|
9
9
|
isSingleColumn: boolean;
|
|
10
|
-
options:
|
|
10
|
+
options: TableOptions;
|
|
11
11
|
schema: Schema.Schema<any, any, never>;
|
|
12
12
|
}>(table: TTableDef) => {
|
|
13
13
|
insert: import("./schema/mutations.js").MutationDef<`_Derived_Create_${string}`, {
|
|
@@ -16,19 +16,19 @@ export declare const makeDerivedMutationDefsForTable: <TTableDef extends {
|
|
|
16
16
|
readonly [x: string]: any;
|
|
17
17
|
}>;
|
|
18
18
|
update: import("./schema/mutations.js").MutationDef<`_Derived_Update_${string}`, {
|
|
19
|
-
readonly values: {
|
|
20
|
-
[x: string]: any;
|
|
21
|
-
};
|
|
22
19
|
readonly where: {
|
|
23
20
|
[x: string]: any;
|
|
24
21
|
};
|
|
25
|
-
}, {
|
|
26
22
|
readonly values: {
|
|
27
23
|
[x: string]: any;
|
|
28
24
|
};
|
|
25
|
+
}, {
|
|
29
26
|
readonly where: {
|
|
30
27
|
[x: string]: any;
|
|
31
28
|
};
|
|
29
|
+
readonly values: {
|
|
30
|
+
[x: string]: any;
|
|
31
|
+
};
|
|
32
32
|
}>;
|
|
33
33
|
delete: import("./schema/mutations.js").MutationDef<`_Derived_Delete_${string}`, {
|
|
34
34
|
readonly where: {
|
|
@@ -43,7 +43,7 @@ export declare const makeDerivedMutationDefsForTable: <TTableDef extends {
|
|
|
43
43
|
export declare const deriveCreateMutationDef: <TTableDef extends {
|
|
44
44
|
sqliteDef: DbSchema.DefaultSqliteTableDefConstrained;
|
|
45
45
|
isSingleColumn: boolean;
|
|
46
|
-
options:
|
|
46
|
+
options: TableOptions;
|
|
47
47
|
schema: Schema.Schema<any, any, never>;
|
|
48
48
|
}>(table: TTableDef) => import("./schema/mutations.js").MutationDef<`_Derived_Create_${string}`, {
|
|
49
49
|
readonly [x: string]: any;
|
|
@@ -53,27 +53,27 @@ export declare const deriveCreateMutationDef: <TTableDef extends {
|
|
|
53
53
|
export declare const deriveUpdateMutationDef: <TTableDef extends {
|
|
54
54
|
sqliteDef: DbSchema.DefaultSqliteTableDefConstrained;
|
|
55
55
|
isSingleColumn: boolean;
|
|
56
|
-
options:
|
|
56
|
+
options: TableOptions;
|
|
57
57
|
schema: Schema.Schema<any, any, never>;
|
|
58
58
|
}>(table: TTableDef) => import("./schema/mutations.js").MutationDef<`_Derived_Update_${string}`, {
|
|
59
|
-
readonly values: {
|
|
60
|
-
[x: string]: any;
|
|
61
|
-
};
|
|
62
59
|
readonly where: {
|
|
63
60
|
[x: string]: any;
|
|
64
61
|
};
|
|
65
|
-
}, {
|
|
66
62
|
readonly values: {
|
|
67
63
|
[x: string]: any;
|
|
68
64
|
};
|
|
65
|
+
}, {
|
|
69
66
|
readonly where: {
|
|
70
67
|
[x: string]: any;
|
|
71
68
|
};
|
|
69
|
+
readonly values: {
|
|
70
|
+
[x: string]: any;
|
|
71
|
+
};
|
|
72
72
|
}>;
|
|
73
73
|
export declare const deriveDeleteMutationDef: <TTableDef extends {
|
|
74
74
|
sqliteDef: DbSchema.DefaultSqliteTableDefConstrained;
|
|
75
75
|
isSingleColumn: boolean;
|
|
76
|
-
options:
|
|
76
|
+
options: TableOptions;
|
|
77
77
|
schema: Schema.Schema<any, any, never>;
|
|
78
78
|
}>(table: TTableDef) => import("./schema/mutations.js").MutationDef<`_Derived_Delete_${string}`, {
|
|
79
79
|
readonly where: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derived-mutations.d.ts","sourceRoot":"","sources":["../src/derived-mutations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAkB,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"derived-mutations.d.ts","sourceRoot":"","sources":["../src/derived-mutations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ReadonlyRecord, Schema } from '@livestore/utils/effect';
|
|
2
|
-
import {
|
|
2
|
+
import { defineMutation } from './schema/mutations.js';
|
|
3
|
+
import * as DbSchema from './schema/table-def.js';
|
|
3
4
|
import { deleteRows, insertRow, updateRows } from './sql-queries/sql-queries.js';
|
|
4
5
|
export const makeDerivedMutationDefsForTable = (table) => ({
|
|
5
6
|
insert: deriveCreateMutationDef(table),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derived-mutations.js","sourceRoot":"","sources":["../src/derived-mutations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAIhE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"derived-mutations.js","sourceRoot":"","sources":["../src/derived-mutations.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,4 +2,12 @@ import type { InMemoryDatabase } from '../adapter-types.js';
|
|
|
2
2
|
import type { ParamsObject } from '../util.js';
|
|
3
3
|
export declare const dbExecute: (db: InMemoryDatabase, queryStr: string, bindValues?: ParamsObject) => void;
|
|
4
4
|
export declare const dbSelect: <T>(db: InMemoryDatabase, queryStr: string, bindValues?: ParamsObject) => readonly T[];
|
|
5
|
+
export interface SchemaManager {
|
|
6
|
+
getMutationDefInfos: () => ReadonlyArray<MutationDefInfo>;
|
|
7
|
+
setMutationDefInfo: (mutationDefInfo: MutationDefInfo) => void;
|
|
8
|
+
}
|
|
9
|
+
export type MutationDefInfo = {
|
|
10
|
+
mutationName: string;
|
|
11
|
+
schemaHash: number;
|
|
12
|
+
};
|
|
5
13
|
//# sourceMappingURL=common.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/schema-management/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAO9C,eAAO,MAAM,SAAS,OAAQ,gBAAgB,YAAY,MAAM,eAAe,YAAY,SAU1F,CAAA;AAED,eAAO,MAAM,QAAQ,UAAW,gBAAgB,YAAY,MAAM,eAAe,YAAY,iBAQ5F,CAAA"}
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/schema-management/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAO9C,eAAO,MAAM,SAAS,OAAQ,gBAAgB,YAAY,MAAM,eAAe,YAAY,SAU1F,CAAA;AAED,eAAO,MAAM,QAAQ,UAAW,gBAAgB,YAAY,MAAM,eAAe,YAAY,iBAQ5F,CAAA;AAED,MAAM,WAAW,aAAa;IAC5B,mBAAmB,EAAE,MAAM,aAAa,CAAC,eAAe,CAAC,CAAA;IAEzD,kBAAkB,EAAE,CAAC,eAAe,EAAE,eAAe,KAAK,IAAI,CAAA;CAC/D;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA"}
|
|
@@ -2,6 +2,8 @@ import * as otel from '@opentelemetry/api';
|
|
|
2
2
|
import { SqliteAst } from 'effect-db-schema';
|
|
3
3
|
import type { InMemoryDatabase } from '../adapter-types.js';
|
|
4
4
|
import type { LiveStoreSchema } from '../schema/index.js';
|
|
5
|
+
import type { SchemaManager } from './common.js';
|
|
6
|
+
export declare const makeSchemaManager: (db: InMemoryDatabase) => SchemaManager;
|
|
5
7
|
export declare const migrateDb: ({ db, otelContext, schema, }: {
|
|
6
8
|
db: InMemoryDatabase;
|
|
7
9
|
otelContext?: otel.Context;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/schema-management/migrations.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAa,MAAM,kBAAkB,CAAA;AAEvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAUzD,eAAO,MAAM,SAAS,iCAInB;IACD,EAAE,EAAE,gBAAgB,CAAA;IACpB,WAAW,CAAC,EAAE,KAAK,OAAO,CAAA;IAC1B,MAAM,EAAE,eAAe,CAAA;CACxB,SAsCA,CAAA;AAED,eAAO,MAAM,YAAY,4DAOtB;IACD,EAAE,EAAE,gBAAgB,CAAA;IACpB,QAAQ,EAAE,UAAU,KAAK,CAAA;IACzB,WAAW,CAAC,EAAE,KAAK,OAAO,CAAA;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,mBAAmB,GAAG,sBAAsB,CAAA;IACvD,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,SA6BA,CAAA"}
|
|
1
|
+
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/schema-management/migrations.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAa,MAAM,kBAAkB,CAAA;AAEvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAUzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAMhD,eAAO,MAAM,iBAAiB,OAAQ,gBAAgB,KAAG,aA6BxD,CAAA;AAGD,eAAO,MAAM,SAAS,iCAInB;IACD,EAAE,EAAE,gBAAgB,CAAA;IACpB,WAAW,CAAC,EAAE,KAAK,OAAO,CAAA;IAC1B,MAAM,EAAE,eAAe,CAAA;CACxB,SAsCA,CAAA;AAED,eAAO,MAAM,YAAY,4DAOtB;IACD,EAAE,EAAE,gBAAgB,CAAA;IACpB,QAAQ,EAAE,UAAU,KAAK,CAAA;IACzB,WAAW,CAAC,EAAE,KAAK,OAAO,CAAA;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,mBAAmB,GAAG,sBAAsB,CAAA;IACvD,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,SA6BA,CAAA"}
|
|
@@ -2,11 +2,32 @@ import { memoizeByStringifyArgs } from '@livestore/utils';
|
|
|
2
2
|
import { Schema as EffectSchema } from '@livestore/utils/effect';
|
|
3
3
|
import * as otel from '@opentelemetry/api';
|
|
4
4
|
import { SqliteAst, SqliteDsl } from 'effect-db-schema';
|
|
5
|
-
import { SCHEMA_META_TABLE, schemaMetaTable, systemTables } from '../schema/system-tables.js';
|
|
5
|
+
import { SCHEMA_META_TABLE, SCHEMA_MUTATIONS_META_TABLE, schemaMetaTable, schemaMutationsMetaTable, systemTables, } from '../schema/system-tables.js';
|
|
6
6
|
import { sql } from '../util.js';
|
|
7
7
|
import { dbExecute, dbSelect } from './common.js';
|
|
8
|
-
import {
|
|
8
|
+
import { validateSchema } from './validate-mutation-defs.js';
|
|
9
9
|
const getMemoizedTimestamp = memoizeByStringifyArgs(() => new Date().toISOString());
|
|
10
|
+
export const makeSchemaManager = (db) => {
|
|
11
|
+
migrateTable({
|
|
12
|
+
db,
|
|
13
|
+
otelContext: otel.context.active(),
|
|
14
|
+
tableAst: schemaMutationsMetaTable.sqliteDef.ast,
|
|
15
|
+
behaviour: 'create-if-not-exists',
|
|
16
|
+
});
|
|
17
|
+
return {
|
|
18
|
+
getMutationDefInfos: () => {
|
|
19
|
+
const schemaMutationsMetaRows = dbSelect(db, sql `SELECT * FROM ${SCHEMA_MUTATIONS_META_TABLE}`);
|
|
20
|
+
return schemaMutationsMetaRows;
|
|
21
|
+
},
|
|
22
|
+
setMutationDefInfo: (info) => {
|
|
23
|
+
dbExecute(db, sql `INSERT OR REPLACE INTO ${SCHEMA_MUTATIONS_META_TABLE} (mutationName, schemaHash, updatedAt) VALUES ($mutationName, $schemaHash, $updatedAt)`, {
|
|
24
|
+
mutationName: info.mutationName,
|
|
25
|
+
schemaHash: info.schemaHash,
|
|
26
|
+
updatedAt: new Date().toISOString(),
|
|
27
|
+
});
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
};
|
|
10
31
|
// TODO more graceful DB migration (e.g. backup DB before destructive migrations)
|
|
11
32
|
export const migrateDb = ({ db, otelContext = otel.context.active(), schema, }) => {
|
|
12
33
|
migrateTable({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/schema-management/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAChE,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAKvD,OAAO,
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/schema-management/migrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,6 @@
|
|
|
1
|
-
import type { InMemoryDatabase } from '../adapter-types.js';
|
|
2
1
|
import type { LiveStoreSchema } from '../schema/index.js';
|
|
3
2
|
import type { MutationDef } from '../schema/mutations.js';
|
|
3
|
+
import type { MutationDefInfo, SchemaManager } from './common.js';
|
|
4
4
|
export declare const validateSchema: (schema: LiveStoreSchema, schemaManager: SchemaManager) => void;
|
|
5
5
|
export declare const validateMutationDef: (mutationDef: MutationDef.Any, schemaManager: SchemaManager, registeredMutationDefInfo: MutationDefInfo | undefined) => void;
|
|
6
|
-
interface SchemaManager {
|
|
7
|
-
getMutationDefInfos: () => ReadonlyArray<MutationDefInfo>;
|
|
8
|
-
setMutationDefInfo: (mutationDefInfo: MutationDefInfo) => void;
|
|
9
|
-
}
|
|
10
|
-
type MutationDefInfo = {
|
|
11
|
-
mutationName: string;
|
|
12
|
-
schemaHash: number;
|
|
13
|
-
};
|
|
14
|
-
export declare const makeSchemaManager: (db: InMemoryDatabase) => SchemaManager;
|
|
15
|
-
export {};
|
|
16
6
|
//# sourceMappingURL=validate-mutation-defs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-mutation-defs.d.ts","sourceRoot":"","sources":["../../src/schema-management/validate-mutation-defs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validate-mutation-defs.d.ts","sourceRoot":"","sources":["../../src/schema-management/validate-mutation-defs.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEjE,eAAO,MAAM,cAAc,WAAY,eAAe,iBAAiB,aAAa,SAqBnF,CAAA;AAED,eAAO,MAAM,mBAAmB,gBACjB,YAAY,GAAG,iBACb,aAAa,6BACD,eAAe,GAAG,SAAS,SA0BvD,CAAA"}
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import { shouldNeverHappen } from '@livestore/utils';
|
|
2
2
|
import { Schema } from '@livestore/utils/effect';
|
|
3
|
-
import * as otel from '@opentelemetry/api';
|
|
4
|
-
import { SCHEMA_MUTATIONS_META_TABLE, schemaMutationsMetaTable } from '../schema/system-tables.js';
|
|
5
|
-
import { sql } from '../util.js';
|
|
6
|
-
import { dbExecute, dbSelect } from './common.js';
|
|
7
|
-
import { migrateTable } from './migrations.js';
|
|
8
3
|
export const validateSchema = (schema, schemaManager) => {
|
|
9
4
|
// Validate mutation definitions
|
|
10
5
|
const registeredMutationDefInfos = schemaManager.getMutationDefInfos();
|
|
@@ -39,25 +34,4 @@ export const validateMutationDef = (mutationDef, schemaManager, registeredMutati
|
|
|
39
34
|
mutationName: mutationDef.name,
|
|
40
35
|
});
|
|
41
36
|
};
|
|
42
|
-
export const makeSchemaManager = (db) => {
|
|
43
|
-
migrateTable({
|
|
44
|
-
db,
|
|
45
|
-
otelContext: otel.context.active(),
|
|
46
|
-
tableAst: schemaMutationsMetaTable.sqliteDef.ast,
|
|
47
|
-
behaviour: 'create-if-not-exists',
|
|
48
|
-
});
|
|
49
|
-
return {
|
|
50
|
-
getMutationDefInfos: () => {
|
|
51
|
-
const schemaMutationsMetaRows = dbSelect(db, sql `SELECT * FROM ${SCHEMA_MUTATIONS_META_TABLE}`);
|
|
52
|
-
return schemaMutationsMetaRows;
|
|
53
|
-
},
|
|
54
|
-
setMutationDefInfo: (info) => {
|
|
55
|
-
dbExecute(db, sql `INSERT OR REPLACE INTO ${SCHEMA_MUTATIONS_META_TABLE} (mutationName, schemaHash, updatedAt) VALUES ($mutationName, $schemaHash, $updatedAt)`, {
|
|
56
|
-
mutationName: info.mutationName,
|
|
57
|
-
schemaHash: info.schemaHash,
|
|
58
|
-
updatedAt: new Date().toISOString(),
|
|
59
|
-
});
|
|
60
|
-
},
|
|
61
|
-
};
|
|
62
|
-
};
|
|
63
37
|
//# sourceMappingURL=validate-mutation-defs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-mutation-defs.js","sourceRoot":"","sources":["../../src/schema-management/validate-mutation-defs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"validate-mutation-defs.js","sourceRoot":"","sources":["../../src/schema-management/validate-mutation-defs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAMhD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAuB,EAAE,aAA4B,EAAE,EAAE;IACtF,gCAAgC;IAChC,MAAM,0BAA0B,GAAG,aAAa,CAAC,mBAAmB,EAAE,CAAA;IAEtE,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,MAAM,CAC3D,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAC7F,CAAA;IAED,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,iBAAiB,CACf,iCAAiC,mBAAmB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACnG,CAAA;IACH,CAAC;IAED,KAAK,MAAM,CAAC,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QAC/C,MAAM,yBAAyB,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,KAAK,WAAW,CAAC,IAAI,CAAC,CAAA;QAEnH,mBAAmB,CAAC,WAAW,EAAE,aAAa,EAAE,yBAAyB,CAAC,CAAA;IAC5E,CAAC;IAED,yBAAyB;AAC3B,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,WAA4B,EAC5B,aAA4B,EAC5B,yBAAsD,EACtD,EAAE;IACF,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;IAElD,IAAI,yBAAyB,KAAK,SAAS,EAAE,CAAC;QAC5C,aAAa,CAAC,kBAAkB,CAAC;YAC/B,UAAU;YACV,YAAY,EAAE,WAAW,CAAC,IAAI;SAC/B,CAAC,CAAA;QAEF,OAAM;IACR,CAAC;IAED,IAAI,UAAU,KAAK,yBAAyB,CAAC,UAAU;QAAE,OAAM;IAE/D,mHAAmH;IACnH,8GAA8G;IAE9G,6CAA6C;IAC7C,oGAAoG;IACpG,IAAI;IAEJ,aAAa,CAAC,kBAAkB,CAAC;QAC/B,UAAU;QACV,YAAY,EAAE,WAAW,CAAC,IAAI;KAC/B,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livestore/common",
|
|
3
|
-
"version": "0.0.48-dev.
|
|
3
|
+
"version": "0.0.48-dev.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@opentelemetry/api": "^1.9.0",
|
|
32
|
-
"@livestore/utils": "0.0.48-dev.
|
|
33
|
-
"effect-db-schema": "0.0.48-dev.
|
|
32
|
+
"@livestore/utils": "0.0.48-dev.1",
|
|
33
|
+
"effect-db-schema": "0.0.48-dev.1"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"vitest": "^1.6.0"
|
package/src/derived-mutations.ts
CHANGED
|
@@ -2,9 +2,10 @@ import type { GetValForKey } from '@livestore/utils'
|
|
|
2
2
|
import { ReadonlyRecord, Schema } from '@livestore/utils/effect'
|
|
3
3
|
import type { SqliteDsl } from 'effect-db-schema'
|
|
4
4
|
|
|
5
|
-
import type { MutationEvent } from './schema/
|
|
6
|
-
import {
|
|
5
|
+
import type { MutationEvent } from './schema/mutations.js'
|
|
6
|
+
import { defineMutation } from './schema/mutations.js'
|
|
7
7
|
import type { TableOptions } from './schema/table-def.js'
|
|
8
|
+
import * as DbSchema from './schema/table-def.js'
|
|
8
9
|
import { deleteRows, insertRow, updateRows } from './sql-queries/sql-queries.js'
|
|
9
10
|
|
|
10
11
|
export const makeDerivedMutationDefsForTable = <TTableDef extends DbSchema.TableDef>(table: TTableDef) => ({
|
|
@@ -27,3 +27,14 @@ export const dbSelect = <T>(db: InMemoryDatabase, queryStr: string, bindValues?:
|
|
|
27
27
|
|
|
28
28
|
return stmt.select<T>(bindValues ? prepareBindValues(bindValues, queryStr) : undefined)
|
|
29
29
|
}
|
|
30
|
+
|
|
31
|
+
export interface SchemaManager {
|
|
32
|
+
getMutationDefInfos: () => ReadonlyArray<MutationDefInfo>
|
|
33
|
+
|
|
34
|
+
setMutationDefInfo: (mutationDefInfo: MutationDefInfo) => void
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export type MutationDefInfo = {
|
|
38
|
+
mutationName: string
|
|
39
|
+
schemaHash: number
|
|
40
|
+
}
|
|
@@ -5,14 +5,52 @@ import { SqliteAst, SqliteDsl } from 'effect-db-schema'
|
|
|
5
5
|
|
|
6
6
|
import type { InMemoryDatabase } from '../adapter-types.js'
|
|
7
7
|
import type { LiveStoreSchema } from '../schema/index.js'
|
|
8
|
-
import type { SchemaMetaRow } from '../schema/system-tables.js'
|
|
9
|
-
import {
|
|
8
|
+
import type { SchemaMetaRow, SchemaMutationsMetaRow } from '../schema/system-tables.js'
|
|
9
|
+
import {
|
|
10
|
+
SCHEMA_META_TABLE,
|
|
11
|
+
SCHEMA_MUTATIONS_META_TABLE,
|
|
12
|
+
schemaMetaTable,
|
|
13
|
+
schemaMutationsMetaTable,
|
|
14
|
+
systemTables,
|
|
15
|
+
} from '../schema/system-tables.js'
|
|
10
16
|
import { sql } from '../util.js'
|
|
17
|
+
import type { SchemaManager } from './common.js'
|
|
11
18
|
import { dbExecute, dbSelect } from './common.js'
|
|
12
|
-
import {
|
|
19
|
+
import { validateSchema } from './validate-mutation-defs.js'
|
|
13
20
|
|
|
14
21
|
const getMemoizedTimestamp = memoizeByStringifyArgs(() => new Date().toISOString())
|
|
15
22
|
|
|
23
|
+
export const makeSchemaManager = (db: InMemoryDatabase): SchemaManager => {
|
|
24
|
+
migrateTable({
|
|
25
|
+
db,
|
|
26
|
+
otelContext: otel.context.active(),
|
|
27
|
+
tableAst: schemaMutationsMetaTable.sqliteDef.ast,
|
|
28
|
+
behaviour: 'create-if-not-exists',
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
return {
|
|
32
|
+
getMutationDefInfos: () => {
|
|
33
|
+
const schemaMutationsMetaRows = dbSelect<SchemaMutationsMetaRow>(
|
|
34
|
+
db,
|
|
35
|
+
sql`SELECT * FROM ${SCHEMA_MUTATIONS_META_TABLE}`,
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
return schemaMutationsMetaRows
|
|
39
|
+
},
|
|
40
|
+
setMutationDefInfo: (info) => {
|
|
41
|
+
dbExecute(
|
|
42
|
+
db,
|
|
43
|
+
sql`INSERT OR REPLACE INTO ${SCHEMA_MUTATIONS_META_TABLE} (mutationName, schemaHash, updatedAt) VALUES ($mutationName, $schemaHash, $updatedAt)`,
|
|
44
|
+
{
|
|
45
|
+
mutationName: info.mutationName,
|
|
46
|
+
schemaHash: info.schemaHash,
|
|
47
|
+
updatedAt: new Date().toISOString(),
|
|
48
|
+
},
|
|
49
|
+
)
|
|
50
|
+
},
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
16
54
|
// TODO more graceful DB migration (e.g. backup DB before destructive migrations)
|
|
17
55
|
export const migrateDb = ({
|
|
18
56
|
db,
|
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
import { shouldNeverHappen } from '@livestore/utils'
|
|
2
2
|
import { Schema } from '@livestore/utils/effect'
|
|
3
|
-
import * as otel from '@opentelemetry/api'
|
|
4
3
|
|
|
5
|
-
import type { InMemoryDatabase } from '../adapter-types.js'
|
|
6
4
|
import type { LiveStoreSchema } from '../schema/index.js'
|
|
7
5
|
import type { MutationDef } from '../schema/mutations.js'
|
|
8
|
-
import type {
|
|
9
|
-
import { SCHEMA_MUTATIONS_META_TABLE, schemaMutationsMetaTable } from '../schema/system-tables.js'
|
|
10
|
-
import { sql } from '../util.js'
|
|
11
|
-
import { dbExecute, dbSelect } from './common.js'
|
|
12
|
-
import { migrateTable } from './migrations.js'
|
|
6
|
+
import type { MutationDefInfo, SchemaManager } from './common.js'
|
|
13
7
|
|
|
14
8
|
export const validateSchema = (schema: LiveStoreSchema, schemaManager: SchemaManager) => {
|
|
15
9
|
// Validate mutation definitions
|
|
@@ -64,45 +58,3 @@ export const validateMutationDef = (
|
|
|
64
58
|
mutationName: mutationDef.name,
|
|
65
59
|
})
|
|
66
60
|
}
|
|
67
|
-
|
|
68
|
-
interface SchemaManager {
|
|
69
|
-
getMutationDefInfos: () => ReadonlyArray<MutationDefInfo>
|
|
70
|
-
|
|
71
|
-
setMutationDefInfo: (mutationDefInfo: MutationDefInfo) => void
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
type MutationDefInfo = {
|
|
75
|
-
mutationName: string
|
|
76
|
-
schemaHash: number
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
export const makeSchemaManager = (db: InMemoryDatabase): SchemaManager => {
|
|
80
|
-
migrateTable({
|
|
81
|
-
db,
|
|
82
|
-
otelContext: otel.context.active(),
|
|
83
|
-
tableAst: schemaMutationsMetaTable.sqliteDef.ast,
|
|
84
|
-
behaviour: 'create-if-not-exists',
|
|
85
|
-
})
|
|
86
|
-
|
|
87
|
-
return {
|
|
88
|
-
getMutationDefInfos: () => {
|
|
89
|
-
const schemaMutationsMetaRows = dbSelect<SchemaMutationsMetaRow>(
|
|
90
|
-
db,
|
|
91
|
-
sql`SELECT * FROM ${SCHEMA_MUTATIONS_META_TABLE}`,
|
|
92
|
-
)
|
|
93
|
-
|
|
94
|
-
return schemaMutationsMetaRows
|
|
95
|
-
},
|
|
96
|
-
setMutationDefInfo: (info) => {
|
|
97
|
-
dbExecute(
|
|
98
|
-
db,
|
|
99
|
-
sql`INSERT OR REPLACE INTO ${SCHEMA_MUTATIONS_META_TABLE} (mutationName, schemaHash, updatedAt) VALUES ($mutationName, $schemaHash, $updatedAt)`,
|
|
100
|
-
{
|
|
101
|
-
mutationName: info.mutationName,
|
|
102
|
-
schemaHash: info.schemaHash,
|
|
103
|
-
updatedAt: new Date().toISOString(),
|
|
104
|
-
},
|
|
105
|
-
)
|
|
106
|
-
},
|
|
107
|
-
}
|
|
108
|
-
}
|