Skip to content

Commit bf87041

Browse files
committed
fetch polyfill and better package.json
1 parent de2635b commit bf87041

File tree

4 files changed

+31
-24
lines changed

4 files changed

+31
-24
lines changed

mod.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,16 @@
3030
* );
3131
* ```
3232
*
33+
* ## `fetch` API in Node.js
34+
*
35+
* Node.js v18 has a native browser-like fetch interface. Versions
36+
* below are normally using [`node-fetch`](https://github.com/node-fetch/node-fetch)
37+
* to circumvent this issue.
38+
*
39+
* For environments using Node v18 and earlier, Tpy uses the native
40+
* fetch without requiring the package. Environments containing earlier
41+
* versions of Node will require the package.
42+
*
3343
* @module
3444
*/
3545

node/package.json

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "tpy",
3-
"version": "v1.0.0-pre-release-4",
3+
"version": "v1.0.0-pre-release-5",
44
"description": "🔑 A strongly typed Pylon API client.",
55
"license": "MIT",
66
"type": "commonjs",
@@ -30,14 +30,17 @@
3030
"bugs": {
3131
"url": "https://github.com/insyri/tpy/issues"
3232
},
33-
"dependencies": {
33+
"peerDependencies": {
3434
"@types/node": "18.11.3",
35-
"discord-api-types": "0.37.14"
35+
"discord-api-types": "0.37.14",
36+
"node-fetch": "3.2.10"
37+
},
38+
"peerDependenciesMeta": {
39+
"node-fetch": {
40+
"optional": true
41+
}
3642
},
3743
"devDependencies": {
3844
"typescript": "4.8.4"
39-
},
40-
"optionalDependencies": {
41-
"node-fetch": "3.2.10"
4245
}
4346
}

src/fetch_polyfill.ts

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,13 @@
1-
import fetch, {
2-
Blob,
3-
blobFrom,
4-
blobFromSync,
5-
File,
6-
fileFrom,
7-
fileFromSync,
8-
FormData,
9-
Headers,
10-
Request,
11-
Response,
12-
} from 'node-fetch';
1+
// This file is meant to be read by Node.js, Deno stops at line 5.
2+
// If Deno extension enabled, ignore errors.
133

14-
if (!globalThis.fetch) {
15-
Object.defineProperty(globalThis, 'fetch', fetch);
16-
Object.defineProperty(globalThis, 'Headers', Headers);
17-
Object.defineProperty(globalThis, 'Request', Request);
18-
Object.defineProperty(globalThis, 'Response', Response);
4+
if (
5+
'process' in globalThis && // If Node
6+
Number(globalThis.process.version.substring(1, 3)) < 18
7+
) {
8+
Object.defineProperty(
9+
globalThis,
10+
'fetch',
11+
require('node-fetch'),
12+
);
1913
}

src/tpy.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import TpyWs from './ws.ts';
1212
import TpyKV from './kv.ts';
1313
import Context from './context.ts';
1414

15-
if (!Deno) await import('./fetch_polyfill.ts');
15+
import './fetch_polyfill.ts';
1616

1717
/**
1818
* The central entity for interacting with the Pylon API; the entrypoint.

0 commit comments

Comments
 (0)