Adapters
Adapter customizado
Implemente o contrato StorageAdapter para persistir documentos em outro backend.
Adapter customizado
Se o backend de persistência da sua aplicação não é BSON local, MongoDB ou Mongoose, você pode implementar o contrato StorageAdapter.
Contrato principal
Prop
Type
Opções recebidas em prepareCollection
Prop
Type
Exemplo mínimo: adapter em memória
import type { StorageAdapter } from "@tile.js/database";
export function memoryAdapter(): StorageAdapter {
const collections = new Map<string, Map<string, any>>();
const getCollection = (name: string) => {
let docs = collections.get(name);
if (!docs) {
docs = new Map();
collections.set(name, docs);
}
return docs;
};
return {
async prepareCollection(collection) {
getCollection(collection);
},
async write(collection, id, data) {
getCollection(collection).set(String(id), structuredClone(data));
},
async read(collection, id) {
return structuredClone(getCollection(collection).get(String(id)) ?? null);
},
async delete(collection, id) {
getCollection(collection).delete(String(id));
},
async list(collection) {
return Array.from(getCollection(collection).values()).map((doc) =>
structuredClone(doc),
);
},
};
}Uso:
import { Database } from "@tile.js/database";
import { memoryAdapter } from "./memory-adapter";
const database = new Database({
storage: memoryAdapter(),
});O melhor extra opcional
Se o seu adapter conseguir implementar readByIndexedField(), o método findOne() pode evitar varreduras completas quando o filtro usa um campo único.
Configuração no lugar certo
Quando você passa um adapter customizado para new Database({ storage: ... }), opções como dbName e compression deixam de ser válidas no construtor da Database e precisam viver no próprio adapter.