@davidwells/extract-deps extracts imports, requires, and exports from JavaScript and TypeScript source without building a full AST.
It is useful for tooling that needs a fast, practical view of dependency relationships: build systems, CI change detection, documentation tools, and agent workflows that need to understand code structure.
Full documentation, synced from the package README:
A lightweight utility for extracting imports, requires, and exports from JavaScript/TypeScript code without using AST parsing.
npm install @davidwells/extract-depsconst { extractDeps } = require('@davidwells/extract-deps')
const code = `
import { test } from 'uvu'
import assert from 'uvu/assert'
const { execSync } = require('child_process')
const fs = require('fs')
export const myFunction = () => {}
export default class MyClass {}
`
const { imports, requires, exports } = extractDeps(code)
console.log('Imports:', imports)
console.log('Requires:', requires)
console.log('Exports:', exports)const { getImports, getStaticImports, getDynamicImports } = require('@davidwells/extract-deps')
const code = `
import { test } from 'uvu'
import assert from 'uvu/assert'
// Dynamic imports
const dynamicModule = await import('./utils')
const config = await import('./config.js')
`
// Get all imports
const allImports = getImports(code)
// Get only static imports
const staticImports = getStaticImports(code)
// Get only dynamic imports
const dynamicImports = getDynamicImports(code)
console.log('All imports:', allImports)
console.log('Static imports:', staticImports)
console.log('Dynamic imports:', dynamicImports)const { getRequires, getStaticRequires, getDynamicRequires } = require('@davidwells/extract-deps')
const code = `
const { test } = require('uvu')
const assert = require('uvu/assert')
const fs = require('fs')
`
// Get all requires
const allRequires = getRequires(code)
// Get only static requires
const staticRequires = getStaticRequires(code)
// Get only dynamic requires
const dynamicRequires = getDynamicRequires(code)
console.log('All requires:', allRequires)
console.log('Static requires:', staticRequires)
console.log('Dynamic requires:', dynamicRequires)const {
getExports,
getDefaultExports,
getNamedExports,
getNamespaceExports,
getTypeExports
} = require('@davidwells/extract-deps')
const code = `
// Default exports
export default function myFunction() {}
export default class MyClass {}
// Named exports
export const myVariable = 'value'
export function myFunction() {}
// Named declaration exports
export { myFunction, anotherFunction }
export { myFunction as aliasedFunction }
// Re-exports
export * from './module'
export * as namespace from './module'
// Type exports
export type MyType = string
export interface MyInterface {}
`
// Get all exports
const allExports = getExports(code)
// Get specific export types
const defaultExports = getDefaultExports(code)
const namedExports = getNamedExports(code)
const namespaceExports = getNamespaceExports(code)
const typeExports = getTypeExports(code)
console.log('All exports:', allExports)
console.log('Default exports:', defaultExports)
console.log('Named exports:', namedExports)
console.log('Namespace exports:', namespaceExports)
console.log('Type exports:', typeExports)extractDeps(code)Main function that extracts all imports, requires, and exports from the given code.
Parameters:
code (string): The JavaScript/TypeScript code to analyzeReturns:
imports, requires, and exports arraysgetImports(code) - Get all imports (static and dynamic)getStaticImports(code) - Get only static importsgetDynamicImports(code) - Get only dynamic importsgetRequires(code) - Get all requires (static and dynamic)getStaticRequires(code) - Get only static requiresgetDynamicRequires(code) - Get only dynamic requiresgetExports(code) - Get all exportsgetDefaultExports(code) - Get only default exportsgetNamedExports(code) - Get only named exportsgetNamedDeclarationExports(code) - Get named declaration exportsgetAllExports(code) - Get all exports (alias for getExports)getNamespaceExports(code) - Get namespace exports (export * as)getTypeExports(code) - Get TypeScript type exportsEach import/require/export object contains:
{
moduleSpecifier: string, // The module being imported/required
exportType: string, // Type of export (for exports)
exportName: string, // Name of export (for exports)
definitions: Array, // Destructuring and variable definitions
// ... other properties specific to the type
}You can find more examples in the examples/ directory and usage examples in _usage.js.
This library avoids AST parsing for better performance when you only need to extract dependency information. It uses regex-based parsing optimized for common JavaScript/TypeScript patterns.
MIT