@motorcycle/local-storage

Save data to local storage

Usage no npm install needed!

<script type="module">
  import motorcycleLocalStorage from 'https://cdn.skypack.dev/@motorcycle/local-storage';
</script>

README

@motorcycle/local-storage

Components and functions for interacting with LocalStorage

Let me have it

yarn add @motorcycle/local-storage
# or
npm install --save @motorcycle/local-storage

Basic usage

import { run } from '@motorcycle/run';
import { makeDomDriver } from '@motorcycle/dom';
import { setItem, LocalStorage } from '@motorcycle/local-storage';
import { map, merge } from 'most';

function Main(sources) {
  const { localStorage } = sources;

  const aItem$ = localStorage.getItem('a') // returns a stream of values associated with `a`

  ... // left as an user exercise

  // a stream of commands to set the values to the given keys `a` and `b`
  const setAItem$ = map(setItem('a'), streamOfAValues);
  const setBItem$ = map(setItem('b'), streamOfBValue);

  return {
    dom, // left as an user exercise
    localStorage$: merge(setAItem$, setBItem$)
  }
}

const domDriver = makeDomDriver(document.querySelector('#app') as HTMLElement);

function Effects(sinks) {
  const { localStorage } = LocalStorage(sinks);
  const dom = domDriver(sinks.dom);

  return { dom, localStorage };
}

run(Main, Effects);

API

LocalStorage(sinks: LocalStorageSinks): LocalStorageSources;

An Effect component for interacting with localStorage.

import { LocalStorage } from '@motorcycle/local-storage';

function Effects(sinks) {
  const { localStorage } = LocalStorage(sinks);

  return { localStorage };
}

run(Main, Effects);

clear(): LocalStorageClearCommand;

Remove all items from LocalStorage

import { clear } from '@motorcycle/local-storage';
import { constant } from 'most';

function Main(sources) {
  ...

  const clear$ = constant(clear(), clearButtonClick$);

  return {
    ...,
    localStorage$: clear$,
  }
}

removeItem(key: string): LocalStorageRemoveItemCommand

Remove a single item by its associated key from LocalStorage

import { removeItem } from '@motorcycle/local-storage';
import { constant } from 'most';

function Main(sources) {
  ...

  const removeItem$ = map(removeItem, itemToRemove$);

  return {
    ...,
    localStorage$: removeItem$,
  }
}

setItem(key: string, value: string): LocalStorageSetItemCommand

Set a single item value that can be looked up by the given key

import { setItem } from '@motorcycle/local-storage';
import { constant } from 'most';

function Main(sources) {
  ...

  const setItem$ = map(([key, value]) => setItem(key, value), keyValue$);

  return {
    ...,
    localStorage$: setItem$,
  }
}

Types

The types used throughout the API section

export interface LocalStorageSinks {
  localStorage$: Stream<LocalStorageCommand>;
}

export interface LocalStorageSources {
  localStorage: LocalStorageSource;
}

export interface LocalStorageSource {
  getItem(key: string): Stream<string | null>;
  length(): Stream<number>;
}

export type LocalStorageCommand =
  LocalStorageClearCommand |
  LocalStorageSetItemCommand |
  LocalStorageRemoveItemCommand;

export type LocalStorageClearCommand =
  {
    method: 'clear';
  };

export type LocalStorageSetItemCommand =
  {
    method: 'setItem';
    key: string;
    value: string;
  };

export type LocalStorageRemoveItemCommand =
  {
    method: 'removeItem';
    key: string;
  };