UNPKG

@useorbis/db-sdk

Version:

Orbis' Typescript SDK for building open-data experiences.

48 lines (47 loc) 1.64 kB
import { SelectStatement } from "./statements/select.js"; import { BulkInsertStatement, InsertStatement } from "./statements/insert.js"; import * as Operators from "./statements/operators.js"; import { UpdateByIdStatement } from "./statements/update.js"; import * as Ajv from "ajv/dist/2020.js"; import addAjvFormats from "ajv-formats"; const ajv = new Ajv.Ajv2020({ strict: true, allErrors: true, allowMatchingProperties: false, ownProperties: false, unevaluated: false, }); addAjvFormats.default(ajv); export { SelectStatement, InsertStatement, BulkInsertStatement, UpdateByIdStatement, Operators, }; export class QueryBuilder { #orbis; #models; select; insert; insertBulk; update; constructor(orbis) { this.#orbis = orbis; this.#models = {}; this.select = (...columns) => { const statement = new SelectStatement(this.#orbis); if (columns) statement.columns(...columns); return statement; }; this.insert = (model) => new InsertStatement(this.#orbis, model); this.insertBulk = (model) => new BulkInsertStatement(this.#orbis, model); this.update = (documentId) => new UpdateByIdStatement(this.#orbis, documentId); } async fetchModel(model) { if (this.#models[model]) { return this.#models[model]; } const { content } = await this.#orbis.ceramic.client.loadStream(model); this.#models[model] = { model: content, validate: ajv.compile(content.schema), }; return this.#models[model]; } }