@putout/plugin-nodejs 
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/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-url-to-dirname": "on",
"nodejs/convert-top-level-return": "on",
"nodejs/declare": "on",
"nodejs/declare-after-require": "on",
"nodejs/remove-process-exit": "on"
}
}
Rules
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';
✅ Example of correct code
import fs from 'node:fs';
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-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';
License
MIT