@webiny/api-headless-cms 5.32.0 → 5.33.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/crud/contentEntry/entryDataValidation.js +1 -0
- package/crud/contentEntry/entryDataValidation.js.map +1 -1
- package/crud/contentEntry/markLockedFields.js +2 -2
- package/crud/contentEntry/markLockedFields.js.map +1 -1
- package/crud/contentEntry.crud.js +170 -60
- package/crud/contentEntry.crud.js.map +1 -1
- package/crud/contentModel/beforeCreate.js +11 -4
- package/crud/contentModel/beforeCreate.js.map +1 -1
- package/crud/contentModel/beforeDelete.js +6 -1
- package/crud/contentModel/beforeDelete.js.map +1 -1
- package/crud/contentModel/beforeUpdate.js +18 -4
- package/crud/contentModel/beforeUpdate.js.map +1 -1
- package/crud/contentModel/createFieldStorageId.d.ts +2 -0
- package/crud/contentModel/createFieldStorageId.js +16 -0
- package/crud/contentModel/createFieldStorageId.js.map +1 -0
- package/crud/contentModel/fieldIdValidation.d.ts +1 -0
- package/crud/contentModel/fieldIdValidation.js +25 -0
- package/crud/contentModel/fieldIdValidation.js.map +1 -0
- package/crud/contentModel/models.js +9 -8
- package/crud/contentModel/models.js.map +1 -1
- package/crud/contentModel/systemFields.d.ts +1 -0
- package/crud/contentModel/systemFields.js +8 -0
- package/crud/contentModel/systemFields.js.map +1 -0
- package/crud/contentModel/validateLayout.d.ts +1 -1
- package/crud/contentModel/validateLayout.js +1 -2
- package/crud/contentModel/validateLayout.js.map +1 -1
- package/crud/contentModel/validateModel.d.ts +9 -0
- package/crud/contentModel/validateModel.js +32 -0
- package/crud/contentModel/validateModel.js.map +1 -0
- package/crud/contentModel/validateModelFields.d.ts +3 -2
- package/crud/contentModel/validateModelFields.js +200 -38
- package/crud/contentModel/validateModelFields.js.map +1 -1
- package/crud/contentModel.crud.js +59 -5
- package/crud/contentModel.crud.js.map +1 -1
- package/crud/contentModelGroup/beforeCreate.js +3 -3
- package/crud/contentModelGroup/beforeCreate.js.map +1 -1
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.d.ts +7 -0
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +66 -0
- package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js.map +1 -0
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.d.ts +11 -0
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +306 -0
- package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -0
- package/fieldConverters/index.d.ts +3 -0
- package/fieldConverters/index.js +16 -0
- package/fieldConverters/index.js.map +1 -0
- package/graphql/index.d.ts +1 -1
- package/graphql/schema/contentModels.js +6 -0
- package/graphql/schema/contentModels.js.map +1 -1
- package/graphql/schema/createFieldResolvers.js +13 -1
- package/graphql/schema/createFieldResolvers.js.map +1 -1
- package/graphql/schema/createReadSDL.js +3 -2
- package/graphql/schema/createReadSDL.js.map +1 -1
- package/graphql/schema/schemaPlugins.js +7 -1
- package/graphql/schema/schemaPlugins.js.map +1 -1
- package/graphqlFields/datetime.js +6 -1
- package/graphqlFields/datetime.js.map +1 -1
- package/graphqlFields/helpers.js +1 -1
- package/graphqlFields/helpers.js.map +1 -1
- package/graphqlFields/object.js +1 -1
- package/graphqlFields/object.js.map +1 -1
- package/index.d.ts +2 -2
- package/index.js +3 -1
- package/index.js.map +1 -1
- package/package.json +24 -24
- package/plugins/CmsGroupPlugin.d.ts +1 -1
- package/plugins/CmsGroupPlugin.js.map +1 -1
- package/plugins/CmsModelFieldConverterPlugin.d.ts +14 -0
- package/plugins/CmsModelFieldConverterPlugin.js +17 -0
- package/plugins/CmsModelFieldConverterPlugin.js.map +1 -0
- package/plugins/CmsModelPlugin.d.ts +32 -4
- package/plugins/CmsModelPlugin.js +160 -1
- package/plugins/CmsModelPlugin.js.map +1 -1
- package/plugins/index.d.ts +1 -0
- package/plugins/index.js +13 -0
- package/plugins/index.js.map +1 -1
- package/types.d.ts +143 -81
- package/types.js +24 -0
- package/types.js.map +1 -1
- package/upgrades/5.33.0/index.d.ts +3 -0
- package/upgrades/5.33.0/index.js +186 -0
- package/upgrades/5.33.0/index.js.map +1 -0
- package/upgrades/index.d.ts +1 -1
- package/upgrades/index.js +3 -1
- package/upgrades/index.js.map +1 -1
- package/utils/converters/Converter.d.ts +27 -0
- package/utils/converters/Converter.js +71 -0
- package/utils/converters/Converter.js.map +1 -0
- package/utils/converters/ConverterCollection.d.ts +24 -0
- package/utils/converters/ConverterCollection.js +115 -0
- package/utils/converters/ConverterCollection.js.map +1 -0
- package/utils/converters/valueKeyStorageConverter.d.ts +18 -0
- package/utils/converters/valueKeyStorageConverter.js +152 -0
- package/utils/converters/valueKeyStorageConverter.js.map +1 -0
- package/utils/filterModelFields.d.ts +16 -0
- package/utils/filterModelFields.js +81 -0
- package/utils/filterModelFields.js.map +1 -0
- package/utils/getEntryTitle.js +6 -5
- package/utils/getEntryTitle.js.map +1 -1
- package/utils/ownership.js +4 -2
- package/utils/ownership.js.map +1 -1
- package/utils/renderGetFilterFields.js +3 -3
- package/utils/renderGetFilterFields.js.map +1 -1
- package/utils/renderListFilterFields.js +6 -5
- package/utils/renderListFilterFields.js.map +1 -1
- package/utils/renderSortEnum.js +4 -4
- package/utils/renderSortEnum.js.map +1 -1
- package/validators/unique.js +1 -0
- package/validators/unique.js.map +1 -1
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.CmsModelObjectFieldConverterPlugin = void 0;
|
|
9
|
+
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
12
|
+
var _CmsModelFieldConverterPlugin = require("../plugins/CmsModelFieldConverterPlugin");
|
|
13
|
+
|
|
14
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
15
|
+
|
|
16
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
17
|
+
|
|
18
|
+
class CmsModelObjectFieldConverterPlugin extends _CmsModelFieldConverterPlugin.CmsModelFieldConverterPlugin {
|
|
19
|
+
constructor(...args) {
|
|
20
|
+
super(...args);
|
|
21
|
+
(0, _defineProperty2.default)(this, "name", "cms.field.converter.object");
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
getFieldType() {
|
|
25
|
+
return "object";
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
getChildFields({
|
|
29
|
+
field
|
|
30
|
+
}) {
|
|
31
|
+
var _field$settings;
|
|
32
|
+
|
|
33
|
+
return (field === null || field === void 0 ? void 0 : (_field$settings = field.settings) === null || _field$settings === void 0 ? void 0 : _field$settings.fields) || [];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
convertToStorage(params) {
|
|
37
|
+
const {
|
|
38
|
+
field,
|
|
39
|
+
value,
|
|
40
|
+
converterCollection
|
|
41
|
+
} = params;
|
|
42
|
+
const childFields = this.getChildFields({
|
|
43
|
+
field
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
if (childFields.length === 0) {
|
|
47
|
+
return {};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (field.multipleValues) {
|
|
51
|
+
if (Array.isArray(value) === false) {
|
|
52
|
+
return {
|
|
53
|
+
[field.storageId]: []
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return {
|
|
58
|
+
[field.storageId]: value.map(itemValue => {
|
|
59
|
+
return this.processChildFieldsToStorage({
|
|
60
|
+
fields: childFields.map(child => {
|
|
61
|
+
return _objectSpread(_objectSpread({}, child), {}, {
|
|
62
|
+
parent: field
|
|
63
|
+
});
|
|
64
|
+
}),
|
|
65
|
+
value: itemValue,
|
|
66
|
+
converterCollection
|
|
67
|
+
});
|
|
68
|
+
})
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const values = this.processChildFieldsToStorage({
|
|
73
|
+
fields: childFields.map(child => {
|
|
74
|
+
return _objectSpread(_objectSpread({}, child), {}, {
|
|
75
|
+
parent: field
|
|
76
|
+
});
|
|
77
|
+
}),
|
|
78
|
+
value,
|
|
79
|
+
converterCollection
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
if (values === undefined) {
|
|
83
|
+
return {};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return {
|
|
87
|
+
[field.storageId]: values
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
processChildFieldsToStorage(params) {
|
|
92
|
+
const {
|
|
93
|
+
fields,
|
|
94
|
+
value,
|
|
95
|
+
converterCollection
|
|
96
|
+
} = params;
|
|
97
|
+
|
|
98
|
+
if (value === undefined || value === null) {
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return fields.reduce((output, field) => {
|
|
103
|
+
const childFields = this.getChildFields({
|
|
104
|
+
field
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
if (childFields.length > 0) {
|
|
108
|
+
if (field.multipleValues) {
|
|
109
|
+
if (Array.isArray(value[field.fieldId]) === false) {
|
|
110
|
+
return output;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const values = value[field.fieldId].map(childValue => {
|
|
114
|
+
return converterCollection.convertToStorage({
|
|
115
|
+
fields: childFields.map(child => {
|
|
116
|
+
return _objectSpread(_objectSpread({}, child), {}, {
|
|
117
|
+
parent: field
|
|
118
|
+
});
|
|
119
|
+
}),
|
|
120
|
+
values: childValue
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
if (values === undefined) {
|
|
125
|
+
return output;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return _objectSpread(_objectSpread({}, output), {}, {
|
|
129
|
+
[field.storageId]: values
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* No need to process child fields if no value is provided.
|
|
134
|
+
*/
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
if (!value[field.fieldId]) {
|
|
138
|
+
return output;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const values = converterCollection.convertToStorage({
|
|
142
|
+
fields: childFields.map(child => {
|
|
143
|
+
return _objectSpread(_objectSpread({}, child), {}, {
|
|
144
|
+
parent: field
|
|
145
|
+
});
|
|
146
|
+
}),
|
|
147
|
+
values: value[field.fieldId]
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
if (values === undefined) {
|
|
151
|
+
return output;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return _objectSpread(_objectSpread({}, output), {}, {
|
|
155
|
+
[field.storageId]: values
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (value[field.fieldId] === undefined) {
|
|
160
|
+
return output;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
return _objectSpread(_objectSpread({}, output), {}, {
|
|
164
|
+
[field.storageId]: value[field.fieldId]
|
|
165
|
+
});
|
|
166
|
+
}, {});
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
convertFromStorage(params) {
|
|
170
|
+
const {
|
|
171
|
+
field,
|
|
172
|
+
value,
|
|
173
|
+
converterCollection
|
|
174
|
+
} = params;
|
|
175
|
+
const childFields = this.getChildFields({
|
|
176
|
+
field
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
if (childFields.length === 0) {
|
|
180
|
+
return {};
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
if (field.multipleValues) {
|
|
184
|
+
if (Array.isArray(value) === false) {
|
|
185
|
+
return {
|
|
186
|
+
[field.fieldId]: []
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return {
|
|
191
|
+
[field.fieldId]: value.map(itemValue => {
|
|
192
|
+
return this.processChildFieldsFromStorage({
|
|
193
|
+
fields: childFields.map(child => {
|
|
194
|
+
return _objectSpread(_objectSpread({}, child), {}, {
|
|
195
|
+
parent: field
|
|
196
|
+
});
|
|
197
|
+
}),
|
|
198
|
+
value: itemValue,
|
|
199
|
+
converterCollection
|
|
200
|
+
});
|
|
201
|
+
})
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
const values = this.processChildFieldsFromStorage({
|
|
206
|
+
fields: childFields.map(child => {
|
|
207
|
+
return _objectSpread(_objectSpread({}, child), {}, {
|
|
208
|
+
parent: field
|
|
209
|
+
});
|
|
210
|
+
}),
|
|
211
|
+
value,
|
|
212
|
+
converterCollection
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
if (values === undefined) {
|
|
216
|
+
return {};
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
return {
|
|
220
|
+
[field.fieldId]: values
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
processChildFieldsFromStorage(params) {
|
|
225
|
+
const {
|
|
226
|
+
fields,
|
|
227
|
+
value,
|
|
228
|
+
converterCollection
|
|
229
|
+
} = params;
|
|
230
|
+
|
|
231
|
+
if (value === undefined || value === null) {
|
|
232
|
+
return undefined;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
return fields.reduce((output, field) => {
|
|
236
|
+
const childFields = this.getChildFields({
|
|
237
|
+
field
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
if (childFields.length > 0) {
|
|
241
|
+
if (field.multipleValues) {
|
|
242
|
+
const inputValues = value[field.storageId];
|
|
243
|
+
|
|
244
|
+
if (!inputValues || Array.isArray(inputValues) === false) {
|
|
245
|
+
return output;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
const values = inputValues.map(childValue => {
|
|
249
|
+
return converterCollection.convertFromStorage({
|
|
250
|
+
fields: childFields.map(child => {
|
|
251
|
+
return _objectSpread(_objectSpread({}, child), {}, {
|
|
252
|
+
parent: field
|
|
253
|
+
});
|
|
254
|
+
}),
|
|
255
|
+
values: childValue
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
if (values === undefined) {
|
|
260
|
+
return output;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
return _objectSpread(_objectSpread({}, output), {}, {
|
|
264
|
+
[field.fieldId]: values
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* No need to process child fields if no value is provided.
|
|
269
|
+
*/
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
if (!value[field.storageId]) {
|
|
273
|
+
return output;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
const values = converterCollection.convertFromStorage({
|
|
277
|
+
fields: childFields.map(child => {
|
|
278
|
+
return _objectSpread(_objectSpread({}, child), {}, {
|
|
279
|
+
parent: field
|
|
280
|
+
});
|
|
281
|
+
}),
|
|
282
|
+
values: value[field.storageId]
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
if (values === undefined) {
|
|
286
|
+
return output;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
return _objectSpread(_objectSpread({}, output), {}, {
|
|
290
|
+
[field.fieldId]: values
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
if (value[field.storageId] === undefined) {
|
|
295
|
+
return output;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
return _objectSpread(_objectSpread({}, output), {}, {
|
|
299
|
+
[field.fieldId]: value[field.storageId]
|
|
300
|
+
});
|
|
301
|
+
}, {});
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
exports.CmsModelObjectFieldConverterPlugin = CmsModelObjectFieldConverterPlugin;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["CmsModelObjectFieldConverterPlugin","CmsModelFieldConverterPlugin","getFieldType","getChildFields","field","settings","fields","convertToStorage","params","value","converterCollection","childFields","length","multipleValues","Array","isArray","storageId","map","itemValue","processChildFieldsToStorage","child","parent","values","undefined","reduce","output","fieldId","childValue","convertFromStorage","processChildFieldsFromStorage","inputValues"],"sources":["CmsModelObjectFieldConverterPlugin.ts"],"sourcesContent":["import {\n CmsModelFieldConverterPlugin,\n ConvertParams\n} from \"~/plugins/CmsModelFieldConverterPlugin\";\nimport { CmsEntryValues, CmsModelFieldWithParent } from \"~/types\";\nimport { ConverterCollection } from \"~/utils/converters/ConverterCollection\";\n\ninterface ProcessChildFieldsParams {\n fields: CmsModelFieldWithParent[];\n value?: Record<string, any> | null;\n converterCollection: ConverterCollection;\n}\n\ninterface GetChildFieldsParams {\n field?: CmsModelFieldWithParent | null;\n}\n\nexport class CmsModelObjectFieldConverterPlugin extends CmsModelFieldConverterPlugin {\n public override name = \"cms.field.converter.object\";\n\n public override getFieldType(): string {\n return \"object\";\n }\n\n private getChildFields({ field }: GetChildFieldsParams): CmsModelFieldWithParent[] {\n return field?.settings?.fields || [];\n }\n\n public override convertToStorage(params: ConvertParams): CmsEntryValues {\n const { field, value, converterCollection } = params;\n\n const childFields = this.getChildFields({\n field\n });\n if (childFields.length === 0) {\n return {};\n }\n\n if (field.multipleValues) {\n if (Array.isArray(value) === false) {\n return {\n [field.storageId]: []\n };\n }\n return {\n [field.storageId]: value.map((itemValue: any) => {\n return this.processChildFieldsToStorage({\n fields: childFields.map(child => {\n return {\n ...child,\n parent: field\n };\n }),\n value: itemValue,\n converterCollection\n });\n })\n };\n }\n\n const values = this.processChildFieldsToStorage({\n fields: childFields.map(child => {\n return {\n ...child,\n parent: field\n };\n }),\n value,\n converterCollection\n });\n if (values === undefined) {\n return {};\n }\n\n return {\n [field.storageId]: values\n };\n }\n\n private processChildFieldsToStorage(\n params: ProcessChildFieldsParams\n ): CmsEntryValues | undefined {\n const { fields, value, converterCollection } = params;\n\n if (value === undefined || value === null) {\n return undefined;\n }\n\n return fields.reduce<CmsEntryValues>((output, field) => {\n const childFields = this.getChildFields({\n field\n });\n\n if (childFields.length > 0) {\n if (field.multipleValues) {\n if (Array.isArray(value[field.fieldId]) === false) {\n return output;\n }\n const values = value[field.fieldId].map((childValue: any) => {\n return converterCollection.convertToStorage({\n fields: childFields.map(child => {\n return {\n ...child,\n parent: field\n };\n }),\n values: childValue\n });\n });\n if (values === undefined) {\n return output;\n }\n return {\n ...output,\n [field.storageId]: values\n };\n }\n /**\n * No need to process child fields if no value is provided.\n */\n if (!value[field.fieldId]) {\n return output;\n }\n const values = converterCollection.convertToStorage({\n fields: childFields.map(child => {\n return {\n ...child,\n parent: field\n };\n }),\n values: value[field.fieldId]\n });\n if (values === undefined) {\n return output;\n }\n return {\n ...output,\n [field.storageId]: values\n };\n }\n\n if (value[field.fieldId] === undefined) {\n return output;\n }\n\n return {\n ...output,\n [field.storageId]: value[field.fieldId]\n };\n }, {});\n }\n\n public override convertFromStorage(params: ConvertParams): CmsEntryValues {\n const { field, value, converterCollection } = params;\n\n const childFields = this.getChildFields({\n field\n });\n if (childFields.length === 0) {\n return {};\n }\n\n if (field.multipleValues) {\n if (Array.isArray(value) === false) {\n return {\n [field.fieldId]: []\n };\n }\n return {\n [field.fieldId]: value.map((itemValue: any) => {\n return this.processChildFieldsFromStorage({\n fields: childFields.map(child => {\n return {\n ...child,\n parent: field\n };\n }),\n value: itemValue,\n converterCollection\n });\n })\n };\n }\n\n const values = this.processChildFieldsFromStorage({\n fields: childFields.map(child => {\n return {\n ...child,\n parent: field\n };\n }),\n value,\n converterCollection\n });\n\n if (values === undefined) {\n return {};\n }\n\n return {\n [field.fieldId]: values\n };\n }\n\n private processChildFieldsFromStorage(\n params: ProcessChildFieldsParams\n ): CmsEntryValues | undefined {\n const { fields, value, converterCollection } = params;\n\n if (value === undefined || value === null) {\n return undefined;\n }\n\n return fields.reduce<CmsEntryValues>((output, field) => {\n const childFields = this.getChildFields({\n field\n });\n\n if (childFields.length > 0) {\n if (field.multipleValues) {\n const inputValues = value[field.storageId] as any[] | undefined;\n if (!inputValues || Array.isArray(inputValues) === false) {\n return output;\n }\n const values = inputValues.map(childValue => {\n return converterCollection.convertFromStorage({\n fields: childFields.map(child => {\n return {\n ...child,\n parent: field\n };\n }),\n values: childValue\n });\n });\n if (values === undefined) {\n return output;\n }\n return {\n ...output,\n [field.fieldId]: values\n };\n }\n /**\n * No need to process child fields if no value is provided.\n */\n if (!value[field.storageId]) {\n return output;\n }\n const values = converterCollection.convertFromStorage({\n fields: childFields.map(child => {\n return {\n ...child,\n parent: field\n };\n }),\n values: value[field.storageId]\n });\n if (values === undefined) {\n return output;\n }\n return {\n ...output,\n [field.fieldId]: values\n };\n }\n\n if (value[field.storageId] === undefined) {\n return output;\n }\n return {\n ...output,\n [field.fieldId]: value[field.storageId]\n };\n }, {});\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { CmsModelObjectFieldConverterPlugin } from "./CmsModelObjectFieldConverterPlugin";
|
|
2
|
+
import { CmsModelDefaultFieldConverterPlugin } from "./CmsModelDefaultFieldConverterPlugin";
|
|
3
|
+
export declare const createFieldConverters: () => (CmsModelObjectFieldConverterPlugin | CmsModelDefaultFieldConverterPlugin)[];
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createFieldConverters = void 0;
|
|
7
|
+
|
|
8
|
+
var _CmsModelObjectFieldConverterPlugin = require("./CmsModelObjectFieldConverterPlugin");
|
|
9
|
+
|
|
10
|
+
var _CmsModelDefaultFieldConverterPlugin = require("./CmsModelDefaultFieldConverterPlugin");
|
|
11
|
+
|
|
12
|
+
const createFieldConverters = () => {
|
|
13
|
+
return [new _CmsModelObjectFieldConverterPlugin.CmsModelObjectFieldConverterPlugin(), new _CmsModelDefaultFieldConverterPlugin.CmsModelDefaultFieldConverterPlugin()];
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
exports.createFieldConverters = createFieldConverters;
|
|
@@ -0,0 +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"}
|
package/graphql/index.d.ts
CHANGED
|
@@ -2,4 +2,4 @@ import { GraphQLSchemaPlugin } from "@webiny/handler-graphql/types";
|
|
|
2
2
|
import { GraphQLHandlerFactoryParams } from "./graphQLHandlerFactory";
|
|
3
3
|
import { CmsContext } from "../types";
|
|
4
4
|
export declare type CreateGraphQLParams = GraphQLHandlerFactoryParams;
|
|
5
|
-
export declare const createGraphQL: (params: CreateGraphQLParams) => (import("@webiny/
|
|
5
|
+
export declare const createGraphQL: (params: CreateGraphQLParams) => (import("@webiny/api").ContextPlugin<CmsContext> | GraphQLSchemaPlugin<CmsContext> | import("@webiny/plugins/types").PluginCollection)[];
|
|
@@ -118,6 +118,9 @@ const createModelsSchema = context => {
|
|
|
118
118
|
label: String!
|
|
119
119
|
helpText: String
|
|
120
120
|
placeholderText: String
|
|
121
|
+
# we never use user input - this is here to the GraphQL does not break when posting from our UI
|
|
122
|
+
# used for debugging purposes
|
|
123
|
+
storageId: String
|
|
121
124
|
fieldId: String!
|
|
122
125
|
type: String!
|
|
123
126
|
multipleValues: Boolean
|
|
@@ -200,6 +203,9 @@ const createModelsSchema = context => {
|
|
|
200
203
|
|
|
201
204
|
type CmsContentModelField {
|
|
202
205
|
id: ID!
|
|
206
|
+
# auto-generated value
|
|
207
|
+
# used for debugging purposes
|
|
208
|
+
storageId: String
|
|
203
209
|
fieldId: String!
|
|
204
210
|
label: String!
|
|
205
211
|
helpText: String
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createModelsSchema","context","resolvers","Query","getContentModel","_","args","model","cms","getModel","modelId","isPrivate","NotFoundError","Response","e","ErrorResponse","listContentModels","__","models","listModels","filter","CmsContentModel","plugin","plugins","byType","CmsModelPlugin","type","some","item","contentModel","manageSchema","MANAGE","createContentModel","createModel","data","createContentModelFrom","createModelFrom","updateContentModel","updateModel","deleteContentModel","deleteModel","GraphQLSchemaPlugin","typeDefs"],"sources":["contentModels.ts"],"sourcesContent":["import { ErrorResponse, NotFoundError, Response } from \"@webiny/handler-graphql\";\nimport { CmsContext } from \"~/types\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/plugins/GraphQLSchemaPlugin\";\nimport { Resolvers } from \"@webiny/handler-graphql/types\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\n\nexport const createModelsSchema = (context: CmsContext): GraphQLSchemaPlugin<CmsContext> => {\n const resolvers: Resolvers<CmsContext> = {\n Query: {\n getContentModel: async (_: unknown, args: any, context) => {\n try {\n const model = await context.cms.getModel(args.modelId);\n if (model?.isPrivate === true) {\n if (!model) {\n throw new NotFoundError(\n `Content model \"${args.modelId}\" was not found!`\n );\n }\n }\n return new Response(model);\n } catch (e) {\n return new ErrorResponse(e);\n }\n },\n listContentModels: async (_: unknown, __: unknown, context: CmsContext) => {\n try {\n const models = await context.cms.listModels();\n return new Response(models.filter(model => model.isPrivate !== true));\n } catch (e) {\n return new ErrorResponse(e);\n }\n }\n },\n CmsContentModel: {\n plugin: async (model, _, context): Promise<boolean> => {\n return context.plugins\n .byType<CmsModelPlugin>(CmsModelPlugin.type)\n .some(item => item.contentModel.modelId === model.modelId);\n }\n }\n };\n\n let manageSchema = \"\";\n if (context.cms.MANAGE) {\n resolvers[\"Mutation\"] = {\n createContentModel: async (_: unknown, args: any, context) => {\n try {\n const model = await context.cms.createModel(args.data);\n return new Response(model);\n } catch (e) {\n return new ErrorResponse(e);\n }\n },\n createContentModelFrom: async (_: unknown, args: any, context) => {\n try {\n const model = await context.cms.createModelFrom(args.modelId, args.data);\n return new Response(model);\n } catch (e) {\n return new ErrorResponse(e);\n }\n },\n updateContentModel: async (_: unknown, args: any, context) => {\n const { modelId, data } = args;\n try {\n const model = await context.cms.updateModel(modelId, data);\n return new Response(model);\n } catch (e) {\n return new ErrorResponse(e);\n }\n },\n deleteContentModel: async (_: unknown, args: any, context) => {\n const { modelId } = args;\n try {\n await context.cms.deleteModel(modelId);\n return new Response(true);\n } catch (e) {\n return new ErrorResponse(e);\n }\n }\n };\n\n manageSchema = /* GraphQL */ `\n input CmsPredefinedValueInput {\n label: String!\n value: String!\n selected: Boolean\n }\n\n input CmsPredefinedValuesInput {\n enabled: Boolean\n values: [CmsPredefinedValueInput]\n }\n input CmsFieldRendererInput {\n name: String\n }\n\n input CmsFieldValidationInput {\n name: String!\n message: String\n settings: JSON\n }\n\n input CmsContentModelFieldInput {\n id: ID!\n label: String!\n helpText: String\n placeholderText: String\n fieldId: String!\n type: String!\n multipleValues: Boolean\n predefinedValues: CmsPredefinedValuesInput\n renderer: CmsFieldRendererInput\n validation: [CmsFieldValidationInput]\n listValidation: [CmsFieldValidationInput]\n settings: JSON\n }\n\n input CmsContentModelCreateInput {\n name: String!\n modelId: String\n group: RefInput!\n description: String\n layout: [[ID!]!]\n fields: [CmsContentModelFieldInput!]\n titleFieldId: String\n }\n\n input CmsContentModelCreateFromInput {\n name: String!\n modelId: String\n group: RefInput!\n description: String\n locale: String\n }\n\n input CmsContentModelUpdateInput {\n name: String\n group: RefInput\n description: String\n layout: [[ID!]!]!\n fields: [CmsContentModelFieldInput!]!\n titleFieldId: String\n }\n\n extend type Mutation {\n createContentModel(data: CmsContentModelCreateInput!): CmsContentModelResponse\n\n createContentModelFrom(\n modelId: ID!\n data: CmsContentModelCreateFromInput!\n ): CmsContentModelResponse\n\n updateContentModel(\n modelId: ID!\n data: CmsContentModelUpdateInput!\n ): CmsContentModelResponse\n\n deleteContentModel(modelId: ID!): CmsDeleteResponse\n }\n `;\n }\n\n return new GraphQLSchemaPlugin<CmsContext>({\n typeDefs: /* GraphQL */ `\n type CmsFieldValidation {\n name: String!\n message: String\n settings: JSON\n }\n\n type CmsFieldRenderer {\n name: String\n }\n\n type CmsPredefinedValue {\n label: String\n value: String\n selected: Boolean\n }\n\n type CmsPredefinedValues {\n enabled: Boolean\n values: [CmsPredefinedValue]\n }\n\n type CmsContentModelField {\n id: ID!\n fieldId: String!\n label: String!\n helpText: String\n placeholderText: String\n type: String!\n multipleValues: Boolean\n predefinedValues: CmsPredefinedValues\n renderer: CmsFieldRenderer\n validation: [CmsFieldValidation!]\n listValidation: [CmsFieldValidation!]\n settings: JSON\n }\n\n type CmsContentModel {\n name: String!\n modelId: String!\n description: String\n group: CmsContentModelGroup!\n createdOn: DateTime\n savedOn: DateTime\n createdBy: CmsCreatedBy\n fields: [CmsContentModelField!]!\n lockedFields: [JSON]\n layout: [[String!]!]!\n titleFieldId: String\n\n # Returns true if the content model is registered via a plugin.\n plugin: Boolean!\n }\n\n type CmsContentModelResponse {\n data: CmsContentModel\n error: CmsError\n }\n\n type CmsContentModelListResponse {\n data: [CmsContentModel]\n meta: CmsListMeta\n error: CmsError\n }\n\n extend type Query {\n getContentModel(modelId: ID!, where: JSON, sort: String): CmsContentModelResponse\n\n listContentModels: CmsContentModelListResponse\n }\n\n ${manageSchema}\n `,\n resolvers\n });\n};\n"],"mappings":"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H,CAHD,CAGE,OAAOC,CAAP,EAAU;UACR,OAAO,IAAIC,6BAAJ,CAAkBD,CAAlB,CAAP;QACH;MACJ;IAlCmB,CAAxB;IAqCAgB,YAAY;IAAG;IAAe;AACtC;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SA9EQ;EA+EH;;EAED,OAAO,IAAIW,wCAAJ,CAAoC;IACvCC,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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAcZ,YAAa;AAC3B,SAzE+C;IA0EvC5B;EA1EuC,CAApC,CAAP;AA4EH,CAxOM"}
|
|
1
|
+
{"version":3,"names":["createModelsSchema","context","resolvers","Query","getContentModel","_","args","model","cms","getModel","modelId","isPrivate","NotFoundError","Response","e","ErrorResponse","listContentModels","__","models","listModels","filter","CmsContentModel","plugin","plugins","byType","CmsModelPlugin","type","some","item","contentModel","manageSchema","MANAGE","createContentModel","createModel","data","createContentModelFrom","createModelFrom","updateContentModel","updateModel","deleteContentModel","deleteModel","GraphQLSchemaPlugin","typeDefs"],"sources":["contentModels.ts"],"sourcesContent":["import { ErrorResponse, NotFoundError, Response } from \"@webiny/handler-graphql\";\nimport { CmsContext } from \"~/types\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/plugins/GraphQLSchemaPlugin\";\nimport { Resolvers } from \"@webiny/handler-graphql/types\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\n\nexport const createModelsSchema = (context: CmsContext): GraphQLSchemaPlugin<CmsContext> => {\n const resolvers: Resolvers<CmsContext> = {\n Query: {\n getContentModel: async (_: unknown, args: any, context) => {\n try {\n const model = await context.cms.getModel(args.modelId);\n if (model?.isPrivate === true) {\n if (!model) {\n throw new NotFoundError(\n `Content model \"${args.modelId}\" was not found!`\n );\n }\n }\n return new Response(model);\n } catch (e) {\n return new ErrorResponse(e);\n }\n },\n listContentModels: async (_: unknown, __: unknown, context: CmsContext) => {\n try {\n const models = await context.cms.listModels();\n return new Response(models.filter(model => model.isPrivate !== true));\n } catch (e) {\n return new ErrorResponse(e);\n }\n }\n },\n CmsContentModel: {\n plugin: async (model, _, context): Promise<boolean> => {\n return context.plugins\n .byType<CmsModelPlugin>(CmsModelPlugin.type)\n .some(item => item.contentModel.modelId === model.modelId);\n }\n }\n };\n\n let manageSchema = \"\";\n if (context.cms.MANAGE) {\n resolvers[\"Mutation\"] = {\n createContentModel: async (_: unknown, args: any, context) => {\n try {\n const model = await context.cms.createModel(args.data);\n return new Response(model);\n } catch (e) {\n return new ErrorResponse(e);\n }\n },\n createContentModelFrom: async (_: unknown, args: any, context) => {\n try {\n const model = await context.cms.createModelFrom(args.modelId, args.data);\n return new Response(model);\n } catch (e) {\n return new ErrorResponse(e);\n }\n },\n updateContentModel: async (_: unknown, args: any, context) => {\n const { modelId, data } = args;\n try {\n const model = await context.cms.updateModel(modelId, data);\n return new Response(model);\n } catch (e) {\n return new ErrorResponse(e);\n }\n },\n deleteContentModel: async (_: unknown, args: any, context) => {\n const { modelId } = args;\n try {\n await context.cms.deleteModel(modelId);\n return new Response(true);\n } catch (e) {\n return new ErrorResponse(e);\n }\n }\n };\n\n manageSchema = /* GraphQL */ `\n input CmsPredefinedValueInput {\n label: String!\n value: String!\n selected: Boolean\n }\n\n input CmsPredefinedValuesInput {\n enabled: Boolean\n values: [CmsPredefinedValueInput]\n }\n input CmsFieldRendererInput {\n name: String\n }\n\n input CmsFieldValidationInput {\n name: String!\n message: String\n settings: JSON\n }\n\n input CmsContentModelFieldInput {\n id: ID!\n label: String!\n helpText: String\n placeholderText: String\n # we never use user input - this is here to the GraphQL does not break when posting from our UI\n # used for debugging purposes\n storageId: String\n fieldId: String!\n type: String!\n multipleValues: Boolean\n predefinedValues: CmsPredefinedValuesInput\n renderer: CmsFieldRendererInput\n validation: [CmsFieldValidationInput]\n listValidation: [CmsFieldValidationInput]\n settings: JSON\n }\n\n input CmsContentModelCreateInput {\n name: String!\n modelId: String\n group: RefInput!\n description: String\n layout: [[ID!]!]\n fields: [CmsContentModelFieldInput!]\n titleFieldId: String\n }\n\n input CmsContentModelCreateFromInput {\n name: String!\n modelId: String\n group: RefInput!\n description: String\n locale: String\n }\n\n input CmsContentModelUpdateInput {\n name: String\n group: RefInput\n description: String\n layout: [[ID!]!]!\n fields: [CmsContentModelFieldInput!]!\n titleFieldId: String\n }\n\n extend type Mutation {\n createContentModel(data: CmsContentModelCreateInput!): CmsContentModelResponse\n\n createContentModelFrom(\n modelId: ID!\n data: CmsContentModelCreateFromInput!\n ): CmsContentModelResponse\n\n updateContentModel(\n modelId: ID!\n data: CmsContentModelUpdateInput!\n ): CmsContentModelResponse\n\n deleteContentModel(modelId: ID!): CmsDeleteResponse\n }\n `;\n }\n\n return new GraphQLSchemaPlugin<CmsContext>({\n typeDefs: /* GraphQL */ `\n type CmsFieldValidation {\n name: String!\n message: String\n settings: JSON\n }\n\n type CmsFieldRenderer {\n name: String\n }\n\n type CmsPredefinedValue {\n label: String\n value: String\n selected: Boolean\n }\n\n type CmsPredefinedValues {\n enabled: Boolean\n values: [CmsPredefinedValue]\n }\n\n type CmsContentModelField {\n id: ID!\n # auto-generated value\n # used for debugging purposes\n storageId: String\n fieldId: String!\n label: String!\n helpText: String\n placeholderText: String\n type: String!\n multipleValues: Boolean\n predefinedValues: CmsPredefinedValues\n renderer: CmsFieldRenderer\n validation: [CmsFieldValidation!]\n listValidation: [CmsFieldValidation!]\n settings: JSON\n }\n\n type CmsContentModel {\n name: String!\n modelId: String!\n description: String\n group: CmsContentModelGroup!\n createdOn: DateTime\n savedOn: DateTime\n createdBy: CmsCreatedBy\n fields: [CmsContentModelField!]!\n lockedFields: [JSON]\n layout: [[String!]!]!\n titleFieldId: String\n\n # Returns true if the content model is registered via a plugin.\n plugin: Boolean!\n }\n\n type CmsContentModelResponse {\n data: CmsContentModel\n error: CmsError\n }\n\n type CmsContentModelListResponse {\n data: [CmsContentModel]\n meta: CmsListMeta\n error: CmsError\n }\n\n extend type Query {\n getContentModel(modelId: ID!, where: JSON, sort: String): CmsContentModelResponse\n\n listContentModels: CmsContentModelListResponse\n }\n\n ${manageSchema}\n `,\n resolvers\n });\n};\n"],"mappings":"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H,CAHD,CAGE,OAAOC,CAAP,EAAU;UACR,OAAO,IAAIC,6BAAJ,CAAkBD,CAAlB,CAAP;QACH;MACJ;IAlCmB,CAAxB;IAqCAgB,YAAY;IAAG;IAAe;AACtC;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;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;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,SAjFQ;EAkFH;;EAED,OAAO,IAAIW,wCAAJ,CAAoC;IACvCC,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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAcZ,YAAa;AAC3B,SA5E+C;IA6EvC5B;EA7EuC,CAApC,CAAP;AA+EH,CA9OM"}
|
|
@@ -13,6 +13,8 @@ var _set = _interopRequireDefault(require("lodash/set"));
|
|
|
13
13
|
|
|
14
14
|
var _entryStorage = require("../../utils/entryStorage");
|
|
15
15
|
|
|
16
|
+
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
17
|
+
|
|
16
18
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
17
19
|
|
|
18
20
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
@@ -55,6 +57,16 @@ const createFieldResolversFactory = factoryParams => {
|
|
|
55
57
|
if (!fieldTypePlugins[field.type]) {
|
|
56
58
|
continue;
|
|
57
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Field that is passed into this factory MUST have fieldId, so filter it before the method call.
|
|
62
|
+
*/
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
if (!field.fieldId) {
|
|
66
|
+
throw new _error.default("Field is missing an `fieldId`. Cannot process field without the `fieldId` in the resolvers.", "FIELD_ID_ERROR", {
|
|
67
|
+
field
|
|
68
|
+
});
|
|
69
|
+
}
|
|
58
70
|
|
|
59
71
|
const createResolver = getCreateResolver(fieldTypePlugins, field, endpointType);
|
|
60
72
|
let resolver;
|
|
@@ -66,7 +78,7 @@ const createFieldResolversFactory = factoryParams => {
|
|
|
66
78
|
createFieldResolvers
|
|
67
79
|
}) : null;
|
|
68
80
|
/**
|
|
69
|
-
* When fieldResolver is false it will completely skip adding fieldId into the resolvers.
|
|
81
|
+
* When fieldResolver is false it will completely skip adding field fieldId into the resolvers.
|
|
70
82
|
* This is to fix the breaking of GraphQL schema.
|
|
71
83
|
*/
|
|
72
84
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getCreateResolver","plugins","field","endpointType","type","createResolver","createFieldResolversFactory","factoryParams","models","model","fieldTypePlugins","createFieldResolvers","params","graphQLType","fields","isRoot","extraResolvers","fieldResolvers","typeResolvers","resolver","fieldResolver","Object","assign","
|
|
1
|
+
{"version":3,"names":["getCreateResolver","plugins","field","endpointType","type","createResolver","createFieldResolversFactory","factoryParams","models","model","fieldTypePlugins","createFieldResolvers","params","graphQLType","fields","isRoot","extraResolvers","fieldResolvers","typeResolvers","fieldId","WebinyError","resolver","fieldResolver","Object","assign","parent","args","context","info","transformedValue","entryFieldFromStorageTransform","value","values","set"],"sources":["createFieldResolvers.ts"],"sourcesContent":["import set from \"lodash/set\";\nimport {\n CmsModelField,\n CmsContext,\n CmsModelFieldToGraphQLCreateResolver,\n ApiEndpoint,\n CmsModel,\n CmsFieldTypePlugins\n} from \"~/types\";\nimport { entryFieldFromStorageTransform } from \"~/utils/entryStorage\";\nimport { Resolvers } from \"@webiny/handler-graphql/types\";\nimport WebinyError from \"@webiny/error\";\n\ninterface CreateFieldResolvers {\n graphQLType: string;\n fields: CmsModelField[];\n isRoot: boolean;\n extraResolvers?: Resolvers<any>;\n}\n\ninterface CreateFieldResolversFactoryParams {\n endpointType: ApiEndpoint;\n models: CmsModel[];\n model: CmsModel;\n fieldTypePlugins: CmsFieldTypePlugins;\n}\n\nconst getCreateResolver = (\n plugins: CmsFieldTypePlugins,\n field: CmsModelField,\n endpointType: ApiEndpoint\n): CmsModelFieldToGraphQLCreateResolver | null => {\n if (!plugins[field.type]) {\n return null;\n } else if (!plugins[field.type][endpointType]) {\n return null;\n }\n return plugins[field.type][endpointType].createResolver;\n};\n/**\n * We use a factory to avoid passing the parameters for recursive invocations.\n * This way they will always be in the function scope and we can only pass \"fields\".\n */\nexport const createFieldResolversFactory = (factoryParams: CreateFieldResolversFactoryParams) => {\n const { endpointType, models, model, fieldTypePlugins } = factoryParams;\n return function createFieldResolvers(params: CreateFieldResolvers) {\n const { graphQLType, fields, isRoot = false, extraResolvers = {} } = params;\n\n const fieldResolvers = { ...extraResolvers };\n const typeResolvers = {};\n\n for (const field of fields) {\n if (!fieldTypePlugins[field.type]) {\n continue;\n }\n /**\n * Field that is passed into this factory MUST have fieldId, so filter it before the method call.\n */\n if (!field.fieldId) {\n throw new WebinyError(\n \"Field is missing an `fieldId`. Cannot process field without the `fieldId` in the resolvers.\",\n \"FIELD_ID_ERROR\",\n {\n field\n }\n );\n }\n\n const createResolver = getCreateResolver(fieldTypePlugins, field, endpointType);\n\n let resolver: any;\n const fieldResolver = createResolver\n ? createResolver({ graphQLType, models, model, field, createFieldResolvers })\n : null;\n\n /**\n * When fieldResolver is false it will completely skip adding field fieldId into the resolvers.\n * This is to fix the breaking of GraphQL schema.\n */\n if (fieldResolver === false) {\n continue;\n } else if (typeof fieldResolver === \"function\") {\n resolver = fieldResolver;\n } else if (fieldResolver) {\n resolver = fieldResolver.resolver;\n Object.assign(typeResolvers, fieldResolver.typeResolvers);\n }\n\n const { fieldId } = field;\n // TODO @ts-refactor figure out types for parameters\n // @ts-ignore\n fieldResolvers[fieldId] = async (parent, args, context: CmsContext, info) => {\n // Get transformed value (eg. data decompression)\n const transformedValue = await entryFieldFromStorageTransform({\n context,\n model,\n field,\n value: isRoot ? parent.values[fieldId] : parent[fieldId]\n });\n\n set(isRoot ? parent.values : parent, fieldId, transformedValue);\n\n if (!resolver) {\n return isRoot ? parent.values[fieldId] : parent[fieldId];\n }\n\n return await resolver(isRoot ? parent.values : parent, args, context, info);\n };\n }\n\n return { [graphQLType]: fieldResolvers, ...typeResolvers };\n };\n};\n"],"mappings":";;;;;;;;;;;AAAA;;AASA;;AAEA;;;;;;AAgBA,MAAMA,iBAAiB,GAAG,CACtBC,OADsB,EAEtBC,KAFsB,EAGtBC,YAHsB,KAIwB;EAC9C,IAAI,CAACF,OAAO,CAACC,KAAK,CAACE,IAAP,CAAZ,EAA0B;IACtB,OAAO,IAAP;EACH,CAFD,MAEO,IAAI,CAACH,OAAO,CAACC,KAAK,CAACE,IAAP,CAAP,CAAoBD,YAApB,CAAL,EAAwC;IAC3C,OAAO,IAAP;EACH;;EACD,OAAOF,OAAO,CAACC,KAAK,CAACE,IAAP,CAAP,CAAoBD,YAApB,EAAkCE,cAAzC;AACH,CAXD;AAYA;AACA;AACA;AACA;;;AACO,MAAMC,2BAA2B,GAAIC,aAAD,IAAsD;EAC7F,MAAM;IAAEJ,YAAF;IAAgBK,MAAhB;IAAwBC,KAAxB;IAA+BC;EAA/B,IAAoDH,aAA1D;EACA,OAAO,SAASI,oBAAT,CAA8BC,MAA9B,EAA4D;IAC/D,MAAM;MAAEC,WAAF;MAAeC,MAAf;MAAuBC,MAAM,GAAG,KAAhC;MAAuCC,cAAc,GAAG;IAAxD,IAA+DJ,MAArE;;IAEA,MAAMK,cAAc,qBAAQD,cAAR,CAApB;;IACA,MAAME,aAAa,GAAG,EAAtB;;IAEA,KAAK,MAAMhB,KAAX,IAAoBY,MAApB,EAA4B;MACxB,IAAI,CAACJ,gBAAgB,CAACR,KAAK,CAACE,IAAP,CAArB,EAAmC;QAC/B;MACH;MACD;AACZ;AACA;;;MACY,IAAI,CAACF,KAAK,CAACiB,OAAX,EAAoB;QAChB,MAAM,IAAIC,cAAJ,CACF,6FADE,EAEF,gBAFE,EAGF;UACIlB;QADJ,CAHE,CAAN;MAOH;;MAED,MAAMG,cAAc,GAAGL,iBAAiB,CAACU,gBAAD,EAAmBR,KAAnB,EAA0BC,YAA1B,CAAxC;MAEA,IAAIkB,QAAJ;MACA,MAAMC,aAAa,GAAGjB,cAAc,GAC9BA,cAAc,CAAC;QAAEQ,WAAF;QAAeL,MAAf;QAAuBC,KAAvB;QAA8BP,KAA9B;QAAqCS;MAArC,CAAD,CADgB,GAE9B,IAFN;MAIA;AACZ;AACA;AACA;;MACY,IAAIW,aAAa,KAAK,KAAtB,EAA6B;QACzB;MACH,CAFD,MAEO,IAAI,OAAOA,aAAP,KAAyB,UAA7B,EAAyC;QAC5CD,QAAQ,GAAGC,aAAX;MACH,CAFM,MAEA,IAAIA,aAAJ,EAAmB;QACtBD,QAAQ,GAAGC,aAAa,CAACD,QAAzB;QACAE,MAAM,CAACC,MAAP,CAAcN,aAAd,EAA6BI,aAAa,CAACJ,aAA3C;MACH;;MAED,MAAM;QAAEC;MAAF,IAAcjB,KAApB,CArCwB,CAsCxB;MACA;;MACAe,cAAc,CAACE,OAAD,CAAd,GAA0B,OAAOM,MAAP,EAAeC,IAAf,EAAqBC,OAArB,EAA0CC,IAA1C,KAAmD;QACzE;QACA,MAAMC,gBAAgB,GAAG,MAAM,IAAAC,4CAAA,EAA+B;UAC1DH,OAD0D;UAE1DlB,KAF0D;UAG1DP,KAH0D;UAI1D6B,KAAK,EAAEhB,MAAM,GAAGU,MAAM,CAACO,MAAP,CAAcb,OAAd,CAAH,GAA4BM,MAAM,CAACN,OAAD;QAJW,CAA/B,CAA/B;QAOA,IAAAc,YAAA,EAAIlB,MAAM,GAAGU,MAAM,CAACO,MAAV,GAAmBP,MAA7B,EAAqCN,OAArC,EAA8CU,gBAA9C;;QAEA,IAAI,CAACR,QAAL,EAAe;UACX,OAAON,MAAM,GAAGU,MAAM,CAACO,MAAP,CAAcb,OAAd,CAAH,GAA4BM,MAAM,CAACN,OAAD,CAA/C;QACH;;QAED,OAAO,MAAME,QAAQ,CAACN,MAAM,GAAGU,MAAM,CAACO,MAAV,GAAmBP,MAA1B,EAAkCC,IAAlC,EAAwCC,OAAxC,EAAiDC,IAAjD,CAArB;MACH,CAhBD;IAiBH;;IAED;MAAS,CAACf,WAAD,GAAeI;IAAxB,GAA2CC,aAA3C;EACH,CAlED;AAmEH,CArEM"}
|
|
@@ -23,9 +23,10 @@ const createReadSDL = ({
|
|
|
23
23
|
}) => {
|
|
24
24
|
const typeName = (0, _createTypeName.createTypeName)(model.modelId);
|
|
25
25
|
const rTypeName = (0, _createTypeName.createReadTypeName)(typeName);
|
|
26
|
+
const type = "read";
|
|
26
27
|
const listFilterFieldsRender = (0, _renderListFilterFields.renderListFilterFields)({
|
|
27
28
|
model,
|
|
28
|
-
type
|
|
29
|
+
type,
|
|
29
30
|
fieldTypePlugins
|
|
30
31
|
});
|
|
31
32
|
const sortEnumRender = (0, _renderSortEnum.renderSortEnum)({
|
|
@@ -38,7 +39,7 @@ const createReadSDL = ({
|
|
|
38
39
|
});
|
|
39
40
|
const fieldsRender = (0, _renderFields.renderFields)({
|
|
40
41
|
model,
|
|
41
|
-
type
|
|
42
|
+
type,
|
|
42
43
|
fieldTypePlugins
|
|
43
44
|
});
|
|
44
45
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createReadSDL","model","fieldTypePlugins","typeName","createTypeName","modelId","rTypeName","createReadTypeName","
|
|
1
|
+
{"version":3,"names":["createReadSDL","model","fieldTypePlugins","typeName","createTypeName","modelId","rTypeName","createReadTypeName","type","listFilterFieldsRender","renderListFilterFields","sortEnumRender","renderSortEnum","getFilterFieldsRender","renderGetFilterFields","fieldsRender","renderFields","length","description","map","f","typeDefs","filter","Boolean","join","fields","pluralizedTypeName"],"sources":["createReadSDL.ts"],"sourcesContent":["import { CmsModel, CmsFieldTypePlugins, ApiEndpoint } from \"~/types\";\nimport { createReadTypeName, createTypeName } from \"~/utils/createTypeName\";\nimport { renderListFilterFields } from \"~/utils/renderListFilterFields\";\nimport { renderSortEnum } from \"~/utils/renderSortEnum\";\nimport { renderFields } from \"~/utils/renderFields\";\nimport { renderGetFilterFields } from \"~/utils/renderGetFilterFields\";\nimport { pluralizedTypeName } from \"~/utils/pluralizedTypeName\";\n\ninterface CreateReadSDLParams {\n model: CmsModel;\n fieldTypePlugins: CmsFieldTypePlugins;\n}\ninterface CreateReadSDL {\n (params: CreateReadSDLParams): string;\n}\n\nexport const createReadSDL: CreateReadSDL = ({ model, fieldTypePlugins }): string => {\n const typeName = createTypeName(model.modelId);\n const rTypeName = createReadTypeName(typeName);\n\n const type: ApiEndpoint = \"read\";\n\n const listFilterFieldsRender = renderListFilterFields({\n model,\n type,\n fieldTypePlugins\n });\n\n const sortEnumRender = renderSortEnum({\n model,\n fieldTypePlugins\n });\n const getFilterFieldsRender = renderGetFilterFields({\n model,\n fieldTypePlugins\n });\n const fieldsRender = renderFields({\n model,\n type,\n fieldTypePlugins\n });\n\n if (fieldsRender.length === 0) {\n return \"\";\n }\n\n return `\n \"\"\"${model.description || \"\"}\"\"\"\n ${fieldsRender\n .map(f => f.typeDefs)\n .filter(Boolean)\n .join(\"\\n\")}\n \n type ${rTypeName} {\n id: ID!\n entryId: String!\n createdOn: DateTime!\n savedOn: DateTime!\n createdBy: CmsCreatedBy!\n ownedBy: CmsOwnedBy!\n ${fieldsRender.map(f => f.fields).join(\"\\n\")}\n }\n \n ${\n getFilterFieldsRender &&\n `input ${rTypeName}GetWhereInput {\n ${getFilterFieldsRender}\n }`\n }\n \n \n ${\n listFilterFieldsRender &&\n `input ${rTypeName}ListWhereInput {\n ${listFilterFieldsRender}\n }`\n }\n \n \n ${\n sortEnumRender &&\n `enum ${rTypeName}ListSorter {\n ${sortEnumRender}\n }`\n }\n \n type ${rTypeName}Response {\n data: ${rTypeName}\n error: CmsError\n }\n \n type ${rTypeName}ListResponse {\n data: [${rTypeName}]\n meta: CmsListMeta\n error: CmsError\n }\n \n extend type Query {\n get${typeName}(where: ${rTypeName}GetWhereInput!): ${rTypeName}Response\n\n list${pluralizedTypeName(typeName)}(\n where: ${rTypeName}ListWhereInput\n sort: [${rTypeName}ListSorter]\n limit: Int\n after: String\n ): ${rTypeName}ListResponse\n }\n `;\n};\n"],"mappings":";;;;;;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAUO,MAAMA,aAA4B,GAAG,CAAC;EAAEC,KAAF;EAASC;AAAT,CAAD,KAAyC;EACjF,MAAMC,QAAQ,GAAG,IAAAC,8BAAA,EAAeH,KAAK,CAACI,OAArB,CAAjB;EACA,MAAMC,SAAS,GAAG,IAAAC,kCAAA,EAAmBJ,QAAnB,CAAlB;EAEA,MAAMK,IAAiB,GAAG,MAA1B;EAEA,MAAMC,sBAAsB,GAAG,IAAAC,8CAAA,EAAuB;IAClDT,KADkD;IAElDO,IAFkD;IAGlDN;EAHkD,CAAvB,CAA/B;EAMA,MAAMS,cAAc,GAAG,IAAAC,8BAAA,EAAe;IAClCX,KADkC;IAElCC;EAFkC,CAAf,CAAvB;EAIA,MAAMW,qBAAqB,GAAG,IAAAC,4CAAA,EAAsB;IAChDb,KADgD;IAEhDC;EAFgD,CAAtB,CAA9B;EAIA,MAAMa,YAAY,GAAG,IAAAC,0BAAA,EAAa;IAC9Bf,KAD8B;IAE9BO,IAF8B;IAG9BN;EAH8B,CAAb,CAArB;;EAMA,IAAIa,YAAY,CAACE,MAAb,KAAwB,CAA5B,EAA+B;IAC3B,OAAO,EAAP;EACH;;EAED,OAAQ;AACZ,aAAahB,KAAK,CAACiB,WAAN,IAAqB,EAAG;AACrC,UAAUH,YAAY,CACTI,GADH,CACOC,CAAC,IAAIA,CAAC,CAACC,QADd,EAEGC,MAFH,CAEUC,OAFV,EAGGC,IAHH,CAGQ,IAHR,CAGc;AACxB;AACA,eAAelB,SAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,cAAcS,YAAY,CAACI,GAAb,CAAiBC,CAAC,IAAIA,CAAC,CAACK,MAAxB,EAAgCD,IAAhC,CAAqC,IAArC,CAA2C;AACzD;AACA;AACA,UACYX,qBAAqB,IACpB,SAAQP,SAAU;AAC/B,cAAcO,qBAAsB;AACpC,UACS;AACT;AACA;AACA,UACYJ,sBAAsB,IACrB,SAAQH,SAAU;AAC/B,cAAcG,sBAAuB;AACrC,UACS;AACT;AACA;AACA,UACYE,cAAc,IACb,QAAOL,SAAU;AAC9B,cAAcK,cAAe;AAC7B,UACS;AACT;AACA,eAAeL,SAAU;AACzB,oBAAoBA,SAAU;AAC9B;AACA;AACA;AACA,eAAeA,SAAU;AACzB,qBAAqBA,SAAU;AAC/B;AACA;AACA;AACA;AACA;AACA,iBAAiBH,QAAS,WAAUG,SAAU,oBAAmBA,SAAU;AAC3E;AACA,kBAAkB,IAAAoB,sCAAA,EAAmBvB,QAAnB,CAA6B;AAC/C,yBAAyBG,SAAU;AACnC,yBAAyBA,SAAU;AACnC;AACA;AACA,iBAAiBA,SAAU;AAC3B;AACA,KA7DI;AA8DH,CA5FM"}
|
|
@@ -19,6 +19,8 @@ var _createPreviewResolvers = require("./createPreviewResolvers");
|
|
|
19
19
|
|
|
20
20
|
var _getSchemaFromFieldPlugins = require("../../utils/getSchemaFromFieldPlugins");
|
|
21
21
|
|
|
22
|
+
var _filterModelFields = require("../../utils/filterModelFields");
|
|
23
|
+
|
|
22
24
|
const generateSchemaPlugins = async context => {
|
|
23
25
|
const {
|
|
24
26
|
plugins,
|
|
@@ -44,8 +46,12 @@ const generateSchemaPlugins = async context => {
|
|
|
44
46
|
}, {}); // Load model data
|
|
45
47
|
|
|
46
48
|
context.security.disableAuthorization();
|
|
47
|
-
const
|
|
49
|
+
const initialModels = (await cms.listModels()).filter(model => model.isPrivate !== true);
|
|
48
50
|
context.security.enableAuthorization();
|
|
51
|
+
const models = (0, _filterModelFields.filterModelsDeletedFields)({
|
|
52
|
+
models: initialModels,
|
|
53
|
+
type
|
|
54
|
+
});
|
|
49
55
|
const schemas = (0, _getSchemaFromFieldPlugins.getSchemaFromFieldPlugins)({
|
|
50
56
|
models,
|
|
51
57
|
fieldTypePlugins,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["generateSchemaPlugins","context","plugins","cms","type","fieldTypePlugins","byType","reduce","acc","pl","fieldType","security","disableAuthorization","
|
|
1
|
+
{"version":3,"names":["generateSchemaPlugins","context","plugins","cms","type","fieldTypePlugins","byType","reduce","acc","pl","fieldType","security","disableAuthorization","initialModels","listModels","filter","model","isPrivate","enableAuthorization","models","filterModelsDeletedFields","schemas","getSchemaFromFieldPlugins","newPlugins","schema","push","GraphQLSchemaPlugin","fields","length","forEach","typeDefs","createManageSDL","resolvers","createManageResolvers","createReadSDL","READ","createReadResolvers","createPreviewResolvers"],"sources":["schemaPlugins.ts"],"sourcesContent":["import { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/plugins/GraphQLSchemaPlugin\";\nimport { CmsModelFieldToGraphQLPlugin, CmsFieldTypePlugins, CmsContext } from \"~/types\";\nimport { createManageSDL } from \"./createManageSDL\";\nimport { createReadSDL } from \"./createReadSDL\";\nimport { createManageResolvers } from \"./createManageResolvers\";\nimport { createReadResolvers } from \"./createReadResolvers\";\nimport { createPreviewResolvers } from \"./createPreviewResolvers\";\nimport { getSchemaFromFieldPlugins } from \"~/utils/getSchemaFromFieldPlugins\";\nimport { filterModelsDeletedFields } from \"~/utils/filterModelFields\";\n\nexport const generateSchemaPlugins = async (\n context: CmsContext\n): Promise<GraphQLSchemaPlugin<CmsContext>[]> => {\n const { plugins, cms } = context;\n\n /**\n * If type does not exist, we are not generating schema plugins for models.\n * It should not come to this point, but we check it anyways.\n */\n const { type } = cms;\n if (!type) {\n return [];\n }\n\n // Structure plugins for faster access\n const fieldTypePlugins: CmsFieldTypePlugins = plugins\n .byType<CmsModelFieldToGraphQLPlugin>(\"cms-model-field-to-graphql\")\n .reduce((acc, pl) => {\n acc[pl.fieldType] = pl;\n return acc;\n }, {} as Record<string, CmsModelFieldToGraphQLPlugin>);\n\n // Load model data\n context.security.disableAuthorization();\n const initialModels = (await cms.listModels()).filter(model => model.isPrivate !== true);\n context.security.enableAuthorization();\n\n const models = filterModelsDeletedFields({\n models: initialModels,\n type\n });\n\n const schemas = getSchemaFromFieldPlugins({\n models,\n fieldTypePlugins,\n type\n });\n\n const newPlugins: GraphQLSchemaPlugin<CmsContext>[] = [];\n for (const schema of schemas) {\n newPlugins.push(new GraphQLSchemaPlugin(schema));\n }\n\n models\n .filter(model => model.fields.length > 0)\n .forEach(model => {\n switch (type) {\n case \"manage\":\n newPlugins.push(\n new GraphQLSchemaPlugin({\n typeDefs: createManageSDL({ model, fieldTypePlugins }),\n resolvers: createManageResolvers({\n models,\n model,\n fieldTypePlugins,\n context\n })\n })\n );\n\n break;\n case \"preview\":\n case \"read\":\n newPlugins.push(\n new GraphQLSchemaPlugin({\n typeDefs: createReadSDL({ model, fieldTypePlugins }),\n resolvers: cms.READ\n ? createReadResolvers({\n models,\n model,\n fieldTypePlugins,\n context\n })\n : createPreviewResolvers({\n models,\n model,\n fieldTypePlugins,\n context\n })\n })\n );\n break;\n default:\n return;\n }\n });\n\n return newPlugins.filter(pl => !!pl.schema.typeDefs);\n};\n"],"mappings":";;;;;;;AAAA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEO,MAAMA,qBAAqB,GAAG,MACjCC,OADiC,IAEY;EAC7C,MAAM;IAAEC,OAAF;IAAWC;EAAX,IAAmBF,OAAzB;EAEA;AACJ;AACA;AACA;;EACI,MAAM;IAAEG;EAAF,IAAWD,GAAjB;;EACA,IAAI,CAACC,IAAL,EAAW;IACP,OAAO,EAAP;EACH,CAV4C,CAY7C;;;EACA,MAAMC,gBAAqC,GAAGH,OAAO,CAChDI,MADyC,CACJ,4BADI,EAEzCC,MAFyC,CAElC,CAACC,GAAD,EAAMC,EAAN,KAAa;IACjBD,GAAG,CAACC,EAAE,CAACC,SAAJ,CAAH,GAAoBD,EAApB;IACA,OAAOD,GAAP;EACH,CALyC,EAKvC,EALuC,CAA9C,CAb6C,CAoB7C;;EACAP,OAAO,CAACU,QAAR,CAAiBC,oBAAjB;EACA,MAAMC,aAAa,GAAG,CAAC,MAAMV,GAAG,CAACW,UAAJ,EAAP,EAAyBC,MAAzB,CAAgCC,KAAK,IAAIA,KAAK,CAACC,SAAN,KAAoB,IAA7D,CAAtB;EACAhB,OAAO,CAACU,QAAR,CAAiBO,mBAAjB;EAEA,MAAMC,MAAM,GAAG,IAAAC,4CAAA,EAA0B;IACrCD,MAAM,EAAEN,aAD6B;IAErCT;EAFqC,CAA1B,CAAf;EAKA,MAAMiB,OAAO,GAAG,IAAAC,oDAAA,EAA0B;IACtCH,MADsC;IAEtCd,gBAFsC;IAGtCD;EAHsC,CAA1B,CAAhB;EAMA,MAAMmB,UAA6C,GAAG,EAAtD;;EACA,KAAK,MAAMC,MAAX,IAAqBH,OAArB,EAA8B;IAC1BE,UAAU,CAACE,IAAX,CAAgB,IAAIC,wCAAJ,CAAwBF,MAAxB,CAAhB;EACH;;EAEDL,MAAM,CACDJ,MADL,CACYC,KAAK,IAAIA,KAAK,CAACW,MAAN,CAAaC,MAAb,GAAsB,CAD3C,EAEKC,OAFL,CAEab,KAAK,IAAI;IACd,QAAQZ,IAAR;MACI,KAAK,QAAL;QACImB,UAAU,CAACE,IAAX,CACI,IAAIC,wCAAJ,CAAwB;UACpBI,QAAQ,EAAE,IAAAC,gCAAA,EAAgB;YAAEf,KAAF;YAASX;UAAT,CAAhB,CADU;UAEpB2B,SAAS,EAAE,IAAAC,4CAAA,EAAsB;YAC7Bd,MAD6B;YAE7BH,KAF6B;YAG7BX,gBAH6B;YAI7BJ;UAJ6B,CAAtB;QAFS,CAAxB,CADJ;QAYA;;MACJ,KAAK,SAAL;MACA,KAAK,MAAL;QACIsB,UAAU,CAACE,IAAX,CACI,IAAIC,wCAAJ,CAAwB;UACpBI,QAAQ,EAAE,IAAAI,4BAAA,EAAc;YAAElB,KAAF;YAASX;UAAT,CAAd,CADU;UAEpB2B,SAAS,EAAE7B,GAAG,CAACgC,IAAJ,GACL,IAAAC,wCAAA,EAAoB;YAChBjB,MADgB;YAEhBH,KAFgB;YAGhBX,gBAHgB;YAIhBJ;UAJgB,CAApB,CADK,GAOL,IAAAoC,8CAAA,EAAuB;YACnBlB,MADmB;YAEnBH,KAFmB;YAGnBX,gBAHmB;YAInBJ;UAJmB,CAAvB;QATc,CAAxB,CADJ;QAkBA;;MACJ;QACI;IArCR;EAuCH,CA1CL;EA4CA,OAAOsB,UAAU,CAACR,MAAX,CAAkBN,EAAE,IAAI,CAAC,CAACA,EAAE,CAACe,MAAH,CAAUM,QAApC,CAAP;AACH,CAxFM"}
|