2
0
mirror of https://github.com/tenrok/axios.git synced 2026-05-15 11:59:42 +03:00

feat: support reviver on JSON.parse (#5926)

* test: test to support reviver on JSON.parse

* feat: support reviver for JSON.parse on parse response data

#5924

---------

Co-authored-by: Jay <jasonsaayman@gmail.com>
This commit is contained in:
Willian Agostini
2025-08-12 04:34:42 -03:00
committed by GitHub
parent 7960d34ede
commit 2a9763426e
3 changed files with 20 additions and 1 deletions
Vendored
+1
View File
@@ -361,6 +361,7 @@ export interface AxiosRequestConfig<D = any> {
lookup?: ((hostname: string, options: object, cb: (err: Error | null, address: LookupAddress | LookupAddress[], family?: AddressFamily) => void) => void) |
((hostname: string, options: object) => Promise<[address: LookupAddressEntry | LookupAddressEntry[], family?: AddressFamily] | LookupAddress>);
withXSRFToken?: boolean | ((config: InternalAxiosRequestConfig) => boolean | undefined);
parseReviver?: (this: any, key: string, value: any) => any;
fetchOptions?: Omit<RequestInit, 'body' | 'headers' | 'method' | 'signal'> | Record<string, any>;
}
+1 -1
View File
@@ -111,7 +111,7 @@ const defaults = {
const strictJSONParsing = !silentJSONParsing && JSONRequested;
try {
return JSON.parse(data);
return JSON.parse(data, this.parseReviver);
} catch (e) {
if (strictJSONParsing) {
if (e.name === 'SyntaxError') {
+18
View File
@@ -2332,4 +2332,22 @@ describe('supports http with nodejs', function () {
}, /ENOTFOUND/);
});
});
describe('JSON', function() {
it('should support reviver on JSON.parse', async function () {
server = await startHTTPServer(async (_, res) => {
res.end(JSON.stringify({
foo: 'bar'
}));
});
const {data} = await axios.get(LOCAL_SERVER_URL, {
parseReviver: (key, value) => {
return key === 'foo' ? 'success' : value;
},
});
assert.deepStrictEqual(data, {foo: 'success'});
});
});
});