UNPKG

json-crdt-server

Version:

JSON CRDT server and syncing local-first browser client

55 lines (54 loc) 2.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createServices = exports.createCaller = exports.createRouter = void 0; const routes_1 = require("./routes"); const caller_1 = require("@jsonjoy.com/reactive-rpc/lib/common/rpc/caller"); const Value_1 = require("@jsonjoy.com/reactive-rpc/lib/common/messages/Value"); const ObjectValueCaller_1 = require("@jsonjoy.com/reactive-rpc/lib/common/rpc/caller/ObjectValueCaller"); const typed_1 = require("@jsonjoy.com/reactive-rpc/lib/common/rpc/caller/error/typed"); const system_1 = require("./system"); const ObjectValue_1 = require("@jsonjoy.com/json-type/lib/value/ObjectValue"); const Services_1 = require("../services/Services"); const MemoryStore_1 = require("../services/blocks/store/MemoryStore"); const LevelStore_1 = require("../services/blocks/store/level/LevelStore"); const classic_level_1 = require("classic-level"); const createRouter = (services) => { const router = ObjectValue_1.ObjectValue.create(system_1.system); const deps = { services, router, system: system_1.system, t: system_1.system.t, }; return (0, routes_1.routes)(deps)(router); }; exports.createRouter = createRouter; const createCaller = (services = new Services_1.Services()) => { const router = (0, exports.createRouter)(services); const caller = new ObjectValueCaller_1.ObjectValueCaller({ router, wrapInternalError: (error) => { if (error instanceof Value_1.RpcValue) return error; if (error instanceof caller_1.RpcError) return typed_1.TypedRpcError.value(error); // tslint:disable-next-line:no-console console.error(error); return typed_1.TypedRpcError.valueFrom(error); }, }); return { router, caller, services }; }; exports.createCaller = createCaller; const createServices = async () => { let store = new MemoryStore_1.MemoryStore(); if (process.env.JSON_CRDT_STORE === 'level') { const path = process.env.JSON_CRDT_STORE_PATH || './db'; const kv = new classic_level_1.ClassicLevel(path, { valueEncoding: 'view' }); await kv.open(); store = new LevelStore_1.LevelStore(kv); } const services = new Services_1.Services({ store }); return services; }; exports.createServices = createServices;