Skip to content

Commit 8059e6f

Browse files
committed
createZero composable
1 parent 5a1a263 commit 8059e6f

File tree

10 files changed

+254
-358
lines changed

10 files changed

+254
-358
lines changed

README.md

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -19,57 +19,54 @@ npm install zero-vue
1919
pnpm install zero-vue
2020
```
2121

22-
Register plugin:
23-
```js
24-
import { createApp } from 'vue'
22+
Creating `useZero` and `useQuery` composables:
23+
```ts
2524
import { createZero } from 'zero-vue'
25+
import type { Mutators } from './mutators.ts'
26+
import type { Schema } from './schema.ts'
2627

27-
const app = createApp(App)
2828
// see docs for all options: https://zero.rocicorp.dev/docs/introduction
29-
app.use(createZero({
29+
const { useZero, useQuery } = createZero<Schema, Mutators>({
3030
userID,
3131
server: import.meta.env.VITE_PUBLIC_SERVER,
3232
schema,
3333
kvStore: 'mem',
34-
}))
34+
})
3535

36-
// With computed options:
37-
app.use(createZero(() => ({
36+
// OR with computed options:
37+
const { useZero, useQuery } = createZero<Schema, Mutators>(() => ({
3838
userID: userID.value,
3939
server: import.meta.env.VITE_PUBLIC_SERVER,
4040
schema,
4141
kvStore: 'mem',
42-
})))
42+
}))
4343

44-
// Or with a Zero instance:
45-
app.use(createZero(new Zero({
44+
// OR with a Zero instance:
45+
const { useZero, useQuery } = createZero<Schema, Mutators>({
46+
zero: new Zero({
47+
userID,
48+
server: import.meta.env.VITE_PUBLIC_SERVER,
49+
schema,
50+
kvStore: 'mem',
51+
}),
52+
})
53+
54+
// untyped:
55+
const { useZero, useQuery } = createZero({
4656
userID,
4757
server: import.meta.env.VITE_PUBLIC_SERVER,
4858
schema,
4959
kvStore: 'mem',
50-
})))
51-
```
52-
53-
Creating `useZero` composable:
54-
```ts
55-
import type { Mutators } from './mutators.ts'
56-
import type { Schema } from './schema.ts'
57-
import { createUseZero } from 'zero-vue'
58-
59-
// Typed:
60-
export const useZero = createUseZero<Schema, Mutators>()
60+
})
6161

62-
// Untyped:
63-
export const useZero = createUseZero()
6462
```
6563

6664
To query data:
6765
```js
68-
import { useQuery } from 'zero-vue'
69-
import { useZero } from './use-zero.ts'
66+
import { useZero, useQuery } from './use-zero.ts'
7067

7168
const z = useZero()
72-
const { data: users } = useQuery(z.value.query.user)
69+
const { data: users } = useQuery(() => z.value.query.user)
7370
```
7471

7572
> [!TIP]

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
"bumpp": "latest",
4545
"changelogithub": "13.16.0",
4646
"eslint": "latest",
47-
"happy-dom": "^18.0.1",
4847
"installed-check": "latest",
4948
"knip": "latest",
5049
"lint-staged": "latest",

pnpm-lock.yaml

Lines changed: 20 additions & 19 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/create-use-zero.ts

Lines changed: 0 additions & 11 deletions
This file was deleted.

src/create-zero.test.ts

Lines changed: 32 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { createSchema, number, string, table, Zero } from '@rocicorp/zero'
22
import { assert, describe, expect, it } from 'vitest'
3-
import { computed, createApp, inject, ref } from 'vue'
4-
import { createZero, zeroSymbol } from './create-zero'
3+
import { computed, ref } from 'vue'
4+
import { createZero } from './create-zero'
55

66
const testSchema = createSchema({
77
tables: [
@@ -15,41 +15,34 @@ const testSchema = createSchema({
1515
})
1616

1717
describe('createZero', () => {
18-
it('installs and provides zero instance to Vue app', () => {
19-
const app = createApp({})
20-
app.use(createZero({
18+
it('creates a zero instance', () => {
19+
const { useZero } = createZero({
2120
userID: 'test-user',
2221
server: null,
2322
schema: testSchema,
2423
kvStore: 'mem' as const,
25-
}))
26-
27-
app.runWithContext(() => {
28-
const zero = inject(zeroSymbol)
29-
assert(zero?.value)
30-
expect(zero?.value.userID).toEqual('test-user')
3124
})
25+
26+
const zero = useZero()
27+
assert(zero?.value)
28+
expect(zero?.value.userID).toEqual('test-user')
3229
})
3330

3431
it('accepts Zero instance instead of options', () => {
35-
const app = createApp({})
3632
const zero = new Zero({
3733
userID: 'test-user',
3834
server: null,
3935
schema: testSchema,
4036
kvStore: 'mem' as const,
4137
})
42-
app.use(createZero({ zero }))
38+
const { useZero } = createZero({ zero })
4339

44-
app.runWithContext(() => {
45-
const injectedZero = inject(zeroSymbol)
46-
assert(injectedZero?.value)
47-
expect(injectedZero.value).toEqual(zero)
48-
})
40+
const usedZero = useZero()
41+
assert(usedZero?.value)
42+
expect(usedZero.value).toEqual(zero)
4943
})
5044

5145
it('updates when options change', async () => {
52-
const app = createApp({})
5346
const userID = ref('test-user')
5447
const zeroOptions = computed(() => ({
5548
userID: userID.value,
@@ -58,27 +51,24 @@ describe('createZero', () => {
5851
kvStore: 'mem' as const,
5952
}))
6053

61-
app.use(createZero(zeroOptions))
54+
const { useZero } = createZero(zeroOptions)
6255

63-
await app.runWithContext(async () => {
64-
const injectedZero = inject(zeroSymbol)
65-
assert(injectedZero?.value)
56+
const zero = useZero()
57+
assert(zero?.value)
6658

67-
expect(injectedZero.value.userID).toEqual('test-user')
59+
expect(zero.value.userID).toEqual('test-user')
6860

69-
const oldZero = injectedZero.value
61+
const oldZero = zero.value
7062

71-
userID.value = 'test-user-2'
72-
await 1
63+
userID.value = 'test-user-2'
64+
await 1
7365

74-
expect(injectedZero.value.userID).toEqual('test-user-2')
75-
expect(injectedZero.value.closed).toBe(false)
76-
expect(oldZero.closed).toBe(true)
77-
})
66+
expect(zero.value.userID).toEqual('test-user-2')
67+
expect(zero.value.closed).toBe(false)
68+
expect(oldZero.closed).toBe(true)
7869
})
7970

8071
it('updates when Zero instance changes', async () => {
81-
const app = createApp({})
8272
const userID = ref('test-user')
8373

8474
const zero = computed(() => ({ zero: new Zero({
@@ -88,22 +78,19 @@ describe('createZero', () => {
8878
kvStore: 'mem' as const,
8979
}) }))
9080

91-
app.use(createZero(zero))
92-
93-
await app.runWithContext(async () => {
94-
const injectedZero = inject(zeroSymbol)
95-
assert(injectedZero?.value)
81+
const { useZero } = createZero(zero)
82+
const usedZero = useZero()
83+
assert(usedZero?.value)
9684

97-
expect(injectedZero.value.userID).toEqual('test-user')
85+
expect(usedZero.value.userID).toEqual('test-user')
9886

99-
const oldZero = injectedZero.value
87+
const oldZero = usedZero.value
10088

101-
userID.value = 'test-user-2'
102-
await 1
89+
userID.value = 'test-user-2'
90+
await 1
10391

104-
expect(injectedZero.value.userID).toEqual('test-user-2')
105-
expect(injectedZero.value.closed).toBe(false)
106-
expect(oldZero.closed).toBe(true)
107-
})
92+
expect(usedZero.value.userID).toEqual('test-user-2')
93+
expect(usedZero.value.closed).toBe(false)
94+
expect(oldZero.closed).toBe(true)
10895
})
10996
})

0 commit comments

Comments
 (0)