local-fake-api
Version:
A simple async local mock API without backend.
156 lines (102 loc) • 3.18 kB
Markdown
# 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();
```