local-fake-api
Version:
A simple async local mock API without backend.
103 lines (102 loc) • 3.59 kB
JavaScript
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,
};
}