UNPKG

@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
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; } }