@wordpress/core-data 4.0.1-next.253d9b6e21.0 → 4.0.3

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 (106) hide show
  1. package/README.md +11 -3
  2. package/build/actions.js +124 -117
  3. package/build/actions.js.map +1 -1
  4. package/build/batch/default-processor.js +58 -27
  5. package/build/batch/default-processor.js.map +1 -1
  6. package/build/entities.js +24 -18
  7. package/build/entities.js.map +1 -1
  8. package/build/index.js +9 -17
  9. package/build/index.js.map +1 -1
  10. package/build/locks/actions.js +17 -77
  11. package/build/locks/actions.js.map +1 -1
  12. package/build/locks/engine.js +77 -0
  13. package/build/locks/engine.js.map +1 -0
  14. package/build/locks/reducer.js +1 -5
  15. package/build/locks/reducer.js.map +1 -1
  16. package/build/locks/selectors.js +6 -6
  17. package/build/locks/selectors.js.map +1 -1
  18. package/build/queried-data/get-query-parts.js +9 -4
  19. package/build/queried-data/get-query-parts.js.map +1 -1
  20. package/build/queried-data/selectors.js +3 -9
  21. package/build/queried-data/selectors.js.map +1 -1
  22. package/build/reducer.js +1 -4
  23. package/build/reducer.js.map +1 -1
  24. package/build/resolvers.js +120 -91
  25. package/build/resolvers.js.map +1 -1
  26. package/build/selectors.js +31 -11
  27. package/build/selectors.js.map +1 -1
  28. package/build/utils/if-not-resolved.js +6 -21
  29. package/build/utils/if-not-resolved.js.map +1 -1
  30. package/build/utils/index.js +8 -0
  31. package/build/utils/index.js.map +1 -1
  32. package/build/utils/is-raw-attribute.js +19 -0
  33. package/build/utils/is-raw-attribute.js.map +1 -0
  34. package/build-module/actions.js +106 -107
  35. package/build-module/actions.js.map +1 -1
  36. package/build-module/batch/default-processor.js +57 -27
  37. package/build-module/batch/default-processor.js.map +1 -1
  38. package/build-module/entities.js +19 -14
  39. package/build-module/entities.js.map +1 -1
  40. package/build-module/index.js +10 -14
  41. package/build-module/index.js.map +1 -1
  42. package/build-module/locks/actions.js +14 -68
  43. package/build-module/locks/actions.js.map +1 -1
  44. package/build-module/locks/engine.js +66 -0
  45. package/build-module/locks/engine.js.map +1 -0
  46. package/build-module/locks/reducer.js +1 -2
  47. package/build-module/locks/reducer.js.map +1 -1
  48. package/build-module/locks/selectors.js +4 -4
  49. package/build-module/locks/selectors.js.map +1 -1
  50. package/build-module/queried-data/get-query-parts.js +9 -4
  51. package/build-module/queried-data/get-query-parts.js.map +1 -1
  52. package/build-module/queried-data/selectors.js +3 -9
  53. package/build-module/queried-data/selectors.js.map +1 -1
  54. package/build-module/reducer.js +1 -3
  55. package/build-module/reducer.js.map +1 -1
  56. package/build-module/resolvers.js +94 -74
  57. package/build-module/resolvers.js.map +1 -1
  58. package/build-module/selectors.js +30 -10
  59. package/build-module/selectors.js.map +1 -1
  60. package/build-module/utils/if-not-resolved.js +6 -19
  61. package/build-module/utils/if-not-resolved.js.map +1 -1
  62. package/build-module/utils/index.js +1 -0
  63. package/build-module/utils/index.js.map +1 -1
  64. package/build-module/utils/is-raw-attribute.js +12 -0
  65. package/build-module/utils/is-raw-attribute.js.map +1 -0
  66. package/package.json +11 -12
  67. package/src/actions.js +112 -189
  68. package/src/batch/default-processor.js +57 -26
  69. package/src/batch/test/default-processor.js +53 -26
  70. package/src/entities.js +15 -16
  71. package/src/index.js +7 -10
  72. package/src/locks/actions.js +10 -61
  73. package/src/locks/engine.js +43 -0
  74. package/src/locks/reducer.js +1 -3
  75. package/src/locks/selectors.js +4 -4
  76. package/src/locks/test/engine.js +135 -0
  77. package/src/locks/test/reducer.js +1 -1
  78. package/src/locks/test/selectors.js +105 -124
  79. package/src/queried-data/get-query-parts.js +11 -6
  80. package/src/queried-data/selectors.js +2 -9
  81. package/src/queried-data/test/get-query-parts.js +1 -1
  82. package/src/queried-data/test/selectors.js +1 -0
  83. package/src/reducer.js +0 -2
  84. package/src/resolvers.js +86 -106
  85. package/src/selectors.js +113 -40
  86. package/src/test/actions.js +243 -172
  87. package/src/test/entities.js +40 -26
  88. package/src/test/resolvers.js +270 -223
  89. package/src/test/selectors.js +71 -0
  90. package/src/utils/if-not-resolved.js +8 -26
  91. package/src/utils/index.js +1 -0
  92. package/src/utils/is-raw-attribute.js +11 -0
  93. package/src/utils/test/if-not-resolved.js +28 -27
  94. package/src/utils/test/is-raw-attribute.js +22 -0
  95. package/build/controls.js +0 -44
  96. package/build/controls.js.map +0 -1
  97. package/build/locks/index.js +0 -47
  98. package/build/locks/index.js.map +0 -1
  99. package/build-module/controls.js +0 -31
  100. package/build-module/controls.js.map +0 -1
  101. package/build-module/locks/index.js +0 -4
  102. package/build-module/locks/index.js.map +0 -1
  103. package/src/controls.js +0 -31
  104. package/src/locks/index.js +0 -3
  105. package/src/locks/test/actions.js +0 -307
  106. package/src/test/integration.js +0 -264
@@ -1,77 +1,23 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { __unstableAwaitPromise } from '@wordpress/data-controls';
5
- import { controls } from '@wordpress/data';
6
1
  /**
7
2
  * Internal dependencies
8
3
  */
4
+ import createLocks from './engine';
5
+ export default function createLocksActions() {
6
+ const locks = createLocks();
9
7
 
10
- import { STORE_NAME } from '../name';
11
- export function* __unstableAcquireStoreLock(store, path, {
12
- exclusive
13
- }) {
14
- const promise = yield* __unstableEnqueueLockRequest(store, path, {
8
+ function __unstableAcquireStoreLock(store, path, {
15
9
  exclusive
16
- });
17
- yield* __unstableProcessPendingLockRequests();
18
- return yield __unstableAwaitPromise(promise);
19
- }
20
- export function* __unstableEnqueueLockRequest(store, path, {
21
- exclusive
22
- }) {
23
- let notifyAcquired;
24
- const promise = new Promise(resolve => {
25
- notifyAcquired = resolve;
26
- });
27
- yield {
28
- type: 'ENQUEUE_LOCK_REQUEST',
29
- request: {
30
- store,
31
- path,
32
- exclusive,
33
- notifyAcquired
34
- }
35
- };
36
- return promise;
37
- }
38
- export function* __unstableReleaseStoreLock(lock) {
39
- yield {
40
- type: 'RELEASE_LOCK',
41
- lock
42
- };
43
- yield* __unstableProcessPendingLockRequests();
44
- }
45
- export function* __unstableProcessPendingLockRequests() {
46
- yield {
47
- type: 'PROCESS_PENDING_LOCK_REQUESTS'
48
- };
49
- const lockRequests = yield controls.select(STORE_NAME, '__unstableGetPendingLockRequests');
50
-
51
- for (const request of lockRequests) {
52
- const {
53
- store,
54
- path,
55
- exclusive,
56
- notifyAcquired
57
- } = request;
58
- const isAvailable = yield controls.select(STORE_NAME, '__unstableIsLockAvailable', store, path, {
59
- exclusive
60
- });
10
+ }) {
11
+ return () => locks.acquire(store, path, exclusive);
12
+ }
61
13
 
62
- if (isAvailable) {
63
- const lock = {
64
- store,
65
- path,
66
- exclusive
67
- };
68
- yield {
69
- type: 'GRANT_LOCK_REQUEST',
70
- lock,
71
- request
72
- };
73
- notifyAcquired(lock);
74
- }
14
+ function __unstableReleaseStoreLock(lock) {
15
+ return () => locks.release(lock);
75
16
  }
17
+
18
+ return {
19
+ __unstableAcquireStoreLock,
20
+ __unstableReleaseStoreLock
21
+ };
76
22
  }
77
23
  //# sourceMappingURL=actions.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/core-data/src/locks/actions.js"],"names":["__unstableAwaitPromise","controls","STORE_NAME","__unstableAcquireStoreLock","store","path","exclusive","promise","__unstableEnqueueLockRequest","__unstableProcessPendingLockRequests","notifyAcquired","Promise","resolve","type","request","__unstableReleaseStoreLock","lock","lockRequests","select","isAvailable"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,sBAAT,QAAuC,0BAAvC;AACA,SAASC,QAAT,QAAyB,iBAAzB;AAEA;AACA;AACA;;AACA,SAASC,UAAT,QAA2B,SAA3B;AAEA,OAAO,UAAUC,0BAAV,CAAsCC,KAAtC,EAA6CC,IAA7C,EAAmD;AAAEC,EAAAA;AAAF,CAAnD,EAAmE;AACzE,QAAMC,OAAO,GAAG,OAAOC,4BAA4B,CAAEJ,KAAF,EAASC,IAAT,EAAe;AACjEC,IAAAA;AADiE,GAAf,CAAnD;AAGA,SAAOG,oCAAoC,EAA3C;AACA,SAAO,MAAMT,sBAAsB,CAAEO,OAAF,CAAnC;AACA;AAED,OAAO,UAAUC,4BAAV,CAAwCJ,KAAxC,EAA+CC,IAA/C,EAAqD;AAAEC,EAAAA;AAAF,CAArD,EAAqE;AAC3E,MAAII,cAAJ;AACA,QAAMH,OAAO,GAAG,IAAII,OAAJ,CAAeC,OAAF,IAAe;AAC3CF,IAAAA,cAAc,GAAGE,OAAjB;AACA,GAFe,CAAhB;AAGA,QAAM;AACLC,IAAAA,IAAI,EAAE,sBADD;AAELC,IAAAA,OAAO,EAAE;AAAEV,MAAAA,KAAF;AAASC,MAAAA,IAAT;AAAeC,MAAAA,SAAf;AAA0BI,MAAAA;AAA1B;AAFJ,GAAN;AAIA,SAAOH,OAAP;AACA;AAED,OAAO,UAAUQ,0BAAV,CAAsCC,IAAtC,EAA6C;AACnD,QAAM;AACLH,IAAAA,IAAI,EAAE,cADD;AAELG,IAAAA;AAFK,GAAN;AAIA,SAAOP,oCAAoC,EAA3C;AACA;AAED,OAAO,UAAUA,oCAAV,GAAiD;AACvD,QAAM;AACLI,IAAAA,IAAI,EAAE;AADD,GAAN;AAGA,QAAMI,YAAY,GAAG,MAAMhB,QAAQ,CAACiB,MAAT,CAC1BhB,UAD0B,EAE1B,kCAF0B,CAA3B;;AAIA,OAAM,MAAMY,OAAZ,IAAuBG,YAAvB,EAAsC;AACrC,UAAM;AAAEb,MAAAA,KAAF;AAASC,MAAAA,IAAT;AAAeC,MAAAA,SAAf;AAA0BI,MAAAA;AAA1B,QAA6CI,OAAnD;AACA,UAAMK,WAAW,GAAG,MAAMlB,QAAQ,CAACiB,MAAT,CACzBhB,UADyB,EAEzB,2BAFyB,EAGzBE,KAHyB,EAIzBC,IAJyB,EAKzB;AACCC,MAAAA;AADD,KALyB,CAA1B;;AASA,QAAKa,WAAL,EAAmB;AAClB,YAAMH,IAAI,GAAG;AAAEZ,QAAAA,KAAF;AAASC,QAAAA,IAAT;AAAeC,QAAAA;AAAf,OAAb;AACA,YAAM;AACLO,QAAAA,IAAI,EAAE,oBADD;AAELG,QAAAA,IAFK;AAGLF,QAAAA;AAHK,OAAN;AAKAJ,MAAAA,cAAc,CAAEM,IAAF,CAAd;AACA;AACD;AACD","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __unstableAwaitPromise } from '@wordpress/data-controls';\nimport { controls } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { STORE_NAME } from '../name';\n\nexport function* __unstableAcquireStoreLock( store, path, { exclusive } ) {\n\tconst promise = yield* __unstableEnqueueLockRequest( store, path, {\n\t\texclusive,\n\t} );\n\tyield* __unstableProcessPendingLockRequests();\n\treturn yield __unstableAwaitPromise( promise );\n}\n\nexport function* __unstableEnqueueLockRequest( store, path, { exclusive } ) {\n\tlet notifyAcquired;\n\tconst promise = new Promise( ( resolve ) => {\n\t\tnotifyAcquired = resolve;\n\t} );\n\tyield {\n\t\ttype: 'ENQUEUE_LOCK_REQUEST',\n\t\trequest: { store, path, exclusive, notifyAcquired },\n\t};\n\treturn promise;\n}\n\nexport function* __unstableReleaseStoreLock( lock ) {\n\tyield {\n\t\ttype: 'RELEASE_LOCK',\n\t\tlock,\n\t};\n\tyield* __unstableProcessPendingLockRequests();\n}\n\nexport function* __unstableProcessPendingLockRequests() {\n\tyield {\n\t\ttype: 'PROCESS_PENDING_LOCK_REQUESTS',\n\t};\n\tconst lockRequests = yield controls.select(\n\t\tSTORE_NAME,\n\t\t'__unstableGetPendingLockRequests'\n\t);\n\tfor ( const request of lockRequests ) {\n\t\tconst { store, path, exclusive, notifyAcquired } = request;\n\t\tconst isAvailable = yield controls.select(\n\t\t\tSTORE_NAME,\n\t\t\t'__unstableIsLockAvailable',\n\t\t\tstore,\n\t\t\tpath,\n\t\t\t{\n\t\t\t\texclusive,\n\t\t\t}\n\t\t);\n\t\tif ( isAvailable ) {\n\t\t\tconst lock = { store, path, exclusive };\n\t\t\tyield {\n\t\t\t\ttype: 'GRANT_LOCK_REQUEST',\n\t\t\t\tlock,\n\t\t\t\trequest,\n\t\t\t};\n\t\t\tnotifyAcquired( lock );\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/core-data/src/locks/actions.js"],"names":["createLocks","createLocksActions","locks","__unstableAcquireStoreLock","store","path","exclusive","acquire","__unstableReleaseStoreLock","lock","release"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,WAAP,MAAwB,UAAxB;AAEA,eAAe,SAASC,kBAAT,GAA8B;AAC5C,QAAMC,KAAK,GAAGF,WAAW,EAAzB;;AAEA,WAASG,0BAAT,CAAqCC,KAArC,EAA4CC,IAA5C,EAAkD;AAAEC,IAAAA;AAAF,GAAlD,EAAkE;AACjE,WAAO,MAAMJ,KAAK,CAACK,OAAN,CAAeH,KAAf,EAAsBC,IAAtB,EAA4BC,SAA5B,CAAb;AACA;;AAED,WAASE,0BAAT,CAAqCC,IAArC,EAA4C;AAC3C,WAAO,MAAMP,KAAK,CAACQ,OAAN,CAAeD,IAAf,CAAb;AACA;;AAED,SAAO;AAAEN,IAAAA,0BAAF;AAA8BK,IAAAA;AAA9B,GAAP;AACA","sourcesContent":["/**\n * Internal dependencies\n */\nimport createLocks from './engine';\n\nexport default function createLocksActions() {\n\tconst locks = createLocks();\n\n\tfunction __unstableAcquireStoreLock( store, path, { exclusive } ) {\n\t\treturn () => locks.acquire( store, path, exclusive );\n\t}\n\n\tfunction __unstableReleaseStoreLock( lock ) {\n\t\treturn () => locks.release( lock );\n\t}\n\n\treturn { __unstableAcquireStoreLock, __unstableReleaseStoreLock };\n}\n"]}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import reducer from './reducer';
5
+ import { isLockAvailable, getPendingLockRequests } from './selectors';
6
+ export default function createLocks() {
7
+ let state = reducer(undefined, {
8
+ type: '@@INIT'
9
+ });
10
+
11
+ function processPendingLockRequests() {
12
+ for (const request of getPendingLockRequests(state)) {
13
+ const {
14
+ store,
15
+ path,
16
+ exclusive,
17
+ notifyAcquired
18
+ } = request;
19
+
20
+ if (isLockAvailable(state, store, path, {
21
+ exclusive
22
+ })) {
23
+ const lock = {
24
+ store,
25
+ path,
26
+ exclusive
27
+ };
28
+ state = reducer(state, {
29
+ type: 'GRANT_LOCK_REQUEST',
30
+ lock,
31
+ request
32
+ });
33
+ notifyAcquired(lock);
34
+ }
35
+ }
36
+ }
37
+
38
+ function acquire(store, path, exclusive) {
39
+ return new Promise(resolve => {
40
+ state = reducer(state, {
41
+ type: 'ENQUEUE_LOCK_REQUEST',
42
+ request: {
43
+ store,
44
+ path,
45
+ exclusive,
46
+ notifyAcquired: resolve
47
+ }
48
+ });
49
+ processPendingLockRequests();
50
+ });
51
+ }
52
+
53
+ function release(lock) {
54
+ state = reducer(state, {
55
+ type: 'RELEASE_LOCK',
56
+ lock
57
+ });
58
+ processPendingLockRequests();
59
+ }
60
+
61
+ return {
62
+ acquire,
63
+ release
64
+ };
65
+ }
66
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/core-data/src/locks/engine.js"],"names":["reducer","isLockAvailable","getPendingLockRequests","createLocks","state","undefined","type","processPendingLockRequests","request","store","path","exclusive","notifyAcquired","lock","acquire","Promise","resolve","release"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,OAAP,MAAoB,WAApB;AACA,SAASC,eAAT,EAA0BC,sBAA1B,QAAwD,aAAxD;AAEA,eAAe,SAASC,WAAT,GAAuB;AACrC,MAAIC,KAAK,GAAGJ,OAAO,CAAEK,SAAF,EAAa;AAAEC,IAAAA,IAAI,EAAE;AAAR,GAAb,CAAnB;;AAEA,WAASC,0BAAT,GAAsC;AACrC,SAAM,MAAMC,OAAZ,IAAuBN,sBAAsB,CAAEE,KAAF,CAA7C,EAAyD;AACxD,YAAM;AAAEK,QAAAA,KAAF;AAASC,QAAAA,IAAT;AAAeC,QAAAA,SAAf;AAA0BC,QAAAA;AAA1B,UAA6CJ,OAAnD;;AACA,UAAKP,eAAe,CAAEG,KAAF,EAASK,KAAT,EAAgBC,IAAhB,EAAsB;AAAEC,QAAAA;AAAF,OAAtB,CAApB,EAA4D;AAC3D,cAAME,IAAI,GAAG;AAAEJ,UAAAA,KAAF;AAASC,UAAAA,IAAT;AAAeC,UAAAA;AAAf,SAAb;AACAP,QAAAA,KAAK,GAAGJ,OAAO,CAAEI,KAAF,EAAS;AACvBE,UAAAA,IAAI,EAAE,oBADiB;AAEvBO,UAAAA,IAFuB;AAGvBL,UAAAA;AAHuB,SAAT,CAAf;AAKAI,QAAAA,cAAc,CAAEC,IAAF,CAAd;AACA;AACD;AACD;;AAED,WAASC,OAAT,CAAkBL,KAAlB,EAAyBC,IAAzB,EAA+BC,SAA/B,EAA2C;AAC1C,WAAO,IAAII,OAAJ,CAAeC,OAAF,IAAe;AAClCZ,MAAAA,KAAK,GAAGJ,OAAO,CAAEI,KAAF,EAAS;AACvBE,QAAAA,IAAI,EAAE,sBADiB;AAEvBE,QAAAA,OAAO,EAAE;AAAEC,UAAAA,KAAF;AAASC,UAAAA,IAAT;AAAeC,UAAAA,SAAf;AAA0BC,UAAAA,cAAc,EAAEI;AAA1C;AAFc,OAAT,CAAf;AAIAT,MAAAA,0BAA0B;AAC1B,KANM,CAAP;AAOA;;AACD,WAASU,OAAT,CAAkBJ,IAAlB,EAAyB;AACxBT,IAAAA,KAAK,GAAGJ,OAAO,CAAEI,KAAF,EAAS;AACvBE,MAAAA,IAAI,EAAE,cADiB;AAEvBO,MAAAA;AAFuB,KAAT,CAAf;AAIAN,IAAAA,0BAA0B;AAC1B;;AAED,SAAO;AAAEO,IAAAA,OAAF;AAAWG,IAAAA;AAAX,GAAP;AACA","sourcesContent":["/**\n * Internal dependencies\n */\nimport reducer from './reducer';\nimport { isLockAvailable, getPendingLockRequests } from './selectors';\n\nexport default function createLocks() {\n\tlet state = reducer( undefined, { type: '@@INIT' } );\n\n\tfunction processPendingLockRequests() {\n\t\tfor ( const request of getPendingLockRequests( state ) ) {\n\t\t\tconst { store, path, exclusive, notifyAcquired } = request;\n\t\t\tif ( isLockAvailable( state, store, path, { exclusive } ) ) {\n\t\t\t\tconst lock = { store, path, exclusive };\n\t\t\t\tstate = reducer( state, {\n\t\t\t\t\ttype: 'GRANT_LOCK_REQUEST',\n\t\t\t\t\tlock,\n\t\t\t\t\trequest,\n\t\t\t\t} );\n\t\t\t\tnotifyAcquired( lock );\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction acquire( store, path, exclusive ) {\n\t\treturn new Promise( ( resolve ) => {\n\t\t\tstate = reducer( state, {\n\t\t\t\ttype: 'ENQUEUE_LOCK_REQUEST',\n\t\t\t\trequest: { store, path, exclusive, notifyAcquired: resolve },\n\t\t\t} );\n\t\t\tprocessPendingLockRequests();\n\t\t} );\n\t}\n\tfunction release( lock ) {\n\t\tstate = reducer( state, {\n\t\t\ttype: 'RELEASE_LOCK',\n\t\t\tlock,\n\t\t} );\n\t\tprocessPendingLockRequests();\n\t}\n\n\treturn { acquire, release };\n}\n"]}
@@ -18,7 +18,7 @@ const DEFAULT_STATE = {
18
18
  * @return {Object} Updated state.
19
19
  */
20
20
 
21
- export function locks(state = DEFAULT_STATE, action) {
21
+ export default function locks(state = DEFAULT_STATE, action) {
22
22
  switch (action.type) {
23
23
  case 'ENQUEUE_LOCK_REQUEST':
24
24
  {
@@ -67,5 +67,4 @@ export function locks(state = DEFAULT_STATE, action) {
67
67
 
68
68
  return state;
69
69
  }
70
- export default locks;
71
70
  //# sourceMappingURL=reducer.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/core-data/src/locks/reducer.js"],"names":["getNode","deepCopyLocksTreePath","DEFAULT_STATE","requests","tree","locks","children","state","action","type","request","lock","store","path","storePath","newTree","node","filter","r","l"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,OAAT,EAAkBC,qBAAlB,QAA+C,SAA/C;AAEA,MAAMC,aAAa,GAAG;AACrBC,EAAAA,QAAQ,EAAE,EADW;AAErBC,EAAAA,IAAI,EAAE;AACLC,IAAAA,KAAK,EAAE,EADF;AAELC,IAAAA,QAAQ,EAAE;AAFL;AAFe,CAAtB;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASD,KAAT,CAAgBE,KAAK,GAAGL,aAAxB,EAAuCM,MAAvC,EAAgD;AACtD,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,sBAAL;AAA6B;AAC5B,cAAM;AAAEC,UAAAA;AAAF,YAAcF,MAApB;AACA,eAAO,EACN,GAAGD,KADG;AAENJ,UAAAA,QAAQ,EAAE,CAAEO,OAAF,EAAW,GAAGH,KAAK,CAACJ,QAApB;AAFJ,SAAP;AAIA;;AACD,SAAK,oBAAL;AAA2B;AAC1B,cAAM;AAAEQ,UAAAA,IAAF;AAAQD,UAAAA;AAAR,YAAoBF,MAA1B;AACA,cAAM;AAAEI,UAAAA,KAAF;AAASC,UAAAA;AAAT,YAAkBH,OAAxB;AACA,cAAMI,SAAS,GAAG,CAAEF,KAAF,EAAS,GAAGC,IAAZ,CAAlB;AAEA,cAAME,OAAO,GAAGd,qBAAqB,CAAEM,KAAK,CAACH,IAAR,EAAcU,SAAd,CAArC;AACA,cAAME,IAAI,GAAGhB,OAAO,CAAEe,OAAF,EAAWD,SAAX,CAApB;AACAE,QAAAA,IAAI,CAACX,KAAL,GAAa,CAAE,GAAGW,IAAI,CAACX,KAAV,EAAiBM,IAAjB,CAAb;AAEA,eAAO,EACN,GAAGJ,KADG;AAENJ,UAAAA,QAAQ,EAAEI,KAAK,CAACJ,QAAN,CAAec,MAAf,CAAyBC,CAAF,IAASA,CAAC,KAAKR,OAAtC,CAFJ;AAGNN,UAAAA,IAAI,EAAEW;AAHA,SAAP;AAKA;;AACD,SAAK,cAAL;AAAqB;AACpB,cAAM;AAAEJ,UAAAA;AAAF,YAAWH,MAAjB;AACA,cAAMM,SAAS,GAAG,CAAEH,IAAI,CAACC,KAAP,EAAc,GAAGD,IAAI,CAACE,IAAtB,CAAlB;AAEA,cAAME,OAAO,GAAGd,qBAAqB,CAAEM,KAAK,CAACH,IAAR,EAAcU,SAAd,CAArC;AACA,cAAME,IAAI,GAAGhB,OAAO,CAAEe,OAAF,EAAWD,SAAX,CAApB;AACAE,QAAAA,IAAI,CAACX,KAAL,GAAaW,IAAI,CAACX,KAAL,CAAWY,MAAX,CAAqBE,CAAF,IAASA,CAAC,KAAKR,IAAlC,CAAb;AAEA,eAAO,EACN,GAAGJ,KADG;AAENH,UAAAA,IAAI,EAAEW;AAFA,SAAP;AAIA;AAnCF;;AAsCA,SAAOR,KAAP;AACA;AAED,eAAeF,KAAf","sourcesContent":["/**\n * Internal dependencies\n */\nimport { getNode, deepCopyLocksTreePath } from './utils';\n\nconst DEFAULT_STATE = {\n\trequests: [],\n\ttree: {\n\t\tlocks: [],\n\t\tchildren: {},\n\t},\n};\n\n/**\n * Reducer returning locks.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function locks( state = DEFAULT_STATE, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'ENQUEUE_LOCK_REQUEST': {\n\t\t\tconst { request } = action;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\trequests: [ request, ...state.requests ],\n\t\t\t};\n\t\t}\n\t\tcase 'GRANT_LOCK_REQUEST': {\n\t\t\tconst { lock, request } = action;\n\t\t\tconst { store, path } = request;\n\t\t\tconst storePath = [ store, ...path ];\n\n\t\t\tconst newTree = deepCopyLocksTreePath( state.tree, storePath );\n\t\t\tconst node = getNode( newTree, storePath );\n\t\t\tnode.locks = [ ...node.locks, lock ];\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\trequests: state.requests.filter( ( r ) => r !== request ),\n\t\t\t\ttree: newTree,\n\t\t\t};\n\t\t}\n\t\tcase 'RELEASE_LOCK': {\n\t\t\tconst { lock } = action;\n\t\t\tconst storePath = [ lock.store, ...lock.path ];\n\n\t\t\tconst newTree = deepCopyLocksTreePath( state.tree, storePath );\n\t\t\tconst node = getNode( newTree, storePath );\n\t\t\tnode.locks = node.locks.filter( ( l ) => l !== lock );\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\ttree: newTree,\n\t\t\t};\n\t\t}\n\t}\n\n\treturn state;\n}\n\nexport default locks;\n"]}
1
+ {"version":3,"sources":["@wordpress/core-data/src/locks/reducer.js"],"names":["getNode","deepCopyLocksTreePath","DEFAULT_STATE","requests","tree","locks","children","state","action","type","request","lock","store","path","storePath","newTree","node","filter","r","l"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,OAAT,EAAkBC,qBAAlB,QAA+C,SAA/C;AAEA,MAAMC,aAAa,GAAG;AACrBC,EAAAA,QAAQ,EAAE,EADW;AAErBC,EAAAA,IAAI,EAAE;AACLC,IAAAA,KAAK,EAAE,EADF;AAELC,IAAAA,QAAQ,EAAE;AAFL;AAFe,CAAtB;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,eAAe,SAASD,KAAT,CAAgBE,KAAK,GAAGL,aAAxB,EAAuCM,MAAvC,EAAgD;AAC9D,UAASA,MAAM,CAACC,IAAhB;AACC,SAAK,sBAAL;AAA6B;AAC5B,cAAM;AAAEC,UAAAA;AAAF,YAAcF,MAApB;AACA,eAAO,EACN,GAAGD,KADG;AAENJ,UAAAA,QAAQ,EAAE,CAAEO,OAAF,EAAW,GAAGH,KAAK,CAACJ,QAApB;AAFJ,SAAP;AAIA;;AACD,SAAK,oBAAL;AAA2B;AAC1B,cAAM;AAAEQ,UAAAA,IAAF;AAAQD,UAAAA;AAAR,YAAoBF,MAA1B;AACA,cAAM;AAAEI,UAAAA,KAAF;AAASC,UAAAA;AAAT,YAAkBH,OAAxB;AACA,cAAMI,SAAS,GAAG,CAAEF,KAAF,EAAS,GAAGC,IAAZ,CAAlB;AAEA,cAAME,OAAO,GAAGd,qBAAqB,CAAEM,KAAK,CAACH,IAAR,EAAcU,SAAd,CAArC;AACA,cAAME,IAAI,GAAGhB,OAAO,CAAEe,OAAF,EAAWD,SAAX,CAApB;AACAE,QAAAA,IAAI,CAACX,KAAL,GAAa,CAAE,GAAGW,IAAI,CAACX,KAAV,EAAiBM,IAAjB,CAAb;AAEA,eAAO,EACN,GAAGJ,KADG;AAENJ,UAAAA,QAAQ,EAAEI,KAAK,CAACJ,QAAN,CAAec,MAAf,CAAyBC,CAAF,IAASA,CAAC,KAAKR,OAAtC,CAFJ;AAGNN,UAAAA,IAAI,EAAEW;AAHA,SAAP;AAKA;;AACD,SAAK,cAAL;AAAqB;AACpB,cAAM;AAAEJ,UAAAA;AAAF,YAAWH,MAAjB;AACA,cAAMM,SAAS,GAAG,CAAEH,IAAI,CAACC,KAAP,EAAc,GAAGD,IAAI,CAACE,IAAtB,CAAlB;AAEA,cAAME,OAAO,GAAGd,qBAAqB,CAAEM,KAAK,CAACH,IAAR,EAAcU,SAAd,CAArC;AACA,cAAME,IAAI,GAAGhB,OAAO,CAAEe,OAAF,EAAWD,SAAX,CAApB;AACAE,QAAAA,IAAI,CAACX,KAAL,GAAaW,IAAI,CAACX,KAAL,CAAWY,MAAX,CAAqBE,CAAF,IAASA,CAAC,KAAKR,IAAlC,CAAb;AAEA,eAAO,EACN,GAAGJ,KADG;AAENH,UAAAA,IAAI,EAAEW;AAFA,SAAP;AAIA;AAnCF;;AAsCA,SAAOR,KAAP;AACA","sourcesContent":["/**\n * Internal dependencies\n */\nimport { getNode, deepCopyLocksTreePath } from './utils';\n\nconst DEFAULT_STATE = {\n\trequests: [],\n\ttree: {\n\t\tlocks: [],\n\t\tchildren: {},\n\t},\n};\n\n/**\n * Reducer returning locks.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport default function locks( state = DEFAULT_STATE, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'ENQUEUE_LOCK_REQUEST': {\n\t\t\tconst { request } = action;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\trequests: [ request, ...state.requests ],\n\t\t\t};\n\t\t}\n\t\tcase 'GRANT_LOCK_REQUEST': {\n\t\t\tconst { lock, request } = action;\n\t\t\tconst { store, path } = request;\n\t\t\tconst storePath = [ store, ...path ];\n\n\t\t\tconst newTree = deepCopyLocksTreePath( state.tree, storePath );\n\t\t\tconst node = getNode( newTree, storePath );\n\t\t\tnode.locks = [ ...node.locks, lock ];\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\trequests: state.requests.filter( ( r ) => r !== request ),\n\t\t\t\ttree: newTree,\n\t\t\t};\n\t\t}\n\t\tcase 'RELEASE_LOCK': {\n\t\t\tconst { lock } = action;\n\t\t\tconst storePath = [ lock.store, ...lock.path ];\n\n\t\t\tconst newTree = deepCopyLocksTreePath( state.tree, storePath );\n\t\t\tconst node = getNode( newTree, storePath );\n\t\t\tnode.locks = node.locks.filter( ( l ) => l !== lock );\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\ttree: newTree,\n\t\t\t};\n\t\t}\n\t}\n\n\treturn state;\n}\n"]}
@@ -2,14 +2,14 @@
2
2
  * Internal dependencies
3
3
  */
4
4
  import { iterateDescendants, iteratePath, hasConflictingLock, getNode } from './utils';
5
- export function __unstableGetPendingLockRequests(state) {
6
- return state.locks.requests;
5
+ export function getPendingLockRequests(state) {
6
+ return state.requests;
7
7
  }
8
- export function __unstableIsLockAvailable(state, store, path, {
8
+ export function isLockAvailable(state, store, path, {
9
9
  exclusive
10
10
  }) {
11
11
  const storePath = [store, ...path];
12
- const locks = state.locks.tree; // Validate all parents and the node itself
12
+ const locks = state.tree; // Validate all parents and the node itself
13
13
 
14
14
  for (const node of iteratePath(locks, storePath)) {
15
15
  if (hasConflictingLock({
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/core-data/src/locks/selectors.js"],"names":["iterateDescendants","iteratePath","hasConflictingLock","getNode","__unstableGetPendingLockRequests","state","locks","requests","__unstableIsLockAvailable","store","path","exclusive","storePath","tree","node","descendant"],"mappings":"AAAA;AACA;AACA;AACA,SACCA,kBADD,EAECC,WAFD,EAGCC,kBAHD,EAICC,OAJD,QAKO,SALP;AAOA,OAAO,SAASC,gCAAT,CAA2CC,KAA3C,EAAmD;AACzD,SAAOA,KAAK,CAACC,KAAN,CAAYC,QAAnB;AACA;AAED,OAAO,SAASC,yBAAT,CAAoCH,KAApC,EAA2CI,KAA3C,EAAkDC,IAAlD,EAAwD;AAAEC,EAAAA;AAAF,CAAxD,EAAwE;AAC9E,QAAMC,SAAS,GAAG,CAAEH,KAAF,EAAS,GAAGC,IAAZ,CAAlB;AACA,QAAMJ,KAAK,GAAGD,KAAK,CAACC,KAAN,CAAYO,IAA1B,CAF8E,CAI9E;;AACA,OAAM,MAAMC,IAAZ,IAAoBb,WAAW,CAAEK,KAAF,EAASM,SAAT,CAA/B,EAAsD;AACrD,QAAKV,kBAAkB,CAAE;AAAES,MAAAA;AAAF,KAAF,EAAiBG,IAAI,CAACR,KAAtB,CAAvB,EAAuD;AACtD,aAAO,KAAP;AACA;AACD,GAT6E,CAW9E;AACA;;;AACA,QAAMQ,IAAI,GAAGX,OAAO,CAAEG,KAAF,EAASM,SAAT,CAApB;;AACA,MAAK,CAAEE,IAAP,EAAc;AACb,WAAO,IAAP;AACA,GAhB6E,CAkB9E;;;AACA,OAAM,MAAMC,UAAZ,IAA0Bf,kBAAkB,CAAEc,IAAF,CAA5C,EAAuD;AACtD,QAAKZ,kBAAkB,CAAE;AAAES,MAAAA;AAAF,KAAF,EAAiBI,UAAU,CAACT,KAA5B,CAAvB,EAA6D;AAC5D,aAAO,KAAP;AACA;AACD;;AAED,SAAO,IAAP;AACA","sourcesContent":["/**\n * Internal dependencies\n */\nimport {\n\titerateDescendants,\n\titeratePath,\n\thasConflictingLock,\n\tgetNode,\n} from './utils';\n\nexport function __unstableGetPendingLockRequests( state ) {\n\treturn state.locks.requests;\n}\n\nexport function __unstableIsLockAvailable( state, store, path, { exclusive } ) {\n\tconst storePath = [ store, ...path ];\n\tconst locks = state.locks.tree;\n\n\t// Validate all parents and the node itself\n\tfor ( const node of iteratePath( locks, storePath ) ) {\n\t\tif ( hasConflictingLock( { exclusive }, node.locks ) ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// iteratePath terminates early if path is unreachable, let's\n\t// re-fetch the node and check it exists in the tree.\n\tconst node = getNode( locks, storePath );\n\tif ( ! node ) {\n\t\treturn true;\n\t}\n\n\t// Validate all nested nodes\n\tfor ( const descendant of iterateDescendants( node ) ) {\n\t\tif ( hasConflictingLock( { exclusive }, descendant.locks ) ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/core-data/src/locks/selectors.js"],"names":["iterateDescendants","iteratePath","hasConflictingLock","getNode","getPendingLockRequests","state","requests","isLockAvailable","store","path","exclusive","storePath","locks","tree","node","descendant"],"mappings":"AAAA;AACA;AACA;AACA,SACCA,kBADD,EAECC,WAFD,EAGCC,kBAHD,EAICC,OAJD,QAKO,SALP;AAOA,OAAO,SAASC,sBAAT,CAAiCC,KAAjC,EAAyC;AAC/C,SAAOA,KAAK,CAACC,QAAb;AACA;AAED,OAAO,SAASC,eAAT,CAA0BF,KAA1B,EAAiCG,KAAjC,EAAwCC,IAAxC,EAA8C;AAAEC,EAAAA;AAAF,CAA9C,EAA8D;AACpE,QAAMC,SAAS,GAAG,CAAEH,KAAF,EAAS,GAAGC,IAAZ,CAAlB;AACA,QAAMG,KAAK,GAAGP,KAAK,CAACQ,IAApB,CAFoE,CAIpE;;AACA,OAAM,MAAMC,IAAZ,IAAoBb,WAAW,CAAEW,KAAF,EAASD,SAAT,CAA/B,EAAsD;AACrD,QAAKT,kBAAkB,CAAE;AAAEQ,MAAAA;AAAF,KAAF,EAAiBI,IAAI,CAACF,KAAtB,CAAvB,EAAuD;AACtD,aAAO,KAAP;AACA;AACD,GATmE,CAWpE;AACA;;;AACA,QAAME,IAAI,GAAGX,OAAO,CAAES,KAAF,EAASD,SAAT,CAApB;;AACA,MAAK,CAAEG,IAAP,EAAc;AACb,WAAO,IAAP;AACA,GAhBmE,CAkBpE;;;AACA,OAAM,MAAMC,UAAZ,IAA0Bf,kBAAkB,CAAEc,IAAF,CAA5C,EAAuD;AACtD,QAAKZ,kBAAkB,CAAE;AAAEQ,MAAAA;AAAF,KAAF,EAAiBK,UAAU,CAACH,KAA5B,CAAvB,EAA6D;AAC5D,aAAO,KAAP;AACA;AACD;;AAED,SAAO,IAAP;AACA","sourcesContent":["/**\n * Internal dependencies\n */\nimport {\n\titerateDescendants,\n\titeratePath,\n\thasConflictingLock,\n\tgetNode,\n} from './utils';\n\nexport function getPendingLockRequests( state ) {\n\treturn state.requests;\n}\n\nexport function isLockAvailable( state, store, path, { exclusive } ) {\n\tconst storePath = [ store, ...path ];\n\tconst locks = state.tree;\n\n\t// Validate all parents and the node itself\n\tfor ( const node of iteratePath( locks, storePath ) ) {\n\t\tif ( hasConflictingLock( { exclusive }, node.locks ) ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// iteratePath terminates early if path is unreachable, let's\n\t// re-fetch the node and check it exists in the tree.\n\tconst node = getNode( locks, storePath );\n\tif ( ! node ) {\n\t\treturn true;\n\t}\n\n\t// Validate all nested nodes\n\tfor ( const descendant of iterateDescendants( node ) ) {\n\t\tif ( hasConflictingLock( { exclusive }, descendant.locks ) ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n"]}
@@ -19,6 +19,8 @@ import { withWeakMapCache, getNormalizedCommaSeparable } from '../utils';
19
19
  * @property {?(string[])} fields Target subset of fields to derive from
20
20
  * item objects.
21
21
  * @property {?(number[])} include Specific item IDs to include.
22
+ * @property {string} context Scope under which the request is made;
23
+ * determines returned fields in response.
22
24
  */
23
25
 
24
26
  /**
@@ -59,10 +61,6 @@ export function getQueryParts(query) {
59
61
  parts.perPage = Number(value);
60
62
  break;
61
63
 
62
- case 'include':
63
- parts.include = getNormalizedCommaSeparable(value).map(Number);
64
- break;
65
-
66
64
  case 'context':
67
65
  parts.context = value;
68
66
  break;
@@ -77,6 +75,13 @@ export function getQueryParts(query) {
77
75
  parts.fields = getNormalizedCommaSeparable(value); // Make sure to normalize value for `stableKey`
78
76
 
79
77
  value = parts.fields.join();
78
+ } // Two requests with different include values cannot have same results.
79
+
80
+
81
+ if (key === 'include') {
82
+ parts.include = getNormalizedCommaSeparable(value).map(Number); // Normalize value for `stableKey`.
83
+
84
+ value = parts.include.join();
80
85
  } // While it could be any deterministic string, for simplicity's
81
86
  // sake mimic querystring encoding for stable key.
82
87
  //
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/core-data/src/queried-data/get-query-parts.js"],"names":["addQueryArgs","withWeakMapCache","getNormalizedCommaSeparable","getQueryParts","query","parts","stableKey","page","perPage","fields","include","context","keys","Object","sort","i","length","key","value","Number","map","join","slice"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,YAAT,QAA6B,gBAA7B;AAEA;AACA;AACA;;AACA,SAASC,gBAAT,EAA2BC,2BAA3B,QAA8D,UAA9D;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,aAAT,CAAwBC,KAAxB,EAAgC;AACtC;AACD;AACA;AACC,QAAMC,KAAK,GAAG;AACbC,IAAAA,SAAS,EAAE,EADE;AAEbC,IAAAA,IAAI,EAAE,CAFO;AAGbC,IAAAA,OAAO,EAAE,EAHI;AAIbC,IAAAA,MAAM,EAAE,IAJK;AAKbC,IAAAA,OAAO,EAAE,IALI;AAMbC,IAAAA,OAAO,EAAE;AANI,GAAd,CAJsC,CAatC;;AACA,QAAMC,IAAI,GAAGC,MAAM,CAACD,IAAP,CAAaR,KAAb,EAAqBU,IAArB,EAAb;;AAEA,OAAM,IAAIC,CAAC,GAAG,CAAd,EAAiBA,CAAC,GAAGH,IAAI,CAACI,MAA1B,EAAkCD,CAAC,EAAnC,EAAwC;AACvC,UAAME,GAAG,GAAGL,IAAI,CAAEG,CAAF,CAAhB;AACA,QAAIG,KAAK,GAAGd,KAAK,CAAEa,GAAF,CAAjB;;AAEA,YAASA,GAAT;AACC,WAAK,MAAL;AACCZ,QAAAA,KAAK,CAAEY,GAAF,CAAL,GAAeE,MAAM,CAAED,KAAF,CAArB;AACA;;AAED,WAAK,UAAL;AACCb,QAAAA,KAAK,CAACG,OAAN,GAAgBW,MAAM,CAAED,KAAF,CAAtB;AACA;;AAED,WAAK,SAAL;AACCb,QAAAA,KAAK,CAACK,OAAN,GAAgBR,2BAA2B,CAAEgB,KAAF,CAA3B,CAAqCE,GAArC,CACfD,MADe,CAAhB;AAGA;;AAED,WAAK,SAAL;AACCd,QAAAA,KAAK,CAACM,OAAN,GAAgBO,KAAhB;AACA;;AAED;AACC;AACA;AACA;AACA;AACA;AACA,YAAKD,GAAG,KAAK,SAAb,EAAyB;AACxBZ,UAAAA,KAAK,CAACI,MAAN,GAAeP,2BAA2B,CAAEgB,KAAF,CAA1C,CADwB,CAExB;;AACAA,UAAAA,KAAK,GAAGb,KAAK,CAACI,MAAN,CAAaY,IAAb,EAAR;AACA,SAVF,CAYC;AACA;AACA;AACA;AACA;AACA;AACA;;;AACAhB,QAAAA,KAAK,CAACC,SAAN,IACC,CAAED,KAAK,CAACC,SAAN,GAAkB,GAAlB,GAAwB,EAA1B,IACAN,YAAY,CAAE,EAAF,EAAM;AAAE,WAAEiB,GAAF,GAASC;AAAX,SAAN,CAAZ,CAAuCI,KAAvC,CAA8C,CAA9C,CAFD;AAtCF;AA0CA;;AAED,SAAOjB,KAAP;AACA;AAED,eAAeJ,gBAAgB,CAAEE,aAAF,CAA/B","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { addQueryArgs } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport { withWeakMapCache, getNormalizedCommaSeparable } from '../utils';\n\n/**\n * An object of properties describing a specific query.\n *\n * @typedef {Object} WPQueriedDataQueryParts\n *\n * @property {number} page The query page (1-based index, default 1).\n * @property {number} perPage Items per page for query (default 10).\n * @property {string} stableKey An encoded stable string of all non-\n * pagination, non-fields query parameters.\n * @property {?(string[])} fields Target subset of fields to derive from\n * item objects.\n * @property {?(number[])} include Specific item IDs to include.\n */\n\n/**\n * Given a query object, returns an object of parts, including pagination\n * details (`page` and `perPage`, or default values). All other properties are\n * encoded into a stable (idempotent) `stableKey` value.\n *\n * @param {Object} query Optional query object.\n *\n * @return {WPQueriedDataQueryParts} Query parts.\n */\nexport function getQueryParts( query ) {\n\t/**\n\t * @type {WPQueriedDataQueryParts}\n\t */\n\tconst parts = {\n\t\tstableKey: '',\n\t\tpage: 1,\n\t\tperPage: 10,\n\t\tfields: null,\n\t\tinclude: null,\n\t\tcontext: 'default',\n\t};\n\n\t// Ensure stable key by sorting keys. Also more efficient for iterating.\n\tconst keys = Object.keys( query ).sort();\n\n\tfor ( let i = 0; i < keys.length; i++ ) {\n\t\tconst key = keys[ i ];\n\t\tlet value = query[ key ];\n\n\t\tswitch ( key ) {\n\t\t\tcase 'page':\n\t\t\t\tparts[ key ] = Number( value );\n\t\t\t\tbreak;\n\n\t\t\tcase 'per_page':\n\t\t\t\tparts.perPage = Number( value );\n\t\t\t\tbreak;\n\n\t\t\tcase 'include':\n\t\t\t\tparts.include = getNormalizedCommaSeparable( value ).map(\n\t\t\t\t\tNumber\n\t\t\t\t);\n\t\t\t\tbreak;\n\n\t\t\tcase 'context':\n\t\t\t\tparts.context = value;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\t// While in theory, we could exclude \"_fields\" from the stableKey\n\t\t\t\t// because two request with different fields have the same results\n\t\t\t\t// We're not able to ensure that because the server can decide to omit\n\t\t\t\t// fields from the response even if we explicitely asked for it.\n\t\t\t\t// Example: Asking for titles in posts without title support.\n\t\t\t\tif ( key === '_fields' ) {\n\t\t\t\t\tparts.fields = getNormalizedCommaSeparable( value );\n\t\t\t\t\t// Make sure to normalize value for `stableKey`\n\t\t\t\t\tvalue = parts.fields.join();\n\t\t\t\t}\n\n\t\t\t\t// While it could be any deterministic string, for simplicity's\n\t\t\t\t// sake mimic querystring encoding for stable key.\n\t\t\t\t//\n\t\t\t\t// TODO: For consistency with PHP implementation, addQueryArgs\n\t\t\t\t// should accept a key value pair, which may optimize its\n\t\t\t\t// implementation for our use here, vs. iterating an object\n\t\t\t\t// with only a single key.\n\t\t\t\tparts.stableKey +=\n\t\t\t\t\t( parts.stableKey ? '&' : '' ) +\n\t\t\t\t\taddQueryArgs( '', { [ key ]: value } ).slice( 1 );\n\t\t}\n\t}\n\n\treturn parts;\n}\n\nexport default withWeakMapCache( getQueryParts );\n"]}
1
+ {"version":3,"sources":["@wordpress/core-data/src/queried-data/get-query-parts.js"],"names":["addQueryArgs","withWeakMapCache","getNormalizedCommaSeparable","getQueryParts","query","parts","stableKey","page","perPage","fields","include","context","keys","Object","sort","i","length","key","value","Number","join","map","slice"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,YAAT,QAA6B,gBAA7B;AAEA;AACA;AACA;;AACA,SAASC,gBAAT,EAA2BC,2BAA3B,QAA8D,UAA9D;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,aAAT,CAAwBC,KAAxB,EAAgC;AACtC;AACD;AACA;AACC,QAAMC,KAAK,GAAG;AACbC,IAAAA,SAAS,EAAE,EADE;AAEbC,IAAAA,IAAI,EAAE,CAFO;AAGbC,IAAAA,OAAO,EAAE,EAHI;AAIbC,IAAAA,MAAM,EAAE,IAJK;AAKbC,IAAAA,OAAO,EAAE,IALI;AAMbC,IAAAA,OAAO,EAAE;AANI,GAAd,CAJsC,CAatC;;AACA,QAAMC,IAAI,GAAGC,MAAM,CAACD,IAAP,CAAaR,KAAb,EAAqBU,IAArB,EAAb;;AAEA,OAAM,IAAIC,CAAC,GAAG,CAAd,EAAiBA,CAAC,GAAGH,IAAI,CAACI,MAA1B,EAAkCD,CAAC,EAAnC,EAAwC;AACvC,UAAME,GAAG,GAAGL,IAAI,CAAEG,CAAF,CAAhB;AACA,QAAIG,KAAK,GAAGd,KAAK,CAAEa,GAAF,CAAjB;;AAEA,YAASA,GAAT;AACC,WAAK,MAAL;AACCZ,QAAAA,KAAK,CAAEY,GAAF,CAAL,GAAeE,MAAM,CAAED,KAAF,CAArB;AACA;;AAED,WAAK,UAAL;AACCb,QAAAA,KAAK,CAACG,OAAN,GAAgBW,MAAM,CAAED,KAAF,CAAtB;AACA;;AAED,WAAK,SAAL;AACCb,QAAAA,KAAK,CAACM,OAAN,GAAgBO,KAAhB;AACA;;AAED;AACC;AACA;AACA;AACA;AACA;AACA,YAAKD,GAAG,KAAK,SAAb,EAAyB;AACxBZ,UAAAA,KAAK,CAACI,MAAN,GAAeP,2BAA2B,CAAEgB,KAAF,CAA1C,CADwB,CAExB;;AACAA,UAAAA,KAAK,GAAGb,KAAK,CAACI,MAAN,CAAaW,IAAb,EAAR;AACA,SAVF,CAYC;;;AACA,YAAKH,GAAG,KAAK,SAAb,EAAyB;AACxBZ,UAAAA,KAAK,CAACK,OAAN,GAAgBR,2BAA2B,CAAEgB,KAAF,CAA3B,CAAqCG,GAArC,CACfF,MADe,CAAhB,CADwB,CAIxB;;AACAD,UAAAA,KAAK,GAAGb,KAAK,CAACK,OAAN,CAAcU,IAAd,EAAR;AACA,SAnBF,CAqBC;AACA;AACA;AACA;AACA;AACA;AACA;;;AACAf,QAAAA,KAAK,CAACC,SAAN,IACC,CAAED,KAAK,CAACC,SAAN,GAAkB,GAAlB,GAAwB,EAA1B,IACAN,YAAY,CAAE,EAAF,EAAM;AAAE,WAAEiB,GAAF,GAASC;AAAX,SAAN,CAAZ,CAAuCI,KAAvC,CAA8C,CAA9C,CAFD;AAzCF;AA6CA;;AAED,SAAOjB,KAAP;AACA;AAED,eAAeJ,gBAAgB,CAAEE,aAAF,CAA/B","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { addQueryArgs } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport { withWeakMapCache, getNormalizedCommaSeparable } from '../utils';\n\n/**\n * An object of properties describing a specific query.\n *\n * @typedef {Object} WPQueriedDataQueryParts\n *\n * @property {number} page The query page (1-based index, default 1).\n * @property {number} perPage Items per page for query (default 10).\n * @property {string} stableKey An encoded stable string of all non-\n * pagination, non-fields query parameters.\n * @property {?(string[])} fields Target subset of fields to derive from\n * item objects.\n * @property {?(number[])} include Specific item IDs to include.\n * @property {string} context Scope under which the request is made;\n * determines returned fields in response.\n */\n\n/**\n * Given a query object, returns an object of parts, including pagination\n * details (`page` and `perPage`, or default values). All other properties are\n * encoded into a stable (idempotent) `stableKey` value.\n *\n * @param {Object} query Optional query object.\n *\n * @return {WPQueriedDataQueryParts} Query parts.\n */\nexport function getQueryParts( query ) {\n\t/**\n\t * @type {WPQueriedDataQueryParts}\n\t */\n\tconst parts = {\n\t\tstableKey: '',\n\t\tpage: 1,\n\t\tperPage: 10,\n\t\tfields: null,\n\t\tinclude: null,\n\t\tcontext: 'default',\n\t};\n\n\t// Ensure stable key by sorting keys. Also more efficient for iterating.\n\tconst keys = Object.keys( query ).sort();\n\n\tfor ( let i = 0; i < keys.length; i++ ) {\n\t\tconst key = keys[ i ];\n\t\tlet value = query[ key ];\n\n\t\tswitch ( key ) {\n\t\t\tcase 'page':\n\t\t\t\tparts[ key ] = Number( value );\n\t\t\t\tbreak;\n\n\t\t\tcase 'per_page':\n\t\t\t\tparts.perPage = Number( value );\n\t\t\t\tbreak;\n\n\t\t\tcase 'context':\n\t\t\t\tparts.context = value;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\t// While in theory, we could exclude \"_fields\" from the stableKey\n\t\t\t\t// because two request with different fields have the same results\n\t\t\t\t// We're not able to ensure that because the server can decide to omit\n\t\t\t\t// fields from the response even if we explicitely asked for it.\n\t\t\t\t// Example: Asking for titles in posts without title support.\n\t\t\t\tif ( key === '_fields' ) {\n\t\t\t\t\tparts.fields = getNormalizedCommaSeparable( value );\n\t\t\t\t\t// Make sure to normalize value for `stableKey`\n\t\t\t\t\tvalue = parts.fields.join();\n\t\t\t\t}\n\n\t\t\t\t// Two requests with different include values cannot have same results.\n\t\t\t\tif ( key === 'include' ) {\n\t\t\t\t\tparts.include = getNormalizedCommaSeparable( value ).map(\n\t\t\t\t\t\tNumber\n\t\t\t\t\t);\n\t\t\t\t\t// Normalize value for `stableKey`.\n\t\t\t\t\tvalue = parts.include.join();\n\t\t\t\t}\n\n\t\t\t\t// While it could be any deterministic string, for simplicity's\n\t\t\t\t// sake mimic querystring encoding for stable key.\n\t\t\t\t//\n\t\t\t\t// TODO: For consistency with PHP implementation, addQueryArgs\n\t\t\t\t// should accept a key value pair, which may optimize its\n\t\t\t\t// implementation for our use here, vs. iterating an object\n\t\t\t\t// with only a single key.\n\t\t\t\tparts.stableKey +=\n\t\t\t\t\t( parts.stableKey ? '&' : '' ) +\n\t\t\t\t\taddQueryArgs( '', { [ key ]: value } ).slice( 1 );\n\t\t}\n\t}\n\n\treturn parts;\n}\n\nexport default withWeakMapCache( getQueryParts );\n"]}
@@ -40,14 +40,7 @@ function getQueriedItemsUncached(state, query) {
40
40
  } = getQueryParts(query);
41
41
  let itemIds;
42
42
 
43
- if (Array.isArray(include) && !stableKey) {
44
- // If the parsed query yields a set of IDs, but otherwise no filtering,
45
- // it's safe to consider targeted item IDs as the include set. This
46
- // doesn't guarantee that those objects have been queried, which is
47
- // accounted for below in the loop `null` return.
48
- itemIds = include; // TODO: Avoid storing the empty stable string in reducer, since it
49
- // can be computed dynamically here always.
50
- } else if ((_state$queries = state.queries) !== null && _state$queries !== void 0 && (_state$queries$contex = _state$queries[context]) !== null && _state$queries$contex !== void 0 && _state$queries$contex[stableKey]) {
43
+ if ((_state$queries = state.queries) !== null && _state$queries !== void 0 && (_state$queries$contex = _state$queries[context]) !== null && _state$queries$contex !== void 0 && _state$queries$contex[stableKey]) {
51
44
  itemIds = state.queries[context][stableKey];
52
45
  }
53
46
 
@@ -66,7 +59,8 @@ function getQueriedItemsUncached(state, query) {
66
59
 
67
60
  if (Array.isArray(include) && !include.includes(itemId)) {
68
61
  continue;
69
- }
62
+ } // Having a target item ID doesn't guarantee that this object has been queried.
63
+
70
64
 
71
65
  if (!((_state$items$context = state.items[context]) !== null && _state$items$context !== void 0 && _state$items$context.hasOwnProperty(itemId))) {
72
66
  return null;
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/core-data/src/queried-data/selectors.js"],"names":["createSelector","EquivalentKeyMap","get","set","getQueryParts","queriedItemsCacheByState","WeakMap","getQueriedItemsUncached","state","query","stableKey","page","perPage","include","fields","context","itemIds","Array","isArray","queries","startOffset","endOffset","length","Math","min","items","i","itemId","includes","hasOwnProperty","item","filteredItem","f","field","split","value","itemIsComplete","push","getQueriedItems","queriedItemsCache","queriedItems","undefined"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport createSelector from 'rememo';\nimport EquivalentKeyMap from 'equivalent-key-map';\nimport { get, set } from 'lodash';\n\n/**\n * Internal dependencies\n */\nimport getQueryParts from './get-query-parts';\n\n/**\n * Cache of state keys to EquivalentKeyMap where the inner map tracks queries\n * to their resulting items set. WeakMap allows garbage collection on expired\n * state references.\n *\n * @type {WeakMap<Object,EquivalentKeyMap>}\n */\nconst queriedItemsCacheByState = new WeakMap();\n\n/**\n * Returns items for a given query, or null if the items are not known.\n *\n * @param {Object} state State object.\n * @param {?Object} query Optional query.\n *\n * @return {?Array} Query items.\n */\nfunction getQueriedItemsUncached( state, query ) {\n\tconst {\n\t\tstableKey,\n\t\tpage,\n\t\tperPage,\n\t\tinclude,\n\t\tfields,\n\t\tcontext,\n\t} = getQueryParts( query );\n\tlet itemIds;\n\n\tif ( Array.isArray( include ) && ! stableKey ) {\n\t\t// If the parsed query yields a set of IDs, but otherwise no filtering,\n\t\t// it's safe to consider targeted item IDs as the include set. This\n\t\t// doesn't guarantee that those objects have been queried, which is\n\t\t// accounted for below in the loop `null` return.\n\t\titemIds = include;\n\t\t// TODO: Avoid storing the empty stable string in reducer, since it\n\t\t// can be computed dynamically here always.\n\t} else if ( state.queries?.[ context ]?.[ stableKey ] ) {\n\t\titemIds = state.queries[ context ][ stableKey ];\n\t}\n\n\tif ( ! itemIds ) {\n\t\treturn null;\n\t}\n\n\tconst startOffset = perPage === -1 ? 0 : ( page - 1 ) * perPage;\n\tconst endOffset =\n\t\tperPage === -1\n\t\t\t? itemIds.length\n\t\t\t: Math.min( startOffset + perPage, itemIds.length );\n\n\tconst items = [];\n\tfor ( let i = startOffset; i < endOffset; i++ ) {\n\t\tconst itemId = itemIds[ i ];\n\t\tif ( Array.isArray( include ) && ! include.includes( itemId ) ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif ( ! state.items[ context ]?.hasOwnProperty( itemId ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst item = state.items[ context ][ itemId ];\n\n\t\tlet filteredItem;\n\t\tif ( Array.isArray( fields ) ) {\n\t\t\tfilteredItem = {};\n\n\t\t\tfor ( let f = 0; f < fields.length; f++ ) {\n\t\t\t\tconst field = fields[ f ].split( '.' );\n\t\t\t\tconst value = get( item, field );\n\t\t\t\tset( filteredItem, field, value );\n\t\t\t}\n\t\t} else {\n\t\t\t// If expecting a complete item, validate that completeness, or\n\t\t\t// otherwise abort.\n\t\t\tif ( ! state.itemIsComplete[ context ]?.[ itemId ] ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfilteredItem = item;\n\t\t}\n\n\t\titems.push( filteredItem );\n\t}\n\n\treturn items;\n}\n\n/**\n * Returns items for a given query, or null if the items are not known. Caches\n * result both per state (by reference) and per query (by deep equality).\n * The caching approach is intended to be durable to query objects which are\n * deeply but not referentially equal, since otherwise:\n *\n * `getQueriedItems( state, {} ) !== getQueriedItems( state, {} )`\n *\n * @param {Object} state State object.\n * @param {?Object} query Optional query.\n *\n * @return {?Array} Query items.\n */\nexport const getQueriedItems = createSelector( ( state, query = {} ) => {\n\tlet queriedItemsCache = queriedItemsCacheByState.get( state );\n\tif ( queriedItemsCache ) {\n\t\tconst queriedItems = queriedItemsCache.get( query );\n\t\tif ( queriedItems !== undefined ) {\n\t\t\treturn queriedItems;\n\t\t}\n\t} else {\n\t\tqueriedItemsCache = new EquivalentKeyMap();\n\t\tqueriedItemsCacheByState.set( state, queriedItemsCache );\n\t}\n\n\tconst items = getQueriedItemsUncached( state, query );\n\tqueriedItemsCache.set( query, items );\n\treturn items;\n} );\n"]}
1
+ {"version":3,"sources":["@wordpress/core-data/src/queried-data/selectors.js"],"names":["createSelector","EquivalentKeyMap","get","set","getQueryParts","queriedItemsCacheByState","WeakMap","getQueriedItemsUncached","state","query","stableKey","page","perPage","include","fields","context","itemIds","queries","startOffset","endOffset","length","Math","min","items","i","itemId","Array","isArray","includes","hasOwnProperty","item","filteredItem","f","field","split","value","itemIsComplete","push","getQueriedItems","queriedItemsCache","queriedItems","undefined"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport createSelector from 'rememo';\nimport EquivalentKeyMap from 'equivalent-key-map';\nimport { get, set } from 'lodash';\n\n/**\n * Internal dependencies\n */\nimport getQueryParts from './get-query-parts';\n\n/**\n * Cache of state keys to EquivalentKeyMap where the inner map tracks queries\n * to their resulting items set. WeakMap allows garbage collection on expired\n * state references.\n *\n * @type {WeakMap<Object,EquivalentKeyMap>}\n */\nconst queriedItemsCacheByState = new WeakMap();\n\n/**\n * Returns items for a given query, or null if the items are not known.\n *\n * @param {Object} state State object.\n * @param {?Object} query Optional query.\n *\n * @return {?Array} Query items.\n */\nfunction getQueriedItemsUncached( state, query ) {\n\tconst {\n\t\tstableKey,\n\t\tpage,\n\t\tperPage,\n\t\tinclude,\n\t\tfields,\n\t\tcontext,\n\t} = getQueryParts( query );\n\tlet itemIds;\n\n\tif ( state.queries?.[ context ]?.[ stableKey ] ) {\n\t\titemIds = state.queries[ context ][ stableKey ];\n\t}\n\n\tif ( ! itemIds ) {\n\t\treturn null;\n\t}\n\n\tconst startOffset = perPage === -1 ? 0 : ( page - 1 ) * perPage;\n\tconst endOffset =\n\t\tperPage === -1\n\t\t\t? itemIds.length\n\t\t\t: Math.min( startOffset + perPage, itemIds.length );\n\n\tconst items = [];\n\tfor ( let i = startOffset; i < endOffset; i++ ) {\n\t\tconst itemId = itemIds[ i ];\n\t\tif ( Array.isArray( include ) && ! include.includes( itemId ) ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Having a target item ID doesn't guarantee that this object has been queried.\n\t\tif ( ! state.items[ context ]?.hasOwnProperty( itemId ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst item = state.items[ context ][ itemId ];\n\n\t\tlet filteredItem;\n\t\tif ( Array.isArray( fields ) ) {\n\t\t\tfilteredItem = {};\n\n\t\t\tfor ( let f = 0; f < fields.length; f++ ) {\n\t\t\t\tconst field = fields[ f ].split( '.' );\n\t\t\t\tconst value = get( item, field );\n\t\t\t\tset( filteredItem, field, value );\n\t\t\t}\n\t\t} else {\n\t\t\t// If expecting a complete item, validate that completeness, or\n\t\t\t// otherwise abort.\n\t\t\tif ( ! state.itemIsComplete[ context ]?.[ itemId ] ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tfilteredItem = item;\n\t\t}\n\n\t\titems.push( filteredItem );\n\t}\n\n\treturn items;\n}\n\n/**\n * Returns items for a given query, or null if the items are not known. Caches\n * result both per state (by reference) and per query (by deep equality).\n * The caching approach is intended to be durable to query objects which are\n * deeply but not referentially equal, since otherwise:\n *\n * `getQueriedItems( state, {} ) !== getQueriedItems( state, {} )`\n *\n * @param {Object} state State object.\n * @param {?Object} query Optional query.\n *\n * @return {?Array} Query items.\n */\nexport const getQueriedItems = createSelector( ( state, query = {} ) => {\n\tlet queriedItemsCache = queriedItemsCacheByState.get( state );\n\tif ( queriedItemsCache ) {\n\t\tconst queriedItems = queriedItemsCache.get( query );\n\t\tif ( queriedItems !== undefined ) {\n\t\t\treturn queriedItems;\n\t\t}\n\t} else {\n\t\tqueriedItemsCache = new EquivalentKeyMap();\n\t\tqueriedItemsCacheByState.set( state, queriedItemsCache );\n\t}\n\n\tconst items = getQueriedItemsUncached( state, query );\n\tqueriedItemsCache.set( query, items );\n\treturn items;\n} );\n"]}
@@ -15,7 +15,6 @@ import isShallowEqual from '@wordpress/is-shallow-equal';
15
15
  import { ifMatchingAction, replaceAction } from './utils';
16
16
  import { reducer as queriedDataReducer } from './queried-data';
17
17
  import { defaultEntities, DEFAULT_ENTITY_KEY } from './entities';
18
- import { reducer as locksReducer } from './locks';
19
18
  /**
20
19
  * Reducer managing terms state. Keyed by taxonomy slug, the value is either
21
20
  * undefined (if no request has been made for given taxonomy), null (if a
@@ -512,7 +511,6 @@ export default combineReducers({
512
511
  undo,
513
512
  embedPreviews,
514
513
  userPermissions,
515
- autosaves,
516
- locks: locksReducer
514
+ autosaves
517
515
  });
518
516
  //# sourceMappingURL=reducer.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/core-data/src/reducer.js"],"names":["keyBy","map","groupBy","flowRight","isEqual","get","combineReducers","isShallowEqual","ifMatchingAction","replaceAction","reducer","queriedDataReducer","defaultEntities","DEFAULT_ENTITY_KEY","locksReducer","terms","state","action","type","taxonomy","users","byId","queries","queryID","user","id","currentUser","taxonomies","currentTheme","undefined","stylesheet","themes","themeSupports","entity","entityConfig","name","kind","key","queriedData","edits","context","query","nextState","record","items","recordId","nextEdits","Object","keys","reduce","acc","persistedEdits","length","forEach","saving","pending","error","isAutosave","deleting","entitiesConfig","entities","newConfig","config","entitiesDataReducer","entitiesByKind","entries","memo","subEntities","kindReducer","kindMemo","newData","data","UNDO_INITIAL_STATE","offset","lastEditAction","undo","isCreateUndoLevel","isUndoOrRedo","meta","isUndo","isRedo","some","transientEdits","flattenedUndo","slice","pop","push","comparisonUndoEdits","values","filter","edit","comparisonEdits","embedPreviews","url","preview","userPermissions","isAllowed","autosaves","postId","autosavesData","locks"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { keyBy, map, groupBy, flowRight, isEqual, get } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { combineReducers } from '@wordpress/data';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\n\n/**\n * Internal dependencies\n */\nimport { ifMatchingAction, replaceAction } from './utils';\nimport { reducer as queriedDataReducer } from './queried-data';\nimport { defaultEntities, DEFAULT_ENTITY_KEY } from './entities';\nimport { reducer as locksReducer } from './locks';\n\n/**\n * Reducer managing terms state. Keyed by taxonomy slug, the value is either\n * undefined (if no request has been made for given taxonomy), null (if a\n * request is in-flight for given taxonomy), or the array of terms for the\n * taxonomy.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function terms( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_TERMS':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.taxonomy ]: action.terms,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing authors state. Keyed by id.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function users( state = { byId: {}, queries: {} }, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_USER_QUERY':\n\t\t\treturn {\n\t\t\t\tbyId: {\n\t\t\t\t\t...state.byId,\n\t\t\t\t\t...keyBy( action.users, 'id' ),\n\t\t\t\t},\n\t\t\t\tqueries: {\n\t\t\t\t\t...state.queries,\n\t\t\t\t\t[ action.queryID ]: map(\n\t\t\t\t\t\taction.users,\n\t\t\t\t\t\t( user ) => user.id\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing current user state.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function currentUser( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_CURRENT_USER':\n\t\t\treturn action.currentUser;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing taxonomies.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function taxonomies( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_TAXONOMIES':\n\t\t\treturn action.taxonomies;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the current theme.\n *\n * @param {string} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string} Updated state.\n */\nexport function currentTheme( state = undefined, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_CURRENT_THEME':\n\t\t\treturn action.currentTheme.stylesheet;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing installed themes.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function themes( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_CURRENT_THEME':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.currentTheme.stylesheet ]: action.currentTheme,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing theme supports data.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function themeSupports( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_THEME_SUPPORTS':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t...action.themeSupports,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Higher Order Reducer for a given entity config. It supports:\n *\n * - Fetching\n * - Editing\n * - Saving\n *\n * @param {Object} entityConfig Entity config.\n *\n * @return {Function} Reducer.\n */\nfunction entity( entityConfig ) {\n\treturn flowRight( [\n\t\t// Limit to matching action type so we don't attempt to replace action on\n\t\t// an unhandled action.\n\t\tifMatchingAction(\n\t\t\t( action ) =>\n\t\t\t\taction.name &&\n\t\t\t\taction.kind &&\n\t\t\t\taction.name === entityConfig.name &&\n\t\t\t\taction.kind === entityConfig.kind\n\t\t),\n\n\t\t// Inject the entity config into the action.\n\t\treplaceAction( ( action ) => {\n\t\t\treturn {\n\t\t\t\t...action,\n\t\t\t\tkey: entityConfig.key || DEFAULT_ENTITY_KEY,\n\t\t\t};\n\t\t} ),\n\t] )(\n\t\tcombineReducers( {\n\t\t\tqueriedData: queriedDataReducer,\n\n\t\t\tedits: ( state = {}, action ) => {\n\t\t\t\tswitch ( action.type ) {\n\t\t\t\t\tcase 'RECEIVE_ITEMS':\n\t\t\t\t\t\tconst context = action?.query?.context ?? 'default';\n\t\t\t\t\t\tif ( context !== 'default' ) {\n\t\t\t\t\t\t\treturn state;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst nextState = { ...state };\n\n\t\t\t\t\t\tfor ( const record of action.items ) {\n\t\t\t\t\t\t\tconst recordId = record[ action.key ];\n\t\t\t\t\t\t\tconst edits = nextState[ recordId ];\n\t\t\t\t\t\t\tif ( ! edits ) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst nextEdits = Object.keys( edits ).reduce(\n\t\t\t\t\t\t\t\t( acc, key ) => {\n\t\t\t\t\t\t\t\t\t// If the edited value is still different to the persisted value,\n\t\t\t\t\t\t\t\t\t// keep the edited value in edits.\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t// Edits are the \"raw\" attribute values, but records may have\n\t\t\t\t\t\t\t\t\t\t// objects with more properties, so we use `get` here for the\n\t\t\t\t\t\t\t\t\t\t// comparison.\n\t\t\t\t\t\t\t\t\t\t! isEqual(\n\t\t\t\t\t\t\t\t\t\t\tedits[ key ],\n\t\t\t\t\t\t\t\t\t\t\tget(\n\t\t\t\t\t\t\t\t\t\t\t\trecord[ key ],\n\t\t\t\t\t\t\t\t\t\t\t\t'raw',\n\t\t\t\t\t\t\t\t\t\t\t\trecord[ key ]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t\t\t\t// Sometimes the server alters the sent value which means\n\t\t\t\t\t\t\t\t\t\t// we need to also remove the edits before the api request.\n\t\t\t\t\t\t\t\t\t\t( ! action.persistedEdits ||\n\t\t\t\t\t\t\t\t\t\t\t! isEqual(\n\t\t\t\t\t\t\t\t\t\t\t\tedits[ key ],\n\t\t\t\t\t\t\t\t\t\t\t\taction.persistedEdits[ key ]\n\t\t\t\t\t\t\t\t\t\t\t) )\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tacc[ key ] = edits[ key ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn acc;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif ( Object.keys( nextEdits ).length ) {\n\t\t\t\t\t\t\t\tnextState[ recordId ] = nextEdits;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdelete nextState[ recordId ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn nextState;\n\n\t\t\t\t\tcase 'EDIT_ENTITY_RECORD':\n\t\t\t\t\t\tconst nextEdits = {\n\t\t\t\t\t\t\t...state[ action.recordId ],\n\t\t\t\t\t\t\t...action.edits,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tObject.keys( nextEdits ).forEach( ( key ) => {\n\t\t\t\t\t\t\t// Delete cleared edits so that the properties\n\t\t\t\t\t\t\t// are not considered dirty.\n\t\t\t\t\t\t\tif ( nextEdits[ key ] === undefined ) {\n\t\t\t\t\t\t\t\tdelete nextEdits[ key ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t[ action.recordId ]: nextEdits,\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\n\t\t\tsaving: ( state = {}, action ) => {\n\t\t\t\tswitch ( action.type ) {\n\t\t\t\t\tcase 'SAVE_ENTITY_RECORD_START':\n\t\t\t\t\tcase 'SAVE_ENTITY_RECORD_FINISH':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t[ action.recordId ]: {\n\t\t\t\t\t\t\t\tpending:\n\t\t\t\t\t\t\t\t\taction.type === 'SAVE_ENTITY_RECORD_START',\n\t\t\t\t\t\t\t\terror: action.error,\n\t\t\t\t\t\t\t\tisAutosave: action.isAutosave,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\n\t\t\tdeleting: ( state = {}, action ) => {\n\t\t\t\tswitch ( action.type ) {\n\t\t\t\t\tcase 'DELETE_ENTITY_RECORD_START':\n\t\t\t\t\tcase 'DELETE_ENTITY_RECORD_FINISH':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t[ action.recordId ]: {\n\t\t\t\t\t\t\t\tpending:\n\t\t\t\t\t\t\t\t\taction.type ===\n\t\t\t\t\t\t\t\t\t'DELETE_ENTITY_RECORD_START',\n\t\t\t\t\t\t\t\terror: action.error,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\t\t} )\n\t);\n}\n\n/**\n * Reducer keeping track of the registered entities.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function entitiesConfig( state = defaultEntities, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'ADD_ENTITIES':\n\t\t\treturn [ ...state, ...action.entities ];\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer keeping track of the registered entities config and data.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport const entities = ( state = {}, action ) => {\n\tconst newConfig = entitiesConfig( state.config, action );\n\n\t// Generates a dynamic reducer for the entities\n\tlet entitiesDataReducer = state.reducer;\n\tif ( ! entitiesDataReducer || newConfig !== state.config ) {\n\t\tconst entitiesByKind = groupBy( newConfig, 'kind' );\n\t\tentitiesDataReducer = combineReducers(\n\t\t\tObject.entries( entitiesByKind ).reduce(\n\t\t\t\t( memo, [ kind, subEntities ] ) => {\n\t\t\t\t\tconst kindReducer = combineReducers(\n\t\t\t\t\t\tsubEntities.reduce(\n\t\t\t\t\t\t\t( kindMemo, entityConfig ) => ( {\n\t\t\t\t\t\t\t\t...kindMemo,\n\t\t\t\t\t\t\t\t[ entityConfig.name ]: entity( entityConfig ),\n\t\t\t\t\t\t\t} ),\n\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\n\t\t\t\t\tmemo[ kind ] = kindReducer;\n\t\t\t\t\treturn memo;\n\t\t\t\t},\n\t\t\t\t{}\n\t\t\t)\n\t\t);\n\t}\n\n\tconst newData = entitiesDataReducer( state.data, action );\n\n\tif (\n\t\tnewData === state.data &&\n\t\tnewConfig === state.config &&\n\t\tentitiesDataReducer === state.reducer\n\t) {\n\t\treturn state;\n\t}\n\n\treturn {\n\t\treducer: entitiesDataReducer,\n\t\tdata: newData,\n\t\tconfig: newConfig,\n\t};\n};\n\n/**\n * Reducer keeping track of entity edit undo history.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nconst UNDO_INITIAL_STATE = [];\nUNDO_INITIAL_STATE.offset = 0;\nlet lastEditAction;\nexport function undo( state = UNDO_INITIAL_STATE, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'EDIT_ENTITY_RECORD':\n\t\tcase 'CREATE_UNDO_LEVEL':\n\t\t\tlet isCreateUndoLevel = action.type === 'CREATE_UNDO_LEVEL';\n\t\t\tconst isUndoOrRedo =\n\t\t\t\t! isCreateUndoLevel &&\n\t\t\t\t( action.meta.isUndo || action.meta.isRedo );\n\t\t\tif ( isCreateUndoLevel ) {\n\t\t\t\taction = lastEditAction;\n\t\t\t} else if ( ! isUndoOrRedo ) {\n\t\t\t\t// Don't lose the last edit cache if the new one only has transient edits.\n\t\t\t\t// Transient edits don't create new levels so updating the cache would make\n\t\t\t\t// us skip an edit later when creating levels explicitly.\n\t\t\t\tif (\n\t\t\t\t\tObject.keys( action.edits ).some(\n\t\t\t\t\t\t( key ) => ! action.transientEdits[ key ]\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tlastEditAction = action;\n\t\t\t\t} else {\n\t\t\t\t\tlastEditAction = {\n\t\t\t\t\t\t...action,\n\t\t\t\t\t\tedits: {\n\t\t\t\t\t\t\t...( lastEditAction && lastEditAction.edits ),\n\t\t\t\t\t\t\t...action.edits,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet nextState;\n\t\t\tif ( isUndoOrRedo ) {\n\t\t\t\tnextState = [ ...state ];\n\t\t\t\tnextState.offset =\n\t\t\t\t\tstate.offset + ( action.meta.isUndo ? -1 : 1 );\n\n\t\t\t\tif ( state.flattenedUndo ) {\n\t\t\t\t\t// The first undo in a sequence of undos might happen while we have\n\t\t\t\t\t// flattened undos in state. If this is the case, we want execution\n\t\t\t\t\t// to continue as if we were creating an explicit undo level. This\n\t\t\t\t\t// will result in an extra undo level being appended with the flattened\n\t\t\t\t\t// undo values.\n\t\t\t\t\tisCreateUndoLevel = true;\n\t\t\t\t\taction = lastEditAction;\n\t\t\t\t} else {\n\t\t\t\t\treturn nextState;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( ! action.meta.undo ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\t// Transient edits don't create an undo level, but are\n\t\t\t// reachable in the next meaningful edit to which they\n\t\t\t// are merged. They are defined in the entity's config.\n\t\t\tif (\n\t\t\t\t! isCreateUndoLevel &&\n\t\t\t\t! Object.keys( action.edits ).some(\n\t\t\t\t\t( key ) => ! action.transientEdits[ key ]\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tnextState = [ ...state ];\n\t\t\t\tnextState.flattenedUndo = {\n\t\t\t\t\t...state.flattenedUndo,\n\t\t\t\t\t...action.edits,\n\t\t\t\t};\n\t\t\t\tnextState.offset = state.offset;\n\t\t\t\treturn nextState;\n\t\t\t}\n\n\t\t\t// Clear potential redos, because this only supports linear history.\n\t\t\tnextState =\n\t\t\t\tnextState || state.slice( 0, state.offset || undefined );\n\t\t\tnextState.offset = nextState.offset || 0;\n\t\t\tnextState.pop();\n\t\t\tif ( ! isCreateUndoLevel ) {\n\t\t\t\tnextState.push( {\n\t\t\t\t\tkind: action.meta.undo.kind,\n\t\t\t\t\tname: action.meta.undo.name,\n\t\t\t\t\trecordId: action.meta.undo.recordId,\n\t\t\t\t\tedits: {\n\t\t\t\t\t\t...state.flattenedUndo,\n\t\t\t\t\t\t...action.meta.undo.edits,\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t}\n\t\t\t// When an edit is a function it's an optimization to avoid running some expensive operation.\n\t\t\t// We can't rely on the function references being the same so we opt out of comparing them here.\n\t\t\tconst comparisonUndoEdits = Object.values(\n\t\t\t\taction.meta.undo.edits\n\t\t\t).filter( ( edit ) => typeof edit !== 'function' );\n\t\t\tconst comparisonEdits = Object.values( action.edits ).filter(\n\t\t\t\t( edit ) => typeof edit !== 'function'\n\t\t\t);\n\t\t\tif ( ! isShallowEqual( comparisonUndoEdits, comparisonEdits ) ) {\n\t\t\t\tnextState.push( {\n\t\t\t\t\tkind: action.kind,\n\t\t\t\t\tname: action.name,\n\t\t\t\t\trecordId: action.recordId,\n\t\t\t\t\tedits: isCreateUndoLevel\n\t\t\t\t\t\t? { ...state.flattenedUndo, ...action.edits }\n\t\t\t\t\t\t: action.edits,\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn nextState;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing embed preview data.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function embedPreviews( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_EMBED_PREVIEW':\n\t\t\tconst { url, preview } = action;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ url ]: preview,\n\t\t\t};\n\t}\n\treturn state;\n}\n\n/**\n * State which tracks whether the user can perform an action on a REST\n * resource.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function userPermissions( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_USER_PERMISSION':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.key ]: action.isAllowed,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning autosaves keyed by their parent's post id.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function autosaves( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_AUTOSAVES':\n\t\t\tconst { postId, autosaves: autosavesData } = action;\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ postId ]: autosavesData,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\nexport default combineReducers( {\n\tterms,\n\tusers,\n\tcurrentTheme,\n\tcurrentUser,\n\ttaxonomies,\n\tthemes,\n\tthemeSupports,\n\tentities,\n\tundo,\n\tembedPreviews,\n\tuserPermissions,\n\tautosaves,\n\tlocks: locksReducer,\n} );\n"]}
1
+ {"version":3,"sources":["@wordpress/core-data/src/reducer.js"],"names":["keyBy","map","groupBy","flowRight","isEqual","get","combineReducers","isShallowEqual","ifMatchingAction","replaceAction","reducer","queriedDataReducer","defaultEntities","DEFAULT_ENTITY_KEY","terms","state","action","type","taxonomy","users","byId","queries","queryID","user","id","currentUser","taxonomies","currentTheme","undefined","stylesheet","themes","themeSupports","entity","entityConfig","name","kind","key","queriedData","edits","context","query","nextState","record","items","recordId","nextEdits","Object","keys","reduce","acc","persistedEdits","length","forEach","saving","pending","error","isAutosave","deleting","entitiesConfig","entities","newConfig","config","entitiesDataReducer","entitiesByKind","entries","memo","subEntities","kindReducer","kindMemo","newData","data","UNDO_INITIAL_STATE","offset","lastEditAction","undo","isCreateUndoLevel","isUndoOrRedo","meta","isUndo","isRedo","some","transientEdits","flattenedUndo","slice","pop","push","comparisonUndoEdits","values","filter","edit","comparisonEdits","embedPreviews","url","preview","userPermissions","isAllowed","autosaves","postId","autosavesData"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { keyBy, map, groupBy, flowRight, isEqual, get } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { combineReducers } from '@wordpress/data';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\n\n/**\n * Internal dependencies\n */\nimport { ifMatchingAction, replaceAction } from './utils';\nimport { reducer as queriedDataReducer } from './queried-data';\nimport { defaultEntities, DEFAULT_ENTITY_KEY } from './entities';\n\n/**\n * Reducer managing terms state. Keyed by taxonomy slug, the value is either\n * undefined (if no request has been made for given taxonomy), null (if a\n * request is in-flight for given taxonomy), or the array of terms for the\n * taxonomy.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function terms( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_TERMS':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.taxonomy ]: action.terms,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing authors state. Keyed by id.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function users( state = { byId: {}, queries: {} }, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_USER_QUERY':\n\t\t\treturn {\n\t\t\t\tbyId: {\n\t\t\t\t\t...state.byId,\n\t\t\t\t\t...keyBy( action.users, 'id' ),\n\t\t\t\t},\n\t\t\t\tqueries: {\n\t\t\t\t\t...state.queries,\n\t\t\t\t\t[ action.queryID ]: map(\n\t\t\t\t\t\taction.users,\n\t\t\t\t\t\t( user ) => user.id\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing current user state.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function currentUser( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_CURRENT_USER':\n\t\t\treturn action.currentUser;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing taxonomies.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function taxonomies( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_TAXONOMIES':\n\t\t\treturn action.taxonomies;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the current theme.\n *\n * @param {string} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string} Updated state.\n */\nexport function currentTheme( state = undefined, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_CURRENT_THEME':\n\t\t\treturn action.currentTheme.stylesheet;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing installed themes.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function themes( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_CURRENT_THEME':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.currentTheme.stylesheet ]: action.currentTheme,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing theme supports data.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function themeSupports( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_THEME_SUPPORTS':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t...action.themeSupports,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Higher Order Reducer for a given entity config. It supports:\n *\n * - Fetching\n * - Editing\n * - Saving\n *\n * @param {Object} entityConfig Entity config.\n *\n * @return {Function} Reducer.\n */\nfunction entity( entityConfig ) {\n\treturn flowRight( [\n\t\t// Limit to matching action type so we don't attempt to replace action on\n\t\t// an unhandled action.\n\t\tifMatchingAction(\n\t\t\t( action ) =>\n\t\t\t\taction.name &&\n\t\t\t\taction.kind &&\n\t\t\t\taction.name === entityConfig.name &&\n\t\t\t\taction.kind === entityConfig.kind\n\t\t),\n\n\t\t// Inject the entity config into the action.\n\t\treplaceAction( ( action ) => {\n\t\t\treturn {\n\t\t\t\t...action,\n\t\t\t\tkey: entityConfig.key || DEFAULT_ENTITY_KEY,\n\t\t\t};\n\t\t} ),\n\t] )(\n\t\tcombineReducers( {\n\t\t\tqueriedData: queriedDataReducer,\n\n\t\t\tedits: ( state = {}, action ) => {\n\t\t\t\tswitch ( action.type ) {\n\t\t\t\t\tcase 'RECEIVE_ITEMS':\n\t\t\t\t\t\tconst context = action?.query?.context ?? 'default';\n\t\t\t\t\t\tif ( context !== 'default' ) {\n\t\t\t\t\t\t\treturn state;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst nextState = { ...state };\n\n\t\t\t\t\t\tfor ( const record of action.items ) {\n\t\t\t\t\t\t\tconst recordId = record[ action.key ];\n\t\t\t\t\t\t\tconst edits = nextState[ recordId ];\n\t\t\t\t\t\t\tif ( ! edits ) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst nextEdits = Object.keys( edits ).reduce(\n\t\t\t\t\t\t\t\t( acc, key ) => {\n\t\t\t\t\t\t\t\t\t// If the edited value is still different to the persisted value,\n\t\t\t\t\t\t\t\t\t// keep the edited value in edits.\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t// Edits are the \"raw\" attribute values, but records may have\n\t\t\t\t\t\t\t\t\t\t// objects with more properties, so we use `get` here for the\n\t\t\t\t\t\t\t\t\t\t// comparison.\n\t\t\t\t\t\t\t\t\t\t! isEqual(\n\t\t\t\t\t\t\t\t\t\t\tedits[ key ],\n\t\t\t\t\t\t\t\t\t\t\tget(\n\t\t\t\t\t\t\t\t\t\t\t\trecord[ key ],\n\t\t\t\t\t\t\t\t\t\t\t\t'raw',\n\t\t\t\t\t\t\t\t\t\t\t\trecord[ key ]\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t\t\t\t// Sometimes the server alters the sent value which means\n\t\t\t\t\t\t\t\t\t\t// we need to also remove the edits before the api request.\n\t\t\t\t\t\t\t\t\t\t( ! action.persistedEdits ||\n\t\t\t\t\t\t\t\t\t\t\t! isEqual(\n\t\t\t\t\t\t\t\t\t\t\t\tedits[ key ],\n\t\t\t\t\t\t\t\t\t\t\t\taction.persistedEdits[ key ]\n\t\t\t\t\t\t\t\t\t\t\t) )\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tacc[ key ] = edits[ key ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn acc;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif ( Object.keys( nextEdits ).length ) {\n\t\t\t\t\t\t\t\tnextState[ recordId ] = nextEdits;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdelete nextState[ recordId ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn nextState;\n\n\t\t\t\t\tcase 'EDIT_ENTITY_RECORD':\n\t\t\t\t\t\tconst nextEdits = {\n\t\t\t\t\t\t\t...state[ action.recordId ],\n\t\t\t\t\t\t\t...action.edits,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tObject.keys( nextEdits ).forEach( ( key ) => {\n\t\t\t\t\t\t\t// Delete cleared edits so that the properties\n\t\t\t\t\t\t\t// are not considered dirty.\n\t\t\t\t\t\t\tif ( nextEdits[ key ] === undefined ) {\n\t\t\t\t\t\t\t\tdelete nextEdits[ key ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t[ action.recordId ]: nextEdits,\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\n\t\t\tsaving: ( state = {}, action ) => {\n\t\t\t\tswitch ( action.type ) {\n\t\t\t\t\tcase 'SAVE_ENTITY_RECORD_START':\n\t\t\t\t\tcase 'SAVE_ENTITY_RECORD_FINISH':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t[ action.recordId ]: {\n\t\t\t\t\t\t\t\tpending:\n\t\t\t\t\t\t\t\t\taction.type === 'SAVE_ENTITY_RECORD_START',\n\t\t\t\t\t\t\t\terror: action.error,\n\t\t\t\t\t\t\t\tisAutosave: action.isAutosave,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\n\t\t\tdeleting: ( state = {}, action ) => {\n\t\t\t\tswitch ( action.type ) {\n\t\t\t\t\tcase 'DELETE_ENTITY_RECORD_START':\n\t\t\t\t\tcase 'DELETE_ENTITY_RECORD_FINISH':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t[ action.recordId ]: {\n\t\t\t\t\t\t\t\tpending:\n\t\t\t\t\t\t\t\t\taction.type ===\n\t\t\t\t\t\t\t\t\t'DELETE_ENTITY_RECORD_START',\n\t\t\t\t\t\t\t\terror: action.error,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn state;\n\t\t\t},\n\t\t} )\n\t);\n}\n\n/**\n * Reducer keeping track of the registered entities.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function entitiesConfig( state = defaultEntities, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'ADD_ENTITIES':\n\t\t\treturn [ ...state, ...action.entities ];\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer keeping track of the registered entities config and data.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport const entities = ( state = {}, action ) => {\n\tconst newConfig = entitiesConfig( state.config, action );\n\n\t// Generates a dynamic reducer for the entities\n\tlet entitiesDataReducer = state.reducer;\n\tif ( ! entitiesDataReducer || newConfig !== state.config ) {\n\t\tconst entitiesByKind = groupBy( newConfig, 'kind' );\n\t\tentitiesDataReducer = combineReducers(\n\t\t\tObject.entries( entitiesByKind ).reduce(\n\t\t\t\t( memo, [ kind, subEntities ] ) => {\n\t\t\t\t\tconst kindReducer = combineReducers(\n\t\t\t\t\t\tsubEntities.reduce(\n\t\t\t\t\t\t\t( kindMemo, entityConfig ) => ( {\n\t\t\t\t\t\t\t\t...kindMemo,\n\t\t\t\t\t\t\t\t[ entityConfig.name ]: entity( entityConfig ),\n\t\t\t\t\t\t\t} ),\n\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\n\t\t\t\t\tmemo[ kind ] = kindReducer;\n\t\t\t\t\treturn memo;\n\t\t\t\t},\n\t\t\t\t{}\n\t\t\t)\n\t\t);\n\t}\n\n\tconst newData = entitiesDataReducer( state.data, action );\n\n\tif (\n\t\tnewData === state.data &&\n\t\tnewConfig === state.config &&\n\t\tentitiesDataReducer === state.reducer\n\t) {\n\t\treturn state;\n\t}\n\n\treturn {\n\t\treducer: entitiesDataReducer,\n\t\tdata: newData,\n\t\tconfig: newConfig,\n\t};\n};\n\n/**\n * Reducer keeping track of entity edit undo history.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nconst UNDO_INITIAL_STATE = [];\nUNDO_INITIAL_STATE.offset = 0;\nlet lastEditAction;\nexport function undo( state = UNDO_INITIAL_STATE, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'EDIT_ENTITY_RECORD':\n\t\tcase 'CREATE_UNDO_LEVEL':\n\t\t\tlet isCreateUndoLevel = action.type === 'CREATE_UNDO_LEVEL';\n\t\t\tconst isUndoOrRedo =\n\t\t\t\t! isCreateUndoLevel &&\n\t\t\t\t( action.meta.isUndo || action.meta.isRedo );\n\t\t\tif ( isCreateUndoLevel ) {\n\t\t\t\taction = lastEditAction;\n\t\t\t} else if ( ! isUndoOrRedo ) {\n\t\t\t\t// Don't lose the last edit cache if the new one only has transient edits.\n\t\t\t\t// Transient edits don't create new levels so updating the cache would make\n\t\t\t\t// us skip an edit later when creating levels explicitly.\n\t\t\t\tif (\n\t\t\t\t\tObject.keys( action.edits ).some(\n\t\t\t\t\t\t( key ) => ! action.transientEdits[ key ]\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tlastEditAction = action;\n\t\t\t\t} else {\n\t\t\t\t\tlastEditAction = {\n\t\t\t\t\t\t...action,\n\t\t\t\t\t\tedits: {\n\t\t\t\t\t\t\t...( lastEditAction && lastEditAction.edits ),\n\t\t\t\t\t\t\t...action.edits,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet nextState;\n\t\t\tif ( isUndoOrRedo ) {\n\t\t\t\tnextState = [ ...state ];\n\t\t\t\tnextState.offset =\n\t\t\t\t\tstate.offset + ( action.meta.isUndo ? -1 : 1 );\n\n\t\t\t\tif ( state.flattenedUndo ) {\n\t\t\t\t\t// The first undo in a sequence of undos might happen while we have\n\t\t\t\t\t// flattened undos in state. If this is the case, we want execution\n\t\t\t\t\t// to continue as if we were creating an explicit undo level. This\n\t\t\t\t\t// will result in an extra undo level being appended with the flattened\n\t\t\t\t\t// undo values.\n\t\t\t\t\tisCreateUndoLevel = true;\n\t\t\t\t\taction = lastEditAction;\n\t\t\t\t} else {\n\t\t\t\t\treturn nextState;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( ! action.meta.undo ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\t// Transient edits don't create an undo level, but are\n\t\t\t// reachable in the next meaningful edit to which they\n\t\t\t// are merged. They are defined in the entity's config.\n\t\t\tif (\n\t\t\t\t! isCreateUndoLevel &&\n\t\t\t\t! Object.keys( action.edits ).some(\n\t\t\t\t\t( key ) => ! action.transientEdits[ key ]\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tnextState = [ ...state ];\n\t\t\t\tnextState.flattenedUndo = {\n\t\t\t\t\t...state.flattenedUndo,\n\t\t\t\t\t...action.edits,\n\t\t\t\t};\n\t\t\t\tnextState.offset = state.offset;\n\t\t\t\treturn nextState;\n\t\t\t}\n\n\t\t\t// Clear potential redos, because this only supports linear history.\n\t\t\tnextState =\n\t\t\t\tnextState || state.slice( 0, state.offset || undefined );\n\t\t\tnextState.offset = nextState.offset || 0;\n\t\t\tnextState.pop();\n\t\t\tif ( ! isCreateUndoLevel ) {\n\t\t\t\tnextState.push( {\n\t\t\t\t\tkind: action.meta.undo.kind,\n\t\t\t\t\tname: action.meta.undo.name,\n\t\t\t\t\trecordId: action.meta.undo.recordId,\n\t\t\t\t\tedits: {\n\t\t\t\t\t\t...state.flattenedUndo,\n\t\t\t\t\t\t...action.meta.undo.edits,\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t}\n\t\t\t// When an edit is a function it's an optimization to avoid running some expensive operation.\n\t\t\t// We can't rely on the function references being the same so we opt out of comparing them here.\n\t\t\tconst comparisonUndoEdits = Object.values(\n\t\t\t\taction.meta.undo.edits\n\t\t\t).filter( ( edit ) => typeof edit !== 'function' );\n\t\t\tconst comparisonEdits = Object.values( action.edits ).filter(\n\t\t\t\t( edit ) => typeof edit !== 'function'\n\t\t\t);\n\t\t\tif ( ! isShallowEqual( comparisonUndoEdits, comparisonEdits ) ) {\n\t\t\t\tnextState.push( {\n\t\t\t\t\tkind: action.kind,\n\t\t\t\t\tname: action.name,\n\t\t\t\t\trecordId: action.recordId,\n\t\t\t\t\tedits: isCreateUndoLevel\n\t\t\t\t\t\t? { ...state.flattenedUndo, ...action.edits }\n\t\t\t\t\t\t: action.edits,\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn nextState;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing embed preview data.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function embedPreviews( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_EMBED_PREVIEW':\n\t\t\tconst { url, preview } = action;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ url ]: preview,\n\t\t\t};\n\t}\n\treturn state;\n}\n\n/**\n * State which tracks whether the user can perform an action on a REST\n * resource.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function userPermissions( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_USER_PERMISSION':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.key ]: action.isAllowed,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning autosaves keyed by their parent's post id.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function autosaves( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'RECEIVE_AUTOSAVES':\n\t\t\tconst { postId, autosaves: autosavesData } = action;\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ postId ]: autosavesData,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\nexport default combineReducers( {\n\tterms,\n\tusers,\n\tcurrentTheme,\n\tcurrentUser,\n\ttaxonomies,\n\tthemes,\n\tthemeSupports,\n\tentities,\n\tundo,\n\tembedPreviews,\n\tuserPermissions,\n\tautosaves,\n} );\n"]}