@storybooker/gcp
Version:
StoryBooker Adapter for interacting with GCP services.
1 lines • 5.86 kB
Source Map (JSON)
{"version":3,"file":"big-table.cjs","names":["COLUMN_FAMILY: ColumnFamily","SERVICE_NAME","#instance","list: Document[]","document: Document"],"sources":["../src/big-table.ts"],"sourcesContent":["import type { Bigtable, Instance } from \"@google-cloud/bigtable\";\nimport { SERVICE_NAME } from \"@storybooker/core/constants\";\nimport type {\n DatabaseDocumentListOptions,\n DatabaseService,\n DatabaseServiceOptions,\n StoryBookerDatabaseDocument,\n} from \"@storybooker/core/types\";\n\ntype ColumnFamily = \"cf1\";\nconst COLUMN_FAMILY: ColumnFamily = \"cf1\";\n\nexport class GcpBigtableDatabaseService implements DatabaseService {\n #instance: Instance;\n\n constructor(client: Bigtable, instanceName: string = SERVICE_NAME) {\n this.#instance = client.instance(instanceName);\n }\n\n init: DatabaseService[\"init\"] = async (_options) => {\n // Bigtable instances are typically created outside of app code (via console/IaC)\n // Optionally, check if instance exists\n const [exists] = await this.#instance.exists();\n if (!exists) {\n throw new Error(\n `Bigtable instance '${this.#instance.id}' does not exist.`,\n );\n }\n };\n\n listCollections: DatabaseService[\"listCollections\"] = async (_options) => {\n const [tables] = await this.#instance.getTables();\n return tables.map((table) => table.id);\n };\n\n createCollection: DatabaseService[\"createCollection\"] = async (\n collectionId,\n _options,\n ) => {\n await this.#instance.createTable(collectionId, {\n families: [COLUMN_FAMILY],\n });\n };\n\n hasCollection: DatabaseService[\"hasCollection\"] = async (\n collectionId,\n _options,\n ) => {\n const table = this.#instance.table(collectionId);\n const [exists] = await table.exists();\n return exists;\n };\n\n deleteCollection: DatabaseService[\"deleteCollection\"] = async (\n collectionId,\n _options,\n ) => {\n const table = this.#instance.table(collectionId);\n await table.delete();\n };\n\n listDocuments: DatabaseService[\"listDocuments\"] = async <\n Document extends StoryBookerDatabaseDocument,\n >(\n collectionId: string,\n _listOptions: DatabaseDocumentListOptions<Document>,\n _options: DatabaseServiceOptions,\n ) => {\n const table = this.#instance.table(collectionId);\n const [rows] = await table.getRows();\n const list: Document[] = [];\n for (const row of rows) {\n const data = (row.data as Record<ColumnFamily, Document>)[COLUMN_FAMILY];\n const document: Document = { ...data, id: row.id };\n list.push(document);\n }\n\n return list;\n };\n\n getDocument: DatabaseService[\"getDocument\"] = async <\n Document extends StoryBookerDatabaseDocument,\n >(\n collectionId: string,\n documentId: string,\n _options: DatabaseServiceOptions,\n ) => {\n const table = this.#instance.table(collectionId);\n const row = table.row(documentId);\n const [exists] = await row.exists();\n if (!exists) {\n throw new Error(`Document '${documentId}' not found.`);\n }\n\n const [rowData] = await row.get<Document>([COLUMN_FAMILY]);\n\n return { ...rowData, id: documentId };\n };\n\n createDocument: DatabaseService[\"createDocument\"] = async (\n collectionId,\n documentData,\n _options,\n ) => {\n const table = this.#instance.table(collectionId);\n const row = table.row(documentData.id);\n await row.create({ entry: { [COLUMN_FAMILY]: documentData } });\n };\n\n hasDocument: DatabaseService[\"hasDocument\"] = async (\n collectionId,\n documentId,\n _options,\n ) => {\n const table = this.#instance.table(collectionId);\n const row = table.row(documentId);\n const [exists] = await row.exists();\n return exists;\n };\n\n deleteDocument: DatabaseService[\"deleteDocument\"] = async (\n collectionId,\n documentId,\n _options,\n ) => {\n const table = this.#instance.table(collectionId);\n const row = table.row(documentId);\n await row.delete();\n };\n\n updateDocument: DatabaseService[\"updateDocument\"] = async (\n collectionId,\n documentId,\n documentData,\n ) => {\n const table = this.#instance.table(collectionId);\n const row = table.row(documentId);\n await row.save({ [COLUMN_FAMILY]: documentData });\n };\n}\n"],"mappings":";;;;;AAUA,MAAMA,gBAA8B;AAEpC,IAAa,6BAAb,MAAmE;CACjE;CAEA,YAAY,QAAkB,eAAuBC,2CAAc;cAInC,OAAO,aAAa;GAGlD,MAAM,CAAC,UAAU,MAAM,MAAKC,SAAU,QAAQ;AAC9C,OAAI,CAAC,OACH,OAAM,IAAI,MACR,sBAAsB,MAAKA,SAAU,GAAG,mBACzC;;yBAIiD,OAAO,aAAa;GACxE,MAAM,CAAC,UAAU,MAAM,MAAKA,SAAU,WAAW;AACjD,UAAO,OAAO,KAAK,UAAU,MAAM,GAAG;;0BAGgB,OACtD,cACA,aACG;AACH,SAAM,MAAKA,SAAU,YAAY,cAAc,EAC7C,UAAU,CAAC,cAAc,EAC1B,CAAC;;uBAG8C,OAChD,cACA,aACG;GAEH,MAAM,CAAC,UAAU,MADH,MAAKA,SAAU,MAAM,aAAa,CACnB,QAAQ;AACrC,UAAO;;0BAG+C,OACtD,cACA,aACG;AAEH,SADc,MAAKA,SAAU,MAAM,aAAa,CACpC,QAAQ;;uBAG4B,OAGhD,cACA,cACA,aACG;GAEH,MAAM,CAAC,QAAQ,MADD,MAAKA,SAAU,MAAM,aAAa,CACrB,SAAS;GACpC,MAAMC,OAAmB,EAAE;AAC3B,QAAK,MAAM,OAAO,MAAM;IAEtB,MAAMC,WAAqB;KAAE,GADf,IAAI,KAAwC;KACpB,IAAI,IAAI;KAAI;AAClD,SAAK,KAAK,SAAS;;AAGrB,UAAO;;qBAGqC,OAG5C,cACA,YACA,aACG;GAEH,MAAM,MADQ,MAAKF,SAAU,MAAM,aAAa,CAC9B,IAAI,WAAW;GACjC,MAAM,CAAC,UAAU,MAAM,IAAI,QAAQ;AACnC,OAAI,CAAC,OACH,OAAM,IAAI,MAAM,aAAa,WAAW,cAAc;GAGxD,MAAM,CAAC,WAAW,MAAM,IAAI,IAAc,CAAC,cAAc,CAAC;AAE1D,UAAO;IAAE,GAAG;IAAS,IAAI;IAAY;;wBAGa,OAClD,cACA,cACA,aACG;AAGH,SAFc,MAAKA,SAAU,MAAM,aAAa,CAC9B,IAAI,aAAa,GAAG,CAC5B,OAAO,EAAE,OAAO,GAAG,gBAAgB,cAAc,EAAE,CAAC;;qBAGlB,OAC5C,cACA,YACA,aACG;GAGH,MAAM,CAAC,UAAU,MAFH,MAAKA,SAAU,MAAM,aAAa,CAC9B,IAAI,WAAW,CACN,QAAQ;AACnC,UAAO;;wBAG2C,OAClD,cACA,YACA,aACG;AAGH,SAFc,MAAKA,SAAU,MAAM,aAAa,CAC9B,IAAI,WAAW,CACvB,QAAQ;;wBAGgC,OAClD,cACA,YACA,iBACG;AAGH,SAFc,MAAKA,SAAU,MAAM,aAAa,CAC9B,IAAI,WAAW,CACvB,KAAK,GAAG,gBAAgB,cAAc,CAAC;;AAzHjD,QAAKA,WAAY,OAAO,SAAS,aAAa"}