@putout/plugin-esm
The static
import
statement is used toimport
read only live bindings which are exported by another module. The imported bindings are called live bindings because they are updated by the module that exported the binding, but cannot be re-assigned by the importing module.(c) MDN
🐊Putout plugin adds ability to transform to new Node.js API and apply best practices.
Install
npm i putout @putout/plugin-esm -D
Rules
- ✅ declare-imports-first;
- ✅ group-imports-by-source;
- ✅ merge-duplicate-imports;
- ✅ remove-quotes-from-import-assertions;
- ✅ remove-empty-import;
- ✅ remove-empty-export;
- ✅ sort-imports-by-specifiers;
Config
{
"rules": {
"esm/declare-imports-first": "on",
"esm/group-imports-by-source": "on",
"esm/merge-duplicate-imports": "on",
"esm/remove-quotes-from-import-assertions": "on",
"esm/remove-empty-export": "on",
"esm/remove-empty-import": ["on", {
"ignore": []
}],
"esm/sort-imports-by-specifiers": "on"
}
}
declare-imports-first
Check out in 🐊Putout Editor. For CommonJS use nodejs/declare-after-require.
❌ Example of incorrect code
const [arg] = process.argv;
import esbuild from 'esbuild';
✅ Example of correct code
import esbuild from 'esbuild';
const [arg] = process.argv;
group-imports-by-source
Group order:
- ✅ builtins;
- ✅ external;
- ✅ internal;
Checkout in 🐊Putout Editor.
❌ Example of incorrect code
import fs from 'node:fs';
import {lodash} from 'lodash';
import react from 'react';
import d from '../hello.js';
import ss from '../../bb/ss.js';
import b from './ss.js';
const c = 5;
✅ Example of correct code
import fs from 'node:fs';
import react from 'react';
import {lodash} from 'lodash';
import b from './ss.js';
import d from '../hello.js';
import ss from '../../bb/ss.js';
const c = 5;
merge-duplicate-imports
join
To disable use:
{
"rules": {
"esm/merge-duplicate-imports-join": "off"
}
}
❌ Example of incorrect code
import test from 'supertape';
import {stub} from 'supertape';
✅ Example of correct code
import test, {stub} from 'supertape';
rename
Checkout in 🐊Putout Editor.
To disable use:
{
"rules": {
"esm/merge-duplicate-imports-rename": "off"
}
}
❌ Example of incorrect code
import putout from './putout.js';
import all from './putout.js';
import x from './putout.js';
console.log(all);
console.log(x);
✅ Example of correct code
import putout from './putout.js';
console.log(putout);
console.log(putout);
remove-empty-export
-export {};
remove-empty-import
-import 'abc';
remove-quotes-from-import-assertions
Checkout in 🐊Putout Editor.
❌ Example of incorrect code
import json from './mod.json' with { type: 'json' };
✅ Example of correct code
import json from './mod.json' with { type: 'json' };
sort-imports-by-specifiers
Checkout in 🐊Putout Editor.
❌ Example of incorrect code
import {
a,
b,
c,
d,
} from 'd';
import a1 from 'a1';
✅ Example of correct code
import a1 from 'a1';
import {
a,
b,
c,
d,
} from 'd';
convert-assert-to-with
This feature would ideally use the
with
keyword to denote attributes, but there are existing implementations based on a previous version of the proposal using theassert
keyword. Due to potential web compatibility risks, the proposal still includesassert
marked as deprecated. Usage of the old syntax is discouraged, and its removal is being investigated.(c) tc39
Check out in 🐊Putout Editor.
❌ Example of incorrect code
import json from './foo.json' assert { type: 'json' };
import('foo.json', {
assert: {
type: 'json',
},
});
✅ Example of correct code
import json from './foo.json' with { type: 'json' };
import('foo.json', {
with: {
type: 'json',
},
});
License
MIT