@tai-kun/surrealdb
Version:
The SurrealDB SDK for JavaScript
96 lines (94 loc) • 13.2 kB
JavaScript
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
// src/engine/engine-abc.ts
import {
StateTransitionError
} from "../errors/index.mjs";
import { StatefulPromise } from "../utils/index.mjs";
function transArgsToConnInfo(args) {
const conn = Object.assign(
{
token: null,
endpoint: null,
database: null,
namespace: null
},
typeof args === "string" ? { state: args } : args
);
if (conn.endpoint) {
conn.endpoint = new URL(conn.endpoint);
}
return conn;
}
__name(transArgsToConnInfo, "transArgsToConnInfo");
var _EngineAbc = class _EngineAbc {
constructor(config) {
this._conn = {
token: null,
state: "closed",
endpoint: null,
database: null,
namespace: null
};
this.ee = config.emitter;
this.fmt = config.formatter;
}
transition(args, fallback) {
return new StatefulPromise((resolve, reject) => {
const fromState = this.state;
const toState = (this._conn = transArgsToConnInfo(args)).state;
const hooks = this.ee.emit(toState, {
state: toState
});
if (!hooks || hooks.length <= 0) {
return resolve();
}
StatefulPromise.allRejected(hooks).then((errors) => {
if (errors.length > 0) {
const args2 = fallback();
const fbState = (this._conn = transArgsToConnInfo(args2)).state;
reject(new StateTransitionError(fromState, toState, fbState, errors));
} else {
resolve();
}
});
});
}
get state() {
return this._conn.state;
}
get endpoint() {
return this._conn.endpoint && new URL(this._conn.endpoint);
}
get namespace() {
return this._conn.namespace;
}
set namespace(ns) {
this._conn.namespace = ns;
}
get database() {
return this._conn.database;
}
set database(db) {
this._conn.database = db;
}
get token() {
return this._conn.token;
}
set token(token) {
this._conn.token = token;
}
getConnectionInfo() {
const conn = Object.assign({}, this._conn);
if (conn.endpoint) {
conn.endpoint = new URL(conn.endpoint);
}
return conn;
}
};
__name(_EngineAbc, "EngineAbc");
var EngineAbc = _EngineAbc;
export {
EngineAbc as default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2VuZ2luZS9lbmdpbmUtYWJjLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge1xuICB0eXBlIEh0dHBFbmdpbmVFcnJvcixcbiAgU3RhdGVUcmFuc2l0aW9uRXJyb3IsXG4gIHR5cGUgV2ViU29ja2V0RW5naW5lRXJyb3IsXG59IGZyb20gXCJAdGFpLWt1bi9zdXJyZWFsZGIvZXJyb3JzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdHRlciB9IGZyb20gXCJAdGFpLWt1bi9zdXJyZWFsZGIvZm9ybWF0dGVyXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEJpZGlyZWN0aW9uYWxScGNSZXNwb25zZSxcbiAgTGl2ZVJlc3VsdCxcbiAgUnBjUmVxdWVzdCxcbiAgUnBjUmVzcG9uc2UsXG59IGZyb20gXCJAdGFpLWt1bi9zdXJyZWFsZGIvdHlwZXNcIjtcbmltcG9ydCB7IFN0YXRlZnVsUHJvbWlzZSwgdHlwZSBUYXNrRW1pdHRlciB9IGZyb20gXCJAdGFpLWt1bi9zdXJyZWFsZGIvdXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgU2V0T3B0aW9uYWwsIFNpbXBsaWZ5IH0gZnJvbSBcInR5cGUtZmVzdFwiO1xuXG50eXBlIE9wdGlvbmFsT25OdWxsPFQ+ID0gU2V0T3B0aW9uYWw8XG4gIFQsXG4gIHtcbiAgICBbUCBpbiBrZXlvZiBUXTogbnVsbCBleHRlbmRzIFRbUF0gPyBQIDogbmV2ZXI7XG4gIH1ba2V5b2YgVF1cbj47XG5cbnR5cGUgTm9uTnVsbEtleXNPZjxUPiA9IHtcbiAgW1AgaW4ga2V5b2YgVF06IG51bGwgZXh0ZW5kcyBUW1BdID8gbmV2ZXIgOiBQO1xufVtrZXlvZiBUXTtcblxuZXhwb3J0IHR5cGUgQ29ubmVjdGlvblN0YXRlID1cbiAgfCBcImNvbm5lY3RpbmdcIlxuICB8IFwib3BlblwiXG4gIHwgXCJjbG9zaW5nXCJcbiAgfCBcImNsb3NlZFwiO1xuXG5leHBvcnQgbmFtZXNwYWNlIENvbm5lY3Rpb25JbmZvIHtcbiAgdHlwZSBJbmZvPFxuICAgIFRTdGF0ZSBleHRlbmRzIENvbm5lY3Rpb25TdGF0ZSxcbiAgICBURW5kcG9pbnQsXG4gICAgVE5hbWVzcGFjZSxcbiAgICBURGF0YWJhc2UsXG4gICAgVFRva2VuLFxuICA+ID0ge1xuICAgIHN0YXRlOiBUU3RhdGU7XG4gICAgZW5kcG9pbnQ6IFRFbmRwb2ludDtcbiAgICBuYW1lc3BhY2U6IFROYW1lc3BhY2U7XG4gICAgZGF0YWJhc2U6IFREYXRhYmFzZTtcbiAgICB0b2tlbjogVFRva2VuO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIENvbm5lY3RpbmcgPSBJbmZvPFwiY29ubmVjdGluZ1wiLCBVUkwsIG51bGwsIG51bGwsIG51bGw+O1xuXG4gIGV4cG9ydCB0eXBlIE9wZW4gPSBJbmZvPFxuICAgIFwib3BlblwiLFxuICAgIFVSTCxcbiAgICBzdHJpbmcgfCBudWxsLFxuICAgIHN0cmluZyB8IG51bGwsXG4gICAgc3RyaW5nIHwgbnVsbFxuICA+O1xuXG4gIGV4cG9ydCB0eXBlIENsb3NpbmcgPSBJbmZvPFxuICAgIFwiY2xvc2luZ1wiLFxuICAgIFVSTCxcbiAgICBzdHJpbmcgfCBudWxsLFxuICAgIHN0cmluZyB8IG51bGwsXG4gICAgc3RyaW5nIHwgbnVsbFxuICA+O1xuXG4gIGV4cG9ydCB0eXBlIENsb3NlZCA9IEluZm88XCJjbG9zZWRcIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbD47XG59XG5cbmV4cG9ydCB0eXBlIENvbm5lY3Rpb25JbmZvID1cbiAgfCBDb25uZWN0aW9uSW5mby5Db25uZWN0aW5nXG4gIHwgQ29ubmVjdGlvbkluZm8uT3BlblxuICB8IENvbm5lY3Rpb25JbmZvLkNsb3NpbmdcbiAgfCBDb25uZWN0aW9uSW5mby5DbG9zZWQ7XG5cbi8qKlxuICoge0BsaW5rIFRyYW5zaXRpb25BcmdzfVxuICovXG50eXBlIF9UcmFuc2l0aW9uQXJnczxUU3RhdGUsIFRDb25uSW5mbz4gPVxuICB8IE9wdGlvbmFsT25OdWxsPFRDb25uSW5mbz5cbiAgLy8gc3RhdGUgXHUzMDZFXHUzMDdGXHU1RkM1XHU5ODA4XHUzMDZBXHUzMDg5XHUzMDAxXHUzMDVEXHUzMDZFXHU1MDI0XHUzMDYwXHUzMDUxXHUzMDkyXHU1M0Q3XHUzMDUxXHU1MTY1XHUzMDhDXHUzMDg5XHUzMDhDXHUzMDhCXHUzMDg4XHUzMDQ2XHUzMDZCXHUzMDU5XHUzMDhCXHUzMDAyXG4gIHwgKE5vbk51bGxLZXlzT2Y8VENvbm5JbmZvPiBleHRlbmRzIFwic3RhdGVcIiA/IFRTdGF0ZSA6IG5ldmVyKTtcblxuZXhwb3J0IHR5cGUgVHJhbnNpdGlvbkFyZ3MgPSB7XG4gIFtUU3RhdGUgaW4gQ29ubmVjdGlvblN0YXRlXTogX1RyYW5zaXRpb25BcmdzPFxuICAgIFRTdGF0ZSxcbiAgICBFeHRyYWN0PENvbm5lY3Rpb25JbmZvLCB7IHN0YXRlOiBUU3RhdGUgfT5cbiAgPjtcbn1bQ29ubmVjdGlvblN0YXRlXTtcblxuZnVuY3Rpb24gdHJhbnNBcmdzVG9Db25uSW5mbyhhcmdzOiBUcmFuc2l0aW9uQXJncyk6IENvbm5lY3Rpb25JbmZvIHtcbiAgY29uc3QgY29ubjogQ29ubmVjdGlvbkluZm8gPSBPYmplY3QuYXNzaWduKFxuICAgIHtcbiAgICAgIHRva2VuOiBudWxsLFxuICAgICAgZW5kcG9pbnQ6IG51bGwsXG4gICAgICBkYXRhYmFzZTogbnVsbCxcbiAgICAgIG5hbWVzcGFjZTogbnVsbCxcbiAgICB9LFxuICAgIHR5cGVvZiBhcmdzID09PSBcInN0cmluZ1wiXG4gICAgICA/IHsgc3RhdGU6IGFyZ3MgfVxuICAgICAgOiBhcmdzLFxuICApO1xuXG4gIGlmIChjb25uLmVuZHBvaW50KSB7XG4gICAgY29ubi5lbmRwb2ludCA9IG5ldyBVUkwoY29ubi5lbmRwb2ludCk7IC8vIFx1MzBCM1x1MzBENFx1MzBGQ1xuICB9XG5cbiAgcmV0dXJuIGNvbm47XG59XG5cbmV4cG9ydCB0eXBlIEVuZ2luZUV2ZW50TWFwID1cbiAgJiB7XG4gICAgLy8gXHU3MkI2XHU2MTRCXHU5MDc3XHU3OUZCXHUzMDZCXHU5NUEyXHUzMDU5XHUzMDhCXHUzMEE0XHUzMEQ5XHUzMEYzXHUzMEM4XHUzMDAyXG4gICAgW1RTdGF0ZSBpbiBDb25uZWN0aW9uU3RhdGVdOiBbXG4gICAgICByZXN1bHQ6XG4gICAgICAgIC8vIFx1NzJCNlx1NjE0Qlx1OTA3N1x1NzlGQlx1MzA2Qlx1NjIxMFx1NTI5Rlx1MzA1N1x1MzA1Rlx1NTgzNFx1NTQwOFx1MzAwMlxuICAgICAgICB8IHsgc3RhdGU6IFRTdGF0ZTsgZXJyb3I/OiBuZXZlciB9XG4gICAgICAgIC8vIFx1NzJCNlx1NjE0Qlx1OTA3N1x1NzlGQlx1MzA2Qlx1NTkzMVx1NjU1N1x1MzA1N1x1MzA1Rlx1NTgzNFx1NTQwOFx1MzAwMlxuICAgICAgICB8IHsgc3RhdGU6IFRTdGF0ZTsgZXJyb3I6IHVua25vd24gfSxcbiAgICBdO1xuICB9XG4gICYge1xuICAgIC8vIFx1NTNDQ1x1NjVCOVx1NTQxMVx1OTAxQVx1NEZFMVx1MzA2Qlx1MzA0QVx1MzA1MVx1MzA4QiBSUEMgXHUzMEVDXHUzMEI5XHUzMEREXHUzMEYzXHUzMEI5XHUzMDZFXHUzMEE0XHUzMEQ5XHUzMEYzXHUzMEM4XHUzMDAyXG4gICAgW186IGBycGNfJHtCaWRpcmVjdGlvbmFsUnBjUmVzcG9uc2VbXCJpZFwiXX1gXTogW1xuICAgICAgcmVzcG9uc2U6IEJpZGlyZWN0aW9uYWxScGNSZXNwb25zZSxcbiAgICBdO1xuICAgIC8vIFx1MzBFOVx1MzBBNFx1MzBENlx1MzBBRlx1MzBBOFx1MzBFQVx1MzBGQ1x1MzA2RVx1N0Q1MFx1Njc5Q1x1MzA2RVx1MzBBNFx1MzBEOVx1MzBGM1x1MzBDOFx1MzAwMlxuICAgIFtfOiBgbGl2ZV8ke3N0cmluZ31gXTogW3Jlc3BvbnNlOiBTaW1wbGlmeTxPbWl0PExpdmVSZXN1bHQsIFwiaWRcIj4+XTtcbiAgICAvLyBcdTMwQThcdTMwRjNcdTMwQjhcdTMwRjNcdTUxODVcdTMwQThcdTMwRTlcdTMwRkNcdTMwOTJcdTkwMUFcdTc3RTVcdTMwNTlcdTMwOEJcdTMwQTRcdTMwRDlcdTMwRjNcdTMwQzhcdTMwMDJcbiAgICBlcnJvcjogW2Vycm9yOiBIdHRwRW5naW5lRXJyb3IgfCBXZWJTb2NrZXRFbmdpbmVFcnJvcl07XG4gIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5naW5lQWJjQ29uZmlnIHtcbiAgcmVhZG9ubHkgZW1pdHRlcjogVGFza0VtaXR0ZXI8RW5naW5lRXZlbnRNYXA+O1xuICByZWFkb25seSBmb3JtYXR0ZXI6IEZvcm1hdHRlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0QXJncyB7XG4gIHNpZ25hbDogQWJvcnRTaWduYWw7XG4gIGVuZHBvaW50OiBVUkw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xvc2VBcmdzIHtcbiAgc2lnbmFsOiBBYm9ydFNpZ25hbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBScGNBcmdzIHtcbiAgc2lnbmFsOiBBYm9ydFNpZ25hbDtcbiAgcmVxdWVzdDogUnBjUmVxdWVzdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYWJzdHJhY3QgY2xhc3MgRW5naW5lQWJjIHtcbiAgcHJvdGVjdGVkIGVlOiBUYXNrRW1pdHRlcjxFbmdpbmVFdmVudE1hcD47XG4gIHByb3RlY3RlZCBmbXQ6IEZvcm1hdHRlcjtcblxuICBwcml2YXRlIF9jb25uOiBDb25uZWN0aW9uSW5mbyA9IHtcbiAgICB0b2tlbjogbnVsbCxcbiAgICBzdGF0ZTogXCJjbG9zZWRcIixcbiAgICBlbmRwb2ludDogbnVsbCxcbiAgICBkYXRhYmFzZTogbnVsbCxcbiAgICBuYW1lc3BhY2U6IG51bGwsXG4gIH07XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBFbmdpbmVBYmNDb25maWcpIHtcbiAgICB0aGlzLmVlID0gY29uZmlnLmVtaXR0ZXI7XG4gICAgdGhpcy5mbXQgPSBjb25maWcuZm9ybWF0dGVyO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRyYW5zaXRpb24oXG4gICAgYXJnczogVHJhbnNpdGlvbkFyZ3MsXG4gICAgZmFsbGJhY2s6ICgpID0+IFRyYW5zaXRpb25BcmdzLFxuICApOiBTdGF0ZWZ1bFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgU3RhdGVmdWxQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGZyb21TdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgICBjb25zdCB0b1N0YXRlID0gKHRoaXMuX2Nvbm4gPSB0cmFuc0FyZ3NUb0Nvbm5JbmZvKGFyZ3MpKS5zdGF0ZTtcbiAgICAgIGNvbnN0IGhvb2tzID0gdGhpcy5lZS5lbWl0KHRvU3RhdGUsIHtcbiAgICAgICAgc3RhdGU6IHRvU3RhdGUgYXMgbmV2ZXIsXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFob29rcyB8fCBob29rcy5sZW5ndGggPD0gMCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgfVxuXG4gICAgICBTdGF0ZWZ1bFByb21pc2UuYWxsUmVqZWN0ZWQoaG9va3MpLnRoZW4oZXJyb3JzID0+IHtcbiAgICAgICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgYXJncyA9IGZhbGxiYWNrKCk7XG4gICAgICAgICAgY29uc3QgZmJTdGF0ZSA9ICh0aGlzLl9jb25uID0gdHJhbnNBcmdzVG9Db25uSW5mbyhhcmdzKSkuc3RhdGU7XG4gICAgICAgICAgcmVqZWN0KG5ldyBTdGF0ZVRyYW5zaXRpb25FcnJvcihmcm9tU3RhdGUsIHRvU3RhdGUsIGZiU3RhdGUsIGVycm9ycykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgc3RhdGUoKTogQ29ubmVjdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fY29ubi5zdGF0ZTtcbiAgfVxuXG4gIGdldCBlbmRwb2ludCgpOiBVUkwgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fY29ubi5lbmRwb2ludCAmJiBuZXcgVVJMKHRoaXMuX2Nvbm4uZW5kcG9pbnQpOyAvLyBcdTMwQjNcdTMwRDRcdTMwRkNcbiAgfVxuXG4gIGdldCBuYW1lc3BhY2UoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm4ubmFtZXNwYWNlO1xuICB9XG5cbiAgc2V0IG5hbWVzcGFjZShuczogc3RyaW5nIHwgbnVsbCkge1xuICAgIHRoaXMuX2Nvbm4ubmFtZXNwYWNlID0gbnM7XG4gIH1cblxuICBnZXQgZGF0YWJhc2UoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm4uZGF0YWJhc2U7XG4gIH1cblxuICBzZXQgZGF0YWJhc2UoZGI6IHN0cmluZyB8IG51bGwpIHtcbiAgICB0aGlzLl9jb25uLmRhdGFiYXNlID0gZGI7XG4gIH1cblxuICBnZXQgdG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm4udG9rZW47XG4gIH1cblxuICBzZXQgdG9rZW4odG9rZW46IHN0cmluZyB8IG51bGwpIHtcbiAgICB0aGlzLl9jb25uLnRva2VuID0gdG9rZW47XG4gIH1cblxuICBnZXRDb25uZWN0aW9uSW5mbygpOiBDb25uZWN0aW9uSW5mbyB7XG4gICAgY29uc3QgY29ubiA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2Nvbm4pOyAvLyBcdTMwQjNcdTMwRDRcdTMwRkNcblxuICAgIGlmIChjb25uLmVuZHBvaW50KSB7XG4gICAgICBjb25uLmVuZHBvaW50ID0gbmV3IFVSTChjb25uLmVuZHBvaW50KTsgLy8gXHUzMEIzXHUzMEQ0XHUzMEZDXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbm47XG4gIH1cblxuICBhYnN0cmFjdCByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgYWJzdHJhY3QgY29ubmVjdChhcmdzOiBDb25uZWN0QXJncyk6IFByb21pc2VMaWtlPHZvaWQ+O1xuXG4gIGFic3RyYWN0IGNsb3NlKGFyZ3M6IENsb3NlQXJncyk6IFByb21pc2VMaWtlPHZvaWQ+O1xuXG4gIGFic3RyYWN0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