@loopback/repository
Version:
Define and implement a common set of interfaces for interacting with databases
76 lines • 2.87 kB
JavaScript
"use strict";
// Copyright IBM Corp. and LoopBack contributors 2018,2020. All Rights Reserved.
// Node module: @loopback/repository
// This file is licensed under the MIT License.
// License text available at https://opensource.org/licenses/MIT
Object.defineProperty(exports, "__esModule", { value: true });
exports.DefaultKeyValueRepository = void 0;
const legacy_juggler_bridge_1 = require("./legacy-juggler-bridge");
/**
* An implementation of KeyValueRepository based on loopback-datasource-juggler
*/
class DefaultKeyValueRepository {
/**
* Construct a KeyValueRepository with a legacy DataSource
* @param ds - Legacy DataSource
*/
constructor(entityClass, ds) {
this.entityClass = entityClass;
// KVModel class is placeholder to receive methods from KeyValueAccessObject
// through mixin
this.kvModelClass =
ds.createModel('_kvModel');
}
delete(key, options) {
return (0, legacy_juggler_bridge_1.ensurePromise)(this.kvModelClass.delete(key, options));
}
deleteAll(options) {
return (0, legacy_juggler_bridge_1.ensurePromise)(this.kvModelClass.deleteAll(options));
}
toEntity(modelData) {
if (modelData == null)
return modelData;
let data = modelData;
if (typeof modelData.toObject === 'function') {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
data = modelData.toObject();
}
return new this.entityClass(data);
}
async get(key, options) {
const val = this.kvModelClass.get(key, options);
const result = await (0, legacy_juggler_bridge_1.ensurePromise)(val);
return this.toEntity(result);
}
set(key, value, options) {
return (0, legacy_juggler_bridge_1.ensurePromise)(this.kvModelClass.set(key, value, options));
}
expire(key, ttl, options) {
return (0, legacy_juggler_bridge_1.ensurePromise)(this.kvModelClass.expire(key, ttl, options));
}
ttl(key, options) {
return (0, legacy_juggler_bridge_1.ensurePromise)(this.kvModelClass.ttl(key, options));
}
keys(filter, options) {
const kvModelClass = this.kvModelClass;
const iterator = {
[Symbol.asyncIterator]() {
return new AsyncKeyIteratorImpl(kvModelClass.iterateKeys(filter, options));
},
};
return iterator;
}
}
exports.DefaultKeyValueRepository = DefaultKeyValueRepository;
class AsyncKeyIteratorImpl {
constructor(keys) {
this.keys = keys;
}
next() {
const key = (0, legacy_juggler_bridge_1.ensurePromise)(this.keys.next());
return key.then(k => {
return { done: k === undefined, value: k !== null && k !== void 0 ? k : '' };
});
}
}
//# sourceMappingURL=kv.repository.bridge.js.map