ES module parser powered by Rust.
This package is a Rust version of es-module-lexer
es-module-lexer
cannot parse jsx
/ ts
/ tsx
files, we need transform ts
to js
using esbuild
/ swc
first, and then parse :
import { parse } from 'es-module-lexer'
import { transformSync } from 'esbuild'
// 1. transform ts to js
const js = transformSync(ts)
// 2. parse modules
const result = parse(js)
rs-module-lexer
resolved this problem, it can parse the ts(x)
file directly.
pnpm i -D rs-module-lexer
import { parseAsync } from 'rs-module-lexer'
// Sync: import { parse } from 'rs-module-lexer'
const { output } = await parseAsync({
input: [
{
filename: 'index.ts',
code: `
export const member = 5
import { useState } from 'react'
`,
},
// ... other files
],
})
// [ { n: 'react', s: 67, e: 72, ss: 41, se: 73, d: -1, a: -1, t: 1 } ]
console.log(output[0].imports)
// [ { n: 'member', ln: 'member', s: 22, e: 28, ls: 22, le: 28 } ]
console.log(output[0].exports)
For details of the parse results, please see es-module-lexer
.
- import { init, parse } from 'es-module-lexer'
- await init
- const [imports, exports, facade, hasModuleSyntax] = parse(code)
+ import { parseAsync } from 'rs-module-lexer'
+ const { output } = await parseAsync({ input: [{ filename: 'index.ts', code }] })
+ const { imports, exports, facade, hasModuleSyntax } = output[0]
rs-module-lexer
can parse multiple files at once, the syntax is auto detect based on filename
.
[TS]
es-module-lexer average: 171.6ms
rs-module-lexer average: 24.7ms 🎉
[JS]
es-module-lexer average: 32.6ms
rs-module-lexer average: 23.9ms 🎉
MIT