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

@norviah/config

v4.3.0

Published

Manage JSON configuration files with type safety

Downloads

6

Readme

@norviah/config

Simplifies working with JSON files in tandem with TypeScript. config is a package that allows you to import JSON files against a TypeScript interface, validating the structure of the JSON file.

Installation

npm install @norviah/config

Usage

To use config, you must first create an inteface that defines the desired structure for the JSON file, if desired, this interface can be infinitely deep. From this interface, you must then define a Structure instance for the interface. Structure defines an interaface that is essentially a mapping of each key within the desired interface, each key must be set to an object that defines important properties for that key.

config exports the Config class, which contains various useful methods for parsing JSON files. Importis the main entry point for the package, this is the method that you will use to import JSON files:

Config.Import<T>(structure: Structure<T>, options: Options): T;

Defining the Structure for the interface is the essential part of the package, here is where you can map a JSON value into any desired type you wish. As previously said, Structure represents important information about each key, as each key will represent a KeyOptions instance. The most important property is type, which defines the type of the key, which takes one of the following values:

  • a string, or
  • a function

If a function is specified, the function will act as the constructor for the key, the return value of the function will be treated as the final value for the key. If the provided value is invalid, the function should return null to indicate this.

If you specify functions, it can be tedious to provide a function for various primitive types, therefore, you can provide a string instead. If the desired type of the key is a primitive type, config will parse and validate the value accordingly, and return the value as the final value for the key. The following are the supported primitive types:

  • string
  • number
  • boolean
  • null

Example

As an example, let's say we want to load a JSON file for our Discord bot. The config file will hold two values: token and prefix, both of which are strings.

config.json

{
  "token": "[token]",
  "prefix": "!"
}

main.ts

import { load } from '@norviah/config';

interface Config {
  token: string;
  prefix: string;
}

// Note that you can provide the `type` property as the direct value for the 
// key, as a shortcut for `{ type: "string" }`.
const config: Config = load<Config>(
  {
    token: "string", 
    prefix: "string"
  },
  { path: "[path]" },
);

// Once imported, you can use the config as you would any other object.
console.log(config.token);

Of course, this is a rather simple example, but it demonstrates the basic usage of config. For more examples and information, please refer to the documentation here.