@coderich/autograph 0.13.25 → 0.13.26
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/package.json +1 -1
- package/src/data/DataLoader.js +5 -3
- package/src/data/Resolver.js +15 -10
package/package.json
CHANGED
package/src/data/DataLoader.js
CHANGED
|
@@ -6,9 +6,11 @@ const { hashObject } = require('../service/AppService');
|
|
|
6
6
|
module.exports = class Loader {
|
|
7
7
|
#model;
|
|
8
8
|
#loader;
|
|
9
|
+
#resolver;
|
|
9
10
|
|
|
10
|
-
constructor(model) {
|
|
11
|
+
constructor(model, resolver) {
|
|
11
12
|
this.#model = model;
|
|
13
|
+
this.#resolver = resolver;
|
|
12
14
|
model.loader.cacheKeyFn ??= (query => hashObject(query.toCacheKey()));
|
|
13
15
|
this.#loader = new DataLoader(keys => this.#resolve(keys), model.loader);
|
|
14
16
|
}
|
|
@@ -28,8 +30,8 @@ module.exports = class Loader {
|
|
|
28
30
|
|
|
29
31
|
return this.#model.source.client.resolve($query).then((data) => {
|
|
30
32
|
if (data == null) return null; // Explicit return null;
|
|
31
|
-
if ($query.isCursorPaging && Array.isArray(data))
|
|
32
|
-
return data;
|
|
33
|
+
if ($query.isCursorPaging && Array.isArray(data)) data = Loader.#paginateResults(data, query.toObject());
|
|
34
|
+
return this.#resolver.toResultSet(this.#model, data);
|
|
33
35
|
});
|
|
34
36
|
}));
|
|
35
37
|
}
|
package/src/data/Resolver.js
CHANGED
|
@@ -190,11 +190,13 @@ module.exports = class Resolver {
|
|
|
190
190
|
*/
|
|
191
191
|
async resolve(query) {
|
|
192
192
|
let thunk;
|
|
193
|
-
const { model,
|
|
193
|
+
const { model, crud, isMutation, flags } = query.toObject();
|
|
194
194
|
const currSession = this.#sessions.slice(-1).pop();
|
|
195
195
|
|
|
196
196
|
if (isMutation) {
|
|
197
197
|
thunk = tquery => this.#schema.models[model].source.client.resolve(tquery.toDriver().toObject()).then((results) => {
|
|
198
|
+
const { doc, input } = tquery.toObject();
|
|
199
|
+
|
|
198
200
|
// We clear the cache immediately (regardless if we're in transaction or not)
|
|
199
201
|
this.clear(model);
|
|
200
202
|
|
|
@@ -202,7 +204,9 @@ module.exports = class Resolver {
|
|
|
202
204
|
currSession?.thunks.push(...this.#sessions.map(s => () => s.parent.clear(model)));
|
|
203
205
|
|
|
204
206
|
// Return results
|
|
205
|
-
|
|
207
|
+
if (crud === 'delete') return doc;
|
|
208
|
+
if (crud === 'update') return input;
|
|
209
|
+
return this.toResultSet(model, results);
|
|
206
210
|
});
|
|
207
211
|
} else {
|
|
208
212
|
thunk = tquery => this.#dataLoaders[model].resolve(tquery);
|
|
@@ -211,7 +215,7 @@ module.exports = class Resolver {
|
|
|
211
215
|
return this.#createSystemEvent(query, (tquery) => {
|
|
212
216
|
return thunk(tquery).then((result) => {
|
|
213
217
|
if (flags?.required && (result == null || result?.length === 0)) throw Boom.notFound();
|
|
214
|
-
return
|
|
218
|
+
return result;
|
|
215
219
|
});
|
|
216
220
|
});
|
|
217
221
|
}
|
|
@@ -224,8 +228,8 @@ module.exports = class Resolver {
|
|
|
224
228
|
// Transform result to domain model
|
|
225
229
|
const $doc = this.#schema.models[model].walk(doc, (node) => {
|
|
226
230
|
if (node.value === undefined) return undefined;
|
|
231
|
+
if (node.value != null && node.field.isArray) node.value = Util.ensureArray(node.value);
|
|
227
232
|
node.key = node.field.name;
|
|
228
|
-
node.value = Pipeline.$cast(node);
|
|
229
233
|
return node;
|
|
230
234
|
}, { key: 'key' });
|
|
231
235
|
|
|
@@ -271,7 +275,7 @@ module.exports = class Resolver {
|
|
|
271
275
|
return Object.entries(this.#schema.models).filter(([key, value]) => {
|
|
272
276
|
return value.loader && value.isEntity;
|
|
273
277
|
}).reduce((prev, [key, value]) => {
|
|
274
|
-
return Object.assign(prev, { [key]: new DataLoader(value) });
|
|
278
|
+
return Object.assign(prev, { [key]: new DataLoader(value, this) });
|
|
275
279
|
}, {});
|
|
276
280
|
}
|
|
277
281
|
|
|
@@ -292,11 +296,12 @@ module.exports = class Resolver {
|
|
|
292
296
|
// if (query.crud === 'update' && Util.isEqual({ added: {}, updated: {}, deleted: {} }, Util.changeset(query.doc, query.input))) return query.doc;
|
|
293
297
|
const tquery = await $query.transform();
|
|
294
298
|
// await Emitter.emit('validate', event); // We need to re-connect tquery to event
|
|
295
|
-
return thunk(tquery)
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
299
|
+
return thunk(tquery);
|
|
300
|
+
}).then((result) => {
|
|
301
|
+
event.doc ??= result; // Case of create
|
|
302
|
+
event.result = result; // backwards compat
|
|
303
|
+
query.result = result;
|
|
304
|
+
return Emitter.emit(`post${type}`, event);
|
|
300
305
|
}).then((result = query.result) => result).catch((e) => {
|
|
301
306
|
const { data = {} } = e;
|
|
302
307
|
throw Boom.boomify(e, { data: { ...event, ...data } });
|