UNPKG

sdj-esm

Version:
104 lines 3.8 kB
import { DEF_DESC, DEF_JSON, SDJ_SCHEMA } from "../core/statics.js"; import { isInfo } from "../core/validators.js"; import { blankDescriptionJI, blankInfoJI } from "./immutables.js"; import { SdjDescription } from "../classes/description.js"; import { SdJson } from "../classes/json.js"; import { SdjHost } from "../global/host.js"; import { each, has, isString } from "lodash-es"; import { cloneJI, deepFreeze } from "./func.std.js"; import { getRegEx } from "./regex.js"; export function blankJsonJI(jsonName, descOpt = undefined) { const descName = (descOpt && isString(descOpt)) ? descOpt : DEF_DESC, fileName = (getRegEx("sdjFileName").test(jsonName)) ? jsonName : DEF_JSON; let descJI; if (descOpt instanceof SdjDescription) { descJI = descOpt.genJI(); } else if (descOpt && has(descOpt, "sdInfo") && isInfo(descOpt.sdInfo)) { SdjDescription.VerifyJI(descOpt); descJI = descOpt; } else { descJI = blankDescriptionJI(descName); } return { $id: SDJ_SCHEMA[0], // json schema id description: descJI, sdInfo: blankInfoJI(fileName), data: [] }; } // Note: using this assumes SdjHost has been previously initialized. export function genJson(inJson) { let rtnJson; const sdjHost = SdjHost.getHost(); try { rtnJson = new SdJson(inJson); } catch (err) { if (inJson.sdInfo && isInfo(inJson.sdInfo)) { sdjHost.gLog(`[SDJ] SdInfo file: ${inJson.sdInfo.name} checkJson error: ${String(err).toString()}`, 2); } else { sdjHost.gLog("[SDJ] checkJson error:" + String(err).toString(), 2); } } return rtnJson; } // Does not engage SdjHost // Returns new ILexicon object based on passed in SdJsonJI or DescriptionJI // Note; Lexicons need to be loaded on SdjHost startup // This also throws console errors as it's outside (pre-SdjHost creation) of the log system. // If using this function don't let it throw errors export function genLexicon(inJson) { let rtnVal = undefined, baseDescript, asSdJson, lexName, iLexicon = { name: "" }; if (has(inJson, "$id") && has(inJson, "description") && inJson.sdInfo) { asSdJson = inJson; try { SdJson.VerifyJI(inJson); baseDescript = asSdJson.description; } catch (e) { // eslint-disable-next-line no-console console.log("[SDJ] genLexicon error:" + String(e).toString()); return rtnVal; } } else { try { SdjDescription.VerifyJI(inJson); baseDescript = inJson; } catch (e) { // eslint-disable-next-line no-console console.log("[SDJ] genLexicon error:" + String(e).toString()); return rtnVal; } } const name = baseDescript.sdInfo.name; lexName = (name.indexOf("_lexicon") > -1) ? name.toLowerCase() : name.toLowerCase() + "_lexicon"; iLexicon.name = lexName; iLexicon.items = cloneJI(baseDescript.items); iLexicon.entities = cloneJI(baseDescript.graph); return iLexicon; } export function freezeDescription(inDesc) { const entFreeze = (ent) => { deepFreeze(ent.sdItems); deepFreeze(ent.parentIds); deepFreeze(ent.childIds); deepFreeze(ent.extendIds); deepFreeze(ent.sdProps); Object.freeze(ent.limiter); Object.freeze(ent.dataInfo); Object.freeze(ent); }; deepFreeze(inDesc.sdInfo); each(inDesc.graph, (entity) => entFreeze(entity)); Object.freeze(inDesc.graph); each(inDesc.items, (item) => Object.freeze(item)); Object.freeze(inDesc.items); Object.freeze(inDesc.lang); Object.freeze(inDesc); } //# sourceMappingURL=general.js.map