0.5.0 • Published 1 year ago

config-vir v0.5.0

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

config-vir

Small package for creating typed json files in backend servers.

Install

npm i config-vir

Usage

Defining a config file

Use defineConfigFile to define a config file:

import {defineConfigFile} from 'config-vir';

export const myConfigFile = defineConfigFile({
    /** Use `as const` here to require one of these exact keys. Leave it out to allow any string. */
    allowedKeys: [
        'a',
        'b',
        'c',
    ] as const,
    /**
     * This callback is called whenever `getWithUpdate` is called and the given propertyKey has no
     * defined value yet.
     *
     * The return value of this callback determines the value type of this config file.
     */
    createValueIfNoneCallback: () => {
        return Math.random();
    },
    /**
     * The given `filePath` is not restricted to `.json` files but the data will be saved in JSON
     * format regardless of the file extension.
     */
    filePath: './path/to/file.json',

    /** Extra, optional, options listed below. See TS types for how to use. */
    // logCallbacks,
    // logRelativePath,
    // transformValueCallback,
    // fileInitCallback,
});

Using a config file

The created config file (from above) then exposes the pre-defined keys and several methods:

import {myConfigFile} from './define-config-file.example';

// wrap the operations in an async function so we can use `await`
async function doStuff() {
    /** Use .keys to access the predefined allowed keys. */
    myConfigFile.keys.a;
    myConfigFile.keys.b;
    myConfigFile.keys.c;

    /** Delete the value saved at the given property in the config file. */
    await myConfigFile.deleteProperty(myConfigFile.keys.a);

    /**
     * Get the value stored in the config file under property `myConfigFile.keys.a` OR create a new
     * value using the pre-defined `createValueIfNoneCallback`. Because of this, `getWithUpdate`
     * always returns the given config value type, it's never possibly undefined.
     *
     * This method also applies `transformValueCallback` if it has been defined.
     *
     * This will also create the file if it does not exist.
     */
    await myConfigFile.getWithUpdate(myConfigFile.keys.a);

    /**
     * Read the current value in the config file under property `myConfigFile.keys.a` without any
     * other operations. This will return undefined if the property has no value in the config file
     * or if the config file does not exist on the file system.
     */
    await myConfigFile.readCurrentValue(myConfigFile.keys.a);

    /** Save a new value (`42`) to the config file under property `myConfigFile.keys.a`. */
    await myConfigFile.updateValue(myConfigFile.keys.a, 42);
}

doStuff();
0.5.0

1 year ago

0.4.0

1 year ago

0.3.0

1 year ago

0.2.0

1 year ago

0.1.0

1 year ago

0.0.2

1 year ago

0.0.1

1 year ago

0.0.0

1 year ago