local-mock-api
v0.0.1
Published
A simple async local mock API without backend.
Maintainers
Readme
local-mock-api
A simple async local mock API without backend.
✅ Designed for prototyping and fast iterations
✅ Simulate an async API effortlessly
✅ Based on localStorage
Installation
npm install local-mock-apiCRUD API
Factory
createApi<T>(namespace: string): Api<T>
Creates a scoped API instance using namespace as the localStorage key.
- Returns: CRUD methods for type
T.
Methods
list(): Promise<T[]>
Fetch all stored items.
get(id: string): Promise<T | null>
Fetch a single item by id.
add(item: Omit<T, "id">): Promise<T>
Add a new item (auto-generates id).
delete(id: string): Promise<void>
Delete an item by id.
update(id: string, updates: Partial<Omit<T, "id">>): Promise<T | null>
Update specific fields of an item by id.
clearAll(): Promise<void>
Clear all data for the namespace.
Example (Single namespace)
/**
* Prototyping with one namespace (Note).
*/
interface Note {
id: string;
content: string;
}
const noteApi = createApi<Note>("notes");
async function test() {
const newNote = await noteApi.add({ content: "Learn ChatGPT tips" });
console.log("Added:", newNote);
const notes = await noteApi.list();
console.log("All Notes:", notes);
const fetched = await noteApi.get(newNote.id);
console.log("Fetched:", fetched);
const updated = await noteApi.update(newNote.id, {
content: "Updated content",
});
console.log("Updated:", updated);
await noteApi.delete(newNote.id);
console.log("Deleted:", newNote.id);
await noteApi.clearAll();
console.log("Cleared all notes");
}
test();Example (Multiple namespaces)
/**
* Example usage of local-mock-api for prototyping
* with two independent namespaces (Todo and Note).
*/
import { createApi } from "local-mock-api";
type Todo = { id: string; text: string; done: boolean };
type Note = { id: string; title: string; content: string };
const todoApi = createApi<Todo>("todos");
const noteApi = createApi<Note>("notes");
async function run() {
console.log("\n=== TODOS ===");
await todoApi.clearAll();
const newTodo = await todoApi.add({ text: "Buy milk", done: false });
console.log("Added todo:", newTodo);
console.log("All todos:", await todoApi.list());
const updatedTodo = await todoApi.update(newTodo.id, { done: true });
console.log("Updated todo:", updatedTodo);
await todoApi.delete(newTodo.id);
console.log("Todo deleted. Remaining todos:", await todoApi.list());
console.log("\n=== NOTES ===");
await noteApi.clearAll();
const newNote = await noteApi.add({
title: "Meeting Notes",
content: "Discuss project roadmap.",
});
console.log("Added note:", newNote);
console.log("All notes:", await noteApi.list());
const updatedNote = await noteApi.update(newNote.id, {
content: "Updated project roadmap details.",
});
console.log("Updated note:", updatedNote);
await noteApi.delete(newNote.id);
console.log("Note deleted. Remaining notes:", await noteApi.list());
console.log("\n✅ All done.");
}
run();