@davidwells/extract-deps
v0.1.4
Published
Get imports and requires from a codebase without AST
Downloads
1,043
Readme
extract-deps
A lightweight utility for extracting imports, requires, and exports from JavaScript/TypeScript code without using AST parsing.
Features
- Extract ES6 imports (static and dynamic)
- Extract CommonJS requires (static and dynamic)
- Extract ES6 exports (default, named, namespace, type exports)
- Parse code without AST for better performance
- Support for destructuring in imports/requires
- TypeScript support for type exports and imports
- Handles complex patterns like re-exports and aliased exports
Installation
npm install @davidwells/extract-depsUsage
Basic Usage
const { 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)Extract Imports Only
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)Extract Requires Only
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)Extract Exports Only
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)API Reference
extractDeps(code)
Main function that extracts all imports, requires, and exports from the given code.
Parameters:
code(string): The JavaScript/TypeScript code to analyze
Returns:
- Object with
imports,requires, andexportsarrays
Import Functions
getImports(code)- Get all imports (static and dynamic)getStaticImports(code)- Get only static importsgetDynamicImports(code)- Get only dynamic imports
Require Functions
getRequires(code)- Get all requires (static and dynamic)getStaticRequires(code)- Get only static requiresgetDynamicRequires(code)- Get only dynamic requires
Export Functions
getExports(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 exports
Data Structure
Each 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
}Examples
You can find more examples in the examples/ directory and usage examples in _usage.js.
Performance
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.
Alternative Approaches
- Runtime analysis: pkg-exports
- AST-based parsing: parse-imports
- ESM/CJS utils https://www.npmjs.com/package/mlly
License
MIT
