@webiny/api-headless-cms 0.0.0-unstable.1e66d121db → 0.0.0-unstable.3386f66516

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 (173) hide show
  1. package/context.d.ts +5 -2
  2. package/context.js +63 -4
  3. package/context.js.map +1 -1
  4. package/crud/contentEntry/markLockedFields.js +5 -2
  5. package/crud/contentEntry/markLockedFields.js.map +1 -1
  6. package/crud/contentEntry/referenceFieldsMapping.js +9 -5
  7. package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
  8. package/crud/contentEntry/searchableFields.d.ts +9 -0
  9. package/crud/contentEntry/searchableFields.js +83 -0
  10. package/crud/contentEntry/searchableFields.js.map +1 -0
  11. package/crud/contentEntry.crud.js +96 -42
  12. package/crud/contentEntry.crud.js.map +1 -1
  13. package/crud/contentModel/beforeCreate.d.ts +2 -3
  14. package/crud/contentModel/beforeCreate.js +4 -4
  15. package/crud/contentModel/beforeCreate.js.map +1 -1
  16. package/crud/contentModel/beforeUpdate.d.ts +2 -4
  17. package/crud/contentModel/beforeUpdate.js +2 -2
  18. package/crud/contentModel/beforeUpdate.js.map +1 -1
  19. package/crud/contentModel/createFieldStorageId.js +5 -1
  20. package/crud/contentModel/createFieldStorageId.js.map +1 -1
  21. package/crud/contentModel/models.js +12 -0
  22. package/crud/contentModel/models.js.map +1 -1
  23. package/crud/contentModel/validateModel.d.ts +3 -4
  24. package/crud/contentModel/validateModel.js +6 -3
  25. package/crud/contentModel/validateModel.js.map +1 -1
  26. package/crud/contentModel/validateModelFields.d.ts +3 -4
  27. package/crud/contentModel/validateModelFields.js +116 -39
  28. package/crud/contentModel/validateModelFields.js.map +1 -1
  29. package/crud/contentModel/validation.d.ts +477 -0
  30. package/crud/contentModel/validation.js +109 -0
  31. package/crud/contentModel/validation.js.map +1 -0
  32. package/crud/contentModel.crud.js +240 -188
  33. package/crud/contentModel.crud.js.map +1 -1
  34. package/crud/contentModelGroup/validation.d.ts +30 -0
  35. package/crud/contentModelGroup/validation.js +43 -0
  36. package/crud/contentModelGroup/validation.js.map +1 -0
  37. package/crud/contentModelGroup.crud.js +54 -54
  38. package/crud/contentModelGroup.crud.js.map +1 -1
  39. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.d.ts +11 -0
  40. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +239 -0
  41. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -0
  42. package/fieldConverters/index.d.ts +2 -1
  43. package/fieldConverters/index.js +3 -1
  44. package/fieldConverters/index.js.map +1 -1
  45. package/graphql/buildSchemaPlugins.d.ts +8 -3
  46. package/graphql/buildSchemaPlugins.js +3 -6
  47. package/graphql/buildSchemaPlugins.js.map +1 -1
  48. package/graphql/createExecutableSchema.d.ts +7 -0
  49. package/graphql/createExecutableSchema.js +33 -0
  50. package/graphql/createExecutableSchema.js.map +1 -0
  51. package/graphql/generateSchema.d.ts +8 -0
  52. package/graphql/generateSchema.js +38 -0
  53. package/graphql/generateSchema.js.map +1 -0
  54. package/graphql/graphQLHandlerFactory.js +101 -57
  55. package/graphql/graphQLHandlerFactory.js.map +1 -1
  56. package/graphql/index.d.ts +1 -3
  57. package/graphql/index.js +2 -41
  58. package/graphql/index.js.map +1 -1
  59. package/graphql/schema/baseContentSchema.d.ts +6 -2
  60. package/graphql/schema/baseContentSchema.js +8 -6
  61. package/graphql/schema/baseContentSchema.js.map +1 -1
  62. package/graphql/schema/baseSchema.d.ts +3 -0
  63. package/graphql/schema/baseSchema.js +60 -0
  64. package/graphql/schema/baseSchema.js.map +1 -0
  65. package/graphql/schema/contentEntries.d.ts +6 -2
  66. package/graphql/schema/contentEntries.js +12 -6
  67. package/graphql/schema/contentEntries.js.map +1 -1
  68. package/graphql/schema/contentModelGroups.d.ts +6 -2
  69. package/graphql/schema/contentModelGroups.js +8 -4
  70. package/graphql/schema/contentModelGroups.js.map +1 -1
  71. package/graphql/schema/contentModels.d.ts +6 -2
  72. package/graphql/schema/contentModels.js +63 -5
  73. package/graphql/schema/contentModels.js.map +1 -1
  74. package/graphql/schema/createFieldResolvers.d.ts +1 -1
  75. package/graphql/schema/createFieldResolvers.js +23 -7
  76. package/graphql/schema/createFieldResolvers.js.map +1 -1
  77. package/graphql/schema/createManageSDL.d.ts +2 -0
  78. package/graphql/schema/createManageSDL.js +9 -6
  79. package/graphql/schema/createManageSDL.js.map +1 -1
  80. package/graphql/schema/createReadResolvers.js +5 -0
  81. package/graphql/schema/createReadResolvers.js.map +1 -1
  82. package/graphql/schema/createReadSDL.d.ts +2 -0
  83. package/graphql/schema/createReadSDL.js +11 -5
  84. package/graphql/schema/createReadSDL.js.map +1 -1
  85. package/graphql/schema/schemaPlugins.d.ts +8 -3
  86. package/graphql/schema/schemaPlugins.js +58 -50
  87. package/graphql/schema/schemaPlugins.js.map +1 -1
  88. package/graphql/system.js +79 -82
  89. package/graphql/system.js.map +1 -1
  90. package/graphqlFields/dynamicZone/dynamicZoneField.d.ts +2 -0
  91. package/graphqlFields/dynamicZone/dynamicZoneField.js +234 -0
  92. package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -0
  93. package/graphqlFields/dynamicZone/dynamicZoneStorage.d.ts +3 -0
  94. package/graphqlFields/dynamicZone/dynamicZoneStorage.js +79 -0
  95. package/graphqlFields/dynamicZone/dynamicZoneStorage.js.map +1 -0
  96. package/graphqlFields/dynamicZone/index.d.ts +2 -0
  97. package/graphqlFields/dynamicZone/index.js +21 -0
  98. package/graphqlFields/dynamicZone/index.js.map +1 -0
  99. package/graphqlFields/index.d.ts +1 -1
  100. package/graphqlFields/index.js +3 -1
  101. package/graphqlFields/index.js.map +1 -1
  102. package/graphqlFields/number.js +4 -0
  103. package/graphqlFields/number.js.map +1 -1
  104. package/graphqlFields/object.js +122 -72
  105. package/graphqlFields/object.js.map +1 -1
  106. package/graphqlFields/ref.js +34 -48
  107. package/graphqlFields/ref.js.map +1 -1
  108. package/index.d.ts +3 -3
  109. package/index.js +4 -8
  110. package/index.js.map +1 -1
  111. package/package.json +26 -27
  112. package/plugins/CmsGraphQLSchemaPlugin.d.ts +5 -0
  113. package/plugins/CmsGraphQLSchemaPlugin.js +17 -0
  114. package/plugins/CmsGraphQLSchemaPlugin.js.map +1 -0
  115. package/plugins/CmsGraphQLSchemaSorterPlugin.d.ts +20 -0
  116. package/plugins/CmsGraphQLSchemaSorterPlugin.js +38 -0
  117. package/plugins/CmsGraphQLSchemaSorterPlugin.js.map +1 -0
  118. package/plugins/CmsModelFieldConverterPlugin.d.ts +2 -2
  119. package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
  120. package/plugins/StorageTransformPlugin.d.ts +11 -11
  121. package/plugins/StorageTransformPlugin.js.map +1 -1
  122. package/plugins/index.d.ts +2 -0
  123. package/plugins/index.js +26 -0
  124. package/plugins/index.js.map +1 -1
  125. package/storage/object.js +5 -2
  126. package/storage/object.js.map +1 -1
  127. package/types.d.ts +251 -57
  128. package/types.js +79 -7
  129. package/types.js.map +1 -1
  130. package/utils/converters/ConverterCollection.d.ts +7 -0
  131. package/utils/converters/ConverterCollection.js +32 -2
  132. package/utils/converters/ConverterCollection.js.map +1 -1
  133. package/utils/createTypeFromFields.d.ts +15 -0
  134. package/utils/createTypeFromFields.js +75 -0
  135. package/utils/createTypeFromFields.js.map +1 -0
  136. package/utils/createTypeName.js +3 -1
  137. package/utils/createTypeName.js.map +1 -1
  138. package/utils/entryStorage.js +15 -12
  139. package/utils/entryStorage.js.map +1 -1
  140. package/utils/getBaseFieldType.d.ts +4 -0
  141. package/utils/getBaseFieldType.js +12 -0
  142. package/utils/getBaseFieldType.js.map +1 -0
  143. package/utils/getSchemaFromFieldPlugins.d.ts +4 -7
  144. package/utils/getSchemaFromFieldPlugins.js +27 -14
  145. package/utils/getSchemaFromFieldPlugins.js.map +1 -1
  146. package/utils/renderFields.js +3 -1
  147. package/utils/renderFields.js.map +1 -1
  148. package/utils/renderGetFilterFields.js +8 -3
  149. package/utils/renderGetFilterFields.js.map +1 -1
  150. package/utils/renderInputFields.js +3 -1
  151. package/utils/renderInputFields.js.map +1 -1
  152. package/utils/renderListFilterFields.js +5 -2
  153. package/utils/renderListFilterFields.js.map +1 -1
  154. package/utils/renderSortEnum.d.ts +7 -4
  155. package/utils/renderSortEnum.js +23 -4
  156. package/utils/renderSortEnum.js.map +1 -1
  157. package/validators/dynamicZone.d.ts +2 -0
  158. package/validators/dynamicZone.js +24 -0
  159. package/validators/dynamicZone.js.map +1 -0
  160. package/validators/index.js +3 -1
  161. package/validators/index.js.map +1 -1
  162. package/crud/index.d.ts +0 -6
  163. package/crud/index.js +0 -85
  164. package/crud/index.js.map +0 -1
  165. package/graphql/schema/resolvers/manage/resolveRequestChanges.d.ts +0 -7
  166. package/graphql/schema/resolvers/manage/resolveRequestChanges.js +0 -21
  167. package/graphql/schema/resolvers/manage/resolveRequestChanges.js.map +0 -1
  168. package/graphql/schema/resolvers/manage/resolveRequestReview.d.ts +0 -7
  169. package/graphql/schema/resolvers/manage/resolveRequestReview.js +0 -21
  170. package/graphql/schema/resolvers/manage/resolveRequestReview.js.map +0 -1
  171. package/utils/filterModelFields.d.ts +0 -16
  172. package/utils/filterModelFields.js +0 -77
  173. package/utils/filterModelFields.js.map +0 -1
@@ -0,0 +1,239 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.CmsModelDynamicZoneFieldConverterPlugin = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _error = _interopRequireDefault(require("@webiny/error"));
13
+
14
+ var _CmsModelFieldConverterPlugin = require("../plugins/CmsModelFieldConverterPlugin");
15
+
16
+ class CmsModelDynamicZoneFieldConverterPlugin extends _CmsModelFieldConverterPlugin.CmsModelFieldConverterPlugin {
17
+ constructor(...args) {
18
+ super(...args);
19
+ (0, _defineProperty2.default)(this, "name", "cms.field.converter.dynamicZone");
20
+ }
21
+
22
+ getFieldType() {
23
+ return "dynamicZone";
24
+ }
25
+
26
+ getTemplates(field) {
27
+ var _field$settings;
28
+
29
+ return ((_field$settings = field.settings) === null || _field$settings === void 0 ? void 0 : _field$settings.templates) || [];
30
+ }
31
+
32
+ convertToStorage(params) {
33
+ const {
34
+ field,
35
+ value,
36
+ converterCollection
37
+ } = params;
38
+ const templates = this.getTemplates(field);
39
+
40
+ if (templates.length === 0) {
41
+ return {};
42
+ }
43
+
44
+ if (field.multipleValues) {
45
+ if (!Array.isArray(value)) {
46
+ throw new _error.default(`Dynamic zone field "${field.fieldId}" is expecting an array value.`, "DYNAMIC_ZONE_EXPECTING_ARRAY_VALUE", {
47
+ field,
48
+ value
49
+ });
50
+ }
51
+
52
+ return {
53
+ [field.storageId]: value.map(item => {
54
+ return this.processToStorage({
55
+ templates,
56
+ converterCollection,
57
+ value: item
58
+ });
59
+ })
60
+ };
61
+ }
62
+
63
+ if (Array.isArray(value)) {
64
+ throw new _error.default(`Dynamic zone field "${field.fieldId}" is expecting a non-array value.`, "DYNAMIC_ZONE_EXPECTING_NON_ARRAY_VALUE", {
65
+ field,
66
+ value
67
+ });
68
+ }
69
+
70
+ const processedValue = this.processToStorage({
71
+ templates,
72
+ converterCollection,
73
+ value
74
+ });
75
+ return {
76
+ [field.storageId]: processedValue
77
+ };
78
+ }
79
+
80
+ processToStorage(params) {
81
+ const {
82
+ templates,
83
+ converterCollection
84
+ } = params;
85
+ let {
86
+ value
87
+ } = params;
88
+
89
+ if (value === null || value === undefined) {
90
+ return undefined;
91
+ }
92
+ /**
93
+ * There are two ways converter needs to work:
94
+ * 1. when there is a _templateId
95
+ * 2. when there is a key which identifies which template is the data for
96
+ */
97
+
98
+ /**
99
+ * When we have a template key, everything is simple.
100
+ */
101
+
102
+
103
+ const templateId = value._templateId;
104
+ let graphQlName = undefined;
105
+ let template = undefined;
106
+
107
+ if (templateId) {
108
+ template = templates.find(t => {
109
+ return templateId === t.id;
110
+ });
111
+ }
112
+ /**
113
+ * When we do not have a templateId, then the template identifier is the key of the value object.
114
+ * But at that point, values under that key become the value we are working with later on.
115
+ */
116
+ //
117
+ else {
118
+ const keys = Object.keys(value);
119
+
120
+ if (keys.length === 0) {
121
+ return undefined;
122
+ } else if (keys.length > 1) {
123
+ throw new _error.default("There cannot be more than one dynamic zone template in a single dynamic zone field.", "DYNAMIC_ZONE_TOO_MANY_TEMPLATES", {
124
+ templates: keys
125
+ });
126
+ }
127
+
128
+ graphQlName = keys[0];
129
+ template = templates.find(t => t.gqlTypeName === graphQlName);
130
+ }
131
+
132
+ if (!template) {
133
+ throw new _error.default("Unknown template - converting to storage.", "UNKNOWN_TEMPLATE", {
134
+ templateId,
135
+ graphQlName
136
+ });
137
+ } else if (graphQlName) {
138
+ value = value[graphQlName];
139
+ }
140
+
141
+ return template.fields.reduce((values, field) => {
142
+ const converter = converterCollection.getConverter(field.type);
143
+ const converted = converter.convertToStorage({
144
+ field,
145
+ value: value ? value[field.fieldId] : undefined
146
+ });
147
+ Object.assign(values, converted);
148
+ return values;
149
+ }, {
150
+ _templateId: template.id
151
+ });
152
+ }
153
+
154
+ convertFromStorage(params) {
155
+ const {
156
+ field,
157
+ value,
158
+ converterCollection
159
+ } = params;
160
+ const templates = this.getTemplates(field);
161
+
162
+ if (templates.length === 0) {
163
+ return {};
164
+ }
165
+
166
+ if (field.multipleValues) {
167
+ if (!Array.isArray(value)) {
168
+ throw new _error.default(`Dynamic zone field "${field.fieldId}" is expecting an array value.`, "DYNAMIC_ZONE_EXPECTING_ARRAY_VALUE", {
169
+ field,
170
+ value
171
+ });
172
+ }
173
+
174
+ return {
175
+ [field.fieldId]: value.map(item => {
176
+ return this.processFromStorage({
177
+ templates,
178
+ converterCollection,
179
+ value: item
180
+ });
181
+ })
182
+ };
183
+ }
184
+
185
+ if (Array.isArray(value)) {
186
+ throw new _error.default(`Dynamic zone field "${field.fieldId}" is expecting a non-array value.`, "DYNAMIC_ZONE_EXPECTING_NON_ARRAY_VALUE", {
187
+ field,
188
+ value
189
+ });
190
+ }
191
+
192
+ const processedValue = this.processFromStorage({
193
+ templates,
194
+ converterCollection,
195
+ value
196
+ });
197
+ return {
198
+ [field.fieldId]: processedValue
199
+ };
200
+ }
201
+
202
+ processFromStorage(params) {
203
+ const {
204
+ templates,
205
+ value,
206
+ converterCollection
207
+ } = params;
208
+
209
+ if (value === null || value === undefined) {
210
+ return undefined;
211
+ }
212
+
213
+ const {
214
+ _templateId
215
+ } = value;
216
+ const template = templates.find(t => t.id === _templateId);
217
+
218
+ if (!template) {
219
+ throw new _error.default("Unknown template - converting from storage.", "UNKNOWN_TEMPLATE", {
220
+ templateId: _templateId
221
+ });
222
+ }
223
+
224
+ return template.fields.reduce((values, field) => {
225
+ const converter = converterCollection.getConverter(field.type);
226
+ const converted = converter.convertFromStorage({
227
+ field,
228
+ value: value[field.storageId]
229
+ });
230
+ Object.assign(values, converted);
231
+ return values;
232
+ }, {
233
+ _templateId: template.id
234
+ });
235
+ }
236
+
237
+ }
238
+
239
+ exports.CmsModelDynamicZoneFieldConverterPlugin = CmsModelDynamicZoneFieldConverterPlugin;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["CmsModelDynamicZoneFieldConverterPlugin","CmsModelFieldConverterPlugin","getFieldType","getTemplates","field","settings","templates","convertToStorage","params","value","converterCollection","length","multipleValues","Array","isArray","WebinyError","fieldId","storageId","map","item","processToStorage","processedValue","undefined","templateId","_templateId","graphQlName","template","find","t","id","keys","Object","gqlTypeName","fields","reduce","values","converter","getConverter","type","converted","assign","convertFromStorage","processFromStorage"],"sources":["CmsModelDynamicZoneFieldConverterPlugin.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport {\n CmsModelFieldConverterPlugin,\n ConvertParams\n} from \"~/plugins/CmsModelFieldConverterPlugin\";\nimport { CmsDynamicZoneTemplate, CmsEntryValues, CmsModelDynamicZoneField } from \"~/types\";\nimport { ConverterCollection } from \"~/utils/converters/ConverterCollection\";\n\ninterface DynamicZoneValue {\n [key: string]: any;\n}\n\ninterface ProcessValue {\n templates: CmsDynamicZoneTemplate[];\n value: DynamicZoneValue | null;\n converterCollection: ConverterCollection;\n}\n\nexport class CmsModelDynamicZoneFieldConverterPlugin extends CmsModelFieldConverterPlugin {\n public override name = \"cms.field.converter.dynamicZone\";\n\n public override getFieldType(): string {\n return \"dynamicZone\";\n }\n\n private getTemplates(field: CmsModelDynamicZoneField): CmsDynamicZoneTemplate[] {\n return field.settings?.templates || [];\n }\n\n public override convertToStorage(\n params: ConvertParams<CmsModelDynamicZoneField>\n ): CmsEntryValues {\n const { field, value, converterCollection } = params;\n\n const templates = this.getTemplates(field);\n\n if (templates.length === 0) {\n return {};\n }\n\n if (field.multipleValues) {\n if (!Array.isArray(value)) {\n throw new WebinyError(\n `Dynamic zone field \"${field.fieldId}\" is expecting an array value.`,\n \"DYNAMIC_ZONE_EXPECTING_ARRAY_VALUE\",\n {\n field,\n value\n }\n );\n }\n return {\n [field.storageId]: value.map(item => {\n return this.processToStorage({\n templates,\n converterCollection,\n value: item\n });\n })\n };\n }\n if (Array.isArray(value)) {\n throw new WebinyError(\n `Dynamic zone field \"${field.fieldId}\" is expecting a non-array value.`,\n \"DYNAMIC_ZONE_EXPECTING_NON_ARRAY_VALUE\",\n {\n field,\n value\n }\n );\n }\n\n const processedValue = this.processToStorage({\n templates,\n converterCollection,\n value\n });\n return {\n [field.storageId]: processedValue\n };\n }\n\n private processToStorage(params: ProcessValue) {\n const { templates, converterCollection } = params;\n let { value } = params;\n if (value === null || value === undefined) {\n return undefined;\n }\n /**\n * There are two ways converter needs to work:\n * 1. when there is a _templateId\n * 2. when there is a key which identifies which template is the data for\n */\n\n /**\n * When we have a template key, everything is simple.\n */\n const templateId = value._templateId;\n let graphQlName: string | undefined = undefined;\n let template: CmsDynamicZoneTemplate | undefined = undefined;\n if (templateId) {\n template = templates.find(t => {\n return templateId === t.id;\n });\n }\n /**\n * When we do not have a templateId, then the template identifier is the key of the value object.\n * But at that point, values under that key become the value we are working with later on.\n */\n //\n else {\n const keys = Object.keys(value);\n if (keys.length === 0) {\n return undefined;\n } else if (keys.length > 1) {\n throw new WebinyError(\n \"There cannot be more than one dynamic zone template in a single dynamic zone field.\",\n \"DYNAMIC_ZONE_TOO_MANY_TEMPLATES\",\n {\n templates: keys\n }\n );\n }\n graphQlName = keys[0] as string;\n template = templates.find(t => t.gqlTypeName === graphQlName);\n }\n\n if (!template) {\n throw new WebinyError(\"Unknown template - converting to storage.\", \"UNKNOWN_TEMPLATE\", {\n templateId,\n graphQlName\n });\n } else if (graphQlName) {\n value = value[graphQlName];\n }\n\n return template.fields.reduce<Record<string, any>>(\n (values, field) => {\n const converter = converterCollection.getConverter(field.type);\n const converted = converter.convertToStorage({\n field,\n value: value ? value[field.fieldId] : undefined\n });\n Object.assign(values, converted);\n return values;\n },\n {\n _templateId: template.id\n }\n );\n }\n\n public override convertFromStorage(\n params: ConvertParams<CmsModelDynamicZoneField>\n ): CmsEntryValues {\n const { field, value, converterCollection } = params;\n\n const templates = this.getTemplates(field);\n\n if (templates.length === 0) {\n return {};\n }\n\n if (field.multipleValues) {\n if (!Array.isArray(value)) {\n throw new WebinyError(\n `Dynamic zone field \"${field.fieldId}\" is expecting an array value.`,\n \"DYNAMIC_ZONE_EXPECTING_ARRAY_VALUE\",\n {\n field,\n value\n }\n );\n }\n return {\n [field.fieldId]: value.map(item => {\n return this.processFromStorage({\n templates,\n converterCollection,\n value: item\n });\n })\n };\n }\n if (Array.isArray(value)) {\n throw new WebinyError(\n `Dynamic zone field \"${field.fieldId}\" is expecting a non-array value.`,\n \"DYNAMIC_ZONE_EXPECTING_NON_ARRAY_VALUE\",\n {\n field,\n value\n }\n );\n }\n\n const processedValue = this.processFromStorage({\n templates,\n converterCollection,\n value\n });\n return {\n [field.fieldId]: processedValue\n };\n }\n\n private processFromStorage(params: ProcessValue) {\n const { templates, value, converterCollection } = params;\n if (value === null || value === undefined) {\n return undefined;\n }\n\n const { _templateId } = value;\n\n const template = templates.find(t => t.id === _templateId);\n if (!template) {\n throw new WebinyError(\n \"Unknown template - converting from storage.\",\n \"UNKNOWN_TEMPLATE\",\n {\n templateId: _templateId\n }\n );\n }\n\n return template.fields.reduce<Record<string, any>>(\n (values, field) => {\n const converter = converterCollection.getConverter(field.type);\n const converted = converter.convertFromStorage({\n field,\n value: value[field.storageId]\n });\n Object.assign(values, converted);\n return values;\n },\n {\n _templateId: template.id\n }\n );\n }\n}\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  import { CmsModelObjectFieldConverterPlugin } from "./CmsModelObjectFieldConverterPlugin";
2
2
  import { CmsModelDefaultFieldConverterPlugin } from "./CmsModelDefaultFieldConverterPlugin";
3
- export declare const createFieldConverters: () => (CmsModelObjectFieldConverterPlugin | CmsModelDefaultFieldConverterPlugin)[];
3
+ import { CmsModelDynamicZoneFieldConverterPlugin } from "./CmsModelDynamicZoneFieldConverterPlugin";
4
+ export declare const createFieldConverters: () => (CmsModelObjectFieldConverterPlugin | CmsModelDefaultFieldConverterPlugin | CmsModelDynamicZoneFieldConverterPlugin)[];
@@ -9,8 +9,10 @@ var _CmsModelObjectFieldConverterPlugin = require("./CmsModelObjectFieldConverte
9
9
 
10
10
  var _CmsModelDefaultFieldConverterPlugin = require("./CmsModelDefaultFieldConverterPlugin");
11
11
 
12
+ var _CmsModelDynamicZoneFieldConverterPlugin = require("./CmsModelDynamicZoneFieldConverterPlugin");
13
+
12
14
  const createFieldConverters = () => {
13
- return [new _CmsModelObjectFieldConverterPlugin.CmsModelObjectFieldConverterPlugin(), new _CmsModelDefaultFieldConverterPlugin.CmsModelDefaultFieldConverterPlugin()];
15
+ return [new _CmsModelObjectFieldConverterPlugin.CmsModelObjectFieldConverterPlugin(), new _CmsModelDynamicZoneFieldConverterPlugin.CmsModelDynamicZoneFieldConverterPlugin(), new _CmsModelDefaultFieldConverterPlugin.CmsModelDefaultFieldConverterPlugin()];
14
16
  };
15
17
 
16
18
  exports.createFieldConverters = createFieldConverters;
@@ -1 +1 @@
1
- {"version":3,"names":["createFieldConverters","CmsModelObjectFieldConverterPlugin","CmsModelDefaultFieldConverterPlugin"],"sources":["index.ts"],"sourcesContent":["import { CmsModelObjectFieldConverterPlugin } from \"~/fieldConverters/CmsModelObjectFieldConverterPlugin\";\nimport { CmsModelDefaultFieldConverterPlugin } from \"~/fieldConverters/CmsModelDefaultFieldConverterPlugin\";\n\nexport const createFieldConverters = () => {\n return [new CmsModelObjectFieldConverterPlugin(), new CmsModelDefaultFieldConverterPlugin()];\n};\n"],"mappings":";;;;;;;AAAA;;AACA;;AAEO,MAAMA,qBAAqB,GAAG,MAAM;EACvC,OAAO,CAAC,IAAIC,sEAAJ,EAAD,EAA2C,IAAIC,wEAAJ,EAA3C,CAAP;AACH,CAFM"}
1
+ {"version":3,"names":["createFieldConverters","CmsModelObjectFieldConverterPlugin","CmsModelDynamicZoneFieldConverterPlugin","CmsModelDefaultFieldConverterPlugin"],"sources":["index.ts"],"sourcesContent":["import { CmsModelObjectFieldConverterPlugin } from \"~/fieldConverters/CmsModelObjectFieldConverterPlugin\";\nimport { CmsModelDefaultFieldConverterPlugin } from \"~/fieldConverters/CmsModelDefaultFieldConverterPlugin\";\nimport { CmsModelDynamicZoneFieldConverterPlugin } from \"~/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin\";\n\nexport const createFieldConverters = () => {\n return [\n new CmsModelObjectFieldConverterPlugin(),\n new CmsModelDynamicZoneFieldConverterPlugin(),\n new CmsModelDefaultFieldConverterPlugin()\n ];\n};\n"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AAEO,MAAMA,qBAAqB,GAAG,MAAM;EACvC,OAAO,CACH,IAAIC,sEAAJ,EADG,EAEH,IAAIC,gFAAJ,EAFG,EAGH,IAAIC,wEAAJ,EAHG,CAAP;AAKH,CANM"}
@@ -1,6 +1,11 @@
1
- import { GraphQLSchemaPlugin } from "@webiny/handler-graphql/plugins/GraphQLSchemaPlugin";
2
- import { CmsContext } from "../types";
1
+ import { CmsContext, CmsModel } from "../types";
2
+ import { CmsGraphQLSchemaPlugin } from "../plugins";
3
3
  /**
4
4
  * This factory is called whenever we need to generate graphql-schema plugins using the current context.
5
5
  */
6
- export declare const buildSchemaPlugins: (context: CmsContext) => Promise<GraphQLSchemaPlugin<CmsContext>[]>;
6
+ interface BuildSchemaPluginsParams {
7
+ context: CmsContext;
8
+ models: CmsModel[];
9
+ }
10
+ export declare const buildSchemaPlugins: (params: BuildSchemaPluginsParams) => Promise<CmsGraphQLSchemaPlugin[]>;
11
+ export {};
@@ -15,13 +15,10 @@ var _baseContentSchema = require("./schema/baseContentSchema");
15
15
 
16
16
  var _schemaPlugins = require("./schema/schemaPlugins");
17
17
 
18
- /**
19
- * This factory is called whenever we need to generate graphql-schema plugins using the current context.
20
- */
21
- const buildSchemaPlugins = async context => {
18
+ const buildSchemaPlugins = async params => {
22
19
  return [// Base GQL types and scalars
23
- (0, _baseContentSchema.createBaseContentSchema)(context), (0, _contentModels.createModelsSchema)(context), (0, _contentEntries.createContentEntriesSchema)(context), (0, _contentModelGroups.createGroupsSchema)(context), // Dynamic schema
24
- ...(await (0, _schemaPlugins.generateSchemaPlugins)(context))].filter(Boolean);
20
+ (0, _baseContentSchema.createBaseContentSchema)(params), (0, _contentModels.createModelsSchema)(params), (0, _contentEntries.createContentEntriesSchema)(params), (0, _contentModelGroups.createGroupsSchema)(params), // Dynamic schema
21
+ ...(await (0, _schemaPlugins.generateSchemaPlugins)(params))].filter(Boolean);
25
22
  };
26
23
 
27
24
  exports.buildSchemaPlugins = buildSchemaPlugins;
@@ -1 +1 @@
1
- {"version":3,"names":["buildSchemaPlugins","context","createBaseContentSchema","createModelsSchema","createContentEntriesSchema","createGroupsSchema","generateSchemaPlugins","filter","Boolean"],"sources":["buildSchemaPlugins.ts"],"sourcesContent":["import { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/plugins/GraphQLSchemaPlugin\";\nimport { CmsContext } from \"~/types\";\nimport { createModelsSchema } from \"./schema/contentModels\";\nimport { createContentEntriesSchema } from \"./schema/contentEntries\";\nimport { createGroupsSchema } from \"./schema/contentModelGroups\";\nimport { createBaseContentSchema } from \"./schema/baseContentSchema\";\nimport { generateSchemaPlugins } from \"./schema/schemaPlugins\";\n\n/**\n * This factory is called whenever we need to generate graphql-schema plugins using the current context.\n */\n\nexport const buildSchemaPlugins = async (\n context: CmsContext\n): Promise<GraphQLSchemaPlugin<CmsContext>[]> => {\n return [\n // Base GQL types and scalars\n createBaseContentSchema(context),\n createModelsSchema(context),\n createContentEntriesSchema(context),\n createGroupsSchema(context),\n // Dynamic schema\n ...(await generateSchemaPlugins(context))\n ].filter(Boolean);\n};\n"],"mappings":";;;;;;;AAEA;;AACA;;AACA;;AACA;;AACA;;AAEA;AACA;AACA;AAEO,MAAMA,kBAAkB,GAAG,MAC9BC,OAD8B,IAEe;EAC7C,OAAO,CACH;EACA,IAAAC,0CAAA,EAAwBD,OAAxB,CAFG,EAGH,IAAAE,iCAAA,EAAmBF,OAAnB,CAHG,EAIH,IAAAG,0CAAA,EAA2BH,OAA3B,CAJG,EAKH,IAAAI,sCAAA,EAAmBJ,OAAnB,CALG,EAMH;EACA,IAAI,MAAM,IAAAK,oCAAA,EAAsBL,OAAtB,CAAV,CAPG,EAQLM,MARK,CAQEC,OARF,CAAP;AASH,CAZM"}
1
+ {"version":3,"names":["buildSchemaPlugins","params","createBaseContentSchema","createModelsSchema","createContentEntriesSchema","createGroupsSchema","generateSchemaPlugins","filter","Boolean"],"sources":["buildSchemaPlugins.ts"],"sourcesContent":["import { CmsContext, CmsModel } from \"~/types\";\nimport { createModelsSchema } from \"./schema/contentModels\";\nimport { createContentEntriesSchema } from \"./schema/contentEntries\";\nimport { createGroupsSchema } from \"./schema/contentModelGroups\";\nimport { createBaseContentSchema } from \"./schema/baseContentSchema\";\nimport { generateSchemaPlugins } from \"./schema/schemaPlugins\";\nimport { CmsGraphQLSchemaPlugin } from \"~/plugins\";\n\n/**\n * This factory is called whenever we need to generate graphql-schema plugins using the current context.\n */\ninterface BuildSchemaPluginsParams {\n context: CmsContext;\n models: CmsModel[];\n}\nexport const buildSchemaPlugins = async (\n params: BuildSchemaPluginsParams\n): Promise<CmsGraphQLSchemaPlugin[]> => {\n return [\n // Base GQL types and scalars\n createBaseContentSchema(params),\n createModelsSchema(params),\n createContentEntriesSchema(params),\n createGroupsSchema(params),\n // Dynamic schema\n ...(await generateSchemaPlugins(params))\n ].filter(Boolean);\n};\n"],"mappings":";;;;;;;AACA;;AACA;;AACA;;AACA;;AACA;;AAUO,MAAMA,kBAAkB,GAAG,MAC9BC,MAD8B,IAEM;EACpC,OAAO,CACH;EACA,IAAAC,0CAAA,EAAwBD,MAAxB,CAFG,EAGH,IAAAE,iCAAA,EAAmBF,MAAnB,CAHG,EAIH,IAAAG,0CAAA,EAA2BH,MAA3B,CAJG,EAKH,IAAAI,sCAAA,EAAmBJ,MAAnB,CALG,EAMH;EACA,IAAI,MAAM,IAAAK,oCAAA,EAAsBL,MAAtB,CAAV,CAPG,EAQLM,MARK,CAQEC,OARF,CAAP;AASH,CAZM"}
@@ -0,0 +1,7 @@
1
+ import { GraphQLSchemaPlugin } from "@webiny/handler-graphql";
2
+ import { CmsContext } from "../types";
3
+ interface Params {
4
+ plugins: GraphQLSchemaPlugin<CmsContext>[];
5
+ }
6
+ export declare const createExecutableSchema: (params: Params) => import("graphql").GraphQLSchema;
7
+ export {};
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createExecutableSchema = void 0;
7
+
8
+ var _schema = require("@graphql-tools/schema");
9
+
10
+ const createExecutableSchema = params => {
11
+ const {
12
+ plugins
13
+ } = params;
14
+ /**
15
+ * Really hard to type this to satisfy the makeExecutableSchema
16
+ */
17
+ // TODO @ts-refactor
18
+
19
+ const typeDefs = [];
20
+ const resolvers = []; // Get schema definitions from plugins
21
+
22
+ for (const plugin of plugins) {
23
+ typeDefs.push(plugin.schema.typeDefs);
24
+ resolvers.push(plugin.schema.resolvers);
25
+ }
26
+
27
+ return (0, _schema.makeExecutableSchema)({
28
+ typeDefs,
29
+ resolvers
30
+ });
31
+ };
32
+
33
+ exports.createExecutableSchema = createExecutableSchema;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createExecutableSchema","params","plugins","typeDefs","resolvers","plugin","push","schema","makeExecutableSchema"],"sources":["createExecutableSchema.ts"],"sourcesContent":["import { makeExecutableSchema } from \"@graphql-tools/schema\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { CmsContext } from \"~/types\";\n\ninterface Params {\n plugins: GraphQLSchemaPlugin<CmsContext>[];\n}\nexport const createExecutableSchema = (params: Params) => {\n const { plugins } = params;\n /**\n * Really hard to type this to satisfy the makeExecutableSchema\n */\n // TODO @ts-refactor\n const typeDefs: any = [];\n const resolvers: any = [];\n\n // Get schema definitions from plugins\n for (const plugin of plugins) {\n typeDefs.push(plugin.schema.typeDefs);\n resolvers.push(plugin.schema.resolvers);\n }\n\n return makeExecutableSchema({\n typeDefs,\n resolvers\n });\n};\n"],"mappings":";;;;;;;AAAA;;AAOO,MAAMA,sBAAsB,GAAIC,MAAD,IAAoB;EACtD,MAAM;IAAEC;EAAF,IAAcD,MAApB;EACA;AACJ;AACA;EACI;;EACA,MAAME,QAAa,GAAG,EAAtB;EACA,MAAMC,SAAc,GAAG,EAAvB,CAPsD,CAStD;;EACA,KAAK,MAAMC,MAAX,IAAqBH,OAArB,EAA8B;IAC1BC,QAAQ,CAACG,IAAT,CAAcD,MAAM,CAACE,MAAP,CAAcJ,QAA5B;IACAC,SAAS,CAACE,IAAV,CAAeD,MAAM,CAACE,MAAP,CAAcH,SAA7B;EACH;;EAED,OAAO,IAAAI,4BAAA,EAAqB;IACxBL,QADwB;IAExBC;EAFwB,CAArB,CAAP;AAIH,CAnBM"}
@@ -0,0 +1,8 @@
1
+ import { CmsContext, CmsModel } from "../types";
2
+ import { GraphQLSchema } from "graphql/type";
3
+ interface GenerateSchemaParams {
4
+ context: CmsContext;
5
+ models: CmsModel[];
6
+ }
7
+ export declare const generateSchema: (params: GenerateSchemaParams) => Promise<GraphQLSchema>;
8
+ export {};
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.generateSchema = void 0;
7
+
8
+ var _buildSchemaPlugins = require("./buildSchemaPlugins");
9
+
10
+ var _createExecutableSchema = require("./createExecutableSchema");
11
+
12
+ var _plugins = require("../plugins");
13
+
14
+ const generateSchema = async params => {
15
+ const {
16
+ context,
17
+ models
18
+ } = params;
19
+ let generatedSchemaPlugins = [];
20
+
21
+ try {
22
+ generatedSchemaPlugins = await (0, _buildSchemaPlugins.buildSchemaPlugins)({
23
+ context,
24
+ models
25
+ });
26
+ } catch (ex) {
27
+ console.log(`Error while building schema plugins.`);
28
+ throw ex;
29
+ }
30
+
31
+ context.plugins.register(generatedSchemaPlugins);
32
+ const schemaPlugins = context.plugins.byType(_plugins.CmsGraphQLSchemaPlugin.type);
33
+ return (0, _createExecutableSchema.createExecutableSchema)({
34
+ plugins: schemaPlugins
35
+ });
36
+ };
37
+
38
+ exports.generateSchema = generateSchema;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["generateSchema","params","context","models","generatedSchemaPlugins","buildSchemaPlugins","ex","console","log","plugins","register","schemaPlugins","byType","CmsGraphQLSchemaPlugin","type","createExecutableSchema"],"sources":["generateSchema.ts"],"sourcesContent":["import { CmsContext, CmsModel } from \"~/types\";\nimport { buildSchemaPlugins } from \"~/graphql/buildSchemaPlugins\";\nimport { createExecutableSchema } from \"~/graphql/createExecutableSchema\";\nimport { GraphQLSchema } from \"graphql/type\";\nimport { CmsGraphQLSchemaPlugin } from \"~/plugins\";\n\ninterface GenerateSchemaParams {\n context: CmsContext;\n models: CmsModel[];\n}\nexport const generateSchema = async (params: GenerateSchemaParams): Promise<GraphQLSchema> => {\n const { context, models } = params;\n\n let generatedSchemaPlugins: CmsGraphQLSchemaPlugin[] = [];\n try {\n generatedSchemaPlugins = await buildSchemaPlugins({ context, models });\n } catch (ex) {\n console.log(`Error while building schema plugins.`);\n throw ex;\n }\n\n context.plugins.register(generatedSchemaPlugins);\n\n const schemaPlugins = context.plugins.byType<CmsGraphQLSchemaPlugin>(\n CmsGraphQLSchemaPlugin.type\n );\n return createExecutableSchema({\n plugins: schemaPlugins\n });\n};\n"],"mappings":";;;;;;;AACA;;AACA;;AAEA;;AAMO,MAAMA,cAAc,GAAG,MAAOC,MAAP,IAAgE;EAC1F,MAAM;IAAEC,OAAF;IAAWC;EAAX,IAAsBF,MAA5B;EAEA,IAAIG,sBAAgD,GAAG,EAAvD;;EACA,IAAI;IACAA,sBAAsB,GAAG,MAAM,IAAAC,sCAAA,EAAmB;MAAEH,OAAF;MAAWC;IAAX,CAAnB,CAA/B;EACH,CAFD,CAEE,OAAOG,EAAP,EAAW;IACTC,OAAO,CAACC,GAAR,CAAa,sCAAb;IACA,MAAMF,EAAN;EACH;;EAEDJ,OAAO,CAACO,OAAR,CAAgBC,QAAhB,CAAyBN,sBAAzB;EAEA,MAAMO,aAAa,GAAGT,OAAO,CAACO,OAAR,CAAgBG,MAAhB,CAClBC,+BAAA,CAAuBC,IADL,CAAtB;EAGA,OAAO,IAAAC,8CAAA,EAAuB;IAC1BN,OAAO,EAAEE;EADiB,CAAvB,CAAP;AAGH,CAnBM"}
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.graphQLHandlerFactory = void 0;
9
9
 
10
- var _schema = require("@graphql-tools/schema");
10
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
11
 
12
12
  var _apiSecurity = require("@webiny/api-security");
13
13
 
@@ -15,11 +15,22 @@ var _debugPlugins = _interopRequireDefault(require("@webiny/handler-graphql/debu
15
15
 
16
16
  var _processRequestBody = _interopRequireDefault(require("@webiny/handler-graphql/processRequestBody"));
17
17
 
18
- var _buildSchemaPlugins = require("./buildSchemaPlugins");
18
+ var _handler = require("@webiny/handler");
19
19
 
20
- var _plugins = require("@webiny/handler-graphql/plugins");
20
+ var _error = _interopRequireDefault(require("@webiny/error"));
21
21
 
22
- var _handler = require("@webiny/handler");
22
+ var _codeFrame = _interopRequireDefault(require("code-frame"));
23
+
24
+ var _generateSchema = require("./generateSchema");
25
+
26
+ // @ts-ignore `code-frame` has no types
27
+ const createRequestBody = body => {
28
+ /**
29
+ * We are trusting that the body payload is correct.
30
+ * The `processRequestBody` will fail if it is not.
31
+ */
32
+ return typeof body === "string" ? JSON.parse(body) : body;
33
+ };
23
34
 
24
35
  const schemaList = new Map();
25
36
 
@@ -32,32 +43,6 @@ const generateCacheKey = async args => {
32
43
  const lastModelChange = await context.cms.getModelLastChange();
33
44
  return [locale.code, type, lastModelChange.toISOString()].join("#");
34
45
  };
35
-
36
- const generateSchema = async args => {
37
- const {
38
- context
39
- } = args;
40
- context.plugins.register(await (0, _buildSchemaPlugins.buildSchemaPlugins)(context));
41
- /**
42
- * Really hard to type this to satisfy the makeExecutableSchema
43
- */
44
- // TODO @ts-refactor
45
-
46
- const typeDefs = [];
47
- const resolvers = []; // Get schema definitions from plugins
48
-
49
- const schemaPlugins = context.plugins.byType(_plugins.GraphQLSchemaPlugin.type);
50
-
51
- for (const pl of schemaPlugins) {
52
- typeDefs.push(pl.schema.typeDefs);
53
- resolvers.push(pl.schema.resolvers);
54
- }
55
-
56
- return (0, _schema.makeExecutableSchema)({
57
- typeDefs,
58
- resolvers
59
- });
60
- };
61
46
  /**
62
47
  * Gets an existing schema or rewrites existing one or creates a completely new one
63
48
  * depending on the schemaId created from type and locale parameters
@@ -73,32 +58,48 @@ const getSchema = async params => {
73
58
  const tenantId = context.tenancy.getCurrentTenant().id;
74
59
  const id = `${tenantId}#${type}#${locale.code}`;
75
60
  const cacheKey = await generateCacheKey(params);
61
+ const cachedSchema = schemaList.get(id);
62
+
63
+ if ((cachedSchema === null || cachedSchema === void 0 ? void 0 : cachedSchema.key) === cacheKey) {
64
+ return cachedSchema.schema;
65
+ } // Load model data
66
+
76
67
 
77
- if (!schemaList.has(id)) {
78
- const schema = await generateSchema(params);
68
+ context.security.disableAuthorization();
69
+ const models = (await context.cms.listModels()).filter(model => model.isPrivate !== true);
70
+ context.security.enableAuthorization();
71
+
72
+ try {
73
+ const schema = await (0, _generateSchema.generateSchema)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, params), {}, {
74
+ models
75
+ }));
79
76
  schemaList.set(id, {
80
77
  key: cacheKey,
81
78
  schema
82
79
  });
83
80
  return schema;
84
- }
85
- /**
86
- * Safe to cast because check was done few lines up.
87
- */
88
-
89
-
90
- const cache = schemaList.get(id);
81
+ } catch (err) {
82
+ if (!Array.isArray(err.locations)) {
83
+ throw new _error.default({
84
+ message: err.message,
85
+ code: err.code || "INVALID_GRAPHQL_SCHEMA_LOCATIONS",
86
+ data: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, err.data || {}), {}, {
87
+ locations: err.locations
88
+ })
89
+ });
90
+ }
91
91
 
92
- if (cache.key === cacheKey) {
93
- return cache.schema;
92
+ const [location] = err.locations;
93
+ throw new _error.default({
94
+ code: "INVALID_GRAPHQL_SCHEMA",
95
+ message: err.message,
96
+ data: {
97
+ invalidSegment: (0, _codeFrame.default)(err.source.body, location.line, location.column, {
98
+ frameSize: 15
99
+ })
100
+ }
101
+ });
94
102
  }
95
-
96
- const schema = await generateSchema(params);
97
- schemaList.set(id, {
98
- key: cacheKey,
99
- schema
100
- });
101
- return schema;
102
103
  };
103
104
 
104
105
  const checkEndpointAccess = async context => {
@@ -113,6 +114,24 @@ const checkEndpointAccess = async context => {
113
114
  }
114
115
  };
115
116
 
117
+ const formatErrorPayload = error => {
118
+ if (error instanceof _error.default) {
119
+ return JSON.stringify({
120
+ type: "CmsGraphQLWebinyError",
121
+ message: error.message,
122
+ code: error.code,
123
+ data: error.data
124
+ });
125
+ }
126
+
127
+ return JSON.stringify({
128
+ type: "Error",
129
+ name: error.name,
130
+ message: error.message,
131
+ stack: error.stack
132
+ });
133
+ };
134
+
116
135
  const cmsRoutes = new _handler.RoutePlugin(({
117
136
  onPost,
118
137
  onOptions,
@@ -133,19 +152,44 @@ const cmsRoutes = new _handler.RoutePlugin(({
133
152
  });
134
153
  }
135
154
 
136
- const schema = await getSchema({
137
- context,
138
- locale: context.cms.getLocale(),
139
- type: context.cms.type
140
- });
141
- const body = request.body;
142
- const result = await (0, _processRequestBody.default)(body, schema, context);
143
- return reply.code(200).send(result);
155
+ let schema;
156
+
157
+ try {
158
+ schema = await getSchema({
159
+ context,
160
+ locale: context.cms.getLocale(),
161
+ type: context.cms.type
162
+ });
163
+ } catch (ex) {
164
+ console.log(`Error while generating the schema.`);
165
+ console.log(formatErrorPayload(ex));
166
+ throw ex;
167
+ }
168
+
169
+ let body = [];
170
+
171
+ try {
172
+ body = createRequestBody(request.body);
173
+ } catch (ex) {
174
+ console.log(`Error while creating the body request.`);
175
+ console.log(formatErrorPayload(ex));
176
+ throw ex;
177
+ }
178
+
179
+ try {
180
+ const result = await (0, _processRequestBody.default)(body, schema, context);
181
+ return reply.code(200).send(result);
182
+ } catch (ex) {
183
+ console.log(`Error while processing the body request.`);
184
+ console.log(formatErrorPayload(ex));
185
+ throw ex;
186
+ }
144
187
  });
145
188
  onOptions("/cms/:type(^manage|preview|read$)/:locale", async (_, reply) => {
146
- return reply.hijack().send({});
189
+ return reply.status(204).send({}).hijack();
147
190
  });
148
191
  });
192
+ cmsRoutes.name = "headless-cms.graphql.route.default";
149
193
 
150
194
  const graphQLHandlerFactory = ({
151
195
  debug