diff -r 7b1b88e27a20 -r 48c4eec2b7e6 wp/wp-includes/js/dist/server-side-render.js --- 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"]; /******/ })()