0.4.1 • Published 1 month ago

depseek v0.4.1

Weekly downloads
-
License
MIT
Repository
github
Last release
1 month ago

depseek

Seeks for dependency references in JS/TS code

lcov npm

Motivation

Dep extraction is a common task for many tools solved in different ways from regexps to AST parsing. This implementation relies on streams to make controllable memory consumption.

Status

Working draft

Key features

  • Uses stream-based reader
  • Points exact dependency references by offset
  • Handles string literal and comments
  • Captures bound comments (optional)

Usage

npm i depseek

Usage

import fs from 'fs'
import {depseek} from 'depseek'

const stream = fs.createReadStream('index.js')
const deps = await depseek(stream)

// returns
[
  { type: 'dep', value: 'node:fs', index: 17 },
  { type: 'dep', value: 'foo', index: 34 },
  { type: 'dep', value: 'q', index: 92 }
  // ...
]

Options

By default depseek extracts only require and import arguments. You can also capture bound comments.

const depsAndComments = await depseek(stream, {comments: true})

[
  { type: 'dep', value: 'node:fs', index: 17 },
  { type: 'dep', value: 'foo', index: 34 },
  { type: 'comment', value: ' @1.0.0', index: 46 }
  //...
]

Stream buffer size set to 1000 by default. You can change the limit by passing bufferSize.

const deps = await depseek(stream, {bufferSize: 10000})

Sync

Streams are aimed at intensive bulk operations. If you need to process just a few files, you can use depseekSync.

import fs from 'node:fs'
import { depseekSync } from 'depseek'

const contents = fs.readFileSync('index.js', 'utf8') // Buffer or string
const deps = depseekSync(contents)

patchRefs

The one more utility is patchRefs that replaces dependency references with a given value.

import {patchRefs} from 'depseek'

const patcher = (v: string) => v.startsWith('.') ? v + '.js' : v
const input = `
import {foo} from './foo'
import {bar} from "./bar"
import {baz} from 'baz'
`

patchRefs(input, patcher)
// gives as a result:
`
import {foo} from './foo.js'
import {bar} from "./bar.js"
import {baz} from 'baz'
`

Refs

License

MIT

0.4.1

1 month ago

0.3.0

3 months ago

0.4.0

3 months ago

0.2.5

3 months ago

0.2.4

3 months ago

0.2.3

3 months ago

0.2.2

4 months ago

0.1.0

4 months ago

0.2.1

4 months ago

0.2.0

4 months ago

0.1.1

4 months ago

0.0.1

4 months ago

0.0.0

4 months ago