houdini 0.17.13 → 0.18.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.
Files changed (57) hide show
  1. package/build/cmd-cjs/index.js +438 -201
  2. package/build/cmd-esm/index.js +438 -201
  3. package/build/codegen/utils/flattenSelections.d.ts +3 -1
  4. package/build/codegen-cjs/index.js +405 -180
  5. package/build/codegen-esm/index.js +405 -180
  6. package/build/lib/config.d.ts +8 -3
  7. package/build/lib-cjs/index.js +141 -81
  8. package/build/lib-esm/index.js +141 -81
  9. package/build/runtime/cache/subscription.d.ts +3 -3
  10. package/build/runtime/lib/config.d.ts +2 -1
  11. package/build/runtime/lib/scalars.d.ts +2 -2
  12. package/build/runtime/lib/selection.d.ts +2 -0
  13. package/build/runtime/lib/types.d.ts +26 -16
  14. package/build/runtime-cjs/cache/cache.js +38 -23
  15. package/build/runtime-cjs/cache/lists.js +40 -26
  16. package/build/runtime-cjs/cache/subscription.d.ts +3 -3
  17. package/build/runtime-cjs/cache/subscription.js +23 -21
  18. package/build/runtime-cjs/lib/config.d.ts +2 -1
  19. package/build/runtime-cjs/lib/scalars.d.ts +2 -2
  20. package/build/runtime-cjs/lib/scalars.js +9 -6
  21. package/build/runtime-cjs/lib/selection.d.ts +2 -0
  22. package/build/runtime-cjs/lib/selection.js +39 -0
  23. package/build/runtime-cjs/lib/types.d.ts +26 -16
  24. package/build/runtime-esm/cache/cache.js +38 -23
  25. package/build/runtime-esm/cache/lists.js +40 -26
  26. package/build/runtime-esm/cache/subscription.d.ts +3 -3
  27. package/build/runtime-esm/cache/subscription.js +23 -21
  28. package/build/runtime-esm/lib/config.d.ts +2 -1
  29. package/build/runtime-esm/lib/scalars.d.ts +2 -2
  30. package/build/runtime-esm/lib/scalars.js +9 -6
  31. package/build/runtime-esm/lib/selection.d.ts +2 -0
  32. package/build/runtime-esm/lib/selection.js +15 -0
  33. package/build/runtime-esm/lib/types.d.ts +26 -16
  34. package/build/test/index.d.ts +1 -2
  35. package/build/test-cjs/index.js +485 -195
  36. package/build/test-esm/index.js +485 -195
  37. package/build/vite-cjs/index.js +438 -193
  38. package/build/vite-esm/index.js +438 -193
  39. package/package.json +2 -2
  40. package/build/runtime-cjs/cache/tests/availability.test.js +0 -357
  41. package/build/runtime-cjs/cache/tests/gc.test.js +0 -271
  42. package/build/runtime-cjs/cache/tests/keys.test.js +0 -34
  43. package/build/runtime-cjs/cache/tests/list.test.js +0 -3390
  44. package/build/runtime-cjs/cache/tests/readwrite.test.js +0 -1076
  45. package/build/runtime-cjs/cache/tests/scalars.test.js +0 -181
  46. package/build/runtime-cjs/cache/tests/storage.test.js +0 -280
  47. package/build/runtime-cjs/cache/tests/subscriptions.test.js +0 -1469
  48. package/build/runtime-cjs/lib/scalars.test.js +0 -736
  49. package/build/runtime-esm/cache/tests/availability.test.js +0 -356
  50. package/build/runtime-esm/cache/tests/gc.test.js +0 -270
  51. package/build/runtime-esm/cache/tests/keys.test.js +0 -33
  52. package/build/runtime-esm/cache/tests/list.test.js +0 -3389
  53. package/build/runtime-esm/cache/tests/readwrite.test.js +0 -1075
  54. package/build/runtime-esm/cache/tests/scalars.test.js +0 -180
  55. package/build/runtime-esm/cache/tests/storage.test.js +0 -279
  56. package/build/runtime-esm/cache/tests/subscriptions.test.js +0 -1468
  57. package/build/runtime-esm/lib/scalars.test.js +0 -735
@@ -1,181 +0,0 @@
1
- "use strict";
2
- var import_vitest = require("vitest");
3
- var import_test = require("../../../test");
4
- var import_cache = require("../cache");
5
- const config = (0, import_test.testConfigFile)({
6
- scalars: {
7
- DateTime: {
8
- type: "Date",
9
- marshal(val) {
10
- return val.getTime();
11
- },
12
- unmarshal(val) {
13
- return new Date(val);
14
- }
15
- }
16
- }
17
- });
18
- (0, import_vitest.test)("extracting data with custom scalars unmarshals the value", () => {
19
- const cache = new import_cache.Cache(config);
20
- const selection = {
21
- node: {
22
- type: "Node",
23
- keyRaw: "node",
24
- fields: {
25
- date: {
26
- type: "DateTime",
27
- keyRaw: "date"
28
- },
29
- id: {
30
- type: "ID",
31
- keyRaw: "id"
32
- }
33
- }
34
- }
35
- };
36
- const data = {
37
- node: {
38
- id: "1",
39
- date: new Date().getTime()
40
- }
41
- };
42
- cache.write({ selection, data });
43
- (0, import_vitest.expect)(cache.read({ parent: import_cache.rootID, selection }).data).toEqual({
44
- node: {
45
- id: "1",
46
- date: new Date(data.node.date)
47
- }
48
- });
49
- });
50
- (0, import_vitest.test)("can store and retrieve lists of lists of scalars", function() {
51
- const cache = new import_cache.Cache(config);
52
- const selection = {
53
- viewer: {
54
- type: "User",
55
- keyRaw: "viewer",
56
- fields: {
57
- id: {
58
- type: "ID",
59
- keyRaw: "id"
60
- },
61
- strings: {
62
- type: "String",
63
- keyRaw: "strings"
64
- }
65
- }
66
- }
67
- };
68
- cache.write({
69
- selection,
70
- data: {
71
- viewer: {
72
- id: "1",
73
- strings: ["bob", "john"]
74
- }
75
- }
76
- });
77
- (0, import_vitest.expect)(cache.read({ parent: import_cache.rootID, selection }).data).toEqual({
78
- viewer: {
79
- id: "1",
80
- strings: ["bob", "john"]
81
- }
82
- });
83
- });
84
- (0, import_vitest.test)("can write list of scalars", function() {
85
- const cache = new import_cache.Cache(config);
86
- const selection = {
87
- viewer: {
88
- type: "User",
89
- keyRaw: "viewer",
90
- fields: {
91
- id: {
92
- type: "ID",
93
- keyRaw: "id"
94
- },
95
- firstName: {
96
- type: "String",
97
- keyRaw: "firstName"
98
- },
99
- friends: {
100
- type: "Int",
101
- keyRaw: "friends"
102
- }
103
- }
104
- }
105
- };
106
- cache.write({
107
- selection,
108
- data: {
109
- viewer: {
110
- id: "1",
111
- firstName: "bob",
112
- friends: [1]
113
- }
114
- }
115
- });
116
- (0, import_vitest.expect)(cache.read({ parent: import_cache.rootID, selection }).data).toEqual({
117
- viewer: {
118
- id: "1",
119
- firstName: "bob",
120
- friends: [1]
121
- }
122
- });
123
- });
124
- (0, import_vitest.test)("writing a scalar marked with replace", function() {
125
- const cache = new import_cache.Cache(config);
126
- const selection = {
127
- viewer: {
128
- type: "User",
129
- keyRaw: "viewer",
130
- fields: {
131
- id: {
132
- type: "ID",
133
- keyRaw: "id"
134
- },
135
- firstName: {
136
- type: "String",
137
- keyRaw: "firstName"
138
- },
139
- friends: {
140
- type: "Int",
141
- keyRaw: "friends",
142
- update: "append"
143
- }
144
- }
145
- }
146
- };
147
- cache.write({
148
- selection,
149
- data: {
150
- viewer: {
151
- id: "1",
152
- firstName: "bob",
153
- friends: [1]
154
- }
155
- }
156
- });
157
- (0, import_vitest.expect)(cache.read({ parent: import_cache.rootID, selection }).data).toEqual({
158
- viewer: {
159
- id: "1",
160
- firstName: "bob",
161
- friends: [1]
162
- }
163
- });
164
- cache.write({
165
- selection,
166
- data: {
167
- viewer: {
168
- id: "1",
169
- firstName: "bob",
170
- friends: [2]
171
- }
172
- }
173
- });
174
- (0, import_vitest.expect)(cache.read({ parent: import_cache.rootID, selection }).data).toEqual({
175
- viewer: {
176
- id: "1",
177
- firstName: "bob",
178
- friends: [2]
179
- }
180
- });
181
- });
@@ -1,280 +0,0 @@
1
- "use strict";
2
- var import_vitest = require("vitest");
3
- var import_storage = require("../storage");
4
- (0, import_vitest.describe)("in memory layers", function() {
5
- (0, import_vitest.test)("first layer written can be looked up", function() {
6
- const storage = new import_storage.InMemoryStorage();
7
- const layer = storage.createLayer();
8
- layer.writeField("User:1", "firstName", "John");
9
- (0, import_vitest.expect)(storage.get("User:1", "firstName")).toEqual({
10
- value: "John",
11
- displayLayers: [layer.id],
12
- kind: "scalar"
13
- });
14
- (0, import_vitest.expect)(storage.layerCount).toEqual(1);
15
- });
16
- (0, import_vitest.test)("non-optimistic layer overwrites base", function() {
17
- const storage = new import_storage.InMemoryStorage();
18
- storage.writeField("User:1", "firstName", "John");
19
- const layerID = storage.writeField("User:1", "firstName", "Marshal");
20
- (0, import_vitest.expect)(storage.get("User:1", "firstName")).toEqual({
21
- value: "Marshal",
22
- displayLayers: [layerID],
23
- kind: "scalar"
24
- });
25
- (0, import_vitest.expect)(storage.layerCount).toEqual(1);
26
- });
27
- (0, import_vitest.test)("optimistic layer overwrites base", function() {
28
- const storage = new import_storage.InMemoryStorage();
29
- storage.writeField("User:1", "firstName", "John");
30
- const optimisticLayerID = storage.createLayer(true).writeField("User:1", "firstName", "Marshal");
31
- (0, import_vitest.expect)(storage.get("User:1", "firstName")).toEqual({
32
- value: "Marshal",
33
- kind: "scalar",
34
- displayLayers: [optimisticLayerID]
35
- });
36
- (0, import_vitest.expect)(storage.layerCount).toEqual(2);
37
- });
38
- (0, import_vitest.test)("resolving layer merges into base", function() {
39
- const storage = new import_storage.InMemoryStorage();
40
- const baseLayerID = storage.writeField("User:1", "firstName", "John");
41
- (0, import_vitest.expect)(storage.get("User:1", "firstName")).toEqual({
42
- value: "John",
43
- displayLayers: [baseLayerID],
44
- kind: "scalar"
45
- });
46
- (0, import_vitest.expect)(storage.layerCount).toEqual(1);
47
- const optimisticLayer = storage.createLayer(true);
48
- optimisticLayer.writeField("User:1", "firstName", "Marshal");
49
- (0, import_vitest.expect)(storage.get("User:1", "firstName")).toEqual({
50
- value: "Marshal",
51
- kind: "scalar",
52
- displayLayers: [optimisticLayer.id]
53
- });
54
- (0, import_vitest.expect)(storage.layerCount).toEqual(2);
55
- optimisticLayer.writeField("User:1", "firstName", "Mike");
56
- storage.resolveLayer(optimisticLayer.id);
57
- (0, import_vitest.expect)(storage.get("User:1", "firstName")).toEqual({
58
- value: "Mike",
59
- displayLayers: [baseLayerID],
60
- kind: "scalar"
61
- });
62
- (0, import_vitest.expect)(storage.layerCount).toEqual(1);
63
- });
64
- (0, import_vitest.test)("resolving layer merges up", function() {
65
- const storage = new import_storage.InMemoryStorage();
66
- const baseLayerID = storage.writeField("User:1", "firstName", "John");
67
- const layer1 = storage.createLayer(true);
68
- layer1.writeField("User:1", "firstName", "Michael");
69
- const layer2 = storage.createLayer();
70
- layer2.writeField("User:1", "firstName", "Jeremy");
71
- layer2.writeField("User:1", "lastName", "Michelson");
72
- (0, import_vitest.expect)(storage.get("User:1", "firstName")).toEqual({
73
- value: "Jeremy",
74
- displayLayers: [layer2.id],
75
- kind: "scalar"
76
- });
77
- (0, import_vitest.expect)(storage.layerCount).toEqual(3);
78
- layer1.writeField("User:1", "firstName", "Michael");
79
- layer1.writeField("User:1", "lastName", "George'");
80
- layer1.writeField("User:1", "age", 5);
81
- storage.resolveLayer(layer1.id);
82
- (0, import_vitest.expect)(storage.layerCount).toEqual(1);
83
- (0, import_vitest.expect)(storage.get("User:1", "age")).toEqual({
84
- value: 5,
85
- displayLayers: [baseLayerID],
86
- kind: "scalar"
87
- });
88
- (0, import_vitest.expect)(storage.get("User:1", "firstName")).toEqual({
89
- value: "Jeremy",
90
- displayLayers: [baseLayerID],
91
- kind: "scalar"
92
- });
93
- (0, import_vitest.expect)(storage.get("User:1", "lastName")).toEqual({
94
- value: "Michelson",
95
- displayLayers: [baseLayerID],
96
- kind: "scalar"
97
- });
98
- });
99
- (0, import_vitest.test)("can write links", function() {
100
- const storage = new import_storage.InMemoryStorage();
101
- const layerID = storage.writeLink("User:1", "bestFriend", "User:2");
102
- (0, import_vitest.expect)(storage.get("User:1", "bestFriend")).toEqual({
103
- value: "User:2",
104
- displayLayers: [layerID],
105
- kind: "link"
106
- });
107
- });
108
- (0, import_vitest.test)("can write list of links", function() {
109
- const storage = new import_storage.InMemoryStorage();
110
- const layerID = storage.writeLink("User:1", "friends", ["User:1"]);
111
- (0, import_vitest.expect)(storage.get("User:1", "friends")).toEqual({
112
- value: ["User:1"],
113
- displayLayers: [layerID],
114
- kind: "link"
115
- });
116
- });
117
- (0, import_vitest.test)("values are reset when layer is cleared", function() {
118
- const storage = new import_storage.InMemoryStorage();
119
- const layer = storage.createLayer(true);
120
- layer.writeField("User:1", "firstName", "Alec");
121
- (0, import_vitest.expect)(storage.get("User:1", "firstName")).toEqual({
122
- value: "Alec",
123
- displayLayers: [layer.id],
124
- kind: "scalar"
125
- });
126
- layer.clear();
127
- (0, import_vitest.expect)(storage.get("User:1", "firstName").value).toBeUndefined();
128
- });
129
- (0, import_vitest.test)("can overwrite deletes for a specific link list", function() {
130
- const storage = new import_storage.InMemoryStorage();
131
- storage.writeLink("User:1", "friends", ["User:2"]);
132
- const layer = storage.createLayer(true);
133
- layer.delete("User:2");
134
- (0, import_vitest.expect)(storage.get("User:1", "friends").value).toEqual([]);
135
- storage.resolveLayer(layer.id);
136
- (0, import_vitest.expect)(storage.get("User:1", "friends").value).toEqual([]);
137
- storage.writeLink("User:1", "friends", ["User:2"]);
138
- (0, import_vitest.expect)(storage.get("User:1", "friends").value).toEqual(["User:2"]);
139
- });
140
- (0, import_vitest.test)("deleting specific fields removes the field", function() {
141
- const storage = new import_storage.InMemoryStorage();
142
- storage.writeField("User:1", "firstName", "Michael");
143
- storage.writeField("User:1", "lastName", "Aivazis");
144
- (0, import_vitest.expect)(storage.get("User:1", "firstName")).toEqual({
145
- value: "Michael",
146
- displayLayers: [storage.topLayer.id],
147
- kind: "scalar"
148
- });
149
- storage.deleteField("User:1", "firstName");
150
- storage.topLayer.removeUndefinedFields();
151
- (0, import_vitest.expect)(storage.get("User:1", "firstName")).toEqual({
152
- value: void 0,
153
- displayLayers: [],
154
- kind: "unknown"
155
- });
156
- (0, import_vitest.expect)(Object.keys(storage.topLayer.fields["User:1"])).toEqual(["lastName"]);
157
- });
158
- (0, import_vitest.test)("deleting all fields of a record deletes the record", function() {
159
- const storage = new import_storage.InMemoryStorage();
160
- storage.writeField("User:1", "firstName", "Michael");
161
- (0, import_vitest.expect)(storage.get("User:1", "firstName")).toEqual({
162
- value: "Michael",
163
- displayLayers: [storage.topLayer.id],
164
- kind: "scalar"
165
- });
166
- storage.deleteField("User:1", "firstName");
167
- storage.topLayer.removeUndefinedFields();
168
- (0, import_vitest.expect)(storage.get("User:1", "firstName")).toEqual({
169
- value: void 0,
170
- displayLayers: [],
171
- kind: "unknown"
172
- });
173
- (0, import_vitest.expect)(storage.topLayer.fields["User:1"]).toBeUndefined();
174
- });
175
- (0, import_vitest.test)("create and resolve on base layer", function() {
176
- const storage = new import_storage.InMemoryStorage();
177
- const layer = storage.createLayer(true);
178
- layer.writeField("User:1", "firstName", "bob");
179
- storage.resolveLayer(layer.id);
180
- (0, import_vitest.expect)(storage.get("User:1", "firstName").value).toEqual("bob");
181
- });
182
- import_vitest.test.todo("links are reset when layer is cleared");
183
- (0, import_vitest.describe)("operations", function() {
184
- (0, import_vitest.test)("optimistic deletes", function() {
185
- const storage = new import_storage.InMemoryStorage();
186
- storage.writeField("User:1", "firstName", "John");
187
- storage.writeField("User:1", "lastName", "Schmidt");
188
- const baseLayerID = storage.writeLink("User:2", "friends", ["User:1", "User:3"]);
189
- const middleLayer = storage.createLayer(true);
190
- middleLayer.delete("User:1");
191
- const topLayerID = storage.writeField("User:1", "middleName", "Jingleheymer");
192
- (0, import_vitest.expect)(storage.get("User:1", "middleName")).toEqual({
193
- value: "Jingleheymer",
194
- displayLayers: [topLayerID],
195
- kind: "scalar"
196
- });
197
- (0, import_vitest.expect)(storage.get("User:2", "friends")).toEqual({
198
- value: ["User:3"],
199
- kind: "link",
200
- displayLayers: [middleLayer.id, baseLayerID]
201
- });
202
- (0, import_vitest.expect)(storage.get("User:1", "firstName").value).toBeUndefined();
203
- (0, import_vitest.expect)(storage.get("User:1", "lastName").value).toBeUndefined();
204
- middleLayer.clear();
205
- middleLayer.delete("User:3");
206
- storage.resolveLayer(middleLayer.id);
207
- (0, import_vitest.expect)(storage.layerCount).toEqual(1);
208
- (0, import_vitest.expect)(storage.get("User:1", "firstName")).toEqual({
209
- value: "John",
210
- displayLayers: [baseLayerID],
211
- kind: "scalar"
212
- });
213
- (0, import_vitest.expect)(storage.get("User:1", "lastName")).toEqual({
214
- value: "Schmidt",
215
- displayLayers: [baseLayerID],
216
- kind: "scalar"
217
- });
218
- (0, import_vitest.expect)(storage.get("User:1", "middleName")).toEqual({
219
- value: "Jingleheymer",
220
- displayLayers: [baseLayerID],
221
- kind: "scalar"
222
- });
223
- (0, import_vitest.expect)(storage.get("User:2", "friends")).toEqual({
224
- value: ["User:1"],
225
- displayLayers: [baseLayerID],
226
- kind: "link"
227
- });
228
- });
229
- (0, import_vitest.test)("insert into linked list", function() {
230
- const storage = new import_storage.InMemoryStorage();
231
- const baseLayerID = storage.writeLink("User:1", "friends", ["User:2"]);
232
- const layer = storage.createLayer(true);
233
- layer.insert("User:1", "friends", import_storage.OperationLocation.end, "User:3");
234
- storage.insert("User:1", "friends", import_storage.OperationLocation.end, "User:5");
235
- (0, import_vitest.expect)(storage.get("User:1", "friends")).toEqual({
236
- value: ["User:2", "User:3", "User:5"],
237
- displayLayers: [storage.topLayer.id, layer.id, baseLayerID],
238
- kind: "link"
239
- });
240
- layer.clear();
241
- layer.insert("User:1", "friends", import_storage.OperationLocation.end, "User:4");
242
- storage.resolveLayer(layer.id);
243
- (0, import_vitest.expect)(storage.get("User:1", "friends")).toEqual({
244
- value: ["User:2", "User:5", "User:4"],
245
- displayLayers: [baseLayerID],
246
- kind: "link"
247
- });
248
- (0, import_vitest.expect)(storage.layerCount).toEqual(1);
249
- });
250
- (0, import_vitest.test)("remove from linked list", function() {
251
- const storage = new import_storage.InMemoryStorage();
252
- const baseLayerID = storage.writeLink("User:1", "friends", [
253
- "User:2",
254
- "User:3",
255
- "User:4"
256
- ]);
257
- const layer = storage.createLayer(true);
258
- layer.remove("User:1", "friends", "User:2");
259
- (0, import_vitest.expect)(storage.get("User:1", "friends")).toEqual({
260
- value: ["User:3", "User:4"],
261
- displayLayers: [layer.id, baseLayerID],
262
- kind: "link"
263
- });
264
- layer.clear();
265
- layer.remove("User:1", "friends", "User:4");
266
- layer.remove("User:1", "friends", "User:3");
267
- storage.resolveLayer(layer.id);
268
- (0, import_vitest.expect)(storage.get("User:1", "friends")).toEqual({
269
- value: ["User:2"],
270
- displayLayers: [baseLayerID],
271
- kind: "link"
272
- });
273
- (0, import_vitest.expect)(storage.layerCount).toEqual(1);
274
- });
275
- import_vitest.test.todo(
276
- "resolving layer with deletes and fields removes old data and retains the new stuff"
277
- );
278
- import_vitest.test.todo("an optimistic layer after a stack non-optimistic survives resolution");
279
- });
280
- });