{"version":3,"file":"index.umd.production.min.cjs","sources":["../src/trie.ts","../src/index.ts"],"sourcesContent":["export class Trie<T = any>\n{\n\tnext: {\n\t\t[k: string]: Trie<T>\n\t} = {};\n\tis_word: boolean = null;\n\tvalue: string = null;\n\tdata: T[] = [];\n\n\tfail?: Trie<T>\n\n\t//fail?: Trie = null;\n\n\tadd(word: string, data?: T, original_word?: string): boolean\n\t{\n\t\tlet chr: string, node: Trie;\n\t\tchr = word.charAt(0);\n\t\tnode = this.next[chr];\n\t\tif (!node)\n\t\t{\n\t\t\tnode = this.next[chr] = new Trie();\n\t\t\tif (original_word)\n\t\t\t{\n\t\t\t\tnode.value = original_word.substr(0, original_word.length - word.length + 1);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tnode.value = chr;\n\t\t\t}\n\t\t}\n\t\tif (word.length > 1)\n\t\t{\n\t\t\treturn node.add(word.substring(1), data, original_word || word);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tnode.data.push(data);\n\t\t\treturn node.is_word = true;\n\t\t}\n\t}\n\n\texplore_fail_link(word: string)\n\t{\n\t\tlet chr, i, node: Trie<T>, _i, _ref;\n\t\tnode = this;\n\t\tfor (i = _i = 0, _ref = word.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i)\n\t\t{\n\t\t\tchr = word.charAt(i);\n\t\t\tnode = node.next[chr];\n\t\t\tif (!node)\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\treturn node;\n\t}\n\n\teach_node(callback: (trie: this, node: Trie<T>) => void)\n\t{\n\t\tlet node, _k, _ref, _ref1;\n\t\t_ref = this.next;\n\t\tfor (_k in _ref)\n\t\t{\n\t\t\tnode = _ref[_k];\n\t\t\tcallback(this, node);\n\t\t}\n\t\t_ref1 = this.next;\n\t\tfor (_k in _ref1)\n\t\t{\n\t\t\tnode = _ref1[_k];\n\t\t\tnode.each_node(callback);\n\t\t}\n\t\treturn this;\n\t}\n}\n\nexport default Trie\n","import { Trie } from './trie';\nimport { IAhoCorasickResult, IAhoCorasickCallback } from './types';\n\nexport { Trie };\n\nexport class AhoCorasick<T = any>\n{\n\ttrie: Trie<T> = new Trie();\n\n\tadd(word: string, data?: T)\n\t{\n\t\treturn this.trie.add(word, data);\n\t}\n\n\tbuild_fail(node?: Trie<T>)\n\t{\n\t\tlet _k, fail_node, i, j, ref, ref1, sub_node;\n\t\tnode = node || this.trie;\n\t\tnode.fail = null;\n\t\tif (node.value)\n\t\t{\n\t\t\tfor (i = j = 1, ref = node.value.length; 1 <= ref ? j < ref : j > ref; i = 1 <= ref ? ++j : --j)\n\t\t\t{\n\t\t\t\tfail_node = this.trie.explore_fail_link(node.value.substring(i));\n\t\t\t\tif (fail_node)\n\t\t\t\t{\n\t\t\t\t\tnode.fail = fail_node;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tref1 = node.next;\n\t\tfor (_k in ref1)\n\t\t{\n\t\t\tsub_node = ref1[_k];\n\t\t\tthis.build_fail(sub_node);\n\t\t}\n\t\treturn this;\n\t}\n\n\tforeach_match(node: Trie<T>, pos: number, callback: IAhoCorasickCallback<T>)\n\t{\n\t\tlet offset: number;\n\t\twhile (node)\n\t\t{\n\t\t\tif (node.is_word)\n\t\t\t{\n\t\t\t\toffset = pos - node.value.length;\n\t\t\t\tcallback(node.value, node.data, offset, node);\n\t\t\t}\n\t\t\tnode = node.fail;\n\t\t}\n\t\treturn this;\n\t}\n\n\tsearch(string: string, callback?: IAhoCorasickCallback<T>): IAhoCorasickResult<T>;\n\tsearch<R = IAhoCorasickResult<T>>(string: string, callback?: IAhoCorasickCallback<T>): R;\n\tsearch(string: string, callback?: IAhoCorasickCallback<T>)\n\t{\n\t\t/**\n\t\t * 參考 aca 回傳的資料結構\n\t\t * @see https://www.npmjs.com/package/aca\n\t\t */\n\t\tconst result: IAhoCorasickResult<T> = {\n\t\t\tmatches: {},\n\t\t\tpositions: {},\n\t\t\tcount: {},\n\t\t\tdata: {},\n\t\t};\n\n\t\tlet callbackResult: IAhoCorasickCallback<T>;\n\n\t\tif (callback)\n\t\t{\n\t\t\tcallbackResult = function (...argv)\n\t\t\t{\n\t\t\t\tconst [value, data, offset, node] = argv;\n\n\t\t\t\tresult.matches[value] = result.matches[value] || [];\n\n\t\t\t\tresult.matches[value].push(offset);\n\n\t\t\t\tresult.positions[offset] = result.positions[offset] || [];\n\t\t\t\tresult.positions[offset].push(value);\n\n\t\t\t\tif (result.count[value] == null)\n\t\t\t\t{\n\t\t\t\t\tresult.count[value] = 0;\n\t\t\t\t}\n\n\t\t\t\tresult.count[value]++;\n\n\t\t\t\tresult.data[value] = node.data;\n\n\t\t\t\t// @ts-ignore\n\t\t\t\tcallback.call(result, ...argv);\n\t\t\t};\n\t\t}\n\t\telse\n\t\t{\n\t\t\tcallbackResult = function (...argv)\n\t\t\t{\n\t\t\t\tconst [value, data, offset, node] = argv;\n\n\t\t\t\tresult.matches[value] = result.matches[value] || [];\n\n\t\t\t\tresult.matches[value].push(offset);\n\n\t\t\t\tresult.positions[offset] = result.positions[offset] || [];\n\t\t\t\tresult.positions[offset].push(value);\n\n\t\t\t\tif (result.count[value] == null)\n\t\t\t\t{\n\t\t\t\t\tresult.count[value] = 0;\n\t\t\t\t}\n\n\t\t\t\tresult.count[value]++;\n\n\t\t\t\tresult.data[value] = node.data;\n\t\t\t};\n\t\t}\n\n\t\tlet chr, current, idx, j, ref;\n\t\tcurrent = this.trie;\n\t\tfor (idx = j = 0, ref = string.length; 0 <= ref ? j < ref : j > ref; idx = 0 <= ref ? ++j : --j)\n\t\t{\n\t\t\tchr = string.charAt(idx);\n\t\t\twhile (current && !current.next[chr])\n\t\t\t{\n\t\t\t\tcurrent = current.fail;\n\t\t\t}\n\t\t\tif (!current)\n\t\t\t{\n\t\t\t\tcurrent = this.trie;\n\t\t\t}\n\t\t\tif (current.next[chr])\n\t\t\t{\n\t\t\t\tcurrent = current.next[chr];\n\n\t\t\t\tthis.foreach_match(current, idx + 1, callbackResult);\n\t\t\t}\n\t\t}\n\n\t\t// @ts-ignore\n\t\treturn result;\n\t}\n\n\tto_dot(): string\n\t{\n\t\tlet dot, fail_cb, last_chr, link_cb, v_;\n\t\tdot = ['digraph Trie {'];\n\t\tv_ = function (node)\n\t\t{\n\t\t\tif (node && node.value)\n\t\t\t{\n\t\t\t\treturn `\"${node.value}\"`;\n\t\t\t}\n\n\t\t\t\treturn \"\\\"\\\"\";\n\n\t\t};\n\t\tlast_chr = function (str)\n\t\t{\n\t\t\tif (str)\n\t\t\t{\n\t\t\t\treturn str.charAt(str.length - 1);\n\t\t\t}\n\t\t};\n\t\tlink_cb = function (from, to)\n\t\t{\n\t\t\tlet k, option, to_label, to_opt, v;\n\t\t\tto_label = last_chr(to.value);\n\t\t\tto_opt = [`label = \"${to_label}\"`];\n\t\t\tif (to.is_word)\n\t\t\t{\n\t\t\t\toption = {\n\t\t\t\t\tstyle: 'filled',\n\t\t\t\t\tcolor: 'skyblue'\n\t\t\t\t};\n\t\t\t\tfor (k in option)\n\t\t\t\t{\n\t\t\t\t\tv = option[k];\n\t\t\t\t\tto_opt.push(`${k} = \"${v}\"`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tdot.push(`${v_(from)} -> ${v_(to)};`);\n\t\t\tdot.push(`${v_(to)} [ ${to_opt.join(',')} ];`);\n\t\t\treturn fail_cb(from, to);\n\t\t};\n\t\tfail_cb = function (from, to)\n\t\t{\n\t\t\tlet style;\n\t\t\t[from, to] = [to, to.fail];\n\t\t\tstyle = to ? 'dashed' : 'dotted';\n\t\t\treturn dot.push(`${v_(from)} -> ${v_(to)} [ style = \"${style}\" ];`);\n\t\t};\n\t\tthis.trie.each_node(link_cb);\n\t\tdot.push('}');\n\t\treturn dot.join(\"\\n\");\n\t}\n}\n\n// @ts-ignore\nif (process.env.TSDX_FORMAT !== 'esm')\n{\n\tObject.defineProperty(AhoCorasick, \"__esModule\", { value: true });\n\n\tObject.defineProperty(AhoCorasick, 'AhoCorasick', { value: AhoCorasick });\n\tObject.defineProperty(AhoCorasick, 'default', { value: AhoCorasick });\n\n\tObject.defineProperty(AhoCorasick, 'Trie', { value: Trie });\n}\n\nexport default AhoCorasick;\n"],"names":["Trie","next","is_word","value","data","add","word","original_word","chr","node","charAt","this","substr","length","substring","push","explore_fail_link","i","_i","_ref","each_node","callback","_k","_ref1","AhoCorasick","trie","build_fail","fail_node","j","ref","ref1","sub_node","fail","foreach_match","pos","offset","search","string","result","matches","positions","count","callbackResult","current","idx","argv","call","to_dot","dot","fail_cb","last_chr","link_cb","v_","str","from","to","k","option","to_label","to_opt","v","style","color","join","Object","defineProperty"],"mappings":"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"}