Giter Site home page Giter Site logo

simple-immutable-storage's Introduction

TBD

Usage

create

import createSIS from 'simple-immutable-storage';

const store = createSIS({
  user: {
    name: 'Yevhenii',
    skills: ['HTML', 'JS'],
    family: {
      mother: 'mom',
      father: 'dad'
    }
  }
});

console.log(store) /*
{
  user: {
    name: 'Yevhenii',
    skills: ['HTML', 'JS'],
    family: {
      mother: 'mom',
      father: 'dad'
    }
  }
}
*/

set

import createSIS from 'simple-immutable-storage';

const store = createSIS(); // {}

const nextStore = store.set('key', { value: 3 }); // { key: { value: 3 } }

store === nextStore // false

const store2 = createSIS();
const nextStore2 = store2
  .set('key', 1) // { ley: 1 }
  .set('key2', 2) // { ley: 1, key2: 2 }
  .set('key3', 3); // { ley: 1, key2: 2, key3: 3 }

setIn

import createSIS from 'simple-immutable-storage';

const store = createSIS(); // {}

/*
String or array could be used as a path.
All numbers in path will be interpreted as a array indexes.
*/

const pathAsAString = 'some.like.string';
const nextStore = store.setIn(pathAsAString, 1); // { some: { like: { string: 1 } } }

const pathAsArray = ['some', 'like', 'string'];
const nextStore2 = store.setIn(pathAsArray, 1); // { some: { like: { string: 1 } } }

const pathWithNumbers = ['some', 1, 'string'];
const nextStore3 = store.setIn(pathWithNumbers, 1); // { some: [undefined, { string: 1 }] }

const pathWithNumbers2 = 'some.0.string';
const nextStore3 = store.setIn(pathWithNumbers2, 1); // { some: [{ string: 1 }] }

get / getInOr

import createSIS from 'simple-immutable-storage';

const store = createSIS(); // {}

const nextStore = store
  .setIn('user.name', 'Yevhenii')
  .setIn('user.age', 26)
  .setIn('user.skills.0', 'HTML'); // { user: { name: 'Yevhenii', age: 26, skills: ['HTML'] } }

const user = nextStore.get('user'); // { name: 'Yevhenii', age: 26, skills: ['HTML'] }

/*
String or array could be used as a path.
All numbers in path will be interpreted as a array indexes.
*/

// you can use either string or array as a path
const name = nextStore.getInOr('user.name'); // Yevhenii
const name2 = nextStore.getInOr(['user', 'name']); // Yevhenii

// return either undefined or default value 
const surname = nextStore.getInOr(['user', 'surname']); // undefined
const surnameWithDefault = nextStore.getInOr(['user', 'surname'], 'Hurynets'); // Hurynets

// getting value from array by index
const firstSkill = nextStore.getInOr('user.skills.0'); // HTML

merge

import createSIS from 'simple-immutable-storage';

const store = createSIS({ surname: 'Hurynets' }); // { surname: 'Hurynets' }
const data = {
    user: {
         name: 'Yevhenii',
         skills: ['HTML', 'JS']
    }
}

const nextStore = store.merge(data)

console.log(nextStore) /*
{
  surname: 'Hurynets',
  user: {
    name: 'Yevhenii',
    skills: ['HTML', 'JS']
  }
}
*/


const store2 = createSIS({
  user: {
    name: 'Yevhenii',
    skills: ['HTML', 'JS'],
    family: {
      mother: 'mom',
      father: 'dad'
    }
  }
});

// recursively merge same properties
const nextStore2 = merge(store2, {
  user: {
    name: 'Yevhenii Hurynets',
    skills: ['CSS'],
    family: {
      brother: 'bro'
    }
  }
});

console.log(nextStore2) /*
{
  user: {
    name: 'Yevhenii Hurynets',
    skills: ['HTML', 'JS', 'CSS'],
    family: {
      mother: 'mom',
      father: 'dad',
      brother: 'bro'
    }
  }
}
*/

simple-immutable-storage's People

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.