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

v13.1.1

Published

๐ŸŠPutout plugin adds ability to transform code to new API of Node.js

Downloads

57,749

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

Rules

Config

{
    "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/group-require-by-id": "on",
        "nodejs/remove-process-exit": "on",
        "nodejs/add-missing-strict-mode": "on",
        "nodejs/remove-useless-strict-mode": "on",
        "nodejs/remove-illegal-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.For ESM use esm/declare-imports-first.

โŒ 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);

group-require-by-id

Checkout in ๐ŸŠPutout Editor. For ESM use esm/group-imports-by-sources.

โŒ Example of incorrect code

const ss = require('../../bb/ss');
const d = require('../hello');
const react = require('react');
const {lodash} = require('lodash');
const fs = require('node:fs');
const b = require('./ss');
const m = require(x);
const c = 5;

โœ… Example of correct code

const fs = require('node:fs');
const react = require('react');
const {lodash} = require('lodash');
const ss = require('../../bb/ss');
const d = require('../hello');

const b = require('./ss');
const m = require(x);
const c = 5;

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-illegal-strict-mode

SyntaxError: "use strict" not allowed in function with non-simple parameters The JavaScript exception "use strict" not allowed in function occurs when a use strict directive is used at the top of a function with default parameters, rest parameters, or destructuring parameters.

(c) MDN

Checkout in ๐ŸŠPutout Editor.

โŒ Example of incorrect code

function x1(...a) {
    'use strict';
}

function x2(a, b = 3) {
    'use strict';
}

function x3({a}) {
    'use strict';
}

function x4([a]) {
    'use strict';
}

function x5(...a) {
    'use strict';
}

โœ… Example of correct code

function x1(...a) {}

function x2(a, b = 3) {}

function x3({a}) {}

function x4([a]) {}

function x5(...a) {}

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