PluginProbe
Gutenberg / 16.6.0
Gutenberg v16.6.0
24.0.0 23.9.1 23.9.0 23.8.0 23.7.2 23.7.1 23.7.0 23.6.1 23.6.2 23.6.0 23.5.3 23.5.2 23.5.1 23.5.0 23.4.0 23.3.2 23.3.1 23.3.0 23.2.0 23.2.1 23.2.2 23.1.1 23.1.0 23.0.1 12.6.0 All 403 releases
gutenberg / build / api-fetch / index.js

index.js in Gutenberg 16.6.0, at build/api-fetch/index.js

755 lines 22.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 ;// CONCATENATED MODULE: external ["wp","i18n"]
33 const external_wp_i18n_namespaceObject = window["wp"]["i18n"];
34 ;// CONCATENATED MODULE: ./packages/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 ;// CONCATENATED MODULE: ./packages/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 ;// CONCATENATED MODULE: ./packages/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 ;// CONCATENATED MODULE: external ["wp","url"]
131 const external_wp_url_namespaceObject = window["wp"]["url"];
132 ;// CONCATENATED MODULE: ./packages/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 return Promise.resolve(parse ? responseData.body : new window.Response(JSON.stringify(responseData.body), {
190 status: 200,
191 statusText: 'OK',
192 headers: responseData.headers
193 }));
194 }
195 /* harmony default export */ const preloading = (createPreloadingMiddleware);
196
197 ;// CONCATENATED MODULE: ./packages/api-fetch/build-module/middlewares/fetch-all-middleware.js
198 /**
199 * WordPress dependencies
200 */
201
202
203 /**
204 * Internal dependencies
205 */
206
207
208 /**
209 * Apply query arguments to both URL and Path, whichever is present.
210 *
211 * @param {import('../types').APIFetchOptions} props
212 * @param {Record<string, string | number>} queryArgs
213 * @return {import('../types').APIFetchOptions} The request with the modified query args
214 */
215 const modifyQuery = ({
216 path,
217 url,
218 ...options
219 }, queryArgs) => ({
220 ...options,
221 url: url && (0,external_wp_url_namespaceObject.addQueryArgs)(url, queryArgs),
222 path: path && (0,external_wp_url_namespaceObject.addQueryArgs)(path, queryArgs)
223 });
224
225 /**
226 * Duplicates parsing functionality from apiFetch.
227 *
228 * @param {Response} response
229 * @return {Promise<any>} Parsed response json.
230 */
231 const parseResponse = response => response.json ? response.json() : Promise.reject(response);
232
233 /**
234 * @param {string | null} linkHeader
235 * @return {{ next?: string }} The parsed link header.
236 */
237 const parseLinkHeader = linkHeader => {
238 if (!linkHeader) {
239 return {};
240 }
241 const match = linkHeader.match(/<([^>]+)>; rel="next"/);
242 return match ? {
243 next: match[1]
244 } : {};
245 };
246
247 /**
248 * @param {Response} response
249 * @return {string | undefined} The next page URL.
250 */
251 const getNextPageUrl = response => {
252 const {
253 next
254 } = parseLinkHeader(response.headers.get('link'));
255 return next;
256 };
257
258 /**
259 * @param {import('../types').APIFetchOptions} options
260 * @return {boolean} True if the request contains an unbounded query.
261 */
262 const requestContainsUnboundedQuery = options => {
263 const pathIsUnbounded = !!options.path && options.path.indexOf('per_page=-1') !== -1;
264 const urlIsUnbounded = !!options.url && options.url.indexOf('per_page=-1') !== -1;
265 return pathIsUnbounded || urlIsUnbounded;
266 };
267
268 /**
269 * The REST API enforces an upper limit on the per_page option. To handle large
270 * collections, apiFetch consumers can pass `per_page=-1`; this middleware will
271 * then recursively assemble a full response array from all available pages.
272 *
273 * @type {import('../types').APIFetchMiddleware}
274 */
275 const fetchAllMiddleware = async (options, next) => {
276 if (options.parse === false) {
277 // If a consumer has opted out of parsing, do not apply middleware.
278 return next(options);
279 }
280 if (!requestContainsUnboundedQuery(options)) {
281 // If neither url nor path is requesting all items, do not apply middleware.
282 return next(options);
283 }
284
285 // Retrieve requested page of results.
286 const response = await build_module({
287 ...modifyQuery(options, {
288 per_page: 100
289 }),
290 // Ensure headers are returned for page 1.
291 parse: false
292 });
293 const results = await parseResponse(response);
294 if (!Array.isArray(results)) {
295 // We have no reliable way of merging non-array results.
296 return results;
297 }
298 let nextPage = getNextPageUrl(response);
299 if (!nextPage) {
300 // There are no further pages to request.
301 return results;
302 }
303
304 // Iteratively fetch all remaining pages until no "next" header is found.
305 let mergedResults = /** @type {any[]} */[].concat(results);
306 while (nextPage) {
307 const nextResponse = await build_module({
308 ...options,
309 // Ensure the URL for the next page is used instead of any provided path.
310 path: undefined,
311 url: nextPage,
312 // Ensure we still get headers so we can identify the next page.
313 parse: false
314 });
315 const nextResults = await parseResponse(nextResponse);
316 mergedResults = mergedResults.concat(nextResults);
317 nextPage = getNextPageUrl(nextResponse);
318 }
319 return mergedResults;
320 };
321 /* harmony default export */ const fetch_all_middleware = (fetchAllMiddleware);
322
323 ;// CONCATENATED MODULE: ./packages/api-fetch/build-module/middlewares/http-v1.js
324 /**
325 * Set of HTTP methods which are eligible to be overridden.
326 *
327 * @type {Set<string>}
328 */
329 const OVERRIDE_METHODS = new Set(['PATCH', 'PUT', 'DELETE']);
330
331 /**
332 * Default request method.
333 *
334 * "A request has an associated method (a method). Unless stated otherwise it
335 * is `GET`."
336 *
337 * @see https://fetch.spec.whatwg.org/#requests
338 *
339 * @type {string}
340 */
341 const DEFAULT_METHOD = 'GET';
342
343 /**
344 * API Fetch middleware which overrides the request method for HTTP v1
345 * compatibility leveraging the REST API X-HTTP-Method-Override header.
346 *
347 * @type {import('../types').APIFetchMiddleware}
348 */
349 const httpV1Middleware = (options, next) => {
350 const {
351 method = DEFAULT_METHOD
352 } = options;
353 if (OVERRIDE_METHODS.has(method.toUpperCase())) {
354 options = {
355 ...options,
356 headers: {
357 ...options.headers,
358 'X-HTTP-Method-Override': method,
359 'Content-Type': 'application/json'
360 },
361 method: 'POST'
362 };
363 }
364 return next(options);
365 };
366 /* harmony default export */ const http_v1 = (httpV1Middleware);
367
368 ;// CONCATENATED MODULE: ./packages/api-fetch/build-module/middlewares/user-locale.js
369 /**
370 * WordPress dependencies
371 */
372
373
374 /**
375 * @type {import('../types').APIFetchMiddleware}
376 */
377 const userLocaleMiddleware = (options, next) => {
378 if (typeof options.url === 'string' && !(0,external_wp_url_namespaceObject.hasQueryArg)(options.url, '_locale')) {
379 options.url = (0,external_wp_url_namespaceObject.addQueryArgs)(options.url, {
380 _locale: 'user'
381 });
382 }
383 if (typeof options.path === 'string' && !(0,external_wp_url_namespaceObject.hasQueryArg)(options.path, '_locale')) {
384 options.path = (0,external_wp_url_namespaceObject.addQueryArgs)(options.path, {
385 _locale: 'user'
386 });
387 }
388 return next(options);
389 };
390 /* harmony default export */ const user_locale = (userLocaleMiddleware);
391
392 ;// CONCATENATED MODULE: ./packages/api-fetch/build-module/utils/response.js
393 /**
394 * WordPress dependencies
395 */
396
397
398 /**
399 * Parses the apiFetch response.
400 *
401 * @param {Response} response
402 * @param {boolean} shouldParseResponse
403 *
404 * @return {Promise<any> | null | Response} Parsed response.
405 */
406 const response_parseResponse = (response, shouldParseResponse = true) => {
407 if (shouldParseResponse) {
408 if (response.status === 204) {
409 return null;
410 }
411 return response.json ? response.json() : Promise.reject(response);
412 }
413 return response;
414 };
415
416 /**
417 * Calls the `json` function on the Response, throwing an error if the response
418 * doesn't have a json function or if parsing the json itself fails.
419 *
420 * @param {Response} response
421 * @return {Promise<any>} Parsed response.
422 */
423 const parseJsonAndNormalizeError = response => {
424 const invalidJsonError = {
425 code: 'invalid_json',
426 message: (0,external_wp_i18n_namespaceObject.__)('The response is not a valid JSON response.')
427 };
428 if (!response || !response.json) {
429 throw invalidJsonError;
430 }
431 return response.json().catch(() => {
432 throw invalidJsonError;
433 });
434 };
435
436 /**
437 * Parses the apiFetch response properly and normalize response errors.
438 *
439 * @param {Response} response
440 * @param {boolean} shouldParseResponse
441 *
442 * @return {Promise<any>} Parsed response.
443 */
444 const parseResponseAndNormalizeError = (response, shouldParseResponse = true) => {
445 return Promise.resolve(response_parseResponse(response, shouldParseResponse)).catch(res => parseAndThrowError(res, shouldParseResponse));
446 };
447
448 /**
449 * Parses a response, throwing an error if parsing the response fails.
450 *
451 * @param {Response} response
452 * @param {boolean} shouldParseResponse
453 * @return {Promise<any>} Parsed response.
454 */
455 function parseAndThrowError(response, shouldParseResponse = true) {
456 if (!shouldParseResponse) {
457 throw response;
458 }
459 return parseJsonAndNormalizeError(response).then(error => {
460 const unknownError = {
461 code: 'unknown_error',
462 message: (0,external_wp_i18n_namespaceObject.__)('An unknown error occurred.')
463 };
464 throw error || unknownError;
465 });
466 }
467
468 ;// CONCATENATED MODULE: ./packages/api-fetch/build-module/middlewares/media-upload.js
469 /**
470 * WordPress dependencies
471 */
472
473
474 /**
475 * Internal dependencies
476 */
477
478
479 /**
480 * @param {import('../types').APIFetchOptions} options
481 * @return {boolean} True if the request is for media upload.
482 */
483 function isMediaUploadRequest(options) {
484 const isCreateMethod = !!options.method && options.method === 'POST';
485 const isMediaEndpoint = !!options.path && options.path.indexOf('/wp/v2/media') !== -1 || !!options.url && options.url.indexOf('/wp/v2/media') !== -1;
486 return isMediaEndpoint && isCreateMethod;
487 }
488
489 /**
490 * Middleware handling media upload failures and retries.
491 *
492 * @type {import('../types').APIFetchMiddleware}
493 */
494 const mediaUploadMiddleware = (options, next) => {
495 if (!isMediaUploadRequest(options)) {
496 return next(options);
497 }
498 let retries = 0;
499 const maxRetries = 5;
500
501 /**
502 * @param {string} attachmentId
503 * @return {Promise<any>} Processed post response.
504 */
505 const postProcess = attachmentId => {
506 retries++;
507 return next({
508 path: `/wp/v2/media/${attachmentId}/post-process`,
509 method: 'POST',
510 data: {
511 action: 'create-image-subsizes'
512 },
513 parse: false
514 }).catch(() => {
515 if (retries < maxRetries) {
516 return postProcess(attachmentId);
517 }
518 next({
519 path: `/wp/v2/media/${attachmentId}?force=true`,
520 method: 'DELETE'
521 });
522 return Promise.reject();
523 });
524 };
525 return next({
526 ...options,
527 parse: false
528 }).catch(response => {
529 const attachmentId = response.headers.get('x-wp-upload-attachment-id');
530 if (response.status >= 500 && response.status < 600 && attachmentId) {
531 return postProcess(attachmentId).catch(() => {
532 if (options.parse !== false) {
533 return Promise.reject({
534 code: 'post_process',
535 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.')
536 });
537 }
538 return Promise.reject(response);
539 });
540 }
541 return parseAndThrowError(response, options.parse);
542 }).then(response => parseResponseAndNormalizeError(response, options.parse));
543 };
544 /* harmony default export */ const media_upload = (mediaUploadMiddleware);
545
546 ;// CONCATENATED MODULE: ./packages/api-fetch/build-module/middlewares/theme-preview.js
547 /**
548 * WordPress dependencies
549 */
550
551
552 /**
553 * This appends a `wp_theme_preview` parameter to the REST API request URL if
554 * the admin URL contains a `theme` GET parameter.
555 *
556 * @param {Record<string, any>} themePath
557 * @return {import('../types').APIFetchMiddleware} Preloading middleware.
558 */
559 const createThemePreviewMiddleware = themePath => (options, next) => {
560 if (typeof options.url === 'string' && !(0,external_wp_url_namespaceObject.hasQueryArg)(options.url, 'wp_theme_preview')) {
561 options.url = (0,external_wp_url_namespaceObject.addQueryArgs)(options.url, {
562 wp_theme_preview: themePath
563 });
564 }
565 if (typeof options.path === 'string' && !(0,external_wp_url_namespaceObject.hasQueryArg)(options.path, 'wp_theme_preview')) {
566 options.path = (0,external_wp_url_namespaceObject.addQueryArgs)(options.path, {
567 wp_theme_preview: themePath
568 });
569 }
570 return next(options);
571 };
572 /* harmony default export */ const theme_preview = (createThemePreviewMiddleware);
573
574 ;// CONCATENATED MODULE: ./packages/api-fetch/build-module/index.js
575 /**
576 * WordPress dependencies
577 */
578
579
580 /**
581 * Internal dependencies
582 */
583
584
585
586
587
588
589
590
591
592
593
594 /**
595 * Default set of header values which should be sent with every request unless
596 * explicitly provided through apiFetch options.
597 *
598 * @type {Record<string, string>}
599 */
600 const DEFAULT_HEADERS = {
601 // The backend uses the Accept header as a condition for considering an
602 // incoming request as a REST request.
603 //
604 // See: https://core.trac.wordpress.org/ticket/44534
605 Accept: 'application/json, */*;q=0.1'
606 };
607
608 /**
609 * Default set of fetch option values which should be sent with every request
610 * unless explicitly provided through apiFetch options.
611 *
612 * @type {Object}
613 */
614 const DEFAULT_OPTIONS = {
615 credentials: 'include'
616 };
617
618 /** @typedef {import('./types').APIFetchMiddleware} APIFetchMiddleware */
619 /** @typedef {import('./types').APIFetchOptions} APIFetchOptions */
620
621 /**
622 * @type {import('./types').APIFetchMiddleware[]}
623 */
624 const middlewares = [user_locale, namespace_endpoint, http_v1, fetch_all_middleware];
625
626 /**
627 * Register a middleware
628 *
629 * @param {import('./types').APIFetchMiddleware} middleware
630 */
631 function registerMiddleware(middleware) {
632 middlewares.unshift(middleware);
633 }
634
635 /**
636 * Checks the status of a response, throwing the Response as an error if
637 * it is outside the 200 range.
638 *
639 * @param {Response} response
640 * @return {Response} The response if the status is in the 200 range.
641 */
642 const checkStatus = response => {
643 if (response.status >= 200 && response.status < 300) {
644 return response;
645 }
646 throw response;
647 };
648
649 /** @typedef {(options: import('./types').APIFetchOptions) => Promise<any>} FetchHandler*/
650
651 /**
652 * @type {FetchHandler}
653 */
654 const defaultFetchHandler = nextOptions => {
655 const {
656 url,
657 path,
658 data,
659 parse = true,
660 ...remainingOptions
661 } = nextOptions;
662 let {
663 body,
664 headers
665 } = nextOptions;
666
667 // Merge explicitly-provided headers with default values.
668 headers = {
669 ...DEFAULT_HEADERS,
670 ...headers
671 };
672
673 // The `data` property is a shorthand for sending a JSON body.
674 if (data) {
675 body = JSON.stringify(data);
676 headers['Content-Type'] = 'application/json';
677 }
678 const responsePromise = window.fetch(
679 // Fall back to explicitly passing `window.location` which is the behavior if `undefined` is passed.
680 url || path || window.location.href, {
681 ...DEFAULT_OPTIONS,
682 ...remainingOptions,
683 body,
684 headers
685 });
686 return responsePromise.then(value => Promise.resolve(value).then(checkStatus).catch(response => parseAndThrowError(response, parse)).then(response => parseResponseAndNormalizeError(response, parse)), err => {
687 // Re-throw AbortError for the users to handle it themselves.
688 if (err && err.name === 'AbortError') {
689 throw err;
690 }
691
692 // Otherwise, there is most likely no network connection.
693 // Unfortunately the message might depend on the browser.
694 throw {
695 code: 'fetch_error',
696 message: (0,external_wp_i18n_namespaceObject.__)('You are probably offline.')
697 };
698 });
699 };
700
701 /** @type {FetchHandler} */
702 let fetchHandler = defaultFetchHandler;
703
704 /**
705 * Defines a custom fetch handler for making the requests that will override
706 * the default one using window.fetch
707 *
708 * @param {FetchHandler} newFetchHandler The new fetch handler
709 */
710 function setFetchHandler(newFetchHandler) {
711 fetchHandler = newFetchHandler;
712 }
713
714 /**
715 * @template T
716 * @param {import('./types').APIFetchOptions} options
717 * @return {Promise<T>} A promise representing the request processed via the registered middlewares.
718 */
719 function apiFetch(options) {
720 // creates a nested function chain that calls all middlewares and finally the `fetchHandler`,
721 // converting `middlewares = [ m1, m2, m3 ]` into:
722 // ```
723 // opts1 => m1( opts1, opts2 => m2( opts2, opts3 => m3( opts3, fetchHandler ) ) );
724 // ```
725 const enhancedHandler = middlewares.reduceRight(( /** @type {FetchHandler} */next, middleware) => {
726 return workingOptions => middleware(workingOptions, next);
727 }, fetchHandler);
728 return enhancedHandler(options).catch(error => {
729 if (error.code !== 'rest_cookie_invalid_nonce') {
730 return Promise.reject(error);
731 }
732
733 // If the nonce is invalid, refresh it and try again.
734 return window
735 // @ts-ignore
736 .fetch(apiFetch.nonceEndpoint).then(checkStatus).then(data => data.text()).then(text => {
737 // @ts-ignore
738 apiFetch.nonceMiddleware.nonce = text;
739 return apiFetch(options);
740 });
741 });
742 }
743 apiFetch.use = registerMiddleware;
744 apiFetch.setFetchHandler = setFetchHandler;
745 apiFetch.createNonceMiddleware = nonce;
746 apiFetch.createPreloadingMiddleware = preloading;
747 apiFetch.createRootURLMiddleware = root_url;
748 apiFetch.fetchAllMiddleware = fetch_all_middleware;
749 apiFetch.mediaUploadMiddleware = media_upload;
750 apiFetch.createThemePreviewMiddleware = theme_preview;
751 /* harmony default export */ const build_module = (apiFetch);
752
753 (window.wp = window.wp || {}).apiFetch = __webpack_exports__["default"];
754 /******/ })()
755 ;