wp/wp-includes/js/dist/server-side-render.js
changeset 21 48c4eec2b7e6
parent 19 3d72ae0968f4
child 22 8c2e4d02f4ef
--- a/wp/wp-includes/js/dist/server-side-render.js	Thu Sep 29 08:06:27 2022 +0200
+++ b/wp/wp-includes/js/dist/server-side-render.js	Fri Sep 05 18:40:08 2025 +0200
@@ -1,93 +1,180 @@
-/******/ (function() { // webpackBootstrap
+/******/ (() => { // webpackBootstrap
 /******/ 	"use strict";
-/******/ 	// The require scope
-/******/ 	var __webpack_require__ = {};
+/******/ 	var __webpack_modules__ = ({
+
+/***/ 7734:
+/***/ ((module) => {
+
+
+
+// do not edit .js files directly - edit src/index.jst
+
+
+  var envHasBigInt64Array = typeof BigInt64Array !== 'undefined';
+
+
+module.exports = function equal(a, b) {
+  if (a === b) return true;
+
+  if (a && b && typeof a == 'object' && typeof b == 'object') {
+    if (a.constructor !== b.constructor) return false;
+
+    var length, i, keys;
+    if (Array.isArray(a)) {
+      length = a.length;
+      if (length != b.length) return false;
+      for (i = length; i-- !== 0;)
+        if (!equal(a[i], b[i])) return false;
+      return true;
+    }
+
+
+    if ((a instanceof Map) && (b instanceof Map)) {
+      if (a.size !== b.size) return false;
+      for (i of a.entries())
+        if (!b.has(i[0])) return false;
+      for (i of a.entries())
+        if (!equal(i[1], b.get(i[0]))) return false;
+      return true;
+    }
+
+    if ((a instanceof Set) && (b instanceof Set)) {
+      if (a.size !== b.size) return false;
+      for (i of a.entries())
+        if (!b.has(i[0])) return false;
+      return true;
+    }
+
+    if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {
+      length = a.length;
+      if (length != b.length) return false;
+      for (i = length; i-- !== 0;)
+        if (a[i] !== b[i]) return false;
+      return true;
+    }
+
+
+    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;
+    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();
+    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();
+
+    keys = Object.keys(a);
+    length = keys.length;
+    if (length !== Object.keys(b).length) return false;
+
+    for (i = length; i-- !== 0;)
+      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;
+
+    for (i = length; i-- !== 0;) {
+      var key = keys[i];
+
+      if (!equal(a[key], b[key])) return false;
+    }
+
+    return true;
+  }
+
+  // true if both NaN, false otherwise
+  return a!==a && b!==b;
+};
+
+
+/***/ })
+
+/******/ 	});
+/************************************************************************/
+/******/ 	// The module cache
+/******/ 	var __webpack_module_cache__ = {};
+/******/ 	
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/ 		// Check if module is in cache
+/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
+/******/ 		if (cachedModule !== undefined) {
+/******/ 			return cachedModule.exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = __webpack_module_cache__[moduleId] = {
+/******/ 			// no module.id needed
+/******/ 			// no module.loaded needed
+/******/ 			exports: {}
+/******/ 		};
+/******/ 	
+/******/ 		// Execute the module function
+/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
+/******/ 	
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
 /******/ 	
 /************************************************************************/
 /******/ 	/* webpack/runtime/compat get default export */
-/******/ 	!function() {
+/******/ 	(() => {
 /******/ 		// getDefaultExport function for compatibility with non-harmony modules
-/******/ 		__webpack_require__.n = function(module) {
+/******/ 		__webpack_require__.n = (module) => {
 /******/ 			var getter = module && module.__esModule ?
-/******/ 				function() { return module['default']; } :
-/******/ 				function() { return module; };
+/******/ 				() => (module['default']) :
+/******/ 				() => (module);
 /******/ 			__webpack_require__.d(getter, { a: getter });
 /******/ 			return getter;
 /******/ 		};
-/******/ 	}();
+/******/ 	})();
 /******/ 	
 /******/ 	/* webpack/runtime/define property getters */
-/******/ 	!function() {
+/******/ 	(() => {
 /******/ 		// define getter functions for harmony exports
-/******/ 		__webpack_require__.d = function(exports, definition) {
+/******/ 		__webpack_require__.d = (exports, definition) => {
 /******/ 			for(var key in definition) {
 /******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
 /******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
 /******/ 				}
 /******/ 			}
 /******/ 		};
-/******/ 	}();
+/******/ 	})();
 /******/ 	
 /******/ 	/* webpack/runtime/hasOwnProperty shorthand */
-/******/ 	!function() {
-/******/ 		__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
-/******/ 	}();
+/******/ 	(() => {
+/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
+/******/ 	})();
 /******/ 	
 /************************************************************************/
 var __webpack_exports__ = {};
+// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
+(() => {
 
 // EXPORTS
 __webpack_require__.d(__webpack_exports__, {
-  "default": function() { return /* binding */ build_module; }
+  "default": () => (/* binding */ build_module)
 });
 
-;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
-function _extends() {
-  _extends = Object.assign ? Object.assign.bind() : function (target) {
-    for (var i = 1; i < arguments.length; i++) {
-      var source = arguments[i];
-
-      for (var key in source) {
-        if (Object.prototype.hasOwnProperty.call(source, key)) {
-          target[key] = source[key];
-        }
-      }
-    }
-
-    return target;
-  };
-  return _extends.apply(this, arguments);
-}
 ;// CONCATENATED MODULE: external ["wp","element"]
-var external_wp_element_namespaceObject = window["wp"]["element"];
+const external_wp_element_namespaceObject = window["wp"]["element"];
 ;// CONCATENATED MODULE: external ["wp","data"]
-var external_wp_data_namespaceObject = window["wp"]["data"];
-;// CONCATENATED MODULE: external ["wp","deprecated"]
-var external_wp_deprecated_namespaceObject = window["wp"]["deprecated"];
-var external_wp_deprecated_default = /*#__PURE__*/__webpack_require__.n(external_wp_deprecated_namespaceObject);
-;// CONCATENATED MODULE: external "lodash"
-var external_lodash_namespaceObject = window["lodash"];
+const external_wp_data_namespaceObject = window["wp"]["data"];
+// EXTERNAL MODULE: ./node_modules/fast-deep-equal/es6/index.js
+var es6 = __webpack_require__(7734);
+var es6_default = /*#__PURE__*/__webpack_require__.n(es6);
 ;// CONCATENATED MODULE: external ["wp","compose"]
-var external_wp_compose_namespaceObject = window["wp"]["compose"];
+const external_wp_compose_namespaceObject = window["wp"]["compose"];
 ;// CONCATENATED MODULE: external ["wp","i18n"]
-var external_wp_i18n_namespaceObject = window["wp"]["i18n"];
+const external_wp_i18n_namespaceObject = window["wp"]["i18n"];
 ;// CONCATENATED MODULE: external ["wp","apiFetch"]
-var external_wp_apiFetch_namespaceObject = window["wp"]["apiFetch"];
+const external_wp_apiFetch_namespaceObject = window["wp"]["apiFetch"];
 var external_wp_apiFetch_default = /*#__PURE__*/__webpack_require__.n(external_wp_apiFetch_namespaceObject);
 ;// CONCATENATED MODULE: external ["wp","url"]
-var external_wp_url_namespaceObject = window["wp"]["url"];
+const external_wp_url_namespaceObject = window["wp"]["url"];
 ;// CONCATENATED MODULE: external ["wp","components"]
-var external_wp_components_namespaceObject = window["wp"]["components"];
+const external_wp_components_namespaceObject = window["wp"]["components"];
 ;// CONCATENATED MODULE: external ["wp","blocks"]
-var external_wp_blocks_namespaceObject = window["wp"]["blocks"];
+const external_wp_blocks_namespaceObject = window["wp"]["blocks"];
+;// CONCATENATED MODULE: external "ReactJSXRuntime"
+const external_ReactJSXRuntime_namespaceObject = window["ReactJSXRuntime"];
 ;// CONCATENATED MODULE: ./node_modules/@wordpress/server-side-render/build-module/server-side-render.js
-
-
-
 /**
  * External dependencies
  */
 
+
 /**
  * WordPress dependencies
  */
@@ -99,9 +186,9 @@
 
 
 
-function rendererPath(block) {
-  let attributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
-  let urlQueryArgs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+
+const EMPTY_OBJECT = {};
+function rendererPath(block, attributes = null, urlQueryArgs = {}) {
   return (0,external_wp_url_namespaceObject.addQueryArgs)(`/wp/v2/block-renderer/${block}`, {
     context: 'edit',
     ...(null !== attributes ? {
@@ -110,52 +197,75 @@
     ...urlQueryArgs
   });
 }
-
-function DefaultEmptyResponsePlaceholder(_ref) {
-  let {
-    className
-  } = _ref;
-  return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Placeholder, {
-    className: className
-  }, (0,external_wp_i18n_namespaceObject.__)('Block rendered as empty.'));
+function removeBlockSupportAttributes(attributes) {
+  const {
+    backgroundColor,
+    borderColor,
+    fontFamily,
+    fontSize,
+    gradient,
+    textColor,
+    className,
+    ...restAttributes
+  } = attributes;
+  const {
+    border,
+    color,
+    elements,
+    spacing,
+    typography,
+    ...restStyles
+  } = attributes?.style || EMPTY_OBJECT;
+  return {
+    ...restAttributes,
+    style: restStyles
+  };
 }
-
-function DefaultErrorResponsePlaceholder(_ref2) {
-  let {
-    response,
-    className
-  } = _ref2;
-  const errorMessage = (0,external_wp_i18n_namespaceObject.sprintf)( // translators: %s: error message describing the problem
+function DefaultEmptyResponsePlaceholder({
+  className
+}) {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Placeholder, {
+    className: className,
+    children: (0,external_wp_i18n_namespaceObject.__)('Block rendered as empty.')
+  });
+}
+function DefaultErrorResponsePlaceholder({
+  response,
+  className
+}) {
+  const errorMessage = (0,external_wp_i18n_namespaceObject.sprintf)(
+  // translators: %s: error message describing the problem
   (0,external_wp_i18n_namespaceObject.__)('Error loading block: %s'), response.errorMsg);
-  return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Placeholder, {
-    className: className
-  }, errorMessage);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Placeholder, {
+    className: className,
+    children: errorMessage
+  });
 }
-
-function DefaultLoadingResponsePlaceholder(_ref3) {
-  let {
-    children,
-    showLoader
-  } = _ref3;
-  return (0,external_wp_element_namespaceObject.createElement)("div", {
+function DefaultLoadingResponsePlaceholder({
+  children,
+  showLoader
+}) {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
     style: {
       position: 'relative'
-    }
-  }, showLoader && (0,external_wp_element_namespaceObject.createElement)("div", {
-    style: {
-      position: 'absolute',
-      top: '50%',
-      left: '50%',
-      marginTop: '-9px',
-      marginLeft: '-9px'
-    }
-  }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Spinner, null)), (0,external_wp_element_namespaceObject.createElement)("div", {
-    style: {
-      opacity: showLoader ? '0.3' : 1
-    }
-  }, children));
+    },
+    children: [showLoader && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+      style: {
+        position: 'absolute',
+        top: '50%',
+        left: '50%',
+        marginTop: '-9px',
+        marginLeft: '-9px'
+      },
+      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Spinner, {})
+    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+      style: {
+        opacity: showLoader ? '0.3' : 1
+      },
+      children: children
+    })]
+  });
 }
-
 function ServerSideRender(props) {
   const {
     attributes,
@@ -163,36 +273,44 @@
     className,
     httpMethod = 'GET',
     urlQueryArgs,
+    skipBlockSupportAttributes = false,
     EmptyResponsePlaceholder = DefaultEmptyResponsePlaceholder,
     ErrorResponsePlaceholder = DefaultErrorResponsePlaceholder,
     LoadingResponsePlaceholder = DefaultLoadingResponsePlaceholder
   } = props;
-  const isMountedRef = (0,external_wp_element_namespaceObject.useRef)(true);
+  const isMountedRef = (0,external_wp_element_namespaceObject.useRef)(false);
   const [showLoader, setShowLoader] = (0,external_wp_element_namespaceObject.useState)(false);
   const fetchRequestRef = (0,external_wp_element_namespaceObject.useRef)();
   const [response, setResponse] = (0,external_wp_element_namespaceObject.useState)(null);
   const prevProps = (0,external_wp_compose_namespaceObject.usePrevious)(props);
   const [isLoading, setIsLoading] = (0,external_wp_element_namespaceObject.useState)(false);
-
   function fetchData() {
+    var _sanitizedAttributes, _sanitizedAttributes2;
     if (!isMountedRef.current) {
       return;
     }
-
     setIsLoading(true);
 
-    const sanitizedAttributes = attributes && (0,external_wp_blocks_namespaceObject.__experimentalSanitizeBlockAttributes)(block, attributes); // If httpMethod is 'POST', send the attributes in the request body instead of the URL.
-    // This allows sending a larger attributes object than in a GET request, where the attributes are in the URL.
+    // Schedule showing the Spinner after 1 second.
+    const timeout = setTimeout(() => {
+      setShowLoader(true);
+    }, 1000);
+    let sanitizedAttributes = attributes && (0,external_wp_blocks_namespaceObject.__experimentalSanitizeBlockAttributes)(block, attributes);
+    if (skipBlockSupportAttributes) {
+      sanitizedAttributes = removeBlockSupportAttributes(sanitizedAttributes);
+    }
 
-
+    // If httpMethod is 'POST', send the attributes in the request body instead of the URL.
+    // This allows sending a larger attributes object than in a GET request, where the attributes are in the URL.
     const isPostRequest = 'POST' === httpMethod;
-    const urlAttributes = isPostRequest ? null : sanitizedAttributes !== null && sanitizedAttributes !== void 0 ? sanitizedAttributes : null;
+    const urlAttributes = isPostRequest ? null : (_sanitizedAttributes = sanitizedAttributes) !== null && _sanitizedAttributes !== void 0 ? _sanitizedAttributes : null;
     const path = rendererPath(block, urlAttributes, urlQueryArgs);
     const data = isPostRequest ? {
-      attributes: sanitizedAttributes !== null && sanitizedAttributes !== void 0 ? sanitizedAttributes : null
-    } : null; // Store the latest fetch request so that when we process it, we can
+      attributes: (_sanitizedAttributes2 = sanitizedAttributes) !== null && _sanitizedAttributes2 !== void 0 ? _sanitizedAttributes2 : null
+    } : null;
+
+    // Store the latest fetch request so that when we process it, we can
     // check if it is the current request, to avoid race conditions on slow networks.
-
     const fetchRequest = fetchRequestRef.current = external_wp_apiFetch_default()({
       path,
       data,
@@ -211,73 +329,63 @@
     }).finally(() => {
       if (isMountedRef.current && fetchRequest === fetchRequestRef.current) {
         setIsLoading(false);
+        // Cancel the timeout to show the Spinner.
+        setShowLoader(false);
+        clearTimeout(timeout);
       }
     });
     return fetchRequest;
   }
+  const debouncedFetchData = (0,external_wp_compose_namespaceObject.useDebounce)(fetchData, 500);
 
-  const debouncedFetchData = (0,external_wp_compose_namespaceObject.useDebounce)(fetchData, 500); // When the component unmounts, set isMountedRef to false. This will
+  // When the component unmounts, set isMountedRef to false. This will
   // let the async fetch callbacks know when to stop.
-
-  (0,external_wp_element_namespaceObject.useEffect)(() => () => {
-    isMountedRef.current = false;
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    isMountedRef.current = true;
+    return () => {
+      isMountedRef.current = false;
+    };
   }, []);
   (0,external_wp_element_namespaceObject.useEffect)(() => {
     // Don't debounce the first fetch. This ensures that the first render
     // shows data as soon as possible.
     if (prevProps === undefined) {
       fetchData();
-    } else if (!(0,external_lodash_namespaceObject.isEqual)(prevProps, props)) {
+    } else if (!es6_default()(prevProps, props)) {
       debouncedFetchData();
     }
   });
-  /**
-   * Effect to handle showing the loading placeholder.
-   * Show it only if there is no previous response or
-   * the request takes more than one second.
-   */
-
-  (0,external_wp_element_namespaceObject.useEffect)(() => {
-    if (!isLoading) {
-      return;
-    }
-
-    const timeout = setTimeout(() => {
-      setShowLoader(true);
-    }, 1000);
-    return () => clearTimeout(timeout);
-  }, [isLoading]);
   const hasResponse = !!response;
   const hasEmptyResponse = response === '';
-  const hasError = response === null || response === void 0 ? void 0 : response.error;
-
+  const hasError = response?.error;
   if (isLoading) {
-    return (0,external_wp_element_namespaceObject.createElement)(LoadingResponsePlaceholder, _extends({}, props, {
-      showLoader: showLoader
-    }), hasResponse && (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.RawHTML, {
-      className: className
-    }, response));
+    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(LoadingResponsePlaceholder, {
+      ...props,
+      showLoader: showLoader,
+      children: hasResponse && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_element_namespaceObject.RawHTML, {
+        className: className,
+        children: response
+      })
+    });
   }
-
   if (hasEmptyResponse || !hasResponse) {
-    return (0,external_wp_element_namespaceObject.createElement)(EmptyResponsePlaceholder, props);
+    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EmptyResponsePlaceholder, {
+      ...props
+    });
   }
-
   if (hasError) {
-    return (0,external_wp_element_namespaceObject.createElement)(ErrorResponsePlaceholder, _extends({
-      response: response
-    }, props));
+    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ErrorResponsePlaceholder, {
+      response: response,
+      ...props
+    });
   }
-
-  return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.RawHTML, {
-    className: className
-  }, response);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_element_namespaceObject.RawHTML, {
+    className: className,
+    children: response
+  });
 }
 
 ;// CONCATENATED MODULE: ./node_modules/@wordpress/server-side-render/build-module/index.js
-
-
-
 /**
  * WordPress dependencies
  */
@@ -293,62 +401,47 @@
  * Constants
  */
 
-const EMPTY_OBJECT = {};
+const build_module_EMPTY_OBJECT = {};
 const ExportedServerSideRender = (0,external_wp_data_namespaceObject.withSelect)(select => {
   // FIXME: @wordpress/server-side-render should not depend on @wordpress/editor.
   // It is used by blocks that can be loaded into a *non-post* block editor.
   // eslint-disable-next-line @wordpress/data-no-store-string-literals
   const coreEditorSelect = select('core/editor');
-
   if (coreEditorSelect) {
-    const currentPostId = coreEditorSelect.getCurrentPostId(); // For templates and template parts we use a custom ID format.
+    const currentPostId = coreEditorSelect.getCurrentPostId();
+    // For templates and template parts we use a custom ID format.
     // Since they aren't real posts, we don't want to use their ID
     // for server-side rendering. Since they use a string based ID,
     // we can assume real post IDs are numbers.
-
     if (currentPostId && typeof currentPostId === 'number') {
       return {
         currentPostId
       };
     }
   }
-
-  return EMPTY_OBJECT;
-})(_ref => {
-  let {
-    urlQueryArgs = EMPTY_OBJECT,
-    currentPostId,
-    ...props
-  } = _ref;
+  return build_module_EMPTY_OBJECT;
+})(({
+  urlQueryArgs = build_module_EMPTY_OBJECT,
+  currentPostId,
+  ...props
+}) => {
   const newUrlQueryArgs = (0,external_wp_element_namespaceObject.useMemo)(() => {
     if (!currentPostId) {
       return urlQueryArgs;
     }
-
     return {
       post_id: currentPostId,
       ...urlQueryArgs
     };
   }, [currentPostId, urlQueryArgs]);
-  return (0,external_wp_element_namespaceObject.createElement)(ServerSideRender, _extends({
-    urlQueryArgs: newUrlQueryArgs
-  }, props));
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ServerSideRender, {
+    urlQueryArgs: newUrlQueryArgs,
+    ...props
+  });
 });
+/* harmony default export */ const build_module = (ExportedServerSideRender);
 
-if (window && window.wp && window.wp.components) {
-  window.wp.components.ServerSideRender = (0,external_wp_element_namespaceObject.forwardRef)((props, ref) => {
-    external_wp_deprecated_default()('wp.components.ServerSideRender', {
-      version: '6.2',
-      since: '5.3',
-      alternative: 'wp.serverSideRender'
-    });
-    return (0,external_wp_element_namespaceObject.createElement)(ExportedServerSideRender, _extends({}, props, {
-      ref: ref
-    }));
-  });
-}
-
-/* harmony default export */ var build_module = (ExportedServerSideRender);
+})();
 
 (window.wp = window.wp || {}).serverSideRender = __webpack_exports__["default"];
 /******/ })()