mirror of
https://gitlab.com/upRootNutrition/zookeeper.git
synced 2025-06-16 18:35:13 -05:00
feat: init
This commit is contained in:
parent
8379d09058
commit
2cfa016090
2929 changed files with 299087 additions and 3 deletions
70
node_modules/magic-bytes.js/dist/model/tree.js
generated
vendored
Normal file
70
node_modules/magic-bytes.js/dist/model/tree.js
generated
vendored
Normal file
|
@ -0,0 +1,70 @@
|
|||
"use strict";
|
||||
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;
|
Loading…
Add table
Add a link
Reference in a new issue