Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Require Node.js 12.20.0 and move to ESM #1141

Merged
merged 47 commits into from Jul 18, 2021
Merged
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
9d37412
Use ESM import in runkit example file
xxczaki May 3, 2021
ce6d0b2
Update dependencies, version and transition to ESM
xxczaki May 3, 2021
c00d18e
Use ESM imports, add ESM-related info
xxczaki May 3, 2021
73a2a03
Remove rollup
xxczaki May 3, 2021
a12c148
Lint TypeScript-related files
xxczaki May 3, 2021
5ad707e
Update dependency
xxczaki May 3, 2021
efd811d
Lint & update dependency
xxczaki May 3, 2021
42ae6d7
Lint
xxczaki May 3, 2021
dfbb45f
Remove commonjs tests
xxczaki May 3, 2021
d1e0e5e
chore: update changelog
xxczaki May 3, 2021
3e80f90
Remove commonjs GitHub action
xxczaki May 3, 2021
c4018af
Update funding.yml
xxczaki May 3, 2021
75f3e9d
Update linter rules
xxczaki May 5, 2021
eb0426a
Lint
xxczaki May 5, 2021
57f3f2a
Fix tsd
xxczaki May 5, 2021
1305178
Remove unnecessary types
xxczaki May 5, 2021
659044e
Simplify
xxczaki May 5, 2021
cb63877
Use top-level await
xxczaki May 19, 2021
c11eefb
Update GitHub Actions
xxczaki May 19, 2021
a43fe25
Use Mocha with ESM
xxczaki May 19, 2021
4d794ca
Revamp
xxczaki May 19, 2021
94755a8
specify what node version
jimmywarting May 25, 2021
ca4f4cf
update formdata-node dep
jimmywarting May 25, 2021
c2814ad
remove lint from example using top await
jimmywarting May 25, 2021
48bdd14
updated name and link to formdata-polyfill
jimmywarting May 25, 2021
a30a6ee
Stop recommend form-data
jimmywarting May 25, 2021
09deb1e
filter example - it has many duplicate variables
jimmywarting May 25, 2021
f0a6287
Update type definitions to ESM
LinusU May 25, 2021
1c4d1ac
Remove unused lint rule disable comment
LinusU May 25, 2021
10228a9
Remove leftover rollup and dist folder
LinusU May 25, 2021
653ddae
updated depn
jimmywarting May 29, 2021
dc992a3
updated d.ts
jimmywarting May 29, 2021
b80842b
lint
jimmywarting May 29, 2021
fd39435
Fix breaking changes with blob v3 stream()
jimmywarting Jun 12, 2021
d50ad4a
revert eslint comment
jimmywarting Jun 12, 2021
3f94ba7
revert back to xo 0.39
jimmywarting Jun 12, 2021
370a111
none TS fan trying to fix type definition
jimmywarting Jun 12, 2021
930c018
Give me a break
jimmywarting Jun 12, 2021
44c899f
Test on all minimum supported Node.js versions (#1170)
LinusU Jul 16, 2021
ca5e8b7
bumped fetch-blob version
jimmywarting Jul 16, 2021
83b4565
import from dom lib
jimmywarting Jul 16, 2021
74e7d3a
rm unused comment
jimmywarting Jul 16, 2021
aba6a61
updated required version in docs
jimmywarting Jul 16, 2021
e92f07f
fixed named import
jimmywarting Jul 16, 2021
0ae7ecb
set lowest support to 12.20.0
jimmywarting Jul 16, 2021
0ff6298
comment explaining both
jimmywarting Jul 16, 2021
5f0500d
rm log
jimmywarting Jul 17, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/FUNDING.yml
@@ -1,6 +1,6 @@
# These are supported funding model platforms

github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
github: node-fetch # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: node-fetch # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
Expand Down
30 changes: 0 additions & 30 deletions .github/workflows/commonjs.yml

This file was deleted.

26 changes: 9 additions & 17 deletions @types/index.d.ts
@@ -1,16 +1,16 @@
/// <reference types="node" />

/* eslint-disable no-var, import/no-mutable-exports */
/* eslint-disable node/prefer-global/url, node/prefer-global/url-search-params, no-redeclare */

import { Agent } from 'http';
import { URL, URLSearchParams } from 'url'
import {Agent} from 'http';
import {URL, URLSearchParams} from 'url';
import Blob = require('fetch-blob');

type AbortSignal = {
readonly aborted: boolean;

addEventListener(type: "abort", listener: (this: AbortSignal) => void): void;
removeEventListener(type: "abort", listener: (this: AbortSignal) => void): void;
addEventListener: (type: 'abort', listener: (this: AbortSignal) => void) => void;
removeEventListener: (type: 'abort', listener: (this: AbortSignal) => void) => void;
};

type HeadersInit = Headers | Record<string, string> | Iterable<readonly [string, string]> | Iterable<Iterable<string>>;
Expand Down Expand Up @@ -100,9 +100,9 @@ type BodyInit =
| URLSearchParams
| NodeJS.ReadableStream
| string;
type BodyType = { [K in keyof Body]: Body[K] };
type BodyType = {[K in keyof Body]: Body[K]};
declare class Body {
constructor(body?: BodyInit, opts?: { size?: number });
constructor(body?: BodyInit, options?: {size?: number});

readonly body: NodeJS.ReadableStream | null;
readonly bodyUsed: boolean;
Expand Down Expand Up @@ -143,7 +143,7 @@ declare class Request extends Body {
clone(): Request;
}

type ResponseType = "basic" | "cors" | "default" | "error" | "opaque" | "opaqueredirect"
type ResponseType = 'basic' | 'cors' | 'default' | 'error' | 'opaque' | 'opaqueredirect';

declare class Response extends Body {
constructor(body?: BodyInit | null, init?: ResponseInit);
Expand All @@ -161,7 +161,7 @@ declare class Response extends Body {
}

declare class FetchError extends Error {
constructor(message: string, type: string, systemError?: object);
constructor(message: string, type: string, systemError?: Record<string, unknown>);

name: 'FetchError';
[Symbol.toStringTag]: 'FetchError';
Expand All @@ -176,28 +176,20 @@ declare class AbortError extends Error {
[Symbol.toStringTag]: 'AbortError';
}


declare function fetch(url: RequestInfo, init?: RequestInit): Promise<Response>;
declare class fetch {
static default: typeof fetch;
}
LinusU marked this conversation as resolved.
Show resolved Hide resolved
declare namespace fetch {
export function isRedirect(code: number): boolean;

export {
HeadersInit,
Headers,

RequestInit,
RequestRedirect,
RequestInfo,
Request,

BodyInit,

ResponseInit,
Response,

FetchError,
AbortError
};
Expand Down
72 changes: 33 additions & 39 deletions @types/index.test-d.ts
@@ -1,46 +1,46 @@
import { expectType, expectAssignable } from 'tsd';
import {expectType, expectAssignable} from 'tsd';
import AbortController from 'abort-controller';
import Blob = require('fetch-blob');

import fetch, { Request, Response, Headers, Body, FetchError, AbortError } from '.';
import fetch, {Request, Response, Headers, Body, FetchError, AbortError} from '.';
// eslint-disable-next-line @typescript-eslint/no-duplicate-imports
import * as _fetch from '.';
import __fetch = require('.');

async function run() {
const getRes = await fetch('https://bigfile.com/test.zip');
expectType<boolean>(getRes.ok);
expectType<number>(getRes.size);
expectType<number>(getRes.status);
expectType<string>(getRes.statusText);
expectType<() => Response>(getRes.clone);
const getResponse = await fetch('https://bigfile.com/test.zip');
expectType<boolean>(getResponse.ok);
expectType<number>(getResponse.size);
expectType<number>(getResponse.status);
expectType<string>(getResponse.statusText);
expectType<() => Response>(getResponse.clone);

// Test async iterator over body
expectType<NodeJS.ReadableStream | null>(getRes.body);
if (getRes.body) {
for await (const data of getRes.body) {
expectType<NodeJS.ReadableStream | null>(getResponse.body);
if (getResponse.body) {
for await (const data of getResponse.body) {
expectType<Buffer | string>(data);
}
}

// Test Buffer
expectType<Buffer>(await getRes.buffer());
expectType<Buffer>(await getResponse.buffer());

// Test arrayBuffer
expectType<ArrayBuffer>(await getRes.arrayBuffer());
expectType<ArrayBuffer>(await getResponse.arrayBuffer());

// Test JSON, returns unknown
expectType<unknown>(await getRes.json());
expectType<unknown>(await getResponse.json());

// Headers iterable
expectType<Headers>(getRes.headers);
expectType<Headers>(getResponse.headers);

// Post
try {
const request = new Request('http://byjka.com/buka');
expectType<string>(request.url);
expectType<Headers>(request.headers);

const headers = new Headers({ byaka: 'buke' });
const headers = new Headers({byaka: 'buke'});
expectType<(a: string, b: string) => void>(headers.append);
expectType<(a: string) => string | null>(headers.get);
expectType<(name: string, value: string) => void>(headers.set);
Expand All @@ -49,11 +49,11 @@ async function run() {
expectType<() => IterableIterator<[string, string]>>(headers.entries);
expectType<() => IterableIterator<[string, string]>>(headers[Symbol.iterator]);

const postRes = await fetch(request, { method: 'POST', headers });
expectType<Blob>(await postRes.blob());
} catch (error) {
const postResponse = await fetch(request, {method: 'POST', headers});
expectType<Blob>(await postResponse.blob());
} catch (error: unknown) {
if (error instanceof FetchError) {
throw new TypeError(error.errno);
throw new TypeError(error.errno as string | undefined);
}

if (error instanceof AbortError) {
Expand All @@ -62,31 +62,24 @@ async function run() {
}

// export *
const wildRes = await _fetch('https://google.com');
expectType<boolean>(wildRes.ok);
expectType<number>(wildRes.size);
expectType<number>(wildRes.status);
expectType<string>(wildRes.statusText);
expectType<() => Response>(wildRes.clone);

// export = require
const reqRes = await __fetch('https://google.com');
expectType<boolean>(reqRes.ok);
expectType<number>(reqRes.size);
expectType<number>(reqRes.status);
expectType<string>(reqRes.statusText);
expectType<() => Response>(reqRes.clone);
const wildResponse = await _fetch('https://google.com');
expectType<boolean>(wildResponse.ok);
expectType<number>(wildResponse.size);
expectType<number>(wildResponse.status);
expectType<string>(wildResponse.statusText);
expectType<() => Response>(wildResponse.clone);
xxczaki marked this conversation as resolved.
Show resolved Hide resolved

// Others
const response = new Response();
expectType<string>(response.url);
expectAssignable<Body>(response);

const abortController = new AbortController()
const request = new Request('url', { signal: abortController.signal });
const abortController = new AbortController();
const request = new Request('url', {signal: abortController.signal});
expectAssignable<Body>(request);

new Headers({ 'Header': 'value' });
/* eslint-disable no-new */
new Headers({Header: 'value'});
// new Headers(['header', 'value']); // should not work
new Headers([['header', 'value']]);
new Headers(new Headers());
Expand All @@ -95,8 +88,9 @@ async function run() {
['b', '2'],
new Map([['a', null], ['3', null]]).keys()
]);
/* eslint-enable no-new */

fetch.isRedirect = (code: number) => true;
LinusU marked this conversation as resolved.
Show resolved Hide resolved
fetch.isRedirect = () => true;
}

run().finally(() => {
Expand Down