baqend
Version:
Baqend JavaScript SDK
202 lines • 14.2 kB
JavaScript
;
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.EntityManagerFactory = void 0;
var EntityManager_1 = require("./EntityManager");
var message = __importStar(require("./message"));
var connector_1 = require("./connector");
var util_1 = require("./util");
var intersection_1 = require("./intersection");
var metamodel_1 = require("./metamodel");
var CONNECTED = Symbol('Connected');
var EntityManagerFactory = /** @class */ (function (_super) {
__extends(EntityManagerFactory, _super);
/**
* Creates a new EntityManagerFactory connected to the given destination
* @param [options] The destination to connect with, or an options object
* @param [options.host] The destination to connect with
* @param [options.port=80|443] The optional destination port to connect with
* @param [options.secure=false] <code>true</code> To use a secure ssl encrypted connection
* @param [options.basePath="/v1"] The base path of the api
* @param [options.schema=null] The serialized schema as json used to initialize the metamodel
* @param [options.tokenStorage] The tokenStorage which should be used by this emf
* @param [options.tokenStorageFactory] The tokenStorage factory implementation which
* should be used for token storage
* @param [options.staleness=60] The maximum staleness of objects that are acceptable while reading cached
* data
*/
function EntityManagerFactory(options) {
if (options === void 0) { options = {}; }
var _this = _super.call(this) || this;
_this.connection = null;
_this.metamodel = _this.createMetamodel();
_this.code = new intersection_1.Code(_this.metamodel, _this);
_this.tokenStorageFactory = intersection_1.TokenStorage.WEB_STORAGE || intersection_1.TokenStorage.GLOBAL;
_this.tokenStorage = null;
_this.staleness = null;
_this.connectData = null;
var opt = typeof options === 'string' ? { host: options } : options || {};
_this.configure(opt);
var isReady = true;
var ready = new Promise(function (success) {
_this[CONNECTED] = success;
});
if (opt.host) {
_this.connect(opt.host, opt.port, opt.secure, opt.basePath);
}
else {
isReady = false;
}
if (!_this.tokenStorage) {
isReady = false;
ready = ready
.then(function () { return _this.tokenStorageFactory.create(_this.connection.origin); })
.then(function (tokenStorage) {
_this.tokenStorage = tokenStorage;
});
}
if (opt.schema) {
_this.connectData = opt;
_this.metamodel.init(opt.schema);
}
else {
isReady = false;
ready = ready.then(function () {
var _a;
var msg = new message.Connect();
msg.withCredentials = true; // used for registered devices
if (_this.staleness === 0) {
msg.noCache();
}
if ((_a = _this.tokenStorage) === null || _a === void 0 ? void 0 : _a.token) {
// disable client cache on the connect resource if we are authenticated
msg.addQueryString('BCB');
}
return _this.send(msg);
}).then(function (response) {
_this.connectData = response.entity;
if (_this.staleness === null) {
_this.staleness = _this.connectData.bloomFilterRefresh || 60;
}
if (!_this.metamodel.isInitialized) {
_this.metamodel.init(_this.connectData.schema);
}
_this.tokenStorage.update(_this.connectData.token);
});
}
if (!isReady) {
_this.withLock(function () { return ready; }, true);
}
return _this;
}
/**
* Apply additional configurations to this EntityManagerFactory
* @param options The additional configuration options
* @param [options.tokenStorage] The tokenStorage which should be used by this emf
* @param [options.tokenStorageFactory] The tokenStorage factory implementation which
* should be used for token storage
* @param [options.staleness=60] The maximum staleness of objects that are acceptable while reading cached
* data, <code>0</code> to always bypass the browser cache
* @return
*/
EntityManagerFactory.prototype.configure = function (options) {
if (this.connection) {
throw new Error('The EntityManagerFactory can only be configured before is is connected.');
}
if (options.tokenStorage) {
this.tokenStorage = options.tokenStorage;
}
if (options.tokenStorageFactory) {
this.tokenStorageFactory = options.tokenStorageFactory;
}
if (options.staleness !== undefined) {
this.staleness = options.staleness;
}
};
EntityManagerFactory.prototype.connect = function (hostOrApp, port, secure, basePath) {
if (this.connection) {
throw new Error('The EntityManagerFactory is already connected.');
}
if (typeof port === 'boolean') {
return this.connect(hostOrApp, 0, port, secure);
}
this.connection = connector_1.Connector.create(hostOrApp, port, secure, basePath);
this[CONNECTED]();
return this.ready();
};
/**
* Creates a new Metamodel instance, which is not connected
* @return A new Metamodel instance
*/
EntityManagerFactory.prototype.createMetamodel = function () {
return new metamodel_1.Metamodel(this);
};
/**
* Create a new application-managed EntityManager.
*
* @param useSharedTokenStorage The token storage to persist the authorization token, or
* <code>true</code> To use the shared token storage of the emf.
* <code>false</code> To use a instance based storage.
*
* @return a new entityManager
*/
EntityManagerFactory.prototype.createEntityManager = function (useSharedTokenStorage) {
var _this = this;
var em = new EntityManager_1.EntityManager(this);
if (this.isReady) {
em.connected(useSharedTokenStorage);
}
else {
em.withLock(function () { return _this.ready().then(function () {
em.connected(useSharedTokenStorage);
}); }, true);
}
return em;
};
EntityManagerFactory.prototype.send = function (msg) {
if (!msg.tokenStorage()) {
msg.tokenStorage(this.tokenStorage);
}
return this.connection.send(msg);
};
return EntityManagerFactory;
}(util_1.Lockable));
exports.EntityManagerFactory = EntityManagerFactory;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW50aXR5TWFuYWdlckZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvRW50aXR5TWFuYWdlckZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBZ0Q7QUFDaEQsaURBQXFDO0FBQ3JDLHlDQUVxQjtBQUNyQiwrQkFBMkM7QUFDM0MsK0NBQXlFO0FBQ3pFLHlDQUF3QztBQUV4QyxJQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7QUFXdEM7SUFBMEMsd0NBQVE7SUFpQmhEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSCw4QkFBWSxPQVNHO1FBVEgsd0JBQUEsRUFBQSxZQVNHO1FBVGYsWUFVRSxpQkFBTyxTQStEUjtRQXZHTSxnQkFBVSxHQUFxQixJQUFJLENBQUM7UUFFcEMsZUFBUyxHQUFjLEtBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUU5QyxVQUFJLEdBQVMsSUFBSSxtQkFBSSxDQUFDLEtBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSSxDQUFDLENBQUM7UUFFNUMseUJBQW1CLEdBQXdCLDJCQUFZLENBQUMsV0FBVyxJQUFJLDJCQUFZLENBQUMsTUFBTSxDQUFDO1FBRTNGLGtCQUFZLEdBQXdCLElBQUksQ0FBQztRQUV6QyxlQUFTLEdBQWtCLElBQUksQ0FBQztRQUVoQyxpQkFBVyxHQUF1QixJQUFJLENBQUM7UUE4QjVDLElBQU0sR0FBRyxHQUFHLE9BQU8sT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFFNUUsS0FBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVwQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxLQUFLLEdBQUcsSUFBSSxPQUFPLENB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