@sylphx/lens-server 4.0.0 → 4.0.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/dist/index.js +1 -1
- package/package.json +2 -2
- package/src/e2e/server.test.ts +12 -12
- package/src/handlers/http.test.ts +2 -2
- package/src/handlers/ws.test.ts +3 -3
- package/src/server/create.test.ts +34 -34
- package/src/server/create.ts +1 -1
package/dist/index.js
CHANGED
|
@@ -515,7 +515,7 @@ class LensServerImpl {
|
|
|
515
515
|
observer.complete?.();
|
|
516
516
|
return;
|
|
517
517
|
}
|
|
518
|
-
const publisher = subscriber({ input, ctx: context });
|
|
518
|
+
const publisher = subscriber({ args: input, ctx: context });
|
|
519
519
|
if (publisher) {
|
|
520
520
|
const emit = createEmit((command) => {
|
|
521
521
|
if (cancelled)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sylphx/lens-server",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.1",
|
|
4
4
|
"description": "Server runtime for Lens API framework",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"author": "SylphxAI",
|
|
31
31
|
"license": "MIT",
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@sylphx/lens-core": "^4.0.
|
|
33
|
+
"@sylphx/lens-core": "^4.0.2"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"typescript": "^5.9.3",
|
package/src/e2e/server.test.ts
CHANGED
|
@@ -68,7 +68,7 @@ describe("E2E - Basic Operations", () => {
|
|
|
68
68
|
|
|
69
69
|
it("query with input", async () => {
|
|
70
70
|
const getUser = query()
|
|
71
|
-
.
|
|
71
|
+
.args(z.object({ id: z.string() }))
|
|
72
72
|
.returns(User)
|
|
73
73
|
.resolve(({ args }) => {
|
|
74
74
|
const user = mockUsers.find((u) => u.id === args.id);
|
|
@@ -96,7 +96,7 @@ describe("E2E - Basic Operations", () => {
|
|
|
96
96
|
|
|
97
97
|
it("mutation", async () => {
|
|
98
98
|
const createUser = mutation()
|
|
99
|
-
.
|
|
99
|
+
.args(z.object({ name: z.string(), email: z.string() }))
|
|
100
100
|
.returns(User)
|
|
101
101
|
.resolve(({ args }) => ({
|
|
102
102
|
id: "user-new",
|
|
@@ -130,7 +130,7 @@ describe("E2E - Basic Operations", () => {
|
|
|
130
130
|
|
|
131
131
|
it("handles query errors", async () => {
|
|
132
132
|
const failingQuery = query()
|
|
133
|
-
.
|
|
133
|
+
.args(z.object({ id: z.string() }))
|
|
134
134
|
.resolve(() => {
|
|
135
135
|
throw new Error("Query failed");
|
|
136
136
|
});
|
|
@@ -178,7 +178,7 @@ describe("E2E - Context", () => {
|
|
|
178
178
|
let capturedContext: unknown = null;
|
|
179
179
|
|
|
180
180
|
const getUser = query()
|
|
181
|
-
.
|
|
181
|
+
.args(z.object({ id: z.string() }))
|
|
182
182
|
.resolve(({ ctx }) => {
|
|
183
183
|
capturedContext = ctx;
|
|
184
184
|
return mockUsers[0];
|
|
@@ -206,7 +206,7 @@ describe("E2E - Context", () => {
|
|
|
206
206
|
let capturedContext: unknown = null;
|
|
207
207
|
|
|
208
208
|
const getUser = query()
|
|
209
|
-
.
|
|
209
|
+
.args(z.object({ id: z.string() }))
|
|
210
210
|
.resolve(({ ctx }) => {
|
|
211
211
|
capturedContext = ctx;
|
|
212
212
|
return mockUsers[0];
|
|
@@ -240,7 +240,7 @@ describe("E2E - Context", () => {
|
|
|
240
240
|
describe("E2E - Selection", () => {
|
|
241
241
|
it("applies $select to filter fields", async () => {
|
|
242
242
|
const getUser = query()
|
|
243
|
-
.
|
|
243
|
+
.args(z.object({ id: z.string() }))
|
|
244
244
|
.returns(User)
|
|
245
245
|
.resolve(({ args }) => {
|
|
246
246
|
const user = mockUsers.find((u) => u.id === args.id);
|
|
@@ -278,7 +278,7 @@ describe("E2E - Selection", () => {
|
|
|
278
278
|
|
|
279
279
|
it("includes id by default in selection", async () => {
|
|
280
280
|
const getUser = query()
|
|
281
|
-
.
|
|
281
|
+
.args(z.object({ id: z.string() }))
|
|
282
282
|
.returns(User)
|
|
283
283
|
.resolve(({ args }) => mockUsers.find((u) => u.id === args.id)!);
|
|
284
284
|
|
|
@@ -340,7 +340,7 @@ describe("E2E - Entity Resolvers", () => {
|
|
|
340
340
|
}));
|
|
341
341
|
|
|
342
342
|
const getUser = query()
|
|
343
|
-
.
|
|
343
|
+
.args(z.object({ id: z.string() }))
|
|
344
344
|
.returns(UserWithPosts)
|
|
345
345
|
.resolve(({ args }) => {
|
|
346
346
|
const user = users.find((u) => u.id === args.id);
|
|
@@ -460,12 +460,12 @@ describe("E2E - Entity Resolvers", () => {
|
|
|
460
460
|
describe("E2E - Metadata", () => {
|
|
461
461
|
it("returns correct metadata structure", () => {
|
|
462
462
|
const getUser = query()
|
|
463
|
-
.
|
|
463
|
+
.args(z.object({ id: z.string() }))
|
|
464
464
|
.returns(User)
|
|
465
465
|
.resolve(({ args }) => mockUsers.find((u) => u.id === args.id)!);
|
|
466
466
|
|
|
467
467
|
const createUser = mutation()
|
|
468
|
-
.
|
|
468
|
+
.args(z.object({ name: z.string() }))
|
|
469
469
|
.returns(User)
|
|
470
470
|
.resolve(({ args }) => ({ id: "new", name: args.name, email: "", status: "" }));
|
|
471
471
|
|
|
@@ -489,12 +489,12 @@ describe("E2E - Metadata", () => {
|
|
|
489
489
|
|
|
490
490
|
it("auto-derives optimistic hints from naming with plugin", () => {
|
|
491
491
|
const updateUser = mutation()
|
|
492
|
-
.
|
|
492
|
+
.args(z.object({ id: z.string(), name: z.string() }))
|
|
493
493
|
.returns(User)
|
|
494
494
|
.resolve(({ args }) => ({ ...mockUsers[0], name: args.name }));
|
|
495
495
|
|
|
496
496
|
const deleteUser = mutation()
|
|
497
|
-
.
|
|
497
|
+
.args(z.object({ id: z.string() }))
|
|
498
498
|
.resolve(() => ({ success: true }));
|
|
499
499
|
|
|
500
500
|
const server = createApp({
|
|
@@ -13,14 +13,14 @@ import { createHTTPHandler } from "./http.js";
|
|
|
13
13
|
// =============================================================================
|
|
14
14
|
|
|
15
15
|
const getUser = query()
|
|
16
|
-
.
|
|
16
|
+
.args(z.object({ id: z.string() }))
|
|
17
17
|
.resolve(({ args }) => ({
|
|
18
18
|
id: args.id,
|
|
19
19
|
name: "Test User",
|
|
20
20
|
}));
|
|
21
21
|
|
|
22
22
|
const createUser = mutation()
|
|
23
|
-
.
|
|
23
|
+
.args(z.object({ name: z.string() }))
|
|
24
24
|
.resolve(({ args }) => ({
|
|
25
25
|
id: "new-id",
|
|
26
26
|
name: args.name,
|
package/src/handlers/ws.test.ts
CHANGED
|
@@ -55,7 +55,7 @@ function wait(ms = 10): Promise<void> {
|
|
|
55
55
|
// =============================================================================
|
|
56
56
|
|
|
57
57
|
const getUser = query()
|
|
58
|
-
.
|
|
58
|
+
.args(z.object({ id: z.string() }))
|
|
59
59
|
.resolve(({ args }) => ({
|
|
60
60
|
id: args.id,
|
|
61
61
|
name: "Test User",
|
|
@@ -68,7 +68,7 @@ const listUsers = query().resolve(() => [
|
|
|
68
68
|
]);
|
|
69
69
|
|
|
70
70
|
const createUser = mutation()
|
|
71
|
-
.
|
|
71
|
+
.args(z.object({ name: z.string() }))
|
|
72
72
|
.resolve(({ args }) => ({
|
|
73
73
|
id: "new-id",
|
|
74
74
|
name: args.name,
|
|
@@ -76,7 +76,7 @@ const createUser = mutation()
|
|
|
76
76
|
}));
|
|
77
77
|
|
|
78
78
|
const slowQuery = query()
|
|
79
|
-
.
|
|
79
|
+
.args(z.object({ delay: z.number() }))
|
|
80
80
|
.resolve(async ({ args }) => {
|
|
81
81
|
await new Promise((r) => setTimeout(r, args.delay));
|
|
82
82
|
return { done: true };
|
|
@@ -91,7 +91,7 @@ const User = model("User", {
|
|
|
91
91
|
// =============================================================================
|
|
92
92
|
|
|
93
93
|
const getUser = query()
|
|
94
|
-
.
|
|
94
|
+
.args(z.object({ id: z.string() }))
|
|
95
95
|
.returns(User)
|
|
96
96
|
.resolve(({ args }) => ({
|
|
97
97
|
id: args.id,
|
|
@@ -105,7 +105,7 @@ const getUsers = query().resolve(() => [
|
|
|
105
105
|
]);
|
|
106
106
|
|
|
107
107
|
const createUser = mutation()
|
|
108
|
-
.
|
|
108
|
+
.args(z.object({ name: z.string(), email: z.string().optional() }))
|
|
109
109
|
.returns(User)
|
|
110
110
|
.resolve(({ args }) => ({
|
|
111
111
|
id: "new-id",
|
|
@@ -114,7 +114,7 @@ const createUser = mutation()
|
|
|
114
114
|
}));
|
|
115
115
|
|
|
116
116
|
const updateUser = mutation()
|
|
117
|
-
.
|
|
117
|
+
.args(z.object({ id: z.string(), name: z.string().optional() }))
|
|
118
118
|
.returns(User)
|
|
119
119
|
.resolve(({ args }) => ({
|
|
120
120
|
id: args.id,
|
|
@@ -122,7 +122,7 @@ const updateUser = mutation()
|
|
|
122
122
|
}));
|
|
123
123
|
|
|
124
124
|
const deleteUser = mutation()
|
|
125
|
-
.
|
|
125
|
+
.args(z.object({ id: z.string() }))
|
|
126
126
|
.resolve(() => ({ success: true }));
|
|
127
127
|
|
|
128
128
|
// =============================================================================
|
|
@@ -374,7 +374,7 @@ describe("execute", () => {
|
|
|
374
374
|
|
|
375
375
|
it("handles resolver errors gracefully", async () => {
|
|
376
376
|
const errorQuery = query()
|
|
377
|
-
.
|
|
377
|
+
.args(z.object({ id: z.string() }))
|
|
378
378
|
.resolve(() => {
|
|
379
379
|
throw new Error("Resolver error");
|
|
380
380
|
});
|
|
@@ -423,7 +423,7 @@ describe("context", () => {
|
|
|
423
423
|
let capturedContext: unknown = null;
|
|
424
424
|
|
|
425
425
|
const contextQuery = query()
|
|
426
|
-
.
|
|
426
|
+
.args(z.object({ id: z.string() }))
|
|
427
427
|
.resolve(({ ctx }) => {
|
|
428
428
|
capturedContext = ctx;
|
|
429
429
|
return { id: "1", name: "test" };
|
|
@@ -451,7 +451,7 @@ describe("context", () => {
|
|
|
451
451
|
let capturedContext: unknown = null;
|
|
452
452
|
|
|
453
453
|
const contextQuery = query()
|
|
454
|
-
.
|
|
454
|
+
.args(z.object({ id: z.string() }))
|
|
455
455
|
.resolve(({ ctx }) => {
|
|
456
456
|
capturedContext = ctx;
|
|
457
457
|
return { id: "1", name: "test" };
|
|
@@ -590,7 +590,7 @@ describe("field resolvers", () => {
|
|
|
590
590
|
}));
|
|
591
591
|
|
|
592
592
|
const getAuthor = query<TestContext>()
|
|
593
|
-
.
|
|
593
|
+
.args(z.object({ id: z.string() }))
|
|
594
594
|
.returns(Author)
|
|
595
595
|
.resolve(({ args, ctx }) => {
|
|
596
596
|
const author = ctx.db.authors.find((a) => a.id === args.id);
|
|
@@ -649,7 +649,7 @@ describe("field resolvers", () => {
|
|
|
649
649
|
}));
|
|
650
650
|
|
|
651
651
|
const getAuthor = query<TestContext>()
|
|
652
|
-
.
|
|
652
|
+
.args(z.object({ id: z.string() }))
|
|
653
653
|
.returns(Author)
|
|
654
654
|
.resolve(({ args, ctx }) => {
|
|
655
655
|
const author = ctx.db.authors.find((a) => a.id === args.id);
|
|
@@ -743,7 +743,7 @@ describe("field resolvers", () => {
|
|
|
743
743
|
}));
|
|
744
744
|
|
|
745
745
|
const getAuthor = query<CtxWithComments>()
|
|
746
|
-
.
|
|
746
|
+
.args(z.object({ id: z.string() }))
|
|
747
747
|
.returns(LocalAuthor)
|
|
748
748
|
.resolve(({ args, ctx }) => {
|
|
749
749
|
const author = ctx.db.authors.find((a) => a.id === args.id);
|
|
@@ -799,7 +799,7 @@ describe("field resolvers", () => {
|
|
|
799
799
|
}));
|
|
800
800
|
|
|
801
801
|
const getAuthor = query<TestContext>()
|
|
802
|
-
.
|
|
802
|
+
.args(z.object({ id: z.string() }))
|
|
803
803
|
.returns(Author)
|
|
804
804
|
.resolve(({ args, ctx }) => {
|
|
805
805
|
const author = ctx.db.authors.find((a) => a.id === args.id);
|
|
@@ -872,7 +872,7 @@ describe("field resolvers", () => {
|
|
|
872
872
|
|
|
873
873
|
// Use .resolve().subscribe() pattern - emit comes through Publisher callback, NOT ctx
|
|
874
874
|
const getAuthor = query<{ db: typeof mockDb }>()
|
|
875
|
-
.
|
|
875
|
+
.args(z.object({ id: z.string() }))
|
|
876
876
|
.returns(Author)
|
|
877
877
|
.resolve(({ args, ctx }) => {
|
|
878
878
|
const author = ctx.db.authors.find((a) => a.id === args.id);
|
|
@@ -981,7 +981,7 @@ describe("field resolvers", () => {
|
|
|
981
981
|
}));
|
|
982
982
|
|
|
983
983
|
const getAuthor = query<{ db: typeof mockDb }>()
|
|
984
|
-
.
|
|
984
|
+
.args(z.object({ id: z.string() }))
|
|
985
985
|
.returns(Author)
|
|
986
986
|
.resolve(({ args, ctx }) => {
|
|
987
987
|
const author = ctx.db.authors.find((a) => a.id === args.id);
|
|
@@ -1070,7 +1070,7 @@ describe("field resolvers", () => {
|
|
|
1070
1070
|
}));
|
|
1071
1071
|
|
|
1072
1072
|
const getAuthor = query<{ db: typeof mockDb }>()
|
|
1073
|
-
.
|
|
1073
|
+
.args(z.object({ id: z.string() }))
|
|
1074
1074
|
.returns(Author)
|
|
1075
1075
|
.resolve(({ args, ctx }) => {
|
|
1076
1076
|
const author = ctx.db.authors.find((a) => a.id === args.id);
|
|
@@ -1146,7 +1146,7 @@ describe("field resolvers", () => {
|
|
|
1146
1146
|
|
|
1147
1147
|
// Use .resolve().subscribe() pattern - emit comes through Publisher callback
|
|
1148
1148
|
const liveQuery = query()
|
|
1149
|
-
.
|
|
1149
|
+
.args(z.object({ id: z.string() }))
|
|
1150
1150
|
.returns(User)
|
|
1151
1151
|
.resolve(({ args }) => {
|
|
1152
1152
|
return { id: args.id, name: "Initial" };
|
|
@@ -1244,7 +1244,7 @@ describe("field resolvers", () => {
|
|
|
1244
1244
|
}));
|
|
1245
1245
|
|
|
1246
1246
|
const getAuthor = query<{ db: typeof mockDb }>()
|
|
1247
|
-
.
|
|
1247
|
+
.args(z.object({ id: z.string() }))
|
|
1248
1248
|
.returns(Author)
|
|
1249
1249
|
.resolve(({ args, ctx }) => {
|
|
1250
1250
|
const author = ctx.db.authors.find((a) => a.id === args.id);
|
|
@@ -1324,7 +1324,7 @@ describe("field resolvers", () => {
|
|
|
1324
1324
|
describe("observable behavior", () => {
|
|
1325
1325
|
it("delivers initial result immediately for queries", async () => {
|
|
1326
1326
|
const simpleQuery = query()
|
|
1327
|
-
.
|
|
1327
|
+
.args(z.object({ id: z.string() }))
|
|
1328
1328
|
.resolve(({ args }) => ({ id: args.id, name: "Test" }));
|
|
1329
1329
|
|
|
1330
1330
|
const server = createApp({ queries: { simpleQuery } });
|
|
@@ -1348,7 +1348,7 @@ describe("observable behavior", () => {
|
|
|
1348
1348
|
|
|
1349
1349
|
// Use .resolve().subscribe() pattern - emit comes through Publisher callback
|
|
1350
1350
|
const liveQuery = query()
|
|
1351
|
-
.
|
|
1351
|
+
.args(z.object({ id: z.string() }))
|
|
1352
1352
|
.resolve(({ args }) => {
|
|
1353
1353
|
return { id: args.id, name: "Initial" };
|
|
1354
1354
|
})
|
|
@@ -1381,7 +1381,7 @@ describe("observable behavior", () => {
|
|
|
1381
1381
|
|
|
1382
1382
|
it("delivers mutation result via observable", async () => {
|
|
1383
1383
|
const testMutation = mutation()
|
|
1384
|
-
.
|
|
1384
|
+
.args(z.object({ name: z.string() }))
|
|
1385
1385
|
.resolve(({ args }) => ({ id: "new", name: args.name }));
|
|
1386
1386
|
|
|
1387
1387
|
const server = createApp({ mutations: { testMutation } });
|
|
@@ -1403,7 +1403,7 @@ describe("observable behavior", () => {
|
|
|
1403
1403
|
let resolverCalls = 0;
|
|
1404
1404
|
|
|
1405
1405
|
const simpleQuery = query()
|
|
1406
|
-
.
|
|
1406
|
+
.args(z.object({ id: z.string() }))
|
|
1407
1407
|
.resolve(({ args }) => {
|
|
1408
1408
|
resolverCalls++;
|
|
1409
1409
|
return { id: args.id };
|
|
@@ -1438,7 +1438,7 @@ describe("emit backpressure", () => {
|
|
|
1438
1438
|
|
|
1439
1439
|
// Use .resolve().subscribe() pattern - emit comes through Publisher callback
|
|
1440
1440
|
const liveQuery = query()
|
|
1441
|
-
.
|
|
1441
|
+
.args(z.object({ id: z.string() }))
|
|
1442
1442
|
.resolve(({ args }) => {
|
|
1443
1443
|
return { id: args.id, count: 0 };
|
|
1444
1444
|
})
|
|
@@ -1485,7 +1485,7 @@ describe("emit backpressure", () => {
|
|
|
1485
1485
|
describe("observable error handling", () => {
|
|
1486
1486
|
it("propagates resolver errors to observer", async () => {
|
|
1487
1487
|
const errorQuery = query()
|
|
1488
|
-
.
|
|
1488
|
+
.args(z.object({ id: z.string() }))
|
|
1489
1489
|
.resolve(() => {
|
|
1490
1490
|
throw new Error("Test error");
|
|
1491
1491
|
});
|
|
@@ -1507,7 +1507,7 @@ describe("observable error handling", () => {
|
|
|
1507
1507
|
|
|
1508
1508
|
it("handles async resolver errors", async () => {
|
|
1509
1509
|
const asyncErrorQuery = query()
|
|
1510
|
-
.
|
|
1510
|
+
.args(z.object({ id: z.string() }))
|
|
1511
1511
|
.resolve(async () => {
|
|
1512
1512
|
await new Promise((r) => setTimeout(r, 10));
|
|
1513
1513
|
throw new Error("Async error");
|
|
@@ -1546,7 +1546,7 @@ describe("operation-level .resolve().subscribe() (LiveQueryDef)", () => {
|
|
|
1546
1546
|
let capturedOnCleanup: ((fn: () => void) => void) | undefined;
|
|
1547
1547
|
|
|
1548
1548
|
const liveUser = query()
|
|
1549
|
-
.
|
|
1549
|
+
.args(z.object({ id: z.string() }))
|
|
1550
1550
|
.resolve(({ args }) => ({ id: args.id, name: "Initial" }))
|
|
1551
1551
|
.subscribe(({ args: _args }) => ({ emit, onCleanup }) => {
|
|
1552
1552
|
subscriberCalled = true;
|
|
@@ -1586,7 +1586,7 @@ describe("operation-level .resolve().subscribe() (LiveQueryDef)", () => {
|
|
|
1586
1586
|
let capturedEmit: ((value: { id: string; name: string }) => void) | undefined;
|
|
1587
1587
|
|
|
1588
1588
|
const liveUser = query()
|
|
1589
|
-
.
|
|
1589
|
+
.args(z.object({ id: z.string() }))
|
|
1590
1590
|
.resolve(({ args }) => ({ id: args.id, name: "Initial" }))
|
|
1591
1591
|
.subscribe(() => ({ emit }) => {
|
|
1592
1592
|
capturedEmit = emit;
|
|
@@ -1635,7 +1635,7 @@ describe("operation-level .resolve().subscribe() (LiveQueryDef)", () => {
|
|
|
1635
1635
|
let cleanupCalled = false;
|
|
1636
1636
|
|
|
1637
1637
|
const liveUser = query()
|
|
1638
|
-
.
|
|
1638
|
+
.args(z.object({ id: z.string() }))
|
|
1639
1639
|
.resolve(({ args }) => ({ id: args.id, name: "Initial" }))
|
|
1640
1640
|
.subscribe(() => ({ onCleanup }) => {
|
|
1641
1641
|
onCleanup(() => {
|
|
@@ -1672,7 +1672,7 @@ describe("operation-level .resolve().subscribe() (LiveQueryDef)", () => {
|
|
|
1672
1672
|
let receivedCtx: TestContext | undefined;
|
|
1673
1673
|
|
|
1674
1674
|
const liveUser = query<TestContext>()
|
|
1675
|
-
.
|
|
1675
|
+
.args(z.object({ id: z.string() }))
|
|
1676
1676
|
.resolve(({ args }) => ({ id: args.id, name: "Initial" }))
|
|
1677
1677
|
.subscribe(({ args, ctx }) => ({ emit: _emit }) => {
|
|
1678
1678
|
receivedInput = args;
|
|
@@ -1702,7 +1702,7 @@ describe("operation-level .resolve().subscribe() (LiveQueryDef)", () => {
|
|
|
1702
1702
|
|
|
1703
1703
|
it("handles subscriber errors gracefully", async () => {
|
|
1704
1704
|
const liveUser = query()
|
|
1705
|
-
.
|
|
1705
|
+
.args(z.object({ id: z.string() }))
|
|
1706
1706
|
.resolve(({ args }) => ({ id: args.id, name: "Initial" }))
|
|
1707
1707
|
.subscribe(() => () => {
|
|
1708
1708
|
throw new Error("Subscriber error");
|
|
@@ -1745,7 +1745,7 @@ describe("operation-level .resolve().subscribe() (LiveQueryDef)", () => {
|
|
|
1745
1745
|
let capturedEmit: ((value: { id: string; count: number }) => void) | undefined;
|
|
1746
1746
|
|
|
1747
1747
|
const liveCounter = query()
|
|
1748
|
-
.
|
|
1748
|
+
.args(z.object({ id: z.string() }))
|
|
1749
1749
|
.resolve(({ args }) => ({ id: args.id, count: 0 }))
|
|
1750
1750
|
.subscribe(() => ({ emit }) => {
|
|
1751
1751
|
capturedEmit = emit;
|
|
@@ -1797,7 +1797,7 @@ describe("operation-level .resolve().subscribe() (LiveQueryDef)", () => {
|
|
|
1797
1797
|
let capturedEmit: EmitFn | undefined;
|
|
1798
1798
|
|
|
1799
1799
|
const liveUser = query()
|
|
1800
|
-
.
|
|
1800
|
+
.args(z.object({ id: z.string() }))
|
|
1801
1801
|
.resolve(({ args }) => ({ id: args.id, name: "Initial", status: "offline" }))
|
|
1802
1802
|
.subscribe(() => ({ emit }) => {
|
|
1803
1803
|
capturedEmit = emit as EmitFn;
|
|
@@ -1844,7 +1844,7 @@ describe("operation-level .resolve().subscribe() (LiveQueryDef)", () => {
|
|
|
1844
1844
|
let capturedEmit: ((value: { id: string; name: string }) => void) | undefined;
|
|
1845
1845
|
|
|
1846
1846
|
const liveUser = query()
|
|
1847
|
-
.
|
|
1847
|
+
.args(z.object({ id: z.string() }))
|
|
1848
1848
|
.resolve(({ args }) => ({ id: args.id, name: "Initial" }))
|
|
1849
1849
|
.subscribe(() => ({ emit }) => {
|
|
1850
1850
|
capturedEmit = emit;
|
|
@@ -1892,7 +1892,7 @@ describe("operation-level .resolve().subscribe() (LiveQueryDef)", () => {
|
|
|
1892
1892
|
const emits: Array<(value: { id: string; name: string }) => void> = [];
|
|
1893
1893
|
|
|
1894
1894
|
const liveUser = query()
|
|
1895
|
-
.
|
|
1895
|
+
.args(z.object({ id: z.string() }))
|
|
1896
1896
|
.resolve(({ args }) => ({ id: args.id, name: "Initial" }))
|
|
1897
1897
|
.subscribe(() => ({ emit }) => {
|
|
1898
1898
|
subscriberCallCount++;
|
|
@@ -1967,7 +1967,7 @@ describe("scalar field subscription with emit.delta()", () => {
|
|
|
1967
1967
|
entities: { UserWithBio },
|
|
1968
1968
|
queries: {
|
|
1969
1969
|
getUserWithBio: query()
|
|
1970
|
-
.
|
|
1970
|
+
.args(z.object({ id: z.string() }))
|
|
1971
1971
|
.returns(UserWithBio)
|
|
1972
1972
|
.resolve(({ args }) => ({ id: args.id, name: "Alice" })),
|
|
1973
1973
|
},
|
|
@@ -2030,7 +2030,7 @@ describe("scalar field subscription with emit.delta()", () => {
|
|
|
2030
2030
|
entities: { UserWithContent },
|
|
2031
2031
|
queries: {
|
|
2032
2032
|
getUserWithContent: query()
|
|
2033
|
-
.
|
|
2033
|
+
.args(z.object({ id: z.string() }))
|
|
2034
2034
|
.returns(UserWithContent)
|
|
2035
2035
|
.resolve(({ args }) => ({ id: args.id, name: "Alice" })),
|
|
2036
2036
|
},
|
package/src/server/create.ts
CHANGED
|
@@ -420,7 +420,7 @@ class LensServerImpl<
|
|
|
420
420
|
}
|
|
421
421
|
|
|
422
422
|
// Get the publisher function
|
|
423
|
-
const publisher = subscriber({ input, ctx: context });
|
|
423
|
+
const publisher = subscriber({ args: input, ctx: context });
|
|
424
424
|
|
|
425
425
|
// Call publisher with emit/onCleanup callbacks
|
|
426
426
|
if (publisher) {
|