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

expressive-js-config

v1.0.1

Published

A config syntax based on JS that allows expressions to be defined inline

Downloads

16

Readme

expressive-js-config

Expressive JS config is a configuration format and parser that allows config files to build up with a syntax extrememly similar to javascript, allowing inline comments and expressions (Which update as other values change) to be defined in the config.

Getting Started

npm install expressive-js-config

const parse = require('expressive-js-config')

const obj = parse('foo: "bar", hello: "world"', {})

obj in this case will be an object with 2 properties foo and hello. If the parser is unable to parse the content, it will attempt to wrap the content in { and } to parse an object. If this also fails it will attempt [ and ] to attempt as an array.

Expressions

Expressions are attached to the resultant objects as accessors. If they are surrounded by an outer static() call, they will only be exeucted once, and the same value / Error returned on every subsequent access.

Setters

When set, expression values become constant and are no longer affected by changes to dependent properties

reset()

The reset function is attached to the property set accessor will remove any previous set override, allowing the expression to act as though it had never been overridden.

Valid code blocks

The following code blocks are permitted for use in expressions:

  • ConditionalExpression
  • ObjectExpression
  • BinaryExpression
  • MemberExpression
  • UnaryExpression
  • ArrayExpression
  • TemplateLiteral
  • TemplateElement
  • CallExpression
  • ThisExpression
  • NewExpression
  • Identifier
  • Property
  • Literal

Any other encountered code blocks will cause an exception

Options

The following options are available

id

If an id property with a string value is passed as an option, any parsed object with a property named for the supplied value, that object will be registered with the contextual lookup allowing that object to be referenced in expressions with it's given name.

errorContext

The error context property will be injected into any error messages generated by the expression or parsing.

context

context may either be an object in which case the properties on that object will be available as identifiers to expressions. Or context may be a function in which case it will be called to lookup any identifiers.

context.register(id, obj)

If context is a function, an optional register function may be attached to register objects which have the relevant id property into the context for use with expressions