UNPKG

local-fake-api

Version:

A simple async local mock API without backend.

156 lines (102 loc) 3.18 kB
# local-fake-api A simple **async local mock API** without backend. **Designed for prototyping and fast iterations** **Simulate an async API effortlessly** **Based on localStorage** --- ## Installation ```bash npm install local-fake-api ``` --- ## CRUD 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) ```ts /** * 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) ```ts /** * Example usage of local-fake-api for prototyping * with two independent namespaces (Todo and Note). */ import { createApi } from "local-fake-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(); ```