local-fake-api
v0.0.16
Published
A simple async local mock API without backend.
Maintainers
Readme
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
npm install local-fake-apiCRUD 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
Twith REST-style responses.
Methods
All methods return a REST-style response:
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:
trueif operation succeeds
Example:
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
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