@gmetrixr/rjson
Version:
(R)ecursive Json
254 lines (253 loc) • 10.9 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.migrateElement = void 0;
const r_1 = require("../../../r");
const gdash_1 = require("@gmetrixr/gdash");
/**
* @description Converts t type project json to r type project json
*/
class Migration {
execute(projectJson) {
return migrateProject(projectJson);
}
}
const migration = new Migration();
exports.default = migration;
const migrateProject = (tProject) => {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
const projectJson = (0, r_1.createRecord)(r_1.RT.project, r_1.R.SINGLE_RECORD_ID);
const projectF = r_1.r.record(projectJson);
if (tProject.scenes === undefined) {
const sceneR = (0, r_1.createRecord)(r_1.RT.scene, 100111);
projectF.addRecord(sceneR);
}
if (tProject.pp !== undefined) {
if (((_a = tProject.pp) === null || _a === void 0 ? void 0 : _a.scenes_order) !== undefined) {
const scenes_order = (_b = tProject.pp) === null || _b === void 0 ? void 0 : _b.scenes_order;
for (const sceneId of scenes_order) {
const tScene = tProject === null || tProject === void 0 ? void 0 : tProject.scenes[sceneId];
if (tScene !== undefined) {
const scene = migrateScene(tScene);
projectF.addRecord(scene);
}
}
(_c = tProject === null || tProject === void 0 ? void 0 : tProject.pp) === null || _c === void 0 ? true : delete _c.scenes_order;
}
if (((_d = tProject.pp) === null || _d === void 0 ? void 0 : _d.vars_order) !== undefined) {
const vars_order = (_e = tProject === null || tProject === void 0 ? void 0 : tProject.pp) === null || _e === void 0 ? void 0 : _e.vars_order;
for (const varId of vars_order) {
const tVar = tProject === null || tProject === void 0 ? void 0 : tProject.vars[varId];
if (tVar !== undefined) {
const varJson = migrateVar(tVar);
projectF.addRecord(varJson);
}
}
delete tProject.pp.vars_order;
}
if (((_f = tProject.pp) === null || _f === void 0 ? void 0 : _f.menu_structure) !== undefined) {
const menu_structure = (_g = tProject === null || tProject === void 0 ? void 0 : tProject.pp) === null || _g === void 0 ? void 0 : _g.menu_structure;
for (const tMenu of menu_structure) {
const menu = migrateMenu(tMenu);
projectF.addRecord(menu);
}
(_h = tProject === null || tProject === void 0 ? void 0 : tProject.pp) === null || _h === void 0 ? true : delete _h.menu_structure;
}
if (tProject.shopping !== undefined) {
const shopping = migrateShopping(tProject === null || tProject === void 0 ? void 0 : tProject.shopping);
projectF.addRecord(shopping);
}
if (((_j = tProject.pp.lead_gen_fields) === null || _j === void 0 ? void 0 : _j.heading) !== undefined) {
projectF.set(r_1.rtp.project.lead_gen_heading, (_k = tProject.pp.lead_gen_fields) === null || _k === void 0 ? void 0 : _k.heading);
}
if (((_l = tProject.pp.lead_gen_fields) === null || _l === void 0 ? void 0 : _l.termsOfServiceLink) !== undefined) {
projectF.set(r_1.rtp.project.lead_gen_tos, (_m = tProject.pp.lead_gen_fields) === null || _m === void 0 ? void 0 : _m.termsOfServiceLink);
}
if (((_o = tProject.pp.lead_gen_fields) === null || _o === void 0 ? void 0 : _o.order) !== undefined) {
const order = (_q = (_p = tProject === null || tProject === void 0 ? void 0 : tProject.pp) === null || _p === void 0 ? void 0 : _p.lead_gen_fields) === null || _q === void 0 ? void 0 : _q.order;
for (const leadGenFieldId of order) {
const tLeadGenField = tProject.pp.lead_gen_fields.map[leadGenFieldId];
const leadGenField = migrateLeadGenField(tLeadGenField);
projectF.addRecord(leadGenField);
}
}
(_r = tProject.pp) === null || _r === void 0 ? true : delete _r.lead_gen_fields;
projectJson.props = { ...projectJson === null || projectJson === void 0 ? void 0 : projectJson.props, ...tProject === null || tProject === void 0 ? void 0 : tProject.pp };
}
projectF.set(r_1.rtp.project.version, 100);
return projectJson;
};
const migrateLeadGenField = (tLeadGenField) => {
const leadGenField = (0, r_1.createRecord)(r_1.RT.lead_gen_field, tLeadGenField.id, tLeadGenField.name);
delete tLeadGenField.id;
delete tLeadGenField.name;
leadGenField.props = tLeadGenField;
return leadGenField;
};
// export interface Menu {
// name: string,
// show: boolean,
// scene_no: number
// }
const migrateMenu = (tMenu) => {
//ids kept deterministic (but unique) for test cases
const menu = (0, r_1.createRecord)(r_1.RT.menu, tMenu.scene_no + 100000);
menu.props.menu_scene_id = tMenu.scene_no;
if (tMenu.name !== undefined)
menu.props.menu_display_name = tMenu.name;
if (tMenu.show !== undefined)
menu.props.menu_show = tMenu.show;
return menu;
};
const migrateVar = (tVar) => {
const id = tVar.var_id;
const name = tVar.var_name;
delete tVar.var_id;
delete tVar.var_name;
const varJson = (0, r_1.createRecord)(r_1.RT.variable, id, name);
varJson.props = tVar;
return varJson;
};
const migrateShopping = (tShopping) => {
const shoppingJson = (0, r_1.createRecord)(r_1.RT.shopping, r_1.R.SINGLE_RECORD_ID);
const shoppingF = r_1.r.record(shoppingJson);
for (const productId of tShopping.products.order) {
const tProduct = tShopping.products.map[productId];
const product = (0, r_1.createRecord)(r_1.RT.product, productId);
delete tProduct.id;
tProduct.scene_id = tProduct.scene_no;
delete tProduct.scene_no;
product.props = tProduct;
shoppingF.addRecord(product);
}
delete tShopping.id;
shoppingJson.props = tShopping.shp;
return shoppingJson;
};
const migrateScene = (tScene) => {
const id = tScene.sp.scene_no;
const name = tScene.sp.scene_name;
delete tScene.sp.scene_no;
delete tScene.sp.scene_name;
const sceneJson = (0, r_1.createRecord)(r_1.RT.scene, id, name);
const sceneF = r_1.r.record(sceneJson);
for (const elementId of tScene.sp.elements_order) {
const tElement = tScene.elements[elementId];
const element = (0, exports.migrateElement)(tElement);
sceneF.addRecord(element);
}
delete tScene.sp.elements_order;
for (const ruleId of tScene.sp.connections_order) {
const tRule = tScene.connections[ruleId];
const rule = migrateRule(tRule);
sceneF.addRecord(rule);
}
delete tScene.sp.connections_order;
sceneJson.props = tScene.sp;
return sceneJson;
};
const migrateElement = (tElement) => {
const id = tElement.ep.element_id;
const name = tElement.ep.element_name;
delete tElement.ep.element_id;
delete tElement.ep.element_name;
const element = (0, r_1.createRecord)(r_1.RT.element, id, name);
const elementF = r_1.r.record(element);
if (tElement.ep.elements_order) {
for (const subElementId of tElement.ep.elements_order) {
const subtElement = tElement.ep.elements[subElementId];
if (subtElement !== undefined) {
const subElement = (0, exports.migrateElement)(subtElement);
elementF.addRecord(subElement);
}
}
delete tElement.ep.elements_order;
delete tElement.ep.elements;
}
if (tElement.ep.items_order) {
for (const itemId of tElement.ep.items_order) {
const tItem = tElement.ep.items[itemId];
if (tItem !== undefined) {
const item = migrateItem(tItem);
elementF.addRecord(item);
}
}
delete tElement.ep.items_order;
delete tElement.ep.items;
}
//const elementF = new NodeFactory(element);
element.props = tElement.ep;
return element;
};
exports.migrateElement = migrateElement;
const migrateItem = (tItem) => {
const id = tItem.id;
const name = tItem.name;
const item = (0, r_1.createRecord)(r_1.RT.item, id, name);
const itemF = r_1.r.record(item);
delete tItem.id;
delete tItem.name;
if (tItem.options_order) {
for (const optionId of tItem.options_order) {
const tOption = tItem.options[optionId];
if (tOption !== undefined) {
const option = (0, r_1.createRecord)(r_1.RT.option, optionId);
option.props.is_checked = tOption.is_checked;
option.props.option_text = tOption.text;
itemF.addRecord(option);
}
}
delete tItem.options_order;
delete tItem.options;
}
item.props = tItem;
// * if item props contain `source` prop, rename to `item_source`
if ("source" in item.props) {
item.props["item_source"] = gdash_1.jsUtils.deepClone(item.props.source);
delete item.props.source;
}
return item;
};
const migrateRule = (tRule) => {
const id = tRule.cp.connection_id;
const name = tRule.cp.connection_name;
delete tRule.cp.connection_id;
delete tRule.cp.connection_name;
const rule = (0, r_1.createRecord)(r_1.RT.rule, id, name);
const ruleF = r_1.r.record(rule);
for (const id of tRule.cp.we_order) {
const tWhenEvent = tRule.when_events[id];
if (tWhenEvent === undefined) {
console.log(`Data was corrupt. Couldn't find when event with id ${id}. Skipping it.`);
continue;
}
const whenEvent = migrateWhenEvent(tWhenEvent);
ruleF.addRecord(whenEvent);
}
delete tRule.cp.we_order;
for (const id of tRule.cp.ta_order) {
const tThenAction = tRule.then_actions[id];
if (tThenAction === undefined) {
console.log(`Data was corrupt. Couldn't find then action with id ${id}. Skipping it.`);
continue;
}
const thenAction = migrateThenAction(tThenAction);
ruleF.addRecord(thenAction);
}
delete tRule.cp.ta_order;
rule.props = tRule.cp;
return rule;
};
const migrateWhenEvent = (tWhenEvent) => {
const id = tWhenEvent.event_id;
delete tWhenEvent.event_id;
const whenEvent = (0, r_1.createRecord)(r_1.RT.when_event, id);
whenEvent.props = tWhenEvent;
return whenEvent;
};
const migrateThenAction = (tThenAction) => {
const id = tThenAction.action_id;
delete tThenAction.action_id;
const thenAction = (0, r_1.createRecord)(r_1.RT.then_action, id);
thenAction.props = tThenAction;
return thenAction;
};