pathmirror

1.1.1 • Public • Published

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'
    }
}
 */

Package Sidebar

Install

npm i pathmirror

Weekly Downloads

36

Version

1.1.1

License

MIT

Last publish

Collaborators

  • mlegenhausen