Node.js tool for parsing imports to change ESM and CJS specifiers.
- Rewrite specifier values.
- Read metadata about a specifier's AST node.
- Updates files or strings.
- Parses
import,import(),import.meta.resolve(),export,require, andrequire.resolve().
Given a file with some imports and exports:
// file.ts import { someLib } from 'some-package' import { foo } from './path/to/foo.js' export { bar } from './path/to/bar.js'You can use specifier to change the values:
import { specifier } from '@knighted/specifier' const update = await specifier.update('file.ts', ({ value }) => { if (value === 'some-package') { return 'some-package/esm' } return value.replace('.js', '.mjs') }) console.log(update) /* import { someLib } from 'some-package/esm' import { foo } from './path/to/foo.mjs' export { bar } from './path/to/bar.mjs' */Or collect the AST nodes:
import { type Spec, specifier } from '@knighted/specifier' const nodes: { node: Spec['node']; parent: Spec['parent'] }[] = [] await specifier.update('file.ts', ({ node, parent }) => { nodes.push({ node, parent }) }) nodes.forEach(({ node, parent }) => { // Do something with the metadata })