envio
Version:
A latency and sync speed optimized, developer friendly blockchain data indexer.
106 lines (94 loc) • 3.66 kB
JavaScript
// Generated by ReScript, PLEASE EDIT WITH CARE
;
var Js_exn = require("rescript/lib/js/js_exn.js");
var EntityHistory = require("./db/EntityHistory.res.js");
var ErrorHandling = require("./ErrorHandling.res.js");
var Caml_exceptions = require("rescript/lib/js/caml_exceptions.js");
var Caml_js_exceptions = require("rescript/lib/js/caml_js_exceptions.js");
var StorageError = /* @__PURE__ */Caml_exceptions.create("Persistence.StorageError");
var entityHistoryActionEnumConfig_name = EntityHistory.RowAction.name;
var entityHistoryActionEnumConfig_variants = EntityHistory.RowAction.variants;
var entityHistoryActionEnumConfig_schema = EntityHistory.RowAction.schema;
var entityHistoryActionEnumConfig = {
name: entityHistoryActionEnumConfig_name,
variants: entityHistoryActionEnumConfig_variants,
schema: entityHistoryActionEnumConfig_schema,
default: "SET"
};
function make(userEntities, dcRegistryEntityConfig, allEnums, staticTables, storage, onStorageInitialize) {
var allEntities = userEntities.concat([dcRegistryEntityConfig]);
var allEnums$1 = allEnums.concat([entityHistoryActionEnumConfig]);
return {
userEntities: userEntities,
staticTables: staticTables,
allEntities: allEntities,
allEnums: allEnums$1,
storageStatus: "Unknown",
storage: storage,
onStorageInitialize: onStorageInitialize
};
}
async function init(persistence, skipIsInitializedCheckOpt, resetOpt) {
var skipIsInitializedCheck = skipIsInitializedCheckOpt !== undefined ? skipIsInitializedCheckOpt : false;
var reset = resetOpt !== undefined ? resetOpt : false;
try {
var promise = persistence.storageStatus;
var shouldRun;
if (typeof promise !== "object") {
shouldRun = true;
} else if (promise.TAG === "Initializing") {
await promise._0;
shouldRun = reset;
} else {
shouldRun = reset;
}
if (!shouldRun) {
return ;
}
var resolveRef = {
contents: null
};
var promise$1 = new Promise((function (resolve, param) {
resolveRef.contents = resolve;
}));
persistence.storageStatus = {
TAG: "Initializing",
_0: promise$1
};
if (!(reset || skipIsInitializedCheck) && await persistence.storage.isInitialized()) {
persistence.storageStatus = {
TAG: "Ready",
cleanRun: false
};
} else {
await persistence.storage.initialize(persistence.allEntities, persistence.staticTables, persistence.allEnums, reset || !skipIsInitializedCheck);
persistence.storageStatus = {
TAG: "Ready",
cleanRun: true
};
var onStorageInitialize = persistence.onStorageInitialize;
if (onStorageInitialize !== undefined) {
await onStorageInitialize();
}
}
return resolveRef.contents();
}
catch (raw_exn){
var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
return ErrorHandling.mkLogAndRaise(undefined, "EE800: Failed to initialize the indexer storage.", exn);
}
}
function getInitializedStorageOrThrow(persistence) {
var match = persistence.storageStatus;
if (typeof match !== "object" || match.TAG === "Initializing") {
return Js_exn.raiseError("Failed to access the indexer storage. The Persistence layer is not initialized.");
} else {
return persistence.storage;
}
}
exports.StorageError = StorageError;
exports.entityHistoryActionEnumConfig = entityHistoryActionEnumConfig;
exports.make = make;
exports.init = init;
exports.getInitializedStorageOrThrow = getInitializedStorageOrThrow;
/* EntityHistory Not a pure module */