@useorbis/db-sdk
Version:
Orbis' Typescript SDK for building open-data experiences.
48 lines (47 loc) • 1.64 kB
JavaScript
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];
}
}