| @@ -1,4 +1,5 @@ | ||
| 1 | +(function() { | |
| 1 | 2 | "use strict"; |
| 2 | 3 | var wp; |
| 3 | 4 | (wp ||= {}).apiFetch = (() => { |
| 4 | 5 | var __create = Object.create; |
| @@ -38,8 +39,15 @@ | ||
| 38 | 39 | module.exports = window.wp.i18n; |
| 39 | 40 | } |
| 40 | 41 | }); |
| 41 | 42 | |
| 43 | + // package-external:@wordpress/private-apis | |
| 44 | + var require_private_apis = __commonJS({ | |
| 45 | + "package-external:@wordpress/private-apis"(exports, module) { | |
| 46 | + module.exports = window.wp.privateApis; | |
| 47 | + } | |
| 48 | + }); | |
| 49 | + | |
| 42 | 50 | // package-external:@wordpress/url |
| 43 | 51 | var require_url = __commonJS({ |
| 44 | 52 | "package-external:@wordpress/url"(exports, module) { |
| 45 | 53 | module.exports = window.wp.url; |
| @@ -52,8 +60,15 @@ | ||
| 52 | 60 | default: () => index_default |
| 53 | 61 | }); |
| 54 | 62 | var import_i18n3 = __toESM(require_i18n(), 1); |
| 55 | 63 | |
| 64 | + // packages/api-fetch/build-module/lock-unlock.mjs | |
| 65 | + var import_private_apis = __toESM(require_private_apis(), 1); | |
| 66 | + var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( | |
| 67 | + "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", | |
| 68 | + "@wordpress/api-fetch" | |
| 69 | + ); | |
| 70 | + | |
| 56 | 71 | // packages/api-fetch/build-module/middlewares/nonce.mjs |
| 57 | 72 | function createNonceMiddleware(nonce) { |
| 58 | 73 | const middleware = (options, next) => { |
| 59 | 74 | const { headers = {} } = options; |
| @@ -123,16 +138,21 @@ | ||
| 123 | 138 | var root_url_default = createRootURLMiddleware; |
| 124 | 139 | |
| 125 | 140 | // packages/api-fetch/build-module/middlewares/preloading.mjs |
| 126 | 141 | var import_url = __toESM(require_url(), 1); |
| 142 | + var ENABLE_MULTI_USE = /* @__PURE__ */ Symbol("preloadingEnableMultiUse"); | |
| 143 | + var CLEAR = /* @__PURE__ */ Symbol("preloadingClear"); | |
| 127 | 144 | function createPreloadingMiddleware(preloadedData) { |
| 128 | - const cache = Object.fromEntries( | |
| 145 | + const { OPTIONS = {}, ...GET } = Object.fromEntries( | |
| 129 | 146 | Object.entries(preloadedData).map(([path, data]) => [ |
| 130 | 147 | (0, import_url.normalizePath)(path), |
| 131 | 148 | data |
| 132 | 149 | ]) |
| 133 | 150 | ); |
| 134 | - return (options, next) => { | |
| 151 | + const unusedGet = new Set(Object.keys(GET)); | |
| 152 | + const unusedOptions = new Set(Object.keys(OPTIONS)); | |
| 153 | + let multiUse = false; | |
| 154 | + const middleware = (options, next) => { | |
| 135 | 155 | const { parse = true } = options; |
| 136 | 156 | let rawPath = options.path; |
| 137 | 157 | if (!rawPath && options.url) { |
| 138 | 158 | const { rest_route: pathFromQuery, ...queryArgs } = (0, import_url.getQueryArgs)( |
| @@ -146,19 +166,51 @@ | ||
| 146 | 166 | return next(options); |
| 147 | 167 | } |
| 148 | 168 | const method = options.method || "GET"; |
| 149 | 169 | const path = (0, import_url.normalizePath)(rawPath); |
| 150 | - if ("GET" === method && cache[path]) { | |
| 151 | - const cacheData = cache[path]; | |
| 152 | - delete cache[path]; | |
| 153 | - return prepareResponse(cacheData, !!parse); | |
| 154 | - } else if ("OPTIONS" === method && cache[method] && cache[method][path]) { | |
| 155 | - const cacheData = cache[method][path]; | |
| 156 | - delete cache[method][path]; | |
| 157 | - return prepareResponse(cacheData, !!parse); | |
| 170 | + if ("GET" === method && GET[path]) { | |
| 171 | + const data = GET[path]; | |
| 172 | + if (!multiUse) { | |
| 173 | + delete GET[path]; | |
| 174 | + } | |
| 175 | + unusedGet.delete(path); | |
| 176 | + return prepareResponse(data, !!parse); | |
| 177 | + } else if ("OPTIONS" === method && OPTIONS[path]) { | |
| 178 | + const data = OPTIONS[path]; | |
| 179 | + if (!multiUse) { | |
| 180 | + delete OPTIONS[path]; | |
| 181 | + } | |
| 182 | + unusedOptions.delete(path); | |
| 183 | + return prepareResponse(data, !!parse); | |
| 158 | 184 | } |
| 159 | 185 | return next(options); |
| 160 | 186 | }; |
| 187 | + middleware[ENABLE_MULTI_USE] = () => { | |
| 188 | + multiUse = true; | |
| 189 | + }; | |
| 190 | + middleware[CLEAR] = () => { | |
| 191 | + const tags = [ | |
| 192 | + ...Array.from(unusedGet, (p) => `GET ${p}`), | |
| 193 | + ...Array.from(unusedOptions, (p) => `OPTIONS ${p}`) | |
| 194 | + ]; | |
| 195 | + if (tags.length) { | |
| 196 | + console.warn( | |
| 197 | + "[api-fetch][preload] Some preloads were never consumed:", | |
| 198 | + tags | |
| 199 | + ); | |
| 200 | + } else { | |
| 201 | + console.log("[api-fetch][preload] All preloads consumed."); | |
| 202 | + } | |
| 203 | + unusedGet.clear(); | |
| 204 | + unusedOptions.clear(); | |
| 205 | + for (const key of Object.keys(GET)) { | |
| 206 | + delete GET[key]; | |
| 207 | + } | |
| 208 | + for (const key of Object.keys(OPTIONS)) { | |
| 209 | + delete OPTIONS[key]; | |
| 210 | + } | |
| 211 | + }; | |
| 212 | + return middleware; | |
| 161 | 213 | } |
| 162 | 214 | function prepareResponse(responseData, parse) { |
| 163 | 215 | if (parse) { |
| 164 | 216 | return Promise.resolve(responseData.body); |
| @@ -296,11 +348,18 @@ | ||
| 296 | 348 | var import_i18n2 = __toESM(require_i18n(), 1); |
| 297 | 349 | |
| 298 | 350 | // packages/api-fetch/build-module/utils/response.mjs |
| 299 | 351 | var import_i18n = __toESM(require_i18n(), 1); |
| 300 | - async function parseJsonAndNormalizeError(response) { | |
| 352 | + async function parseJsonAndNormalizeError(response, allowEmptyBody = false) { | |
| 301 | 353 | try { |
| 302 | - return await response.json(); | |
| 354 | + if (typeof response.text !== "function") { | |
| 355 | + return await response.json(); | |
| 356 | + } | |
| 357 | + const text = await response.text(); | |
| 358 | + if (allowEmptyBody && text === "") { | |
| 359 | + return null; | |
| 360 | + } | |
| 361 | + return JSON.parse(text); | |
| 303 | 362 | } catch { |
| 304 | 363 | throw { |
| 305 | 364 | code: "invalid_json", |
| 306 | 365 | message: (0, import_i18n.__)("The response is not a valid JSON response.") |
| @@ -313,9 +372,9 @@ | ||
| 313 | 372 | } |
| 314 | 373 | if (response.status === 204) { |
| 315 | 374 | return null; |
| 316 | 375 | } |
| 317 | - return await parseJsonAndNormalizeError(response); | |
| 376 | + return await parseJsonAndNormalizeError(response, true); | |
| 318 | 377 | } |
| 319 | 378 | async function parseAndThrowError(response, shouldParseResponse = true) { |
| 320 | 379 | if (!shouldParseResponse) { |
| 321 | 380 | throw response; |
| @@ -438,11 +497,29 @@ | ||
| 438 | 497 | ]; |
| 439 | 498 | function registerMiddleware(middleware) { |
| 440 | 499 | middlewares.unshift(middleware); |
| 441 | 500 | } |
| 442 | - var defaultFetchHandler = (nextOptions) => { | |
| 443 | - const { url, path, data, parse = true, ...remainingOptions } = nextOptions; | |
| 444 | - let { body, headers } = nextOptions; | |
| 501 | + function unregisterMiddleware(middleware) { | |
| 502 | + const index = middlewares.indexOf(middleware); | |
| 503 | + if (index === -1) { | |
| 504 | + return false; | |
| 505 | + } | |
| 506 | + middlewares.splice(index, 1); | |
| 507 | + return true; | |
| 508 | + } | |
| 509 | + function enablePreloadMultiUse() { | |
| 510 | + for (const middleware of middlewares) { | |
| 511 | + middleware[ENABLE_MULTI_USE]?.(); | |
| 512 | + } | |
| 513 | + } | |
| 514 | + function clearPreloadedData() { | |
| 515 | + for (const middleware of middlewares) { | |
| 516 | + middleware[CLEAR]?.(); | |
| 517 | + } | |
| 518 | + } | |
| 519 | + var defaultFetchHandler = (options) => { | |
| 520 | + const { url, path, data, parse = true, ...remainingOptions } = options; | |
| 521 | + let { body, headers } = options; | |
| 445 | 522 | headers = { ...DEFAULT_HEADERS, ...headers }; |
| 446 | 523 | if (data) { |
| 447 | 524 | body = JSON.stringify(data); |
| 448 | 525 | headers["Content-Type"] = "application/json"; |
| @@ -511,13 +588,21 @@ | ||
| 511 | 588 | }); |
| 512 | 589 | }); |
| 513 | 590 | }; |
| 514 | 591 | apiFetch.use = registerMiddleware; |
| 592 | + apiFetch.unregister = unregisterMiddleware; | |
| 515 | 593 | apiFetch.setFetchHandler = setFetchHandler; |
| 594 | + apiFetch.defaultFetchHandler = defaultFetchHandler; | |
| 595 | + apiFetch.privateApis = {}; | |
| 596 | + lock(apiFetch.privateApis, { | |
| 597 | + enablePreloadMultiUse, | |
| 598 | + clearPreloadedData | |
| 599 | + }); | |
| 516 | 600 | apiFetch.createNonceMiddleware = nonce_default; |
| 517 | 601 | apiFetch.createPreloadingMiddleware = preloading_default; |
| 518 | 602 | apiFetch.createRootURLMiddleware = root_url_default; |
| 519 | 603 | apiFetch.fetchAllMiddleware = fetch_all_middleware_default; |
| 604 | + apiFetch.httpV1Middleware = http_v1_default; | |
| 520 | 605 | apiFetch.mediaUploadMiddleware = media_upload_default; |
| 521 | 606 | apiFetch.createThemePreviewMiddleware = theme_preview_default; |
| 522 | 607 | var index_default = apiFetch; |
| 523 | 608 | return __toCommonJS(index_exports); |
| @@ -522,5 +607,7 @@ | ||
| 522 | 607 | var index_default = apiFetch; |
| 523 | 608 | return __toCommonJS(index_exports); |
| 524 | 609 | })(); |
| 525 | 610 | if (typeof wp.apiFetch === 'object' && wp.apiFetch.default) { wp.apiFetch = wp.apiFetch.default; } |
| 611 | +(window.wp ||= {}).apiFetch = wp.apiFetch; | |
| 612 | +})(); | |
| 526 | 613 | //# sourceMappingURL=index.js.map |