@webiny/api-headless-cms 0.0.0-unstable.6e5425ee89 → 0.0.0-unstable.7f63ea0744

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 (182) hide show
  1. package/context.d.ts +5 -2
  2. package/context.js +53 -4
  3. package/context.js.map +1 -1
  4. package/crud/contentEntry/markLockedFields.js +4 -2
  5. package/crud/contentEntry/markLockedFields.js.map +1 -1
  6. package/crud/contentEntry/referenceFieldsMapping.js +7 -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 +72 -0
  10. package/crud/contentEntry/searchableFields.js.map +1 -0
  11. package/crud/contentEntry.crud.js +99 -42
  12. package/crud/contentEntry.crud.js.map +1 -1
  13. package/crud/contentModel/beforeCreate.d.ts +2 -3
  14. package/crud/contentModel/beforeCreate.js +4 -5
  15. package/crud/contentModel/beforeCreate.js.map +1 -1
  16. package/crud/contentModel/beforeUpdate.d.ts +2 -4
  17. package/crud/contentModel/beforeUpdate.js +2 -2
  18. package/crud/contentModel/beforeUpdate.js.map +1 -1
  19. package/crud/contentModel/createFieldStorageId.js +4 -1
  20. package/crud/contentModel/createFieldStorageId.js.map +1 -1
  21. package/crud/contentModel/validateModel.d.ts +3 -4
  22. package/crud/contentModel/validateModel.js +6 -3
  23. package/crud/contentModel/validateModel.js.map +1 -1
  24. package/crud/contentModel/validateModelFields.d.ts +3 -4
  25. package/crud/contentModel/validateModelFields.js +100 -38
  26. package/crud/contentModel/validateModelFields.js.map +1 -1
  27. package/crud/contentModel/validation.d.ts +477 -0
  28. package/crud/contentModel/validation.js +97 -0
  29. package/crud/contentModel/validation.js.map +1 -0
  30. package/crud/contentModel.crud.js +212 -177
  31. package/crud/contentModel.crud.js.map +1 -1
  32. package/crud/contentModelGroup/validation.d.ts +30 -0
  33. package/crud/contentModelGroup/validation.js +34 -0
  34. package/crud/contentModelGroup/validation.js.map +1 -0
  35. package/crud/contentModelGroup.crud.js +47 -52
  36. package/crud/contentModelGroup.crud.js.map +1 -1
  37. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.d.ts +11 -0
  38. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +203 -0
  39. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -0
  40. package/fieldConverters/index.d.ts +2 -1
  41. package/fieldConverters/index.js +2 -1
  42. package/fieldConverters/index.js.map +1 -1
  43. package/graphql/buildSchemaPlugins.d.ts +8 -3
  44. package/graphql/buildSchemaPlugins.js +3 -7
  45. package/graphql/buildSchemaPlugins.js.map +1 -1
  46. package/graphql/createExecutableSchema.d.ts +7 -0
  47. package/graphql/createExecutableSchema.js +29 -0
  48. package/graphql/createExecutableSchema.js.map +1 -0
  49. package/graphql/generateSchema.d.ts +8 -0
  50. package/graphql/generateSchema.js +31 -0
  51. package/graphql/generateSchema.js.map +1 -0
  52. package/graphql/graphQLHandlerFactory.js +91 -50
  53. package/graphql/graphQLHandlerFactory.js.map +1 -1
  54. package/graphql/index.d.ts +1 -3
  55. package/graphql/index.js +2 -39
  56. package/graphql/index.js.map +1 -1
  57. package/graphql/schema/baseContentSchema.d.ts +6 -2
  58. package/graphql/schema/baseContentSchema.js +6 -4
  59. package/graphql/schema/baseContentSchema.js.map +1 -1
  60. package/graphql/schema/baseSchema.d.ts +3 -0
  61. package/graphql/schema/baseSchema.js +53 -0
  62. package/graphql/schema/baseSchema.js.map +1 -0
  63. package/graphql/schema/contentEntries.d.ts +6 -2
  64. package/graphql/schema/contentEntries.js +37 -23
  65. package/graphql/schema/contentEntries.js.map +1 -1
  66. package/graphql/schema/contentModelGroups.d.ts +6 -2
  67. package/graphql/schema/contentModelGroups.js +7 -3
  68. package/graphql/schema/contentModelGroups.js.map +1 -1
  69. package/graphql/schema/contentModels.d.ts +6 -2
  70. package/graphql/schema/contentModels.js +40 -7
  71. package/graphql/schema/contentModels.js.map +1 -1
  72. package/graphql/schema/createFieldResolvers.d.ts +1 -1
  73. package/graphql/schema/createFieldResolvers.js +17 -6
  74. package/graphql/schema/createFieldResolvers.js.map +1 -1
  75. package/graphql/schema/createManageSDL.d.ts +2 -0
  76. package/graphql/schema/createManageSDL.js +10 -6
  77. package/graphql/schema/createManageSDL.js.map +1 -1
  78. package/graphql/schema/createReadResolvers.js +5 -0
  79. package/graphql/schema/createReadResolvers.js.map +1 -1
  80. package/graphql/schema/createReadSDL.d.ts +2 -0
  81. package/graphql/schema/createReadSDL.js +11 -5
  82. package/graphql/schema/createReadSDL.js.map +1 -1
  83. package/graphql/schema/schemaPlugins.d.ts +8 -3
  84. package/graphql/schema/schemaPlugins.js +58 -46
  85. package/graphql/schema/schemaPlugins.js.map +1 -1
  86. package/graphql/system.js +69 -72
  87. package/graphql/system.js.map +1 -1
  88. package/graphqlFields/dynamicZone/dynamicZoneField.d.ts +2 -0
  89. package/graphqlFields/dynamicZone/dynamicZoneField.js +208 -0
  90. package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -0
  91. package/graphqlFields/dynamicZone/dynamicZoneStorage.d.ts +3 -0
  92. package/graphqlFields/dynamicZone/dynamicZoneStorage.js +63 -0
  93. package/graphqlFields/dynamicZone/dynamicZoneStorage.js.map +1 -0
  94. package/graphqlFields/dynamicZone/index.d.ts +2 -0
  95. package/graphqlFields/dynamicZone/index.js +19 -0
  96. package/graphqlFields/dynamicZone/index.js.map +1 -0
  97. package/graphqlFields/index.d.ts +1 -1
  98. package/graphqlFields/index.js +2 -1
  99. package/graphqlFields/index.js.map +1 -1
  100. package/graphqlFields/number.js +4 -0
  101. package/graphqlFields/number.js.map +1 -1
  102. package/graphqlFields/object.js +112 -68
  103. package/graphqlFields/object.js.map +1 -1
  104. package/graphqlFields/ref.js +31 -45
  105. package/graphqlFields/ref.js.map +1 -1
  106. package/index.d.ts +3 -3
  107. package/index.js +3 -7
  108. package/index.js.map +1 -1
  109. package/package.json +28 -28
  110. package/plugins/CmsGraphQLSchemaPlugin.d.ts +5 -0
  111. package/plugins/CmsGraphQLSchemaPlugin.js +12 -0
  112. package/plugins/CmsGraphQLSchemaPlugin.js.map +1 -0
  113. package/plugins/CmsGraphQLSchemaSorterPlugin.d.ts +20 -0
  114. package/plugins/CmsGraphQLSchemaSorterPlugin.js +28 -0
  115. package/plugins/CmsGraphQLSchemaSorterPlugin.js.map +1 -0
  116. package/plugins/CmsModelFieldConverterPlugin.d.ts +2 -2
  117. package/plugins/CmsModelFieldConverterPlugin.js.map +1 -1
  118. package/plugins/StorageTransformPlugin.d.ts +11 -11
  119. package/plugins/StorageTransformPlugin.js.map +1 -1
  120. package/plugins/index.d.ts +2 -0
  121. package/plugins/index.js +22 -0
  122. package/plugins/index.js.map +1 -1
  123. package/storage/object.js +4 -2
  124. package/storage/object.js.map +1 -1
  125. package/types.d.ts +241 -57
  126. package/types.js +62 -7
  127. package/types.js.map +1 -1
  128. package/utils/converters/ConverterCollection.js +5 -2
  129. package/utils/converters/ConverterCollection.js.map +1 -1
  130. package/utils/createTypeFromFields.d.ts +15 -0
  131. package/utils/createTypeFromFields.js +64 -0
  132. package/utils/createTypeFromFields.js.map +1 -0
  133. package/utils/createTypeName.js +2 -1
  134. package/utils/createTypeName.js.map +1 -1
  135. package/utils/entryStorage.js +14 -11
  136. package/utils/entryStorage.js.map +1 -1
  137. package/utils/getBaseFieldType.d.ts +4 -0
  138. package/utils/getBaseFieldType.js +10 -0
  139. package/utils/getBaseFieldType.js.map +1 -0
  140. package/utils/getSchemaFromFieldPlugins.d.ts +4 -7
  141. package/utils/getSchemaFromFieldPlugins.js +22 -14
  142. package/utils/getSchemaFromFieldPlugins.js.map +1 -1
  143. package/utils/renderFields.js +2 -1
  144. package/utils/renderFields.js.map +1 -1
  145. package/utils/renderGetFilterFields.js +6 -3
  146. package/utils/renderGetFilterFields.js.map +1 -1
  147. package/utils/renderInputFields.js +2 -1
  148. package/utils/renderInputFields.js.map +1 -1
  149. package/utils/renderListFilterFields.js +4 -2
  150. package/utils/renderListFilterFields.js.map +1 -1
  151. package/utils/renderSortEnum.d.ts +7 -4
  152. package/utils/renderSortEnum.js +21 -4
  153. package/utils/renderSortEnum.js.map +1 -1
  154. package/validators/dynamicZone.d.ts +2 -0
  155. package/validators/dynamicZone.js +20 -0
  156. package/validators/dynamicZone.js.map +1 -0
  157. package/validators/index.js +2 -1
  158. package/validators/index.js.map +1 -1
  159. package/crud/contentModel/createFieldModels.d.ts +0 -2
  160. package/crud/contentModel/createFieldModels.js +0 -20
  161. package/crud/contentModel/createFieldModels.js.map +0 -1
  162. package/crud/contentModel/fieldIdValidation.d.ts +0 -1
  163. package/crud/contentModel/fieldIdValidation.js +0 -20
  164. package/crud/contentModel/fieldIdValidation.js.map +0 -1
  165. package/crud/contentModel/idValidation.d.ts +0 -1
  166. package/crud/contentModel/idValidation.js +0 -17
  167. package/crud/contentModel/idValidation.js.map +0 -1
  168. package/crud/contentModel/models.d.ts +0 -4
  169. package/crud/contentModel/models.js +0 -173
  170. package/crud/contentModel/models.js.map +0 -1
  171. package/crud/index.d.ts +0 -6
  172. package/crud/index.js +0 -69
  173. package/crud/index.js.map +0 -1
  174. package/graphql/schema/resolvers/manage/resolveRequestChanges.d.ts +0 -7
  175. package/graphql/schema/resolvers/manage/resolveRequestChanges.js +0 -21
  176. package/graphql/schema/resolvers/manage/resolveRequestChanges.js.map +0 -1
  177. package/graphql/schema/resolvers/manage/resolveRequestReview.d.ts +0 -7
  178. package/graphql/schema/resolvers/manage/resolveRequestReview.js +0 -21
  179. package/graphql/schema/resolvers/manage/resolveRequestReview.js.map +0 -1
  180. package/utils/filterModelFields.d.ts +0 -16
  181. package/utils/filterModelFields.js +0 -71
  182. package/utils/filterModelFields.js.map +0 -1
@@ -22,6 +22,7 @@ var _access = require("../utils/access");
22
22
  var _ownership = require("../utils/ownership");
23
23
  var _entryStorage = require("../utils/entryStorage");
24
24
  var _valueKeyStorageConverter = require("../utils/converters/valueKeyStorageConverter");
25
+ var _searchableFields = require("./contentEntry/searchableFields");
25
26
  /**
26
27
  * Package mdbid does not have types.
27
28
  */
@@ -138,10 +139,19 @@ const createEntryMeta = (input, original) => {
138
139
  }
139
140
  return meta;
140
141
  };
141
- const createEntryId = version => {
142
- const entryId = (0, _mdbid.default)();
142
+ const createEntryId = input => {
143
+ let entryId = (0, _mdbid.default)();
144
+ if (input.id) {
145
+ if (input.id.match(/^([a-zA-Z0-9])([a-zA-Z0-9\-]+)([a-zA-Z0-9])$/) === null) {
146
+ throw new _error.default("The provided ID is not valid. It must be a string which can A-Z, a-z, 0-9, - and it cannot start or end with a -.", "INVALID_ID", {
147
+ id: input.id
148
+ });
149
+ }
150
+ entryId = input.id;
151
+ }
152
+ const version = 1;
143
153
  return {
144
- entryId,
154
+ entryId: entryId,
145
155
  version,
146
156
  id: (0, _utils.createIdentifier)({
147
157
  id: entryId,
@@ -168,31 +178,6 @@ const increaseEntryIdVersion = id => {
168
178
  })
169
179
  };
170
180
  };
171
- const getSearchableFields = params => {
172
- const {
173
- plugins,
174
- model,
175
- fields
176
- } = params;
177
- const fieldPluginMap = plugins.byType("cms-model-field-to-graphql").reduce((collection, field) => {
178
- collection[field.fieldType] = field;
179
- return collection;
180
- }, {});
181
- return model.fields.filter(field => {
182
- if (!field.fieldId) {
183
- return false;
184
- }
185
- const plugin = fieldPluginMap[field.type];
186
- if (!plugin) {
187
- return false;
188
- } else if (!plugin.fullTextSearch) {
189
- return false;
190
- } else if (!fields || fields.length === 0) {
191
- return true;
192
- }
193
- return fields.includes(field.fieldId);
194
- }).map(field => field.fieldId);
195
- };
196
181
  const allowedEntryStatus = ["draft", "published", "unpublished"];
197
182
  const transformEntryStatus = status => {
198
183
  return allowedEntryStatus.includes(status) ? status : "draft";
@@ -208,32 +193,51 @@ const createContentEntryCrud = params => {
208
193
  plugins
209
194
  } = context;
210
195
 
211
- // create
196
+ /**
197
+ * Create
198
+ */
212
199
  const onEntryBeforeCreate = (0, _pubsub.createTopic)("cms.onEntryBeforeCreate");
213
200
  const onEntryAfterCreate = (0, _pubsub.createTopic)("cms.onEntryAfterCreate");
214
201
  const onEntryCreateError = (0, _pubsub.createTopic)("cms.onEntryCreateError");
215
202
 
216
- // create revision
203
+ /**
204
+ * Create new revision
205
+ */
217
206
  const onEntryBeforeCreateRevision = (0, _pubsub.createTopic)("cms.onEntryBeforeCreateRevision");
218
207
  const onEntryRevisionAfterCreate = (0, _pubsub.createTopic)("cms.onEntryRevisionAfterCreate");
219
208
  const onEntryCreateRevisionError = (0, _pubsub.createTopic)("cms.onEntryCreateRevisionError");
220
209
 
221
- // update
210
+ /**
211
+ * Update
212
+ */
222
213
  const onEntryBeforeUpdate = (0, _pubsub.createTopic)("cms.onEntryBeforeUpdate");
223
214
  const onEntryAfterUpdate = (0, _pubsub.createTopic)("cms.onEntryAfterUpdate");
224
215
  const onEntryUpdateError = (0, _pubsub.createTopic)("cms.onEntryUpdateError");
225
216
 
226
- // publish
217
+ /**
218
+ * Publish
219
+ */
227
220
  const onEntryBeforePublish = (0, _pubsub.createTopic)("cms.onEntryBeforePublish");
228
- const onEntryAfterPublish = (0, _pubsub.createTopic)("cms.onEntryAfterPublic");
221
+ const onEntryAfterPublish = (0, _pubsub.createTopic)("cms.onEntryAfterPublish");
229
222
  const onEntryPublishError = (0, _pubsub.createTopic)("cms.onEntryPublishError");
230
223
 
231
- // unpublish
224
+ /**
225
+ * Republish
226
+ */
227
+ const onEntryBeforeRepublish = (0, _pubsub.createTopic)("cms.onEntryBeforeRepublish");
228
+ const onEntryAfterRepublish = (0, _pubsub.createTopic)("cms.onEntryAfterRepublish");
229
+ const onEntryRepublishError = (0, _pubsub.createTopic)("cms.onEntryRepublishError");
230
+
231
+ /**
232
+ * Unpublish
233
+ */
232
234
  const onEntryBeforeUnpublish = (0, _pubsub.createTopic)("cms.onEntryBeforeUnpublish");
233
235
  const onEntryAfterUnpublish = (0, _pubsub.createTopic)("cms.onEntryAfterUnpublish");
234
236
  const onEntryUnpublishError = (0, _pubsub.createTopic)("cms.onEntryUnpublishError");
235
237
 
236
- // delete
238
+ /**
239
+ * Delete
240
+ */
237
241
  const onEntryBeforeDelete = (0, _pubsub.createTopic)("cms.onEntryBeforeDelete");
238
242
  const onEntryAfterDelete = (0, _pubsub.createTopic)("cms.onEntryAfterDelete");
239
243
  const onEntryDeleteError = (0, _pubsub.createTopic)("cms.onEntryDeleteError");
@@ -338,25 +342,51 @@ const createContentEntryCrud = params => {
338
342
  onBeforeEntryList: onEntryBeforeList,
339
343
  /**
340
344
  * Released in 5.34.0
345
+ *
346
+ * Create
341
347
  */
342
348
  onEntryBeforeCreate,
343
349
  onEntryAfterCreate,
344
350
  onEntryCreateError,
351
+ /**
352
+ * Create revision
353
+ */
345
354
  onEntryRevisionBeforeCreate: onEntryBeforeCreateRevision,
346
355
  onEntryRevisionAfterCreate,
347
356
  onEntryRevisionCreateError: onEntryCreateRevisionError,
357
+ /**
358
+ * Update
359
+ */
348
360
  onEntryBeforeUpdate,
349
361
  onEntryAfterUpdate,
350
362
  onEntryUpdateError,
363
+ /**
364
+ * Delete whole entry
365
+ */
351
366
  onEntryBeforeDelete,
352
367
  onEntryAfterDelete,
353
368
  onEntryDeleteError,
369
+ /**
370
+ * Delete entry revision
371
+ */
354
372
  onEntryRevisionBeforeDelete,
355
373
  onEntryRevisionAfterDelete,
356
374
  onEntryRevisionDeleteError,
375
+ /**
376
+ * Publish
377
+ */
357
378
  onEntryBeforePublish,
358
379
  onEntryAfterPublish,
359
380
  onEntryPublishError,
381
+ /**
382
+ * Republish
383
+ */
384
+ onEntryBeforeRepublish,
385
+ onEntryAfterRepublish,
386
+ onEntryRepublishError,
387
+ /**
388
+ * Unpublish
389
+ */
360
390
  onEntryBeforeUnpublish,
361
391
  onEntryAfterUnpublish,
362
392
  onEntryUnpublishError,
@@ -405,7 +435,7 @@ const createContentEntryCrud = params => {
405
435
  return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
406
436
  },
407
437
  /**
408
- * Get latest revisions by entry IDs.
438
+ * Get the latest revisions by entry IDs.
409
439
  */
410
440
  async getLatestEntriesByIds(initialModel, ids) {
411
441
  const permission = await checkEntryPermissions({
@@ -476,8 +506,10 @@ const createContentEntryCrud = params => {
476
506
  plugins
477
507
  });
478
508
  const {
479
- where: initialWhere
509
+ where: initialWhere,
510
+ limit: initialLimit
480
511
  } = params;
512
+ const limit = initialLimit && initialLimit > 0 ? initialLimit : 50;
481
513
  /**
482
514
  * We always assign tenant and locale because we do not allow one model to have content through multiple tenants.
483
515
  */
@@ -503,10 +535,10 @@ const createContentEntryCrud = params => {
503
535
  where
504
536
  });
505
537
  }
506
- const fields = getSearchableFields({
507
- model,
538
+ const fields = (0, _searchableFields.getSearchableFields)({
539
+ fields: model.fields,
508
540
  plugins: context.plugins,
509
- fields: params.fields || []
541
+ input: params.fields || []
510
542
  });
511
543
  try {
512
544
  await onEntryBeforeList.publish({
@@ -519,6 +551,7 @@ const createContentEntryCrud = params => {
519
551
  cursor,
520
552
  items
521
553
  } = await storageOperations.entries.list(model, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, params), {}, {
554
+ limit,
522
555
  where,
523
556
  fields
524
557
  }));
@@ -597,11 +630,15 @@ const createContentEntryCrud = params => {
597
630
  displayName: identity.displayName,
598
631
  type: identity.type
599
632
  };
633
+ /**
634
+ * There is a possibility that user sends an ID in the input, so we will use that one.
635
+ * There is no check if the ID is unique or not, that is up to the user.
636
+ */
600
637
  const {
601
638
  id,
602
639
  entryId,
603
640
  version
604
- } = createEntryId(1);
641
+ } = createEntryId(inputData);
605
642
  const entry = {
606
643
  webinyVersion: context.WEBINY_VERSION,
607
644
  tenant: getTenant().id,
@@ -746,6 +783,7 @@ const createContentEntryCrud = params => {
746
783
  } catch (ex) {
747
784
  await onEntryCreateRevisionError.publish({
748
785
  entry,
786
+ original: originalEntry,
749
787
  model,
750
788
  input,
751
789
  error: ex
@@ -851,6 +889,10 @@ const createContentEntryCrud = params => {
851
889
  });
852
890
  }
853
891
  },
892
+ /**
893
+ * Method used internally. Not documented and should not be used in users systems.
894
+ * @internal
895
+ */
854
896
  async republishEntry(initialModel, id) {
855
897
  await checkEntryPermissions({
856
898
  rwd: "w"
@@ -908,11 +950,26 @@ const createContentEntryCrud = params => {
908
950
  * Then we move onto publishing it again.
909
951
  */
910
952
  try {
911
- return await storageOperations.entries.publish(model, {
953
+ await onEntryBeforeRepublish.publish({
954
+ entry,
955
+ model
956
+ });
957
+ const result = await storageOperations.entries.publish(model, {
912
958
  entry,
913
959
  storageEntry
914
960
  });
961
+ await onEntryAfterRepublish.publish({
962
+ entry,
963
+ model,
964
+ storageEntry
965
+ });
966
+ return result;
915
967
  } catch (ex) {
968
+ await onEntryRepublishError.publish({
969
+ entry,
970
+ model,
971
+ error: ex
972
+ });
916
973
  throw new _error.default("Could not publish existing entry while re-publishing.", "REPUBLISH_PUBLISH_ERROR", {
917
974
  entry
918
975
  });