PluginProbe
Gutenberg / 24.1.0
Gutenberg v24.1.0
24.1.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 All 404 releases
← All changes | build/scripts/api-fetch/index.js +103 -16 23.1.1 → 24.1.0 View file →
@@ -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