UNPKG

local-fake-api

Version:

A simple async local mock API without backend.

130 lines (82 loc) 2.8 kB
# local-fake-api A simple **async local mock API** without backend. **Designed for prototyping or fast iterations** **REST-style responses** **Supports IndexedDB or LocalStorage** **Simulate an async API effortlessly** --- ## Installation ```bash npm install local-fake-api ``` --- ## CRUD API ### Factory #### `createApi<T>(tableName: string): Api<T>` Creates a **table-scoped API instance** that uses `tableName` as: - **IndexedDB:** object store name - **LocalStorage:** key name - **Returns:** CRUD methods for type `T` with REST-style responses. --- ## Methods All methods return a **REST-style response**: ```ts interface ApiResponse<T = unknown> { data?: T; // the result data success: boolean; // true if operation succeeded message?: string; // optional error message } ``` --- ### `list(filter?: Partial<Record<string, unknown>>): Promise<ApiResponse<{ data: T[]; total: number,success: boolean }>>` Fetch all stored items (optionally filtered). - **data:** T[] - **total:** total items count - **success:** `true` if operation succeeds **Example:** ```ts const res = await api.list({ done: true }); if (res.success) { console.log(res.data?.data, res.data?.total); } ``` --- ### `get(id: string, keyName?: keyof T): Promise<ApiResponse<T | null>>` Fetch a single item by `id` (or other key). --- ### `create(item: Omit<T, "id">): Promise<ApiResponse<T>>` Create a new item (auto-generates `id`). --- ### `update(id: string, updates: Partial<Omit<T, "id">>, keyName?: keyof T): Promise<ApiResponse<T | null>>` Update specific fields of an item by `id`. --- ### `delete(id: string, keyName?: keyof T): Promise<ApiResponse<void>>` Delete an item by `id`. --- ### `clearAll(filter?: Partial<Record<string, unknown>>): Promise<ApiResponse<void>>` Clear all items (optionally filter items to keep). --- ## Example ```ts 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.create({ text: "Buy milk", done: false }); console.log("Added todo:", newTodo); console.log("All todos:", await todoApi.list()); const updatedTodo = await todoApi.update(newTodo.data!.id, { done: true }); console.log("Updated todo:", updatedTodo); await todoApi.delete(newTodo.data!.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:", newNo ```