npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@eljs/utils

v1.3.1

Published

Collection of nodejs utility.

Readme

@eljs/utils

Collection of nodejs utility.

Installation

$ pnpm add @eljs/utils
// or
$ yarn add @eljs/utils
// or
$ npm i @eljs/utils -S

Usage

import utils from '@eljs/utils'

API

File

readFile(file: string, encoding?: BufferEncoding): Promise<string>

Read a single file content asynchronously.

readFileSync(file: string, encoding?: BufferEncoding): string

Read a single file content synchronously.

readJson<T extends object>(file: string): Promise<T>

Read a single json file asynchronously.

readJsonSync<T extends object>(file: string): T

Read a single json file synchronously.

writeFile(file: string, content: string, encoding?: BufferEncoding): Promise<void>

Write content to a single file asynchronously.

writeFileSync(file: string, content: string, encoding?: BufferEncoding): void

Write content to a single file synchronously.

safeWriteFile(file: string, content: string, encoding?: BufferEncoding): Promise<void>

Safe write content to a single file asynchronously.

safeWriteFileSync(file: string, content: string, encoding?: BufferEncoding): void

Safe write content to a single file synchronously.

writeJsonFile(file: string, content: string): Promise<void>

Write json to a single file asynchronously.

writeJsonFileSync(file: string, content: string): void

Write json to a single file synchronously.

safeWriteJson(file: string, content: string): Promise<void>

Safe write json to a single file asynchronously.

safeWriteJsonSync(file: string, content: string): void

Safe write json to a single file synchronously.

copyFile(from: string, to: string, options?: CopyFileOptions): Promise<void>

Copy a file asynchronously.

copyFileSync(from: string, to: string, options?: CopyFileOptions): void

Copy a file synchronously.

copyTpl(from: string, to: string, data: Record<string, any>, options?: CopyFileOptions): Promise<void>

Copy a template asynchronously.

copyTplSync(from: string, to: string, data: Record<string, any>, options?: CopyFileOptions): void

Copy a template synchronously.

copyDirectory(from: string, to: string, data: Record<string, any>, options: CopyFileOptions): Promise<void>

Copy a directory asynchronously.

copyDirectorySync(from: string, to: string, data: Record<string, any>, options: CopyFileOptions): void

Copy a directory synchronously.

move(from: string, to: string, overwrite?: boolean): Promise<void>

Move a directory or file asynchronously.

moveSync(from: string, to: string, overwrite?: boolean): void

Move a directory or file synchronously.

remove(path: string): Promise<boolean>

Remove directory or file asynchronously.

removeSync(path: string): boolean

Remove directory or file synchronously.

mkdir(path: string, mode?: number | string): Promise<string | void | undefined>

Create a directory asynchronously.

mkdirSync(path: string, mode?: number | string): string | void | undefined

Create a directory synchronously.

tmpdir(random?: boolean): Promise<string>

tmpdir(dirname: string, random?: boolean): Promise<string>

Create a temporary directory asynchronously.

tmpdirSync(random?: boolean): string

tmpdirSync(dirname: string, random?: boolean): string

Create a temporary directory synchronously.

isFile(file: string): Promise<Boolean>

Whether the path is file asynchronously.

isFileSync(file: string): Boolean

Whether the path is file synchronously.

isDirectory(path: string): Promise<Boolean>

Whether the path is directory asynchronously.

isDirectorySync(path: string): Boolean

Whether the path is directory synchronously.

isSymlink(link: string): Promise<Boolean>

Whether the file is symlink asynchronously.

isSymlinkSync(link: string): Boolean

Whether the file is symlink synchronously.

isPathExists(file: string): Promise<Boolean>

Whether the path is exist asynchronously.

isPathExistsSync(file: string): Boolean

Whether the path is exist synchronously.

loadJs<T>(path: string): Promise<T>

Load js file asynchronously.

loadJsSync<T>(path: string): T

Load js file synchronously.

loadTs<T>(path: string): Promise<T>

Load ts file asynchronously.

loadTsSync<T>(path: string): T

Load ts file synchronously.

loadYaml<T>(path: string): Promise<T>

Load yaml file asynchronously.

loadYamlSync<T>(path: string): T

Load yaml file synchronously.

renderTemplate(template: string, data: Record<string, unknown>, options?: RenderTemplateOptions): string

Render template file.

Logger

logger.log(message: string, tag?: string): void

logger.event(message: string): void

logger.info(message: string): void

logger.warn(message: string): void

logger.error(message: string): void

logger.fatal(message: string): void

logger.wait(message: string): void

logger.ready(message: string): void

logger.printErrorAndExit(message: string): void

logger.step(name: string): (message: string) => void

logger.step(name: string, message: string): void

Logger in different level。

logger.clear(message: string): void

Clear the stdout.

ChildProcess

parseCommand(command: string): string[]

Parse string command to arguments.

run(command: string, options?: RunCommandOptions): ExecaChildProcess

run(command: string, args: string[], options?: RunCommandOptions): ExecaChildProcess

runCommand(command: string, options?: RunCommandOptions): ExecaChildProcess

Run shell command.

getExecutableCommand(target: string, dirs?: string[]): Promise<string | null>

Find executable command.

normalizeArgs(args?: string | string[]): string[]

Normalize the command arguments.

getPid(command: string): Promise<number | null>

Get the process id.

sudo(options?: SudoOptions): Promise<void>

sudo(args: string[], options?: SudoOptions): Promise<void>

Execute commands in sudo mode.

Git

downloadGitRepository(url: string, options?: DownloadGitRepositoryOptions): Promise<string>

Download the git repository.

hasGit(): Promise<boolean>

Whether the git exist globally.

hasProjectGit(cwd: string): Promise<boolean>

Whether the git exist project.

isGitClean(options?: RunCommandOptions): Promise<boolean>

Whether the git working tree is clean.

isGitBehindRemote(options?: RunCommandOptions): Promise<boolean>

Whether the git is behind remote.

isGitAheadRemote(options?: RunCommandOptions): Promise<boolean>

Whether the git is ahead remote.

getGitUrl(cwd: string, exact?: boolean): Promise<string>

Get the git url asynchronously.

getGitUrlSync(cwd: string, exact?: boolean): string

Get the git url synchronously.

getGitBranch(options?: RunCommandOptions): Promise<string>

Get the git branch.

getGitUpstreamBranch(options?: RunCommandOptions): Promise<string | null>

Get the git upstream branch.

getGitCommitSha(options?: RunCommandOptions): Promise<string>

getGitCommitSha(short: boolean, options?: RunCommandOptions): Promise<string>

Get the git commit sha.

getGitLatestTag(options?: RunCommandOptions): Promise<string>

getGitLatestTag(match: string, options?: RunCommandOptions): Promise<string>

getGitLatestTag(match: string, args: string[], options?: RunCommandOptions): Promise<string>

Get the git latest tag.

gitUrlAnalysis(url: string): GitRemoteRepository | null

Analysis the git url to git remote repository.

getGitRepository(dir: string, exact?: boolean): Promise<GitRepository | null>

Get the git repository asynchronously.

getGitRepositorySync(dir: string, exact?: boolean): GitRepository | null

Get the git repository synchronously.

getGitUser(): Promise<GitUser>

Get the git user asynchronously.

getGitUserSync(): GitUser

Get the git user synchronously.

getProjectGitDir(dir: string): Promise<string | undefined>

Get the project git dir asynchronously.

getProjectGitDirSync(dir: string): string | undefined

Get the project git dir synchronously.

gitCommit(message: string, options?: RunCommandOptions): Promise<void>

gitCommit(message: string, args: string[], options?: RunCommandOptions): Promise<void>

Git commit message.

gitPush(options?: RunCommandOptions): Promise<void>

gitPush(args: string[], options?: RunCommandOptions): Promise<void>

Git push to remote.

gitTag(tagName: string, options?: RunCommandOptions): Promise<void>

gitTag(tagName: string, args: string[], options?: RunCommandOptions): Promise<void>

Git tag.

Npm

downloadNpmTarball(url: string, options?: DownloadOptions): Promise<string>

downloadNpmTarball(url: string, dest: string, options?: DownloadOptions): Promise<string>

Download the npm tarball.

installDeps(options?: InstallDepsOptions): Promise<void>

installDeps(packageManager: PackageManager, options?: InstallDepsOptions): Promise<void>

Install dependencies.

getNpmRegistry(options?: RunCommandOptions): Promise<string>

Get the npm registry.

getNpmUser(options?: RunCommandOptions): Promise<string>

Get the npm user.

getNpmPackage(name: string, options?: { cwd?: string registry?: string timeout?: number }): Promise<Omit<NpmPackage, 'version'> | null>

getNpmPackage(name: string, options?: { version: string, cwd?: string registry?: string timeout?: number }): Promise<Omit<NpmPackage, 'version'> | null>

Get the npm package.

getNpmPrefix(): Promise<string>

Get the npm prefix.

pkgNameAnalysis(name: string): ResolvedPkgName

Analysis the package name.

getPackageManager(cwd?: string): Promise<PackageManager>

Get the package manager.

Object

deepMerge<T1, T2>(a: Partial<T1>, b: Partial<T2>): T1 & T2

deepMerge<T1, T2, T3>(a: Partial<T1>, b: Partial<T2>, b: Partial<T3>): T1 & T2 & T3

deepMerge<T1, T2, T3, T4>(a: Partial<T1>, b: Partial<T2>, c: Partial<T3>, d: Partial<T4>): T1 & T2 & T3 & T4

deepMerge<T1, T2, T3, T4, T5>(a: Partial<T1>, b: Partial<T2>, c: Partial<T3>, d: Partial<T4>, e: Partial<T5>): T1 & T2 & T3 & T4 & T5

deepMerge<T1, T2, T3, T4, T5, T6>(a: Partial<T1>, b: Partial<T2>, c: Partial<T3>, d: Partial<T4>, e: Partial<T5>, f: Partial<T6>): T1 & T2 & T3 & T4 & T5 & T6

Deep merge objects.

Path

winPath(path: string): string

Resolve windows path.

getWorkspaceRoot(cwd: string): Promise<string>

Get the workspace root.

getWorkspaces(cwd: string, relative = false): Promise<string[]>

Get the project workspaces.

getPnpmWorkspaceRoot(cwd: string): Promise<string>

Get the workspace root of pnpm.

getYarnWorkspaceRoot(cwd: string): Promise<string>

Get the workspace root of yarn.

getLernaWorkspaceRoot(cwd: string): Promise<string>

Get the workspace root of lerna.

getNpmWorkspaceRoot(cwd: string): Promise<string>

Get the workspace root of npm.

getBunWorkspaceRoot(cwd: string): Promise<string>

Get the workspace root of bun.

tryPaths(paths: string[]): Promise<string | undefined>

Get the existing path asynchronously.

tryPathsSync(paths: string[]): Promise<string | undefined>

Get the existing path synchronously.

extractCallDir(stack?: number): string

Extract the directory where the code is executed.

Promise

new Deferred<T>(): Deferred

Create a deferred.

deferred.promise: Promise

Waiting promise.

deferred.resolve: (value: T | PromiseLike<T>) => void

Resolve the promise.

deferred.reject: (err: unknown) => void

Reject the promise.

retry<T>(fn: () => Promise<T>, retries?: number, delay?: number): Promise<T>

Retrying a task.

retryWithValue<T>(fn: () => MaybePromiseFunction<T>, retries?: number, delay?: number): Promise<T>

Retrying a task until value is not null.

sleep(ms: number): Promise<void>

Sleep for specified milliseconds.

timeout<T>(promise: Promise<T>, ms: number, message?: string): Promise<T>

Throw error when timeout.

String

camelCase(str: string): string

Convert to camelCase.

pascalCase(str: string): string

Convert to pascalCase.

kebabCase(str: string): string

Convert to kebabCase.

stripBlankLines(str: string): string

Strip the blank lines.

Type

isPromise(target: unknown): boolean

Whether the target is promise.

isGenerator(target: unknown): boolean

Whether the target is generator function.

isAsyncFunction(target: unknown): boolean

Whether the target is async function.

isESModule(target: unknown): boolean

Whether the target is es module.