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
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 20 additions and 1 deletions

1
index.d.ts vendored
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>;
}

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') {

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'});
});
});
});