decap-cms-core 3.6.2 → 3.7.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.
Files changed (132) hide show
  1. package/dist/decap-cms-core.js +26 -26
  2. package/dist/decap-cms-core.js.LICENSE.txt +22 -4
  3. package/dist/decap-cms-core.js.map +1 -1
  4. package/dist/esm/actions/config.js +57 -49
  5. package/dist/esm/actions/editorialWorkflow.js +4 -4
  6. package/dist/esm/actions/entries.js +8 -14
  7. package/dist/esm/actions/mediaLibrary.js +6 -11
  8. package/dist/esm/actions/search.js +2 -2
  9. package/dist/esm/actions/status.js +2 -8
  10. package/dist/esm/backend.js +70 -79
  11. package/dist/esm/bootstrap.js +2 -2
  12. package/dist/esm/components/App/App.js +28 -34
  13. package/dist/esm/components/App/Header.js +32 -39
  14. package/dist/esm/components/Collection/Collection.js +45 -48
  15. package/dist/esm/components/Collection/CollectionSearch.js +76 -81
  16. package/dist/esm/components/Collection/CollectionTop.js +1 -2
  17. package/dist/esm/components/Collection/Entries/Entries.js +2 -4
  18. package/dist/esm/components/Collection/Entries/EntriesCollection.js +25 -29
  19. package/dist/esm/components/Collection/Entries/EntriesSearch.js +34 -38
  20. package/dist/esm/components/Collection/Entries/EntryCard.js +8 -13
  21. package/dist/esm/components/Collection/Entries/EntryListing.js +72 -76
  22. package/dist/esm/components/Collection/FilterControl.js +1 -1
  23. package/dist/esm/components/Collection/GroupControl.js +1 -1
  24. package/dist/esm/components/Collection/NestedCollection.js +50 -53
  25. package/dist/esm/components/Collection/Sidebar.js +35 -38
  26. package/dist/esm/components/Collection/SortControl.js +3 -3
  27. package/dist/esm/components/Collection/ViewStyleControl.js +1 -2
  28. package/dist/esm/components/Editor/Editor.js +197 -201
  29. package/dist/esm/components/Editor/EditorControlPane/EditorControl.js +79 -87
  30. package/dist/esm/components/Editor/EditorControlPane/EditorControlPane.js +75 -86
  31. package/dist/esm/components/Editor/EditorControlPane/Widget.js +226 -228
  32. package/dist/esm/components/Editor/EditorInterface.js +69 -80
  33. package/dist/esm/components/Editor/EditorPreviewPane/EditorPreview.js +1 -2
  34. package/dist/esm/components/Editor/EditorPreviewPane/EditorPreviewContent.js +20 -28
  35. package/dist/esm/components/Editor/EditorPreviewPane/EditorPreviewPane.js +163 -161
  36. package/dist/esm/components/Editor/EditorPreviewPane/PreviewHOC.js +4 -8
  37. package/dist/esm/components/Editor/EditorToolbar.js +335 -347
  38. package/dist/esm/components/Editor/withWorkflow.js +5 -6
  39. package/dist/esm/components/MediaLibrary/MediaLibrary.js +304 -294
  40. package/dist/esm/components/MediaLibrary/MediaLibraryButtons.js +40 -46
  41. package/dist/esm/components/MediaLibrary/MediaLibraryCard.js +1 -2
  42. package/dist/esm/components/MediaLibrary/MediaLibraryCardGrid.js +8 -13
  43. package/dist/esm/components/MediaLibrary/MediaLibraryModal.js +3 -3
  44. package/dist/esm/components/MediaLibrary/MediaLibrarySearch.js +1 -2
  45. package/dist/esm/components/MediaLibrary/MediaLibraryTop.js +3 -6
  46. package/dist/esm/components/UI/DragDrop.js +15 -23
  47. package/dist/esm/components/UI/ErrorBoundary.js +23 -25
  48. package/dist/esm/components/UI/Modal.js +10 -12
  49. package/dist/esm/components/UI/Notifications.js +4 -8
  50. package/dist/esm/components/UI/SettingsDropdown.js +4 -8
  51. package/dist/esm/components/Workflow/Workflow.js +19 -20
  52. package/dist/esm/components/Workflow/WorkflowCard.js +2 -4
  53. package/dist/esm/components/Workflow/WorkflowList.js +105 -113
  54. package/dist/esm/constants/configSchema.js +18 -16
  55. package/dist/esm/formats/formats.js +11 -12
  56. package/dist/esm/formats/frontmatter.js +17 -21
  57. package/dist/esm/formats/yaml.js +2 -6
  58. package/dist/esm/index.js +3 -7
  59. package/dist/esm/integrations/providers/algolia/implementation.js +12 -14
  60. package/dist/esm/integrations/providers/assetStore/implementation.js +10 -12
  61. package/dist/esm/lib/formatters.js +13 -17
  62. package/dist/esm/lib/i18n.js +35 -33
  63. package/dist/esm/lib/phrases.js +2 -2
  64. package/dist/esm/lib/registry.js +35 -35
  65. package/dist/esm/lib/serializeEntryValues.js +3 -3
  66. package/dist/esm/lib/stega.js +142 -0
  67. package/dist/esm/lib/urlHelper.js +16 -18
  68. package/dist/esm/mediaLibrary.js +3 -4
  69. package/dist/esm/reducers/collections.js +26 -42
  70. package/dist/esm/reducers/combinedReducer.js +3 -6
  71. package/dist/esm/reducers/config.js +3 -7
  72. package/dist/esm/reducers/editorialWorkflow.js +5 -9
  73. package/dist/esm/reducers/entries.js +33 -35
  74. package/dist/esm/reducers/entryDraft.js +2 -2
  75. package/dist/esm/reducers/integrations.js +8 -14
  76. package/dist/esm/reducers/mediaLibrary.js +18 -20
  77. package/dist/esm/reducers/notifications.js +4 -8
  78. package/dist/esm/types/immutable.js +7 -1
  79. package/dist/esm/valueObjects/AssetProxy.js +1 -9
  80. package/dist/esm/valueObjects/EditorComponent.js +18 -25
  81. package/dist/esm/valueObjects/Entry.js +2 -2
  82. package/index.d.ts +2 -0
  83. package/package.json +8 -11
  84. package/src/actions/__tests__/config.spec.js +3 -3
  85. package/src/actions/config.ts +3 -1
  86. package/src/actions/editorialWorkflow.ts +1 -1
  87. package/src/actions/entries.ts +1 -1
  88. package/src/actions/search.ts +1 -1
  89. package/src/backend.ts +8 -1
  90. package/src/components/App/App.js +5 -0
  91. package/src/components/App/Header.js +3 -0
  92. package/src/components/Collection/Collection.js +5 -0
  93. package/src/components/Collection/CollectionSearch.js +5 -0
  94. package/src/components/Collection/Entries/EntriesCollection.js +4 -1
  95. package/src/components/Collection/Entries/EntriesSearch.js +4 -1
  96. package/src/components/Collection/Entries/EntryListing.js +5 -0
  97. package/src/components/Collection/Entries/__tests__/__snapshots__/EntriesCollection.spec.js.snap +0 -4
  98. package/src/components/Collection/NestedCollection.js +6 -1
  99. package/src/components/Collection/Sidebar.js +5 -0
  100. package/src/components/Editor/Editor.js +4 -1
  101. package/src/components/Editor/EditorControlPane/EditorControl.js +7 -1
  102. package/src/components/Editor/EditorControlPane/Widget.js +5 -0
  103. package/src/components/Editor/EditorPreviewPane/EditorPreviewPane.js +1 -1
  104. package/src/components/Editor/EditorToolbar.js +6 -3
  105. package/src/components/Editor/__tests__/Editor.spec.js +3 -4
  106. package/src/components/Editor/__tests__/__snapshots__/Editor.spec.js.snap +5 -5
  107. package/src/components/Editor/__tests__/__snapshots__/EditorToolbar.spec.js.snap +708 -393
  108. package/src/components/MediaLibrary/MediaLibrary.js +5 -1
  109. package/src/components/MediaLibrary/MediaLibraryModal.js +1 -1
  110. package/src/components/UI/ErrorBoundary.js +6 -1
  111. package/src/components/UI/Modal.js +3 -0
  112. package/src/components/Workflow/Workflow.js +3 -0
  113. package/src/components/Workflow/WorkflowList.js +5 -0
  114. package/src/constants/__tests__/configSchema.spec.js +1 -1
  115. package/src/formats/formats.ts +1 -1
  116. package/src/integrations/providers/algolia/implementation.js +2 -2
  117. package/src/integrations/providers/assetStore/implementation.js +2 -1
  118. package/src/lib/formatters.ts +4 -1
  119. package/src/lib/i18n.ts +3 -1
  120. package/src/lib/phrases.js +1 -1
  121. package/src/lib/serializeEntryValues.js +1 -1
  122. package/src/lib/stega.ts +145 -0
  123. package/src/lib/urlHelper.ts +4 -1
  124. package/src/mediaLibrary.ts +1 -1
  125. package/src/reducers/collections.ts +2 -1
  126. package/src/reducers/editorialWorkflow.ts +1 -1
  127. package/src/reducers/entries.ts +6 -1
  128. package/src/reducers/entryDraft.js +1 -1
  129. package/src/types/immutable.ts +10 -0
  130. package/src/types/redux.ts +2 -0
  131. package/src/valueObjects/EditorComponent.js +1 -1
  132. package/src/valueObjects/Entry.ts +1 -1
@@ -1,10 +1,5 @@
1
- import _startsWith from "lodash/startsWith";
2
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
6
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
1
  import { Map, List, fromJS } from 'immutable';
2
+ import startsWith from 'lodash/startsWith';
8
3
  import { EDITORIAL_WORKFLOW } from '../constants/publishModes';
9
4
  import { UNPUBLISHED_ENTRY_REQUEST, UNPUBLISHED_ENTRY_REDIRECT, UNPUBLISHED_ENTRY_SUCCESS, UNPUBLISHED_ENTRIES_REQUEST, UNPUBLISHED_ENTRIES_SUCCESS, UNPUBLISHED_ENTRY_PERSIST_REQUEST, UNPUBLISHED_ENTRY_PERSIST_SUCCESS, UNPUBLISHED_ENTRY_PERSIST_FAILURE, UNPUBLISHED_ENTRY_STATUS_CHANGE_REQUEST, UNPUBLISHED_ENTRY_STATUS_CHANGE_SUCCESS, UNPUBLISHED_ENTRY_STATUS_CHANGE_FAILURE, UNPUBLISHED_ENTRY_PUBLISH_REQUEST, UNPUBLISHED_ENTRY_PUBLISH_SUCCESS, UNPUBLISHED_ENTRY_PUBLISH_FAILURE, UNPUBLISHED_ENTRY_DELETE_SUCCESS } from '../actions/editorialWorkflow';
10
5
  import { CONFIG_SUCCESS } from '../actions/config';
@@ -33,9 +28,10 @@ function unpublishedEntries(state = Map(), action) {
33
28
  case UNPUBLISHED_ENTRIES_SUCCESS:
34
29
  return state.withMutations(map => {
35
30
  action.payload.entries.forEach(entry => map.setIn(['entities', `${entry.collection}.${entry.slug}`], fromJS(entry).set('isFetching', false)));
36
- map.set('pages', Map(_objectSpread(_objectSpread({}, action.payload.pages), {}, {
31
+ map.set('pages', Map({
32
+ ...action.payload.pages,
37
33
  ids: List(action.payload.entries.map(entry => entry.slug))
38
- })));
34
+ }));
39
35
  });
40
36
  case UNPUBLISHED_ENTRY_PERSIST_REQUEST:
41
37
  {
@@ -82,6 +78,6 @@ export function selectUnpublishedEntriesByStatus(state, status) {
82
78
  export function selectUnpublishedSlugs(state, collection) {
83
79
  if (!state.get('entities')) return null;
84
80
  const entities = state.get('entities');
85
- return entities.filter((_v, k) => _startsWith(k, `${collection}.`)).map(entry => entry.get('slug')).valueSeq();
81
+ return entities.filter((_v, k) => startsWith(k, `${collection}.`)).map(entry => entry.get('slug')).valueSeq();
86
82
  }
87
83
  export default unpublishedEntries;
@@ -1,17 +1,12 @@
1
- import _groupBy from "lodash/groupBy";
2
- import _orderBy from "lodash/orderBy";
3
- import _set from "lodash/set";
4
- import _sortBy from "lodash/sortBy";
5
- import _once from "lodash/once";
6
- import _trim from "lodash/trim";
7
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
8
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
9
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
10
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
11
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
12
1
  import { Map, List, fromJS, OrderedMap, Set } from 'immutable';
13
2
  import { dirname, join } from 'path';
14
3
  import { isAbsolutePath, basename } from 'decap-cms-lib-util';
4
+ import trim from 'lodash/trim';
5
+ import once from 'lodash/once';
6
+ import sortBy from 'lodash/sortBy';
7
+ import set from 'lodash/set';
8
+ import orderBy from 'lodash/orderBy';
9
+ import groupBy from 'lodash/groupBy';
15
10
  import { stringTemplate } from 'decap-cms-lib-widgets';
16
11
  import { SortDirection } from '../types/redux';
17
12
  import { folderFormatter } from '../lib/formatters';
@@ -30,7 +25,7 @@ let page;
30
25
  let slug;
31
26
  const storageSortKey = 'decap-cms.entries.sort';
32
27
  const viewStyleKey = 'decap-cms.entries.viewStyle';
33
- const loadSort = _once(() => {
28
+ const loadSort = once(() => {
34
29
  const sortString = localStorage.getItem(storageSortKey);
35
30
  if (sortString) {
36
31
  try {
@@ -38,7 +33,7 @@ const loadSort = _once(() => {
38
33
  let map = Map();
39
34
  Object.entries(sort).forEach(([collection, sort]) => {
40
35
  let orderedMap = OrderedMap();
41
- _sortBy(Object.values(sort), ['index']).forEach(value => {
36
+ sortBy(Object.values(sort), ['index']).forEach(value => {
42
37
  const {
43
38
  key,
44
39
  direction
@@ -65,11 +60,12 @@ function persistSort(sort) {
65
60
  const storageSort = {};
66
61
  sort.keySeq().forEach(key => {
67
62
  const collection = key;
68
- const sortObjects = sort.get(collection).valueSeq().toJS().map((value, index) => _objectSpread(_objectSpread({}, value), {}, {
63
+ const sortObjects = sort.get(collection).valueSeq().toJS().map((value, index) => ({
64
+ ...value,
69
65
  index
70
66
  }));
71
67
  sortObjects.forEach(value => {
72
- _set(storageSort, [collection, value.key], value);
68
+ set(storageSort, [collection, value.key], value);
73
69
  });
74
70
  });
75
71
  localStorage.setItem(storageSortKey, JSON.stringify(storageSort));
@@ -77,7 +73,7 @@ function persistSort(sort) {
77
73
  clearSort();
78
74
  }
79
75
  }
80
- const loadViewStyle = _once(() => {
76
+ const loadViewStyle = once(() => {
81
77
  const viewStyle = localStorage.getItem(viewStyleKey);
82
78
  if (viewStyle) {
83
79
  return viewStyle;
@@ -298,29 +294,29 @@ function entries(state = Map({
298
294
  }
299
295
  export function selectEntriesSort(entries, collection) {
300
296
  const sort = entries.get('sort');
301
- return sort === null || sort === void 0 ? void 0 : sort.get(collection);
297
+ return sort?.get(collection);
302
298
  }
303
299
  export function selectEntriesFilter(entries, collection) {
304
300
  const filter = entries.get('filter');
305
- return (filter === null || filter === void 0 ? void 0 : filter.get(collection)) || Map();
301
+ return filter?.get(collection) || Map();
306
302
  }
307
303
  export function selectEntriesGroup(entries, collection) {
308
304
  const group = entries.get('group');
309
- return (group === null || group === void 0 ? void 0 : group.get(collection)) || Map();
305
+ return group?.get(collection) || Map();
310
306
  }
311
307
  export function selectEntriesGroupField(entries, collection) {
312
308
  const groups = selectEntriesGroup(entries, collection);
313
- const value = groups === null || groups === void 0 ? void 0 : groups.valueSeq().find(v => (v === null || v === void 0 ? void 0 : v.get('active')) === true);
309
+ const value = groups?.valueSeq().find(v => v?.get('active') === true);
314
310
  return value;
315
311
  }
316
312
  export function selectEntriesSortFields(entries, collection) {
317
313
  const sort = selectEntriesSort(entries, collection);
318
- const values = (sort === null || sort === void 0 ? void 0 : sort.valueSeq().filter(v => (v === null || v === void 0 ? void 0 : v.get('direction')) !== SortDirection.None).toArray()) || [];
314
+ const values = sort?.valueSeq().filter(v => v?.get('direction') !== SortDirection.None).toArray() || [];
319
315
  return values;
320
316
  }
321
317
  export function selectEntriesFilterFields(entries, collection) {
322
318
  const filter = selectEntriesFilter(entries, collection);
323
- const values = (filter === null || filter === void 0 ? void 0 : filter.valueSeq().filter(v => (v === null || v === void 0 ? void 0 : v.get('active')) === true).toArray()) || [];
319
+ const values = filter?.valueSeq().filter(v => v?.get('active') === true).toArray() || [];
324
320
  return values;
325
321
  }
326
322
  export function selectViewStyle(entries) {
@@ -344,7 +340,7 @@ export function selectEntries(state, collection) {
344
340
  if (sortFields && sortFields.length > 0) {
345
341
  const keys = sortFields.map(v => selectSortDataPath(collection, v.get('key')));
346
342
  const orders = sortFields.map(v => v.get('direction') === SortDirection.Ascending ? 'asc' : 'desc');
347
- entries = fromJS(_orderBy(entries.toJS(), keys, orders));
343
+ entries = fromJS(orderBy(entries.toJS(), keys, orders));
348
344
  }
349
345
  const filters = selectEntriesFilterFields(state, collectionName);
350
346
  if (filters && filters.length > 0) {
@@ -406,24 +402,26 @@ export function selectGroups(state, collection) {
406
402
  return [];
407
403
  }
408
404
  let groups = {};
409
- const groupedEntries = _groupBy(entries.toArray(), entry => {
405
+ const groupedEntries = groupBy(entries.toArray(), entry => {
410
406
  const group = getGroup(entry, selectedGroup);
411
- groups = _objectSpread(_objectSpread({}, groups), {}, {
407
+ groups = {
408
+ ...groups,
412
409
  [group.id]: group
413
- });
410
+ };
414
411
  return group.id;
415
412
  });
416
413
  const groupsArray = Object.entries(groupedEntries).map(([id, entries]) => {
417
- return _objectSpread(_objectSpread({}, groups[id]), {}, {
414
+ return {
415
+ ...groups[id],
418
416
  paths: Set(entries.map(entry => entry.get('path')))
419
- });
417
+ };
420
418
  });
421
419
  return groupsArray;
422
420
  }
423
421
  export function selectEntryByPath(state, collection, path) {
424
422
  const slugs = selectPublishedSlugs(state, collection);
425
423
  const entries = slugs && slugs.map(slug => selectEntry(state, collection, slug));
426
- return entries && entries.find(e => (e === null || e === void 0 ? void 0 : e.get('path')) === path);
424
+ return entries && entries.find(e => e?.get('path') === path);
427
425
  }
428
426
  export function selectEntriesLoaded(state, collection) {
429
427
  return !!state.getIn(['pages', collection]);
@@ -433,7 +431,7 @@ export function selectIsFetching(state, collection) {
433
431
  }
434
432
  const DRAFT_MEDIA_FILES = 'DRAFT_MEDIA_FILES';
435
433
  function getFileField(collectionFiles, slug) {
436
- const file = collectionFiles.find(f => (f === null || f === void 0 ? void 0 : f.get('name')) === slug);
434
+ const file = collectionFiles.find(f => f?.get('name') === slug);
437
435
  return file;
438
436
  }
439
437
  function hasCustomFolder(folderKey, collection, slug, field) {
@@ -490,7 +488,7 @@ function evaluateFolder(folderKey, config, collection, entryMap, field) {
490
488
  // files collection evaluate the collection template
491
489
  // then move on to the specific file configuration denoted by the slug
492
490
  currentFolder = folderFormatter(collection.get(folderKey), entryMap, collection, currentFolder, folderKey, config.slug);
493
- let file = getFileField(collection.get('files'), entryMap === null || entryMap === void 0 ? void 0 : entryMap.get('slug'));
491
+ let file = getFileField(collection.get('files'), entryMap?.get('slug'));
494
492
  if (file) {
495
493
  if (!file.has(folderKey)) {
496
494
  // add identity template if doesn't exist
@@ -522,18 +520,18 @@ function evaluateFolder(folderKey, config, collection, entryMap, field) {
522
520
  export function selectMediaFolder(config, collection, entryMap, field) {
523
521
  const name = 'media_folder';
524
522
  let mediaFolder = config[name];
525
- const customFolder = hasCustomFolder(name, collection, entryMap === null || entryMap === void 0 ? void 0 : entryMap.get('slug'), field);
523
+ const customFolder = hasCustomFolder(name, collection, entryMap?.get('slug'), field);
526
524
  if (customFolder) {
527
525
  const folder = evaluateFolder(name, config, collection, entryMap, field);
528
526
  if (folder.startsWith('/')) {
529
527
  // return absolute paths as is
530
528
  mediaFolder = join(folder);
531
529
  } else {
532
- const entryPath = entryMap === null || entryMap === void 0 ? void 0 : entryMap.get('path');
530
+ const entryPath = entryMap?.get('path');
533
531
  mediaFolder = entryPath ? join(dirname(entryPath), folder) : join(collection.get('folder'), DRAFT_MEDIA_FILES);
534
532
  }
535
533
  }
536
- return _trim(mediaFolder, '/');
534
+ return trim(mediaFolder, '/');
537
535
  }
538
536
  export function selectMediaFilePath(config, collection, entryMap, mediaPath, field) {
539
537
  if (isAbsolutePath(mediaPath)) {
@@ -548,7 +546,7 @@ export function selectMediaFilePublicPath(config, collection, mediaPath, entryMa
548
546
  }
549
547
  const name = 'public_folder';
550
548
  let publicFolder = config[name];
551
- const customFolder = hasCustomFolder(name, collection, entryMap === null || entryMap === void 0 ? void 0 : entryMap.get('slug'), field);
549
+ const customFolder = hasCustomFolder(name, collection, entryMap?.get('slug'), field);
552
550
  if (customFolder) {
553
551
  publicFolder = evaluateFolder(name, config, collection, entryMap, field);
554
552
  }
@@ -1,6 +1,6 @@
1
- import _get from "lodash/get";
2
1
  import { Map, List, fromJS } from 'immutable';
3
2
  import { v4 as uuid } from 'uuid';
3
+ import get from 'lodash/get';
4
4
  import { join } from 'path';
5
5
  import { DRAFT_CREATE_FROM_ENTRY, DRAFT_CREATE_EMPTY, DRAFT_DISCARD, DRAFT_CHANGE_FIELD, DRAFT_VALIDATION_ERRORS, DRAFT_CLEAR_ERRORS, DRAFT_LOCAL_BACKUP_RETRIEVED, DRAFT_CREATE_FROM_LOCAL_BACKUP, DRAFT_CREATE_DUPLICATE_FROM_ENTRY, ENTRY_PERSIST_REQUEST, ENTRY_PERSIST_SUCCESS, ENTRY_PERSIST_FAILURE, ENTRY_DELETE_SUCCESS, ADD_DRAFT_ENTRY_MEDIA_FILE, REMOVE_DRAFT_ENTRY_MEDIA_FILE } from '../actions/entries';
6
6
  import { UNPUBLISHED_ENTRY_PERSIST_REQUEST, UNPUBLISHED_ENTRY_PERSIST_SUCCESS, UNPUBLISHED_ENTRY_PERSIST_FAILURE, UNPUBLISHED_ENTRY_STATUS_CHANGE_REQUEST, UNPUBLISHED_ENTRY_STATUS_CHANGE_SUCCESS, UNPUBLISHED_ENTRY_STATUS_CHANGE_FAILURE, UNPUBLISHED_ENTRY_PUBLISH_REQUEST, UNPUBLISHED_ENTRY_PUBLISH_SUCCESS, UNPUBLISHED_ENTRY_PUBLISH_FAILURE } from '../actions/editorialWorkflow';
@@ -170,7 +170,7 @@ export function selectCustomPath(collection, entryDraft) {
170
170
  }
171
171
  const meta = entryDraft.getIn(['entry', 'meta']);
172
172
  const path = meta && meta.get('path');
173
- const indexFile = _get(collection.toJS(), ['meta', 'path', 'index_file']);
173
+ const indexFile = get(collection.toJS(), ['meta', 'path', 'index_file']);
174
174
  const extension = selectFolderEntryExtension(collection);
175
175
  const customPath = path && join(collection.get('folder'), path, `${indexFile}.${extension}`);
176
176
  return customPath;
@@ -1,23 +1,17 @@
1
- const _excluded = ["hooks", "collections", "provider"];
2
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
6
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
8
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
9
1
  import { fromJS } from 'immutable';
10
2
  import { CONFIG_SUCCESS } from '../actions/config';
11
3
  export function getIntegrations(config) {
12
4
  const integrations = config.integrations || [];
13
5
  const newState = integrations.reduce((acc, integration) => {
14
6
  const {
15
- hooks,
16
- collections,
17
- provider
18
- } = integration,
19
- providerData = _objectWithoutProperties(integration, _excluded);
20
- acc.providers[provider] = _objectSpread({}, providerData);
7
+ hooks,
8
+ collections,
9
+ provider,
10
+ ...providerData
11
+ } = integration;
12
+ acc.providers[provider] = {
13
+ ...providerData
14
+ };
21
15
  if (!collections) {
22
16
  hooks.forEach(hook => {
23
17
  acc.hooks[hook] = provider;
@@ -1,8 +1,3 @@
1
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
5
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
6
1
  import { Map, List } from 'immutable';
7
2
  import { v4 as uuid } from 'uuid';
8
3
  import { dirname } from 'path';
@@ -53,14 +48,14 @@ function mediaLibrary(state = Map(defaultState), action) {
53
48
  }
54
49
  return state.withMutations(map => {
55
50
  map.set('isVisible', true);
56
- map.set('forImage', forImage !== null && forImage !== void 0 ? forImage : false);
57
- map.set('controlID', controlID !== null && controlID !== void 0 ? controlID : '');
51
+ map.set('forImage', forImage ?? false);
52
+ map.set('controlID', controlID ?? '');
58
53
  map.set('canInsert', !!controlID);
59
54
  map.set('privateUpload', privateUpload);
60
55
  map.set('config', libConfig);
61
- map.set('field', field !== null && field !== void 0 ? field : '');
62
- map.set('value', value == '' && libConfig.get('multiple') ? [] : value !== null && value !== void 0 ? value : '');
63
- map.set('replaceIndex', replaceIndex !== null && replaceIndex !== void 0 ? replaceIndex : false);
56
+ map.set('field', field ?? '');
57
+ map.set('value', value == '' && libConfig.get('multiple') ? [] : value ?? '');
58
+ map.set('replaceIndex', replaceIndex ?? false);
64
59
  });
65
60
  }
66
61
  case MEDIA_LIBRARY_CLOSE:
@@ -113,16 +108,17 @@ function mediaLibrary(state = Map(defaultState), action) {
113
108
  if (privateUploadChanged) {
114
109
  return state;
115
110
  }
116
- const filesWithKeys = files.map(file => _objectSpread(_objectSpread({}, file), {}, {
111
+ const filesWithKeys = files.map(file => ({
112
+ ...file,
117
113
  key: uuid()
118
114
  }));
119
115
  return state.withMutations(map => {
120
116
  map.set('isLoading', false);
121
117
  map.set('isPaginating', false);
122
- map.set('page', page !== null && page !== void 0 ? page : 1);
118
+ map.set('page', page ?? 1);
123
119
  map.set('hasNextPage', !!(canPaginate && files.length > 0));
124
- map.set('dynamicSearch', dynamicSearch !== null && dynamicSearch !== void 0 ? dynamicSearch : false);
125
- map.set('dynamicSearchQuery', dynamicSearchQuery !== null && dynamicSearchQuery !== void 0 ? dynamicSearchQuery : '');
120
+ map.set('dynamicSearch', dynamicSearch ?? false);
121
+ map.set('dynamicSearchQuery', dynamicSearchQuery ?? '');
126
122
  map.set('dynamicSearchActive', !!dynamicSearchQuery);
127
123
  if (page && page > 1) {
128
124
  const updatedFiles = map.get('files').concat(filesWithKeys);
@@ -153,9 +149,10 @@ function mediaLibrary(state = Map(defaultState), action) {
153
149
  return state;
154
150
  }
155
151
  return state.withMutations(map => {
156
- const fileWithKey = _objectSpread(_objectSpread({}, file), {}, {
152
+ const fileWithKey = {
153
+ ...file,
157
154
  key: uuid()
158
- });
155
+ };
159
156
  const files = map.get('files');
160
157
  const updatedFiles = [fileWithKey, ...files];
161
158
  map.set('files', updatedFiles);
@@ -232,11 +229,12 @@ export function selectMediaFiles(state, field) {
232
229
  if (editingDraft && !integration) {
233
230
  const entryFiles = entryDraft.getIn(['entry', 'mediaFiles'], List()).toJS();
234
231
  const entry = entryDraft.get('entry');
235
- const collection = state.collections.get(entry === null || entry === void 0 ? void 0 : entry.get('collection'));
232
+ const collection = state.collections.get(entry?.get('collection'));
236
233
  const mediaFolder = selectMediaFolder(state.config, collection, entry, field);
237
- files = entryFiles.filter(f => dirname(f.path) === mediaFolder).map(file => _objectSpread({
238
- key: file.id
239
- }, file));
234
+ files = entryFiles.filter(f => dirname(f.path) === mediaFolder).map(file => ({
235
+ key: file.id,
236
+ ...file
237
+ }));
240
238
  } else {
241
239
  files = mediaLibrary.get('files') || [];
242
240
  }
@@ -1,8 +1,3 @@
1
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
5
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
6
1
  import { produce } from 'immer';
7
2
  import { v4 as uuid } from 'uuid';
8
3
  import { NOTIFICATION_SEND, NOTIFICATION_DISMISS, NOTIFICATIONS_CLEAR } from '../actions/notifications';
@@ -18,9 +13,10 @@ const notifications = produce((state, action) => {
18
13
  state.notifications = state.notifications.filter(n => n.id !== action.id);
19
14
  break;
20
15
  case NOTIFICATION_SEND:
21
- state.notifications = [...state.notifications, _objectSpread({
22
- id: uuid()
23
- }, action.payload)];
16
+ state.notifications = [...state.notifications, {
17
+ id: uuid(),
18
+ ...action.payload
19
+ }];
24
20
  break;
25
21
  }
26
22
  }, defaultState);
@@ -1 +1,7 @@
1
- export {};
1
+ import { Map as ImmutableMap, List } from 'immutable';
2
+ export function isImmutableMap(value) {
3
+ return ImmutableMap.isMap(value);
4
+ }
5
+ export function isImmutableList(value) {
6
+ return List.isList(value);
7
+ }
@@ -1,6 +1,3 @@
1
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
3
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
4
1
  export default class AssetProxy {
5
2
  constructor({
6
3
  url,
@@ -8,10 +5,6 @@ export default class AssetProxy {
8
5
  path,
9
6
  field
10
7
  }) {
11
- _defineProperty(this, "url", void 0);
12
- _defineProperty(this, "fileObj", void 0);
13
- _defineProperty(this, "path", void 0);
14
- _defineProperty(this, "field", void 0);
15
8
  this.url = url ? url : file ? window.URL.createObjectURL(file) : '';
16
9
  this.fileObj = file;
17
10
  this.path = path;
@@ -28,8 +21,7 @@ export default class AssetProxy {
28
21
  const result = await new Promise(resolve => {
29
22
  const fr = new FileReader();
30
23
  fr.onload = readerEvt => {
31
- var _readerEvt$target;
32
- const binaryString = ((_readerEvt$target = readerEvt.target) === null || _readerEvt$target === void 0 ? void 0 : _readerEvt$target.result) || '';
24
+ const binaryString = readerEvt.target?.result || '';
33
25
  resolve(binaryString.toString().split('base64,')[1]);
34
26
  };
35
27
  fr.readAsDataURL(blob);
@@ -1,32 +1,24 @@
1
- import _isFunction from "lodash/isFunction";
2
- const _excluded = ["id", "label", "icon", "type", "widget", "pattern", "fields", "fromBlock", "toBlock", "toPreview"];
3
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
7
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
8
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
9
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
10
1
  import { fromJS } from 'immutable';
2
+ import isFunction from 'lodash/isFunction';
11
3
  const catchesNothing = /.^/;
12
4
  function bind(fn) {
13
- return _isFunction(fn) && fn.bind(null);
5
+ return isFunction(fn) && fn.bind(null);
14
6
  }
15
7
  export default function createEditorComponent(config) {
16
8
  const {
17
- id = null,
18
- label = 'unnamed component',
19
- icon = 'exclamation-triangle',
20
- type = 'shortcode',
21
- widget = 'object',
22
- pattern = catchesNothing,
23
- fields = [],
24
- fromBlock,
25
- toBlock,
26
- toPreview
27
- } = config,
28
- remainingConfig = _objectWithoutProperties(config, _excluded);
29
- return _objectSpread({
9
+ id = null,
10
+ label = 'unnamed component',
11
+ icon = 'exclamation-triangle',
12
+ type = 'shortcode',
13
+ widget = 'object',
14
+ pattern = catchesNothing,
15
+ fields = [],
16
+ fromBlock,
17
+ toBlock,
18
+ toPreview,
19
+ ...remainingConfig
20
+ } = config;
21
+ return {
30
22
  id: id || label.replace(/[^A-Z0-9]+/gi, '_'),
31
23
  label,
32
24
  type,
@@ -36,6 +28,7 @@ export default function createEditorComponent(config) {
36
28
  fromBlock: bind(fromBlock) || (() => ({})),
37
29
  toBlock: bind(toBlock) || (() => 'Plugin'),
38
30
  toPreview: bind(toPreview) || !widget && (bind(toBlock) || (() => 'Plugin')),
39
- fields: fromJS(fields)
40
- }, remainingConfig);
31
+ fields: fromJS(fields),
32
+ ...remainingConfig
33
+ };
41
34
  }
@@ -1,4 +1,4 @@
1
- import _isBoolean from "lodash/isBoolean";
1
+ import isBoolean from 'lodash/isBoolean';
2
2
  export function createEntry(collection, slug = '', path = '', options = {}) {
3
3
  const returnObj = {
4
4
  collection,
@@ -8,7 +8,7 @@ export function createEntry(collection, slug = '', path = '', options = {}) {
8
8
  raw: options.raw || '',
9
9
  data: options.data || {},
10
10
  label: options.label || null,
11
- isModification: _isBoolean(options.isModification) ? options.isModification : null,
11
+ isModification: isBoolean(options.isModification) ? options.isModification : null,
12
12
  mediaFiles: options.mediaFiles || [],
13
13
  author: options.author || '',
14
14
  updatedOn: options.updatedOn || '',
package/index.d.ts CHANGED
@@ -233,6 +233,7 @@ declare module 'decap-cms-core' {
233
233
  // This is the default widget, so declaring its type is optional.
234
234
  widget?: 'string' | 'text';
235
235
  default?: string;
236
+ visualEditing?: boolean;
236
237
  }
237
238
 
238
239
  export interface CmsFieldMeta {
@@ -306,6 +307,7 @@ declare module 'decap-cms-core' {
306
307
  hide?: boolean;
307
308
  editor?: {
308
309
  preview?: boolean;
310
+ visualEditing?: boolean;
309
311
  };
310
312
  publish?: boolean;
311
313
  nested?: {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "decap-cms-core",
3
3
  "description": "Decap CMS core application, see decap-cms package for the main distribution.",
4
- "version": "3.6.2",
4
+ "version": "3.7.0",
5
5
  "repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-core",
6
6
  "bugs": "https://github.com/decaporg/decap-cms/issues",
7
7
  "module": "dist/esm/index.js",
@@ -27,10 +27,7 @@
27
27
  "@iarna/toml": "2.2.5",
28
28
  "@reduxjs/toolkit": "^1.9.1",
29
29
  "@vercel/stega": "^0.1.2",
30
- "ajv": "8.12.0",
31
- "ajv-errors": "^3.0.0",
32
- "ajv-keywords": "^5.0.0",
33
- "clean-stack": "^4.1.0",
30
+ "clean-stack": "^5.2.0",
34
31
  "copy-text-to-clipboard": "^3.0.0",
35
32
  "dayjs": "^1.11.10",
36
33
  "deepmerge": "^4.2.2",
@@ -44,10 +41,10 @@
44
41
  "jwt-decode": "^3.0.0",
45
42
  "node-polyglot": "^2.3.0",
46
43
  "prop-types": "^15.7.2",
47
- "react": "^18.2.0",
44
+ "react": "^19.1.0",
48
45
  "react-dnd": "^14.0.0",
49
46
  "react-dnd-html5-backend": "^14.0.0",
50
- "react-dom": "^18.2.0",
47
+ "react-dom": "^19.1.0",
51
48
  "react-frame-component": "^5.2.1",
52
49
  "react-immutable-proptypes": "^2.1.0",
53
50
  "react-is": "16.13.1",
@@ -56,7 +53,7 @@
56
53
  "react-polyglot": "^0.7.0",
57
54
  "react-redux": "^7.2.0",
58
55
  "react-router-dom": "^5.2.0",
59
- "react-scroll-sync": "^0.9.0",
56
+ "react-scroll-sync": "^0.11.2",
60
57
  "react-split-pane": "^0.1.85",
61
58
  "react-toastify": "^9.1.1",
62
59
  "react-topbar-progress-indicator": "^4.0.0",
@@ -87,8 +84,8 @@
87
84
  "immutable": "^3.7.6",
88
85
  "lodash": "^4.17.11",
89
86
  "prop-types": "^15.7.2",
90
- "react": "^18.2.0",
91
- "react-dom": "^18.2.0",
87
+ "react": "^19.1.0",
88
+ "react-dom": "^19.1.0",
92
89
  "react-immutable-proptypes": "^2.1.0"
93
90
  },
94
91
  "devDependencies": {
@@ -97,5 +94,5 @@
97
94
  "@types/url-join": "^4.0.0",
98
95
  "redux-mock-store": "^1.5.3"
99
96
  },
100
- "gitHead": "25be8bb9e1898b6813c85f7ae1fc065076746d04"
97
+ "gitHead": "ed7e99318007b83f4c57f3237bf92b931676820a"
101
98
  }
@@ -1,5 +1,5 @@
1
1
  import { stripIndent } from 'common-tags';
2
- import yaml from 'js-yaml';
2
+ import { dump } from 'js-yaml';
3
3
 
4
4
  import {
5
5
  loadConfig,
@@ -934,7 +934,7 @@ describe('config', () => {
934
934
 
935
935
  global.fetch.mockResolvedValue({
936
936
  status: 200,
937
- text: () => Promise.resolve(yaml.dump({ backend: { repo: 'test-repo' } })),
937
+ text: () => Promise.resolve(dump({ backend: { repo: 'test-repo' } })),
938
938
  headers: new Headers(),
939
939
  });
940
940
  await loadConfig()(dispatch);
@@ -962,7 +962,7 @@ describe('config', () => {
962
962
  document.querySelector.mockReturnValue({ type: 'text/yaml', href: 'custom-config.yml' });
963
963
  global.fetch.mockResolvedValue({
964
964
  status: 200,
965
- text: () => Promise.resolve(yaml.dump({ backend: { repo: 'github' } })),
965
+ text: () => Promise.resolve(dump({ backend: { repo: 'github' } })),
966
966
  headers: new Headers(),
967
967
  });
968
968
  await loadConfig()(dispatch);
@@ -2,7 +2,9 @@ import yaml from 'yaml';
2
2
  import { fromJS } from 'immutable';
3
3
  import deepmerge from 'deepmerge';
4
4
  import { produce } from 'immer';
5
- import { trimStart, trim, isEmpty } from 'lodash';
5
+ import trimStart from 'lodash/trimStart';
6
+ import trim from 'lodash/trim';
7
+ import isEmpty from 'lodash/isEmpty';
6
8
 
7
9
  import { SIMPLE as SIMPLE_PUBLISH_MODE } from '../constants/publishModes';
8
10
  import { validateConfig } from '../constants/configSchema';
@@ -1,4 +1,4 @@
1
- import { get } from 'lodash';
1
+ import get from 'lodash/get';
2
2
  import { Map, List } from 'immutable';
3
3
  import { EDITORIAL_WORKFLOW_ERROR } from 'decap-cms-lib-util';
4
4
 
@@ -1,5 +1,5 @@
1
1
  import { fromJS, List, Map } from 'immutable';
2
- import { isEqual } from 'lodash';
2
+ import isEqual from 'lodash/isEqual';
3
3
  import { Cursor } from 'decap-cms-lib-util';
4
4
 
5
5
  import { selectCollectionEntriesCursor } from '../reducers/cursors';
@@ -1,4 +1,4 @@
1
- import { isEqual } from 'lodash';
1
+ import isEqual from 'lodash/isEqual';
2
2
 
3
3
  import { currentBackend } from '../backend';
4
4
  import { getIntegrationProvider } from '../integrations';