[ Index ] |
PHP Cross Reference of WordPress Trunk (Updated Daily) |
[Summary view] [Print] [Text view]
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 /************************************************************************/ 25 var __webpack_exports__ = {}; 26 27 // EXPORTS 28 __webpack_require__.d(__webpack_exports__, { 29 "default": () => (/* binding */ build_module) 30 }); 31 32 ;// external ["wp","i18n"] 33 const external_wp_i18n_namespaceObject = window["wp"]["i18n"]; 34 ;// ./node_modules/@wordpress/api-fetch/build-module/middlewares/nonce.js 35 /** 36 * @param {string} nonce 37 * @return {import('../types').APIFetchMiddleware & { nonce: string }} A middleware to enhance a request with a nonce. 38 */ 39 function createNonceMiddleware(nonce) { 40 /** 41 * @type {import('../types').APIFetchMiddleware & { nonce: string }} 42 */ 43 const middleware = (options, next) => { 44 const { 45 headers = {} 46 } = options; 47 48 // If an 'X-WP-Nonce' header (or any case-insensitive variation 49 // thereof) was specified, no need to add a nonce header. 50 for (const headerName in headers) { 51 if (headerName.toLowerCase() === 'x-wp-nonce' && headers[headerName] === middleware.nonce) { 52 return next(options); 53 } 54 } 55 return next({ 56 ...options, 57 headers: { 58 ...headers, 59 'X-WP-Nonce': middleware.nonce 60 } 61 }); 62 }; 63 middleware.nonce = nonce; 64 return middleware; 65 } 66 /* harmony default export */ const nonce = (createNonceMiddleware); 67 68 ;// ./node_modules/@wordpress/api-fetch/build-module/middlewares/namespace-endpoint.js 69 /** 70 * @type {import('../types').APIFetchMiddleware} 71 */ 72 const namespaceAndEndpointMiddleware = (options, next) => { 73 let path = options.path; 74 let namespaceTrimmed, endpointTrimmed; 75 if (typeof options.namespace === 'string' && typeof options.endpoint === 'string') { 76 namespaceTrimmed = options.namespace.replace(/^\/|\/$/g, ''); 77 endpointTrimmed = options.endpoint.replace(/^\//, ''); 78 if (endpointTrimmed) { 79 path = namespaceTrimmed + '/' + endpointTrimmed; 80 } else { 81 path = namespaceTrimmed; 82 } 83 } 84 delete options.namespace; 85 delete options.endpoint; 86 return next({ 87 ...options, 88 path 89 }); 90 }; 91 /* harmony default export */ const namespace_endpoint = (namespaceAndEndpointMiddleware); 92 93 ;// ./node_modules/@wordpress/api-fetch/build-module/middlewares/root-url.js 94 /** 95 * Internal dependencies 96 */ 97 98 99 /** 100 * @param {string} rootURL 101 * @return {import('../types').APIFetchMiddleware} Root URL middleware. 102 */ 103 const createRootURLMiddleware = rootURL => (options, next) => { 104 return namespace_endpoint(options, optionsWithPath => { 105 let url = optionsWithPath.url; 106 let path = optionsWithPath.path; 107 let apiRoot; 108 if (typeof path === 'string') { 109 apiRoot = rootURL; 110 if (-1 !== rootURL.indexOf('?')) { 111 path = path.replace('?', '&'); 112 } 113 path = path.replace(/^\//, ''); 114 115 // API root may already include query parameter prefix if site is 116 // configured to use plain permalinks. 117 if ('string' === typeof apiRoot && -1 !== apiRoot.indexOf('?')) { 118 path = path.replace('?', '&'); 119 } 120 url = apiRoot + path; 121 } 122 return next({ 123 ...optionsWithPath, 124 url 125 }); 126 }); 127 }; 128 /* harmony default export */ const root_url = (createRootURLMiddleware); 129 130 ;// external ["wp","url"] 131 const external_wp_url_namespaceObject = window["wp"]["url"]; 132 ;// ./node_modules/@wordpress/api-fetch/build-module/middlewares/preloading.js 133 /** 134 * WordPress dependencies 135 */ 136 137 138 /** 139 * @param {Record<string, any>} preloadedData 140 * @return {import('../types').APIFetchMiddleware} Preloading middleware. 141 */ 142 function createPreloadingMiddleware(preloadedData) { 143 const cache = Object.fromEntries(Object.entries(preloadedData).map(([path, data]) => [(0,external_wp_url_namespaceObject.normalizePath)(path), data])); 144 return (options, next) => { 145 const { 146 parse = true 147 } = options; 148 /** @type {string | void} */ 149 let rawPath = options.path; 150 if (!rawPath && options.url) { 151 const { 152 rest_route: pathFromQuery, 153 ...queryArgs 154 } = (0,external_wp_url_namespaceObject.getQueryArgs)(options.url); 155 if (typeof pathFromQuery === 'string') { 156 rawPath = (0,external_wp_url_namespaceObject.addQueryArgs)(pathFromQuery, queryArgs); 157 } 158 } 159 if (typeof rawPath !== 'string') { 160 return next(options); 161 } 162 const method = options.method || 'GET'; 163 const path = (0,external_wp_url_namespaceObject.normalizePath)(rawPath); 164 if ('GET' === method && cache[path]) { 165 const cacheData = cache[path]; 166 167 // Unsetting the cache key ensures that the data is only used a single time. 168 delete cache[path]; 169 return prepareResponse(cacheData, !!parse); 170 } else if ('OPTIONS' === method && cache[method] && cache[method][path]) { 171 const cacheData = cache[method][path]; 172 173 // Unsetting the cache key ensures that the data is only used a single time. 174 delete cache[method][path]; 175 return prepareResponse(cacheData, !!parse); 176 } 177 return next(options); 178 }; 179 } 180 181 /** 182 * This is a helper function that sends a success response. 183 * 184 * @param {Record<string, any>} responseData 185 * @param {boolean} parse 186 * @return {Promise<any>} Promise with the response. 187 */ 188 function prepareResponse(responseData, parse) { 189 if (parse) { 190 return Promise.resolve(responseData.body); 191 } 192 try { 193 return Promise.resolve(new window.Response(JSON.stringify(responseData.body), { 194 status: 200, 195 statusText: 'OK', 196 headers: responseData.headers 197 })); 198 } catch { 199 // See: https://github.com/WordPress/gutenberg/issues/67358#issuecomment-2621163926. 200 Object.entries(responseData.headers).forEach(([key, value]) => { 201 if (key.toLowerCase() === 'link') { 202 responseData.headers[key] = value.replace(/<([^>]+)>/, (/** @type {any} */_, /** @type {string} */url) => `<$encodeURI(url)}>`); 203 } 204 }); 205 return Promise.resolve(parse ? responseData.body : new window.Response(JSON.stringify(responseData.body), { 206 status: 200, 207 statusText: 'OK', 208 headers: responseData.headers 209 })); 210 } 211 } 212 /* harmony default export */ const preloading = (createPreloadingMiddleware); 213 214 ;// ./node_modules/@wordpress/api-fetch/build-module/middlewares/fetch-all-middleware.js 215 /** 216 * WordPress dependencies 217 */ 218 219 220 /** 221 * Internal dependencies 222 */ 223 224 225 /** 226 * Apply query arguments to both URL and Path, whichever is present. 227 * 228 * @param {import('../types').APIFetchOptions} props 229 * @param {Record<string, string | number>} queryArgs 230 * @return {import('../types').APIFetchOptions} The request with the modified query args 231 */ 232 const modifyQuery = ({ 233 path, 234 url, 235 ...options 236 }, queryArgs) => ({ 237 ...options, 238 url: url && (0,external_wp_url_namespaceObject.addQueryArgs)(url, queryArgs), 239 path: path && (0,external_wp_url_namespaceObject.addQueryArgs)(path, queryArgs) 240 }); 241 242 /** 243 * Duplicates parsing functionality from apiFetch. 244 * 245 * @param {Response} response 246 * @return {Promise<any>} Parsed response json. 247 */ 248 const parseResponse = response => response.json ? response.json() : Promise.reject(response); 249 250 /** 251 * @param {string | null} linkHeader 252 * @return {{ next?: string }} The parsed link header. 253 */ 254 const parseLinkHeader = linkHeader => { 255 if (!linkHeader) { 256 return {}; 257 } 258 const match = linkHeader.match(/<([^>]+)>; rel="next"/); 259 return match ? { 260 next: match[1] 261 } : {}; 262 }; 263 264 /** 265 * @param {Response} response 266 * @return {string | undefined} The next page URL. 267 */ 268 const getNextPageUrl = response => { 269 const { 270 next 271 } = parseLinkHeader(response.headers.get('link')); 272 return next; 273 }; 274 275 /** 276 * @param {import('../types').APIFetchOptions} options 277 * @return {boolean} True if the request contains an unbounded query. 278 */ 279 const requestContainsUnboundedQuery = options => { 280 const pathIsUnbounded = !!options.path && options.path.indexOf('per_page=-1') !== -1; 281 const urlIsUnbounded = !!options.url && options.url.indexOf('per_page=-1') !== -1; 282 return pathIsUnbounded || urlIsUnbounded; 283 }; 284 285 /** 286 * The REST API enforces an upper limit on the per_page option. To handle large 287 * collections, apiFetch consumers can pass `per_page=-1`; this middleware will 288 * then recursively assemble a full response array from all available pages. 289 * 290 * @type {import('../types').APIFetchMiddleware} 291 */ 292 const fetchAllMiddleware = async (options, next) => { 293 if (options.parse === false) { 294 // If a consumer has opted out of parsing, do not apply middleware. 295 return next(options); 296 } 297 if (!requestContainsUnboundedQuery(options)) { 298 // If neither url nor path is requesting all items, do not apply middleware. 299 return next(options); 300 } 301 302 // Retrieve requested page of results. 303 const response = await build_module({ 304 ...modifyQuery(options, { 305 per_page: 100 306 }), 307 // Ensure headers are returned for page 1. 308 parse: false 309 }); 310 const results = await parseResponse(response); 311 if (!Array.isArray(results)) { 312 // We have no reliable way of merging non-array results. 313 return results; 314 } 315 let nextPage = getNextPageUrl(response); 316 if (!nextPage) { 317 // There are no further pages to request. 318 return results; 319 } 320 321 // Iteratively fetch all remaining pages until no "next" header is found. 322 let mergedResults = /** @type {any[]} */[].concat(results); 323 while (nextPage) { 324 const nextResponse = await build_module({ 325 ...options, 326 // Ensure the URL for the next page is used instead of any provided path. 327 path: undefined, 328 url: nextPage, 329 // Ensure we still get headers so we can identify the next page. 330 parse: false 331 }); 332 const nextResults = await parseResponse(nextResponse); 333 mergedResults = mergedResults.concat(nextResults); 334 nextPage = getNextPageUrl(nextResponse); 335 } 336 return mergedResults; 337 }; 338 /* harmony default export */ const fetch_all_middleware = (fetchAllMiddleware); 339 340 ;// ./node_modules/@wordpress/api-fetch/build-module/middlewares/http-v1.js 341 /** 342 * Set of HTTP methods which are eligible to be overridden. 343 * 344 * @type {Set<string>} 345 */ 346 const OVERRIDE_METHODS = new Set(['PATCH', 'PUT', 'DELETE']); 347 348 /** 349 * Default request method. 350 * 351 * "A request has an associated method (a method). Unless stated otherwise it 352 * is `GET`." 353 * 354 * @see https://fetch.spec.whatwg.org/#requests 355 * 356 * @type {string} 357 */ 358 const DEFAULT_METHOD = 'GET'; 359 360 /** 361 * API Fetch middleware which overrides the request method for HTTP v1 362 * compatibility leveraging the REST API X-HTTP-Method-Override header. 363 * 364 * @type {import('../types').APIFetchMiddleware} 365 */ 366 const httpV1Middleware = (options, next) => { 367 const { 368 method = DEFAULT_METHOD 369 } = options; 370 if (OVERRIDE_METHODS.has(method.toUpperCase())) { 371 options = { 372 ...options, 373 headers: { 374 ...options.headers, 375 'X-HTTP-Method-Override': method, 376 'Content-Type': 'application/json' 377 }, 378 method: 'POST' 379 }; 380 } 381 return next(options); 382 }; 383 /* harmony default export */ const http_v1 = (httpV1Middleware); 384 385 ;// ./node_modules/@wordpress/api-fetch/build-module/middlewares/user-locale.js 386 /** 387 * WordPress dependencies 388 */ 389 390 391 /** 392 * @type {import('../types').APIFetchMiddleware} 393 */ 394 const userLocaleMiddleware = (options, next) => { 395 if (typeof options.url === 'string' && !(0,external_wp_url_namespaceObject.hasQueryArg)(options.url, '_locale')) { 396 options.url = (0,external_wp_url_namespaceObject.addQueryArgs)(options.url, { 397 _locale: 'user' 398 }); 399 } 400 if (typeof options.path === 'string' && !(0,external_wp_url_namespaceObject.hasQueryArg)(options.path, '_locale')) { 401 options.path = (0,external_wp_url_namespaceObject.addQueryArgs)(options.path, { 402 _locale: 'user' 403 }); 404 } 405 return next(options); 406 }; 407 /* harmony default export */ const user_locale = (userLocaleMiddleware); 408 409 ;// ./node_modules/@wordpress/api-fetch/build-module/utils/response.js 410 /** 411 * WordPress dependencies 412 */ 413 414 415 /** 416 * Parses the apiFetch response. 417 * 418 * @param {Response} response 419 * @param {boolean} shouldParseResponse 420 * 421 * @return {Promise<any> | null | Response} Parsed response. 422 */ 423 const response_parseResponse = (response, shouldParseResponse = true) => { 424 if (shouldParseResponse) { 425 if (response.status === 204) { 426 return null; 427 } 428 return response.json ? response.json() : Promise.reject(response); 429 } 430 return response; 431 }; 432 433 /** 434 * Calls the `json` function on the Response, throwing an error if the response 435 * doesn't have a json function or if parsing the json itself fails. 436 * 437 * @param {Response} response 438 * @return {Promise<any>} Parsed response. 439 */ 440 const parseJsonAndNormalizeError = response => { 441 const invalidJsonError = { 442 code: 'invalid_json', 443 message: (0,external_wp_i18n_namespaceObject.__)('The response is not a valid JSON response.') 444 }; 445 if (!response || !response.json) { 446 throw invalidJsonError; 447 } 448 return response.json().catch(() => { 449 throw invalidJsonError; 450 }); 451 }; 452 453 /** 454 * Parses the apiFetch response properly and normalize response errors. 455 * 456 * @param {Response} response 457 * @param {boolean} shouldParseResponse 458 * 459 * @return {Promise<any>} Parsed response. 460 */ 461 const parseResponseAndNormalizeError = (response, shouldParseResponse = true) => { 462 return Promise.resolve(response_parseResponse(response, shouldParseResponse)).catch(res => parseAndThrowError(res, shouldParseResponse)); 463 }; 464 465 /** 466 * Parses a response, throwing an error if parsing the response fails. 467 * 468 * @param {Response} response 469 * @param {boolean} shouldParseResponse 470 * @return {Promise<any>} Parsed response. 471 */ 472 function parseAndThrowError(response, shouldParseResponse = true) { 473 if (!shouldParseResponse) { 474 throw response; 475 } 476 return parseJsonAndNormalizeError(response).then(error => { 477 const unknownError = { 478 code: 'unknown_error', 479 message: (0,external_wp_i18n_namespaceObject.__)('An unknown error occurred.') 480 }; 481 throw error || unknownError; 482 }); 483 } 484 485 ;// ./node_modules/@wordpress/api-fetch/build-module/middlewares/media-upload.js 486 /** 487 * WordPress dependencies 488 */ 489 490 491 /** 492 * Internal dependencies 493 */ 494 495 496 /** 497 * @param {import('../types').APIFetchOptions} options 498 * @return {boolean} True if the request is for media upload. 499 */ 500 function isMediaUploadRequest(options) { 501 const isCreateMethod = !!options.method && options.method === 'POST'; 502 const isMediaEndpoint = !!options.path && options.path.indexOf('/wp/v2/media') !== -1 || !!options.url && options.url.indexOf('/wp/v2/media') !== -1; 503 return isMediaEndpoint && isCreateMethod; 504 } 505 506 /** 507 * Middleware handling media upload failures and retries. 508 * 509 * @type {import('../types').APIFetchMiddleware} 510 */ 511 const mediaUploadMiddleware = (options, next) => { 512 if (!isMediaUploadRequest(options)) { 513 return next(options); 514 } 515 let retries = 0; 516 const maxRetries = 5; 517 518 /** 519 * @param {string} attachmentId 520 * @return {Promise<any>} Processed post response. 521 */ 522 const postProcess = attachmentId => { 523 retries++; 524 return next({ 525 path: `/wp/v2/media/$attachmentId}/post-process`, 526 method: 'POST', 527 data: { 528 action: 'create-image-subsizes' 529 }, 530 parse: false 531 }).catch(() => { 532 if (retries < maxRetries) { 533 return postProcess(attachmentId); 534 } 535 next({ 536 path: `/wp/v2/media/$attachmentId}?force=true`, 537 method: 'DELETE' 538 }); 539 return Promise.reject(); 540 }); 541 }; 542 return next({ 543 ...options, 544 parse: false 545 }).catch(response => { 546 // `response` could actually be an error thrown by `defaultFetchHandler`. 547 if (!response.headers) { 548 return Promise.reject(response); 549 } 550 const attachmentId = response.headers.get('x-wp-upload-attachment-id'); 551 if (response.status >= 500 && response.status < 600 && attachmentId) { 552 return postProcess(attachmentId).catch(() => { 553 if (options.parse !== false) { 554 return Promise.reject({ 555 code: 'post_process', 556 message: (0,external_wp_i18n_namespaceObject.__)('Media upload failed. If this is a photo or a large image, please scale it down and try again.') 557 }); 558 } 559 return Promise.reject(response); 560 }); 561 } 562 return parseAndThrowError(response, options.parse); 563 }).then(response => parseResponseAndNormalizeError(response, options.parse)); 564 }; 565 /* harmony default export */ const media_upload = (mediaUploadMiddleware); 566 567 ;// ./node_modules/@wordpress/api-fetch/build-module/middlewares/theme-preview.js 568 /** 569 * WordPress dependencies 570 */ 571 572 573 /** 574 * This appends a `wp_theme_preview` parameter to the REST API request URL if 575 * the admin URL contains a `theme` GET parameter. 576 * 577 * If the REST API request URL has contained the `wp_theme_preview` parameter as `''`, 578 * then bypass this middleware. 579 * 580 * @param {Record<string, any>} themePath 581 * @return {import('../types').APIFetchMiddleware} Preloading middleware. 582 */ 583 const createThemePreviewMiddleware = themePath => (options, next) => { 584 if (typeof options.url === 'string') { 585 const wpThemePreview = (0,external_wp_url_namespaceObject.getQueryArg)(options.url, 'wp_theme_preview'); 586 if (wpThemePreview === undefined) { 587 options.url = (0,external_wp_url_namespaceObject.addQueryArgs)(options.url, { 588 wp_theme_preview: themePath 589 }); 590 } else if (wpThemePreview === '') { 591 options.url = (0,external_wp_url_namespaceObject.removeQueryArgs)(options.url, 'wp_theme_preview'); 592 } 593 } 594 if (typeof options.path === 'string') { 595 const wpThemePreview = (0,external_wp_url_namespaceObject.getQueryArg)(options.path, 'wp_theme_preview'); 596 if (wpThemePreview === undefined) { 597 options.path = (0,external_wp_url_namespaceObject.addQueryArgs)(options.path, { 598 wp_theme_preview: themePath 599 }); 600 } else if (wpThemePreview === '') { 601 options.path = (0,external_wp_url_namespaceObject.removeQueryArgs)(options.path, 'wp_theme_preview'); 602 } 603 } 604 return next(options); 605 }; 606 /* harmony default export */ const theme_preview = (createThemePreviewMiddleware); 607 608 ;// ./node_modules/@wordpress/api-fetch/build-module/index.js 609 /** 610 * WordPress dependencies 611 */ 612 613 614 /** 615 * Internal dependencies 616 */ 617 618 619 620 621 622 623 624 625 626 627 628 /** 629 * Default set of header values which should be sent with every request unless 630 * explicitly provided through apiFetch options. 631 * 632 * @type {Record<string, string>} 633 */ 634 const DEFAULT_HEADERS = { 635 // The backend uses the Accept header as a condition for considering an 636 // incoming request as a REST request. 637 // 638 // See: https://core.trac.wordpress.org/ticket/44534 639 Accept: 'application/json, */*;q=0.1' 640 }; 641 642 /** 643 * Default set of fetch option values which should be sent with every request 644 * unless explicitly provided through apiFetch options. 645 * 646 * @type {Object} 647 */ 648 const DEFAULT_OPTIONS = { 649 credentials: 'include' 650 }; 651 652 /** @typedef {import('./types').APIFetchMiddleware} APIFetchMiddleware */ 653 /** @typedef {import('./types').APIFetchOptions} APIFetchOptions */ 654 655 /** 656 * @type {import('./types').APIFetchMiddleware[]} 657 */ 658 const middlewares = [user_locale, namespace_endpoint, http_v1, fetch_all_middleware]; 659 660 /** 661 * Register a middleware 662 * 663 * @param {import('./types').APIFetchMiddleware} middleware 664 */ 665 function registerMiddleware(middleware) { 666 middlewares.unshift(middleware); 667 } 668 669 /** 670 * Checks the status of a response, throwing the Response as an error if 671 * it is outside the 200 range. 672 * 673 * @param {Response} response 674 * @return {Response} The response if the status is in the 200 range. 675 */ 676 const checkStatus = response => { 677 if (response.status >= 200 && response.status < 300) { 678 return response; 679 } 680 throw response; 681 }; 682 683 /** @typedef {(options: import('./types').APIFetchOptions) => Promise<any>} FetchHandler*/ 684 685 /** 686 * @type {FetchHandler} 687 */ 688 const defaultFetchHandler = nextOptions => { 689 const { 690 url, 691 path, 692 data, 693 parse = true, 694 ...remainingOptions 695 } = nextOptions; 696 let { 697 body, 698 headers 699 } = nextOptions; 700 701 // Merge explicitly-provided headers with default values. 702 headers = { 703 ...DEFAULT_HEADERS, 704 ...headers 705 }; 706 707 // The `data` property is a shorthand for sending a JSON body. 708 if (data) { 709 body = JSON.stringify(data); 710 headers['Content-Type'] = 'application/json'; 711 } 712 const responsePromise = window.fetch( 713 // Fall back to explicitly passing `window.location` which is the behavior if `undefined` is passed. 714 url || path || window.location.href, { 715 ...DEFAULT_OPTIONS, 716 ...remainingOptions, 717 body, 718 headers 719 }); 720 return responsePromise.then(value => Promise.resolve(value).then(checkStatus).catch(response => parseAndThrowError(response, parse)).then(response => parseResponseAndNormalizeError(response, parse)), err => { 721 // Re-throw AbortError for the users to handle it themselves. 722 if (err && err.name === 'AbortError') { 723 throw err; 724 } 725 726 // Otherwise, there is most likely no network connection. 727 // Unfortunately the message might depend on the browser. 728 throw { 729 code: 'fetch_error', 730 message: (0,external_wp_i18n_namespaceObject.__)('You are probably offline.') 731 }; 732 }); 733 }; 734 735 /** @type {FetchHandler} */ 736 let fetchHandler = defaultFetchHandler; 737 738 /** 739 * Defines a custom fetch handler for making the requests that will override 740 * the default one using window.fetch 741 * 742 * @param {FetchHandler} newFetchHandler The new fetch handler 743 */ 744 function setFetchHandler(newFetchHandler) { 745 fetchHandler = newFetchHandler; 746 } 747 748 /** 749 * @template T 750 * @param {import('./types').APIFetchOptions} options 751 * @return {Promise<T>} A promise representing the request processed via the registered middlewares. 752 */ 753 function apiFetch(options) { 754 // creates a nested function chain that calls all middlewares and finally the `fetchHandler`, 755 // converting `middlewares = [ m1, m2, m3 ]` into: 756 // ``` 757 // opts1 => m1( opts1, opts2 => m2( opts2, opts3 => m3( opts3, fetchHandler ) ) ); 758 // ``` 759 const enhancedHandler = middlewares.reduceRight((/** @type {FetchHandler} */next, middleware) => { 760 return workingOptions => middleware(workingOptions, next); 761 }, fetchHandler); 762 return enhancedHandler(options).catch(error => { 763 if (error.code !== 'rest_cookie_invalid_nonce') { 764 return Promise.reject(error); 765 } 766 767 // If the nonce is invalid, refresh it and try again. 768 return window 769 // @ts-ignore 770 .fetch(apiFetch.nonceEndpoint).then(checkStatus).then(data => data.text()).then(text => { 771 // @ts-ignore 772 apiFetch.nonceMiddleware.nonce = text; 773 return apiFetch(options); 774 }); 775 }); 776 } 777 apiFetch.use = registerMiddleware; 778 apiFetch.setFetchHandler = setFetchHandler; 779 apiFetch.createNonceMiddleware = nonce; 780 apiFetch.createPreloadingMiddleware = preloading; 781 apiFetch.createRootURLMiddleware = root_url; 782 apiFetch.fetchAllMiddleware = fetch_all_middleware; 783 apiFetch.mediaUploadMiddleware = media_upload; 784 apiFetch.createThemePreviewMiddleware = theme_preview; 785 /* harmony default export */ const build_module = (apiFetch); 786 787 (window.wp = window.wp || {}).apiFetch = __webpack_exports__["default"]; 788 /******/ })() 789 ;
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated : Sun Mar 9 08:20:01 2025 | Cross-referenced by PHPXref |