@webiny/api-headless-cms 0.0.0-unstable.40876133bb → 0.0.0-unstable.60e968001a

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 (146) 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 +65 -40
  12. package/crud/contentEntry.crud.js.map +1 -1
  13. package/crud/contentModel/createFieldStorageId.js +5 -1
  14. package/crud/contentModel/createFieldStorageId.js.map +1 -1
  15. package/crud/contentModel/models.js +12 -0
  16. package/crud/contentModel/models.js.map +1 -1
  17. package/crud/contentModel/validateModelFields.js +46 -37
  18. package/crud/contentModel/validateModelFields.js.map +1 -1
  19. package/crud/contentModel/validation.d.ts +477 -0
  20. package/crud/contentModel/validation.js +109 -0
  21. package/crud/contentModel/validation.js.map +1 -0
  22. package/crud/contentModel.crud.js +227 -175
  23. package/crud/contentModel.crud.js.map +1 -1
  24. package/crud/contentModelGroup/validation.d.ts +30 -0
  25. package/crud/contentModelGroup/validation.js +43 -0
  26. package/crud/contentModelGroup/validation.js.map +1 -0
  27. package/crud/contentModelGroup.crud.js +54 -54
  28. package/crud/contentModelGroup.crud.js.map +1 -1
  29. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.d.ts +11 -0
  30. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +239 -0
  31. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -0
  32. package/fieldConverters/index.d.ts +2 -1
  33. package/fieldConverters/index.js +3 -1
  34. package/fieldConverters/index.js.map +1 -1
  35. package/graphql/buildSchemaPlugins.d.ts +2 -2
  36. package/graphql/buildSchemaPlugins.js.map +1 -1
  37. package/graphql/graphQLHandlerFactory.js +58 -28
  38. package/graphql/graphQLHandlerFactory.js.map +1 -1
  39. package/graphql/index.d.ts +2 -2
  40. package/graphql/index.js +49 -38
  41. package/graphql/index.js.map +1 -1
  42. package/graphql/schema/baseContentSchema.d.ts +2 -2
  43. package/graphql/schema/baseContentSchema.js +3 -3
  44. package/graphql/schema/baseContentSchema.js.map +1 -1
  45. package/graphql/schema/contentEntries.d.ts +2 -2
  46. package/graphql/schema/contentEntries.js +5 -5
  47. package/graphql/schema/contentEntries.js.map +1 -1
  48. package/graphql/schema/contentModelGroups.d.ts +2 -2
  49. package/graphql/schema/contentModelGroups.js +3 -3
  50. package/graphql/schema/contentModelGroups.js.map +1 -1
  51. package/graphql/schema/contentModels.d.ts +2 -2
  52. package/graphql/schema/contentModels.js +26 -7
  53. package/graphql/schema/contentModels.js.map +1 -1
  54. package/graphql/schema/createFieldResolvers.d.ts +1 -1
  55. package/graphql/schema/createFieldResolvers.js +23 -7
  56. package/graphql/schema/createFieldResolvers.js.map +1 -1
  57. package/graphql/schema/createManageSDL.d.ts +2 -0
  58. package/graphql/schema/createManageSDL.js +9 -6
  59. package/graphql/schema/createManageSDL.js.map +1 -1
  60. package/graphql/schema/createReadResolvers.js +5 -0
  61. package/graphql/schema/createReadResolvers.js.map +1 -1
  62. package/graphql/schema/createReadSDL.d.ts +2 -0
  63. package/graphql/schema/createReadSDL.js +11 -5
  64. package/graphql/schema/createReadSDL.js.map +1 -1
  65. package/graphql/schema/schemaPlugins.d.ts +2 -2
  66. package/graphql/schema/schemaPlugins.js +11 -8
  67. package/graphql/schema/schemaPlugins.js.map +1 -1
  68. package/graphql/system.js +79 -82
  69. package/graphql/system.js.map +1 -1
  70. package/graphqlFields/dynamicZone/dynamicZoneField.d.ts +2 -0
  71. package/graphqlFields/dynamicZone/dynamicZoneField.js +234 -0
  72. package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -0
  73. package/graphqlFields/dynamicZone/dynamicZoneStorage.d.ts +3 -0
  74. package/graphqlFields/dynamicZone/dynamicZoneStorage.js +79 -0
  75. package/graphqlFields/dynamicZone/dynamicZoneStorage.js.map +1 -0
  76. package/graphqlFields/dynamicZone/index.d.ts +2 -0
  77. package/graphqlFields/dynamicZone/index.js +21 -0
  78. package/graphqlFields/dynamicZone/index.js.map +1 -0
  79. package/graphqlFields/index.d.ts +1 -1
  80. package/graphqlFields/index.js +3 -1
  81. package/graphqlFields/index.js.map +1 -1
  82. package/graphqlFields/number.js +4 -0
  83. package/graphqlFields/number.js.map +1 -1
  84. package/graphqlFields/object.js +122 -72
  85. package/graphqlFields/object.js.map +1 -1
  86. package/graphqlFields/ref.js +34 -48
  87. package/graphqlFields/ref.js.map +1 -1
  88. package/index.d.ts +3 -3
  89. package/index.js +4 -8
  90. package/index.js.map +1 -1
  91. package/package.json +26 -26
  92. package/plugins/CmsGraphQLSchemaPlugin.d.ts +5 -0
  93. package/plugins/CmsGraphQLSchemaPlugin.js +17 -0
  94. package/plugins/CmsGraphQLSchemaPlugin.js.map +1 -0
  95. package/plugins/CmsGraphQLSchemaSorterPlugin.d.ts +20 -0
  96. package/plugins/CmsGraphQLSchemaSorterPlugin.js +38 -0
  97. package/plugins/CmsGraphQLSchemaSorterPlugin.js.map +1 -0
  98. package/plugins/CmsModelFieldConverterPlugin.d.ts +2 -2
  99. package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
  100. package/plugins/StorageTransformPlugin.d.ts +11 -11
  101. package/plugins/StorageTransformPlugin.js.map +1 -1
  102. package/plugins/index.d.ts +2 -0
  103. package/plugins/index.js +26 -0
  104. package/plugins/index.js.map +1 -1
  105. package/storage/object.js +5 -2
  106. package/storage/object.js.map +1 -1
  107. package/types.d.ts +203 -55
  108. package/types.js +55 -7
  109. package/types.js.map +1 -1
  110. package/utils/converters/ConverterCollection.js +6 -2
  111. package/utils/converters/ConverterCollection.js.map +1 -1
  112. package/utils/createTypeFromFields.d.ts +15 -0
  113. package/utils/createTypeFromFields.js +75 -0
  114. package/utils/createTypeFromFields.js.map +1 -0
  115. package/utils/createTypeName.js +3 -1
  116. package/utils/createTypeName.js.map +1 -1
  117. package/utils/entryStorage.js +15 -12
  118. package/utils/entryStorage.js.map +1 -1
  119. package/utils/getBaseFieldType.d.ts +4 -0
  120. package/utils/getBaseFieldType.js +12 -0
  121. package/utils/getBaseFieldType.js.map +1 -0
  122. package/utils/renderFields.js +3 -1
  123. package/utils/renderFields.js.map +1 -1
  124. package/utils/renderGetFilterFields.js +8 -3
  125. package/utils/renderGetFilterFields.js.map +1 -1
  126. package/utils/renderInputFields.js +3 -1
  127. package/utils/renderInputFields.js.map +1 -1
  128. package/utils/renderListFilterFields.js +5 -2
  129. package/utils/renderListFilterFields.js.map +1 -1
  130. package/utils/renderSortEnum.d.ts +7 -4
  131. package/utils/renderSortEnum.js +23 -4
  132. package/utils/renderSortEnum.js.map +1 -1
  133. package/validators/dynamicZone.d.ts +2 -0
  134. package/validators/dynamicZone.js +24 -0
  135. package/validators/dynamicZone.js.map +1 -0
  136. package/validators/index.js +3 -1
  137. package/validators/index.js.map +1 -1
  138. package/crud/index.d.ts +0 -6
  139. package/crud/index.js +0 -85
  140. package/crud/index.js.map +0 -1
  141. package/graphql/schema/resolvers/manage/resolveRequestChanges.d.ts +0 -7
  142. package/graphql/schema/resolvers/manage/resolveRequestChanges.js +0 -21
  143. package/graphql/schema/resolvers/manage/resolveRequestChanges.js.map +0 -1
  144. package/graphql/schema/resolvers/manage/resolveRequestReview.d.ts +0 -7
  145. package/graphql/schema/resolvers/manage/resolveRequestReview.js +0 -21
  146. package/graphql/schema/resolvers/manage/resolveRequestReview.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,6 @@
1
- import { GraphQLSchemaPlugin } from "@webiny/handler-graphql/plugins/GraphQLSchemaPlugin";
2
1
  import { CmsContext } 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
+ export declare const buildSchemaPlugins: (context: CmsContext) => Promise<CmsGraphQLSchemaPlugin[]>;
@@ -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","context","createBaseContentSchema","createModelsSchema","createContentEntriesSchema","createGroupsSchema","generateSchemaPlugins","filter","Boolean"],"sources":["buildSchemaPlugins.ts"],"sourcesContent":["import { 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\";\nimport { CmsGraphQLSchemaPlugin } from \"~/plugins\";\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<CmsGraphQLSchemaPlugin[]> => {\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":";;;;;;;AACA;;AACA;;AACA;;AACA;;AACA;;AAGA;AACA;AACA;AAEO,MAAMA,kBAAkB,GAAG,MAC9BC,OAD8B,IAEM;EACpC,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"}
@@ -7,6 +7,8 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.graphQLHandlerFactory = void 0;
9
9
 
10
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
+
10
12
  var _schema = require("@graphql-tools/schema");
11
13
 
12
14
  var _apiSecurity = require("@webiny/api-security");
@@ -17,10 +19,15 @@ var _processRequestBody = _interopRequireDefault(require("@webiny/handler-graphq
17
19
 
18
20
  var _buildSchemaPlugins = require("./buildSchemaPlugins");
19
21
 
20
- var _plugins = require("@webiny/handler-graphql/plugins");
21
-
22
22
  var _handler = require("@webiny/handler");
23
23
 
24
+ var _error = _interopRequireDefault(require("@webiny/error"));
25
+
26
+ var _codeFrame = _interopRequireDefault(require("code-frame"));
27
+
28
+ var _plugins = require("../plugins");
29
+
30
+ // @ts-ignore `code-frame` has no types
24
31
  const schemaList = new Map();
25
32
 
26
33
  const generateCacheKey = async args => {
@@ -46,7 +53,7 @@ const generateSchema = async args => {
46
53
  const typeDefs = [];
47
54
  const resolvers = []; // Get schema definitions from plugins
48
55
 
49
- const schemaPlugins = context.plugins.byType(_plugins.GraphQLSchemaPlugin.type);
56
+ const schemaPlugins = context.plugins.byType(_plugins.CmsGraphQLSchemaPlugin.type);
50
57
 
51
58
  for (const pl of schemaPlugins) {
52
59
  typeDefs.push(pl.schema.typeDefs);
@@ -73,32 +80,35 @@ const getSchema = async params => {
73
80
  const tenantId = context.tenancy.getCurrentTenant().id;
74
81
  const id = `${tenantId}#${type}#${locale.code}`;
75
82
  const cacheKey = await generateCacheKey(params);
83
+ const cachedSchema = schemaList.get(id);
84
+
85
+ if ((cachedSchema === null || cachedSchema === void 0 ? void 0 : cachedSchema.key) === cacheKey) {
86
+ return cachedSchema.schema;
87
+ }
76
88
 
77
- if (!schemaList.has(id)) {
89
+ try {
78
90
  const schema = await generateSchema(params);
79
91
  schemaList.set(id, {
80
92
  key: cacheKey,
81
93
  schema
82
94
  });
83
95
  return schema;
84
- }
85
- /**
86
- * Safe to cast because check was done few lines up.
87
- */
88
-
89
-
90
- const cache = schemaList.get(id);
96
+ } catch (err) {
97
+ if (!Array.isArray(err.locations)) {
98
+ throw new _error.default((0, _objectSpread2.default)({}, err));
99
+ }
91
100
 
92
- if (cache.key === cacheKey) {
93
- return cache.schema;
101
+ const [location] = err.locations;
102
+ throw new _error.default({
103
+ code: "INVALID_GRAPHQL_SCHEMA",
104
+ message: err.message,
105
+ data: {
106
+ invalidSegment: (0, _codeFrame.default)(err.source.body, location.line, location.column, {
107
+ frameSize: 15
108
+ })
109
+ }
110
+ });
94
111
  }
95
-
96
- const schema = await generateSchema(params);
97
- schemaList.set(id, {
98
- key: cacheKey,
99
- schema
100
- });
101
- return schema;
102
112
  };
103
113
 
104
114
  const checkEndpointAccess = async context => {
@@ -113,6 +123,22 @@ const checkEndpointAccess = async context => {
113
123
  }
114
124
  };
115
125
 
126
+ const formatErrorPayload = error => {
127
+ if (error instanceof _error.default) {
128
+ return {
129
+ message: error.message,
130
+ code: error.code,
131
+ data: error.data
132
+ };
133
+ }
134
+
135
+ return {
136
+ name: error.name,
137
+ message: error.message,
138
+ stack: error.stack
139
+ };
140
+ };
141
+
116
142
  const cmsRoutes = new _handler.RoutePlugin(({
117
143
  onPost,
118
144
  onOptions,
@@ -133,14 +159,18 @@ const cmsRoutes = new _handler.RoutePlugin(({
133
159
  });
134
160
  }
135
161
 
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);
162
+ try {
163
+ const schema = await getSchema({
164
+ context,
165
+ locale: context.cms.getLocale(),
166
+ type: context.cms.type
167
+ });
168
+ const body = request.body;
169
+ const result = await (0, _processRequestBody.default)(body, schema, context);
170
+ return reply.code(200).send(result);
171
+ } catch (ex) {
172
+ return reply.code(500).send(formatErrorPayload(ex));
173
+ }
144
174
  });
145
175
  onOptions("/cms/:type(^manage|preview|read$)/:locale", async (_, reply) => {
146
176
  return reply.hijack().send({});
@@ -1 +1 @@
1
- {"version":3,"names":["schemaList","Map","generateCacheKey","args","context","locale","type","lastModelChange","cms","getModelLastChange","code","toISOString","join","generateSchema","plugins","register","buildSchemaPlugins","typeDefs","resolvers","schemaPlugins","byType","GraphQLSchemaPlugin","pl","push","schema","makeExecutableSchema","getSchema","params","tenantId","tenancy","getCurrentTenant","id","cacheKey","has","set","key","cache","get","checkEndpointAccess","permission","security","getPermission","NotAuthorizedError","data","reason","cmsRoutes","RoutePlugin","onPost","onOptions","request","reply","ex","send","error","message","stack","getLocale","body","result","processRequestBody","_","hijack","graphQLHandlerFactory","debug","debugPlugins"],"sources":["graphQLHandlerFactory.ts"],"sourcesContent":["import { GraphQLSchema } from \"graphql\";\nimport { makeExecutableSchema } from \"@graphql-tools/schema\";\nimport { ApiEndpoint, CmsContext } from \"~/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { NotAuthorizedError } from \"@webiny/api-security\";\nimport { PluginCollection } from \"@webiny/plugins/types\";\nimport debugPlugins from \"@webiny/handler-graphql/debugPlugins\";\nimport processRequestBody from \"@webiny/handler-graphql/processRequestBody\";\nimport { buildSchemaPlugins } from \"./buildSchemaPlugins\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/plugins\";\nimport { GraphQLRequestBody } from \"@webiny/handler-graphql/types\";\nimport { RoutePlugin } from \"@webiny/handler\";\n\ninterface SchemaCache {\n key: string;\n schema: GraphQLSchema;\n}\ninterface GetSchemaParams {\n context: CmsContext;\n type: ApiEndpoint;\n locale: I18NLocale;\n}\n\nconst schemaList = new Map<string, SchemaCache>();\n\nconst generateCacheKey = async (args: GetSchemaParams): Promise<string> => {\n const { context, locale, type } = args;\n const lastModelChange = await context.cms.getModelLastChange();\n return [locale.code, type, lastModelChange.toISOString()].join(\"#\");\n};\n\nconst generateSchema = async (args: GetSchemaParams): Promise<GraphQLSchema> => {\n const { context } = args;\n\n context.plugins.register(await buildSchemaPlugins(context));\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 const schemaPlugins = context.plugins.byType<GraphQLSchemaPlugin>(GraphQLSchemaPlugin.type);\n for (const pl of schemaPlugins) {\n typeDefs.push(pl.schema.typeDefs);\n resolvers.push(pl.schema.resolvers);\n }\n\n return makeExecutableSchema({\n typeDefs,\n resolvers\n });\n};\n\n/**\n * Gets an existing schema or rewrites existing one or creates a completely new one\n * depending on the schemaId created from type and locale parameters\n */\nconst getSchema = async (params: GetSchemaParams): Promise<GraphQLSchema> => {\n const { context, type, locale } = params;\n const tenantId = context.tenancy.getCurrentTenant().id;\n const id = `${tenantId}#${type}#${locale.code}`;\n\n const cacheKey = await generateCacheKey(params);\n if (!schemaList.has(id)) {\n const schema = await generateSchema(params);\n\n schemaList.set(id, {\n key: cacheKey,\n schema\n });\n return schema;\n }\n /**\n * Safe to cast because check was done few lines up.\n */\n const cache = schemaList.get(id) as SchemaCache;\n if (cache.key === cacheKey) {\n return cache.schema;\n }\n const schema = await generateSchema(params);\n schemaList.set(id, {\n key: cacheKey,\n schema\n });\n return schema;\n};\n\nconst checkEndpointAccess = async (context: CmsContext): Promise<void> => {\n const permission = await context.security.getPermission(`cms.endpoint.${context.cms.type}`);\n if (!permission) {\n throw new NotAuthorizedError({\n data: {\n reason: `Not allowed to access \"${context.cms.type}\" endpoint.`\n }\n });\n }\n};\n\nexport interface GraphQLHandlerFactoryParams {\n debug?: boolean;\n}\n\nconst cmsRoutes = new RoutePlugin<CmsContext>(({ onPost, onOptions, context }) => {\n onPost(\"/cms/:type(^manage|preview|read$)/:locale\", async (request, reply) => {\n try {\n await checkEndpointAccess(context);\n } catch (ex) {\n return reply.code(401).send({\n data: null,\n error: {\n message: ex.message || \"Not authorized!\",\n code: ex.code || \"SECURITY_NOT_AUTHORIZED\",\n data: ex.data || null,\n stack: null\n }\n });\n }\n\n const schema = await getSchema({\n context,\n locale: context.cms.getLocale(),\n type: context.cms.type as ApiEndpoint\n });\n const body: GraphQLRequestBody | GraphQLRequestBody[] = request.body as any;\n const result = await processRequestBody(body, schema, context);\n return reply.code(200).send(result);\n });\n\n onOptions(\"/cms/:type(^manage|preview|read$)/:locale\", async (_, reply) => {\n return reply.hijack().send({});\n });\n});\n\nexport const graphQLHandlerFactory = ({ debug }: GraphQLHandlerFactoryParams): PluginCollection => {\n return [\n ...(debug ? debugPlugins() : []),\n cmsRoutes,\n {\n type: \"wcp-telemetry-tracker\"\n }\n ];\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["schemaList","Map","generateCacheKey","args","context","locale","type","lastModelChange","cms","getModelLastChange","code","toISOString","join","generateSchema","plugins","register","buildSchemaPlugins","typeDefs","resolvers","schemaPlugins","byType","CmsGraphQLSchemaPlugin","pl","push","schema","makeExecutableSchema","getSchema","params","tenantId","tenancy","getCurrentTenant","id","cacheKey","cachedSchema","get","key","set","err","Array","isArray","locations","WebinyError","location","message","data","invalidSegment","codeFrame","source","body","line","column","frameSize","checkEndpointAccess","permission","security","getPermission","NotAuthorizedError","reason","formatErrorPayload","error","name","stack","cmsRoutes","RoutePlugin","onPost","onOptions","request","reply","ex","send","getLocale","result","processRequestBody","_","hijack","graphQLHandlerFactory","debug","debugPlugins"],"sources":["graphQLHandlerFactory.ts"],"sourcesContent":["import { GraphQLSchema } from \"graphql\";\nimport { makeExecutableSchema } from \"@graphql-tools/schema\";\nimport { ApiEndpoint, CmsContext } from \"~/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { NotAuthorizedError } from \"@webiny/api-security\";\nimport { PluginCollection } from \"@webiny/plugins/types\";\nimport debugPlugins from \"@webiny/handler-graphql/debugPlugins\";\nimport processRequestBody from \"@webiny/handler-graphql/processRequestBody\";\nimport { buildSchemaPlugins } from \"./buildSchemaPlugins\";\nimport { GraphQLRequestBody } from \"@webiny/handler-graphql/types\";\nimport { RoutePlugin } from \"@webiny/handler\";\nimport WebinyError from \"@webiny/error\";\n// @ts-ignore `code-frame` has no types\nimport codeFrame from \"code-frame\";\nimport { CmsGraphQLSchemaPlugin } from \"~/plugins\";\n\ninterface SchemaCache {\n key: string;\n schema: GraphQLSchema;\n}\ninterface GetSchemaParams {\n context: CmsContext;\n type: ApiEndpoint;\n locale: I18NLocale;\n}\n\nconst schemaList = new Map<string, SchemaCache>();\n\nconst generateCacheKey = async (args: GetSchemaParams): Promise<string> => {\n const { context, locale, type } = args;\n const lastModelChange = await context.cms.getModelLastChange();\n return [locale.code, type, lastModelChange.toISOString()].join(\"#\");\n};\n\nconst generateSchema = async (args: GetSchemaParams): Promise<GraphQLSchema> => {\n const { context } = args;\n\n context.plugins.register(await buildSchemaPlugins(context));\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 const schemaPlugins = context.plugins.byType<CmsGraphQLSchemaPlugin>(\n CmsGraphQLSchemaPlugin.type\n );\n for (const pl of schemaPlugins) {\n typeDefs.push(pl.schema.typeDefs);\n resolvers.push(pl.schema.resolvers);\n }\n\n return makeExecutableSchema({\n typeDefs,\n resolvers\n });\n};\n\n/**\n * Gets an existing schema or rewrites existing one or creates a completely new one\n * depending on the schemaId created from type and locale parameters\n */\nconst getSchema = async (params: GetSchemaParams): Promise<GraphQLSchema> => {\n const { context, type, locale } = params;\n const tenantId = context.tenancy.getCurrentTenant().id;\n const id = `${tenantId}#${type}#${locale.code}`;\n\n const cacheKey = await generateCacheKey(params);\n const cachedSchema = schemaList.get(id);\n if (cachedSchema?.key === cacheKey) {\n return cachedSchema.schema;\n }\n try {\n const schema = await generateSchema(params);\n schemaList.set(id, {\n key: cacheKey,\n schema\n });\n return schema;\n } catch (err) {\n if (!Array.isArray(err.locations)) {\n throw new WebinyError({\n ...err\n });\n }\n const [location] = err.locations;\n\n throw new WebinyError({\n code: \"INVALID_GRAPHQL_SCHEMA\",\n message: err.message,\n data: {\n invalidSegment: codeFrame(err.source.body, location.line, location.column, {\n frameSize: 15\n })\n }\n });\n }\n};\n\nconst checkEndpointAccess = async (context: CmsContext): Promise<void> => {\n const permission = await context.security.getPermission(`cms.endpoint.${context.cms.type}`);\n if (!permission) {\n throw new NotAuthorizedError({\n data: {\n reason: `Not allowed to access \"${context.cms.type}\" endpoint.`\n }\n });\n }\n};\n\nconst formatErrorPayload = (error: Error) => {\n if (error instanceof WebinyError) {\n return {\n message: error.message,\n code: error.code,\n data: error.data\n };\n }\n\n return {\n name: error.name,\n message: error.message,\n stack: error.stack\n };\n};\n\nexport interface GraphQLHandlerFactoryParams {\n debug?: boolean;\n}\n\nconst cmsRoutes = new RoutePlugin<CmsContext>(({ onPost, onOptions, context }) => {\n onPost(\"/cms/:type(^manage|preview|read$)/:locale\", async (request, reply) => {\n try {\n await checkEndpointAccess(context);\n } catch (ex) {\n return reply.code(401).send({\n data: null,\n error: {\n message: ex.message || \"Not authorized!\",\n code: ex.code || \"SECURITY_NOT_AUTHORIZED\",\n data: ex.data || null,\n stack: null\n }\n });\n }\n\n try {\n const schema = await getSchema({\n context,\n locale: context.cms.getLocale(),\n type: context.cms.type as ApiEndpoint\n });\n const body = request.body as GraphQLRequestBody | GraphQLRequestBody[];\n const result = await processRequestBody(body, schema, context);\n return reply.code(200).send(result);\n } catch (ex) {\n return reply.code(500).send(formatErrorPayload(ex));\n }\n });\n\n onOptions(\"/cms/:type(^manage|preview|read$)/:locale\", async (_, reply) => {\n return reply.hijack().send({});\n });\n});\n\nexport const graphQLHandlerFactory = ({ debug }: GraphQLHandlerFactoryParams): PluginCollection => {\n return [\n ...(debug ? debugPlugins() : []),\n cmsRoutes,\n {\n type: \"wcp-telemetry-tracker\"\n }\n ];\n};\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { GraphQLSchemaPlugin } from "@webiny/handler-graphql/types";
2
1
  import { GraphQLHandlerFactoryParams } from "./graphQLHandlerFactory";
2
+ import { GraphQLSchemaPlugin } from "@webiny/handler-graphql";
3
3
  import { CmsContext } from "../types";
4
4
  export declare type CreateGraphQLParams = GraphQLHandlerFactoryParams;
5
- export declare const createGraphQL: (params: CreateGraphQLParams) => (import("@webiny/api").ContextPlugin<CmsContext> | GraphQLSchemaPlugin<CmsContext> | import("@webiny/plugins/types").PluginCollection)[];
5
+ export declare const createGraphQL: (params: CreateGraphQLParams) => (import("@webiny/api").ContextPlugin<CmsContext> | import("@webiny/plugins/types").PluginCollection | GraphQLSchemaPlugin<CmsContext>[])[];
package/graphql/index.js CHANGED
@@ -9,45 +9,56 @@ var _system = require("./system");
9
9
 
10
10
  var _graphQLHandlerFactory = require("./graphQLHandlerFactory");
11
11
 
12
+ var _plugins = require("../plugins");
13
+
14
+ var _handlerGraphql = require("@webiny/handler-graphql");
15
+
12
16
  const createBaseSchema = () => {
13
- return {
14
- name: "cms.graphql.schema.base",
15
- type: "graphql-schema",
16
- schema: {
17
- typeDefs:
18
- /* GraphQL */
19
- `
20
- type CmsError {
21
- code: String
22
- message: String
23
- data: JSON
24
- stack: String
25
- }
26
-
27
- type CmsCursors {
28
- next: String
29
- previous: String
30
- }
31
-
32
- type CmsListMeta {
33
- cursor: String
34
- hasMoreItems: Boolean
35
- totalCount: Int
36
- }
37
-
38
- type CmsDeleteResponse {
39
- data: Boolean
40
- error: CmsError
41
- }
42
-
43
- type CmsBooleanResponse {
44
- data: Boolean
45
- error: CmsError
46
- }
47
- `,
48
- resolvers: {}
49
- }
50
- };
17
+ const cmsPlugin = new _plugins.CmsGraphQLSchemaPlugin({
18
+ typeDefs:
19
+ /* GraphQL */
20
+ `
21
+ type CmsError {
22
+ code: String
23
+ message: String
24
+ data: JSON
25
+ stack: String
26
+ }
27
+
28
+ type CmsCursors {
29
+ next: String
30
+ previous: String
31
+ }
32
+
33
+ type CmsListMeta {
34
+ cursor: String
35
+ hasMoreItems: Boolean
36
+ totalCount: Int
37
+ }
38
+
39
+ type CmsDeleteResponse {
40
+ data: Boolean
41
+ error: CmsError
42
+ }
43
+
44
+ type CmsBooleanResponse {
45
+ data: Boolean
46
+ error: CmsError
47
+ }
48
+ `,
49
+ resolvers: {}
50
+ });
51
+ cmsPlugin.name = "graphql.cms.schema.base";
52
+ const corePlugin = new _handlerGraphql.GraphQLSchemaPlugin({
53
+ typeDefs: cmsPlugin.schema.typeDefs,
54
+ resolvers: cmsPlugin.schema.resolvers
55
+ });
56
+ corePlugin.name = "graphql.cms.core.schema.base";
57
+ /**
58
+ * Due to splitting of CMS and Core schema plugins, we must have both defined for CMS to work.
59
+ */
60
+
61
+ return [cmsPlugin, corePlugin];
51
62
  };
52
63
 
53
64
  const createGraphQL = params => {
@@ -1 +1 @@
1
- {"version":3,"names":["createBaseSchema","name","type","schema","typeDefs","resolvers","createGraphQL","params","createSystemSchemaPlugin","graphQLHandlerFactory"],"sources":["index.ts"],"sourcesContent":["import { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/types\";\nimport { createSystemSchemaPlugin } from \"./system\";\nimport { graphQLHandlerFactory, GraphQLHandlerFactoryParams } from \"./graphQLHandlerFactory\";\nimport { CmsContext } from \"~/types\";\n\nconst createBaseSchema = (): GraphQLSchemaPlugin<CmsContext> => {\n return {\n name: \"cms.graphql.schema.base\",\n type: \"graphql-schema\",\n schema: {\n typeDefs: /* GraphQL */ `\n type CmsError {\n code: String\n message: String\n data: JSON\n stack: String\n }\n\n type CmsCursors {\n next: String\n previous: String\n }\n\n type CmsListMeta {\n cursor: String\n hasMoreItems: Boolean\n totalCount: Int\n }\n\n type CmsDeleteResponse {\n data: Boolean\n error: CmsError\n }\n\n type CmsBooleanResponse {\n data: Boolean\n error: CmsError\n }\n `,\n resolvers: {}\n }\n };\n};\n\nexport type CreateGraphQLParams = GraphQLHandlerFactoryParams;\nexport const createGraphQL = (params: CreateGraphQLParams) => {\n return [createBaseSchema(), createSystemSchemaPlugin(), graphQLHandlerFactory(params)];\n};\n"],"mappings":";;;;;;;AACA;;AACA;;AAGA,MAAMA,gBAAgB,GAAG,MAAuC;EAC5D,OAAO;IACHC,IAAI,EAAE,yBADH;IAEHC,IAAI,EAAE,gBAFH;IAGHC,MAAM,EAAE;MACJC,QAAQ;MAAE;MAAe;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aA7BgB;MA8BJC,SAAS,EAAE;IA9BP;EAHL,CAAP;AAoCH,CArCD;;AAwCO,MAAMC,aAAa,GAAIC,MAAD,IAAiC;EAC1D,OAAO,CAACP,gBAAgB,EAAjB,EAAqB,IAAAQ,gCAAA,GAArB,EAAiD,IAAAC,4CAAA,EAAsBF,MAAtB,CAAjD,CAAP;AACH,CAFM"}
1
+ {"version":3,"names":["createBaseSchema","cmsPlugin","CmsGraphQLSchemaPlugin","typeDefs","resolvers","name","corePlugin","GraphQLSchemaPlugin","schema","createGraphQL","params","createSystemSchemaPlugin","graphQLHandlerFactory"],"sources":["index.ts"],"sourcesContent":["import { createSystemSchemaPlugin } from \"./system\";\nimport { graphQLHandlerFactory, GraphQLHandlerFactoryParams } from \"./graphQLHandlerFactory\";\nimport { CmsGraphQLSchemaPlugin } from \"~/plugins\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { CmsContext } from \"~/types\";\n\nconst createBaseSchema = (): GraphQLSchemaPlugin<CmsContext>[] => {\n const cmsPlugin = new CmsGraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n type CmsError {\n code: String\n message: String\n data: JSON\n stack: String\n }\n\n type CmsCursors {\n next: String\n previous: String\n }\n\n type CmsListMeta {\n cursor: String\n hasMoreItems: Boolean\n totalCount: Int\n }\n\n type CmsDeleteResponse {\n data: Boolean\n error: CmsError\n }\n\n type CmsBooleanResponse {\n data: Boolean\n error: CmsError\n }\n `,\n resolvers: {}\n });\n cmsPlugin.name = \"graphql.cms.schema.base\";\n const corePlugin = new GraphQLSchemaPlugin({\n typeDefs: cmsPlugin.schema.typeDefs,\n resolvers: cmsPlugin.schema.resolvers\n });\n corePlugin.name = \"graphql.cms.core.schema.base\";\n /**\n * Due to splitting of CMS and Core schema plugins, we must have both defined for CMS to work.\n */\n return [cmsPlugin, corePlugin];\n};\n\nexport type CreateGraphQLParams = GraphQLHandlerFactoryParams;\nexport const createGraphQL = (params: CreateGraphQLParams) => {\n return [createBaseSchema(), createSystemSchemaPlugin(), graphQLHandlerFactory(params)];\n};\n"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AAGA,MAAMA,gBAAgB,GAAG,MAAyC;EAC9D,MAAMC,SAAS,GAAG,IAAIC,+BAAJ,CAA2B;IACzCC,QAAQ;IAAE;IAAe;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SA7BiD;IA8BzCC,SAAS,EAAE;EA9B8B,CAA3B,CAAlB;EAgCAH,SAAS,CAACI,IAAV,GAAiB,yBAAjB;EACA,MAAMC,UAAU,GAAG,IAAIC,mCAAJ,CAAwB;IACvCJ,QAAQ,EAAEF,SAAS,CAACO,MAAV,CAAiBL,QADY;IAEvCC,SAAS,EAAEH,SAAS,CAACO,MAAV,CAAiBJ;EAFW,CAAxB,CAAnB;EAIAE,UAAU,CAACD,IAAX,GAAkB,8BAAlB;EACA;AACJ;AACA;;EACI,OAAO,CAACJ,SAAD,EAAYK,UAAZ,CAAP;AACH,CA3CD;;AA8CO,MAAMG,aAAa,GAAIC,MAAD,IAAiC;EAC1D,OAAO,CAACV,gBAAgB,EAAjB,EAAqB,IAAAW,gCAAA,GAArB,EAAiD,IAAAC,4CAAA,EAAsBF,MAAtB,CAAjD,CAAP;AACH,CAFM"}
@@ -1,3 +1,3 @@
1
1
  import { CmsContext } from "../../types";
2
- import { GraphQLSchemaPlugin } from "@webiny/handler-graphql/plugins/GraphQLSchemaPlugin";
3
- export declare const createBaseContentSchema: (context: CmsContext) => GraphQLSchemaPlugin;
2
+ import { CmsGraphQLSchemaPlugin } from "../../plugins";
3
+ export declare const createBaseContentSchema: (context: CmsContext) => CmsGraphQLSchemaPlugin;