@putout/plugin-esm
v2.3.0
Published
๐Putout plugin improves ability to transform ESM code
Downloads
13,050
Maintainers
Readme
@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
- โ apply-export-from;
- โ 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/apply-export-from": "on",
"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"
}
}
apply-export-from
The
export
declaration is used to export values from a JavaScript module.(c) MDN
Check out in ๐Putout Editor.
โ Example of incorrect code
import * as ns_1 from 'x';
export {
ns_1 as ns,
};
โ Example of correct code
export * as ns from 'x';
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;
- โ hashed;
- โ 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';
import parse from '#parser';
const c = 5;
โ Example of correct code
import fs from 'node:fs';
import react from 'react';
import {lodash} from 'lodash';
import parse from '#parser';
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