Spaces:
Runtime error
Runtime error
| ; | |
| Object.defineProperty(exports, "__esModule", { value: true }); | |
| exports.createComplexNode = exports.createNode = exports.merge = void 0; | |
| const createMatch = (leaf) => ({ | |
| typename: leaf.typename, | |
| mime: leaf.info.mime, | |
| extension: leaf.info.extension, | |
| }); | |
| const isMatchingNode = (tree, path) => tree && path.length === 0; | |
| const head = (arr) => arr[0]; | |
| const tail = (arr) => arr.slice(1, arr.length); | |
| const merge = (node, tree) => { | |
| if (node.bytes.length === 0) | |
| return tree; | |
| const currentByte = head(node.bytes); // 0 | |
| const path = tail(node.bytes); // [1,2] | |
| const currentTree = tree.bytes[currentByte]; | |
| // traversed to end. Just add key to leaf. | |
| if (isMatchingNode(currentTree, path)) { | |
| const matchingNode = tree.bytes[currentByte]; | |
| tree.bytes[currentByte] = { | |
| ...matchingNode, | |
| matches: [ | |
| ...(matchingNode.matches ? matchingNode.matches : []), | |
| createMatch(node), | |
| ], | |
| }; | |
| return tree; | |
| } | |
| // Path exists already, Merge subtree | |
| if (tree.bytes[currentByte]) { | |
| tree.bytes[currentByte] = exports.merge(exports.createNode(node.typename, path, node.info), tree.bytes[currentByte]); | |
| return tree; | |
| } | |
| // Tree did not exist before | |
| if (!tree.bytes[currentByte]) { | |
| tree.bytes[currentByte] = { | |
| ...tree.bytes[currentByte], | |
| ...exports.createComplexNode(node.typename, path, node.info), | |
| }; | |
| } | |
| return tree; | |
| }; | |
| exports.merge = merge; | |
| const createNode = (typename, bytes, info) => { | |
| return { typename, bytes, info: info ? info : {} }; | |
| }; | |
| exports.createNode = createNode; | |
| const createComplexNode = (typename, bytes, info) => { | |
| let obj = { | |
| bytes: {}, | |
| matches: undefined, | |
| }; | |
| const currentKey = head(bytes); // 0 | |
| const path = tail(bytes); // [1,2] | |
| if (bytes.length === 0) { | |
| return { | |
| matches: [ | |
| createMatch({ | |
| typename: typename, | |
| info: info ? { extension: info.extension, mime: info.mime } : {}, | |
| }), | |
| ], | |
| bytes: {}, | |
| }; | |
| } | |
| obj.bytes[currentKey] = exports.createComplexNode(typename, path, info); | |
| return obj; | |
| }; | |
| exports.createComplexNode = createComplexNode; | |