UNPKG

dogmaql.driver.redis

Version:

Redis driver for DogmaQL (Dogma Query Language).

58 lines (55 loc) 2.83 kB
"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)); } };