foxts 1.7.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/add-array-elements-to-set.js +2 -0
- package/dist/cjs/add-array-elements-to-set.js.map +1 -0
- package/dist/cjs/ahocorasick.js +2 -0
- package/dist/cjs/ahocorasick.js.map +1 -0
- package/dist/cjs/append-set-elements-to-array.js +2 -0
- package/dist/cjs/append-set-elements-to-array.js.map +1 -0
- package/dist/cjs/async-write-to-stream.js +2 -0
- package/dist/cjs/async-write-to-stream.js.map +1 -0
- package/dist/cjs/bitwise.js +2 -0
- package/dist/cjs/bitwise.js.map +1 -0
- package/dist/cjs/create-fixed-array.js +2 -0
- package/dist/cjs/create-fixed-array.js.map +1 -0
- package/dist/cjs/detect-eol.js +2 -0
- package/dist/cjs/detect-eol.js.map +1 -0
- package/dist/cjs/escape-html.js +2 -0
- package/dist/cjs/escape-html.js.map +1 -0
- package/dist/cjs/escape-string-regexp.js +2 -0
- package/dist/cjs/escape-string-regexp.js.map +1 -0
- package/dist/cjs/fast-string-array-join.js +2 -0
- package/dist/cjs/fast-string-array-join.js.map +1 -0
- package/dist/cjs/fifo.js +2 -0
- package/dist/cjs/fifo.js.map +1 -0
- package/dist/cjs/fnv1a.js +2 -0
- package/dist/cjs/fnv1a.js.map +1 -0
- package/dist/cjs/fnv1a52.js +2 -0
- package/dist/cjs/fnv1a52.js.map +1 -0
- package/dist/cjs/guard.js +2 -0
- package/dist/cjs/guard.js.map +1 -0
- package/{headers-to-object/index.d.ts → dist/cjs/headers-to-object.d.ts} +1 -1
- package/dist/cjs/headers-to-object.js +2 -0
- package/dist/cjs/headers-to-object.js.map +1 -0
- package/dist/cjs/identity.js +2 -0
- package/dist/cjs/identity.js.map +1 -0
- package/dist/cjs/is-probably-ip.js +2 -0
- package/dist/cjs/is-probably-ip.js.map +1 -0
- package/dist/cjs/merge-headers.js +2 -0
- package/dist/cjs/merge-headers.js.map +1 -0
- package/dist/cjs/noop.js +2 -0
- package/dist/cjs/noop.js.map +1 -0
- package/dist/cjs/once.js +2 -0
- package/dist/cjs/once.js.map +1 -0
- package/{pick-random/index.d.ts → dist/cjs/pick-random.d.ts} +1 -2
- package/dist/cjs/pick-random.js +2 -0
- package/dist/cjs/pick-random.js.map +1 -0
- package/{random-int/index.d.ts → dist/cjs/random-int.d.ts} +1 -2
- package/dist/cjs/random-int.js +2 -0
- package/dist/cjs/random-int.js.map +1 -0
- package/dist/cjs/repool.js +2 -0
- package/dist/cjs/repool.js.map +1 -0
- package/{retrie/index.d.ts → dist/cjs/retrie.d.ts} +2 -2
- package/dist/cjs/retrie.js +2 -0
- package/dist/cjs/retrie.js.map +1 -0
- package/dist/cjs/serialized-memo.js +2 -0
- package/dist/cjs/serialized-memo.js.map +1 -0
- package/dist/cjs/simple-string-hash.js +2 -0
- package/dist/cjs/simple-string-hash.js.map +1 -0
- package/dist/cjs/tagged.js +2 -0
- package/dist/cjs/tagged.js.map +1 -0
- package/dist/cjs/text-line-stream.js +2 -0
- package/dist/cjs/text-line-stream.js.map +1 -0
- package/dist/cjs/wait.js +2 -0
- package/dist/cjs/wait.js.map +1 -0
- package/dist/es/add-array-elements-to-set.d.mts +3 -0
- package/dist/es/add-array-elements-to-set.mjs +2 -0
- package/dist/es/add-array-elements-to-set.mjs.map +1 -0
- package/dist/es/ahocorasick.d.mts +3 -0
- package/dist/es/ahocorasick.mjs +2 -0
- package/dist/es/ahocorasick.mjs.map +1 -0
- package/dist/es/append-set-elements-to-array.d.mts +3 -0
- package/dist/es/append-set-elements-to-array.mjs +2 -0
- package/dist/es/append-set-elements-to-array.mjs.map +1 -0
- package/dist/es/async-write-to-stream.d.mts +18 -0
- package/dist/es/async-write-to-stream.mjs +2 -0
- package/dist/es/async-write-to-stream.mjs.map +1 -0
- package/dist/es/bitwise.d.mts +30 -0
- package/dist/es/bitwise.mjs +2 -0
- package/dist/es/bitwise.mjs.map +1 -0
- package/dist/es/create-fixed-array.d.mts +6 -0
- package/dist/es/create-fixed-array.mjs +2 -0
- package/dist/es/create-fixed-array.mjs.map +1 -0
- package/dist/es/detect-eol.d.mts +3 -0
- package/dist/es/detect-eol.mjs +2 -0
- package/dist/es/detect-eol.mjs.map +1 -0
- package/dist/es/escape-html.d.mts +3 -0
- package/dist/es/escape-html.mjs +2 -0
- package/dist/es/escape-html.mjs.map +1 -0
- package/dist/es/escape-string-regexp.d.mts +7 -0
- package/dist/es/escape-string-regexp.mjs +2 -0
- package/dist/es/escape-string-regexp.mjs.map +1 -0
- package/dist/es/fast-string-array-join.d.mts +6 -0
- package/dist/es/fast-string-array-join.mjs +2 -0
- package/dist/es/fast-string-array-join.mjs.map +1 -0
- package/dist/es/fifo.d.mts +18 -0
- package/dist/es/fifo.mjs +2 -0
- package/dist/es/fifo.mjs.map +1 -0
- package/dist/es/fnv1a.d.mts +3 -0
- package/{fnv1a/index.mjs → dist/es/fnv1a.mjs} +2 -1
- package/dist/es/fnv1a.mjs.map +1 -0
- package/dist/es/fnv1a52.d.mts +12 -0
- package/dist/es/fnv1a52.mjs +2 -0
- package/dist/es/fnv1a52.mjs.map +1 -0
- package/dist/es/guard.d.mts +20 -0
- package/dist/es/guard.mjs +2 -0
- package/dist/es/guard.mjs.map +1 -0
- package/dist/es/headers-to-object.d.mts +5 -0
- package/dist/es/headers-to-object.mjs +2 -0
- package/dist/es/headers-to-object.mjs.map +1 -0
- package/dist/es/identity.d.mts +3 -0
- package/dist/es/identity.mjs +2 -0
- package/dist/es/identity.mjs.map +1 -0
- package/dist/es/is-probably-ip.d.mts +8 -0
- package/dist/es/is-probably-ip.mjs +2 -0
- package/dist/es/is-probably-ip.mjs.map +1 -0
- package/dist/es/merge-headers.d.mts +8 -0
- package/dist/es/merge-headers.mjs +2 -0
- package/dist/es/merge-headers.mjs.map +1 -0
- package/dist/es/noop.d.mts +11 -0
- package/dist/es/noop.mjs +2 -0
- package/dist/es/noop.mjs.map +1 -0
- package/dist/es/once.d.mts +3 -0
- package/{once/index.mjs → dist/es/once.mjs} +2 -1
- package/dist/es/once.mjs.map +1 -0
- package/dist/es/pick-random.d.mts +9 -0
- package/dist/es/pick-random.mjs +2 -0
- package/dist/es/pick-random.mjs.map +1 -0
- package/dist/es/random-int.d.mts +7 -0
- package/dist/es/random-int.mjs +2 -0
- package/dist/es/random-int.mjs.map +1 -0
- package/dist/es/repool.d.mts +18 -0
- package/dist/es/repool.mjs +2 -0
- package/dist/es/repool.mjs.map +1 -0
- package/dist/es/retrie.d.mts +17 -0
- package/dist/es/retrie.mjs +2 -0
- package/dist/es/retrie.mjs.map +1 -0
- package/dist/es/serialized-memo.d.mts +55 -0
- package/dist/es/serialized-memo.mjs +2 -0
- package/dist/es/serialized-memo.mjs.map +1 -0
- package/dist/es/simple-string-hash.d.mts +3 -0
- package/dist/es/simple-string-hash.mjs +2 -0
- package/dist/es/simple-string-hash.mjs.map +1 -0
- package/dist/es/tagged.d.mts +6 -0
- package/{tagged/index.mjs → dist/es/tagged.mjs} +2 -1
- package/dist/es/tagged.mjs.map +1 -0
- package/dist/es/text-line-stream.d.mts +22 -0
- package/dist/es/text-line-stream.mjs +2 -0
- package/dist/es/text-line-stream.mjs.map +1 -0
- package/dist/es/wait.d.mts +4 -0
- package/dist/es/wait.mjs +2 -0
- package/dist/es/wait.mjs.map +1 -0
- package/package.json +244 -178
- package/add-array-elements-to-set/index.cjs +0 -1
- package/add-array-elements-to-set/index.mjs +0 -1
- package/ahocorasick/index.cjs +0 -1
- package/ahocorasick/index.mjs +0 -1
- package/append-set-elements-to-array/index.cjs +0 -1
- package/append-set-elements-to-array/index.mjs +0 -1
- package/async-write-to-stream/index.cjs +0 -1
- package/async-write-to-stream/index.mjs +0 -1
- package/bitwise/index.cjs +0 -1
- package/bitwise/index.mjs +0 -1
- package/create-fixed-array/index.cjs +0 -1
- package/create-fixed-array/index.mjs +0 -1
- package/detect-eol/index.cjs +0 -1
- package/detect-eol/index.mjs +0 -1
- package/escape-html/index.cjs +0 -1
- package/escape-html/index.mjs +0 -1
- package/escape-string-regexp/index.cjs +0 -1
- package/escape-string-regexp/index.mjs +0 -1
- package/fast-string-array-join/index.cjs +0 -1
- package/fast-string-array-join/index.mjs +0 -1
- package/fifo/index.cjs +0 -1
- package/fifo/index.mjs +0 -1
- package/fnv1a/index.cjs +0 -1
- package/fnv1a52/index.cjs +0 -1
- package/fnv1a52/index.mjs +0 -1
- package/guard/index.cjs +0 -1
- package/guard/index.mjs +0 -1
- package/headers-to-object/index.cjs +0 -1
- package/headers-to-object/index.mjs +0 -1
- package/identity/index.cjs +0 -1
- package/identity/index.mjs +0 -1
- package/is-probably-ip/index.cjs +0 -1
- package/is-probably-ip/index.mjs +0 -1
- package/merge-headers/index.cjs +0 -1
- package/merge-headers/index.mjs +0 -1
- package/noop/index.cjs +0 -1
- package/noop/index.mjs +0 -1
- package/once/index.cjs +0 -1
- package/pick-random/index.cjs +0 -1
- package/pick-random/index.mjs +0 -1
- package/random-int/index.cjs +0 -1
- package/random-int/index.mjs +0 -1
- package/repool/index.cjs +0 -1
- package/repool/index.mjs +0 -1
- package/retrie/index.cjs +0 -1
- package/retrie/index.mjs +0 -1
- package/serialized-memo/index.cjs +0 -5
- package/serialized-memo/index.mjs +0 -5
- package/simple-string-hash/index.cjs +0 -1
- package/simple-string-hash/index.mjs +0 -1
- package/tagged/index.cjs +0 -1
- package/text-line-stream/index.cjs +0 -1
- package/text-line-stream/index.mjs +0 -1
- package/ts_version_4.8_and_above_is_required.d.ts +0 -0
- package/wait/index.cjs +0 -1
- package/wait/index.mjs +0 -1
- /package/{add-array-elements-to-set/index.d.ts → dist/cjs/add-array-elements-to-set.d.ts} +0 -0
- /package/{ahocorasick/index.d.ts → dist/cjs/ahocorasick.d.ts} +0 -0
- /package/{append-set-elements-to-array/index.d.ts → dist/cjs/append-set-elements-to-array.d.ts} +0 -0
- /package/{async-write-to-stream/index.d.ts → dist/cjs/async-write-to-stream.d.ts} +0 -0
- /package/{bitwise/index.d.ts → dist/cjs/bitwise.d.ts} +0 -0
- /package/{create-fixed-array/index.d.ts → dist/cjs/create-fixed-array.d.ts} +0 -0
- /package/{detect-eol/index.d.ts → dist/cjs/detect-eol.d.ts} +0 -0
- /package/{escape-html/index.d.ts → dist/cjs/escape-html.d.ts} +0 -0
- /package/{escape-string-regexp/index.d.ts → dist/cjs/escape-string-regexp.d.ts} +0 -0
- /package/{fast-string-array-join/index.d.ts → dist/cjs/fast-string-array-join.d.ts} +0 -0
- /package/{fifo/index.d.ts → dist/cjs/fifo.d.ts} +0 -0
- /package/{fnv1a/index.d.ts → dist/cjs/fnv1a.d.ts} +0 -0
- /package/{fnv1a52/index.d.ts → dist/cjs/fnv1a52.d.ts} +0 -0
- /package/{guard/index.d.ts → dist/cjs/guard.d.ts} +0 -0
- /package/{identity/index.d.ts → dist/cjs/identity.d.ts} +0 -0
- /package/{is-probably-ip/index.d.ts → dist/cjs/is-probably-ip.d.ts} +0 -0
- /package/{merge-headers/index.d.ts → dist/cjs/merge-headers.d.ts} +0 -0
- /package/{noop/index.d.ts → dist/cjs/noop.d.ts} +0 -0
- /package/{once/index.d.ts → dist/cjs/once.d.ts} +0 -0
- /package/{repool/index.d.ts → dist/cjs/repool.d.ts} +0 -0
- /package/{serialized-memo/index.d.ts → dist/cjs/serialized-memo.d.ts} +0 -0
- /package/{simple-string-hash/index.d.ts → dist/cjs/simple-string-hash.d.ts} +0 -0
- /package/{tagged/index.d.ts → dist/cjs/tagged.d.ts} +0 -0
- /package/{text-line-stream/index.d.ts → dist/cjs/text-line-stream.d.ts} +0 -0
- /package/{wait/index.d.ts → dist/cjs/wait.d.ts} +0 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as ___noop from './noop.mjs';
|
|
2
|
+
|
|
3
|
+
interface BaseTrie {
|
|
4
|
+
[key: string]: Trie;
|
|
5
|
+
}
|
|
6
|
+
type Trie = BaseTrie | {
|
|
7
|
+
'': '';
|
|
8
|
+
};
|
|
9
|
+
declare function retrie(keywords: ArrayLike<string>, asPrefixes?: boolean): {
|
|
10
|
+
tree: BaseTrie;
|
|
11
|
+
add: (keywords: string, asPrefixes: boolean) => void;
|
|
12
|
+
toString: () => string;
|
|
13
|
+
toRe: () => RegExp;
|
|
14
|
+
};
|
|
15
|
+
declare function createRetrieKeywordFilter(keywords: ArrayLike<string>, asPrefixes?: boolean): ___noop.Noop<false> | ((string: string) => boolean);
|
|
16
|
+
|
|
17
|
+
export { createRetrieKeywordFilter, retrie };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{falseFn as e}from"./noop.mjs";let t=new Set([".","?","*","+","^","$","|","(",")","{","}","[","]","\\"]);function n(e,r=!1){let l={},o=(e,t)=>{let n;let r=l;for(let l=0,o=e.length;l<o;++l)(n=e.charAt(l))in r||(r[n]=t?{"":""}:{}),r=r[n];r[""]=""};for(let t=0,n=e.length;t<n;++t)o(e[t],r);let i=()=>(function e(n){let r,l,o=!1,i=!1,u=[],f=[];for(let r in n){if(!r){o=!0;continue}((l=e(n[r]))?u:f).push(("-"===r?"\\x2d":t.has(r)?"\\"+r:r)+l)}return o&&null==l?"":(i=!u.length,f.length&&u.push(f[1]?"["+f.join("")+"]":f[0]),r=u[1]?"(?:"+u.join("|")+")":u[0],o&&(r=i?r+"?":"(?:"+r+")?"),r||"")})(l);return{tree:l,add:o,toString:i,toRe:()=>new RegExp((r?"^":"")+i())}}function r(t,l=!1){if(0===t.length)return e;let o=n(t,l).toRe();return o.test.bind(o)}export{r as createRetrieKeywordFilter,n as retrie};
|
|
2
|
+
//# sourceMappingURL=retrie.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retrie.mjs","sources":["../../src/retrie/index.ts"],"sourcesContent":["// TypeScript port of [retrie](https://github.com/satyr/retrie), which is a Coco -> JS port of [@dankogai](https://x.com/dankogai)'s [RegexpTrie](https://metacpan.org/release/DANKOGAI/Regexp-Trie-0.02/view/lib/Regexp/Trie.pm).\n\nimport { falseFn } from '../noop';\n\ninterface BaseTrie {\n [key: string]: Trie\n}\n\ntype Trie = BaseTrie | {\n '': ''\n};\n\nconst shouldEscapeChars = new Set<string>([\n '.',\n '?',\n '*',\n '+',\n '^',\n '$',\n '|',\n '(',\n ')',\n '{',\n '}',\n '[',\n ']',\n '\\\\'\n]);\n\nexport function retrie(keywords: ArrayLike<string>, asPrefixes = false) {\n const tree: Trie = {};\n\n const add = (keywords: string, asPrefixes: boolean) => {\n let keyword: string;\n let ref: Trie = tree;\n\n for (let i = 0, len = keywords.length; i < len; ++i) {\n keyword = keywords.charAt(i);\n\n if (!(keyword in ref)) {\n (ref as BaseTrie)[keyword] = asPrefixes\n ? { '': '' }\n : {};\n }\n\n ref = (ref as BaseTrie)[keyword];\n }\n\n ref[''] = '';\n };\n\n for (let i = 0, len = keywords.length; i < len; ++i) {\n add(keywords[i], asPrefixes);\n }\n\n const toString = () => {\n function recur(it: Trie): string {\n let q = false;\n let re;\n let sub: string | undefined;\n let cconly = false;\n const alt: string[] = [];\n const cc: string[] = [];\n\n // eslint-disable-next-line guard-for-in -- plain object\n for (const chr in it) {\n if (!chr) {\n q = true;\n continue;\n }\n\n sub = recur((it as BaseTrie)[chr]);\n\n (sub ? alt : cc).push(\n (\n chr === '-'\n // eslint-disable-next-line sukka/unicorn/prefer-string-raw -- regexp escape\n ? '\\\\x2d'\n : (\n shouldEscapeChars.has(chr)\n ? '\\\\' + chr\n : chr\n )\n )\n + sub\n );\n }\n\n if (q && sub == null) {\n return '';\n }\n\n cconly = !alt.length;\n\n if (cc.length) {\n alt.push(\n cc[1]\n ? '[' + cc.join('') + ']'\n : cc[0]\n );\n }\n\n re = alt[1]\n ? '(?:' + alt.join('|') + ')'\n : alt[0];\n\n if (q) {\n re = cconly\n ? re + '?'\n : '(?:' + re + ')?';\n }\n\n return re || '';\n }\n return recur(tree);\n };\n\n const toRe = () => new RegExp(\n (asPrefixes ? '^' : '')\n + toString()\n );\n\n return {\n tree,\n add,\n toString,\n toRe\n };\n}\n\nexport function createRetrieKeywordFilter(keywords: ArrayLike<string>, asPrefixes = false) {\n if (keywords.length === 0) {\n return falseFn;\n }\n\n const re = retrie(keywords, asPrefixes).toRe();\n return re.test.bind(re);\n}\n"],"names":["shouldEscapeChars","Set","retrie","keywords","asPrefixes","tree","add","keyword","ref","i","len","length","charAt","toString","recur","it","re","sub","q","cconly","alt","cc","chr","push","has","join","toRe","RegExp","createRetrieKeywordFilter","falseFn","test","bind"],"mappings":"qCAYA,IAAMA,EAAoB,IAAIC,IAAY,CACxC,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACD,EAEM,SAASC,EAAOC,CAA2B,CAAEC,EAAa,CAAA,CAAK,EACpE,IAAMC,EAAa,CAAC,EAEdC,EAAM,CAACH,EAAkBC,SACzBG,EACJ,IAAIC,EAAYH,EAEhB,IAAK,IAAII,EAAI,EAAGC,EAAMP,EAASQ,MAAM,CAAEF,EAAIC,EAAK,EAAED,EAChDF,CAAAA,EAAUJ,EAASS,MAAM,CAACH,EAAAA,IAETD,GACdA,CAAAA,CAAgB,CAACD,EAAQ,CAAGH,EACzB,CAAE,GAAI,EAAG,EACT,CAAC,CAAA,EAGPI,EAAOA,CAAgB,CAACD,EAAQ,AAGlCC,CAAAA,CAAG,CAAC,GAAG,CAAG,EACZ,EAEA,IAAK,IAAIC,EAAI,EAAGC,EAAMP,EAASQ,MAAM,CAAEF,EAAIC,EAAK,EAAED,EAChDH,EAAIH,CAAQ,CAACM,EAAE,CAAEL,GAGnB,IAAMS,EAAW,IA2DRC,AA1DP,CAAA,SAASA,EAAMC,CAAQ,EACrB,IACIC,EACAC,EAFAC,EAAI,CAAA,EAGJC,EAAS,CAAA,EACPC,EAAgB,EAAE,CAClBC,EAAe,EAAE,CAGvB,IAAK,IAAMC,KAAOP,EAAI,CACpB,GAAI,CAACO,EAAK,CACRJ,EAAI,CAAA,EACJ,QACF,CAICD,AAAAA,CAAAA,AAFDA,CAAAA,EAAMH,EAAOC,CAAe,CAACO,EAAI,CAAA,EAE1BF,EAAMC,CAAAA,EAAIE,IAAI,CACnB,AACED,CAAAA,AAAQ,MAARA,EAEI,QAEAtB,EAAkBwB,GAAG,CAACF,GAClB,KAAOA,EACPA,CACN,EAEFL,EAEN,QAEA,AAAIC,GAAKD,AAAO,MAAPA,EACA,IAGTE,EAAS,CAACC,EAAIT,MAAM,CAEhBU,EAAGV,MAAM,EACXS,EAAIG,IAAI,CACNF,CAAE,CAAC,EAAE,CACD,IAAMA,EAAGI,IAAI,CAAC,IAAM,IACpBJ,CAAE,CAAC,EAAE,EAIbL,EAAKI,CAAG,CAAC,EAAE,CACP,MAAQA,EAAIK,IAAI,CAAC,KAAO,IACxBL,CAAG,CAAC,EAAE,CAENF,GACFF,CAAAA,EAAKG,EACDH,EAAK,IACL,MAAQA,EAAK,IAAA,EAGZA,GAAM,GACf,CAAA,EACaX,GAQf,MAAO,CACLA,KAAAA,EACAC,IAAAA,EACAO,SAAAA,EACAa,KATW,IAAM,IAAIC,OACrB,AAACvB,CAAAA,EAAa,IAAM,EAAA,EAClBS,IAQJ,CACF,CAEO,SAASe,EAA0BzB,CAA2B,CAAEC,EAAa,CAAA,CAAK,EACvF,GAAID,AAAoB,IAApBA,EAASQ,MAAM,CACjB,OAAOkB,EAGT,IAAMb,EAAKd,EAAOC,EAAUC,GAAYsB,IAAI,GAC5C,OAAOV,EAAGc,IAAI,CAACC,IAAI,CAACf,EACtB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
interface MemoizeStorageProvider {
|
|
2
|
+
has(key: string): boolean | Promise<boolean>;
|
|
3
|
+
get(key: string): string | undefined | PromiseLike<string | undefined>;
|
|
4
|
+
set(key: string, value: string, ttl: number): void | Promise<void>;
|
|
5
|
+
updateTtl?: (key: string, ttl: number) => void | Promise<void>;
|
|
6
|
+
delete(key: string): void | Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
interface CreateMemoizeOptions {
|
|
9
|
+
/**
|
|
10
|
+
* When set to true, the memoize will always try run the function first.
|
|
11
|
+
* If promise resolved, it will update the cache.
|
|
12
|
+
* If promise rejected, it will try to get the value from cache, and return
|
|
13
|
+
* the cached value. If the cache is not available, it will throw the error.
|
|
14
|
+
*/
|
|
15
|
+
onlyUseCachedIfFail?: boolean;
|
|
16
|
+
resetTtlOnHit?: boolean;
|
|
17
|
+
defaultTtl?: number;
|
|
18
|
+
onCacheUpdate?: (key: string, { humanReadableName }: {
|
|
19
|
+
humanReadableName: string;
|
|
20
|
+
isUseCachedIfFail: boolean;
|
|
21
|
+
}) => void;
|
|
22
|
+
onCacheMiss?: (key: string, { humanReadableName }: {
|
|
23
|
+
humanReadableName: string;
|
|
24
|
+
isUseCachedIfFail: boolean;
|
|
25
|
+
}) => void;
|
|
26
|
+
onCacheHit?: (key: string, { humanReadableName }: {
|
|
27
|
+
humanReadableName: string;
|
|
28
|
+
isUseCachedIfFail: boolean;
|
|
29
|
+
}) => void;
|
|
30
|
+
}
|
|
31
|
+
type SerializableValue = number | string | boolean | bigint | Date | RegExp | Set<SerializableValue> | SerializableValue[] | null | undefined | Map<SerializableValue, SerializableValue> | SerializableObject | /** TypedArray */ Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array | ArrayBuffer;
|
|
32
|
+
interface SerializableObject {
|
|
33
|
+
[key: string]: SerializableValue;
|
|
34
|
+
}
|
|
35
|
+
interface MemoizeBaseOptions {
|
|
36
|
+
/**
|
|
37
|
+
* The time to live of the cache in milliseconds.
|
|
38
|
+
*/
|
|
39
|
+
ttl?: number | null;
|
|
40
|
+
temporaryBypass?: boolean;
|
|
41
|
+
}
|
|
42
|
+
interface MemoizeOptionsWithCustomSerializer<T> extends MemoizeBaseOptions {
|
|
43
|
+
serializer: (value: T) => string;
|
|
44
|
+
deserializer: (cached: string) => T;
|
|
45
|
+
}
|
|
46
|
+
type MemoizeOptions<T> = T extends string ? MemoizeBaseOptions : MemoizeOptionsWithCustomSerializer<T>;
|
|
47
|
+
/**
|
|
48
|
+
* A factory function that returns a memoize function.
|
|
49
|
+
*
|
|
50
|
+
* Unlike common memoize function out there, this serialize the parameters and returned value
|
|
51
|
+
* for easy storing with file system, SQLite, Redis, etc.
|
|
52
|
+
*/
|
|
53
|
+
declare function createMemoize(storage: MemoizeStorageProvider, { onlyUseCachedIfFail, resetTtlOnHit, defaultTtl, onCacheUpdate, onCacheMiss, onCacheHit }?: CreateMemoizeOptions): <Args extends SerializableValue[], R>(fn: (...args: Args) => R | Promise<R>, opt?: MemoizeOptions<R>) => (...args: Args) => Promise<R>;
|
|
54
|
+
|
|
55
|
+
export { type CreateMemoizeOptions, type MemoizeOptions, type MemoizeStorageProvider, type SerializableValue, createMemoize };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{fastStringArrayJoin as e}from"./fast-string-array-join.mjs";import{identity as t}from"./identity.mjs";import{noop as A}from"./noop.mjs";function r(e,t,A,r){return new(A||(A=Promise))(function(t,n){function i(e){try{o(r.next(e))}catch(e){n(e)}}function a(e){try{o(r.throw(e))}catch(e){n(e)}}function o(e){var r;e.done?t(e.value):((r=e.value)instanceof A?r:new A(function(e){e(r)})).then(i,a)}o((r=r.apply(e,[])).next())})}class n{constructor(){this.mutex=Promise.resolve()}lock(){let e=()=>{};return this.mutex=this.mutex.then(()=>new Promise(e)),new Promise(t=>{e=t})}dispatch(e){return r(this,void 0,void 0,function*(){let t=yield this.lock();try{return yield Promise.resolve(e())}finally{t()}})}}let i="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,a=null!==(g=i.Buffer)&&void 0!==g?g:null,o=i.TextEncoder?new i.TextEncoder:null;function l(e,t){return(15&e)+(e>>6|e>>3&8)<<4|(15&t)+(t>>6|t>>3&8)}function f(e,t,A){let r=0;for(let n=0;n<A;n++){let A=t[n]>>>4;e[r++]=A>9?A+87:A+48,A=15&t[n],e[r++]=A>9?A+87:A+48}return String.fromCharCode.apply(null,e)}let s=null!==a?e=>{if("string"==typeof e){let t=a.from(e,"utf8");return new Uint8Array(t.buffer,t.byteOffset,t.length)}if(a.isBuffer(e))return new Uint8Array(e.buffer,e.byteOffset,e.length);if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw Error("Invalid data type!")}:e=>{if("string"==typeof e)return o.encode(e);if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw Error("Invalid data type!")},u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Q=new Uint8Array(256);for(let e=0;e<u.length;e++)Q[u.charCodeAt(e)]=e;let h=new n,C=new Map;new n,new n,new n,new n,new n,new n,new n,new n,new n,new n,new n,new n,new n,new n,new n,new n;var g,I={name:"xxhash64",data:"AGFzbQEAAAABDANgAAF/YAAAYAF/AAMHBgABAgEAAQUEAQECAgYOAn8BQdCJBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwAAw1IYXNoX0dldFN0YXRlAAQOSGFzaF9DYWxjdWxhdGUABQpTVEFURV9TSVpFAwEKmxEGBQBBgAkLYwEBfkEAQgA3A8iJAUEAQQApA4AJIgA3A5CJAUEAIABC+erQ0OfJoeThAHw3A5iJAUEAIABCz9bTvtLHq9lCfDcDiIkBQQAgAELW64Lu6v2J9eAAfDcDgIkBQQBBADYCwIkBC70IAwV/BH4CfwJAIABFDQBBAEEAKQPIiQEgAK18NwPIiQECQEEAKALAiQEiASAAakEfSw0AAkACQCAAQQNxIgINAEGACSEDIAAhAQwBCyAAQXxxIQFBgAkhAwNAQQBBACgCwIkBIgRBAWo2AsCJASAEQaCJAWogAy0AADoAACADQQFqIQMgAkF/aiICDQALCyAAQQRJDQEDQEEAQQAoAsCJASICQQFqNgLAiQEgAkGgiQFqIAMtAAA6AAAgA0EBai0AACECQQBBACgCwIkBIgRBAWo2AsCJASAEQaCJAWogAjoAACADQQJqLQAAIQJBAEEAKALAiQEiBEEBajYCwIkBIARBoIkBaiACOgAAIANBA2otAAAhAkEAQQAoAsCJASIEQQFqNgLAiQEgBEGgiQFqIAI6AAAgA0EEaiEDIAFBfGoiAQ0ADAILCyAAQeAIaiEFAkACQCABDQBBACkDmIkBIQZBACkDkIkBIQdBACkDiIkBIQhBACkDgIkBIQlBgAkhAwwBC0GACSEDAkAgAUEfSw0AQYAJIQMCQAJAQQAgAWtBA3EiBA0AIAEhAgwBCyABIQIDQCACQaCJAWogAy0AADoAACACQQFqIQIgA0EBaiEDIARBf2oiBA0ACwsgAUFjakEDSQ0AQSAgAmshCkEAIQQDQCACIARqIgFBoIkBaiADIARqIgstAAA6AAAgAUGhiQFqIAtBAWotAAA6AAAgAUGiiQFqIAtBAmotAAA6AAAgAUGjiQFqIAtBA2otAAA6AAAgCiAEQQRqIgRHDQALIAMgBGohAwtBAEEAKQOgiQFCz9bTvtLHq9lCfkEAKQOAiQF8Qh+JQoeVr6+Ytt6bnn9+Igk3A4CJAUEAQQApA6iJAULP1tO+0ser2UJ+QQApA4iJAXxCH4lCh5Wvr5i23puef34iCDcDiIkBQQBBACkDsIkBQs/W077Sx6vZQn5BACkDkIkBfEIfiUKHla+vmLbem55/fiIHNwOQiQFBAEEAKQO4iQFCz9bTvtLHq9lCfkEAKQOYiQF8Qh+JQoeVr6+Ytt6bnn9+IgY3A5iJAQsgAEGACWohAgJAIAMgBUsNAANAIAMpAwBCz9bTvtLHq9lCfiAJfEIfiUKHla+vmLbem55/fiEJIANBGGopAwBCz9bTvtLHq9lCfiAGfEIfiUKHla+vmLbem55/fiEGIANBEGopAwBCz9bTvtLHq9lCfiAHfEIfiUKHla+vmLbem55/fiEHIANBCGopAwBCz9bTvtLHq9lCfiAIfEIfiUKHla+vmLbem55/fiEIIANBIGoiAyAFTQ0ACwtBACAGNwOYiQFBACAHNwOQiQFBACAINwOIiQFBACAJNwOAiQFBACACIANrNgLAiQEgAiADRg0AQQAhAgNAIAJBoIkBaiADIAJqLQAAOgAAIAJBAWoiAkEAKALAiQFJDQALCwvlBwIFfgV/AkACQEEAKQPIiQEiAEIgVA0AQQApA4iJASIBQgeJQQApA4CJASICQgGJfEEAKQOQiQEiA0IMiXxBACkDmIkBIgRCEol8IAJCz9bTvtLHq9lCfkIfiUKHla+vmLbem55/foVCh5Wvr5i23puef35C49zKlfzO8vWFf3wgAULP1tO+0ser2UJ+Qh+JQoeVr6+Ytt6bnn9+hUKHla+vmLbem55/fkLj3MqV/M7y9YV/fCADQs/W077Sx6vZQn5CH4lCh5Wvr5i23puef36FQoeVr6+Ytt6bnn9+QuPcypX8zvL1hX98IARCz9bTvtLHq9lCfkIfiUKHla+vmLbem55/foVCh5Wvr5i23puef35C49zKlfzO8vWFf3whAQwBC0EAKQOQiQFCxc/ZsvHluuonfCEBCyABIAB8IQBBoIkBIQVBqIkBIQYCQEEAKALAiQEiB0GgiQFqIghBqIkBSQ0AQaCJASEFAkAgB0F4aiIJQQhxDQBBACkDoIkBQs/W077Sx6vZQn5CH4lCh5Wvr5i23puef34gAIVCG4lCh5Wvr5i23puef35C49zKlfzO8vWFf3whAEGwiQEhBkGoiQEhBSAJQQhJDQELA0AgBikDAELP1tO+0ser2UJ+Qh+JQoeVr6+Ytt6bnn9+IAUpAwBCz9bTvtLHq9lCfkIfiUKHla+vmLbem55/fiAAhUIbiUKHla+vmLbem55/fkLj3MqV/M7y9YV/fIVCG4lCh5Wvr5i23puef35C49zKlfzO8vWFf3whACAGQQhqIQUgBkEQaiIGIAhNDQALIAZBeGohBQsCQAJAIAVBBGoiCSAITQ0AIAUhCQwBCyAFNQIAQoeVr6+Ytt6bnn9+IACFQheJQs/W077Sx6vZQn5C+fPd8Zn2masWfCEACwJAIAkgCEYNACAHQZ+JAWohBQJAAkAgByAJa0EBcQ0AIAkhBgwBCyAJQQFqIQYgCTEAAELFz9my8eW66id+IACFQguJQoeVr6+Ytt6bnn9+IQALIAUgCUYNAANAIAZBAWoxAABCxc/ZsvHluuonfiAGMQAAQsXP2bLx5brqJ34gAIVCC4lCh5Wvr5i23puef36FQguJQoeVr6+Ytt6bnn9+IQAgBkECaiIGIAhHDQALC0EAIABCIYggAIVCz9bTvtLHq9lCfiIAQh2IIACFQvnz3fGZ9pmrFn4iAEIgiCAAhSIBQjiGIAFCgP4Dg0IohoQgAUKAgPwHg0IYhiABQoCAgPgPg0IIhoSEIABCCIhCgICA+A+DIABCGIhCgID8B4OEIABCKIhCgP4DgyAAQjiIhISENwOACQsGAEGAiQELAgALCwsBAEGACAsEUAAAAA==",hash:"177fbfa3"};let c=new n,B=null,w=new Uint8Array(8);function y(e){return!Number.isInteger(e)||e<0||e>0xffffffff?Error("Seed must be given as two valid 32-bit long unsigned integers (lo + high)."):null}function E(e,t,A){let r=new DataView(e);r.setUint32(0,t,!0),r.setUint32(4,A,!0)}function b(e,t=0,A=0){if(y(t))return Promise.reject(y(t));if(y(A))return Promise.reject(y(A));if(null===B)return(function(e,t,A){return r(this,void 0,void 0,function*(){let A=yield e.lock(),n=yield function(e,t){return r(this,void 0,void 0,function*(){let A=null,n=null,i=!1;if("undefined"==typeof WebAssembly)throw Error("WebAssembly is not supported in this environment!");let a=()=>new DataView(A.exports.memory.buffer).getUint32(A.exports.STATE_SIZE,!0),o=h.dispatch(()=>r(this,void 0,void 0,function*(){if(!C.has(e.name)){let t=function(e){let t=function(e){let t=Math.floor(.75*e.length),A=e.length;return"="===e[A-1]&&(t-=1,"="===e[A-2]&&(t-=1)),t}(e),A=e.length,r=new Uint8Array(t),n=0;for(let t=0;t<A;t+=4){let A=Q[e.charCodeAt(t)],i=Q[e.charCodeAt(t+1)],a=Q[e.charCodeAt(t+2)],o=Q[e.charCodeAt(t+3)];r[n]=A<<2|i>>4,r[n+=1]=(15&i)<<4|a>>2,r[n+=1]=(3&a)<<6|63&o,n+=1}return r}(e.data),A=WebAssembly.compile(t);C.set(e.name,A)}let t=yield C.get(e.name);A=yield WebAssembly.instantiate(t,{})})),u=(e=null)=>{i=!0,A.exports.Hash_Init(e)},g=e=>{let t=0;for(;t<e.length;){let r=e.subarray(t,t+16384);t+=r.length,n.set(r),A.exports.Hash_Update(r.length)}},I=e=>{if(!i)throw Error("update() called before init()");g(s(e))},c=new Uint8Array(16),B=(e,r=null)=>{if(!i)throw Error("digest() called before init()");return(i=!1,A.exports.Hash_Final(r),"binary"===e)?n.slice(0,t):f(c,n,t)},w=e=>"string"==typeof e?e.length<4096:e.byteLength<16384,y=w;switch(e.name){case"argon2":case"scrypt":y=()=>!0;break;case"blake2b":case"blake2s":y=(e,t)=>t<=512&&w(e);break;case"blake3":y=(e,t)=>0===t&&w(e);break;case"xxhash64":case"xxhash3":case"xxhash128":case"crc64":y=()=>!1}return yield r(this,void 0,void 0,function*(){A||(yield o);let e=A.exports.Hash_GetBuffer();n=new Uint8Array(A.exports.memory.buffer,e,16384)}),{getMemory:()=>n,writeMemory:(e,t=0)=>{n.set(e,t)},getExports:()=>A.exports,setMemorySize:e=>{A.exports.Hash_SetMemorySize(e);let t=A.exports.Hash_GetBuffer();n=new Uint8Array(A.exports.memory.buffer,t,e)},init:u,update:I,digest:B,save:()=>{if(!i)throw Error("save() can only be called after init() and before digest()");let t=A.exports.Hash_GetState(),r=a(),n=new Uint8Array(A.exports.memory.buffer,t,r),o=new Uint8Array(4+r);return function(e,t){let A=t.length>>1;for(let r=0;r<A;r++){let A=r<<1;e[r]=l(t.charCodeAt(A),t.charCodeAt(A+1))}}(o,e.hash),o.set(n,4),o},load:t=>{if(!(t instanceof Uint8Array))throw Error("load() expects an Uint8Array generated by save()");let r=A.exports.Hash_GetState(),n=a(),o=4+n,f=A.exports.memory.buffer;if(t.length!==o)throw Error(`Bad state length (expected ${o} bytes, got ${t.length})`);if(!function(e,t){if(e.length!==2*t.length)return!1;for(let A=0;A<t.length;A++){let r=A<<1;if(t[A]!==l(e.charCodeAt(r),e.charCodeAt(r+1)))return!1}return!0}(e.hash,t.subarray(0,4)))throw Error("This state was written by an incompatible hash implementation");let s=t.subarray(4);new Uint8Array(f,r,n).set(s),i=!0},calculate:(e,r=null,i=null)=>{if(!y(e,r))return u(r),I(e),B("hex",i);let a=s(e);return n.set(a),A.exports.Hash_Calculate(a.length,r,i),f(c,n,t)},hashLength:t}})}(t,8);return A(),n})})(c,I,0).then(r=>(B=r,E(w.buffer,t,A),B.writeMemory(w),B.calculate(e)));try{E(w.buffer,t,A),B.writeMemory(w);let r=B.calculate(e);return Promise.resolve(r)}catch(e){return Promise.reject(e)}}new n,new n,new n,new n,new n;class d extends Error{constructor(e,t){super(e),this.name="DevalueError",this.path=t.join("")}}function p(e){return Object(e)!==e}let m=Object.getOwnPropertyNames(Object.prototype).sort().join("\0");function k(e){let t="",A=0,r=e.length;for(let n=0;n<r;n+=1){let r=function(e){switch(e){case'"':return'\\"';case"<":return"\\u003C";case"\\":return"\\\\";case"\n":return"\\n";case"\r":return"\\r";case" ":return"\\t";case"\b":return"\\b";case"\f":return"\\f";case"\u2028":return"\\u2028";case"\u2029":return"\\u2029";default:return e<" "?`\\u${e.charCodeAt(0).toString(16).padStart(4,"0")}`:""}}(e[n]);r&&(t+=e.slice(A,n)+r,A=n+1)}return`"${0===A?e:t+e.slice(A)}"`}let v=/^[a-zA-Z_$][a-zA-Z_$0-9]*$/;function U(e){return v.test(e)?"."+e:"["+JSON.stringify(e)+"]"}function F(e){let t=new DataView(e),A="";for(let r=0;r<e.byteLength;r++)A+=String.fromCharCode(t.getUint8(r));return function(e){let t="";for(let A=0;A<e.length;A+=3){let r=[void 0,void 0,void 0,void 0];r[0]=e.charCodeAt(A)>>2,r[1]=(3&e.charCodeAt(A))<<4,e.length>A+1&&(r[1]|=e.charCodeAt(A+1)>>4,r[2]=(15&e.charCodeAt(A+1))<<2),e.length>A+2&&(r[2]|=e.charCodeAt(A+2)>>6,r[3]=63&e.charCodeAt(A+2));for(let e=0;e<r.length;e++)void 0===r[e]?t+="=":t+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[r[e]]}return t}(A)}function J(e){let t=typeof e;return"string"===t?k(e):e instanceof String?k(e.toString()):void 0===e?"-1":0===e&&1/e<0?"-6":"bigint"===t?`["BigInt","${e}"]`:String(e)}function x(r,{onlyUseCachedIfFail:n=!1,resetTtlOnHit:i=!1,defaultTtl:a=6048e5,onCacheUpdate:o=A,onCacheMiss:l=A,onCacheHit:f=A}={}){return function(A,s){if(s?.temporaryBypass)return(...e)=>Promise.resolve(A(...e));let u=s&&"serializer"in s?s.serializer:t,Q=s&&"deserializer"in s?s.deserializer:t,h=s?.ttl??a,C=A.toString(),g=b(C);return async function(...t){let a=e(await Promise.all([g,b(function(e,t){let A=[],r=new Map,n=[],i=[],a=0,o=function e(t){if("function"==typeof t)throw new d("Cannot stringify a function",i);if(r.has(t))return r.get(t);if(void 0===t)return -1;if(Number.isNaN(t))return -3;if(t===1/0)return -4;if(t===-1/0)return -5;if(0===t&&1/t<0)return -6;let o=a++;for(let{key:i,fn:a}of(r.set(t,o),n)){let r=a(t);if(r)return A[o]=`["${i}",${e(r)}]`,o}let l="";if(p(t))l=J(t);else{let A=Object.prototype.toString.call(t).slice(8,-1);switch(A){case"Number":case"String":case"Boolean":l=`["Object",${J(t)}]`;break;case"BigInt":l=`["BigInt",${t}]`;break;case"Date":let r=!isNaN(t.getDate());l=`["Date","${r?t.toISOString():""}"]`;break;case"RegExp":let{source:n,flags:a}=t;l=a?`["RegExp",${k(n)},"${a}"]`:`["RegExp",${k(n)}]`;break;case"Array":l="[";for(let A=0;A<t.length;A+=1)A>0&&(l+=","),A in t?(i.push(`[${A}]`),l+=e(t[A]),i.pop()):l+=-2;l+="]";break;case"Set":for(let A of(l='["Set"',t))l+=`,${e(A)}`;l+="]";break;case"Map":for(let[A,r]of(l='["Map"',t))i.push(`.get(${p(A)?J(A):"..."})`),l+=`,${e(A)},${e(r)}`,i.pop();l+="]";break;case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"BigInt64Array":case"BigUint64Array":l='["'+A+'","'+F(t.buffer)+'"]';break;case"ArrayBuffer":{let e=F(t);l=`["ArrayBuffer","${e}"]`;break}default:if(!function(e){let t=Object.getPrototypeOf(e);return t===Object.prototype||null===t||Object.getOwnPropertyNames(t).sort().join("\0")===m}(t))throw new d("Cannot stringify arbitrary non-POJOs",i);if(Object.getOwnPropertySymbols(t).filter(e=>Object.getOwnPropertyDescriptor(t,e).enumerable).length>0)throw new d("Cannot stringify POJOs with symbolic keys",i);if(null===Object.getPrototypeOf(t)){for(let A in l='["null"',t)i.push(U(A)),l+=`,${k(A)},${e(t[A])}`,i.pop();l+="]"}else{l="{";let A=!1;for(let r in t)A&&(l+=","),A=!0,i.push(U(r)),l+=`${k(r)}:${e(t[r])}`,i.pop();l+="}"}}}return A[o]=l,o}(e);return o<0?`${o}`:`[${A.join(",")}]`}(t))]),"|"),s=A.name||C||a,I=r.get(a);if(I&&"object"==typeof I&&"then"in I&&(I=await I),n)try{let e=await A(...t);o(a,{humanReadableName:s,isUseCachedIfFail:!0});let n=r.set(a,u(e),h);return n&&"then"in n&&await n,e}catch(e){if(null==I)throw l(a,{humanReadableName:s,isUseCachedIfFail:!0}),e;if(i){let e=r.updateTtl?.(a,h);e&&"then"in e&&await e}return f(a,{humanReadableName:s,isUseCachedIfFail:!0}),Q(I)}else{if(null==I){l(a,{humanReadableName:s,isUseCachedIfFail:!1});let e=await A(...t),n=r.set(a,u(e),h);return n&&"then"in n&&await n,e}if(f(a,{humanReadableName:s,isUseCachedIfFail:!1}),i){let e=r.updateTtl?.(a,h);e&&"then"in e&&await e}return Q(I)}}}}export{x as createMemoize};
|
|
2
|
+
//# sourceMappingURL=serialized-memo.mjs.map
|