v1.2adapters/sqlite
Tile.JS
Tile.JS

Database

Configure a instância principal, o adapter, o logger e o cache de collections.

Database

A classe Database é a fachada principal do @tile.js/database.

Ela é responsável por:

  • escolher o backend de persistência
  • centralizar o lifecycle da conexão
  • expor collection() e model()
  • manter cache das collections por nome
  • aplicar a configuração de logger

Uso mais comum

src/database/index.ts
import { Database } from "@tile.js/database";
import { memberSchema, type Member } from "./schema/member.ts";

const connection = new Database({
  dbName: "app",
  storage: "workspace",
  logger: {
    enabled: true,
    colors: true,
  },
});

export const database = Object.assign(connection, {
  member: connection.collection<Member>("member", memberSchema),
});
src/database/index.ts
import { Database } from "@tile.js/database";
import { mongodbAdapter } from "@tile.js/database/adapters/mongodb";
import { MongoClient } from "mongodb";
import { memberSchema, type Member } from "./schema/member.ts";

const client = new MongoClient("mongodb://127.0.0.1:27017");

const connection = new Database({
  storage: mongodbAdapter(client, {
    dbName: "app",
    manageClient: true,
  }),
});

export const database = Object.assign(connection, {
  member: connection.collection<Member>("member", memberSchema),
});

Regra do construtor

Se storage receber um StorageAdapter, não passe dbName nem compression no new Database(...). Essas opções deixam de ser válidas no construtor e devem ser configuradas no adapter.

Configuração

Prop

Type

collection() e model()

As duas APIs são equivalentes:

const userA = connection.collection("user", userSchema);
const userB = connection.model("user", userSchema);

console.log(userA === userB); // true

Você também pode recuperar a collection já registrada:

const user = connection.getCollection("user");
const userAlias = connection.getModel("user");

O cache é feito por nome da collection. Se você registrar o mesmo nome duas vezes, a primeira instância será reutilizada.

Estrutura recomendada

index.ts
member.ts
index.ts

Para a maior parte dos projetos, concentrar a instância em src/database/index.ts e os schemas em src/database/schema/*.ts já deixa o bootstrap claro e previsível.

Responsabilidades da instância

Backend

Decide se a persistência será local, MongoDB, Mongoose ou um adapter próprio.

Collections

Garante que cada nome de collection tenha uma única instância ativa por Database.

Lifecycle

Encapsula connect(), disconnect() e o flush pendente quando o adapter suporta isso.

Logger

Mantém mensagens de debug, info e erro no mesmo ponto de configuração.

Próximos passos

On this page