on-zero 0.4.36 → 0.4.37
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/cjs/combineZeroClients.native.js.map +1 -1
- package/dist/cjs/createUseQuery.cjs +1 -96
- package/dist/cjs/createUseQuery.native.js +1 -132
- package/dist/cjs/createUseQuery.native.js.map +1 -1
- package/dist/cjs/createUseQueryDirect.cjs +228 -0
- package/dist/cjs/createUseQueryDirect.native.js +334 -0
- package/dist/cjs/createUseQueryDirect.native.js.map +1 -0
- package/dist/cjs/createZeroClient.cjs +18 -7
- package/dist/cjs/createZeroClient.native.js +18 -7
- package/dist/cjs/createZeroClient.native.js.map +1 -1
- package/dist/cjs/helpers/recoverZeroClient.test.native.js.map +1 -1
- package/dist/cjs/index.cjs +2 -2
- package/dist/cjs/index.native.js +2 -2
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/multi.cjs +38 -0
- package/dist/cjs/multi.native.js +41 -0
- package/dist/cjs/multi.native.js.map +1 -0
- package/dist/cjs/multiInstanceNested.test.cjs +92 -12
- package/dist/cjs/multiInstanceNested.test.native.js +108 -12
- package/dist/cjs/multiInstanceNested.test.native.js.map +1 -1
- package/dist/cjs/testSetup.cjs +26 -0
- package/dist/cjs/testSetup.native.js +32 -0
- package/dist/cjs/testSetup.native.js.map +1 -0
- package/dist/esm/combineZeroClients.mjs.map +1 -1
- package/dist/esm/combineZeroClients.native.js.map +1 -1
- package/dist/esm/createUseQuery.mjs +2 -97
- package/dist/esm/createUseQuery.mjs.map +1 -1
- package/dist/esm/createUseQuery.native.js +2 -133
- package/dist/esm/createUseQuery.native.js.map +1 -1
- package/dist/esm/createUseQueryDirect.mjs +203 -0
- package/dist/esm/createUseQueryDirect.mjs.map +1 -0
- package/dist/esm/createUseQueryDirect.native.js +306 -0
- package/dist/esm/createUseQueryDirect.native.js.map +1 -0
- package/dist/esm/createZeroClient.mjs +18 -8
- package/dist/esm/createZeroClient.mjs.map +1 -1
- package/dist/esm/createZeroClient.native.js +18 -8
- package/dist/esm/createZeroClient.native.js.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.test.mjs.map +1 -1
- package/dist/esm/helpers/recoverZeroClient.test.native.js.map +1 -1
- package/dist/esm/index.js +2 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.mjs +2 -3
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +2 -3
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/multi.mjs +12 -0
- package/dist/esm/multi.mjs.map +1 -0
- package/dist/esm/multi.native.js +12 -0
- package/dist/esm/multi.native.js.map +1 -0
- package/dist/esm/multiInstanceNested.test.mjs +85 -5
- package/dist/esm/multiInstanceNested.test.mjs.map +1 -1
- package/dist/esm/multiInstanceNested.test.native.js +101 -5
- package/dist/esm/multiInstanceNested.test.native.js.map +1 -1
- package/dist/esm/testSetup.mjs +27 -0
- package/dist/esm/testSetup.mjs.map +1 -0
- package/dist/esm/testSetup.native.js +30 -0
- package/dist/esm/testSetup.native.js.map +1 -0
- package/package.json +8 -2
- package/readme.md +10 -8
- package/src/combineZeroClients.tsx +4 -6
- package/src/createUseQuery.tsx +2 -189
- package/src/createUseQueryDirect.tsx +307 -0
- package/src/createZeroClient.tsx +65 -32
- package/src/helpers/recoverZeroClient.test.ts +8 -2
- package/src/index.ts +6 -2
- package/src/multi.ts +24 -0
- package/src/multiInstanceNested.test.tsx +79 -4
- package/src/testSetup.ts +26 -0
- package/types/combineZeroClients.d.ts.map +1 -1
- package/types/createUseQuery.d.ts +4 -15
- package/types/createUseQuery.d.ts.map +1 -1
- package/types/createUseQueryDirect.d.ts +29 -0
- package/types/createUseQueryDirect.d.ts.map +1 -0
- package/types/createZeroClient.d.ts +51 -5
- package/types/createZeroClient.d.ts.map +1 -1
- package/types/index.d.ts +1 -2
- package/types/index.d.ts.map +1 -1
- package/types/multi.d.ts +6 -0
- package/types/multi.d.ts.map +1 -0
- package/types/multiInstanceNested.test.d.ts.map +1 -1
- package/types/testSetup.d.ts +1 -0
- package/types/testSetup.d.ts.map +1 -0
- package/vitest.config.ts +1 -0
package/src/createZeroClient.tsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineQueries, defineQuery, Zero as ZeroClient } from '@rocicorp/zero'
|
|
2
2
|
import { useConnectionState, useZero, ZeroProvider } from '@rocicorp/zero/react'
|
|
3
|
-
import { createEmitter } from '@take-out/helpers'
|
|
3
|
+
import { createEmitter, type Emitter } from '@take-out/helpers'
|
|
4
4
|
import {
|
|
5
5
|
createContext,
|
|
6
6
|
memo,
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
useMemo,
|
|
10
10
|
useRef,
|
|
11
11
|
useState,
|
|
12
|
+
type Context,
|
|
12
13
|
type ReactNode,
|
|
13
14
|
} from 'react'
|
|
14
15
|
|
|
@@ -16,7 +17,6 @@ import { createPermissions } from './createPermissions'
|
|
|
16
17
|
import { ensureHttpPullTransport } from './httpPullTransport'
|
|
17
18
|
import {
|
|
18
19
|
createUseQuery,
|
|
19
|
-
createUseQueryDirect,
|
|
20
20
|
type QueryControlMode,
|
|
21
21
|
type UseQueryHook,
|
|
22
22
|
} from './createUseQuery'
|
|
@@ -38,7 +38,14 @@ import { setRunner, type ZeroRunner } from './zeroRunner'
|
|
|
38
38
|
import { zql } from './zql'
|
|
39
39
|
|
|
40
40
|
import type { AuthData, GenericModels, GetZeroMutators, ZeroEvent } from './types'
|
|
41
|
-
import type {
|
|
41
|
+
import type {
|
|
42
|
+
AnyQueryRegistry,
|
|
43
|
+
Query,
|
|
44
|
+
Row,
|
|
45
|
+
Zero,
|
|
46
|
+
ZeroOptions,
|
|
47
|
+
Schema as ZeroSchema,
|
|
48
|
+
} from '@rocicorp/zero'
|
|
42
49
|
|
|
43
50
|
type PreloadOptions = { ttl?: 'always' | 'never' | number | undefined }
|
|
44
51
|
|
|
@@ -50,6 +57,27 @@ export type GroupedQueries = Record<string, Record<string, (...args: any[]) => a
|
|
|
50
57
|
// - 'optimistic-allow': return true until server confirms
|
|
51
58
|
export type PermissionStrategy = 'optimistic' | 'optimistic-deny' | 'optimistic-allow'
|
|
52
59
|
|
|
60
|
+
export type CreateZeroClientOptions<
|
|
61
|
+
Schema extends ZeroSchema,
|
|
62
|
+
Models extends GenericModels,
|
|
63
|
+
> = {
|
|
64
|
+
schema: Schema
|
|
65
|
+
models: Models
|
|
66
|
+
groupedQueries: GroupedQueries
|
|
67
|
+
permissionStrategy?: PermissionStrategy
|
|
68
|
+
// names this client instance so multiple instances can coexist on one page.
|
|
69
|
+
// each query/mutator namespace is claimed by exactly one instance, and the
|
|
70
|
+
// ambient run() + the combineZeroClients facade dispatch by that claim.
|
|
71
|
+
instanceName?: string
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export type DirectQueryAdapter<Schema extends ZeroSchema> = (props: {
|
|
75
|
+
DisabledContext: Context<QueryControlMode>
|
|
76
|
+
customQueries: AnyQueryRegistry
|
|
77
|
+
getZero: () => any
|
|
78
|
+
zeroVersion: Emitter<number>
|
|
79
|
+
}) => UseQueryHook<Schema>
|
|
80
|
+
|
|
53
81
|
function getZeroProxyValue(instance: object, key: PropertyKey) {
|
|
54
82
|
const value = Reflect.get(instance, key, instance)
|
|
55
83
|
if (typeof value !== 'function') return value
|
|
@@ -67,7 +95,25 @@ function getZeroProxyValue(instance: object, key: PropertyKey) {
|
|
|
67
95
|
return bound
|
|
68
96
|
}
|
|
69
97
|
|
|
70
|
-
|
|
98
|
+
function createUnavailableDirectUseQuery<
|
|
99
|
+
Schema extends ZeroSchema,
|
|
100
|
+
>(): UseQueryHook<Schema> {
|
|
101
|
+
function useQueryDirect(): never {
|
|
102
|
+
throw new Error(
|
|
103
|
+
`[on-zero] direct queries are optional. Import createZeroClientWithDirectQueries from 'on-zero/multi' for clients used outside the innermost ZeroProvider.`,
|
|
104
|
+
)
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return useQueryDirect as UseQueryHook<Schema>
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export function createZeroClient<Schema extends ZeroSchema, Models extends GenericModels>(
|
|
111
|
+
options: CreateZeroClientOptions<Schema, Models>,
|
|
112
|
+
) {
|
|
113
|
+
return createZeroClientInternal(options)
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export function createZeroClientInternal<
|
|
71
117
|
Schema extends ZeroSchema,
|
|
72
118
|
Models extends GenericModels,
|
|
73
119
|
>({
|
|
@@ -76,15 +122,9 @@ export function createZeroClient<
|
|
|
76
122
|
groupedQueries,
|
|
77
123
|
permissionStrategy = 'optimistic',
|
|
78
124
|
instanceName = 'default',
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
groupedQueries: GroupedQueries
|
|
83
|
-
permissionStrategy?: PermissionStrategy
|
|
84
|
-
// names this client instance so multiple instances can coexist on one page.
|
|
85
|
-
// each query/mutator namespace is claimed by exactly one instance, and the
|
|
86
|
-
// ambient run() + the combineZeroClients facade dispatch by that claim.
|
|
87
|
-
instanceName?: string
|
|
125
|
+
createDirectUseQuery,
|
|
126
|
+
}: CreateZeroClientOptions<Schema, Models> & {
|
|
127
|
+
createDirectUseQuery?: DirectQueryAdapter<Schema>
|
|
88
128
|
}) {
|
|
89
129
|
type ZeroMutators = GetZeroMutators<Models>
|
|
90
130
|
type ZeroInstance = Zero<Schema, ZeroMutators>
|
|
@@ -230,13 +270,9 @@ export function createZeroClient<
|
|
|
230
270
|
|
|
231
271
|
const zeroEvents = createEmitter<ZeroEvent | null>(`zero${emitterScope}`, null)
|
|
232
272
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
const zeroInstanceVersion = createEmitter<number>(
|
|
237
|
-
`zero-instance-version${emitterScope}`,
|
|
238
|
-
0,
|
|
239
|
-
)
|
|
273
|
+
const zeroInstanceVersion = createDirectUseQuery
|
|
274
|
+
? createEmitter<number>(`zero-instance-version${emitterScope}`, 0)
|
|
275
|
+
: null
|
|
240
276
|
|
|
241
277
|
const AuthDataContext = createContext<AuthData>({} as AuthData)
|
|
242
278
|
|
|
@@ -245,15 +281,14 @@ export function createZeroClient<
|
|
|
245
281
|
customQueries,
|
|
246
282
|
})
|
|
247
283
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
})
|
|
284
|
+
const useQueryDirect = createDirectUseQuery
|
|
285
|
+
? createDirectUseQuery({
|
|
286
|
+
DisabledContext,
|
|
287
|
+
customQueries,
|
|
288
|
+
getZero: () => latestZeroInstance,
|
|
289
|
+
zeroVersion: zeroInstanceVersion!,
|
|
290
|
+
})
|
|
291
|
+
: createUnavailableDirectUseQuery<Schema>()
|
|
257
292
|
|
|
258
293
|
// permission check uses a per-model synced query so server is authoritative
|
|
259
294
|
// permissionStrategy controls client behavior before server responds.
|
|
@@ -515,10 +550,8 @@ export function createZeroClient<
|
|
|
515
550
|
setRunner(runner)
|
|
516
551
|
}
|
|
517
552
|
|
|
518
|
-
// notify direct-path views after commit (emitting during render would
|
|
519
|
-
// setState other components mid-render)
|
|
520
553
|
useEffect(() => {
|
|
521
|
-
zeroInstanceVersion
|
|
554
|
+
zeroInstanceVersion?.emit(zeroInstanceVersion.value + 1)
|
|
522
555
|
}, [zeroInstance])
|
|
523
556
|
|
|
524
557
|
return null
|
|
@@ -177,7 +177,10 @@ describe('zero recovery', () => {
|
|
|
177
177
|
// remount. previously crashed as an unhandled rejection.
|
|
178
178
|
test('default reload path is a safe no-op when location is absent', async () => {
|
|
179
179
|
const events: ZeroEvent[] = []
|
|
180
|
-
const zeroEvents = createEmitter<ZeroEvent | null>(
|
|
180
|
+
const zeroEvents = createEmitter<ZeroEvent | null>(
|
|
181
|
+
`test-recover-${emitterSeq++}`,
|
|
182
|
+
null,
|
|
183
|
+
)
|
|
181
184
|
zeroEvents.listen((event) => {
|
|
182
185
|
if (event) events.push(event)
|
|
183
186
|
})
|
|
@@ -200,6 +203,9 @@ describe('zero recovery', () => {
|
|
|
200
203
|
})
|
|
201
204
|
}
|
|
202
205
|
expect(deleteLocalState).toHaveBeenCalledTimes(1)
|
|
203
|
-
expect(events).toContainEqual({
|
|
206
|
+
expect(events).toContainEqual({
|
|
207
|
+
type: 'recovering',
|
|
208
|
+
reason: 'client state not found',
|
|
209
|
+
})
|
|
204
210
|
})
|
|
205
211
|
})
|
package/src/index.ts
CHANGED
|
@@ -8,8 +8,12 @@ export * from './helpers/useMutation'
|
|
|
8
8
|
export { ensureAuth, getAuth } from './helpers/getAuth'
|
|
9
9
|
export { setAuthData, setEnvironment } from './state'
|
|
10
10
|
|
|
11
|
-
export
|
|
12
|
-
|
|
11
|
+
export {
|
|
12
|
+
createZeroClient,
|
|
13
|
+
type CreateZeroClientOptions,
|
|
14
|
+
type GroupedQueries,
|
|
15
|
+
type PermissionStrategy,
|
|
16
|
+
} from './createZeroClient'
|
|
13
17
|
export * from './httpPullTransport'
|
|
14
18
|
export * from './createUseQuery'
|
|
15
19
|
export * from './resolveQuery'
|
package/src/multi.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createZeroClientInternal,
|
|
3
|
+
type DirectQueryAdapter,
|
|
4
|
+
type CreateZeroClientOptions,
|
|
5
|
+
} from './createZeroClient'
|
|
6
|
+
import { createUseQueryDirect } from './createUseQueryDirect'
|
|
7
|
+
|
|
8
|
+
import type { GenericModels } from './types'
|
|
9
|
+
import type { Schema as ZeroSchema } from '@rocicorp/zero'
|
|
10
|
+
|
|
11
|
+
export * from './combineZeroClients'
|
|
12
|
+
|
|
13
|
+
export function createZeroClientWithDirectQueries<
|
|
14
|
+
Schema extends ZeroSchema,
|
|
15
|
+
Models extends GenericModels,
|
|
16
|
+
>(
|
|
17
|
+
options: CreateZeroClientOptions<Schema, Models>,
|
|
18
|
+
): ReturnType<typeof createZeroClientInternal<Schema, Models>> {
|
|
19
|
+
const createDirectUseQuery: DirectQueryAdapter<Schema> = createUseQueryDirect
|
|
20
|
+
return createZeroClientInternal<Schema, Models>({
|
|
21
|
+
...options,
|
|
22
|
+
createDirectUseQuery,
|
|
23
|
+
})
|
|
24
|
+
}
|
|
@@ -6,12 +6,13 @@
|
|
|
6
6
|
// path — they must materialize directly on the owning instance.
|
|
7
7
|
|
|
8
8
|
import { createSchema, string, table } from '@rocicorp/zero'
|
|
9
|
+
import { useZero } from '@rocicorp/zero/react'
|
|
9
10
|
import { act, StrictMode } from 'react'
|
|
10
11
|
import { createRoot, type Root } from 'react-dom/client'
|
|
11
12
|
import { afterEach, beforeEach, expect, test } from 'vitest'
|
|
12
13
|
|
|
13
|
-
import { combineZeroClients } from './combineZeroClients'
|
|
14
14
|
import { createZeroClient } from './createZeroClient'
|
|
15
|
+
import { combineZeroClients, createZeroClientWithDirectQueries } from './multi'
|
|
15
16
|
import { zql } from './zql'
|
|
16
17
|
|
|
17
18
|
import type { MutatorContext } from './types'
|
|
@@ -44,7 +45,7 @@ const controlModels = {
|
|
|
44
45
|
}
|
|
45
46
|
const ctlUserById = (args: { id: string }) => (zql as any).user.where('id', args.id).one()
|
|
46
47
|
|
|
47
|
-
const control =
|
|
48
|
+
const control = createZeroClientWithDirectQueries({
|
|
48
49
|
schema,
|
|
49
50
|
models: controlModels,
|
|
50
51
|
groupedQueries: { ctlUser: { byId: ctlUserById } },
|
|
@@ -87,6 +88,9 @@ beforeEach(() => {
|
|
|
87
88
|
|
|
88
89
|
afterEach(async () => {
|
|
89
90
|
await act(async () => root.unmount())
|
|
91
|
+
await act(async () => {
|
|
92
|
+
await new Promise((resolve) => setTimeout(resolve, 20))
|
|
93
|
+
})
|
|
90
94
|
container.remove()
|
|
91
95
|
})
|
|
92
96
|
|
|
@@ -106,21 +110,60 @@ const probe: { data: UserRow | undefined; renders: number } = {
|
|
|
106
110
|
data: undefined,
|
|
107
111
|
renders: 0,
|
|
108
112
|
}
|
|
113
|
+
const materializeProbe: {
|
|
114
|
+
materializeTtls: unknown[]
|
|
115
|
+
updateTtls: unknown[]
|
|
116
|
+
destroys: number
|
|
117
|
+
} = {
|
|
118
|
+
materializeTtls: [],
|
|
119
|
+
updateTtls: [],
|
|
120
|
+
destroys: 0,
|
|
121
|
+
}
|
|
109
122
|
|
|
110
123
|
// reset via helper so the assignments don't narrow probe.data to undefined
|
|
111
124
|
// in test scope
|
|
112
125
|
function resetProbe() {
|
|
113
126
|
probe.data = undefined
|
|
114
127
|
probe.renders = 0
|
|
128
|
+
materializeProbe.materializeTtls = []
|
|
129
|
+
materializeProbe.updateTtls = []
|
|
130
|
+
materializeProbe.destroys = 0
|
|
115
131
|
}
|
|
116
132
|
|
|
117
|
-
function ControlUserProbe({ id }: { id: string }) {
|
|
118
|
-
const [data] =
|
|
133
|
+
function ControlUserProbe({ id, ttl }: { id: string; ttl?: number }) {
|
|
134
|
+
const [data] =
|
|
135
|
+
ttl === undefined
|
|
136
|
+
? (combined.useQuery as any)(ctlUserById, { id })
|
|
137
|
+
: (combined.useQuery as any)(ctlUserById, { id }, { ttl })
|
|
119
138
|
probe.data = data ?? undefined
|
|
120
139
|
probe.renders++
|
|
121
140
|
return null
|
|
122
141
|
}
|
|
123
142
|
|
|
143
|
+
function MaterializeProbe() {
|
|
144
|
+
const zero = useZero() as any
|
|
145
|
+
if (!zero.__onZeroMaterializeProbe) {
|
|
146
|
+
zero.__onZeroMaterializeProbe = true
|
|
147
|
+
const materialize = zero.materialize.bind(zero)
|
|
148
|
+
zero.materialize = (...args: any[]) => {
|
|
149
|
+
materializeProbe.materializeTtls.push(args[1]?.ttl)
|
|
150
|
+
const view = materialize(...args)
|
|
151
|
+
const updateTTL = view.updateTTL.bind(view)
|
|
152
|
+
view.updateTTL = (ttl: unknown) => {
|
|
153
|
+
materializeProbe.updateTtls.push(ttl)
|
|
154
|
+
return updateTTL(ttl)
|
|
155
|
+
}
|
|
156
|
+
const destroy = view.destroy.bind(view)
|
|
157
|
+
view.destroy = () => {
|
|
158
|
+
materializeProbe.destroys++
|
|
159
|
+
return destroy()
|
|
160
|
+
}
|
|
161
|
+
return view
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return null
|
|
165
|
+
}
|
|
166
|
+
|
|
124
167
|
const seedControl = async (row: UserRow) => {
|
|
125
168
|
await act(async () => {
|
|
126
169
|
await (control.zero.mutate as any).user.seed(row).client
|
|
@@ -206,6 +249,38 @@ test('StrictMode: direct views survive the effect double-invoke', async () => {
|
|
|
206
249
|
await waitFor(() => probe.data?.name === 'strict-v2', 'second update still live')
|
|
207
250
|
})
|
|
208
251
|
|
|
252
|
+
test('direct-path subscribers share one materialized view', async () => {
|
|
253
|
+
const App = ({ showSubscribers }: { showSubscribers: boolean }) => (
|
|
254
|
+
<control.ProvideZero server={null} userID="t5-ctl">
|
|
255
|
+
<MaterializeProbe />
|
|
256
|
+
<project.ProvideZero server={null} userID="t5-prj">
|
|
257
|
+
{showSubscribers ? (
|
|
258
|
+
<>
|
|
259
|
+
<ControlUserProbe id="u5" ttl={1000} />
|
|
260
|
+
<ControlUserProbe id="u5" ttl={2000} />
|
|
261
|
+
</>
|
|
262
|
+
) : null}
|
|
263
|
+
</project.ProvideZero>
|
|
264
|
+
</control.ProvideZero>
|
|
265
|
+
)
|
|
266
|
+
|
|
267
|
+
await render(<App showSubscribers />)
|
|
268
|
+
await waitFor(() => probe.renders >= 2, 'both probes mount')
|
|
269
|
+
|
|
270
|
+
expect(materializeProbe.materializeTtls).toEqual([1000])
|
|
271
|
+
expect(materializeProbe.updateTtls).toEqual([2000])
|
|
272
|
+
|
|
273
|
+
await seedControl({ id: 'u5', name: 'shared-v1' })
|
|
274
|
+
await waitFor(() => probe.data?.name === 'shared-v1', 'shared view update visible')
|
|
275
|
+
expect(materializeProbe.materializeTtls).toEqual([1000])
|
|
276
|
+
|
|
277
|
+
await render(<App showSubscribers={false} />)
|
|
278
|
+
await act(async () => {
|
|
279
|
+
await new Promise((resolve) => setTimeout(resolve, 20))
|
|
280
|
+
})
|
|
281
|
+
expect(materializeProbe.destroys).toBe(1)
|
|
282
|
+
})
|
|
283
|
+
|
|
209
284
|
test('direct-path views re-materialize when the owning instance rotates', async () => {
|
|
210
285
|
const App = ({ userID }: { userID: string }) => (
|
|
211
286
|
<control.ProvideZero server={null} userID={userID}>
|
package/src/testSetup.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
if (typeof globalThis.localStorage?.getItem !== 'function') {
|
|
2
|
+
const store = new Map<string, string>()
|
|
3
|
+
Object.defineProperty(globalThis, 'localStorage', {
|
|
4
|
+
configurable: true,
|
|
5
|
+
value: {
|
|
6
|
+
get length() {
|
|
7
|
+
return store.size
|
|
8
|
+
},
|
|
9
|
+
clear() {
|
|
10
|
+
store.clear()
|
|
11
|
+
},
|
|
12
|
+
getItem(key: string) {
|
|
13
|
+
return store.get(String(key)) ?? null
|
|
14
|
+
},
|
|
15
|
+
key(index: number) {
|
|
16
|
+
return Array.from(store.keys())[index] ?? null
|
|
17
|
+
},
|
|
18
|
+
removeItem(key: string) {
|
|
19
|
+
store.delete(String(key))
|
|
20
|
+
},
|
|
21
|
+
setItem(key: string, value: string) {
|
|
22
|
+
store.set(String(key), String(value))
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
})
|
|
26
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combineZeroClients.d.ts","sourceRoot":"","sources":["../src/combineZeroClients.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAG/D,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAE3B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"combineZeroClients.d.ts","sourceRoot":"","sources":["../src/combineZeroClients.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAG/D,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAE3B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAoBtC,KAAK,mBAAmB,GAAG;IACzB,QAAQ,EAAE,SAAS,CAAA;IACnB,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC7B,YAAY,CAAC,EAAE,OAAO,GAAG,YAAY,CAAA;CACtC,CAAA;AAID,KAAK,oBAAoB,GAAG;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;IACjC,cAAc,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;IACvC,aAAa,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;IACtC,mBAAmB,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;IAC5C,IAAI,EAAE,GAAG,CAAA;IACT,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;IAChC,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;IACjC,UAAU,EAAE,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAA;IACrC,cAAc,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,SAAS,CAAA;CAC1D,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IAGtC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,SAAS,CAC7E,CAAC,EAAE,MAAM,CAAC,KACP,IAAI,GACL,CAAC,GACD,KAAK,CAAA;AAET,MAAM,MAAM,mBAAmB,CAAC,OAAO,SAAS,SAAS,oBAAoB,EAAE,IAAI;IACjF,QAAQ,EAAE,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;IAC1D,aAAa,EAAE,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAA;IACpE,IAAI,EAAE,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IAClD,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;IACxD,QAAQ,EAAE,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;IAC1D,GAAG,EAAE,OAAO,GAAG,CAAA;IACf,UAAU,EAAE,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAA;IACrC,cAAc,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,SAAS,CAAA;CAC1D,CAAA;AAED,wBAAgB,kBAAkB,CAChC,KAAK,CAAC,OAAO,SAAS,SAAS,CAAC,oBAAoB,EAAE,GAAG,oBAAoB,EAAE,CAAC,EAEhF,GAAG,iBAAiB,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE,yBAAyB,CAAC,GAC3E,mBAAmB,CAAC,OAAO,CAAC,CA6G9B"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { useQuery as zeroUseQuery } from '@rocicorp/zero/react';
|
|
2
|
-
import { type Emitter } from '@take-out/helpers';
|
|
3
2
|
import { type Context } from 'react';
|
|
4
3
|
import { type PlainQueryFn } from './resolveQuery';
|
|
5
4
|
import type { AnyQueryRegistry, HumanReadable, Query, Schema as ZeroSchema } from '@rocicorp/zero';
|
|
@@ -15,22 +14,12 @@ export type UseQueryHook<Schema extends ZeroSchema> = {
|
|
|
15
14
|
<TArg, TTable extends keyof Schema['tables'] & string, TReturn>(fn: PlainQueryFn<TArg, Query<TTable, Schema, TReturn>>, params: TArg, options?: UseQueryOptions | boolean): QueryResult<TReturn>;
|
|
16
15
|
<TTable extends keyof Schema['tables'] & string, TReturn>(fn: PlainQueryFn<void, Query<TTable, Schema, TReturn>>, options?: UseQueryOptions | boolean): QueryResult<TReturn>;
|
|
17
16
|
};
|
|
18
|
-
export declare function
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}): UseQueryHook<Schema>;
|
|
22
|
-
type MaterializableZero = {
|
|
23
|
-
materialize(query: any, options?: {
|
|
24
|
-
ttl?: any;
|
|
25
|
-
}): {
|
|
26
|
-
addListener(cb: (data: any, resultType: string) => void): void;
|
|
27
|
-
destroy(): void;
|
|
28
|
-
};
|
|
17
|
+
export declare function parseUseQueryArgs(paramsOrOptions: any, optionsArg: any): {
|
|
18
|
+
params: any;
|
|
19
|
+
options: any;
|
|
29
20
|
};
|
|
30
|
-
export declare function
|
|
21
|
+
export declare function createUseQuery<Schema extends ZeroSchema>({ DisabledContext, customQueries, }: {
|
|
31
22
|
DisabledContext: Context<QueryControlMode>;
|
|
32
23
|
customQueries: AnyQueryRegistry;
|
|
33
|
-
getZero: () => MaterializableZero | null;
|
|
34
|
-
zeroVersion: Emitter<number>;
|
|
35
24
|
}): UseQueryHook<Schema>;
|
|
36
25
|
//# sourceMappingURL=createUseQuery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createUseQuery.d.ts","sourceRoot":"","sources":["../src/createUseQuery.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,
|
|
1
|
+
{"version":3,"file":"createUseQuery.d.ts","sourceRoot":"","sources":["../src/createUseQuery.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,EAA+B,KAAK,OAAO,EAAE,MAAM,OAAO,CAAA;AAGjE,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAEhE,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,KAAK,EACL,MAAM,IAAI,UAAU,EACrB,MAAM,gBAAgB,CAAA;AAGvB,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,OAAO,GAAG,YAAY,CAAA;AAE7D,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC7B,GAAG,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;CAC9C,CAAA;AAED,KAAK,kBAAkB,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;AAC5D,MAAM,MAAM,WAAW,CAAC,OAAO,IAAI,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAA;AAExF,YAAY,EAAE,YAAY,EAAE,CAAA;AAE5B,MAAM,MAAM,YAAY,CAAC,MAAM,SAAS,UAAU,IAAI;IAEpD,CAAC,IAAI,EAAE,MAAM,SAAS,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE,OAAO,EAC5D,EAAE,EAAE,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,EACtD,MAAM,EAAE,IAAI,EACZ,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,GAClC,WAAW,CAAC,OAAO,CAAC,CAAC;IAGxB,CAAC,MAAM,SAAS,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE,OAAO,EACtD,EAAE,EAAE,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,EACtD,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,GAClC,WAAW,CAAC,OAAO,CAAC,CAAA;CACxB,CAAA;AAKD,wBAAgB,iBAAiB,CAAC,eAAe,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG;;;EAYtE;AAED,wBAAgB,cAAc,CAAC,MAAM,SAAS,UAAU,EAAE,EACxD,eAAe,EACf,aAAa,GACd,EAAE;IACD,eAAe,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAC1C,aAAa,EAAE,gBAAgB,CAAA;CAChC,GAAG,YAAY,CAAC,MAAM,CAAC,CAkCvB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type Emitter } from '@take-out/helpers';
|
|
2
|
+
import { type Context } from 'react';
|
|
3
|
+
import { type QueryControlMode, type UseQueryHook } from './createUseQuery';
|
|
4
|
+
import type { AnyQueryRegistry, Schema as ZeroSchema } from '@rocicorp/zero';
|
|
5
|
+
export type MaterializableZero = {
|
|
6
|
+
clientID: string;
|
|
7
|
+
context: unknown;
|
|
8
|
+
materialize(query: any, options?: {
|
|
9
|
+
ttl?: any;
|
|
10
|
+
}): {
|
|
11
|
+
addListener(cb: (data: any, resultType: string, error?: DirectQueryError) => void): void;
|
|
12
|
+
destroy(): void;
|
|
13
|
+
updateTTL(ttl: any): void;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
export type CreateUseQueryDirect<Schema extends ZeroSchema> = (props: {
|
|
17
|
+
DisabledContext: Context<QueryControlMode>;
|
|
18
|
+
customQueries: AnyQueryRegistry;
|
|
19
|
+
getZero: () => MaterializableZero | null;
|
|
20
|
+
zeroVersion: Emitter<number>;
|
|
21
|
+
}) => UseQueryHook<Schema>;
|
|
22
|
+
type DirectQueryError = {
|
|
23
|
+
error: 'app' | 'parse';
|
|
24
|
+
message?: string;
|
|
25
|
+
details?: unknown;
|
|
26
|
+
};
|
|
27
|
+
export declare function createUseQueryDirect<Schema extends ZeroSchema>({ DisabledContext, customQueries, getZero, zeroVersion, }: Parameters<CreateUseQueryDirect<Schema>>[0]): UseQueryHook<Schema>;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=createUseQueryDirect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createUseQueryDirect.d.ts","sourceRoot":"","sources":["../src/createUseQueryDirect.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAmB,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACjE,OAAO,EAAqD,KAAK,OAAO,EAAE,MAAM,OAAO,CAAA;AAEvF,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAElB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,KAAK,EACV,gBAAgB,EAEhB,MAAM,IAAI,UAAU,EACrB,MAAM,gBAAgB,CAAA;AAqBvB,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,CACT,KAAK,EAAE,GAAG,EACV,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,GACtB;QACD,WAAW,CACT,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,gBAAgB,KAAK,IAAI,GACpE,IAAI,CAAA;QACP,OAAO,IAAI,IAAI,CAAA;QACf,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAA;KAC1B,CAAA;CACF,CAAA;AAED,MAAM,MAAM,oBAAoB,CAAC,MAAM,SAAS,UAAU,IAAI,CAAC,KAAK,EAAE;IACpE,eAAe,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAC1C,aAAa,EAAE,gBAAgB,CAAA;IAC/B,OAAO,EAAE,MAAM,kBAAkB,GAAG,IAAI,CAAA;IACxC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;CAC7B,KAAK,YAAY,CAAC,MAAM,CAAC,CAAA;AAG1B,KAAK,gBAAgB,GAAG;IACtB,KAAK,EAAE,KAAK,GAAG,OAAO,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAsLD,wBAAgB,oBAAoB,CAAC,MAAM,SAAS,UAAU,EAAE,EAC9D,eAAe,EACf,aAAa,EACb,OAAO,EACP,WAAW,GACZ,EAAE,UAAU,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAkDpE"}
|
|
@@ -1,23 +1,69 @@
|
|
|
1
1
|
import { Zero as ZeroClient } from '@rocicorp/zero';
|
|
2
|
-
import { type
|
|
3
|
-
import { type
|
|
2
|
+
import { type Emitter } from '@take-out/helpers';
|
|
3
|
+
import { type Context, type ReactNode } from 'react';
|
|
4
|
+
import { type QueryControlMode, type UseQueryHook } from './createUseQuery';
|
|
4
5
|
import { resolveQuery, type PlainQueryFn } from './resolveQuery';
|
|
5
6
|
import type { AuthData, GenericModels, GetZeroMutators, ZeroEvent } from './types';
|
|
6
|
-
import type { Query, Row, ZeroOptions, Schema as ZeroSchema } from '@rocicorp/zero';
|
|
7
|
+
import type { AnyQueryRegistry, Query, Row, ZeroOptions, Schema as ZeroSchema } from '@rocicorp/zero';
|
|
7
8
|
type PreloadOptions = {
|
|
8
9
|
ttl?: 'always' | 'never' | number | undefined;
|
|
9
10
|
};
|
|
10
11
|
export type GroupedQueries = Record<string, Record<string, (...args: any[]) => any>>;
|
|
11
12
|
export type PermissionStrategy = 'optimistic' | 'optimistic-deny' | 'optimistic-allow';
|
|
12
|
-
export
|
|
13
|
+
export type CreateZeroClientOptions<Schema extends ZeroSchema, Models extends GenericModels> = {
|
|
13
14
|
schema: Schema;
|
|
14
15
|
models: Models;
|
|
15
16
|
groupedQueries: GroupedQueries;
|
|
16
17
|
permissionStrategy?: PermissionStrategy;
|
|
17
18
|
instanceName?: string;
|
|
19
|
+
};
|
|
20
|
+
export type DirectQueryAdapter<Schema extends ZeroSchema> = (props: {
|
|
21
|
+
DisabledContext: Context<QueryControlMode>;
|
|
22
|
+
customQueries: AnyQueryRegistry;
|
|
23
|
+
getZero: () => any;
|
|
24
|
+
zeroVersion: Emitter<number>;
|
|
25
|
+
}) => UseQueryHook<Schema>;
|
|
26
|
+
export declare function createZeroClient<Schema extends ZeroSchema, Models extends GenericModels>(options: CreateZeroClientOptions<Schema, Models>): {
|
|
27
|
+
instanceName: string;
|
|
28
|
+
zeroEvents: Emitter<ZeroEvent | null>;
|
|
29
|
+
ProvideZero: ({ children, authData: authDataIn, disable, transport, pullIntervalMs, beforeReload, ...props }: Omit<ZeroOptions<Schema, GetZeroMutators<Models>>, "schema" | "mutators"> & {
|
|
30
|
+
children: ReactNode;
|
|
31
|
+
authData?: {} | null | undefined;
|
|
32
|
+
disable?: boolean;
|
|
33
|
+
transport?: "http-pull";
|
|
34
|
+
pullIntervalMs?: number;
|
|
35
|
+
beforeReload?: (() => Promise<void>) | undefined;
|
|
36
|
+
}) => string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | import("react/jsx-runtime").JSX.Element | null | undefined;
|
|
37
|
+
ControlQueries: ({ children, action, whenDisabled, }: {
|
|
38
|
+
children: ReactNode;
|
|
39
|
+
action?: "enable" | "disable";
|
|
40
|
+
whenDisabled?: "empty" | "last-value";
|
|
41
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
42
|
+
useQuery: UseQueryHook<Schema>;
|
|
43
|
+
useQueryDirect: UseQueryHook<Schema>;
|
|
44
|
+
usePermission: (table: (string & {}) | (keyof Schema["tables"] & string), objOrId: string | Partial<Row<any>> | undefined, enabled?: boolean, debug?: boolean) => boolean | null;
|
|
45
|
+
usePermissionDirect: (table: (string & {}) | (keyof Schema["tables"] & string), objOrId: string | Partial<Row<any>> | undefined, enabled?: boolean, debug?: boolean) => boolean | null;
|
|
46
|
+
zero: ZeroClient<Schema, GetZeroMutators<Models>, unknown>;
|
|
47
|
+
preload: {
|
|
48
|
+
<TArg, TTable extends keyof Schema["tables"] & string, TReturn>(fn: PlainQueryFn<TArg, Query<TTable, Schema, TReturn>>, params: TArg, options?: PreloadOptions): {
|
|
49
|
+
cleanup: () => void;
|
|
50
|
+
complete: Promise<void>;
|
|
51
|
+
};
|
|
52
|
+
<TTable extends keyof Schema["tables"] & string, TReturn>(fn: PlainQueryFn<void, Query<TTable, Schema, TReturn>>, options?: PreloadOptions): {
|
|
53
|
+
cleanup: () => void;
|
|
54
|
+
complete: Promise<void>;
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
getQuery: {
|
|
58
|
+
<TArg, TTable extends keyof Schema["tables"] & string, TReturn>(fn: PlainQueryFn<TArg, Query<TTable, Schema, TReturn>>, params: TArg): ReturnType<typeof resolveQuery<Schema>>;
|
|
59
|
+
<TTable extends keyof Schema["tables"] & string, TReturn>(fn: PlainQueryFn<void, Query<TTable, Schema, TReturn>>): ReturnType<typeof resolveQuery<Schema>>;
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
export declare function createZeroClientInternal<Schema extends ZeroSchema, Models extends GenericModels>({ schema, models, groupedQueries, permissionStrategy, instanceName, createDirectUseQuery, }: CreateZeroClientOptions<Schema, Models> & {
|
|
63
|
+
createDirectUseQuery?: DirectQueryAdapter<Schema>;
|
|
18
64
|
}): {
|
|
19
65
|
instanceName: string;
|
|
20
|
-
zeroEvents:
|
|
66
|
+
zeroEvents: Emitter<ZeroEvent | null>;
|
|
21
67
|
ProvideZero: ({ children, authData: authDataIn, disable, transport, pullIntervalMs, beforeReload, ...props }: Omit<ZeroOptions<Schema, GetZeroMutators<Models>>, "schema" | "mutators"> & {
|
|
22
68
|
children: ReactNode;
|
|
23
69
|
authData?: AuthData | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createZeroClient.d.ts","sourceRoot":"","sources":["../src/createZeroClient.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA8B,IAAI,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"createZeroClient.d.ts","sourceRoot":"","sources":["../src/createZeroClient.tsx"],"names":[],"mappings":"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"}
|
package/types/index.d.ts
CHANGED
|
@@ -7,8 +7,7 @@ export * from './helpers/mutatorContext';
|
|
|
7
7
|
export * from './helpers/useMutation';
|
|
8
8
|
export { ensureAuth, getAuth } from './helpers/getAuth';
|
|
9
9
|
export { setAuthData, setEnvironment } from './state';
|
|
10
|
-
export
|
|
11
|
-
export * from './createZeroClient';
|
|
10
|
+
export { createZeroClient, type CreateZeroClientOptions, type GroupedQueries, type PermissionStrategy, } from './createZeroClient';
|
|
12
11
|
export * from './httpPullTransport';
|
|
13
12
|
export * from './createUseQuery';
|
|
14
13
|
export * from './resolveQuery';
|
package/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAErD,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAErD,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,KAAK,cAAc,EACnB,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAA;AAC3B,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,OAAO,CAAA;AACrB,OAAO,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAA;AACzD,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,OAAO,CAAA;AACrB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAM3D,mBAAmB,SAAS,CAAA;AAE5B,OAAO,EACL,mBAAmB,EACnB,KAAK,0BAA0B,GAChC,MAAM,+BAA+B,CAAA;AACtC,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,GACzB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,KAAK,gBAAgB,GACtB,MAAM,6BAA6B,CAAA"}
|
package/types/multi.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { createZeroClientInternal, type CreateZeroClientOptions } from './createZeroClient';
|
|
2
|
+
import type { GenericModels } from './types';
|
|
3
|
+
import type { Schema as ZeroSchema } from '@rocicorp/zero';
|
|
4
|
+
export * from './combineZeroClients';
|
|
5
|
+
export declare function createZeroClientWithDirectQueries<Schema extends ZeroSchema, Models extends GenericModels>(options: CreateZeroClientOptions<Schema, Models>): ReturnType<typeof createZeroClientInternal<Schema, Models>>;
|
|
6
|
+
//# sourceMappingURL=multi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi.d.ts","sourceRoot":"","sources":["../src/multi.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EAExB,KAAK,uBAAuB,EAC7B,MAAM,oBAAoB,CAAA;AAG3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAE1D,cAAc,sBAAsB,CAAA;AAEpC,wBAAgB,iCAAiC,CAC/C,MAAM,SAAS,UAAU,EACzB,MAAM,SAAS,aAAa,EAE5B,OAAO,EAAE,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/C,UAAU,CAAC,OAAO,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAM7D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multiInstanceNested.test.d.ts","sourceRoot":"","sources":["../src/multiInstanceNested.test.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"multiInstanceNested.test.d.ts","sourceRoot":"","sources":["../src/multiInstanceNested.test.tsx"],"names":[],"mappings":"AAoBA,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,wBAAwB,EAAE,OAAO,GAAG,SAAS,CAAA;CAClD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=testSetup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testSetup.d.ts","sourceRoot":"","sources":["../src/testSetup.ts"],"names":[],"mappings":""}
|