@aws-amplify/api-graphql 4.0.1-api-v6-models.572a7b5.0 → 4.0.1-api-v6-models.9493d4d.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.
- package/lib/internals/APIClient.d.ts +12 -0
- package/lib/internals/APIClient.js +66 -60
- package/lib/internals/generateModelsProperty.js +15 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/utils/resolveOwnerFields.d.ts +12 -0
- package/lib/utils/resolveOwnerFields.js +63 -0
- package/lib-esm/internals/APIClient.d.ts +12 -0
- package/lib-esm/internals/APIClient.js +66 -60
- package/lib-esm/internals/generateModelsProperty.js +15 -0
- package/lib-esm/tsconfig.tsbuildinfo +1 -1
- package/lib-esm/utils/resolveOwnerFields.d.ts +12 -0
- package/lib-esm/utils/resolveOwnerFields.js +59 -0
- package/package.json +5 -5
- package/src/internals/APIClient.ts +73 -56
- package/src/internals/generateModelsProperty.ts +28 -1
- package/src/utils/resolveOwnerFields.ts +65 -0
|
@@ -30,6 +30,18 @@ export declare const graphQLOperationsInfo: {
|
|
|
30
30
|
operationPrefix: "list";
|
|
31
31
|
usePlural: boolean;
|
|
32
32
|
};
|
|
33
|
+
ONCREATE: {
|
|
34
|
+
operationPrefix: "onCreate";
|
|
35
|
+
usePlural: boolean;
|
|
36
|
+
};
|
|
37
|
+
ONUPDATE: {
|
|
38
|
+
operationPrefix: "onUpdate";
|
|
39
|
+
usePlural: boolean;
|
|
40
|
+
};
|
|
41
|
+
ONDELETE: {
|
|
42
|
+
operationPrefix: "onDelete";
|
|
43
|
+
usePlural: boolean;
|
|
44
|
+
};
|
|
33
45
|
};
|
|
34
46
|
export type ModelOperation = keyof typeof graphQLOperationsInfo;
|
|
35
47
|
/**
|
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.normalizeMutationInput = exports.buildGraphQLVariables = exports.generateGraphQLDocument = exports.generateSelectionSet = exports.selectionSetIRToString = exports.customSelectionSetToIR = exports.graphQLOperationsInfo = exports.initializeModel = exports.flattenItems = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
6
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
7
|
+
var resolveOwnerFields_1 = require("../utils/resolveOwnerFields");
|
|
5
8
|
var connectionType = {
|
|
6
9
|
HAS_ONE: 'HAS_ONE',
|
|
7
10
|
HAS_MANY: 'HAS_MANY',
|
|
@@ -139,17 +142,26 @@ exports.graphQLOperationsInfo = {
|
|
|
139
142
|
UPDATE: { operationPrefix: 'update', usePlural: false },
|
|
140
143
|
DELETE: { operationPrefix: 'delete', usePlural: false },
|
|
141
144
|
LIST: { operationPrefix: 'list', usePlural: true },
|
|
145
|
+
ONCREATE: { operationPrefix: 'onCreate', usePlural: false },
|
|
146
|
+
ONUPDATE: { operationPrefix: 'onUpdate', usePlural: false },
|
|
147
|
+
ONDELETE: { operationPrefix: 'onDelete', usePlural: false },
|
|
142
148
|
};
|
|
143
149
|
var graphQLDocumentsCache = new Map();
|
|
144
|
-
var
|
|
150
|
+
var SELECTION_SET_WILDCARD = '*';
|
|
145
151
|
function defaultSelectionSetForModel(modelDefinition) {
|
|
152
|
+
// fields that are explicitly part of the graphql schema; not
|
|
153
|
+
// inferred from owner auth rules.
|
|
146
154
|
var fields = modelDefinition.fields;
|
|
147
|
-
|
|
155
|
+
var explicitFields = Object.values(fields)
|
|
148
156
|
.map(function (_a) {
|
|
149
157
|
var type = _a.type, name = _a.name;
|
|
150
158
|
return typeof type === 'string' && name;
|
|
151
159
|
}) // Default selection set omits model fields
|
|
152
160
|
.filter(Boolean);
|
|
161
|
+
// fields used for owner auth rules that may or may not also
|
|
162
|
+
// be explicit on the model.
|
|
163
|
+
var ownerFields = (0, resolveOwnerFields_1.resolveOwnerFields)(modelDefinition);
|
|
164
|
+
return Array.from(new Set(explicitFields.concat(ownerFields)));
|
|
153
165
|
}
|
|
154
166
|
var FIELD_IR = '';
|
|
155
167
|
/**
|
|
@@ -172,71 +184,54 @@ var FIELD_IR = '';
|
|
|
172
184
|
* ```
|
|
173
185
|
*/
|
|
174
186
|
function customSelectionSetToIR(modelIntrospection, modelName, selectionSet) {
|
|
175
|
-
var e_2, _a;
|
|
176
|
-
var _b, _c, _d, _e;
|
|
177
187
|
var modelDefinition = modelIntrospection[modelName];
|
|
178
|
-
var
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
var
|
|
184
|
-
if (
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
if (!relatedModel) {
|
|
188
|
-
// TODO: may need to change this to support custom types
|
|
189
|
-
throw Error("".concat(modelFieldName, " is not a model field"));
|
|
190
|
-
}
|
|
191
|
-
if (selectedField === SELECTION_SET_ALL_NESTED) {
|
|
192
|
-
var relatedModelDefinition = modelIntrospection[relatedModel];
|
|
193
|
-
var defaultSelectionSet = defaultSelectionSetForModel(relatedModelDefinition);
|
|
194
|
-
var reduced = defaultSelectionSet.reduce(function (acc, curVal) {
|
|
195
|
-
acc[curVal] = FIELD_IR;
|
|
196
|
-
return acc;
|
|
197
|
-
}, {});
|
|
198
|
-
if ((_d = fields[modelFieldName]) === null || _d === void 0 ? void 0 : _d.isArray) {
|
|
199
|
-
intermediateSelectionSet[modelFieldName] = {
|
|
200
|
-
items: reduced,
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
else {
|
|
204
|
-
intermediateSelectionSet[modelFieldName] = reduced;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
else {
|
|
208
|
-
var getNestedSelSet = customSelectionSetToIR(modelIntrospection, relatedModel, [selectedField]);
|
|
209
|
-
if ((_e = fields[modelFieldName]) === null || _e === void 0 ? void 0 : _e.isArray) {
|
|
210
|
-
var existing = intermediateSelectionSet[modelFieldName] || { items: {} };
|
|
211
|
-
var merged = tslib_1.__assign(tslib_1.__assign({}, existing.items), getNestedSelSet);
|
|
212
|
-
intermediateSelectionSet[modelFieldName] = { items: merged };
|
|
213
|
-
}
|
|
214
|
-
else {
|
|
215
|
-
var existingItems = intermediateSelectionSet[modelFieldName] || {};
|
|
216
|
-
var merged = tslib_1.__assign(tslib_1.__assign({}, existingItems), getNestedSelSet);
|
|
217
|
-
intermediateSelectionSet[modelFieldName] = merged;
|
|
218
|
-
}
|
|
219
|
-
}
|
|
188
|
+
var modelFields = modelDefinition.fields;
|
|
189
|
+
return selectionSet.reduce(function (resultObj, path) {
|
|
190
|
+
var _a, _b, _c;
|
|
191
|
+
var _d = tslib_1.__read(path.split('.')), fieldName = _d[0], nested = _d[1], rest = _d.slice(2);
|
|
192
|
+
if (nested) {
|
|
193
|
+
var relatedModel = (_b = (_a = modelFields[fieldName]) === null || _a === void 0 ? void 0 : _a.type) === null || _b === void 0 ? void 0 : _b.model;
|
|
194
|
+
if (!relatedModel) {
|
|
195
|
+
// TODO: may need to change this to support custom types
|
|
196
|
+
throw Error("".concat(fieldName, " is not a model field"));
|
|
220
197
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
198
|
+
var relatedModelDefinition = modelIntrospection[relatedModel];
|
|
199
|
+
var selectionSet_1 = nested === SELECTION_SET_WILDCARD
|
|
200
|
+
? defaultSelectionSetIR(relatedModelDefinition)
|
|
201
|
+
: // if we have a path like 'field.anotherField' recursively build up selection set IR
|
|
202
|
+
customSelectionSetToIR(modelIntrospection, relatedModel, [
|
|
203
|
+
tslib_1.__spreadArray([nested], tslib_1.__read(rest), false).join('.'),
|
|
204
|
+
]);
|
|
205
|
+
if ((_c = modelFields[fieldName]) === null || _c === void 0 ? void 0 : _c.isArray) {
|
|
206
|
+
var existing = resultObj[fieldName] || {
|
|
207
|
+
items: {},
|
|
208
|
+
};
|
|
209
|
+
var merged_1 = tslib_1.__assign(tslib_1.__assign({}, existing.items), selectionSet_1);
|
|
210
|
+
resultObj[fieldName] = { items: merged_1 };
|
|
211
|
+
return resultObj;
|
|
227
212
|
}
|
|
213
|
+
var existingItems = resultObj[fieldName] || {};
|
|
214
|
+
var merged = tslib_1.__assign(tslib_1.__assign({}, existingItems), selectionSet_1);
|
|
215
|
+
resultObj[fieldName] = merged;
|
|
216
|
+
return resultObj;
|
|
228
217
|
}
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
try {
|
|
233
|
-
if (selectionSet_1_1 && !selectionSet_1_1.done && (_a = selectionSet_1.return)) _a.call(selectionSet_1);
|
|
218
|
+
var exists = Boolean(modelFields[fieldName]);
|
|
219
|
+
if (!exists) {
|
|
220
|
+
throw Error("".concat(fieldName, " is not a field of model ").concat(modelName));
|
|
234
221
|
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
222
|
+
resultObj[fieldName] = FIELD_IR;
|
|
223
|
+
return resultObj;
|
|
224
|
+
}, {});
|
|
238
225
|
}
|
|
239
226
|
exports.customSelectionSetToIR = customSelectionSetToIR;
|
|
227
|
+
var defaultSelectionSetIR = function (relatedModelDefinition) {
|
|
228
|
+
var defaultSelectionSet = defaultSelectionSetForModel(relatedModelDefinition);
|
|
229
|
+
var reduced = defaultSelectionSet.reduce(function (acc, curVal) {
|
|
230
|
+
acc[curVal] = FIELD_IR;
|
|
231
|
+
return acc;
|
|
232
|
+
}, {});
|
|
233
|
+
return reduced;
|
|
234
|
+
};
|
|
240
235
|
/**
|
|
241
236
|
* Stringifies selection set IR
|
|
242
237
|
* * @example
|
|
@@ -325,6 +320,14 @@ function generateGraphQLDocument(modelIntrospection, modelName, modelOperation,
|
|
|
325
320
|
});
|
|
326
321
|
graphQLOperationType !== null && graphQLOperationType !== void 0 ? graphQLOperationType : (graphQLOperationType = 'query');
|
|
327
322
|
graphQLSelectionSet !== null && graphQLSelectionSet !== void 0 ? graphQLSelectionSet : (graphQLSelectionSet = "items { ".concat(selectionSetFields, " }"));
|
|
323
|
+
case 'ONCREATE':
|
|
324
|
+
case 'ONUPDATE':
|
|
325
|
+
case 'ONDELETE':
|
|
326
|
+
graphQLArguments !== null && graphQLArguments !== void 0 ? graphQLArguments : (graphQLArguments = {
|
|
327
|
+
filter: "ModelSubscription".concat(name, "FilterInput"),
|
|
328
|
+
});
|
|
329
|
+
graphQLOperationType !== null && graphQLOperationType !== void 0 ? graphQLOperationType : (graphQLOperationType = 'subscription');
|
|
330
|
+
graphQLSelectionSet !== null && graphQLSelectionSet !== void 0 ? graphQLSelectionSet : (graphQLSelectionSet = selectionSetFields);
|
|
328
331
|
}
|
|
329
332
|
var graphQLDocument = "".concat(graphQLOperationType).concat(graphQLArguments
|
|
330
333
|
? "(".concat(Object.entries(graphQLArguments).map(function (_a) {
|
|
@@ -373,6 +376,9 @@ function buildGraphQLVariables(modelDefinition, operation, arg, modelIntrospecti
|
|
|
373
376
|
}
|
|
374
377
|
break;
|
|
375
378
|
case 'LIST':
|
|
379
|
+
case 'ONCREATE':
|
|
380
|
+
case 'ONUPDATE':
|
|
381
|
+
case 'ONDELETE':
|
|
376
382
|
if (arg === null || arg === void 0 ? void 0 : arg.filter) {
|
|
377
383
|
variables = { filter: arg.filter };
|
|
378
384
|
}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.generateModelsProperty = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var APIClient_1 = require("./APIClient");
|
|
6
|
+
var rxjs_1 = require("rxjs");
|
|
6
7
|
function generateModelsProperty(client, params) {
|
|
7
8
|
var e_1, _a;
|
|
8
9
|
var _this = this;
|
|
@@ -81,6 +82,20 @@ function generateModelsProperty(client, params) {
|
|
|
81
82
|
});
|
|
82
83
|
}); };
|
|
83
84
|
}
|
|
85
|
+
else if (['ONCREATE', 'ONUPDATE', 'ONDELETE'].includes(operation)) {
|
|
86
|
+
models[name_1][operationPrefix] = function (arg, options) {
|
|
87
|
+
var query = (0, APIClient_1.generateGraphQLDocument)(modelIntrospection.models, name_1, operation);
|
|
88
|
+
var variables = (0, APIClient_1.buildGraphQLVariables)(model, operation, arg, modelIntrospection);
|
|
89
|
+
var observable = client.graphql({
|
|
90
|
+
query: query,
|
|
91
|
+
variables: variables,
|
|
92
|
+
});
|
|
93
|
+
return observable.pipe((0, rxjs_1.map)(function (value) {
|
|
94
|
+
var _a = tslib_1.__read(Object.keys(value.data), 1), key = _a[0];
|
|
95
|
+
return value.data[key];
|
|
96
|
+
}));
|
|
97
|
+
};
|
|
98
|
+
}
|
|
84
99
|
else {
|
|
85
100
|
models[name_1][operationPrefix] = function (arg, options) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
86
101
|
var query, variables, _a, data, extensions, _b, key_2, flattenedResult, _c, initialized, error_2;
|