1.1.1 • Published 10 years ago

pathmirror v1.1.1

Weekly downloads
94
License
MIT
Repository
-
Last release
10 years ago

pathmirror

Build Status

Advanced key mirror function that can mirror nested object keys. Intended for the generation of flux action type names.

Installation

npm install pathmirror --save

Usage

import pathMirror from 'pathmirror';

const mirrored = pathMirror({
    foo: {
        bar: {
            baz: null
        }
    }
});

console.log(foo.bar.baz); // foo_bar_baz

You can change the default delimiter via the second parameter.

import pathMirror from 'pathmirror';

const mirrored = pathMirror({
    foo: {
        bar: {
            baz: null
        }
    }
}, '.');

console.log(mirrored.foo.bar.baz); // foo.bar.baz

Advanced Options

There are several hooks to manipulate the produced output.

For example can you add a prefix or suffix to your created paths, change the separator or transform the path before creating the mirrored object.

import pathMirror from 'pathmirror';

const mirrored = pathMirror({
    foo: {
        bar: {
            baz: null
        }
    }
}, {
    separator: '_',
    prefix: 'prefix/',
    suffix: '/suffix',
    transform: (key, value, path) => key.toUpperCase()
});

console.log(mirrored.foo.bar.baz); // prefix/FOO_BAR_BAZ/suffix

For more advanced scenarios each string option can be a function which is called with the final path as string array.

import pathMirror from 'pathmirror';

const mirrored = pathMirror({
    foo: {
        bar: null
    },
    baz: {
        foobar: null
    }
}, {
    separator: (path) => path[0] === 'foo' ? ':' : '.',
    prefix: (path) => path[0] === 'foo' ? '1/' : '2/',
    suffix: (path) => path[1] === 'foobar' ? '/1' : '/2',
});

console.log(mirrored.foo.bar); // 1/foo:bar/2
console.log(mirrored.baz.foobar); // 2/baz.foobar/1

Use Case

This module is intended for generating hierachical action names when working with flux:

import pathMirror from 'pathmirror';

const actions = pathMirror({
    APP: {
        INIT: null
    },
    POSTS: {
        REQUEST: null,
        FETCHED: null,
        ERROR: null
    }
});

console.log(actions);
/*
{
    APP: {
        INIT: 'APP_INIT'
    },
    POSTS: {
        REQUEST: 'POSTS_REQUEST',
        FETECHED: 'POSTS_FETECHED',
        ERROR: 'POSTS_ERROR'
    }
}
 */