Skip to content

Commit f4b1716

Browse files
fix(hooks): Fix hooks mutating the schema declaration and causing issues when sharing the same definitions across different endpoints.
1 parent d92a8a4 commit f4b1716

File tree

2 files changed

+172
-94
lines changed

2 files changed

+172
-94
lines changed

lib/injectHooks.js

Lines changed: 110 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,171 +1,219 @@
11
"use strict";
2+
var __assign = (this && this.__assign) || function () {
3+
__assign = Object.assign || function(t) {
4+
for (var s, i = 1, n = arguments.length; i < n; i++) {
5+
s = arguments[i];
6+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7+
t[p] = s[p];
8+
}
9+
return t;
10+
};
11+
return __assign.apply(this, arguments);
12+
};
13+
var __read = (this && this.__read) || function (o, n) {
14+
var m = typeof Symbol === "function" && o[Symbol.iterator];
15+
if (!m) return o;
16+
var i = m.call(o), r, ar = [], e;
17+
try {
18+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
19+
}
20+
catch (error) { e = { error: error }; }
21+
finally {
22+
try {
23+
if (r && !r.done && (m = i["return"])) m.call(i);
24+
}
25+
finally { if (e) throw e.error; }
26+
}
27+
return ar;
28+
};
29+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
30+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
31+
if (ar || !(i in from)) {
32+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
33+
ar[i] = from[i];
34+
}
35+
}
36+
return to.concat(ar || Array.prototype.slice.call(from));
37+
};
238
exports.__esModule = true;
339
exports.injectHooks = void 0;
4-
function injectListHooks(declaration, injectFunctions) {
40+
function injectListHooks(sourceDeclaration, injectFunctions) {
41+
var declaration = __assign({}, sourceDeclaration);
542
// If the list is resolved by a custom function, we don't need to inject hooks
643
if ('type' in declaration ||
744
((declaration === null || declaration === void 0 ? void 0 : declaration.list) && 'resolve' in (declaration === null || declaration === void 0 ? void 0 : declaration.list))) {
8-
return;
45+
return declaration;
946
}
1047
if (!declaration.list) {
1148
declaration.list = {};
1249
}
50+
else {
51+
declaration.list = __assign({}, declaration.list);
52+
}
1353
var beforeList = Array.isArray(declaration.list.beforeList)
14-
? declaration.list.beforeList
15-
: declaration.list.beforeList
16-
? [declaration.list.beforeList]
17-
: [];
54+
? __spreadArray([], __read(declaration.list.beforeList), false) : declaration.list.beforeList
55+
? [declaration.list.beforeList]
56+
: [];
1857
declaration.list.beforeList = injectFunctions.listBefore
1958
? injectFunctions.listBefore(declaration.model, beforeList)
2059
: beforeList;
2160
var afterList = Array.isArray(declaration.list.afterList)
22-
? declaration.list.afterList
23-
: declaration.list.afterList
24-
? [declaration.list.afterList]
25-
: [];
61+
? __spreadArray([], __read(declaration.list.afterList), false) : declaration.list.afterList
62+
? [declaration.list.afterList]
63+
: [];
2664
declaration.list.afterList = injectFunctions.listAfter
2765
? injectFunctions.listAfter(declaration.model, afterList)
2866
: afterList;
67+
return declaration;
2968
}
30-
function injectUpdateHooks(declaration, injectFunctions) {
69+
function injectUpdateHooks(sourceDeclaration, injectFunctions) {
3170
var _a;
71+
var declaration = __assign({}, sourceDeclaration);
3272
if ('actions' in declaration && !((_a = declaration.actions) === null || _a === void 0 ? void 0 : _a.includes('update')))
33-
return;
73+
return declaration;
3474
// If the update is resolved by a custom function, we don't need to inject hooks
3575
if ('update' in declaration &&
3676
(declaration === null || declaration === void 0 ? void 0 : declaration.update) &&
3777
'resolve' in (declaration === null || declaration === void 0 ? void 0 : declaration.update)) {
38-
return;
78+
return declaration;
3979
}
4080
if ('type' in declaration ||
4181
((declaration === null || declaration === void 0 ? void 0 : declaration.update) && 'resolve' in (declaration === null || declaration === void 0 ? void 0 : declaration.update))) {
42-
return;
82+
return declaration;
4383
}
4484
if ('update' in declaration &&
4585
(declaration === null || declaration === void 0 ? void 0 : declaration.update) &&
4686
'resolve' in (declaration === null || declaration === void 0 ? void 0 : declaration.update)) {
47-
return;
87+
return declaration;
4888
}
4989
if (!declaration.update) {
5090
declaration.update = {};
5191
}
92+
else {
93+
declaration.update = __assign({}, declaration.update);
94+
}
5295
declaration.update = declaration.update;
5396
var beforeUpdateFetch = Array.isArray(declaration.update.beforeUpdateFetch)
54-
? declaration.update.beforeUpdateFetch
55-
: declaration.update.beforeUpdateFetch
56-
? [declaration.update.beforeUpdateFetch]
57-
: [];
97+
? __spreadArray([], __read(declaration.update.beforeUpdateFetch), false) : declaration.update.beforeUpdateFetch
98+
? [declaration.update.beforeUpdateFetch]
99+
: [];
58100
declaration.update.beforeUpdateFetch = injectFunctions.updateBeforeFetch
59101
? injectFunctions.updateBeforeFetch(declaration.model, beforeUpdateFetch)
60102
: beforeUpdateFetch;
61103
var beforeUpdate = Array.isArray(declaration.update.beforeUpdate)
62-
? declaration.update.beforeUpdate
63-
: declaration.update.beforeUpdate
64-
? [declaration.update.beforeUpdate]
65-
: [];
104+
? __spreadArray([], __read(declaration.update.beforeUpdate), false) : declaration.update.beforeUpdate
105+
? [declaration.update.beforeUpdate]
106+
: [];
66107
declaration.update.beforeUpdate = injectFunctions.updateBefore
67108
? injectFunctions.updateBefore(declaration.model, beforeUpdate)
68109
: beforeUpdate;
69110
var afterUpdate = Array.isArray(declaration.update.afterUpdate)
70-
? declaration.update.afterUpdate
71-
: declaration.update.afterUpdate
72-
? [declaration.update.afterUpdate]
73-
: [];
111+
? __spreadArray([], __read(declaration.update.afterUpdate), false) : declaration.update.afterUpdate
112+
? [declaration.update.afterUpdate]
113+
: [];
74114
declaration.update.afterUpdate = injectFunctions.updateAfter
75115
? injectFunctions.updateAfter(declaration.model, afterUpdate)
76116
: afterUpdate;
117+
return declaration;
77118
}
78-
function injectCreateHooks(declaration, injectFunctions) {
119+
function injectCreateHooks(sourceDeclaration, injectFunctions) {
79120
var _a;
121+
var declaration = __assign({}, sourceDeclaration);
80122
if ('actions' in declaration && !((_a = declaration.actions) === null || _a === void 0 ? void 0 : _a.includes('create')))
81-
return;
123+
return declaration;
82124
// If the create is resolved by a custom function, we don't need to inject hooks
83125
if ('create' in declaration &&
84126
(declaration === null || declaration === void 0 ? void 0 : declaration.create) &&
85127
'resolve' in (declaration === null || declaration === void 0 ? void 0 : declaration.create)) {
86-
return;
128+
return declaration;
87129
}
88130
if ('type' in declaration ||
89131
((declaration === null || declaration === void 0 ? void 0 : declaration.create) && 'resolve' in (declaration === null || declaration === void 0 ? void 0 : declaration.create))) {
90-
return;
132+
return declaration;
91133
}
92134
if (!declaration.create) {
93135
declaration.create = {};
94136
}
137+
else {
138+
declaration.create = __assign({}, declaration.create);
139+
}
95140
declaration.create = declaration.create;
96141
var beforeCreate = Array.isArray(declaration.create.beforeCreate)
97-
? declaration.create.beforeCreate
98-
: declaration.create.beforeCreate
99-
? [declaration.create.beforeCreate]
100-
: [];
142+
? __spreadArray([], __read(declaration.create.beforeCreate), false) : declaration.create.beforeCreate
143+
? [declaration.create.beforeCreate]
144+
: [];
101145
declaration.create.beforeCreate = injectFunctions.createBefore
102146
? injectFunctions.createBefore(declaration.model, beforeCreate)
103147
: beforeCreate;
104148
var afterCreate = Array.isArray(declaration.create.afterCreate)
105-
? declaration.create.afterCreate
106-
: declaration.create.afterCreate
107-
? [declaration.create.afterCreate]
108-
: [];
149+
? __spreadArray([], __read(declaration.create.afterCreate), false) : declaration.create.afterCreate
150+
? [declaration.create.afterCreate]
151+
: [];
109152
declaration.create.afterCreate = injectFunctions.createAfter
110153
? injectFunctions.createAfter(declaration.model, afterCreate)
111154
: afterCreate;
155+
return declaration;
112156
}
113-
function injectDeleteHooks(declaration, injectFunctions) {
157+
function injectDeleteHooks(sourceDeclaration, injectFunctions) {
114158
var _a;
159+
var declaration = __assign({}, sourceDeclaration);
115160
if ('actions' in declaration && !((_a = declaration.actions) === null || _a === void 0 ? void 0 : _a.includes('delete')))
116-
return;
161+
return declaration;
117162
// If the delete is resolved by a custom function, we don't need to inject hooks
118163
if ('delete' in declaration &&
119164
(declaration === null || declaration === void 0 ? void 0 : declaration["delete"]) &&
120165
'resolve' in (declaration === null || declaration === void 0 ? void 0 : declaration["delete"])) {
121-
return;
166+
return declaration;
122167
}
123168
if ('type' in declaration ||
124169
((declaration === null || declaration === void 0 ? void 0 : declaration["delete"]) && 'resolve' in (declaration === null || declaration === void 0 ? void 0 : declaration["delete"]))) {
125-
return;
170+
return declaration;
126171
}
127172
if (!declaration["delete"]) {
128173
declaration["delete"] = {};
129174
}
175+
else {
176+
declaration["delete"] = __assign({}, declaration["delete"]);
177+
}
130178
declaration["delete"] = declaration["delete"];
131179
var beforeDelete = Array.isArray(declaration["delete"].beforeDelete)
132-
? declaration["delete"].beforeDelete
133-
: declaration["delete"].beforeDelete
134-
? [declaration["delete"].beforeDelete]
135-
: [];
180+
? __spreadArray([], __read(declaration["delete"].beforeDelete), false) : declaration["delete"].beforeDelete
181+
? [declaration["delete"].beforeDelete]
182+
: [];
136183
declaration["delete"].beforeDelete = injectFunctions.deleteBefore
137184
? injectFunctions.deleteBefore(declaration.model, beforeDelete)
138185
: beforeDelete;
139186
var beforeDeleteFetch = Array.isArray(declaration["delete"].beforeDeleteFetch)
140-
? declaration["delete"].beforeDeleteFetch
141-
: declaration["delete"].beforeDeleteFetch
142-
? [declaration["delete"].beforeDeleteFetch]
143-
: [];
187+
? __spreadArray([], __read(declaration["delete"].beforeDeleteFetch), false) : declaration["delete"].beforeDeleteFetch
188+
? [declaration["delete"].beforeDeleteFetch]
189+
: [];
144190
declaration["delete"].beforeDeleteFetch = injectFunctions.deleteBeforeFetch
145191
? injectFunctions.deleteBeforeFetch(declaration.model, beforeDeleteFetch)
146192
: beforeDeleteFetch;
147193
var afterDelete = Array.isArray(declaration["delete"].afterDelete)
148-
? declaration["delete"].afterDelete
149-
: declaration["delete"].afterDelete
150-
? [declaration["delete"].afterDelete]
151-
: [];
194+
? __spreadArray([], __read(declaration["delete"].afterDelete), false) : declaration["delete"].afterDelete
195+
? [declaration["delete"].afterDelete]
196+
: [];
152197
declaration["delete"].afterDelete = injectFunctions.deleteAfter
153198
? injectFunctions.deleteAfter(declaration.model, afterDelete)
154199
: afterDelete;
200+
return declaration;
155201
}
156202
// Injects a function that will be called with the model and the hooks
157203
// The function can return a new list of hooks to be used instead of the original ones
158204
function injectHooks(_a) {
159205
var graphqlSchemaDeclaration = _a.graphqlSchemaDeclaration, injectFunctions = _a.injectFunctions;
160-
for (var key in graphqlSchemaDeclaration) {
161-
var declaration = graphqlSchemaDeclaration[key];
206+
var graphqlSchemaDeclarationWithHooksInjected = __assign({}, graphqlSchemaDeclaration);
207+
for (var key in graphqlSchemaDeclarationWithHooksInjected) {
208+
var declaration = graphqlSchemaDeclarationWithHooksInjected[key];
162209
if ('model' in declaration) {
163-
injectListHooks(declaration, injectFunctions);
164-
injectUpdateHooks(declaration, injectFunctions);
165-
injectCreateHooks(declaration, injectFunctions);
166-
injectDeleteHooks(declaration, injectFunctions);
210+
declaration = injectListHooks(declaration, injectFunctions);
211+
declaration = injectUpdateHooks(declaration, injectFunctions);
212+
declaration = injectCreateHooks(declaration, injectFunctions);
213+
declaration = injectDeleteHooks(declaration, injectFunctions);
167214
}
215+
graphqlSchemaDeclarationWithHooksInjected[key] = declaration;
168216
}
169-
return graphqlSchemaDeclaration;
217+
return graphqlSchemaDeclarationWithHooksInjected;
170218
}
171219
exports.injectHooks = injectHooks;

0 commit comments

Comments
 (0)