Skip to content

flex-development/builtin-modules

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

builtin-modules

github release npm codecov module type: esm license conventional commits typescript vitest yarn

Universal drop-in replacement for module.builtinModules

Contents

What is this?

This package is a universal drop-in replacement for the builtinModules constant exported by node:module.

When should I use this?

This package exports an array containing the names of modules provided by Node.js. It can be used to not only verify that a module is maintained by Node.js, but to also determine if a module can be imported using a node: URL.

Install

This package is ESM only.

In Node.js (version 18+) with yarn:

yarn add @flex-development/builtin-modules
See Git - Protocols | Yarn Β for details regarding installing from Git.

In Deno with esm.sh:

import { builtinModules } from 'https://esm.sh/@flex-development/builtin-modules'

In browsers with esm.sh:

<script type="module">
  import { builtinModules } from 'https://esm.sh/@flex-development/builtin-modules'
</script>

Use

import { builtinModules } from '@flex-development/builtin-modules'

/**
 * List of all modules provided by Node.js.
 *
 * > πŸ‘‰ **Note**: Includes modules available only under the `node:` scheme (i.e.
 * > `node:sea`, `node:sqlite`, `node:test`).
 *
 * @const {string[]} builtins
 */
const builtins: string[] = [
  ...builtinModules,
  'node:sea',
  'node:test',
  'node:sqlite'
]

/**
 * Set of all modules provided by Node.js.
 *
 * > πŸ‘‰ **Note**: Includes `node:` URLs.
 *
 * @const {Set<string>} BUILTIN_MODULES
 */
const BUILTIN_MODULES: Set<string> = new Set(builtins.flatMap(m => {
  return m.startsWith('node:') ? [m] : [m, 'node:' + m]
}).sort((a, b) => a.localeCompare(b)))

/**
 * Check if `m` references a [builtin module][builtin-module].
 *
 * [builtin-module]: https://nodejs.org/api/esm.html#builtin-modules
 *
 * @example
 *  isBuiltin('@flex-development/builtin-modules') // false
 * @example
 *  isBuiltin('assert') // true
 * @example
 *  isBuiltin('fs/promises') // true
 * @example
 *  isBuiltin(new URL('node:os')) // true
 * @example
 *  isBuiltin('node:module') // true
 * @example
 *  isBuiltin('node:test/reporters') // true
 * @example
 *  isBuiltin('test') // false
 *
 * @param {unknown} m
 *  The thing to check
 * @return {boolean}
 *  `true` if `m` references builtin module, `false` otherwise
 */
function isBuiltin(m: unknown): boolean {
  return BUILTIN_MODULES.has(String(m))
}

console.log(isBuiltin('@flex-development/builtin-modules'))
console.log(isBuiltin('assert'))
console.log(isBuiltin('fs/promises'))
console.log(isBuiltin('node:module'))
console.log(isBuiltin('node:test/reporters'))
console.log(isBuiltin('test'))

API

This package exports the identifier builtinModules.

The default export is also builtinModules.

builtinModules

List of all modules provided by Node.js.

The list is a superset of module.builtinModules given the running version of Node.js.

πŸ‘‰ Note: Modules available only under the node: scheme (i.e. node:sea, node:sqlite, node:test) are not listed.

Types

This package is fully typed with TypeScript.

Related

Contribute

See CONTRIBUTING.md.

This project has a code of conduct. By interacting with this repository, organization, or community you agree to abide by its terms.