Skip to content

Commit eb1730b

Browse files
committed
Require Node.js 14
Fixes #27
1 parent d7920ca commit eb1730b

File tree

7 files changed

+54
-50
lines changed

7 files changed

+54
-50
lines changed

.github/workflows/main.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@ jobs:
1010
fail-fast: false
1111
matrix:
1212
node-version:
13+
- 18
14+
- 16
1315
- 14
14-
- 12
1516
steps:
16-
- uses: actions/checkout@v2
17-
- uses: actions/setup-node@v1
17+
- uses: actions/checkout@v3
18+
- uses: actions/setup-node@v3
1819
with:
1920
node-version: ${{ matrix.node-version }}
2021
- run: npm install

index.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export type Options<ReturnType> = {
2525
2626
@example
2727
```
28-
import {setTimeout} from 'timers/promises';
28+
import {setTimeout} from 'node:timers/promises';
2929
import pTimeout from 'p-timeout';
3030
3131
const delayedPromise = () => setTimeout(200);
@@ -116,7 +116,7 @@ If you pass in a cancelable promise, specifically a promise with a `.cancel()` m
116116
117117
@example
118118
```
119-
import {setTimeout} from 'timers/promises';
119+
import {setTimeout} from 'node:timers/promises';
120120
import pTimeout from 'p-timeout';
121121
122122
const delayedPromise = () => setTimeout(200);

index.js

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,27 +20,32 @@ export class AbortError extends Error {
2020
/**
2121
TODO: Remove AbortError and just throw DOMException when targeting Node 18.
2222
*/
23-
const getDOMException = errorMessage => globalThis.DOMException === undefined ?
24-
new AbortError(errorMessage) :
25-
new DOMException(errorMessage);
23+
const getDOMException = errorMessage => globalThis.DOMException === undefined
24+
? new AbortError(errorMessage)
25+
: new DOMException(errorMessage);
2626

2727
/**
2828
TODO: Remove below function and just 'reject(signal.reason)' when targeting Node 18.
2929
*/
3030
const getAbortedReason = signal => {
31-
const reason = signal.reason === undefined ?
32-
getDOMException('This operation was aborted.') :
33-
signal.reason;
31+
const reason = signal.reason === undefined
32+
? getDOMException('This operation was aborted.')
33+
: signal.reason;
3434

3535
return reason instanceof Error ? reason : getDOMException(reason);
3636
};
3737

3838
export default function pTimeout(promise, options) {
39+
const {
40+
milliseconds,
41+
fallback,
42+
message,
43+
customTimers = {setTimeout, clearTimeout},
44+
} = options;
45+
3946
let timer;
4047

4148
const cancelablePromise = new Promise((resolve, reject) => {
42-
const {milliseconds, fallback, message} = options;
43-
4449
if (typeof milliseconds !== 'number' || Math.sign(milliseconds) !== 1) {
4550
throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${milliseconds}\``);
4651
}
@@ -50,11 +55,6 @@ export default function pTimeout(promise, options) {
5055
return;
5156
}
5257

53-
options = {
54-
customTimers: {setTimeout, clearTimeout},
55-
...options
56-
};
57-
5858
if (options.signal) {
5959
const {signal} = options;
6060
if (signal.aborted) {
@@ -66,7 +66,7 @@ export default function pTimeout(promise, options) {
6666
});
6767
}
6868

69-
timer = options.customTimers.setTimeout.call(undefined, () => {
69+
timer = customTimers.setTimeout.call(undefined, () => {
7070
if (fallback) {
7171
try {
7272
resolve(fallback());
@@ -93,13 +93,13 @@ export default function pTimeout(promise, options) {
9393
} catch (error) {
9494
reject(error);
9595
} finally {
96-
options.customTimers.clearTimeout.call(undefined, timer);
96+
customTimers.clearTimeout.call(undefined, timer);
9797
}
9898
})();
9999
});
100100

101101
cancelablePromise.clear = () => {
102-
clearTimeout(timer);
102+
customTimers.clearTimeout.call(undefined, timer);
103103
timer = undefined;
104104
};
105105

index.test-d.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@ const delayedPromise: () => Promise<string> = async () => new Promise(resolve =>
1010

1111
pTimeout(delayedPromise(), {milliseconds: 50}).then(() => 'foo');
1212
pTimeout(delayedPromise(), {milliseconds: 50, fallback: async () => pTimeout(delayedPromise(), {milliseconds: 300})});
13-
pTimeout(delayedPromise(), {milliseconds: 50}).then(value => expectType<string>(value));
14-
pTimeout(delayedPromise(), {milliseconds: 50, message: 'error'}).then(value =>
15-
expectType<string>(value)
16-
);
17-
pTimeout(delayedPromise(), {milliseconds: 50, message: new Error('error')}).then(value =>
18-
expectType<string>(value)
19-
);
13+
pTimeout(delayedPromise(), {milliseconds: 50}).then(value => {
14+
expectType<string>(value);
15+
});
16+
pTimeout(delayedPromise(), {milliseconds: 50, message: 'error'}).then(value => {
17+
expectType<string>(value);
18+
});
19+
pTimeout(delayedPromise(), {milliseconds: 50, message: new Error('error')}).then(value => {
20+
expectType<string>(value);
21+
});
2022
pTimeout(delayedPromise(), {milliseconds: 50, fallback: async () => 10}).then(value => {
2123
expectType<string | number>(value);
2224
});
@@ -34,17 +36,17 @@ expectError(pTimeout(delayedPromise(), {
3436
milliseconds: 50,
3537
fallback: () => 10,
3638
customTimers: {
37-
setTimeout
38-
}
39+
setTimeout,
40+
},
3941
}));
4042

4143
expectError(pTimeout(delayedPromise(), {
4244
milliseconds: 50,
4345
fallback: () => 10,
4446
customTimers: {
4547
setTimeout: () => 42, // Invalid `setTimeout` implementation
46-
clearTimeout
47-
}
48+
clearTimeout,
49+
},
4850
}));
4951

5052
expectError(pTimeout(delayedPromise(), {})); // `milliseconds` is required

package.json

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@
1212
},
1313
"type": "module",
1414
"exports": "./index.js",
15+
"types": "./index.d.ts",
1516
"engines": {
16-
"node": ">=12"
17+
"node": ">=14.16"
1718
},
1819
"scripts": {
1920
"test": "xo && ava && tsd"
@@ -36,12 +37,12 @@
3637
"bluebird"
3738
],
3839
"devDependencies": {
39-
"ava": "^3.15.0",
40+
"ava": "^4.3.1",
4041
"delay": "^5.0.0",
4142
"in-range": "^3.0.0",
42-
"p-cancelable": "^2.1.0",
43-
"time-span": "^4.0.0",
44-
"tsd": "^0.14.0",
45-
"xo": "^0.38.2"
43+
"p-cancelable": "^4.0.1",
44+
"time-span": "^5.1.0",
45+
"tsd": "^0.22.0",
46+
"xo": "^0.51.0"
4647
}
4748
}

readme.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
55
## Install
66

7-
```
8-
$ npm install p-timeout
7+
```sh
8+
npm install p-timeout
99
```
1010

1111
## Usage
1212

1313
```js
14-
import {setTimeout} from 'timers/promises';
14+
import {setTimeout} from 'node:timers/promises';
1515
import pTimeout from 'p-timeout';
1616

1717
const delayedPromise = setTimeout(200);
@@ -66,7 +66,7 @@ Do something other than rejecting with an error on timeout.
6666
You could for example retry:
6767

6868
```js
69-
import {setTimeout} from 'timers/promises';
69+
import {setTimeout} from 'node:timers/promises';
7070
import pTimeout from 'p-timeout';
7171

7272
const delayedPromise = () => setTimeout(200);
@@ -90,7 +90,7 @@ Useful for testing purposes, in particular to work around [`sinon.useFakeTimers(
9090
Example:
9191

9292
```js
93-
import {setTimeout} from 'timers/promises';
93+
import {setTimeout} from 'node:timers/promises';
9494
import pTimeout from 'p-timeout';
9595

9696
const originalSetTimeout = setTimeout;

test.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ test('throws when milliseconds is NaN', async t => {
2727
test('handles milliseconds being `Infinity`', async t => {
2828
t.is(
2929
await pTimeout(delay(50, {value: fixture}), {milliseconds: Number.POSITIVE_INFINITY}),
30-
fixture
30+
fixture,
3131
);
3232
});
3333

@@ -77,8 +77,8 @@ test('accepts `customTimers` option', async t => {
7777
clearTimeout(timeoutId) {
7878
t.pass();
7979
return clearTimeout(timeoutId);
80-
}
81-
}
80+
},
81+
},
8282
});
8383
});
8484

@@ -101,13 +101,13 @@ if (globalThis.AbortController !== undefined) {
101101

102102
const promise = pTimeout(delay(3000), {
103103
milliseconds: 2000,
104-
signal: abortController.signal
104+
signal: abortController.signal,
105105
});
106106

107107
abortController.abort();
108108

109109
await t.throwsAsync(promise, {
110-
name: 'AbortError'
110+
name: 'AbortError',
111111
});
112112
});
113113

@@ -118,9 +118,9 @@ if (globalThis.AbortController !== undefined) {
118118

119119
await t.throwsAsync(pTimeout(delay(3000), {
120120
milliseconds: 2000,
121-
signal: abortController.signal
121+
signal: abortController.signal,
122122
}), {
123-
name: 'AbortError'
123+
name: 'AbortError',
124124
});
125125
});
126126
}

0 commit comments

Comments
 (0)