UNPKG

@naturalcycles/datastore-lib

Version:

Opinionated library to work with Google Datastore, implements CommonDB

64 lines (63 loc) 2.04 kB
import { DBQuery } from '@naturalcycles/db-lib'; import { commonKeyValueDBFullSupport } from '@naturalcycles/db-lib/kv'; import { AppError } from '@naturalcycles/js-lib/error/error.util.js'; import { DatastoreDB } from './datastore.db.js'; const excludeFromIndexes = ['v']; export class DatastoreKeyValueDB { cfg; constructor(cfg) { this.cfg = cfg; this.db = new DatastoreDB(cfg); } db; support = { ...commonKeyValueDBFullSupport, increment: false, }; async ping() { await this.db.ping(); } async createTable() { } async getByIds(table, ids) { return (await this.db.getByIds(table, ids)).map(r => [r.id, r.v]); } async deleteByIds(table, ids) { await this.db.deleteByIds(table, ids); } async saveBatch(table, entries) { await this.db.saveBatch(table, entries.map(([id, v]) => ({ id, v })), { excludeFromIndexes, }); } streamIds(table, limit) { const q = DBQuery.create(table) .select(['id']) .limit(limit || 0); return (this.db .streamQuery(q) // .on('error', err => stream.emit('error', err)) .map(r => r.id)); } streamValues(table, limit) { // `select v` doesn't work for some reason const q = DBQuery.create(table).limit(limit || 0); return (this.db .streamQuery(q) // .on('error', err => stream.emit('error', err)) .map(r => r.v)); } streamEntries(table, limit) { const q = DBQuery.create(table).limit(limit || 0); return (this.db .streamQuery(q) // .on('error', err => stream.emit('error', err)) .map(r => [r.id, r.v])); } async count(table) { const q = DBQuery.create(table); return await this.db.runQueryCount(q); } async incrementBatch(_table, _entries) { throw new AppError('DatastoreKeyValueDB.incrementBatch() is not implemented'); } }