@livestore/common 0.3.0-dev.32 → 0.3.0-dev.34
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/adapter-types.d.ts +5 -9
- package/dist/adapter-types.d.ts.map +1 -1
- package/dist/adapter-types.js.map +1 -1
- package/dist/devtools/devtools-messages-client-session.d.ts +22 -21
- package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-client-session.js +1 -0
- package/dist/devtools/devtools-messages-client-session.js.map +1 -1
- package/dist/devtools/devtools-messages-common.d.ts +6 -6
- package/dist/devtools/devtools-messages-leader.d.ts +25 -25
- package/dist/devtools/devtools-messages-leader.js +1 -1
- package/dist/devtools/devtools-messages-leader.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.d.ts +4 -4
- package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.js +21 -17
- package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
- package/dist/leader-thread/apply-event.d.ts +4 -4
- package/dist/leader-thread/apply-event.d.ts.map +1 -1
- package/dist/leader-thread/apply-event.js +9 -9
- package/dist/leader-thread/apply-event.js.map +1 -1
- package/dist/leader-thread/eventlog.d.ts.map +1 -1
- package/dist/leader-thread/eventlog.js +11 -15
- package/dist/leader-thread/eventlog.js.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.js +13 -12
- package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.d.ts +2 -2
- package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.js +11 -18
- package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
- package/dist/leader-thread/materialize-event.d.ts +16 -0
- package/dist/leader-thread/materialize-event.d.ts.map +1 -0
- package/dist/leader-thread/materialize-event.js +103 -0
- package/dist/leader-thread/materialize-event.js.map +1 -0
- package/dist/leader-thread/recreate-db.d.ts.map +1 -1
- package/dist/leader-thread/recreate-db.js +9 -17
- package/dist/leader-thread/recreate-db.js.map +1 -1
- package/dist/leader-thread/types.d.ts +5 -5
- package/dist/leader-thread/types.d.ts.map +1 -1
- package/dist/materializer-helper.d.ts.map +1 -1
- package/dist/materializer-helper.js +1 -1
- package/dist/materializer-helper.js.map +1 -1
- package/dist/query-builder/api.d.ts +4 -4
- package/dist/query-builder/api.d.ts.map +1 -1
- package/dist/query-builder/impl.d.ts +2 -2
- package/dist/query-builder/impl.test.d.ts +5 -5
- package/dist/query-builder/mod.d.ts +2 -2
- package/dist/rehydrate-from-eventlog.d.ts +1 -1
- package/dist/rehydrate-from-eventlog.d.ts.map +1 -1
- package/dist/rehydrate-from-eventlog.js +6 -7
- package/dist/rehydrate-from-eventlog.js.map +1 -1
- package/dist/rematerialize-from-eventlog.d.ts +14 -0
- package/dist/rematerialize-from-eventlog.d.ts.map +1 -0
- package/dist/rematerialize-from-eventlog.js +64 -0
- package/dist/rematerialize-from-eventlog.js.map +1 -0
- package/dist/schema/EventDef.d.ts +1 -1
- package/dist/schema/EventDef.d.ts.map +1 -1
- package/dist/schema/EventId.test.js +1 -1
- package/dist/schema/EventId.test.js.map +1 -1
- package/dist/schema/client-document-def.d.ts +2 -2
- package/dist/schema/db-schema/dsl/mod.d.ts +3 -3
- package/dist/schema/db-schema/mod.d.ts +2 -2
- package/dist/schema/mod.d.ts +4 -4
- package/dist/schema/mod.d.ts.map +1 -1
- package/dist/schema/mod.js +4 -4
- package/dist/schema/mod.js.map +1 -1
- package/dist/schema/schema-helpers.d.ts +1 -1
- package/dist/schema/schema.d.ts +12 -14
- package/dist/schema/schema.d.ts.map +1 -1
- package/dist/schema/schema.js +5 -28
- package/dist/schema/schema.js.map +1 -1
- package/dist/schema/state/mod.d.ts +3 -0
- package/dist/schema/state/mod.d.ts.map +1 -0
- package/dist/schema/state/mod.js +3 -0
- package/dist/schema/state/mod.js.map +1 -0
- package/dist/schema/state/sqlite/client-document-def.d.ts +223 -0
- package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -0
- package/dist/schema/state/sqlite/client-document-def.js +170 -0
- package/dist/schema/state/sqlite/client-document-def.js.map +1 -0
- package/dist/schema/state/sqlite/client-document-def.test.d.ts +2 -0
- package/dist/schema/state/sqlite/client-document-def.test.d.ts.map +1 -0
- package/dist/schema/state/sqlite/client-document-def.test.js +201 -0
- package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -0
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts +69 -0
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts.map +1 -0
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.js +71 -0
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.js.map +1 -0
- package/dist/schema/state/sqlite/db-schema/ast/validate.d.ts +3 -0
- package/dist/schema/state/sqlite/db-schema/ast/validate.d.ts.map +1 -0
- package/dist/schema/state/sqlite/db-schema/ast/validate.js +12 -0
- package/dist/schema/state/sqlite/db-schema/ast/validate.js.map +1 -0
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts +90 -0
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts.map +1 -0
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js +87 -0
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js.map +1 -0
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.d.ts +2 -0
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.d.ts.map +1 -0
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js +29 -0
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js.map +1 -0
- package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts +90 -0
- package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts.map +1 -0
- package/dist/schema/state/sqlite/db-schema/dsl/mod.js +41 -0
- package/dist/schema/state/sqlite/db-schema/dsl/mod.js.map +1 -0
- package/dist/schema/state/sqlite/db-schema/hash.d.ts +2 -0
- package/dist/schema/state/sqlite/db-schema/hash.d.ts.map +1 -0
- package/dist/schema/state/sqlite/db-schema/hash.js +14 -0
- package/dist/schema/state/sqlite/db-schema/hash.js.map +1 -0
- package/dist/schema/state/sqlite/db-schema/mod.d.ts +3 -0
- package/dist/schema/state/sqlite/db-schema/mod.d.ts.map +1 -0
- package/dist/schema/state/sqlite/db-schema/mod.js +3 -0
- package/dist/schema/state/sqlite/db-schema/mod.js.map +1 -0
- package/dist/schema/state/sqlite/mod.d.ts +17 -0
- package/dist/schema/state/sqlite/mod.d.ts.map +1 -0
- package/dist/schema/state/sqlite/mod.js +41 -0
- package/dist/schema/state/sqlite/mod.js.map +1 -0
- package/dist/schema/state/sqlite/query-builder/api.d.ts +293 -0
- package/dist/schema/state/sqlite/query-builder/api.d.ts.map +1 -0
- package/dist/schema/state/sqlite/query-builder/api.js +6 -0
- package/dist/schema/state/sqlite/query-builder/api.js.map +1 -0
- package/dist/schema/state/sqlite/query-builder/astToSql.d.ts +7 -0
- package/dist/schema/state/sqlite/query-builder/astToSql.d.ts.map +1 -0
- package/dist/schema/state/sqlite/query-builder/astToSql.js +190 -0
- package/dist/schema/state/sqlite/query-builder/astToSql.js.map +1 -0
- package/dist/schema/state/sqlite/query-builder/impl.d.ts +7 -0
- package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -0
- package/dist/schema/state/sqlite/query-builder/impl.js +286 -0
- package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -0
- package/dist/schema/state/sqlite/query-builder/impl.test.d.ts +87 -0
- package/dist/schema/state/sqlite/query-builder/impl.test.d.ts.map +1 -0
- package/dist/schema/state/sqlite/query-builder/impl.test.js +554 -0
- package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -0
- package/dist/schema/state/sqlite/query-builder/mod.d.ts +17 -0
- package/dist/schema/state/sqlite/query-builder/mod.d.ts.map +1 -0
- package/dist/schema/state/sqlite/query-builder/mod.js +17 -0
- package/dist/schema/state/sqlite/query-builder/mod.js.map +1 -0
- package/dist/schema/state/sqlite/schema-helpers.d.ts +4 -0
- package/dist/schema/state/sqlite/schema-helpers.d.ts.map +1 -0
- package/dist/schema/state/sqlite/schema-helpers.js +30 -0
- package/dist/schema/state/sqlite/schema-helpers.js.map +1 -0
- package/dist/schema/state/sqlite/sqlite-state.d.ts +12 -0
- package/dist/schema/state/sqlite/sqlite-state.d.ts.map +1 -0
- package/dist/schema/state/sqlite/sqlite-state.js +36 -0
- package/dist/schema/state/sqlite/sqlite-state.js.map +1 -0
- package/dist/schema/state/sqlite/system-tables.d.ts +574 -0
- package/dist/schema/state/sqlite/system-tables.d.ts.map +1 -0
- package/dist/schema/state/sqlite/system-tables.js +87 -0
- package/dist/schema/state/sqlite/system-tables.js.map +1 -0
- package/dist/schema/state/sqlite/table-def.d.ts +84 -0
- package/dist/schema/state/sqlite/table-def.d.ts.map +1 -0
- package/dist/schema/state/sqlite/table-def.js +36 -0
- package/dist/schema/state/sqlite/table-def.js.map +1 -0
- package/dist/schema/state/state.d.ts +3 -0
- package/dist/schema/state/state.d.ts.map +1 -0
- package/dist/schema/state/state.js +3 -0
- package/dist/schema/state/state.js.map +1 -0
- package/dist/schema/state.d.ts +3 -0
- package/dist/schema/state.d.ts.map +1 -0
- package/dist/schema/state.js +3 -0
- package/dist/schema/state.js.map +1 -0
- package/dist/schema/system-tables.d.ts +7 -433
- package/dist/schema/system-tables.d.ts.map +1 -1
- package/dist/schema/system-tables.js +1 -1
- package/dist/schema/system-tables.js.map +1 -1
- package/dist/schema/table-def.d.ts +2 -2
- package/dist/schema-management/migrations.d.ts +1 -1
- package/dist/schema-management/migrations.d.ts.map +1 -1
- package/dist/schema-management/migrations.js +14 -12
- package/dist/schema-management/migrations.js.map +1 -1
- package/dist/schema-management/validate-schema.d.ts +8 -0
- package/dist/schema-management/validate-schema.d.ts.map +1 -0
- package/dist/schema-management/validate-schema.js +39 -0
- package/dist/schema-management/validate-schema.js.map +1 -0
- package/dist/sql-queries/sql-queries.d.ts +1 -1
- package/dist/sql-queries/sql-queries.d.ts.map +1 -1
- package/dist/sql-queries/sql-query-builder.d.ts +1 -1
- package/dist/sql-queries/sql-query-builder.d.ts.map +1 -1
- package/dist/sql-queries/types.d.ts +1 -1
- package/dist/sql-queries/types.d.ts.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.d.ts +3 -3
- package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.js +6 -6
- package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
- package/dist/sync/syncstate.d.ts +2 -2
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +9 -3
- package/src/adapter-types.ts +4 -10
- package/src/devtools/devtools-messages-client-session.ts +1 -0
- package/src/devtools/devtools-messages-leader.ts +1 -1
- package/src/index.ts +3 -3
- package/src/leader-thread/LeaderSyncProcessor.ts +28 -30
- package/src/leader-thread/eventlog.ts +12 -17
- package/src/leader-thread/leader-worker-devtools.ts +15 -12
- package/src/leader-thread/make-leader-thread-layer.ts +15 -21
- package/src/leader-thread/{apply-event.ts → materialize-event.ts} +22 -28
- package/src/leader-thread/recreate-db.ts +9 -21
- package/src/leader-thread/types.ts +5 -5
- package/src/materializer-helper.ts +1 -1
- package/src/{rehydrate-from-eventlog.ts → rematerialize-from-eventlog.ts} +41 -38
- package/src/schema/EventDef.ts +1 -1
- package/src/schema/EventId.test.ts +1 -1
- package/src/schema/mod.ts +4 -4
- package/src/schema/schema.ts +18 -52
- package/src/schema/state/mod.ts +2 -0
- package/src/schema/{client-document-def.test.ts → state/sqlite/client-document-def.test.ts} +2 -2
- package/src/schema/{client-document-def.ts → state/sqlite/client-document-def.ts} +6 -6
- package/src/schema/{sqlite-state.ts → state/sqlite/mod.ts} +17 -6
- package/src/{query-builder → schema/state/sqlite/query-builder}/api.ts +21 -22
- package/src/{query-builder → schema/state/sqlite/query-builder}/astToSql.ts +3 -3
- package/src/{query-builder → schema/state/sqlite/query-builder}/impl.test.ts +1 -1
- package/src/{query-builder → schema/state/sqlite/query-builder}/impl.ts +3 -4
- package/src/schema/{schema-helpers.ts → state/sqlite/schema-helpers.ts} +1 -1
- package/src/schema/{system-tables.ts → state/sqlite/system-tables.ts} +6 -5
- package/src/schema/{table-def.ts → state/sqlite/table-def.ts} +2 -2
- package/src/schema-management/migrations.ts +17 -15
- package/src/sql-queries/sql-queries.ts +1 -1
- package/src/sql-queries/sql-query-builder.ts +1 -1
- package/src/sql-queries/types.ts +1 -1
- package/src/sync/ClientSessionSyncProcessor.ts +7 -7
- package/src/version.ts +1 -1
- package/src/schema/view.ts +0 -2
- package/tmp/pack.tgz +0 -0
- package/tsconfig.json +0 -12
- /package/src/schema/{db-schema → state/sqlite/db-schema}/ast/sqlite.ts +0 -0
- /package/src/schema/{db-schema → state/sqlite/db-schema}/ast/validate.ts +0 -0
- /package/src/schema/{db-schema → state/sqlite/db-schema}/dsl/__snapshots__/field-defs.test.ts.snap +0 -0
- /package/src/schema/{db-schema → state/sqlite/db-schema}/dsl/field-defs.test.ts +0 -0
- /package/src/schema/{db-schema → state/sqlite/db-schema}/dsl/field-defs.ts +0 -0
- /package/src/schema/{db-schema → state/sqlite/db-schema}/dsl/mod.ts +0 -0
- /package/src/schema/{db-schema → state/sqlite/db-schema}/hash.ts +0 -0
- /package/src/schema/{db-schema → state/sqlite/db-schema}/mod.ts +0 -0
- /package/src/{query-builder → schema/state/sqlite/query-builder}/mod.ts +0 -0
- /package/src/schema-management/{validate-mutation-defs.ts → validate-schema.ts} +0 -0
@@ -0,0 +1,69 @@
|
|
1
|
+
import { type Option, Schema } from '@livestore/utils/effect';
|
2
|
+
export declare namespace ColumnType {
|
3
|
+
type ColumnType = Text | Null | Real | Integer | Blob;
|
4
|
+
type Text = {
|
5
|
+
_tag: 'text';
|
6
|
+
};
|
7
|
+
type Null = {
|
8
|
+
_tag: 'null';
|
9
|
+
};
|
10
|
+
type Real = {
|
11
|
+
_tag: 'real';
|
12
|
+
};
|
13
|
+
type Integer = {
|
14
|
+
_tag: 'integer';
|
15
|
+
};
|
16
|
+
type Blob = {
|
17
|
+
_tag: 'blob';
|
18
|
+
};
|
19
|
+
}
|
20
|
+
export type Column = {
|
21
|
+
_tag: 'column';
|
22
|
+
name: string;
|
23
|
+
type: ColumnType.ColumnType;
|
24
|
+
primaryKey: boolean;
|
25
|
+
nullable: boolean;
|
26
|
+
default: Option.Option<any>;
|
27
|
+
schema: Schema.Schema<any>;
|
28
|
+
};
|
29
|
+
export declare const column: (props: Omit<Column, "_tag">) => Column;
|
30
|
+
export type Index = {
|
31
|
+
_tag: 'index';
|
32
|
+
columns: ReadonlyArray<string>;
|
33
|
+
name?: string;
|
34
|
+
unique?: boolean;
|
35
|
+
primaryKey?: boolean;
|
36
|
+
};
|
37
|
+
export declare const index: (columns: ReadonlyArray<string>, name?: string, unique?: boolean, primaryKey?: boolean) => Index;
|
38
|
+
export type ForeignKey = {
|
39
|
+
_tag: 'foreignKey';
|
40
|
+
references: {
|
41
|
+
table: string;
|
42
|
+
columns: ReadonlyArray<string>;
|
43
|
+
};
|
44
|
+
key: {
|
45
|
+
table: string;
|
46
|
+
columns: ReadonlyArray<string>;
|
47
|
+
};
|
48
|
+
columns: ReadonlyArray<string>;
|
49
|
+
};
|
50
|
+
export type Table = {
|
51
|
+
_tag: 'table';
|
52
|
+
name: string;
|
53
|
+
columns: ReadonlyArray<Column>;
|
54
|
+
indexes: ReadonlyArray<Index>;
|
55
|
+
};
|
56
|
+
export declare const table: (name: string, columns: ReadonlyArray<Column>, indexes: ReadonlyArray<Index>) => Table;
|
57
|
+
export type DbSchema = {
|
58
|
+
_tag: 'dbSchema';
|
59
|
+
tables: Table[];
|
60
|
+
};
|
61
|
+
export declare const dbSchema: (tables: Table[]) => DbSchema;
|
62
|
+
/**
|
63
|
+
* NOTE we're only including SQLite-relevant information in the hash (which excludes the schema mapping)
|
64
|
+
*/
|
65
|
+
export declare const hash: (obj: Table | Column | Index | ForeignKey | DbSchema) => number;
|
66
|
+
export declare const structSchemaForTable: (tableDef: Table) => Schema.Struct<{
|
67
|
+
[k: string]: Schema.Schema<any, any, never>;
|
68
|
+
}>;
|
69
|
+
//# sourceMappingURL=sqlite.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../../../../src/schema/state/sqlite/db-schema/ast/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAI7D,yBAAiB,UAAU,CAAC;IAC1B,KAAY,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,CAAA;IAE5D,KAAY,IAAI,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IAEnC,KAAY,IAAI,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IAEnC,KAAY,IAAI,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IAEnC,KAAY,OAAO,GAAG;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAA;IAEzC,KAAY,IAAI,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CACpC;AAED,MAAM,MAAM,MAAM,GAAG;IACnB,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,UAAU,CAAC,UAAU,CAAA;IAC3B,UAAU,EAAE,OAAO,CAAA;IACnB,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,KAAG,MAAwC,CAAA;AAE7F,MAAM,MAAM,KAAK,GAAG;IAClB,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,KAAK,GAChB,SAAS,aAAa,CAAC,MAAM,CAAC,EAC9B,OAAO,MAAM,EACb,SAAS,OAAO,EAChB,aAAa,OAAO,KACnB,KAMD,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,YAAY,CAAA;IAClB,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;KAC/B,CAAA;IACD,GAAG,EAAE;QACH,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;KAC/B,CAAA;IACD,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,KAAK,GAAG;IAClB,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC9B,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,MAAM,MAAM,EAAE,SAAS,aAAa,CAAC,MAAM,CAAC,EAAE,SAAS,aAAa,CAAC,KAAK,CAAC,KAAG,KAKlG,CAAA;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,UAAU,CAAA;IAChB,MAAM,EAAE,KAAK,EAAE,CAAA;CAChB,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,QAAQ,KAAK,EAAE,KAAG,QAA0C,CAAA;AAErF;;GAEG;AACH,eAAO,MAAM,IAAI,GAAI,KAAK,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,UAAU,GAAG,QAAQ,KAAG,MACzB,CAAA;AAmDlD,eAAO,MAAM,oBAAoB,GAAI,UAAU,KAAK;;EAC+C,CAAA"}
|
@@ -0,0 +1,71 @@
|
|
1
|
+
import { Schema } from '@livestore/utils/effect';
|
2
|
+
import { hashCode } from '../hash.js';
|
3
|
+
export const column = (props) => ({ _tag: 'column', ...props });
|
4
|
+
export const index = (columns, name, unique, primaryKey) => ({
|
5
|
+
_tag: 'index',
|
6
|
+
columns,
|
7
|
+
name,
|
8
|
+
unique,
|
9
|
+
primaryKey,
|
10
|
+
});
|
11
|
+
export const table = (name, columns, indexes) => ({
|
12
|
+
_tag: 'table',
|
13
|
+
name,
|
14
|
+
columns,
|
15
|
+
indexes,
|
16
|
+
});
|
17
|
+
export const dbSchema = (tables) => ({ _tag: 'dbSchema', tables });
|
18
|
+
/**
|
19
|
+
* NOTE we're only including SQLite-relevant information in the hash (which excludes the schema mapping)
|
20
|
+
*/
|
21
|
+
export const hash = (obj) => hashCode(JSON.stringify(trimInfoForHasing(obj)));
|
22
|
+
const trimInfoForHasing = (obj) => {
|
23
|
+
switch (obj._tag) {
|
24
|
+
case 'table': {
|
25
|
+
return {
|
26
|
+
_tag: 'table',
|
27
|
+
name: obj.name,
|
28
|
+
columns: obj.columns.map((column) => trimInfoForHasing(column)),
|
29
|
+
indexes: obj.indexes.map((index) => trimInfoForHasing(index)),
|
30
|
+
};
|
31
|
+
}
|
32
|
+
case 'column': {
|
33
|
+
return {
|
34
|
+
_tag: 'column',
|
35
|
+
name: obj.name,
|
36
|
+
type: obj.type._tag,
|
37
|
+
primaryKey: obj.primaryKey,
|
38
|
+
nullable: obj.nullable,
|
39
|
+
default: obj.default,
|
40
|
+
};
|
41
|
+
}
|
42
|
+
case 'index': {
|
43
|
+
return {
|
44
|
+
_tag: 'index',
|
45
|
+
columns: obj.columns,
|
46
|
+
name: obj.name,
|
47
|
+
unique: obj.unique,
|
48
|
+
primaryKey: obj.primaryKey,
|
49
|
+
};
|
50
|
+
}
|
51
|
+
case 'foreignKey': {
|
52
|
+
return {
|
53
|
+
_tag: 'foreignKey',
|
54
|
+
references: obj.references,
|
55
|
+
key: obj.key,
|
56
|
+
columns: obj.columns,
|
57
|
+
};
|
58
|
+
}
|
59
|
+
case 'dbSchema': {
|
60
|
+
return {
|
61
|
+
_tag: 'dbSchema',
|
62
|
+
tables: obj.tables.map(trimInfoForHasing),
|
63
|
+
};
|
64
|
+
}
|
65
|
+
default: {
|
66
|
+
throw new Error(`Unreachable: ${obj}`);
|
67
|
+
}
|
68
|
+
}
|
69
|
+
};
|
70
|
+
export const structSchemaForTable = (tableDef) => Schema.Struct(Object.fromEntries(tableDef.columns.map((column) => [column.name, column.schema])));
|
71
|
+
//# sourceMappingURL=sqlite.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../../../../src/schema/state/sqlite/db-schema/ast/sqlite.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../../../../src/schema/state/sqlite/db-schema/ast/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAG3C,eAAO,MAAM,QAAQ,GAAI,WAAW,QAAQ,SAS3C,CAAA"}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
// TODO
|
2
|
+
export const validate = (_dbSchema) => {
|
3
|
+
/*
|
4
|
+
TODO:
|
5
|
+
|
6
|
+
- ensure no duplicate table names
|
7
|
+
- ensure no duplicate column names within a table
|
8
|
+
- ensure no duplicate index names globally
|
9
|
+
- ...
|
10
|
+
*/
|
11
|
+
};
|
12
|
+
//# sourceMappingURL=validate.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../../../../src/schema/state/sqlite/db-schema/ast/validate.ts"],"names":[],"mappings":"AAEA,OAAO;AACP,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,SAAmB,EAAE,EAAE;IAC9C;;;;;;;QAOC;AACH,CAAC,CAAA"}
|
@@ -0,0 +1,90 @@
|
|
1
|
+
import { Option, Schema } from '@livestore/utils/effect';
|
2
|
+
export type ColumnDefinition<TEncoded, TDecoded> = {
|
3
|
+
readonly columnType: FieldColumnType;
|
4
|
+
readonly schema: Schema.Schema<TDecoded, TEncoded>;
|
5
|
+
readonly default: Option.Option<TEncoded>;
|
6
|
+
/** @default false */
|
7
|
+
readonly nullable: boolean;
|
8
|
+
/** @default false */
|
9
|
+
readonly primaryKey: boolean;
|
10
|
+
};
|
11
|
+
export declare const isColumnDefinition: (value: unknown) => value is ColumnDefinition<any, any>;
|
12
|
+
export type ColumnDefinitionInput = {
|
13
|
+
readonly schema?: Schema.Schema<unknown>;
|
14
|
+
readonly default?: unknown | NoDefault;
|
15
|
+
readonly nullable?: boolean;
|
16
|
+
readonly primaryKey?: boolean;
|
17
|
+
};
|
18
|
+
export declare const NoDefault: unique symbol;
|
19
|
+
export type NoDefault = typeof NoDefault;
|
20
|
+
export type SqlDefaultValue = {
|
21
|
+
readonly sql: string;
|
22
|
+
};
|
23
|
+
export declare const isSqlDefaultValue: (value: unknown) => value is SqlDefaultValue;
|
24
|
+
export type ColDefFn<TColumnType extends FieldColumnType> = {
|
25
|
+
(): {
|
26
|
+
columnType: TColumnType;
|
27
|
+
schema: Schema.Schema<DefaultEncodedForColumnType<TColumnType>>;
|
28
|
+
default: Option.None<never>;
|
29
|
+
nullable: false;
|
30
|
+
primaryKey: false;
|
31
|
+
};
|
32
|
+
<TEncoded extends DefaultEncodedForColumnType<TColumnType>, TDecoded = DefaultEncodedForColumnType<TColumnType>, const TNullable extends boolean = false, const TDefault extends TDecoded | SqlDefaultValue | NoDefault | (TNullable extends true ? null : never) = NoDefault, const TPrimaryKey extends boolean = false>(args: {
|
33
|
+
schema?: Schema.Schema<TDecoded, TEncoded>;
|
34
|
+
default?: TDefault;
|
35
|
+
nullable?: TNullable;
|
36
|
+
primaryKey?: TPrimaryKey;
|
37
|
+
}): {
|
38
|
+
columnType: TColumnType;
|
39
|
+
schema: TNullable extends true ? Schema.Schema<NoInfer<TDecoded> | null, NoInfer<TEncoded> | null> : Schema.Schema<NoInfer<TDecoded>, NoInfer<TEncoded>>;
|
40
|
+
default: TDefault extends NoDefault ? Option.None<never> : Option.Some<NoInfer<TDefault>>;
|
41
|
+
nullable: NoInfer<TNullable>;
|
42
|
+
primaryKey: NoInfer<TPrimaryKey>;
|
43
|
+
};
|
44
|
+
};
|
45
|
+
export declare const column: <TColumnType extends FieldColumnType>(columnType: TColumnType) => ColDefFn<TColumnType>;
|
46
|
+
export declare const text: ColDefFn<'text'>;
|
47
|
+
export declare const integer: ColDefFn<'integer'>;
|
48
|
+
export declare const real: ColDefFn<'real'>;
|
49
|
+
export declare const blob: ColDefFn<'blob'>;
|
50
|
+
/**
|
51
|
+
* `NoInfer` is needed for some generics to work properly in certain cases.
|
52
|
+
* See full explanation here: https://gist.github.com/schickling/a15e96819826530492b41a10d79d3c04?permalink_comment_id=4805120#gistcomment-4805120
|
53
|
+
*
|
54
|
+
* Big thanks to @andarist for their help with this!
|
55
|
+
*/
|
56
|
+
type NoInfer<T> = [T][T extends any ? 0 : never];
|
57
|
+
export type SpecializedColDefFn<TColumnType extends FieldColumnType, TAllowsCustomSchema extends boolean, TBaseDecoded> = {
|
58
|
+
(): {
|
59
|
+
columnType: TColumnType;
|
60
|
+
schema: Schema.Schema<TBaseDecoded, DefaultEncodedForColumnType<TColumnType>>;
|
61
|
+
default: Option.None<never>;
|
62
|
+
nullable: false;
|
63
|
+
primaryKey: false;
|
64
|
+
};
|
65
|
+
<TDecoded = TBaseDecoded, const TNullable extends boolean = false, const TDefault extends TDecoded | NoDefault | (TNullable extends true ? null : never) = NoDefault, const TPrimaryKey extends boolean = false>(args: TAllowsCustomSchema extends true ? {
|
66
|
+
schema?: Schema.Schema<TDecoded, any>;
|
67
|
+
default?: TDefault;
|
68
|
+
nullable?: TNullable;
|
69
|
+
primaryKey?: TPrimaryKey;
|
70
|
+
} : {
|
71
|
+
default?: TDefault;
|
72
|
+
nullable?: TNullable;
|
73
|
+
primaryKey?: TPrimaryKey;
|
74
|
+
}): {
|
75
|
+
columnType: TColumnType;
|
76
|
+
schema: TNullable extends true ? Schema.Schema<NoInfer<TDecoded> | null, DefaultEncodedForColumnType<TColumnType> | null> : Schema.Schema<NoInfer<TDecoded>, DefaultEncodedForColumnType<TColumnType>>;
|
77
|
+
default: TDefault extends NoDefault ? Option.None<never> : Option.Some<TDefault>;
|
78
|
+
nullable: NoInfer<TNullable>;
|
79
|
+
primaryKey: NoInfer<TPrimaryKey>;
|
80
|
+
};
|
81
|
+
};
|
82
|
+
export declare const json: SpecializedColDefFn<'text', true, unknown>;
|
83
|
+
export declare const datetime: SpecializedColDefFn<'text', false, Date>;
|
84
|
+
export declare const datetimeInteger: SpecializedColDefFn<'integer', false, Date>;
|
85
|
+
export declare const boolean: SpecializedColDefFn<'integer', false, boolean>;
|
86
|
+
export type FieldColumnType = 'text' | 'integer' | 'real' | 'blob';
|
87
|
+
export type DefaultEncodedForColumnType<TColumnType extends FieldColumnType> = TColumnType extends 'text' ? string : TColumnType extends 'integer' ? number : TColumnType extends 'real' ? number : TColumnType extends 'blob' ? Uint8Array : never;
|
88
|
+
export declare const defaultSchemaForColumnType: <TColumnType extends FieldColumnType>(columnType: TColumnType) => Schema.Schema<DefaultEncodedForColumnType<TColumnType>>;
|
89
|
+
export {};
|
90
|
+
//# sourceMappingURL=field-defs.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"field-defs.d.ts","sourceRoot":"","sources":["../../../../../../src/schema/state/sqlite/db-schema/dsl/field-defs.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,87 @@
|
|
1
|
+
import { casesHandled } from '@livestore/utils';
|
2
|
+
import { Option, Schema } from '@livestore/utils/effect';
|
3
|
+
export const isColumnDefinition = (value) => {
|
4
|
+
const validColumnTypes = ['text', 'integer', 'real', 'blob'];
|
5
|
+
return (typeof value === 'object' &&
|
6
|
+
value !== null &&
|
7
|
+
'columnType' in value &&
|
8
|
+
validColumnTypes.includes(value['columnType']));
|
9
|
+
};
|
10
|
+
export const NoDefault = Symbol.for('NoDefault');
|
11
|
+
export const isSqlDefaultValue = (value) => {
|
12
|
+
return typeof value === 'object' && value !== null && 'sql' in value && typeof value['sql'] === 'string';
|
13
|
+
};
|
14
|
+
const makeColDef = (columnType) => (def) => {
|
15
|
+
const nullable = def?.nullable ?? false;
|
16
|
+
const schemaWithoutNull = def?.schema ?? defaultSchemaForColumnType(columnType);
|
17
|
+
const schema = nullable === true ? Schema.NullOr(schemaWithoutNull) : schemaWithoutNull;
|
18
|
+
const default_ = def?.default === undefined || def.default === NoDefault ? Option.none() : Option.some(def.default);
|
19
|
+
return {
|
20
|
+
columnType,
|
21
|
+
schema,
|
22
|
+
default: default_,
|
23
|
+
nullable,
|
24
|
+
primaryKey: def?.primaryKey ?? false,
|
25
|
+
};
|
26
|
+
};
|
27
|
+
export const column = (columnType) => makeColDef(columnType);
|
28
|
+
/// Column definitions
|
29
|
+
export const text = makeColDef('text');
|
30
|
+
export const integer = makeColDef('integer');
|
31
|
+
export const real = makeColDef('real');
|
32
|
+
export const blob = makeColDef('blob');
|
33
|
+
const makeSpecializedColDef = (columnType, opts) => (def) => {
|
34
|
+
const nullable = def?.nullable ?? false;
|
35
|
+
const schemaWithoutNull = opts._tag === 'baseSchemaFn' ? opts.baseSchemaFn(def?.schema) : opts.baseSchema;
|
36
|
+
const schema = nullable === true ? Schema.NullOr(schemaWithoutNull) : schemaWithoutNull;
|
37
|
+
const default_ = def?.default === undefined || def.default === NoDefault ? Option.none() : Option.some(def.default);
|
38
|
+
return {
|
39
|
+
columnType,
|
40
|
+
schema,
|
41
|
+
default: default_,
|
42
|
+
nullable,
|
43
|
+
primaryKey: def?.primaryKey ?? false,
|
44
|
+
};
|
45
|
+
};
|
46
|
+
export const json = makeSpecializedColDef('text', {
|
47
|
+
_tag: 'baseSchemaFn',
|
48
|
+
baseSchemaFn: (customSchema) => Schema.parseJson(customSchema ?? Schema.Any),
|
49
|
+
});
|
50
|
+
export const datetime = makeSpecializedColDef('text', {
|
51
|
+
_tag: 'baseSchema',
|
52
|
+
baseSchema: Schema.Date,
|
53
|
+
});
|
54
|
+
export const datetimeInteger = makeSpecializedColDef('integer', {
|
55
|
+
_tag: 'baseSchema',
|
56
|
+
baseSchema: Schema.transform(Schema.Number, Schema.DateFromSelf, {
|
57
|
+
decode: (ms) => new Date(ms),
|
58
|
+
encode: (date) => date.getTime(),
|
59
|
+
}),
|
60
|
+
});
|
61
|
+
export const boolean = makeSpecializedColDef('integer', {
|
62
|
+
_tag: 'baseSchema',
|
63
|
+
baseSchema: Schema.transform(Schema.Number, Schema.Boolean, {
|
64
|
+
decode: (_) => _ === 1,
|
65
|
+
encode: (_) => (_ ? 1 : 0),
|
66
|
+
}),
|
67
|
+
});
|
68
|
+
export const defaultSchemaForColumnType = (columnType) => {
|
69
|
+
switch (columnType) {
|
70
|
+
case 'text': {
|
71
|
+
return Schema.String;
|
72
|
+
}
|
73
|
+
case 'integer': {
|
74
|
+
return Schema.Number;
|
75
|
+
}
|
76
|
+
case 'real': {
|
77
|
+
return Schema.Number;
|
78
|
+
}
|
79
|
+
case 'blob': {
|
80
|
+
return Schema.Uint8ArrayFromSelf;
|
81
|
+
}
|
82
|
+
default: {
|
83
|
+
return casesHandled(columnType);
|
84
|
+
}
|
85
|
+
}
|
86
|
+
};
|
87
|
+
//# sourceMappingURL=field-defs.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"field-defs.js","sourceRoot":"","sources":["../../../../../../src/schema/state/sqlite/db-schema/dsl/field-defs.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"field-defs.test.d.ts","sourceRoot":"","sources":["../../../../../../src/schema/state/sqlite/db-schema/dsl/field-defs.test.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import { Schema } from '@livestore/utils/effect';
|
2
|
+
import { describe, expect, test } from 'vitest';
|
3
|
+
import * as F from './field-defs.js';
|
4
|
+
describe.concurrent('FieldDefs', () => {
|
5
|
+
test('text', () => {
|
6
|
+
expect(F.text()).toMatchSnapshot();
|
7
|
+
expect(F.text({})).toMatchSnapshot();
|
8
|
+
expect(F.text({ default: null, nullable: true })).toMatchSnapshot();
|
9
|
+
expect(F.text({ schema: Schema.Literal('foo'), nullable: true, default: 'foo' })).toMatchSnapshot();
|
10
|
+
expect(F.text({ schema: Schema.Union(Schema.Literal('foo')), nullable: true, default: 'foo' })).toMatchSnapshot();
|
11
|
+
});
|
12
|
+
test('json', () => {
|
13
|
+
expect(F.json()).toMatchSnapshot();
|
14
|
+
expect(F.json({ default: null, nullable: true })).toMatchSnapshot();
|
15
|
+
expect(F.json({ schema: Schema.Struct({ name: Schema.String }), default: { name: 'Bob' }, nullable: true })).toMatchSnapshot();
|
16
|
+
});
|
17
|
+
test('datetime', () => {
|
18
|
+
expect(F.datetime()).toMatchSnapshot();
|
19
|
+
expect(F.datetime({})).toMatchSnapshot();
|
20
|
+
expect(F.datetime({ default: null, nullable: true })).toMatchSnapshot();
|
21
|
+
expect(F.datetime({ default: new Date('2022-02-02') })).toMatchSnapshot();
|
22
|
+
});
|
23
|
+
test('boolean', () => {
|
24
|
+
expect(F.boolean()).toMatchSnapshot();
|
25
|
+
expect(F.boolean({})).toMatchSnapshot();
|
26
|
+
expect(F.boolean({ default: false })).toMatchSnapshot();
|
27
|
+
});
|
28
|
+
});
|
29
|
+
//# sourceMappingURL=field-defs.test.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"field-defs.test.js","sourceRoot":"","sources":["../../../../../../src/schema/state/sqlite/db-schema/dsl/field-defs.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE/C,OAAO,KAAK,CAAC,MAAM,iBAAiB,CAAA;AAEpC,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG,EAAE;IACpC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;QAChB,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,eAAe,EAAE,CAAA;QAClC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAA;QACpC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAA;QACnE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAA;QACnG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAA;IACnH,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;QAChB,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,eAAe,EAAE,CAAA;QAClC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAA;QACnE,MAAM,CACJ,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CACrG,CAAC,eAAe,EAAE,CAAA;IACrB,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;QACpB,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,eAAe,EAAE,CAAA;QACtC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAA;QACxC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAA;QACvE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAA;IAC3E,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;QACnB,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,eAAe,EAAE,CAAA;QACrC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAA;QACvC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAA;IACzD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
@@ -0,0 +1,90 @@
|
|
1
|
+
import type { Nullable } from '@livestore/utils';
|
2
|
+
import type { Option, Types } from '@livestore/utils/effect';
|
3
|
+
import { Schema } from '@livestore/utils/effect';
|
4
|
+
import type * as SqliteAst from '../ast/sqlite.js';
|
5
|
+
import type { ColumnDefinition } from './field-defs.js';
|
6
|
+
export * from './field-defs.js';
|
7
|
+
export type DbSchema = {
|
8
|
+
[key: string]: TableDefinition<string, Columns>;
|
9
|
+
};
|
10
|
+
/** Note when using the object-notation, the object keys are ignored and not used as table names */
|
11
|
+
export type DbSchemaInput = Record<string, TableDefinition<any, any>> | ReadonlyArray<TableDefinition<any, any>>;
|
12
|
+
/**
|
13
|
+
* In case of ...
|
14
|
+
* - array: we use the table name of each array item (= table definition) as the object key
|
15
|
+
* - object: we discard the keys of the input object and use the table name of each object value (= table definition) as the new object key
|
16
|
+
*/
|
17
|
+
export type DbSchemaFromInputSchema<TSchemaInput extends DbSchemaInput> = TSchemaInput extends ReadonlyArray<TableDefinition<any, any>> ? {
|
18
|
+
[K in TSchemaInput[number] as K['name']]: K;
|
19
|
+
} : TSchemaInput extends Record<string, TableDefinition<any, any>> ? {
|
20
|
+
[K in keyof TSchemaInput as TSchemaInput[K]['name']]: TSchemaInput[K];
|
21
|
+
} : never;
|
22
|
+
export declare const makeDbSchema: <TDbSchemaInput extends DbSchemaInput>(schema: TDbSchemaInput) => DbSchemaFromInputSchema<TDbSchemaInput>;
|
23
|
+
export declare const table: <TTableName extends string, TColumns extends Columns, TIndexes extends Index[]>(name: TTableName, columns: TColumns, indexes?: TIndexes) => TableDefinition<TTableName, TColumns>;
|
24
|
+
export type AnyIfConstained<In, Out> = '__constrained' extends keyof In ? any : Out;
|
25
|
+
export type EmptyObjIfConstained<In> = '__constrained' extends keyof In ? {} : In;
|
26
|
+
export type StructSchemaForColumns<TCols extends ConstraintColumns> = Schema.Schema<AnyIfConstained<TCols, FromColumns.RowDecoded<TCols>>, AnyIfConstained<TCols, FromColumns.RowEncoded<TCols>>>;
|
27
|
+
export type InsertStructSchemaForColumns<TCols extends ConstraintColumns> = Schema.Schema<AnyIfConstained<TCols, FromColumns.InsertRowDecoded<TCols>>, AnyIfConstained<TCols, FromColumns.InsertRowEncoded<TCols>>>;
|
28
|
+
export declare const structSchemaForTable: <TTableDefinition extends TableDefinition<any, any>>(tableDef: TTableDefinition) => StructSchemaForColumns<TTableDefinition["columns"]>;
|
29
|
+
export declare const insertStructSchemaForTable: <TTableDefinition extends TableDefinition<any, any>>(tableDef: TTableDefinition) => InsertStructSchemaForColumns<TTableDefinition["columns"]>;
|
30
|
+
export type TableDefinition<TName extends string, TColumns extends Columns> = {
|
31
|
+
name: TName;
|
32
|
+
columns: TColumns;
|
33
|
+
indexes?: ReadonlyArray<Index>;
|
34
|
+
ast: SqliteAst.Table;
|
35
|
+
};
|
36
|
+
export type Columns = Record<string, ColumnDefinition<any, any>>;
|
37
|
+
export type IsSingleColumn<TColumns extends Columns | ColumnDefinition<any, any>> = TColumns extends ColumnDefinition<any, any> ? true : false;
|
38
|
+
/**
|
39
|
+
* NOTE this is only needed to avoid a TS limitation where `StructSchemaForColumns` in the default case
|
40
|
+
* results in `Record<string, any>` instead of `any`. (Thanks to Andarist for the workaround)
|
41
|
+
*
|
42
|
+
* Hopefully this can be removed in the future
|
43
|
+
*/
|
44
|
+
export type ConstraintColumns = Record<string, ColumnDefinition<any, any>> & {
|
45
|
+
__constrained?: never;
|
46
|
+
};
|
47
|
+
export type Index = {
|
48
|
+
name: string;
|
49
|
+
columns: ReadonlyArray<string>;
|
50
|
+
/** @default false */
|
51
|
+
isUnique?: boolean;
|
52
|
+
};
|
53
|
+
export declare namespace FromTable {
|
54
|
+
type RowDecoded<TTableDefinition extends TableDefinition<any, any>> = Types.Simplify<Nullable<Pick<RowDecodedAll<TTableDefinition>, NullableColumnNames<TTableDefinition>>> & Omit<RowDecodedAll<TTableDefinition>, NullableColumnNames<TTableDefinition>>>;
|
55
|
+
type NullableColumnNames<TTableDefinition extends TableDefinition<any, any>> = FromColumns.NullableColumnNames<TTableDefinition['columns']>;
|
56
|
+
type Columns<TTableDefinition extends TableDefinition<any, any>> = {
|
57
|
+
[K in keyof TTableDefinition['columns']]: TTableDefinition['columns'][K]['columnType'];
|
58
|
+
};
|
59
|
+
type RowEncodeNonNullable<TTableDefinition extends TableDefinition<any, any>> = {
|
60
|
+
[K in keyof TTableDefinition['columns']]: Schema.Schema.Encoded<TTableDefinition['columns'][K]['schema']>;
|
61
|
+
};
|
62
|
+
type RowEncoded<TTableDefinition extends TableDefinition<any, any>> = Types.Simplify<Nullable<Pick<RowEncodeNonNullable<TTableDefinition>, NullableColumnNames<TTableDefinition>>> & Omit<RowEncodeNonNullable<TTableDefinition>, NullableColumnNames<TTableDefinition>>>;
|
63
|
+
type RowDecodedAll<TTableDefinition extends TableDefinition<any, any>> = {
|
64
|
+
[K in keyof TTableDefinition['columns']]: Schema.Schema.Type<TTableDefinition['columns'][K]['schema']>;
|
65
|
+
};
|
66
|
+
}
|
67
|
+
export declare namespace FromColumns {
|
68
|
+
type RowDecoded<TColumns extends Columns> = Types.Simplify<Nullable<Pick<RowDecodedAll<TColumns>, NullableColumnNames<TColumns>>> & Omit<RowDecodedAll<TColumns>, NullableColumnNames<TColumns>>>;
|
69
|
+
type RowDecodedAll<TColumns extends Columns> = {
|
70
|
+
readonly [K in keyof TColumns]: Schema.Schema.Type<TColumns[K]['schema']>;
|
71
|
+
};
|
72
|
+
type RowEncodedAll<TColumns extends Columns> = {
|
73
|
+
readonly [K in keyof TColumns]: Schema.Schema.Encoded<TColumns[K]['schema']>;
|
74
|
+
};
|
75
|
+
type RowEncoded<TColumns extends Columns> = Types.Simplify<Nullable<Pick<RowEncodeNonNullable<TColumns>, NullableColumnNames<TColumns>>> & Omit<RowEncodeNonNullable<TColumns>, NullableColumnNames<TColumns>>>;
|
76
|
+
type RowEncodeNonNullable<TColumns extends Columns> = {
|
77
|
+
readonly [K in keyof TColumns]: Schema.Schema.Encoded<TColumns[K]['schema']>;
|
78
|
+
};
|
79
|
+
type NullableColumnNames<TColumns extends Columns> = keyof {
|
80
|
+
[K in keyof TColumns as TColumns[K] extends ColumnDefinition<any, true> ? K : never]: {};
|
81
|
+
};
|
82
|
+
type RequiredInsertColumns<TColumns extends Columns> = {
|
83
|
+
[K in keyof TColumns as TColumns[K]['nullable'] extends true ? never : TColumns[K]['default'] extends Option.Some<any> ? never : K]: {};
|
84
|
+
};
|
85
|
+
type RequiredInsertColumnNames<TColumns extends Columns> = keyof RequiredInsertColumns<TColumns>;
|
86
|
+
type RequiresInsertValues<TColumns extends Columns> = RequiredInsertColumnNames<TColumns> extends never ? false : true;
|
87
|
+
type InsertRowDecoded<TColumns extends Columns> = Types.Simplify<Pick<RowDecodedAll<TColumns>, RequiredInsertColumnNames<TColumns>> & Partial<Omit<RowDecodedAll<TColumns>, RequiredInsertColumnNames<TColumns>>>>;
|
88
|
+
type InsertRowEncoded<TColumns extends Columns> = Types.Simplify<Pick<RowEncodedAll<TColumns>, RequiredInsertColumnNames<TColumns>> & Partial<Omit<RowEncodedAll<TColumns>, RequiredInsertColumnNames<TColumns>>>>;
|
89
|
+
}
|
90
|
+
//# sourceMappingURL=mod.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../../../src/schema/state/sqlite/db-schema/dsl/mod.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,41 @@
|
|
1
|
+
import { Schema } from '@livestore/utils/effect';
|
2
|
+
export * from './field-defs.js';
|
3
|
+
// TODO ensure via runtime check (possibly even via type-level check) that all index names are unique
|
4
|
+
export const makeDbSchema = (schema) => {
|
5
|
+
return Array.isArray(schema) ? Object.fromEntries(schema.map((_) => [_.name, _])) : schema;
|
6
|
+
};
|
7
|
+
export const table = (name, columns, indexes) => {
|
8
|
+
const ast = {
|
9
|
+
_tag: 'table',
|
10
|
+
name,
|
11
|
+
columns: columsToAst(columns),
|
12
|
+
indexes: indexesToAst(indexes ?? []),
|
13
|
+
};
|
14
|
+
return { name, columns, indexes, ast };
|
15
|
+
};
|
16
|
+
export const structSchemaForTable = (tableDef) => Schema.Struct(Object.fromEntries(tableDef.ast.columns.map((column) => [column.name, column.schema]))).annotations({
|
17
|
+
title: tableDef.name,
|
18
|
+
});
|
19
|
+
export const insertStructSchemaForTable = (tableDef) => Schema.Struct(Object.fromEntries(tableDef.ast.columns.map((column) => [
|
20
|
+
column.name,
|
21
|
+
column.nullable === true || column.default._tag === 'Some' ? Schema.optional(column.schema) : column.schema,
|
22
|
+
]))).annotations({
|
23
|
+
title: tableDef.name,
|
24
|
+
});
|
25
|
+
const columsToAst = (columns) => {
|
26
|
+
return Object.entries(columns).map(([name, column]) => {
|
27
|
+
return {
|
28
|
+
_tag: 'column',
|
29
|
+
name,
|
30
|
+
schema: column.schema,
|
31
|
+
default: column.default,
|
32
|
+
nullable: column.nullable ?? false,
|
33
|
+
primaryKey: column.primaryKey ?? false,
|
34
|
+
type: { _tag: column.columnType },
|
35
|
+
};
|
36
|
+
});
|
37
|
+
};
|
38
|
+
const indexesToAst = (indexes) => {
|
39
|
+
return indexes.map((_) => ({ _tag: 'index', columns: _.columns, name: _.name, unique: _.isUnique ?? false }));
|
40
|
+
};
|
41
|
+
//# sourceMappingURL=mod.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../../../../../src/schema/state/sqlite/db-schema/dsl/mod.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../../../../src/schema/state/sqlite/db-schema/hash.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,WAYnC,CAAA"}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
// Based on https://stackoverflow.com/a/7616484
|
2
|
+
export const hashCode = (str) => {
|
3
|
+
let hash = 0, i, chr;
|
4
|
+
if (str.length === 0)
|
5
|
+
return hash;
|
6
|
+
for (i = 0; i < str.length; i++) {
|
7
|
+
// eslint-disable-next-line unicorn/prefer-code-point
|
8
|
+
chr = str.charCodeAt(i);
|
9
|
+
hash = (hash << 5) - hash + chr;
|
10
|
+
hash = Math.trunc(hash); // Convert to 32bit integer
|
11
|
+
}
|
12
|
+
return hash;
|
13
|
+
};
|
14
|
+
//# sourceMappingURL=hash.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../../../../src/schema/state/sqlite/db-schema/hash.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE;IACtC,IAAI,IAAI,GAAG,CAAC,EACV,CAAC,EACD,GAAG,CAAA;IACL,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACjC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,qDAAqD;QACrD,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QACvB,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAA;QAC/B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA,CAAC,2BAA2B;IACrD,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../../src/schema/state/sqlite/db-schema/mod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,cAAc,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../../../../src/schema/state/sqlite/db-schema/mod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,cAAc,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAA"}
|