npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@putout/plugin-nodejs

v11.9.1

Published

🐊Putout plugin adds ability to transform code to new API of Node.js

Downloads

70,665

Readme

@putout/plugin-nodejs NPM version

Node.js is an open-source, cross-platform, JavaScript runtime environment.

(c) Nodejs.org

🐊Putout plugin adds ability to transform to new Node.js API and apply best practices.

Install

npm i putout @putout/plugin-nodejs -D

Options

{
    "rules": {
        "nodejs/convert-commonjs-to-esm": "off",
        "nodejs/convert-esm-to-commonjs": "off",
        "nodejs/cjs-file": "off",
        "nodejs/mjs-file": "off",
        "nodejs/rename-file-cjs-to-js": "off",
        "nodejs/rename-file-mjs-to-js": "off",
        "nodejs/add-node-prefix": "on",
        "nodejs/convert-buffer-to-buffer-alloc": "on",
        "nodejs/convert-fs-promises": "on",
        "nodejs/convert-promisify-to-fs-promises": "on",
        "nodejs/convert-dirname-to-url": "on",
        "nodejs/convert-exportst-to-module-exports": "on",
        "nodejs/convert-url-to-dirname": "on",
        "nodejs/convert-top-level-return": "on",
        "nodejs/declare": "on",
        "nodejs/declare-after-require": "on",
        "nodejs/remove-process-exit": "on",
        "nodejs/add-missing-strict-mode": "on",
        "nodejs/remove-useless-strict-mode": "on",
        "nodejs/remove-useless-promisify": "on"
    }
}

add-node-prefix

Deno supports using Node.js built-in modules such as fs, path, process, and many more via node: specifiers.

(c) deno.land

Check out in 🐊Putout Editor.

❌ Example of incorrect code

import fs from 'fs';

const path = require('path');
await import('path');

✅ Example of correct code

import fs from 'node:fs';

const path = require('node:path');
await import('node:path');

Comparison

Linter | Rule | Fix --------|-------|------------| 🐊 Putout | apply-node-prefix | ✅ ⏣ ESLint | prefer-node-protocol | ✅

convert-buffer-to-buffer-alloc

The Buffer() function and new Buffer() constructor are deprecated due to API usability issues that can lead to accidental security issues.

(c) DEP0005

Check out in 🐊Putout Editor.

❌ Example of incorrect code

const n = 100;
const buf = [];

new Buffer(123);
new Buffer(n);
new Buffer('hello');

new Buffer([]);
new Buffer(buf);

✅ Example of correct code

const n = 100;
const buf = [];

Buffer.alloc(123);
Buffer.alloc(n);
Buffer.from('hello');

Buffer.from([]);
Buffer.from(buf);

convert-fs-promises

Convert fs.promises into form that will be simpler to use and convert to and from ESM.

❌ Example of incorrect code

const {readFile} = require('fs').promises;

✅ Example of correct code

const {readFile} = require('fs/promises');

convert-promisify-to-fs-promises

❌ Example of incorrect code

const fs = require('fs');
const readFile = promisify(fs.readFile);

✅ Example of correct code

const {readFile} = require('fs/promises');

convert-dirname-to-url

Only for ESM.

❌ Example of incorrect code

const {join} = require('path');
const path = require('path');

const file1 = join(__dirname, '../../package.json');
const file2 = path.join(__dirname, '../../package.json');

✅ Example of correct code

const file1 = new URL('../../package.json', import.meta.url);
const file2 = new URL('../../package.json', import.meta.url);

convert-url-to-dirname

Only for CommonJS.

❌ Example of incorrect code

const {readFile} = require('fs/promises');
const file = new URL('../../package.json', import.meta.url);

✅ Example of correct code

const {readFile} = require('fs/promises');
const {join} = require('path');
const file = join(__dirname, '../../package.json');

remove-process-exit

In most cases process.exit() is called from bin directory, if not - disable this rule using match.

-process.exit();

convert-exports-to-module-exports

Since exports = 5 wan't make any export, just change value of variable. Checkout in 🐊Putout Editor.

❌ Example of incorrect code

exports.x = 5;

✅ Example of correct code

module.exports.x = 5;

convert-top-level-return

❌ Example of incorrect code

return;

✅ Example of correct code

process.exit();

declare

Add declarations to built-in node.js modules:

Based on @putout/operator-declare.

❌ Example of incorrect code

await readFile('hello.txt', 'utf8');

✅ Example of correct code

import {readFile} from 'fs/promises';

await readFile('hello.txt', 'utf8');

When you want to skip some declaration use dismiss:

{
    "rules": {
        "nodejs/declare": ["on", {
            "dismiss": ["readFile"]
        }]
    }
}

declare-after-require

Node.js follows the CommonJS module system, and the builtin require function is the easiest way to include modules that exist in separate files. The basic functionality of require is that it reads a JavaScript file, executes the file, and then proceeds to return the exports object.

(c) Nodejs.org

Check out in 🐊Putout Editor.

❌ Example of incorrect code

const name = 'hello.txt';
const {readFile} = require('fs/promises');

✅ Example of correct code

const {readFile} = require('fs/promises');
const name = 'hello.txt';

convert-commonjs-to-esm

Convert CommonJS EcmaScript Modules.

EcmaScript module syntax is the standard way to import and export values between files in JavaScript. The import statement can be used to reference a value exposed by the export statement in another file.

(c) parceljs

require

❌ Example of incorrect code

const {join} = require('path');

const args = require('minimist')({
    string: ['a', 'b'],
});

✅ Example of correct code

import {join} from 'path';
import minimist from 'minimist';

const args = minimist({
    string: ['a', 'b'],
});

exports

❌ Example of incorrect code

module.exports = () => {};

✅ Example of correct code

export default () => {};

Commons

❌ Example of incorrect code

const {readFile} = require('fs/promises');

await readFile(__filename);

✅ Example of correct code

import {readFile} from 'fs/promises';
import {fileURLToPath} from 'url';

const __filename = fileURLToPath(import.meta.url);
await readFile(__filename);

convert-esm-to-commonjs

CommonJS is a module system supported in Node, it provides a require function, which can be used to access the exports object exposed by another file.

(c) parceljs

Convert EcmaScript Modules to CommonJS.

❌ Example of incorrect code

import hello from 'world';

✅ Example of correct code

const hello = require('world');

cjs-file

Run convert-esm-to-commonjs for all *.cjs files with help of redlint.

Check out in 🐊Putout Editor.

mjs-file

Run convert-commonjs-to-esm for all *.cjs files with help of redlint.

Check out in 🐊Putout Editor.

rename-file-cjs-to-js

Rename *.cjs files when type === "commonjs":

 /
 |-- package.json
 `-- lib/
-     `-- hello.cjs
+     `-- hello.js

Check out in 🐊Putout Editor.

rename-file-mjs-to-js

Rename *.mjs files when type === "module":

 /
 |-- package.json
 `-- lib/
-     `-- hello.mjs
+     `-- hello.js

Check out in 🐊Putout Editor.

add-missing-strict-mode

Strict mode makes several changes to normal JavaScript semantics:

  • Eliminates some JavaScript silent errors by changing them to throw errors.
  • Fixes mistakes that make it difficult for JavaScript engines to perform optimizations: strict mode code can sometimes be made to run faster than identical code that's not strict mode.
  • Prohibits some syntax likely to be defined in future versions of ECMAScript.

(c) MDN

Add strict mode to CommonJS:

❌ Example of incorrect code

const a = require('b');

✅ Example of correct code

'strict mode';

const a = require('b');

✅ Example of correct code

remove-useless-strict-mode

Remove 'use strict' from ESM.

❌ Example of incorrect code

'strict mode';

import a from 'b';

✅ Example of correct code

import a from 'b';

remove-useless-promisify

Takes a function following the common error-first callback style, i.e. taking an (err, value) => ... callback as the last argument, and returns a version that returns promises.

(c) nodejs.org

Remove useless promisify(). Checkout in 🐊Putout Editor.

❌ Example of incorrect code

export const readSize = promisify(async (dir, options, callback) => {});

✅ Example of correct code

export const readSize = async (dir, options, callback) => {};

License

MIT