npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@typhonjs-svelte/simple-web-storage

v0.5.0

Published

Provides Svelte stores for persisting data to the Web Storage API (localStorage / sessionStorage).

Downloads

25

Readme

@typhonjs-svelte/simple-web-storage

NPM Code Style License Build Status Coverage API Docs Discord Twitch

Provides a set of Svelte store helper functions to connect Svelte w/ the browser web Storage API. This package is an evolution of svelte-persistent-stores for Svelte v4+. The primary reason to choose this package over alternatives is that it accomplishes the task in ~100 source lines of code w/ no dependencies besides Svelte.

API documentation

Usage

Persist to localStorage

import { writable, readable, derived } from '@typhonjs-svelte/simple-web-storage/local';

// The first argument is the storage key followed by any default value.
const count = writable('count', 0);

count.set(1);

Persist to sessionStorage

import { writable, readable, derived } from '@typhonjs-svelte/simple-web-storage/session';

// The first argument is the storage key followed by any default value.
const count = writable('count', 0);

count.set(1);

The named exports from the main package export provides localStores / sessionStores respectively containing derived / readable / writable properties.

import { localStores, sessionStores } from '@typhonjs-svelte/simple-web-storage';

// The first argument is the storage key followed by any default value.
const localCount = localStores.writable('count', 0);
const sessionCount = sessionStores.writable('count', 0);

localCount.set(1);
sessionCount.set(1);

API

The stores provided have the same signature as the Svelte store helper functions except the first argument is the string key used by localStorage and sessionStorage to store and retrieve the value. The Storage interface specification only allows string values therefore this library by default serializes stored values as JSON.

Advanced API / Customization

The storeGenerator function that wraps and creates Storage connected stores is available allowing further external customization. You may provide a custom serialization strategy that is different from JSON along with providing any Storage API compatible interface besides browser localStorage / sessionStorage. The serialize / deserialize functions must match the partial signatures of JSON.parse / JSON.stringify; IE the first value argument and return types.

The following is a Typescript example for generating storage API compatible stores w/ a customized serialization strategy:

import {
   storeGenerator,
   StorageDerived,
   StorageReadable,
   StorageWritable } from '@typhonjs-svelte/simple-web-storage/generator';

// The `storage` option for `storeGenerator` must be a Storage API compatible instance.

// Provide a JSON parse / stringify signature compatible functions to modify serialization strategy. 
// const deserialize = ... // (value: string, ...rest: any[]) => any 
// const serialize = ... // (value: any, ...rest: any[]) => string

export const localStores = storeGenerator({ storage: globalThis?.localStorage, serialize, deserialize });

export const derived: StorageDerived = localStores.derived;
export const readable: StorageReadable = localStores.readable;
export const writable: StorageWritable = localStores.writable;

Beyond the derived, readable, and writable store helper functions created storeGenerator also adds the storage, serialize, and deserialize instance / functions to the returned object.

In the package tests the custom serialization strategy tested is compressed MessagePack to base64 data.

Other Svelte browser storage packages

For more comprehensive solutions that are a bit more heavyweight check out: