Table of Contents

<--   Back

SSKV - Super Simple Key Value


Super simple key value with type safety and implement your own load and save function.

Why Type safety

Because it’s cool.

Why Implement Load and Save Manually

Cross-platform.

Example

In-Memory

No ability to load and save.

type Data = {
	foo: number;
	bar: string;
	lok: boolean;
};
 
const defaultData: Data = {
	foo: 1,
	bar: "test",
	lok: true,
};
 
const dummy = new SSKV<Data>(defaultData);
 
dummy.get("foo");
dummy.get("bar");
dummy.set("bar", "change");
dummy.get("bar");

Node.js

Persistence with JSON file.

type Data = {
	foo: number;
	bar: string;
	lok: boolean;
};
 
const defaultData: Data = {
	foo: 1,
	bar: "test",
	lok: true,
};
 
const dummy = new SSKV<Data>(defaultData, {
	save: (currentData, defaultData) => {
		const data = Object.assign({}, defaultData, currentData);
		fs.writeFileSync("data.json", JSON.stringify(data));
	},
	load: () => {
		return JSON.parse(fs.readFileSync("data.json", "utf8")) as Data;
	},
});
 
// Both of these is equal operation for load and get
dummy.load().get("foo");
dummy.get("foo", true);
 
// Both of these is equal operation for set and save
dummy.set("bar", "change").save();
dummy.set("bar", "change", true);

Deno

Persistence with JSON file.

type Data = {
	foo: number;
	bar: string;
	lok: boolean;
};
 
const defaultData: Data = {
	foo: 1,
	bar: "test",
	lok: true,
};
 
const dummy = new SSKV<Data>(defaultData, {
	save: (currentData, defaultData) => {
		const data = Object.assign({}, defaultData, currentData);
		Deno.writeTextFileSync("data.json", JSON.stringify(data));
	},
	load: () => {
		const data = Deno.readTextFileSync("data.json");
		return JSON.parse(data) as Data;
	},
});
 
// Both of these is equal operation for load and get
dummy.load().get("foo");
dummy.get("foo", true);
 
// Both of these is equal operation for set and save
dummy.set("bar", "change").save();
dummy.set("bar", "change", true);

Browser localStorage

Persistence with JSON in localStorage.

type Data = {
	foo: number;
	bar: string;
	lok: boolean;
};
 
const defaultData: Data = {
	foo: 1,
	bar: "test",
	lok: true,
};
 
const dummy = new SSKV<Data>(defaultData, {
	save: (currentData, defaultData) => {
		const data = Object.assign({}, defaultData, currentData);
		localStorage.setItem("data", JSON.stringify(data));
	},
	load: () => {
		return JSON.parse(localStorage.getItem("data") ?? "{}") as Data;
	},
});
 
// Both of these is equal operation for load and get
dummy.load().get("foo");
dummy.get("foo", true);
 
// Both of these is equal operation for set and save
dummy.set("bar", "change").save();
dummy.set("bar", "change", true);