@storybooker/azure
Version:
StoryBooker Adapter for interacting with Azure services.
56 lines (54 loc) • 2.53 kB
JavaScript
import { SERVICE_NAME } from "@storybooker/core/constants";
//#region src/cosmos-db.ts
var AzureCosmosDatabaseService = class {
#db;
constructor(client, dbName = SERVICE_NAME) {
this.init = async (options) => {
await this.#db.client.databases.createIfNotExists({ id: this.#db.id }, { abortSignal: options.abortSignal });
};
this.listCollections = async (options) => {
return (await this.#db.containers.readAll({ abortSignal: options.abortSignal }).fetchAll()).resources.map((resource) => resource.id);
};
this.createCollection = async (collectionId, options) => {
await this.#db.containers.create({ id: collectionId }, { abortSignal: options.abortSignal });
};
this.hasCollection = async (collectionId, options) => {
try {
return !!(await this.#db.container(collectionId).read({ abortSignal: options.abortSignal })).resource;
} catch {
return false;
}
};
this.deleteCollection = async (collectionId, options) => {
await this.#db.container(collectionId).delete({ abortSignal: options.abortSignal });
};
this.listDocuments = async (collectionId, _listOptions, options) => {
return (await this.#db.container(collectionId).items.readAll({ abortSignal: options.abortSignal }).fetchAll()).resources;
};
this.getDocument = async (collectionId, documentId, options) => {
const document = (await this.#db.container(collectionId).item(documentId).read({ abortSignal: options.abortSignal })).resource;
document.id = documentId;
return document;
};
this.createDocument = async (collectionId, documentData, options) => {
await this.#db.container(collectionId).items.create(documentData, { abortSignal: options.abortSignal });
};
this.hasDocument = async (collectionId, documentId, options) => {
return !!(await this.#db.container(collectionId).item(documentId).read({ abortSignal: options.abortSignal })).resource;
};
this.deleteDocument = async (collectionId, documentId, options) => {
await this.#db.container(collectionId).item(documentId).delete({ abortSignal: options.abortSignal });
};
this.updateDocument = async (collectionId, documentId, documentData, options) => {
await this.#db.container(collectionId).item(documentId).patch({ operations: Object.entries(documentData).map(([key, value]) => ({
op: "replace",
path: `/${key}`,
value
})) }, { abortSignal: options.abortSignal });
};
this.#db = client.database(dbName);
}
};
//#endregion
export { AzureCosmosDatabaseService };
//# sourceMappingURL=cosmos-db.js.map