ultimate-mcp-server
Version:
The definitive all-in-one Model Context Protocol server for AI-assisted coding across 30+ platforms
65 lines • 2.24 kB
JavaScript
/**
* Base Content Storage Interface
* Provides abstraction for different storage backends
*/
export class BaseContentStorage {
// Utility methods
generateId() {
return Math.random().toString(36).substring(2) + Date.now().toString(36);
}
applyFilter(items, filter) {
return items.filter(item => {
// Status filter
if (filter.status && 'status' in item) {
if (!filter.status.includes(item.status)) {
return false;
}
}
// Tag filter
if (filter.tags && item.tags) {
const hasAllTags = filter.tags.every(tag => item.tags.includes(tag));
if (!hasAllTags)
return false;
}
// Date filters
if (filter.createdAfter && item.createdAt < filter.createdAfter) {
return false;
}
if (filter.updatedAfter && item.updatedAt < filter.updatedAfter) {
return false;
}
// Search filter (simple text search in fields)
if (filter.search && item.fields) {
const searchLower = filter.search.toLowerCase();
const fieldsStr = JSON.stringify(item.fields).toLowerCase();
if (!fieldsStr.includes(searchLower)) {
return false;
}
}
// Field filters
if (filter.fields && item.fields) {
for (const [key, value] of Object.entries(filter.fields)) {
if (item.fields[key] !== value) {
return false;
}
}
}
return true;
});
}
paginate(items, pagination) {
const start = pagination.offset;
const end = start + pagination.limit;
const paginatedItems = items.slice(start, end);
return {
items: paginatedItems,
pagination: {
...pagination,
total: items.length,
hasNext: end < items.length,
hasPrevious: start > 0
}
};
}
}
//# sourceMappingURL=base.js.map