2.0.5 • Published 4 years ago

ts-options-defaults v2.0.5

Weekly downloads
6
License
GPL-3.0
Repository
-
Last release
4 years ago

Table of contents

  1. Getting Started

  2. Usage

  3. Features

Getting Started

npm i ts-options-defaults

Usage

Design pattern

import { defaults } from 'ts-options-defaults';

export interface ISomeOptions {
    logger?: Partial<Console>;
}

export class Something {
    static defaults = {
        logger: console,
    };

    options: ISomeOptions & typeof Something.defaults;
    constructor(options?: ISomeOptions) {
        this.options = defaults(Rat.defaults, options);
    }
}

Behavior

import { defaults } from 'ts-options-defaults';

class TestLogger {
    constructor(public name = `TestLogger`) {}

    log() {
        console.log(`Call from ${this.name}`);
    }
}

const someDefaults = {
    console,
    nested: {
        property: 'default',
        shouldBeDefault: 'default',
        array: ['default1', 'default2'],
    },
};

const someOptions = {
    nested: {
        property: 'overriden',
        array: ['overriden1'],
    },
    array: ['overriden'],
};

const options = defaults(
    someDefaults,
    someOptions,
    {
        console: {
            log: () => {
                console.log(`TEST`);
            },
        },
    },
    {
        console: new TestLogger(),
    },
);

options.console.log(`log`); // "Call from TestLogger"
options.console.debug(`debug`); // "debug"

// options will be:
{
    "nested": {
        "property": "overriden",
        "shouldBeDefault": "default",
        "array": [
            "overriden1"
        ]
    },
    "array": [
        "overriden"
    ]
}

// someDefaults will not be mutated!

Features

Beats alternatives - better alternative to {...defaults, ...options} destructing and lodash _.defaults or _.merge Secure - immune to prototype pollution attack Simple - just 40 lines of clean TypeScript code Strongly typed - result remains strongly typed

2.0.2

4 years ago

2.0.5

4 years ago

2.0.1

4 years ago

0.0.72

4 years ago

0.0.72-1

4 years ago

0.0.42

4 years ago

0.0.43

4 years ago

0.0.71-0

4 years ago

0.0.41

4 years ago

0.0.40

4 years ago

0.0.38

4 years ago

0.0.39

4 years ago

0.0.34-3

4 years ago

0.0.33

4 years ago

0.0.32-1

4 years ago

0.0.32-0

4 years ago

0.0.30

4 years ago

0.0.10

4 years ago

0.0.3-7

4 years ago

0.0.3-6

4 years ago

0.0.3-5

4 years ago

0.0.3-4

4 years ago

0.0.3-3

4 years ago

0.0.3-2

4 years ago

0.0.3-1

4 years ago

0.0.3-0

4 years ago

0.0.2

4 years ago

0.0.1

4 years ago

0.0.0

4 years ago