@doync/client 0.1.0 → 0.1.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/README.md +1 -17
- package/dist/adapter.cjs +1 -1
- package/dist/adapter.d.cts +1 -1
- package/dist/adapter.d.ts +1 -1
- package/dist/adapter.js +1 -1
- package/dist/adapter.js.map +1 -1
- package/dist/client-Bv6QMenB.cjs +15 -0
- package/dist/client-Db0Jfwuy.js +16 -0
- package/dist/client-Db0Jfwuy.js.map +1 -0
- package/dist/{client-CNyLMCw0.d.ts → client-OAVaC3pt.d.ts} +79 -91
- package/dist/client-OAVaC3pt.d.ts.map +1 -0
- package/dist/{client-DHXO0dbf.d.cts → client-OPt8Axyp.d.cts} +79 -91
- package/dist/client-OPt8Axyp.d.cts.map +1 -0
- package/dist/index.d.cts +3 -2
- package/dist/index.d.ts +3 -2
- package/dist/internal.cjs +1 -1
- package/dist/internal.d.cts +3 -12
- package/dist/internal.d.cts.map +1 -1
- package/dist/internal.d.ts +3 -12
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +1 -1
- package/package.json +3 -3
- package/src/client.ts +82 -32
- package/src/engine.ts +188 -134
- package/src/index.ts +1 -6
- package/src/internal.ts +4 -4
- package/src/migrate.ts +1 -1
- package/src/replica/db/0002_prefs_table.sql +9 -0
- package/src/replica/db/meta/0002_snapshot.json +191 -0
- package/src/replica/db/meta/_journal.json +7 -0
- package/src/replica/db/schema.ts +12 -3
- package/src/replica/index.ts +5 -4
- package/src/replica/meta.ts +23 -0
- package/src/replica/track.ts +20 -39
- package/src/socket-reconnect.ts +29 -5
- package/dist/client-C6jAdhbe.cjs +0 -15
- package/dist/client-CNyLMCw0.d.ts.map +0 -1
- package/dist/client-ClV8ce6X.js +0 -16
- package/dist/client-ClV8ce6X.js.map +0 -1
- package/dist/client-DHXO0dbf.d.cts.map +0 -1
- package/src/client-mutation-registry.ts +0 -31
- package/src/mutations.ts +0 -96
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client-DHXO0dbf.d.cts","names":["Input","Output","StandardTypedV1","Props","version","vendor","types","Types","input","output","InferInput","Schema","NonNullable","InferOutput","StandardSchemaV1","validate","value","Options","options","Result","Promise","SuccessResult","FailureResult","issues","libraryOptions","Record","ReadonlyArray","Issue","message","path","PropertyKey","PathSegment","key","StandardJSONSchemaV1","jsonSchema","Converter","Target","target"],"sources":["../../../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts","../src/port.ts","../src/mutations.ts","../src/socket.ts","../src/replica/meta.ts","../src/replica/stamps.ts","../src/replica/index.ts","../src/engine.ts","../src/client.ts"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Flatten a shared MutationTree to the engine's name-keyed client mutation
|
|
3
|
-
* registry (ADR-0019/0021, #167). Internal helper for {@link createClient} and
|
|
4
|
-
* `@doync/web` `createWorker` — consumers pass a MutationTree; the lib
|
|
5
|
-
* flattens.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import type { MutationTree } from '@doync/core'
|
|
9
|
-
|
|
10
|
-
import { flattenMutations } from '@doync/core/internal'
|
|
11
|
-
|
|
12
|
-
import type { ClientMutation, ClientMutationRegistry } from './mutations'
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Flat `dottedName → {args, handler}` registry the client engine resolves
|
|
16
|
-
* optimistic bodies against (ADR-0019). Feed the SHARED tree so no `.server.ts`
|
|
17
|
-
* override enters the client bundle. Handler may return a promise (exclusive
|
|
18
|
-
* chain awaits); engine validates args at `mutate()` via carried schema.
|
|
19
|
-
*/
|
|
20
|
-
export function toClientMutationRegistry(
|
|
21
|
-
tree: MutationTree,
|
|
22
|
-
): ClientMutationRegistry {
|
|
23
|
-
const out: Record<string, ClientMutation> = {}
|
|
24
|
-
for (const [name, def] of Object.entries(flattenMutations(tree))) {
|
|
25
|
-
out[name] = {
|
|
26
|
-
args: def.args,
|
|
27
|
-
handler: (args, ctx, sql) => def.body(args, ctx, sql),
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
return out
|
|
31
|
-
}
|
package/src/mutations.ts
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import type { SqlValue } from '@doync/core'
|
|
2
|
-
import type { StandardSchemaV1 } from '@standard-schema/spec'
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
assertWireRepresentable,
|
|
6
|
-
canonicalizeArgsBinary,
|
|
7
|
-
} from '@doync/core/internal'
|
|
8
|
-
|
|
9
|
-
import type { LocalRow } from './port'
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Write surface a client mutation body runs against: one parameterized
|
|
13
|
-
* statement at a time inside the mutation's savepoint, returning its rows. Same
|
|
14
|
-
* shape the Origin uses, so a shared body runs identically on device and
|
|
15
|
-
* server.
|
|
16
|
-
*/
|
|
17
|
-
export interface ClientMutationTx {
|
|
18
|
-
exec<T extends LocalRow = LocalRow>(query: string, ...params: SqlValue[]): T[]
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Client mutation body `(args, ctx, sql)`. Must be deterministic and DB-only
|
|
23
|
-
* (may still be async for local work). Generate ids on the client and pass them
|
|
24
|
-
* in `args` — the body is replayed on rebase. External I/O belongs in a server
|
|
25
|
-
* override, not the client bundle.
|
|
26
|
-
*/
|
|
27
|
-
export type ClientMutationHandler = (
|
|
28
|
-
args: unknown,
|
|
29
|
-
ctx: Record<string, unknown>,
|
|
30
|
-
sql: ClientMutationTx,
|
|
31
|
-
) => void | Promise<void>
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* A registered client mutation: body plus optional standard-schema args
|
|
35
|
-
* validator applied at `mutate()` time. A bare handler is also accepted.
|
|
36
|
-
*/
|
|
37
|
-
export interface ClientMutation {
|
|
38
|
-
readonly args?: StandardSchemaV1
|
|
39
|
-
readonly handler: ClientMutationHandler
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Name-keyed client mutation registry. Keys match the server's dotted names so
|
|
44
|
-
* a push reaches the matching authoritative body.
|
|
45
|
-
*/
|
|
46
|
-
export type ClientMutationRegistry = Readonly<
|
|
47
|
-
Record<string, ClientMutation | ClientMutationHandler>
|
|
48
|
-
>
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Normalize a registry entry (bare handler or `{args, handler}`) to the object
|
|
52
|
-
* form.
|
|
53
|
-
*/
|
|
54
|
-
export function asClientMutation(
|
|
55
|
-
entry: ClientMutation | ClientMutationHandler,
|
|
56
|
-
): ClientMutation {
|
|
57
|
-
return typeof entry === 'function' ? { handler: entry } : entry
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Validate `args` through a standard-schema synchronously (mirrors
|
|
62
|
-
* `@doync/core` query-args). Async validators refuse loudly — the body is
|
|
63
|
-
* deterministic on both ends. Returns validated value or throws.
|
|
64
|
-
*/
|
|
65
|
-
export function validateMutationArgs(
|
|
66
|
-
schema: StandardSchemaV1,
|
|
67
|
-
args: unknown,
|
|
68
|
-
): unknown {
|
|
69
|
-
// Unrepresentable leaves before schema (ADR-0031 / #231/#232). Binary
|
|
70
|
-
// allowed here; bare handlers skip this path so engine.mutate still guards
|
|
71
|
-
// every mutation. Double-run of guard+canonicalize on schema paths is
|
|
72
|
-
// intentional and cheap.
|
|
73
|
-
assertWireRepresentable(args, 'mutation args', { allowBinary: true })
|
|
74
|
-
// TypedArray/DataView → ArrayBuffer before standard-schema (ADR-0031 / #231).
|
|
75
|
-
const canonical = canonicalizeArgsBinary(args)
|
|
76
|
-
const result = schema['~standard'].validate(canonical)
|
|
77
|
-
if (result instanceof Promise) {
|
|
78
|
-
throw new Error(
|
|
79
|
-
'doync: async standard-schema validation is not supported for mutation args — use a synchronous validator',
|
|
80
|
-
)
|
|
81
|
-
}
|
|
82
|
-
if (result.issues !== undefined) {
|
|
83
|
-
const detail = result.issues
|
|
84
|
-
.map((issue) => {
|
|
85
|
-
const path = (issue.path ?? [])
|
|
86
|
-
.map((segment) =>
|
|
87
|
-
typeof segment === 'object' ? String(segment.key) : String(segment),
|
|
88
|
-
)
|
|
89
|
-
.join('.')
|
|
90
|
-
return path === '' ? issue.message : `${path}: ${issue.message}`
|
|
91
|
-
})
|
|
92
|
-
.join('; ')
|
|
93
|
-
throw new Error(`doync: mutation args failed validation — ${detail}`)
|
|
94
|
-
}
|
|
95
|
-
return result.value
|
|
96
|
-
}
|