import { isWord } from '../util/character' interface TrieInput { [key: string]: T } export type Trie = { data?: T end?: true needBoundary?: true } & Record export function createTrie (input: TrieInput): Trie { const trie: Trie = {} for (const [name, data] of Object.entries(input)) { let node = trie for (let i = 0; i < name.length; i++) { const c = name[i] node[c] = node[c] || {} if (i === name.length - 1 && isWord(name[i])) { node[c].needBoundary = true } node = node[c] } node.data = data node.end = true } return trie }