@gmetrixr/rjson
Version:
(R)ecursive Json
37 lines (36 loc) • 1.27 kB
JavaScript
import { R, r, en, rtp, RT } from "../../../r";
/**
* Changes the phrases property in speech element into items
*/
class Migration {
execute(projectJson) {
const pJson = projectJson;
const projectF = r.record(pJson);
projectF.getAllDeepChildren(RT.element).forEach(e => {
if (e.props.element_type === en.ElementType.speech) {
// phrases is a map
const phrases = e.props.phrases;
let i = 0;
for (const phraseItem of Object.values(phrases)) {
i = i + 1;
//Need the id to be deterministic for test cases
const item = R.createRecord(RT.item, e.id + 100002 + i);
item.props.phrase_id = phraseItem.phrase_id;
item.props.phrase = phraseItem.phrase;
item.props.aliases = phraseItem.aliases;
r.element(e).addRecord(item);
}
delete e.props.phrases;
}
});
projectF.set(rtp.project.version, 102);
}
}
const migration = new Migration();
export default migration;
//REFERENCE:
// export interface Phrase {
// phrase: string,
// aliases: string[],
// phrase_id: number
// }