over-zero 0.0.33 → 0.0.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/cli.cjs +38 -57
- package/dist/cjs/cli.js +38 -54
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/cli.native.js +42 -69
- package/dist/cjs/cli.native.js.map +1 -1
- package/dist/cjs/createZeroClient.cjs +2 -2
- package/dist/cjs/createZeroClient.js +2 -2
- package/dist/cjs/createZeroClient.js.map +1 -1
- package/dist/cjs/createZeroClient.native.js +2 -2
- package/dist/cjs/createZeroClient.native.js.map +1 -1
- package/dist/cjs/createZeroServer.cjs +5 -4
- package/dist/cjs/createZeroServer.js +8 -3
- package/dist/cjs/createZeroServer.js.map +1 -1
- package/dist/cjs/createZeroServer.native.js +39 -5
- package/dist/cjs/createZeroServer.native.js.map +1 -1
- package/dist/esm/cli.js +38 -54
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/cli.mjs +38 -57
- package/dist/esm/cli.mjs.map +1 -1
- package/dist/esm/cli.native.js +42 -69
- package/dist/esm/cli.native.js.map +1 -1
- package/dist/esm/createZeroClient.js +2 -2
- package/dist/esm/createZeroClient.js.map +1 -1
- package/dist/esm/createZeroClient.mjs +2 -2
- package/dist/esm/createZeroClient.mjs.map +1 -1
- package/dist/esm/createZeroClient.native.js +2 -2
- package/dist/esm/createZeroClient.native.js.map +1 -1
- package/dist/esm/createZeroServer.js +8 -3
- package/dist/esm/createZeroServer.js.map +1 -1
- package/dist/esm/createZeroServer.mjs +5 -4
- package/dist/esm/createZeroServer.mjs.map +1 -1
- package/dist/esm/createZeroServer.native.js +39 -5
- package/dist/esm/createZeroServer.native.js.map +1 -1
- package/package.json +1 -1
- package/src/cli.ts +79 -102
- package/src/createZeroClient.tsx +6 -5
- package/src/createZeroServer.ts +16 -7
- package/types/createZeroClient.d.ts +3 -3
- package/types/createZeroClient.d.ts.map +1 -1
- package/types/createZeroServer.d.ts +3 -3
- package/types/createZeroServer.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["handleGetQueriesRequest","PushProcessor","zeroNodePg","assertString","randomId","Pool","createPermissions","createMutators","isInZeroMutation","mutatorContext","setAuthData","setSchema","createZeroServer","param","createServerActions","database","schema","models","
|
|
1
|
+
{"version":3,"names":["handleGetQueriesRequest","PushProcessor","zeroNodePg","assertString","randomId","Pool","createPermissions","createMutators","isInZeroMutation","mutatorContext","setAuthData","setSchema","createZeroServer","param","createServerActions","database","schema","models","syncedQueries","dbString","zeroDb","connectionString","permissions","environment","processor","handleMutationRequest","param2","authData","request","skipAsyncTasks","asyncTasks","mutators","can","response","process","length","id","console","info","Promise","all","map","task","then","catch","err","error","queryLookup","Map","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Object","entries","Symbol","iterator","_step","next","done","namespace","queries","value","_iteratorNormalCompletion1","_didIteratorError1","_iteratorError1","_iterator1","_step1","queryName","syncedQuery","set","return","handleQueryRequest","getQuery","name","args","q","get","Error","query","mutate","run","email","role","transaction","tx","t","query2","output","dummyTransactionInput"],"sources":["../../src/createZeroServer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
package/src/cli.ts
CHANGED
|
@@ -274,23 +274,23 @@ const generate = defineCommand({
|
|
|
274
274
|
)
|
|
275
275
|
|
|
276
276
|
const allQueries = queryResults.flat()
|
|
277
|
-
const
|
|
278
|
-
const
|
|
277
|
+
const groupedQueriesOutput = generateGroupedQueriesFile(allQueries)
|
|
278
|
+
const syncedQueriesOutput = generateSyncedQueriesFile(allQueries)
|
|
279
279
|
|
|
280
|
-
const
|
|
281
|
-
resolve(generatedDir, '
|
|
282
|
-
|
|
280
|
+
const groupedChanged = writeFileIfChanged(
|
|
281
|
+
resolve(generatedDir, 'groupedQueries.ts'),
|
|
282
|
+
groupedQueriesOutput
|
|
283
283
|
)
|
|
284
|
-
const
|
|
285
|
-
resolve(generatedDir, '
|
|
286
|
-
|
|
284
|
+
const syncedChanged = writeFileIfChanged(
|
|
285
|
+
resolve(generatedDir, 'syncedQueries.ts'),
|
|
286
|
+
syncedQueriesOutput
|
|
287
287
|
)
|
|
288
288
|
|
|
289
|
-
if (
|
|
290
|
-
console.info(` 📝 Updated
|
|
289
|
+
if (groupedChanged) {
|
|
290
|
+
console.info(` 📝 Updated groupedQueries.ts`)
|
|
291
291
|
}
|
|
292
|
-
if (
|
|
293
|
-
console.info(` 📝 Updated
|
|
292
|
+
if (syncedChanged) {
|
|
293
|
+
console.info(` 📝 Updated syncedQueries.ts`)
|
|
294
294
|
}
|
|
295
295
|
|
|
296
296
|
console.info(
|
|
@@ -405,7 +405,7 @@ function generateTablesFile(modelFiles: string[]) {
|
|
|
405
405
|
return `// auto-generated by: over-zero generate\n// this is separate from models as otherwise you end up with circular types :/\n\n${exports}\n`
|
|
406
406
|
}
|
|
407
407
|
|
|
408
|
-
function
|
|
408
|
+
function generateGroupedQueriesFile(
|
|
409
409
|
queries: Array<{
|
|
410
410
|
name: string
|
|
411
411
|
params: string
|
|
@@ -416,30 +416,23 @@ function generateClientQueriesFile(
|
|
|
416
416
|
// get unique source files sorted
|
|
417
417
|
const sortedFiles = [...new Set(queries.map((q) => q.sourceFile))].sort()
|
|
418
418
|
|
|
419
|
-
// generate
|
|
420
|
-
const
|
|
421
|
-
.map((file) => `
|
|
419
|
+
// generate re-exports
|
|
420
|
+
const exports = sortedFiles
|
|
421
|
+
.map((file) => `export * as ${file} from '../queries/${file}'`)
|
|
422
422
|
.join('\n')
|
|
423
423
|
|
|
424
|
-
// generate namespaced export object
|
|
425
|
-
const namespaces = sortedFiles.map((file) => ` ${file}: ${file}Queries,`).join('\n')
|
|
426
|
-
|
|
427
424
|
return `/**
|
|
428
425
|
* auto-generated by: over-zero generate
|
|
429
426
|
*
|
|
430
|
-
*
|
|
427
|
+
* grouped query re-exports for minification-safe query identity.
|
|
431
428
|
* this file re-exports all query modules - while this breaks tree-shaking,
|
|
432
429
|
* queries are typically small and few in number even in larger apps.
|
|
433
430
|
*/
|
|
434
|
-
${
|
|
435
|
-
|
|
436
|
-
export const clientQueries = {
|
|
437
|
-
${namespaces}
|
|
438
|
-
}
|
|
431
|
+
${exports}
|
|
439
432
|
`
|
|
440
433
|
}
|
|
441
434
|
|
|
442
|
-
function
|
|
435
|
+
function generateSyncedQueriesFile(
|
|
443
436
|
queries: Array<{
|
|
444
437
|
name: string
|
|
445
438
|
params: string
|
|
@@ -459,95 +452,79 @@ function generateServerQueriesFile(
|
|
|
459
452
|
// sort file names for consistent output
|
|
460
453
|
const sortedFiles = Array.from(queryByFile.keys()).sort()
|
|
461
454
|
|
|
462
|
-
// generate imports
|
|
463
|
-
const queryImports = sortedFiles
|
|
464
|
-
.map((file) => `import * as ${file}Queries from '../queries/${file}'`)
|
|
465
|
-
.join('\n')
|
|
466
|
-
|
|
467
455
|
const imports = `// auto-generated by: over-zero generate
|
|
468
456
|
// server-side syncedQuery wrappers with validators
|
|
469
457
|
import { syncedQuery } from '@rocicorp/zero'
|
|
470
458
|
import * as v from 'valibot'
|
|
471
|
-
|
|
459
|
+
import * as Queries from './groupedQueries'
|
|
472
460
|
`
|
|
473
461
|
|
|
474
|
-
// generate
|
|
475
|
-
const
|
|
462
|
+
// generate grouped exports by namespace
|
|
463
|
+
const namespaceExports = sortedFiles
|
|
464
|
+
.map((file) => {
|
|
465
|
+
const fileQueries = queryByFile
|
|
466
|
+
.get(file)!
|
|
467
|
+
.sort((a, b) => a.name.localeCompare(b.name))
|
|
476
468
|
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
469
|
+
const queryDefs = fileQueries
|
|
470
|
+
.map((q) => {
|
|
471
|
+
// extract validator schema
|
|
472
|
+
const lines = q.valibotCode.split('\n').filter((l) => l.trim())
|
|
473
|
+
const schemaLineIndex = lines.findIndex((l) =>
|
|
474
|
+
l.startsWith('export const QueryParams')
|
|
475
|
+
)
|
|
484
476
|
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
477
|
+
let validatorDef = 'v.void()'
|
|
478
|
+
if (schemaLineIndex !== -1) {
|
|
479
|
+
const schemaLines: string[] = []
|
|
480
|
+
let openBraces = 0
|
|
481
|
+
let started = false
|
|
482
|
+
|
|
483
|
+
for (let i = schemaLineIndex; i < lines.length; i++) {
|
|
484
|
+
const line = lines[i]!
|
|
485
|
+
const cleaned = started
|
|
486
|
+
? line
|
|
487
|
+
: line.replace('export const QueryParams = ', '')
|
|
488
|
+
schemaLines.push(cleaned)
|
|
489
|
+
started = true
|
|
490
|
+
|
|
491
|
+
openBraces += (cleaned.match(/\{/g) || []).length
|
|
492
|
+
openBraces -= (cleaned.match(/\}/g) || []).length
|
|
493
|
+
openBraces += (cleaned.match(/\(/g) || []).length
|
|
494
|
+
openBraces -= (cleaned.match(/\)/g) || []).length
|
|
495
|
+
|
|
496
|
+
if (openBraces === 0 && schemaLines.length > 0) {
|
|
497
|
+
break
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
validatorDef = schemaLines.join('\n')
|
|
504
501
|
}
|
|
505
|
-
}
|
|
506
|
-
validatorDef = schemaLines.join('\n')
|
|
507
|
-
}
|
|
508
502
|
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
// namespaced query name: file.queryName
|
|
516
|
-
const namespacedName = `${q.sourceFile}.${q.name}`
|
|
517
|
-
|
|
518
|
-
// for void queries, no arg parameter
|
|
519
|
-
const queryFn =
|
|
520
|
-
validatorDef === 'v.void()'
|
|
521
|
-
? `() => {
|
|
522
|
-
return ${q.sourceFile}Queries.${q.name}()
|
|
523
|
-
}`
|
|
524
|
-
: `(arg) => {
|
|
525
|
-
return ${q.sourceFile}Queries.${q.name}(arg)
|
|
526
|
-
}`
|
|
527
|
-
|
|
528
|
-
return `const ${q.name}Synced = syncedQuery('${namespacedName}', ${wrappedValidator}, ${queryFn})`
|
|
529
|
-
})
|
|
530
|
-
.join('\n\n')
|
|
503
|
+
// wrap validator in v.parser(v.tuple([...]))
|
|
504
|
+
const wrappedValidator =
|
|
505
|
+
validatorDef === 'v.void()'
|
|
506
|
+
? 'v.parser(v.tuple([]))'
|
|
507
|
+
: `v.parser(v.tuple([${validatorDef}]))`
|
|
531
508
|
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
509
|
+
// namespaced query name: file.queryName
|
|
510
|
+
const namespacedName = `${q.sourceFile}.${q.name}`
|
|
511
|
+
|
|
512
|
+
// for void queries, no arg parameter
|
|
513
|
+
const queryFn =
|
|
514
|
+
validatorDef === 'v.void()'
|
|
515
|
+
? `() => Queries.${file}.${q.name}()`
|
|
516
|
+
: `(arg) => Queries.${file}.${q.name}(arg)`
|
|
517
|
+
|
|
518
|
+
return ` ${q.name}: syncedQuery('${namespacedName}', ${wrappedValidator}, ${queryFn}),`
|
|
519
|
+
})
|
|
540
520
|
.join('\n')
|
|
541
|
-
|
|
521
|
+
|
|
522
|
+
return `export const ${file} = {\n${queryDefs}\n}`
|
|
542
523
|
})
|
|
543
|
-
.join('\n')
|
|
524
|
+
.join('\n\n')
|
|
544
525
|
|
|
545
526
|
return `${imports}
|
|
546
|
-
${
|
|
547
|
-
|
|
548
|
-
export const serverQueries = {
|
|
549
|
-
${namespaces}
|
|
550
|
-
}
|
|
527
|
+
${namespaceExports}
|
|
551
528
|
`
|
|
552
529
|
}
|
|
553
530
|
|
|
@@ -561,8 +538,8 @@ this folder is auto-generated by over-zero. do not edit files here directly.
|
|
|
561
538
|
- \`models.ts\` - exports all models from ../models
|
|
562
539
|
- \`types.ts\` - typescript types derived from table schemas
|
|
563
540
|
- \`tables.ts\` - exports table schemas for type inference
|
|
564
|
-
- \`
|
|
565
|
-
- \`
|
|
541
|
+
- \`groupedQueries.ts\` - namespaced query re-exports for client setup
|
|
542
|
+
- \`syncedQueries.ts\` - namespaced syncedQuery wrappers for server setup
|
|
566
543
|
|
|
567
544
|
## usage guidelines
|
|
568
545
|
|
package/src/createZeroClient.tsx
CHANGED
|
@@ -22,8 +22,9 @@ import type {
|
|
|
22
22
|
Schema as ZeroSchema,
|
|
23
23
|
} from '@rocicorp/zero'
|
|
24
24
|
|
|
25
|
+
// grouped queries: { namespace: { queryName: queryFn } }
|
|
25
26
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
26
|
-
export type
|
|
27
|
+
export type GroupedQueries = Record<string, Record<string, (...args: any[]) => any>>
|
|
27
28
|
|
|
28
29
|
export function createZeroClient<
|
|
29
30
|
Schema extends ZeroSchema,
|
|
@@ -31,11 +32,11 @@ export function createZeroClient<
|
|
|
31
32
|
>({
|
|
32
33
|
schema,
|
|
33
34
|
models,
|
|
34
|
-
|
|
35
|
+
groupedQueries,
|
|
35
36
|
}: {
|
|
36
37
|
schema: Schema
|
|
37
38
|
models: Models
|
|
38
|
-
|
|
39
|
+
groupedQueries: GroupedQueries
|
|
39
40
|
}) {
|
|
40
41
|
type ZeroMutators = GetZeroMutators<Models>
|
|
41
42
|
type ZeroInstance = Zero<Schema, ZeroMutators>
|
|
@@ -43,8 +44,8 @@ export function createZeroClient<
|
|
|
43
44
|
|
|
44
45
|
setSchema(schema)
|
|
45
46
|
|
|
46
|
-
// build query registry from
|
|
47
|
-
for (const [namespace, queries] of Object.entries(
|
|
47
|
+
// build query registry from grouped queries
|
|
48
|
+
for (const [namespace, queries] of Object.entries(groupedQueries)) {
|
|
48
49
|
for (const [name, fn] of Object.entries(queries)) {
|
|
49
50
|
registerQuery(fn, `${namespace}.${name}`)
|
|
50
51
|
}
|
package/src/createZeroServer.ts
CHANGED
|
@@ -24,8 +24,8 @@ import type {
|
|
|
24
24
|
} from '@rocicorp/zero'
|
|
25
25
|
import type { TransactionProviderInput } from '@rocicorp/zero/pg'
|
|
26
26
|
|
|
27
|
-
//
|
|
28
|
-
export type
|
|
27
|
+
// grouped synced queries: { namespace: { queryName: SyncedQuery } }
|
|
28
|
+
export type SyncedQueries = Record<
|
|
29
29
|
string,
|
|
30
30
|
Record<string, SyncedQuery<any, any, any, any, any>>
|
|
31
31
|
>
|
|
@@ -34,12 +34,13 @@ export function createZeroServer<
|
|
|
34
34
|
Schema extends ZeroSchema,
|
|
35
35
|
Models extends GenericModels,
|
|
36
36
|
ServerActions extends Record<string, unknown>,
|
|
37
|
+
Queries extends SyncedQueries = Record<string, never>,
|
|
37
38
|
>({
|
|
38
39
|
createServerActions,
|
|
39
40
|
database,
|
|
40
41
|
schema,
|
|
41
42
|
models,
|
|
42
|
-
|
|
43
|
+
syncedQueries,
|
|
43
44
|
}: {
|
|
44
45
|
/**
|
|
45
46
|
* The DB connection string, same as ZERO_UPSTREAM_DB
|
|
@@ -48,7 +49,7 @@ export function createZeroServer<
|
|
|
48
49
|
schema: Schema
|
|
49
50
|
models: Models
|
|
50
51
|
createServerActions: () => ServerActions
|
|
51
|
-
|
|
52
|
+
syncedQueries?: Queries
|
|
52
53
|
}) {
|
|
53
54
|
setSchema(schema)
|
|
54
55
|
|
|
@@ -111,6 +112,16 @@ export function createZeroServer<
|
|
|
111
112
|
}
|
|
112
113
|
}
|
|
113
114
|
|
|
115
|
+
// build flat lookup map from grouped syncedQueries: "namespace.queryName" => SyncedQuery
|
|
116
|
+
const queryLookup = new Map<string, SyncedQuery<any, any, any, any, any>>()
|
|
117
|
+
if (syncedQueries) {
|
|
118
|
+
for (const [namespace, queries] of Object.entries(syncedQueries)) {
|
|
119
|
+
for (const [queryName, syncedQuery] of Object.entries(queries)) {
|
|
120
|
+
queryLookup.set(`${namespace}.${queryName}`, syncedQuery)
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
114
125
|
const handleQueryRequest = async ({
|
|
115
126
|
authData,
|
|
116
127
|
request,
|
|
@@ -119,9 +130,7 @@ export function createZeroServer<
|
|
|
119
130
|
request: Request
|
|
120
131
|
}) => {
|
|
121
132
|
function getQuery(name: string, args: readonly ReadonlyJSONValue[]) {
|
|
122
|
-
|
|
123
|
-
const [namespace, queryName] = name.split('.')
|
|
124
|
-
const q = serverQueries?.[namespace!]?.[queryName!]
|
|
133
|
+
const q = queryLookup.get(name)
|
|
125
134
|
if (!q) {
|
|
126
135
|
throw new Error(`No such query: ${name}`)
|
|
127
136
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { type ReactNode } from 'react';
|
|
2
2
|
import type { AuthData, GenericModels, GetZeroMutators, ZeroEvent } from './types';
|
|
3
3
|
import type { HumanReadable, Query, Row, SyncedQuery, Zero, ZeroOptions, Schema as ZeroSchema } from '@rocicorp/zero';
|
|
4
|
-
export type
|
|
5
|
-
export declare function createZeroClient<Schema extends ZeroSchema, Models extends GenericModels>({ schema, models,
|
|
4
|
+
export type GroupedQueries = Record<string, Record<string, (...args: any[]) => any>>;
|
|
5
|
+
export declare function createZeroClient<Schema extends ZeroSchema, Models extends GenericModels>({ schema, models, groupedQueries, }: {
|
|
6
6
|
schema: Schema;
|
|
7
7
|
models: Models;
|
|
8
|
-
|
|
8
|
+
groupedQueries: GroupedQueries;
|
|
9
9
|
}): {
|
|
10
10
|
zeroEvents: import("@vxrn/helpers").Emitter<ZeroEvent | null>;
|
|
11
11
|
ProvideZero: ({ children, authData: authDataIn, disable, ...props }: Omit<ZeroOptions<Schema, GetZeroMutators<Models>>, "schema" | "mutators"> & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createZeroClient.d.ts","sourceRoot":"","sources":["../src/createZeroClient.tsx"],"names":[],"mappings":"AAGA,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AASnE,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAClF,OAAO,KAAK,EACV,aAAa,EACb,KAAK,EAEL,GAAG,EACH,WAAW,EACX,IAAI,EACJ,WAAW,EACX,MAAM,IAAI,UAAU,EACrB,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"createZeroClient.d.ts","sourceRoot":"","sources":["../src/createZeroClient.tsx"],"names":[],"mappings":"AAGA,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AASnE,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAClF,OAAO,KAAK,EACV,aAAa,EACb,KAAK,EAEL,GAAG,EACH,WAAW,EACX,IAAI,EACJ,WAAW,EACX,MAAM,IAAI,UAAU,EACrB,MAAM,gBAAgB,CAAA;AAIvB,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;AAEpF,wBAAgB,gBAAgB,CAC9B,MAAM,SAAS,UAAU,EACzB,MAAM,SAAS,aAAa,EAC5B,EACA,MAAM,EACN,MAAM,EACN,cAAc,GACf,EAAE;IACD,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,cAAc,CAAA;CAC/B;;yEAyMI,IAAI,CAAC,WAAW,CAAC,MAAM,0BAAe,EAAE,QAAQ,GAAG,UAAU,CAAC,GAAG;QAClE,QAAQ,EAAE,SAAS,CAAA;QACnB,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;QAC1B,OAAO,CAAC,EAAE,OAAO,CAAA;KAClB;;SAxFiB,MAAM,SAAS,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE,OAAO,SAEnE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,GAC9B,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,YACzD;sBAhBA,OAAO,GAAG,SAAS;kBACvB,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS;YAejB,OAAO;SAInB,IAAI,EAAE,MAAM,SAAS,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE,OAAO,8DAErE,IAAI,YACF;sBAvBA,OAAO,GAAG,SAAS;kBACvB,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS;YAsBjB,OAAO;SAInB,MAAM,SAAS,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE,OAAO,gEAE7D;sBA7BA,OAAO,GAAG,SAAS;kBACvB,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS;YA4BjB,OAAO;;oBAtFd,CAAC,iDACf,CAAC,WACC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,yCAG9D,OAAO,GAAG,IAAI;;EAwNlB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { AsyncAction, AuthData, GenericModels, GetZeroMutators, Transaction } from './types';
|
|
2
2
|
import type { HumanReadable, Query, ReadonlyJSONValue, SyncedQuery, Schema as ZeroSchema } from '@rocicorp/zero';
|
|
3
|
-
export type
|
|
4
|
-
export declare function createZeroServer<Schema extends ZeroSchema, Models extends GenericModels, ServerActions extends Record<string, unknown>>({ createServerActions, database, schema, models,
|
|
3
|
+
export type SyncedQueries = Record<string, Record<string, SyncedQuery<any, any, any, any, any>>>;
|
|
4
|
+
export declare function createZeroServer<Schema extends ZeroSchema, Models extends GenericModels, ServerActions extends Record<string, unknown>, Queries extends SyncedQueries = Record<string, never>>({ createServerActions, database, schema, models, syncedQueries, }: {
|
|
5
5
|
/**
|
|
6
6
|
* The DB connection string, same as ZERO_UPSTREAM_DB
|
|
7
7
|
*/
|
|
@@ -9,7 +9,7 @@ export declare function createZeroServer<Schema extends ZeroSchema, Models exten
|
|
|
9
9
|
schema: Schema;
|
|
10
10
|
models: Models;
|
|
11
11
|
createServerActions: () => ServerActions;
|
|
12
|
-
|
|
12
|
+
syncedQueries?: Queries;
|
|
13
13
|
}): {
|
|
14
14
|
handleMutationRequest: ({ authData, request, skipAsyncTasks, }: {
|
|
15
15
|
authData: AuthData | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createZeroServer.d.ts","sourceRoot":"","sources":["../src/createZeroServer.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EACR,aAAa,EACb,eAAe,EACf,WAAW,EACZ,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EACV,aAAa,EACb,KAAK,EACL,iBAAiB,EACjB,WAAW,EACX,MAAM,IAAI,UAAU,EACrB,MAAM,gBAAgB,CAAA;AAIvB,MAAM,MAAM,aAAa,GAAG,MAAM,CAChC,MAAM,EACN,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CACrD,CAAA;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,SAAS,UAAU,EACzB,MAAM,SAAS,aAAa,EAC5B,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7C,EACA,mBAAmB,EACnB,QAAQ,EACR,MAAM,EACN,MAAM,EACN,aAAa,GACd,EAAE;IACD;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,mBAAmB,EAAE,MAAM,aAAa,CAAA;IACxC,aAAa,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"createZeroServer.d.ts","sourceRoot":"","sources":["../src/createZeroServer.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EACR,aAAa,EACb,eAAe,EACf,WAAW,EACZ,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EACV,aAAa,EACb,KAAK,EACL,iBAAiB,EACjB,WAAW,EACX,MAAM,IAAI,UAAU,EACrB,MAAM,gBAAgB,CAAA;AAIvB,MAAM,MAAM,aAAa,GAAG,MAAM,CAChC,MAAM,EACN,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CACrD,CAAA;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,SAAS,UAAU,EACzB,MAAM,SAAS,aAAa,EAC5B,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7C,OAAO,SAAS,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACrD,EACA,mBAAmB,EACnB,QAAQ,EACR,MAAM,EACN,MAAM,EACN,aAAa,GACd,EAAE;IACD;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,mBAAmB,EAAE,MAAM,aAAa,CAAA;IACxC,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;oEAuBI;QACD,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAA;QACzB,OAAO,EAAE,OAAO,CAAA;QAChB,cAAc,CAAC,EAAE,OAAO,CAAA;KACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iDAgDE;QACD,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAA;QACzB,OAAO,EAAE,OAAO,CAAA;KACjB;;;;;;;;;;;;;;;;;;;;;;;kBAiDC,EAAE,SAAS,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,GAAG,CAAC,EAC5C,OAAO,SAAS,EAAE,SAAS,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,SACrE,EAAE,KAAG,OAAO,CAAC,OAAO,CAAC;kBA7BvB,CAAC,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,aAC/D,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;YA2ChD,CAAC,MACV,CAAC,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,KACrD,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;EAqB7B"}
|