UNPKG

local-fake-api

Version:

A simple async local mock API without backend.

103 lines (102 loc) 3.59 kB
import { delay, getUuid, clearStoredItems, getStoredItems, setStoredItems } from "../utils"; export function createLocalStorageApi(nameSpace, _primaryKey) { // Helper to filter items by key-value pairs function filterItems(items, filter) { if (!filter) return items; return items.filter((item) => Object.entries(filter).every(([k, v]) => item[k] === v)); } // 列表(ProTable 友好) async function list(filter) { try { await delay(100); const items = filterItems(getStoredItems(nameSpace), filter); return { data: items, total: items.length, success: true }; } catch (e) { return { data: [], total: 0, success: false, message: e.message }; } } async function get(keyValue, keyName) { var _a; try { const items = getStoredItems(nameSpace); const searchKey = (keyName || "id"); const item = (_a = items.find((row) => String(row[searchKey]) === keyValue)) !== null && _a !== void 0 ? _a : null; return { data: item, success: true }; } catch (e) { return { success: false, message: e.message }; } } async function create(item) { try { const newItem = { ...item, id: getUuid() }; const existingItems = getStoredItems(nameSpace); await delay(100); setStoredItems(nameSpace, [...existingItems, newItem]); return { data: newItem, success: true }; } catch (e) { return { success: false, message: e.message }; } } async function _delete(keyValue, keyName) { try { const allItems = getStoredItems(nameSpace); const searchKey = (keyName || "id"); const updatedItems = allItems.filter((item) => String(item[searchKey]) !== keyValue); await delay(100); setStoredItems(nameSpace, updatedItems); return { success: true }; } catch (e) { return { success: false, message: e.message }; } } async function update(keyValue, updates, keyName) { try { const allItems = getStoredItems(nameSpace); const searchKey = (keyName || "id"); let updatedItem = null; for (let i = 0; i < allItems.length; i++) { if (String(allItems[i][searchKey]) === keyValue) { allItems[i] = { ...allItems[i], ...updates }; updatedItem = allItems[i]; break; } } await delay(100); setStoredItems(nameSpace, allItems); return { data: updatedItem, success: true }; } catch (e) { return { success: false, message: e.message }; } } async function deleteAll(filter) { try { await delay(100); if (!filter) { clearStoredItems(nameSpace); } else { const items = getStoredItems(nameSpace); const filtered = items.filter((item) => !Object.entries(filter).every(([k, v]) => item[k] === v)); setStoredItems(nameSpace, filtered); } return { success: true }; } catch (e) { return { success: false, message: e.message }; } } return { list, get, create, delete: _delete, update, deleteAll, }; }