v1.2adapters/sqlite
Tile.JS
Tile.JS
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

memory-adapter.ts
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.

On this page