Skip to content

Commit 6c90ae3

Browse files
Require Node.js 14 and update dependencies (#46)
Co-authored-by: Richie Bendall <[email protected]>
1 parent 3474abf commit 6c90ae3

File tree

6 files changed

+74
-46
lines changed

6 files changed

+74
-46
lines changed

.github/workflows/main.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ jobs:
1010
fail-fast: false
1111
matrix:
1212
node-version:
13+
- 20
14+
- 18
1315
- 16
14-
- 14
15-
- 12
1616
steps:
17-
- uses: actions/checkout@v2
18-
- uses: actions/setup-node@v1
17+
- uses: actions/checkout@v4
18+
- uses: actions/setup-node@v3
1919
with:
2020
node-version: ${{ matrix.node-version }}
2121
- run: npm install

fixture.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/* eslint-disable unicorn/prefer-node-protocol, n/prefer-global/buffer */
12
const assert = require('assert');
23

34
assert(true);

index.d.ts

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
1-
/* eslint-disable no-redeclare */
2-
import {MergeExclusive} from 'type-fest';
3-
import {Compiler} from 'webpack';
1+
import {type MergeExclusive} from 'type-fest';
2+
import {type Compiler} from 'webpack';
43

54
declare namespace NodePolyfillPlugin {
65
export type Alias =
7-
| 'Buffer'
8-
| 'console'
9-
| 'process'
106
| 'assert'
117
| 'buffer'
8+
| 'Buffer'
129
| 'console'
1310
| 'constants'
1411
| 'crypto'
@@ -18,8 +15,8 @@ declare namespace NodePolyfillPlugin {
1815
| 'https'
1916
| 'os'
2017
| 'path'
21-
| 'punycode'
2218
| 'process'
19+
| 'punycode'
2320
| 'querystring'
2421
| 'stream'
2522
| '_stream_duplex'
@@ -36,19 +33,19 @@ declare namespace NodePolyfillPlugin {
3633
| 'vm'
3734
| 'zlib';
3835

39-
export interface IncludeOptions {
36+
export type IncludeOptions = {
4037
/**
4138
By default, the modules that were polyfilled in Webpack 4 are mirrored over. However, you can choose to only include certain aliases. For example, you can only have `console` polyfilled.
4239
*/
4340
includeAliases?: readonly Alias[];
44-
}
41+
};
4542

46-
export interface ExcludeOptions {
43+
export type ExcludeOptions = {
4744
/**
4845
By default, the modules that were polyfilled in Webpack 4 are mirrored over. However, if you don't want a module like `console` to be polyfilled you can specify alises to be skipped here.
4946
*/
5047
excludeAliases?: readonly Alias[];
51-
}
48+
};
5249

5350
export type Options = MergeExclusive<IncludeOptions, ExcludeOptions>;
5451
}

index.js

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,46 @@
11
'use strict';
2-
const filterObject = require('filter-obj');
2+
// https://github.com/sindresorhus/filter-obj/blob/58086b537bb622166387216bfb7da6e8184996ba/index.js#L1-L25
3+
function includeKeys(object, predicate) {
4+
const result = {};
5+
6+
if (Array.isArray(predicate)) {
7+
for (const key of predicate) {
8+
result[key] = object[key];
9+
}
10+
} else {
11+
for (const key of Object.keys(object)) {
12+
const value = object[key];
13+
14+
if (predicate(key, value, object)) {
15+
result[key] = value;
16+
}
17+
}
18+
}
19+
20+
return result;
21+
}
22+
23+
// https://github.com/sindresorhus/filter-obj/blob/58086b537bb622166387216bfb7da6e8184996ba/index.js#L27-L34
24+
function excludeKeys(object, keys) {
25+
const set = new Set(keys);
26+
27+
return includeKeys(object, key => !set.has(key));
28+
}
329

430
function createAliasFilter({includeAliases, excludeAliases}) {
531
if (includeAliases.length > 0) {
6-
return object => filterObject(object, key => includeAliases.includes(key));
32+
return object => includeKeys(object, includeAliases);
733
}
834

9-
return object => filterObject(object, key => !excludeAliases.includes(key));
35+
return object => excludeKeys(object, excludeAliases);
1036
}
1137

1238
module.exports = class NodePolyfillPlugin {
1339
constructor(options = {}) {
1440
this.options = {
1541
excludeAliases: [],
1642
includeAliases: [],
17-
...options
43+
...options,
1844
};
1945

2046
if (this.options.includeAliases.length > 0 && this.options.excludeAliases.length > 0) {
@@ -28,7 +54,7 @@ module.exports = class NodePolyfillPlugin {
2854
compiler.options.plugins.push(new compiler.webpack.ProvidePlugin(filter({
2955
Buffer: [require.resolve('buffer/'), 'Buffer'],
3056
console: require.resolve('console-browserify'),
31-
process: require.resolve('process/browser')
57+
process: require.resolve('process/browser'),
3258
})));
3359

3460
compiler.options.resolve.fallback = {
@@ -62,9 +88,9 @@ module.exports = class NodePolyfillPlugin {
6288
url: require.resolve('url/'),
6389
util: require.resolve('util/'),
6490
vm: require.resolve('vm-browserify'),
65-
zlib: require.resolve('browserify-zlib')
91+
zlib: require.resolve('browserify-zlib'),
6692
}),
67-
...compiler.options.resolve.fallback
93+
...compiler.options.resolve.fallback,
6894
};
6995
}
7096
};

package.json

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"index.d.ts"
1515
],
1616
"engines": {
17-
"node": ">=12"
17+
"node": ">=14"
1818
},
1919
"scripts": {
2020
"test": "xo && ava"
@@ -26,39 +26,43 @@
2626
"polyfill"
2727
],
2828
"dependencies": {
29-
"assert": "^2.0.0",
29+
"assert": "^2.1.0",
3030
"browserify-zlib": "^0.2.0",
3131
"buffer": "^6.0.3",
3232
"console-browserify": "^1.2.0",
3333
"constants-browserify": "^1.0.0",
3434
"crypto-browserify": "^3.12.0",
3535
"domain-browser": "^4.22.0",
3636
"events": "^3.3.0",
37-
"filter-obj": "^2.0.2",
3837
"https-browserify": "^1.0.0",
3938
"os-browserify": "^0.3.0",
4039
"path-browserify": "^1.0.1",
4140
"process": "^0.11.10",
42-
"punycode": "^2.1.1",
41+
"punycode": "^2.3.0",
4342
"querystring-es3": "^0.2.1",
44-
"readable-stream": "^4.0.0",
43+
"readable-stream": "^4.4.2",
4544
"stream-browserify": "^3.0.0",
4645
"stream-http": "^3.2.0",
4746
"string_decoder": "^1.3.0",
4847
"timers-browserify": "^2.0.12",
4948
"tty-browserify": "^0.0.1",
50-
"type-fest": "^2.14.0",
51-
"url": "^0.11.0",
52-
"util": "^0.12.4",
49+
"type-fest": "^4.4.0",
50+
"url": "^0.11.3",
51+
"util": "^0.12.5",
5352
"vm-browserify": "^1.1.2"
5453
},
5554
"devDependencies": {
56-
"ava": "^3.15.0",
55+
"ava": "^5.3.1",
5756
"p-webpack": "^1.0.1",
58-
"webpack": "^5.73.0",
59-
"xo": "^0.39.1"
57+
"webpack": "^5.88.2",
58+
"xo": "^0.56.0"
6059
},
6160
"peerDependencies": {
6261
"webpack": ">=5"
62+
},
63+
"xo": {
64+
"rules": {
65+
"unicorn/prefer-module": "off"
66+
}
6367
}
6468
}

test.js

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
1-
const fs = require('fs');
1+
const fs = require('node:fs');
22
const test = require('ava');
33
const webpack = require('p-webpack');
4-
const NodePolyfillPlugin = require('.');
4+
const NodePolyfillPlugin = require('./index.js');
55

66
test('main', async t => {
77
await webpack({
88
entry: './fixture',
99
output: {
1010
library: {
11-
type: 'commonjs-module'
11+
type: 'commonjs-module',
1212
},
13-
filename: '1.js'
13+
filename: '1.js',
1414
},
1515
plugins: [
1616
new NodePolyfillPlugin({
17-
excludeAliases: ['console']
18-
})
19-
]
17+
excludeAliases: ['console'],
18+
}),
19+
],
2020
});
2121

2222
t.is(require('./dist/1.js'), 'Hello World');
@@ -33,15 +33,15 @@ test('includeAliases', async t => {
3333
entry: './fixture',
3434
output: {
3535
library: {
36-
type: 'commonjs-module'
36+
type: 'commonjs-module',
3737
},
38-
filename: '2.js'
38+
filename: '2.js',
3939
},
4040
plugins: [
4141
new NodePolyfillPlugin({
42-
includeAliases: ['console']
43-
})
44-
]
42+
includeAliases: ['console'],
43+
}),
44+
],
4545
});
4646

4747
t.is(require('./dist/2.js'), 'Hello World');
@@ -56,6 +56,6 @@ test('includeAliases', async t => {
5656
test('includeAliases and excludeAliases used at the same time', t => {
5757
t.throws(() => new NodePolyfillPlugin({
5858
includeAliases: ['console'],
59-
excludeAliases: ['crypto']
59+
excludeAliases: ['crypto'],
6060
}), {instanceOf: Error});
6161
});

0 commit comments

Comments
 (0)