jinaga
Version:
Data management for web and mobile applications.
124 lines • 5.24 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.JinagaBrowser = void 0;
const authentication_noop_1 = require("./authentication/authentication-noop");
const authentication_offline_1 = require("./authentication/authentication-offline");
const authentication_web_client_1 = require("./authentication/authentication-web-client");
const pass_through_fork_1 = require("./fork/pass-through-fork");
const persistent_fork_1 = require("./fork/persistent-fork");
const transient_fork_1 = require("./fork/transient-fork");
const fetch_1 = require("./http/fetch");
const httpNetwork_1 = require("./http/httpNetwork");
const web_client_1 = require("./http/web-client");
const indexeddb_login_store_1 = require("./indexeddb/indexeddb-login-store");
const indexeddb_queue_1 = require("./indexeddb/indexeddb-queue");
const indexeddb_store_1 = require("./indexeddb/indexeddb-store");
const jinaga_1 = require("./jinaga");
const factManager_1 = require("./managers/factManager");
const NetworkManager_1 = require("./managers/NetworkManager");
const memory_store_1 = require("./memory/memory-store");
const observable_1 = require("./observable/observable");
const purgeConditions_1 = require("./purge/purgeConditions");
const validate_1 = require("./purge/validate");
class JinagaBrowser {
static create(config) {
const store = createStore(config);
const observableSource = new observable_1.ObservableSource(store);
const syncStatusNotifier = new web_client_1.SyncStatusNotifier();
const webClient = createWebClient(config, syncStatusNotifier);
const fork = createFork(config, store, webClient);
const authentication = createAuthentication(config, webClient);
const network = createNetwork(webClient);
const purgeConditions = createPurgeConditions(config);
const factManager = new factManager_1.FactManager(fork, observableSource, store, network, purgeConditions, config.feedRefreshIntervalSeconds);
return new jinaga_1.Jinaga(authentication, factManager, syncStatusNotifier);
}
}
exports.JinagaBrowser = JinagaBrowser;
function createStore(config) {
if (config.indexedDb) {
return new indexeddb_store_1.IndexedDBStore(config.indexedDb);
}
else {
return new memory_store_1.MemoryStore();
}
}
function createWebClient(config, syncStatusNotifier) {
if (config.httpEndpoint) {
const provider = config.httpAuthenticationProvider;
const getHeaders = provider
? () => provider.getHeaders()
: () => Promise.resolve({});
const reauthenticate = provider
? () => provider.reauthenticate()
: () => Promise.resolve(false);
const httpConnection = new fetch_1.FetchConnection(config.httpEndpoint, getHeaders, reauthenticate);
const httpTimeoutSeconds = config.httpTimeoutSeconds || 30;
const webClient = new web_client_1.WebClient(httpConnection, syncStatusNotifier, {
timeoutSeconds: httpTimeoutSeconds
});
return webClient;
}
else {
return null;
}
}
function createFork(config, store, webClient) {
if (webClient) {
if (config.indexedDb) {
const queue = new indexeddb_queue_1.IndexedDBQueue(config.indexedDb);
const queueProcessingDelay = config.queueProcessingDelayMs || 100;
const fork = new persistent_fork_1.PersistentFork(store, queue, webClient, queueProcessingDelay);
fork.initialize();
return fork;
}
else {
const fork = new transient_fork_1.TransientFork(store, webClient);
return fork;
}
}
else {
const fork = new pass_through_fork_1.PassThroughFork(store);
return fork;
}
}
function createAuthentication(config, webClient) {
if (webClient) {
if (config.indexedDb) {
const loginStore = new indexeddb_login_store_1.IndexedDBLoginStore(config.indexedDb);
const authentication = new authentication_offline_1.AuthenticationOffline(loginStore, webClient);
return authentication;
}
else {
const authentication = new authentication_web_client_1.AuthenticationWebClient(webClient);
return authentication;
}
}
else {
const authentication = new authentication_noop_1.AuthenticationNoOp();
return authentication;
}
}
function createNetwork(webClient) {
if (webClient) {
const network = new httpNetwork_1.HttpNetwork(webClient);
return network;
}
else {
return new NetworkManager_1.NetworkNoOp();
}
}
function createPurgeConditions(config) {
if (config.purgeConditions) {
var specifications = config.purgeConditions(new purgeConditions_1.PurgeConditions([])).specifications;
var validationFailures = specifications.map(specification => (0, validate_1.validatePurgeSpecification)(specification)).flat();
if (validationFailures.length > 0) {
throw new Error(validationFailures.join("\n"));
}
return specifications;
}
else {
return [];
}
}
//# sourceMappingURL=jinaga-browser.js.map