dogmaql.driver.redis
Version:
Redis driver for DogmaQL (Dogma Query Language).
58 lines (55 loc) • 2.83 kB
JavaScript
"use strict";
var _dogmalang = require("dogmalang");
var _dogmaql = require("dogmaql.driver");
const Redis = _dogmalang.dogma.use(require("ioredis"));
const Builder = _dogmalang.dogma.use(require("./builder/Builder"));const Database = _dogmalang.dogma.use(require("./Database"));const Runner = _dogmalang.dogma.use(require("./Runner"));
const $Connection = class Connection extends _dogmaql.Connection {
constructor(drv) {
super(drv);{
_dogmalang.dogma.update(this, { name: "db", visib: ":", assign: ".=", value: null });
}
}
};
const Connection = new Proxy($Connection, { apply(receiver, self, args) {
return new $Connection(...args);
} });module.exports = exports = Connection;
Object.defineProperty(Connection.prototype, "opened", { enum: true, get: function () {
{
return (0, _dogmalang.bool)(this._client);
}
} });
Connection.prototype._open = function (opts) {
_dogmalang.dogma.paramExpectedToHave("opts", opts, { id: { type: _dogmalang.text, mandatory: false }, host: { type: _dogmalang.text, mandatory: false }, port: { type: _dogmalang.num, mandatory: false }, db: { type: _dogmalang.num, mandatory: false }, password: { type: _dogmalang.text, mandatory: false } }, false);{
return (0, _dogmalang.promise)((rslv, rej) => {
_dogmalang.dogma.paramExpected("rslv", rslv, null);_dogmalang.dogma.paramExpected("rej", rej, null);{
opts = _dogmalang.dogma.clone(opts, { "lazyConnect": true });opts.connectionName = opts.id || "DogmaQL/Redis";const client = new Redis(opts);let retries = 0;client.on("error", err => {
_dogmalang.dogma.paramExpected("err", err, null);{
if ((retries += 1) > 5) {
client.disconnect();rej(err);
}
}
}).on("ready", () => {
{
_dogmalang.dogma.update(this, { name: "client", visib: ":", assign: "=", value: client }, { name: "opts", visib: ":", assign: "=", value: opts }, { name: "builder", visib: ":", assign: "=", value: Builder(this) }, { name: "runner", visib: ":", assign: "=", value: Runner(client) }, { name: "db", visib: ":", assign: "=", value: Database(this, opts.db || 0) });rslv();
}
}).connect(() => {
{}
});
}
});
}
};
Connection.prototype._close = function () {
{
return (0, _dogmalang.promise)((rslv, rej) => {
_dogmalang.dogma.paramExpected("rslv", rslv, null);_dogmalang.dogma.paramExpected("rej", rej, null);{
this._client.disconnect();this._client = this._db = null;rslv();
}
});
}
};
Connection.prototype._run = function (cmd, params = {}) {
_dogmalang.dogma.paramExpected("cmd", cmd, _dogmalang.text);_dogmalang.dogma.paramExpectedToBe("params", params, _dogmalang.map);{
return this._runner.run(this._builder.parse(cmd, params));
}
};