Spaces:
Running
Running
File size: 1,093 Bytes
30c32c8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
const uid = require('./uid');
/**
* Mutate the given blocks to have new IDs and update all internal ID references.
* Does not return anything to make it clear that the blocks are updated in-place.
* @param {array} blocks - blocks to be mutated.
*/
module.exports = blocks => {
const oldToNew = {};
// First update all top-level IDs and create old-to-new mapping
for (let i = 0; i < blocks.length; i++) {
const newId = uid();
const oldId = blocks[i].id;
blocks[i].id = oldToNew[oldId] = newId;
}
// Then go back through and update inputs (block/shadow)
// and next/parent properties
for (let i = 0; i < blocks.length; i++) {
for (const key in blocks[i].inputs) {
const input = blocks[i].inputs[key];
input.block = oldToNew[input.block];
input.shadow = oldToNew[input.shadow];
}
if (blocks[i].parent) {
blocks[i].parent = oldToNew[blocks[i].parent];
}
if (blocks[i].next) {
blocks[i].next = oldToNew[blocks[i].next];
}
}
};
|