@rayfold/conformance 0.1.0

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.
@@ -0,0 +1,605 @@
1
+ {
2
+ "name": "Interfaces and type conditions (spec 01 s2.1, spec 02 s1)",
3
+ "schema": "\nobject Named @interface { id: ID name: String }\nentity Person implements Named { id: ID name: String email: String }\nentity Bot implements Named { id: ID name: String model: String }\nentity Note { id: ID body: String author: Named }\nquery note(id: ID): Note?\nquery named: [Named]\n",
4
+ "ir": {
5
+ "rayfold": "0.1",
6
+ "types": {
7
+ "ID": {
8
+ "kind": "scalar",
9
+ "name": "ID",
10
+ "annotations": [],
11
+ "builtin": true
12
+ },
13
+ "String": {
14
+ "kind": "scalar",
15
+ "name": "String",
16
+ "annotations": [],
17
+ "builtin": true
18
+ },
19
+ "Int": {
20
+ "kind": "scalar",
21
+ "name": "Int",
22
+ "annotations": [],
23
+ "builtin": true
24
+ },
25
+ "Long": {
26
+ "kind": "scalar",
27
+ "name": "Long",
28
+ "annotations": [],
29
+ "builtin": true
30
+ },
31
+ "Float": {
32
+ "kind": "scalar",
33
+ "name": "Float",
34
+ "annotations": [],
35
+ "builtin": true
36
+ },
37
+ "Boolean": {
38
+ "kind": "scalar",
39
+ "name": "Boolean",
40
+ "annotations": [],
41
+ "builtin": true
42
+ },
43
+ "Decimal": {
44
+ "kind": "scalar",
45
+ "name": "Decimal",
46
+ "annotations": [],
47
+ "builtin": true
48
+ },
49
+ "Instant": {
50
+ "kind": "scalar",
51
+ "name": "Instant",
52
+ "annotations": [],
53
+ "builtin": true
54
+ },
55
+ "Date": {
56
+ "kind": "scalar",
57
+ "name": "Date",
58
+ "annotations": [],
59
+ "builtin": true
60
+ },
61
+ "Duration": {
62
+ "kind": "scalar",
63
+ "name": "Duration",
64
+ "annotations": [],
65
+ "builtin": true
66
+ },
67
+ "Bytes": {
68
+ "kind": "scalar",
69
+ "name": "Bytes",
70
+ "annotations": [],
71
+ "builtin": true
72
+ },
73
+ "JSON": {
74
+ "kind": "scalar",
75
+ "name": "JSON",
76
+ "annotations": [],
77
+ "builtin": true
78
+ },
79
+ "Page": {
80
+ "kind": "object",
81
+ "name": "Page",
82
+ "builtin": true,
83
+ "typeParams": [
84
+ "T"
85
+ ],
86
+ "annotations": [],
87
+ "fields": [
88
+ {
89
+ "name": "items",
90
+ "type": {
91
+ "kind": "list",
92
+ "of": {
93
+ "kind": "named",
94
+ "name": "T",
95
+ "nullable": false
96
+ },
97
+ "nullable": false
98
+ },
99
+ "args": [],
100
+ "annotations": [],
101
+ "ordinal": 1
102
+ },
103
+ {
104
+ "name": "cursor",
105
+ "type": {
106
+ "kind": "named",
107
+ "name": "String",
108
+ "nullable": true
109
+ },
110
+ "args": [],
111
+ "annotations": [],
112
+ "ordinal": 2
113
+ },
114
+ {
115
+ "name": "hasMore",
116
+ "type": {
117
+ "kind": "named",
118
+ "name": "Boolean",
119
+ "nullable": false
120
+ },
121
+ "args": [],
122
+ "annotations": [],
123
+ "ordinal": 3
124
+ },
125
+ {
126
+ "name": "total",
127
+ "type": {
128
+ "kind": "named",
129
+ "name": "Int",
130
+ "nullable": true
131
+ },
132
+ "args": [],
133
+ "annotations": [],
134
+ "ordinal": 4
135
+ }
136
+ ]
137
+ },
138
+ "PageArgs": {
139
+ "kind": "input",
140
+ "name": "PageArgs",
141
+ "builtin": true,
142
+ "annotations": [],
143
+ "fields": [
144
+ {
145
+ "name": "first",
146
+ "type": {
147
+ "kind": "named",
148
+ "name": "Int",
149
+ "nullable": false
150
+ },
151
+ "args": [],
152
+ "default": 20,
153
+ "annotations": [],
154
+ "ordinal": 1
155
+ },
156
+ {
157
+ "name": "after",
158
+ "type": {
159
+ "kind": "named",
160
+ "name": "String",
161
+ "nullable": true
162
+ },
163
+ "args": [],
164
+ "annotations": [],
165
+ "ordinal": 2
166
+ },
167
+ {
168
+ "name": "offset",
169
+ "type": {
170
+ "kind": "named",
171
+ "name": "Int",
172
+ "nullable": true
173
+ },
174
+ "args": [],
175
+ "annotations": [],
176
+ "ordinal": 3
177
+ }
178
+ ]
179
+ },
180
+ "Named": {
181
+ "kind": "object",
182
+ "name": "Named",
183
+ "annotations": [
184
+ {
185
+ "name": "interface",
186
+ "args": {}
187
+ }
188
+ ],
189
+ "fields": [
190
+ {
191
+ "name": "id",
192
+ "type": {
193
+ "kind": "named",
194
+ "name": "ID",
195
+ "nullable": false
196
+ },
197
+ "args": [],
198
+ "annotations": [],
199
+ "ordinal": 1
200
+ },
201
+ {
202
+ "name": "name",
203
+ "type": {
204
+ "kind": "named",
205
+ "name": "String",
206
+ "nullable": false
207
+ },
208
+ "args": [],
209
+ "annotations": [],
210
+ "ordinal": 2
211
+ }
212
+ ],
213
+ "interface": true
214
+ },
215
+ "Person": {
216
+ "kind": "entity",
217
+ "name": "Person",
218
+ "annotations": [],
219
+ "fields": [
220
+ {
221
+ "name": "id",
222
+ "type": {
223
+ "kind": "named",
224
+ "name": "ID",
225
+ "nullable": false
226
+ },
227
+ "args": [],
228
+ "annotations": [],
229
+ "ordinal": 1
230
+ },
231
+ {
232
+ "name": "name",
233
+ "type": {
234
+ "kind": "named",
235
+ "name": "String",
236
+ "nullable": false
237
+ },
238
+ "args": [],
239
+ "annotations": [],
240
+ "ordinal": 2
241
+ },
242
+ {
243
+ "name": "email",
244
+ "type": {
245
+ "kind": "named",
246
+ "name": "String",
247
+ "nullable": false
248
+ },
249
+ "args": [],
250
+ "annotations": [],
251
+ "ordinal": 3
252
+ }
253
+ ],
254
+ "implements": [
255
+ "Named"
256
+ ]
257
+ },
258
+ "Bot": {
259
+ "kind": "entity",
260
+ "name": "Bot",
261
+ "annotations": [],
262
+ "fields": [
263
+ {
264
+ "name": "id",
265
+ "type": {
266
+ "kind": "named",
267
+ "name": "ID",
268
+ "nullable": false
269
+ },
270
+ "args": [],
271
+ "annotations": [],
272
+ "ordinal": 1
273
+ },
274
+ {
275
+ "name": "name",
276
+ "type": {
277
+ "kind": "named",
278
+ "name": "String",
279
+ "nullable": false
280
+ },
281
+ "args": [],
282
+ "annotations": [],
283
+ "ordinal": 2
284
+ },
285
+ {
286
+ "name": "model",
287
+ "type": {
288
+ "kind": "named",
289
+ "name": "String",
290
+ "nullable": false
291
+ },
292
+ "args": [],
293
+ "annotations": [],
294
+ "ordinal": 3
295
+ }
296
+ ],
297
+ "implements": [
298
+ "Named"
299
+ ]
300
+ },
301
+ "Note": {
302
+ "kind": "entity",
303
+ "name": "Note",
304
+ "annotations": [],
305
+ "fields": [
306
+ {
307
+ "name": "id",
308
+ "type": {
309
+ "kind": "named",
310
+ "name": "ID",
311
+ "nullable": false
312
+ },
313
+ "args": [],
314
+ "annotations": [],
315
+ "ordinal": 1
316
+ },
317
+ {
318
+ "name": "body",
319
+ "type": {
320
+ "kind": "named",
321
+ "name": "String",
322
+ "nullable": false
323
+ },
324
+ "args": [],
325
+ "annotations": [],
326
+ "ordinal": 2
327
+ },
328
+ {
329
+ "name": "author",
330
+ "type": {
331
+ "kind": "named",
332
+ "name": "Named",
333
+ "nullable": false
334
+ },
335
+ "args": [],
336
+ "annotations": [],
337
+ "ordinal": 3
338
+ }
339
+ ],
340
+ "implements": []
341
+ }
342
+ },
343
+ "ops": {
344
+ "note": {
345
+ "kind": "query",
346
+ "name": "note",
347
+ "args": [
348
+ {
349
+ "name": "id",
350
+ "type": {
351
+ "kind": "named",
352
+ "name": "ID",
353
+ "nullable": false
354
+ },
355
+ "annotations": []
356
+ }
357
+ ],
358
+ "returns": {
359
+ "kind": "named",
360
+ "name": "Note",
361
+ "nullable": true
362
+ },
363
+ "throws": [],
364
+ "emits": [],
365
+ "annotations": []
366
+ },
367
+ "named": {
368
+ "kind": "query",
369
+ "name": "named",
370
+ "args": [],
371
+ "returns": {
372
+ "kind": "list",
373
+ "of": {
374
+ "kind": "named",
375
+ "name": "Named",
376
+ "nullable": false
377
+ },
378
+ "nullable": false
379
+ },
380
+ "throws": [],
381
+ "emits": [],
382
+ "annotations": []
383
+ }
384
+ },
385
+ "views": {}
386
+ },
387
+ "data": {
388
+ "Note": [
389
+ {
390
+ "id": "n1",
391
+ "body": "B1",
392
+ "authorId": "p1"
393
+ },
394
+ {
395
+ "id": "n2",
396
+ "body": "B2",
397
+ "authorId": "bot1"
398
+ }
399
+ ],
400
+ "Named": [
401
+ {
402
+ "$type": "Person",
403
+ "id": "p1",
404
+ "name": "Ada",
405
+ "email": "ada@x.dev"
406
+ },
407
+ {
408
+ "$type": "Bot",
409
+ "id": "bot1",
410
+ "name": "Helper",
411
+ "model": "m5"
412
+ }
413
+ ]
414
+ },
415
+ "resolvers": {
416
+ "Query": {
417
+ "note": {
418
+ "from": "Note",
419
+ "where": {
420
+ "id": "$args.id"
421
+ },
422
+ "mode": "one"
423
+ },
424
+ "named": {
425
+ "from": "Named",
426
+ "mode": "list"
427
+ }
428
+ },
429
+ "fields": {
430
+ "Note": {
431
+ "author": {
432
+ "from": "Named",
433
+ "key": "authorId",
434
+ "match": "id",
435
+ "mode": "one"
436
+ }
437
+ }
438
+ }
439
+ },
440
+ "cases": [
441
+ {
442
+ "name": "...on selects per concrete type at an interface field, and $type names it",
443
+ "request": {
444
+ "ops": [
445
+ {
446
+ "id": 1,
447
+ "op": "note",
448
+ "args": {
449
+ "id": "n1"
450
+ },
451
+ "shape": "{ id author { name ...on Person { email } ...on Bot { model } } }"
452
+ }
453
+ ]
454
+ },
455
+ "frames": [
456
+ {
457
+ "id": 1,
458
+ "data": {
459
+ "$type": "Note",
460
+ "id": "n1",
461
+ "author": {
462
+ "$type": "Person",
463
+ "name": "Ada",
464
+ "email": "ada@x.dev"
465
+ }
466
+ },
467
+ "meta": {
468
+ "cost": 2
469
+ },
470
+ "fin": true
471
+ }
472
+ ]
473
+ },
474
+ {
475
+ "name": "the same shape on the other implementor selects that type's fields",
476
+ "request": {
477
+ "ops": [
478
+ {
479
+ "id": 1,
480
+ "op": "note",
481
+ "args": {
482
+ "id": "n2"
483
+ },
484
+ "shape": "{ id author { name ...on Person { email } ...on Bot { model } } }"
485
+ }
486
+ ]
487
+ },
488
+ "frames": [
489
+ {
490
+ "id": 1,
491
+ "data": {
492
+ "$type": "Note",
493
+ "id": "n2",
494
+ "author": {
495
+ "$type": "Bot",
496
+ "name": "Helper",
497
+ "model": "m5"
498
+ }
499
+ },
500
+ "meta": {
501
+ "cost": 2
502
+ },
503
+ "fin": true
504
+ }
505
+ ]
506
+ },
507
+ {
508
+ "name": "no sub-shape gives the interface's default view",
509
+ "request": {
510
+ "ops": [
511
+ {
512
+ "id": 1,
513
+ "op": "note",
514
+ "args": {
515
+ "id": "n1"
516
+ },
517
+ "shape": "{ id author }"
518
+ }
519
+ ]
520
+ },
521
+ "frames": [
522
+ {
523
+ "id": 1,
524
+ "data": {
525
+ "$type": "Note",
526
+ "id": "n1",
527
+ "author": {
528
+ "$type": "Person",
529
+ "id": "p1",
530
+ "name": "Ada"
531
+ }
532
+ },
533
+ "meta": {
534
+ "cost": 2
535
+ },
536
+ "fin": true
537
+ }
538
+ ]
539
+ },
540
+ {
541
+ "name": "compact keeps $type at an interface position and drops it where the schema fixes it",
542
+ "request": {
543
+ "ops": [
544
+ {
545
+ "id": 1,
546
+ "op": "note",
547
+ "args": {
548
+ "id": "n1"
549
+ },
550
+ "compact": true,
551
+ "shape": "{ id author { name ...on Person { email } } }"
552
+ }
553
+ ]
554
+ },
555
+ "frames": [
556
+ {
557
+ "id": 1,
558
+ "data": {
559
+ "id": "n1",
560
+ "author": {
561
+ "$type": "Person",
562
+ "name": "Ada",
563
+ "email": "ada@x.dev"
564
+ }
565
+ },
566
+ "fin": true
567
+ }
568
+ ]
569
+ },
570
+ {
571
+ "name": "a list of the interface groups by concrete type",
572
+ "request": {
573
+ "ops": [
574
+ {
575
+ "id": 1,
576
+ "op": "named",
577
+ "shape": "{ id name ...on Bot { model } }"
578
+ }
579
+ ]
580
+ },
581
+ "frames": [
582
+ {
583
+ "id": 1,
584
+ "data": [
585
+ {
586
+ "$type": "Person",
587
+ "id": "p1",
588
+ "name": "Ada"
589
+ },
590
+ {
591
+ "$type": "Bot",
592
+ "id": "bot1",
593
+ "name": "Helper",
594
+ "model": "m5"
595
+ }
596
+ ],
597
+ "meta": {
598
+ "cost": 1
599
+ },
600
+ "fin": true
601
+ }
602
+ ]
603
+ }
604
+ ]
605
+ }