From 0f97d62844e1fc3c56ebbec1ff1d2d0f66272190 Mon Sep 17 00:00:00 2001 From: Konstantin Vyatkin Date: Thu, 21 May 2020 02:50:31 -0400 Subject: [PATCH] drop Babel (while keeping ESM) (#805) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * drop Babel * fix lint * just to trigger CI * Update package.json Co-authored-by: Linus Unnebäck * fix all imports * coverage only from Node 14.x * remove esm * restore travis * fix lint Co-authored-by: Linus Unnebäck --- .editorconfig | 3 +++ package.json | 52 +++++++++++++-------------------------- rollup.config.js | 18 ++++++++++++++ src/body.js | 4 +-- src/index.js | 23 ++++++++--------- src/request.js | 8 +++--- src/response.js | 4 +-- test/external-encoding.js | 2 +- test/headers.js | 2 +- test/main.js | 30 +++++++++++----------- test/request.js | 12 +++++---- test/response.js | 4 +-- test/utils/server.js | 13 +++------- 13 files changed, 89 insertions(+), 86 deletions(-) create mode 100644 rollup.config.js diff --git a/.editorconfig b/.editorconfig index 991f40f..d324ccc 100644 --- a/.editorconfig +++ b/.editorconfig @@ -11,3 +11,6 @@ indent_style = tab [*.md] trim_trailing_whitespace = false + +[*.yml] +indent_style = space diff --git a/package.json b/package.json index 9e18398..7e61222 100644 --- a/package.json +++ b/package.json @@ -2,12 +2,13 @@ "name": "node-fetch", "version": "3.0.0-beta.5", "description": "A light-weight module that brings window.fetch to node.js", - "main": "./dist/index.js", + "main": "./dist/index.cjs", "module": "./src/index.js", "sideEffects": false, + "type": "module", "exports": { "import": "./src/index.js", - "require": "./dist/index.js" + "require": "./dist/index.cjs" }, "files": [ "src", @@ -18,9 +19,9 @@ "node": ">=10" }, "scripts": { - "build": "babel src --out-dir dist", - "test": "nyc --reporter=html --reporter=text mocha --require @babel/register --throw-deprecation", - "coverage": "nyc report --reporter=text-lcov | coveralls", + "build": "rollup -c", + "test": "node --experimental-modules node_modules/.bin/c8 --reporter=html --reporter=text --check-coverage node --experimental-modules node_modules/.bin/mocha", + "coverage": "c8 report --reporter=text-lcov | coveralls", "lint": "xo" }, "repository": { @@ -43,26 +44,20 @@ "url": "https://opencollective.com/node-fetch" }, "devDependencies": { - "@babel/cli": "^7.8.4", - "@babel/core": "^7.9.0", - "@babel/preset-env": "^7.9.5", - "@babel/register": "^7.9.0", - "@istanbuljs/nyc-config-babel": "^3.0.0", "abort-controller": "^3.0.0", "abortcontroller-polyfill": "^1.4.0", - "babel-plugin-add-module-exports": "^1.0.2", - "babel-plugin-istanbul": "^6.0.0", + "c8": "^7.1.2", "chai": "^4.2.0", "chai-as-promised": "^7.1.1", "chai-iterator": "^3.0.2", "chai-string": "^1.5.0", - "coveralls": "^3.0.13", + "coveralls": "^3.1.0", "form-data": "^3.0.0", - "mocha": "^7.1.1", - "nyc": "^15.0.1", + "mocha": "^7.1.2", "parted": "^0.1.1", "promise": "^8.1.0", "resumer": "0.0.0", + "rollup": "^2.10.4", "string-to-arraybuffer": "^1.0.2", "xo": "^0.30.0" }, @@ -70,6 +65,9 @@ "data-uri-to-buffer": "^3.0.0", "fetch-blob": "^1.0.5" }, + "esm": { + "sourceMap": true + }, "xo": { "envs": [ "node", @@ -81,7 +79,10 @@ "no-mixed-operators": 0, "no-negated-condition": 0, "unicorn/prevent-abbreviations": 0, - "@typescript-eslint/prefer-readonly-parameter-types": 0 + "@typescript-eslint/prefer-readonly-parameter-types": 0, + "import/extensions": 0, + "import/no-useless-path-segments": 0, + "unicorn/import-index": 0 }, "ignores": [ "dist", @@ -109,24 +110,5 @@ } ] }, - "babel": { - "presets": [ - [ - "@babel/preset-env", - { - "targets": { - "node": true - } - } - ] - ], - "plugins": [ - "add-module-exports", - "istanbul" - ] - }, - "nyc": { - "extends": "@istanbuljs/nyc-config-babel" - }, "runkitExampleFilename": "example.js" } diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 0000000..a2a5861 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,18 @@ +import {builtinModules} from 'module'; +import {dependencies} from './package.json'; + +export default { + input: 'src/index.js', + output: { + file: 'dist/index.cjs', + format: 'cjs', + esModule: false, + interop: false, + sourcemap: true, + preferConst: true, + exports: 'named', + // https://github.com/rollup/rollup/issues/1961#issuecomment-534977678 + intro: 'exports = module.exports = fetch;' + }, + external: [...builtinModules, ...Object.keys(dependencies)] +}; diff --git a/src/body.js b/src/body.js index 9d19c89..0dd47c1 100644 --- a/src/body.js +++ b/src/body.js @@ -8,8 +8,8 @@ import Stream, {PassThrough} from 'stream'; import Blob from 'fetch-blob'; -import FetchError from './errors/fetch-error'; -import {isBlob, isURLSearchParams, isArrayBuffer, isAbortError} from './utils/is'; +import FetchError from './errors/fetch-error.js'; +import {isBlob, isURLSearchParams, isArrayBuffer, isAbortError} from './utils/is.js'; const INTERNALS = Symbol('Body internals'); diff --git a/src/index.js b/src/index.js index b364099..0f58361 100644 --- a/src/index.js +++ b/src/index.js @@ -12,12 +12,18 @@ import zlib from 'zlib'; import Stream, {PassThrough, pipeline as pump} from 'stream'; import dataURIToBuffer from 'data-uri-to-buffer'; -import Body, {writeToStream, getTotalBytes} from './body'; -import Response from './response'; -import Headers, {createHeadersLenient} from './headers'; -import Request, {getNodeRequestOptions} from './request'; -import FetchError from './errors/fetch-error'; -import AbortError from './errors/abort-error'; +import Body, {writeToStream, getTotalBytes} from './body.js'; +import Response from './response.js'; +import Headers, {createHeadersLenient} from './headers.js'; +import Request, {getNodeRequestOptions} from './request.js'; +import FetchError from './errors/fetch-error.js'; +import AbortError from './errors/abort-error.js'; + +export {default as Headers} from './headers.js'; +export {default as Request} from './request.js'; +export {default as Response} from './response.js'; +export {default as FetchError} from './errors/fetch-error.js'; +export {default as AbortError} from './errors/abort-error.js'; /** * Fetch function @@ -305,8 +311,3 @@ fetch.isRedirect = code => [301, 302, 303, 307, 308].includes(code); // Expose Promise fetch.Promise = global.Promise; -fetch.Headers = Headers; -fetch.Request = Request; -fetch.Response = Response; -fetch.FetchError = FetchError; -fetch.AbortError = AbortError; diff --git a/src/request.js b/src/request.js index 6e879f5..6ccdec7 100644 --- a/src/request.js +++ b/src/request.js @@ -9,10 +9,10 @@ import {format as formatUrl} from 'url'; import Stream from 'stream'; -import Headers, {exportNodeCompatibleHeaders} from './headers'; -import Body, {clone, extractContentType, getTotalBytes} from './body'; -import {isAbortSignal} from './utils/is'; -import {getSearch} from './utils/get-search'; +import Headers, {exportNodeCompatibleHeaders} from './headers.js'; +import Body, {clone, extractContentType, getTotalBytes} from './body.js'; +import {isAbortSignal} from './utils/is.js'; +import {getSearch} from './utils/get-search.js'; const INTERNALS = Symbol('Request internals'); diff --git a/src/response.js b/src/response.js index a7ec567..1fb6aba 100644 --- a/src/response.js +++ b/src/response.js @@ -4,8 +4,8 @@ * Response class provides content decoding */ -import Headers from './headers'; -import Body, {clone, extractContentType} from './body'; +import Headers from './headers.js'; +import Body, {clone, extractContentType} from './body.js'; const INTERNALS = Symbol('Response internals'); diff --git a/test/external-encoding.js b/test/external-encoding.js index b7a3137..3bfd1d8 100644 --- a/test/external-encoding.js +++ b/test/external-encoding.js @@ -1,4 +1,4 @@ -import fetch from '../src'; +import fetch from '../src/index.js'; import chai from 'chai'; const {expect} = chai; diff --git a/test/headers.js b/test/headers.js index ef7b705..ef6973d 100644 --- a/test/headers.js +++ b/test/headers.js @@ -1,4 +1,4 @@ -import {Headers} from '../src'; +import {Headers} from '../src/index.js'; import chai from 'chai'; const {expect} = chai; diff --git a/test/main.js b/test/main.js index 81e1273..1902d18 100644 --- a/test/main.js +++ b/test/main.js @@ -2,10 +2,9 @@ import zlib from 'zlib'; import crypto from 'crypto'; import {spawn} from 'child_process'; -import * as http from 'http'; -import * as fs from 'fs'; -import * as path from 'path'; -import * as stream from 'stream'; +import http from 'http'; +import fs from 'fs'; +import stream from 'stream'; import {lookup} from 'dns'; import vm from 'vm'; import chai from 'chai'; @@ -17,29 +16,32 @@ import resumer from 'resumer'; import FormData from 'form-data'; import stringToArrayBuffer from 'string-to-arraybuffer'; -import {AbortController} from 'abortcontroller-polyfill/dist/abortcontroller'; +import polyfill from 'abortcontroller-polyfill/dist/abortcontroller.js'; import AbortController2 from 'abort-controller'; +const {AbortController} = polyfill; + // Test subjects import Blob from 'fetch-blob'; + import fetch, { FetchError, Headers, Request, Response -} from '../src'; -import FetchErrorOrig from '../src/errors/fetch-error'; -import HeadersOrig, {createHeadersLenient} from '../src/headers'; -import RequestOrig from '../src/request'; -import ResponseOrig from '../src/response'; -import Body, {getTotalBytes, extractContentType} from '../src/body'; -import TestServer from './utils/server'; +} from '../src/index.js'; +import FetchErrorOrig from '../src/errors/fetch-error.js'; +import HeadersOrig, {createHeadersLenient} from '../src/headers.js'; +import RequestOrig from '../src/request.js'; +import ResponseOrig from '../src/response.js'; +import Body, {getTotalBytes, extractContentType} from '../src/body.js'; +import TestServer from './utils/server.js'; const { Uint8Array: VMUint8Array } = vm.runInNewContext('this'); -import chaiTimeout from './utils/chai-timeout'; +import chaiTimeout from './utils/chai-timeout.js'; chai.use(chaiPromised); chai.use(chaiIterator); @@ -1378,7 +1380,7 @@ describe('node-fetch', () => { itIf(process.platform !== 'win32')('should allow POST request with form-data using stream as body', () => { const form = new FormData(); - form.append('my_field', fs.createReadStream(path.join(__dirname, './utils/dummy.txt'))); + form.append('my_field', fs.createReadStream('test/utils/dummy.txt')); const url = `${base}multipart`; const options = { diff --git a/test/request.js b/test/request.js index 5818d64..9b38d5d 100644 --- a/test/request.js +++ b/test/request.js @@ -1,14 +1,16 @@ -import * as stream from 'stream'; -import * as http from 'http'; -import {Request} from '../src'; -import TestServer from './utils/server'; -import {AbortController} from 'abortcontroller-polyfill/dist/abortcontroller'; +import stream from 'stream'; +import http from 'http'; +import polyfill from 'abortcontroller-polyfill/dist/abortcontroller.js'; import chai from 'chai'; import FormData from 'form-data'; import Blob from 'fetch-blob'; import resumer from 'resumer'; import stringToArrayBuffer from 'string-to-arraybuffer'; +import TestServer from './utils/server.js'; +import {Request} from '../src/index.js'; + +const {AbortController} = polyfill; const {expect} = chai; const local = new TestServer(); diff --git a/test/response.js b/test/response.js index 35a8090..1e523b8 100644 --- a/test/response.js +++ b/test/response.js @@ -1,10 +1,10 @@ import * as stream from 'stream'; -import {Response} from '../src'; -import TestServer from './utils/server'; import chai from 'chai'; import resumer from 'resumer'; import stringToArrayBuffer from 'string-to-arraybuffer'; import Blob from 'fetch-blob'; +import {Response} from '../src/index.js'; +import TestServer from './utils/server.js'; const {expect} = chai; diff --git a/test/utils/server.js b/test/utils/server.js index 0616d35..d03d54b 100644 --- a/test/utils/server.js +++ b/test/utils/server.js @@ -1,6 +1,7 @@ -import * as http from 'http'; -import * as zlib from 'zlib'; -import {multipart as Multipart} from 'parted'; +import http from 'http'; +import zlib from 'zlib'; +import parted from 'parted'; +const {multipart: Multipart} = parted; export default class TestServer { constructor() { @@ -379,9 +380,3 @@ export default class TestServer { } } -if (require.main === module) { - const server = new TestServer(); - server.start(() => { - console.log(`Server started listening at port ${server.port}`); - }); -}