[ Index ]

PHP Cross Reference of WordPress Trunk (Updated Daily)

Search

title

Body

[close]

/wp-includes/js/dist/ -> private-apis.js (source)

   1  /******/ (() => { // webpackBootstrap
   2  /******/     "use strict";
   3  /******/     // The require scope
   4  /******/     var __webpack_require__ = {};
   5  /******/     
   6  /************************************************************************/
   7  /******/     /* webpack/runtime/define property getters */
   8  /******/     (() => {
   9  /******/         // define getter functions for harmony exports
  10  /******/         __webpack_require__.d = (exports, definition) => {
  11  /******/             for(var key in definition) {
  12  /******/                 if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
  13  /******/                     Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
  14  /******/                 }
  15  /******/             }
  16  /******/         };
  17  /******/     })();
  18  /******/     
  19  /******/     /* webpack/runtime/hasOwnProperty shorthand */
  20  /******/     (() => {
  21  /******/         __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
  22  /******/     })();
  23  /******/     
  24  /******/     /* webpack/runtime/make namespace object */
  25  /******/     (() => {
  26  /******/         // define __esModule on exports
  27  /******/         __webpack_require__.r = (exports) => {
  28  /******/             if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  29  /******/                 Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  30  /******/             }
  31  /******/             Object.defineProperty(exports, '__esModule', { value: true });
  32  /******/         };
  33  /******/     })();
  34  /******/     
  35  /************************************************************************/
  36  var __webpack_exports__ = {};
  37  // ESM COMPAT FLAG
  38  __webpack_require__.r(__webpack_exports__);
  39  
  40  // EXPORTS
  41  __webpack_require__.d(__webpack_exports__, {
  42    __dangerousOptInToUnstableAPIsOnlyForCoreModules: () => (/* reexport */ __dangerousOptInToUnstableAPIsOnlyForCoreModules)
  43  });
  44  
  45  ;// CONCATENATED MODULE: ./node_modules/@wordpress/private-apis/build-module/implementation.js
  46  /**
  47   * wordpress/private-apis – the utilities to enable private cross-package
  48   * exports of private APIs.
  49   *
  50   * This "implementation.js" file is needed for the sake of the unit tests. It
  51   * exports more than the public API of the package to aid in testing.
  52   */
  53  
  54  /**
  55   * The list of core modules allowed to opt-in to the private APIs.
  56   */
  57  const CORE_MODULES_USING_PRIVATE_APIS = ['@wordpress/block-directory', '@wordpress/block-editor', '@wordpress/block-library', '@wordpress/blocks', '@wordpress/commands', '@wordpress/components', '@wordpress/core-commands', '@wordpress/core-data', '@wordpress/customize-widgets', '@wordpress/data', '@wordpress/edit-post', '@wordpress/edit-site', '@wordpress/edit-widgets', '@wordpress/editor', '@wordpress/format-library', '@wordpress/interface', '@wordpress/patterns', '@wordpress/preferences', '@wordpress/reusable-blocks', '@wordpress/router', '@wordpress/dataviews', '@wordpress/fields'];
  58  
  59  /**
  60   * A list of core modules that already opted-in to
  61   * the privateApis package.
  62   *
  63   * @type {string[]}
  64   */
  65  const registeredPrivateApis = [];
  66  
  67  /*
  68   * Warning for theme and plugin developers.
  69   *
  70   * The use of private developer APIs is intended for use by WordPress Core
  71   * and the Gutenberg plugin exclusively.
  72   *
  73   * Dangerously opting in to using these APIs is NOT RECOMMENDED. Furthermore,
  74   * the WordPress Core philosophy to strive to maintain backward compatibility
  75   * for third-party developers DOES NOT APPLY to private APIs.
  76   *
  77   * THE CONSENT STRING FOR OPTING IN TO THESE APIS MAY CHANGE AT ANY TIME AND
  78   * WITHOUT NOTICE. THIS CHANGE WILL BREAK EXISTING THIRD-PARTY CODE. SUCH A
  79   * CHANGE MAY OCCUR IN EITHER A MAJOR OR MINOR RELEASE.
  80   */
  81  const requiredConsent = 'I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.';
  82  
  83  /** @type {boolean} */
  84  let allowReRegistration;
  85  // The safety measure is meant for WordPress core where IS_WORDPRESS_CORE
  86  // is set to true.
  87  // For the general use-case, the re-registration should be allowed by default
  88  // Let's default to true, then. Try/catch will fall back to "true" even if the
  89  // environment variable is not explicitly defined.
  90  try {
  91    allowReRegistration =  true ? false : 0;
  92  } catch (error) {
  93    allowReRegistration = true;
  94  }
  95  
  96  /**
  97   * Called by a @wordpress package wishing to opt-in to accessing or exposing
  98   * private private APIs.
  99   *
 100   * @param {string} consent    The consent string.
 101   * @param {string} moduleName The name of the module that is opting in.
 102   * @return {{lock: typeof lock, unlock: typeof unlock}} An object containing the lock and unlock functions.
 103   */
 104  const __dangerousOptInToUnstableAPIsOnlyForCoreModules = (consent, moduleName) => {
 105    if (!CORE_MODULES_USING_PRIVATE_APIS.includes(moduleName)) {
 106      throw new Error(`You tried to opt-in to unstable APIs as module "$moduleName}". ` + 'This feature is only for JavaScript modules shipped with WordPress core. ' + 'Please do not use it in plugins and themes as the unstable APIs will be removed ' + 'without a warning. If you ignore this error and depend on unstable features, ' + 'your product will inevitably break on one of the next WordPress releases.');
 107    }
 108    if (!allowReRegistration && registeredPrivateApis.includes(moduleName)) {
 109      // This check doesn't play well with Story Books / Hot Module Reloading
 110      // and isn't included in the Gutenberg plugin. It only matters in the
 111      // WordPress core release.
 112      throw new Error(`You tried to opt-in to unstable APIs as module "$moduleName}" which is already registered. ` + 'This feature is only for JavaScript modules shipped with WordPress core. ' + 'Please do not use it in plugins and themes as the unstable APIs will be removed ' + 'without a warning. If you ignore this error and depend on unstable features, ' + 'your product will inevitably break on one of the next WordPress releases.');
 113    }
 114    if (consent !== requiredConsent) {
 115      throw new Error(`You tried to opt-in to unstable APIs without confirming you know the consequences. ` + 'This feature is only for JavaScript modules shipped with WordPress core. ' + 'Please do not use it in plugins and themes as the unstable APIs will removed ' + 'without a warning. If you ignore this error and depend on unstable features, ' + 'your product will inevitably break on the next WordPress release.');
 116    }
 117    registeredPrivateApis.push(moduleName);
 118    return {
 119      lock,
 120      unlock
 121    };
 122  };
 123  
 124  /**
 125   * Binds private data to an object.
 126   * It does not alter the passed object in any way, only
 127   * registers it in an internal map of private data.
 128   *
 129   * The private data can't be accessed by any other means
 130   * than the `unlock` function.
 131   *
 132   * @example
 133   * ```js
 134   * const object = {};
 135   * const privateData = { a: 1 };
 136   * lock( object, privateData );
 137   *
 138   * object
 139   * // {}
 140   *
 141   * unlock( object );
 142   * // { a: 1 }
 143   * ```
 144   *
 145   * @param {any} object      The object to bind the private data to.
 146   * @param {any} privateData The private data to bind to the object.
 147   */
 148  function lock(object, privateData) {
 149    if (!object) {
 150      throw new Error('Cannot lock an undefined object.');
 151    }
 152    if (!(__private in object)) {
 153      object[__private] = {};
 154    }
 155    lockedData.set(object[__private], privateData);
 156  }
 157  
 158  /**
 159   * Unlocks the private data bound to an object.
 160   *
 161   * It does not alter the passed object in any way, only
 162   * returns the private data paired with it using the `lock()`
 163   * function.
 164   *
 165   * @example
 166   * ```js
 167   * const object = {};
 168   * const privateData = { a: 1 };
 169   * lock( object, privateData );
 170   *
 171   * object
 172   * // {}
 173   *
 174   * unlock( object );
 175   * // { a: 1 }
 176   * ```
 177   *
 178   * @param {any} object The object to unlock the private data from.
 179   * @return {any} The private data bound to the object.
 180   */
 181  function unlock(object) {
 182    if (!object) {
 183      throw new Error('Cannot unlock an undefined object.');
 184    }
 185    if (!(__private in object)) {
 186      throw new Error('Cannot unlock an object that was not locked before. ');
 187    }
 188    return lockedData.get(object[__private]);
 189  }
 190  const lockedData = new WeakMap();
 191  
 192  /**
 193   * Used by lock() and unlock() to uniquely identify the private data
 194   * related to a containing object.
 195   */
 196  const __private = Symbol('Private API ID');
 197  
 198  // Unit tests utilities:
 199  
 200  /**
 201   * Private function to allow the unit tests to allow
 202   * a mock module to access the private APIs.
 203   *
 204   * @param {string} name The name of the module.
 205   */
 206  function allowCoreModule(name) {
 207    CORE_MODULES_USING_PRIVATE_APIS.push(name);
 208  }
 209  
 210  /**
 211   * Private function to allow the unit tests to set
 212   * a custom list of allowed modules.
 213   */
 214  function resetAllowedCoreModules() {
 215    while (CORE_MODULES_USING_PRIVATE_APIS.length) {
 216      CORE_MODULES_USING_PRIVATE_APIS.pop();
 217    }
 218  }
 219  /**
 220   * Private function to allow the unit tests to reset
 221   * the list of registered private apis.
 222   */
 223  function resetRegisteredPrivateApis() {
 224    while (registeredPrivateApis.length) {
 225      registeredPrivateApis.pop();
 226    }
 227  }
 228  
 229  ;// CONCATENATED MODULE: ./node_modules/@wordpress/private-apis/build-module/index.js
 230  
 231  
 232  (window.wp = window.wp || {}).privateApis = __webpack_exports__;
 233  /******/ })()
 234  ;


Generated : Thu Nov 21 08:20:01 2024 Cross-referenced by PHPXref