diff --git a/src/request.js b/src/request.js index d13873b6e..d058ee97e 100644 --- a/src/request.js +++ b/src/request.js @@ -6,7 +6,7 @@ * All spec algorithm step numbers are based on https://fetch.spec.whatwg.org/commit-snapshots/ae716822cb3a61843226cd090eefc6589446c1d2/. */ -import {format as formatUrl} from 'node:url'; +import {deprecate, format as formatUrl} from 'node:url'; import Headers from './headers.js'; import Body, {clone, extractContentType, getTotalBytes} from './body.js'; import {isAbortSignal} from './utils/is.js'; @@ -30,6 +30,10 @@ const isRequest = object => { ); }; +const doBadDataWarn = deprecate(() => {}, + '.data is not a valid RequestInit property, use .body instead', + 'https://github.com/node-fetch/node-fetch/issues/1000 (request)'); + /** * Request class * @@ -58,6 +62,10 @@ export default class Request extends Body { let method = init.method || input.method || 'GET'; method = method.toUpperCase(); + if ('data' in init) { + doBadDataWarn(); + } + // eslint-disable-next-line no-eq-null, eqeqeq if ((init.body != null || (isRequest(input) && input.body !== null)) && (method === 'GET' || method === 'HEAD')) { diff --git a/src/response.js b/src/response.js index 63af26711..65ed9fd93 100644 --- a/src/response.js +++ b/src/response.js @@ -7,6 +7,7 @@ import Headers from './headers.js'; import Body, {clone, extractContentType} from './body.js'; import {isRedirect} from './utils/is-redirect.js'; +import {deprecate} from 'util'; const INTERNALS = Symbol('Response internals'); @@ -137,5 +138,8 @@ Object.defineProperties(Response.prototype, { redirected: {enumerable: true}, statusText: {enumerable: true}, headers: {enumerable: true}, - clone: {enumerable: true} + clone: {enumerable: true}, + data: {get: deprecate(() => {}, + '.data is not a valid Response property, use .json(), .text(), .arrayBuffer(), or .body instead', + 'https://github.com/node-fetch/node-fetch/issues/1000 (response)')} }); diff --git a/test/request.js b/test/request.js index 527fab9d4..221f8e880 100644 --- a/test/request.js +++ b/test/request.js @@ -283,4 +283,19 @@ describe('Request', () => { expect(result).to.equal('a=1'); }); }); + + it('should warn once when using .data (request)', () => new Promise(resolve => { + const listenerFunc = ev => { + process.off('warning', listenerFunc); + expect(ev.message).to.equal('.data is not a valid RequestInit property, use .body instead'); + resolve(); + }; + + process.on('warning', listenerFunc); + + // eslint-disable-next-line no-new + new Request(base, { + data: '' + }); + })); }); diff --git a/test/response.js b/test/response.js index 0a3b62a3b..85c87cfba 100644 --- a/test/response.js +++ b/test/response.js @@ -248,4 +248,17 @@ describe('Response', () => { expect(res.status).to.equal(0); expect(res.statusText).to.equal(''); }); + + it('should warn once when using .data (response)', () => new Promise(resolve => { + const listenerFunc = ev => { + process.off('warning', listenerFunc); + expect(ev.message).to.equal('.data is not a valid Response property, use .json(), .text(), .arrayBuffer(), or .body instead'); + resolve(); + }; + + process.on('warning', listenerFunc); + + const response = new Response('a'); + response.data; + })); });