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 🙏

© 2024 – Pkg Stats / Ryan Hefner

rc2

v0.0.3

Published

A follow-up to [rc](https://github.com/dominictarr/rc) that is more configurable.

Downloads

6

Readme

rc2

A follow-up to rc that is more configurable.

More configure! Such less bloat!

Features

  • Fully asynchronous: no synchronous I/O in the module
  • Looks only in locations/ranges of directories which you tell it to
  • Loaders are fully configurable
  • Zero-dependencies (all bundled)

Example

import rc2 from 'rc2'
async function main() {
	const loaders = rc2.loaders()
		.default(['ini', 'json', 'js', 'yaml'])
		.ini()  // must have the `ini` module installed
		.json() // uses `json5` module, if installed, otherwise uses `JSON.parse(...)`
		.js()   // uses `require(...)`
		.yaml() // must have the `js-yaml` module installed
	const config = await rc2({
		name: 'myapp', // will look for '.myapprc' files
		locations: [{bottom: __dirname}],
		loaders,
	})
}
main().catch(e => {
	process.exitCode = 1
	console.error(e)
})

API

  • rc2(options) => Promise<any>
  • rc2.loaders() => Loaders

rc2(...) will only look in the locations you specify (see options below) for rc files. In each directory, it searches the following globs:

  • .${name}rc
  • .${name}rc.*
  • .${name}/config
  • .${name}/config.*
  • .config/${name}
  • .config/${name}.*
  • .config/${name}/config
  • .config/${name}/config.*
  • Environment variables (${name}_some__property)
  • CLI args (parsed by minimist)

Options

export interface Options {
	name: string            // the name of the app
	locations?: {           // locations to search for rc files
		top?: string          // if specified, denotes the "top" directory at which to stop looking
		bottom: string        // the start directory at which to start looking for rc files
	}[]
	loaders?: Loaders       // an instance created with `rc2.loaders()`
	default?: any           // default configuration if none are found
	argv?: string[]
	env?: any
}

Loaders

A loader instance can be created with rc2.loaders(). This instance has the following methods:

declare class Loaders {
	add(ext: string, loader: (f: string) => any): this
	default(exts: string[]): this
	ini(): this
	js(): this
	json(): this
	yaml(): this
}

Example loaders.add(...):

rc2.loaders()
    .add('xml', f => {
        // Async is handled with `co`, so return
        // any yieldable for this function to be async
        return new Promise(...) // for example
    })

For reference, here is a list of valid co yieldables.