[ Index ]

PHP Cross Reference of WordPress

title

Body

[close]

/wp-includes/js/dist/ -> core-data.js (source)

   1  this["wp"] = this["wp"] || {}; this["wp"]["coreData"] =
   2  /******/ (function(modules) { // webpackBootstrap
   3  /******/     // The module cache
   4  /******/     var installedModules = {};
   5  /******/
   6  /******/     // The require function
   7  /******/ 	function __webpack_require__(moduleId) {
   8  /******/
   9  /******/         // Check if module is in cache
  10  /******/         if(installedModules[moduleId]) {
  11  /******/             return installedModules[moduleId].exports;
  12  /******/         }
  13  /******/         // Create a new module (and put it into the cache)
  14  /******/         var module = installedModules[moduleId] = {
  15  /******/             i: moduleId,
  16  /******/             l: false,
  17  /******/             exports: {}
  18  /******/         };
  19  /******/
  20  /******/         // Execute the module function
  21  /******/         modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  22  /******/
  23  /******/         // Flag the module as loaded
  24  /******/         module.l = true;
  25  /******/
  26  /******/         // Return the exports of the module
  27  /******/         return module.exports;
  28  /******/     }
  29  /******/
  30  /******/
  31  /******/     // expose the modules object (__webpack_modules__)
  32  /******/     __webpack_require__.m = modules;
  33  /******/
  34  /******/     // expose the module cache
  35  /******/     __webpack_require__.c = installedModules;
  36  /******/
  37  /******/     // define getter function for harmony exports
  38  /******/     __webpack_require__.d = function(exports, name, getter) {
  39  /******/         if(!__webpack_require__.o(exports, name)) {
  40  /******/             Object.defineProperty(exports, name, { enumerable: true, get: getter });
  41  /******/         }
  42  /******/     };
  43  /******/
  44  /******/     // define __esModule on exports
  45  /******/     __webpack_require__.r = function(exports) {
  46  /******/         if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  47  /******/             Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  48  /******/         }
  49  /******/         Object.defineProperty(exports, '__esModule', { value: true });
  50  /******/     };
  51  /******/
  52  /******/     // create a fake namespace object
  53  /******/     // mode & 1: value is a module id, require it
  54  /******/     // mode & 2: merge all properties of value into the ns
  55  /******/     // mode & 4: return value when already ns object
  56  /******/     // mode & 8|1: behave like require
  57  /******/     __webpack_require__.t = function(value, mode) {
  58  /******/         if(mode & 1) value = __webpack_require__(value);
  59  /******/         if(mode & 8) return value;
  60  /******/         if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
  61  /******/         var ns = Object.create(null);
  62  /******/         __webpack_require__.r(ns);
  63  /******/         Object.defineProperty(ns, 'default', { enumerable: true, value: value });
  64  /******/         if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
  65  /******/         return ns;
  66  /******/     };
  67  /******/
  68  /******/     // getDefaultExport function for compatibility with non-harmony modules
  69  /******/     __webpack_require__.n = function(module) {
  70  /******/         var getter = module && module.__esModule ?
  71  /******/ 			function getDefault() { return module['default']; } :
  72  /******/ 			function getModuleExports() { return module; };
  73  /******/         __webpack_require__.d(getter, 'a', getter);
  74  /******/         return getter;
  75  /******/     };
  76  /******/
  77  /******/     // Object.prototype.hasOwnProperty.call
  78  /******/     __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  79  /******/
  80  /******/     // __webpack_public_path__
  81  /******/     __webpack_require__.p = "";
  82  /******/
  83  /******/
  84  /******/     // Load entry module and return exports
  85  /******/     return __webpack_require__(__webpack_require__.s = "dsJ0");
  86  /******/ })
  87  /************************************************************************/
  88  /******/ ({
  89  
  90  /***/ "1ZqX":
  91  /***/ (function(module, exports) {
  92  
  93  (function() { module.exports = window["wp"]["data"]; }());
  94  
  95  /***/ }),
  96  
  97  /***/ "51Zz":
  98  /***/ (function(module, exports) {
  99  
 100  (function() { module.exports = window["wp"]["dataControls"]; }());
 101  
 102  /***/ }),
 103  
 104  /***/ "7Cbv":
 105  /***/ (function(module, __webpack_exports__, __webpack_require__) {
 106  
 107  "use strict";
 108  
 109  // CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/rng.js
 110  // Unique ID creation requires a high quality random # generator. In the browser we therefore
 111  // require the crypto API and do not support built-in fallback to lower quality random number
 112  // generators (like Math.random()).
 113  var getRandomValues;
 114  var rnds8 = new Uint8Array(16);
 115  function rng() {
 116    // lazy load so that environments that need to polyfill have a chance to do so
 117    if (!getRandomValues) {
 118      // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also,
 119      // find the complete implementation of crypto (msCrypto) on IE11.
 120      getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);
 121  
 122      if (!getRandomValues) {
 123        throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
 124      }
 125    }
 126  
 127    return getRandomValues(rnds8);
 128  }
 129  // CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/regex.js
 130  /* harmony default export */ var regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i);
 131  // CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/validate.js
 132  
 133  
 134  function validate(uuid) {
 135    return typeof uuid === 'string' && regex.test(uuid);
 136  }
 137  
 138  /* harmony default export */ var esm_browser_validate = (validate);
 139  // CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/stringify.js
 140  
 141  /**
 142   * Convert array of 16 byte values to UUID string format of the form:
 143   * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
 144   */
 145  
 146  var byteToHex = [];
 147  
 148  for (var stringify_i = 0; stringify_i < 256; ++stringify_i) {
 149    byteToHex.push((stringify_i + 0x100).toString(16).substr(1));
 150  }
 151  
 152  function stringify(arr) {
 153    var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
 154    // Note: Be careful editing this code!  It's been tuned for performance
 155    // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
 156    var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID.  If this throws, it's likely due to one
 157    // of the following:
 158    // - One or more input array values don't map to a hex octet (leading to
 159    // "undefined" in the uuid)
 160    // - Invalid input values for the RFC `version` or `variant` fields
 161  
 162    if (!esm_browser_validate(uuid)) {
 163      throw TypeError('Stringified UUID is invalid');
 164    }
 165  
 166    return uuid;
 167  }
 168  
 169  /* harmony default export */ var esm_browser_stringify = (stringify);
 170  // CONCATENATED MODULE: ./node_modules/uuid/dist/esm-browser/v4.js
 171  
 172  
 173  
 174  function v4(options, buf, offset) {
 175    options = options || {};
 176    var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
 177  
 178    rnds[6] = rnds[6] & 0x0f | 0x40;
 179    rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided
 180  
 181    if (buf) {
 182      offset = offset || 0;
 183  
 184      for (var i = 0; i < 16; ++i) {
 185        buf[offset + i] = rnds[i];
 186      }
 187  
 188      return buf;
 189    }
 190  
 191    return esm_browser_stringify(rnds);
 192  }
 193  
 194  /* harmony default export */ var esm_browser_v4 = __webpack_exports__["a"] = (v4);
 195  
 196  /***/ }),
 197  
 198  /***/ "FtRg":
 199  /***/ (function(module, exports, __webpack_require__) {
 200  
 201  "use strict";
 202  
 203  
 204  function _typeof(obj) {
 205    if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
 206      _typeof = function (obj) {
 207        return typeof obj;
 208      };
 209    } else {
 210      _typeof = function (obj) {
 211        return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
 212      };
 213    }
 214  
 215    return _typeof(obj);
 216  }
 217  
 218  function _classCallCheck(instance, Constructor) {
 219    if (!(instance instanceof Constructor)) {
 220      throw new TypeError("Cannot call a class as a function");
 221    }
 222  }
 223  
 224  function _defineProperties(target, props) {
 225    for (var i = 0; i < props.length; i++) {
 226      var descriptor = props[i];
 227      descriptor.enumerable = descriptor.enumerable || false;
 228      descriptor.configurable = true;
 229      if ("value" in descriptor) descriptor.writable = true;
 230      Object.defineProperty(target, descriptor.key, descriptor);
 231    }
 232  }
 233  
 234  function _createClass(Constructor, protoProps, staticProps) {
 235    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
 236    if (staticProps) _defineProperties(Constructor, staticProps);
 237    return Constructor;
 238  }
 239  
 240  /**
 241   * Given an instance of EquivalentKeyMap, returns its internal value pair tuple
 242   * for a key, if one exists. The tuple members consist of the last reference
 243   * value for the key (used in efficient subsequent lookups) and the value
 244   * assigned for the key at the leaf node.
 245   *
 246   * @param {EquivalentKeyMap} instance EquivalentKeyMap instance.
 247   * @param {*} key                     The key for which to return value pair.
 248   *
 249   * @return {?Array} Value pair, if exists.
 250   */
 251  function getValuePair(instance, key) {
 252    var _map = instance._map,
 253        _arrayTreeMap = instance._arrayTreeMap,
 254        _objectTreeMap = instance._objectTreeMap; // Map keeps a reference to the last object-like key used to set the
 255    // value, which can be used to shortcut immediately to the value.
 256  
 257    if (_map.has(key)) {
 258      return _map.get(key);
 259    } // Sort keys to ensure stable retrieval from tree.
 260  
 261  
 262    var properties = Object.keys(key).sort(); // Tree by type to avoid conflicts on numeric object keys, empty value.
 263  
 264    var map = Array.isArray(key) ? _arrayTreeMap : _objectTreeMap;
 265  
 266    for (var i = 0; i < properties.length; i++) {
 267      var property = properties[i];
 268      map = map.get(property);
 269  
 270      if (map === undefined) {
 271        return;
 272      }
 273  
 274      var propertyValue = key[property];
 275      map = map.get(propertyValue);
 276  
 277      if (map === undefined) {
 278        return;
 279      }
 280    }
 281  
 282    var valuePair = map.get('_ekm_value');
 283  
 284    if (!valuePair) {
 285      return;
 286    } // If reached, it implies that an object-like key was set with another
 287    // reference, so delete the reference and replace with the current.
 288  
 289  
 290    _map.delete(valuePair[0]);
 291  
 292    valuePair[0] = key;
 293    map.set('_ekm_value', valuePair);
 294  
 295    _map.set(key, valuePair);
 296  
 297    return valuePair;
 298  }
 299  /**
 300   * Variant of a Map object which enables lookup by equivalent (deeply equal)
 301   * object and array keys.
 302   */
 303  
 304  
 305  var EquivalentKeyMap =
 306  /*#__PURE__*/
 307  function () {
 308    /**
 309     * Constructs a new instance of EquivalentKeyMap.
 310     *
 311     * @param {Iterable.<*>} iterable Initial pair of key, value for map.
 312     */
 313    function EquivalentKeyMap(iterable) {
 314      _classCallCheck(this, EquivalentKeyMap);
 315  
 316      this.clear();
 317  
 318      if (iterable instanceof EquivalentKeyMap) {
 319        // Map#forEach is only means of iterating with support for IE11.
 320        var iterablePairs = [];
 321        iterable.forEach(function (value, key) {
 322          iterablePairs.push([key, value]);
 323        });
 324        iterable = iterablePairs;
 325      }
 326  
 327      if (iterable != null) {
 328        for (var i = 0; i < iterable.length; i++) {
 329          this.set(iterable[i][0], iterable[i][1]);
 330        }
 331      }
 332    }
 333    /**
 334     * Accessor property returning the number of elements.
 335     *
 336     * @return {number} Number of elements.
 337     */
 338  
 339  
 340    _createClass(EquivalentKeyMap, [{
 341      key: "set",
 342  
 343      /**
 344       * Add or update an element with a specified key and value.
 345       *
 346       * @param {*} key   The key of the element to add.
 347       * @param {*} value The value of the element to add.
 348       *
 349       * @return {EquivalentKeyMap} Map instance.
 350       */
 351      value: function set(key, value) {
 352        // Shortcut non-object-like to set on internal Map.
 353        if (key === null || _typeof(key) !== 'object') {
 354          this._map.set(key, value);
 355  
 356          return this;
 357        } // Sort keys to ensure stable assignment into tree.
 358  
 359  
 360        var properties = Object.keys(key).sort();
 361        var valuePair = [key, value]; // Tree by type to avoid conflicts on numeric object keys, empty value.
 362  
 363        var map = Array.isArray(key) ? this._arrayTreeMap : this._objectTreeMap;
 364  
 365        for (var i = 0; i < properties.length; i++) {
 366          var property = properties[i];
 367  
 368          if (!map.has(property)) {
 369            map.set(property, new EquivalentKeyMap());
 370          }
 371  
 372          map = map.get(property);
 373          var propertyValue = key[property];
 374  
 375          if (!map.has(propertyValue)) {
 376            map.set(propertyValue, new EquivalentKeyMap());
 377          }
 378  
 379          map = map.get(propertyValue);
 380        } // If an _ekm_value exists, there was already an equivalent key. Before
 381        // overriding, ensure that the old key reference is removed from map to
 382        // avoid memory leak of accumulating equivalent keys. This is, in a
 383        // sense, a poor man's WeakMap, while still enabling iterability.
 384  
 385  
 386        var previousValuePair = map.get('_ekm_value');
 387  
 388        if (previousValuePair) {
 389          this._map.delete(previousValuePair[0]);
 390        }
 391  
 392        map.set('_ekm_value', valuePair);
 393  
 394        this._map.set(key, valuePair);
 395  
 396        return this;
 397      }
 398      /**
 399       * Returns a specified element.
 400       *
 401       * @param {*} key The key of the element to return.
 402       *
 403       * @return {?*} The element associated with the specified key or undefined
 404       *              if the key can't be found.
 405       */
 406  
 407    }, {
 408      key: "get",
 409      value: function get(key) {
 410        // Shortcut non-object-like to get from internal Map.
 411        if (key === null || _typeof(key) !== 'object') {
 412          return this._map.get(key);
 413        }
 414  
 415        var valuePair = getValuePair(this, key);
 416  
 417        if (valuePair) {
 418          return valuePair[1];
 419        }
 420      }
 421      /**
 422       * Returns a boolean indicating whether an element with the specified key
 423       * exists or not.
 424       *
 425       * @param {*} key The key of the element to test for presence.
 426       *
 427       * @return {boolean} Whether an element with the specified key exists.
 428       */
 429  
 430    }, {
 431      key: "has",
 432      value: function has(key) {
 433        if (key === null || _typeof(key) !== 'object') {
 434          return this._map.has(key);
 435        } // Test on the _presence_ of the pair, not its value, as even undefined
 436        // can be a valid member value for a key.
 437  
 438  
 439        return getValuePair(this, key) !== undefined;
 440      }
 441      /**
 442       * Removes the specified element.
 443       *
 444       * @param {*} key The key of the element to remove.
 445       *
 446       * @return {boolean} Returns true if an element existed and has been
 447       *                   removed, or false if the element does not exist.
 448       */
 449  
 450    }, {
 451      key: "delete",
 452      value: function _delete(key) {
 453        if (!this.has(key)) {
 454          return false;
 455        } // This naive implementation will leave orphaned child trees. A better
 456        // implementation should traverse and remove orphans.
 457  
 458  
 459        this.set(key, undefined);
 460        return true;
 461      }
 462      /**
 463       * Executes a provided function once per each key/value pair, in insertion
 464       * order.
 465       *
 466       * @param {Function} callback Function to execute for each element.
 467       * @param {*}        thisArg  Value to use as `this` when executing
 468       *                            `callback`.
 469       */
 470  
 471    }, {
 472      key: "forEach",
 473      value: function forEach(callback) {
 474        var _this = this;
 475  
 476        var thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this;
 477  
 478        this._map.forEach(function (value, key) {
 479          // Unwrap value from object-like value pair.
 480          if (key !== null && _typeof(key) === 'object') {
 481            value = value[1];
 482          }
 483  
 484          callback.call(thisArg, value, key, _this);
 485        });
 486      }
 487      /**
 488       * Removes all elements.
 489       */
 490  
 491    }, {
 492      key: "clear",
 493      value: function clear() {
 494        this._map = new Map();
 495        this._arrayTreeMap = new Map();
 496        this._objectTreeMap = new Map();
 497      }
 498    }, {
 499      key: "size",
 500      get: function get() {
 501        return this._map.size;
 502      }
 503    }]);
 504  
 505    return EquivalentKeyMap;
 506  }();
 507  
 508  module.exports = EquivalentKeyMap;
 509  
 510  
 511  /***/ }),
 512  
 513  /***/ "GRId":
 514  /***/ (function(module, exports) {
 515  
 516  (function() { module.exports = window["wp"]["element"]; }());
 517  
 518  /***/ }),
 519  
 520  /***/ "HSyU":
 521  /***/ (function(module, exports) {
 522  
 523  (function() { module.exports = window["wp"]["blocks"]; }());
 524  
 525  /***/ }),
 526  
 527  /***/ "Mmq9":
 528  /***/ (function(module, exports) {
 529  
 530  (function() { module.exports = window["wp"]["url"]; }());
 531  
 532  /***/ }),
 533  
 534  /***/ "YLtl":
 535  /***/ (function(module, exports) {
 536  
 537  (function() { module.exports = window["lodash"]; }());
 538  
 539  /***/ }),
 540  
 541  /***/ "dsJ0":
 542  /***/ (function(module, __webpack_exports__, __webpack_require__) {
 543  
 544  "use strict";
 545  // ESM COMPAT FLAG
 546  __webpack_require__.r(__webpack_exports__);
 547  
 548  // EXPORTS
 549  __webpack_require__.d(__webpack_exports__, "store", function() { return /* binding */ build_module_store; });
 550  __webpack_require__.d(__webpack_exports__, "EntityProvider", function() { return /* reexport */ EntityProvider; });
 551  __webpack_require__.d(__webpack_exports__, "useEntityId", function() { return /* reexport */ useEntityId; });
 552  __webpack_require__.d(__webpack_exports__, "useEntityProp", function() { return /* reexport */ useEntityProp; });
 553  __webpack_require__.d(__webpack_exports__, "useEntityBlockEditor", function() { return /* reexport */ useEntityBlockEditor; });
 554  __webpack_require__.d(__webpack_exports__, "__experimentalFetchLinkSuggestions", function() { return /* reexport */ _experimental_fetch_link_suggestions; });
 555  __webpack_require__.d(__webpack_exports__, "__experimentalFetchRemoteUrlData", function() { return /* reexport */ _experimental_fetch_remote_url_data; });
 556  
 557  // NAMESPACE OBJECT: ./node_modules/@wordpress/core-data/build-module/locks/actions.js
 558  var locks_actions_namespaceObject = {};
 559  __webpack_require__.r(locks_actions_namespaceObject);
 560  __webpack_require__.d(locks_actions_namespaceObject, "__unstableAcquireStoreLock", function() { return __unstableAcquireStoreLock; });
 561  __webpack_require__.d(locks_actions_namespaceObject, "__unstableEnqueueLockRequest", function() { return __unstableEnqueueLockRequest; });
 562  __webpack_require__.d(locks_actions_namespaceObject, "__unstableReleaseStoreLock", function() { return __unstableReleaseStoreLock; });
 563  __webpack_require__.d(locks_actions_namespaceObject, "__unstableProcessPendingLockRequests", function() { return __unstableProcessPendingLockRequests; });
 564  
 565  // NAMESPACE OBJECT: ./node_modules/@wordpress/core-data/build-module/actions.js
 566  var build_module_actions_namespaceObject = {};
 567  __webpack_require__.r(build_module_actions_namespaceObject);
 568  __webpack_require__.d(build_module_actions_namespaceObject, "receiveUserQuery", function() { return receiveUserQuery; });
 569  __webpack_require__.d(build_module_actions_namespaceObject, "receiveCurrentUser", function() { return receiveCurrentUser; });
 570  __webpack_require__.d(build_module_actions_namespaceObject, "addEntities", function() { return addEntities; });
 571  __webpack_require__.d(build_module_actions_namespaceObject, "receiveEntityRecords", function() { return receiveEntityRecords; });
 572  __webpack_require__.d(build_module_actions_namespaceObject, "receiveCurrentTheme", function() { return receiveCurrentTheme; });
 573  __webpack_require__.d(build_module_actions_namespaceObject, "receiveThemeSupports", function() { return receiveThemeSupports; });
 574  __webpack_require__.d(build_module_actions_namespaceObject, "receiveEmbedPreview", function() { return receiveEmbedPreview; });
 575  __webpack_require__.d(build_module_actions_namespaceObject, "deleteEntityRecord", function() { return deleteEntityRecord; });
 576  __webpack_require__.d(build_module_actions_namespaceObject, "editEntityRecord", function() { return actions_editEntityRecord; });
 577  __webpack_require__.d(build_module_actions_namespaceObject, "undo", function() { return undo; });
 578  __webpack_require__.d(build_module_actions_namespaceObject, "redo", function() { return redo; });
 579  __webpack_require__.d(build_module_actions_namespaceObject, "__unstableCreateUndoLevel", function() { return actions_unstableCreateUndoLevel; });
 580  __webpack_require__.d(build_module_actions_namespaceObject, "saveEntityRecord", function() { return saveEntityRecord; });
 581  __webpack_require__.d(build_module_actions_namespaceObject, "__experimentalBatch", function() { return __experimentalBatch; });
 582  __webpack_require__.d(build_module_actions_namespaceObject, "saveEditedEntityRecord", function() { return saveEditedEntityRecord; });
 583  __webpack_require__.d(build_module_actions_namespaceObject, "__experimentalSaveSpecifiedEntityEdits", function() { return __experimentalSaveSpecifiedEntityEdits; });
 584  __webpack_require__.d(build_module_actions_namespaceObject, "receiveUploadPermissions", function() { return receiveUploadPermissions; });
 585  __webpack_require__.d(build_module_actions_namespaceObject, "receiveUserPermission", function() { return receiveUserPermission; });
 586  __webpack_require__.d(build_module_actions_namespaceObject, "receiveAutosaves", function() { return receiveAutosaves; });
 587  
 588  // NAMESPACE OBJECT: ./node_modules/@wordpress/core-data/build-module/selectors.js
 589  var build_module_selectors_namespaceObject = {};
 590  __webpack_require__.r(build_module_selectors_namespaceObject);
 591  __webpack_require__.d(build_module_selectors_namespaceObject, "isRequestingEmbedPreview", function() { return isRequestingEmbedPreview; });
 592  __webpack_require__.d(build_module_selectors_namespaceObject, "getAuthors", function() { return getAuthors; });
 593  __webpack_require__.d(build_module_selectors_namespaceObject, "__unstableGetAuthor", function() { return __unstableGetAuthor; });
 594  __webpack_require__.d(build_module_selectors_namespaceObject, "getCurrentUser", function() { return getCurrentUser; });
 595  __webpack_require__.d(build_module_selectors_namespaceObject, "getUserQueryResults", function() { return getUserQueryResults; });
 596  __webpack_require__.d(build_module_selectors_namespaceObject, "getEntitiesByKind", function() { return getEntitiesByKind; });
 597  __webpack_require__.d(build_module_selectors_namespaceObject, "getEntity", function() { return getEntity; });
 598  __webpack_require__.d(build_module_selectors_namespaceObject, "getEntityRecord", function() { return getEntityRecord; });
 599  __webpack_require__.d(build_module_selectors_namespaceObject, "__experimentalGetEntityRecordNoResolver", function() { return __experimentalGetEntityRecordNoResolver; });
 600  __webpack_require__.d(build_module_selectors_namespaceObject, "getRawEntityRecord", function() { return getRawEntityRecord; });
 601  __webpack_require__.d(build_module_selectors_namespaceObject, "hasEntityRecords", function() { return hasEntityRecords; });
 602  __webpack_require__.d(build_module_selectors_namespaceObject, "getEntityRecords", function() { return getEntityRecords; });
 603  __webpack_require__.d(build_module_selectors_namespaceObject, "__experimentalGetDirtyEntityRecords", function() { return __experimentalGetDirtyEntityRecords; });
 604  __webpack_require__.d(build_module_selectors_namespaceObject, "getEntityRecordEdits", function() { return getEntityRecordEdits; });
 605  __webpack_require__.d(build_module_selectors_namespaceObject, "getEntityRecordNonTransientEdits", function() { return getEntityRecordNonTransientEdits; });
 606  __webpack_require__.d(build_module_selectors_namespaceObject, "hasEditsForEntityRecord", function() { return hasEditsForEntityRecord; });
 607  __webpack_require__.d(build_module_selectors_namespaceObject, "getEditedEntityRecord", function() { return getEditedEntityRecord; });
 608  __webpack_require__.d(build_module_selectors_namespaceObject, "isAutosavingEntityRecord", function() { return isAutosavingEntityRecord; });
 609  __webpack_require__.d(build_module_selectors_namespaceObject, "isSavingEntityRecord", function() { return isSavingEntityRecord; });
 610  __webpack_require__.d(build_module_selectors_namespaceObject, "isDeletingEntityRecord", function() { return isDeletingEntityRecord; });
 611  __webpack_require__.d(build_module_selectors_namespaceObject, "getLastEntitySaveError", function() { return getLastEntitySaveError; });
 612  __webpack_require__.d(build_module_selectors_namespaceObject, "getLastEntityDeleteError", function() { return getLastEntityDeleteError; });
 613  __webpack_require__.d(build_module_selectors_namespaceObject, "getUndoEdit", function() { return getUndoEdit; });
 614  __webpack_require__.d(build_module_selectors_namespaceObject, "getRedoEdit", function() { return getRedoEdit; });
 615  __webpack_require__.d(build_module_selectors_namespaceObject, "hasUndo", function() { return hasUndo; });
 616  __webpack_require__.d(build_module_selectors_namespaceObject, "hasRedo", function() { return hasRedo; });
 617  __webpack_require__.d(build_module_selectors_namespaceObject, "getCurrentTheme", function() { return getCurrentTheme; });
 618  __webpack_require__.d(build_module_selectors_namespaceObject, "getThemeSupports", function() { return getThemeSupports; });
 619  __webpack_require__.d(build_module_selectors_namespaceObject, "getEmbedPreview", function() { return getEmbedPreview; });
 620  __webpack_require__.d(build_module_selectors_namespaceObject, "isPreviewEmbedFallback", function() { return isPreviewEmbedFallback; });
 621  __webpack_require__.d(build_module_selectors_namespaceObject, "canUser", function() { return canUser; });
 622  __webpack_require__.d(build_module_selectors_namespaceObject, "canUserEditEntityRecord", function() { return canUserEditEntityRecord; });
 623  __webpack_require__.d(build_module_selectors_namespaceObject, "getAutosaves", function() { return getAutosaves; });
 624  __webpack_require__.d(build_module_selectors_namespaceObject, "getAutosave", function() { return getAutosave; });
 625  __webpack_require__.d(build_module_selectors_namespaceObject, "hasFetchedAutosaves", function() { return hasFetchedAutosaves; });
 626  __webpack_require__.d(build_module_selectors_namespaceObject, "getReferenceByDistinctEdits", function() { return getReferenceByDistinctEdits; });
 627  __webpack_require__.d(build_module_selectors_namespaceObject, "__experimentalGetTemplateForLink", function() { return __experimentalGetTemplateForLink; });
 628  
 629  // NAMESPACE OBJECT: ./node_modules/@wordpress/core-data/build-module/resolvers.js
 630  var resolvers_namespaceObject = {};
 631  __webpack_require__.r(resolvers_namespaceObject);
 632  __webpack_require__.d(resolvers_namespaceObject, "getAuthors", function() { return resolvers_getAuthors; });
 633  __webpack_require__.d(resolvers_namespaceObject, "__unstableGetAuthor", function() { return resolvers_unstableGetAuthor; });
 634  __webpack_require__.d(resolvers_namespaceObject, "getCurrentUser", function() { return resolvers_getCurrentUser; });
 635  __webpack_require__.d(resolvers_namespaceObject, "getEntityRecord", function() { return resolvers_getEntityRecord; });
 636  __webpack_require__.d(resolvers_namespaceObject, "getRawEntityRecord", function() { return resolvers_getRawEntityRecord; });
 637  __webpack_require__.d(resolvers_namespaceObject, "getEditedEntityRecord", function() { return resolvers_getEditedEntityRecord; });
 638  __webpack_require__.d(resolvers_namespaceObject, "getEntityRecords", function() { return resolvers_getEntityRecords; });
 639  __webpack_require__.d(resolvers_namespaceObject, "getCurrentTheme", function() { return resolvers_getCurrentTheme; });
 640  __webpack_require__.d(resolvers_namespaceObject, "getThemeSupports", function() { return resolvers_getThemeSupports; });
 641  __webpack_require__.d(resolvers_namespaceObject, "getEmbedPreview", function() { return resolvers_getEmbedPreview; });
 642  __webpack_require__.d(resolvers_namespaceObject, "canUser", function() { return resolvers_canUser; });
 643  __webpack_require__.d(resolvers_namespaceObject, "canUserEditEntityRecord", function() { return resolvers_canUserEditEntityRecord; });
 644  __webpack_require__.d(resolvers_namespaceObject, "getAutosaves", function() { return resolvers_getAutosaves; });
 645  __webpack_require__.d(resolvers_namespaceObject, "getAutosave", function() { return resolvers_getAutosave; });
 646  __webpack_require__.d(resolvers_namespaceObject, "__experimentalGetTemplateForLink", function() { return resolvers_experimentalGetTemplateForLink; });
 647  
 648  // NAMESPACE OBJECT: ./node_modules/@wordpress/core-data/build-module/locks/selectors.js
 649  var locks_selectors_namespaceObject = {};
 650  __webpack_require__.r(locks_selectors_namespaceObject);
 651  __webpack_require__.d(locks_selectors_namespaceObject, "__unstableGetPendingLockRequests", function() { return __unstableGetPendingLockRequests; });
 652  __webpack_require__.d(locks_selectors_namespaceObject, "__unstableIsLockAvailable", function() { return __unstableIsLockAvailable; });
 653  
 654  // EXTERNAL MODULE: external ["wp","data"]
 655  var external_wp_data_ = __webpack_require__("1ZqX");
 656  
 657  // EXTERNAL MODULE: external ["wp","dataControls"]
 658  var external_wp_dataControls_ = __webpack_require__("51Zz");
 659  
 660  // EXTERNAL MODULE: external "lodash"
 661  var external_lodash_ = __webpack_require__("YLtl");
 662  
 663  // EXTERNAL MODULE: external ["wp","isShallowEqual"]
 664  var external_wp_isShallowEqual_ = __webpack_require__("rl8x");
 665  var external_wp_isShallowEqual_default = /*#__PURE__*/__webpack_require__.n(external_wp_isShallowEqual_);
 666  
 667  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/utils/if-matching-action.js
 668  /**
 669   * A higher-order reducer creator which invokes the original reducer only if
 670   * the dispatching action matches the given predicate, **OR** if state is
 671   * initializing (undefined).
 672   *
 673   * @param {Function} isMatch Function predicate for allowing reducer call.
 674   *
 675   * @return {Function} Higher-order reducer.
 676   */
 677  const ifMatchingAction = isMatch => reducer => (state, action) => {
 678    if (state === undefined || isMatch(action)) {
 679      return reducer(state, action);
 680    }
 681  
 682    return state;
 683  };
 684  
 685  /* harmony default export */ var if_matching_action = (ifMatchingAction);
 686  
 687  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/utils/replace-action.js
 688  /**
 689   * Higher-order reducer creator which substitutes the action object before
 690   * passing to the original reducer.
 691   *
 692   * @param {Function} replacer Function mapping original action to replacement.
 693   *
 694   * @return {Function} Higher-order reducer.
 695   */
 696  const replaceAction = replacer => reducer => (state, action) => {
 697    return reducer(state, replacer(action));
 698  };
 699  
 700  /* harmony default export */ var replace_action = (replaceAction);
 701  
 702  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/utils/conservative-map-item.js
 703  /**
 704   * External dependencies
 705   */
 706  
 707  /**
 708   * Given the current and next item entity, returns the minimally "modified"
 709   * result of the next item, preferring value references from the original item
 710   * if equal. If all values match, the original item is returned.
 711   *
 712   * @param {Object} item     Original item.
 713   * @param {Object} nextItem Next item.
 714   *
 715   * @return {Object} Minimally modified merged item.
 716   */
 717  
 718  function conservativeMapItem(item, nextItem) {
 719    // Return next item in its entirety if there is no original item.
 720    if (!item) {
 721      return nextItem;
 722    }
 723  
 724    let hasChanges = false;
 725    const result = {};
 726  
 727    for (const key in nextItem) {
 728      if (Object(external_lodash_["isEqual"])(item[key], nextItem[key])) {
 729        result[key] = item[key];
 730      } else {
 731        hasChanges = true;
 732        result[key] = nextItem[key];
 733      }
 734    }
 735  
 736    if (!hasChanges) {
 737      return item;
 738    } // Only at this point, backfill properties from the original item which
 739    // weren't explicitly set into the result above. This is an optimization
 740    // to allow `hasChanges` to return early.
 741  
 742  
 743    for (const key in item) {
 744      if (!result.hasOwnProperty(key)) {
 745        result[key] = item[key];
 746      }
 747    }
 748  
 749    return result;
 750  }
 751  
 752  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/utils/on-sub-key.js
 753  /**
 754   * Higher-order reducer creator which creates a combined reducer object, keyed
 755   * by a property on the action object.
 756   *
 757   * @param {string} actionProperty Action property by which to key object.
 758   *
 759   * @return {Function} Higher-order reducer.
 760   */
 761  const onSubKey = actionProperty => reducer => (state = {}, action) => {
 762    // Retrieve subkey from action. Do not track if undefined; useful for cases
 763    // where reducer is scoped by action shape.
 764    const key = action[actionProperty];
 765  
 766    if (key === undefined) {
 767      return state;
 768    } // Avoid updating state if unchanged. Note that this also accounts for a
 769    // reducer which returns undefined on a key which is not yet tracked.
 770  
 771  
 772    const nextKeyState = reducer(state[key], action);
 773  
 774    if (nextKeyState === state[key]) {
 775      return state;
 776    }
 777  
 778    return { ...state,
 779      [key]: nextKeyState
 780    };
 781  };
 782  /* harmony default export */ var on_sub_key = (onSubKey);
 783  
 784  // EXTERNAL MODULE: external ["wp","i18n"]
 785  var external_wp_i18n_ = __webpack_require__("l3Sj");
 786  
 787  // EXTERNAL MODULE: ./node_modules/uuid/dist/esm-browser/v4.js + 4 modules
 788  var v4 = __webpack_require__("7Cbv");
 789  
 790  // EXTERNAL MODULE: external ["wp","url"]
 791  var external_wp_url_ = __webpack_require__("Mmq9");
 792  
 793  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/queried-data/actions.js
 794  /**
 795   * External dependencies
 796   */
 797  
 798  /**
 799   * Returns an action object used in signalling that items have been received.
 800   *
 801   * @param {Array}   items Items received.
 802   * @param {?Object} edits Optional edits to reset.
 803   *
 804   * @return {Object} Action object.
 805   */
 806  
 807  function receiveItems(items, edits) {
 808    return {
 809      type: 'RECEIVE_ITEMS',
 810      items: Object(external_lodash_["castArray"])(items),
 811      persistedEdits: edits
 812    };
 813  }
 814  /**
 815   * Returns an action object used in signalling that entity records have been
 816   * deleted and they need to be removed from entities state.
 817   *
 818   * @param {string}       kind             Kind of the removed entities.
 819   * @param {string}       name             Name of the removed entities.
 820   * @param {Array|number} records          Record IDs of the removed entities.
 821   * @param {boolean}      invalidateCache  Controls whether we want to invalidate the cache.
 822   * @return {Object} Action object.
 823   */
 824  
 825  function removeItems(kind, name, records, invalidateCache = false) {
 826    return {
 827      type: 'REMOVE_ITEMS',
 828      itemIds: Object(external_lodash_["castArray"])(records),
 829      kind,
 830      name,
 831      invalidateCache
 832    };
 833  }
 834  /**
 835   * Returns an action object used in signalling that queried data has been
 836   * received.
 837   *
 838   * @param {Array}   items Queried items received.
 839   * @param {?Object} query Optional query object.
 840   * @param {?Object} edits Optional edits to reset.
 841   *
 842   * @return {Object} Action object.
 843   */
 844  
 845  function receiveQueriedItems(items, query = {}, edits) {
 846    return { ...receiveItems(items, edits),
 847      query
 848    };
 849  }
 850  
 851  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/locks/actions.js
 852  /**
 853   * WordPress dependencies
 854   */
 855  
 856  
 857  function* __unstableAcquireStoreLock(store, path, {
 858    exclusive
 859  }) {
 860    const promise = yield* __unstableEnqueueLockRequest(store, path, {
 861      exclusive
 862    });
 863    yield* __unstableProcessPendingLockRequests();
 864    return yield Object(external_wp_dataControls_["__unstableAwaitPromise"])(promise);
 865  }
 866  function* __unstableEnqueueLockRequest(store, path, {
 867    exclusive
 868  }) {
 869    let notifyAcquired;
 870    const promise = new Promise(resolve => {
 871      notifyAcquired = resolve;
 872    });
 873    yield {
 874      type: 'ENQUEUE_LOCK_REQUEST',
 875      request: {
 876        store,
 877        path,
 878        exclusive,
 879        notifyAcquired
 880      }
 881    };
 882    return promise;
 883  }
 884  function* __unstableReleaseStoreLock(lock) {
 885    yield {
 886      type: 'RELEASE_LOCK',
 887      lock
 888    };
 889    yield* __unstableProcessPendingLockRequests();
 890  }
 891  function* __unstableProcessPendingLockRequests() {
 892    yield {
 893      type: 'PROCESS_PENDING_LOCK_REQUESTS'
 894    };
 895    const lockRequests = yield external_wp_data_["controls"].select('core', '__unstableGetPendingLockRequests');
 896  
 897    for (const request of lockRequests) {
 898      const {
 899        store,
 900        path,
 901        exclusive,
 902        notifyAcquired
 903      } = request;
 904      const isAvailable = yield external_wp_data_["controls"].select('core', '__unstableIsLockAvailable', store, path, {
 905        exclusive
 906      });
 907  
 908      if (isAvailable) {
 909        const lock = {
 910          store,
 911          path,
 912          exclusive
 913        };
 914        yield {
 915          type: 'GRANT_LOCK_REQUEST',
 916          lock,
 917          request
 918        };
 919        notifyAcquired(lock);
 920      }
 921    }
 922  }
 923  
 924  // EXTERNAL MODULE: external ["wp","apiFetch"]
 925  var external_wp_apiFetch_ = __webpack_require__("ywyh");
 926  var external_wp_apiFetch_default = /*#__PURE__*/__webpack_require__.n(external_wp_apiFetch_);
 927  
 928  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/batch/default-processor.js
 929  /**
 930   * External dependencies
 931   */
 932  
 933  /**
 934   * WordPress dependencies
 935   */
 936  
 937  
 938  /**
 939   * Maximum number of requests to place in a single batch request. Obtained by
 940   * sending a preflight OPTIONS request to /batch/v1/.
 941   *
 942   * @type {number?}
 943   */
 944  
 945  let maxItems = null;
 946  /**
 947   * Default batch processor. Sends its input requests to /batch/v1.
 948   *
 949   * @param {Array} requests List of API requests to perform at once.
 950   *
 951   * @return {Promise} Promise that resolves to a list of objects containing
 952   *                   either `output` (if that request was succesful) or `error`
 953   *                   (if not ).
 954   */
 955  
 956  async function defaultProcessor(requests) {
 957    if (maxItems === null) {
 958      const preflightResponse = await external_wp_apiFetch_default()({
 959        path: '/batch/v1',
 960        method: 'OPTIONS'
 961      });
 962      maxItems = preflightResponse.endpoints[0].args.requests.maxItems;
 963    }
 964  
 965    const results = [];
 966  
 967    for (const batchRequests of Object(external_lodash_["chunk"])(requests, maxItems)) {
 968      const batchResponse = await external_wp_apiFetch_default()({
 969        path: '/batch/v1',
 970        method: 'POST',
 971        data: {
 972          validation: 'require-all-validate',
 973          requests: batchRequests.map(request => ({
 974            path: request.path,
 975            body: request.data,
 976            // Rename 'data' to 'body'.
 977            method: request.method,
 978            headers: request.headers
 979          }))
 980        }
 981      });
 982      let batchResults;
 983  
 984      if (batchResponse.failed) {
 985        batchResults = batchResponse.responses.map(response => ({
 986          error: response === null || response === void 0 ? void 0 : response.body
 987        }));
 988      } else {
 989        batchResults = batchResponse.responses.map(response => {
 990          const result = {};
 991  
 992          if (response.status >= 200 && response.status < 300) {
 993            result.output = response.body;
 994          } else {
 995            result.error = response.body;
 996          }
 997  
 998          return result;
 999        });
1000      }
1001  
1002      results.push(...batchResults);
1003    }
1004  
1005    return results;
1006  }
1007  
1008  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/batch/create-batch.js
1009  /**
1010   * External dependencies
1011   */
1012  
1013  /**
1014   * Internal dependencies
1015   */
1016  
1017  
1018  /**
1019   * Creates a batch, which can be used to combine multiple API requests into one
1020   * API request using the WordPress batch processing API (/v1/batch).
1021   *
1022   * ```
1023   * const batch = createBatch();
1024   * const dunePromise = batch.add( {
1025   *   path: '/v1/books',
1026   *   method: 'POST',
1027   *   data: { title: 'Dune' }
1028   * } );
1029   * const lotrPromise = batch.add( {
1030   *   path: '/v1/books',
1031   *   method: 'POST',
1032   *   data: { title: 'Lord of the Rings' }
1033   * } );
1034   * const isSuccess = await batch.run(); // Sends one POST to /v1/batch.
1035   * if ( isSuccess ) {
1036   *   console.log(
1037   *     'Saved two books:',
1038   *     await dunePromise,
1039   *     await lotrPromise
1040   *   );
1041   * }
1042   * ```
1043   *
1044   * @param {Function} [processor] Processor function. Can be used to replace the
1045   *                               default functionality which is to send an API
1046   *                               request to /v1/batch. Is given an array of
1047   *                               inputs and must return a promise that
1048   *                               resolves to an array of objects containing
1049   *                               either `output` or `error`.
1050   */
1051  
1052  function createBatch(processor = defaultProcessor) {
1053    let lastId = 0;
1054    let queue = [];
1055    const pending = new ObservableSet();
1056    return {
1057      /**
1058       * Adds an input to the batch and returns a promise that is resolved or
1059       * rejected when the input is processed by `batch.run()`.
1060       *
1061       * You may also pass a thunk which allows inputs to be added
1062       * asychronously.
1063       *
1064       * ```
1065       * // Both are allowed:
1066       * batch.add( { path: '/v1/books', ... } );
1067       * batch.add( ( add ) => add( { path: '/v1/books', ... } ) );
1068       * ```
1069       *
1070       * If a thunk is passed, `batch.run()` will pause until either:
1071       *
1072       * - The thunk calls its `add` argument, or;
1073       * - The thunk returns a promise and that promise resolves, or;
1074       * - The thunk returns a non-promise.
1075       *
1076       * @param {any|Function} inputOrThunk Input to add or thunk to execute.
1077       
1078       * @return {Promise|any} If given an input, returns a promise that
1079       *                       is resolved or rejected when the batch is
1080       *                       processed. If given a thunk, returns the return
1081       *                       value of that thunk.
1082       */
1083      add(inputOrThunk) {
1084        const id = ++lastId;
1085        pending.add(id);
1086  
1087        const add = input => new Promise((resolve, reject) => {
1088          queue.push({
1089            input,
1090            resolve,
1091            reject
1092          });
1093          pending.delete(id);
1094        });
1095  
1096        if (Object(external_lodash_["isFunction"])(inputOrThunk)) {
1097          return Promise.resolve(inputOrThunk(add)).finally(() => {
1098            pending.delete(id);
1099          });
1100        }
1101  
1102        return add(inputOrThunk);
1103      },
1104  
1105      /**
1106       * Runs the batch. This calls `batchProcessor` and resolves or rejects
1107       * all promises returned by `add()`.
1108       *
1109       * @return {Promise} A promise that resolves to a boolean that is true
1110       *                   if the processor returned no errors.
1111       */
1112      async run() {
1113        if (pending.size) {
1114          await new Promise(resolve => {
1115            const unsubscribe = pending.subscribe(() => {
1116              if (!pending.size) {
1117                unsubscribe();
1118                resolve();
1119              }
1120            });
1121          });
1122        }
1123  
1124        let results;
1125  
1126        try {
1127          results = await processor(queue.map(({
1128            input
1129          }) => input));
1130  
1131          if (results.length !== queue.length) {
1132            throw new Error('run: Array returned by processor must be same size as input array.');
1133          }
1134        } catch (error) {
1135          for (const {
1136            reject
1137          } of queue) {
1138            reject(error);
1139          }
1140  
1141          throw error;
1142        }
1143  
1144        let isSuccess = true;
1145  
1146        for (const [result, {
1147          resolve,
1148          reject
1149        }] of Object(external_lodash_["zip"])(results, queue)) {
1150          if (result !== null && result !== void 0 && result.error) {
1151            reject(result.error);
1152            isSuccess = false;
1153          } else {
1154            var _result$output;
1155  
1156            resolve((_result$output = result === null || result === void 0 ? void 0 : result.output) !== null && _result$output !== void 0 ? _result$output : result);
1157          }
1158        }
1159  
1160        queue = [];
1161        return isSuccess;
1162      }
1163  
1164    };
1165  }
1166  
1167  class ObservableSet {
1168    constructor(...args) {
1169      this.set = new Set(...args);
1170      this.subscribers = new Set();
1171    }
1172  
1173    get size() {
1174      return this.set.size;
1175    }
1176  
1177    add(...args) {
1178      this.set.add(...args);
1179      this.subscribers.forEach(subscriber => subscriber());
1180      return this;
1181    }
1182  
1183    delete(...args) {
1184      const isSuccess = this.set.delete(...args);
1185      this.subscribers.forEach(subscriber => subscriber());
1186      return isSuccess;
1187    }
1188  
1189    subscribe(subscriber) {
1190      this.subscribers.add(subscriber);
1191      return () => {
1192        this.subscribers.delete(subscriber);
1193      };
1194    }
1195  
1196  }
1197  
1198  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/controls.js
1199  /**
1200   * WordPress dependencies
1201   */
1202  
1203  function regularFetch(url) {
1204    return {
1205      type: 'REGULAR_FETCH',
1206      url
1207    };
1208  }
1209  function getDispatch() {
1210    return {
1211      type: 'GET_DISPATCH'
1212    };
1213  }
1214  const controls = {
1215    async REGULAR_FETCH({
1216      url
1217    }) {
1218      const {
1219        data
1220      } = await window.fetch(url).then(res => res.json());
1221      return data;
1222    },
1223  
1224    GET_DISPATCH: Object(external_wp_data_["createRegistryControl"])(({
1225      dispatch
1226    }) => () => dispatch)
1227  };
1228  /* harmony default export */ var build_module_controls = (controls);
1229  
1230  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/actions.js
1231  /**
1232   * External dependencies
1233   */
1234  
1235  
1236  /**
1237   * WordPress dependencies
1238   */
1239  
1240  
1241  
1242  
1243  /**
1244   * Internal dependencies
1245   */
1246  
1247  
1248  
1249  
1250  
1251  
1252  /**
1253   * Returns an action object used in signalling that authors have been received.
1254   *
1255   * @param {string}       queryID Query ID.
1256   * @param {Array|Object} users   Users received.
1257   *
1258   * @return {Object} Action object.
1259   */
1260  
1261  function receiveUserQuery(queryID, users) {
1262    return {
1263      type: 'RECEIVE_USER_QUERY',
1264      users: Object(external_lodash_["castArray"])(users),
1265      queryID
1266    };
1267  }
1268  /**
1269   * Returns an action used in signalling that the current user has been received.
1270   *
1271   * @param {Object} currentUser Current user object.
1272   *
1273   * @return {Object} Action object.
1274   */
1275  
1276  function receiveCurrentUser(currentUser) {
1277    return {
1278      type: 'RECEIVE_CURRENT_USER',
1279      currentUser
1280    };
1281  }
1282  /**
1283   * Returns an action object used in adding new entities.
1284   *
1285   * @param {Array} entities  Entities received.
1286   *
1287   * @return {Object} Action object.
1288   */
1289  
1290  function addEntities(entities) {
1291    return {
1292      type: 'ADD_ENTITIES',
1293      entities
1294    };
1295  }
1296  /**
1297   * Returns an action object used in signalling that entity records have been received.
1298   *
1299   * @param {string}       kind            Kind of the received entity.
1300   * @param {string}       name            Name of the received entity.
1301   * @param {Array|Object} records         Records received.
1302   * @param {?Object}      query           Query Object.
1303   * @param {?boolean}     invalidateCache Should invalidate query caches.
1304   * @param {?Object}      edits           Edits to reset.
1305   * @return {Object} Action object.
1306   */
1307  
1308  function receiveEntityRecords(kind, name, records, query, invalidateCache = false, edits) {
1309    // Auto drafts should not have titles, but some plugins rely on them so we can't filter this
1310    // on the server.
1311    if (kind === 'postType') {
1312      records = Object(external_lodash_["castArray"])(records).map(record => record.status === 'auto-draft' ? { ...record,
1313        title: ''
1314      } : record);
1315    }
1316  
1317    let action;
1318  
1319    if (query) {
1320      action = receiveQueriedItems(records, query, edits);
1321    } else {
1322      action = receiveItems(records, edits);
1323    }
1324  
1325    return { ...action,
1326      kind,
1327      name,
1328      invalidateCache
1329    };
1330  }
1331  /**
1332   * Returns an action object used in signalling that the current theme has been received.
1333   *
1334   * @param {Object} currentTheme The current theme.
1335   *
1336   * @return {Object} Action object.
1337   */
1338  
1339  function receiveCurrentTheme(currentTheme) {
1340    return {
1341      type: 'RECEIVE_CURRENT_THEME',
1342      currentTheme
1343    };
1344  }
1345  /**
1346   * Returns an action object used in signalling that the index has been received.
1347   *
1348   * @param {Object} themeSupports Theme support for the current theme.
1349   *
1350   * @return {Object} Action object.
1351   */
1352  
1353  function receiveThemeSupports(themeSupports) {
1354    return {
1355      type: 'RECEIVE_THEME_SUPPORTS',
1356      themeSupports
1357    };
1358  }
1359  /**
1360   * Returns an action object used in signalling that the preview data for
1361   * a given URl has been received.
1362   *
1363   * @param {string}  url     URL to preview the embed for.
1364   * @param {*}       preview Preview data.
1365   *
1366   * @return {Object} Action object.
1367   */
1368  
1369  function receiveEmbedPreview(url, preview) {
1370    return {
1371      type: 'RECEIVE_EMBED_PREVIEW',
1372      url,
1373      preview
1374    };
1375  }
1376  /**
1377   * Action triggered to delete an entity record.
1378   *
1379   * @param {string}   kind                      Kind of the deleted entity.
1380   * @param {string}   name                      Name of the deleted entity.
1381   * @param {string}   recordId                  Record ID of the deleted entity.
1382   * @param {?Object}  query                     Special query parameters for the
1383   *                                             DELETE API call.
1384   * @param {Object}   [options]                 Delete options.
1385   * @param {Function} [options.__unstableFetch] Internal use only. Function to
1386   *                                             call instead of `apiFetch()`.
1387   *                                             Must return a control descriptor.
1388   */
1389  
1390  function* deleteEntityRecord(kind, name, recordId, query, {
1391    __unstableFetch = null
1392  } = {}) {
1393    const entities = yield getKindEntities(kind);
1394    const entity = Object(external_lodash_["find"])(entities, {
1395      kind,
1396      name
1397    });
1398    let error;
1399    let deletedRecord = false;
1400  
1401    if (!entity) {
1402      return;
1403    }
1404  
1405    const lock = yield* __unstableAcquireStoreLock('core', ['entities', 'data', kind, name, recordId], {
1406      exclusive: true
1407    });
1408  
1409    try {
1410      yield {
1411        type: 'DELETE_ENTITY_RECORD_START',
1412        kind,
1413        name,
1414        recordId
1415      };
1416  
1417      try {
1418        let path = `$entity.baseURL}/$recordId}`;
1419  
1420        if (query) {
1421          path = Object(external_wp_url_["addQueryArgs"])(path, query);
1422        }
1423  
1424        const options = {
1425          path,
1426          method: 'DELETE'
1427        };
1428  
1429        if (__unstableFetch) {
1430          deletedRecord = yield Object(external_wp_dataControls_["__unstableAwaitPromise"])(__unstableFetch(options));
1431        } else {
1432          deletedRecord = yield Object(external_wp_dataControls_["apiFetch"])(options);
1433        }
1434  
1435        yield removeItems(kind, name, recordId, true);
1436      } catch (_error) {
1437        error = _error;
1438      }
1439  
1440      yield {
1441        type: 'DELETE_ENTITY_RECORD_FINISH',
1442        kind,
1443        name,
1444        recordId,
1445        error
1446      };
1447      return deletedRecord;
1448    } finally {
1449      yield* __unstableReleaseStoreLock(lock);
1450    }
1451  }
1452  /**
1453   * Returns an action object that triggers an
1454   * edit to an entity record.
1455   *
1456   * @param {string} kind     Kind of the edited entity record.
1457   * @param {string} name     Name of the edited entity record.
1458   * @param {number} recordId Record ID of the edited entity record.
1459   * @param {Object} edits    The edits.
1460   * @param {Object} options  Options for the edit.
1461   * @param {boolean} options.undoIgnore Whether to ignore the edit in undo history or not.
1462   *
1463   * @return {Object} Action object.
1464   */
1465  
1466  function* actions_editEntityRecord(kind, name, recordId, edits, options = {}) {
1467    const entity = yield external_wp_data_["controls"].select('core', 'getEntity', kind, name);
1468  
1469    if (!entity) {
1470      throw new Error(`The entity being edited ($kind}, $name}) does not have a loaded config.`);
1471    }
1472  
1473    const {
1474      transientEdits = {},
1475      mergedEdits = {}
1476    } = entity;
1477    const record = yield external_wp_data_["controls"].select('core', 'getRawEntityRecord', kind, name, recordId);
1478    const editedRecord = yield external_wp_data_["controls"].select('core', 'getEditedEntityRecord', kind, name, recordId);
1479    const edit = {
1480      kind,
1481      name,
1482      recordId,
1483      // Clear edits when they are equal to their persisted counterparts
1484      // so that the property is not considered dirty.
1485      edits: Object.keys(edits).reduce((acc, key) => {
1486        const recordValue = record[key];
1487        const editedRecordValue = editedRecord[key];
1488        const value = mergedEdits[key] ? { ...editedRecordValue,
1489          ...edits[key]
1490        } : edits[key];
1491        acc[key] = Object(external_lodash_["isEqual"])(recordValue, value) ? undefined : value;
1492        return acc;
1493      }, {}),
1494      transientEdits
1495    };
1496    return {
1497      type: 'EDIT_ENTITY_RECORD',
1498      ...edit,
1499      meta: {
1500        undo: !options.undoIgnore && { ...edit,
1501          // Send the current values for things like the first undo stack entry.
1502          edits: Object.keys(edits).reduce((acc, key) => {
1503            acc[key] = editedRecord[key];
1504            return acc;
1505          }, {})
1506        }
1507      }
1508    };
1509  }
1510  /**
1511   * Action triggered to undo the last edit to
1512   * an entity record, if any.
1513   */
1514  
1515  function* undo() {
1516    const undoEdit = yield external_wp_data_["controls"].select('core', 'getUndoEdit');
1517  
1518    if (!undoEdit) {
1519      return;
1520    }
1521  
1522    yield {
1523      type: 'EDIT_ENTITY_RECORD',
1524      ...undoEdit,
1525      meta: {
1526        isUndo: true
1527      }
1528    };
1529  }
1530  /**
1531   * Action triggered to redo the last undoed
1532   * edit to an entity record, if any.
1533   */
1534  
1535  function* redo() {
1536    const redoEdit = yield external_wp_data_["controls"].select('core', 'getRedoEdit');
1537  
1538    if (!redoEdit) {
1539      return;
1540    }
1541  
1542    yield {
1543      type: 'EDIT_ENTITY_RECORD',
1544      ...redoEdit,
1545      meta: {
1546        isRedo: true
1547      }
1548    };
1549  }
1550  /**
1551   * Forces the creation of a new undo level.
1552   *
1553   * @return {Object} Action object.
1554   */
1555  
1556  function actions_unstableCreateUndoLevel() {
1557    return {
1558      type: 'CREATE_UNDO_LEVEL'
1559    };
1560  }
1561  /**
1562   * Action triggered to save an entity record.
1563   *
1564   * @param {string}   kind                       Kind of the received entity.
1565   * @param {string}   name                       Name of the received entity.
1566   * @param {Object}   record                     Record to be saved.
1567   * @param {Object}   options                    Saving options.
1568   * @param {boolean}  [options.isAutosave=false] Whether this is an autosave.
1569   * @param {Function} [options.__unstableFetch]  Internal use only. Function to
1570   *                                              call instead of `apiFetch()`.
1571   *                                              Must return a control
1572   *                                              descriptor.
1573   */
1574  
1575  function* saveEntityRecord(kind, name, record, {
1576    isAutosave = false,
1577    __unstableFetch = null
1578  } = {}) {
1579    const entities = yield getKindEntities(kind);
1580    const entity = Object(external_lodash_["find"])(entities, {
1581      kind,
1582      name
1583    });
1584  
1585    if (!entity) {
1586      return;
1587    }
1588  
1589    const entityIdKey = entity.key || DEFAULT_ENTITY_KEY;
1590    const recordId = record[entityIdKey];
1591    const lock = yield* __unstableAcquireStoreLock('core', ['entities', 'data', kind, name, recordId || Object(v4["a" /* default */])()], {
1592      exclusive: true
1593    });
1594  
1595    try {
1596      // Evaluate optimized edits.
1597      // (Function edits that should be evaluated on save to avoid expensive computations on every edit.)
1598      for (const [key, value] of Object.entries(record)) {
1599        if (typeof value === 'function') {
1600          const evaluatedValue = value(yield external_wp_data_["controls"].select('core', 'getEditedEntityRecord', kind, name, recordId));
1601          yield actions_editEntityRecord(kind, name, recordId, {
1602            [key]: evaluatedValue
1603          }, {
1604            undoIgnore: true
1605          });
1606          record[key] = evaluatedValue;
1607        }
1608      }
1609  
1610      yield {
1611        type: 'SAVE_ENTITY_RECORD_START',
1612        kind,
1613        name,
1614        recordId,
1615        isAutosave
1616      };
1617      let updatedRecord;
1618      let error;
1619  
1620      try {
1621        const path = `$entity.baseURL}$recordId ? '/' + recordId : ''}`;
1622        const persistedRecord = yield external_wp_data_["controls"].select('core', 'getRawEntityRecord', kind, name, recordId);
1623  
1624        if (isAutosave) {
1625          // Most of this autosave logic is very specific to posts.
1626          // This is fine for now as it is the only supported autosave,
1627          // but ideally this should all be handled in the back end,
1628          // so the client just sends and receives objects.
1629          const currentUser = yield external_wp_data_["controls"].select('core', 'getCurrentUser');
1630          const currentUserId = currentUser ? currentUser.id : undefined;
1631          const autosavePost = yield external_wp_data_["controls"].select('core', 'getAutosave', persistedRecord.type, persistedRecord.id, currentUserId); // Autosaves need all expected fields to be present.
1632          // So we fallback to the previous autosave and then
1633          // to the actual persisted entity if the edits don't
1634          // have a value.
1635  
1636          let data = { ...persistedRecord,
1637            ...autosavePost,
1638            ...record
1639          };
1640          data = Object.keys(data).reduce((acc, key) => {
1641            if (['title', 'excerpt', 'content'].includes(key)) {
1642              // Edits should be the "raw" attribute values.
1643              acc[key] = Object(external_lodash_["get"])(data[key], 'raw', data[key]);
1644            }
1645  
1646            return acc;
1647          }, {
1648            status: data.status === 'auto-draft' ? 'draft' : data.status
1649          });
1650          const options = {
1651            path: `$path}/autosaves`,
1652            method: 'POST',
1653            data
1654          };
1655  
1656          if (__unstableFetch) {
1657            updatedRecord = yield Object(external_wp_dataControls_["__unstableAwaitPromise"])(__unstableFetch(options));
1658          } else {
1659            updatedRecord = yield Object(external_wp_dataControls_["apiFetch"])(options);
1660          } // An autosave may be processed by the server as a regular save
1661          // when its update is requested by the author and the post had
1662          // draft or auto-draft status.
1663  
1664  
1665          if (persistedRecord.id === updatedRecord.id) {
1666            let newRecord = { ...persistedRecord,
1667              ...data,
1668              ...updatedRecord
1669            };
1670            newRecord = Object.keys(newRecord).reduce((acc, key) => {
1671              // These properties are persisted in autosaves.
1672              if (['title', 'excerpt', 'content'].includes(key)) {
1673                // Edits should be the "raw" attribute values.
1674                acc[key] = Object(external_lodash_["get"])(newRecord[key], 'raw', newRecord[key]);
1675              } else if (key === 'status') {
1676                // Status is only persisted in autosaves when going from
1677                // "auto-draft" to "draft".
1678                acc[key] = persistedRecord.status === 'auto-draft' && newRecord.status === 'draft' ? newRecord.status : persistedRecord.status;
1679              } else {
1680                // These properties are not persisted in autosaves.
1681                acc[key] = Object(external_lodash_["get"])(persistedRecord[key], 'raw', persistedRecord[key]);
1682              }
1683  
1684              return acc;
1685            }, {});
1686            yield receiveEntityRecords(kind, name, newRecord, undefined, true);
1687          } else {
1688            yield receiveAutosaves(persistedRecord.id, updatedRecord);
1689          }
1690        } else {
1691          let edits = record;
1692  
1693          if (entity.__unstablePrePersist) {
1694            edits = { ...edits,
1695              ...entity.__unstablePrePersist(persistedRecord, edits)
1696            };
1697          }
1698  
1699          const options = {
1700            path,
1701            method: recordId ? 'PUT' : 'POST',
1702            data: edits
1703          };
1704  
1705          if (__unstableFetch) {
1706            updatedRecord = yield Object(external_wp_dataControls_["__unstableAwaitPromise"])(__unstableFetch(options));
1707          } else {
1708            updatedRecord = yield Object(external_wp_dataControls_["apiFetch"])(options);
1709          }
1710  
1711          yield receiveEntityRecords(kind, name, updatedRecord, undefined, true, edits);
1712        }
1713      } catch (_error) {
1714        error = _error;
1715      }
1716  
1717      yield {
1718        type: 'SAVE_ENTITY_RECORD_FINISH',
1719        kind,
1720        name,
1721        recordId,
1722        error,
1723        isAutosave
1724      };
1725      return updatedRecord;
1726    } finally {
1727      yield* __unstableReleaseStoreLock(lock);
1728    }
1729  }
1730  /**
1731   * Runs multiple core-data actions at the same time using one API request.
1732   *
1733   * Example:
1734   *
1735   * ```
1736   * const [ savedRecord, updatedRecord, deletedRecord ] =
1737   *   await dispatch( 'core' ).__experimentalBatch( [
1738   *     ( { saveEntityRecord } ) => saveEntityRecord( 'root', 'widget', widget ),
1739   *     ( { saveEditedEntityRecord } ) => saveEntityRecord( 'root', 'widget', 123 ),
1740   *     ( { deleteEntityRecord } ) => deleteEntityRecord( 'root', 'widget', 123, null ),
1741   *   ] );
1742   * ```
1743   *
1744   * @param {Array} requests Array of functions which are invoked simultaneously.
1745   *                         Each function is passed an object containing
1746   *                         `saveEntityRecord`, `saveEditedEntityRecord`, and
1747   *                         `deleteEntityRecord`.
1748   *
1749   * @return {Promise} A promise that resolves to an array containing the return
1750   *                   values of each function given in `requests`.
1751   */
1752  
1753  function* __experimentalBatch(requests) {
1754    const batch = createBatch();
1755    const dispatch = yield getDispatch();
1756    const api = {
1757      saveEntityRecord(kind, name, record, options) {
1758        return batch.add(add => dispatch('core').saveEntityRecord(kind, name, record, { ...options,
1759          __unstableFetch: add
1760        }));
1761      },
1762  
1763      saveEditedEntityRecord(kind, name, recordId, options) {
1764        return batch.add(add => dispatch('core').saveEditedEntityRecord(kind, name, recordId, { ...options,
1765          __unstableFetch: add
1766        }));
1767      },
1768  
1769      deleteEntityRecord(kind, name, recordId, query, options) {
1770        return batch.add(add => dispatch('core').deleteEntityRecord(kind, name, recordId, query, { ...options,
1771          __unstableFetch: add
1772        }));
1773      }
1774  
1775    };
1776    const resultPromises = requests.map(request => request(api));
1777    const [, ...results] = yield Object(external_wp_dataControls_["__unstableAwaitPromise"])(Promise.all([batch.run(), ...resultPromises]));
1778    return results;
1779  }
1780  /**
1781   * Action triggered to save an entity record's edits.
1782   *
1783   * @param {string} kind     Kind of the entity.
1784   * @param {string} name     Name of the entity.
1785   * @param {Object} recordId ID of the record.
1786   * @param {Object} options  Saving options.
1787   */
1788  
1789  function* saveEditedEntityRecord(kind, name, recordId, options) {
1790    if (!(yield external_wp_data_["controls"].select('core', 'hasEditsForEntityRecord', kind, name, recordId))) {
1791      return;
1792    }
1793  
1794    const edits = yield external_wp_data_["controls"].select('core', 'getEntityRecordNonTransientEdits', kind, name, recordId);
1795    const record = {
1796      id: recordId,
1797      ...edits
1798    };
1799    return yield* saveEntityRecord(kind, name, record, options);
1800  }
1801  /**
1802   * Action triggered to save only specified properties for the entity.
1803   *
1804   * @param {string} kind     Kind of the entity.
1805   * @param {string} name     Name of the entity.
1806   * @param {Object} recordId ID of the record.
1807   * @param {Array} itemsToSave List of entity properties to save.
1808   * @param {Object} options  Saving options.
1809   */
1810  
1811  function* __experimentalSaveSpecifiedEntityEdits(kind, name, recordId, itemsToSave, options) {
1812    if (!(yield external_wp_data_["controls"].select('core', 'hasEditsForEntityRecord', kind, name, recordId))) {
1813      return;
1814    }
1815  
1816    const edits = yield external_wp_data_["controls"].select('core', 'getEntityRecordNonTransientEdits', kind, name, recordId);
1817    const editsToSave = {};
1818  
1819    for (const edit in edits) {
1820      if (itemsToSave.some(item => item === edit)) {
1821        editsToSave[edit] = edits[edit];
1822      }
1823    }
1824  
1825    return yield* saveEntityRecord(kind, name, editsToSave, options);
1826  }
1827  /**
1828   * Returns an action object used in signalling that Upload permissions have been received.
1829   *
1830   * @param {boolean} hasUploadPermissions Does the user have permission to upload files?
1831   *
1832   * @return {Object} Action object.
1833   */
1834  
1835  function receiveUploadPermissions(hasUploadPermissions) {
1836    return {
1837      type: 'RECEIVE_USER_PERMISSION',
1838      key: 'create/media',
1839      isAllowed: hasUploadPermissions
1840    };
1841  }
1842  /**
1843   * Returns an action object used in signalling that the current user has
1844   * permission to perform an action on a REST resource.
1845   *
1846   * @param {string}  key       A key that represents the action and REST resource.
1847   * @param {boolean} isAllowed Whether or not the user can perform the action.
1848   *
1849   * @return {Object} Action object.
1850   */
1851  
1852  function receiveUserPermission(key, isAllowed) {
1853    return {
1854      type: 'RECEIVE_USER_PERMISSION',
1855      key,
1856      isAllowed
1857    };
1858  }
1859  /**
1860   * Returns an action object used in signalling that the autosaves for a
1861   * post have been received.
1862   *
1863   * @param {number}       postId    The id of the post that is parent to the autosave.
1864   * @param {Array|Object} autosaves An array of autosaves or singular autosave object.
1865   *
1866   * @return {Object} Action object.
1867   */
1868  
1869  function receiveAutosaves(postId, autosaves) {
1870    return {
1871      type: 'RECEIVE_AUTOSAVES',
1872      postId,
1873      autosaves: Object(external_lodash_["castArray"])(autosaves)
1874    };
1875  }
1876  
1877  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/entities.js
1878  /**
1879   * External dependencies
1880   */
1881  
1882  /**
1883   * WordPress dependencies
1884   */
1885  
1886  
1887  
1888  
1889  /**
1890   * Internal dependencies
1891   */
1892  
1893  
1894  const DEFAULT_ENTITY_KEY = 'id';
1895  const defaultEntities = [{
1896    label: Object(external_wp_i18n_["__"])('Base'),
1897    name: '__unstableBase',
1898    kind: 'root',
1899    baseURL: ''
1900  }, {
1901    label: Object(external_wp_i18n_["__"])('Site'),
1902    name: 'site',
1903    kind: 'root',
1904    baseURL: '/wp/v2/settings',
1905    getTitle: record => {
1906      return Object(external_lodash_["get"])(record, ['title'], Object(external_wp_i18n_["__"])('Site Title'));
1907    }
1908  }, {
1909    label: Object(external_wp_i18n_["__"])('Post Type'),
1910    name: 'postType',
1911    kind: 'root',
1912    key: 'slug',
1913    baseURL: '/wp/v2/types',
1914    baseURLParams: {
1915      context: 'edit'
1916    }
1917  }, {
1918    name: 'media',
1919    kind: 'root',
1920    baseURL: '/wp/v2/media',
1921    baseURLParams: {
1922      context: 'edit'
1923    },
1924    plural: 'mediaItems',
1925    label: Object(external_wp_i18n_["__"])('Media')
1926  }, {
1927    name: 'taxonomy',
1928    kind: 'root',
1929    key: 'slug',
1930    baseURL: '/wp/v2/taxonomies',
1931    baseURLParams: {
1932      context: 'edit'
1933    },
1934    plural: 'taxonomies',
1935    label: Object(external_wp_i18n_["__"])('Taxonomy')
1936  }, {
1937    name: 'sidebar',
1938    kind: 'root',
1939    baseURL: '/wp/v2/sidebars',
1940    plural: 'sidebars',
1941    transientEdits: {
1942      blocks: true
1943    },
1944    label: Object(external_wp_i18n_["__"])('Widget areas')
1945  }, {
1946    name: 'widget',
1947    kind: 'root',
1948    baseURL: '/wp/v2/widgets',
1949    baseURLParams: {
1950      context: 'edit'
1951    },
1952    plural: 'widgets',
1953    transientEdits: {
1954      blocks: true
1955    },
1956    label: Object(external_wp_i18n_["__"])('Widgets')
1957  }, {
1958    name: 'widgetType',
1959    kind: 'root',
1960    baseURL: '/wp/v2/widget-types',
1961    baseURLParams: {
1962      context: 'edit'
1963    },
1964    plural: 'widgetTypes',
1965    label: Object(external_wp_i18n_["__"])('Widget types')
1966  }, {
1967    label: Object(external_wp_i18n_["__"])('User'),
1968    name: 'user',
1969    kind: 'root',
1970    baseURL: '/wp/v2/users',
1971    baseURLParams: {
1972      context: 'edit'
1973    },
1974    plural: 'users'
1975  }, {
1976    name: 'comment',
1977    kind: 'root',
1978    baseURL: '/wp/v2/comments',
1979    baseURLParams: {
1980      context: 'edit'
1981    },
1982    plural: 'comments',
1983    label: Object(external_wp_i18n_["__"])('Comment')
1984  }, {
1985    name: 'menu',
1986    kind: 'root',
1987    baseURL: '/__experimental/menus',
1988    baseURLParams: {
1989      context: 'edit'
1990    },
1991    plural: 'menus',
1992    label: Object(external_wp_i18n_["__"])('Menu')
1993  }, {
1994    name: 'menuItem',
1995    kind: 'root',
1996    baseURL: '/__experimental/menu-items',
1997    baseURLParams: {
1998      context: 'edit'
1999    },
2000    plural: 'menuItems',
2001    label: Object(external_wp_i18n_["__"])('Menu Item')
2002  }, {
2003    name: 'menuLocation',
2004    kind: 'root',
2005    baseURL: '/__experimental/menu-locations',
2006    baseURLParams: {
2007      context: 'edit'
2008    },
2009    plural: 'menuLocations',
2010    label: Object(external_wp_i18n_["__"])('Menu Location'),
2011    key: 'name'
2012  }];
2013  const kinds = [{
2014    name: 'postType',
2015    loadEntities: loadPostTypeEntities
2016  }, {
2017    name: 'taxonomy',
2018    loadEntities: loadTaxonomyEntities
2019  }];
2020  /**
2021   * Returns a function to be used to retrieve extra edits to apply before persisting a post type.
2022   *
2023   * @param {Object} persistedRecord Already persisted Post
2024   * @param {Object} edits Edits.
2025   * @return {Object} Updated edits.
2026   */
2027  
2028  const prePersistPostType = (persistedRecord, edits) => {
2029    const newEdits = {};
2030  
2031    if ((persistedRecord === null || persistedRecord === void 0 ? void 0 : persistedRecord.status) === 'auto-draft') {
2032      // Saving an auto-draft should create a draft by default.
2033      if (!edits.status && !newEdits.status) {
2034        newEdits.status = 'draft';
2035      } // Fix the auto-draft default title.
2036  
2037  
2038      if ((!edits.title || edits.title === 'Auto Draft') && !newEdits.title && (!(persistedRecord !== null && persistedRecord !== void 0 && persistedRecord.title) || (persistedRecord === null || persistedRecord === void 0 ? void 0 : persistedRecord.title) === 'Auto Draft')) {
2039        newEdits.title = '';
2040      }
2041    }
2042  
2043    return newEdits;
2044  };
2045  /**
2046   * Returns the list of post type entities.
2047   *
2048   * @return {Promise} Entities promise
2049   */
2050  
2051  function* loadPostTypeEntities() {
2052    const postTypes = yield Object(external_wp_dataControls_["apiFetch"])({
2053      path: '/wp/v2/types?context=edit'
2054    });
2055    return Object(external_lodash_["map"])(postTypes, (postType, name) => {
2056      const isTemplate = ['wp_template', 'wp_template_part'].includes(name);
2057      return {
2058        kind: 'postType',
2059        baseURL: '/wp/v2/' + postType.rest_base,
2060        baseURLParams: {
2061          context: 'edit'
2062        },
2063        name,
2064        label: postType.labels.singular_name,
2065        transientEdits: {
2066          blocks: true,
2067          selection: true
2068        },
2069        mergedEdits: {
2070          meta: true
2071        },
2072        getTitle: record => {
2073          var _record$title;
2074  
2075          return (record === null || record === void 0 ? void 0 : (_record$title = record.title) === null || _record$title === void 0 ? void 0 : _record$title.rendered) || (record === null || record === void 0 ? void 0 : record.title) || (isTemplate ? Object(external_lodash_["startCase"])(record.slug) : String(record.id));
2076        },
2077        __unstablePrePersist: isTemplate ? undefined : prePersistPostType,
2078        __unstable_rest_base: postType.rest_base
2079      };
2080    });
2081  }
2082  /**
2083   * Returns the list of the taxonomies entities.
2084   *
2085   * @return {Promise} Entities promise
2086   */
2087  
2088  
2089  function* loadTaxonomyEntities() {
2090    const taxonomies = yield Object(external_wp_dataControls_["apiFetch"])({
2091      path: '/wp/v2/taxonomies?context=edit'
2092    });
2093    return Object(external_lodash_["map"])(taxonomies, (taxonomy, name) => {
2094      return {
2095        kind: 'taxonomy',
2096        baseURL: '/wp/v2/' + taxonomy.rest_base,
2097        baseURLParams: {
2098          context: 'edit'
2099        },
2100        name,
2101        label: taxonomy.labels.singular_name
2102      };
2103    });
2104  }
2105  /**
2106   * Returns the entity's getter method name given its kind and name.
2107   *
2108   * @param {string}  kind      Entity kind.
2109   * @param {string}  name      Entity name.
2110   * @param {string}  prefix    Function prefix.
2111   * @param {boolean} usePlural Whether to use the plural form or not.
2112   *
2113   * @return {string} Method name
2114   */
2115  
2116  
2117  const getMethodName = (kind, name, prefix = 'get', usePlural = false) => {
2118    const entity = Object(external_lodash_["find"])(defaultEntities, {
2119      kind,
2120      name
2121    });
2122    const kindPrefix = kind === 'root' ? '' : Object(external_lodash_["upperFirst"])(Object(external_lodash_["camelCase"])(kind));
2123    const nameSuffix = Object(external_lodash_["upperFirst"])(Object(external_lodash_["camelCase"])(name)) + (usePlural ? 's' : '');
2124    const suffix = usePlural && entity.plural ? Object(external_lodash_["upperFirst"])(Object(external_lodash_["camelCase"])(entity.plural)) : nameSuffix;
2125    return `$prefix}$kindPrefix}$suffix}`;
2126  };
2127  /**
2128   * Loads the kind entities into the store.
2129   *
2130   * @param {string} kind  Kind
2131   *
2132   * @return {Array} Entities
2133   */
2134  
2135  function* getKindEntities(kind) {
2136    let entities = yield external_wp_data_["controls"].select('core', 'getEntitiesByKind', kind);
2137  
2138    if (entities && entities.length !== 0) {
2139      return entities;
2140    }
2141  
2142    const kindConfig = Object(external_lodash_["find"])(kinds, {
2143      name: kind
2144    });
2145  
2146    if (!kindConfig) {
2147      return [];
2148    }
2149  
2150    entities = yield kindConfig.loadEntities();
2151    yield addEntities(entities);
2152    return entities;
2153  }
2154  
2155  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/utils/get-normalized-comma-separable.js
2156  /**
2157   * Given a value which can be specified as one or the other of a comma-separated
2158   * string or an array, returns a value normalized to an array of strings, or
2159   * null if the value cannot be interpreted as either.
2160   *
2161   * @param {string|string[]|*} value
2162   *
2163   * @return {?(string[])} Normalized field value.
2164   */
2165  function getNormalizedCommaSeparable(value) {
2166    if (typeof value === 'string') {
2167      return value.split(',');
2168    } else if (Array.isArray(value)) {
2169      return value;
2170    }
2171  
2172    return null;
2173  }
2174  
2175  /* harmony default export */ var get_normalized_comma_separable = (getNormalizedCommaSeparable);
2176  
2177  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/utils/with-weak-map-cache.js
2178  /**
2179   * External dependencies
2180   */
2181  
2182  /**
2183   * Given a function, returns an enhanced function which caches the result and
2184   * tracks in WeakMap. The result is only cached if the original function is
2185   * passed a valid object-like argument (requirement for WeakMap key).
2186   *
2187   * @param {Function} fn Original function.
2188   *
2189   * @return {Function} Enhanced caching function.
2190   */
2191  
2192  function withWeakMapCache(fn) {
2193    const cache = new WeakMap();
2194    return key => {
2195      let value;
2196  
2197      if (cache.has(key)) {
2198        value = cache.get(key);
2199      } else {
2200        value = fn(key); // Can reach here if key is not valid for WeakMap, since `has`
2201        // will return false for invalid key. Since `set` will throw,
2202        // ensure that key is valid before setting into cache.
2203  
2204        if (Object(external_lodash_["isObjectLike"])(key)) {
2205          cache.set(key, value);
2206        }
2207      }
2208  
2209      return value;
2210    };
2211  }
2212  
2213  /* harmony default export */ var with_weak_map_cache = (withWeakMapCache);
2214  
2215  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/queried-data/get-query-parts.js
2216  /**
2217   * WordPress dependencies
2218   */
2219  
2220  /**
2221   * Internal dependencies
2222   */
2223  
2224  
2225  /**
2226   * An object of properties describing a specific query.
2227   *
2228   * @typedef {Object} WPQueriedDataQueryParts
2229   *
2230   * @property {number}      page      The query page (1-based index, default 1).
2231   * @property {number}      perPage   Items per page for query (default 10).
2232   * @property {string}      stableKey An encoded stable string of all non-
2233   *                                   pagination, non-fields query parameters.
2234   * @property {?(string[])} fields    Target subset of fields to derive from
2235   *                                   item objects.
2236   * @property {?(number[])} include   Specific item IDs to include.
2237   */
2238  
2239  /**
2240   * Given a query object, returns an object of parts, including pagination
2241   * details (`page` and `perPage`, or default values). All other properties are
2242   * encoded into a stable (idempotent) `stableKey` value.
2243   *
2244   * @param {Object} query Optional query object.
2245   *
2246   * @return {WPQueriedDataQueryParts} Query parts.
2247   */
2248  
2249  function getQueryParts(query) {
2250    /**
2251     * @type {WPQueriedDataQueryParts}
2252     */
2253    const parts = {
2254      stableKey: '',
2255      page: 1,
2256      perPage: 10,
2257      fields: null,
2258      include: null,
2259      context: 'default'
2260    }; // Ensure stable key by sorting keys. Also more efficient for iterating.
2261  
2262    const keys = Object.keys(query).sort();
2263  
2264    for (let i = 0; i < keys.length; i++) {
2265      const key = keys[i];
2266      let value = query[key];
2267  
2268      switch (key) {
2269        case 'page':
2270          parts[key] = Number(value);
2271          break;
2272  
2273        case 'per_page':
2274          parts.perPage = Number(value);
2275          break;
2276  
2277        case 'include':
2278          parts.include = get_normalized_comma_separable(value).map(Number);
2279          break;
2280  
2281        case 'context':
2282          parts.context = value;
2283          break;
2284  
2285        default:
2286          // While in theory, we could exclude "_fields" from the stableKey
2287          // because two request with different fields have the same results
2288          // We're not able to ensure that because the server can decide to omit
2289          // fields from the response even if we explicitely asked for it.
2290          // Example: Asking for titles in posts without title support.
2291          if (key === '_fields') {
2292            parts.fields = get_normalized_comma_separable(value); // Make sure to normalize value for `stableKey`
2293  
2294            value = parts.fields.join();
2295          } // While it could be any deterministic string, for simplicity's
2296          // sake mimic querystring encoding for stable key.
2297          //
2298          // TODO: For consistency with PHP implementation, addQueryArgs
2299          // should accept a key value pair, which may optimize its
2300          // implementation for our use here, vs. iterating an object
2301          // with only a single key.
2302  
2303  
2304          parts.stableKey += (parts.stableKey ? '&' : '') + Object(external_wp_url_["addQueryArgs"])('', {
2305            [key]: value
2306          }).slice(1);
2307      }
2308    }
2309  
2310    return parts;
2311  }
2312  /* harmony default export */ var get_query_parts = (with_weak_map_cache(getQueryParts));
2313  
2314  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/queried-data/reducer.js
2315  /**
2316   * External dependencies
2317   */
2318  
2319  /**
2320   * WordPress dependencies
2321   */
2322  
2323  
2324  /**
2325   * Internal dependencies
2326   */
2327  
2328  
2329  
2330  
2331  
2332  function getContextFromAction(action) {
2333    const {
2334      query
2335    } = action;
2336  
2337    if (!query) {
2338      return 'default';
2339    }
2340  
2341    const queryParts = get_query_parts(query);
2342    return queryParts.context;
2343  }
2344  /**
2345   * Returns a merged array of item IDs, given details of the received paginated
2346   * items. The array is sparse-like with `undefined` entries where holes exist.
2347   *
2348   * @param {?Array<number>} itemIds     Original item IDs (default empty array).
2349   * @param {number[]}       nextItemIds Item IDs to merge.
2350   * @param {number}         page        Page of items merged.
2351   * @param {number}         perPage     Number of items per page.
2352   *
2353   * @return {number[]} Merged array of item IDs.
2354   */
2355  
2356  
2357  function getMergedItemIds(itemIds, nextItemIds, page, perPage) {
2358    const receivedAllIds = page === 1 && perPage === -1;
2359  
2360    if (receivedAllIds) {
2361      return nextItemIds;
2362    }
2363  
2364    const nextItemIdsStartIndex = (page - 1) * perPage; // If later page has already been received, default to the larger known
2365    // size of the existing array, else calculate as extending the existing.
2366  
2367    const size = Math.max(itemIds.length, nextItemIdsStartIndex + nextItemIds.length); // Preallocate array since size is known.
2368  
2369    const mergedItemIds = new Array(size);
2370  
2371    for (let i = 0; i < size; i++) {
2372      // Preserve existing item ID except for subset of range of next items.
2373      const isInNextItemsRange = i >= nextItemIdsStartIndex && i < nextItemIdsStartIndex + nextItemIds.length;
2374      mergedItemIds[i] = isInNextItemsRange ? nextItemIds[i - nextItemIdsStartIndex] : itemIds[i];
2375    }
2376  
2377    return mergedItemIds;
2378  }
2379  /**
2380   * Reducer tracking items state, keyed by ID. Items are assumed to be normal,
2381   * where identifiers are common across all queries.
2382   *
2383   * @param {Object} state  Current state.
2384   * @param {Object} action Dispatched action.
2385   *
2386   * @return {Object} Next state.
2387   */
2388  
2389  function reducer_items(state = {}, action) {
2390    switch (action.type) {
2391      case 'RECEIVE_ITEMS':
2392        {
2393          const context = getContextFromAction(action);
2394          const key = action.key || DEFAULT_ENTITY_KEY;
2395          return { ...state,
2396            [context]: { ...state[context],
2397              ...action.items.reduce((accumulator, value) => {
2398                var _state$context;
2399  
2400                const itemId = value[key];
2401                accumulator[itemId] = conservativeMapItem(state === null || state === void 0 ? void 0 : (_state$context = state[context]) === null || _state$context === void 0 ? void 0 : _state$context[itemId], value);
2402                return accumulator;
2403              }, {})
2404            }
2405          };
2406        }
2407  
2408      case 'REMOVE_ITEMS':
2409        return Object(external_lodash_["mapValues"])(state, contextState => Object(external_lodash_["omit"])(contextState, action.itemIds));
2410    }
2411  
2412    return state;
2413  }
2414  /**
2415   * Reducer tracking item completeness, keyed by ID. A complete item is one for
2416   * which all fields are known. This is used in supporting `_fields` queries,
2417   * where not all properties associated with an entity are necessarily returned.
2418   * In such cases, completeness is used as an indication of whether it would be
2419   * safe to use queried data for a non-`_fields`-limited request.
2420   *
2421   * @param {Object<string,boolean>} state  Current state.
2422   * @param {Object} action Dispatched action.
2423   *
2424   * @return {Object<string,boolean>} Next state.
2425   */
2426  
2427  function itemIsComplete(state = {}, action) {
2428    switch (action.type) {
2429      case 'RECEIVE_ITEMS':
2430        {
2431          const context = getContextFromAction(action);
2432          const {
2433            query,
2434            key = DEFAULT_ENTITY_KEY
2435          } = action; // An item is considered complete if it is received without an associated
2436          // fields query. Ideally, this would be implemented in such a way where the
2437          // complete aggregate of all fields would satisfy completeness. Since the
2438          // fields are not consistent across all entity types, this would require
2439          // introspection on the REST schema for each entity to know which fields
2440          // compose a complete item for that entity.
2441  
2442          const queryParts = query ? get_query_parts(query) : {};
2443          const isCompleteQuery = !query || !Array.isArray(queryParts.fields);
2444          return { ...state,
2445            [context]: { ...state[context],
2446              ...action.items.reduce((result, item) => {
2447                var _state$context2;
2448  
2449                const itemId = item[key]; // Defer to completeness if already assigned. Technically the
2450                // data may be outdated if receiving items for a field subset.
2451  
2452                result[itemId] = (state === null || state === void 0 ? void 0 : (_state$context2 = state[context]) === null || _state$context2 === void 0 ? void 0 : _state$context2[itemId]) || isCompleteQuery;
2453                return result;
2454              }, {})
2455            }
2456          };
2457        }
2458  
2459      case 'REMOVE_ITEMS':
2460        return Object(external_lodash_["mapValues"])(state, contextState => Object(external_lodash_["omit"])(contextState, action.itemIds));
2461    }
2462  
2463    return state;
2464  }
2465  /**
2466   * Reducer tracking queries state, keyed by stable query key. Each reducer
2467   * query object includes `itemIds` and `requestingPageByPerPage`.
2468   *
2469   * @param {Object} state  Current state.
2470   * @param {Object} action Dispatched action.
2471   *
2472   * @return {Object} Next state.
2473   */
2474  
2475  const receiveQueries = Object(external_lodash_["flowRight"])([// Limit to matching action type so we don't attempt to replace action on
2476  // an unhandled action.
2477  if_matching_action(action => 'query' in action), // Inject query parts into action for use both in `onSubKey` and reducer.
2478  replace_action(action => {
2479    // `ifMatchingAction` still passes on initialization, where state is
2480    // undefined and a query is not assigned. Avoid attempting to parse
2481    // parts. `onSubKey` will omit by lack of `stableKey`.
2482    if (action.query) {
2483      return { ...action,
2484        ...get_query_parts(action.query)
2485      };
2486    }
2487  
2488    return action;
2489  }), on_sub_key('context'), // Queries shape is shared, but keyed by query `stableKey` part. Original
2490  // reducer tracks only a single query object.
2491  on_sub_key('stableKey')])((state = null, action) => {
2492    const {
2493      type,
2494      page,
2495      perPage,
2496      key = DEFAULT_ENTITY_KEY
2497    } = action;
2498  
2499    if (type !== 'RECEIVE_ITEMS') {
2500      return state;
2501    }
2502  
2503    return getMergedItemIds(state || [], Object(external_lodash_["map"])(action.items, key), page, perPage);
2504  });
2505  /**
2506   * Reducer tracking queries state.
2507   *
2508   * @param {Object} state  Current state.
2509   * @param {Object} action Dispatched action.
2510   *
2511   * @return {Object} Next state.
2512   */
2513  
2514  const reducer_queries = (state = {}, action) => {
2515    switch (action.type) {
2516      case 'RECEIVE_ITEMS':
2517        return receiveQueries(state, action);
2518  
2519      case 'REMOVE_ITEMS':
2520        const removedItems = action.itemIds.reduce((result, itemId) => {
2521          result[itemId] = true;
2522          return result;
2523        }, {});
2524        return Object(external_lodash_["mapValues"])(state, contextQueries => {
2525          return Object(external_lodash_["mapValues"])(contextQueries, queryItems => {
2526            return Object(external_lodash_["filter"])(queryItems, queryId => {
2527              return !removedItems[queryId];
2528            });
2529          });
2530        });
2531  
2532      default:
2533        return state;
2534    }
2535  };
2536  
2537  /* harmony default export */ var reducer = (Object(external_wp_data_["combineReducers"])({
2538    items: reducer_items,
2539    itemIsComplete,
2540    queries: reducer_queries
2541  }));
2542  
2543  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/locks/utils.js
2544  function deepCopyLocksTreePath(tree, path) {
2545    const newTree = { ...tree
2546    };
2547    let currentNode = newTree;
2548  
2549    for (const branchName of path) {
2550      currentNode.children = { ...currentNode.children,
2551        [branchName]: {
2552          locks: [],
2553          children: {},
2554          ...currentNode.children[branchName]
2555        }
2556      };
2557      currentNode = currentNode.children[branchName];
2558    }
2559  
2560    return newTree;
2561  }
2562  function getNode(tree, path) {
2563    let currentNode = tree;
2564  
2565    for (const branchName of path) {
2566      const nextNode = currentNode.children[branchName];
2567  
2568      if (!nextNode) {
2569        return null;
2570      }
2571  
2572      currentNode = nextNode;
2573    }
2574  
2575    return currentNode;
2576  }
2577  function* iteratePath(tree, path) {
2578    let currentNode = tree;
2579    yield currentNode;
2580  
2581    for (const branchName of path) {
2582      const nextNode = currentNode.children[branchName];
2583  
2584      if (!nextNode) {
2585        break;
2586      }
2587  
2588      yield nextNode;
2589      currentNode = nextNode;
2590    }
2591  }
2592  function* iterateDescendants(node) {
2593    const stack = Object.values(node.children);
2594  
2595    while (stack.length) {
2596      const childNode = stack.pop();
2597      yield childNode;
2598      stack.push(...Object.values(childNode.children));
2599    }
2600  }
2601  function hasConflictingLock({
2602    exclusive
2603  }, locks) {
2604    if (exclusive && locks.length) {
2605      return true;
2606    }
2607  
2608    if (!exclusive && locks.filter(lock => lock.exclusive).length) {
2609      return true;
2610    }
2611  
2612    return false;
2613  }
2614  
2615  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/locks/reducer.js
2616  /**
2617   * Internal dependencies
2618   */
2619  
2620  const DEFAULT_STATE = {
2621    requests: [],
2622    tree: {
2623      locks: [],
2624      children: {}
2625    }
2626  };
2627  /**
2628   * Reducer returning locks.
2629   *
2630   * @param  {Object} state  Current state.
2631   * @param  {Object} action Dispatched action.
2632   *
2633   * @return {Object} Updated state.
2634   */
2635  
2636  function reducer_locks(state = DEFAULT_STATE, action) {
2637    switch (action.type) {
2638      case 'ENQUEUE_LOCK_REQUEST':
2639        {
2640          const {
2641            request
2642          } = action;
2643          return { ...state,
2644            requests: [request, ...state.requests]
2645          };
2646        }
2647  
2648      case 'GRANT_LOCK_REQUEST':
2649        {
2650          const {
2651            lock,
2652            request
2653          } = action;
2654          const {
2655            store,
2656            path
2657          } = request;
2658          const storePath = [store, ...path];
2659          const newTree = deepCopyLocksTreePath(state.tree, storePath);
2660          const node = getNode(newTree, storePath);
2661          node.locks = [...node.locks, lock];
2662          return { ...state,
2663            requests: state.requests.filter(r => r !== request),
2664            tree: newTree
2665          };
2666        }
2667  
2668      case 'RELEASE_LOCK':
2669        {
2670          const {
2671            lock
2672          } = action;
2673          const storePath = [lock.store, ...lock.path];
2674          const newTree = deepCopyLocksTreePath(state.tree, storePath);
2675          const node = getNode(newTree, storePath);
2676          node.locks = node.locks.filter(l => l !== lock);
2677          return { ...state,
2678            tree: newTree
2679          };
2680        }
2681    }
2682  
2683    return state;
2684  }
2685  /* harmony default export */ var locks_reducer = (reducer_locks);
2686  
2687  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/reducer.js
2688  /**
2689   * External dependencies
2690   */
2691  
2692  /**
2693   * WordPress dependencies
2694   */
2695  
2696  
2697  
2698  /**
2699   * Internal dependencies
2700   */
2701  
2702  
2703  
2704  
2705  
2706  /**
2707   * Reducer managing terms state. Keyed by taxonomy slug, the value is either
2708   * undefined (if no request has been made for given taxonomy), null (if a
2709   * request is in-flight for given taxonomy), or the array of terms for the
2710   * taxonomy.
2711   *
2712   * @param {Object} state  Current state.
2713   * @param {Object} action Dispatched action.
2714   *
2715   * @return {Object} Updated state.
2716   */
2717  
2718  function terms(state = {}, action) {
2719    switch (action.type) {
2720      case 'RECEIVE_TERMS':
2721        return { ...state,
2722          [action.taxonomy]: action.terms
2723        };
2724    }
2725  
2726    return state;
2727  }
2728  /**
2729   * Reducer managing authors state. Keyed by id.
2730   *
2731   * @param {Object} state  Current state.
2732   * @param {Object} action Dispatched action.
2733   *
2734   * @return {Object} Updated state.
2735   */
2736  
2737  function reducer_users(state = {
2738    byId: {},
2739    queries: {}
2740  }, action) {
2741    switch (action.type) {
2742      case 'RECEIVE_USER_QUERY':
2743        return {
2744          byId: { ...state.byId,
2745            ...Object(external_lodash_["keyBy"])(action.users, 'id')
2746          },
2747          queries: { ...state.queries,
2748            [action.queryID]: Object(external_lodash_["map"])(action.users, user => user.id)
2749          }
2750        };
2751    }
2752  
2753    return state;
2754  }
2755  /**
2756   * Reducer managing current user state.
2757   *
2758   * @param {Object} state  Current state.
2759   * @param {Object} action Dispatched action.
2760   *
2761   * @return {Object} Updated state.
2762   */
2763  
2764  function reducer_currentUser(state = {}, action) {
2765    switch (action.type) {
2766      case 'RECEIVE_CURRENT_USER':
2767        return action.currentUser;
2768    }
2769  
2770    return state;
2771  }
2772  /**
2773   * Reducer managing taxonomies.
2774   *
2775   * @param {Object} state  Current state.
2776   * @param {Object} action Dispatched action.
2777   *
2778   * @return {Object} Updated state.
2779   */
2780  
2781  function reducer_taxonomies(state = [], action) {
2782    switch (action.type) {
2783      case 'RECEIVE_TAXONOMIES':
2784        return action.taxonomies;
2785    }
2786  
2787    return state;
2788  }
2789  /**
2790   * Reducer managing the current theme.
2791   *
2792   * @param {string} state  Current state.
2793   * @param {Object} action Dispatched action.
2794   *
2795   * @return {string} Updated state.
2796   */
2797  
2798  function currentTheme(state = undefined, action) {
2799    switch (action.type) {
2800      case 'RECEIVE_CURRENT_THEME':
2801        return action.currentTheme.stylesheet;
2802    }
2803  
2804    return state;
2805  }
2806  /**
2807   * Reducer managing installed themes.
2808   *
2809   * @param {Object} state  Current state.
2810   * @param {Object} action Dispatched action.
2811   *
2812   * @return {Object} Updated state.
2813   */
2814  
2815  function themes(state = {}, action) {
2816    switch (action.type) {
2817      case 'RECEIVE_CURRENT_THEME':
2818        return { ...state,
2819          [action.currentTheme.stylesheet]: action.currentTheme
2820        };
2821    }
2822  
2823    return state;
2824  }
2825  /**
2826   * Reducer managing theme supports data.
2827   *
2828   * @param {Object} state  Current state.
2829   * @param {Object} action Dispatched action.
2830   *
2831   * @return {Object} Updated state.
2832   */
2833  
2834  function themeSupports(state = {}, action) {
2835    switch (action.type) {
2836      case 'RECEIVE_THEME_SUPPORTS':
2837        return { ...state,
2838          ...action.themeSupports
2839        };
2840    }
2841  
2842    return state;
2843  }
2844  /**
2845   * Higher Order Reducer for a given entity config. It supports:
2846   *
2847   *  - Fetching
2848   *  - Editing
2849   *  - Saving
2850   *
2851   * @param {Object} entityConfig  Entity config.
2852   *
2853   * @return {Function} Reducer.
2854   */
2855  
2856  function reducer_entity(entityConfig) {
2857    return Object(external_lodash_["flowRight"])([// Limit to matching action type so we don't attempt to replace action on
2858    // an unhandled action.
2859    if_matching_action(action => action.name && action.kind && action.name === entityConfig.name && action.kind === entityConfig.kind), // Inject the entity config into the action.
2860    replace_action(action => {
2861      return { ...action,
2862        key: entityConfig.key || DEFAULT_ENTITY_KEY
2863      };
2864    })])(Object(external_wp_data_["combineReducers"])({
2865      queriedData: reducer,
2866      edits: (state = {}, action) => {
2867        var _action$query$context, _action$query;
2868  
2869        switch (action.type) {
2870          case 'RECEIVE_ITEMS':
2871            const context = (_action$query$context = action === null || action === void 0 ? void 0 : (_action$query = action.query) === null || _action$query === void 0 ? void 0 : _action$query.context) !== null && _action$query$context !== void 0 ? _action$query$context : 'default';
2872  
2873            if (context !== 'default') {
2874              return state;
2875            }
2876  
2877            const nextState = { ...state
2878            };
2879  
2880            for (const record of action.items) {
2881              const recordId = record[action.key];
2882              const edits = nextState[recordId];
2883  
2884              if (!edits) {
2885                continue;
2886              }
2887  
2888              const nextEdits = Object.keys(edits).reduce((acc, key) => {
2889                // If the edited value is still different to the persisted value,
2890                // keep the edited value in edits.
2891                if ( // Edits are the "raw" attribute values, but records may have
2892                // objects with more properties, so we use `get` here for the
2893                // comparison.
2894                !Object(external_lodash_["isEqual"])(edits[key], Object(external_lodash_["get"])(record[key], 'raw', record[key])) && ( // Sometimes the server alters the sent value which means
2895                // we need to also remove the edits before the api request.
2896                !action.persistedEdits || !Object(external_lodash_["isEqual"])(edits[key], action.persistedEdits[key]))) {
2897                  acc[key] = edits[key];
2898                }
2899  
2900                return acc;
2901              }, {});
2902  
2903              if (Object.keys(nextEdits).length) {
2904                nextState[recordId] = nextEdits;
2905              } else {
2906                delete nextState[recordId];
2907              }
2908            }
2909  
2910            return nextState;
2911  
2912          case 'EDIT_ENTITY_RECORD':
2913            const nextEdits = { ...state[action.recordId],
2914              ...action.edits
2915            };
2916            Object.keys(nextEdits).forEach(key => {
2917              // Delete cleared edits so that the properties
2918              // are not considered dirty.
2919              if (nextEdits[key] === undefined) {
2920                delete nextEdits[key];
2921              }
2922            });
2923            return { ...state,
2924              [action.recordId]: nextEdits
2925            };
2926        }
2927  
2928        return state;
2929      },
2930      saving: (state = {}, action) => {
2931        switch (action.type) {
2932          case 'SAVE_ENTITY_RECORD_START':
2933          case 'SAVE_ENTITY_RECORD_FINISH':
2934            return { ...state,
2935              [action.recordId]: {
2936                pending: action.type === 'SAVE_ENTITY_RECORD_START',
2937                error: action.error,
2938                isAutosave: action.isAutosave
2939              }
2940            };
2941        }
2942  
2943        return state;
2944      },
2945      deleting: (state = {}, action) => {
2946        switch (action.type) {
2947          case 'DELETE_ENTITY_RECORD_START':
2948          case 'DELETE_ENTITY_RECORD_FINISH':
2949            return { ...state,
2950              [action.recordId]: {
2951                pending: action.type === 'DELETE_ENTITY_RECORD_START',
2952                error: action.error
2953              }
2954            };
2955        }
2956  
2957        return state;
2958      }
2959    }));
2960  }
2961  /**
2962   * Reducer keeping track of the registered entities.
2963   *
2964   * @param {Object} state  Current state.
2965   * @param {Object} action Dispatched action.
2966   *
2967   * @return {Object} Updated state.
2968   */
2969  
2970  
2971  function entitiesConfig(state = defaultEntities, action) {
2972    switch (action.type) {
2973      case 'ADD_ENTITIES':
2974        return [...state, ...action.entities];
2975    }
2976  
2977    return state;
2978  }
2979  /**
2980   * Reducer keeping track of the registered entities config and data.
2981   *
2982   * @param {Object} state  Current state.
2983   * @param {Object} action Dispatched action.
2984   *
2985   * @return {Object} Updated state.
2986   */
2987  
2988  const reducer_entities = (state = {}, action) => {
2989    const newConfig = entitiesConfig(state.config, action); // Generates a dynamic reducer for the entities
2990  
2991    let entitiesDataReducer = state.reducer;
2992  
2993    if (!entitiesDataReducer || newConfig !== state.config) {
2994      const entitiesByKind = Object(external_lodash_["groupBy"])(newConfig, 'kind');
2995      entitiesDataReducer = Object(external_wp_data_["combineReducers"])(Object.entries(entitiesByKind).reduce((memo, [kind, subEntities]) => {
2996        const kindReducer = Object(external_wp_data_["combineReducers"])(subEntities.reduce((kindMemo, entityConfig) => ({ ...kindMemo,
2997          [entityConfig.name]: reducer_entity(entityConfig)
2998        }), {}));
2999        memo[kind] = kindReducer;
3000        return memo;
3001      }, {}));
3002    }
3003  
3004    const newData = entitiesDataReducer(state.data, action);
3005  
3006    if (newData === state.data && newConfig === state.config && entitiesDataReducer === state.reducer) {
3007      return state;
3008    }
3009  
3010    return {
3011      reducer: entitiesDataReducer,
3012      data: newData,
3013      config: newConfig
3014    };
3015  };
3016  /**
3017   * Reducer keeping track of entity edit undo history.
3018   *
3019   * @param {Object} state  Current state.
3020   * @param {Object} action Dispatched action.
3021   *
3022   * @return {Object} Updated state.
3023   */
3024  
3025  const UNDO_INITIAL_STATE = [];
3026  UNDO_INITIAL_STATE.offset = 0;
3027  let lastEditAction;
3028  function reducer_undo(state = UNDO_INITIAL_STATE, action) {
3029    switch (action.type) {
3030      case 'EDIT_ENTITY_RECORD':
3031      case 'CREATE_UNDO_LEVEL':
3032        let isCreateUndoLevel = action.type === 'CREATE_UNDO_LEVEL';
3033        const isUndoOrRedo = !isCreateUndoLevel && (action.meta.isUndo || action.meta.isRedo);
3034  
3035        if (isCreateUndoLevel) {
3036          action = lastEditAction;
3037        } else if (!isUndoOrRedo) {
3038          // Don't lose the last edit cache if the new one only has transient edits.
3039          // Transient edits don't create new levels so updating the cache would make
3040          // us skip an edit later when creating levels explicitly.
3041          if (Object.keys(action.edits).some(key => !action.transientEdits[key])) {
3042            lastEditAction = action;
3043          } else {
3044            lastEditAction = { ...action,
3045              edits: { ...(lastEditAction && lastEditAction.edits),
3046                ...action.edits
3047              }
3048            };
3049          }
3050        }
3051  
3052        let nextState;
3053  
3054        if (isUndoOrRedo) {
3055          nextState = [...state];
3056          nextState.offset = state.offset + (action.meta.isUndo ? -1 : 1);
3057  
3058          if (state.flattenedUndo) {
3059            // The first undo in a sequence of undos might happen while we have
3060            // flattened undos in state. If this is the case, we want execution
3061            // to continue as if we were creating an explicit undo level. This
3062            // will result in an extra undo level being appended with the flattened
3063            // undo values.
3064            isCreateUndoLevel = true;
3065            action = lastEditAction;
3066          } else {
3067            return nextState;
3068          }
3069        }
3070  
3071        if (!action.meta.undo) {
3072          return state;
3073        } // Transient edits don't create an undo level, but are
3074        // reachable in the next meaningful edit to which they
3075        // are merged. They are defined in the entity's config.
3076  
3077  
3078        if (!isCreateUndoLevel && !Object.keys(action.edits).some(key => !action.transientEdits[key])) {
3079          nextState = [...state];
3080          nextState.flattenedUndo = { ...state.flattenedUndo,
3081            ...action.edits
3082          };
3083          nextState.offset = state.offset;
3084          return nextState;
3085        } // Clear potential redos, because this only supports linear history.
3086  
3087  
3088        nextState = nextState || state.slice(0, state.offset || undefined);
3089        nextState.offset = nextState.offset || 0;
3090        nextState.pop();
3091  
3092        if (!isCreateUndoLevel) {
3093          nextState.push({
3094            kind: action.meta.undo.kind,
3095            name: action.meta.undo.name,
3096            recordId: action.meta.undo.recordId,
3097            edits: { ...state.flattenedUndo,
3098              ...action.meta.undo.edits
3099            }
3100          });
3101        } // When an edit is a function it's an optimization to avoid running some expensive operation.
3102        // We can't rely on the function references being the same so we opt out of comparing them here.
3103  
3104  
3105        const comparisonUndoEdits = Object.values(action.meta.undo.edits).filter(edit => typeof edit !== 'function');
3106        const comparisonEdits = Object.values(action.edits).filter(edit => typeof edit !== 'function');
3107  
3108        if (!external_wp_isShallowEqual_default()(comparisonUndoEdits, comparisonEdits)) {
3109          nextState.push({
3110            kind: action.kind,
3111            name: action.name,
3112            recordId: action.recordId,
3113            edits: isCreateUndoLevel ? { ...state.flattenedUndo,
3114              ...action.edits
3115            } : action.edits
3116          });
3117        }
3118  
3119        return nextState;
3120    }
3121  
3122    return state;
3123  }
3124  /**
3125   * Reducer managing embed preview data.
3126   *
3127   * @param {Object} state  Current state.
3128   * @param {Object} action Dispatched action.
3129   *
3130   * @return {Object} Updated state.
3131   */
3132  
3133  function embedPreviews(state = {}, action) {
3134    switch (action.type) {
3135      case 'RECEIVE_EMBED_PREVIEW':
3136        const {
3137          url,
3138          preview
3139        } = action;
3140        return { ...state,
3141          [url]: preview
3142        };
3143    }
3144  
3145    return state;
3146  }
3147  /**
3148   * State which tracks whether the user can perform an action on a REST
3149   * resource.
3150   *
3151   * @param  {Object} state  Current state.
3152   * @param  {Object} action Dispatched action.
3153   *
3154   * @return {Object} Updated state.
3155   */
3156  
3157  function userPermissions(state = {}, action) {
3158    switch (action.type) {
3159      case 'RECEIVE_USER_PERMISSION':
3160        return { ...state,
3161          [action.key]: action.isAllowed
3162        };
3163    }
3164  
3165    return state;
3166  }
3167  /**
3168   * Reducer returning autosaves keyed by their parent's post id.
3169   *
3170   * @param  {Object} state  Current state.
3171   * @param  {Object} action Dispatched action.
3172   *
3173   * @return {Object} Updated state.
3174   */
3175  
3176  function reducer_autosaves(state = {}, action) {
3177    switch (action.type) {
3178      case 'RECEIVE_AUTOSAVES':
3179        const {
3180          postId,
3181          autosaves: autosavesData
3182        } = action;
3183        return { ...state,
3184          [postId]: autosavesData
3185        };
3186    }
3187  
3188    return state;
3189  }
3190  /* harmony default export */ var build_module_reducer = (Object(external_wp_data_["combineReducers"])({
3191    terms,
3192    users: reducer_users,
3193    currentTheme,
3194    currentUser: reducer_currentUser,
3195    taxonomies: reducer_taxonomies,
3196    themes,
3197    themeSupports,
3198    entities: reducer_entities,
3199    undo: reducer_undo,
3200    embedPreviews,
3201    userPermissions,
3202    autosaves: reducer_autosaves,
3203    locks: locks_reducer
3204  }));
3205  
3206  // EXTERNAL MODULE: ./node_modules/rememo/es/rememo.js
3207  var rememo = __webpack_require__("pPDe");
3208  
3209  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/name.js
3210  /**
3211   * The reducer key used by core data in store registration.
3212   * This is defined in a separate file to avoid cycle-dependency
3213   *
3214   * @type {string}
3215   */
3216  const STORE_NAME = 'core';
3217  
3218  // EXTERNAL MODULE: ./node_modules/equivalent-key-map/equivalent-key-map.js
3219  var equivalent_key_map = __webpack_require__("FtRg");
3220  var equivalent_key_map_default = /*#__PURE__*/__webpack_require__.n(equivalent_key_map);
3221  
3222  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/queried-data/selectors.js
3223  /**
3224   * External dependencies
3225   */
3226  
3227  
3228  
3229  /**
3230   * Internal dependencies
3231   */
3232  
3233  
3234  /**
3235   * Cache of state keys to EquivalentKeyMap where the inner map tracks queries
3236   * to their resulting items set. WeakMap allows garbage collection on expired
3237   * state references.
3238   *
3239   * @type {WeakMap<Object,EquivalentKeyMap>}
3240   */
3241  
3242  const queriedItemsCacheByState = new WeakMap();
3243  /**
3244   * Returns items for a given query, or null if the items are not known.
3245   *
3246   * @param {Object}  state State object.
3247   * @param {?Object} query Optional query.
3248   *
3249   * @return {?Array} Query items.
3250   */
3251  
3252  function getQueriedItemsUncached(state, query) {
3253    var _state$queries, _state$queries$contex;
3254  
3255    const {
3256      stableKey,
3257      page,
3258      perPage,
3259      include,
3260      fields,
3261      context
3262    } = get_query_parts(query);
3263    let itemIds;
3264  
3265    if (Array.isArray(include) && !stableKey) {
3266      // If the parsed query yields a set of IDs, but otherwise no filtering,
3267      // it's safe to consider targeted item IDs as the include set. This
3268      // doesn't guarantee that those objects have been queried, which is
3269      // accounted for below in the loop `null` return.
3270      itemIds = include; // TODO: Avoid storing the empty stable string in reducer, since it
3271      // can be computed dynamically here always.
3272    } 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]) {
3273      itemIds = state.queries[context][stableKey];
3274    }
3275  
3276    if (!itemIds) {
3277      return null;
3278    }
3279  
3280    const startOffset = perPage === -1 ? 0 : (page - 1) * perPage;
3281    const endOffset = perPage === -1 ? itemIds.length : Math.min(startOffset + perPage, itemIds.length);
3282    const items = [];
3283  
3284    for (let i = startOffset; i < endOffset; i++) {
3285      var _state$items$context;
3286  
3287      const itemId = itemIds[i];
3288  
3289      if (Array.isArray(include) && !include.includes(itemId)) {
3290        continue;
3291      }
3292  
3293      if (!((_state$items$context = state.items[context]) !== null && _state$items$context !== void 0 && _state$items$context.hasOwnProperty(itemId))) {
3294        return null;
3295      }
3296  
3297      const item = state.items[context][itemId];
3298      let filteredItem;
3299  
3300      if (Array.isArray(fields)) {
3301        filteredItem = {};
3302  
3303        for (let f = 0; f < fields.length; f++) {
3304          const field = fields[f].split('.');
3305          const value = Object(external_lodash_["get"])(item, field);
3306          Object(external_lodash_["set"])(filteredItem, field, value);
3307        }
3308      } else {
3309        var _state$itemIsComplete;
3310  
3311        // If expecting a complete item, validate that completeness, or
3312        // otherwise abort.
3313        if (!((_state$itemIsComplete = state.itemIsComplete[context]) !== null && _state$itemIsComplete !== void 0 && _state$itemIsComplete[itemId])) {
3314          return null;
3315        }
3316  
3317        filteredItem = item;
3318      }
3319  
3320      items.push(filteredItem);
3321    }
3322  
3323    return items;
3324  }
3325  /**
3326   * Returns items for a given query, or null if the items are not known. Caches
3327   * result both per state (by reference) and per query (by deep equality).
3328   * The caching approach is intended to be durable to query objects which are
3329   * deeply but not referentially equal, since otherwise:
3330   *
3331   * `getQueriedItems( state, {} ) !== getQueriedItems( state, {} )`
3332   *
3333   * @param {Object}  state State object.
3334   * @param {?Object} query Optional query.
3335   *
3336   * @return {?Array} Query items.
3337   */
3338  
3339  
3340  const getQueriedItems = Object(rememo["a" /* default */])((state, query = {}) => {
3341    let queriedItemsCache = queriedItemsCacheByState.get(state);
3342  
3343    if (queriedItemsCache) {
3344      const queriedItems = queriedItemsCache.get(query);
3345  
3346      if (queriedItems !== undefined) {
3347        return queriedItems;
3348      }
3349    } else {
3350      queriedItemsCache = new equivalent_key_map_default.a();
3351      queriedItemsCacheByState.set(state, queriedItemsCache);
3352    }
3353  
3354    const items = getQueriedItemsUncached(state, query);
3355    queriedItemsCache.set(query, items);
3356    return items;
3357  });
3358  
3359  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/selectors.js
3360  /**
3361   * External dependencies
3362   */
3363  
3364  
3365  /**
3366   * WordPress dependencies
3367   */
3368  
3369  
3370  
3371  /**
3372   * Internal dependencies
3373   */
3374  
3375  
3376  
3377  
3378  
3379  /**
3380   * Shared reference to an empty array for cases where it is important to avoid
3381   * returning a new array reference on every invocation, as in a connected or
3382   * other pure component which performs `shouldComponentUpdate` check on props.
3383   * This should be used as a last resort, since the normalized data should be
3384   * maintained by the reducer result in state.
3385   *
3386   * @type {Array}
3387   */
3388  
3389  const EMPTY_ARRAY = [];
3390  /**
3391   * Returns true if a request is in progress for embed preview data, or false
3392   * otherwise.
3393   *
3394   * @param {Object} state Data state.
3395   * @param {string} url   URL the preview would be for.
3396   *
3397   * @return {boolean} Whether a request is in progress for an embed preview.
3398   */
3399  
3400  const isRequestingEmbedPreview = Object(external_wp_data_["createRegistrySelector"])(select => (state, url) => {
3401    return select('core/data').isResolving(STORE_NAME, 'getEmbedPreview', [url]);
3402  });
3403  /**
3404   * Returns all available authors.
3405   *
3406   * @param {Object}           state Data state.
3407   * @param {Object|undefined} query Optional object of query parameters to
3408   *                                 include with request.
3409   * @return {Array} Authors list.
3410   */
3411  
3412  function getAuthors(state, query) {
3413    const path = Object(external_wp_url_["addQueryArgs"])('/wp/v2/users/?who=authors&per_page=100', query);
3414    return getUserQueryResults(state, path);
3415  }
3416  /**
3417   * Returns all available authors.
3418   *
3419   * @param {Object} state Data state.
3420   * @param {number} id The author id.
3421   *
3422   * @return {Array} Authors list.
3423   */
3424  
3425  function __unstableGetAuthor(state, id) {
3426    return Object(external_lodash_["get"])(state, ['users', 'byId', id], null);
3427  }
3428  /**
3429   * Returns the current user.
3430   *
3431   * @param {Object} state Data state.
3432   *
3433   * @return {Object} Current user object.
3434   */
3435  
3436  function getCurrentUser(state) {
3437    return state.currentUser;
3438  }
3439  /**
3440   * Returns all the users returned by a query ID.
3441   *
3442   * @param {Object} state   Data state.
3443   * @param {string} queryID Query ID.
3444   *
3445   * @return {Array} Users list.
3446   */
3447  
3448  const getUserQueryResults = Object(rememo["a" /* default */])((state, queryID) => {
3449    const queryResults = state.users.queries[queryID];
3450    return Object(external_lodash_["map"])(queryResults, id => state.users.byId[id]);
3451  }, (state, queryID) => [state.users.queries[queryID], state.users.byId]);
3452  /**
3453   * Returns whether the entities for the give kind are loaded.
3454   *
3455   * @param {Object} state   Data state.
3456   * @param {string} kind  Entity kind.
3457   *
3458   * @return {Array<Object>} Array of entities with config matching kind.
3459   */
3460  
3461  function getEntitiesByKind(state, kind) {
3462    return Object(external_lodash_["filter"])(state.entities.config, {
3463      kind
3464    });
3465  }
3466  /**
3467   * Returns the entity object given its kind and name.
3468   *
3469   * @param {Object} state   Data state.
3470   * @param {string} kind  Entity kind.
3471   * @param {string} name  Entity name.
3472   *
3473   * @return {Object} Entity
3474   */
3475  
3476  function getEntity(state, kind, name) {
3477    return Object(external_lodash_["find"])(state.entities.config, {
3478      kind,
3479      name
3480    });
3481  }
3482  /**
3483   * Returns the Entity's record object by key. Returns `null` if the value is not
3484   * yet received, undefined if the value entity is known to not exist, or the
3485   * entity object if it exists and is received.
3486   *
3487   * @param {Object}  state State tree
3488   * @param {string}  kind  Entity kind.
3489   * @param {string}  name  Entity name.
3490   * @param {number}  key   Record's key
3491   * @param {?Object} query Optional query.
3492   *
3493   * @return {Object?} Record.
3494   */
3495  
3496  function getEntityRecord(state, kind, name, key, query) {
3497    var _query$context, _queriedState$items$c;
3498  
3499    const queriedState = Object(external_lodash_["get"])(state.entities.data, [kind, name, 'queriedData']);
3500  
3501    if (!queriedState) {
3502      return undefined;
3503    }
3504  
3505    const context = (_query$context = query === null || query === void 0 ? void 0 : query.context) !== null && _query$context !== void 0 ? _query$context : 'default';
3506  
3507    if (query === undefined) {
3508      var _queriedState$itemIsC;
3509  
3510      // If expecting a complete item, validate that completeness.
3511      if (!((_queriedState$itemIsC = queriedState.itemIsComplete[context]) !== null && _queriedState$itemIsC !== void 0 && _queriedState$itemIsC[key])) {
3512        return undefined;
3513      }
3514  
3515      return queriedState.items[context][key];
3516    }
3517  
3518    const item = (_queriedState$items$c = queriedState.items[context]) === null || _queriedState$items$c === void 0 ? void 0 : _queriedState$items$c[key];
3519  
3520    if (item && query._fields) {
3521      const filteredItem = {};
3522      const fields = get_normalized_comma_separable(query._fields);
3523  
3524      for (let f = 0; f < fields.length; f++) {
3525        const field = fields[f].split('.');
3526        const value = Object(external_lodash_["get"])(item, field);
3527        Object(external_lodash_["set"])(filteredItem, field, value);
3528      }
3529  
3530      return filteredItem;
3531    }
3532  
3533    return item;
3534  }
3535  /**
3536   * Returns the Entity's record object by key. Doesn't trigger a resolver nor requests the entity from the API if the entity record isn't available in the local state.
3537   *
3538   * @param {Object} state  State tree
3539   * @param {string} kind   Entity kind.
3540   * @param {string} name   Entity name.
3541   * @param {number} key    Record's key
3542   *
3543   * @return {Object|null} Record.
3544   */
3545  
3546  function __experimentalGetEntityRecordNoResolver(state, kind, name, key) {
3547    return getEntityRecord(state, kind, name, key);
3548  }
3549  /**
3550   * Returns the entity's record object by key,
3551   * with its attributes mapped to their raw values.
3552   *
3553   * @param {Object} state  State tree.
3554   * @param {string} kind   Entity kind.
3555   * @param {string} name   Entity name.
3556   * @param {number} key    Record's key.
3557   *
3558   * @return {Object?} Object with the entity's raw attributes.
3559   */
3560  
3561  const getRawEntityRecord = Object(rememo["a" /* default */])((state, kind, name, key) => {
3562    const record = getEntityRecord(state, kind, name, key);
3563    return record && Object.keys(record).reduce((accumulator, _key) => {
3564      // Because edits are the "raw" attribute values,
3565      // we return those from record selectors to make rendering,
3566      // comparisons, and joins with edits easier.
3567      accumulator[_key] = Object(external_lodash_["get"])(record[_key], 'raw', record[_key]);
3568      return accumulator;
3569    }, {});
3570  }, state => [state.entities.data]);
3571  /**
3572   * Returns true if records have been received for the given set of parameters,
3573   * or false otherwise.
3574   *
3575   * @param {Object}  state State tree
3576   * @param {string}  kind  Entity kind.
3577   * @param {string}  name  Entity name.
3578   * @param {?Object} query Optional terms query.
3579   *
3580   * @return {boolean} Whether entity records have been received.
3581   */
3582  
3583  function hasEntityRecords(state, kind, name, query) {
3584    return Array.isArray(getEntityRecords(state, kind, name, query));
3585  }
3586  /**
3587   * Returns the Entity's records.
3588   *
3589   * @param {Object}  state State tree
3590   * @param {string}  kind  Entity kind.
3591   * @param {string}  name  Entity name.
3592   * @param {?Object} query Optional terms query.
3593   *
3594   * @return {?Array} Records.
3595   */
3596  
3597  function getEntityRecords(state, kind, name, query) {
3598    // Queried data state is prepopulated for all known entities. If this is not
3599    // assigned for the given parameters, then it is known to not exist. Thus, a
3600    // return value of an empty array is used instead of `null` (where `null` is
3601    // otherwise used to represent an unknown state).
3602    const queriedState = Object(external_lodash_["get"])(state.entities.data, [kind, name, 'queriedData']);
3603  
3604    if (!queriedState) {
3605      return EMPTY_ARRAY;
3606    }
3607  
3608    return getQueriedItems(queriedState, query);
3609  }
3610  /**
3611   * Returns the  list of dirty entity records.
3612   *
3613   * @param {Object} state State tree.
3614   *
3615   * @return {[{ title: string, key: string, name: string, kind: string }]} The list of updated records
3616   */
3617  
3618  const __experimentalGetDirtyEntityRecords = Object(rememo["a" /* default */])(state => {
3619    const {
3620      entities: {
3621        data
3622      }
3623    } = state;
3624    const dirtyRecords = [];
3625    Object.keys(data).forEach(kind => {
3626      Object.keys(data[kind]).forEach(name => {
3627        const primaryKeys = Object.keys(data[kind][name].edits).filter(primaryKey => hasEditsForEntityRecord(state, kind, name, primaryKey));
3628  
3629        if (primaryKeys.length) {
3630          const entity = getEntity(state, kind, name);
3631          primaryKeys.forEach(primaryKey => {
3632            var _entity$getTitle;
3633  
3634            const entityRecord = getEditedEntityRecord(state, kind, name, primaryKey);
3635            dirtyRecords.push({
3636              // We avoid using primaryKey because it's transformed into a string
3637              // when it's used as an object key.
3638              key: entityRecord[entity.key || DEFAULT_ENTITY_KEY],
3639              title: (entity === null || entity === void 0 ? void 0 : (_entity$getTitle = entity.getTitle) === null || _entity$getTitle === void 0 ? void 0 : _entity$getTitle.call(entity, entityRecord)) || '',
3640              name,
3641              kind
3642            });
3643          });
3644        }
3645      });
3646    });
3647    return dirtyRecords;
3648  }, state => [state.entities.data]);
3649  /**
3650   * Returns the specified entity record's edits.
3651   *
3652   * @param {Object} state    State tree.
3653   * @param {string} kind     Entity kind.
3654   * @param {string} name     Entity name.
3655   * @param {number} recordId Record ID.
3656   *
3657   * @return {Object?} The entity record's edits.
3658   */
3659  
3660  function getEntityRecordEdits(state, kind, name, recordId) {
3661    return Object(external_lodash_["get"])(state.entities.data, [kind, name, 'edits', recordId]);
3662  }
3663  /**
3664   * Returns the specified entity record's non transient edits.
3665   *
3666   * Transient edits don't create an undo level, and
3667   * are not considered for change detection.
3668   * They are defined in the entity's config.
3669   *
3670   * @param {Object} state    State tree.
3671   * @param {string} kind     Entity kind.
3672   * @param {string} name     Entity name.
3673   * @param {number} recordId Record ID.
3674   *
3675   * @return {Object?} The entity record's non transient edits.
3676   */
3677  
3678  const getEntityRecordNonTransientEdits = Object(rememo["a" /* default */])((state, kind, name, recordId) => {
3679    const {
3680      transientEdits
3681    } = getEntity(state, kind, name) || {};
3682    const edits = getEntityRecordEdits(state, kind, name, recordId) || {};
3683  
3684    if (!transientEdits) {
3685      return edits;
3686    }
3687  
3688    return Object.keys(edits).reduce((acc, key) => {
3689      if (!transientEdits[key]) {
3690        acc[key] = edits[key];
3691      }
3692  
3693      return acc;
3694    }, {});
3695  }, state => [state.entities.config, state.entities.data]);
3696  /**
3697   * Returns true if the specified entity record has edits,
3698   * and false otherwise.
3699   *
3700   * @param {Object} state    State tree.
3701   * @param {string} kind     Entity kind.
3702   * @param {string} name     Entity name.
3703   * @param {number} recordId Record ID.
3704   *
3705   * @return {boolean} Whether the entity record has edits or not.
3706   */
3707  
3708  function hasEditsForEntityRecord(state, kind, name, recordId) {
3709    return isSavingEntityRecord(state, kind, name, recordId) || Object.keys(getEntityRecordNonTransientEdits(state, kind, name, recordId)).length > 0;
3710  }
3711  /**
3712   * Returns the specified entity record, merged with its edits.
3713   *
3714   * @param {Object} state    State tree.
3715   * @param {string} kind     Entity kind.
3716   * @param {string} name     Entity name.
3717   * @param {number} recordId Record ID.
3718   *
3719   * @return {Object?} The entity record, merged with its edits.
3720   */
3721  
3722  const getEditedEntityRecord = Object(rememo["a" /* default */])((state, kind, name, recordId) => ({ ...getRawEntityRecord(state, kind, name, recordId),
3723    ...getEntityRecordEdits(state, kind, name, recordId)
3724  }), state => [state.entities.data]);
3725  /**
3726   * Returns true if the specified entity record is autosaving, and false otherwise.
3727   *
3728   * @param {Object} state    State tree.
3729   * @param {string} kind     Entity kind.
3730   * @param {string} name     Entity name.
3731   * @param {number} recordId Record ID.
3732   *
3733   * @return {boolean} Whether the entity record is autosaving or not.
3734   */
3735  
3736  function isAutosavingEntityRecord(state, kind, name, recordId) {
3737    const {
3738      pending,
3739      isAutosave
3740    } = Object(external_lodash_["get"])(state.entities.data, [kind, name, 'saving', recordId], {});
3741    return Boolean(pending && isAutosave);
3742  }
3743  /**
3744   * Returns true if the specified entity record is saving, and false otherwise.
3745   *
3746   * @param {Object} state    State tree.
3747   * @param {string} kind     Entity kind.
3748   * @param {string} name     Entity name.
3749   * @param {number} recordId Record ID.
3750   *
3751   * @return {boolean} Whether the entity record is saving or not.
3752   */
3753  
3754  function isSavingEntityRecord(state, kind, name, recordId) {
3755    return Object(external_lodash_["get"])(state.entities.data, [kind, name, 'saving', recordId, 'pending'], false);
3756  }
3757  /**
3758   * Returns true if the specified entity record is deleting, and false otherwise.
3759   *
3760   * @param {Object} state    State tree.
3761   * @param {string} kind     Entity kind.
3762   * @param {string} name     Entity name.
3763   * @param {number} recordId Record ID.
3764   *
3765   * @return {boolean} Whether the entity record is deleting or not.
3766   */
3767  
3768  function isDeletingEntityRecord(state, kind, name, recordId) {
3769    return Object(external_lodash_["get"])(state.entities.data, [kind, name, 'deleting', recordId, 'pending'], false);
3770  }
3771  /**
3772   * Returns the specified entity record's last save error.
3773   *
3774   * @param {Object} state    State tree.
3775   * @param {string} kind     Entity kind.
3776   * @param {string} name     Entity name.
3777   * @param {number} recordId Record ID.
3778   *
3779   * @return {Object?} The entity record's save error.
3780   */
3781  
3782  function getLastEntitySaveError(state, kind, name, recordId) {
3783    return Object(external_lodash_["get"])(state.entities.data, [kind, name, 'saving', recordId, 'error']);
3784  }
3785  /**
3786   * Returns the specified entity record's last delete error.
3787   *
3788   * @param {Object} state    State tree.
3789   * @param {string} kind     Entity kind.
3790   * @param {string} name     Entity name.
3791   * @param {number} recordId Record ID.
3792   *
3793   * @return {Object?} The entity record's save error.
3794   */
3795  
3796  function getLastEntityDeleteError(state, kind, name, recordId) {
3797    return Object(external_lodash_["get"])(state.entities.data, [kind, name, 'deleting', recordId, 'error']);
3798  }
3799  /**
3800   * Returns the current undo offset for the
3801   * entity records edits history. The offset
3802   * represents how many items from the end
3803   * of the history stack we are at. 0 is the
3804   * last edit, -1 is the second last, and so on.
3805   *
3806   * @param {Object} state State tree.
3807   *
3808   * @return {number} The current undo offset.
3809   */
3810  
3811  function getCurrentUndoOffset(state) {
3812    return state.undo.offset;
3813  }
3814  /**
3815   * Returns the previous edit from the current undo offset
3816   * for the entity records edits history, if any.
3817   *
3818   * @param {Object} state State tree.
3819   *
3820   * @return {Object?} The edit.
3821   */
3822  
3823  
3824  function getUndoEdit(state) {
3825    return state.undo[state.undo.length - 2 + getCurrentUndoOffset(state)];
3826  }
3827  /**
3828   * Returns the next edit from the current undo offset
3829   * for the entity records edits history, if any.
3830   *
3831   * @param {Object} state State tree.
3832   *
3833   * @return {Object?} The edit.
3834   */
3835  
3836  function getRedoEdit(state) {
3837    return state.undo[state.undo.length + getCurrentUndoOffset(state)];
3838  }
3839  /**
3840   * Returns true if there is a previous edit from the current undo offset
3841   * for the entity records edits history, and false otherwise.
3842   *
3843   * @param {Object} state State tree.
3844   *
3845   * @return {boolean} Whether there is a previous edit or not.
3846   */
3847  
3848  function hasUndo(state) {
3849    return Boolean(getUndoEdit(state));
3850  }
3851  /**
3852   * Returns true if there is a next edit from the current undo offset
3853   * for the entity records edits history, and false otherwise.
3854   *
3855   * @param {Object} state State tree.
3856   *
3857   * @return {boolean} Whether there is a next edit or not.
3858   */
3859  
3860  function hasRedo(state) {
3861    return Boolean(getRedoEdit(state));
3862  }
3863  /**
3864   * Return the current theme.
3865   *
3866   * @param {Object} state Data state.
3867   *
3868   * @return {Object}      The current theme.
3869   */
3870  
3871  function getCurrentTheme(state) {
3872    return state.themes[state.currentTheme];
3873  }
3874  /**
3875   * Return theme supports data in the index.
3876   *
3877   * @param {Object} state Data state.
3878   *
3879   * @return {*}           Index data.
3880   */
3881  
3882  function getThemeSupports(state) {
3883    return state.themeSupports;
3884  }
3885  /**
3886   * Returns the embed preview for the given URL.
3887   *
3888   * @param {Object} state    Data state.
3889   * @param {string} url      Embedded URL.
3890   *
3891   * @return {*} Undefined if the preview has not been fetched, otherwise, the preview fetched from the embed preview API.
3892   */
3893  
3894  function getEmbedPreview(state, url) {
3895    return state.embedPreviews[url];
3896  }
3897  /**
3898   * Determines if the returned preview is an oEmbed link fallback.
3899   *
3900   * WordPress can be configured to return a simple link to a URL if it is not embeddable.
3901   * We need to be able to determine if a URL is embeddable or not, based on what we
3902   * get back from the oEmbed preview API.
3903   *
3904   * @param {Object} state    Data state.
3905   * @param {string} url      Embedded URL.
3906   *
3907   * @return {boolean} Is the preview for the URL an oEmbed link fallback.
3908   */
3909  
3910  function isPreviewEmbedFallback(state, url) {
3911    const preview = state.embedPreviews[url];
3912    const oEmbedLinkCheck = '<a href="' + url + '">' + url + '</a>';
3913  
3914    if (!preview) {
3915      return false;
3916    }
3917  
3918    return preview.html === oEmbedLinkCheck;
3919  }
3920  /**
3921   * Returns whether the current user can perform the given action on the given
3922   * REST resource.
3923   *
3924   * Calling this may trigger an OPTIONS request to the REST API via the
3925   * `canUser()` resolver.
3926   *
3927   * https://developer.wordpress.org/rest-api/reference/
3928   *
3929   * @param {Object}   state            Data state.
3930   * @param {string}   action           Action to check. One of: 'create', 'read', 'update', 'delete'.
3931   * @param {string}   resource         REST resource to check, e.g. 'media' or 'posts'.
3932   * @param {string=}  id               Optional ID of the rest resource to check.
3933   *
3934   * @return {boolean|undefined} Whether or not the user can perform the action,
3935   *                             or `undefined` if the OPTIONS request is still being made.
3936   */
3937  
3938  function canUser(state, action, resource, id) {
3939    const key = Object(external_lodash_["compact"])([action, resource, id]).join('/');
3940    return Object(external_lodash_["get"])(state, ['userPermissions', key]);
3941  }
3942  /**
3943   * Returns whether the current user can edit the given entity.
3944   *
3945   * Calling this may trigger an OPTIONS request to the REST API via the
3946   * `canUser()` resolver.
3947   *
3948   * https://developer.wordpress.org/rest-api/reference/
3949   *
3950   * @param {Object} state    Data state.
3951   * @param {string} kind     Entity kind.
3952   * @param {string} name     Entity name.
3953   * @param {string} recordId Record's id.
3954   * @return {boolean|undefined} Whether or not the user can edit,
3955   * or `undefined` if the OPTIONS request is still being made.
3956   */
3957  
3958  function canUserEditEntityRecord(state, kind, name, recordId) {
3959    const entity = getEntity(state, kind, name);
3960  
3961    if (!entity) {
3962      return false;
3963    }
3964  
3965    const resource = entity.__unstable_rest_base;
3966    return canUser(state, 'update', resource, recordId);
3967  }
3968  /**
3969   * Returns the latest autosaves for the post.
3970   *
3971   * May return multiple autosaves since the backend stores one autosave per
3972   * author for each post.
3973   *
3974   * @param {Object} state    State tree.
3975   * @param {string} postType The type of the parent post.
3976   * @param {number} postId   The id of the parent post.
3977   *
3978   * @return {?Array} An array of autosaves for the post, or undefined if there is none.
3979   */
3980  
3981  function getAutosaves(state, postType, postId) {
3982    return state.autosaves[postId];
3983  }
3984  /**
3985   * Returns the autosave for the post and author.
3986   *
3987   * @param {Object} state    State tree.
3988   * @param {string} postType The type of the parent post.
3989   * @param {number} postId   The id of the parent post.
3990   * @param {number} authorId The id of the author.
3991   *
3992   * @return {?Object} The autosave for the post and author.
3993   */
3994  
3995  function getAutosave(state, postType, postId, authorId) {
3996    if (authorId === undefined) {
3997      return;
3998    }
3999  
4000    const autosaves = state.autosaves[postId];
4001    return Object(external_lodash_["find"])(autosaves, {
4002      author: authorId
4003    });
4004  }
4005  /**
4006   * Returns true if the REST request for autosaves has completed.
4007   *
4008   * @param {Object} state State tree.
4009   * @param {string} postType The type of the parent post.
4010   * @param {number} postId   The id of the parent post.
4011   *
4012   * @return {boolean} True if the REST request was completed. False otherwise.
4013   */
4014  
4015  const hasFetchedAutosaves = Object(external_wp_data_["createRegistrySelector"])(select => (state, postType, postId) => {
4016    return select(STORE_NAME).hasFinishedResolution('getAutosaves', [postType, postId]);
4017  });
4018  /**
4019   * Returns a new reference when edited values have changed. This is useful in
4020   * inferring where an edit has been made between states by comparison of the
4021   * return values using strict equality.
4022   *
4023   * @example
4024   *
4025   * ```
4026   * const hasEditOccurred = (
4027   *    getReferenceByDistinctEdits( beforeState ) !==
4028   *    getReferenceByDistinctEdits( afterState )
4029   * );
4030   * ```
4031   *
4032   * @param {Object} state Editor state.
4033   *
4034   * @return {*} A value whose reference will change only when an edit occurs.
4035   */
4036  
4037  const getReferenceByDistinctEdits = Object(rememo["a" /* default */])(() => [], state => [state.undo.length, state.undo.offset, state.undo.flattenedUndo]);
4038  /**
4039   * Retrieve the frontend template used for a given link.
4040   *
4041   * @param {Object} state Editor state.
4042   * @param {string} link  Link.
4043   *
4044   * @return {Object?} The template record.
4045   */
4046  
4047  function __experimentalGetTemplateForLink(state, link) {
4048    const records = getEntityRecords(state, 'postType', 'wp_template', {
4049      'find-template': link
4050    });
4051    const template = records !== null && records !== void 0 && records.length ? records[0] : null;
4052  
4053    if (template) {
4054      return getEditedEntityRecord(state, 'postType', 'wp_template', template.id);
4055    }
4056  
4057    return template;
4058  }
4059  
4060  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/utils/if-not-resolved.js
4061  /**
4062   * WordPress dependencies
4063   */
4064  
4065  /**
4066   * Higher-order function which invokes the given resolver only if it has not
4067   * already been resolved with the arguments passed to the enhanced function.
4068   *
4069   * This only considers resolution state, and notably does not support resolver
4070   * custom `isFulfilled` behavior.
4071   *
4072   * @param {Function} resolver     Original resolver.
4073   * @param {string}   selectorName Selector name associated with resolver.
4074   *
4075   * @return {Function} Enhanced resolver.
4076   */
4077  
4078  const ifNotResolved = (resolver, selectorName) =>
4079  /**
4080   * @param {...any} args Original resolver arguments.
4081   */
4082  function* resolveIfNotResolved(...args) {
4083    const hasStartedResolution = yield external_wp_data_["controls"].select('core', 'hasStartedResolution', selectorName, args);
4084  
4085    if (!hasStartedResolution) {
4086      yield* resolver(...args);
4087    }
4088  };
4089  
4090  /* harmony default export */ var if_not_resolved = (ifNotResolved);
4091  
4092  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/resolvers.js
4093  /**
4094   * External dependencies
4095   */
4096  
4097  /**
4098   * WordPress dependencies
4099   */
4100  
4101  
4102  
4103  
4104  /**
4105   * Internal dependencies
4106   */
4107  
4108  
4109  /**
4110   * Internal dependencies
4111   */
4112  
4113  
4114  
4115  
4116  
4117  /**
4118   * Requests authors from the REST API.
4119   *
4120   * @param {Object|undefined} query Optional object of query parameters to
4121   *                                 include with request.
4122   */
4123  
4124  function* resolvers_getAuthors(query) {
4125    const path = Object(external_wp_url_["addQueryArgs"])('/wp/v2/users/?who=authors&per_page=100', query);
4126    const users = yield Object(external_wp_dataControls_["apiFetch"])({
4127      path
4128    });
4129    yield receiveUserQuery(path, users);
4130  }
4131  /**
4132   * Temporary approach to resolving editor access to author queries.
4133   *
4134   * @param {number} id The author id.
4135   */
4136  
4137  function* resolvers_unstableGetAuthor(id) {
4138    const path = `/wp/v2/users?who=authors&include=$id}`;
4139    const users = yield Object(external_wp_dataControls_["apiFetch"])({
4140      path
4141    });
4142    yield receiveUserQuery('author', users);
4143  }
4144  /**
4145   * Requests the current user from the REST API.
4146   */
4147  
4148  function* resolvers_getCurrentUser() {
4149    const currentUser = yield Object(external_wp_dataControls_["apiFetch"])({
4150      path: '/wp/v2/users/me'
4151    });
4152    yield receiveCurrentUser(currentUser);
4153  }
4154  /**
4155   * Requests an entity's record from the REST API.
4156   *
4157   * @param {string}           kind  Entity kind.
4158   * @param {string}           name  Entity name.
4159   * @param {number|string}    key   Record's key
4160   * @param {Object|undefined} query Optional object of query parameters to
4161   *                                 include with request.
4162   */
4163  
4164  function* resolvers_getEntityRecord(kind, name, key = '', query) {
4165    const entities = yield getKindEntities(kind);
4166    const entity = Object(external_lodash_["find"])(entities, {
4167      kind,
4168      name
4169    });
4170  
4171    if (!entity) {
4172      return;
4173    }
4174  
4175    const lock = yield* __unstableAcquireStoreLock('core', ['entities', 'data', kind, name, key], {
4176      exclusive: false
4177    });
4178  
4179    try {
4180      if (query !== undefined && query._fields) {
4181        // If requesting specific fields, items and query assocation to said
4182        // records are stored by ID reference. Thus, fields must always include
4183        // the ID.
4184        query = { ...query,
4185          _fields: Object(external_lodash_["uniq"])([...(get_normalized_comma_separable(query._fields) || []), entity.key || DEFAULT_ENTITY_KEY]).join()
4186        };
4187      } // Disable reason: While true that an early return could leave `path`
4188      // unused, it's important that path is derived using the query prior to
4189      // additional query modifications in the condition below, since those
4190      // modifications are relevant to how the data is tracked in state, and not
4191      // for how the request is made to the REST API.
4192      // eslint-disable-next-line @wordpress/no-unused-vars-before-return
4193  
4194  
4195      const path = Object(external_wp_url_["addQueryArgs"])(entity.baseURL + '/' + key, { ...entity.baseURLParams,
4196        ...query
4197      });
4198  
4199      if (query !== undefined) {
4200        query = { ...query,
4201          include: [key]
4202        }; // The resolution cache won't consider query as reusable based on the
4203        // fields, so it's tested here, prior to initiating the REST request,
4204        // and without causing `getEntityRecords` resolution to occur.
4205  
4206        const hasRecords = yield external_wp_data_["controls"].select('core', 'hasEntityRecords', kind, name, query);
4207  
4208        if (hasRecords) {
4209          return;
4210        }
4211      }
4212  
4213      const record = yield Object(external_wp_dataControls_["apiFetch"])({
4214        path
4215      });
4216      yield receiveEntityRecords(kind, name, record, query);
4217    } catch (error) {// We need a way to handle and access REST API errors in state
4218      // Until then, catching the error ensures the resolver is marked as resolved.
4219    } finally {
4220      yield* __unstableReleaseStoreLock(lock);
4221    }
4222  }
4223  /**
4224   * Requests an entity's record from the REST API.
4225   */
4226  
4227  const resolvers_getRawEntityRecord = if_not_resolved(resolvers_getEntityRecord, 'getEntityRecord');
4228  /**
4229   * Requests an entity's record from the REST API.
4230   */
4231  
4232  const resolvers_getEditedEntityRecord = if_not_resolved(resolvers_getRawEntityRecord, 'getRawEntityRecord');
4233  /**
4234   * Requests the entity's records from the REST API.
4235   *
4236   * @param {string}  kind   Entity kind.
4237   * @param {string}  name   Entity name.
4238   * @param {Object?} query  Query Object.
4239   */
4240  
4241  function* resolvers_getEntityRecords(kind, name, query = {}) {
4242    const entities = yield getKindEntities(kind);
4243    const entity = Object(external_lodash_["find"])(entities, {
4244      kind,
4245      name
4246    });
4247  
4248    if (!entity) {
4249      return;
4250    }
4251  
4252    const lock = yield* __unstableAcquireStoreLock('core', ['entities', 'data', kind, name], {
4253      exclusive: false
4254    });
4255  
4256    try {
4257      var _query;
4258  
4259      if (query._fields) {
4260        // If requesting specific fields, items and query assocation to said
4261        // records are stored by ID reference. Thus, fields must always include
4262        // the ID.
4263        query = { ...query,
4264          _fields: Object(external_lodash_["uniq"])([...(get_normalized_comma_separable(query._fields) || []), entity.key || DEFAULT_ENTITY_KEY]).join()
4265        };
4266      }
4267  
4268      const path = Object(external_wp_url_["addQueryArgs"])(entity.baseURL, { ...entity.baseURLParams,
4269        ...query
4270      });
4271      let records = Object.values(yield Object(external_wp_dataControls_["apiFetch"])({
4272        path
4273      })); // If we request fields but the result doesn't contain the fields,
4274      // explicitely set these fields as "undefined"
4275      // that way we consider the query "fullfilled".
4276  
4277      if (query._fields) {
4278        records = records.map(record => {
4279          query._fields.split(',').forEach(field => {
4280            if (!record.hasOwnProperty(field)) {
4281              record[field] = undefined;
4282            }
4283          });
4284  
4285          return record;
4286        });
4287      }
4288  
4289      yield receiveEntityRecords(kind, name, records, query); // When requesting all fields, the list of results can be used to
4290      // resolve the `getEntityRecord` selector in addition to `getEntityRecords`.
4291      // See https://github.com/WordPress/gutenberg/pull/26575
4292  
4293      if (!((_query = query) !== null && _query !== void 0 && _query._fields) && !query.context) {
4294        const key = entity.key || DEFAULT_ENTITY_KEY;
4295        const resolutionsArgs = records.filter(record => record[key]).map(record => [kind, name, record[key]]);
4296        yield {
4297          type: 'START_RESOLUTIONS',
4298          selectorName: 'getEntityRecord',
4299          args: resolutionsArgs
4300        };
4301        yield {
4302          type: 'FINISH_RESOLUTIONS',
4303          selectorName: 'getEntityRecord',
4304          args: resolutionsArgs
4305        };
4306      }
4307    } finally {
4308      yield* __unstableReleaseStoreLock(lock);
4309    }
4310  }
4311  
4312  resolvers_getEntityRecords.shouldInvalidate = (action, kind, name) => {
4313    return (action.type === 'RECEIVE_ITEMS' || action.type === 'REMOVE_ITEMS') && action.invalidateCache && kind === action.kind && name === action.name;
4314  };
4315  /**
4316   * Requests the current theme.
4317   */
4318  
4319  
4320  function* resolvers_getCurrentTheme() {
4321    const activeThemes = yield Object(external_wp_dataControls_["apiFetch"])({
4322      path: '/wp/v2/themes?status=active'
4323    });
4324    yield receiveCurrentTheme(activeThemes[0]);
4325  }
4326  /**
4327   * Requests theme supports data from the index.
4328   */
4329  
4330  function* resolvers_getThemeSupports() {
4331    const activeThemes = yield Object(external_wp_dataControls_["apiFetch"])({
4332      path: '/wp/v2/themes?status=active'
4333    });
4334    yield receiveThemeSupports(activeThemes[0].theme_supports);
4335  }
4336  /**
4337   * Requests a preview from the from the Embed API.
4338   *
4339   * @param {string} url   URL to get the preview for.
4340   */
4341  
4342  function* resolvers_getEmbedPreview(url) {
4343    try {
4344      const embedProxyResponse = yield Object(external_wp_dataControls_["apiFetch"])({
4345        path: Object(external_wp_url_["addQueryArgs"])('/oembed/1.0/proxy', {
4346          url
4347        })
4348      });
4349      yield receiveEmbedPreview(url, embedProxyResponse);
4350    } catch (error) {
4351      // Embed API 404s if the URL cannot be embedded, so we have to catch the error from the apiRequest here.
4352      yield receiveEmbedPreview(url, false);
4353    }
4354  }
4355  /**
4356   * Checks whether the current user can perform the given action on the given
4357   * REST resource.
4358   *
4359   * @param {string}  action   Action to check. One of: 'create', 'read', 'update',
4360   *                           'delete'.
4361   * @param {string}  resource REST resource to check, e.g. 'media' or 'posts'.
4362   * @param {?string} id       ID of the rest resource to check.
4363   */
4364  
4365  function* resolvers_canUser(action, resource, id) {
4366    const methods = {
4367      create: 'POST',
4368      read: 'GET',
4369      update: 'PUT',
4370      delete: 'DELETE'
4371    };
4372    const method = methods[action];
4373  
4374    if (!method) {
4375      throw new Error(`'$action}' is not a valid action.`);
4376    }
4377  
4378    const path = id ? `/wp/v2/$resource}/$id}` : `/wp/v2/$resource}`;
4379    let response;
4380  
4381    try {
4382      response = yield Object(external_wp_dataControls_["apiFetch"])({
4383        path,
4384        // Ideally this would always be an OPTIONS request, but unfortunately there's
4385        // a bug in the REST API which causes the Allow header to not be sent on
4386        // OPTIONS requests to /posts/:id routes.
4387        // https://core.trac.wordpress.org/ticket/45753
4388        method: id ? 'GET' : 'OPTIONS',
4389        parse: false
4390      });
4391    } catch (error) {
4392      // Do nothing if our OPTIONS request comes back with an API error (4xx or
4393      // 5xx). The previously determined isAllowed value will remain in the store.
4394      return;
4395    }
4396  
4397    let allowHeader;
4398  
4399    if (Object(external_lodash_["hasIn"])(response, ['headers', 'get'])) {
4400      // If the request is fetched using the fetch api, the header can be
4401      // retrieved using the 'get' method.
4402      allowHeader = response.headers.get('allow');
4403    } else {
4404      // If the request was preloaded server-side and is returned by the
4405      // preloading middleware, the header will be a simple property.
4406      allowHeader = Object(external_lodash_["get"])(response, ['headers', 'Allow'], '');
4407    }
4408  
4409    const key = Object(external_lodash_["compact"])([action, resource, id]).join('/');
4410    const isAllowed = Object(external_lodash_["includes"])(allowHeader, method);
4411    yield receiveUserPermission(key, isAllowed);
4412  }
4413  /**
4414   * Checks whether the current user can perform the given action on the given
4415   * REST resource.
4416   *
4417   * @param {string} kind     Entity kind.
4418   * @param {string} name     Entity name.
4419   * @param {string} recordId Record's id.
4420   */
4421  
4422  function* resolvers_canUserEditEntityRecord(kind, name, recordId) {
4423    const entities = yield getKindEntities(kind);
4424    const entity = Object(external_lodash_["find"])(entities, {
4425      kind,
4426      name
4427    });
4428  
4429    if (!entity) {
4430      return;
4431    }
4432  
4433    const resource = entity.__unstable_rest_base;
4434    yield resolvers_canUser('update', resource, recordId);
4435  }
4436  /**
4437   * Request autosave data from the REST API.
4438   *
4439   * @param {string} postType The type of the parent post.
4440   * @param {number} postId   The id of the parent post.
4441   */
4442  
4443  function* resolvers_getAutosaves(postType, postId) {
4444    const {
4445      rest_base: restBase
4446    } = yield external_wp_data_["controls"].resolveSelect('core', 'getPostType', postType);
4447    const autosaves = yield Object(external_wp_dataControls_["apiFetch"])({
4448      path: `/wp/v2/$restBase}/$postId}/autosaves?context=edit`
4449    });
4450  
4451    if (autosaves && autosaves.length) {
4452      yield receiveAutosaves(postId, autosaves);
4453    }
4454  }
4455  /**
4456   * Request autosave data from the REST API.
4457   *
4458   * This resolver exists to ensure the underlying autosaves are fetched via
4459   * `getAutosaves` when a call to the `getAutosave` selector is made.
4460   *
4461   * @param {string} postType The type of the parent post.
4462   * @param {number} postId   The id of the parent post.
4463   */
4464  
4465  function* resolvers_getAutosave(postType, postId) {
4466    yield external_wp_data_["controls"].resolveSelect('core', 'getAutosaves', postType, postId);
4467  }
4468  /**
4469   * Retrieve the frontend template used for a given link.
4470   *
4471   * @param {string} link  Link.
4472   */
4473  
4474  function* resolvers_experimentalGetTemplateForLink(link) {
4475    // Ideally this should be using an apiFetch call
4476    // We could potentially do so by adding a "filter" to the `wp_template` end point.
4477    // Also it seems the returned object is not a regular REST API post type.
4478    let template;
4479  
4480    try {
4481      template = yield regularFetch(Object(external_wp_url_["addQueryArgs"])(link, {
4482        '_wp-find-template': true
4483      }));
4484    } catch (e) {// For non-FSE themes, it is possible that this request returns an error.
4485    }
4486  
4487    if (!template) {
4488      return;
4489    }
4490  
4491    yield resolvers_getEntityRecord('postType', 'wp_template', template.id);
4492    const record = yield external_wp_data_["controls"].select('core', 'getEntityRecord', 'postType', 'wp_template', template.id);
4493  
4494    if (record) {
4495      yield receiveEntityRecords('postType', 'wp_template', [record], {
4496        'find-template': link
4497      });
4498    }
4499  }
4500  
4501  resolvers_experimentalGetTemplateForLink.shouldInvalidate = action => {
4502    return (action.type === 'RECEIVE_ITEMS' || action.type === 'REMOVE_ITEMS') && action.invalidateCache && action.kind === 'postType' && action.name === 'wp_template';
4503  };
4504  
4505  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/locks/selectors.js
4506  /**
4507   * Internal dependencies
4508   */
4509  
4510  function __unstableGetPendingLockRequests(state) {
4511    return state.locks.requests;
4512  }
4513  function __unstableIsLockAvailable(state, store, path, {
4514    exclusive
4515  }) {
4516    const storePath = [store, ...path];
4517    const locks = state.locks.tree; // Validate all parents and the node itself
4518  
4519    for (const node of iteratePath(locks, storePath)) {
4520      if (hasConflictingLock({
4521        exclusive
4522      }, node.locks)) {
4523        return false;
4524      }
4525    } // iteratePath terminates early if path is unreachable, let's
4526    // re-fetch the node and check it exists in the tree.
4527  
4528  
4529    const node = getNode(locks, storePath);
4530  
4531    if (!node) {
4532      return true;
4533    } // Validate all nested nodes
4534  
4535  
4536    for (const descendant of iterateDescendants(node)) {
4537      if (hasConflictingLock({
4538        exclusive
4539      }, descendant.locks)) {
4540        return false;
4541      }
4542    }
4543  
4544    return true;
4545  }
4546  
4547  // EXTERNAL MODULE: external ["wp","element"]
4548  var external_wp_element_ = __webpack_require__("GRId");
4549  
4550  // EXTERNAL MODULE: external ["wp","blocks"]
4551  var external_wp_blocks_ = __webpack_require__("HSyU");
4552  
4553  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/entity-provider.js
4554  
4555  
4556  /**
4557   * WordPress dependencies
4558   */
4559  
4560  
4561  
4562  const entity_provider_EMPTY_ARRAY = [];
4563  /**
4564   * Internal dependencies
4565   */
4566  
4567  
4568  const entity_provider_entities = { ...defaultEntities.reduce((acc, entity) => {
4569      if (!acc[entity.kind]) {
4570        acc[entity.kind] = {};
4571      }
4572  
4573      acc[entity.kind][entity.name] = {
4574        context: Object(external_wp_element_["createContext"])()
4575      };
4576      return acc;
4577    }, {}),
4578    ...kinds.reduce((acc, kind) => {
4579      acc[kind.name] = {};
4580      return acc;
4581    }, {})
4582  };
4583  
4584  const entity_provider_getEntity = (kind, type) => {
4585    if (!entity_provider_entities[kind]) {
4586      throw new Error(`Missing entity config for kind: $kind}.`);
4587    }
4588  
4589    if (!entity_provider_entities[kind][type]) {
4590      entity_provider_entities[kind][type] = {
4591        context: Object(external_wp_element_["createContext"])()
4592      };
4593    }
4594  
4595    return entity_provider_entities[kind][type];
4596  };
4597  /**
4598   * Context provider component for providing
4599   * an entity for a specific entity type.
4600   *
4601   * @param {Object} props          The component's props.
4602   * @param {string} props.kind     The entity kind.
4603   * @param {string} props.type     The entity type.
4604   * @param {number} props.id       The entity ID.
4605   * @param {*}      props.children The children to wrap.
4606   *
4607   * @return {Object} The provided children, wrapped with
4608   *                   the entity's context provider.
4609   */
4610  
4611  
4612  function EntityProvider({
4613    kind,
4614    type,
4615    id,
4616    children
4617  }) {
4618    const Provider = entity_provider_getEntity(kind, type).context.Provider;
4619    return Object(external_wp_element_["createElement"])(Provider, {
4620      value: id
4621    }, children);
4622  }
4623  /**
4624   * Hook that returns the ID for the nearest
4625   * provided entity of the specified type.
4626   *
4627   * @param {string} kind The entity kind.
4628   * @param {string} type The entity type.
4629   */
4630  
4631  function useEntityId(kind, type) {
4632    return Object(external_wp_element_["useContext"])(entity_provider_getEntity(kind, type).context);
4633  }
4634  /**
4635   * Hook that returns the value and a setter for the
4636   * specified property of the nearest provided
4637   * entity of the specified type.
4638   *
4639   * @param {string} kind  The entity kind.
4640   * @param {string} type  The entity type.
4641   * @param {string} prop  The property name.
4642   * @param {string} [_id] An entity ID to use instead of the context-provided one.
4643   *
4644   * @return {[*, Function, *]} An array where the first item is the
4645   *                            property value, the second is the
4646   *                            setter and the third is the full value
4647   *                               object from REST API containing more
4648   *                               information like `raw`, `rendered` and
4649   *                               `protected` props.
4650   */
4651  
4652  function useEntityProp(kind, type, prop, _id) {
4653    const providerId = useEntityId(kind, type);
4654    const id = _id !== null && _id !== void 0 ? _id : providerId;
4655    const {
4656      value,
4657      fullValue
4658    } = Object(external_wp_data_["useSelect"])(select => {
4659      const {
4660        getEntityRecord,
4661        getEditedEntityRecord
4662      } = select('core');
4663      const entity = getEntityRecord(kind, type, id); // Trigger resolver.
4664  
4665      const editedEntity = getEditedEntityRecord(kind, type, id);
4666      return entity && editedEntity ? {
4667        value: editedEntity[prop],
4668        fullValue: entity[prop]
4669      } : {};
4670    }, [kind, type, id, prop]);
4671    const {
4672      editEntityRecord
4673    } = Object(external_wp_data_["useDispatch"])('core');
4674    const setValue = Object(external_wp_element_["useCallback"])(newValue => {
4675      editEntityRecord(kind, type, id, {
4676        [prop]: newValue
4677      });
4678    }, [kind, type, id, prop]);
4679    return [value, setValue, fullValue];
4680  }
4681  /**
4682   * Hook that returns block content getters and setters for
4683   * the nearest provided entity of the specified type.
4684   *
4685   * The return value has the shape `[ blocks, onInput, onChange ]`.
4686   * `onInput` is for block changes that don't create undo levels
4687   * or dirty the post, non-persistent changes, and `onChange` is for
4688   * peristent changes. They map directly to the props of a
4689   * `BlockEditorProvider` and are intended to be used with it,
4690   * or similar components or hooks.
4691   *
4692   * @param {string} kind                            The entity kind.
4693   * @param {string} type                            The entity type.
4694   * @param {Object} options
4695   * @param {string} [options.id]                    An entity ID to use instead of the context-provided one.
4696   *
4697   * @return {[WPBlock[], Function, Function]} The block array and setters.
4698   */
4699  
4700  function useEntityBlockEditor(kind, type, {
4701    id: _id
4702  } = {}) {
4703    const providerId = useEntityId(kind, type);
4704    const id = _id !== null && _id !== void 0 ? _id : providerId;
4705    const {
4706      content,
4707      blocks
4708    } = Object(external_wp_data_["useSelect"])(select => {
4709      const {
4710        getEditedEntityRecord
4711      } = select('core');
4712      const editedEntity = getEditedEntityRecord(kind, type, id);
4713      return {
4714        blocks: editedEntity.blocks,
4715        content: editedEntity.content
4716      };
4717    }, [kind, type, id]);
4718    const {
4719      __unstableCreateUndoLevel,
4720      editEntityRecord
4721    } = Object(external_wp_data_["useDispatch"])('core');
4722    Object(external_wp_element_["useEffect"])(() => {
4723      // Load the blocks from the content if not already in state
4724      // Guard against other instances that might have
4725      // set content to a function already or the blocks are already in state.
4726      if (content && typeof content !== 'function' && !blocks) {
4727        const parsedContent = Object(external_wp_blocks_["parse"])(content);
4728        editEntityRecord(kind, type, id, {
4729          blocks: parsedContent
4730        }, {
4731          undoIgnore: true
4732        });
4733      }
4734    }, [content]);
4735    const onChange = Object(external_wp_element_["useCallback"])((newBlocks, options) => {
4736      const {
4737        selection
4738      } = options;
4739      const edits = {
4740        blocks: newBlocks,
4741        selection
4742      };
4743      const noChange = blocks === edits.blocks;
4744  
4745      if (noChange) {
4746        return __unstableCreateUndoLevel(kind, type, id);
4747      } // We create a new function here on every persistent edit
4748      // to make sure the edit makes the post dirty and creates
4749      // a new undo level.
4750  
4751  
4752      edits.content = ({
4753        blocks: blocksForSerialization = []
4754      }) => Object(external_wp_blocks_["__unstableSerializeAndClean"])(blocksForSerialization);
4755  
4756      editEntityRecord(kind, type, id, edits);
4757    }, [kind, type, id, blocks]);
4758    const onInput = Object(external_wp_element_["useCallback"])((newBlocks, options) => {
4759      const {
4760        selection
4761      } = options;
4762      const edits = {
4763        blocks: newBlocks,
4764        selection
4765      };
4766      editEntityRecord(kind, type, id, edits);
4767    }, [kind, type, id]);
4768    return [blocks !== null && blocks !== void 0 ? blocks : entity_provider_EMPTY_ARRAY, onInput, onChange];
4769  }
4770  
4771  // EXTERNAL MODULE: external ["wp","htmlEntities"]
4772  var external_wp_htmlEntities_ = __webpack_require__("rmEH");
4773  
4774  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/fetch/__experimental-fetch-link-suggestions.js
4775  /**
4776   * WordPress dependencies
4777   */
4778  
4779  
4780  
4781  
4782  /**
4783   * Filters the search by type
4784   *
4785   * @typedef { 'post' | 'term' | 'post-format' } WPLinkSearchType
4786   */
4787  
4788  /**
4789   * A link with an id may be of kind post-type or taxonomy
4790   *
4791   * @typedef { 'post-type' | 'taxonomy' } WPKind
4792   */
4793  
4794  /**
4795   * @typedef WPLinkSearchOptions
4796   *
4797   * @property {boolean}             [isInitialSuggestions] Displays initial search suggestions, when true.
4798   * @property {WPLinkSearchType}    [type]                 Filters by search type.
4799   * @property {string}              [subtype]              Slug of the post-type or taxonomy.
4800   * @property {number}              [page]                 Which page of results to return.
4801   * @property {number}              [perPage]              Search results per page.
4802   */
4803  
4804  /**
4805   * @typedef WPLinkSearchResult
4806   *
4807   * @property {number} id     Post or term id.
4808   * @property {string} url    Link url.
4809   * @property {string} title  Title of the link.
4810   * @property {string} type   The taxonomy or post type slug or type URL.
4811   * @property {WPKind} [kind] Link kind of post-type or taxonomy
4812   */
4813  
4814  /**
4815   * @typedef WPEditorSettings
4816   *
4817   * @property {boolean} [ disablePostFormats ] Disables post formats, when true.
4818   */
4819  
4820  /**
4821   * Fetches link suggestions from the API.
4822   *
4823   * @async
4824   * @param {string}              search
4825   * @param {WPLinkSearchOptions} [searchOptions]
4826   * @param {WPEditorSettings}    [settings]
4827   *
4828   * @example
4829   * ```js
4830   * import { __experimentalFetchLinkSuggestions as fetchLinkSuggestions } from '@wordpress/core-data';
4831   *
4832   * //...
4833   *
4834   * export function initialize( id, settings ) {
4835   *
4836   * settings.__experimentalFetchLinkSuggestions = (
4837   *     search,
4838   *     searchOptions
4839   * ) => fetchLinkSuggestions( search, searchOptions, settings );
4840   * ```
4841   * @return {Promise< WPLinkSearchResult[] >} List of search suggestions
4842   */
4843  
4844  const fetchLinkSuggestions = async (search, searchOptions = {}, settings = {}) => {
4845    const {
4846      isInitialSuggestions = false,
4847      type = undefined,
4848      subtype = undefined,
4849      page = undefined,
4850      perPage = isInitialSuggestions ? 3 : 20
4851    } = searchOptions;
4852    const {
4853      disablePostFormats = false
4854    } = settings;
4855    const queries = [];
4856  
4857    if (!type || type === 'post') {
4858      queries.push(external_wp_apiFetch_default()({
4859        path: Object(external_wp_url_["addQueryArgs"])('/wp/v2/search', {
4860          search,
4861          page,
4862          per_page: perPage,
4863          type: 'post',
4864          subtype
4865        })
4866      }).then(results => {
4867        return results.map(result => {
4868          return { ...result,
4869            meta: {
4870              kind: 'post-type',
4871              subtype
4872            }
4873          };
4874        });
4875      }).catch(() => []) // fail by returning no results
4876      );
4877    }
4878  
4879    if (!type || type === 'term') {
4880      queries.push(external_wp_apiFetch_default()({
4881        path: Object(external_wp_url_["addQueryArgs"])('/wp/v2/search', {
4882          search,
4883          page,
4884          per_page: perPage,
4885          type: 'term',
4886          subtype
4887        })
4888      }).then(results => {
4889        return results.map(result => {
4890          return { ...result,
4891            meta: {
4892              kind: 'taxonomy',
4893              subtype
4894            }
4895          };
4896        });
4897      }).catch(() => []));
4898    }
4899  
4900    if (!disablePostFormats && (!type || type === 'post-format')) {
4901      queries.push(external_wp_apiFetch_default()({
4902        path: Object(external_wp_url_["addQueryArgs"])('/wp/v2/search', {
4903          search,
4904          page,
4905          per_page: perPage,
4906          type: 'post-format',
4907          subtype
4908        })
4909      }).then(results => {
4910        return results.map(result => {
4911          return { ...result,
4912            meta: {
4913              kind: 'taxonomy',
4914              subtype
4915            }
4916          };
4917        });
4918      }).catch(() => []));
4919    }
4920  
4921    return Promise.all(queries).then(results => {
4922      return results.reduce((accumulator, current) => accumulator.concat(current), //flatten list
4923      []).filter(
4924      /**
4925       * @param {{ id: number }} result
4926       */
4927      result => {
4928        return !!result.id;
4929      }).slice(0, perPage).map(
4930      /**
4931       * @param {{ id: number, url:string, title?:string, subtype?: string, type?: string }} result
4932       */
4933      result => {
4934        var _result$meta;
4935  
4936        return {
4937          id: result.id,
4938          url: result.url,
4939          title: Object(external_wp_htmlEntities_["decodeEntities"])(result.title || '') || Object(external_wp_i18n_["__"])('(no title)'),
4940          type: result.subtype || result.type,
4941          kind: result === null || result === void 0 ? void 0 : (_result$meta = result.meta) === null || _result$meta === void 0 ? void 0 : _result$meta.kind
4942        };
4943      });
4944    });
4945  };
4946  
4947  /* harmony default export */ var _experimental_fetch_link_suggestions = (fetchLinkSuggestions);
4948  
4949  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/fetch/__experimental-fetch-remote-url-data.js
4950  /**
4951   * WordPress dependencies
4952   */
4953  
4954  
4955  /**
4956   * @typedef WPRemoteUrlData
4957   *
4958   * @property {string} title     contents of the remote URL's `<title>` tag.
4959   */
4960  
4961  /**
4962   * Fetches data about a remote URL.
4963   * eg: <title> tag, favicon...etc.
4964   *
4965   * @async
4966   * @param {string}              url
4967   *
4968   * @example
4969   * ```js
4970   * import { __experimentalFetchRemoteUrlData as fetchRemoteUrlData } from '@wordpress/core-data';
4971   *
4972   * //...
4973   *
4974   * export function initialize( id, settings ) {
4975   *
4976   * settings.__experimentalFetchRemoteUrlData = (
4977   *     url
4978   * ) => fetchRemoteUrlData( url );
4979   * ```
4980   * @return {Promise< WPRemoteUrlData[] >} Remote URL data.
4981   */
4982  
4983  const fetchRemoteUrlData = async url => {
4984    const endpoint = '/__experimental/url-details';
4985    const args = {
4986      url: Object(external_wp_url_["prependHTTP"])(url)
4987    };
4988    return external_wp_apiFetch_default()({
4989      path: Object(external_wp_url_["addQueryArgs"])(endpoint, args)
4990    });
4991  };
4992  
4993  /* harmony default export */ var _experimental_fetch_remote_url_data = (fetchRemoteUrlData);
4994  
4995  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/fetch/index.js
4996  
4997  
4998  
4999  // CONCATENATED MODULE: ./node_modules/@wordpress/core-data/build-module/index.js
5000  /**
5001   * WordPress dependencies
5002   */
5003  
5004  
5005  /**
5006   * Internal dependencies
5007   */
5008  
5009  
5010  
5011  
5012  
5013  
5014  
5015  
5016  
5017   // The entity selectors/resolvers and actions are shortcuts to their generic equivalents
5018  // (getEntityRecord, getEntityRecords, updateEntityRecord, updateEntityRecordss)
5019  // Instead of getEntityRecord, the consumer could use more user-frieldly named selector: getPostType, getTaxonomy...
5020  // The "kind" and the "name" of the entity are combined to generate these shortcuts.
5021  
5022  const entitySelectors = defaultEntities.reduce((result, entity) => {
5023    const {
5024      kind,
5025      name
5026    } = entity;
5027  
5028    result[getMethodName(kind, name)] = (state, key) => getEntityRecord(state, kind, name, key);
5029  
5030    result[getMethodName(kind, name, 'get', true)] = (state, ...args) => getEntityRecords(state, kind, name, ...args);
5031  
5032    return result;
5033  }, {});
5034  const entityResolvers = defaultEntities.reduce((result, entity) => {
5035    const {
5036      kind,
5037      name
5038    } = entity;
5039  
5040    result[getMethodName(kind, name)] = key => resolvers_getEntityRecord(kind, name, key);
5041  
5042    const pluralMethodName = getMethodName(kind, name, 'get', true);
5043  
5044    result[pluralMethodName] = (...args) => resolvers_getEntityRecords(kind, name, ...args);
5045  
5046    result[pluralMethodName].shouldInvalidate = (action, ...args) => resolvers_getEntityRecords.shouldInvalidate(action, kind, name, ...args);
5047  
5048    return result;
5049  }, {});
5050  const entityActions = defaultEntities.reduce((result, entity) => {
5051    const {
5052      kind,
5053      name
5054    } = entity;
5055  
5056    result[getMethodName(kind, name, 'save')] = key => saveEntityRecord(kind, name, key);
5057  
5058    result[getMethodName(kind, name, 'delete')] = (key, query) => deleteEntityRecord(kind, name, key, query);
5059  
5060    return result;
5061  }, {});
5062  const storeConfig = {
5063    reducer: build_module_reducer,
5064    controls: { ...build_module_controls,
5065      ...external_wp_dataControls_["controls"]
5066    },
5067    actions: { ...build_module_actions_namespaceObject,
5068      ...entityActions,
5069      ...locks_actions_namespaceObject
5070    },
5071    selectors: { ...build_module_selectors_namespaceObject,
5072      ...entitySelectors,
5073      ...locks_selectors_namespaceObject
5074    },
5075    resolvers: { ...resolvers_namespaceObject,
5076      ...entityResolvers
5077    }
5078  };
5079  /**
5080   * Store definition for the code data namespace.
5081   *
5082   * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore
5083   *
5084   * @type {Object}
5085   */
5086  
5087  const build_module_store = Object(external_wp_data_["createReduxStore"])(STORE_NAME, storeConfig);
5088  Object(external_wp_data_["register"])(build_module_store);
5089  
5090  
5091  
5092  
5093  
5094  /***/ }),
5095  
5096  /***/ "l3Sj":
5097  /***/ (function(module, exports) {
5098  
5099  (function() { module.exports = window["wp"]["i18n"]; }());
5100  
5101  /***/ }),
5102  
5103  /***/ "pPDe":
5104  /***/ (function(module, __webpack_exports__, __webpack_require__) {
5105  
5106  "use strict";
5107  
5108  
5109  var LEAF_KEY, hasWeakMap;
5110  
5111  /**
5112   * Arbitrary value used as key for referencing cache object in WeakMap tree.
5113   *
5114   * @type {Object}
5115   */
5116  LEAF_KEY = {};
5117  
5118  /**
5119   * Whether environment supports WeakMap.
5120   *
5121   * @type {boolean}
5122   */
5123  hasWeakMap = typeof WeakMap !== 'undefined';
5124  
5125  /**
5126   * Returns the first argument as the sole entry in an array.
5127   *
5128   * @param {*} value Value to return.
5129   *
5130   * @return {Array} Value returned as entry in array.
5131   */
5132  function arrayOf( value ) {
5133      return [ value ];
5134  }
5135  
5136  /**
5137   * Returns true if the value passed is object-like, or false otherwise. A value
5138   * is object-like if it can support property assignment, e.g. object or array.
5139   *
5140   * @param {*} value Value to test.
5141   *
5142   * @return {boolean} Whether value is object-like.
5143   */
5144  function isObjectLike( value ) {
5145      return !! value && 'object' === typeof value;
5146  }
5147  
5148  /**
5149   * Creates and returns a new cache object.
5150   *
5151   * @return {Object} Cache object.
5152   */
5153  function createCache() {
5154      var cache = {
5155          clear: function() {
5156              cache.head = null;
5157          },
5158      };
5159  
5160      return cache;
5161  }
5162  
5163  /**
5164   * Returns true if entries within the two arrays are strictly equal by
5165   * reference from a starting index.
5166   *
5167   * @param {Array}  a         First array.
5168   * @param {Array}  b         Second array.
5169   * @param {number} fromIndex Index from which to start comparison.
5170   *
5171   * @return {boolean} Whether arrays are shallowly equal.
5172   */
5173  function isShallowEqual( a, b, fromIndex ) {
5174      var i;
5175  
5176      if ( a.length !== b.length ) {
5177          return false;
5178      }
5179  
5180      for ( i = fromIndex; i < a.length; i++ ) {
5181          if ( a[ i ] !== b[ i ] ) {
5182              return false;
5183          }
5184      }
5185  
5186      return true;
5187  }
5188  
5189  /**
5190   * Returns a memoized selector function. The getDependants function argument is
5191   * called before the memoized selector and is expected to return an immutable
5192   * reference or array of references on which the selector depends for computing
5193   * its own return value. The memoize cache is preserved only as long as those
5194   * dependant references remain the same. If getDependants returns a different
5195   * reference(s), the cache is cleared and the selector value regenerated.
5196   *
5197   * @param {Function} selector      Selector function.
5198   * @param {Function} getDependants Dependant getter returning an immutable
5199   *                                 reference or array of reference used in
5200   *                                 cache bust consideration.
5201   *
5202   * @return {Function} Memoized selector.
5203   */
5204  /* harmony default export */ __webpack_exports__["a"] = (function( selector, getDependants ) {
5205      var rootCache, getCache;
5206  
5207      // Use object source as dependant if getter not provided
5208      if ( ! getDependants ) {
5209          getDependants = arrayOf;
5210      }
5211  
5212      /**
5213       * Returns the root cache. If WeakMap is supported, this is assigned to the
5214       * root WeakMap cache set, otherwise it is a shared instance of the default
5215       * cache object.
5216       *
5217       * @return {(WeakMap|Object)} Root cache object.
5218       */
5219  	function getRootCache() {
5220          return rootCache;
5221      }
5222  
5223      /**
5224       * Returns the cache for a given dependants array. When possible, a WeakMap
5225       * will be used to create a unique cache for each set of dependants. This
5226       * is feasible due to the nature of WeakMap in allowing garbage collection
5227       * to occur on entries where the key object is no longer referenced. Since
5228       * WeakMap requires the key to be an object, this is only possible when the
5229       * dependant is object-like. The root cache is created as a hierarchy where
5230       * each top-level key is the first entry in a dependants set, the value a
5231       * WeakMap where each key is the next dependant, and so on. This continues
5232       * so long as the dependants are object-like. If no dependants are object-
5233       * like, then the cache is shared across all invocations.
5234       *
5235       * @see isObjectLike
5236       *
5237       * @param {Array} dependants Selector dependants.
5238       *
5239       * @return {Object} Cache object.
5240       */
5241  	function getWeakMapCache( dependants ) {
5242          var caches = rootCache,
5243              isUniqueByDependants = true,
5244              i, dependant, map, cache;
5245  
5246          for ( i = 0; i < dependants.length; i++ ) {
5247              dependant = dependants[ i ];
5248  
5249              // Can only compose WeakMap from object-like key.
5250              if ( ! isObjectLike( dependant ) ) {
5251                  isUniqueByDependants = false;
5252                  break;
5253              }
5254  
5255              // Does current segment of cache already have a WeakMap?
5256              if ( caches.has( dependant ) ) {
5257                  // Traverse into nested WeakMap.
5258                  caches = caches.get( dependant );
5259              } else {
5260                  // Create, set, and traverse into a new one.
5261                  map = new WeakMap();
5262                  caches.set( dependant, map );
5263                  caches = map;
5264              }
5265          }
5266  
5267          // We use an arbitrary (but consistent) object as key for the last item
5268          // in the WeakMap to serve as our running cache.
5269          if ( ! caches.has( LEAF_KEY ) ) {
5270              cache = createCache();
5271              cache.isUniqueByDependants = isUniqueByDependants;
5272              caches.set( LEAF_KEY, cache );
5273          }
5274  
5275          return caches.get( LEAF_KEY );
5276      }
5277  
5278      // Assign cache handler by availability of WeakMap
5279      getCache = hasWeakMap ? getWeakMapCache : getRootCache;
5280  
5281      /**
5282       * Resets root memoization cache.
5283       */
5284  	function clear() {
5285          rootCache = hasWeakMap ? new WeakMap() : createCache();
5286      }
5287  
5288      // eslint-disable-next-line jsdoc/check-param-names
5289      /**
5290       * The augmented selector call, considering first whether dependants have
5291       * changed before passing it to underlying memoize function.
5292       *
5293       * @param {Object} source    Source object for derivation.
5294       * @param {...*}   extraArgs Additional arguments to pass to selector.
5295       *
5296       * @return {*} Selector result.
5297       */
5298  	function callSelector( /* source, ...extraArgs */ ) {
5299          var len = arguments.length,
5300              cache, node, i, args, dependants;
5301  
5302          // Create copy of arguments (avoid leaking deoptimization).
5303          args = new Array( len );
5304          for ( i = 0; i < len; i++ ) {
5305              args[ i ] = arguments[ i ];
5306          }
5307  
5308          dependants = getDependants.apply( null, args );
5309          cache = getCache( dependants );
5310  
5311          // If not guaranteed uniqueness by dependants (primitive type or lack
5312          // of WeakMap support), shallow compare against last dependants and, if
5313          // references have changed, destroy cache to recalculate result.
5314          if ( ! cache.isUniqueByDependants ) {
5315              if ( cache.lastDependants && ! isShallowEqual( dependants, cache.lastDependants, 0 ) ) {
5316                  cache.clear();
5317              }
5318  
5319              cache.lastDependants = dependants;
5320          }
5321  
5322          node = cache.head;
5323          while ( node ) {
5324              // Check whether node arguments match arguments
5325              if ( ! isShallowEqual( node.args, args, 1 ) ) {
5326                  node = node.next;
5327                  continue;
5328              }
5329  
5330              // At this point we can assume we've found a match
5331  
5332              // Surface matched node to head if not already
5333              if ( node !== cache.head ) {
5334                  // Adjust siblings to point to each other.
5335                  node.prev.next = node.next;
5336                  if ( node.next ) {
5337                      node.next.prev = node.prev;
5338                  }
5339  
5340                  node.next = cache.head;
5341                  node.prev = null;
5342                  cache.head.prev = node;
5343                  cache.head = node;
5344              }
5345  
5346              // Return immediately
5347              return node.val;
5348          }
5349  
5350          // No cached value found. Continue to insertion phase:
5351  
5352          node = {
5353              // Generate the result from original function
5354              val: selector.apply( null, args ),
5355          };
5356  
5357          // Avoid including the source object in the cache.
5358          args[ 0 ] = null;
5359          node.args = args;
5360  
5361          // Don't need to check whether node is already head, since it would
5362          // have been returned above already if it was
5363  
5364          // Shift existing head down list
5365          if ( cache.head ) {
5366              cache.head.prev = node;
5367              node.next = cache.head;
5368          }
5369  
5370          cache.head = node;
5371  
5372          return node.val;
5373      }
5374  
5375      callSelector.getDependants = getDependants;
5376      callSelector.clear = clear;
5377      clear();
5378  
5379      return callSelector;
5380  });
5381  
5382  
5383  /***/ }),
5384  
5385  /***/ "rl8x":
5386  /***/ (function(module, exports) {
5387  
5388  (function() { module.exports = window["wp"]["isShallowEqual"]; }());
5389  
5390  /***/ }),
5391  
5392  /***/ "rmEH":
5393  /***/ (function(module, exports) {
5394  
5395  (function() { module.exports = window["wp"]["htmlEntities"]; }());
5396  
5397  /***/ }),
5398  
5399  /***/ "ywyh":
5400  /***/ (function(module, exports) {
5401  
5402  (function() { module.exports = window["wp"]["apiFetch"]; }());
5403  
5404  /***/ })
5405  
5406  /******/ });


Generated: Thu Oct 21 01:00:03 2021 Cross-referenced by PHPXref 0.7.1