@comyata/fe
Version:
Execute YAML and JSON files like programs and get clean data to work with as result.
50 lines (49 loc) • 1.1 kB
JavaScript
export class TrieNode {
/**
* Map of character to child node
*/
constructor(resolver = null) {
this.resolver = resolver;
this.children = new Map();
}
}
export class Importers {
constructor(rootNode = new TrieNode()) {
this.root = rootNode;
}
use(resolver) {
resolver.scopes.forEach(scope => {
this.insert(scope, resolver);
});
return this;
}
insert(scope, resolver) {
let node = this.root;
for (let i = 0; i < scope.length; i++) {
const char = scope[i];
let nextNode = node.children.get(char);
if (!nextNode) {
nextNode = new TrieNode();
node.children.set(char, nextNode);
}
node = nextNode;
}
node.resolver = resolver;
return this;
}
match(scope) {
let node = this.root;
let lastResolver = node.resolver;
for (let i = 0; i < scope.length; i++) {
const char = scope[i];
node = node.children.get(char);
if (!node) {
break;
}
if (node.resolver) {
lastResolver = node.resolver;
}
}
return lastResolver;
}
}