@webiny/api-headless-cms 0.0.0-unstable.611c5af35e → 0.0.0-unstable.615a930a68

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 (277) hide show
  1. package/context.js +15 -0
  2. package/context.js.map +1 -1
  3. package/crud/contentEntry/afterDelete.js +5 -0
  4. package/crud/contentEntry/afterDelete.js.map +1 -1
  5. package/crud/contentEntry/beforeCreate.js +3 -0
  6. package/crud/contentEntry/beforeCreate.js.map +1 -1
  7. package/crud/contentEntry/beforeUpdate.js +3 -0
  8. package/crud/contentEntry/beforeUpdate.js.map +1 -1
  9. package/crud/contentEntry/entryDataValidation.js +40 -1
  10. package/crud/contentEntry/entryDataValidation.js.map +1 -1
  11. package/crud/contentEntry/markLockedFields.js +25 -2
  12. package/crud/contentEntry/markLockedFields.js.map +1 -1
  13. package/crud/contentEntry/referenceFieldsMapping.js +59 -5
  14. package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
  15. package/crud/contentEntry/searchableFields.d.ts +9 -0
  16. package/crud/contentEntry/searchableFields.js +83 -0
  17. package/crud/contentEntry/searchableFields.js.map +1 -0
  18. package/crud/contentEntry.crud.js +146 -55
  19. package/crud/contentEntry.crud.js.map +1 -1
  20. package/crud/contentModel/afterCreate.js +2 -0
  21. package/crud/contentModel/afterCreate.js.map +1 -1
  22. package/crud/contentModel/afterCreateFrom.js +2 -0
  23. package/crud/contentModel/afterCreateFrom.js.map +1 -1
  24. package/crud/contentModel/afterDelete.js +2 -0
  25. package/crud/contentModel/afterDelete.js.map +1 -1
  26. package/crud/contentModel/afterUpdate.js +2 -0
  27. package/crud/contentModel/afterUpdate.js.map +1 -1
  28. package/crud/contentModel/beforeCreate.js +32 -4
  29. package/crud/contentModel/beforeCreate.js.map +1 -1
  30. package/crud/contentModel/beforeDelete.js +10 -0
  31. package/crud/contentModel/beforeDelete.js.map +1 -1
  32. package/crud/contentModel/beforeUpdate.js +5 -0
  33. package/crud/contentModel/beforeUpdate.js.map +1 -1
  34. package/crud/contentModel/contentModelManagerFactory.js +7 -0
  35. package/crud/contentModel/contentModelManagerFactory.js.map +1 -1
  36. package/crud/contentModel/createFieldModels.js +6 -0
  37. package/crud/contentModel/createFieldModels.js.map +1 -1
  38. package/crud/contentModel/createFieldStorageId.js +2 -0
  39. package/crud/contentModel/createFieldStorageId.js.map +1 -1
  40. package/crud/contentModel/fieldIdValidation.js +5 -0
  41. package/crud/contentModel/fieldIdValidation.js.map +1 -1
  42. package/crud/contentModel/idValidation.js +5 -0
  43. package/crud/contentModel/idValidation.js.map +1 -1
  44. package/crud/contentModel/models.js +8 -1
  45. package/crud/contentModel/models.js.map +1 -1
  46. package/crud/contentModel/systemFields.js.map +1 -1
  47. package/crud/contentModel/validateLayout.js +8 -0
  48. package/crud/contentModel/validateLayout.js.map +1 -1
  49. package/crud/contentModel/validateModel.js +8 -0
  50. package/crud/contentModel/validateModel.js.map +1 -1
  51. package/crud/contentModel/validateModelFields.js +60 -8
  52. package/crud/contentModel/validateModelFields.js.map +1 -1
  53. package/crud/contentModel.crud.js +96 -11
  54. package/crud/contentModel.crud.js.map +1 -1
  55. package/crud/contentModelGroup/beforeCreate.js +12 -0
  56. package/crud/contentModelGroup/beforeCreate.js.map +1 -1
  57. package/crud/contentModelGroup/beforeDelete.js +8 -0
  58. package/crud/contentModelGroup/beforeDelete.js.map +1 -1
  59. package/crud/contentModelGroup/beforeUpdate.js +5 -0
  60. package/crud/contentModelGroup/beforeUpdate.js.map +1 -1
  61. package/crud/contentModelGroup.crud.js +47 -10
  62. package/crud/contentModelGroup.crud.js.map +1 -1
  63. package/crud/index.js +16 -0
  64. package/crud/index.js.map +1 -1
  65. package/crud/settings.crud.js +12 -0
  66. package/crud/settings.crud.js.map +1 -1
  67. package/crud/system.crud.js +37 -2
  68. package/crud/system.crud.js.map +1 -1
  69. package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +13 -0
  70. package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js.map +1 -1
  71. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +53 -0
  72. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
  73. package/fieldConverters/index.js +4 -0
  74. package/fieldConverters/index.js.map +1 -1
  75. package/graphql/buildSchemaPlugins.js +9 -5
  76. package/graphql/buildSchemaPlugins.js.map +1 -1
  77. package/graphql/graphQLHandlerFactory.js +28 -3
  78. package/graphql/graphQLHandlerFactory.js.map +1 -1
  79. package/graphql/index.js +8 -1
  80. package/graphql/index.js.map +1 -1
  81. package/graphql/schema/baseContentSchema.js +9 -1
  82. package/graphql/schema/baseContentSchema.js.map +1 -1
  83. package/graphql/schema/contentEntries.js +42 -2
  84. package/graphql/schema/contentEntries.js.map +1 -1
  85. package/graphql/schema/contentModelGroups.js +19 -2
  86. package/graphql/schema/contentModelGroups.js.map +1 -1
  87. package/graphql/schema/contentModels.js +18 -2
  88. package/graphql/schema/contentModels.js.map +1 -1
  89. package/graphql/schema/createFieldResolvers.js +21 -3
  90. package/graphql/schema/createFieldResolvers.js.map +1 -1
  91. package/graphql/schema/createManageResolvers.js +26 -0
  92. package/graphql/schema/createManageResolvers.js.map +1 -1
  93. package/graphql/schema/createManageSDL.js +17 -2
  94. package/graphql/schema/createManageSDL.js.map +1 -1
  95. package/graphql/schema/createPreviewResolvers.js +10 -0
  96. package/graphql/schema/createPreviewResolvers.js.map +1 -1
  97. package/graphql/schema/createReadResolvers.js +10 -0
  98. package/graphql/schema/createReadResolvers.js.map +1 -1
  99. package/graphql/schema/createReadSDL.js +13 -1
  100. package/graphql/schema/createReadSDL.js.map +1 -1
  101. package/graphql/schema/resolvers/commonFieldResolvers.js +2 -0
  102. package/graphql/schema/resolvers/commonFieldResolvers.js.map +1 -1
  103. package/graphql/schema/resolvers/manage/resolveCreate.js +3 -0
  104. package/graphql/schema/resolvers/manage/resolveCreate.js.map +1 -1
  105. package/graphql/schema/resolvers/manage/resolveCreateFrom.js +3 -0
  106. package/graphql/schema/resolvers/manage/resolveCreateFrom.js.map +1 -1
  107. package/graphql/schema/resolvers/manage/resolveDelete.js +6 -0
  108. package/graphql/schema/resolvers/manage/resolveDelete.js.map +1 -1
  109. package/graphql/schema/resolvers/manage/resolveGet.js +16 -0
  110. package/graphql/schema/resolvers/manage/resolveGet.js.map +1 -1
  111. package/graphql/schema/resolvers/manage/resolveGetByIds.js +3 -0
  112. package/graphql/schema/resolvers/manage/resolveGetByIds.js.map +1 -1
  113. package/graphql/schema/resolvers/manage/resolveGetRevisions.js +3 -0
  114. package/graphql/schema/resolvers/manage/resolveGetRevisions.js.map +1 -1
  115. package/graphql/schema/resolvers/manage/resolveList.js +3 -0
  116. package/graphql/schema/resolvers/manage/resolveList.js.map +1 -1
  117. package/graphql/schema/resolvers/manage/resolvePublish.js +3 -0
  118. package/graphql/schema/resolvers/manage/resolvePublish.js.map +1 -1
  119. package/graphql/schema/resolvers/manage/resolveRepublish.js +3 -0
  120. package/graphql/schema/resolvers/manage/resolveRepublish.js.map +1 -1
  121. package/graphql/schema/resolvers/manage/resolveUnpublish.js +3 -0
  122. package/graphql/schema/resolvers/manage/resolveUnpublish.js.map +1 -1
  123. package/graphql/schema/resolvers/manage/resolveUpdate.js +3 -0
  124. package/graphql/schema/resolvers/manage/resolveUpdate.js.map +1 -1
  125. package/graphql/schema/resolvers/preview/resolveGet.js +8 -0
  126. package/graphql/schema/resolvers/preview/resolveGet.js.map +1 -1
  127. package/graphql/schema/resolvers/preview/resolveList.js +3 -0
  128. package/graphql/schema/resolvers/preview/resolveList.js.map +1 -1
  129. package/graphql/schema/resolvers/read/resolveGet.js +8 -0
  130. package/graphql/schema/resolvers/read/resolveGet.js.map +1 -1
  131. package/graphql/schema/resolvers/read/resolveList.js +3 -0
  132. package/graphql/schema/resolvers/read/resolveList.js.map +1 -1
  133. package/graphql/schema/schemaPlugins.js +19 -5
  134. package/graphql/schema/schemaPlugins.js.map +1 -1
  135. package/graphql/system.js +14 -1
  136. package/graphql/system.js.map +1 -1
  137. package/graphqlFields/boolean.js +12 -0
  138. package/graphqlFields/boolean.js.map +1 -1
  139. package/graphqlFields/datetime.js +17 -0
  140. package/graphqlFields/datetime.js.map +1 -1
  141. package/graphqlFields/file.js +8 -0
  142. package/graphqlFields/file.js.map +1 -1
  143. package/graphqlFields/helpers.js +10 -0
  144. package/graphqlFields/helpers.js.map +1 -1
  145. package/graphqlFields/index.js +11 -0
  146. package/graphqlFields/index.js.map +1 -1
  147. package/graphqlFields/longText.js +10 -0
  148. package/graphqlFields/longText.js.map +1 -1
  149. package/graphqlFields/number.js +16 -0
  150. package/graphqlFields/number.js.map +1 -1
  151. package/graphqlFields/object.js +137 -21
  152. package/graphqlFields/object.js.map +1 -1
  153. package/graphqlFields/ref.js +51 -17
  154. package/graphqlFields/ref.js.map +1 -1
  155. package/graphqlFields/richText.js +9 -0
  156. package/graphqlFields/richText.js.map +1 -1
  157. package/graphqlFields/text.js +11 -0
  158. package/graphqlFields/text.js.map +1 -1
  159. package/index.js +19 -0
  160. package/index.js.map +1 -1
  161. package/modelManager/DefaultCmsModelManager.js +16 -0
  162. package/modelManager/DefaultCmsModelManager.js.map +1 -1
  163. package/modelManager/index.js +4 -0
  164. package/modelManager/index.js.map +1 -1
  165. package/package.json +24 -24
  166. package/parameters/context.js +4 -0
  167. package/parameters/context.js.map +1 -1
  168. package/parameters/header.js +11 -0
  169. package/parameters/header.js.map +1 -1
  170. package/parameters/index.js +8 -0
  171. package/parameters/index.js.map +1 -1
  172. package/parameters/manual.js +8 -1
  173. package/parameters/manual.js.map +1 -1
  174. package/parameters/path.js +11 -0
  175. package/parameters/path.js.map +1 -1
  176. package/plugins/CmsGroupPlugin.js +8 -0
  177. package/plugins/CmsGroupPlugin.js.map +1 -1
  178. package/plugins/CmsModelFieldConverterPlugin.js +5 -0
  179. package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
  180. package/plugins/CmsModelPlugin.js +38 -2
  181. package/plugins/CmsModelPlugin.js.map +1 -1
  182. package/plugins/CmsParametersPlugin.js +7 -0
  183. package/plugins/CmsParametersPlugin.js.map +1 -1
  184. package/plugins/StorageTransformPlugin.d.ts +1 -1
  185. package/plugins/StorageTransformPlugin.js +9 -0
  186. package/plugins/StorageTransformPlugin.js.map +1 -1
  187. package/plugins/index.js +10 -0
  188. package/plugins/index.js.map +1 -1
  189. package/storage/default.js +3 -0
  190. package/storage/default.js.map +1 -1
  191. package/storage/object.js +18 -0
  192. package/storage/object.js.map +1 -1
  193. package/types.d.ts +9 -1
  194. package/types.js +62 -0
  195. package/types.js.map +1 -1
  196. package/upgrades/5.33.0/index.js +26 -3
  197. package/upgrades/5.33.0/index.js.map +1 -1
  198. package/upgrades/index.js +3 -0
  199. package/upgrades/index.js.map +1 -1
  200. package/utils/access.js +25 -11
  201. package/utils/access.js.map +1 -1
  202. package/utils/converters/Converter.js +13 -0
  203. package/utils/converters/Converter.js.map +1 -1
  204. package/utils/converters/ConverterCollection.js +32 -9
  205. package/utils/converters/ConverterCollection.js.map +1 -1
  206. package/utils/converters/valueKeyStorageConverter.js +26 -0
  207. package/utils/converters/valueKeyStorageConverter.js.map +1 -1
  208. package/utils/createTypeName.js +8 -0
  209. package/utils/createTypeName.js.map +1 -1
  210. package/utils/entryStorage.js +26 -10
  211. package/utils/entryStorage.js.map +1 -1
  212. package/utils/filterAsync.js +5 -0
  213. package/utils/filterAsync.js.map +1 -1
  214. package/utils/filterModelFields.js +9 -3
  215. package/utils/filterModelFields.js.map +1 -1
  216. package/utils/getEntryTitle.js +9 -0
  217. package/utils/getEntryTitle.js.map +1 -1
  218. package/utils/getSchemaFromFieldPlugins.js +6 -2
  219. package/utils/getSchemaFromFieldPlugins.js.map +1 -1
  220. package/utils/ownership.js +8 -0
  221. package/utils/ownership.js.map +1 -1
  222. package/utils/permissions.js +23 -8
  223. package/utils/permissions.js.map +1 -1
  224. package/utils/pluralizedTypeName.js +6 -0
  225. package/utils/pluralizedTypeName.js.map +1 -1
  226. package/utils/renderFields.js +8 -0
  227. package/utils/renderFields.js.map +1 -1
  228. package/utils/renderGetFilterFields.js +11 -0
  229. package/utils/renderGetFilterFields.js.map +1 -1
  230. package/utils/renderInputFields.js +8 -0
  231. package/utils/renderInputFields.js.map +1 -1
  232. package/utils/renderListFilterFields.js +11 -2
  233. package/utils/renderListFilterFields.js.map +1 -1
  234. package/utils/renderSortEnum.js +7 -0
  235. package/utils/renderSortEnum.js.map +1 -1
  236. package/utils/toSlug.js +4 -0
  237. package/utils/toSlug.js.map +1 -1
  238. package/validators/dateGte.js +7 -0
  239. package/validators/dateGte.js.map +1 -1
  240. package/validators/dateLte.js +7 -0
  241. package/validators/dateLte.js.map +1 -1
  242. package/validators/gte.js +8 -0
  243. package/validators/gte.js.map +1 -1
  244. package/validators/in.js +8 -0
  245. package/validators/in.js.map +1 -1
  246. package/validators/index.js +15 -0
  247. package/validators/index.js.map +1 -1
  248. package/validators/lte.js +8 -0
  249. package/validators/lte.js.map +1 -1
  250. package/validators/maxLength.js +8 -0
  251. package/validators/maxLength.js.map +1 -1
  252. package/validators/minLength.js +8 -0
  253. package/validators/minLength.js.map +1 -1
  254. package/validators/pattern.js +9 -0
  255. package/validators/pattern.js.map +1 -1
  256. package/validators/patternPlugins/email.js +2 -0
  257. package/validators/patternPlugins/email.js.map +1 -1
  258. package/validators/patternPlugins/index.js +8 -0
  259. package/validators/patternPlugins/index.js.map +1 -1
  260. package/validators/patternPlugins/lowerCase.js +2 -0
  261. package/validators/patternPlugins/lowerCase.js.map +1 -1
  262. package/validators/patternPlugins/lowerCaseSpace.js +2 -0
  263. package/validators/patternPlugins/lowerCaseSpace.js.map +1 -1
  264. package/validators/patternPlugins/upperCase.js +2 -0
  265. package/validators/patternPlugins/upperCase.js.map +1 -1
  266. package/validators/patternPlugins/upperCaseSpace.js +2 -0
  267. package/validators/patternPlugins/upperCaseSpace.js.map +1 -1
  268. package/validators/patternPlugins/url.js +2 -0
  269. package/validators/patternPlugins/url.js.map +1 -1
  270. package/validators/required.js +5 -0
  271. package/validators/required.js.map +1 -1
  272. package/validators/timeGte.js +8 -0
  273. package/validators/timeGte.js.map +1 -1
  274. package/validators/timeLte.js +8 -0
  275. package/validators/timeLte.js.map +1 -1
  276. package/validators/unique.js +7 -0
  277. package/validators/unique.js.map +1 -1
@@ -1,66 +1,81 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports.createObjectField = void 0;
9
+
10
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
+
8
12
  var _upperFirst = _interopRequireDefault(require("lodash/upperFirst"));
13
+
9
14
  var _renderFields = require("../utils/renderFields");
15
+
10
16
  var _renderInputFields = require("../utils/renderInputFields");
17
+
11
18
  var _createTypeName = require("../utils/createTypeName");
19
+
12
20
  var _helpers = require("./helpers");
21
+
13
22
  const typeFromField = params => {
14
- var _field$settings;
23
+ var _parentField$settings;
24
+
15
25
  const {
16
26
  typeOfType,
17
27
  model,
18
28
  type,
19
- field,
29
+ field: parentField,
20
30
  fieldTypePlugins
21
31
  } = params;
22
32
  const typeSuffix = typeOfType === "input" ? "Input" : "";
23
33
  const typeName = (0, _createTypeName.createTypeName)(model.modelId);
24
- const mTypeName = (0, _createTypeName.createManageTypeName)(typeName);
34
+ const mTypeName = (0, _createTypeName.createManageTypeName)(typeName); // `field` is an "object" field
25
35
 
26
- // `field` is an "object" field
27
- const fields = ((_field$settings = field.settings) === null || _field$settings === void 0 ? void 0 : _field$settings.fields) || [];
28
- const fieldTypeName = `${mTypeName}_${(0, _upperFirst.default)(field.fieldId)}`;
36
+ const fields = ((_parentField$settings = parentField.settings) === null || _parentField$settings === void 0 ? void 0 : _parentField$settings.fields) || [];
37
+ const fieldTypeName = `${mTypeName}_${(0, _upperFirst.default)(parentField.fieldId)}`;
29
38
  const typeFields = [];
30
- const nestedTypes = [];
31
-
32
- // Once the loop below starts, we'll be executing a recursive "object" type generation.
39
+ const nestedTypes = []; // Once the loop below starts, we'll be executing a recursive "object" type generation.
33
40
  // The main trick here is that nested objects don't know who the parent is, and will generate
34
41
  // type names using the "model", as if they're at the top level:
35
42
  // Every time the types are returned, we need to replace the model name in the generated type name
36
43
  // with the actual prefix which includes parent field name type.
44
+
37
45
  const replace = new RegExp(`${mTypeName}_`, "g");
38
- for (const f of fields) {
46
+
47
+ for (const field of fields) {
39
48
  const result = typeOfType === "type" ? (0, _renderFields.renderField)({
40
- field: f,
49
+ field,
41
50
  type,
42
51
  model,
43
52
  fieldTypePlugins
44
53
  }) : (0, _renderInputFields.renderInputField)({
45
- field: f,
54
+ field,
46
55
  model,
47
56
  fieldTypePlugins
48
57
  });
58
+
49
59
  if (!result) {
50
60
  continue;
51
61
  }
62
+
52
63
  const {
53
64
  fields,
54
65
  typeDefs
55
66
  } = result;
56
67
  typeFields.push(fields.replace(replace, `${fieldTypeName}_`));
68
+
57
69
  if (typeDefs) {
58
70
  nestedTypes.push(typeDefs.replace(replace, `${fieldTypeName}_`));
59
71
  }
60
72
  }
73
+
61
74
  return {
62
75
  fieldType: `${fieldTypeName}${typeSuffix}`,
63
- typeDefs: /* GraphQL */`
76
+ typeDefs:
77
+ /* GraphQL */
78
+ `
64
79
  ${nestedTypes.join("\n")}
65
80
 
66
81
  ${typeOfType} ${fieldTypeName}${typeSuffix} {
@@ -69,6 +84,77 @@ const typeFromField = params => {
69
84
  `
70
85
  };
71
86
  };
87
+
88
+ const createChildTypeDefs = params => {
89
+ var _field$settings, _field$settings2;
90
+
91
+ const {
92
+ field,
93
+ plugins,
94
+ model,
95
+ endpointType
96
+ } = params;
97
+ const fields = ((_field$settings = field.settings) === null || _field$settings === void 0 ? void 0 : _field$settings.fields) || [];
98
+ const typeName = createTypeName({
99
+ model,
100
+ field,
101
+ parents: (_field$settings2 = field.settings) === null || _field$settings2 === void 0 ? void 0 : _field$settings2.parents
102
+ });
103
+ const filters = fields.map(child => {
104
+ var _child$settings;
105
+
106
+ const createListFilters = plugins[child.type][endpointType].createListFilters;
107
+
108
+ if (!createListFilters) {
109
+ return null;
110
+ }
111
+
112
+ const filters = createListFilters({
113
+ model,
114
+ field: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, child), {}, {
115
+ settings: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, child.settings), {}, {
116
+ parents: (((_child$settings = child.settings) === null || _child$settings === void 0 ? void 0 : _child$settings.parents) || []).concat([field.fieldId])
117
+ })
118
+ }),
119
+ plugins
120
+ });
121
+
122
+ if (!filters) {
123
+ return null;
124
+ }
125
+
126
+ return filters;
127
+ }).filter(Boolean).join("\n");
128
+ return `input ${typeName}WhereInput {
129
+ ${filters}
130
+ }`;
131
+ };
132
+
133
+ const createTypeName = params => {
134
+ const {
135
+ model,
136
+ parents = [],
137
+ field
138
+ } = params;
139
+ return [model.modelId].concat(parents).concat([field.fieldId]).filter(Boolean).map(id => {
140
+ return (0, _upperFirst.default)(id);
141
+ }).join("_");
142
+ };
143
+
144
+ const createListFilters = ({
145
+ field,
146
+ model
147
+ }) => {
148
+ var _field$settings3;
149
+
150
+ const typeName = createTypeName({
151
+ model,
152
+ field,
153
+ parents: (_field$settings3 = field.settings) === null || _field$settings3 === void 0 ? void 0 : _field$settings3.parents
154
+ });
155
+ return `${field.fieldId}: ${typeName}WhereInput`;
156
+ };
157
+
72
158
  const createObjectField = () => {
73
159
  return {
74
160
  name: "cms-model-field-to-graphql-object",
@@ -89,27 +175,38 @@ const createObjectField = () => {
89
175
  field,
90
176
  fieldTypePlugins
91
177
  });
178
+
92
179
  if (!result) {
93
180
  return null;
94
181
  }
182
+
95
183
  const {
96
184
  fieldType,
97
185
  typeDefs
98
186
  } = result;
187
+ const childTypeDefs = createChildTypeDefs({
188
+ model,
189
+ field,
190
+ plugins: fieldTypePlugins,
191
+ endpointType: "read"
192
+ });
99
193
  return {
100
194
  fields: `${field.fieldId}: ${field.multipleValues ? `[${fieldType}!]` : fieldType}`,
101
- typeDefs
195
+ typeDefs: `${typeDefs}${childTypeDefs}`
102
196
  };
103
197
  },
198
+
104
199
  createResolver({
105
200
  field,
106
201
  createFieldResolvers,
107
202
  graphQLType
108
203
  }) {
109
- var _field$settings2;
110
- if (!((_field$settings2 = field.settings) !== null && _field$settings2 !== void 0 && _field$settings2.fields) || field.settings.fields.length === 0) {
204
+ var _field$settings4;
205
+
206
+ if (!((_field$settings4 = field.settings) !== null && _field$settings4 !== void 0 && _field$settings4.fields) || field.settings.fields.length === 0) {
111
207
  return false;
112
208
  }
209
+
113
210
  const fieldType = `${graphQLType}_${(0, _upperFirst.default)(field.fieldId)}`;
114
211
  const typeResolvers = createFieldResolvers({
115
212
  graphQLType: fieldType,
@@ -119,7 +216,9 @@ const createObjectField = () => {
119
216
  resolver: null,
120
217
  typeResolvers: typeResolvers || {}
121
218
  };
122
- }
219
+ },
220
+
221
+ createListFilters
123
222
  },
124
223
  manage: {
125
224
  createTypeField({
@@ -134,18 +233,27 @@ const createObjectField = () => {
134
233
  field,
135
234
  fieldTypePlugins
136
235
  });
236
+
137
237
  if (!result) {
138
238
  return null;
139
239
  }
240
+
140
241
  const {
141
242
  fieldType,
142
243
  typeDefs
143
244
  } = result;
245
+ const childTypeDefs = createChildTypeDefs({
246
+ model,
247
+ field,
248
+ plugins: fieldTypePlugins,
249
+ endpointType: "manage"
250
+ });
144
251
  return {
145
252
  fields: `${field.fieldId}: ${field.multipleValues ? `[${fieldType}!]` : fieldType}`,
146
- typeDefs
253
+ typeDefs: `${typeDefs}${childTypeDefs}`
147
254
  };
148
255
  },
256
+
149
257
  createInputField({
150
258
  model,
151
259
  field,
@@ -158,9 +266,11 @@ const createObjectField = () => {
158
266
  field,
159
267
  fieldTypePlugins
160
268
  });
269
+
161
270
  if (!result) {
162
271
  return null;
163
272
  }
273
+
164
274
  const {
165
275
  fieldType,
166
276
  typeDefs
@@ -170,15 +280,18 @@ const createObjectField = () => {
170
280
  typeDefs
171
281
  };
172
282
  },
283
+
173
284
  createResolver({
174
285
  graphQLType,
175
286
  field,
176
287
  createFieldResolvers
177
288
  }) {
178
- var _field$settings3;
179
- if (!((_field$settings3 = field.settings) !== null && _field$settings3 !== void 0 && _field$settings3.fields) || field.settings.fields.length === 0) {
289
+ var _field$settings5;
290
+
291
+ if (!((_field$settings5 = field.settings) !== null && _field$settings5 !== void 0 && _field$settings5.fields) || field.settings.fields.length === 0) {
180
292
  return false;
181
293
  }
294
+
182
295
  const fieldType = `${graphQLType}_${(0, _upperFirst.default)(field.fieldId)}`;
183
296
  const typeResolvers = createFieldResolvers({
184
297
  graphQLType: fieldType,
@@ -188,8 +301,11 @@ const createObjectField = () => {
188
301
  resolver: null,
189
302
  typeResolvers: typeResolvers || {}
190
303
  };
191
- }
304
+ },
305
+
306
+ createListFilters
192
307
  }
193
308
  };
194
309
  };
310
+
195
311
  exports.createObjectField = createObjectField;
@@ -1 +1 @@
1
- {"version":3,"names":["typeFromField","params","typeOfType","model","type","field","fieldTypePlugins","typeSuffix","typeName","createTypeName","modelId","mTypeName","createManageTypeName","fields","settings","fieldTypeName","upperFirst","fieldId","typeFields","nestedTypes","replace","RegExp","f","result","renderField","renderInputField","typeDefs","push","fieldType","join","createObjectField","name","isSortable","isSearchable","read","createTypeField","multipleValues","createResolver","createFieldResolvers","graphQLType","length","typeResolvers","resolver","manage","createInputField","attachRequiredFieldValue"],"sources":["object.ts"],"sourcesContent":["import upperFirst from \"lodash/upperFirst\";\nimport {\n ApiEndpoint,\n CmsFieldTypePlugins,\n CmsModel,\n CmsModelField,\n CmsModelFieldToGraphQLPlugin\n} from \"~/types\";\nimport { renderField } from \"~/utils/renderFields\";\nimport { renderInputField } from \"~/utils/renderInputFields\";\nimport { createManageTypeName, createTypeName } from \"~/utils/createTypeName\";\nimport { attachRequiredFieldValue } from \"./helpers\";\n\ninterface TypeFromFieldParams {\n typeOfType: string;\n model: CmsModel;\n type: ApiEndpoint;\n field: CmsModelField;\n fieldTypePlugins: CmsFieldTypePlugins;\n}\ninterface TypeFromFieldResponse {\n fieldType: string;\n typeDefs: string;\n}\nconst typeFromField = (params: TypeFromFieldParams): TypeFromFieldResponse | null => {\n const { typeOfType, model, type, field, fieldTypePlugins } = params;\n const typeSuffix = typeOfType === \"input\" ? \"Input\" : \"\";\n const typeName = createTypeName(model.modelId);\n const mTypeName = createManageTypeName(typeName);\n\n // `field` is an \"object\" field\n const fields: CmsModelField[] = field.settings?.fields || [];\n\n const fieldTypeName = `${mTypeName}_${upperFirst(field.fieldId)}`;\n\n const typeFields = [];\n const nestedTypes = [];\n\n // Once the loop below starts, we'll be executing a recursive \"object\" type generation.\n // The main trick here is that nested objects don't know who the parent is, and will generate\n // type names using the \"model\", as if they're at the top level:\n // Every time the types are returned, we need to replace the model name in the generated type name\n // with the actual prefix which includes parent field name type.\n const replace = new RegExp(`${mTypeName}_`, \"g\");\n\n for (const f of fields) {\n const result =\n typeOfType === \"type\"\n ? renderField({ field: f, type, model, fieldTypePlugins })\n : renderInputField({ field: f, model, fieldTypePlugins });\n\n if (!result) {\n continue;\n }\n\n const { fields, typeDefs } = result;\n\n typeFields.push(fields.replace(replace, `${fieldTypeName}_`));\n if (typeDefs) {\n nestedTypes.push(typeDefs.replace(replace, `${fieldTypeName}_`));\n }\n }\n\n return {\n fieldType: `${fieldTypeName}${typeSuffix}`,\n typeDefs: /* GraphQL */ `\n ${nestedTypes.join(\"\\n\")}\n \n ${typeOfType} ${fieldTypeName}${typeSuffix} {\n ${typeFields.join(\"\\n\")}\n }\n `\n };\n};\n\nexport const createObjectField = (): CmsModelFieldToGraphQLPlugin => {\n return {\n name: \"cms-model-field-to-graphql-object\",\n type: \"cms-model-field-to-graphql\",\n fieldType: \"object\",\n isSortable: false,\n isSearchable: false,\n read: {\n createTypeField({ field, model, fieldTypePlugins }) {\n const result = typeFromField({\n typeOfType: \"type\",\n model,\n type: \"read\",\n field,\n fieldTypePlugins\n });\n\n if (!result) {\n return null;\n }\n const { fieldType, typeDefs } = result;\n\n return {\n fields: `${field.fieldId}: ${\n field.multipleValues ? `[${fieldType}!]` : fieldType\n }`,\n typeDefs\n };\n },\n createResolver({ field, createFieldResolvers, graphQLType }) {\n if (!field.settings?.fields || field.settings.fields.length === 0) {\n return false;\n }\n\n const fieldType = `${graphQLType}_${upperFirst(field.fieldId)}`;\n\n const typeResolvers = createFieldResolvers({\n graphQLType: fieldType,\n fields: field.settings.fields\n });\n return {\n resolver: null,\n typeResolvers: typeResolvers || {}\n };\n }\n },\n manage: {\n createTypeField({ model, field, fieldTypePlugins }) {\n const result = typeFromField({\n typeOfType: \"type\",\n model,\n type: \"manage\",\n field,\n fieldTypePlugins\n });\n\n if (!result) {\n return null;\n }\n const { fieldType, typeDefs } = result;\n\n return {\n fields: `${field.fieldId}: ${\n field.multipleValues ? `[${fieldType}!]` : fieldType\n }`,\n typeDefs\n };\n },\n createInputField({ model, field, fieldTypePlugins }) {\n const result = typeFromField({\n typeOfType: \"input\",\n model,\n type: \"manage\",\n field,\n fieldTypePlugins\n });\n if (!result) {\n return null;\n }\n const { fieldType, typeDefs } = result;\n\n return {\n fields: attachRequiredFieldValue(\n `${field.fieldId}: ${field.multipleValues ? `[${fieldType}!]` : fieldType}`,\n field\n ),\n typeDefs\n };\n },\n createResolver({ graphQLType, field, createFieldResolvers }) {\n if (!field.settings?.fields || field.settings.fields.length === 0) {\n return false;\n }\n const fieldType = `${graphQLType}_${upperFirst(field.fieldId)}`;\n const typeResolvers = createFieldResolvers({\n graphQLType: fieldType,\n fields: field.settings.fields\n });\n return {\n resolver: null,\n typeResolvers: typeResolvers || {}\n };\n }\n }\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["typeFromField","params","typeOfType","model","type","field","parentField","fieldTypePlugins","typeSuffix","typeName","createModelTypeName","modelId","mTypeName","createManageTypeName","fields","settings","fieldTypeName","upperFirst","fieldId","typeFields","nestedTypes","replace","RegExp","result","renderField","renderInputField","typeDefs","push","fieldType","join","createChildTypeDefs","plugins","endpointType","createTypeName","parents","filters","map","child","createListFilters","concat","filter","Boolean","id","lodashUpperFirst","createObjectField","name","isSortable","isSearchable","read","createTypeField","childTypeDefs","multipleValues","createResolver","createFieldResolvers","graphQLType","length","typeResolvers","resolver","manage","createInputField","attachRequiredFieldValue"],"sources":["object.ts"],"sourcesContent":["import upperFirst from \"lodash/upperFirst\";\nimport {\n ApiEndpoint,\n CmsFieldTypePlugins,\n CmsModel,\n CmsModelField,\n CmsModelFieldToGraphQLPlugin\n} from \"~/types\";\nimport { renderField } from \"~/utils/renderFields\";\nimport { renderInputField } from \"~/utils/renderInputFields\";\nimport {\n createManageTypeName,\n createTypeName as createModelTypeName\n} from \"~/utils/createTypeName\";\nimport { attachRequiredFieldValue } from \"./helpers\";\nimport lodashUpperFirst from \"lodash/upperFirst\";\n\ninterface TypeFromFieldParams {\n typeOfType: string;\n model: CmsModel;\n type: ApiEndpoint;\n field: CmsModelField;\n fieldTypePlugins: CmsFieldTypePlugins;\n}\ninterface TypeFromFieldResponse {\n fieldType: string;\n typeDefs: string;\n}\nconst typeFromField = (params: TypeFromFieldParams): TypeFromFieldResponse | null => {\n const { typeOfType, model, type, field: parentField, fieldTypePlugins } = params;\n const typeSuffix = typeOfType === \"input\" ? \"Input\" : \"\";\n const typeName = createModelTypeName(model.modelId);\n const mTypeName = createManageTypeName(typeName);\n\n // `field` is an \"object\" field\n const fields: CmsModelField[] = parentField.settings?.fields || [];\n\n const fieldTypeName = `${mTypeName}_${upperFirst(parentField.fieldId)}`;\n\n const typeFields = [];\n const nestedTypes = [];\n\n // Once the loop below starts, we'll be executing a recursive \"object\" type generation.\n // The main trick here is that nested objects don't know who the parent is, and will generate\n // type names using the \"model\", as if they're at the top level:\n // Every time the types are returned, we need to replace the model name in the generated type name\n // with the actual prefix which includes parent field name type.\n const replace = new RegExp(`${mTypeName}_`, \"g\");\n\n for (const field of fields) {\n const result =\n typeOfType === \"type\"\n ? renderField({\n field,\n type,\n model,\n fieldTypePlugins\n })\n : renderInputField({\n field,\n model,\n fieldTypePlugins\n });\n\n if (!result) {\n continue;\n }\n\n const { fields, typeDefs } = result;\n\n typeFields.push(fields.replace(replace, `${fieldTypeName}_`));\n if (typeDefs) {\n nestedTypes.push(typeDefs.replace(replace, `${fieldTypeName}_`));\n }\n }\n\n return {\n fieldType: `${fieldTypeName}${typeSuffix}`,\n typeDefs: /* GraphQL */ `\n ${nestedTypes.join(\"\\n\")}\n \n ${typeOfType} ${fieldTypeName}${typeSuffix} {\n ${typeFields.join(\"\\n\")}\n }\n `\n };\n};\n\ninterface AttachTypeDefinitionsParams {\n model: CmsModel;\n field: CmsModelField;\n plugins: CmsFieldTypePlugins;\n endpointType: \"manage\" | \"read\";\n}\nconst createChildTypeDefs = (params: AttachTypeDefinitionsParams): string => {\n const { field, plugins, model, endpointType } = params;\n const fields = field.settings?.fields || [];\n\n const typeName = createTypeName({\n model,\n field,\n parents: field.settings?.parents\n });\n\n const filters = fields\n .map(child => {\n const createListFilters = plugins[child.type][endpointType].createListFilters;\n if (!createListFilters) {\n return null;\n }\n\n const filters = createListFilters({\n model,\n field: {\n ...child,\n settings: {\n ...child.settings,\n parents: (child.settings?.parents || []).concat([field.fieldId])\n }\n },\n plugins\n });\n if (!filters) {\n return null;\n }\n return filters;\n })\n .filter(Boolean)\n .join(\"\\n\");\n return `input ${typeName}WhereInput {\n ${filters}\n }`;\n};\n\ninterface CreateTypeNameParams {\n model: CmsModel;\n parents?: string[];\n field: CmsModelField;\n}\nconst createTypeName = (params: CreateTypeNameParams): string => {\n const { model, parents = [], field } = params;\n return [model.modelId]\n .concat(parents)\n .concat([field.fieldId])\n .filter(Boolean)\n .map(id => {\n return lodashUpperFirst(id);\n })\n .join(\"_\");\n};\n\ninterface CreateListFiltersParams {\n field: CmsModelField;\n model: CmsModel;\n}\nconst createListFilters = ({ field, model }: CreateListFiltersParams) => {\n const typeName = createTypeName({\n model,\n field,\n parents: field.settings?.parents\n });\n\n return `${field.fieldId}: ${typeName}WhereInput`;\n};\n\nexport const createObjectField = (): CmsModelFieldToGraphQLPlugin => {\n return {\n name: \"cms-model-field-to-graphql-object\",\n type: \"cms-model-field-to-graphql\",\n fieldType: \"object\",\n isSortable: false,\n isSearchable: false,\n read: {\n createTypeField({ field, model, fieldTypePlugins }) {\n const result = typeFromField({\n typeOfType: \"type\",\n model,\n type: \"read\",\n field,\n fieldTypePlugins\n });\n\n if (!result) {\n return null;\n }\n const { fieldType, typeDefs } = result;\n\n const childTypeDefs = createChildTypeDefs({\n model,\n field,\n plugins: fieldTypePlugins,\n endpointType: \"read\"\n });\n\n return {\n fields: `${field.fieldId}: ${\n field.multipleValues ? `[${fieldType}!]` : fieldType\n }`,\n typeDefs: `${typeDefs}${childTypeDefs}`\n };\n },\n createResolver({ field, createFieldResolvers, graphQLType }) {\n if (!field.settings?.fields || field.settings.fields.length === 0) {\n return false;\n }\n\n const fieldType = `${graphQLType}_${upperFirst(field.fieldId)}`;\n\n const typeResolvers = createFieldResolvers({\n graphQLType: fieldType,\n fields: field.settings.fields\n });\n return {\n resolver: null,\n typeResolvers: typeResolvers || {}\n };\n },\n createListFilters\n },\n manage: {\n createTypeField({ model, field, fieldTypePlugins }) {\n const result = typeFromField({\n typeOfType: \"type\",\n model,\n type: \"manage\",\n field,\n fieldTypePlugins\n });\n\n if (!result) {\n return null;\n }\n const { fieldType, typeDefs } = result;\n\n const childTypeDefs = createChildTypeDefs({\n model,\n field,\n plugins: fieldTypePlugins,\n endpointType: \"manage\"\n });\n\n return {\n fields: `${field.fieldId}: ${\n field.multipleValues ? `[${fieldType}!]` : fieldType\n }`,\n typeDefs: `${typeDefs}${childTypeDefs}`\n };\n },\n createInputField({ model, field, fieldTypePlugins }) {\n const result = typeFromField({\n typeOfType: \"input\",\n model,\n type: \"manage\",\n field,\n fieldTypePlugins\n });\n if (!result) {\n return null;\n }\n const { fieldType, typeDefs } = result;\n\n return {\n fields: attachRequiredFieldValue(\n `${field.fieldId}: ${field.multipleValues ? `[${fieldType}!]` : fieldType}`,\n field\n ),\n typeDefs\n };\n },\n createResolver({ graphQLType, field, createFieldResolvers }) {\n if (!field.settings?.fields || field.settings.fields.length === 0) {\n return false;\n }\n const fieldType = `${graphQLType}_${upperFirst(field.fieldId)}`;\n const typeResolvers = createFieldResolvers({\n graphQLType: fieldType,\n fields: field.settings.fields\n });\n return {\n resolver: null,\n typeResolvers: typeResolvers || {}\n };\n },\n createListFilters\n }\n };\n};\n"],"mappings":"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"}
@@ -1,17 +1,24 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports.createRefField = void 0;
9
+
8
10
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
+
9
12
  var _createTypeName = require("../utils/createTypeName");
13
+
10
14
  var _utils = require("@webiny/utils");
15
+
11
16
  var _helpers = require("./helpers");
17
+
12
18
  const createUnionTypeName = (model, field) => {
13
19
  return `${(0, _createTypeName.createReadTypeName)(model.modelId)}${(0, _createTypeName.createReadTypeName)(field.fieldId)}`;
14
20
  };
21
+
15
22
  const createListFilters = ({
16
23
  field
17
24
  }) => {
@@ -19,6 +26,7 @@ const createListFilters = ({
19
26
  ${field.fieldId}: RefFieldWhereInput
20
27
  `;
21
28
  };
29
+
22
30
  const createFilteringTypeDef = () => {
23
31
  return `
24
32
  input RefFieldWhereInput {
@@ -33,6 +41,7 @@ const createFilteringTypeDef = () => {
33
41
  }
34
42
  `;
35
43
  };
44
+
36
45
  const appendTypename = (entries, typename) => {
37
46
  return entries.map(item => {
38
47
  return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, item), {}, {
@@ -44,13 +53,18 @@ const appendTypename = (entries, typename) => {
44
53
  * We cast settings.models as object to have modelId because internally we know that it is so.
45
54
  * Internal stuff so we are sure that settings.models contains what we require.
46
55
  */
56
+
57
+
47
58
  const getFieldModels = field => {
48
59
  if (!field.settings || Array.isArray(field.settings.models) === false) {
49
60
  return [];
50
61
  }
62
+
51
63
  return field.settings.models;
52
64
  };
65
+
53
66
  const modelIdToTypeName = new Map();
67
+
54
68
  const createRefField = () => {
55
69
  return {
56
70
  name: "cms-model-field-to-graphql-ref",
@@ -64,10 +78,12 @@ const createRefField = () => {
64
78
  field
65
79
  }) {
66
80
  var _field$settings;
81
+
67
82
  const models = ((_field$settings = field.settings) === null || _field$settings === void 0 ? void 0 : _field$settings.models) || [];
68
83
  const gqlType = models.length > 1 ? createUnionTypeName(model, field) : (0, _createTypeName.createReadTypeName)(models[0].modelId);
69
84
  return field.fieldId + `: ${field.multipleValues ? `[${gqlType}]` : gqlType}`;
70
85
  },
86
+
71
87
  /**
72
88
  * TS is complaining about mixed types for createResolver.
73
89
  * TODO @ts-refactor @pavel Maybe we should have a single createResolver method?
@@ -75,92 +91,103 @@ const createRefField = () => {
75
91
  // @ts-ignore
76
92
  createResolver(params) {
77
93
  var _field$settings2;
94
+
78
95
  const {
79
96
  field
80
- } = params;
81
- // Create a map of model types and corresponding modelIds so resolvers don't need to perform the lookup.
97
+ } = params; // Create a map of model types and corresponding modelIds so resolvers don't need to perform the lookup.
98
+
82
99
  const models = ((_field$settings2 = field.settings) === null || _field$settings2 === void 0 ? void 0 : _field$settings2.models) || [];
100
+
83
101
  for (const item of models) {
84
102
  modelIdToTypeName.set(item.modelId, (0, _createTypeName.createReadTypeName)(item.modelId));
85
103
  }
104
+
86
105
  return async (parent, _, context) => {
87
106
  const {
88
107
  cms
89
- } = context;
108
+ } = context; // Get field value for this entry
90
109
 
91
- // Get field value for this entry
92
110
  const initialValue = parent[field.fieldId];
111
+
93
112
  if (!initialValue) {
94
113
  return null;
95
114
  }
115
+
96
116
  if (field.multipleValues) {
97
117
  /**
98
118
  * We cast because value really can be array and single value.
99
119
  * At this point, we are 99% sure that it is an array (+ we check for it)
100
120
  */
101
121
  const value = initialValue;
122
+
102
123
  if (Array.isArray(value) === false || value.length === 0) {
103
124
  return [];
104
125
  }
126
+
105
127
  const entriesByModel = value.reduce((collection, ref) => {
106
128
  if (!collection[ref.modelId]) {
107
129
  collection[ref.modelId] = [];
108
130
  } else if (collection[ref.modelId].includes(ref.entryId) === true) {
109
131
  return collection;
110
132
  }
133
+
111
134
  collection[ref.modelId].push(ref.entryId);
112
135
  return collection;
113
136
  }, {});
114
137
  const getters = Object.keys(entriesByModel).map(async modelId => {
115
- const idList = entriesByModel[modelId];
116
- // Get model manager, to get access to CRUD methods
138
+ const idList = entriesByModel[modelId]; // Get model manager, to get access to CRUD methods
139
+
117
140
  const model = await cms.getModelManager(modelId);
118
- let entries;
119
- // `read` API works with `published` data
141
+ let entries; // `read` API works with `published` data
142
+
120
143
  if (cms.READ) {
121
144
  entries = await model.getPublishedByIds(idList);
122
- }
123
- // `preview` and `manage` with `latest` data
145
+ } // `preview` and `manage` with `latest` data
124
146
  else {
125
147
  entries = await model.getLatestByIds(idList);
126
148
  }
149
+
127
150
  return appendTypename(entries, modelIdToTypeName.get(modelId));
128
151
  });
129
152
  return await Promise.all(getters).then(results => results.reduce((result, item) => result.concat(item), []));
130
153
  }
131
- const value = initialValue;
132
154
 
133
- // Get model manager, to get access to CRUD methods
155
+ const value = initialValue; // Get model manager, to get access to CRUD methods
156
+
134
157
  const model = await cms.getModelManager(value.modelId);
135
- let revisions;
136
- // `read` API works with `published` data
158
+ let revisions; // `read` API works with `published` data
159
+
137
160
  if (cms.READ) {
138
161
  revisions = await model.getPublishedByIds([value.entryId]);
139
- }
140
- // `preview` API works with `latest` data
162
+ } // `preview` API works with `latest` data
141
163
  else {
142
164
  revisions = await model.getLatestByIds([value.entryId]);
143
165
  }
144
-
145
166
  /**
146
167
  * If there are no revisions we must return null.
147
168
  */
169
+
170
+
148
171
  if (!revisions || revisions.length === 0) {
149
172
  return null;
150
173
  }
174
+
151
175
  return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, revisions[0]), {}, {
152
176
  __typename: modelIdToTypeName.get(value.modelId)
153
177
  });
154
178
  };
155
179
  },
180
+
156
181
  createSchema({
157
182
  models
158
183
  }) {
159
184
  const unionFields = [];
185
+
160
186
  for (const model of models) {
161
187
  // Generate a dedicated union type for every `ref` field which has more than 1 content model assigned.
162
188
  model.fields.filter(field => {
163
189
  var _field$settings3;
190
+
164
191
  return field.type === "ref" && (((_field$settings3 = field.settings) === null || _field$settings3 === void 0 ? void 0 : _field$settings3.models) || []).length > 1;
165
192
  }).forEach(field => unionFields.push({
166
193
  model,
@@ -168,6 +195,7 @@ const createRefField = () => {
168
195
  typeName: createUnionTypeName(model, field)
169
196
  }));
170
197
  }
198
+
171
199
  const unionFieldsTypeDef = unionFields.map(({
172
200
  field,
173
201
  typeName
@@ -184,6 +212,7 @@ const createRefField = () => {
184
212
  resolvers: {}
185
213
  };
186
214
  },
215
+
187
216
  createListFilters
188
217
  },
189
218
  manage: {
@@ -221,21 +250,26 @@ const createRefField = () => {
221
250
  }
222
251
  };
223
252
  },
253
+
224
254
  createTypeField({
225
255
  field
226
256
  }) {
227
257
  if (field.multipleValues) {
228
258
  return `${field.fieldId}: [RefField!]`;
229
259
  }
260
+
230
261
  return `${field.fieldId}: RefField`;
231
262
  },
263
+
232
264
  createInputField({
233
265
  field
234
266
  }) {
235
267
  return (0, _helpers.createGraphQLInputField)(field, "RefFieldInput");
236
268
  },
269
+
237
270
  createListFilters
238
271
  }
239
272
  };
240
273
  };
274
+
241
275
  exports.createRefField = createRefField;