@livestore/common 0.3.2-dev.0 → 0.3.2-dev.5
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/ClientSessionLeaderThreadProxy.d.ts +7 -7
- package/dist/__tests__/fixture.d.ts +4 -4
- package/dist/__tests__/fixture.js +2 -2
- package/dist/adapter-types.d.ts +9 -9
- package/dist/adapter-types.d.ts.map +1 -1
- package/dist/adapter-types.js +4 -4
- package/dist/adapter-types.js.map +1 -1
- package/dist/debug-info.d.ts +2 -2
- package/dist/debug-info.js +2 -2
- package/dist/devtools/devtools-messages-client-session.d.ts +27 -27
- package/dist/devtools/devtools-messages-client-session.js +4 -4
- package/dist/devtools/devtools-messages-common.d.ts +6 -6
- package/dist/devtools/devtools-messages-common.js +1 -1
- package/dist/devtools/devtools-messages-leader.d.ts +35 -35
- package/dist/devtools/devtools-messages-leader.js +4 -4
- package/dist/devtools/devtools-messages.d.ts +3 -3
- package/dist/devtools/devtools-messages.d.ts.map +1 -1
- package/dist/devtools/devtools-messages.js +3 -3
- package/dist/devtools/devtools-messages.js.map +1 -1
- package/dist/devtools/mod.d.ts +3 -3
- package/dist/devtools/mod.js +3 -3
- package/dist/index.d.ts +16 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -16
- package/dist/index.js.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.d.ts +5 -5
- package/dist/leader-thread/LeaderSyncProcessor.js +11 -11
- package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
- package/dist/leader-thread/connection.d.ts +4 -4
- package/dist/leader-thread/connection.js +2 -2
- package/dist/leader-thread/eventlog.d.ts +7 -7
- package/dist/leader-thread/eventlog.js +8 -8
- package/dist/leader-thread/eventlog.js.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.d.ts +3 -3
- package/dist/leader-thread/leader-worker-devtools.js +3 -3
- package/dist/leader-thread/make-leader-thread-layer.d.ts +7 -7
- package/dist/leader-thread/make-leader-thread-layer.js +10 -10
- package/dist/leader-thread/materialize-event.d.ts +4 -4
- package/dist/leader-thread/materialize-event.js +7 -7
- package/dist/leader-thread/mod.d.ts +8 -8
- package/dist/leader-thread/mod.d.ts.map +1 -1
- package/dist/leader-thread/mod.js +8 -8
- package/dist/leader-thread/mod.js.map +1 -1
- package/dist/leader-thread/recreate-db.d.ts +5 -5
- package/dist/leader-thread/recreate-db.js +2 -2
- package/dist/leader-thread/shutdown-channel.d.ts +1 -1
- package/dist/leader-thread/shutdown-channel.js +1 -1
- package/dist/leader-thread/types.d.ts +6 -6
- package/dist/make-client-session.d.ts +2 -2
- package/dist/make-client-session.d.ts.map +1 -1
- package/dist/make-client-session.js +2 -2
- package/dist/make-client-session.js.map +1 -1
- package/dist/materializer-helper.d.ts +5 -5
- package/dist/materializer-helper.js +5 -5
- package/dist/rematerialize-from-eventlog.d.ts +4 -4
- package/dist/rematerialize-from-eventlog.js +3 -3
- package/dist/schema/EventDef.d.ts +4 -32
- package/dist/schema/EventDef.d.ts.map +1 -1
- package/dist/schema/EventDef.js +0 -15
- package/dist/schema/EventDef.js.map +1 -1
- package/dist/schema/EventSequenceNumber.test.js +1 -1
- package/dist/schema/LiveStoreEvent.d.ts +5 -5
- package/dist/schema/LiveStoreEvent.js +1 -1
- package/dist/schema/events.d.ts +1 -1
- package/dist/schema/events.d.ts.map +1 -1
- package/dist/schema/events.js +1 -1
- package/dist/schema/events.js.map +1 -1
- package/dist/schema/mod.d.ts +9 -9
- package/dist/schema/mod.d.ts.map +1 -1
- package/dist/schema/mod.js +9 -9
- package/dist/schema/mod.js.map +1 -1
- package/dist/schema/schema.d.ts +4 -8
- package/dist/schema/schema.d.ts.map +1 -1
- package/dist/schema/schema.js +2 -4
- package/dist/schema/schema.js.map +1 -1
- package/dist/schema/state/mod.d.ts +2 -2
- package/dist/schema/state/mod.js +2 -2
- package/dist/schema/state/sqlite/client-document-def.d.ts +17 -5
- package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.js +18 -6
- package/dist/schema/state/sqlite/client-document-def.js.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.test.js +4 -6
- package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.js +1 -1
- package/dist/schema/state/sqlite/db-schema/ast/validate.d.ts +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts +3 -3
- package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.js +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/hash.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/hash.js +0 -1
- package/dist/schema/state/sqlite/db-schema/hash.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/mod.d.ts +2 -2
- package/dist/schema/state/sqlite/db-schema/mod.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/mod.js +2 -2
- package/dist/schema/state/sqlite/db-schema/mod.js.map +1 -1
- package/dist/schema/state/sqlite/mod.d.ts +7 -7
- package/dist/schema/state/sqlite/mod.d.ts.map +1 -1
- package/dist/schema/state/sqlite/mod.js +6 -8
- package/dist/schema/state/sqlite/mod.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/api.d.ts +5 -5
- package/dist/schema/state/sqlite/query-builder/astToSql.d.ts +2 -2
- package/dist/schema/state/sqlite/query-builder/astToSql.js +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.d.ts +2 -2
- package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.js +4 -14
- package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.test.js +3 -3
- package/dist/schema/state/sqlite/query-builder/mod.d.ts +2 -2
- package/dist/schema/state/sqlite/query-builder/mod.js +2 -2
- package/dist/schema/state/sqlite/schema-helpers.d.ts +1 -1
- package/dist/schema/state/sqlite/schema-helpers.js +1 -1
- package/dist/schema/state/sqlite/system-tables.d.ts +10 -10
- package/dist/schema/state/sqlite/system-tables.js +3 -3
- package/dist/schema/state/sqlite/table-def.d.ts +2 -2
- package/dist/schema/state/sqlite/table-def.js +2 -2
- package/dist/schema-management/common.d.ts +2 -2
- package/dist/schema-management/common.js +1 -1
- package/dist/schema-management/migrations.d.ts +6 -6
- package/dist/schema-management/migrations.js +5 -5
- package/dist/schema-management/validate-schema.d.ts +4 -4
- package/dist/schema-management/validate-schema.js +1 -1
- package/dist/sql-queries/index.d.ts +3 -3
- package/dist/sql-queries/index.js +3 -3
- package/dist/sql-queries/sql-queries.d.ts +2 -2
- package/dist/sql-queries/sql-queries.js +3 -3
- package/dist/sql-queries/sql-query-builder.d.ts +3 -3
- package/dist/sql-queries/sql-query-builder.js +1 -1
- package/dist/sql-queries/types.d.ts +1 -1
- package/dist/sqlite-db-helper.d.ts +2 -2
- package/dist/sqlite-db-helper.js +1 -1
- package/dist/sqlite-types.d.ts +4 -4
- package/dist/sync/ClientSessionSyncProcessor.d.ts +17 -6
- package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.js +30 -11
- package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
- package/dist/sync/index.d.ts +3 -3
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +3 -3
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/next/compact-events.d.ts +1 -1
- package/dist/sync/next/compact-events.js +4 -4
- package/dist/sync/next/facts.d.ts +3 -3
- package/dist/sync/next/facts.js +2 -2
- package/dist/sync/next/graphology.d.ts.map +1 -1
- package/dist/sync/next/graphology.js.map +1 -1
- package/dist/sync/next/graphology_.d.ts +1 -1
- package/dist/sync/next/graphology_.d.ts.map +1 -1
- package/dist/sync/next/graphology_.js +1 -1
- package/dist/sync/next/graphology_.js.map +1 -1
- package/dist/sync/next/history-dag-common.d.ts +3 -3
- package/dist/sync/next/history-dag-common.js +2 -2
- package/dist/sync/next/history-dag.d.ts +2 -2
- package/dist/sync/next/history-dag.js +3 -3
- package/dist/sync/next/mod.d.ts +5 -5
- package/dist/sync/next/mod.d.ts.map +1 -1
- package/dist/sync/next/mod.js +5 -5
- package/dist/sync/next/mod.js.map +1 -1
- package/dist/sync/next/rebase-events.d.ts +4 -4
- package/dist/sync/next/rebase-events.d.ts.map +1 -1
- package/dist/sync/next/rebase-events.js +2 -2
- package/dist/sync/next/rebase-events.js.map +1 -1
- package/dist/sync/next/test/compact-events.calculator.test.js +4 -4
- package/dist/sync/next/test/compact-events.test.js +4 -4
- package/dist/sync/next/test/event-fixtures.d.ts +3 -3
- package/dist/sync/next/test/event-fixtures.js +5 -5
- package/dist/sync/next/test/mod.d.ts +1 -1
- package/dist/sync/next/test/mod.js +1 -1
- package/dist/sync/sync.d.ts +4 -4
- package/dist/sync/sync.js +1 -1
- package/dist/sync/syncstate.d.ts +1 -1
- package/dist/sync/syncstate.js +2 -2
- package/dist/sync/syncstate.test.js +3 -4
- package/dist/sync/syncstate.test.js.map +1 -1
- package/dist/sync/validate-push-payload.d.ts +2 -2
- package/dist/sync/validate-push-payload.js +1 -1
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +0 -1
- package/dist/util.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +6 -6
- package/src/ClientSessionLeaderThreadProxy.ts +7 -7
- package/src/__tests__/fixture.ts +2 -2
- package/src/adapter-types.ts +10 -9
- package/src/debug-info.ts +2 -2
- package/src/devtools/devtools-messages-client-session.ts +4 -4
- package/src/devtools/devtools-messages-common.ts +1 -1
- package/src/devtools/devtools-messages-leader.ts +4 -4
- package/src/devtools/devtools-messages.ts +3 -3
- package/src/devtools/mod.ts +3 -3
- package/src/index.ts +16 -16
- package/src/leader-thread/LeaderSyncProcessor.ts +14 -14
- package/src/leader-thread/connection.ts +5 -5
- package/src/leader-thread/eventlog.ts +12 -12
- package/src/leader-thread/leader-worker-devtools.ts +4 -4
- package/src/leader-thread/make-leader-thread-layer.ts +16 -16
- package/src/leader-thread/materialize-event.ts +9 -9
- package/src/leader-thread/mod.ts +8 -8
- package/src/leader-thread/recreate-db.ts +6 -6
- package/src/leader-thread/shutdown-channel.ts +1 -1
- package/src/leader-thread/types.ts +6 -6
- package/src/make-client-session.ts +3 -4
- package/src/materializer-helper.ts +11 -11
- package/src/rematerialize-from-eventlog.ts +6 -6
- package/src/schema/EventDef.ts +4 -24
- package/src/schema/EventSequenceNumber.test.ts +1 -1
- package/src/schema/LiveStoreEvent.ts +3 -3
- package/src/schema/events.ts +1 -1
- package/src/schema/mod.ts +9 -9
- package/src/schema/schema.ts +8 -11
- package/src/schema/state/mod.ts +2 -2
- package/src/schema/state/sqlite/client-document-def.test.ts +9 -7
- package/src/schema/state/sqlite/client-document-def.ts +57 -33
- package/src/schema/state/sqlite/db-schema/ast/sqlite.ts +1 -1
- package/src/schema/state/sqlite/db-schema/ast/validate.ts +1 -1
- package/src/schema/state/sqlite/db-schema/dsl/field-defs.test.ts +1 -1
- package/src/schema/state/sqlite/db-schema/dsl/mod.ts +19 -13
- package/src/schema/state/sqlite/db-schema/hash.ts +0 -1
- package/src/schema/state/sqlite/db-schema/mod.ts +2 -2
- package/src/schema/state/sqlite/mod.ts +13 -15
- package/src/schema/state/sqlite/query-builder/api.ts +5 -5
- package/src/schema/state/sqlite/query-builder/astToSql.ts +4 -4
- package/src/schema/state/sqlite/query-builder/impl.test.ts +4 -4
- package/src/schema/state/sqlite/query-builder/impl.ts +8 -16
- package/src/schema/state/sqlite/query-builder/mod.ts +2 -2
- package/src/schema/state/sqlite/schema-helpers.ts +2 -2
- package/src/schema/state/sqlite/system-tables.ts +3 -3
- package/src/schema/state/sqlite/table-def.ts +3 -3
- package/src/schema-management/common.ts +3 -3
- package/src/schema-management/migrations.ts +11 -11
- package/src/schema-management/validate-schema.ts +4 -4
- package/src/sql-queries/index.ts +3 -3
- package/src/sql-queries/sql-queries.ts +4 -4
- package/src/sql-queries/sql-query-builder.ts +4 -4
- package/src/sql-queries/types.ts +1 -1
- package/src/sqlite-db-helper.ts +3 -3
- package/src/sqlite-types.ts +4 -4
- package/src/sync/ClientSessionSyncProcessor.ts +50 -12
- package/src/sync/index.ts +3 -3
- package/src/sync/next/compact-events.ts +5 -5
- package/src/sync/next/facts.ts +4 -4
- package/src/sync/next/graphology.ts +2 -4
- package/src/sync/next/graphology_.ts +1 -1
- package/src/sync/next/history-dag-common.ts +3 -3
- package/src/sync/next/history-dag.ts +3 -3
- package/src/sync/next/mod.ts +5 -5
- package/src/sync/next/rebase-events.ts +6 -6
- package/src/sync/next/test/compact-events.calculator.test.ts +4 -4
- package/src/sync/next/test/compact-events.test.ts +5 -5
- package/src/sync/next/test/event-fixtures.ts +7 -7
- package/src/sync/next/test/mod.ts +1 -1
- package/src/sync/sync.ts +4 -4
- package/src/sync/syncstate.test.ts +9 -6
- package/src/sync/syncstate.ts +2 -2
- package/src/sync/validate-push-payload.ts +2 -2
- package/src/util.ts +0 -1
- package/src/version.ts +1 -1
@@ -12,8 +12,8 @@ import type {
|
|
12
12
|
import { Context, Schema } from '@livestore/utils/effect'
|
13
13
|
import type { MeshNode } from '@livestore/webmesh'
|
14
14
|
|
15
|
-
import type { MigrationsReport } from '../defs.
|
16
|
-
import type { SqliteError } from '../errors.
|
15
|
+
import type { MigrationsReport } from '../defs.ts'
|
16
|
+
import type { SqliteError } from '../errors.ts'
|
17
17
|
import type {
|
18
18
|
BootStatus,
|
19
19
|
Devtools,
|
@@ -23,10 +23,10 @@ import type {
|
|
23
23
|
SqliteDb,
|
24
24
|
SyncBackend,
|
25
25
|
UnexpectedError,
|
26
|
-
} from '../index.
|
27
|
-
import type { EventSequenceNumber, LiveStoreEvent, LiveStoreSchema } from '../schema/mod.
|
28
|
-
import type * as SyncState from '../sync/syncstate.
|
29
|
-
import type { ShutdownChannel } from './shutdown-channel.
|
26
|
+
} from '../index.ts'
|
27
|
+
import type { EventSequenceNumber, LiveStoreEvent, LiveStoreSchema } from '../schema/mod.ts'
|
28
|
+
import type * as SyncState from '../sync/syncstate.ts'
|
29
|
+
import type { ShutdownChannel } from './shutdown-channel.ts'
|
30
30
|
|
31
31
|
export type ShutdownState = 'running' | 'shutting-down'
|
32
32
|
|
@@ -9,12 +9,11 @@ import type {
|
|
9
9
|
LockStatus,
|
10
10
|
SqliteDb,
|
11
11
|
UnexpectedError,
|
12
|
-
} from './adapter-types.
|
13
|
-
import * as Devtools from './devtools/mod.
|
14
|
-
import { liveStoreVersion } from './version.
|
12
|
+
} from './adapter-types.ts'
|
13
|
+
import * as Devtools from './devtools/mod.ts'
|
14
|
+
import { liveStoreVersion } from './version.ts'
|
15
15
|
|
16
16
|
declare global {
|
17
|
-
// eslint-disable-next-line no-var
|
18
17
|
var __debugWebmeshNode: any
|
19
18
|
}
|
20
19
|
|
@@ -1,17 +1,17 @@
|
|
1
1
|
import { isDevEnv, isNil, isReadonlyArray } from '@livestore/utils'
|
2
2
|
import { Hash, Option, Schema } from '@livestore/utils/effect'
|
3
3
|
|
4
|
-
import type { SqliteDb } from './adapter-types.
|
5
|
-
import { SessionIdSymbol } from './adapter-types.
|
6
|
-
import type { EventDef, Materializer, MaterializerContextQuery, MaterializerResult } from './schema/EventDef.
|
7
|
-
import type * as LiveStoreEvent from './schema/LiveStoreEvent.
|
8
|
-
import { getEventDef, type LiveStoreSchema } from './schema/schema.
|
9
|
-
import type { QueryBuilder } from './schema/state/sqlite/query-builder/api.
|
10
|
-
import { isQueryBuilder } from './schema/state/sqlite/query-builder/api.
|
11
|
-
import { getResultSchema } from './schema/state/sqlite/query-builder/impl.
|
12
|
-
import type { BindValues } from './sql-queries/sql-queries.
|
13
|
-
import type { ParamsObject, PreparedBindValues } from './util.
|
14
|
-
import { prepareBindValues } from './util.
|
4
|
+
import type { SqliteDb } from './adapter-types.ts'
|
5
|
+
import { SessionIdSymbol } from './adapter-types.ts'
|
6
|
+
import type { EventDef, Materializer, MaterializerContextQuery, MaterializerResult } from './schema/EventDef.ts'
|
7
|
+
import type * as LiveStoreEvent from './schema/LiveStoreEvent.ts'
|
8
|
+
import { getEventDef, type LiveStoreSchema } from './schema/schema.ts'
|
9
|
+
import type { QueryBuilder } from './schema/state/sqlite/query-builder/api.ts'
|
10
|
+
import { isQueryBuilder } from './schema/state/sqlite/query-builder/api.ts'
|
11
|
+
import { getResultSchema } from './schema/state/sqlite/query-builder/impl.ts'
|
12
|
+
import type { BindValues } from './sql-queries/sql-queries.ts'
|
13
|
+
import type { ParamsObject, PreparedBindValues } from './util.ts'
|
14
|
+
import { prepareBindValues } from './util.ts'
|
15
15
|
|
16
16
|
export const getExecStatementsFromMaterializer = ({
|
17
17
|
eventDef,
|
@@ -1,12 +1,12 @@
|
|
1
1
|
import { memoizeByRef } from '@livestore/utils'
|
2
2
|
import { Chunk, Effect, Option, Schema, Stream } from '@livestore/utils/effect'
|
3
3
|
|
4
|
-
import { type SqliteDb, UnexpectedError } from './adapter-types.
|
5
|
-
import type { MaterializeEvent } from './leader-thread/mod.
|
6
|
-
import type { EventDef, LiveStoreSchema } from './schema/mod.
|
7
|
-
import { EventSequenceNumber, getEventDef, LiveStoreEvent, SystemTables } from './schema/mod.
|
8
|
-
import type { PreparedBindValues } from './util.
|
9
|
-
import { sql } from './util.
|
4
|
+
import { type SqliteDb, UnexpectedError } from './adapter-types.ts'
|
5
|
+
import type { MaterializeEvent } from './leader-thread/mod.ts'
|
6
|
+
import type { EventDef, LiveStoreSchema } from './schema/mod.ts'
|
7
|
+
import { EventSequenceNumber, getEventDef, LiveStoreEvent, SystemTables } from './schema/mod.ts'
|
8
|
+
import type { PreparedBindValues } from './util.ts'
|
9
|
+
import { sql } from './util.ts'
|
10
10
|
|
11
11
|
export const rematerializeFromEventlog = ({
|
12
12
|
dbEventlog,
|
package/src/schema/EventDef.ts
CHANGED
@@ -2,15 +2,14 @@ import type { SingleOrReadonlyArray } from '@livestore/utils'
|
|
2
2
|
import { shouldNeverHappen } from '@livestore/utils'
|
3
3
|
import { Schema } from '@livestore/utils/effect'
|
4
4
|
|
5
|
-
import type { BindValues } from '../sql-queries/sql-queries.
|
6
|
-
import type { ParamsObject } from '../util.
|
7
|
-
import type { QueryBuilder } from './state/sqlite/query-builder/mod.
|
5
|
+
import type { BindValues } from '../sql-queries/sql-queries.ts'
|
6
|
+
import type { ParamsObject } from '../util.ts'
|
7
|
+
import type { QueryBuilder } from './state/sqlite/query-builder/mod.ts'
|
8
8
|
|
9
9
|
export type EventDefMap = {
|
10
|
-
map: Map<string
|
10
|
+
map: Map<string, EventDef.Any>
|
11
11
|
}
|
12
12
|
export type EventDefRecord = {
|
13
|
-
'livestore.RawSql': RawSqlEvent
|
14
13
|
[name: string]: EventDef.Any
|
15
14
|
}
|
16
15
|
|
@@ -218,22 +217,3 @@ export const materializers = <TInputRecord extends Record<string, EventDef.AnyWi
|
|
218
217
|
) => {
|
219
218
|
return handlers
|
220
219
|
}
|
221
|
-
|
222
|
-
export const rawSqlEvent = defineEvent({
|
223
|
-
name: 'livestore.RawSql',
|
224
|
-
schema: Schema.Struct({
|
225
|
-
sql: Schema.String,
|
226
|
-
bindValues: Schema.optional(Schema.Record({ key: Schema.String, value: Schema.Any })),
|
227
|
-
writeTables: Schema.optional(Schema.ReadonlySet(Schema.String)),
|
228
|
-
}),
|
229
|
-
clientOnly: true,
|
230
|
-
derived: true,
|
231
|
-
})
|
232
|
-
|
233
|
-
export const rawSqlMaterializer = defineMaterializer(rawSqlEvent, ({ sql, bindValues, writeTables }) => ({
|
234
|
-
sql,
|
235
|
-
bindValues: bindValues ?? {},
|
236
|
-
writeTables,
|
237
|
-
}))
|
238
|
-
|
239
|
-
export type RawSqlEvent = typeof rawSqlEvent
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { Vitest } from '@livestore/utils-dev/node-vitest'
|
2
2
|
import { expect } from 'vitest'
|
3
3
|
|
4
|
-
import { EventSequenceNumber } from './mod.
|
4
|
+
import { EventSequenceNumber } from './mod.ts'
|
5
5
|
|
6
6
|
Vitest.describe('EventSequenceNumber', () => {
|
7
7
|
Vitest.test('nextPair (no rebase)', () => {
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import { memoizeByRef } from '@livestore/utils'
|
2
2
|
import { Option, Schema } from '@livestore/utils/effect'
|
3
3
|
|
4
|
-
import type { EventDef, EventDefRecord } from './EventDef.
|
5
|
-
import * as EventSequenceNumber from './EventSequenceNumber.
|
6
|
-
import type { LiveStoreSchema } from './schema.
|
4
|
+
import type { EventDef, EventDefRecord } from './EventDef.ts'
|
5
|
+
import * as EventSequenceNumber from './EventSequenceNumber.ts'
|
6
|
+
import type { LiveStoreSchema } from './schema.ts'
|
7
7
|
|
8
8
|
export namespace ForEventDef {
|
9
9
|
export type PartialDecoded<TEventDef extends EventDef.Any> = {
|
package/src/schema/events.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export { defineEvent, synced
|
1
|
+
export { clientOnly, defineEvent, synced } from './EventDef.ts'
|
package/src/schema/mod.ts
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
export *
|
2
|
-
export
|
3
|
-
export * from './
|
4
|
-
export * from './
|
5
|
-
export * from './schema.
|
6
|
-
export * as State from './state/mod.
|
7
|
-
export
|
8
|
-
export *
|
9
|
-
export * as
|
1
|
+
export * from './EventDef.ts'
|
2
|
+
export * as EventSequenceNumber from './EventSequenceNumber.ts'
|
3
|
+
export * as Events from './events.ts'
|
4
|
+
export * as LiveStoreEvent from './LiveStoreEvent.ts'
|
5
|
+
export * from './schema.ts'
|
6
|
+
export * as State from './state/mod.ts'
|
7
|
+
export { SqliteAst, SqliteDsl } from './state/sqlite/db-schema/mod.ts'
|
8
|
+
export * from './state/sqlite/schema-helpers.ts'
|
9
|
+
export * as SystemTables from './state/sqlite/system-tables.ts'
|
package/src/schema/schema.ts
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
import { isReadonlyArray, shouldNeverHappen } from '@livestore/utils'
|
2
2
|
|
3
|
-
import type { MigrationOptions } from '../adapter-types.
|
4
|
-
import type { EventDef, EventDefRecord, Materializer
|
5
|
-
import {
|
6
|
-
import {
|
7
|
-
import
|
8
|
-
import {
|
9
|
-
import type { TableDef } from './state/sqlite/table-def.js'
|
3
|
+
import type { MigrationOptions } from '../adapter-types.ts'
|
4
|
+
import type { EventDef, EventDefRecord, Materializer } from './EventDef.ts'
|
5
|
+
import { tableIsClientDocumentTable } from './state/sqlite/client-document-def.ts'
|
6
|
+
import type { SqliteDsl } from './state/sqlite/db-schema/mod.ts'
|
7
|
+
import { stateSystemTables } from './state/sqlite/system-tables.ts'
|
8
|
+
import type { TableDef } from './state/sqlite/table-def.ts'
|
10
9
|
|
11
10
|
export const LiveStoreSchemaSymbol = Symbol.for('livestore.LiveStoreSchema')
|
12
11
|
export type LiveStoreSchemaSymbol = typeof LiveStoreSchemaSymbol
|
@@ -80,8 +79,6 @@ export const makeSchema = <TInputSchema extends InputSchema>(
|
|
80
79
|
}
|
81
80
|
}
|
82
81
|
|
83
|
-
eventsDefsMap.set(rawSqlEvent.name, rawSqlEvent)
|
84
|
-
|
85
82
|
for (const tableDef of tables.values()) {
|
86
83
|
if (tableIsClientDocumentTable(tableDef) && eventsDefsMap.has(tableDef.set.name) === false) {
|
87
84
|
eventsDefsMap.set(tableDef.set.name, tableDef.set)
|
@@ -138,8 +135,8 @@ export namespace FromInputSchema {
|
|
138
135
|
|
139
136
|
type EventDefRecordFromInputSchemaEvents<TEvents extends InputSchema['events']> =
|
140
137
|
TEvents extends ReadonlyArray<EventDef.Any>
|
141
|
-
? { [K in TEvents[number] as K['name']]: K }
|
138
|
+
? { [K in TEvents[number] as K['name']]: K }
|
142
139
|
: TEvents extends { [name: string]: EventDef.Any }
|
143
|
-
? { [K in keyof TEvents as TEvents[K]['name']]: TEvents[K] }
|
140
|
+
? { [K in keyof TEvents as TEvents[K]['name']]: TEvents[K] }
|
144
141
|
: never
|
145
142
|
}
|
package/src/schema/state/mod.ts
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
export * as SQLite from './sqlite/mod.
|
2
|
-
export { QueryBuilderAstSymbol, QueryBuilderTypeId } from './sqlite/query-builder/mod.
|
1
|
+
export * as SQLite from './sqlite/mod.ts'
|
2
|
+
export { QueryBuilderAstSymbol, QueryBuilderTypeId } from './sqlite/query-builder/mod.ts'
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import { Schema } from '@livestore/utils/effect'
|
2
2
|
import { describe, expect, test } from 'vitest'
|
3
3
|
|
4
|
-
import { tables } from '../../../__tests__/fixture.
|
5
|
-
import type * as LiveStoreEvent from '../../LiveStoreEvent.
|
6
|
-
import {
|
4
|
+
import { tables } from '../../../__tests__/fixture.ts'
|
5
|
+
import type * as LiveStoreEvent from '../../LiveStoreEvent.ts'
|
6
|
+
import { ClientDocumentTableDefSymbol, clientDocument } from './client-document-def.ts'
|
7
7
|
|
8
8
|
describe('client document table', () => {
|
9
9
|
test('set event', () => {
|
@@ -70,8 +70,9 @@ describe('client document table', () => {
|
|
70
70
|
})
|
71
71
|
|
72
72
|
test('struct value (partial set=true)', () => {
|
73
|
-
expect(
|
74
|
-
.
|
73
|
+
expect(
|
74
|
+
forSchema(Schema.Struct({ a: Schema.String }), { a: 'hello' }, 'id1', { partialSet: true }),
|
75
|
+
).toMatchInlineSnapshot(`
|
75
76
|
{
|
76
77
|
"bindValues": [
|
77
78
|
"id1",
|
@@ -92,8 +93,9 @@ describe('client document table', () => {
|
|
92
93
|
})
|
93
94
|
|
94
95
|
test('struct value (partial set=false)', () => {
|
95
|
-
expect(
|
96
|
-
.
|
96
|
+
expect(
|
97
|
+
forSchema(Schema.Struct({ a: Schema.String }), { a: 'hello' }, 'id1', { partialSet: false }),
|
98
|
+
).toMatchInlineSnapshot(`
|
97
99
|
{
|
98
100
|
"bindValues": [
|
99
101
|
"id1",
|
@@ -2,15 +2,15 @@ import { shouldNeverHappen } from '@livestore/utils'
|
|
2
2
|
import type { Option, Types } from '@livestore/utils/effect'
|
3
3
|
import { Schema, SchemaAST } from '@livestore/utils/effect'
|
4
4
|
|
5
|
-
import { SessionIdSymbol } from '../../../adapter-types.
|
6
|
-
import { sql } from '../../../util.
|
7
|
-
import type { EventDef, Materializer } from '../../EventDef.
|
8
|
-
import { defineEvent, defineMaterializer } from '../../EventDef.
|
9
|
-
import { SqliteDsl } from './db-schema/mod.
|
10
|
-
import type { QueryBuilder, QueryBuilderAst } from './query-builder/mod.
|
11
|
-
import { QueryBuilderAstSymbol, QueryBuilderTypeId } from './query-builder/mod.
|
12
|
-
import type { TableDef, TableDefBase } from './table-def.
|
13
|
-
import { table } from './table-def.
|
5
|
+
import { SessionIdSymbol } from '../../../adapter-types.ts'
|
6
|
+
import { sql } from '../../../util.ts'
|
7
|
+
import type { EventDef, Materializer } from '../../EventDef.ts'
|
8
|
+
import { defineEvent, defineMaterializer } from '../../EventDef.ts'
|
9
|
+
import { SqliteDsl } from './db-schema/mod.ts'
|
10
|
+
import type { QueryBuilder, QueryBuilderAst } from './query-builder/mod.ts'
|
11
|
+
import { QueryBuilderAstSymbol, QueryBuilderTypeId } from './query-builder/mod.ts'
|
12
|
+
import type { TableDef, TableDefBase } from './table-def.ts'
|
13
|
+
import { table } from './table-def.ts'
|
14
14
|
|
15
15
|
/**
|
16
16
|
* Special:
|
@@ -23,6 +23,18 @@ import { table } from './table-def.js'
|
|
23
23
|
* Careful:
|
24
24
|
* - When changing the table definitions in a non-backwards compatible way, the state might be lost without
|
25
25
|
* explicit reducers to handle the old auto-generated events
|
26
|
+
*
|
27
|
+
* Usage:
|
28
|
+
*
|
29
|
+
* ```ts
|
30
|
+
* // Querying data
|
31
|
+
* // `'some-id'` can be ommited for SessionIdSymbol
|
32
|
+
* store.queryDb(clientDocumentTable.get('some-id'))
|
33
|
+
*
|
34
|
+
* // Setting data
|
35
|
+
* // Again, `'some-id'` can be ommited for SessionIdSymbol
|
36
|
+
* store.commit(clientDocumentTable.set({ someField: 'some-value' }, 'some-id'))
|
37
|
+
* ```
|
26
38
|
*/
|
27
39
|
export const clientDocument = <
|
28
40
|
TName extends string,
|
@@ -386,37 +398,49 @@ export namespace ClientDocumentTableDef {
|
|
386
398
|
}
|
387
399
|
}
|
388
400
|
|
389
|
-
export type GetOptions<TTableDef extends TraitAny> =
|
390
|
-
|
401
|
+
export type GetOptions<TTableDef extends TraitAny> = TTableDef extends ClientDocumentTableDef.Trait<
|
402
|
+
any,
|
403
|
+
any,
|
404
|
+
any,
|
405
|
+
infer TOptions
|
406
|
+
>
|
407
|
+
? TOptions
|
408
|
+
: never
|
391
409
|
|
392
410
|
export type TraitAny = Trait<any, any, any, any>
|
393
411
|
|
394
|
-
export type DefaultIdType<TTableDef extends TraitAny> =
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
412
|
+
export type DefaultIdType<TTableDef extends TraitAny> = TTableDef extends ClientDocumentTableDef.Trait<
|
413
|
+
any,
|
414
|
+
any,
|
415
|
+
any,
|
416
|
+
infer TOptions
|
417
|
+
>
|
418
|
+
? TOptions['default']['id'] extends SessionIdSymbol | string
|
419
|
+
? TOptions['default']['id']
|
399
420
|
: never
|
421
|
+
: never
|
400
422
|
|
401
|
-
export type SetEventDefLike<
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
423
|
+
export type SetEventDefLike<
|
424
|
+
TName extends string,
|
425
|
+
TType,
|
426
|
+
TOptions extends ClientDocumentTableOptions<TType>,
|
427
|
+
> = (TOptions['default']['id'] extends undefined // Helper to create partial event
|
428
|
+
? (
|
429
|
+
args: TOptions['partialSet'] extends false ? TType : Partial<TType>,
|
430
|
+
id: string | SessionIdSymbol,
|
431
|
+
) => { name: `${TName}Set`; args: { id: string; value: TType } }
|
432
|
+
: (
|
433
|
+
args: TOptions['partialSet'] extends false ? TType : Partial<TType>,
|
434
|
+
id?: string | SessionIdSymbol,
|
435
|
+
) => { name: `${TName}Set`; args: { id: string; value: TType } }) & {
|
436
|
+
readonly name: `${TName}Set`
|
437
|
+
readonly schema: Schema.Schema<any>
|
438
|
+
readonly Event: {
|
412
439
|
readonly name: `${TName}Set`
|
413
|
-
readonly
|
414
|
-
readonly Event: {
|
415
|
-
readonly name: `${TName}Set`
|
416
|
-
readonly args: { id: string; value: TType }
|
417
|
-
}
|
418
|
-
readonly options: { derived: true; clientOnly: true; facts: undefined }
|
440
|
+
readonly args: { id: string; value: TType }
|
419
441
|
}
|
442
|
+
readonly options: { derived: true; clientOnly: true; facts: undefined }
|
443
|
+
}
|
420
444
|
|
421
445
|
export type SetEventDef<TName extends string, TType, TOptions extends ClientDocumentTableOptions<TType>> = EventDef<
|
422
446
|
TName,
|
@@ -2,10 +2,10 @@ import type { Nullable } from '@livestore/utils'
|
|
2
2
|
import type { Option, Types } from '@livestore/utils/effect'
|
3
3
|
import { Schema } from '@livestore/utils/effect'
|
4
4
|
|
5
|
-
import type * as SqliteAst from '../ast/sqlite.
|
6
|
-
import type { ColumnDefinition } from './field-defs.
|
5
|
+
import type * as SqliteAst from '../ast/sqlite.ts'
|
6
|
+
import type { ColumnDefinition } from './field-defs.ts'
|
7
7
|
|
8
|
-
export * from './field-defs.
|
8
|
+
export * from './field-defs.ts'
|
9
9
|
|
10
10
|
export type DbSchema = {
|
11
11
|
[key: string]: TableDefinition<string, Columns>
|
@@ -19,12 +19,13 @@ export type DbSchemaInput = Record<string, TableDefinition<any, any>> | Readonly
|
|
19
19
|
* - array: we use the table name of each array item (= table definition) as the object key
|
20
20
|
* - 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
|
21
21
|
*/
|
22
|
-
export type DbSchemaFromInputSchema<TSchemaInput extends DbSchemaInput> =
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
22
|
+
export type DbSchemaFromInputSchema<TSchemaInput extends DbSchemaInput> = TSchemaInput extends ReadonlyArray<
|
23
|
+
TableDefinition<any, any>
|
24
|
+
>
|
25
|
+
? { [K in TSchemaInput[number] as K['name']]: K }
|
26
|
+
: TSchemaInput extends Record<string, TableDefinition<any, any>>
|
27
|
+
? { [K in keyof TSchemaInput as TSchemaInput[K]['name']]: TSchemaInput[K] }
|
28
|
+
: never
|
28
29
|
|
29
30
|
// TODO ensure via runtime check (possibly even via type-level check) that all index names are unique
|
30
31
|
export const makeDbSchema = <TDbSchemaInput extends DbSchemaInput>(
|
@@ -113,8 +114,12 @@ export type TableDefinition<TName extends string, TColumns extends Columns> = {
|
|
113
114
|
|
114
115
|
export type Columns = Record<string, ColumnDefinition<any, any>>
|
115
116
|
|
116
|
-
export type IsSingleColumn<TColumns extends Columns | ColumnDefinition<any, any>> =
|
117
|
-
|
117
|
+
export type IsSingleColumn<TColumns extends Columns | ColumnDefinition<any, any>> = TColumns extends ColumnDefinition<
|
118
|
+
any,
|
119
|
+
any
|
120
|
+
>
|
121
|
+
? true
|
122
|
+
: false
|
118
123
|
|
119
124
|
/**
|
120
125
|
* NOTE this is only needed to avoid a TS limitation where `StructSchemaForColumns` in the default case
|
@@ -207,8 +212,9 @@ export namespace FromColumns {
|
|
207
212
|
|
208
213
|
export type RequiredInsertColumnNames<TColumns extends Columns> = keyof RequiredInsertColumns<TColumns>
|
209
214
|
|
210
|
-
export type RequiresInsertValues<TColumns extends Columns> =
|
211
|
-
|
215
|
+
export type RequiresInsertValues<TColumns extends Columns> = RequiredInsertColumnNames<TColumns> extends never
|
216
|
+
? false
|
217
|
+
: true
|
212
218
|
|
213
219
|
export type InsertRowDecoded<TColumns extends Columns> = Types.Simplify<
|
214
220
|
Pick<RowDecodedAll<TColumns>, RequiredInsertColumnNames<TColumns>> &
|
@@ -5,7 +5,6 @@ export const hashCode = (str: string) => {
|
|
5
5
|
let chr: number
|
6
6
|
if (str.length === 0) return hash
|
7
7
|
for (i = 0; i < str.length; i++) {
|
8
|
-
// eslint-disable-next-line unicorn/prefer-code-point
|
9
8
|
chr = str.charCodeAt(i)
|
10
9
|
hash = (hash << 5) - hash + chr
|
11
10
|
hash = Math.trunc(hash) // Convert to 32bit integer
|
@@ -1,2 +1,2 @@
|
|
1
|
-
export * as
|
2
|
-
export * as
|
1
|
+
export * as SqliteAst from './ast/sqlite.ts'
|
2
|
+
export * as SqliteDsl from './dsl/mod.ts'
|
@@ -1,22 +1,22 @@
|
|
1
1
|
import { shouldNeverHappen } from '@livestore/utils'
|
2
2
|
|
3
|
-
import type { MigrationOptions } from '../../../adapter-types.
|
4
|
-
import {
|
5
|
-
import type { InternalState } from '../../schema.
|
6
|
-
import { ClientDocumentTableDefSymbol, tableIsClientDocumentTable } from './client-document-def.
|
7
|
-
import { SqliteAst } from './db-schema/mod.
|
8
|
-
import { stateSystemTables } from './system-tables.
|
9
|
-
import type { TableDef, TableDefBase } from './table-def.
|
3
|
+
import type { MigrationOptions } from '../../../adapter-types.ts'
|
4
|
+
import type { Materializer } from '../../EventDef.ts'
|
5
|
+
import type { InternalState } from '../../schema.ts'
|
6
|
+
import { ClientDocumentTableDefSymbol, tableIsClientDocumentTable } from './client-document-def.ts'
|
7
|
+
import { SqliteAst } from './db-schema/mod.ts'
|
8
|
+
import { stateSystemTables } from './system-tables.ts'
|
9
|
+
import type { TableDef, TableDefBase } from './table-def.ts'
|
10
10
|
|
11
|
-
export * from '
|
11
|
+
export * from '../../EventDef.ts'
|
12
12
|
export {
|
13
|
-
ClientDocumentTableDefSymbol,
|
14
|
-
tableIsClientDocumentTable,
|
15
|
-
clientDocument,
|
16
13
|
type ClientDocumentTableDef,
|
14
|
+
ClientDocumentTableDefSymbol,
|
17
15
|
type ClientDocumentTableOptions,
|
18
|
-
|
19
|
-
|
16
|
+
clientDocument,
|
17
|
+
tableIsClientDocumentTable,
|
18
|
+
} from './client-document-def.ts'
|
19
|
+
export * from './table-def.ts'
|
20
20
|
|
21
21
|
export const makeState = <TStateInput extends InputState>(inputSchema: TStateInput): InternalState => {
|
22
22
|
const inputTables: ReadonlyArray<TableDef> = Array.isArray(inputSchema.tables)
|
@@ -44,8 +44,6 @@ export const makeState = <TStateInput extends InputState>(inputSchema: TStateInp
|
|
44
44
|
materializers.set(name, materializer)
|
45
45
|
}
|
46
46
|
|
47
|
-
materializers.set(rawSqlEvent.name, rawSqlMaterializer)
|
48
|
-
|
49
47
|
for (const tableDef of inputTables) {
|
50
48
|
if (tableIsClientDocumentTable(tableDef)) {
|
51
49
|
materializers.set(
|
@@ -1,11 +1,11 @@
|
|
1
1
|
import type { GetValForKey, SingleOrReadonlyArray } from '@livestore/utils'
|
2
2
|
import { type Option, Predicate, type Schema } from '@livestore/utils/effect'
|
3
3
|
|
4
|
-
import type { SessionIdSymbol } from '../../../../adapter-types.
|
5
|
-
import type { SqlValue } from '../../../../util.
|
6
|
-
import type { ClientDocumentTableDef } from '../client-document-def.
|
7
|
-
import type { SqliteDsl } from '../db-schema/mod.
|
8
|
-
import type { TableDefBase } from '../table-def.
|
4
|
+
import type { SessionIdSymbol } from '../../../../adapter-types.ts'
|
5
|
+
import type { SqlValue } from '../../../../util.ts'
|
6
|
+
import type { ClientDocumentTableDef } from '../client-document-def.ts'
|
7
|
+
import type { SqliteDsl } from '../db-schema/mod.ts'
|
8
|
+
import type { TableDefBase } from '../table-def.ts'
|
9
9
|
|
10
10
|
export type QueryBuilderAst =
|
11
11
|
| QueryBuilderAst.SelectQuery
|
@@ -1,10 +1,10 @@
|
|
1
1
|
import { shouldNeverHappen } from '@livestore/utils'
|
2
2
|
import { Schema } from '@livestore/utils/effect'
|
3
3
|
|
4
|
-
import { SessionIdSymbol } from '../../../../adapter-types.
|
5
|
-
import type { SqlValue } from '../../../../util.
|
6
|
-
import type { State } from '../../../mod.
|
7
|
-
import type { QueryBuilderAst } from './api.
|
4
|
+
import { SessionIdSymbol } from '../../../../adapter-types.ts'
|
5
|
+
import type { SqlValue } from '../../../../util.ts'
|
6
|
+
import type { State } from '../../../mod.ts'
|
7
|
+
import type { QueryBuilderAst } from './api.ts'
|
8
8
|
|
9
9
|
// Helper functions for SQL generation
|
10
10
|
const formatWhereClause = (
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import { Schema } from '@livestore/utils/effect'
|
2
2
|
import { describe, expect, it } from 'vitest'
|
3
3
|
|
4
|
-
import { State } from '../../../mod.
|
5
|
-
import type { QueryBuilder } from './api.
|
6
|
-
import { getResultSchema } from './impl.
|
4
|
+
import { State } from '../../../mod.ts'
|
5
|
+
import type { QueryBuilder } from './api.ts'
|
6
|
+
import { getResultSchema } from './impl.ts'
|
7
7
|
|
8
8
|
const todos = State.SQLite.table({
|
9
9
|
name: 'todos',
|
@@ -116,7 +116,7 @@ describe('query builder', () => {
|
|
116
116
|
1,
|
117
117
|
],
|
118
118
|
"query": "SELECT id, text FROM 'todos' LIMIT ?",
|
119
|
-
"schema": "(ReadonlyArray<{ readonly id: string; readonly text: string }> <-> { readonly id: string; readonly text: string })",
|
119
|
+
"schema": "(ReadonlyArray<{ readonly id: string; readonly text: string } | undefined> <-> { readonly id: string; readonly text: string } | undefined)",
|
120
120
|
}
|
121
121
|
`)
|
122
122
|
|