pathmirror

Advanced key mirror function that can mirror nested object keys.

Usage no npm install needed!

<script type="module">
  import pathmirror from 'https://cdn.skypack.dev/pathmirror';
</script>

README

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