jinaga
Version:
Data management for web and mobile applications.
73 lines • 3.59 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.JinagaTest = void 0;
const authentication_test_1 = require("./authentication/authentication-test");
const authorizationRules_1 = require("./authorization/authorizationRules");
const distribution_engine_1 = require("./distribution/distribution-engine");
const distribution_rules_1 = require("./distribution/distribution-rules");
const hydrate_1 = require("./fact/hydrate");
const pass_through_fork_1 = require("./fork/pass-through-fork");
const web_client_1 = require("./http/web-client");
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");
class JinagaTest {
static create(config) {
const store = new memory_store_1.MemoryStore();
this.saveInitialState(config, store);
const observableSource = new observable_1.ObservableSource(store);
const syncStatusNotifier = new web_client_1.SyncStatusNotifier();
const fork = new pass_through_fork_1.PassThroughFork(store);
const authentication = this.createAuthentication(config, store);
const network = this.createNetwork(config, store);
const purgeConditions = this.createPurgeConditions(config);
const factManager = new factManager_1.FactManager(fork, observableSource, store, network, purgeConditions, config.feedRefreshIntervalSeconds);
return new jinaga_1.Jinaga(authentication, factManager, syncStatusNotifier);
}
static saveInitialState(config, store) {
if (config.initialState) {
const dehydrate = new hydrate_1.Dehydration();
config.initialState.forEach(obj => dehydrate.dehydrate(obj));
store.save(dehydrate.factRecords().map(f => ({
fact: f,
signatures: []
})));
}
}
static createAuthentication(config, store) {
const authorizationRules = config.authorization ?
config.authorization(new authorizationRules_1.AuthorizationRules(config.model)) : null;
const userFact = JinagaTest.getUserFact(config);
const deviceFact = JinagaTest.getDeviceFact(config);
return new authentication_test_1.AuthenticationTest(store, authorizationRules, userFact, deviceFact);
}
static createNetwork(config, store) {
if (config.distribution) {
const distributionRules = config.distribution(new distribution_rules_1.DistributionRules([]));
const distributionEngine = new distribution_engine_1.DistributionEngine(distributionRules, store);
return new NetworkManager_1.NetworkDistribution(distributionEngine, this.getUserFact(config));
}
else {
return new NetworkManager_1.NetworkNoOp();
}
}
static createPurgeConditions(config) {
if (config.purgeConditions) {
return config.purgeConditions(new purgeConditions_1.PurgeConditions([])).specifications;
}
else {
return [];
}
}
static getUserFact(config) {
return config.user ? (0, hydrate_1.dehydrateFact)(config.user)[0] : null;
}
static getDeviceFact(config) {
return config.device ? (0, hydrate_1.dehydrateFact)(config.device)[0] : null;
}
}
exports.JinagaTest = JinagaTest;
//# sourceMappingURL=jinaga-test.js.map