Skip to content

Commit

Permalink
Require Node.js 18 and move to ESM
Browse files Browse the repository at this point in the history
Closes #17
Fixes #12
  • Loading branch information
sindresorhus committed Apr 30, 2024
1 parent 0d234f3 commit 75f59d3
Show file tree
Hide file tree
Showing 12 changed files with 64 additions and 86 deletions.
4 changes: 0 additions & 4 deletions .github/funding.yml

This file was deleted.

10 changes: 4 additions & 6 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,11 @@ jobs:
fail-fast: false
matrix:
node-version:
- 14
- 12
- 10
- 8
- 20
- 18
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- run: npm install
Expand Down
12 changes: 12 additions & 0 deletions builtin-modules.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
[
"assert",
"assert/strict",
"async_hooks",
"buffer",
"child_process",
Expand All @@ -10,31 +11,42 @@
"dgram",
"diagnostics_channel",
"dns",
"dns/promises",
"domain",
"events",
"fs",
"fs/promises",
"http",
"http2",
"https",
"inspector",
"inspector/promises",
"module",
"net",
"os",
"path",
"path/posix",
"path/win32",
"perf_hooks",
"process",
"punycode",
"querystring",
"readline",
"readline/promises",
"repl",
"stream",
"stream/consumers",
"stream/promises",
"stream/web",
"string_decoder",
"timers",
"timers/promises",
"tls",
"trace_events",
"tty",
"url",
"util",
"util/types",
"v8",
"vm",
"wasi",
Expand Down
6 changes: 3 additions & 3 deletions index.d.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
/**
List of the Node.js builtin modules.
A static list of the Node.js builtin modules from the latest Node.js version.
@example
```
import builtinModules = require('builtin-modules');
import builtinModules from 'builtin-modules';
console.log(builtinModules);
//=> ['assert', 'buffer', …]
```
*/
declare const builtinModules: readonly string[];

export = builtinModules;
export default builtinModules;
12 changes: 2 additions & 10 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,3 @@
'use strict';
const {builtinModules} = require('module');
import builtinModules from './builtin-modules.json' with {type: 'json'};

const ignoreList = [
'sys'
];

// eslint-disable-next-line node/no-deprecated-api
module.exports = (builtinModules || (process.binding ? Object.keys(process.binding('natives')) : []) || [])
.filter(x => !/^_|^(internal|v8|node-inspect)\/|\//.test(x) && !ignoreList.includes(x))
.sort();
export default builtinModules;
6 changes: 1 addition & 5 deletions index.test-d.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
import {expectType, expectError} from 'tsd';
import builtinModules = require('.');
import builtinModulesStatic = require ('./static');
import builtinModules from './index.js';

expectType<readonly string[]>(builtinModules);
expectError<string[]>(builtinModules);

expectType<readonly string[]>(builtinModulesStatic);
expectError<string[]>(builtinModulesStatic);
11 changes: 7 additions & 4 deletions make.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
'use strict';
const fs = require('fs');
const builtinModules = require('.');
import fs from 'node:fs';
import {builtinModules} from 'node:module';

fs.writeFileSync('builtin-modules.json', JSON.stringify(builtinModules, null, '\t') + '\n');
const final = builtinModules
.filter(x => !/^_|^sys$/.test(x))
.sort();

fs.writeFileSync('builtin-modules.json', JSON.stringify(final, undefined, '\t') + '\n');
21 changes: 13 additions & 8 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "builtin-modules",
"version": "3.3.0",
"description": "List of the Node.js builtin modules",
"description": "A static list of the Node.js builtin modules from the latest Node.js version",
"license": "MIT",
"repository": "sindresorhus/builtin-modules",
"funding": "https://github.com/sponsors/sindresorhus",
Expand All @@ -10,18 +10,23 @@
"email": "sindresorhus@gmail.com",
"url": "https://sindresorhus.com"
},
"type": "module",
"exports": {
"types": "./index.d.ts",
"default": "./index.js"
},
"sideEffects": false,
"engines": {
"node": ">=6"
"node": ">=18.20"
},
"scripts": {
"test": "xo && ava && tsd",
"//test": "xo && ava && tsd",
"test": "ava && tsd",
"make": "node make.js"
},
"files": [
"index.js",
"index.d.ts",
"static.js",
"static.d.ts",
"builtin-modules.json"
],
"keywords": [
Expand All @@ -37,8 +42,8 @@
"names"
],
"devDependencies": {
"ava": "^1.4.1",
"tsd": "^0.7.2",
"xo": "^0.24.0"
"ava": "^6.1.2",
"tsd": "^0.31.0",
"xo": "^0.58.0"
}
}
32 changes: 10 additions & 22 deletions readme.md
Original file line number Diff line number Diff line change
@@ -1,44 +1,32 @@
# builtin-modules

> List of the Node.js builtin modules
> A static list of the Node.js builtin modules from the latest Node.js version
The list is just a [JSON file](builtin-modules.json) and can be used anywhere.

## Install

```
$ npm install builtin-modules
```sh
npm install builtin-modules
```

## Usage

```js
const builtinModules = require('builtin-modules');
import builtinModules from 'builtin-modules';

console.log(builtinModules);
//=> ['assert', 'buffer', ...]
//=> ['assert', 'buffer', ]
```

## API

Returns an array of builtin modules fetched from the running Node.js version.
## Tip

### Static list
To get a list from the current Node.js version, use the built-in API:

This module also comes bundled with a static array of builtin modules generated from the latest Node.js version. You can get it with `require('builtin-modules/static');`
```js
import {builtinModules} from 'node:module';
```

## Related

- [is-builtin-module](https://github.com/sindresorhus/is-builtin-module) - Check if a string matches the name of a Node.js builtin module

---

<div align="center">
<b>
<a href="https://tidelift.com/subscription/pkg/npm-builtin-modules?utm_source=npm-builtin-modules&utm_medium=referral&utm_campaign=readme">Get professional support for this package with a Tidelift subscription</a>
</b>
<br>
<sub>
Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
</sub>
</div>
14 changes: 0 additions & 14 deletions static.d.ts

This file was deleted.

2 changes: 0 additions & 2 deletions static.js

This file was deleted.

20 changes: 12 additions & 8 deletions test.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
import test from 'ava';
import builtinModulesStatic from './static';
import builtinModules from '.';
import builtinModules from './index.js';

test('main', t => {
test('main', async t => {
console.log('Builtin modules:', builtinModules);

t.notThrows(() => {
for (const x of builtinModules) {
require(x);
await t.notThrowsAsync((async () => {
for (const builtinModule of builtinModules) {
// Only available in latest Node.js.
if (builtinModule === 'trace_events') {
continue;
}

await import(builtinModule);
}
});
})());

t.true(builtinModules.includes('fs'));
t.true(Array.isArray(builtinModulesStatic));
t.true(Array.isArray(builtinModules));
});

0 comments on commit 75f59d3

Please sign in to comment.