sdj-esm
Version:
Self Described JSON - ESM
104 lines • 3.8 kB
JavaScript
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