@wordpress/api-fetch 5.2.4 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/LICENSE.md +1 -1
- package/build/middlewares/fetch-all-middleware.js +11 -8
- package/build/middlewares/fetch-all-middleware.js.map +1 -1
- package/build/middlewares/preloading.js +46 -44
- package/build/middlewares/preloading.js.map +1 -1
- package/build/types.js +4 -0
- package/build/utils/response.js +8 -3
- package/build/utils/response.js.map +1 -1
- package/build-module/middlewares/fetch-all-middleware.js +11 -8
- package/build-module/middlewares/fetch-all-middleware.js.map +1 -1
- package/build-module/middlewares/preloading.js +44 -41
- package/build-module/middlewares/preloading.js.map +1 -1
- package/build-module/types.js +1 -1
- package/build-module/utils/response.js +8 -3
- package/build-module/utils/response.js.map +1 -1
- package/build-types/middlewares/preloading.d.ts +0 -10
- package/build-types/middlewares/preloading.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/middlewares/preloading.js +50 -62
- package/src/middlewares/test/preloading.js +15 -24
- package/src/test/index.js +6 -0
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 6.0.0 (2022-01-27)
|
|
6
|
+
|
|
7
|
+
### Breaking changes
|
|
8
|
+
|
|
9
|
+
`OPTIONS` requests handled by the preloading middleware are now resolved as `window.Response` objects if you explicitly set `parse: false` (for consistency with how GET requests are resolved). They used to be resolved as `Plain Old JavaScript Objects`.
|
|
10
|
+
|
|
11
|
+
## 5.2.5 (2021-11-07)
|
|
12
|
+
|
|
13
|
+
### Internal
|
|
14
|
+
|
|
15
|
+
- Removed `getStablePath` function. Please use `normalizePath` from `@wordpress/url` package instead ([#35992](https://github.com/WordPress/gutenberg/pull/35992)).``
|
|
16
|
+
|
|
5
17
|
## 5.2.0 (2021-07-21)
|
|
6
18
|
|
|
7
19
|
### New feature
|
package/LICENSE.md
CHANGED
|
@@ -26,14 +26,17 @@ var _ = _interopRequireDefault(require(".."));
|
|
|
26
26
|
* @param {Record<string, string | number>} queryArgs
|
|
27
27
|
* @return {import('../types').APIFetchOptions} The request with the modified query args
|
|
28
28
|
*/
|
|
29
|
-
const modifyQuery = ({
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
29
|
+
const modifyQuery = (_ref, queryArgs) => {
|
|
30
|
+
let {
|
|
31
|
+
path,
|
|
32
|
+
url,
|
|
33
|
+
...options
|
|
34
|
+
} = _ref;
|
|
35
|
+
return { ...options,
|
|
36
|
+
url: url && (0, _url.addQueryArgs)(url, queryArgs),
|
|
37
|
+
path: path && (0, _url.addQueryArgs)(path, queryArgs)
|
|
38
|
+
};
|
|
39
|
+
};
|
|
37
40
|
/**
|
|
38
41
|
* Duplicates parsing functionality from apiFetch.
|
|
39
42
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/api-fetch/src/middlewares/fetch-all-middleware.js"],"names":["modifyQuery","path","url","options","
|
|
1
|
+
{"version":3,"sources":["@wordpress/api-fetch/src/middlewares/fetch-all-middleware.js"],"names":["modifyQuery","queryArgs","path","url","options","parseResponse","response","json","Promise","reject","parseLinkHeader","linkHeader","match","next","getNextPageUrl","headers","get","requestContainsUnboundedQuery","pathIsUnbounded","indexOf","urlIsUnbounded","fetchAllMiddleware","parse","per_page","results","Array","isArray","nextPage","mergedResults","concat","nextResponse","undefined","nextResults"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { addQueryArgs } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport apiFetch from '..';\n\n/**\n * Apply query arguments to both URL and Path, whichever is present.\n *\n * @param {import('../types').APIFetchOptions} props\n * @param {Record<string, string | number>} queryArgs\n * @return {import('../types').APIFetchOptions} The request with the modified query args\n */\nconst modifyQuery = ( { path, url, ...options }, queryArgs ) => ( {\n\t...options,\n\turl: url && addQueryArgs( url, queryArgs ),\n\tpath: path && addQueryArgs( path, queryArgs ),\n} );\n\n/**\n * Duplicates parsing functionality from apiFetch.\n *\n * @param {Response} response\n * @return {Promise<any>} Parsed response json.\n */\nconst parseResponse = ( response ) =>\n\tresponse.json ? response.json() : Promise.reject( response );\n\n/**\n * @param {string | null} linkHeader\n * @return {{ next?: string }} The parsed link header.\n */\nconst parseLinkHeader = ( linkHeader ) => {\n\tif ( ! linkHeader ) {\n\t\treturn {};\n\t}\n\tconst match = linkHeader.match( /<([^>]+)>; rel=\"next\"/ );\n\treturn match\n\t\t? {\n\t\t\t\tnext: match[ 1 ],\n\t\t }\n\t\t: {};\n};\n\n/**\n * @param {Response} response\n * @return {string | undefined} The next page URL.\n */\nconst getNextPageUrl = ( response ) => {\n\tconst { next } = parseLinkHeader( response.headers.get( 'link' ) );\n\treturn next;\n};\n\n/**\n * @param {import('../types').APIFetchOptions} options\n * @return {boolean} True if the request contains an unbounded query.\n */\nconst requestContainsUnboundedQuery = ( options ) => {\n\tconst pathIsUnbounded =\n\t\t!! options.path && options.path.indexOf( 'per_page=-1' ) !== -1;\n\tconst urlIsUnbounded =\n\t\t!! options.url && options.url.indexOf( 'per_page=-1' ) !== -1;\n\treturn pathIsUnbounded || urlIsUnbounded;\n};\n\n/**\n * The REST API enforces an upper limit on the per_page option. To handle large\n * collections, apiFetch consumers can pass `per_page=-1`; this middleware will\n * then recursively assemble a full response array from all available pages.\n *\n * @type {import('../types').APIFetchMiddleware}\n */\nconst fetchAllMiddleware = async ( options, next ) => {\n\tif ( options.parse === false ) {\n\t\t// If a consumer has opted out of parsing, do not apply middleware.\n\t\treturn next( options );\n\t}\n\tif ( ! requestContainsUnboundedQuery( options ) ) {\n\t\t// If neither url nor path is requesting all items, do not apply middleware.\n\t\treturn next( options );\n\t}\n\n\t// Retrieve requested page of results.\n\tconst response = await apiFetch( {\n\t\t...modifyQuery( options, {\n\t\t\tper_page: 100,\n\t\t} ),\n\t\t// Ensure headers are returned for page 1.\n\t\tparse: false,\n\t} );\n\n\tconst results = await parseResponse( response );\n\n\tif ( ! Array.isArray( results ) ) {\n\t\t// We have no reliable way of merging non-array results.\n\t\treturn results;\n\t}\n\n\tlet nextPage = getNextPageUrl( response );\n\n\tif ( ! nextPage ) {\n\t\t// There are no further pages to request.\n\t\treturn results;\n\t}\n\n\t// Iteratively fetch all remaining pages until no \"next\" header is found.\n\tlet mergedResults = /** @type {any[]} */ ( [] ).concat( results );\n\twhile ( nextPage ) {\n\t\tconst nextResponse = await apiFetch( {\n\t\t\t...options,\n\t\t\t// Ensure the URL for the next page is used instead of any provided path.\n\t\t\tpath: undefined,\n\t\t\turl: nextPage,\n\t\t\t// Ensure we still get headers so we can identify the next page.\n\t\t\tparse: false,\n\t\t} );\n\t\tconst nextResults = await parseResponse( nextResponse );\n\t\tmergedResults = mergedResults.concat( nextResults );\n\t\tnextPage = getNextPageUrl( nextResponse );\n\t}\n\treturn mergedResults;\n};\n\nexport default fetchAllMiddleware;\n"]}
|
|
@@ -3,44 +3,21 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.getStablePath = getStablePath;
|
|
7
6
|
exports.default = void 0;
|
|
8
7
|
|
|
8
|
+
var _url = require("@wordpress/url");
|
|
9
|
+
|
|
9
10
|
/**
|
|
10
|
-
*
|
|
11
|
-
* will be treated as identical, regardless of order they appear in the original
|
|
12
|
-
* text.
|
|
13
|
-
*
|
|
14
|
-
* @param {string} path Original path.
|
|
15
|
-
*
|
|
16
|
-
* @return {string} Normalized path.
|
|
11
|
+
* WordPress dependencies
|
|
17
12
|
*/
|
|
18
|
-
|
|
19
|
-
const splitted = path.split('?');
|
|
20
|
-
const query = splitted[1];
|
|
21
|
-
const base = splitted[0];
|
|
22
|
-
|
|
23
|
-
if (!query) {
|
|
24
|
-
return base;
|
|
25
|
-
} // 'b=1&c=2&a=5'
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return base + '?' + query // [ 'b=1', 'c=2', 'a=5' ]
|
|
29
|
-
.split('&') // [ [ 'b, '1' ], [ 'c', '2' ], [ 'a', '5' ] ]
|
|
30
|
-
.map(entry => entry.split('=')) // [ [ 'a', '5' ], [ 'b, '1' ], [ 'c', '2' ] ]
|
|
31
|
-
.sort((a, b) => a[0].localeCompare(b[0])) // [ 'a=5', 'b=1', 'c=2' ]
|
|
32
|
-
.map(pair => pair.join('=')) // 'a=5&b=1&c=2'
|
|
33
|
-
.join('&');
|
|
34
|
-
}
|
|
13
|
+
|
|
35
14
|
/**
|
|
36
15
|
* @param {Record<string, any>} preloadedData
|
|
37
16
|
* @return {import('../types').APIFetchMiddleware} Preloading middleware.
|
|
38
17
|
*/
|
|
39
|
-
|
|
40
|
-
|
|
41
18
|
function createPreloadingMiddleware(preloadedData) {
|
|
42
19
|
const cache = Object.keys(preloadedData).reduce((result, path) => {
|
|
43
|
-
result[
|
|
20
|
+
result[(0, _url.normalizePath)(path)] = preloadedData[path];
|
|
44
21
|
return result;
|
|
45
22
|
},
|
|
46
23
|
/** @type {Record<string, any>} */
|
|
@@ -49,31 +26,56 @@ function createPreloadingMiddleware(preloadedData) {
|
|
|
49
26
|
const {
|
|
50
27
|
parse = true
|
|
51
28
|
} = options;
|
|
29
|
+
/** @type {string | void} */
|
|
52
30
|
|
|
53
|
-
|
|
54
|
-
const method = options.method || 'GET';
|
|
55
|
-
const path = getStablePath(options.path);
|
|
56
|
-
|
|
57
|
-
if ('GET' === method && cache[path]) {
|
|
58
|
-
const cacheData = cache[path]; // Unsetting the cache key ensures that the data is only used a single time
|
|
31
|
+
let rawPath = options.path;
|
|
59
32
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
status: 200,
|
|
63
|
-
statusText: 'OK',
|
|
64
|
-
headers: cacheData.headers
|
|
65
|
-
}));
|
|
66
|
-
} else if ('OPTIONS' === method && cache[method] && cache[method][path]) {
|
|
67
|
-
const cacheData = cache[method][path]; // Unsetting the cache key ensures that the data is only used a single time
|
|
33
|
+
if (!rawPath && options.url) {
|
|
34
|
+
const pathFromQuery = (0, _url.getQueryArg)(options.url, 'rest_route');
|
|
68
35
|
|
|
69
|
-
|
|
70
|
-
|
|
36
|
+
if (typeof pathFromQuery === 'string') {
|
|
37
|
+
rawPath = pathFromQuery;
|
|
71
38
|
}
|
|
72
39
|
}
|
|
73
40
|
|
|
41
|
+
if (typeof rawPath !== 'string') {
|
|
42
|
+
return next(options);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const method = options.method || 'GET';
|
|
46
|
+
const path = (0, _url.normalizePath)(rawPath);
|
|
47
|
+
|
|
48
|
+
if ('GET' === method && cache[path]) {
|
|
49
|
+
const cacheData = cache[path]; // Unsetting the cache key ensures that the data is only used a single time
|
|
50
|
+
|
|
51
|
+
delete cache[path];
|
|
52
|
+
return prepareResponse(cacheData, !!parse);
|
|
53
|
+
} else if ('OPTIONS' === method && cache[method] && cache[method][path]) {
|
|
54
|
+
const cacheData = cache[method][path]; // Unsetting the cache key ensures that the data is only used a single time
|
|
55
|
+
|
|
56
|
+
delete cache[method][path];
|
|
57
|
+
return prepareResponse(cacheData, !!parse);
|
|
58
|
+
}
|
|
59
|
+
|
|
74
60
|
return next(options);
|
|
75
61
|
};
|
|
76
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* This is a helper function that sends a success response.
|
|
65
|
+
*
|
|
66
|
+
* @param {Record<string, any>} responseData
|
|
67
|
+
* @param {boolean} parse
|
|
68
|
+
* @return {Promise<any>} Promise with the response.
|
|
69
|
+
*/
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
function prepareResponse(responseData, parse) {
|
|
73
|
+
return Promise.resolve(parse ? responseData.body : new window.Response(JSON.stringify(responseData.body), {
|
|
74
|
+
status: 200,
|
|
75
|
+
statusText: 'OK',
|
|
76
|
+
headers: responseData.headers
|
|
77
|
+
}));
|
|
78
|
+
}
|
|
77
79
|
|
|
78
80
|
var _default = createPreloadingMiddleware;
|
|
79
81
|
exports.default = _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/api-fetch/src/middlewares/preloading.js"],"names":["
|
|
1
|
+
{"version":3,"sources":["@wordpress/api-fetch/src/middlewares/preloading.js"],"names":["createPreloadingMiddleware","preloadedData","cache","Object","keys","reduce","result","path","options","next","parse","rawPath","url","pathFromQuery","method","cacheData","prepareResponse","responseData","Promise","resolve","body","window","Response","JSON","stringify","status","statusText","headers"],"mappings":";;;;;;;AAGA;;AAHA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA,SAASA,0BAAT,CAAqCC,aAArC,EAAqD;AACpD,QAAMC,KAAK,GAAGC,MAAM,CAACC,IAAP,CAAaH,aAAb,EAA6BI,MAA7B,CAAqC,CAAEC,MAAF,EAAUC,IAAV,KAAoB;AACtED,IAAAA,MAAM,CAAE,wBAAeC,IAAf,CAAF,CAAN,GAAkCN,aAAa,CAAEM,IAAF,CAA/C;AACA,WAAOD,MAAP;AACA,GAHa;AAGX;AAAqC,IAH1B,CAAd;AAKA,SAAO,CAAEE,OAAF,EAAWC,IAAX,KAAqB;AAC3B,UAAM;AAAEC,MAAAA,KAAK,GAAG;AAAV,QAAmBF,OAAzB;AACA;;AACA,QAAIG,OAAO,GAAGH,OAAO,CAACD,IAAtB;;AACA,QAAK,CAAEI,OAAF,IAAaH,OAAO,CAACI,GAA1B,EAAgC;AAC/B,YAAMC,aAAa,GAAG,sBAAaL,OAAO,CAACI,GAArB,EAA0B,YAA1B,CAAtB;;AACA,UAAK,OAAOC,aAAP,KAAyB,QAA9B,EAAyC;AACxCF,QAAAA,OAAO,GAAGE,aAAV;AACA;AACD;;AACD,QAAK,OAAOF,OAAP,KAAmB,QAAxB,EAAmC;AAClC,aAAOF,IAAI,CAAED,OAAF,CAAX;AACA;;AAED,UAAMM,MAAM,GAAGN,OAAO,CAACM,MAAR,IAAkB,KAAjC;AACA,UAAMP,IAAI,GAAG,wBAAeI,OAAf,CAAb;;AAEA,QAAK,UAAUG,MAAV,IAAoBZ,KAAK,CAAEK,IAAF,CAA9B,EAAyC;AACxC,YAAMQ,SAAS,GAAGb,KAAK,CAAEK,IAAF,CAAvB,CADwC,CAGxC;;AACA,aAAOL,KAAK,CAAEK,IAAF,CAAZ;AAEA,aAAOS,eAAe,CAAED,SAAF,EAAa,CAAC,CAAEL,KAAhB,CAAtB;AACA,KAPD,MAOO,IACN,cAAcI,MAAd,IACAZ,KAAK,CAAEY,MAAF,CADL,IAEAZ,KAAK,CAAEY,MAAF,CAAL,CAAiBP,IAAjB,CAHM,EAIL;AACD,YAAMQ,SAAS,GAAGb,KAAK,CAAEY,MAAF,CAAL,CAAiBP,IAAjB,CAAlB,CADC,CAGD;;AACA,aAAOL,KAAK,CAAEY,MAAF,CAAL,CAAiBP,IAAjB,CAAP;AAEA,aAAOS,eAAe,CAAED,SAAF,EAAa,CAAC,CAAEL,KAAhB,CAAtB;AACA;;AAED,WAAOD,IAAI,CAAED,OAAF,CAAX;AACA,GAtCD;AAuCA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASQ,eAAT,CAA0BC,YAA1B,EAAwCP,KAAxC,EAAgD;AAC/C,SAAOQ,OAAO,CAACC,OAAR,CACNT,KAAK,GACFO,YAAY,CAACG,IADX,GAEF,IAAIC,MAAM,CAACC,QAAX,CAAqBC,IAAI,CAACC,SAAL,CAAgBP,YAAY,CAACG,IAA7B,CAArB,EAA0D;AAC1DK,IAAAA,MAAM,EAAE,GADkD;AAE1DC,IAAAA,UAAU,EAAE,IAF8C;AAG1DC,IAAAA,OAAO,EAAEV,YAAY,CAACU;AAHoC,GAA1D,CAHG,CAAP;AASA;;eAEc3B,0B","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { getQueryArg, normalizePath } from '@wordpress/url';\n\n/**\n * @param {Record<string, any>} preloadedData\n * @return {import('../types').APIFetchMiddleware} Preloading middleware.\n */\nfunction createPreloadingMiddleware( preloadedData ) {\n\tconst cache = Object.keys( preloadedData ).reduce( ( result, path ) => {\n\t\tresult[ normalizePath( path ) ] = preloadedData[ path ];\n\t\treturn result;\n\t}, /** @type {Record<string, any>} */ ( {} ) );\n\n\treturn ( options, next ) => {\n\t\tconst { parse = true } = options;\n\t\t/** @type {string | void} */\n\t\tlet rawPath = options.path;\n\t\tif ( ! rawPath && options.url ) {\n\t\t\tconst pathFromQuery = getQueryArg( options.url, 'rest_route' );\n\t\t\tif ( typeof pathFromQuery === 'string' ) {\n\t\t\t\trawPath = pathFromQuery;\n\t\t\t}\n\t\t}\n\t\tif ( typeof rawPath !== 'string' ) {\n\t\t\treturn next( options );\n\t\t}\n\n\t\tconst method = options.method || 'GET';\n\t\tconst path = normalizePath( rawPath );\n\n\t\tif ( 'GET' === method && cache[ path ] ) {\n\t\t\tconst cacheData = cache[ path ];\n\n\t\t\t// Unsetting the cache key ensures that the data is only used a single time\n\t\t\tdelete cache[ path ];\n\n\t\t\treturn prepareResponse( cacheData, !! parse );\n\t\t} else if (\n\t\t\t'OPTIONS' === method &&\n\t\t\tcache[ method ] &&\n\t\t\tcache[ method ][ path ]\n\t\t) {\n\t\t\tconst cacheData = cache[ method ][ path ];\n\n\t\t\t// Unsetting the cache key ensures that the data is only used a single time\n\t\t\tdelete cache[ method ][ path ];\n\n\t\t\treturn prepareResponse( cacheData, !! parse );\n\t\t}\n\n\t\treturn next( options );\n\t};\n}\n\n/**\n * This is a helper function that sends a success response.\n *\n * @param {Record<string, any>} responseData\n * @param {boolean} parse\n * @return {Promise<any>} Promise with the response.\n */\nfunction prepareResponse( responseData, parse ) {\n\treturn Promise.resolve(\n\t\tparse\n\t\t\t? responseData.body\n\t\t\t: new window.Response( JSON.stringify( responseData.body ), {\n\t\t\t\t\tstatus: 200,\n\t\t\t\t\tstatusText: 'OK',\n\t\t\t\t\theaders: responseData.headers,\n\t\t\t } )\n\t);\n}\n\nexport default createPreloadingMiddleware;\n"]}
|
package/build/types.js
CHANGED
package/build/utils/response.js
CHANGED
|
@@ -20,7 +20,9 @@ var _i18n = require("@wordpress/i18n");
|
|
|
20
20
|
*
|
|
21
21
|
* @return {Promise<any> | null | Response} Parsed response.
|
|
22
22
|
*/
|
|
23
|
-
const parseResponse = (response
|
|
23
|
+
const parseResponse = function (response) {
|
|
24
|
+
let shouldParseResponse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
25
|
+
|
|
24
26
|
if (shouldParseResponse) {
|
|
25
27
|
if (response.status === 204) {
|
|
26
28
|
return null;
|
|
@@ -64,7 +66,8 @@ const parseJsonAndNormalizeError = response => {
|
|
|
64
66
|
*/
|
|
65
67
|
|
|
66
68
|
|
|
67
|
-
const parseResponseAndNormalizeError = (response
|
|
69
|
+
const parseResponseAndNormalizeError = function (response) {
|
|
70
|
+
let shouldParseResponse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
68
71
|
return Promise.resolve(parseResponse(response, shouldParseResponse)).catch(res => parseAndThrowError(res, shouldParseResponse));
|
|
69
72
|
};
|
|
70
73
|
/**
|
|
@@ -78,7 +81,9 @@ const parseResponseAndNormalizeError = (response, shouldParseResponse = true) =>
|
|
|
78
81
|
|
|
79
82
|
exports.parseResponseAndNormalizeError = parseResponseAndNormalizeError;
|
|
80
83
|
|
|
81
|
-
function parseAndThrowError(response
|
|
84
|
+
function parseAndThrowError(response) {
|
|
85
|
+
let shouldParseResponse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
86
|
+
|
|
82
87
|
if (!shouldParseResponse) {
|
|
83
88
|
throw response;
|
|
84
89
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/api-fetch/src/utils/response.js"],"names":["parseResponse","response","shouldParseResponse","status","json","Promise","reject","parseJsonAndNormalizeError","invalidJsonError","code","message","catch","parseResponseAndNormalizeError","resolve","res","parseAndThrowError","then","error","unknownError"],"mappings":";;;;;;;;AAGA;;AAHA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,aAAa,GAAG,
|
|
1
|
+
{"version":3,"sources":["@wordpress/api-fetch/src/utils/response.js"],"names":["parseResponse","response","shouldParseResponse","status","json","Promise","reject","parseJsonAndNormalizeError","invalidJsonError","code","message","catch","parseResponseAndNormalizeError","resolve","res","parseAndThrowError","then","error","unknownError"],"mappings":";;;;;;;;AAGA;;AAHA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,aAAa,GAAG,UAAEC,QAAF,EAA4C;AAAA,MAAhCC,mBAAgC,uEAAV,IAAU;;AACjE,MAAKA,mBAAL,EAA2B;AAC1B,QAAKD,QAAQ,CAACE,MAAT,KAAoB,GAAzB,EAA+B;AAC9B,aAAO,IAAP;AACA;;AAED,WAAOF,QAAQ,CAACG,IAAT,GAAgBH,QAAQ,CAACG,IAAT,EAAhB,GAAkCC,OAAO,CAACC,MAAR,CAAgBL,QAAhB,CAAzC;AACA;;AAED,SAAOA,QAAP;AACA,CAVD;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMM,0BAA0B,GAAKN,QAAF,IAAgB;AAClD,QAAMO,gBAAgB,GAAG;AACxBC,IAAAA,IAAI,EAAE,cADkB;AAExBC,IAAAA,OAAO,EAAE,cAAI,4CAAJ;AAFe,GAAzB;;AAKA,MAAK,CAAET,QAAF,IAAc,CAAEA,QAAQ,CAACG,IAA9B,EAAqC;AACpC,UAAMI,gBAAN;AACA;;AAED,SAAOP,QAAQ,CAACG,IAAT,GAAgBO,KAAhB,CAAuB,MAAM;AACnC,UAAMH,gBAAN;AACA,GAFM,CAAP;AAGA,CAbD;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMI,8BAA8B,GAAG,UAC7CX,QAD6C,EAGzC;AAAA,MADJC,mBACI,uEADkB,IAClB;AACJ,SAAOG,OAAO,CAACQ,OAAR,CACNb,aAAa,CAAEC,QAAF,EAAYC,mBAAZ,CADP,EAELS,KAFK,CAEIG,GAAF,IAAWC,kBAAkB,CAAED,GAAF,EAAOZ,mBAAP,CAF/B,CAAP;AAGA,CAPM;AASP;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AACO,SAASa,kBAAT,CAA6Bd,QAA7B,EAAoE;AAAA,MAA7BC,mBAA6B,uEAAP,IAAO;;AAC1E,MAAK,CAAEA,mBAAP,EAA6B;AAC5B,UAAMD,QAAN;AACA;;AAED,SAAOM,0BAA0B,CAAEN,QAAF,CAA1B,CAAuCe,IAAvC,CAA+CC,KAAF,IAAa;AAChE,UAAMC,YAAY,GAAG;AACpBT,MAAAA,IAAI,EAAE,eADc;AAEpBC,MAAAA,OAAO,EAAE,cAAI,4BAAJ;AAFW,KAArB;AAKA,UAAMO,KAAK,IAAIC,YAAf;AACA,GAPM,CAAP;AAQA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Parses the apiFetch response.\n *\n * @param {Response} response\n * @param {boolean} shouldParseResponse\n *\n * @return {Promise<any> | null | Response} Parsed response.\n */\nconst parseResponse = ( response, shouldParseResponse = true ) => {\n\tif ( shouldParseResponse ) {\n\t\tif ( response.status === 204 ) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn response.json ? response.json() : Promise.reject( response );\n\t}\n\n\treturn response;\n};\n\n/**\n * Calls the `json` function on the Response, throwing an error if the response\n * doesn't have a json function or if parsing the json itself fails.\n *\n * @param {Response} response\n * @return {Promise<any>} Parsed response.\n */\nconst parseJsonAndNormalizeError = ( response ) => {\n\tconst invalidJsonError = {\n\t\tcode: 'invalid_json',\n\t\tmessage: __( 'The response is not a valid JSON response.' ),\n\t};\n\n\tif ( ! response || ! response.json ) {\n\t\tthrow invalidJsonError;\n\t}\n\n\treturn response.json().catch( () => {\n\t\tthrow invalidJsonError;\n\t} );\n};\n\n/**\n * Parses the apiFetch response properly and normalize response errors.\n *\n * @param {Response} response\n * @param {boolean} shouldParseResponse\n *\n * @return {Promise<any>} Parsed response.\n */\nexport const parseResponseAndNormalizeError = (\n\tresponse,\n\tshouldParseResponse = true\n) => {\n\treturn Promise.resolve(\n\t\tparseResponse( response, shouldParseResponse )\n\t).catch( ( res ) => parseAndThrowError( res, shouldParseResponse ) );\n};\n\n/**\n * Parses a response, throwing an error if parsing the response fails.\n *\n * @param {Response} response\n * @param {boolean} shouldParseResponse\n * @return {Promise<any>} Parsed response.\n */\nexport function parseAndThrowError( response, shouldParseResponse = true ) {\n\tif ( ! shouldParseResponse ) {\n\t\tthrow response;\n\t}\n\n\treturn parseJsonAndNormalizeError( response ).then( ( error ) => {\n\t\tconst unknownError = {\n\t\t\tcode: 'unknown_error',\n\t\t\tmessage: __( 'An unknown error occurred.' ),\n\t\t};\n\n\t\tthrow error || unknownError;\n\t} );\n}\n"]}
|
|
@@ -15,14 +15,17 @@ import apiFetch from '..';
|
|
|
15
15
|
* @return {import('../types').APIFetchOptions} The request with the modified query args
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
const modifyQuery = ({
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
18
|
+
const modifyQuery = (_ref, queryArgs) => {
|
|
19
|
+
let {
|
|
20
|
+
path,
|
|
21
|
+
url,
|
|
22
|
+
...options
|
|
23
|
+
} = _ref;
|
|
24
|
+
return { ...options,
|
|
25
|
+
url: url && addQueryArgs(url, queryArgs),
|
|
26
|
+
path: path && addQueryArgs(path, queryArgs)
|
|
27
|
+
};
|
|
28
|
+
};
|
|
26
29
|
/**
|
|
27
30
|
* Duplicates parsing functionality from apiFetch.
|
|
28
31
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/api-fetch/src/middlewares/fetch-all-middleware.js"],"names":["addQueryArgs","apiFetch","modifyQuery","path","url","options","
|
|
1
|
+
{"version":3,"sources":["@wordpress/api-fetch/src/middlewares/fetch-all-middleware.js"],"names":["addQueryArgs","apiFetch","modifyQuery","queryArgs","path","url","options","parseResponse","response","json","Promise","reject","parseLinkHeader","linkHeader","match","next","getNextPageUrl","headers","get","requestContainsUnboundedQuery","pathIsUnbounded","indexOf","urlIsUnbounded","fetchAllMiddleware","parse","per_page","results","Array","isArray","nextPage","mergedResults","concat","nextResponse","undefined","nextResults"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { addQueryArgs } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport apiFetch from '..';\n\n/**\n * Apply query arguments to both URL and Path, whichever is present.\n *\n * @param {import('../types').APIFetchOptions} props\n * @param {Record<string, string | number>} queryArgs\n * @return {import('../types').APIFetchOptions} The request with the modified query args\n */\nconst modifyQuery = ( { path, url, ...options }, queryArgs ) => ( {\n\t...options,\n\turl: url && addQueryArgs( url, queryArgs ),\n\tpath: path && addQueryArgs( path, queryArgs ),\n} );\n\n/**\n * Duplicates parsing functionality from apiFetch.\n *\n * @param {Response} response\n * @return {Promise<any>} Parsed response json.\n */\nconst parseResponse = ( response ) =>\n\tresponse.json ? response.json() : Promise.reject( response );\n\n/**\n * @param {string | null} linkHeader\n * @return {{ next?: string }} The parsed link header.\n */\nconst parseLinkHeader = ( linkHeader ) => {\n\tif ( ! linkHeader ) {\n\t\treturn {};\n\t}\n\tconst match = linkHeader.match( /<([^>]+)>; rel=\"next\"/ );\n\treturn match\n\t\t? {\n\t\t\t\tnext: match[ 1 ],\n\t\t }\n\t\t: {};\n};\n\n/**\n * @param {Response} response\n * @return {string | undefined} The next page URL.\n */\nconst getNextPageUrl = ( response ) => {\n\tconst { next } = parseLinkHeader( response.headers.get( 'link' ) );\n\treturn next;\n};\n\n/**\n * @param {import('../types').APIFetchOptions} options\n * @return {boolean} True if the request contains an unbounded query.\n */\nconst requestContainsUnboundedQuery = ( options ) => {\n\tconst pathIsUnbounded =\n\t\t!! options.path && options.path.indexOf( 'per_page=-1' ) !== -1;\n\tconst urlIsUnbounded =\n\t\t!! options.url && options.url.indexOf( 'per_page=-1' ) !== -1;\n\treturn pathIsUnbounded || urlIsUnbounded;\n};\n\n/**\n * The REST API enforces an upper limit on the per_page option. To handle large\n * collections, apiFetch consumers can pass `per_page=-1`; this middleware will\n * then recursively assemble a full response array from all available pages.\n *\n * @type {import('../types').APIFetchMiddleware}\n */\nconst fetchAllMiddleware = async ( options, next ) => {\n\tif ( options.parse === false ) {\n\t\t// If a consumer has opted out of parsing, do not apply middleware.\n\t\treturn next( options );\n\t}\n\tif ( ! requestContainsUnboundedQuery( options ) ) {\n\t\t// If neither url nor path is requesting all items, do not apply middleware.\n\t\treturn next( options );\n\t}\n\n\t// Retrieve requested page of results.\n\tconst response = await apiFetch( {\n\t\t...modifyQuery( options, {\n\t\t\tper_page: 100,\n\t\t} ),\n\t\t// Ensure headers are returned for page 1.\n\t\tparse: false,\n\t} );\n\n\tconst results = await parseResponse( response );\n\n\tif ( ! Array.isArray( results ) ) {\n\t\t// We have no reliable way of merging non-array results.\n\t\treturn results;\n\t}\n\n\tlet nextPage = getNextPageUrl( response );\n\n\tif ( ! nextPage ) {\n\t\t// There are no further pages to request.\n\t\treturn results;\n\t}\n\n\t// Iteratively fetch all remaining pages until no \"next\" header is found.\n\tlet mergedResults = /** @type {any[]} */ ( [] ).concat( results );\n\twhile ( nextPage ) {\n\t\tconst nextResponse = await apiFetch( {\n\t\t\t...options,\n\t\t\t// Ensure the URL for the next page is used instead of any provided path.\n\t\t\tpath: undefined,\n\t\t\turl: nextPage,\n\t\t\t// Ensure we still get headers so we can identify the next page.\n\t\t\tparse: false,\n\t\t} );\n\t\tconst nextResults = await parseResponse( nextResponse );\n\t\tmergedResults = mergedResults.concat( nextResults );\n\t\tnextPage = getNextPageUrl( nextResponse );\n\t}\n\treturn mergedResults;\n};\n\nexport default fetchAllMiddleware;\n"]}
|
|
@@ -1,29 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* will be treated as identical, regardless of order they appear in the original
|
|
4
|
-
* text.
|
|
5
|
-
*
|
|
6
|
-
* @param {string} path Original path.
|
|
7
|
-
*
|
|
8
|
-
* @return {string} Normalized path.
|
|
2
|
+
* WordPress dependencies
|
|
9
3
|
*/
|
|
10
|
-
|
|
11
|
-
const splitted = path.split('?');
|
|
12
|
-
const query = splitted[1];
|
|
13
|
-
const base = splitted[0];
|
|
14
|
-
|
|
15
|
-
if (!query) {
|
|
16
|
-
return base;
|
|
17
|
-
} // 'b=1&c=2&a=5'
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return base + '?' + query // [ 'b=1', 'c=2', 'a=5' ]
|
|
21
|
-
.split('&') // [ [ 'b, '1' ], [ 'c', '2' ], [ 'a', '5' ] ]
|
|
22
|
-
.map(entry => entry.split('=')) // [ [ 'a', '5' ], [ 'b, '1' ], [ 'c', '2' ] ]
|
|
23
|
-
.sort((a, b) => a[0].localeCompare(b[0])) // [ 'a=5', 'b=1', 'c=2' ]
|
|
24
|
-
.map(pair => pair.join('=')) // 'a=5&b=1&c=2'
|
|
25
|
-
.join('&');
|
|
26
|
-
}
|
|
4
|
+
import { getQueryArg, normalizePath } from '@wordpress/url';
|
|
27
5
|
/**
|
|
28
6
|
* @param {Record<string, any>} preloadedData
|
|
29
7
|
* @return {import('../types').APIFetchMiddleware} Preloading middleware.
|
|
@@ -31,7 +9,7 @@ export function getStablePath(path) {
|
|
|
31
9
|
|
|
32
10
|
function createPreloadingMiddleware(preloadedData) {
|
|
33
11
|
const cache = Object.keys(preloadedData).reduce((result, path) => {
|
|
34
|
-
result[
|
|
12
|
+
result[normalizePath(path)] = preloadedData[path];
|
|
35
13
|
return result;
|
|
36
14
|
},
|
|
37
15
|
/** @type {Record<string, any>} */
|
|
@@ -40,31 +18,56 @@ function createPreloadingMiddleware(preloadedData) {
|
|
|
40
18
|
const {
|
|
41
19
|
parse = true
|
|
42
20
|
} = options;
|
|
21
|
+
/** @type {string | void} */
|
|
43
22
|
|
|
44
|
-
|
|
45
|
-
const method = options.method || 'GET';
|
|
46
|
-
const path = getStablePath(options.path);
|
|
47
|
-
|
|
48
|
-
if ('GET' === method && cache[path]) {
|
|
49
|
-
const cacheData = cache[path]; // Unsetting the cache key ensures that the data is only used a single time
|
|
23
|
+
let rawPath = options.path;
|
|
50
24
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
status: 200,
|
|
54
|
-
statusText: 'OK',
|
|
55
|
-
headers: cacheData.headers
|
|
56
|
-
}));
|
|
57
|
-
} else if ('OPTIONS' === method && cache[method] && cache[method][path]) {
|
|
58
|
-
const cacheData = cache[method][path]; // Unsetting the cache key ensures that the data is only used a single time
|
|
25
|
+
if (!rawPath && options.url) {
|
|
26
|
+
const pathFromQuery = getQueryArg(options.url, 'rest_route');
|
|
59
27
|
|
|
60
|
-
|
|
61
|
-
|
|
28
|
+
if (typeof pathFromQuery === 'string') {
|
|
29
|
+
rawPath = pathFromQuery;
|
|
62
30
|
}
|
|
63
31
|
}
|
|
64
32
|
|
|
33
|
+
if (typeof rawPath !== 'string') {
|
|
34
|
+
return next(options);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const method = options.method || 'GET';
|
|
38
|
+
const path = normalizePath(rawPath);
|
|
39
|
+
|
|
40
|
+
if ('GET' === method && cache[path]) {
|
|
41
|
+
const cacheData = cache[path]; // Unsetting the cache key ensures that the data is only used a single time
|
|
42
|
+
|
|
43
|
+
delete cache[path];
|
|
44
|
+
return prepareResponse(cacheData, !!parse);
|
|
45
|
+
} else if ('OPTIONS' === method && cache[method] && cache[method][path]) {
|
|
46
|
+
const cacheData = cache[method][path]; // Unsetting the cache key ensures that the data is only used a single time
|
|
47
|
+
|
|
48
|
+
delete cache[method][path];
|
|
49
|
+
return prepareResponse(cacheData, !!parse);
|
|
50
|
+
}
|
|
51
|
+
|
|
65
52
|
return next(options);
|
|
66
53
|
};
|
|
67
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* This is a helper function that sends a success response.
|
|
57
|
+
*
|
|
58
|
+
* @param {Record<string, any>} responseData
|
|
59
|
+
* @param {boolean} parse
|
|
60
|
+
* @return {Promise<any>} Promise with the response.
|
|
61
|
+
*/
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
function prepareResponse(responseData, parse) {
|
|
65
|
+
return Promise.resolve(parse ? responseData.body : new window.Response(JSON.stringify(responseData.body), {
|
|
66
|
+
status: 200,
|
|
67
|
+
statusText: 'OK',
|
|
68
|
+
headers: responseData.headers
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
68
71
|
|
|
69
72
|
export default createPreloadingMiddleware;
|
|
70
73
|
//# sourceMappingURL=preloading.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/api-fetch/src/middlewares/preloading.js"],"names":["
|
|
1
|
+
{"version":3,"sources":["@wordpress/api-fetch/src/middlewares/preloading.js"],"names":["getQueryArg","normalizePath","createPreloadingMiddleware","preloadedData","cache","Object","keys","reduce","result","path","options","next","parse","rawPath","url","pathFromQuery","method","cacheData","prepareResponse","responseData","Promise","resolve","body","window","Response","JSON","stringify","status","statusText","headers"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,WAAT,EAAsBC,aAAtB,QAA2C,gBAA3C;AAEA;AACA;AACA;AACA;;AACA,SAASC,0BAAT,CAAqCC,aAArC,EAAqD;AACpD,QAAMC,KAAK,GAAGC,MAAM,CAACC,IAAP,CAAaH,aAAb,EAA6BI,MAA7B,CAAqC,CAAEC,MAAF,EAAUC,IAAV,KAAoB;AACtED,IAAAA,MAAM,CAAEP,aAAa,CAAEQ,IAAF,CAAf,CAAN,GAAkCN,aAAa,CAAEM,IAAF,CAA/C;AACA,WAAOD,MAAP;AACA,GAHa;AAGX;AAAqC,IAH1B,CAAd;AAKA,SAAO,CAAEE,OAAF,EAAWC,IAAX,KAAqB;AAC3B,UAAM;AAAEC,MAAAA,KAAK,GAAG;AAAV,QAAmBF,OAAzB;AACA;;AACA,QAAIG,OAAO,GAAGH,OAAO,CAACD,IAAtB;;AACA,QAAK,CAAEI,OAAF,IAAaH,OAAO,CAACI,GAA1B,EAAgC;AAC/B,YAAMC,aAAa,GAAGf,WAAW,CAAEU,OAAO,CAACI,GAAV,EAAe,YAAf,CAAjC;;AACA,UAAK,OAAOC,aAAP,KAAyB,QAA9B,EAAyC;AACxCF,QAAAA,OAAO,GAAGE,aAAV;AACA;AACD;;AACD,QAAK,OAAOF,OAAP,KAAmB,QAAxB,EAAmC;AAClC,aAAOF,IAAI,CAAED,OAAF,CAAX;AACA;;AAED,UAAMM,MAAM,GAAGN,OAAO,CAACM,MAAR,IAAkB,KAAjC;AACA,UAAMP,IAAI,GAAGR,aAAa,CAAEY,OAAF,CAA1B;;AAEA,QAAK,UAAUG,MAAV,IAAoBZ,KAAK,CAAEK,IAAF,CAA9B,EAAyC;AACxC,YAAMQ,SAAS,GAAGb,KAAK,CAAEK,IAAF,CAAvB,CADwC,CAGxC;;AACA,aAAOL,KAAK,CAAEK,IAAF,CAAZ;AAEA,aAAOS,eAAe,CAAED,SAAF,EAAa,CAAC,CAAEL,KAAhB,CAAtB;AACA,KAPD,MAOO,IACN,cAAcI,MAAd,IACAZ,KAAK,CAAEY,MAAF,CADL,IAEAZ,KAAK,CAAEY,MAAF,CAAL,CAAiBP,IAAjB,CAHM,EAIL;AACD,YAAMQ,SAAS,GAAGb,KAAK,CAAEY,MAAF,CAAL,CAAiBP,IAAjB,CAAlB,CADC,CAGD;;AACA,aAAOL,KAAK,CAAEY,MAAF,CAAL,CAAiBP,IAAjB,CAAP;AAEA,aAAOS,eAAe,CAAED,SAAF,EAAa,CAAC,CAAEL,KAAhB,CAAtB;AACA;;AAED,WAAOD,IAAI,CAAED,OAAF,CAAX;AACA,GAtCD;AAuCA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASQ,eAAT,CAA0BC,YAA1B,EAAwCP,KAAxC,EAAgD;AAC/C,SAAOQ,OAAO,CAACC,OAAR,CACNT,KAAK,GACFO,YAAY,CAACG,IADX,GAEF,IAAIC,MAAM,CAACC,QAAX,CAAqBC,IAAI,CAACC,SAAL,CAAgBP,YAAY,CAACG,IAA7B,CAArB,EAA0D;AAC1DK,IAAAA,MAAM,EAAE,GADkD;AAE1DC,IAAAA,UAAU,EAAE,IAF8C;AAG1DC,IAAAA,OAAO,EAAEV,YAAY,CAACU;AAHoC,GAA1D,CAHG,CAAP;AASA;;AAED,eAAe3B,0BAAf","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { getQueryArg, normalizePath } from '@wordpress/url';\n\n/**\n * @param {Record<string, any>} preloadedData\n * @return {import('../types').APIFetchMiddleware} Preloading middleware.\n */\nfunction createPreloadingMiddleware( preloadedData ) {\n\tconst cache = Object.keys( preloadedData ).reduce( ( result, path ) => {\n\t\tresult[ normalizePath( path ) ] = preloadedData[ path ];\n\t\treturn result;\n\t}, /** @type {Record<string, any>} */ ( {} ) );\n\n\treturn ( options, next ) => {\n\t\tconst { parse = true } = options;\n\t\t/** @type {string | void} */\n\t\tlet rawPath = options.path;\n\t\tif ( ! rawPath && options.url ) {\n\t\t\tconst pathFromQuery = getQueryArg( options.url, 'rest_route' );\n\t\t\tif ( typeof pathFromQuery === 'string' ) {\n\t\t\t\trawPath = pathFromQuery;\n\t\t\t}\n\t\t}\n\t\tif ( typeof rawPath !== 'string' ) {\n\t\t\treturn next( options );\n\t\t}\n\n\t\tconst method = options.method || 'GET';\n\t\tconst path = normalizePath( rawPath );\n\n\t\tif ( 'GET' === method && cache[ path ] ) {\n\t\t\tconst cacheData = cache[ path ];\n\n\t\t\t// Unsetting the cache key ensures that the data is only used a single time\n\t\t\tdelete cache[ path ];\n\n\t\t\treturn prepareResponse( cacheData, !! parse );\n\t\t} else if (\n\t\t\t'OPTIONS' === method &&\n\t\t\tcache[ method ] &&\n\t\t\tcache[ method ][ path ]\n\t\t) {\n\t\t\tconst cacheData = cache[ method ][ path ];\n\n\t\t\t// Unsetting the cache key ensures that the data is only used a single time\n\t\t\tdelete cache[ method ][ path ];\n\n\t\t\treturn prepareResponse( cacheData, !! parse );\n\t\t}\n\n\t\treturn next( options );\n\t};\n}\n\n/**\n * This is a helper function that sends a success response.\n *\n * @param {Record<string, any>} responseData\n * @param {boolean} parse\n * @return {Promise<any>} Promise with the response.\n */\nfunction prepareResponse( responseData, parse ) {\n\treturn Promise.resolve(\n\t\tparse\n\t\t\t? responseData.body\n\t\t\t: new window.Response( JSON.stringify( responseData.body ), {\n\t\t\t\t\tstatus: 200,\n\t\t\t\t\tstatusText: 'OK',\n\t\t\t\t\theaders: responseData.headers,\n\t\t\t } )\n\t);\n}\n\nexport default createPreloadingMiddleware;\n"]}
|
package/build-module/types.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
export {};
|
|
2
2
|
//# sourceMappingURL=types.js.map
|
|
@@ -11,7 +11,9 @@ import { __ } from '@wordpress/i18n';
|
|
|
11
11
|
* @return {Promise<any> | null | Response} Parsed response.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
const parseResponse = (response
|
|
14
|
+
const parseResponse = function (response) {
|
|
15
|
+
let shouldParseResponse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
16
|
+
|
|
15
17
|
if (shouldParseResponse) {
|
|
16
18
|
if (response.status === 204) {
|
|
17
19
|
return null;
|
|
@@ -55,7 +57,8 @@ const parseJsonAndNormalizeError = response => {
|
|
|
55
57
|
*/
|
|
56
58
|
|
|
57
59
|
|
|
58
|
-
export const parseResponseAndNormalizeError = (response
|
|
60
|
+
export const parseResponseAndNormalizeError = function (response) {
|
|
61
|
+
let shouldParseResponse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
59
62
|
return Promise.resolve(parseResponse(response, shouldParseResponse)).catch(res => parseAndThrowError(res, shouldParseResponse));
|
|
60
63
|
};
|
|
61
64
|
/**
|
|
@@ -66,7 +69,9 @@ export const parseResponseAndNormalizeError = (response, shouldParseResponse = t
|
|
|
66
69
|
* @return {Promise<any>} Parsed response.
|
|
67
70
|
*/
|
|
68
71
|
|
|
69
|
-
export function parseAndThrowError(response
|
|
72
|
+
export function parseAndThrowError(response) {
|
|
73
|
+
let shouldParseResponse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
74
|
+
|
|
70
75
|
if (!shouldParseResponse) {
|
|
71
76
|
throw response;
|
|
72
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/api-fetch/src/utils/response.js"],"names":["__","parseResponse","response","shouldParseResponse","status","json","Promise","reject","parseJsonAndNormalizeError","invalidJsonError","code","message","catch","parseResponseAndNormalizeError","resolve","res","parseAndThrowError","then","error","unknownError"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,EAAT,QAAmB,iBAAnB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMC,aAAa,GAAG,
|
|
1
|
+
{"version":3,"sources":["@wordpress/api-fetch/src/utils/response.js"],"names":["__","parseResponse","response","shouldParseResponse","status","json","Promise","reject","parseJsonAndNormalizeError","invalidJsonError","code","message","catch","parseResponseAndNormalizeError","resolve","res","parseAndThrowError","then","error","unknownError"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,EAAT,QAAmB,iBAAnB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMC,aAAa,GAAG,UAAEC,QAAF,EAA4C;AAAA,MAAhCC,mBAAgC,uEAAV,IAAU;;AACjE,MAAKA,mBAAL,EAA2B;AAC1B,QAAKD,QAAQ,CAACE,MAAT,KAAoB,GAAzB,EAA+B;AAC9B,aAAO,IAAP;AACA;;AAED,WAAOF,QAAQ,CAACG,IAAT,GAAgBH,QAAQ,CAACG,IAAT,EAAhB,GAAkCC,OAAO,CAACC,MAAR,CAAgBL,QAAhB,CAAzC;AACA;;AAED,SAAOA,QAAP;AACA,CAVD;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMM,0BAA0B,GAAKN,QAAF,IAAgB;AAClD,QAAMO,gBAAgB,GAAG;AACxBC,IAAAA,IAAI,EAAE,cADkB;AAExBC,IAAAA,OAAO,EAAEX,EAAE,CAAE,4CAAF;AAFa,GAAzB;;AAKA,MAAK,CAAEE,QAAF,IAAc,CAAEA,QAAQ,CAACG,IAA9B,EAAqC;AACpC,UAAMI,gBAAN;AACA;;AAED,SAAOP,QAAQ,CAACG,IAAT,GAAgBO,KAAhB,CAAuB,MAAM;AACnC,UAAMH,gBAAN;AACA,GAFM,CAAP;AAGA,CAbD;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,OAAO,MAAMI,8BAA8B,GAAG,UAC7CX,QAD6C,EAGzC;AAAA,MADJC,mBACI,uEADkB,IAClB;AACJ,SAAOG,OAAO,CAACQ,OAAR,CACNb,aAAa,CAAEC,QAAF,EAAYC,mBAAZ,CADP,EAELS,KAFK,CAEIG,GAAF,IAAWC,kBAAkB,CAAED,GAAF,EAAOZ,mBAAP,CAF/B,CAAP;AAGA,CAPM;AASP;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASa,kBAAT,CAA6Bd,QAA7B,EAAoE;AAAA,MAA7BC,mBAA6B,uEAAP,IAAO;;AAC1E,MAAK,CAAEA,mBAAP,EAA6B;AAC5B,UAAMD,QAAN;AACA;;AAED,SAAOM,0BAA0B,CAAEN,QAAF,CAA1B,CAAuCe,IAAvC,CAA+CC,KAAF,IAAa;AAChE,UAAMC,YAAY,GAAG;AACpBT,MAAAA,IAAI,EAAE,eADc;AAEpBC,MAAAA,OAAO,EAAEX,EAAE,CAAE,4BAAF;AAFS,KAArB;AAKA,UAAMkB,KAAK,IAAIC,YAAf;AACA,GAPM,CAAP;AAQA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Parses the apiFetch response.\n *\n * @param {Response} response\n * @param {boolean} shouldParseResponse\n *\n * @return {Promise<any> | null | Response} Parsed response.\n */\nconst parseResponse = ( response, shouldParseResponse = true ) => {\n\tif ( shouldParseResponse ) {\n\t\tif ( response.status === 204 ) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn response.json ? response.json() : Promise.reject( response );\n\t}\n\n\treturn response;\n};\n\n/**\n * Calls the `json` function on the Response, throwing an error if the response\n * doesn't have a json function or if parsing the json itself fails.\n *\n * @param {Response} response\n * @return {Promise<any>} Parsed response.\n */\nconst parseJsonAndNormalizeError = ( response ) => {\n\tconst invalidJsonError = {\n\t\tcode: 'invalid_json',\n\t\tmessage: __( 'The response is not a valid JSON response.' ),\n\t};\n\n\tif ( ! response || ! response.json ) {\n\t\tthrow invalidJsonError;\n\t}\n\n\treturn response.json().catch( () => {\n\t\tthrow invalidJsonError;\n\t} );\n};\n\n/**\n * Parses the apiFetch response properly and normalize response errors.\n *\n * @param {Response} response\n * @param {boolean} shouldParseResponse\n *\n * @return {Promise<any>} Parsed response.\n */\nexport const parseResponseAndNormalizeError = (\n\tresponse,\n\tshouldParseResponse = true\n) => {\n\treturn Promise.resolve(\n\t\tparseResponse( response, shouldParseResponse )\n\t).catch( ( res ) => parseAndThrowError( res, shouldParseResponse ) );\n};\n\n/**\n * Parses a response, throwing an error if parsing the response fails.\n *\n * @param {Response} response\n * @param {boolean} shouldParseResponse\n * @return {Promise<any>} Parsed response.\n */\nexport function parseAndThrowError( response, shouldParseResponse = true ) {\n\tif ( ! shouldParseResponse ) {\n\t\tthrow response;\n\t}\n\n\treturn parseJsonAndNormalizeError( response ).then( ( error ) => {\n\t\tconst unknownError = {\n\t\t\tcode: 'unknown_error',\n\t\t\tmessage: __( 'An unknown error occurred.' ),\n\t\t};\n\n\t\tthrow error || unknownError;\n\t} );\n}\n"]}
|
|
@@ -1,13 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Given a path, returns a normalized path where equal query parameter values
|
|
3
|
-
* will be treated as identical, regardless of order they appear in the original
|
|
4
|
-
* text.
|
|
5
|
-
*
|
|
6
|
-
* @param {string} path Original path.
|
|
7
|
-
*
|
|
8
|
-
* @return {string} Normalized path.
|
|
9
|
-
*/
|
|
10
|
-
export function getStablePath(path: string): string;
|
|
11
1
|
export default createPreloadingMiddleware;
|
|
12
2
|
/**
|
|
13
3
|
* @param {Record<string, any>} preloadedData
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preloading.d.ts","sourceRoot":"","sources":["../../src/middlewares/preloading.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"preloading.d.ts","sourceRoot":"","sources":["../../src/middlewares/preloading.js"],"names":[],"mappings":";AAKA;;;GAGG;AACH,2DAHW,OAAO,MAAM,EAAE,GAAG,CAAC,GAClB,OAAO,UAAU,EAAE,kBAAkB,CA+ChD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wordpress/api-fetch",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.0",
|
|
4
4
|
"description": "Utility to make WordPress REST API requests.",
|
|
5
5
|
"author": "The WordPress Contributors",
|
|
6
6
|
"license": "GPL-2.0-or-later",
|
|
@@ -27,12 +27,12 @@
|
|
|
27
27
|
"react-native": "src/index",
|
|
28
28
|
"types": "build-types",
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@babel/runtime": "^7.
|
|
31
|
-
"@wordpress/i18n": "^4.
|
|
32
|
-
"@wordpress/url": "^3.
|
|
30
|
+
"@babel/runtime": "^7.16.0",
|
|
31
|
+
"@wordpress/i18n": "^4.3.0",
|
|
32
|
+
"@wordpress/url": "^3.4.0"
|
|
33
33
|
},
|
|
34
34
|
"publishConfig": {
|
|
35
35
|
"access": "public"
|
|
36
36
|
},
|
|
37
|
-
"gitHead": "
|
|
37
|
+
"gitHead": "d95ccb9366e249133cdb1d7b25c382446b9ee502"
|
|
38
38
|
}
|
|
@@ -1,37 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* will be treated as identical, regardless of order they appear in the original
|
|
4
|
-
* text.
|
|
5
|
-
*
|
|
6
|
-
* @param {string} path Original path.
|
|
7
|
-
*
|
|
8
|
-
* @return {string} Normalized path.
|
|
2
|
+
* WordPress dependencies
|
|
9
3
|
*/
|
|
10
|
-
|
|
11
|
-
const splitted = path.split( '?' );
|
|
12
|
-
const query = splitted[ 1 ];
|
|
13
|
-
const base = splitted[ 0 ];
|
|
14
|
-
if ( ! query ) {
|
|
15
|
-
return base;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
// 'b=1&c=2&a=5'
|
|
19
|
-
return (
|
|
20
|
-
base +
|
|
21
|
-
'?' +
|
|
22
|
-
query
|
|
23
|
-
// [ 'b=1', 'c=2', 'a=5' ]
|
|
24
|
-
.split( '&' )
|
|
25
|
-
// [ [ 'b, '1' ], [ 'c', '2' ], [ 'a', '5' ] ]
|
|
26
|
-
.map( ( entry ) => entry.split( '=' ) )
|
|
27
|
-
// [ [ 'a', '5' ], [ 'b, '1' ], [ 'c', '2' ] ]
|
|
28
|
-
.sort( ( a, b ) => a[ 0 ].localeCompare( b[ 0 ] ) )
|
|
29
|
-
// [ 'a=5', 'b=1', 'c=2' ]
|
|
30
|
-
.map( ( pair ) => pair.join( '=' ) )
|
|
31
|
-
// 'a=5&b=1&c=2'
|
|
32
|
-
.join( '&' )
|
|
33
|
-
);
|
|
34
|
-
}
|
|
4
|
+
import { getQueryArg, normalizePath } from '@wordpress/url';
|
|
35
5
|
|
|
36
6
|
/**
|
|
37
7
|
* @param {Record<string, any>} preloadedData
|
|
@@ -39,50 +9,68 @@ export function getStablePath( path ) {
|
|
|
39
9
|
*/
|
|
40
10
|
function createPreloadingMiddleware( preloadedData ) {
|
|
41
11
|
const cache = Object.keys( preloadedData ).reduce( ( result, path ) => {
|
|
42
|
-
result[
|
|
12
|
+
result[ normalizePath( path ) ] = preloadedData[ path ];
|
|
43
13
|
return result;
|
|
44
14
|
}, /** @type {Record<string, any>} */ ( {} ) );
|
|
45
15
|
|
|
46
16
|
return ( options, next ) => {
|
|
47
17
|
const { parse = true } = options;
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
18
|
+
/** @type {string | void} */
|
|
19
|
+
let rawPath = options.path;
|
|
20
|
+
if ( ! rawPath && options.url ) {
|
|
21
|
+
const pathFromQuery = getQueryArg( options.url, 'rest_route' );
|
|
22
|
+
if ( typeof pathFromQuery === 'string' ) {
|
|
23
|
+
rawPath = pathFromQuery;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if ( typeof rawPath !== 'string' ) {
|
|
27
|
+
return next( options );
|
|
28
|
+
}
|
|
51
29
|
|
|
52
|
-
|
|
53
|
-
|
|
30
|
+
const method = options.method || 'GET';
|
|
31
|
+
const path = normalizePath( rawPath );
|
|
54
32
|
|
|
55
|
-
|
|
56
|
-
|
|
33
|
+
if ( 'GET' === method && cache[ path ] ) {
|
|
34
|
+
const cacheData = cache[ path ];
|
|
57
35
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
? cacheData.body
|
|
61
|
-
: new window.Response(
|
|
62
|
-
JSON.stringify( cacheData.body ),
|
|
63
|
-
{
|
|
64
|
-
status: 200,
|
|
65
|
-
statusText: 'OK',
|
|
66
|
-
headers: cacheData.headers,
|
|
67
|
-
}
|
|
68
|
-
)
|
|
69
|
-
);
|
|
70
|
-
} else if (
|
|
71
|
-
'OPTIONS' === method &&
|
|
72
|
-
cache[ method ] &&
|
|
73
|
-
cache[ method ][ path ]
|
|
74
|
-
) {
|
|
75
|
-
const cacheData = cache[ method ][ path ];
|
|
36
|
+
// Unsetting the cache key ensures that the data is only used a single time
|
|
37
|
+
delete cache[ path ];
|
|
76
38
|
|
|
77
|
-
|
|
78
|
-
|
|
39
|
+
return prepareResponse( cacheData, !! parse );
|
|
40
|
+
} else if (
|
|
41
|
+
'OPTIONS' === method &&
|
|
42
|
+
cache[ method ] &&
|
|
43
|
+
cache[ method ][ path ]
|
|
44
|
+
) {
|
|
45
|
+
const cacheData = cache[ method ][ path ];
|
|
79
46
|
|
|
80
|
-
|
|
81
|
-
|
|
47
|
+
// Unsetting the cache key ensures that the data is only used a single time
|
|
48
|
+
delete cache[ method ][ path ];
|
|
49
|
+
|
|
50
|
+
return prepareResponse( cacheData, !! parse );
|
|
82
51
|
}
|
|
83
52
|
|
|
84
53
|
return next( options );
|
|
85
54
|
};
|
|
86
55
|
}
|
|
87
56
|
|
|
57
|
+
/**
|
|
58
|
+
* This is a helper function that sends a success response.
|
|
59
|
+
*
|
|
60
|
+
* @param {Record<string, any>} responseData
|
|
61
|
+
* @param {boolean} parse
|
|
62
|
+
* @return {Promise<any>} Promise with the response.
|
|
63
|
+
*/
|
|
64
|
+
function prepareResponse( responseData, parse ) {
|
|
65
|
+
return Promise.resolve(
|
|
66
|
+
parse
|
|
67
|
+
? responseData.body
|
|
68
|
+
: new window.Response( JSON.stringify( responseData.body ), {
|
|
69
|
+
status: 200,
|
|
70
|
+
statusText: 'OK',
|
|
71
|
+
headers: responseData.headers,
|
|
72
|
+
} )
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
|
|
88
76
|
export default createPreloadingMiddleware;
|
|
@@ -1,32 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Internal dependencies
|
|
3
3
|
*/
|
|
4
|
-
import createPreloadingMiddleware
|
|
4
|
+
import createPreloadingMiddleware from '../preloading';
|
|
5
5
|
|
|
6
6
|
describe( 'Preloading Middleware', () => {
|
|
7
|
-
describe( 'getStablePath', () => {
|
|
8
|
-
it( 'returns same value if no query parameters', () => {
|
|
9
|
-
const path = '/foo/bar';
|
|
10
|
-
|
|
11
|
-
expect( getStablePath( path ) ).toBe( path );
|
|
12
|
-
} );
|
|
13
|
-
|
|
14
|
-
it( 'returns a stable path', () => {
|
|
15
|
-
const abc = getStablePath( '/foo/bar?a=5&b=1&c=2' );
|
|
16
|
-
const bca = getStablePath( '/foo/bar?b=1&c=2&a=5' );
|
|
17
|
-
const bac = getStablePath( '/foo/bar?b=1&a=5&c=2' );
|
|
18
|
-
const acb = getStablePath( '/foo/bar?a=5&c=2&b=1' );
|
|
19
|
-
const cba = getStablePath( '/foo/bar?c=2&b=1&a=5' );
|
|
20
|
-
const cab = getStablePath( '/foo/bar?c=2&a=5&b=1' );
|
|
21
|
-
|
|
22
|
-
expect( abc ).toBe( bca );
|
|
23
|
-
expect( bca ).toBe( bac );
|
|
24
|
-
expect( bac ).toBe( acb );
|
|
25
|
-
expect( acb ).toBe( cba );
|
|
26
|
-
expect( cba ).toBe( cab );
|
|
27
|
-
} );
|
|
28
|
-
} );
|
|
29
|
-
|
|
30
7
|
describe( 'given preloaded data', () => {
|
|
31
8
|
describe( 'when data is requested from a preloaded endpoint', () => {
|
|
32
9
|
describe( 'and it is requested for the first time', () => {
|
|
@@ -82,6 +59,17 @@ describe( 'Preloading Middleware', () => {
|
|
|
82
59
|
|
|
83
60
|
describe( 'and the OPTIONS request has a parse flag', () => {
|
|
84
61
|
it( 'should return the full response if parse: false', () => {
|
|
62
|
+
const noResponseMock =
|
|
63
|
+
'undefined' === typeof window.Response;
|
|
64
|
+
if ( noResponseMock ) {
|
|
65
|
+
window.Response = class {
|
|
66
|
+
constructor( body, options ) {
|
|
67
|
+
this.body = JSON.parse( body );
|
|
68
|
+
this.headers = options.headers;
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
85
73
|
const data = {
|
|
86
74
|
body: {
|
|
87
75
|
status: 'this is the preloaded response',
|
|
@@ -108,6 +96,9 @@ describe( 'Preloading Middleware', () => {
|
|
|
108
96
|
};
|
|
109
97
|
|
|
110
98
|
const response = preloadingMiddleware( requestOptions );
|
|
99
|
+
if ( noResponseMock ) {
|
|
100
|
+
delete window.Response;
|
|
101
|
+
}
|
|
111
102
|
return response.then( ( value ) => {
|
|
112
103
|
expect( value ).toEqual( data );
|
|
113
104
|
} );
|
package/src/test/index.js
CHANGED
|
@@ -127,6 +127,7 @@ describe( 'apiFetch', () => {
|
|
|
127
127
|
);
|
|
128
128
|
|
|
129
129
|
return apiFetch( { path: '/random' } ).catch( ( body ) => {
|
|
130
|
+
// eslint-disable-next-line jest/no-conditional-expect
|
|
130
131
|
expect( body ).toEqual( {
|
|
131
132
|
code: 'bad_request',
|
|
132
133
|
message: 'Bad Request',
|
|
@@ -142,6 +143,7 @@ describe( 'apiFetch', () => {
|
|
|
142
143
|
);
|
|
143
144
|
|
|
144
145
|
return apiFetch( { path: '/random' } ).catch( ( body ) => {
|
|
146
|
+
// eslint-disable-next-line jest/no-conditional-expect
|
|
145
147
|
expect( body ).toEqual( {
|
|
146
148
|
code: 'invalid_json',
|
|
147
149
|
message: 'The response is not a valid JSON response.',
|
|
@@ -160,6 +162,7 @@ describe( 'apiFetch', () => {
|
|
|
160
162
|
);
|
|
161
163
|
|
|
162
164
|
return apiFetch( { path: '/random' } ).catch( ( body ) => {
|
|
165
|
+
// eslint-disable-next-line jest/no-conditional-expect
|
|
163
166
|
expect( body ).toEqual( {
|
|
164
167
|
code: 'invalid_json',
|
|
165
168
|
message: 'The response is not a valid JSON response.',
|
|
@@ -171,6 +174,7 @@ describe( 'apiFetch', () => {
|
|
|
171
174
|
window.fetch.mockReturnValue( Promise.reject() );
|
|
172
175
|
|
|
173
176
|
return apiFetch( { path: '/random' } ).catch( ( body ) => {
|
|
177
|
+
// eslint-disable-next-line jest/no-conditional-expect
|
|
174
178
|
expect( body ).toEqual( {
|
|
175
179
|
code: 'fetch_error',
|
|
176
180
|
message: 'You are probably offline.',
|
|
@@ -213,6 +217,7 @@ describe( 'apiFetch', () => {
|
|
|
213
217
|
);
|
|
214
218
|
|
|
215
219
|
return apiFetch( { path: '/random' } ).catch( ( body ) => {
|
|
220
|
+
// eslint-disable-next-line jest/no-conditional-expect
|
|
216
221
|
expect( body ).toEqual( null );
|
|
217
222
|
} );
|
|
218
223
|
} );
|
|
@@ -242,6 +247,7 @@ describe( 'apiFetch', () => {
|
|
|
242
247
|
|
|
243
248
|
return apiFetch( { path: '/random', parse: false } ).catch(
|
|
244
249
|
( response ) => {
|
|
250
|
+
// eslint-disable-next-line jest/no-conditional-expect
|
|
245
251
|
expect( response ).toEqual( {
|
|
246
252
|
status: 400,
|
|
247
253
|
} );
|
package/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"program":{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../i18n/build-types/sprintf.d.ts","../hooks/build-types/createaddhook.d.ts","../hooks/build-types/createremovehook.d.ts","../hooks/build-types/createhashook.d.ts","../hooks/build-types/createdoinghook.d.ts","../hooks/build-types/createdidhook.d.ts","../hooks/build-types/index.d.ts","../hooks/build-types/createhooks.d.ts","../i18n/build-types/create-i18n.d.ts","../i18n/build-types/default-i18n.d.ts","../i18n/build-types/index.d.ts","./src/types.ts","./src/middlewares/nonce.js","./src/middlewares/namespace-endpoint.js","./src/middlewares/root-url.js","./src/middlewares/preloading.js","../url/build-types/is-url.d.ts","../url/build-types/is-email.d.ts","../url/build-types/get-protocol.d.ts","../url/build-types/is-valid-protocol.d.ts","../url/build-types/get-authority.d.ts","../url/build-types/is-valid-authority.d.ts","../url/build-types/get-path.d.ts","../url/build-types/is-valid-path.d.ts","../url/build-types/get-query-string.d.ts","../url/build-types/build-query-string.d.ts","../url/build-types/is-valid-query-string.d.ts","../url/build-types/get-path-and-query-string.d.ts","../url/build-types/get-fragment.d.ts","../url/build-types/is-valid-fragment.d.ts","../url/build-types/add-query-args.d.ts","../url/build-types/get-query-arg.d.ts","../url/build-types/get-query-args.d.ts","../url/build-types/has-query-arg.d.ts","../url/build-types/remove-query-args.d.ts","../url/build-types/prepend-http.d.ts","../url/build-types/safe-decode-uri.d.ts","../url/build-types/safe-decode-uri-component.d.ts","../url/build-types/filter-url-for-display.d.ts","../url/build-types/clean-for-slug.d.ts","../url/build-types/get-filename.d.ts","../url/build-types/index.d.ts","./src/middlewares/fetch-all-middleware.js","./src/middlewares/http-v1.js","./src/middlewares/user-locale.js","./src/utils/response.js","./src/middlewares/media-upload.js","./src/index.js"],"fileInfos":[{"version":"aa9fb4c70f369237c2f45f9d969c9a59e0eae9a192962eb48581fe864aa609db","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940","eb75e89d63b3b72dd9ca8b0cac801cecae5be352307c004adeaa60bc9d6df51f","2cc028cd0bdb35b1b5eb723d84666a255933fffbea607f72cbd0c7c7b4bee144",{"version":"e54c8715a4954cfdc66cd69489f2b725c09ebf37492dbd91cff0a1688b1159e8","affectsGlobalScope":true},{"version":"51b8b27c21c066bf877646e320bf6a722b80d1ade65e686923cd9d4494aef1ca","affectsGlobalScope":true},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"2c8c5ee58f30e7c944e04ab1fb5506fdbb4dd507c9efa6972cf4b91cec90c503","affectsGlobalScope":true},{"version":"2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c","affectsGlobalScope":true},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true},{"version":"62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"75ec0bdd727d887f1b79ed6619412ea72ba3c81d92d0787ccb64bab18d261f14","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"1b3fe904465430e030c93239a348f05e1be80640d91f2f004c3512c2c2c89f34","affectsGlobalScope":true},{"version":"7435b75fdf3509622e79622dbe5091cf4b09688410ee2034e4fc17d0c99d0862","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"9f1817f7c3f02f6d56e0f403b927e90bb133f371dcebc36fa7d6d208ef6899da","affectsGlobalScope":true},{"version":"cd6efb9467a8b6338ece2e2855e37765700f2cd061ca54b01b33878cf5c7677e","affectsGlobalScope":true},{"version":"fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe","affectsGlobalScope":true},{"version":"5b0ca94ec819d68d33da516306c15297acec88efeb0ae9e2b39f71dbd9685ef7","affectsGlobalScope":true},{"version":"4632665b87204bb1caa8b44d165bce0c50dfab177df5b561b345a567cabacf9a","affectsGlobalScope":true},"762bc52248d3fab9873c7af564caf622358312cb35de42a4393b71cc36e14621","d02ec79cefaf292fae64b3be5a4416e64b4e420a6429fd458fac6e1bb4c7950e","27abed653f600ea0d5c86e94181beb42824e0f3f16337e2f9e7e9e9c2c392edf","d7871e0e653aa7197fee88886db5678bee6d42164c1f36e4bce9421ddfa7ca49","11ed10bdb3bcc99893570507eac8fece4840add97ee1d4f5a7fbf41cbfdea0d4","429fb571d3db07d3eaa2e74d43eb4190ece3e0de832ed564aeeaf08873e598eb","406d52bf33d618d846aa0d831ee004290567e328edcd4517bbff2937cc977abf","d3060e0810fc0d0dc009e6f086ef413d3c8aeaaf07da25c8d25fd4e181646acf","9d8f457905054b69915abac57f33e356fdcebce3a10e5be7fcfccad5da5aa934","08f7e6ffa66c66a636aecc5acbeb998215d9d09ccba0c558afb7df7e218edeaf","f829eb39aea4487f0ff94a42c56a1a73bc5202bbdeb03f7a638e4ab3e290d017","d8c4f047684abe4a04c0f6bfc2dfca7b191c4bc7856f2bf63c0b8c04d3c3c59c","cea174bd7165f6473e9251e89b77677cc6fb980a0329964499ff39d7049941a9","3601498a0b299615d2b1871518f4e512837afa1ec33c10e5787c31297dba0e6b","b85af6a2052b84fadbe8e760359bec9d2cb765c404bab048d4bd20477c02bd89","e1132ceb34e45fb5b72953bdaefc89525a4ddc6219a5dcfc3558a0d11283ccae","91265e9c2705df9edc7d912afe177cb9dbe4bd4fe254cc43466885544c065013","81e7db9916d6ce0323656530cb9aba444450454e5a8f3d0108f04931abb36258","7858aa21ac91fef2c9cdf96b3ae00e025efed2920ffca40a75df452d4f5a9576","eb80dedcd92c17d93f403e736e1c3e2aef39379841070221a353a7c13b57369f","029f3a1e2534e85a7cd00f3e79781003e0bcf5147d96db93594ace839803c6cf","2eea9984a7ea08e576d2970ba65a65ebba02699bccdbd0d3a08bb141e15972a1","308246446616acc5397747f35fa8788de7e6ba6cd5dc0ec2752bd75eafefcdb9","9677ef56e52539a73f1d9b89c692cf866d05017b05d9d2fe8cd35a30b42c2d47","6048b5c50d6486b1084b036a7f7d6c76c032d90cc2186f79b344a12ceb488511","26885abe66e07fd38da599d5fc9b4fa8b2df803c56e9bba99a2505e0b982c042","507dc7647a71c90e8cce85259c624b355c22e0dee1833aa4ba20c15a4f5bd21a","c30aaf3d189be8c29b2d3a7761e94b5b532fec6ba0caa74d07a4c1056469acf0","454217fe7beba4cb5497d4bc7fd3116437ce85e5217eb66f3b367fbcbfd45861","65e1ffb7b2343a1814c5cb85164f7d26bce1477b2cf04e6736f37732bc4801d6","3f810d7cac3e3729241d52d667538dc4ca27687f5d40d91f4cb5bce955df5f94","a2bedf5636ce572e507823229c9b7d4e87d97830497822d76e95a971fee78c92","17ab13eba7cde42ca7c95110c7eda405ba6aba7471437d912078d67dfada98eb","f7e734ca25cb0e8c52247b9a7d98f81ffd6ac52485bf9d8938fdbd4d828f469c","5261283f0b521fc1f255a060dcd86986985bd516822b69bb5504392462962899","44e20ca481bcc2abec1f4fcf54139caa4389f1bc16e3ee9d19a10e522903e9ab","a31eda6fcbf86596f69f7c18e6d13af58191fdc9c9620bcc67595fd9e49043ab","c93085fa9e5e568c0a45f64caa05e713fd5438e93d32f5970753e44910bdd540","1e442333978b5864818023d54d4f2e2aa0cbdfb2b486a0d43c900a7a87d61d1d","f215ce6766668f37f5e4652d0facdf55816f24aa5fc6f68c5e33754dbe5219fb","e900ec60297a15c4de70ddaade026ea4fe635e27c286fedd82dd5e963daa1930","d77de11c508405928a38cffebd46ef7d724a0bd5489db32a4e1300fefc0b4708","73df30672e4cf303ecaa5bd1c0a228aec9bd972305b227ac47e53600b88eeb09","86113173dcf3a28562ae7493a30168e671b54a413095025d40eb462ebc55a4b5","e2ca321ccf84538d48bc2b24db351997d607695d37b6d6d50440385c8bffa7bc","b24db76807128fad060ace7e8dda79b87a1cbc3879e67e15f8255e788a8ebfaa","8947b5182e734afd1d79ac20b1a0856f6ece9924fe1c6a5163d4a117384c7b35","0a4ab7948650cf31fcbc3f2d9e0428f258cdd0b4a8530693b25ca9b15e955b04"],"options":{"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"declarationDir":"./build-types","declarationMap":true,"emitDeclarationOnly":true,"esModuleInterop":false,"importsNotUsedAsValues":2,"jsx":1,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUnusedLocals":true,"noUnusedParameters":true,"rootDir":"./src","strict":true,"target":99},"fileIdsList":[[55,56,57,58,59,60,87,88,89,90,91],[56,86,92],[56],[55,56,90],[56,58],[56,86],[55],[51],[46,47,48,49,50,51],[46,47,48,49,50,52],[51,52],[53],[45,53,54],[76],[61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85]],"referencedMap":[[92,1],[87,2],[88,3],[91,4],[58,3],[57,3],[60,3],[59,5],[89,6],[90,7],[46,8],[50,8],[49,8],[48,8],[52,9],[47,8],[51,10],[53,11],[54,12],[55,13],[77,14],[86,15]],"exportedModulesMap":[[92,1],[87,2],[88,3],[91,4],[58,3],[57,3],[60,3],[59,5],[89,6],[90,7],[46,8],[50,8],[49,8],[48,8],[52,9],[47,8],[51,10],[53,11],[54,12],[55,13],[77,14],[86,15]],"semanticDiagnosticsPerFile":[10,12,11,2,13,14,15,16,17,18,19,20,3,4,24,21,22,23,25,26,27,5,28,29,30,31,6,32,33,34,35,7,40,36,37,38,39,8,41,42,43,1,9,44,92,87,88,91,58,57,60,59,89,56,90,46,50,49,48,52,47,51,53,54,55,45,75,70,84,83,65,85,73,72,67,63,76,77,69,78,86,62,61,66,74,68,64,71,80,79,82,81]},"version":"4.4.2"}
|
|
1
|
+
{"program":{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../i18n/build-types/sprintf.d.ts","../hooks/build-types/createaddhook.d.ts","../hooks/build-types/createremovehook.d.ts","../hooks/build-types/createhashook.d.ts","../hooks/build-types/createdoinghook.d.ts","../hooks/build-types/createdidhook.d.ts","../hooks/build-types/index.d.ts","../hooks/build-types/createhooks.d.ts","../i18n/build-types/create-i18n.d.ts","../i18n/build-types/default-i18n.d.ts","../i18n/build-types/index.d.ts","./src/types.ts","./src/middlewares/nonce.js","./src/middlewares/namespace-endpoint.js","./src/middlewares/root-url.js","../url/build-types/is-url.d.ts","../url/build-types/is-email.d.ts","../url/build-types/get-protocol.d.ts","../url/build-types/is-valid-protocol.d.ts","../url/build-types/get-authority.d.ts","../url/build-types/is-valid-authority.d.ts","../url/build-types/get-path.d.ts","../url/build-types/is-valid-path.d.ts","../url/build-types/get-query-string.d.ts","../url/build-types/build-query-string.d.ts","../url/build-types/is-valid-query-string.d.ts","../url/build-types/get-path-and-query-string.d.ts","../url/build-types/get-fragment.d.ts","../url/build-types/is-valid-fragment.d.ts","../url/build-types/add-query-args.d.ts","../url/build-types/get-query-arg.d.ts","../url/build-types/get-query-args.d.ts","../url/build-types/has-query-arg.d.ts","../url/build-types/remove-query-args.d.ts","../url/build-types/prepend-http.d.ts","../url/build-types/safe-decode-uri.d.ts","../url/build-types/safe-decode-uri-component.d.ts","../url/build-types/filter-url-for-display.d.ts","../url/build-types/clean-for-slug.d.ts","../url/build-types/get-filename.d.ts","../url/build-types/normalize-path.d.ts","../url/build-types/index.d.ts","./src/middlewares/preloading.js","./src/middlewares/fetch-all-middleware.js","./src/middlewares/http-v1.js","./src/middlewares/user-locale.js","./src/utils/response.js","./src/middlewares/media-upload.js","./src/index.js"],"fileInfos":[{"version":"aa9fb4c70f369237c2f45f9d969c9a59e0eae9a192962eb48581fe864aa609db","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940","eb75e89d63b3b72dd9ca8b0cac801cecae5be352307c004adeaa60bc9d6df51f","2cc028cd0bdb35b1b5eb723d84666a255933fffbea607f72cbd0c7c7b4bee144",{"version":"e54c8715a4954cfdc66cd69489f2b725c09ebf37492dbd91cff0a1688b1159e8","affectsGlobalScope":true},{"version":"51b8b27c21c066bf877646e320bf6a722b80d1ade65e686923cd9d4494aef1ca","affectsGlobalScope":true},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"2c8c5ee58f30e7c944e04ab1fb5506fdbb4dd507c9efa6972cf4b91cec90c503","affectsGlobalScope":true},{"version":"2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c","affectsGlobalScope":true},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true},{"version":"62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"75ec0bdd727d887f1b79ed6619412ea72ba3c81d92d0787ccb64bab18d261f14","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"1b3fe904465430e030c93239a348f05e1be80640d91f2f004c3512c2c2c89f34","affectsGlobalScope":true},{"version":"7435b75fdf3509622e79622dbe5091cf4b09688410ee2034e4fc17d0c99d0862","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"9f1817f7c3f02f6d56e0f403b927e90bb133f371dcebc36fa7d6d208ef6899da","affectsGlobalScope":true},{"version":"cd6efb9467a8b6338ece2e2855e37765700f2cd061ca54b01b33878cf5c7677e","affectsGlobalScope":true},{"version":"fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe","affectsGlobalScope":true},{"version":"5b0ca94ec819d68d33da516306c15297acec88efeb0ae9e2b39f71dbd9685ef7","affectsGlobalScope":true},{"version":"4632665b87204bb1caa8b44d165bce0c50dfab177df5b561b345a567cabacf9a","affectsGlobalScope":true},"762bc52248d3fab9873c7af564caf622358312cb35de42a4393b71cc36e14621","d02ec79cefaf292fae64b3be5a4416e64b4e420a6429fd458fac6e1bb4c7950e","27abed653f600ea0d5c86e94181beb42824e0f3f16337e2f9e7e9e9c2c392edf","d7871e0e653aa7197fee88886db5678bee6d42164c1f36e4bce9421ddfa7ca49","11ed10bdb3bcc99893570507eac8fece4840add97ee1d4f5a7fbf41cbfdea0d4","429fb571d3db07d3eaa2e74d43eb4190ece3e0de832ed564aeeaf08873e598eb","406d52bf33d618d846aa0d831ee004290567e328edcd4517bbff2937cc977abf","d3060e0810fc0d0dc009e6f086ef413d3c8aeaaf07da25c8d25fd4e181646acf","c0306658efb85764bb6d8d55097007c68a70539b24d0e18fb6edd6eb1778f632","08f7e6ffa66c66a636aecc5acbeb998215d9d09ccba0c558afb7df7e218edeaf","f829eb39aea4487f0ff94a42c56a1a73bc5202bbdeb03f7a638e4ab3e290d017","d8c4f047684abe4a04c0f6bfc2dfca7b191c4bc7856f2bf63c0b8c04d3c3c59c","cea174bd7165f6473e9251e89b77677cc6fb980a0329964499ff39d7049941a9","3601498a0b299615d2b1871518f4e512837afa1ec33c10e5787c31297dba0e6b","b85af6a2052b84fadbe8e760359bec9d2cb765c404bab048d4bd20477c02bd89","91265e9c2705df9edc7d912afe177cb9dbe4bd4fe254cc43466885544c065013","81e7db9916d6ce0323656530cb9aba444450454e5a8f3d0108f04931abb36258","7858aa21ac91fef2c9cdf96b3ae00e025efed2920ffca40a75df452d4f5a9576","eb80dedcd92c17d93f403e736e1c3e2aef39379841070221a353a7c13b57369f","029f3a1e2534e85a7cd00f3e79781003e0bcf5147d96db93594ace839803c6cf","2eea9984a7ea08e576d2970ba65a65ebba02699bccdbd0d3a08bb141e15972a1","308246446616acc5397747f35fa8788de7e6ba6cd5dc0ec2752bd75eafefcdb9","9677ef56e52539a73f1d9b89c692cf866d05017b05d9d2fe8cd35a30b42c2d47","6048b5c50d6486b1084b036a7f7d6c76c032d90cc2186f79b344a12ceb488511","26885abe66e07fd38da599d5fc9b4fa8b2df803c56e9bba99a2505e0b982c042","507dc7647a71c90e8cce85259c624b355c22e0dee1833aa4ba20c15a4f5bd21a","c30aaf3d189be8c29b2d3a7761e94b5b532fec6ba0caa74d07a4c1056469acf0","454217fe7beba4cb5497d4bc7fd3116437ce85e5217eb66f3b367fbcbfd45861","65e1ffb7b2343a1814c5cb85164f7d26bce1477b2cf04e6736f37732bc4801d6","3f810d7cac3e3729241d52d667538dc4ca27687f5d40d91f4cb5bce955df5f94","a2bedf5636ce572e507823229c9b7d4e87d97830497822d76e95a971fee78c92","17ab13eba7cde42ca7c95110c7eda405ba6aba7471437d912078d67dfada98eb","f7e734ca25cb0e8c52247b9a7d98f81ffd6ac52485bf9d8938fdbd4d828f469c","5261283f0b521fc1f255a060dcd86986985bd516822b69bb5504392462962899","44e20ca481bcc2abec1f4fcf54139caa4389f1bc16e3ee9d19a10e522903e9ab","a31eda6fcbf86596f69f7c18e6d13af58191fdc9c9620bcc67595fd9e49043ab","c93085fa9e5e568c0a45f64caa05e713fd5438e93d32f5970753e44910bdd540","1e442333978b5864818023d54d4f2e2aa0cbdfb2b486a0d43c900a7a87d61d1d","f215ce6766668f37f5e4652d0facdf55816f24aa5fc6f68c5e33754dbe5219fb","e900ec60297a15c4de70ddaade026ea4fe635e27c286fedd82dd5e963daa1930","e4e975c7339a9579209f12246e95f95216aa3558b8e7719fea2fbadaf28c574b","178efee8d4335cb61ec45c10e6de6d7afe48028963c5633f5937f25eaffa2387","a275e92ef3e4265a6fc84d417cd7121f5f80c021a6e1a26d1776ad1cacf9ac17","73df30672e4cf303ecaa5bd1c0a228aec9bd972305b227ac47e53600b88eeb09","86113173dcf3a28562ae7493a30168e671b54a413095025d40eb462ebc55a4b5","e2ca321ccf84538d48bc2b24db351997d607695d37b6d6d50440385c8bffa7bc","b24db76807128fad060ace7e8dda79b87a1cbc3879e67e15f8255e788a8ebfaa","8947b5182e734afd1d79ac20b1a0856f6ece9924fe1c6a5163d4a117384c7b35","0a4ab7948650cf31fcbc3f2d9e0428f258cdd0b4a8530693b25ca9b15e955b04"],"options":{"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"declarationDir":"./build-types","declarationMap":true,"emitDeclarationOnly":true,"esModuleInterop":false,"importsNotUsedAsValues":2,"jsx":1,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUnusedLocals":true,"noUnusedParameters":true,"rootDir":"./src","strict":true,"target":99},"fileIdsList":[[55,56,57,58,59,87,88,89,90,91,92],[56,86,93],[56],[55,56,91],[56,86],[56,58],[55],[51],[46,47,48,49,50,51],[46,47,48,49,50,52],[51,52],[53],[45,53,54],[75],[60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85]],"referencedMap":[[93,1],[88,2],[89,3],[92,4],[58,3],[57,3],[87,5],[59,6],[90,5],[91,7],[46,8],[50,8],[49,8],[48,8],[52,9],[47,8],[51,10],[53,11],[54,12],[55,13],[76,14],[86,15]],"exportedModulesMap":[[93,1],[88,2],[89,3],[92,4],[58,3],[57,3],[87,5],[59,6],[90,5],[91,7],[46,8],[50,8],[49,8],[48,8],[52,9],[47,8],[51,10],[53,11],[54,12],[55,13],[76,14],[86,15]],"semanticDiagnosticsPerFile":[10,12,11,2,13,14,15,16,17,18,19,20,3,4,24,21,22,23,25,26,27,5,28,29,30,31,6,32,33,34,35,7,40,36,37,38,39,8,41,42,43,1,9,44,93,88,89,92,58,57,87,59,90,56,91,46,50,49,48,52,47,51,53,54,55,45,74,69,83,82,64,84,72,71,66,62,75,76,68,77,86,61,60,65,73,67,63,70,85,79,78,81,80]},"version":"4.4.2"}
|