@aws-amplify/api-graphql 4.0.1-api-v6-models.572a7b5.0 → 4.0.1-api-v6-models.3eb7748.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,12 @@
1
+ import { ResourcesConfig } from '@aws-amplify/core';
2
+ type GraphQLConfig = Exclude<ResourcesConfig['API'], undefined>['GraphQL'];
3
+ type ModelIntrospectionSchema = Exclude<Exclude<GraphQLConfig, undefined>['modelIntrospection'], undefined>;
4
+ type Model = ModelIntrospectionSchema['models'][string];
5
+ /**
6
+ * Given an introspection schema model, returns all owner fields.
7
+ *
8
+ * @param model Model from an introspection schema
9
+ * @returns List of owner field names
10
+ */
11
+ export declare function resolveOwnerFields(model: Model): string[];
12
+ export {};
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveOwnerFields = void 0;
4
+ var tslib_1 = require("tslib");
5
+ /**
6
+ * Given an introspection schema model, returns all owner fields.
7
+ *
8
+ * @param model Model from an introspection schema
9
+ * @returns List of owner field names
10
+ */
11
+ function resolveOwnerFields(model) {
12
+ var e_1, _a, e_2, _b;
13
+ var ownerFields = new Set();
14
+ try {
15
+ for (var _c = tslib_1.__values(model.attributes || []), _d = _c.next(); !_d.done; _d = _c.next()) {
16
+ var attr = _d.value;
17
+ if (isAuthAttribute(attr)) {
18
+ try {
19
+ for (var _e = (e_2 = void 0, tslib_1.__values(attr.properties.rules)), _f = _e.next(); !_f.done; _f = _e.next()) {
20
+ var rule = _f.value;
21
+ if (rule.allow === 'owner') {
22
+ ownerFields.add(rule.ownerField || 'owner');
23
+ }
24
+ }
25
+ }
26
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
27
+ finally {
28
+ try {
29
+ if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
30
+ }
31
+ finally { if (e_2) throw e_2.error; }
32
+ }
33
+ }
34
+ }
35
+ }
36
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
37
+ finally {
38
+ try {
39
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
40
+ }
41
+ finally { if (e_1) throw e_1.error; }
42
+ }
43
+ return Array.from(ownerFields);
44
+ }
45
+ exports.resolveOwnerFields = resolveOwnerFields;
46
+ /**
47
+ * Type guard that identifies an auth attribute with an attached rules list that
48
+ * specifies an `allow` attribute at a minimum.
49
+ *
50
+ * @param attribute Any object. Ideally a model introspection schema model attribute
51
+ * @returns True if given object is an auth attribute
52
+ */
53
+ function isAuthAttribute(attribute) {
54
+ var _a, _b;
55
+ if ((attribute === null || attribute === void 0 ? void 0 : attribute.type) === 'auth') {
56
+ if (typeof (attribute === null || attribute === void 0 ? void 0 : attribute.properties) === 'object') {
57
+ if (Array.isArray((_a = attribute === null || attribute === void 0 ? void 0 : attribute.properties) === null || _a === void 0 ? void 0 : _a.rules)) {
58
+ return ((_b = attribute === null || attribute === void 0 ? void 0 : attribute.properties) === null || _b === void 0 ? void 0 : _b.rules).every(function (rule) { return !!rule.allow; });
59
+ }
60
+ }
61
+ }
62
+ return false;
63
+ }
@@ -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
  /**
@@ -1,4 +1,7 @@
1
1
  import { __assign, __read, __spreadArray, __values } from "tslib";
2
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ import { resolveOwnerFields } from '../utils/resolveOwnerFields';
2
5
  var connectionType = {
3
6
  HAS_ONE: 'HAS_ONE',
4
7
  HAS_MANY: 'HAS_MANY',
@@ -134,17 +137,26 @@ export var graphQLOperationsInfo = {
134
137
  UPDATE: { operationPrefix: 'update', usePlural: false },
135
138
  DELETE: { operationPrefix: 'delete', usePlural: false },
136
139
  LIST: { operationPrefix: 'list', usePlural: true },
140
+ ONCREATE: { operationPrefix: 'onCreate', usePlural: false },
141
+ ONUPDATE: { operationPrefix: 'onUpdate', usePlural: false },
142
+ ONDELETE: { operationPrefix: 'onDelete', usePlural: false },
137
143
  };
138
144
  var graphQLDocumentsCache = new Map();
139
145
  var SELECTION_SET_ALL_NESTED = '*';
140
146
  function defaultSelectionSetForModel(modelDefinition) {
147
+ // fields that are explicitly part of the graphql schema; not
148
+ // inferred from owner auth rules.
141
149
  var fields = modelDefinition.fields;
142
- return Object.values(fields)
150
+ var explicitFields = Object.values(fields)
143
151
  .map(function (_a) {
144
152
  var type = _a.type, name = _a.name;
145
153
  return typeof type === 'string' && name;
146
154
  }) // Default selection set omits model fields
147
155
  .filter(Boolean);
156
+ // fields used for owner auth rules that may or may not also
157
+ // be explicit on the model.
158
+ var ownerFields = resolveOwnerFields(modelDefinition);
159
+ return Array.from(new Set(explicitFields.concat(ownerFields)));
148
160
  }
149
161
  var FIELD_IR = '';
150
162
  /**
@@ -317,6 +329,14 @@ export function generateGraphQLDocument(modelIntrospection, modelName, modelOper
317
329
  });
318
330
  graphQLOperationType !== null && graphQLOperationType !== void 0 ? graphQLOperationType : (graphQLOperationType = 'query');
319
331
  graphQLSelectionSet !== null && graphQLSelectionSet !== void 0 ? graphQLSelectionSet : (graphQLSelectionSet = "items { ".concat(selectionSetFields, " }"));
332
+ case 'ONCREATE':
333
+ case 'ONUPDATE':
334
+ case 'ONDELETE':
335
+ graphQLArguments !== null && graphQLArguments !== void 0 ? graphQLArguments : (graphQLArguments = {
336
+ filter: "ModelSubscription".concat(name, "FilterInput"),
337
+ });
338
+ graphQLOperationType !== null && graphQLOperationType !== void 0 ? graphQLOperationType : (graphQLOperationType = 'subscription');
339
+ graphQLSelectionSet !== null && graphQLSelectionSet !== void 0 ? graphQLSelectionSet : (graphQLSelectionSet = selectionSetFields);
320
340
  }
321
341
  var graphQLDocument = "".concat(graphQLOperationType).concat(graphQLArguments
322
342
  ? "(".concat(Object.entries(graphQLArguments).map(function (_a) {
@@ -364,6 +384,9 @@ export function buildGraphQLVariables(modelDefinition, operation, arg, modelIntr
364
384
  }
365
385
  break;
366
386
  case 'LIST':
387
+ case 'ONCREATE':
388
+ case 'ONUPDATE':
389
+ case 'ONDELETE':
367
390
  if (arg === null || arg === void 0 ? void 0 : arg.filter) {
368
391
  variables = { filter: arg.filter };
369
392
  }
@@ -1,5 +1,6 @@
1
1
  import { __awaiter, __generator, __read, __values } from "tslib";
2
2
  import { initializeModel, generateGraphQLDocument, buildGraphQLVariables, graphQLOperationsInfo, flattenItems, } from './APIClient';
3
+ import { map } from 'rxjs';
3
4
  export function generateModelsProperty(client, params) {
4
5
  var e_1, _a;
5
6
  var _this = this;
@@ -78,6 +79,20 @@ export function generateModelsProperty(client, params) {
78
79
  });
79
80
  }); };
80
81
  }
82
+ else if (['ONCREATE', 'ONUPDATE', 'ONDELETE'].includes(operation)) {
83
+ models[name_1][operationPrefix] = function (arg, options) {
84
+ var query = generateGraphQLDocument(modelIntrospection.models, name_1, operation);
85
+ var variables = buildGraphQLVariables(model, operation, arg, modelIntrospection);
86
+ var observable = client.graphql({
87
+ query: query,
88
+ variables: variables,
89
+ });
90
+ return observable.pipe(map(function (value) {
91
+ var _a = __read(Object.keys(value.data), 1), key = _a[0];
92
+ return value.data[key];
93
+ }));
94
+ };
95
+ }
81
96
  else {
82
97
  models[name_1][operationPrefix] = function (arg, options) { return __awaiter(_this, void 0, void 0, function () {
83
98
  var query, variables, _a, data, extensions, _b, key_2, flattenedResult, _c, initialized, error_2;