Skip to content

Heuristic lexer for detecting imports and exports in JavaScript modules

License

Notifications You must be signed in to change notification settings

holepunchto/bare-module-lexer

Repository files navigation

bare-module-lexer

Heuristic lexer for detecting imports and exports in JavaScript modules. It trades off correctness for performance, aiming to reliably support the most common import and export patterns with as little overhead as possible.

Usage

const lex = require('bare-module-lexer')

lex(`
  const foo = require('./foo.js')
  exports.bar = 42
`)

// {
//   imports: [
//     { specifier: './foo.js', type: REQUIRE, names: [], position: [ 15, 24, 32 ] }
//   ],
//   exports: [
//     { name: 'bar', position: [ 37, 45, 48 ] }
//   ]
// }

API

const { imports, exports } = lex(source[, encoding][, options])

imports is an array of objects with the following shape:

{
  specifier: 'string',
  type: number,
  names: ['string'],
  position: [
    number, // Import start
    number, // Specifier start
    number  // Specifier end
  ]
}

exports is an array of objects with the following shape:

{
  name: 'string',
  position: [
    number, // Export start
    number, // Name start
    number  // Name end
  ]
}

Options are reserved.

lex.constants

Constant Description
REQUIRE CommonJS require().
IMPORT ES module import.
DYNAMIC ES module import() if IMPORT is set.
ADDON CommonJS require.addon() if REQUIRE is set, or ES module import.meta.addon() if IMPORT is set.
ASSET CommonJS require.asset() if REQUIRE is set, or ES module import.meta.asset() if IMPORT is set.
RESOLVE CommonJS require.resolve() or require.addon.resolve() if REQUIRE and optionally ADDON are set, or ES module import.meta.resolve() or import.meta.addon.resolve() if IMPORT and optionally ADDON are set.
REEXPORT Re-export of a CommonJS require() if REQUIRE is set.

License

Apache-2.0

About

Heuristic lexer for detecting imports and exports in JavaScript modules

Resources

License

Stars

Watchers

Forks