@jsonjoy.com/reactive-rpc
Version:
Reactive-RPC is a library for building reactive APIs over WebSocket, HTTP, and other RPCs.
54 lines • 2.29 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.createServices = exports.createCaller = exports.createRouter = void 0;
const routes_1 = require("./routes");
const caller_1 = require("../../../common/rpc/caller");
const Value_1 = require("../../../common/messages/Value");
const ObjectValueCaller_1 = require("../../../common/rpc/caller/ObjectValueCaller");
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 typed_1 = require("../../../common/rpc/caller/error/typed");
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);
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;
//# sourceMappingURL=index.js.map
;